pax_global_header00006660000000000000000000000064151371011060014505gustar00rootroot0000000000000052 comment=68f379c629cf2c7594f144aeb611d0be44ff31c7 onedrive-2.5.10/000077500000000000000000000000001513710110600134055ustar00rootroot00000000000000onedrive-2.5.10/.github/000077500000000000000000000000001513710110600147455ustar00rootroot00000000000000onedrive-2.5.10/.github/FUNDING.yml000066400000000000000000000000261513710110600165600ustar00rootroot00000000000000--- github: abrauneggonedrive-2.5.10/.github/ISSUE_TEMPLATE/000077500000000000000000000000001513710110600171305ustar00rootroot00000000000000onedrive-2.5.10/.github/ISSUE_TEMPLATE/bug_report.yml000066400000000000000000000125671513710110600220360ustar00rootroot00000000000000name: "Bug Report" description: Before proceeding, please ensure your issue is a genuine software bug. This form is exclusively for reporting actual software bugs that need fixing. For other items, use GitHub Discussions instead. title: "Bug: " labels: ["Bug"] body: - type: markdown attributes: value: | **Note:** Before submitting a bug report, please ensure you are running the latest 'onedrive' client as built from 'master' and compile by using the latest available DMD or LDC compiler. Refer to the [install](https://github.com/abraunegg/onedrive/blob/master/docs/install.md) document on how to build the client for your system. - type: textarea id: bugDescription attributes: label: Describe the bug description: | Add a clear and concise description of what you think the bug is. validations: required: true - type: textarea id: operatingSystemDetails attributes: label: Operating System Details description: | * What is your Operating System (`uname -a`) * Output of: (`cat /etc/redhat-release`) or (`lsb_release -a`) render: shell validations: required: true - type: dropdown id: installMethod attributes: label: Client Installation Method description: | How did you install the client? multiple: false options: - From Source - From Distribution Package - From 3rd Party Source (PPA, OpenSuSE Build Service etc) validations: required: true - type: dropdown id: accountType attributes: label: OneDrive Account Type description: | What is your OneDrive Account Type? multiple: false options: - Personal - Business | Office365 - SharePoint validations: required: true - type: input id: applicationVersion attributes: label: What is your OneDrive Application Version description: | * What is your 'onedrive' client version (`onedrive --version`)? validations: required: true - type: textarea id: applicationConfig attributes: label: What is your OneDrive Application Configuration description: | * What is your Application Configuration (`onedrive --display-config`)? render: shell validations: required: true - type: textarea id: curlVersion attributes: label: What is your 'curl' version description: | * What is your output of (`curl --version`)? render: shell validations: required: true - type: dropdown id: syncdirLocation attributes: label: Where is your 'sync_dir' located description: | Is your 'sync_dir' a local directory or on a network mount point? multiple: false options: - Local - Network validations: required: true - type: textarea id: mountPoints attributes: label: What are all your system 'mount points' description: | * What is your output of (`mount`)? render: shell validations: required: true - type: textarea id: partitionTypes attributes: label: What are all your local file system partition types description: | * What is your output of (`lsblk -f`)? render: shell validations: required: true - type: textarea id: usageDetails attributes: label: How do you use 'onedrive' description: | Explain your entire configuration setup - is the OneDrive folder shared with any other system, shared with any other platform at the same time, is the OneDrive account you use shared across multiple systems / platforms / Operating Systems and in use at the same time validations: required: true - type: textarea id: howToReproduce attributes: label: Steps to reproduce the behaviour description: | List all the steps required to reproduce the issue. If issue is replicated by a specific 'file' or 'path' please archive the file and path tree & email to support@mynas.com.au validations: required: true - type: textarea id: applicationVerboseLog attributes: label: Complete Verbose Log Output description: | A clear and full log of the problem when running the application in the following manner (ie, not in monitor mode): (`onedrive --synchronize --verbose `) Run the application in a separate terminal window or SSH session and provide the entire application output including the error & crash. Please also generate a full debug log whilst reproducing the issue as per [https://github.com/abraunegg/onedrive/wiki/Generate-debug-log-for-support](https://github.com/abraunegg/onedrive/wiki/Generate-debug-log-for-support) and email to support@mynas.com.au render: shell validations: required: true - type: textarea id: screenshots attributes: label: Screenshots description: | If applicable, add screenshots to help explain your problem. - type: textarea id: otherLogs attributes: label: Other Log Information or Details description: | If applicable, add the relevant output from `dmesg` or similar. render: shell - type: textarea id: additionalContext attributes: label: Additional context description: | Add any other relevant additional context for the problem. onedrive-2.5.10/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000011321513710110600211150ustar00rootroot00000000000000blank_issues_enabled: false contact_links: - name: "Have a question?" url: https://github.com/abraunegg/onedrive/discussions about: "Please refrain from using GitHub Issues for asking questions or reporting non-software bugs. Instead, post your questions, installation issues, dependency concerns, or anything else that isn't a software bug under GitHub Discussions. When starting a new GitHub Discussion, be sure to include all relevant details, such as your application version and installation method. Thank you for helping us keep the issue tracker focused on actual software bugs!" onedrive-2.5.10/.github/ISSUE_TEMPLATE/feature_request.yml000066400000000000000000000023341513710110600230600ustar00rootroot00000000000000name: "Feature Request" description: Suggest an idea for this project title: "Feature Request: " labels: ["Feature Request"] body: - type: markdown attributes: value: | Suggest an idea for this project - type: textarea id: featureProblem attributes: label: Is your feature request related to a problem? Please describe. description: | A clear and concise description of what the problem is. Ex. I'm always frustrated when ... validations: required: true - type: textarea id: featureSolution attributes: label: Describe the solution you'd like description: | A clear and concise description of what you want to happen. validations: required: true - type: textarea id: featureAlternatives attributes: label: Describe alternatives you've considered description: | A clear and concise description of any alternative solutions or features you've considered. validations: required: true - type: textarea id: additionalContext attributes: label: Additional context description: | Add any other context or information about the feature request here. validations: required: falseonedrive-2.5.10/.github/actions/000077500000000000000000000000001513710110600164055ustar00rootroot00000000000000onedrive-2.5.10/.github/actions/spelling/000077500000000000000000000000001513710110600202225ustar00rootroot00000000000000onedrive-2.5.10/.github/actions/spelling/allow.txt000066400000000000000000000113441513710110600221040ustar00rootroot00000000000000# # Allowed words not found in configured dictionaries # AADSTS aarch abraunegg accrights accrightslen adamdruppe ADand addrepo Adevice adr Agrant ags Aietf aip alex alpinelinux annobin antix Aoauth aothmane Aparams apng archlinux ARequest armhf ARMv arsd arsdnet artix ASCIIHTML ASpurious AThings attrnamespace aufxw aur autocheckpoint autoclean automake autoprocess autoupdate avmkfdiitirnrenzljwc avx bak baus BBBA BBD bcdefghi beffdb bhref bindir bir blargh bools bpozdena brp Btrfs btw buflen bugzilla builddir buildfiles buildroot bytecompile bytesleft cancelfd CApath cattr cbf ccc Ccodegen Cdebuginfo certbot Cforce checkinterval chkconfig chpst chrooted classinfo clen cloexec Cloudflare cmptr cmsghdr codacy commandline concated confdir constness controllen crt Cstrip ctl ctls cvs cyb datadir dchar dcompiler debian debuginfo dechunk Deepin deimos desynchronisation devicecode devuan DHAO dhparams dirmask dlang dlclose dlfcn dlnow dltotal dmd dnf dnotify Dockerfiles dotfile dphys dri driveid driveone druntime drwx drwxr drwxrwxr dryrun DTime Dynu EIOv eis ele endinaness enduml Entra envp eopkg epel epfd eselect estr eventfd evt extattr fasynchronous fbc fcf fcgid fcgienv FCGX fcontext fedoraproject fefefe fexceptions ffat FFFD fhandler flto fno fracsec fstack FState fullchain fullscan gdc gdk gerror getenforce getxattr gfortran GFree Gibi GKXPN gmake gmodule GObject gosu gpg GPLv GPOs grecord groupinstall gshared gtk GVariant hdrs hideonindex hnsecs hostport hotmail howto hskrieg htons idk idlol idup ietf ifrom includedir ine infodir initted initval inodes intercambio iocp ioop ioops iov iovec iovlen ipresolve isv itemdb itimerspec journalctl jsvar kdbx kde keepass keyboxd keyutils kotlin krb kservices kubuntu lalen lbl Lcode lcurl ldbus ldc ldconfig ldl ldmd letsencrypt lgdk lgio lglib lgobject libcom libcrypto libdbus libdir libdruntime libedit libexec libexecdir libgcc libgdk libgio libgl libglapi libglib libglx libgobject libidn libinotify libkadm liblphobos libm libmalcontent libmpc libnghttp libnotify libpam libphobos libpsl libqt libsepol libsqlite libssh libverto libxatracker libxcrypt Lighttpd lintian llclose llsend lnotify localstatedir lol lpdw lpfn lrwxrwxrwx lsb lsqlite ltmain Lyncredible makepkg mangleof maxfiles mayne mbr memtest microsoftonline mkbuilddir mno mnt mountpoint mozram msghdr msonenote mswsock mtls mtune mydir mynasau myuser myusername nadded nadjusted namelen nas nativeclient nbd nbytes ncache nconnection ndata netinet nev nevent newfd newfile nexisting nfds nfor nintegrity niop noar noarch nobj nodelay nolan nomount nosignal nosync notif nph nrecords ntfs nto nuntil nupgrade nupload nvia objectsx odata ofonedrive onbinarymessage onedrive onenote onetoc onlydeps onmicrosoft ontextmessage oob opensuse outp overallocated pacman pamac parentid passoff pastebin permessage pfa PFN phlibi phobos pidx pii pixbuf pkgconf pkgconfig pki pkolmann podman pollfd pollfds postfields postfieldsize postun prefork preinit preun privkey Privs prt prueba prw Pseudoblocking publicsuffix puml Pwy pycache qewrqwerwqer Qmark qpos QWords qxor raf ralen raspberrypi raspi raspios rbtree rdo readdata readln readret reauth Recvd recvfd redhat relocs relro repology restic restorecon retryable retu revents rko rlc rlim rlimit robertschulze rpaths rpcing rpmbuild rpmlib rpmuncompress Rproj rrodrigueznt rsnapshot rsv rtud rul runstatedir runsvdir Ruppe rwxr safebackup sargs sbindir scgi scl sdlang Searchmonkey semanage sendfd setsebool settime setxattr sev sfn sharedstatedir sharepoint shortnames sidx sigaction sigchldhandler sigemptyset signo sigpipe skilion skinparam slist Sockaddrs socketio somevar sooooo specpart SSLVERSION startuml stat'ing statm stdc stringof Stringz subobject subobjects svdir swapfile swapon swp symcode syncable syncdir sysconf sysconfdir systemdsystemunitdir systemduserunitdir sysv tbh tdcockers tempauth templ testbuild Thh thnk tidx timerfd tkx tlsv trashinfo Tting tval typecons uda udas ulnow uload ultotal undefiened unistd unittests urlify userinfo usermod userns userpass usl valgrind verifypeer vsid vti wal websockets webtemplate weburl Werror wpath writefln wrt wtf xbel xca xcbac xdeadbeef xdg xlaunch xof xored XXYYZZ yann yourapp yourdomain yourfile yourprogram zorin zypper onedrive-2.5.10/.github/actions/spelling/excludes.txt000066400000000000000000000002001513710110600225670ustar00rootroot00000000000000# Ignore the action's configuration data ^\.github/action/spelling/ # Ignore all GitHub workflow files ^\.github/workflows/ onedrive-2.5.10/.github/actions/spelling/only.txt000066400000000000000000000001721513710110600217440ustar00rootroot00000000000000# Only process the following files # *.md # onedrive.1.in # *.d # *.puml \.md$ \.d$ \.puml$ ^onedrive\\.1\\.in$ onedrive-2.5.10/.github/actions/spelling/patterns.txt000066400000000000000000000017331513710110600226270ustar00rootroot00000000000000# https/http/file urls (?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/*%?=~_|!:,.;]+[-A-Za-z0-9+&@#/*%=~_|] # uuid: \b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b # sha256: \bsha256:[0-9a-fA-F]{64}\b # sha256 string without any prefix \b[0-9a-fA-F]{64}\b # 32 character string as generated from /dev/urandom \b[a-zA-Z0-9]{32}\b # 16 character string as generated from /dev/urandom \b[a-zA-Z0-9]{16}\b # Microsoft URL's \b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]* # Microsoft OneDrive Business Account DriveID identifiers \b[bB]![A-Za-z0-9_-]{64}\b # UTF-16 Hex Values \b0x(?:D[89A-F][0-9A-F]{2}|E[0-9A-F]{3}|F[0-9A-F]{3})\b # man troff content # https://www.gnu.org/software/groff/manual/groff.html \\f[BCIPR] # All UPPERCASE letters only (no underscores) \b[A-Z]+\b # Ignore UPPERCASE letters separated by an underscore '_' \b[A-Z]+(?:_[A-Z]+)*\b onedrive-2.5.10/.github/workflows/000077500000000000000000000000001513710110600170025ustar00rootroot00000000000000onedrive-2.5.10/.github/workflows/docker.yaml000066400000000000000000000056001513710110600211360ustar00rootroot00000000000000name: Build Docker Images on: push: branches: [ master ] tags: [ 'v*' ] pull_request: # Comment these out to force a test build on a PR branches: - master types: [closed] env: DOCKER_HUB_SLUG: driveone/onedrive jobs: build: # Comment this out to force a test build on a PR if: (!(github.event.action == 'closed' && github.event.pull_request.merged != true)) # Build runs on runs-on: ubuntu-latest strategy: matrix: flavor: [ fedora, debian, alpine ] include: - flavor: fedora dockerfile: ./contrib/docker/Dockerfile platforms: linux/amd64,linux/arm64 - flavor: debian dockerfile: ./contrib/docker/Dockerfile-debian platforms: linux/386,linux/amd64,linux/arm64,linux/arm/v7 - flavor: alpine dockerfile: ./contrib/docker/Dockerfile-alpine platforms: linux/amd64,linux/arm64 steps: - name: Check out code from GitHub uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Docker meta id: docker_meta uses: marcelcoding/ghaction-docker-meta@v2 with: tag-edge: true images: | ${{ env.DOCKER_HUB_SLUG }} tag-semver: | {{version}} {{major}}.{{minor}} flavor: ${{ matrix.flavor }} main-flavor: ${{ matrix.flavor == 'debian' }} - uses: docker/setup-qemu-action@v3 with: image: tonistiigi/binfmt:latest platforms: all if: matrix.platforms != 'linux/amd64' - uses: docker/setup-buildx-action@v3 - name: Cache Docker layers uses: actions/cache@v4 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ matrix.flavor }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx-${{ matrix.flavor }} - name: Login to Docker Hub uses: docker/login-action@v3 if: github.event_name != 'pull_request' with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Build and Push to Docker uses: docker/build-push-action@v6 with: context: . file: ${{ matrix.dockerfile }} platforms: ${{ matrix.platforms }} push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache-new - name: Move cache run: | rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache onedrive-2.5.10/.github/workflows/lock.yml000066400000000000000000000021221513710110600204520ustar00rootroot00000000000000name: 'Lock Threads' on: schedule: - cron: '19 0 * * *' jobs: lock: runs-on: ubuntu-latest steps: - name: Lock Threads uses: dessant/lock-threads@v2.0.3 with: github-token: ${{ secrets.LOCK_THREADS }} issue-lock-inactive-days: '7' issue-exclude-created-before: '' issue-exclude-labels: '' issue-lock-labels: '' issue-lock-comment: > This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. issue-lock-reason: 'resolved' pr-lock-inactive-days: '7' pr-exclude-created-before: '' pr-exclude-labels: '' pr-lock-labels: '' pr-lock-comment: > This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. pr-lock-reason: '' process-only: '' onedrive-2.5.10/.github/workflows/spellcheck.yaml000066400000000000000000000164141513710110600220110ustar00rootroot00000000000000name: Check Spelling # Comment management is handled through a secondary job, for details see: # https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions # # `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment # (in odd cases, it might actually run just to collapse a comment, but that's fairly rare) # it needs `contents: write` in order to add a comment. # # `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment # or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment) # it needs `pull-requests: write` in order to manipulate those comments. # Updating pull request branches is managed via comment handling. # For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list # # These elements work together to make it happen: # # `on.issue_comment` # This event listens to comments by users asking to update the metadata. # # `jobs.update` # This job runs in response to an issue_comment and will push a new commit # to update the spelling metadata. # # `with.experimental_apply_changes_via_bot` # Tells the action to support and generate messages that enable it # to make a commit to update the spelling metadata. # # `with.ssh_key` # In order to trigger workflows when the commit is made, you can provide a # secret (typically, a write-enabled github deploy key). # # For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key # Sarif reporting # # Access to Sarif reports is generally restricted (by GitHub) to members of the repository. # # Requires enabling `security-events: write` # and configuring the action with `use_sarif: 1` # # For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output # Minimal workflow structure: # # on: # push: # ... # pull_request_target: # ... # jobs: # # you only want the spelling job, all others should be omitted # spelling: # # remove `security-events: write` and `use_sarif: 1` # # remove `experimental_apply_changes_via_bot: 1` # ... otherwise adjust the `with:` as you wish on: push: branches: - "**" tags-ignore: - "**" pull_request_target: branches: - "**" types: - 'opened' - 'reopened' - 'synchronize' issue_comment: types: - 'created' jobs: spelling: name: Check Spelling permissions: contents: read pull-requests: read actions: read security-events: write outputs: followup: ${{ steps.spelling.outputs.followup }} runs-on: ubuntu-latest if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }} concurrency: group: spelling-${{ github.event.pull_request.number || github.ref }} # note: If you use only_check_changed_files, you do not want cancel-in-progress cancel-in-progress: true steps: - name: check-spelling id: spelling uses: check-spelling/check-spelling@main with: suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }} checkout: true check_file_names: 0 spell_check_this: check-spelling/spell-check-this@prerelease post_comment: 0 use_magic_file: 1 report-timing: 1 warnings: bad-regex,binary-file,deprecated-feature,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check experimental_apply_changes_via_bot: 1 use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }} extra_dictionary_limit: 40 extra_dictionaries: cspell:en_AU/src/hunspell-en_AU-large/en_AU-large.dic cspell:en_GB/src/hunspell/en_GB.dic cspell:software-terms/dict/softwareTerms.txt cspell:php/dict/php.txt cspell:node/dict/node.txt cspell:python/src/python/python-lib.txt cspell:python/src/common/extra.txt cspell:shell/dict/shell-all-words.txt cspell:filetypes/filetypes.txt cspell:k8s/dict/k8s.txt cspell:fullstack/dict/fullstack.txt cspell:golang/dict/go.txt cspell:aws/aws.txt cspell:java/src/java-terms.txt cspell:java/src/java.txt cspell:html/dict/html.txt cspell:typescript/dict/typescript.txt cspell:cpp/src/stdlib-c.txt cspell:dotnet/dict/dotnet.txt cspell:cpp/src/compiler-msvc.txt cspell:cpp/src/stdlib-cpp.txt cspell:cpp/src/ecosystem.txt cspell:r/src/r.txt cspell:cpp/src/compiler-gcc.txt cspell:rust/dict/rust.txt cspell:swift/src/swift.txt cspell:css/dict/css.txt cspell:cpp/src/lang-jargon.txt cspell:docker/src/docker-words.txt cspell:csharp/csharp.txt cspell:clojure/src/clojure.txt cspell:public-licenses/src/generated/public-licenses.txt cspell:lisp/lisp.txt cspell:django/dict/django.txt comment-push: name: Report (Push) # If your workflow isn't running on push, you can remove this job runs-on: ubuntu-latest needs: spelling permissions: contents: write if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push' steps: - name: comment uses: check-spelling/check-spelling@main with: checkout: true spell_check_this: check-spelling/spell-check-this@prerelease task: ${{ needs.spelling.outputs.followup }} comment-pr: name: Report (PR) # If you workflow isn't running on pull_request*, you can remove this job runs-on: ubuntu-latest needs: spelling permissions: contents: read pull-requests: write if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') steps: - name: comment uses: check-spelling/check-spelling@main with: checkout: true spell_check_this: check-spelling/spell-check-this@prerelease task: ${{ needs.spelling.outputs.followup }} experimental_apply_changes_via_bot: 1 update: name: Update PR permissions: contents: write pull-requests: write actions: read runs-on: ubuntu-latest if: ${{ github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '@check-spelling-bot apply') }} concurrency: group: spelling-update-${{ github.event.issue.number }} cancel-in-progress: false steps: - name: apply spelling updates uses: check-spelling/check-spelling@main with: experimental_apply_changes_via_bot: 1 checkout: true ssh_key: "${{ secrets.CHECK_SPELLING }}"onedrive-2.5.10/.github/workflows/testbuild.yaml000066400000000000000000000014731513710110600216720ustar00rootroot00000000000000name: Test Build on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest steps: - name: Check out code from GitHub uses: actions/checkout@v3 with: submodules: recursive fetch-depth: 0 - name: Update Image run: | sudo apt-get clean sudo apt-get update -y - name: Install build-essential run: sudo apt install -y build-essential - name: Install build-dependencies run: sudo apt install -y libcurl4-openssl-dev libsqlite3-dev pkg-config git curl ldc libdbus-1-dev - name: Configure run: ./configure - name: Compile run: make clean; make; - name: Install run: sudo make install - name: Run run: onedrive --versiononedrive-2.5.10/.gitignore000066400000000000000000000006461513710110600154030ustar00rootroot00000000000000.* onedrive onedrive.1 onedrive.o version Makefile config.log config.status autom4te.cache/ contrib/pacman/PKGBUILD contrib/spec/onedrive.spec contrib/systemd/onedrive.service contrib/systemd/onedrive@.service # Ignore everything in the .github folder .github/* # Allow actions/spelling in .github !.github/actions/spelling/ # Ensure spellcheck.yaml in .github is not ignored !.github/actions/spelling/spellcheck.yaml onedrive-2.5.10/LICENSE000066400000000000000000001045151513710110600144200ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . onedrive-2.5.10/Makefile.in000066400000000000000000000150631513710110600154570ustar00rootroot00000000000000package = @PACKAGE_NAME@ version = @PACKAGE_VERSION@ prefix = @prefix@ # we don't use @exec_prefix@ because it usually contains '${prefix}' literally # but we use @prefix@/bin/onedrive in the systemd unit files which are generated # from the configure script. # Thus, set exec_prefix unconditionally to prefix # Alternative approach would be add dep on sed, and do manual generation in the Makefile. # exec_prefix = @exec_prefix@ exec_prefix = @prefix@ datarootdir = @datarootdir@ datadir = @datadir@ srcdir = @srcdir@ bindir = @bindir@ mandir = @mandir@ sysconfdir = @sysconfdir@ docdir = $(datadir)/doc/$(package) VPATH = @srcdir@ INSTALL = @INSTALL@ # Icon install locations (system-wide hicolor theme) ICON_THEMEDIR = $(datadir)/icons/hicolor ICON_PLACES_DIR = $(ICON_THEMEDIR)/scalable/places ICON_SOURCE_SVG = contrib/images/onedrive.svg ICON_TARGET_SVG = onedrive.svg NOTIFICATIONS = @NOTIFICATIONS@ HAVE_SYSTEMD = @HAVE_SYSTEMD@ systemduserunitdir = @systemduserunitdir@ systemdsystemunitdir = @systemdsystemunitdir@ all_libs = @curl_LIBS@ @sqlite_LIBS@ @dbus_LIBS@ @notify_LIBS@ @bsd_inotify_LIBS@ @dynamic_linker_LIBS@ COMPLETIONS = @COMPLETIONS@ BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@ ZSH_COMPLETION_DIR = @ZSH_COMPLETION_DIR@ FISH_COMPLETION_DIR = @FISH_COMPLETION_DIR@ DEBUG = @DEBUG@ DC = @DC@ DCFLAGS = @DCFLAGS@ DEBUG_DCFLAGS = @DEBUG_DCFLAGS@ RELEASE_DCFLAGS = @RELEASE_DCFLAGS@ VERSION_DCFLAG = @VERSION_DCFLAG@ LINKER_DCFLAG = @LINKER_DCFLAG@ OUTPUT_DCFLAG = @OUTPUT_DCFLAG@ WERROR_DCFLAG = @WERROR_DCFLAG@ DCFLAGS += $(WERROR_DCFLAG) ifeq ($(DEBUG),yes) DCFLAGS += $(DEBUG_DCFLAGS) else DCFLAGS += $(RELEASE_DCFLAGS) endif ifeq ($(NOTIFICATIONS),yes) GUI_NOTIFICATIONS = $(addprefix $(VERSION_DCFLAG)=,NoPragma NoGdk Notifications) endif system_unit_files = contrib/systemd/onedrive@.service user_unit_files = contrib/systemd/onedrive.service DOCFILES = readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md ifneq ("$(wildcard /etc/redhat-release)","") RHEL = $(shell cat /etc/redhat-release | grep -E "(Red Hat Enterprise Linux|CentOS|AlmaLinux)" | wc -l) RHEL_VERSION = $(shell rpm --eval "%{rhel}") else RHEL = 0 RHEL_VERSION = 0 endif SOURCES = \ src/main.d \ src/config.d \ src/log.d \ src/util.d \ src/qxor.d \ src/curlEngine.d \ src/onedrive.d \ src/webhook.d \ src/sync.d \ src/itemdb.d \ src/sqlite.d \ src/clientSideFiltering.d \ src/monitor.d \ src/arsd/cgi.d \ src/xattr.d \ src/intune.d \ src/socketio.d \ src/curlWebsockets.d ifeq ($(NOTIFICATIONS),yes) SOURCES += src/notifications/notify.d src/notifications/dnotify.d endif all: onedrive clean: rm -f onedrive onedrive.o version rm -rf autom4te.cache rm -f config.log config.status # Remove files generated via ./configure distclean: clean rm -f Makefile contrib/pacman/PKGBUILD contrib/spec/onedrive.spec onedrive.1 $(system_unit_files) $(user_unit_files) onedrive: $(SOURCES) if [ -f .git/HEAD ] ; then \ git describe --tags > version ; \ else \ echo $(version) > version ; \ fi $(DC) -J. $(GUI_NOTIFICATIONS) $(DCFLAGS) $^ $(addprefix $(LINKER_DCFLAG),$(all_libs)) $(OUTPUT_DCFLAG)$@ install: all mkdir -p $(DESTDIR)$(bindir) $(INSTALL) onedrive $(DESTDIR)$(bindir)/onedrive mkdir -p $(DESTDIR)$(mandir)/man1 $(INSTALL) -m 0644 onedrive.1 $(DESTDIR)$(mandir)/man1/onedrive.1 mkdir -p $(DESTDIR)$(sysconfdir)/logrotate.d $(INSTALL) -m 0644 contrib/logrotate/onedrive.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/onedrive mkdir -p $(DESTDIR)$(docdir) for file in $(DOCFILES); do \ $(INSTALL) -m 0644 $$file $(DESTDIR)$(docdir); \ done ifeq ($(HAVE_SYSTEMD),yes) mkdir -p $(DESTDIR)$(systemduserunitdir) mkdir -p $(DESTDIR)$(systemdsystemunitdir) ifeq ($(RHEL),1) $(INSTALL) -m 0644 $(system_unit_files) $(DESTDIR)$(systemdsystemunitdir) $(INSTALL) -m 0644 $(user_unit_files) $(DESTDIR)$(systemdsystemunitdir) else $(INSTALL) -m 0644 $(system_unit_files) $(DESTDIR)$(systemdsystemunitdir) $(INSTALL) -m 0644 $(user_unit_files) $(DESTDIR)$(systemduserunitdir) endif else ifeq ($(RHEL_VERSION),6) $(INSTALL) contrib/init.d/onedrive.init $(DESTDIR)/etc/init.d/onedrive $(INSTALL) contrib/init.d/onedrive_service.sh $(DESTDIR)$(bindir)/onedrive_service.sh endif endif ifeq ($(COMPLETIONS),yes) mkdir -p $(DESTDIR)$(ZSH_COMPLETION_DIR) $(INSTALL) -m 0644 contrib/completions/complete.zsh $(DESTDIR)$(ZSH_COMPLETION_DIR)/_onedrive mkdir -p $(DESTDIR)$(BASH_COMPLETION_DIR) $(INSTALL) -m 0644 contrib/completions/complete.bash $(DESTDIR)$(BASH_COMPLETION_DIR)/onedrive mkdir -p $(DESTDIR)$(FISH_COMPLETION_DIR) $(INSTALL) -m 0644 contrib/completions/complete.fish $(DESTDIR)$(FISH_COMPLETION_DIR)/onedrive.fish endif # --- OneDrive folder icon (hicolor) --- mkdir -p $(DESTDIR)$(ICON_PLACES_DIR) $(INSTALL) -m 0644 $(ICON_SOURCE_SVG) $(DESTDIR)$(ICON_PLACES_DIR)/$(ICON_TARGET_SVG) # Refresh icon cache only when installing to the live system (not during staged DESTDIR installs) # and only if the theme directory is a proper theme (has index.theme) if [ -z "$(DESTDIR)" ] && command -v gtk-update-icon-cache >/dev/null 2>&1 \ && [ -f "$(ICON_THEMEDIR)/index.theme" ]; then \ gtk-update-icon-cache -q "$(ICON_THEMEDIR)"; \ fi uninstall: rm -f $(DESTDIR)$(bindir)/onedrive rm -f $(DESTDIR)$(mandir)/man1/onedrive.1 rm -f $(DESTDIR)$(sysconfdir)/logrotate.d/onedrive ifeq ($(HAVE_SYSTEMD),yes) ifeq ($(RHEL),1) rm -f $(DESTDIR)$(systemdsystemunitdir)/onedrive*.service else rm -f $(DESTDIR)$(systemdsystemunitdir)/onedrive*.service rm -f $(DESTDIR)$(systemduserunitdir)/onedrive*.service endif else ifeq ($(RHEL_VERSION),6) rm -f $(DESTDIR)/etc/init.d/onedrive rm -f $(DESTDIR)$(bindir)/onedrive_service.sh endif endif for i in $(DOCFILES) ; do rm -f $(DESTDIR)$(docdir)/$$i ; done ifeq ($(COMPLETIONS),yes) rm -f $(DESTDIR)$(ZSH_COMPLETION_DIR)/_onedrive rm -f $(DESTDIR)$(BASH_COMPLETION_DIR)/onedrive rm -f $(DESTDIR)$(FISH_COMPLETION_DIR)/onedrive.fish endif # --- OneDrive folder icon (hicolor) --- rm -f $(DESTDIR)$(ICON_PLACES_DIR)/$(ICON_TARGET_SVG) # Refresh icon cache if removing from the live system and index.theme exists if [ -z "$(DESTDIR)" ] && command -v gtk-update-icon-cache >/dev/null 2>&1 \ && [ -f "$(ICON_THEMEDIR)/index.theme" ]; then \ gtk-update-icon-cache -q "$(ICON_THEMEDIR)"; \ fi onedrive-2.5.10/aclocal.m4000066400000000000000000000252401513710110600152500ustar00rootroot00000000000000# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR onedrive-2.5.10/changelog.md000066400000000000000000002451621513710110600156700ustar00rootroot00000000000000# Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## 2.5.10 - 2026-01-30 ### Added * Implement Feature Request: Add configuration option 'disable_version_check' (#3530) * Implement Feature Request: Add automatic debug logging output redaction (#3549) ### Changed * Improve --resync warning prompt for clarity and safer operation (#3562) * Updated Dockerfiles to support newer distributions and associated components (#3565) * FreeBSD: Select inotify type (libc or libnotify) based on FreeBSD version (#3579) * Update that --force and --force-sync cannot be used with --resync (#3593) ### Fixed * Fix Bug: Fix timestamp and hash evaluation to avoid unnecessary file version creation online (#3526) * Fix Bug: Fix that websocket do not work with Sharepoint libraries (#3533) * Fix Bug: Fix that large files fail to download due operational timeout being exceeded (#3541) * Fix Bug: Fix hash functions read efficiency to support 'on-demand' development work (#3544) * Fix Bug: Fix that safeBackup crashes when attempting backing up a non-existent local path (#3545) * Fix Bug: Fix to that the application only performs safeBackup() on deleted items only when a hash change is detected (#3546) * Fix Bug: Prevent mis-configuration where 'recycle_bin_path' is inside 'sync_dir' (#3552) * Fix Bug: Harden logging initialisation: fall back to home directory when log_dir is not writeable (#3555) * Fix Bug: Ensure mkdirRecurse() is correctly wrapped in try block (#3566) * Fix Bug: Fix that 'remove_source_files' does not remove the source file when the file already exists in OneDrive (#3572) * Fix Bug: Enhance displayFileSystemErrorMessage() to include details of the actual path (#3574) * Fix Bug: Enhance downloadFileItem() to ensure greater clarity on download failures (#3575) * Fix Bug: Prevent malformed 'skip_dir' / 'skip_file' rules when using multiple config entries (#3576) * Fix Bug: Detect and prevent 'skip_dir' / 'skip_file' rules shadowing 'sync_list' inclusions (#3577) * Fix Bug: Fix 'skip_dir' and 'skip_file' shadow detection for rooted 'sync_list' paths (#3578) * Fix Bug: Fix 'skip_dir' directory exclusion by normalising input paths before matching (#3580) * Fix Bug: Fix testInternetReachability() function to ensure same curl options used in a consistent manner (#3581) * Fix Bug: Fix performPermanentDelete() to ensure zero content length is set (#3585) * Fix Bug: Fix safeRemove() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3586) * Fix Bug: Fix safeRename() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3587) * Fix Bug: Fix safeBackup() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3589) * Fix Bug: Fix WebSocket reconnect cleanup to prevent GC finalisation crash (#3582) * Fix Bug: Fix setLocalPathTimestamp() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3591) * Fix Bug: Fix incorrect handling of failed safeRename() operations to support 'on-demand' development work (#3592) * Fix Bug: Fix Docker entrypoint handling for non-root --user execution (#3602) * Fix Bug: Fix getRemainingFreeSpaceOnline() and correctly handle zero data traversal events for quota tracking (#3618) * Fix Bug: Fix getRemainingFreeSpaceOnline() for Business and SharePoint Accounts (#3621) * Fix Bug: Fix OAuth authorisation code parsing and encoding during token redemption (#3625) * Fix Bug: Fix Graph search(q=…) escaping for apostrophes (#3624) * Fix Bug: Fix handling of 204 No Content responses for Microsoft Graph PATCH requests (#3620) ### Updated * Updated completion files to align to application functionality * Updated documentation ## 2.5.9 - 2025-11-06 ### Fixed * Fix Bug: Fix very high CPU & memory utilisation with 2.5.8 when using --upload-only (#3515) (CRITICAL BUGFIX) * Fix Bug: Unexpected deletion of empty nested folders during first sync with 'sync_list' and --resync (#3513) (CRITICAL BUGFIX) ### Updated * Updated documentation ## 2.5.8 - 2025-11-05 ### Added * Implement Feature Request: Add that dotfiles in sync_list should be synced even when skip_dotfiles = "true" (#3456) * Implement Feature Request: Add websocket notification support (#3413) * Implement Feature Request: Add --download-file feature (#3459) * Implement Feature Request: Add option to remove source folders when using --upload-only --remove-source-files (#3473) * Implement Feature Request: Add support for AlmaLinux (#3485) * Implement Feature Request: Add ONEDRIVE_THREADS Docker option (#3494) * Implement Feature Request: Implement Desktop Manager Integration for GNOME and KDE (#3500) ### Changed * Changed how the file path is computed when there are 'skip_dir' entries to be consistent (#3484) * Changed checkJSONAgainstClientSideFiltering() to avoid multiple calls to computeItemPath() (#3489) ### Fixed * Fix Bug: Ensure driveId target is cached for modified file uploads (#3454) * Fix Bug: Ensure that 'use_intune_sso' and 'use_device_auth' cannot be used together (#3453) * Fix Bug: Force DNS Timeout when forcing a libcurl fresh connection (#3468) * Fix Bug: Fix WebSocket connection failure on libcurl 8.12.x by forcing HTTP/1.1 and disabling ALPN/NPN (#3482) * Fix Bug: Fix application crash after deleting file locally (#3481) * Fix Bug: Fix missing user information when syncing shared files (#3483) * Fix Bug: Fix Shared Folder data being deleted due to 'skip_dir' entry of '.*' (#3476) * Fix Bug: Fix that if using 'sync_list' only add new JSON items early to allow applyPotentiallyChangedItem() to operate as expected (#3505) * Fix Bug: When using --dry-run use tracked renamed directories to avoid falsely indicating local data is new and uploading as new data (#3503) * Fix Bug: Fix the fetching of maximum open files to be more POSIX compliant (#3508) * Fix Bug: Fix the Handling of WebSocket 'echo' from a local change (#3509) ### Updated * Updated documentation ## 2.5.7 - 2025-09-23 ### Added * Implement Feature Request: Show GUI notification when sync suspends due to 'large delete' threshold (#3388) * Implement Feature Request: Implement resumable downloads (#3354) ### Changed * Removed the auto configuration of using a larger fragment size (#3370) * Removed the OpenSSL Test (#3420) ### Fixed * Fix Bug: Catch unhandled OneDriveError exception due to libcurl failing to access the system CA certificate bundle (#3322) * Fix Bug: 'items-dryrun.sqlite3' gets erroneously created when running a 'no sync' operation (#3325) * Fix Bug: Handle online folder deletion|creation with same name that causes 'id' to change (#3332) * Fix Bug: Reduce I/O pressure on SQLite DB Operations (#3334) * Fix Bug: Handle a 409 online folder creation response with a re-query of the API (#3335) * Fix Bug: Fix systemd issue with ExecStartPre statement to be more OS independent (#3348) * Fix Bug: When using --upload-only do not try and update the local file timestamp post upload (#3349) * Fix Bug: Add missing 'config' options to --display-config (#3353) * Fix Bug: Fix that a failed file download can lead to online deletion (#3351) * Fix Bug: Update searchDriveItemForFile() to handle specific 404 response when file cannot be found (#3365) * Fix Bug: Fix that resync state remains true post first successful full sync (#3368) * Fix Bug: Fix that long running big upload (250GB+) fails because of an expired access token (#3361) * Fix Bug: Handle inconsistent OneDrive Personal driveId casing across multiple Microsoft Graph API Endpoints (#3347) * Fix Bug: Update Microsoft OneNote handling for 'OneNote_RecycleBin' objects (#3350) * Fix Bug: Handle invalid JSON response when querying parental details (#3379) * Fix Bug: Fix foreign key issue when performing a --resync due to a missed conversion of driveId to lowercase values and path is covered by 'sync_list' entries (#3383) * Fix Bug: Ensure 'sync_list' inclusion rules are correctly evaluated (#3381) * Fix Bug: Fix issue of trying to create the root folder online (#3403) * Fix Bug: Fix resumable downloads so that the curl engine offset point is reset post successful download (#3406) * Fix Bug: Fix application crash when a file is created and deleted quickly (#3405) * Fix Bug: Fix the support of relocated shared folders for OneDrive Personal (#3411) * Fix Bug: Fix infinite loop after a failed network connection due to changed curl messaging (#3412) * Fix Bug: Fix computePath() to track the parental path anchor when a Shared Folder is relocated with a deeper path (#3417) * Fix Bug: Fix SharePoint Shared Library DB Tie creation (#3419) * Fix Bug: Update safeBackup() function to ensure that the 'safeBackup' path addition is only added once and ignore directories (#3445) ### Updated * Updated OAuth2 Interactive Authorisation Flow prompts to remove any ambiguity on what actions a user needs to take (#3323) * Updated onedrive.spec.in to correct missing dependencies (#3329) * Updated minimum compiler version details (#3330) * Updated documentation and function for how 'threads' is used (#3352) * Updated logging output for upsert() function (#3333) * Updated curl 8.13.x and 8.14.0 to known bad curl versions (#3356) * Updated logging output when processing online deletion events (#3373) * Updated logging output and use of grandparent identifiers when using --dry-run (#3377) * Updated GitHub Action versions for building Docker containers (#3378) * Updated how the ETA values are calculated to avoid negative values (#3386) * Updated Debian Dockerfile to use upstream gosu (#3402) * Updated Debian Dockerfile to use 'bookworm' (#3402) * Updated documentation ## 2.5.6 - 2025-06-05 ### Added * Enhancement: Add gdc support to enable Gentoo compilation * Enhancement: Add a notification to user regarding number of objects received from OneDrive API * Enhancement: Update 'skip_file' documentation and option validation * Enhancement: Add a new configuration option 'force_session_upload' to support editors and applications using atomic save operations * Enhancement: Added 2 functions to check for the presence of required remoteItem elements to create a Shared Folder DB entries * Implement Feature Request: Add local recycle bin or trash folder option * Implement Feature Request: Add configurable upload delay to support Obsidian * Implement Feature Request: Add validation of bools in config file * Implement Feature Request: Add native support for authentication via Intune dbus interface * Implement Feature Request: Implement OAuth2 Device Authorisation Flow ### Changed * Change logging output level for JSON elements that contain URL encoding * Change 'configure.ac' to use a static date value as Debian 'reproducible' build process forces a future date to rebuild any code to determine reproducibility ### Fixed * Fix Regression: Fixed regression in handling Microsoft OneNote package folders being created in error * Fix Regression: Fix OneNote file MimeType detection * Fix Regression: Fix supporting Personal Shared Folders that have been renamed * Fix Bug: Correct the logging output for 'skip_file' exclusions * Fix Bug: Validate raw JSON from Graph API for 15 character driveId API bug * Fix Bug: Fix JSON exception on webhook subscription renewal due to 308 redirect * Fix Bug: Update 'sync_list' line parsing to correctly escape characters for regex parsing * Fix Bug: Fix that an empty folder or folder with Microsoft OneNote files are deleted online when content is shared from a SharePoint Library Document Root * Fix Bug: Fix that empty 'skip_file' forces resync indefinitely * Fix Bug: Fix that 'sync_list' rule segment|depth check fails in some scenarios and implement a better applicable mechanism check * Fix Bug: Resolve crash when getpwuid() breaks when there is a glibc version mismatch * Fix Bug: Resolve crash when opening file fails when computing file hash * Fix Bug: Add check for invalid exclusion 'sync_list' exclusion rules * Fix Bug: Fix uploading of modified files when using --upload-only & --remove-source-files * Fix Bug: Fix local path calculation for Relocated OneDrive Business Shared Folders * Fix Bug: Fix 'sync_list' anywhere rule online directory creation * Fix Bug: Fix online path creation to ensure parental path structure is created in a consistent manner * Fix Bug: Fix handling of POSIX check for existing online items * Fix Bug: Fix args printing in dockerfile entrypoint * Fix Bug: Fix the testing of parental structure for 'sync_list' inclusion when adding inotify watches * Fix Bug: Fix failure to handle API 403 response when file fragment upload fails * Fix Bug: Fix application notification output to be consistent when skipping integrity checks * Fix Bug: Fix how local timestamps are modified * Fix Bug: Fix how online remaining free space is calculated and consumed internally for free space tracking * Fix Bug: Fix logic of determining if a file has valid integrity when using --disable-upload-validation * Fix Bug: Format the OneDrive change into a consumable object for the database earlier to use values in application logging * Fix Bug: Fix upload session offset handling to prevent desynchronisation on large files * Fix Bug: Fix implementation of 'write_xattr_data' to support FreeBSD * Fix Bug: Update hash functions to ensure file is closed if opened * Fix Bug: Dont blindly run safeBackup() if the online timestamp is newer * Fix Bug: Only set xattr values when not using --dry-run * Fix Bug: Fix UTC conversion for existing file timestamp post file download * Fix Bug: Fix that 'check_nosync' and 'skip_size' configuration options when changed, were not triggering a --resync correctly * Fix Bug: Ensure file is closed before renaming to improve compatibility with GCS buckets and network filesystems * Fix Bug: If a file fails to download, path fails to exist. Check path existence before setting xattr values ### Updated * Updated .gitignore to ignore files created during configure to be consistent with other files generated from .in templates * Updated bash,fish and zsh completion files to align with application options * Updated 'config' file to align to application options with applicable descriptions * Updated testbuild runner * Updated Fedora Docker OS version to Fedora 42 * Updated Ubuntu 24.10 curl version 8.9.1 to known bad curl versions and document the bugs associated with it * Updated Makefile to pass libraries after source files in compiler invocation * Updated 'configure.ac' to support more basename formats for DC * Update how threads are set based on available CPUs * Update setLocalPathTimestamp logging output * Update when to perform thread check and set as early as possible * Updated documentation ## 2.5.5 - 2025-03-17 ### Added * Implement Feature Request: Implement 'transfer_order' configuration option to allow the user to determine what order files are transferred in * Implement Feature Request: Implement 'disable_permission_set' configuration option to not set directory and file permissions * Implement Feature Request: Implement 'write_xattr_data' configuration option to add information about file creator/last editor as extended file attributes * Enhancement: Add support for --share-password option when --create-share-link is called * Enhancement: Add support 'localizedMessage' error messages in application output if this is provided in the JSON response from Microsoft Graph API ### Changed * Changed curl debug logging to --debug-https as this is more relevant * Comprehensively overhauled how OneDrive Personal Shared Folders are handled due to major OneDrive API backend platform user migration and major differences in API response output * Comprehensively changed OneDrive Personal 'driveId' value checking due to major OneDrive API backend platform user migration and major differences in API response output ### Fixed * Fix Bug: Fix path calculation for Client Side Filtering evaluations for Personal Accounts * Fix Bug: Fix path calculation for Client Side Filtering evaluations for Business Accounts * Fix Bug: Only perform path calculation if this is actually required * Fix Bug: Fix check for 'globbing' and 'wildcard' rules, that the number of segments before the first wildcard character need to match before the actual rule can be applied * Fix Bug: When using 'sync_list' , ignore specific exclusion to scan that path for new data, which may be actually included by an include rule, but the parent path is excluded * Fix Bug: When removing a OneDrive Personal Shared Folder, remove the actual link, not the remote user folder * Fix Bug: Fix 'Unsupported platform' for inotify watches by using the correct predefined version definition for Linux. ### Updated * Updated Fedora Docker OS version to Fedora 41 * Updated Alpine Docker OS version to Alpine 3.21 * Updated documentation ## 2.5.4 - 2025-02-03 ### Added * Implement Feature Request: Support Permanent Delete on OneDrive * Implement Feature Request: Support the moving of Shared Folder Links to other folders (Business Accounts only) * Enhancement: Added due to ongoing Ubuntu issues with 'curl' and 'libcurl', updated the documentation to include all relevant curl bugs and affected versions * Enhancement: Added quota status messages for nearing | critical | exceeded based on OneDrive Account API response * Enhancement: Added Docker variable to implement a sync once option * Enhancement: Added configuration option 'create_new_file_version' to force create new versions if that is the desire * Enhancement: Added support for adding SharePoint Libraries as Shared Folder Links * Enhancement: Added code and documentation changes to support FreeBSD * Enhancement: Added a check for the 'sea8cc6beffdb43d7976fbc7da445c639' string in the Microsoft OneDrive Personal Account Root ID response that denotes that the account cannot access Microsoft OneDrive at this point in time * Enhancement: Added './' sync_list rule check as this does not align to the documentation and these rules will not get matched correctly. ### Changed * Changed how debug logging outputs HTTP response headers and when this occurs * Changed when the check for no --sync | --monitor occurs so that this fails faster to avoid setting up all the other components * Changed isValidUTF8 function to use 'validate' rather than individual character checking and enhance checks including length constraints * Changed --dry-run authentication message to remove ambiguity that --dry-run cannot be used to authenticate the application ### Fixed * Fix Regression: Fixed regression that sync_list does not traverse shared directories * Fix Regression: Fixed regression of --display-config use after fast failing if --sync or --monitor has not been used * Fix Regression: Fixed regression from v2.4.x in handling uploading new and modified content to OneDrive Business and SharePoint to not create new versions of files post upload which adds to user quota * Fix Regression: Add back file transfer metrics which was available in v2.4.x * Fix Regression: Add code to support using 'display_processing_time' for functional performance which was available in v2.4.x * Fix Bug: Fixed build issue for OpenBSD (however support for OpenBSD itself is still a work-in-progress) * Fix Bug: Fixed issue regarding parsing OpenSSL and when unable to be parsed, do not force the application to exit * Fix Bug: Fixed the import of 'sync_list' rules due to OneDriveGUI creating a blank empty file by default * Fix Bug: Fixed the display of 'sync_list' rules due to OneDriveGUI creating a blank empty file by default * Fix Bug: Fixed that Business Shared Items shortcuts are skipped as being incorrectly detected as Microsoft OneNote Notebook items * Fix Bug: Fixed space calculations due to using ulong variable type to ensure that if calculation is negative, value is negative * Fix Bug: Fixed issue when downloading a file, and this fails due to an API error (400, 401, 5xx), online file is then not deleted * Fix Bug: Fixed skip_dir logic when reverse traversing folder structure * Fix Bug: Fixed issue that when using 'sync_list' if a file is moved to a newly created online folder, whilst the folder is created database wise, ensure this folder exists on local disk * Fix Bug: Fixed path got deleted in handling of move & close_write event when using 'vim'. * Fix Bug: Fixed that the root Personal Shared Folder is not handled due to missing API data European Data Centres * Fix Bug: Fixed the the local timestamp is not set when using --disable-download-validation * Fix Bug: Fixed Upload|Download Loop for AIP Protected File in Monitor Mode * Fix Bug: Fixed --single-directory Shared Folder DB entry creation * Fix Bug: Fixed API Bug to ensure that OneDrive Personal Drive ID and Remote Drive ID values are 16 characters, padded by leading zeros if the provided JSON data has dropped these leading zeros * Fix Bug: Fixed testInternetReachability function so that this always returns a boolean value and not throw an exception ### Updated * Updated documentation ## 2.5.3 - 2024-11-16 ### Added * Implement Feature Request: Implement Docker ENV variable for --cleanup-local-files * Enhancement: Setup a specific SIGPIPE Signal handler for curl/openssl generated signals * Enhancement: Add Check Spelling GitHub Action * Enhancement: Add passive database checkpoints to optimise database operations * Enhancement: Ensure application notifies user of curl versions that contain HTTP/2 bugs that impact the operation of this client * Enhancement: Add OpenSSL version warning * Enhancement: Improve performance with reduced execution time and lower CPU/system resource usage ### Changed * Specifically use a 'mutex' to perform the lock on database actions * Update safeBackup to use a new filename format for easier identification: filename-hostname-safeBackup-number.file_extension * Allow no-sync operations to complete online account checks ### Fixed * Fix Regression: Fix regression for Docker 'sync_dir' use * Fix Bug: Fix that a 'sync_list' entry of '/' will cause a index [0] is out of bounds * Fix Bug: Fix that when creating a new folder online the application generates an exception if it is in a Shared Online Folder * Fix Bug: Fix application crash when session upload files contain zero data or are corrupt * Fix Bug: Fix that curl generates a SIGPIPE that causes application to exit due to upstream device killing idle TCP connection * Fix Bug: Fix that skip_dir is not flagging directories correctly causing deletion if parental path structure needs to be created for sync_list handling * Fix Bug: Fix application crash caused by unable to drop table * Fix Bug: Fix that skip_file in config does not override defaults * Fix Bug: Handle DB upgrades from v2.4.x without causing application crash * Fix Bug: Fix a database statement execution error occurred: NOT NULL constraint failed: item.type due to Microsoft OneNote items * Fix Bug: Fix Operation not permitted FileException Error when attempting to use setTimes() function * Fix Bug: Fix that files with no mime type cause sync to crash * Fix Bug: Fix that bypass_data_preservation operates as intended ### Updated * Fixed spelling errors across all documentation and code * Update Dockerfile-debian to fix that libcurl4 does not get applied despite being pulled in. Explicitly install it from Debian 12 Backports * Add Ubuntu 24.10 OpenSuSE Build Service details * Update Dockerfile-alpine - revert to Alpine 3.19 as application fails to run on Alpine 3.20 * Updated documentation ## 2.5.2 - 2024-09-29 ### Added * Added 15 second sleep to systemd services to allow d-bus daemon to start and be available if present ### Fixed * Fix Bug: Application crash unable to correctly process a timestamp that has fractional seconds * Fix Bug: Fixed application logging output of Personal Shared Folder incorrectly advising there is no free space ### Updated * Updated documentation ## 2.5.1 - 2024-09-27 (DO NOT USE. CONTAINS A MAJOR TIMESTAMP ISSUE BUG) ### Special Thankyou A special thankyou to @phlibi for assistance with diagnosing and troubleshooting the database timestamp issue ### Added * Implement Feature Request: Don't print the d-bus WARNING if disable_notifications is set on cmd line or in config ### Changed * Add --enable-debug to Docker files when building client application to allow for better diagnostics when issues occur * Update Debian Dockerfile to use 'curl' from backports so a more modern curl version is used ### Fixed * Fix Regression: Fix regression of extra quotation marks when using ONEDRIVE_SINGLE_DIRECTORY with Docker * Fix Regression: Fix regression that real-time synchronization is not occurring when using --monitor and sync_list * Fix Regression: Fix regression that --remove-source-files doesn’t work * Fix Bug: Application crash when run synchronize due to negative free space online * Fix Bug: Application crash when performing a URL decode * Fix Bug: Application crash when using sync_list and Personal Shared Folders the root folder fails to present the item id * Fix Bug: Application crash when attempting to read timestamp from database as invalid data was written ### Updated * Updated documentation (various) ## 2.5.0 - 2024-09-16 ### Special Thankyou A special thankyou to all those who helped with testing and providing feedback during the development of this major release. A big thankyou to: * @JC-comp * @Lyncredible * @rrodrigueznt * @bpozdena * @hskrieg * @robertschulze * @aothmane-control * @mozram * @LunCh-CECNL * @pkolmann * @tdcockers * @undefiened * @cyb3rko ### Notable Changes * This version introduces significant changes regarding how the integrity and validation of your data is determined and is not backwards compatible with v2.4.x. * OneDrive Business Shared Folder Sync has been 100% re-written in v2.5.0. If you are using this feature, please read the new documentation carefully. * The application function --download-only no longer automatically deletes local files. Please read the new documentation regarding this feature. ### Added * Implement Feature Request: Multi-threaded uploading/downloading of files * Implement Feature Request: Renaming/Relocation of OneDrive Business shared folders * Implement Feature Request: Support the syncing of individual business shared files * Implement Feature Request: Implement application output to detail upload|download failures at the end of a sync process * Implement Feature Request: Log when manual Authorization is required when using --auth-files * Implement Feature Request: Add cmdline parameter to display (human readable) quota status * Implement Feature Request: Add capability to disable 'fullscan_frequency' * Implement Feature Request: Ability to set --disable-download-validation from Docker environment variable * Implement Feature Request: Ability to set --sync-shared-files from Docker environment variable * Implement Feature Request: file sync (upload/download/delete) notifications ### Changed * Renamed various documentation files to align with document content * Implement buffered logging so that all logging from all upload & download activities are handled correctly * Replace polling monitor loop with blocking wait * Update how the application utilises curl to fix socket reuse * Various performance enhancements * Implement refactored OneDrive API logic * Enforcement of operational conflicts * Enforcement of application configuration defaults and minimums * Utilise threadsafe sqlite DB access methods * Various bugs and other issues identified during development and testing * Various code cleanup and optimisations ### Fixed * Fix Bug: Upload only not working with Business shared folders * Fix Bug: Business shared folders with same basename get merged * Fix Bug: --dry-run prevents authorization * Fix Bug: Log timestamps lacking trailing zeros, leading to poor log file output alignment * Fix Bug: Subscription ID already exists when using webhooks * Fix Bug: Not all files being downloaded when API data includes HTML ASCII Control Sequences * Fix Bug: --display-sync-status does not work when OneNote sections (.one files) are in your OneDrive * Fix Bug: vim backups when editing files cause edited file to be deleted rather than the edited file being uploaded * Fix Bug: skip_dir does not always work as intended for all directory entries * Fix Bug: Online date being changed in download-only mode * Fix Bug: Resolve that download_only = "true" and cleanup_local_files = "true" also deletes files present online * Fix Bug: Resolve that upload session are not canceled with resync option * Fix Bug: Local files should be safely backed up when the item is not in sync locally to prevent data loss when they are deleted online * Fix Bug: Files with newer timestamp are not chosen as version to be kept * Fix Bug: Synced file is removed when updated on the remote while being processed by onedrive * Fix Bug: Cannot select/filter within Personal Shared Folders * Fix Bug: HTML encoding requires to add filter entries twice * Fix Bug: Uploading files using fragments stuck at 0% * Fix Bug: Implement safeguard when sync_dir is missing and is re-created data is not deleted online * Fix Bug: Fix that --get-sharepoint-drive-id does not handle a SharePoint site with more than 200 entries * Fix Bug: Fix that 'sync_list' does not include files that should be included, when specified just as *.ext_type * Fix Bug: Fix 'sync_list' processing so that '.folder_name' is excluded but 'folder_name' is included ### Updated * Overhauled all documentation ## 2.4.25 - 2023-06-21 ### Fixed * Fixed that the application was reporting as v2.2.24 when in fact it was v2.4.24 (release tagging issue) * Fixed that the running version obsolete flag (due to above issue) was causing a false flag as being obsolete * Fixed that zero-byte files do not have a hash as reported by the OneDrive API thus should not generate an error message ### Updated * Update to Debian Docker file to resolve Docker image Operating System reported vulnerabilities * Update to Alpine Docker file to resolve Docker image Operating System reported vulnerabilities * Update to Fedora Docker file to resolve Docker image Operating System reported vulnerabilities * Updated documentation (various) ## 2.4.24 - 2023-06-20 ### Fixed * Fix for extra encoded quotation marks surrounding Docker environment variables * Fix webhook subscription creation for SharePoint Libraries * Fix that a HTTP 504 - Gateway Timeout causes local files to be deleted when using --download-only & --cleanup-local-files mode * Fix that folders are renamed despite using --dry-run * Fix deprecation warnings with dmd 2.103.0 * Fix error that the application is unable to perform a database vacuum: out of memory when exiting ### Removed * Remove sha1 from being used by the client as this is being deprecated by Microsoft in July 2023 * Complete the removal of crc32 elements ### Added * Added ONEDRIVE_SINGLE_DIRECTORY configuration capability to Docker * Added --get-file-link shell completion * Added configuration to allow HTTP session timeout(s) tuning via config (taken from v2.5.x) ### Updated * Update to Debian Docker file to resolve Docker image Operating System reported vulnerabilities * Update to Alpine Docker file to resolve Docker image Operating System reported vulnerabilities * Update to Fedora Docker file to resolve Docker image Operating System reported vulnerabilities * Updated cgi.d to commit 680003a - last upstream change before requiring `core.d` dependency requirement * Updated documentation (various) ## 2.4.23 - 2023-01-06 ### Fixed * Fixed RHEL7, RHEL8 and RHEL9 Makefile and SPEC file compatibility ### Removed * Disable systemd 'PrivateUsers' due to issues with systemd running processes when option is enabled, causes local file deletes on RHEL based systems ### Updated * Update --get-O365-drive-id error handling to display a more a more appropriate error message if the API cannot be found * Update the GitHub version check to utilise the date a release was done, to allow 1 month grace period before generating obsolete version message * Update Alpine Dockerfile to use Alpine 3.17 and Golang 1.19 * Update handling of --source-directory and --destination-directory if one is empty or missing and if used with --synchronize or --monitor * Updated documentation (various) ## 2.4.22 - 2022-12-06 ### Fixed * Fix application crash when local file is changed to a symbolic link with non-existent target * Fix build error with dmd-2.101.0 * Fix build error with LDC 1.28.1 on Alpine * Fix issue of silent exit when unable to delete local files when using --cleanup-local-files * Fix application crash due to access permissions on configured path for sync_dir * Fix potential application crash when exiting due to failure state and unable to cleanly shutdown the database * Fix creation of parent empty directories when parent is excluded by sync_list ### Added * Added performance output details for key functions ### Changed * Switch Docker 'latest' to point at Debian builds rather than Fedora due to ongoing Fedora build failures * Align application logging events to actual application defaults for --monitor operations * Performance Improvement: Avoid duplicate costly path calculations and DB operations if not required * Disable non-working remaining sandboxing options within systemd service files * Performance Improvement: Only check 'sync_list' if this has been enabled and configured * Display 'Sync with OneDrive is complete' when using --synchronize * Change the order of processing between Microsoft OneDrive restrictions and limitations check and skip_file|skip_dir check ### Removed * Remove building Fedora ARMv7 builds due to ongoing build failures ### Updated * Update config change detection handling * Updated documentation (various) ## 2.4.21 - 2022-09-27 ### Fixed * Fix that the download progress bar doesn't always reach 100% when rate_limit is set * Fix --resync handling of database file removal * Fix Makefile to be consistent with permissions that are being used * Fix that logging output for skipped uploaded files is missing * Fix to allow non-sync tasks while sync is running * Fix where --resync is enforced for non-sync operations * Fix to resolve segfault when running 'onedrive --display-sync-status' when run as 2nd process * Fix DMD 2.100.2 depreciation warning ### Added * Add GitHub Action Test Build Workflow (replacing Travis CI) * Add option --display-running-config to display the running configuration as used at application startup * Add 'config' option to request readonly access in oauth authorization step * Add option --cleanup-local-files to cleanup local files regardless of sync state when using --download-only * Add option --with-editing-perms to create a read-write shareable link when used with --create-share-link ### Changed * Change the exit code of the application to 126 when a --resync is required ### Updated * Updated --get-O365-drive-id implementation for data access * Update what application options require an argument * Update application logging output for error messages to remove certain \n prefix when logging to a file * Update onedrive.spec.in to fix error building RPM * Update GUI notification handling for specific skipped scenarios * Updated documentation (various) ## 2.4.20 - 2022-07-20 ### Fixed * Fix 'foreign key constraint failed' when using OneDrive Business Shared Folders due to change to using /delta query * Fix various little spelling errors (checked with lintian during Debian packaging) * Fix handling of a custom configuration directory when using --confdir * Fix to ensure that any active http instance is shutdown before any application exit * Fix to enforce that --confdir must be a directory ### Added * Added 'force_http_11' configuration option to allow forcing HTTP/1.1 operations ### Changed * Increased thread sleep for better process I/O wait handling * Removed 'force_http_2' configuration option ### Updated * Update OneDrive API response handling for National Cloud Deployments * Updated to switch to using curl defaults for HTTP/2 operations * Updated documentation (various) ## 2.4.19 - 2022-06-15 ### Fixed * Update Business Shared Folders to use a /delta query * Update when DB is updated by OneDrive API data and update when file hash is required to be generated ### Added * Added ONEDRIVE_UPLOADONLY flag for Docker ### Updated * Updated GitHub workflows * Updated documentation (various) ## 2.4.18 - 2022-06-02 ### Fixed * Fixed various database related access issues stemming from running multiple instances of the application at the same time using the same configuration data * Fixed --display-config being impacted by --resync flag * Fixed installation permissions for onedrive man-pages file * Fixed that in some situations that users try --upload-only and --download-only together which is not possible * Fixed application crash if unable to read required hash files ### Added * Added Feature Request to add an override for skip_dir|skip_file through flag to force sync * Added a check to validate local filesystem available space before attempting file download * Added GitHub Actions to build Docker containers and push to DockerHub ### Updated * Updated all Docker build files to current distributions, using updated distribution LDC version * Updated logging output to logfiles when an actual sync process is occurring * Updated output of --display-config to be more relevant * Updated manpage to align with application configuration * Updated documentation and Docker files based on minimum compiler versions to dmd-2.088.0 and ldc-1.18.0 * Updated documentation (various) ## 2.4.17 - 2022-04-30 ### Fixed * Fix docker build, by add missing git package for Fedora builds * Fix application crash when attempting to sync a broken symbolic link * Fix Internet connect disruption retry handling and logging output * Fix local folder creation timestamp with timestamp from OneDrive * Fix logging output when download failed ### Added * Add additional logging specifically for delete event to denote in log output the source of a deletion event when running in --monitor mode ### Changed * Improve when the local database integrity check is performed and on what frequency the database integrity check is performed ### Updated * Remove application output ambiguity on how to access 'help' for the client * Update logging output when running in --monitor --verbose mode in regards to the inotify events * Updated documentation (various) ## 2.4.16 - 2022-03-10 ### Fixed * Update application file logging error handling * Explicitly set libcurl options * Fix that when a sync_list exclusion is matched, the item needs to be excluded when using --resync * Fix so that application can be compiled correctly on Android hosts * Fix the handling of 429 and 5xx responses when they are generated by OneDrive in a self-referencing circular pattern * Fix applying permissions to volume directories when running in rootless podman * Fix unhandled errors from OneDrive when initialising subscriptions fail ### Added * Enable GitHub Sponsors * Implement --resync-auth to enable CLI passing in of --rsync approval * Add function to check client version vs latest GitHub release * Add --reauth to allow easy re-authentication of the client * Implement --modified-by to display who last modified a file and when the modification was done * Implement feature request to mark partially-downloaded files as .partial during download * Add documentation for Podman support ### Changed * Document risk regarding using --resync and force user acceptance of usage risk to proceed * Use YAML for Bug Reports and Feature Requests * Update Dockerfiles to use more modern base Linux distribution ### Updated * Updated documentation (various) ## 2.4.15 - 2021-12-31 ### Fixed * Fix unable to upload to OneDrive Business Shared Folders due to OneDrive API restricting quota information * Update fixing edge case with OneDrive Personal Shared Folders and --resync --upload-only ### Added * Add SystemD hardening * Add --operation-timeout argument ### Changed * Updated minimum compiler versions to dmd-2.087.0 and ldc-1.17.0 ### Updated * Updated Dockerfile-alpine to use Alpine 3.14 * Updated documentation (various) ## 2.4.14 - 2021-11-24 ### Fixed * Support DMD 2.097.0 as compiler for Docker Builds * Fix getPathDetailsByDriveId query when using --dry-run and a nested path with --single-directory * Fix edge case when syncing OneDrive Personal Shared Folders * Catch unhandled API response errors when querying OneDrive Business Shared Folders * Catch unhandled API response errors when listing OneDrive Business Shared Folders * Fix error 'Key not found: remaining' with Business Shared Folders (OneDrive API change) * Fix overwriting local files with older versions from OneDrive when items.sqlite3 does not exist and --resync is not used ### Added * Added operation_timeout as a new configuration to assist in cases where operations take longer that 1h to complete * Add Real-Time syncing of remote updates via webhooks * Add --auth-response option and expose through entrypoint.sh for Docker * Add --disable-download-validation ### Changed * Always prompt for credentials for authentication rather than re-using cached browser details * Do not re-auth on --logout ### Updated * Updated documentation (various) ## 2.4.13 - 2021-7-14 ### Fixed * Support DMD 2.097.0 as compiler * Fix to handle OneDrive API Bad Request response when querying if file exists * Fix application crash and incorrect handling of --single-directory when syncing a OneDrive Business Shared Folder due to using 'Add Shortcut to My Files' * Fix application crash due to invalid UTF-8 sequence in the pathname for the application configuration * Fix error message when deleting a large number of files * Fix Docker build process to source GOSU keys from updated GPG key location * Fix application crash due to a conversion overflow when calculating file offset for session uploads * Fix Docker Alpine build failing due to filesystem permissions issue due to Docker build system and Alpine Linux 3.14 incompatibility * Fix that Business Shared Folders with parentheses are ignored ### Updated * Updated Lock Bot to run daily * Updated documentation (various) ## 2.4.12 - 2021-5-28 ### Fixed * Fix an unhandled Error 412 when uploading modified files to OneDrive Business Accounts * Fix 'sync_list' handling of inclusions when name is included in another folders name * Fix that options --upload-only & --remove-source-files are ignored on an upload session restore * Fix to add file check when adding item to database if using --upload-only --remove-source-files * Fix application crash when SharePoint displayName is being withheld ### Updated * Updated Lock Bot to use GitHub Actions * Updated documentation (various) ## 2.4.11 - 2021-4-07 ### Fixed * Fix support for '/*' regardless of location within sync_list file * Fix 429 response handling correctly check for 'retry-after' response header and use set value * Fix 'sync_list' path handling for sub item matching, so that items in parent are not implicitly matched when there is no wildcard present * Fix --get-O365-drive-id to use 'nextLink' value if present when searching for specific SharePoint site names * Fix OneDrive Business Shared Folder existing name conflict check * Fix incorrect error message 'Item cannot be deleted from OneDrive because it was not found in the local database' when item is actually present * Fix application crash when unable to rename folder structure due to unhandled file-system issue * Fix uploading documents to Shared Business Folders when the shared folder exists on a SharePoint site due to Microsoft Sharepoint 'enrichment' of files * Fix that a file record is kept in database when using --no-remote-delete & --remove-source-files ### Added * Added support in --get-O365-drive-id to provide the 'drive_id' for multiple 'document libraries' within a single Shared Library Site ### Removed * Removed the deprecated config option 'force_http_11' which was flagged as deprecated by PR #549 in v2.3.6 (June 2019) ### Updated * Updated error output of --get-O365-drive-id to provide more details why an error occurred if a SharePoint site lacks the details we need to perform the match * Updated Docker build files for Raspberry Pi to dedicated armhf & aarch64 Dockerfiles * Updated logging output when in --monitor mode, avoid outputting misleading logging when the new or modified item is a file, not a directory * Updated documentation (various) ## 2.4.10 - 2021-2-19 ### Fixed * Catch database assertion when item path cannot be calculated * Fix alpine Docker build so it uses the same golang alpine version * Search all distinct drive id's rather than just default drive id for --get-file-link * Use correct driveId value to query for changes when using --single-directory * Improve upload handling of files for SharePoint sites and detecting when SharePoint modifies the file post upload * Correctly handle '~' when present in 'log_dir' configuration option * Fix logging output when handing downloaded new files * Fix to use correct path offset for sync_list exclusion matching ### Added * Add upload speed metrics when files are uploaded and clarify that 'data to transfer' is what is needed to be downloaded from OneDrive * Add new config option to rate limit connection to OneDrive * Support new file maximum upload size of 250GB * Support sync_list matching full path root wildcard with exclusions to simplify sync_list configuration ### Updated * Rename Office365.md --> SharePoint-Shared-Libraries.md which better describes this document * Updated Dockerfile config for arm64 * Updated documentation (various) ## 2.4.9 - 2020-12-27 ### Fixed * Fix to handle case where API provided deltaLink generates a further API error * Fix application crash when unable to read a local file due to local file permissions * Fix application crash when calculating the path length due to invalid UTF characters in local path * Fix Docker build on Alpine due missing symbols due to using the edge version of ldc and ldc-runtime * Fix application crash with --get-O365-drive-id when API response is restricted ### Added * Add debug log output of the configured URL's which will be used throughout the application to remove any ambiguity as to using incorrect URL's when making API calls * Improve application startup when using --monitor when there is no network connection to the OneDrive API and only initialise application once OneDrive API is reachable * Add Docker environment variable to allow --logout for re-authentication ### Updated * Remove duplicate code for error output functions and enhance error logging output * Updated documentation ## 2.4.8 - 2020-11-30 ### Fixed * Fix to use config set option for 'remove_source_files' and 'skip_dir_strict_match' rather than ignore if set * Fix download failure and crash due to incorrect local filesystem permissions when using mounted external devices * Fix to not change permissions on pre-existing local directories * Fix logging output when authentication authorisation fails to not say authorisation was successful * Fix to check application_id before setting redirect URL when using specific Azure endpoints * Fix application crash in --monitor mode due to 'Failed to stat file' when setgid is used on a directory and data cannot be read ### Added * Added advanced-usage.md to document advanced client usage such as multi account configurations and Windows dual-boot ### Updated * Updated --verbose logging output for config options when set * Updated documentation (man page, USAGE.md, Office365.md, BusinessSharedFolders.md) ## 2.4.7 - 2020-11-09 ### Fixed * Fix debugging output for /delta changes available queries * Fix logging output for modification comparison source data * Fix Business Shared Folder handling to process only Shared Folders, not individually shared files * Fix cleanup dryrun shm and wal files if they exist * Fix --list-shared-folders to only show folders * Fix to check for the presence of .nosync when processing DB entries * Fix skip_dir matching when using --resync * Fix uploading data to shared business folders when using --upload-only * Fix to merge contents of SQLite WAL file into main database file on sync completion * Fix to check if localModifiedTime is >= than item.mtime to avoid re-upload for equal modified time * Fix to correctly set config directory permissions at first start ### Added * Added environment variable to allow easy HTTPS debug in docker * Added environment variable to allow download-only mode in Docker * Implement Feature: Allow config to specify a tenant id for non-multi-tenant applications * Implement Feature: Adding support for authentication with single tenant custom applications * Implement Feature: Configure specific File and Folder Permissions ### Updated * Updated documentation (readme.md, install.md, usage.md, bug_report.md) ## 2.4.6 - 2020-10-04 ### Fixed * Fix flagging of remaining free space when value is being restricted * Fix --single-directory path handling when path does not exist locally * Fix checking for 'Icon' path as no longer listed by Microsoft as an invalid file or folder name * Fix removing child items on OneDrive when parent item responds with access denied * Fix to handle deletion events for files when inotify events are missing * Fix uninitialised value error as reported by valgrind * Fix to handle deletion events for directories when inotify events are missing ### Added * Implement Feature: Create shareable link * Implement Feature: Support wildcard within sync_list entries * Implement Feature: Support negative patterns in sync_list for fine grained exclusions * Implement Feature: Multiple skip_dir & skip_file configuration rules * Add GUI notification to advise users when the client needs to be reauthenticated ### Updated * Updated documentation (readme.md, install.md, usage.md, bug_report.md) ## 2.4.5 - 2020-08-13 ### Fixed * Fixed fish auto completions installation destination ## 2.4.4 - 2020-08-11 ### Fixed * Fix 'skip_dir' & 'skip_file' pattern matching to ensure correct matching is performed * Fix 'skip_dir' & 'skip_file' so that each directive is only used against directories or files as required in --monitor * Fix client hand when attempting to sync a Unix pipe file * Fix --single-directory & 'sync_list' performance * Fix erroneous 'return' statements which could prematurely end processing all changes returned from OneDrive * Fix segfault when attempting to perform a comparison on an inotify event when determining if event path is directory or file * Fix handling of Shared Folders to ensure these are checked against 'skip_dir' entries * Fix 'Skipping uploading this new file as parent path is not in the database' when uploading to a Personal Shared Folder * Fix how available free space is tracked when uploading files to OneDrive and Shared Folders * Fix --single-directory handling of parent path matching if path is being seen for first time ### Added * Added Fish auto completions ### Updated * Increase maximum individual file size to 100GB due to Microsoft file limit increase * Update Docker build files and align version of compiler across all Docker builds * Update Docker documentation * Update NixOS build information * Update the 'Processing XXXX' output to display the full path * Update logging output when a sync starts and completes when using --monitor * Update Office 365 / SharePoint site search query and response if query return zero match ## 2.4.3 - 2020-06-29 ### Fixed * Check if symbolic link is relative to location path * When using output logfile, fix inconsistent output spacing * Perform initial sync at startup in monitor mode * Handle a 'race' condition to process inotify events generated whilst performing DB or filesystem walk * Fix segfault when moving folder outside the sync directory when using --monitor on Arch Linux ### Added * Added additional inotify event debugging * Added support for loading system configs if there's no user config * Added Ubuntu installation details to include installing the client from a PPA * Added openSUSE installation details to include installing the client from a package * Added support for comments in sync_list file * Implement recursive deletion when Retention Policy is enabled on OneDrive Business Accounts * Implement support for National cloud deployments * Implement OneDrive Business Shared Folders Support ### Updated * Updated documentation files (various) * Updated log output messaging when a full scan has been set or triggered * Updated buildNormalizedPath complexity to simplify code * Updated to only process OneDrive Personal Shared Folders only if account type is 'personal' ## 2.4.2 - 2020-05-27 ### Fixed * Fixed the catching of an unhandled exception when inotify throws an error * Fixed an uncaught '100 Continue' response when files are being uploaded * Fixed progress bar for uploads to be more accurate regarding percentage complete * Fixed handling of database query enforcement if item is from a shared folder * Fixed compiler depreciation of std.digest.digest * Fixed checking & loading of configuration file sequence * Fixed multiple issues reported by Valgrind * Fixed double scan at application startup when using --monitor & --resync together * Fixed when renaming a file locally, ensure that the target filename is valid before attempting to upload to OneDrive * Fixed so that if a file is modified locally and --resync is used, rename the local file for data preservation to prevent local data loss ### Added * Implement 'bypass_data_preservation' enhancement ### Changed * Changed the monitor interval default to 300 seconds ### Updated * Updated the handling of out-of-space message when OneDrive is out of space * Updated debug logging for retry wait times ## 2.4.1 - 2020-05-02 ### Fixed * Fixed the handling of renaming files to a name starting with a dot when skip_dotfiles = true * Fixed the handling of parentheses from path or file names, when doing comparison with regex * Fixed the handling of renaming dotfiles to another dotfile when skip_dotfile=true in monitor mode * Fixed the handling of --dry-run and --resync together correctly as current database may be corrupt * Fixed building on Alpine Linux under Docker * Fixed the handling of --single-directory for --dry-run and --resync scenarios * Fixed the handling of .nosync directive when downloading new files into existing directories that is (was) in sync * Fixed the handling of zero-byte modified files for OneDrive Business * Fixed skip_dotfiles handling of .folders when in monitor mode to prevent monitoring * Fixed the handling of '.folder' -> 'folder' move when skip_dotfiles is enabled * Fixed the handling of folders that cannot be read (permission error) if parent should be skipped * Fixed the handling of moving folders from skipped directory to non-skipped directory via OneDrive web interface * Fixed building on CentOS Linux under Docker * Fixed Codacy reported issues: double quote to prevent globbing and word splitting * Fixed an assertion when attempting to compute complex path comparison from shared folders * Fixed the handling of .folders when being skipped via skip_dir ### Added * Implement Feature: Implement the ability to set --resync as a config option, default is false ### Updated * Update error logging to be consistent when initialising fails * Update error logging output to handle HTML error response reasoning if present * Update link to new Microsoft documentation * Update logging output to differentiate between OneNote objects and other unsupported objects * Update RHEL/CentOS spec file example * Update known-issues.md regarding 'SSL_ERROR_SYSCALL, errno 104' * Update progress bar to be more accurate when downloading large files * Updated #658 and #865 handling of when to trigger a directory walk when changes occur on OneDrive * Updated handling of when a full scan is required due to utilising sync_list * Updated handling of when OneDrive service throws a 429 or 504 response to retry original request after a delay ## 2.4.0 - 2020-03-22 ### Fixed * Fixed how the application handles 429 response codes from OneDrive (critical update) * Fixed building on Alpine Linux under Docker * Fixed how the 'username' is determined from the running process for logfile naming * Fixed file handling when a failed download has occurred due to exiting via CTRL-C * Fixed an unhandled exception when OneDrive throws an error response on initialising * Fixed the handling of moving files into a skipped .folder when skip_dotfiles = true * Fixed the regex parsing of response URI to avoid potentially generating a bad request to OneDrive, leading to a 'AADSTS9002313: Invalid request. Request is malformed or invalid.' response. ### Added * Added a Dockerfile for building on Raspberry Pi / ARM platforms * Implement Feature: warning on big deletes to safeguard data on OneDrive * Implement Feature: delete local files after sync * Implement Feature: perform skip_dir explicit match only * Implement Feature: provide config file option for specifying the Client Identifier ### Changed * Updated the 'Client Identifier' to a new Application ID ### Updated * Updated relevant documentation (README.md, USAGE.md) to add new feature details and clarify existing information * Update completions to include the --force-http-2 option * Update to always log when a file is skipped due to the item being invalid * Update application output when just authorising application to make information clearer * Update logging output when using sync_list to be clearer as to what is actually being processed and why ## 2.3.13 - 2019-12-31 ### Fixed * Change the sync list override flag to false as default when not using sync_list * Fix --dry-run output when using --upload-only & --no-remote-delete and deleting local files ### Added * Add a verbose log entry when a monitor sync loop with OneDrive starts & completes ### Changed * Remove logAndNotify for 'processing X changes' as it is excessive for each change bundle to inform the desktop of the number of changes the client is processing ### Updated * Updated INSTALL.md with Ubuntu 16.x i386 build instructions to reflect working configuration on legacy hardware * Updated INSTALL.md with details of Linux packages * Updated INSTALL.md build instructions for CentOS platforms ## 2.3.12 - 2019-12-04 ### Fixed * Retry session upload fragment when transient errors occur to prevent silent upload failure * Update Microsoft restriction and limitations about windows naming files to include '~' for folder names * Docker guide fixes, add multiple account setup instructions * Check database for excluded sync_list items previously in scope * Catch DNS resolution error * Fix where an item now out of scope should be flagged for local delete * Fix rebuilding of onedrive, but ensure version is properly updated * Update Ubuntu i386 build instructions to use DMD using preferred method ### Added * Add debug message to when a message is sent to dbus or notification daemon * Add i386 instructions for legacy low memory platforms using LDC ## 2.3.11 - 2019-11-05 ### Fixed * Fix typo in the documentation regarding invalid config when upgrading from 'skilion' codebase * Fix handling of skip_dir, skip_file & sync_list config options * Fix typo in the documentation regarding sync_list * Fix log output to be consistent with sync_list exclusion * Fix 'Processing X changes' output to be more reflective of actual activity when using sync_list * Remove unused and unexported SED variable in Makefile.in * Handle curl exceptions and timeouts better with backoff/retry logic * Update skip_dir pattern matching when using wildcards * Fix when a full rescan is performed when using sync_list * Fix 'Key not found: name' when computing skip_dir path * Fix call from --monitor to observe --no-remote-delete * Fix unhandled exception when monitor initialisation failure occurs due to too many open local files * Fix unhandled 412 error response from OneDrive API when moving files right after upload * Fix --monitor when used with --download-only. This fixes a regression introduced in 12947d1. * Fix if --single-directory is being used, and we are using --monitor, only set inotify watches on the single directory ### Changed * Move JSON logging output from error messages to debug output ## 2.3.10 - 2019-10-01 ### Fixed * Fix searching for 'name' when deleting a synced item, if the OneDrive API does not return the expected details in the API call * Fix abnormal termination when no Internet connection * Fix downloading of files from OneDrive Personal Shared Folders when the OneDrive API responds with unexpected additional path data * Fix logging of 'initialisation' of client to actually when the attempt to initialise is performed * Fix when using a sync_list file, using deltaLink will actually 'miss' changes (moves & deletes) on OneDrive as using sync_list discards changes * Fix OneDrive API status code 500 handling when uploading files as error message is not correct * Fix crash when resume_upload file is not a valid JSON * Fix crash when a file system exception is generated when attempting to update the file date & time and this fails ### Added * If there is a case-insensitive match error, also return the remote name from the response * Make user-agent string a configuration option & add to config file * Set default User-Agent to 'OneDrive Client for Linux v{version}' ### Changed * Make verbose logging output optional on Docker * Enable --resync & debug client output via environment variables on Docker ## 2.3.9 - 2019-09-01 ### Fixed * Catch a 403 Forbidden exception when querying Sharepoint Library Names * Fix unhandled error exceptions that cause application to exit / crash when uploading files * Fix JSON object validation for queries made against OneDrive where a JSON response is expected and where that response is to be used and expected to be valid * Fix handling of 5xx responses from OneDrive when uploading via a session ### Added * Detect the need for --resync when config changes either via config file or cli override ### Changed * Change minimum required version of LDC to v1.12.0 ### Removed * Remove redundant logging output due to change in how errors are reported from OneDrive ## 2.3.8 - 2019-08-04 ### Fixed * Fix unable to download all files when OneDrive fails to return file level details used to validate file integrity * Included the flag "-m" to create the home directory when creating the user * Fix entrypoint.sh to work with "sudo docker run" * Fix docker build error on stretch * Fix hidden directories in 'root' from having prefix removed * Fix Sharepoint Document Library handling for .txt & .csv files * Fix logging for init.d service * Fix OneDrive response missing required 'id' element when uploading images * Fix 'Unexpected character '<'. (Line 1:1)' when OneDrive has an exception error * Fix error when creating the sync dir fails when there is no permission to create the sync dir ### Added * Add explicit check for hashes to be returned in cases where OneDrive API fails to provide them despite requested to do so * Add comparison with sha1 if OneDrive provides that rather than quickXor * Add selinux configuration details for a sync folder outside of the home folder * Add date tag on docker.hub * Add back CentOS 6 install & uninstall to Makefile * Add a check to handle moving items out of sync_list sync scope & delete locally if true * Implement --get-file-link which will return the weburl of a file which has been synced to OneDrive ### Changed * Change unauthorized-api exit code to 3 * Update LDC to v1.16.0 for Travis CI testing * Use replace function for modified Sharepoint Document Library files rather than delete and upload as new file, preserving file history * Update Sharepoint modified file handling for files > 4Mb in size ### Removed * Remove -d shorthand for --download-only to avoid confusion with other GNU applications where -d stands for 'debug' ## 2.3.7 - 2019-07-03 ### Fixed * Fix not all files being downloaded due to OneDrive query failure * False DB update which potentially could had lead to false data loss on OneDrive ## 2.3.6 - 2019-07-03 (DO NOT USE) ### Fixed * Fix JSONValue object validation * Fix building without git being available * Fix some spelling/grammatical errors * Fix OneDrive error response on creating upload session ### Added * Add download size & hash check to ensure downloaded files are valid and not corrupt * Added --force-http-2 to use HTTP/2 if desired ### Changed * Deprecated --force-http-1.1 (enabled by default) due to OneDrive inconsistent behavior with HTTP/2 protocol ## 2.3.5 - 2019-06-19 ### Fixed * Handle a directory in the sync_dir when no permission to access * Get rid of forced root necessity during installation * Fix broken autoconf code for --enable-XXX options * Fix so that skip_size check should only be used if configured * Fix a OneDrive Internal Error exception occurring before attempting to download a file ### Added * Check for supported version of D compiler ## 2.3.4 - 2019-06-13 ### Fixed * Fix 'Local files not deleted' when using bad 'skip_file' entry * Fix --dry-run logging output for faking downloading new files * Fix install unit files to correct location on RHEL/CentOS 7 * Fix up unit file removal on all platforms * Fix setting times on a file by adding a check to see if the file was actually downloaded before attempting to set the times on the file * Fix an unhandled curl exception when OneDrive throws an internal timeout error * Check timestamp to ensure that latest timestamp is used when comparing OneDrive changes * Fix handling responses where cTag JSON elements are missing * Fix Docker entrypoint.sh failures when GID is defined but not UID ### Added * Add autoconf based build system * Add an encoding validation check before any path length checks are performed as if the path contains any invalid UTF-8 sequences * Implement --sync-root-files to sync all files in the OneDrive root when using a sync_list file that would normally exclude these files from being synced * Implement skip_size feature request * Implement feature request to support file based OneDrive authorization (request | response) ### Updated * Better handle initialisation issues when OneDrive / MS Graph is experiencing problems that generate 401 & 5xx error codes * Enhance error message when unable to connect to Microsoft OneDrive service when the local CA SSL certificate(s) have issues * Update Dockerfile to correctly build on Docker Hub * Rework directory layout and re-factor MD files for readability ## 2.3.3 - 2019-04-16 ### Fixed * Fix --upload-only check for Sharepoint uploads * Fix check to ensure item root we flag as 'root' actually is OneDrive account 'root' * Handle object error response from OneDrive when uploading to OneDrive Business * Fix handling of some OneDrive accounts not providing 'quota' details * Fix 'resume_upload' handling in the event of bad OneDrive response ### Added * Add debugging for --get-O365-drive-id function * Add shell (bash,zsh) completion support * Add config options for command line switches to allow for better config handling in docker containers ### Updated * Implement more meaningful 5xx error responses * Update onedrive.logrotate indentations and comments * Update 'min_notif_changes' to 'min_notify_changes' ## 2.3.2 - 2019-04-02 ### Fixed * Reduce scanning the entire local system in monitor mode for local changes * Resolve file creation loop when working directly in the synced folder and Microsoft Sharepoint ### Added * Add 'monitor_fullscan_frequency' config option to set the frequency of performing a full disk scan when in monitor mode ### Updated * Update default 'skip_file' to include tmp and lock files generated by LibreOffice * Update database version due to changing defaults of 'skip_file' which will force a rebuild and use of new skip_file default regex ## 2.3.1 - 2019-03-26 ### Fixed * Resolve 'make install' issue where rebuild of application would occur due to 'version' being flagged as .PHONY * Update readme build instructions to include 'make clean;' before build to ensure that 'version' is cleanly removed and can be updated correctly * Update Debian Travis CI build URL's ## 2.3.0 - 2019-03-25 ### Fixed * Resolve application crash if no 'size' value is returned when uploading a new file * Resolve application crash if a 5xx error is returned when uploading a new file * Resolve not 'refreshing' version file when rebuilding * Resolve unexpected application processing by preventing use of --synchronize & --monitor together * Resolve high CPU usage when performing DB reads * Update error logging around directory case-insensitive match * Update Travis CI and ARM dependencies for LDC 1.14.0 * Update Makefile due to build failure if building from release archive file * Update logging as to why a OneDrive object was skipped ### Added * Implement config option 'skip_dir' ## 2.2.6 - 2019-03-12 ### Fixed * Resolve application crash when unable to delete remote folders when business retention policies are enabled * Resolve deprecation warning: loop index implicitly converted from size_t to int * Resolve warnings regarding 'bashisms' * Resolve handling of notification failure is dbus server has not started or available * Resolve handling of response JSON to ensure that 'id' key element is always checked for * Resolve excessive & needless logging in monitor mode * Resolve compiling with LDC on Alpine as musl lacks some standard interfaces * Resolve notification issues when offline and cannot act on changes * Resolve Docker entrypoint.sh to accept command line arguments * Resolve to create a new upload session on reinit * Resolve where on OneDrive query failure, default root and drive id is used if a response is not returned * Resolve Key not found: nextExpectedRanges when attempting session uploads and incorrect response is returned * Resolve application crash when re-using an authentication URI twice after previous --logout * Resolve creating a folder on a shared personal folder appears successful but returns a JSON error * Resolve to treat mv of new file as upload of mv target * Update Debian i386 build dependencies * Update handling of --get-O365-drive-id to print out all 'site names' that match the explicit search entry rather than just the last match * Update Docker readme & documentation * Update handling of validating local file permissions for new file uploads ### Added * Add support for install & uninstall on RHEL / CentOS 6.x * Add support for when notifications are enabled, display the number of OneDrive changes to process if any are found * Add 'config' option 'min_notif_changes' for minimum number of changes to notify on, default = 5 * Add additional Docker container builds utilising a smaller OS footprint * Add configurable interval of logging in monitor mode * Implement new CLI option --skip-dot-files to skip .files and .folders if option is used * Implement new CLI option --check-for-nosync to ignore folder when special file (.nosync) present * Implement new CLI option --dry-run ## 2.2.5 - 2019-01-16 ### Fixed * Update handling of HTTP 412 - Precondition Failed errors * Update --display-config to display sync_list if configured * Add a check for 'id' key on metadata update to prevent 'std.json.JSONException@std/json.d(494): Key not found: id' * Update handling of 'remote' folder designation as 'root' items * Ensure that remote deletes are handled correctly * Handle 'Item not found' exception when unable to query OneDrive 'root' for changes * Add handling for JSON response error when OneDrive API returns a 404 due to OneDrive API regression * Fix items highlighted by codacy review ### Added * Add --force-http-1.1 flag to downgrade any HTTP/2 curl operations to HTTP 1.1 protocol * Support building with ldc2 and usage of pkg-config for lib finding ## 2.2.4 - 2018-12-28 ### Fixed * Resolve JSONException when supplying --get-O365-drive-id option with a string containing spaces * Resolve 'sync_dir' not read from 'config' file when run in Docker container * Resolve logic where potentially a 'default' ~/OneDrive sync_dir could be set despite 'config' file configured for an alternate * Make sure sqlite checkpointing works by properly finalizing statements * Update logic handling of --single-directory to prevent inadvertent local data loss * Resolve signal handling and database shutdown on SIGINT and SIGTERM * Update man page * Implement better help output formatting ### Added * Add debug handling for sync_dir operations * Add debug handling for homePath calculation * Add debug handling for configDirBase calculation * Add debug handling if syncDir is created * Implement Feature Request: Add status command or switch ## 2.2.3 - 2018-12-20 ### Fixed * Fix syncdir option is ignored ## 2.2.2 - 2018-12-20 ### Fixed * Handle short lived files in monitor mode * Provide better log messages, less noise on temporary timeouts * Deal with items that disappear during upload * Deal with deleted move targets * Reinitialize sync engine after three failed attempts * Fix activation of dmd for docker builds * Fix to check displayName rather than description for --get-O365-drive-id * Fix checking of config file keys for validity * Fix exception handling when missing parameter from usage option ### Added * Notification support via libnotify * Add very verbose (debug) mode by double -v -v * Implement option --display-config ## 2.2.1 - 2018-12-04 ### Fixed * Gracefully handle connection errors in monitor mode * Fix renaming of files when syncing * Installation of doc files, addition of man page * Adjust timeout values for libcurl * Continue in monitor mode when sync timed out * Fix unreachable statements * Update Makefile to better support packaging * Allow starting offline in monitor mode ### Added * Implement --get-O365-drive-id to get correct SharePoint Shared Library (#248) * Docker buildfiles for onedrive service (#262) ## 2.2.0 - 2018-11-24 ### Fixed * Updated client to output additional logging when debugging * Resolve database assertion failure due to authentication * Resolve unable to create folders on shared OneDrive Personal accounts ### Added * Implement feature request to Sync from Microsoft SharePoint * Implement feature request to specify a logging directory if logging is enabled ### Changed * Change '--download' to '--download-only' to align with '--upload-only' * Change logging so that logging to a separate file is no longer the default ## 2.1.6 - 2018-11-15 ### Fixed * Updated HTTP/2 transport handling when using curl 7.62.0 for session uploads ### Added * Added PKGBUILD for makepkg for building packages under Arch Linux ## 2.1.5 - 2018-11-11 ### Fixed * Resolve 'Key not found: path' when syncing from some shared folders due to OneDrive API change * Resolve to only upload changes on remote folder if the item is in the database - dont assert if false * Resolve files will not download or upload when using curl 7.62.0 due to HTTP/2 being set as default for all curl operations * Resolve to handle HTTP request returned status code 412 (Precondition Failed) for session uploads to OneDrive Personal Accounts * Resolve unable to remove '~/.config/onedrive/resume_upload: No such file or directory' if there is a session upload error and the resume file does not get created * Resolve handling of response codes when using 2 different systems when using '--upload-only' but the same OneDrive account and uploading the same filename to the same location ### Updated * Updated Travis CI building on LDC v1.11.0 for ARMHF builds * Updated Makefile to use 'install -D -m 644' rather than 'cp -raf' * Updated default config to be aligned to code defaults ## 2.1.4 - 2018-10-10 ### Fixed * Resolve syncing of OneDrive Personal Shared Folders due to OneDrive API change * Resolve incorrect systemd installation location(s) in Makefile ## 2.1.3 - 2018-10-04 ### Fixed * Resolve File download fails if the file is marked as malware in OneDrive * Resolve high CPU usage when running in monitor mode * Resolve how default path is set when running under systemd on headless systems * Resolve incorrectly nested configDir in X11 systems * Resolve Key not found: driveType * Resolve to validate filename length before download to conform with Linux FS limits * Resolve file handling to look for HTML ASCII codes which will cause uploads to fail * Resolve Key not found: expirationDateTime on session resume ### Added * Update Travis CI building to test build on ARM64 ## 2.1.2 - 2018-08-27 ### Fixed * Resolve skipping of symlinks in monitor mode * Resolve Gateway Timeout - JSONValue is not an object * Resolve systemd/user is not supported on CentOS / RHEL * Resolve HTTP request returned status code 429 (Too Many Requests) * Resolve handling of maximum path length calculation * Resolve 'The parent item is not in the local database' * Resolve Correctly handle file case sensitivity issues in same folder * Update unit files documentation link ## 2.1.1 - 2018-08-14 ### Fixed * Fix handling no remote delete of remote directories when using --no-remote-delete * Fix handling of no permission to access a local file / corrupt local file * Fix application crash when unable to access login.microsoft.com upon application startup ### Added * Build instructions for openSUSE Leap 15.0 ## 2.1.0 - 2018-08-10 ### Fixed * Fix handling of database exit scenarios when there is zero disk space left on drive where the items database resides * Fix handling of incorrect database permissions * Fix handling of different database versions to automatically re-create tables if version mis-match * Fix handling timeout when accessing the Microsoft OneDrive Service * Fix localFileModifiedTime to not use fraction seconds ### Added * Implement Feature: Add a progress bar for large uploads & downloads * Implement Feature: Make checkinterval for monitor configurable * Implement Feature: Upload Only Option that does not perform remote delete * Implement Feature: Add ability to skip symlinks * Add dependency, ebuild and build instructions for Gentoo distributions ### Changed * Build instructions for x86, x86_64 and ARM32 platforms * Travis CI files to automate building on x32, x64 and ARM32 architectures * Travis CI files to test built application against valid, invalid and problem files from previous issues ## 2.0.2 - 2018-07-18 ### Fixed * Fix systemd service install for builds with DESTDIR defined * Fix 'HTTP 412 - Precondition Failed' error handling * Gracefully handle OneDrive account password change * Update logic handling of --upload-only and --local-first ## 2.0.1 - 2018-07-11 ### Fixed * Resolve computeQuickXorHash generates a different hash when files are > 64Kb ## 2.0.0 - 2018-07-10 ### Fixed * Resolve conflict resolution issue during syncing - the client does not handle conflicts very well & keeps on adding the hostname to files * Resolve skilion #356 by adding additional check for 409 response from OneDrive * Resolve multiple versions of file shown on website after single upload * Resolve to gracefully fail when 'onedrive' process cannot get exclusive database lock * Resolve 'Key not found: fileSystemInfo' when then item is a remote item (OneDrive Personal) * Resolve skip_file config entry needs to be checked for any characters to escape * Resolve Microsoft Naming Convention not being followed correctly * Resolve Error when trying to upload a file with weird non printable characters present * Resolve Crash if file is locked by online editing (status code 423) * Resolve compilation issue with dmd-2.081.0 * Resolve skip_file configuration doesn't handle spaces or specified directory paths ### Added * Implement Feature: Add a flag to detect when the sync-folder is missing * Implement Travis CI for code testing ### Changed * Update Makefile to use DESTDIR variables * Update OneDrive Business maximum path length from 256 to 400 * Update OneDrive Business allowed characters for files and folders * Update sync_dir handling to use the absolute path for setting parameter to something other than ~/OneDrive via config file or command line * Update Fedora build instructions ## 1.1.2 - 2018-05-17 ### Fixed * Fix 4xx errors including (412 pre-condition, 409 conflict) * Fix Key not found: lastModifiedDateTime (OneDrive API change) * Fix configuration directory not found when run via init.d * Fix skilion Issues #73, #121, #132, #224, #257, #294, #295, #297, #298, #300, #306, #315, #320, #329, #334, #337, #341 ### Added * Add logging - log client activities to a file (/var/log/onedrive/%username%.onedrive.log or ~/onedrive.log) * Add https debugging as a flag * Add `--synchronize` to prevent from syncing when just blindly running the application * Add individual folder sync * Add sync from local directory first rather than download first then upload * Add upload long path check * Add upload only * Add check for max upload file size before attempting upload * Add systemd unit files for single & multi user configuration * Add init.d file for older init.d based services * Add Microsoft naming conventions and namespace validation for items that will be uploaded * Add remaining free space counter at client initialisation to avoid out of space upload issue * Add large file upload size check to align to OneDrive file size limitations * Add upload file size validation & retry if does not match * Add graceful handling of some fatal errors (OneDrive 5xx error handling) ## Unreleased - 2018-02-19 ### Fixed * Crash when the delta link is expired ### Changed * Disabled buffering on stdout ## 1.1.1 - 2018-01-20 ### Fixed * Wrong regex for parsing authentication uri ## 1.1.0 - 2018-01-19 ### Added * Support for shared folders (OneDrive Personal only) * `--download` option to only download changes * `DC` variable in Makefile to chose the compiler ### Changed * Print logs on stdout instead of stderr * Improve log messages ## 1.0.1 - 2017-08-01 ### Added * `--syncdir` option ### Changed * `--version` output simplified * Updated README ### Fixed * Fix crash caused by remotely deleted and recreated directories ## 1.0.0 - 2017-07-14 ### Added * `--version` option onedrive-2.5.10/config000066400000000000000000000231051513710110600145760ustar00rootroot00000000000000# Configuration for OneDrive Linux Client # This file contains the list of supported configuration fields with their default values. # All values need to be enclosed in quotes # When changing a config option below, remove the '#' from the start of the config line # For a more detailed explanation of all config options below see docs/application-config-options.md or the man page. ## This is the config option for application id that used to identify itself to Microsoft OneDrive. #application_id = "d50ca740-c83f-4d1b-b616-12c519384f0c" ## This is the config option to change the Microsoft Azure Authentication Endpoint that the client uses to conform with data and security requirements that requires data to reside within the geographic borders of that country. #azure_ad_endpoint = "" ## This config option allows the locking of the client to a specific single tenant and will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common". #azure_tenant_id = "" ## This config option allows the disabling of preserving local data by renaming the local file in the event of data conflict. If this is enabled, you will experience data loss on your local data as the local file will be over-written with data from OneDrive online. Use with care and caution. #bypass_data_preservation = "false" ## This config option is useful to prevent application startup & ongoing use in 'Monitor Mode' if the configured 'sync_dir' is a separate disk that is being mounted by your system. #check_nomount = "false" ## This config option is useful to prevent the sync of a *local* directory to Microsoft OneDrive. It will *not* check for this file online to prevent the download of directories to your local system. #check_nosync = "false" ## This config option defines the number of children in a path that is locally removed which will be classified as a 'big data delete' to safeguard large data removals - which are typically accidental local delete events. #classify_as_big_delete = "1000" ## This config option provides the capability to cleanup local files and folders if they are removed online. #cleanup_local_files = "false" ## This configuration setting manages the TCP connection timeout duration in seconds for HTTPS connections to Microsoft OneDrive when using the curl library. #connect_timeout = "10" ## This setting controls how the application handles the Microsoft SharePoint feature which modifies all PDF, MS Office & HTML files post upload, effectively breaking the integrity of your data online. #create_new_file_version = "false" ## This setting controls the timeout duration, in seconds, for when data is not received on an active connection to Microsoft OneDrive over HTTPS. #data_timeout = "60" ## This setting controls whether the curl library is configured to output additional data to assist with diagnosing HTTPS issues and problems. #debug_https = "false" ## This setting controls whether 'inotify' events should be delayed or not. #delay_inotify_processing = "false" ## This option determines whether the client will conduct integrity validation on files downloaded from Microsoft OneDrive. #disable_download_validation = "false" ## This setting controls whether GUI notifications are sent from the client to your display manager session. #disable_notifications = "false" ## This setting controls whether the application will set the permissions on files and directories using the values of 'sync_dir_permissions' and 'sync_file_permissions'. #disable_permission_set = "false" ## This option determines whether the client will conduct integrity validation on files uploaded to Microsoft OneDrive. #disable_upload_validation = "false" ## This option will include the running config of the application at application startup. #display_running_config = "false" ## This option will display file transfer metrics when enabled. #display_transfer_metrics = "false" ## This setting controls the libcurl DNS cache value. #dns_timeout = "60" ## This setting forces the client to only download data from Microsoft OneDrive and replicate that data locally. #download_only = "false" ## This setting controls the specific drive identifier the client will use when syncing with Microsoft OneDrive. #drive_id = "" ## This setting controls the application capability to test your application configuration without actually performing any real activity. #dry_run = "false" ## This setting controls the application logging all actions to a separate file. #enable_logging = "false" ## This setting controls the file fragment size when uploading large files to Microsoft OneDrive. #file_fragment_size = "10" ## This setting controls the application HTTP protocol version, downgrading to HTTP/1.1 when enabled. #force_http_11 = "false" ## This option, when enabled, forces the client to use a 'session' upload, which, when the 'file' is uploaded by the session, this includes the local timestamp of the file #force_session_upload = "false" ## This setting controls the application IP protocol used when communicating with Microsoft OneDrive. #ip_protocol_version = "0" ## This setting controls what the application considers the 'source of truth' for your data. #local_first = "false" ## This setting controls the custom application log path when 'enable_logging' has been enabled. #log_dir = "" ## This configuration option controls the number of seconds a cURL engine is considered stale and destroyed after last use. #max_curl_idle = "120" ## This configuration option controls how often a full scan of your data is performed in monitor mode. #monitor_fullscan_frequency = "12" ## This setting determines how often the sync loop runs in --monitor mode. #monitor_interval = "300" ## This configuration option controls suppression of frequent monitor log messages. #monitor_log_frequency = "12" ## This configuration option controls whether local deletes are replicated to OneDrive when using --upload-only. #no_remote_delete = "false" ## This setting controls whether the client logs GUI notifications when file actions occur. #notify_file_actions = "false" ## This configuration controls the maximum amount of time a file operation is allowed to take. #operation_timeout = "3600" ## Permanently delete online items when removed locally. Bypasses OneDrive recycle bin. #permanent_delete = "false" ## This setting limits the per-thread bandwidth used by the client. #rate_limit = "0" ## This configuration option controls whether the client operates in read-only mode. #read_only_auth_scope = "false" ## This configuration option allows you to specify the 'Recycle Bin' path for the application. This is only used if 'use_recycle_bin' is enabled. #recycle_bin_path = "/path/to/desired/location/" ## This option removes the local file after a successful upload to OneDrive. #remove_source_files = "false" ## This configuration controls whether a full resync is performed at application startup. #resync = "false" ## This option approves use of --resync, useful in automated environments. #resync_auth = "false" ## This option controls which directories are excluded from sync. #skip_dir = "" ## When enabled, skip_dir matches must be strict, full path matches only. #skip_dir_strict_match = "false" ## When enabled, skip dotfiles and dot folders from sync. #skip_dotfiles = "false" ## This setting controls which files are skipped during sync. #skip_file = "~*|.~*|*.tmp|*.swp|*.partial" ## Skip syncing files larger than this size in MB. #skip_size = "0" ## Skip symbolic links during sync. #skip_symlinks = "false" ## Reserve this much free disk space (in MB) to avoid disk full issues. #space_reservation = "50" ## Sync OneDrive Business shared folders that are shortcuts in 'My Files'. These will be stored in a local folder called 'Files Shared With Me'. #sync_business_shared_items = "false" ## Local directory to sync with OneDrive. #sync_dir = "~/OneDrive" ## Permissions to apply to created local directories. #sync_dir_permissions = "700" ## Permissions to apply to created local files. #sync_file_permissions = "600" ## Sync all root files in sync_dir when using sync_list. #sync_root_files = "false" ## Number of threads to use for upload/download. #threads = "8" ## File transfer ordering between client and OneDrive. #transfer_order = "default" ## Only upload changes to OneDrive, do not download from cloud. #upload_only = "false" ## Authenticate using the Microsoft OAuth2 Device Authorisation Flow #use_device_auth = "true" ## Single Sign-On (SSO) via Intune using the Microsoft Identity Device Broker #use_intune_sso = "true" ## This configuration option controls the application function to move online deleted files to a 'Recycle Bin' on your system. #use_recycle_bin = "false" ## Custom User-Agent string for requests to OneDrive. If you change this, you will get throttled by the Microsoft Graph API. Change with caution. #user_agent = "ISV|abraunegg|OneDrive Client for Linux/vX.Y.Z-A-bcdefghi" ## Enable webhook-based remote update notifications in monitor mode. #webhook_enabled = "false" ## Time in seconds before webhook subscription expires. #webhook_expiration_interval = "600" ## IP address to listen on for incoming webhook updates. #webhook_listening_host = "0.0.0.0" ## TCP port to listen on for incoming webhook updates. #webhook_listening_port = "8888" ## Public webhook URL for Microsoft to send notifications to. #webhook_public_url = "" ## Frequency (in seconds) to renew webhook subscription. #webhook_renewal_interval = "300" ## Frequency (in seconds) to retry a failed webhook subscription renewal. #webhook_retry_interval = "60" ## Write xattr metadata fields (createdBy, lastModifiedBy) to synced files. #write_xattr_data = "false" onedrive-2.5.10/configure000077500000000000000000003436571513710110600153360ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for onedrive v2.5.10. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: https://github.com/abraunegg/onedrive about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='onedrive' PACKAGE_TARNAME='onedrive' PACKAGE_VERSION='v2.5.10' PACKAGE_STRING='onedrive v2.5.10' PACKAGE_BUGREPORT='https://github.com/abraunegg/onedrive' PACKAGE_URL='' ac_unique_file="src/main.d" ac_subst_vars='LTLIBOBJS LIBOBJS DEBUG FISH_COMPLETION_DIR ZSH_COMPLETION_DIR BASH_COMPLETION_DIR bashcompdir COMPLETIONS dynamic_linker_LIBS bsd_inotify_LIBS NOTIFICATIONS notify_LIBS notify_CFLAGS HAVE_SYSTEMD systemduserunitdir systemdsystemunitdir enable_dbus dbus_LIBS dbus_CFLAGS sqlite_LIBS sqlite_CFLAGS curl_LIBS curl_CFLAGS WERROR_DCFLAG OUTPUT_DCFLAG LINKER_DCFLAG VERSION_DCFLAG RELEASE_DCFLAGS DEBUG_DCFLAGS PACKAGE_DATE PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM DCFLAGS DC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_version_check with_systemdsystemunitdir with_systemduserunitdir enable_notifications enable_completions with_bash_completion_dir with_zsh_completion_dir with_fish_completion_dir enable_debug ' ac_precious_vars='build_alias host_alias target_alias DC DCFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR curl_CFLAGS curl_LIBS sqlite_CFLAGS sqlite_LIBS dbus_CFLAGS dbus_LIBS notify_CFLAGS notify_LIBS bashcompdir' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures onedrive v2.5.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/onedrive] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of onedrive v2.5.10:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-version-check Disable checks of compiler version during configure time --enable-notifications Enable desktop notifications via libnotify --enable-completions Install shell completions for bash, zsh, and fish --enable-debug Pass debug option to the compiler Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-systemdsystemunitdir=DIR Directory for systemd system service files --with-systemduserunitdir=DIR Directory for systemd user service files --with-bash-completion-dir=DIR Directory for bash completion files --with-zsh-completion-dir=DIR Directory for zsh completion files --with-fish-completion-dir=DIR Directory for fish completion files Some influential environment variables: DC D compiler executable DCFLAGS flags for D compiler PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path curl_CFLAGS C compiler flags for curl, overriding pkg-config curl_LIBS linker flags for curl, overriding pkg-config sqlite_CFLAGS C compiler flags for sqlite, overriding pkg-config sqlite_LIBS linker flags for sqlite, overriding pkg-config dbus_CFLAGS C compiler flags for dbus, overriding pkg-config dbus_LIBS linker flags for dbus, overriding pkg-config notify_CFLAGS C compiler flags for notify, overriding pkg-config notify_LIBS linker flags for notify, overriding pkg-config bashcompdir value of completionsdir for bash-completion, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF onedrive configure v2.5.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by onedrive $as_me v2.5.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi PACKAGE_DATE="January 2026" for ac_prog in dmd ldmd2 ldc2 gdmd gdc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DC"; then ac_cv_prog_DC="$DC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DC=$ac_cv_prog_DC if test -n "$DC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DC" >&5 $as_echo "$DC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DC" && break done test -n "$DC" || DC="NOT_FOUND" DC_TYPE= case $(basename $DC) in *ldc2*) DC_TYPE=ldc ;; *gdc*) DC_TYPE=gdc ;; *dmd*) DC_TYPE=dmd ;; NOT_FOUND) as_fn_error 1 "Could not find any compatible D compiler" "$LINENO" 5 esac vercomp () { IFS=. read -r a0 a1 a2 aa <' $bb then return 1 else return 0 fi fi fi fi } DO_VERSION_CHECK=1 # Check whether --enable-version-check was given. if test "${enable_version_check+set}" = set; then : enableval=$enable_version_check; fi if test "x$enable_version_check" = "xno"; then : DO_VERSION_CHECK=0 fi if test "$DO_VERSION_CHECK" = "1"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of D compiler" >&5 $as_echo_n "checking version of D compiler... " >&6; } # check for valid versions case $(basename $DC) in *ldmd2*|*ldc2*) # LDC - the LLVM D compiler (1.12.0): ... VERSION=`$DC --version` # remove everything up to first ( VERSION=${VERSION#* (} # remove everything after ): VERSION=${VERSION%%):*} # now version should be something like L.M.N MINVERSION=1.20.1 ;; *gdmd*|*gdc*) # Both gdmd and gdc print the same version information VERSION=`${DC} --version | head -n1` # Some examples of output: # gdc (Gentoo 14.2.1_p20250301 p8) 14.2.1 20250301 # gcc (GCC) 14.2.1 20250207 # Arch # gdc (GCC) 14.2.1 20250110 (Red Hat 14.2.1-7) # gdc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 VERSION=${VERSION#gdc } # VERSION=(...) VER DATE ... VERSION=${VERSION#*) } # VERSION=VER DATE ... VERSION=${VERSION%% *} MINVERSION=15 ;; *dmd*) # DMD64 D Compiler v2.085.1\n... VERSION=`$DC --version | tr '\n' ' '` VERSION=${VERSION#*Compiler v} VERSION=${VERSION%% *} # now version should be something like L.M.N MINVERSION=2.091.1 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VERSION" >&5 $as_echo "$VERSION" >&6; } vercomp $MINVERSION $VERSION if test $? = 1 then as_fn_error 1 "Compiler version insufficient, current compiler version $VERSION, minimum version $MINVERSION" "$LINENO" 5 fi #echo "MINVERSION=$MINVERSION VERSION=$VERSION" fi case "$DC_TYPE" in dmd) DEBUG_DCFLAGS="-g -debug -gs" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-version LINKER_DCFLAG=-L OUTPUT_DCFLAG=-of WERROR_DCFLAG=-w ;; ldc) DEBUG_DCFLAGS="-g -d-debug -gc" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-d-version LINKER_DCFLAG=-L OUTPUT_DCFLAG=-of WERROR_DCFLAG=-w ;; gdc) DEBUG_DCFLAGS="-g -fdebug" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-fversion LINKER_DCFLAG=-Wl, OUTPUT_DCFLAG=-o WERROR_DCFLAG=-Werror ;; esac pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl" >&5 $as_echo_n "checking for curl... " >&6; } if test -n "$curl_CFLAGS"; then pkg_cv_curl_CFLAGS="$curl_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcurl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_curl_CFLAGS=`$PKG_CONFIG --cflags "libcurl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$curl_LIBS"; then pkg_cv_curl_LIBS="$curl_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcurl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_curl_LIBS=`$PKG_CONFIG --libs "libcurl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then curl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcurl" 2>&1` else curl_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcurl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$curl_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libcurl) were not met: $curl_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables curl_CFLAGS and curl_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables curl_CFLAGS and curl_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else curl_CFLAGS=$pkg_cv_curl_CFLAGS curl_LIBS=$pkg_cv_curl_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite" >&5 $as_echo_n "checking for sqlite... " >&6; } if test -n "$sqlite_CFLAGS"; then pkg_cv_sqlite_CFLAGS="$sqlite_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sqlite_CFLAGS=`$PKG_CONFIG --cflags "sqlite3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sqlite_LIBS"; then pkg_cv_sqlite_LIBS="$sqlite_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sqlite_LIBS=`$PKG_CONFIG --libs "sqlite3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sqlite_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sqlite3" 2>&1` else sqlite_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sqlite3" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sqlite_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sqlite3) were not met: $sqlite_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables sqlite_CFLAGS and sqlite_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables sqlite_CFLAGS and sqlite_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else sqlite_CFLAGS=$pkg_cv_sqlite_CFLAGS sqlite_LIBS=$pkg_cv_sqlite_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable dbus support" >&5 $as_echo_n "checking whether to enable dbus support... " >&6; } case "$(uname -s)" in Linux) enable_dbus=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (on Linux)" >&5 $as_echo "yes (on Linux)" >&6; } pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbus" >&5 $as_echo_n "checking for dbus... " >&6; } if test -n "$dbus_CFLAGS"; then pkg_cv_dbus_CFLAGS="$dbus_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "dbus-1 >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_dbus_CFLAGS=`$PKG_CONFIG --cflags "dbus-1 >= 1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$dbus_LIBS"; then pkg_cv_dbus_LIBS="$dbus_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "dbus-1 >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_dbus_LIBS=`$PKG_CONFIG --libs "dbus-1 >= 1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then dbus_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "dbus-1 >= 1.0" 2>&1` else dbus_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "dbus-1 >= 1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$dbus_PKG_ERRORS" >&5 as_fn_error $? "dbus-1 development files not found. Please install dbus-devel (Red Hat), libdbus-1-dev (Debian) or dbus (Arch | Manjaro)" "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "dbus-1 development files not found. Please install dbus-devel (Red Hat), libdbus-1-dev (Debian) or dbus (Arch | Manjaro)" "$LINENO" 5 else dbus_CFLAGS=$pkg_cv_dbus_CFLAGS dbus_LIBS=$pkg_cv_dbus_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_DBUS 1" >>confdefs.h fi ;; *) enable_dbus=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (not on Linux)" >&5 $as_echo "no (not on Linux)" >&6; } ;; esac # Check whether --with-systemdsystemunitdir was given. if test "${with_systemdsystemunitdir+set}" = set; then : withval=$with_systemdsystemunitdir; else with_systemdsystemunitdir=auto fi if test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"; then : def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) if test "x$def_systemdsystemunitdir" = "x"; then : if test "x$with_systemdsystemunitdir" = "xyes"; then : as_fn_error $? "systemd support requested but pkg-config unable to query systemd package" "$LINENO" 5 fi with_systemdsystemunitdir=no else with_systemdsystemunitdir="$def_systemdsystemunitdir" fi fi if test "x$with_systemdsystemunitdir" != "xno"; then : systemdsystemunitdir=$with_systemdsystemunitdir fi # Check whether --with-systemduserunitdir was given. if test "${with_systemduserunitdir+set}" = set; then : withval=$with_systemduserunitdir; else with_systemduserunitdir=auto fi if test "x$with_systemduserunitdir" = "xyes" -o "x$with_systemduserunitdir" = "xauto"; then : def_systemduserunitdir=$($PKG_CONFIG --variable=systemduserunitdir systemd) if test "x$def_systemduserunitdir" = "x"; then : if test "x$with_systemduserunitdir" = "xyes"; then : as_fn_error $? "systemd support requested but pkg-config unable to query systemd package" "$LINENO" 5 fi with_systemduserunitdir=no else with_systemduserunitdir="$def_systemduserunitdir" fi fi if test "x$with_systemduserunitdir" != "xno"; then : systemduserunitdir=$with_systemduserunitdir fi if test "x$with_systemduserunitdir" != "xno" -a "x$with_systemdsystemunitdir" != "xno"; then : havesystemd=yes else havesystemd=no fi HAVE_SYSTEMD=$havesystemd # Check whether --enable-notifications was given. if test "${enable_notifications+set}" = set; then : enableval=$enable_notifications; fi if test "x$enable_notifications" = "xyes"; then : enable_notifications=yes else enable_notifications=no fi if test "x$enable_notifications" = "xyes"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for notify" >&5 $as_echo_n "checking for notify... " >&6; } if test -n "$notify_CFLAGS"; then pkg_cv_notify_CFLAGS="$notify_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_notify_CFLAGS=`$PKG_CONFIG --cflags "libnotify" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$notify_LIBS"; then pkg_cv_notify_LIBS="$notify_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_notify_LIBS=`$PKG_CONFIG --libs "libnotify" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then notify_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnotify" 2>&1` else notify_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnotify" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$notify_PKG_ERRORS" >&5 enable_notifications=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } enable_notifications=no else notify_CFLAGS=$pkg_cv_notify_CFLAGS notify_LIBS=$pkg_cv_notify_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi else notify_LIBS="" fi NOTIFICATIONS=$enable_notifications # Conditionally set bsd_inotify_LIBS based on the platform case "$(uname -s)" in Linux) bsd_inotify_LIBS="" ;; FreeBSD) if test "$(uname -U)" -gt 1500060; then : bsd_inotify_LIBS="" else bsd_inotify_LIBS="-L/usr/local/lib -linotify" fi ;; OpenBSD) bsd_inotify_LIBS="-L/usr/local/lib/inotify -linotify" ;; *) bsd_inotify_LIBS="" ;; esac # Conditionally set dynamic_linker_LIBS based on the platform case "$(uname -s)" in Linux) dynamic_linker_LIBS="-ldl" ;; *) dynamic_linker_LIBS="" ;; esac # Check whether --enable-completions was given. if test "${enable_completions+set}" = set; then : enableval=$enable_completions; fi if test "x$enable_completions" = "xyes"; then : enable_completions=yes else enable_completions=no fi COMPLETIONS=$enable_completions if test "x$enable_completions" = "xyes"; then : # Check whether --with-bash-completion-dir was given. if test "${with_bash_completion_dir+set}" = set; then : withval=$with_bash_completion_dir; else with_bash_completion_dir=auto fi if test "x$with_bash_completion_dir" = "xyes" -o "x$with_bash_completion_dir" = "xauto"; then : if test -n "$bashcompdir"; then pkg_cv_bashcompdir="$bashcompdir" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bash-completion\""; } >&5 ($PKG_CONFIG --exists --print-errors "bash-completion") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_bashcompdir=`$PKG_CONFIG --variable="completionsdir" "bash-completion" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi bashcompdir=$pkg_cv_bashcompdir if test "x$bashcompdir" = x""; then : bashcompdir="${sysconfdir}/bash_completion.d" fi with_bash_completion_dir=$bashcompdir fi BASH_COMPLETION_DIR=$with_bash_completion_dir # Check whether --with-zsh-completion-dir was given. if test "${with_zsh_completion_dir+set}" = set; then : withval=$with_zsh_completion_dir; else with_zsh_completion_dir=auto fi if test "x$with_zsh_completion_dir" = "xyes" -o "x$with_zsh_completion_dir" = "xauto"; then : with_zsh_completion_dir="/usr/local/share/zsh/site-functions" fi ZSH_COMPLETION_DIR=$with_zsh_completion_dir # Check whether --with-fish-completion-dir was given. if test "${with_fish_completion_dir+set}" = set; then : withval=$with_fish_completion_dir; else with_fish_completion_dir=auto fi if test "x$with_fish_completion_dir" = "xyes" -o "x$with_fish_completion_dir" = "xauto"; then : with_fish_completion_dir="/usr/local/share/fish/completions" fi FISH_COMPLETION_DIR=$with_fish_completion_dir fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; fi if test "x$enable_debug" = "xyes"; then : DEBUG=yes else DEBUG=no fi ac_config_files="$ac_config_files Makefile contrib/pacman/PKGBUILD contrib/spec/onedrive.spec onedrive.1 contrib/systemd/onedrive.service contrib/systemd/onedrive@.service" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by onedrive $as_me v2.5.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ onedrive config.status v2.5.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "contrib/pacman/PKGBUILD") CONFIG_FILES="$CONFIG_FILES contrib/pacman/PKGBUILD" ;; "contrib/spec/onedrive.spec") CONFIG_FILES="$CONFIG_FILES contrib/spec/onedrive.spec" ;; "onedrive.1") CONFIG_FILES="$CONFIG_FILES onedrive.1" ;; "contrib/systemd/onedrive.service") CONFIG_FILES="$CONFIG_FILES contrib/systemd/onedrive.service" ;; "contrib/systemd/onedrive@.service") CONFIG_FILES="$CONFIG_FILES contrib/systemd/onedrive@.service" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi onedrive-2.5.10/configure.ac000066400000000000000000000277011513710110600157020ustar00rootroot00000000000000dnl configure.ac for OneDrive Linux Client dnl Copyright 2019 Norbert Preining dnl Licensed GPL v3 or later dnl How to make a release dnl - increase the version number in the AC_INIT call below dnl - change PACKAGE_DATE to 'Month YYYY' to ensure man page has the correct date dnl - run autoconf which generates configure dnl - commit the changed files (configure.ac, configure) dnl - tag the release AC_PREREQ([2.69]) AC_INIT([onedrive],[v2.5.10], [https://github.com/abraunegg/onedrive], [onedrive]) AC_CONFIG_SRCDIR([src/main.d]) AC_ARG_VAR([DC], [D compiler executable]) AC_ARG_VAR([DCFLAGS], [flags for D compiler]) dnl necessary programs: install, pkg-config AC_PROG_INSTALL PKG_PROG_PKG_CONFIG PACKAGE_DATE="January 2026" AC_SUBST([PACKAGE_DATE]) dnl Determine D compiler dnl we check for dmd, dmd2, and ldc2 in this order dnl furthermore, we set DC_TYPE to either dmd or ldc and export this into the dnl Makefile so that we can adjust command line arguments AC_CHECK_PROGS([DC], [dmd ldmd2 ldc2 gdmd gdc], NOT_FOUND) DC_TYPE= case $(basename $DC) in *ldc2*) DC_TYPE=ldc ;; *gdc*) DC_TYPE=gdc ;; *dmd*) DC_TYPE=dmd ;; NOT_FOUND) AC_MSG_ERROR(Could not find any compatible D compiler, 1) esac dnl dash/POSIX version of version comparison vercomp () { IFS=. read -r a0 a1 a2 aa <' $bb then return 1 else return 0 fi fi fi fi } DO_VERSION_CHECK=1 AC_ARG_ENABLE(version-check, AS_HELP_STRING([--disable-version-check], [Disable checks of compiler version during configure time])) AS_IF([test "x$enable_version_check" = "xno"], DO_VERSION_CHECK=0,) AS_IF([test "$DO_VERSION_CHECK" = "1"], [ dnl do the version check AC_MSG_CHECKING([version of D compiler]) # check for valid versions case $(basename $DC) in *ldmd2*|*ldc2*) # LDC - the LLVM D compiler (1.12.0): ... VERSION=`$DC --version` # remove everything up to first ( VERSION=${VERSION#* (} # remove everything after ): VERSION=${VERSION%%):*} # now version should be something like L.M.N MINVERSION=1.20.1 ;; *gdmd*|*gdc*) # Both gdmd and gdc print the same version information VERSION=`${DC} --version | head -n1` # Some examples of output: # gdc (Gentoo 14.2.1_p20250301 p8) 14.2.1 20250301 # gcc (GCC) 14.2.1 20250207 # Arch # gdc (GCC) 14.2.1 20250110 (Red Hat 14.2.1-7) # gdc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 VERSION=${VERSION#gdc } # VERSION=(...) VER DATE ... VERSION=${VERSION#*) } # VERSION=VER DATE ... VERSION=${VERSION%% *} MINVERSION=15 ;; *dmd*) # DMD64 D Compiler v2.085.1\n... VERSION=`$DC --version | tr '\n' ' '` VERSION=${VERSION#*Compiler v} VERSION=${VERSION%% *} # now version should be something like L.M.N MINVERSION=2.091.1 ;; esac AC_MSG_RESULT([$VERSION]) vercomp $MINVERSION $VERSION if test $? = 1 then AC_MSG_ERROR([Compiler version insufficient, current compiler version $VERSION, minimum version $MINVERSION], 1) fi #echo "MINVERSION=$MINVERSION VERSION=$VERSION" ]) dnl In case the environment variable DCFLAGS is set, we export it to the dnl generated Makefile at configure run: AC_SUBST([DCFLAGS]) dnl Default flags for each compiler case "$DC_TYPE" in dmd) DEBUG_DCFLAGS="-g -debug -gs" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-version LINKER_DCFLAG=-L OUTPUT_DCFLAG=-of WERROR_DCFLAG=-w ;; ldc) DEBUG_DCFLAGS="-g -d-debug -gc" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-d-version LINKER_DCFLAG=-L OUTPUT_DCFLAG=-of WERROR_DCFLAG=-w ;; gdc) DEBUG_DCFLAGS="-g -fdebug" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-fversion LINKER_DCFLAG=-Wl, OUTPUT_DCFLAG=-o WERROR_DCFLAG=-Werror ;; esac AC_SUBST([DEBUG_DCFLAGS]) AC_SUBST([RELEASE_DCFLAGS]) AC_SUBST([VERSION_DCFLAG]) AC_SUBST([LINKER_DCFLAG]) AC_SUBST([OUTPUT_DCFLAG]) AC_SUBST([WERROR_DCFLAG]) dnl Check for required modules: curl, sqlite and dbus if required PKG_CHECK_MODULES([curl],[libcurl]) PKG_CHECK_MODULES([sqlite],[sqlite3]) AC_MSG_CHECKING([whether to enable dbus support]) case "$(uname -s)" in Linux) enable_dbus=yes AC_MSG_RESULT([yes (on Linux)]) PKG_CHECK_MODULES([dbus], [dbus-1 >= 1.0], [AC_DEFINE([HAVE_DBUS], [1], [Define if you have dbus-1])] , [AC_MSG_ERROR([dbus-1 development files not found. Please install dbus-devel (Red Hat), libdbus-1-dev (Debian) or dbus (Arch | Manjaro)])] ) ;; *) enable_dbus=no AC_MSG_RESULT([no (not on Linux)]) ;; esac AC_SUBST([enable_dbus]) dnl dnl systemd and unit file directories dnl This is a bit tricky, because we want to allow for dnl --with-systemdsystemunitdir=auto dnl as well as =/path/to/dir dnl The first step is that we check whether the --with options is passed to configure run dnl if yes, we don't do anything (the ,, at the end of the next line), and if not, we dnl set with_systemdsystemunitdir=auto, meaning we will try pkg-config to find the correct dnl value. AC_ARG_WITH([systemdsystemunitdir], [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd system service files])],, [with_systemdsystemunitdir=auto]) dnl If no value is passed in (or auto/yes is passed in), then we try to find the correct dnl value via pkg-config and put it into $def_systemdsystemunitdir AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [ dnl true part, so try to determine with pkg-config def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) dnl if we cannot find it via pkg-config, *and* the user explicitly passed it in with, dnl we warn, and in all cases we unset (set to no) the respective variable AS_IF([test "x$def_systemdsystemunitdir" = "x"], [ dnl we couldn't find the default value via pkg-config AS_IF([test "x$with_systemdsystemunitdir" = "xyes"], [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])]) with_systemdsystemunitdir=no ], [ dnl pkg-config found the value, use it with_systemdsystemunitdir="$def_systemdsystemunitdir" ] ) ] ) dnl finally, if we found a value, put it into the generated Makefile AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])]) dnl Now do the same as above for systemduserunitdir! AC_ARG_WITH([systemduserunitdir], [AS_HELP_STRING([--with-systemduserunitdir=DIR], [Directory for systemd user service files])],, [with_systemduserunitdir=auto]) AS_IF([test "x$with_systemduserunitdir" = "xyes" -o "x$with_systemduserunitdir" = "xauto"], [ def_systemduserunitdir=$($PKG_CONFIG --variable=systemduserunitdir systemd) AS_IF([test "x$def_systemduserunitdir" = "x"], [ AS_IF([test "x$with_systemduserunitdir" = "xyes"], [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])]) with_systemduserunitdir=no ], [ with_systemduserunitdir="$def_systemduserunitdir" ] ) ] ) AS_IF([test "x$with_systemduserunitdir" != "xno"], [AC_SUBST([systemduserunitdir], [$with_systemduserunitdir])]) dnl We enable systemd integration only if we have found both user/system unit dirs AS_IF([test "x$with_systemduserunitdir" != "xno" -a "x$with_systemdsystemunitdir" != "xno"], [havesystemd=yes], [havesystemd=no]) AC_SUBST([HAVE_SYSTEMD], $havesystemd) dnl dnl Notification support dnl only check for libnotify if --enable-notifications is given AC_ARG_ENABLE(notifications, AS_HELP_STRING([--enable-notifications], [Enable desktop notifications via libnotify])) AS_IF([test "x$enable_notifications" = "xyes"], [enable_notifications=yes], [enable_notifications=no]) dnl if --enable-notifications was given, check for libnotify, and disable if not found dnl otherwise substitute the notifu AS_IF([test "x$enable_notifications" = "xyes"], [PKG_CHECK_MODULES(notify,libnotify,,enable_notifications=no)], [AC_SUBST([notify_LIBS],"")]) AC_SUBST([NOTIFICATIONS],$enable_notifications) dnl dnl iNotify Support # Conditionally set bsd_inotify_LIBS based on the platform case "$(uname -s)" in Linux) bsd_inotify_LIBS="" ;; FreeBSD) AS_IF([test "$(uname -U)" -gt 1500060], [bsd_inotify_LIBS=""], [bsd_inotify_LIBS="-L/usr/local/lib -linotify"] ) ;; OpenBSD) bsd_inotify_LIBS="-L/usr/local/lib/inotify -linotify" ;; *) bsd_inotify_LIBS="" ;; esac AC_SUBST([bsd_inotify_LIBS]) dnl dnl Dynamic Linker Support # Conditionally set dynamic_linker_LIBS based on the platform case "$(uname -s)" in Linux) dynamic_linker_LIBS="-ldl" ;; *) dynamic_linker_LIBS="" ;; esac AC_SUBST([dynamic_linker_LIBS]) dnl dnl Completion support dnl First determine whether completions are requested, pass that to Makefile AC_ARG_ENABLE([completions], AS_HELP_STRING([--enable-completions], [Install shell completions for bash, zsh, and fish])) AS_IF([test "x$enable_completions" = "xyes"], [enable_completions=yes], [enable_completions=no]) AC_SUBST([COMPLETIONS],$enable_completions) dnl if completions are enabled, search for the bash/zsh completion directory in the dnl similar way as we did for the systemd directories AS_IF([test "x$enable_completions" = "xyes"],[ AC_ARG_WITH([bash-completion-dir], [AS_HELP_STRING([--with-bash-completion-dir=DIR], [Directory for bash completion files])], , [with_bash_completion_dir=auto]) AS_IF([test "x$with_bash_completion_dir" = "xyes" -o "x$with_bash_completion_dir" = "xauto"], [ PKG_CHECK_VAR(bashcompdir, [bash-completion], [completionsdir], , bashcompdir="${sysconfdir}/bash_completion.d") with_bash_completion_dir=$bashcompdir ]) AC_SUBST([BASH_COMPLETION_DIR], $with_bash_completion_dir) AC_ARG_WITH([zsh-completion-dir], [AS_HELP_STRING([--with-zsh-completion-dir=DIR], [Directory for zsh completion files])],, [with_zsh_completion_dir=auto]) AS_IF([test "x$with_zsh_completion_dir" = "xyes" -o "x$with_zsh_completion_dir" = "xauto"], [ with_zsh_completion_dir="/usr/local/share/zsh/site-functions" ]) AC_SUBST([ZSH_COMPLETION_DIR], $with_zsh_completion_dir) AC_ARG_WITH([fish-completion-dir], [AS_HELP_STRING([--with-fish-completion-dir=DIR], [Directory for fish completion files])],, [with_fish_completion_dir=auto]) AS_IF([test "x$with_fish_completion_dir" = "xyes" -o "x$with_fish_completion_dir" = "xauto"], [ with_fish_completion_dir="/usr/local/share/fish/completions" ]) AC_SUBST([FISH_COMPLETION_DIR], $with_fish_completion_dir) ]) dnl dnl Debug support AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Pass debug option to the compiler])) AS_IF([test "x$enable_debug" = "xyes"], AC_SUBST([DEBUG],yes), AC_SUBST([DEBUG],no)) dnl generate necessary files AC_CONFIG_FILES([ Makefile contrib/pacman/PKGBUILD contrib/spec/onedrive.spec onedrive.1 contrib/systemd/onedrive.service contrib/systemd/onedrive@.service ]) AC_OUTPUT onedrive-2.5.10/contrib/000077500000000000000000000000001513710110600150455ustar00rootroot00000000000000onedrive-2.5.10/contrib/completions/000077500000000000000000000000001513710110600174015ustar00rootroot00000000000000onedrive-2.5.10/contrib/completions/complete.bash000066400000000000000000000042721513710110600220550ustar00rootroot00000000000000# BASH completion code for OneDrive Linux Client # (c) 2019 Norbert Preining # License: GPLv3+ (as with the rest of the OneDrive Linux client project) _onedrive() { local cur prev COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} options='--check-for-nomount --check-for-nosync --cleanup-local-files --debug-https --disable-notifications --display-config --display-quota --display-sync-status --disable-download-validation --disable-upload-validation --display-running-config --download-only --dry-run --enable-logging --force --force-http-11 --force-sync --list-shared-items --local-first --logout -m --monitor --no-remote-delete --print-access-token --reauth --remove-source-files --remove-source-folders --resync --resync-auth --skip-dir-strict-match --skip-dot-files --skip-symlinks -s --sync --sync-root-files --sync-shared-files --upload-only -v+ --verbose --version -h --help --with-editing-perms' argopts='--auth-files --auth-response --classify-as-big-delete --confdir --create-directory --create-share-link --destination-directory --download-file --file-fragment-size --get-O365-drive-id --get-file-link --get-sharepoint-drive-id --log-dir --modified-by --monitor-fullscan-frequency --monitor-interval --monitor-log-frequency --remove-directory --share-password --single-directory --skip-dir --skip-file --skip-size --source-directory --space-reservation --syncdir --threads' # Loop on the arguments to manage conflicting options for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do #exclude some mutually exclusive options [[ ${COMP_WORDS[i]} == '--sync' ]] && options=${options/--monitor} [[ ${COMP_WORDS[i]} == '--monitor' ]] && options=${options/--sync} done case "$prev" in --confdir|--syncdir) _filedir return 0 ;; --get-file-link) if command -v sed &> /dev/null; then pushd "$(onedrive --display-config | sed -n "/sync_dir/s/.*= //p")" &> /dev/null _filedir popd &> /dev/null fi return 0 ;; --create-directory|--get-O365-drive-id|--remove-directory|--single-directory|--source-directory) return 0 ;; *) COMPREPLY=( $( compgen -W "$options $argopts" -- "$cur")) return 0 ;; esac # notreached return 0 } complete -F _onedrive onedrive onedrive-2.5.10/contrib/completions/complete.fish000066400000000000000000000121401513710110600220620ustar00rootroot00000000000000# FISH completions for OneDrive Linux Client # License: GPLv3+ (as with the rest of the OneDrive Linux client project) complete -c onedrive -f complete -c onedrive -l auth-files -d "Authenticate using input/output files" complete -c onedrive -l auth-response -d "Authenticate using the response URL" complete -c onedrive -l check-for-nomount -d "Skip sync if .nosync found in sync dir root" complete -c onedrive -l check-for-nosync -d "Skip directories containing .nosync" complete -c onedrive -l classify-as-big-delete -d "Classify as big delete when children exceed number" complete -c onedrive -l cleanup-local-files -d "Cleanup local files when using --download-only" complete -c onedrive -l confdir -d "Directory for configuration files" complete -c onedrive -l create-directory -d "Create directory on OneDrive" complete -c onedrive -l create-share-link -d "Create a shareable link for a file" complete -c onedrive -l debug-https -d "Debug HTTPS communication" complete -c onedrive -l destination-directory -d "Target directory for move/rename operations" complete -c onedrive -l disable-download-validation -d "Disable validation of downloaded files" complete -c onedrive -l disable-notifications -d "Disable desktop notifications in monitor mode" complete -c onedrive -l disable-upload-validation -d "Disable validation of uploaded files" complete -c onedrive -l display-config -d "Display current config" complete -c onedrive -l display-quota -d "Display OneDrive quota" complete -c onedrive -l display-running-config -d "Display config used at startup" complete -c onedrive -l display-sync-status -d "Show current sync status" complete -c onedrive -l download-file -d "Download a single file from Microsoft OneDrive" complete -c onedrive -l download-only -d "Only download remote changes" complete -c onedrive -l dry-run -d "Simulate sync without making changes" complete -c onedrive -l enable-logging -d "Enable logging to a file" complete -c onedrive -l file-fragment-size -d "Specify the file fragment size for large file uploads (in MB)" complete -c onedrive -l force -d "Force delete on big delete detection" complete -c onedrive -l force-http-11 -d "Force HTTP 1.1 usage" complete -c onedrive -l force-sync -d "Force sync of specified folder" complete -c onedrive -l get-file-link -d "Get shareable link for a file" complete -c onedrive -l get-O365-drive-id -d "Get Drive ID for O365 SharePoint (deprecated)" complete -c onedrive -l get-sharepoint-drive-id -d "Get Drive ID for SharePoint" complete -c onedrive -l help -d "Show help message" complete -c onedrive -l list-shared-items -d "List shared OneDrive items" complete -c onedrive -l local-first -d "Prefer local changes during sync" complete -c onedrive -l log-dir -d "Directory for logs" complete -c onedrive -l logout -d "Logout current session" complete -c onedrive -l modified-by -d "Show who last modified a file" complete -c onedrive -l monitor -d "Run in monitor mode" complete -c onedrive -l monitor-fullscan-frequency -d "Full scan every N runs" complete -c onedrive -l monitor-interval -d "Sync interval in monitor mode" complete -c onedrive -l monitor-log-frequency -d "Log status every N seconds in monitor mode" complete -c onedrive -l no-remote-delete -d "Don't delete remote files in --upload-only" complete -c onedrive -l print-access-token -d "Show access token" complete -c onedrive -l reauth -d "Reauthenticate client" complete -c onedrive -l remove-directory -d "Delete remote directory" complete -c onedrive -l remove-source-files -d "Remove uploaded local files" complete -c onedrive -l remove-source-folders -d "Remove the local directory structure post successful file transfer" complete -c onedrive -l resync -d "Perform full resync" complete -c onedrive -l resync-auth -d "Confirm resync action" complete -c onedrive -l share-password -d "Password-protect shared link" complete -c onedrive -l single-directory -d "Sync a single local directory" complete -c onedrive -l skip-dir -d "Skip matching directories" complete -c onedrive -l skip-dir-strict-match -d "Strict matching for skipped dirs" complete -c onedrive -l skip-dot-files -d "Skip hidden files and folders" complete -c onedrive -l skip-file -d "Skip matching files" complete -c onedrive -l skip-size -d "Skip files above given size" complete -c onedrive -l skip-symlinks -d "Ignore symlinks" complete -c onedrive -l source-directory -d "Source path for move/rename" complete -c onedrive -l space-reservation -d "Reserve disk space (MB)" complete -c onedrive -l sync -d "Start sync operation" complete -c onedrive -l syncdir -d "Local sync directory" complete -c onedrive -l synchronize -d "Deprecated alias for --sync" complete -c onedrive -l sync-root-files -d "Sync root files with sync_list" complete -c onedrive -l sync-shared-files -d "Sync shared business files" complete -c onedrive -l threads -d "Specify a value for the number of worker threads used for parallel upload and download operations" complete -c onedrive -l upload-only -d "Only upload local changes" complete -c onedrive -l verbose -d "Increase verbosity" complete -c onedrive -l version -d "Show version" complete -c onedrive -l with-editing-perms -d "Create read-write shared link" onedrive-2.5.10/contrib/completions/complete.zsh000066400000000000000000000125401513710110600217410ustar00rootroot00000000000000#compdef onedrive # # ZSH completion code for OneDrive Linux Client # (c) 2019 Norbert Preining # License: GPLv3+ (as with the rest of the OneDrive Linux client project) local -a all_opts all_opts=( '--auth-files[Perform authentication via file exchange]:auth files:' '--auth-response[Perform authentication via response URL]:auth response:' '--check-for-nomount[Check for the presence of .nosync in the syncdir root. If found, do not perform sync.]' '--check-for-nosync[Check for the presence of .nosync in each directory. If found, skip directory from sync.]' '--classify-as-big-delete[Number of children removed to trigger big delete logic]:threshold:' '--cleanup-local-files[Remove local files when using --download-only]' '--confdir[Set the directory used to store the configuration files]:config directory:_files -/' '--create-directory[Create a directory on OneDrive - no sync will be performed.]:directory name:' '--create-share-link[Create a shareable link for a file]:file name:' '--debug-https[Debug OneDrive HTTPS communication.]' '--destination-directory[Destination directory for renamed or move on OneDrive - no sync will be performed.]:directory name:' '--disable-download-validation[Disable download validation when downloading from OneDrive]' '--disable-notifications[Do not use desktop notifications in monitor mode.]' '--disable-upload-validation[Disable upload validation when uploading to OneDrive]' '--display-config[Display what options the client will use as currently configured - no sync will be performed.]' '--display-quota[Display the quota status of the client - no sync will be performed.]' '--display-running-config[Display options configured on application startup.]' '--display-sync-status[Display the sync status of the client - no sync will be performed.]' '--download-file[Download a single file from Microsoft OneDrive]:file name:' '--download-only[Only download remote changes]' '--dry-run[Perform a trial sync with no changes made]' '--enable-logging[Enable client activity to a separate log file]' '--file-fragment-size[Specify the file fragment size for large file uploads (in MB)]:MB:' '--force[Force the deletion of data when a '\''big delete'\'' is detected]' '--force-http-11[Force the use of HTTP 1.1 for all operations]' '--force-sync[Force a synchronization of a specific folder]' '--get-O365-drive-id[Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library]:site URL:' '--get-file-link[Display the file link of a synced file]:file name:' '--get-sharepoint-drive-id[Query and return the SharePoint Drive ID]:site URL:' '--help[Show this help screen]' '--list-shared-items[List OneDrive Business Shared Items]' '--local-first[Synchronize from the local directory source first, before downloading changes from OneDrive.]' '--log-dir[Directory where logging output is saved]:log directory:_files -/' '--logout[Logout the current user]' '--modified-by[Display the last modified-by details]:file or directory:' '--monitor[Keep monitoring for local and remote changes]' '--monitor-fullscan-frequency[Sync runs before full local scan]:N:' '--monitor-interval[Seconds between syncs when idle in monitor mode]:seconds:' '--monitor-log-frequency[Frequency of logging in monitor mode]:seconds:' '--no-remote-delete[Do not delete remote files when using --upload-only]' '--print-access-token[Print the access token, useful for debugging]' '--reauth[Reauthenticate the client with OneDrive]' '--remove-directory[Remove a directory on OneDrive - no sync will be performed.]:directory name:' '--remove-source-files[Remove source file after upload when using --upload-only]' '--remove-source-folders[Remove the local directory structure post successful file transfer when using --upload-only --remove-source-files]' '--resync[Forget the last saved state, perform a full sync]' '--resync-auth[Approve the use of performing a --resync action]' '--share-password[Password to protect share link]:password:' '--single-directory[Sync a single local directory within the OneDrive root]:source directory:_files -/' '--skip-dir[Skip any directories matching this pattern]:pattern:' '--skip-dir-strict-match[Strict matching for --skip-dir]' '--skip-dot-files[Skip dot files and folders from syncing]' '--skip-file[Skip any files matching this pattern]:pattern:' '--skip-size[Skip new files larger than this size (in MB)]:MB:' '--skip-symlinks[Skip syncing of symlinks]' '--source-directory[Source directory to rename or move on OneDrive]:source directory:' '--space-reservation[Disk space (MB) to reserve]:MB:' '--sync[Perform a synchronisation with Microsoft OneDrive]' '--sync-root-files[Sync all files in sync_dir root when using sync_list.]' '--sync-shared-files[Sync OneDrive Business Shared Files to the local filesystem]' '--syncdir[Specify the local directory used for synchronisation to OneDrive]:sync directory:_files -/' '--synchronize[Perform a synchronisation (deprecated)]' '--threads[Number of threads to use for multi-threaded transfers]:N:' '--upload-only[Only upload to OneDrive, do not sync changes from OneDrive locally]' '--verbose[Print more details, useful for debugging (repeat for extra debugging)]' '--version[Print the version and exit]' '--with-editing-perms[Create a read-write shareable link for a file]' ) _arguments -S "$all_opts[@]" && return 0 onedrive-2.5.10/contrib/docker/000077500000000000000000000000001513710110600163145ustar00rootroot00000000000000onedrive-2.5.10/contrib/docker/Dockerfile000066400000000000000000000017021513710110600203060ustar00rootroot00000000000000# -*-Dockerfile-*- ARG FEDORA_VERSION=43 ARG DEBIAN_VERSION=bullseye ARG GO_VERSION=1.23 ARG GOSU_VERSION=1.17 FROM golang:${GO_VERSION}-${DEBIAN_VERSION} AS builder-gosu ARG GOSU_VERSION RUN go install -ldflags "-s -w" github.com/tianon/gosu@${GOSU_VERSION} FROM fedora:${FEDORA_VERSION} AS builder-onedrive RUN dnf install -y ldc pkgconf libcurl-devel sqlite-devel dbus-devel git awk ENV PKG_CONFIG=/usr/bin/pkgconf COPY . /usr/src/onedrive WORKDIR /usr/src/onedrive RUN ./configure --enable-debug\ && make clean \ && make \ && make install FROM fedora:${FEDORA_VERSION} RUN dnf clean all \ && dnf -y update RUN dnf install -y libcurl sqlite ldc-libs dbus-libs \ && dnf clean all \ && mkdir -p /onedrive/conf /onedrive/data COPY --from=builder-gosu /go/bin/gosu /usr/local/bin/ COPY --from=builder-onedrive /usr/local/bin/onedrive /usr/local/bin/ COPY contrib/docker/entrypoint.sh / RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] onedrive-2.5.10/contrib/docker/Dockerfile-alpine000066400000000000000000000017661513710110600215660ustar00rootroot00000000000000# -*-Dockerfile-*- ARG ALPINE_VERSION=3.23 ARG GO_VERSION=1.25 ARG GOSU_VERSION=1.17 FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS builder-gosu ARG GOSU_VERSION RUN go install -ldflags "-s -w" github.com/tianon/gosu@${GOSU_VERSION} FROM alpine:${ALPINE_VERSION} AS builder-onedrive RUN apk add --update --no-cache alpine-sdk gnupg xz curl-dev sqlite-dev dbus-dev binutils-gold autoconf automake ldc COPY . /usr/src/onedrive WORKDIR /usr/src/onedrive RUN autoreconf -fiv \ && ./configure --enable-debug\ && make clean \ && make \ && make install FROM alpine:${ALPINE_VERSION} RUN apk add --upgrade apk-tools \ && apk upgrade --available RUN apk add --update --no-cache bash libcurl libgcc shadow sqlite-libs ldc-runtime dbus-libs \ && mkdir -p /onedrive/conf /onedrive/data COPY --from=builder-gosu /go/bin/gosu /usr/local/bin/ COPY --from=builder-onedrive /usr/local/bin/onedrive /usr/local/bin/ COPY contrib/docker/entrypoint.sh / RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]onedrive-2.5.10/contrib/docker/Dockerfile-debian000066400000000000000000000041631513710110600215320ustar00rootroot00000000000000# -*-Dockerfile-*- ARG DEBIAN_VERSION=trixie FROM debian:${DEBIAN_VERSION} AS builder-onedrive ARG DEBIAN_VERSION # Add backports repository and update before initial DEBIAN_FRONTEND installation RUN apt-get clean \ && echo "deb http://deb.debian.org/debian ${DEBIAN_VERSION}-backports main" > /etc/apt/sources.list.d/debian-${DEBIAN_VERSION}-backports.list \ && apt-get update \ && apt-get upgrade -y \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends build-essential curl ca-certificates libcurl4-openssl-dev libsqlite3-dev libxml2-dev libdbus-1-dev pkg-config git ldc \ # Install|update curl from backports && apt-get install -t ${DEBIAN_VERSION}-backports -y curl \ && rm -rf /var/lib/apt/lists/* COPY . /usr/src/onedrive WORKDIR /usr/src/onedrive RUN ./configure --enable-debug\ && make clean \ && make \ && make install FROM debian:${DEBIAN_VERSION}-slim ARG DEBIAN_VERSION # Add backports repository and update after DEBIAN_FRONTEND installation RUN apt-get clean \ && echo "deb http://deb.debian.org/debian ${DEBIAN_VERSION}-backports main" > /etc/apt/sources.list.d/debian-${DEBIAN_VERSION}-backports.list \ && apt-get update \ && apt-get upgrade -y \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libsqlite3-0 ca-certificates libphobos2-ldc-shared110 libdbus-1-3 \ # Install|update curl and libcurl4t64 from backports to get the latest version && apt-get install -t ${DEBIAN_VERSION}-backports -y curl libcurl4t64 \ && rm -rf /var/lib/apt/lists/* \ # Fix bug with ssl on armhf: https://serverfault.com/a/1045189 && /usr/bin/c_rehash \ && mkdir -p /onedrive/conf /onedrive/data # Install gosu v1.17 from trusted upstream source (built against Go 1.18.2) RUN set -eux; \ arch="$(dpkg --print-architecture)"; \ curl -fsSL -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.17/gosu-${arch}"; \ chmod +x /usr/local/bin/gosu; \ gosu nobody true COPY --from=builder-onedrive /usr/local/bin/onedrive /usr/local/bin/ COPY contrib/docker/entrypoint.sh / RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] onedrive-2.5.10/contrib/docker/entrypoint.sh000077500000000000000000000227221513710110600210730ustar00rootroot00000000000000#!/bin/bash -eu set +H -euo pipefail # ---------------------------------------------------------------------- # Determine how the container is being started: # - If started as non-root (e.g. --user 1000:1000), we must NOT attempt # user/group management or chown, as those require root. # - If started as root, we can create/align the user and switch via gosu. # ---------------------------------------------------------------------- CONTAINER_UID="$(id -u)" CONTAINER_GID="$(id -g)" # Default ONEDRIVE_UID/GID: # - When running as non-root: default to the current UID/GID (the values Docker/Podman set) # - When running as root: keep existing behaviour (infer from /onedrive/data unless explicitly provided) if [ "${CONTAINER_UID}" -ne 0 ]; then : "${ONEDRIVE_UID:=${CONTAINER_UID}}" : "${ONEDRIVE_GID:=${CONTAINER_GID}}" else : "${ONEDRIVE_UID:=$(stat /onedrive/data -c '%u')}" : "${ONEDRIVE_GID:=$(stat /onedrive/data -c '%g')}" fi # ---------------------------------------------------------------------- # Root privilege handling # ---------------------------------------------------------------------- if [ "${CONTAINER_UID}" -eq 0 ]; then # Containers should not run the onedrive client as root by default. if [ "${ONEDRIVE_RUNAS_ROOT:=0}" == "1" ]; then echo "# Running container as root due to environment variable override" oduser='root' odgroup='root' else # Root container start is fine, but we will drop privileges to a non-root user. echo "# Container started as root; will drop privileges to UID:GID ${ONEDRIVE_UID}:${ONEDRIVE_GID}" fi # If we are not forcing root runtime, ensure a non-root user exists for ONEDRIVE_UID/GID if [ "${ONEDRIVE_RUNAS_ROOT:=0}" != "1" ]; then # Create / select group for target GID if ! odgroup="$(getent group "${ONEDRIVE_GID}")"; then odgroup='onedrive' groupadd "${odgroup}" -g "${ONEDRIVE_GID}" else odgroup="${odgroup%%:*}" fi # Create / select user for target UID if ! oduser="$(getent passwd "${ONEDRIVE_UID}")"; then oduser='onedrive' useradd -m "${oduser}" -u "${ONEDRIVE_UID}" -g "${ONEDRIVE_GID}" else oduser="${oduser%%:*}" usermod -g "${odgroup}" "${oduser}" fi echo "# Running container as user: ${oduser} (UID:GID ${ONEDRIVE_UID}:${ONEDRIVE_GID})" fi else # Non-root start (e.g. --user). Do not attempt account management or chown. if [ "${ONEDRIVE_RUNAS_ROOT:=0}" == "1" ]; then echo "# NOTE: ONEDRIVE_RUNAS_ROOT=1 requested, but container is not running as root; ignoring." fi echo "# Container started as non-root UID:GID ${CONTAINER_UID}:${CONTAINER_GID}" echo "# Using ONEDRIVE_UID:GID ${ONEDRIVE_UID}:${ONEDRIVE_GID} (no user/group creation performed)" fi # ---------------------------------------------------------------------- # Default parameters # ---------------------------------------------------------------------- ARGS=(--confdir /onedrive/conf --syncdir /onedrive/data) echo "# Base Args: ${ARGS[@]}" # Tell client to use Standalone Mode, based on an environment variable. Otherwise Monitor Mode is used. if [ "${ONEDRIVE_SYNC_ONCE:=0}" == "1" ]; then echo "# We run in Standalone Mode" echo "# Adding --sync" ARGS=(--sync ${ARGS[@]}) else echo "# We run in Monitor Mode" echo "# Adding --monitor" ARGS=(--monitor ${ARGS[@]}) fi # Make Verbose output optional, based on an environment variable if [ "${ONEDRIVE_VERBOSE:=0}" == "1" ]; then echo "# We are being verbose" echo "# Adding --verbose" ARGS=(--verbose ${ARGS[@]}) fi # Tell client to perform debug output, based on an environment variable if [ "${ONEDRIVE_DEBUG:=0}" == "1" ]; then echo "# We are performing debug output" echo "# Adding --verbose --verbose" ARGS=(--verbose --verbose ${ARGS[@]}) fi # Tell client to perform HTTPS debug output, based on an environment variable if [ "${ONEDRIVE_DEBUG_HTTPS:=0}" == "1" ]; then echo "# We are performing HTTPS debug output" echo "# Adding --debug-https" ARGS=(--debug-https ${ARGS[@]}) fi # Tell client to perform a resync based on environment variable if [ "${ONEDRIVE_RESYNC:=0}" == "1" ]; then echo "# We are performing a --resync" echo "# Adding --resync --resync-auth" ARGS=(--resync --resync-auth ${ARGS[@]}) fi # Tell client to sync in download-only mode based on environment variable if [ "${ONEDRIVE_DOWNLOADONLY:=0}" == "1" ]; then echo "# We are synchronising in download-only mode" echo "# Adding --download-only" ARGS=(--download-only ${ARGS[@]}) fi # Tell client to clean up local files when in download-only mode based on environment variable if [ "${ONEDRIVE_CLEANUPLOCAL:=0}" == "1" ]; then echo "# We are cleaning up local files that are not present online" echo "# Adding --cleanup-local-files" ARGS=(--cleanup-local-files ${ARGS[@]}) fi # Tell client to sync in upload-only mode based on environment variable if [ "${ONEDRIVE_UPLOADONLY:=0}" == "1" ]; then echo "# We are synchronising in upload-only mode" echo "# Adding --upload-only" ARGS=(--upload-only ${ARGS[@]}) fi # Tell client to sync in no-remote-delete mode based on environment variable if [ "${ONEDRIVE_NOREMOTEDELETE:=0}" == "1" ]; then echo "# We are synchronising in no-remote-delete mode" echo "# Adding --no-remote-delete" ARGS=(--no-remote-delete ${ARGS[@]}) fi # Tell client to logout based on environment variable if [ "${ONEDRIVE_LOGOUT:=0}" == "1" ]; then echo "# We are logging out" echo "# Adding --logout" ARGS=(--logout ${ARGS[@]}) fi # Tell client to re-authenticate based on environment variable if [ "${ONEDRIVE_REAUTH:=0}" == "1" ]; then echo "# We are logging out to perform a reauthentication" echo "# Adding --reauth" ARGS=(--reauth ${ARGS[@]}) fi # Tell client to utilise auth files at the provided locations based on environment variable if [ -n "${ONEDRIVE_AUTHFILES:=""}" ]; then echo "# We are using auth files to perform authentication" echo "# Adding --auth-files ARG" ARGS=(--auth-files ${ONEDRIVE_AUTHFILES} ${ARGS[@]}) fi # Tell client to utilise provided auth response based on environment variable if [ -n "${ONEDRIVE_AUTHRESPONSE:=""}" ]; then echo "# We are providing the auth response directly to perform authentication" echo "# Adding --auth-response ARG" ARGS=(--auth-response \"${ONEDRIVE_AUTHRESPONSE}\" ${ARGS[@]}) fi # Tell client to print the running configuration at application startup if [ "${ONEDRIVE_DISPLAY_CONFIG:=0}" == "1" ]; then echo "# We are printing the application running configuration at application startup" echo "# Adding --display-running-config" ARGS=(--display-running-config ${ARGS[@]}) fi # Tell client to use sync single dir option if [ -n "${ONEDRIVE_SINGLE_DIRECTORY:=""}" ]; then echo "# We are synchronising in single-directory mode" echo "# Adding --single-directory ARG" ARGS=(--single-directory \"${ONEDRIVE_SINGLE_DIRECTORY}\" ${ARGS[@]}) fi # Tell client run in dry-run mode if [ "${ONEDRIVE_DRYRUN:=0}" == "1" ]; then echo "# We are running in dry-run mode" echo "# Adding --dry-run" ARGS=(--dry-run ${ARGS[@]}) fi # Tell client to disable download validation if [ "${ONEDRIVE_DISABLE_DOWNLOAD_VALIDATION:=0}" == "1" ]; then echo "# We are disabling the download integrity checks performed by this client" echo "# Adding --disable-download-validation" ARGS=(--disable-download-validation ${ARGS[@]}) fi # Tell client to disable upload validation if [ "${ONEDRIVE_DISABLE_UPLOAD_VALIDATION:=0}" == "1" ]; then echo "# We are disabling the upload integrity checks performed by this client" echo "# Adding --disable-upload-validation" ARGS=(--disable-upload-validation ${ARGS[@]}) fi # Tell client to download OneDrive Business Shared Files if 'sync_business_shared_items' option has been enabled in the configuration files if [ "${ONEDRIVE_SYNC_SHARED_FILES:=0}" == "1" ]; then echo "# We are attempting to sync OneDrive Business Shared Files if 'sync_business_shared_items' has been enabled in the config file" echo "# Adding --sync-shared-files" ARGS=(--sync-shared-files ${ARGS[@]}) fi # Tell client to use a different value for file fragment size for large file uploads if [ -n "${ONEDRIVE_FILE_FRAGMENT_SIZE:=""}" ]; then echo "# We are specifying the file fragment size for large file uploads (in MB)" echo "# Adding --file-fragment-size ARG" ARGS=(--file-fragment-size ${ONEDRIVE_FILE_FRAGMENT_SIZE} ${ARGS[@]}) fi # Tell client to use a specific threads value for parallel operations if [ -n "${ONEDRIVE_THREADS:=""}" ]; then echo "# We are specifying a thread value for the number of worker threads used for parallel upload and download operations" echo "# Adding --threads ARG" ARGS=(--threads ${ONEDRIVE_THREADS} ${ARGS[@]}) fi # Allow override of args if command-line parameters are provided if [ ${#} -gt 0 ]; then ARGS=("${@}") fi # ---------------------------------------------------------------------- # Launch # ---------------------------------------------------------------------- # If started non-root, just run directly (no gosu, no chown). if [ "${CONTAINER_UID}" -ne 0 ]; then echo "# Launching 'onedrive' as UID:GID ${CONTAINER_UID}:${CONTAINER_GID}" exec /usr/local/bin/onedrive "${ARGS[@]}" fi # Started as root: # - If ONEDRIVE_RUNAS_ROOT=1: run directly as root. # - Otherwise: chown writable dirs and drop to oduser via gosu. if [ "${ONEDRIVE_RUNAS_ROOT:=0}" == "1" ]; then echo "# Launching 'onedrive' as root" exec /usr/local/bin/onedrive "${ARGS[@]}" else echo "# Changing ownership permissions on /onedrive/data and /onedrive/conf to ${oduser}:${odgroup}" chown "${oduser}:${odgroup}" /onedrive/data /onedrive/conf echo "# Launching 'onedrive' as ${oduser} via gosu" exec gosu "${oduser}" /usr/local/bin/onedrive "${ARGS[@]}" fi onedrive-2.5.10/contrib/docker/hooks/000077500000000000000000000000001513710110600174375ustar00rootroot00000000000000onedrive-2.5.10/contrib/docker/hooks/post_push000077500000000000000000000002171513710110600214110ustar00rootroot00000000000000#!/bin/bash BUILD_DATE=`date "+%Y%m%d%H%M"` docker tag ${IMAGE_NAME} "${IMAGE_NAME}-${BUILD_DATE}" docker push "${IMAGE_NAME}-${BUILD_DATE}" onedrive-2.5.10/contrib/images/000077500000000000000000000000001513710110600163125ustar00rootroot00000000000000onedrive-2.5.10/contrib/images/onedrive.svg000066400000000000000000000200171513710110600206460ustar00rootroot00000000000000 onedrive-2.5.10/contrib/init.d/000077500000000000000000000000001513710110600162325ustar00rootroot00000000000000onedrive-2.5.10/contrib/init.d/onedrive.init000066400000000000000000000026161513710110600207370ustar00rootroot00000000000000#!/bin/sh # # chkconfig: 2345 20 80 # description: Starts and stops OneDrive Client for Linux # # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 1 fi # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 1 APP_NAME="OneDrive Client for Linux" STOP_TIMEOUT=${STOP_TIMEOUT-5} RETVAL=0 start() { export PATH=/usr/local/bin/:$PATH echo -n "Starting $APP_NAME: " daemon --user root onedrive_service.sh RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/onedrive || \ RETVAL=1 return $RETVAL } stop() { echo -n "Shutting down $APP_NAME: " killproc onedrive RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/onedrive ${pidfile} } restart() { stop start } rhstatus() { status onedrive return $? } # Allow status as non-root. if [ "$1" = status ]; then rhstatus exit $? fi case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; status) rhstatus ;; *) echo "Usage: $0 {start|stop|restart|reload|status}" exit 2 esac exit $? onedrive-2.5.10/contrib/init.d/onedrive_service.sh000066400000000000000000000002761513710110600221260ustar00rootroot00000000000000#!/bin/bash # This script is to assist in starting the onedrive client when using init.d APP_OPTIONS="--monitor --verbose --enable-logging" onedrive "$APP_OPTIONS" > /dev/null 2>&1 & exit 0 onedrive-2.5.10/contrib/logrotate/000077500000000000000000000000001513710110600170455ustar00rootroot00000000000000onedrive-2.5.10/contrib/logrotate/onedrive.logrotate000066400000000000000000000010721513710110600226020ustar00rootroot00000000000000# Any OneDrive Client logs configured for here /var/log/onedrive/*log { # What user / group should logrotate use? # Logrotate 3.8.9 or greater required otherwise: # "unknown option 'su' -- ignoring line" is generated su root users # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # compress the log files compress # missing files OK missingok } onedrive-2.5.10/contrib/pacman/000077500000000000000000000000001513710110600163045ustar00rootroot00000000000000onedrive-2.5.10/contrib/pacman/PKGBUILD.in000066400000000000000000000014751513710110600200440ustar00rootroot00000000000000pkgname=onedrive pkgver=@PACKAGE_VERSION@ pkgrel=1 # Patch-level (increment this when a patch is applied) pkgdesc="OneDrive Client for Linux" license=("GPL3") url="https://github.com/abraunegg/onedrive/" arch=("i686" "x86_64") depends=("curl" "gcc-libs" "glibc" "sqlite") makedepends=("dmd" "git" "tar" "make") source=("https://github.com/abraunegg/onedrive/archive/v$pkgver.tar.gz") sha256sums=('SKIP') # Use SKIP or actual checksum prepare() { cd "$srcdir" tar -xzf "$pkgname-$pkgver.tar.gz" --one-top-level="$pkgname-$pkgver" --strip-components 1 } build() { cd "$srcdir/$pkgname-$pkgver" git init git add . git commit --allow-empty-message -m "" git tag "v$pkgver" make PREFIX=/usr onedrive } package() { cd "$srcdir/$pkgname-$pkgver" make PREFIX=/usr DESTDIR="$pkgdir" install } onedrive-2.5.10/contrib/spec/000077500000000000000000000000001513710110600157775ustar00rootroot00000000000000onedrive-2.5.10/contrib/spec/onedrive.spec.in000066400000000000000000000220511513710110600210730ustar00rootroot00000000000000# Platform-specific default compiler selection %if 0%{?fedora} || 0%{?rhel} || 0%{?centos} %global default_dcompiler ldc %else %global default_dcompiler dmd %endif # Allow manual override: rpmbuild --define 'dcompiler dmd' %{!?dcompiler: %global dcompiler %{default_dcompiler}} # Compiler version constraints %global dmd_minver 2.091.1 %global ldc_minver 1.20.1 # Conditional BuildRequires %if "%{dcompiler}" == "dmd" BuildRequires: dmd >= %{dmd_minver} %else %if "%{dcompiler}" == "ldc" BuildRequires: ldc >= %{ldc_minver} %else %error Unsupported D compiler selected: %{dcompiler} %endif %endif # Systemd logic %if 0%{?fedora} || 0%{?rhel} >= 7 %global with_systemd 1 %else %global with_systemd 0 %endif %if 0%{?rhel} >= 7 %global rhel_unitdir 1 %else %global rhel_unitdir 0 %endif Name: onedrive Version: 2.5.10 Release: 1%{?dist} Summary: OneDrive Client for Linux Group: System Environment/Network License: GPLv3 URL: https://github.com/abraunegg/onedrive Source0: v%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: sqlite-devel >= 3.7.15 BuildRequires: libcurl-devel BuildRequires: dbus-devel Requires: sqlite >= 3.7.15 Requires: libcurl Requires: dbus %if 0%{?with_systemd} Requires(post): systemd Requires(preun): systemd Requires(postun): systemd %else Requires(post): chkconfig Requires(preun): chkconfig Requires(preun): initscripts Requires(postun): initscripts %endif %define debug_package %{nil} %description Free client for Microsoft OneDrive on Linux. Supports personal, business, SharePoint, and shared folders. Built-in client-side filtering, delta sync, webhook support, and more. %prep %setup -q %build %configure --enable-debug --enable-notifications make %install %make_install PREFIX="%{buildroot}" %if 0%{?with_systemd} %if 0%{?rhel_unitdir} # RHEL/CentOS: system unit only install -D -m 0644 contrib/systemd/onedrive.service %{buildroot}%{_unitdir}/onedrive.service install -D -m 0644 contrib/systemd/onedrive@.service %{buildroot}%{_unitdir}/onedrive@.service %else # Fedora: install both system and user units install -D -m 0644 contrib/systemd/onedrive@.service %{buildroot}%{_unitdir}/onedrive@.service install -D -m 0644 contrib/systemd/onedrive.service %{buildroot}%{_userunitdir}/onedrive.service %endif %endif %clean %files %doc readme.md LICENSE changelog.md docs/*.md config %config %{_sysconfdir}/logrotate.d/onedrive %{_mandir}/man1/%{name}.1.gz %{_bindir}/%{name} %if 0%{?with_systemd} %if 0%{?rhel_unitdir} %{_unitdir}/%{name}.service %{_unitdir}/%{name}@.service %else %{_unitdir}/%{name}@.service %{_userunitdir}/%{name}.service %endif %else %{_bindir}/onedrive_service.sh /etc/init.d/onedrive %endif %changelog * Fri Jan 20 2026 - 2.5.10-1 - Release v2.5.10 with new features, bug fixes, and enhancements * Thu Nov 06 2025 - 2.5.9-1 - Release v2.5.9 with new features, bug fixes, and enhancements * Wed Nov 05 2025 - 2.5.8-1 - Release v2.5.8 with new features, bug fixes, and enhancements * Tue Sep 23 2025 - 2.5.7-1 - Release v2.5.7 with new features, bug fixes, and enhancements * Thu Jun 05 2025 - 2.5.6-1 - Release v2.5.6 with new features, bug fixes, and enhancements * Mon Mar 17 2025 - 2.5.5-1 - Release v2.5.5 with new features, bug fixes, and enhancements * Mon Feb 03 2025 - 2.5.4-1 - Release v2.5.4 with new features, bug fixes, and enhancements * Sat Nov 16 2024 - 2.5.3-1 - Release v2.5.3 with new features, bug fixes, and enhancements * Sun Sep 29 2024 - 2.5.2-1 - Release v2.5.2 with new features, bug fixes, and enhancements * Fri Sep 27 2024 - 2.5.1-1 - Release v2.5.1 with new features, bug fixes, and enhancements * Mon Sep 16 2024 - 2.5.0-1 - Release v2.5.0 with new features, bug fixes, and enhancements * Wed Jun 21 2023 - 2.4.25-1 - Release v2.4.25 with new features, bug fixes, and enhancements * Tue Jun 20 2023 - 2.4.24-1 - Release v2.4.24 with new features, bug fixes, and enhancements * Fri Jan 06 2023 - 2.4.23-1 - Release v2.4.23 with new features, bug fixes, and enhancements * Tue Dec 06 2022 - 2.4.22-1 - Release v2.4.22 with new features, bug fixes, and enhancements * Tue Sep 27 2022 - 2.4.21-1 - Release v2.4.21 with new features, bug fixes, and enhancements * Wed Jul 20 2022 - 2.4.20-1 - Release v2.4.20 with new features, bug fixes, and enhancements * Wed Jun 15 2022 - 2.4.19-1 - Release v2.4.19 with new features, bug fixes, and enhancements * Thu Jun 02 2022 - 2.4.18-1 - Release v2.4.18 with new features, bug fixes, and enhancements * Sat Apr 30 2022 - 2.4.17-1 - Release v2.4.17 with new features, bug fixes, and enhancements * Thu Mar 10 2022 - 2.4.16-1 - Release v2.4.16 with new features, bug fixes, and enhancements * Fri Dec 31 2021 - 2.4.15-1 - Release v2.4.15 with new features, bug fixes, and enhancements * Wed Nov 24 2021 - 2.4.14-1 - Release v2.4.14 with new features, bug fixes, and enhancements * Sun Dec 27 2020 - 2.4.9-1 - Release v2.4.9 with new features, bug fixes, and enhancements * Mon Nov 30 2020 - 2.4.8-1 - Release v2.4.8 with new features, bug fixes, and enhancements * Mon Nov 09 2020 - 2.4.7-1 - Release v2.4.7 with new features, bug fixes, and enhancements * Sun Oct 04 2020 - 2.4.6-1 - Release v2.4.6 with new features, bug fixes, and enhancements * Thu Aug 13 2020 - 2.4.5-1 - Release v2.4.5 with new features, bug fixes, and enhancements * Tue Aug 11 2020 - 2.4.4-1 - Release v2.4.4 with new features, bug fixes, and enhancements * Mon Jun 29 2020 - 2.4.3-1 - Release v2.4.3 with new features, bug fixes, and enhancements * Wed May 27 2020 - 2.4.2-1 - Release v2.4.2 with new features, bug fixes, and enhancements * Sat May 02 2020 - 2.4.1-1 - Release v2.4.1 with new features, bug fixes, and enhancements * Sun Mar 22 2020 - 2.4.0-1 - Release v2.4.0 with new features, bug fixes, and enhancements * Tue Dec 31 2019 - 2.3.13-1 - Release v2.3.13 with new features, bug fixes, and enhancements * Wed Dec 04 2019 - 2.3.12-1 - Release v2.3.12 with new features, bug fixes, and enhancements * Tue Nov 05 2019 - 2.3.11-1 - Release v2.3.11 with new features, bug fixes, and enhancements * Tue Oct 01 2019 - 2.3.10-1 - Release v2.3.10 with new features, bug fixes, and enhancements * Sun Sep 01 2019 - 2.3.9-1 - Release v2.3.9 with new features, bug fixes, and enhancements * Sun Aug 04 2019 - 2.3.8-1 - Release v2.3.8 with new features, bug fixes, and enhancements * Wed Jul 03 2019 - 2.3.7-1 - Release v2.3.7 with new features, bug fixes, and enhancements * Wed Jul 03 2019 - 2.3.6-1 - Release v2.3.6 with new features, bug fixes, and enhancements * Wed Jun 19 2019 - 2.3.5-1 - Release v2.3.5 with new features, bug fixes, and enhancements * Thu Jun 13 2019 - 2.3.4-1 - Release v2.3.4 with new features, bug fixes, and enhancements * Tue Apr 16 2019 - 2.3.3-1 - Release v2.3.3 with new features, bug fixes, and enhancements * Tue Apr 02 2019 - 2.3.2-1 - Release v2.3.2 with new features, bug fixes, and enhancements * Tue Mar 26 2019 - 2.3.1-1 - Release v2.3.1 with new features, bug fixes, and enhancements * Mon Mar 25 2019 - 2.3.0-1 - Release v2.3.0 with new features, bug fixes, and enhancements * Tue Mar 12 2019 - 2.2.6-1 - Release v2.2.6 with new features, bug fixes, and enhancements * Wed Jan 16 2019 - 2.2.5-1 - Release v2.2.5 with new features, bug fixes, and enhancements * Fri Dec 28 2018 - 2.2.4-1 - Release v2.2.4 with new features, bug fixes, and enhancements * Thu Dec 20 2018 - 2.2.3-1 - Release v2.2.3 with new features, bug fixes, and enhancements * Thu Dec 20 2018 - 2.2.2-1 - Release v2.2.2 with new features, bug fixes, and enhancements * Tue Dec 04 2018 - 2.2.1-1 - Release v2.2.1 with new features, bug fixes, and enhancements * Sat Nov 24 2018 - 2.2.0-1 - Release v2.2.0 with new features, bug fixes, and enhancements * Thu Nov 15 2018 - 2.1.6-1 - Release v2.1.6 with new features, bug fixes, and enhancements * Sun Nov 11 2018 - 2.1.5-1 - Release v2.1.5 with new features, bug fixes, and enhancements * Wed Oct 10 2018 - 2.1.4-1 - Release v2.1.4 with new features, bug fixes, and enhancements * Thu Oct 04 2018 - 2.1.3-1 - Release v2.1.3 with new features, bug fixes, and enhancements * Mon Aug 27 2018 - 2.1.2-1 - Release v2.1.2 with new features, bug fixes, and enhancements * Tue Aug 14 2018 - 2.1.1-1 - Release v2.1.1 with new features, bug fixes, and enhancements * Fri Aug 10 2018 - 2.1.0-1 - Release v2.1.0 with new features, bug fixes, and enhancements * Wed Jul 18 2018 - 2.0.2-1 - Release v2.0.2 with new features, bug fixes, and enhancements * Wed Jul 11 2018 - 2.0.1-1 - Release v2.0.1 with new features, bug fixes, and enhancements * Tue Jul 10 2018 - 2.0.0-1 - Release v2.0.0 with new features, bug fixes, and enhancements * Thu May 17 2018 - 1.1.2-1 - Release v1.1.2 with new features, bug fixes, and enhancements * Sat Jan 20 2018 - 1.1.1-1 - Release v1.1.1 with new features, bug fixes, and enhancements * Fri Jan 19 2018 - 1.1.0-1 - Release v1.1.0 with new features, bug fixes, and enhancements * Tue Aug 01 2017 - 1.0.1-1 - Release v1.0.1 with new features, bug fixes, and enhancements * Fri Jul 14 2017 - 1.0.0-1 - Release v1.0.0 with new features, bug fixes, and enhancementsonedrive-2.5.10/contrib/systemd/000077500000000000000000000000001513710110600165355ustar00rootroot00000000000000onedrive-2.5.10/contrib/systemd/onedrive.service.in000066400000000000000000000016221513710110600223400ustar00rootroot00000000000000[Unit] Description=OneDrive Client for Linux Documentation=https://github.com/abraunegg/onedrive After=network-online.target Wants=network-online.target [Service] # Commented out hardenings are disabled because they may not work out of the box on your distribution # If you know what you are doing please try to enable them. ProtectSystem=full #PrivateUsers=true #PrivateDevices=true ProtectHostname=true #ProtectClock=true ProtectKernelTunables=true #ProtectKernelModules=true #ProtectKernelLogs=true ProtectControlGroups=true RestrictRealtime=true ExecStartPre=/bin/sh -c 'sleep 15' ExecStart=@prefix@/bin/onedrive --monitor Restart=on-failure RestartSec=3 # Do not restart the service if a --resync is required which is done via a 126 exit code RestartPreventExitStatus=126 # Time to wait for the service to stop gracefully before forcefully terminating it TimeoutStopSec=90 [Install] WantedBy=default.targetonedrive-2.5.10/contrib/systemd/onedrive@.service.in000066400000000000000000000017131513710110600224410ustar00rootroot00000000000000[Unit] Description=OneDrive Client for Linux running for %i Documentation=https://github.com/abraunegg/onedrive After=network-online.target Wants=network-online.target [Service] # Commented out hardenings are disabled because they may not work out of the box on your distribution # If you know what you are doing please try to enable them. ProtectSystem=full #PrivateDevices=true ProtectHostname=true #ProtectClock=true ProtectKernelTunables=true #ProtectKernelModules=true #ProtectKernelLogs=true ProtectControlGroups=true RestrictRealtime=true ExecStartPre=/bin/sh -c 'sleep 15' ExecStart=@prefix@/bin/onedrive --monitor --confdir=/home/%i/.config/onedrive User=%i Group=users Restart=on-failure RestartSec=3 # Do not restart the service if a --resync is required which is done via a 126 exit code RestartPreventExitStatus=126 # Time to wait for the service to stop gracefully before forcefully terminating it TimeoutStopSec=90 [Install] WantedBy=multi-user.target onedrive-2.5.10/docs/000077500000000000000000000000001513710110600143355ustar00rootroot00000000000000onedrive-2.5.10/docs/advanced-usage.md000066400000000000000000000457351513710110600175440ustar00rootroot00000000000000# Advanced Configuration of the OneDrive Client for Linux This document covers the following scenarios: * [Configuring the client to use multiple OneDrive accounts / configurations](#configuring-the-client-to-use-multiple-onedrive-accounts--configurations) * [Configuring the client to use multiple OneDrive accounts / configurations using Docker](#configuring-the-client-to-use-multiple-onedrive-accounts--configurations-using-docker) * [Configuring the client for use in dual-boot (Windows / Linux) situations](#configuring-the-client-for-use-in-dual-boot-windows--linux-situations) * [Configuring the client for use when 'sync_dir' is a mounted directory](#configuring-the-client-for-use-when-sync_dir-is-a-mounted-directory) * [Upload data from the local ~/OneDrive folder to a specific location on OneDrive](#upload-data-from-the-local-onedrive-folder-to-a-specific-location-on-onedrive) ## Configuring the client to use multiple OneDrive accounts / configurations Essentially, each OneDrive account or SharePoint Shared Library which you require to be synced needs to have its own and unique configuration, local sync directory and service files. To do this, the following steps are needed: 1. Create a unique configuration folder for each onedrive client configuration that you need 2. Copy to this folder a copy of the default configuration file 3. Update the default configuration file as required, changing the required minimum config options and any additional options as needed to support your multi-account configuration 4. Authenticate the client using the new configuration directory 5. Test the configuration using '--display-config' and '--dry-run' 6. Sync the OneDrive account data as required using `--synchronize` or `--monitor` 7. Configure a unique systemd service file for this account configuration ### 1. Create a unique configuration folder for each onedrive client configuration that you need Make the configuration folder as required for this new configuration, for example: ```text mkdir ~/.config/my-new-config ``` ### 2. Copy to this folder a copy of the default configuration file Copy to this folder a copy of the default configuration file by downloading this file from GitHub and saving this file in the directory created above: ```text wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/my-new-config/config ``` ### 3. Update the default configuration file The following config options *must* be updated to ensure that individual account data is not cross populated with other OneDrive accounts or other configurations: * sync_dir Other options that may require to be updated, depending on the OneDrive account that is being configured: * drive_id * application_id * sync_business_shared_folders * skip_dir * skip_file * Creation of a 'sync_list' file if required * Creation of a 'business_shared_folders' file if required ### 4. Authenticate the client Authenticate the client using the specific configuration file: ```text onedrive --confdir="~/.config/my-new-config" ``` You will be asked to open a specific URL by using your web browser where you will have to login into your Microsoft Account and give the application the permission to access your files. After giving permission to the application, you will be redirected to a blank page. Copy the URI of the blank page into the application. ```text [user@hostname ~]$ onedrive --confdir="~/.config/my-new-config" Configuration file successfully loaded Configuring Global Azure AD Endpoints Authorize this app visiting: https://..... Enter the response uri: ``` ### 5. Display and Test the configuration Test the configuration using '--display-config' and '--dry-run'. By doing so, this allows you to test any configuration that you have currently made, enabling you to fix this configuration before using the configuration. #### Display the configuration ```text onedrive --confdir="~/.config/my-new-config" --display-config ``` #### Test the configuration by performing a dry-run ```text onedrive --confdir="~/.config/my-new-config" --synchronize --verbose --dry-run ``` If both of these operate as per your expectation, the configuration of this client setup is complete and validated. If not, amend your configuration as required. ### 6. Sync the OneDrive account data as required Sync the data for the new account configuration as required: ```text onedrive --confdir="~/.config/my-new-config" --synchronize --verbose ``` or ```text onedrive --confdir="~/.config/my-new-config" --monitor --verbose ``` * `--synchronize` does a one-time sync * `--monitor` keeps the application running and monitoring for changes both local and remote ### 7. Automatic syncing of new OneDrive configuration In order to automatically start syncing your OneDrive accounts, you will need to create a service file for each account. From the applicable 'systemd folder' where the applicable systemd service file exists: * RHEL / CentOS: `/usr/lib/systemd/system` * Others: `/usr/lib/systemd/user` and `/lib/systemd/system` ### Step1: Create a new systemd service file #### Red Hat Enterprise Linux, CentOS Linux Copy the required service file to a new name: ```text sudo cp /usr/lib/systemd/system/onedrive.service /usr/lib/systemd/system/onedrive-my-new-config ``` or ```text sudo cp /usr/lib/systemd/system/onedrive@.service /usr/lib/systemd/system/onedrive-my-new-config@.service ``` #### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora Copy the required service file to a new name: ```text sudo cp /usr/lib/systemd/user/onedrive.service /usr/lib/systemd/user/onedrive-my-new-config.service ``` or ```text sudo cp /lib/systemd/system/onedrive@.service /lib/systemd/system/onedrive-my-new-config@.service ``` ### Step 2: Edit new systemd service file Edit the new systemd file, updating the line beginning with `ExecStart` so that the confdir mirrors the one you used above: ```text ExecStart=/usr/local/bin/onedrive --monitor --confdir="/full/path/to/config/dir" ``` Example: ```text ExecStart=/usr/local/bin/onedrive --monitor --confdir="/home/myusername/.config/my-new-config" ``` > [!IMPORTANT] > When running the client manually, `--confdir="~/.config/......` is acceptable. In a systemd configuration file, the full path must be used. The `~` must be manually expanded when editing your systemd file. ### Step 3: Enable the new systemd service Once the file is correctly edited, you can enable the new systemd service using the following commands. #### Red Hat Enterprise Linux, CentOS Linux ```text systemctl enable onedrive-my-new-config systemctl start onedrive-my-new-config ``` #### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text systemctl --user enable onedrive-my-new-config systemctl --user start onedrive-my-new-config ``` or ```text systemctl --user enable onedrive-my-new-config@myusername.service systemctl --user start onedrive-my-new-config@myusername.service ``` ### Step 4: Viewing systemd status and logs for the custom service #### Viewing systemd service status - Red Hat Enterprise Linux, CentOS Linux ```text systemctl status onedrive-my-new-config ``` #### Viewing systemd service status - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text systemctl --user status onedrive-my-new-config ``` #### Viewing journalctl systemd logs - Red Hat Enterprise Linux, CentOS Linux ```text journalctl --unit=onedrive-my-new-config -f ``` #### Viewing journalctl systemd logs - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text journalctl --user --unit=onedrive-my-new-config -f ``` ### Step 5: (Optional) Run custom systemd service at boot without user login In some cases it may be desirable for the systemd service to start without having to login as your 'user' All the systemd steps above that utilise the `--user` option, will run the systemd service as your particular user. As such, the systemd service will not start unless you actually login to your system. To avoid this issue, you need to reconfigure your 'user' account so that the systemd services you have created will startup without you having to login to your system: ```text loginctl enable-linger ``` Example: ```text alex@ubuntu-headless:~$ loginctl enable-linger alex ``` Repeat these steps for each OneDrive new account that you wish to use. ## Configuring the client to use multiple OneDrive accounts / configurations using Docker In some situations it may be desirable to run multiple Docker containers at the same time, each with their own configuration. To run the Docker container successfully, it needs two unique Docker volumes to operate: * Your configuration Docker volumes * Your data Docker volume When running multiple Docker containers, this is no different - each Docker container must have it's own configuration and data volume. ### High level steps: 1. Create the required unique Docker volumes for the configuration volume 2. Create the required unique local path used for the Docker data volume 3. Start the multiple Docker containers with the required configuration for each container #### Create the required unique Docker volumes for the configuration volume Create the required unique Docker volumes for the configuration volume(s): ```text docker volume create onedrive_conf_sharepoint_site1 docker volume create onedrive_conf_sharepoint_site2 docker volume create onedrive_conf_sharepoint_site3 ... docker volume create onedrive_conf_sharepoint_site50 ``` #### Create the required unique local path used for the Docker data volume Create the required unique local path used for the Docker data volume ```text mkdir -p /use/full/local/path/no/tilde/SharePointSite1 mkdir -p /use/full/local/path/no/tilde/SharePointSite2 mkdir -p /use/full/local/path/no/tilde/SharePointSite3 ... mkdir -p /use/full/local/path/no/tilde/SharePointSite50 ``` #### Start the Docker container with the required configuration (example) ```text docker run -it --name onedrive -v onedrive_conf_sharepoint_site1:/onedrive/conf -v "/use/full/local/path/no/tilde/SharePointSite1:/onedrive/data" driveone/onedrive:latest docker run -it --name onedrive -v onedrive_conf_sharepoint_site2:/onedrive/conf -v "/use/full/local/path/no/tilde/SharePointSite2:/onedrive/data" driveone/onedrive:latest docker run -it --name onedrive -v onedrive_conf_sharepoint_site3:/onedrive/conf -v "/use/full/local/path/no/tilde/SharePointSite3:/onedrive/data" driveone/onedrive:latest ... docker run -it --name onedrive -v onedrive_conf_sharepoint_site50:/onedrive/conf -v "/use/full/local/path/no/tilde/SharePointSite50:/onedrive/data" driveone/onedrive:latest ``` > [!TIP] > To avoid 're-authenticating' and 'authorising' each individual Docker container, if all the Docker containers are using the 'same' OneDrive credentials, you can reuse the 'refresh_token' from one Docker container to another by copying this file to the configuration Docker volume of each Docker container. > > If the account credentials are different .. you will need to re-authenticate each Docker container individually. ## Configuring the client for use in dual-boot (Windows / Linux) situations When dual booting Windows and Linux, depending on the Windows OneDrive account configuration, the 'Files On-Demand' option may be enabled when running OneDrive within your Windows environment. When this option is enabled in Windows, if you are sharing this location between your Windows and Linux systems, all files will be a 0 byte link, and cannot be used under Linux. To fix the problem of windows turning all files (that should be kept offline) into links, you have to uncheck a specific option in the onedrive settings window. The option in question is `Save space and download files as you use them`. To find this setting, open the onedrive pop-up window from the taskbar, click "Help & Settings" > "Settings". This opens a new window. Go to the tab "Settings" and look for the section "Files On-Demand". After unchecking the option and clicking "OK", the Windows OneDrive client should restart itself and start actually downloading your files so they will truly be available on your disk when offline. These files will then be fully accessible under Linux and the Linux OneDrive client. | OneDrive Personal | Onedrive Business
SharePoint | |---|---| | ![Uncheck-Personal](./images/personal-files-on-demand.png) | ![Uncheck-Business](./images/business-files-on-demand.png) | ### Accessing Windows OneDrive Files from Linux (Dual-Boot Setup) When dual-booting between Windows and Linux, accessing OneDrive-synced folders stored on an NTFS partition can be problematic. This is primarily due to Microsoft OneDrive's use of reparse points when the Files On-Demand feature is enabled in Windows. These reparse points can render files inaccessible from Linux, even after disabling Files On-Demand, because the reparse metadata may persist. #### Solution: Use the ntfs-3g-onedrive Plugin The ['ntfs-3g-onedrive'](https://github.com/gbrielgustavo/ntfs-3g-onedrive) plugin is designed to address this issue. It modifies the behavior of the ntfs-3g driver to correctly handle OneDrive's reparse points, allowing you to access your OneDrive files from Linux. > [!IMPORTANT] > The configuration and installation of the 'ntfs-3g-onedrive' driver update on your platform is beyond the scope of this documentation and repository. > > For assistance please seek support via the ['ntfs-3g'](https://github.com/tuxera/ntfs-3g) GitHub project. ## Configuring the client for use when 'sync_dir' is a mounted directory In some environments, your setup might be that your configured 'sync_dir' is pointing to another mounted file system - a NFS|CIFS location, an external drive (USB stick, eSATA etc). As such, you configure your 'sync_dir' as follows: ```text sync_dir = "/path/to/mountpoint/OneDrive" ``` The issue here is - how does the client react if the mount point gets removed - network loss, device removal? The client has zero knowledge of any event that causes a mountpoint to become unavailable, thus, the client (if you are running as a service) will assume that you deleted the files, thus, will go ahead and delete all your files on OneDrive. This is most certainly an undesirable action. There are a few options here which you can configure in your 'config' file to assist you to prevent this sort of item from occurring: 1. classify_as_big_delete 2. check_nomount 3. check_nosync > [!NOTE] > Before making any change to your configuration, stop any sync process & stop any onedrive systemd service from running. ### classify_as_big_delete By default, this uses a value of 1000 files|folders. An undesirable unmount if you have more than 1000 files, this default level will prevent the client from executing the online delete. Modify this value up or down as desired ### check_nomount & check_nosync When configuring the OneDrive client to use a directory on a mounted volume (e.g., external disk, USB device, network share), it is essential to guard against accidental sync deletion if the mount point becomes unavailable. If a mount is lost or not yet available at the time of sync, the 'sync_dir' may appear empty, leading the client to delete the corresponding online content. To safely prevent this, enable the following configuration options: ``` check_nomount = "true" check_nosync = "true" ``` These settings instruct the client to: * Check for the presence of a `.nosync` file in the 'sync_dir' before syncing * Halt syncing immediately if the file is detected, assuming the mount has failed or not available #### How the `.nosync` file works 1. The `.nosync` file is placed on the local filesystem, in the exact directory that will later be covered by the mounted volume. 2. Once the external device is mounted, that directory (and the `.nosync` file) becomes hidden by the mount. 3. If the mount disappears or fails, the `.nosync` file becomes visible again. 4. The OneDrive client detects this and stops syncing, preventing accidental deletions due to the mount being unavailable. #### Scenario 1: 'sync_dir' points directly to a mounted path ``` sync_dir = "/mnt/external/path/to/users/data/location/OneDrive" check_nomount = "true" check_nosync = "true" ``` **Step 1:** Before mounting the device, prepare the `.nosync` file ``` sudo mkdir -p /mnt/external/path/to/users/data/location/OneDrive sudo touch /mnt/external/path/to/users/data/location/OneDrive/.nosync ``` **Step 2:** Test the 'onedrive' Client ``` onedrive -s ``` with the output ``` ... Configuring Global Azure AD Endpoints ERROR: .nosync file found in directory mount point. Aborting application startup process to safeguard data. Attempting to perform a database vacuum to optimise database ... ``` **Step 3:** Mount your device (e.g., via systemd, fstab, or manually) ``` sudo mount /dev/sdX1 /mnt/external ``` **Result:** The OneDrive client will now treat `/mnt/external/path/to/users/data/location/OneDrive` as the sync_dir. If the mount is ever lost, the `.nosync` file becomes visible again, and syncing is halted. #### Scenario 2: 'sync_dir' is a symbolic link to a mounted directory ``` sync_dir = "~/OneDrive" check_nomount = "true" check_nosync = "true" ``` and ``` $ ls -l ~/OneDrive lrwxrwxrwx 1 user user 29 Jul 25 14:44 OneDrive -> /mnt/external/path/to/users/data/location/OneDrive ``` **Step 1:** Before mounting the device, prepare the `.nosync` file ``` sudo mkdir -p /mnt/external/path/to/users/data/location/OneDrive sudo touch /mnt/external/path/to/users/data/location/OneDrive/.nosync ``` **Step 2:** Test the 'onedrive' Client ``` onedrive -s ``` with the output ``` ... Configuring Global Azure AD Endpoints ERROR: .nosync file found in directory mount point. Aborting application startup process to safeguard data. Attempting to perform a database vacuum to optimise database ... ``` **Step 3:** Mount your device (e.g., via systemd, fstab, or manually) ``` sudo mount /dev/sdX1 /mnt/external ``` **Result:** Your symlinked `~/OneDrive` path will now point into the mounted filesystem. If the mount goes missing, the `.nosync` file reappears via the symlink, and the client halts syncing automatically. ## Upload data from the local ~/OneDrive folder to a specific location on OneDrive In some environments, you may not want your local ~/OneDrive folder to be uploaded directly to the root of your OneDrive account online. Unfortunately, the OneDrive API lacks any facility to perform a re-direction of data during upload. The workaround for this is to structure your local filesystem and reconfigure your client to achieve the desired goal. ### High level steps: 1. Create a new folder, for example `/opt/OneDrive` 2. Configure your application config 'sync_dir' to look at this folder 3. Inside `/opt/OneDrive` create the folder you wish to sync the data online to, for example: `/opt/OneDrive/RemoteOnlineDestination` 4. Configure the application to only sync `/opt/OneDrive/RemoteDestination` via 'sync_list' 5. Symbolically link `~/OneDrive` -> `/opt/OneDrive/RemoteOnlineDestination` ### Outcome: * Your `~/OneDrive` will look / feel as per normal * The data will be stored online under `/RemoteOnlineDestination` ### Testing: * Validate your configuration with `onedrive --display-config` * Test your configuration with `onedrive --dry-run` onedrive-2.5.10/docs/application-config-options.md000066400000000000000000002326731513710110600221330ustar00rootroot00000000000000# Application Configuration Options for the OneDrive Client for Linux ## Application Version Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. ## Table of Contents - [Configuration File Options](#configuration-file-options) - [application_id](#application_id) - [azure_ad_endpoint](#azure_ad_endpoint) - [azure_tenant_id](#azure_tenant_id) - [bypass_data_preservation](#bypass_data_preservation) - [check_nomount](#check_nomount) - [check_nosync](#check_nosync) - [classify_as_big_delete](#classify_as_big_delete) - [cleanup_local_files](#cleanup_local_files) - [connect_timeout](#connect_timeout) - [create_new_file_version](#create_new_file_version) - [data_timeout](#data_timeout) - [debug_https](#debug_https) - [delay_inotify_processing](#delay_inotify_processing) - [disable_download_validation](#disable_download_validation) - [disable_notifications](#disable_notifications) - [disable_permission_set](#disable_permission_set) - [disable_upload_validation](#disable_upload_validation) - [disable_version_check](#disable_version_check) - [disable_websocket_support](#disable_websocket_support) - [display_manager_integration](#display_manager_integration) - [display_running_config](#display_running_config) - [display_transfer_metrics](#display_transfer_metrics) - [dns_timeout](#dns_timeout) - [download_only](#download_only) - [drive_id](#drive_id) - [dry_run](#dry_run) - [enable_logging](#enable_logging) - [file_fragment_size](#file_fragment_size) - [force_http_11](#force_http_11) - [force_session_upload](#force_session_upload) - [inotify_delay](#inotify_delay) - [ip_protocol_version](#ip_protocol_version) - [local_first](#local_first) - [log_dir](#log_dir) - [max_curl_idle](#max_curl_idle) - [monitor_fullscan_frequency](#monitor_fullscan_frequency) - [monitor_interval](#monitor_interval) - [monitor_log_frequency](#monitor_log_frequency) - [no_remote_delete](#no_remote_delete) - [notify_file_actions](#notify_file_actions) - [operation_timeout](#operation_timeout) - [permanent_delete](#permanent_delete) - [rate_limit](#rate_limit) - [read_only_auth_scope](#read_only_auth_scope) - [recycle_bin_path](#recycle_bin_path) - [remove_source_files](#remove_source_files) - [resync](#resync) - [resync_auth](#resync_auth) - [skip_dir](#skip_dir) - [skip_dir_strict_match](#skip_dir_strict_match) - [skip_dotfiles](#skip_dotfiles) - [skip_file](#skip_file) - [skip_size](#skip_size) - [skip_symlinks](#skip_symlinks) - [space_reservation](#space_reservation) - [sync_business_shared_items](#sync_business_shared_items) - [sync_dir](#sync_dir) - [sync_dir_permissions](#sync_dir_permissions) - [sync_file_permissions](#sync_file_permissions) - [sync_root_files](#sync_root_files) - [threads](#threads) - [transfer_order](#transfer_order) - [upload_only](#upload_only) - [use_device_auth](#use_device_auth) - [use_intune_sso](#use_intune_sso) - [use_recycle_bin](#use_recycle_bin) - [user_agent](#user_agent) - [webhook_enabled](#webhook_enabled) - [webhook_expiration_interval](#webhook_expiration_interval) - [webhook_listening_host](#webhook_listening_host) - [webhook_listening_port](#webhook_listening_port) - [webhook_public_url](#webhook_public_url) - [webhook_renewal_interval](#webhook_renewal_interval) - [write_xattr_data](#write_xattr_data) - [Command Line Interface (CLI) Only Options](#command-line-interface-cli-only-options) - [CLI Option: --auth-files](#cli-option---auth-files) - [CLI Option: --auth-response](#cli-option---auth-response) - [CLI Option: --confdir](#cli-option---confdir) - [CLI Option: --create-directory](#cli-option---create-directory) - [CLI Option: --create-share-link](#cli-option---create-share-link) - [CLI Option: --destination-directory](#cli-option---destination-directory) - [CLI Option: --display-config](#cli-option---display-config) - [CLI Option: --display-sync-status](#cli-option---display-sync-status) - [CLI Option: --display-quota](#cli-option---display-quota) - [CLI Option: --download-file](#cli-option---download-file) - [CLI Option: --force](#cli-option---force) - [CLI Option: --force-sync](#cli-option---force-sync) - [CLI Option: --get-file-link](#cli-option---get-file-link) - [CLI Option: --get-sharepoint-drive-id](#cli-option---get-sharepoint-drive-id) - [CLI Option: --list-shared-items](#cli-option---list-shared-items) - [CLI Option: --logout](#cli-option---logout) - [CLI Option: --modified-by](#cli-option---modified-by) - [CLI Option: --monitor | -m](#cli-option---monitor--m) - [CLI Option: --print-access-token](#cli-option---print-access-token) - [CLI Option: --reauth](#cli-option---reauth) - [CLI Option: --remove-directory](#cli-option---remove-directory) - [CLI Option: --share-password](#cli-option---share-password) - [CLI Option: --single-directory](#cli-option---single-directory) - [CLI Option: --source-directory](#cli-option---source-directory) - [CLI Option: --sync | -s](#cli-option---sync--s) - [CLI Option: --sync-shared-files](#cli-option---sync-shared-files) - [CLI Option: --verbose | -v+](#cli-option---verbose--v) - [CLI Option: --with-editing-perms](#cli-option---with-editing-perms) - [Deprecated Configuration File and CLI Options](#deprecated-configuration-file-and-cli-options) - [force_http_2](#force_http_2) - [min_notify_changes](#min_notify_changes) - [CLI Option: --synchronize](#cli-option---synchronize) ## Configuration File Options ### application_id _**Description:**_ This is the config option for application id that used to identify itself to Microsoft OneDrive. In some circumstances, it may be desirable to use your own application id. To do this, you must register a new application with Microsoft Azure via https://portal.azure.com/, then use your new application id with this config option. You can find instructions for configuring your own app registration in [national-cloud-deployments.md](national-cloud-deployments.md) even if you don't necessarily configure it for a national cloud environment. _**Value Type:**_ String _**Default Value:**_ d50ca740-c83f-4d1b-b616-12c519384f0c _**Config Example:**_ `application_id = "d50ca740-c83f-4d1b-b616-12c519384f0c"` ### azure_ad_endpoint _**Description:**_ This is the config option to change the Microsoft Azure Authentication Endpoint that the client uses to conform with data and security requirements that requires data to reside within the geographic borders of that country. _**Value Type:**_ String _**Default Value:**_ *Empty* - not required for normal operation _**Valid Values:**_ USL4, USL5, DE, CN _**Config Example:**_ `azure_ad_endpoint = "DE"` ### azure_tenant_id _**Description:**_ This config option allows the locking of the client to a specific single tenant and will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common". The tenant id may be the GUID Directory ID or the fully qualified tenant name. _**Value Type:**_ String _**Default Value:**_ *Empty* - not required for normal operation _**Config Example:**_ `azure_tenant_id = "example.onmicrosoft.us"` or `azure_tenant_id = "0c4be462-a1ab-499b-99e0-da08ce52a2cc"` > [!IMPORTANT] > Must be configured if 'azure_ad_endpoint' is configured. ### bypass_data_preservation _**Description:**_ This config option allows the disabling of preserving local data by renaming the local file in the event of data conflict. If this is enabled, you will experience data loss on your local data as the local file will be over-written with data from OneDrive online. Use with care and caution. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `bypass_data_preservation = "false"` or `bypass_data_preservation = "true"` ### check_nomount _**Description:**_ This config option is useful to prevent application startup & ongoing use in 'Monitor Mode' if the configured 'sync_dir' is a separate disk that is being mounted by your system. This option will check for the presence of a `.nosync` file in your mount point, and if present, abort any sync process to preserve data. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `check_nomount = "false"` or `check_nomount = "true"` _**CLI Option:**_ `--check-for-nomount` > [!TIP] > Create a `.nosync` file in your mount point *before* you mount your disk so that this `.nosync` file visible, in your mount point if your disk is unmounted at any point to preserve your data when you enable this option. ### check_nosync _**Description:**_ This config option is useful to prevent the sync of a *local* directory to Microsoft OneDrive. It will *not* check for this file online to prevent the download of directories to your local system. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `check_nosync = "false"` or `check_nosync = "true"` _**CLI Option Use:**_ `--check-for-nosync` > [!IMPORTANT] > Create a `.nosync` file in any *local* directory that you wish to not sync to Microsoft OneDrive when you enable this option. ### classify_as_big_delete _**Description:**_ This config option defines the number of children in a path that is locally removed which will be classified as a 'big data delete' to safeguard large data removals - which are typically accidental local delete events. _**Value Type:**_ Integer _**Default Value:**_ 1000 _**Config Example:**_ `classify_as_big_delete = "2000"` _**CLI Option Use:**_ `--classify-as-big-delete 2000` > [!NOTE] > If this option is triggered, you will need to add `--force` to force a sync to occur. ### cleanup_local_files _**Description:**_ This config option provides the capability to cleanup local files and folders if they are removed online. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `cleanup_local_files = "false"` or `cleanup_local_files = "true"` _**CLI Option Use:**_ `--cleanup-local-files` > [!IMPORTANT] > This configuration option can only be used with `--download-only`. It cannot be used with any other application option. ### connect_timeout _**Description:**_ This configuration setting manages the TCP connection timeout duration in seconds for HTTPS connections to Microsoft OneDrive when using the curl library (CURLOPT_CONNECTTIMEOUT). _**Value Type:**_ Integer _**Default Value:**_ 10 _**Config Example:**_ `connect_timeout = "15"` ### create_new_file_version _**Description:**_ This setting controls how the application handles the Microsoft SharePoint *feature* which modifies all PDF, MS Office & HTML files post upload, effectively breaking the integrity of your data online. By default, when the application determines that this *feature* has modified your file post upload, the now online modified file will be downloaded. When this option is enabled, rather than downloading the file, a new online file version is created which negates the download of the modified file. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `create_new_file_version = "false"` or `create_new_file_version = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!IMPORTANT] > If you enable 'disable_upload_validation' via `disable_upload_validation = "true"` there is zero facility to determine if a file was modified post upload. As such, the application will default to the state that the upload integrity check has failed. When `create_new_file_version = "false"` your uploaded file will be downloaded *regardless* of the online modification state. > [!WARNING] > When this option is set to 'true', new file versions will be created online which will count towards your Microsoft OneDrive Quota. ### data_timeout _**Description:**_ This setting controls the timeout duration, in seconds, for when data is not received on an active connection to Microsoft OneDrive over HTTPS when using the curl library, before that connection is timeout out. _**Value Type:**_ Integer _**Default Value:**_ 60 _**Config Example:**_ `data_timeout = "300"` ### debug_https _**Description:**_ This setting controls whether the curl library is configured to output additional data to assist with diagnosing HTTPS issues and problems. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `debug_https = "false"` or `debug_https = "true"` _**CLI Option Use:**_ `--debug-https` > [!WARNING] > Whilst this option can be used at any time, it is advisable that you only use this option when advised as this will output your `Authorization: bearer` - which is your authentication token to Microsoft OneDrive. ### delay_inotify_processing _**Description:**_ This setting controls whether 'inotify' events should be delayed or not. This option should only ever be enabled when attempting to reduce the impact of editors like Obsidian which constantly write change to disk in an atomic fashion. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `delay_inotify_processing = "false"` or `delay_inotify_processing = "true"` > [!NOTE] > If you enable this option you *must* also enable 'force_session_upload' to ensure that your data uploads are done in a manner that editors, like Obsidian expect. ### disable_download_validation _**Description:**_ This option determines whether the client will conduct integrity validation on files downloaded from Microsoft OneDrive. Sometimes, when downloading files, particularly from SharePoint, there is a discrepancy between the file size reported by the OneDrive API and the byte count received from the SharePoint HTTP Server for the same file. Enable this option to disable the integrity checks performed by this client. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_download_validation = "false"` or `disable_download_validation = "true"` _**CLI Option Use:**_ `--disable-download-validation` > [!CAUTION] > If you're downloading data from SharePoint or OneDrive Business Shared Folders, you might find it necessary to activate this option. It's important to note that any issues encountered aren't due to a problem with this client; instead, they should be regarded as issues with the Microsoft OneDrive technology stack. Enabling this option disables all download integrity checks. > [!CAUTION] > If you are using OneDrive Business Accounts and your organisation implements Azure Information Protection, these AIP files will report as one size & hash online, but when downloaded, will report a totally different size and hash. > > By default these files will fail integrity checking and be deleted, meaning that AIP files will not reside on your platform. > > When you enable this option, the AIP files will download to your platform, however, if there are any other genuine download failures where the size and hash are different, these too will be retained locally meaning you may experience data integrity loss. Use this option with extreme caution. ### disable_notifications _**Description:**_ This setting controls whether GUI notifications are sent from the client to your display manager session. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_notifications = "false"` or `disable_notifications = "true"` _**CLI Option Use:**_ `--disable-notifications` ### disable_permission_set _**Description:**_ This setting controls whether the application will set the permissions on files and directories using the values of 'sync_dir_permissions' and 'sync_file_permissions'. When this option is enabled, file system permission inheritance will be used to assign the permissions for your data. This option may be useful if the file system configured does not allow setting of POSIX permissions. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_permission_set = "false"` or `disable_permission_set = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### disable_upload_validation _**Description:**_ This option determines whether the client will conduct integrity validation on files uploaded to Microsoft OneDrive. Sometimes, when uploading files, particularly to SharePoint, SharePoint will modify your file post upload by adding new data to your file which breaks the integrity checking of the upload performed by this client. Enable this option to disable the integrity checks performed by this client. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_upload_validation = "false"` or `disable_upload_validation = "true"` _**CLI Option Use:**_ `--disable-upload-validation` > [!CAUTION] > If you're uploading data to SharePoint or OneDrive Business Shared Folders, you might find it necessary to activate this option. It's important to note that any issues encountered aren't due to a problem with this client; instead, they should be regarded as issues with the Microsoft OneDrive technology stack. Enabling this option disables all upload integrity checks. ### disable_version_check _**Description:**_ This option determines whether the client will check the GitHub API for the current application version and grace period of running older application versions _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_version_check = "false"` or `disable_version_check = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### disable_websocket_support _**Description:**_ This option disables the built-in WebSocket support that leverages RFC6455 to communicate with the Microsoft Graph API Service, providing near real-time notifications of online changes. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_websocket_support = "false"` or `disable_websocket_support = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### display_manager_integration _**Description:**_ Controls whether the client integrates the configured 'sync_dir' with the desktop’s file manager (e.g. Nautilus for GNOME, Dolphin for KDE), adding it as a “special place” in the sidebar and setting a custom OneDrive folder icon where supported. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `display_manager_integration = "false"` or `display_manager_integration = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### display_running_config _**Description:**_ This option will include the running config of the application at application startup. This may be desirable to enable when running in containerised environments so that any application logging that is occurring, will have the application configuration being consumed at startup, written out to any applicable log file. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `display_running_config = "false"` or `display_running_config = "true"` _**CLI Option Use:**_ `--display-running-config` ### display_transfer_metrics _**Description:**_ This option will display file transfer metrics when enabled. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `display_transfer_metrics = "false"` or `display_transfer_metrics = "true"` _**Output Example:**_ `Transfer Metrics - File: path/to/file.data | Size: 35768 Bytes | Duration: 2.27 Seconds | Speed: 0.02 Mbps (approx)` _**CLI Option Use:**_ *None - this is a config file option only* ### dns_timeout _**Description:**_ This setting controls the libcurl DNS cache value. By default, libcurl caches this info for 60 seconds. This libcurl DNS cache timeout is entirely speculative that a name resolves to the same address for a small amount of time into the future as libcurl does not use DNS TTL properties. We recommend users not to tamper with this option unless strictly necessary. _**Value Type:**_ Integer _**Default Value:**_ 60 _**Config Example:**_ `dns_timeout = "90"` ### download_only _**Description:**_ This setting forces the client to only download data from Microsoft OneDrive and replicate that data locally. No changes made locally will be uploaded to Microsoft OneDrive when using this option. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `download_only = "false"` or `download_only = "true"` _**CLI Option Use:**_ `--download-only` > [!IMPORTANT] > When using this option, the default mode of operation is to not clean up local files that have been deleted online. This ensures that the local data is an *archive* of what was stored online. To cleanup local files use `--cleanup-local-files`. ### drive_id _**Description:**_ This setting controls the specific drive identifier the client will use when syncing with Microsoft OneDrive. _**Value Type:**_ String _**Default Value:**_ *None* _**Config Example:**_ `drive_id = "b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB"` > [!NOTE] > This option is typically only used when configuring the client to sync a specific SharePoint Library. If this configuration option is specified in your config file, a value must be specified otherwise the application will exit citing a fatal error has occurred. ### dry_run _**Description:**_ This setting controls the application capability to test your application configuration without actually performing any actual activity (download, upload, move, delete, folder creation). _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `dry_run = "false"` or `dry_run = "true"` _**CLI Option Use:**_ `--dry-run` ### enable_logging _**Description:**_ This setting controls the application logging all actions to a separate file. By default, all log files will be written to `/var/log/onedrive`, however this can changed by using the 'log_dir' config option _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `enable_logging = "false"` or `enable_logging = "true"` _**CLI Option Use:**_ `--enable-logging` > [!IMPORTANT] > Additional configuration is potentially required to configure the default log directory. Refer to the [Enabling the Client Activity Log](./usage.md#enabling-the-client-activity-log) section in usage.md for details ### file_fragment_size _**Description:**_ This option controls the fragment size when uploading large files to Microsoft OneDrive. The value specified is in MB. _**Value Type:**_ Integer _**Default Value:**_ 10 _**Minimum Value:**_ 10 _**Maximum Value:**_ 60 _**Config Example:**_ `file_fragment_size = "25"` _**CLI Option Use:**_ `--file-fragment-size = '25'` > [!NOTE] > Microsoft OneDrive requires that the file fragment size be an exact multiple of 320 KiB. The default value is an exact multiple of this required value. Additional exact multiple options are: > 15, 20, 25, 30, 35, 40, 45, 50, 55 ### force_http_11 _**Description:**_ This setting controls the application HTTP protocol version. By default, the application will use libcurl defaults for which HTTP protocol version will be used to interact with Microsoft OneDrive. Use this setting to downgrade libcurl to only use HTTP/1.1. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `force_http_11 = "false"` or `force_http_11 = "true"` _**CLI Option Use:**_ `--force-http-11` ### force_session_upload _**Description:**_ This option, when enabled, forces the client to use a 'session' upload, which, when the 'file' is uploaded by the session, this includes the local timestamp of the file. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `force_session_upload = "false"` or `force_session_upload = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### inotify_delay _**Description:**_ This option specifies the number of seconds 'inotify' events are paused before they are processed by this client. This value is used to overcome aggressive write applications such as Obsidian which write each keystroke in an atomic manner to the local disk. Due to this atomic write, each 'save' causes the existing file to be deleted and replaced with a new file, which this client sees as multiple constant 'inotify' events. _**Value Type:**_ Integer _**Default Value:**_ 5 _**Maximum Value:**_ 15 _**Config Example:**_ `inotify_delay = "10"` _**CLI Option Use:**_ *None - this is a config file option only* > [!NOTE] > This option is only used if 'delay_inotify_processing' is enabled, otherwise this option is ignored. ### ip_protocol_version _**Description:**_ This setting controls the application IP protocol that should be used when communicating with Microsoft OneDrive. The default is to use IPv4 and IPv6 networks for communicating to Microsoft OneDrive. _**Value Type:**_ Integer _**Default Value:**_ 0 _**Valid Values:**_ 0 = IPv4 + IPv6, 1 = IPv4 Only, 2 = IPv6 Only _**Config Example:**_ `ip_protocol_version = "0"` or `ip_protocol_version = "1"` or `ip_protocol_version = "2"` > [!IMPORTANT] > In some environments where IPv4 and IPv6 are configured at the same time, this causes resolution and routing issues to Microsoft OneDrive. If this is the case, it is advisable to change 'ip_protocol_version' to match your environment. ### local_first _**Description:**_ This setting controls what the application considers the 'source of truth' for your data. By default, what is stored online will be considered as the 'source of truth' when syncing to your local machine. When using this option, your local data will be considered the 'source of truth'. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `local_first = "false"` or `local_first = "true"` _**CLI Option Use:**_ `--local-first` ### log_dir _**Description:**_ This setting controls the custom application log path when 'enable_logging' has been enabled. By default, all log files will be written to `/var/log/onedrive`. _**Value Type:**_ String _**Default Value:**_ *None* _**Config Example:**_ `log_dir = "~/logs/"` _**CLI Option Use:**_ `--log-dir "~/logs/"` ### max_curl_idle _**Description:**_ This configuration option controls the number of seconds that elapse after a cURL engine was last used before it is considered stale and destroyed. Evidence suggests that some upstream network devices ignore the cURL keep-alive setting and forcibly close the active TCP connection when idle. _**Value Type:**_ Integer _**Default Value:**_ 120 _**Config Example:**_ `max_curl_idle = "120"` _**CLI Option Use:**_ *None - this is a config file option only* > [!IMPORTANT] > It is strongly recommended not to modify this setting without conducting thorough network testing. Changing this option may lead to unexpected behaviour or connectivity issues, especially if upstream network devices handle idle connections in non-standard ways. ### monitor_fullscan_frequency _**Description:**_ This configuration option controls the number of 'monitor_interval' iterations between when a full scan of your data is performed to ensure data integrity and consistency. _**Value Type:**_ Integer _**Default Value:**_ 12 _**Config Example:**_ `monitor_fullscan_frequency = "24"` _**CLI Option Use:**_ `--monitor-fullscan-frequency '24'` > [!NOTE] > By default without configuration, 'monitor_fullscan_frequency' is set to 12. In this default state, this means that a full scan is performed every 'monitor_interval' x 'monitor_fullscan_frequency' = 3600 seconds. This setting is only applicable when running in `--monitor` mode. Setting this configuration option to '0' will *disable* the full scan of your data online. ### monitor_interval _**Description:**_ This configuration setting determines how often the synchronisation loops run in --monitor mode, measured in seconds. When this time period elapses, the client will check for online changes in Microsoft OneDrive, conduct integrity checks on local data and scan the local 'sync_dir' to identify any new content that hasn't been uploaded yet. _**Value Type:**_ Integer _**Default Value:**_ 300 _**Config Example:**_ `monitor_interval = "600"` _**CLI Option Use:**_ `--monitor-interval '600'` > [!NOTE] > A minimum value of 300 is enforced for this configuration setting. ### monitor_log_frequency _**Description:**_ This configuration option controls the suppression of frequently printed log items to the system console when using `--monitor` mode. The aim of this configuration item is to reduce the log output when near zero sync activity is occurring. _**Value Type:**_ Integer _**Default Value:**_ 12 _**Config Example:**_ `monitor_log_frequency = "24"` _**CLI Option Use:**_ `--monitor-log-frequency '24'` _**Usage Example:**_ By default, at application start-up when using `--monitor` mode, the following will be logged to indicate that the application has correctly started and has performed all the initial processing steps: ```text Reading configuration file: /home/user/.config/onedrive/config Configuration file successfully loaded Configuring Global Azure AD Endpoints Sync Engine Initialised with new Onedrive API instance All application operations will be performed in: /home/user/OneDrive OneDrive synchronisation interval (seconds): 300 Initialising filesystem inotify monitoring ... Performing initial synchronisation to ensure consistent local state ... Starting a sync with Microsoft OneDrive Fetching items from the OneDrive API for Drive ID: b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB .. Processing changes and items received from Microsoft OneDrive ... Performing a database consistency and integrity check on locally stored data ... Scanning the local file system '~/OneDrive' for new data to upload ... Performing a final true-up scan of online data from Microsoft OneDrive Fetching items from the OneDrive API for Drive ID: b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB .. Processing changes and items received from Microsoft OneDrive ... Sync with Microsoft OneDrive is complete ``` Then, based on 'monitor_log_frequency', the following output will be logged until the suppression loop value is reached: ```text Starting a sync with Microsoft OneDrive Syncing changes from Microsoft OneDrive ... Sync with Microsoft OneDrive is complete ``` > [!NOTE] > The additional log output `Performing a database consistency and integrity check on locally stored data ...` will only be displayed when this activity is occurring which is triggered by 'monitor_fullscan_frequency'. > [!NOTE] > If verbose application output is being used (`--verbose`), then this configuration setting has zero effect, as application verbose output takes priority over application output suppression. ### no_remote_delete _**Description:**_ This configuration option controls whether local file and folder deletes are actioned on Microsoft OneDrive. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `local_first = "false"` or `local_first = "true"` _**CLI Option Use:**_ `--no-remote-delete` > [!IMPORTANT] > This configuration option can *only* be used in conjunction with `--upload-only` ### notify_file_actions _**Description:**_ This configuration option controls whether the client will log via GUI notifications successful actions that the client performs. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `notify_file_actions = "true"` > [!NOTE] > GUI Notification Support must be compiled in first, otherwise this option will have zero effect and will not be used. ### operation_timeout _**Description:**_ This configuration option controls the maximum total time (in seconds) that any network operation is allowed to take. This limit applies to the *entire* request, including DNS resolution, connection setup, TLS negotiation, and data transfer. This option maps directly to libcurl’s `CURLOPT_TIMEOUT`. _**Value Type:**_ Integer _**Default Value:**_ 0 (no timeout) _**Config Example:**_ `operation_timeout = "3600"` > [!IMPORTANT] > Setting a non-zero value will cause libcurl to abort the operation once the specified time has elapsed — even if data is still flowing normally. > For large file downloads, particularly on slower connections, enabling a finite timeout may cause transfers to be terminated prematurely. > > It is strongly recommend to leave this option at its default of `0` unless you specifically require a hard global time limit. ### permanent_delete _**Description:**_ Permanently delete an item online when it is removed locally. When using this method, they're permanently removed and aren't sent to the Microsoft OneDrive Recycle Bin. Therefore, permanently deleted drive items can't be restored afterward. Online data loss MAY occur in this scenario. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `permanent_delete = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!IMPORTANT] > The Microsoft OneDrive API for this capability is also very narrow: > | Account Type | Config Option is Supported | > |:-------------|:----------------:| > | Personal | ❌ | > | Business | ✔ | > | SharePoint | ✔ | > | Microsoft Cloud Germany | ✔ | > | Microsoft Cloud for US Government | ❌ | > | Azure and Office365 operated by VNET in China | ❌ | > > When using this config option against an unsupported Personal Accounts the following message will be generated: > ``` > WARNING: The application is configured to permanently delete files online; however, this action is not supported by Microsoft OneDrive Personal Accounts. > ``` > > When using this config option against a supported account the following message will be generated: > ``` > WARNING: Application has been configured to permanently remove files online rather than send to the recycle bin. Permanently deleted items can't be restored. > WARNING: Online data loss MAY occur in this scenario. > ``` > ### rate_limit _**Description:**_ This configuration option controls the bandwidth used by the application, per thread, when interacting with Microsoft OneDrive. _**Value Type:**_ Integer _**Default Value:**_ 0 (unlimited, use available bandwidth per thread) _**Valid Values:**_ Valid tested values for this configuration option are as follows: * 131072 = 128 KB/s - absolute minimum for basic application operations to prevent timeouts * 262144 = 256 KB/s * 524288 = 512 KB/s * 1048576 = 1 MB/s * 10485760 = 10 MB/s * 104857600 = 100 MB/s _**Config Example:**_ `rate_limit = "131072"` ### read_only_auth_scope _**Description:**_ This configuration option controls whether the OneDrive Client for Linux operates in a totally in read-only operation. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `read_only_auth_scope = "false"` or `read_only_auth_scope = "true"` > [!IMPORTANT] > When using 'read_only_auth_scope' you also will need to remove your existing application access consent otherwise old authentication consent will be valid and will be used. This will mean the application will technically have the consent to upload data until you revoke this consent. ### recycle_bin_path _**Description:**_ This configuration option allows you to specify the 'Recycle Bin' path for the application. _**Value Type:**_ String _**Default Value:**_ *None* however the application will use `~/.local/share/Trash` as the pre-defined default so that files will be placed in the correct location for your user profile. _**CLI Option Use:**_ *None - this is a config file option only* _**Config Example:**_ `recycle_bin_path = "/path/to/desired/location/"` ### remove_source_files _**Description:**_ This configuration option controls whether the OneDrive Client for Linux removes the local file post successful transfer to Microsoft OneDrive. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `remove_source_files = "false"` or `remove_source_files = "true"` _**CLI Option Use:**_ `--remove-source-files` > [!IMPORTANT] > This configuration option can *only* be used in conjunction with `--upload-only` ### remove_source_folders _**Description:**_ This configuration option controls whether the OneDrive Client for Linux removes the local directory structure post successful file transfer to Microsoft OneDrive. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `remove_source_folders = "false"` or `remove_source_folders = "true"` _**CLI Option Use:**_ `--remove-source-folders` > [!IMPORTANT] > This configuration option can *only* be used in conjunction with `--upload-only --remove-source-files` > [!IMPORTANT] > The directory structure will only be removed if it is empty. ### resync _**Description:**_ This configuration option controls whether the known local sync state with Microsoft OneDrive is removed at application startup. When this option is used, a full scan of your data online is performed to ensure that the local sync state is correctly built back up. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `resync = "false"` or `resync = "true"` _**CLI Option Use:**_ `--resync` > [!CAUTION] > It's highly recommended to use this option only if the application prompts you to do so. Don't blindly use this option as a default option. If you alter any of the subsequent configuration items, you will be required to execute a `--resync` to make sure your client is syncing your data with the updated configuration: > * drive_id > * sync_dir > * skip_file > * skip_dir > * skip_dotfiles > * skip_symlinks > * sync_business_shared_items > * Creating, Modifying or Deleting the 'sync_list' file > [!IMPORTANT] > The increased activity against the Microsoft Graph API when using this option may trigger HTTP 429 (throttling) responses during the synchronisation process. ### resync_auth _**Description:**_ This configuration option controls the approval of performing a 'resync' which can be beneficial in automated environments. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `resync_auth = "false"` or `resync_auth = "true"` _**CLI Option Use:**_ `--resync-auth` > [!TIP] > In certain automated environments (assuming you know what you're doing due to using automation), to avoid the 'proceed with acknowledgement' resync requirement, this option allows you to automatically acknowledge the resync prompt. ### skip_dir _**Description:**_ This configuration option controls whether the application skips certain directories from being synced. Directories can be specified in 2 ways: * As a single entry. This will search the respective path for this entry and skip all instances where this directory is present, where ever it may exist. * As a full path entry. This will skip the explicit path as set. > [!IMPORTANT] > Entries for 'skip_dir' are *relative* to your 'sync_dir' path. _**Value Type:**_ String _**Default Value:**_ *Empty* - not required for normal operation _**Config Example:**_ Patterns are case insensitive. `*` and `?` [wildcards characters](https://technet.microsoft.com/en-us/library/bb490639.aspx) are supported. Use `|` to separate multiple patterns. ```text skip_dir = "Desktop|Documents/IISExpress|Documents/SQL Server Management Studio|Documents/Visual Studio*|Documents/WindowsPowerShell|.Rproj-user" ``` The 'skip_dir' option can also be specified multiple times within your config file, for example: ```text skip_dir = "SkipThisDirectoryAnywhere" skip_dir = ".SkipThisOtherDirectoryAnywhere" skip_dir = "/Explicit/Path/To/A/Directory" skip_dir = "/Another/Explicit/Path/To/Different/Directory" ``` This will be interpreted the same as: ```text skip_dir = "SkipThisDirectoryAnywhere|.SkipThisOtherDirectoryAnywhere|/Explicit/Path/To/A/Directory|/Another/Explicit/Path/To/Different/Directory" ``` _**CLI Option Use:**_ `--skip-dir 'SkipThisDirectoryAnywhere|.SkipThisOtherDirectoryAnywhere|/Explicit/Path/To/A/Directory|/Another/Explicit/Path/To/Different/Directory'` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. If using the config file and CLI option is used, the CLI option will *replace* the config file entries. After changing or modifying this option, you will be required to perform a resync. ### skip_dir_strict_match _**Description:**_ This configuration option controls whether the application performs strict directory matching when checking 'skip_dir' items. When enabled, the 'skip_dir' item must be a full path match to the path to be skipped. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `skip_dir_strict_match = "false"` or `skip_dir_strict_match = "true"` _**CLI Option Use:**_ `--skip-dir-strict-match` ### skip_dotfiles _**Description:**_ This configuration option controls whether the application will skip all .files and .folders when performing sync operations. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `skip_dotfiles = "false"` or `skip_dotfiles = "true"` _**CLI Option Use:**_ `--skip-dot-files` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. ### skip_file _**Description:**_ This configuration option controls whether the application skips certain files from being synced. _**Value Type:**_ String _**Default Value:**_ `~*|.~*|*.tmp|*.swp|*.partial` By default, the following files will be skipped: | Skip File Pattern | Meaning | Why this should be skipped | |:------------------|:---------------------------|:---------------------------| | `~*` | Files that start with `~` | Temporary or backup files. Typically auto-created by various programs during editing sessions. These are not intended to be saved permanently. Example: Emacs, Vim, and others create such files. | | `.~*` | Files that start with `.~` | Hidden lock or temp files, especially from LibreOffice and OpenOffice. (E.g., `.~lock.MyFile.docx#`) These are only used to prevent multiple users editing the same file simultaneously. | | `*.tmp` | Files ending in `.tmp` | Generic temporary files created by applications like browsers, editors, installers. They represent intermediate data and are usually auto-deleted after a session. | | `*.swp` | Files ending in `.swp` | Vim (and vi) swap files. Created to protect against crash recovery during text editing. Should not be synced because they are transient. | | `*.partial` | Files ending in `.partial` | Partially downloaded files. Common in browsers (like Firefox `.partial` download files), background downloaders and this client. Incomplete by nature. Syncing them causes broken files online. | The following suggested skip file patterns are not included in the default configuration but could also be considered for skipping: | Skip File Pattern | Meaning | Why this should be skipped | |:------------------|:---------------------------|:---------------------------| | `*.bak` | Files ending in `.bak` | Backup files created by many text editors, IDEs, or applications. These are automatic backups made to preserve earlier versions of files before editing changes are saved. They are not intended for syncing — they are redundant copies of existing or previous files. | > [!IMPORTANT] > If you define your own 'skip_file' configuration, the default settings listed above will be *overridden*. It is strongly recommended that you explicitly include the default 'skip_file' rules alongside your custom entries to ensure temporary and/or transient files are still correctly skipped. _**Config Example:**_ Patterns are case insensitive. `*` and `?` [wildcards characters](https://technet.microsoft.com/en-us/library/bb490639.aspx) are supported. Use `|` to separate multiple patterns. Files can be skipped in the following fashion: * Specify a wildcard, eg: '*.txt' (skip all txt files) * Explicitly specify the filename and it's full path relative to your sync_dir, eg: '/path/to/file/filename.ext' * Explicitly specify the filename only and skip every instance of this filename, eg: 'filename.ext' ```text skip_file = "~*|/Documents/OneNote*|/Documents/config.xlaunch|myfile.ext|/Documents/keepass.kdbx" ``` > [!IMPORTANT] > Entries for 'skip_file' are *relative* to your 'sync_dir' path. The 'skip_file' option can be specified multiple times within your config file, for example: ```text # Defaults - always keep skip_file = "~*|.~*|*.tmp|*.swp|*.partial" # Custom 'skip_file' additions skip_file = "*.blah" skip_file = "never_sync.file" skip_file = "/Documents/keepass.kdbx" ``` This will be interpreted the same as: ```text skip_file = "~*|.~*|*.tmp|*.swp|*.partial|*.blah|never_sync.file|/Documents/keepass.kdbx" ``` _**CLI Option Use:**_ `--skip-file '~*|.~*|*.tmp|*.swp|*.partial|*.blah|never_sync.file|/Documents/keepass.kdbx'` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. If using the config file and CLI option is used, the CLI option will *replace* the config file entries. After changing or modifying this option, you will be required to perform a resync. ### skip_size _**Description:**_ This configuration option controls whether the application skips syncing certain files larger than the specified size. The value specified is in MB. _**Value Type:**_ Integer _**Default Value:**_ 0 (all files, regardless of size, are synced) _**Config Example:**_ `skip_size = "50"` _**CLI Option Use:**_ `--skip-size '50'` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. ### skip_symlinks _**Description:**_ This configuration option controls whether the application will skip all symbolic links when performing sync operations. Microsoft OneDrive has no concept or understanding of symbolic links, and attempting to upload a symbolic link to Microsoft OneDrive generates a platform API error. All data (files and folders) that are uploaded to OneDrive must be whole files or actual directories. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `skip_symlinks = "false"` or `skip_symlinks = "true"` _**CLI Option Use:**_ `--skip-symlinks` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. ### space_reservation _**Description:**_ This configuration option controls how much local disk space should be reserved, to prevent the application from filling up your entire disk due to misconfiguration _**Value Type:**_ Integer _**Default Value:**_ 50 MB (expressed as Bytes when using `--display-config`) _**Config Example:**_ `space_reservation = "100"` _**CLI Option Use:**_ `--space-reservation '100'` ### sync_business_shared_items _**Description:**_ This configuration option controls whether OneDrive Business | Office 365 Shared Folders, when added as a 'shortcut' to your 'My Files', will be synced to your local system. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `sync_business_shared_items = "false"` or `sync_business_shared_items = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. > [!CAUTION] > This option is *not* backwards compatible with any v2.4.x application version. If you are enabling this option on *any* system running v2.5.x application version, all your application versions being used *everywhere* must be v2.5.x codebase. ### sync_dir _**Description:**_ This configuration option determines the location on your local filesystem where your data from Microsoft OneDrive will be saved. _**Value Type:**_ String _**Default Value:**_ `~/OneDrive` _**Config Example:**_ `sync_dir = "~/MyDirToSync"` _**CLI Option Use:**_ `--syncdir '~/MyDirToSync'` > [!CAUTION] > After changing this option, you will be required to perform a resync. Do not change or modify this option without fully understanding the implications of doing so. ### sync_dir_permissions _**Description:**_ This configuration option defines the directory permissions applied when a new directory is created locally during the process of syncing your data from Microsoft OneDrive. _**Value Type:**_ Integer _**Default Value:**_ `700` - This provides the following permissions: `drwx------` _**Config Example:**_ `sync_dir_permissions = "700"` > [!IMPORTANT] > Use the [Unix Permissions Calculator](https://chmod-calculator.com/) to help you determine the necessary new permissions. You will need to manually update all existing directory permissions if you modify this value. ### sync_file_permissions _**Description:**_ This configuration option defines the file permissions applied when a new file is created locally during the process of syncing your data from Microsoft OneDrive. _**Value Type:**_ Integer _**Default Value:**_ `600` - This provides the following permissions: `-rw-------` _**Config Example:**_ `sync_file_permissions = "600"` > [!IMPORTANT] > Use the [Unix Permissions Calculator](https://chmod-calculator.com/) to help you determine the necessary new permissions. You will need to manually update all existing directory permissions if you modify this value. ### sync_root_files _**Description:**_ This configuration option manages the synchronisation of files located in the 'sync_dir' root when using a 'sync_list.' It enables you to sync all these files by default, eliminating the need to repeatedly modify your 'sync_list' and initiate resynchronisation. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `sync_root_files = "false"` or `sync_root_files = "true"` _**CLI Option Use:**_ `--sync-root-files` > [!IMPORTANT] > Although it's not mandatory, it's recommended that after enabling this option, you perform a `--resync`. This ensures that any previously excluded content is now included in your sync process. ### threads _**Description:**_ This configuration option controls the number of worker threads used for parallel upload and download operations when transferring files between your local system and Microsoft OneDrive. Each thread handles a discrete portion of the workload, improving performance when used appropriately. All non-transfer operations, such as folder listings (`/children`), delta queries (`/delta`), and metadata requests are processed serially on a single thread. _**Value Type:**_ Integer _**Default Value:**_ `8` _**Maximum Value:**_ `16` _**Config Example:**_ `threads = "16"` _**CLI Option Use:**_ `--threads '16'` > [!NOTE] > The default value of `8` threads is based on the average number of physical CPU cores found in consumer and workstation-grade Intel and AMD processors released from approximately 2012 through 2025. This includes laptops, desktops, and server-grade CPUs where 4–8 physical cores are typical. > > In extensive testing, configuring the application with more than `16` threads — regardless of available physical CPU cores — frequently caused the Microsoft OneDrive service to become blocked due to excessive API request volume. > [!NOTE] > The threads setting only affects file transfer operations. All API operations outside of upload/download operations are single-threaded. > > This option allows the alignment to Microsoft’s [Graph API guidance](https://learn.microsoft.com/en-us/graph/throttling) which recommends limiting concurrent requests to 5–10. The default of `8` provides a safe and performant baseline. > [!IMPORTANT] > For optimal performance and application stability, the number of threads should not exceed the number of **physical CPU cores** available to the system. Setting the thread count too high can result in **CPU contention**, increased **context switching**, and **reduced throughput** due to over-scheduling. > > If running inside a container or virtual machine, ensure that the container/VM has sufficient allocated CPU cores before increasing this setting. > [!IMPORTANT] > If the configured `threads` value (default or manual) exceeds the number of available CPU cores, the application will issue a warning similar to the following: > > ``` > WARNING: Configured 'threads = 8' exceeds available CPU cores (CPU_COUNT). > This may lead to reduced performance, CPU contention, and instability. For best results, set 'threads' no higher than the number of physical CPU cores. > ``` > > If this warning message appears during application startup, you **must** review and adjust your threads setting to match the number of physical CPU cores on your system to avoid degraded performance or instability. > [!IMPORTANT] > The application fully implements Microsoft’s throttling requirements for handling 429 and 503 response codes by: > * Handles 429 and 503 responses using exponential backoff > * Respects Retry-After headers provided by the API for the required back off period > * Limits concurrency to the recommended limits > > If you receive this application output: >``` >Handling a Microsoft Graph API HTTP 429 Response Code (Too Many Requests) - Internal Thread ID: AbCdEfGhIjKlMnOp >``` > Reduce your configured 'threads' value or raise a support ticket with Microsoft > [!WARNING] > Increasing or keeping the thread count beyond the default or available physical CPU cores will also result in higher **system resource utilisation**, particularly in terms of CPU load and local TCP port consumption. On lower-spec systems or in constrained environments, this may lead to **network saturation**, **unpredictable behaviour**, **increase in throttling behaviour by Microsoft** or **application crashes** due to resource exhaustion. ### transfer_order _**Description:**_ This configuration option controls the transfer order of files between your local system and Microsoft OneDrive. _**Value Type:**_ String _**Default Value:**_ `default` _**Config Example:**_ #### Transfer by size, smallest first ``` transfer_order = "size_asc" ``` #### Transfer by size, largest first ``` transfer_order = "size_dsc" ``` #### Transfer by file name sorted A to Z ``` transfer_order = "name_asc" ``` #### Transfer by file name sorted Z to A ``` transfer_order = "name_dsc" ``` ### upload_only _**Description:**_ This setting forces the client to only upload data to Microsoft OneDrive and replicate the locate state online. By default, this will also remove content online, that has been removed locally. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `upload_only = "false"` or `upload_only = "true"` _**CLI Option Use:**_ `--upload-only` > [!IMPORTANT] > To ensure that data deleted locally remains accessible online, you can use the 'no_remote_delete' option. If you want to delete the data from your local storage after a successful upload to Microsoft OneDrive, you can use the 'remove_source_files' option. ### use_device_auth _**Description:**_ Enable this option to authenticate using the Microsoft OAuth2 Device Authorisation Flow (`device_code` grant). This flow allows the client to initiate a sign-in process without launching a web browser directly — ideal for headless systems or remote sessions. A short code and URL will be provided for the user to complete authentication via a separate browser-enabled device. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `use_device_auth = "false"` or `use_device_auth = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!IMPORTANT] > This option is fully supported for Microsoft Entra ID (Work/School) accounts. For personal Microsoft accounts (e.g., @outlook.com or @hotmail.com), this method of authentication is not supported. Please use the interactive interactive authentication method (default) to authenticate this application. ### use_intune_sso _**Description:**_ Enable this option to authenticate using Intune Single Sign-On (SSO) via the Microsoft Identity Device Broker over D-Bus. This method is suitable for environments where the system is Intune-enrolled and allows seamless token retrieval without requiring browser interaction. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `use_intune_sso = "false"` or `use_intune_sso = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!NOTE] > The installation and configuration of Intune for your platform is beyond the scope of this documentation. ### use_recycle_bin _**Description:**_ This configuration option controls the application function to move online deleted files to a 'Recycle Bin' on your system. This allows you to review online deleted data manually before this is purged from your actual system. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `use_recycle_bin = "false"` or `use_recycle_bin = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### user_agent _**Description:**_ This configuration option controls the 'User-Agent' request header that is presented to Microsoft Graph API when accessing the Microsoft OneDrive service. This string lets servers and network peers identify the application, operating system, vendor, and/or version of the application making the request. We recommend users not to tamper with this option unless strictly necessary. _**Value Type:**_ String _**Default Value:**_ `ISV|abraunegg|OneDrive Client for Linux/vX.Y.Z-A-bcdefghi` _**Config Example:**_ `user_agent = "ISV|CompanyName|AppName/Version"` > [!IMPORTANT] > The default 'user_agent' value conforms to specific Microsoft requirements to identify as an ISV that complies with OneDrive traffic decoration requirements. Changing this value potentially will impact how Microsoft see's your client, thus your traffic may get throttled. For further information please read: https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online ### webhook_enabled _**Description:**_ This configuration option controls the application feature 'webhooks' to allow you to subscribe to remote updates as published by Microsoft OneDrive. This option only operates when the client is using 'Monitor Mode'. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ The following is the minimum working example that needs to be added to your 'config' file to enable 'webhooks' successfully: ```text webhook_enabled = "true" webhook_public_url = "https:///webhooks/onedrive" ``` > [!NOTE] > Setting `webhook_enabled = "true"` enables the webhook feature in 'monitor' mode. The onedrive process will listen for incoming updates at a configurable endpoint, which defaults to `0.0.0.0:8888`. > [!IMPORTANT] > A valid HTTPS certificate is required for your public-facing URL if using nginx. Self signed certificates will be rejected. Consider using https://letsencrypt.org/ to utilise free SSL certificates for your public-facing URL. > [!TIP] > If you receive this application error: `Subscription validation request failed. Response must exactly match validationToken query parameter.` the most likely cause for this error will be your nginx configuration. > > To resolve this configuration issue, potentially investigate adding the following 'proxy' configuration options to your nginx configuration file: > ```text > server { > listen 443; > server_name ; > location /webhooks/onedrive { > proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; > proxy_set_header X-Original-Request-URI $request_uri; > proxy_read_timeout 300s; > proxy_connect_timeout 75s; > proxy_buffering off; > proxy_http_version 1.1; > proxy_pass http://127.0.0.1:8888; > } > } > ``` > For any further nginx configuration assistance, please refer to: https://docs.nginx.com/ ### webhook_expiration_interval _**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription expires. The value is expressed in the number of seconds before expiry. _**Value Type:**_ Integer _**Default Value:**_ 600 _**Config Example:**_ `webhook_expiration_interval = "1200"` ### webhook_listening_host _**Description:**_ This configuration option controls the host address that this client binds to, when the webhook feature is enabled. _**Value Type:**_ String _**Default Value:**_ 0.0.0.0 _**Config Example:**_ `webhook_listening_host = ""` - this will use the default value. `webhook_listening_host = "192.168.3.4"` - this will bind the client to use the IP address 192.168.3.4. > [!NOTE] > Use in conjunction with 'webhook_listening_port' to change the webhook listening endpoint. ### webhook_listening_port _**Description:**_ This configuration option controls the TCP port that this client listens on, when the webhook feature is enabled. _**Value Type:**_ Integer _**Default Value:**_ 8888 _**Config Example:**_ `webhook_listening_port = "9999"` > [!NOTE] > Use in conjunction with 'webhook_listening_host' to change the webhook listening endpoint. ### webhook_public_url _**Description:**_ This configuration option controls the URL that Microsoft will send subscription notifications to. This must be a valid Internet accessible URL. _**Value Type:**_ String _**Default Value:**_ *empty* _**Config Example:**_ ```text webhook_public_url = "https:///webhooks/onedrive" ``` ### webhook_renewal_interval _**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription is renewed. The value is expressed in the number of seconds before renewal. _**Value Type:**_ Integer _**Default Value:**_ 300 _**Config Example:**_ `webhook_renewal_interval = "600"` ### webhook_retry_interval _**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription is retried when creating or renewing a subscription failed. The value is expressed in the number of seconds before retry. _**Value Type:**_ Integer _**Default Value:**_ 60 _**Config Example:**_ `webhook_retry_interval = "120"` ### write_xattr_data _**Description:**_ This setting enables writing xattr values detailing the 'createdBy' and 'lastModifiedBy' information provided by the OneDrive API _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `write_xattr_data = "false"` or `write_xattr_data = "true"` _**CLI Option Use:**_ *None - this is a config file option only* _**xattr Data Example:**_ ``` user.onedrive.createdBy="Account Display Name" user.onedrive.lastModifiedBy="Account Display Name" ``` ## Command Line Interface (CLI) Only Options ### CLI Option: --auth-files _**Description:**_ This CLI option allows the user to perform application authentication not via an interactive dialog but via specific files that the application uses to read the authentication data from. _**Usage Example:**_ `onedrive --auth-files authUrl:responseUrl` > [!IMPORTANT] > The authorisation URL is written to the specified 'authUrl' file, then onedrive waits for the file 'responseUrl' to be present, and reads the authentication response from that file. Example: > > ```text > onedrive --auth-files '~/onedrive-auth-url:~/onedrive-response-url' > Reading configuration file: /home/alex/.config/onedrive/config > Configuration file successfully loaded > Configuring Global Azure AD Endpoints > Client requires authentication before proceeding. Waiting for --auth-files elements to be available. > ``` > At this point, the client has written the file `~/onedrive-auth-url` which contains the authentication URL that needs to be visited to perform the authentication process. The client will now wait and watch for the presence of the file `~/onedrive-response-url`. > > Visit the authentication URL, and then create a new file called `~/onedrive-response-url` with the response URI. Once this has been done, the application will acknowledge the presence of this file, read the contents, and authenticate the application. > ```text > Sync Engine Initialised with new Onedrive API instance > > --sync or --monitor switches missing from your command line input. Please add one (not both) of these switches to your command line or use 'onedrive --help' for further assistance. > > No OneDrive sync will be performed without one of these two arguments being present. > ``` ### CLI Option: --auth-response _**Description:**_ This CLI option allows the user to perform application authentication not via an interactive dialog but via providing the authentication response URI directly. _**Usage Example:**_ `onedrive --auth-response https://login.microsoftonline.com/common/oauth2/nativeclient?code=` > [!TIP] > Typically, unless the application client identifier has been modified, authentication scopes are being modified or a specific Azure Tenant is being specified, the authentication URL will most likely be as follows: > ```text > https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=d50ca740-c83f-4d1b-b616-12c519384f0c&scope=Files.ReadWrite%20Files.ReadWrite.All%20Sites.ReadWrite.All%20offline_access&response_type=code&prompt=login&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient > ``` > With this URL being known, it is possible ahead of time to request an authentication token by visiting this URL, and performing the authentication access request. ### CLI Option: --confdir _**Description:**_ This CLI option allows the user to specify where all the application configuration and relevant components are stored. _**Usage Example:**_ `onedrive --confdir '~/.config/onedrive-business/'` > [!IMPORTANT] > If using this option, it must be specified each and every time the application is used. If this is omitted, the application default configuration directory will be used. ### CLI Option: --create-directory _**Description:**_ This CLI option allows the user to create the specified directory path on Microsoft OneDrive without performing a sync. _**Usage Example:**_ `onedrive --create-directory 'path/of/new/folder/structure/to/create/'` > [!IMPORTANT] > The specified path to create is relative to your configured 'sync_dir'. ### CLI Option: --create-share-link _**Description:**_ This CLI option enables the creation of a shareable file link that can be provided to users to access the file that is stored on Microsoft OneDrive. By default, the permissions for the file will be 'read-only'. _**Usage Example:**_ `onedrive --create-share-link 'relative/path/to/your/file.txt'` > [!IMPORTANT] > If writable access to the file is required, you must add `--with-editing-perms` to your command. See below for details. ### CLI Option: --destination-directory _**Description:**_ This CLI option specifies the 'destination' portion of moving a file or folder online, without performing a sync operation. _**Usage Example:**_ `onedrive --source-directory 'path/as/source/' --destination-directory 'path/as/destination'` > [!IMPORTANT] > All specified paths are relative to your configured 'sync_dir'. ### CLI Option: --display-config _**Description:**_ This CLI option will display the effective application configuration _**Usage Example:**_ `onedrive --display-config` ### CLI Option: --display-sync-status _**Description:**_ This CLI option will display the sync status of the configured 'sync_dir' _**Usage Example:**_ `onedrive --display-sync-status` > [!TIP] > This option can also use the `--single-directory` option to determine the sync status of a specific directory within the configured 'sync_dir' ### CLI Option: ---display-quota _**Description:**_ This CLI option will display the quota status of the account drive id or the configured 'drive_id' value _**Usage Example:**_ `onedrive --display-quota` ### CLI Option: --download-file _**Description:**_ This CLI option will download a single file based on the online path. No sync will be performed. _**Usage Example:**_ `onedrive --download-file 'path/to/your/file/online'` ### CLI Option: --force _**Description:**_ This CLI option enables the force the deletion of data when a 'big delete' is detected. _**Usage Example:**_ `onedrive --sync --verbose --force` > [!IMPORTANT] > This option should only be used exclusively in cases where you've initiated a 'big delete' and genuinely intend to remove all the data that is set to be deleted online. ### CLI Option: --force-sync _**Description:**_ This CLI option enables the syncing of a specific directory, using the Client Side Filtering application defaults, overriding any user application configuration. _**Usage Example:**_ `onedrive --sync --verbose --force-sync --single-directory 'Data'` > [!NOTE] > When this option is used, you will be presented with the following warning and risk acceptance: > ```text > WARNING: Overriding application configuration to use application defaults for skip_dir and skip_file due to --synch --single-directory --force-sync being used > > The use of --force-sync will reconfigure the application to use defaults. This may have untold and unknown future impacts. > By proceeding in using this option you accept any impacts including any data loss that may occur as a result of using --force-sync. > > Are you sure you wish to proceed with --force-sync [Y/N] > ``` > To proceed with this sync task, you must risk accept the actions you are taking. If you have any concerns, first use `--dry-run` and evaluate the outcome before proceeding with the actual action. ### CLI Option: --get-file-link _**Description:**_ This CLI option queries the OneDrive API and return's the WebURL for the given local file. _**Usage Example:**_ `onedrive --get-file-link 'relative/path/to/your/file.txt'` > [!IMPORTANT] > The path that you should use *must* be relative to your 'sync_dir' ### CLI Option: --get-sharepoint-drive-id _**Description:**_ This CLI option queries the OneDrive API and return's the Office 365 Drive ID for a given Office 365 SharePoint Shared Library that can then be used with 'drive_id' to sync a specific SharePoint Library. _**Usage Example:**_ `onedrive --get-sharepoint-drive-id '*'` or `onedrive --get-sharepoint-drive-id 'PointPublishing Hub Site'` ### CLI Option: --list-shared-items _**Description:**_ This CLI option lists all OneDrive Business Shared items with your account. The resulting list shows shared files and folders that you can configure this client to sync. _**Usage Example:**_ `onedrive --list-shared-items` _**Example Output:**_ ``` ... Listing available OneDrive Business Shared Items: ----------------------------------------------------------------------------------- Shared File: large_document_shared.docx Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: no_download_access.docx Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: online_access_only.txt Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: read_only.txt Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: qewrqwerwqer.txt Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: dummy_file_to_share.docx Shared By: testuser2 testuser2 (testuser2@domain.tld) ----------------------------------------------------------------------------------- Shared Folder: Sub Folder 2 Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: file to share.docx Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared Folder: Top Folder Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- ... ``` ### CLI Option: --logout _**Description:**_ This CLI option removes this clients authentication status with Microsoft OneDrive. Any further application use will require the application to be re-authenticated with Microsoft OneDrive. _**Usage Example:**_ `onedrive --logout` ### CLI Option: --modified-by _**Description:**_ This CLI option queries the OneDrive API and return's the last modified details for the given local file. _**Usage Example:**_ `onedrive --modified-by 'relative/path/to/your/file.txt'` > [!IMPORTANT] > The path that you should use *must* be relative to your 'sync_dir' ### CLI Option: --monitor | -m _**Description:**_ This CLI option controls the 'Monitor Mode' operational aspect of the client. When this option is used, the client will perform on-going syncs of data between Microsoft OneDrive and your local system. Local changes will be uploaded in near-realtime, whilst online changes will be downloaded on the next sync process. The frequency of these checks is governed by the 'monitor_interval' value. _**Usage Example:**_ `onedrive --monitor` or `onedrive -m` ### CLI Option: --print-access-token _**Description:**_ Print the current access token being used to access Microsoft OneDrive. _**Usage Example:**_ `onedrive --verbose --verbose --debug-https --print-access-token` > [!CAUTION] > Do not use this option if you do not know why you are wanting to use it. Be highly cautious of exposing this object. Change your password if you feel that you have inadvertently exposed this token. ### CLI Option: --reauth _**Description:**_ This CLI option controls the ability to re-authenticate your client with Microsoft OneDrive. _**Usage Example:**_ `onedrive --reauth` ### CLI Option: --remove-directory _**Description:**_ This CLI option allows the user to remove the specified directory path on Microsoft OneDrive without performing a sync. _**Usage Example:**_ `onedrive --remove-directory 'path/of/new/folder/structure/to/remove/'` > [!IMPORTANT] > The specified path to remove is relative to your configured 'sync_dir'. ### CLI Option: --share-password _**Description:**_ This CLI option enables the creation of a shareable file link that can only be accessed by providing the valid password. This option can only be used in conjunction with `--create-share-link` _**Usage Example:**_ `onedrive --create-share-link 'relative/path/to/your/file.txt' --share-password 'valid password'` ### CLI Option: --single-directory _**Description:**_ This CLI option controls the applications ability to sync a specific single directory. _**Usage Example:**_ `onedrive --sync --single-directory 'Data'` > [!IMPORTANT] > The path specified is relative to your configured 'sync_dir' path. If the physical local path 'Folder' to sync is `~/OneDrive/Data/Folder` then the command would be `--single-directory 'Data/Folder'`. ### CLI Option: --source-directory _**Description:**_ This CLI option specifies the 'source' portion of moving a file or folder online, without performing a sync operation. _**Usage Example:**_ `onedrive --source-directory 'path/as/source/' --destination-directory 'path/as/destination'` > [!IMPORTANT] > All specified paths are relative to your configured 'sync_dir'. ### CLI Option: --sync | -s _**Description:**_ This CLI option controls the 'Standalone Mode' operational aspect of the client. When this option is used, the client will perform a one-time sync of data between Microsoft OneDrive and your local system. _**Usage Example:**_ `onedrive --sync` or `onedrive -s` ### CLI Option: --sync-shared-files _**Description:**_ Sync OneDrive Business Shared Files to the local filesystem. _**Usage Example:**_ `onedrive --sync --sync-shared-files` > [!IMPORTANT] > To use this option you must first enable 'sync_business_shared_items' within your application configuration. Please read 'business-shared-items.md' for more information regarding this option. ### CLI Option: --verbose | -v+ _**Description:**_ This CLI option controls the verbosity of the application output. Use the option once, to have normal verbose output, use twice to have debug level application output. _**Usage Example:**_ `onedrive --sync --verbose` or `onedrive --monitor --verbose` ### CLI Option: --with-editing-perms _**Description:**_ This CLI option enables the creation of a writable shareable file link that can be provided to users to access the file that is stored on Microsoft OneDrive. This option can only be used in conjunction with `--create-share-link` _**Usage Example:**_ `onedrive --create-share-link 'relative/path/to/your/file.txt' --with-editing-perms` > [!IMPORTANT] > Placement of `--with-editing-perms` is critical. It *must* be placed after the file path as per the example above. ## Deprecated Configuration File and CLI Options The following configuration options are no longer supported: ### force_http_2 _**Description:**_ Force the use of HTTP/2 for all operations where applicable _**Deprecated Config Example:**_ `force_http_2 = "true"` _**Deprecated CLI Option:**_ `--force-http-2` _**Reason for depreciation:**_ HTTP/2 will be used by default where possible, when the OneDrive API platform does not downgrade the connection to HTTP/1.1, thus this configuration option is no longer required. ### min_notify_changes _**Description:**_ Minimum number of pending incoming changes necessary to trigger a GUI desktop notification. _**Deprecated Config Example:**_ `min_notify_changes = "50"` _**Deprecated CLI Option:**_ `--min-notify-changes '50'` _**Reason for depreciation:**_ Application has been totally re-written. When this item was introduced, it was done so to reduce spamming of all events to the GUI desktop. ### CLI Option: --synchronize _**Description:**_ Perform a synchronisation with Microsoft OneDrive _**Deprecated CLI Option:**_ `--synchronize` _**Reason for depreciation:**_ `--synchronize` has been deprecated in favour of `--sync` or `-s` onedrive-2.5.10/docs/application-security.md000066400000000000000000000150661513710110600210370ustar00rootroot00000000000000# OneDrive Client for Linux Application Security This document details the following information: * Why is this application an 'unverified publisher'? * Application Security and Permission Scopes * How to change Permission Scopes * How to review your existing application access consent ## Why is this application an 'unverified publisher'? Publisher Verification, as per the Microsoft [process](https://learn.microsoft.com/en-us/azure/active-directory/develop/publisher-verification-overview) has actually been configured, and, actually has been verified! ### Verified Publisher Configuration Evidence As per the image below, the Azure portal shows that the 'Publisher Domain' has actually been verified: ![confirmed_verified_publisher](./images/confirmed_verified_publisher.jpg) * The 'Publisher Domain' is: https://abraunegg.github.io/ * The required 'Microsoft Identity Association' is: https://abraunegg.github.io/.well-known/microsoft-identity-association.json ## Application Security and Permission Scopes There are 2 main components regarding security for this application: * Azure Application Permissions * User Authentication Permissions Keeping this in mind, security options should follow the security principal of 'least privilege': > The principle that a security architecture should be designed so that each entity > is granted the minimum system resources and authorizations that the entity needs > to perform its function. Reference: [https://csrc.nist.gov/glossary/term/least_privilege](https://csrc.nist.gov/glossary/term/least_privilege) As such, the following API permissions are used by default: ### Default Azure Application Permissions | API / Permissions name | Type | Description | Admin consent required | |---|---|---|---| | Files.Read | Delegated | Have read-only access to user files | No | | Files.Read.All | Delegated | Have read-only access to all files user can access | No | | Sites.Read.All | Delegated | Have read-only access to all items in all site collections | No | | offline_access | Delegated | Maintain access to data you have given it access to | No | ![default_authentication_scopes](./images/default_authentication_scopes.jpg) ### Default User Authentication Permissions When a user authenticates with Microsoft OneDrive, additional account permissions are provided by service to give the user specific access to their data. These are delegated permissions provided by the platform: | API / Permissions name | Type | Description | Admin consent required | |---|---|---|---| | Files.ReadWrite | Delegated | Have full access to user files | No | | Files.ReadWrite.All | Delegated | Have full access to all files user can access | No | | Sites.ReadWrite.All | Delegated | Have full access to all items in all site collections | No | | offline_access | Delegated | Maintain access to data you have given it access to | No | When these delegated API permissions are combined, these provide the effective authentication scope for the OneDrive Client for Linux to access your data. The resulting effective 'default' permissions will be: | API / Permissions name | Type | Description | Admin consent required | |---|---|---|---| | Files.ReadWrite | Delegated | Have full access to user files | No | | Files.ReadWrite.All | Delegated | Have full access to all files user can access | No | | Sites.ReadWrite.All | Delegated | Have full access to all items in all site collections | No | | offline_access | Delegated | Maintain access to data you have given it access to | No | These 'default' permissions will allow the OneDrive Client for Linux to read, write and delete data associated with your OneDrive Account. ## How are the Authentication Scopes used? When using the OneDrive Client for Linux, the above authentication scopes will be presented to the Microsoft Authentication Service (login.microsoftonline.com), where the service will validate the request and provide an applicable token to access Microsoft OneDrive with. This can be illustrated as the following: ![Linux Authentication to Microsoft OneDrive](./puml/onedrive_linux_authentication.png) This is similar to the Microsoft Windows OneDrive Client: ![Windows Authentication to Microsoft OneDrive](./puml/onedrive_windows_authentication.png) In a business setting, IT staff who need to authorise the use of the OneDrive Client for Linux in their environment can be assured of its safety. The primary concern for IT staff should be securing the device running the OneDrive Client for Linux. Unlike in a corporate environment where Windows devices are secured through Active Directory and Group Policy Objects (GPOs) to protect corporate data on the device, it is beyond the responsibility of this client to manage security on Linux devices. ## Configuring read-only access to your OneDrive data In some situations, it may be desirable to configure the OneDrive Client for Linux totally in read-only operation. To change the application to 'read-only' access, add the following to your configuration file: ```text read_only_auth_scope = "true" ``` This will change the user authentication scope request to use read-only access. > [!IMPORTANT] > When changing this value, you *must* re-authenticate the client using the `--reauth` option to utilise the change in authentication scopes. When using read-only authentication scopes, the uploading of any data or local change to OneDrive will fail with the following error: ``` 2022-Aug-06 13:16:45.3349625 ERROR: Microsoft OneDrive API returned an error with the following message: 2022-Aug-06 13:16:45.3351661 Error Message: HTTP request returned status code 403 (Forbidden) 2022-Aug-06 13:16:45.3352467 Error Reason: Access denied 2022-Aug-06 13:16:45.3352838 Error Timestamp: 2022-06-12T13:16:45 2022-Aug-06 13:16:45.3353171 API Request ID: ``` As such, it is also advisable for you to add the following to your configuration file so that 'uploads' are prevented: ```text download_only = "true" ``` > [!IMPORTANT] > Additionally when using 'read_only_auth_scope' you also will need to remove your existing application access consent otherwise old authentication consent will be valid and will be used. This will mean the application will technically have the consent to upload data. See below on how to remove your prior application consent. ## Reviewing your existing application access consent To review your existing application access consent, you need to access the following URL: https://account.live.com/consent/Manage From here, you are able to review what applications have been given what access to your data, and remove application access as required. onedrive-2.5.10/docs/build-rpm-howto.md000066400000000000000000001625621513710110600177240ustar00rootroot00000000000000# RPM Package Build Process The instructions below have been tested on the following systems: * CentOS Stream release 9 These instructions should also be applicable for RedHat & Fedora platforms, or any other RedHat RPM based distribution. ## Prepare Package Development Environment ### Install Development Dependencies Install the following dependencies on your build system: ```text sudo yum groupinstall -y 'Development Tools' sudo yum install -y libcurl-devel sudo yum install -y sqlite-devel sudo yum install -y libnotify-devel sudo yum install -y dbus-devel sudo yum install -y wget mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} ``` ### Install DMD Compiler for Linux Install the latest DMD Compiler for Linux from https://dlang.org/download.html using the Fedora/CentOS x86_64 link. Illustrated below is the installation using the minimum supported compiler. You should always install the latest version of the compiler for your platform when manually building an RPM. ```text sudo yum install -y https://downloads.dlang.org/releases/2.x/2.091.1/dmd-2.091.1-0.fedora.x86_64.rpm ``` ## Build RPM from spec file using the DMD Compiler Build the RPM from the provided spec file: ```text wget https://github.com/abraunegg/onedrive/archive/refs/tags/v2.5.6.tar.gz -O ~/rpmbuild/SOURCES/v2.5.6.tar.gz wget https://raw.githubusercontent.com/abraunegg/onedrive/master/contrib/spec/onedrive.spec.in -O ~/rpmbuild/SPECS/onedrive.spec rpmbuild -ba ~/rpmbuild/SPECS/onedrive.spec --define 'dcompiler dmd' ``` ### RPM Build Example Results Below are example output results of building, installing and running the RPM package on the respective platforms: #### CentOS Stream release 9 RPM Build Process ```text setting SOURCE_DATE_EPOCH=1749081600 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.ZhVuOR + umask 022 + cd /home/alex/rpmbuild/BUILD + cd /home/alex/rpmbuild/BUILD + rm -rf onedrive-2.5.6 + /usr/bin/tar -xof - + /usr/bin/gzip -dc /home/alex/rpmbuild/SOURCES/v2.5.6.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd onedrive-2.5.6 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.b9tkxJ + umask 022 + cd /home/alex/rpmbuild/BUILD + cd onedrive-2.5.6 + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I/usr/lib64/gfortran/modules' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I/usr/lib64/gfortran/modules' + export FCFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + '[' '-flto=auto -ffat-lto-objectsx' '!=' x ']' ++ find . -type f -name configure -print + for file in $(find . -type f -name configure -print) + /usr/bin/sed -r --in-place=.backup 's/^char \(\*f\) \(\) = /__attribute__ ((used)) char (*f) () = /g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup 's/^char \(\*f\) \(\);/__attribute__ ((used)) char (*f) ();/g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup 's/^char \$2 \(\);/__attribute__ ((used)) char \$2 ();/g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed --in-place=.backup '1{$!N;$!N};$!N;s/int x = 1;\nint y = 0;\nint z;\nint nan;/volatile int x = 1; volatile int y = 0; volatile int z, nan;/;P;D' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed --in-place=.backup 's#^lt_cv_sys_global_symbol_to_cdecl=.*#lt_cv_sys_global_symbol_to_cdecl="sed -n -e '\''s/^T .* \\(.*\\)$/extern int \\1();/p'\'' -e '\''s/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\''"#' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + '[' 1 = 1 ']' +++ dirname ./configure ++ find . -name config.guess -o -name config.sub + '[' 1 = 1 ']' + '[' x '!=' 'x-Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' ']' ++ find . -name ltmain.sh + ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-debug --enable-notifications configure: WARNING: unrecognized options: --disable-dependency-tracking checking for a BSD-compatible install... /usr/bin/install -c checking for x86_64-redhat-linux-gnu-pkg-config... /usr/bin/x86_64-redhat-linux-gnu-pkg-config checking pkg-config is at least version 0.9.0... yes checking for dmd... dmd checking version of D compiler... 2.091.1 checking for curl... yes checking for sqlite... yes checking whether to enable dbus support... yes (on Linux) checking for dbus... yes checking for notify... yes configure: creating ./config.status config.status: creating Makefile config.status: creating contrib/pacman/PKGBUILD config.status: creating contrib/spec/onedrive.spec config.status: creating onedrive.1 config.status: creating contrib/systemd/onedrive.service config.status: creating contrib/systemd/onedrive@.service configure: WARNING: unrecognized options: --disable-dependency-tracking + make if [ -f .git/HEAD ] ; then \ git describe --tags > version ; \ else \ echo v2.5.6 > version ; \ fi dmd -J. -version=NoPragma -version=NoGdk -version=Notifications -w -g -debug -gs src/main.d src/config.d src/log.d src/util.d src/qxor.d src/curlEngine.d src/onedrive.d src/webhook.d src/sync.d src/itemdb.d src/sqlite.d src/clientSideFiltering.d src/monitor.d src/arsd/cgi.d src/xattr.d src/intune.d src/notifications/notify.d src/notifications/dnotify.d -L-lcurl -L-lsqlite3 -L-ldbus-1 -L-lnotify -L-lgdk_pixbuf-2.0 -L-lgio-2.0 -L-lgobject-2.0 -L-lglib-2.0 -L-ldl -ofonedrive + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.Pwy2mS + umask 022 + cd /home/alex/rpmbuild/BUILD + '[' /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 '!=' / ']' + rm -rf /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 ++ dirname /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 + mkdir -p /home/alex/rpmbuild/BUILDROOT + mkdir /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 + cd onedrive-2.5.6 + /usr/bin/make install DESTDIR=/home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 'INSTALL=/usr/bin/install -p' PREFIX=/home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/bin /usr/bin/install -p onedrive /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/bin/onedrive mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/man/man1 /usr/bin/install -p -m 0644 onedrive.1 /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/man/man1/onedrive.1 mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/etc/logrotate.d /usr/bin/install -p -m 0644 contrib/logrotate/onedrive.logrotate /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/etc/logrotate.d/onedrive mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive for file in readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md; do \ /usr/bin/install -p -m 0644 $file /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive; \ done mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/user mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system /usr/bin/install -p -m 0644 contrib/systemd/onedrive@.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system /usr/bin/install -p -m 0644 contrib/systemd/onedrive.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system + install -D -m 0644 contrib/systemd/onedrive.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system/onedrive.service + install -D -m 0644 contrib/systemd/onedrive@.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system/onedrive@.service + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 + /usr/lib/rpm/brp-python-hardlink + /usr/lib/rpm/redhat/brp-mangle-shebangs Processing files: onedrive-2.5.6-1.el9.x86_64 Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.2YAn9k + umask 022 + cd /home/alex/rpmbuild/BUILD + cd onedrive-2.5.6 + DOCDIR=/home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + export LC_ALL=C + LC_ALL=C + export DOCDIR + /usr/bin/mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr readme.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr LICENSE /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr changelog.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/build-rpm-howto.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/known-issues.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/webhooks.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr config /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + RPM_EC=0 ++ jobs -p + exit 0 Provides: config(onedrive) = 2.5.6-1.el9 onedrive = 2.5.6-1.el9 onedrive(x86-64) = 2.5.6-1.el9 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires(post): systemd Requires(preun): systemd Requires(postun): systemd Requires: ld-linux-x86-64.so.2()(64bit) ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.17)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.32)(64bit) libc.so.6(GLIBC_2.33)(64bit) libc.so.6(GLIBC_2.34)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.6)(64bit) libc.so.6(GLIBC_2.7)(64bit) libc.so.6(GLIBC_2.8)(64bit) libc.so.6(GLIBC_2.9)(64bit) libcurl.so.4()(64bit) libdbus-1.so.3()(64bit) libdbus-1.so.3(LIBDBUS_1_3)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_4.2.0)(64bit) libgdk_pixbuf-2.0.so.0()(64bit) libgio-2.0.so.0()(64bit) libglib-2.0.so.0()(64bit) libgobject-2.0.so.0()(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libnotify.so.4()(64bit) libsqlite3.so.0()(64bit) rtld(GNU_HASH) Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 Wrote: /home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm Wrote: /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.5.6-1.el9.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.tGKXPN + umask 022 + cd /home/alex/rpmbuild/BUILD + cd onedrive-2.5.6 + RPM_EC=0 ++ jobs -p + exit 0 ``` #### CentOS Stream release 9 RPM Package Install Process ```text [alex@centos9stream ~]$ sudo yum -y install /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.5.6-1.el9.x86_64.rpm [sudo] password for alex: Last metadata expiration check: 1:21:53 ago on Tue 10 Jun 2025 06:41:27. Dependencies resolved. ========================================================================================================================================================================================== Package Architecture Version Repository Size ========================================================================================================================================================================================== Installing: onedrive x86_64 2.5.6-1.el9 @commandline 1.6 M Transaction Summary ========================================================================================================================================================================================== Install 1 Package Total size: 1.6 M Installed size: 8.3 M Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : onedrive-2.5.6-1.el9.x86_64 1/1 Running scriptlet: onedrive-2.5.6-1.el9.x86_64 1/1 Verifying : onedrive-2.5.6-1.el9.x86_64 1/1 Installed: onedrive-2.5.6-1.el9.x86_64 Complete! [alex@centos9stream ~]$ [alex@centos9stream ~]$ onedrive --version onedrive v2.5.6 [alex@centos9stream ~]$ onedrive --display-config WARNING: Configured 'threads = 8' exceeds available CPU cores (1). Capping to 'threads' to 1. Application version = onedrive v2.5.6 Compiled with = DMD 2091 Curl version = libcurl/7.76.1 OpenSSL/3.5.0 zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.1 (+libidn2/2.3.0) libssh/0.10.4/openssl/zlib nghttp2/1.43.0 User Application Config path = /home/alex/.config/onedrive System Application Config path = /etc/onedrive Applicable Application 'config' location = /home/alex/.config/onedrive/config Configuration file found in config location = false - using application defaults Applicable 'sync_list' location = /home/alex/.config/onedrive/sync_list Applicable 'items.sqlite3' location = /home/alex/.config/onedrive/items.sqlite3 Config option 'drive_id' = Config option 'sync_dir' = ~/OneDrive Config option 'use_intune_sso' = false Config option 'use_device_auth' = false Config option 'enable_logging' = false Config option 'log_dir' = /var/log/onedrive Config option 'disable_notifications' = false Config option 'skip_dir' = Config option 'skip_dir_strict_match' = false Config option 'skip_file' = ~*|.~*|*.tmp|*.swp|*.partial Config option 'skip_dotfiles' = false Config option 'skip_symlinks' = false Config option 'monitor_interval' = 300 Config option 'monitor_log_frequency' = 12 Config option 'monitor_fullscan_frequency' = 12 Config option 'read_only_auth_scope' = false Config option 'dry_run' = false Config option 'upload_only' = false Config option 'download_only' = false Config option 'local_first' = false Config option 'check_nosync' = false Config option 'check_nomount' = false Config option 'resync' = false Config option 'resync_auth' = false Config option 'cleanup_local_files' = false Config option 'disable_permission_set' = false Config option 'transfer_order' = default Config option 'classify_as_big_delete' = 1000 Config option 'disable_upload_validation' = false Config option 'disable_download_validation' = false Config option 'bypass_data_preservation' = false Config option 'no_remote_delete' = false Config option 'remove_source_files' = false Config option 'sync_dir_permissions' = 700 Config option 'sync_file_permissions' = 600 Config option 'space_reservation' = 52428800 Config option 'permanent_delete' = false Config option 'write_xattr_data' = false Config option 'application_id' = d50ca740-c83f-4d1b-b616-12c519384f0c Config option 'azure_ad_endpoint' = Config option 'azure_tenant_id' = Config option 'user_agent' = ISV|abraunegg|OneDrive Client for Linux/v2.5.6 Config option 'force_http_11' = false Config option 'debug_https' = false Config option 'rate_limit' = 0 Config option 'operation_timeout' = 3600 Config option 'dns_timeout' = 60 Config option 'connect_timeout' = 10 Config option 'data_timeout' = 60 Config option 'ip_protocol_version' = 0 Config option 'threads' = 1 Config option 'max_curl_idle' = 120 Environment var 'XDG_RUNTIME_DIR' = true Environment var 'DBUS_SESSION_BUS_ADDRESS' = true Config option 'notify_file_actions' = false Config option 'use_recycle_bin' = false Config option 'recycle_bin_path' = /home/alex/.local/share/Trash/ Selective sync 'sync_list' configured = false Config option 'sync_business_shared_items' = false Config option 'webhook_enabled' = false ``` ## Build RPM from SRPM using mock ### Install mock on your platform Use the following installation instructions to install 'mock' on your platform: ```text sudo yum install epel-release sudo yum install mock sudo yum install -y wget mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} ``` ### Configure mock Add your user to the mock group: ```text sudo usermod -a -G mock $USER ``` > [!NOTE] > Log out and back in for the group membership changes to take effect. ### Build a Source RPM (SRPM) file Build the SRPM from the provided spec file: ```text wget https://github.com/abraunegg/onedrive/archive/refs/tags/v2.5.6.tar.gz -O ~/rpmbuild/SOURCES/v2.5.6.tar.gz wget https://raw.githubusercontent.com/abraunegg/onedrive/master/contrib/spec/onedrive.spec.in -O ~/rpmbuild/SPECS/onedrive.spec rpmbuild -bs ~/rpmbuild/SPECS/onedrive.spec ``` > [!NOTE] > This will build a SRPM to the following location: `/home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm` > > This SRPM will be used in the examples below: ### Build Fedora 42 RPM using mock ```text [alex@centos9stream ~]$ mock -r fedora-42-x86_64 /home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm INFO: mock.py version 6.2 starting (python version = 3.9.21, NVR = mock-6.2-1.el9), args: /usr/libexec/mock/mock -r fedora-42-x86_64 /home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm Start(bootstrap): init plugins INFO: selinux enabled Finish(bootstrap): init plugins Start: init plugins INFO: selinux enabled Finish: init plugins INFO: Signal handler active Start: run INFO: Start(/home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm) Config(fedora-42-x86_64) Start: clean chroot Finish: clean chroot Mock Version: 6.2 INFO: Mock Version: 6.2 Start(bootstrap): chroot init INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start(bootstrap): cleaning package manager metadata Finish(bootstrap): cleaning package manager metadata INFO: Package manager dnf5 detected and used (fallback) Finish(bootstrap): chroot init Start: chroot init INFO: calling preinit hooks INFO: enabled root cache Start: unpacking root cache Finish: unpacking root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Package manager dnf5 detected and used (direct choice) INFO: Buildroot is handled by package management downloaded with a bootstrap image: rpm-4.20.1-1.fc42.x86_64 rpm-sequoia-1.7.0-5.fc42.x86_64 dnf5-5.2.13.1-1.fc42.x86_64 dnf5-plugins-5.2.13.1-1.fc42.x86_64 Start: dnf5 update Updating and loading repositories: updates 100% | 5.5 KiB/s | 5.6 KiB | 00m01s fedora 100% | 5.8 KiB/s | 4.2 KiB | 00m01s Repositories loaded. Nothing to do. Finish: dnf5 update Finish: chroot init Start: build phase for onedrive-2.5.6-1.el9.src.rpm Start: build setup for onedrive-2.5.6-1.el9.src.rpm Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1749081600 Wrote: /builddir/build/SRPMS/onedrive-2.5.6-1.fc42.src.rpm Updating and loading repositories: updates 100% | 16.5 KiB/s | 5.6 KiB | 00m00s fedora 100% | 8.3 KiB/s | 4.2 KiB | 00m01s Repositories loaded. Package Arch Version Repository Size Installing: dbus-devel x86_64 1:1.16.0-3.fc42 fedora 131.7 KiB ldc x86_64 1:1.40.0-3.fc42 fedora 27.3 MiB libcurl-devel x86_64 8.11.1-4.fc42 fedora 1.3 MiB sqlite-devel x86_64 3.47.2-2.fc42 fedora 673.4 KiB Installing dependencies: annobin-docs noarch 12.94-1.fc42 updates 98.9 KiB annobin-plugin-gcc x86_64 12.94-1.fc42 updates 993.5 KiB brotli x86_64 1.1.0-6.fc42 fedora 31.6 KiB brotli-devel x86_64 1.1.0-6.fc42 fedora 65.6 KiB cmake-filesystem x86_64 3.31.6-2.fc42 fedora 0.0 B cpp x86_64 15.1.1-2.fc42 updates 37.9 MiB dbus-libs x86_64 1:1.16.0-3.fc42 fedora 349.5 KiB gcc x86_64 15.1.1-2.fc42 updates 111.1 MiB gcc-plugin-annobin x86_64 15.1.1-2.fc42 updates 57.1 KiB glibc-devel x86_64 2.41-5.fc42 updates 2.3 MiB kernel-headers x86_64 6.14.3-300.fc42 updates 6.5 MiB keyutils-libs-devel x86_64 1.6.3-5.fc42 fedora 48.2 KiB krb5-devel x86_64 1.21.3-6.fc42 updates 705.9 KiB ldc-libs x86_64 1:1.40.0-3.fc42 fedora 11.6 MiB libcom_err-devel x86_64 1.47.2-3.fc42 fedora 16.7 KiB libedit x86_64 3.1-55.20250104cvs.fc42 fedora 244.1 KiB libidn2-devel x86_64 2.3.8-1.fc42 fedora 149.1 KiB libkadm5 x86_64 1.21.3-6.fc42 updates 213.9 KiB libmpc x86_64 1.3.1-7.fc42 fedora 164.5 KiB libnghttp2-devel x86_64 1.64.0-3.fc42 fedora 295.4 KiB libpsl-devel x86_64 0.21.5-5.fc42 fedora 110.3 KiB libselinux-devel x86_64 3.8-2.fc42 updates 126.8 KiB libsepol-devel x86_64 3.8-1.fc42 fedora 120.8 KiB libssh-devel x86_64 0.11.1-4.fc42 fedora 178.0 KiB libverto-devel x86_64 0.3.2-10.fc42 fedora 25.7 KiB libxcrypt-devel x86_64 4.4.38-7.fc42 updates 30.8 KiB llvm19-filesystem x86_64 19.1.7-13.fc42 updates 0.0 B llvm19-libs x86_64 19.1.7-13.fc42 updates 124.0 MiB make x86_64 1:4.4.1-10.fc42 fedora 1.8 MiB openssl-devel x86_64 1:3.2.4-3.fc42 fedora 4.3 MiB pcre2-devel x86_64 10.45-1.fc42 fedora 2.1 MiB pcre2-utf16 x86_64 10.45-1.fc42 fedora 626.3 KiB pcre2-utf32 x86_64 10.45-1.fc42 fedora 598.2 KiB publicsuffix-list noarch 20250116-1.fc42 fedora 329.8 KiB sqlite x86_64 3.47.2-2.fc42 fedora 1.8 MiB systemd-devel x86_64 257.6-1.fc42 updates 612.3 KiB systemd-rpm-macros noarch 257.6-1.fc42 updates 10.7 KiB xml-common noarch 0.6.3-66.fc42 fedora 78.4 KiB zlib-ng-compat-devel x86_64 2.2.4-3.fc42 fedora 107.0 KiB Transaction Summary: Installing: 43 packages Total size of inbound packages is 103 MiB. Need to download 0 B. After this operation, 339 MiB extra will be used (install 339 MiB, remove 0 B). [ 1/43] ldc-1:1.40.0-3.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 2/43] dbus-devel-1:1.16.0-3.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 3/43] libcurl-devel-0:8.11.1-4.fc42.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 4/43] sqlite-devel-0:3.47.2-2.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 5/43] ldc-libs-1:1.40.0-3.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 6/43] cmake-filesystem-0:3.31.6-2.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 7/43] dbus-libs-1:1.16.0-3.fc42.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 8/43] xml-common-0:0.6.3-66.fc42.noar 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 9/43] sqlite-0:3.47.2-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [10/43] krb5-devel-0:1.21.3-6.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [11/43] libkadm5-0:1.21.3-6.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [12/43] brotli-devel-0:1.1.0-6.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [13/43] brotli-0:1.1.0-6.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [14/43] libidn2-devel-0:2.3.8-1.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [15/43] libnghttp2-devel-0:1.64.0-3.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [16/43] libpsl-devel-0:0.21.5-5.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [17/43] publicsuffix-list-0:20250116-1. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [18/43] libssh-devel-0:0.11.1-4.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [19/43] openssl-devel-1:3.2.4-3.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [20/43] zlib-ng-compat-devel-0:2.2.4-3. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [21/43] gcc-0:15.1.1-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [22/43] cpp-0:15.1.1-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [23/43] libmpc-0:1.3.1-7.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [24/43] make-1:4.4.1-10.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [25/43] llvm19-libs-0:19.1.7-13.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [26/43] llvm19-filesystem-0:19.1.7-13.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [27/43] libedit-0:3.1-55.20250104cvs.fc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [28/43] systemd-devel-0:257.6-1.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [29/43] libselinux-devel-0:3.8-2.fc42.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [30/43] libsepol-devel-0:3.8-1.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [31/43] keyutils-libs-devel-0:1.6.3-5.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [32/43] libcom_err-devel-0:1.47.2-3.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [33/43] libverto-devel-0:0.3.2-10.fc42. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [34/43] glibc-devel-0:2.41-5.fc42.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [35/43] pcre2-devel-0:10.45-1.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [36/43] pcre2-utf16-0:10.45-1.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [37/43] pcre2-utf32-0:10.45-1.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [38/43] kernel-headers-0:6.14.3-300.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [39/43] libxcrypt-devel-0:4.4.38-7.fc42 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [40/43] gcc-plugin-annobin-0:15.1.1-2.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [41/43] systemd-rpm-macros-0:257.6-1.fc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [42/43] annobin-plugin-gcc-0:12.94-1.fc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [43/43] annobin-docs-0:12.94-1.fc42.noa 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded -------------------------------------------------------------------------------- [43/43] Total 100% | 0.0 B/s | 0.0 B | 00m00s Running transaction [ 1/45] Verify package files 100% | 29.0 B/s | 43.0 B | 00m01s [ 2/45] Prepare transaction 100% | 154.0 B/s | 43.0 B | 00m00s [ 3/45] Installing cmake-filesystem-0:3 100% | 583.8 KiB/s | 7.6 KiB | 00m00s [ 4/45] Installing libmpc-0:1.3.1-7.fc4 100% | 23.2 MiB/s | 166.1 KiB | 00m00s [ 5/45] Installing cpp-0:15.1.1-2.fc42. 100% | 120.6 MiB/s | 37.9 MiB | 00m00s [ 6/45] Installing libssh-devel-0:0.11. 100% | 19.6 MiB/s | 180.5 KiB | 00m00s [ 7/45] Installing zlib-ng-compat-devel 100% | 15.1 MiB/s | 108.5 KiB | 00m00s [ 8/45] Installing annobin-docs-0:12.94 100% | 10.9 MiB/s | 100.0 KiB | 00m00s [ 9/45] Installing kernel-headers-0:6.1 100% | 36.6 MiB/s | 6.7 MiB | 00m00s [10/45] Installing libxcrypt-devel-0:4. 100% | 2.9 MiB/s | 33.1 KiB | 00m00s [11/45] Installing glibc-devel-0:2.41-5 100% | 15.3 MiB/s | 2.3 MiB | 00m00s [12/45] Installing pcre2-utf32-0:10.45- 100% | 18.3 MiB/s | 599.1 KiB | 00m00s [13/45] Installing pcre2-utf16-0:10.45- 100% | 30.6 MiB/s | 627.1 KiB | 00m00s [14/45] Installing pcre2-devel-0:10.45- 100% | 33.8 MiB/s | 2.1 MiB | 00m00s [15/45] Installing libverto-devel-0:0.3 100% | 5.1 MiB/s | 26.4 KiB | 00m00s [16/45] Installing libcom_err-devel-0:1 100% | 761.4 KiB/s | 18.3 KiB | 00m00s [17/45] Installing keyutils-libs-devel- 100% | 5.4 MiB/s | 55.2 KiB | 00m00s [18/45] Installing libsepol-devel-0:3.8 100% | 9.6 MiB/s | 128.3 KiB | 00m00s [19/45] Installing libselinux-devel-0:3 100% | 4.2 MiB/s | 161.6 KiB | 00m00s [20/45] Installing systemd-devel-0:257. 100% | 6.2 MiB/s | 744.1 KiB | 00m00s [21/45] Installing libedit-0:3.1-55.202 100% | 30.0 MiB/s | 245.8 KiB | 00m00s [22/45] Installing llvm19-filesystem-0: 100% | 264.6 KiB/s | 1.1 KiB | 00m00s [23/45] Installing llvm19-libs-0:19.1.7 100% | 137.8 MiB/s | 124.0 MiB | 00m01s [24/45] Installing make-1:4.4.1-10.fc42 100% | 37.5 MiB/s | 1.8 MiB | 00m00s [25/45] Installing gcc-0:15.1.1-2.fc42. 100% | 131.7 MiB/s | 111.2 MiB | 00m01s [26/45] Installing openssl-devel-1:3.2. 100% | 9.0 MiB/s | 5.2 MiB | 00m01s [27/45] Installing publicsuffix-list-0: 100% | 53.8 MiB/s | 330.8 KiB | 00m00s [28/45] Installing libpsl-devel-0:0.21. 100% | 13.9 MiB/s | 113.6 KiB | 00m00s [29/45] Installing libnghttp2-devel-0:1 100% | 48.3 MiB/s | 296.5 KiB | 00m00s [30/45] Installing libidn2-devel-0:2.3. 100% | 11.8 MiB/s | 156.7 KiB | 00m00s [31/45] Installing brotli-0:1.1.0-6.fc4 100% | 1.3 MiB/s | 32.3 KiB | 00m00s [32/45] Installing brotli-devel-0:1.1.0 100% | 8.3 MiB/s | 68.0 KiB | 00m00s [33/45] Installing libkadm5-0:1.21.3-6. 100% | 26.4 MiB/s | 215.9 KiB | 00m00s [34/45] Installing krb5-devel-0:1.21.3- 100% | 18.4 MiB/s | 715.2 KiB | 00m00s [35/45] Installing sqlite-0:3.47.2-2.fc 100% | 41.5 MiB/s | 1.8 MiB | 00m00s [36/45] Installing xml-common-0:0.6.3-6 100% | 9.9 MiB/s | 81.1 KiB | 00m00s [37/45] Installing dbus-libs-1:1.16.0-3 100% | 42.8 MiB/s | 350.6 KiB | 00m00s [38/45] Installing ldc-libs-1:1.40.0-3. 100% | 85.7 MiB/s | 11.6 MiB | 00m00s [39/45] Installing ldc-1:1.40.0-3.fc42. 100% | 83.0 MiB/s | 27.5 MiB | 00m00s [40/45] Installing dbus-devel-1:1.16.0- 100% | 13.3 MiB/s | 136.5 KiB | 00m00s [41/45] Installing sqlite-devel-0:3.47. 100% | 54.9 MiB/s | 674.1 KiB | 00m00s [42/45] Installing libcurl-devel-0:8.11 100% | 3.2 MiB/s | 1.4 MiB | 00m00s [43/45] Installing gcc-plugin-annobin-0 100% | 1.1 MiB/s | 58.8 KiB | 00m00s [44/45] Installing annobin-plugin-gcc-0 100% | 14.1 MiB/s | 995.1 KiB | 00m00s [45/45] Installing systemd-rpm-macros-0 100% | 2.9 KiB/s | 11.3 KiB | 00m04s Complete! Finish: build setup for onedrive-2.5.6-1.el9.src.rpm Start: rpmbuild onedrive-2.5.6-1.el9.src.rpm Start: Outputting list of installed packages Finish: Outputting list of installed packages Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1749081600 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.ApSQdT Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.u4DE7z + umask 022 + cd /builddir/build/BUILD/onedrive-2.5.6-build + cd /builddir/build/BUILD/onedrive-2.5.6-build + rm -rf onedrive-2.5.6 + /usr/lib/rpm/rpmuncompress -x /builddir/build/SOURCES/v2.5.6.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd onedrive-2.5.6 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.XgQE0g + umask 022 + cd /builddir/build/BUILD/onedrive-2.5.6-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd onedrive-2.5.6 + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + '[' '-flto=auto -ffat-lto-objectsx' '!=' x ']' ++ find . -type f -name configure -print + for file in $(find . -type f -name configure -print) + /usr/bin/sed -r --in-place=.backup 's/^char \(\*f\) \(\) = /__attribute__ ((used)) char (*f) () = /g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup 's/^char \(\*f\) \(\);/__attribute__ ((used)) char (*f) ();/g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup 's/^char \$2 \(\);/__attribute__ ((used)) char \$2 ();/g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed --in-place=.backup '1{$!N;$!N};$!N;s/int x = 1;\nint y = 0;\nint z;\nint nan;/volatile int x = 1; volatile int y = 0; volatile int z, nan;/;P;D' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup '/lt_cv_sys_global_symbol_to_cdecl=/s#(".*"|'\''.*'\'')#"sed -n -e '\''s/^T .* \\(.*\\)$/extern int \\1();/p'\'' -e '\''s/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\''"#' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + '[' 1 = 1 ']' +++ dirname ./configure ++ find . -name config.guess -o -name config.sub + '[' 1 = 1 ']' + '[' x '!=' 'x-Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' ']' ++ find . -name ltmain.sh ++ grep -q runstatedir=DIR ./configure + ./configure --build=x86_64-redhat-linux --host=x86_64-redhat-linux --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/bin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-debug --enable-notifications configure: WARNING: unrecognized options: --disable-dependency-tracking checking for a BSD-compatible install... /usr/bin/install -c checking for x86_64-redhat-linux-pkg-config... no checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for dmd... no checking for ldmd2... ldmd2 checking version of D compiler... 1.40.0 checking for curl... yes checking for sqlite... yes checking whether to enable dbus support... yes (on Linux) checking for dbus... yes checking for notify... no configure: creating ./config.status config.status: creating Makefile config.status: creating contrib/pacman/PKGBUILD config.status: creating contrib/spec/onedrive.spec config.status: creating onedrive.1 config.status: creating contrib/systemd/onedrive.service config.status: creating contrib/systemd/onedrive@.service configure: WARNING: unrecognized options: --disable-dependency-tracking + make if [ -f .git/HEAD ] ; then \ git describe --tags > version ; \ else \ echo v2.5.6 > version ; \ fi ldmd2 -J. -w -g -debug -gs src/main.d src/config.d src/log.d src/util.d src/qxor.d src/curlEngine.d src/onedrive.d src/webhook.d src/sync.d src/itemdb.d src/sqlite.d src/clientSideFiltering.d src/monitor.d src/arsd/cgi.d src/xattr.d src/intune.d -L-lcurl -L-lsqlite3 -L-L/usr/lib64/pkgconfig/../../lib64 -L-ldbus-1 -L-ldl -ofonedrive + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.jDHAO4 + umask 022 + cd /builddir/build/BUILD/onedrive-2.5.6-build + '[' /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT '!=' / ']' + rm -rf /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT ++ dirname /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT + mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build + mkdir /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd onedrive-2.5.6 + /usr/bin/make install DESTDIR=/builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT 'INSTALL=/usr/bin/install -p' PREFIX=/builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/bin /usr/bin/install -p onedrive /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/bin/onedrive mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/man/man1 /usr/bin/install -p -m 0644 onedrive.1 /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/man/man1/onedrive.1 mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/etc/logrotate.d /usr/bin/install -p -m 0644 contrib/logrotate/onedrive.logrotate /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/etc/logrotate.d/onedrive mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive for file in readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md; do \ /usr/bin/install -p -m 0644 $file /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive; \ done + install -D -m 0644 contrib/systemd/onedrive@.service /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/lib/systemd/system/onedrive@.service + install -D -m 0644 contrib/systemd/onedrive.service /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/lib/systemd/user/onedrive.service + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/check-rpaths + /usr/lib/rpm/redhat/brp-mangle-shebangs + /usr/lib/rpm/brp-remove-la-files + env /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 -j1 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/bin/add-determinism --brp -j1 /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT Scanned 14 directories and 26 files, processed 1 inodes, 0 modified (0 replaced + 0 rewritten), 0 unsupported format, 0 errors Reading /builddir/build/BUILD/onedrive-2.5.6-build/SPECPARTS/rpm-debuginfo.specpart Processing files: onedrive-2.5.6-1.fc42.x86_64 Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.2lS8Ty + umask 022 + cd /builddir/build/BUILD/onedrive-2.5.6-build + cd onedrive-2.5.6 + DOCDIR=/builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + export DOCDIR + /usr/bin/mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/readme.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/LICENSE /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/changelog.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/advanced-usage.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/application-config-options.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/application-security.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/build-rpm-howto.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/business-shared-items.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/client-architecture.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/contributing.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/docker.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/install.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/known-issues.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/national-cloud-deployments.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/podman.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/privacy-policy.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/sharepoint-libraries.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/terms-of-service.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/ubuntu-package-install.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/usage.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/webhooks.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/config /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + RPM_EC=0 ++ jobs -p + exit 0 Provides: config(onedrive) = 2.5.6-1.fc42 onedrive = 2.5.6-1.fc42 onedrive(x86-64) = 2.5.6-1.fc42 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires(post): systemd Requires(preun): systemd Requires(postun): systemd Requires: ld-linux-x86-64.so.2()(64bit) ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.17)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.33)(64bit) libc.so.6(GLIBC_2.34)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libc.so.6(GLIBC_2.8)(64bit) libcurl.so.4()(64bit) libdbus-1.so.3()(64bit) libdbus-1.so.3(LIBDBUS_1_3)(64bit) libdruntime-ldc-shared.so.110()(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libphobos2-ldc-shared.so.110()(64bit) libsqlite3.so.0()(64bit) rtld(GNU_HASH) Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT Wrote: /builddir/build/RPMS/onedrive-2.5.6-1.fc42.x86_64.rpm Finish: rpmbuild onedrive-2.5.6-1.el9.src.rpm Finish: build phase for onedrive-2.5.6-1.el9.src.rpm INFO: Done(/home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm) Config(fedora-42-x86_64) 0 minutes 54 seconds INFO: Results and/or logs in: /var/lib/mock/fedora-42-x86_64/result Finish: run ``` onedrive-2.5.10/docs/business-shared-items.md000066400000000000000000000420331513710110600210770ustar00rootroot00000000000000# How to sync OneDrive Business Shared Items > [!CAUTION] > Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. > [!CAUTION] > This feature has been 100% re-written from v2.5.0 onwards and is not backwards compatible with v2.4.x client versions. If enabling this feature, you must upgrade to v2.5.0 or above on all systems that are running this client. > > An additional pre-requisite before using this capability in v2.5.0 and above is for you to revert any v2.4.x Shared Business Folder configuration you may be currently using, including, but not limited to: > * Removing `sync_business_shared_folders = "true|false"` from your 'config' file > * Removing the 'business_shared_folders' file > * Removing any local data | shared folder data from your configured 'sync_dir' to ensure that there are no conflicts or issues. > * Removing any configuration online that might be related to using this feature prior to v2.5.0 ## Process Overview Syncing OneDrive Business Shared Folders requires additional configuration for your 'onedrive' client: 1. From the OneDrive web interface, review the 'Shared' objects that have been shared with you. 2. Select the applicable folder, and click the 'Add shortcut to My files', which will then add this to your 'My files' folder 3. Update your OneDrive Client for Linux 'config' file to enable the feature by adding `sync_business_shared_items = "true"`. Adding this option will trigger a `--resync` requirement. 4. Test the configuration using '--dry-run' 5. Remove the use of '--dry-run' and sync the OneDrive Business Shared folders as required ### Enable syncing of OneDrive Business Shared Items via config file ```text sync_business_shared_items = "true" ``` ### Disable syncing of OneDrive Business Shared Items via config file ```text sync_business_shared_items = "false" ``` ## Syncing OneDrive Business Shared Folders Use the following steps to add a OneDrive Business Shared Folder to your account: 1. Login to Microsoft OneDrive online, and navigate to 'Shared' from the left hand side pane ![objects_shared_with_me](./images/objects_shared_with_me.png) 2. Select the respective folder you wish to sync, and click the 'Add shortcut to My files' at the top of the page ![add_shared_folder](./images/add_shared_folder.png) 3. The final result online will look like this: ![shared_folder_added](./images/shared_folder_added.png) When using Microsoft Windows, this shared folder will appear as the following: ![windows_view_shared_folders](./images/windows_view_shared_folders.png) 4. Sync your data using `onedrive --sync --verbose`. If you have just enabled the `sync_business_shared_items = "true"` configuration option, you will be required to perform a resync. During the sync, the selected shared folder will be downloaded: ``` ... Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 4 Finished processing /delta JSON response from the OneDrive API Processing 3 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Creating local directory: ./my_shared_folder Quota information is restricted or not available for this drive. Syncing this OneDrive Business Shared Folder: my_shared_folder Fetching /delta response from the OneDrive API for Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 6 Finished processing /delta JSON response from the OneDrive API Processing 6 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Creating local directory: ./my_shared_folder/asdf Creating local directory: ./my_shared_folder/original_data Number of items to download from OneDrive: 3 Downloading file: my_shared_folder/my_folder/file_one.txt ... done Downloading file: my_shared_folder/my_folder/file_two.txt ... done Downloading file: my_shared_folder/original_data/file1.data ... done Performing a database consistency and integrity check on locally stored data ... ``` When this is viewed locally, on Linux, this shared folder is seen as the following: ![linux_shared_folder_view](./images/linux_shared_folder_view.png) Any shared folder you add can utilise any 'client side filtering' rules that you have created. ## Syncing OneDrive Business Shared Files There are two methods to support the syncing OneDrive Business Shared Files with the OneDrive Application 1. Add a 'shortcut' to your 'My Files' for the file, which creates a URL shortcut to the file which can be followed when using a Linux Window Manager (Gnome, KDE etc) and the link will open up in a browser. Microsoft Windows only supports this option. 2. Use `--sync-shared-files` option to sync all files shared with you to your local disk. If you use this method, you can utilise any 'client side filtering' rules that you have created to filter out files you do not want locally. This option will create a new folder locally, with sub-folders named after the person who shared the data with you. ### Syncing OneDrive Business Shared Files using Option 1 1. As per the above method for adding folders, select the shared file, then select to 'Add shortcut' to the file ![add_shared_file_shortcut](./images/add_shared_file_shortcut.png) 2. The final result online will look like this: ![add_shared_file_shortcut_added](./images/online_shared_file_link.png) When using Microsoft Windows, this shared file will appear as the following: ![windows_view_shared_file_link](./images/windows_view_shared_file_link.png) 3. Sync your data using `onedrive --sync --verbose`. If you have just enabled the `sync_business_shared_items = "true"` configuration option, you will be required to perform a resync. ``` ... All application operations will be performed in the configured local 'sync_dir' directory: /home/alex/OneDrive Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 2 Finished processing /delta JSON response from the OneDrive API Processing 1 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Number of items to download from OneDrive: 1 Downloading file: ./file to share.docx.url ... done Syncing this OneDrive Business Shared Folder: my_shared_folder Fetching /delta response from the OneDrive API for Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 0 Finished processing /delta JSON response from the OneDrive API No additional changes or items that can be applied were discovered while processing the data received from Microsoft OneDrive Quota information is restricted or not available for this drive. Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Quota information is restricted or not available for this drive. ... ``` When this is viewed locally, on Linux, this shared folder is seen as the following: ![linux_view_shared_file_link](./images/linux_view_shared_file_link.png) Any shared file link you add can utilise any 'client side filtering' rules that you have created. ### Syncing OneDrive Business Shared Files using Option 2 > [!IMPORTANT] > When using option 2, all files that have been shared with you will be downloaded by default. To reduce this, first use `--list-shared-items` to list all shared items with your account, then use 'client side filtering' rules such as 'sync_list' configuration to selectively sync all the files to your local system. 1. Review all items that have been shared with you by using `onedrive --list-shared-items`. This should display output similar to the following: ``` ... Listing available OneDrive Business Shared Items: ----------------------------------------------------------------------------------- Shared File: large_document_shared.docx Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: no_download_access.docx Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: online_access_only.txt Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: read_only.txt Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: qewrqwerwqer.txt Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: dummy_file_to_share.docx Shared By: testuser2 testuser2 (testuser2@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared Folder: Sub Folder 2 Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: file to share.docx Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared Folder: Top Folder Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared Folder: my_shared_folder Shared By: testuser2 testuser2 (testuser2@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared Folder: Jenkins Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- ... ``` 2. If applicable, add entries to a 'sync_list' file, to only sync the shared files that are of importance to you. 3. Run the command `onedrive --sync --verbose --sync-shared-files` to sync the shared files to your local file system. This will create a new local folder called 'Files Shared With Me', and will contain sub-directories named after the entity account that has shared the file with you. In that folder will reside the shared file: ``` ... Finished processing /delta JSON response from the OneDrive API No additional changes or items that can be applied were discovered while processing the data received from Microsoft OneDrive Syncing this OneDrive Business Shared Folder: my_shared_folder Fetching /delta response from the OneDrive API for Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 0 Finished processing /delta JSON response from the OneDrive API No additional changes or items that can be applied were discovered while processing the data received from Microsoft OneDrive Quota information is restricted or not available for this drive. Creating the OneDrive Business Shared Files Local Directory: /home/alex/OneDrive/Files Shared With Me Checking for any applicable OneDrive Business Shared Files which need to be synced locally Creating the OneDrive Business Shared File Users Local Directory: /home/alex/OneDrive/Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com) Creating the OneDrive Business Shared File Users Local Directory: /home/alex/OneDrive/Files Shared With Me/testuser2 testuser2 (testuser2@mynasau3.onmicrosoft.com) Number of items to download from OneDrive: 7 Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/file to share.docx ... done OneDrive returned a 'HTTP 403 - Forbidden' - gracefully handling error Unable to download this file as this was shared as read-only without download permission: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/no_download_access.docx ERROR: File failed to download. Increase logging verbosity to determine why. Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/no_download_access.docx ... failed! Downloading file: Files Shared With Me/testuser2 testuser2 (testuser2@mynasau3.onmicrosoft.com)/dummy_file_to_share.docx ... done Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 0% | ETA --:--:-- Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/online_access_only.txt ... done Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/read_only.txt ... done Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/qewrqwerwqer.txt ... done Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 5% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 10% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 15% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 20% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 25% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 30% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 35% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 40% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 45% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 50% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 55% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 60% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 65% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 70% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 75% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 80% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 85% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 90% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 95% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 100% | DONE in 00:00:00 Quota information is restricted or not available for this drive. Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... done Quota information is restricted or not available for this drive. Quota information is restricted or not available for this drive. Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Quota information is restricted or not available for this drive. ... ``` When this is viewed locally, on Linux, this 'Files Shared With Me' and content is seen as the following: ![files_shared_with_me_folder](./images/files_shared_with_me_folder.png) Unfortunately there is no Microsoft Windows equivalent for this capability. ## Known Issues Shared folders, shared with you from people outside of your 'organisation' are unable to be synced. This is due to the Microsoft Graph API not presenting these folders. Shared folders that match this scenario, when you view 'Shared' via OneDrive online, will have a 'world' symbol as per below: ![shared_with_me](./images/shared_with_me.JPG) This issue is being tracked by: [#966](https://github.com/abraunegg/onedrive/issues/966) onedrive-2.5.10/docs/client-architecture.md000066400000000000000000000667361513710110600206370ustar00rootroot00000000000000# OneDrive Client for Linux Application Architecture ## How does the client work at a high level? The client utilises the 'libcurl' library to communicate with Microsoft OneDrive via the Microsoft Graph API. The diagram below shows this high level interaction with the Microsoft and GitHub API services online: ![client_use_of_libcurl](./puml/client_use_of_libcurl.png) Depending on your operational environment, it is possible to 'tweak' the following options which will modify how libcurl operates with it's interaction with Microsoft OneDrive services: * Downgrade all HTTPS operations to use HTTP1.1 (Config Option: `force_http_11`) * Control how long a specific transfer should take before it is considered too slow and aborted (Config Option: `operation_timeout`) * Control libcurl handling of DNS Cache Timeout (Config Option: `dns_timeout`) * Control the maximum time allowed for the connection to be established (Config Option: `connect_timeout`) * Control the timeout for activity on an established HTTPS connection (Config Option: `data_timeout`) * Control what IP protocol version should be used when communicating with OneDrive (Config Option: `ip_protocol_version`) * Control what User Agent is presented to Microsoft services (Config Option: `user_agent`) > [!IMPORTANT] > The default 'user_agent' value conforms to specific Microsoft requirements to identify as an ISV that complies with OneDrive traffic decoration requirements. Changing this value potentially will impact how Microsoft see's your client, thus your traffic may get throttled. For further information please read: https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online Diving a little deeper into how the client operates, the diagram below outlines at a high level the operational workflow of the OneDrive Client for Linux, demonstrating how it interacts with the OneDrive API to maintain synchronisation, manage local and cloud data integrity, and ensure that user data is accurately mirrored between the local filesystem and OneDrive cloud storage. ![High Level Application Sequence](./puml/high_level_operational_process.png) The application operational processes have several high level key stages: 1. **Access Token Validation:** Initially, the client validates its access and the existing access token, refreshing it if necessary. This step ensures that the client has the required permissions to interact with the OneDrive API. 2. **Query Microsoft OneDrive API:** The client queries the /delta API endpoint of Microsoft OneDrive, which returns JSON responses. The /delta endpoint is particularly used for syncing changes, helping the client to identify any updates in the OneDrive storage. 3. **Process JSON Responses:** The client processes each JSON response to determine if it represents a 'root' or 'deleted' item. Items not marked as 'root' or 'deleted' are temporarily stored for further processing. For 'root' or 'deleted' items, the client processes them immediately, otherwise, the client evaluates the items against client-side filtering rules to decide whether to discard them or to process and save them in the local database cache for actions like creating directories or downloading files. 4. **Local Cache Database Processing for Data Integrity:** The client processes its local cache database to check for data integrity and differences compared to the OneDrive storage. If differences are found, such as a file or folder change including deletions, the client uploads these changes to OneDrive. Responses from the API, including item metadata, are saved to the local cache database. 5. **Local Filesystem Scanning:** The client scans the local filesystem for new files or folders. Each new item is checked against client-side filtering rules. If an item passes the filtering, it is uploaded to OneDrive. Otherwise, it is discarded if it doesn't meet the filtering criteria. 6. **Final Data True-Up:** Lastly, the client queries the /delta link for a final true-up, processing any further online JSON changes if required. This ensures that the local and OneDrive storages are fully synchronised. ## What are the operational modes of the client? There are 2 main operational modes that the client can utilise: 1. Standalone sync mode that performs a single sync action against Microsoft OneDrive. This method is used when you utilise `--sync`. 2. Ongoing sync mode that continuously syncs your data with Microsoft OneDrive and utilises 'inotify' to watch for local system changes. This method is used when you utilise `--monitor`. By default, both sync modes (`--sync` and `--monitor`)treat the data stored online in Microsoft OneDrive as the 'source-of-truth'. This means the client will first examine your OneDrive account for any changes (additions, modifications, deletions) and apply those changes to your local file system. After this, any local changes are uploaded, and finally, a second check ensures your local state matches the online state. This mirrors the behaviour of the Microsoft OneDrive Client for Windows. ![Default Sync Flow Process](./puml/default_sync_flow.png) When using the client with the `--local-first` option, the sync flow is reversed. The client treats your local files as the 'source-of-truth'. Local changes are processed first and pushed to Microsoft OneDrive online. Only after local changes have been uploaded will the client check for any remote changes (this includes online additions, modifications and deletions) and apply those to your local system as needed, ensuring the final local state is consistent with that what is now online. ![Local First Sync Flow Process](./puml/local_first_sync_process.png) > [!IMPORTANT] > When using `--sync --local-first`, a locally deleted file will only be deleted online if it was already in sync with its online counterpart. > * If the file was never synced, the client cannot know that the corresponding online file should be removed. In this case, the online file may be downloaded again > * Using `--resync` makes this behaviour more likely because it wipes all local knowledge of what was previously synced, so local deletions will not be recognised > > When using `--monitor --local-first`, file system watches (via inotify) will detect local deletions. This event will automatically trigger removal of the online file, and if exists and matches the local data, the file online will be removed. > [!IMPORTANT] > Please be aware that if you designate a network mount point (such as NFS, Windows Network Share, or Samba Network Share) as your `sync_dir`, this setup inherently lacks 'inotify' support. Support for 'inotify' is essential for real-time tracking of file changes, which means that the client's 'Monitor Mode' cannot immediately detect changes in files located on these network shares. Instead, synchronisation between your local filesystem and Microsoft OneDrive will occur at intervals specified by the `monitor_interval` setting. This limitation regarding 'inotify' support on network mount points like NFS or Samba is beyond the control of this client. ## OneDrive Client for Linux High Level Activity Flows The diagrams below show the high level process flow and decision making when running the application ### Main functional activity flows ![Main Activity](./puml/main_activity_flows.png) ### Processing a potentially new local item ![applyPotentiallyNewLocalItem](./puml/applyPotentiallyNewLocalItem.png) ### Processing a potentially changed local item ![applyPotentiallyChangedItem](./puml/applyPotentiallyChangedItem.png) ### Download a file from Microsoft OneDrive ![downloadFile](./puml/downloadFile.png) ### Upload a modified file to Microsoft OneDrive ![uploadModifiedFile](./puml/uploadModifiedFile.png) ### Upload a new local file to Microsoft OneDrive ![uploadFile](./puml/uploadFile.png) ### Determining if an 'item' is synchronised between Microsoft OneDrive and the local file system ![Item Sync Determination](./puml/is_item_in_sync.png) ### Determining if an 'item' is excluded due to 'Client Side Filtering' rules By default, the OneDrive Client for Linux will sync all files and folders between Microsoft OneDrive and the local filesystem. Client Side Filtering in the context of this client refers to user-configured rules that determine what files and directories the client should upload or download from Microsoft OneDrive. These rules are crucial for optimising synchronisation, especially when dealing with large numbers of files or specific file types. The OneDrive Client for Linux offers several configuration options to facilitate this: * **skip_dir:** This option allows the user to specify directories that should not be synchronised with OneDrive. It's particularly useful for omitting large or irrelevant directories from the sync process. * **skip_dotfiles:** Dotfiles, usually configuration files or scripts, can be excluded from the sync. This is useful for users who prefer to keep these files local. * **skip_file:** Specific files can be excluded from synchronisation using this option. It provides flexibility in selecting which files are essential for cloud storage. * **skip_symlinks:** Symlinks often point to files outside the OneDrive directory or to locations that are not relevant for cloud storage. This option prevents them from being included in the sync. This exclusion process can be illustrated by the following activity diagram. A 'true' return value means that the path being evaluated needs to be excluded: ![Client Side Filtering Determination](./puml/client_side_filtering_rules.png) ## Understanding how the client processes online state When you see `Fetching items from the OneDrive API for Drive ID:` or `Generating a /delta response from the OneDrive API for this Drive ID:` the client isn’t stuck—it’s working through paged change sets from Microsoft Graph using your current delta token, reconciling them with the local database, and safely scheduling work. Microsoft Graph returns paged results and signals either `@odata.nextLink` (more pages to fetch) or `@odata.deltaLink` (caught up; keep this token for next time) - the client follows those links until it reaches a stable point. Page sizing and paging behaviour are controlled by the Microsoft Graph API service. ### What a typical cycle looks like 1. **Fetching online state** * **Application Output:** `Fetching items from the OneDrive API for Drive ID: …` or `Generating a /delta response from the OneDrive API for this Drive ID:` * The client requests the next page of changes using your current delta token. 2. **Processing received items** * **Application Output:** `Processing N applicable changes and items received from Microsoft OneDrive` * Each item received is classified (add/update/delete/excluded), matched against local state, and queued for action. 3. **Execute required actions** * Download new or modified files, Delete local data that has been deleted online, Create new local directories 4. **Database Integrity** * **Application Output:** `Performing a database consistency and integrity check on locally stored data` * Integrity pass to prevent state corruption 5. **Local scan for new local data** * **Application Output:** `Scanning the local file system '…' for new data to upload` * Traverse local filesystem, honouring client side filtering rules 6. **True-Up** * **Application Output:** `Performing a last examination of the most recent online data within Microsoft OneDrive to complete the reconciliation process` * Final scan of online to ensure that everything is in the state it is meant to be ### Why first runs or --resync take longer A first run (or a deliberate `--resync`) must enumerate the entire tree to establish a known-good baseline; subsequent incremental runs are much faster because the delta token limits work to just the changes since last time. ### What affects performance the most * **Item count & Online structure:** Many folders and files dominate metadata work leading to more metadata churn * **Network** Latency and throughput directly affect how quickly we can iterate Microsoft Graph API responses and transfer content. * **Local Disk & filesystem:** SSDs perform metadata and DB work far faster than spinning disks or remote mounts. Your filesystem type (e.g., ext4, XFS, ZFS) matters and should be tuned appropriately. * **File Indexing:** Disable File Indexing (Tracker, Baloo, Searchmonkey, Pinot and others) as these are adding latency and disk I/O to your operations slowing down your performance. * **CPU & memory:** Classification and hashing are CPU-bound; insufficient RAM or swap can slow DB and traversal work. ## Delta Response vs Generated Delta Response By default, the client uses Microsoft Graph’s `/delta` to retrieve changes efficiently. In a few situations, however, using `/delta` would be wrong or unsafe for your intent. In those cases the client generates a delta by walking the relevant online subtree and synthesising the current state before reconciling it locally. This is intentionally slower but correct. ### When the client deliberately generates a delta * Some national cloud deployments where a needed delta endpoint/feature isn’t available. Capabilities differ by resource and cloud; when a required delta isn’t available, we walk the tree and synthesise the change set. * The use of `--single-directory` scope. A naïve drive-level /delta can include changes outside your intended scope. Generating a delta ensures only the in-scope subtree is considered. * The use of `--download-only --cleanup-local-files`. Raw /delta may replay online delete/replace churn that would remove valid local files you intend to keep. Generated delta captures the current online state and intentionally ignores those intermediate events to protect local data. * The use of 'Shared Folders'. Calling `/delta` on a shared path can be rooted at the owner’s drive, so your filters may not match what you see as “the shared folder”. Generated delta walks the shared subtree and normalises paths so the queue reflects what’s truly shared with you. ## File conflict handling - default operational modes When using the default operational modes (`--sync` or `--monitor`) the client application is conforming to how the Microsoft Windows OneDrive client operates in terms of resolving conflicts for files. When using `--resync` this conflict resolution can differ slightly, as, when using `--resync` you are *deleting* the known application state, thus, the application has zero reference as to what was previously in sync with the local file system. Due to this factor, when using `--resync` the online source is always going to be considered accurate and the source-of-truth, regardless of the local file state, local file timestamp or local file hash. When a difference in local file hash is detected, the file will be renamed to prevent local data loss. > [!IMPORTANT] > In v2.5.3 and above, when a local file is renamed due to conflict handling, this will be in the following format pattern to allow easier identification: > > **filename-hostname-safeBackup-number.file_extension** > > For example: > ``` > -rw-------. 1 alex alex 53402 Sep 21 08:25 file5.data > -rw-------. 1 alex alex 53423 Nov 13 18:18 file5-onedrive-client-dev-safeBackup-0001.data > -rw-------. 1 alex alex 53422 Nov 13 18:19 file5-onedrive-client-dev-safeBackup-0002.data > ``` > > In client versions v2.5.2 and below, the renamed file have the following naming convention: > > **filename-hostname-number.file_extension** > > resulting in backup filenames of the following format: > ``` > -rw-------. 1 alex alex 53402 Sep 21 08:25 file5.data > -rw-------. 1 alex alex 53432 Nov 14 05:22 file5-onedrive-client-dev-2.data > -rw-------. 1 alex alex 53435 Nov 14 05:24 file5-onedrive-client-dev-3.data > -rw-------. 1 alex alex 53419 Nov 14 05:22 file5-onedrive-client-dev.data > ``` > > [!CAUTION] > The creation of backup files when there is a conflict to avoid local data loss can be disabled. > > To do this, utilise the configuration option **'bypass_data_preservation'** > ``` > bypass_data_preservation = "true" > ``` > > If enable this option, you may experience data loss on your local data as the existing local file will be over-written with data from OneDrive online. Use with extreme care and caution. > [!TIP] > If you wish to avoid having these backup files from being uploaded to your online OneDrive account, you can utilise the configuration option **'skip_file'** to skip these files from being uploaded. > > For example: > ``` > skip_file = "~*|.~*|*.tmp|*.swp|*.partial|*-safeBackup-*" > ``` > This example retails the application defaults for 'skip_file' and adds an entry to skip any 'safeBackup' generated file. ### Default Operational Modes - Conflict Handling #### Scenario 1. Create a local file 2. Perform a sync with Microsoft OneDrive using `onedrive --sync` 3. Modify file online 4. Modify file locally with different data|contents 5. Perform a sync with Microsoft OneDrive using `onedrive --sync` ![conflict_handling_default](./puml/conflict_handling_default.png) #### Evidence of Conflict Handling ``` ... Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 2 Finished processing /delta JSON response from the OneDrive API Processing 1 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Number of items to download from OneDrive: 1 The local file to replace (./1.txt) has been modified locally since the last download. Renaming it to avoid potential local data loss. The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: ./1.txt -> ./1-onedrive-client-dev.txt Downloading file ./1.txt ... done Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing ~/OneDrive The directory has not changed Processing α ... The file has not changed Processing เอกสาร The directory has not changed Processing 1.txt The file has not changed Scanning the local file system '~/OneDrive' for new data to upload ... New items to upload to OneDrive: 1 Total New Data to Upload: 52 Bytes Uploading new file ./1-onedrive-client-dev.txt ... done. Performing a last examination of the most recent online data within Microsoft OneDrive to complete the reconciliation process Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 2 Finished processing /delta JSON response from the OneDrive API Processing 1 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Sync with Microsoft OneDrive is complete Waiting for all internal threads to complete before exiting application ``` ### Default Operational Modes - Conflict Handling with --resync #### Scenario 1. Create a local file 2. Perform a sync with Microsoft OneDrive using `onedrive --sync` 3. Modify file online 4. Modify file locally with different data|contents 5. Perform a sync with Microsoft OneDrive using `onedrive --sync --resync` ![conflict_handling_default_resync](./puml/conflict_handling_default_resync.png) #### Evidence of Conflict Handling ``` ... Deleting the saved application sync status ... Using IPv4 and IPv6 (if configured) for all network operations Checking Application Version ... ... Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 14 Finished processing /delta JSON response from the OneDrive API Processing 13 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Local file time discrepancy detected: ./1.txt This local file has a different modified time 2024-Feb-19 19:32:55Z (UTC) when compared to remote modified time 2024-Feb-19 19:32:36Z (UTC) The local file has a different hash when compared to remote file hash Local item does not exist in local database - replacing with file from OneDrive - failed download? The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: ./1.txt -> ./1-onedrive-client-dev.txt Number of items to download from OneDrive: 1 Downloading file ./1.txt ... done Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing ~/OneDrive The directory has not changed Processing α ... Processing เอกสาร The directory has not changed Processing 1.txt The file has not changed Scanning the local file system '~/OneDrive' for new data to upload ... New items to upload to OneDrive: 1 Total New Data to Upload: 52 Bytes Uploading new file ./1-onedrive-client-dev.txt ... done. Performing a last examination of the most recent online data within Microsoft OneDrive to complete the reconciliation process Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 2 Finished processing /delta JSON response from the OneDrive API Processing 1 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Sync with Microsoft OneDrive is complete Waiting for all internal threads to complete before exiting application ``` ## File conflict handling - local-first operational mode When using `--local-first` as your operational parameter the client application is now using your local filesystem data as the 'source-of-truth' as to what should be stored online. However - Microsoft OneDrive itself, has *zero* acknowledgement of this concept, thus, conflict handling needs to be aligned to how Microsoft OneDrive on other platforms operate, that is, rename the local offending file. Additionally, when using `--resync` you are *deleting* the known application state, thus, the application has zero reference as to what was previously in sync with the local file system. Due to this factor, when using `--resync` the online source is always going to be considered accurate and the source-of-truth, regardless of the local file state, file timestamp or file hash or use of `--local-first`. ### Local First Operational Modes - Conflict Handling #### Scenario 1. Create a local file 2. Perform a sync with Microsoft OneDrive using `onedrive --sync --local-first` 3. Modify file locally with different data|contents 4. Modify file online with different data|contents 5. Perform a sync with Microsoft OneDrive using `onedrive --sync --local-first` ![conflict_handling_local-first_default](./puml/conflict_handling_local-first_default.png) #### Evidence of Conflict Handling ``` Reading configuration file: /home/alex/.config/onedrive/config ... Using IPv4 and IPv6 (if configured) for all network operations Checking Application Version ... ... Sync Engine Initialised with new Onedrive API instance All application operations will be performed in the configured local 'sync_dir' directory: /home/alex/OneDrive Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing ~/OneDrive The directory has not changed Processing α The directory has not changed ... The file has not changed Processing เอกสาร The directory has not changed Processing 1.txt Local file time discrepancy detected: 1.txt The file content has changed locally and has a newer timestamp, thus needs to be uploaded to OneDrive Changed local items to upload to OneDrive: 1 The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: 1.txt -> 1-onedrive-client-dev.txt Uploading new file 1-onedrive-client-dev.txt ... done. Scanning the local file system '~/OneDrive' for new data to upload ... Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 3 Finished processing /delta JSON response from the OneDrive API Processing 2 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Number of items to download from OneDrive: 1 Downloading file ./1.txt ... done Sync with Microsoft OneDrive is complete Waiting for all internal threads to complete before exiting application ``` ### Local First Operational Modes - Conflict Handling with --resync #### Scenario 1. Create a local file 2. Perform a sync with Microsoft OneDrive using `onedrive --sync --local-first` 3. Modify file locally with different data|contents 4. Modify file online with different data|contents 5. Perform a sync with Microsoft OneDrive using `onedrive --sync --local-first --resync` ![conflict_handling_local-first_resync](./puml/conflict_handling_local-first_resync.png) #### Evidence of Conflict Handling ``` ... Are you sure you wish to proceed with --resync? [Y/N] y Deleting the saved application sync status ... Using IPv4 and IPv6 (if configured) for all network operations ... Sync Engine Initialised with new Onedrive API instance All application operations will be performed in the configured local 'sync_dir' directory: /home/alex/OneDrive Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing ~/OneDrive The directory has not changed Scanning the local file system '~/OneDrive' for new data to upload Skipping item - excluded by sync_list config: ./random_25k_files OneDrive Client requested to create this directory online: ./α The requested directory to create was found on OneDrive - skipping creating the directory: ./α ... New items to upload to OneDrive: 9 Total New Data to Upload: 49 KB ... The file we are attempting to upload as a new file already exists on Microsoft OneDrive: ./1.txt Skipping uploading this item as a new file, will upload as a modified file (online file already exists): ./1.txt The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: ./1.txt -> ./1-onedrive-client-dev.txt Uploading new file ./1-onedrive-client-dev.txt ... done. Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 15 Finished processing /delta JSON response from the OneDrive API Processing 14 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Number of items to download from OneDrive: 1 Downloading file ./1.txt ... done Sync with Microsoft OneDrive is complete Waiting for all internal threads to complete before exiting application ``` ## Client Functional Component Architecture Relationships The diagram below shows the main functional relationship of application code components, and how these relate to each relevant code module within this application: ![Functional Code Components](./puml/code_functional_component_relationships.png) ## Database Schema The diagram below shows the database schema that is used within the application ![Database Schema](./puml/database_schema.png) onedrive-2.5.10/docs/contributing.md000066400000000000000000000155251513710110600173760ustar00rootroot00000000000000# OneDrive Client for Linux: Coding Style Guidelines ## Introduction This document outlines the coding style guidelines for code contributions for the OneDrive Client for Linux. These guidelines are intended to ensure the codebase remains clean, well-organised, and accessible to all contributors, new and experienced alike. ## Code Layout > [!NOTE] > When developing any code contribution, please utilise either Microsoft Visual Studio Code or Notepad++. ### Indentation Most of the codebase utilises tabs for space indentation, with 4 spaces to a tab. Please keep to this convention. ### Line Length Try and keep line lengths to a reasonable length. Do not constrain yourself to short line lengths such as 80 characters. This means when the code is being displayed in the code editor, lines are correctly displayed when using screen resolutions of 1920x1080 and above. If you wish to use shorter line lengths (80 characters for example), please do not follow this sort of example: ```code ... void functionName( string somevar, bool someOtherVar, cost(char) anotherVar=null ){ .... ``` ### Coding Style | Braces Please use 1TBS (One True Brace Style) which is a variation of the K&R (Kernighan & Ritchie) style. This approach is intended to improve readability and maintain consistency throughout the code. When using this coding style, even when the code of the `if`, `else`, `for`, or function definition contains only one statement, braces are used to enclose it. ```code // What this if statement is doing if (condition) { // The condition was true ..... } else { // The condition was false ..... } // Loop 10 times to do something for (int i = 0; i < 10; i++) { // Loop body } // This function is to do this void functionExample() { // Function body } ``` ## Naming Conventions ### Variables and Functions Please use `camelCase` for variable and function names. ### Classes and Interfaces Please use `PascalCase` for classes, interfaces, and structs. ### Constants Use uppercase with underscores between words. ## Documentation ### Language and Spelling To maintain consistency across the project's documentation, comments, and code, all written text must adhere to British English spelling conventions, not American English. This requirement applies to all aspects of the codebase, including variable names, comments, and documentation. For example, use "specialise" instead of "specialize", "colour" instead of "color", and "organise" instead of "organize". This standard ensures that the project maintains a cohesive and consistent linguistic style. ### Code Comments Please comment code at all levels. Use `//` for all line comments. Detail why a statement is needed, or what is expected to happen so future readers or contributors can read through the intent of the code with clarity. If fixing a 'bug', please add a link to the GitHub issue being addressed as a comment, for example: ```code ... // Before discarding change - does this ID still exist on OneDrive - as in IS this // potentially a --single-directory sync and the user 'moved' the file out of the 'sync-dir' to another OneDrive folder // This is a corner edge case - https://github.com/skilion/onedrive/issues/341 // What is the original local path for this ID in the database? Does it match 'syncFolderChildPath' if (itemdb.idInLocalDatabase(driveId, item["id"].str)){ // item is in the database string originalLocalPath = computeItemPath(driveId, item["id"].str); ... ``` All code should be clearly commented. ### Application Logging Output If making changes to any application logging output, please first discuss this either via direct communication or email. For reference, below are the available application logging output functions and examples: ```code // most used addLogEntry("Basic 'info' message", ["info"]); .... or just use addLogEntry("Basic 'info' message"); addLogEntry("Basic 'verbose' message", ["verbose"]); addLogEntry("Basic 'debug' message", ["debug"]); // GUI notify only addLogEntry("Basic 'notify' ONLY message and displayed in GUI if notifications are enabled", ["notify"]); // info and notify addLogEntry("Basic 'info and notify' message and displayed in GUI if notifications are enabled", ["info", "notify"]); // log file only addLogEntry("Information sent to the log file only, and only if logging to a file is enabled", ["logFileOnly"]); // Console only (session based upload|download) addLogEntry("Basic 'Console only with new line' message", ["consoleOnly"]); // Console only with no new line addLogEntry("Basic 'Console only with no new line' message", ["consoleOnlyNoNewLine"]); ``` ### Documentation Updates If the code changes any of the functionality that is documented, it is expected that any PR submission will also include updating the respective section of user documentation and/or man page as part of the code submission. ## Development Testing Whilst there are more modern D compilers available, ensuring client build compatibility with older platforms is a key requirement. The issue stems from Debian and Ubuntu LTS versions - such as Ubuntu 20.04. It's [ldc package](https://packages.ubuntu.com/focal/ldc) is only v1.20.1 , thus, this is the minimum version that all compilation needs to be tested against. The reason LDC v1.20.1 must be used, is that this is the version that is used to compile the packages presented at [OpenSuSE Build Service ](https://build.opensuse.org/package/show/home:npreining:debian-ubuntu-onedrive/onedrive) - which is where most Debian and Ubuntu users will install the client from. It is assumed here that you know how to download and install the correct LDC compiler for your platform. ## Submitting a PR When submitting a PR, please provide your testing evidence in the PR submission of what has been fixed, in the format of: ### Without PR ``` Application output that is doing whatever | or illustration of issue | illustration of bug ``` ### With PR ``` Application output that is doing whatever | or illustration of issue being fixed | illustration of bug being fixed ``` Please also include validation of compilation using the minimum LDC package version. To assist with your testing validation against the minimum LDC compiler version, a script as per below could assist you with this validation: ```bash #!/bin/bash PR= rm -rf ./onedrive-pr${PR} git clone https://github.com/abraunegg/onedrive.git onedrive-pr${PR} cd onedrive-pr${PR} git fetch origin pull/${PR}/head:pr${PR} git checkout pr${PR} # MIN LDC Version to compile # MIN Version for ARM / Compiling with LDC source ~/dlang/ldc-1.20.1/activate # Compile code with specific LDC version ./configure --enable-debug --enable-notifications; make clean; make; deactivate ./onedrive --version ``` ## References * D Language Official Style Guide: https://dlang.org/dstyle.html * British English spelling conventions: https://www.collinsdictionary.com/ onedrive-2.5.10/docs/docker.md000066400000000000000000000650711513710110600161370ustar00rootroot00000000000000# Run the OneDrive Client for Linux under Docker This client can be run as a Docker container, with 3 available container base options for you to choose from: | Container Base | Docker Tag | Description | i686 | x86_64 | ARMHF | AARCH64 | |----------------|-------------|----------------------------------------------------------------|:------:|:------:|:-----:|:-------:| | Alpine Linux | edge-alpine | Docker container based on Alpine 3.23 using 'master' |❌|✔|❌|✔| | Alpine Linux | alpine | Docker container based on Alpine 3.23 using latest release |❌|✔|❌|✔| | Debian | debian | Docker container based on Debian 13 using latest release |✔|✔|✔|✔| | Debian | edge | Docker container based on Debian 13 using 'master' |✔|✔|✔|✔| | Debian | edge-debian | Docker container based on Debian 13 using 'master' |✔|✔|✔|✔| | Debian | latest | Docker container based on Debian 13 using latest release |✔|✔|✔|✔| | Fedora | edge-fedora | Docker container based on Fedora 43 using 'master' |❌|✔|❌|✔| | Fedora | fedora | Docker container based on Fedora 43 using latest release |❌|✔|❌|✔| These containers offer a simple monitoring-mode service for the OneDrive Client for Linux. The instructions below have been validated on: * Fedora 40 The instructions below will utilise the 'edge' tag, however this can be substituted for any of the other docker tags such as 'latest' from the table above if desired. The 'edge' Docker Container will align closer to all documentation and features, where as 'latest' is the release version from a static point in time. The 'latest' tag however may contain bugs and/or issues that will have been fixed, and those fixes are contained in 'edge'. Additionally there are specific version release tags for each release. Refer to https://hub.docker.com/r/driveone/onedrive/tags for any other Docker tags you may be interested in. > [!NOTE] > The below instructions for docker has been tested and validated when logging into the system as an unprivileged user (non 'root' user). ## High Level Configuration Steps 1. Install 'docker' as per your distribution platform's instructions if not already installed. 2. Configure 'docker' to allow non-privileged users to run Docker commands 3. Disable 'SELinux' as per your distribution platform's instructions 4. Test 'docker' by running a test container without using `sudo` 5. Prepare the required docker volumes to store the configuration and data 6. Run the 'onedrive' container and perform authorisation 7. Running the 'onedrive' container under 'docker' ## Configuration Steps ### 1. Install 'docker' on your platform Install Docker for your system using the official instructions found at https://docs.docker.com/engine/install/. > [!CAUTION] > If you are using Ubuntu or any distribution based on Ubuntu, do not install Docker from your distribution's repositories, as they may contain obsolete versions. Instead, you must install Docker using the packages provided directly by Docker. ### 2. Configure 'docker' to allow non-privileged users to run Docker commands Read https://docs.docker.com/engine/install/linux-postinstall/ to configure the 'docker' user group with your user account to allow your non 'root' user to run 'docker' commands. ### 3. Disable SELinux on your platform In order to run the Docker container, SELinux must be disabled. Without doing this, when the application is authenticated in the steps below, the following error will be presented: ```text ERROR: The local file system returned an error with the following message: Error Message: /onedrive/conf/refresh_token: Permission denied The database cannot be opened. Please check the permissions of ~/.config/onedrive/items.sqlite3 ``` The only known work-around for the above problem at present is to disable SELinux. Please refer to your distribution platform's instructions on how to perform this step. * Fedora: https://docs.fedoraproject.org/en-US/quick-docs/selinux-changing-states-and-modes/#_disabling_selinux * Red Hat Enterprise Linux: https://access.redhat.com/solutions/3176 Post disabling SELinux and reboot your system, confirm that `getenforce` returns `Disabled`: ```text $ getenforce Disabled ``` If you are still experiencing permission issues despite disabling SELinux, please read https://www.redhat.com/sysadmin/container-permission-denied-errors ### 4. Test 'docker' on your platform Ensure that 'docker' is running as a system service, and is enabled to be activated on system reboot: ```bash sudo systemctl enable --now docker ``` Test that 'docker' is operational for your 'non-root' user, as per below: ```bash [alex@fedora-40-docker-host ~]$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 719385e32844: Pull complete Digest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ [alex@fedora-40-docker-host ~]$ ``` ### 5. Configure the required docker volumes The 'onedrive' Docker container requires 2 docker volumes to operate: * Config Volume * Data Volume The first volume is the configuration volume that stores all the applicable application configuration + current runtime state. In a non-containerised environment, this normally resides in `~/.config/onedrive` - in a containerised environment this is stored in the volume tagged as `/onedrive/conf` The second volume is the data volume, where all your data from Microsoft OneDrive is stored locally. This volume is mapped to an actual directory point on your local filesystem and this is stored in the volume tagged as `/onedrive/data` #### 5.1 Prepare the 'config' volume Create the 'config' volume with the following command: ```bash docker volume create onedrive_conf ``` This will create a docker volume labeled `onedrive_conf`, where all configuration of your onedrive account will be stored. You can add a custom config file in this location at a later point in time if required. #### 5.2 Prepare the 'data' volume Create the 'data' volume with the following command: ```bash docker volume create onedrive_data ``` This will create a docker volume labeled `onedrive_data` and will map to a path on your local filesystem. This is where your data from Microsoft OneDrive will be stored. Keep in mind that: * The owner of this specified folder must not be root * The owner of this specified folder must have permissions for its parent directory * Docker will attempt to change the permissions of the volume to the user the container is configured to run as > [!IMPORTANT] > Issues occur when this target folder is a mounted folder of an external system (NAS, SMB mount, USB Drive etc) as the 'mount' itself is owed by 'root'. If this is your use case, you *must* ensure your normal user can mount your desired target without having the target mounted by 'root'. If you do not fix this, your Docker container will fail to start with the following error message: > ```bash > ROOT level privileges prohibited! > ``` ### 6. First run of Docker container under docker and performing authorisation The 'onedrive' client within the container first needs to be authorised with your Microsoft account. This is achieved by initially running docker in interactive mode. Run the docker image with the commands below and make sure to change the value of `ONEDRIVE_DATA_DIR` to the actual onedrive data directory on your filesystem that you wish to use (e.g. `export ONEDRIVE_DATA_DIR="/home/abraunegg/OneDrive"`). > [!IMPORTANT] > The 'target' folder of `ONEDRIVE_DATA_DIR` must exist before running the docker container. The script below will create 'ONEDRIVE_DATA_DIR' so that it exists locally for the docker volume mapping to occur. It is also a requirement that the container be run using a non-root uid and gid, you must insert a non-root UID and GID (e.g.` export ONEDRIVE_UID=1000` and export `ONEDRIVE_GID=1000`). The script below will use `id` to evaluate your system environment to use the correct values. ```bash export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" export ONEDRIVE_UID=`id -u` export ONEDRIVE_GID=`id -g` mkdir -p ${ONEDRIVE_DATA_DIR} docker run -it --name onedrive -v onedrive_conf:/onedrive/conf \ -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" \ -e "ONEDRIVE_UID=${ONEDRIVE_UID}" \ -e "ONEDRIVE_GID=${ONEDRIVE_GID}" \ driveone/onedrive:edge ``` When the Docker container successfully starts: * You will be asked to open a specific link using your web browser * Login to your Microsoft Account and give the application the permission * After giving the permission, you will be redirected to a blank page * Copy the URI of the blank page into the application prompt to authorise the application Once the 'onedrive' application is authorised, the client will automatically start monitoring your `ONEDRIVE_DATA_DIR` for data changes to be uploaded to OneDrive. Files stored on OneDrive will be downloaded to this location. If the client is working as expected, you can detach from the container with CTRL+P, CTRL+Q. #### 6.1. Read-Only / Upload-Only Sync Scenarios If you are running the Docker container in upload-only mode and want to ensure that the OneDrive client cannot modify the original source files, the data directory must be mounted as read-only. This is controlled at the container mount level, not by ownership (chown) or permissions (chmod) inside the container. If this is your desired configuration, you must mount your 'ONEDRIVE_DATA_DIR' with read-only permissions to ensure your data source is immutable and cannot be changed. Augment the above script in the following manner: ```bash export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" export ONEDRIVE_UID=`id -u` export ONEDRIVE_GID=`id -g` mkdir -p ${ONEDRIVE_DATA_DIR} docker run -it --name onedrive -v onedrive_conf:/onedrive/conf \ -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:ro" \ -e "ONEDRIVE_UID=${ONEDRIVE_UID}" \ -e "ONEDRIVE_GID=${ONEDRIVE_GID}" \ -e ONEDRIVE_UPLOADONLY=1 \ driveone/onedrive:edge ``` > [!NOTE] > Essentially, any Docker command where you are mounting your 'ONEDRIVE_DATA_DIR', you need to append `:ro` to the `/onedrive/data` specification to ensure your data directory is mounted in Docker as read-only volume. ### 7. Running the 'onedrive' container under 'docker' #### 7.1 Check if the monitor service is running ```bash docker ps -f name=onedrive ``` #### 7.2 Show 'onedrive' runtime logs ```bash docker logs onedrive ``` #### 7.3 Stop running 'onedrive' container ```bash docker stop onedrive ``` #### 7.4 Start 'onedrive' container ```bash docker start onedrive ``` #### 7.5 Remove 'onedrive' container ```bash docker rm -f onedrive ``` ### Customising OneDrive Runtime Behaviour in Docker When running the OneDrive client inside Docker, the container **always starts** via `entrypoint.sh`, which ensures that the following arguments are added automatically: ``` --confdir /onedrive/conf --syncdir /onedrive/data ``` This design guarantees that: * Your configuration files persist in the `/onedrive/conf` volume. * Your synchronised data persists in the `/onedrive/data` volume. * The container behaves consistently across hosts, upgrades, and architectures. Because these arguments are always supplied, any `sync_dir` or `confdir` values defined in the configuration file are **overridden at runtime by design**. This avoids confusion and ensures predictable behaviour. These specific paths are the bind-mounts between container and host and should **not be changed manually**. #### Default Docker volume behaviour By default, Docker bind mounts and volumes are mounted read-write inside the container. This means that, unless explicitly restricted, the container process may create, modify, rename, or delete files within the mounted directory, subject to normal filesystem permissions. #### Using read-only mounts If you want to prevent the container from modifying the mounted data (for example, in upload-only or backup-style scenarios), the bind mount must be explicitly marked as read-only using the `:ro` mount option. A read-only mount enforces immutability at the container boundary and cannot be overridden from inside the container, regardless of ownership or permissions. ### Supported ways to customise runtime behaviour There are **two supported mechanisms** for adjusting how the client runs inside Docker: 1. **Docker environment variables** Many client options are exposed as environment variables in a reproducible way. For example: ```shell -e ONEDRIVE_DOWNLOADONLY=1 -e ONEDRIVE_SYNC_ONCE=1 -e ONEDRIVE_VERBOSE=1 ``` See the full list here: 👉 [Supported Docker environment variables](https://github.com/abraunegg/onedrive/blob/master/docs/docker.md#supported-docker-environment-variables) 2. **Configuration file inside `/onedrive/conf`** For permanent or advanced options not covered by environment variables, you can create or edit the client configuration file in the mounted config directory. Documentation: 👉 [Editing the running configuration and using a config file](https://github.com/abraunegg/onedrive/blob/master/docs/docker.md#editing-the-running-configuration-and-using-a-config-file) > [!IMPORTANT] > **Do not manually add `--syncdir` or `--confdir`** when overriding the container command. > > If you do: > > * You bypass the `entrypoint.sh` logic that manages UID/GID mapping, privilege dropping, and environment translation. > * You risk syncing data to the wrong location (`~/OneDrive` inside the container) or creating incorrect file ownership on the host. > > Instead: > > * Use existing **Docker environment variables** for controling specific application functionality. > * Use a **config file** and or 'sync_list' file inside `/onedrive/conf` for advanced configuration. ### How to use Docker-compose You can utilise `docker-compose` if available on your platform if you are able to use docker compose schemas > 3. In the following example it is assumed you have a `ONEDRIVE_DATA_DIR` environment variable and have already created the `onedrive_conf` volume. You can also use docker bind mounts for the configuration folder, e.g. `export ONEDRIVE_CONF="${HOME}/OneDriveConfig"`. ``` version: "3" services: onedrive: image: driveone/onedrive:edge restart: unless-stopped environment: - ONEDRIVE_UID=${PUID} - ONEDRIVE_GID=${PGID} volumes: - onedrive_conf:/onedrive/conf - ${ONEDRIVE_DATA_DIR}:/onedrive/data ``` > [!IMPORTANT] > Before you run the container using your compose file you must first authenticate the client following [step 6](https://github.com/abraunegg/onedrive/blob/master/docs/docker.md#6-first-run-of-docker-container-under-docker-and-performing-authorisation) above. > Failure to perform this step before running your container using your compose file will see your container detail that an invalid response uri was entered. ### Editing the running configuration and using a 'config' file The 'onedrive' client should run in default configuration, however you can change this default configuration by placing a custom config file in the `onedrive_conf` docker volume. First download the default config from [here](https://raw.githubusercontent.com/abraunegg/onedrive/master/config) Then put it into your onedrive_conf volume path, which can be found with: ```bash docker volume inspect onedrive_conf ``` Or you can map your own config folder to the config volume. Make sure to copy all files from the docker volume into your mapped folder first. The detailed document for the config can be found here: [Application Configuration Options for the OneDrive Client for Linux](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md) ### Syncing multiple accounts There are many ways to do this, the easiest is probably to do the following: 1. Create a second docker config volume (replace `Work` with your desired name): `docker volume create onedrive_conf_Work` 2. And start a second docker monitor container (again replace `Work` with your desired name): ``` export ONEDRIVE_DATA_DIR_WORK="/home/abraunegg/OneDriveWork" mkdir -p ${ONEDRIVE_DATA_DIR_WORK} docker run -it --restart unless-stopped --name onedrive_Work -v onedrive_conf_Work:/onedrive/conf -v "${ONEDRIVE_DATA_DIR_WORK}:/onedrive/data" driveone/onedrive:edge ``` ### Run or update the Docker container with one script If you are experienced with docker and onedrive, you can use the following script: ```bash # Update ONEDRIVE_DATA_DIR with correct OneDrive directory path ONEDRIVE_DATA_DIR="${HOME}/OneDrive" # Create directory if non-existent mkdir -p ${ONEDRIVE_DATA_DIR} firstRun='-d' docker pull driveone/onedrive:edge docker inspect onedrive_conf > /dev/null 2>&1 || { docker volume create onedrive_conf; firstRun='-it'; } docker inspect onedrive > /dev/null 2>&1 && docker rm -f onedrive docker run $firstRun --restart unless-stopped --name onedrive -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` ## Supported Docker Environment Variables | Variable | Purpose | Sample Value | | ---------------- | --------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------:| | ONEDRIVE_UID | UserID (UID) to run as | 1000 | | ONEDRIVE_GID | GroupID (GID) to run as | 1000 | | ONEDRIVE_VERBOSE | Controls "--verbose" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DEBUG | Controls "--verbose --verbose" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DEBUG_HTTPS | Controls "--debug-https" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_RESYNC | Controls "--resync" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DOWNLOADONLY | Controls "--download-only" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_CLEANUPLOCAL | Controls "--cleanup-local-files" to cleanup local files and folders if they are removed online. Default is 0 | 1 | | ONEDRIVE_UPLOADONLY | Controls "--upload-only" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_NOREMOTEDELETE | Controls "--no-remote-delete" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_LOGOUT | Controls "--logout" switch. Default is 0 | 1 | | ONEDRIVE_REAUTH | Controls "--reauth" switch. Default is 0 | 1 | | ONEDRIVE_AUTHFILES | Controls "--auth-files" option. Default is "" | Please read [CLI Option: --auth-files](./application-config-options.md#cli-option---auth-files) | | ONEDRIVE_AUTHRESPONSE | Controls "--auth-response" option. Default is "" | Please read [CLI Option: --auth-response](./application-config-options.md#cli-option---auth-response) | | ONEDRIVE_DISPLAY_CONFIG | Controls "--display-running-config" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_SINGLE_DIRECTORY | Controls "--single-directory" option. Default = "" | "mydir" | | ONEDRIVE_DRYRUN | Controls "--dry-run" option. Default is 0 | 1 | | ONEDRIVE_DISABLE_DOWNLOAD_VALIDATION | Controls "--disable-download-validation" option. Default is 0 | 1 | | ONEDRIVE_DISABLE_UPLOAD_VALIDATION | Controls "--disable-upload-validation" option. Default is 0 | 1 | | ONEDRIVE_SYNC_SHARED_FILES | Controls "--sync-shared-files" option. Default is 0 | 1 | | ONEDRIVE_RUNAS_ROOT | Controls if the Docker container should be run as the 'root' user instead of 'onedrive' user. Default is 0 | 1 | | ONEDRIVE_SYNC_ONCE | Controls if the Docker container should be run in Standalone Mode. It will use Monitor Mode otherwise. Default is 0 | 1 | | ONEDRIVE_FILE_FRAGMENT_SIZE | Controls the fragment size when uploading large files to Microsoft OneDrive. The value specified is in MB. Default is 10, Limit is 60 | 25 | | ONEDRIVE_THREADS | Controls the value for the number of worker threads used for parallel upload and download operations. Default is 8, Limit is 16 | 4 | ### Environment Variables Usage Examples **Verbose Output:** ```bash docker container run -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Debug Output:** ```bash docker container run -e ONEDRIVE_DEBUG=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a --resync:** ```bash docker container run -e ONEDRIVE_RESYNC=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a --resync and --verbose:** ```bash docker container run -e ONEDRIVE_RESYNC=1 -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a --logout:** ```bash docker container run -it -e ONEDRIVE_LOGOUT=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a --logout and re-authenticate:** ```bash docker container run -it -e ONEDRIVE_REAUTH=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a sync using ONEDRIVE_SINGLE_DIRECTORY:** ```bash docker container run -e ONEDRIVE_SINGLE_DIRECTORY="path/which/needs/to/be/synced" -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a sync specifying UID and GID:** ```bash docker container run -e ONEDRIVE_UID=9999 -e ONEDRIVE_GID=9999 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` > [!IMPORTANT] > Is using a Docker Environment Variable that requires you to specify a 'path' (ONEDRIVE_AUTHFILES, ONEDRIVE_AUTHRESPONSE, ONEDRIVE_SINGLE_DIRECTORY), the placement of quotes around the path is critically important. > > Please ensure you are formatting the option correctly: >``` > -e OPTION="path/which/needs/to/be/synced" >``` > Please also ensure that the path specified complies with the actual application usage argument. Please read the relevant config option advice in the [CLI Option Documentation](./application-config-options.md) ## Building a custom Docker image ### Build Environment Requirements * Build environment must have at least 1GB of memory & 2GB swap space You can validate your build environment memory status with the following command: ```text cat /proc/meminfo | grep -E 'MemFree|Swap' ``` This should result in the following similar output: ```text MemFree: 3704644 kB SwapCached: 0 kB SwapTotal: 8117244 kB SwapFree: 8117244 kB ``` If you do not have enough swap space, you can use the following script to dynamically allocate a swapfile for building the Docker container: ```bash cd /var sudo fallocate -l 1.5G swapfile sudo chmod 600 swapfile sudo mkswap swapfile sudo swapon swapfile # make swap permanent sudo nano /etc/fstab # add "/swapfile swap swap defaults 0 0" at the end of file # check it has been assigned swapon -s free -h ``` If you are running a Raspberry Pi, you will need to edit your system configuration to increase your swapfile: * Modify the file `/etc/dphys-swapfile` and edit the `CONF_SWAPSIZE`, for example: `CONF_SWAPSIZE=2048`. > [!IMPORTANT] > A reboot of your Raspberry Pi is required to make this change effective. ### Building and running a custom Docker image You can also build your own image instead of pulling the one from [hub.docker.com](https://hub.docker.com/r/driveone/onedrive): ```bash git clone https://github.com/abraunegg/onedrive cd onedrive docker build . -t local-onedrive -f contrib/docker/Dockerfile docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive:latest ``` There are alternate, smaller images available by using `Dockerfile-debian` or `Dockerfile-alpine`. These [multi-stage builder pattern](https://docs.docker.com/develop/develop-images/multistage-build/) Dockerfiles require Docker version at least 17.05. ### How to build and run a custom Docker image based on Debian ``` bash docker build . -t local-onedrive-debian -f contrib/docker/Dockerfile-debian docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-debian:latest ``` ### How to build and run a custom Docker image based on Alpine Linux ``` bash docker build . -t local-onedrive-alpine -f contrib/docker/Dockerfile-alpine docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-alpine:latest ``` ### How to build and run a custom Docker image for ARMHF (Raspberry Pi) Compatible with: * Raspberry Pi * Raspberry Pi 2 * Raspberry Pi Zero * Raspberry Pi 3 * Raspberry Pi 4 ``` bash docker build . -t local-onedrive-armhf -f contrib/docker/Dockerfile-debian docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-armhf:latest ``` ### How to build and run a custom Docker image for AARCH64 Platforms ``` bash docker build . -t local-onedrive-aarch64 -f contrib/docker/Dockerfile-debian docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-aarch64:latest ``` ### How to support double-byte languages In some geographic regions, you may need to change and/or update the locale specification of the Docker container to better support the local language used for your local filesystem. To do this, follow the example below: ``` FROM driveone/onedrive ENV DEBIAN_FRONTEND noninteractive RUN apt-get update RUN apt-get install -y locales RUN echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \ locale-gen ja_JP.UTF-8 && \ dpkg-reconfigure locales && \ /usr/sbin/update-locale LANG=ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 ``` The above example changes the Docker container to support Japanese. To support your local language, change `ja_JP.UTF-8` to the required entry. onedrive-2.5.10/docs/images/000077500000000000000000000000001513710110600156025ustar00rootroot00000000000000onedrive-2.5.10/docs/images/SharedLibraries.jpg000066400000000000000000000417461513710110600213630ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex5959 2020:11:29 10:02:472020:11:29 10:02:47Alex http://ns.adobe.com/xap/1.0/ 2020-11-29T10:02:47.593Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************W" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?͏z/G_(3O͏z/G_( ?6?l̢4TyE2c}Q=(O͏z/G_( ?6?l̢4TyE2c}Q=(O͏z/G_( ?6?l̢4TyE2c}Q=(O͏z/SKnZZGZG=yE>bG=ZMԣXk[SYWji ՙyŇ5:.ZxAn]FFvMv;确7~%Ҽ/Zw6C*x]T,DGPH5+NRܾ.ӞR~o1gq5,jX>=ںprSaeesug,1!T3L@OR@#Pz):Y]W+.kCM2wS`06 <%$QX5Gni k:*3uԫ|],x^5kyK {+මo, c%NICr}HMcOi_]R_5mZL 2XyT7ّIUc v("oIIau7Prռ'mqgc>ofV̶)ܜBQI 9#^ug%@2 F(QIr(0((((((-#[f֖-?ր4b (9*أoΏGߝ!bտ:>~tJ([Q@W}Q sCAGN^~([ TU߱Gߝbտ:E]~([ TU߱Gߝbտ:E]~([ TU߱Gߝbտ:E]~([ TU߱Gߝbտ:E]~([ TU߱Gߝbտ:ZZGZQW,aXw8hQLAEP Ïm(>V3))m`x|7u+ yyo43t27M7) Uaֵdu η|@wE00#af%@浨 ›^e+*{mqgsR22:uhG+i{-xG$f7Krq>bH%I<~ʟEbFx^.&EnX 2O9裥N+oeq]1bm;HB8r;G=GSڬjΡg^|BNz ~rwnvt[V-^;Y:;-g+0db|cpv:\ڢssm <,™Jpv[ִu+9mA#h|Cm hX,،@  }jKkK⿼ԬǕq,걾FFF(CEXF#Q<Ѐp"97glEPEPEPEPEPEPEPV-b ( KfxE.x]cީ)',@ uP mHd@jp%` $>TϔV+{KMՖq\-U*9g$cnyt=M},r:^xu.\i$;X{Xψ-n [nEv#8*H=8(iokGq3fqK[yS[VhI_8 3Y闺Dbf 1IJyQ 6I4[lݶK{*[c!By$d}Mԣ?gV0Am4HlUSi%֣Oִ^X.dBְA,gK1j;o &x:dSBW ~RWkXZ4-rI3|ݖv%qD/Kus~#ԵMB8`s].[!QL8`焘jzqˋ})Qc}YN{+xo,EEw#jS٥Vq# #=Ns[x5}6ORZ߶&4Fx.f6۷ctW7j[mq́m7#D4;HpI矩'ėZEyz-VxU QI\е/oGmEq񻾓fW5춿o*¯:ƇFB=Ns[:w"lntFXxs$WUFy oQ\xOZkB;ӞĦXeܹ r (+=OVmIa W@ywͽ1`uW3'l`U9s<v8 [W-ygm5>s B0pHؑ@EQEQEQEQEQEUo*X/€'))1-B j:m&Vb"I* @e]%},r3,~ߟQϳϷJm׭598Kǟ"a弻 n<K6r y~9OMF`XђAR3H| ֑Ϧi*Kg,pdhŠ}n74 4/#5^zlMWnu 5ݜo]RPwlc^+o տS%ͽεצۭGy<" c$p,%} Qv{;[tO-pܼ##?u4Qu*JРZHU '[< o]k2[O$7Ж*NI <몢nr0x h 7u2EX$E cӭn@д+]5n$I'S8gv ѢQEQEQEQEQEQEUo*X/€')(E+3$-Ө@w`2rZ߉Ì ̯2}4WW]oP%N@k`~?*:8?#>+=ࢊ((((((((((Uzm_OESQE!lu3@k]_Gϗ|y.I.٧{yk dqWr w5յ/?B3vb&չѐ 6-ƣj,-8FJ!y9/k-31/&TXT+}Z{q<qoyBꮜ*FNcVƿwj7W$kh%t[1KpPڰM(j~$ףоѨ3BگM.ya @vna4k1tTYdTPZF'ըl$-N(pJOt' f7+i%<gCIV]մFUf'R 8,t;bMIhG#Bdf%}dK? iL@mG +d}КL=#Z*r*?#'9ͫY [$4G2:*im.; l]<2Ȗi6g,<`ԳxMxfgYFi_~#hFsic͂\Y,n/&X8w۝ 7/ n YD5MȬr>RA6H.I$yYc$]n6qlh_=2j(Q@Q@Q@X/«Ջo(z(( 呞MOwcfBI'\cQFQpcL~Ze(.”#-F4 SzR+ǣir>Zz'?r|QESpYL~gi*Ί((((((((((([Uŷ~=QLAEP ʾvۜgf~×y?˜c֫P>ѵFPv[&CZZ6ueCm:bhNcbvl?}B$.u:/H4cHj?` }<ߜg>Y]&ڝkohMFylk&z~"UxFSPD(wdkVUZҮ or!Hf|[[-XxC43ǩdIe@p{siV0^j6g$Ik#KҼk&Ү&ZP,~n8llɦmQ; cw|}߻|OU݊uWzΗaڕ<7ndzӡt-e>#ef_Jš4X9vV>fz}ܞJOCkgk%J\##|zׯ_޿n{O)CO^TR[ W!94zq[jVFitf c Yv:XSԖT7fp"0&O(?11rjƋ.8[ Zk6[IR ~fʉ!8hv1_#K+`e%ëb85-dxjK=6C8Ygo`c8k^PQE ((((*ŷ~^[@EQHFz8 5X7wbS?)gpHmW'Y֟Oz|˻mzEP ((((((((((Uzm_OESQEBK#9ctK~?krx[Eq 5ÑV,tgc+h9zbק>SZ4-r;51mmv̠6v(yK9#&l;vfQNt"*NlH0 vCz ^6-ii6ҟ.9r##<mmpz+[(Ɲ-.nRI6ܦqq"g;GfrNrvj?v#%CE(C"!l4p:+$ֵxfc>fp>ltl=[1-2:;6;z)_+}fktw%ԖO퉉&)gn:ugK5^]6KH*7B~Bp3Z kkED{T+=© PQ@Q@Q@Q@Q@X/«Ջo(z(( }Yh;[4UW:ɐc瞾MXNB%ZYYJvAWj_Ͷj9k%Rv,@?  ʓU;!vI$Nz֭74ᕯٙ)Fp%RxyEڭ ;Ay?X ( ( ( ( ( m_WPQE1!~ERQEQEc6]M7. 9渺0 #8 NўMEa9$6hS[hזts*?.s G]YKymk|Y#<8zs-]Iv<{//tcqs @2 EYM1^ZAjm;.URM У'[UK[Nom$eF N:F]5wO˜ Ùw,Tu}6-n"k: m1&26.̻tVcuK1)so&`o5`p~oܜqIg +ϒy| N ڎI ?jQT4Ȧ)uDguqFx#$McصGݳYԦMir>e{\EUSE}luJq~ujO`) (*ŷ~^[@EQEP) (+:EM}O$Oр\F w *+(ooFɨrV$Ia=Oe-pj{ 2/~Ÿ$#oPI:ŠUkv?twi:iגmu4ͫAz Ego֝wjk F18]JiTk!kAȒ1{7`|4o%=q5SZE^3#2vaЌrxvRڵIu9OH =oQ5XCN]ou_ #ثo?}*^ׯk FZ{K@jd.0YwVۻ+>C9WKh<ˆ# "dm<xkq)_^O֗B;(EQEQEQEQEQEQEQEQEQEQEQEQEb ( 袊b (?onedrive-2.5.10/docs/images/add_shared_file_shortcut.png000066400000000000000000001063671513710110600233350ustar00rootroot00000000000000PNG  IHDRqB6sRGBgAMA a pHYsodIDATx^m}yp/׻q:cmkmx/|k*m#6ezX >DeX"=N!@֚(:`$ab8W̮̬'gMstt+jjS[a;Kyj=X=ȩ@rd[jӪSgږi;ܟvX_rj+lSB 65:_S[Um-S)MOryItLm4W]s*E{t.wڋm=mBu+6M.쪶|ݛߢ]8Uզ*KBX˩M5/ 9b.T%D]or[av8mL2eZi_Cm%7 Jn봇yjm;ZɅm/VUj]rkw9%7׃ T7 6nVUFzqB{yaU-AKm3^*]iRY4-_gc1],h/t]8UwJFu&?j[Le_m[Um*W]NmJniVvJ^ڃڪjSJ{ [rS>詭MUT]NmU%o.bANmmj˾jVU=.ir=mjT:ҥdjJz+4]^Nn;V-ϦnXN 9V%QɅ_b**m۪jSУNVU. 9bXv8ZT쉵Oe]éqkU/ю9/ycP=ȩM 7ڪjSTU=.l)S7uVn %^\875;YyˋzڶNr[v~Q{Knh/BAd*iמ T㺸 S[a 5]Nmm}/h7MXE/egE;>>4=W͔)SLcm/tz(aX*VU~ڣ4UՎV¯VUvfᬚ{0b 5SJߖG.^ֽΟ{'(VغU4wI_YPs/ϛ]S,Ưbx̤|; `E(!P +XJـtO͙]S,|(0P2rm3c(-^0y;s^2ZyS%IMX0ˠԢzu jnu{~ǯ_&J j&{0 74bBa{5?&c'沓S[%_ڢֵ4^H-ciзڱ!_(K, +Yg"Yw&d}95}S]re@)vͮn l?꽔1T&PJgO_??{Y͝{M-ҍɲVRś*E+Sۣ$WdM7<͡_7_ _-x73}3xʴcJy+|l~{S>em7w 87qW\~xY5}s2uiEkx7vsg& ' InG_hv}rܦ6cA5{~QEs"QYuj76ޓlwdՊÛjgQ0}g?c:w{u U =d&=X@IB3(ԑH)5)'S7XrWidcp.]?>.o? ɼHHuU7+ǝyɼPjM-^k=.- Asy˽»V;PyrGMg"7TʅI:P J| _?{.xzlk<{ ߧf_\m ApG_ 5.KM~G=FI7<n^{迯q#UŹ1L\`:1$,'~^}-˷XCտuvuUdfr~_v(e~{4_Nz۲c7a7d$%;SRv-%7OmǶtFa{Cyc{M\'kͿ1w~DžH_IOdIDkZ5Qk;w GO{.kGx\oזfSmNoW7gY23*Ѷ _7}ۇ߷9m^~Ip/%aҿkԁi;\l۰$\LG*0Ɔ"v fdyQ$1_II[ y܃O|+%i'=$@.هJױu$wS׬>9^wz:s'!{^wwe9g?VDoV]}~sY>~ misgoលڰmwG~lcwivsG܅˙M}K^æٟ},Eϟ=wp=o1=-8W6c(yUS}I}oWGǍݪ$"4{u/8 '\~a"|m*}C6H֜[2A5'7k{imjC_z)=J~`|7:{`\qDmFT=GSSzLo_U۹f HPi;;Iޤd~箿a|fA,(_?l:f u͕2Nh M:!KY0qAS£ܼ15@II:tjF=n$ϨY=ſSk1]Ou~ƕ\\yܢ璪"ɏTMkhs9egmۉZ?wN%m'KnۊS5_zM_m+*CT*n=JRwc(I?/C'.ѩ_6 W/t{7Wz/݊c7e=Nutj#jNk&o"}f#|Y}Kk*e]7]t\Z[,o_ߌfߗM,T[W䜯}uA$boתo= o^~B! ~Wר(Da`%xJA@S(IFr,gߥRqN}<(IO+y>աSM/Nz}@5鯓kR^˲5ncx C\s?j 'UmC6%<<R=E?oku~59XcWsv(>}~൩_Wǚ۶͗=^~k\PPhݺǒyvy߁R/T,*SK:rK{&fR/sᄀ olwjruɹ p %)z* ^-:2?\?6 CD5iVxq?FXPP$pqۇQkkԡC|pݰ]T obA̳J,d1%[:2O?=dWu $Mnhч,>?f6y5k/8\^;Psw%*T{wTPn}97!Ǘu4.a;QoSWp~.ϻ=% =ܸ.ws us1©+)6ATJ!%ҿ\7 /<r~Z/'ɹJs 6F!{>.&}0h+o#7Cװ/ ]>Z2o"yS'=o(q_9o&bo(v̦V{;wNXPPPhbbz9o J•^bB7豽l"Af[N>Y r|-ρ^y>r#8Z2Lk\u٤3w})?+y.?;ß =A\_nP.O#ܗ9o{嵯9AKg?,nS-rM^s1~wnbqmF+\sߕ<qym^;(xm[}rO:.;1W^# H e_OA[]?y/0,_Qbze:t-cx\Y}ނ?|P79L޼7mEf9fdμNmPsgK U j#}I뼶7x1-7׈}<$7ۋGaj:b{^Ө/cVZm[{n{{{V(TPu&c9d٧X ir =A@JTJmeHʞo|m bDHרk&2LrzBR5]3Ϊώ޲C\Uffg->џ%Jj?s++c&ywjN5ɚ],(_\ש6RPA$t]ԺV u|kAL] ]G_?CC Sv;5ΛEXЪr{kԽnPݳ׿^e:djo?XPP^>\2j HfP|G=BP0V:}F8Pda`*1v8+UU v֍}w_=v~x[| ;&K~=u#V }ڽ;Ojj9̨-dž:;6U{X)Zd11_yc(ٿy%J x =b5t1JJiPX A O+J X1.^ PtJ0b8C?=`t˜*lMXIES䎡tC0XӤNz(]8롴x&+oIC%(J_9N%fL>MQrhCI=N}Ĭ=`R5е).=.K/@ :P(;w0b7Ro6EQ+\kS P:wZ8}Fͫ'g'xc*A׷zWoz7(Zkн&c@R:6>rӴKoz`sՙsꕹt`NS0qސڞrzUꫯ+W .Q%ע\rm5jWW=l/% Ο4;N?}IPQވʍ|x˗ko\<嚔kSQVchV0IRJ??vY5?=:quŗԉ'y#|^r*7BnZ /FZk6[ Nz(Id{)9sV2ꥣԋ/Q/x$Yv0J0Iz9h *'ת\rڞJJ__yTEdpn;:T:Qu$c+]8A~u7R6LS7~Na>hCI*KɎ$}KN{*yzϽ?wX=w:t9u٤:x0.TL ynWقv#\v85j-fRO=zOgSO>c~%O$5| k:Lqkד한ڪjSEQ~?t5m5mR:R*סR҉Y= KK=|R2Y~(X^Ӷpj۲#Xl`u[o. T ۣP=g/'UQSDB=\O?\rm?sX=#u/Գf9}fM=Ng:j3eקmôߟ_iں-SI /z*ɘJ'Ov ,_;z%0 ANmUkyjm;Zlrj+lS녂vS[a:ٶÇzs^P`i߾'#0z}[t'ldGmLfӮ/i??Gii%[dvVҽΞ7ӹ|-935<ն5ۃڪjS:W\ 6S[Um:]Ю3=Yr C¥'ԱN*DW䚖I\s5/5 ^ɩ6EQ5mw55c(]ɏ{Tն=z=.J||0XK2M)VGrzf{S[vr;`s5.ʺڶګlڪjtY1ҀIB%kIz)_0zANIҫhnzEi\L7=]^hOmu|4ۯl26pzAU<-MUim5mwoP~m$ǒ'ΝWgϞUgΜ(ӧ+/fggձcԡC| er ˵,״\r˵.׼\ EQEQnT5Huv*Οyo`hh~[[믿⢾0kYik]y{L.^+y~Jx#Pm1XI1|,ⶄI/_60Pz7իW[Jo{u߬֯_խeJrm5N覇3f&LT(͙5kz-.ա>GՒ`&Pm$괋2| 0z:vwVoޥ>ZfuW'0+sKw6lؠ=j4s]w-!~{r#Pm l /7%S(---/(¢nϩz.Y҃U_͛7}CjfnFB}JϢ@ Fa&P0c(ec5#)֖I0(PTs[CIs%~>_AQCH /M(=p^^FvYǑ̓^L?H܀)(rOJ.F*C)Jmy](aᑜ ~b!lStdVǐ>XNJP:{=`z$<cOQ(rEۺdzd̓lX J-3;NmϣH[Ou7m( m$qå04rveAO@Iv?f \yrrr#PmCiMm% od$) D(H* drL{2B%%VJۨN;6%P6mb?,ة(Ho@ +@ 51`C$k7J2OB' 4 ,s?fua@[f %g Fc&SPqy![6]43jz:ꐙѽX;%V7=C JR㛽^;uu߫o Ղ@ z -S%m|NB+0jDb %@jՌ@ ePc#5C)&PF7%V=1zm3@iAMߴV]{f5&׮U;LF0JuoTݳ[ [Ս_kZ3Uz 7֊7krihدi5C=&9LCIzɴi;6]RR]^25%@ oJM[Mj6u;ymP;O*,ۢ66sh]S;xxZMnڙ;J@C(a0Rc&P 5kkջ>W]5K %`(5Upy*{Zuͭ vL$7j@ɼn罧kSNGcF:"P1c(Ta %CiuGk֮S?@iQsz\Ϛenu N/\7mO_UWަ&6ת~5$tϼ z}0*?nM7oW.Pַ~򓟘0lhm6uugF=^w&k5n['P{|Qy+߮ޛlaqߩ6t;(-H뷨(ͨm]_TͅW)7]GI֩nْl3nzq#&պ=ju%`(5U(J--_1iߨJ/&ޚUӲ6 Oo=uPvw>Q7ܺMz:ת wͨ3MW j-j}dž?6ZiZ4V{ےs}>gmW>0x?^0\zuPmfjxURrx׷LTSqdX@Wzc(SmT@)a~GF(n懕s fN'N~x쯯c[s=gdd,u^Jx#Pjn>[ꚵR[6 fqz~Hn*?~QWtw|O&4 ߑ^Qz(MMMiw]|Y}U0s* :J>{83 @ݮnpJ jө P;Mwmp*K?~\}̽?'?Ic(5J2'z98/ڦnp=i7\1ɿ!IIg֏T2o*XFT}5jFz#˿Kj?) "ZlWQԵX}Mu{ϙ;Epd$G>/T*uTt?gd4uO1wܫ{0qClp}yXJvldjL%]9w? ڄڲoV-_TWP(t;l/_ 0 P(@M8]K{Wӽ%|s4o>"cKݾZs;ޤ_>=#Jړn -..&!u3w9 ת-up LԌLj* Ch̤ t4aŬfBm{zA->o,=֩c&s۝_IE"PRS}-?3n5F;[E3VJ{|FnF>:Ψg-_PGަ6?ݮ˟:7c]YޱUGN=KYT { |tVydKr>rS,PgtcgϪ?? ~0iUuLo"GmY5}(]n%?3vMI(NK[mw~wxOo %]$ӰtUJ#_r.S8bRN.l@)!ԆMsԉ'K/dZ@;^]mj#~j>~tݦr̪1>P"܇I+%I*(U\eiudCm۶]v0iM%Tz'k`XTue-'}m-f (s-438w0Rw?0 @ oJ6*V{N@ @Wޚ(h#P#j0PS@ F0` wͯL-?2tr vlJ@ oJ-P(@ eQ1m%mJx#Pm{( J0FڪC)6%`(C C7%V;RU)AJΝS?S /5,%VJ Iww:x?Cϛ9hr vlJmĄ_{^RXқK_pYѣGՆ ߿,{W59?#Pm1 g;{LP*ۮ]͛M'adCICO|z@)|\@%VJ ` *P S:vY#_=ƑeH"(=N ` *PWm%F›~WZ2>>d|lP®ng~,@)vx cWw׳ YOֿX6mBڪC) ۧ>Ǒ//Up# e\Jy qrȀIVLoB.s\tחr"ٟ].ω{>@ Jz)}H=8&vmСCjǎfbt lp"ukWupn0c2YGu.##%'W1 cuU.{J1iH `D~6783<&''k*q̗I;pW?YOz sp{:=.'캖,r7!mc4( (ɛ(j4KLΝ?O>ɓ'Çͯ$(|@Ժ^{5_1rE/|-c$(M%4=F,y7y\9XҶ;n\̋#F\r-5-׶\rk^ EQEQC =>炪Т. D±Y rCrױcM/]^y0zڕkXe-8h1l6@iaaAO&PCxj{$ګ)Pzt^5uji'.E˗ٳguG]Z. {(TwN? 힑daDŽZi&i[+JR6Pzԕ+Wԅ zcv 4ZkJz'Puz(8g% %۞:uJsWtv 1TPIn6e^]>*#=fggM)'ת\r5,ײ\rm@^UC),CR=v[ ʗG"T"*#=d'N/ #FZkV]q7WJm#o qɓ'̜AYP7UkښP'l1)[gbG6/77& o!9F6y];V76*9u&L0P ?&9w:}t9&7r )kQI6kUYvÏ(JAN koS:T:v%3k&pCd3D/@ݗLz0) cNy3@%8W,N%ցMzaQ3硓8< X6P{T%=׃ ^~e}K/#G_|Q /@Q2kQI6m$׬\r In6Pci@={ۇkXKZ@ ?yd_z)8!T$h7+_`c`lo {)ٱl$VWn`WBQkQI6m䎝D$Fc(IaJ>H#fP|+Xz6&P*x,do_ǠE0D>f`p@I$flty}*l$%){5(ע\rm0IYw줰wb pzmv(E{ϤaG<%aG@I[ƄrA#vE{~=Jo2.,I_%(Lךl$צ[&; 1Z@^{d%˫}ڱ7(Cɕ/89:( ЀA7E|Va%)){5(ע\rmڏIRͩ]׫;LJO0!k<~5~*΍.ۯWmm$*>V.1Y7=<0S56hJ^AH(h(%t=i2;X eyV~YѾJQ(ئsyJa$`XX0ْ[Sf?#Ira(B #6]g?({Y yvN9ɇ|P*;d== NheZ3ۆ޹5/"q~\Ҽ,y]Ccj浾\U 1:Cz(A}D0\Q{sj%7\rR5]{tUF}i˻IԡsS ~P1_o4co^$\߮;\rM][=~7~;փ'@)< qNrM֛>FsCl{1r}Eu\^k-xo.k=|+1ZȽ!roVmYbdxݢF/ ϔdʍhι%PQkQ"]Ku6Pcg땿> 0| P=eJE%.vJQpU1}ػ o4+ބCl*Sn}R9('tǞD,dpǭ!PQyqk:z}̺N  %[=Pj@ R5 oȕՙHo4܄J͓uP&<ϴߤ~1RKwmݢL+W}J.P*c:}J) r&A6jh1J={<{uY?yQ>V'c,Pʂ +)8ӽbQuAd1۶GR\m* c$De=GymfVdHaiF$P5N@I4z@0a %4C8jL W0R|LvlJ0C 0c(-UTp pj+i@鮭[Ғi5#ҽQfΨQk'r?}jMj46i10CC K=uꔺ#P`\=²=v)Rsv[ ʗ T"P`\PJK1c@9w[*g?'ۦ乌m#>߲o/4-sJԝn '0 Ԩ Q*'94F;ȱsU&xTϹcd< WZ~tx$"Kl>mP=ꌑT5%PβJўFi0 Ķl9e_ZKZ@)nz.fv9v<"z9 :+ݏ=P/CsZ%6X@,zH |i/7hI{dA5rM$xi"'疴{}MyyK/Xs֏!_J rC1"aJ)8?^|>hjNڸ^m9gV:i[c9,Svn}8]_~Sۥ6&F~xl< 5P?QY6u}mUjy%aB$+ Dv_{֤aY`&:yN/4J?/YX7M9 XǙ3_z˜`;g??{t8&HQ8Y@žXc*@ǮGnܨ6nܥb{=&~J}FuJg+ 1:m(EBw&I8Tyz{9Vg {ȱ|  /fjkF)z(!թ:C\/]~"me+ >Q$NʽLL&z?< Í]jt N,IbLz[8*nR9@a s?^kfu ;u| ㊄uegkS3eJ%([T}=1~rpA}}zn0_awC bN?`h޼I]w!Ѯ=uPR/Μ~T~H/s'+ AzgJIo2F487~oGƁRcUv^s<9͙O4)g-bۻZK_5^2㯼 >7ϩ>/J#>A%a +72ϻA o4+ܨ&Pwl[Mq<2cv#~Q(% 9wwJ#*|-`'zp޵^m%;v^@ Ç1D3w?6wX-Od޺u̟jJ( f*ލdxY\Lٰ# Trݧ{vw:Byd({]z 5>rײe֕u _W^r⯼ Z\\R<~ԡҥKKznmQ0A+Yw3߻h' Û'묷LxiۿIygnNrJ9Cj~. Ux~{~SJ#*(zdYu\(MΩڲR^C1VS$ܱszG}t:1wQ ׫J(~3QeBEɅ~ʘ$Oϡ9O]S~",g@Ǒ{帑`_nk _Ck̻΂V~?wu_W5k@ çJvV[$%/\_KW^;s|"P@DmCV~j wQYnD_MUi5(_y+{  Jc=kf$Gp|hXҏ?@[JH{{;EXמ3[7CD鿇ԸJE. *gCp8f֕B)Xvsá4٥vUM*%7D CxJԝP {B^~d(Qe=أf}O:LYAWR.q>{ł@I+J ?ȴCV~j Frsٶ4%2eҏ[mm#=Qoϒ@;:%_y+(` nJJvRJJS%Jh$CiIu1*d+Ҿ䶓 JJ c(CV؎a /^((((Zs%aC `|PT&P_-Po(/P@#74| )%E%4Jhd͕QgJ0ԥ6j1|@ `|u7M0+ohJa;RJJzt^5uO->m0Cə@鮭[Ғi5#ҽQf ,֪}9I5c0M7M'`0 LWk$PdSN{JZ1njC"d+lGRE@9Iw V`\CVMԜ N IfdokĎ:0sBM tK! @PDZ áxp$kw_>#!\ĂDM%/w}1?%y.@)=܊nZsY}jPШJ~M'y6(19VǁR㋜G@sq`ZsFq? JoRțf$$P#@#n,78-cy$,̰5Pه==ƪ@)Qu<^{#L&@IJ{ !8$FuIȲQ8X@qa\.EC8g)蠨}nRS#稗m_-n(܏p̤6R,0S<[Yn4u 4Ƒִ VK_^t:@"v5neM~ }<>:E4NdM:CcOHN"=fV\O'Sιy  ݶn0%M sHod]+'Yfo}< ]Gr3a=\cop=!Q,vNT6Ynyw,yem癭k3}=u\Wu5`"~x}b?H{5J'o}aGO̫\_߸i^[7W ܏&4$Pǹsæ,sjuFl? O:%܄e޾E,pfMorve7z>x8=ķ鱡Pȯ{e7׻}"[5ȫQ]g0᯼ vUzueCzO>YYn4yX,z&3 LBf~Flxٍ1 3mϱĎ [J) b|k:"Pmyk4}=PCq䵓b ,$<{c{{(ۏ<^[PPX›9aLn6sDQ 7`Xn;-8[WS~_1Ɏ?ȍ ct^8e]| / K D^/>z Dz5螇-_+JRܐ}{\8|F}gԦ{wTݺ)5}[WW)%a̕>}ػ o4+ 6b7<hc78r(8^x#f>v܄w`qƢ`ąk]eAFd}ueX(-v+1©k&~~'utҒ^n[TnD0 7s~PJn$7IDnBu w&ym&U3+n޽mppXbDw\.}ɲ8Pz -WkX~PC=w?wݣN]ꠇ0pCnmPŸxD;E~ od]/H]QMmM09;k*ُ{>sm9}9ٟw.c )s |-];Q:YbՕGg[5]kNʾ 0|JN#T՘Iy %)/i~Z^Wܙaj(d%~]wT*(WS u%WiҞ<J"q~aQY6u R;ocٻ6⟁j~dFэb >|CC(Vw>((0l{(jC >>AlHL޺`p\(%˹wsn8>îٿIłxHATz(uh%P {B^V'c,Pʂ +)8ӽbQuAdJz(٪6Rnc{, s(P?d+l'E0C DPڑb %ՋJh16T5FRQN WI%[ugm%JI(/P@#1vT"P_P@#ݏ%Px"EQEQEQEQ=H~ H)*dy@ `|u?RRJ1H~ 1l(/z(PJJJh$?RRUc$vє@ `|PռM0ꏡd+lG@ `|1ɏ#U4-%EݻWMS O=c(S[j ںE---V3*ݻ5??o挾MkĎ}jMjGԒBmO:+z:kEH)R=v[ ʗ"T"P`PռMT NEP#(DG*_oyȶ[Y%[a;REc*"PjgLÜg}d,];@ՁRA"7j(aU[Pji%7_? v"2v <JG#tVP pj+l'EβJ:Rw%K΍[?~5cΒGz`*ۏfYbV7챀0J 3u,D?7&`'C%|ӌ?jSRf17 Y6]+"R˂4 5:CnHiTȾ@Jg{ƍT(aY4 t`ĭ {IUdESv(XЙ  ǡC7]H' 碷RSE5%S%=l5o@c{d[kkc{]Jy%\'PlkKK^GX"@_'%˦ HuTv?[_׵ :15s0+XP#EvTc'+U7n“[i7ܸ{nvK$KgM/\'9:ʯWS+NJ 0w@I'=7Vc(D% T4n:eye#61poÀ'1=)bTvC7:Fu^bۻGHV0|JvREc(1unݰTQ}v$FWߨyZ}sp{x,os&(j\:T SA􎝭WuõCĂƲ &A ]ykK{@EnJ}7qwRԮ^$I2 v@=vFd}uK_ c(S[a;)z(C0lbRz&띛pyfS}J~cXO֊PtlpGnrQ;Y5&kJ~ s;k^. z(D%sK I\bn$*Y쭷u*w4eE9}7Gkr ιx~I_Gho]]~Ty=l{˂׿V0|քꎙT4R;J`PռME"Tɿzr1pEQ. d)z(3@IfM2Ey94⟁h1Z"P4%MCP*j(3@TΆ4`qz4>6  d`9w@::CilnKX0)>~ӢrvR)T(`,c^OAx R;(I/tbzQ_Rzl0&*H[JM?CnQKKKޕ+W>%(1No>9YH~Du F[5a"c&MWSg#GQ5{^#oqBNS(}eA bA:P  FR2%=l5o@i 8mJ QyYO Q0o^&hY>6Rnc{, s(P?c(٪jG@ `|1z(9U4fR6jCV~9*CjZRJ1ȚXc&M WI%[Jx %[UH(/P@#Y%Lj3kCV~9*C) ۑ@ŋEQEQEQEQTPFHc&S%UCV6*CVU;RJ1ЈC)1ڌ0ZP_N0P vc(=R1)*dy@ `|d)%JhDVјIUmP-z(/_Mң{;W}ji'Puc|I5#3ՄZI[&oږe>wLdgfr65.ϩC~i|B'1.fM 9'=dtrcp *CVU;RJ/աұc̜A F% r+D8a@JT:qY_3=vJ!'#D+|1>oߑ b J{<k_׬ѱ\/#az%,( ×l"9NB!7:ȹ}׺Gvۧl+_'ǐ^GY8U?wc`\1*3)lM >5G! ,m/A4Y ak'FUɺ2Vױs4+(9NXsNe!RرqԢrv(zy68D^g&.z(<7Iב}9nV36Xr{l&{Nr~1ܠ zy~h"Pc(S[a;RJ ,PҡP BtR禴 ɇ+zn,?PJ{@%Bٷ/? 9J4Hp ;n\gNڸ^_cnF_XSK,+ه0C D*e!iTxJ>* WP* y41HmR$\ؓ-N W6]+"ROEdҡVYT#Pr)}qe7nTwFc^`Ge:*~P*#]4%PjgRh傐x3\@ V#(ACwRN{ *ztl@^Geר\/2u=Vlo59fr]+x %[aFCAR rvQxVݤGDpGqW?&/\'.NN^רʲוFφz; WHäzpm+1ZJ b*nc7]yI{FNq }g7qJXFkiz6*~6&}kGVјIahJvM,s-zTw]guMΩ፮Q %3rr{x豙͹{$cרyF;v^6~PZiCV~9==Y,iΒœA ]'rPҢ}9fxp1M]`Ipe] VUF@2^\+>c(S[a;RPj@ `L;7ͦ C;WI$=瑛d,kMm ځR_g)pů PjJA,PJK I\bn$*Y쭷u*w4eE9}7Gk7@I[d,uT|_ c,x{IkkGT4FRUhJv0+dyJ͋JE b|]/mTJvR; kf$s]C@)h@ C%A#P`1*3)lM T *gCp8fx ˅R2; vsá4N67?Xe,JnJu?iCV~9R;C)q zP* H~ɱ tgx/ Pj| )v-P _t ã ]UaMTF=>~1RKwmݢL+W}J.P*c:}J) r&A6jhz 1E(Qe=أf}-7NQ `%,ҽrA7;(UJZA(Pj@(8mSi#!J6/ d> ˤm3˷'F {lO6z%wuJJ5@ `|1c(U4fR.(=l(c(H(/P@#z 1v)*dy@ `|5CF(/P@#z XHU)jCV~9j>R؎TUӟ/0rm ~S?UQl鍷ko REQEQEQEQZz 1vݩ(I$aQ b'GQEQEQEQE _Pռm:a ((((FTlD$(((񫁍$c&)vBEQEQEQEQpC),;RUh*((((ƳZP_.RE_s((((j>R؎CLd((((ᯁT%v2EQEQEQEQCh]wJDQEQEQEQ5UCV6EQEQEQEQV1jEQEQEQEQc(QEQEQEQEQJ ]4%P((((jCV~j ~G}׷C99/EQEQEQEQ0U1vVk_R,G،Jw}nS}wY?ZvmRۯ|&WG7:fWVݾ'((((P$l{Ĭڲ#'| j(_ϫǖ*%(((c(N J4JGG(QEQEQEQUJz(j^@oKoKWRoTt5'b  p,z~Q7S:z,%@)d~* eaUX6Ps+Op+fv%z38€(((X5CF :P[m9sX̟vͽN~s+KiV}cNkV?%^k=;˃Hm)(jkdPVwn=:y!^{圚tl+io_?Lϓm8JJR_ no*/tH[:h^{(J{@I*EQEGM{-}V>xd2߾k]ooT=u wT@)9Ν/wG\xMQT՝b˚TW/=RIU %I[=f-Gf?)-&^UYLt5 x7V*u(QEQEE+(N^K6TjS55KQVwnUw]OR`cSw[QϼN\|R$4طg˸>@:J(?'O:Ϫw;Jx&IɶؾV,,Su EQEQ[򱲹 k]At'_VnIn9YC 7Wfu+c\̯?zwy?Rf׫^STE}L l$q\>FQ+Hi/q+(׬eh]ˑcg·% c(ըO>Uk/IN->W?9q>]ӋoRJEQJꙿV&ᖿVO4Ey9Otٙݗ N2uU\]R{}D9_-J}cRnManus*DQTr=kɿ^5_WPoÏ>~޸Iύ 1jGޒQP(LJ?͠nHkϬ_TƇԋ'/3.gu/}rC%%(Z%5s Uۀ. Sأ1?i7y`{vtI].C$ent8d aTM vܠTn,PJoPn lpC+} %E]a5^ l[/[O#)7$fjqqIm/WzRJ.-em*(QEQ,JKO)EsǏ˺8àRn(mςtwCV jiDQT]gew:׫UJ~oMnGD _JR2 R48+t5~T=w?wݣN]ꠇEQEQ+RM.iẻx\5=$r+7qs8fKn@ [f(%%E5޵ {Mο~ ʻm@JvYp~؟JChvtP|lM:=dY "/i~Z^WܙEQEQRWU_esn]9Fa۳mʞN+ϪܹQ?zV=||}⷟U'Z{SEQ,UCV %)m$aq$43.Z2Y˞I nyJJ;g_ H˺REQ3/|_}ߥѺY}#c,uQGvݔ=NoېItzGQEQUPkԠ%[Hr(\Ѷ/u+ɭ{?Fe `yAP}wXj(/@DQEQC];x[cp%(Z1+Ϫ;EXמ3%%(((c(U4fR.{TTt@TΆ4`qf]c`p\(K:Ci-}l@δҁ6`,(!R(}v}(((P_NԝP {B^yn ϼCЮMi!x>Xґk z`@y! @I!-yCtv&% \%RG 0b4`DWYY]U=3W9==]_dlryE Kn/ww$yJWxMˑ0H?ښ]ZT[Tߢ*TI!ˑ~_Y f_,_rO[r<|rv<Ҏr=--7B#,#w{OCndMXr5˭K)k#s{BMr[gk"ɠQnM$!5#۪ikleq nkRwh"}y_&f}i&N٭fkR'ݵ&u퓵5rKZzk:HFt֤`[fk0 5H ^՗_gG[>iY5:RekIP?Jci|AiϹ$iiiii}NcŶ4pmjVYP?ʭI~$OZ>[> $A5hd P֤OG lM>~7j&U}BNۑ(u~[vm&eܺTޗ{ۋ+y./'_^qno*"VBa&~?nO۪ﭽXߢ*TI!K5mZ>H6.7_\3}m<^ﳽPO;~Qnwԧք嫳vA_FhHJ)$5bUQnM;ICٚTW%۪僵K~V#\.}5Yk}?UȋPϖ &Ny5r.p}ZZ&]x%卜Z5F?ie'6JKt#oUF&ťiHL0[>!mz6;A~[5j9!ei5V֏fX_ΣVY뼬7gωϊ3bau1b!jU!﫶:cG[Z ^Y;hu>)ffMkR_{y=pON?Y>k妟^&fyzguH;O{;}kyhi-/,>BOy;}ky姼~rndMXr5^7}~nON,UeJZK 3%_Z5-YhꬽZUZ.TA¢|>= nFnjɏ ZϝקT7VSKM̱e [ g ) }=ϖu[@:raőW-d_vHK!ʿz b#Q[/!ο .]Ohޜ[~[y?-n壶.^X-gօ%q:"ZQ#diV*ˢkK-9ʕ}@sCxx뭷i͹sn9tJGhU-smɯ..ֹiq hch#-YܒI`0sneH[='W:zKι% \/,Y[hmh#ϫ[Sl(`-j?U̹|Q,,-GPJ6U>#`---Yܚ}MB{W-nqBLLλŞ5eh;Ej  F9X(E9t[=.[Sຢ&ŭtVK<&v̌>QlqHx0 Yb{0 bi[q-D8޻A\ N1΍}?Vl7ݹSE ޭ[=ח~Wg;o7u7/Ilz7.Ol7ܵ[ ~hYؐ|?6$ߏ@ eTZznt6qEZ|l[Nq욾9tߞs+[-u{ܗUI2˭ܲxMb#Xp@lƹGħn$7.p-;6o,o\WUWpaK<&Kyar{!3aGstV*S7wVVJ2w)0dSӑ]ۑ疬;ZL'w{re&LI4QQ>̎$jhpڙwx0WŁm3b;_]IT{=Uua%WҤCy ͖窷Nte1coWš/$o6~\k_ هd  ۂob5'xqs7[cnqCOï1㶳ľ#~w-=Tɏ^|?n{,DXZTs~&}N~V1?RO/_,8]Lg1Yp[Y2XĮr}#3J[O>8rS2gu'Z>VOv?dǬ/k'=fя͌FLf/ Br[YIӎ|;%v+Pؒ ۔_ &?_gk^6gK7]кjAz]^oھ_ϓ7^2}Ra~gx>ICws|-=ЏϹumYۻMܦjw&=&w/a/7T_O )jb1tsSۖۧ?v \C>Ǧn[$MjtF-M3pc"fuߞOl]fGf>wj8#9 &s*Goqq~Vc.+8~>G2۵qϻo[_8O[}Y7T/T2џUk>~[6CxNY|2ϫ3'c>c$v_"yNv24V0L!&4IxB!S<}(qJۅ';r}{cnfZn,Xs?M(-nɾ|\R؇>G;Qx̾>/$GlYYq?O| f}ynEn,61kWruIn^5/aw^βw~t׷ˎ΅lky}PDzQ}ߒ߾p|z՟[~O%8 cGn7?żi1[(__C/jgyh]Q/\H٤x_ζu|sZaKkE蘘b㍷-$ D ;li(Kֶc*%FTA %#S~7Ic:>7ܦxkPqS–~ۏ؏`C<\}񐘱9_~nFoXb,_7>i1} /B\m+ ħA, HQQ(uuXq/9MU-tt(n M%`9w},{kBU.ƾŴ#s+M|ͱ?8֫uݾk^ww~kaWFy|c\mќem$a0B0d+tέK\YSˌӑ[f-3r9fwM Y%/ _K$*.u;j/cG:#f"o,c=CMĬ}_:Ħ6LxT$Gސ7@=yC⬫~Fn.mx3jo܇\oܺr] %Fs+lt69޷SkXlzeѹsbߜ|{I:r5knsCrI> Or6,LĊ'^dCۋ)\ Fe,cY.-nEckB?:BTV>ɔ[f-Be'S%NYuvsyE4_{6e|}Mk~ ^7kF<}#~?Ccu ʷ+n}˶l:gƷ->_KO8?Wjsq2#=q_7}XTB=7//ߌ,E%G/6)%7j{L!Έ{n좰rT!qߜ6=Xso> LHgyٖ:v]/܊os3_m+qg4JVxqm=,]~LaP?c꽤˷->}<ُq3kBB[gX;62 [pO==~|ՅT?R/[VpMCs5Y0cNͺdӽņe-}t?q3Z$M[2ĜG{XL;3no2 8]x_|/l+/^*_M~G.o3>ߪmsvkZ˶7}e^8?1{_K,=W[&z|NΜ[eZeέ)vBsn5Q u[ܵIl{޽_|dt#V 55fhVLaEqŭ7*>wFTMbrX'&p:Y}hQDt-.F#-=3Y*,>e86R,Fg %%/濛NVbyF&1pQt\Yu~x5tx49NDZkV9Ⱥ3nҏwwyvC!eqKbd5zέK5Vڲ:ٜ[Zr9m6&c;o&Mƍ6Jz/na*·?^0g}1D~T{ı^V#1ŐZ"Y?1y,h`MQ$Q=r P,u#k7KܺΕZr{N~͜[%.v7r X0!`1r c9ґ[[ȭ--g--+ޜ[K[s@;:r4Ϲ5`+Gmsnz7i u Kȭ˗.s*ΩuŹV?:8K%:Y1?7gi m䖜Pތ:z:+O?VU?Ҧ#.KKUq¹˯ .Sȭ.3gx)U&`sntjRKy1{zN17;O[2f,n]81wkv^z>% rd,@#[9K[GGϞ9>878yU/ӳ|D u,n[gϞ/Q5+' Ͽry}z@\Ŝ[Wۃ:}&.g5Qν57=5'N8)^~eqWϋQݾ,dD 2rK&8zk*p'~uV}DQŗ^|I#~:l52S?ʭI>$On/_~7Hy+^.Ӿߚ[Odr$5yG}&U}2<fkR'>0 IU_ܒ'wU?`Fm~ZJޒ.9ˉg^?#_W#N^=-^=qJr8 ҋ/_yI%⸴&yc}ն^nbn0Z{/noя&~\ekI1".[>)W5/o71󬗾߶]NK:/쯥iil4Em;[&f.U#dK57;'NM\'O\rN.W^9^ٚT,rkҶK5}&~ˑ~''K5mZ>)Ś6IU4 5}&~~_֤O!4}5QhMmS1VU{x{g{+{kI\<$Ν Ω\̂b~.SyK~tQNWucٞ=nMV<'k{k_rV}OĉH n/'_rO[?r<׏.mg#,?nۚˏ{g}oyey5~`Gnd.,u\ZZ[><(wٚ}2'NiMW#.[OdgkR'Dj&U}B!4chM6UH@?QYtKť/("K^9#^7t~&_U[5akW˯[IUZekI1s~'ՙlM~9͎|k5מ?NyǡmWe䖉% \fy3.rs:gU+~ pW?ʭI~0 5}&U}qp^۴&U}rV,D]&~3_ekIVgkI_֤O!dm5iZ5g^'_-%e9²bZZ_Υi.X_c5}&U59\~ob~I+m7ÜoӚTI1~'9wٚTIy=fkgf-&m~NWК4fuGn-so–ɕJ.ϟΝgϞ%B!B!I9Z9J/ .& z-qu-?rbyYq{qj-9*~?ޚXNZxⒸ|>-pGn-0|έ[9N?yGV}έ.2ܒ9jUf}9jKUD`:r%[oSrFb QYurͬȭsSsnQTZ~?ޚYjDȭ>-Ϲ5`+GaZ[hcUܢ6Ԝ[rU6gV9jc}MS@Ŝ[6s c˛sooO,7}6S@]ŭE1}DŽ(Ჾ͘'&EKMX},&n}7M_8 ScFV꼶}`haZL&!y{rP9eE?ԮVwlV -G_~d8ġ$w[ߑvoNVaNw} ݷI]>/=Ǧw-Q̹]zϤ qz -(r;\cBl=tRLTA?wziܜX\}44#[Ûs7ǖ諶no뢸uǴ86qbiw޹Q6퇳zy< ?)nRwUqbRmsskz;=[ЧnNޗm[{J^Rc\9.?w[^7#wu&&Gw{ϫg#eyR#ٲW_ޫwxvŭ~X?=>L{~׌kCb7%וb;mO?6)_#nKݲ*_'cduY/ŭE☼ye8ބŭ{̫bys|cNpV}q1JtKM֏Lvܦ^=]=]lJyL,^)nX%Vű=.<,_N]r[6Q#6wLhw}n޵[rF7-͈Wg fn^Q].};v$`d?eov˺V#\7{ħ{d0z|H]%O\3e{;Fz}:+7#+Ք:wlz0N*ܪj(:P~[ j/cߏ/biiI|#?%'o:< >}8q'Hwܓ1ڢ6q\~Ty6O{.~_ޗkKj賸555%ooI]|Y|Gշ`]y>ǓsS`=VkE8בb_-Hī*>яy}K?g?+^b1Vo▼%QQ;_ؿ[lrPBqzT|sOH셯,bS 6cfF1bF(}W|uij̧\?9HS _\{b[߳IܠeG:[W.;^S}dcS ݆uQzUO&2`.fQ \JQUԨM{ 5ܩo<-;Ws,?.幽e_0}H~ҽ(OG4+n*]ܲo]Z^^Tϣ\5>yvڧ/}yRǦI#̸b-nGn؊뮸%N'_7 &gryA[r5Blfd_c iN~~O@~;nW6nHrѪ)YǞWg=V-_X-y$tQ+M/1=-u[~QYp\Ss*{ꉫ7ʉ_ǟؙnVܒ?/“)n;wNٟXTL)lK>s#=Jλ7쬘}vZl{5[ŭj~5cvG 6~+&)om'7)la*ܒieq+q/Y/DsXAf8W?q|6/l[v(GSN'N=,7M[~{V/rL^~#{8Ҷ7m7n9kHFfV2_V_HS/ձȖ1/[U=_8wk2ݻwVMeg׮$֑~GV(>]csߊ^A{ss J^|E1`(s Xw]}{ u*n91͹eFdn)nhB~!@;Wަ> F`|;rb.[ K9)v>X#0n*[9*k~6s c˛so@_F[9~6*ܒi)n #VZαUӖvsn`:sj)n ڐέe2seϡMh7r[~Kq mldɌ?HKq m0Ɩk+-|^n)n~V!B!B(zVl,BҮ[uc%?Gbʯmzu̟JM}k+ͻ9zFבֿ]ࢸuDLm/uzys-bډz*`/f]ޜ[f,7#9?`,r:udf1uTwoѼu_z5/oMp Q[ Ԫjzq<',b[w[7Cq9JȪXvbaz`>>g@;oݗ_mBU_.oLH.n-U[fŭ:r"FnE[ [?/JcoD[M?|-=j~kqKsB*R~!kVzL{TT KzUjzдĊͭkkq];ʊw.[e#t1)[gVJQ%U2Klz[뵸ujUϞ{Fc*ԾU( YQTBE)L5*n5`;疗Z d}u,#r]o#clϒsuF K>tDUWm}[h|䖙#?`Kq mldɌh)n~2#"}[h#sKo庱>-nVd.--Q{έ --[~-[h9}u~)n[Hhڨ=V--[fg:Ps-/7#JqkiiB!B!Bs c90Vg-[h[.6sڈι5v-323r =9VͩUݗ--1؜[~ڈιiuKq mt;3R3r 9}u~ۧ6ܑ[#n)nlέh)nvsnXUH[O:$Ѓ3g`Ԝs+ޚXUP[)VVVtYz`baaA2fvLɽדӢUT>rHz*nՠssso}Sk-ЅlέAF^m)nco}kEq tݜ[UaVd \OַaQL1!VhFl}8.J{'e5[vImtj^gnj^[bYsn ޗ_緻}[uΪɓ'-]K[n*-^m??)4`{uUޗ,:=ٛᝃ,7ǵVceFVZ[Ԗ=+t?ݑ\E@q._'%MIyT?2s]Xڠgfs(pLE?Wš v99_<3rFng>\[_"O]TBΑ]Hum.ݏy%-?:|\OޟTyT~~yqX=g烽6 -ȭYk#֖PQ6t,W}W^LQS_l/=&bX^p!v瓎G.1DQwl]6k\49[-Qf_ZE,$bRvᚭkp0$.>m_;*; [rU|şٺ*n1X Ζy?v29ssn #Ϝ[~?2rysDLo0 ZeC(snsl˯M<2r>[rCY ȇyq+y MlX(I=a] ޞԟ.LN*҅[vA+nս`͹eF`[[ m?++HEF7܊"[?/JcG('Rjz99ҶjN~V;C+nbURQ=B/d TJ\RUXң>vhV&<]Oŭv+++ޕ+W>R(nŤl[)YT F"T=jZ,CÜ[CrjUϞ{^cy|V1hBQ5*bUHaQql-?f$߯ٮQE%#wdA'-!?ܖK?~2ŧ|dF`eۨ}s Ө%5`X[[Mx?R@ȭ#jM}[h902#Іs+#oH --ܪ9Uk)n *s*fD߯R@zέo}u~{j)ntV͑V&~? -[[snWU[[hCϹϑfUUv!B!B*dJ@̹U>3R@%vR@D-Z"sn`l 66[+\[yߌrUEq mt?疉œ[&`snuR@ȭshՙS6soM~Tz!1 |P,9csnTܺoN{ H͹lSqK%뛪@jC:wJ67#~q -ŭz̶o~~-~ 걷5ӧO[(i&Nbdlv1#o\ke&nBl?zi_.Kw{zú;-ۦfvX%9e}>כ'_|VET/c:ك&;=}:9{{>؏[> a-r[uΪɓ'-]KBvF"_ɋJ^y",WZr o?XaGbWR_ھ7ٟ)BS L Yj*&m乙}ɯ+:OV~C ee=}/g0lV[~-ŭvا42좌Zlgˢ,ŝ|dz…#o gɺU$p&_ud[gvApΩ't~i?VUkPjVhԓebU.#ҽob'4rKfu侬QZwLSns+fvs.ELz9[QKCs+Rj*E&U`2TRzXEnkP@*T V(xmFH9f$Yʻt?j+ ݏ([v,HprȱEGeQ|ɗZy>֮!̹eR\ȭv(n[ * U]E+eo2RĻv#t?"5HqKm?+tד.LN~˟vV.;rT]ܨxmG3AJ [OznsX9䈪P[ͳz#P-T ]#$oߕӹtDG5d87xʟQڠ7uce#eV;FM(T.F^ f{]ku M<ٿ-Q瘁q=E 9p!k?]՝h5T 삖Wܪ{P7V;C RMe#ŭ_ϋRؑ?#)Je04Cs+Rjgh-Y̱ A*أGH[1?T KzUjz0֐ܷkXYYѽ\ٗBql$.&e XJɢR^0 QS0cM? Z+[~9Sq'H.=޽ ZbPYqK+/JZE5j*TĪ.n)TV9\诧QE%#wdA'-!?ܖK?~2ŧ|dF`eۨ}s Ө%5`X0IOq m -Oq md#S6sBq m aέxKq m -6"snTŜ\F9L~ *2))n[}&Iڈ̹͜ZU--|-5'a-tisn۵RZZZ"B!B![~[h#2Pࢸ6Ϲeb-t9L.Fxέ.[@ڈ̹[~Kq m4soM~@:skϹlM>-sk902'c9Х2-sk8--~VIs+C׿6PzAx[뵸u߮beeEv/-1!&&{'b1]"OLOE1}DŽ~Xw2#nMz-nՠssso}S9*fZd]zske(spQjl+ [7z+pZ;b%([`4TϹeWͩŜ[a]$S:}uTU,nbXMx%a7/|Yy,|,Sܒُwɽf\v,%˲WVKsn])n557; \'OԷt0rV Hb23NqNaogCokkn+Hն5I(n5wj{?zn/n>ryTc%$~hdW`ྍV>`t0rkVwgZ*@%ߜu} R5 Tv9U#uus-sn, E Y!Sqt,n9ŦWQ*ȭ@ Fn*?fW-Liap@KIE((UQr?QRҷEG8vzq1Uk=)8SGw['#L䈪[@ "ܯ_V%a֓ \– V;4;Rґa6IHiQ-4ѴgU/rȮb#J-u[WU~vBū:_U.pQG5V,`m@sS=I_5VoZ[-4QQr>JhLqKUj&yG>ϵ~lU/>r~M' k6[&uT:=,~zAآ2{:,JQXM%E&ukp.^husVq?;zr^9UQr^+=N_7{?QzS=rmkGH|8{2{]_~.[I_PQ(B4pqe–χTH%ۮVh{%۪_gj~kL#oSq}^<ثO<>xSjn% J]d^:麡Vz\vq.c#35*2sP=' )(nIٱd!9U`-H\멸/=%pV|[;|A__wInw_|Y WW)[)~AY^j>rK/QʋiNJUx2vQ2ԾrL[X#`q'byyEy3u)y2{]X-TrAF^.pŭqr.}˥/g;JFZ.nկz}SV. X>ޜ[I=d?y^Mũ%u^%e+}\K.ŲQ^ɞKYY+y>8d[8 f<.-Oȭ+*Gފ[r~Kk9ʕ_?{Y֣[&~?I՜Zk[qn߸.[GT? {'[62i_ŭUY6u=rKx("۠ԍŭ((n0Voέ$k? BX|;뭛Eq [kGܧ3!)5">obBvߞ0.ToOOG tEMH.n-U|-Hl.[u?++HEF7܊dA/R%FZuIn>Xgʊ[j_yQJ*(QS"VuqK0\ϹjN-ӏ뵸5TQȝ뤅!YoGH9ҏL)F.<X6j%-\4*nI?2iާ6sBq mt0rk|-Hl.[h[[Ϲ&>-ܺ⍬}F9Sc--[&Fsn@(nFn R@ܪ˄`V!B!B*9'aFn]FV>Z[h8rR5Z[h9L)n2P@6GnT܊)n Fn`lu?ߚ$F6rJZ[h8rRwXKq mԘsˤ}[h[&U@(n#k)n[&~?؜[z-n=y萘C>(Ϝ{X߆0rˤ|۵S^3‚eXfI1=vjQL1!&&&E1#znj^6o-|V9ZddjPr۹9qI-LɉɞBq _6rJ`dU-ŭ̶o~c/ȑZrV-Qq䖉[Vsui}Kv +B[x1G>Ң=g}owL'ghE K} G6_:~h;_",n7! ylOj׏M52~Vs|]suI}KB]HNyaVq*S 3 Q)׉ CY(0rKXiNsxF QYaߑuU|\u2BqPηkt :QUZrzEŭc_]qQ(SۅO~G l+"!ȭZ[t[Xi\ܒ¨w 7u O-?9BOd8ŤDT|Ծ㖎Q8xqKg]%z䖉OcnVw:ݧ_myaeՋ[VFKH(vqpku7%ˬ? GFnQ!2)._ŭwD?xVrAt[0K *v!Hd9Ta*ZJbdBT.UY~FV ^deʋ[ce-&6PڼYl2҇yu[B49˷o;ok,Q@Oף]vk?VU[^g|,X*ܦs~[~4XZ0U~/MdP[tQ/*du–d69#$Xu#[7on+GБ] ԠU_^Hfn;/ﲊ]ɺs?]gןm~ 4b-bέWu"뿜]㣎/PX `A3Z乴v/^FG{.Z*Ju.Fq`5_*6d#dUURwXKq+:5(){7r)K͏-֑r2HsC.b.꼏E!sF4M.bqm/Q9%Jbjs9:25b(@{ᵟ_ϩzyu(Sck%p#8Tcmg_?fQo#zfeRwyz*n_׏? ~~lQ}}jng_UqK[E!s1[(IGvօX裆a-[~ p%9YsFIg9pő~*[Gˏʊi1*TJKzŢ 짼}"7l9֢snTYOŭg1nxEqeQ=ϩeҿ3 \c'д.BE yqf_. h>B}HA g9-F+Z?P8S)H =n矗_t:9ċWU<_2r9zdŃ*nAS[cO;ֱGnK] BYBͺ Q#BUb \׾9i ^`ϝpB| Q▤Gr_s.P,++}*3_'x%邸Wv*z=j_E#L~[U88YoRxq}Eܵb&})g:.\_(n/BjbK2[t.F,eaz^u ϋb'ZQWŭ~CBzE"_uq+ f~T?t_ECeR\['"WĞGON= \A..pQXEɅ;bɺ0Uj%yQ+_0(8m[SWmrS2u]8){N&vYERy.y )m(ܢ؏zIַ۾'cJM/֢snd=d?y^Mũ%u^!"V^q/ElhP3KŹPu.R~ UF_3t9 v"YP 3bV▽nsOCS(DY(~)Xŏ+n9Z0V_kaZN,r6:^_(n…ZO䅳s ڰ!I% N֨B?I9vFבֿ]Z-B ?.መ} 4gX-֨#L._ŭUY6u=rK72Ir9E9sG"V(|yu3벸剞\r-0*#]Ss"Idn' & s88E!8d k9d7EtUwda8E=+3~qfVþtY#q2e*bŊ[VwQT=r$9eέQ/nINA*T Q({t[W"w׷5H*B%z)*.ym_rlGR~-X` aIq9ŭZܒX#h[L_(RK >vh1Yȑ%_] m}슏yǣȭ[~kYŭv+++ޕ+W>T(nхlx"ŋ[}8[ۮj)s]ҜK+Fn>Z>FZuIn :edWH\/T,ɷWPA/7(]q.UrPm} >caouהW(*l Rnq˿i)缭"װ%M FL[&uS@2Bq m0Vȭت30[&F9Bq m0ֆl$,8Yd9~6j2~h?IU?[h90#L~ 9~60rˤu~-5[o}]y[ɲWV !B!Bz̹%YUFBwB!B!lFRɂ5Jcsh5ZSܒ-9")lB!B!75Fn]^o["B!B![&~FdqKαUF 8!B!B!>!B!BȠ)2V|[eB!B!$!2).ŭq["x҄B!B!ȴsoM~ fB2&B!B!Dfܪ:iB!B!Bd6d#dU%9c--B!B!&5Fn]^OqB!B!I9L~P"B!B!mœ[B!B!dlSeͱc--B!B!&CeR\Nq/<$^-F?$?eq }=K}\B!B!o-Z/n-/ĕo^>]Ƥw_<\ -B!B!0Vȿb~UƤu5GlP"B!BzɆl$,8Yd?6V~Vqkkׅ%}\ڦ Xey??!Qqs,G>#sGQJG&&>*۪F6uMGȑQαv9!yy}7هg~~6fYr[UdO<&Vq؏׷N!B!eRwy~ŭ+osWϼ!O?"ernhm*`O)zO qNO(w^C!!2).%?Z( }JőyU6mWO9 [ITz/[E((ۯڧ^zdVIq)QEtNo~U7GG[BV3˿}x|pyqbA'8ğ c׹W?%kЪJ.mz{2+u>\OOsگF{xk,W!}{=SuR%~sGqK:~sלko~^LEzV#惡ےwhm_DWJ I煢tBs_,%c9ׅ&oTd؏_~U7-x!E SN Gwy8~(~7,lWi_Va|\6oCw_wCVˋI [ud~鶳⡯Y?3ɺ hW ݂|^JWifŬ9.Ky!Y|gV|/oߜ–x}/䶗i/$: !(n{C_ 2#_;!|oڽ_.;Q[f=5zK>%]%zx qb*DGPZ乴v/^FG{. EJ_ƿUj&UɆl$,8Yd?6VUnGqKN ~6+nyRz`^g7;;b֑[:aD~DO~sDB!F%4 鲅S/`:+?Rw7jK]k/rI|rˡ\ZiȤ}#}j;B,Qp}[)+>Uۯw 2J)l?ά8pP]OEq_SEzZ js.Eo`?-~e9y,?eZLsnH?K},1ɗ^y6/p [2;Ps Bt)Խȋ/Bœ'>)*G& \ā]w e%д. Iř}f]E)$0j#~kc9%IA΋!ٮxGх繥*~ I =nɏ^~ɬC^u[s+?~(\57VtB/,>3"^]\)lt:w%CkC@!QXS|_>BΖ?[(l#qr+p]J.s 'RgBLu!ح Jls~~9/x ϝpUn+>Ž#TqhqKm(WU5Vpy QBje'rź0#yQ+S~Pº|۪ sΥ&U{. Y;ed׬DRy.y )mXprVvJoבld}?~2M/Yo-H_ŭ+oIOXu6r>cIdkc?tB!iq#/f򋨅Oϋ|)I&/\my -}Z/_Rq.Tݤ.R~ U=~JiXPV8ɺbYǷBijsOCc^euCsyz+bǏuUxYOYssnȏbU\rnWG4dHm!B:}*9^ngx;[Ŗ^& G_ms'~S~}ÿ'~Cl`xQJB gBYِ'kTЪm,nQXcr-Y 7>Z&ueO*ׇԆamǭGK)oxkާ<0@BYYx+w NW1*W=i)x;U"Bhj2~▉%%=K_VzqK?^sXZﱰ׾J7肔[s|y缭"OVF!B!2b1rˤ}[B!B!MsF(nB!B!6a-B!B!2)2!B!Bi!2).E!B!Bڤ9~ um]Ŋ>qB!B!BV}έ7]eW8!B!B!TdZU,nu^RߒC'N!B!BH[&u9E!B!BIsnՈ)nu5B)pB!B!7>uFpB!B!f)2.nr,rɿK.E."!B!B-Pq 9~ ̹4!I% N֨*ُ͡մk)n#L.ߧ6sF(n *2-r[h[~k6s ckC6JQUCi?R@5Fn]^Oq ms-[[ő[&~?[~?R@CeR\Nqk.&I1cF\3;&ʴsoM~ kw/}U\Z_k[!Ŝ[=byo-G-06d#dU%9c/n Xey??!i}]޿v3*bbB*V^>)n};1gm1#۽c-)ny^!f~CBy{rRCNq+-HŤbm'&B Xe -h0-&}3)nsˤZ/n] ܟE$?iqĝI>(YIw.n"vaRuQ%_3Z-h1< XjIENDB`onedrive-2.5.10/docs/images/application_registration.jpg000066400000000000000000002015301513710110600234020ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex1515 2020:06:02 09:20:592020:06:02 09:20:59Alex http://ns.adobe.com/xap/1.0/ 2020-06-02T09:20:59.151Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************}<" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F+:ǦXaĒBNH\#.R'.XۢIrStIEjuk zY[I4fA i6sӞ4t%WEs.,vjI !xX) A*ck\ۯبwLpz`՝wWFWCS wn[^O'۳g9Jҝ'RgRk;Z+5d_blLl^e ~m!lҖWռV[_-W+!ӎkI^_ׯ35}J{Mn3,DgoNvWeYgd.%Yٳ]|[N)BFMڛW k :z]Fݼ$0ٍc8횒}J9&ۖ .0;Hg:(簧%|^?ԯ5)ԭc*9S&Uq Sx cQ} \YHR[Ye#ۤ$ GjڜCu }h& i* vg ӲYO=(rAwIru!,D_OO:J+}gTE[O}+FYYp껳.}F{rzvή- $5C) 9 `Q[E tzʶGQTu3Z'pG;ccc}*( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 7y2 S08<}MME4M'^[iyWv۹ R:Uk]OE#oř$ˎVJrJɉ-ݢz}M G 0N8Vt#mAs$L#Ң9"B"T](nbOO&Fxbrp:aRQPXAjƒt'sպ)i=+ [}ZO6LUzd+W=WVWd[yYB(ĈVO#zܢ;}nm!Er:#! yY\-t.2HY9a׮qWԥn15MNʄL c-]t,݁[hS7N0e 3WuW؅F m XGo.'F%eN[q_'9<$,%Nd˙ё9!ԆO~~i>gjNKT"V9q q!n'4bEZ'YRd47ka<2E:‡搁~.PҮ&/$s>p~o5j1u &HV8h2ɪ_%w:ԾTr6Bo(0zQ;UNK)<ϖ'xWPǖZ72socn Hlz6+OkN|F'kamcjv?)O{[y;K+ r=)ڿftǎSi?< +v"Gz7"rstޟl?E̡d]$l^~|?7Se{  0= ~5/UiڽHnIN:8Nh᷉^MkH,\j:5א0A28 |Iuugo,f@1s|q C#,܎8jQ^/gQ#м]yo-MeErǧ2|1$cԤ+mGUP1K6O"=f~S&嶣޽ĻVRŎ1]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|IѯڞAqUֺ݇(_ m4TAYFntQCc"g>&.sQ]i!YA=Fz}9(twt? 11b06mYѼoK#E,}&姶C}ݝpY~55 M<}yecpf r4`OJ>Y^|CK˹̌lY$㌜[^àA].&DczO? iMRIf<[c,- SD~j5mWᥞhWnKltHrrvq6j#Pz+gWеMI3g qQ@c[⏇|E6VvHA Il3d$?|]}6ڍjbw8uwP?|]}6ڍjbw8uKC:|&7%Žwgsӿ~+<\-K8n㑣PFd-1P\I[~֮<=oow_~׏`sվW]X[]pmpV Mnj8c_S~֞Oݫ"R{vއֽzxO]mgE?E-mY# ǎf24˶m}y5Q@-xoz3eaAb;ٯ6FBq,I89Mw:w7-s0 18=k8&_x7QG[Y-8L|Ú[?OZ[Na 1\aB<Du[bL[;pzәsU%m^U'IuEp |9~kq}qom|pk(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((sUlzv*@g>Mt`PTA Xue(FmRJQE|9sv-m2kHEy9# InbkUྂNݚKy"*1,dNM#WP0RPyC@(kq!HIb9 8jEǞ(9%DyI0 hTpL #$I!jJ(p =h_ӓ>d*̲B%mFA$chcOL D,702?:}^46iTNzuaQEQEQQ:ѫ .ـ8'8p;wK,pBh(I=:E`H*FAEwu 7Os *9[xYQ#PIIEUQk9' w ( r3uZ(*+m|=rǠ%eI)$bHRPE2Ig*G0DncSJ}QEQET0q,FCc߆=jj(jv]%"I$Jnw_`GcWmQ7ҙv7 3 R+@rdZ(%O-DNrTqH ` \Hw8A6~O<%S%(ZyR0Kbp=DO*F)v,N=QP\^Io{@D7drix{Zԡ{\K"F1@V%զkmu$RMw pKM2X9#^Eyƫgi;l 60105حI.gy7'#{dgܢv˽.h$Tb샕ʕ9#S7 8m5[tvqBq]CwI W2ڻ ]=@^VkQERA1„1?#\w2A2Fz{WQ@%A'ҿR)bOVb]~ Gl #V%7,F$ӗѐ,Xmt;s]ޖ/5+[g5{n4wB7YXp9'yoӾ߫\ǭ:b/DvvٕmCcm{dCA=9& 'h|?~!̴" P>ܜ'5TP[. /m~j:{,wXKlBxR:-ޱ)Kvv0CqHZc;@@^.[lO퉗Q^<JF1rݑ<<'M-343^l)r3]Gq 1^xytmvI5o!A(_$瓎+Vi7ֶ}c jRw(pIG98^8m- X5Ku U5pxSӁI-qpq9fo||5V^JCu5h0=M!W>K;FGE8ueqCoj6w*ЮlJ,y`sn;uaiSpOLC0f$tF5P_УZJڤrݼݼAh"Pqئ4}K3\} "x` }]mX("0uoD#2)hC]A>u@Z[֖5kaq;9۰ 8r8 b |Zm$LKNbǠ@>:iuwnw nNZ"v.'e3_˩S%C!$ ;a~2c^+|Z]Z[hX1cPEPEPEPEPEP\Iڮ&lΘ#Qf^1]uS]#MMU4Vk]Jо3zķmXdOo!N@ ۯZU Ij亖-)A'1Civײ^[鶑]J8]d'j|5O?Eq$=_=x 'oo5It5`#Bٖ\.*Kx'm"O[^h^[dJpR"ݕ6v: ༰M,cS$b [5ˌq a{CRh⑶l' N,1YO45ۛҥA@x<[kimchV[61 DQTz.[YpI8-BF6C\TqG83+;pvH (3QFPSkĿl[~o9;k7kic"F_B=:uoivp>]K@1 au>zX$$E/ʄ(|?N}^Ki$dzi(3RJ0z`sŢP_}gܭKQ##%y]D V&NݖypP nŸ3V~7&)ۤ9,SLO}j^%ҫ*TOFJ=؁OA@R+PAR2=ih((((((((((((((((((((((((((((((((((((((((((((((((Fw"m-ūdcp~+8;}3]iucxole$̻Е6v7'Sh;ũ JQK'/^r{mErz'Mm3_4.b珺zU|;0׵).4[RZW{dO݄d<| H8@@ֱA l$ ;@'RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\o \&HXlwnCEq^$-I?ԤL~Z0f`/a{a7q[[.qv]Cǔ`7nϰjRkTKxm- n/$j(:n%:`Mis98'Y *MVtYkNf%;B7FKSu!NҦ[08{u  Fȑd)b[i+:+GԤԯ5WV"ч3m'Q_Er njAmii َ7w:hpnv_KN.uqtcͲц:kEsV6.-֛2HY Xk6o{o$\A)p/"pA$1Ҁ;+UPNcp@Y6FdVRKq5c[gH,|ꁁ ?{@:+u˯BnuY^[6L2FYr:ǥckOhښe]7wv;mLg=ހ;j+MWU0jpVhD,BT$%x [ڭCX46?kI Aّܳs7[RZH9'kC&U ˷?1ק+_$da:,m'˗W\(sCյ{(qdRqTe0rwҨϫZZ[,vA,rP@C(N;(˿^km&h`hHq;L]U&ha{仴;1&3+)bK W qwڮ{nykKki1eOl[ޯxְ ֲOXN )X>B3sȠ,I6WO<^Mn$Co-vLju{5լB+hd,ada~Q\U56-L)$P#`;8=_5$fuM/31StTW5)]T\Eje-0ؤ"NA&kgMd+'ҥ[ e0sr 8|kut-77KܠFIę okDWw 7w2DRۇΡI!qj@>V{Ď;]u%QYyO/y%Ff)^bCan62yZPUdž˘2%%yZ8&dgmͼ+~VRooݬ,xTE])q+2n|3^q+; ab8^8Ђj-OҢ+hVi 0ۂ8峜v.,ຖIymms^7^\%KfU6ܯ_WP$\Ip>W3e#f(e@%NI?Oa,<p\5L% qm=}\r p'0se0]1i/tI}Ŀ ҿi'#ՋsO̫s+hr[$U'"jRi 舍#RBp*FA 2˷a̻~e?:W $z>__4k:رGm&{ d{{}z5XI"܌ Nǀ3ےh]?e>%NI?:W $zGf3=pY|껊y[w;q9/W,5D-*Ho#n9h]a̻~di/tI}Ŀ ҿi'#Zι5vFfy%{)PL* r*{Oi7HˈiChٔ BzZ9es.ߘߴ:W $z>__4͞io'H6AȨU _}26!_99=R;Q̻~˷E'JG|K@+=-tAl]gx$BC'Wnᴝqjkzu3EpظU,pg_ i_+(]?*I4>XdS:ytU2>SڨxWQODoDwWI(I|>P;w_j7-OH%?"U~?Pѵv1ek1 TV`HQI0y9΄ך<ֳp ݸ9tĿҿW'$Qo[J\G*ru-BHycTf&Yr< c q9lQҧ Ly%dKo[J\GټKAm+rE9W̬-Gsi[[<")-1*TL&r 9E]Z\/0Dq$[AD 9$uu_ i_+(7-OHw9W|7qiuatGlO, u)K"$%}eX\i3y2b9~S)7>_ i_+(7-OHw9W̗RPzIIɇDn-ԅq[PKo+p3fR9 zΏټKAm+rEf/r*l;);UN1V$:^uڅm9-YdI|lϧZ7-OH%?"U ]2s Nԥb pZhXM4æyɺ}ʅOvz1o[J\GټKAm+rEAʻc<7QOk$MdUP1#+袶%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊Ͻ{Y]=LѨ>j}FĿҿW'$Qo[J\S*q"f6v{=2G}O2揳xW 䊗Mn FTBp]s#sJI=M:( (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((q׊xkmXGNťϕR2)9px2Tttx'継q.OW+o8=ϫi76^u$1;lG I#UEa~,Қ:<1o@U2:0i'2EZ]iRBn/6`@b*3xPjVjS\̓Cn+Ⴣs׎޽bk^,lQ#+~B^3{SHf!4SelɒF1wip& 7(YmiS ʧLq\s^-u6KXkkb24YJ[ gW]P]X_7)cFGq> AZks.%VGNӌa~Wn|7x3X= ,̩nNx&Un!UWE y Ԕi>OI#KyDNYa&%vO sҽ6HFxJkGFGebfr]AI'Ҳ42SP_(o,ᾇ>H9+K#gkԨ*4[tKMDV{F% @2 8K bC$\Tl޾C|=z^EqюַP 9L/Nk2\YZIe-鼬@, Hkh>Vi+7^F%*wy[fv3; 1°&]2 eݹw)N9J (/tY"O[m:] qjEC>Gct'Lc1c4VNe d }Eqj>%[jSvOxKC'0n70aې Ǧk|9siiw1\OC~'[R'rziCfOypֱI ޟ&PIv23!届MijaPni^XYȉɓ3}6+<=? o6]ldh BC x5ҵo^no.RH';$ IҊΗ{幇c12~@Ikn((((((((((((((((((((((((((((((((((77^A6:3QcU+;j`xJyZ_LBO2(_3SkJ*SkI[%IK%byC2rr{t0>杬r!X#@naFYacS\ }+ |@O>ZAjbV285꯬xkA$7x}IDN?9Ew¸ҍGm/OVPSm}'}w-|۷wyy{c-R-R}w-|۷wyy{ckv]o:ifmdٿly;: ł֚\a]Æm3wgq˷gyJ A3flt#g: SD`͵,O> U>n=vZ±M[=Βw4Pʷ[ʅ)H;-t&{}B() M(?x9al%HG'ǦNW "䲶:9$}+ ~F-5r#ML4ʻBcR9nWӼKqɦKtmr̬G6m÷9`:o7R6ZMn:R3y҅Lr򎼂~qmCMXaxm ULnRkW_BZMmd3$FӻZe$l /k`X8}A|z/ϋkbT$}q|znYtI2;>vpyӊԵkcXw,p Ioۘn,(]0? {: @")XNK+c>aӒGңu/n%>v/9l~5xtT{9}鑊*pC|=Wk)V鮟H-̌\OxcfA67qGZZO5 HOZjݘ9q!a ss.:#%mlJ䏴73վOM֜yDE3+ eltg:rHV$~'NҒI^Mu则$8VwgjS 5Jq®18LmvW"ϛ}w-|۷wyy{cJ.NF8']6FK,G3;I]8׌Q̻~a/|+yLrY[>}w-|۷wyy{cmZe32oiF i`3O}1E52Qҭa+V[k֕dw`'^r;9o9%#uΔ,f&3Fϔu/k`X8}A|zxiq9[Dq&7q;Nn=TǶk3 Z2 A~%qPJgsG2>W#2_ĩHC|=[xitADS2V@6|ç$P vYis/d򡐠o,Y={Y^kQhi\FHn :/)p03˰r~nmdgڛnu9Ƥg  36:y*=w׺fqƵwEZDpp.p*y1oQKk1p-ܑ+M=$x]1rKG@$mb|zqd>-RR(V1;EKuģ}4+k~\a:"OvÒ_:{: @")XNK+c>aӒGңu/n%>v/9l~5j(]?nan$EV8'30NN-;Ÿtcm* tnHv pI`x$NeI3?g  36:y)Kf'hog7cy˦G_5Y}wٍN2utGrDH%̊gz̻3?yl%HG'ǦNW "䲶:9$})~m%&⸹dU8sz7/#o_To]L(O9Ɯ`gx+֎e9_?Ծͻ얾~lSmێ=Ԍt`11fB6| bxoW =UTinP ^>=Q.-$,rbY`[XzqG2_;%3ml 73~O]փ%mlJ䏴73վOMֹmk\խmoZ8mBo`B Rj>5avtƗQ`T@9;}#s.ߘrK_?NyDE3+ eltg:rHT~nmdgڛnu9ƲiJ ~l9}ڬ#rB9ƀjڅXR2ݜ9IM;LPwg LT|lGvu9 LIH$LF z6G?K5sZi>TmlʆR ( t({}NfF;wky^^ӵB*=^yΕ=ɾ tzl2H=U^=V}LHZ"\86:y3܆Et+mhn!i1gGEo T= ;_Zk ,'*d1]Z< Qi6:ٛY  m.{t=}L4Ӵxx Zdޡ\cćӵQѬmn4|Sub$dPh-$H0+w>s6Ngx]H,dI[4BNzw E'Ԛ 9 I I x$y=i_wf.tuIMf..!%#%rAcVM3K.53mw1b=zU GN+z/+T'9g6gZV{fxq)O)`U&i^Ky@ ƶ 7$X6'}j4O*+-5DzxbÎsOL-Z|_~$}=S54S+ypp}: ({_pZu0c-uZ.t:?(>i+G 0\㚩e.-4Wqw< pQʖ4Q}L+x4}.I/-~ЇqIr dgHI7zsLUI}2[kwZ}lt{)kuiՑUJr=)[djB6+u=}鎢/+T'1KiZuXTD$e ă$9cCNQ x,Ndm j({_pZuu9t!NJJ A61"#rjJӡ[ˋ0$yY#۳ɮ=}NvGoOqyo?ۦ3̠} 㼳 [^JζK, xmrB{i_wTӼ7ݵβloLM юHfoUČdc֩4DIc#bm suTQ OlF`Y{=4GVPptU#qLZc|B8;~X3tQxZu0,,t[tQ[o̐3C8a-om&ץKD0Ic4v $\r8tQxNsJ,-H6T(8(eJ<^k̺tI-_gyl۸Cz㓞/}NcSE|ۉIcǾZncPes/[_>(m#ЁXxWEwWQ:Dr꤁)22M~ |>T&+ =}+No3ȓ ev8]>ٮRtu˛f2<+ FXheq37ab)!qk>=[}FK{u_ݫ<\2 "0p=F:TZy53k%?}Cr|+*P~ހ5m5{\FFN|qci.o6*m,c U$zӾ*hڽͭvZssFܭ`^ޟXʡ w%Ѕp>_6@q?.ҭma7yd>e1a0I55yy7[5/B{k FޜH.mHF'-3g *Ԛ^lf/!(2+edn#94Kto%\JqʲKl1#ȫ:VLa+SXZO$B ES^2Ay3W6\}}+Ə2 :LX]j>,o\dTxIΒI(Xg)diڶ%Ώb[Y"e!1!N9:=OQw|--丵c 34p˿Rrvrź=]MqZlBdy'OaV$$0Ucm'Xv Gϵr~(kcKҞ}]]b#! LI\d@ ~#YQh\~yd'y$8{ogvcylPVahbΔZ |+,uPE,>(ҧXPE6` ȅwH*=Y.Y^I,-nZKHw vbG(j}gEԮnfeKh+- Wb*Leր&+ݽh9#+[[*8aսO\]#y<`A$Tlbxb=DBKCw- Д H798ӥhjzi g([yԭk1U}Ecs^A } !۲ARFF2O5j_iPD\Ga.pOJH8/_ _4۴Οgk͍HYN?;]5PݵI6se.G݈z0:x׻>iu5kIqҨ!wl.T69۝܎9Z:}ƁaO&7%Y$[x.:sȧڭŢ-d0q:oٳn1ިhkm5ՍY<2\vFJ2H H/#\Cİ$8-S =;u;Kmms -Hh:NK_&$L*cEُ]NT!%=,ykTz4忏ne*s^&ASW9men;Sӌ}y&[}sܪTe/<` 6 joU{&Dh$n"AA<۠ů4V(gdiD:PH=8&]v$6E#Dir@\2+P2 a>[˲q3Z76%o$iNIcpX@!Pkv-8%褫0P3)^{$qx|CYDB# FB vڲеYu8͜om23Ancrzqҫ9+N &7k!c1;ag29Ft<6G }W=8U/5ۦL:j ] @wg+y5WlROYm!DˀOn%5,o.L H3Ɏ$`.1(wJ${k__ZDyC #`S$xW);G/;]nI圶VLg<H*/u&]mސR%Q) ,w3cF`_gߋ6E ) F~tFX"G='/{I~p1'Xc[T kk~N:o3ߎ4uhm {ľJ q8<iq4pq0ĎqiBV9)`yr*͞Y[ն՝sGwR4r'w+tnӗGLQLq!O/nx=8FiW7eFk|@`ݔWnᱸϧknĆh n^Es79}-ło[+JF8$=MHLK"R>c7,Oԓ|O_C!f>r ?\եMٴ+k(7X'€3XxR[OK?hErxǜ^xealͼ6X u#YگӒ(-8]݋uS94mZ[;=l&Iy5 ,FˀO"Α%ka.-^0Ӭf4@Xγ'o8<'4nYIHͬcD9SYw,KdXftY"vr li۞zֺֻ% -k][,@d OC(R\6lYG۴7''hT0 G6XՑ>#2 OQU.~4[S`ltzɷ%4eqle: YP9T^{& vm`ed;>dW\֍$K-@+#: AR Vn᫛! 7LE~l~Sf/.|Eo5ݰ(љ$e8F* Z F++%Ie*8Pؤ'#֢EΤ0ܻLҼ  9#1YZ߇}S[ 1'Y 6Icq*>K,~H>hY+ g3\N[Ȩcv&7 +lgMnVYMeX`gdQI 3Mj t[-!,r|E%6n<1Q4MCi<٬ ]L.4Ko,-$w BblzI|Ouq\{` 2ag-d\߂nڵ[Yj\Ňp%a=kY4mxKo-âX0,)@'@.2 DP 펧 =v).UZGn\'ڢ3B[3Ƞ*)Dhi+=L&1^c0.ł[vX-0+cx#IXك"(K.#jV:YFXhМ "MYOKt{aq;$&&UF` c?7PJM>+:gI1Qy|I  Y,mda!N YzͭziO$= , eDkO]xcQ#=4SI} pYS P曪}{^ ?j((((((((((((((((((((((((((((((((((((((+BѬioxQ B-z'8֊]:`WGnd$k1F'c'!~~nlK&li3:\i[/cX]  40WwEy慧\oEdc]j)cH4,XYarJ Nr{C-.}KT㷙.Dr'꿈tTPKc.. L "*qܒئej/,z-;Uo|\6YsEp#CDiMͩF6R :em999eh+ MOFX T2)md.@WLJ[hƕ[Ѽ$aeĮ~SKK}v{ EvY+pd+Xx&(^<=5fuYq9ku(W3ش: z\22iƆ2a{v`󁃏E8#VeaJgjA9@>Cgim?)=>1C&/{AyF66Q@N4{a|ity-]#S庌18=zHF B qiϻѥ^d`vbd`^psB}?\xymh74Ynnu\3 FN O֎̑}dV 10g=sRrϕ~hs$tW-ΡgfZ]\M-Η̦iY 8QqkRg+K[m#g0228xw9\q%w71Ysp" `2NHC/ .mn4c:{6``ݻv=Njks )%fhǙG@s$@ kO5; +8n+>m\.Dd$@1m?fl@<NF; ྲྀMnSi;=~kY%݄lHWW8$5c}e_fmH:ܜO JX5Q؂} -WYc =K8c.B6n*Q\Ưt{]NQgr؅.PO< `uMsVDĺdVx0W-!uc.^xj?Cn5xB srKܧ_*U.|8殒ĕ[I8?:ןRo-KU pJ!dF=j-7\uRE0$3;IJDXݢFNGZV]]Za_9n"v6'9;u0O պOm*M rIVGsKSG$&2F@#<'<sOYV7WQgHK]fcp1Px-ڹdb;J+=cB׭TkɭykuU71cpjڰe # ָmkX/q\(H2kgܰe2~DG€7((((((((((((((((((((((((((((((((((((((((*ݍķqVdé<{Պ(:A5;fwkg62A2 vim-n-sr%[۩nw/s+1 { i}pC3[XevXUKX66 庞sZPLҦʩ%F:9'vȰMڡ?&Xcasٲ+fɏA-`:5I=f+"y*9#Tddd@ZYvl&((((((((((((((((((((((((((((((((((((((((((k{im*nْ7m ZZh].-$[hu?wqHϽ5|Qa%nBݼE^6q+<5+V\wTKm*ȹFTQǭirOefv˺xu2D=Ysk+ Ֆ0ͮ`?ˎq`G>86_l}g6c;t9sZ44D{ٌt܌*S/u.;p';;9ApGҀ4.`K)99֦UӠb翵e̢GMKئom7'<.ݤ`|d1j+ ?[4k1"pf 0J0籠 MkK{kJtA#E z1%eY\LCp9߃=} qz}x_FӛMK['d2&H%6༯Z_fblZX ?&W9m:ޕp-oʶ7%.~^y?Dc_X[[dwFNށx<{VހdGvG ] #'{Ѽ|I?uT22Yv)VJ 91:gZtYMFeXހdIy?Hmb4Hsu3Ti?_ˣ ZO"[Mـ˞qTR[˫G]N8vІ 0)._>l 2kU!YS,$C-)mgnmd{j.:g4[KgÛ} H;OR=PnoO6"y+$z͝wSꗶ6v̲]L0{⤽-l#reI#Dhۼ seW5}_%VZܶ'K}!0R O9}ZP|.:ughѰ"2PO@J@ fMtZtvrHQx>u%+=іH$ @M1bHR@xo-x],PzxxLL6eԥ~Fl2*澚B鐼M!TL~oɼpF>+C8"rjS ` yXL䌅@KEUTK(dhK6 FO ZƘgߨ/B3:47͞\6mtBy?2LN7zK:Ԑ]l[)T̒I6GsҀ7]?L0J\"eoO'Tkۻc}o2S-ڌ#FR%xݐsm{^Emqmylr4s\5 H#$pAy&NT|yW2\"&yXW?עKqTӯn]e"M09x5J@-ZuH^3@MN.MG8!G^p䊂Siom+*bOʸei1,; 2WGۻ]F[BmR[YLs# :95&3jQ}gtZjv'P7'U0'x jZwuimtSY-8?!<玄^iwZ6_h#2*# -1 ,noʎcbv# {V$dI'M9CD+Ԃr@ʒF ȨA]r{C ђK< H$j>6~ g^xͺF=98ojǭisjXEY ZkeLݗ9֖S!ڛp~44FM》AMZK%v޸J+XfR9 q88vM iˣ&)t-zq={m ké]܆bb9s>Zwsmp@y.RRyX-c1}̍(v;N3:nO.{WQyQKh.]q8<ރi%XmbH{'X7}F8@he_Yçk< 9r}zVusg +܀P*gzbt.RL=%NcfF,_<ϥfà[>W]>8Ŝ4E+0L*~lzPce>/ἷ̡\c*:-Zj+pbXBGP?/Y6;KKBP3PCcۜ㊥zvcciձ#`/((]æ9 -kKԭ};RH'WRAqS-e- #0xs7v:-Ȋmi(~]cMSNPa+WD9!9=Aڒ-kKP K}'S& >sO/H~Ɨv)Г!olm^zZ6V ڬsEu!R \>AP#m.Z&xK۝ಌ15~kJkxۧ )9gw\ sXzv 1i2zVPcuH-)oiwz|qg̸uhrcMg{k%֟s ռrh$ۂ85jZF}Ccu$̖X XnKŸo3ZY\Kt5!qu9A3;B&0ր6袊((5SPM^m8+“36bc!*psxoM'+ "1ê')A\*oww >f^it)!"^\2I5z5x|BjQgH0O_,>zcmzw ٣e%AL=??o7󳁷n~u>BLZd k9.d%rZݒWaA X'$C4d{Tis|ҍ˷y=*G LJ 4#92) ƒ@Ey]~lu12>.xdr %LsEz 0K3đ,H9' n/!\5Lms *yC&$էVoEcFcZ2O}IWzڹ.b4A{k&F0pßqS52I2Wr% 6q'8X%ŽM1lf4Oe䌍>5G9蠓浫 5Eu"+{nC>°ͬx.ҖQ%ƞ1!ӤXbIB}$U#%!@@ŭSl2/ujz%YW:6bJ#2Zyk"1a'Xv6Qif rSK7 ]10$/-CKi@^7KKp98 l<zvSZG&AhB9=B+$ p``alպ଴Xl/ #첮'(U)-ᴷZ_\K,c#y>`\|m@p cr@iH$[h.W'+-tLW"XhDX`1ٷ@A8kf:qwZY.-٥ަ0@"dw4W m{E>GܼU#mWa063%Uq/e0`Bnߢ%ѭ1Hr +_XҌڜ+oot{36g`JGn~Rd%VV PEq?5ޤl\I#s0DZ5}j%J,KrisE!b>P vϒ26wGʶHO%Qc avfh;+]14[&Ƹ HeQk[iHM>XCo˷3eݐH@xRamAd8Bk,>c|,pvEPEPEP]CK{qoX_BpA3S[[Agm1J8@t((((((( :3vW,f%ٞ:U;QEQEQEQEQE2hbḍ%@U2 EQEQEQEQEQEQEQEQEQEQEQEVe,u{M>O;3+N(()$YEE`9`:d'Q@Q@Q@Q@Q@Q@Q@Cg6#;HFI1ԓSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECs\opdxUrA75X?;іt/.j7/a? 3y̗Z60_/Jo':mpOTcX}Þ]oE?U{ou+V>jʌʣw2  u5Kao%͊#FE6"F)$C '4{Ia."Qj7GIuMOgZZZ@\+`)l s^ ];I{hnn3]F""mVRĖ ryGv7{ou(^~5_D"p4qLd7Idr8=;?j7^uڻ[č إcqׂz'݇<"Qj7k:LjLJoVKy4[xd۹3q5s5>pr`Vr7sGvIj7/a? ei!NΜ΢%t;*R =Zɽ{jv^g.smy6 #>8 {Ia.Wj7/a? gueβdDrZwrg+~>~RinRK]2Cm@RX|ۉt{Iyw6W_rE?U R/"HhB ntk[KIg]di,cqqʶuOyw6W_rE?UuuYtA~,B ^nr.FgqyHgQ|=be[;ouÞ]E?U{ou+(jSjYjvr=sD%22{X^*M>Io#ƺeɸ,زEp:z=s^~5_?W_rPpFFpihÞ]E?U{ou+bk1oaC$ċs68ʃ 'vV^~5_?W_rGnD]#A1,(K YA4nӡR[3,Yʣd2IɣOyw(x|47ş4Z_iYTsOpM[GI< 1QAPSIm}OB?~7ߐOpô1z.oƗ]_̾DE/V tV+لhkU9Sl1A;O?? g:XMsg=FmFDY[q Nў=֦{.^۪4B"v|va[i=oc?XZֹfoӧ..aP]v3uZ+eu,f629DDeF;@>ԯw%^RQﺀ,a[i=oc?Xơ@q" nb6Nijd1Nؔd,ڴW[y\$yMEmGU^4cz.;OKD}ݽċtN1]=c3GM]uŭB W RI0&;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? g{zIb-H}=X}9"v'.r.ikOpHI*R7Gb:+;S_%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@cxKlU[2TcmNUn!Y>jzԒ|ޛ9V Tzmٛkvppcu`r }G нMxo+iv'5[ED+%̪RK q54>;aYKJ嘜=$_xo+hC/i_EC}φuopK舾ȖTX 1x8=W5I7Dۣ ІpyU WG^ҿ ?&C-No+ &F?4kO^Ï~^ KKtM"߱s ! нMwwѬ.#nZ,62♧h IG;$j8RK1csϵA^ҿ ?&D<7BQ4Z-X;{CjM Q2 CM" {D7k=ҹU$X`Fj_D<7BQ4! GIksw9yF,Nr39o?j۬]̶688"{J(? WGhww{_yvNIB7`břH<'D{w[YHt܂IP. o^3۽C^ҿ ?&D<7BQ4Z-Ou鷑ܤUFY]XH* G*EC'lb Y"Y>/m+˻yln'#AI^ҿ ?&D<7BQ4Z=Ooiۤ6]Wv, ĒjZ٣ݭbXc6׳BJ/Vxg4! нMZ=ѹnyQ4|@<}MCiYKlxcxcvÓ݆j"{J(? WGhww{_yEc! нMw GKil]Ks",o0@I!Ku dvɩ нMxo+h;Z=4C[$r?WI`3CH7YZXAȎ(h.1]JJނ41@΋$R)WF Pj: "k){`Q@O RIkٿ" ^TXesGʫ;z˳:gcg9jG_X2hd }&>t;o==j }5η>w*|m I%'#q4G_X2hd {;#C,[=F{#Vxږ͢'X&y>Ps,I 8]{EE'Q@O:(R'fwI 469O\К0]>ѧܑL&^,{!; G#/,??€ Nnkfe .$EXlI\ n =VxSkLd$l @O @4Vw#/,??G_X2hYhd ?aEg="({EE'P@O @4Vw#/,??G_X2hYhd ?aEg="({EE'P@O @4Vw#/,??G_X2hYhd ?aEg="({EE'P@O @4Vw#/,??G_X2hYhd ?aEg="({EE'P@O @4Vw#/,??G_X2hYhd ?a#$XaAƐıĊ*C G#/,??€ LG KZ5RIӬl-m7 @Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@onedrive-2.5.10/docs/images/application_registration_done.jpg000066400000000000000000002204171513710110600244140ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex1313 2020:06:02 09:29:272020:06:02 09:29:27Alex http://ns.adobe.com/xap/1.0/ 2020-06-02T09:29:27.129Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************-&" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((n-Gf[ 6&9Kﴊ6ֵ&G=G2ⴧk6Tg;$w0OO1G|E@3RRtOu)C)xy)\c=]<*BA1x={UrKDiI* =[Z i42HY!'FQsoٕ\O5.l`&.rdmq[yG<~?g}_ ?e'>"^)?>-v E$w$/#rwf8=*"^)?iI)Z>rºmʹ48)'S|@pApLS@%FJaz\c4sWa//2Q/Lb^0J<;);c@3G$:~my[4vwthގx*9%!iI(OO1UtI>Isܛbh_s珦HE.aXY3&G<~?gk>"^)?iI*ڽ%+w'^]Kqsi 8x!G<~?g|E@3R>/2VsWa/?iI(OO1ZQ_$d_ ?e'>"^)?kQG<~?g/Lbzg EUrKFO|E@3R>/2VsWa/?iI(Ե혬5+X;U!B=͒_JoڢOeaxF$)1ݠO)mXoHM:wᶝgw~3om g L[Jw8.2 : +UEeksrnb1 ţ^(`H*FA-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d>F\Vf]>ڝ匲Bb* ҴZFsOFӦկ-)Vfyr?ݴӠyd4$=OMO?dݯ?̿y+?֮GD5 $du{˔C 9ʷ= 4cɩ߻_3G$~?WR‘Z,B+.c/DۻۜqPC.9\ZMFZݵnocNkKMO?dݯ?̿y+?̒m6uGXoBppqGN)M_hϑxY;zړMO?dݯ?̿y+?̒WXr[̹;2ǽ6M[hPoݣ݃Acɩ߻_3G= 4rGA/Фm?̻YHie`F[}C&~>Fx54/UPE^QQ&NRӗnSt#Bq 2ѷ*ONƚ ka U?q.QEQEH÷I o#VY9'J*.Y)v&Q拏slyؗ_݌kRCT7u*,H<֥J$eN$͙ZMEm4"o.fXle#r~oJ5vwE|# ,q~9BXp8㞮79+O !2B-Op=uZ0Dl8WKU͵ŝjXgC3Iǜc`WoEqz+$Imnm֮B$`! Z-[{hvhWq8c<(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Tjk ^KM70p0B~utʬbEJiڦ(Ty_PI_&;aw0?wU΋ɣZM >7AU+h{R(R$TTK[ieAʓblh}oMT4PjSZiZWUFHD.߀PI)7ڦ(TCEM >7AP@}oMT4PjS 7ڦ(TCEM >7AP@}oMT4PjS 7ڦ(TCEM >7AP@}oMT4PQLC$dr>55cƏ4:/?ۿ7m3L?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>551fxDi#=2;fX/z_SQ@?Kh,ޗ?8#2O"ƃg`MR$6X}=)gcƏME!?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55d?e>4Cympm" 0=~4}?Kjj(ez_GcƦ!,ޗ?X/񩨠~4}?KjG8]c84tGuVN `g^( ?Kh,ޗ?P?e>55cƏM Hn" +g3SS[CX/z_SQHd?e>55cƏMECX/񢦢2++譨Vtg̑z*y[<OY_K xؖms=+ʃ)DFC'2y8>ul j^([N|˒FU>V?g]MMwᛵd%ݤZ4޼1ls\Yj֙:F{-8ʊL{3OΡ{w5Īl59ʞ^eKd9iEp__xjI4>,BYKbm)Kg[X"Wx02f7 lnwEpT?&cj[JlN!S<]1PGmsԓ(((((((((( z(sZwڟ&TIxB!:*.=MH"wLq9 v{GfkӠ$ro(qzBP.34A)L κ;:dvvT,XrsT.<3\[4io¶mn?AV3iOaOnU-_R&{_S1|3:M&g2 h?tWZ O⵱qVyF H8<~tVKUҔh%(?t%1:W/'Se%A{㕟fA%q8=I<1KA,h2hrzQcip*~SӞAkJ-yslbݤ8aǜ zdQRknuIoxL(w9Zu"ZXZbT+cqYڮݶЍWrh業j7w;v*#"=?NUHt:K{ XWlV(( E\BCjL0D 9 ʥBpS@>oxln.|NS~YZŠMz<:Yӥh`GynPp rus I4R Xzz{}+O{K[ hmcU=r`M:)'tg<96ږ5^cg513QW7TO߯5A9!Dq=o!ې9Qb%FMuȸò% m^PU C:}euxzC`#HgZivAXR H9.09OkXm.rz{uW-r:q5vkx% 0FU\wVuzY7Z\F6ĥ qNNH<ԆѡHZl6@shY{4o#,7vr9Ϩ"˥ܔK.AXx=Gx'm:nCN8*q qKeaA@ ,{o\n!1)2U@9P y?iZ}[XZ3w8UY@<}WZ~^2Tg}_F'5K?5Ėy$cPIA*v篵ZD_j6]yP"7 qѻҴR[ k## PzXxTIV 8#U].+>lWKK'6S;cp67g~\ZV:ֶ72y2L#$_jA[os+nK>cmqyo rsN=)hd˧Z=1B)HϪ`~ njB8{}F8M]b7`lB[ROk-YUf-āʝ.>@^s]'}R v qӦy6K kYrL:Q~^?'noʆ[N펫%f"?XpyGUig+r>^}U/K;vmI%2( --(ܻ(f=X>'Tt] cMs79Y'ՁvBWT4DXM>Imb9SQz#d:No|XZu&wΐv\5+Y<-cKgvqsWҺ]S?`ݛRc֭:lqG l5;T`rrZusN\lybQE%~e0qJM,?Meo,|c3 cf)el~?SGai ʐy$`u$4[N-}&m%"'E~ӧmid^8ۯTh;[in'mDݰN'oah,?M>)RxRXC)2ȠPL\Gn* \d}es550O0 P̪Ǹn N\d}es55ah,?MMECX>?SSQ@~P?es55ah,?MMECX>?SSQ@~P?es55ah,?MMEQEQYZ~iha.˻N$w~~Ef]Lw #VUHU8ټKAw%-&U.` p69$բ`^MR{Y5򙌠BNOyzd+,Α [iJmIjQXSxfKx'[+m.A$29nAm\$5 ;@VT%ҡH3đA# 7ʪNAe'0bKcpíiXk94+:7X!@͈ԝs1|GpῳQ 73>Vlv{4E`!Nce86PH7NpkOUSKeB = tV^*Fyx% 2 RNcKlS})+&u~μmIUA| 9@ +VZlifK[y& 3M[7WQYZqpXGmBP ' wokf`k岮!tIܽhŖKE=MD m~#RJXgEsm+ }bahH%$v@Bxu2#XwgzYV%/-n o&<ǒKi#V^pY@pq\[/ˠE66IdC%̊QNV5'rx +R׮m t;{1QG*в4˯x-"ٴH.2$EV2OO8ߢ"<ǰ ݳqxLiEfY_qR@r;ۢ[^Vu 9 X-&2pA;shE;;wgΨ a4QonFOdfjt__-˺k]H"%$e S~MN^iehRM ʅ|IzѢ((((((((((((((((((((((((((((((((((((((((((/ǑjWmKhor9Ƿ5QZRc7 WLcf?g# gs^==K=xqEiVkP:.cSiwW:mߙvYw$`#lwWrx#SլmBױ]5*\g Ļ H@#>Uy49o⾖JGp")c J:?QZ&xmJm1(8i7vW p%&nGvoy?{wtP_FFGj\ߵX*peQvG`Ŭp&DyΌ*|LJaw 7am^iuQjl!{x]^ fKG3I,D<ץӬt߈7WBitP]|C]EQEQEQEQEQEQEQEQEQEQEQE^RS}RksyHX 2^2x㣃Y5D[,\6#%Qx;~dcXY]ƾL`@!2Wֻ*(o\gb~k&fnIđ)Dꥎz]%Y{QKyGh1=Ԓ y#náVCwgYkbFEhx’`v#ֺJ( NmuX/'&ǜO,^9gsJtkK!GZ TǧE`E ׽m*][r+NBW̶<*ͻ28i$p8}=k9X7tX"Ϸc!ޑ/gZ}I{5ݯ qCa8=( &9_R$IT:,@-3sPMjVm5Z$7vJɻ0Fn訠 6;A7W!T %"EnI$g=Zo=O<33~Fv7gJI{?(.fO*=L=Fi|%?Q@oBַYܛL{6C!H`7iZEjlMaɚG!BHFv0[~/]nΕy~S^xhg{'l 4ѠliKFF3m@n_L_ۥޥL)GQϐW =烯DV艾.lW2>HA, x{j(>oŧ6Fk`T>g^+ry{ is![;xڋ N٭z(mWլa.NKHyAf@iEf_YȐYXKa9%0,yZ(izeaMQqqh4_!'5Cn9~ZjQ]Orx6p.>Xs㞦WA^k (12OUېFK*][+Z͵WP$n1ќ瓜5Q@F6yeuaai$_ΊK D8 Wk?Gq 1&Te,Gv$8WYErz+ a̭֑SaP$ev#Fe8׹FqH[g((((((((((((((((((((((((((((((((((((((((((((]w+Z;s{wBgж8>wFmn58V c$J<省!;ӋI˴ShdY$T26 n8?>d3Eq Mo"KV(4[\J&@dH*4^i"Q hlvb0߆qޤ(*8Y}|l>#"$<+*4] pHʟ@')#IeDy[ljsp=N?$FXBHAbp= (*8YdH MF <0Þ#j*79IQe>Z3ρ%Q@Q@Q@Q@W5: Pr02'vXu;p&DX dӑy <{q\MU-N[ukk Iv` r>}N+0%?af ]w`vW&/xE]ZPyxU "%3r: ➖w ]?~ss|ؑ>S1GNr\Fn5@yزF}:Jtm೸ϝWtQEQEQEQEQU]^ȋ6Wt+ jij * ]K,e w#V4k iu퍎q*89>6Sm5^(- F=v0 Szz1gxT2h pHk1M}cB&{Q]n!Ah I-Ʊ{ue˦z=6w ɼ7wW)tVqGw4:yO'8*k{>y$vܔG%cLS;PgEssjZ]kS]Ǩ >H- *oٮgk<$"hW~Q@=\UZt"CiFVmʭ.IڻJ=zV gѮ6k1W͓d>Chqj0.W(^ adw=y ֋enǪ=y6DP vK}NG+ԇnBd(n+&[oɩ_Mim#Dtۥ BcݱA^@A4ԭ,`XH徹&B,*`1e ) Ȭѝ8}pk"خg-ry8JҴi~4A]fsFcdUpzdɣ)"WVF|IyTiPnA3aimi t %iff'-6~bIPMEpk yaH;+(eQ%8zmioK$.qح: q8y#KT/H ԁSIwxYԗR [Gȑ0vB!rO-%մisxη̪UO73ր; +ubY< p%im$a:I+͕ [5՜!o*E R:A8=9Ͷyu=uk%۸XIEkE=՗;/h5P N>\9>-.--4,Ar sVRΠMmm71#c, FK`sUFѯ!{ y3KuKh 0\dp}duv= rScv%2M[mOITY_RوU9Lj ุd,Z/I3pO^'((((F:6ݴ|!rL*VKQX]xU:?*F=4m١ ةrT;:VJK 6+i(G?94:4X-QmIh BOR|["}|I o܇ƛcmf$o ǻ3Z ( ( ( ( a&YHfU(8@=Rѭu;H/-؂D$C ^VQY63Zž\pIlhR0aZP H?+ǿn/AҖDҵ }CL6VI'We+8#'P$)dmѳ(%8$~5R=JR}F-2/d9{Q#c%zk7WV:}C znX[đF3E NOޟETt/n-gSq$*EQo֗W6}G7 M-tP I[uV=w#:zU(,,:ĂWP Q=C6csoqŝ+,|7uf[Zkm>pUQª601V袀*Aڄ\ Mq*IӽL֖4#rx>3?ZiM6SͶ93rӽOcYiFgogsıLt4PMmKd;מj"~ lP= +RdEq CqK2:V>}sak5ݸ7B$_[*Aڄ\ Mq*IӽL$r"A$wzi ccZ[Z9%R6\9>DB'gnۜ>O(IBM2ͯXnZLn8w,T zO ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( NmۙbK8>Z`G:Gb GN?겪I{!urxYm>@>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVvEt Pl;d \49gI( \pHMcbz }(\ӭmkQñ^ `~$g_: QC,J m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| )<QÙEG$N핞H:(_ H(>/M'Gɿ$hziڭ&R;BujO?~Iyo?L{1kCŸ31ĒM[>/M'Gɿ$hz*?~Iyo?ߒ4}_O&'<7Mg& >/M'Gɿ$hz*?~Iyo?ߒ4}_O&'<7Mg& >/M'Gɿ$hz*?~Iyo?ߒ4}_O&'<7MImwLxEQE U,Uv!T}w,6y$cŠ-Ι˽:ԁ5ߙ`'s]TpիaR:=&߉bLN"q+b% 8YHI^;QR0((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ej^$(l.>%R( i P@'k񭽔u|{F>Va<=Q+k؀IԀ$ xizdMRCy)2'=^UݐB5#P89UKK~Ɲx]}6d۟<]EpȎmR8)W Tp:;+m{R]q[x ƄS.<9ugIӒQ7;^DD ;Nŏ@s ;Sy$ 7s$ s̉IseI% (R{[yYc$l"2A`v4W5MAͦQnOeDT߿ KpGc@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@?ER?EZb>_63^eYew⫄m͛x8#5%坾e-+5RHp¸TKֺeCql#0Cs^J;]7]/H_9hQٟyoM{)}⻇M߆t ibL%sI+YdFGPH#Ҽ~"8VVIF[s$^%Z0NFœkcBΟqkzgG.# AL~ڋ+U0a~c_N8`n*W RiΛS3c$pX鹚5k&sڋ42=Ҳ;Fg<[wXӯf64OWk͸8Ci:sI_F¦U^x ޙk61gntA!`'L Q^]>^m7J$ۂsnݏuoV՝<)DIqQff-1WD֖ZwY aPEijrj0i֑J1%@Wp\ j½5M?k{HA,l6we _y$FF9ҮO嶸O>}R6{GJ6cqrn.,a2J垩3tltovVPn-[ıO|(4@ud}i5ծġe0` jks|+c[˓!U挨'屐9u10=VV<<f$TWۤeu 9t{tuV=H`Ͻ R ;EWWsLe*2F=y鑜kȱQ8J0O?yz`D0#hQ1&@!t;Qlדbkk04R$!>U* gk.y+lFw.Iʏ=uu{XX<^K;^O9\[^Z=ݼSȻ^P20*x"9k ^Rcin"!ܨcA,\񊭨뚞"O3ͺI.¶F 箵,,R4X¨ 8~B.Ҭku+ P`C}0L1K\D]r>#X]|T3Ih$+`9ݾ][ƌ#` zj&͖/h=@rUn-V|7Ҥ1d0xb\ ^I26U!po#h<|´5oKn[9M(OO:c lm'x&H3F`sFstEk7ssm "Cm?FNw)* jY+3CR],xxBA t]e-Mϔy>Ҁ2,k֮`Lm e,‡||Vw#f^:A T7Ǿ-kkv:nikxyrYܴѕx׵-VMI+b498B/EG;P?/5#HNq2C!&cBYKyşH?QOy({7gh$e0o;v4t5l7屓#d[@XC(Z^>Qڀ0u{/]ۢ,HR!XNPYF{w10EFb8y]`cȏʏiD6߻/4}7Pӭ.ď+619847u8\핣R9Cִoa~2"2}rC~O'eK.ذyc ҕ-[ i]%@Lts:t7s)YLg6@1麍ݞb mn-3F_9]Fy }t aީtLҴl-m.NgUS Sր1//5“Zck4iy_x 9vqj[\\/d g(s 1] >=Nb7 `)Z]/ 퍵N7IaWVPr9l|Aj[AYZ^2܉ZxDrr<ÏSڤl'ONKɣFc#: 2Q8tuYTDd c^MZ{u Ek ~Pݧ5<>P*Er/ iW-cp|u^k%-SM0#+ĻG KFH ۚEb%m TFGS߽-Iug[J(]$ykRk?Ꚕ`Ym|~dH79ޯZ>Ѧij3%C|9|k{KyYH"rC@wm9\=*#MOL$ Mc\|pzQ bve!  1/JӵWocL)U>[2$v8SZd , 9-G-ͻ@`l`rrr:ryL}M*i֋$\@ɞ9ϽYkx\xcb*TC%SVPo6%f;fGp"OzEeb8 8S]C eGqJj@J(˄H99qJ&6XLӽԍdPWp;adھT{5P`Wp=JڷtXO'Zª$xN/gkka9IaVd<8ҫB;nZ+p((((((((((((((((((UlZ)FEbNF2V3?m~^XE4UQ>nRҧx"Xjfl`ʹd\ -ciVvl#TD]4T#to&JK2ζLO}MZ[KuƘA!Tz¥3?Y@66>w$VȪ 9UgjVPm"g 1095,VA'6\I$n$b:((((((((((((gƢ!|cG7"Ոi܎oQGޢ ̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (=dĖ^ӖJd(7αH;pOhڍ7?& Ib n@Q\ ;[H|[;4d0[Vc)9"@{)u6՛AfotI.bC \ utmv4܋M[3h I :y5%qo_loTЬ1YYF` q~6-jޭ}zK͛hlEX w t4I"EI+"p#%dee9 B p6W7ԦYñ\+^VtOq]SԮᾺ]eNiBYɋyi7);Iʀz79\\$z,ʺD]]#A((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:Ƌ{Yjq9*}A*'u%g <9%u,G1}S"ӏ|YEu*ΣȧJՠ1WHʂW=p{fՙolm#K +dr$ժ+3B4c#YMA_/+n1L ,B2yyc\5&bw VklIA|տOU jv*={TPK}#M0ZiBcqB9pOӓU>hdbG\`qZP74}>՚(I`#.uqmqu5>$+4?2JEBlJ'`҃[((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()M-,͵d}Cwj #깪mW*6\l,7up>ڴ+дI{۶O?tx?^SNX.Go17~UUd1|:79;ZX|7 [띒ǥn#6U%"0n2A=C9.!Hicm0z |AyWZc4 v4%@ހnv8O 3I]VeԮ-ʠLx7 uwtֺ#ά r &A-o&7E&0K#."~gw^ZiQZCnb"ܡ ̛S&:+ҥ5]k@oX⽍( oouY<\B1O#֡>FjROq5EAeai%k gl0F<)fF[eu@8Ң)ϤiZb:u*VHt㊊-E͵0lqHҴh shmƝi-ͨ FW4۽;>Oˏi!V򑎼պ(.kk?"ѷ[u žOOZv=AZ͹cR}psV((((((([f?hw/@.w}ݹ;w{o]MW4]WOP.-]Fmi,^OuBծՓo+#1_j:^x61Cjs1*܂C#SY&xAid c,b\ڟvj77; +` g *ƝK2-8%a@[e;R[[u \1T|sj6vf0q7 I}:KiPiKt# 0~`)Y%{ ;pdOj|!YgL7aqm$-ʡdU' q5߆-?H}F1qvې4">Hϵw-ns`_1 t;,WJ?*x+ÚLG" ߻'I$5mX7[ڸ{{[ۀFm׭S.m'SXf%ZPbq#ֲ<0~Z+]>;Wew`( NmN=>ͽD٤09^88=?XhC{#ȃDH߀z:LkZ<{cԑ*#sϥS>ӛN,e3K+p vh'VGltk$.Z,W/+9LN:]b+k@o˒.V"1%r;C/6}ɛɿG`Cm+lzWtBh}H/M̛˕R3?OL(}ជ5{Khg@ʹ?*H8lIlj[\Wv:`4i]qvucsV|imGGQUo$Dqެju/k."ES*FFz)|ME\K.=zBk2FzFkJþ'n! ]g/6`ʝQ@5{[OLAi\6A zb4((((((* #ha iՍN>s͸>=jkDQ% EoJm؋ 0qkd(Rw} MZK(cOdNU唶vytW!jZťjrjrBʕǿWnu;MZQXH\,/+GuۆzҀ:=[Nmktw̮~S{[S->;1G 4i7"r{GJm%`I#TfVB>T=`/^j.65ji"hcE!6<9O=1Һ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((G4MISq@QPEyǕy|gUt=.,mI0Cd3qMG-ӭ"xU_ ƮQ@imEod[P-x}SQEQEQEQEQEQEQEQEQESe8ci&upQ^Z)k;gU NMERQEQE!`x4S|toCїQEQEQEQEQEQEQHIc:.O oR8 VlzǙ^WjI{[v-ddwb[k u'$0A^l+,~)j35aaMzMjn65}23JIgQ6(((((((((((((((((((((((((((((((((((F\NAXhVD!s#{ފڝNDՌSi"m#LM)#8"THbau.]OvVwPBrnį@pǵuƚ4#yd;+__e[wLZK݉dnNs?s8hoZsiv101}؝T`'ڻJ){u/ ~gxweZfq{,q?J] I \pqi֖~6A"[q  8s4ik'ٵ Nc/$S+KwfV݁I[#'fj),EZ_1=Z_!xQ('ErAEPEPEPEPA84V/u9p"[o/\^ݩ6K'esN𸴺r Ho*zRԡ6 ɹKE\H]Ĝarqs^hڢL"&d⭯u=ʍWQjȚ~Z(mo CUc x̽խ?MN{S  `J+ӛN .mQG_8#J.H-$sMh3^{.V}6)&(i"1u[y4hgYtk2+8@wq,> huzE|h~f3p('&xn{iRhdH2uiu++/u 9"H|q.WpHۅ: /I8"Xb1 :0 y";J+:uuokAzElHD\ auPOڶ=67Jj,&b+&A>CA ;@:J( ( ( ( ( ( ( ( ( ]Nf(]|/%񦮳F7$~=p^epݐZ/גV&D?$cst=7RoL5o}ȿ+}O%(G+C*n\w}kW?畣&.-v޸=Gֺ:&㺴& !k)yc/I|aXy)EsEKUQE 6S]8P# -+P~ zN6g p~>)Q 1uM>6}>2z(#I WxwVbh~Y/#qWIoG#W twi:<^Fv0q̟wJip{r=]'mG/xGs=1ֵNhW#PAE hq@he}Q'̋OOsƼ5m&?KxgB5lWZjizy7-S ;o좺mLxͩ-{8Z{Ț(3) I773- \H SI &ݑ#AWj4+ɯP L! {RYVo/wwRJq]]A4)8ں/q Hw,k1 ju2B|y<=RY[o89?JɭNLky'b ώ5u"\M}QhU'ᶹ|V^sm\\FՍa|γ:I"$yy϶I-{l!c=wɽe`c hZNr{QEhzNO[VBC*cx^~? /L׿eY.NvFIקҪ*,֭vǩj?4?+웯K '>ճkqxM7D(W z}k/P%r@^ܷ}euV/!6W],=;sb13kיEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET2I\nF i!U@9PzKdF"F2 "I $1hT2F+jsSMo^5!)4SҢ7\rL2݅WYZUYj(ўt]˷ :贽> ;{ʐvnFIIfel38Nǁ=_o/?22NO#<8 Գ -32 H~PNrGs}\j'V4e,P31pAG/bH4Kы*KRy$8&6dSo@ `:E}נ*3'=݆]C3Mz.z:+s5M!E nĚu[;wR3G#izoٮv*\11ړ_e\j}cRɒTk~yq,]2#ֺԯb576r蛣 I鴱##nfKM l$ Ѐ0G&:ugnaBIv^ T&Ԓ=6-M؋].PTw@<[FK+fo<Π33*:}0oiQ@ۢD*y@OOSR1*hBK'>FJœǩ_[HJ6-1R~Nqؚޯ i7׏ 7ڇ]zepi֑ZB?@Ki3Ek6e%9{t)zc=>k _0o5+xmZ8d*ƌuf :>)ծω-=ԖSܽHD6B OںilVE6m >p>qQ.-^c8|qmcӷ鷺9KR[=&{׸kٜ<^Z*X!F=TdaIg{4}Zɩm]6p$m-bTD$@<2=:zN Eڣ܂'eA>oƇZ*SV|ʚ47].t" F `)Su>PYiE6>\\TڔFN1IQPXQEQEQEQEQEQEƂ'9^$i#* \획d3m LvC,vWbI<1񴑣m (%8$~5rY ෻@#d`NEQR(c+T AS `x㚞K+I|6G.g }G'j惤j14+2ygGw#3~4m1u?ӭ͟j/gm΅^y\Clsrۣ,GGU(&v&iG!( uŸQxm2-H1i|SaXJWgjEQEQEQEQEQEQEQEQEQExhv{{`;lt4VN̪ҧZ<­߁4­߁5Q]_Oil,oRK,X\һ(zVwuҠi+QX?|Y-.e?4icpB\1sW?넕<%7|2/i$Z E4#?CK4ՃX5Р<oxս^4KӚQ^UbS\u֣w%ė7fcMzݿ"bMnk,CH*1aQ#N@Ju HPFF y`S\[5 |No"ѩ]]rAoPItaU$}Qx'DojAF7/݌,`{ްK}v", n-|E |:DnWx/sZ4x5u/%bnvuN~g5;Ro 6_Zj!9>n2?H& *ORd;T_f?}Q_ |QEQEA-Q-OQQ;}*e'5J5[{&pUԩ א? XuHSd[1u+ "s~>*N&' ONǐ_-]6$@Jvyl3^bfy1n𮦊Ҷ>j~{GFOi Š(((((((((((((((((((((((((((((((((+@u[4XݑUb6 V1ɧZsG-ȅUڮAGzV9H"ibrvQ.K۞NqBj:nPwmRpOѬl&47up8vjӍW:U%ng9>թ}pk(tXJ._v:m# ٺW~Rӌۼ5}=嵗s\o*țda s}+H{K6l֠Ф bM,Z l)|+fj:}&{k}0q^^i> 5,uEʋd1A{dSijj8Xf%|:uW{<:%VBy"Vs[^WhnSYy_u# +:jsms}%ŭ԰Iq1T=}+_DSTPԚ/l>Cˆ"&ӿ#hO,PK.٬grA*0SrG:ulgkMLWemERxAPWVփ\ u@Q@Q@Q@Q@Q@Q@Q@Q@Q@6IR%#`U{'Vk37$Mj26=`֕m>wcր.QEQEWx?Xlέ8gO&!hj 'z`*y_6&QRI)C4{I)?@KmVA%jj#4֕<t=(&wLehr[2PK'w*JZ4Q\IYQH`@#d{gy'RQ@}俕#Z[xQ+EMEs^(VnM'nfmpyy;W‚y\tWM^7),l$"Fݫ٨aYM%(X(@$*rI\^໎k2}_\z~us:ǚѲF}+֣=7qFz<,~*OReF=Z= f GJͿGt=:?&o0f%zq^oqݴs۸)r+xyig"KrJ(#luah 8oF 밞Im0uGxdjJ}C) dx"of\Lj.嶆8-+~h$,̓߆3޽ju|jV[?~[v9kM)7Jp}ߠXҷϤh'͹n y 7xbBXp;v+ kh0Õ7<Ԕ_EoQ^A4T~8,-Ii%Y 3a^r>4L.bI8 shqWP>IMc^ji0,$ Ԩ89aOOD :y\__jZD0rhJ<ώ\} *t*kO6V4=wU1|%+_i\w1=pN8#Ƽ#W_>vqkN 5^igGkEW}(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE&/ĒO/Aup"`C6!fqt W$mO٩N6Zm-'դhekIg @b/xOX&5_*(H@=H|T/tm,0wV 98^&},sjW%EmaF\`sg?_zlO}e5Y3{q܅#=W.nZ--(!m*wq5WtA۷nnyj)<47W]C%e5R"BYU*FA9QI/f'nB[sfwlldWjsh7Q\6}3"s"n䞧>q"&IʞI"1RpCgʗ#K 5yt K+ k{˩bOV[mV&y.,˜vFKdAɧϦ^G5ޓ{\cΎ̌@`*_}9V;dv,w?NErw?i^%{/,/mZQ)]x}9#a՝ScFg X=GP~=ٌ) {,,|VL,Ojst6XX4VR7)brNrsE_K3y._//?7S]DN{Y}ʱGCWjo.7Km6B=*q˖ ((((((((g^0]tny0}s]5y)Gf1I?x>1ӍJWVˊ*t1"B(oL5bc7+2ʞ=1^Bۣq8j1UpTi+8IU%*Gonuw\Y>F،CX|?E8`5X @60.q#iEr :Kfʪqv,s`ƷijfaD@QЩUݟ$#Muvm$)"[FTQ9B~OzmOM׬QObȖdf7 L`z(((((((((((( ȫה5keI1+ Nj1 YH^'mz|3 t?VUmN>N Ekw~<еO hn2jZRlT]^r3T5Zh0ʽ~\s\Gi-#%X 2+'R"iRO$ݳ~Ҭ)Fv,J~=+gu4B]?!E(>U/WM'vd$cFU~gӴɤg}YY1=M%PEP^k^dJ;iqqoJ҆($.3j?G&𳷗ެ/<axSZu'G؞r>+TɳP$d׎9[~i}|nms$!r (=kxWv,Q:( ]V>vE:qMꭢ t)2bB "ִyiekF3FҼ{M靈{.2ʏJÚ<|ݰiP>UOSq+_?:(丆&,pTխ;RhZCR,oPqVMԒHqCy-ܐwp:Oq[iuO%] )O n%hcHD@Te̮hisW,%gi5% A 9)h(GuE˰QhWW\z1Ȏky|Tϩ]ay"!X+": W_H| ?԰d2r[8j,*oSKo[Q=|;VHo09e4Ty8'TQE|qEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP3Rp'dzEqktXK?#,;j #dl7ҥվrpI3jJ >o12忈a[C%#\ qr3C7@2zsV\QnRI&JAv!A*2qYhږpvBy|ˀK#F$x!±`dc=xCX-Rx.6`)/?u ‹{Z ꥷUu'"X O,mzOZM,[iP,[H#!v=N,Z hKJ1RDqKd oK1?ȧo%!QJAySkJײ_ {)m+m300a!8TqӚXwɞT0}u=k~ūӓw (4 ( ( ( ( ( ( ( ( ( ( [[yI&)>:W{TQvs6A jXU$ǩilE jZ+(ѧj`Gsm崖p<Y"+x"t*խ [(hXԓ@n"a3n8JFUK;h%X 1 өSQ@lG7$T_4[yR~n eQ'\ ( ( ( ( ( ( ( ( ( ( ( ( (ἵh$ )T)t" #d=bE3cH'*S+jhuÎGB:i'(QW_z/GkEw5Tf_ʀ1}.Y屻Ex uM+$Wf_ʬAfoSڶZTՑÉJm2 LM#G9 c$jVMF0vAER(wۼwM1@ ܼe U=lCs?"ҞuouaNx g4WE:k{5\:f v>UtGkB33u$W_z/Z4V238kw~UrV/}jJ*K ( (1nj[)%I(ʱԢ1OԖ+..)0m!sViqe3Gd-Ն3#`% j7NnVj/Bk=[1W60 ¸=1;p<թo-,&2wp1s==kM6ohA\ c 09YK˄(#i;I=c KGiGc:h}6k?èZmg)Mޛ5}5~2c}j\;}}17-%t, PNp9;Xk c12@f~yxak_wNͫifojRc2lrp*Lt^{l.cd "n>\zUԷwryhuhYA'Ź;IZTڎ@tsnR (3A^Bj% j.__2:JOO#R(s(((((((++T t] KZyE41iY>"=uGX?ƶ4u;yrgn#Wj(#*6cQ:+ԼI>IĜխl75a{j訮s6MC\4N6n/#{%  Nj:]J;<[@ʐy$`u$y| 9:bjUlXX[iQXAv $''5bTLiSbc$j6܅8'}>h֦Сs=:UsgΕm4'99Xd-.YkFqp8OEW cgGc`z5H[;3i) l؎z\`zբ 66oM,X Pq=PEPEPEPEPEPEPEPEPEPEPEP;tq8+çyd> :T>nbK Fg9匓@Hw0Rl}OS6Cz&V pO~Y3a uHd2w*ͼ,e XsZެ]mmGuIGrK_jWgEKd;T )Su_ j-," m`rν{v2º=sm#n$Xۀ+0H@6ku[VeP'zqֲ,l\[C=}:e'Vv*( 7\va7 (>H >= tnN~n玞aj5ɲ:v/ q0A*&q{xWMoڔ!>=ЁTK$lY N9<9_hdΨg$E!99*Y;OC`Ȑ[LSyYpz:P%o?w8x$9MmP^Z}VDTK;%]@-e_-3nu^]KH+wٻ-\7;cשɦYxgK?aq3 po'jr~Q@֎7l. Hېplxemw@Z3oԔ#<Gk2!X7721&E! eY!*;qzu<#uwn_CwV۔I8!iz[RK}7K66>O*Li@g Vɷv{3ƣ9e:U[dxD$&N3\twŗ򾝩YO-lc یV)=(&@^[#CILZ53F^{ewE$v-I8KΙmܱ^3;E 8-ي {]T2Le=;jZ%=x.$q%*r:P9 & LM*A7rɌaǧNxfjZZAemhVhFi%/sUAֺk}N6h@vTڽ{n/dۼgvp1Ҁ35/jPGm7 og%ġȌgq*57qi5Hm|持 hXz>Mٖ;24_Nk0q8vsz4M8K-VbP"g((^ha[ǵ[p6.2$Q`rs1xTm-b]2G67W@s29ؼ|ΊUv` Ht`˕OjEƒNNAt/CrOocQ)Qy[L[H.ah^|Ȥff$d?}# \XX-#y-c%w+AeXާZ\70ƯzRWqXPr9χX:3M'qtIpv/ AxR hdR,P#s [KHQ* ی>YBs0pk{'ÿoU_1IJW!r[og B2*_ƱH*xM-ĚRG2x ܂91@㸴t.&ՄQǕ#'XQG'.˧qgikԒdt-P$܁V#8]BxՖK LӆbzlxŒdiCC gP '4{ڄP$+w "hVbx +IXJ[Nן;`J;:U_ YZivq;Gip.ga8`E [?+-Ԇ lvAӥeG9ז4w GM˹K\3);]EܶLE!#yWd`G ?U'$$i]y;qߦ}kBJGaX/ ph j}kֳQ[ Bd0ːs7b%ռRG$QMϚ2W&Nyi-".іvLBm拏 !Y-/,nVie[ e9uã)R@ s@i:xNH$[cWn)^&gd""%$\Bppsx&<Q̒˩Ff,@,Tg$#vwH'oVv hX|Ar1VAzn'Hn ufWV(*9YyKNK{4\ykN@'=*F=$޴71y$RZjH$77S ]:4ep9;qKw6B +DbbϴRI# Bo5]%)حd2 jt7w b$` `Gomk\%лiy |0{`P|`c+[o RIٳpzjhڝQQXT0*Tu) {սop>W-죷FbLUB~1#[{Aɉ_˙ns<~nbL">Z[H;fk5eRnd] 0G# sn׷`2(2$rG@qKy5+% {tE`Wb* H$< Sv- ke0ԴiڦJ:u t )1r矔 q[. ]Tb`^Օ3[nH @sڽQa~MSf`1߃j_ ]-jmmx}6,,kXo-dh' }F@d3𖱨jPcI$򛧙mA`p+h*'"m5FK%m4LY7YGB{N.}3điZƣi&T28ەW@eO`QPږjR=|qVe^hjrj3 m {p<ac{ח].. yIm rʻ?($Pڝiw`o%j"fܨJrCo-zUǕ{օgٽ鼐=46]Cpz/O{s5彦yo8";cH I'9zUMk4f[xn$H6w*8ݜ溏]ޕ3]ƚ%36F8OOP FOtm[B~Fm}I$噏rM^((((((?V՗KH^Oq' pX0<ӊyh1\-k%䐈3˂H@QAMclfE7(@`pAYȬuPW6Wځ7]T dқ] bT2y:[/GدLvr (E$P#A$ÜcԊx^审ԣh 6 ARx/ WGxM=aG)R+LzuqDj_mqG((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((g-#UF%˿?U.?Uk~=k-P$hƅcL.˽!&G5Vn\pA*FA 2 $`.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?U$BQ96!\~EQEQEW|au-.=!411`m19#^_ _=d^+"'BWMŻM_2W/j' _=d]ؕ?TM_47PG;:!!$7Rlu8+? hŨϦ诙?+? h_2Oڧn{S?ƏJEAO$?*:Ϧ诙?+? h_2Oڧn{S?ƏJEAO$?*:Ϧ诚g-%α̡U$Ҙ($1ªI>ibԵ{r3+y|Kh&hֵhCG>L_2OSп#>d_2O{S?ƏJ΃j3+OJEAO$ΥG}qx!0+~pO?+IrNF4zW=.( ((((((((((((((((((((((((((((((((((((((((((((((((((((((}t{^vH2՘ /Vcܐsφ﵇4XZˈ+3<˶[ T\ɪTMR]_GvlU d).3+xnMgIF?.=H>jsbiZUCa[09$$'js6xV\^A5DCmӡȪBC`vdYn.&,$ʉONqqZAe5yL$LOQ3:`V%]Аx&9k[mmM$"d۔lo0ޝ9.{ J4MČM(ֵ<14Q[$sFaeIzc\GtTkY&KX72*e =P6y՚gK&mk6fnF޹=)>./. 9ei`X.Sٸ7$yL L`Ów ֗o ư&fyd!>wbpǷ4=[dx㼙b%yAz 瞼1qjZeA5XGrn3 U:քzֵ!]3uNA&Đm'Dz1hZ9'n Hly94Ʊwd$۹Ea&ݪ<yVmFK[̌\ ea }9;֚5Fְl1`O9>?RKZ%MJxʧ# ق9gk>y ,J$Sv𭵴P'ݍ  ( ( ( ( ( ( ( (<iדWp:j\?͟ O6 tMb<>%^aS}woo5C8ıVAƺq]Xg'zʔ=7O-ZˋkXE[K\IaI8}+5 ^\!03O\q^-^V$%E' PTo[0-JZZߗxcF21-]/yGT^x_zv8/P\;:SO^:.Yqe_*းeeMFm ۉFG8zͭv"VPOMzbUJ7Dϥ!.(tw$[pA8#ӫj-pњHۙ?NrG(][QRoH"fctZ^ؾJ_r=6hZ[,텨s b ezUH3[y,t6/<ˉ2<+8s9 zC$fʡ _ȧ~]CzT:rˤϫ;MPrN9f~LO;N#;^i V6JRǘ}[uD"Ż,<=J>W/_Z{~ o iI[ƲV{%CGpzMoUͩInak(y:NpORkZ^?c+ɫ~sr~h?QE|QaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEVvqpcAI9;dz-Ȅ,b3ef2sv3Ҷ)ӳ&2QE"(((((((((((((( ׺mǨ[ݢ*"qkQVN*ɲ8Iݣ'OL8E<;@3 ֢2t(Sÿ??j(?*E<;@3 ?t+Z=Ox{*ʾ'OL8E<;@3 ֢kSʟSÿ??OL8µg2t(Sÿ??j(?*E<;@3 ?t+Z=Ox{*ʾ'OL8E<;@3 ֢kSʟSÿ??OL8µg2t*햛cV,D E'RrVmS] (((((((((((((((((((((((((((((((((((((((((((((((((((((((rEk| a ZЬOyC-DLX~쏨)rwds}WGcdA)nm#Vp=GjyBuxr}k8TesʨVtCn┻44,"Dn0%%FGqYxHdh-4Cq&1ר#9{XndMdg$ml~ h:dWF@-HzzB"v#̹eq:FXkIM0IhE5'mnN% /5Ē,BAʨf! |P Ci{\.1M7Q OHgrdkB6 fm.8 !}>\^Q$H Nep8YxgK?aq3 po'jr~Q@Zh6yw<0<1*2. `u㩡ԭf[ݡ]Fe`1Z0xcJC46qu,υ9UX(#;A^95qY5H.%e (8ls'cjZ`lU1K.D"/#6źIİM&sgo#o͹T֭uqpЫIs1bHt M/c=K- s_M(M+s/ی`c j֗7cAlex6565 2020:06:04 06:37:542020:06:04 06:37:54Alex http://ns.adobe.com/xap/1.0/ 2020-06-04T06:37:54.650Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F(+$k%E(*H֢MO f OAB.!!&Eu9-Q@Q@T7HRm7 z՘4{h"52Ϸ^M%QNW31TA4* +]cOQ\FFzFKUuKF4{8de#?ji ՙiic{gIo;T0t*q=Uu-FJ]Esq(= 'M#Gsir7 s;OU`xavoY{U;rYZF=Yr}k~h/yo۳'Ἤڤ5.u%_kp%%ɥ7Oj d+"'|Jp0I\[Xqoywg:ܽw09; JSi'%[m#ʒ!9բ)Py>CfЭ7hZKrb6hHlRIexjz~OOXY΍3tUO&2|wc Mij^R:70CP8*A =7w"բ:ySmUPSpQ3()|Xxej #-wӎjbR6ic ż>n19t뎕S[zaK̘9ټs8jxN7` vn#+ޥwh&)^P-F\`&VT*9 1r,`6cR٪VZ^CnĒ (HI#ZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV!pAq'/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kEMEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErSTƣ[뷚uƖ@wi$*_]'Ē^ XE = Pq Xé|B'MB;calow=HCKI6289}ީ}]zugg41a!O!8Q 'ue,M Za;g׊g(їE}ZK7$bmv$d0˞M? \Y_cy`)3a@\ 98:PaԵ7"F74pF@^qu6''$c{9@q0 3z4 mo?>6Y]~I5ͬ h*+, t:8dhcI%T%W>^=> 6خ>5u6mݻ6NhL0ŏ@;+'-b5&KA ňZOs}y7@>Js9ѽO:(KA*J Fq}pAl+67= |۱v8z:0[_}|kCo79;ʙ$DѬ40v8±OyuiokyJ+aX1+\܍^-Ӫ++ $f;Zh! n_d $ZVPza^}jW/^i7PMjf2p `w 56LA"`=ϥI\t뷱Rfm4Q1H>d;UW8 W?s}yi\]5O&EI(7m$;?Q\nbHmۍB;WfBX(,3cbk+LXt{kC9b|(>;wu_Z$q d9 8\lwraox-(˂ zKmF NHr:LBWq@[j7O f}zro+H`df 5jzvvڋ4ZIUvTW%iw&.+ob=AK&PnU#kr zZK4:A 40dѨ咛9zPmEdxkx~׷+nnB~P f&WsK_<,Pn vR16v9=Zcp΅9fTfPpH\,jmaiބ<\1v=0G9{}GT`ԧWɄ8i |#o5MClk lib,|BQXմژ k7T_ԦVL~aހ:9T54N2"wU'+Um -aUg[vY @ۙeمw8ڊԺκ=HAysOSbAmv~ɔmf*Hh 5~!K/x)w|- HLb9@XoejܚjM|-EpWa[`ʑy7Qڤ^\ܖZ8H-YT)ڭS\[j۹K!Ťv*B(q=wȦxĐH#td`AErzzvwq!vr4ʒ]H-Ҵ' <ŗza_,y' +Ե-SMR}ylRlA)xs=k!-%eh9cIQd>Z3_'t[Q 3NM5z=*x=ZΊo\E,HBH AnF1!1((((((((((((((((((((( ?\k\!nFHC>&ZgzМ6!t+ zwӥH# #*IS:`a6qؿk`}.#g'ɕ6Єpr9 |3s][]\8 $R؍S $gfr1VDҥSTL}AʼcGk/ⲹYڤY$$dWeƫiܭwG rץKm ,Ah:==c YhLb9z%+ [X$&iaod]F@Ke00ȟO Jc i hq1O| ϰl>ِG"c`)qԼ*ڦ ,*PnM7,˜)=@NzlwsbxMع`Dǧ\g:C{82$b2|@uFDҬ~-2d&sz%楩6[1ě .aBXB3*A=Vo?ϙo:(P'"Žƭyh@*|p8+MBm %:A湻jVR&co YK5(Am\꫕>"tXV5]q:*TymqglQ-*!(`99-'>^Jԭ8It貾z;nֆ5k+{89Nn/ZSjek4GC{ڣʂ;n8<Ҁ:]cHY+(ng*Aw{^io1h#Uʀ0'ZL[{Hb Snbv. $r:XdeXyVf8A!h-4-&ie쭤qD2n99t!B,1*Rr@p WO^'ڢgxf /t`#d4Z53+'E<߭eO&ck}&=paK'Qq29$7#+ @_zl3i8+sI$`Yv 0# v'8='etgK0]?M.n ܻ`:un[OUKIT'˒٢@1s\K#e5-8 n\@2=qOk?blm1q"yÞz='M>8QU9@:)zvm?{ HLeԑ.v3\ů]f .&ʪ^Y|̻_i_:|[ǧ*%u#Gf@˻'xf *( o4R4CbvA 3 36 D\4ZeH#GD\ǒbq 7}bP3< ! T Ƿ^yek=m ռ~ߐx5ZMGMtM؆ - Yc5ӵfk}BU&Y]`3ASߜRWhso2 8I!\\PIqi7vkwOo ȭsnu衳{[&ffUB<19=6"ֵx M_ۼEo@3 VbH01Ӟ7:!1QJ$ޙiiVfL.$0n61ϰ}5\. SiQjr]ki" #!q|{q _iQK5S7P ʳ*niZv QLTʓ®msNlm4PWVֲ[_[so($S tqA9|;imk>a%ͼ/j!>a Ѣ"6#F^De“rx4ưuekXYUXSvP9wgnLnMtʤFgcigQkۺ_1e }*JEEgqh[`9F3:qt|Z{ܯX+NOJEPд{x/4+m`[te ֖ҳ2%.8S9<{EP@ C^Wm y] ~Gڴ̶F#R[i>u,RO&cgsq'p8FdEs CsK2HH4M*{Km2kLGn,`jWO,4oiVVPn-[DOSfD 8̡@qQ>'4(>5~Ť}bɶD<>5Z]Iv6XX G;[4P;}#M"`6  H8 qK>ik696B?tuV <=coe.`; DުžOJ1"45舠 }J Lӭ!yUy~4YhVCiv2dQH=At($lY0HpHը+ i,B(rOԒM>tM)3fo6t֝aiPiz}hV=vW(((((((((((((((((((((( Ri2{~srIv1=jΛOɢiIB3CkZ˶ޕfȷlh ;fIbWNsׯ4{MKobHlA :(&eV:3[)D^%*y*{$oZ^[;|%m@;32NzU(&U]1y Q.H#5`j&i(@^ I$P1vTPcz}$ᾚ9upǀ;ަSNgX6"E'lJ$OSzU(V垦k^[K5ԲGuʬHA;@⧲Ιgo<gi~a<0)NZPBx_L]:KsA#+_+/BYT<9, Iٚ[$fXf${zӢ3-6Hn#`p I!=t8tӶI5g7\5vƋšDV0yW-*J^M,)%q#9`A$#9|+%.$YeegP~|ERDZ1\Fa%neY̌w_ʢڔ)$,]!%yy=s9iQ@`(;8p)bv#kI XTW܂0;ZP(-^%ѸW`Ix\qStE,.w\+uS6F@=NǛšb6G'շ.ѭ[Ȅ3px*VNQr6R@+c5J_ R5$S۵ѭ.倕!Xx'Sk^ϛB'h]^UE2W;wc݀9<=$`!Gc1hĒ ''|֝ueq;nn'$a-e "#6Z_bM-5D..@%N+*؋9Qɍ  G@8V vڑ R@|s"OO<Ԣ Oo W$tUYDp=kQ@JKgHpְ!;ʇnG^~y?4,{\ ZM˜G=xJ((((((((((((((((((((((((((((((((((((((([ fnOKYYTVpa[i=oc?Tt ӣk&7Ρ?AUҸIVw]v3thYSim\^]eq{9{2jIt6 "I.ydJ'/'Ҁ5;O?? gFʸH{"O$%O;OѢ.2oneTG%*H{cY"tpYu)`zwi=oc?G]hYv3ta[-ږm -Ԓ/#tv#kb ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (3?__>JѬ ľ_kˬd,N\+ Q#GEK%D{S?q){CHUX` SHzZc9ӌE[k}?|pFߘu$WڝxS鷰[k3y/cˏG2#IhExeaT2ir٥={vB\``LT夒<]NUD/5eo7_Mq9$s7=JWYUo9F@Hۉ@҅^fY;OtF-zК^G٥In۱sHf5c[m:ܬv@ŕ11 9♪kkME?Fm8N GZ+>р4 [׏t]Od G>Nm=M5R )-#2:pH ֹx{L}CYʭ)V` @OSW u _1j'P˨#AuNUiqH[0MQO€; Zy\q#E* ){5zBCZ@&fgM2Am=6VUԼҢdDB੍ A=hkJԡ4ȯE\aO2Z{+oMȌsjl~lk iX#0ʈv*_$2qjW[UУHJKgʀ: :K* 0Ͽ5=yZh60Ǥq,vraTb)W$<`z58YOl:)d1r1q@tWj6SЯ5[Tb$E%dipO9zIqj-T}>i7 m(άaprlc@UQ}ZעJIm6ݪHs\ůu[*k_y c.L~C)֖w_-P2(Ed(=sj>.OEn%6f*sOj^݋7J $Evw rpk{ x^TMv{zHQ\&Uյ/6ا%*[|naR0H=sV=Ro }oU2K#KyPg6e Čz(u}=o-E *OB{3I*C,r<-EV`C^RV٣i'OOI%(lۦ}?'ɃaЮ_O_^e3H$!d"08 c'(:}sD׮u;76&%cFBz<_νZǭͧY\F}YaV \zgPUEcWSռ?_+"Y9 ۜvs$iOD.౓V6Ďz1biu]Km&eQٜp]X` 9qRo#k}m4x'*8gnG;g=qY4FKH9`qY^v-2STUkY x1?qG^k3:͞{hdoufzxXP{Erյ;]vmf{XnXMyB,Y # 9=8mGĚ:wiml[^AUݶf##lދZi"Y"85miIλ}w_K9/](_ ql/l}ItsU4٭XP@FİvW}j"k|mF%CB;GRz~խiW ׫ʶ6Dil x^=8㬵Kmj׺m]:ؽb!vJPrbˁ]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV& ֝e*Ie*HLrYFݪGFq8]G9ePtT.fhb_2;= G"?j׺\m3,E*g1 :Ma_քJ֧UEsڴ7khHJ(vYI!&$:vE{,v=>1}Y'd$t8yKfʊ[^xosmk0]c9$:Һt #Q! }N?:TRmF3i!h|MshmȲFB2W EJ\l֢y@gD>HbUF*8^ Pܝ6IlHBVnSy;^oUKFt4V,ڕk%mX9ʂ$>WAg5*{-"pHv؅r8sPԯh.o%g˜l7~U-c[؋I/gڷVA~u%ҶjdبIVf\]Ykd.3 [SZuoC?DfFt}3*UR\N|L*6{[>ڮo|yzT߻mB:oI޺ ȥײ*޲Il~6M]kT6AST6A\i5Q@#KHtvKQ[75-QEQմ5HDH"2x:xurۛ`nszϡ5Eb-&Os3Gqt{xf߹OO }}Q/iTK.-KbXm$v':sxzkYTW}GN+V—mk >ZջF]|;rLdֵZZ$2\tsTP3RRQa=Ŝ2"]˃9vQEki^;bP_( Oؾ-u5Gq$3܇$`$Ӭ<15 c-& *" gkn4Xu<yV60qA ҩZxF BQ[Ke"D^휓Ec~K05N+DQA ާ'eBW5kx[bb Fi#-ךۢ9 'Q(ŝT!*A;դ ^݋ ɂ426л]`6=Z\jz关h*r8^هP׉Eu^}J$!Aǘ8%8( nmcڀc$I(<#!#g~-KlTՊyWc)lҳ89:cW_EcXr;k/ou N0,f0bUV4U q𵕌Z4qK; 6s) ;LViu,DQ+Fa@% sv8/+)mRԚ $o!70xfn @]@ıO1L;K*Gl/lky4yU**AV6:7ww& Ɋy0@QB(P2rrjo{漣:u-| L1Т1G1\PLgs7+sb?![TQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z[_[W07G2Stur"? 9MiQT$.nᰳEX- UJHc2IӬZ۠$P 'wU(pb>kpu3*yk$p*\ch g4sI>V|'ɞN8=B~}2YZ m O0VN1ҥDXTB"T`;KEMVAQ\Ayn]G*Vh6Cj2eYY[jq*gT WGOkӭ͎Z@2}JܞH)ǣEqiЧ%R6 І m?>&(ii@yj+of({ƚ^i%1Kwݣ6@Tq܊jMIi1$Moyq,JUI9 $tٵ8lE0^pTl0:. 6beĐ\&(Aٌ28\0'FrhF[ޓ-?hx34]7)F1r3uۻhp>i"1fٔ ۰ljew~cKQ&J\qd5j-? Y4hVexyL.:ڀ"%Cku GN01w-%}%lEnd6_qFJm#W|#M$ 4V]N#x T.owS ![y9 ^uE[[.Sk| -=2. Q|= _Uխn#1G3F8;dc' cG57V}"; ;VgL۾ЭAW>^c}0ID*Sn1v(ng7wۜڱuvm4aky6'w.X>6Ekjv:ƌ-m[kZ$t,0uV*A6*φ]k/l((BCm2OA@:=;-9+ ,6U$IR iOwEi.mNhDJF79Ƞe9ִf.!zaT#rW,*z+_ j#:N6[;o/my-p7n랝 v0K/d m sq,q<`@l{(((((((((((((((((((((((((((((((((((((((((((((((((((((m?>m?>&(ii@yj+of()x`2Xn*0 d~bEPEPEPEPEdEtKfbɼLmcl# tQEQEQEQEShG$VxCW=2;Sh˙7#'d$ԔQEFn!"ʞyM-q\8 (((C (縆T%#Q:(.!i!TibǘdddvI@Q@Q@Q@Q@Q@')#IeDy[ljsp=N?> ( (//mtG.a<{rO'X2R AK@Q@Q@Q@ O%r:FGqC\ŒTƒOOZ()OM*#J# lp (QES&+xk(R#UP:OANV dzEG~5_P{{ismꤎ7"[K$M/͍@#e*2zO~+^X]C+BZC&uĞj)Ehܪqa@$;.F. $'a󳟛; O&{ڴ`1h^h>0MVcctW&!X$Ree{P#ͷHDx.+pqx1GLѤ 6Xoe;S$6`4]/O{+ 6BK *J{ K6M"@F$2{da@\RKyQy\N< HR:zUM{Y )ͷʤjʸ9yt6RPbb[UAu o, m2)E,q\=qwv֫Py!}<[ V8 琄1@#jkZ-fYn"!U[.>R%AO'Z:&y%ޙg=xm-kR01Vbma(< m @wap6]MrXu9dG='2y=|퓁zYZvУEX(|p8 2c&ŏhqNUqj-Zשwq&#KK3~`rKvX^kVji\I,qBd90{Wiٵ[+k7bY#3Q\hZEݼ6zU۾ccoU`q@Qu-YuG+a$ЮBq/n c$k^$y-ry~lH{X>vIӎMta_4/g٬ i-awcgIvMojdlcw~xuc7 N'$#۷Íޤ56c(ir@Cc@QV-]*[+]2I2nP0s5$mo|VYl gL{GAcêkho,1ew,wrFQ@ elȮ[$H{+tT-\1xH=*V΂AsEnFV&Qz sm崖p<Y"+x"8;CPү˝Fk{Vm >a=nI{+}6UmFI>,kh^Q&ݻy6q]HM=J[9+ t\`|3 iYZGNIN>^y9xJPj5xJmU$axIF6~La Erwn =k}/OK,myB %hT9\d=*Om+hviX|w<qPꚍqnx'+UPք.\ 65[vphB5&(UTk4 nlt;i%tFry$2sޟki++ [a\C rÁ}Mr[+[G#MԢ=GOMxUr8g5඾ӮgD;!ՂP~RhǧfxWX"M-* XIې|$yں t$P( Ȭ-!0m`ۡ)U}(nMA/R*)UwB.9bxh;li$1I Z2"F9cWrv,K(b 2AoS֪[xwE3=ܐgQ|AlpyV cPoH)TEuAgI;_Xo#ru3a(dp/_'f!fiV58 e>?E%KiqF ˻zwsؘ)/9m '͹w/ˎLZǕ.KqjTZ\(We$8 ~^hM=+""!{u[oiRj/YQS/>|gaѴk/-H}O 2X y4hJ{y-o2FOoy5zx T,zډ%hD(Sն䏺:v^h,mm&bTQ^ZFjڎew9bUr}rN[a.eY12Fb8AަnQppDQ7,]0;y'~kb9#r(a #S$Ҵ^[ gD d!IH=h Fi>ݫkkmi4𵐆6D{[ s:iڤG&A >PF@l«\euŚcm+F#P8o[K؅Iź۶$/yvKd"5Bu65wTA<]~ly5/d4[H-4 :*eG'U mkiY\^uݎZL՚5+i\b8FPo͹Fq4}t̚hb# 6~PI<]L:FmM[^1-p* i:SNkt(XKA `d?@lޭocIͨy\Bݗ2vApOfKAjak ?ڞiQ.ҿ{xtW*iM&`{6"'9Lc9Ú6hx6_E~|(I,@!£^{EwL7~o0|r ]W0#'ڻ;7y"hY#27#d:t$S$Ѵɖeӭ^AS |z8sU4Ffӵ''tP 1.v9 p3V5W\7V:=bkud,r R矼8_oXZAo 1[`8V"AhO +{OY8FTf9$0 =Msj>zu}  e2DdGl?yTqW%[bMק.΃*@D;3W혆yc@*^6WRI[ހ* =E<ֱ~4 G K+ꚴ_jzQ2Z(oգ'滹,me63[E%0:Bҧ1ڢ4 :$p0**@Oh&KemUcS7&䎜F3\vqK4vG`izF Z~kkAエ{f]F溆"w%fUPTwLzU;~XuIVv`C#o~x#M 'So #q巪$6s 6[ Pr3ӽ657e%K,qcln;|`1۽AfjmkV]Jh4 jef[/[NJtO?Znϵ+ߌ5 xwD--u+j&>1?Z$kseio$i5k(nۼ8qm[W/ﭾ Ks@+/FC'_ *-BpdSx}2N|e|=w>j-$0ܫ,k9UQG泞y.ۥ]!ݰX$mqwfVg??́[s#:zTAp,8>oڀ1FRNrf2x"7}¨Yws1 R?֙|tfR]\]MwrHmU K;'ڝuWױ^wQԞ[uwA@\- t+k_dPB䧙@]ml/l]^餓7*DŅ =~`@=wGF΢M7uϐccc'SJn$HT;8]I#>Q[q}w;]BvkjĻb tZ\_ͤg]̂FU$d }7P{k: x]YA'ޤӬ! ,q*tAt;@\kzjSB` c݀A#$9߂P.KkcЫ[$qpȬY)lJZ}Lӭn)+ꃎt}#Mf YuꚕoKWMO  p>nkFRtkk;zd$0]*<`c溋M IYlt+i&exm qih]i*5 PCn yǯ4eޝ.oc(&fS¨S.AsZz 5[Id"M6<8#[Mp9ύp|"; 7x[:{8Os*ڵı,[>^ݑ:CM!;x_!ma (̀S"m3M8:84@  MA-ZiV0pcE>cr{+e19{V<?}P8@ǁXOaBF4f8c[i $Iov54<#Iv9PJloai%$zт.v׍>ȾXCwo\AI4)trI͇j8RH dc%:u}.-7[5p_9FW :Veoqeo ~V6x;nk :KeD6,h p^jŽy󓩛 8C |76FA=c0kw:/ƥbl!2y ,: vRXYk=<4`{Ggupiu198QQ`HϽr:N+œP{{崖d */cI~ZYB]rs7eGB/vrpO=ct Ҭu+5۠@zldim-d%hPE8Gp=p"O t"leF{+KNY.um:ijP3v(loCiVg.W\ j[JM,ًk{uqp;g(e|M=R-Bb!ӠuTLN6sZ[YGOfclGp~TmnH'mOjuO&ٽnX̧ՈO_Z5_V]~+dK;H ,fH.H*!"YZ^\_is,ߥNbrF"&0N32O=+Q4=>(m\>\I9# yj=w %eF63(RN+k{9OH/m--ȶpҋ9LӅRjڍj2B-ൄdo5Ubwg Sua9X煃3nXrFU۞vx{;s1D*HGBk09UZ*I/g3e.&᳆Y/^"r<7786/ɫK n4py;ʳGFf͙1Ҙ=j&14s3na̋61mҕ]?[{]xNR[s,*1>pG>umwv c}r@ c=LcY`.Y#3c32[R![,d, bIM'RV[;솩umُ;ᐈ&?>޳m+=[г0nhoni7H{pG t~ OdXϋvI[gC;==ΗgvgXe0SuhFJr+[ vEۻ$wS'$֮4g,%IgfLg`͑ȴz^0Oq#FBAp3j))yoa穩s֟"*43*moT^ K)F+*9Ǫ^_^25X}S#y oݎzw[J1!eiFGOJoimq,]YYD#.!wf5i&ReNM_?Պ cwp"Lvǜ8㎞=sB2o0fG;g@vt/ H$den $cMM2#X,*nxIO*cV* -ZJNnIZi^̶YUO,.Tߗ}NV-&Pʓ çI#;H| XtLG_W7a{[C[DF 1 z0~,oHJH>FPT8 o&?ȣɏy+>Zu=¬b3ZKw0 8_#{朷,WB.y15ELX6~(MFq[6ƪIPK6NQ],͛yF#k/'onqNhKɏy(ck|OP#4[eB̜c dc=K>ΰ/#<^teT%@;I4"&?Ȭiwx9!6` .'##':/Y^-ה[2\ZȯQ1"5<"&?Ȭfgb;[J" 0SM_v)ҭV#3* ّP} _&?ȣɏy*_R[Ye Zy$U(@$*_wI"$f bZ4"&?ȮCB_]i^[RdǦİe!(qnKh-ew#/SI /&?ȣɏy+>{qO ȑ̡sf8v3VhDZ`|ȹU'ʼnck|<"K90B_;Sn8ۜsӚiGRBRFvAsZ<y15Eeikd,o<%󉙱vo#n1Eϊ{[{y3ĐK+R|\=5|"&?Ȭ7ĚVt`ӮĨ' *z7 +H8'%Cܬ\x|y'evK~4<y15Ee&Xy$k!e%od`?핦\DHHD ]F<@LG_VI^ݴcnYDh #'u+ѵ+m쮝7M;,T d9<y15EgZKkKy2]X+HT#“n}'XHt͌"ʣ(̠62;4"&?Ȭ|Mgm#[o$쫗)lp&s}.%1S *)(C  i15ELU[XX.&BYeuR@Vsk QvY$M,ź[%XX㸨^q@?_Q<77VtZAm.9imQ;!K(xj15ELX1nV:E4k Jʤ#Hjp2zsSKk=|J폲KMxFq!I /&?ȣɏy+Ӽcgj2YC%֒m+>Q9㡭koO>98B;(% $P&?ȣɏy+1MfI\Ƒ%1a|fGqZ14P$9iiI;ck|<"SS\B.$]EF 9]cRqT񮔺MMtm-#үpv|O.@@LG_T:uj:t$ `ѰG*3ɏy(ck|uK W]_wg4Iu 98JjYMg_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_SQE {T {PQEM-#@75-EmԴQEWh2 B:Ƌ?c –+ :κ0Uѩ-ωQ8Ϝ m-s_[Kk?׶𻼾6䑙ݵI&A5<@~_MJT46 ^l7,b?cby%eGHr0+vo,ﰵx%e$xdwtTWLs66j4;3& ̫p1HA' Ꚇ6fQ $3gk9"Yg+a ce~Ta["'eV;p8OK'5s~xE ϥtP7_u=\soł2cP"ҼT,o>Ⱥ1ۑy̙݌]7zbKrMt26ƥ>aq î+JC,tqn֦N{|m!Dܯ= tTP7?gQ%{k6:ucRs\ ! &B,!#@x}9X Ԃvћ'Ү_Xj7BYL3-ԭ:Fמ7Z? Z% Hm B*nփn,1TVFl[m(bmb!@Y $|@^=!A-22d,izg=F9,4]_˱E[V b1T9 3+9; MModXƪ8ܯZ÷o!}>o~0qKe}JYa%c3*: m#'xhR=#PѬ4X&t-Lqnb}ܩ8Rh|zd7g+Z%~ϽUm˟sӭt4P1qea{A L#[?#mъ4,Mݦ<$~VA~KEs]m}̇f7?ws!-y!Ʃ=)'8ך(cO5h0O ddPTHf;gUiGqsڴE# ݐ(39d/'хŔ/ ,mU.~ONCQγ=pC4r,4&=Iv h=NNƊ} eW m;T!ҭj:sqȿ:+\=xz騠 SLվuo68#Y#TqPg}"XiZe 1ZNUahi' 9ɮ.eVM+Oʪ"xکYxwW(Q%I%>o+) rq``|'z筢9m+wgŨ{6eG)Tc!NG85ZO_͡'bIUXU2 RI#8f=G^ʊ4 OLM[Q=Χ< oBu<{4v Fp8Z(UժOm$(EktTfف88;Ia߇g"bOKb!&h jܦn WXe2 # Exkj=mn4_T_-I!$aJt״RFDL$n]d0=Ad!7W-lT6vmco BrrpMM@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ci5Ci5Q@#KHtvKQ[75-QE!PxZu*us+öWqiq%e<T:-?Zu*_+/ei{uzq# V _WOJj1k|oc{{3M?܎ i&`3Nހ.yiW9NmZ ,p'\gQW6..-XPȎ@Ga$`硪iHx~WME `z>Xە: _ʏ-?c[:7ZklrZݙfQY`8 y*O\jˤirMqj,Ar3  -?Zu*-CO>T񬋑3O@ QW3]zg~zSDPt}=5ōȄ˦[@,@.1pyH@_ʏ-?V;mcLɘ08ܻYH$#}[iSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSi:QE {T {PQEM-#@75-EmԴQEV?9o \S=b!IA$o]e8$pz(ax@vӿ??ZE*;fn 2,ZNU@ _5aflm[k\cCNWO\ǎjRYIuw%MJ[-&鎧-OX,4l!ߐ">_3ykOG_ʹ Y6e lKg(]aD"Mw]Gu5n#n#8xQJOɑ#xu .$12G/WszPAWOT4F{帊;[Y5Tyi6Cghkٞ <*ɀgI9.ShKvx$I FGWOT, BK;I%He 0YJb 5M{Oъh<-(QHE`P-?Zu*|I=ob}"\9DC^;M%A/qv9ۻ>WOX>]gd9[ۈD$N݆p޵uNJ^(f؉m#ފ 1'=ϖ_ʏ-?bj*M7N8H10R3a ASV5dfUvmn݁ -?Zu*Mj ^K]V -b[h8澎Ub*7@ W!1'K.|BQ@]Օܓߜx`ϠXqg-y%/$$Fn%g8=~+хڼs4 *\4prA^Pfh:lZUق& {< r19xBB6㮢1/!rE-$d/ߏ\ \ǣ_@f c6][TzJIQk9/ Iakz#ң 0@o8'۠s5渊;,5ʚL0TcaF7$9YEs^Γuk^euyB:l!zX3g3T<',ZeY5"-ā1+dI xO_Esz_,F<:六]L'n(Q79}9ne⻱/aS|2R J-1U4Mj3>]c/_aMR3&?a}q#X) AnqgҴ[F-t*8J勴ɴqlp:V+{wn,4H߳4Qy-۹ͲĠ|@]}h坱Ԋ5+,B\dzU{_m=s^ lĶ>̓$g##gaEr.iң$}9V@ݳNjëo i֯m3Jֻ<ܻNYnv: (%PKr5+I x#³_OldvÚ׈g)Rg&Cq6ʢ"s1Q@~/O!X:tx\c|Q <3[hݮ^Cmܩ*I) .SErv=* ,0m\<ض2aúa:mu< wumYWtPv{*( JvZiXnRb *6wXxKX{MLCqw MJC$A(7k]_0xm Dl[UK

"YYj:$G ڛdBOE`GIi:aVxmus6ߖI.5K^ow,rAotҬѕ`l7d(ZC#)eU$Wy&VFUb@R3gc]C,g-yRɏk BGl'tP$3=)Rv۱"ͤM[mj.c`9w-#>Q@{3Kdm%D&{; ,y= f=Fm6[ mtk[{]:_1m>o.Y’=I&*(&5/Kot MH&( QTgi9pզ DZgUVYzc*(е[N HiIְ5fu A>ׯ|=s,C¦K0p݇Lf*(Hn6 jQ@q)ZO{[De3Hb qһl^,Φ\Qgq:U}05ӭ>:eq0?*/.QRe%_!B+_3u-Tqm;+?TRviF0V~Nk]'NM@ߥ7[ N*W!'RL =r;լBMۯKWcV28JƤ!W'i9sI+)QRPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET6AST6A@QER?4MGmԵ3REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPPǺ}MPǺ}MEPHt0vKU6NG! qF.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(Ci=?  1@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE{%^0*i(7Һ)'IΕ᠖ȁS(3jυ!e_ݦ.|Ѿ82:eN*KxAom{\J֯'9FHϿhS/fQ&!JǗ@灒I/dukBf61\ݼ*˄bU+(#:+SΩ]kz\^yE|Ih* 1N*ݝ׉+=N{H Z\4id$pf;֕r [?x.X!PI:!0'2r}IѬmRh!L.F I"x?(kKrHcy}jĚz[jMuؖ/;b{1۳chA;+{kwjkU"cbSFy.lm5.~1,* ;MB..pJM Ѿ85Z_m丳լn!rI2NGEQ#ykj3prGYGc-ƗqowvkiI8Ozעdl,Ľ(] Z|r@h'\җP jvb~nٌۜ/QXWtz {I|ܮT1BN3ڮ[kzUZgp UK=[Nf-?P y<>Zƙc{ioupq NIҀ.QUbusy~%_3~\Lm_MMUt-VrJ&sjES]_M}Q-Z4e2LG8P'494tMpHcyZӢ˭Vd;8ۏQٓu3֟_cmm5ݿxV/ƀ-\ߍ4_Uhno4[uC #W\it>G:!kI\iQU tm]oEWծX$21 ʹTv9Bs@V&eӯwƲ@"1­H.)'j]llw% E|0G J*}Aync(qƬEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP5{ SN=Uv`sՙ)<3ڬ:m #s}q]j5Էv+srZmêHr*9Fϟ}uh?l]megL \WqbxkZ䠃Xn5t3H43r۷܆P{F@nnp-=}3W:m#7d1oa+toS=~lJd X~Nkb-nt95 8hV|]x`txz N!"c!"ʒ].WvP=x]j5ٖ].s/tQloK;Y$Q6['1'dEqˈTkar= [\Z]jWZC[}%6i6L>fYw`rxQUGPT}6K2Yc.4pdmW'p(X"PĒpA<f@mhw pA "/.{*@pyn4r%V^b6ؠ\n E(6T{{Sk%s96%"᳌ȣimJc6H|66IFSl{Xp;(tilnF[T-t!PtBuӏΪV֭Қ5u Xl6x utP6cOi6Ir3"(8n"&Y}alȸ:*(n&}# oX˹lpL8l<2bW!ҵ-2K)`]˼XAq8}+PӛO}&VOMt &{nb C䌊Э ]b$Ҳ4 1yl[a$9Z=x,x(1^=d s=1;iSeS3?@oZq%ݮdlH_9bX!@xq啚J+x-g#]YePrN=}+9domRSތY3.EYNKmp%n)3"R7|{}kcEH*ª=)h ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (+i{qePZ1+&O3^uV|M{HaeR ~;}9T(ƭHݜK^̫{VWo,LTW7MRmS,^Ky V? .1jV8fEVvJqRF|]kZ%zU 8[#.m"J^zgh8=kR{/6$/s>5(ma>UO*JQ$Y 6\ssۥvW[iGMԗ:ڊ6K2s`/=wSg?f}+T{FWDF<6}ހ=6n&OoLr]Xj\8 @¤O:ŖyeᇞIyb`6ۜt2suEssmaK{h&7^fAyA`qpI~iW/5 <V83mY;Z+~xh5dks>/S`vJݰ} Zh^KmF}ڑt:HAx0Afӣo3SHHXO IӚ~${> ]Kk۝n~|F 8zǚi^ִ k6d=:/e Kd3;}@U%[>KAq ,¢`@9c㩭x:2_/HxӨ/'bpFrN8OMG;6ĩkf}KnuUCi˪ 1E.hf_47j?t 먭,մs0heWܣbySw? _N1 5Rw9\%q+hA}KBҞ+}kMW[s;FM)KY}i}n&7p%`S9~lTV2~C/VS{G$g@T(`ϋdkKGT|&A*Ɓ2}cRb6zR{ƺWHYv`}{c隷6.}}V 9l캴7K2y <{r%j[fk[Bw3nrgW!&njR}<S6 Qq`{UtqJo,7Db Y0 Q@׆eNR]CSﮐFϜ(8fq=.P{%֡]p$B/ubrh pRH$}P ]#P/-gT !X(\.>v7ګ%H tPUB0$5ج֎GaݴiAn$&8-]4XPS*ymgtb/A*IM> 5mmJmg *!UE8& dFʈҶ0z / |9Y$=펟-p^VqeQFS޺>h^romYnnrL븢9Szf6-jڕVynjF۔T1|U.@ʫ6P)k8ᎏV׺)a+QW(~JOHu+e+EA"l)pw'uiYhmԐM!x߅WSLxP`@`pG"6kmOX[\kiF /w\)#wƻ (ឋ>ڋjB .Ԛ`ŜwQWHo h:,ծ.n$$Ӥ~c~e @}:ڂx-kf Ulcn5ILOyr<9]cmP⺪(o,KHZ ԏ3VGkSڨ?o]Amu!19>WiQ\[Zsym47Lc?Mj`{Iwv%aDZڊ#ڣ_Fǧ2JTęqYzgM/LLR.ˈ쫫ch5>w:ιwkpѲ5rQ_-u}OZPGqޕ]@ 3| ֊Ŵ n5mGII/U"f4ڈ( ktuMV; ^kH t!7%j쨠5O zfi 0aB 1VAq}ii\SHsdd=|?v ܑMm$YqdCLSWK()9Q0ʪW Qs]! AP=BEo&o$3iS\0;F@G'}-6+N2 RPI`H\`#q޺q kq4fu@a)$G\>ƤN펝ʹ2J>-ǎZMkI%XCHX> (6a:e.\/cPkdx/M\3bDqp3ں (|.햐^Khq# UrBjh (2A*H,A%unJC ܒF#q sG .|f'(J(I()Pچ,^GWskoyk%Oo"x@ЃQ M)44m Js'Ҁ9;+kzYplS'y ͤgjwЮr!]5c)RwYG+=8)#[HrID0#8TrdZuЍ]< es|du=z3jTuXf;|ojdЯG@5t4S:}~BqoqՈd$YENIrhz^C,3Q[]bND`OOZ؜_}gܗ2oZ(9/6KL7c8f9{:1Z#b.%3r @MqvZ 2 bglEy<08m+hviX|w<%kk \?3S+tu>8"J66KF͑ ~\F$A{cƥUQ`?,4GۿyxqBڣ#%*ѳ:Y5 4ӪLP ] 1@zO,iufѭ8U偖ܸ[E{|D-.ЦM$.N8k-y{-_-D`lf9=}i &(#bĢ9'~R-|)%cmm;ckWZVa ڕ2 +<3!qq]ۡBF4ЄjqASմ/`F1sn̚qeix`2Q^(;z,-BAkҭ:h?.1oP[7tVZ6zvih1*-q ҦEIGZ%}_TQPhStg^p@Xo嶸ҥ&זN.<̼lau[hZEz]7YDq[ami`T@Bg>9GdR_>1ʱCnǿ4g/&֚M0FP!*_'vFQ8WUqy&FH tE9ysfcQ#FX :[JE.Jyssk.[4+%SiaUmI6y8LAΛfoL 612q6A-m4 "f] 7@<7&%k^D. srA)w8xSMvx֗vfA1;WSaX6I%viڸH.n%Hs(I8TI GE2uuaϞ8CB ʤ|2 O>kZ^_iCqc!6L8 *G_jܴ 9,t+kk$ܠ`q:EmR#UNT pNG D/oCGg>1@QXjƠmڥŌ$nnFQx;ANQ{]By>3 k.zUԖhllōکMG-n(F(yR*.*3)pw_cԄpi](ě%@Ӑ溛 ڍݙR۫A(Gg+E)c %a )3O0Ἰon%ZMb{E= r['wJk RG&m-+E,70Az5l:}.خ^2F9XLt{0ҬmᄾM's=jKڋ"ei14@88}i4|ėr lCxijle!T Һ4>&U_,g >'eًK6H%@rϵSdR(TE[ Ux$VUK]UV.ͩDqqoB9b8nG#Uy.@,@Z=#MT}N-:/]v(Hw@CR{.m4EFLg$+uő]h\=43>O,75Go 6a8@T)gjjе z`tJ])n5cwg K+Xҙ̐dl 8|+<_y}7mu{ִP 4K*$$LV(cD@dž&m;hqi n2#Ó2yTfԬcRsm>un^RyaL۱vT1=0Dn$3*m3jbZ*-!Q̊1s9<䭵]Y-F,'4 q[a%@ j7VZvI-]rQSM^>mueU o7|*;)Trxj[h'eiFPʥ 3ހ8F/M֒nϝ$pH^H̐Ğ8"[Zj"ϫͪ3^̑)LF;}u in^"Z>D8ʏAUk-IӑSO,d2n8ϥsk4*Ύ{t%2" zz+_j^tѮnIR5E`Q7szv.aq$:mҳtX015~'X1_0u'$܂~ns$f&XTW2A  #✾YhӰyaqBˌ=M^}>]8IiٔͳD {:mیcڀ9{mF KoOsGMPŜ>rQȧqmu_k. [v["$?]c4Rii6/59 OX}$kiU "@cJ.=ATԡZnD+q 9*_sk(x<3jTuXf;|z)t}2}N-Fm:KFخ29>2:HN53ڝ@.w/gq_;}6-BXZDPs7g`ߜct" >('@$ p q{M5ƕc,dGFh؝Ŕ'GzN-Mgoyn K":Eq^gN:ŋIߝ*LʊO lgvTmGWekXiLK| 6tRJ-+O/vyjʞ\J08MC>csLmnE7"hSc"cUU @: ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( xtyZOp #oUmGNlPM2Bd= ?Vk-@\OO-4sHT؆O;95mwSR#DH\Hbo 5t|++u+100wq1LҖ[ȖI4ZйwW Ԝ zk4/c*& $p%z=;jjay~. ukO4{L^fnҺ 0UIV*s`ϐ:ss{>mZK~I(u%d EZ_ oX$'eg8ğ=ޔiyQI+}Uv* A@V%oJIX4 =(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ VzY9c m`5#%{)E-((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((4{Xgm\B .$0I Y؜N9{TV/<g)+xQ+pAAsu߄m&}.th,W}2,ŝH$~I%dhֵ4ZeX[fE̐<0#)|#t:歨_ibybd'UC^N2xC/lĶۼ-eUz1"2J=p4KI9.mAR6vNWqI988tEK5pzzQկm|C2ĈGX'x A [i$m%WHao$p7ޤ׳i:}/, ۼ@FEnww jseyʅ^rͨR$K: cs@i.u-r4Y.")!Ǖǝ1@8+CQ5_6yuSqnaE*ʥ.ďa;[ҭHԼi *M+nAdÓ d`C4ΡϺfBv%W?.XNQ[#X'B /#H-gjT׊-E%r O8= ?^k,5b+I *AR F5t17yIbı u9@{ul1t"Ӓ9®$ǽt^ڭ!lG]}T6mh閣V6E5ԑ.8G#;+c晥oacihk!dfݕAa{(kz֙ungsmg )?#ϦEόr¡0-%1L&cpy WQw_k-"G΀F.Km>R)g7-)9.2R(YjH@d Mh_XzΫ[\ilqlXoӞ:;(llHaNx ۩tB7C>hX [H ⸈5̲D,Ģ.VBcī'g8ր1<0Z71G|RHY cbdq8s׉K[[[sw8% ,ȫLIr7[=0:׵o>Ca-w[ HJd;gk t%w4; 1)de{ ̯4s3on]@-oxcU%Awjm-BGFo8".V퀞NB$+8uhZw!Y<Ffc 4jIM^{Ix*4CN:b_E8W+vTrHR QӴ{834b&{gr.l׋/ĒZ[K%[sed˶^X uNZ65p aAsR3vw6㑣o:ܱy([A\os*W,eF2,24Jql.y>1ֵx M_ۼEo@3 VbH01Ӟg騷ziGU̫ĸˌVxaGHX՘@TZmͼpMm8Ͳ 6vsH=F84EZE|CE{FTİ'x[s[3\,sc,Ѭl}\_>ぷ.ϧIc%$ HBۋ[q vBMlHĞcNo'ҧӚM^c$Lćc5F ק=NksW!kY+$,Q~_mhkFˍb) Eu]ȣwUк]!n#r uG4=m"rG,QX!I$lKQ[[pDd)S,#=Y$MK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@To[NҮ.@L+"q `w,:5njbjB[vYXnNASb ;MXEggw},D+؏Le ``Ʃ=iP0F/6Lrs|F<'¦=WPKՙyBMDwuo_ Et+vP`8% u( /^\m4lp闲yv䴤/60'I r>3l9ۏƝe,e̖ReHP3QxF9,1 DHe\ 'bcB_4m'Lk"{n77Igh`D@sX&mmKPgnO*PgF n>+Wn,-=,Hx4Ț1=71yw/w\[` Z} gվywrɶqv@=~=徉 f%MްHmڪ82+@K/5q((f6G̀Dͤח)kc #GN<Ԛ ]on.<4xE(й =Nyyywgiqj<}?)*9 ̻X[[]8 ]AbWĒ0xC#l6i/Մb0Cƅ' x.!aZ 9_v+?MĶl>͘V6z[beynCXO̤]=NH ]Ni4rp-ȚQ[%U>Cv7zY>&B<ȭ9/4:+}zÑ_5X+d p8 X7ywFknȱ$,PڛkOsr#\{Hld ^dk,L:Mj-&X?7`1d$cs}ҽyK/yo k5t*p V9PD.]sshfR8}hQP€rOMm!x14ilPC 8# 4O][[+y )p.J#5&xBOI/.d%y +JH*O3<_. |vIR8uܫU\wqUY"p#$*9|QXMqh[i%ղEy?6py>R7:0A=QU~P5znymq >^N@-r.5~_fdޡ ^fռ>Нo,}SUMq%Ş{lOo!` ) v+//~H,%U%ed,w6\tZVӡ^$yaSsӞxt~KIK\Aj [\0`c`͌`qOb9,"ԯg>!Jrm 4GromaV+Tp@Dݸ8^?*λGiak ͥOvJFXm(` r1IK '5.Yrp1@n;wKyoXG 2 ѵumF )h2œ<ȶ w{+Z-]Hwc`ʨ ;澏UbD:HrvOG5'-n59tkyXHE$x(<)MBƚ> 4_ho]DYde);pjxMŭ6R =/FmC:֥SE=ޙ,px!ua#'6Qol`6cY e,yR<@SiEsi$0۹݀IJ|Q}i1]jM_zOтlтG^kbHPI%FQ&đ1GpAAVt7!]sSi|(@ހ mR]'+{庖;T):}WS{ AN5fo;@ Npzt5domCd*PGp}ƧGki`q$FFTHzP 52Y,mZ)I 'ҵ/][մ)I< k`d@ҳDŽXn~/Bzy.f T^xjiri,HIgp8axk:{y>ж[E{Q+8<>l :Vsw-Ůk hʶvU'*0GTp.R˧1lbɳE^ '94,i+Iuq{s1[taT;=zhz{i>Kw7V &XjR]eg r`ޏA!)Tk9vbt?\oYjv# w[4h DKg2u4x+sKe,3NU+ _,3|Sygikm_NkIW1-vH$pxIKR\M=eFU)*FjxjiVNe 8U|˴Rό-Ey5>̿`'rmpzG5+TFIm /H@v&N GejuVn_Т)?V$Qڝ߼8xt* [ˋ}>\-ÿS$|ڣךVgFb{y/B"JUm b%3[_Y}Deeї>6]6H^gv٭ʖIh5"]I<ԕpVNz)zV+ة+YmXϘqwJp˱Ry88f/ m$ -Y-$lD=:s*oFW{MN%q$M;=rh RV6iPXE5UU2 ?(8-G"V"krȑH]U)#Yx^+zڎ{zPɍJ\[q{h^8KE f(g>h?@KEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPUuB-2ɮ'0D0 Hp$H Y!!%Ǘ"ЉSra 8:oJ#?oyߺmvwsP$$4!XR4GN6 E>3XX&_A;Jey6v 2@i! q"\O;U@xր!Ӽ[=΅\M^KAûh2e$c-Zo--m,'#)ڊ*co,OP2x8T֧ciaZ.a6$LI @w ^9x}texr c>{s1@5k,4Bě0,@C-6ؠn d Pi7^}>Irlk? j^!\i3A&š!i}a5Mj:TXQ`a{4!XcTGp۲$x]8M5^iw$6 DRn$7a۞Ͼ`lqLF1lI;M |?YP}ntm_ڪn~2wv-O< mqk<KG8\la U)|QWRET/S.2| gȭjaHm鴱}~HY{=1VQ\i/kmxGK;yfyז{n;s!Y,wxΪd`ĶrAyk3,qgz"Oq<;PwFPG8d{ɮDK$GHp2v9['} B t|]s0ۿ  ⟪jk=𪗖XUJģ}p:V~XtT\l8ލ\gi4>X[O8y%F9ҋP_w+oM~CbjKwֶA>Ј B~lǖ' n1kr!{ +>߃xzEQleO U_wA:ԍNeQM? ɻvM Xt*O$g/~_%~%@")n^Fw`{PhέKque% RS a<`TI]%GA> ]GmV}܌#~5wJbeyb=@J-GqIo ᰙ@"eQ&$yj/WtjJ9`hA=kh幉D8l8|;1ޫN;ݎZYRyeQ{f'P``?ZպefxǿoCyu6VdEā3'Җ]"K{mgp\z~`2ik"hSFB#w\37G:=Zk"t' q5BIֺ] ԥx'"CIOPBJ6WJUfڥp A44wWZ!1[- *sT,<2}PǢF#2'ϟA*Q6˿r,k}nc)Mh;HG|gz[OE~3mayYT&O%#`a=A9. 򥦙o%l&<ɳ׏֩6% {we^:ʒAYQ y<1Z}r+yw$m6[{.ALY0yG&rF /qJY 帒/;Ɩ9qQYSaR ;~=G pǾ\<g(T2+,m89#T[Ks+Ȇ(p,x$tcCAusv\edj¨Jy'_v[y`[Q ;4ֆG`w9`)~1mkEAm {8gy@ .G^A9t) ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((onedrive-2.5.10/docs/images/authentication_scopes.jpg000066400000000000000000002536621513710110600227150ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex2929 2022:08:06 07:59:082022:08:06 07:59:08Alex http://ns.adobe.com/xap/1.0/ 2022-08-06T07:59:08.290Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************Z" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F(((l$1(3=I"5KL,/&_HѢ((Ǎ(_`6[8b9Y`dUѲz(QY~#oe,UZ Ӓ0z@iEQEQTcL#WյKngXX?4K}}hv2ۿ(V-ߌ4?L+}Ulݣޗ^1cmPEPEPECwwoag-o Y*I&|;ŐO7vyr0 ?Q@QEQUf-౞+L6*%U''j_Zu(3$N$sL;=kKtťo@>4n((*9IeHaK<0UEI'(J+:ڽίa ^ 4(~pu=Eh3*!g`$-^P-L݉ 5"8`32*hZ6|',x("z+`q+,q^~5lPEPEo=*ėZ [;Hijا;~{Q@Q@Q@Q@Q@]oPk$bF1Pn+b *ZڵƛۮIeiU9zn *WYKw]̥i@:\OK㷂%$UAI ˱F\}3\o'#"+{cM] -g+D/ .і'=Q@Q@Q@Q@o\sd2\2;O@T {k%is ]DH POEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEKѥH;ŷyrRr?S)F vBm%vhRXRM `zs^e OBu)5MvK}YXsuwv%159ۡǸ)VJ*'' ,SmE篭V|[GmkG,[$UD(JdgoB>g4].^]~i_8皿OO _x~tON-nmAsU_g;\^:t->캔6˺Hq_og5RzƇM?PԵ;0cЀOg- k=KQ|TLEx̶x/O3wg[ X躄+}JYW$䃎b_/d{mF+$fǶIώ$iAz޷fi{u5]S6mg[C$V0Gg"na0֦YxԒ1:KX ~gG, ziVk- FQk y ,('+~V¯>.t^y^* 9`B3ö>$GM[MJt m,{pq&wi=ߊznI4ַ-b5bc;( 8$~Z+CyDl5X%<5Cˤ6Pv'cGoAU}t?]]x?@@Ԯ"2ڣ\$Σ3j]̹奈MSPKحd휀9ӡKPo߆/Hl"۫<QU^OkI?Tt[:Hm}aC}Vlso/$6C߂^%]H|}SL,-[Q[݋@ʣqa3,\H$$qys.9t5sK9HuS.u+Ǚ|p[#'h^Ek OAX>3hQZR̶_ZAUo x?Xru;4^KBC0 }+E^/,z]M+8F K ΊǹJ%# _йߒkwt j6G29dlzCu :J4sapA cVyzsWk0|1߉ő\Aa}QXZH%TݏV.>;{K]!ڽeKy{7|As[%>.j:V<wz`fR%ҪB.j]N[mcIYRSrYn3kZ \Nw-|w2[my/Ĉg!xO|[9H9|K{³V>\w=k;K *u[{7$bY+~AOrT`q]֗'-?TG_}#Ե`T=~x>LH|U8mPyXD^1qc~$4|gi# C?|1N1AxxLӌԫs;[ߩ+O~ ;(hxdc8+Iec{gK;e$ۑϸ?x| 嵲`VtVol+xZH"7)q9T ?5|߉G8f~+l*dh> K—]w;TPAXy*Lj8|?̚MavTΎ-?we7dg`սI&_5+ ̲ϬxkY5R LdIdVO$ԥS^ER'e]ᧃilЭDDlk)cAMbűzɸ>?ro1nsZ>}M&R-22Pr7*x+gG'}CXwXxUn{mneo2are1޼>5Ѽ;[x3%;J#o^5[y~?:+ƺuu{NkIotq׶1"ڝzK- BkiF +#^FpďJ$nᴚmv6v4qې~pqTOj">+uKIytn=Q#ޞO--;ƏxFҥno-{uP#'#`,NUX9sbXIbwIt@~φn" Y%ʼRDs;HZL֡Zd^2fJ\e\aYqtѿ5؃G얰qc zd}W.&M{I#d[oU A{ɠGOm2]B$;9Vr#v^ դo]ڽ̿jB ۿ, +q(-c\k[+K\/^4f<}ݜvMJOzziu|1Ufp A\ :eٟOxB6o1G\FI@u+xLEJ3Co?]_mjmDžgF v .J`gڥƯ圶n($O|OP=RLH6D8u<2xc@2i渑"5,;U$dsqKUu PA(><͛7cޖ&%E #Vufݞ^v޻sK 1[@ƑEHB: }Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@StE {A3F5rN*J z}30=bBƜM)-.q o4 "tLT9WHT> Т&:dQE"((((((((((((((((Wh2inYmPeNUc5ECiYq:J}2jj(p(((((((((((+5]SG5K _6MSu/ =6ikQEVnyXiOiCU7 O'sq洨?~SּD>%*8HN3]PEPEPEP_im[x2g p:Q?a^CXԥm͕QI|̆Mw( ( ( ڔ>Ls2ļ ]%ut ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( uXز{bܨUL2jgC#Eﵝ5?!/a)5f;(WvGc-#`MGk[ַ 嗦TFxzYZF"E A{ OwWv6q{q+Lgx.-&x\e$+}ԔSE A{ O(;G$:/?%?ƭ }>'6R9ՇSPw$:/?%?ƏHt_ JK6[YwqEm!M$18=SEwm;*qG(z0c@?!/a)4C^Sj^@ٳyci0yU X~u5gC^ShEճyjѮa,&A]q;G$:/?%?ƴh Ht_ JѢ3!/a)4C^SkFE A{ O(;G$:/?%?ƴh Ht_ JXԬo^XC*>5fC4hcFy*3=hhCN(++_;M5/$ɷ,r烜0H5QcvjYm<: S<*Cb@@ϭXҵ /]ưڸINTd2G#;^J{]ZսKU]CSm~ӪA/s*ƹ=XPK nI:78 fhMET-,ly >Tq2h;TnfsVRO67)@ECȓ)S hj( +5Asc$qVU$<* x"m 2.S^2&h؁ǡz&#limgCEu PVninQ$| )99=+sB)ORMQ0;XuP誖ڥ՝H%#;CqV[ (dv8P2NGomuq4IHiw _Q@(Ӭ˂%ﴜ'kV |ۙV52 Քu5x:0YNAEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVt3ם5hL_xn)aDhm_ZBA>@j]i1$عvƀY ڶS[*(r T1~yjXmo# M6q'$Τi<]?ZHSwd""CiquçKo?oqp>0 `n5 fNvO_ ,U`URpspsu_ۖnZ+OV&jj_!Ԛ5UXjM{%_#o,;oow\p3c* qnZ+OQi<]?OкZitJ{CitD_H<\ wn F펙l]7)g3H+`?1!H5i<]?H՛)V0AӧkGs)n4o&$68v V<IآĐC=ۇELp0ZGmmDQZ; &ܴW.7t? mE'YҦ%ɃO?0=1WK}VQQh h|m{UOTe : FLoĖfK7O՛N FX"l$VEco#WyൖFno{K{-JY!`6AUX$z CK>eEq3Ks'Ulq9$=&vpWtMZ Nkh%ۮHۖ#pb?Z=n"qybRxef5eڄBTA9)p`.ԯuC=6HĊ l$1]1ZckƴF8 3kQ[[m:8o&6|HO8͓]4^E4 qŅEFPnF8SYқS6ӄ/ UЮf=$\m.%%d]#H` We-K0 7']|[Y\,U4&'T9.`bA9sX?keuqm{wornLBxr  0 9W yapbXY&2:6໎y}2sP U$WHoa6mv(̅9 =*yModKyP'ύr%eTXdTo  D1Y_w= vMK2:'\?w6T|`z]_u<[Zk'@jU7#nx%ycr3Kts-\bb"Ip{nq]M/ÅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Vn=Vkm+XE,[]$Bq?:Ң(Z\"X %,(9fU!IFr2-Q@Q@ZPMŌlBG>dr9H*QEQUu JJMT>bGio*zZdmo$B'7ECiu 7vAJoj6izs5glrwfU H 1ߚ#tحlmZ|u <=h@.妶nc0${v7^1xsވ=?mC'V[1m]&iI3275RVm/5 mMmnf[X$2*䁕]sÚjjopyP]#3S([u45WڮsgbpJ{x2ѕTl$rI9ηr4{(M^O>lq) +kƕw<3Dl`X$D7+SGi-js-)n1!9I^kFӓ}?ok~z_-u>QN3sp Ij؞EYbԮ5 % V AV DR1GJuׇ4۷y#9.fYX\C#>QV>K[k,rřfbK1Lx5HnQQؠ j+3{NTtFUԤ@6m#r8I-+wլDqnaJo2̹ʎG'PFIe[iZ\B/m\F7uXvOiXζc7-0z *kDSŪY<6lVEB9zk{k}fvW0H7$z@MEg[E{M^{x\" ,9{r;Ki&Kj3p=PgL*cZR[V4b>;YL7012Ҁ&K:=[|-5B 9'%Fzt ֭)1HW0GO:Q_yz϶{dzŬn#yFEb@ XI{J.t𱔺j`3899(Z>&Ѕ7ZӅ?dlaF ulF%I}I 'kEd>%|?[jE<ĻUՈIb]sImR; pUXv:\EEsu7oKIepԓEK,V6N-\&'9ӢO/Pi[o?~1աjhd1*G w$22h\vwzufqzFnXӬAe|#1۵QV<rn4ԢZju76k̯_qޟ&gH% Qy x^=84bDZ6uKc=͵ฒm|ɂue^ =*zƛ5ŜZVxu/eT}h\ U;-_MԦ;PTuvF@qxEO7jY7 r0d8EQ]oJk{5~l *`ʹ r=*[JJ7:录!Lh 2 6FMsI8T%bp9 s BHDbXnnPp:q(H5ԭgN љ}' 5dF dͫX8䎙@4VN; 2_i/G?=VR꛶ݞgB%.ൌ< XO` hFMsIJ]R]R4۶AxNX!hmF6GZEeS ҝwMeG=sqgjmR\m H§g(|Cv6`cr9z.eek=Ϋ{ago/9(=+ր4hig֩e%*:q'|C֝>=\VpdTϜcfOtQ@hW]-#xHs44 x8*،8!2 G(ڽW)s A6.Q *#]j}[[CnB$*,D/QT$֬Fo:]Jʑ=R }iƙ}y=isslq<0ή yEb/4uEyn.cV[slp?g1z$)]gO!29y64-%nl a%aa d`F#"Ԥ4GtH"v<3 嵝\Ek¢Rǀ*" bf,#tH"¶pO *k8|ˈ7GL>S i#T:.ҞI97x@V|m3\0pKUOBAztN&MsXlub;qB(JOquoc$` @+vue|K/yFg'Һ#~ލ:->Kw5*U_-q2`.5.ڋJz@'U6dGOQUf*;,8 K,QGRI 'tob\b9BpO 47擧2ڳm'D'vv'Ǯ>][NRN;tV2dNH4n׋dcBmz㡪4;LTYDyWn mQUg>d R0lpt9$c"].Me5#7#F/Y-_Xկ6 7 ld^^=ni$'`\d]ܧ͑kF sI mRib3F9 P?2k#O(͹yc|zr('tXYu{iL1;\ 8(y`x׼ISͷI᳒RI)bONP4j* kKq5VŒ85!dt\'9:׭ܿEQ}oJ+yd; 0$T;[ y9~̡cR@@ESш&M[ϴ A0\`ϧWo+ޜ,-.M~[?Cgx J+>Mb;[[Y4t0U?X`d=N}sI;5K4KGp#pI EP]-n.5K( [H9=6p-.Ѯ;{;u 4h P+xLV6mT\8t'9k:eqE}0VN,U zzQ.]7vKYD9 䁏qY(ikP7 l 6hmcZ ڐHa'lcf\S$z⤗\-RfTH^C;UIs@n_u6侵SKN,9 <㱧Xj\7Ic6~YsxCG}+#].X$Vm"ƒVWӣԡӥdLW^NBg$pyc@y(((($!+D򤱶p`ppy( ( ( ( ( ( ( ( ( ( ( ( ( ( (1ZヂK>- JeX, 1s=9>]?Wo3tWCO[&AfzSqO2nsk{ෞalZ=$zqQD6Əٵi]i3ʇd*8;vj։qZiAYGK3Xʱέ:㹢w^G)hdK4m̑;x HE)d*$`&s`;_𓋘Ud1`g˒68Q+$Iq 9$sx .%hy~֯gEցr .Ч#9'8ڮMkͫa8y B~9;y^ktH$v1HT{ 4Pܸ+ ciO?~Ĝ9vhvL`xTBc29i E$cR{ZXw8[VL3oIc)lXW#jịK H2;c0H a cz?Ju;[[o+?{S@cXq%_X"YP8U{kd/#4G qr4BCg,w+#3lv]s'-LԢ,u fL{ P7peAq5QK{%.4;[Mf֖X䳙ԕ}ā{OhڍizDj ,X[Mֻ,湔1Hci/RI'[A <U3Ge\N2@zʽIZM&I bm\H n$l 9klbT84$}p8r;l՚tīr" lK]ʦe X  eG#s~+e^ZEwc$bqnBSd'vM^+d/`@^G[N 4=Gx\_ۋwz^Vgc|cƥX6kk[{5yPI dC–9'à6kɬWM%B,ImuɿuY-㱞i9͕?3'q#GF<6vT>WcWg?wckή!L[ݜX\[6a8;_C->8ev v ? O_r [Y]q/C qfi [km#dw,AP&gԜ{bHRWӿ;il~J*/wosI.>aK="KYH\~GV8,^u2,HQ0 uTGݵ~? ]ߛrZφ.lϡ`]; at]SRf5;(K  ǿ+9n_d0y@8ԠPGCҍw]?4SʺG7^n߼l(%F*Q 0{U3&K#|L [F.ጌ:OQ3I;fPJ6= Bi-CNCYmྴk+-h?")-ǘcO{4"K .|uwzWWLFF,O v*Fcv'V`~᫛Csa-[Y+y?/~GywPavy+ţ(9.!wbT RTS]0H18PII玹czGMwT(#5yo$18iz.kߤWl-1&%ٶUrp{*vw^={JD%o4#*v\gfriX]Aqf^j` y**cXg# vQ:m}BKmI,fxxE,AMA?<8:U喛g,1-CP0%8hs8|9YR5H I| X+g҅Û+ F]֒0RTH#bYj7Q_^ϣPI}kg5\CB>cyR2{_ M>vQEmv4 wn .@8꾉,Zf]M-Ƥ.`6OH LL18=e|1GPWӣ7n۸XCw[oqƏC}1K7:}ݰwka2I+2 ˜8zCiw Z;[gkj ٜ6ռ/Ղ /#[v>V8;ּ7sr#k;^hZZQwHw9һ*)i%ndMfwcHK`̿^2*=GI-n ߶=i5CCo0JfS dc{:)_!vM0{2-]FAfn3J5M9'T:H.7ْ&ӉBb,NsGVsKWR98Rg3dsYVo}|% f{Ubya Fyoe)y$[M>Kv_@,"i,09QZ/-䵚 ACM71w$[ldA{v漏KSmMz*t%%m3}Y6Zfk-UH§FX>)#E6 }j,Z f\&I Kb"I\{9@Tɷo4[m$iqzFv#pBT`vU6ؖk9cllwNK ~\zFG d̟d]̤sQHqn.b!:(?tȻC * 7mKSlI<:}+/oO3 ]gKx. ~`ci|z<75q簉M+|gq_E79u 0io5,e 1֝=dӭn~ǩ =܍ O mQ5QB[84VWT:h [G*ME7V >ٚDWӯ,V('hhv IH'uS/dtp6avuw2\l#k~oߊ-K+]B[&{@$"vA'E.o]:폈 &(aUI9; g3Sݫ驥4TJȾUx,rv#ug}{$MVyF#1~p*7UѮ-oN-Ioխ!" |ĐouR r28ҊKD 3EOG[[㶅b/T1 t2÷7$CF(l)gWˍRL*g6D;+~+-|.}IN)%s~^_Emka}){HlQ$aA\T>DpvvAF9V^ 9կ[* <kBѫ=1Y^%ϧ[K{ `><.ή:$L~~MI/B͡ΉfHr\*0H3iZieK1T.)צ:7m.[ҍ֭l4 K$㜯maדRFPmһ4dq]e13Z6ֱ\XHE7 */ 7ޟ/z-ߑgivm/u;p8!@/>.;FL![k6Q#eT1<]N_-ʗPJg1**u ZJR鰅Yw;o*v83O4ucgҡo \_gw Hݖ&|ےAa?Ł]e`nY/E:j?mO2?q䃑9ާo (Q@Q@Q@Q@Q@Q@GA|wI8 _GZ?L= ejG³@lnKmy~DU$rN1ֽ:[ύ5? .[{i#o0E|p H$sǻSinncN <yRg=0;)k]Ǟ闧O-WIhoR?+a6`m `n=.OZsLR͗)hCwj >Z[Ao+>  ]w+oo&n sj+9kZpkM}WY`]*k.c_$e8lG<`R/AnŚu([ sxD7XGB$t;LNVw|}<>b)19zuץGF O̺k-wwj[*&ў`$a7pyox;bwD>qsHZ~}˖Y ykQN`?_qq#z_w,[mx]#Sk>_e J-q"is /&@d!;IQz-#TZhym-CҴˋ[uǶht0aTJиzT%MMݬEu^?DlRAӭm4xZE#N sӾsR[[gi X\d 'isy1m$OpatNĵHXpr67 >'"<8-KYɡO+,͕ٛ!X;c;6;}ԗc5(+A0/lxȓ(UM#KoMn\f y'x-ߟƊbw=*->^pڄش)0E-6d(9`W = Ʈl FWi+o- Z;q M/ mv~V29L]Y68Q2aMZ%Q a:Mf dfbݸ{8Tw_gN-)5x*y, eEWO%P_3ⶳx~oy1O{HS01!X2ho4c.Y8_n@I9ފk$)aԿ_83BH.ZR3o;| 8l4?EeI#A2-͸ݿ0hiM42J1iEVEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE^=GE}&\AiaC0q(Ks+LӮpΗ2# *<4C5ޫm=Xiߪj"lg$-y⍁ks]\_]^i\b) FďCUcosv0i|%gth ˑ:ߘ_#;+k+u~sJTmL$8<1=9؛Ϸ76 fۊ\5_Kl9Utkq{y'o(&mRVko?19ITVe2_ʶ[FH2Ī<ՇkF=4>Y|AlbkG|D$9Cw7zMHȌU(HƈVq6Xp}8 bKY2UKWqd6`BtnO5 C_]NK8$ vq kcU>\1Hq.BnywD%9$apFG~[_V!5.N1=J'UA ]zSjw7QXG$l87وRE? ;4-RBf}/~)="EٿOEAȿ7vo@P}/~(d_ݛ?PTl߇ >f="EٿOEAȿ7vo@P}/~(d_ݛ?PTl߇ >f="EٿOEAȿ7"eߍ}Q@Q@Q@}/W9袛m$cA4czAsX^ ݕ1lJbHVOժ) Κyl~mdW8UK+[66D10p=@*z(R\]2K#> '$~U3ꚅ㷔`۫vw̬sr:c(Ή^j1jzecʹHr6'[̰Iy Dw wn< E;=?!_VVCHR H O)'Zɷc7`"ֿtuU}Ǒ y)$mc89$\}ljYFs,FS%hm7)cɨź:C3O83JФ?d.ny\Jڢk?%0j i)-*cӾ W.5rUZI!t}0{'9GK]íJ*[j{5ۛY`' IU(((((((@@kzƧs 1eS-[ H\H4zŴ/۴h[N1ZM_wVo izʢMyi,` $sQŭ--6Cq眰b1m>usZ'ǚZNY4vN~ %KAw޸$ps[sx[?Q-k$Hed#V sw r3/"o}iItN+Gxܰ \I!rpx2 @Gsf Tu]yG9G[Esx&ݭo>ťs|LJY1~}%;8]4y| snd_)9YU }I=:Z+񭆡uji{ ͍Ѩh,va7f iZ_sg%\ġdH.'##6Y,."` a˱c;qcZ[1O53F7"'18)¾:Z+񝵅:Z-&Hȸ,oه8<oZ,SHm-nsz);?G]Es7muso1su `k>H/[}:O:T,ƹOJW]Gf֊iZ}ܘ!6ݖ6YGsI8O/(mye=5ѩO1P+w0 UuZ\H# &*gk2AMiR((^&0kZisiWsDlRG4$KgtoEssMX.H8˵S~XA rqR'k{ӌq2\ߑbi ]vvh-x+:)~GAdB|c_Ex+{5Kt/\$t2h/SDz[l4k׻]J++IDbHiR6zk}EpW%VQC#BlS $*a-OA_qQ\ň~ne6 f#_6)6398h ΠI-q \v:(Z^ot#4/kbmY8I\s=s$:oh_sIURwqg{WEE>mx.j4VC-ɒTLee i$,r@52;hM딍.2xfֶOں3΃hpMgpG3>ld#pN~Lt uo^VZjY.fFV,8?tu9㳢W3'[)52b 73E-&6Gemtfmyb6U mN;*cZhru=j ۻ- g̪ oW Wn-/,.;i"{:MjDl(Z Qig[kGkoeԮ1smRѼq+mQm,+mLib R}86_uSZuk4w#F-K*^TQL((((((k63jz%卵ѳg Ǹ`29ǽ]vwG3t7To [M*[21AF#Ny)|;3Úc[fcl'CcJ4CyYe pOld1lCiV x(vP0*۽69;ᾉc tV3\Z{m9e;$m$Z<{y$O;OVp@`'@WiE. gYwxٲN'f ӎiǃ?u ?l-NDLǷ^zWQE;&}#XSRGO έ,@_Cc$l:_4T14f8|u<ֻ*m~!~).k7b~c|?g( ڌ@_Sm$%>an185O0|/z<ג+Ko${'98秢vtZ7ڍ}Tv8+AW?n'cg1\d݌)twwI<{qyYNmBDvD~id\׏%֣ڄז[Sy#?7%-WYE;#DOlxk?D%76 3[]Z%;8&m[NKƐF''x(hr^:_UQ~W]xzqΞMk^#R,na"CRqzآOA_y]&Kn6YOj6B4#d*]uGs|/E~e{K]}mKf ۩iXx&K;KCq$Ơy&M7ݜc묢/@͜Tm8eK 0h}  sVYZ\hlڵAD._)` ' WEQ +GXݛwuN?:Ң ( ( ( ( (kƇΰ|D&d8y#UNFH忾컲''Ζ=מ.hxy0AֽgGWWlԢB?ÑUӔZRS5dWS]3KA ekQNm?\JI;0b0#8fttV-&*奼y6‡'xQx]JO.u{H$)ʫɂtx慫4M訬6%-Æ]A+)$`)o *6jCѐ=YrrqJWv:*+Ėw*2- dO Ŵ[3V˹K g 0#r^`Wcɏy(ck|}A{y(n{y15ELOX跚{FuT398鞜ӌ\iniy15ELPGqwqlH1̬2`aTfMn <y15E>C<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELTc|A.F%h~tk;[h4er='qڀ4"T/Um7R4oلc3rTQEV'tsxv)CISۢ-Eݫ8EmE$;j P1HXæi6mX=p՚*Q8B*1Zwңۓwc:=η7gw <ɔ(ueIYCZ݋[7]C} ePq"UR '$mrCYA`׿ډ~,#"/NvG&&xKI%pJ{ ƺ(Z;o@i  HC4vM]> Qf4%I8>b2ět$3#G};WEE++[lwO9֫xM;ZܵHҠ AUICyoTICngVq-q9 Wb0&;O*i> tNFӸg'gž,:qO$:b2ʡ`y㬢1pzݺI-؜$=mqQH((((((((( ]K@{5&.4 'LxY?>us$gg?'kuꨮN32j+ [D]P*)RDy#SA2YYc#KfW7wPkMO=M։y4L1Ky%iguƱ(fVvIxN #Ԧ:ܒjp\ExG`d#9>TQ_/?!:j^or{7%UgFR)$(a 0g^iB>sj"r:hif(=b+8֔UnlFX5th&x"O?z('y:-5ΘcNYl k܄IXb]ˢȌ(eaVzPPU +ov>d{ү5YH\QӐ>kGO 4o2{VػX7IS >ywVq8˛1t,WI-y#]d$+j+)˙q* ((((((((((((((((((((((((((((((((((((((((((((((((((((i=.Bl6 +Oxm:$*>n;k8c8*((ROj3 {泫QR=Q4-Q\syXFzk65Eї+w +?W!ak}mqoVk+Jrd,A?vW$q5VQ7RFvbNUHIw>&--k ]#EQ՚0Gf y j+6_CffYG8RUXjxFͮyaV028sPϿlY:K= 7Ʌ 0b ckKL-5xK=B1$DBK@((((((dE6i>߱S@}}abϬ?T YOu(b0^ʍOϬ?QOgu &yjBH]vj͍zoye%CdgߚErT>i>߱Gm?*zǶwcy䷊A$ܣX}*J# Jtinh}abϬ?TT6}}ab5l׻&HKVQWOF=jվŴP,o6eqz}hnrϬ?QOl7JHdHBpOR u5c>i>߱Gm?*z) 6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}abz_$ s,>}ڀ4Ifڲ6:rp2h`6i>߱Gm?*)5}6-F>]B/n|6:$^yUH= Qxeծmc=¢G#'l m?( ~Ewiim% 4_A?7Q֛&E}oe.fW*UsGOO>i>߱Y^-SVirf0w2qʰV״tl˶AdGKc6}}ab5լ^"Ќ>9Y7gnz6}}ab5h[MS q q'#vlO>i>߱Pɬ06_Nyeq! zz/mdKYdI?/= 6}}abm;WүoFm2Ȫބ8i>߱Ut6]FUQ#DI=/e4m\5><O>i>߱QjTo}_7og8Ba]"18$w^ ~aXة%("2M"G]j+F9仼-<,%9bO}(~i>߱Gm?* ̺AxBJ(r{!𩆧`u cy?g<S#րO>i>߱Xrxg&c }DFcn22ĎX sSN{fuT$JWm?( ~C>=\VpdTϜcfOtQWim?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱U5v@e1I0j%۟O8go0nq}}abϬ?TZvkFi|kYPЕ'PaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~U_e"\E~wTV~)ѯoUٖʲjO(">LIzP3PiC'#EZ((  eDM2a 2z{r+^+  sJI3/\ӮL$΅fϗ.U'Yѵz[--|)WR7~lqQ]&g5rm?Rk7,D>BI8=6Q qti#fWh2Fsں)NO \CmƉc{k#I`gd*8 ssJ[̶R d&HǾv6w+)tr:G=)tʹk=ٝ^Fs_!K;(wx.L\X[mo$6q]2L@ Jaw4Qհ?PQi]=Ɂ/ '9lvހW1/ut{8-J=M!}E3U6rK`@'N>2K[C ,-fpXr*oHʰPrJ|#H-.%u[co4gXڻ bmH=vI]IK uĖ#Xʧ|2W=sTn%zҭhӥwطZ pAsQCpZG \,38г61_ji ,`!rUU*06:[Q(((((((((jIu[y8*@պ)gp0֣J[Aq"9c=S0:p]HsXx^Y[:gofڱ~̣r ǰ}EtC8?08򜾓ewh؊yAi?_rZhnQ4x. P0T1 >\8//xc/vv m\#cMEA:1n_ (M((((((((%]im5"EZuI<#w/cIsoCU~R$Q~sK[]FJI+Cm3HKljx ( ( ( ( ( ( ( ( (+.f-"+No v\S`Ҵhg(I3BJO]sVmmc8 a#B`*Z((+}h>\Xny?0\0<)N\ά>MWKՔ2G˨LJ {zWGkj*Z?2_ڶ]u}ZCgl,mR't!Tgo׃B|S|@#$,Q$+ D`G stV'$Q[7̩r 6wM= p'MO4&wrYc}|#{$JW@jQYZWtjo/My&BI$,8dqTZ텦JaQʤ&OBgҘ4VUtD[#K]Xeʒ`3//eq4qI|_ H<:\ +Kmٵ1+3n#tlF*i>߱S@}}abϬ?T YOu(b0^ʍOϬ?QOgu &yjBH]vj͍zoye%CdgߚErT>i>߱Gm?*zǶwcy䷊A$ܣX}*J# Jtinh}abϬ?TT6}}ab5l׻&HKVQWOF=jվŴP,o6eqz}hnrϬ?QOl7JHdHBpOR u5c>i>߱Gm?*Zpتz eQ™olK g7=zm(I.e{~i>߱Gm?*z* ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}abz_$ s,>}ڀ4Ifڲ6:rp2h`6i>߱Gm?*)5}6-F>]B/n|6:$^yUH= Qxeծmc=¢G#'l m?( ~Ewiim% 4_A?7Q֛&E}oe.fW*UsGOO>i>߱Y^-SVirf0w2qʰV״tl˶AdGKc6}}ab5լ^"Ќ>9Y7gnz6}}ab5h[MS q q'#vlO>i>߱Pɬ06_Nyeq! zz/mdKYdI?/= 6}}abm;WүoFm2Ȫބ8i>߱Ut6]FUQ#DI=/e4m\5><O>i>߱QjTo}_7og8Ba]"18$w^ ~aXاq 2 1wF I<YrxLL BP6=ȤFNFAW{Pm?( ~fxB@Lp=U<`hq-(;-G#Λ,p: ;d;v:Ϭ?QOWO}o/nlq,];SiNkw0esz6"OϬ?QOUeV[J%! AQ#x5^=sIRF!6w:6}}abA95}B.~Ҟ[6ppVn ;@-<@'~taXأ6TEZ!7֫= ߆jCik%ԬU-1$I6}}abum;GYk[Y,3,j[2 i/53NCQ->uO4.O'ր% ~aXبƭPP7wO9|о3{⢇5Ο=c- rGјY ~aXت V̶bš7)r3ִ(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO붺7)IEP| .ygh?ys;6}}abӵ3X5K䍶Zβ>85r ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z/%B(ĭxӸ⢳Ngukz̷.UGd;PϬ?TA9bHbMԭ5:6a=y*QEΏz/(} ]E_:'+>s[]Yڥ<>#Yp R^xYM;x{;qm$&;j꛰(#Ώz/(} 78rBo6r`.wd|;dQ}X7sN#Bu_-CItWG=yE4M][g3!m~o~ [{(*Wn xxIhvw!cqe*2 d*p$3gxB:?Щ*^aiͅcg썼I;/L|vG=yE6)tG_PyEt@G=yE>g_QG=)tG_PyEt@(((]h@DE2J5ni Җ\Hdtbqm/ΰY6md_s(ܿwFrq3Q].O%B|N `0=bXn&z%팺n,S[&4f'+#<裥Ds>ӮỺSW j&T>޼S/4B)uK,Z aI4ѬQ#m,@*1ǾkhqiαmqkF#2Dl`3sW4 OOom` m*X. {8'tQޟp6>%Q o~{H1FX.ORW#է͠-y[/SE!t?EGKӫk%rBfےJ<@;03`〰iڊ76K26H1Y@\ n;G@zLOzqi$D1..nFs1YGZm\ tka4m+1bs&® k/[E[åsai#bm8^)`ٻ!skJuwDp^3=}&w=kcN=iw-xon:+3P59.+mO&y;RliE;^8_᭼=cؚ2^f;T6'85H&P߼-4` fTB%$kXOWsV <5yoFj.H2A >׶6vP \Im悒d+qNVwwqV:䗺mjNU7W_fzWݸmom,U]y nGVpo]4q0ِggGIȻ/RDsU<]m֎~k9G%0i,EhH<7n-5i#_-lKm0w` 73QB0zl^6h?ٍXd r'tki. r&m'km9Hdu=3*p@ɠ75hOLt@X5ԪQpֲvd׭-$Mϛ\{Y@ZݫݕК֢.fY'wP-cvf UiSܽ]C!˯-C2#ZڢWYIkIɆ8R|,xd56K,xӍ4J) (Q@Q@Q@Q@Q@Q@Q@Q@QE1 ǝITaXة>i>߱Gm?*z(Ϭ?QO6}}ab4nWugj@p2O*$. ,n;Fo,$ 5qrKrm?( ~I ${'䍎A<gG=}ADaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=s kf%exM6ՐɴgG[O>i>߱QIj0{piI"ʮrGj(ƛ-smCցn9>`d'΀4i>߱Gm?*+cLKi.N IT2 5*+{)u;4P@$OB=(Ϭ?QOͲn|RK4𼑓Uj&C&.e&6]'>p::\<aXأ6b(n&aɻ>slaXأ6=fZ宯q} ʒX`eP3F9RAO>i>߱Yv~.uIn;Ox9'[a suf- 7#;I᱌l?GП6}}abciTN\FvHI݌rGP5swHenIo|y 8i>߱T_mZ}SQӭ<9]Q PX&xNBɼH+=1m?( ~W״:mBU 1\GNG't(tu u9,b\alϰϬ?QOpM7[_9|ҿ ㎸G4f[]^)s>~~^A뎔k6}}abkzu&א=DeBJ}899UzE6a̳]F纃:Pm?( ~LΨق,OzE4ۋk{i5=w*2N{fm?( ~dpX9 ۱p3GhK>hYʣ_Ϭ?QOs]۫ʍQL ~aXب]>{+[YEytCj!ITiHQҀ$ ~aXبb{ l |r߱Gm?*kKK{JyQ"uVfo'$ýK{uHr(iU o,`pprރ ~aXتZs]GqS`mSt&ls9(m?( ~Fu]9uAd-Lu%O^KyEBH%IKO>i>߱YzotSG RVi,d9PI @ W'Gj^[_Gucqͼ)4.z84aXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~T]$"Ѩ>_n~ I< Eͼgݹ_ƀO>i>߱QiƙFiF]gYBBT@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6V=MpbViwqQYFVOf[*#2zGm?*H1$y@AVƝ 0`LrFppx`OG#aH-g;܀l y26MLͿG[_֠?e&OɣɓyhS?&&OɠQOdm|1L=̷FX!hlۖSg=lhsKD:1n5cAZ?ʑ"o0.G*RzZ(*Tsj/`+2Š((((((((%]im5"EZuI<#w/cIsog?,1ysK=KZgs1m_sҽ ;ymZ[[/)|dži@n3烊zݏ5]^-WZR3h!ؒF&S"p^O9(w*~ oMPjn][a4dsSwN+FO6!-O81q)=Uw8 m\3\6Wd\Z-N"ߐv<)nb51"96Ly# 5=NCk)'frrfM[)"*(pZ+A^q%?d,Y9&ͬ%J1~I|{ w__iVW7pʸDӳŢ)gsu눖{D,F''$n\u/?ڝ.̶ҥMع60Ӻշܘ8DE-m$s> \<~kF+2 ^xWE\^[X-{y«ǟAZSnwB/bb){q"HYJʲJ$5=GP#>^Cl-ML"?'28wR*ua`ᶶ:\Yrb!%YwtZz5{h.썴v/bd[Æ븖ykMkia>4%oKsBnkySj`1_ &QG8[e0`pPzyNEcLlmT'N.,c1ҕhn_1NoCm"[ۛܙٙKB6*%rJ8$eբޮEPEPEPEPEPEPEPEPEPng-ƘbHyu=ya7qTɪi$O9Ip0ϟ!*?){j( 󹃥yyqKfx%ap@<Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@NMAv7;g)iZ}3ocmw$!P%'9tPVVYF0ơUG-PEPExI=>qF^5 f'AJҝ9T,HN<:+ ދp$c >` _+5 (2Gi[*ZWs:USE=WZ|VCuqup Ds %9辔îc .bK,&~Fإp0rÎFyj+F[72y0O.)W}Pˍg II LC FBv r>R"Ԣ*ݺ(,o"!]Ii fsȇar29r&Ҿ=M*KHdcv=/YӮF,˾IY@u\oljQX׈G3=ʛ n9!l/RJF1T$"yeXOZ<íc V=D@۳tjo®EPEPEPEPEPEPEPEPEP%)Dcm?*z(Ϭ?QO6}}abo.ᰲN<maXأ6=%ү-\HbyW#x6mnζ}dX)*I ~aXة"1j[ܑB#3Gq8NpRQWfm?( ~OEH>i>߱Gm?*:ͼڣتJ#{ Q랒ݏnmVWKm~}sO<"m?( ~,7Qy=dE$3u A" ~aXب]R "VFE mw1 { G}[X3 VGnn2T0yJ{!9%g6}}abdaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TK䁮eGԗOP&6VC&G]NMlm?( ~E&Ũç˨Z٧Q$*G0xOlڵͶ wZTVhd́: ~aXب2X#m-8&P':zdC\ U= rà i>߱Gm?+6źbJ .BLӦsFN9VԚz|v"lpp,}}abϬ?T>ܢUG+&ޯQ}}abϬ?Tco|K$&(Q@i>߱Gm?+3{ Vwec. ߕ{CKc2\EKsoE'~Q)B /Ϭ?QOY/ ԭ-nHC4)'*SƧ`u cy?g<S#րO>i>߱Y߉4)RkfXhRYTr8i>߱L4EM>d&l 52=U45E$]hӨ L۱ ~i>߱Gm?+'K/i>߱Xz-兎c-յݍhb>`I 88VSkB]oLԬPb{&xTXd@HeϬ?QOMkJ,eԬG1NF`*9' zӠtBk kY-fei#(9GZ6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXت޻kZq|DZ5I'V~ ۷8i>߱Gm?*-;X5M#QHk(SJW(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}abǯ]."Jm?w;*+?wVirYD{FOQ_ ~IC&$=v(4JXӡfL @"PEP\׉|'&[jZ~l/mǸ$WLuZS*r扝JqY[/;뛗^Fy$WhZLZm"@oaĒIɭ +jغQ hhѓV&ckV6:f{]A*av?vsN ?ʴ%rCk=sg@O[ErunqZsXƖKa6y@* `1eso UC>c:\&F|Ҟ^ݧ`G=EtAe߄-B-R n **$SD}KNtȮ^[Nv5Y81[PV[[&'>]bc R|81>siMoii&3>CV-60z^rڗnOS.l⻉mRE OD1gG{-<$wl+Sio RR{Wp8`{SE @zJ62ZZÔ)w2V~@gaK/_Z] d$]P7d̻ԆL m$aw__iVW7pʸD~?#Uuyd ڑjKm$DhPIެBz5[KEW .Xx8Q][uً;;B0^ZQ l 8+j( ¸M"/X?ux&G ,U>Ar#:h{Ov}%H?I,책TO+KG<@$vUЬRDdܬ7g89#U_V1tKSmMz*t%%m3}Z=\F?Ү"1H*N9>E%VjCihjbkm+#%y^Hd[7"w=;g<RF1An;k8c8*((Gusg5aqB.rQ]LTʣjQ^iugBK1ze9פC' I "Oɏ}P°[|hm- h).ͯ-!h؞"*0 >YEPmoOI"k[y1t;#qU|WjWiogvή8p`lQXnI5:Q3Kaqw_li}qHfSygjEQEQEQEQEQEQEQEQEQEQEQE`ly$AGO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~IC&$=v(@Q@r>2ub3!]4N]EiN.daE7N{>ǘ=sWMVUmIPThZW&k.EYdd~ +Zb-K ۅzux:d%t+6|rG 9h2x--Yg 2&ʄ@F0y9㤢S3^Mney0.SnG*<돺R O6 LIdTr9?qSEF%6i0AwF+n(uf%CK'=P[G5HD@cH ͕H;Qⲵ(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE\5 tW 6NҮ,LT8MwTWxVV{I6&:ʽ7I$sp?\Ԧ3V\z4VGG \$9 i[)]P/\ }<w=b:6͚+$xJt4, #TFWkRj%M֟{5{SuMi./(!|}2(aW1 ԞE+ ,VC"f' |S \Ҙ+g1x*a y^4t+İ_xFKk{h#{iU[v2PMmPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\?=jn0H 'WqEiN.dcZkGG]3ssiyĹ7(vt Y_G}e؎GEkW:hʎgg{[+nsX15S7qy r}q]M-G1bQP<@|d]0ɜrG\zGo[nL dm9ɜp8WeE K隍$ ,yc6=6~:ۢ{+QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ϊCw^iAv\>FL1V\,z+sNZvkk$}dzJLhx;WS%ݎ/nu;ٖTnH隕=A$;a|Ip26y-K{Tu-m(ismĬ軶7b13UljӯēkHop0z3Ӑ)V#$gX>1{{4Kt0\!nOx.k6:{u]#FD[m kgT>m>}T 9=h_ןEœYmavwcgͻv1޴=r zkx. 5H3'k|6tu/nԚ׺nDB#ҵ| e{iͩ$-=҉$}@ޠ4-~O!-6k騢(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*9.`4q3p*J(Z?QO ֟}~ uCn>i?PGۭ?*z(Z?QO ֟}~ uCn>i?PGۭ?*z(Z?QO ֟}~ uCn>i?PGۭ?*z(Z?QO ֟$S6|RLuEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERX'-p6m\=m jL}VQ qDXR5 0J|?|mI11f%QHw\47i%͜+'қ+G:~eŜěH'ϭg^hWz$@["+;{+&fOczҎY4z-gX O1\y=~4Ʊ8 41 Ynz`.dhKYYBf`V ~ƽkhm,`+k&FYY[k29=3ȕ׉񧋽2RAy X#I"o?^M[NTMկ]j)Jg r9q\jrߦ&|3K#9̸ Nsq0i"֌ZCyqu#ٛW7+!Rh?΂z\qG-k[i++nH$#8:UiIӺ} :׭sFuggksap,,䷇Qhh@s(*&I|jΑiI[l-U$Ey=鹂 +[[o\`STLl{6za֪ [NQ3jQm1"rwgsXj4.q)c1,j#/67lkM/P4b̞}ٖL,I@ͷ<xMK[RlÂۍ#vC6:V.2X#m-8&P':z;xzOPLAOnX<{e-CCI[ᶚW-(2˹LrWvFF)#ZhQȥ]-VS؅nJ͢b (Š((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((]:EWU8&G0r0d`_ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 72[bte\'J\׍.%m\9]s~EiJQωQG_.aZyR$\);#n9wD#ı[\ Mi\ox!'`ٟ)/\hͣ嬂=(ib-%bIM,F`ßVVm]ȕO:{MGV ,ܣ[?h:aZ\ܘD!Ì$2F:kT#he3b`2A;p]CAv%K1 +|pw6=Wto%u;/;1CrF99*{]Nxm Gpd p=k"C5anc2ӑUoVK&[mYmVVK!(sf?@092puoMZZ]R$3,WqS; +y罽܁4ʨn$g#=tw܋F!,9̬Sy@\ ZjQY2)r[5G/#ǡ=! jukEƩe7 ig'N>M/Yu >)n4dV99q'2\:ka.gikھd' q͘`:w{[=w[Cwr0R<Ю30(z`ij(EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPM46UWGYXd0=A('KFݓhYBt8HU@ ;R@Q@Q@ XbYep 袀 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?onedrive-2.5.10/docs/images/authorise_client_after_paste_hashed_out.png000066400000000000000000032354401513710110600264440ustar00rootroot00000000000000PNG  IHDR8gVsRGBgAMA a pHYsodIDATx^EƽS9N鉻A3{}f3$HTrP"$QP̂(*@\T5===`Q-ξlQ}9))))))))))))))))))))) f@_&%%%%%%%%%%%%%%%%%%%%%UR ZjRRRRRRRRRRRRRRRRRRRRRRիKZJJJJJJJJJJJJJJJJJJJJ% h))))))))))))))))))))"i@KIIIIIIIIIIIIIIIIIIII]IZJJJJJJJJJJJJJJJJJJJJHRRRRRRRRRRRRRRRRRRRRRE%5T׿2>B=Gx))))))))K_D {Ŧ>PD!_~"Om&TjP$ EFߐnhnQ>:-DdyHIIIIIIII]RJOO;Գgϊ+<:%>iDy^.+ѣG~~~բ#PІQ0$lRJ%KkKH(DzWR^JJJJJJJJO,g4HU_P!R@(MCa3ZDm!q B5R7"EQ8)*GCŪ,%%%%%%%%Ix>s:NvjE uE}TUjUS(.ԇm,J*ڵkuUshԀ z 1T|Ʌ&:5 ǂPxW^))))))))?( BȔ/_[n{wN Qxm}~$ Q"RPbU]鴴{w(z?R;l߾=͐GB6-??ûQ I*TA?SRRʕ+B'bB E^| oT@mG~/!&={;wĉ'Ods!ƣ 믿x<ȣuP[o  EVtRiZӧO뮻a)SBn ʔr'"/.88%%}LHbcǎ!d4h@+VD@\*ЖBG@R* B9?#C{k֬YPP@z9A"twϘ1 m۶m UVmذa?ڽ{C(--믿FWdd p 8М9s*T)cb͛;vz}ݑ#GywP/zs4pFKnUЧUV͚5æԟ[",}Ǐ#ꪫPXj{ZZU_^{p M4;6x=mۖqn3fLvvyI(&н{BDűI=zE CMMMf ֬Yau]eǎտΜ9{BB”)S~xtu>SN{9rШ гgOoz@?"VHIIIIIIII.$EDp:tԩSo6p"DشiVY(>$%%ĉ*5RJ4;@o߾, x>|0:'K}~DJK hO z/_aѣk֬I0U#nꫧOg}t:-ˏ?iӦ{۶mQu~% 塪U~799941C؍ b3EbCEL-n ]n5\_~_b`m\\{wz뭕*U ? hk/x bYf+@N4}x믧{wuR1l0w}V*V8R(Clk.4'?RĮ7n/ݻN:$ߏcQ'sUX2B֭[SI寽Z_D5.aP@H"jlZNdu4VB .?C}GyA)*RRRRRRRRRz 1?x̙Ν;p BIgff~ONOOOMM=vl6G&Ms^`xrSN=qK*i!өS'lk֬A4O?tar!􆚨РASN4ILQʕ+/Gi۶-$&& ΢QFTCR\Q:6q8X9DJJJJJJJJUы>KQ\,Ql1޸q P >5Gp…|8P0"TF4^(5p<1">>C_2f(M@͈;w+4>4 Ap.]"SO=գGc"{nX3W_}7tZ nBj۷G۫z߾}gΜ1cF޽ի:Э[oaUXqԩMnC"wߡ+ķkڵW]uwܱw^oQ B8bǎӦM g͚VBwy[n(a&奤~{!y衇~׳g>o߾n{;jԨ3wm6GԧBkX-[=O:5~ʕ+cЪ)͢(f|fKXEYBo@ !1DሧG1l0c& /x?CHORJJJJJJJJM"DJoFN%qqqo6J\tǑiBԦM'?&b˗G/(#>#l>D@.]J=@;w?AŋŁ}gQFj[n0WC{g/YD-=w~8qb]rs:# 2EUJJJJJJJJ ؖ-[Ԡ (ApIK'E,b< H;wZ#Po^zvB`ܮ];dR fϞT0bPyڵ|MBjX2$*ހ6tF ݒ""&UX6lX0{SRR„*iӦw=v;S}To7t,".J˕+x}̘1hjȑ#ӱf͚C}ǽ^/.jBbZ|/BP_O<裏/:Tڎ?~4#A$oD!ԫWʕ+PDX2~lΝ;y[ 䁸nϞ=Tx3\5B!+9Ry~~޽{ѹI7p]dp,l\޶rرE=5o޼ÇpʕTt>$$I%%妶$ΑXRRRRRRRRRVE| )>B梄ʆ0AIAE,b$8bC VV@!IДJIIIIIIII^Bm@{^ڋOo@SZˮEGabK*(ظq5 8[`cC ٺu+ g :4 %W4F/s: BiɅ TB{!޽?ʥBG}' A9RQʆpBˋ@ĪrѦ>DZNyPFbWv vQ x j 04h=jԩ[j\uWcԨ©MN*i@ ]rjHUVU)f*eB P-Lr*VT呀Zժ[tㇷZ A>b9+G.S4og@M5sTR9ETQBTfŒJUl/&߄*UTS( U,Tl3ZJ݊j1%4UQb-V2Jո?4cP קrJUV_Z|*u*Va/*UmuXVS*F +ƍ@r:lUY!YCvW]vY`Pܣdֱڼ6WD?.;jmZ\ZqG |A5 ΫWEnEPZ-[ڶu5kkֱՎsY\V9k{ii}ݿgַWny{׻RA^ַFnzwЇv'P&}z G jެ(iߋuM^-6Y+WQOR{ׯ:B*Ay z͞y9Y*9y3wKde$egdgff$$wL!9#2IK6#K촜dS:&uLܮkv]:оeڴjҩCmn٤Mm[7kצMo i-7iۺymѪ}ۖ-7nڤ~& 5L@֭uhߪU&  6o4iZ4k~Zl(u8jնըe^R ?+ϹL{,|.ECAD­d>.VŐJE)7s):zЕz%EeMҌ4pjװVpRruoE|+i:~ 9JRk%5ɨ^#QâRjwG嵬Dt 3Զ6ku+ngZX [ۡRUUEL p $ $J Cњ 'Tf/Oe苽`¯ zyc @/ %n_7S\JaMq3._73iؔT7KӃ{ :0^޿nڕ;'$۽ dV/HѠM#OWҕ򬉻+arJM@vW$tq\V-XI@mI!J6o*sgY\HW>2М@}.?͌T?ŌXcQOW;}Y@ӟe"u '25(G}'~pea]2"tʄn֥`y (@`=n7/vr|= ? ~|=G zf wHoju4Q<&>hsgi#/P7aivay2빡n *p@q48!Ht]* N)AT]v!^MqX]m\vˑx[+tw7O7#} xs˗nӟR 7sNf8]dLt0i`)louvV{xg,Z6e)6gkS-KE)V[K3ZXlMMΖ@]ym5Q9eB?4{8GSSM9&gSۛX$jlN7Fks5G ~`l8[cCuhju57kkdWXSy\F ԠKbd*f:vsjۛj;pqcSQ8|m u@9RCĻZX-ppͭ68|hIh!аsa]Hi6Mvs:t%9c8{֤ o,w^[mx {V˂wX6_,ݼw\Ɨ۰7i 6`ʇ^pP.*Bt:D!\6=+ ڤ~؁6E=.Q~ۯOl8S~+g__i݋o7X!8+C&q `ӫ/ xskfɺ ^}eՋX[lϯ}9dV4%k?jܗ_zvً^X4u>n#?8j9{&<wۣ|}۵y}w{n?؃ww?_㦫;q\^ڻ]ߝ7==߻{m89Aׄz[itvpZ 2W처` 6qhnAsGs`]#V'2hnYJ\-lf]eé89vwKS̱{ZCi JkaJl:\͝]{?5ii:ťt+(Bx5W2|m>[A׆5mߚhKN(ЖH@mBH z Ѩر~b 7:F 4jع~b ԸQW*o\s7ܤAiîftV7xC}` mz Ӏ|mz|yv)\O3|=wCxcr2.%l_KnZdp6U~"px1j0GUJauv ohŰѡ wi$AYg B|Ktu@i_5UTa9#*ZE yR.irg+. +u֮y 1\vy5~ Gdy)NJ&t fLl+IÛPRmd/M8q=Ɏȟ=U*:jetVƆF*I))@ԟv.fL(Zo?\8N_&GԛP2͍to(Jfї9ґdsK0pyfؽI(n}j5pw빝 VPߌDg|Rki:= _tDӖA%'N5ðYLc`=v P,ݶ85n۬Nn:lšt2c PFؔXxڙbq-VW mqj ,V8[Ġ96{hbPټ=:v"ձ VYиhhJԶ5(uMk1AVu6]qyY8s⭨oB:4cmXB4 X%V\uՌz5b]NumZښ"W g11vk'8i&UǃM\\1S_Gڰ5ь,*JըժYƵ,Mj[dP!ೢM<`M3iar۸프zumk9=zU/gtrf5gdV43 ׾+d^j&kϢ |zثV@sOva蜧j'`Τ3sX^^2} ~AsWW[Y\L[xRW6W tK,y< Z0g¹ 䟟5~ތf79&̚>nQS9S1Lx &MǞؽ{w y FA z{o[s}ˣ1r؃C{q7rn_㦫on\w\M o7oɽt7 սy8;noШ?lڸ<V6{Kh86,b\8Ե4cF"A4¯c)Gib9a53حmX5Վ)n{wM+p6dGpٛMf;̜W;-qV.W+f-nO+2*(ȇx k)MUGDpmM ځ"1-]zCAhځ uj*ĀB!67 b0z(€'qs!ؕT9 C5LaX=],Q@T(!ȱ{%ـ]vyӜJȬ(?!~d FxPRE~kۀzR /v&/ ٔ!/Pˆ9f9N{Lar38b~a)&828" rRmq4p3[إAۊMdxlXhXs4jEv4Ԛbà!-lhkCy[Lڬ)v)جqY]xj8pxH2ǓDt1׉6E67 kXc)Nf8ڙbu1&[RцCZ1cm)kme)qf)%-71)טgVYn\9J71yoMױ65ՊoLmkÚq7*)qMvDkի\u lˁ/vVXN~pho Fքk7d>2JbmT{3 |dS+CD;(FuZhokX ؈&.F,jau6[ؕ._kO7/^`wm4)33[iױ{v]w݂秿t,[8}e鳫&Zsg|i+Kgxa#z/!ּ00}s׽2 \mgSu bqEoȬZƎEPsAgr; ah J_yq&9(aC3諗yEfUt)c 3/^%^\4)X`ҢY0s&.42f=9{ژg3gg<9cGO4̨O轣G<2qcF>:<z_{۠GؽH{n~ݿn\{-!5{^wM[n i7;n;oknko=7lhH u{[;\-m;Ҍ@ͯ\LR:,G1>,6FfX-<_tEH)` 6[3Ss b)6G,;NG 3-vGSni4t#o7v8;l?kNw05h֙V^3|^SDE͑sZOQo#ϡLj-lRPU(к^BhӠ^;Zܡqݬ `?"l@ԥ0o7!g/@/7Aks=| $QHUcgn4=ހ|&H9&WF\,l YVKNLVӕx:"g3 od|0e1fl-|ys,ǁaǙ# ;;=T6~]6wDަ01)e\Ka"GўF2>  *nj`=՟ ˬNICޮ͛ʗ1 leA,E+脖%M1T+i%l}"3뮰eX%@YB6k }YvOQoՕRFZTJUj\PĔfؔR DZɔf4PWR|jW,_5+^QR:] NuTUʚDqU+ J 5VEc Q9*]Q cxe AWTp%+\AT-w)2WT2 6+^_Y|+]yٕW^V+TY|RrESb|D|EsUL4 H(*c0r>S.K9)Wsry9)# W2zr[eʘ+r)],W rEeռWֽ/ursz9 u.-ky/6%䲿*_ Tͫp_+j]ךJTS%YMCoڦʊrl.Źc\O6sY oU鵘.it^ ~/c|x-wyX<˕q).RV|⯨h^Y3U:*WwUTQW+>P8.o 6v1ꉡF=1ß?b҄S&4aؤ k {ǟyr"1#1!c=rϣ|A?~ǿn7n[o[tםtmyu_7ꁽ߮ݧWn^}{\8_̮i)sS{diy3夥vNK锕ѵG䎩Is3ef$7_W9_Ԕi|5v: kVRU<WJ"?%e_J [:+ (7E(W\wś܂+<C5)_> ,D -+0iTju,W\qe W`E&hSbEkJJRJ .gfTsDaKWw jVӨSKŭe\kAk\n\?u6vlXCzsqNdk@r5ib4(͌ЗȻ6{f0w8}|Ǜ<@; h@EYi1`ހ&X9wW48d]R,6mnR@3O]-.wX́Rvttf5#;ֱuaݪDW;q QeSĠaO ;P7lȨC?1t!:lg&zr4\~|QT$#=f ~|Ï zWlȠ;rԓ|GVo4h(K10B\CcАQÆ>bܐYc]FG(Gj`HŮc#EhAs#Cx}^!!ppACG y`CTwD c'BG4.(k ac 1n?1~'G0jc'';vœ^]f寮yy^n~}+V+_cdmypV_(dym0^WA axTް~-2UojRͿGUx} [7y=kWXo20H~hB-cPym5.4_>3kW-u˸\]v+_&^f׬\/XeKV,Gd-]lBK=_ZJ^\ σ%K[x_\.s7kܙs>k9X0sΙ>}&͞5 s9gc挩3Of@e1k!BgD'S:uҔ)nj2l:l3}| aqeO-)[ Y@PMb`nW,za>@0:CF )G3$CsLJ<>56Rs4gFY6"sefFm:3]c_ソѓݴ-,@uyhY<4,Cs!^7/|>Հ{dރ hx'\HV L WUO::3Ojsj)3f= 7k\QYl$%<@o0\:zꅍIӚ†6GhD\ ʸ&fSlP4sYWH%d=GV(4G׏?h +lw ˮ3͖ f@۽lgF9ȴP#re>1LQ?=JB% ~CͲ/%hCϦ|"_,;ݯVwt{gϜ>yD!8}D _8J0SO:}̩sOCę'O:sgO83gΞ8yjo9z |LLU 84L8.<}#U6z8}4ₜ>NሧNbד.ӧ9s . unycXa:%79Q=ԛ20OC hK. bPKCD'Ozԫ< hD+) jsgϲ^O<Ã}lS'qtO}PϔʰAW8;L'{}O[d 5] mAjHY*B}ñk65N~q(,'N=~Sc x"pvnaQID.y'…z 3dC @z,GŠM^>m.|ͩCݙ<Îy,X ]"j.R!US+c#E'NSd1⾞6{`O^ȶxVU Y5g{QN7Q֐ .4aO%ˠ8TP{N:@UV[-WVR@~*KDD/f@# ; |q+܀֜lJ(f@F#pzңak2t'R8 h 5ߥZV$ؔgTHkp13 h։i@T2RmNp q$S`qw)OG+vw U;yg'[#Swtcm eh;^<+oH8e%iDw\H˥US7͎9] <>+ *̀& t&l=l96T/N+ni@[h,lslÛCao^"Ncwa@}svh<6z:>0~_0U0`jj/6/S/$; VnVe;|9d9`7;.y: g>r.?!8rvmoێ_B `_3 80#Cb14D C@A*}w=u4ƿzs7{NٓG]"Q!$wqg d^Q?;hHth)pR=Gn.)+Z9xK I1SLt!%yI+bJvW#Uψڲ0?<̜`uxp·53x gTvެ>aQO,[Rz.S"`h&pEM6G6h%B|c$3UMj=M%$}҉GK 9'xxdsg-\7j̀&Iw5о`?_HT  $ ߾?4; }CW%ԻT7l" PD}6ٙgʻy{ h/'hǭ\/D8t(iɌؔt'Naٓ6\idYOkHSJ-Jg%b޴+J;AWr?5 A'چt9nH:Y\❝]1хZ6uܝNd Ԁ0bNu\Ԇ-zv&E6t5[ []v>vA]rm P6]A&bÓlhe6 9> ~܁oBwO0YJ:aKNw7kӖLS:% -/Osh1dټ亪zʀosph0v=Q5 Ca"ґwwrl?ɪeq>5vPt/g d e3J_yV'N={}u3 ge=@%8Yg={ ̟R8YP](uQğoO!}eW]8w?ЦuǀIv4hڨK]۷\G "jp?߭ڕP@H]#8̆֜ -i@{zv]p: bx%56Mt8U hNfM3ln@/f@wstFjqup(]$;Olg2tQ&U>9ёN}]{+&<-ꂒxGGȋ; lu4(729bcPzZQD2h=ߙ`2 rԩdR/ԀV3dYFӗiZޢq2m~n3mfؼ鞄skPCN4 bs sojUgCs՝3YN]ɴӔn g9 h?nA&g@׈x}V=uԉΑ{h"qԺ$=J:M*Xa=WAzJa(gW @gwBbto99tuYH +cl5vl8} Ԋ5ZMROksiO).8{Tʼn=z%ߙg쟖KI3~i. o [TUFԅ(M<ǎ;z(=x>ibCNr'DTKQGj5k0oҠcF7ڹ}f@8O 1 ԻP`ׇgS| e7ڀ(zr h`=N_70; ;kedƘfw6uJSmh͚=hQ όFYlX$'bt$q@BMn[Z7#¦aaZF.g'ohqt $qqtvtb&2nria^sru&h R2|=V[1&ٔd1 r'8@?슩pxl\zJ̀,W ۩l6_oBiV.6%Ó۴-:\If񤹂̎3:Wo"{~d 1@|fph%3\HYg9P)vI7IqbT9|ykvׄm󤖫d*~#s6| >}z4(}ԁ_noH> ;omnM$c$0 j }S3-L [i@c3ڀ&`o`@7P? gf@J͈ ,`S/͈m@ctԋɦ8X]+m@bx칅fĈ_6g;9Ms2ucMprggg}Ʃֳ'a/($ci6".10b`b&iv/6>9& ^&ە$×l%Jбc9sٛfNy̍X4<9 iduA ig0GI424Mv|@߼l|{KSm=ɀv#e=%֌f v3Z>W}H\w0LɹSڭJRZr:M[R LXO+ Gv}g"OM1$u[JLE c rXji4ϝc_|Ex[46oخQMvMtlڰsK5 ׿cf״ŵ (Uk; 2ŬЀ Հf @ hMӟ hA'A|g=> g>'0Xl: VJ hvѲT4ujU#\9ʫ5S>9Wּ:|'v;U^{{;7mήGG;{3a,v^4{x{G )J 8eہZ]k{*^2Gi(c8?ܝM{J2g1tuMb2}C5G$KsxlTs"{MzUÈa^͛R +6YVdd=gbCy`(t,b%VȀ+jشf-co|Fb\,9tU nl\4qݓwss {jk).avI1CK12FJU}~O` 3{^t^w>tNرc?D Dyy)2=ZB( O*0E\o>zz+>nǛ%il 4Z {ᆲMfuq=n_ hxhʳ>U <ރȀV=hӛŢހ@-댂Pl `'tŝl>K"-}^چ00D<[Cj(noWڧ^w}mww(IN ۝dqv+]ŝ;p9ӞqT hSINhЭQ3<-iq̡ .lDlp~0íӗq;es%|gƭEh j4g"n_-H3-ne8&k2nFLX //ϑY![ܲ{ ՗ fC|eG _l͌MNJi5cz" wzao -@=6` (/rn6_+Nn e3ѿ)*vY3 ujjB0٦ y?e GFŞIb~RE+xBhy/T84RD1N#(b<62HgM]{9x :t+a@#E^<#%CL%e"6@e,e&Icg/,-9N~hxEpb&źB n..QiWTo+}/X@fȟb]B5 _4yDCk@#M+fh*Ԅ(q۰xSʥeD3e~(8v! g{y]T" )^R¨0H%ԡ8)Hl$* ̞#@5:"$D"H$8B(#E:;4gę,ܼiqƝӺ}uw1/~nЭoڄWBHf@3B h82IЌ@w?<Zo@,0.ր>]{ӝ 1 ڪZYʈhf@vK`@Qd^e8.MZ!&/^eh\VW;3':۔ z1[v~EhQ] oqvFơ$6/dgLwb2u27YMO]*t:lH"€f9|s؀؀f !/.rS"f:L8΀ hKG#\ac7 1Tѻ&aݟcg ؄e^ڲ~L&AХ!ԭT8؊f8܉= {)ɒfq܀jX;C9\=x|xUkKˀN>uɂgϞ#7c#@C Xl[Srǁ-BjHa/(CՐ.t!C&8 2TN.ĉivA(&K%4'*cQґtִ) jBԊUUCz!R8!H$D"`.Dz!CGb~Rx4xP61Ç#<?6!ɌF;Fm!N:>׍?LIJ׭9rϾ+~=T`tׇ4ؒ~@`"[TȆFx1h@l ŠÐ-e=%6Zٲu030T A0 9fa AӐMЙDjC_!8@+Qbcl&VPWaf 1ǀ( ).CEፀߒ#.TI t{{ݝnH̰@w5mz:K~ZMf@Ͽ h{5'OSqp޽ڵ{o?!A%BUrQB,Q;MDՐb۩Rk\zFj2IQ$C#OB*M\V׼9CsDCz1Cz $Z؅C sst6 /D"H$"))<_LD&UԂC5ZY4`|wiBd:TCJ4-gnײog͂Gz+>i+o~_7?O?| ;`?wC, %ڀ&AՕ h@Mf$:ם3@.oz&,LRӓ 3Bu(2z4yМfFy8r1 09&`2ʹ]m|hlֶeiWޡmkx[;b~+b]brl]h9̀ wRY{Z+t6`aSu96%Jf,~SpP  M\,Ѐl_pOTDUMfvapKONLt>o08rNqhfq$ L@x3[mt1-4)1t{N=wO0A _ՈB@%.2]܀v8|5oXh!Bmί_8~1cƍ;^J&Of͚ÇXޒE3%Re DS8 LWX!t B ,SJ!}ϿyVf8X#l@]%TF#}(Ά G?kD"H$KsJBEP i.1;p3bW P]g?u6:~dPB3WuUB?Sl-iNO>33ZFZg@4ռ[GY,%4Q51oooqvr*v<ֹxI3j ^CVf4 Zu64Ytf:[P0:&qNcesƙ57#_j%U"fFt\ Rۀ|g(pq DV0ё``~ɍ;- a0}lgr]1?W1yaIf0ŭ3QBJؿٰ<2KOrqn@:uzƷL KW^rj=V;wY5LA3db Jh@p۶m;v8vObÊa~pUq >㯿2= >S?1K ;7?o@8:Jpv_|źu0vQ5qx ;sqw6l؀B}^R¹cTt8SPwGITV5 [0*DЌ=n2I$D"H.eb }(WQ  " *Spͨΐh8# =ei3Jhr4*hT=zQ\'pާN-x[B 7'{ @h`0@*_`6Kl3h.m-6PV0Ћ M2ml-5yЪx:M=MGT:_5`tvxn;Z\Iplrtgށ&kIa3̬gB39)2L'shcX1fr#=&“bg#FL٦3 JDPr~\4d4`#Kh' %ok=IL{఩br$z_[yX^ tDY&]j12K' "l Q p٦Vs;V*9.iFM.5 tk8p2B?2,y؋Kh@9s,ZX4$D àٳgoܸFָ… W\M_Aq^8#:/l~gӦM1cƻヒ8oӦMqq>`m۶͚5뫯]jKC4$&e;}v(QMdؓǿ`S.22xxy.p`_0BҀH$D"Ca.u-y"%%T)WQN"Ç1СCl3 MvFGA6ߏ8Px u0=Əsqr՟w[o݌ V̀&\ GgC -ЙafmV{ӝbw%9)NOPܝvWXGXl1 s5gY#9iC8 ÖwTp S. #l@rIpxS  CHǃ4Z#F\4F1g_>(s-f_\,4͙2b=XlןcS,nܔlf7ė榳;G-"/]; 廐N0@oZw{fK̀)|W_[5k^]jkZW_]voߣ +E L /[@8T/Z q.~-4B-BbB$z3큤nk%V3gB: g!T Tmdܸd@ψ)qvj%P2=h[UBqD5Dž{j4 ܂z4*$|y*G1_~gUT3gMۀFبQ>#!#b<7D"H$ɥ(JM ?blT@d8pWwQ1ym_l{Mz $# &^H %'  AG"io{ B7FZ@%h64ca6%s6r4?ZE^Nމv%ISޝfs!;=̆f( /$5X]]= 'Jr(yvo صzD-A ~lήJB.RŽ@6W'6E{V'tF36YlYHc/hל&@[Z]$g:.@qXDC|_6g vo+ hq~m$[R!)l25IW3>13`8z02Gsx 6Ye̢-Rmo 䲙lr4KG0yg2+RB?(<Ӡɀɷ7jq5.n mgCEtA3# cIK^1Ph@D2@O*x3_+Jݛ^j _9wi'O(DHtٷ~gQO<1''3= 3jJ:tڴsA"h^zɒ%/ ?{ +WڼkD0cq׮ݯ~͚_|󫯾FX[^aۿzzXz͖-[\i=0a u'矿oÇ:kժU}OM>lݹKz[R'6o~]}k׮W6رBgժկq8/B!vBaq^_||@F_^1b{~7>:[ocH8܏}w}kǎ0_[l3~&{bn=㠟|ԩhAcknk|ѣ+5(}CVW}mz\46ӁWCM6mܸr7c Qu=9ػ.8 1#GPc>}ƞ=4! _0k6xG}oEfQE9ȉFtORxD!h\ȁ&]y6x[}mǖ;>ވ(mn Իʟ8 :0 D8(@Ͼ 9>{h/4mưUuLW2Ǚ]J;ƗVHלC&hwq1ـ"w0ۓg/h4,1yYwؕL'tiVO`[τ:5̻e}C$Po*ӖWl|$R0pfa/-n):-msx2+oDپft7=_Jg@3Ä(K"SvKӟ MKx{ٟ쾌rU>|sb?㏷"ؽ{n]{YzСöoEL]…_xaiAQwgΚ/L>kEznǎ/fΜ -Z /M2 G;vƍoo1nܸŋXr'>PV zjҪUkVX1e+,YO@jK.+(8[om>}9~ɓW^}hcFOx|8:D#G Θ1 {gϞgϷ`?7uʌɓ&˗/>m'|'-[6b~vm-{g&K/…K&Lx 5Zmݺ ;9 ܎_~!}SK37l4mڌ/8_<课j\م "P`G}\u˵fͫ#]uu|NcvmE {^\@\]p)_|E_m7 (EWI؄pG}ǙӍcl3?nD"H$Ks!)6l2~W^y9S9287o+€6 xW2yn7::T"0+f:GßI&H 3YƱ h{{%Fle0p0L?Q`; iFǟX vgy(ln;|Q)#] `O l z+2|f/ hDdaTs>7{4&DkF[G5>r%7-Zt#GblӦ7ygVZر©SgK?3˯ {rҤ)>ڸqȑ#zk3Bŋ<ӡ1tj 0oo'Xlj/¼y0`}vV{|;n܄u3?pɒ%뱂'L1cw}3Eo1>C glO?=;i_p$[P':<Ν;Ǎo90%K^a? ;+W؂1gȑ3L~7M޽{τ O}Ǹh~9.88#G>}ff޻w/!.3.]~C pxp#G>sWN2 w<6q7pp\tE!\yEf=ߣg*jAs4 tQFoͅGL"H$DG\W ?裱c._ ~mYPlTͩK &:;ɀ5#?˫6b>Çb TU iR5D h7]O5y@03>@+w|g'3}`~u'\nHKk@X:e.i͝bw9 ;a3Ig|`]@N8xlcgW/E?d=̀gJtl¦ _ zYcp1'IF5l |s/%zYwmS2̀7$PWhK`8̏g h.{Ƨ3Wo63O@0 3f̘9cƬ_~9rI{=U۷%lɐ!#EӧRaʱ/G c($YY"ٳ[ڹ+uǹsh2{_~#I76l0k֬dK=@i3ّ; Ĺs-] GDaӄ hmehͳg'ܹϭ\_vݔ)+lpj8G'<9?B]p1?Faoٲ'z\]Ǐ3Kϟ|r7A<ȿ‹"'|)'Jƍ{wCu6iq'X+hVXy;>Kpl߾X^{WQ6[om9s1Q,_bݺ^}u#-ZRPjG$`{S_ApUqq79{ow /¥֥/?2ZQ_Ӥ/HuֽK˖-CpCO>o~UW/kID"H$̅ \DM} d7>ׯ:Wi3ZA(A>p3-&k򑑁~ǃχw|/}щ'{/!4u ?/@BH xgP`-74W\g7G.o)YGCIsy3t ?I+a_Ro@ $+Ks()8vwե0lmhz PhP-jef@G`~ RðO6u. t=1T++ݗYϸY,sh2 0ɥƛeebȶ25igڂY(x3%>6!OѢls 4Ms36/ GcAy7ap#0CH =:*nÄ\ |WgqcwzDt{f3K'~נС 3]d@+BS4Uۿs'>kLz7{n>z>{SO= !ܹsŪņ ŨQ>o+V${Dn߮γ>(  -['zZ4預 )|!z&0eʴ5k^57 ?u^?} b8d~qʟ~ ? őg3dc7Dw8M5;yg}NɓgzcwfFYs^lh)ɇb'߳Yϸf@]nſzߚ3g/;ŋ_xe/ҥ0\RzrpΜa6%/K շ~?_}ɆHw'Fƍ{/DuDoyڴ޵gGܰaٲ>.ѣGK@(' ?NN0}Hx(-M.w^xtܞ3}v3OO2xQgLܼӧ͞=sޖ?=H[D"H$̅"FB2{#FX^9r$RDW: Dãwa@Kо}BMNs'[Љ/K]Dyʥ͘nˀ21ToMzrlG0/.6I 2M3!l,o,?9jw{ <({RFaeGW3ڻ%C͢F3ǽZ3~B=ˆ9`h' t'i9BlZ=Ў@VXĉBZv91 `?7:օO 4Yha/vjҥ ޽g;vD̀9s}?ڵg_|񥺃^s1'O?37Ϛ5/={N>.sYh1di|fvCdas_~oi hC :t੉}=N;K С8g5b/f͚s8p-bW]޿q㞤رiҖ-s}~ݫ XgξtŲe+=mۧCf֭+W/X_Ez뭷g|_~8=Ç>ͬ|u_W^Y5c,2!??~ Ǎ'g@c۷q7n|̀&.Ά b77|n#ť Gaր2e7˯_v-EB1c >{ßظ#G=~P K%D"HX ""|jǹn:jԨ|^!*SsRaxH7>+՟WmQ=ȪUV^=t]_P^BHրf q 諃AwfA }xUKA+:^lIhǟgz"gAI(._ۗas]lʳKtOÕۀ>s4`u'ђ}Na43UiΜe@+` C5 ʇE7h;uiK9Z>%@IxUT|b͑|gϰ2-4  he=b Yv%ci!h i(Y B(V%#аWVW'6 Kr37sù߁]z8e1WThN6zzz)Z23|# ؤ( y3Q5p,e^RI&8]d\ \݉&yP7gMftKҀF@3gi3~Y1ռZq J9!O֭x`6;Jn@/\hEAp6cƬ瞛Hݻyi£G &O K Wyf3&?~yrc7l0gΜyoKpرO?=K/wX#`0a¶m켰iӦٳgBʕ:qO[ѣp5{e "N;Vp駦|hH[om?~֭`G]姞o~^8j6lz{~_Pp #\(Oyq֯'|.]v0q}F{{Ktk@׀fc̙+,,d3Ͻdي lً۶mS3z͚Wq ȸ6=mCdkp)6-v6:ڀF&IБtl#ؗdwLg=ǵ(]SNVWНK /{^~:#Vs6#ժ tk16i3 [ʙGgFGe2`^ٚM4l]_a._L0cZrsyP7}gA\ \~;b4^D{sE&LgG)H㘠͆Bi%O^j@s/ab&10T+D`ΜH7isOJN ^ N7΀.W{ %0ٳɧ(~b&JH{ldȐ4ZT3vY ͛ߙ8^Xzѯ5gsf=`g.\Xg_̘ ?%KgϞsmܸ'7mzuxiӦ 0aS{E~̙SN蟯Q!!6lG}rgÆ 'O&xl͇~gY>;瞛4iҚ5k-(,<5'~m:ӧhMaxSL!իN}4MPY|eSN_l*>\up)̙&t/-} S'=?oѢEK;zIL6c=[n5j,_Ate_S!p"8̙q;ۏC :t;DSg`$?Měصk׮y͞=Νw߱#/Çܶm;.gLXz(,28M-*D %%1OAX(7n۶mI$D"H$2s齅|*pYm̡ ׬Yv3Հ˛mwg.:,8N%YJCp\Lo0UkŖ43d=6w]Iw2t;ݡdZ=i@Qfx=hK3p̓e0Uu-d/Uo@jd2[_)V/ lJ]I6I9D7V)hؽ|90†ӟ39`Old7 X4(5s܀b.??ݓM䝁,Q'3-ھTG %VfUgظ,Lg D3aгMɲ*voMɱLՓef;99*?K`@3f9fӟ\(Y^,z5\w1~܃;z};M\L4FP!cS=|69 +f0B=Q`Y`[%l {iÀvl nA%8ܨÞB[8Gcu?C ,A%q PE r~&Vh!cHc 4=r?8CD"H$#E R u 9lS+a+Jy"CM.h8"Gz[q|Q@P8m2Y[(ׂav'NK|gΞ>{ȡ'b[-o\kn?h#if@l}K(o_6"| MѪ 3ٲͦ?e@+*h{|SmES ;}vc07€=\Ŧ<')n˗@B>-lu&{.oՙ2ͲSHݓadٕlf@u4h@}pJp c֧EIV/4wZcGkp#*Db>-"wVmM37AlU~×Nsv 6x5Sތ8GՕzV= [p;[9-ޓЬw7$6mu6.G y?Â˲y|df4E[ͭl/Z,?;ϱs @Md/3gYiu9@R n3g̥6rź- 'd7ݱΎϺtF Dba =ٛ^Po ; YP3/x zǏG}wٵ](޽{W L/ӇBXSBBBMǂe˖ӧy3f,_aYPG~] BЧtCfOZ_~oZW?h6 ,/ʀ$0; ~lh6:Rf=Ӧf@3"׀jWT  N?@B݌i"ʀc06O͕ݝOk WN%v}mho0DžBo͙ˋt[3Jj+s,n3PCԃjW^b)_\r r,dm3h H"i>58ޕdq';|49_{j;gRIu:P-h[ B}g`k:3YI 6oꄦPbhs$OJbRnv֪;9OE IXYvCo 8Dٰ(`CZb 9f:1 @7G07@=|s'l=sP3*@w >Zg`bab04ز?)`HYԻϚg@rɀv;}Y7-ό]3fO<1vѣc*>}}ت^ %1%7Z8nڴiΜ9 .\h_a_:u!vԥ&<3H mVPP@%TX&ШO Ɖސ)s&H$D"\:P QXP%Ga63w!9vQ!!!dd0PY8ȀfpZ8j^1^B>(e@  }4Qk5A h$Ko@k4w;,'L^kjw Nslqivw('îdĻSLW ӆ 4%>p{# h0_8nWIpYqQrI[N7C__$m QZi0=)u] /c{$W ] '-ޅlyшŸJEaw'[LCsqx>Ε\י+}'5Y677B6oM*YsZ[9ʀe:[9L ϴ`<,k y`<9Ǚ`^GU;J3k6!j J؀{nf[`Zy6{HRN.+;ju:-Q%x#\(&C%aQpg͌Zwt{uw˳З !8'u-[[nӚ5k^fժk׮ٸqݻ"S\M.!R6ߕmΝׯ_r 9΂AjK?=ۊ[Lu=(:f(7j{Ņ?hD"H$ɥ"h!Mga7 ѦU8t} S<_zU[]JڀwSmC D6!ZuЄhf@s`1W8*Vz)<ŗ3}+!̃FI48z h?`dqBz9|6Oӗe9 d,%TJuz2mT/r;@EIswu3}t΃f0(iz5͉6#B<:u`]1hM[8b^:ap\3 nƻ|-d>9&G9ڽVea /Wz;)_I#ՌuX<8Wr;qvris4YDfǟaglZo|[ šGq|RѬ_Y@^@7;Ma b {-͊~`̉ ͪe`1|dpЌf. 6e:'F;5iQmeFL\A3N`Y,0'jw6_R5 1R -ym 7Q͑AAp^P}?3<qz2kJBW $46YByD"H$Eo@#y_/G]ia .d3XWG@娆%Εb2ެ|o*a>ϴp ƽ;jR;`GN4N\7 .?_  hfD y`{\(ߦ΀25Qrp 3aK6'7*1E\+ʸ? D@r08 NTaj->9ր>~ +&2ѢrI0!C 5MD ))Cc ,[_XXHϧZZvB8zƓy4cxxG)I$D"H$$L\UJ>|_O\Ƞ@ BC, @€bP +vOV hT܀VM1O :VYR2==|01 h a@>JYϾPmnfJ4, t'0; 6-kÀzKc@pz2ɀfSZNo{w$L7et/˥dnow;áxսN)Z:.'欭2LlM›%k@F2l(зգsSЙ:Sbibs])w*K@&_X9a4[&)ze=d7; d8be4`0,d^nk ә)[-p e*9vnpxq˺24Do^ |n biw3p9P6Lp&؊ot$|R37X}Fqtg_"\QC?=_ +l;79ph&L 9}l-B{0BB T ͉ ;g.pu9"rrwv{LwÓr 3txRmdO 3r h:t;եMIuy/pL>A6m>h1 >|TsE@Q~S h՛-0 gb 6 Z[^#5 Nee@];[؂ dDv) 7 -? PL]0ouu{)޹A_C%\}'Auc/847p'DD\,$ t3/%8b괶n@"bd"E9DyT*[ṂȆ @fnH&H$D"\R\\!.Љh4J[-yY g^)1 h'e8(ax*"`=T^ !dA{n*'s4#R|.n.f4gYJ+ d[t̂ރfM2gAsa`'`: Պ<Փ c `Mm1[шŠp˽f3lV6!r3s ҀV_Bhϱrc-LDȱ0Q+hMql rVV`;KE˼QCUFlPwg̼sz?l4yӆ ԋmzx9ۀ.-jG,2DlЏ4@DEq"u xG h|n@+޳\TW(%Ugx_駟>'+Ri@K$D"H7*k:ī 2?td?0 hZ4uTA$t$aZCu49b]d;]/Gܙ.OGFuz3]|E3pj, h^D|AOt_V>Y Cb14Vje0b`$t} vqrW7>H3H@qFf1puL2`66Ya@HB`AQ")Fܮ}{F{SN[gӓf~y(AL}s?WB9\A~ypZƣ_a=6qCp gBLK#7+;3PV |HH:6H @%< gG@4tf?4[n}wO(S$Pw!7o^~믿[oif+v1"D!B" {V]zfS+tA%8YH$LDg#Ў zC2C9]hA;K%;4dތLI%Scь<NvPAzڼam)3#m C$#6$իD@+q sg?&ץԳ0(]qYbONwy%K١k <<8Գ'g"&l xO#HhWz'%naeBu_-gc~iG@3yD@25L@{Vmݺu˖-7nܰaëvڗ^zi͚5(2Ԓ˯xYAAP8Hv "D!B=+{й¬rC9팠wvhA0W QN@8x%mD4;=1bQhOC[yۦ#%f)zKk֧e'G臈,ap [_S:6}p(7N8Q14:yH{4dcJ@Oqvcs(Й-Ffz$]& u5H~?*d ?AW ;ndor2[N:S ]\g1ieIO1{~yHZlJ*^_ _..A̢4݊/+E͡e&S'd,_|vB"D!Bx_a( }ƹYd2ټlހ.ؓn4tН/> wn gӹrJhzI4ͅxvF4ݜLbFG-  љ清6HJھZb=h.Z!^ὡx}R!R(5̡fc*7?B(VToMWif ԳE$;>3.m6{:.=>;%o b`BYf?#?<ɡ|uԶZKZAhp=ʰ;!ݖz[l`[`~+EC=lg>G3|QZe'm8*T~VD*%CO h?h$3-/X:n6[L-3\)–UAiWhz͹bE@;01 Qkzr}ֲUh7pp` h1()Ep=v({aH@s䤺}R4.=i}uOK^ϺL:säjaMZ+ ƃ٩u9)>2i\fʸlK6>ݼObj}q͑|3:;Ãב ;;G\0/sЄGڢ8IJ ,\b3.9W>'k]xs|h}.t|y.ހ1/A ^kހ{coec(%9$J(J(} >J({M6l߹sn~weCWrefwH@gxv8tCiڷ76{t`/!3AgXfJ "FE8xgG.TNyo@7UUPA 9se0>w0/8Cb m8Q$=T)Q Z^{\"ک9E32ǥǞog!F#RIN˘'Ktn~xO~clc}0Daּb새e<(oD4EdZl}yyhP/2P/;$o|g¼^E>h'TI5sla%->x200'P>^PB %PB %PB@ʎotvo}y9d]8t[!CSI@vL 9MZT3?qt5.V:)m hqUbi506}mocphduD[x<[5D,a/~ُC&RIiݧUew9tjD.;\,ъui댚o4D2ffRFf~o9.E[-8̰63h󶵵 _$ݏ/N9uǁ1˴s-.Wk]z!z${.!3|$Yto}~wA3ųJ(J('{*g %+vm߱k[wPN@7H7 rAh{0q \dff=бLK";; cts%*} %e[BPA= er,MQSc[CMx0{:W`<(Eڱ|Q@啪 C@{TN#%3͕Q-lȬfCYP4.5.bQ^F)J k}5-[JٰD14Q"aѝK"߹?࿎mTCI6t$re(bµDD.Փy;Iop %|XWs?}vIN4B %PB %PBy{D %"vz.o]пeӕ_0\0/4q hvpƸ[+l333Ng[:"ixnƞ$=D)?htQ2SN: ng#(W#{PW A 71>u!REq q>T6G7WgP[f突 ;΂-\w/Aw9fcR2f_6S0[ ⬍R"w lu2m6m<8t]u{ ϵE-|ԶY<Zt_ 󋂹JIi0ط R GhݷA{DH:"xwkZМ˵&r-\k v.A8W}۶m[C %PB %PB+e)<],P-8޿4p\nОC">XzF"ۚη'33)7tk<3S GXts%*Pa">*D;ԥ&%A,S>kCmQ۲!Ӈx (SQ҇ؽ-l#}([mek.Ga7+`^gm^aԼlNc6,$ErB+ٖ"l Eg\[4764qb*DZ$4ڽXm>'/{$r6CRw`9垑&H3Ռ?pm-zǎ"NgpEGXlڴ~+PB %PB %=,z;lܸq˖-Ᏺހ޾Ӿs-1 sM"cM@3m ♙|{cff<Ղ2cA@ЎYe2{OHלS")fWj7ۘ>}HG>Yt$3ɠ#vf!\Ⰰ%ke 1j_"˳h|[4n e ",@,Ue5ndK>y0{SHFg"7~ a ,=@35^1[gczG0<>m.ZW Vh38-|q5gm\fjCDC G,F9#Ϩaü쑶~Ҿ-ְ&mF7pUbӍݙ2Zy < 4!,F`ID0qsZy\mg[y4O~]wصkm cƎe?cm"d$5d e7"8zD"QJ@0}fG7r[oqDk"(iDb!B+i&J|Mbr* -i$}BE*}q]c|,GRҸْ"#6lqv+1ۜI++{Mc7R0&ª!cY$O) SSSs؂8}!M#N&XGYG}KJx'SH]"7ΙܤS1zyeN Fȉoŝ*SN)KbjrT|gQ>`w |p6)N"W #]R0†XwOEE]7]>(DqGPZtb+yU%*~}"qis$sujkx :K-{ȍT5-ĺn1)ZSC ئ8JG@7̮)BG@\pEpЖ4H捞 n` ħJ"|[u~ )xgΪЉls%k^m8\+Qv0oK? i,351b"Hg?2^ PtiOrB鑜%SZkCpuIN%C#YsԔ$KP ƈ0>;޼4=u|fZnlV<"0 7]`^soavXJk`01WO"HfA-âzӍ/F9p>kЛh8Z'^`^on*q#y?| H!EGܾmǎmwؾs;ھeNF>@1w0<EmxcY{XhHm^Hd``QQA%Ƶ8t-Pܘg -~rҬoY6oذA uHG*U+bY~[quiZW:iw:LqAFLCmDͅ)Rc%z$@8vYP_J˖#yZ4:H\VStsɋ"DYKCt*PESV.bFY =$!5:QĊNutcnKs=‘RYP( TCO>rEqd"KD]E:EAT'9©"'׈ˑh˂f`-%kIjJt1WȂPSZ +E@(+B)Ӊ,DCdq B]Aq=U-Y>GDΨSdPQVW\l/rCPL$rC. I@;V@tQՓDF'uP,vԖ ;T maalK|C-6d|H堻Y>˟Wsk1&cRr١}N_g[*3T04tfz,mDQAY(1tgUPc}[(\B9,e&rS{+`+d{t4350#SF3 ,97cY>~dGF@}[<s` 07:>mlֻUQA1 tK4ohƖt6veDs7 &͵ρ wJTyӹ2/w1Jl}|lbIȿf?T~;w\~~yH'$>|є;?6)Vt' s`-;nޱs]`mwmώ[ںsv l߱cNL\[۶Y*{/> MuD:qֳbɂ"Z?"PF!^S+"V;:j]$JI%-X `B](LX-ZttG$KCP)832ׯ_^ ט E4<]}Q OW]1w;}_ *7V[éuc%W-['C` NtW(Ogȟ{(FgpQxc$t  KjDQR- uĕ*2 Gb.ڎԹ]G7 鋺c"ں@]W_`a}Æ vtDpT.m) 9"ZDQE ET]m:eT)"E&)a"EW NcjJ#B)`wE#괥8u1bSiep"gd$ZiՄ`題ZxQ]c%S5mc'G@g}ޏNzn7L+ƲǏOLY$xPHE} ?l uvf,735G;ksUcBq?xQc_791oעD lɋn"xvN e,S{( 5TIÏHvkluH%b3dI>7#D3M->ҕۗ09TA1 RB}U0>3m|zZ$\2.ũ#1G%8_p%llΰ7Nm 0Q"|ީv6?o;m?nI7ijbicI~e̲}%{*oo)*<\c`m۷l]wVm˻lk`vc;Tw'NQ0T{H?(#)J[lrA +EKsy6F(Fo֭u!.EXz!oڗ$,,j*y `jQnR+(nA+='4A(ʇ^?ce䢺Osd,^ 1 E@Zaګ ,z{]\DǽዺFE"pTau"b+DB)yUw*\:surMa.ª-uW vDU*Xu5PtB-G h/Y.n`w'e(E##K#䢸!,&(E }8,寘. *E (gb$]FHDQ)"E'_TqvF1sJ]MN}MP :Q]AHWHGGc$k]vΈ#M VPl" J K̳{[oyo+H-у#5w ebѭ/k-vSF.h?D@' {ڗjePzt{m%?5RH= :d}yW]7/߸ǷLk?>u[6Ν۷4AqGd#uUFպ2Gc.21Qeб|G4F1pʪIWixwY٪ΰߥ k@Vv HX.#<% U2,F}TBskXa+=##>heD裏tEx|TEiRҩ)PqٲeBdT(, )G,e"C]&Y~ puq) 8sgEtA8E1N#qMK 1hSDm*쨔'{uIs( *%7t,])EAPd?U|*sTiBsqҩt}J?5p)v>_:vtEISD>]EW\ɑO#S,;qD\+R|*#:HΓO1eQW(:yS4#NG$t E:<x≧gy{ʚ5kZYn/ꫯ믯2r]ho;LhGWDߜmgzt'ڞU}#mk}rA*CyBsmU h.4th?",(#Gd~r\ M 890>;*s }j֔hUag5soԤDqC벓ǥeo76:x4)M G:QMgo$]2yߣ_Ч?Bhnw h͵})F@ ǻm;ZfPABWUx4u${g'zbYX3t0+] W.e޼:U$;Q'6-غ}`ז-o?~lP#K)9ǚ=7':}H6dh5q{(pӦMZ>9EopT6]p?/{f5e^}RaG7mڲq뮻%ӟtVb4ʖ-[XX^W^yo?Pꫯk_uUD@xŻ' N@&dT{"jk!r]2B? #:"Mt|\pDrD?i  H(d "NGs w#u`D`Tg8!YFJՅq ._cG:b.|.# w]/S ܰJS)}؝tw%`GTԜ,.R":ݝH.g$GH:(**T|EN)_Q(R8 K]t%蔣QMS#D)I(puHP jK G?x7|V{{.!O6?5͊;bάYf9]lH<$*(CUT'}H*N,sEc_.#}oGmHvpE.t-dD,3S)#RG H~̔qf|#w]AڨO7W&=c|.<.=3 M\%v/w@i2\ ~ُGkaKHH5EUF1eCqc׼7nK9ߙȚO_Ñww:]>Oo'µ̋;̎X('G`2|QXPv&ޘ"Ɠit78 DVX7J#"pJ 2G0 bkZ3Q$7]G,7x#:B5Ө+ Ej`R|r@M9EpPEDâLdB(U4S\hUTQ|.vjd#U ;\t:刈֌RGSt@¶AsP&eXP8*)NT3UFrFE]Ԣ9ET:|QEu2.^-܂ƒwyww}Cy?#bzgyg}׬Y/b^= <3nx <mܸ9$lcɵk=,׾/r!=t:uSN9[;n&wyx>#7m~#'?&͂a٦YUQI@{t{gY>l[<ݚk=lo*.PvB3 h>t"SLKUWrІS4(/_4.l"'ڼk(*p>#[[P.0`2DRc}~$uf >mLKfawmjQkuu除AbڲfF<2& wj6A@ t35=Գ~#|W4׉_<_Z$ہ1):|G%JLCj mo);|g?O<G?яy~_o?W;qoݸ_y{o;7ܾe箝;{9G㉿Ze"-~XDi̓Xٿ]| ,8#/O_=!eӦ-o|]ggg]kXvwwJ|#aa xYEtÆ ,G~Y"Z5qq,:E!aʂVh,(箻b=| 7hQ&Rit%p,R$$sׯ\nLNk5?JTdOv)V)&Р 7JFDFD3P7t{yk.#2"޹Vp*έSW?:AOɟKwtDZEbV8)?B(FȜҐ-cQ_ Wtwqg擏EP1xRWŵ%RdwV/^HOH\N; v3_8cNӥ8q:*R|8r-8S~3YLE#uǑ˝vkm /+8bDYlK.gUʽ2(bT$z?ࣕ[KL;o)]oW]uN)3+d82>T'=2iUwt8\4O먈Q H71nXYK/r;(M#J ْ3q1Xڤ w`ry4G<)ifj`Q׿b^`䉣J#Bt)ŇE}PAb׬YL|JQ+X AP{GtquDrCם*EQz!) F$F#y0[x<vZ O|Dg#+8tB~:jǟ`1<; Ӈ*V㮞ݣr(fA}alȲe<ì;Os<ˑ6ws9W^ʫOoy饵^NFA@rA~¼\Ӝ\Sph'֙%$: Н0NO bYkj<_/vEp\S%ip1n50[ܖ"5xAGf b\ OMfxnF(AYc(,Js4C-q%8⒢x bi T2A_ 1j"ՅzŤTuD"F17#)%n-qM~eXНiàıh9m\%oP!4X#/(-hx:n>A `[ |̮s5j lc~Z:g[1}5~'(O6m--3[ZOqӦO|)ϸje!K_n۶رy[[F5D%|e/~q8YSD7|SgqN\O9---?}t[oy_cɒ;9ήd&]Q2n'Qk~ {WW9Ò+[ /5kΑG~ -$zMxӦ\S" m{G#hhEUEQi`7ӟo 굒tKW_}E)}ayu8U-Yh[J*W+{w㣏>e4RdUD#9]u'c=F%KqRNըE9Um ;JTDj)#dsm޼<}Ŋ rt"Y_zꩭ[!|/gWװ 5y8-7EWΈx((+ )2pE;dF3E)GyGPtꎊSSD &\rt<" ip_RV8kJ!,\Sn VT Ec)"Pt.G8PDYyÆ |iP!Fu1^nM'>x2ܹO>(JiTĖ Er-dr]waٲeLUVt'BLuD}DQ)GWS#B+W_}>'C=D{Oo4AQjEFSQo˗s#F~G/,OS5SQ e2nFt/9pP1%A*_:\n E!rq)b@tTKM3 KI4R:N'x:*#rJSeeP5e5V~;9`#&CcELD !pgj­^nR84\#enjadH%Lr*5h! +j)Y#"_n6>=|4buhTCiH#3g8%tRU-s_c-'m$UTjR,N p$>UHП)5k0)R|>ȁ\>Բ;Bq~pCwG.}y饗h 9ϐf'mĩhr| "E^drDGב.0ayQ9o =sq#gB1& E1Q2#X {x]|gϟp‰|nnރ`W@=}z_rʊ}KB"OR(.N;{駟Sto_tE|yQ5~&M@ 0\#S Fo!% %6PH.ȶx(vjYEsNiJ$3fGY:ncuiьקТ+驆_b6 wvJSS}0M8/ƃ H%g̶ڹD,ԧ#Z >:latא6rK u.577)f\@CW%3-C3똥Vf`$l綦c8f  TPETPˆ檈;b~$ $R\W6ד{_EDW3dp''&qќd,)x\`pn"4\h;)j)z[p|oc ,XzrO=O"[C@0'E<0(R,cĞz),ES7H#SEqHZDGH+Wr-Fロ2WXUQ&$$W8cQ8JйJ BkeG]tqPb1a cꮮ<90s\&2ILD[S%G Q#*ˆ D‚3Gu\n˗/6avE?xj $m.(N /W\qnfnTgC1L R>uysҥׯZDH-Z7 AE cL7pÝw)"SuV=% th(mșcKՕ]nOxwknذi]wŷ q"IuyԡL'|R8X!K/DXC,Y·̚5kpSHj5 I/#A >hZ> 1]/&I] > mBT0,$L@|a_;  3PG4h_.AvPk+ )Z! pfew1j@>"bP/82'ICE(Z$= +LԋLY1O$r\))zj/D- a%-w,o}ͷH8#-gqɧXr歀_RR('P/,vԏ Gᄏwtt\iVڵ뮸|/eݺG`/`Z6RQs(Z:=ϿNַя~ɏϊ8ओNbs9|3 d‡/~ wq'p#'x{GuY.iEjݛhs;BI57B@;9)CІʵGs 5A{sN # g }-:i"uHg?`r@:5Pm11FJ@-,̾r̲%'5 Kn^vɃ_?|࣒0C,s4mloh7" -q6q&yᝁfmAˇA@fv}9`ⓧq|,,]brg ,}_!a>'On¾쌏%U,^jN6̪rvu+{58Y϶>SS}4Ovힵ,s'?{͍w8s[ͣ:59x&s OzzXc=᠃Qa2My,ٝ~U(P-\)SvEؕ?Ã:(LzaĪ+IU eiu[A\nXp۸ݷ@K#,=7sLJ"rbyLVw8cd_*%NB)I.~yY<ٟ}>oXfe]>kN(~%+Y,Y2F2g5δ\r%,!XZ<#,Yr_peLPX3S?ֽis)?yV'>k`jZJ D{衇{9Ǭ **><#Y˟v 5w,ħcgDpd |֭Y0/\', PQvwb'mڥdBhk)Zx1}d ɄJQ踒'I`$y8g ~'7' 5#C>vZH^#LpI4Gz\VP04Gdb$=œK,!&oV kgŵЛwHOZ4DdpԢ:93g 'A+2Gƍ"#ȁYƁ4Lj8@2dNwpIDFtǑ49sO\)nj$e˰PpzNOiW=iңEW^I_gi&h)J 6̓88 O!b3En M<;\g="zM+4^3GhQe.U>3\N9\k.490BisdU׭[iӦ)u1*uXfL8`W5VBsQ(s11n馠.#ԴbFB(!ƙPFC:5}aY =c(#}g1R܈h"Ju@G|pBcq+_w=ӊC ;a9(0@*| wuaF3.=mBqiVp&@V4DlćS* hJIN>D6m!;2P@-UE3SKu F2̀PwMX|l' -%ЈYRB`#"[-8B(Z'D>^"ɑ+etrce1۹GR9<@t5I1&gx1 KO/iSƖ;MXkJgIO hoW_~s䩿9TᩕVfϛww{ڷG zvBQ@BHĮe8.^|g>[nw̨o~[Np:/|3]u5 _xfhr<L\_WO8 0QEHoL7 &<ѢDs{n 41H5nkмtS_"ߕjAb.E@'UwD-GQ"yKtF԰~lI7D>5%%3@afvbGfB{<L̻z!* 7:4|j5 9˶#wmݱiDYm.<.oT|g':;;Yed+ J-a64 KĮ.Vz踹 D#+s׿O>SNqO> /xڗ/׳ffUIt#u]QH5-j3LX4č%.KhYR~,q˖-Ó8aZ5"qkxVb`YIP!G8.zC5< !IrUXG:'bia}!5Eħ#̑S;>cȭlFKE>*b! C1ht?BhIIDE?8@Zu㓡BCtO§zJѨHdjaFj 5\s=ȇ#n$Wˍ|r]}CMr;DGh^RC]kZv-3ankQ7s]f[r`Rn8X&0&4PL-P S]/1 B$sRD #L[:UPEo-ʽrN>r5R3ܨ f si C^nbuy')l עEn6#8']°#F2 ;@avqD`q2J4JuѸ4tW3=B_d =% &Gz!O/I/)ZT!t"3N-fUW]E~aM *2%0gpcXM0bCi)ғ6!euG׎d§4EO0t;M0Bgn:}H3Dưs_SQБ8vqN|"MWBL.+ ƴ_ 9SIO4t %=3c)E)_yd˄dpp-TdLs"HOpHhJ-Uj>E13xbqɐۖ)u͑!B)i0] #̀cgpآ3;KBqPg M 1)E|w+FYǥ$ ;Ɗ܉dŀpuLTCLUȐg8SL QU_g4M8aGB : 0&7/u+2"aeNb ܘ#O'.ϔ&$ɇ7ӧk>6Ja9J8s?唯vgE;pTa9_Wxh dQA'#7{(, <%uD0ԧ B~.w5;Ǯ_y_hAKd歬Ѯw*3,i9}1?Os`Bv8r-{66̮@v30?di6#$BO#SM'm4cH@n\WGfLKְ_xfK|KfB{ͼ]6tUqUo42R؇X F[~XN WcyHnD,V"`ٻ>=.̌y&23#i&ۯYo=Dz4u[Q k3\ YZ;o#a>پGJs}vA/~^xx^X ^0YfC_4v U4;@ w7[ ,8TAaHfX:~;nzg+'v[;oYr?l6۶k][MO-URxb>T|wwSN9GW<ʇzᇗ/[C,zh' N[xX:ΧRxھK>/X,e?əg?;h%]1aG/u$%:H$|M\zb6AVbY#% BMң"\,sdT#bIJ4.W}u ma33FdCµ#Cbu<*2(ܼY3 s$$CHU qZ'8dL$LpR P(a*r"%3U8Q࠻Kɩf]}glɊΒmh#CvƊHg-+ӌW|L@Ni^ȺI$F"ТAEKFvf #@]0:F.=IRw4><ם|{LQ"& œ'[/`_H EGsDH)cHwYg?B-pΜ9, mشi ϳ|;ybټyov<0 B¡p^X+1؆:ݮSOϹt6;MxM;,uONm~E[ ۾/я~J#”;CD@cԪǕ_xKg;O?.G)vڅ^ȍ0%]>67k Z`vo"pe|V $M gF3He|jz$ےhhߛnĭZ"镨L7 -iucy-"\?9ZQMW@lG :p8UP_ #}PZ,G4WG 8PVɶFrmQg>5#N%S_ζ f&b46Hd =N@͏VE0}%hs^|m9P=񆾑WC>*yXpo11f`f%(EV!jq~xO:|OՀ}t"TNGC@[Ta}??;~[wlfʽoۗ,?Gh.dޓ5ko}T!< !O~ #Ӧz蔃>C&}K|/|`9Xoo "+rT! v{b*cd(sɒ%tc|F1~CGַxRaLO#29S^c"\oߦ_2FNkFdO1\D е&8$ șo:DݤQ8 $) ,3ŒS$DfpEA&)鯕? $̧kQZ"H)sjaT?Ӵ#h g,_8`gpQ GQMCx2IɄN@#Mpq$FJ'T'o~n1&Ub.E\:UȜd+EdFɴ!m. D_2C$ zJI@0驃W|^IBh+|iZ2LBe.i`=m'B O,Ĥ"#/ZEaL.rK#hˁ'39Ł$ag$h&01ȐdJ=b0b퉠@9%78 rpB7|?>:a>YJLFF^ g泜A]qhN] >%P \UuЌDl'IFs)| ER 83 ƟR$%0\ :O'y.1Sk <=n"`zӊ>l<$Itxr-0i0B\YK<ዏZCK~e.̸Q[ԧ=! -⌅2άi>H1Rh3rQht4A8s8ᔜ;N8ۖl޼uFd#ulٺm5kWL2D|p#y- Koݥ#ˠo,+~KOS_}CsA_|駼aV[nٲhѕߧtGq\z|ppf/5}>F$̐>c9ʱ{I'gEσ7S ⿿ hقt;6&ЂcH 踅E|oAόfփ"Όd[s-uEFRJg^6?.DNOr?uE!RnS/;"=y!VqUE1ÅFH a 92BymV>fgC+ hζ:9|Z"#30s[R hc,'cJ D:k?<(^Nz@%lrpU`=y küs}XC/HLM~!$vC( DptD@3FE@oS~TV?'mvl۵}ᖷ6vZz_nˍd'%\*3۶mq_|m  ur`T(BVeIL#XR/6qX`MEVD&,vEpćY>sZuGŁS 8$х5 S#,JqL]w:2ugN|B!~j!Q$Ou9vJx ;XȖe+CYx1M5,|lɐv5tq&\yTaxI+EJ|L!z7":-/D-sCpFA:B(F**үe˖eimBd8N&b BG>69% VmFȽ@Gp֠i**U@ @;; )yR z=%Y%%M*Fl纈a`'(ea8 ;Gzr´Mֹj?hNbgR\)bȊG4*2&A8ノ% #3}7ȁdH>4F1O"EFɽF(t[Řieg)Yp!b&`bV&nO䈎7(]& nr55F8%UtpѢE \"3JdN􋙩Fi glkup)Z\JIdd)"#UN|,L(МÂB.:I-f#iAX..B:0$>EWۿ`AaL4# `$+\;:KG"JgNnh3s˘c\brd!ךXc( 4 F(L-S HTJ,N> T# 9FTD =h͍GfpmN}r8_OY̘wɟo[A38PKF#Dbl!c<(Gcl07|p hQdNJLSϾ71Sf/dݼnIR hOۓd5 D@'mη%mBAS;s=0 T}Ng:SΔ%J?"lXcw*V`Љel&f AOM4jrx"Ӆٙj{)L&r ܲ _|o g~m.vwo{@ܵo۵O۾_|\rCw܉k䌑#ON?9s[5DvUeió({ٲeQW4Ftn:$. $(Gt5u]ġ4qĸ(nRFL!MS0nI_Ř<36l@'C* ;ftVnTGż"s{+E[T\i_e@ܸᬾn7HnvUW# ,ΈԢ|}Y‘^!Zؒ79P4S"y7Palyds[IC@qOMlO&]EƊ߾};Ir`4sH[9"3\{3NQF4a`:pe9jؙ +5HF5ULoȁS($J5tR%@]HG}|is1}HtA3"ȟ$ E|.:ADj2L-C]I$g,U#3? pq3G.7AE14V 59/ECʤDad/e&j2/2E #LR (U'4БCsu PpH٢|T\,:2$6\2g踌^&,]*Oט 5Ѹ: ( Nk" WĤTӀ!m"# L!<0.h4 pPD^:m•%[v&IŽ!iscA` %>gbj# +;9Q#Jx9|)dg<̝;{ \DDHBz}N]--3Y>0|/~q_/=/W<4+/azƬxvmٲ޾˦L4DE÷3v,Z鼧2 G'5 tM(Ș!]t,`JA/]- LCoГ4tO7a~TWЕ,t,y ̚F[uغilG,7?bfNdo 1zWK=kgp b̌݅#i-ZcfN#7=5$i47sFs L UE$=*|2U%D2Qq5IOf IR\Dz7-(uisؾ<>;u|lxG.io^j [+:1fδ[j8;8D7gZ#V[DCWn߾~}<3 ΙBGnBw AU/kPyxr׾|%ΥK?wA7d hub-c߱%1|0 zc.spŽ6u]4A)@ڥ`ꫜ6H¤JO!(dE K.œ!} :鉶%P*jqSnvw0+4M4'0OHҧ~ֱ9б"3 !"&E"|eHdH1bDfj 9U}Wpްo^eVƇkJNNht qNw(7Aȓ&ԅ"8#xRD|dE[qEFG `Fd,4A(NLrF:Eu 7,\nt&ƒgs|` n߶mo{QG}I *R݆1ODD1=I epx+YP~~?>O~SH<'t*J撉t. ^m[a„_3簞K/#K"Z^0.}|{Ӿv3^ jsQA= ]tcu:SG:_DC^Ng HSo|w&g~hOX-v)3o[NyKlↆ Tۂ60/8{/>ψ~yfRIx `,7=N \D(Ι ;݂ (B3, 3Rۓ"gnRzVA/'}Epq7X:8-G}.ZO i̶|TKst.醌nspFs-D B ܓ{m1t3U0g۽J8; ц FC@@_C쳟l! }i>?cCC%~j{ 8p[{Q1EʌyiFk?砩ŕ5?S$?7Ro|3}-yXGyqgG/_=Ï>_/<艁):$>7o޼ի)6Ǘ ,s< =()s9gڴi1lyW|QG`TtJG-~YEԻO>G/K(“hdk4de!de**X uZ 9O8 0=X<5kְ89ۈ֊ P(::`,Yp馛8hǘ~>ŋovU."Y .Qi~Kp>b˄Nn,3NV+V zG|F1*,Y96F*/.u$=BݴnGF"(Q4FKȐ  zDV@-9^VǙ T}A"q.xU1s 7@pR"=] iֲ|&kz$IT!3)qixFC֭?In| bTK)dH|' #\5FKF&A3 Mdd"E\;b3H9YS|QD 0g('6ANdR$#Imq!|zg2$ヮC)1b+b2D""$g7>UŢEp&aƙ8;PGRB8ε A#gD"H0:M3)5b4ba$"qQT>hFX7 '3W]\tE4ICbt$ SE) ≿Hs\\`gU4 mq$eQg2#I+ s/:75ggHzOh| Ix2AON)%$jڨ#\w:Bf 3ɍPt2VL*Ɵa!(eUg&9}$->Ĥ-BӔbdrBM])B45fnΔg`r&[N$29:q2he3"kGpOh|fK_0%mo`1_|ɖ-ᄏO\b</QW'&DH@\4PСpݹӦ53sG>\aB sM w?|6.*HhQ߿pGwޯrHn/~S8֭?/N<>NǟxI'xI_Wy6>93<wtqv %h>fo" D7 !qijI;urpIՂg2D@X@[!ͶIJ- ˵x܂#;(IOKMrMhHOOɌ'{Q=ܙ3gֲU=}t㱘EKZ \bχ~^+C<,_;08 ^Ol=ܲx۶f[leUƒm-,μq)O, ʓ_e(s!S UTp]r%+aٟ饗+ ֢4ž"naJi7.de8G}h7ٟ杻u8*b%`%`W^'`"ǍZ~;˖-ciM@tq#UV/bOz,Ri~S/8V!TD)cUP6xA8wp>h7zF8e%^P~ίxdNO˄3S;b-nj" Me:i_BL+'(iW("&K|#eebc'7*EJ8{/ (d@aDKX:/P3ttRǙ*O3sTaq&1t<.pibhD&/B<K\.({9.!zMH?E'> O.u*@LAh%g}"dؗUQ4F?(GDXLIEˎՌƄH 4D-&4M$N8  4TYqk̐3Y1$0"IUCee&U NTS+KL*z3GӃ7MuK-.SOIXMW*Ju]8QFRƄ3&t""]u;!3V8p!QF ‘`.B]}t_εÓPĜTR<GF42:id 01i_b}GOם[C[䬡B(g]#Ldn=}27 0׈d.ᬬp.3+ݜ*+f mqeSSĝB-1VIb.0,#<ęxpÙ43Axb(CD.Pmhaj q}'|$P 0%Ĥ w(F>Tn`:P)Td;k.% mQĥa(1nvS`nGL4&-_t{)J㋛&#G#,?w߽zg3Z/qQu<|>s_{͛B@H;"a=X<Bgg/Ʃ>z r)|K;9O|S7x3Q 8SukIS#јr3 [c a y|\Ih}~ߤ{9(Pz0%x3Iփ4{!tlёSl"f&̎fxЎz FG@gZb(9*Όffco JZǴ"$О5a2=~|v2>9>=ի<̎Նk(PIW@G=&v s,Goi{klk*זw md \ɆuZAyp;f?\{nbOK}⣟>D2mI> )aT@P#Q S,,gN5`v?w\#U R([g~$+-ʧqNabj / _v;\[{/K/e]~]t1‹? //Z駟i@ <= x-T:Ĭ1xAw2hEq:܋-:ꨣ>;kʔ)---~:K[^Dx6r5uԚ᱕#r+}{3Ϝ?>ag8B[,q{{.k֬XfXԱokkcrCՄ qc`!+:"uJq8Ut:N"pd g vV\<y֥1eν̺gZ[㏳P'h5ƍ50D:P5qn-iF]*~fϰSw$UV'Yۗv]w 7ZO>2SZxt?E1\bO Y%K.:F=S$FZ'hŸlٲ+W2v:BE:BX0Tɜ$׿V:PDNŧA"#@xe-)E!ׂLł'+UڥwoDÇAx(®>*."CGdB)B]O&8G W[LՉL)}',a"aR|DI:c@pfBPȍZ0mQ #i_A5d1Α*4U$םdxRzQ)InLFD#gInCIqLfȺuq hkihHGPtZ83DnbGu("qh]_rN>D(z"]IXܨH-hF 2SJzZcēZ$9NO9GƓC4LB]*I D|F4xxv>4P*SD(:b' }.EX\eSx@RU]@ &qd$SJuq}EGa\׈<)-#aNk֬y _F<АƜj2TP(jTu1L >MdBp] Dʒ0MAXƓ*t4pYmQLY.n\JF` a$\tvɜF8 F.$<@rfi8Bܸ9%U4\4 t ;>|Es*6e,D7 HC["qF QBHs=G(<0=pؽaЖtnJMTPσz:[}9 yDi7\oރ1ܩ &9yGr5 X+Q1# k<0[mx0[fhKdː̴%QE)xD7JCw|>2+)c idf{[St_{|1B-x̮0C GPԕ:$/J9w׵.a3{xA uy$8<߳*+;/@~=QY?Ѿ֧uYQ,N9?_I'M.5syD:NG壏>,X+ӟ^QשUBquPH[ A]vJT©ˇ"V%Ueʪ. E,hY2f-o72B(DdJ rD',>8#ZSiЖ ZDXlv&=|8Ũ+n'nV) E; b%8S!|UNLDТ,(B9Sh&+j EvtS ! >X-Z* 'Q>GRJW^y%> iE:GN){7iQ#kN "dǍLPhQ ッ.Μ P 1r$+E#>"ZESa;=(%GtVGPĩZǢRΑDQ(""QS4tRnGy  +8EEjQP#`$&A8%2EV(_L"8H)G9řPJ Dcbggt,EJRRX9 D15º+N_A;8 ED㈮VVO:EZǍ*z- i#H: ^QNE%38ↂQK-9pJ4qz㏿deڵ NItPmZSbdw.HǍS"pBDm97]W@ "tB9j,7NuCBta&Fġ PiH٩d8娾;PpV( +BNp@pXp!GŬ7P#:MPD!Y=ϙ7|3w\kr.i\l/O<=?+c"cO~F`PxzWSN8D>x TwB䐀we,\߳ŬYgL2i晝?Yw}16ں۶ qQfϝ{2gtg͚uAݗwWJFY':8\Dʾ2tEBD"o6_0Lt|C9Iijf?D+%M Jsm, <8SCqW(KLAs&_A X"קON{^PW OS>g;F6Gr517W·uFc& 4E~m B"[9tNgϪnAxHha"SM}LfZnuP0+n bRc ch s9<޹o{8zڄj=*ÑŻ@L *0`u?G{#Be8'4@ړh#z(/nȶ@Rݑ;~SZF󒲫 5jrJG$ }hAW+G@qGQґ͛7s]X^WZדhkK. /8Z" +Fxh&jV>$J[2P8"JW)KPׯgmOZ@ -Ge*@J)e-7NY(KbLjh͌ȓFM5fA1JWr#B2,0JX]\)h($GP镺Xl0/7qՕHSbF娀`3AQP(rV5)#@E,7tʕ+9EwaUQ H:n*UD=A(=F$EXtQ#F, QLhzٗO+O)=(23qsձP]9H8U"ŋPEaQ8F,T-;FJ])QvĄ(vTưc./#BX"򔅺倨|";GRSb,5,TJ@E.Gu⋫2*535>PKTQ-R,WբPĨ YPi BgQvj%(^QK)FU9PXtp)vq 蔣,q? )jI]4#>(I©vqƂⷨy j E񹲸!X:R?v"XiKa)PpJ+yZ:U(*QxS,4a`of>n_yw}ҥK{~G$["}իW߀?OxG-[q_ PxǢǛmD#,+<虤R£j=-+*oy/+7tSO-q_|xU G<{^x_ .8p_)_T<W (bQf ׬2g2y'~Xbh09h(t6K ֙ș];bR5[⚷D˨gֺv^?uXBy#62yNG\=|ev7R{nԛݜ&fis4-[noX2>yc ߩFh\Sl1C"mOf D:;M꒛ACCsk$}Fϵe?T7/Y(^'JV XCw$i;4+䄽B@˃O=/f%v#"Ui *XAP<: +EpDAxm8jFcpXr¼j8,4/5CpEz+tӨhǍ۝{=ԉ뿺- ypQ@5-{P ->ָ$EN@*NeN,utEn6% ;UCYlxslٲU?e (~tذaPQ^jVu"FG)Ȥz^ތ[WYk+#bJ5۷tDQuҗSEXp!FptѢERһZ8:E"Eө+ .,s,(G@誥N9Jh5S(|"pT&P1UPuyrԐS: E+qS|(%m#:G측"E@TQ(OqP/IN#NE!ꑉX|P0] $aScE.(,\p#RA P)(LQ,Mb>ҢUÎ#mə8SؐS"8ByW`G' nBEl)ܔ-TQs;Ni@ ©]")>#б(gW蔣Q\٢!Uy*|da 3(8#NqO3jJ]](Ni7jp\U()*"X8*trĮbʍ#ZɄI@FU) "QX("K2G|EAq+ n4(3FڪP%S"-]nN5 " 3v, RpSCȍ9+gN|ԺJ"N-*BE]v4ddTu]w7{KZyrvhkwWB© m`F7u=`Gt [蹅^=%%a](xb ;Q.ZS8wK4n]_RB\]w咛BPmv>{:7, h!h'ΘU4C=[Gfܾݟ;9OꄏΊ$g&̆m-:D [2 $бd=̷ؙ>DQ"5WEUhq#cːVf^6%F3ͱlK](-\ŞrZ3v3SǥJ/5a_%v؏Hnf2:ef?<$Jmȶ2<&ZJ/>eN׫ *tDzL{q٦^N@J 1ם(H7ocOͶcUp#?]bRd/e 4nwNUݪ(#vwȣC Cһk>*g` ƊUUc Jtqeh}Kܩy >H3Li?z{JZuH۵!֭[u EvNe-)Q8?Q[st"sBoIK,k6bS@bIƑ&\USUȢ GgGwaQղԴOWXyJH(24̑5*-SsY_.ԉ+uG8+tqVVĎ`D!I19jpFQ(WEAS# t9D)qBu)n*1Am&O=$QPOU"DMbkJ(D>UT[tJ)])G,8舨  PEvNVDc4\I(U]|Pdtuuv* t(";GY,:bQ*,zJ]FtqߝĕPa54".7RTFџA|EˢKLܔU^#(8RS&TZӕbGy˂Q&\qPԊ| M_q8g:D'&EΎUG\&L_(W"κqtjB FS|(IזHw>%N'[t.tMuf揊]RpC]ѰSt GT-ҩ˽FPZKQb ;qn(=~c_vڗ/ge׬hV6ߥ#48ꡂ#O/o&7cOE𡺞|TR\=ϺPvX,e-l>TpYde^Z/ȇu,GWKW:X[FC@xxnadfftc(݌L=+iaFH7I7f !8 /_YD@;gm b 1 mXsڷuK[ʣOMK?}Б\Om OGX=o3()bZ o(˷ mx{T]T"檨ϵTCs$7M(#koaQi.mPS((i21qrF6srBG?{Tjb>)e=Y>5ZxxyُX#_&='rTGrfwݽ9c&YCf&ʹzWҭfl=:9@@]5L{,ۑ}?vGe<$b z%D+ #xiW*]ϛㅞޘi;ozb 6raP$Q1hJ}EF88 ܕ!H&0 zXan8rh<8la1UPGtuUU1q^bHNP:n gd0W-8FI@Kw,R)~Q~˞+JrqԊ(SFn(N:<ՎBZq֒jj^Nt,(:"jnO-]S*─Nw#ܶZ'2#Wl۶aAE rEKH]BQ&8R$SwTE0JdA?G9; ؝pJP!J %^aRtPѵkq"|$PZ;EvU,򔎠 _-|TZuʑƩ<E":9H"GNT]ΈJw#Ļ,;ZWzetUQ)4Pt"DE%oԜjI=EQE(AS|d"1}!ss1.FWq9$.aUT&KUz$'A4brP<]嬀"ߵ.AWuquD8]Ut18.cҴN]9bqJQDXpFT‘RR("CgtQ*".G: wQ7JHG.dנ!堀<]rNPrБ³t' t'~ n<`Ȁ3y)>8=up(yHtzʐRk]`J {tf1bQӊ\<k0Jृu?J "ۥ%?pM/]V-Ga:<rʆ}.9v, =7R/x t,YC@a Iuً^xq~ow;^x՟O||_Б(%= kK|{]N9*0 XD} 1ZhgJ( [ѩУx|fq~?hlS3IMLaK*\ MkQZ5BÔ6xH7K7'KLZtj ',&rZ"c| ( PBVjH:J}%J8PB %PB C)'|k{q%w@FaԺHAa 2-|+Gbʇ>u" "C# IżJ@'ѳLk¼ߝuE3bXz.5S!je%'c`x@|{򔃢j7 g6nD# m6#hv~7ή1$)>ʨg}6WZc9xFJ@7Y0F`bm<-MS,&w&\9_}H@F/5O-Ѻ(PB %PB %1%˶?J({Fn1Z:70>|P972 )Mz D޼5)Ig?D{yݵ6hw9޾m~7n_CbTCG2ӓ. 3E7GGRf!u:GAf16/INf袒i92ORo`'3#9i|fJ$aXr-{ ?Vh#}S @`fullŭI@ۗ+όߺls9dz̨yBO2IHe;܏}{cQ)`VGrfqM$Y5< {&=)PcF@^XqA4ΊY8KK;W8 !9x{\laH7@ >"xD>C@o7+Ў UQA@!S٩٦ lYˮ7$uM̯Dq~t7yIfKcO\С|0O6ٽ*ZJ(J(2&ݎm'E8ESB eXzprMAb%{u쬊!Ė%H@'?pvnڹyzC@ooOi4[?R|O}9V0o91Z"m Y Qsٱ1C@fXA~VdthdSf)S%3-o;3h읡.)Yؤq)I(loU7.hKows.;V f;%b9;`6LzL ꨈ#,;JDvq#ΡXfn!/ĴF7+mnjY0T5;~ry8Tw/A' hmfV% U,q Dc 7(%ط+ac<$3лGz /쏱BLjj O.ñ(`yىˇт|o/PBK Y3ԫСJ(J(/< NgJ({@;F.Z TԳD.y`]; 鼓4?de۶sm"|{"ݝ&H~f+neP"[N5Іզ.gf[eMM蒿"sξnh{k c> o&;p ;g+f7gl[̓iVch#1 nOd:2Li߾pD~%}?\.tF:smf`^|5pUAԧͿW0c*䠽*y?1jA)cA>ÇG41;`{7u ΃#0'NCþ^r a*0?9{ԳnC"=dڣ95ܱQp<7¦QFvzdSH@A-fwR(J(J({MxC:-PmcEqtJh)p4a 2]\aG蝍f4?@9sٓ^9Xt%Бr="w$s3L ˂#(:sO#)!14a7vېNAWQ\uVT){CSj'1S_<?:{\ʼo(w9499DUx(N1(LgNfbh5ajlC/ mk3` j<"y!_%҅TCS9e`{o1P;;3G*!m9 /;TÂ{xU"5쳨ULlC?aw1̄#g4P(*y-}~Ԃiws,ހ%;vqƘmsN*hֳz,7 ]802D={ }ɑT0;ZI>'<9m1Rڠi XsAʸ2vaa{94ϠѲ5{Y(JL4cbÄK@3 !? JC %PB %PB =+(8l߾顄2 ^6O0 lO86!#U~^>%.ʢnX sݱt'>s؏W}oXk_G>5.532?ȖmKϦ򝆏u˙߂e;H-m aچk`0g97*ҵU &bKA̐"S-RINs-Afhfgo ?@)ˇJetn8VP"8 qXM117%0 0?-hXlG"ߕ,t%Z2{ s#j6Lt+nw ]X"y߿>ʹ1?ݼePb z  ZM}|w`1teHuQh7漏!`m٪YQ-c[w+QShAk_x4Q?"9m+z7;~vDP㞀[Ds_.:ٮXڼьb7h$ۢv \ BOU6tGԲihWeC@7tśb sنA:o';YF17MMD6%'yb cM"}G@Ө&jcN:?GoCa h27H52 dt =wsӼуqn,\D_#HU[m:T`hM0 Rx(=$'-46R`Ą>{#so˛o'o񆧅J(J(J(߿lذ_]7ֿͷyorٯxHr AhbAe4p\..Ay8ڏxCoy:7Ah˴ڋ = 27L04ԞԼj^\5t|(Ti%nq RA@-~gv cZAh"ۣ > y32(p}mC//ץZyYgF1;gCYЎz9Zyp>2\v'l/l %jteMB_zH&ΉY9j>yL#G` P̃ jh&f(r۝y0o.& KH7gg} #&Ç?DwP]7b7փ*QA1 fk 0"L723_ x8 ='qf{«߶w}(oJ(J(J(?} o[oλ7m֛_qٯnZ?-8Jt=k!P%كr%YP-?GYBSg=Azbh f?M6 hϙY x=? D8AZy#34p]5BEQ~> "ٙudftP^8=C:*Qg7'9-0|skbhoXXQx>xg iKg5{~s2gcQ<{/_4H@'z̲!\e;k3\o d{Y9\_:0oCAla^U6||wP:F>WsAzef&7?=anaN]٩œt|ReUb U rm4`8#9*̏U1]$} ns8&xg|䑋HMڷ ҵ`~oDn18,M A{1ƎNN0+19)_A*[pJ(J(J(?5W GB@'~*rYt>ϱt,?\"=_)tOxVD'k:e;0ˊ2yEtvDPe1 0tO&EAŕd@L + tY_Yqwq=ޞau>Sr}U߭32WS5%EtsqUd*$OE@aTroaz _(t|xqtPo~o wgFto٥(OI^iԂ啀 V h"_;١W\WXيBdAP9(R6[_sE̖/ܢsЩJNUq1AG@+G }őtym_aނfԐ+ /jpnpt^Fk2eInu*t;"ì(N9D#)kbpDDm!͖ a"Sm#7܎Vy"tb;$;9 'ofnt>U^^>B׺ҕt+]JWҕt+])Ho.ݟo>=-y>tL@_x>:C*f#>Hħ8zY@VkRҰZie:yڡP[[x h`-FTr_CpwB>g>;ʞ}.2ew`o 5=kR}J4` !QN`Qpq's JC;G=B{z RDw@j7>yLG>F17!%usgh8J>wp3 cDԳG#RQG2k} ~DԳ ghpw6*c.Dsθ\h&CPۅT6݊1̄9O5@9>AaQB}mL@?E^~v t+]JWҕt+]exH?.z ] MDAOvn0I4'"uG'*Ur_oٝNyA}bS ]lZ h .@+-Qf1=}W\—R\Aݑ$Ups*9}cХækB{ A@W-9 wȆw|lбai.*HU C㹁Q I= vJkkJ'C-t@ MNG6-/}!{д3f`;cDL:r#5 4Ͱ/Ds'4@"z\mzn$h6'$(}t~pdcah|ƒ8Z hWDtWҕt+]JWҕt+ hO@u.> uMFk ?ós\Z. }սGeJ`uoVࠓ W<'w$NN"]a"F@/W]8'/X=ovΑA >;={Vw?pX'nֱqvKhDxs6ԳSt-){L5B}EFp4A@ԳnE@ƇlvTymoe]آpOH@'h&uF_m|kp_y8?0^^:aOF͖9_Ve|܈HgйڸS1B+؍ 9>,nB_&ct Sޝ3Z$fttf`#"xndӥ%sXml}:];L<=A#OE^=+]JWҕt+]JW\?<9~s_.{liK@jB0.BJ'Np'>{ќ.Fs+|tyM<* K G EOzKm@:4S@Sz5DJ܌TLy{sr++*qcUW֗7'%8 ]^Ag_,} 0 ZX9k2Ճ'=ί)om`!:[w<ñQ\@o_]pS8:Х3EX _5bHR˙^MSag(]^+hsr>LJ;WgK'Axw{xgVO,n!*;z$}69$AW1} ~ct:8M<%j1C9<D@hp&GpspG$g=8 w"sDv f~0%m1s@7>Av`]f B9;2ӉScE$m(mڟ鐭˵cL]nhlSaɆttdg YhܣF A%oz!~@z=7.+) w;`3?H!z +5eS}=ݛ+ò}NW { iLjxTu`)>⳨g z#;W\^f'knT3,r@+sFp̲Z쐪9xٵ,ew6d;Sv,m|sqfh3 L5c8fwœ`,Yk`*?qOx4?; Xh"m$@&hLx9? $c䛑wGXVd͓tWҕt+]JWҕt/E/t?"w1VPDщn0C+HuB`32U\,jQ .ۀ5sk"SGMvH4< hЛ߿'_3AϙVE2gC !r_6^XCҥ=9N5Wr?*0G}v(LWeפz+h{t"ef5G>GD| ho9 nD~8H$cqruyN'l$_CtLq`g==y c/ 'ђ\jt,b=:ed,F?5G Ν^Vcx2%ҕt+]JWҕt+1sgJ)P7K1j' 1 8tN* hgl" {>t'4;Ctz&ŁOeϐnE' )t7"YCKMxM$ESHFT7p$pX,}@wڵ;вenEw.!>̣ٝUdg.&*v'7Tפ}5w;dˢgatp@_umoy}N{Ytk6YMHW c!lD6û7M쳈6k97Wۄ,ޱl6a.=(Yc?E17}3wO5*% V(yОu_wxtLL@'hA"XT~k 8'[80SYUֆ{A_Ibƹ J+v.s 3JàDP)86p8hwsmMOiuoy8UYT\%Gָf!I%{x>V-1n᠍bVM`At_g#s0Y͜C[,##t0Y(ZV̯3jn1M\m{1:١uݷwل;m&8@xlELn!$3gA&Fv`6z#aģX?}ϰsysG]+]JWҕt+]JW N>O ZF;T' ʸ!ς1 wH"_nCJLU hCH! (!pвSC,gޘu>Xj ,VNg|DA֪&.d+p7lpv-)-GJ+{+ʫp:X@WTrBP5i&YfA}8|NWI3Us8q:Mkkr9h @QyЕTu:*}5v;g; "3\6 aA+w@_m7$=>Lwc4Tz! d[(q 9@3::8c;apܩDn=p& %sٶXa#MP (F!?D} 9o mE4g j9>]+]JWҕt+]JW"K@'H :Wdm(V'BL \#elĖf,̇g͝L 6HVE-::pH t vH4e3. /ϹꪔaGB( $$?RuaC'RH_yբEhvk?s[X*΀YptL=̙KkkKոu&ϽayIG@G\?pv2m1F*c}Q!UM]gƃ.IyF\3-4͝mvh89WU rgq= yHRB:㉛X݌3 y@gC'-,]_2slki@%":gI~y[Xq 6ܐCfp}zp=Wr!llH"Oʱ۱]COdlm*S{?.ݕt+]JWҕt+]#3 91!|M= F@%+ h$gC+,, o}܊0L3-c%";MSѬ]gM,}5*)Oo6H2w@T5ݓ{/ܧ!̐& #wsJ˻o6m %[8v.tsGWOP_˯κd&g>tOiUu^rdiɸ?ñ}Ea1S}a1FSN"9SF99Y]DZx,0x8txG(csL48:p̍Z <7v6mz*RLz`݉Sn9:9B"6-׷˜ 9O.BsD4m0=2tHJ7##-Kac װTu2 '<%K@w+]JWҕt+]JWd=든Q@;ST:)$Rlr?7ӣ<"#z-04H"΀Ұ -FX'.j`MF+ALd+J%pi`fʄ$Z,%eA⊴wXVc1 8h@"KtPo}8 ty0/[8СxP;yX}O۹(=܏ UvF&S\-DH;:BC! }tpahqO=xyZn{ʎ6Y[f-Alp)5*YY?EHWצjnv>{Qϙʄx;x9+5wȺMӂ [VD3O DNը/өVd/5aNi&44O#*Gv1-.NpiǜB Yn1-D3y8Ƭg[asɧ2ڧf # 1Hg\; Kv+]JWҕt+]JW[ПGo7S_F@}[RX'9?@>O= B= %U's1<]_rӟͩ 0Dq쑮 `sy" g+-Q=m .l^D!l@:'{b㝹QϮ,W;޹ H ӥ}89f\s& }r#8d2D,|AxGȺF@v #Kg9@?Y詎#ڠ>F:JN f#WHOg ; 8 HRBg8*y_ݗ˞62Y!܊|{v@t(sml=rC7Jc"x}vhV gi+猾!3^gcJWҕt+]JWҕe ]RXW uh"_s֝Mb<[g, $ã6Bw6ı𿓀I do[ :U8=6$X9qNJѼM*}.vEthS<,#s+,G}`(̜瀱 4-HgC>'D@t}D -$L@'g!ݙ#~D1' DUh x*Ln0cFuGnhG&hc,N%[^<- b:gM LePT6-tWҕt+]JWҕt/DN@ܭr}Q(769D6;dSVlh"dCf4NQu Գ`Gs25 )/ -ŕ B[z>s>?yydBYX 4b$9[t3Rz+2U]~gBzdG"PY^#$§JkH#Э`xfeЉz}~ꀐ_&GۢwUHR, Ѯre5p1̈́3^Nf e-h:yn6vrUuP_KR0І ̺Bg<=m3ҕt+]JWҕt+ =r}_ܖPExZ*LΆl'T=; GGIk;at'$)iYUK"5¸sLiH"WE_VG9h[` bLgڝѠMWWg*I`"k$<JkG:s;,/4"TBM쳌 !_l,=iǐ I4g=ud/-\Ρ3AVc=! Y;yHRBg&km <*C%/p+ tm:[:z.ݕt+]JWҕt+]ːлC!""[~0-;V4І~yhO@gJ"$CaۀB$ܗ;D[H!{jY+ +2z0'䑷Nh6X `B_&\sJ7a ;:tFtQϲtBZ%  #ʨ_m2_-< :?X#Ƅsع- ܶ S=ۄ \=xԊ v $(;Hm~WwrŠ;U0>׊l}Vȹ#/wBxDFZ(COCH"D(?Z2h*][.ݕt+]JWҕt+]ˑ%;z6 5lhF!b1!DB8\AA@'<h>y{gОΖ";iۈKϒ (wY1 +3z6'Šʶ#$xN06I@Ɲp _MP#9\#MYC}0f87? mbBGH'\݉z S_ l}IxIJWҕt+]JWҕe {\-PP!\ )7ƳTÇ09GNAo|Tt6õ,!;m6;,@]!S+$`C8'DˆNhK@gܰt6 }ˆt_%2m5rVUGSn$qۃLm4]#?rof舃Esm>`>цΆ3G]Ks/NΦL<1߿ۀe+m!;fNyAnNy&s4 W;x3]JWҕt+]JWҕ Y8tC PuIBmTPLrqx-`3GpȔF1)BK-pu3%tyM1Ҏmgpe!R9AH"5H r˜I9 ^Tv}t贍0|+G BoyQn z8g@ͽymTyD'ct^WM8G()*.@iµqe2`4yheB7X✪9LjH]/ :A1wD"7.?8_ML|V;+Y'87#inmts fdBy^ӝ8$γff qD#Qlnh}~>(HlA{DY(7 #X,`6 `Fav#]`^C1OͱcG"}D^]YM'DX__qi.hW!a!a3"$ۏ"E2nQHTn%FT/IoCs S#'i,ktX(RmFܦ+G1M,֧] cU# }s+sxei3]; :+omw>13I5P:*Ӆj\=,GzywT4}f9_TF5F=R5Қt9&k235Bb6!'I퇝!M@r[kC@q(@ee#{be/;ZnuOxG-QYWNrbWD@5kJlmDlqmr@#K܊E=Fє7^f4B@4@*cY:[GF;Qꌝ9Ic 8gRs, g˷֋ߺcG_lR H+t.Bc[,eXltd偙Y_ wGR lXfQM/ʭs`3@6o̶C)pЉIvrCvo٬'󵉧<}4eD: ܊d̍#W,Tzt.)5)װmr/HK=ŭҔúOY+߮Ep'zR)+Cm<0|GNJznus z{K[=ӪpOiu6XewWq;NURrLu4[+vʉ/ʮFݹ}Ո*kvurt4A쳣ޝO򋧲:9UH5ΆDO}6ёBh)/ݔw&ӲvMSF4E-ӿ0DYΔ6Y8bA9I>w{w4CB1Fa`cQlm&މI@K ܺ WZvU".8_C*ʂEm~!D u[f"OV!tWw w*JGȷ+;V4S0u?|!p6py\lO+"l|T7b- &mT`- )B"W\}DmH#vG CԔ9-3t%P ʓӮlqa|#EJW[crk*֮S<hTl}v¸0\}$'2z'rߡ4HpܲHΆWLZxgÎ" h~Tvp󄣧N@t|(pD_6~?Z!]&9'4P! Nt1F: ÝݼriE5qǫ#;VzDʨ}=Q%FyL]FS#hq[Xiع8ÝS1g1],-t NE9s霮MUn*b2-s;8fћeYODzDdDp',s̥n !(7..ސ퐡%`\$#>Ц(t@"!AoXԞv1HjL6E@?jCOĖV8tmm_udŮᚮp_#DL;:Nz5[- ܙ( z}յ5}9kqA̜QWmPف4d~tz`qTT_I6$]pp%;mmWOh=rUD'J 4d(ayviϺþkvЈ"[dy \s0Qt"zRL6\-# qow#+}{n?G/52Bcq=.nXch/TN'5An z*DG&z#.3ɟFM!v`}ږDLZ}L:Sue;}/Ӫsw ٕG@P\q?!zB*M;i{m(Bg-^CK$ $[gZdS(E@00B:',nEL7"I1 H& b1 OܭAHzW-p$qE3S0MHSRКl\ 8yЩHdgM8a3Ll}*[M!8A"]u'\T"K_p^vt} V#>zfK@":RΞ_v=< N;gcɾzN .l,N" h#q'g..XҒ)z}fy -HRfIp-p4XLgBxSqr+Cջ$:}oʶSD2%oy՚#8k_cjC-ȿUȿUzgv$]vzzm񽰐SQlqG~{{(^JeG Y^{A@X( `Q ߠFG~ٰ):}$Z\r%/}K\qQ)4nw}rk,FqIQv8or9dʕ=+b_SO-JP(W<;kyL dD#e#Cz)4³cM Li8N7^[v_LyV: ]lÔAqMjy)Kk ЭH/ Z4>X6FyflD;tf2v8:4?Wtv.ӾHWtoeDδpXyٌƒ}YҎŦTUm,WȒre4WgD_Ι^RpuTXf`2GH<5{=^z/;E|g/sDf|pGp appL ߅2u < ݭePA5788 BG[X湰3 y,;6f0C~hMGIoс.V#fF"QlCa= )vś:bI;,Thdv1o|6TU{ƙ?'̗^v7)sN&ZA<u]SSSS;=e@qv!!C68e [>IORBQ("D}[Cⓨ"ѽ%) =君 =h-0mۿ[g:( iW9L'l+ʭx("G}船oOT"%0ctI.r73 > O#$0+?{Q<%5җ> E-$r,OzᓟАo?&mu}Q03{ӏb,p&zG ۮrH6tJ?GI%y5VG^푕-W /XF 7n_faj;64|,50@pS 9'{O,eSϭ_ 9 [ K%|oGE5$|doI[ $!mibe6lm@p3Yٮ\Ҧo*0D9i tO"MS_yͧrG?tyiU'O7xZֈø wx#_#zi߀1 kJ&:_k cZ|S_D@83s#U2Εbvi3 QHA|ZiFAw64BHF7!]ٹ#qܙD.TČ\{+{2=MAWLxh" p_~5Lq,hDs2SZGOu8{^(O(5"#[fu7TPu00UY2PZ5{+#=:" i5|vמVިy8+ 1^̜ќk;P| ;҃j#%{1{;W'{ܡ1R֡z*SMt:8RìC. l $ uL!﯅Nw@k"?a6%g8&CQ3wrge$ M$o6HZlЖ0y"dS[41 ɞLX%#wˀ;P%̟gҏ'Yr-˗/ zԺuiÕÙgg<gqke@ć2%&HVa! )(‡C ̤P,"n. r 6DaMd_E/z/F!HI+JwsdddvvK_a=9zY_K /70 v)4$#CF6ȮAD@#O|ww~{h4 rr!`x` DLA)z$ *2. |O|*.F)(ͣ=q {ߵ=gT^`LP*!"<úX&*n :(exS٭? 򲗽LuÇ/N;GtZG$b %QOHNDŽGя~t)Z#IgL2*ӟT Y? O8"ߠJ oU*ɍx!1E8DE0 G#}(0>4BjЭ›|UeSJ=ܳ{7lؠ JU>=JdapKa! %h*Q|B^R*2Q-2xۮVek(j:$QS D<0Ss .#]-0v+9+"y# k8͒㦛n‡M, 5,S>UDn)E!UF SdŊ|pp0_?__=5yzk׮ݺu׿u3pr H@ͯ{ZB.PςH >5'>N`s'(#;I@G`knbF={R+F*l'Goy(<#UG{Jw.Ltd\H[]Qp[ZvЀ ":8:BD-DCyc䪳tƧ8,6Y;] (qC&6./YW^2㙭eIWKkLe܊TtXj`>S-,).usL@;Ynfm\'?MZqTre< :/k38LnhdQϺls0VnM4>-lv,#54Y/lYZr:#xsssP'>륗vY}ӞNOZL pgƇh%)@۵{h]HS"=z-HH9r*eKPn- 6weIFmvB)#:Q8,MxeDچywwrӟ<-e$t!daU0!씯#'@]T*{Sbk_ҥKyb,pVxvnsL`%mŒ-jay|C*;?5K^0g]s5xj5yo%Hs9gk׮]~[V35b A~l˯mdd~yݒݸW_}5K%o6m"N;MG+Q+~;y{sqf͚5[l9o6 L]x!`v+[n;o$gHV:ꨏ|#f"^nIT/~µ^׾mo|CU4)5YtI_Bb,D$uַ 8E .#g(^GʔQ n4)>xƍo~)OiAOo ڻnlذOF=y=1i%aBzmBE>"!2@|fgMszOZ@K. ->,[o3 իW룏>Z'!G?QE7Z$:B)/| UV17@eWڟ.)}|[ߢ7M 0[ ƕŞ{)?iO0G+h>[(? "OJ|>QxbԎ:o V(E1&szw֓6 *+adB5-9͈WMNG>$Bt;o~ԛrec*<6'h(E]g< @k 2 sOD n٘0Ԃ Gtn<]NOTπb x7HjV_PE?z@ [em5!/y13#< `=k>DtHPh)n}Џ~wi'6<";OnJCQU5``(}fXQ}ĕ( dN42FcjJxuMҩ2&dDj1ʕ+xL#G U )0-~҆Ze"ԋ(Y)?g ҉78!CN Y`~c>Wi5_#q OBaKxEwLMOI Ee!$a>ځWd(Gy!$Da_Wk X*Mh2u{꡸C@LμbEmEQICx ?3? Wѹ{ﭿ!A懦O@+ 9ҹ>άJ6?!f<[h";V&zc:9YMvԳ`3gnaC $ݑ fYl0dWXll{:)r|!:܄DЊ9\o[Љh.,=-I8ƙ1xKvh# tn`zZ+- :?K:nf> ^$6{\m5N䗰aw9%>ώ|?B h?lFǽ/5M=vRZN]Dʰ;z ^D$cFY[_YGXH-Zb֪',XQQz+_U/r׳ɝ*j5y/&Y+kX,*59yuW _?$L^qoo/?c؀կm7Ys(wՋm _BI\~b?x\ٓBIP*Z@!ώR6( ɖE!}2Q ڿo;ڻ}I+'B?g?GA^tţM&Կ˿XH7B!?OR% f hcжd7HVr}Ü45mb(z}}}l}mPxf<Qxs I 쳏U9v]3*6ZBz|ܷvGBO}e3eE^A Jur-Lő/p('3S -L0__h_\dLa4oLJYTv&XTיgIFD+nS/}KN(5=Bxܨ#\rf´$駟.0iqJE?PO1+ۻ1кO>ư:ch.J+^xuM7kpF1 ӸfzRPcB:ԌL Iv#yAWgq&: UCHY6&7mHu]`YrO `W ,Y)1!k Z2^08FxѰ򆥝4N;MƑ 6B*z敭 48K_<Mt1j` jVJ`TSiL2Cxّ]OْI["q/c^<%bSgȓi&Kf؈ڇ@O^#VLh?A[0o -: I)'+iqHҕW3kB3:- zGp?uϥjI3UbCm,UT_ o11^6=܃tARWT)]cg#t+iPL8z!z#جWZEFPO|!_2n%/~aHŭBv6;o~ h> KcVEՌ|5铠[vC3,d=jYHW# B|fkձB2L[++ >4@H:HQn޲^te5[[TX׵E[ha>LJDuD,DO>CUZlm6toq}u s<$)fijnnTm7>w/)>X2Рrv̞JN'lYOqs9vWuS274A!, 5gLdj`Q0qts4$ }pFr' nN!8WHvԆ0^8qy3 -tNPۋ$,HDG\&~y>(,/ -8v\Pl_`Ab {QYOh+{^mY;ecScثk _B׾4Y_MIlaJH@X9Y(ۚ ox88_q7e[AY 8kwZg?c{穧7lؠM#/~Fa'U"R#-eKXtA,%$MY,!lݺ6eKg}smk^/l!}[R[nŶozӛ؄|aA qaEgp͚5u4 u!"YQ3Z) .NfĽ/g&EKIM9~}k8)8bW0:(xC<\d}ˇ9RBt I0Nn4jIKupm$ [K|>oRMPP-ґ;L!< 0&oi~d\PJ .g5^(6<,e RIS33޼.(]C07֮]kfjt# &7KtM|aVj ))0*?HK5x0,:}K_>B7Д2 NA5s 2P'Q],QQ|3z/>z](BaĮRYZa"eջIFw^8tM1gHkcdPs=G<NL;h#&&RMv/.ϬO/Ct㬳bDә XD%hg',%nxU^CԌ!vDK)*to F%ay@?яx9b(?Y(YZKGqwm7 =~n(K+Wj!fwUMĕLqВȒ8E11*0?J"k x2N9;; e?*x2$#pC9#%^|i>Z Qځن-52.Q-,?Dz#G :PTZ(~6M#Zf9&ކ6%WJ3!3~EYt7mxI' hpٕͮIզS}֑Bbw@1mLxOBen e(Գ;G,pFo)q/'Pڔh1c=l$-Tv|F C3;?liDusO7nNA- TMsmE@k_]qf ^ >XjhYI`51O|kV/&B,>D ֑F@ [ ֎dIz>/Ķ!akܢQF,NB?RVSƖeř""4irB9Ⲁo>60a&u*+WGYiOaQ'MV$BU䵯}-vAslVi$#Md릡bl]d.BBV$4A¶?Ԥc6G,աW]uv6ʒUH>le͂`xҒ G8Z^w$Q0G4e`&OvF ϟ$Imzv1άn w\dd xi f3#OĆUGV'{fB>Jjt-–@lE^i;Ew`2ՔA a?R *'IxlhV qO ƞ g'MfL°u{v}ۉG])(wdɆPTF゚*O~j'pr*&RJ-oyO !;mF젙`eGFc{'-ϠGg=KZEI&/-_W3ytPx -ex+_Gh6"|f6_)' _G>"v׶G?` y)K[b ;CFd͛E\2=D8묳FmF?EhU^vx6=2ѩkLBoao;wMh&?]F'9Q$h^d cQdLJfSe,*qаO I)99\Z|3b Ax<4ܸq"/'˨Ô7A7Ѱr ;Zr衇a9fʨW*0g@ɟ㢋.R0n p֭.qr!J$ټY!޹L /X^8p 9,;d͌OpoݘSO=UJ[t-9TUV%ܢzST-w]&X6`XXV}k(S遙TLjε Χ6fls&;1Ch4!@Ys} B/n?jcCvpƎ}K QsoY`iB4#G@' X=Yn܂-Z\|p+J)C ِfH3oq 6C[x~^v:=²M[ex VN, WV9fF <'H[XWP_YSfg{lmEVN䎏Egي r99i[zܲ S>&&&fU%r8x:2::hXԦ#Ђ/XCfff=#mTqЌllӈ&%C$ Wtݙgi'_)駟nBFa^chv`}k].9/_Wl_}Uǭȫ_jcࢋ.OTc?Ƨ1WT`o:yW– #aOk[Sn_dRÇQ~]uU5Lted"y|<Hm/Q]_~bfk"5[N;ٟIDd'2j%کjW* I10j?}}}brQ(")h"'z'4׽O*u%2TΦL&sG|-ܢGLN:`ڣ'?aT%THJ}[iI@կ~U3C'ZAS tLh[)3d~ ݥ#y}M|revβ PHu}S.B?JJmbҐ%4k"Gy2?J"(YDgu}j#;3DuIeFO^4N|T0 3_}qFFF46nɘ&WTU5Y=+B j4Go1:#TjVژ2ƚA4$j f̄T.֣]vFZ[W э7>{j#LZ`01jaٯzhW2^FxڲiK@TAe%<~&h.y/#~B4 ,dXۋ_bS')PIN:$3~6?/^SVeFPT{Sw00Xv(E`V2g}FYs Cv!KL Au)א;N+|G/J:ڋI I??ס舕 @z6ҹ !W&P!QM# Ce&XlldB*: w=\H1ҕh )G+2\!z>Wvߋ-VF{*c8. x.{Qq\u Y涅#^cK^%m ^TqcH{QY:1ćMX+ n݊}7Cggb@:4KIkq-qw;C3>]MKc > YqtmBRL}270O܊"Lc7zkGpoMj 7xr}ipCg(-9-KniEx,Â# Q hg%:̗]֣ܲa?v-^oQZZg(Gm,fFW,lJVf*DK|ڪş(Vjѭb0KՎBfATgyg+Xi]y啺%G3-|ӟΪd!EXQ Ub[5 akc!x( AvaϊcsNYRk!Nd#a2IY"a-hd'PMv沽{'O̩-Q[֝buɋF"W]uK4~$[WڄaeO mdKvqDhREfGhpej[>2~O>`K&/5j4PmE֬}z62mBG0(h3BRBeIF@[k(:HjJn | KPA7c!,B C[>}H@AuG#AI !{6"JAW9$ĄU{`G$U iNl=ؤvo?HLMMiOk-${f #,h&Koe@TL ư3jfMu=F4X~;S"Xji2WkOZ )fvn& Y*5B&=v6뚘4]i쿐e˖ilm8R,Csl Z)4;#ɄG7p0>D(gz Li QBΘe(ÇG4 1lBU6m2#8̇>! ?n&"IVk*oCiK"LcccT1\ I!oFj`Ќ/|T{w[&:&,C% DPJcPf]Fg?L f%¥6O;4~ /h"h i22CڋBHj,O{ L1Q |gI>L3H,)2Sӗ-hLfkj vSp͕MMgq@r"AaL$q'p Wfo,P+^H@u;% -boKO I\-|FS IÆv֌D-scR[~ b(QSD1?"-o1*ά4XtQaY =%gyz2idz}ӏj˒W5 h3jF?HB3y7n佌V hɁة#ɚanY1ll&ȡߨqD FBuXo}5$S،AaF2f!M9(ҎR~ %)\ yx(Q79BqG6&;"}j~G9MA#Ss 4s?xWAg@@@t5Gst͟(v`bQAA @SġO=mLi]#~ym8-ei0Xl쌝#q;O.Ț8][̓=ʢ[)cw> 8 m'SuD;LzZ#ݜ@>iLL6S\C_=967L0!t;y`]ߠCݺ™9'#Oe 9QlFyɡ:` -%>*r-O]gXg~z2m],)*+WlYi- >EH$.wur"ԧ~Ɋj4MxN,'Gv&:@3ywN -Mrc-\Mi%K0 P) ̦̅$Puo~cdžB Ų[zNfv^#k&YOLL0HuK:IAdvԂDVj߅7E"ۺ#wh]v9S@ԬDᩂEm,XyľE E Z|K_bOoT.Nh}cbtOvvT HAh㤬tK_Rqh!f4tz<fo0X1bDijLR ӌ!pqS14˗/hh+#\S4;vZ>AA-Q]S^rMbG!Mi$y屟=E[HIlg"w<7ߌnL\LF ^{- %V*/~F@G}4lX{C`D8\`TNe:}mLvd#PP\pB V_7]wUSrL׾5F!婐J7dV@:3df2x,r '!M(/ fj/~Q0_ RlX0~3`t|{crSSS͛ w'aEQLYg@HS3U1f^tܸHT4%lIDFԙgi)?ƓRrɁfL7b:щFIHE^{LZ:}$3yzyۚcPl00ӌ@Xb` b`46ǓXP;k!P^pTV(:3މ38\`m5Љ!@leTjwu !O&G$L9_|u6lؠճ8݈ |dGl[6de4x`݅|@'֌K"}l_l,:,RG>|Ȗζ)䳞#<Ҩ7c+c6oJސA02*ܫ8X%rA 1u{ݿ˿)b _n:p!vBLW ?c٠ZY;j5n27?ţ7Z]*l2^X]k DnS],RfYiye,ЬQ ßXVqhQ{  `SVf捧 6Lg;z뭷6 蛊d\6MTH@ DA>yN:Xl`g&vj߮2 ^h6xNcge9眣" W.]ZIDATZ[S}b R=1aߨ,瘝YSkŷvDw]fO AXOiIE!TZʓ'܌130,ʈ''SMݴ he[S}#{{{Bk49P:FL #? [hy+?1K:FXf WZo6 !A)WG :cSqO{ӌf؟)eK/Oh^Pۍ}ʴ`th\5a>XP,Ics m+.r&m?,Vg>C륃;)fSRdaC)ҥK_,a0ԝw%~;Sj.NVUCxQZS&.GR3>j"z ~eiqƮ2 )9">'􋖝q(O}*h#g6\o NA%rcEa+da5vk5VUәfeKG{8hf0S)+" >_+s04 h-6i-a2A[䉰^q=F23DS(W7oUE19iO<_kN i|L+V0}NA[$1q;>,dl!Mћ&yZX)|c} zP06+d4[Qa@ u=Mbh)U=eZ0eMXohiZffjyj.L l %ylUY5ISPY(# 1v+= =7,4Zt, tA sLEHgC&J3:q7Q4tj{wxD!FUr%"vΎVh}jDD7GDs G4,3=͝vcOyMOixQiu֛'GN?gy 3.5؀fǀQfp;y&ZfِzqÛTpG9'gG@Z:;ʜ5␳ 'SpȂXԳ+Fo09D"̶O KC$O=51MHD7$xdCSy$imMd܊;f KEza՘.=F[}?;Sˮl {#8XY?_+ rI'b~YZʨrlmw5̒Z[ ?] ֔,zX< OygsY@#d|gRApvEj XUiN !6gOZa֯_o_gq-m!RϬnݪU2ّH(!+#2ַX<ڇɺYJSUȅ]V;S~P>nUFLt+USJht*#QŴE]ǁJLJZh&8,*h,_cXf"DA ,bRЀ6cK_' bZ lm|-[ƴRgߎF]z٦)]j$]D=ѱ/~sN Hk2e]d(Z[t*oь!g?3Ofi ~ ̓>w z뮓:i'O  @,DZ*QSPۗxgϨTF>Q_#ܭ4G-A0V_:I(q$ezb1B/#Ly{p11,U6}QB|4\E5ZhKH<53GA+orѯktq gŊԂ(#aG% 4g[@pӰV7׌ahZ0C!^ WBT< %++x?OUc預fjd͚5 x fi+zDכ6fi1OFhhJ3ZbI/nĖT֢Z+ǿPsUSP ^%tœ(^%YU526-oy i营 .OʦbpA.3k*>Ki31gu ÁP\?'d9D_f-qf} atxɟq/PByg/a Kj{ z0NVRDs4YZP~_tKY:$m.ğ7D'xVe<^yFdUT_^V!6)Րqga)17j+L,P%<#4$Ռwy'ƵxLT<5da:e J(lmEC!=BBYgC4jMh>uǾ1:*OA+=7Hdȕ'ȖA2$鲻M'R0`]CMحJ=  ֧\!evp1tUrlle#52ձLmn>Wq__t'>{<{G2c פjZ9fG3'p~gN^0ќMm୞#YԳPZ;'t3\ZOwÖX-3pF@s;mdιš mD= d#=o&|dG@ .Ƚ]^Ql1,څq-Tl *9Fn6ДH+5`4xZ9A= 9h1XMqs[$xgC`O4eUCKKoci`S>som Q@~ᶔjute I +cXl͂@Y eIJkce4r|X4SN: !k|˂?=>aaHamB ^ i9Z+A,U;餓VhF6`cINnӛo,R6h`] vR'>,0WҡAU js9Z 5LZzCx |£fRJ胏C9^ F T**9ycRbg2 xi2铈FZuv8PuHE7GnMS׿DR-t͹<&%V-j`N]L/r<$v@Wc|_x hrd ̓Hž5Z,lᎴol{Hy~c:;)uY-]bLjU y#U)m}3v8n!e^xj^<2S_>gffAc4#=vwPa/rgwyT lvQw}jo,%E:sup9zֻ8*ʓ}űķ ӣ D lEۊD0;sHGAKG3WTɥ,H_q8:[8Dv4zeD>g&e M=8yg~zr 洍FSȻc_A#G@{Kgw(*OuCsdm!PZtkM|qy:١VcgНW^ ~/'b4K :%Qqmtn%2à7E@G~bMX=v)\_׉+Ad rdŊZ"f#Ea%$4 -ClRHE>4Z(?+=餓UH |Ŷk!,I$$k-6Պ[ H[b,cj*\ٌiI`՚BBj|6H^xa뷯O+`[7mڤƤe؄Cѹx˲D^o~kt>jt=v!$#d*6u>җTJ†S\њ՚ZqFBUMjVƾb)v-69֭wfggYg{"u5GϭOYu]ÅU@mKP(6)1U_eVQv|Sj?$S#EdMj4@-X*“K1>ݕ<)H^Vh{"<7  ?Bgr$*[ً.H(=U*Fnf *Gn4$Μq~3Q*{~K.S"譎qGhCZbOl|Mh|Ea`` К+(oyF@~sΑ'c\Gf&6a)u+fb~@)(g `~C3T/ @ѥR,Fd& E7o42a#n8S_?+ ,(;ȟ2+_JcE)q<-Ya( buGn62{dct("xu4%4 `ys(:‡U~@\bI?t 5j!+f{/uY'2i'pʢ}m-mmpbm$?Bo*Uʖb? |= 4D0P!wRC-Yiy@oDD``*ϵoV;F/>'<ЉƱZ] e  XMq^Mȝw)obbB%G댝g #FBw#Wr ,DV_b &U&iyi>h~#$-ե]fFىC--[h3;N$fOꈾ4ZC%z+kOz+c=嵽GCe*evǣ;WVfrD;Y:KCHӎzvv}p2#OR-Dn`tSiF}וltcy`~`4g=F78Oσmz 6:8{䆡gg:)o lHS%[uIu%[2Tpp#JGPώ'"I~ťw}Z- !(9zZNRZviesl⭅-(@ G7^yZ<*Yu]7n:+''B6v\,xSbCm-KFa4=3b1,Y^Z ={カ$"n",\Xx}cac{òǪREѣ:VkuU2plsێG͎Ռ%)kvdwU#aX6o,(3F &>N6=^zG7~ʕ7p_؇E!MvGz*Ue/{0T͎P}*-ܢE<& a_A/bsٮYzs1: bf Ǣjwi{챇JK˳aCx"^1%aUPNJk2 b('OoTӒ'< '|6K){]Z U|K_*R.`,zDi#_l*>r"SVl{Q42;sի^E`iS)M7ݤ IK.%ůIyjFl0e&A2$L}W##2v]}"C-oy Wu(G?QKRcD\.S:[@j?z„>2:It 2^BMA}݇~89>(*o~hcŇD(ᩧJ٨q)bmUڍ H@s LZl˙6UԋW^) A-m}pwh>1O~͛o_UF?'s/| dd3x7BT~TZ^~=J}yyLԅ%!:Zmo%KVE4URAҡ4‡>!i:C#_}o&|0E/ ѓ .@L6!@yD%PT?A%J?3 T0\lUW]u}zVbC"QT kBָxK" gJ3ܤ+ZM/ V>S߮2%ĝwީ!,2|31 *'(f KT_338CB%oIrdu߿ɈsMꁧ ?6 0_֭cI0(oєgf$$cA 0xi~>Rh CIPb B}EtIx3Լ,.2xHSAiʕ 7יE0Z_}54-mqxYo"z׻D"4#*!,y;SZ%r|TŨaѼV*t &tk&}4e>i"J f//[F{`{ e=ؿIdPl[щN6q :L{&h L@KU%29Vo,Xu ,^'b',V|].t xQtkL&幑8鶰[Rew0Es=tx5u-6]ZOԗo͞\n!Ω#SSz#Xq҉t;y()T#4D@TDz]֓K6al5{L$I;vMe򃳎'(͈l|3I}͑B>L'DGm8g9gР+!3>  y}ϡqF4RgLy'sCxv=̝1ĝAI: BiO-fci,;V(6 Prf$xΆ<$- PF ^0YhW)/1b̏*+k&[fhk [;k#cEkO )AX_n7p3!C~YɕuLX%e@ȝ-Y~egf),a8LX]&[ ]sR*š/lJk#'x&mV+ MuUKX w> FYۖ^:aDZ6[YXwݷ-d2ꍼsf0B͸FBל}$0rug#D{キ|ڐ CQSkv09f[[qZ%NYgT0keGU5 .ࢋ. &f.>U6nȂ'Y:o~3L=i4 gH>*G׬YO~v z~  mim ´a* bvmtmKSRtN8 䅍ʆ Ȕ1WZI"">h(KbRlxz} ݀< jLI~!W?&eӳښJ4$JMT8]wݕiv0DLQ5¸YC/q;& vLnBwdBc=.N2䑗ߟV\|6S/214ny֭%$q34YdIx lX'̓^tff $-ܢ-k(;O"/2FyS}s!Ԃ7+_J0nF[VCh(!o|&BD#ɷ-CRTV Ld8Ahʼ t>>Kk*0cP<0<%״F_Ȭ׌Yݞ?+$Q +wX63 I&́r1.x--ɫJiT n4BG¼D{ʟ!5DȄb3 oOywaRVU6#QτaR;L@hRVDA:?|^vI_W*qlK5pԧVX.f+Cԩ2+eITSU^S>!#>V&d'$HsG>z?h| 2$Ɉ)] :@@4g Ffebo? #e=hndPh D09tw1}0]O:QB)@V4f(V$ҞN UklHUFzK\UH6p,-@_t !BdbG_q,EKOV%#N!j5LM!qGm6GN epO\v<" qm<)'8Qצl4~6\ ځ\=Bhnv7e!zڔj!2s18I% M:.=6E|ξq8Y6Anj}ROY [C,qidk1 T\,`kbgD1 8sRr˼?0ePO{aWw9+>.} %n},>8$+x?g{M'bozgy&#Iւo{9ӅŽ>w2<촌c碋.b_~U68%"Bl!YV07 ,,#f*qٽP0 Fk<%jDQ٤iV퍒"m$*['? /\pW_U$ )7dJx5)E=3nr0Pib}YFc@i.Lua>bяauN", OSz^ljlz:,6f<馛ى(RkĢ<$kbzͪh~@ɂSk|{Zť4 CB[b]wSX _BZ /fy]|ʋ;6R&)~!j*k#u1K|vdd 0pE( G:IөQ ԚB9!kFЯ~+9Ty4S 7ܠ]} IC7R Ah L "۽p.t))Bk0^_BcI)lRNB"*B"V,u:QZRK$o".TT-10 žT4kXtQqP5|y-ȟ((B#S:(LɂTyFCȈ׎A:j!Oɂ~#i5n iRm/$Bi5%2O&&eh OsMad k[BoRZGoۯ\ X|1/GϢ^t06$ Om^6>=yyaISGß%e N E32|Ni#JQfkjsF=$OXPMMQ6Q>H/L,)ͮ9ƧF_mM&>\j!FԈhf* BHe8^c_rRPS<駟sf՞yBN {? 3 R3ʖPrIJ$uդbp-5F٨EGzJu>Q $foBM>i$B 5>$J aBMZQSB{1I,ˈΥ1ɑ4)@ɴ6U#;QP/:Y](J$ru#8"k%x%` +-X0o* 5RߠU݄?e(D+`480+bhFkhPQ {/ -%Õ /eTPG[jGhڊ60ϤA/DςZPl'~MX0}e]>%<ųfV)O{X<4O4)TdD;+nP; T5ZFG4׾5{ t4rd\덀N24HZ]k\#TRD g r@;C`f->*D!M%ˆP-HZhF U5T7ug*0i ϋ2huwӤH s6?Dn_·i>g@w@3 CGmVf,sڄC5$:9"r?O-HΩъLDts]Kc,`DsK!]of6 UFsKHѲїxvpY}=u >aSE7o1Sez}5Hahbٞ[wF_f}_{ǜ>W3>S[TO6ۆ̀&R)@Iȧ)xP p-'6@v?縁8ں>n?dj\"r ΦgׁԠ`ixah%q2yΈhnh[g5Caq{iBl!&@#l̬#g\ikOXrpih=^pT[-9FH5DvzZ`,;T:TDu+,y"݊:>s] WV2kV `P|NОMH":[K,r;JW 7%g?O}*ģt+]/5qްaãSIwrk7fU? /jGhO-+W.䡇Б>tQz!E@@7óϞ2YБi6 h>e6}6t&`ITvձhVeY 8hel_ug&(cО lB7vAFp_eM8}nvgw魯.*-_[<꟔][y~`M?4舆1 QұR g *ٍ;wn@'ԳLfp}qиs61 -h-!,yClə A=g6 A9;v@R ~9;;r KD='gvEH0tka`s_t=- l/?,߿4DH܇ZQ^HÁ݈_^rH}B0&cԗ]k]zX 2<\mY6H<.9ഥK@w/Q,影4{O_0f:!d"AoQ?z2fI8w9zы^[u+]ʟ9iGu}x#Nu@4灁3t%$b!˰׿Ozғdztҕ)m /|V#8wDqpsa`CI";a&X*LL~sp4B{dkSma3ԳtomC!<Dv3ohVFH"?$g!]뫮MzȽ5c!fյ ͤsX,Mܣζ>pUܑHyApRXz`[Kׇ8Nl$AÐ[_yϑCC7fgPt_ݫ ̔l,  ry>VzzƝ1c֙Z3y!>:- !>ypczpcІԐMv<7-$,"5֜lGP KLSќˋ:44㐶%@; vخ{[Po}hy%u- ΒvnE}F4\^|He Ň֖VCA}J@4,b4{櫺tWD;x_^*rll;oKz$LQywew7tu] 'Cko~JvAw+#ʀq{?EY?S42]JWg?ó:wxxg3Mn̄\.4WZCJŮJ}SnjCT"|;~' WMW҉K2/_soh˟cI7qR9B|2lԀGLj uuZ{4wI&I@ŎZV+ C }HP}ў^>UfFxs:9ZH h:QD諍~}k;lzYmDк!~t3c!xSzƴ6yn8NܶgAN`I;Y&Npts[cgw;#lH p:%>প,#ʋM #ˏh`>mAi_vDmaCjw_z8WlکK@w/Ez&|~ g;xs}K^žO}jOOO__ߢEg,_c瑗]ʟ0d4jew}###;ۿ]rg>D`]JWg!g=$|I<2%ٲDeLX䴻A N3.% -J"Er`HٲcY>Gǖ@$[իꞞEwz&,‡n)J??S?STjuu:2@,u?9MӨ>}3?}}ӟN$o|7rSNDT.<ЅD71EHDs+Bd{!8f'Pv"icG[]ȿ|ߥ(m/|Mm.?;~_}G㉹?b****r?-lO<񄸿,wv YA(m`~>״~[oFQQh6ՂchwR2y%FC$.D|Y±ϻ2OФ )wNw-YDL>#?S|ba[SB Ȁ ؠ닉-hNs 8 "=oN}wkӶRA:wCCBVuhnEwΐm DfmqmW @?VΟ!&' a(mgl6Ӭz3|=Sl&:ʭZ9pSY9h*^-3{(e>ʊ}Fc/qf \#˙|`w!޲Y+-g?@ `gf) X}{+#Es; Wgz/a-&-8*2g6/6p }:GߝT~l?Y@ ,3 yk*/?{ߥ o"n 4PQ u6!, 'IQGW?Qmn, @n 5`#>,_q~]4O%Fˁ/&L Gw-ki̎`r˖Ot{W[2׼9}48Ү֯6VLg{ }H:(l C-;lamۊ9 u=6Ms[w!?-2Qx$̩lr|џǓh/CeL@c]3¬>-B`2gv\-%aO EV6R@'84[c $e5RVO:젙w&)>#|ZSw t2nKQ\j} a)-ꕕliwDI˰='vT'[%UT_Zx 8¿@`z 4|,ʏG h, IEEESW45B́A{lc8JOʦӡsg]m -Fru*T6 AgM4 ʦقfnXggbftg]yjA"ǩ])ƫP/6]Yw}~FȟHĖ̵[3n[0}Fe]%a,/ p ,eAL:Q:@l2?=`03DXuk8΂hvouz*]6MK VLPSMO ]1c2Nb.#57^&hba*fzO&,Sv  Yw3 0CbLb9'oqKm8[ψP?hW`ޚMVl&It*k풆ູS9@\ 6Uv ÏӞC) f |3_ӍN\v@^P _Z̪EW7&ͯn>Ϋri"k̅+~sUT~33J5=9yDT.z^~EQ@s|ய}{w}C'w}b hj)ll9gmNp-g@o$⋎+R~Xeu[taݚ%fz̵ h\׆Hh%{TLG z=7޹SpA^BP4o}sY#{,3hNU,vߠdjV k9X74qʀ"$̡\C Eʁ _06DxQHelSKA\ms ?xףkfn%UTTTTTTTTTTTT.l\@FgCMp3="]E32CD>wvrݕ. _ (U/1ڭfwn\Y蝿[^\& @{wZH+ .}++7u2  ( UԂ@vB2d_&ThK$ |XtC жzf2Y.whBQۯVFhʁHُ9}&mjW.H>ΐnmnkvWk~=A8ithCW:3# z8ӓ3;ւY.bNLH՝ț%+~5 klɰt*E!dF4-[&5!hn f?wgպ" @6I;g sp{ܨј4qdB::27[|7W8;` o=!{gk)e˼!2:tU@ǰ@0&ޡʥMŘ^r{Z PFS ewcu|2ѭMs'3W@z7W fC_Kl^pvuȄ«b3h.3v3O(ozIÀ :DCvGIk:?,(#mo]錿vndTG"ƔEd_nd#\x *jt@h[icsd <~YʍYH;;X5nGH",Fn415A~$-#-H82ָCuF2Y(o/+n$)%UTTTTTTTTTTTT.#>{gCo\v@ORh g@.ir'(;AdKڭk2Wk1PۚPw)A=/rf&i7:ʜ3GK==l>Ꙑ&x`52gs`)f B0->)n! h֒n# l4D,"ygYu|- n<8:LaZ &il癡n`O=>L h#o V"K#-H82:B e > G*?(4NMJ@\2T@SoS@dЎm"nl15-K>"J@ƤI_ەP2e>2}=E)]L8tq-V0ߝ>Oh2;a tb[!fE=p T>o\@O~"}B\fDrpѰ&df-tL v2aL"g&l7kr3qKglP'I x~&?f3[XL[160~w~4/ -699i Q\s^D%8C~#-s"W*/2/0ݴ1?ʏ{6.-wBe&H{fX tzg}*DG.;x0\Fށ[`GQ@-g6K1s:U'1%:荑Hw@6hm/۰G]%}5@3ؒ~0vb뷦7r$!evc-3UQsgnCڵaSt5kwz3'}%Vxڪseac5'⹩tXc jN \.f }jJg2N&DR3n_ s L1Aҙg,0m7eMgu:*4bt(L|:aM(XO)k.a4V3=2@>6p;r x L[s<=o\~lo,eKs\-odM&gSdI:M氽rq>S\a" RLńHnɖ<$&Lj4\oq{\\ >ȖVI=7@I\8*Gܜ7n >f0:xO=/ft}2a hR\!@~>Fxg?[W^1.LFclM_ӝ@/ܢ]ӥq,聯3s0±mBHm[f@ΎzƁ3ygVl?3]wE 8&3F|X{pw=vDh 9W@ [l(\Zq6ai4"9Գ+EQVnl!]0S+`8{}l9q fG#냁M-V3i֥fnhqU.~}XIu]% liH %da6cE ia\H`=Wπk;nd~.׷'?/U@M;(HޙQ,_(c1^lƊxa6n5[ٳZo~O1 cϞ=W ᆱ~RT>O|4Iy[ru]yo|7$}< }“,LCг> ^~_|Qih K +sX=9>s:hz&\-IgaA F9tgBŜNxƼy4l CAHYvG)}65]p Kwa3d-]s m\ b 9);'BY"0/?%_\tk55#άsLJ+o۩\ypp0m>瘃rf f҅Fqh[InLa. KY!g ^QO) pœp̎Ÿ^ E7CL1ӚLa>[Z҅98ţ1+t32NpNV"[^}?~^z ԩ˿o?^x{P(JD">??}{߻馛lBo/A(񩧞Moz׾/*************C |9tS@k;tԫ m6({ܱ-Dˌef&s8F*4CCS _/%"zŜ7l{3>/53+=f54/K|]vY4,6a쮰S6wG5]":AYRόna,Bu\=Gd̠e9|cە'xGեhfg]cظQ8`;5qED1}usI tֲtlJa[<ϊg3&vr o>PF#Yc|4`p*vL~ެ.UGX܂QY+mjlTW<vn Y1GB$ o[1*,!$@.p_g$|oq|UW-L~`|wMoZXXIGv+Jbgw7|0W^I7 (r1 O~VQ@G=3QcF"b΄2В|4ޮr42p'aޙ#+c"GUK&7Qݕo$w+_(dvzϭ1٩(Z^}!iLaa~4NE|A+fέhQF8s=`(>۰g[<#qfup :VϦ>'TIhqv25)\aMn[g` c D&F h4\29D5Z b=r;^lj|2~od,i DDɑ4 e48'2f~B3|3JFqQυVTFHYRZ˫Fe 72yg8MXMapQ`ud+@ٸ]$m2ߴ~'xswW/kW˿333Op{ +L'''ior^iny<**************'ùnc Qm36!G@Idv7;W@w ᖞDwv{;ޚg#0o+ ~nhj>nDTMHޙ?8gمf䗩>]5Nzr=cN&Lьw 9F3A~EVKp͚t \hnA-a5lˠS iᖀ.cV-_~4Gs5Igcn(%s(C h ad\;Y<ž{  l`TVŕlq9DzJ$=SyM.1GX͖6M r ~@+qOtnMVT7JB^ˬ--׾˿˵Z矇Smoٳgꫯɟɟ>)p|.2vc<3':yI=P ?uj$ j:]a CnisiA9O'|$ٮtNO67XMl;lgrL.ۭ3Db[,f4и̘IY5]=bV//X}˥=U`%ui^|`, he"Igfivxn_h卑)]"VSdq9Q\_|3æ1ɶcYE^}o &_b=i/??)nO> 87 &gw~wk)fqǎtK4/.UTTTTTTTTTTTTT6}_>-$cd Cb:OeӃr[p/MwS@&ö1 6k偭4ZVwޚE|r hl}D¯4-뺴]:ؚӭp ib3WY3 m7`d ͌#k%ϬkK-;l`M=oyGwF+-%\ڗ]IicN--;iBZiAwXN] YxڢۆiGZƑZy87[X2= Jk)z%iVm]3 h.r-ozӛfffˬ; ַ]o|W^944|vUL-p|N&O?4]n**************,/,ٛK~}#~aXб %zX}4#.8`tni5[TTTTTTTTTTTTTT: h#o;sN!ܟ0#Hف*ZsV?e" WǮ͚y^r$O@( O3V7']I槫轳1~@pu5\ӕvKjx91vɨ9%yg"`BUdh!n`}ŭ{.13S&Nf2qs:[lz٨6p{@eY !KTc`L[T4g{t$s094kfyз璎qs- 6F` U%;;ô50ft3S*yfPO7{1--hJw)e5VBV{cSU+h b,·`s"Zy닒~+ؤ0?A ]7n}Wi'|2ˑ[pp|Elp|y h4z̙a4c淿mZ G?T@b$3yG]c<'|4q&: D!{gd ؠ#ВnbR0=4l__;&:eVp,j hץ 33}WWZ& ҥ+w[d{sTTWg ؋-CAzW$7(6zԚgE(1ƞѬy:j8U"&|#׻)QG@3GQxcavfoOK4u\U]* `gz[hF#H;òx{ hv)c[4SgE {i K**************,ތjuH>z$zjm3G*Hޙ#ygH޹n%B*4>cgϢngXi D\uPars֮[aPvg!RRS[.Ynq1 `+g80W뀎ؑŭӴIX0!2j.Qi\`4k\#IAlS, dI,+ng 7-YLk?oI4Ss~6GE-(Ho84&z=D .[C Zizy)[\B]Z̠h1 Z3Ne2sp,!bN6E"ygi%rP+_"l oW|:O/nY??::J^X,R cǎߥItW4=wM9r~7>IX,O Id:o/=s 7 -v4VQQQQQQQQQQQQQR@?vVz9,ECr06hn79[uDi/7WPv"`\; D=!Bahm85p?֚5v=Ӱ9fM3zCڮ>٣ꆯ˻7F!̉H0fz.\sե%ꮀf0Y~s$:k7o>5ǐ3d=oX``a3|V/ 8fgA?3ųYc UNu&531gu3=q4oAe svX#B3^&=f!-9jAYt0ރa ̬UWP}WVZ y3SDKq%[]#ʪ^s2|i5LHVy } Z.}}8&t}#64__&5˿0>zG?FL&~ɓO }kpny|{\5g~.|3ϿWH$h>q  7?/<S~xzM聕ьN)f6<ҙڈdfz]Zh~`K w^`&6JWz@}WlEVZVdƃ^=]h-}1vc /d> wt#\%;9ˆs92j$OϑtDoeLڃ@lkhtS,O*fz u43gs&j`h掙8\-l1aZ̬ M&sulk$P@$4Zª㖀V=cҹЈ8-'mcڰDdM1RlkX38; o5NcW }¶(dKc_,3E$S\m4YFX A}ƞT?fʟi%Yf+f+zY%8E9|Meb#>Ĩqh,nb`x&+{8FeQGՂЫzu?U46{M|#qط߄Xc?y;-g_?k!|ッ_KҾ_oM75IVK7|'x?OA9r//bJOOiLFӴT*Ei3g3~w DIgu~/|ҙo9ɳw?s޿x~0=3Q)wY"$hu3*;GoQ4S62:Hچ9ХMl^5+˝SaM&h/K7GиنzhC`8V\KPsgt3f;3<Րpv7ɘ1Vl͝_l'XS[vȐtvs_.h"XͺgDZ4?FFتfq WS >;3X%$X P!QB3SO围oaSCX ASmnѬhڡ}gϋRn^A3DM*xoā^^FU]^6*+Ft#_Т879 q ǿج蕽kdc34SAeI73 gK:V?3v|K,0x{_>/}K0wbX / ,? __?/pmKgΜ׾O}C`'nr|o7<p9Gzi%o>wɳw=sx桿-8acZסq9|/7di9]-@+8*Es3װ_딃2)>پ3fI44AӱV d2A34GkSQmi:_>9CSelV.Lʪ'x H>}'8$TW{28c2pֻ)-$s9X@ٶ̛gՆpZg,d|~ 0ހa%[Z§|u]3Z* ]Z[g;ƙpqd+DAC+X dX _|E5 pJG8#`w㍴gh1`DCS^w>mr̜-32H p y.b:ՂMXnJgz&$.[@$Ltù9%T Mxݮ/:ռ9xɫ]PQR9]M^,a OG} ׅjjeA:h`+g乁tzn  ئ 2Ƞ.̎hFm6`Ed{ٶyS3{sجc#ޙ e/ +VXE3=޹% {4 hB+zѻWQ=zu%׷] ,Ů\ πv"za> = >ߏ˲nG>A=pt3-}Ta4wʒVXg,z^CB☎k~otHهni#bfCmg?fǰ 1:"&lY1G¯>zjHjfwah;{l"οrpi5/ydN;2`3:h/1dnnC f=fu.Snf~'jE3vav84{D5\Izrn&6j1(#=v 9)qSY\Ź虻fĭQ15~S낅ϬW/M6/;2dxgcp Lq) ZZ+p+š;Nk\ۮ Qg #;x 3ߖ-8fOڂ}4W8P:d+&K9{"4;\O!tB$ rM  iwM`h>EEEEEEEEEEEEEEO`}9tsج~y] wȊ=M & Qd]+H簶;_ t@-s!δĶ(#|Aus s:V=msȆt WpvwqpW[Oq$fN+gBṰeUfiSAV挥ʈUOJ֚Æ hw87[OCt8'&b΀*as n0M6,&pʜ5;bI|Ttv)ܔwv$L9p^NšNXax^^fuOqշORτVmO=v/$/VG;{Ƕ w`ip = +^B+9[\nҖ-3p] G? bR̤anz &a}`*ai^EEEEEEEEEEEEEś(]I灗9"gQuЯӢȾS~$Ż.\0 Ow3DH6Q#3hW:Q6"&B184ft\S,pbl9TFs}sqc*e5Fom3˝u@شzV^4nfF,:;Z<_O\POZteq |ښK;42c-3q f4+F部1,spNfL`аpJM"]lţ2p WmҜ\-QAK& hxZʜY kn'#bw^vdw=߈-X{= 56$2 h-孿緞a hx2]# .јt3i1EGCo?h>\bzؗUTTTTTTTTTTTTT։$go]ڬ#L4sex N "pz Dek]뢹خYg !mwD$Bvd6a=3N g&"Y8^NO(zv ;Afk5{}"3tʀqq'i%LE2>q2aR|+jm &bL阆G3&L0̤LRpd]>٭Dfp/,Ww&lHBm-ȖY36eG3R2ǰXtsBw ܈Y4H`&M 8ZmY D..i ƙ_xUʢV& zyQ)cQ4?b, bxZ&Vhr͕@4&Μr h|~o\K+^V8JBzSL+H7KOg?M(.ʖzB)x*<cD{d{`}[{')G@{:gQ@w3 oYDt݁3|=V j[ncۜTcˑ}fN"u! :l2gVhLN,H'sSfiVtM{ꙩ^ý5&^Brzaxdͅ|"L=`7g҅F8fn@]3/ywhR& V:,nD'6!'ʠ謱7SL`s K!ihH%ܱ% U5'q3vB,[pLeI6dB_rhl 7t\T{j׳ W ?Ս!&x[>V<a -㴵h!Y]+q >z[׹VQQQQQQQQQQQQQN6'#4+-Stu1bշj]:.cǜF9\Bi9M-A焳D ~WYqWm:flp|dYB*8sgrq̪Ytfόzgjp3c"`CZO=2 2~$q̡%dٻ.ʢQYJ+vs;bb NYOaZcEʼZYcVW d fs m_`/ػ`kVߞС1̯8&~Z hK)-ӷ1s6j| G4 h k ͐YۚҧmۀK4!u 9_vN=XZ8:.LһTPdrJN]$mG lM%Ƭ vc/=Nl!?acY:1vpq8)>kQħ+\N-> p,Bi`  F<$ ,`1QPhw-H}1ZJ Ը0Њ :P^XV4l!zg΢->lc lT- { +&z13GȄ$v#Mfj%o3\ѻ7¯2S%UTTTTTTTTTTTT.H6!oqJlF *P$b8al͑3ѥMoLv5:`_2}Y yM#{=ɐ`2˝cm>c!3V4GdG@{e8hzhޔCB"d:1}j5">v1Fy:ad MN3/ qt`HKNu9xUx&ޙCޙ],PgR2sD+ibo(xgr h˨Ia)s \-`Yt L[͐nS G:chI={#~%Faꙉf{g, >wXy0]xH:wpCȟV@WV@+rd}z`5fEĺp-sv&F2ӡ_^ .xlQߚ1@VS֗#M#s'~9DW5.4d 1v$ewt _gLamCFo+[v }t >fN  V\~8̚D&suI k#f:qKVp k/Cj-9 L.ϼ̙4D' x,cq2#-ͬ3Ηa<SfOhG~ǶD&?ǥ3AFY\%3A]cUXս2n26Y! AgC* {lH~mVZEEEEEEEEEEEEEeSzp5fEFċ9&[cHQҮk:#E6be K1mԳtƷ:[mbkv+;rC+8Kfu>854SD$;@+ibI,&ypjҲuNһf +YQsO(gnlL'su`/' 9Es87CDL! jU[!L@̪QfSf} tFRp5WCUt H3/g[ Dǝ/kD.}䲍pL@GfTVVQQQQQQQQQQQQK/HKTv+H)Z@3>&T朝cF;Dd 8}-}7E1EܒE݃x:SYTGu)-).{bt8+3?ݝigũ1 x;ū9XTx2WꓬKL1^$2E!,Fs- bdn$hW:hxo Auf0 L9h"nbt@\hfsW=iBu3Jq'2g V|0-p_︱wdn2͐~eSlGw+ʸĻH1;]#_4cwF:w(;8f`/`Zp\i#{t@M%}HtByH޹sB`ܭMDd_|ͱ՘&QjS鉰ykv7g8 荠M]T0 XԌٷ^3&k[GC13' kӅ>ɤՈXggp,"Kޙ3b^>D́yn]3*V-ea r@:)gzHfgM9\8,Q3 LYlyx2yxZ#ÌEl1wzX1|Y].F4]$L^V׌4IdA{v"͊M۸hV4h _l  [p‘ \?ͲBL@OP hK0'_O=tKG3A&_ +8h7;3Ⱦ3O1eǬ].}Hgb: OoWf7t(;l,B>s>E:sP[3w6zLOvW25+)DM^P:{{:f@2 6p,i,7D͚X̎,ƶƖyXB3YKXa.o*6Wp8) #f ;{`/1[ӊFeI+A 2bx=8N ;3P:35@"AJ&$ZA{"I4BGh?_5%UTTTTTTTTTTTT.O3@@VŽ9c cfÝd6h "N|qtkӄ4fz[51b0[x&1f"f+3I49lk5HP}yrk(T(;7`+V3}0XVY|Y ?tC m;lͦ:>S$M\-̦Xfz2zv5}vhzK.)`.9\(gpArzϬ{f @1:xp3S54"cai^@ ){&|/o/Qyf W=*5炠݅mBݣ%#cz;H"#yg;3DyH~y=zl37a G,a}ǘGs|,;2qXh`S& W@ǰ;A¬]];ň;m4;Dt t~▬7K=n5DSa5fx\H`4 M{@e!fqB,O4m2ճyd1]vճٻW3MXcڧ4{=cN'S>#,VSҎqxmZ^} @>$܆6z>pmgyUTTTTTTTTTTTTT~ӡg3W@Se4] P :DvNȨn"{MSm'j 6e֦f Xn.bQ3<cK .MErd؄ӶD0,tLu63j6jqGdIZ3mkW榁U@Y d?uisIJҙC}*ysԓ9N:8f9mfs4i>&[g|=V`%y{lB 噮bsg6{ bKz:[@3% lcKFuŨf}5Dw iL2Z+/eOK \+K0LP ɭʜ[-|yo^/id_ -H5žÁMtA~J@\ټ C2%f6V: aC Lwe x Y˘/X܆>գMi?@@0\&نS4h -aV),>/B|9:~Q2gEƀD>pㅡVdČ: h@=ѬVQc:5+ Fe!E)5Oжv0Ja+ͩQlm7[F:cDjnC΅27H;$udُm ؓEF ?La^&˵â(r |\ub5+_[VQQQQQQQQQQQQK/?+O#-8Y߄7G<7Ք9h>L1Cx:j&\3\j2wl5!7DX ]d4^5Oiػ9!mW;jk[כA;bdzs:ӷc[R/Ftiқ`cB2ŘJ$lYXcn"e8ce,KjS Ĝ/F»P+;%Y%lW.gX43GϢs;iVNͅ=laV 8=.vsMN&]x ꠮c3wޘt1]'7I@ G}a #8:)ۆ/sćॾE|68\#Y(s=fyUY)r$P@?t+9,-e& _ VHwstgz#|+` -' 邋ݍLXL$yat3S\;۽ۅ6PGrsIXÚ.24}Jªeˍix8C(.z+x=1x>&ڔ-bM' {OTw6}{(yg{rK [gfsHǍT`ό ?C3St(f?.8#%̑48tq(-Ѭ,m?>rIAScׅT5]q,Hd,gG/Do{;K#uqoje?}4\"P@o*A4x8x0ܜq#JG9栃)fB|H~v<XlU^%UTTTTTTTTTTTT._}۞xc>}y`}$cfC tggFHN5cܚ1][6D7a͗αEm e'{2(i&PZ{`@0H=H2ctS!lm5oh0Ch<95st@2:5INjXr`?kx +d<|"6*i- AKꙈz 88  EH@}vM1+[Z4;mm6`IXВq hBPd1 Byh?`VY aTl؍eA.EA4߿t,37ԯُO%@ُwK<ʸ=T9Cp:Zp0d|aOIna(ϑWtagA;_޽fyO (r)~=~7?X@&!,MJ\\Q$/PYưǘnm:b6a4ؕ \;0A8kly!f֨j\},:a5cY^Lۜ ޅ/@XLdKs; s왨a@?Wk0;E?*rp NA[ZMXhXj8Gl_f6fB&|{w УOE-MG eI"VNE35">,lg.-kЌ%,e_BNh{eNga>>d>䚩2A0I%0.4[Sͷry٨sͫfeAdrqp:z8]ksLe?!NBСc#T| !2nK!Mn#sؾBg^ -"8s$"6puѻ7Wٛ*r $GaЃQs.b4:s -6UF(wznmGoMh@ϑ[am'37rk\#^aւ#BUX[DD>t7Jzglܘ{7S~jq#Tl$r~waXn&U͔:O`o*Æ ᘮ \y;?x ,8ُ֨ELU2mԳ,2\/aJd1BgG4[`шd&=>*AdlB3+*6%q$ +ZqNqml ~3"Ae{4:rnDlUW#/;Q>`^q(3oo _n2yΜ (_WG\LJO$m[6(#'yggH0cY3|qtVQQQQQQQQQQQQaG@b|T%b|S|$R}6X&M& +ˑ\=c4\#o53)*fJg*'s0k84_njd n) hRT7}M]t!>ft"El-gEDf~K<*i[O@x]z{nǏ _v&-;ZƥCU:{?1׈:-p^8S&A7iQ̀VF\M9,4`p%5BnSpf"\ .4B5bgw'`6 G;sZ 3)6l8@{|H-bvsBH~LY J@\Bi#{ q"/GklC`Z-7 c֥M 5`Rϡ4@c9b,UL3 k.~&XM1,c{nXYOX|ytA 5`̾i% ıms2_sL:4p;t+Mue=y5{cTF-aNǍ,&[S<kqFuP r.Tl{gTX-րQ\lW:'M'r3B#n$rV.3CQ̒kNXkp1\1MblERY3%zY8f`@8oŸcı8X#/sy5X.{Ǭ `^ ,s١>WWQ.W]xf &_6*˅=A-rYz7s 5(jO+ #G#ǀQ8t<؟߄\/쳪K-w({{'̹{{v-8^5H@8hLef7fJQ pnIVӓRpp>djG$e:&mzZtS`ApY,5Kfm=r5,pfcyi쿁S1c26`cljFdH;GjDzؘ | C:gʢwx N \e :$ؔ}0bD27mT2f2׀{33;6>39EX7Mτ90ό6Pϔƙ7l|1;f8ytl1oYZV+ /F]^9h2^uEse-WNZޛɾ=}=S"$I@Sc%jeϢ;({) "}6UGm7-LҼ;o@bn+z  ۗߗ]VQQQQQQQQQQQQ$R@?|{9wsg_sm48n93e A"/*y&LU1Q;5pӞY8²;';SGrDw%Oƹ[ck#XİZV푕1C0Z 'V+u=6-Aw ŶtBaCzqlO-#̙grxkY x ygt-4xG|ܘөl~&Mжzޙlh7 \`T{)53Elܡ9e")zyZZla,/[^ ?k%i,8cG=۸٧yP&PlO=-W_8hn hm CΜбq?TFs>}\))~{wf_%[VQQQQQQQQQQQQ^@?ug߿&aŵmzՖ9hamb  d<75n6zW+ap6f#V3m1dLHpacȊ~$ea ڸFتGnm2iGr7tOz"$s vLYƺix`6)7~hit-naBY4fs# q甅1 yT&k\=[hn{ˉwG$zF:,ك+=Pf2\Ѐ",cS+hfW^l1p3 eЮ_ѽ N([Kd \e)߻JyseA:s*Вk^M6D9O~-<Ɇ+}a9d* hI4B9^6뱯 w~ եJ@\ _$>s='|1DݑՖKg>!M؆1ʟY@,G<,h1f) `^1gj,"Nbg$ cV/ð}x3G*[gF9b8fLW77i5b:V^2dXt-fagY/Vʣkr3a)h>|=G3dt5pgFҜI3a vJ aeq3nP+g3daeރmFe1[^շc^ӊ^u hѬG\"Kmet -f ]3gR4& *zg1Vn e>/Bǝt-lH^peR>‘.RT1dry~TG3,gB s<76?G}Eե*************Dw}I@멯o7#MZُ|Kb4 wEb&mouހA2?G3|(;M+* `$iQDKc cx,sKzgl+FOzw̘&N暒z<)㗦O㖀V=OF)嘉BSo ,Ky6 zWFl!s50sQKykj0hs^2"60Ō%qcoW[.oe/.|շ̚l62$/w ؖX][z& Jў\G:keI%BB w,/`-_p頟)s)6 {ݐvrgDZ. 2tb2>Ϋ/wəo};:ws=𭧾}?| ,xmt3,{ts紥Тd2Ѥz4N^?2Z0lb9 x3w\BuN8a5Ⱦ"pf2JY͘ 6R<>3v'^5h6aE//UlєhZsP@n>M;zcj%\_ hЮ8.> h2 RD,/j^7u3 :h:6{Wܶ\^I4!eH9 sJ>^yq~"N7NGZ"EBiٺ_(KG%UTTTTTTTTTTTT.^?IɳpI?ac.s$+]9c~J6up״>Vra9^hpiq cwϹQ"P@GMϘ bԻFX㈅y( D>WqOk`}4 ،^^1ʋJײݜ] zF/\ @2ցccLfu K“a1]-%b_@s,r,:XFiзRܓ]6+L%, hrBpL8'[KuP h>>f>|qtQ@lZD"ygɄt{+{@Pi@q`~6!TZEEEEEEEEEEEE?v;8sSoyEt8[O J D"z3ch8z:2]4|fS9F#T*vE3km9\;KnG41'|ܞ\=d"zDzi3d5\"$Ѧctz7ng2YlkH@gagX_z0XlV-7Tٓ7Ĕ57Sh "ΈvlaU8-SBs=U}4?/NYؔC+e ׵2HBsD,îF쁸8)p +l`W٠ `^#bfXܦ3.>5h8[:dVBl.[k\G3=ݎBN'Yˁxı8O0Y<طԿ pm2Pq9X8c:x`NU! ŢPx ЁtuS>ˑqeޑ}'HޙSmAecapq6tcę9w7?|&t1tܜ ej1WStBt9hS,;W .m}?H$d{Tz܈p䶴<#g.ETa!}:iaۊ8]8ƍ HV@lhj .# fޙ[k|]$Ǝ +jF@+cBTƙ -%X#6p qYڷ`s w#yg%SYYB9͡Pn$3 e/ pdHP; ;SYA^8`YFʂ -X_@|qkRv>JfxKxXqJg4ΓJCp<\:P_(,@]7bFSBBϼp |A2 aΉ NToO%o;n5q쳃92>­5q0(qe^TD*4L(|o'hՓv qA@SFƲ]]83m`:B[p^0&G|!-p"PD,Yt -f Y+ h/K/q \1w"U(9Ľa4ȨL ke,Vޏ[!N Β/~9.zW ~e  ,/tG?tmJ@\ G~هx쑻?sSӏ|G`A;QH%l0K>+~tO%oO_i! McV=s :5fj&Ct7Ib :2. ᢹ]NjaMĘ*VsL99j sF/}F Lw7J>klwP&Pg/q$qva[_SOg\RfZO#N$-9TTPOաt:rn]}Ç% h [辱309Goxq8V#L@,(D?|JEEEEEEEEEEEEE=~}ӽ#zϝGy̽=OL@s1sVƧׅZpL~v=9$ YrHB5t'xs 8pءX13ǚͥ95Yt3\@s.T,A9cY^M{d hrsSn/ǜI[52- Zqe ^$E\LW[gxY^B&vmF$ҩn*HJ#g {3ف7t&\j[g`rwF`:|: Z5V{Gø: }C$8|w$A}#GaWQ1v8 cAbFׯ/6c'=t9d;f *************H߂EЧ<ݏ'N?Cj<7/s>03"bӌsaɀWF˚؏ /.>>,!\6]LT,[vXMϣ%$&}& GZ4HC0Oq{n0 , RL0]78kjفm/;-abwh4/F 蚥S"_]-b^§`]>A&]3'iE(Xn"Y+Wq<;b@AsݱF7VC@~`q?0zb`H?+@F7Kة@tǹG9}O> #3@ޙӺ1^xT3 yHy^b3"7HHҏa<l?ޗ99X1k< vy6j?ԯ19hA@M$쇖9}6fcC.|:LdfuQ:{}>i^^n3MQܝ׍ҼVDGhn䫫=RKp=^L+Kvo .aȡ0_~/\uͧ }+V@s!>܆ hQ=>l3vG3Zߨ;94v=D+A ; KC[VQQQQQQQQQQQQTR@?rL@{|> |ژTƃUì1fz>a`G0F3$TXwkE e B: :_8iV7wN^)*vNG60k`>N) 2ťt~!nQ*6LXدYt"\.[IMXoKg&3A%{3&K$E`Awq#×,VI%ы^JlhV^l]qLHK٨,pLt>* P=>47zD9%)R z=Ngg?\:Kf@i`b# /g:{ zG ofev[a89X?t\=pWuJ`:CÜCÃ.w` chLUXl &%eLšJgx]Nҏx\F?I6|wb hoaupKWc ծ؇o]mBr)DП'˧n;ss:+B HRx]AnÐe)"z#A"73RܜLG /K}.n&o2TIYbš^KQis`W}olq.kL{gTkpM:x]YipXTOj\ VxsQXfǯ|kqӏ=乇a"=m=\F3bʄzv D #T:]H[j`$EPf:]GYMtG?>l48$sH\#bV=U3I-̥rؿ"SfS|:C&Qo'>3|ƫ9s‚|-.fUl4djh) b[ YB/iU]4:hEL iUd] _>zq,}Vr?f>w:uDn@F%r.83|)@YcƏ`y2AO=0ra%g@Ge܊# 3]s Gk?6Y=G,7EN*r G_MG;=rGy40zW*Ǯ85v!\7t`p0jH O 7LHCH /@ H9n hf"75RB̨^ZƢV\MރH~>aI ?3U@qymwF% s=o=GRpZ1R 2SͲg191VhVpBǎF ׋EhĪI@vp*Jgn.E<Sn*rޙʜG/?2=U:|h`VȡaC}vX]yŽi@G|a>iXJg2 Gm=Fp)yEC'QKH+moJ@\ROwǗ-gG~{x‚R@ǝ(Ck/('7E#=Fvp(PZ=B\Sŕf3T~>cǍzܘd'QYta)'8z\g'ُې-g0Zf*gh|Ja`@n{ 5XfV*_Fe;묊/ cwI+4MԌM0X岽@tʁ~*<&W2f\,R"f@̈́9.k\YzG=|z8ޑRep_` #coCcXhXLo!nab`좉9葱gaZR6Om?%d&76Y=򺰻o[pߢ%`}[ΝGz̽OO~`N@\<-=>M#/t̘hT~9]XhXL rYͭr'$XΌ=5S?߿\ v3trxP@}3fd̑,s+}v4 e^BW|wIcp,](*ft́lP@iwpcw-W1aF4@} }+ FϮSX4. 2XytH~"P@k<^So{ߍޑʃ+CF)gn9;m+Q?pQ U#ێ⤈9\@ZϮ~rAМ ЧF%~#0ͧ. h栏9ڇ䵷ݡʥ[{'?؃~o>,`zpo\d5>U% eXH8! !}:d9jAk2az='fBV6mMx[2Vf \ e{wt6`Prו>v}x2<4k\̪ǨFI 5z=KВY\gФf M.4o>ӊ P%~Z0fԐ S,<̛Lv8W]2Fed{Tt뱜c6ˋZoؿjU +~F;;yܷV# @ TV[P}@nJg&=Fawh/<;7t`;o?:7#}W828zpd;lI #o\E?>:~bdض#LJG lfۉ!8'6\"M].O #n 楕Daz&$̑qǎ 08zbprh=*************@^|Q@t?{3x;=ۧ7&3-McV>\iҏ9c;N7˜%,bW={95?i%7GzhСuqWEEEEEEEEEEEEE9/?!}'cw=ؽx>_>h%^A<9n7$ݳO=#W-[{B\VbVkHMj,ie/pLe zf耷9P(~gw7ԅ>F+|Myp@1.5@Rτ_@sS=r Ʃt&zgz*X&k ~#|h}Cx? 3G%8Kxihn9cێ"-yz&ǎS306~r|m;nf欏89Sv pBy㸂XddG2GZ) Gc؋cxo$%GoϜ>~\kCԘ D%-qAUρ ui ϝIgQR힃),ˋIsr\JZ |"_@lq^N@SEKU7HB=9_eq'p̼3/g8%8JYA#=@z4t&Pࢹ e5~y]H@vl;2qH꙰ i^2d;hNʌqGapAaftmn?1j݂@lL@Sq4p7D̀9 xh Ɂ$ActpJ hK"_¿?9GzO'zaQ@"#YQ@ʸ8nyH爴|+h2\jhylk%]‚HH-3G4@Ў}n'Dw;p{eý3wʀ T aP8Jޙk%,#dI+>Egww)@ޡ`&9an m 186G4'ƶ dhSϼ}7;׻ ێzl۩1<gtǩ/l fqeHyC\@GVQQQQQQQQQQQQ" ?|7ۗ-z{gS ^Zill_[H=Gss@GX\q l_(|+$ Ьͦ Ilf sl&?k,Zc/ > &a gxt"9SB9 (+K hy.1@&XХGƮ8>KP2(f >w!I.s,"~m{FLc6wf#n?eێL:oG=z| lgAowWw ?w[v#GsXw7P;z54fylǍ0S~$GC??vop#"靷ݩʏ^z酗K/"3/mN#w?q^'zu[-ygˍ%$/.Q=9p=d/vsn>ix6x%ql:SV3XZn)[q8%L(pGg%$Ln}F-V:K#cR @R*K@LqqhL^\v V-hҙS[t7udqï,^gЂeh$ak}kCI:;828n?20k!{gN}޴ h,{h~ٍ !>o?5:~+>>v\q}GcrzSWã/!NlT@wo~H}0MyUTTTTTTTTTTTTT~/^z^f?_'gNq8s}z7x0=?[ Mv:sZEs|92pD_rM³I vĽ oLXs"57q7 V=RMJ9qd~Ta*SL4X k} [l ;hi]$9JdTQ-fJgD/Ef"_]˅^Ra@|jS[)14X%kxZZup/w k $9 :TGt>e8B \1BaaroahA4c0#nFRh=xxu1Aیph[U2v8ʌmyX0:e/;E+xGm?44-_ÞpILsZ ?e3CcGF-bnW*************D^B>{=wɣ~Ở|Թ{: P@Ǭhn(yIoZӍ\@dك5Nmk͓Afa$Z t0'K|tq~c *g&t6ʋ)kHCy?2Y@Vf٣9мYk%.V)KJX?g.]ܷb#\@V [%,s I=(\L4 fAC#-`Jgn],@#=;8'%LH3 qpظ+;EΜVkyNk m s @󮀖3!c(Eee7m?9nV98vtpXZ hK$L@?xL@aG~ѻ<{7z٧ hI@s -TC/r]^L4xMM4A25 $+pHp-%ܞefE,pY܆Ϧ m]f gmȲ|=itEiշt۹ӷ??8C>T˟ Dn_gNYD+-BW%| SfY[c b M&-|3e5qѿ;e3n*ȷ$ 5-e}6S3\ݨx(;ЁZsY kdV@Jq3}bta`>cW.G"f smye=1:t$,J4A砷d*Yye~:cmm4 t._v &;h?.`L"~$̑27n]a] hK<~y3;'ͧvt h2A.qR*̽=:; JH6 h&.3wx*YT2 RlyxbS/-Xjds|e}7 G˝ N(ؿ"QXcw =fW/L g| /Kp, 6Oy(qx##1{U^^ t/K64~:h[\kF_~#]kd\~L;.&/:W|0y30~G]789<~ѡN%UTTTTTTTTTTTT.woy;>{x汯G}Ѕ}R̚D3s'PR;f-'(W G_H Fr-pzí6$!1U8!vli84/+FngNHT%m-fп-+FyI,g^ʭ=_zk1ȶcGn8]]J@\ A-lB/|o{Ϝ<}o>3O8-8#x~ M$rԪB4˝@ޙ7 j}%(;zqlB@}n#lqѨ啴Sr&?se8Y.nnVLd)JMV`VX/yg(/h]{dxUB"P.Ie@ʃk@f:Ve8$GrhD2h}G`3gU@8z[Nm#}`cE,g@̇^lsˏ|Îc۶Gc"Zk[N΄Ro-SdQk A jVkz33Cٝk3kfgqVxxD&j;^)Ѥ䝉Dsshi1ydVlOzL^@eɎFs2Gv vH{lZvjmުkިi3P@WQZEEEEEEEEEEEEI,?|w/?p篿⯿o6"OC]TOCH϶XFadʰdg:k7g(fBӜdͱtSg= y_ChѓOg}6<\s-\#'Lę}暹~9tgN.8UUtHY:0P9gωhYG|gY 9nqNăpFVY,HnkCq]#gd'D,+xg/g@Ȅz>H-|y_h)_.XnTP+@q5-dcOjiZP0ʫYPyUe.3qf P+C..Tz63bN/gA˒wnj i&FCf[xM0hv&G_ihrn86[2MF;$̑^HS[tS48XieAYהmLTj5uz5CEEEEEEEEEEEEIw#8~7|�n?|C4vJ# _;s,+ /?Oe>TpP"3O{:<hLy&go\.YsY:?Y@?~*3y?}0Nd>wadeC@Ad,!g&t.,\8[YD"eE_TP-ew+E=>U3@+$@gC79rx_^ pU- evtH;Ӵ9dyq@$]4tcs4ҌHSMHN+ ;ssa(M@7;vD,9Mpb,6B'%7o7'L@GTZEEEEEEEEEEEEIк~fwo7~W_`)A&$//'a'vLK~#r<L&oP=@Hgr6\}g_ѓES~(gu@Cq+fFp< ,;h[j.#ge%l\A[l+)#僀5ʖ%lEvf$,a+KZ$tt(TՅ#UКhgasu]!V*I@M6+f 8o„du% Kht+%2- b ,#DM,̘岁m_AԈsWǿ"\|7 -x]cYSVQQQQQQQQQQQQybЯ>t>ݗw6dпCes|C: GꙐ5't}ٌ(9Og6oFpZjql EzB23u%H[WlغfGDL2_#39tkdb@Y3YA+抙25aϲ!,rhq$oф5-^HVr9!Z%>5[2}UEUye W$L,K/CͶ}N/Ez6f^P kt+#^+dX\ 2tV>ˆ4g5[3Gˑ"L4DƖt9 Mh3a'L8]IJ6 I@-dmE m:_#ǵkN(]kϊ \O#[蚭" hʓOo{l x*o鷹2"jY)ߤ{Y;_o9ydc3LB:T`} kzjs,̮:ٙzf=585D䟗8Z:`8 OZG`3Ά>wl-+Z.X)X+Zʆmƹ³YEg-"8A+"eFb~BԼ\P| %%+_"ˍ~gx PTW X)X+X=H㳤m)0S8KFlp\MI=sXzu,ӽ+!h-ɀN1I4bn6ɺX}c!^:|tB h'0?/޾yk_}q{wΟ`P!Faؐ˨-OI=}>kꙐ"3pE\yjLDť3YLg3%M:G2F9%ˌg qnY6EҪ52Eƙ{gnnW -utYڴ U=gFD>jr:$,mh~Xb qͶʶt`{q }&E)F,ߒq{6qo[. h$q3<;k-$#㶱ۀErͶVctSPZEEEEEEEEEEEEI? /\?sڗwo~sw_~.űA0_#sSyy 4p|@4+ùV mk0[;U>p:eC:s /e,k c%糊fX9Zp6,ktrt,b\7sΖV5R@Em 242HvYt_6g/f/KH~mij$9V> Vk3 ef3-L1N|E)_m$=8vkZ\yT6q=34&E IUkH^؂h7LZmdt98!Jj6`ٱ49Q@;ufQ:tl5ZEEEEEEEEEEEE 矟>xkWn_߻탻?|#8Ð~}x*$yi(: [d:sd!|~$9G l9*zr8\Vbv26 h 8V[[S ,gig9ZtX h[2!eSU[t9Y;kS-*YbN,G9(DW'Ce+)ΘD .:]qC evh{w5/$u&2 ~#b-3wp$M3[MN`ək74'buMJ@ق\PW|OD-z}I7zgW̢Ykb^Ӂu:Uê9T]4h0 EN155BL3 aAtˬڡghmvFlf;ؑԑ5ܞ$@M|VtR F<^mᮙfq%ݢ.gQ(sǎt"r1;fF3UolI64C'nQ#8TTTTTTTTTTTTTyggw7_{ڃ|_+%Hي1mzF?OHV[[Q=,!6Ꙑ-H9+ǘ>Vts0X̌s٬s9EK9%Mf64rJg]HnR^2Ϡ:`gfzN@cOt"aQI.h|&̡Q.̴BY=jmfgu2B͒ճ,y(EX3k 50dEӹّhvIKيd9ͮ!-.Y="cg6{)o(=);I@m Ϧny[n{;VmwwI+=.?jqn8RMMd#\GM*D?֛o~?;rg$VZBF-t/=U h8.64 z&$k|`Q r˖Ρq~Ŝ\v"y%wg@ 4M G.s\R*`碊BzI*ibIƙ#f/Uk6ش?knu4m(ޙch>[t}sNgq7ͮ8Wɀ$92|I,AH8Mڶ|mpZڃYІzG@:z m?b_ˌVV: ,F@{nnݵlhݓ@V&ܞ=~{v-shn4%cMM!%UTTTTTTTTTTTTHzssW_{>|U|} $O-}O:ϊy'g^qN4چ;F g 362f) oyqpHY8ZrpټsYE8g(tƙ8\xxNs45>+\cWk@N{S]l~'lh/YX4';k:i|||a_3?T)ft-ex !jvޠ+W % ڦhU}j\VRV7;W(*aQh0l4"GbEm6h0:jM7Q]9ڐapmco!lpmhkqΆXaQP0s6٘fQ4sfؠ`Wn"] njۺAޔӓ 'u;q7Ɉw{Hq7ޱսޱme1bh8[qZ'5ⵇg E1?LCoxwlh5q,9h+^3|%kN۽l\.W%hIhS h') o_]wo~ս 6. `.vU,pED H(5H753 ,-]A\oz:x%VqL:()\T^/ l\ih} '3w1 hL7[I7j9̍3fl;5`3a}ͬ͹)Jt nCEŬw1[Wfga@v,gy WҾPۥ3 ]ӋYn f=qexf\nѾV !YgVYBȏYNkNkshmݳPH#m 4G@ʞVZEEEEEEEEEEEEo|矟{oqW?k߻{]˳T4#,w?D|u_x:{&мcZB_Śrf>)Z>\Mtgs)!, EKG2>/3p,Uxh ω6HwF, ms$Z̀3 tlumjkxbje]f|ɢjВnԳrV@WՇj5 AQ:d΀MZPϜ0Am@㼟}nt:b@>[w4﫞834gbzv8Nly6&`1ٛ 3Zfסh`jJuV&Xl|(|[_N/ Іy|6x-93B3}ٺn! z{pws:R-$gn/c8C7Ѭz7_|t(oI:t2u7?9z&9xdm$̑~gr޲{>AK~cِasCEQ\iMɳUVƉBe"D4Rx6|.kmfy 6r&JWk&r4ʖr$\jqr9ݣR6mÖ?6PnjyZ3QWۨgA5/3tszDA;zT눋q6S5q6@,fGnl4!f `+XkpF 7Hp8"-8D;81+#.wL2$5-e/EI H(^*ZۗtC!lOM,Rx_ B^@ƾf8|[V|iut: VߎEO3AAoYѽY ފx[/xZ/Zucu 13@fJ@<믽r>Ϯ޿9Dz:tmxgIr$/#8[}fZsiW- hrЀ9HYRAs͖¥gY׶^lpmZs f>02Ex +rWJJW%L䕚Ĵm49-zfҙ_/OĂVEZD!l,3AҙCu_V出6P^^YwxS-DeZl52_6#) HY5f`}NyF,Yg&#-ΘMXni6D41!72C&,h5bE,:jwd#_Ћ^iFf(i+&ܚlm hтәnx<%ќwaJoͷÐPrZ}{6 h-E 6皶izgIߪ˙p[Z"rf(dDt+/\>}Ͽyp;Sy4 BY"Ҷ /t+9h nmy~g.+H#E+ -;[PZ^)(_'op̽ t.^h)]-]-])I-]Hx[0 +tJQBV@>]FuW+jGAԳ!e .!3Qkc]f΂n戺؂͍f:pNXnqD[5#Lpќ'bgm 2@ n}m|s{fѱ#f |Ex3Am\٢bf:lr&w|{χيY:rjQDw<-N.Wҩ ;jʓI@ommK\ʝ_K]@~*wɖba<{~g Y> A[Z! gWϿ>0f)\:Z@61, hM4bI%srtŲw6gB!3ygN!(t52v@s@y9UÆ2\VRQVUK?C:n0w:8ٹ 3⠃gBRqr9W\2^f[V5PC?7t;:ߚ|㍺QwMN뢸"`4BMg3> u;mmm'~ wX lޣu;.64-xNەrQܙ;wVQQQQQQQQQQQQyR?˯|W.ٵ؀6L*S.Um|EOg/?:-2Тsf>&lg`)hpf?dM 襬Agj.])[-]3Ǣ ;+x -R$RZXi/J+"4 fTPS/ZYY^:W0szU݁E:5z?PgP҂}5l9ZMZˀpF.mȆb Q4BjgFa9 2x;c/|m _[␍Dk;`tL1m1P`־ 7E }xk>e?Y@Zik V;tlb=>u`8h&({gyoo߸r'W\ϯ߾q_q-v@;`ك ȑ9[H([cMq gE}3Bx:mDt;?\s3g?')fX.X9}6ohU;Uz4}?T3m!|Vy6lusѶUfAF CQ$g6y9t ά Cqlz.C ʖ 6Sd˜"]+[u"U%pE%+eU)ǝ+j`vjE4]3l67;W׭k  S5:$ ZB-a(jmC3F9뮙Z[M͎}ScNWFpt+#.w;]1#t\a',z< 7r ;vǽ&$xIӊj{wזr{m)//6 ,u%ݺ![Dbuc[Rτc V6;m[|?ӆV$/|=MZhkmO7[3G guoqsrU3UTTTTTTTTTTTTݷ^]gܻ}Ͽw`,|m8̲-E2ge~\3hpr$%>w<ܡp=ZUb: `?|@NIXjVBl~6BXԳơ `&¥r~eKgE\_KӇ E(KsJ֎hà3s W ϗkbN,El3zuʗGb|~!v:s$lrr_^4PY%$Lhƞ5k-ޙNga>g>Y~QТ}N7Rhj 5;kNw~኶unwA{-vg[׬yg(x` 8#aTΘs$*iY\?]nx<);$ܮ5lw"VON9vZDږmm]۰kk$l3V{;jNG{&I+y_:ґF@wBGŃ#9vXЧV=o뎷uN=I֡ɛQZEEEEEEEEEEEEO^'?ɕ/nݸo|헏ε `H~y_$̑:9edh3ڙx6>PNxh:zHbv¥լ"s{p:ۋs9D,f l§u0BvXCQ!t51r sscSPs؊.;;Ύ}W- ]$yXO/ܱt(b^o;DrVQQQQQQQQQQQQyN@+K|v򝛟W.tSx[E:yij(3l2CW4YT4W\+ XzKֲk-G798vi|]/P[\ ŠUGNGKyk%y%y~ͶYgBV+o$-f[\'L1W/Ub3ܖUh"yg̲9w6lh.ZtM{uq†3#pS3\f ka2.Oc7@s 9+k LYDwx ,Vv{ce]sQG2h0exTk:Z hΚ}35fygRϼZ|fhn ~6m}2GZkD&^Y\ۿtE7kx֘=rGpDۦ{[V'Cڒm>IHA BE:cڣo:;6Vg߅_ss29beVtq,wж޹skI=س!Nn!nom;^.VSZEEEEEEEEEEEEO:]+~pܼ|~6. ?S*G@ȏE%?tXI=km+>ZJXճ<#+GDd#?Z]UYEYE8*t(lNjv َŠ岺`6Ix>lXṂUI7K깠| .Ee+嫀$brls:-Igeu05>Cm>LuzM8 ' Ýkwpm5Ŝ2mv%d}̦p斈É>ǜ.gQπ`Q4}& [<8 +}mH;TW羚#zno&ygf &\K뀸ηpGf ڙDgg{vM[o#Xc@̜tO;;uw|8,Ysb&̾8] iavkkM&\˛{G_^6;oq.'/7|q6##m3 y˶H8czF\"#}>M͇E؆yPzY>Z ߁b- ^)X*Zq狫sY9+4|+h >W5tY;T}F]XL}9EE0 Q4s֤tZ2x`jYղӓh+Z[/^.^39Kpm ?T>/;8Be4isŁ7535[1gM@sLSL.}xkm yZPx[KkמG}Ȉz8ڜIޙ/JHBYnFG[ dP<}Y$#+]][PtltnuYs6bv|dGZm/ٖΎ=y4i1Ϗ >]_VoI.W8`J@XU=M "*fX@վaS!ٱձ)B.MМHblâs+=[#/Xx{r%_{ͮ-neQ+[vwEtutuZصݹuν·A]FDžV:qʳ1jM@֔ǛzpϟQ*************OTA[[[/ڻo[o};>rӏo߸~.)XB]6(9_Ό,ppYCf4ޅڙІ.6gԼW 45t.,g,單`Q_JYU+y@6Cυ 8KP+43cbz`YzECIg5#}g?6h Z6YD-Ϣ3/8 `QǙc1MfR&M4DpCKnbtsfhNE@k03t&Գ˚tu nnmvzmH{{=)ى3זhoKt6ݞLu،,+.gu 0Ŝݱ..샶b3#yg(\t|ӆ.xgCə@Hi4`f6s^rO V h'*\@onmwo}>tO޺ !ZqdPPK8l!}DszYn3Գ3XTB .g-8xbXѹ. sKa+[Zk|f|M͒s&mV: 嵁:G!\VNʪʫQ=hu-IgI7K}4W Y4" !Тwe"Y>Գ.#}錖Yj|u3Qqr[o3M[dB4 BкeDGcE,J%A' =pY hD- .Y1g}]PC׽Wǎ9t>fe y:"Q4z׶ږjmMZSwV fPX&LEY1Kl[q]TFޙc}ky1RYGpp\@EW>qkz5Jgkf;s -ggFڹlGl"u lF fb[{h!Jgw:F7 Yks&%|'ڴ6g5kAtt$ VCM6 z&z:7ڀV;Plv؁^=Zͭ/>ؽkC^o/ݽ4M3lEU" -r評纻Anmmm>&%UTTTTTTTTTTTTܐ~_7x߽|+~pOo]6<6_g%[Wg @ͲtˡSA ;s|g#EJ2 hBESN:qܲrhVykՊwl2B }=uҚPn8szХf,6ke̢z TU͙u:k48_6 z|FאHg52Ð-̀:83 f nÄmZ k6f͙)-e6Ӯ{dq eXHGaERP$::]]Nx~b#lYkyt:ͰZ #w.PtnBoN}}{HtviϲHw=={X3dpLh(gP#8TTTTTTTTTTTTT W^y靷|w>K}˷o` 袺ȳkR0@S˶H7PUV~E;s$̑2#g8 +Zfz{I@+^ί:~F3`{ҟS+uX/(&hfnz.;+bna_XNZ;sl3,(8X$Q4W,Ꙑ48sxk3lh fpP!&H=g p9nWL'F:G=(Yf/5Aek rftfett$:;.Ng`:i3 ׎xwW;:cPvotdp3Jj|+)f˨zR}&׽ Ӱm{wgx`[-/dgϖ^3=hEI-۳۳gEiG.pz{qEDmbt[L6$=*$&o _{1O;7鐼3{,_А9"}VR?oEY,̈/f@;lچ;s}ZsͅW>;[X!| &hй%%Š@P^\^X_\P 䗬TԆu ?2PR/*_/J?Yz&H:+jxete:P%h>k78sl3f&$ ƙ8s$>Y΢qkBͶ8QzvE].Q:kxqNЍ9FxE11Q ƙ׈Nn&#L&Lh w Q+۝k_Ojl.+QRvw8 hF_φ(%$Ll}`.]=[V`C t&,*Q̲wz:~ 4jknΝνT{F7 E_|Fp<;vt2|ŷ|w|7/}gWܹyޝP-b2,qd="U4_n6g@DV}ܳ;slsvI@z-Y,)EUWD <,g gh䕮V畮UҵҵBX/[+(Y2@AuIl1 h5[)3jҪJmFeLuZ&(g*nk@l#ELHҙ#Yf q c4>ӺxkpEqg}P@km@5fOkD"$8#>ڭf}XJzDgd'>#Nl]I>sXi33S/N=s ;lpeEPtVFհ9mjۃ ;s|@  A_ދV$/ޞ`ѹ޹ޱ޶kŃ+K)D?S"{_7x}|֍OBN@?]pszkojTFoOJ[aL.zw`|8z H~"ַ^ {11ػ3{awo{مH_Ξ] ;i`~NE --f/ )zzaOQ]kO.tuvowvm::޻c1o+䧟~ [_x޼|O?rg퀖򾘥鳿:Y<-7M~X$lhњ>3\JmƊ68!P9( WGlzNiPІ}FNgY*% Ay5@q*jQrqJ P+l:hA@6gQ@KޙCtq¾-#=8*zFܳ3Գ Y-$m#m0~k4*dF@DjϿKK߸v5(#8d/P-w5[\ـڤ5̯9x[[ҹt^y tL:53la;3PP&g\= ;K*W)3+"6JzfHي-gꙨ 6 uEZCs׵ilT׬FmԢ0!_k@{,0ygB25ml5;PkWhÉ%v9N4!Fh6g~ g'V4Xw8P'w 1#Hg`oE{vzwoi'`OE[,*$Wz3@O^Wnwv.}J@<9çpO@(~W^y_m|~s?t-Ҷ_J~X-XAf,>hԳ(sD3L@#X-EŜ][HK9/f }4!yg| \\ΰY;sI%zgmtsY_bi3TզԬUk !_voOy6Q WΡzv%,vG"$P4jj z[u/56ώ8a6O#5t_KgpC^o-ZA\3\3Ѫ1H3;$PR\. 5Jg#ۢIgtɚڙLSR|s:,:y1г!n4O<ؿM UY&Oޞy~l袭õjboz aQ9[A y۟qNw7 ۝ζd/ZZ2}ޏ쿼**************ql{w/o;un}{ÆHEgF:!22%,b鐍3A}&\o@=E .)\D1]S'0gfPH]PRPW>hp>e7@Aי'Fj mP 3 {Dt"[]ݩDw& ҙJ@<}w/K;oݽ͗BXTak}HsxsD9z&D }L@J݌Z̟Wr8lv}. lφڜ Y1Co|^)@LZk8 r=K9FsM&55ә:V{Ӝl \i>V5|t=NஙzEE4LX3pHss \-ؼʆiݞGnW4Y+tf@FH;DV=[[#N\֮vv&|a@!(h&u}&,ʼEcu̮&SAҶ&^"E@@oʠObmE^ MpP/jhboa=2hΰܥ#džLYk}{8$̑/@3pq\ \_no[ӳӳdg[dF@ͭ^{7_{][_?2 h& _+D%H<.\EQ@Xu:[]~ "Z|[9%Ke4 ڟ[sKӵ?YD"|碊*AnE>W^k6X] JIbͩ7pFZsKcIYHي$9gr]Ψv.W덹#@_vGC (Dk8#fޙvbhkk=ٙx}}[zCH+ffW;KYb-t{:ׅ~aceGfF8 onPJfR>z }|h{r#;;3gM-\|~܃$E錠؁gBߠA"ypB:n:0<?k82xqoggg {:S@;VQQQQQQQQQQQQyc?‘ v{o~۷o\o] s9wH~## -3ysdA@x-=4[/ ;{G_+Y-Y1ЅkylA@96HzYU'DTkT3):h%},kk,ۓjl Ԯ74E;aI7KX3`DrCNg"9vF\px\Q֛QC"gBVwX93`y:}x[LO0}i#,5X3; >4({~lv"Ib{f,3}^zlxg|dwt-Y> L7ُB# lfmcޯs{#)\ew?J@J+:z/ 3d@;_;˃}ƾ e+o Db/ۯ\?tӏn\y+?< P@G*|Hˡ%[-L;ZiӅXuw>Tr`hF$̵Q@"G j5a3>R-J璵,X,5w@uAe>SSS][ ׫RbQXJ_c@ׁ:`(k:bTBZ\RVf]:k~}}6Вt:[}&,gZ$׬YuuNuzMw6 ԯ5hEz}S&Ig3 ‡;C9 WfQ.;a#ZAu"lvFNĩNGX;CnW #vp;pmuGnx{EZZTZm\}vMмYALt5ށttƀN5[ճ6XC 2LgL4'NЧg@M6"dpL (GSda'm0_@F78|m0hʣCǭ5[c͐u" >zosh`gh`wxpwth{]h-5DVa݆aG##ygHD-.|~j&^8гߓLwmhU*************OPT" oGy޼rK_޾=}.}mxwHtDN`5!f[$ќc6dCPYuO:ճk^)]u⳦gr%+=%\\PBGUK*(4n暫Q+WՅ*,͢g@\@Wp3Pk4qms$ 7fI.k453ge:qB +@Szs%9AG 区 -rEܮyb>Ow;BP/mlX` يѼz~ga38c݁ޙ.A7K;n>29y-f .6yc?5Пt 1XD΄%M@yݱ!͌ jYbT7"&^FvƆ.>gfb1;F=C^/j >}fh/JնP3oVkc2zogog{ts#QZEEEEEEEEEEEE ??Snw^7>;7# `3l\ >a)ȑ䲈.5o,#|=ucs8x WN7~ Wx]Vwymވ5mbMҙXk+l6g'vI(k|FLb3^m(k ή8%Kgw:\Ͳ(9_NFf2e B)f[$ל}̾ZOXxqwlpCC8ʃFEK 1jfÔG .C!eSHO FwD_W#*************OJDxwzw+?t:KV$MMH ;e[4eܟK#@ %lT&CZ&`]E}nPثq;Ƭ;wiEGI=cC4/ >L >79GddȞQobfmϥk0fEѾ=澽݁ 6<nT}쿼************** Ly~zͻ}g?~π.)sKˑn=k,E$=\76( hms麶n>9\y9wV(א3@#nVtms_Q(br ueMK+V*qFEZyZEze6器YG\㯩 0 M54] A;Sϼ~Q4-4FIgnpeQ.{=T[[{g g:r &-zgi;|1|el 4&8Gg tuf_:veLg;,48[Y݉d׬-v"L@YRϒh̐k]3ͤfޡ,12g+ boÕ^VƇc$<7L mIH;M+݉ѝaЎ݉=+CcûcC{Tbt8 &%P^j 꿶h^#}{ۃ.#Z[=J@<;? ;µKo_O}_wa "g=˙,rբS.b+3en5,sӹpд2M|\@-Ě3 |zʌtQsie#͉*Xd#8t,gYu(L7Wbm}>XOת}u, gZhhύM!zΌd I:PKKۙq3Nf2^8p9w[=Q;J z]3@- ;zfoOt89227зuZ5l'iHD/ vwf^>yХw4f V2C{0܅;& (DP10f}%1<*4elafžҙScIh?\e|.\SvSh~ C:{Ho339MXW8?dsl 51ybw_!xkebHVChG zh{&dlˁ _uU#}CC Н /cI@?/}w!6FXH9_ޗY1_A:[l2pD-Z;ke($hçmH9%}p\7[,sh%d_G\P' kQd+6g栵4YS5A-WV泛Y^nl54GA밓o3yg샶g:]P0t3gNGQtwhYtZqф 쌇:kvn2t3\C ׈xݲz&|6OƉ#CϾ0Z/4hoqꈷ;ۣݝ [CWhMҙtf䝍gtͶpu3k5c,5̡n~e l&5:0ccMm23a-nC]si=S#;>2֟Z[|+tl9;q=GL ]L ďtalZ\wvة{}Pl %(ޮhCW_)D,zox|k㨍-fuyPT, 3Mް ?eUA8psiZEmG5ًg^[X4U_ڛ0>7FZg=M//[V&/ p =7>|Ɔ08>]==ܿ;<_z7z;}]_+dDO[y7>{_?}w6.i.a. S`(/gu_à,at7kf4v%hX걢cE~BRVƨ lFmmZnj^ba2WGE8ܙ{_RWrJV@y5\eUe(KaziЎ j \W*ʝW;7~> (~ }4 6h>8үa t7HޙÍ(x WϢ} Ґ͠Ng+i499kkGrm8h&Kt-}> -v TZm3 h};YL(cor>htВ&3_!]φwf?EЊp l z<t{tA(^c3([ׄ>̺i+ӳW8SN@3lΎhgg#zXOg3ӥMnhY hYo|ڜYId^X~90 @>+ŧFS蠠$/\O &"#)`bE\al<NNnΎoMj5`Zyޕau,N++En; SSdwjxDs ũatCafR l \@76}VQQQQQQQQQQQQyc'{kW޿[}|Ƶo|ս 6Z"|?n%81X*)cQ:H9n4W rӬgZa畭sJlp-gB X3 2lh>i3;lƦP# 44º, hQ=< Q=ٺ8jQ f̲tkg'F=Xgd}΄`v4[i}06/w%ۣm(=Αnf=ΈA 5pefknhRpԲz5,n6hԣ0 >E[5PNI)֤.F 67኷merD,Ĥ.h֮Ûs{CMo VSV=];k{DmL\01̌^05zqr9+P~z؆S=FVQQQQQQQQQQQQyB" zo|~߽Ƀ;܃ (KcGJ|0 Ҷ}Ez}_$?g> mXcE=k0l?"sz^yP sYB;E2^Q7UI=4 ygU=Zϕ5qP5֖ NmCۜ-MqF, hYrPfg WZ˜F@c_38ǙVдtත-KA]"_r|vN[Tn#L1cŸ́9|#!9h.fv{C)tŁh_w'0LIV$P_b`w3׌x_H m3@Y'9>!Sfݼu_\E=^D2,Ύmٱ-X9=Sϳ#h%_({LYtf&F.4sƆwG6G7o_S;87j~y'};~{ƟO!U!}2GƑ~#54yc% iFwF=,!eu˺>z9}$,QXk~r~JQ*PR,dK*ֈJ AxWVϥ5@5A;sݬ9c3Gτ%;k{9h\s94YaV3gw؉I#YτzC>_ŰmYT qhcgZd䚩 ,g5K=] 3s[ý v'`e;9G F_s:OΌ$0:>ԟ`@1aG,pg͙ \oj& yyGgHHǀnu XB@Z?%l@;ٱ-`Fw͸&p(ΟxOy8G.[x8I2むnTŇ^+>ٛޛ@vƇ6h 5ԛ_`7hVu@<O/߼ٕ/>z޿o}tE}H?n_hv#GVbr٥~@,cQ̄(YЂhq& +J+y:fJi:2)fz&Af nsM]fi6A5@}: 5jn gg"f 4a a s$u:s$fPJWWo;@NV4#6fEQ@kn!LeI4Ng@;:Ѕõ'>-@O;6w7z xbNVbd@2g@&RILSz?2&sh `+&fF7im1b|q 5̎ms'g.:"1;=;cخ" kim H#m 4zrxgbhό_M}agw**_|}{?ynˏ hEOEi۾p,[%Wh3z溹t,-Y $YD2"vQ@ҙ_/v>В,Ek`iU*`JggjI1[>Wׅ5̩ #I=Κ}F4,hf LHBl&tyagw1ygntY˳6RtwwǤ',g@_5E5X-lp3j宎9Ǻ;"x`g'8;wwGc@O7%Lޙqt:#,)f(12`IZ 9>D؏Ԑ(Hl3/62vXچ̎I{L/΍opr"\Ex:9? @17Ep,">/GlM\h ٙeOo%G#*************OFH@cſO/Ǘ޹}{??|uO?†f(p+!mu#md"XfGKW[,[3 8ίs-ygNAy&poUֆV*%PqEXVA:[EH@KꙐ4g..TS+ Z > h>33|# h>3m1ِaAqvkYڜ F@-L\~(;#_[!pO- H`($Jڬ9-*O#}澾xoO@O (nHol/n&1ahPi⁁V݌4l0tgI@g@˙1Ȍ ,6<2Ӣk,ImRϴ8?=Oydsal5>BC^s㻶#>M&拡XW&SiĈ(î%UTTTTTTTTTTTTwn^wo]']@΀f"5s/uVߧ8z tp5hH"V~ q2+Y A5˹89x$"f5d\Bg@A%lg:35,2P\ΡflPm0(RV!*k\A6a.P˩ihg 5oih c qGSsž]=tt3wԳY+kO 3Є 8h9EZx ,zC4L WBFkgkNaԆ x\Y׳Q=g}s;hXwF040E\צj0xp: 78[!;?=9SCS͎oY& ;8&lE3ȺPFG̴&uK[ J^>>W.aMMK𭉭 w1/JG+[,eL:3?p%0ysf?1uq~|wGoOqA/zvgf|w6;GqƇ>eTc[x>yw_\l@]ٔ. +[(LpY,#k ;s6QW?Vtfz5tܥ2x*…9%c)f ; rY*s;s2 hn@QEE]Xdh\A}.ű85A&(>}f5 5,깾!0ygD,A)r4HSжYw=svNlh& !L:q&LEg{fn hYVz6gA:v0${]Ѿ0WϒnX!PAav5[l(E H lCI'Z=Z91w,ka iKx37ANlL8|\7'K>=waajY2: cxj^1370Eb,0u|j6avLoMB >5{rzg~(ZiI # f߽/g4 h(&/D ^LO1cb01Ѿ9UQQQQQQQQQQQQQyc'/\ϯ|}^@AR:wuhjnkW +EkYE&,"ydBYڦ#eC1 Au3P̺}.3204yg ,tҠz&LY !;lhz66dg+55Ac7Za'شrkv[Tfh ;49tjp\.@A[^O6[p+agκq3AZsgF=L;[bHgBT ӡD'מ@o;IwF$̍XsЯ1c!3#+f;bILhYDϳhwᇿxUTTTTTTTTTTTTTX^y/o_+?|___nUdc;s,֘HYkŁW_~rcrsJV$Jbi?WoaK /yz4f\4tDq*X3LY@gH(hց&>G1:5WqTzSa\H:={zv4[v2ƙ!;w,̏ms P=?;?yE`u( 3f+&1Ig'&/$u+ X{?Wcv!,מ[_ݹ˿pO^טXtC<85.GiGڶ/Dv<[r(]+rJӴ? ^7Ptnq jN9F\O q hI1dŕbTH@sNYs~gw,9\[;, ~mچy;s L8pa-@#:6]Pۜ5rlzxk3hf5&eI7[33gZ!B:PwW"}1>pb+eY͒nnmi3f>Y24Y{WS#Yp=0݌pqz4p +('76r=K͍m,Ƃ &3 5| TKX4sscTD}_M=;wbbg6p0f`3W6=_7@191Y4:8K &q b^f {{"B?wnt{vdcz895D=VQQQQQQQQQQQQyCZ(߷޸xӷw_\??݆ :%_m_uֲK׎.=wp쒵ռ`VOz-gBCS[f*6gt.  8Kp T,gW8k:>әuWϒt> 1DmasNMpF\;‟pӀ>gM@K f}#3厶hoWw=t h>G:VӉlwN#}4s:Lޙ#8O džΜ|qjts'6җY[fF|?::_49tΤ ; I@\N#GSԬ7;h Q278:cj`3s),l,Ly' 9lrab\XOmH cŅ gvǓgvOlC1?FNLpS|5GsNOn6ʯ(5G,`s΂-&?e̎nN'@lb ~? /Q@sw>};}{o>%~;V@K8Ҷ}gbpђXVQ$xX28V_@ʶ1o30ofV@6 Šd%Вng@s\Q14WLHޙ# h>ׅҜ4j30g6:;#NW D m'f.9^φ&Lu/ݙ M+5w&hckEM깫# M@KY⨍9w։D8Q  DΞy)@WD>:돉tV[rb0eqҙ#g䠹GM4Lz< He nOl)GS1A7I+Kg&s -\X<ܩm/g>r >5NNaj& :[h|qr|c[ǶNo=9>?;dvp,qbr65=1wrISS{;'wLY9e82kL!#a 59 uJ@<){$>?~nf5=/G_XsZMWৠ]G-~g)#}P̴"-Q:H>Z`';etZtͅ([7X\NH WS/TK zg35A&PVTU?Vԇ*PO4UdkZPϡFәý3d[ nv"\saŤ@L+80( z0BmԆ$Y2f5fYBR1Fpڴ @1Xs+;gz3u=gA}щͩѭ0ڟ٪tH.3Hَ8A}(91I Y6Y@l8>gr1ی/΢z֜Dg-x8(Y AAZǎc̼ц듩Sdrąճ/9><1aT='I.3~M?T욚'-&r&/蜜ڒT5A[@9fSɸ2ej.bÉ[OA d MlPlz4C!`?鿱򪨨<ѽo8 ?ܿ/k7.К= 68tC~EG) #~S\e{ [ pl5[WΒ}.QڡU~ZFky&ŦU}%^# UG̺uA!dg gZ-ab_+rM:igx85X$ 6s-v@Kيh pg[D3:- ;sQXy/h'B#B>fgYC!uz9$uhFFb̎')A PhuMbPOJbFdԪ<0,:e+t5ҭpəDֹp4iS [}~ӂI=wVhJ? Yؗgm+~jf ؂?qK?Y h< 7s߻ハ'&l$Jvi|mTV)Sk3W̥D3g z&$LV`(-Q\i"gl%u]U"\mjYx{m5n;CuI >ޙ9`]É:`9 Py׳S.1m̠I7?T 65s&EbwfuowIELr hz&CPwdbhcv|=mu=qȤ5 pfEC?h^[Č='gwm95wڎS3 O?SSэt?_yUTTTTTTTTTTTTT ^ٻ?ǚl 9Ҷ_u"4\ÅѼj;kШ 9\.K0g.,RYcCGp-PUWi hCK9Zߨ ܀klU$%1goj8"tEQInuA@8`Hk̈́$9q戝V +Fpg>3}Q a {{C=!FzcwP>9.ale^HY A=nI9IaÝ7fPp Nh+Όdv1? 0۹L&OUV&M*3<9 LNl0:=qff'''PP7f;+ },l"cf mrzv'gO|c߹,e헠j5=s|gßMǕVQQQQQQQQQQQQyb/_޽+$_k:l@]ݔ- F`z&,WC"/ֱ 肊HQU,a9U!;sd\Y\D,R] T+zcF]C976E5jh -\Y-g8747u͙9xf:75ZA'J4٢Y|;TPpڱA3)g8TPX# >j# &z"dc VTVNgq`6UCD1җfOmLlM o˖YB X4\3 f3tL΢z 57{zg$ NgqrGܞa :EXXZ3fq;g_y~|czsjajy<^O{9a*~b:xrĉI]''BV/fqv3 F̬ g͟rvv6N.qnn63qF:ҶG)2I4Q{֩魓S'ztrf$ٿ*************yl/n߼҃o;~GSؐQ@!_9rNecAgº"g I=W.%4tuQwfgV w&iwvn661QNp+FZ[^ovr, Wfͮku3!HgznvcG P_X }8K;3~Aml|s\Vdc@lr(9M҈Ob<5NHJ9ώxx |hsfMy2 @8 Wܐ8ZyſٍɅ8\>9:1J[9gRg4Y|j:@AX7ڭxQ=6Bi n2֘ېw2͡S7sV*gܮs_ 鍓rs'ό&G)F@}ާٛ_x[}?}uO_} 2 b{m =2ZI Wpl!3 -JY:\RZT5aTW}4g+L=GjC@u:E hI=fơNL|,ard=t;gP>WiE mch.mg;1&pgY4[\3aa:<zFΚ}FJbsl@bY:*E<=H73Clc~4xD O[zqB#|'oOn_\>}q~";g>O'I_8=8kdZpk|~n lN 3I(&as_<؏0Y+-g-\}yX}~~. Mlـ ?x|v<89[6{ǯܿW|`-) X/!IȈ V4LßWƴry2L\PiКbVlUH ;%~ aFIu0 ~:PZ( "զAҬ*q!NuCAv``-ρ@}{f@φ3pDZa$53δHrz.Oś!/ z];6&;Sźh0'lXԳ\s3tw9=],Yf+FsOd'AF9S` u:AT&L5D@-6S5` 3#\q :c0Tx=9:1Jc1_L£t\>9~g(&gf6o@,1r e9h}8"yv6Ah+ssss(c/5qΞ$p~Nfq.dK;M6Ž& C73p#qn~Ӗ vt-g>kux Z4NֺcԘ7s޼{{Wɋ_]{/?{6d&{D$/g˿HPJ'csef[(e[ץŢʰE=kQVB 5A I@sLnQuʚʚ5(5_ǎ4# [ h> 94ߙMtA>tϣdx\~YEl A[s/yQ|FQn&fgM@}h, R;s㬍ڰ>X\z6xۡ0=' WXd9F̎#cƼ1U 1t;T `ͩp=brzס^:0|DNy&|'''b'eƨtb>)7>d糸<:hhDsf s Iˢ`q>8? 襅[7FEEm-r~`4-ZEV> H虿RUTTTTTTTTTTTTT?._{+uEW_ӗ?~w߁ H}t Dv\+uTavC$%,,s8}N+% H2mgճ` mϚ3g!g;3[׺v_5 Hoat9=Qv:gf +nD3$ 5u,7uzv$ 8!$dp|_/T8OLK/ zÆLڄvtߜkeЅUʦҺ8ȯЙ'>dg.m!+kCԒz揬 3= Z}c%ں@Ng鶩9sAgDǢvxnڋJ73l* w6t̑3 f^z;}OtEw֛ <(t:╫gC4sD<f8`f-19L6g+|gp|v8cSCQ;; bG& X\0?69 W;LhӜ)6MIO2 y:A+fT32e ٙC1gF–Y}mZ_GܓǷ%X'z|kN6 V,>Zci"_#Hg3Z{6/ϳOϦNq.L&'<Ʊ/_^}=~;=ť_y'>6q$+\r Y/"h\Һxy}V}$㜆LZTτU7K暭3TwdR Tuu~<]>nlBpgY=ޙ!zh= Hp 9p%qNgjvcw:stusog# ng@WTnhfY R\3\8֙3bc}fgC= lvyz8 ?T90<I2љ詩O΍F~ CaSpShOOH7$RڶIHtLӉ8Y:9dE@[#@ sɕuŅ||Av؊mya@_\Y ^:vb+pz7tB=fE=gBq ҉4fY~Ŗ+'X4Dž_ũiӂP܏gOcM@y6K{Go}};_}os=;$hjs>8ҙoPM@:lt3 !3PR$l*{*k@Ͷ깺. X3f&j"a'94K.Wvnyg&M@Sir̠6^Ch"fgnI=c;hes}O-'Eڢ {m!n ܏C6B4R4XrDLot/Bfbڜ uAlbAVS5,gә9"sGɳ;QLgnt6qJsNI: E@,4cgc 2 >ڗŹ|||ܐȰYkO )iݖ$|ػu+/|qM_K@K#m{d_ z&μ+ [f> >9teu lм&>3dl HM]1ޱmݨ֭374Vwֳҙ΀|"gOn;Ю Q6E,g(BD䚅NgNOGK h}5Gz7" rͣwLRϚϲs|z463(5P1cS3\FbQ ΀fE#se,B~BdDdtTdvCk&5ANƦfC=3Zkmc3〺7/[W9eLـx|e2^mCe \d|DjdjPKy??I1+'~%4,k=X8SVf",m?Oc{w/|>ҋ|ڛny~Ei0{$̑= 4pQu$3AfY8547βseu*>guu&#@\1u:6(3;h}t 'lhvon lwu}a\7So3 h;s$-g@σݱhoOptl7:&!#}m8}EM4'3{g<9`38 z䉉f'cɉ8u'qٹ )zֽ3]g&fgeg￟3I t}汯d(tA[Hna蝫RpK@S 8\@KB 51fV[tDsqӃjor#&ծmuTe_,{K@g*zf,9*************oCƳ[׏Wn}ׯn p#ZH2#h]tgϩe3Tq jA%g?3"Jg;?ФhF#YcP(E(?82nOtz BtSM,[>8{;kꙏ9t Yf}Fyy ͋:\//ȇ sɂUmp,fiJX3:_2Ū VuYtΓx&CC,:ό[taMƌIgv„9zXpVg[닭ighhg~&&s#(XkҌ,K/k¤4m͹5s 赹|km㬓+9p횽6cϒ ꗽꚓr9t:K~nXA{,Nf[5*8#ͽtsKw쇵?{íI}}a>08~hgTvfuϔdYض>3ҙs欑hQ@g.L D:$~buN83f-N'Iwaʍg^> RrayY0>Z|~^J]_6I5xӆEiXuhKc|{6Iy ?uxrQЉf*9h%PFŌ"qrN4WU.fYJn5n#\,43z#|! |R)k$[5.Ej 85A2wn;A'|-?թo&Hui{3%U`M օu7f׬̒^4S#+K5O kz/G_zdQ#(׀NC{ %qME3?UA}"aHgh?heD3@i3IA@G3вzg 3ZfAf&jchNNt\r.o]/I4N:y8}6/u80ƁK#jc9~'G pu̦ZT@Iz&-Y8WМtgZ Sdy~."'q %~jy70i͌%4/NK"СwQ@/NًSbYܼHY2ʌ]-{ VgR&zgz +zZag9ED,Jq2KhF(nFP/:#<ؽuW"o(e k&#l8tudm|&>zi[T@UXෑi >%! 0>zmjʫT>RKjXDG"}\DȜV- uћsº dWZlL_ZUZEEEEEEEEEEEEm t1on>7?ً_=j#}#SH9@,IcF# h#O}llxkÏwzwFHMu3nPX, hI49gEL k>>c9m&g E3wJgO:} (E $P&0%*;:q{gΟs;@#i&4N=#ITCDp '>||4HqvRhq| >"> Yμ߹3i|(Q|1/.ph\:r,.@w挎XcC޳!Vmct9^ usD O '⤳x՝'Ion2b5$|]qͬOC'b3dykآL=kum_ZWYc6CMtb+Zl-UL=#E7Ή'3+^n65Y yU2#;5@L"hPLQ4K(h>5s* Lm1]H-G˴j[ZNyw׸Ӯ0]ɛp;m(i;q[H{^5\d|FLB>r 6#8mNg5lbAvy.u#疴R}ʊ*************oCdpnǽ}}ͽ޽Oz] 7c 8;rn%D~oo]r`;s}:3a-D"ƙ<'B}ꔉYgτYϔz4}&yOP/mI>rf++ásdl\2ء#˰O^18'G#ޙ3{Yg ZsθD$ ؙgFūdxIS2<.MKWͥIs*`^f[z~yqR ;┱4e^fuT̳괽:nuAڌzg[ E,9ooY8"JӳͲt+fhUj[ 5@x3"T056]@ r̔eZVau`L7  x !n53IA#L3ۊZe߄ײdWO~"ݕ a7Š_ѳK++k%UTTTTTTTTTTTTooݖsc;7ݾ~΍=^ @?$ HO@D$ Vn9a?$=>o*(Ït@ΜDIq6Pp hvF˝{P@G3@@7;hzffh3E2w&C~g>}:0v`+59XՆdG ] h3f*c"abe݅ʤ>Z'i{k:,L8P̊ ;4Hk6gnyTL[vMRc;ERD4o-\aYvt`e]sd9vΡFGpwE*5X*5㈀Fk H"24jtKOȚ^|LZ!ix L`i~$ ?DxQH1A7Bqqg_wX7[Niu?5ЛzqM/*************oE$GYkyn뻷n߹u EkofI7KD١@G~@36V?3}hp}`9Q@G3В}HF>zYyysDТ}F ۤcP&\)OrrʹWixш)WO2Y'#_G4ZFb߃$_;)#dZTXﱊf q&n=Wʦ^4kzqȯ4V7J@|z:Nwow`[7߿w'[wzc92`7M2Bjމ!f5'C:C2cx>΂h&90Αst Ҫq8mƙhN(7gNΚJ2ӅqDM3A uqDk_48#Cqiȼ4Ld\bW{&1L$lNg<ʤhk< mQJA-=m8x4BK7X6.s`' #,D ?&?`O/Ai%wP`҈.,!)2+d 6~&UTTTTTTTTTTTTޚielwۻ;݃{7߽sŸB@XD!T7[8}$V1\=3?4>$Igq&تA8Ϝg4rp3998^p~S>ϒn>_`x ;isT@G3Q̗a#|6)ޙ0~>g%ȤspRzgVaL虭Ν?~r/)cnZp\4'"gr =$ ;s,ƙ3z8:mZgdug"\4KY\H#l-5Ykwsk"[6qlؙ<(:62C%s&\gm֜Ñ3ڐ35 [ Ψ3+^vŇG%7KCr+ֲzFUֲZ+AszJ ;gċgbEilٽNYf Qe$JwDw/Dz.-ubY "7HP=[6o) x1P=sAkie5fuS/oA7GK%UTTTTTTTTTTTTޖHԍNn߾y;ŸB@Kq$_,L@|դw$w(d8ZgDl"h8\(#ta8N'O3晳鳦>9 ̾>+0:mҼqN'E}@%r $lyH|Y2x B[W3'.UKd)1u:O )]xf;WZ)s???ʵ17ќqUCtF,95 ktv辵Μ9w}Y#ly]KD:!tf,%*y3VtN/yVnMsŒ%LXq߭lxU3\IGg#藣8~Z 9!P·Tj 6-qqL fo^XyvԆ5~3#&@44Bz Dz`[fyO)6k[zu(S=7}D]V Mo-Aߺq3'Ϸ#[${$9kG h q|$hQ7#}`ϔ>2ߧG}LWXS!|8}Μ(L=k3 ;ȩ}AF?q;踀x!:8F\/Jq9?N˝wL#ڎcÏ{Cb tmfƬږQKE%UTTTTTTTTTTTTޞwoJ7nn{{w֝[Aǩ>%-3GzH]~d:h?*3G˽f/֐3GΨ'|IfZTς}<,g2oH3^]h)Yl|fu ;S91L6#tfƙN:twbE33H>G4j̎3n~fdu_^uf') HYwEk҈<,dkގ,D dȯL3,85v` AHy+H3% Ԡ$N:e&Q4`- /p$6|meF$e}=k)DF,3ks 8&c~aSN>JpL aLB! 1T@M֘+%UTTTTTTTTTTTTޚ\.k s-io߾}@?yϐ}h~O?xO{}3m=\tۋ^:HbYЁz>F޹}f:m>X|6HMׯ7c睉F,>|>|WWm nGG&ٰ&wFCs CmsFkV~c]'qk1?ƙc+S:#%)K@nIg;y;ۛ >2,ygNqjun6ܪ%fƚ3x1δ3ΰ(t hQ=׷< :L&~{3HuN:,eVaM&-O)f@\űUpz*]ܵ%E]3'.E,.p- hnξxG=9%_FpиFM[HiT@~߼**************`пoJRv;[ng~`=CBi0#Pܾ4/E߉#爀4mH'NDtFQl::=l :AoggtZ5[z$D \dSW.zVmDY>_ls,+2=jrY:dܚ7$=wD2νs"'IqJp 8mpN1z :wG9G: |$}΄aq'AB a󐁌P. (;<?񊶟9=t헝US$k"ĺi晀n]* csJ@ IrҴL϶|i{nol_~p^6Zo mHG!D e࢙;syW|Ғ3o`;T:MkS'֕ۗ/u̳5J^  ydh3"gƶ >ƙsuԳumܾt=u,;HUQ>Z( N}ys,wXH#gPlKޙAt3g!~iFfK/w꙱n fvK-ٛ #0\4giFn˯pE%]r+h8Nnn.gV3aYЉ 뙎?3l]χlHXf@3Tϒܺ%=&n>B /zI77dQ_]qJn"14rQlj?%M`9CtQKUVQQQQQQQQQQQQyK\Rngc]{4NǑ𑄥Xy!mĴ򑈖9#fߙDzwcs\=@xSA"| d9O/xWO_t}L6Fm \ 6źDU @=]2âgXMt=GpA9Sc1uovf꙰8i/]5 ¼2q͑NgjIcy\uRAs ƙj3΢n֜Caؚ9Z sШO#hF6 rF{sܜ73Kbߙgڶ%]d9W:6Bڟ$L\3\WlJ :Bfbi)^#/g Ǝ5;3n&XȀ뷝nNs8榕4SH ~YGoy`>ڹ`W^n] gJxe}}nU\]N ѮzjG֛jSű_󪨨|K@km} ^8L@K##y=-!~b/9Q@gd9zN\4kS½s>4'Ϟ)A&Q=3zy olFE|B(Q=s<|aȑ98f0 hDdXa3gy~^ X'ELXj.OZKP:SaP@fk)meX1f`S5g>L2X]@|G4g )g `T7gI]7IFz)g hAQCNH %'rpzgBPJSIgFx }:TPh9&%f>,b1t0L.2ZN#at|5+Y-1mr^쿼䖽GTz~ b%SOvhUb'nV㝊$n!ֵt7R_RM@-tSh# %{p,}~ⰳ9wd R>:ip>>e"'N:Tχ h^q}&'=!Q=#}/ p h>\G.2=2$g`GG[Xy=E4vtϪ ; 7;I{ zg %I9dZxx5 slPAaޙf5GI@4;朱5oAE.dYD M^+,h % uazf%qgy9Ū ngyҙɹ=ag &Uψ`AmeMu$"Nw-YmCGܭZSqw D.hx%fV32M-So+sJ@= h]s v;\@lc ~HI.8Boל~JTψHxH}d̡mpΞ1g#w>{8grxF9"1xgp/\gްt^tV3t>zfl2=Nk\b YӁzn4@amK$M52KNq>V<6PI-ǩ`B/;e[W"UH)UG@;s霨s>#q3@ -8|Hφu$`Kg^,Vm ,A>tsqSf*9j}XM=9N4|4vlyE/uwu6Э:IV7ޗ!NrGSש֌t,)6EХbSkF˶:i_߻ /|Z2d~J@h䗁?i3$9}X 5b-yg$>"%n$g`pK54\$,qh(zS-`\um1C33z2r$w^V)SdmBq0Mg k'̭yf3cΒzl͛ZW>e]IT2YRaW|P/_qRX]^wҚSX*9T0n{gN*aӯn=؊}ǟ{l8L@PA@4 ޙozEGHb-C+5DKV'n vVb2Cx|fwkD:õMD3)q ؗT2S{%C]uwh'w*************ocD˕Fgen5-yx$ELtGtc EπD35'-$p>ptgbՆ%p}t4 L `\`]Q6o=lGÔXz#-`3q';7ٚѮURۆ` jngV Z,CWI3z]3צ Ng3sxƙZb)`A+wsZzV fnL:gagф+p9r+@%5bW18pp9P1W7FmN}TmpDk3.ȼ̜LFѳv3mb3.o<ag+ljf:LM`|Sv.:H3l2u&Ҧ*9QWlN<@бexjٮX1Ln<S GK~ #/&]wnE2Smi;u^_8Xt k骞-:PEEEEEEEEEEEE-HLP(ԛMWvp{L$̑^!a>(%ל4 ļ J! s>#wfϰ>;g)w&gΒ}ag/^$pJE2,+60:}/9#D@_am}&Uֵ݅^]\7>' hm,N9R)zQLͰgr0L(7,wFMf pf:lAf^iГ 䖬hDTmB y淀%Ƞpؠ` =T h>t>agشbjLqW, _xͬ X9 `989098Gs@|v):vT@1Cfdc%;VE76]󵶉P)Gt(|+}6C4Ȧ$YPn}Dt; 8053[_WZEEEEEEEEEEEEm$f҅|h8ͦim7";J!ygڷr&-WϨ[8w͈d%3upYiw`-gn m=Ӟa2Lt3_p}&Zʴ(CS1#&-)] skL'Bw͐^ 2 n٩ O\$żwyuo/Ww`/s¯ݭڭ2iy %UTTTTTTTTTTTTޞеzFCО ;5p8hEsQ+ww5SY|ds Q4MaRzuH5G9}>gQAwrϻggz1gl`; d"5rgd1~^& N+UwiIEϤj#:L ]}&ޙ-HOsy@D"j#>WhSIGYh*B2`g9TKvfy=5NiE3G02hƦfq&fء|ҙS[9(9"E[hL-mYxJ&͜&f`|YY8N`zf ݜ$h,SbC]s|~9Jh]pbvjvt4CΒEGeifԌ[7ih=,v[vkv/ p6ݽ ^9oUZU|53W]*************oAP@h8amv  *eDA 0=K0'NÕgXpL %לSρ}F}g4n>D=_OPȅA> Z-gRƙFq̙hՆam!h9zFldIU  jv;N޶&\(du'gn3h&qHм̀A@fQ@G]EMDnSC^f d m5o"~)c Q:HIG۩;USڥF+_57W_+pm}&D}8%DL9y9qږ( sv#/t;/} Z hz>hS8Hτ@=KK6:yY D4O]D ]6>(Œ A4Z\ēYtͽDsj.Ұbyg>;E;2 2/ƊSXe8_6䮙#Iچ_%qqg>o릫o9ru ,M:G3GϤ2f#vՎigM#3vHg;8~ItFݢZSItN͌[iV8DwVPS[M4^L#5z݄k/ S(ךA]^'ߏsPץ7zfH8h 4ebXȍ}M:52^ѭhR]nb*J@Ut6[՜zm6}]oFu:p%!Y`9kn# hϽ$E$|ꔍHY9^:fV,get>_p-΅ 6rq2mj;Yt9.%<+EANSWIN:'dH֦x N:NYS&6ml`-В}^b;7z39y GڜCtn1"9NaYNiepͯ(ko`qN7ӵ>Ig.9}fUMKlRD=A-yg#ғ3vW\Y+8M:W+5"N<\@wt3?$6+"j `35ɡF+$>7P0n5,fGߖME 3ː'o4,D<#UVrS U/Wrk*************oKDNZjjvA@v?8J6DFDH2‡IDI'ءRSGh~ >IE,p9{9}3)ٰ9}(fp&~FV;E jҐ32dY#CҰ}yľLG+#6RpLl \=_qؼzਉLYy;wggÞbUҼgjiGT̜ 6b5]l؜(֌1O77d̙-؟3R&r&n,&Erؤ6;2lr$,` #ofr|TBv3Qϛn=jFzHDr ;iӶ\}3FֳmΑ #gq6衂D1z ˤN cٹhzEv݂喢%vhuX3S&*g 39eOPfeV4m1a=܃Woc -&Q xUϜ Q / !eD׎fӔvKSۮֻZXn^듓/yUTTTTTTTTTTTTT7͍l:S-UJ h]o;nB80+YQ4Br͉H9Q:;'z>yLsyK@0L3΄13;K]sW3t hny7м9jɤ̆gIN+ukFҴskLHPH;/cK\:K|  kfAτ8A8b5 h>,L@d9l9ClU;v k3k;yצ"XlLjgHeU;% hV0:E]s9 I@Tܔ2S#;d5$DB,Kn]s5(shMs]n3JMLDzMq}Q;N-Uڥ_(y䯔VQQQQQQQQQQQQy[" мHs|p,e|-"3 }I@>9Eg;RHmyIw͈tyhy(hވ?3ztĹB4D@CԨ+>_ah>P@ 9Т}FݼL3yCq36(9{kڜՁ5ofQLtz^s蝗ŠCXvbaZ2ˇ#fA=Gt/;|+`[.fI:6Sƞ ٤3vf;u9XY=G4T=JM4:esloWPF wMRwt9Rmn Ө/#J>Zd*z]GD,d5)sbk-M͸?AP(,0| pH %#;sg\=1̠YI@s,qg>o##r pa0Т}F z|8ܐs0L]F^9jqy~ҡ"KS$'ag?Tp=SI3瀨}ޚYr6 Tϩ n},3r &TV9 I.IlWV8XFhrxt>;]DOf9Smf,8[c'oUGu3ّ3yǡؼj#aafgZ.Wn蝽)9?P8HPjlӉfI(UMpp?ȉ&J!eѥ~ n6[Iܔ^9?1_>ۆ MM@wZ[!_*m (Ibi>? _Ҿ$.M.@=Zr͜ӧ36 fm46b0~lAFx`>$%|32dҼ3nǨq9}$g*-.GkޘƉ Y08˓}6, ;0,f ϩws>ܜ3KvnI/#}kHZ%7=[fY"ٜʚkEs/,t-6[fB虶mwg399N:i03mymy7ZSp:%L6DnPo˼sCLr\43,8hN(kɇh̓zz`ssnz [MVy|njM=[vV웑[F6o ,՚W'zR행nJWWEEEEEEEEEEEEE{Y@o˅YZBi)9SB I1||a%tFs2sg)z9^L%|A;g X12h!.v}raʈ=vƣjx ;l5}F3O+tfΒn^6j hק)k} h{M: ҙ:#^c,E35ح3Fn "t3,Bќd-ߡXSe Q7'p❣Ns6m\S'Ll9}UYp6,n>"8ؼsL:Cy]qޭ{uwfu+juH]۫KrY۫68|Bث7j)_jڍ#f]GnPna'ci=Y>҈sGo~WNhJ&Ms||ok7fcQ߯v+JS*_UQQQQQQQQQQQQQ'&SB@-QȺYBr,[@'Y9Q@s,rK6HFYbh3=cd =#g#3vY.z%C3M,3@kiڼf"[3Y"ޙ ;y爃Ɗf+*yY-=ܢ3vŤuA=Gt5C:3O#^) 803)W'92 Ȓg XVX.~5,,$4g 2\E.YC4k݊ޭh(w,)usbpOꙨafíܬk7jM 暵dZF&4w4 rn\$}So74*jeZKRakj׿T*************oIB*FbVO*?:v:"u$yF}A O6(îKP=ϲ ϴ3L3 7@Ё}4X Pm[3&sv}F-:h2WʚS3܂YXVn.E/\(Ale V>h5J ^^)YB H\=Rsw:;[w$hbtJ>{E/N hJ5>G4z%%*c.[wj&٠N!BΠ#uثT̓uP7eAMFI)3ρSE,#2Mo玦G߼|*F@ތ{7#m3玥B| 4qzs8h6kսZ AK驫VUp-9Z@vۇK"A YqN9'896Hu 6ܾspk9@X|%> d483=l'  Ka׳ؼu:S1Sa~ Śl`~Yb,N˓gkyFxFs} ;y3=Gff48gh]y#3y% /Xf 2-J#)S\6n͒MA,mRȤ8r9Q=7(lַr;Tp+:̽sC)b-@޹ ;ʹmvƵs.4 7HxŽ)g[jȰTgXX[eS!ltltzwb4oPxx` !λ5mjhvuJtعhLj1G{v [&Eʹ*ztX! ܻzD5"#=N2fMj޳}3~6byChfuZ-v59*8TTTTTTTTTTTTTނ0LCֿ߬e77KŢ^* k0 X3ƑD1c"fT}&udC@@@t>*sD@ s/3@;5 \@ό +"'Ik~LX '`9"}tX,qG蠉Nh%6RAg4sMn6 3z3wE]@99 *X5kzv=ocFpnhQ4\oף63 :*ۍ&r M3ª8e&Nq76q5svg)zFY Lƹo%[=Sk6a뷉(VK业VQQQQQQQQQQQQy ?I?岈hO MaΜ^U,Kٳ. MA@}sV|Yg.E \tyGM:|!τDhڹ2vɍ竗\BlJgw^>yFVϑI3¼ L!}m' I6#P(sD@zfYχ }&mt 3ߑJ6\.R &CRLqt@>T7㜅+ sols#>9D@s( A[Tϰ ]b.zfgV5mu:Kޙ_7:N:ag⚙hsӸdͷzL:j$Dsȡ\4whfWˌ,GˆxH~Jl8BNK;QI1j~ˠЍ^W#[)'~WjZEEEEEEEEEEEE{o%/t?>J;c"8\sNXOqzP@Kf=AIDATYճ(q}.ϒF yyG$z./zz%w|ĝqQ=}fYВ}f}Jꞣ93W#Wm97f`>tjgQ@tVn-U hc.|h-s"\:YF8wv2,fv8}Fh G'1:Pga\;c;YΚ8yƞ B8V<3A!`YϜ8u͈P7cΑIvǙhhp$׌͢Pok5/KH֘sרIg{F o@$w̑^{`5iCʖ= qS9=sD4'ճhztnƟyF33EE+C>qC zNڈKe7~ Jghg'zFgֹ1i/O:Srƙ9c#' Z[tysfbPXF;\=*a=O d%βD3Rθ6M|XbF}&z:b ;G06ز$̔m`a6`g'd3e)-xb׳`3ϑ FP#π-zg&h3{YT8W5z:Kps]Id q91n&3N/&Yf qw|/ؗDPXoq? n%bqȣ7DV#G&FYeToiZq.2W/[/_sŢ^.su}~SزD*r+"y3$nϜq)݌6Dpw?8=sAJ`Q=I+C.hQ@kYtL]vcg Btc*zv´8EXfU\TSL:L-3oN/N5oM+I7agj#jhNg#X8ɹN޵23>Yt;[ΈT]!>AQ:sBLa{FH&1g&}nh&V97n5H5'fBT}@OQ#NǏbFd\}d@Nl]GGvD86%9_EP?mrYQ+N%J h}FP0E\UVt8a[?Is YQ4tus`]fI7'n} hC66>IzFP@S-KC_p, }|DՆd zڸK {sL=ygDט}f4pȰszaP@/XGga̙!gĴhK+viŒ:ha\['ҎDT4""%D3ZZ*t\7Kt3w3g7xY͘N=5wo7Is6>KZ}F,ng,>&tI= h7Hмә;k7g2%HDғ]E䚣̌Qh0Ycج'fIL E]M"H'NEDe,"#yO_K>fUkTh"pP-Ur+NM@|3ǧ,N!1H~h"rp"E/>4s> {gNR3В}>K4 a h\dsF/;@4)zNs }Ɵ-`hf/M h[Cؿ62y#fi3ϋ\X֡}vp]4h4oTqzL@]7X,mrI4ڦ s"n񳖛6mns&KVl f.">p+ x3HtUf}5wG S˝9bՆl3msDB(ELY@'exd6'l&"&p,Ī#>'v]M 8ͧ&с$1Ōk>΢tF \S2<)gG= g쒋 yLgo++6ysjΎQS7“$w'. h:]c[pVثF/!*************goWW|^Z(5cA-IH͉wb%]|@Es_G6:|ZCQh>_4g.E L$Ϝ}tXA쳇< Z"}& r^vz h>zkΡڜ3M 5󂕝78G "q"%zr ts0PA@t"(Q( &f)'66%NolبE ;GD3#k;Y+^n刃svv^í1ɰlesT@]R\նn݊4go흇9M->[RA杛f8L3,>}[sM $hP#I6g㠥5uUn;"cylU8ңD$|: mr$, z7 }^t5O 8, k Т}޺l8sƬ 3Bql_@}IgZAq+vExkG"C/{C$% 6ߜE%M6=AUko5 E*qZUp|,\#y tѱ?JQ:H9D͜q eTH\=#tz hT=s,gDQ=_}ٽ2l##8K#Ϣz$t=n60̠ϨYbC}}Y5n^% '6U)Xp&Z9Љ#ZT@y%24@c;q:or2B/mj[ր+`/Uam'7csea3X`VvnzD@w Y>ء]݊ýsدUsbU9 2[_k1rj,nηZ5D,f#'5Aj<#X'a<&w Ylk>O]ؔ=2a'vc^@VG7E L2mW{fQ,7z83w&UTTTTTTTTTTTT!׋rT@9H$Gz7t/=B$,v:GjId; us]%pe&I0~ ;#D@O^q> ΢3aAd~¥0,Iwa O:\K3%>ؼ3 Գ` =tsRQLN4 hJatlGOjD@#f5mfnn8͍#,sbFB,2K[ ssfw_F3gdSv*r]pvlδj#w.j!g_krhM}V{_o7歆q h҃znxFC΍;ZXf1Lϵ#t~Ȭ=2D4'VMl>{]mSC-N"<_ ośܭHO'̭pzh/Z q|:W{V;GNUo5wz4{ZM@|kh6]rVĽ3Sg#!9Plf hba^>_p(9}n}:R= ,DaF>\<̌3Uϡ,#bzs@'낝]49bφ CvbFi4i nÇQ1-3B)"iSπopw ~Y(Y:G6hݒ[moV9&\;EqGsWnC[5j@гQp̙uVvЉ A@zNq,4Ȧ/hQ=t8c/!L@ ]ρz9PL@3%R9Ђzsq 蹫." hqYЂzBV TWϛ-ϙY'3 H/ڄ}..;zFKv;sf#)DnrE9Q,Bs}NQhQ=ΰ@+kVt 6E;aڈg"˶w6ŊgWnMۭh{d-:Z޸74flԚ7-tAnԛwͻEoӹwFjfkbHD@s?4ҰmD\3B\]}jUdlW;5)IߡUY1Sl7Β|1q^T_8VE]Cis-lwp+C*FF#[[$Z[-d\V/RTp4ٳӧ= ;'qYAt Dڈ`>gQ=sh#.& }>L@b2q%QL4}zvԗtйgQ@'瘀9"Hs>A 5KH@fQ@3L4X$ZtlI"kfNu[2\[gk"u>L@E37;#tr"JgGI;qnYݼ 4tJ5âU0͉@[qIs]D hX_4WCn4z]FfCmТ}W55N睑PS`Q{dԁzFH-3Ш<4+_<aǒ[n%՗N[nUڭ eŌ|1%NoD ^Wz횬WFt&8'^h=wVېddٌ8]C=*O#7rm-w-]R*************B@rzy4f6VdW-؆ ;GH!F}# >sB?af7Aq $ggQ@Lwz71 yj>{gJ;+Sz&ik}:XSLqM@;ω:|ta!"KKNϡD3 zo ei[nw+%Т}t>|F̴iE9kHQ@c4nPzgN\@wK⑃a3@'I.'A-r B6AӼaF~ڸQn3If ɼ}6̪6 3Z>Gt5,t*Oi@pUbΫNSn/ .\+j`Z/9k.ίZm~NO:gN߁D7 k"5t\=sG/Z+C *************oA@/}L$_̑^Hq,s 13Тzf$>xg6P@\=sT! h~ EWFZ@P7'g&cpme#g,܀g"2|՗3nzF֧D kQ@AZThD@}&zghyetyYBϵu5Q=feϵur;%IRG0S 0M;=^ !9z GL@G]3pݭ^دnuZ蚯7^yiJFCo:=k;v8hCqIWyc <3y?&<' ZgV홝|HvU?sO2!v+ϭs[ɈY@Ig˘F^xp-jUau _薞9Tb?2Zx6[W7!N;U2E$ '~Sxd {fes#XEEEEEEEEEEEEE$ۥr~+]Oe+]9{%Y?P/;Ϟq>,A< =:n5z%ဋpeGF[pKϒ>SW|.%<3y 'J3,Xφض>' h>g$>1L4IgXAH-G۴J5tm fyΒwtQ=,'e۩3XA[Z9I.Xy8)@H ;k%$SvKnޭ2sܭ{8Gs|gFӸ7n>:_X-MI~G' >HtFLZ^{l6'VRbVDp]}TjVjDZ53.jտ5ܷ_wOڋCHPψ_z4Ii ,b+/J/~ޭpS{f1giq<)OW e~i?v,z<FM@|sn w?Tđ/rz^g.Q=)L44_݌ zpZ,܀k;l SW:]skl9Cn`E 3`L@}+peEv#Js!l:ڦ]_3Rn4XXiLچXh3G$'[63eA}3,wzg' nǡIX}CEqTm\FTmHY ԛA~޸k=il4nk\tw=@> <]NZ8T0\<*gQ@?qɁaYsϜ Uįr/Kʕī|Q5Laʏ4iX=A]l|O[<,ީ/Y>句uEx*P]y(ހϺO-WX-*=C+3ty~FM@|ϓ$IJa3J7Y-W0E\mq$>\2Q,">/|9jCuwF.4,xg2,;Wρ>>ST!%ҼAp:h3χt8RFf6BvQ"5bpL!I hQ=}NwginXmnn5 kkMmoqK+m75mCG {!^pLrU1 k4g $fh, |t,v=*#j ԁMz;q[o6귛tvygaAs-GF¼3+ٰO3Ԫ=1bs\6gy0%BSp)gp_'Ẇ)hNM"K3p}ݭ|^y\7ӝqׅ͗n>tQ~ݩk|*q$̑Y='hqȟ Zg^{deYF涖{%UTTTTTTTTTTTTIdzq9歸;{s`ϞC]s"qH8 1}31 >K@th:h(̥h蝑>xޠ }R9lXq>x3^L=[sgQ@[9KTρ}D3D@NgI@s >UzFP@9l=ThlVֹa߾Gm{g.isL:V@qrF,;$v}㰖gn*p fqN=}&47ۺvGoi[ڭzNqn<3,I:w& X0"o|Ҷ^xvK6j91Ε+¥kUXz]|F80G$r&>?kE5-rK7[vn?zZם¿u[[x:oWJ;t;O~}lFjko`o! .?{f19uO$>$7;Hǟ>A hE,ty?P1>SyTЁ}NФyC8, i2,9k^eh-?ϙ>f%umH}w8Lm0Җs}6\FkwMD|gndB霃_mW8<ihf5 zgtpؠ( yL{ hpC4ڭfeӵdvG#p̥3 Q s;Õ?zj73(9v`ٮ|8O^_t2l I=D3\=#1bEs+\;`y^# d܆ynxH#"PHA/i˿pϬ3+R͹k%UTTTTTTTTTTTT9l"塽ӝ'crːv9wKFt9p׋>*5 x@}gss@, A }pCz. C"fO (Գ<|śus|<"3_ύ{O' W=b:K8/Ѯg6NYqWg&:sh Y 삖Y0ȹNz%/f_Zr Ve#g.SZ59fFmͮN}խ:bG8ˌG9 Zfp&o-nsS6uJ;3B GkmA.+u5sP:fI _0< ,hmudd;E+dn#ϴaIi8o>kg;ׄ<^?s_t*ex?v᫝k⩳8AI1$z=l^oC@d4#^yb'C-SZB?rn=ULk[=32yXiյ@@_;ws-8{~(fN/-#O4'ϔh4,tNϔg>KZt-?l@/:*9>' hh%xՑ4\@ϴ=4QL@ϻg*|3= ~eK^~-ZJ/vq):M4:hf!ҹt3({9 5#f D\3G &'"9=3D=KY>Sn  >a:{>>#gĬCc 3>_cm>nNϽ'Q@S1|$h|bC|ƙ5 [8_ e|>Sۥ_ܲg;}nS?j$z<[[O^ls:"ÃAŐn!ؼqeL4z籑62z zܦ~>O]C=>c a ښ4 kLkc1">Ӷw A;E/܂;%77g%z.-9yVҲpҙ/ڨY3nce,t&zSSdᖙbb5ag6,k# Qr׳3ݼ#mp:- >s W>' }6(z&%U&랣 Vgjc9(ܠ vQD 4Δc:cF3̼!I@gkfn윝7;U  SZ 9>GESώj9:e$"gƖ$9SeNNm # tն-34:V'gW( &:'vᩕ?yO=ҳd+تgvH D3DD\8Mh%|e?oeͯv_m,"HGw֡3+?yl=[tsQ h! z~13_L?P@D #33?r0S>A}2-w.^h3@}Fw h^1q<}}ܸC`g '=❧)XH T82㒶a3вg! vG:Ds"|0,!NL)n5=w{J?q6Z[##\VZEEEEEEEEEEEE-!L3/y3"D!1,!WjHΒwgB54 [;gd=4EπXWϗ.h}& +C6g6ϴC3 A z$7\>ݜ$%[Uc,CD ]EZ$a6H7>NρF3ϭ1mAv'}`a*(% p, Y$>S-g_za*/;yK_9rTV2=ipլ.3j+VȪϵu sL@S$ h6C|g~9amivJ8;z`ceL?c%ˇ s`L=Ky'G#ϑ};3A >k5χg ϡf]ρh7z~@4z蝩z>4Q@yg-Rճ(ٵg3xLt]$pO-Yl (w@zl ր/ 8E8h;_MF$.xim3_u3~_nn(m|pnCt~ OHpA;%}<6csK[U*************$ مF T֎+{gNǤL-DˉkD3dCZ~wG;pK6{C!C-N}&PZ`YT.:6JmI@@K4:Iozs54΄ܢ[t%\Xr)Na..{E'7o_w_Wtڪzn}o(iV/w.-@5E]!MFL@sYxx@~`f3΄_.\9A@%9(r}Uρg@3 6 4jD=ǰq.}~A@S&p>xv+5$;#h|87f$slgw3;鯻S%Ov HIH/DC'^1xψ) Nꙿxno)δ8p+9ѪA̲@,L7s`㛃-' Ǝ$yx517>;2Ժ8m Cx `Oþ|Fx0,g 3W\;ȳTN8@tF|_J˱g*"g#٠gΛւݐƢgJ8?,`ʺݼ>il*vyE`.-'Tm֝Wn&pp[߰sf4 }66mjw ҿa57uv |NexlJ"WjfNZi6N ՀVNGP7KZ;wrYp~gR7vLDnvtjcZ࠵r8h Μ`qtUo7@47 w :|& kwvO3Z3iy' 굇z6oԟuꗫw~fVֹҮ*ٙ >˯ ]^DAҰ+«Gz@{6r8Bq}-e^#D\s7HCʽ73q2-C^NDI?ޡ U9';摟I_K`7Lo~'{K:hQI#x^!n˝;םg' wㅳ|ja%UTTTTTTTTTTTTނ=Or!~k ٥f}5\93SK.pvŶ 엏O%z\tIPx$>s v=' hyCH`fu\CK(y8 gl@hcHq|N/DƟ!z.~g’ ʪSZ+.,и h2io-o8@cAkk/oZh]!DmYi{6"mY(1>s͘ǜtiӪ 4K@s#ꙟ._5FM3 3h&' }׬ը}6jwuAsfgz v<ωt&' +/-% д9ϟ;S͎$>+w^ pbJs c%|.8N:S1f߂;94?/ov'_zgtд:vnvvJ:UTTTTTTTTTTTTIō2Y;S\@_#YflA(G^/%ÝfDG, hn)4硋z.]l4Vm\]9\:ǻ)AI@csУ 4iV\=#>/Mg&#nfC=4@oE;;os~n eK57 "t٪ڪ ) >SL$[ޒJs/L*5*Dx!dEQ݌N7klQhnQ=,{g)DDВw^m.nՙzhwͻ:">P=|?8l[vf٨>ҙ:hgڳVmL=Sy;_/ZylE>+rl`4rw+Ǽ3'"K+8t;tjNgoOwz{d~Uu WƱO${ﲹw_md:|lZ[E%UTTTTTTTTTTTTނK@odt 彁lκq2bZ$h;YBRҢ?AAnk3E0Eå3GT>3g.}F=3BznSz >=ݢYЂ}Ege3@3u2 h>ϵu6Ɔ`Z gu4H0, s`oY'v==Nu7ءEI>T*3XB9l|-6l5GsqҼ^n7*MͪF59q4o6b]6zՁ{Z.-x#32,@@Ϭ ;* <<`PS׭xg76rzKIr7`򏻑jf[N/q,ӽ,Ϸ%ngiMD~?q/oW[e}Nf́hIUW̧+㕻xW`E h! 襍Vc-e.T;a3 ygeԶ&A̽gQ@_:FJ6|39.{Ig68A+8NLs(t>/O[| %>G@ 9"s6IUX:L(C}F\^qKny>G3];XJN Q]յMa56LX3Eό-n tTj$tE3_ fиf=h9qYBv' KS:8O;5٘D9pg$>:EbUWڪ_[+9TBkVmìoYZ1Nshhj"ZL@sYt5֙7;Ke̴0,tS[wiFI0~%P 4o7|zƮgbS3dٮ=wj/ :*=uJls8Lɉ%3v.~BW8 N:qᘳ@kI"OS?~:/H~#yo? n'd ߔG"??"w9 O4f7OK3_vӟwS/W'NoV_Zolj[zJ}~sgZ1X,Q(H:!|H9.IƠz6`!gQ=#nWFZKmH{R3qp 3:^h}AHYkc'ݕ)@>ZfZ\@G\ks^1[ gV7ʚ[^veɩ.eIWp@4Rߠy͆Em4r}ڦI4F{gY@c h>WϽ4t*褳8쌺s\=0;As!,z h>"I3G(Htҙ$ 'zfR!yP=I3{1XCL<2ˏ2;lVgfx ;3"jw%1Sb EgRQ'}} ORv&ђ je=XG3" h>L[2/>#wS?B~:/2o~/yUR_&:N`úo~M^6>6^WZEEEEEEEEEEEEH/[X/՗7\@+AGoM;?׉"+Y8@ hC eaZWF:3 gQ@z4!8# h},.zm w E||]X"ZYZ2UR8o|״Ʀo޹~;FʖH>S،4>;(, hj:ڐ4gpC4,Yp5v^0/}&E4?i0&ͽ`깪_ P@="q-g.wZWς}9}~jׂIKR]z|/~>gD=/|f/Zvv ꙃ#Ϣ}d'jx; t7ВGn&c| hyFB,-t?ƜE~G榥Gs~ h ӽ\7~zikSog] h&=lnahCУ#{g;}=CZ8^k3\x o o3Cxz| g67>LK6~y|017XzAX"c-Ƹ`3ҙw=-Z x d_r^O=]sI7oε0r|Nj^@M-z/f쒗_KL@s\\t)KKR]SZvx"9nv)4&9fil8 鐳6<3aY L7ED1+n6E\"zD[Yݜxzfv:wMpёm y;sL7$̝4>|P6X5ߨ8"zg UzyzvDi4ցF^zQ4F4]Շ:ϏD>*O*L/?5+#/xEr g vnpV)\= Hu6]@pk66LD@[)fqy 4?t#E:D@sp 6o#+30U}4F]g2 h>5L=3 `M3iGzgw~l'6O+i[ԞgvynW^Nxᔟdd#'~K:Y_2xa9U;u;O\@gth>SӾpVh;M~d/YL/C >,On}+6%Y@OfWj 5^K[97?ط-chi8pLDs/D=%;h;3n0F.d|y p,<-.\@fAO%=u֌V03Ф|#P*L$F,?K:>!3 ;;ʙ)U0f~Nktn9knguນ!hy6l $( {%s} b8(58;hoV?{eqmZ^w9I93$L'ssLRe[dْ$RI$jwש d~~ܪӧO=`s-vT4}31 zi!g}6AD:#D=*-n{ǽbLv&ۣ1θwGԽ=ٽ3ޝI$\R3U>e r "-3`ύ2-8ڏ' cdl=UYɜdy<]KJPoUMkzt {=U}F]fsoZ}Rg>z%z&H,BH4klJW؝>3MQ@[{Җ'p&%J!uq ^@ tPC}f* ia)9IpPl.siS4EʟC)s`}65RhFci[,J O"dla9֯\4#.Τҙf ZPϔȀ# `g~A9vGQ:ccg;l`s5/zpgd,'syzꎪK)l01q|(/'*LTgbN2}$SvG3lZyT԰89d>1h:1`SgF8񻍲q2ՊQ=3PjeB=#>g 5ܠ%%ZlAFvd}wd}J@S, h4Τs7(:X>g&>kHj)>}.gb^C"b N4-6H 8M<+kH5n,[Ck,'3hogv@ʼsH.:kfy$c2s6aWa&g*wF\}(g;/-߫A?twf3!oG>Jooҿ7ߝB=KJޙ@zn8RU=˽2gьYoz$c1@s~"8sidv`=YN- zL_|[ѬLTN-&MMAASCsC` CL-Y6crج`B=#gGgG-g!өAɢ$d5ID@_Kȗ: h? h1bl<PYfSҪr/ߖJ~fY*y52U4_ ]35i`m]>3tU42=T@OcisV" h҅#ߚk]{gB>S0 FL3϶4@zn pCp_R.uڥm >+4~= hl3A h>KYh-/3֨-JjT,a l 5" J97gp( huk\@ڕZctZfi epA9 >mz /A}H6BaXi:ͤsLZ?TIYiKL$KPYk5f8>Q=gg;c @n}A;lȄ]!ݥ.ϣJgyPCg`gD@enPL3Ɯ}o 骃glǰؙ;ۀyZL9 KL'hz0U:O/y̐JIo R,W&< ; ;S`W87_Hf5PB=#e&W\0n_\R -""""""""""""Uh}UmBV|zٲ˗ Pxg599 gR *s:єQhw.խR@}fӲ};-7H3 $03Ш}VQ=+8+`9`HF6&,%(3㬀 h>W h2ce:kfXK;[$ 5R$m7g4β}:"3u)[mH&Qs k Rm#2B!\Tr]aU4 X#gI@+sA߶$}0zR [sggܷ;y1RLʟ R  Y='9$PLa@AKH4k|,8(XO%P(ZO SrTZay\g:e ļ/+-r~paHs~P(&\2VEE@}Q䨥s0KEKv/z@(' ]ZT@|% hE#?[?#6˗gWȭ@->#|jLyYtͪ R* aHUgt]m~u`힑rgdk]ii|3V:I9F`9ւ-5ߠ6R ]f@i˲fh YY4'01g%[r;oPAd2X&Vuj]c ~C Y3!.@T_GKeΔKw 3]r3IuېJ]KYK$k"9[ y; YK(od:iG$犕ʜe'[әQC G>JgRLu3100I?0얖YgEgEs& Tvniȵr7:r 4@+[2zkҠAL3άyczƙWХS h^=#L={8.؈ïI"mD5:`YІXT`čq jKHD@}+3'K9[4k \q 東#sPI@KC>WJB%LWh} fml x2[oKط9w`G,M ogԳ3ޛ̄%|{.[sv]؛ >g3>Wg쿁hT=W9 ;K`=Y,Oh3ly]0+C1eb8M* "U{7SJg=? 3jTy/\1TEq=8-Q)JmZm ߼yDQw84:Z[o h/}Nv,L@[i8`JriN*b*5$е\ l3>ƒ28 7ФҹbAl3kmݜ Y=grm0H#mM}3D@KhygI@ eO4gDfe-g^-c8ɺ<#Ut ^#bHF3/93]Q\$ygBiR! 4b0:gUЊE*Ѓ%=yqVgwdrg`$e5{Ȗ } Fτ&`,3dA}7-!WIgF{Kػ=po v;bQΈOƻ3ΤFԽ3ٛH%cνdAמ8P8]lP}f7$il3#PZjq$c=!];#*)'rfgg1Axt*o$9o(Ƌ3E#2N:53蚁M(.w;zkG =7xRc2CgSg02xAQ͸8ls./FGM#f*ME!EDDDDDDDDDDDDre$jYW@e0Ѭh|Y!UPύu50I3 >+3T@OKNQߖSdAD,Q^\g"Kjҗ5Nӎ> gIi3;g3a̠O*`[D h 蘑f2X0Ǔh6zcf ҙ>ќ+f_%Hp::c(_,tF=Ϗ9L37F"| C΁Mf_`O lϛ^ȫa?? `[4=|5vE;Þ!箈R<{`K3 ]Q޸g_ =1{ҽ7 8OJ}`~0eg6P=nɲgtD=ϓS%'RÍ!{byzt`a(J>3ch8fmG #vr@39Dz4W8>ǵM)ݹ*\]g\fh;aW禉>G+4Q@ɫfUGӪ)MVM!EDDDDDDDDDDDDF@{{Ծ^ ޒ, a&K 誢y*j9 (3vEX2YQfUg~(tnX+QyXGں0*W9Vzs%(z%]ety3>3C3AVτ}SEDVJꙇ>%]2Rۍt”9A\L@ͤ3֐g89WtПXf Y>|g lzv~f3%zF>SJꙷ^3iƹ}fLaL=#1C"n Q@b\g^=[m0`Yv%]-X#@:3%c'])s4ٰGb)0&4S0L3pEA`NIÍ l T@r3]?L@4 5^k'H dGw08Up "iF8추Ks\3}*WJb v@}~D t'r}3GIuNTh@]nWD3'n#I2{GTX檔J69^-`ͩgg Yr&4>}4S>w4x}a30Z3Ϛ-nKasy3.6ԳCa>+3ЎvgxR3\&}de _Uy@)1c2nHq(>>K[f-Q樢Y!+t^-6wfg,3F3V4gi:8 C}FF\A;K}6܁QOu_~`׿ ;9\iIg[CXhG4c`[ػ# y{m!go:;.2T=^{aK+tN`{(9܇0i'=7RH@MWDNxzy2Kk x`3% 䠞!Kgݹ-p~PCM10~ܐnb@sn@s~HwaX;3Qx.諢8qeX*#չw/|VhV<}q>[?SLжYwF̐se >L@+Y.uO jHHLjt)sFL!Е:.7f9fŭфURh2߽l#wDؠ;EGtyrFA\W9X̫g +>uh9#Yj$9\U@wSHvwF;BA瞰gOػ'p^ݿ㛧n vqk7Uϒ}N8{cvl߀-=GsIcv aiѴh}X-dz2&ݟi獂dX7gd`̛' tQzP?>hhت i/3_`0fC 7 ̣ a*B6p*FSQE>S " M*͍ h"""""""""""""_L/%mJ)te Еȝ, (쳂2ݼ<]kJ׬JpoTa2WhZc3*3(3M0 Tt|n5%[brD[#Y \,>wfe]Y@̆$J>3mO> kNЪ 35vXsؠO-mC\Y 7Đ1#%ޙ7uf@{=W (u(Q YiyѬ o"ܮl#\p|sҙz.k0YH P=z ̳C$x ~y߿)P.pg 1δXLsȷw|;`Wط;`#ޝaΐ {=vDLJ'F2;än gǞ'wmn8Rxg )~Al!WOy7_ZDDDDDDDDDDDDK"mm~o:ޜ9 pjwf}fE>+4T63hfq%?}tg%T@Y@KY3%LK9}7\Zhg м}tDs.G h>ߣ.ώh5Q Ϝ.kA*ad;WФB}.k!5 K KDs>+4SRsjG)D=szgȻ+Cػ+ItkO·7ϲ|脃Imb(mGV yc }%tO-}V,!i4gF4ϒF8Oc)sYg|;>H1 h+:wfLU$g8 -BxW }3d# g@|v#dÿgO` Hȭ6*Eƀ(u|WTfB>;BawW̳#qs5g,8'&J9 ihOd-'rs|4 hCaTϓEù$| ۆwU'ʰι,ӆ4ƤŞ+0 nkZfW֬0sN}tz^U3RВ}/H{}!ݐet5JTϼ3--63AM}6v>nVh@ae\&L@}f٩J.u:>SګI5IF} `1>G$, h|fJ,)R犾Ϝ.璀VgL="`33j+4 zճ$ǜ~d+we3 sFN@ճL;o |ۃmT@WJU;BΝaמwoܻ;q8D]ި{_̵7椸VzO8t نvS#M2@|yl9 iQ00)`<1d"$3|A鬣̜Tl2l2Yǯ*tϕjT?õ\\\GK>ڨ3j@6eZs~H3Q?3w2w":"""""""""""""_F@"*Zk h\i4y\lzz.纒z.% )agm9d}>F 2Ls{NGf&cWE3`NR =,c /[fE4 YlpjU>Y)9, 5pZ< >+4yg}4oWLe<\~@r֙Jg4Cz=+FBtI=K+ J Հo߷Xndݼ-l {$vy0L> 0u틕8o Tvl|$e;xa}XOf,ST=Q3yR&$d=>X.s޹P4\0LDfYQ*2DݢŌ#U6Sr`zmz#"QD4o@VϒPO߉"[aƙJg"+3*JQ4Ȱ˯_L13/3뽡 C>`(3m zۃA4ĞwO =ޘ{_3U3=7 ]r+), ShzV9)sY=sAXlQn -i:D;qRgJWS}Mm4ж hڶ4g&y4g&}4y*l}4U !ZBP=#T=)D@}imΔ&Vg>I@}F]Q\i3HzT=K]99<4z^@3,99X '=74}`7|UQhIw_b߻=3dJ#DQ$?9\&I I=Wrg'<Jn$S#) z)4i, 贕.6Ȋ-dzl@>gg&>&rƉ hY^i0e=^T@IY-(-iʟfؠLV>Oyd8YM@+9a2?_ty9R9eu\ԖQ]=e| ?9>[c[cZ |}LW43}}ټae\[C!*^TT=9=/_| ,"""""""""""""egw 6H|,]5*a6ɩ<` l@\K hju3єc(s dAW̔lϐmYukFՒ-uy}'AיE]9Й3vCw1dI3M}siAft͈]F4?N4;c _EyL@5q,&uкd@7e) 砍1DOc@i}F霱)%R\lp%tF(PEyNpDЀ8]G\QiL;4BlQAjhZL ݁.?6y(:n!6_L lֿ%m7| ^FR'ByVm6ϒZp -"zGKxwF<ޝQgG;]1g\lzF ?bҙvް>lSI+ hIC2+p$k;"7>;odm'Dt"c<1%5扼e"O32^0JUyZ\ЍtyDQG3@kIÍgA;k// *`fY!ՍJ4W Q}.гt,U_UUrmujz͍uckcJS tW֓RhK/'.Qu4'*EDDDDDDDDDDDD!pHǿo[;Mm&\r{Є \ɽ h^=#lR@}Rm4:h 赹tok~ZФ톮3hh3= 2\Zr@xL3lдGg^@K\)w_ ( t}J@KTh\lP!e J璀VxgF g 6g3q.T̄gP.yֹcP}&jem,2g nA&7{`oy߿%|5⇇|>sp'>I@;j7HpQ<3wLJ|(IalAaY@Mgд乬Lք0<+dA>#D^>tU;>#L=a/IZ0,P(^-ׇ˄ |A3: +s捳bqU+ҨFhjp/0c hf\M6qfrsа͵ZVϕ4szl%ϔtk1xM,m)(]9^@+ʟfCZmXz2UsoFVϲs[Ep`Qg:WJ>WA]T@RL@csĀL!P5s[mP hY=#D@)KJ͵ڨ.R gvD"A;cNN)Q4O%aot'0R !5#x>Ls2.S%Mʟ%1%9gQ`T2D4c3k\psP*8H{1H+LZmh=뽡 zop0gf4qll7xҤޙBny|[CжP`qRgk ޹+ [31{og8}&}&Cqgˑ$3%ݟwƒg9c=[jOe,g2dA,ټl8@>UƯ– g_YYGUAc*h$ΦdH}6iۍ}NK>+so%H &[Z`GɊ׳;3gߎ$K%߮2M33Qϸ Qĵ?F3&}N!mhǒciRƙCRϸi w}Ϥ' FB k'T:&I 3Q宙q.g]ZDDDDDDDDDDDD+u=`66%Y@6^1P,wW.Sbgf Όj2gjh>7חҙϒJ,JtR {nL%M79$d gK,kD@[Hf.GvEGCbrD=\siQHgw4m[t fdYlWm~>xoVmCbGOIR3/6({g Uϕ9N9m}NZ'h QZdr:m=&d1>eL85(3 w6' ɂVQԝ'eκKEŢR\H45SwW|k*gOKϬ|'tZu"7hS_ͣi./Vu~orӹAË~|sOm蚕P V(y*ޙQaVx]_Y>gjyl32s}j(s}FznLkE4/u}Gԝ7vgfag>{@z*9374g:Pz=>R~]Jj|; 7B2M!!9hoPUKO1̜zzF`LֲJ( hl,0 ;"#dtT  *4hYR  Xcдs{nlRsc>VGfwt ywȞGƻ7[q%uVRgl/N,|4iLKK&l)ۑpJѤHrg ϧ2iif$LsFRY^x0gkݳ$ L=VE%;3F=#Wː%(pr[+[V?+>e?T;7שe4h-\Ak..P-u ^ >K23l6L!q9h8+P 薆 K,gDwdMlf(Aw3wcwEtg{ePKA h&P'yӥ֧Q@3 A\U@# L! ЉxuXHYdko'sl="C# I@;X<"KF1o̲>r3@p@%y/H l{6wOj*l}T̰1/syg,yy*go !hD=Wg/Y3/&#)ЊgѴXvMيR bQTeZϤ*jcX{mXꙷd=qg H.b}b`hJFn#[c0WɍSSa`zNucAڨJcck+ê# ýCB@|rzx"@s% ѬpQcׯ 5ysT<pu.7ޙ\f ev w.Stfgʻέ ̖QY;c3fKw`@L,aCE D%,?SRWF| @:k>um"H$0CqX CүOc2hJHѳ, !)a 14&C9E쒙`-vZmPr zggj#Cp:Fd{;q Fs\V=Sl=JZ'G֣I ǒ)ˉdr*e=4)8Nǒ9ǙtzHd٬l@ng yxL)Rg3i\_Ju4Ԥ, 8 3%w30qՐZm܉hf()6XgS*WF+m^øACA2j. M999ҋ"""""""""""""_T-6c[C]3:p]yvU_NpzJ@׭*0Ngj?g>Km7xL@O967k߉[:N!e\ftTKg<ߥ&yzM4]lP!:bHc3YtC23 ht>#>Kݟ&-8}dyoQФk h>O-Jv۠ 7`tи4+zχy? h> T44/wPi3_\) w, gf0}*e9LY='~AdͲ}6g*ssz@zYf힧ЗuҪ*43kAGޙA>^ Bo/3UgsA"h҈>9ZDDDDDDDDDDDD䫓H*UnO6L{HʜRɳLݪ hP@7Σn^eM`7˟D@csVg*AÖU;\U@rh RgI=wgړJ=rB=ߕfЦ>%hjg&)FH-8Jҙ$Iwf9iN03g"oLWfۉzvoK 7$p〷ϥ^ \t|!P-˟ƝP~8n;'8I*4p2e9-8%lҦӤEY,gؠ /sŒ@Vϗ8,*Misb_b(-*0 ЯS+ggN@"hY@WGT@:S>=6>o-""""""""""""#WfkVښI q g(SJ|:c=&k$`~&rjz>W@%du|*b/ϤƐ:AZWPu"+!y1 ʼmymx}jTaDiokrZ7VgD%- ɡ.R-W%_Vg栧Ыks3L.W?3蠙}F*s9ֺ h͝u9lAg>g}}4}nϣVwL@WT@9SgGq/%]>>mAshT@'`sU33R %%;Rg4T@g3U,PJ v3ϲ.V eK:R,gyL=+OBngT ;VbzVQo+>s3g>PɔTt&k9'ɂ>O #dA{w\@Zm jgf wz=WG.V|T 7(B=# Q\*3r5u+D@S5>uT@w -""""""""""""= !TtfԬծWr[=fVP, h3RaK}n/}Fʊ<蝻gY@+t<ʟyܝ%t/oo+aF hW>}hS;sU7Hg nmtI=ǒ(l}>czVgJ6 7r-g*Igd^>zcؙAzn(FI=Kƙ8M[mgY:Ꙭ1t3lVY!Dг=f0;$;o2?j8GbqP.gN=KDz2i940LJY31δx<3vޘ$ety-=7ST |}H]s#}V+@Ќ;J^_^۠5 Iq4)ޠNu =B@|R]@7;z]Wӆ4Ƙ UkVr< D@3 ܡ^[2Zmh/>W|F⚧RϼV? }4Jg&yUgPwU+-g֛Wh@!z]|C%9A !M!A]:O d4J!d4V=7itz&1Ϥh%\E@2X3/N> И+8#2,u|FL4 P=+3ЛFa7P@o{J^2!N@g{Gȵ3ta3z _ +ި}vI`G gGv '-'}ƒg>-Ч33Yٜg2qnI3o % KEe+seڐascJgj%wmVrXzc)ߖ[ny*D3hʁXZCt s=CG|ϰqwq\|EDDDDDDDDDDDDD+Ы*4P@fF]>+4Ϸhid?V5;]i &GƩJ"I@!e.oRB@"N$1`ZX"(dn.Z#(la4I=6F, 34gc)4 F]J-;=7x.-6)В}4gCD@o &w;a\.I{ >goĽ7RRtԱHgp6(h¦II@NYSI AYl<6ɚ~`ȓgfotAOc/5Ҡ nX|M^l hb7TYP_Hh3){:O> 3Ÿ2E، 7 hR.vu -""""""""""""= 決UCW旧ճDkn\)OhF+ *z=:41`S}i@4!t5= F`;p%U-٪g6 U{VFA,i}GG]K7Yue SvgxP:5Y<A$$V@SMm`33!}2d dLMd1%fwdƜ`Y^o0mN |g$kl1@vЄ59{$Y2 nF)8ÌWdIp PpzEz=DJ.^@Kﹱ`ҙzgQ1f_p/nzP7q=o z_ !8lJ=7$M=wQ7zƒ]A'}QިJLĵ/qDL@l1;!n;GT:#zfP-wHOz h3r&Kk)5g:6H3c$RbQP&ʐ3p%ϗ5Ơ  ݨ3[}7Iu`DUk}{*Q83^ycGzS1~cL@j|vxUYPzu=DlolPoTڨ,QK^_66iP`xlTkw޸H.""""""""""""""_G$o[ی-^wg[Qz5A!aeဿ"! hAO#Q:tn2Z1t4d5KYFE]Qм}k+3g@ݚAm1j;R,oe, hV\>lURe gY@P#ϼ}V hV>:b,;mZT@g&L@sRER, hu)0]lpȩr rh: Oq^?g&ỵU3 ]A ݡzwؽ sw:h3aԹ?v vYh@χϲGb:hфDA@Pm>}a*遉~2g,Hk - hE%R-IgvAADsmP `gbU7I>0+40EekJ<=o~Cз{廮{i6Q+DS[lT.MtEM47\ژJ!dۨ~o#"""""""|1.M^HQJ>_4w,e\м}&)0ޙ+B=#tV6%- bgzg熱#:<Sdճr*ϴdK`g-м&ƙg&uRÍ'B:HZVeg"qc,a3Kgi4 9c d-sA^rP!Hۍ3Сiāt2ꙷϲkK *F@Yy /Ky7+dvG{cn>G{vވzgސ m3qV,g >3'}H'R4 L|h 3Ù>î=y-yB XPgեb?re@u *7}n o% *M4VΌЯ6@{ycDݞomQ޿B#.<3ϭ-[KW]>qP`xMhu!@DDDDDgв}R@׭*G3Lw#htм^[EW-k 薆BU 4"<|A>5`g h> LmҧK)}Fƙ!gYqCe`\.+3%2G9MZ?Kݟ?z44:=R;B>3=  &β6УzfYWhhl3(7^>4m|U3 ힷ=[T\p!gsȵ+v ٪002Îa 8֊s> h}K%MǓd /?HL|r33Yx0$\>k'r>ktF@\Tc R\^ʀ* +d>؏&Zf盃}77oN ܭho}c.8!ׇy7h^~}3X]w^:( SW@ߕ&uDCKzL}}hߵ>ZC+ZQ@"""""""H^#=MDDDDDrzni`fyjrkVe#8]mt T][k^-nY ZZxk ͪɠ) ZnΒӽ- >w% 9>W hSOB@s};O[-gbigY@Q@:M(ts%a}9gfw6$bX4<!Yа%Б)tX!}th 8 q :N5rꠓ hi:&z^&WT3>0tmgcla@sԹ'vaβw>D#Y=t9Ls>ݟ}f}Q=#'RRg>LFRr3UYϓYyCanΗTH6H ;}f_6}@uϔ^Rm -:@%=( !' /~TL@}x<L@-7x| ^ZuD@Hgƫ>g hThۃN`hRYAzngD=;ްu_Ķ?ByPxgBz8 9f9}V3@n>RrL K>SϺ9R獒}Y}V:#L:#8y::J'@~l|kps y^Ϸ%@Spk덡XkXX"xmP<ΌMd"L@W"-NHsﭱ[c7Xw}]5R{IY@w_""""""""edEɁ;͟[@)Lgln434^lJVhtL@WhR蠉3ઃڃeML:cv'8 $ hآkD=:ŦtdZ t4i}n'CaP7BEkƈl%4 hL@;| 1Un?]oзe4YFB@\hw-砉}F;lۤvAޠmȾ/d$vl!gEϒF|FY3ФZ)#p*i<2N3)آNϦugZ,Nd粺sid$}>\,|!O@׌}&4 +AS\A6}1˸9+fw vxp7Fz9yc`獡[SBiL(+P(;lWٸcTi$oݔtϵ C]熺&;ZdO: Ͽ9IDDDDDDD d+xH?B䁈/.83Ƽbg\AZVg@RxНَƌ,Ӽ^*5tOk mK#}sЪv#= 蒃ANF]T@Y˻M!$ h*wݚK`8hY@sH(+t"VT,5ߨlQ>> ht8c!ƙ hϡ5T@ajo/fv~`^??M3Ϥك%ϛ|~/fRL)g>SMZm0w;pl8P@Kzj+ Ф9dmA [XQK3)6A9I00HN$ S)=r:? ۴tF t9Ld@3S*|N}ꙇ9kzZT_$WkL@S%n(KK^&H у= >oC] u>:RSLl/v9y|GLeF{@6*ZȚ hWGvLuN v7ά=6,ZDDDDDD9HYhʽ 莖AECg~f+ "ksZfkkȚU\Zi\*Vgj3R?y+;sҸ>lGc) t7e;W hI@gT=h;21AיA]{4~FU&)KOaf^C{+XrXMsܭ{U>u$qa'I54%MaDD[ ]BZP5c06F)7c2J2K`73`I@zF0md-%:o <%eGK؂>+=0d9|/"9hĘF^ ; {B=A;!Q!@~08"-J"fT00871$I>gڄV=St>g3ќIk34>5t9\V=:^i.CYxT/ԗCkګ;+,znof^:+*s(yfxأL4SUͱ[cC_8w[^Szm ◫!d%7G{[c} 4iÞxsH]tN:&rmg-r#%zm.+dAK;48#"""""_J@c3/y,Ye4J#( 3SkHK]H[]Y4 h栉X- hNCF@3uЭI-nK}t[ ѵqE4]Isq% Mճ;L0).9hN@c"V% h* [V(F¸.ChP #aC4bE!,9hDIZ@\FU72`8[n` 4m~ihIF(Q+qz~.EH3 hg۽gnfW-aR)ɀf >ߎyAwm()0A^Rl+)!Pg Qk20`xt"i$Uɔ\|*;ҞNR`@dL3-:qg2jLY 9yUA_*]qߥBeww \-P@_'^FJ&zBTAfQ_ͨ*y\PYB}N@fk馚2xMvWABZp`:%A3 tWcmJ}kӌ з6ߜBxjM"D@mi@ߖ1jS#);h$: LC tШMŒgg;6g+4$f]NC5ٍ@g$BD3@HI@#@X,#qc mdm54`JA*ܮ5PP}.X}hG|V/ G`8+3"gc.,7qKl6zL@o99I@ǫ>Vazdφz8ugFX{)+P@2t0j<ѣ.3QPp8fs% dp"?ОI$hN%D7KZ3ќMOT0 "3*3nFu._=ݰϗ|ߕ|Bp%O44j a&PVB9J(LAYv% 1A6nˍa >OC|PV^L2ׇ 퓅3!q._DcD'T#y3)F=Gݪ8+s}M6Yթ5u6I ݺ&4nt5f hZ T @ݒDt-)$0Ѻ= }tA h"[O!  h1w=1gW>M~m <>T2>3> j6a &~FM9șY3Lr?7/ΰTRA{Xۍr`q;\#Nä3}8hk۹C3 d<`׉l:7{KyHK`ƙ %vUaYr~n4Pi abe [#E AS"ccqC90#:@s<9R4%I1蠉zPM&;#td8%\AM=.{/L*/ZЄ+.j w"D#LXibbGF]-c/Q=>+&AqZG3rt6uu`BDLLtzL۠nѿ\'""""""""5lQCC$-= dFVϼ}VhnFD@p:ո*u'hZfhzB{COw6&nӘLt_FLG- xj&tI=;c3fX I;:8j:舻/ v؎ճ?4V8h&#rm3bY"a &M9 [&Fؖ4 Lgo[ ;hyאaD3t3.es:9]2u.c۱U q oxHP mzۼ6*&c!}> oB3lU΀qW4Z{B&doؼ7bE$-khވns=0I:?#zrxoq%;h3@}|DLLTxo^; ߊ;.F 5䞹-""""2]ZiМqfhXd% +% ݰUA7$V%`4&ykbMV=tLhKuI@+At&ސOܘ@b=qަam_ˈ!5% ϔ#(:hc9f# [ =17}ÀKx(f`0 W#a$@{qG$ a-! zgm%: A+!&@_JKHzF*4l3&/œ5sfЌU8A3 y NA;ylR>b1洏:l1'a˾e$wN+eֻmVM.fm*Z7{̯[=DVnƌlwx-=26}&M;F6G [0a_D?L8`C푨?iD GccQͱ8Ì8OU'jDB}hdw"{"{"HR}TTTLQ0atϑݤG 뾔뽔빘.eK\&t^u(@ؕM4 `54u3p\P*i@_۸-WQpyF–3y^Hg•ŎֳәөɵRmEtZDDDDDDD oH[uAQhhm* ׹lz⣭\dfuexMdt90izLni˸m{ۼm>=ë3lK0]îC+EvtC04{}!@P{a@s09$s$>V`G*XDu4:BDŽxx?PJas"ii.LLh4!X 54:h """"""4 z55 FLt*W6iZc͵ šqyuEdWҜAh-g^CBgc1hBVxg5jZ)ahc{F&!cG4aВ:d ma{p]h Uq< |T$հA%?5!1k!3qEn"ƝLÓйޓyD{Fw]>K*9hq((퀼 π4:l fAFllF=괎9c6 sX;-뜖1xhzlrZ6K7; PF`^u []m.vq nV~Wͫ(Dwt~m9~΀ծjgP3T{Á@P?9RP  UC}HppH?)0{4LvtXh dD9:N%:Ȝwllx1l\\p>U|u4tbB a&#/f[KV,@DzTdxñXxs^ ~_DDDDDDDD/IFVX!MLAS """""By h:nvUvUniTavYflɠvYvybͲ5ëƪR"R7.Fdw-9*_ecuks]Ko Ia3w+1t+dDSv+qm=~{opn2qyw^WceT@7Q<k=od2|W6_T\Vym n |.Hav!j>Se[cE H5H=k8n<oͫܜP0aMyM.և kmuAF{}ik"Jw6;BM.JZD]eF_mS@P~nխUkUBВ_еtr`Ƨ25uL]n_uz<׋8zdO?/_&ן~)?ӟ` AM B%W>]@3L@"zE3?/M^]_4Ъ5/GjW/ԼʊWʥW8^K#Ț!u” R<4K WVa[NiepFsMPmՆxW5AFǚUF"=a%L4Ou3eUORm_櫆fA0wzq婆t;k wS\7./HP=n^.O^*9 _K~Pe`\}tPm ͌"cjL1'u002:ЛzSBGz:M@ 63zcVo$ :cQoBAA1#z]Ѡ:dФLa1G-:`̪@S,1fl0Q``l4k7ͺMFd Z`MF6:4&vSlv*~ՉlulsRpݻݻrutruvwt+t#%{m``pqtJ;ȑ`1@@` q2y#3h(g2NO4M="Dj'>ՀyőH*L&2}4>TWZd3-g M!?SckGF5 d;|r}c\ޓ'?O iڟo~`M9/_ A-EDDDDHM@w5gcE@zEv9sciVy%̊+_ x!5Vʗ$V[/;U85K]@Rz$YdԭpխtkVa[Ѱ qq hZi_\l .%cZW;ف6zGGl_F:x5՞:WW) F7!Z&wҷVz4Uqk'եkuZV NCҷ9+19m6S8,m p6)vyl['b6ge-It#7Q~OTeXDUz 65ƸhymRMhtq-!%5VS")6XS^͓3hA1Q]E *`/&S b4C^d {n` z!{ߠw :z$CagW5:G]1g:GzgG]&WfwOfw&%8ݛ[\]d:}_. ײ̳C˞@`3/Բ?|63Mr+h8h8lcxuG%\dT5Nל>Y$ds(VWTxMUbu'wC*b c gS$?Dc9^'Z;z{x݁hSvӟ@ B%y-ܾ;O?CӟO>o~8 |Wh*/|y PGDlw&,#UϫFXR)p~9Њ%#˞wW_t+^ ,˳E/x/zV蕡<@^W|kKɠn~Y@R/Ҹ״۴֮H*wUZjܭ!co'8:[GYoG<ݍN }&G%k UvmŮik[͉J0:LmvSD:[ZmvÊX:mV{M:mHƹL@cڍÄ:]Fmt+0yW3>m 끰V#*ZQuql5Qm?kZ) I3>FVߟ5UQ.)0//oÖq =c/PL}Son` zs #&̽1st̝FllbF:77۶XڑW[m[mm[-6G+hhv8[vZowl4Sn4Ixvxq`պݲ\^}&`g-pK8[ZCv`h>hFÁ@}% ÍU9jHH0???8'u^aw@ݱКJ[08=P@HHp,p<ccQZ}(T{ fffvsMsG轟~_DDDDDDD/![oo{?'?棏>O>_W؋9hƠ}VLM@w6)3˓55ˢFV^r`˾/>o}yEڗ^Y_B Є Xb6WtaJ`Bpy̰  +_4zEU/ԼJRmRV/խA^vD2Br=UCTdmu eZjUi]iYBZר@{Nݱ_Ag 蚂5=u*Fn+_WB_c/ uSѵZ>c[O%^cv{kGa5wI'nwGttz_gG%Ύ@gD!A vt,ʹۂmv$ vD:KnO{u"do;OHgڀt_[ўoIS nVEABݐymC^ :FASFQ[`@S7 h뇵֑֭퐮vjjX3lӭfTjLa2`Ĵ\¼|Լ|i*`f`@XeˑM<-˫B"+Wl/l[Ŷ|ecyv ٵJ*lo;X{"~GxKmeO촯e_yWvUۜ+[_x[l䧳ٲbKö/_*^4k׮ @ |H.͛7_{5߼y7w~w~Lc\tBڊAc)<urs >-K^UKC+^,{ɻE+K/,T=tSO|zgy/de,^T8K_}w!th5A "B2x0ß̥,Yy j(3SW/ը5W9K >ʞ[NϚ=-ȟO<A Ys=ٳ=`,حkyxVUȑp~|h~23 @N5sYeo ~ά)ς|dlx{!g-͓ȧxR:@By!38M^bv69fn%w2s8fxL-|Ǟ~+VH&o}ҒG?z>Ï>Y4"g!EDDDRGݺq ԭL+5+_ZXrdKᕯDV}azӫzr={di'NؙKR63=LgpΓ11S$?f*x+]N٩dǔtTL~V8Up'TN@ql($?kzɡ|>pE˟~T;~WO?w+H:azgf(wQ8C6*P$.P<8(>8}ςW7#s< ls/%ɑ$Kƕ` wD O"= [89]#  @ CK؃3ML΢R5OG Wɇzpv&Fa.k|1 ÑH(G:@ |)a<ؓKJe?z睷gX '|X}[ BDDDD+{!\*+yIϵVY{ˁW<\O-{'΅r醍᮸FfX/jp9OkAΉ8 ~c]x:>:`;?'_}?Θg!ؽ@ +#ex|zG??>O?EAG%LCW ,V(3Ы' Ҫyˑ/zaꙧV=Sυj7@ 7g6*+Ypt$ WᣰzGu| !x*8 Lb4>]qW>a-? ]@ E/|t#diُ'7դ@ _fSq 6SlaNAfyKqa7x$g ܌f$0U\ħ}ea|!I/M _ ~!ypxp劚{GO~?O?o4;h DDDDDJ畯WZbŁE ;|깹gϚ7ѹsfΝCN ] $ JIyt3"?)v>; [ȏ—{J`h%TfuUN @%xg?|'淿-м4Z/{U@7.Yj2 VLFji?xqe=93fϞ;wsg=:w6%jcO?S0J{YS=3O>,z<8c1\[S #+Wf=a~ ;|pɵkz3~x> [J-|s@ _b _B‡,>ᅬ?_Wa]80h!~ZDDD+?/{qISO,3ٳgΛ7ksg=`qwy??7f& 1[o~O?bv]-7Y=3 a4_4?vkqo⦅|׿Ѩ wwP@ _ \"*5R1c~W#|ǿЬ"W(&;[kW吺5+2W ڃ+_ |%%۞{vc>;o.g&7t,݆ CaJL;@<cm䜇@ )bn4 W 3f>7isx`2z 7gϚ5wl`<a 55k^{ mOe|ܕ+zO? ok۶퀋nw>ܒ͚99>8s&s 3r}_y}1ƍP(2 7x}Axx]<uawLJ1^ͳ [gLyOy> 0{<8?|:&zfxA1^<;o]9z6Ưw=~j}=8k֜v,-&w?e·D_L!~c0/>)sgyӗB+  /Cp %3\%.=4p1Wѹp$\B pO O;w>|"+E ǰsd%(7ɞ˞xG'fc{@ax >3 ښ?ѻcօO?_f~Wm)Bp""""_ 5׿]K:2pnane4qT@.O`4 X~z,?(]=$#3zppܭk$.ΰ"=9@[@ wY =p, }O?SO.gl|۫koqyɧx'xzy3gzZǞ|gZ_k7K.{z}'Ї~Gڶ8<\_}uϿN<>䡇ܼy!83[䑇/<[<^bGg̘cO,Z“?O>$P?@ ;t -}pi>COg>8glnu=o.RLN.pp+ܹpmk UϏ,*7-{ g\<k"6 /Z0z|w~w!!EDDDD &W-|%E MO<^;R6/xY+\Y* x1I0O˸ȵf`W3*~s. \-|{?yӶ痼>U+߬'X%؛o~X\`׾v߶;~_l߾'zEW\VMp'w'||~чzsMvqu[_W?O:9yg??{vNlيO|^{>__.>~?;te5p t$|so\駞[7>??|n t֧\7pŇyXo&*i,*$^a\ <ti<\0~o7/3__o/oƢɉKpo2k~ǜN>oڴ||hŊUG?wZ7wknt8pkOV]|>hkz?{o ?}Θ}i8C;?W\Q͟'( sgCg#wCnJ9 3܄ٳ,fvu!;pNx:/|p79e̞<ga\8;? Gy.dKK^~W^|a)lawzأOk÷?-^o|w߁KB@ï.!g""""_|6 5u]4^Jdˁ/x^\h|<0Z/rv)%dm\`g p퇃g͚B wsߦM[>8q?pOsys6lɷƿ֯G?z o7l裏644Mwgy^r^y~h4 ַ>)ضm#??~7O민y848yԓO>9w7xn_ m2ŋ^D׼h 0-c؅7|@x<]~S Iݟg~!\p_~ZDDDDtOښƕY~y˞wSS h6!՜7 >?#=a =}$܇~Sv%W+]`裏rzorw\o檕5 ᢙL&/^z?Az~>z{TK/;pӧ<裻v톱Ag?311M6?_9|0={ee׮]Q^D3g ǰx}7e^7GXtw؍FgϽz3˗`x,vׯӭ[K=ؙӓn]?[:Kr>~-qwwww%Cq  !(PZZ}&9\n %m鷋f̚5{ΚOY݊ 4TfAS)).mTСCG>u{fI@2I ~]o`] MV6% F#ؽ22/oȥ"8oH*vwy;c8*u8xEE%qq ?BP(;IDAT?bee&MyG6oz)QouyaF}oQ&cL9\}љ'7|3f8dg,[*t7%&ݞ#FsZ{srmӧ_LLȑ?3ϬZzT&Nvu֭[Kk'&&O ~tI~|n>;|pV\.WVVH?;Gݭko2>LFdDC<~ /VT{/Y4ߟ,QMsޢ S( eGQViYSnn~IIsKMM/--)?d:|^6a 83 ^ W&&@`䧍5kM]0h =M)1RfUXbBʴi~G4~*O@jZIIII)DGZ٬X$ݪ̖I hs |ٿ$˾l>QulRuBu?Io儹|uBP\wlU9VT+q]k֬8ԶM'o^$?\by:jѣroڴr۳Ǎ翿֭ /c5N^oƍY7x7vQ~n<Цg=?H>)5nt<Բeڳǔ;v|ǎO?_OK(=ƫ=E7l_vSO=?|K/5i41196617 s,XX^ohc 5mKe?0W%!Eccv7W__Q݋cFOԩ۶rftuڽKO k]1p#GGjW_}~F~䭷B)恃}cv8[t蠙HAw8B?7ۿk>&&nǎ]Ȭ^z„ Cg8>}r-?BP\HJc{s>Sv??s믿vȑw 91/{wRbjh?: P.W9¼"3}J7ϪW5X0Yƪ[ѰQfl򓃒n\<F8-/.*4ߥ;:t葓'Kxk"oP h%%%3%ޡЮ֍T6٪tQaQzzZrr*uhmWg`lZ<+.6̙O?s&XQ^zyyݼa꜇iR3O:hKP(UWa$ԩSg|8t%Kr<زE!CFpR=pVZww}GLhڤ墅K'MZR\ppZf}?>pӏ JK+oߎzvbbbtv-[?Ԫ>}}"#-Wa+rOmbҤ)I#F'O~饗_솴4ϟ{  ??=qTػo^{E`LnjXZR71!977q X̳ͬod4K~EE ~..y5c+>13|=4GM@\Iq>& BG,{P۶_{5N7o{6Ӛ;ttM4muuֽ~`V*/+1buyΜyȿ߼ys~۷o_| /w=ē5k*3Ϙ3qo޼>7lyVO?}饗hN>-\Sֳoݻwoeeell/2eLHHֵGئ~z}=p^W^yYEE%8q;ubB* eZͬqB|Jyg_q$ɫ96Ǐ >DZۿ}tbM@+ Xa$&3nϞ?W^y妛nٿ}om>66~ŊϜwퟕdɲ3?hrrr|reˮMNN-**ٲe'y쳿vűc'ΜG5kΎ>;wi.11aΥ_}k]@II)쳽{G77nx11q'?'OO6cΝ(7.L7>5k1\e֯j)-}?_|W_}㌾fZҧO@ Z~^'UTԽ[ 2gS޻ƛح[C1ʶ\QQ_g:u3g޿>P[L۶ȔׯH}g/*_LW^%Idtᯚ?7>.$9=믿~wCx6j 64yJaQqrJ8oR&-?BP\>_̨QfYH26mZGiI _i?E=!K@tD223rض KJJKK/R %%q6MJLQ h%uïԠBSxѲꮻab,v9O|*'@Ϡ~Me2͟:VK@^w^JJJJJ! hMfjA۲tWTԣ _aDCU|HK5/3*((M̘L aFE|UGB| %38M_!*. INNc"LMLkǼk Ӹ|!f`KˋJr1% b(L6Pm) 2!H}Wml=v̄scff䚯HLK=`ˠdп ccc؀?:|1"@l=*,$?p>d W?f䖗՗T7jsf&e7og}4pZTS(ΟM@+))))Ռ~8wK%%]-ݦI@h8Q_s >xl-[ zu `֕WpjZP(?? #'R\TS(ᳩQqIla~_,Ii)9C u9RҌMlw7sZ;}={^\ɧZo~N͛8h@rr׸̌_d1"%i 3Ӈ5&Sq8I ,( 39{ s)?)L(&#u Ou1|O k~7pp[ 'rbYކ%EMfu3-WJr'VKXB2lGlC2f LFBtaP0-?BP\$'5޽'K eѽMV>o96ʹó#$&$v 99yEE $/ ))K6!ƥ"%'ey_\VZA7p~矿ʫ~x3k7kI/b 9k*%b|\VRRRRBL@cTsFݧ ,PDоbЮvL /3K| ;__}MaS_ǟiZP(?b!yf&9qFtef9I~g'1Hk(WT[`ы/sjPI(i XH%jD9k_3sS͒>[Ũ`D&A"VTK3VXr 4pfh:gC-_0ɼrbr-3MJLHɔEP"s2`jaa7DP Ě˅D2lP-?BP\ȝf&fgge岇p+/(,,*;oJRFzZKBuѣq:_}_\p{QN621x>B:;y 7z5lVQް-9h3'?zƍr_|Y, ?O.|6Iϐ8NN@w6Г/mWtl|/tei-Nn\1G&eg~7߰]/7~s{)E>"M@+ X yFIʎ&M>7%3))I۬|>'; F$7 &p,,(-).//ϖWTXSpb`hT2$:E(c lbGR!MbPMJ dPyddN岂!ԩ|)q5Ir5x F,Ȼ5P|?aj( 1 0-z)7J0N  S( @5H933;++';;ĚM;' ?077?;;>2iI;yhH/ 5 N4<֚o"+nֹB{q5/(}n԰Y+5@iI+/1s?O=AF6l"ygyRJJJJJ?]teM! h 謬dEe͚_8sZ[a>GqBP(~~|2BZyIÔ-$l٧8":''syL6mߚ"z}ɐedPD,IXҒf8aJv;5:^FZL33#i)j:#> Xh[)p#dLʠ4IӱpۜC0(Iz ) \"b$06!I &e^){g%ȇbe|uy-LDD GVKb6Q-?BP\ȭڵ#G??On&ճgcǎs&+V\ IJ;p6c#';oI{PTT2 3TmLld߳Y Uv&7DRTJ+ozu7~ >r?/>xÆKK+3ͼܢjR_/ͶfWh1cdgꫯ8(a B\+줤Ԍ䴔*%I޳gPH^Ͻ;D2=e|9XHE6PB,+G ݤD9ydsd )^ʫ Y*b3@zVrRjrr*LMIgi;WRL^Se`M x1 @08'ǺCR9L!$J4M(Y̚P:0\T$!a $8IxbJ.:U@{ Bqy hLOzG1OUhÆ uD=lmڴ sIIN;%zM$1!% c)C?Bw>>z>~7}6[OUa&Y9˯R),(6u G~I&^izyyu+<5C7Z' . h%%%%&=d*yc+ڷYFE]ym٭ltzeNhtިR> 9]sLO?}ܢ$zoyV&LM@+ 3$~jˈꣳr9yq. ?ͧ)lef8,=8ϽV*3a(2*!—_P(J`;`H1 ߨQCb136mS&_H27n4 ]o6?sk s\>2sK K.’ܜ9)jn_HV#[TX h3f?O=X&-Z~_'V>] b< /[> '!8}M?ds\8zRBO@sZ/}v4(;I|L+>+- #L(,(eLHHKLJ2b\nojBP(`q-rĕ͝==1.ll4y)cBP(H ] @&Ѝ7^}ucQ8)&ÆnÛzsdԻGJϡ3=߄ ?}*#:{t@]6VςBP(D͛#"ƍ}֯Ć޿aj)+~ 2pJ8q2PV2r|ǞeK*6^}JVf^iI]yIE׭hH$Ke.2D5hZIIIIfOM@1]\N )lowq7-*߯22ۣ_Jc6e˖4| BP( ltsbBj'iʶ;W=gDP($ؘ؞ت\No>N.%.6)>. &0lhbD< DjYa 5lk,)ҒToRR\STho*4T3I =nέw\$eV ;\cДz)e+())++a())7_QT&V(?nRbi/ BP(.+ػě7=k:w)w`|Q(  9usCIC(kh¤tIX"ck5FUŪr>%Lx"R D y{|MӔtYi=y|M@+))))Ռ''eM=^N:;4;YBBJ\\RI@,!_MPa?6*{޷ BP(˱ c{tӢyɓp-3g@+{YP( P.Uv%YR?Afzdx9fǙ9h*"~G$%[s`$) _ !d$L?ELq6Ld뇞,)`׆SVZ<' aR蟚m-\v/>wKz.ġgv޷ BP())Mm}Yf[TXPS>KՍ( BJS(jFûv4ٿf'KG!dT0<Ɇ C@)q8sA |ʰl%e!hJP7hᔖ-/T}KLYJJJJJ5mWtmKΕ:Z:\С\оMgm:Mi-oRw%^Q5y_, BP\^|/fc9u*Z+ BOş1Dd__RZR~^]XP]+ Q5hZIIIIfs$%':}P( BqQm/ATSW( ⟂jӿ;8KN9L=-D.5; h%%%%ߝzq!hM@+ BD5uBP()=/dhHj@JJJJJ55ݱn„ Bt?H@sН[瞀;~ڹehTBP( BP(HKHLL8qI̙3|&OJ@q}vvotkt\&[|Vf35ZhBC ʓS+RB/R( BP( BBfbbJ 7nܑiZIIII"tНZ '[7ߤ|p\\Rf:,;etmVBP( BP(4آ-Æ ZIIIIbЃ{лmsВRN@M6-VZY۝ BP( BP(~ipEG[j׮=lذÇ=zTJJJJJ; % FT JNNw:].4(N/yBP( BP(D#G9r$>ş~ h%%%%*SнB hAq.=[Oix|ӺiEQf] q Uak8d6M?k]l~O 6SP( BP(p̷X,Ç?xÇ;O@+))))]~b^mnmtm=;{$O.+}i6<r[ls%ɀnmwz oa۰hpy\N is:"4t:0Vegل;5mspڰ>Oj9$Lєh^ 2[Ur@ ٔH|ȿy|pX]P( BP(:p8Ç';org cLS{wg:wȅl&NwumaxNOVy𥀶7|N7pG u9^ǰQix.|Nv8. 6n8 '>969}>&HҙR2T`Rq3sO# ]^3DphKKjb^x~T( BP( O&jF?9~ ..v}&' m vvp%aE>oo~p e.zlXG;ðzEgDhkުt.Sd( BP(  M@+))))Ռ~r I@95t-&=֞G wy0uVw獌5J]1 ɩOxxB32"N sZ\#9^g u~tl嶻H7>+6=]Fp'&[_CoذZFٻwd~=OV$WVjbUNV5BP( BPӡ h%%%%?$d&ʹChA v,b&VyVcSbvj{[8 TP4 0v<.gÆYzh7&iɊ 32 7͊:9jwӑ~퐄s2#tmn32v𹧰;D;tLnk;ulK퐟W=.cMksf: TySQMBf.*~({kWm{3u=.>1:JXrW[.UU.uό;^ap]ThZv/`}ׯPQ BP( BiRa{uX޽ݒnmvmK9]T9CYZh|Jᱻs87{\Q㊎vDY,~jDy>ݦ<}P컆ll^v3DmNF,.[Tᴹ]߰Qvas-^e1vvm3۵r K\0un9bbN6ωY'ed;bhʰD(pX|h0_9q!X穛cAA;[~|-m X\ X}ab _l6gsܑi؝h_4<ۥnwCT"#%?t8-N-`Dv5u;O,+x͎bnqq /1M-:ZN$]VuQQDX9n|`%6Qx^vDyywN6t #0l؈7KSz΍k?H|t-"" a+ BP( B h%%%%{sT{IźfpWK@o1L@av:|>g:k';{VeڜNgr\IkZ;~aw6˰_ck9<wl?`1:x?> i_zyze7J_;9fۯvZIqw N~j7芈mX].c דMqzkym .mDND;lxߔWcu{6_H}^᳻NasPD'`08ے\Dnʢjc3҃ey.ru:tq.r;^W+`,n&%bBtdffjG^15t5jk׳&Lb I r,dd8ƥ_ !p(|uFOD177X1-JP( BP(?N[VRRRR]*{N@hlPzN9[>n2i!hkx_Gى z?15sܔ& jix\V#:ﲹo&&ZVX̴=t:c|g=8l„F7qRK%>61Щ̈w/Z5;{ˀۭ,yؘ&ӺҺ"aD)nsϐ&{\)>O{lԸԎkf筙и_(qVvMSn;aΦIim|>7hILkĄU t:v{nBcok+K^?qN+]7fg?)G O-[\\#?p` GG[KJVZsmw7xm/ntֳ;) 6&6?$5)4;|M+cԅZ9,o{NG7MzYfmN닝XiZ>;7,cVmm~ޝ[enx:IHa(Myrqn.fU6zt'c$3oY;+}ͬaH=sln1ڤ6YE5>%1yq̭o?]ӶNIiq=ݳȹpAħ%nuGtF oMS LuT.&YkI f=55fa؉mFFQQw9曲hpE'bz5NXgȨ${HΞ1~ݯ,wz|]C Iwq[oѣW-׫bݻo׮g6lWp뭷>|Jddt\\o{lŊرs:ɏ>o٩S:u=sl„IeFxϞc+ܨQDI1ii ,|cɩ8v{k׎(,,޴i FڴiX}}=e˶f͚׭[n뭷i90G/R BP( B44T3`zX瞣{ TAwm;'{>6|.tx]VE]JR$gI3SS';l"}o2csx݁䤴F)N{]{ zj,^OҰg%vjL|pb{T<1۪0ang&m^4wr-i3qY&O7u\b=ږLyjJ|3Hl_Xun͕{^o۷I9S;Z=qI+'>1qGD\4e8䤤̕M6,.a\1>{\o"o;({a 6n>**u#))2^7Iꖳy~{boqGj06_|1sT[UFe۝Q*yq֬90 ;w/Xv툂]4q76lDDDTݺ_|3f1Jv02ZE]yٸqӷ>8e4XRRwᄉkbs~&g, :xpbb5hOAK^x_u\jذϿ0}̴ Tpy 0%6)ϥG/R BP( B44T3Н{5p%НUг+ 莭wh5M IIM8NgE>bcJ{tBY)L/=?yAiD'VflnQlq <=-mǴ33V)xbji{~9ޠ71Y/,Hgux(GR+'MrbguN_=&{1qºIIrKajf>=+}ۜ'&>1-o<]nwfJκIwHoL-ܓ:X L~rG99 Ee]戎2SR6LMy`k=+ĪgusStOh\ښifdnp]v3:{.as86omaܢq#'oUUZm;"6}Y,謬իt-uDرkFDDmٲmW^yu {ӧOλG>:g<7nw゙={[v엖&MyQCFEYטT>wG/R BP( B48giZIIII Cg]*ݳYB ٝ[T9JzpRJ;׸(-!֟;gi& m?[)>{ /adӴM _]v'=39qmR3Y}rZ=Q.7#6Qɻfd 3"w/+y|JJݳw͎,ii5Ӱi'66!O4nt#"c2I~dlΘ; i8]?$grrm[c5<q[fe2aخte\wq:2SVK>[\ F1qc%eN`Rk8fNJzh;mi1]YӺxz<I6}vl˯7j|y";ЏJJbի_0`r7pS%%e7o2e]B3gξ7ܷoܹsի_QQqpsԉlРkݻoT#wzv bcƌc,7qLR :a hЏ=r[oر3kZj}ɓ2 7o޲nFF%,){ߢ BP( BR" 螣{ gK&C>K@Ͽ`m NOL >cX N򦬞Kv&/>3eNGpۂ6ōl =pZ W|\#c֌w%8=>OnJ”0|đm3L{j|fnte⮟۳Q)eks bq'x gE[܇=6N;k 3Vxk;ݩ)L|dܾA Law$p{+ )I2#}ZGqGxSMLx`c:Y3ܒ'z4L4'm\[rЋ)5j2`tBce7Rhs(I^K[1a|^VXXmێe˖KW Rn.--߳ c 4zg͚SNdQQ֭ۧOihݲe۔)*/xΝtHOϜ8qr˖+*kSNg,$[hobkGԫ#&M[ y)4hG%èۋ-yᅗxۤIa!n;i樠+6t}R( BP( BJJJJJ5טޗJ@O=;.to?{9fVc)Mh^HzBfXmmN.UyV=gNgp拋u  h_Xۨ0hvʬss3eңL58h{Tjm⯟cn#FeaMY`VŞpl~7H?.mdq[]^fwD&Rƴ/_;+`IZ4g"-NX-qǬ%l̝'w,A30S掙ŷ L1m플'ZzN5&%inc[LnL&>8:mfI{px[;ፊe_~՘1$ = %U.Y9͒ɉ)wu7޼9JymBYD8$-[BB 7tAtnذqddtEE;wϜ9:CYs""B?Bx;6lx˖7t[ohժ5n''4 cNL6$s{LMN@1%%e͚Ϝ9ӽ{O|0_~Di~'O/Z&Zd!Z2طod?}R( BP( BJJJJJ5AK@n?=ha 3=u};-agG&Ҝvsx<^ow2Φi K:+^eOnp΀㈶۽QqN|rJ€J,D$_ُLL];-x L &/˜ 6ONmm%xn}&w-0'/v9h39b@#>oVpy=~OHoИ''7;Yߙl1QgarѲk\ٻ^Cӽ#ZYus]С;EE%+W>9zXņK0 ĉ|xԩ={^gC1%%Go(6 ̄'Oč޽GEV( BP(4TI a}yYO@j f ħe8NtO@n᲻~K`l "%ju8܁@t<'z݆t=QpXgFy(KdH.i9qmX&rJSsVJ||bՁ .a{}>p~c8.t}%H ].s^pGcxVE}Fgb "ynOauyc~ӈ3^崻lZ^I4<1X{#c7c 6CTԩ:B03gLJ)(%2JRRJBBRLLbHI6M‚xJjjz0+>( $M(fq ..&2*Xf L!HNNMLL04~<FbXX+ Zb+BP( BP(j)RJJJJJ?H?_\ tBC3m>k6g(fnmDZ.nw=x{Tnqx]k"].{-`q:.q܆:vf=~GbwQeu]~!=1=8oi> X܆p9Qs: #60|Nj6~7muq6jxbx#Hm3(A+p,t{P؜V W4ϰ1 aw9Bo=/ja&/@ :uz{BId3+bbUZC5L,Фzh!|Cؤ ꑑ"eIy\2_," 0v8 AE&u8GzӅ cI&IoQ BP( BApR K@WAj7g9=V9k[LtBC]Np/5k;N;`x\^ 9X\(+ >s<:}[a>7)]Fcszp.t 0fp۝naF:ݑ.n3GncrG /k>k16Ï4bޠgw8~f׍2_96g4;QNsV {v#0|rvX#&;=6|5;;Į-3%idNzфdiq/#@$5uor1WsDG[͹>_hSASaSTh§"PK`DA&fE:<[-bTP#STKJt.* R/˓BP( BP(jN^VRRRR 輬oEOw fZ6ߡaXm@0붸 5|n3pDͼ\=Hpv^8xq;f2f 0\|m1NOxuFqv͉=e<.Js8F9cqxnr9#=^;yLnpgI|mq-n;: ,c\^m8g8}os{f48vq^rzu:. 2'Oq0`uؽ53 wVpy v=v3m\^Ƶ s˩Ǵ 簛ozv ӽP|%HnX_Xtnx |+0\n9sx7̧zQ6cx-pͷsxGҬPzy!]ulqVNivQPUS y[SXQ7uxФBޚc1HIvM ʳ>dꊫaW ]0tI]L\4nUB) BP( & h%%%%OJ@wc.+zw\v0ѧl;+8ui9c MINwF%o(p@L~76gfL)Vi 0Bt0[rl<cg+N"p):ex BP( BVRRRRMnlg_ݽ.=G8c$ޡ'A.=L@N@.8ol BP( BP(u h%%%%ϗӮjZP( BP([hZIIIIf#0˵s7нfNֳWN^9kɝM/ h3 hBP( BP( h%%%%OJ@.봸oE;.=̬PY& BP( Bw&jF?1}.KuZؿ~m?OyfPz*J BP( BP( h%%%%ϗn^v5P( BP( ſ=4T3;В}t'{ hBP( BP(] h%%%%OJ@w.w\Bpի^mgl3[)ZMb|ehBP( BP( h%%%%?6?v3c=M=xj!35hؼ#P{oBP( BP( h%%%%хНzQ^0=Ӣ sv}~uAV( BP( VRRRR]8ݹ^VK@ 1oeـN΢8OнQΒw@wm9A BP( BPAJJJJJ5K%ͮ] (``:~v߶3ݧͬҽń 4P( BP( ſ4T3h}LWpL a] g н*ңĶ kZP( BP('hZIIIIftts CgO@?l1/yI@kG9[ BP( BPBJJJJJ5%2 e;/ssN@j=UIiY'5a՜ /^LF!㠚 + jܨ)ͱJ{jKbLykV005܅{aŵw߷l֫ͫh\0>g\P( BVRRRRpz9\7w s9:}v:frVc4p<T$I>\ JXVfs"̰#b4ELt%SJSvL^XQ.Ä.,~XWKGt:n2yx8/Qdag$%LDt)F ӒO 揅R8aˁB)e5 ,B~NLA@\d'XEvIjA~G]4#2TK2\f$u1+R9s8Bu2".G@"#2ir p jt:jv~ PT( BFVRRRRMo_g{5hjሹ,;i9knxPjJ9KY|J.9ӅT$)9K8%}P 1 d$.,% l^F pM"d:$/ 1BEHXN&h` Zѹ WTmXR: KRKL'e r3)\_|dMo DBɤ0ߪ2H u.k@:bpsI]DQPu%)r' Oz8@Xp2 '0k|J֘PA1ꨈ%2O8/I% Ę#MD܁WT¦($BP( /| R S q %tY$'w# fj;g)'%'3qPΩ>|h:]ᤀZ LNԩH*:D].T(`1T@(|T/yꔢEʏB#M##~1ԩȔV/%fgC'Åp#< tׅWO ]T5{9@yQ.6 D0_8Sgg(% aN8,/x,gY{KSzqR{04eapDFH)KWPq*b:2aUs /eldܰ2eTFh"CN0f$q/BKi$Dec)BP(_*j h%%%%OJ@Ox݈KtYƠN$vU5ݶT|D4:qs9!.ɭX,69a^a9KE8Bfs(4ca&F ,HzE *+|H@]pOpd2?JfoI^2w^a=* ! _ 2%4F |&IR{/Q\. A)T0^ DOXWsS g9MYua:`b rK#S&L}HRFJ!A,#0B 0!Ӕ)PJ=<#aKiJ)#/%_P( iZIIIIttc/T==|I@ n6rMp>$m!~@EU0E.G}|J8òEKT2’/ẙdU&ք*XG]? XF(4Fĥ#("KM&ⶤHnqh\( agjaHG͈(^|2IJ` ^0xBT''dh)!kQ'tIlp8dj2eeS@"*T|oeH.TJI0E &:@.:LֶRrA(W24M2(1NhQE _³mJN AbXï&#"T]=dP P( BK_~4THC] Kv](` V7>sV"Q9GEYwn+G}8"^5VhQRG^XlʃtyCzA:D p*b922#(Jֆ^ 2vpju0MɘW4#1LJBE"#SI>L M DrC& +0~II)hň].7|8\;Yy!IA%sA ͧr}aʔ4 Q)UB ?:)"J].! Y\YrALE?|ꔵkG2| hꘊQ:]``P1(c;!0"c>J,Д9.7P}H\#f.fΜݤI3LI!Lȣ9z̘q ;H򓂀BP( /RVRRRRAi A׍,t+ 賯n7[vMd3: O=--fx|yrd%g{ KJJJJssMalgePNOLNN,XXXJyyd 1-8ƸII)%%eEl9.c RQ`QQ1JG? Ą 6e,x"0z#2 p:ፉ&){$u.%x`0:n3ֈ\&|8Yώ2/8Մ^0.R2wbeq`iZ7J#t~Ν;C\2 ˪s{i0:+YuOb.1>kjܱD_E% ̑%B>2a,iZrHHHš(ʵ@aI 7I/qhEEdi"%/fjL^(X_[ϔ;3jݺ/k׳L?""JaJvR'8q[oӄ)TpP( BK_4TTЙ?%mˏO?qߣG_#>>Kns,55yYYs.[̙w)]KII[z'|zIQQ]=zII)k>pb/@366;:s  5Ƹ;v֮.\dQɻa'2I}}/M7݂?""n[l?~ j"Ѩ:fZl޼uڻ|+ΥJBQRRv}:ީShlY?q`w/"LN$Ī2)lVK"sSٵkmvӏ]V0~P|TS9<7Ӎ3=]p33lذN:_pÍ0#Ykժ ;w't6meVҥ~AzX|w-qVa*o 'OڽNֈnަM;\pzyY ]5  + 5IɮY{ d=zk%PǎGo.ԩ&} 0BaBP(_*" h%%%%OJ@O|ȞKv[Ɛw7܁ 8_Ovr;4plQ^'O͟0aҙ3׫נozBBcфX` y1 XqoդI3y.EC^.4b3l0"eԙ&bt!/8Z0J`tDobk un kM书SN:0Dqs/85 䓫ڵ#ԉ4jg:a8"袅.aY]e]]f]jj:+94 |Uְaj`%]V۷)o ώ02Jxyua6$pDa|~0SL"@=|]PTOɔ- ҔE(baO&]4{4hЅv:JK;t[:Pgh|7o^$fUnBP( BK_u4Thi8ls7tܒQS&{-}n '3wQ=]%=/}˖˖-?tHƍfͺk({?ĺuO'Z̑511qڵ+V|s+W;].#!!iÆM{mN\x7_{<&&k4,Y7o}ŗn݁IIIׯ_t)YY9=g#"t 0 b4evW,|h+Sƽ3fyBOϥXq}Ϟ LȻ]2M ōkrs"#%+J~~!Z%M㊷rNbs<ˆ&nW E2;.=0C8f |C 26EX`SuK>}-Y 0{w6kւ.FK/\>#R%C_MP(  hZIIIIt~}w3ϐ%]2v |?=t䤴P̠q,}uwWі~sl*..nڵv'x{~uONN} /e8۹L$XIUPfffZ;޿@z 7lXh"}#Gm, l=d0x3g>ӧeYDEYK׿@`&Fy <ǽOkÇNHD~{l'?f8,0#_M6_HvXcLb[lvzvٲ7o8qrddtIINo ]zzK׭[7k֬~oڴݻLG9zSN? C +a_m;w^{ .:q(=H@?~"~y3gY5mɓoU_;zU>:t8ƍkp^}&+wO&׿Am et\f'ED;+y|V УFyŗO:X6ljѢL^$Th$6_=D.S} ae=,]z-+ SFFOV8n(2 %sP( BK_4TpsqJ@* Q](= 4iK@'y飣:uOyu7~3f b草[h of^}nᤤks=EEE 8zeO:hАz6o]v5io CG:w q[^ۦM֭ri}wҤ)LQb JkI*S`,W}[naF .))c{@͛\z޽@k=Ք. oVee"c+酏ukժ[bmOŕ⊫Z͛"YZZAbHI1#f dȼ)c1 y59~$ҥk$ בp02{_|EVZ~ B,\"g 4GSc̝Xov>p` /yUװ׭{&hXfmU(^}5%\). 듫j՚1W^$ WDžbզN6i nf\;, .1k,~ SIH7n̈́UTQQolْtmV#&&!--'شi3J2qXj#ˬ4ET_};wXq}v2Kn閜ƍ 1zqAZVV6mmiF 8)Gq `aϦa\bۃALW>6jubA3(̋MP( hZIIIIt钀J@dܤs Isn u.w]s hGnrKXlu/tE^ Α>>>qM>%HeǏ9so ͜urr fΜݹsW_}AFWeI00`'XiioޡC?^`e3bĨ}w+fܹ;B|KṈڌ`mXnL6p8k׎@L`LL- 3fڹsg#"kjy6l*cV Wmu_ X%^AVTbbܹY|~BS~_~koLS*f"hٚ5k& j߲e%1]++ n?0aZ"F0,+8χ2h^+~[(ך.R'ru`Q&4z%\4i N$S,TB0On BP(PJJJJJJ5K<m&.=!<ѽhxR``U:4j晜)bbƎ#ܹ^v=Ϸj՚:ťO?|;k`lZuׯ_mifO<c7Ν;?''oݺg̙r哋-ϦȸXt #;7m2oނ 6͞=_p!*YY9/q|@jjz.ݞ ud) PVᬡg]J^}!)QS'2?p߾IɩD˼sy!GoٲmѡIJJy챕wu"d zu ɭЅC }5 رkʔiHbӦ`(nݺuyVbF{=[o1ciܸ޽z<Ͳݻ?~Lj|>A*L 2T™#a)xD#B hVc1R)))!Vu֗]` *+|>a/sO426x!s>ԩF__ѱc^۾}Gɝ5m :wokwqqK`:R(MQAAQ8M36bn1JurM040G}g6VD2Yq)ej@v޽~g'N"9v| "Ph䊊zHqeo~s!q)6jW_Y>r\'O$˓'O3g jFAIqu]oСC:u!r+Dy󖲄Kz~}oݱSZ"\NFEEu]7n>0~5ܓ0ڵO} /CGl߾CjnuvEa^Z#r|Đ$11j`\+//41S|ܱcmݑWXh1Wa$_LY2wx")"W\qՒ%6nLleI0e|u҅5*Ĺ)]u5'OeGhӦYJ0_q;XQIzYf\ĥKe22GJRahŚDkWZn#&LnɕgGH/)B&]] BP(TGJJJJJ5\zȹCFͿpZ* gЉ@.ř[SO{8ϡ~a{=sY,֔5k,Y[zzw4ib/gHJJYŋG+k>=BN0p'NYC9b226l4oƍ?أ . ^{m/ AN*jժ5$۶mϼ:vղes6lCsqq;99+W>yɻW%A0Y2kegJt \*1+Mv7h"&ƥDuƕe ֪o~s%Ƀ=h׭[_!g nپ}G넵If\S`%PLJ5OXĶ^䣊0x͡C`(<^>#̫YL+b0{(CqoʔiDԩnfb^\^xGgU03ge ,Mo޼Y5%۵ZVV3vݵkHW]uwz|M3cg>Kfͺx!w53>wĐp"zr2"q7Lq h@ +B/k 笱#h!J|&MAEV£+ā)/[|#J0ҋA.\VlrC†]y-o,yM]pz%&&㪀EKǎ3X ,U  &"z`h^I0lHʟ%X{5"Fϗ,YjBGe,Xİ;0e BP(~ێ&j@N@w3ЃG1nwt)t+8!]yӦ?{/55W_qq ѡ@r˭7nnذq^^Aǎ8ԯ})))W^l銉132w_0䟖…9pKn\/Ĕ p'D$$$w/?yV|ƬDڈh VZ_y|ͷF#YE"3eʴz޽#GF4hh䩌V>^z镁c7бRRw'%pb0]  xئM;C'$wuΝx!nG8-0޶m{pxT]v]+nc:"""gY/AK͒YvժUؑK/5f.|N?/ݷaÆ׮]NHv-lb1#&MƂ32@04חujA0(ĖX?aE4hȞ=/˯۱c'R[XpoYHrDp„IX"?],6̙3o͛ĥI>4ђbϚ503en\CZemp r)1H4oCF4dy|d 7ah|zQ8PPP)t#"0snɓH2fsX>xQczu>|e蟴1-9tر{s]va&"PQQC׈7xN`%Ge9}LM66mNoVč"/I+)BU~{O 1k׳,$U[z-8p0Zj ȳ ;Cݷ|y}zcNw5/CG}+'|c W^yACG;` 5nps{ B۶nݺoߛĪ~@9&\ƍoР=0o<1čmv0;~D|O뫯M;!1u] C 6uڝ[ 1`LJ5Zn=s:to[̟֩My *8*D->),lʲ۷z FRV4E=:9DSVVcj?{7˃iժ5ӔQ(q`-"V\  ᥋OVԹYImT9&&~].mѢԩSvҥ+7j7L9"ܼyK>/ $I}„Iv~;6n ?55}'-[a;z葙3g#o9:txСifש"O8{C cćxhx:>|x4_O8fF8nS. 0@&99o߽Kb0M7oѵe6Ƣ srqhS~O>j3᷿mh27wq? +ڲe%> &yFz7o:{\qy )a<~?BM bII[o'ǏZ~< j>J`3fC5LMJ&")))[z}%tյo{Æ`\&RQQ'b,j)+@34FIQ?By݇[LLǎ߰aҥ2VWڵOCbDDf[n~Çα[0&ZI:.KĄ.Q1",E{RLYy?ѤI3dp!n3.ZCXmVZY%K1G> D}TvĤڌtUx}3+V\/ieg,Jܸq3+=Fy&b Ѫh֭{k,SNSy'ssq^V>Fhsnݺ[._{m/LM-Z⊫ B}⥄hybI>{ [f1p@rƔ\PgrieA"o~&ŭ! BP(~ 035_4TT_(=pA ww9u)9~&0EЀ 'vO ٽ$"|N4a bWXCYX P+8HK@A^` $F$_@%Oc@Sҋ<.q866>!!< -cB CX*DQ&. EԙZkII)Trs PDeCoKba]E%*_@ppFmIEzk)4k*^%*)C6zK\QIzWF_\/*̅ŢN) PSTD b@2MVx,C3y} # ,4QEL b IJt' CoX^@SVhOLLIu) rŇK@EFK4b:?1KXt "O%oKE _\qȳ(e dKdvd TŠagh|A1;L)V]ԅI"MT*y=HaxNox8"ְ IVx > p–u,"Lu۷kǟI/]3xHBP( /|o) h%%%%PM-39|LE#zss=%ۍдr2PN$,$WN%!Tt9Qa$# *ء51B%?ID۔b:l'e\Z&b|ЅWr ;tQd8P pa&@Rܓ@&F #Ï_k:uYɽ{ee P2J&=1+cQ8O"d>Q@Qؗ+q3!*"@]Ĥ$A^E0g9b3*7L.L%؄#A@LM sB11Q S h"Lp.* XeQ7`-,p·H$ISԱIE|2: ydD&[ &7`grǀ)_P O\DF), xxA0u :7(@>0)E @2x&>*p L#VX)*NS&.dRT+IH1q*(2ҥ׾ց.]:ۏA-h; aF)2ԩ+BP( /|ͫ) h%%%%Efy،þK@rSgq8\=e:qJױـ%iR '/¥/JdybfsB%R d,qHRd,Tu$!I1H$/pp# FDvUy1.!bTd,*X.tQ#&DVݻرL\\ _'.J"pD)a܉e(b 2@|6.")(%ERDX*AYPЅe%3ɤ +tQqXZ +"p>0(P$d\q>N)"Jx"S**ԅ/f#"&§yA d8zq:bPE]1STb"55Ȉ-KW;_vOTS( BB5_u4Tp{8|Πs^8|Swɨ^ g2 <}@):Ln\M@SҔ:.M 9I4HI8r/)ýr؄)!$-[ll0E㘢N1JPPA=:(|N^(R¿ D u L#|l"#CPL B DI]?- )"h2H.C$.SG l8/uʪN҅)a|2ƾeD.Mȋ'ḡ.#LIĄ&MdE: `eIEgД)M)tqUS&}0jS8l93lX8_&&/KIkbYB>IS̋A2l.Jpbjb! |$e Q w8)C;TdjbYM1i(TIJI S,PW( B%-5ߋ4Thz`9G2jqUӆ_7p#zu$v2~^"-fKU%%D.Qys 0a_(s%Q;"C@K$#2]G] 2uLGb ֢CY8P.bXF↘d۩HZ,fEId`"L@B _a. (4zXź:ZЃTPbtAu8S$U8Ȉ+(L*~Ukt ϋ2S0KD@<7Jd p..CTPK|eHWLS%bb蒊y,S "'*መEThg0bta >MCȸ4ԅZ PJaJ 3R1)]BW숀bS UHu`Y젋"uKJN*"# uBP(_*USGJJJJJ5&G[:nrF^(+8.n?sZrNZ%%)I"ao=%L9އK ui V8mdcǥDXD I;TSG@l !EFԅ#]0qFH"C$cI{DEb(aaS !1"O] ۗ:L L   ",² DATuCԩKp`!0;b.Q2"**)qww%Dpw.ŝ@mw~G{ Mgi;g=;k.kLQ!BŒRVKB B${ RU4H<+QT!6V Ul#DYc#9QʆEmŐGm! %TtQCHwD = 3J="RȇʀcMЕ=BC4|q*@DUU U+9BwDmDE]+T2!UP Jց.U"DmQ©ɡ12D uʀxV. p4GWH]C br꽋|ec*@T1dIAx4 =Z k71+J{$ii0!**eM1xT 'CT@O-:Tv Ba:4RmBeF% BqچXY._$hcǽޘ9v(AUJR$(W($TXPLz#1?twv'! =( (H+`rSDcRN]lC%h rt3 Ǟ!{"6@蹍~}ؾ_@ :O9i0}{4x7[7k[Zk~UV$V U,;rmTU2P9w P;hf K'| s8#!A^t*hU\]!e lU$Da$:18GlS`P=$DA/@R tim85]v#8+;=2 2wD  *VG"[۶hګԋ"@,(hB w"GsܹG(!M!xV<2N!eeIS>|فJ)Tk #z"iU[[| OmvRcd,`׹W_}nK/GQRiK`F̣*)džR1}>|d֯i3l uխzg[!aP6 GBw MV2I[(Pi|$ʰZv>^(6bC9ik% .P\DE"^Q3@ר㮭ǣ>W^e>k7Kdj@jf`FG%lBð28B9q_ވŃᡇS9*VJN?"lٲO?]xC=p3;#?g}(rJoV]u~<{2=Ǟ8∣HWW!(es 6+' (ʹӨ9(Zc۟$b "(((GQd2ओz½zϲ"'ͻu橧{6| U)wGt{$3Z 1&ؚjqGGȱ{Dm+b͙s%U/hbo^vmlJbBBxb@vcc3FrɱsLM$ T`n6]a#&w? o_XkUV$6駟umnjkv\0m1VWG ?ҥ{{^re[nME( J'bR(Җ ‹oN.MZ1p9Ga֬Ywo/BrQ{E(wgfxlF:p&@dq?wԔ 8O=nc뭷$dr,i0^LHH-|ND:DŽb6ƫ+T4+"[oihλ{셹^](bW^y37۬=h&1< #6e&uc$C|i'*4t>Ԅ& V[m}?=zQ0tCE0`P59$wUcgwbVq&7YVZl(fͺ{uѢECwZR^wf@#1$tg*MSbQ$xTq7$ߧO_t%k.7[54 ,CNJ*"*;ݣ4!S ;]X8ef bpgz:V5/u7wt-rw sP;M\ZHE1aK*5If(l,Yu5rѼmbyG,XN`jz92 uq~27bIbB3*"S=+JxAAEWkIGɏ> IBXsϽá8ziǯa"Y(Ztlc $H8{$M[<)C[t2 \z«Uil|߾M294IP-:"x$MgiB>Z}eWx0 +P"61Pvվzc}]w4:bf^Ur\+qao^sQszƗF>|~,(6o>y- 2[dn{7z(jeD&kD@^M|Zmv;TCΔHbIZ!j馛oY`f[vS4,:uo!dmu {}wv+Ə(TСО$wq>5\c뮻YVFpx0mXRSwl۶]B{˵mَ ƒZwgQGc5xPKC6 z+# qy`a @Xe謪 &Ҧ}E~B k!b^U>y۪#k-x!8fΜd} h$IB@ZU( S ca( ]NU^`z‹ 1^̨ŚHkgynsLJSDxEI%ʼڵ|8lW@ƩȤBqY/J~Y[)"I\LP Vl˅&T6QG[om@.]"M_1|UL3Bzh]W\qu kUK ]*=hL]x?'pN;5|JCX%]r!vHp(b@,K'1UC/<7brW;/Y\a8gQb{o塉WUI+kGg򟧈Zz 7>~P ozYC9'm=Ubh_?rw0sFBM42(Y6Բ/.] D,Dy)*I;s] E^4"Gqo/'*Dwl)(wRBW_Әy&2̈/^Yt{ܹ󒢌O-E֭Idᗥ (exhΜSu*,m}b((Bdd҈U{"-=Kn)G:SL:46PԡJ-(00RQ^G5 t 6޸[@#Ixh2QWXB;>9 #_yœ\X!Y"PRA;&NU3jE& [\reV ={fQe.}FmcEhs/s^K'|:u(u݉8qO~&9![o?e/ʈY'Уf˖5|`6kS}~>צ kݻFkkKOlO>y~-!THCf3&'i/="j8W_}ݚ.a9^m5902Uy8hɒj2uɧ0;NGy9b^v@ӟ.MWU/N}̸⊫nQz7Lqa}/$W>t]c~O<@(αeJO?/4_u%гGeP|O_K<Ň lР!G L>-z˯{1Pc~DZvkGq$3_gB &ҳ+!ԩYkʄfR_w /ـ_ mDXxT "(,{P4$z˒Z/w /XqY VN9QWb%4~@q3f_zz?3_ٍK?{?^4Z.\?="gG÷ 2'O%__]ۮVE&.#9AWض|?[2Mub}dԌ_B+IbT o2BO]brWy&@Qde_MW} Rd6K/8o翐÷v6l'ٶآEg|GB{op.yŗR#!Cƿ뿙ϓH_܌w}Af0D%Çzͷn쫉 Ô)}??LaW_}3mLp3B~X(6 29B>9:fz4|If/$w|ɼymNbDU{kv䡐,-'[nife$_RjM }U`x)<CѼdj\uzeћ 0Jcnz 0$z[s{Ϟ Ŧ kif7?QkMAu[+c'kQS"",~*t)b(ؼ4![C(7̥]2emzgf]I:?KrJF:nV)g;v|΋:+lGjsk&jY6TPt1øK?뭷ob*2 i3dP&P6]jB)zwK,$e+NY 8 *&^x7)׼$Z:Xhq(-3qqk]b,=i^Uh)%gV_ז#e^Cl?aYyuy(w/X> ̬68g60XhY6.bjcj5$6+sV /#>k_^#Ny$0zk2Mؙ2bhE$Qˌ!RTo5:bfRUr\+q->'Mr”:g=ЩS9nzmh'z{{a[(XX*Yw׵^$+' wE MôͶĪe}jnV$vD> Ï74[wT͊.>gˊ=h05N7E PhbɓXf!ٖ䐏88'|n!x'Y0{L@ϏG.؈a$XIZZk?PU#w*0^ZNؙƛjA:uᬽ^cRgWc BYӟ̚*R6,ں#Ǟ:"OzWzK/@i/gy/"gne|OHrˆi hYok!۰kB"Ƒ}SO=mKW9Ze[͋!-9 +Bb2r-Dvkz9`ĉgvn'8 69uC/EFBj>\jv뭷 هHW_m6^ۍFjgQN8 s9h",!ř@ןg}$[L}"жm;B ^mGm׮[7(⪫]ѵ:#Ɂ"W_}[nlUt70emW4ݔPh_(A ;df!;[lQ Mb޼T;hH6ڤevC/׫K#;[f*\I t)zꩧjnVgE={1ȓ38K`I_̞9sw9f=x wyp )H;#q@BYϙ37`G;`h;_fΜղeɝVV[mx#] : 2zy&A2ϧQߡ T(pVq0fϞovL(,1> 4SPJr=M]pE^s3 y /qw29_l~.&޹z-gd 8묳|?[vm*~5 =\se)Ӥ#2~ܸ ̐{q޼,Y'O}t"392(E0ԣܐZ~ӟR$ Zrt!&gVJ˥SN--K蒙&Z1Iy}{wxI!o(J3fߣ1" dJ1 rBѫa,qW 1cB~{4ume<c헿c*mŋґ Lbi%$SDo1b<3X{(qjZƣs=p2Fygr1|GzQA[&;@>̘1Sx)I XŌN[` 6J DRKerP$$T|vC{OOzJ[,*' ׽n6DS.` eiܳzT#^tsIL/Gc:%q;|3lT# *BTdkԋUdՔhw:ZJ]t%ז+Uܘ1t+,EF1h?d^~AZI$={ bf-0- lj,1zFkV>cD@V_ŋh믿ݽ/Y?WB (ַ T&\qU-epyn>i|~ŚkeBvЃP. 6l;t,n>7Y6'8S/{}w,DPw˷o2D4anvwn"F#BvY^Y+U%5رomxq[[-eJRR3GuI־|eM>ifX++KOzh80n4v2V]R"/ )TaҤo&!۰$ܮ—v1ÊZrS(^0ab ?J+[vgqe-HmÇD\uխq?WHH=HiMl@8&,omn׀YE{+-7qpB0g#:Z?i!Dq{p$,_|pP+"~x1_RS^|ѣrP+f~G/0:U((e?K*Q!Һu[RJ-(Md{$0XmYmnQgstg>&هelC7% w{꣗Ődq˯cx|F?Ѻ8B}*'Anp@2~!V%V%a26F}dK-(W/^{={ccC(_w)Z.JVc6gu/H69Ft'0S4EgϥI/p@1F<@/,h8.wߑKЛm}q:ń,3.],ۗ,Yrס lXSL{''OjuQ`3kj&"3}faW&BTSV$%/xΜ#fa!F|~WrA C"P[\g5GLr޼2(eL=rm֞9!%VsrXIR cΚwrk{P?3Y+EcEgRm^Jw_~ٳ簐ͱ]n7]xiӦkqy̘q2FFMM6wNDx ܏1aOU@|WO?mF4QGϱfV51z>2B--$Hi/qpWHnV}u7JAaO<)NMFL>#sܬ t#xy ?6t:3kq.[b0-|-׾} 7xWI0즛nKع޺۲?/4C=z,X$ǨT,]钽j_9=JˉFYydyīAww#1o&6hW4dr=Qk[ogpa 1 5ξK/MڵkC˦PzQ. VZ5o l%5U.Ԝ/&^娦kbdQ6SI%dL)UTJD n5K y̝;8p{73EM6:6^[jiagK%G=GqwƌYXvy_`fћ*ӋT'D-ep?i)N4_|on3*hO+psHB; C/ f6`I'̍뮻{rk_~y!o%`B#Ӝ#cfQS,eey E yxDjkgnPm#At@]cdxEircѪ;taPz;dN8 YkImپ_,4q A{]{߰${#M,8AF.{^ ,޿\rYVF@ ʌܲ͂ʼJn4fa|9-P_#K?n}=`hibM#͞=7N$>3RV^{a#,PL(*vyꩧckI~lܺDգ>:|~c?뒦@g7p# Dk\etw,.?g5|0?}'N .Do~lٲ/-e)4ͭ<رc5I)M0Bgikaq֭ZZ,ƛ"%O#!:N9TKI빊niɩ/٧.C][cXqugt!5U)ZU`Ȑa-O#-=Z@’/>xk; !(Fr.[y [FZozA+VI w]_Wx'I1X ,%?ݗ^pgi3؜2fC tI*{c*yD)_v*}/H,Uг3={z_x'?We^1[ؓkf#GY&AD{X ԂZe{~ˏqʣ*Վ;o!˲Bn+`CV5ƦN 2_Ա2H!_LoЖ6%,OXB8pZY˿l]g>f ydHҫkLn@s(` .qmSK,R/G=C2m:3#A{"\Wu5C۶xJt쳥vPr4hW6gΩtxs/t793din9o|{3𦠔a^*#ɭjåKVGD@qSCCX"yU&Jԧ#4pҥOwqiĞ_pkL"' )۟ Ge3b dx‘&^x7=h7pWdԥ*t bRCj|ͳ>Hj!ů.#$36/R@hUZs]u5^^^A.Yr?? abv2cz8j0 {Ib:Z\fl/袋f_Jb~hҹsWIѹ[ /9GI/y~g1C+rT#)ţUGMPBͅ}AtR.<]$24)H`B,^C9re<&[G2O>3&W_{ oRe&t4-ZG~ Eҭ۶=ؼy53^ԭ(>lp6L, &eݼd&&3tZˢZ<`YZ'x.O>1_-zɇtG# ]ߵsݍP?vxXKhookߟK 4Py}ؕdu{ ZX=3؄Jk{ѰC=}ꩧzIZޯa#pŗZ1$U(6 ɊZx[3^YbpQH:%Ԛ0o;S_įMshχ\*Wʵrt=kkN2ICNOpx~ȼ{Р!| Gf,O=XۅڣUՉҥK-ͳPPh߾eokg75ESc=v+7x%*n-q>Sj"JqѢEwy'pz6Z#P1'?ewcYf8~Drv=;vŋXy('_x衇یxIYUᄏ 5kEsPPN=d06H^6$vX(К;KdDYgҏ~t<pUZl9xeE05+i9~t+O9+Ax-[lѦovۭeGJV܇~VوB^Qq2W>Ze7bo XPk~^JZCݥlș8q8"Csh ZS\ }1/[n/yvWx^u5M]|;ch(3@+1cY2b<-jfSUS qa8oP<(IBSfj F4 ߉MA}E))(l`ޥK .^n%4f Wv9b>rTɍ@#b8L]_̝;{溜2sw 2=G5l1$‹QR%ۯZecKkhco{W;ʹsĠ{f%z7Nm8jUT*90c6 S <wi^74'6H'+K/ܸ3GwM3Z oe]d'5&U_yAXf&FgΝ{}׽{f~#Psp+⪫uKf_wLW^yL 3fix>XMX!xnf2![oK.i8mAxhn.y(,;k梋.1Ӿ^j*m:$E技w'ڟ>D cXL+ Fh ?BV'* Sn@7uZp|]&tw!{58^<۷<M%K~z*_fh3@22@+0UxD^m]wȓ EO@ȩzDfܲ(f#'O2h LJ\0('xbL }C1 ,'I^I&…!iA%0NՈ7WjR OOM-e9.?LOoy.l7n (=f V}!tE[GxZC^su^gyb[vI Mzz;i+g9.WUrܵL;w@=rA9'?vtCh໷C?croܭ8~ZĺʂzK{,9إK?2HX%XiK%ȡ gLrjŐmm~=d0\ktQ9-Gdd[Xx\k8O>o ЉE O8޷.#4$d/$Je C6̿ +ZrGvf``U5j{{jL;=[Mgڳޙa.%J5C>H8Ϊ!i͛BLvi:Vmt%*Y9ӦMg /зܲۻᆵWYe*cj_Zm"p0X{iYz]Sr&z̀m^tbHQz䭷6eiK*acW\}2뮻[`i[Ċ"?bV]v4zo^",ɘeoA2$Iڵ\#cP:sLz܀Fk;w7e4R(Я ).boR/U%U."di~+Bpij{8ȣV]ar%N1E'<.;]G wbp_ؒ"5q'L"֥˖sys܂*? ۪uo!&8 &%bIhe@ guʉ6V Zѵڵkww_xŽTwjMfoZz1f13Ő1pY OM8 b=bΛlI8O\Dr`Ik:3qv՜G#VVӋ+R!2206$|+ck>lpf*NƝ#nr~wsB%!*?sEj[=IfVd<nQ)2٪" Y 4n5Zi(<JYOyj:4y睙4mWG|Ä į;t 7cUA~}~5:El#D 1D@+.> /i'њs5Dz_ ~`W[7z`E/ik|СբEo_+/iS-Yk#W֥ N>[g{e@ O<]yGوYP.ze<]RdKXMyu&L|w.&Üqlsą =䓄gsϽ-m62;PE;е/g-A\Cxg@\*WV@{NvҤ=&?vd9׶/˪ ӆ3hhg%MM~-:韬cl,>,,-ߺzX1TkZRZ|)˖-FXVZY4_ɱ3ѶE[ms=7,D@UZXx}ŗ(d<]6H^q/:$`5-U}KL9K1Ve ka?5Ἐ˱ǂތFîF4;?E*bMj;_9)'"/]v|*~لWX%vEaϞnviff\R Welɮ6Fp,[{>[ny\ IJVm>s2M{ E7 ;q4 h'C3,^ewM[x+AP$m]m $wNwp[C@l<޾}m zg3Į^~mw\yW-^{ ^+pNO~G)bZwUu]>}2{Gr2[|}"o0l0/ !r1^lhC=D5i4?cFM#SlCq3^z" 2f ic/H0V19sN*?y$1`n8h(>DC2{u>G-7svР!LB\#z\ w"q$?5a$q;lbM &9UDg)>䳳:mvܔ{Ï=!CuSƂ='p[n6ю^C]tf!]ZgϞkzwTi y(&!f!i&"6R~xʔыDSo,:餓iӥ'O3i6Dr#Ы w[ɽ[-R$cn5)ykׇ~2TyyyU\f׫V\w ~JlqrS jfԂ1_'0Bo.YrTWK <_;v|衇>liL/1/_|LJyE"P iB#])SUĪLhfkP ꫯ裏%E)]RB0z v-[6V_ ܹ=NG}bN(zS> "e5(&ɴɈ@V摃IV[Ï?>(twYqy S Չl33MʊݫSϒo<^d^6/GudQC8F4/\sgXHC=\+`371z+r\*]+<7d֊G>y}fzkSfSKOJfXiŒ=ɖ~r6LCU< Marmg|@KFZ|Gb;W`>j[ a8=}ˬeiu {EN[oD=!mɴ92 o펃:R0sϽtiB@T3f̢k"l&V}W:OUtBT%*;[yJp }{ZVb|K-S;˖}9zX^ӒXi ZnKHjD}1nͿP*eʴ;$70[tU4*w xj/؟LO>s7&owJ^:GsPS̙3$57]뭷YsN׮["9_׺.&Ӧ2)l,Obcd3Hso. o-[ljM7Hp?ᄆBBws(/)1LPjSgqfuX|+6syI*]+'*o/&_x9 O Zx?}ᅗQ@VQF)3'4 `n& fV4@U zI& 1kquW̞=;$0,2,S7x0 (73C͕ vC[/z0/dHS*qK@*^L$Jmemi2A%GƌgHW4%E,՛^!h@0\ہI7|&C9 ,\t4>ؘ!m78tPŗ8NidvQ5M o;Ҭ { VK>HeMy1]i.$8 R2}N2~v喛KހzJiw% #QܹcS^{*6U$I'D{.|qY8ye.ֳ MgyzZWx,7aZ1NȲ[y 8[nGmސ7z*#طA=я-%Xfsx-oJZ_y׳VddʲS۷뮻x≍7?)`t݋%Kաf@c@HKrF!knr60_ou%3DK@\*WVfz6?kZ?=ѰPwPI6٤UV -w; wv Yu)C#Vb2bLR[ Ym5uvw\{V!B'* =ZHȪI\,h,N$vP XmՒMZC ACqM[)x =f(`f4j`PŞT@E>I%!!9c h"8DaKÄGxеUEBZwFD>cQz*hR1{!!.hQETE&-&hQI)bcHP8%{̃0F~D&ܠ8J7n )xGQqrYQ{ZUa>o&IuU1)&\Z"_ʌ6 \ LpA@VDE]tExL{쬡0D;3j_,V%(Ak*CwGD!ģrfF,JrQ ;"dnabd&#J`#SbRy cΗ]vEbѣ7tk!yC4  #Ti3hTURhH+k%Ȫd"IY(0pI&!IܫFWʍHP=:rd(^/V#YV(@A@#q6SP#zVDoBV7zP^ i ,/5~38_:jZվ`ۯ߀_㩧}=mq#g%\pCKF ވ/Zż!1n>#:?m cM7ҳgoxs%o,Bz!fS\*WʵrWáI67W=O?lfWc{Mu=';a >nɇ[7b!ޯ5n 6E SC}= ӃȋmV:E9 JSd!]Q }uBkjlfHY||K:Kb{w̓WI[ЃO_A۶2.CRhYS4m^#(m6\.5F_Wo5 \v6OooBr]r\Zt];}>='u}Xhwy+W7nʡc@ľt U>67?E$.|a#K+U eAg)=][lEbbDTfĭ[pLEg)W[R/ʍ8 ϔ۪ 傂 '& iy#\RjXPǂ] 2q[;μBoVS(L՟tUrk宕::Ӿ:9qxqN;=a{M id6G%Ti&?E$YʋBG_!7_ǿ?E7ӳ[W?4)6@O;$vʥ0&_1?‘4h^r(( C2c$CB dK"T.i"y|%/AgA'r]r\Z:3iM;;gք3j8sʔ1&>e#{>Ҧ;Jw2){%(nrߎ߼ kU YQ% Ix)Y7KwWc@Ff|f:q|e2Yj&8 {ċF՟Sg+ Aiް0O_8C|#3<1ɿ W2A%SzrU*kPg@9.WUr;[@z.蹣Mt`R0 }=u)aLI#{qaǏ:@m:?ћ-oܵn*UixT-49oo^X~K0: E,FrQR wh\䰬 UHwG [h 鲊/êZox=%7 )"j#RE2 J걠2MUj딜rjEf'4r\*]cN> L;^- ^m~=c=wک{Lm.{ؾ}U^ݺmӡCk׭r 7$ۃz+iAVD˔Ӊab:6ڨCuWXx‘Y(i`w!V%0Me_uڕ|S(hD/K56J#O_8\* û8ogIڂ?d>d7Wj׳<桀QF(*WUCM0;kg+<˵zlޖ[v{e˖kstͼn[n;}/>tzWknCNKܷpᢍ7n ]t͛ƭ[: _{1Si(4E9%4QkQ/VX1AIoX_3QJy.tnvkUfwQ2_eQmFj2bl26e5lq|`|R?y r`E' b9%% !)9]CN3 {V5,(c!Y4 bSM! NB}Ɔ@\*WVZt#O?qzN0kr~3`BizMkS&:ic8a}:u蒅׭Uy]kv=zeN9WnIYK;˖[vӧ8etU۷N?t͛w{q4}SD:4_s͵5kQ}C6!Z͛\{fLE舄\͛7!>:`VU-BWDУHUL-u'tUrw^+=cHtP@O;}\I9>iG>o]r~,ݺmcO̙s&^ku6tYrJ֭ۢL>_lfV[mv_|߅38c7ܹ}ݷ`Mvuoa]v}]wݝdtffGsϽnV4kbZ-m~ܹ[Xw-:i:>BN]0;ԝ..3:Uxc{Σ 尫-*WU: gz3}5i|ɿu}D.\V^Q-vW^4i"➣XM6i=mڌ{a[}?lݺM7rwi޾}ŋuYlIx4iܹ͛uK˗^ze䩚U~/{WSU/9 t]_{GRĒnݶw_7|{Tղzݻz-}}~m.>2St7z|aW[Ur\+qzg7}igS̈́)}M5&2iIcF=ꄑ}~[7:t /3.'C6moyÆP0aҺ׾}/.\_@wiɒ%P֭}mvso{'^fe'УY[=?O>eϜ9{ٲ/;64or~Gy湛ouA[6ٮZ=x[v=zG}ҧO-_y5k>dȰ_~=|d6CQn /(((((((((((((@\*WVZt7L8b .=d3+L?cjSN{ L5acǜ4f #֧S.׭}BS./ׯualTr.]'y]t%m۶k޼eǎN;m7n޼ǻ뛿:ͻtg={.5\{-:.\xz~qdvآS[ oܪEu;w/7c-tٲ]74xƌYO?lwMZk;s=gulko^7ڨ m^1bif7| Jz^{CW_}~e]c]{kH}ח_~um;;.nVU6z⊫}"!qtR@YE^PPPPPPPPPPPPPmF9.WUr;zr0q=t#vu5o޲CN<_ڮ 78jԘΘ1gg7<4E.:|7tӦnÎI*ȏ[\ct]relzytN]{K/n;?ǙOpd[P2eG}2}>}]qU~3TQ͌޽0:D՚kݭ6O<…3%SđM7 g}>k֜=N>s}cQ˖o˯|ɧy'v4dOf-jg}Ϋwd2fo -*WUsݫȞ' ;;li1rƭYf={+'<# i۶zmG}][jٖ-kbM6iM &|}=p'bئȩ;̛7^{?"sc#tRO|K-'bF-;u7x?qspm-]}{}O;>Ccvy~ HMo 尟-*WUq OߜA6)&O=aBc{{~G6z 6\+ ju־b불-Z۪UՆlql86E7o[f-ȉ|2F8<G<գ2(xevv6m6eGbղY9mc;`fa:[g^Ml˻O\*Wʵ@xքiah8>}܂y r$Sw O I˻Os9.WUrkeL:{Ҍ1',p9QaiM=x`r1Spq'xtr]PPPPPPPPPPPPPr]r\ZtyfBp{sD9.(((((((((((((3C9.WUrܵ߀n|hW9g8c)\*Wʵr7@ZG'L=C91j3 6oSO@O?~J1zsĠׯ,肂?r\*][C_{kO4bQ󇍙?|삑;B NZp9 ts=sD((*WU}ʀI>>v : G9.(((((((((((((D9.WUrM6@OCy5frA4)SgSF:O9.(((((((((((((sB9.WUrܵ=Y&8~ƀqSw^ӫ@9@\*WVZtas 7xi=ً֘FX8b h((*WUkzr=j7@6tJǗ肂?Wr\*]93`Ts=p̯@3#9^8b>=b p7pÍ@{DL"[o+_IbuO-%Aߢ#g&Y_k1=qBQ/1'~ل^;uY l]w6_C*hժMjsJca1޻1gA#U Z:(uۏD)^˕!90Xز3z*-Z[_[!UgET_ zDA1@!DibX Q_!V ">>*evnI*8 AŋWč7n4!eH"dHH`@!]~ QARH`E j@\*W~_)Ɵs##wg|6;kѨp#>as3i~sݩc7iUd-&lHgЪUP ڙ9_HxZ:h4Fi}SXEҵuRfoq*o $l޼%Alnr=O} $1EJU]:wmY;m͑2Jv[X[jrm6Qy)|VZ\vİPAnT;^Gc{߅[n ANG=挬2V ]P(kÀ1XN2]mlJ5 {(0Wb{jXvưJ袥ޅyT<3ѫ"jD>қ`XIhhkKI=Ut |VK~3cr#>M:%7$Ior(fKYPPPPPPPͰ(*WU}-gq=M8A#{ƘIgr@>zFA<r=ɽzlqs~`\mCo lp؈)JO.B# P ݨ[/ M{{!lcUuD u ͉E3nd'SPrÌ 4ATT8- (M9J٬Xbk:; JB+Z=U@b*PE Rm@@Sz0Oǥs98]PPPPPP{@\*W~o}7eЈ@67Sp}猝}ƨFL[8|aSts3h9ϰ?:K~g/TюZ!>CwlxA|ֽeϹ'81}5koS.wpHxL'&u46PU/Qb#`eaQUr\ZIǜws7`ؼO61Ξ0< 9wؙghĔ'/6)9ٿ:եsWo"<7}4c5^{fkZkӬY [bD<yvukkV;F<!Eοr 9hGGNI4?JܠEue]@[j18bD3|k@avc婆 q58SLKdyF:udp6`PA- RVtUf.nt1>t'Ķu붉3F  h*!+DE!CGQXG~}I$NL E_6ʿWWϘ 肂 !\*W@5侓^4ftΠYFWءm9ag?ࠃeK{lo,Fj}?#<wWVBn?n^;!]Qv;P.V"Νvkm[~SF`o; s *m3򫑐@զnf|&UH^rؾ"6j#!ab}wd<kf7۬},}DdOsϽg?S;6MУ?v X%lm /vکlGULҐk|-F&j 6]y&P;tCmD1p"LӶۃV[H7HrƦ*|^~-eAAAAAAA7"@\*W~Q'4pWP;>gҌ1ys=WН;u1{v?COpÍ첛rOCBibݎ;=e|ҥ? PרGMB}m\b=73(DK7B'Fzz=-k|vzgΜ3 $ĦÊx7^~{?'NfL0*!th$$g^VJ6m6K>= Y/pєQzR\B76t?г N~[o>xpHa#W]uc=go@Vxvo {*WfGQ qzN=kpB'xϖ'kq3qn]&Ӣk*;GUdxG?cOd "6Su_x-얟j4xзzG0~<8?C&_~駟ԩK̨<^=6 tяg k%X1'.yEN<6*4P/QZ+ M9%HBխ{\WFFo6EzJ~بkvʽw֩5Pn {?A# yZ!to/zڹf9zzpƨi_}cyC'Twzu%~[Xw-:{_|i׮[|O?޷f? 9Qhr;.^K.ҥvmwn{LӜ4DQ05o֬ꫯi FV{W޸KRMG y1FCXc-wiw:h*i#+]_AgUW]=MUGXzQGo~OfwartZUfDExTDY-b/U].4VYe]vG4i d9ĩ*T=S uL(J'GX2uAW\q6l*HK:屾a#T*kUŁ “ĭ$kLsUט1b^ҵZ}[oW_Od b6+Ϗ~t3<׫W;q~Iخ[oj8U/zERBQKʕ#^{cB;}~=|nPʶ'|:Ќ<餞O= "BABN]lk)BMo j͚ Fjl~|<0lĀH΀9s駟iNE;SO=u ?bAFbHYy5+$, lzaUA w#<owiB;gΩ/daE M0ψfFHU5e 0,E~DU /d2L *.(x ݝ`&GCaV0*&1z)m\)$5oD=:|5~(%Z& ֪%ߜEQ3oCw27`MZjסC=~o̘q3(%֤ahL('F0c/&pC줓NWoݺ6lV[k&v;wiv~pw=sHQHwsgsϽmщO<]|("ĶܲxaGhhAA+8(6۬=i8H(vyv6%Ӑz8˷آvЩS/IMXX Ezd;h0mv`u;vL/lkͷnݶa!E+!V)҄(BO<5nDcwDvo\$P.}Wb$/O)&:%FwD?yWݦͦ;찓NC9L[*Ń ia q}'U5|rF V\Nh(<&UFV7Mwo}n7$1L\p?*Řd4H y5ז>!yA WrCT⊫|!C1( D7@b9 i@i\pIBk2ॗ^9HSO?*={Bk1I'>Srw[pUW@#&{~xjQ8uol`;us}ƍK/uY2/_{iD C 4Z G&DFi%11ޑ62%S^~ * @%Ӧx-:d&(4,Fv)A+zP﫥K-Q݌%@ W6R>iT*T!9MA/]1:s _NYXh$<#IJP+"z=E&խ۶yjLv%P`y-ݻw|[hλvҵe˯")nSXxK/"-@xbb<] ϥ^{365Xky7x1HʴnݴZoeg ;w~7YLeArCDQnY g}=kAMsgtUrk%=5I3EMO9+#&6tܩCvڭkv|C;pewN:w}s]c5˖-;I_yS.>EgH{]o>O޺K7۬={lQݟuRc/ˇzw߿}= cƌ~vozw?t[o3gΩ~w;O޸Kr K{UZu9̡cO|G|d֬9Q>?{.ࢧzffN;uj~}ꫯ3mvT~!~?UW]sM,]zO<ԩ5vz8qV${?Ouԉ[Sy>_~?yq„Ib8S'M _x%عubIZkuN:̣>.zW\qiQ)P룏>쳥<#9[ov">|$۸ԛ]%K/S-Њ;G/3`??b:tp޽|Ųc{-2gy62d+_|}ǒwO?tV Ѩ#\pOk}TTƤQbhkNM)3DS=NNpߨƛo}GKT4`^xŗ=&=N+zO8%kɒ{>(Ic>__W4p<ȣ/!YD4i3? %#EFIkv _|?Fml:y7|; RH+Ҏ?W_}g?O3sN ݑGХ7ŁtqtbFjV/rҥ3Ï$M8v^zE3tҧwXt"lǿ*9zoYNLJޚbF:∣ ;!(B)S6Bx}}Ax@tq]*SϿav}38c7*3f@fDKܩPsvñcǼ+~0wMDW^y53>|}=^H6ftU4t$aR%Eₔ{'o-ZnAڠso*a~y%~77e?]t_i.0TAAAAAAAº@\*WVj|{N{ ЃF0tF?k⌺_@7~vu}_^4riC : y)W|ݪUoō7|eWi-N;uϯD?ȃ>~~סCŋ_uUv1s-<[l.K-A{uOMy]ko؁wܵW><Gcxcy~_vMӥ;Yg裏sdM7; ɽg-::>Vx˯|o /tAq_qUwuwSE]rXcƌ#𨣎Ys͵;urw( .bӼ]bR>d^ Ɲwj?PU@inۼ+>G;-X;@aGO$ݻ3f)w,nxGM"䦠WqAIv[o5\-s m)zJ\ j'|Bb[:̳Ő7pUW]×tr@s Q0&uw&L"sꩧaGSϞvfH<d6qI4iʲe?3Tq6 +]wb1w޻?BM u7߹%gyo_|jEcA\_X?^|Yfm$#P2.~UK37|/Qfw2_!~_̻(`olu[hr]|ѣ‰9wyf#1Yz_6#5* [\*Wʵr'=y9CF}<>V[ofm۶׿ShMp2Osx{}۞pBub ϫ"ޞp٣I>^3=~.]$;S;/O^;w]" QvewsϽ{<_;j]wW_?ӔU/d*'7Hi>*k;3oѢ3֭98 ,PU.>p•W^nr&u}ᅗFmUW7|{Ҥ)i^{3` 5?\U+>2 ]LT ^m5/Ÿq^~ev D+6tpzISO=3utzw.+ C=޽zL|Y^҆qV$V[nnon2jE@ܩSf/CZk~d$?G4$\"85idlCek9cƌW_}H/S /lGGZޭ600aȋ@u1mz?t_E#W^yC=*'t$qDxIS C3X YeUIkpI$_s:NW|}C|@磶\իiT1C Gy45.E`2D)tUrk%@kҀa7dhسO]0~9c=,oq-g]nzmmaOp\r%Ԯ &;_{fwx-:c6u+ NZ{|-ֳg?#G?ӥ?{÷|ykجᏌu}Z<~DK8]zꙟosܸ ȩZa}=WO-[_j֬9k;8|HEڃ>ر>wͷ\/-T~.&?@2~qk1xFz 'N~uꩧIr{8Ut={gF rJ3_rF~wh޸ C=_@ihfvedIffefd-f,33333e 2 mӝL'LI>:o䋌{5j׮z >G?];oݺ=""*0*\ U ڽ{/V=/Edd4gsrrnQ[$nf=Gv<9{ÆE+33\!<5z4T!wGᇧO2d'|֭[6pԦM[ؒ5k*!trr_/D6;2Ԅ!)I.CxGB`E 9~cc\ںu$*U@_ /8rф!`MBp;vڍ2 RL>BAdep0 ޽~'jm۞%4{uO"_-ֹsSN%'^M^Β%8rd9w8~xrrrdnݺ9cǎ'ƍ [ G r1>OyhܺusܣG/l')aG$7oٵk]|bn/VRS΄ Tʦ^\\v][lǩ 8eG&OQ>7}-((p\b_bE5MgN,)| OG t1@3fG9QS~cD#gΔ)7gΜ1cFرs޼J~Yw}7lؘ|Ӧ-7o\90pC|mUC!C 2d{_L\2כ} 蘤iӇFOI6;_o@I̜1+>}zLʔI"LJǍ'm߀1cS>aΝ2@'aҌ| ߳gό3J(l2$%J r11s5|+1tqqy~.]~ .5hGPC!v|zY<*W|bb2(WR֭;cƌZzUQn}4Y"5ג%rs;wv`6A+Vb̙غ{ݻԩ3;wXѯm8=z,6 C77>5~DpJFXիDB<0Q:;)x55jrigJmg%6|.UVsz# ?~:_'[Ze4h>͚8brrKÆ:Aez} Ԩ|N-( 1ʔwI'##kxa)V}hb0H#ZĉS))i:Wlc6TrJ*SJAXEΑڴi˽{mA9"@"}x˖mmڴTj 7d#f͚2M6Gιm޼%&MQ}c722HebG)WΗ%,QK>})Zq&7n ?/ЫW 5dPԨ[PP0Sj؂L֭?z(rA@9r(FDŽ#tNtt~EA"`qmEѸ% [?rkG[n۽{H._$ΙґСgϞ}'Ç'GzsȨoU˳hǎ?J0ƑRadUVɨK'OLLLpuuC}V"YfC6 s!a#P>><48{OTLz ʔ7n@ұ$E xԳh]۷]3qdn *B\ Ďϙ3WǎyB7*G_}@;|hA`PR~:?]h -K̝E:uAG^ . {)Mns0!GG6qN,Y©СCJ~V &ģM4Y7/sxŋ6EjSԴCiXxR5jԸwnRRas))Y=j |vzWܭR\ϝ;x3 hC 2d@a2eЀ2wȈQ bE5植ZScS^k@~ih>C֫*X.a}?7..ŋ7Q#80mg@@={6oªO-[ٳBJ|o޼en=}!s>#)j5>߿p@@ 1oߑjժӯ߀rL<Y>Ɨ*UM1c۟%K7n͚{~JJe˖#M[nChҭ[wj*('ĉݭo(_xy޼ O$G.\l ֨Qk„I]tSш W[ثVQtq&?H^3޽'1(  աC{DEŀ N7i pыM5jKLٳ7ii rDz cUv]ԩ!CݻW\Qӧ$fr)ӈnzܾ߲ekRQ@|ń$!q-~ v!۷okJ"^6a (Ph= H{AHHQtذ*O`)s:B?†aE1T4;ΨQ.]Ćgw.\t5$4tӘ8ᑟ~y׮5i!tbsŊ/^;<^@ 7o=H |raB0@UСl!gF$z^v8;ɭʔ#g_p '6޽WΝ?h,ƽSڵOT@VǏsqqUlJ "5k۷t *\!رR jN58ϨčF58xM4 P;v佂׊'$H|)5ق_60StB-0ƍ={ֶm1cOAeB0)S/_9!<@yUNLu6bǟN:m.cp…gΜiڬ9~eT8qOH0G^ 9Ɣ4 ՘3gY6ܺu;Q32C 2dȐ%~2 hs\2\ހN=tlt"+L]>n~hn@N1;aT} zbd„qCc իNq<#G%L0޽g-n20X;4L(99o K|[x dɲK ';w7@V:xޮ]_5j<8NK~ t1b_6mСn=-VBW^x_,͚5'7^}==+V#*HHH" ݸq%Qr]{^E^S)eٲfΜ'FGǮ\ѣ'cǎK=zL2mذpn޼ݩSPJ=KZo/avotOAA"q&PC c}=2={_hɭ[wl_o$"$eCGaSnN%33GQ^}Ch7n܌LAѳgnja&NX}}+8YѼy 8..nj?dkBZu\ڴi}|77vlR}EWr;w6l˖/?D_;vaaC-ZQ|8g$fZpzQ qP0Hcο͏ԁCF}}ĉSXQ auҥٳNf.N93S>}UVIVA_:ye]N}E=);7fLLwӥKqM hKLLFgҤ)lpz>NQjj:A9r4ԩj`B?_N;SlFXzM [޼y rZ&'Vbbcy2e|HYO:VTCN8T[ٕ08p0|*tWG 1G3/ݻr #gCO={v{عs7 !\( G 5^+ޡC'AP R/T D5dP<"MԓrAaC$*vշoL/WǦsF9I)_57O9>ĈkvYB bDzAg# hM/\ؙ{ª pq㦄kGdS֭ȱ_wG<ysG ADmcCW0~׮ OI k:ߧJC 2dȐw{i@\2wy_^UHJБa1ЉӢgLN95'/N3?e$4/91;a}BY_g.],xbŪܽ{__,[\쿭aĪo>?ȻѣCB8HٳGxR>˰Jj˖ѝ;wO<=lXvsJj+ C| ?uT͚HA\ڰa)xy|̘q׮ݸw;"~W޺uǏK A[j V,8q*::%"cÆwCLFZll|NzD.bS.GvM4h[6mLxݿwRM+ %K%ڣ/$VȻuqi"߱c|~ (Ԯ]+WT*OjK)HV>iܬ,O2g[۶h۶=B }^,v_GL(C9kד-XLھժ`ɚsr9QL޽IfX|G={f;wJ vիS uU8e*@lyZ/)dת`Q葵)=z~&<f!0̠`N)OT3g );*ԟGg(LX"N\ڑ#ǰ=rhVA_|QቐS p;PUtnN oݺDyL79mڴE Xk֬%$<9۷sA_!Beiy\z.]>m Fn+ 9T) Vo߉/g|#G*̝\x&d-ɗ;rgQ[mnC6[%e˗Ý3 Lj{>9gϥII)e<͘VTܹg̘ňfBNɩPx4EeHsKA6l|Rѣ?Hd+sIjuNSNhђzPw@2dȐ!C&~7 hs\2755!2~y߀N|hzj@XzY>볽>B35,><3 FȥJ?8Z#BHpkF(*ye.[tcU>39Bel=*L(",PLroX^x0۷xh5 0&h#q;<p9b "Pቐ (/$%2:9pb?XzMa+se(0*`R3#r$}*4)K˜wVvH)=1p;e:Dr1JJjO^ƎA&GRGYK ( Ȉ#4S#6rplM`Д0JH/e U%N Voǣ"*c%wcUO@Ȫ`A}eLP5GHA!rpQv],\pag I9j0AU d) d; MaE)¼>$O=Da"Ԫ│TT@2PVbBB`QRf" j*6F̙22%GM8<F! a GS 0@L5s!Q8vHתnC"h!)<4J"\d Λ䯓:b#T%;0Uv3`3K`A(y*&0HrkMKh 2dȐ!C{i@\2ր?G3[ )3"fD%N>4s^o@V ݾC/xaU}TIjK)3M8 S2+]yx`>~Thԁ/c(_ʻbC(d9j@ud+HȎHd" IY$4)Ƌ b/K )>^&%l%Tm}aȐ!C 2įm.s\zȁc%OK?3*qvB݀7iIisՀ5Xe>⪙b'EHl(G2dDgb}lkxX_9V56Ϩ%%l}PВL 1 ^Ꟈ8Ɗ("VE6]aF! Lad$*3(i{dA!w˖ M"'`yT$eUPvq!V#A.(FL`Zv̂ o$E+5x@ LijJjH`l| !5BxF@M1DCtj Sjʪt C=ÔQl@З`G! 裃)* BI@$" J "B(/)N,an+9meh"F * d%ϒ"!S([+rxE!e*H0J~0BNPtl}Eh"D+:,/@}MY@ B_€GM $/]aE>iK$,1><2FG`1W*IIւ"`9 2dȐ!CD.a2e_?5_i@J5` c&'P:>M hՀZϟpC/< w賴><Ɍo$As>i@\1#ro2`2 RB&#1mMmX!V⑫.(FԈN'ڌ@p*[$ X[(e6gTm F<v^[S;Q@v #+*l$8$a4DQ>4G1d s(:a!YPɲ& (J0t@)([y`!M5)Wl -: eUQʘkIqѢ"_"`M+I)(2AB:PٲDKU8y ^5 eGxpXAAK !ԐpuFY R, )#ۍ pБ\3$Q1jIB%O58rD넾(~`T+(e%!S A`X(saJM< RqД $I>^ug [HyG#gU1m@NS1є/ۄUF\0Jw@2dȐ!C&Ӏ6e.sok@tLĹ rܤ#Ƽހo@}Y)'^>00<5?yXD>3K4!3zj_Z x oPJY0Ѵ`*:0ZTKvv2Y2Tv :K_zuԴ9EL%ђFI( b0IPhD H0HYhyƎ\#Ъ(^.mo$rLT|4$((Ҕ#@(vRl2ƱyLQCPJ_#jrU\l=BʈPUUQ |HwG}t,x!xtԐ c=JMYP,0 H [1H B@6#)؆%xud+yIaIBY:bQK6&Kª :A(w  E./(@0Rf ]BAl9ڪm-Q$Hf(_CBAh6cfUZe`![2ھX)MAg`V_'atGٖ+IlFaֳ)#8%s"[vbb+s0a30#q? P:j02)TV(+$R}\WQ!@.sc6I^AMZ R`I$eRIK B”#B2ma R#Pa*"ya+Xǰt*TBbv !P6:P-G^ Vv^0BpāA x[*%|B(ی@I&"AY (% ʕ\uaąhhI඾VY 傑aD,IOGh0DkW*^8J"4Pm̱[%#-&aj^:yfTԹ(Tz *xzzkLZ]4azU 7;;0vW!Sj%wBnnNN. ;V0J [uUHd\\BH,HT=Meᅤt鲔%L V$BLêݰ2F:dcETCB1TЇQ !ީm@UVcщɀHN$LaW0_dTBm.V P<S `#M ^撠80x<) #m !PG "!<7/5vPXN]-[ѸqSVY7 2Dp$)rQT!I^ĔUAW/LU{kXg 8\*I_~\Ё+kVA1Pr4*0: xae() <[(xA^ %e$G)д$GCR<2DB“9rșiJb3)habXU1SkUM?J%t)2QTV3#!C 2dл_L\2- >G 78b݀Nr#o}[~[]uXo5]n*|||B5k :TȗX!HŊ~-ZPR)'k`d9-I 9SV%ToB8送4hԮ]m1VZ]ȫWټyΝѫM+xJ)<apTmٲ5Y(T5'r$r*;$J 4mڜQTAG)4kւd۴ СSJA2Ծ}{vةu6,CIFhh \VcΝ:unܸire:)0Ս=);>}iA0jjP%;xER^nzoߑ6: $2 "a09 &La`kժCZ)BFZlr2|]EcD_S@ @h!B.LDSHQL )m_p)+S5$}e-( դI3 U0GGeME9ɪ!BDSx$ J5H5l*ȺU NY /_:,$4rM!~$Tn~~ !@H@.L*a3Fm: Q Mq 9QP*/9D֬"2Ze.}k*y֯ߐ.آӰa:u\2GUiʵLLў(6 O F(`C>R2dȐ!C 4e.s\Ҁ9`XtLCzI2,L-H1?9cn[K'˫#f͚SÇ.XH}Vs}hLcJ qM  a*( Dx__xNС1AgƌY\w_bcd bc ~qq ,!TH} hȒppgcr><17lQR:PibV^s?);j߾eBI_?ɓϞ}}ރٳ=S&-Zbg ɓ/_%_' jT -[+9wo%KJG}ׯ|ʕC RXBSc#[`522L[Έ99tX"R2dȐ!C %4e.s\2,J yIy_׀?,:OH*E ៏0+8phj%TPsgCz c ˣwі-[]Me@swd I: `2S<d$RչW(_ ~m@@-/Wĉ/\Tju??a=:) H'7oobbB\8Xl4*A RC)XU>5k>5vxV3*_4{Ŋ~-9s,aή8Sm ٹsٳ٩Zdf};w0UT$ EN巑Lսe lCB\NzTr[!+\uYuc$TF' `"ԋ#|e**0 !'͛:uZθjd2 x OJ!ف,P(ӑUP" C;k?ݻ/'yp$*Ǭ]99Nk Am ;!<.l}-"M ]CR@T"jSaٳϾ@d@"$ ~]v|P1HH rQ!WmO \!^ ((ĉSޏ>bC &胩4QIYKĈ$x5j GT"y#A€,G#.,-VW$Y!Y$b!seV/OpӫWM}PD3j0&MTk$HRN*&@ !^ X ASʆ}4dȐ!C z7ki@\2g`f_^؀VZ _o@'{4ᤆg͚"E?psKZ5۷ءCǶm۳ 4jԤM[^Weծ]70jM;uҺurʫˀBl׮CTVn}F aY!a_\MeA3f:w''XjϞ} Y+~o+W߹sʕFtuѪU  s-[ R"5k֦x >rؘ1!hrJ0W ! =|Fᎌ/^ -[[AaQhשS^..n-Z"hwwBP6,,!<9%K]M X7iҌSѠA#Hȗ[ssy|ĉhB֨)h@v:unذ1rji7,A$K!ҥGNK/X0K)Sucz*wt90 uعiRԓUQF58瘀TP8 s(;PO$ݤbDݻɓ\@(`"qE"7 Ç9?i2BDصkw*L +jRrBYa U 8Q&k@*| xeQjѢթSg~WΝ܅1c֘`k`6,ٳjrO23^^E ,u͛2Uӧ_'%4 y ٻKnk7Q׉0JZVggΜoݺ3vxpuuYvV9l7^ܮ]+W~$`"ƌL`@&;G"IOϠl}W em۾kJC9&ݹs!1h5 +Un6l\ݧO?j!|V~Nbܞj.]¯SNg`Jφ#ʓܹ{TAGO>;tuCqQ[\pƸv"s'2<H,i##ہGGW>8>|&DȃwۨQ"lL:G<̏9y3W sAeyH0Cv+Qk)/>}&((%R&~ ;½Vj d7h!C 2d{_L\2- CГՀ O&>29bEC̜9O^*T:r؜9X*Ûrslٺ| 8w1j$aңGiŬyyw7ntܵS.FZ~~6l:priݺ͋ &r׮=K.oРѕ+W >'"qw bŪUԬY\II)?UV:(h=z˗ߴhъT{˗۷H3fjܸ #IGmo]>tJ߾TJܹ[O0~Ob޸qӵk?y,** t u]]ݙaǎ9gϞgwe!_!oڴ wm׮gl޼_ƊJ꜓؉+|a"w~kN:CFѣljw۷vBVܰTx޼;(Z>!tQyk<1Ys*O[dٳ`”W$m۶޽Ͼ@hH&:4tϐWRR6O!H"fԶRo䰱qDX[؈#9ܞT-[F8A&Lb97n$r ny[u T/(|bb2r3r0e$") B|1UFm;vb~EAb+nXC^!`㈰CN 2dȐ!C&~2 hs\25$ΌK<'1}> z4;>U=h}z\xtRЪUWܷ̙K*]BC̞=z:uŋtVz%J-[C{j6oW :qqq zѣ^F-q&^Z˗/O:,GWׯDT߀.mW>&Mjժ{r]|Л7TZ.]$wj`թSMAAC r%(BuϜ9K ' ]F 6ξ6\\\ׯ=~8\2N)&)st3RV/,lӧ LI;1..4"Κ3g+Q/! F O$2"x4{m;vK3֭vg_#"<8 ΠEEpq6~'_ɩWaPވ(PzdZ`ޛg,PPFFur/k֬ x9|2 >9rdoٲ57ŋrHxm Ր8EJ}'lx8lg?ŨQcbcq ͚5s I/^|CjDq!V>6mx۵@:BQdgr!*)hX4G3_AN'|F=yr(if&|];nm~[h?~peȐ!C 2duLӀ6e.szs:waO6=6uFLԅ(ГՀ7دOE˗o߁ٳ|+ݻ֬9wZߕ;sk&Miذ)(^tޓ\`.Μ9;lXܹ+h9OvTP!'~߽xݻ96>`O?|0j۱cg+P/gaܮ]'O /׉\PVZnsѣb˪8թS8險g7+~1_%>$d wzn=?þ} Ԅ};z aP`qǎ]Gʌpag0 PՍz/>NHH=۷s=z/5G;*7;'jP |޼[l[bUJJ'dٲ< ~󏸣G @1ĵ?$<\\\ٳ=z\T| Y ĉ) Og?YRR ~/Ʌ0Ν)`D<[)MbO_6 /5dx%p,/z*)cEHqac*7VZE 䱩udd4gS>Q84r#GqQֿSr*c|&چ 2dȐ!CL/m.s\zt; 5'|}/ZGN˫"E Z^}_xubVX͚o6lM<X߀>zi3ЯZzvtx''S/ LzOꡠQ5,PzSO8$ĦFVXpM?~Jʱz'O==IHH W*(Z18ݹsƍ@5k>tر>5f8r\99 GڵO>=vl! |]r!_{H.\L$Hø{_qݺ :uwAFL є ۗoqj)KryRC F䲂H622_q*U 2KD=[@",)(ԡC7oGQZu80@.7nݻ/ ǎ8q /_(j5sW \N$&&߹)BBH/,w …۵pҕ(vܕRNT,qb{׮O:S"~\ ͽ7xpXŊ~Qfa P!'\<A>dPbc*ޣ|HZlMʣFGmttk7q8slJJ+CH!C0(˗/_Fs&")e6@ Rٲlٺ}v4ѣM*Ԑd:th8S?M (o8ܞ#Gnvkڴ9O+W=vذO֋ /kڔ=zq˅ 899GFF8qW'ԜOAp0|„IjѢqGԟ#~Agg?̙/\ԱcgNڵrS}D#`9SLSۇk⤰)r 1gZ'Eș'@cGGDճg>dv h$g %9hX ߷_/8!:fo"iȐ!C 2d/Tm.s\ztj@/Ne7гR_tW|ޕ|a&M=|8##`(kסiEsrr[ݻnjzή-Z5j>B}Yo,R@N8ۻh*Μ9d2ԵiJITG)=zRzW|O<…KJj> DzUVTr]ܹ;rhVeFc oݺz(]tyvffwkp''MM(_{1Qy @v,-b@5))i?g%x\p1%EM$"L"#\mUsSݺyVzzFFۺ5%"ĶP!a>|T\y6ھ}QvEHI )(()S,O~G۷?~9'F Z^}^vOgS @ڶm)}ћ]ao@BS ,~F meF#t@GDD}E6mkƌY@qq )T v_d CN]]1ncJ.$Һu?/9Āw@6 sq=5*Ǐ SIkBBC^5p&7&SaE.Oqf,>|۹M[?AEB$҉'k|~aYYH_L)2S|[%/kBJDϞ='?鿹_ b>2e8~ϟի7EJ![^tשSsq ӱIu(PPbb2gcPШIS.^̑/>fMg~SsN^өSg:vf$wȜV@s޼ĉ/bs/_~gCk׮&;]Ï6j#b+{*ȡWbEдbo,Ey 2dȐ!C ]4e.s\Ҁ;(3j@MyCzu^zТ̅#dO>/)}v|ʬɓc'EǍNȇ|>̫9UC?}sS7mrvnӦ==}}+̝;ƍF6,|7o2d(GDDM:3†ժUݳr倬sf)cӃٳ,Xc?9cƬ%K=x`ڴiŊ oYmBRD.][uCN>>3gξVoeH4ըQ#77z%?Gkp֝HNT;@JJ*ɮY~=yT'u.\0a8)KDB`2ٰa7|3zhEkcX]G^;va@˗rj*nE88 xo~#4+VϞ=9rtjj'/]Tz7 ϟlٚr!GwT{Qo䔁T!xRC,\ËH -G^p޼=1bdzzƱc'!Ys$X?;w'N;wFZ СӥKWRR$v׮` O7=~$[@#<4t?ap\7lѓL߽{/ǃÜ0Hr;t᯿~kWWwqr6 wUk>|9Ujrtڅ5kDKKK'#GA_5X7]oݺL{uVN:3~DxR`k֯߈/QƋ/ͩV x6 }jExx$됐B ggWjƍݻDRf'OM>_ێ򑋋.8 v11qW\ӧ>$%$$q_eUV_J]?-۷?w_bHVA&M)TI0fyWNN8ݺuRp)`m?~:|nlԮ]MŸzիז+W()ٹs7h̽ObG<%ȋRXnݡn2b?;a60ͱ!Ժusp>cz BǞrܽ{11 spD4htY'#e˱AcǎW'4n~m?0 << GE[l/=@{c}2dȐ!C 2Hvj2e_om@0t\qoi@"sA篾 jO.]6))̙=8tH]R"_Λʕ^w *M<޽{nݺs7r평o%K'X`l K*ôLY: ڴ'ON0-iB1cƬ{߹s'z%1jA>|@T,9@*U$Y/0qA(ԩSoӦ- ܡBY=ML*-m8~)KժXjMLLQfWFEGժW\M699yqq)ek/ Gfnn.xr PŊ~#F5؝&T2[v&M5mԩoܸI7o  ;M0[!9rرvrraݳFZ2I=x֭0Ni׮PIzńJF@)` ^)UV3g7 mV֭ЪU ԶYh88]\5j”|/bY"V5߿OuÇ;آE+V^K֮]9ܹ 2*epTW>"U}Ʌ 4FHnNB٣wRC[Qm۶G_{H kܸ)ǏHT#hjYt9s.ׯߐIN]Hk8C$ٽ{Onq5j <:H +*T6m#Ȍ ` 5"jܩvM )#`E2DL*r90 Ra8z$HBgB#-B%5^ze GQaG #x }>{ ^|ԙ;:9aQ/aUActL%]GT0e"a &,!#Mu`$b`*B[ ^Ycc£!C 2dȐ7_e.sb'Pzaꈟ )g'MyՀNZR>RVV^mīBV#H rPy W\`#FLLLڲeիWׯ_Hޛ"}!dDSj-پ1akI)^5\ԼS<0#:JȌR%!Kց:TRŊE2Bۯ4!12eIPL% 5Bʠ !$ 52e|@]ϝ0o^咧  +`nZTLEMBL.a>R<҇oԨɦM[rsݾ|J418)4Ŭ)a0"T^,ٶĒlIJq$gm8"&F@$Gܑd.r'|j7 )W^ /ȐWh+V YbȐ!C 2d/m.s\Oy' 2t\ЉCc$ϴsRw4Cހ.Mַ8!D`)Tz2I {xx b}O-t`èI`l!Y Uv`YjS9HDA*7Vp !KvSjԜQ[#5m N$,V/zՃT<"W m|A9Xآ |)0v1D %$w }*K#m$M`T:[}V\(zGfRֿCWF=5\)jHԊbVμ#L[+F#^pGl(ث 3C ٹ3LWCHPlS~7a@CWYbd BH&/ۄ]}#$@F*wBQ1%[&ر)UQb#ņ!J:qP@lM{kFbϝ_M!$( [S<"UV'#;fr4b 2dȐ!CLh2eS^ 5g'$ Q)CЀī"m)e}9:Tt3}GG}갰n!*b5EC #-SGޝ_ʨ+!{X'A8_>{Y҆2S gj  4-e/ Y¯|1f#'v\RR &V@!ɗB_'[C$!Lţ6R(T P:-3*GR\ǀ%שP.8k>#G>Jۄ r:G2dȐ!C z3Ki@\2>zsƇ=E y Pg6qTuC?T4a1TG|ʘ`+/La oA_,eĵ ArL'`)D *Bx "ϧ^)[!Q(h(e1s#ǩh9*;:! F;H80(s |HƮj>+}) UtV!I0`x0 ٰH!ii‹IyQ;/EpcJʞ&bȐ!C 2dįm.s\] 萰 C&G'͈KW V$#sТi;6&f'<\$/RK/"La'&-SԵA6 dwzu$L$,qS%XG!5ETsvy?J;^*V@B0*4YekF A@D?N UlPӦ+W@vw~~m۶W;%U@د[G+)(H(&e]tm׮'BKٲH-0$1#ۤKn=zlҤBmيc/g[u6:u۷h&ʇ œ{Sy}0ufiݤ rzݭ[ʅwUE΋ۡq+J^P(bO7 2dȐ!CLjj2eڀ:n#'E&LM:tܤ76|.2*[ܼy?ث/8{y_bծ]{|}+Z,]bEu6l߾\ȖQBL+! K_-f< ~]I/bV4a !AjH'|yAaJ7mڲ`"xʈUeDA&& ! s9s}yA !0!`ժշl6cƌ>,/"ŽSR#U"}v^bȁ P^YPaTti*;vQVuٗu9: )l^_JĒ0DB* Ԋ/5jԘ &(\Q ؾap+a"@S!C 2dȐ!CHҦm.s\zt?sДC2 QS&όM :zǬx,M<`@`@z"/Y~/^Z̙,_/"ZmѢUϞ<|tV}tZ^6k"$dO8٧ON:ׯ߰00Zyr۴ nٲuVުUP6m+T>N2 [??`x7n:С#ӧOnj׮Yɒ7o e˖C!TzD56mޯ߀֭]"w< JÆTf5GܤI11q.\ܵk*Q 6,SƇ:m6 Uj:;9qxzp64/p lkժCxTHŊpqq2dȟ۷7lذjժ`~ںu  bv̖m^db k|a$J*q(iDt!={5 4PN=N q>޽wԨ1NN. T>%%ҥ+k֬k߾C#/ FDDeg_#6/`Ξ=\`aa9)D.c-X֭kfK,YO Pj6oނ˗J\9Q䠠`eew:[/ÏމJ7 EH|葄qF߾}>nUTyݺ ϟ?~O,~ݿ -mx"_.]vӦ-Ϟ=o{0rh<|sWzI sH%/>S@M[l}q>}N P/3ay"SC0*ҤI3 mێ[߿07رJY%^־}_wPoܸ6Ⱥ_/g[px!B"O9ի ~wǧO0xpRP0B)9{?ϥKW8{6mɓ6mb_^xIɩl leppcN(kn >B#|txx8{lٲ-Z:tC۶msPd5o#g?'HCNgϞ⛯~IO$|9;v…K&LP]0OgaB'$$ r G?{vҍc [IcɈ%BII)_m@B-Zo~/'OI>ܱ"_*^}u@iO:/.lܸy׮=AѰ걢>|_p!2"b\=p~BNCֳgoL r̙QF=@6M jتUбc9Hcdz)Z#F,XCAR'OaT MlIP|9o:8j֬d2D BRX2d(!CCB&']6ہs&N|m#D=r}%=} [;.Vv-#$$uБ+VF֘SS+M)kR"?p%K*VH2=ܽݻ'O c~޽cF3zzj;#|aٳӧO0C+Wy/ *4irnnn԰NzG@S{ORk/.\}xXgΜ[>ڵмyK},GBJM@"'0H֯ߘsaήĉSOs ,s*UqWRWZ|W[lg럕u&4tk+DA3::_sٳPDH$Ԋ8)ںu)eGASN`)7oޮ_aVĒ%0֠gϞ'6D>G:LGM-[ѵkw'!. ) ,"_  {;aaxYF<ر㝜\ r7oV<9mϞ/V,9kON:}IN2y a)i6nTIelȐ!C 2d$듎i@\2{ 褴( !_:tpZгgFFF(Qr⥋--SƧH/sAyѢ%;v*UzyAm6m)],zXepk;vܶm_xyh5jӧO}}+ĝ?Xpt…quuXoK,grYvmɒ% ..nw|}w8== -@Tv#Fj҆ZfmMx ܼyQaÆ1== >v3ACB<0 bnڴyNέ` ̙ߨQkn$'iuɅU ̙SL~W^OLLlٶl F-lܸiVAbcU!`K.ի 52ٺu Y՗:1 #] h֩Sos@R.-[xbff.KvnݺU`avƍ'OСSpp۔s&L0Bҏqwݿ+W̜9s..ySSrssZ߀&…wA@4h߮]Db}%ĄIՇŠ 2rtP!'ݶmS_݁f})aDm=z3f̪\9 &M#s7 f8q*55>\]t%<<\BC1E :t>|8OOǟ“a!nny֭cICﵳg.T #)3gμg1e 'cy'OQOn{qH@o޼ٺu6mrr6ȝ1bk(2#CN?I ;6%..DH۹T_6th˗ߪѬ k;wf7)T``#GYb*5frZ $ď6 ᑣa/ƍv\yQ^H@*`!>B2dȐ!C 2﫦m.s\ a 99*aڛ>u bIQÇXLVŭ?ոqS~85W7nzzij/_q͚u[n/E/*TZr-ʔwр*>/ͽ#x5y/_SހO<\-RTTÓ&Mו+lڴe` 60֮][tbY !~^x٠A#u Uz#GM8sU:tdʔi..n7yvdd4 6Fs̘qh׉%'z^`o\n$軺h a%Kw=BP$ U˖)QH@BN+ҬY 2xpLkԨ{ aEOgeddO58~Qc k֬gϾŋ+]۶ɹѣoHKǠ;w#آ̈j-td2v}ĠMFBBαQ`v7ogq~%*VӣhV=<\8q0>׿o޽Cyrvll<.#⌏xbXXիWNy)Sܹ%H{qIۧOs@F6b:wzX\#A,X84tk߾#,<'ʓ,ԩ˥KW8;vJLLh.|O>dO<͉b ޽^piР!D/?uݻz~}C?@~Ϝw_ѣg/ٳg c"ad//8s&ȝUŠⰳMЛI@j@xkn >M\2ЀNN_B^zn@ψ;9&z|KZiGϞ=sӧ~iԨ~XVK*bŪMhb(ZfÆMeHH/^3jԘkVP^Zxxxhŋ5?#N" 4>:e4x|}+_q򕥭V#Q痋)B$%/bW;~ͷ7DY]c'&L UT;rSԩw͈(Ԝ\@pKB`N@ BB٠A#Rus{SرkTL*dUC[NeBHŪV~-pqqkذ'322Uu8qj-}E)Tj*tig %%@BAAnݻjժ5*U  kϞ} SSA쩒R Hdw3c W׼XĻgWϜ9lucԂ w)7S@*|#Jw.]:ujѳfڱck׮[3snY0]m>b rReDY:b\\< _}cSwƍ aa֬Yc|^`ȐXQpY۱_>*2f8ZCL۴iMo@S1uBI^vu6cB"ǽzx2'JaPs.7O>#S"8pp +תUVͺ;9={()) > TxS1 ϙԑJ6bH!Qy-T p6'OnI<35Đ#>c!' a?JO_f~EA;&!!ætGcsqC:Ɩ]~Ā2#~<{<ʎ3 WG,QNTZ |y+n!C 2dȐ4e.s\p1I yЀNЉvzBDxʀ~J>iEKSNJ7nx~y{*RK9VB%gg7Llbw\9 ?i??7ɓ۟Ֆ-[x^L=z`\\ٳAC̙v ڰaK̘1ثƪUk_T"E{ImԞ^w7jf) p;kvG0aժ K.f.ܹVAo$ʅ21oٲM'֏yoΩ]d񷜜[#FD+5xyxx-VA6+aD[~C"\`,uz6ޠA'O9p44ivĩL4IM[n'HznnDt=z"e"DQ&;w>Aztԩ3HRN;woܸYeTŮg!^cϞ}֭su{}WJy!G6jݺ͹s vl\ru칀p6m>kܑG_޼ys=xpA/رc'8۷hUm_z}(:۽{ORuvؗX4N]5!u vATRe̩$hjnr'ڵGU0Sup`[>|`qT(#S6С#l cnFۊဃ^  I!܀nC %Ct%o7m̖- r tC"Hrׯg ssstcdEǏg߉%Gҥˮ^}իr,#hl3N:EV$]~"h 6ӧC Ĭ a#TRիO$R*F@#<:~ .w{XuV\6lب7(/9QirHxD~γP`ɕPkxɗח_H!C 2dȐ!Ci@\2>S^31ЩVz܀!Y3G,Z6<:'%inJi+8&EE_WVT-*n?~"BOOeݻ)SGGǶhѪjQɔ)Xjٲ5rV={hV.]~ރ^xyA׿M /SSӯ_!J*9s~„Iɩw_Ë:ףGW-dǎcbb.\0""vETvgYVgϘ1 2e|&NL%^&o$Vn?5jLTTLӦ)Beɓg'OMKwo4Ǥz¨E}||);ř4irjjځoiذ1 ,=|83;pr6nn͚pرAcڤI3dd-`9*""@|U^CW^KKKgw6m_@ T׷´i3П4iJzC_TJA/_%ɑ L##֭Ҷm{Dʕ$3gSX|%&&ڵ';#b#}>|D[laz VZsa|@}8*{}4hH``U/KssQLމVN؅ ;wƍ11qX_~~;w9zĈ n ;,{ƍR^|X/Ra@n݆QtqqCP$N +WV[vȐV5+lܸ9'6&/8pa!)<`@('jذBS6lD^cƌ#GשSAT(# ^vDj0HQ(c@ x Xn~}%j۶P+<>>1+XF- +Dԇ%N{!eٹs7ҬY6q3X=wž=!P4S\?_n uHy9 lTȰ111:af|܄y#G.X<|haZڂTt7&EG%[_JZxw֩S:uKMII[rurXjD?yrޟIII-e}%ʗ8}7n޼&\дYYrssO WÆ8عs׽{;`@kYZΝ?k֜7o;w!22(pTh1_Vsrn]z=66yٲLv;w } {2/tɒeQQ14gΜ}zNSO<=j* OZŶbE޾}ڵѱ,yZ3f\v5;vj۶=?R="Wa'N|RؼykvTsFƍpr;ww Y׮] FqP[+S΁Ukŋ /M4۽{On}ddd.]|Р!oɓ^v[j`QNe_c`"BesI +6fsqL rifJ3PGx*$d u#~6q͚u9jƌY 9U^suܒڡCG6mn}GJjgϵ76kB)v˖-[ѷodvV1-Pnݡ  ڴi vփ̙wN[-Z]AM؋$\#ǝ %"{:ukH#aaBEܼup|ً={ôcΔ :[6j R=z#&r`Nl7AڥKUp/^`9i/ܽ{o-5k֦:3u6P.vRp`E2dȐ!C 2ﱦm.s\za 6f@ؘI 3cf[߀~Հ^;qQKG _.Z0-eAj esf!Su`%:h6 hBQF@2a>h }!WZȑc&M 0D0UC^1M, ՠ ya뵼w:4CřB;0#d*Czx%]jUȊ 10A$r* 0P &hBȅB)r H" _0JSї;S;J).{ j6DV(B۝#aH̬ /pW8־ a'"De O^ڀ %lp"Geb@NHd& r0GCCB{#I8 #lr(p' M\&\ ^10B(cU-A;c e2d9VD+eGD! . UUņs Qǣ #rFDlB #{{ɉPBGX Q5$K#,)/lWO 2dȐ!C } i@\2>6tظQg$βCzKG -H_<>qj֬_'p1T$! $rYů-TT2XRTR$Eȅ\HoᕗlBJ} ªza( _ 8AQb:׈嚩tgU1U`4 Q1@| \a4G%(eed*}"/x$T 9Â,I!D*фAP"GȔB; BbUIKA<`!9B.|yB5Hdũ\jHTeˁV/SCYSH/1!P5\0Q0(HT6\H6G#!"$҄C  AH^Q):R!ru[I£!C 2dȐ4e.s\7񟃇>v`aSgX_>=i1K3ӗHg.0=9Vzf\܌)1y Y]VFG&jEzб;ȑhImg)S(Gs\ #~Lp⸸_Bm!R (0\aÃ(FЇ 4e.s\Ԁ׀1nP5!Wp?áo@zvR +L%/m}iW > YUJCV ꭨɂ\G5.Zb*%[p>L 5@XBNUE`I<(1 A#TWR  SVqx)zQ&T)LQ`De%w˫VQkP!`AP g4FVf8Jl9Vr@De0E%AYj0"X !GAix"&b 4"W0*&9Sx$0ZGJVTR<ÒRM BH#_j0gT^ H˜Q~e/G\bBrF$"JUIa !aH 5ըJR0/aJ_/CY/sۣm5Ԋ CaȐ!C 2d^e.sכСCRz6j@ؘ!#bEMN2IWthIF/LKIg͌=5**Nn1)Z$E_5=՟R4K%a&M˔P`^DWF-9eS!A!}ċї B12^cښz&{&ڃaT wx(V1!M;~ K#A^a#ג2 8n-ڝ|&;&*,x].J_]$BGGaג\ %B6 oa*m+w(/j U: .5SH1^l 𥆂|9Q CNjs O* wє"A0!P6); 5ƄCe1KrSF4e!̑$^^P`UHlҪ )%6h}0dȐ!C 2dÉ'M\23dPr)};h 5bF͈K[Wp$IL0=&nZt䈨!j d?~j02;%S5e؍HIUAKEr +NV }UX1x[_F.exu BĠPB)Ej !4 S Hè%5"2j H<%{U pE\_}9%G D±>h"xH(*F & "Uy@xGY M*#MH: v 9Lm  E_2\aTHG"Mp/\ m_'飣0dm@#=**H NQF0ZES&҄y^&La$RF"XN͖K.IDATR L%a 8ҷr90a,MC 2dȐ!CD"j2e_V ] M{у"&@a1Scf;tЩC*|5ŭ2BEsqqsvveK*mފ02j"ddULՎ>Qu(XE%V2 2ajŪ+HH˫S3vHH<(] t-ii!B"IXs|j"|ٲlMԔ5ri2EA2NJ-(jJDpCà@$$A"}-iC B$ @o@|0.!ψfr\hP!gvG4P8(N!a"L1Q.HV\E͂A.+3B Na ,D)fWL1uDa`nX ʒRjNe%@$((RBNN.B9 ^aN H [ ^ $HP{(Gܕܰ!e # Y;HL t`8ؤHBU$A1/**Kx 2dȐ!C :i@\2= ly )I3Q^1qQF -H_(-eaZܤt|Œ؟B+zj@_Y=ĪUwܥWޝ:uTWWm;uUWWLhyat$G[og^Btw\3UL`9>$L1PB֚4iңG޽֪UG +F ^M ѣW-Xd]d-Z!֭{VAh*F[@CC5i*}G+xajd!_)l QDDa׷|ӦMWE<&0<8r)ar)N@@$S9U ACj&j׮ O"Zаa*UI_alw S HThJ"bԭ[_/_c΍5ȑ@5knݺ #PP+$UgrQHXp <:*:e g Q K1ɢg{oU{pwĕ47;7 wy=]? NHTz>k/_ϪÉ)H+ڵ;!Q^+QPi?.$X6Yh03t֢ =zi]\H,9455="fQ.[y{D'l,_ P$u {. 2d+!;8,VQbX ` [,Ĵ)gK!Bb)gs( f : p [ sT5PC 5Ԩz|mxO80cy`04-[z(*r_x'4dwH`CzKPEҀ^j`7O@7ZE>ٻwSTT{iEwm۞]~I?EaKz.̕;tޒV,Z\ W0p*.,P#RSS_|Y\\xq8)Q(!֭nݺ㧿o^~ۭ~58- Ȋ+^ 6 zu dI00 -, lA߼y TaKfa`|%H'k? ,7ҥ+;w1lԨ1wS('(>BtJW, իkԨss]Zׯ2d^al!ʡ+vtzptQB(lRX<"<ʟLԬYZ JMMK~5 o׮Ù3lWե.>|dZZ!W7߀$PMpY0#QOOτN8|_:{<@Qunz'883&p]®T%@@RtP B%лwyuкu[>W>ׯ߈/%hscHQо}gddݸqG^ᣅC c@,h  l/[(ΝsS萐-Y B$XA(B\mP tԲ0aF :^& .Æ9wBv99o0 {H` 6P¯^BG )1hp7BV7=\5PC 5Ԩj|=}{wXKD+7j@+aɺunͤ;vYjm#[ۖ^0dȰ=zI3Y޽'t~!zcƌiQ?Hر..cǎ"¢[SLsuu=z,[њ5{=ut&LԾ}o ]'MҲeki kjj޴_VmB::mll[1Ăi#HIII111 rpp7n>cB-suu(xeff`kР![)Q1*.I}٢E1cfe\ty)vvp%IIɜ nPeq r҂rIb!IooÆС#O<;u#8q!ȡEYrһw_:(mh#Dqި,8i C7t€KzQH2G!$.c 7GN+RpBVfmn+W-/>%" nа£GiӦw]w(DoQQ e׮mBAsssIPxqss'@P2 6 333ӛ{Ƕoߑ_@)w%WlN8q2!p`)n:M޸F, Eqc4!ʑ PtW1')w\2PV9i[H(8@fHii׮F@nbm%!sr@Rٷo!RkfN4((((((((((m}EW h5PC 5n@;x;^>3 D Gw fh@zЁjN:5h ei^nÝ;  }K7nܼyk-j߾cRR26^wy=~l ZQ߾/]ѓgϞݽ{ozO~/^mvtZ{Rxk!֑#ǰ G֓Ç[CCqƍDgg)S˂q/99uժ5hG^Y˗.'-ƕޭ6k|<~r? ffuv@Sǔիꝩ&ӝ\d={*RRv|V JfϞ+ObۏӧE+Wnٲ5( !?yҥ V47gh[d)5110``ZZÇO> | DQ"U\\B% Msׯ{2C l*%Ir*_k<|ΝyTw7vXACL UxB {xx?gb-S9RbOpw` .l:<$OSn'"b^ѱT…KÆ˖(+;j!e '@(Ob١轑=aB A-޲8@k@_`|L1E7rhOSׯ G!QKPDD,\d:=Ζ-[S)3T4xPܠv=!Ql3.\YB<::̓cHQ$pܹB)-[(((ڹs7J%aYRQQ!{d9r}ΝH#!Qp23Q5n܄;!sSի8p>̵jՑ/hֶ%\rNlqzK)/Kl9xwWI/eO3fPqbD?sCQ>móg/('Nu޳vm}96m!ȿ4 a/@.9DmܸԶm{4 ЙNNth>OW5ʕ@j֬=f8;QB9ĂZ EL?|;tfR,|nn۷8y&W0#[OɹFZxxnj'E!4wWDfƎO ǎNC9$ Fk֬Z9~$k􋁂|sV h5PC 5?|hZ-eFgW(9k`04/_v$&zD`_x!nY9 p Pw;6| uw}߾?MMMwshFڵk7n\{:>>K~]ty_ٷh*""jƌСSffv\2l:**k]784a$YY9AkssL3X&e^nCNmBmŠACΞ={ԩnzo׹m֭[BB²e+yoq ?y g~~ Zce,r͛I`ٳ9.qHb ˗(--G|/HKJJ/׳goE!44|ɤbժ%%edBP2rK,^(=Ex2 @ #W^Y⢔ҋ4sE>_:[ܕ ~Rrnbbn􋁂|kU h5PC 5>a|/[OwWwیHO~+atzzK.56T|;gce W$rƜ]99gΜ㮯^&g/^H\?u+yʔi̥g&[ KdnN:`1`cǎ_v~#JTZn@_ 7ǏdfF\?@AAAAAAAAAoǪj0F hn>an3Bfw(YK>eQPo@yu'sUP{q~lm[B455gsFnʕk6mambbֶm[k׮i۷%ڠtvv iaaW=zB wދY;kס{ݺ@0[Y՝>wgff0H\ffSN߼yk^^Azz&[`8vcǎߴQCCo.!+'.JKXdi_ӦMmDp4i֣G'# h۷7K&6lDYŋCTtl׻w_~ƅ ֢E'cСËJ<=.)V䨐\v펓[l#CH9 7@17U1iҔbĭZ!:)n`fJr֤3kZ`w&OZXX 7nxXxX^^ISII"ixE[֪Ur2bHF8H6RS▱%j̙8tރ˗5jass.ׯ-eO A#I~0A ?0֛0aQW^lc+$$Ͽts3f8c_|5oqмy aٳ7;t͚5TKBЏb!AIRM8ܒ0HD؅Ttt,CAAܿ8ֲek/g Nц87q髯{d~4Bӌ[bqE*'j,^hqll d.F?t~Pl yAfvv.;Aպu;h3[j@j ømtWCЀvp',`'ڷk_O6zv:;wA^l=䛜{ކ ؞f̸c׭[f}{-ZM4eըQ?k֬9NG=vXӦ6u4ndxmvΝ;=zO.]B`g͚7vF0̙3իoȆta[ȑ_|H]AT'## X"Iu=rHhmݺ NҔ,+maaSL+/ 07o@ff;'OMz= h !E"kPܽ{aKҋin[r5 q UwѢ\\YH'!зo/?~=3 h<1ž;C(b^^m;$C<,&${(4ϟΝaF~ )"/$chQPEE"fp)/\zxx%&&2jq& h)F$$.n$@QTT"tM8` ?K;EqZmxAjƌ\|Ȑ!k֬!!)tsnζB$wQK{FFJ 3}+9sqjxN\5ˍƭGUAfHի_z1GEHW2km޼%55o'.Fsrn9sᣄ\]q#22 l>O Fu \rs9glw |R#{bTNB̳̹|ڮ]{`FHݱr+WP>{b+ hI||/U[oWʊ_  j@j  i. ]  YW'C,oV͛ީCڟ>X]vǏnܸ9<qK ֶ% 2j՚ظo۟p AЉr8 {'.n ZlV^K)/]QcLM۴iG>}zuilEGǒCɆɭG 8dI9$Q\y$##Yƺup#Gȸqv!%bK fi8>zsgOŤլYeNN. .w#]3g΂9Q6m!p Z0U5tLrY/mG@tm۶߲eձK$!!cff={xrff6Y r:>dUT_d)А(aRRR֯_O@'XD҈ٳ8cT'ֱc''>U ۭ[Mʕk3gΒ.@U6KѤEƍ -ZXlah€wΛ'T>>YY9fͩذwϟD~Fk׮Qv$ zhiiݫWiVJeaao瑍KNHDֿ'O˗̭[{zzBXaaѣnj{l[XXawTmcsKKΜ97~D wi/^^h1<<&pJX<ٳ3׬Y{APX7gmqݻO5j M%=1B*ZhE!8DނCW\!۷,?7 !4`kÆMEEŤ:>L puu'3bHwwP2ҷoڵ ~a#H3z\N[f>8l@4@^TTcK_ vоjUB' GیHYK.\ ;Bo nXnyul߱͛h=,klbb?433zZê wXU te 5k.}DDJp WA 3G?BzahA-: |T`fF"b6RJ\I.Ƀ dERB:B-0BaqV ZYEP$P`E(l RP/na VX:3~.YqU)*DhӍkq)J2_B6)l.q-fdٷDCam˂K)9Aw+.%(f 0 u⤸'6fR'ك8`E%BdF rgI]6A\JĜT 0~bT@KqA(GB x.kfDaX7h`(It $ Fj@j \ hOo+8?BX;o[u! h@w@a5|' ~VF 6 kW謫7D 4@-Ѧv#DZZZ/.P'nYY3yfl40# #ihc!Ől, %L{͚57n;$Y}敡\2dWC$պlk'\eFJ㼮PRvuӀ-pbZ&`&v¥HQl!.bN".(E-A NGEg!)Bdz S$L\Xڀ Eu6Q":"la[\ (R,Dp؀\J….zd-3JD- bgy,\[BEp֯7-<юabݺЀ3 +h[d\jLc0/ ߅ 1B@D@q Й5 "̈,NYj[o>45%<&I a!jaepLAAAAAAAAAo j074YN\gF0tto̬a04\vxIpȰ!‚wo[-dѦE 7.X7oPN:5xiuZ#kYUZ6YY@aB]]?i CI߼y-[.Y%:UaKϒ%)w.3Jt͢2ϧYJ @fͥ}Ͽ HBZ]~@-3 @R!V>,v?qۢ2% O 3GjU/d~ySzDwc5+zR8>p*  %uǖk(hk66p0Eb%欴7~HӁ [r ̖F>^J.%WӁ P-*C5DGۀ;,xWXEtMoan:̥%T B]bF(G ֱnu'4^AoψrD" P Y%l] r (F<YfdYFlFDŽb$?u%9 GFnၓ tNIx(38 gI#> SLF? T)((((((((((jF hS=CW0YѾ~}ɕˏF"G ;,DЛ7-Zn } q%4u?JeӿIFZGmiJZlf0*;7&5)+T p$ Ad-qWef@bCAI 30bH%R"T'3KuLA}!yZy9da!D"F@]j*Y#RaO( 4 TVL#@ jjT=i@prmx}W̨W,Z Ǜ%1ҀtxAo^nЍFH2t <|:tk֬& s=n}+a>"U]o2 fɥD ],fKK뿶 t=,E3!CDG:fS\OYR\.a^G(s%Dφc"#ϱ#,D0|yUPPPPPPPPPPyTZ 5PC]g{ {{6,~ߺý?u:j111_h4c̢f6B'tL@xc1'm%MGV3b$/FV WYp ?kih,-OXG'M5(m?<NH)P(Cˇ$-0* %I4r_\)( .h]`Bu|՟^o*((((((((((ZjjT5׀vv[7c/:{zGx^Cր>7 o;Bv-͢nvvݜ\'Nܶm{kzMw@WL})&Mdή{.]b}t3~f ڵ 5FU=H;) Gtʪn><<ƍЪUkkCk{nnvԨ1 6tʮ5N2|]CfG9u# Clv Jz߾"F)0 D?Ս O2CN҃DHrqquwrtt"0H!CpcΤ)f8n޼'A,(JGj=z“W@5PC 5Ԩz|6w(3#W8$pt䡨p02@D=Ҁjh@PJn rڽ{>}V\\kv:u.\z YY>|dzzӧCCts,Z8tEe-`.t_AFYs8i؂(-WuN\0p)H1#.>]?5f̸7Uڶ0ر]{5{0--IέWw^c`Ydw,211cWҙ2ň.nժ͙3M aRY#fSS#GeV`330 nhNA5PC 5Ԩz//48zzu s3g)ЫV нQ a; 7.Xp^[S&z4kC%%e&Mԩ˗/g͚@{R1E]ssK +33 kXkW"zݺ eew  مsȐav4hd4 bbb!ьZfq @VcX6Ѐ[ȑu["ʭ Qe@؅.j׮ٳo#.rOS֫۠A&6Zl&**m< >ko0cK|[)2c"E m˖-[QQqA=_*"" m"BN$5k!Qx̮ &sI2$6(&%ub}O5j_dHHb=zlzz֢E9sݻهN&j.7oѪUfv108)V1*gϿ3f\zzy~e ? A%jI/3 ׬YױcgItB#Ŗx5pKGቤZ -("r YH8Û ?#j@j {q}[Og[w h(q0i@_{(:RAޱCzo ^pn=22cY4k?ֶ%l0tutG/cƌkժMݷ=#;vxooIȋ;k]5k7ilǎ]GVصܼy ؤw&.۟-kР!CYÆr4pٳgo6l8;wܲeK{{{>}!bii.VG4p tsԨ1Ol۶~8AP]vo:t?@|#,"4n6,,lĉDWn#k+CƂ--O<-,,YBPVd&33ӧNy/w܍w / WK.yϒEܻwZH(we+A%Ko͘1AykN4Jѣp~Ι3|ذd)**FB:txNh,ƌwv%ڥg:99ܻ !K]=j䞀@lllv?C!=DR?̛22dWCB«UQzM?Ù38// =@Z(1yxi9r'[(0a٠XOXJLPNx1πER7ҥ ٍybNi(1Ξ=OA2~a7 /Iv7'+3cf׬Xq~`04Ϭ]~bYpѡB> vmӚb ߾^]w7~~[}WeewǏhg?׳gϵtII soWwwsv=mѢŨEYM46oEVenӦɓ Gwlɳ7R.]oJ&u64mjcffѩS̼;::0={CW۷%44od̙syy#Fws!ۤ,-LɌm=ƏߡcGBkPIz4hÇ־}ǣG 6cK.{򥣣3ntrƍ`g=22իKr8y֭…<>EDDݿ(N$'N"LSNG-*E5 3 <{(G!:u y !EE%cwiiECoܸsbD puIL{{0"G\xI WTիO:Ⱥv-޽NN~j5ƌąK?zxҤ)5k4Bwan f\ڰa@-ąOI8&jIlNӳ(5ԑ^!lXlkB#[l}<3Yj0ހvs s3sVà5׭8<Ȓރ;ЃhbM_8/ۣsGiu6lظ}E!!a '|eٸqS+;vɹb*y,EV/^޵klm۶Oؾ}Ν풓S5mjrW?~ҥ+]voӦH˗ 3`g-7Ndd4Q鼼իZZZNLqfD!W\%LKKOLLlԨQݺ>&p[bk„I/_ѣ%m[R֭vmfdda}!$۷-[!j7t8 ۇl۶s{@54mGi2^^3!$-zdΝ|5j988qy-.??Aj5X'^QJg_q6<<-/^%5آbN,%XA~P((N2j։V:PP,7ɹz_q(w YP ?|UPPPPPPPPPPj'zkW0GA̍}vS+bE<D ??&twx0e gxvE^!>kzw,,, %?vvݤC*=m?~\| llllݺmBB"ʪn-?xPjhҤ3&LzЀKu֣E^b*8c֪UkpKvn^I&VV?'QH m&MyU^}p:DRSӣcY{JGu> 33޽e,ԧ{Vֶ̙1cSSSc,\MiHHȆٰa#+<< fΞ=mɩQpJrΝe6Iה)Ӯ^^ZZ^RR|mHH8tv^EFF߽k#89N_BϞ=755ڵQ.C]J\\Dg:C 1d0R* hd%o!!a\"flcW/^=wAvv8/1@G {9J1cIZRjo?KiAY BׯءC.]1Cyk0nl{޾GQ-Y*R#GR٥艉bc P(S͙33YVfgr)uA=Xly^x9<>a\,={8qĜ*QƼ|zp6={ƖB~piNluKHH\r5J,Znb*T&&ZlYӦM3;(QY*y#jҢ5ݹON R2kYx T[0'D21D5QB$ԂrSp+AشIo ? hpjU7{FD8y9yx{Ίi@:mh@GAK@lȐ=-6xvԹHv7;Ѷm{ssݸqsFjò;p+WFV^qfQҥK׫W]iSZ=zy"[ffFy4CNn>|uVMk֙30gkzw[brٹXqc[ï nbk„_kbdf͚שcڭ[y A[ɘ-23Cg\z6@?_Ӿ}G@R=z– ޭ zs'lhъcǗݍۑ#G57"i?~Q嫖-[Kn+;\$PBx޽<朜\I3fIPb!epYHWtrR~p 7p=xt۷o[Y G*"p:::֬a({޴i '/7[/,(a9̈_d}ՀVC 5P˟_wuT>>.^ߨ9 蕧W.94J Ai@G\,O@oY1`~LCں~C!G[l x2q&HOpvmyDUqhTQ|H_mܸ 98<==]||}AUZAAAAAAAAA2˔j@jQ0|ן_I?8̟m#@3g-Ѐ>aՙq'_ ]c. 7m![6-2<ݡ]F JAFMXZZ7k<00(55sήХiդI  ϝ0}cFM,,Zjy /7odeVA X(''833~."o]/Fcclllֶ%knLܲeۼy~TN]0=+º;Y\\ &["iр[n9spɼ|;Ļhb܈[Q M=<AtsAA6l*..MLFۡC!`[j͖pڍ?̢}Taժ5gg3Tdgb N'(,,|ssoXVN{ %&ڻ7utW"t F89H#TD_a~.kj@jQx_կr;x̌}askNX#=Cq@zБ;‚n^`wN]40<)}FVq37+ML&^-#O8ؘmllh/X]DD[B'piMP[_V9rÇfXVe0*m MM͑~@PzA֢EV1` kioxٳ AP@,b%$NSfP5֨Sǐ(,C,6RPؒP)vPH2%j@!1!%`KFaM—¡mhOP dKB n̸]": (Ks2DhFP-DM RYqL,]`C "]vb-% 3ə:u-I;lbK"D2dEɃbA݉T +t9#la fD$v0?7_~FWՀVC 5P7 ?^k@Osp1<6#cf ޾-=2%X9K#ĆzQa;o]%haܬ;v:^4j=)޶̤]0ْNAӦ6Sm03.~`֞%<-7oޚW,&&wu]w@ؤBĜHAМl5k %, ܢE={ɻ/bbܸq333Kw!Ddd I'Bfk'z$3J8fq5`-&>-0r8EeY[+_ X}eK]wv͒3Hأ o8$|t`-KgHgja`cc+m,`aa\mcQ\zS3Ү."X0#sZZ斵k <% Je, J{jXwړbNKaBJ^l]8&}O1,0 V, Yvu)# BX(aF\"".o b` +<5kq EVnK5Ka<%xnlB p)3-FFU03"FH\ 1.kG(  ŖrfbEt6Q(" XɖhcWDzq;)M!֢}`KAAAAAAAAAAgjU ~ۀvY5܂2`\ѡ"͛7hm?>TZ 5PCOX ~s';4X }mϦ;]ܼ¦7aϮ^zbuW-1#.bOL؞~TZAA0"ՀVC 5P8-4j@{͊ k6]۾Җ7iW[eW-9:Cˢņ[`j@+((|_djj|p;3}4=gYCwnuWݰ'V/WD\;&dWdr`EVAAAAAAAAAAj'7Nv\U}c{7_ݹc.\{qݼ䆸c_7.tezZAA#0"ՀVC 5P4]B7H:桭 [wړzzwʩ7nM<#֫6۹[uԹAF UZAA=0"ՀVC 5P^1mFW`9t9g_8}`Ń9Wܹ~$/2/˺|0ҁnzxӾQ]:w Y|j4>T>!t 袛n)y扢' N<X^ќn8}pƕgv8Ж%aUPPPPPPPPPPLJj@jICp\:#E;׬04KSNM?Ut8TE%SΖ)u8}piܿʮ]¿7(*a$O#s?;S%īx0(*a$^%īFU #*a$^%rSPPPPPPPPj' _~?8̛}u v qoZ 芌ϗ.K;{?K3/$'p97f^;qЙTpO#s?9`N0FUHgpx0F_V%īx0adNAAAAAAAAj4>Ɏ~.^Ξ!p{͊ \ yQs.=}^Υ ?x}iߛ~`}إ(*a$O#s?;S%īx0(*a$^%īFU #*a$^%rSPPPPPPPPj'c#{vҤo+^qKK8~qo=)?m6-?3S%radgpx0F?;S%īx0ȷ*a$^%īO#s ?@5PC 5i@;/?B8cN܂x^Ko(Ig^(M?W|v7ҡ;v`?Bh #~v0 J02FT #*a$^%v0 JW #*a$oUHJW #F~j@jImЀ5=6#rƜ Ck@A[ݬ egK3N,N;x"7xʅvV ©F?902Q8UHJW #©FUHJ}a[0FUH'9jj|x_zI9;-vt r u1kj8 geҀNր>WqЀ8uto04x]n⫊[/])<[qngup}7/bW^C~4hԨ kB ~Ql#F(t=wх>Tj32S602g =.\Cu ٫G.YkJqWUV1*a$A}Z\?lзt&MɥztP>h bdKb*YA R?S7q)r `ʎU (3@3[F0P~P.У5s@:燡RPPPPPPPP0_TZ 5PC{_8gԹ]zy̐J8tar{JnT^(5:ۧ Y ]5[ 4f͚æ3~c=~tFX4mj4DSx*4iL%D9Ё~=Oتz\l Df* ]! ̽ɛqoHz.@͕sZf֨+P`3)ƍ4 J&2s)nRYS`ĥ_x_\?8 'D"3ztʉqM>=!!hj (($D2^9ЁOZ=W@eǪS"@r)Xш=<z!йdf-Ȗ!آ\jU4'Mfx=;Rs6_Qzyg% O]"REΕYgI|0thߡ6U}B!Af͡BZ/C0A{DʂKI, ։MKgӡgILbP4j+14h`P9tؒλqPT qCݟF НdgV+ ʪG?Ț"~Hz[9On,E|`ܨ娈=fdA"uz貀@^\ x.G Iqu&rw+ FBTIu[y*f8 Z<4PٱN1$3Kf`h(66h"7."py%o0)((((((((T_TZ 5PCGxH{V /n(Mz^(xwT 'R5t=.q2-G02gފLpX%<%:~Ď6=? w!U9]z ?+8PN4K$|͟ʁ0Z  qiuZ\S^)""bH׷ĮDQ?SAv1'85T#~L~4"iYk9ψ)[I\J^D~ ݫOtwtVƏd(msKCRmll`lQAAAAAAAAAߣTZ 5PCLJ=utO%4E`jML CX +@ )+!F ~ǒXV +iBsUB355KQB9E'8d.- Y |"!K?HJ?&8\qaN"^c~tU:5X0C!{h)ҋЁh{*R5zsB jf.5_ۃ6r9$D 4ssPY?F(t9c䁏_33K={8XE>(IRVq7qL( Ṟ&ڵMqFZጞBS>ȜBe5L5PC 5Ԩz|=9mgnjo5\}I >˽\u,4䓹 Dz˹~uv]ZWZO~ή3gҥ =|ٳzxxM2ֱj֬4>oB8\LtG޽'K3EVez(!ѣԩ;v E:VM=Oꔡ :|բE1cuC'KHj~L֪U;`c?5:q-'M2{WW7{ђ7fB  8qr˖Te UB/dؒ޽J酎fp6b„I͛ؒӢi3 Juv:E7!mj\#͚ gg~p;ζy#:S P tJ5PC 5Ԩz=w\G@!|Ӏ3wg n_yR4qA|yօ3Eig SOd˻u"c[ߥs+oM7od?/++w  meV}7}mKiM7O>V_`5 ȿ6, yOcRho5,ފD44P~AA4E[qD8chHҺkO2nffѽ{Ϝ+VB ^ ˂K)bEe\W{2tݺ 0aDv<% D&a6,,z{ÇNADEE|C7oȑf UrCTD7Xî66,/e-Νwݻo j֬.a-Zݻ_1^of*Yp E2 jT^݄1x[l*ϱ8Vx{ۗ_V$vԨ1.][[n%JD!kɉ\J a&캕QqLJks@`EhIx?1>m(zVVĉZu8""ٳRs'KۏezzƉ'1'GЃRPPPPPPPP PjU'/|KzyN1m@|ÌGE7?-M|Zx?ۗ޹X}4ba;ɧ3Mvv]j,;{~fcccsss۴ii„I7nniS|}gzU6K{FxZ?23]D5lP=J ,[ ֬Y]%8<ߠ$,겫uO %8)qܻw?իׄ][R▉{@i(=@ҧ0Q) U-ssQƬYwᄁXIH! )rl$Q7:ШjjPcNlٲ&ii:7Q%&N~F$ ?BW7YA@J,䲲6bw  vxW8/V(m-[%u:88ZKR.E! I/"@0֩cRnƍ7ߨaf_|^S./_/%. СXgP+d11 EB4|Lg*g-l"7a|3{fCЀv4Ѐvr[:'rX0h ssrr-:E%P vhoҘ1c̙jٲ5<ň} ݺ@)S-\蟙1{\4h]UۏN@Ǩ45PٚmC7o1|=z|dK(~,$.q~..nŃ(Q8Ǘl`KҋB#@dӦ9-};/))Y@JMMybظQ̚5gҤ)wК" W{8&ȑЃd)~#k-ZYyl_tDfHСt2f 'VptG+uMLL%IaD >BCx(+e6l q~"j*pEb#(~b:֭ &L'Omݺ-R䈲KCZM  ^rNmm[BdK 4` ʉ B ~"Ȃ{7 Au]|eyy'=<<ܥKWxH{?@mBH %(1a@zǏ8pࠑ#Go߾!HO9C|pOmڴ3<;Qܹn޼9kl> )]^rfbFHWI)w61cK\B9#t% %%ڻw_j5$ }󖒒}k$c(#-#>ۿ^Ǐݻ%AǧٳJ[|vH8x~.J_BnO>؅9Aܮ]$22 d\{3?_q>󈈈#G֩SZ~~ SS9Q[ۏꇂ]N> D*ـlY ?|5R h5PC 5>a=GנJ 寮x^~ <.NW+\s$bQ'n;wh]A5,nҤ??5kfsճgڶdu뻺z}V}zzqq+ߩ/򛿇WFFĻw޽}Æy3-{A`>ݿ Rl؊bW:"ҤI3۷WZZs-[i2gffYN =zeeZ6m=zѣGo~ss!^>}^fҎAp))izQY]hъ iwwOD-^~__?~D*|1[k?17z: ,onz={׿w^Nm/)+x_ZzZv~/^Hw +xiPBb))%A^H!Bٲ{'Omڴc:wG"b (\Bʞ å1EՀVC 5P{ӝ|O5g yKa04'4qq[/&xPpa{yW]+˹TuNI.Ψg׺u?~:w|i' w~D֪U;vݼԫW<ۏ.]9sΜywZQ.o.\ бտ#GueӦ-T?qHzM41 ŠR⤤dj*{5'Q(Xp >}QWJhh8O4vmdY&$i!!aO>Nů]'dԲcNXYv}ADǂ%eew$.qsEΩƍ=z4b}ZuaC-11KGi]A=F51bd|UV UP^(\be<{+ A\'N~ɉyݻܽ{CNF0110a"$zQ{;-L;Ν| $ aafu+eh QQ1EE%57<ݾ}Gvv(UL8҇j1Luy.R{KKKG 2ezrrjdd8%&?xVw!7ڵ=PΞ=O_~YCq8Dn r܅;99iom~\J$INN 壩^M5mQL/_8psܹ(Qr9ܷ5y h.H6>|~xk͋T͚yp8QmڶJII!5js=Elc/s#x =Y?С1cr=ztI|qTPhccKnLa3nTӝx{{ϊ0CEE/e>+KzXUi@i GӀX~ i#/ 66V~ӻ+8ڵ{FF֩Sgf̘6#G!hiiݢEN2? 7Κ5 _͚577Di|||1`ncNH n_|m7m9p`ggWt.ҥ˭0))ypZXXuKHH:"P`Ç=z0`$#Ro$ZtޓDFFשcڧO?֋-;'&ڰaٳy/_6lo;::=KlRoq홙?M80 C #{#aa;vb 6L|ٳ:3)JK 35k4hUXDAqP_Y|Si׮Cݺ* ߹s7#T:fmݺȑ11EE%aOCzAe$ŋCLL̈qVʲe+D[nC^^>̘ڵM.@11rPѣJTq^&//oܹMۚX 0˗%Z /z)))CNN.r6GgFDD}'N&d@T5yԼBGJSs0 ^%a`a [l!v-ZÃ6 ADǂKI eA)sY/^r8G ܤ9rCA0vΝ r-D6ٴisZZxh z0=r`ھ}Grr8 瓄s-y/> "dAJ+,,trr47(9"'%]NF6hZFjjbb^Z ߹?a¤CBJJJ lv)/]̙˂lժ (@^_͚5''綄N9Sw 3ڐCĂ4 GB$5j!F qo!<=2}ثW_>**#DA˗/9r">^8&M%nR>xzZ}j<' Qh>U'@bbȑ#p~ܿ׿5={^zI;|,pᔜsAdQ )(((((((_TZ 5PCOU4]\ղe+`ѣ׵kqq`37떜*[PCP"[))iK,b!--#::Κ5N^teϞ}H+ S8%o ?1suuY׮݉"FoJͤu67Qg^<< }·AJӽ{Otܹ6陡ማY <433#Q={ӧO;u' ^--LLW(g %tfGGg(..A˗թc:r( ․*gzÇʡx[ VX8 y=%31H@@`E=(|^SN'j6ԋ̓/~--֫ܚ\vm5hF~ 4IG: qwFRJ@Ӧ9(_٘#n]4;~D ''ئOw,'/R&1C'Y5jرIĉHp{Æh$N'KT+脍e Q%'fW( ݺu[ZZz8$>d8e/Cs9<5{d'''ssC ᳀N8I8)u4jشQf&&sMOOspp.̙3/b܆܌ǖY$%(m̘qԋDEE'$$=EtttZZرcgϞ]PPH}qA@]0<ʀ@"?\'Heη?|/R h5PC 5>a|?j@ϪԀ~ZͣxZn2k},bYΥsiNd\?rz:CZu_]٭Zީ=*k<^^3^zB{߱tڶm_TTb*͛hݺmn=캱թSK'ۏFyϞSR֬YN~(JgeVe2\kGEڶĮb[zAClllퟘxk8›7X0FFj |>vľ}D[Rbc˥0_%%eaСŋ.K,E'~\4)np)V&NL~`Zu^Qq6mNǎ3%x399w֭q[YQ.ITrr*ٖa]d|Y"%~3iҔ7!(!:ipT|ff6c#J\ÆHMMgmff1իOBBڵWio?`rQ-a4c%|p0eLL7nܔ%&$KF˭hb#tݺuH3)gwwOQn42@d”i|}g渺[ԯo8~AKftM怡yըQukbb1gΜTGG'|40/Q1c!NzŹm jirbkΜyoU9K.vAk>LIIݽ{h;v1.R!(VOiPp9Ezzժ5(A-̈\tĉRp?~"q p*nܸƍ{sCsQ8jaLLLzz1cuRRҠAN>G=U@7| o&f}.'MOH5PC 5)+7 ;'j;%}}7ԯ+%>*sЀ<_v.'dFѓYWqjЀnݺM]폏SB5ʴi0`5"P:wzKWڶmoaaեKmv̘1;[ F{ڵicyL4 uvGK, IIgϞG={oݺkR{ tݻoY]yb„I=em/^| [ۖVVuz5kI B8t (711C[ KKO~ \og-%%ȑc-Z?z۹U@]={ޡC'eǎ]]ǏryAhnjj8vmAlٲEh6©SgΝЀHla#6,,0%pzQ˖%Eرԩӟ={1{\H,h=DTQq_{ق̚5*֪UJ8Լy z{ÀEl 2coధwyyRdO*eVuƢh͚QRQQZd!29*7ƍa3gvpp– f8޽{s̅ALHHطo?,щ%цLyyr%%eD'IȚ7UrtǴ =R8#p'OJqK/Xd0~YFt : $\Ʊus3r<?Ar Y\j,室ݯxq$N/:aU T*~63fGH˽ g굶nݖ 'RAfD9;Ju..n_~Y^CF7lX^^>}Üa~1,yܸ =6vI54hܠ~ڵMM: B?A _|]jN$|T+1ONNs89s桐 7nŸ1cƳ&p8Ϸn%sZXXNç"̓LNgܣR{̶ߪUn/_M?>=Bjj|/?88͜0eT'iNҀ3'/` WR.KzQ7R^޻J.g],8z:cZ_݁4hUvŊU-[+`m]k%׮/Yt„6iɓg'NZt9sEڟkѢ;o߁o-P[Kׯ߈ݹ:. x/_B\B!tO/#ؒ"#9k@s#G=z3~~ aQQѣF!=zedd E߾r֬YӦ6<|xWOɑǁ-闛{:j%h`l{Ğ={[lES.*,,^v:ulۏ^L8=ٳgٸpR^^ȑPL{]BCÑݰaSxxСqoȐa SSsTݾQ +<k~<$Huؙ!'zBZZưa#$@*La4hHy]N/͕5bF~Kooq3OC]|~(|LN%y3ҥ+{E H!0kl<${Cmm)h@@ $;͛VPP )ـ*ns)w͚)(ۜIb-H,!Htr3MwDw鼼¥K,ZzM@ο;1b:R5jqW?~:l߾#PTs㠟MӴ5+ EDs9sr %|w]4#d[.nNmq!vϝ;7qy?":q?}+ww6miO(/^ D1a¤jj7 55q'a0Q) I8pKL}{QDDe=;~DBS֭]u}2 TWTTܫW_+N|Re'=)ƽkř4䥞ͽu]:wi@k‚Mmf̘}[> Ketk׮gg-{ _z;]ptt{]tݼykffvBBUk_ ZneZZ_tuuU6no7sr ~7LPm۶#;;O\zML̈("" /^f|||u=VVu[lt4oqÆM>Xhw6'&ȑcC^ٌoڵڵ==,1MvoͽzΝ7n5(0׮]_  !#+}۷ ٘0a1.nii5k&%%ᒹnMm4p٣G/.=r`L&sgg{}\^}_|)ٵ8ē{z}ff65jU `_Čc=p:sjB{rm"9rwYTI5jopIl`>Ì'ZSyI_{3f /6*Fҭ[J*nZ{Μ9sʔ)OuԱ\Fo?a$|o|-O=tj8NkpI'IlKH6-c֬#Frs8bl2GaxJqǝ˽%IhU]>N N}ŗMDKn'|4t1ǽ+1bի0c=; eID u^|ls9ONy$xU6d34OԓO>_) \HҘ:5O)&tI*pÍote?W1R@vFC e@)ؤ(3dZ}(!VR ZF=`T$ǐcmJI Lb>aD[n =kv6k OѳAzU5϶g\u5m>?eAi[?D14J髯.[/,C'v?4QRW}w4r gp]W^yi5X`f,qYqXׯC=gkQ W %PB %PP˧|ʧ|g|ν/}u~cfX1sY>7Å_8jŜKf ;qgO0s\cxwC9t+O;UoY6|"oW#AdͶ`u<\ 73R[:5Nl"%d('"0|._=:a!6_p6h"kM6GUFLw}OrBh(xpG"'T0iCQ1n1{|l+|_0"# &b km Ka!bȄWabQhAf̫5 ^WgLCVr_`d! uq F̅>\ xȉGZ4D%@ś|@P xEF @x5II0C&?ɅAEl(sHb* (jH: .JQc?om%Y8<@+-3Tk$G  RB %PB %K))Yg~-\6V}^>wƮ5|L0샹>X0x9Ϟ^ppCSChU wy|:V?iC6uw*ޝ_{7Ϳ*"+N1FNxI68? |@щ0 :h[t .@61)Ȩ_gb*dD2ZۦCZ\MWBuB҇Z^ xE52#3! M,5ȴL ^kҸ>_tΙ3g^Vw铉 ^=ӧϼλF@ !ȌFe(}M u1&ȸ&@2}C \t X1d0BjB5ud̘w'M^Ǯ>7Nix|f# /#Fa @PQ̖[nu'5fq[].\ܡC'CA;#D?-X5I.}1X' 2 [+Aj3qѯ@xA뇬qOU`,TЈc VDzꂏ@moc.]-]\}6`X^㵾}CW:Y[H !vj3 _؀@'2QzE@qGf^a  # ȫ@uB B p~:[{uK .a '3.2/ڈ5Zd(u"ka%^LqMZGfڂ1tbEF?`jT'5r˭<_~eԨ1\sżBM퉌WH uYVq`ԏyxY {Gh{edC"Szk2e~ѽ{ #!@ eC `#u}dtD`DA/uA(D2D~ZA_h Wdd o$&0@' ]z'O4iJVw HcMa`(L`*i,d,ȴFuj~!jm@W %PB %PP˧|ʧ|g&_˛^vu} xkf-EPx]9s{G7{X1g9#Wlyޞ3U!fw=_ߝ.! Vϳ@ åE뮻#@ cԐ{A@>|/rmatP"C BMyB"Ȃ7 Niwzhꯎ5 " }=vM PF\K'Y;-ނMȄ' }!kPdFcfm pAgr+F҈EYAEQ2! B!ѕ2D`htAyzɉ>,bӠЮ !#/ПR,\jcZ(<(h2ZP|AS;:PxFr! E}~q6 \5BOZ:2J:hid!VH%. V&mmZ&r`l# 0CrA'jIȒI?'kxSPқ9J)(0|Y~3p{IR {/̀Lgm@T %PB %PP/˧|ʧ|g|[.Ki~.5{o-CP=ccVެ1+gX>c×|ȥӇ?picO>Rmo.^?CmnOc( t9_ ȁ@" 2ƒ'}Bb }`o.(kx%!B"@2fGW:OOBbFD(E8<ް&(|xWPk$NL:_v@gk ⪐ˑ@4F{jї-X7ba!d uG@g]vmۂch CN^" f+VUyk 6UdEڒ!ћxMdS!c'Xք hi`BN^q=^lםvA ā؟'qͤ#D JI(NdAPhLR=U8!!ƕWr E (OUYIb+B&Hʩ dZ@DQ`0ĵ 0`7kèkBa!4CY5Ѳ*&xf(Ӈ1/(#p}ڀ%PB %PB W@uT~.))uxп+o_kZ^U?d,>rŌQfX:mb0}ؒM2w[9nK9кurEϧ|V pqǚ2O"HQ0Te].Pѿʷ*TU_+,!"H vU{o+tHEB;E!3Qk"A C>+qeCjwC~KME,|4|wT{4(%FQz^εQZïi:ZfT2deK:!(ڪ(…2EȱTd`"K!g»k}Wr[Ȫa5WDkULȗ< 3ѵeZׄ?ĪUQLVb0V"ө|!vUQ.$C*_?aWl(ӏ_IJUw` Bub!Ufb!BEfR:^CIr>~Uj|" |h2+%j*253ClUZ52v^rj U" W1(K/L|u2M1 dq+|0UGj_B %PB %[))Yg-?}UM.˯㲫︲ak> |^6kcLxȴX4uM4o;ƿ={ۓG4{=!.PgaJ(J(J(JǁtOO=◿[/֫QFy 4@5X0yiCO4wO@|]B %PB %PB %PB LP~.))u{>_DZ Qk|ַ-@ɯ(>/<4xưӆT[`~_J(J(J(JgtOO۳ vU]莫6kظe{`VO"|^>漛߿S͞PƼ9]B %PB %PB %PB tP~.))u{k6lܢE}窟^1g{sޭ󃵾Aϟ4N~ggOxkzcȾ}_|]B %PB %PB %PB LP~.))u{]ߪa^MnV~t~`ʰ̛88zķf8k[G-t %PB %PB %PB %A|ʧ|ʧ|M5ht}o[C-j}ܱK_Kg|eY2œ,ct:.?@PB %PB %PB %P?˧|ʧ|gO;]*>@{O@/6dMhRE, g;klc^9굩zOmb;\o%PB %PB %PB %O))Ygu7;nr{f-郗M` 'p &7:{̫3G:cD)C{Mxןړ=5wJ(J(J(JtOO)^][ַ6mӼw޳Wp,1h~'`b_?9c_5ѯ{ڈ'yq;]m7=۵(?@PB %PB %PB %P?˧|ʧ|gn솛75[>|׽~zwM;o\^s=1f~y^S8AG8g{/G %PB %PB %PB %SA|ʧ|ʧ|Yk5{njrͷnr5{VI)u.Ǽ8gKF8stYc^6ICzc #@Ԥͷomhq跖L}mخst3Q==g5uxCNm;]Gn|;s^  [uXTGoNfU%ҩ2?X3,J+tZLա&o;UCT#0ojMʮuVo/3vy3:TȼVUPg WTU|VڙT-flfnT7S\U>Aڛ*&C aD!㟇ˣQ'K@DAj[ YGbX2^+T?1)ך՝v!f2 >JkT0ZLP2S_yVwVMt𫢡c-6-XԭU\WUuaXEڟU3TF;UM,V!ΣNܩ1\Q2*^9)D@]%Fu55CA"OUTVGkWP+өƭDTAO$뀴$:ATLS5>*-ָ\λZ~XEir* c9fNZFiu(AV!]&):AV%ԐUkZ!EB"nVԶA혬`-ZjCRD_SM˧|ʧ|g]nܼ6ۚiw>zozᴁK`Fw5ß3۬=6mD׉4>ӣݝtUNuտNj,LUse'[&vcXa̒PaZUF!Ia\wjm%rI" ;W4nM]{%n0BHNjuiwء2M_ jbE-hj['ᑯ-fHPtbCF,L LZPH뚀6͟'h)THYr+M6ͺ@4b/@jWZc3LY& unM^uvly:a9a R&H٥QF>|m!xN#Dлd4 k_ZbLGTP& |/"?OW|ƒB#!53 Eg8- Zx4AỳG-U3jW1kW]DQCr1@ syP zCU ;ZȬ=DNf\ b*~U5&M4z-hbcFpe(d^ ZCb SQЄLK ˑeJPY+E_e>L$J\bp2 V#k *aCf]!!}ɓ"uz[A)\kB$ @D& !"*P,צ_wENE((n#Y:J; ƪ+QT$\& Ȑ}& W4@&JcL^ A,x(`4$ bT? %f@׺0Q 뮻4^%Nu %EJtD~fҗ‹Ǥ7քa^#Q5dq9F|.h> b^#*5B :H>B>wD6a ~M(BaBݚaGV8!"Ӈe0CxcgA 2-_ *N'lƅ&mxXS!Gӏ:0~H jŨ(b 5 DZP#k@NKҡ8y$c-Hx@ .B%1f YkW} Tl"z[8)GٌH6M &G)N. X3ٰ @0`WB|ʧ|ʧ|Yw>%3Z1E^?Q]g2kDי#Msڈt<zk]z۬orA?B.wE-(]Gt6~ʋ7YN6:EªNjj&(n"`59P7)eO? yْЀUI?%~ eC~!_k63 "лZk8?2"^4(B#HdZ1̚<4 -MJÐiѢ1k>CicB[lPj\0`F&J>L^ u *埇t IRVXtgׁL2LGa"$ ?ftbLmB׀WЀ)a͚`(d:\pDJ_@k0pCu"A:aL`"$du1 Z>u"PL("0+dص >ZW D80iKXE tH3 A]X((\I%y~Ę8%y -hV PkNK3 c4CAb:ʫC& ZhNkT+(J&bB> "*#'B D~\8N\H'-zbD X3!C9%D]$GV$Mu ҏtņPj4-F!$Wy5^QBjHcl6Z})(AQ苜fd҂h!i I)FBu8Py,Z`5OXH(&R'#GY4(?@OO:>ۛGoWkGnFt>GஓwvF;ۮR^8Ruru":sltw.:s y/NPCWl`6Ëa:[lQG?Ƽ ic.߱F^Hw}T0F"P;zEm"edF?#D PJ`P/ya!SɅDr5 \yr)_SP;=E8k佂Hv" $Qlx]+À"bMhHFdf`7}]ckP'B"QiWH:QyeFF\8U 2󫅄0)W^#LDfkӯM`[M_(pG@HҒEZ $z=^I# uj;^dAf( ~b2 ˜udǒcjyŘW =A-Āg`@v0+FԖ22фKߐhԉ^@f(Hb3:qBZ։# "_(ELQڸKȂ/0F!( L ;.Z}t`0kQqSKb/p?YM809Q4(ĉDo#A4zM4 $q$flTgB> 4X:$`O ET EOXJ_NԡL'C1;4#-dpu1^#99 a7 P+ӏtg-f!,57? $K FWC X05P~.))u|f7zO}M6?{iޘsF|1=&2qPqo0G{W6ԫɗ)W1s1hNFwZ:ށ#{;@C0L/rG5 bbݡХ䀌]ͅ`ht |c:,O!?@(xlD*gvL0_ragdR aG|+ ̤uf\s$+kM%72͐Dr">GZ%4 KцWH6~_WlVȴE_tq< Tgh5uH#?\4ɉy'P AAׇ^XB3A<hA 5(PF S H[FZDy^ !pYo,X#3/R(M?x'E$2_P@H4/r hk{P!", G/FZA" 9"ukBŽ8,AXB<%XButu>+x;S|ha[D1 o (G 6Ю :@Ȁ!@NFvC !}f {iP:G - ` J@ gfW JZa(+!ؠӞ_ KfbRh i| '%ɹ 0aYhW!*:Vb` !*`ђ9 3GZdq {ڼґ87@,Sc^ ZDdqV)l@T!عV(?@OO:>oڼM;>xj\4{[z3G1]&6.c0;?xHC]Qd6laXq@֩W95snE:09~ ]/IoP..r(9F82;Ň _&3u `@,y0lM7xM!2/+6|K5|ص(qb-"4d,J|Lpdž|B 1dN_h'\m _+^WX2d y_'Q40,3@CIkUZcF]fp71$]HJRcA|I @LQCZX ѫO`:| u )d[lDk@:OZe/UQu-I82Nx_z]D JOĴ0I(ʹAzF!am`Oa_ p|2E_2y"P:H3 D"%1_(Ib'9 odxE LEcZ68Mv0a4Jd,(7X[ѵzRh,"/l D@Ar.xkŽX~QH^3=˧|ʧ|gn\߿ZxhЕ}yczmΈGu>!Oe;] 㮸;)H<=+z}+J(7TCQ!%9 n<ēMwS^ɜL">X+\rYfͯz2՗.!" ri_|{KK-Ym?^{]D/kZֆد5#]t)Z `BN`w?8\/1:A <4_BڴisSŗJAtxwq'|;۷#+-KG+:ue-ͅpx4aOeH[kڴ鳫Kȑ;1GW5o~;oxAm{bJ<|SN95S:,I5gȤaF}vQFuHM~I-LO:k(لI&!df?X o͈\{ꩧ]"$:N 2fϞK3!%YA%KZxW16,?JJCRBO8q{L㎖l+ ˖P͜9tx p}o5Pu55B 2* m:!ӆ7-( [CNag4e˖wΜ9SLƛH?/ aD^,|W@qmP)e߾B~Goa[_2 mFGpܹ˗x/rj3BCF, ů`$̙@^x%~(ߚ5kV[¯b*hD < M:xTZV4WJ >9UfӦwBѤm~a 7ܔS)A<+t4D]x, BI Q\)=cM%6C>tb9OE5,K;ikڸ >YTZ120fmVuDrn׭~Ǝh^`SO"$VtIM 0ڨKVV;T`0҈_ΝRG,r(-0gi#} D>ZL IKhIua',_YJ Idf(x, 0(.b7ڨUꠡ D/k s M%3Ҏ:mX6`c (-4 &K } _N6l}..n'O$Vta+%v{oiӏ;L .$ԯ߀,O 1F ;w>n; :E}Z~饗u4h)S982zf?Ot(汓%b/r"0xYmr;GqeW˿|~Mİ1cƞvi7ܰ Su٧|iyZ*2qQm:͛["@Yid0İpMuX*|et7Wl޼wQX8hF3kTeC!'9%:SD>\ZҜD;sl^GW,y7xdUW]c.D䧟~RȁPjDd.02gۿ>Vv1mvݵ&pUX}?J}/YJ;!VΖowbI ^̹ܡC=؋@xsI&R8`uZwt|~U~2`  1-\r{}`Sm47HI@g xǒao˗aub@c37oogmС&E^祗z|!{}|sȑ\)%kk=yb!ry|eřqKLZQbISN9mʔiu@1XhO?]yζ.:uR;]t%,QrL4gډ' 18-$J ||F ۷y_gco[+PZal.^$9B2!fGˆlڌ48KfrV.~Q v5~ߓx TfͿo^ve{キ?9EwD9DL8K+P`R:#ˆ,XC-ie]HN,o ˨ 0|x"Rr|XQ2;JFL!Zsʕ֡vVLS--XRhm»>ZiڦMjɺM74n|<b>fe(3Ek7&ѳ]uQs=j…t /t2U}Р!g J\5Rf^E Pgy@Iw\X^dI =z(]6ێ̙SL :j);|8;&Lɐ?jg-vz.[z/Wl՞u.￟IcNƕ dj\RMG \ѐ5V o*RHصƍd }ŋ*DdIe2tA! b * /X׸fG9r/jC9g^bN˗m*OEr"oF0?ED8>4L1dD L'_$P"S>S>_Z9_rǞ+;wȑy|`4 Ѝn}3hat1QVJYFK\1 s7q+tK)]n oP{w[p4E\`/ܮ;J|8b^?̳Wz`fu 'yI -^h;u<~D\ 3D <9Ve)ޱ }adu )D_!ިu\pʸǟبQcA"CF.9s)# nD&(1l,\v2p_=zlX˹ A"" ga++|ʬ#1<^}5:=|_kFBJ95QӦ9<]~Ij/~ 6>}E~ޡH&Ah4 \UBBI.7pӤISJDͤM]`䡛eSIc 2b2|W_}^!C)H`~Lʗ/n^<`fpn~嗗.]ԣGOiՍ;{!\sͥ^ڤɭ^CB.vxrrog*ɗ-RA5o(S[G{ WVh~(PsǨ[I LD/q!CcO1&1p$!s̽6nk0IKM C= 1 |@y(CSO=*)#jȌXʕ?Fe9$KB:]G6(fHm9p F2k߾; >_~g܄\%\xˀo 4fy\l d2j|N4L(SUZ7|/uV(F1d2 ٦+VܹApE߿kn2Úzv ;FM!}  euT[_;Ae/͆cE/u>}Oie [2d.YG a1̀:жmÇ/Ymg0Fv l >}^hht(|s@/PG&ݧ[UɆW=}y#X({Mձb",&Lj׮z]o tZ;tQͯbU\wln9~~z뭷Ld'2&gvh@~'|Z`8hk%0^,; ˥!Sdҥ1r/ ]lCy2ċS?nRi.ӆ=a# /t0`noo*рL(Kƍ0{\k*$Uۏyԛif<a<̵%mI}e 2j ϝ;_ĸ@ cqh(V^u51hƍwf!qu~9]"Gy!QK:`S~D8,"I{t9ٿ1xCfJ mλRCn׾vJfnP# fJXlq/&"xi-w}z-U1Z+b0,$8fTzPF^ .`ԨQwy禛nzO2A67 iTH,Uz_!ζ̣@]vB>p Bc,`Qa$bfnf)KI4^%%Z)|Wu=NL<>l>C(7߼ul22Չ0 ׯ_9V4*ڷ0eTbk*8 $l}*EHۚIԤdcL`D$+~L&;),#Gf%$(QgD;r VdE!j.\ sƌyׂRTJٽM7݂_r9眳[40R ; 9;`NgEÆhLP0RXX(⠟P$ZxStOO~^>fx&-~sc<7z[BgȐCs=[``cK/G?…fΜ,t)5zxqE? -Zhƌ*9 .OٳΊ+z'ՑV,^T3oނl"c\w`^V+kUul^{˃I{>@QJg5 /~s=*B~[t{:} a3g==d/ЕjP)Y+MIDATيB~Р!ʻwb{b%j]G?c!qK -Z"L*(FaΜyFLEfD6}LAP!<ۖ[nW|3g=ZvƢur?W?7okP¥,&G.\L$h,)!Ϛ5{ɒ,T¦Jr )4rYAQi̦*le"̙zؚ7'3%.wZJuhTbIÕ 3f5${i7ɥ1FA5YQCYm>LP’&?M{okqCfʼ̚5G_rȐa27ޔ,qq%ZsȐd?@nTs/"nzf[ٳss6d RZ~(Kҥq"&$~ I#.h\[o;|+Wg6 */wo۷R[ڸoնu lw!$$;Naoa8b(Y߂9bᣏ>qCh})\ ],3<'W剹ȡUw`Rtlيs I.ys&$j sm!o?oΞ=7t)b3u4#쇶>ŏ__h a=6m-绘J[_LKȑ~9&^~v\ZK(R34I1!D̐uogFKRTn #I6ΝD%I8<ӡza_.gZ ۵MtR%IUS~1zQXJdG6HzMqÏ.|w+SO.C&@]Zߏ>;q9pwn0D u,|_z-G(:w~A,Xcq gϙc9/pԯ_n֭$!/6Ny,µO׫W߿N:l͠AzyǹtP|؉/7X̠4 \o@#F~k`de~_WS#3Y|:uj۶m L1[rBX`؀rcLx#8rM4>|xǎϑF ]ߒNKw>NPd"%襊QJi:nǒaLbF|! I7V:SDٷTrA *`L<3vevy]'L#h;@, 05@ `H1REHd6IBdyI#<)o/Zd9/o 1duEK]&Hx)l1F>] d(m(v'!/Y{UJbڅDaaF4N>(A>ӱXP|v@iʂ= l8J.{'cly`I%QӲҳl(I$#{"f5TRwi%)2;RM\#gqxqeR sjrxUV|[߮WP)0FDE?,iߨ9manAW~6T\X('&;$\?r)8U^o/x>}C=/e3b3VӉRTd\}3=z1Cl>lƍ;bԩܫ_L /Oq=z}kJگ~(>._?z hL4Ug,]O,@3ϴSip@-׬dH idL8u =[4TvBS_=V{;(w}3˦ iܾ}UG6`4W]uͧ~B.8x棠5XAQ#H9bd9BDOm7eUO=MmY<12g!@s([ vl{E7), m>(P_x,iԌ c8qYڷpctP{衇_MU;JBTlJ%e(i /@+V\|ŕcҥ~O!/J+@vo{dH)AHVI*]cb.r,w1?w\>F :ۥq+[nlC@ e"^gҟzj^ e˭_%E=:3Ն/ &sWX龧V_+0)]t]di _VTL[)f{H~-ы9_pɧh.xݻp" .&j'xrڴЧkn,!wg61A2.|.*bK+2ȟ͙֭;\%|(cnRMm5徴t>}@I<hZ~^M%Eju(Qv>K[#G.d`M7;c'MK/P=.!1ji3u{ a |3 RbN!sYy^dרQc\{e2nk%D 7x3K_Z^f ر,PJT(jmvpUyw[n:m߾pad2_٤g=f!ȷ:`7oqG;;uHdZvI#3~뭷lc RYe)Qz rcٲ&e]v~G!Œ̛zFLSRaEb<_oҤI;w:u*_]y'6 C~h̘1~x>}^z饽kmfmеk믿ɲ!%i6o~7m\3IW:B/_ޡC=#Blmef͚-)`[k7O6F~?sG)o1(-ZҞwu̷~C4e|ME e;b͊!$qu{x6oC!zk4YFЫ曛ߠ$Ў %7e@RQ۝:um١?1Sܱ3˥?ְa#E mf?ߠ.ֈQ6o~[(ĚY$S4~_[煄w@$խPHyGܱc'Ჾ,X"ͼ`a;ZpJdD !{J{w}73K8x͟"hS>._z̷Whroxu޻/ѽfyiڈSuv|~5?@+ѵk׺unNM5kaqr9t]ee8 I0v7LbqĈQ<sT,wGyL-B4]u^|,`[]:UWF.*rxpV'4mA;V埀pW*?M qƻ\-u=^Y:u J.gbTd4b袋U.0 sG=t#5KCII/^EQ-Z?C2 |Qv3 j,f ㎛3g믿2c08Uʯ8UHU绘t%b6Rp݆͛ 7OT?jI`0Q-Ztp_򊘐|Wu5W4=f/t Ky}75lب]*x ̸uT %r@PxgxWj $ܫYڶ}fԨl$S7t4W_ݐfMeK5 _ t?D5zzٍ _BVL!7}_(~rU[2͐IU)ƻŹ W%(@of Qƚ2A.Lc5\x}Sg^ 4*m,@Eɍ.4|qIvO !>0`ԩr/SeСNx3Tkyۃxd١^<že3},e#!:^HlQ6ZWz&Yz")ڈMi/^׿ kV}C 0ݚX%Yު]VyMw˔U~!~ 瞻|K_*VDh7n'!1L w]f#1aHŤN ֕?u ]sJgmoYk&wt%C䃹P$m)F!e%Sc;w}/>^Ad '4OF@icjLE󬲔/]A18_HMz\|QN妞dQ ѭ>ӄ(kj;XQסC'Y:\(yM[glĮnNX%o\hwu=vF}A88 tY7tӰal8C.$-?l) 6W_}^kxRNwyI\p1c.RqYùp"sa;uR8A#K.c!,+_hmމ  #1bܳg;Tc=Ds>4!=3#' ]|_ %?x(쉡 W_f_X7khlIH "#[dΝ7gKd&;q/|bEdiSZlЫ(}[az'|ŋ'& ,xF;tpS#)u,]+F{@&#8d0EGI!S: Κ59:D1!}c;0ާww^~-B"攸9yeWf[/3T%X;N|f+6gy M3TаgX\εLE* @g:Gȷ'塀aj@,CQR{"GY"\)%: #{d%DX: YΌw[S;+d">/N 0|-~,_šUsv҆Xl~M(yެ|;Umvy:[/"3o#icRI]FyGu3K.uWZ|j})eP)i2We}\L dMO8iӦjj-8C|>} :7Jv*7,3ja+??aHkd^q@ Db(ltxʼn@&;LvP%C5YJ&ùAKoMeZhj%Hf뮻.\瞕ߊC(2e:$s,[SOeEcxD$Pb>䤅$0n'2-P0Yltq4 \tX:AU,|v+!Ě"M.Gҗg^ g۩ ؀0 MkUʺh-za:tpN*(PoYN֜: &!1Jǡ&Atp0 =@Yv1SN0Iqy9FTqqʒ#6G2]f^^b\쳯۠n+ĨE4u PU?h"vb>Rb6ir!ez,DK/sCseE$+\ 0ȑ]9.6Ю}|(ԱG [FSQtp['.5)B)lpU]&~w^4E;GN;jFTrPb#&keÈ:ulѢ%_~%_3lywu*#SxLQѱsˏ=xUoQ*%\K n#-[ީυwt N׈%͚5W)(\W.kG b={+PTuD#A+~K!\ʰo|ߠY{sЪپ}aÆuݻOjM-O:SAlu.fkP} PHQ$O<9idb]L(iI~sO?wݼ e>9' 4#R@ZS 3u{imLHu,QKLYvsJs,[_ . K6pY"l رȁH$Αs<ՄeBiYb ul5^)%0d^pIu7 0Å{Jc `bUr>}'xx+wԪF %!-AVJ0tGh@ń)1/lҤ .xoMww9of|Lђ>|-@%#ߦDK/lSΌ1{w`[k>e {9?,UY2ӦM7rCHi]Gc ;?g#*[+ξ?;L'Q'fF.~㟘DKO`Oa-w śn暢{bW02rHx "QZ|i'Bc>;~kmIСQVz7q9Hk+cݮ.?Z-]&K; /0 ?^x… ~׽Y6r=K P$[~6x㍤9L@;tX10}fm}"AB#. ` MWBw! zETX%`2BTn=oHV?fihm>ͻ'ui+?pYgjH#V߆f^I03δҕy,:VJw^5F)ɱ3(/-m1L}I+gf0Q}T1 2D ds9s\|{キ+wQ;sv+V :HEH'RmAKL_TiҪ]$MeUK4xM /X+dGق$۔lVZ{駟!ڀdGN?|sq]zlwǽψ?dr޼y0 #(IVE&ᦕƼ:DhG=dȐ޽{ov!-dfH& 2$~{KF>;v-L}]wmVգHk!ǠACq;ǎEyTxQg7߲rJHqmQ pRdu_:w* Si 9e~leJEŃvlrf-b2($8jf뮕o4UVhA: ?eT" ^z w r%3a*ωv`%׹l U*#T  R[zr†>+Jt Hp9'`۔C|WL8k+^uX۶}F4-Fco-4(#aR) uw@x$XW+)?@OOϺ<s1`*z5s+G4ux oufO@!C۶m.lU,+>܄N8tQȦ t6;zs3$0T?xĪ4hQ+'#Lr|huUV]qU pf{ﭼKvmF>|뭷p&*00[iJߥK7Z 1IiZrTܨ { /oۇz8(TjK~~Wz"FBWlcVTB+W~ \)]x!57uW+\9 #N:qjbęe-JAVթ8\pV7jfםw/|4i],_哺?SW~3s DK>&]@tO~RtsGGy Є͚j$8Xxy+ d7M>޶#VI])Ӽ"Qoa]# h$>g㪰t鲆 dMRH k(ZcuL{? ǟt3dִd20#B${G\rO2㥗^`rО!:2JV#-#%I&NG;5r䨳:s-dMߣh:`1&Dސևi~y-2:V[l5jԨ=_FC5q`'7x9]QZ_D{b@f,P#v[.Q̨WPٕ_>{W@,DhH믿^ ;~}fp:m1؅3ߣكk;78Dcb.@ʇm^>˨"[J}U.gikKsn Us}lFFs=oEK0Bl|q0vd}?:Gf=#bG"F{iL~۶Zy;ٳ_\tӸOd帎2eٳMyw-bs'',rNma4CYsڸlԱPzH cݻ]ezР!AԲC]w}qj<O<>b#@;L")cs&k߹ TjKˍdyr(W"@͖ cM!+l>s>軦OLS#;YALNA0[rgvfsm֬9v*lLV6w6%dF]ZF-Eǎ9uֶƍ[:쳷f[.Kr"6")$䭹;#rHt )MQG5yVZmf;ģjva~ӟ T҃0&Llٲ NU E 7ܸr{?[X\h8 i?JA)򐩌7i/Q+U׆ǥzQV(, WņuT"`IRWZ:8b3$ ]$lŖ ,W*`:uzN6`c`w{7oW_]9wYY2x',jlK a; bAxB^lx_ҩd8鮔;#c`< ,"pFFɇ/(DZ@jĐ}7~D~:[]qcƌiذaPoU1rm>3q$.\`6]: 2,pɦ@/K2 y+ L_Q>S>S>зT?@7m~"كO?« 'pbyc_#/Mԑ= :cٯ{uVWN;Eϐ!ÕM0gFwr90)OxnNsAQU3G h?T揻{d%iZﭷ޹75k 2hJT/o֭T*0iٳ6۩BFCj }9Խ[p=ԭ;[wBQeV˲W).b,JŁ_bcpqpP3;d\rz˪a` Cs C_0ax2@՘n[;~ܸw_lKf5eēW\q%KL xՠ뭷A.BrkU R-kvѢŷrnuT~.VŰ@ߺu+xD 'ڵW4J=*ezKBW8^֗re[o]W}^2ZmIwP,:T-*(ړĪ[l!buq_G C|6Jp71*ߥTJ[n}mM !*l/Z6kDݦrF ֲJ 1d0KeݻЁ h{ ͢VnD/3.]f/]6 C=Qr*Hv㎻؟ x+\ps{.dx(ziSpn}?6lLjfE7tN!.^Hkkxİ{'&Tk)A`%̙3M+^LJ>@;ar9>6a pښe]~-%߯ߛR_29ːvyöbM2M̙D 6ݞ{5l#FqD嗟p(d;6s6.wcw4hpޯ|p=g-ܹ# Ҿ}$=ĉU@$hbNKǎوoob&L߸L9}VCЫK&L<|Z;#FS~*,g^T;D} @PCJJV7x{תU+uEÆWnN}lUR&뮻1Ln\|M 0fƛJn#pƛ#k/Bvoxmȶʔ"NTM"f袋.q@ZћD9)lNLEՔz@pZllrIgw9kv\зm du$x̙3cǎ;PG8d/ՅsTʌ?-C&iR"@3k&Eg}gSpT{?ζ)л)Z@ѽ -:.DҀU,q/M??W6d/bɍW F!ZL4LLYJMJ_+^'2f!M8z0-&[m?ߟ??~|~??&<F|M427_&!7|V2 9Cškb'YsƼL;7Ν_x'_{Z\ BixUi~/Q38Ss?93 U\ɠqZ+th!E}J|@WT GR׆XL?R)y䮢g-bhsgcpU Bn?'֐KVUSE~9oQC4)iiҫ&oamޯ.|sÒ!o-KU]sѸ)%Đ.-d-!/b&kZ14)2  hVgΜSO}Ž 3֣)KIbC5%詧J>vwMbC,SK }?.+SJW.m7^!͸LG?G}'bO@@@Dw'wa$]եKEw|fv[S1d0TtM2͊c# ~Vmն| 2)T tHQte\棏`fSX?C6:-G4&,Ɏ}}mP> `e#Fosn]qv:d{( %Ib9]:l2ĪQPtGrKrO:JX$̤(پmNC EӼuZ ^:\(CpҤɿsj⊫DrtF?6]M?=eIB^bE%~%aq`S@]X ֗Ωg}YXgcR,I ,7xvi1We BLS&EHi-,[YTcool`m@m e9 QbR-?GVԨ(,]lm7[o~g ~/~_ǯ?o_'_&*%[Ԣ>3^/y>k )6fagmUOmZP3X*6Am|m'kM x_U5U!A[jckj|] k j`UPI#[~/~}u5Mnz}-Z<вw|=?*ߟ?9Mhk ':+sƾ<}ԋG0o=7g}Wǻի3Oer?Cʦ.Tj,s>Fiز]cƌR^u"sd!ƍ,V+8Y]\q#|]:O ' Eo*48MqюwBY ׿o}G4fdĐ>0<`Yꮽ֭喙uwP3(1ᆕ_*7^JE,YѠeCn~SJKQ@HUB$m !RV2FֺҐF&/8H!|N/dDž_˂N~"۷ 6sC?0^4Nf[}d#Ffsp'eL dr $Îڵ_%'ylM֣ՆK+Ǻuszf6$RF4Ѱc_fhQQ$_\z7/䓆2?fI S q:BX"z|QnM Q7Ab'K0]_-1CR٢XTG~,?sI&9 E F?`(dC]tH p{pH#kL$1آDOڸǚn#r HmCAz?zh6mv l/Е)L$6jt5ZPazML uxͅ:e!3jN-h֬MشrK/O9rf+eh2j!y@$ .7C-ljqm(b glpG<_HMCBdv|61wHScu$=d/ E/2 3Ŷ 0,|#;X Kj`_N%b loƐTܱf-UWQmӯC\|0~ k&XQkgP뮻O+y* 62&_9:SsM4Z+ݾe;%˸t!rKbdLb~t>Щf,jnNƎkLX;|eidEh)Eut>[#~LhYK/&0~%V<tɐ GNd`w+QAC,`D 1@mĕhP i$ ᆛzKe4.!Q\|/Xds 0e|=z(.xT:rF=?ӏ>sy8,^ ykµڀ^)`cGG 2mnV]. 61 8"p`o2 #Y46jx"X3e98 QNR&W T%R@B>um ]civb@q掓+]luc.Ji)SxX"P6J-(aҥ[<@۝ *#[@ !%.'UHօ|Z2apZIP:Յ,:?0E}wPۓ)u6t)\v!2ULV4 ;3x^t\ā4M`3آTD"]A j&{#>G@If%FKR]c8(iZ)o:J$3Ð*[ZȤTjHqG6d^TY_:xZn7_77ʧ|ʧ|ʧ|j+l|M㦷~mM﻽YWp}V{F~0w)Ozc3]q{v #u޷mwz!uşSJ|n!4NNd[JS!,F q:G4s::}4ooE?*rjjI0 yJC` ͯ ~0DhI|-H>4kcveHaN_$ |M ڿ>IBjZ81&6FR| HG馕_(LQ d:CbjsE0!62 JL1 i >Qd{Da7DC@fLb@(ca$RȳDKzC$Rƅ #1bq0!c6ɦ`dҏaAǩD#d: $v 9(bC̈"h8gb42ҮtrBZ Q0S!GP %+tg2-$#AU.$@0/N!`!!q b9z~\؟p<x;H]6޸;c1Y|Qe\6jE͂\up O!G"XI4#АWH# 6(존Z9̳.\Œ8X.I4L٪8TJ`2 >$e S_,@(CC0,bl.!ኑZ4BTaa0$ҁGlAYFyZŒ%}xaiOd'R@>L pۛY/3gJ=^V-F,QPgUƞJ1X╖ ő #RgK'aO H`BEUƘ)NM6b@02 5/db<'^ȸF`"D'^*AQ))6>8 jqv0)W(Մ0KuFQedZDI`d Qb .rb|dh(*D M6.Oe?|$/9hB$!)McI!+,M2j g,!0bQ@U[2o(60@xgo~Pxū%$P&6-%I,QЄ@bq1n:ވ~aY@ҘEB,£ ON*1gZN.dg$bC $2\b Aku JѕٌXia'Wg(H1PĂPSgHK `bW,="XdXa$|5$z-!%Mߢ֏Q K"qQBd^!cL{ EZ4x,!ch4H#!$Xb QF|jAa@Hx$6uXH@`y+SOQ01 tiŊdB c#K$`: /@CGV_gsب5F ~w찉L<~qgN^0{֢s̟lK\xŲE`X,],R.Z/zojVXryV,[VV`eT`鼕K\2/_P+-WUQ*`/$|T/O`ɼ,ŋ.Z/^`…,\pj |̛p|yg3gNi3GdΞUTΚ5g?Y3 1{ƌY3~:f t0ku6s56uJ;cӦ%:mfS LZS0yOO)ӫ0md0UL('M@mSfN\kI <:b'OLӯ)A LIS0щ:qM4u¤)` L8&MjL8Obt cF?~ҤISտ=jQcƾ;n Ǎ7z̸Qcƍv*7bԻ#F15vdU # _5aDFΟ° kW ?VX}ƞfa5k''acV 2k  LzFc~ Y7.nju{6[<زwj>@/;rዧX4w_k3GW>@Os#8g_pw~Jqs:W>~x08Cѐp}W]4':XI.B9qs#0ڜ_gӦcg4x롇5D6=pi ؽ0v ۷ 5j"_c(  §,+3@ ތB7X0}:ȴĨC6,`AŢ% ~`"G!I+ޅ,:(uC ôRm̨-9Y;=LFl~Z}:; Qd!!b~4y7,ሃۢ=-ԏ@m^ CEZC(!# lնTo:t (ިF Ć 0p@r!b(^ KG bpK6*2OZa[:iy D"!Z΢R(mא:h !^ Zb^a5L hj#KfGĘharkL g^0/2ba f >B ddz)tzC xkk/ 3 רӏ.aJZ6H.b:Q{B:j*"!0eҐx* ; j펻nݎg68GyxO=ه:Ե?ҭc:>ֵ];a*٩=:=t/>؋=ңCg{vzGJ<} m*=}'ox}yGhH6{￷} W{λluϝN;l޼hM~{m7mrm5[n曛|ӭ7pM7zMn*4[k|u*ڛ o 4lx\U@ҿƫ+j\W6se+jW ^v]..amkE]}EW]pѕ5pUU|8U_?οZpׯ gwjpygwi.9K8Upg_sg_Wj{g\}ZS_s5pZ+O?θ~j 48κ3kଳV3/9 \=*T_ϨA/<@ߨ?~SN;ӿq~%qɧ_ki_?N>rN>gT'կ'?kg 3N9iY<z)s~Gq'qi|Yv}xG}1Ǟr'{wW#ȯ{Ğ{އW]v?g:D́;vNnx] vemӾ T`߾;Omn>>wvngm6u+;a;r i3R]vWuC*!q_9d=!`s;أ;]xMxڴl=œf~"RdhO"ǘD~яL^Z~ 6bܸ ={:cbt- 2W&mT4 Ba 1OQF~xU(ʫN@Tx%EM&E芡zpt abd1;FI(S 铏>D 2j+Я<4`FT^ 9q6C.X(^/=Y+hB$j;^@_Aڨː֫64Cxu# =|$x7yKҋ'fAM®S7u01א0HCb?LM1C]ymTAA+u0ҫX}c,:7H404dЦKj3ϻh WDrfh7>1=tXU( '?mW1aԇ,>(-ledBc \^cF(#'a M'CYI't@N4+Hab&t1,"SeM( hcM%zѕW-BbK_"HMkF'VQ,^c!LZ -cT(-6@`A`g L(A? "M# bI?(0">0x#-|LNRtz܀8cffF1[dYfLl1hɖ-K)0{3k}Oŝ|׵>l:>'IbjRЉ!)]J:R3MtA 8 *MʹKA& "C hB0 \4!ETK TA1J8;,jaZp@i8抆Yڠ+9sƆAܓBHDV( %qUͮ/zpC8qJJ(."C3DB! 4˖(Y_vbE e]iMB Vi_Ȫ-TeE= |M2*@(TA`&%ү&D ~hUATȈMD@ *,< L Ȫ B)x\ fJ 0`TΫI!TM M?Aܬ"NiG3 H E(!f7˄8n~{};wnNOWRQQVVQ^]Y[PPXT\WZWZ/h+0p t4YhZ\؂ڼ'A[͵l22"<<,44$h(KSқ,R\\ dզTe'PUUbd<<""<<meIme- % ͥͥq@SI|cQBCa|MARY~JqNB~f|~Fµ临ʔؤؤظx !666&&6*6j@⢮^rꕈ++/_\qs. / =r>,ppΜ;}*p0Pq ;?ncAAgg '(6 ിig>gN=zȑS&4}OX8}Kpp`og@ ΁N6N6րC`;6X6cu tp wB'cC`OI?#vFiRU{;>vv޶vV^X;jcoak}^xsr`#oVml]mlmmquvlnmmfumVe+v,Xi6۶nP-2y 7Shޚaμ 箟ֺVϜDPfyU3,Ѻ @,Xa´7VMOצ-"ח=^??m@թ~Z;}Ŵ+?+X%Jo̜ ܺ7笟`@/2gYs-\ Xd-۱r-l=CN:6'8o?Q;W2S0ҕ{3f[ʔƢغ/yHa&01:)J*N+G#tZϿ[̰ԔZɚM4) Z"NPAIV7&@┰} 5sЕ(6مZeE<\Q@D% P̎DIU%1Pf dT@, T#)([U(M%M 0CA& iRC*U/Yza:#ӲK~p )S)Kt)EqǜX8%Ъ~S M>HflI3M)rr&"AE`B "BLRʴdԼLY "D:i  HJlb ="b nxTD JpMKP3R'84!SC Jji?@V(b9Ș)1G8;iEDC\e!_zK?`a.8 .8Mυo qꗔKjQ":̰ T \2M!" SliOf(@/(!J-nt(a ԂD @TQ .64c<4LO(Mg#*9QiPįP ( ESԊfCUV@dQ 'p&KB87CVZ8`CM(OGlfD1 p谙~/KM) t :L:  <taB2')CG* &Rxl TAԌ.qB R&J@植xd嗿}3γs&7KTʍ'tt@t HxS."Ux %ґ)%@UP@iHt)aIiNDa/Ύ/ȌMIHMMc&FG%DEGEEGFFEG_JiA}K/Oz|saB/!Bh^SN4@̏-ǎǏbB``,`~~1Uԡxx:x'Sx܍iBז?^O_]D ~2蓽`0B1MRt`FTo3o9k7fYhY6ΞiҝsnY|%ۗڳdŮe+wnlme|[o֌v#VGPKZ_Cb_cBO}BO]JGUJ{eS"_o88~qpb8Ea&f7@(:cOB׾'8'%M:_j\#Dl jc6a]<*EG9|E@ IPwp rFh:H e}r(@M%N مfL(#NI"CtAd? Q -D Q)8 B:`lQRiYS""<x '9OIb(2-9"% ]xK (WV di-AHRtIъBR*B Si]% 1fqSDQ A)AP-(jQj2)1K?t)JLabVURJ\Uy.&(!U&RpVSDDM&TniUGhBR :Gē?JdE `MsJ`' *HP)LׄSR?*:)mTUaL"B ]=Rdfb&Q_iBČ8 P ( /͒bV`ţK3jGDU%Y b&2(Z" bY@kʤFRts<4$gcBȄfdD.J)Q&餪4t G \TB/(%y"L0O6zӊfhZ٢ j !2YHD RHYi \tDDGJW eZJL uMUlT8)65HVve] ĢYt*R"IGcf#0h6՗ gMR fi Y8M%HiOJ9#O)8Ӣ&Nt*( hIlG4š$|r$RJ3 tAhQ7M E*QKP <E]%rLq@TăHDt H "C#ULϑI鹆XRv~Y.6Q(d5!E h jB1ҨRԚ|*%VT3E\  )%舘%je*>!1?'B}~Gm^{MnG͵̮Ϊ̎ 쮚j 6&666&66:1UVvWTvWvU;+b+:*ˣʌWҸֲ؎ʄҤ¤ļ̄XbbbcbcBFQWbFF]jzy #/ ?q.v),bhr^3sgΜN>P=u*SΝ2>hS^O9IySN ܽOuhw'Lh}GnnAvغ?v9fsôQs9nr55ARZc9\]PocP[d;k{'?':6>6>66|mZ9lm{S#Vv:x`NV>;`m8XZ;:غ8ڹ:غ6.w:nX={v;yvͮK,Zu}[wmnrݎEK7_yޢm_tۼ.8o!a[kߜfܵo@r箳WϚǔ53g|ssiVZ`Ռ7WΘe+&oZ`ëo,^1L[*xeddx%OW_^>2c٫07i3 (XefY7-̚M6_uޢ-o-شdŮE>~^v;v; :7V;znjNkHoJOKNnHn*6aӦM{ђO G)PGyltQvVaN&SJڨLBDJJ ФH+RJ Y?pJ'U@ .E%\5@ ФЄẺGJ@G}ui#)u2@Y\"IaR4 :lfVD]Gz@TH@~UQUe`FI4 !f`{)$[LO䃬Uǥ*t."K-U:bQU7+(U SM#.b4[DQ Ń 5T'넢I%└(r^cd"W\H 8)&Y3 TH?D3Up"8Q Hd,JkIUQK)Dc RK h*CfMm/%"DdK@35(sP= "m? < i=aE:U hQɏM[!fSvoES%x@ 'MTEUk ߤ_ BpRJ"NB!9N6t@zA*)J9Q8Q@L,tDC tD>o*7 I! rVD(R@+U@O?*%T&\JTTiQXK$)MNkD&+ЅMTM4#* *>9pJVz Q(I)!`P ȴd@V JJ դ?QIBUt׀Ҥ)N8P"R bn((!"Ei׷AJ&TlQB5vMY2'fؠHJ@G D)&i0ݦT52AtLH9#"|31)+6(&amLdM`O,U*.J"&' A5iu(R%)p ~1ЏTQ*~C7PK\2EU45O\C:tUi2#QUGY2UЉ!2 QED Uᦷb 2mT)iŴ DMp9/fpU!E&@8(HIDC"rU H+6E(* EUܐ)̓`?bR9 03e)b(d"mC.%Sb6pD,t&KtvlQVlE^jmIvmYNCensU^KMA[]QG}IGCIWcYwsywo@@[⾦ž| z z CqO ݍ]gnPvvQF>!$π􁺌)tMBQWǃTTwU @wUxGEtGE\{EB{qŵĴDPZRZRR$ 5EI3tqvR~fb~FbnZµĸ̄Ԅ+q11qѱ1Qq9 WD_|rՈKW".]uK\<ysaDz),BpgM9s8}zN:o"'O2T}| :  @ ??8r40#GZޣ9mCS^>Icxx?0~.mO w <~4㘫{1A΀[AA1G9Zm qv G8〝Q{'wl9<r@&p'_'?gףQ{#vvtር=QZmlX{qvb<=w>lcbkjsz?}[6Y[wv[;[+k-_}+Vmߴj.u.]yѲMn]t۲/:y 7Po_7{^[7P}s꙳W͚z[kLU3g"xc֊7޴Ko f-iVNig.uf,{ OCIڌSKTn_'3t3 9kޜf[kg][i sn->fKXb╻Vٳjޕkv^w.GWЏ;j([xV{ֲ3ӧO{Y$*:NKYqBãp4o p2 )Pb* 5H4II9LYMAlrd6}1C$`: (;-fT!.66(b&Q(P%UJ#)be2PmAt@3.m9JTMD1,JMGS@z p'Sĉ ٢o )@&Y) 7)U(V TMW5ij JIa*NZ DST_`ԸK?p@ .8YLpY*2⢛Ҧ P"@QQ"C>R @USjg*V7RV8r*"ej3}3Ue7PneW r6)PBH MiRIxdH@<0h!“R9'ez't%%6QI @':K.t@tm2|/k Bɭb4xKeKݔbMnk\&! ))/~R" (MNx).BL\u-9:@llM±g ;!RA0jc*SR£ٴKiB)he]zP" M &f"?%"uQA&8%~xI&6q9s2v%Q(fj*͔B!Jx "sO#>d@<gLA 8/Z7l* AirJQ PԊ*s "7 H:;! %i.(iZjMrr+AХ%]#O# еmJ~49씓p# e-_ZV@IRC:@(dQ@%.3&(Jτv&%e4_kkx}i.@{*otךpf704R讷@PgPG`G`{`[`kzE-Ń-כKVVxZS8Zx```yȍkC7[r[n6e5&5$' 0 ~HO^?X$ '[@"0P4P4Pc:x<,X6vx@`X@@XQоZJ bA  BC>އ|D17'AS]=) p: >}TM81{0޲aOO0H\<4\\'i@g'gGs*mlmg/;A;gGwgW.^n^v֮۷٬YgV+[v;vخYk٪WX~];w٭ݸw򭋖nYr{VڵxV==s-қ.4gtz Ж7d`qB 'OMsO?yg=@[^|kZOz}`/x^|ܽlkYo~ݮ?@}`X_Hwѭ72[2RkOp8)+.l~6w|;;^ƁM P@@!r4pRoݺaC|ll8_u N7ߜP]tQ;;if`H8,Yyh+.X簕O9ZwmƌPP3u6]ǠSjC꣉\|"@{^:u䈟(/\JKAHlmPoܸ)eK%nV@h1U,T/Bw8^ mqJϟ ߱> 0$2g`pov0v_í޺ឺ[=շ+nve7;nvZfgβRn(^>^2Q2^ F{ɍ"庽ltͨl+Vp5oZs[rn5gdjLѐx1~>f>Jp!fc`}:FC`.z]P<Ԑ ֧ ֥ ֥_RצeM@MZoMjOMw +; H(o+7>Q4'456hLiLkjJmNKnlNoHk,OohllȪ/ˬ+I+Nk(I)L+M)NKOINLNLMHLM|J\ԕW"##/r\\8|xԹ@Xؕ@hPJ=ô*=1D9s x>}$p"pb?ysN  0^' 0(<( ,?慨A: (}E =by 9z7)`y>y(%`@pOV&^?EX޲?.^'CORN<=Xo ͇Tgѫ|S|?7OI`>@?_hO>7o3.x^j5V;n]. 7),nv5}%!.t[yJcIRv|،'=@srfddk'Z3g_z?NNĿZ}O~FB2 kk;wƆowZ N_tg766޼i4C֭۷o&K@AIJ.` D`@ _sx.L|Hwѯ~+28xctnv5R=[x b&Lr@ ( /YQ * p|RT?CwyNZɪ t?ŋwR/x͚ LH,MrP/PD8Mx5s欦٢ @n7<Q]? 2K^,a ו+W É&&NiFVʥD &/2*83 f1T9l4dUe:?hZcee300+ qd4hAģVxW,+MH& Pj59aSa!Eֱqz{|ϡVM^ %p4Yʡhq.oؖLm\?ac>8@9I\6(TRJM8"B CN11B4j6dvɪ׀ :`2i0$+롡}}˗>a2 kꇍ*D' 4)Z͛?sX9NiD @lBD"thLWHzkBvT@l+~D!UlmS ӧ2|s6I NgC;;g͚P.zzz߿^x)K~ńʨbT&Ф`T9'@o ɚxD2qՄH( 2?i=xob#UީJ (qX"0k J- Sj ,eK==Ń99ee,yaa]qR0Uvt؀ xf'[;F:Knw(Ӟ7ڑ7FvNkhkhKڝ攑MIGFco7Ds)fc[M)Í)7n6%77e 7e 7el̺dX s!t&::2rb<--%IʼnMI ee@KyR[UbgMjw}Vg]v[UFsyFKEVkMfKMFS%"<<"*28"?,/4/5?+9+%>%1.!>>!6.>&>.:!&*1J•W.F^4奈b/=!]9w2 =C[d (F˃&,÷AϓhA9,Fz ::栃<=qټzF=]<pZaߊVܳrcqU,߶t`=[tޚ,:gs7_e l2of5]`|R?mA ѻ(aLV1}ccx}'c0!؄)l&La)2qr"X>֏Wݿv?VۣޒQ|x=g9e1>.:<48!3.$On~W>%"bDw$m%&k&N8>|l%QpȜ9s9?ٳoll|ŊUXA7UR%K}?pu=RġN&p7yQᅫ6!GG~]`ȫ8ǁMI8<͜R9t~TA"d566s ΁;;]2S"@\|TޯCgy7lii;vz?0>~o7b/XJnPsϣOn e+N8r:O~vZ^DD3|MD X=JR N 1=zs r'6&fEdՁ %>z4`ݤā@Lؼy JK_}:$<ٳBgMMTz&FN)GwX)Йtصk/xאd# iإ:MR(秀S`6ƇqPdCF}<1!Z&ԪLZh4IP DHE6Dh s y}xA Mk J쳆SDYPE%R&6GBhDUꗺ "^   jSzܲe{SSSO;(l(JcD9|_醜gb@\YL pO(IdWT(BYQ .o\f<Ҫ"@` |fb7 : lXtBH1XE%]V<yq^=kx&JhY11JM3Z1Ddff(Є!t8`G@񃨳8~_t1 /Xޠϟ,oF)fOQWCBj -x~m5 cz 1:0 , c &^(O S3aJӔ_?ZoSBkYmd>@>~.-.nϹޔߐ[]YZ\W[?Bhђ& !g9ƌy~@&ܵ*g㈈ؙ3gݿpݜ\uE9?iO=ypƱc's[,55& r#LpC TwM!Ma[Yٜ9s;U@@G/_)aXt9) 9DzMr] 844Y.WdlA e+QHr$7o^}?nMuvDHdq``p99ݽHKNN_H|ǎ]d ;FT7%p?cXXxi(B@$E'BW^#B q@**UOGGgfTBB1?{6dh9DtR*̄護楤&'T'($^[:34rJM|8+2E9(&f2:jBR{Cs YDJ\]Y)lI!,z89mcq7p^!&6; %^5B2N>A?kD';GhV؈]C @4bJD86J8.-2b()6Ir笏a])ʢ}{ܹ~~GafsC\cqM"&yNgC #0@;jR*n$Hk413J1w̙e  la|6@`:P-c1WbH(4rOނSZA~vv1zMʊfh:C<9~E[8c?bm#g"ct"Rr,IWW#o$J4A"1&63[.3ɲbaxg*"D9z_! ^mq(lQabKs qApYy]gSc9{VnӊN1޽OS e ,^-TE1ɺcSNMhV}‹o~W_}yn*¦,8!rXd@~9O<[J ;1M#nP '}v'VE785p2٠&f<>ZO]nwڜΪ֊̦ƒ̆”ԊԊkyY%R r sK2 K3 2Jrrsj3k2+rjr[*Ud!o+1W"c#-߆wBŋ1/oЖs0_=<)8}&4 8aN\0ޠOA@'! ?0 t?9= b ]9spf+8gg;o';Ox}vr2ucMlvpptھaպWZf r޵m͆KV^rϒ;,߾xVgv,X}!?^|'M oks>=h|t L=CZ3͏_Gg;OO)]|ޠ'8,p zᲝؽt^ke͏nՏvtl˶<@ե֧vצU$4^M99rP. i.@7dZ~M9k9!rrL}lHu6fHܬYsnH\ iyOnn~BB~\tO'8±H )|@:0͛7׿"UI;94˭ 2uAZjiBL[\[[OGHV>g3HMKK;nV||"ْ0bE-mObb∤bK`{55ulԩ3V$'b)ߦӘ ok 9C!N48t'++{xxVRU uk?q>::2J3C"2H1(/_F]OD/ aaSO`"Dhs7i8)1*XjBAfR}I1q.3۷$$ kVU@0KoLX^^^} 4z"E&…WćCNPLٳo$WU|GO>!) C. CCxnbB/޹3v I7Q%83FFFJ.>peo$ahi=-@)r}1{{qa ,X( xM2z2&TZZN}-))"hdu00jx,Y| 'q[ĉSt-<"x60{p HP[ 0ӆ4\v)n"xrIlъt2n^aAQ't/{n?|ڵ<.І~6ɳ~T?qá_\F1^h/ @+4F8e`0apd|NWWFI!M8͍Qة>l,vvk3(C}yH P`=h`Mpr.b' U8OH8fn4N8Oߙ==\RDx`: 55g.Up)8,"HlDisi<2_ήT&z X~ر#E7 3wollb v~wmzXX81G]۷oz C@JJX>%! e4kxK8B!&0Jp}a`DD$|<?VIf&.m[:SLH‹c"Jˬ>Jvq&]fb|?`f|p˖mAD40d;HY⤄":??!SwAb'kD/ɣH*ph|MZr5'bmQQ1#xbg5NhoyF JQYl!K&L!N@c^EqDo`)ZYw0q@s.J{wC Zcbs`ahhFMd =-!8&VfȺ&G!,=ޯkeVkѣw5p`vV=nF6p"Ӛ“۷LhB'p^]cQWuRDAĦ!k2g-Dlkefl*9 A&H?^z/m;5ٍڪ ;K[+gϣ-ƣVF۽Fyppݛcz};P5_uzn_x_͘LSG7GzGzFzJtEc9:ǁΌ4nGh[X[x{xkݦMcicmmii3g!>֙3ym3oP0Q0ڑ3vGvV{%Jۊo -} E}@O}~Wm^Gun{յkUYe%uEY@}aV]aFMQFyAFɵkE9مٙYyY鹙yY99٩I)q 驅ٕ%9U9U% U9U 5ef$%%&%$DGG]z%>2"Kb/^A\ :y%Z?Oɏ&g;<?@O>[/?y_@ЁOx  {}hpDϑ~ >G)ߣ:= =F|} < LG?' )>{q3>=8t) 봗)=@(]\p8b.;鈣!g;o;/g[O';OgG/gJg'ωg77/gg]7n޼6kX{Vݳi͖6Z/[gʽKVYlǂE1yK_@Ϸ2/Z]s3`VLA?|w/羅ߠgZOA0m՚0?)&La_S>MDZZПd+Zs`VG2jGƮWU,њu9y1>!624jziӦS6N\W|J(9)mm hN}Ҵ|@Vq $8)),, _9E=e`y| H%irK͝;T@xyll7I6?ȱ`tuP7||S쟼?)I{GFMd$zR߶mlq2)Pp7gwuuWTTzzz9 7!\Hn{k  =h/\W_wFnGPHO [on`1*--8bkyRā\: 7" Ǩ %aP=ZNHOk0 ) ɓ@'2aWr;ˆo)zDJO*S?SiDёR)ʅ~CL= ēkmm'_sLf''O(s D.\ZȫgH[[@@,)& wL6mڂx1nS8?9,o0". $,BܸFrF /|H2B"/  0/_;ws1rs/INN!'GӄoL6T3libq5e⡐Mqi3y_͜9 [W):˼ieѵy >+SnݒD_D!!ap .3^>E&>&B2Q_DGǢxpxŊU n)lStצ1_Lwy/""RGR,^Vp XJHݻMC+rjBU MTҤU7P31"T}}+~1= g }] @2^14 qpp#(D OT`cc3taDhb<̳WO XgA3o?xГQ`snd?1$_ĐeNm{L nB@gl1, 'ohBRY)5_Nsboy `<' 741aM,jY,Oxo[_H$ >1":zx֩Ss}\kV@vEpD>zjyn޼: S#@2?C֩B$Aew0~\]pcNuCg-ps8~ѯX_lLf /YpybI-]%$o&lLuz31 G8t6dŬn*)ML:;X?')C?O"#/w'L*6(M6zZ#J*bn~y2[R4E vppdR"K+@Y."Waa}"$erYӇ~]5,d`0=54 )bh!>N kğG!AcM17#i Bvo$}e"X2h\e08LefkG%Ⱦ-5[4{$kϞo,S&ciss 24HN[D<ŻxRf頠$5ݻɬ@pS[?'`WgFLnI2qc?)džIhFdUĒ8O^t9MD h>3mmF6418X_7[#}*yA$sGC^SSnψjB q7"2:Yte"\ʢ?3)Re\%ヘ _x}brZzmss+WZ\xe${#&g+Pc03u[Zڕ=tZG2B|xҷmU\km)j,i屮Y5]3W{Q0ޝ?=߻yV@[]n<>4~@݁j TW׍ԏ_oh{n<_}.@@h_hohO璻݅]9te=|ؓ'^W= xzבv3~{xkxkiw- [xWݮk]y]t%ctY>]t|PเsP`8M>w9 <@ g0^M89p$/M^z_IOOPao zzaCd^3Ny:u货i $ba1?i}\\ d*#""I ɵtG>$I-:ԍ;C,Bir;8ppـ: `{PbT> 齽}$ i+ a/\o)IWnMg߼9LBF-ZFT &NBOxMjkk7mHUTTBBRy _կSD,Wg\hUn'ImAAQllB7V^Kj(xxxa%**kCja>DF^%dQ\JG۷﬩#<,9(wEFM{%5kVWW_t d(W<p.iOΐs b?4tUj"dXw=qQ+<36v2WF3#(>`%?b>_,7&1AhB9 "`qŕ5xDON(eqcPKF1drS>bOѱtsܚfDn@S`kᾝD4 *݌Ni3aYqm7Y XDBkL|iL޽iLim5~ vddܹ nnx3|8 /|Eנq =SBg_L*ݣa/\ިn۶Cљ;6橧"t@XEM3 ~]^zMycc3M\SO}&L` Μ f2ҧ7vv°p  ^1@(.]fXɆ'OsG rjw2-#6F F 7MDhp0EN2@ݽzSN+% ?r(U s,0F +; #&,Ӧc'a'[ l#CΠ2vcT<+JX<{,EUd+cP C&(af9;Ǹ#|UYf u~q>RN81쭪K s-СS (  42r7쥕H0Ci :::37 3pqPr/1YTի 1D#**-N1Ps(a79U6sQ ˀDpЉ$=N+Hh9-$$AVIxМ_HB,@.M`\G=codSN͜9R& YATq[ܭE i2;(Srs!i!Pj10Ϲ A MC]p \olc2x-n*m謺U=S;pz`ֻϜ ޻qoHϽ; nwu񁚱APƻCC Տ_3ޚK6~(_yb^o齾{% tݛ7^O:3d=͹ۙ3ޑ~#^{Y;DY:,?6ޓ{'o'^OnJnW]vN UwowTQq| l+h)h)m*j(l(j(/+l.l*hok̫/ϭ+ͭ/˯+-*̫Ϭ*H*)7>Uv-#%9>!Ր3Guu=|Ј䤴ԌԔԼ҂ڲƊԲԒ̔ĔĄĸIW""".FqK1aFG܅ Ǟ;n>L@xlxXlXXޝã7訐ȐhO#No|n<=g&h1_ 8}xt;Ozt?$})`G7YC=Oy:xxmhOzw:q0>~ p4g.O8989vtq3>lj롃.<<+Q]m틗-1y mջ M'n5oӬ/^<7̗V] cbMd4$!ebÖOp +*ٖ=Д]UZ\Y6BZiӾc9R N;%K7KUaxirP(ml=ȉȉ,8G RCpio@k`Ub8"dRFsIg rU yZ.DkXO ˗9{6Kܸ&ͯ=w!n`aEOyy%4ڠpO]7Ϝ V &ڹsw{{'i:UT$w(d"?0pTAG^~feR=|htt{?"M D, ],&n8qAdmo "ܲX)l]`#'4mja= 1D&#8-+kVVsL-)8C/ckƆ Prqa'ATYDmK3y\{I`S!P"8L={/ 'm[h`Y߼9Luxb*D41;%-z j:! 1aPG!$66vӸǻMOZZnG8}ŕ\3ɳ~12*Kc:0=Κ5!"ܝ9Z> ~֬YSOqgnݺ"&l\}58Fᧉpif#%\z-`ȣ8u pEX(dF tU`"!Ex29х|sb2R@3DMYgȰGD=E Vܑ#~8 /1@K>-yv5Z_"qy+D044d;1^%%e8z5)hpFU. &LɸEEj5 QLvww8L!<H ڙq⠊]rL#́/|`SDw^}:M.:D%̐eV0((GAƢB )[8g̘NSPK1-sΰ>zDEի2}& ۇp@amktifk3gi@_OˏA5AG'$$ ._<'Vr'bpd %~*&\TуN'I"hE\0bfG-XH7l2#%SqRAڡEE%zD UG?atp~1ɑBL ?s}$$-S^hv> NB~PÎD;Jyyydd"@ݒ5NZKwq W qL- "'[.J^|'Ieo~e?55577P ì $Bp֤gO88QH1آ/\':a;+lF"9lq0?afP]ltLDN/^14[4pXD'4AaJ^ō g!"ilG$ό;klJMD-oaweOF!RtMm7)1/d$ͫr "S%Hgb]+¢{ 5e͗.]f:DWl¿o+_d3$$aF_ [8,bda>@k_P\^[\>|^wZn0۝:l}pލ{C 7``ݸs`0e`hұޒz>(WQ_\GНYzrɻוu#~;QOÞ@wU,Pp^_xK)@)0Sb|xw6;tTꬼ thʯ6u7w5wtWUVT5ז\.ʪ)Ϊ1>UYYQUUpRDXph1/#>79:o >nG \VY]^]Y^^Vu5ʕ˗爈 /\c<@O|֋^ ly,&˧>~m>@{|!An^h·';h|mv-m<][ٺmjfu>obz݁.[{] =z틖,6V`O<@O~}4?=?ϯS^i ;>̰!L A z骽6M<@}۵cKjϿޔ[_]ybs jΧ^6 ?xyy׿q go~/ַ&~Ckk|[eH:I8&IY#㦡 rsfE MG,Q˿ETqX(sH&(((JMM:)ٿ2HABф+t~\wQhs6r.-!M{d] ʕ\9BBIvIp++w} V ᣳr 0c&%K=]/^FNCGhRg=e044ɢǻi$=݄&444?n|5";;Ux 4)&#41($dnnhÊD s(WC :qW5Qz0J7u1rU!l2ErD%̛\-zܻL87@2;vC 1<,)M00\hqCC3go-^ܹ(+@--LsGa-!!,ĄށÌiaANL&ʅP+Š!%)Ν{`&dk(Td1 ϳ._fF99L|Xo<Y %5:k,&4(7@`%bNDHEˏрۊH R2>x)Pfé̊zVƍPТn2|(dJ3U>}NUBDYV Qgiq{gX_(=bЙ-RK.P[nAFFkP=DIΘ1Ɨ"t2~2 Yk(D70}dXՄ,`3Fz /TJXS啰Q'**\C6f 󟡯k/)LaCф&nTs:Q M(d*"3|lF:꯾?22Tq4sÉ 8G&0=N)F 7*]`*hnEDŊ$̜9!f]O*# D #iI9G cL3g 5)1QȠcy.plγ€ L!L< MD"hfЏ*\b"T\\:>~  h F9Zܾ=BVLK Y8P 6lG;<:HX99Dm9 lWM`2ac+L`\eƂ: Ѧw8nX,G!vv ?\O$'[{/_ ?KJJ^ Bbd%9 ]`cs;Ǝ:j H?D/շIIIyyy(DƋܕyEJX2ʾ~XD!!6ln~i 7azCD@aA9dbf"ꨭ'&!M,l8s;=b+ćH4lmY:],D2up0I~ʕplmٲ 3le􋃌X[d234^kS7h]%<1nY%lƉvsG b60:q . 8FBSZqaτdݺ lY;wS !s= ԩ\T:% "h$J_q)3u${z FsvW-εl*11BĸS[(dJe̘&뗈q%dH_1I ' nܸĀ]Ƣ6b߆h,򷿧OpUyuŽ͕Ճ5z}5h1>qV-5``áCM5޿xFPƯ׌WWT+[v^oނ{=<(y{큒GE =`y}Н7x+xЛ<ݹ`] <-~[a{oeo**zzG{,R3]3Uur7:*+R\RTXP^WZ]TYRQV^\^PZPWW[[Uz8 ;/';%1!RD@G]<<켜};8>`eeej.65!.-915=%%3M4Qp- 8s32Scbcc_prK/]Gб7ޠ P58j3g#O}MyĩO<@7Az}IhAO<@_PoL;[>=mdDlg/Ӗg EFxx8y癃=A;:upf ۺ;X^\=]=lݍ*??sjMostemaz,_{&n^r`Rϓ_Kv,^?zz6''=@~k`l/z:eLJg?q4L ڔ8 ڄ?ghs,^g&ǿ~0X2smHGp۵M)q}Uw_l.Tr >rZ3f#5%%srp& 5;v#3 TQ4'o~[o1It̀,:DDP雗W 3RAZ@j\"i <;pngnd \]HHtA{DD6-ZLR7݊.[\o82{#EهKȕCPmp굘 b.'N+oM+]S~BBҾ}H;VXEz ^ܽ{%ܣon)xB ??;vl٤7̡smmm'N@ fFF9~/Ç?٫8C+<~2"D5o2TB oI|& ɪ R"U92*1G?P^/2")!o7i|| }g̟)i=a$tObP13mA!<"%}g]ʕ( }tf_yTWWp"+ ?-(&a# zttLKS0|/ ?ǎcr=.ү,:q$4ԅ ì.|3O2z^pMbq}c\闍 :-  8,;E_{vpnwp.T^kxd5Y5lŀCS4]x %6fGBK8@~ܩ?ٿD!@}s`ktXxB@?+Es´ CC7Y\Ͼiw08!z Ri׿zڧlw>Xd [l&8~Y}(# :Yp>!sģ)--k %%bȀG||`pw:UIDATML__?!$ᥛE 9 k -ύ WtV<#ºF3+Z[Yr M (k0뿋L0CO2,bNq$S\E q W8T>}eGUUzerr6 /յtD(|o_>x7. Q&W/pf/sIFJxaF nF2tv3<#\p1] ++bry<%([@YTHxDc(Mq#L!l'dA`eՓɆtb h)8aHH6o 9s/р?--d$V2g`]Ԓ!0%fff?Qv&6Rv&jb7f1DԲj3B[RR H!p&&'(NQBl] 9cd\#0+ ={+~␓˪aw^fb2?`7 l8h&Xg74 FTIb-܀*(Rv ba}ّ?bf1OD?(ʙ 'LrV<; ttG?V!0'0 [u',,v! fnS%P,O^{m:_l[7~|KoFJJʵkL99hg]*Y_Aز0$3÷<9eh̴%c'&0@Q$eZr~s BD7E^MxYLB"N-I0։O =]:γXINK9tH[ZXN6gA`Ռ߇oa%t9H`XhbC(D[$iCA4(""SAS(Q )#y" y"CR g1Jh0}9101dBp<4,BЃ?%y҄)'Ya![r.#)}?yl1r"q4<} #3~C;+TޒE3WF&GB9J8Gȇqm脈rNxPiB?Bww '80UN9ؗ8L z*U/P`2}?=@mo/m7n 4N#O>߿^{]0Fo4ݿ nz{׫-w+*/¥>4~;a׵G={MA_>{=+|4Ppa}҇+ TxW@UWQZ똮TP=  No^Z`vw.;nvV WW U5]XV[RS\QXTQXQ\WQ\^q1ԉG89y::x92뀵lw{AwgBB"#/'DG'%%'&$d&ggff%g&%'%%EG]92BDKF_CS|6~M7hz1!$*88*3g#O[ޠ? >:?Om/G=h==9 ;Ϝ(#O=@[7'”7h>#a>އC,?y>u茷7h/NOcЏfYЮ' 8x5_WoG;N^Nn\}i=\0֮߳rkZ6ZXwKWZ|E/gE^-UkS^sO~ֆYs泦,if`;6^83<=Oq3# 2y\=3d5m&G{zrn2[t]Vv,806=&x/dj:9h8qq sWZ<TAs:&i"&#ϻz5jӦ-::8MOB)KF.\#ڵ<luuN)8d ?p K, @-I;B$/O$X$atLH@.Rsg [Da(͞l_*; "[w9ʕə''O&DdHI9\wѣwfIǷ_|sw-tM-[68xĉčb4]+EJ գpllY5]&oK` i\`b &;G4H!KDp]qTv@rrhRaP[33gHn񥃸 BB`/׈ٳLl1m*e_VV%2Yf@QQѫFҋ_ZtYSS /oaF(ZƎ[7)_p^s2wH"NbJ?FGǐs #I%eYܸL0^x!qzM עANXIsLL CnܸEA?hy "(15B 0 JKqYJa8A25"KCD!֌,j#\2-^ 3+Q+.hpcpW,BZ`͞>"%Ue{{GOX8iifYf FGAhŽQ`,3vēzgz%L`.sgKKL s!E pa(,|04QQ~~G C3uOO/;0V.!{4{EZZǤ_r<6vN1зo!b4,Pu%ם7Q$Vdٲ,[l["s9  s7;3#A 03̼&ììWg{xynlIu֮]v s(֑Kp~.1FIaи-cO{ aliZGǸpmTXΝF<"nq }N8}i";Q)3 VHdd(,,A-n\f(\<0S dz"c]12I) ĉ6q NX3X.j/? ==UȳD)/.^ /'%@q Զ,CTaY^x_灁͛՟GMᖅs?^gΜe\]]~׮uC7K[ qWJ(#6gxb4*FgvJlυij\}Rh(~)ںՙ˄;9?!ϱfŔCxC&3LLrcg%0=bUrKHR$q39::C2FGߐ1੘vR~5G[eRH巒 A# aXX7^~ 𖒒\8E0sWG#' u#kca;fҥ7yP\5-+-lhh0!~ZrC.0"<=@C?+YP_iHB.@a ?C}̓3kK"q}~ [qpp(hB\8=vp$za!RG녋a<3=77"˃d5(M -p(c02\L"W%7 . yX0!:_8s J:Bu妊;ܱBx~hnn/8ȳ<Þ2qp#l~xEhvpH[Lw]S~SC*Kš_%{/MwΎu-L h}k}^]Њ}~з4 Cd+lk+WV/ߟQL_Z:o6yϯM_4^1]5]1"̒^]0*tVWg`8ר 2ߵ2߽2iK:zNh@UDcK]]s#ׯ* _<:pFߥC=.u_>uSsx[s{MeCaAeFFQRrN|BV\\f|BvbR~BRA\bA|B~||A|\^\|n\B؄؄|O2?.1}zFqqqumC?[|7>x$='& O;oon,?֮6D67mnڼ'Z>ݫݻn:g7Mл66t;woh$ꖊJ ] l+ ʶ7ۛI5n+۵})tWIi#(-kd5JJQdocQXTVsg[,[: }6;>?hȩ4Tddl(IOKKMN0HO-@UjH/O NJ7{Dzxxx'zƻzDG:F::)ZT;ٚ}vp w$:yC; ^ۤ>6(P|_~U&)揂N~4; o1uxɎ#׎ܸcwx׋/3<"S>~C?<ܤP+ ?dNSCYY9xm{~W'xyr*g^~ǣ L= ?ۤ<`8588O5o,DN)x}kcOs#?tuuB"}<Z4Oީ[qxo=nSjE!5ݤ-Rtr)Za) 0VE-6N1\\~Qӛ =cKcEHZTdBC{V&1@ -s{M[[;a >kJ838ĆO0"32卋0 Hu -F&0.d {{ /"aʘ/7A@0e,^5hRJ]jjj#DB4P^tW3+ǛUd/V 10)rMq# ,=38<<[/\הE fXx2Dςg$m^m | ʩ! b]gT.X"p+fXxmhh%J-rw;\D.}!rC+y1!7U HvX3o'qXπq=nyd b# D=}dfWD+htttbe~VQ[k~{+_On.\3 `GG??y1fiHSw`Ȇ}).z̈́AK*bɥD̲ $cمC19./~n p3>W^e[ *parH[([dV]w{~ifkuxXn201D##7wHkl[EE%#zi߂sڦx?܀qEא 𱤛L !sodx_ t "HcXo1t `S(̜2Dz-i'EZ'Nd((qUr`005\>R7~[YT5TDfɐʤֵ/BKH2RKH ˖TFf]~渖1Lejj:3#Yq$cd ^%- 0tL%+=YR+㩀Rg-Uoͭkw>."^;FYx@Z*;;{}=Tr#~\)+!/>Ӛ>d/_sZAO3 ۷o7drbqaOR ap[懃0Um~zCAHĆ7Y"X6pB',Hf`}2\9mLBȸzT)Z£=.wQ/hhZ2V̲6P5MB-,Y~]F.WcK\QJbRm̀d;/&In42tH @6Y<*p?Q'_nrdeeW_}{Sw@-ŘԟJD zf8~/ͱpxqA"b#ܷgkp%? ˇY0e%dmd/V5G*RDExG>}ͯ$SIrqC&vtC."V/ŘNV<RJJqld8EX2t`$$ frc龛o_~qϤ}k }$襁!ŁPYU`:CQϗϩ-'M&N"O~8u4q}$8u8ujmTgn\\j0wkƹkk]^BP̸>ds+s}+|lLigM=sk{ykIZ횽1}𵩡kW^v©>p{fzaR|NLtvLlv,B\6W͎1DǢ̋ˍQU\%Aq٩EEUU;xG?v7x|㍷x<}s'O=IE@[oP7~Ёڏv6B@k h>[VcZ}~bVGgm[e ʴVh lM@( \\ Ͽ>7~< >7,,/(ؑ_XWAk?ɭΩ\:C~]f^mFNMfN!ʐY^@a!3 28Ԕ9#+899/<2= !<,%11;.h[Cg˹~PD?E@ˮgW}6' l(8l8CXǩm Ly2Yq:"K0ЫSL4tdq1stD׎\=6pH߅ykUg|o'#{?~""ȏ%bm"KfY\K$S x SQRllԔ~WyL'0£9{RI &  XFdP1' ).d$NcHi~jQ戁 KYR}2ӐT8GO[1Fë(o_)2C %J% 2Hd U\QP|"BPP(ss 33LS{'x$D"ACu4P\ R:<<'}4 `#SIG@Y!)JhRP4+~3 deeI%zPJ 0Us\AԒ CF "e"j;jy-^GYB/n)Au"B/C*Ǟ_,NFAC x C1PJ.xQJUU5-[5NzL\z2bAi PDhBQQ1ݕZ Uy ? Vĉ8=hR0>xƀHCР1HElp=C)}kt|Ė(1a\e+|? ٧.S=~/nH/B?7/E'aH]|SA>ʄV!T*DjPK8 ,$}p(+,Y爺 uIiWbFO)1X'@_Ks UlġtYW(q+qAwߟ %de@HiHKUAzB]DO/h" 8!BvYSL=~$T̤ucI]?ϔ?) PVd,iY *E=IxP)"xjC- 篁!:cE@w 7GW l\\F=΃k`we\ǃڮ+/?U1s3'M3M\:0y8{k&ѿoxqiq5⚻M],si۴gZ7. ktFcZkD>Oaa`e~pe~`enL ;S=ڹ0575;1scjn_r̉w>zlwþjCfQB!:&=:db"b#AfDT:NAxT&GFe`}ftLVL\NLLnLTNTTvTtV\b^vvyeyަ;xC8tء>믿{w<[>~׏?Ɓڎ-tsQmadCO}:mӟ,.l۾ly5]ZlmȖ,-JJJv8JA'zt5D(Y5]dw?bY; w/0!yCtAmn~]NNb-tv:CϹ5ՙY(IO+JMIK:/SυE):73=7+l~tlf@pb`@RLLfRRfxDwk{gW5 lub!e[vǖC1s԰!xӖgo W6 h4'Ο  z͐"3"cA+0tDo/0t]Gƻ^zhʡ =\ />ϯÍv@~/9wQ~VQʏ1zRА"ӈE#ŭ zd}E91F)uҖ h$bc dt4C"N\lP-I) ٺ]kdiB4K @ 6@EՀ7-H)Č U$\K0cD/ qQ h4$UħI 2zq"m (>Ȥ"6Jݏq>?;Vg{N-KbXlJwh(;%1 0ep 6z׀DC 0>I)E[ڗ~yŭ"> ђJT Ⱥ+Ɋu> hBă A,[C,99yqq /6b@HEҐ%}b,S#b֘2TZhˆ m۾ܹ fj~R^^9;;/GTB,z_@ւKdy1CEKs()Ńx,dEA&ă'htoR*޽wbb/Rln Ud2"X"3\_j*Z[Ӗ;8W؋ T$ K2:2J)RKd,HTss ׮uݻ{w%--^,qXoJdqЈ`H<`tL,E/RQF^o{1~=JˊdiguDBFJE#wTd% 0KE5Y*diPDj]*z1C)NDde(!fAldd,Y:.\|??D1ŏhEC-zQJTĒ'?1@#a#E RQ&K ) ^YMM͛| LO:8le֤]Rb=BRы'iR1bFǒ, )EZ4A dH7.HWKF?wP_ըn/e*(JȈ1` z OR$)6"KYiZņB뭫%`BIV4b#=I% hiRKd)d#O̺id4T %EA̰HbW4) @t"JH)a#(I_|ƦT5 P-R,E 2b&ސJXA,18GCTiY7k71Œ( R#+ZГJ~ĞRWP=nȄ$@L"f"1"h!%+JddśFϤR Yd Yz61}pO'z4+K#gqxl޵뫋CKj󃛃VVf;]N۸:}eMm^b>8yVfݘ8>X8:w1M.3ꃄsWԖNBiǸ {NX%A␒иؿ40`~11`ދ^Y8rwzv9uեC+K+˃,wvtޟXv̕K3צΘϙ&?o4N:w?0iIqJ}piյε. 00.- ␑Y}C-j"ʇ>?B8|wahe|ݙtLۓ&zo+&zi{qdDkNxm߾y9e)yȘ̈CX$B93$T*-ӂ"҃C0K#Ȍ謰(CTBnxκ{ii}7km;ܶHk֣-G[|GZٳ}4)lspWӡ]6675no۽|߶ewnk*ݶl^`lPP\dBYӔ6$,R'l*(iL@7-i+UXXd᠋JvH=h27J)(ݛ_LI[?SlfAAQ#+ڕWԠxVYg !:'߼Y6>̫MϭIϩ.ܞQZ6Adfy)ɩ ))iyYBۃ A 1qAI^n1^1^QNQNQ[zv~|n 5BM4`C|NNrJd5tIzkΐ:W†ac+aSS ;Cj 1'9Z zæ7m k&]z0s֍n^kiŁgzM96ut]|lKo/h;Î,R$"]o˟tn@k_S?|_H5˙!?uw~hVX,l,i.#",kX+R) ŀӲX\/]ʧ(~;Î?(fš:[÷ݛUnhF\ޣNXf+^MӘW(VqwA}.(jAd_mc>֐[#0T 2r]n؞Q^RHNI/0姧OJIJMO/H/H M L I1GźyD+xD9{F:Gnutt*yvֳpkѫ9h>,@gyh{O>筶2E@k ϛvaǧ~`9RD}ZO*a)O]> /;n[iKoz+RbtV&H=ԥq]dg{ttvߛ^ソԿ80F΀V{s]+O_}0}eu3W.M]6M_Y>{u}N]?wm^#}>c>o>:yfu8a6ܠuy}MIo߼!x|=`I}0t{CwgV]?;twT;tLHg}|wmiIy1a1!iaQQhChdls(dP DQpop&Kh5jktjXxFl|nvNEy ;7[[i4CZn>ܸ@|xoכ[a{ϡ=h󞣍66ULjAlvGQ]kF@?f*m+G#65J|<]A?A@?’FYb3q SMŻ5宼]_ ,(҅']yIٖߑWv@dVCNBvUfv%iFvUZVE<=s[FzIFZQzJAjRnjrvFj!=?;-?+-ϐVY P'{EG{M 'wE%oqd5kĆt[{(m8h~mKA[ÆYΏ5+jÙVaC~Vz SsB@[sЛCwF߹s|_lolOtީ=ךƮ{ʾ{>A[E/v;A2,MB L__? /~gR4o߱j2^QXWHY'r>-8Yä 2Gccfva'b?!NJ>cM@/N.M ,Mߜ9sktݙ{szG5Wc}{Vv{6{YӗSWLWק>pŇSקN1Nmx8iq:qjmܚ"/N_X:{e sgAAσƥ!u3| -3lAc<`qxuН;CVf{ݙ;;`axߍO׶wwYQIFZV|\FTTz:9=$JgushDzphjy e3e20;(; ?^HHni%9 8TSgFd+::6;ðvG랽GڎȾ}jn=ԺvfV׾o{i߻=>PûvX Mdwjoh6t> 5U-۟zVQm.DnkOZvFЅ%&g 8 JRjSQi htR>)?03Κ6>tNn ΩYUU)43KӊS ӒRrR33 3Ss3S rr2 22 iQYa޾.Q^qn1Pl!SֳA]YN4m AOšoS ̦5i Auw 3| (Z3”Y67;{Ƙ Çn t3ݽ{g7L箉kM#Wo\iEavL.Xg/;zoNܚ5u{L׽ޕŁ~^]}{Wf\Un N_Z6}p4sGӗM]X7h3 h’]@Kup@'}lE4  "K6p~Ⳏ Vpж"#s{zFYz:9=%_}~0);=%ˠN.@gH/LIg}&ϑdw('pHw7h'n۟d2ᝁgGgWV7uxp鱰Qq?D hk:#l 0, h`vtZ'uzӖ`wh =tPlޙֹޖ}S-Ʈ8lC;:ޯvagkGXX6@OhY J?L)yֺ2_2GiOw/F1D`]doAէ!AvA%*k@,귾]7f% X^vavx/J<&{^9;'tddDS]';Lܛ7oiF@.}ԅSFOi';?P[ONMSƩ鳦 kWs]bR:Bqom_qyxsxMזG̤& UvX[TȃC{4rsӃOަE%i)aaaai 8,9 41(,)$$)$8)88188>(8>0 >4? 1x*H&Ǫ/7G{{{ak|b|<}p+P AijgtpRhDZt!9fGxȡc=xC\Io>w!,2Jzo;;~oԳW?d1IDvlvO'nE@hDDd;wݟV/_컿}pLKsN3M\X86q8q8kogg&ϛϯN^<:ubmiiqômZ5. /ִ7֗חFjz^W'oӶBg1 ׍7, #?3~gPgV=%d>YtJ L T'`$+7W>q^>BxkԳ=5X YX87}@'ZmJT?$'$y'j(i_6jOthjhTFdlfTLfdtF||vfFIA~eEΆ}k@k *=rȡG8vC9p`[潇>pv$F:߱s}ЊޱvԶ_QR^8h 򶊽m/o6 zQQK@k,xWaczhVo!w"(+墢"vFh;&ss^uVneVN!"dgh022JS 3R 2Rs3s22r2sr 3 srr Iyj`bDTVD/=-# y*a:XcSF`auZgdp-Z芫h')|c>淚 c?S'CS![x&Ig]W z 7qĉ[7޿5'0l[3oO>>rCZ{4^>Bz7';> őEи'~o + ~Q$} >5(n%j2m-n_YMZ=]āɥ(O ]\<^D%fc`vaǯ y^D煀9;6pizcvk~cnDɎ[S]wfz _0@@oe{eseC}rp҃/<`>}凓MgLcgNX}ok7?{ku)94驵8NBQזW'7AϷ5Fg4Fo= ;[&%R@oTG?=3`s?T[U*:cRq` _KKMqvQ,O;VǹyŸyźyǹz ܱM[ B@jP0']4mW{ծj" ,,#,g1DEfGEf$WTU޽`kmm4ٻ==o潇Zim>rCnGێkwP]`uukH۫Tkixg>[8h 63YB½lmՁJHAIicYjsa}~a}aQ=E u&F>(n(xL@ߩL4i,ⲋp> EVu+;s wi 윪l"K#3 2322K33J232ӊ2 2RSrғӓr2r I9 ))oԨ؜4/hHhuWG{|3PHg}+8jgtlqwtt]3)lFAѦaIЁ/o P@oЗB@[S6@CaZ`+GC lA'ExUk&@W~4h\7 Ϊ㜖'.]^8;|vfxx;^x%m;;;Î<&%F=;:pqksWn\]X9s{B|\sz꓃3O?ulLeYƱM7Y96;ƱG߽3Ʃ&OM0N~`:i>6s8wu}4ߡqݏ֗VM11ܸ;ԡϣƛ77ޞzt{zք:㖲TNoXw43dDD3@HUH K Q N>*tNsP;>1>QQ^ъSVrBg xJ{ƺ{zz$%$&%SCC}c} 7X?`utzdtfL!26#"&3<:#,*34R!,*#<2=,"-:.;=aǎM{n>Ȟ}Gmsxû4>w:io;м}Ϟ &:;+_ mڱbG[UUm˫olvee{wlk*,m(RP[KE%Hh!-?+X4jgY;Uw"àS2d>? vmE&h υ IXRsauy;)ߑW!/999ٕYنmYeCzQfjAfZ^FznFz!=9=9+-ɐk/.,LKKIKJILOK-6D$G;GnupqUikϛ-_Y6; }%ɝ5+n`0`!A/o l |mc^{W_P/oZPM: QzfϿMu m=th[O^ac[^=Wnߚ9ѹp婁s}gw?t7‹v;;;;>3x9;qr赹kW':;?>9د>98soTԵSڙ꓃Wή\0^[Zb:k8a}4iF]{mɳ&#;?hRK=K=^biuӭؠu #j+1ӽ 1㝱ۂqc޺HzL?=yovxb¹m- RC“"b 1!)!!a)zMNyN IL אࣾ}!Pm=V7yx#5ܽc,sW@{@>fchzV8GGyD{xzyy 1@$AA!)A!Z>8.FEFDgԠ0T KO,Ϋ.ܳcg[CてG;{݇jض{w{maG8|hϞ] m;[[wl8^NPNQYZU*kkt+(ZmF\5hm׬6%h Buvdz ¦'h>P,3.4[8r.L/6o|Ny)YɆ촜œd!3RS ##2c" >>qΞjqxF˩[oꤳ@gk8 hY: d3: -W9-7oچW_Y_ږC.i3 m4u2Zg? kaͮZÆæѓg43m3ѕFΏܞ5=<ݫ_ɡKN^7Zvavavav|?x;MN>;}F+7̍^]4ѩ^!/ ߛ;}ot+W')yqGv?l<6țk#ǍgFs)y{xxF{D{xǸ{E< ug16EVzS{[-prvvrvvI >~ B!hCCCRC҂BS| 5ehLt{CM{7>ش@SӁݻݾwO{KCm[[7;}׮ ;vhkk!Z[ktuKEU3iWնW( h:]\FA?A@,D3+j(Zd+z "1CUQi7_:37L@ YY#Ytz!035?3%אN6df&&%&$d'%d'Efyx8G8Gya 7bc[PY֧m yCB^goD8 _ʦW7jalpF _ڠ_>/mÓ"W†æQ܆ kOO&-^0|g~͙遥ٱcW \;vavavav|4=1teJ:'nݝ?oLݙ]kƙkWά5N]4N]ZhÙ·SV'ypocOO1M}8sq}QN4^[priߴ<`9qD'$d44ddԀ̠ȘĔ]MAӁƦM{vwy!|e=v7ѺfommsMh; *k& 8}e{F@l['wT:[Ö֩gg3la hbiaէ -v ]B@74}V<+ڼZ5-xL@+*3`ĐVZZ=mNM+.,HOU۟ ɉ驅QQ꓃޾!DgWhx9-[7[~Z6>ˆh!Y5?nIw-l `ѨMkK a8AT|y#xi/ԁѾ/Ĺ:*ImXO~3 lVs7Ak_#wq ++. ޞ5soyz`~wnwrc|p'xN@avavavagO=􍫳;&gzoݙ_ftޛ?sumi}x-;؍ɓI>ΚfΙf/gί^2_3_[0-v/C՗-\ чwծ[crGyt{+Srpߵ{iWn^a|bfXTJPxjhBVhXFHHZppZphjHhJPprG707@}?WQI> ^q1^ {DzD+Yms4=JRSktYGEYnhE@9 =ⷺitK #]#]#\=@U1ꃇg=o_OJ J ɾ!aAiЈ̲܂5um;v74j}IʱkW[{sy}{i:жnGKm]KumsumKu:vMhZ *Z-4kwy"`5. њٌ" nhRE@j녃:!6O꫃A6T+22 >¬Lu!3%+;-'/#/PkHIOK) MNYqr wqreEnv N$N@;j۟J ۢ5Z}uP睭!J-Bt68!t;K]NV tZN[ԙPӣ6' ?M? d25:xoн;sgo-M͎uAz൳~;;;;>Kx#S±ʼnjs^p쵕&/<`pÙkLS&ONN&Θ&N6I}`y96y~mqqeUBbq۸o9,nϲڝ1ӝq#=]refԃ='`[kdCHxB@HBpdFhtNPDk 3M II- |ݽݽܽcx 78ku֎r6,98IYf8):hŲ9GGh-dŻryC@ ĴkVYFZ[iEsG9E8F8E:GxDmڧ※O/Hɾ)~A* H NՎH! M K4DDg'e U쮩k߰}WAR%:@ScnDZsgk PVYR^լA-#%h١ hfNIl |؈E}~.(l(ЏV 8 .?67&' Uٹ Y CvTcRS Ql(2edRs2r 9jsnjJnbbNTTz|\vZZab|V@@w@bhDP[kG e9Th Rg[-@4:,3Yp@T@?x&-l9h}:7jÜ~rytš֡sL˯;y{ ߞ5=833131>tylP׹kg{N@avavavag G:f:;&zg!ޟ}0u䅕3L3\qi<9dZRG?w[ƛkGnjN}x]Y[>uwݷotCaDtZHDJXtzhdFhDfp! $/070; 7!;0;0?77/7; $y%x&zŻyO(9+3C#i@Hprwr#ح. L:Ęuph' h3U5t :oq)%Z㸵9ccb(F8F*bZqӊFNutT_G#=}=}␽C#3C32CCF2#*6'183jO}hhѰlа׮6A׵ֵ8huGEuU aۯ$%8h \/>[_M@pB@+h}~L@+Y;-@_X_X_ tAA]>*9;:+R`fs*r*ge2K EY)9)9)y%NHJ5gff妤$#2K"R}_ /XGP'oqN,P7m 78 s6G?kVcF`͒ZjaTebfJV J7=u)6JMS$ܴJuNC5_~tBgB@_y5Gw,޸pceƽ;3÷zf;g:'_>7qv;;;;>S"<=97ѹ0ѵ0ٳ4wkneٞ3L^?yyUgΛ_}8z4iɵS&NN]`|ǣnBq{}j!vƣcnxgMsgYo_syEUzF^T\zhdZPxZ`xf`XF@HpO@o@*KKOKqIv!MqNqJvIvIrNvNq.^)Ξ +3##3I  # -^iV'5 ,r#YGG7ufFC9bSfǰ-!1TQN -o)5z 4%L@&GX8h+V^"KO> /(?89 $5 $-0D#óB YaX-'t[cEMsu:G;Zvl۹uWC@QZR}{e{"W}+[X`K@nW>&[%@}8ki ;HmF=m4 tSGpX9jsA] v皼ܼܪRa+9۳ Y٩٩y92 ԧӋ3nCA^va^6B~zj^rJ^L!""=% 5(88;'. 89(4+9=KAc9:Stp g9(6G}gaYXe B@Y!,?;t>Ψ hp/o >Hm|M?!lk72x4ię3k&N=h6{EiZzhg}w}ᇷ?=֨m1_ޛ{M\:uֽ-e5񆰨̈ЈuDW@W@a|]5$z+8{8y:TW4ddg$'xg$G"г`{ptHVWnuG9 8lu# 4, (fSֈ-[÷l ۲5TCfǠmi[G495\,eFD:C;>7Xw8mCw@ L J NI MM  Șܨ CynA]=5um;wԵ5Է65jl۹ҪZЪ mݷb϶}֛EЩgk<>lwQiSaI"KJwYv=R7? +2 X 4~hgQOPkmce5Jl vjPڼj 7*7:'ZhC슜rCF:9-_GVz!АVZVo().MMKH*ʊLK.Nstr wrr:OYnrȮ-qN,fXgE@J 1Q;CXiIu=)z'#RQ/,B@_8h;Kjæi:*zignkzsbHN~;mvavava%GzY΅ɮ[3wgWfVݽ6iUnWg<SƱWG\q]uI9ӌ:y}+볲Bbx/o|x͑7{㏴ο?݅c}WOxyweeEn^aRJvTTZDLFDlfPXJF-qvM~@t~^^I ؍d3=#ScQZgkZ>vpY1B@tV8ֱEmVulqV;C8EnQ]>kI<<8 XEmEJ:\ X1fXΆ~LCL2FCm7tZP:ÊCΎKN+/ko8X]Z]Ru m;kv_SVY@h9L@o/o.+tZ砭 hkٚp1B@+X;B(†wa1XfE@ ]L@ )^}P?TV?I@W+AvCF!(+ ۂBE@djrnfF@gg䧦&䆅gDGgFdyŻ{E&{7*= @xgmE,+)2Jfz[W:FwrWgx ,N} 7 H,: г:LZ`͇ lO~3Zj} v@Oߙ\Y;?|g:5=4ѿ83{{zs|zz~vavavav| sv%9zakyL홾{}fzt?R|qs}쵇0ѷ 5A@3c#;rskrjr+>JE@Tg("+Ќ"}.Tq)!PUgRt~dLVphZ\\NZJQXD'%#-8թl jmC (x {:+; YN=(u% TtF[E#ͯY>N(Z /oi:Z'uښ6g6`3~^lzawF0}w;;;;*zzhDdTۓ={t=X2-t/t?\z4ױ>{i}w}igM3f/篙+O:Rq˴gZtYreݩקG/7VU䧥$'&$deDFDfx$y'{37 %s4譹f9mc|#W6=A@ m'Ͱ :>[CЦߙ=3 nN .e;mvavavaU5}N4=1{xddͩ[w:tv绌Ş.y)o?ycumu ŵ˫LډϦ|_ӟo-o}>-xg~xbJץS':޼$ĐRiM IJ JJOi~ Tw$ ܼܽݼ]​gmS.ѮnQή ^Q׈ekAV ..1[6;EnRqf-.Q@nܪQҊvpUԳJc3=\7;+zsf8E4R$|-9hm7t~"~(o@9 APx&:*6'-s{YmeU*UV*z玖ں}յյ-յUnl-h)'GpÆ}5O*}Oqn ܠ}P ]X',xzٖwցk6Q[ZE@V S[PA\ ,3g****L/LL OHON)LHpVJup qr wqrt wt 5 tZ_dY*Pu8}4q8Ɖ5٫B@鞇ח>s+;S}]Ⱦ;+K r Ԃļ䔢8CTlVx!($?(/070'0+ Yj3&x&y&$ܼݼgz.1NQN(\"QGH SslE.;iHdBQ[C7;oq Eֶ0!X&ۙ5O՞hukMN9N*B \:-h/A~`hx/D t@pjv*t`XFM0EG$en/ھ\ѲboeuK];hV \@W-,Q>Vq)RtF= ?}OQZRmxH.67Uj@+:*;WmVqdggmڮCZBz!43̐\hH..%iqaц4XV__GsKpt ; :m>N]LL*e!I)Ye ERK[o׶oNfu<1⫾:l> l[woޞ5=<90;?3=591y|}w6O)~:|ߵ ;e~;>k6grÎ<wS?&͍]0z=7M7{חM׌'co1NX:e9g=o:g2rWRM/׆+j96Qf#5Z`˲2!_#)z??j@dBX*6T[*=Vyv47dq~5RjT4۔(ŕtH [t\ 4Z'TU&ƚ-,@Լg%% }"TVƪq*CFK=rRdL$kb6̈n2SG,45hJU*Id4DcP }QFeH OC% F\@lܸ4cs`.,0RsR֘!68ʕ!\QK-6sKq-5 @kW_ʭjX7Ӫ ՜^ Rhh`XQ+'O 길!I0À͉L`)Ƥk d*oOCklF<"nDW| HZxPzE)iQWcX*MVk{@Vn,E*Qa}} ]g;O^: fzlڼlZ[9`\5-v'>0M>i<{8sauهd.ig@k'o,/ ߺ ӭхOݾ (?,?<+4= 5=?19'.1 "3#SBSS<R=H=Q~IqVg=+7|}ݴxF \b=jE9ѲAXbQjqX#U MNH6:mtݠA7o)Z>%5TNp4[B**UNޢގ.Q1c&-zk&–s?4h; zX6wGluՠ V9c=}r*'850LB yܚԶ劽U+T쫩mVGBhmnR$l.ڷRm -eㄖMJ` ZHgeKo6f+O΅ScO@@6)///P 蜼j>+Y!FNPmf0dtzqfF!$3ԐYe((2dfgdefe%'Gf0^Ѯj\! L_IEFJ ģRd]/Nt+) dEנħKJW*foMF,P'UiPa<[dH0PZ5prr!7Ce&'"ņ,JE4%#)N"eOJu I>R*?q3BͦZIHJ$b&-"O$*&]E@4X}@hJ|"Rz&75:RjGU<#@ސ(IKƤb(>;Kw{>)!Pɱs3Co\XvsTL\qg}״ܻk\Z:yvmqˏE(pjAhJMF|  }V zW^a}^a]>(ءag"r*sWWH\hT;Y!`(Td r0tVINR 23 BCbR|<ݽ"]=Aˎf…nxM[Mذԟ7-: 6zc X]C6bF/,<=K!eT [^6M /kxW|_xG_Nvf '{7574=8տ450?;;==b&{.];s"?z4_~M><ٟ_W0*T_Ɵ7y {+z Ob n)XؐT%["Z#2ZBIM] "0^Vկ+_ ~ /[ a`]W֥!PQaIz'iӐxh$ S%N4'z1dIu ^,q+{ؼÈ10xck_3D EO@CH "SYZ2R H"Lf4!-JBW(Ş` ވV*fž,,3 $f$%%E)? W%YiZ*J&K ڸ{'$Z` 1Y%=A REIq晐R'C.YkHX[d](a1RR:FDroRk41@PJ0R Ub uŧE#%L$>ł+bqĆ^R dŞ,z@䄁,# ;-b,Nh=WL]&/}OPaC4(!eKxRJ $,i-0hHER1;HHu nŏXJE4̔\/R %Z63z%%NIH4/~TSB€TH%BTWĉA&.ceH+_— U$TJiR ^#Jq%Jq(46%(u3RdNHVR2J\MK)0F+ #wM﵀ 5#,E4'Ƥ,* 1`E/ %b s z+J-4̚KK-WKexQ]A"!龄Ds?ߟ((Do@b<_b BBQ  ěh8 qoDC-(Q b4xÃDHE=>==w4NJ")DžA&4DCF=г@@n`ѫXClI(úXF )]&˘կ^8=E/c&~H ?D)c=+YlX{Dkm"0eYGdq MŏX YnebrwcIC,!YV3 3;;_h9-m> n<7 Ls=0.&Jg1R IQFQM`1Y &7;C}jhK3/Ϗ^]vkl|q۴ kfέM6M~8uƩS3f/kbZprϺ>R3olݾ(87o,,LIMLʎώ H K M NQ_OS__V;<@oov =]pU4JZ Ӭ-Vg;Y}O@fkZf ),flqTkY tx yRSh9 3)Ҷ{6;k.tp܊J柤qXs/[ZСiaqE%j*kڴÚ4)]SwG}K펖ڽU5͕խU-۫ZWnL@ 9Chl t~J9B@h/ؑ_+o5]g1n^Nn[l+Z>Z&ښVId |cRB8eQZaxc!__s`t-!M//Y:4Zn[p=2O cn ih띣WG.v]z>xг?B# |p C6|hTdo- 3"9sE)žZ`hp!+꒢X^'x=ŀ,mܸyho׿{REE6D*[@I*Y .C1.;_J̲ ^ҽq4Kds}||rČFZi.ޟ_Ӗ-EHu\adž Y̎D. ??\te}+&M$~0(]Е"InJe1,~$uT'Hp(@Jmۯ|iio}UAu=%RT"dd6EzV*lĞA'0(eEI TWR*Y&fQZ/KB 6z<,dRERE)bo-"33EկOOa"dQ"C+9HTG__]5qaS*%@B.\4??/Tuue1E/^hǎ/|KOJ K7A%zNMHV)7opCFG-̸N& 2LT`%l,)Y)Ōa03&啳t;ZOREؼ{f2.,,,..srjj8ûVUUӟlť(MK _.))9&fؼ/{V~R*JD{2qTdu@E#EC)?SZ_|%-H[RQ ħuτ&M{"K8z_ iH /.ɒ"qJJ"IѠ4{n&YkwO~B&tW"HǛŞx$+xZ@:Ks1YFp)ӟ+_U"K\*JF^djᙬ^ @CEFX4c ֹ6;;y~XbO'T'!k`F_TT f#%+i:1ffb=1H` hNU"'/_SAEE +ؒECSh)';н'}0}v+KcWnMvӟƹَKƙ&O=8~ԙ?>o>6s8{imqqik}_큵žѾ3,-)++-,/)ޖWbPgnd&%$91YA)~A)#M/Q< |}hm.iOv$89V=##NN‚mh·. h"X[]cA  ь@]D op `Fa6M5q+uz+~VutMz'cv7[J8E8]dk)!LNC[x_ODdkG@lRqaIcuֲ݁mͥ껂{ʫTkQ%lnjn)n^ٺMe3hJt؆V S8h!5.7_͂Zk:'e effgg%V d~ŬвWP6xq! \P"Iш[!A;C ![ u1P<7 m_: 7 چo6Q` ,,/ /LOϏwz W\xG<{<2-|Ϋ| (iSa&޺yT<|'y?T +_}'1 `#mϚY OT$j}k/}OR ՗4"/bҗ1EcӐD USL&K[/*bIl"}zC^"6m)../^oB8׿Ap%z+%]3H?~Sδ3 DXexxd۶rZ~p+0J nZT!%,}ZdQ2P??g>EX ^^>ׯ+@Iǩ7 @c2 DE04$"R:E?W ?S?D[RbS=EOg??~a@)_+q(hXF^BEO 2RD-!gWPPH~~&0 q7QdE)J<:J rIt\DJ)3,H+2$$)`SP>k˧AfYQ\28#E3JZG,T0#$P*]Z^,F d> cZ'I =TEI'E?yu@ZttI%l "C ZJ6?? &E^3UCή?G\7@t8GbLE@sKK7joC, 3d3t ,JzOsj54" 7oUUU3\(H!QKV =~L K݉.ѵe#J.ggFDD]Z@Rr& bfBe*6("#I| la%x)}&0hkk|4tac&^xWYT ٳ_xXJɴFJC!q ;HbC-(<~ L GƭuJ0zxg%CDYB2艇">&SZ'.wfϴE`4C@/ӊ/"$n2OGwW2L3C@N .N8dl #7 oR}N=R2S$̙RDl@CJ,D[8hE[3@u785 ,#8ZVTvye[rb=5{kꚫk[i*+˫Zԧ5|v3JѠgiANaM+:49B=BZ{~4%EB@geddcZeN O JqR4*G< }FD)D/ Y8(2@F]8o?Xi1eV M)TRKϪ*-l~mc mA[v@ &h _d cw'ffzFzƇ:]q♫N]dGRDOC8[W+o$JK,]hnn/Oq+XrUU5EX2tb h0VNN.\tRƊ2bPJebVzU~\7?BeglڴK4Bn\-N*䧊˟yDO,3Z$U]V lj۶ε5o&OrK@-2MB:61~/]%L<_W[1⪔.FC$#RH+;a~}nj"n__|OhEV)ð3),1\)a˚-+=B]֏͠-b[̲,Yh'Lf&w]k޽{Ts~:}$KɌL]U`׮]WUu"K-Zv{3`BQ}(Oȕ/'Pa //8NAy K :)ҳD&b8,[b "9)i+Wf &fɍȸ10ѐ7/k< -L$RfuF:#)vI.HbIܳQX֮];{=1;HC="&R2T˼ i]jj:Ȇڟ| D'қ<%$3O{"c LܘZARLcE7 R͙xl644aI&cy^O" SV4mX$:USXUbpDLM̮t(Q@) 2 #q,2*|^|٭nWǟ }pnG~K-?h:6 ꪦjsMTPԘߘ[SY^ Musjt6.pХ Eq }SwxOJS$4P]_4hu/:M^[\S՜[^SטV_Ggzx!r pF,c]4< h$F@{峇{F}:yhCGn?gہ0u +7[nղ7^hdE(쀬h$:u͛٥kii ?qyVluX;Rϛo}_sld";XR…Kk׮gLl9j՚ifl޼](oJ5~9FXOKp޼?1};jےK;zg믿Ic=FO5He'o}; ={_ȑ;wdo裏3ǎغu;b>h֬Wdw*+BӐ|܅3fQ"8y㍷p'.R{ѹs#ׯYdgN;vK,cՔ)._rIA] :܆qAG?__?Çk… MhªX =$=lm;P޹z}ѭ.4Yh ̈@EL%i)6Dڅ'DBc"Gczm!Kc _(ECY}#6gCC5{x3} ){7P"8<\aæ/|/z'x bFak]tSgF]n9]'N{gXl&*l#r֬Wzkj̨i@wMg(@l"P?a҃_p`6k֬GvFKK+b%hTQQ apŒy ;{!ov~+W=ztɒNmm+WWտkeeQOu&: "\ 1 r8Z7n{{'v!DISL(v&%O-"C!'1#Đ$ H E'҃(C7pFt9t /AJaa\z~D2ٳohhWXXM ҿuC.ƚ8Q#G;-Wo}k6_;ɍ7Noqrcn(Y~\sԺ[g6:~V$~t~G7.ZIZmm{05kUMeM9MiIUrʄԚPqgE|Jї;Ǹ~FFGF Pt.U DŗDǗǔEݹ„so,pb<>",  $3@Cjd\&U&UE!.IUDaE+hf9'$27827427FGPo8!+= hp9hBAV%gUӏU)YuY 5Y펶ɭ]3ӛ;uN={JG.S5h֎N7ܮB@408h/B%-f a7Ox}x&$>}g~-MM-&lnmhpTW[Uܺ!c k>q<ԅB@Dt\a }N hv 7)ŵO<[V6{iC=Z]]K,iD&믿;>E؄ .]f8zq_3?lݺSWau\x{L0)<<Uvʕq$E I*UdNDtj{=`J]ȤُM6 2H.b/K~~W[W^cp}DzM2 S/ SMOĐ@l'۾[.] BC2@ąxi5֭G9XA!fKΝNS**e.RgcXP==@>^dX`;/G]XM*+ceQWff6ɠCC]a͜ fg9v o`̸`_~5==S3_%83b<ٍJԋ3`dF ޽Q=ۅ>$I'/x׫-pK//$$<И_|Q4!LL̓_C8j0e1:hX ‘&?\\\ʴv%^.8MF`ǩ?n,?9w Q4SD1 ơ"QRȧ:,DS1/*+׾a)t1`HG;xsԩSN=K7͚*#Ff1Pa¬H]h>97nt-ي؇7&o՟T}b]&'} %,$$8[:þ4mҤ˰EnNo N W^ jk|IO%wy92ޙspP9:ci ?.vL ^ ObrtI3LGPnKt%ca= Bg̘&xyn@1gxS` r2)cJu $QTMsI/3` ㋙7>uQ͛Yc!sI1c\v'HQIByݸqc~3̟A`96s;~~E&mf9d(jIl Ԑу.[㋜E!㔜h‚?8?oM& cHC ,C_АOk2.OBq<55d&AItuQ_q ;9hH]ILԋw!R<Ά~Q 0RǠu.bCr@~Ec15*C'd i Mfy@4yfM ?HudFeB[0 |6e^hK7RyH?d/#4leYޮm{m hvgԖζi wf/&ࠅvL7OG h#AOVuuZnh2Z}6[ƹhf]t& Z,f29-VYW稪WV+lY5Yՙ9I11aYa١Qtb6asC`ܿ38ynPx6XH}_Y6A??H% Ghe&$ ,l2a" *tuZCr)zlPԗܟo$^N:w#uw;x`}m0m֍k6oXnղ5K_e? YȲd[{I|Yʳc Z2b01$M0׬AYR,_|eodwNuKV7uݹs7YŲ8$ N:Ö*(?ORkk;jvn۶`#Ĕ>ʲcq:vO6Qvm޼ T*fa|AI:>MRN67OƟg.\"R'tc%PP{E٤3:zx{{'*EFFcil4pgipY:"s 4,٩?>G=AxOO'X?dCմ,[^{T'}pO#99Ca_.".&L1Iذa̙1HCD!!'N6<}-vCٱsΧ=1Rd^|_$l[ ·-(@ؖ`ΜTЄ(FL*'K ifFWP$L_(''t1[8r”wCEuҮ3g8qm!u91(>Ǐ+-nO\ 9(O x'!bG%Al2/RRRF/-J3'gII C3" UCcN [p1ad"~IW_~G@%II)8RXXX_:[qƳ&LO u]EE%;I$x_F5[>vvm HiWQc o<4DЪh}8C/cFvC1/ݲeBrrGѴ=K  WTTݻ'(G8pZh1+&&+_ڌ.^|Waϛ6m~ P(5 Ԑ'8cffyACڵ'>>Qd]Gڏ3ghH)"E>Bx xFO2h0y Lxޱcii4I1fW^ٻwOxDz~0aԱc(+SmɄnLX^^l\_dLƫH]=| .l'PΞ:ۙa5Ck/O>W^yo("f:^[o+DJ$@_$@ 7GUtcR%"vwwۇD#~y]zIhHCCijڂ2W\E1*Y "lP bH@ *I XdʳRk͚u+Vv:t0.!/\Ua)ŌJ2٢{x-8x=I}ĤD$D! {ՙ3~06(%q{T"D55u(YS;MCa #^{Pt!֍AWcD"mKs!g2Y< RԠ:cnTN)FV/k֬G I,eY+h @ vD!T +LQ ^CIq28>}& \T6k .1wuu$:u:c@ 6"*"x]He~Old5Ne4E×}aVںr϶Uwm>Ûxĺ_>Sn\{تV^;ƉշN7 A>֙mᅡ[pq~ta߻'wX:iجf}ﳭ>.'6+65*1]UwAQmNV//Ug?# ""sCs"sB#rBAnhD^DtATlIt\Id|)))P_̚'}f0h!eg( Q6!S#?28,:8E*Ѭt>aD~`DaUS*^P+:uK0xgam K x|Mh8hOtZՕU)թYiu.lﴵOk>6sfk}}ztwLh6}RGΎiS&NSnMniC:{BhA;6h4Oinh"{9>-i cf'+OjX m,~metgqo҇Ln4u55u55*Mݍ 5κ6M?ɏ`O fN}u`LjlKww/ʈ>$64GHbCNlG Sb/GؒI@Ó$ L}/1#<ٖ+Od1c,+ٰ~B.{Gse#"شL6lGl=NG~ ^>cl>o hAEb^}O@aB$H7n<2xݴ <բ׿PO`LjGv͜9.Ա2"177S_<ؓ%)//o@`9##kյB-CTjnvR>c,))[JKI"'bܿII ?m^mC]]WPPP`(F=I9x'OA̋Kb!?ij26EE%fnjd['933eQ)g)Autl5Tzɧf}s<ۅ>8 c$3O44i 26чH7"{~.#=SH/Ёn4YApwwwܹ}?*>#3™"[JJjO 11Y7ŀxV:pv !Db.Й8A(Cj~ ;׏&S I.\'Ǥt:/&1>@zy׿9{k߾o_]tkG{ϑdw=?~銀R9M,B;RѐzK{ԩ3T(,`͚usɌڅs S܀3O4 A&3/S2f~]{^۲e˘1cps%$$PFǭ[cDb)IȗG$.Uh I,LG;wҹď1rܹWb (-PNs%NL2mhhΆph7ofFe~>}h(*eY0 _H&}ٲ@]d^;5ǬvË@,T$I֐+Sʯ,Bu&.zcW$I騴d2ĒS}%D>_W9cE!FܘI. )А⼚y!  iEpd3gb-Yɓ|+E,h2Oo5f.irDL)qT̋H2f:Bgt?oq2S T~F~R 0wbp@ &|,~mX>mfhmj7jk,e Eu9yYUiU){&i;&F'DEEܰlun][ ]?GƖEVDĖjB103!]3A.kCj/8_B@/(kl`~ }GcM84$$00}B7n.449 $FseO /PB@hLhOZh9hp:g SeР&Teo16@kޙ={vwMl:ubk)B@}ͭSg}t pV}gZ}lPݚ}"M@8\t]mk}][C}A@-Vbnn.-U؅NI/OPtBrA@>owm;m[7l߲~ӺU֬\|efϜOhcMVv2fC,vFFF5+k:Y$?f{b$YÓ5%K; Y*eE"~׮=l%ɽR%Jf|dA!995,,Ьzі,x"?fZU2v6uF=2eSO=Ogl^~9Gb+'eM j(䓇űOB~AV[AAѭ[/e fCM,|Ys ]ѐﻻ{).g>p޼Lf\{zĆQQ1ـ }Bv.cpLDY3hn&SϧmvYV'::نX--裏GH4ٯ??qI49))Rd#Rȷۛ'/\T\\@~Ay)M_a(\Sr:[{yǯqφꡇa|AȎL,/џ"4gǎ'c: '2}}^fQ@AYY9bHկ~Ho$SAw剨)S:u\{fb "ᩧYXXtZ!)" qS1&4 F}kWchh(<<'~v <3;yY#肙3_ٲe^Fp02+'?cn|>I)2L2) IfQIzM/Wp`sۺu[``У>›7ox칷zw=݊Jb^<>Fb[2^ F LY^Eo4Y䐟<#G޳go%OHҥy7׭[&K 03Ac4pP|kL >L2eQ^D Al^%H]\t9}!*Ν;_cﰕh ő+3"Pޛ=H(a&fΑ$^CCZa^vB_{ v){}ay/ŠInLDDӘKi Uw$J!A zJQl .Rʇu}D~[L^NRm)fdId6L'uQ)&e~2e6&H<GmvЉ 4|۶ߞI M=vI zX[ΛKuw[3F)˖SPс>B $-8Дq,xuҥKssQF QČpc'tJфb4 ^2b$â?a2Ho; ],v=E)dQ|Ӧ-Ig2OzXō7ɀԅ'3i>?1LDbRs=:m0/t4>R~_F(zĨ=[߱؞xpݻW_:WOlvd#]y"oXNo}f-u.> ;?|w͋f H)V~Rox-<%3XS.TxWXYj͚TV3fBZ2*UVU) _9k>+l /R,=t(OR\\G}Ěl;xώ=ѣ۶m{饗/C4߲\Z׈섩vD&UFYd'r"3"JAA͛"J@`__?5P%8rGgO)z;:qe9lE e*ۀ8R>|Tɩ dOqz^RoܸTquF{ 6Zt 1r"HB(#fa*a2TɌ4KطFcNeE/WVV#Aa81$a$F[8 ei;[sPIH)/Xi8Ɣ(a=d`L̴gϞO$db(1r( i$!&p7'n d<)0 !ٯ̂W8 O|v:۫.:PO23To$6X 4s$7 RE~g| "H ?Yd#mVdɒJV(֐Pn嵅2F_wL,F$S6l8BX`` [(I*kO>T_#ޅzR`y]>eQϏxfdUYα]:Ń/|tck?YuVO@urM>ow8ֹm}qGW\:kݲ:u:GMZ^n*.Wgk3s2*S+Sԍ s0%W`b1V߾+TgQD\pa@8|p6;4*/A@^v?V|h5p"-I2X>I^Ie`p C-an%w~?Ńv]>/V[}aOh߮{w3o׎=v:mMl\~ʵV,[|-KCgX޾agg7lXdڶmwV>XE xJ8z OLk硗/^J~㟲c)ﵶS DIث]EgΜ_-\]9,Hdwpl؋Rƍi+ez};ZyQ>~K;B$Q/.Ytܸ~B%S/,̅TΜD/?fABR-C@|1E{wN0qÏ2F|v/^lllĠUyB@qx{~,|uv҉$QgMOayE(6l1ΪUk^yHJϟ?_QFȔzV=O\cv\>R qjE>Ҥ zkmW_yU ݿEE%f|GCy .ƣ`#H Ç4 P IBO>zټ|KLJذ))i⍢+.3+Wޟ6MiR#-mkO Q/57 sl(Xff:ݻ_a(%4Sl?ϙϜ9ǠhoͰ##&lwBs0;C 5b"1&0d-[1YL'O4 Y$3f%uQ ڂ;v@hK%+݇ ^7,! gffy01dZ  H(&H 9tZe>=$cƷo|'޵%.|x+V\;Ʊ7+ZMlGv~ti;Ǘvۗر~>`VWYKMee↼켚̪ԌʔԪ$9|qVM*wLMM=GŃ"I"â խ(@.}&Tcb %iDJ<,ᗁgCƚF+8 ^{bE//x>F@?zؑWvlڶeM7۸aݚ+5dEӧNcڑ!`-Km<;֔, Yұ+..gLٛ" dmGfI%ln۶},mINMD'yꑃ\ITXWe0k֫%' WR+ٳ_1U[f|uvvv.B 3glkk߼y+[#mVR#`u>0jӦ)}kh[5bL2Wšaq73v\lE (KNPC6V8۵krHwy#E v&7^6d}O]YY9X :9M0)"e3~ߤ zl'Cav`/D_wvvcL) s„ 2? D9zX"Y,66299&;v?M|"IO~k׮]7o(,nVcdd46s]d!}DARq-6Ӧ͠+2ێ;6l؀Ֆ,D_J~|>S5?ً-""h2*)J;w3i6D[ttcb"""Ǐ# W'F̅).M@unٲrp"g?}t2.OO;66?11i#FStT52B']CjOOMCUQA?b6F[aRF_`4}70# @D Df2s)E+o7.&FÆ.I#ǏO>b{&`I_Bshϑ@ 1>7L}qGjii?Ib8  E ?skO&ڽh sofPPOcno@:E|0a1oڵ{͚uH$txڴ6 d A]W ,M& SA]#dAa 3 J2Hyg޻d2&@$:~Ć1H%wxd^b(%b!"i9hmEE7X5z&dRHqQ?\4AT*)E$b;l|ua(ڔ :)0?12HTڴՆlŨo xO2|xY0yb Fˤ.d0T-ZגV&z :i)@&]) Jce&byjYR&'S27n$+{4E?bOYֲvE ^Ν;/}o@,Pw.~E]%%e(@G3@Y3fº! aI)#Eq/F=qTequwyp˛G9߿ҁ%Xrdōc[uƩ7l>6萻vꢏ"u5!9CtO.B'U**3*j3S3kK5=ͭӜ]3Zwt9}r[DggK_s >휨8V> r9፩ƽ>{-~!Mh5< &;M]w>it[-mVKkSSKUZ\j),nLϪLJ-O*:E@܋}vsĸN:GGFE9lπJ/eH)1V?,JehcӌX)%ڀ+@x> /scܻsA>nݲu˦ mXf+V,]d;MUVV}qdǂ [bXD-:#BijcG{'y$Tʒ_ŬKNw:"+KYj{BB }ţDx⩇zɯIfFќ<,go} )%QPdFI -j9xih),xGwL7} hE-Q<3a#{7ovl'"9X͛DU'ٌv h;"P#?YJ}{ !3OfR œH2$P 4jˇXDarJ)CTCh/HN UP#-_@nECZ-%Q0U4CK$I S/}iEH52?N SOFL+Zi=FP@ ֚F0XDO3lİۧ v@@4:FU,cM|x J\N۞1 Pv{o*#D +=VVP+!K)bD>I^dGD@"hn4ɀ(fwPqQX% dΜʂ J&R'$CCQ^$3OwHC=iQ5ET"?բ8'uC)4ۢO* Iwiw} L.9"^RLEbd^LBAI.v)&?6D&I"'2ԷZ $b|E@w4by&m JɃ^$av@&E OiIa&)NÒ22X,F)+L&eEHK$hDS) x9(qp̝8ȶNnιg,g{_];ڱk#.[gw>냳o]w=.ܳyդnK^Skh(.-*+)k˯ȬLˬNTO)WWmT&T%&V'U% b@L(Us"=!tM=q䯈Sgbj#4_>)\"6g^@x1u+tV@"~cB(41եz tVb-|4ҡ9  &|OZ]N:ǔYE_[x*{aўX QL.A{&T{Y!!2! $gԀԬ{}cm{zG=ӻ:!hgKK8gxAOjkStxAC;\ts^unM;]!hxoO#Mfׅn> oܣhswG;ہPm6uMN\^f),l*,n*(nHˬHL)O*/+dBӥ  < "DB7 ML0F)#>2ddV1q$3aqfS?yt0 EC{[jo ^G=r`ޝ{vܾs[o޼e֮_fK-^©Xhcq9ȓ,Yf 玔=\!uZ>Z,]B]{$֝O,u6i+%pO H JhE^sTGD%Ȭsw>,wG{ӧ~ vYd& _xdsTbxJiikbM XYTI0AowVߦKY( fQM :Kd&RyIuG?'!n9~1lPlP$R*R/PxQOB$F"Hf "Z2FؓH!_%:Q+$4]0#[8")ťvQ$!\$)N R]J9 &:*N u ,6"?$VRJ0n $--]ؽ[1,=%9LHN+HK$ 9%3YI_k AN[^mץ.$@$Q,am/Vսp'PU(B<@"5 TJ &jTedvTQ=|YY9Z쮩Zj3=QZ&%I4LOuvv>}6''-KAA!Oz__7teh)?TDŌ(;OQXǨNfQ|j'mp^.LetN%c'͝y@OnR%RHH z*R5p{,rB) сnMMbz"9G&: CQHrS$ D =O/2uWn4eLbE(2$,?EytuSaUZ¥$ AUL?"xORyJ4 %Z;Cn :`BTZ$ 0O"/zɬ ~dDTڢ]Rf>Iҵ(SϊWw%DE)n+0,[/}K@HrCeM+Y8bu}tWG4CMAྔ#Q@O=BP#'H]kԧ>3U`}:4WBDFFEghtihT)ᰘҰXe1!O@˗ [8b5 B A껎LέBCQh`晐VVR^QQPPlmuO;gzoߌim㛝[Z\t:sr:PpQ9rG@h'ӓ^:0L(i.܈)VH%LWޑLx5Gml®,w/g=10L pX^ y;'M2ZPzb >g?gC/ ?SRҞҧdD~s4Fa+`.L銊JV]kw?% Ԓ?!88T߉[te+"zJ yU =[iO2X^ߦ:ӧa~gi)ndg+@OY^0|7rvJ.׫--|s~wRo#[^9cg.xp{Gּwt#||Փ^giz>/۳m]goCT]TUi.-k,(+ΩȪNMW7>'U'x\TPPXb4⁺6zy޹42^_묠N,NNt!6&.gLR0ήCЉU 22,,$082 GN7[2ԡ怐;;e8 RBBQd*:4H}r"J?(+0Dr>=U}pܡ%!B¡?A66/CI s;7 45v7t5ƎS:mjh45u}TRb.(45edW'G&0L "2O=+2?$A@b~*Yxd9 _&FcR2,$@*aY-$ 脠L}H{vؾsm[}޺q ׮^f-Ypw/ `c|Yח^W3~;#}^o4EkYƄ0O+DJj?ԠTᱟϲ>|.ą{*I^@=wVe6 _V~ |>(z" Lܻv桭9v;wC˯]}pĺk'^=7nuv덳oun?+8l ֚SEeCYySaq]n~MvNufvMZfuJZebjeBj|.:*HAX(A<_P?'BtbIR >..6&D%{쳄]SNtj Ov}9Pm6(;ʖcVI@䛄s*ZhhE@P*5 , *98(("_OErH' *ZB@ xgB z!hsB@峄r%t:56-[`1wq7ki]SZ&9Ƿkku68z-Z{AkΉNADG}ΩS>3 hO74v)E@a3uXLNRXԔPXܔSVTk|08"K>E!i< Z8h7,GAAgyNI੅n6'1<%@R ; m)r‹u0=ھmp[mۼyM7lܰnÚkWYtޙhE&N?ȹc7Fxk:Ehqt;o'`?Yd8</PdW2"g]_x5_1lVe&! Td"CON~EX:Q2/ahedF|c?dhg |bOp?$b31z;e}>7h+&];ЖWsbp]]tz"?Ooyf˭[o~sn{w~x--S}T^TXܐWPS~ΨJIǟI,/v$*^}u024H(S *$U&긔zZ?+:2<""ȢHŷ;P.8زLBrC3p^pxa a hS]͡ hu_HH ͥ 9,h]A.*- p5ph"}V1 tvы*ƓCBCߟS2kӫS}M3ƽ:i=S;;toojR4tCVueB}ָC@;&-$}+8, A' hɛ u MNjiXն윺†RZr ~<#P}ų0}˳ˀxN(% 1B:2b(e͒H~~gM9M> Z2H H XW #ٽw۶oۺ}떭7m޸a֭ݰj嚕.Ydϛp)>Z@-M+z?2!('[2~ʓ<gT=ģp6q$JFg]_x5_)sYf Wd :TG#s?_yw,pI~ %łWwo*Z'~~_9ʂVMݻC[^?>8s~K_>򽣫7^;7lUoun-uv߼=RUa)/35fVgVfʔ䔊ĔJTn@ХnE)hL]Ne "T?7f:6&:Q]nN(꞊<5a ML 0B/ZB#'I%")PGyu r'5a ;9=BqA4uGrfmrF}jV}^szO߬Ξ]zwwNltv4;[]B@8<9}IĖv]; h&= k}gaOڤ$Ab[@]iZ-fȔS[_İK, ʉM(O*  T'#M NI zʋv2x6w@T|A ,4 f٠% OU^S2P`}6Hꃁa]wܽ}m[oݼmƭoڰnڵW Xje-?o9L??j#69khx ^9!.[ ;v#Ut{.|r wvU^W>BFV|I0(E'1hB^UJ]NOiij.|!q#G>_U1v®ox7O -oٰn5׬^bŪV-Zl¥.#ݐ `9dd3#H@`!PR@|=?_,x / ##ǯW[iiTD}{?0 ( ]&1 qr8ɄLq{aXqpnp f6FCJ<:̮>KaK/Tfgͬ8<]Yvn߲Vh,zb'7]?m7yn]7> jC)763:-"9,9<)MݺR\PPXf@8娄ҨR7% yI6)\)*D ,28,Ι吜@g (EXcM?hO$#80( (5+[_١(Hu7h iRgԎ, _, v14$0@8hi䉈+Wvc9]`|P͊q8Du֓6hh/8 -'Z^UYՐWl7k={z:=cBw[w۸vgөnغ.imiml(> -4\>ߓ`f`Ū ,1^ 7 ڀ"ZgSSf17۬ MZ[I%7>=2+6#:1$2FTSСY@`HBpjph 0,S6(f 4b¢ dI; KMf=gnYxd*I٠FOyHZ/'4b]}009{hpז[7mزqk7iyUk/[t; ,|g9ւq}>6y0; A3LP5:HH OSI ]oxO x1@f)0* 2NP^ab VK JIGaxH߈$ 3N.6ɟς>|.xΟW?1.̫2S-|s0z}<28Ԟeg.?oŃ+/ppٻGV\9 OoynƎoy[vr+Z2SYPеEE59UYUIeI)))eI1rYZ.b+8B ǕǕ(9N% KGg3JaTvCXX_SYJB9aRY^Fr,쳺Y辎Cqa9aS^ t r"EM+9W5+ )!Q- 4O}uGHdA( Zt h:󳄞Qh"\^^ZQY^ݔWl39ڦ:;Oh5{ROǸq^blں[txuDs:d}#PoϓlChӰ lsֻhE@h)7m6Xir}PQ <ͦNbX:fa6L d465d%eV&īkC³"rC#B҂2ܼO CA@pZ@HzPXСn ƚqY8h2l%DR(N@0 L`PB7 1 $ȳČ~^>}OO xлvܼqۦ k7]q +-[ ,|gقK~k[o;@xUg|=>sxUWW^^@x ~ U|g9ي´&Zowj[z~ ^:Uܨ>̿MLc> ,.IlnY.ujnq:ڜmvks]15:%69<60":/2F!$,+ (-($#@n6TM@9- C"ԝ :\ zZƦt717 xG\Yg 9w`ГR%&BfC@>KNlxg^Ѓ;vm߶S]nZuU+ׯX' /7wo}9=~}}U3Wu9K/U^ ^e?sxUTxU܇/*'zWq|#ȑW g6?c]KO^rjϢs]:<ޱ5WOlxk<7xsC\sΛw}xkڝye%%uE陕)IiqIeI%1zB1 ҈h"%PYO%UiZ>QfgW_W_WS-oPH_HCsCޠ_PA+(f98KL6}}r^Xhb2L&EQDvήVaĴhBhTaX :xٮAkdG[8AB'U%פdցJA:k:{ݝN5n|Go_ggWkG[seyi;-.qm-[[&:囄 -'8's0@gc1f'=?r ^3}6-OCwY8M6Kwn9jlEEMiՉU)镱 Ea ":7$\@ݹ66(eL`B@{^ߐ́Z}&K1rI`7-\>a/F"` =# H<ha݄2?I}?I`^4,etꃁa;m۟׮1+.Yj,;oo{>*ë^%{| ?^9?** ^@xK«>灑9Ⅺ]f- .8kٙ=K]rG\9MOoqzۭC^=Kn_}~i%EEuٹ5U9I)e 6I|Գ g DƖGG9(/0hac*5""b\Gu "T_\[*#@UDleXt9!P!Q%4mhu: c?HOrq?H3Z% gCU!nZAs`VVa rۨ V|0,dg7B\nxJ0uUAN?z8]ZAkF!.-1VSh>i|&twwt8-{Waik6[;c2^cBKsKxc1veٓ6xgd_'n#ˬpz}vK䴘[6GogfTRbʩKH-KͨO*  NH Jzt@B@@ Mf>lpЌDFVP$h)@f I%__m5#}~?ŀ')}e;'ź``}-m^vA@Xbź%KV/^jes.y6{~3Wu>|9ëWëg| /{ Ww?^R*>y`ij1g8E'9{}KX~ЪG_9S[v̎ko}nޱmfKvNIn~|u0#&=6.46D}.q.6Y3NgWY(-~$'1Pr9,2$EƕDS-&&Z*cECE}ǔF+ zՈW&1ZϞ$ O p@"/UBM%cSh!52>PJ" 6N@k(Z@. !|CFBh^@Г@[8h?qI5MͪKʨi9v9~|WgoivZ;MNGcsscKlkqКov;vA$c]О! lX}>;>e2[Lvkm5VSs9m| []uSy%7!>8),14<*/$<3,2;<2784>tACAiaY!3B+P' L!PA1).n@N; }6hO 0€F@o6eڵ׬ٴzU6 lXbek-Z [:gb!{z&~3Wu>|9ëWëg| /{ Ww?^R*>y`ijF|^Я8w;kṽtxcm~n7/w߾tSfϚ_XSP_SQ^R_>|W?9{ >|쨑.ٽq oڼ؎O ;{}.^u؆Ol{gq}po]8mFSFvuN~`vuJzEbYɥQ{g}m#R}oPa)t]dNp 껅FZb!"bJccE襛)+-1Hgx44X_m!W$K*AzЊ V,}fOOb+8 ֒ӂc3j/$^Vϐ,Ssb)tX^3O FUZ!" ]OL@X2l-ԳT'F*s_r]ta}LsA6B%ǧT4䬦lSjvczvSNjiwt;mNSdk%`isX;lnԢ(٦Vkݦ`MF~.oxʶV=df XyV5qZ*ki]i:h2um.lmZ:ojGGTo(7եfU'%&&[8B"r#sSG' Jy?űw? N  p!!y2zHB: -` ?,1XcTaΒ/809F0DA9h4h68{BHgOdꃁ^q+-["9zkϟ={&}'9U_rxgjU*ë:|>|W?9{ B>F(>#+?GzTԟ%F~.ٵi o2ۧv.8g}/Z Wovjgv\;7q~͋N5uR^^izvufnmFVEjFyrZybjy\JylrYtBI> "b"c#Qq>VgքˢK$M:'TC<]稸҈𘂈XE~ØELǪ %5Њz#{4Ra=&(klP9(; (/ c,pЄB\tpx~HD:& %'s,9ԡ0 Y'SA]n } t]\aiN/"Ϛt.$QԃhZ90E@oށ9hq9&4] UIu 9MٍiY yf>al;Ζ&4XN]ivƶ^  ,BFSж fxlgSMxgӢa6oWԉlʼne1[LmZN[SKl1wݭ-vS eT%$%DeE7gOulPjTp J'3C"s?Q h@Wh]Yc@d>>l@d}IXe)D$ O$ ٠ɬ#S1_p_9: eL!o$86wSeXW #7mޱak6ZI?/[vRu… ,;wɛo ^}u|||?31b{~Ԩ~{$^$DzQ^s*unj&'$E'ۙ(E=EŕGWEtvASc1<r96*&2*D;JL)u9&/,Zn'ԳfbcKBb#\_ Un,3 @& h2BrdžO *6Ye40:@ccB 䨣A~M@F))XMַ|LPuDZ9cs=B$ Ԝ:sU (:?y;&@136  -?%FKF9 bA(:" E}heiU))i 9 3.f1uuu;:;VkknnQ"45ۛM-&[m.nٺm鲚;NjZԷ-l ̶f[֧1oM@SPv`S'm^aShڭVjjvۚ]ske\g۬=S{;&tw4~gdW&E'${Ix}Q_F1&0?<+ "3 u/8_7D"uMxtQd3n AI G,41O!yS@hb*1!$<12ߓdU&or<ՠK gq>:A"?X/0&^Yr:!ygY,+5||| g0(4QNuw|UQ֮y'۽guUpj뵳7<١ڳq\Ow^nEvNUFVyRJQb㓊cu Qe>G7J#cˢ*"bK/slRy\rylҠ'tetbٹ,RإQUcBrC&Ŋcb?6XTH G iNb&UIC@h1w蠰  wke~:huhJp?gWoސ@r Lf~a4\͘04Hg #=l(:=9h<Ġ=9h7 +*+}uY 9uyuEU6sS{lhnoZ[Vi;F{30;fufZ:-6E= t(}3-{qV lC:-]:l.7z5lۦa&l:lֶv99eBW{O{{}McA~un~"q<T96(UN7Aq&I q}GGĨkpB43N  hyI4?# U[xJf']^$'Bs@b:@$&p?T@Юhh/3Kpzӎw9~ ͛_+owv>>>>|!^{9 -3F}wgHN;Fyƍ\uaS}t˜CYrq G^9-ʩmqnuuKv-FyiMfFEVVUzfirjqB2(K,/q5Sn|VP7K&JcAXuZP-Ttd\QxcCܗ3(<8<84H- :7ǪP2 *m!bM@Z$4p߰.eVWjhX>6(/H3a}FP }U0P}0(2?}:)Xё"wt(WꞍuPr\*\.p]ߡ h]K u.~>wN@B@=/ Ͻ``XVPࠁpBC{rQh7]QYSېPTTSe:6GGhXۭ2vSS[ccs}doٚmVE'6NYsS&,ꆍqBC#խr\,EԳ SP+־f[CV:ymnfnYZmV͖6{snXgϫʩ̩O)t1šQ9DsHz@h/_Ku:8qY!$?4ChkF <[(V!N 姰2% ӕh ,30b$ݵ1#)|/8B/3K0zu붯\QЛ/ߠ?]p][^}k͛5->>>×B1 ,7b r+0J #fY?Wlsbs{\?pM@Nnzz]/vq[Kvfynn}jzyRjQRZIlbB++2k3%p|ؠԇgETByD\ %dϰbi `ՔkqHTfNaaT ,OI_Sw% -bCG?6/OwQNfM]TiSnpW1Ac-̨B#@dMs$HCk 3g iAFxܝm0܀0B#*0-$ Ɨ 6BuJJt]Zv}zNCVNC~~ciT5:MNk^onnhlkjl75769jl5&s谙6u+t&;Yl3Y%G=bg&IeӗA뀛z\ԳFT5=[oatX;. SwجmVSji>eROގNs*+*#:!T/mȚYN:,?}&Pg.rS~ 䠱о }X&abwxdp1,tȔ$"_jHP/8CFezxş9X/06z``Êk.\5os^[0{3]>>>lxn Sb$ /|Hr~?1LެFюe]?owbh=Kxxͻ6(Զ+?ڹ=7;pĎWM,ʯɮʪIN-O*K*N(/--++-r𘢈E@ f-?c\Iщ +8"7$ L?G+#b:ɫYTE' .еДtnge!0E1d!i3 Pwh%tUUh-ZuZQZ,TtX^M>Lc]-PѾZImi0<'O`WPMgr.:3 X1(`ڃLLsNJMɬio*,l*-n*UkKUQ[o3U5V75Z--VSfnjojT05uM&K ,&+[ypPEl7vCaǜmVCsWZfQl*nY Vsn5;l67M-^=mRw[w[d+/ʩJ˨HJ++ ΍ǤcR JߝCId @xg4 셗S^K66.]›^v+6._a2uyѢSr޼s,}E>||>FO>YÏ|k_WO"oi}Y0J #-޻a oΉ Yq~C/]Yݿ3;s۰v?%$&$FF'E{ "c cS  Yh.uI,N( PȂ#C#}. *, *$KBA aM`ɣ\~kٓZ! Ac(xZM9?]0&PˮSفYic܄# )yM(Z}TP,MI@nR̒_ 3EF$^l皉i{etѥ n[-io6^5l[UUM9UieI "}vVxL Nzt@ҋcl/go}tGD.`l2xԟdx" aB7X26D{x:C HO!A2^OZjcշlB=8$|A^,뷯] .]x:CV->9*,>C=<?_?_?_=򕯄G~O}{?tx8g7}t⓻ݻUpdݥ.vq~]'-.ʨLϪLJ+JH./+'{W?GE?/&K($!xFςgTؒؒp@|9o. * tqXLINHu❣ 'Ef2hu=!4(cCȑcAQQcМ1hu!~a9֬wǁAB@ۜ5o&# QaC!Qw^Pۡrkgu14P(8(0E@GG)z($ZNSu9`O@I@{p.EEGDؤ*AFmjV]fn}^A}QQCYIceycUTY\[T45 Succanl4ufSc5,&sDCЊ![L&E@=4NWXg>7[ #pX;-N KfYͭ{9{+^;li;kkٹ5ɩee'$gF D2F:64?,Cs֩&=&,*NA_C` dB wOF S Uؠt?}&R@Xyp2(%3>:/$ϕw6~E@Xfۊ= ^ʹ󖿭ų_{g(zҳlr`= %-JKgM*?bȖ?qx&xi7b#:KDJAO!^ Q421hB̈H4 d F ?x}3own^R\TSS[VHt醀P0@W9I)FhIfIsֳ,}9"uUc*Y`HxXT\n6V;*55Pkcâ$E'PLdxsN6MD NiȖ\0: q>27"G@FFLȞ=5"2k9:#<0,:?<}q`"Kb:OPfAX^%Feâ cIqߊHCUwSol6=ܴ]stRwJMEbK KWlo'C,Gl_ lA\|T,%X@%?c0.seէe746e56UVܭnwCv8nkoiww{ۚsPwZwM={NW眎^УYtv^B=[,6N>ECkhgtN=510{:fN[:g W/=tp<jWfU(*>O͵wΚa޳7%v5v-_mي-n?q6k{ut=iEX3VDZ;qEG%WI֗ofK% rQ VE& H[vA 7Y *׾G:eǖ+2i֥D`A{GHB^Y$T\U芎mD vc@A@ eVdP Z R$R\j\eMB"MJABA.a( K m9>HB iP֖@:ʒҒ&/!jrRz0::G'\{ **f„I%U 8ip,WU$}\U*%e ,n/5Ŋtl җ(@w+BTn n 64J"ǔJB˶[/&u]W# "GBR%$UB[!r mAJJIǎl墦\ԔHS@ȵjܒ[ޟQLi(6eUJ@E Fu\Ue*amGƴBUPAR yPإlU[)d,UWe>d4J (V30{`Ė+A.W* g[$5n"\rtNeeDjeH+7"@"0-1: ; jJZ MHH ]'=E PV@B6%A mMr %$bI.Pr}r}r}r}r}@̙s7Z2S4+;h*8stKG7_xf/<ƋOyn;_x7?}O_\_YUYJJIvWiDVNٹNZ5ɩu)iufA;nB9sCHrYjL%ZW %XEːe+㒪* N89CgP$Upk1eV1Ifud|h1C#B"sFS##b cljDM_$h#}/-,fϲ,[G9{K 0Nw|Cwܵ˼pv?aWݹ|e7/^a`p.,Y_w _?W_K_^jrU)(+(4[0~-r-Y(h$D.YV+q*+9 DGȥ,QwnU/qsխh(E 0`Jf%Q"47n妛nFCnBj$$*D[{ dLxM^{Ur_u5\sYd/E~{$p@rͦ"QA}vU t:&C~~{clQPj'ݹgiZeo!'HeQ3I$Ln1kw yPQH+knڵ')a!Sc^^޽$CG#v(UrjG,A $ր*$ 4bQMqW]d{$T;KH:p>A[AE J2kˠj$!عrvVaד3Mcwy"&5mH.m9?a  %{[_tQUe]VnEfVYffYfFyZZEJjESS,o~aO@'eSR2|>;kD,:Ftm"0ns^f0 qIee6g H`!Мa8hguBE@ ;#ZJ0g:ED[oS#B#s#b rg1!ᆀC.#gV] " ml'".f^5gxlAM\nf55cM0OH,9hC<>:$sxuxjeҕh!=)"e򊶪O}mzZڼo[oG=iq5mv@;fz:x/!͛=Q9mcFg;^ z,zgp~WHOhwhwhoޙ}=z{鞎1Nww y;<m-M]= g6sgPwGuUKQQ}ZFU€/ȸ܈؜L&hkŽ",Zhf#}J0}6iG%o",O=S]Le ` E7eLZA{Z[ H 0)4]z 1&ư_c\B@8޽w:v4@o۶'7n~B۟Wٱ|֥mZd\V|db5e/xљ+WZY)).-;Y%@Za՗WZAI4¼jݢD!^#WuR !;!iZ$\U5 !eAi**3II)SBTM4WivHPHe\U)5WXS|m n$?55u'^B}Ѣt֒%K{CB¨KQ33gϚ5'::ȕ@P;N d9E^BjZAAT[u]\+ q@Pjuuxxw|;aebR^^IRʒ ɣ u## 9@"fv. -$bŪ>!gRA@om?#^o+̙[RRzm+]VCUIEJ#ddi,SWH,+l@:$k{YYu=ЏeD(pVAJBf\HGBʒ8}tbggc-6m(<J\ JS%$T UҴV_*,G`W>W RdҤ)] .?!3lښԂfuٳh JR\i%472-UqOGVVJ!!,D[ .>WFh#,APq@FZvTjj[k+?oo;3L.W"m)J Dnh|r˕[|lW.finIs݂kvp#63$( #_GmWO3CzWGo>.O77<;2+2;*3*% ¢|2ub-aiF h,/R zڒivlr% 탶$ Z'eSYLVڜ1MYd0hSh!Ζ)NP х }(Kt0 dMЂya~KnQ[ai{iy{Yy[E[[it=VOg[g3lm^2/ОQsF,0'o;sÂ-YA6s{ {FgHwޞYTm=3zfvi ÝC=ݝz: O68{xp9uh*oϭq8RK㓋≭a}XWfY(Jy8)q+ڼYL6J]@}t(c=2>YWq6¬m΁Gk ?\B@bާ>^zмIX:%kfs;/J?}LJK%-p"ZOj~Vw(X?qYK_Ł]eG 8*h/ U,*R) !je$by+VV&|޼Wum Y.I-ieI+EdDeІmMF-117ޚ?!eǍt;x{ͷ'~'_~ɓ'Ϝ9;E;F(8a¤WWvb\]|4sl|yN)« [y%<*GBHoѱN޺u 8õ~FpQc_ϟmϱ+ɕ[OrvyW?ǎ_ %eƚJ#VJd?gOBr (H+y%;hJHZA&MKH= "%dٲŗNڹs73wt鎒wywhhhܸ7((IˠО:9teR/tu뎫9n&I-yU/EA:X H(M Iu?i=Wl;SVYY{{Ⱦ\ Y@0e+1-Qq@6B.ʹ\]eYoBezlȑH([ Qw}/B$6ltyFOl8 >䳗_~ (/,Yz)Eâ 9)`MAܒ CCSVF0ȣFTV à$bԨ[rHGRjk뮻t%Tٹו+W iTPj/B^IPS]9c.YGlgqs'xtx8S]Y^4t#ґZ:R% hgZ]JzE@^6 mYg탾du%8R~bBT)FkKrTE:Iӆõz+ҭX`sZGpJ 60쭟6\ }"m"_C[5RW(gL>GƗǢV稊N4Y8t:4:/,&?:nPr܎uo#j 6 D@IH?#1K˒ :5BRUn0 Z JeUֆꦆږVock[ivwvtu:=3:3:fXg1vw3kvg,oLO'ގގYގ杄#a{zA{a  q𴏴hotum3=kfWh =7488s``:탞ftvO9}𴙃{{=e u<m脂<m@#6sLb!h|  P]Q)1kǍONbV7)b 2CMOXk@̴^z󪫮` Pߘ0a_H9ɕ~'멧Ʒi0Sы)% }L`R\Uq4#qk_?)BG:J (666?OT 2 M$X&$A(HR®VcR`"Aݤ"dqUb?d" rg3\z- Wh):t:SN:om7(H|4䪜W \G>}fD 嵵 t r59Et4 5WW=/iZ٥S(@YIeb3A] mv<ɐ0RAWQ YtY N= uY(+iYD1h Ee:jjrTU&UuQ (Ø"*PS.0յNv8R5ŋ8,s8Cp},0{n/'N|… ' U:tmڑ WEQC" q@}ԅA3bEC)IbEh}r}r}r}r}_we~4T>!wo}G{?;zU+J겳r]饩i%fߥ,9ܑRLC@, gZ8gDԬzgFm*ɅTACYXqIef2ѩMԇYyЉst6l,Wk[ao-׷/XЭ1{C"r- LO:`#M@Gp*\N@_(gbʸ%o3Q+xH@[M@nRZ/K l, } Ъ"Iq ?j(N0ɯD@@Z%  hϘM͘Knpe7d5˽%zw}K{cK[iihuwt3;<;ftΞݳ3f{:#jA?=cT[;QqOo0i157}phLOp[K33=nvy;-͞OYCCý}wmuKEyKv^mjzy0FDfF΀l D.GSM šɩNslN}jFt_P=ɥP J'!>!E[yg.A&m@VH$AhXNx %ڛ: ư_c%xawlj[\$W؊-K۴p&MeÊ%i{̙u,K#@V9yVk(Λ۴iCѱ,R"QPP4{\CCccYXbUV}5kgϞJYZpq_ Qh% pMy)) GGg[iPin eEK ԋMԴ̬2H$X c955M X> +dҥKy<&MA(k^ou?7xsɒ/dv%s%Mĝ>}frK/Y>sY'}Bz 6h0AxyyEEr9 5a 0--uuu-$mݺ?pernke nٲAk3VN -++{z 0UWM˖=ڲ*Ǥy$BNC׮]+p=_%䪡H Ξ}f0*+Q#WFo[ǖ%<Zh5k6O(c._)ҡ8PR.W:Ku1cQ*t=&Y* 0H}=:z ZJ5섆ې0j$ yh/)ECܺp"[ 5cǟ9@Q Sd]AN/ԅ&ΠaյI' 9miJ]@EH%%e&Yd` #*''zc5#iGny q7Ip) ٜ1qsD ŢY ⓫{DFS6G^X EZEo^*aQrEEEso^6g\ėD am.em֎鰘ԋD&+i %c߰$#kvdSiHD {?QI5ٴlBAlڗ:گz9 D@mstyNAj&MͪOɪOio..i7t؜ZYTS^_[QTZutt@WG@9mݳ M13{ 1b]p` 54WHg}}F{xG{ ư_c\J@?{OyxC;ܾodXnM@/Yq$"h ԹsY~fyi^oٳ/q=x0 T,綾.?3~ӧ'z{lٳ~ɓn/-Vq,)oqGY!ǠB X"ANSP?|C?Lmmgkokx;9r i ?g|ѣOڵ>`Ari&?dQM4Yu6;v5EA…W׻﾿o~@nQQ z뭷/\xv?aIׯx…׿w,~&⪂[| ?jdd&b., g:;o$LJ~Mh=cO?TQE;$ZDHw~׿ٲe8q~ͷ K/'[n]r$\g+ Ǐ466c_=H|X $D/bVWr#!-rw\^{Cw~7~vzvoIxq=Y۷|_^8}Qkg`<6l?t۶xH4>Q Τgee5q*m;^|eˉY8V|)ȰYp1IyV/2ꢋqI"?oټOA5{1~mimm[qeֿۿ}W~UTT3P0f[@ETIZʀ47n<CxB`)nhh.BA]ߟ;e9M`JASzuu YLpVq~yF&P4ǙRL{),g$4oW WFkaÓK|O}^xɓҮ%KO Ąa"JP)i&_^ 37>YteaaE0r?Ic>b2]|?9,:}E & À6>̳^$\ɢQ<1BD߳@wk󰗔ippKKϝ# 볳spO+_|YSSyR~SSɓ/0Fn'2^zv@b2`5Zǘɘ.ZW&Qr*/WLAi,Fs0UA,:ʺ@É _b2Dxy))nc0<<1?4 7&_Axv;)GH cOPOPOPOPOP(ЍեmNýzw_9'^|uYY WFY,U*MH)g$hЉ֡$.sH#rjurZ3wggZotuˢ]5 N\p0r|rh'MD J6&C!:JHgNN_<9Bm }fw(B5gYhӴiz)]Y289pƜaKZdhz1ztjxNHdNhL^DPcBy4N. h\6(nq% eēiChH@ YӹeIe eW$S2*Ό:?RT^Z).u{K+Z[[۽-mm=].ήѮ<1^N@kgthwDG u1üm8hnaڧ  uu ux[=-==NoW{[Tڒא[[\Tlmj/++)OϪJX EeMD@PFeH[@LΣ;bxt:9() A׃i5U\Gvǣ HH@4t6k,)!i5W]uM~~! ~,;袮j!o~֥wa59PD545yTT >̘1J۹ձn(?~^@͹XD-H_cbX?)@,dffSott,+ 6)\s]mm=Mnmm,/3B0BgQ&&&_v=iJ~[#(SCo߉ùU~p~Ǐ2e}=r/HAl$ر˖-W՛\鵨gynɒet!qƧ}2zD|MMC(66jDq5,,1+:.#S^o''T\M#1~=d'ɕٳN"kO)+VO<6m8q2eF'7WkXVE8VXX_|I[hȍ7D) OjWOrw-Z+/< f<)r֭pKƔ pCn[$';Ǔ>ԩӄE|^^͡;~۔[ YW_Ӧ ZIGG]I]L,f?ggΜabCH_xᅎNY'ťYz- #HHH" M_1hm9|K/gZF{ۿk Na`ch*P8hw<41H$L k٭O;w1Ou15~V0 xBy3)‹Nbϛg}9:r]{0ꫯXG&PO>B)>8)0!$zD9szbZ,u O=Mad`DŽ &ԋ> G"_C,]OJJέC9s6?eՎA/3ڑ3ٽq*} 6T^ӧCĂA_Z |!%nxE/,0G (EJh"࣏>1c|P" -O^/_&ʼnK/]ַɓ/ȌD=`kii,_+L>clbx_RBU >YOO ,mfE+u1hc mgla$M|u4*{h/ܦe0e=Ng7te+,2ɐf "iQQ M &2L'-X"6DBPh#@tӎ΀\ΞȿN]ws߯*9Y0ې} -!XsLGu35&0kǢ Po?vl5&R"żc"sâq M,Q&Pd7)wՇȸ¨k)B@nDEZtD9r Z\$KJ ^]Ȩvf!ӐeQT^X^\.-k-.n(/*)knjkiov76w6wu{C]Ý3:G:s;9knG^9h)ftgǬψ;11j(iaAwtLA36>mueZSsCs_K@{mtz:zzgO^WTZXQ^RڞSԔ[]PXX䮮l,.-,/ʩJq%$4C@GŘςM@^EhG8`jGXyF3X&'3p? o?K@#ĈSKk7C:CC"Fp|6nalh$[AsM"H@+z{>}m;[ߴeO߸w=Zj6/YiN#ԲU',Qigekǔ7,,X2ܷo?+7`YN<ٱcΝ0T#^m (ܹaV3"">x-9sXܹBB}}ԋ&W^ymZZIFA@כ4uQ#$X@C̟p֬9}[QQ1ڧ~o??GM:ӧ|ɧT-BbA8BZd7Ǎo7OBbe_|f:<$NO/S uM7_D lذg?|$ՇISr9sݻw=N5k֜;ivfddQ<_--ma_KUW]e*,roWZZ~KExhh8IHH388L(eQRRDܪKyvfXh"fuQF x xҙtng.ea0P;)Ps.W:_6manΘO?e4qz;qY;6l:r_ryq9.d1sx!|78 hL##wa(ķcpҌ8 .<˯21R]{K)sӟ>Jw`O|4vhUyzzzg:Fiz!۾}'ЕEEa1PQ=/2K2I,y~c~A^ZF>#>5Yaz[,JqY#r%('('('('(uw|l;}b‘Wxr]=Y9U29,ɠB{!N>̱ ΪDٹ֑^;LUCڙYR2|0?%^c7 2:Qef;l8e 1aIHH.b /QhȘH/--\=Naq1aM ;P&aAb]ȩD^(".2HiZ2FDjS3ND%kċ;6|AZ؋~;}Ӗ) -Z]m8hGz3:%&56-e5䗴啵4ՕV6U4ֵ7x=]ݞގotw3];9gy=3O78<44:c`o9ϝbȊ.jE:;:W^y-_Gca_8tHkט FXzmOY-Xg?ON>e)gp$%Yxx$kxR26g1%333foǽ<l޼YsBnac>̦.BJ)7ĖP ^illr …^u7xSEE7vvWRJWpK,;}EnÓOFƍ1(ڵ5 ua8o_M|CAF`q Si &d?2Nh/2V7lÈ瀡3JnCRT&!a @`3?ϵy7`2^ ree55o~Oi,^uvvjM`0%.7=CAܧ:xa6J.W Xa>InskΜy?=}3q:f0דUq<>s}$ҥC0RWc^[[o}رc[lԋ/a@☥C{_MڵM95Ey'OKWq/'֯HLs,_d |~S%z=<$Ȕڼy+O](R7EH7[0H* 2Bk$ws|)F,S҃ `S_~Յ /3~[Wgy4ڼy{٤Сnb_3 M0;iDQt%CjSx-'N,!\o喹s;w.5xXXbG9Ѧ-!p۶ Ků%}@qй\ء қz"H-6:: gǎ]TW\M/ha/_7ر_8a$8,1s a ""˯xpI0O0O0O0O0Zq=Ɔ_9yՓ_8y9# SK3s]ΔRGj>_B@s⠕vf;2 lZsH> h` -b =Fr Q"R> KM0/!BmV\,̴2K k3+'`8LƠ'x;:: 7ÔnYjxxm_|UQQ fm G;q~\\Cl:)gΜc?n,5}54*9ىW}}\,vA)jɟZÎʫ@`J?{%m0,>;H蚣G^1 ?cǎ/Y ;dQ;B1X``Lri‹sJ U, gJ"!>&{߿[?㰰0i8ȦMϜ9KG#GW^~~!-qcpp[ߺMpꫯ-,,~wxW^}*HEE1,jTTZZN B $9,Xtny8{&qtVZ*BxHQC%,MmgJOTZZ:>rxK(p̞9s685+2ԫ` .t S/ dU0Idx 0x5(췵/AP}⣱Lz?rӦ-TAH,x(.ZՃ2>'/jbb2Ʊe&4&1 ڡffvRKyq'O=f]z\ܴvkrkoo|Ǐؼy >…ޚa&<_|:0Z|%a9 'LDV\#KaIi3;'n}3U N*T 1B)8q8CgK#78np#63$( #_w{?.xOo'_=g5U$;s]ftjZUq9* hgr4G493~ڤ3 7VHMNNv$ qɕe&]fo|kKwJ(Umd%F' y'ìm$zşy˟`KB͙˹Z7Į#׼&-kQ l "Duŗ hC˱1  H`LHv2:?28$0Ec.aCegLV GA_N@aZErz3*%:5&=>;)))1mrvx=^o{:66XvvGaytgFgFgzk`[s{@[[9RcE7v=}p™޳fڴ%OwX3w풙52sysfLP_owZgZg{^STU\VќWP]V(Khl^0/(]`Fdsm8k,rͦ,bIϠ$رQݪZJNKd6ِ yuСhy+G)1d܆-~1>7n޷a6BSOBͶF^GeSf/C#<؟6m/tv$F3''xcM3@QaYz׎9ܼzPкŋn޼5)-@N  Y/B[+[9L2;NVDDCQJraFF{}O/xg?knn% a7_L),k,Y`֟(0ǟ!n "OAώ3{FVZMw߃sdek׮̞=O?#W_}m^^﾿bŪo~Yl9[5ˆKp`p"%Z3ΣMMM- KR+V_+TD ɸKE '66ۿ666}ч xMO2*WoT-Ѡ{=w (I8q8~i{{ 7c iYr5s2,Ae<J̓Ks|kp rK4O|O8iYBDHqpQVVA q1ZDܘy=PK߲e>@~9:j 1 , G>$HP_|qfF>*`:bR g_̨ Sj)5O/]hQc)u͚u f[oά 8[oqxͷie >3_da_PcgyD]( jݒʼn C~xh4+j ?ŧw}zk҉7y\EWIzVuu+vhGuBZURjy!-V:):)" D:;M1w֊NL NT<.31"bK.б^`qb0E@=>NL+醀vefg4 C@ՔWTԕ׵6v7v64v7v46wwz=^Onr7[ ::6u{CimmN禖Ɔ^OKOwhh`iӺFϙrM_2i+^;s6.uŜ͏]1wg?}xÝ]#= F-67UU6TTWeddgq|RQLBA!闱MS|/l|q1%)Z#YD3]UB-*"c$-͛:-v^\}]~q wq[?eہ@z]",۴x ̙0awsY<ТEK>g Y!g-"%Y ,~~Q|O<_5kEV,?#Gܹ dddi]Q;XY /ڵ3XQ}B$ÓSC_{+VqK.^EZXfڵ[Yb_g[~#ҿZ`{zz11<~ĺu e"%|FR"8yΝW_ONvƦz_'!?qHmo_>|d-jY@+O2Jf+^SOԞ,dIh>g5k_.Ė^xHA謫gϺFoo)DԩBCOoqx&Ka n\H(P\ (`_uP@SҖ?ƛ?8p>cOs۶Tgݻ9snbhә!7nW< =cz'y}hɓRg?3<<;W_m^jG2q鍊npK2N?_177hx7Q8p "KS09ر???I$V+?}?!%t1qt:*%PKK-< riWu7ܱc6LGu=Ojѻeu+))iCQ]D\:HnڴO>ۻŋ'b!bf Se Z@pzz~݊*# ~ϟ\pc6%,^o? sz5cF< cnxщ{\: O{TJH5KcxFE !ʯ,E'3GW4h/e6G@ȷuYNcHp .|yF3-fx\鄔`<eAā޷//N0EE%İߴi383d: &3V{W^y9..[w=v>:gywxKiy0ƒ,`cD Љ|[yn6mIShڍ7_fӧƏ79 |0P&_|,HqI LJz5晽ϝ;KxbIg93eK`i~20_ +:Xx"X/-_fee5ea;-s_1>0*2ٕC>ܦ a0E@p[tg NRo^7rEaFxoDK6y(K5lxu7" ;T("[nG$xE^J _y5=<&jE; ;jNӻ';PfN#ȕ^QH-v@W$9K]:b HN6k ҭ37m8謆de; Ϊd{HފI*@:o備G]hcf.32o`egX8k=m⺼윪ʔԒGQlRay 5hFeMP@zTr͜棛me[btB"¢;Шl:Rgb̕SqK@3'6P[4)f`-],`+)υ,!Sk=Ƕn*^q &LvC |Ѳ&/((9s6KGnYhi"CE2Kuu O+Iٵkk֬/"JfYSaF C|ǎ]Yv&WW !;* *> ;zKn{Q`eΪ1 ¢,ɢ#GX \lZ$R,IYSvŊU,Gi VV4.\8:UP,ֻСO<]6)F+%KeȄ$lٲJ,pEi/gԨG'N>-mmݻǍŋ^ fvv.i iD&8c+¬CN7{,YP/WǀPTD;֦Yiiԅeǎ=kl ضm{VVθqQ8uYsCall<EȜ9?@//Z$22ZL0/XpBG|ѓ+ās?O}`{D+izopbPLhggiC?97|+4q _&708U`>|d E$fcD##34 IshSI@**O7洶{x`YƛFT{ eM}yi >Ce##qDCbVA D4 3{سC͙3hSQFFrO41mE[K j5 ԩt̺OkL_Yf\wT2W06h޾{K,pLt8yhjط?̗5+Y2!ݶmu1eaF.g#˜YДߐ__'8(aZKCSmwcmgCu7u7v5t4yVk;;6xunjjnkp t  Nw{k`]==wgk98:725:gccxgpkcƴgO;C=ΚҦZWz3$ D9&EEIC@DfJא*M&&Wdn TbCNIWAr+5Ȥб> RWmоWMЂ}ms vrL|.#6ư_c.zӖ'7lzbƽkYv;[uҍl0tyZaUa-Xk!ײJˡonYpƕ\ڬ3nXhH`M2reن*>W!Bq(b!-o2KknI*BNAF) {ܪQ,;1R{(yR5 6[+>5· s~4,Rd'eL 2שׂ [~E<:I8hA;B@'j"3%"A2Kǟxzbo X"beAr$)k[;KѷuXPFȵSY+n#!e d[YUKEH0ΒUY@S:NY2B[IS2JSPVvl@&P.'YQRP]$AY 5ŭԮ4BLQ$!!j=qƤ). rUV:*\2!M*hJc[}E(%ոq㋊J}aQj vE@r9\:$[r1=k֜| 92Wn#GFF ́)!!U\iJKv]!!aO>y>ؾ}Gy=,etH[$+ni2W[P"]\r";!W2qZL[2ekɕ@rhsmt52hKT\q%Qd*NhPV [ nW,#AAB)p+9vK NFБ\!i* -AG,5\YRŭ~7''oQQ1zR$v%vX9I$j+:&@'QCZĭ "Rd FGglTP-U+Gnߒ+ާ\?i5ͶiWGZh W }l| U~O (nw(r@_ qO JpUMvY]q)s\YX\uVYUvWrU; n%QBj@6If$$##dQbBvYA, !-RtH+WY[ʕ+BJ]s͵D>A>A>A>A>A>\u]]63]w^mu{<p=̜ҌJQ(w8]}qhkF(*9a3m,β}v: ֹi5IjR謌w'%&%NpV$8*$qI(\ݬ[[b8sNҨHsBoqe-W!p#8Le3ҢEڪ >’DLȶ hDBnIDDD冊\v4ovf a9bMp ä;+c-2:JʆESE-8'ıla؂:sHD9%<+,*/20&бf rDW m%:YRhN$7QʮM˩Kϩ̩ɭϫ+ȫ+#]_P_]iqtv vvyNwGn5y[uխT5TW4VՙkesUEkMeNn65{[[;ZZnwhm6-=^Yf NnEv{kem¢캴WVuZVmJ:OJM/KI+MJ)I0(Kp''&'%8K㒋ħr:ȱZ Lz dK R̐,Y >ai0\J6ꔰ+B3:4 Qf9EI|skKXzc;vy~^nϪ5;WھlEK6,Z~ނս&NU?$3Oj^0GN>r@D*vYzERf6;&O2w۷ONQSytmݮ v]'_ᙐy]7qE\{u>R%C Ǐ={u]:w;ng<}x﬑y9YY9.<WW8eHvU:Ҁ^BCʏj.%>5>Æv@fHjTߔr:p⠵ӹ~堀0=V64@,#L(MX|VN(0۟/1I"pA2F8¦t>0dx nC}'4t]Jj6-E3CrMhʭ58[[ʼn~?Vn42l*b||T|ID|QXLAht!UGSvt\uTB}[/03%,cacr| opê8k୽:8@:Y(MtƔjgFujv+Aggg4d6d5f444z;]^OkgkSG[knjp׶VU4֚5ee%Օe U卆.o,o./k(wWVvTVz++ګ++*Z*[k=-֖͞ΆzwCuc3wh3 tuvvvttuյU77d]fV+252%ҙUl1'$%gI\RaLRQ\r1 ]c[^ta2-NL I"[ l:I 6,˗&UXLEs%djDF*bж$0 pfm[aL[YcXگ1H@߼<7]g py A{PEZ .v oi Ղ" -7(NO oLLLLLǥǏdɒoowϘ˞=Ē*r2JS3J\e46g@F@1{R3/e mgmmU6w͉gl,6ѐ>Z̲gn ]:H3.<.ב@dnD\ad!|nEL9#Qt6lr9U#44iκbsCm—q,py,q>U8l`!rXs g-q 5ù;t$Wl@Ҩ^; 5$2;,:[#,B9s$W"uZ#8LDkbJv@:5Ω2t]I7 ɯ+hih𘣜Os#Ww}]{c 5547766WTVWQmnr4546x{f_4{9Μ>SW^[ZU\RR_[ٵiYΌt>; *R/+ z m\ΓJ2)0PG8FES#2h5W@1x`qj2qn3}'\N@[[MljZ@aiC@?cב[M[ ~޵_nջ=}A:+ÀSPl?ez?o " Lq NyfF?A>A>A>A>+((w;&w]__iʆ,C@s-KI)iQb|ӼͷنUftzcJ7 dϮԬgF#&N'V&T\;0<b&[ [HB,ְ %z9]TlO6sEԎ&vʑC9TJD,lБtD|6jgtLRm[\C[ˢGMֱZd->"R?-ârC g9`6>_N@v@ۤs`::`÷ڙYUUʪM6%gdefե4f:S[㩫TWWךtUe[UykUUkEUKyESiYSYy EJJJK r JZ;k)\nNh ̝9mEsgvvzښTTVVTܔ_Sce=YUfsz#Mщg?mghajCBÍ^*ly`YN"/oS#h?FdvqЗ QqұD#VdЂ,\cXگ1w:yS`Ӗ7[k轫Yz;,۲p͝/xGvϰ+i ~h{߻C>P]" @Gp>|ȑ1\\\\\kƛ}q|}OQQa#; /*="U^nu"&hXڜ>6>nLhK@gs9\m]-$Thxgs4G?s -c# 5֜!L*Z6ҵĊrl0 /is& E{}ͪG^J@qV@ hv@ڗ[s00f*H"X-4ٰQ-1EhR=/ c| Q8 7oJ }֙a1y"C1GXGVھ7A4$c hGz3dYu醀nJire7d56*ܕee-UUjoEE{eE{EYm%e-ť-E%-EM9|4m-UƦzOmMkk;7wt@i3 Mjoni(/k,(l)hʫOϮqeVd9̙6Ii4<ٰ>hjZʭjpE@$E@Z1˓Y>4}۷Ra;0F&L$f[+&9U| NqЌsAGhkK{޾覭F?fYjE@/X~UݽAc; ~dpR?mq&h " LaT " EpnpM߬uMJ wy~pob <-0+25ԙZV@@}Щ >4?\%Aj.sE@gЎzd 6m(g\謺#[ۙBtlӬ$ě7 DdkSi/2,2ޜ>dgk[_75 $H h>,#, $ТK6Ah lYB`EdzILrE*yFm6_6A"A"ѐHC.Dlh?l(X:6lY E@E@k4WC@62929ґQbhjWVm*nHiJnHio)hY%E-EMyť%emE%-\ۋZ KB~QK^aSNASv~cF^CF^}Z^Cz]X\YVWZS=oY#IDATz:ښ< ޺Ҧº쪔rtF{yR*%&%Mji&A餚@M@cIR"jmv [OvpNW%WC"LH,28W$ݐ@I ư_c\B@stGC3آ}2;z2~q c-亍OZ}]vϪ{Kn^h[3:!H@oy~hzz]GoM=x?" " _Ngwŕ,A t}/!4=ŹRK)ʼn΂dWajz+z`ZE9G@J:>_J@8ϵlÑސQj\Z69&!"!"8;'T9>"Y̭Xi݂@iI$$NDF7]$.ʣ"K"K-7dm)9@;E+ @S6lX݈DT\ CFEKUD\E@W$a_56QUcWMͮIɪ6JgצiuMO䮫mnoi-*-)i..i-(n+̮veVa!:)ls6\418!8Q\`ޯh׸#Dy&F > &&qy:>}bugfH/gmH1Fh@i6l$D \1-*$$l^tB1E@<m6P o )~q mM[ݰo}\׬b-zc+v,}l⥛D@Ϟgf,wy~zrQ" " " k߬Cf]︃_?FSG?'<",Hr&'8Ji)zIU4?2 l* ) ))Mhrd4$e$YpUjGJUrJUE@5h6lhkqlbY2%㠍*צ uX'W\B꼘CwGTsIa3GUDwDD䄘ӍAt>Bͫ"c|h,HlaXt~hdԈ쩔ȉ:*ԥZ[GpKAqH6'iFBC|ts ⶡaERe[hrlrY 2t3 pUG^6hh:9$2 qjY BbrZl=95'ܼ} _PbDYRT VMvͩЙ"]>=ѩ}Zg(}i?̻ SkY5NkcuNACyU{]>);6'>3.#:=ʕYL$WUlam.Np$:Jxz".ym Qf'kb8fźL+ҦE@?c(@Y:J۷PGdp",dNbF2h/2ǚcC謩S) ShL1E\tl )گ7.!njk?|?۳jkv-[m򭋗m^xüf]Gp[ADADADAC@soXDÕZRRH-q%:2ʜZCפ3ڙQbPY ))MΌFGF3Α^pгIT$Tz֦ؤR\cy %q37!T;+c>`ߚ"F:RDh&qQqf˭ExㆬE#; ɛaFFFDBDy)rQ4E :}Qq2k]f[a]JJmD "WKK£ " %;9,5.ZeIS h֫ #(?$,*?$<ǜ!k7 ]hgk[6%hj/aQ:2v[oF醀jUc$2܌ .-e@ϨNΨJ Qʪ,hʯOϪLϪ̩Ȯ.l P7nXEk2Y2d|!@lRw+V$J, {6 EԂ@βH")ߍ&e#lm'ircXfIag"{pE1hy]\y ylB*Bߎ5^&H@DADADAĿ X; Irf'8S^H/sWWY5ڔgF3"M"96Y/̬w޹ ֶ+ЉgnK.N@:6G%q6 ~B9ɜ>=❁!` KְE24h\Ato_"4"wͺhsY˳ (:#7:FL̚"^&h?[WHK\3 ENmA")HEf5Ykmg)H@Y^6tsxdxgveZ6tA!dyW1 ma߭-00%4i.&;(KN)rSk2]1tʁC=h@:Zd lrP+]u05"cbnItR"GSV%TP ƸJB8e%(1l#0x4 fa$f1(7ưAK@o@yKo]ؖ6_~cDADADADA;էD'gYtUtZ}ڛFk\)u^{9mW&gE&͑fCtw6SɆN,7X%ērH@0ll[k@b ͫ -f]}SwC#{q3ED@> B|E:YQ֖gEU!1$4gjVڷp18iP-A@jq2n_v9H@sAeMc hmo64_dІ#-lI$pEtRze״ lY9\)%IF%fmAk@Qh/}z"c{$3a?,nV ElFD=eCj` "Dj ƙq(b9YXa]q e?^zM@/ZI9+tADADADA|{3tRV2' :"i5lsf. Wvyi>g6dٙQOڑ" o\9hs@l9y#&}7H@ڴc0c &F'FYP_5#WGk щ֩Ya>52"b31bAhdN,c&7l&W&$sd>*_~HYt\Bۂ5c)5t$NZ/W4/NK4h+z$9iE0}mE5?fbZ#MQ wMC9?TBԳhn拻 ߹l6,&t -eݒ.fa֋mRU(?8hDy>{߮gAL.G&;lpYc(c!dGW~lrHhe6[#@M&VAc6l޿fg+^zU;yM39+;GtADADADA|p]?D'e':R*\U\-Y]S2rs,ڰcM Š1샮+ЕW$"b he΋o @{ `YcH9FFbkDZEbKCEr_˦`M/ѯY!S$".E:>0\m йfǴ[aC ,&Wlty` ,~ټlb@9L &,Z8h1MJ90O5s"MrKhyP$L2Zi࢚aBmIiht -fwVcNL-OH-O)5p5.dĎ!ц+HskECqӺ?@#4* rAE- ĺq܊%-.+6 kJ X1KDP!}HP#DP[(g0Jymh2F\|úaz7_qa=+V~lN^d+tADADADA|p]?&&&9.sE@WXtuJF ݘʬKɬuf])8&G&bD@V6.#->,YJpTO.G68Lc _b'$ԭ$^uZ9sd5'2# *ma3 e;amȆJZtXtoq&> 6l mi_ܹl>z]tE7gMJ-y4#-SڑM2=Ѷ}`CHl|@K+0/] l&ᩳ#r"sbrcbbc,:RZ`9hmVŕw2>bqb_w6Emld`!lKlJZrmyem^G[LL"1*HXeI_rM I4P?JmW+PA2 c`g vZeRS>& k)/ԳTig17y>u %-nطbna]ܹtVn_pƹ Ξzd oH" " " "?v%9ei\}; mN6'ol:əl`MjӪNL5o 4pVw&,C@G'YPYb!;ccͼc J56DuLj\[BJR6Ɇ5o P:3Qf^ef`E@f9$2+<:? }8·wbN~ٶPiQzy9#:Y1Ee谘->X; Umаl. .mq ojNܠu4K谋# ' G =f4WOlُ\,ZL⑹hӁԳ8gnE4ss: c ۹,$tdbl@ҁ©ReO'%xBO&&f >} k45A;Y݌GHO1iʂ]"v>OAF>F&mȂ"|d=!1)4}T m ?ޱxٖEK7/\iu+: " " " VKtIrjUL-OI7@;jWf]Zf}ZV!jS2k5shvd6'g4:,X: drXHJHtV$]J@'Xo mb5|bLBqlRiJ @iʢˢۓA?Hz! qq m1چK1'`7z@r3pH|adurt~Xt^hTnhDNHa`C"Ì mZ.7"sC#sC"sgeWPLEN Fى152'"0:P1cGِ!6 ڔA'} ֹxc ¢6m4dqjDs">h@c c ΎΉ5*.?RZbuaoK03DMg[_s`kq[t?  p)/qQQ!fK{xtnӴ(Y$Mѝ\jz 4Gɝ09qJ$0%I3M 2+;I ,8Y2+vI!C-b ڔ i[_ @@vCE]cF&ØyxZB"&O %ҾKY l\^f:cي`񲭋nYxܹf^3:s A: " " " >`ϽN NHKt$*i)JWfu ȨPʬM7K˪KͪIͨvf83ͱtzUu:2,UL1HNL,HB".T&&F .٧Ц$)5#R>"#b ­_œԢūEZ01ãf|AjaMnbs̅C9L ϝiU, "6OLajD֤ɡ$, :ǬŒM`VhTvxو-X*ZAqCfܿuZ'lXq ̩f7g-bVLSి; !mv FgA[2AB0Mk| -h3\ˎmDy`Nȷ`Nذ6|::&z_eBɄxxsAO ہE>?y&JxB8h0ac$';'MvNvbt Zى(Ov."-+WmS\i$B]SB\SCBBցE},؎ 6[Ԁ i nÃSưa_-W%?19QY5\%Wۻ|.A۟<뢥[.%$KhuHtX aJlqЂMC@xgOI2m6mhA?ShmO"RAЅ#*D@Oʉ*"VW;٢N̨HgX[%tWҡQFYffaxUʿ8ۜlX7c i}Ф )5Dn~;H@+br; <1ʗЁh{!?;KEƻT=e%i#҄&('^fso;3LQ>5su[U_nn}FtMRlZ@z(954%9;]^ڌ5&}%/K*ft--ͼy[akа¥:o>NhcNq70:1\ 6$he D@>wSqp2|-A=6(#m@@h`3]$PNn#mͺ2.!o7_f0 `0 kʕo8tERpz84 WHh+\xСX;!a 5[3gvz0.8AƠ %6JHkfmTX@gb{7 ,fPE$9M"-B1iO.7&ŋbH&\:8$3E.Y]؝jERc˦͖RR 4h952nP|f6}"x\K˵e:.diʧ:9$IF$i&h$K7+t-_F [4AxVEP "-TQ2ugpG@SZd 8  ~ަl 4K=& ϞOc+ }h9DF}|.it3'~ t==.l?Ga Og L!#Я3lqT@wap8A @@㌣F2L<6<ŧYWFgo(l~-g& `0  n hi4rK@'0&s. 顩vP@"-d~LaY/bP"k0rh_,`=fVh& $y:rA@Ng: &6%2ЭP)}{2BoW^(gM np]4b}I i M[E  4y!x.E3nɠ/J m6)b|kY-FJ OQȣb4Yư@(k$8qh3; *|wˤY!r6Kl<+*꜇ P?Ðf7f#=D q H7OU)(b9$5,'y1.54@Ns1(GHeMx\(yj2|wA<8-ŚOCXp: QxaLg ?l\|KivW̼Wo߿|sgT@0`0 `0 W+s hg[x_Gf751[AЪ=CzH@7 21=)cC4;qQ@r3Du>QPih"kahr` Mف6hu"Ai")M{ɗ[6j;gHf3n8h|N#@OlFp 5J-4t`̱;JF"I(4trAgIJrЗ hj5 rX+#7P: j-T1w%!tL*3~y/jJo#7u;7ay;⢘-`O:a`0 `0"kOG¨1 b(sc }FʿAaFΝr+B ei<2 2 )V.BK@gNe+i26BgR3z7.N *q@ҧ]w@cẌ́4ڀۆ:ph4;Ԧ([ Ё2P/TSR\ 2$t[J@@YgJS@ iMX=# SӅ\z@r{7\m̸֯)2?acCF{ 1^JpH1hZq9(p(Ш׌Zk[tT^XFh?'m@ |p0elNHVt`9h?/,pf]pA o?xuGO?z{C& `0 {]!¨v#^q/O/L4CSg,Ѕ@X@7[a̍%n;?ZFˌ[9Q@+ i:bw l+G`2X&FkF$J!h,]0z7Asc0ҍ|u(u/R׼XeS r},e /1$IqUgHr*a<%$[Y, w4p^.<ēnTH$@ZwQI!ijaX@8}is#0F4#W56w C] 2Jgz07Os_@ue\g݃x/߽' `0 `|M|Z?G=8 P^,_G^i/M-N4lSnQ@Cϖ; ̦9C@35La hIAnˌ@9iehtƀL CXi*eq"^;4 b5#V&(ͼkB:&7i iF0 [HiՅk. ^]a\L4-'mRlnU/b n¢)OJezY)CW'w@ISLRpH"he($TKL^G@E@SA8hFdjIк颀nt$HPI VϪUA *t,u3!2/rcn~/O~F2@6痧ܸ '?ABpL;n8kfΨfިS$dBȏj~C8qR-oM Q=zN璼$Ȉq^2R|"ESnf.tI?磤[ۉH:&56T) rB%E[ P7(lVG< 3v& Du08S"^5P `0 `|MO|Zͪް#b.SM0&}՚uiS ŸIܘ:7lyæ7\"On  $o5ÜeQ(C(Q:bFL ,JlΈլX>BKLsq@v3RwJzV 2"*J@ Ք jzaAX1@ôSP@Í])ư):!xi>޶=,K¥zƻ͈DrLSGn:'6߹bS>Bm&C@c~4ۜFB+ˀX"bY)j@5t ltKf"@VjVJE&)5 :$d|֝a'?'up#_UnxS0iKKS`zd9toLwG*'lAv~)N3|:G*7ܤi$\t Y(MqOC$Dʏ68' HF/b /#{NWҍp^cOV=971EhI ?Uϟ~Af,zzgma3\?-gN؊ZADf]p/z/v? z?0w:ixG/?;x{o\X4`0 `0_> hɏ9" #od6ܦ6(nLÜIt 9(3@ktPOzlKjh–P@M&ܨ1A]jRL/20GP@c" ģX/H05 Rd1u}O a4ܕNI.hgދADO8D.;]Ց2x+w%8F'sєŻ +N"cwdK3@dhʇm7r5(G {XԲp6GT ~L@\лC?|sG7_>x'}˝ "e`0 `0oi hfy$)#7ܰ-IAx0/L\*[IЃA;æ;r64 ڌ(fq(z0f2I:G"Mfh4MG3'F=rr>7NB_l=N98p 6CORo,#m1lTm&8m$ 1ΨF:%( bQ%Dm1M@#+I"jV3j=M j5("#rMReơb [q^ГV~4;5}3$g4Xh馃.d&Y鎣}qB'hJ(.4F^9?J1qç IvI8dF4Ǣz,'bf2N 'rN : p..I8;3:ppp̈ʪ@OÉm@ ֖wN 8fgf 50Dq8` 7Џ @"8ζ% c@3]}֝B ~^A`Vz!:HSƉEwaI8>s6s~G ÓoW'g Rp0`0 `0 WEM -.M`tjOr@cK3Q1F.@ M7$f&YBS L hMD@뤙J@+d6OHZDW>A!a(|3J,p'V3B%  q>.0b +w*1ݨtqK3GWR[B: N Ұ8` 5Tʓ,DS ">ڛS"j}⅂6,t`àGC&0(;h<]0Hđ!8ef 7NlƵ %@}!:Bͤ0iƌBi-I7r|y&W&<竳AD3je JhDFY@ &^Y`X§$K8Q23Jb!ɻ'Shҏ%[Z쌙OQΎ10xo"I)3Lgxw*\O)} uј't"V\{h}V^ ,ck~0g2[ &l}Ƒoͺ_ۭ_13l8~4`0 `0 k~SFr@5s4"I j|qϟ \i2W&b"/$0u5{jhn6ɿA^lӃP@!_Ѐl~E'aшbIf3鄤IA,3VHFh*,Yʏ+bi} j_Fn@)[ ֵiHL5.*3hv xJvmHYfofb:/T,Tx +&ZA(2^51CF; ;h^":- hn](`Գ\!1B)+,ݒ ܘSJ7PjzX[WI2,(eJgһXn{Hg![#@ MW#ilU{P1I2(/&2s޹ 髎rI. @g9jwr~4RfVmkM?-{Z:6kls{5YfdZԎFM.n/@@ B [i+Q@ >g=@,N,0qBA= P> ^Hu9Pk|>H'O>}a} `0 `|UO|Zͪ48h%X4Y(N(s\: h8m?+r#$I=2a%D@iIaPh7/V! 2A~z$)8hh阆4M!T22$vVg(pa}.lRDZS+;hV /=gGa  5ؒKt[JxtScJ&joF@:H"irQtxP@ *_S(J( %HRoz Qd@J(E8WCt`؏Zt\uP rRgԽX],ڻT]BoҷʴYԭDs43N;d|֜=L&LIb $e{ƙhh<9sH:9"vWOkbm]yLCk\<0/Fcls܎ –yT_J胝ܵ.=bq;#ι|:T2VJzb˒mHjhF3wӵ*a - `r*Q@tQItД7f]p/tq|\$/߼^>{.Ex4Gnrf0 `0 RfT4W1 9N~+JҤ_ -MI^iOwFR&,"zMw@a 4GX@kΘa;P?42PZnjLe@V#l h$8z:H[ƜRȂR=+TrJ1⠳rs!A%LLPOk&4F=\D-M"1S.QwܴfR mhZf* l%I'm$4Lre@\"p$W5IWM{N Uz3@P/B'U>K4^p91e>;܂^ @S*$ 3T&R*q٦RFl h4,5Mr&+2}rMr` wz(u/ӤܳX[-ַT{ʽKXmҷTY M竳n+4惶r; ޘ( lI!k`*d40b;]d@/|$}hLZQގsNg숸1'[Ӈoʱ|l,j zcjҞ/m}~K_-ia_^}q1{|;on- `0 `|%ݏI^Vn΀ 9`q c4 8@3rL'%Hq''0&@Hȳ;nd@-+&P@'bID>H4$)8Zi [/"YJtD"(͌H M&bUW@WS~eI0uz|% RJK XN[-։琀&vEDL Hf@8:(ڀOr"Mz 5Hp[M&axEsвuOpXLEjfJɒxg &DIrMTgDwL-v~/O|F:c3e^ת}+jjڿZ_ WD{ b[̹H.@:P]?4M1Lh0aџa\4+vP|,LI3 Ij̸2=-]sa"Po.X 9G{zcG_؁45C])MZ$e  Jh}0GM O/Q Tr2[c$N0:,ۆ1gD̅` ՍrN4iGm4E[6vߥ"7^@^>y~xr/f0 `0 +$5y h#p^q Y~>OebhAV&8ptDGH2КE41D@*DZ{J(I\05}T׈iT@7tX@};@@#2LHfؘBxf3/TS/A-k [;{%dA.3hɂYOh;DGӘ\QSnqP e\i sz^ALr](6 9r#_Εo +7#ל&r8qL4I>; ]8@@#\΋ĝθ+Q+ic{q\1wezO[їw={aמ߶vmsfil;}fӘ1{[x'Ɣ8WH'|>f]e^ł%Y j6 pF5HRW"ס 5IJbE 㭘KY 92&EDٚdLt t hL0ɶ$0ANh:!G'R+??.m ;gh[734 `0 `|-`tK@0 4Qnq_w h;7\* &9hDչptpFUch4$JYF7P@@zsBQU0ΪX!:+T.>$%8ht /TJC@@e @9F̪A,[jF4P(,ipL5:Ap:it{Q@#x4H?(;Hqpa&)P1>dM%GwGP=<м<t&θK:~bPo<חw]c|&7v=kqZصv]kfjs3;ܾxjXK;ݔ5N/I>5aCw`3HzF2byڻlHŌX`XUGͿ3&ik_Hd4u ac5\,~$GWHrd9ôY?.m ߞ:^@鋓? {ny;!d0 `0 #9^ь Uϗ h8ܠ[$YBz"X/hD@[$bE qLBthϔ2l hY{g[Z-h"JD@R=+_ dn0_ho\%Iݖ=MX "8,ڦ),ZnI4)mhknwt6Si):Et)sә4PA0̠z es\~=5t שMs`L&FI閕A~ԜVnOq`:%&:Gf-)ÒwxM&xLX4zg_N7ʱ8PƞmP}n}}~Oo &j=ynWoڋ.IDZczjwo\X嵺l (1:W8IkZM+XbRJ׹FpB\ %. ` `S(G4PN$x܎q<ë&9ۇ4f]p.O`/Rm7lB`0 `0.he~=ρK-&ڥl9,|*!& ~W@P? @:C n!}h 4ѯ4Y2d>R-pQыJY 5k^^4&-/&95. '6t@ϭ.k8غ?^@h_(z?%M<5a(40Zr2A3hf8N{СKQ&p\ P2) tFD4<;f']>k1#;qMq5Y,3ϝƎ8tfƑpoi,'ph,®+/G¹s¶m,lZHYݷ6vJ~:-Rj hDw wP$YjEIT䚤tRUa/Wy"Y+RTXnŒ6  B0sKK؃Q4 K8cF>0a&l[~B "" hebA4OIL4+48@@et_.D@[⩀&L+s8gzoы(pYă,B_i"+D@ U^e$|Q@ }\m9wa\П!%^6sd"YH3ߊTc3()V~¦s:d"L: WQ:8 ]3ū[9bq⠀NKuhLS-G՘I}u/ǼKeiG2gw=nvhqhY9t[w=gi ⾽m5޹fP[:oyc0#)AT!4& 0{RbZ!QK1K5#= $T@ 0_0f"/ `|v%sQKߕt"K97&y_cGO1 h`0 `0VOINVniA,ɏz:!MtK@1fs;s/;úK4@a9WπB!.AhIS"njI В=lnAe TYV4er^(-)2}2@cآ岅Y/gAeF^C{.4hje$> hz\@E`%lH r;[ /m-6 ,$iK^(dj ^y-6]3QYTP@ hB6e]2 8iR.@ 2ݢnFP7#p 7YɊ4G &A__Cw〈tmI=:hzZe4mC}cݳ"{yh=wƐD(¡K&%.1~5G.pd5aڬN~\лo/_xɳώ[iQC5j !F„!?$'kJxڏs. HԺ7ŵX5'^ZP3̦:m4.7v=mjsd揵m!#]zg =G"jCQ3n&9.꡿~歝>VNƞR3Ua}٣u޴ӫx=ѣʽRmɞ}-퍿ګGgW,-/UErmB3FΠ`B~BF a+-Qa$G9S7ҩxze걄(EFe^=yv1gG4k7_ޘ h`0 `0&Wwڴ{MhbmC?~n4_+^e+Ox x)p SЦ7g44)-\d MEs,?'h؅-)8Ao h̡Aq=CEM"{P@SuFBZeTGJ=Y:_}/ 5(e h5&A-WKNyT7.^~?^@xAWzS2D &j0W+MJ3 ͳLΘ/ϔj(ШáX 0lQ:yI3;c35 .4V!0<a c?(|:R]Q33j ˈ{GZcS%z+,Y% o[6;jcǚN~Z]]J$iu~?w9?u-7~#r?il q~Cn}~cwV^׍/ݢ^UuD)va7ܽyj<7N|(_?rrg~9+-oeSXKeʒү#5($$A@h hQk?&hD@! ŸMHnY\.bz3 &AT{hNg* 1脚%]ejVJ=)zP/TP7FA5 z4lN6S.7m~o/8/i3xJ[ @m- B{tbu\o+$S3;Wzk@o PPC-NiΰJ7P=; [-h,ٯMo{k XKH?F-®<6tVt!kliӛ7;S1%]ү*qs4_OyQuшz5bdsSʾ~R1[>ɭNk:'Y=V-=^SnddG 7[r-3tGゥ>ߙ/{iw<%S v IJK54"&`RZ*gd0a07U"lw;& `0 :LY,݆C4MaCqIЌtSNni$F C hRp5gT'iiVزnC(a+}M̾ 4}Т+M %_TW{;7tFfZ(ڰS݇+J7.Aڲ`@?%?x;wl߼zSX h`0 `0|w?y;?haK@Q@QMtsT@ӄa7>Mٗ`Wwa h$ƙgRSsLr474 BqoVP|R5м@L.$tm$RM{(ZVf.|19&ɿ[@p65SK75|z%x/ a 'j(urیzr0D SLaϘ(a 44F7@TҰE%)Lyj8h:a!D\*%*쑭^U*լ^TTD 8Y`/$ ]R!r1.JYjRTE3B)ɥRFZF )G}! F(y'L@i_ۿ~yW?>}~'wwo}}[/&֣L@3 `0 qodԲLU~A!.(nh0'hI3gb,ЈfSwh<)R2ܴT@JTz:έB_V!N4PjYAt A"ND@gYfnAEMDMi1DSp40lhTq}1JA)8iPӤs}@io'ʹO4ʶ;,PFBjIˌ\,o\5 gɑQjz0D|SC{)x#_)V"|<4?!آvShqYc@FY ( Qa` G3H 1EN8gO49>My2V6s-Гtj5'7;¡:mz&ZSox[ov7{CgpW2%GSZMˊVN[{4|$VSrUHƛН2Rr!3'%RBMT!P(eIJ WEq{Ȍ0+3caȹѤMXI^M@/gN&h($9*^<(Ø'-M8astr-rp[yUY/pA@_G,wYhwO6.7;}ãǏ_7`7s#N8h%jh4tL4PhQ\FLw԰G5kЭQBj4A hLf Qk倦@l֠f c !:@TR$WF.e֌ANKU,G}'fܝ4V[3"i!Y$f7,s zF\>7aW{)a|N.RY+:_r 0J#4ih$f(ҍ" 3*c(Bav4A8Aox!94kC:G'Q@G8+tƭQZ+/ s܎9{-mczKwks2F!i9-?Ɨ::HD9n˃wCy~hl;춷k6H+2fV㩷~쯽V"wOc0=sXj^I}#Yfn+'ReQ{JSy+鴟#uAdb*[jJyYO=wf۞yAHdA;Mp\ͮ蹁zFF_.*jx-^(xpH$I`!M)(hQ%+ap.fpFMh֎J"5x.TPB5bVh+ $()~I+a4iZhcnGyxk鼥;9Lm7v](;[ wq[k, G0%XCo_*L>/x8$7.PpOC0k/ò^WZ%Eכ}Wo8^|_[bq$WIRW Vy?V;+$GwQ]J}IKY37%0!LܥsȚ?OcZ=GsF)%szOc.JqnweN~;e+nXnA'{{]>ݩRm% uHLx?-Jycoi[8pw-o^سSkāZ>2G&D2ڲcK⁵t-|qy8ߕ*8?,G6 3P@Ż_~͇g?<}5gGܾMd}5 `0 `|e\rOpRZʋJUUޭCV#t v(FMΡntL9Иd!%Kơ&kǍ,BP@e`dhIġ ` T~)p u L1AcE Y>A!sO ŌE@Ol3m@6_CڞS0$ུT! @@۹}_QnFS*>8G\t aNCOC,6 oLwG$f`@HUHS@ΈP">eμg7-mnSݔgsę0 ܮM>*!){PY8gmZ8qVμino|ΐP3c1?ݺ+CVjJ嚨r3:o8vn%zT\?+l՝LCPLRWco̽Wk^;6>xZt՝ݑʋY.yhL"#x Sԅ-qh͝Z _3 X:k^ܷwƁt5'l%YiK$hQy|`-7'F\y]wόƉp/8?w$ą|,nFy3gl'ҙ\:5c{a^}}tH 5.+q/ grث걶z"/5ԉB#!v'n3?/򥴝Ҥ24Óg 蓻歷3wf0 `0 k3OFhvaau{4p@@_ mb)#D@_\PiQ>:ТڇbF._@H@cg:mNRyD@CJ_V!Ab=sP19P@P!S $y_f19>lP/Ca3`+g@Qlû#ak'(f(ΰlaO%g&Xͱ!- c/&_\@XS@E蹷:Ck;̖8 sqOohD(o [ҖN}i.mOWW#Zgdmy{ϜSkxoo|V?k?Xo/JQUtRRR 0SBF:`]:έ=/:ϋlqڛyYyޛ-k:к"_?7ΜN6S\d җi!ч~. G=Z%m(#-gZ>ї#q/:}P6O[8cB,3{ȝ2'ʽkڲs-9+ʙ?ToƵHҍo2^:1Ƒxl5o۩JC }7DMLҰkCk>|WYjs3o/ž73ǣ$m4\w4>Y/;)8f0 `0 =\&իhvM{pa"JT@C F=&4` h&Q!(In *a7P8h4Ԉb hp[4нY<Ik\_AS|.zzSzRM] 5#sa3>'/Rڼ?[g4N{`8 3hsr7N$b㌴@[ 3q(E3E@NQh]PA8xs'A)8q5wt@@+soU=qfGݵv7$YSii/D:ёThdtaQ8 rm&S:#-οʝ +&rZkcwiZ/dKKl%;ua vh;Ie+p񋓧Ht+4wi[wݼv}5 `0 `|e\}\Z ilrJLt î-1zДl$m.Ѐ|Q@#"݊1k6c3-&  X9][rF Z h>*3栃 )M}.7@=`eZ*F/آFmycMPCy6׌B C\'@%gx:=ꬡh$bx  ~q.m}-j\W;deB1w̿涔]d/sTacO?l(wtK2:nG1ܷjlKq_!8|mVVM$UZ^=)}7M*ٔ=PzL>)T7iJ+#ޝ2tMIe@-HDҞҽ$rZ]o̿1neY]DH,.] 3cdX>`;0-^g"nX7ZsSq7ɑfWB|U: ;ҙMHdROKskXY߈DGT>sƧ\c1XQL`F3xOms)7r;R5.O[o.~{4Sp>syMm7i_]@?~I|˳ g(˛[^Nݸ4`0 `0_*IZUha`:3hX4(`0i4M1˟0Va9=dأMKhAŌ>"|;#cg} ,E,B(j+6\7 :h^(tqfr,ZFLAPK YhFtHg(|.9mX=#D٢`v#Äs@Tw@m$ G]tzkFAVN0(f@3 *Ebqn oLsFtwnnvjk$4u3M5j?]{rc˚٢J>ȳ;c4tC˼zMQvʝk?|c2*_S)b"-S].SƮ|Phb>έ+d`B4Ѥ)ߋQYizfx[9Q@uWS +l$݊TXK*ڑIp^d!1 W<~W\=nI(Ekj-+2p;! c>yۙ.Fb2I+1RLeٝݶ{ʡx? }x#U]si__TGs ?\.ti88{ܚ|h.}X'_PH||h,n)w2ݱ.;וǒ~*5ιvbϻՙЮAoP7JKh_GZ,n|>EL@ɫ{?9|x᳣O=ܻ`[W7^f2 `0 Uq+?|}WrQRkޭݪKpS@ctK@5I4:hzg M|#h [wVA ˸$M= d@(JZ 6ʿO $ G)-ƅd654qǨ2@-d*"A+ 4T8J'P|)ĺ٢:8LРM@ׁ j '@2\0Kmo-\2#1G@܄7j])H. PnYiFB,6g f4 b 4ѹX1P:" 6E "=ea˜fwܦ:%Aͦ8pSSj5S?h?GO>m2ZSD9!uT)yL9mNig8|\X;;gtq㣷qR\=qEIJ% "VEkݲ-ieAuf]>Q YW䪤jV3rO֝o۫gѿΧrP*LXZ#fu{dok'ꑱ|RC8-H;kgQa] 0`R~2|GL:^oWƾ1q/isCsyϝ'\%ňcRGx)ލFh][,;]{U\O$D?cca;SmD",&B$E'Rd8O1Lx+ULdSʐ^]g]X:;l53,2q\Be|'G}~G<k/fn1`0 `0 ĕo\nZD=#m9;D@SC=5ngL9M3h p=GW D; rB&P)&C_ S5Q^+hkD`f4σQm=9CcF 0gt./_]ҧwԙ=u~SRgm{mܞ5v5SG.'>p#[j*ٞsyѵSr-F;%8+V[c~/t+Gvfk'hq tQn\7亠jEzPz Z=_[=-iEՂٝԭvڿzL.-e>걵~欞VkY~89"Ws+֭7r?&tw~gʍDҍrV'gDI e~XεmZo qwT_~v]tM{sc񝵼m.mjfjA_a][ɤ>rK;1.:ˇY=qW/й3Jp5;g(uj`/.hw@4F/5YCkZ:HbB9 E}3:zowܵYa,?֚|*єX1o>ܳq[K,3e9dG87QRiTo}о4!UI[-‰K:4\t$$&̔'ʁ8Pgvl2tq9}⹽O~pK- "}|&[фו-'LyIgϽcw\:PW=otl-i {fD )J# 8p0οE}^ &@quWk'֙f0 `0 kt,!\V,jU7u|.>규A"Aj!s;}nFh^j] h4 UfcFr@:I#Sb)X Q-Ti4t52D_&)i:zkkg#~S{9}8"%{ksKBa.ʧ*N<$&~bI8O2N#kYBKֺ״}k@w-.gX'sV\4YGAQ@TIQ@EN(4A>hZ*9H pY9.r!l)@v{ڞOo h:$C[-"\ɓL@[LCX6QdL Wb@p.=k\9:0YsH4ԠF%Z6'tt`q\vM!l hmyۜ ǟƥ js{ܩWFDTJ=8z8\1*p0ȓv2cv-°kן;KG@G(1J9 ޹Z`-u3SjpD3w]>r=qh@%w%.ͽ۳=?yw;yλL@3 `0 qO?|c<JEkjvX@YРH8t?gttࠡ9mF}4k)kA #1΅OD=SK1>GsS@i6OP@!:ɧĒa`p>:i%'\*;`gBI㚱f4ǰC'~|>W&zLaOQ4yXsF09v_52/\,F^fŸEZ9: :RLܑCevߞݲf곛>l9{PJQΖG⾷|⭜_#@:g3Z-VDuYG=`$9ݒ̽7Ҝ J%KJEOokY>7>=46'zmCrnb/.”TbgzZn_՞s&uIHN&\MQ>Dډ>ܦxd,rwWܑ svY8Q7)s✗xƏ pXҭ_/l{5&XҎ E@mOpfW1gtl[;u~<0b4&#NW"ߕ-ʣƎxqb=u- M5t/._oۋ>yy hRxہ^x5yc h`0 `0*Z泹XR* inD~bt&I~eO&zZL R6. h}@hރ,K$2-d4h CX>&:0sAl L',I6zFZT=#mN 耰YʢV9IzwV6aވpiE@)4â$hjboTc1`dBK<3hg46GVz{=,1#S{afHt O3z/K'gk#?͙Mm މsMca'3+[ڥIK4Ʈt*sQ@4>V푬RhAVnQUgT@(B2L &dL;Sꩽ\9sN]{ng9}() %,%Xe%v [_Cwm2+]%$g' &N$]##C1񔓉MY#+wL]80R_.y7A \I7"rO0re"۝HtQ|ZS &x+5:Q+w5w&s|^"':\vP'8覆& ۫ߞdRpܽ-` `0 `|m\>SB>#i:ݧ=5@H !i sP ݰ}.@@M-A,!F=SG!<j7-,ILY4Igkir%3B|b]@b s~w ޥ 0p լR|$*a0?f㗡FVsK++{0ly^ᆛt[p ᕚ9 I<HSCM9#/h0_2:r5%0K\,cA_~V@s{t0hi7;4o^c33p]벮%g+3gyZ=qVNpAMH5((U.*^>E9XjF~Awmola&%R RUi'*ݑ_˻1Fa@^WYʖB9%rERe[kXJ}>I5rBǟzgꙵhKrIމsnvVW{7gaWoD@?j"n\K≲|-Oxm/Dx7aF|,8~wn^gO Zx9MF/gxZ`Q4n @qFL2ACZZ%\  lF@c0A z&97tsns~W~6O.%xy.?:|JsR2\6U{D;# Ct+K^q-\s?acv~O9`)LBb PQ#pGd NA;OpBfn-L/݀@o7ndg~U`H[0nI2P),j\,|]&ɀ\XڷofԾd6xitEu⹳|-X ;D*q~4E`jdsQΈ$l{j7Ʊ|HbQ+މ&bU>ӇesqS]؁f^c7*|6Aǿ$rA@oO_;<ܽuo7n޾u7T@ߎŒL@3 `0 ͕oxBJgsY"[ݺӫ@>h `p,%h4g! T2m\*A$9jhlPI!MDtZ"P@3 ƒ4Lfap-bnChtn'J#cIz7|eu~!mґcΈ SnO8OZ CS{#?alIc6B[ȕJ\fnǡLӬaY"5aƠC֗ITuثf r"Iނ#..m;̞2GSpZbפΫ٫WN&mXsM4ơ?cuč/%w~Z?Җc1Ն}뽻~Z\>)/WO{8{ӟֺSJ]Pj\wZwV'kPLi=LIJ*irqś?ɭ8PGoaAeeNjƮLƾ1\/gѴܝk ?[5-sP[<v#mPNg ߧnP_8Ju7b|< UgD[8WO-r-ЉۙO%|YKt1t5h&K$4;[{o Gҙp^|q4HR3Ïr{򞱸,zw a )fJRDrD@'$]B~o^@ɽA|Ɲw7[1{ h`0 `0&\HprF,JU65G74W6݇mz$F htI3P@c98M@ YF@DR\SYFLntn4F@ *|V ZH;; (࢚xH&nWhrg-W,hK:lihְb  x/q>UjYh^тZȫCZ_m ?&VkH]I%[7zߖVIg)??"{{/کXZekZ^Y㥲(x*fٷGwWw7}ޔkj6tϾ7rw냵kx-&IF7]93V?jKzj.P+nc߸Jߵ})q+Oq7z9x?'tfꮟګ꙱Q_9YqW[DZHdxґ|- t)p8΍r' Ή5= 7|-8f^8NccP[!E7x:)qIN6MW7$~и!޾p{˽[na)8 `0 rwA* JU26~oVfF,ͰPTX@mD@[.1a}FP *;A @9heJjQ 3gZ8OWDRb&;9 )rR AIsm^&/{VRoL06`\@%Yq F(ܸc ,,`ʍ፹ũBmA{sH"1\I1Nv"|ip ŸQ@}j%JŽ6 Cǟ ?^c_\("իHޤ1X9I[mOP@taqn|(.yCw2PF,Kj hx$ቨg>I ВPaoIJ+Ze)+'RB,b&SI)L%0a+3naヷ[_XXPX;!w{'g3EńTʅD6=[:tOScy__SMQPFs0k(&j͍kN3dsH !{ϯ!z/ <>w%0%a(Jo\*":67i~[;VcOy'?Iti.SYm(/}yX5]kqW[ٳVOghd@Hoc_ ןjņf+zOV@H\'K(UdjPkգݼZNLKEJғVjYeYCXKgL))g$d.Ss)(u!Uf0x%,xX(xY[jp'0=L<%n,w$E)3ULTNHpKڑIZ΂sV$]|gҎ8 aAd|QF GO ~vx{+7_||ex ߟ?}?]o?%`0 `0 -W|!/*U5~Q^kѯ[@$9'$Ϳў4e2lyްI8W A,DV }_@ %ܹ9o` L3Z :Kf T+Wb9-SBϖ8j 1R5]P(l/zg#!)8;hS9a|.SMGA-G$ዔR5+t ŁA/>"&<` ΍5S?XiqӃ2I C$+ tBG#cB"?~Е+d$pn4D6I3gН.칍]{~ל'G=evך{ž|譝gʡv䭟rZ\_kGjy^1 "Ƀ7#kZ~]j|(VB1-Dxp:׈)*`eZ*[2Xތ Iz8T%>'9YZa+݂P#.[Lͤau/N:IMGn$x),~& Y~ <8 $Jbr!)D`v'^,BKIX #ኰd* -1Or(V#b/D@'7!yB<P:LV qW/ƹb#}3yt w\ o^|@c(g{zp׫ρէӷ4?ӕoǿ~W7{Wm1 `0 oŕ+P@-)+͕o{>d咨uUOzM߰ tȲfLNnel4)S|FZ^4!ӃzBq>#h4, hG6P3Ѓ B҄΁SFR^b)%KBm mfЁwhS9ad+DĒiUϑKi4h(gI6(çi<`HXV肁ccqANT!]Gcd`8"]uP2\003?b C8g{w!~[=*,ob fnKW(ZM6#9B@o .L{SK i:~ fߋ(T{2yZZ<|D+JC/5r}Rs W$S&G?1 v B+iGlO{H=+簀~޳I&_^zlvN6OOp h`0 `0ӊ}nV%o~zV)Iz]wLheG [+,[.bzC;_";j%yuàzF%9 * j9esZ g@l%LY5bD@c*dx@[4 Z1A@`g{U_P*41I:|q'8`D0G#-`@BK i CT DNTɰ8ThPy,< Y#B7#}53=;}HUnZ 2QPg5-H6 [Go rhˇIn]}_qd?q$e1q$Nl$ffь҈5#feSjƎg_>=]}{Q&PKݟ W_8t%Jq㦑'S3]~kqx Π{O>MñPLV4/b_n%uʐLv()lν+<_ o ? ,|}OО~(@N=a)N?w>\@Y+W^zeYfeYfeYfea4Druoa?GFg78g}2!xкF.tѯpb PLyM /}WzLU? JVii$BE'@X F,MhN q,xuo,ѻY Ҡd]n2@(ʁ˃^z@ hɬ fP`7^W-[ h`Ga;o?wz?] cоt=Ga?A?cO~Jp,yء+pCw=7`xnѹ}pr;g^pf7˞a8!>V;ޛtB`EaIJ|`;>ÉR_ oO kc>K"}O^P 0:G06l~W7lڵ`~t~ck2,2,2,2gJE5oG[tv9{=}gtV kyf35Ѵ3+ _ ~GEy)T=sil+*)T4 0z/Q8JdB=OA`'ӡQ; 2)3 +FL^2^{`'{wM//]=p9P@rEe*/aޕp+W# C\Կ`p_uY'igw?i]3Lg輎 08S% z~ `zYsE t]Fk C%c[oY@8?Y@GY ػ9GBib퀣p\5dv-w^j=[,2,2,2, O@C[7nٮs]:v8k'guy=}52ƙgx5˔Ǿµh̲4l%"fpA@30.TK#^ F=ӑQeڋ0*Ŗ)Z8G$ޙVw`cR+Nu'5p .6*UʡWxp? }mMËK ),DM{lؠ~;W~L|{ZC+ q~ vaQݮ;vٱԎ]w;wftg~Yg~8OutᖁdFؠw Aӛ.B%2ͤɴVҘ(l&wuZ94IM,A; vX[x6qϾMVO׭c%~-2,2,2,2,Pmܶ}{9AY}óz;_A@;w@SBOq< hdh,;SsЬkZr45.Ng +@D_ĖׅQ9eƭ>vs!rh %[⦩ ՝;tG ؒ^`:pЋ ]=w>ENzS1Jaч y0#7h6齽IGz}uٸ{~yoJSwwyo{w7ݏ6ntp;ǿ)%ʪj_ ,|4Cc{jjaXuk8C ,9ckj ?|^1ǻիa)[&k V)eY\@կx޴x ~z] k^U֮^vk&4'{em4oYxSû~7fYxi pmvC;䝐Ӌ>,[le p>O74x^ⷠi/ sn fXo p^E~1svǾ/:G+w tȿS4,zBc&>$o1f+M"8{ZvX8G.%-wX '[ov%Gg^bnÕ+ W\ _1I=|n۷cϑ{{b  CP@߯)p熇` **q h(Yzgy,A!Y wK_]Ռ O5\"uNsb[Q{ h7m_b#exPYGvv:fzj**G`]2q:Rνw^{!W/ʁ˃St{N}e;f+Q>dF 6lDg>{g;H?:>xýo~Cy}:ҷ7{YMzn}o7n3ڲж7:ym}lcحsFg} e=Oz8pל!Mٵ {|E-3ӵހP\4w}B~Wr̥pd1E'ظ-g>zPbqаP`䶹h[Y,\֮]e'M Y>#$]JMac gy4xpA?dԓ V` >zY0ăB5 5pQm?^ +59ώυ1<𬒇{7$&/aL& }+ԠyY&L wؓbR̐^>pL _m({<]*9'oZf)p`+WkUiݪW`WcݪuZYj*p+ NG*tkW17,T.2 ab%,܃1]{ԗK0ENj`|.bIM )gStͺEO>|]azwC>psKy`K-G)LE2[Nbia-Ý^Ë!wzcc~9`+x9hd),qseCfO ڧ%gOݽcye 5o_Wix7o޳c=Gw={{O?C ??G38hsF_Dѯ ~ m~+k^Q@S !O@SmpKÃ_H@zFk4A 53U/Oo9MĎwbؾ]GP‹4ør^.,@Auױ{Nlt]% ?{j(\3p-Aν8nfCA.G ?"㠟#'5迷A~,?>,)Mx}_0ua-\,mm?}DZm(@{X3T4CI\)0KpI.袠 he#ν },ŭ'.F[8 '_+/{GP^ˬPyjD@LXM"x^,}\btu  fb}ec_.۝::W֮[IyЄX|s`6hL>5L%鮸 /ATSgagXhf6"Ϋ<,@+YͶRgXi;n>^G/$GH^!bRm X[4>Ò%Z&mtۤEbb%,ɤ^=˚@+f | 'K2)0$JҜE@57ޒUֽWk /w6~*\UoUoy%VjV 2*(ɫk^_r'AD.1?{jnp`Ʌ2=ބTaopYŇB\sM+t?^`f5r..]0gr)sK/4-/ohEg_Xּ;ۂujn+׭okV׮[[ +W_ֻ|a-:D>KІ> ho"yÃ_<ё/ | hnCpP h@@gmPnpkHE5,'Y %4uԈQn^ʲsᝮdd_*+,ݦsz{ᲁ3t2}!.mOmy ety&Cm|8Ƈ&f hT@V&8h(9,.l&uдYؓ[l;}{NXC 1Pˬ^PB PMQLPM5 b 8e,6d4|zV[f劕.3!ݨgKx n=wl%RG8hOm `8(<.N͢Mf /ӟ/ J+N}.=oƲh^!pȷm|#(B 5癛 c|l\ W#}ɫhg d79vzmzVY CWVvn`. 'ޘo!,j䷀ rR_:rгYR; x)(&cW Ɯ?o!^rh2,et,,V ϸ:]u8Vk ,:J<+@+WX<bBeT^j4χ_ ~ᰤyNj~½ ƃ /﹇â-gPϿkR>dy 9WɮExh XW6[h" 0qz{vey)Ge(-f?Z3ЏNvn `xp? ^vr-ύ ϲp>PlL2QWeq+^"K$x dV; +bVr p]x|ּxe\_A4}|g@rǫy"%b/H0.& xx3}КV O㴞>/8$};^ R&x4j&-9?9 dK~%d XtzX /kW7mܴ{vnvpwzϾS7:O>2藔]f­U@WF2$@nѬn~y &PM{#$FZ3ʲsᝮ yl~^J$E^ Dw45g  h-F YyGȟ$j^f + b'?hip.#P;kiOnsi{<0|b?SGo:!\ -0 7@LWWvW."AJdf+GGeC`t83.ƦWL?پm׻ ?eɓ l7:q?SSCN+5cⱐƙ&;ia&h%(5V2L L9 D7-]LzfNj} JF&,D^.7<5s~zB:["uɷ%!:W7#cסԈAQʵ+VpsV5]ǸSԪvaSk֋SWŕ*)R^_5Z{ ,Asw!6Mcym͚vϛ* vU _xQ,x-#ZW`Œ훯ƪ봀ʿxWU ē YJM-x2a?x,~m4^Ϫ=_VP`Z4\bVȧ?a6K[Ƽ7b_N,R k|N|pӦ>|UaxhyXM5,Ki__T\jM|QͲo\>X_/ O%<Qc<V/t+&^%n0/nťr5\/[r( p!h״lϞ>.8Ǿvb'̑/K2A@JxYrֽت׼zooܴi4ܺ8ua"q*tޯ>ݏa!# ?30\/P. C E"U@=RWT@ FXsl@eV1tLoВudΙШjht h/ ?p3UeBM/ K(HIY ZPE}3oke-|ֶ^im?2_2J^o^\m.t׿7Ȟv5Yλzo|M;lٹSwמ;ul}h΃v:}{tNtytfx[/ qP)F+4>\@Kf~S@ FlixY@Nyn^5>EgqtÛڴHjeF- hk hLWM}Лܺ(;o RKGU`hFM=p~rh2+wSLH4]ent4,B %==4P@^rxp1+ Htw#\5ݟ\k mMZZ{]6u76 16vGzg ǎ~عc?qĉϠJ,eXtg'H20K̅f~ ݓ$1 E̡K麐?O%{ۂM2$&qa36 i'J,9^8 L]bv+%q,YV?q'N}vg|~|q/?>'gӯ>=w9"X~yΝkϾ|?X/>@/眘W_o ꫯo7r?Sw~㷗~ϦM/&M3ƿW?C`rtK? z{_WO_]+?}y@g%/}_\,X%M1?2K/\ՀosWq?>Ő| i<3oϛqư?>p*Im"_~wa _ww/M`LGL^\ׂw_k쟯Wf1+X|R,yy~wVmL-lmmm(!`ɁLN89,"Nၓ%1J{{K88X=X{[3;sgњ` <#ZេgC`i$:jP;!6֎6m.9֗."?k{ ?v\~3G- V\b6m-~,~H_l 4bk\ؘdkɏV?P,~b!0OoKZO]?VL/?0 \m.}oO,MpE" 7Ko"W~6h|'`r;_]?ܧ_|z|| yBNShI<1SsXؾkA@oyغ$ز;] ;7l1h6޼ݧvxvhⲯ5ێlv6F ]:h*504 zG޴⠩MBaV+C% h4Ds4C 2}c7ǭ@>ʶ*pziL3%`uӚh, Dff/(7މhΡ.vΈk[%5):+nM\:_5sbzJ//^uY46wYx&;` KM\4uYXDsX06sm^u*nA&'&./;RXD00% PI rBUsWXjjifenmn M]eKW@ f.C)liXy[úx[@ V^f`b{bl;vEcNjW)\qdx̅iv Y3iS3WSs7s w K+k/+ok[;_[?{kN΁.AN!nna<—{<΁>,~,#EDQA@PTPptpI Da1HdD, DFDE1q11 qq Hbb/HNBRRI\QV#*%ղjuUBU)kjYYRR"( IyX'.VfWeLqQ0N!* ( (Er( (( Ją! a^ `Q~B* ¡F`EtifC8!%"B*r9,i4G@,U&OqGdɮdY,[HUWU(RTw4(a]hC-RȯʸVPdA!١`yV,_ Uf3`ef@eN+ Aજʜ%$ x rr!HuTd/PIˬ8dVqɊ 2b9Ԥ3.. S"2bȌ4ph̊îeN$KSnT6h΋iΏmΏ8ߣbʑѥT.FGG! v ၶV`uy'mephh:hMEa5Xŭ `##L#0vA9<pGFC%,>'v8m28804;3<=; )zFxC*QGY_{I_[Q_[ao[aO[Aw[AO+ݒPMje)99E)i.i)i)n.n-n)ZusJYXVejeZ)P7#JJYjJ(lum5-U͕-U͕y-Hn"6rFiv$AH2%Y :aZ VXVT#HF5T R4DV]V% `^Y4@ ddl rʳȄ9RaD#抅9l se\dy'#<0O 떥KJ4(Ҳ ,K3eYlZ-'H-D )qYbEI(F\+- Re@T*-K ! pr,\(K$XWrEe@4WX#(-)rb). s rsrrr`JOOOLLNHHK P`? _@@oOk=<]\|]\|]|=l9yZyXںqvbʑbnEShnXX8ZZ:!N掖sss3{3S;3榈5`fjc KMmLZWXpr\@.[]d/f_⧟)S~Z.嗟-дKX^huecK33k++{;;G;w;+>nt='{8νwص'v۹Nt}tܯ}z7L>ݳsl_:c_|ex ]08K4M/h*}exK G >f4:C_B%9~q94bfj}fg^?>ޭsfמ3;tP@oM:Acybۮ[vݲ8Fٺ8@; WtL/#<_YLYZq󡍛ܺ޹Ԏ'8FF8lvd#F A l,\6lH[M,fn ꙖKaGygh\q;xIڵ]aC%u?B6ȶ'9IMN2렩>Ȥ+ @V=iwMp[,MИ蓰ݗex_o^*ٸ(ƭ T%*ORq˙[>&іm9ЛKg.F 7x'(Wh: 8EC[YYX^3L,}-}p3fP^1˦L/_5b%h 3/7ULͽ34126j~㪉'1 Y3+Asغj[hL-f>dϽ{N^4vtUSnWݮZxR8@8d3? k6~&Uן/9]dlfV]O3Kln[/^ܯ_2udrԸ^4u/Η`oͭ|-}IciofklqUcW7S3wssO K/kk_[K[_+;?[kNsKk[{+ nYO=õwM0xxGP/xDzFzEQ|(Ѿ~~Qȵk1AAqAׂc Q!@0!1@hhlxA|tdX 2C-CC;IH_3L:YmU5Q=1үÜ&(UXw t"]Ѿ@?*`FS94< bPC?0%Ml} @2 ::5<;i#C=ڡihi)k)i.mHoc^OC>SՐnRu73( EݍE] ݍMe=M] ݍ%ݍʒneX/QՖt)ԍ]e]&!Хv5TM&\݀:Y$mQV@"kHVIN$"IS͢L(ieI%-M-I.N+eI+M+M-I-N+K-K)KR镂4@.He(K+2)tYY!SV%+2SZ)z\$L,qyńG_  psDptspwuprpswsw#y.`cemeiiii% [wsW ks fV\ fV.f...9$p25u41v0jؚ`cjbknfGj"@1fW.#/Y^huK6Pr_.b \ ~ǟ-~c/.B~KV?bE_.]t+W,a߬l]<3{&wع8tvc{>ݏhf B_0h d2d8 g* K4a/ؽڈhPL}&=N//)TC\g'{tsf';@[IOoqSυwV7/eC orxc;vܾĶǷl;ey ,:q3;X*6X@=/ft-Л8?0\zޡsrρw?@L+Jg.4 An΃D374I:h>ڲĚcVJY&4/{.<<7OO 5)MGppݟb -l6vֶ6_^$Ka$6i V~`jelq j-} +??5rh%]J3k檹'hr-m,mM`+fWMcsc++۰ XXZ^$͔t61n“b?Hmaus[?K;8op˶]blp%Sc w&6v׬lzvv uwDLloOo4 RXMI17Jg79Z`ҙz`  CえȸȈH(⢢⢣cwMJKNOKNO"RfJԔ䌔Tܬ҂LZVZ#+S5VubeZXP(Ւb| O\S`rOI0FV./D+Jb%@QWY[Y(DʢHaBX+%Xya~@UOuoMn@uNPMnHUNpUv`YR>L,,?XQ-RdTeUaЪ܈9 lv 2;:7&/6/6/6?G"IDATACbm~!O!T% ɤJ-T/KrkrjdS/6Ą, gdz4d'Pd 9/17a P̋giʏU!Mq\ )&pi.o.o. 撔4""O]%詗C޶}[5>ثnkQM  C11>11>611:<-O';ctlthltQF;F:FFZG!fair G:F!lV ck#4K`Gvxs|kbgl#Pt"#cP3641><G:6BO #Lhw8PccMtMў Q@rlmerX-vt wu tB0^<ơht>ZZ4ZL!ںo-h+h[5[E@osyO!*ohvVT4b[Y(ntחu՗J)Z٪ŽʼvynhZvi^,M"h7R)i0^)E@:!C)T6 DZ.lB.J!<,:4$288"0(q~!~A^^^.]\\}]gb_;G[7ڞ!PzXڸYڸS,ݴbiXxxX[[YYYYZZvbfdfhnbon`FJ SK1u0777XYZ[Y:@iavPiFzIk!-M-^2bs2`{+OՕPX]d}/&r|V[ʥ˶\LkXM&ۚXYY:8:98z8;z9:X~G:g`gٯ{fS{rϾST@9Aa>Ʊ82{?g4 ȗ^8tK 2Z3}WX+ }+_64MF#qht#Z6,cfYL}; ?wt沑e`ӖÛٲ(/dcAxv| kyM 3\ᴧ3^jẌ́z8cg!8T1V@_8:JG#F⾾/wyv%?$99;pdwODWX' hz:ZYXZ_ ,lQ ЀZfc /S+[QLӥ0Ka}fIK+ 4g+.mJp{B7fi@fhaw uEFUceׂj[VdKosOS+O 6Y嚵} @3 ja&76ּͬX|L,-qV@vl 4+oS2V~4+B\=ݽ"=}/oX8k1__~ ~.)hy` c-"08$RBB0$O O HHLJ"N&Ĥ$$&%D7$&&%$''e$'$#iiHz:SFFٙ9鹙eE IQCHY#jhk+: u j%ՒbFZ\%.oPAuE~MyVuibUItUituiLuY4!,,V_')..)-/+).Ɯ:$4((8444,48.)-)C\WqTB P[WWSW][Q]ZXPPX\>/˹V{>?.? .?./.;6ۿ6ǯ6k@B~@MuouPWPTRRZWQ_]_PS_YWmri|X4F6F5F7* E ɄT i(IWd  ϣe(JSR  RҐL+ј4!JS,l%'7' 4BsAo9I-,E) XڊK{I24OY2 CY)P9bA2RZ3ٯjjUO ͌'GO LLLMN@9 <>s:33ScSSS3SӓD@Ω DzjCTM0&g&f QOS&ghջ'a[]3=334 wfrhfrCSSCS#p33pӓxY~D?:`2=6;C %p}yf&~L! MOžN όfF:&k{cݒnDpG8-NtOt e*B'P:Q:br,wwG:EQxbS uTÝNPd]oAXPUW)RWvՔtזvUtUU@PURvʳ:m$]IjdH!eJZل"٘ n4\,Q!Q 7J @4NZNRԊ k% k5:yq*A^R/+@%uK:yQ,V[-ɮg!:in,jn6(W@ \^['ɩdZZqf(Z\#LK2ęzX$˩ Eq Q?SKe%JIfK2IEXX,ʋ%켼 L99yYiY )Iqp-oOwOwWggG{*ig7Qל\9Zsu4;/' Pc=mlz3C ?14 ;O}zΉ{OR Pwvf68{@~ݳ}JGwopN M/ _R@ꙩyMF'cC~ 5z5@"u=a J|':h:ڡrDSM3еHfSYQ]Wf,:K_2hd *q藿x_o^ f4sc)'tk)> ^q8K$W@yX;X[V\#c5!5/56,{e:CqA}}}`cleha-lmt9R +?Ȥf,!!ځ ,@5gE! mikjcfmwM82(%:DLmc Cȡ 6 ;dd %и3m9N.^Q^bHG,vh㚆i( `  Z ($1(!84 KBSBS"RFDDDEFGĤEǤEŦEǥƥƦťqi @bbZb"zLӜf $33  99Y*YYsA hRZԭfCh(Eܮ4EJk%5ZYq"NZSGsTmYd=U_S/Cckc FARDc ^ JjHncJ"J 9^ Hh,O/O Abcy e 2[XPbK" CQ 5EME AP6( C,CBhCa! 1?1?X,ACk  $j|X0LYT\\\\,Tk#EbZ $cZ$,֌2Afs"j-ndf7e7 i,dE-%ϣ8]+LBqFKQ Z S[ V mP6Ei-Eii0RJ`fۊXZ /^KSJR(MK1JTTe)T@-HJWy:[K%JvUwUdvz$@ZSU6ܬmT΍M&gƇoLc93y}rlblhfzb܍7 <-O9o߼q1scnٱّف3ss3\>=;}}kndI̤zvkvJ Txcf 45777;737MپYlButBk7fa%ȼ1;vcvJ~}I88oހr?x O幙Ss7OM,}1;~}zT zN>éىscS]74L+}~ +Lfz*{D ipJ]>ك2+բ.dLזvIGTdT-풏nhqxwD2S3]=U5UUG:;-b`UeS0\1R1T(+/k(oח k=e=եݵEUݕy]]YjEZeCyvyN"#wVhPmU@Ke~SeI^Ԥ(lR .&RD)QQ,AJեhQ6V6U6ה6Ք4)k 5%e UJ eCSUA i6 S*?EJyac%$5U@#7( FY6"jΪ֊SiJyv"*ЏW7kʛk@SPYSX uȔT H)U+*r\!JEDXV\ZZPT_>?dgee$g$%'ħǥ&D'FF?.  #.n 5bOJG(vpk~N#ImC|>֞蠭K+7ƈ Jwptrv'%Uh>FF2}LSS{Y;=bS&ƎK16qbxՄfLLOn-/qg(q4O~{v`+!ާ1W@_d{@ hɯ~nD#' hЬtB4:h2U@'CB3#!NF88g \8KY3u4U:5flhρ>zLlhV1_ ,.pf6~O3ЛQ@ob.ci'heOh~T@{s4qz.} ؼn:l Ks~4V;;+puq cn,xg[0vAYZXZ.0fj]PM|?he 65[G X;X;9;"v0k>.;:8@%,melBk`Hg &P`lK5cra[!NtsP,[Y5ݙ-zֈf8@`8,Ĵ D@Cs0 B hаh?]B]="ݽݽb<}bIcָ`$iHEZJbY`$0$%(4"A*C’4 ,2-4t8JNIˈψψMȈHHHOH2#1131)H'dbi dffebglx"9Ey@.MP*檮:PTw6UBBs +vi*%QB0Q,h*RbEq "tPB(UhQ)+JqrSER$Lh@N\0+D)MT( $*E-$EMlYa""JjA$m.o* i 0eqpcQ($8 qk*TD5G`fQHsQPsqpS%(8zXZJ›Ȗ8%" FҶĶֲ֒4DVZ3[˳E,mHK iʲڀRַfRZK$@}IRj8SC{qZ[IZ{iz$$CU 3!STtUYRe8 ]L,,[g)^QR*2),>If$fryzQ_MXkxgDw͉CsӣC7fo^97u;nݾu{wܝ38/Ȓiy+֭;n߹=[7goOߜ576?7<cdЭa͹n^9{kl͹1 P=n^$ܾ1 @0?;xss %>Xy}&01wc~vg֐sc7a`-̟ucS7(fnݼ~[phpsYs Mܹ 'q,;7`8oܜws2G1G:q7&Էf{nMUɯoAzz HPR}R4W6-`O2'E=nd|G1[LWOQjkg^vfvn\]=!FڥmvPhI8,W*+aA_V=UyݕHSU*PUtU5RطTΚB{M6 h*RRYZYT]R]\S\[eM̶@rMYkNVWjDZʚy'–ꢶVvqsMIsMqSMQSe!d6ɳ,fEnotOk } }fz FMƀ^:Tg3`hH@p hWOfj1a}+4 h#"O >\:ξw=c}d[liA,}=çy)hRaHl{K\Gp,6}q W;wR̃kYxAvo}ǻVV7UuRRQYߧjnj VTSAA]U^XʔM4R[$)- -˜VQLKEl$^)Ih'4KZ$-qmVQl0U*MnHZĩqr$M&MoJOb[JJ8hA 5(E hVb+ oDED8. o) o. m* n*lJBZKJ"ۡafY!4$( i) n) m) k+h+DJ"JZKBJC€β\d ^.kķ :0lEvA@rABgy!H,O33)*"CQQ):*X 0SP As)fbQ  ^XT%f c gh=Y# AyV0<KQV("Kb d HD4YR !$g@3TUU ƔFɔ~B0v{jxnٛsSo<{̭{ܿw{?w{޿3iy[n{wݝ{ƽssͱ{& wo޹9t;swo ޛ{*Gnwn!NZoݞJ$09wG̏AI8{k֍A\kA%!u{{;9<7߻E6 p}wy{p}:+:ĝMeER(h7H;2[k^҄HeMur%2eNZ_#U+$rB*rA@P"(+)))**9YYYyYy OhSF|Bj\|jlljTtr 脠и؀k1>~Q޾^~ဇo'q sg g`g`' &v trw\sv|ɟ @m#uP hڃewֈi"mncakzyzi:AֈFFSMzC#؍N8L *ƤX3$]M,\L̰H&lfk`##,雿wǾ8t! >]>s.A?GޯnV@q }nt  ?'@.}3p;R W@ U@'d?E@SSFڂf J Լh l=eY@>xOIg. hc@4 hT1Sx9TF6lB J.]NÛ 4`| O=pao`K@+i/s.!}\=b"c]S¥J:g*-lQfz@ 6Vϰ9G('vp Ҟf >>@^['h*ۻۺٻE8!m>SEl%np3s]#\ݣ\!͊h_tʶ6T۸[07 2v7 mh #xL{=; /9CmT@3\ J N44Bӗ(y\L23h\רg$$XΡȴ(JzDb2#3"ӣb23c2cc&9613.)+!9'99+%%'9%+>geeh3<S8:/ ,E@aRU@JFRݡTK[$ eMEC\Y-h"%-͊Ij3:6aL{El$E,Ki)RVatkytGEL8f;dEf,M&MU.g2pEYV"CӁ:E&I됦ȑº풴vIJkE2VK;ĉ˜N4@T ,,4$44Eph[yD[yQ킰`H>Z掲X7- vTUylGy v UD!"DwBByL{Y46X5*aji%]|5P%bf|@-{9r9KQ4AvWyv <uy6@Y#B=YKYPD9nEs$g@%@3es(\#<9Cʼꂑ⑚d|E14٥k;=|cbɹwoMߚy|փ[7ܻܻ߽LOryZ'R}pzp;Nݿ=;3=;}o޿5xfG!{;ݻ=rXLA;\oR(@MLui@k5M=42 ;ɷa q(ܝ{x&޿޽{wߛph  = 0=Cy;%[8({wA@ƣpJݻE5wo\ u7knMO(n+!!C!|~rs Z~}r~HPP͑C5+g+n40 7QsÍׇHqa~nvjJ]9)GTNXtU hoɁɰR4,n.ڒAhp"'5 % E %̢!>zJ{z˻]eX"®zaWP UuWt։U@r f ]JAwI (EfqWX$BIgҮw( ueDm :qtvtwVwTVúUCig=wCy{P%fEJu!InV+;mYK#hilinRT_P'UɪR\,"QsiIQ!>9'3_:C~C%**1",!$4#ckQ^^~>;+̃gptan!pgp!5M#u \\]]]'gGg'g_ N^8Z/bcgcOp Pmmnm,hkI{@ikeg`cy۸xp9'5 %jh+24+s G sg,67^[YZYM6p5t5`Y+ 7+8kmfoڝh/wo#I~+!8wv߁Ozd7WS%089zjݳo qϯ*WF@8@ pQ@}ͬ}fДn[4]y֌VAR,ç3jb"ndqlmtְw>2&@ld3 h.fjY?dB^,-ۄ睁-;fg@A!:˭Xeێj[W[^hBk4td )SSh sk/3W.S f ́,!8!artqt®Ф3@SQg(h(s CImk[$`aغY;ػ:j{;l:A3 ۢ;5=[Y_tvq آ׆c wt,YQ536sKkv~v8S0{@{dj;0֘:@D@;;GP/?Ǐ}Nft`Hz`0t $5^5Z K)Z+ P9$<}1TC#@XdA:;CX +:ȎώMȎKȎONHP@礤&&$䤦榥妥fw| '0/(?WXPP\XPTD()PTTZ\TV\(,+QT6*:Š_844V;ԭ5MkCs:BY+j5 [km5mm9m6qRkET(]ErJ<]ҡHT$uqJw;*E2S!O鐧vHS) m22C.C)IWI3L"CAd4C4S)Mi'uJU$(^%"1vaD{yXGyh/ww ;#+<*UAXQjQZ*,j/:QNAdGY,Z%FAJƫE].ajWErWĈZ&ta;jH2N-)]nqZ8[EfHsz$4[Z eE=b Ĥ].Y!U%!-@))/[S-,&SC DKQ @,zD蚻Ɯ ++ dE"w@/y}~0 <"̡ݙ Ҝa<`T?ZO310VU8o*`ppdlRY1Q9Q54z}ح{woܝ|ȝ'>~cѣG(=zc \k&f~yZOLp+<|ޣw=G_xpo}`񽩇wtg0㻓M>;䃻a}w>'ܟzkݛa T")!?i$dbjYw!~ts~pΣGbXw2&<'=Ѱhz#G? ~x:9ܱgܟ} w'<̩Gw'ro 8<wߛi;toT{5&j5^UFaJP1R77Ts}P;7Twc~~a~LI9kmBMKCTOwW&UvDdC:!$chhE8T> 5՗ ח  % %CP46"(w.@I)P+ˀ>OYޫt5v5u7w7 ne  ujt5H!Vw+2Ef6A;e=M=Me=ljtHZ1Ҍ%&)jf rUCYg}X[V QX5Rb κΚ|4%2R+EFXWةո2uL,W(zګz;k:kz;k{p<ڞڮqʶ&ERު hUV4VhUj*%rB&K HXV.()+-gWx&9=-;-5+F1t_ooOXzxD+3{B8dG5ru `psqsqsu Yg'_Qώx4O:04[C6aOg,xú&kgmO~ې.l;zCޯj?g }gX{ߩ]$z7cǞP_=O;v߁~&Z}gt٫9}hgg=?k@ /r)3dBwcF7C.}A:A! hT@?Cճhw`4ޏw٩sj"Lt*3kgmXXc#N ,i%/>T? [~ 1M>b K M~I6l6b!-0 {&7|>HoU@ކ¬>Nr``qs>qn$OHP4r5  Yxgy>c.4P?T\4Y/M753MsÝ&Mܙ?OnM?h߃ɡ}g,O}z'<g?'!xpɽwHzrw'fܝyt;R#}p먉>z0ӏL>~0  {p'zo OM>{0ùG$_t٣gn<=F[nݻhL=tɚw&j7̒;GXnTΏޜ5QwsaX 5`FTㄉ[-&Z-7FhO@l_L_-5=Lw5vV';%S*TGTG @xlbED4elh(jF"e`SPsPS)0\:\BeJAOҫ6 {J1VwV7He@/$mަ ȄfE"k˺[dݭ E,jw5KaRF\j(Vu+]؍BTѩ]uCI{mQ_j(PXZj>-R@$Qʺ=ݭU}Ɓ.%:NRZR\\MlmP4+*Y]R\)UJ*\((Ç⢒⢂܂̌ԔĴȘȤЈĐĠ฀8}B|oHoH(|"i?hna\\5WggBnjvqtrwv pq pu ts rw ts3#k8{۹ٺbeo;[;[/TlO^9|ɰd,Aڎ [" qlGlk@ h+w +Kk7kh+xzޯwgmziw!8v9C}otgx _gtw]s=P苃Yv1d]@z(ÄC_}OF|>szg;١ޙ k>c^L+B;lyÖn5ڰ&q9JۇhF}XM~>)|>PpâM@\QpUSݼki 5ϻ3 <humlٹpPL5l;K.:3k5xMNnvmu- .1\m@q&Ja! PftR+{{=[m(V";f;Acht1AS+M35\tFI[kK{G!HH~l6- d؄C5+2sk# hy i6} z/YXyYZ]v@/Mi4@fohaCPIc8wX::h8_xtX hg4;Git@H8q^ YDDgG!љ1YQ}F:61'.!'!>@$'wftj>A7 r] ṝ貲Kjm u }jiV4 v5t5t6Z:ݪlUbו6Q U6T(멀 u"S)Wb8,A%ORɓ;}Z%GܭHLQ)ԕHQWituu:WU)"QQYRw) .X]%wSr`k))OS jq"(CEu+Uyh0 ( 1ݢ""GSh+PL1PB2в"U#I$JRJʼn%=ĉ=bLHһ@$G//\ԯ(֐J~yiG TC#Ң~iq UuOR/)fq(D̡OZ '6j4AMQcA B4O1s󐴀ǀ_%eP^ FOQhhU*Dt&j5EuEES %JьR2"UWvl9ugjэ;ӣn|xw'>=9`f_}p)?)ןnyxaG&M1\ yg=$|v[doo=}r;O}޳'='x<}vyGO>&C2 %gO"@_orԧ?}`ك{`x4f};O_;n΀=꙱(ޞ&ړ A3#m[[Eڸ]q O"%h bl}kw[;{/V@{{x_vwq曟p#<j8OS{tE4}vص=ǷNкhS ?z 熤4,z08Gb? h_>t }fX>t:Β~F8>Z4p',h:v.7jftHz`XKPxK1ŠB(a7sH%g &LvFhD6zdGzȘ$&':.ωrcļ\ !1/1)?19?)9?9%?)5?9-/9-tzAz:g" 32 W.),(-.=JRLP?B]YVۯjmhmZ{zխ֦ڶ6KV1eJqs^Z/h-iGGQՊ.Erc,O:0]SSULJà***:&&-QrpuX26ԥHݕjy2lfQ@Wv+{di=YR4"V%*{%nQT0[YtKzq\OElOEtZf>II}^I|$[z[ b8uRqBH%^Yj4J%{E](+z%/KefH3{YҜE`p_yP:PYFk"WЧIftd@^ +K%(iGZB4`@R0ZfiᠴhHAZeq#"Èx(QVU.Lf/WMTQqudM1RT] -/j(j,i6f׻znt73y泻sO߳sSO~_Zi+={'P>x듻Ϟ|d_gOn<~8N>y4G3OMC哇ON>}4 5_ɍ_2hbggʓ9|xj q~<>10/O#߂;zzv_O6MtMt?yWt<rhD}ݟ8}FotD8 h7pWMgG.nnAnA3zihZ=A=G?G{ ;k?1GfA%ړe;v dnnԐ@7n[{o[;ok;/kEyl`+Ž\<=ܼ=ܿ_Ev{{ܳ>ݏ~{i`ZĎ=Ƿ>C>ԺT=t={O3xgtV@?=Yt h*9Ьt.Ќ&@yn\>“5Kame6ă>L.e6,q h㹣pi4:%@54M _3Zx&d&C*>{҂ }; +ZCAzGp6*W]9{u3ooh*G hji ufptD֛1Ma L4Xvv!\#$c1cg(Y p֨urw!ݨFK\s4U3c]bݼ]1/t: 9 9 9 Œ̂b +8sqA~i~^i~~iA>Ѕe%EGRRҮnP7w:>9ުnkloho A)+kMҖ&iRX(/UjrT葻z*S{+Szݕ](+ueRwujwMFWMfwMfOMo+;}w!8<`inp옙d(,,2sb!su}-;vF=sI7O~g\^ZFɮh+[6%iW=c>̷:0㲚qiUZo5FVbF.PZ mE`x+0XYTaVء3Pb,'6PtUDNQ'܋*va@3I[28:P'>Ʉz!iv- tQve<C7{=M [rGwz h-fqX#fv n+r A!"n#E]5?8OHY1R"!-M$0rD7ssPU=̌@gGxjoN'\K̲ES:aY 8g|;+[s뻛+; {۫ Յx?|=|=||1: m6[WBlB }[{s{۳lwfv6w[|hgag Cv(lbC EM&zX߅qghFj96w݃%:Ѱ υfw77]F`?<\Z%<#prU(yo مri49  [`hk*5 oI;s={o <ẏ{3kКsgղhؘؙ]PoͫAόnG4ѳh2ݩu]؜wj֧&eY hQ=Oׂi=h^2L`d%[k&KD@CSCg=8AUA\P>=. Z%SI@0O&5R 0m/2a_?a| 93 xDVx.['\zK/FtbN֋<G\>^@^l^ϫu=!I1If$qŀ$q.##(qE6C.}SǷyX7(:ƳtLJ[#u7l~f9vdnk<㣘Q#>vmximqJSFqӨY2`A\?ԍʵ#1dX!VɅL@_hlojihomii(/+--% ;+sй9Jod]/κQ}4[) SUUDh \&sZAJ 褔[@-*SsS4DG@Me$3ǐOt&ϔ\Z fqw&2klF\INFtxB9.nc@Egp'Q+EIii^}{ϿDk}%X» hqқ(/q|»r4-L _O@3 F藸)p7X Б3tD DZ^}+(&*)"S}Nx|=|T@u  34K+ %Sfhf:NsZX|6Pg>{{.̟ޣFhՀ/@6_?@c䌒ؤ(9NT\gV=SkL;t hj?"ϳB'Q7>Ṋp t> )$:%0 R!.Ж h )8V^QAKa23&'e':1$.)?:ֵNL,{ ƧBri ` gAo:DCo2#a@4AqڤLx""o%:tőuAy &B#o5GMu y'xNQ ʎꎪNΚچƮ&ϔVT=|tX-z=|V *%am;4sZ6b7i-1~ĨV jnTG%zXƄ1ql%ճgf5Qό ^0n͊[>aE=={wiwGhChN;m7B{(pVV"p-lhZhi؆ez6"0_^ 0x9dgl.=Ē%[&qw ^GGlolOlozw7Mަkscgӻ99 mτgY!`|ok:BvТh>܁i*wI>jkjos258 Ý߫ExWwVVкso}|kٴ5дzsftkA hh>z&ylcF Iz^>m\^ 0zů]##.u336Ϣ)0hB)O=5&Szgʔ!Ա~=g&(m能^ÐA6❍BQ5!nХÒgbIU`01yM"I6K]&"^4J b,!^Sn>@XXm6ZK?2FTNmrU鳏In®9 >5MOX26MzϩصnpZvhX@+VP@e#JJ.C^>𻺺;:Z;[[::jk+KKKk kHFU^AmΨIB4q7JH,FiHNqp0g"3%% 9iz+)%7)VJm 597B@S :<Nnf\l6brXB\x* ) X@H@YZY7cP@⢱+c1iT@ˈ:hRi!qIi']oWKP}7/\~E %ϗ hY >\rw{w/^~ŷ.\zG Y ʏF {d+)ʔt/~'(_ɋ|]Mas8#8L@c3d5>S7 hV}Sur6#Nʯ" [!q1yYly2AMT2+P*fo$i,E @+|xq{ߜ V_D}ҙtr& ebYjh hh?z4gѷ?ɻyϢeQc uBQTB!(i]q hhi0H1UϱEɅq)ED@e hQ,'U$W&Lty(*`BF9O-I̋u-VLD\ ĢTg˿wXوϥxfF?xZ~9l1g:Z8aTc]]UFS82ϘH3r1Ԭ>V"sFs{w#4iAC8+:+;B]UUY]USUUUkj5t[+ 3]{D@ cJ0xu~4ypٌ6nܬaFeP+ Q+%z5aLlTMjed`|?*[qyMVmV$U*!at% he=ڨlV QճpڝÝvt04A#|H]n6٥y렫mZ!%mv[cAt W@D5T@;DŶBP`*v 9Jmqa'Tc2 D.QSX 8cFu>Tb8ySrg .QSR ֻŵ$У),QKXW>SP@9+OU^@u8)phD4lGNhG30p%(񱬀fuA;# 耜\L#5"}V=7&7yd,Um}uwƷwoykunhCWpw#C\A[4; {*p@ 5G2g ʌ0>]i{kG{G{par8ڇ[B]]x!VOlwyv6蠩عڽmNmB myw7\n`oӳ'ڜ"3shgZ$5= m;sHX>]B{ !|xV@߳o4T=-+gAϒͰvtc66{A5 >z`tmdz ˟ڴUveBCEO4+eVѴip4Q=OtSZFT`3,D@a!aod+'L b' Ӑ(tD^c}6 LCA~#;V׫t('P@g&!-vp1x6 351{L߭9uc p\onjivA2(Q={, U;4a05>|v6M{O:.iS;mZUc3F-f؀ vDVɆbD(bs/nm|榎Ɔږʆڒ;5yUTUsٍ[o,͹UFs)%˲fdea[M4:BT@NJMD tmZM },q(q$^#6io$ǡt91Yb2 AG]ˈNAS -5QQhäGhAbgLc:baWz\LB%uL噱zg*3|;6+>.Ԍ?7ٕ7AϽIʟQ@Ƴ<{7xKo:y3A2soИ{*{0 5{4 oGX)+f4З_!r;HE .\~s'ʟw( Wwq$iǿqpኅ ;LN hLdЧp,Ď<I%qIXMBhsBb!k) htaq\ $$Ҕ4KcP"+9)DcjrhSKNάH,O 1cs\XTgKpkFe]yR@&µc}4d< hڧ>&ú(945 4. > ~C9"3"#,#:+S}@͔?77νH;h83q 餀>VS]HK[Z6(,Dʫ:*;+k*>]6t҃&~Sio ~W<ФZ*2)-Zݠr[cG6s\oh1Qm60` hb&!.KhDAHMŷ*:,F*-A%5iM\aT˫mHmӆ΍U3Bt]Tv6e븪Ն>ۉ|H7LpH[F!kց5׵wHkzklqhpM/*mCwwb&,dQMXd9U.IwmB-z75NQw`3))wJ]p~Q=kڨwIܒ&-iv=q\F{u.aSXd+CU9NI yYW!h'4' M3OV@#phDH^i nɱ& hOX=O/"{O SO ǮmGV@6nh;9[C{ۙ٘ݘlMl7 ކgo:M;S6a쇶\{[0Ӈz+xE6-3g1Ý9❗vWHڛ?^b޺`ñf T̨Ƕf6fGIR挚5ٚmNki)0 >S@a\O0Oz6i^ԯq4_"Q@K!}Nzu*(NiN!F MC~h($q(L@y`4DyP HЃڣtk'H4 hC hxM2 v86yn=ϥv:vXcեhyN]]2 F00$qe^b6췍N803})ef\6= йls qÈE?j֍FJ7 GRT, y=]ݼΖ掦v\{7Tί%73d`svQZNqZNI O%AKD;@JFAJV:” <"sSH4렿N@Q:>4L hL>>&21ƙg,tZ#Rc%Gc`t@S;b2bLQiqh>H5@4,JJ&:7^ɷ_~+О(9:4p .^y\xf4,?:/T@G_!/'|\ *&T=}*:k\zP |Sf5._)#M\My_ǏxN)΃4'7T:SL( ;?GwVYο?-2*#4opE}Mz?#(h"{ hp3#xq{ߜ |狘\*ÎǟM1*|t>"VO#>, } -=C*O$uй;;HbTh:.?&N|RQI۠:18)41$!8>8.0&Nlbth4GIHM/O˨HI\lMI0l@'.4\"51AC<ʒ3*R2QXb꫱7rcnj̊űp)0*N4* <: X Lϋgcɺ;0Zihag*s*3W%gƧƧhԬrv2r*o޸]Oyf^íF$17iAiYؽT7Lss^AK^AsnASna3xfvLk/lSz&,BAtb #8HtuGeMWU-+:kyT@7#Mjmim;.`G?/PE1Y=zuX6:zUohMA``ʟd1aT$z@-1Ijul6o[*J*lj)v*Qa8T ΑXs݉Э6B]T5ەvU+6e]PbASs\#N:.ySdŵN)W+ZtӲF ]k:uN,",[(t K\RA%4Fg8vL.8nI-@[R咔;E!,v Kݒjލʸ!rJk.iKк$y-H}#z2K,np]8CG摷{^jh+'zr߭qc+*{}>DQqa4"C\+峸=G&c}l1b LHgnu$G=#5|baWw@=S >i)tt=A%,sFT'37T=#1mҙ;ŎZ0]/̒%ra\Aнrh{{?ywug{pw`Qhh xGG/"xwtwx{xߑ탃XZ?ܿ{yt}`om?A.cAthuxCeۃJ4؄ U HX=_`rS1Ep#8OQhLG7}pmpp wxpDh{boۻ Am\ {aþ` mMЁ!噃ld1ѡSEܡ=|cl<֭؞WCcǶQI+=(,zlcF ݚoꨏij)]9,5knа4 NՀvYiVìƖKD@/FC5k?g h>0@t|ꝉz2MpƤa ` &a84aBô43aD5=Fqv˦wZu6b_&aGc*Z, A`@ooGuvtv6776Q\QPZPRZW\R[X\{&&v~Un~խo_%- h&p37pABvIz6g %Y%i%@VqZV1E(3Y%9NVQrAdNMKM -[iqVF$D32a$.I@w=&.'6.'X *`$|9`4.KI@IѩHi1$$oD]K%0pDlR k$Bc7LJLNIk_ɕ?y[?xwH3>:ɀ~מ"`EV6iq4&A_~2&+ =m{Ͻ)ϴ`/Ӟ{sA hp/'2vqi64 8Af+}_NA_~_ޥ\{&]x;:/3OUt3,T|婸Ǖ_ D<~ěv'N.0z4>]~Mc T@#Gzdz쩷yGGx'nIXAO ;EZ=gY8p:@m2~u?` hTe}f4k7>y I hZAG|j" ΆK*J: $&ǧb1վIEX(QT@i*QV$%'d'D : O"i3tV$UW%W&W^lr+*>7:vTB.AQp1y0Z-6G،g* @3꣩wKԬUi4 U+=2=*fMvn݀f.reȭ 0 U6ki-h]ؒ[r`ˮv!h]ؚWܜq E-El’Z]\CV^I;*:0@Pklnhbt Inᵴm<߅޹@ ~_2V0zmu`kwݸQc5 nL ØFpFjP7걨:GZLJn\RWU.E]ZeT:ECYnr 6H}VpCT5:[* ȡp);ܪvHSꐷ:mneG7;enYKZT%U.YG쒷9eMNI jeiSV8v1̀.p %nQSXf*u]\a=feHܒ),ŘaK\ֺŵ.QKTU8%NqCX*q +=Z#mdU.F@7Y[N8# Z\De.Q NQ%ܳ in8C8>EOwy*٣仔<ǥ໕SS|#epKys4#ah_ )9)sLq5Τ 0Vޙ]c#gP=4(1oQ7$Ylfz77Xm,-nn,,l/Nn-WC+{swwB?D16_h; ::uD = c=":1d~{ Gl{K4rD';!loEa>{}9<;< R?k|KgIRsp;p8to8) Z<-V`{p7 a"ppoho #szCo],ixyp2V`wYn.hv{:`gQ^ۚ }5]pcn޴{Vo6Y @ĴfkFP}!v-[֭u)d%4+~Qkz7%آct>T9di`?cOk5cf=3F0 ztuІ>h' ~C櫓 <@иsu06a|N@7iIe0`o$׫i'|8|4j3 03zȋ>3=^?bFBN;!8.u[Ѷnkx0ܣBLE&c.mt39u.`[r.xVfKsŒghgÄitNfX#fI7lԎ=<+e"tH, Qjhnijoomij䍊ƢBQT_Pwv~7ʯF c2*I󱃆ʹ" `Q)D(ga?-q<$e&f$gIȧ9-vjJn*zgF@NܤěIIhI)4tr,a mf|t#Rie4S,$еhz]Ί̄[}ƕίڏ_ߤEn>wz^cstӤWΓKϿsw?o{ Ͽ{]~߻{^z﹗^ 04V@m2 h  蟳V]NrR@7X^ Cg sn_>cY} <{-xgX̺6agXr _""?=񦝆5_qWh}FϬb1[L #`O ӗDz`S8|1›_ه&/L+),+=6o#O|: {H"~R@G'}z |Eu,T.id0|'tIg?N8uc'GMj,9 *ͧ/D%`$4uqI$^@b!&r$p;D@.ב\ZV`^V.3 Rs LsX@&*㄂ĂD\Jɬ 6<1<)25*9fb C }-.:hzf*RS`0%5)sjAA t&W16%AfÅ ̺Yy:}6'Fn DcYp#8,̑FzB7޼*hYx)$-`4-Ha–BPւ" hRh.k-%4 騨 nq4 Vچ@ȤCaQtF=:q qπݬ5fڨ&+(jheQaLJ4`RKjet:; ׏K ) LUjvECnRdݡ"hծhqe ]եhF[l˛2V{p%wIk\j!r!fISjpB*),E-3 '{&-iq˰+GhG+nZ$A{XJgXI=A-ju hzgDC3:<2$+F<3<>3I8q[o0[M4gmfmx1 ߛvo.vVf>ߝ^[ ܛߛ\5fū]sk}wcQ@obD걀 h-@7(a}l7fG}>г>XLc;-)w1CGYҮ4k(XL#8<Ў-hƂCzީsfsVi jzqA5/0ƃ6Mkz$:t=A h4eZc_ Ly)SC~o0 &  i27c3x CWׁh|.ǫG|^a5aߧ{]>#ϧG<3E =BYVG]#Mzԭn Aѵ>C؃N=5}VM9 x4A.L&- S AҴ{eֻ:?_YXqg`z65a{nz&QMR̆QnT֌(GRL,Ģ^;\]TYX^XZPXR[VT\Wyv sn!4 h 8ꙅzZf wN(`63I3G:w($f$bNrz^JZ^JT"S)rDq+9VR"w5BE@BOh؛焜aT@:__@ǐ hpGZ49cY Dh\񄀎ߠ0EtBVR|Ff?~R+{/7w:hMs=w$.ño_c^~fK߻t*Kd+#*FMa#8L3k$)bY4A2:~As3 ^ `%W6*`׿}}}'4A))AC hzB(z.݄= o>s N3x(:"@?Ohe1N e||2LO(63B54kA4tVAϣo}u[|jܝkz*A w>IB3My̍3 >EТYl^t.uk~ݠ{k!2:_yիvղEd-+EEKvڤig޳4Z_<ټxа /z{J@#w6ɵ.%T@S|.IyDL69Q@-r+dCBhA=𜘿A4:hpmBH|{G6uoeLjhQ3p""xh8ǁ0 Lمߨ}0kbrow揶uwooͶлKűQ3A9֜ F3qD@kR@1И:Y hV'aS k(M{#G%' h.m jjXW`ZZ>"()=)C@O-$&z4O4ź7M±ICϤg0eRѦ~8M|N4+=(ӡLh't^2٧#EӤF{&z8Ѵyԭ1/ki۱2Z3L|.zV٤]1T=c3>ܤ~aʴ0eY ZQ@/N^[\OX 36⯔( aڠՎTaD)C¡>A/uv675׵T7VW5TU6UV66S\Ls| },7'H'%T@vq*,Lc3 19(l-iGz> Լ_!:z #LCNR_)o݈E&;*E#蘬L.Q Th r\C\@S :pW)"ptFFZGϮ *{ˌ}r^`j|;O;__!jhU,/jhg4k&Ӿ34]xZA3a p.f'[,v".}&!#ޱG@  hjY_ǐwȜӧTCyw >ϴسg_?-x( "@?"ևecLI`T΄?}2  `/diG_\f5G_P 'TF_Y- W@Qq蠣:23:>?&!ʰ󩘎K)x0ޙ렱TNɬ'6b&EX̅h|HQslR>0Zꔁi\y hij[1QT@gQ׿AO}-˥izgNb1#FuzN%Ь(ɭϾPn7ߺt&7`/fI4g})$uДۅzf"8X"hKJۀ2&g *U5t}W]#.H'" h^7O,S,QU}n'v̀s8n՛ j.\>l [JFf"FjbHmDZfâVLs;dUyCQg9dNy󚫜jΡjpf=vU.ECR4 .ySZkW%pHSR4-nhtX\ JEe5NY +Q QVEeqfrlJ *-\*!*u*Lpvk .Q9-…8CFLtc)4Ct[R넛VK(1 ZD4:hRsq) h+mU|lf !R:Dͳ|9% :Eve|7ڜ,LnθV&ՒU`/V-Ux,\2 .D+Nqsھ1Z="_uxt?GlD h7I`Gа h8_=GL8cT@LL5q?!!k;iI*I &%χX| ᑉy&aCq4II!W<::؋7}xt[>')ݻ^?ݕ{wB}gY]l/Voi6g՛3蝵: 9,&hfn#7}"ՠf-]b6 ,y^CLaPӯMW}Uz)z5^v.UD@%|a\2me:#qqBtA)k SFA@AZ & 2gBUb0w]~S,t.8USzίY^ /Ϻg+s^dabqֳ0㞟vq3>ˤ hLIc6=zT5 $rxhhpp~)zy^;  h}h(o,-/"sT'yUnW7nWptyT@>)SS#`! d8 l\i&P y)wRԼ4h:h Fpb@$HMt=%182@vb"rЬA_J:o(qMB\0L4Ig1дL DdđCQ}[?{͟獟/WW_gV7?wN ǟcax;OK=o={ ߹ܻ.{9/*6μo_xW M2g; ̵;sJgA]x B4ϔc{/!#Dif^KI'#ޱϣB@L0t()f}1;9XIH 驸'`g >Qg:2^<M ^D@v_>)i覉}>%3?~tf?}MkuдC&:*+IT \D-s|8[Ls>3v`>Ue>ڄcfYJfYbASGUTCdT՟E|z-ZoSE4klpLi97#\F a k:} P@NwoŽaaLtk>]h/,ie,0h̃N 訬Ajjyuݵuok巷 AТăCcJՠv[^6N>c7mgnqL:^WdžMaFnVKjiTdǠ#4 YGGƇyUUdW:I* %s\ 0`:hesѩjDltZ<Ýn:v7o4%NiSYR6xeGL62 V:%iW:p,^ݣhț2-E sp@˨h%H}FLU9Dp*<}Hka% @T ׭HpY&rh ]7xMP.dCV:*B٘!&ô:앶 VSv{]nE7#U^UwBuR7C} I4 \`ᐰ{3Rng`zX0Q⠙5#3A3L3W=cɳ/ zţY'3YcţW[syah$^WƥfY;ۘޛvܝm-P:zay׿넀J M!A&e hwI3AVF { Y$Vy+I{d:%p98%XH4\sZR͸raAI|i1)t>-Tc} ;L_ op:H-Qo6>Iن]9[;17ױj]Ph A~=ύQvu簀w ['X@?G+a&g_/^zB}$u\~]@W[ls/uд h;0xZ@&+O ^]Ka8Ͻ{w_}"~OOG]_G~ M~IS#|2f=3Sa͞9YGAqA?O_7}$q OӇKR wI8?N@M?΄ a}"!5,Au3L.Ycb4#*>j\p->? 6$0Mt,2c4t+㩆&ƙrYr01rL"}$%I@r "hӠÊcؤn Of}z-0 _d3=5{ lRM3ڠ -[#t+I n7s6IMyaI}oɅ\} &ya} ¢v,84em%%Hii{iQ^Y^YTWVS Q]YW]_˫뮩몫5446>jTϤ.L{=F@;LjYuZ&q39nX4&Ơ5G jiLyt0:h"yX@[Ume8ov*Ҫqq]\aвZƩuz.NW6ۼޱnMM,3YӯP]rlD YW:H) #,NqC0*i gvQ+0 ,^Up"k: EUvT5n5. GӀiT)ea[\x$^I=֣סGe ^E7{.WEnaK.!,s K\R)t⊅ux6YW4ydEOSvzEF-ЬzfFHrA@r>Ktd=}F) 􉨍 0ޙchXftfn`0d.^iW' ksҺ/ZEp8`.Z$Kr*]W>Fм1k7Z mBH ! P@?|+ A|Z@Ԏ 8gt蝩#ƒg}\+wGM3Y >g*v>S>~ >xntD>Ggf W:@>#4%hqeS^z8G!xM6U_X?COx73OCUO~} sʘZczq{>pK̞;~;9o+Y~/qS?G|}~97J@;h?')s KO6> 28كkO;hG_O4*󨼫bP@W򾈽 \ϻx':Zk&tX@_M4-fSK1礌rѴh3S3+JcH3`| A'#rQtXb8NE Z kq0 qu0:u 0NfN#8Htj8#F& %@[LY`H4)&@`4ӷso3aiUD4@+"TF.j+(l-$E%mAQV^A8*;k:k;jjkjꐺFtИ,E؂vAWA[070[tca~5n:}Nau,qjYtfbZv̨6IB~OЩ3h@)|H縪i\RF۝q Y.r\j)j:pCR"nGnsvFT4c4ccF%#!H IKZ%I !bSVVԹ5qCX{D.QSTTI]\ja6K aChL@1UnqSX* ̥!pk<: 3U2zgen*5k!~cҺ=e_Vl%CЬw,Zʖlr`,^6͠ecG;wBD01/Q__*p&ZMփ4VE'Q GL 3v}0#}PP@QL 1n8t3y1{zG/z4k4M?4Ce>ϭ>#w.ߛ;؜]+Eμ# hhǡe4̀677wI3[ԬMAG21׬OjiتOI:*Wenɣ_joom=X^_ZSXYPVVWZZ[\Z_X\{NAMܼ[+roW̭n*~,S0h2:ɉ9II7co݊I4-ΉιEf_S@'M:8iYWHۿ?}è~ŷiW]4g2߀ؓ'Էp}O={(/>W $H2˸!fdC͋t/)%ҧw}j w xyPo?{g/7_c e"`m t͈j"^}#af kN? A}9ϏC>?4ls?F@?{Yhf;}=q#q ?M}o_~ hSOɿK2 4胉$jhZjhϡ\YԭϣsE,Jg5_ðtW :50rבp h 1$>8QFSGb:P@A'&f&N5f؅8gQٟ^a4)0-&bŝB0H _stȚT@ӖT:eݨȮjhj&:fmέ o!gC'a!~V8%Mm: EM4) p%SZP)iA@[\VИQZQZَиag%qtUvD@cG}D{[xn㷷tt;;]|^TaZiP+bt,ni5f͢fŠ3jFqTjAmPT}:U~4gAu:jU69[m&.)qpɪ\Z,*,v)e$lu ΑvũhB Yi:7)F,.s\ 6`àkz-ǒgdtH+j!)s!R%*q!)tb!*wJ*\<}#;XL54VCj\*#K$!>T˫Yc|3@£nFVz-n\WI3 kq[\8 CpB'BW`vxu^nf˧( W(z [h'GML4+8'P ^YW&ʘg;:hZyR*5 y=$y@H)d7JA@@QA, x; 03c˟ѷa3K%}?8Fk^p׍K.Y% %ep:5?ϛDNƄq#`ݘܝm6ݾ{:8Mpxx@V&|z1&Hhjt0A#tC+/"FL̻$=c#,FL!`%2n -&-\e]q0{ڃO |q 4B_nq_ā!Y#}ym =]>[:[ߙ]w׭ ZF@/w4K 9vwւngA5G8fB^Pܝ"I >Np8ͯYPԫ$ zuB2]!K[[r"$yzޮXp(Ëvܸl*JsY8cZV=csg`sJ\P;6MA#?` M;cm6#H)CǔrIo${>S%nԵO;.1vMyf hn ߣJg^(2 L}~oL{4WtLhZ}ҡtjv,V74>mO7,Cqi. 8n٬W9?1ЮLViʬV@bҌ{yֽ8㞛vL٦'ǃ~kgn9qkZ~¯XkGԣ B,bh^~?[ko&$o;U+oUL޸$o@HzB̙drPR I trfetfQrFaJz~r.?z;-5/=Ar+|8T@&HMMINȂ6,$]ODW@ߌC|3&˟s8/*Xwxt B:Y@ D&L$ iIDzqdŢMNφ~4Y0**NL՘tb3aoLL6))IpI?ﯼӗ_/s7/=V#89:ؓn&l3蠉}h3x.b9&f[Ϝg_{Y83\νyg.ga7h6!@ˢ_ GsoX~?z[ҖtAϿ#๗zEΔc }"@D[Oc-*瘐㚵9\ߟB#>]&cK/ѝMz3_W~+^}3՞ũ Jkfyo=ث懎?'*y8$O>/T0`|C1SOȹ7)Lg_pQ|t{'iy%y0{~'_{y HYL4a{<}{&}ѧ^ 74o~hϿb3 ҿϔH% @&l:'_8T@CKsG_dRO]$Ƨ7?aA#8`Ɍu5&̬ѸaL.+M &d⚁pT4#0ЉNE\gQY\<84[: (,FE̍XќZLN/ʎ!p8!ӊ`QJKi)ιUfCvvmFA54qӵasrXAb5є8{ @*Z086v~K.1ѧ Mc+6%[ K[pMvtZK+ڀΊn^=pI GSkOS+AwtΎ.`ߠR*S)4ò1T=0vэ&Y8Fd5L:A6 20DK"hx,|v-*v/gɒjObډg]1 F#kH<lT`1X؄%+T.qWVŅ r){&TG8Jg&.TxZ9[ߝ߽[snvy֒;ٝμ>,e76f@X=#'zh UvyBS+^D?ULg Z\kڔ6¸l*H͒9l$1N{g=Am k]A l u}ھ7hLS)7 L1Z19״S}J~c;`&=F~$1mIu_дprWMtGț4tM;I(GՍSe&N0v扱zXkkF٫n:豦 uO˙{Cqi. :ųnW49Ԯ kӦiyeֺ:g_qY,ͺgA[p86z: 3qYc5ZQcԍjF*J&J!@@twZZ;jk[+**K+ K ùϹUT̯Wqvu"F?̜R mIf쒌b\}&53$g%e$e'gޡ:-$%(9=/9-/dnP9NKM:C@"X@cstBt|͸[l8skYWPX ! >43cbV@gf'ffΖ aTL:X :66#9)'&&g?o;+Nj/s \$}f7'XL3Bۏ?q\8hO7'Sg^&YL4~\z{#a_sWܷ~<Ï? fz)8F.d\D_|,=Ur O6֩qT L -n>Nxo=MCD<>W>K\-ý^0:eWZ6ECYo\U:Ni+:!KUM.USP69UME]7yUe`ω)qlR..u0)@-qi|L$ htj:#HIzF}mm(>Tu+]B\)*u4끥$$%qV.r .QKDDS\E g`И6 I=NshrR`}ЎeC:ed%CyGw>EW)9-織RZ.%0 >y?o,ГXhp\7hBV #8ȪHW@s3(u\X@s2gʲ~p0X2 RP{ ksd*[CA-YD6]`,Hmߺ9;k;>YywokMQho{#C4F]b3 {T@S|AfNF3Ќc#64,p&6Ѳq d7n˥ϲ4ts7+< m6^;[9--s9"f 95;$ch谀>3B@ǃ+ez;eD ,:i1yîmJj,9d,3̀p20k6LkyS]ϴO Ō~ @<-&A:Xw׶Miۂ֠=wN;fkF޴g1iVOVM냺&c`IB,yk|zބQ7,I4qnX;;zcu{ѣnjiZ'm6,Va&f9|abx)^үMkӖYʜuev|eֱ2^,zf ӎi;Г^&|m׺:]cmԏԪaٰB!@@'!hj[[pҊ’;E4V^MsˮB[s,f)@3z>!SIsz`H.J* 4Bg't)M#8(ɹ)I7o$ܠD?3sx³4kfkQlv(נ XchZ`t\vlLᓟaGe$DE%翿_{篼^z9RL 9 tfTuaO2 ן$i4:}&P`:%\B8v.k^>+̺/?8%{,M;9;Q=3"ŷЬ6Bq]G0ZW8O8+7:΄+x| yHgI8<>ԧ4MS-y7B'ra aZ 堡ma48F@u](MMf^cKO@AGGog8}A)# R*TJ4 aVY?n1M:^h Y;fҨr0oTRcYUE=>anWZvECAe.ECVe#KV.ZN[HtKR6yCV4{UmvpDps&*eQ]XJډUuNYhqĒgY-McBoKTbʷ CNa +ݢ*P` +̛*v  \CEX,,u+f43+Y :.hhg hsZ"ЯW^/ \|sd4t&A3Y @A)O?: >Nl"g?XO{ii 3hV_z=K߻h&/ҋ߿9`5p gb`s}*61_[@s#U_}j q/%Dz"xFGC4">`uy3Nuigz,OxjJ.=bB_vvWcOdTϾA3tA'Oq9"0"'@F@?ků>~__~_?k?͓>⿮7QT4:&fhVRh켟|Z@CO3s&שY/brcZMw4Dž42b3-FL4ӽ@8ӊa׵\*a2t>>^lϣEGg|z-f:CGD&:5"#:+4еkssju.V=aj D鰃X#oz:B@##4IT@s3fqyХmeaNc]YY8:Rol 螖~kk@;:N/UrوR2eA;2n٭FEo1>4:V=bЌuGt2JY)0zLyhs >< ԤT@3Д34dL0!cJgV@ss4<)h>S@gq)B>Fp΍B;z>-5~,A:Ke=(MExũXWEb$7.%t&^K% IFо5 Ln/[G{7V.Cۨxxr__/?Fĸ,!a1jb&  (OhLd>S [(P(3>ÝC=3g[> t~@ЄuΊm;=ń&h΂~d@oh3SoA30JY&Oylɍq+ͲK O hż]h-q>lZ,a =) h?h&ai h6 fM=)s3GдLiZZ,&]}:oյIum@S6NZ݁kNZ&u}N?a'LCwG.o<8aa .Xwޣv+5ΑZ(V@݆[y.ϳ^odaW \ -֥ibк8e[vb #֠2LzM^{FvV8fҏucfDgH$x[ZkkHsycIy}QiMaIM~qu^A%oUߺk|LrD?S͚h*YϤj W:I*g$%Nr:甴)5NKM/iI7ɪ9$ 7'd'f'd3 dAJg$*L3}u5tF_ ңc2bb:б_)b3aNB|vr" _o+?D;+lOadI4v:)&i PI]=i}[\z>jh /KL4/1˗_>KxXR#tu4F 0VQW~)$,Nl# A'7o'Z3˱Y?_Z'?Fa*YB)ܧ.|Gh| _39ܫ?4.2 h {q#q #yバM̀&;t7qBF@C.}a \)=_ן䗟W?gAW#`?`54ӿzZ@S }*Y S ړhn54$A?H@SF cI 3̉KƼ" ℴRh̸T، DCJKq ـGߠr(xOfsXqGÁ!ѷ7-}:=*34ytzN5|B:9W=0 \M9S@; bT2 KJ+*;N ꬬk]kd4҂׎A^ЀP)($c*vT zXnЎڬ&jLFAjFaSYhnXbR|Ǥ겪:NêhWTڕNeKٌZ^P`ֳ]Ra9NyCVe hE[A݈} v&h@K2]F FܲzТ2; h  )uH\ft),v ;vqD`c)*sI<$+IdƐR+*KXM%,iaKTԺ):xZ.iKڀuвzDZ'+EprX]UbjvIܲ{YG)z&Zux8^@dBѬ&ks3&;glM\3όS*5Ӫ~`ZNFfF{FFt~}>}s9-A70O.eNIh{cЁВUl.;K6U`/~݀emj|cλ7^ڽχ{ow7C׿ >Gc>p@W&@t8Ϝp*f\PnnN3PL@#igk ,la!QaY9 c=ޚ#)`v{$꙱D@kMk&+U hER5@8h9tryh24gZ4mz'gJϧ`?e FA(6g-9`z\0mSm8:.˯ԷMZ -3C뜱uZ4m muJm0ٯ'|oļ逵I0az&dWO3|OӴx<õޑZi$  o4̃Ap!''y1_2}Zօ)}iEg~13i0g06\it6b3F RdRX$D7vu ۺI(}#+骃뷨_!ƙAn3 ӰNJz~JZ^jj+4}Nh ̀NK|#7ɉ7rbsNI}>Ьkf9->+Oqv54@gddf&f%#| hF@e&%f$?ƕw_xmjioxfV=s"<>#X!)c;l3t 6)D>q⼀'Ͻ7 _y›.h)_x 3d Ͻñ^|KϽww||[_""½3-tP<+w=c#h-{ۏbcizoʯ"xv{_S0,|ofeC`|R@簀&*>GΣODA4sR@O1?է~~O?PCjh~_X7FG(ijpx4+p54+Y MD,*a\ MEt9e"h Ă;u*yi2AaY) %&X\4͟^ˡAXL6? 苴H?6^Hv!ٰɺ髱7c1.^#T@:fW=3#\rf9A64 tq2h<Ҋ "+Pkhoo56xtYB!>woP&(c*Z%UȆeұalr\l6vV@uc&Rb3ZmVw(,6բj:Uv5T6":)vH+0 ZVWڥe#ޥ"hw`)g\uP^b։)CT@BR!.'yЬntÁZ' @]Wq bPsc0ώ;︱Q@caŕ /ZiaG`2ɀ.{@7Ѹ.[uxuQKT4xdEGᑵd-.YG<\1Td,օG"I4c FK;mWclO)`p\8ϻ>lѯ^ 薂ƥyyں.O/8ʌ{iƳtƧlp&F x&h4-F?rL,hIFO_wWoG{OKKW#k**K*JUV޾SWW }Er\s p9,>g'g㊂q 8SRiEiwRR1s㤀N=!}ܔ[NMdt>$%דhsf"eeRhʌ@F3Й1\96S> h,ĦLJJHo?|O߸WcF@c3 M36w}>Б :B 0ϸ'ĽԱ'})!Mx/u" Yؤw]fpf2\KIVDih_M<8q5/񀏒T |[C60mDUWGx("xNWg~#6$':߈Mr]_)3PO%y0'͎NT@"I@Q~~O?_|ӟs'FF #4c9J$eJ3!/b2:"[ͦs"p8X MM4I 5$]b b"_TH hp3=c6hO)Nȿ|ZY^g}}|g| }M5<VF4P ׅkAKonCa|*FBs4ȺYGJF(YߔAGgH崀ni+h"$A#qC9Ȳ@{YE[yeS]QWP]Wǫm54RM[--mݨ{^pH(RɰD"4NY-FQv̤SuZiR 2;[VEe:9Wuچ;6e븼s܊ZT2h]*))vJ_M&C`ʄZ.)ubAt#Fs(=rNQF?8J2 ܁V kr̒v˛1cqY?q5f4k=j `sc`kSTe2\s#KY9I2С,mֻu.RyMtGV{nY;eMnx.YG 4y$upKΡB8R%t`H4mփNqSL \6ӣjY3ft&#mH=#:X M!=($a 葿Y@zQ'\ыueВY4oIel*YeNShS,+5/mLYv yymw.% lK]=|=|ϼe-sN8,p>Uyb@56 T_" G@L3 wfѱ$.E[uP1/6gF7Gf666g4 X5ߚEgS7k0g[0}AP/;q:l2`a\:?.Y}EVE4fɬU sf-C3?hwNjAo3CδU0kȔgwmAS+0Of~4vL['M$ot$LCOz'-}SݣnhZP@$-) D@' 4# Mt\|VAW3z&AL3C =#\@SSLJg:hN4 q(1O=iM5?~JW^zŗ޹a~g)\};QWye^O~bLB *xyi>30Fq|:rg/!wfO&g8u7 1⚊\ G+Bs!O1OE!ŰS'ػ5_"D<>FA}D<&r?+O?R4}r]9B@+gpKď`'v!,{W&_?OOO>O?~~#G?ß/)?TL1xDӕ iY4j1:hAs9Lq:$r0E @M*aU5Yk9cŭkxe8T$PLl5u hĴ2$,>4L>V@c^>OORCm5 m i>SRKʌ5Y1:FmfA9MF7&/%gfMƜ"hPp t.r+1t$ ߔȻtMy-w WC}.i+.m/,²ҖҖ֒r(h/8ZQSU[] f vwu{$"\*Ţ!gT"5-vjZ-F`4h zI6LzQ;l4FEYnwZe6+ǕmeEj Nݮ:ƥ(0YR$N4e.y[YM hv&٩h$5.y .(h .IS\cUڄvaCRZ>5ѨnYq}z]()3v IıIL2`3K$Nbcsh<]xs̙*J>=vaM:hQcUXمNkeg#l<ЖEAI2t,r 1e=\d.qJQW8xVN uP:ͫX@}Cw HCINQmJ $\^ 0 ce;IDATVA5V:;VnqN!)$!脰A8i݋'NMi&IД}'ьR^+w녽^QG v-31 kE?ɱ~ʹ}t3#:`D=w!pXrguY=o( E E4ĝYx*͹7sss;Z/Xo7o,/Lomnn@)͍eCA快:F+]& -o [c{ ,oƓa ,Ó2ooA?C*K nPZ2n;Rϴ5޺I> gs;}\Q~{igcqk}ޱ>gYխN8b/]Hd ӊK%l/_ (JW, >-Ooxd4<a΅y,҉!۞ 1>k-ČLy 灀ֳ!Y?4z;u|N0iNI' UGQuzTX@wtݓקi|no00i=^˭j(~US@Wwx5^]-дUm^hP,ݥt)\ E[FAWqNuMwJ&dF!lإ$)ou)X.U[ 쀉3iMY3vd=:31rC^uЫ yu!>x3>Cg Aeg<@Ӫvٵn~¦U&¨u ZVGF%B s{{:X{WeUdVf_ϮeW!s贍H!,3^EBV03ϩSӊ SSRSrRRSrhNNF`UTFRfr$}&\(t  .^̈O8ոbƠ8{.)qBJ@B g=o L 2ib/rTq ڟOCp4 ߈<.. MF..\Wbcq/e\۳ɩ?=G>и!GxhRL h4&DpYCq#ԉ?wD3q>tɑ8 uᾅ: vև<1ʚ ^ȉ>DqS'|їO<M>+A~,cU BG_Dp38Uģ/zpQ}&O@c'G=P30>ɓ}БI] ! =~r_>>5ܑ +=~"a#0א0Q|wd@~}sQ% OѯwgZ@G]+C=p3p8*ʟI8[t 萙M"8p7}[P||w?g?">'~>= >Y:hDHq?| Gb:<_|O4TC^җ&~]W'!DMAÀ!#!C}.>A hD@_̤8# @.Sh=dL_"XF'_L.MH.K,D~˅k1segc9򏿤1шϤ ˧]9s*#zlE"_T\ZRIST^NͨJCiA)Y.Y=[x5 h⠉"30L.y-D4bV~YsAYKQi3FXZ啬6!""q4UBv?wv sü!bJ:Vu*^ N%ӨƵq@5گkEmaAС6D &Q^ܨ4FZ#Qy,5 -T@WC43Jr&K dilmve5YV1?C>aUԀtMd7XWį6qtY .6 囇l";7Myuh=i+jl!ίr -\Aچm15y%V(q-lV`e.-(g64.pJm ƫAa7:qvS̲ [ňV56A_:r+!h_;xP[ͫsk\np[nw :NChh,pgBJ@;=]½ jMTe4i =-tP>R !fA4CA@P34a5ywN %sf 6 &A"Jn8ds^ӭ{ew;r,L!ҭ9Zpg{cmiqmyvg l7evo}6)e8\%dg54P (߶aں~&zk>%jB"MxFhsir%\ C)R@<%_ >&eSiDD@~ :$zZk9@$.|O::c-b124IfCƔq4<Oҳzn@ `b7i |y4>UOUuu=>«꺽~n(`` ~CLZ^=1V;1DHF1^: mB}ixʙCNq5:ya*blgƠG7M{3>81}vӪDL6̈́]k7-zQ+өjŸJ:*DB>shpxphoY Gʟ `UV23YeY 0$vtFؗ\fg"yghP>'%䦥d&g%vtи:))G@'_OJ|)̤$# >G X@_- ojhBle{ϧe htT: h~>qq ANF\HwGc戋bc/'$''_ oN}r򅏟}=Ɠ44!|IQF4$Tg4I =\3ȑgv!fAj>}0b~s{.K1=‘O{cR˄8he`0)^ B9" Θ+v.>*c')p5S@?󇏞DDbQ:@@sQ2\m?{0w}9 fdD?heg껽O@σKQH0J'0L1)E{^i +q Pwa{폾oم`d46~OGvЩ N&>ʢq54thGhȁ`6*Ro. r,f64hhM @!LML.QD7q8 !,2OC7BD!8ҋEs0 "#~HvFh|G A3kNL-MI+G^r@4hpЙuWÀ:w;-F M 3DyYy"yE` "`ХͅeFXV ;: AC4dqtnEtvwv BGa6|ȈDtZRשACTFJXF=.R$]QNةE &A/n(aF:,ƃA%hXn J,RH%Ї >jc9F۬V"l묢:,f,-hj.NC64 ʕ6~ 7X nq᳠!u@rZ8}εa]s[l,b U\je[ -C|pi"BSbAOUjTXV< lFFF)jv [!@uoPï h%vnSkVN]qښ8E*v.@྅ {pFA@|7AC@Ӯcqdp=F Z@S@1дKnjzhF3TjسZaYF歒Y4gܰIn8gmaآOr-\:S붩vX0fՠ4izTgx|D(<s .֚ⲺR"k :>S>+g,} H/(5(* )E)`SSrR!gaIM5(4_KIJJ$D='%}NL~)jEw%! G@tfHY4N]S{-3e<#!Q{495wle"_K[N?p':%ڙqo_ <uē{߽o_I9Ӗ9J@Geq9!\MG:4pÈ5;F] z/,{lQO20>:ȗ<0 G+}87&EQY7?F %CISeDI!D2}4hAIc+M:H4y&٫p.rDCw?tAD:t xd/bш fw&II2lK)Xx663eh?93.?%g19"hbЍ.BG1RʮN=8V{4 %a@f>"i#ZnΆM׈c$A}4EaKn@q ’Җ"w#,k+-k+C{0P S8HtAwQ;[H4݉`=eydRVk2 zɨ75JVJJ>QrU#QVԡtX@ zQA\o$m&II2,*3ʄճUXeX5AWha] -Rmmu,HMYz &M:͸k&ۄХWaB13JM"pv~ pZtWn]Pc+-4†$#F9ࠅG4Dz6^ DSeVj ]SPj _vmvA]Yv Z=. .)B3}ld+4ZIN4'42ӇQ:>cgJ@4ѴeD@)LRg4CAֲAk8!-wVϝ5欣sI 7cn-[2c۸X,MۖƛnhE8]_4t3rsk}y6A[[_D}A?)`)LLh'>#'= v}o/ooعƛ7ҍyڜmeZP.O"Eo|?. ̄}h}>CJ=G hA؍;MJB֑ U0 sCSaD?gI7`}Fy; ȝ5Óǧ"ڧk'~5 @@ 3Sux-^ͯh+}hʛRuJz~BSZv{~]0mܐC a"UTa:Q~l~*y?O.ʟ!F4d@΄ƙ"a yP 0"~9 "iL+ .aMeD|84I2L4g&__zS/~bh߼xqFBrxM&z9t8Ȏd]Ɍ["2Θ/ڎAl.~4Q/܂ !O=D}\2 E?̀~BmsAY7~%a3L hg}7%ϼ7}ƻ  G-яL+M+i"i44_`M4m"ADop)?14hhRL "h8҉>}.爃f 8erH 5 z wбРRjIbZ)!i? >wht_.d}&t6hn #~  PRЩUL}vס9!^Kf"#/r5ɘQ xs-ʆr1L堙0tnaKNa3 KXX@.iAJ>c*q 4%j;@@u6t7RA8 [{X=? H8 |LPTjh&^kUFRkRZ:FQVԮDMQ/3HꍒfHy,h$2>C" !I[lZ mE\J-1c>jmIqtUdV pf\ !1+5qr1e6~ ݎa^_ +Tgn4q= `ηrmB&DJmb;f9m+!1~"hKnz7vpЂg$L4X@#~Ԛ}VQ04mp=-s%PD>T>xƅPys&E_ N,O Zؽtsosme{}{mqnmyz{sc}qacy~gsus}*!aetl /ɔnf5QP]!no4-hKXݼ^[l+SIb@P,e>)hV"ox{ δV +C1&Ao0hCHBVI"5 FϓIM2z|g `OC7kNB=`[FT:`2=>]W+}fΧ+-e eKݍP;xG앷m.E[VuT.ՀKwdnUCV A#UN8u yӄtz>mW3MZ9A =cs^W5ӄـ6BAl4N~s(`AFc׸SNnVY *NaHuq|D6. $BPr} ܼʬ]]v5< :n&04:<MD:BkfDm`45X@JGrPc &2&j82 ұ@ cA`>  hwt݈oTw$j1o }{i̟?_uB8WiMo8[ ϯ|_ׯC_>Aw{4? 'b4-J3M4A&::hȱ렉04Ɇ>}:)> M Ig:3,.+&5>Ї&&Bbq tD]L.RR{)9}z "p4U:'^ͣR%^nG f1'όo qPnT 4΀Nɨ" a}4PL - Ms4 䂃(54%9@;h(zХ{4AUW鬬 .ҍʃnnÚ hҊ}4y4-A!yJPϻ9=o,i̚aclީ1Y XKAҌV7,57<ڭ+Ks[7V6Volm,,mo'`WoX@S@ ]" ['ˇ.m?~Ʃ$dGlmm,mm̭/No.6杫AҔ~aR:cX.T,%Oq˻D|/ ET3C@(M8e44hq,x3zNPϙq}F NpA}6pp3>&qp@?0hhI}_WwT }nҙ5nmG3Mb)7`z>۫lqݲ: V-gm.eS9t)P꒵l[Qv!'Tt٤,xC^o֐Hm.jlZqBtxu>}dUfδ=s^W1ܤf֯ !q6` ev􃃞. neUcvZvhFWI51٨hL̗Bf uuw6767BFueSEEcqycQimAqM~!5`s~s924Auttfи9 ~>tbJ@BDp[@g'%Ft"Љ9ɗ +ҮNEV&^D\Jpŋ/^ Aq\ h!eWqF+1$x2iM 3ʈs$"&& 1hW hlᅱ.]HKc WRR2?S/}tG'_xSo<+O'ͤfRL>B?S=`) d,C>S2#g}RRNđ:vO}S'~C/{fyDAnJ?;v'U} `4|ѷ}!i0/n_@^| %I3Б"z^&ΗfY44SC{D .e4qдs&N 5Ѵԯ1LM&&8hϗߟIC3_b{i|!@2IGL^E41^ IX@'Q Nws$~&_.s-t?S4u2I޸$#RMRhF.߈ :+?AS #:'9)ࠉ.f嗶R A➄RAGt]C7Аh`eRFm5ґ1dT:.3 fhԙ :NQ ٨R)U+ZvtX;҉t^ܡ &#hY6hy4;vDh`@yuc|6H~%_oyI2[֛݂[.N;6Vo"Vol^X[][ZXZ]m\Y[: qD.*i$[ c hzeoA,F 茺4\^YuږB92L lVƙioz"RO @=:t&z,M#DnhF;ԑIn`ZO'u=h _?  ǯ zAԔ*;Nǭqk|n{R3kzF?` |iB5zeM^YG쑲RքͩQuy= 9)gdnE[8YMh5Km U6Im>^iUkFa=eK2 9|ޯifW5}Ɛ P85M>CUp?+:A-BxT8|@h7,*+rr*233|}NeL(N(JL3!b `ЀЩiii9irJRNjbnjR.T@aV*%Is&Yxi:K$"=&6sܕ8s6(KD4d=Ǥg`BP4UMD h4)Nw!->6-!rB\ZBlŸtlxJJKҾw/SpNgj33g %SF3A!ʹ>q]@G5=9q#Ǟ'mDԂ4n.1nl4S 'w#=p7>|G?ULntJu"8N<*ooЌg7|3o}?Ow?=)>;ާ?C}q/b?^O|ǘϱO_?'_/~e_%K:M&}Wߧ~C?}S7?]F|{g2~Ogtt>tLϱ9ҜXp6>qb~̥ؤ䒘7JIՈOBgSK!98!^~ -HRu5fd5_nِV\{ @UALB.EHg:=dkBF:;gH /Cwԫ2Sd7]mgeee[A_ؑWyg=єvooŕR4CV%Ue}@EU?Ae@U`e@E@imy@E@E@e`uPMW5 4 b؈v}#inlf7pZZ,nku:݂/ a1=JRR簻.Vj/=.i8-f2Ჸ'l>o<~ȧuBӺixFyxo&}Sڎ +i i;B}όo<0o3t!]WX6tufai8h Úް a#ggAu猪mFT(j5!YCPª9uWH݁i )[yڇ-aesX8hUE`*CfZV>=V<#+ ʃҊxXePZ3#Fhrz"$ 릥Փ㕓cSӲiYʹ=ҤbJ^5%ֆdusƠnrzFV hZBYy[H:o +gYF!e5#ceU05Aa= ð30"՜y1k7yp"V|K#^Jt:<:In2 _ԍ,%Eaɪquj]3QG#u(`ٰJ6`[%۶Q :f9FtIld[n&rĶ[S;샆ygβ3g۹Yٜٺs{vgѻsþ:흝u<@ OJ`ܶ/(jagfuggqg3Yv,1ΝE: ֝ }8wnLܜعܹ~ڶ0Y֬f3d=c\ԮMk5l;斬Go{u_9/ZA˾ed#\VUh EѪOS.s r nyxKn޲XusW\/o] '%թp^^t-m ց[y'o_|#K>7lg߲ /؇n,=asߜ?lZ:֎9[缭+ln5 fVwϻ||K~R`}-=ߜ7l2,Ίcgŵ\ro,WwV+͕͕Ҽoqλ,ܷBa|&Vͤ7ZL)KB'd޾~V[_cKwCsg}SwM=*ViykIYKqEkQyKaisaIsA1_ԔWh->+63zAywS]]]ȩ̭A\=7deVgTggdUde_Ϫ d!yqZ 9i)i^IIOJO˾|9/ BKOKI9OKŤ奧geffCo7_gϟo鷟z?oz߾>4xyG=C ^Axc YI_8z#F󧎝xx ?r#NA8y 3>EDB!Es _F%ĉ_8RDűG_'yG4GNBM83/=؉:?% ?},D=a$zKC&8n?7yG~<۷߼o>NOubo?Bxfxob>CgЩdy^'g 'N?>`;`;`;`;`;66AmIENDB`onedrive-2.5.10/docs/images/authorise_client_before_copy_with_arrow.png000066400000000000000000030717111513710110600265040ustar00rootroot00000000000000PNG  IHDR8gVsRGBgAMA a pHYsodIDATx^|Ez/I ;$*H+Mz`P?)꣈H;?3߽ *?gg3;w70{oRRRRRRRRRRRRRRRRRRRRRR}ub@WPA)*[4-%%%%%%%%%%%%%%%%%%%%HRRRRRRRRRRRRRRRRRRRRR-%%%%%%%%%%%%%%%%%%%%HRRRRRRRRRRRRRRRRRRRRRj@[n _fx i<ԍ/jD jM@T~뭷MjM6A"FhPch"3?v{2eL<СCkÇ/UjQRJ(?veee]3g,((]h;ph;k"%%%%%%%%u}E3ao/_….e'5nݺM-ԳgOhɒ%wyRī3FP`l2Tܸqڳgɓ'Q~zBT$lILL0` 8p e%CWKPJJJJJJJJ$1crlh%KDaҥۇQ;ݨ>P-TK:tp󟂂3gdff"{>=z4"M6d=S;b@_D'x]׿5t '~lvڵkܸqf͢/;wF+/_:ӽ{w'N@Q2Zxǰ 4&L0gΜgbcǎ R_' (;~' Hqi˥$6Rծ]G;ϟl(iٲ%ƨY&֯_j!" 7|aÆc~`4ie˖PX* hC2eʌ5_~A/hm bԭ[VZؔ{K E={`x9 ;wҥK8pcT \r݇ڳg5jPaVVVfNܠASܽ{5kVÆ  .`_-Z8{,FcZ@|?w;Ch06n܈]:t`t^֭[ll ͛|)S4mtΝ'O$haӦMhUVB׮]c_"1'p?~#ۅ >/Đ21]t>|νU6H(}ݱc9g g̘qwS7 o<==gff'NqdݻQ(N.n@z%0:Gŋ)s]B~?F;vĸGHN'|74hYn))))))))0dʕ+ ^y gÁ#-A>of}l^|?z4_xӦM4hZ"//"nyhv8JNNRX"߿(D]TGL{njU6l(|p}>ZV-4E({b5jƍm6~x 8-~]1꘸zRRRRRRRRR7~W < &O|y tɄ< 6,YRTĂo"h+ G-[vҥٳgSI2eكsLL L8ףq*)d@cP"i-+I%)Ph}'{.(~tmܸqƏߺuBIRcV 09sfiFZZF| 7wGZs֬Y h?cr).]zǎgϞΦl߾= ?hYtmۢ0޽{~ދ7o^r%kBt q Я_ロp^4ձcG4iӦ˗O_|E䠳@ȉxRRRRRRRRR0ѣ]8p R1yd2JeʔQ* #=alm6T'?R]- ªW~ȑ]vUT #ɃX4pEuޒ.14W(Q{VVR\u! ."&`ӊuB&+ڿ?N.㊏9rҤIcǎ3fy"%%%%%%%%P1f=p˗zQ(F{tRZZZJJʙ3gc2*Fa4UVa9|%K.\^Ҩƒ]t͛7YZ@? ?+2y$-31y׮]h_ h{5Q7%%%%%%%%%' 3ӊ%z&Ȟ-QM yd@cpHFu]o 1ؕiw}IkIZҳRNr h:=z~Up8I:O髯3ի}8q":HIIIIIIII"agJJJɒ%ׯ_o}ӧOgeeɓ׿h^3F}rss1.߰a"kժ0wP" t۶mTBR6m.^i&áYf.\صkAÇG?W^ݲeKQAΟ?'`$Cg-TR%s Zf:Ľ^/ 2h>Փ#g)))))))P :t.XiM:3hLBƅ ;*(Qbǎ̗@3+W|ȑ}a +@wq~`~n:qD!/1h>!!cnZDJJJJJJJJڀ‘#G4 5k)؜;wn˖-gϞɏr֬YOoٲ{ưECj5B.]߿ˋ-jӦM|| r4iߣGcǎ=\^^p_D;# w^lhMݠMKIIIIIIII`,;;{ԨQGrʔ)Sڵk',P(33sРAa3:t@CJ5L=" ~N@$/^|'K,]T2BgbtJ( 3SVZKX0guuZ=(SN<)X,^ O%ꓔMb(1+=ct*/Q䠤E~-6ϝ;_4_>9|XYO=X__Pn?&^W^_Ϸfq xgʕ+WLa}]~.B5KEW75V:[e ͒""}رc۷o>Q'9s&@OH:~` R֭K,B1Z%RRRRRRRR0*۾}ov1@<㺝;wRK.sEz Y)wڅƅMٳ']vp,l__hr̙իWZlى'Poc]x M#N!NTByQ^tM\nKkAyjǒ*|ȧ.!"0PTraBfb4{ ,'8bA?N*^WBBS*%%%%%%%%W pr^ 4ʥ2걟(DHE Fk#R%Jq MMԨVfիVYJjYvnLi˔5$g$nTu)Umɵ"K >4t%|^;L 95Rh 4aNN2ѥ.]LLҌH&*S&lq'&e֭$*(#C(mP3}UlY#58ʙʕ!ʗ3d<R^ʫBXR11JTRDT%4xUx:ycuv>'xZU:zb;x lkcq]V*mn_[mvE#\|@ɳ{[ӊUJ\]lͦqgb l VWFRu19S̮;U J}0ۓxJSd],D]L3b 0@rbp478SU7'L0CRVNh0)=l .-1=(ɄљlɕE<T'oRb$)>2Xn M7epz#qޖ=9vOŅwGݟieX8b /ܽdX\W,{z2^lt],|j]NcZiTu退xۂTՍBVRa$Duӌ*TPVPa8D:L>Qjͤjt1L baP#yjqZn2Zfl7,F?'Sm=u.Vw՝ťY_`.fG$coMIQ .KA`Kc2X 4KbRGh=(s }LM FfŨ*Fs-amlzQ1b5vbV\ Jި,16UdFz:6+RaѩSThmM o썱Ԭ`Po ֚F[-!:Lqz˫ݫtAb,5'J3 ..ѦW6V59q5f/7 ʄ7V5Ί6dXjXpjmu̎ g]ƞ8il&Uj4Q;vz 6lӸIVv]}]/Y;sU79W~._FG M?~wͧUx]wV~֊^ꟽCw_=T_O])Yag(Uwc|Jl{5~Z8 {hg'ȰvQӧԤ%/>9ON| 3~|cFxdǍ0x@yl`DoνЯϽ9#{hܨCӥoݻv;r?УkVڷݣ#>}C?Ӻrf>ZqܾW=+nBk]dd 9OĘjrnۿ+S |ヂhԬġ|8`ye21Wdj.,5L s }h٪)Zbf{mKaV[-v3g0xZ$Y5-VDFd znp6|;ﱻhp \z@!2>ݞۀz>/W^_X?6 ކ؆AkTK5mRZ"J*5PrWIYyY]nONwڻ}m4V/|6<xml\+eF%0*\{l,Žv93l_˙dHbOl*>fgb'E.F{3U(1ۊњTiDo ho0Ѡ%XYkc:5X42#4P%H ADU32pI F\F[3VEDsa@F  bCnK3Wb'ܩVWHԘ#Z)h(hę*H29 W?^tB!В@-d"Rt8fdg:e,Tܴ6WVgJ%yȰ6B%aIBS`_:f;þzl:mV[=(k1[b1z >KT5ѕF(m `g^5hY8۴m |Mxns&51F1Έb6cth)c 5:c0 &C1&h[U-F쏗|'cv4%hȆbO ߉:{C!ѶXm`Gm2DTYjc'T3UҚH6xSEX-Ut`ZL *r*Ek0UWRt\ Qц5Q1TRLpx|ZjTLK©:i\>:\Tl*e++#SWdGǖCiJFTG#xQ  󌺅? Rt65o~4YPX9?z|j ZH ʺYRLpGU63˻l:_> *W^85t]TT7Xm5 Ugw{4޴Z$S?^uڴnV-ř^j˞Y|']|e K翼z3k_,Xb ׯxdr&XKhdX(YBd u+Yu+YW_FɼYZϮY6Xu+PYdV/z) QZ <):ܚe _^Ve ע)T\캕 ^YxKzγky+_zvs/|r颧Wdɳ/=xaLYy?=y)NyvyOMzz'g=c ͳ~bƸfM ȡ!xIi;Q> 3lpqЀGz=tu{nzwѭ].{uo޶]:ֹ2ݻj֦U2ݻ٭.Zk٩}n^r߽mZ{WVV^ n_}UbiV7LSU|(@~J?o#C C?^K_;+1UbZtO(^:+_ 04bU 0X*wFsuk-# U͖qꕚ孃xVbV^VS^+F8jjΚE 'ʑnW-6{BpzpՍA@ʍbb*6۰J\M1=^DnC| hOLb@sZybZ9.oݝmdru hjZp t8E7t&Q-jP"""J}ɌQn@kNCTND,f-VC%1f"3,h 1k_GXיk#]b D[16fC/т(k}]b,#R6łp*q*jV4PXKYecl"6U+R!Z0T@/UU|J~*]*<SRTQdj_H[]gQ FE&V-S_>:lزQ&\ ;. q}ힺ.dFdiuSJYƯ3* }%j6\l%_^v{#9h7]`/3Fŗ[>rxO}\. ̃oxCSoZa4k[u|*t=Wl=O|Uj$ԨX^JiIԾݳf,^4ϟl/Ytj5ziުs)]x+y%d`{U)&RfQd[yrQ nX) fs,vK]>oJ='W-yr7ٵpD֥U/Y/> Ves,@bVhKsWH'8gO.}I|y p5t//eD+yf'Pqŋ|OK=/͛ǟ7uѳӐ3kĄ9OLxjָ'f=}fM5sڨGΘ2jڤG5C6؀d.O4|#>͡g?tx{<#<0dyν}_^];wlۮuv-wm۾MNnVRV];[׵Mߞz۶O}ڢ[h.YY-Vmqk̶ۜF{1FFJ1D(MI(1qO*f$F#|Q̏.ACHh|) cZt@pW֕cU4DS" 0W 1& 4UAkY Lf[M} PY7njNhy :Ό@4:0/GDT6eӞ`u%{~]6wLA}PS˪j#p7J 9tc`7ZYv\и ʔd5\)|ɋVD2.bFhyY4&HzW)# [E[b^ dg 'U ~W-oP>*"[!:5Zi]^uJ GV2Ļ|qP^PR./l3cju92VaRēEp)**G+r ]1:-ւB8t  1XܚaW >[E &[M6^}S玭㍯WQMkn^^r)u&ti-/-Y/=7{ O,[\YS/}o.zb)6_|j⧗4gQlג+[b咹(ػXxE;ǛR?]//{F ÎW,rU潼lҕKphtEY#.@t"څBOJ9A\Kg j-~~/Z03{f?7녅3̙2ILy N3{g⓳&̚6vƔ35m 2S'O5MSI%պd[Kr疻A#.QWwᆪ\({enww\E[˖rw݆|ngZ[nSewFV@>Pr;PCG 7撷RVm7s˭N@aqMr"E +[onƭuQ%V©%h‚v]n+aZz+K7 .fa07j%|bfuIqKdnJh®4MQhЄ nM+| y:\9~RH-Ayrn+}ѷ~KH Mew]&Kn.Mn,|[r\+yn/NK.p;KBŸ RhuOJy[qe) >;tYvH8e#_pnùcorFP׎Co[4TJ7uѷsH+vG% nxUK2,++8Mnk83.#5e ЇƎ0zX=1#3RIǎzt=`L;pX&#qc 8~0vEXA~|Љㆌ=hh< ?nZяC?6~ B CPw>a`F:OMظ1)MEǥfq\JD"ʌШ53CÇ< 8rÃHA ܿ}~wOz ݳ}uU.y;{>}:ҦS[Z >m27enZԄf U^VvfJMIl0-%!%IBMOhڨQúnܨ~jJbrRBb&5_Y y#ģnrƙ͓7Kh*uԨWvu&wRJ,i)qF܁sm17b[2?ŵqSśM),|} >~ܢRM@[o%nmVJr0<қtǝno|{;>oAaoGw=JwD3J0J %,QQĝwsםDuR+(ywL!$(S-mʘeKc*y*wT[%q&~Uf@ZLY>Mr!MVN]:9.O+jv9Ӯ<5ZY@uS5STmXA( Me&v:2?OUP6!4cUQmF:8@L`I 0Ւ4Ys,Bz`W>𢰒A8[A5*s3ab+5Msfe-b>\fnLgf3klk\5:XyȰyT&g!Y5iknՖ8X׆Ʊf4i| (CiMVgg0R=bNɲ}܈O<6bQӇ1fh:rZ9 *rPǨ9bѣ&9|܈!cG=b董ƍ2v1#G2v䈇7dF1|QH >nÑP3fp5"2h!6`=9G =|U`8bdF-#F>R0rðsÆ:|G1qԨi#FL>bz8#FLex1T2r`)ZEG6bJ d)Æ?®ÆO:|6YMX#^COgؤChÇ) E:Qc"džajN`!CǍ5iةcM9 W`JP6bF4a̱㦲^8txq?bC N>Wcn1H9|gh @#&?@s39^@9*{C.vF`"uk>6/ x>{Л%z; 8D v^x5O>r4h9SƎ2~MO~|_z/}qՊe/X`%,ˀȬ^({ ϳ]Q]t/5]t׭Yļ yDʺU׮\RX[F֬~rC̪uWbs+5(\hJBTS!]b/!fjij*P0:/|"!X|%/XKWXU+\dҗ^zŗ^zaK.^_\<^^ziK/= E ~…>[Y7o[yxO=7g;gSfxYO=g͞= 9Oϝ;gܹh ĠO? fΜ>csxfS'fFO<$nQ&3m)#FMGVPݱxh| cЗ/^.ň0A\OAwWQdgat9|.TK48|" 0b]'3gKhd)Z]JE#'0 eN ZM#Z¨I0fd}F?N e'5YcxVv^}VߨVizZZX^_{29Wk k|gd.fβdܡD_lk+newx^G hb@=hoZA4OVոDGkv PCTMZ'5Y.3f=+o@3׸P2D[No͕ë pX :Zݔ.†GhE\ xJԃyͺY&4sYUH%d=+=dQn9YvoٙƬg{ّf=̀L8M5,}aP-(EFc?W&bTe]LtMI5'J"#`ٔgvW-[lŖ-[˯zrʥ+~r˿vJ- hv r\.XkӦ_K) or(1%:Ad%\+T°?B#Q *M +{`o&u5$&4aAI_@mAh*" nS&pkG%|"~?QK/^ĝuH|_eg _Yb iE$" ͊l'TS!MI:zm׎ݟ$ m#RSԲR+W._t3WΟxٓ'O=ugN>}ԙN:K9sTB^BUp4J(?ܫ˜Μ=uz 3YQRx OM8y] 4y ?rD⃑&ߋe\`&oٳyz]j={ܹ x]Ν=<2΢ً] P9^8D"{9} /^؅r1.g b.W~"^99 /]pK;{M~tI~x1%7 U6vMq-(E# x)U.@>=žTMMb^ab_ z+F 41Il/z ҥH§ӄ GGUUUUTt:==~>ێ:x<]޶.O\G}׬f:A!Rʑqd.#p7jW++dMp:vWK;0;OZY6W(^f@+F3#CnucٞfvYgԔU ؊$̗N6{4ԚLXl|.f@FDPZ㥒j5Յ[&Mٌ͍`{{cJ08MٚvPP*v0֦lo1&8N9Ҥ˟qON"9lU>)JWqBQ.W L4;JfFk`VA٩ hBc@Go٭>2DŽnfۼffE4̡b`ӟSپ*-]Vw\'{[fvMUNaHO+Cϵ@a.l ;ScX4W'ѝ!P+4+,l`rfؼv_<\M 1>o1Q{Vouv;I՟zkt :2H[{w"G ]NCQLy7E =$~^x=di=@7D<.ծXz W$(}ja?bY9:zH_=G?rW C) Oru!fS 98al!">keab?(Ƿ3o&W*p0MoN;ԢP<΂_ 6o&$u:; .!J4&e +B NX}aiKYSZtE|#𽀷cG~]/gmر:@ %eBd5A "Q3gN6\ Nr|TUҤad@}~R7ߡQCUju{.O[?sl|gOfZ2[;|gq͓GOëJI؝ օ; VdX(Ɍ昜iFGɞ ֳ#Ep5UgS>)Dlt& L08̛%lf+hNg,fB‰6]ǀ.[kB9zb66YC[sIDL#4܈,`5Al!F[I [L4IzO\lJ4_dN_mϯx*MX!E_|կn$Ǹ #ڳg{޻cǮ;vk*i;ڹss.!Kgjm,=;$D"}Ggdʔf[?>N]rU6^ӇJݙkgvpzʢN`6tY.,2ͷ!mH4AՀftЀN6yb@sB h;3MZ0 F&і[cّh'P6&ZA"і&tjL̍<,&Jb,M=Y  8dV"N sB f:+k=/ KF;_8Rao(;Kt`A偙t h%C%/ldZ(1EFcśau,+JsĶx k\x2͞p"h| UM5F{:dZ=Yfg˵P=g@[xJ*ohתۆ ?]xi?w`dnѲWܘ ƅ`su no[w,ʙti32q =`=SJ5ֳf@+tLD0)áŠL6b9ڀ6;Sq7ʹ~+1h@35dhf@Yr[l{Nqg %Ƙg575ؚFI1|uxc,&WsV&h0'wVAkp3P h.ܘF"s(Y NY67#lMX8,&7Al[Yhb:0cP9WPe F׬V2SM#mx ["h=3Sc@ahB2({"FgM6‚/\TTְ Ld5fg&)d˖@ӗ/dO`4Fl)`0LT;L퍷љXL5W*8thY^,tHwG;{-`*%gΜ9qāv=hvOK(%D"H$I1=rbCG?~ %{\'25^q#GtE69ݭL؎N_G5sәijjtka@=(Q hK; \ìgBc@b@Yow:P ' ;˱y3lnѦ;lf4k]],}u:bCW=8k6뙯@ɝbt퍷C2>(Sŗ֟={lY-z^ǎ⋯6nDgM;{\fϘ6(ETrܹڵk߾ܜH$D"H$ _V_d:t[Y]rl}(¸UVܨF& ^Ow\GWl{ h;76rw`S}.e7ۀ((t[qV hz&\B3Z; 4@;`jct.ZYـ&YAsZe@*AZAp3Նw`o?[8Kђhq-fkdT'bfӢDf5 (lJ/醊]Aυle3cM f;[$8؈ΖDFM..k^"AuԅG)H|VZq%Id= h|4UaLf̰82l\:2Lr6|=$ؤɝaPܵəٰͩ=;bs T/VfD. P_"isnoZvYv_ßnگab/X"T>x;kO]+ cvfڕjk1>9R^Xk#Gسga4N_/ؤI;w޳gSȬg.]d@y…ر ѣH-H$D"N0f?|# ؾzW8P5~*WnXJFR08t^NθX+[m#]J]ש29ԀfM8}mmڀB$hriNOKBc@_)0a3l h}@߀NRz64ٔ*Bg !Ksh+G۷R|1w_݂ ؿm;NG?zCݻĉ;VY=W'_Z|V_=Ap kФCCj=JGיyLB ef1 h@b@ڃ.waՓ5||4|N4 Th:"@1<Aej@|TE08̫գi()[}v+6lm072sdmn41'tઓ.ڋ*4ٚ`0717A'lo 4FQ p(hC݇k#ڞ`Viq& |3.Hs-IW ew0Py(++S-T#E]i L7:di#6]Fdd=Wc9y6_6(t$bEASW H͟寑W-:ft4C stV*K u4ndl4ڱ{ّiZ=پq5G3G(d̰N>ڕh[m[>pо}hD]}[lÙ|Ο?/arWPq )wEUAC*/=\u5"mRŋqڵGYH"H$D"%0Ty r׃>t|?~_WR[%^ոc֮4I.F̀Qc#+lpy|mq\l3[C@4̀vz[|mpCiPMf1O+;n (qДguy ȀVtG;YYsլ[^&M:83N>]}l%NȰe:c;xUκBSXg9l!@<_m#EPA3ڛ:hCs-Th Ŝ f=+3{!afJ )a`qڙL4Aƀ[C;10M91ln {!`K`Y:c& ?ҢMoў`r$[\),xꈁ "̃F =ΎmefCS>/as%;}i&iij1;0Z-UprZUW<-H4ZLg i@,3YMvV!|gO@v e,}3UD#ŧd ̘sgdMmLd jY r(ږ W yl=BZ`3_!Jlf_N1AR0ljH!YhŠ%"a/LjKϱYZϵĶ0k 8Yf/э^պV;xc;"˿ǀ3޼&Zpx34΂g@ӒW5Og<~jO 1 L1itl&]F=Z\k@ hz͝϶:ո'C'_W_d'j1l 8՝WH09l [rE!wkSřh\l51ݔ9ԈM߀fX(tXE6&2"AUd;gB2u ݯF;Й\(*4Ƀ.AS8pr50&G&Є&¡ٓmd ݩ̽U>97f=a>UA [,,\b>o=jkg|/\i\dGebqѭD+w{ h20tq:DBZb!Xc@cr=~PGj3TؤHBUGqÑ舔A  .P*QoEz ѢNB8SJN][ k6F?I%D"H$Ur4vnݺ}M? JC͛ҿ#=T H}غy{M7m~_F~ٹo[~3vδ[RmcBˀV\ !†l1 d@ Z>*n(T; xr4 :{oݷa9_No\1632o{_\!D!܀%4QZπV*<GbFęf=:3͙L``@+ydT33U]m@3KQUWEDnQ9:40ۛm 1FkS3ɬ<@VWّcf5 #, hŃVg1әl@as#3#BDYDGj43EP?otkjr1;241*-<'7Kr!"Сh f>=9N='Z*4&O>ޖ_:|yofM'ŀ}dѡ6֦܀ `~JNNMMMWV̞m;PC ߷#6q N MRn;^pyڄGN#i%HQR'nKq#:;k6:12DJ$D"H$74X,F`߾G3 fQ(sh10a}?wϮS_h+/ښo|گ>~ߟa97wv{;bKp\6CBxZZx* e@ Y =0Iš>[9† &MFр0,-1[";`65sZg-i5t泛L yʊd=S.@q5> 3! H6#F`=&Ie4kv@;d4M5YjB|BFs$B]c@$H`d5fwpd agT m 6UYL[Ek䐏 l v{jo ̺1\IDvop|sQݗZ(40:R߱lIF[27i 01\8uSOi׮ða#&O:id5(۷_n}׈QaaDZ_RPp{:u hJ@JDP~K|} 8k~7‰B8ko8qJ"z ӹӱW'D7Ν; ͢ c+VC~Zrݻi %&{fk5UAcǎӨ*M!H$D"иWܹ{ӦӜzz&h@ 6"ij 69t>T_wmS#_@-a33,v$ĸ=)'b~tВVANAuW'Њ\,Bc(GBS=(F3̓\I#_.}h"kE‡%!#ŬJ.Ms v`]P–eCd;^,f7ĝm禳;-Bo\ovVF NKŝ1&7:Ҹh$lK[?(^/^ڼy+E"GQΜ9|ԍ! h M 13tC!ύWet!:+Wܻw/_b3oFӦM1TDҥ?un:G\y\]v=S.\n4/:xS3i@}7D"H$4]C?t8R%*?hpYM{۽{/_ذ̒fI`Z Z4u,c;r=8f]~ɇou_~淟 zz::{c;yq=q_G$C޴ߖ=x !ʓ Cg7ef8p4?0vWKlqZ9H>hg᨝@L39R͔l]iVN ڋboّd%ZhyfW25:E-A |aLlKDj.R݂fm &[S6E{F+t$`3 M6i4kNDYyXZY$g: ]9 <.H"}R-Z|^a@k5hoٿOf7HqkH !/G&[ęA>ph̊-kemˆ|7͌fYje[|[}lm吕1rfi\.63Ujtl`{Ruv?+hqд\vo (@DIhbJ^Ѵytz[Z-.ۂπL= J2X֤k-w{2&C!Ԯ]{׬yef|bʔ'N4i ҉Xf)HN1kO>_|EF_eCk@Ǐyĺ<';|+z3YFܹs۷o\'[vqAa+} tI#GǑ/(8駟.t2jz+iVV6Yhs_Ξ=[x#_L/^%h9.Yd߾}K#\ov۶6{1g<\y+1S6"38~$nFYMnxD"H$ad0D~hN~ܷC)sb0alvF7Nyư{{;{:b@b;|( g .['xh!o@Ϗvn@fKӤy* `:g:S)lO9nd(tZBRSfPS`q$+HHS6/aA]j-Lt"rlʄpLH dD^XED;! g"=9fhVܩ& N61'W\LmX@C jݗŽ5ڀ֚Ef.k3H7:2|گё9e3L &ګzX_(P. ԚBe7C>,;3)<9?' - g 2'>%3f->##FG 1Q<͞:Yyvo~q(Ā z~= o=$̀Na3kbi@ԩӋ_޴qbzZvjJfJrFZjVzj66Rzt ӧϊX$_~M4" 72vcǎ&7 <7ke˖8p%€}v3˯?8z]C% Ï_/YO)K9&2~>;wŋ={K3g|WΜ9CU>/|LTOO[d9svʗ[nƌ{E!ڌ{t߾'| Ϝa MrJt%۷;w^vvn6|u뱷Q&<ТE/0Kz۶mK.6mڋ/9:wye|(زeuޫo>ӯQqg͚oA% ?#>I?H\jh͸ӧOG'wPf1Xl?f<Ӹ}@W_}/ 5{G">3gѣI6m_<Ȫs4/vދwD!35E!iNrrkL?H$D"H$\0'>>gμ={T0+Vz? R9d?Rmvg i͛?ׯ׸zӦͿn7wAFͪV՗ںe Ӥq?zĞ;0rт٫_f@/}UOC#}}oK *YۧfFrx<,{m2Ph!Fs!ռi|5l 'H3.z h}M^͕McTI&WЀVX!߉w@{ .:|A2|NU4sPDn`z%ә-B h}Ȁ%"㫚Wv;OfM.nfsdXeɀ6{\dVx3Y7_ CfY`'O3=OR|n¦?:Vc%_ñ{#q P.EՈ67`r;>zkpݱ7 g'=-o|ٗH)?f!k5jz7Ϝ9LJfˀqaKp|7wÆ ֭C0?W>kȐÆԩKϞwyo͛'-^1?(++gc kfͺsbeBnZ֫W;Μ9k̙:t6mɓ'M4zW_}I`H޽GAKp,]K.=А!Cڷo?slɓSRСCQwǎL2knC;t+v۷_g]`:/oA8eswΘ1ICZf̘q 6 C|7ĕ;w.ή]?lI?#9Vͺ53eiSg5ߤJ&NӦ?oe㖍FԧU]떼^o~ipto|O\0 ;b;_ z TB|gw8|6Mڳ[6w.@م-s Ff'gŞfs}v1zi֏.܀ ',ṯݝfw fp3:2AYp'Y@{X&[l Baq$YIHú pjع8sWK0ŋX)TD;._+.)!9:+lh,fWѝ[›iprҌt/02K:h=;[tj | d]\Eljmm\=3V.ʳߒ}t|d;|؛cA#}#8\ Sv4- KY=/}s蠊Djm4W>{Ͽ e@c(gΜvoٶu׹N?s+*'O-(8yŷzAF׿z9x A7ر#gϞmv\.'O>}ٓ'O{o!CaץKW>-ﻯ޽.\خ] /|/={nĈQ}sG9<ҿU6?V@RSS'MD7nܣ߹UyGM~ԩ ~Ι?>RgΜY~Qcv܃%ݻƍl+W/_բEk~Ç̜9;?Ml dž!{[c:tx·~>u`̘q8}:"Rt?N_ѣ aWϞ}۴i wd-\sg?S\O2?䳼Vd@?SiiYo6XAzdAǎ\>ͦgg p<}ҥx-0ư8ײeƌ6NtsÆ x5駮]aȎ1=22&LyGb4@ܹ30.;Ln2n QL]1p !ݺXʎ*͆|4^ .e˶kן;Kx4%D"H$ ~1N^eZǏw~lb| /,NII6mQB)-Q 3*%2q4 9#Qaæ'fi$vzj֭[ḱ~-wh hC< b Q3W.} w^[k 9 a@#tV gru hWY#;|!L >P2F}fmseꢱUY6Wőf![qr?0K hz\6?N8R$M1I7b@*^)֠,&,H`g bYg TKπdnQl\z :lMg-FȝfYxXJ35rd@&Wɝѣ7NqyC4i>6LJ~ے ٳݻ#l7tgƍF;wYfϝLMrIM:wAtK.m߾wU.,~yy2|;wMK t|֭[.\N>_`,+^Gd VZtTRe@Ɏ9ބ  zNz:ukƌw#ZӂD"H$ё9snժ͚%b1ɓ}vABBs ;@?|x"Fހ#CtRu@ ?oܸ 72[yٸK*gg ۷yï(KpZ]7an/hGDpgYπx&1eg@rKF64-FL7ivw͙a]vZ#lhB>3v&GўRG͓ƞt0Lu h"čeFsbT& ,Є@pp"c^sF}:E"6Ų Àf@NzTwٓ 33:J'Ј[/_ 3)6c:vHncfY|YH5~Ua sYzX( <-l*tȴy"L^!h08Q"Qw52QwF՟ǽZ=b  qfa_+?7/(nGˌd Ts7R6N>ۣGߎmig*8q!#7j4w><}#]^~ڹsPC]E7{:u}?Z#ҥW6o޳>;.^ܶmWb׋/.-[_{퍮]%ӳgϡu #rʲe˺w};3  hRǞ= h33?SVݼyfy`'Nf`\aLˋ#fgW6>@Ϸog>;F^SW޽82x'9f̘q3fzw 7ňs(sɅ ᆪW_`cN!Y{W^ziiΝ2dȢEȀꫯ1/N:O t˖} hFcH7:wګW 7dp"8ht/_F$D"H$#dSdjʗ6m6j7Oz)?~)SK GpC6iƍ_~a QO=9YBrjkլ۰AӉp떝H*:|Ç63w{ h܀14@5 m `I_ŀxN._k$'Myu3p ujI(6wݝn%mlʳ͙aT-%"}XݩhO%5\if,]9ɀvF6Y=4a*zWzrܠ"q.ЁSѕ"`t`;Xs(ߙx =Հ{Ó sYXdCCٙإf1 f= Th5gљںZ.q5|9fпg1-Z[s 9CK 6,f` + ͦ2-Wl+@?CQ\`37dNM:gY8c~ %>yf bٷ`ð3Ngd-A3o51ࠁgzקsnG}?>l߶%VnРѺu?X١<'>}KOϕ6g{ر믿oQH&={^pMv4zѢ|aX_f+ aXPݭ[fff~'kٲe}g=#3g>{ ;w{o~䩂ׯ_2dqѣa n_ڥK~vÏh-[}@.-iԩ}ܿo~ $z׮=YY4?++Gm|YYY[2#w|ɓ'+A>۾6gz=J{}|M<9:ysp^3fѣ'- ]reΝ_ؿPjj[o犐^{ld?Z裏|Ŋ;vLϟ??dȐ^zXxW_}=yN! }=zػwΝ CP i hL;Zl۶EBBaӦ(ٹsyK$D"HG A3 ƍQ& +W=I``dݏad=uk75!dFHzr^ZjTg)Slؠi&?>f@%8!k@#@ hZcƏ_4Ce@w.4n@g8F'4A@؜9Nwhg`q;urx2d3̴RmT;=wf{ўhug4ؚpDa@zБ`w>Y; kp6QOV:m6[YBu.A vrve[ѕGљ*YY<3C&ԏe3 cvgf=4y>u9"9L\f)jXigՓs[Z\Y|G; 4-b`0lqq'ڕc;3-ޖXCcf7k 2|ʐ- {fK]43a&h' ,Z.fo+u8/u3BI|'N3Snp!9sWt?lNCGSR֯yhذww}bÏ=]z?kl2/_2bzD~Oj|8#y=k>l2lي={۷8+p 2[nY~Ν;/_JKK_dq},Y2t_tyzO?Ԑvugf|b/_/{=0lذe˖JAA3mF~1 m"E،p'b~?^ӧy* -?[صkOff~).@TH$D"#@ }Џ l:u>0G!b Q"ݻ'A@1fMM@-[}6RƔ36<<*BhNN%!_}f0z}}q]|t;Ol]Ѿ+M^3mݞֳӊ>2s鹅|R{PkV[,pr5@1C=h`se yVg&J,43Yt3δ2\ ;=YfɲSM$;Mv)fg͝avigё vl׃V84X\lQ;RzhF>`|܍_蓇>Cfx4>}g>]tyæ@C  dk׮oذkϟgRX W6m>M+܀^bUnn1c`޽ 4{C 0?[7xa#FG{3gfff/^1 ,С/W^y5//=zh۶l<8lGu֦M[kaAsキcK.ҥ˃>ؿ?SO8rJ1ر &w_G#v^ǫ⥧zkn 8Ĝ9sOd-gzիqѣGˬX | :Ӯ]Gu?ܫWAn\rS.?85G0l({>޽p5z?;7S4/Z(?=wC?ҿΝ4x6ڵk6lHK_=#<ҵkg}怣~۷/{K}\s>ϟ?e<ٳg#~Ι3&pxp}Px9GњB8o<a!«iӯwܽp3ouqK$--cժ'NBH$D"=_L@e1ܹ /^B+b(ƍHw@=pݵkMy獿 ,ϷSg<̂~ڸe_~ٌ -l&9<6Wњhu14ٓHّnvdYFY -ֆfV,)-Z fYl$ hF"ԏ`/+;z4ppY+;܀fcWwR=9W5e)Wz%hKF^Ax 33[95Ƒ[M=j1:SU`ś檒œn4|df4E[ͭ9i9h̴xrlq>s3b&4ifn" 9zXͶz` @6CF\j#Gl/X :Y0ʊ׬@)ӟ;ZҾbI Cg`6Iwl%.+.Qt2bzZ95%n*"z[Z9|^?bd#[#oܢˀ&08b=ue֋.ɩk֬}?u|7&MVou91D hTLhݺuo6mGxf(Ā&xcVޥZ{v 4Qڦ64wvZXG_|Gkbfvwݓeq9o/>J5Sl!ɶ:{ŝafNEjp0PfW͗f?y!63M瀍˗Wsb (HS MH4z- &M+mtfv%ӍLqi'{uKp42^,%EYy/Hզ~R/[0fpIFg&܀f@2VVěedoћ<0PiRMp0Y#sت 56Y!h@ =e_9%r-lQ<7ii _jVxæĪacЄ V l0W7@~.jjV&4{âv}fĶvG(v_k{ЀgwEЀ5m@t3mn+41'^ziirrjÆSRPyݺﻯɓQ"д,(}a2BȐGB/v}РA#F۷Q~%0/_fv$ϟ? Z a/RK%Ƞqrl&=A!mb &yʰFF*m"#$ΎHؤDGvQR*D-=MM* 킰(`ʫ/)J ljZPuڤZhR@MRgϾ4jQ A{mـz~}Pu\C;D"H$ɟ Fd@~aXK"ܰa#YGAGӟ61$FnhA6tЀcYMf45U!oi@nӝt{| h_\;J{xZ 4QR<2چ&txs- T_ŝarYݙ6wՙݓeXgӛcud)vwݝiq3'Jx-t39KqǸ *-LU۬!h 8"` D*Sw6sFkzEǢ #E,ʕi [ f-`O3hrtٕft\vu1pp5r%42,LQcp9rmI1"͡υd=nOѓ֪fj&oU,Fzf{8an8o01M^5"{_ɗgb.3s#Bvb3pq#`4a5Sh|X&ob+38"6_k5R=>s|A6$?В->̀N cǎӰݻ[ʌ|S#1u9s}7H3RjDbd#R E"9His+/],X0s[DO X"y̲ToBDJ <!Kv?=ڋru$D-r$ѦD]P- B:x.*Ae P ]U#Mʞ=P h%8:b&2.dA3yMvNokBP)c\-C#/t4ϳ#rЂͬg3ektXlqdXOŝadɲ8Lda,ޙ6hK4f@:zf]՗Jq hr3[{]A4 7V0e}1liNk- c `ʼnj9E358%ښO5J%rIѶ&WetFFjWZațqxGP9pDےnVBѕD3 'ަqmq#S5NJԝcved4v_HW, Y,F8.Kli77)3Ld0[H|E#0'7*E\+|? k >,D/1o-FLOf@5o;^x#B'-8yŋ ҥ+…KǎG<]nSC hyaS51H5.( "ELOjJ(O=P%ȣKI1T)&բlOwzszv["o3Sed]l%h`vYY>YUdsy{wOm|89GsutcB$#$HHQG&O>nPgNYjժUaEmAyps~Y~*=`W *45# X!=w՗ Љ8kԚAek~je\nSnF05쾉8g ~3,er Gg}Y^M(@+Lv3n5:XE'#+'Xk'"jIYλhYCf5RS8|}:vF3pF[+Y'ZÝzs nL*uLM(/R(n._>ڿl;.#k߹HF={TXDϦo.#DpI*BTr] .#Pzgt#bK@˓b u;ӎqFB]S"zv@Yj2Z%T ŮO.~wYKr~;E8!ؿ[{;v"@ tA@/_Nq~X5qD9Mɚ&,2Ehr43( $"$J tĤJY%bR!\EED*,sID "E8%B1FFM+5nt"tQ&"ĉYIJxA\JDI7&.s1+!ͻ`b?FPnFiFiF?N*+pmێzݺ *[r BMAS\M@k#9=GR"8RTWa ᠃8: :8yg9v}V_jY hpY ;hkzY9Rnwǯ> 3=]2<+y`;y.rsW;5-p,,쳏P'Zhgedv=uG@.e2^f),S͵$C E)q:TXC\NήP⠽:ٯNgVOs6frَNn֙qM,lL,|rjY|@) әաꛁyY|W +Z@\H}>ؐzЊta=LZG_ }FB@Ͳzә45L$U@C%;ILS)iQRA>+r_ OP1;l?D>H(7áAա wbUXe'_+XUf945/5-#AUN460RF,&D8 ՀQA }|:rFhy- ܧ?:AdkߚK{A;(>Z ;w^v޽K$p))&+YBh)")-H =W.D̥Ԅ"E)e]hY#ri'[ 2)7"&H:b.bOqiELq#D ڞ+Ddqt$ZZTĔdĺ ƛ^믷ʟIZϭG^S\h4H#4H#4üWY@ZY!n۶c[lۼy /̀wgtLAcD vп:HnpNO'=R"] ŬRb$և"DhZhM=p<ѪhsbD h;Գ-<Ֆ"O@|gj+?@PF赾I=-k/J8?{7J?\@$قoAQ)D= hz kqv*W.؋؍?Yej/sq>:k>Hh2g3 ˟aRBdd=gXh8ञ-vC; BLrH&ХSnNCrO 2Cei5ȌeDtb҄r8;mXT<*%عpq7̥te5q&ᠤO;ά& E(W@$)BkIZU+&s)%" _tvs?:T`TZk֬ xkٸqsCaĴ崋1=Oѣx^noLW^8H#4H#4H_ k6p%CtNHhvpБJ C@\sJDRr r r_H}05g7XbԳP!s9tvuÅn_Lwgw9s/=-ztlGl!Nή`W ܮq N>-=WPs-ЙA rh}@GglcM܁henN&2 wM5w N ,v Q $Woykِ-A}+$t< Pܮ(,[Im)67Tx/fg dЕk/)6HO H@+h&9`;IhnޮK`ݼ,Xn޼eU~K+l`ZrE&IFʁ/_!ol߾S&jiFiFiq*8t8;54?-Zqĝ\sJ@@BgiRn BЂu?]v=wإ_P"<?AP"iIifeccZ%ln&iFiFiFp t^rt" g:&h; M@'sDڦfNE%I@'âm0]t '=D e@7wH&8䠛}nXAXA.>;Yl_*8N Gf}*-WO @wvϧ@V0?3h@f;ۋfrى㛓.r|֯,sJ8$[5v >L@q?g@@N(;T̩S>&j#?D R NX`1$Sm 1Ȧ'-!\4-[A`K.[f7|9ǎ5NKZΐ;vXZ֯_t-[nٲ]gN#4H#4H#SF@7zqu(::[!3YZ$ * ?& %} t?TjC"†hAyڟ}о@! tw{P?RzBn ,H^vX=n9;1m";%9Lq"j'x 4ЁIts2>ləA',hN:Y,ۑD1 ԧR@] ;$r)ᤘ[[z hYmpVP΍C> _H4$Tc+XaL5ӯ?8#Q_M":Ȯ Akz>r hG ֯߸o7Be˶KW,Y|˖Jܓq9ta֭[hѦMmS۟*L#4H#4H#4N3O@ h}s(YH*g׶mɈV?Vg@;B%p ID;21NCp'y*TM +l|&"LJb6o*2N&tp e#s{*gYY!Ut-0q^&}Hd5K#a40 s Rञә IN}N>X*P>uܕQZ=9ktF@D;XmtJP _u$7R $.47\'TV vZ̅?H@~5<|wx7a*㬱B"N-nL)7!|U!C|3%3vdMγV[M8L$Цo0 8Mt(#T MOc:hWt2m >EdES`hhsh:7I^ _; =/>Z:*Hon'vOV^o7M: i+V-^}?44N;>3f"gkmٲe׮];w`NLN#4H#4H#4:пk9}#ٽ$j'MX̩ip.7> >qk}Fj)@Գlh_\A7*2w)F+=*RK}h6GJr@OQzs}}xp8+Y xC!B7>fS \BNܸ;\TwHh&5qϞ e9PXeǬ/ݙ\u#ٵp:rSu$v-jNGz-~N;Z'>;ACvxix/ɿ }ڽ{K};wBCo߾lݺ}˖mi P[ ql۶0ߘx߱c]jfFiFi3Bmi=cٳg[zCOB@_͹<ہ RБ,ag4/򁝀)zN@ۑ@@àM/\0 hwDE\ bK: O*mYh>k(٣auĂ k9m}C.AVX4t2J >!arԳ{?/ӟwVYN &^2Ld*yB^*P(p6;;gAK⚓E T.̌(MdEu t fK=ʌ`Y¬H]p!mw6HЉw+\P/> %b WCe(h٢8}唐dK/Ig;6hL@~~X?3:L@:KЗr0I1wGk׮'m^Dvص};TF31G7? vJ#4H#4WGko\ݻY ޵S۶ny޻F}#8HqY.:]UPv_=<:49hl 蓣q8xgC.@X;uXGJ$`!@k,g; ;8J!"GC=qي$"3pˑ'C''CǀPqf8+\B)XAzn7řbWS,QfHn6\n栓N۰gt'q9p%HL"Af$֨HLjEejBSDkjy0~(862ې/5bCC50z^.pUS5>CϜ/zر[lۻw\:@( 7hnHN¹):zAȆH>0g2P'oD+_zKι= OXXi$hM@ *jfm00uO # {H6ƹMHO ;lCINͰp͎,}NVe32F-\6Գ,uЊ>9YP~tF;[DY`qfHL)Hn/7SJ3(鈢z7 Ώ r`,Z)Qx`3k-")H]<7s] 9ΞP+ӄ p) 7D3ȯO2u$? wg5-iIKZҒ%-iIKZҒ9n8uH@{B6Db=Z!-ZCU"yPyx hO4NC; ˄`1`7`Cݜ$܆f3 GB7#z$0Oi@'%xa ͜o"j5Cǂ:9t тE7 h>K G*%m`YBI%BYddPvEʳ+7~)P*h&@)PKH}5{5ᛌdhQQ!"2)hynE@vϮE;5`oщh3l%5tuh} 63S::n]m]o0i?w];+_UCÈDXiIKZҒ%-Zb&4$ps#8~{}~>I舍V;m|r"!PD@[_)+@*jT<\f8Vy#Hٙ$-Eހ|A n2H: g#7S#{eDF{F@<нS( Af)n;i#.uwa2As@q͚hnwқgPYʥRW\oV%p}YH3Y|JpSTWQέN@2QxFsy&`0RJWG+fkg@s\~o'C}Q0R ?.Y!]g>Bk~Rb )u^7 -4 4OA_j"䘦Hh.Sz+N˿0%-iIKZҒV|ǎ;r\S&-_trOFr_,ΆʸԧpTf'p9It hmP`6Bd3 b$R6$5vtڲ",o 2>YE ͚Vm6$t~{ ģ62Cq5q#wpҝIPۙ;V[T;e'VIY"W@?+\j'I4'Zۥ"! Wm# 3%uX΀ fy0IoHdzR4 YO /%zcrUs@hu !+Wh3!48KzZ} :3pZҒ%-iI˿^;BҒMdʩqG$GpZ,s 8<7T U>P7PO3Χn 6(0r[Vm(ZkrfUۜ}.:"Cvڑh4}SHK,p"-T a/A!g!VUPv@ljf!$")jW•jG0Z`{!)iԆBJMhZ2u* Rܕ#@:3$vreZGVhN@D$_g@6xLAe ds(W.M)E^qae`{n$K A<ڌfұW ہ}\ [@`N](^Rc*([CSLvB8 g;z&;!ՏEyVD=:ԃN=2}}eY=u\9qЉcG8qt!2=vC'9N@_bѣIKDŽ4ƃGBI?p4BHܷoVQ CdSRKD4]jLKZҒ%-i^{O"V~,󒆘{Hr.Oo' J]?Aq7ɆOQJE H& 7> lUYj.IWq)Њn&SCdX& j;wP1! "BL:ۑ;a'mKM@[z$A} 1 "bWDE@g5j[ɠ`"Åx ~< C Ihv!#\6Mf\fMVؘvN=A:pCj * YNT3ԑ8dIS6D@'=14gzE{`0?rhN%Ե@ r'Z 43M %ă7?3r'.cD" }#'45WQ29qD#߻Ȼڑ#GEMfDM(r). laRk1;t$СCD$vXNCCP$*A.YPZҒ%-iI?{6S HZ: ,d@܄fY!ͻ*p:D HRitvIPk#$Ͽ>/܌7B@ H@ׇC6buCPsеh]^8 ;9%"Sl,R@5#b6Hf}R-pi2<+N EC=Aԉ-I= $3%(B Iqq$ŧpqnF", y"jdmeV9y@C2w@AgCt,>+5 =a9vG@}Ͷ#ph "0#g 3f˜II.uG-&U Ds $GsK'؟v:W;lA@ԦZzc_ 'naIZ@/G h sX;c5;T #w;8 ~ɛ)c '5'K ,!P&Q1 PF݋IP҄AD'%-iIKZҒR Ggkwo%,ބ--.,d ,(ZZ \jӶ01+c*)?6^?:G뽊Ej:RU\z[@3&ĂBy',svY='R6bdEJRBA{H2 ~]+vq+YAQ-ĕ+p! )>5468[g}X%A1OҰ¸>F::Z$ rv%!)>wD ܡ`nٿLw(fuFT )*%b"\*$qop:Yo'*=@ ra1mv<0;0ڌga;{?̮{z"T;e-á?' w@+UqLcfP;hL'I@oh:9?G?؉GO|{1E@mѼ=/U^TER M"&]"iГZF@5att$IfME#|w^1.%-iIKZҒ 3zހNomhhH.'p ="+ SN]Ĕ^-k ҏCh.zv9] VΥT ('K4P؈ i+dmIts2d` Yp+bTgg Ho v:CQ']~uTE2 ME႔Tn rف̀:Z6w(YJ s+"E1ӑϫua]mTpR̂v:;xg>*(7w v dYBuEC0䲦aB5F*=*-p޶㱐 C= 3 ;xubPu(Wp7ZϮOX;(CCSvr9X/*[?8.5 c5X7R΍ E#|"O'󿦣'xPth8q⋦nlgqۏlRU1~OQU䇑w2yQÙKK#-: k!:d̓ H;K"ŕFr{5h}(g Z W1g!Rv9( ItjﳆnM$'rB@[p$ЎDD 3l-e;d#s2I0ِK  ZU)Xa'60%lm3:EKh>v u w vwNJ?攜zVRvәuS KkNmjM\YXE'_;r-ºSԍ@I:mG᠛ A"_Ab)!N9}hm^Q&^n^XO%7u~X 3V.w<EnoWus+п,x ~̛;xC罾ʞJGG* @"jr T(H$-.&rD",~%r䈞'N>t!N =tUC̐Rў={o;#-iIKZҒZСCwc^Z+~=u E1 +%ԏdj{ ;}9 !t^H@7sjUG y=ZP2KTk?bgDEYH" R 5m43@KS"˜2;R 켳;N@'Yϝ­ $ c4p6 sle. \Y;;\)N ]PA'?VH6%l.fK: ~햫n<r;9% hf̥Σ-6%Ig;J~(9m?!:ܞp5 "uNŏ AG(7PqE@cMu"$:X+>|x:ܹǟ\mΌm ɻ;Ǝ#ǎ8xQuHGZZ!ELg̛71)ک%{}߼zggx ;,g2-iIKZҒTxꫯVZgϞÇ!bi$ ??^r rhs7_qʔ<3ώ?~ҥVrWX{W{iӦ566hW.ګ\9oJdrz{+Hn@G \N` Vh;5;mgR*MHq28eۥvN@2qq3!s>_EѦjm'퐲p&;ˊDB@BF@ "fE ;p^SH xV- ڑeab4͂Nh PYf7p,t^egUrw*+T HunXMg4;gDkݑ"tpIth f j6@!#;`%j F3SS[tVYrW͍/t~Om~D8&}o#G>quTǑ[\r„ <'3g/?~ߵk/IFHZ: ^CCfBHv#$+Vge<Ĩѽ.:*ȑ#mB"Yi!j!t#* Bbz_\|X3O쮒-U*Yi D h!-všĕy"eH) C%p7RQ',FJ ˂*I"+ Nh /֡Ie!&"3Cg Jm2P\s2\NTqvXg:a":?D+Qu89 ќNuxm0~BE| @ wzPn| yA-\2pr{DKz 3Xj8l0)afk Nd-`}/7&h?RTÕPE&xV yg*zw~{ꩧx>c=Ï<=H{w?eL$cN?iccGN=t>$o<ީJ+^d%O1+yo%i޽ңGk;rmxMW\q՝we#Gڵ_IA<@i1BﱼFAa Fc8nѣ\},Fl7LЯߕ]lCJ۷ORM"! ?mW^ްa3kjj&OXhRD"KbJH̙3]DW-̜͛7Sz> ./]M8sN9g}W&{=R>ZdCBmÆ DCd!^ZB z ⒎.1C%]DR)tec:J"I%B""% ï^nfFSS{"Qrм{[.O:."9'&Lܥs¢'xP&k >nĖkmYp!R!]USE$5Kڿ> ,_z饬]Ŏ uVth{$B :fRDͺOVDC`G,oÏ_t3f~!G&U3Ɣ f%Nw㒅޽~K.kɳf.2C1Iڰ2HAB.ÈH$RT*E(:%.^)D#8 J-ĥ)NY[~㏸$sC⢦BK).<#NubK %]IDG".vj'K]SqQF ژ.ѣG3Ӹ$ eB b R8FZ%ˤO˗s?ïz-~PPe) S&L5jĉ5mڴis̡B.7BcS\R۾}g}vZlٲO?)'Eb#ᒐKnR:DzR/B,3U^x, AAPBNs԰Lƍ@%ZO΃"R曤']ZAD(%en̙ݻwt"$P"%oqwO2;dQ#ٱc+B"f =Et݇~(t!/9>s@G}D),YD^xl.]eC3T*6e6݈3iҤ^ziĈɴASZM&!sG;w.Çヌ2b2`J1K)3dqG#G_2W,%ٳgc7 ~L ŊR;S*I@ EA?dJOq*\4.4"cz!NM^3fb++6^~dtx'-BĐ7WDHA'_{5ٹs' ܶmD(Bo<Qĸ"|BW\q/ٰaS߾^ye> bYM *KybXoliiW'6Ht .C^7Jihѱg/eϤg eQaleA@;}VgīoZ<9""gٶ\2 #O}NnvBovFGqV65{@"q88.SU".h&cLK~,H }]5ݾ#8/>u4 ׯ߰zk֬]V\z5+WtL~3ljxi8qF/QMB[wyi` !qޖnK.g_I11DHVD#A)%ȟ| /d$רKLin~[2t_WٹXΒ%LK1eڑ5,H\nW_{w͞.L-YZc㑆 >ajjj-Z$ beJgϞ,̙SUUJ&),xcnɎVc=ƍ7q_n6n " ?|"RV,MyDe$KS8 cǎ/լ蓎e;y)}"9FW~cՅ5j@tsݺu+cEȑM(?>EFRDq'.[-, >¥pڼΗu{ꩧMuÇ UAgdEC)_}Ք)SD#>>|8ӞjǏ bh_z5kP"398>%sbߧz׮]+W.qP:P% ѧed&`YKZ!cԨQVݻ׭[yft(}"gHK҉oذX`}믿>`zG{W⧄X"$ϥR#!YDQ 8AŠ4"Xv$:#O>1ca쐎`dҥ/O?$R Tڲeˆ:ydx˖-jÆ 1&0v$Nc񓑝4iҫdC;(qm߾RTqp*`Y.yqP#YӱC 'Os7` c'oJ"\BYR}"DF֯_4Dq*DqӁ2⒈2>j1c:vE?,d̙3 W ĉA_L%9JWs 3B"L`j:u*1bcJY0tG}Ï2CX@LZD'& rQ&ƍ|]1ANܖ\q,I$$J!ٻw?_̣;xWhJY1n'K䤥ª7M* KWu/㞹qƏi/_!ZLcZHBgy믿馛no[o%$3Qnݾ3M@^8xgtd7#3=}@v=a[4RkAZ" "pS8 vl'1Ю` E+ _䋖fvyUh+T䉨Ҳ!:%7zrW}FKpkndáq8nsm! ,n=&G+6YD%;nE(mB4rp*2%s GoHg4[C5SNTj ۑ hd8t: y5bBwzm(G᜞*ѶY`6L&Sf8` H7΁@xgIQjn*SìC-*nIZToy?۽; F~_w}JM%_p~ע'懞hӱcMǛZ![)G*7t_|ĉȻ G4Y/1mUZyf)Ż;fZy >[ԥK)SJG^N{%./vXqOHK[ԑ)X&,\Ȳֶ.wnl?ÿ?ȣ`ׯطoGݾ}QcڥqU.!:EYLe*"(.3gdV2~Ka,.!w ,={6!+j>-4w79sޟ5덇~tȐa[l۱cchQ7oFY)klzc=1wÇX;ܹ{̘q,L"(𰒇MK޲}KCU:iɒ%߿A-Z ˺}ĉr~{W_c |ڵZ^bPpzSS#}B>ӏ<ؔ)ӶoߡXdjUK_|m%&qA= 8qѣG{t׃>4z-[~Gw^yeҮ]6i$:ơ7oݺu4,:&-s:'˙Ef9FX~۶m,v(BAdɬK?Cݜck.Q#H ,|?\"!ܻw/hL3/>' 4ɢf>sL6l@M 2z.9rСCyn]fN:8&haq3R/nX`Q1.0n8H~O bP, 41]N3gb xE")tsӷR$uo'#K-GT~eѤEb}Ɨ[;i2&҇L3i>]D_бt}HTcaÆ6+j}]q!$VPDRh¨QƏMIGդ9TqBn b<%_"i>:ӧO9@o0xF%Mtw(3eB^M jGZ`x0m' .|FG+D %N':e:\:uI03f̠i.AJ1!m!qLt:frncӠVeP) mAkvzp#\p#&*SY' A4h1~|l Sɀ2m{)ȥ=(7w'Gߒ{DN"MEuLKsrkc 1(8,jCU_rw<۷<4zqW}W~%&JGъfPxw/^% ={?{k^KXX")m*btuȍwyW~~7r뭷&Ɲ{~7p <їRk 2ad0KeH-!VTs8@'II dw3f[ek?Nvu6\{ÇCFCDfNJDk8hSLy饗&OJr„ E74MƊDr>96Yk`4?g}v4,}`+EE%=zxu=]>?t-ww߽`͑#G۹5X?-,,۷_^}*^xC_k5}馛~{6 {9 OMCm۶`yy{!+ Y/媪*555z7o6_7ݺu;{zQ#8W?^{uz.,,4i, _=Ètڕ{c>d0ޱC1M s漏 /ݿC UW]s%>ȣЬ_~y">~|k /d}Ϟ=uW_}uyyy~,XK 4[ZZJ뮺ꪢ-[pEݻ]s͵3{?u]pM]t{ɧv73课*z믙9NR`~(41rbgC -1N:C8~"t2oߎΝ;;i$0MNN' C+O,FoK? ܦ4"BKH'w!p~1fq\L[ ؔD-[FP,>O]fxH'cgsJy%F~tN_I:VW\qwܡ0[;Et#cGnDn%B= "eqX}55V8-|E{vsקH#MGwuݸwou(7&euy ."TdK$vic):N@nOarz_8"{UV- ᭈ8>m$嘂Vm6*¥zskP)Hq2BEw+ e IDp9f W}D4%RP t!ե|쳜zovAސifsrkV\8kN5l30a 3A'CKuO,w^ p8۳I~ %t7fMWǏ=ҕl#B߸q㭷~=駟-Y/.^-ZX_.aw\ "Ƃ6VA ,$X*a $H`më|_ u{L:QI b{Si/3ا~L.A똊xqL,3d1X0EXm?wIEҷ"Dy~h2I' nw]s=z+N# =--m֒GB3Og#P-C˳s5O^\WdUtK;ǞIbu_O$x. ?w}7-=DxBpx3Pn}Ѥ>c`NZ4h r[|B 3 Z;Zg8Q*͊fK2⌤|NmVs"ŮhIfD&A=Z@ZcAK*PvaP;E)D[0r[!;֠tw:DN]hf[yVwB6h8M"ÕoRWLpF8 a_"aZ% hОhm2QG0 ՃdڣdS"켳AG0{ sP;| T|g܄HiyOZ?y =XO:DM-wwq7/1~wMR W)/3Mw&V%3_I؉F+e м.+<ӹg)..-k׼;wڵk.]wڭk.xFWu͆U H֍>$"!,XnM0y^2i]}$-ǎ?xД)n[LVZ:,tXdo=ȶmj+oh‰ SjY;EԆb]dY_}~?7c{of2V$xNxͧzY1ai?g{/8fwe /B:k]Hd`f9M[X7*}С,MYDz2F@,꒬;_#X`ψjYr[Iuzkmm>L2a&n#^\|%\믣R jwt2 nRyϞ7nswC;wnj9p5\w뭷cO?o/`lQ?شt/t„-U_ju^ӧ-^[XPJrSYNj-[_/F.]֭[Ǥ"⋱|2dxYY}K_͟?ٳoQ<֮]Yx YӧdŽ;T: i<|[nZ;w.O¸3: sEa&iiÍK,+))2dؑ#,ez'MB`u܍o4S6f̘s; QzƩLYr%`GRO?e0̷ɓ',e 'N|w4g27z?Z05L-hwܸqd1')2o!6.[yKf“EWeNMr |&K|=FGjڎdpY3?LÙ8XӦMu\Icx''6[T҇ LN"ҟtʷ5ej!N L[0BH(?#w+u}d,Lfi&?mTxv4Ah,CC,9Uzׯ2b \%29 k7R)EpAG˯s< eD>]D 82ţN-󍩋qzr)Hv&'PϹmqU 48.t^ >Mp$ &Mቇ$Xc q8N"|Z䔉'Kt~ۏb~3{ᇥFtp{ԨQ\%6)K:FsЇ&Xv nFn1 シL'xBn̊qJ]T-SE')[.eJ).B@#q f2ߘ +72h;,|ZYxB}rÄdHS552CHA;pS;}qaߌ/.bdZPD~yqn=,0P"3?l$$D⎣?DO>=F:чLDn%fx pIWF$)? NYqZT)g C^uNV+O"m#ne^u IpaPԳ:n ÓB!p@ғa1m>PzC:L! IR6h lr`:PdL,uϡs_]L *=?XV1PV#p?T+G+}*'tpj6Ё8 5EC8."<9uޜ6 guN8gevoj!!TtQ"ޡTOUD/ўf *uS!CoC(oKȑccM'N4;8~t:>KoRGs(Z'o%"1tTS"wZxٿ뮿=fÆ2d#!EY{blk`՟?A", )}wkLżo_ó>8Sd(Y~yii9U>-,t)px)P<:/O7n%j+"N \~˻!CQTP`$vB:KZ߈#]YJۄ ygqȤJ*Bƌ}뭷u=]wK/M i$-YR M>p1ɍxΊE)KeVRJXᇘ܃/Z3 U;wJ"cxpUhϞ{gQJ3U*K,3fqu֍*6nܘ?ѽ8ۆ z1`@;|ofQ;tQ?ē|W;4i ÊΌu}%G]O/27e˻t"#ֵ`߾<Ж/_IA& 6]yW޻w/ γW_}U#wEGѓ;w7o>Bzaa]{_,+=Z#]|*yswK. e:Fu ¤L~ﯯ5?eoٲjjF#G~g:G~.]Ν;493e:F1g_pXq|Ԉq2NףI2}t~A(>1SGr)C'`a6U0X۷oߜ9s^z%A:OlSז-[裏H-X#F/Qf .p4&1T㫯 {ԂF3.(!4SvM5y%P "Γ%A"0>2U`D(+ 4ÐaAdì@ ,ZbI!IE|c& ybg1}Y>s;bZ"$wޡFS4&sLHBQ bA҉HCJYxVhh1>'N"DfdH M"%M'Lftqy4Q5RxcZxi&Hnf==,%j  vq:zg#4E ܣ8aΜ9sS GD('ƥX ;,զ":tHWԈdz-n3c ͥAX!ƣoƇ{`Gh28V}CKp<RXfäS#׼\qU7|;o"|䓅 3<3ťu^pzX+((`G !޽;?N($>si#B-"mK@WDr:D: ¹DR!음`6^*zc=BQXHvPv`ޯz_NT?V4Q5 eoU[Daep'XU1SgF•ސaeh34,'\F(x"ePWzh9pYVԈŠ$uGJ.ŎfxB- X`aJe_6CQ-B"\n`;H`AV ?ӟZꉖxD2Rګcs9#\ҧ6k.ސmAV]M)K9?fq֌r}A!P+TΐQgk4×]9g(eLcks<]Ω%bhҁ7\HgǪUv^C4ΧI:BPķꊸN$Qç̂`Nd0O3H@FjRLzxy~CUP0g*ΞzQ^$KoMǏ7>.ycϻ/Iҫ-3ļ #G 9y n6V%%1ox9{<μs^e^מ{nu]R8Ym 1:O>T߾ڑ, %][)P%җ,YZ]]۳4 9n._wչ`Gl"jf,g(-,!|PWWfO6bÇm޳g_޺eǘw5k >裏=>$%d($8I]sXR~~Y%2>|8Jȑ#?Y3f\~[`sԵTpB/],>[lѣOnڰaQFiŊU]f͸qtu6:Ԡ=Ѧ#_駟!į|/w۷.gszvϞ}GeY?goյk ??e˖X0afUE/z!رeV=rС_}5~azueė/_N+O>jv9z{O͛o 7pϛ~٢|}a~ӟ?G/L8[n ()ːɒ'XkkkId| Q7%ܺr!CE2y7Gzkv^cDz>@n:扰bdn^5+WdL> }d!},]%Q㒹Gֈ#֯_,b꯴1KaǗ_~,+41uޗ^zAԘD76l7n2e ficرC0)Vٳg̛o9|f;zqcѢEX={Bw믿+9%aQF^=n3)(p e:628I[zo6N S_'OQ Y%FdL_|sѺiӦ^F/^L-kx&Oʨ(n"acsy_[)ZLD&AG1uKg}G4ϱLt"RPĒwy8jLjE"'B6vh/[62(6H`~VM,Y;fSv]+!ꨚ&`( "48cͭē@({BBH%MdƑ☒~#*pԋM"[eg* иqC1ȸ3pw!& vL`1LFɤe<7pӪUyfS'K=z+jJqB'~m-+L1y -efFqc_UxIXҗ"+ͽx[ܱwZĊ}Gz{\Е]?&Sg곞}zi2<:wv!{\v@g;-"Ց==֔?0c!f!h'!a'p?^bj$A%PNHT'I&SŮ@7X ww/áJM%_tżZmcK7._|q>}݅DZ̾ak=-b%JzYٖ%ZM֡ڎ]\\=>.g%H64=s_y ƔCXgjT!Oj%+VDܹ˯5m.ĺ?bpÆMw]ԵgϾ/XJdܸoAz +.%C|b'Mw?d¢b#oٳ7v4o?__0vX<|BVcg%ݺ6-:txIIFx0=wG\4rx۽{31ck IEgԲ`K.dĉ<.JbV^|E%+޿<ذlي#^8pӦ`Ӯޚݵkwf^ R 4?uTZAOR|9j&.1HAK.čeZKLFu8w\(}6w&M; :Ώȑ#qF~tE\j'& =@ܛt6+~m,S5(w1 bT ߨF.Fp$ eɘqA'gv۶meHȐnӽ4A&"DWq͓]GOqqZ{I,A^<޷z ا,Ä},+Xxyf 0 d}~AG aӏYRܣjF,SLa3v>ZNb/@?W>#B}C ,)X#">&Mo1Dkaq0Д%1OEr)w܃(^IHp3x%&2܆ܧ"禦K懞?… ЗQO Ԉd(B"5tuEi"} 7|qi, a0@n eL dM,#PHq:KbK:UI!dD+WeF(,ӥKKs5eyQF7H{eZKH(0CD駟q yҍV]w? 4R)#cneFB:M|:u%~%7Cl"4Νڛ\8q$mTJt^~LBɒ[/??%[h*}ݧ}߿"rYܕLKD@t(wrJ5DYhf@w@vp>}7\nKïq5 ]KYLNyn&hZA2p';\ z#e)nQQ, c?e7ZeήT%/V{2҇dT")avd|FV85l %8iVb",bn) hH#i,'X&VeE*ՉԳ]65-'CoM[;REzrFU\pC?ŪCdE S"}8ev٠E9%R} ;sl276{?IH j^ksv"J83r|slPD 0j4{SZ_RWDz!︋7_cܡCX-\Ȫ ?_ "hɒ< dSbފxc袋.r7vޙ+8jyD@$FA-{͜\/\s5W\qƍ4)b%-zWRV8$dI(Yp ,ne&*)S^,K1""k'`a&Y)R\"g^SS,JEAN:+?^su.vڳs=[|;vDHjZ$BBjfbe͚)kWX>_t)eY*`,X-,,$))YX',uw}WHV={|'pkCGe%k3g/Oڵ֭1c]t%Z',z޽w-=}v Y_|ŏ=խ^OEvm_|ŗ_~{;r(TDϼ‹{1:6mn0(^./}$({dׯ_?afI&?6I¤mJIu}n)Ce˖WBArqMfYeavF2ƎK:棉>:K/ĭfnjTGq%P tԩS)۶mǨnd)ƍgz͛rб4Q[駟R8Ep\WکeJѣM65!c(%>FYHo65a,p3ҫ<CXbl2 "$ҟC:@Y | =@Ԉ>m}. )z#}0 <g_ ѧ ~evli/S;4iaȑ#7Q9sOEy˴[c I:=4MSF7ai5YC "eDzKzY@F $UPaPz,(#6| ko۶"p)k۵]L653jL<^rIhƺ]Bs"jY (()hB,a@$n mPjX\o VS'ުcw@Y`hIW\^PHPGKR#$Q̭%AݞrfE 4 J3yYB皃S@VL@lGl`hGMQgO)CI ,klpE RV{gȧ ݜxȆ\s2BquH PiD"ԗ<F Uy37z/* #PCMɲ"z9@F@I)gP8VK A"m'(ⰬHOX/ t ;l`AZZZ޿C|p;wφU_'u 5SmJIB<'B‚b5zϙl&M+fxB\,Ă\:M555*5RXC.?Jb'S]ٳ5j[ojhh"ll}=ho:|qǎ]=HaaqϞkjꪪj&MB7oB"a EEE5U=7tڵ/,Ȫ1u4KnRFiC~ߏ2H.[W>ť<3֭Jx߾҄#G;szU%}abO?ME +?\___VVv7R51bWWWo߾x+x,X\8e gz7 ̄iӦ.h۶moƋ/8fɓ'^trwjd8WfΖ-[b>ComlldQ:~ٳg%"qD8;o<&Nޑ#9 &R }.>F2|lx1&:ԅQF33<>N:FS%ŋG!$hTG`4\(`svOփ>HQF>qDzڹ;\nذ zL)2xB̝;3 v'Y4׮]K3ӛ> .1<(NW"HPPشi 8qLů{Ig(K{I8'g%KpC,`7J|Zꫯ2j]4qh PcTN0sH!|?I!TM(c<%N<^](D <!a8!qI[F1B0Uh, I3gQ<ehe-8Idj\`vτݤN.aLk#+Wd ($.iF"@(*8y|с (QD)X,4x`<9?hȭ+ SwȐ!<iͤ!MtO>5tKL]=2&j?*ei#FhX`nP/~ؑSL0]m%P>YFg3<yڅ3>eBtx3ԎYcˬ `3aXTn" RC/F'xMt2CxV01-$QC2pZ;B:%3\sO K.⊫EwK.?.wy7Żw~Iq`'M@W({_’%K/R1~3fC_wW]?Qc|SH[ĮZQQɇγS k׮)i:j#g_ÑnIJ_8PHD~3ut:`'qɮFjTrVDv/V9ο1ܑjZC/u2X/+qIEqͲ6a~$P;pl-q͗ B [Ѿp0'GM)}ir HXQ=]sO&:w九$y^cw/8f U`"#/Ie׵Bބ$"qAxņwݥ /BŮRDI=iWڛonM1/]l/,.]VUz^ꪫO>e_~ZYj54XbօMduףGۛ6mb ̛7mZXl /SQQA:vZ65Y+4Vԡ{`IHwX 8e"eac̟| )\d,G(D\d ma{ja]A0HCXGU"Eۉڵ,y15]عsׄ ?|.:԰eV/+W9˖-2e;څ̙5BvpLH]p:7dS\\*oش髩S_8yQ}۷^ݰa=p@V_~%)OիCzgn b&_QO&MGj[n3f\ZGu ~ xWOۉ'2@zvZf͊\FAf͚g^Ħ"(PMɫ>fZ<~(=cch"ƔCYHT`S#EtY27V\cıǓKdΝ_|5JA8ɜȊ+Ii2v.\FUV98#9#ҜyI.vP&|>7dRL1n?/T,EPER5i͚5)K)(~+Fۄt*梣hUy(t/ϥ7|S =&L&"X甥 =@)d_wj>](멮JTʈ.]LaYs_ld>jM, C)d*45e3:\R5i8H.S#YcTJ0&EdJ1S5jHiRj!q JȔRdP;eAጋL?sx>X&UHW0CPQ5(et&Hդ`A^k`oAmH""S/Emj$J)HW3s# (jܧT$L+Kp@dΓscM(]}4,^Ȣ.LI]Iu8IaN#iP#H>&P5YZ%tʬf$R!MIOJ1IE9\:Af&O4I8H),~iWpBFs(ld@y<'e 8@K1EDHG" d¤BY|tRDh#?=z[oo~cǎ9ߟ'|Vhim)L:JЬ$w-((=!x'G q cȣ>VUUs饝gJg}!S[y4 /dQDV@gTpuفPq>"վ|ӈ2uuH/_VAB@wn>zWul7dघ[[vdD޹4kePspH@xV0ßQx d)XQgK\Q7'vtr[dO<dVoA. p"B*TY3 3>KqO 9ypE=@nOM@׆ffK" |$e@|E"H4 (H 8)A.+YDH'$K#d!1"]%~CHBHR;Bʲe˘ɛIH)b8Fs0.: bDtH,"%OԢ ( ,.`O)ƩNRB G&FpU&$"Q,"]GAELH &xKKjHH[DBHuNPZH$Efz!%R "!, RKdkh)c #V`J)E,Y$%BD9qz ʐ$ƥ R J)B";#^iqBr1%PqIׯf"eRȕi@}EUoƌӦM:u*qk׮E,B ҍ?lxK:)(K"$F]#Γ'# %K$8B}Q%4 $QP eoX1`DňtBLQF&&"Mc>JYvz-S!)$\v\FCgBB]j&dPD7tCDDH .BHr>!vrŦH¥%#;w8p 7S,\9cp޽wwyןtG-ХUd͡~m0a.3&E?̀={?#{Gε6,3[Lv 3Gժ^皮={+۫W/H>}^veUUU;wqSm"DLca9 T~Gp4s.ui3@@/q=цCCA_hW1k5:Y2Enu$%@=  h9ZWNS"NY`NBpQ'o\ƾ/GNcA*;Bs \ SY̍,us? { swk(- *8]'CN?v f "6Ai~UWg^F ^;P;M iŎ,E^SdcBFbGBzAɿ'D:j(7ne,[6~"oٸ! `"X S4ݻwT!@d>~r E) &$E}(5^5:$"R/!>"F<,)"%X r+Nn)4eĉN$J8I"b R/qB!.PxH:v$$[,+""ј*;a DH'dI3Kj&I!"}ʢI k *D_`E!k͋-BS+Έ$ka76Dkĥ!E$Dq&Wig}&(KDk)1vKD%qB,IX  'K.1L B[.Yd۶mR2LA#()ıF\S5"qiMB)hD,iTAH ,PDc R=N"bY Ag6 &v RbGik"s`OH!Da(BWW[qʘ!Hƒ'IW%5\Bm[=6wA\JqQ BKLDW>!/qS;!$8DIBj!6BLRDPs)#HPP4EpHB(ƉLR\*[iijD,4A\PkPJOL)"F$EEMqF.IߣϠQtDtL)N I,q#[n_|}45507lذ~~7lJH%I߼9s;vܘ1c~{U_{"G63mH`_uZ vRSD JVZD@OY .D:5Z$4XG}MAQQAunܺ?tC5}4/FWiT )fN0}V ?`N?ZE<\NfفHI*.]0vEY":\/tJ<̀d5\I$*BѫN"ffHOfvWܑ1(A哢y|@ȂD -2jECbup;T\1(0Rz#nޜz_‡ձ=9=R¡f!;>G{"=M@QӼs@`LAD{jpX6 u4kf; E@[֒p g s ܾM@g7OOvOw:uכ|TpaVpQJXm,RDDtE֟%n"R̉Gܤ7uj1%xUR v$bݟj]--"!+(Y/I(k"&]R76Z8|XmĜk'e֛T,e͌%$GC%'}^OYڒD$I!P"F!"۷/^xܹ}$ PC$nĤ&N:SjF1h%N&4V4( BHX>"u!THI'tP $,!W =d)#YF R]HDDS AP+cqBrD٨qRX@ʥX# $J\hJTMRdI\"F$K#\#KR䒂ܡҁbD5"v{ڀU"q$N()"D,P"I;H(uND,KEDAn7s*e25J$KX0Dti|ER"\"\ I!b҉`J. 1h""?+M BD IAI\Ku\#)(D*FĦ$$bqj Yĥ8)RD~K* %aŚHEؗg:I IF!CyT%ʼn˥(YF$W,'b PKNHDE1.T$ !Eي"DI 8)H Et %BKf@)3bY&EDҍ}KAGR\&$DD56E$~CC#T/6:CbZ=P7^v$.\ޓRJ%\V!ETem.8,F M KI%ѹ&ose @$َf"{5Ѩ>AuFb-rzX! Գ <5 |j7t'RϾew,Yud\(D}Oը*RUh;ZSq! W-Io!*}UX WğZpKR"+R %H n, ̠Bs<@Dmp Q wd?W^8,Y̰E=(, pl^$mS.4<5.vWNY!l5g"̄J =lhVu1mܡ2w2]P',7thgr׸CUpu5Sds5ÝI$fseި7zxTu\do<=-P`d+^u(`edў; M$ړġ(TH5ㄓmFrZBȽܗs/o |ȹ8':΢)NHo#`eMhe(K9\A^ξܯKGe詨RpEk\LҬ`OY=X-8' %)/{{S;Ii݂N"[(i qVGY)NV_Z["RDĸP(o&!HmZ!.VTYR)N%$ʥ(HuX3DbH´l҇h-DY#6 )BpId!B(EhH֮\FHĤH{%DQFtR"!] I7B1")Ƹ(%"P"EĞnFH#ؔ\.%DSP viI4I'JYIKB_.L)LIDL$2υw.I1%Nh11qureH2":)%qStm[㧄FABRDHU)≸J#]UI)EH'"""͔,)N.dq):rI4ۡ$"MC_P'UnG$Wʊ\ҔqB ":!bZeKcDňARlR䊚+tBI^2ޒI$$QMrI7EGBD,7P\rI"B(BD2s$nY" ء.d1q` H(")")eE$]H\.H+)$$EYRF.{AP" ZJ4)tIAKAOHT$")&`P|%B,,R6Tĥ(PR$"#NO(EDYR$RP@n,7YTȥ.rQ/"V1kY5HZ6hkq&%`DY!1)ɑKK$Q>y$ˡJTHЁGoЧ&^2/ϙ5y>~ NB@#kNYϭqY)i1U<[b$2 mg0CNgyk>O9vWv>+shOw7R]ѪXUV\f@bY-pX;Z.s\Fd^*b)8;BADD@118"'bRKAi,G2f<4QJew7~*`x_StT:-坩t}6]o?n֛9: oq7Z(֝t~}2rho86mz=*q RsJw;BIW"c1tZ>f܁|rd_z ɛqApq'ż8qbҡu#m98r9qwN܉,\/E1I$DI$ƋXi`K8Dc8E@GTcԳx%B4Yo:V?.oxErTF+6?tCHPFQv 8Y9<"=+ _)g\6FGURy^mš d5[_G2lWGȔtX7/YnN֧JE ҅bec14#6ՇH?dںe5 G5X3jvc砣_7{;#|hc2]spߗrt! 0uh|;̄cvy<);j=>9xۨg!;bv|)8onj1_PhlpKAE!X~[͖G"K873yJI~7|73b/B䚓N5{u/~EJ$DI$D~X͎~NDMt1좞-Lݩoni:xgCH]-f0+ 3O_\z?n|rgp]X]+te-:[Y+;8R1. "#(cy{#Ulch;ӈm(Ld^e$`)NL9"p!ND+K>4xkN>, 3+}vys^cu"(L U\?E@JŵYOU(6xO+&]wT/T TzpH|mI˜!2ފ9.03Go8(ֳtc eC;,YmBv#Zwv!loVy7[+c4|$"pD@7XzȔo\WhЩx min喛ooyr ׿ QDI$DIM7ݤ9NG@.YΣ;2СM Fc-ƂtedˣSgX_E\?w/vTumP.!:]^k۟vG$P!zt() d>CkP; X(~qT1'gk_|NmV΃y,xY7;qa6\˴<>gj㹝'da2]12I9G"z.x,И;|nt#No;,oKCm֬Yg9GbD,.Jq=;\np6tvоq6tBBO@~+.HDψ4v"e"wKk,\EJ$DI$DoH0K䎕$}rs1?O9;; +G@鴏&cȹy8VaX87 x8K_w׏N|W8OAҚl}6-]Y: \.U\;P\*,aL,kbpG'7k{@Ln7Iv$iϯ~X}!gXT>s|ҏ!v凣JiLd['8!\1ҡZ5J3֎kJnЂcK법 ,]6փt>.qx&!>Sِn@3P\sH?ޙRՍ t} qteSxdG屬G2M7DAZ#XYO*%ؗhT}bY &}nx }&NZ6C.O SqY hк9B n6:˼$4󃽀v0!8H"$H"da&r\w^ݟ{? ُ~K {""'-cGV"KF={uM@C>} ꨃC 6=P? O;rjs/(yhw*;8ruy=([V\QXRwupvd3!+JTanqk38CC y!9S[kNA)oArKźliC, xkrkRо i.Ncu4Uݰ.U8PY3 O@;yQl4fе x61StL-v>v*.7Aט 5.}x>tzgFI1/Lc2ӜL7&GD@PG=OgwjcP5tO@Gׁc Cvܘ)#ƹ2sn!/SMGJ58Z &/ ל,<t NgeI@wXv,MA"w\@p/qy"SWGc3p}2Oyв'=hٓ=t2Ս(HW684(::Oj7bфqa5!wG@+4q0Gu,WHWFS h.\c,Sru\lLdgz! htL:qZy#]v4qƮ:pKt7F@/+ J?iԢpapuxg=#a),+/.#vN2+ηF72xK.STq>5ˊkՋ}eCix88^JE3,SU"9p](1Ptި{V ۂx]QT|f̡C_}.Kw#U,]#М7')]V^l]=pq:SkЙsHyx:IdzՉtiD䬡;\5dz-`Aˁ3Tm|:ZD8H9컐T^{a9fE\ 씙C4Q8Z?Ʀ/G4A4a4ε^tZolۍ7CC޹bE1bydsw"r `Fat9, /DI$[?(R"$H"$H"܎r?qK?nWE,Cp-:zUPv} bCb0^vЍuƆL}4]/Ugjs'JM@k8B8ӥ# E}Uk{@ᰴKamJ֤w ({x~3HWt iפG]O+Ů}'0Voe(9ܱY+#8݆NE@sA.\?Е8"GU{[7uHcs2BUȁFpˣic468g#2KnO8I_\wa'ɴs3=엻| 0@D= zv߫:;Pkͅq\$CtȻ\1ߍ̄9O5F9<AqGt{D@;tỳyG@'!L$DI'xgM}o)DI$DI$Dn_[o֛u;%;筯];B1ӆs A4NGGg|4-hRmC8Ty'56: 9SZ.ʯ 1rt҈E6E`@auuxO9<ŵ2*}|:Lu>NWV +GO ;R`:UݰL~6 d;a7ؠcq\V^F C>Bz,7;xte,],-̸+t]6+CZn[U] LiD/ lgaxaHU7 T=~qatL-s1OghbHgЅƴТ[tx 9>,@H./[C@|d( ǩEa!͐Ц]5++ ?ƪlw\poY߃v.8:D}o\# =(R"$H"$H">7k{ًzGՓ4"saZRfcDs?8Q"qe<[VG3leTʴ/(oDf˞Vi@:7SCGP:θuH.ϸT7uΚgrlՁꔧC~![1Óˁ:DS669ܟs"ߊ X,6g_6q4Y t|q~Oaxq8a~&c!7(=w n,XL|sSS4 # }Vlg!Ǣu";S"4糃s]'q Zw^82tmC6\I8^_y?^$H"|WwrQDI$DI$D[щ'=og/g?} hq= bPP Qϥd+!$C!WR*-umk*UwʤdDdJHn|{#Ng6 _"ډtnY#*&3lA@bHQ_(EL;$/VxAGG-1*yאrst\ 9"]]]UoPLC c}Czg,)ʆe@[!F@g|OV/%IcQ>gwF})[t۴c\'Z6L&㳨gk}jcT2L9r=B[+2z,۩Eh'=ݘʓ7:xgCÎ nqʎm9z!,;-9us ΢9px}E=}v+la3t_ 盎FB!Na'5w!;ԅ9^":Bqt%+d7ez!D{GYdEk0PP\(47v`lLWCS!GI$Ink,)j/DI$DI$DPY+9Po VZ0 (4fN@jS@4qH7;U̥#meD:/:Mx)t?r(1D=%&_첉2a7.vϥR =JRbno!tс -BH(#rYE/B,'k#qޮWnG@˖ US^̡e҆Lp582SyF>ӵlcb2wN6K*깃}vH@m@9}ΊzV bX8uT#ѼCs>hȘڸ憣 90xCnapZ6{eG6W,]5e>;[cr1{Q;?%⠳\ CW# JC .m "`{>L?leJRyO@矱V^Љ$[o㝅k%H"$H"$-;I@1jsTs({K$E=w!|[hQ"b rtt'!aL)d䬱pǢ*:k\u= ZF;g ڴς1αpHwXmCJLc(v hCH/2/-!wѲSCM vgƚbc4bu\J:ZLݕ);hv5\:XNUxĨgc5gϣQ4(Nj3őlc" C~98):]'LL+cb#6h΂#h@aj}nLBڳyG"Ahn)n857\Odki.TMש#%>I$)=l%c$H"$H"$r.19D`6Bf s}#h>%Yޟ!,LeCOd{/-Х 8p]%Ѭ24>\?2} YGa8!}Gx9D ~Teu˼3aok1PvH6dJst%ݢ}v̕ 2 Ns> 8>8Qutse܆inna2]JW'Le2[9[<ȶqI4Î h`sֹps6SO KulH6srݒAndg{8V7猂[#83Vn)XBekִyLBg q~yG]h[Aa!7%;#9h(m-{ۧ.rcs~psaps)׌8|c֙kn6JJU\X@'H"Mnxc79H"$H"$H"w#C"#z\.`Գ`Q]b"e@@Kc ԳtH(ynq: hk:JDv1:Ye S#owf#6^Tf`,\ (;E^ ӋfE2%%P'KkEMκmcg h}K>@Ν>?A)otsqc1モgAh Us~*+2*rS`: Ҟ^3hD O@g*L#L,g-|qEp3pn"#z)nt PQ̋co۸yqGP,u?o-#q49XyhnhJ"{@sD4l5d=r:v;Zycwf.ybo- -8 ::BcnLhuF@yy{>p/NDIdM@t6H$H"$H"$rgNЫutepS9 J͹b 3nB Qp8/TB[[rAOwM:p5VFn(0:luCOtD0^1KS[ _Pl)5G+Co]hw,)gKksuYh๺\ି{6b<\:i#@p,*q(pޙeѷݿ}J^~l(o0'X34ۍ\ſ̛N:@ۥF禹Q#nB+1w3s9Y1]D3(x8g!2ڧ׎G,vV39-sy׍~`nH60'03ʫ}/x#D ~_֯"%H"$H"$ȝ,= s?Kg>vA>2Isq|sМ+z<"z*=[Z,btuzzbs^;<<`#[1NLqKDA"[lѵ'҈.퀀)Ĉ`C,ڮtBEO8`U9vQϮ9cq t }9ҹ8OM6Gd6E,RA|GȻHie#'Б ]< )9"fp#ߘLV^N-9"p`u.FzȽEPM]vS<ӓn{c"1t -oBG2^@SG''3 ڨ'2V&t"$r喫fcpAz QDI$DI$D}x_zGUT 19DwtGCG.Yh3KNС;BXI@nV41m 35#!2/5bDafN<\1!B^<,d-nYf!--<ޱFV>1"09鬿l:hm΀蛁"eGb^ 8,dsķ+%{vhS~dA opU͹ͅ<Y^ ýQY-2(9&t]1QX AιXptthO@O{ hCx?qH"&巿S6㝅k[&H"$H"$H"w$G7WsGigq:`CsCnsMGF;},te'|eҡ8E7m>8,kC:bN!5D~Г^ V.tqmOēea]?4tˋ#Uv0)u.P]op?H3}K1SJH.1cB,~:D:⣧ur┴= qkO􎑫1y)[$z}O7̙G,M܍l`>jaMCsoHW"k8Ѽ*c#m9 ,5"cT›< }g;BXf7{ӎ!?8k@8qtbE:NQ̋WV|qC yo) ;-t#?!f6Ģgd)/mR8\ĔZ9@qd[O}JPe Ll) SoQ3Hs4]Љt"$r亃5{}WFI$DI$DI tyС48_rȷn^ -_FD]h~-;ntІ.~yM@*{"$CqwLLe}ˇ}m-ZD {jY+gKr0wT?L hB_!\s vWo@hnѸWo ! 面e쭛}KM:8j#~h|uKD>;zi9k02v><]p߂ /lbs\Fx;bsNd7=9:Ϋrihk~!0!tс.x, ]#CYڒw;ͷTh{#L}"SԝGTiubH"~a!; .$H"$H"$H"dh΢C8mQϥCw6i#sMGa-!c6:=>* zhOxgM@R{yn__?=]V>`1n'BkNx1ygar?MdZFyy&q4*iCc!27`{Clֹ)̴0jιjtƹýFs6bNy\ 3:E1/27Iv'K-Bz.)"!J.Lo#̴1ΝbXPR7bqzbQɡj㠝/Ʀ\}΍g=T6z x~ H"xgÍgEJ$DI$DI$YGSZ(uQDD.?f!qS]FлB@wU&r˻:;b$ok1`bE.:S\ߍt)N98,nY= ۖΆLɱi jK@ki)MY7B`}2ט6&_NE}6:Ӎ}nL3f9t>1<:Fe^B#[Kۊ[J8Z^QV mtK9Hgu"{Z|'suAg꣙ .JDId7F:GI$DI$DI$Qǖ7t( J=B6WG(6(("ȳ=A傣8a\! 0M\s*[;8dcCJuoݳiCd?KAH"01ĢX.;d<8袃0&:"N"r˪F>F60uRՍtţ:TFq΁SEfmX:xgnF8)7lcZ2dypD NByIS7;8 !?6w0G.;Ȗ4ΕKeU(zDσY(7#]"bvImql)W/?RmT*k/A>9~zk  KY@zkNŋpT ]&)[wAt%zjPHOUQuvfbpTD qd+Z%:ZŞ9ѩI4_a38UY^ TU4$>H %<uaVjbDed4 .eIԈ c.OSO{ 3B_#sL8D@7ڨJR=B#N==m:bc./jQLu,[V[ty,a4Wi#_r]Cv$w C4X[ փWw6jC=2X񲣕iVW0"#/ . 0ٱ]2F.q~pK6Y Hg2iFs!F#H_Fݐs;h3  ˷{-Yv;HGXm[YG@3RiP7V1^tIqW8]_Y/+N16rUs#07x..%295^h]nk;; |7@#voTkƸD-H lV`ХJ=Ƌ4][‚ t]i+n*Y)jMLC@ G$mS?!$Kb}\B\TT.!7p2`HY4N8a[tOQ=ܹsͷDo[r4GdC\;xgn"dzޮAl[u܍q!N1 kxo;RYX!Fvc Tue܅T!b}{gjՓ.;d9t}ܥ8:S!r|}*]&:']}Y~#*_C@;H#ZH&bvѼu|tt@쳣.>oC3riD42!՜hNT&:2|7WWn/:yY@;49#{}q64t8 C}vrǷdl(,g<%74] s 2Bqq݈󹻊8_Q^CQJ;h‘oO::]R:|eh5:*GaĖ;RtMZ% BeV SvJAUi'[7%ˑ֣!i".j)hQn?e1Yvdkу D B{ 80LtMB\ܮϽKQjIGM~ѩʫ(MNuɫR7Z7KJ#Y2%VNUhG_"슸0IGN]Fz svUm}X ,=Eш[E"13[ h9-68l bm.w6.zI@OA"L'= mLt"[N0& AEŶ/whCsv,cr"q1i8~7fgØ =cʘsZ>uT-RF=ܾ*[n4ό2cF.i,r9쩻 7"sqTFΝ3)g1ݘ! ;xdY.;-a c=8<,sKݚ"C[o]^8ycGq闇;xv!T.; ő=!+nĢbQ%vLg&sSyzw],Zp/w! 6SJ-]WTIe2%hN^pGZDX*&M"D-2^][ڑ,)7ȃ2&rNjy@m8EIݹ!Fvz]Z ]%h]S|fbFPXn{鉜q:D(J>ӣAᨘ>赨h.v";/:U4ms"(I&Q#~0GE$/V U-Awq-ntџnw6A[]jŦu}^` ^p'us`E@;T"(;!1^Sbn aLYX~1;',)̍-wu<.@dig܅Jecz kcA1/#۵1$!5B?N(cAǻ@?ᘯOJiP#Mno#]H5"dvi ZfmpCm9?4W-ͦ< Υ @D@\s't fM|ap[;f R2s!N: }|E}vq8ggs#wryxKihK#%CbLz!ma<.CԳ&Dy繋ȍ7ިM-D!.|IVrKGǝKkP:z= }칉t Uz +PUQ5,pu㝅kw-x۟ȝ%#5MWTB؎#V!M8Un/UբQ .8V!A 5i)ˆ=z.MIcw"$Uդ& U$(H"Q_Gqʑ0}_wa%getEXPRŷYMtF'l B ]s[]jA7V%rf ݉Ȍ41LlYzLS&;q.3-Cdd/\MnGzCc/VxZh'"(~c-~[:w!qy(cO.;gZ1;9ע9~4?8%◗ڤ-5Wm!oNBD1wt' 1˓9O[DAG5̹nLԧҭ#lJv\t0RY`.:9}vu#9 br\B^N6< bSn"zW4C;|q-m1bT`n# aC-r6Grx",RrF;.5g-Jo1`9ǹ/]Z,UKdgŪ4ZAQZ;'$ R#@: yqRϽ BmpXPV(Nu.-*Kt:U1MbS,X"u :5NM?"I?QCjXc%Ȯc&(G]C|\)ÇkI4|XN{,OIzՁU$Գw $8r-E@ga6:lAcԳ -qYH{#m0/>cA{^nJ S{ gldƹhJm} ޹ G=<;;nzYmz(盓 d6ct7uqeҙXy1~)C.9Ysm2TK ;{~/pip67<žnY4Ϧm' dMstY@L`0>|yTVlsL./Fu;[ʕ˷ʺ9T>?Fe hGÕ:vqmG .s0sc}9ߘ-~ehZ 1ļe5P".C%խvݥ-MqүkJEbPxgM}oɷ&rW -ѼDt.-aE7-XC"U"AKQ{ݯN.\ 6 &!AF8%V)ݢNAO:&DPuJ-D(aS=M+lJ.ҝ[;I@wqB:$ GH䐀Y$G$yn1>zvйdO8#/DžlΆqXΆXmΙGpxZ9F.ώm}/#q!nϩZoɤ~Njcc h9U-d7\iV[cI㝅sD!UߧaS7 ]фLc2݈|mPT I6ɬ>#:rT\b!;4.yneD]#Y1;<97FVTY(/"h-k~.~  i,92sz[:{oˍl:-txk DqD V^ium9$gE3ĢIh*v |j],"9|Q ",60P+6gG@yM5w)֎e]yY6mַ^qtLdׄCϭ[R T25OZlTdܵQͤ5y799977dz$v-<11aM}/\Uݲrg_; 7eQ$/jV<."j"w- Og_1߾/Tf7NMM1̬{]1o(M׾5;33f͛;g>r4j(] kr'NOO?O:$NqI=$|Ep$qλ.K_ҫ =P\zӛt5pK.Yn4QGE&45Q[׿>SXczs=SKId$?c/T~ջhOS9dҫ214 ;[lyы^)͗h7lRb}БsTz-2Z"9`A_Gm.W@6>9%tPpsH@Og*bQ G=WA2+Fʸ2L}b'Zts7 q*X6FϢʹ!^];1̜eqTu͎ "_Ҏ&WUcМɓrmPE3p#]ssnp&E [s)GO-sL NgOW=1O9eTˠȌf. 炣UMܐ#6:.мoj#eN]%v\sq{ ?"t|$e^ =C=<(ZhG:Jz[qŌ=D ۺD@"/\uBF,ۆPoĢ#vȞ(.+zaRoYZ~KsQe>= ][s3convƼ,'s<3O7o\^OLLhy!a1::z饗rӟ4z`? Ga HTDzN.cv{n-y{ރ^{%%RbRܲE6ND0`NT]V{eC" 3)D$bzwY\5WR>aqV:@XoDz6S=G>X4D"v;JȀ0 :ˡ-`'Ao)KbaJ7jRJ8U;}_}ӟUwݱ[SJ3G+Mxt6\Kя~畓5k KLfv{]2%[Jdj(-{] R.TK*b궠9ZgQdi8(M@,|WVjJT*귿?= w_r%Q&P*P%;4W\qcXo{{Va(2 H,2iB8V#N%I=7dq-b"?Oxccc/yKz~sd27R-a;*`a+V^aӓj( H`Al2X(r>/zы3 +MGPJJԍ:CCM300@%W"롄- ˎ8I\99%/8W_}?s?-z cc(7"TtF/8hM&b:3:袞=2( Bա,}ajvWN8N2 b]B2>uc 8\j+ZT}@]Dz\61eِ) ㄝ4헹"2[GOur2aM#9eVz#\YKCs lf9Upfll\{[OFSaűqf Y9oH: 6giNӜ.kV>_}Nu>9b#O:g?0D mmf*[pЦ: Ĵ8\t(cE@g8ط{n#?f#\q0dn!t68x3C_6tܳ@,e8F gz3(LtR@w`GGQ \p}ou~Q6<?'= /61y` %v\g?O+d=dWdͯܫe.oӲIM8%ouJ/%B"<\UKPI3LS i!bQ4_HS (KYaW$\SK0JnGTEH4vW4O;>׿ n'ͭO# (EuYw{r+1Qa.qTPnnTLnQpD phU)W1A%K_E% K/ \r%׽u7p׿{P /PV bP5{㝅z({9*)w|qG>/]Fv8MW9xAt pTX" DPmv9AoѺO ˥Nˌ%!lWMHYH~,%&[8Q۹;[SOW)HKcGD]׿.jUVY_Wr[,QzR㈸^U4;p />W}MzWXQ⒮rjYB#8S]BPTGEm#oȡ(B{?>EJ9-_iя~UիW=ZRgӉJ8UB|NQV픀~GJW "QnEnA0B1__:3L}=N=Y#QV.i.)b\?Cc˥?CAy 7Ѥg?3+e)?<lK=V,Y5(gGJ#)82Ol}QJ[|F._aDEFG,qJ%0S^#}S"ʌ.)GٳKj$L\v~ %\ҩEi>)ozӛBPA]$c0GE S5ő,)hˉ )^nQfr= )  JVJ#1!h%¼*CկrIHK@bLJAz P(i,Da.)"cj:!?.r-,,Ao('PC"#6mҚPqDPR3*yw-^yo}U:25\2좞#|kfc'l9p0ƹMtˎ@,!;gG@{-c]rhKDBHUGC)x99PٸOi}!!~!rQhOZ.Ѐ ʄ3nX&A;D6}@)t6, G& gS;%nȵL+6UWl7QSfz6xl:78K Eme܍Ly*34jN 'K+6]pعE@;Ydm\18OsTre<ܡP 8i Zq\`xsadQ:lsF \sOth]@'Y|"$yBryIXqΡBGk1ĩ4vAH)=GAP"hKAz_܍ %bIYTGKz GEnDQa@"( !$zP v \Ȋrh2CJ 18J \u{gD#A#,}iN9"( [#v{キOFa&RrzGtJoʘh*Qn@]EG UiLPr-&%b#:5.H|0// w;OY .Q؎єaOxgUn.Ix͛/Z4S%%-4 sPrt E*-aD4E~Ŋa-:*ψʘ-L8Qp{ H%Q@JEv{AϑK XnTخJFC8A#©"#9V\I:#gP" ^#,JFbtѥdCqѶ5-lnU4 p-3N@d.7J,>)GEK>VQLY:({{S ?%?I${OO(`ԸMobTs1_Wtg)8n Aa| rjw钎SI qQ[,݅9JLs#233F8!^*.y&%N%JQ"(ZRdFG䪫z+_~?>AP:ÕCf.gyZ5UI\ A"P0Ҹ|DW'Q4RJOy5Q|[8*&dt'`Wu "%htD|D'>őS5GUnG#l[!>#u.*GnD# F;ZPi딧^r=IObFq Q|F$`%TNX|OQ $J.]( bZ :U*KS*"B JS{эhUhZK,N}7щbrDdGi~Fl4MDTW_}iMOO{=rkzU#a H$W>8;6Kx\2a)@at mY31șzo3ȷ8hF@gjSQlW&As|ppbz"$d.Z] sLqc4*ShOF;[0!b427iBJc<m9l조3iy<,g3-4&Kl5$B'<^5@ah8#6YsSOѵaNcT`PyCb9D 8)V]쉕GV%i~Bnd{n{hsnp1#x#.xo7FnݺUl-w>a7e+E,/l-(7L/H)<%0BO-d@yTi7p] gReq!5Kh (1?Oekw}#qL$%ѱ_׿2=՞ng,FV)NUj;]({.S]E}s'tҳ}{DcD{i ׋_TCOJ O?Tlx>D:E)B?\[^E=!/QRc +DWE+.Ed!iz[l!1KRdα_bdO얞O)ĉC"_Wx3WȪU 򓟔~0CXʥgYѭ\{܇=aF@B5I?ݾn-T'w>ss=k{7M-o|###O:I=55Ki6$bĤ[|ID4Qݢ}}I,Ǐzԣ|hg86"9}ojBo~E@X7H۪wX&͸&Ft-;,EOEn\U.ʧ.qbD:.G?:U۶mӟ=EwQ$,Ot%d{VN? sB=^"C*NOTRjhqA ]Baw(O $ >sJ*9r@}J3Tc>DQ͜}n$\6!ˁ 4l8e)rahk빗nưSwQ wux{6b7vbC ]sXЊ9bN/!Jˏ.B?(<7lwFЮl暛?Yh ,mh<z׿q>*;;N_xK_/D!Z|SB?;;;/~ gqg4;<հR@sF@o׿+>hL2w"Z'?SN9e֭<먣zk_{W*O,dlzzzFg?ٿoٓk /B>P_O>l>@"333QUte=9a%Ge3eBHZ/Qj*_Ѩ ׼?Ԭs=N &>\KLsنo}gӲd/~+uqox9昉۷ug?{H-[vi􁷼-OOrai"za*xAI'wOS:,7>c7Q->骮O~9h,z{`IG)6l+(5}ɈQT8IyNj|!X}@1rAw{.'䋃7}܇Ԯ*JJ'/p5}AA TQ~}tPw0.x. w7=K gb<"d[;*B۝zꩴѨvz/K]YBЇFSKT,/|~N}{C%\r .FW$W_}'G?Z{ܣT*p41`U 7ȃF.gC[b{ig!}mCX1 .QKo9'&IL5DiA2@3Q1k(5~[BX]1hGy$UČAc]~\򙊚1zCC‡?a^JPT TFG.B%BN^=T:a k4MF),OQ+SLKf{ H4y$ !mGx٦ S'z'SWS!šW _Bd$xmJ}Y[ȌHG)ˌuZY~=t9s 泛1K/T&墭9Ƀe9>Li&5KT/Jꄫ{~x#PTQ-ʰ׿Nu'o)>3!Y썌0z >?n$&tv-B؇iփ>܈E9x1?Or9qԧrYz7SSNHt*~3ML,Q ZOQpI_]fZgzK3a4DA*&&Wx׻ޅ1K*@ԉڗÄ2(K(]?X8Qj-a`'Nt%Ln"*1dT# j%!W,-=D5C̽t|+$D(ZLr4T)b.8/ȏ=VtJLV'z¬թmbR@jMxG?'aUf"'OyYW:3lӵo~JD3eD>Y{$UMɰũa5}L+1S'>L\C6ey TjԕGrBh/1Pjy~$H/}"R&_ve p*=A1YF\F~%BHV_HEP'Ds#;UkCCCDW^-a] CI!+V`bz;4˄CuiP@Z](G߱euhhW,9W晑h5ے~d7 "ַaժ+@s3s+PHh)|#F ~C̷L4R #\\?rZ,UWo~3,2݆ᯤb UIbJc%/ +_JqF5ӟ\^ ~(G{ЃDPcZ=Ϣ ۭr2F咐='jYxa>/:o611Aɠ{ӛtd]B9Cg6g g6e!L_ ^.~:N=WsĭjBn ԔVJQ$T~_W'pYq>!'WORY=Z}SB9󇇇u#f*`nԞ(YCg=+Zv)?zM!?%sVk\"{zQFя~h#,6< 4ʻm67 jqM *X 3dFuRK.DQLvx#uc*:ˆ*š .Wx+ѫv@h5R/R-/CIk /(&b4WW6G+yf]n_Q25?77g3o1"2|ELwUZ~0c0A$-jWf-:44f$seCgUUs/=~Q{]z"Gg$q }_hQw:ygAX0[#si,d3FX/c|mؘ-盳d4Ngj317dĢE`cC8Oq6S0PI@T*56 |}b: a#98";M wibH՝N JZ)CH@6R.)"kUݚ3@Mx#>}(\nxS1o |Gg2stgTxbrΙ\/ s8 /=!=PDg8/Yw!7Fc5lRҳ(nx{k+ܚsS]X*bm^OjF>wc8l\xYr5֎,:Y,ea,?}s3SuiFmYOIL,VlqYPkjO{CyEQf){<6ԧ_DH>W{喚hN;A * 0lnGIOW˯J2.~s9j Ѻ7w饗ZF7z ECهS'VR*RV t -%BPܫ֮]KꙈ({?5ypJK{ޓ9_"hFLOHUJH |*vZxɌ zӞԧ>PM_V{9g&ͼ~A~\)Ujh/}K>W\q9)Q6զtZ* @A j5WcygdI~#$ȑSUW]EK,Q.u4]Jз,>3<IZBdˤAfɴ| 'نKtWy$L9;Le x ŬN{[J(43`mbPF8yfeƣx1[[~#Z^ERt{M/e'to5(s^\"N˼!&gt"ϘDj!&3Yfxr](epeʂpddD15qe]GРL4eg%Hz 7MfxwS$E  8SeFdi=dBs9LY-yGaEoԤ/%jI>BUY>-5 6bҾLwX`]LD>ZkMY~al|'+BHLMMQi(ٷDlbAMv/ [uX2/B*G)-''' aX38|ch Q0-Xq an& XtKxD$ O~FXk斅Z][ņA'o 􍗼%QPؐ90B֤LtQ K|40Iz>L4£Wa|U&[!Y]lo?K8B\s7N(zؘ"XXݗ=q(he1~`bWɨG/BnEqO6:Ljvn4v/r7t\]O%b#+=P6o,D R(D]+I\U6N#0.n t(^nȥ^JA3uO>;d6-ꓺd~vG̈́$tQ&%3B+%Y7.iPYzJS4,)я~4=A*-Ι<}Nw)2"R2E0RRcXmj} ^S_oUvƮZEQͨozӛ-oy .&s90}1)UĄO/L~hDhzqݏע'5XRa:SQ!=/KȋPzޞʉfr,!\0캑j;!=yR"Tqw>cuJ}eG"% PE/ARɟ^mK eT~PL:1p+lKj8Q@l-ٶmF.N:$DGS RwyZRJ)i'p7))N 6_Az֐_~$BaVBƶuQxGīuby %i<9A򔧄[m+`1~˖-,;N-k؋,15POQ2/| ~_ۋAb=Krħ& JƔ\Jd.QuA ) {•({d' }u\yh,; ؓie,7ІRݡ2eldb*)pK}jio:[fzG6d7EqvC>WuߋKU'SɁڔB"R8e/+:'u5XN$dxmY*ȵEp"C!9bУ4*_r[Φ LF13AXb#Mٙ;=[TS>fIP;Ѹpc2 c@3mNSO4lL<\x:ۘIhV?kٌ1jL/#sjz]poMjٖ 7xѼgQMw7I=0j2Ben5o|-F7˥1 o #B3p&-hdY[ouyb/8y^/w)/ Hgg(/?vӉnsKDeű=Q^ytyQ݈lu8 G8ܡBx |8O,([ͅ1oLѷX.  -f>*/cie}b]Zs k}V0қkY[}{3j%Ba*.=D{b˵EV7t"v,b}BeŜvkhxGnօ,kbcdӕ#7@l KΉVfd{ኀVb=>Kh ]16[h󶷽vV,(m}9;;ka-x`R"Z #lEjˇc,G"6*)lrh4dkn(@h*֮>/}I rgųXՎ9j[})$e4}rQRuLt/i2ԑs7Fy4IuᤍLJW\qb2o4} K U߾0kv{k #LJR꒒>X~eU(º$}-*A:-yl6KgO Jn׻U]Bl%^}sE.{~Bh`o.rSnR*4lx1u+-t6{{\ʷz#x_LkCCC?_;P ZJgzY@1Gf\p]@yFmf?>Y7hȧf\.@X=,ԉ>?Xh2+~k?i۳.bH" %:łYpH%VO~2iXْUW!Ò5&mcSK^@ԌpNy!Gk W^yw%MCh@_qg0}P *L<,Y'P>WBM,yLy*>ϸ3?pY}_Ǿb1yx(QCvđ7MpD@2svw՜btf1}@:xǻ-k8htݛ?;aY+tlNcKӍeuCYr7,B WEڅ\e#~y"WWTre쌝Є]&&s Gyz#BYTr7tu eqls?w\ mgCsőMtsf=ܗn!Ӝrdlrnps~p!ל{գ>0LQZ<)=qnpfq6C H#{g1@SYt!шv>-Ȼ7.9 G$mt˖y9t.x[ad{7#}Ix:=GdqH@;K.F٥vd8 ]i+ co;]w7+-?:rle򣫞v l-&le,U>b^zs~b؇{3ik,->яFZ2{xmZ@DóX.ibTe!@feǬ Y걼Ι[t&Iv<+Ą"]t=~=䤓Nb%N,ء,kV񣣣7ndy-HʼmXSBaO e)ZbY-!!j#0ٺk!q̨O6z|jmЧzSdӦM4lzZ(%dLlfvD/֟rG[J8j1^Y6YծռJ4ZeG~h '|#d]4:ȹFCr/xjꊆ#yksR*9[#!fllL}IhF%?*5ZE {{!3Y9a #ox?g?}{/׳?8Xv*D(8jLe`Mr)R"L)T&%!A *L+Aif}CvN*jTyɪqÚcU ?TjbbƩeR2TYz1xոwSS7qʕ fUJf:'J=4nCR3#oTdvz8[֛g*=~@W0П'gSqnK? ^z5(}{6A1xEJY:*ZI)NCJ1Ʋt$ r722Jy);d<[,c_fGt9dfE@J͑ᩮS .wu{O|> Kdm,4J5F0n&F^ߺQ/(K&r֎Sqdgl m64U8=am-ԁF9E'=!ͫAJ md' dU2@[_'3h*/ٷ~K_bN浨wn-O{Ql,N4Wh%8ғU|h^"b|ǺuV1Pl`z3{7b0!FֻZw2Gϐ//Dx'(3 Uef!ꁱ&O|% G\DWW |+U^l툰ZS3MReC-:E=+jRY}yg^'5tb&h-8x_ϊO}bc,t^O:̟\e 3y@8iaJSmK-: 4zX8F젻!ry,SQlq9Wή9s JgC-|&L/SΝtv4w}ͩ ZN! s578 /o1x9mFhcFzD@ . ̩g=S"718kٰtw6.؜8w͞kchm5{gދl#E@?%s\aRܟ#˽/R؝9pLynAuՕ9zqVF]9 8Mog 's 7ʣ /v\ݢBV *2[8a"0eY٘'\Bֵ,"6mUk\Zy(!-V[dK_R6"h؇ϳ056#%l%[R >u Nl?ælRd!<-WJ̫NeOeVfE`.+<FP.lZX>Qҟ鱘{sKQc<'Q ^z1/yKl驫?~ԀGyXQ>?I-n\O~Kz Y=`_q|8 deNFi2NQRccc*/WE"DmF۱-TE(455vWGoy _#6dƗL-W'R"ԧ2^TCEUjMiUj} tY"6d5y k,3WP=i*ޛ*T:Uhm>oxD|DM;sPokBCiDES*tc$y2RL#y.q Z?Yb&f`jU2?lRXհ9Y.xC10_K'>"|K_bץQ^~=ayӟnCWrj4Z_1(tbjC:6 r%b(>Z)햕[ 螈S̋ M1Y.Yp7z"# eH@ۈrlyŦڒCo m !d>0\m-xgsgmb9Zr #.M9pgmH9 ;a$rXCV{=51nȆE37.픅tэꊣ+{qՕWWr<#Z-ckY@Ozz,W^ޏG@#$Ջ=ye<ٮNMߏBXG㭭ٺ[_[n۶t[Ȳ2?Z,efl5G`'*aeKg)dg=K&غ$f~BYX[7Z !ezƌPXB\WUR6|\XX`(}Z2y_D?ۂ3sȗeK/~z ߖxEHJdb){)_ ݀#L"?я13ֲ[}_/C2 eL˘qf=-6Pv\b{?cpm6 ֆȣQHaQ98 *JԒ #A#Զ˥OR%EeSDXc.Ki*g?Yu]G~J A (SU&[*g~N)'9Jp 75&H@]T(Z$bNsu Re޻ܨOo>D)򓟐O}S-#O'Jv0)KhĀqD_}ӟ^,5dHYbaS6nБ)ȕf#fr/x{|a.{{ 5j(& K_5q}-O}Wf1*Vr1Ǡ!Y>/%ͭmnA#3BnҚh&UT&1'< ]V`FX)TtOP~=%dZՂXKUv>8ཬv"F En&3Ls;zvŸzaseMTƲ͙-nrW М{WFλu. o)l-9^xKqp?:g!"sd!ٳNsDp.xs]]~}ZhhǙBwQmĨ +vD}11YDrXIbt>Оhg?\h03AMy,^( al奻j}OL6{Zh0ݯlg{"}m̺ej)}OtE#ӟlGzj1]"c.8lTP"+{nyLOg:~D4DP؎fR>%lIuQ6ُi7h(T0E0%4}=T7)0W su]ok}Jco }#2aʤTr z-%;p"dR%ZjG2 <7|:B7ΦR#!k?Ry?,= ! \S7~w<s7$:ESs>92oK4P fsfXw}m0OfԌzLqr!hȶ_20Y!tf/v|NG?@L|ݸߌ@7F)#:Fo!S%;H1xaql-'}g6}ұrֺZyB9ѩR$ _7Y YV,F@vL$,5!?3wCG~YHJfN2WcQIeam`v}9fOr)aDS>"Bg֚’[**/prZ/&Rc {whVm%e&eN84=lw#$}v4tnZ:.lp>c;"uIsOZ3w+!_DzS\u6]}P 1=` hfp+;.F: 2?"g*.g\V1p O+˷Dv4zm\NC3CL٦v@Gsڜ 'YÞwv<\Ou<-t%nmoΟGѹQiPѷ- 2Pn,+?~uj+ae/E=/GG=;Vm,{$k~Ysr+zxڕb}ĹN` \12w3bYjh'p|}_[f}PCIɊ\p(}[vX e|^^gh牼/}[$}=MexǓ$Ae裏I}Vv Yje/\IcE]"&ae*˲]b0mM=Lr)F"WlΚRNJv+_J-aW0Lȉ'\]^T211!ۥ=jC ^EyUJGl4s\?&aƽBHSBx v!KGJ5Fb<es- (i HUU^112e;.Jǎ]qd-~H0 yFF !ư&)F5uӗTJe ?k }Hձ14Ѭ"gyT>[]KyNzֳ4xUudn:4׿nӎ52c4}XßKd:W&9"v 2jf?%݆ @. Qm FZK|7ͪ=ܓAc9H:UVoɘ~SA."CCUq-JU|DcDA[0e& Hne,OtU,gNgG<[ˀ.wyfi?\~fT˴)N}ի^!(8Yҋ Ƌ40y Q{yoys{Jt yы^)*bBc!^(Q1ƍג7eaS5XU3wEKfmP+.-?Dt#eHx_XX٪ ?O [EsMs lDf}>L/άك.> ?&Td.Z 47~od.ME6QOP4"k9{8+ұ =Кi~SRoSIVyFx_lR0c %\{ュ*SzN zb2iL.v A%V[J5!+I؃>a2DCɆU~Ov}E9E&#+4jb!/&q͝tl [|a=1f8ڼs뮌w!pr.?Wй2 ` h tpэD@g+Sve[4X8:80LqV;. 234X[/=I'WlJgS@u"Us4t7],"XVuǟ٧1U ͙~tVnuԳ㵳ۆ9ap.;8ȹs plՕ++109T]͍ -> hِ:K }s{E=G#=rPzwA3(z7Y }{ʿK;ꊣrpxXoGwQώ=}'b1OD䶱ҡ>R/O :: rl7*Fv}{n@AQ7b!]&']Z}-%,@X٦-[nEEgYj׭ZE]V0d۶mzvTy[by6Vl:6#-y+C%)`)l2> YN=o|4DVY<тT쒈@4D`륊"reꫯfl \UOIq!HdI|;#4R' Q{,ۛ7o֊13~x?}k^Csz饗i\-UYjA:@Ti .&ˉ!oE ºQϽR[0 5 bf;(K5C]!'nMnpӦMl( 궥!\pڔs %4 _;TG/k -J_ y{76WfoKW^~@OOKOAJU\ y#mrwCKy?ij)pY#F@0M<媫/ bUWʼ&Dm!?q ^bwLFV0rClřpxd42@U9DhdM7d~w_Z_zrNjE5"̟6Zyo6;z֭[5G}[2S0eIn7)`^'|Dѱ~w\&+N,7"Sk-LBU/9~^ȃUCnz*YEFtC3*YrdO׾8R,!O"yث KO 9GrHc1H!_ϫ:3 }U#8"Yvړ$}y~ H_n~DT@5[V!GV\_2$3-,ԕޭ$b#d^)Y˗5&&[Y9P"^ukKL_Uo +ռD! Z-PqwIyvNr[BJwO~PQΫ&"Bj;b<+j|:~ 8. tHhX~ѕ#ZZ#+V ZE!؇z ^,j? v\lBX7V^2$`i;"1~8YnjVKوL255[KU`MYS̾}{3LC9.c{?g?X=CmR' p|_mtN:}.KR7VrȑeD}7 l E)}qY捝af2w֭*G?QvG=-˺MB; Roppȅ7k_Z܊bm6Wfo|ìH۟ 'e4+E<Eє[6]Qu"!M"?묳(ݿ>)ɑPFV9*hDW>* b{KBtg,6 <x,iZJ `LHMR|ׁ48Er*5 ӂ=AP4#=ڵk438sKi*~eKt6lKɒY\4";juBY E{}饗7]zye><}%HۿߔaBx[F4,LT*YSC]t~Y/to~5Uvr=^r%~d5yK[20AFU =y"8:&d*p5ٕW^ivLjGIvw>k62`/ 3*u\&J$ MݓzF 9D $$qdlXyy= i$֩soUwF}{yϹn{Ҙ:&pю?.P\s5)411/}  AxP7x#W/_(<|i}y>@ށsKď/<}fEV|_||s ^xeuO0ୄ.V@|~)<.χO1^ x1W|g#84P\pǏ t|VGAtM`nW\q޽{ ^![3?o@Bl.^;l[V|J&;W q=/S_j_LPPYJC?y8yA jC0 4k4~7<2dj2x ~ƧztonOBUy<Ů~%NLk >&|DWN00!^x"NEO݇>7||I9 /̆4+ >_b;tqB!^wAǷ>ǔ.gIR8|# X>0l ^x /8g|]g/E4|AZCF>;KKKxx~]r%5~G~뜯[£SC3 ù/<:~kp d||^w /HC8O<<|8(^xlb{W>xUof^'!wϑmͶSI 0k8`e.E5VaQ4A{SI8QgM |4;Jqgl⑝KPvbSyZ ) CmISlx0wI0:3{æa+ARB lβe˖@A9v=l86}` sW97ѩ_tt 9yUo*qc ʻ6߈xcʾK;u-+۔y5ܘ,,^)]Hb2=X֠ b8!6? CP=e h);ǒáC0Vߏk w'RMT`wr$6؊ ՜bnStʔQUչj:&C[#S9ˀdX'M }a,:F k!G4^6‘+rCL]ܱnǰ"fqjF{v.YS"9E#mZc*bmh4TxiDssImڗ&LQZEˎgxM?rL}QԀN} d8sq"]#h|7frȝwމo~ ߶?oW~#aFo??S a& __iK>OL-JU[3?3MȟFAҥ/|7e<77m?/%_YVw5^'s?s/}Kk("W+I)Ư5(}^? ?Q‘C _A//WfS@~xߥJ)eų<1T4x $Ax}SSUX[Eos9ro Cxšq___8"V'O{+?&U,xxi}_ǕǙc~;9,V5oZ\ Ġ x8aKn׮]\WnN9+𩅳T'!ޘ_pŠɰ;wx_QㅊG[[l"nw ,W"pm?)K9נn_J $G)~ԏD<.|7߶mU&~)JS%O|Ob"ŏ.qbY6pM0ކ.&>@p,kLp ox!<~3ҜWU iS|ٱc"NZѾ+& (q߷o0bַ,<;+7e$(8x ؽ,./ +C? DŽ!6" Q~o:pu?ً5 'Ow%>Uaw:> R|+_;.nW| 烏,g.>9 x[/o\=([ȜTGz+?X Y#`1`kg*B`A8 /H|4 ??U"w9mvNdfW0wO?}@]{ ˖-dY u,Եϴ m.m0cNS΃ap9tGvfCY=Vɡ bݽ`c'c@dA g*#Ky8K9 f@b͑jyw fȾ~0t掅KF/b<%vSi7n*^2PܩxSҍ]k#ny6-T=( ڶ-97S .Zvo9dy%̿.y݅bĐk(Õ@e:q@::\!>|qqyhL[[qHV-}߼19}K_"Lw+}~%Qx"s"x 7 );;މ^9?(\X|9Ư/BO"0£CK$xp @3㪚q1I"O"~|8(|Cz8.c\|W/| 1ӇxXGBfcG =K`V_zܿ)rpxiA $xpxϣ@:fƧ#@s7!b };Ў!xѤ wu.)B'9xb6 ⠸w+3Tawމ+7|b~d 3/>:p1R C /bq8<$q N渤hcx+Á|ev G xs k1<@<8Z@J3mi G\C Nzmq>|^Kx8<g/p8/~HCWk'D8m#C3_}ӞKK=[[|0Kg᳀?a LSE_?7U!V 9珇 7̌'1}ûg KE<>шk4Uql3[O}]>9~ۄcg:K _+Dp|CQW Oa~㚣 gl||:#_lpnxP|ѝug'3g ^s k @wgó:A+v }CʼWt=lg6t-U5⒇;cAAgmֲp,kZS7(}6AO cZvΪZX в[.%fr#^3_ nlrT|cg5M vs]`Y^;0u0 鼰@3X2o eY$2U'J^bBѻC.*> G-=,d?wy/]@_U/T/kY09L'W-u"qa`u˹<1Vĩ/xtN?_3뉩A|q>;qB-9:)ZW;۳īybAGDI-ܢB#ild9((9 )M&s\VGz Ùé4&eiB^"\77V&V@i{':ߝJdW&ۇ/ѨkU b 9 W.$#8 -U!]l K10St pL&GP-4Bvlȋh q]ƚKB/vy ΌNLܲE nNŖ|1.C̄ΠxtL$:?'i0w__%/a1oͮ]o?s e9<4RE-zy{'J޾}__#CeXi9 86h9ujU{eOg- 0Г^lz`>L(CN-ӐC![;.S]l5s6XRc1tq [h 'iq g8 r i#'D|44B trtc!zh-x77g~a2g%[x8ᜁ l#&`[fFmcx!ד1wEv ز혁1w9Ğ.MΦsr~94c4(39v٢[p1b0f1\OآϜb&h1-1z <$l1ԣ ғg)2QxVHSX;퐶[.X휇1Zׁ@:zfو-v{2B`3L]r[ afcn1?7333O3|k_{wX3Npϗά9H˾8lAa9BhpĚlы6EqBiwvUHr[oH>O}|8H@_Wo|#\-..j43v`: ZM;햵H."9#h1 4 BFmG.}~Mk Gn9[j Xi/@<.Zx,Bv&ݨb#J[#9:tsB: *3tEo4ph0Ix8(tH}.˲м@gd+L;քwM ? u\Lms^ܱܨǠK.Gu3L錝67Z%a t gcM|`w#55ϺҙZIt/ I;yJݛdo(c).B hރC M݌s k)̐ Hk1]gyUsB;b:[my窰fBg5%L9XJ^; ;n1\VzT֡\B@u̷4z('l}M~帴ԖeN6:E9c K6+qγI)]ڗ*ݕLF=` 4_{#/%@v&C: Bndl]-b˱|hav 1ǎ!DvS–^gl!Ě-Sua[l]6rBI5BTd^^X `y(ZC>OVUQew]v A2'Ė^Ga x;^ ~Vmܸ~6+R*?yX'`v1XlVA^4'@K$Ow6tV:3P#@i>6.LlM.tD -ˑ=la<~E;z!]Lf>L@ z`i1z!< c3C0مQE/H΃U}ݗ^zӟ 6wy_|n ݨ0Fq'A+L H@ucq1{!f2bl)Z!O ;M!fP0J[0[J5FL|.ڹ-E#cX]v#`;3`/U !`>gL$bMFJv,!Lc/&@hV60cuȧC>I80[$3M VyS&= GccvB UՁث1Ӱnv]3 AAt aɌp+s._![m΀-LӃ2]9@xJ!a܅bȈ1{hc( la L1ڑɱ Qq -آ S!T 刣bs8e;vo4z~\wu|g4n)3T&A-g>77g>Og0ɺ 3a#!E݂BΌc6DhΝwOm𠹽>r aB/e<1e(ڈy8sjdw.:Z4`Гf]r9]ߏ}?cz8:Hn/!SAEE.H `i]h.c3_2 B]vA2)؈-&$Мd !И sF' c.݂'aZt,bChϟ.ŖB&{)`4U]BA#MӰtby؈9PL41pCE blf>cZtEhׁZ-آB !`1(wu bfj#bۙ.-(E#vA8n1C]] p/B Y/9l9Vwt$0+|a7n_*>92'thPp` #F&Cl 4 d7"@>Xd:h f [n߅w]jo_.ooo3̈oycN?a+Fldr]'2гb#GEF| 2 [t! 4-; aW1G-2%{ zVإy(4bx ڮi[Bc-s@o؇.Z8M&ŊQJO 0aݲхIZc>'WhAú똽뱻\ZT,ܘ}pRfoYg'eC;3 ߵQK˗n27t2Wgw-:K͒9QC8D`S@B.,&N[|c.7rQ_|o4IX0Z5 5. -gk,sY9SʳlƂ˶+u6 qF{FjqY0#Nm ";E3Q:Wo Q pg\YnlcS_Xex%܁0r[.4:X/} FWJ,6 :$qƉuh9PS^;{~A_N]kFw@V[ڎQlc~Fl9131/p*l9\'A3 fw1f#m4l@"b#$Sɱg1&L;XٽXNn|l!9ȵ.̏` 焸kcK]M`f⥢6%v[vت$/NB&O[6R̡tW[픞[/!꟬%*$9!d<By40"c8+l]JO2Х]؅+.;fq`89'ĉhe@1ec݅Ђ МZp|_g `_ySAoba\XnP6+ζTV Å}܍,AYm ܞ1v7B=(e7wm-ZaĹw{DZ#LzcMK7JsSq!;Dqi%8ZBp3H@d3]:35-Izp0%pКO&JMU Fo*,*5+ SRìw9\\ te:[fxw,l+Do >0؟i,O7ySB/iV@v%s>IRӂ];8r2DYω8z9Qod:]x}b+fbKٍbUvo8VNMT(ݍ*؍뜔K1ΩҖ p4?x>7kȎbonl>G8iz4yPF%skL{ٍխrur.y\lW=W„}N,z829bUl#ςszghZbuFN d:5AkBQt]\Rt hK{L'e2vdwʁ>rt7ѫT?]L{ >rr2R_kuR\idC=!s2te`#@.s.Lγ?z8e:9b?2z#9R#9w5]]q0Q]TXs&JCXKlB@cfh=\GXpq30/>޶e!ξqP3 ri73je%V8s8DAn8{C46kL&JvI5yf2hQ57";UNpq oT]rez]:ì;ƚk锬'qbX lkW-2FZs}~p)3d іk~2vk.慁0XqYks< &2;јKIx]7;+}yr eI~V;cA N@w%r}/=VGAqǩ Lj*HP!Mkou tt}ЩGYXu68siQ+}3UI^|Qѻ7w HY%Rups=K%)!0ėw9{-ÕI=k͍nV]~Az/[sV4[6둻(3y:YN힋sȆT06F9Yllo-~ !S"d5C[ch.c'u.F囇 p[̢l<IK~t[:uyw 'Fkz ]`4K?gzxh{4 ˢ bm;m<ۣz ;A~z.?FtSq➍KiDyVn`ifXwpDiO'Q-U$'α;_ QL3^-렋{i], d1$,m;c %֕Ύ5!@a]fꮥʱF)V4QkfWЊi.y S9rk.P R),>{Rw~ W_M+[ NFc$vxnE֡l;X:+ udqO"w^^?zy3L[>rtkpgcpy ٰ ԫum;9j;mL : xiG;vmv?޽oߏ[Σm<\@%dmkBe('brrk"^թ\ka17\7XgDA7 s`Ӊxٶh]LXeeVK!,8Dhruޙ=-9j;g8Xv0yTmU)\h.cx2Ϙ`pmF} /UXǚC".{VXsh|+2ɧ]~"˚GWX,Uٟ5଀^:uo6pg;IW @o=.L{8-,,{8Ӗefz4kEkϰÝպ^.wC+Y^O7Rx@ipTBƙrps=”#v]ҾTe*[fp,O۽{tt/Ҕ4*5vsGr;Xe˙i]:]@A,Tv@se.7ΎɝmgB^AKy 8F 21sÚ]Q;؊vNZ]Ww4]95 }[.IoS\k@wmL>};ܙ>uyuW>h54o<=ZsyZB;^}V@m?Z "1ܥÕ] m o,ޔ3y13͖G=^ 2Y\؍C;J{1eAϴzR8wD2P%p1IVvh{6%1[|`;"4 m;9tOÔCkK_ rY܏R@O*v0Tgx؁,>9UAf'NcRe2k=2UI4to.FK\>Bpq7MeH-,X,5dK|}4yWW6(NPl-[8UfR)Dib8)7՜u'}qN縂 S hXAxNᔊr*> ̿9IiBgEYvmu2k!clql=}ZmՀGO}sF& GXrH $1q8=Chh;w\ Ah Kz]^l'#69kp~Ozgr;G10z5!qh6M]ݴpB➍]%n!x̙ ˫:X\ ~ @wsg]eΰYnJSgAt@;ٶuAVЅcCgL;X="ֵgJz<8;ٵnӻQ|ڴ4ۻ%K&x5HMܓ5Ǻkv]rӅHm&UJʓp$@قζNb,K_\p7e.O)k9IMYty4]󂗽6%]\3 k)h0/w,-pnXoYJ݅Bs9YG*.zv5U9D.hx:Wh.Ң(lGV3%Ml>/[pP(o3s pfljɔ2KE=X=dd"rq k*v^'v8Y0;GΎuwu(;z0;v ڟm%7!4X7d,:}c/|a~~YzOY*Jǎ;$~^z//j]{ַ7E6R:==`Æ ??N/o+sQߟ-.@ssc-p"v8q9: F`7:wy& \27RIJ{¥~G 3g|{G>2<cA<+//SpgGN򼼼~e~Zz?PNU's8Tg`hXïnWH< w\@;LYpXpcmEtCW%ƳX=Po=K]Ilu禂 L7f)LvcObp:ص!2N,mv7R_prNGP~ǹ\'7Jpgz87c ɗ9[j-;9p*/UJfey۫a R٘]4WkgJ;S]If#6,x grK@U.|1?[_xuͣevpڢ#lk2㬰βСbуf~Lbf{ \yցbk:\.J>;@v:sK_RJR_W ۡ Z: /t̚GNo|=|2z]_mj\Y&}hAv:&Xscކ@w(XgE&&aēZc8;v3=NG8*psIaLi‰ut?h 6\Vvl7:Aw}#5U3j†Z7 vi2-̺2-Sû)Uh tSDAs?YW(k1r0iOe@Ƞ_pT6W.hΝl ̙3:@[tywOmp[ os h¬1s?fh"’ΙHYlF̤Ͻ4;4.ȴxˇT p@Ɉ \JgN;KmМ51AVf\}<\?ݟihiߒ&j!/&>i.˩ Ҙm3UfĴ͝iY.XrЫhgs2Uս76~=Xݲte+f`b.p 3 7-Bζ |kHc1][62RIc!X`WmI;˭t)LZJI)єzdA BsBgq7kDwY<@GgtP#0rc>v۶<2\'jW :`|J㇋Zc!3ancJAòۣF4v:/[c}u0~,cG#9ٮd>x?TԤ S@Paw"{ڎo﷿fI.66Yr-/=/L&w}ɓ')Oyʵ^{ Sw͈`׎~Btk;$yyyyyyyyyyyY2>C}۴g>?ǿe]FhCf}4ʔgslyn<]ӆ>{>H X riqIrWgN1V0yIpi6BMjcM\j”8;kŠ@ 'sW_;.2~?}~~5UzGx_~/"Z^r-֘+|?b׀(-8 x^^?;YJ-?~gm;a!:r;c;z8šMƺk-vk?[Y8;Rwe{F"n63ђmNPh.$S@G:ѰgYCGT6gRA K+iy #3 Ac[8__Ov:v 'e7Dϙ甔шqF323CquC.KmYuh'V^.iTp,m lK&fWf(ÚW9c,LVY'#8&%'AG;G8hCx^xO/)>,]x}ַ@U h p Ok@CЃ_oVkIZ˿d&s4tE1!N`/L4BlЙ|ys=_t#Oy^^^^^^^^^^^m3ESȵ˩\dyvsC7'Lgb,V;YpgtVm3>pgϵ{ú96ޠPFPrfp&,[!CrSޗJ]`qOy/=zΡdEh[(5δfN9)sL'ksʚ V='‚t z.-Nf2B@gC8J 2g;"g"LY 3/GA&w"Z;Wkb0\ePG˂ t17LYgtNK|o.eM]e&Mwpm.gXS[C]S9@a@ۈ屃57ʣ˲2Ӓ>/$+c;v97wae7(ظ7>ZX~]4YAGu:T Le*U̔ox3U@_|\}|x3А u9ɓ'G%~ھo!Y38}݇X5MÖ׏{[>rT'kq+KB=UX .wV; wV;Y˝.Y}֎'zlʱWFw8Qk;a6wYBͅɃᶫ2mti>(.IWeL2;^:Y.[),,ذˆCX3iVFHoCyIsm66MHKڈ9lu>W[@{8Յ\}Xʲ|-&䦅.UI;!.fqn,d)Q P-PV^@3&}6[*z{ZAs/+Pmn>P=nyPQ(,h0bKX=\2K=ٱËŘb;v2iY[F FZ9m zR> hmׁLy*]Z@S׼خ//:tC6NR_~wll|3?2ЙL5хv&vmk/} #$0lj~Vwz*+kqpkAiB^vYMe@ۑ5t>N.N]1 k}AOá&jV~C4`^n:0E3{KC}x\\,lGl4\㰷^]hI;ڼ8ϲQ<Snx7ƆAA(hGKodkmJkBKca>vA04%B϶Q©b\V- sƌm#9ƅ&̛k{]*l4FIn!T'V*+1% رMWךUAmq'‚ v$#./]Wl䫥wtl@ĘGVC,C9*/kYCo}w 7; W^.udR3-oyS7 4@bKp:?ӷr b_s57t=Hu׏";ӧ;̷$yyyyyyyyyyy@'J3C=Pa X-?K?[˙8-WCd#sp8ЄɎ+tD=w<#@vﮜ=Wf3l6:#NGL %W~Qʳ)s v%S>wV6,kKAg91uYc7)h=X }Ŕxc1ϳF,ֲ4Yȡ # ygL ,,\*U-42nhgʜ [b$ Y9,Al3hesAsAJy\`qv, rX u:3AtOpQ4~<^ƂŎm] !NB5'k{T0q@WHcYG/_ @㕕oOOmذ᪫B;o|jW~WΠ)^2䑑w}-[ԧ>?۩ /]lv/$3 zBͩzj ~<;8>aÃw$yyyyyyyyyyy^m%]YJbߠ.謥6X 񶡳m$ţ@NzN;y5{ro(셝܇yv3,{ƃ CŻ4AC-OLI Z/fPyI|Tq,5)&mSH37b)sX좗+? #aYX\"e ;6X'*BR(c>]5ʣ ٚ{G@ύ`і[ VG rKBfsj,$\ 4Y3/6-6-)XZi4bg.pX"5KU`sgE!jg[R]Zrvɲ|K,k]e4,sQ4`ZlJptgqk+fE$e0KMJŷˣ @×՚x(x`{Q5tZ5ercKq.Ol>Y .W&WC˜!Vlhac "^9ESv婑Hq_Ƨ>9g ~x+gկ>y|>'=o}}݇?ȇn@<)Od}O{ؕN? Sz߿k}ӟ'? _&y[޲a&o'nV-/=p$qs?W//////////>2?c?@O>/-_mH0zJ,.wvXqWnMwWOySF_rwl۶O~26l7 oxjT*@_. hٸqߎ|8/qpg'$//////////5TÏ@kDeֶAmÔքn|yU;|lPZ@ õvIluWZ{Sy3i'͔me"DyMgf4[Bl&тʽ 6f >ѥstAiVjFwxT7kbY cWV@e)\ VsBV`9Y"mlYf=hKC*ㇹY-܌^lJFd[:MP泲!nh 8PgZr:L#^msCE+G+GJV h6uVuCL8;xXmq5vLΫ4vΘkZN8:/㮙=;,/x`5)M <4=3>}C?O_ J#n?x##>91__z/}o|;߉!H0wh~~ih'?OO8փ>/~?F;Fqǩ Lj*HZOs-Ubrz!tUY+zJhr&^^?:o:<;_tQf_k_V$@NW],uJN;|]8Qa1 mG3U<k)ӃDmv:\ Mw] swN9rv#=w8r4ӺBYwSFXYsoɝ39 :Eɳ$sZyUFԲZقζVM$GJ9KR:gÚhRrkci)eIY"U27s ڹlp,&eǚ6Jf…:(w{q p3fE3.ϣpnvm@:-R޼RټR0tLA׶n>Cj Z„ʑݧGm/kz>^ro [BeE^?ZKpdX 3FDBhBaF3"~"1 &@9$Ӆ[[šy]]v1vzSVL34wy^^^^^^^^^^^xFsDu˫^pgGPrJud*ڡkADi*Y l?&Xe˶9mlt@@'Ƭ#9˲-0 ױ^N 0(N~k9/Gh44Rδ{iDp`ؙ0˜e0LS#ХZ;^؟mHY㜭/94zGM>b3E6, K f-9dhK.gŝCKU.;@sl˝6VZb0Y W'_^rAti#{Ll*Gpg˝|f8˚[/qecR}ںqَMrpy(7! oB }k@FCFld2-lab ]􈚆-Z={׿.=r]pgyw݁t]eαv3taO8 Zsa^Jqw],TO& w3Gipy&DKze=r=ӱ5SF7QIV }*lT2elgl4]uzWgmYTfrv2X賩!ΕZK͇6N@4k7GtTvցLc!?T_6|S`qN|}9h2h.df3m8ZʎO7S<53 #6brY7k.g[K#ͥQ]ɽ^ Kt~t[KEF)3]..FK+B@cK>92AǮ}V]\/Of5|v{Oot}k'l6t @2zN-]GS@?M=KpP$Dmnim8!cң(h$¶ρbQ^^/Ԇ yg~:tW4+wk a %8z(޳)%J1`#t-&;Wu5b`pi*Y-ՓM&00K&El&{ʶo]I%2̀q!:8d,g5tZ.Ϛ0,d0ShJKmHjmWf3tI 0XBMLl\RIlM]Yl\رe]L8hKւ&n =KQd3g0>S֌mYlps.X;H5vN7e;\jaa\k-bZlf6L@j 5r(SjYlȯg=P?X?X#z^*(4Md#m [ lL }.FmewU^yHcԆ'T, S^uMWrce-'U]in6q:~$L/*c-Xym<U+6UA C.uwGuv2+JS#]O}oO_~2W@c˴`'T@D|(3*#VVI^^^^^^^^^^^g/ 1NЃ aXlf̓% pm~Syf23X`Ycvyz8k/j/Ц†Yl#É8gD q6S_N,qmwsgz%XeͼI`+y8d*f,O\]kpҠg΀ S7ۉZ)Y<;9< -=gj\,۸9ꌹ aM uʘͬ6t̙vVjk] t6oN(94Qrw٠j4E@jl7J{Άz.+KF\4aδ.XVŖUcpqtE ) {qPrhweonNx (ǺMҎo=!ӎmm4u_|2=4a=!bg2<&b,osY|l*sTtSh//A?x;>}AףK ^ 8'˳JajXh17~ ?q0Y_T( } UgFj.?; V;4.&bPRb{85ۗsG7?xޮku*RR#X9a5f_VKY̩جngkFl>n6#!zKiejX$Q;XQQΤޕGLbk2~2R]tء8e7:8%HYW+':Y]8Hp]C\rT]"XwokB;6kַqEsr(FQ1tce~w8YbhUoBx8]]LU#v3|^@ÉZ;\o* gť fAҴãWÝh×C'ݡ,!u-BLmw09ߗ* Ifšy#>&,%Ʀ l.fPCa)a-҆>;k7 Bks#xv&nFL׿Yc{N#D(361iH.wqLc1T3 H- A~6afVPYKurw{vȴpVl5ٖFշ@MonΡ ?vXjO6۹ڜг9~dt[:aÝA9кJȭm'ꄔuLDl=*ϪLf7+ pUˣCZ|vx8=8dy-NBe!hG@ {e+aLwaǤb7];Ƕf<2!Κ>kp0MW.;ւms{>+p=!װY*[Yqs&4sz[,9$AfHk&&&8o43.pؖG-Z[ z|9c*GJ6PE1A* #0FK0;̷C1?Pa;vc }nl keC~G_N^^*]wg:ܙo|ӧ 'jml7JRcS_cmѱF;Xyu:Y\L˭ E<\4렅9 % w67?t33WFkQ6DYsl+}6ǬI-Y Hu\Qv|Ng+"LKWٶ×kͩUYML,yZX噈Y)ڦZO# -L)Z`bel5FPh<I>Plʲl !n:e=UrG{A1eď]^l@sТ946Im~.]:@7\.GkNQ][Ft:/O{ӧw3} izۑte9Un;^>\KgŅb#|yU@jCMŹJ(c刱]Wڶ3Y>q(No*LM Xt4 wAg˩tfKڛ(N  Cl[o>MY$KrpVq@6w DCZ3lh3v&S>R~t y44 `LV]ߘGZ̏Ǩ'ézh9L\XY9AsAHs)4Gnvc1ߐ-c]=@"\6u6,MgiC%+S63,]p}_BcY3ʹbcS #6Y>ZxgzzX}X}c7-c24nN­헛iAKtllR5چk=aD0ie\ʶx#wOmp[ Υb?>+˩J;m5R]Iwشò8]s἖d * }shgvXzhl,Mn*N'ӍڎE u+8v`hzdqj87)l+>X V4Lkc'mHu^V4E sB8w9AlP?Pz8ls hNd50^65DTsV7s3/Щ|v enH΄RYöϗF[Wۏq:g9\p\_LWOgj lt>AJ<#yq'+tyN܄˜s,49UYxv F,T]Dh%*3ҬR-;v.-ϳ@vOyw44k.3,l XVndgk 8Ty,j|#ΰ32)sE ՄNmh!{y^lFϰ4d{wDn$t&hvbmͶ9Ђmd\ Aә.4maͥBkYnE؍BPpKa;M]rgS #@\sml"7tXjh`}mBT;xUۣCɱkˋWG=AwCg=Kp*9@r~`e%H:?}sZJp@'+b&>DƄJi asz8+ăY˶ˋϹ#4켩23P[O&7Hqif8e~4k.bW5 ng9Z^5e+yU'+񶹳:YN6>'Jz;S% m=+_W ٶ=Y--b^Yv̱X1WFg k6Dς f;\4}ls s\}\;Gs| 8;vWQFqCKc+ I̺f)ǠuRO0\ M {h k7lnx&1^uwlB(gS 0%4$.NaĶ jqt t6O3alq:gsgF>7Tܗm{M#4Fa\m5;wf!#mٚxŝgmxіbƲ$lƈ-%Ӎv4r?\N7:+ ΋:W[&'Yhvr.-][˥Ҩ]PqB+݅clrB-m.v6l\|`z9OyA9ͽtر5ۍm=,SXA0!fdmB=$ǎVFW*a\ҧ P썞aӦrdiη2rbsJ/v촫hNLnl6rnQa͎;qнŝmWls'M(e xuhehu7_|U6 g :sfr,z&bN+tV4s%5\!Y@ `ZcY:j,fsC=(dmhsBTyfwBkK`Z|'<@GZa\*6L;=XXL)F kɌ Kcc]%5+;ɩ{u M̹W2A[vsᳶˋC;ij'mu?AX7^ي nZw#J @{y=L:3VX4W@'R^V`=Mm;\8kLف f,I`h`@e&_>. `ܻXX3 g؂.0MWpSpun4ʢƀ2N;R[v/掕ȞKW@K' f4Te6XS5ϦOuyh({vnOJ}Hٍ]Yoh;V봎ӆV <ݸ9jh@Y7;F u˽J]ٹÔ-s5 #D:0D\V6ۻAZ`V-g -шY\Ő:f,7N*u0Eȑ:ƲkJcFJbfrʑ+㇪]LJ"f+.rGcА2Jܹe.UÖѭ x0ܰ樻pۮ4;9܆d@{jO'NǏWǎTFW*A h)]/TgsKh/^ߟr3}jÆ#Hzqs;,gSődM茮'pg L=\br4 4w@Cg9!oW(w,,uB]K8!!SɺZ&cfNmek1YƳ3gHc8ϖFhf3$K0f2yaYR17H%x"J8ƶnrCEdʮ8KefE]HM#69s8G2*j"l5Km:py6=+ f4Ymg@8&w+XY*57kl9Zlb?a h,j2e GLC3FN}ݕ.Zúfu}b^;:[v}5x q[LCyqԭmWnnh+WڌJ=5pkTۈZcc@ rqT8X_(T@{y=.:7 W,~릏z/'@׻ ͙"+g{gA꙳!Nڸ`\&ut`w6z.Q*L yܬ렑0SU8d HO֬T y|q=RG;lζԆL7AwVwBwfYy)Al+hv]-#?83ݎesbZhV=wh;- mZtke;^p/|K9$ūq[vyEϴY}&Ke`};;XU؍nn;;^ga.o9۱4]ۼG_~Us{Wh'MCnZ=-aqhmc- O4 u1%8BuXWv?W۰qvмcb8\i؎ꄩa%ɗWs-se u ai8\8X ml=V ) iEƱvS9J1siծ,w!{t*n.>6:QkumVnURfRzh .7!oeÅCrá쳲KZ1p8L{ǵ!a@uZgj űXΤσչ@., m^k.9m# AچΰN`9'j[ Z\ NɪgAésWIUv,N:͗u7j&(}7槆Ӄ¦Yb<9CN8;'JsClcDmL=\Z S#UҲwe%U#wgx2;(waX#e닙'^~Z3(N3UY5,ϤZ{⹗U6P"8]˵ c#ObʬhNT:dm~byۋ4X X:\͗mUծk٠g.G4ɬɃ:pgsKm+kбdv#F/ݮ$}2F}\cW .pWL%hѨf ˰ؖɽGr\r62qe_O7im?mϿZ uz6;k/ v9;Ɨ]>pxTb2z9W_·eU/" c:3d]v9YmCg6nձe/Fh/Tu=CCwV9u*zj _⧑ h?U^ӡe^&HU2#D-˄K#_]z8Y[. hbE7mxԱG mg\s QF俈ӕ9)yf $,#?So=k.ejxyhCHtRVXϤ*Bat9]:QC̦ 8.,A3²XGIUå#/zo3ن(ev"fcP.sZ|9KK8֌j@k gehh"f.@5=5]m|ll;6zk#fm+D6|Y$m!H:& f9myLjn4οl[ʈG_6~GGο_û/շW'kƖ.p^YL4n hcfWr̔Ԉ Qο~so*"Wm*j+v؎c cu{xox+mxa[Ise͗'Ə\_j. G\/xSVL34wy^^^^^^^^^^^X'V|Og1ml>1'??kd5aʬ=VDc'K R;Yn˖l.brЗE\,pa*Qf)̥% #u=@=rxtWece\51vD0"`or\tiqoZCs4g;;ݎI:Y m`+[OlH! y\ӧ";ӧ;wyyyyyyyyyyy=oWЏ,ı(ֺ0=)pB{9gkat+ێEnDY1l,U*&s#dInghYS4s`~Vv= L}DE-b6Uf@K }Ӧ4u8gd VLhZ'QfWAspS({J9fluZ-&3Hu6S,&]i+3fbYuNX,Yz;5p>BJrD9ّ\TFj9Yla !bvXshɑ4ذct!fV۸6aNPʌ+ ؤ! 2[ɚqv[g&8cJ82_p^Xc >@81qM:?Rm'$8"pyc\|F×+㇛ێ5K=hچˎYYzBM.ˣOS.CV+viC;9f4|EkIl%Fr4!V݄cAfXIo+RV2< "vXjKv6W}3/h/spgԆ k^^^^^^^^^^Oya ÛO~=>}?nLàxJs8!.a6@cHeJt2<@n#uG9pqz䈡Y؀C ߐ:fv+,!yYlbpY! gҕYR<ڝ!pe~/tIuL/$*3ÕtcNfRKDѳgbe;ZpCvXpCrds[bښ-ER#]f+ ͥlr>RәRƲ9'e4:Ji;n\(q37lx1|y戥Jku:m< Nօ&=vǠI[H4[&x [ ; l@ivCVMlsUY˫m ^@|uF; NV6dCl3El6bn7*LF?e2q8YvQ`yNklY.bo:4TH}~ WTϠqE)QMWg3uIsBLi,{l닮n?\ęfKϦΆ`e>G,l.w,6^ko5Le6]xBYwV@Ymqg٠zq؁A\R%;ce1|Y0q%w,4m: `ձ2NX;gu/lAg=sD tFfِ| 1X9#{QhR>v2fwib5Q^-۫57kWj+UM Jc\+U>]t@{yp$yyyyyyyyyyy=q'?}qˇR㫟k O,Clt&&wNTuoNz03EǦpse\Fآ} 7(͎.<[_JJY =`Q`pi܈Ajs#"\_H5ڃl}9/y˫ww(?*ekmgZpsmnYuӘ`~4][zWm9G3 m! Yf)v:Y(--Jsu1R#w58-Kɛu)U nKR]:wJewܻf8b .F4ޠIV.geb_]͔+cX!ry0#Έ5l[Y^숸 @;y.a嵛U:#Fo? {ME6:8Ek£z|5^ÝrperۯvEk孭n9 i|>vnk\6+^^Hqߟ P{ݵ=#~37~h51nڳlY[Ixt0&Lm. #90]]H:Q,ln4)欒q:.vxqkr2f-3('++=WnNe.C@ϧ ̪ő!sm+c9Z[ˮhj>7B!dkp_{L;?rtD

wퟔO|n旞xk,wNפҫQLM$.րF W=kv35#ب2K- }j1Gqi-wqgevet :ԗ5-|0,K6p,U^Lbº,.Ngӕ\<ˊ*Y#EBgc&t*ҡ=m> D57FjBrcе|]](+/ 6V^@j8涕W7vu`ց֣-+C 1l;Zs,&Y8&zkˆccF;aAsW>nl>SvÁ˫Q+Az,]xu+#vCG {EWN&khϑvX؎7rTnxr-F:8R8T]ͥrc\BB/#Nݛ:ܙghA׏\w}}?@'Kmi:QYˋuzngɚc%M6-:9dZ3Y S9Xsy!YB\Lu \:^pXv VimivN#;.󑦫BKBK d )^JG*m{N,[^f.3_pⅯJ{]u!9Cq\s?ѳ8RH>gc}@7#-zlmYd*c /VsnWyYpk\6R@ٖL r$13-}_vhc#R.ߢPF.6dcb!r+peA ͣe3yq.E9J˅OJs4JcD:֜Sm Bdi,@ǰLqYlHUbp^VfȲOgISzp]o!jʸMo>Z|&KGH@Oss1ZM{ [iOm;r|tegϿz|RC/vEhW)%_h8HxWڶscݟ>nGs4|<-Q;Y=kƟs̈́b.xo=*/omxcѺzWƗˣKrף. W$//////////3{՗ \wwM }ogp.t<\OWGa`vZX6 Yɪg٨w4hP`bEƴ [l 9._cȽl#JZ8:Q;9g@G]uux" ݚhuہ}ek]s@pql ,jLn ;sYtoV ];@]v,#x7iJ6xKː8˨9$Ύe;#kοj+Gw\Ck Y]].W ^^gYpW 2UJI$k@D ;*eD;"@`.ZH)QEmTl3gPl-\νEo?s~G:~u ;3xR$##########mA@4_z//>o?zo?;}_{1aG hW b]8g1k>g\>f֗>+&~Zk=~ϞGG(ŒV c !X\AW#~\,3@0zgy 4HsY' 7`0oqtx/!f7 &,S`g,ysvߔWrg[\ ZfP͞qOh֔mfA"T_)``/X}-dVr&+Bf Z`X/!nn<)Hg\RdddddddddddeM*=+ϼywxW߼m w6 h`3ky&+ P Bm8Ƹ82T{g#gA132>B59D@]\5k[lMD@vAߎY 2OX L1;9 VcQ\]8;:udYFG|Ae0qvŧ\z+/|x/#ut9]PFGڢ>|{J7gƵA+o MRw6Ý@g`:Tc]ց=?l:Vc9^k=Az-t}?5;kPlrzv*(5)[V5N| -d4f ;k,jzX`Q7dpgrk2„983 8}e8Ս~0=N4L!ZV^C30 8pJp'Jgopяr]ЬVP 6`|2*aTf7lZ֜wgzo:h)edT޸.;#+E22222222222ʘ gZ|_=߽/߅*C;N4Mn6wfFDM!|*ມAMW;OZe`e@y7A_E5̓]MkcLg=v0̈́`]dM;sY/] {lfp#8M<f{PQͲy3^U1#Ma3DD6\© y ^!X>sY.̀}zFtVaQ(;C;`v_# OKO 2M1omf}f)*;|Jt]A /EH1c[W/lp{x%w 6.o)W%_h^@3w{gxXE= @?, ,KN" 6DGtwxw!:lYz?!jo=mZPFܺq#xg55pU|"Eۿ{Pp't3:Ӻ=^x}p$HElDȷi ƙGGD}CNyF+\ffgSv4Z+'ɔv[IsqL1:h,4d@pFLqbk!4>3mm4Rgjr+uYQoi1W(^xjc=Gl ģ+S/0-gt;o@IF\43Ȋ֫gĩt-;4Cw џ\w9w|h%u`+p{WψߠKؒNSoW@ ,3e|gƖ=z%Yr2v_G|g5Lt^G222es?45 |SzOso;W/w_\׿0n:g¼ FԬӂ2Fa>%ҙ!o?d ZmᏭ/bz^RaЋͺH/<=_fۉf#N22[dRȍ~| ?ӥgή_k>З߻vׯz|g$)h% W7CE{[pGu?ŮC5ѝMC_\sY 1]M=8c3rb}dec59!R'v7?װeazvoi]y83,pt !W9ˌh6TP orz;8Vr0ˌFrgcaMOiFfzu&b"K.©/<b_7k6B]3gT׌Z9U7E@2Uw ܡz "cK*?kT͗h+h?CeV.{Ȃ;< hk:,}b}?22[G3Oׯ+E22222222222'KϜ["}\CY@ ; ;~ocX!f#2}vqϵ2ӣ'รgx3X2ߡyhu8hˠtJA=ݱ3ZaisQodByKx\ &Ꙃv:L$  85g/k*=rp v Vu(;;xg-:*u:kk6X2"G]0`Ge=2oDj9vϸ?< oX)x#3ZQlrxL]-u3 4T 2puK1M"0\]5G(SL[=OxsfBZ'lqw:l'3WG222&$Hgƿ_|b*ϟ]|i_|yW_~mZ7CƁD Ye28TzGKhcў['*;btn<ıy }v5}hMcuf2b :Qkmm" 7 zV+f0P}>Rgpr9D m2j-54e9,` X#Mj4ԼVF)&C>kN~|8Z=pk ^4M7{uޙV',(Mq'L1T%!J^ً;j3|`lOړxjx֓3\)0Zte 8t +#x*0F*ت?d hOp(y~x JJw$޼Գ6^{+}?x߽__}_.m&;<6& ;?cHf)BM4w~N"LszeKg]1`e.ݶ!ݖzN1nnhM&::(+fms%Q ?{G?#(,=o*$>h6ڀu`Wõv4<ciwwC,@ `d;+8 \ u!w&Kjz`1ֶGTpdZV)@ 2cϲnG5ŀw쓉R+fa<>btA 0a`ҙ hΈ? kKRA&+M~gls2PMoC3ج?6 e3%4Js?N"LtMMruXkC{,C;l|48]c;vFkjHs @:3L,Sh6+ ه ̨w Z}6@;C=P&\eeضNv1E3`apzFmMdR3A;)n9 .\Cyl)kx݌`3w6fO` μ#[f`M{³,\r&}}f@xGoLӾh7RgY/ (H[HE;&Cm@t8:/p@ a*X&V EF*Z DY^ߤ7a;6ϋ22f=wFt NFFFFFFFFFF;S}7.y߹__Ͽ~ u;'GJ/K#;WOڟQ=4v.Y+ig&3~ 它OZ}΁]ǡ`MivΤ]zN h{uE 2gM@Pf48-Fp\mp5{Fwe-p3qͦlS@3 )4`M0Ͳqf<w B9eyC4MkefҙYflЂnS_s(3 N$W}kP.c +8鍔p,iOvGh%0pK(6 ?g/ &L@^*aϚN,Tz%lFS÷G0zFP )PMd^}\I'\61h?.nCSs|" ω~.?/_7lt`bg0үCD=IdO:T dZ]bqF9$=2CPƌW\ B$Gݬ'X&xje5[&VPloP:cYi)Y)Je5_3TUa'r,bK~]_r3jsCv2㧴#222u'ɤwN֭/ +/v;o>w~߮Pzrg!<|1GeY@8q>jASż=m`'0\%fPű> |gJanA1:\kv2N<i9r<[N|2RC40X6PG# \_s'Ma>zv#Œs\zغ<@PA Q4@x 3PBφbL :|tʁv}"2LJVK1ˤL=mc M t5t(-r8N|)P@ ' tHgE5.]j8f y}ȠA1 ㋁? $sЬ/8 ̐@N"mvвZFFgGq]~])n/Lxz'3^:ug޻^_[+_|(3>W4"xgg[x\ 4s9} aΦ ?QО[Gj-;-#Tw:$2t6tzƐA=SC6YU<(MSY"e$ P&0_,.flddH4' i #5l U׬1f5n *2"GB4 ((bdiMSK/Qd׀ɨ tƝۀ%򗡜UHT.Jcu|)ڲ\3ạt=Y$VޙQN@W J -" 0% &;jw;\Ǡ3)edX>/KJw6fz+Ͼ/߿LP* of%࿳U9tf%qܳA=j TY<;w4Թ ;,pn~2֦ T,FK[;#LiϦBm`l2JyvY3P>Y/zFezΰgM!5j3;s5`2ZcXp/T&1r ǁ\RN@ظVr/"ʾA=#"<r,oY u֋іhˊ⠩SqByEF-!3\&T@ |@>"!c-# ̸|s /_#8J?}k˿zwo7CT2ef]Ϧ1 - Ig^Rͱ v<6V4Zce}lpfX؆:0NrFlipfffA(W0y0Y\ L:Sڙ!yrGA:&h_d8&cQu3L4P1)[Z#:0yH8>at(6C[Y)y3h^#¾`$M9"eRKj#޲͑&"YN$'X`/mQCӝ hl6U֌[Be4L9.hL%3wQ-;ed0~]w G"| hN@.Mx~WϽ_;o/ރo.sK hEWFt)rB/V,C@ur|Φ9v7{,Ckm>e37@Ъ}$+4DWpee6¼3s'rbX8EXQ v',HgA% Z4<~F`a?u4A|`l=T:>hd: -pu2؜zpI,1xf)_6%%V|iX$Z`3ֲkY ?o.EDXG+Q"u9ڲˆ8"!ܲN[ʠ$Ve ȼW= L:qVMv@OIHFFFFFFFFFFs_xK^{^___o2C(7 1_S|5"A}O`B!rkO א́:`m=!Rc=a2iX%2.hieP68Q(}&56TLsR01M-U8pD, *\)L@3~2s<~(6H-Ӟ`! FIվ T:OߙjVg#yU( DsηBK,F:\>Ξ1-َSZ41UaT#: h_b[EA{Cs+)zv5hu=2?|ǿ3򇦦[7o*u22222222222߇g޸|+}͗}޹/_}_4k7`ҌlYhwJ@kyB4 >DW!5LOZj-'XN75k5j3L4QԳô >w: c)|)ר9\=ܚq`ݱhmJ&VOt8p /ytfRAo ve1vx%}& ܤ3\P!+b(y Hb.:D0Ϸ-y3:הЉ4>'V"djoӽ{jI-ӟqI=\V@+xu+t9\GM4A+ :Ț=T@C;mu?Z[7nF7NFFFFFFFFFF{[r_/EOQ@?^9y___o T@v44$ x^`g0 lVu SQ èhB54,+0孡OXhQ4n]7iBD]@1Tt0-}YӅaguzF!w9)e~u'w+u22222222222ߗܺмx>kϿK߽ӯo3^2mq72M#/ s:sk We 2}QCzь:o1:XkcQmƇh eۙQ@;FtV PO7:Gj-'c\{lFLEN=3 Ь͙> NyK S6x1qL@S;nvzF MQ% L1CPA 7͈+Lg5ihB9u䲎pt26 rngh>,4[-wf7ܢfFeՔA1K"&EDJ6mçճ2n3Iz<)rD=3l0 /WgS-k:NH*?b 2 g\pƜ[ ht>3W*E22222222222߯v@O>K߸o{_e.Ys >w yehN+̓W%2L;M3 ܬ:Pk Z )#lÝK٫&úr>O챝hMFN:ҹ 4meFA(w ֛⠃Ȏt@yL55\A+oi=+g~ЙUw:q('@GlpqsX8^% (L=Ǔ;Z%^Q@ @9\*3Hu YG6 #_V-n4?Z:ҲJ,M:@dV'.ϰ5p>*0~ 7OTdddddddddddw1 N_us|T:3qfB/ !/  L@/U!kCt"K&,ӄD3N⭊Y3 hU: r2&:s?vڤAW ҙJ1'W.|ʥow/ׄГ;,(Ukseͳy6qu6k}+6]df8 8ZtŽ)UglQ/ 0̯Yy*!;p Ep|- ;ˡ)f=3,e>]¾>Z+ \3!Ѻ.1GZ I>6H1;`3= Z7UiZe%X '#*_x.h߈;v9܏翗Z?7KȧJ4ٵ_} ^}Wɝ!;Ms5|{a#hP_d?)|=Dyv4#8e2h5 #3PL3l ]1jO8D@h"AA7Œ3Ύ bKs&dW 5wffivy\#‹cN͔وß@;LбJU'}4gMjỵg3[ hP&Uh]D؎xB!Ѳآk;#b2<2fk6RϕItYZ[H;J6#nG\zRe)X$ H"xG=kH-ϭ7~=wFPSW:o ϾM;{.o㯮Aͳ2LPwBH@}\%hM1¨0aP ;4hA1#fD?i2\CDNrZgmAH0f4G^.X8 1ݷFw0,w@5E-@1 EkS4Z; N*f n}7@e&8&ft7:R`4it:(PlFD=`epZRrY--SVĈj(u)Ir$S@Kj _VIpW4R+ֵdJ%0C vPƖZ%"f9 FݺNO,G[" lFg ;<_^ hnݼ\.;#㏕:uíR..L?+}zw~km($][nS@ADh0P%qΦݶQ=0yxWy~2 yhWnH"{]EeKOPN0rz6a2yudeM@ۇyXA9p4xL4偎Q*y kjs5̦~yKl1gpx*ˢdrY=@4oA Uf=n@/0-T0T7Q7caN\}A=#L.3, Ȝ4Ϧ262\ dw\pFD׬Gڍ}":ͤ33._h* fihihE43P+UAQ@Wq֟3`t3 别Y8aQ6fgY(FH-z"f L#xgJ){ uЂM F@z=G%Rz/K\%M;?@t*-Bc2?|~~])4m&SO^|o7.N py/ ߭somreG j4 4DGj,h]Ͱ&44u]MpZgq塃>iX;&Zemmh.!TVوyzV3"g5 raͰFP6 q6F-e)ém2YV(3<(FsL < } h ִ֓<(H,kR0674ke3?X;5evDU ؜yg؟'8UtTќ^0hFͲpZU@*Ȭ*1tLo!ЂGmMܧ&z%\z1±9)e~$Hgƿ=0Bohzj2.{_y/^}K [sh!heD xgP:`D;FD {n&fg&y ƙ`-5ưf5&W@͜) W`+ 5kfpƙ:eeOwF FJbS&:Xr1ڲ+=Qv{{r'?22߻%A:3>Wddddddddddd~0_| ɉ3'W_|/>{7_7.__^ * td;YA9r3"hkFy ;[YE4㬇Ȍ]M#QQcF2zWP=њfrq64lP-|(:rG0"gD &;3,gn6"gSh.Um|y` $ 4f@ r茳j} V7P􇦘nKL@c\BqOhb&Pl"f Q:+qD3;)EQ/Zf3ѬDF*-d3 N 4c5J-=MoM-WO*b GTI R<`5i $3̺hf5lAr,Hbe>2$'qopL?Z?э3iR$##########Ë ?s^~/?OwuhvR jnSDŌrYP?>2!5l G'w]#u&l.B`G ΂k6"e~k>3P=#{43RgCY3 ޙ1̨wp3B}`pYOޙf6a /SN4CMAPuoHwF̃BOqM ^7±PtOc:!`LۀP7ճXk޹L7ZYq&;HZiN:K!ERٚYJe#2"#ΩUD8y[]֌Rt9 h moI&R+%:hr> ŧI$w~./q݂wF>I&oݼ _x܋?Ͽu⵷._6lO@#Y߫G^9`xmyxe⛰K5NPSL@ҙgW Qt;Uv@3Ōfg4V@-]c%چN:Ɛ:;+]lM'rd4Fwfo]c*p}k6e<% N8V8\ݗ3 hS,l 0\A4Bsy͛euгN7tlO٦?4N^"p J}Trt&B@,6Ki΢k6"xg'g hM\" -2 JV֩TH:2KX& h5TA@dVauCLE dvt*ʜ4"xgЭmm'$3-5Mϫ2 hʢQ@>wm2߫|o{3򇦦[7n(u22222222222?4Uxꉍ..]|7_y>|͟p P@O WײQ 2vf_g}7.|'!и Fƫ&@z׌쌽F8 (Z8ڀa3Zgnp:L Tpd6p=p7:Mf9;ʴPsINhihr1[Q8Ex,;e= 1󰰸G̰Ow N/`/jlǯ'P䨽KAG<+h94IPO&&3BKj0pNGJ*l s\(S ~YgU[ H25A f@ jU@NO5Sϼ,6%L mn[I"d ,WIzRm4~դWl5~zϾ3.>Wyנtiu\|wق3bxhfݬt3Y[L@P@])h30Lp( Ǚά%i&4Gc@bR+MQwl)yL԰5 HgD*6Ϙ;fsP MG8mqU*<+k6"rK3";wf!(rf%}Ӄs+e&tfD \k8:}\^@UfL2MHj#POo1>|Ж]adzfL1Jpҙ tۦ/ulxHwَrU^oi]M$Wxr)ֲMGh)Q`ԯZ[7o~L q:d Z>bpjc³Ot΀|ۿP{ ۀ ha CD+௢zxǢ 3"xg&y2G:-pU1z'n;Q T7he>Z*' z\{RzF^-!8FZO&vgbwfمTru3rYʴ Q=WFHPfk6tT4ojPPk6P6Ш2&15l[>hb9]"wh[>V2`ARsFn̬ e6 ~yK 0L)u9޺kYI>ߛ2ߓ|vwו"jh?/ 'ח{;KϽŷ\ݷ%4?!| TN(˺.3UXi/(0[ͩgZנ"wA Ձ)kҙm5ǕgeX{t4N}1D-mQμY*yLԳ pf1jqyŖ2L9pUS>%Y\>Ny[e6jCzr9kMQFcALgT))T(z 7ܫ_yUDϮrk YMFWC/3_j]f5nMof֒镖2h]'t46䃡@p,99C{pAΌK%HFFFFFFFFFF[]Yz?{_]|+s3ǦBy6kc"eul֦w6aAX+oqP@kNg4{&NxPc3&[ݣ U=36gn@vuF$hA4«gE3ގ;3b\3, ?TT}d[c PtbT<4(hV)ES@4QRhV0gq'gDjZf E=MdzϚn t3T}S|&wT):}l sL7;69T] u Bg*7fL)!EӫJu9ٺhY'棱 h{k+#]͟_q]wF>{HFFFFFFFFFFYY^F0QψhpMnvn6QA^0>nv51Dm2d=irV>#L7rD{F3Lg͗Ak|Fۉ\qnzE)LE3S<e6gQ@4sbaPL41m) h8`s2L/>,,3yD8EZ3z6w#;gs˹ќ]nk[B` Cv5-rkv3r܆zFO[@fYnf'O`x<F/ݍ3I2g}6888?ԓg? /_z7^@ h A735;lښgŲmmEN"l 83[6F(D;BEw9L3;;ǛQ =yj`hh[L@3 av@&fD&384X@Gy41D3M H 4 M?kNUD@3Cм}6 h/ Xl3[3KSɀ | b&L*q>[\\#b9-43WQz/SskЌ@HÜMS͜ɶ)O O@29M:h#SAM۫ N-: `p?~}9)e=wFtMNFFFFFFFFFFFF =888;3SΞp쫯>ށГ;⾝gD[<=۷ _[sǦcP"f:6ZG. y8^ n tފ:x}tu.zxuIlNgf==:2YqeFLjWfHeLjFAc%7F\gu†5f`TC@_-Wpp5 zbP7'oD8CM79@pӖgw Le.5{yoPmvNЁD"{c4(&f#bŒId*)Zs0sA$#9ʐp|tsb&ֆlPbitֈ'gc@ pqPo  ɜ$̋fFKj6 *ySR9295L"QAܒc}r"K*^HeҹLn1[B[ln{dWZD+xP: 9sqA5 lnÄvM a}FAamYszfm:^AZ[ZZX|2+S8#D@2ܺqMMwF~=_ۿ)u2222222222224 ECrZ l*Q.Slܨ wfgf)ncgtLۜ[P@JʈJVk7 Yb6\kJ)Y6#5Q.0]LeVSBefe-.eڈ\YoR[ SʩA=++Gm277uMۢ)ܩm%Z Sdr!2M:c?0w?+#]ʭ7? ܸ˿(u222222222222jz|||qq'}/3 h|]#eK&VrU@۫iuL ޙmk׈+9E31Z`pu cuz Ϯqj L:48Fm'la^:s "V❉kFmlچ2[:hNu3 8 dFh4HN@EXXDK7fPhA7pD@3l*  9L_$KgPճN@s1C GlV q>'2j<Ъ`[g431P=si k(&Mt͹Eּ}&NyhLJN#` m}u[tuy;PtdÄA1Wk'udsm2:YdV*WZSK| a'Jx1-BD@hGwew/ q]HTdddddddddddL"̀V:?sSg{+_roqkP65d2CTȮ2%D_|3C51lEsЂ_fhs68ͻf~]DF'<Ւ]FgD54}&8#L7z\ 'O]3b*XSfkE\p6*rS y苗(]3\u,c}} (.ڗ6Xp*ix8B_&b5+ƹc `ZHGY.G9ޱaTwlfh8aem~ʓml|66:֦Lf%YN-DK)(Dcp8B)w/ ޙK"}g ̜:ԓ?{, wzw4=˖G*fS ޙ q3g*w\%৶ htЀYPՠfRu# GZ=ϬJ;Y<irX+o`G'Ul"'Jg͟qN d;&\fA6A~MzG|@t2[n."2hEDGP,3(EkV!9J2`>S=ۚ ˭sY8y62z k!Y͢DfVͣ}Ng=9e0\m'Zc^@>v޹}sMNgF.-r 5F:;;;6<$57's&Lr}kV}8v4L/Ou"{$A\t򗡽T@z6֖]mˮdc55-h‘qj=)e3tf|~R$###########c詩Ч?K/^|^[[u@ﴌ ;-&.kce ,W }x 83z20 {YsqX#΂VDs9 U2-"eDaP?ag D.S kXE4[v@3\̀/tyc-D=#iq C<ӒQ.U|B29jMͦk.*cn tfg?Џ2msT2M~w,sk<80@H>HGI' k_!/WM1xgN$ʛo2z=[^Ig[Scp0|]9)e+~w㮻|ޮȔ ?ᙙӧ6|t@҅K/_|| vDfjL>Zàn]Mà@]{/s0;hfwTT̕m D}waakpmitkp0 g\cu'-Z<wf3"xg˓ W <#`.;<4 fpUаts,Å@AXξ>G&ѪIA:T$6 DDbt4^ŧjwf h;#8m hA.N*=(C6}YʰN12 FY 08?pOuv-wt.vt.rsdF@{qSLToJiL3B0u0Z 6.u (4||ίX@wuntun]PejXOs3i[]2ߕ|7[rnݼȔQ@>sg|/勯 hZ)1Jf8GaݶaA1+8]dǞcckFW# Bh|~G59@c>B<3ε@b~WRy:5&g:y3XpgLkX 8s6zq8~T5' I? NxOt43|? )Y(!a3qP0&9؄pl2bDb%8U!6Q”6U2v:JD ,"XR9'eꚱu::‘L*g9u|:#8P:Ñg3mstf>K.r tDebmm!2@vH.3ډ{s-k_E{r}aٸSn_(sT1D1utq{]PHG\tuNnD[B0s)l*tvnFTMdͭ ee3#|(<o-ȭ7~=wF`*u222222222222/S쀞-=~f'{W_~W/^ހQ@;)Pvn-sjmkm@'2+T.l˕`΁)zV Ht 9>ŷ9npіHbD,YJfӰknIAq8N3TvtȆQ7w˸`f\ge|:,f2Kmm2gZSt{r.%Zb]3EyCФ\2kX+Lpz{(X6W{%=#ke@WIAyM6w^X #BtWo򚧻s'Z@i& M*璭ӱD1Ɗh(2pΎwv͛3rcNFFFFFFFFFFFbLԙg:^Wyw~ Ew;lL~0x-[\2ΖG YamdHe1fM%&u8I c{H;H `hDw]SA!g:̉vFLj'\ 'fdsR/yL3lP}VGk_p .Lg#8ytfYG I_p8q@ L7 ALzE!k;3B:I[h:YLrBм}.7RiiNJD"YJ')\gzoIX@M<1j&z6s͊wEy<\mMCfNϧRmmKDIىk3#\J6ֶ.eewkh')Wc.*ٹӻdM7;:h Jg3V;5E 5]U%(#qt v*W5'ݹޱk'ДL&㉉xѱHtpv)e]ȍolS=?Wz񍧞>ȼfG>ϵe۲d:G[3/Jgʛ&jN\>N<&O^ݳݳݽÉfX3&׻z =[@nȇR67M3c\=U=˂6WkXoϭJ[v)!r:G"Ȁ2|~~])"za~3'|z/|^} .Ga@G[";A%WFZ) ʖD%kTL%34cDqvȋGb":r݀K@Cǀ&XS2S_Hot?k:E`uOX=(Mu3Uψy?\)L@ Y_'}7g8(@,xg❵! FOd46`_sLrexܒiI‘ h*aA{,}A Lv{-[HBTT¢%Y5 kFx̣fBB$Z-7ʐOSe-B:nN_"mmf/SϚJBsG 8z)k l2<=k=k]DCzW7Ԭuҹg Xt:}Z@5<[^UXkt3{Ӝr:eD'hSnqM6:7;;6\Ni'ɉ.[ D!%:9qΜ2 /в-3g">z)`>xɹtf:[\M̵/v,]^=smَN;sT7 6a:X}Vqe)քr==oK֫1 XfF==f;ltV9i ‚bF8k\ޞӈ_U@oyentKK%ٕ{=)euGݸ.;#+E222222222222ۉ^Z?sgN} yg/_|+C!2Pd]qS2FMswf3<Z :bɩySnʈt#A=׻9(6&{'m#LL}ٕ7;3]M1xS W^*h>#hqΆWf0 ^43\pZN@ YG^Xޓ`>} h},[J쥂fykޙ1,*F1_MΦ3dm*Вf@k6ϊfAW\&9|{t}EoXǥ\\G٤es lsFe̤3P nksp[yd tw/9^x'{Ugר{ zFvzruͦtK#=оiE%3|z "X<ƣR@| w-xgP͛JvRf:pԩO}^~+WN ";uH9G.L.r0LNU gk|RAi 6kc_E`;UM<TkzQR bb齊znt6A;nm>x=g^@۽y@Hh2ܙeN'4 ODXézɬg SL6i&4"H A4G\FAagьBYl$Z3ɔ 0 G9eU12YoJfALYesml4;\BX 4i;TΑ%pW;;WH7$MDso׊nbOOJo*`:=Cq<,z*߳=8 5âgwMyƫ}޾޾M#}=ݛFzN2dvuo]Tor8KZ'ۗ[1?d+W'|t@۹w?+#o;#uR'###########>]^Z<~s<ϼ o~ >]2r3C˕Es nFe6CqtFmH@kڥϴ9ouC7 W--4ǛcO,\c6_(ij=(+UFs០(Y[)?o|74xt\3\R˔>OM3qQ:sP hA:#KFmg8kQ%3P֑lZZgL Ш+Ds9 Zfug24U /+ҙojV ޹ttQ` յյdcTόŮ^uu-,}v{{VV3OszVo>pɃN}6{I \;3xM('{i=&Փ&2\SQQ@34 ݵٹѱAJ{R6ؖZS_d<ǣh]Y)e=u{cD"|Gt|;Jť'Μ~g{^x^E@s2Aȷ*kւ;=Gs~yK\e@B^3 ML^'8+'tט?zL@}8g*"JZU N}hj1&,bU-HgA7 }4S7<4 h;3u3jambyYг;jN:,4>s38ͣwfhYaEDЪeDw7j4 ;߹K6=+L:Pm/yA+*vqoz_*ao@}}DtwV5G(Ө(wޚ2p5|tOfwFWFgjg О[ʶ-d3 t:5L[xt4=Q+| ̷&$wFn}_~;_?D%######s'",..///>g?s ]t >#8 G6„2Q.(N``)z&wQ6q,^r~6iv_1Xhvt62c2.z,,OqMhgޙa}/<J%X>MBp63!"I_3.h3CЂqfzpT+6h F̃ZYEz53s6^:#ә&J3 9ccTlsP\s;)ޒ%ha6,YawwfkBggo/cmo8Í}P6M?w/oVB4!*fJ_< Vsi@dU#B}ݛ=+]˝,0ߖ*eRT["#-k hoI>{;#7Oׯ+Ew,R@K$R@zjjbiiaeeO{矿mw@}fLϵ@`6Ͳpk̨'E꜅JfB׼}nLnA8-Z|tS"ͥ:N9&( hXC/: O) ;)A0 M'0|k rXf^=S0E,ڜi2Oe&͘4jL!fS\hҹ5Ef7S`=CHSR3S8A2m Yivu3}:ݬ·9Snt'}ffwh[w&]ccMڼo&h쌦n:Be >p ?Z ;3L3-3/dN:2gDL43`L@w&E35#V2+583L3f~Ip3qfZl3y̯Q4Lj6͍sf.ᥳK&lY<ȑјhk85APFtҙ݌F;u޹{g!fCsp5.[:rhtDR-3Д}+*t<2g8ܷ =+mB;JTe栅rzzIJ&ޞΎR{nN[[ d%>ڒ8{wNfouώQ|H$!3~zĉsg|^}7iۖ7E}K OFj:D;kh~k Y@(GIg:YɮШ- cV8YπKfhX=y)8%eStz.߄[thwa L?NZpF\A;32m# B<ᒠf_(g{gD 2  7FNM3&*,nNfh>D@9 &9>˓#&ƙrNJWBwSݵik\'oyo ׻gL^ \'qj=(Q| f'qAn`❀uk3D@+Mȸgl6g8#6@h)Z .HqF4>o' w`l .8`2ڨ HAٙnRh-p$SCѩ@x*DG'Cp@$>EqP3^!;2(&!qJgcdt25M2wHV]3f NO3mmD1S`?.T pds6(skD3}cctwwSPBw3VqͳyޕN?AB*G?~|D;tk ߫dQ@"uܻqp暑{OošnOP8y*7 0c?6P'l6+w_ȣL>kt$f_FOZOjOJwrg"mNg&SBk*ߒM$v2Ts?45ݺqCJ"D"!]>6846U_]Yy_|+.ګPM ;}e՝2s-"f#΢>S*`BgX9D@;KtD$h>Ngٙ(Az πW@\.8}. ȎN Ь͙Ђwf}F3я`NgX{yPt2DB㳢fYqЉhBSgQ:3 yk.lsn.$KrtbI>ϕ>f2",ӮlvfˑS& hNuj\W,M3N@kM͝5 ґ]|gmAtbt ܳo4_E>kfǰy`*܆}޻!z^XQŬ lOFs5N:1ܿq3l*+r)vwV*:IɮŎRm"ΧZHK|`n)eܺqMMwF~=_ۿ)u_UH$!#g}ӟ>:08V[]]}̙g?}^{%(_9,2LوMuuꙸfWdg"A4{&ȩ`qO$VjrQ1&Jg GXCxrwg#: OGmD(HOƉ>s5tr`tf>K$t,&ñRH-HCH-#####sG" O?G~:88633vO]+mcĕIX%< (c/o Q8 SfYG@wJ/8inU h8%zLzBѩPx",DcxbNcD NqQ-*:͵9t: x,̲s?}|2UlMәrMkF= &oz!dJlWb:=߿OMS,g8krEfҹ2Al 2piޞŽ GY+DV Tn'b(pMәwMG%Mo9]Ai&B3r&uФx|䡧:rTXkIn6)s ˁ{Nn==k]]KdtR.[ʶL2L#_B(uq;3xRG hDs/#####󽉹_ZZZ^Zg*ɎKn&Z;i؆E2=eL69m^M=&6gDTP?(y\fHAPgA4CksO%NKd3+m`i5cﳹh0f;w&C62Tl2YJg[[2mD@i̴e粪>nf35p$)fsl\hoM'~lFO1KopF3sL3e~0 t*2gɸ@i\],ߋ,@?e}++MP9zV޷zh/}ȑGq&hXئrI'[P:;UgogAfy\>#S[+9R EJp U2N׌hObu{-fQ@#8R!Xf#h6©JڨɈTL&=Nʹe2\nm6Bˬ/2Y9Moٚs ޙҙkoYfK=4lfXftf;@7,`0{E`_/:Y⑩^_9zpTeo'ؿH SlꔷΌnXUY#;׎T|1I )KgQ6`32U8hS\ ;ȝt}"%}Vs hfdztr$h}9Ckʟ_3GQS@WWJ?~;222222w(&?}81tO<ν}w~ * h2:C}t:=Ӗftr-=l63G:fg3 L3fDX3v37NW|ObwBgl}/){(oIG3׬bPthƦf&2HsI3,PjZ Fԫgjp 8ͣ6E1UBu!x>8XzQJ6yf@ܾ_YA >P9gط~}{W)dZGZ_~w%xgdR)b"TeZ~fOܓ/>wʥg߽ vN*|on)2W r8F`||P_;3\1^Pk4>Yޣ;%]lMZ]%olٓov=&w}  u37~JAG埠w? MfU:+~1.e7S5>Y3nkV!YϡT0:&±IE:&h,xg.Atq3h٨At0LE⾾LPgGmMzT8^>x` >pp2bIK>@8rp6iGP>zq+!kGݿ9wA1Mi4xԡ^jet-9No2_y_.׭7/&Z5BA'}Vé5\|P6mF ;222222w6_|׿R٧;ܙӫ=Ͼٷ^}7/B7)&kj 6C LۇL@E)h.6Y)fXzm͞ ƉϊbzAyqvy'\S;@/c A]sh`t:-8P7`>303OGpHb!Hg ,! Z h֢}dvԫS--dkya өT) ,#ˤg@x`&3ۖeJB{f-561Cސfa_$ȿNu tGhR=J37{ɺxgf{9,fX3-q&fۜl-f&6yUC+"Dh"5|cM:yࠢo1Y%CkGmqgkgN.?wϽ^p-uG9UkLC <>b7 /U#nw61fԹ @T6l L=pT#xgC}AϜkfkc\%ƙ wONuҙGUy~ 43l0Bh  6g:89bHlFK!eU4+rY&x56ޱͧR%:A:=D@>h"t+dRSl{\{|Gv37ۑ+m3PLڜ鶶 r5c3Lsݝ=]s6+. tFX3R5!~zh3/\#3d}jM\s9uv2[ h1^Rq'CdxfU A8}48pAXpEi`a}pɞ4ϫZSߡ,-o7g'Ip Ê|_w6^ߒ ew|mzMGE^!?L+_9R@0g xtj22jc'O|+y ?v  3˿N(g/=7&yz@4l}29΂x'Uޙ!rf8ifwקer _'XYN0"ht ⁽ )2޿|xpؿ ELT*EجCqltM݇J~f<`<;)Y7I8<<3?>S!szF-kE\8wm`obw.2cL!:Җmo3r㮻*E@nK@ST|4=͌v͠2Zpk lY7x6?#ԟj};FJ(]Z1bk maP-ʗdVѢRZԇTw_7_9R@pcSōӛO?ʅ'xow/CО\sYZiv;Bp3Ǚf2/RP6)g>[}&;3p'tL78O-rӛ'D@OzN/ o `Cd?TD LyF "ÓE8^CБ";%3L(BeSxь&5pH'>wu-wv.1ɐpfwPI3#-twwCZ'JYBWl8h<8t1s6ڳS?}^ fkp6Գfe h; Y=qL7>53˦e#TlD(sp nCkV.qWEԂ }`x0އoᵇl>xhC7:xȃ68~T =\t*67(Soڷ~pre_R"c6Npd[ۚ;wfU_?` wR͔6CR5Sz<^j|çUxb/PA  g՟]є[ hj-W?;# Q5?K%*WUgS* -Kj/oe !l7濂 16 S*GO,'Z2nfonm"d3AnFLNuk}N'Z[&3\m_$f3Xdfw&[ss䭃<{rmSw`4}c3WY#?ݝ@P4A^ j{ h]ܿo yzVDxQd@3m[!-ttFX8~8r\8.WuKC+*OjPO+qaz X~GS8 ꦑY\P~h8>*o8R-x P*zobo\Og0}nZ͓'̀KJ7maE*KkVRD**-|%VЂY`@dߙhe*?Zl)7gWqKO,|)&T︽V`?J?W222222w*ӱgO>{K>O_/߻чoAA%7J3D%vQ1#_&6V`;ba! 6mCP.:栙n6XfoDlO8lM"ߤW4`:49SLơϊbn60 P+t=M$Z9}de:L.zfZGmh3.GQtwf(w L^9EtsJg8M!#56Q=# \qˏ|W\.>kz:gzzM3Q"{ՎfY'}} 8yg噸fSzf55cدgv+ٯ(,=8X:z@k|F5LYd_y=|}1x`<Ň<G/O]z e}S6T A!5?0\:eCM|9eGY B޵Ct>\"й(qЩ\իtf|>>}F@7F*St<5΢t:ϰS&wBIj>L,rT)&ៃmVT7N|gj+m[2~bJo$<m+1[򡦚+G h;Z_:v'_~^:w^{7 #2藷.gD[7G5\}&ZQ\fc: hWg2jc bUxg )A}g, Ξ`"#E~gꐍH|3\7 2w@G&Zڨ 8T40#FȩΤRݜS5msp&h󝩀3@8w::fz~#6ۦ;+gu8jgn@.> g}>@]}ކFP:f㾅#gpd?vI#&(ZAv麛Uq\>Kk*bvn6JCbyGi;b7K)<)Z:Ӄ>G65\@8;NЩ|Cjy} 2r0}L.:+!(na^R8п()eq]wF>WT5ZGRB$ӔJ^QUuaS7 f%'|A T >#70nVTF)[p>ӆ/Ym/5\d;ߐP?^(Cϟ]{ϝyso]z÷/}ڝd-L(V b7Gh*pfx=GSO | FDkD3VY3ʨ 6 (Z<(L:Sp; p?Opg:Iw WP<)4 qhvl |)ox2';$oD̻h hl*04>+p: G7lv(% q]3fQi:YNᘥ/L{3䅁LY3oہl\Gn@\sn:e"dٞže8kFDL${&Q{gGD@w͓Ձܨ N7srQ4kbf`)rXiX&9t\$}͆  4,kbShG3,S挳>?ypf7LJqfY)?%},J;#l Vѯ젤6B-3yBGN>|:~|dp7_rHp4m< gT}+.?޹BGv#[ȦGlܡ|7['Э7o8fTT{2}۩Ip J3<Îol2@ϖO3-~vFgM_ߨe '(-t>,>/ֿ%'٦Vl߱ ?E{ 矎 O?~gϽsrݷ.PJ Bg4W54f;3q/5 yy\A@7:vhrv?zI{`/R]`ZsT@U͏}fa>G_d NCO@# g:v:Gcʬg*Ior`qe4qЂF? 8AqQG} ]wuwUw]ge֞klIAR@-lP)4mf18٘5 $q<<<<"3 c?#22`ヿн^zeA a04d=sLArqL:71ߙv7D}j G8㸕qc>9O0aNK۰7z7fMvL:% D// 6Y2yij^t;eqp\@pI2C'xi^ލ8v.Vkez[=Kk#DpÑ/0#?I:x; |axТDs *Q i+dC ]I@ m Vu'3?g{ό0uo6mŶAqNK>]'z@6?7 txcF[}$:}v[y̮|C«lfs}->qua ĝ%K79bJo&x_[W?vCG hUTRdKMS{_z/|_wor}'|(mE ~:-ğ$1O2ǠsGYW3P;4l蚏)1g hQ=#w>{B^=h>-3wlk=7 5/s^0-gճ蚽3p* fͲtꅫAch͛&SFt4{ݼ12㬏u3q&x6a@3&fhq) YТ}iQ`~A%$f&fxyi9`/r+kN D7C u ؐ@S̤-@ǑH`tD{ -[Y^lyE3;.B}RoEXw8x3C\#"-%tb]Qxvh} ht$c~q~wa SIsj21V_O??Pu2{$y-=xKhّX2˽nbԶrb43>ONw8[}Tv[OJގ?|Y:~K웳&y?vCG hUTR #8DkZ}􅗿/~_7#8z̃)-/uDjXtyG$?:(kg^MyϞ.~ϝ,+Όgϱ]\&G;_$Ѐ9^, h>DpNm|z=W*p._W6^\)~=5KL4KYo*W\"7[Z5E08Wӑ˖UEllpFn꣜CNuɘf[4#nT JMjsFL8nOpQ̤1;eT+c/su`a0eKgGЀA_[^%%WŹ&>3V+ o m_Kzz䟔VuB^;#{?)[q۷hhunfFru-{r3pUlgrl$D.Ako0i'31 6woߨg9uT8, -cH^y/_T,[|7tz _ hUTRQ^ktW__׿7ʽ? G gO*ZoG$̑q{hFKOu18H Ey}>CԳ$matijp|g;_:u|bY-34YUs뼸 \+Ke@.Uߙf͙O4)N_s+Hw )K3u`jkaFcqZ[ ,pg͙.75cPh^ ?\KH P+W;%DmL&8<{ zԋ]L@hCj?LRsL9@¤uZ$" +{$e8S_OHp37Vu"n4*ygo|-V((Lkrc>˧%URJ*MkݯKʫ֗;_}., Aޮ#O65*gbFDͶD3398#Ϟ+s;Og?׵t G,q||fW=# u\@RweG@skeJ=µ%t#ju>SP=Snqf8ń 2 /}G6ә#x b6 ޼If}E3aXYdhf8@,fS IIcn0 )k0Isn-32L9~\2A.:cDzGdNzA xgl`Et H=_"X\⇸F&Oo#Gp1VᘍDo<^"[ُ=|[[9tfdm#-p- $ kLB\c-q [F韔V{$9klǫVZh'k+ J@RJ*U'Ug.lگ}w^~_h"+9Ҳp,[%<)$殢[@{t_.t3GТt<}t><~ $X㹳gϖNt]O]({9}fw39gkQ1SQ:_¼3%򒤞fgf > Zg>#Q%g .]_G=wvƙJgL[Y M*K(%6 i 6;BVlNd#q$8?L ޙ3;iOܔ93m3;gO34M:%M%s@zvfGjH]ǔ!@bMNnknI#me؊ua<ec2 .&Vė2/EWe}#Wx(Qd1:>uлETs7V{$9Tآ])ư<2 :VJ*UNX<:}S}oO,ͯ#iGZy깢/evg]©qlWEΜgs%.%ylvc`sgO-9_>}rl9MV+@ oyA-gDhϗ.eh}c)nL3 G>S1L@sHgwBP 0lKg14#aXV1k%wnhQ!7e&F @m|&0q#AC>MU] Syfƚ2bghͤy\6f,7Yk~·yA:ۻzu3 Uϒn]rHTT;qRoe2eA<'J>ct[vn ;! V{xxI-$ }5^xlL MT@D,#P(MLlN\HyvUߣ筷?䝑wآc)7Z+VJ*UN|k_^^|ڏ[C{B h/RC1GCG$_l󧧶 Tٝ'gғE`gA75e;@2Ⱦf$9yIDdq_g)E9_~<,3)Sg n*x\ϗO](r8{.: _*⾂]̹Rfi a{ v[AD-rZnKH8zz+7 XsVϲv:%L8qpЀA__ 8ь9Ey&1Bf75ưF5nƅ A:xi3D=g;ֹ6=OOV'H4NY܄67 g.)&n'Cjle^"N9\*lc/Rs|eEn3c2+YI@bbr=/OD ؋a[XKq6@c[t2p@Xb_'''w\OA2|;KMOia5+>h4a^ -׵<´6?U,LmM o Lv *U^O?䝑_~{lDZV( J@RJ*U'U|[Ǽw.o^{o}տ֗Wߺf Tʘ!H#ڟ<ǟg >C|n XBw_/Zfeq$9ڇHK 9G=3<ܙ©SgK вw337(h@Vψc˶}FzF\V\@nvxj:HjOFD:˝Β}a9zF_qW V` G1aÆDjπ(Gm錃1Ahnjb3м͙0F Em䍖o*LO3S13iND%g}n5>N `)^bǷәA;3?E5J`&: &!kp^%BĝX`eΰc4^A2qT2lke[2*9O4,`7Yeʘ +Z|^t .fGnGp[}+%:!=$tN6v7H~~"}/HKhy{5϶%z-3Tyvr{jlC>2:sVP~'3˧}cZJ@+G%URJ**GЕ>_|_}ڽ|G}ԙ꟟.yy.,5C.]*~ϭ=wiً;U>ԩgK;"\(7.b},qx38uܹ2Lf \sp% H9wTz>x G:NG=_Ztn@|szk@߀7qh_,»M4ؤL@{u͡*J6(q0>jҁ- A_Zwf W.,HgIxUī57U[M3cWϒnb󂽩 pf蚽Fm LDhI=<^Ù\pv4kXgpZb#>Hor-ZXH,، f"G+Td5~ $m^2&4F.q4='4Tx?K}~1`n7LL oJ xnL@L4 #8h*-O^#Vf}a<7=35yscbxmt0uԈЪ>O=%ygO<#BV( J@RJ*U'U;Zy[Wp_z᯿k?7߁t $el#yH#g+ZO=3'pIg#se"e6_qgixzDqm=W>EyZ;_83GVEt$,=Qψ;3|꧞Vϕk=$ u؍+7AZO__WW&mo\n-soT N? l`14hpІin{t3:hg>>!b&83ŵ 2;ETmn>3iNZ3 Sq]8cВq^f˭p7g;dT /1,"3/1n&B9^nIFZa4cA;s_M<ЍD8J=iӱ.vE 2q#9Ȇҁfze7지 1DF&]ȝõ|v&*ǶcpJ*xHznN)w:'Yx0r[:.F@xW@ /tW^;#?)[.% #ЪTRJIK۵o~|_?~װ jq*X@5F$rg Ϝ*/_}+rv/NoK*ï_Z}+Hڱ]YΖ)YQ@slΗ\ 0N: L{wAzT|s6460Nbi>8d^VruNonW{v>[m*Vm8 op`udH9X7\.3,73B3n̈h ,%٘*HgdA*IsfB_60c,N59Ylmv:#bFXZ"@z6TL4}zd-pǍH/>xV6K2y  4T&dK\4ۯ7>{9Rτ+M C{)J2鰮'Ldo5v;HG`޳B5 =IRC/Abe{glja"t 2-M]b$G)Qb [ڍ.6^2-L&f6N]:7ֿ(ݥ%;#{7o}K hBȠ*UTRuR~@"ۯܮo}߼/o_?}Wv@_:U#b#-t9ԩҳg=W>uysga<_th4^ q e{[ Ϟq6S[h"ȫg.Yg.% gN e.[zgܲz.wkbs6q3rr7oTosf٦l}; jCv4S cudX&eI7{3۫g#)c:"fmb:9Ydf<0 &O cvܠꙉfI7K>ҙf,gk!=vSb+l9DI2Y\% ʡxx\/4We,w$L B9Cwp78X령FC{V ߀-7r|V:3) 2 s/w b'"Y4u0x ! JXf$mq-{A/5#Gt`N_.Ml͎oNlN LJSݗ&ֿRuu"yg:[ A hUTRDKЛYox{?k?ǯ u@K# _iYGm Ous?yfӅ'ʓHיZVψA4̀W@mn| "g n+}3g`>{JLcճ$9}tE)vm9W%F=nLS5߄ xߝjki3Вq&S[4fپ IިܜMBMqrz2LR$lrG,'par<z.~ h SB:Mq6GsVC~,8ؗ&R;btꃤ> W"0 f(Y iǶna3sTi~bs~|kpnb8uRչ$y^gRZP<2(J*UTL Q@JlzTC7_{~V@K8Ҳx3R[vg'ӟt:4;Sz=WDG-f/<ss3ã;s$swND@{sۨ }v h'ֹO7a !?~mf.9C>;2Go58]3zgg8YШ'L:`ZϢ6'MI7s$lcN霹iE9={Rj<|87hgǁ$WfME@pl3G(As D]a.Ҧm@2:V;>{Iy h}]k0^KmdD@S+gInl}p3MF. :Ldn>g)n6 WR+{~&|,Ld?9@$Xvgt0MI#ÌM6| j0%TgB A@@b=`t4c%U~曒tEL)P(VJ*UN: 藾_w_-X@tg*\:ȞÄ9Ra#'^3pZ$ZL/gvUQ:H>Zg,Pc5?KDpJO-".X:}tb"ڨ pR"prU•K%<=wzi8Kjh.oR; ^u:\zu:sw渌u\)z{L‘+3. "q3$o0(=AW hk@N]ngI16؀gv:S:wn,2zv4AO#^[17^ݼbrRc5 fbM-0B:kE+T#,c4YjNg, WT.;Ʌ1S ̠mqr$AɢMN itӾfꅝ6d2jtl%CN\ #M? e5ɀMGkj{]vwɄ$ULo=8Q~"[A,Т\0VK3ũ͙э+?Ъ:o=&ygWlѣT~3·̽0ʿ,SC6ئJ鋌Kge|R•VwN/P\BisbwYopg5o3su _^7qA%Bfgj@ypQm-yg/}n-*"f.m:'= ;s 2 a=JQ ۨ?{2##$??P?y9zgb=.ly7?Og1'H hUTR+^/~Kw/;_w婮//|eD={!N[b|LJHÍY=#qF=G:E hNS]m.-n0Y\@;T8w{ fLNWkpSaNRm`iJFL 5E̻l?mւmԳ9aP "@d|Dvn;O yg:u,Jgdvg&Y-/4f̅I=Ќ8EЮgw"fk ap^Wji-ɩ!D7/WE,&9XKpg ) d"h5Ol26]έpZ l w!s6p \EZto^6#';%GSMO:`˳ťٝѵčީUZU_KOuX}:78StX hCc4shۧ;4Am(J*UT\Z+t} _~{[ꏾOXh(:s|F"/pp \R9wt| K۸|zǸz5\c0 cU(%ӫٸԳ /Vб Jzƀfg@`a`@G7#hƙ#v:{sh pg>SICB hy~Z-0m"$y`EŨ A=ݼT9utpf e7@,f@IE"XC 40(3!A 6/dp#+ӤBm梻p̄P @f؏ܟ r=D2/ݬ=j37˒_H:":hTLpl?d"P_]2#Fh+.,Nm͍ǒF=J@jWޯ.^3rG)?|>Am|W?!(J*UT}#KD@x_}w?/_D@_<8_;"]r6^9 g5B=*E$9uxglMq'Q:\쮞\>O8]pIZ5߰Wq^)XV8_slH368sZOil|7|3{zoT ή|gzvyTPpl@8ƙ/Sn0)N0X5dzBG$<3iRةb4K5fjtfdi/2+[f 2S`Ar̀Ë𒅸t3kvƱz|`L`3MF=dfdZ#& P=KEA#}6p]*.%}=&a [fk?=M+aJbp-gh%[Fe7qvv{tx J@:n35%ygc[HW@3=9+dETW׈+Rވғ{=ZRTF{ E;N~GWٓ>%O%{{v$;ޮ荷mZ|MH۟ObCtyޱ.}^v0l.f'89Eߥ'w¾4;R/YېQZ*UT:tV˯};o+?ͯ‚Ov< Nb5O՞9Jgw$ˌp,".TEv"%;>wpzfJ+WWJ|&Rϴ7ElS-MM_D }}! }`$ӹ<Ӡgf)0 ^,͌D3#6L:W'F+kf "5?zvi .k>3L'Z|/ry;__y(A2zJx '~qw|P-ܴTƞooF?-p軴DN4Z]6|PZ*UT:t{嗛_|^×aA[!#sgV+6UψwF2z>{p,q3GШvܳL3r/6D4{usO/:3==Łm||ڵ#7@uhH6 Xճ`!8RvͣCNԆA:x1>J:Ŧfűw:{q,̒ ls͖2VYcy -ԃ,I ͓q |sxYw$԰!!mA[+RCz*Ѐ#qڜi>j,hK"GOW_)m5ӑz2dƙh#& Jr 3g5Ǚ,F,mN"kf>p,C$̑9RƌxS^IY,/>6G$_A[}"9kȷjA䊙X6KD@K+ۋSW%U{nIҙ/Epۢ9œm{Ucl:x#U|v^`+9֌IhAS&}:ߙh]\cҚC(=?DxG恞7f?Uk!w~J*D|8 W gum*UTRur' _~Wwwro~|5XN@?uiYGO.Jgx39<}II7H](ŋF셪gҕkKW._%@7zc hI=n>쌍s g-tW@9hED2ݼRKR`Sz8fYeΐ +k6^Z0^K>GK@G%V[@ApSzze,aa^SqeG\^i>}_$<^OqKGxnv<17oR$9f٢Ghz7h#<ι >yH]П nkl;~Z( DδGIk}@/m$p 3c36L@K@Omw9%Rq_DړqfS>wj峕gk89yf\sU8k8ϝ'~O->Wb/VZPB..\. ~qUūE8 Nzmy._Rr=S`68v#EL6nTEin!kdgDL Vy:WC'hE,Ga*9z7]$eβ駐\zi=dt~wek|@/lJ?w^|wyN@>}?6IKe27/Vב[͇ZD;za#hЪTRJՉpx߾ԯfڗTWoe;_7|_m G6/wDDb.=s|d|U2)e_kp"3-Y@Έm] g9T204P/固}4q^<~SkOmHh!fDhvfIfvt3eqwƙEmm@6^bEWsNL h\#LRl"ex(0`$Vk}ޙdr0M0!0L2Q9&)hSJGj鈕Z[4y2oO!2Za$eܑ ?5FAiǙLm6#ޥz@dOYO>MӢLnPK  o8O+FlZt PԿڄPSg\:uc:=r|y#)z#s"}VvKd9Yyw-m>Zw|Nm>/-D2z΋> Hڧ&<{Bq;x:URJ"z#yZ}__?_ > H}x2>W]m<{tCWQ@KfYZf}n)% H2G;x3p΢}]9wpG|zrbw|Mx 8ճ`L@g!"g`N%} k0(0C tY fqB:gtmfNmg.v\=i#0cr_6ТzC4jgbNТ^lm0@DH %,g+e{g[=s,n3!2IirH,kʗX3L@t爕]3a$=Z2 xYfO%/,3M,#D5"1E>S-3iӎwH~#-x0-5Vsed-B1uc:h4ˌTBK;-*7&rމɿROH1}?w8Hz#U-oΕgF-ܙx$=;Ӗ6>og iƣ)~dA>!OI=ӔggSAf̑3 f>0Ǎ1mf\Gf p{g0I:Nir\=Sl/逻 ^ym^|g"[q8h3ǖk`# 2HGs hG1SXĜdJ\3 Ks:AT$#`F4F^z&l!3;k>{b&*9*#/{D(57bnž >v'״b3JnM!J6wR{;VI9Afl&,ݱ ݰ>nVp3uǭ-MPCK2-n,Mm,L#%UשSwF~G'n_@sfo}($]kI=&F«(>fO2=h;swŶ_?2> J_g݅5+%>k|@>_ [K]eq1G/OM\s]Xr~N_O^@;߉'k# k\|(J*UTH zysWV͗ WaЗnԟ>q9q#"zfx>pW83 ТzFYmk h pxgN; pL!깻DvRծU8z3fE\=KZσ@&tl@=_Ę; unY5Δ CNhf *V0LA,:sH2jvq3nfgkb8|SADb-TbFtȆw7R⇩@=dƗ`o$K \!z3<A T-2$d 6)!lH-!R2GPY&[@W"蝷xc+A 7X6y#YJԼl& ^e[ɦ=l"8!F!W^=| D[zs;$̡ĀHl[fY5vLo$֓{k&^'cs @5T,l֖'rc~ֿׯz{%l'/%]i4O9CPl -\s6?wdPe~kyuu1,+Vu|wדm[@)ItX|w S3<?P2N##~;Zb> ?VJ*UNZ f拷|o\ջ˰3e Lm~{m8yhsلP gG4_ʹe@;bx3fq\_^_xߺtpHOsU fkH9sUd!9ٙgTϤy::hqћQ|;AM}bĠ QmzJu&fE, ٨b+XF9HYfX׌,6gG1s0k\\$UC΂qv:/z&$alT`eW37T:6df+UAtnb;s.3&#b"&5Ŏ&D /ud=Vۈ["6e#a9 yj$}N֑T}ӏkq͒N4BXnWk|(/I5$l6~m/m7XHs#I7%D\ ِ Tcۑ\~e:;'EZ'}|C:?X78:z@ό.mxPZ*UT:Ѕ-#o՗׿W/ВHQ>{4#h)znpJrw*jkeuW:s:f=+ 0LQ>VoTwr_YZ89/UG `dTD,gTq5 Μ1K h}5 f]E,!;c,3s>YЂw"ft(H5b&Mp/EB3zdE/{R!#3!3eV:d0ȒnhyfjJLe4Ь9jQL3嘺7/{g2&Z>A.;o*?(;&  Qߠ|+43M's'H/bF{' "n c;P L@5*w-O疧 koß{$9>Пzv ӈcHCC ŇЪTRJՉT+Wɼaw^սo|\WIQ-p]{ $̑~ Z+M=; hQ1#h%͍8Y6}>Эz nW@76WJ4)D@wn\pkAIhau? ktcCr\}@F hUTRDW@cRn^[Կ7x[_y2mcQ4Y:4 斧V&=U筷?䝑wآOf)-av#~`P]}8>B*UTRuE *MhZ尩9p^:e@gEs+샧Y8w\WᙳéN}}9sA㜽XH3K@="/Q=6ZgfQ:szz5_w=swC@z#q}r62LL4Zf8gt:c3n fDmiٙ9h*yyXV &5dG_nf^X.Mfhk;9Ab4KVxѧ9hWy#ޫ|XfnxA'i҄ IH,lhrZy3lOS;;vv4SA,2*ff/la %,lUފfYδG@d $Lqz%WwC:nVH!ݠMN(2.E IPx]qSL=m|bz.GBvM`+E"G}EՈCDp'tvq2{IEp|z\ȯz{?x=YJ@N# %URJl$Yޯkv;;_BQ#(et{@;µyOȆW@S8}|Bp@ծ0i||44 tYFT>D=_;\>-g}l?evk>:Q7Ę54P9T5GI4v:~g/}G*ucG1ژקǵi>3iS&Ʋ}t:3w^6Ġga_A=0W,590ga3ʴ,MB#;KSDIZx"s& м7R 1C#H27P=ǖX]dtomf&\53ز 5]GttwA6fg859ED,J^V w#nFPQ@5םinYEva̤U6~t7Jv@Jf1Cl2еe^nEZ WI8 =kd;RȂrGEqvSJ WʺV 𗰖Agt bK|h62]Lܸ6!?/xB/zٺOl)P(VJ*UNlINjukUўuo󰠝~j#]Α9x3Z;ۈr%S$b>G4ʙzdy;#$p|A݌%-f/YT2k)$jCwaϤ-  t[=Ƞ>>fNO6GM*c~z&'G4` ΄qsvr3t6Dܔ6X3X"tFP=8YƎ^8^93R$-su"gʴ" i' bY&4g/ 3YL`V /Ay;#43W=$T4sTftɤ$9'nB袑\6+&b 2!bYz.X  tP1 t@`D-8VlH30 Q.{NM^2.LM1bmX[GJns픹˫ cX?(g,d#i‘4/{nEȫL]dvF{Z-SYUSvm[:h׶]zf]~ًJ  ׶FȇR&XL B.4 L.+iSOIOJ@+G%URJ/[@SUZlqش4_y苯 xّD"2@/N=\@;=T@sy\e}dΕs.$Lʩ e58(9hzFfaA}|4HS"mgz^|Nz,yg7Hޙ$>z@ذam!2S_̙5P={sM!Fmmδ8 ukGw \&k;~h %+4W_с i[&]0,/˫9YfMf!T1%BM:3R#،̙+H4K9/d@w̄~:ԄSzF2!5ξ;W|8iζk3dw6u]vA2mF.8k.U:IB;KF!mUV4p1(2oǁ[B8tmnƍH5*gCTp',RzG*SVޯz{%l'V( J@RJ*U'[d B[@'|(ԴҮ4̣wUIDAT]XpAXBZygQ.g/)J@ӎjwyr|uz.Μ.T9/gb -f_\ƙV!mo*(u Hޙk5"OgYs?ad@w3q ߙ'G-D@߬w3pS4$XƤx6$Zpe .T̘GyxѥZg\-ԌJlL΍,.'f| xLԩ$[f`% 6gtT"`ƫZx JY5:fgh^D Gqƽ4!t4TDR@JY6ɘ^| _6*MdP.ga=5ΫN 9ǹ$ Zwh%*#)f bTsǂ<ۨnjL O6Z Z|!ˇfVSK7~]Hޙ_}*J hBȠ*UTRu% X4MU [z`i冩;{/ݽ snwDˤES:6jyx爀>{<{=g"//;>_/QZg Ј=CϾm>$ox3 gnE> c EL$c:~Ӏ1ob m3t h8 .Ni UQ@nna-gAfg 8j- vU|3GFz}B2sR.\L'L68ɿ(iz5I:s~]ERZP<2(J*UTlK@҉FmVKu[3n7_s |T9?sN~JKFSD,f_Ht*\$=șsxs<΂h&6ήneNMR5kh&YUµUʵ YZzNto-3h׫|AFzR4A{ #C9 kћ6vS2@oI>-Ig5S$ә%;O2,Zf9S 7;hS%ZsYsyX0WkG$jh5# ks&6bz`ƒtvyg,m1йlbUH ˘TȵrÎլU͚UK[T J`Xp3IS2*K707@VwW'AdF׋6wRNRN[z-BFrq-ϤSc?#UI߼3n4}J hBȠ*UTRuݻ WVTЫeupJ@XDT7 QϞ7lLr/}$y(MpgNڅK:Av:c.u"m0Upe9 o @$Ѯ_7_ᛍڍ>F.ygfgI7{td; zv h}&yLxvg , hn v$j,dX^~_Z༶2cgj;.H7 $2Kq̀wnNh ĖLl|F,Eű$!E:Xڭ|JNLY3xPYP@o:[Ѣpf!FC|]3<0R5` zg (PdeVY֘YD:gGdy%=_o腛h=\6hHa@,.u[f)B[\@GfR˿Do?.ygWlѧND@qR۞ >2'ʿ-1>o Ӈxtx>9(J*UTxq3vP+,kwQ#wD9ˠBb,f;葏I7K%g=fKWt tzոr7Jq tf \rJ6ᛍ}F;I=68#Uϣ0Вz1;glmR;smgY@}v3 `,9d:/Lj_W{Deex6ƙC3}F c4CIsHlime/ÅƐJ=e^8wQqƦfF:h;z^sHC>ZXV蝽y#V+w+tpI5@gw=Hݫ} 6[x6 JZ_+׈p c=_7J|Iռ឵=kcx-|xi1pԳᓿ'=E%MF>{*QlB>L.\:LПzg?OHSO}{lݧ~Txm4ɟ=6Cd h?lydqwA<#zg;όiq}3a!&ŘnY, 5L;c63k΍W6W__aojtqyZ[)f]نjH1'`F cftsKgNrXb+$9kV@AΌ廬ٰ f>KO%LJ=mv3Q1ÑDps6霬~ٍ&RAle6IO#fTе0>.p8 .2) Vku8^msxgǗ^EZ&@44[!-/t ɏǵz%g5}'UJT6bŵjp#K,lb{G*]ܿ?c;#xsSWJ@?*A{#wɔ+vD#-f.QF ڃz$m*s,r~n9(6;_LW6|M֣=g@tͲ}&~:xN#Q@sCfAfLgtvu:yjTF `cuj[l*8M> +63H`֘~~ϝ܋l=B];fx"ȼ `j3^dL\s{x3g{ A +!lY cGm|AΌl\6h˳k& R I3z#5HksBQL71ٙ[m;g-9w&9S/ej,2SH2keyK5gk^AeUy[X`f豶^o4k r9,#xƹ\Z[ /mͭ1K$ń;zVYY^5JY N+Err>-#s?П~u䝑?OXJ@?*<ڏIe**UTRI)xr}}sssP(UM3}ESҸ9ҲRl;7Ufȼe|pL$,;;Y%i[ +.+հ?\@k1"qAg{ z7plؾD=S2NLgOŷى,3ż#tW@-O]x,3")cWsyCϙ\:ɀ$a1Bz0)ޓ| tyGLxBGhGZp~bZHT6;뱭Vj9\3ѹD塷~#o^UzgjJb>+߸w4҅ Қد?wF.`"/|{' bLW=IKȃj^qmr7:z|K@% lȲwڐrqvTmɑ۷OGI8,;wt?YZ|{昿ڇЪTRJIW@Z~ks].tjլ={žݮ sw?2\w[ کssuiKkN[J@;Q.*fn%m h[g&}68}qÄ#=fD7;c3蝥gb53Cz1}5'GfΣ:t5cd~Ҝt4S϶vԳ;mCDϮ@gnm6‹Z`kVl i#<+qf`stFgճ:ei,yg/\=I 0xwFH9ƙ 8n$;fhf-qSq l(lpfԤL@깘St&6ghT0fNg E( )gt@U<:EDq,bjΨoo5=gJ!zE8(qd9n4DꝨm6̍:bm6WﹲZ1])ʛZd b::<d֯$_g>жesWhX\_xe PA?=MX 7%I,{ȏZ;D㝀Z葉/ܦu~N[jw:}"OA^%昿ڇЪTRJIEVTԪ2{vto f9MBԘ̑q\^l^ u]~#zuwƋ`]g"/U!>>wwĴFn_Vzͽu3'$60h 5C`G@R|A0z"pC,}7w,L)C;L Ӛ$WfM@ρYFpX)ke3Vv Uc; hnFbL.YcPZ h#e33bW:gug0jC*<n* ȄUX]Ozpsfg#x "iƖNQL5ɚH)U'Q76ٺ}F+μ8oᨓawf06yY1ɫc9MW>BvC֚Ť뽘u A}y2Y['|0R 3FAs|x.gril6iS3g&K@'^!:.᧼YKtwR]o2{jNbdOqoKWmwۯ-XW&<[q}5L-ބDG5C =ִ|ߡ_B˅x_qޖ_%ov5 TEj.Ȇj>PS8r:Va19<951JT߈qk=flDK؍6,'Jfn}gMlԊiH4RƆmLD3n+W^5J"Ўf5#1LCϳ hk5#gnpƌ YX`*Z3yY/쒙5Zcpnqjfma.q8/6oZMӇV>56VVc4@chVV`㺩Z^檕J9[.Ta+ȇ2lz%\LcП͛oJҙl-W hf:Ok- %?& ϷtYYTռ[ &~ 7ၿd\M>ڱӏ^@ 77{[/ӗ^@|N@xK0%URJOV}8xwH2,v*nfބ@% \9]ڍEct[i ?tsk\fSnt9}Fx+4rۜ%Z hA)PV)S *t_=KQbچvٱ8hF̷7ɎgI@L^<;e´bҌkAMk1jkQ@{:xiD5nA-"q#K4$V:hq̺Qv_3ԧZjCd-܇cDxYv%Ȳ6lЫc <1Tt17{[/$:=}'@_^ Do3f>:VJ*UN>8 z1 'V&@}X0Z imHኹ n,rh|FDΜgճ>_1$6 lRz䄍+>cb`|l{GI@٠`G=ϣƨ E>c3mHY4Μ)Qⴹhg=u2;HQn>Z >Fݜ W#{ $3Aw6% 3 4gc5\φjw%Z*bLLIRG6 LNy39b 8E(ZKM1h8k|f)\=fe;i3&qϘ&gC 2ّƚ(YlNR=KssJN[VbxPZ:W"MGcm[V݋Yv \"ٴMX't9[* ;zd-K:ɥDr)6=# ?.yg:{uh)dȧ6бI-[ewd9;W}*wՎ8>w )]sGG@AP (J*UTt Ћp(ͬV77 [bAӵzީ;H^#N( F^H2{2g$,;s_%zW `.Ex3нwCٻ3ӷk7z~>}7zx@si!> cD?+ q϶zӧgh3:@ւ3 { R)sqJp,“-68z&N#529sZd^O,[P3li4΀cI,fq W, S@:`rp&$}Ш;OhFR+ˇM詀G5lȕL3Mȑg@ҟ㵵 Hꙸf8FM p쳭eQwKLLdhL,LJn8榕7 ؗ榅4k%\V^ ;ƭ/~~H.&[fs TrPL^ dRyeJ@RwF`^eTh[c_Ve&븠VK0h۞l?ocDzr7Ǽ%t\0ٌ}<{JHW{2Zm;:jG?'~3cWpQZ*UT:k;(j^-I^;rȖ w"e/5"4zHƙg?E8._5]#9^{ݤ-F|ݸA{{}7:Џ>77zА#Q=s<2qpAz7>#mk&Fm^ƙ}̘AH94gH3!g q°nd>9\@s gl-g9 ;tf8 ˜gKMEь9n͒)S@",3CޥnTDsJu49puEny¶\%am5M?`|oNyPsWNtLfE OZ}{);#}&j)۲Ue#Mԑٖk Zh5>'݁od+ax4`7< Iony{/Y?c~:QG6~9;zx'_^ _yόq:> *UTRuŅ@(zkTة~(Z6n}Z=$\g/VY;ۈ })hWu#V@ w37 aoO7!Dqs9ԯ `4oТ}6G)gc'GͩQSynܜ5; yeԆU6pJAh ͚aTճ8 qEgF3TPw&Yr葽3^VrZ42,:3 ِB MǛk: h azPB6H-r[7Q86r3% 83x fI4۸r+P+O.FS>2G=Cŝ;nW-N\aowRH|&R^5*FJl)㛛ѵP:Hͫ?ПzgxXHS>%H(ekN Zi5yI+}^},l~rǻzua/M}ߡږ?-'t!]u6uW6^g;\VJ*UNHt&R@ lIH^X^/ \ű֮JTψ_9w$,!((k;sni pr6~:'lܸNs ͹^q?0lsg&>rS0;#3c4zvg`~$0eYТz^5Wf98kg5#sVtY13_2I\56_/hp$ygAL5 h.5X2AC$K5VFb7TGLf;) e4iXkSd=jE-<"e=Z[YtޙKg_;nyBLOt69z2y.y%,f攽pT,04Z6)simԘe7MX;(vL`[vd:x`t/;5@>AkJfމoGPv5ά$RK+Pf%͛oE\ ۷\Eu;K0YGvXpidTQmjuTXדa~չ-;v[{`ou$pִm\87R?KpyC!I~hc |d=zp$5{AR|ڇЪTRJI:HS٭|asU+eg@?>{⏻1WIp2pHn̑nq*kx3p۔3Ghh;;~ g.hsR c<%GF, h>, h}F-6W@ύ1=?n &8i1Hcxgag& zTp;G0k"g D X"n3ع,>gۜ%IzJ.R_L-s-GB3̵Xm5 V _B6G̍qk=j1>[=íuB$k[Z)n? ͙ hϦz<TNLd}Ò3⣘0bFjHf4b`v{g.>`t.]o080/dplC+ڡz$qм .$6vbkk\( $3+7G޻uKΜz%H\~ZF{>Vڣ'*UTRuЁx*ls;j\NВGvO36xi;ً,r2ǸMp z|g&t_1+U͵k>bԆg3%p}7tԀ!38hCK=M zG( \=OlMҔgdzwfͩ9V3E;jCJ쳹<Gm̂-Ae쿩`t:#E_ qKzbÒ^BM,L⼑UsC˩J6`fpp2%9 p$ δ9O^Ձ|fG'& A\iyv6T;I z6wچUL tͶqwu=_+gt-gUsf9c3͆^@lv6jeE3mvkM6k 4I;&S,M"T% m_ ޏ,cѶexUrmx0ɫ8w{k EK`-ֶNP MvX#lR FcKoj^1%mPlfdu-ɭ$3K)($9bTП ~QQZ*UT:zwwY_Y^%kF.^ڪ5 {.[\r=&wHN. >0osВkEjsw36;s<l@}1Q 30=f͌Z>=6L6fƴA>Jp8*Xրo⳿FxFh" W3tv{gmm>g uF\1$<S4͘ADs{flFz!{X*ѝlHa!N6`u[4O5KFiaA>׶馂\@Ng.h_l7;äF9c3?%3_^`jշw5S逑7}K1xg swaqv!iF7u ySyFʭ&D(n#|zP6D{ Z6x:[|PqT=\lL(I@oEV72[[{L;SSl*RЏ"J@?0J@RJ*U'[^HSfT c}cpeKT9Ҳ$>0ut0Ѐ}}ܸn{UoY}}EQ=#!mРg1BnD@; r<5fM9gfF]ZϨkH%|ʾg=/>i7,gY@ 0ճ8 Y<h1O3en 9{aLT=KYgq͢SճftpR,]3qЎ}c*ڔR5[Dmvgjp󰆘hk j tc}{4ڸf;^â}-aӹLB36t)u4(Cbo[d8%3[>@{5n3ҤCyd%w|HU 5U 5C?|ܸUp,֏njepP4 ~۱vUkl(Tf9~_Ep_aPswj==Pπ<2l3 zhFm` nmNq4צ't`v n08?e.N&Zxi۟IԆ뙨 >L \86;{32#br2%,f4x!N97y8\ 65M@f6uQ4s,#fLj8gb  t&EW=>hyʳm^Z^%z&ZϙٰFN6΀e[iY:nL4z)̡ۿV.x[+E_$w."K[E&;bx[Vr(|"J*׎JQQvH5J}l܎UNHf3ٕ_ȿU=R'3?gT,% #ЪTRJV67+Ţ~8Jn&( rE4ARFk3pzz,tf; f~t7L̍>3oiga<ԯ(Gtf)϶z1'o:EA>yܘYͅ)W&-T ي̵О .Ng٫;hQ@5Yс,0UD:ȅt?b2V:wFˌJO:Cd3j"hz3nm'tjH Dhm49Ng;fg]s!aԆW@ jTVu}*gKWk[M4jf7G^jF0r: g v:76M ݪnO@̆xt3 hIwdG/jEd08(dfGQA?*pt}1x7i%n!.2L%^% ~*]*nڎW7˩|1MokrdP G>x_>䝑_y3 ziNQ&o2bN#W=scpt3 0&u`iƢ-,aCtFVffި\[ 'jXҀ2H IetQ45)s,Nk!?h5jMwHY{gV̂# D:npffm̩6g4ΜmD@6 cA3g-G5u`eU귿m85,k4r:<(fV^jk:P_7z&l ]8p'/3`FмYn\';\I+Qz.*Wt| YM{ɪH/Qɟe]ę/E"24~J@hz;\s+%Uo䝑?۟-RաV( J@RJ*U'[]HH}l\f Q=#8S\1D\@4}nz X<0T(]y!ktƆւ)6}>ӣic z3lqnJ6hX5m6>(Ő A4;Z/wF,V9J@HFYV>dZVFFbD n嵈F:wQ7; ugW>~g~4SjLJNgt;#U|^5gh9Zm\@y"E `;46LgM*emmt:fvvNvp1ʷv`"\\|QȝvñYUCrP+"wx;Ū]tP>:ƃqh<_9yoU;lY(N}uXݬ*\1ى6\ :vOT#U.-IcyMHURZP<2(J*UTlIzq1&kf>_(sݵ3 s$̑n" hϭ$E$|HY9Vc ,gν׵7A 2kA34d"C;#yf O]QAZ08,zyƜ,ktuqwAty/@bⶀs| x3fnemuEp9; |%zDk3ZcjQJg8Eulagl#tlϼYKgmYF1ei Q^P@KYNL@v@̍:q\df2lM$yV_w"5\xvl/vw3$&Ew|4m^fSϽS@a⌈8`ϗKBQRՋeytJa}%[6DViQhmsz%Xj'Esؕޟu"yg[XBxdPZ*UT:ЉD>vKMXkM$He#rD܆~DIw@w7TPuA@S,gk]n뙄l7[7)QLrY@  X6^=x>-;3aִ, pbwM'([!f_$(řn\M>(%}>SmQL@hws8K hO@ݴl6$ϣ>=j>=fD: ϼYP>SLX;s̽2KڟyW@s,;?YnL:gL6[*<^#3G=#.ۜ\:K| kf gdIEX4}:}Z2J6lnnXϙZͤ"a<ә:o >oY-sov7:mhQ6~p8$ e)#8sMpO@diCek"-c2M|ʹ[9{q{^Y h7N` ںhoQѨ߼3[J hBȠ*UTRuR3 \@(wvZt̀$]zf7{kA7n0~~yfD:E|stA;mf5A4D@y~&g>/NL`yΆ#h>nPDLIސAwFL! yLrHt@_ ِnLt6P|ճ#z"D,zFr{$,"geqOp(&k>h h=cjYஙu:fgLxxG G3oXkYfM4,[6ha2I6f6V8UY%NiI(%,2ȷ}Xv䅊bU?>^:QtX(l6뛵u3e28 Z8<{?wF~{uV( J@RJ*U'Uza!fQ@n%Ee AJ7sx8# nUros5#;_3= o0̠Y$n"깆 蠅 }0-gdb#N憤gk~`{ .NZ[+ps`΢y+u#8 m<]]'sEhͳaFza_h*UTRuRB@l<z{[V밀K IAh/I.;rV6\35sD݌ޝY†G=Rupv" h> Y7u@w5>;_L¤m=S4+1Űsh"s }6, h;/1,f ϙ`-S+հZTM'Y^Xpܨ 4)GnqNlV([fRVMׁJ"]\Y=Ӵ .,8ۘy Ng-[U E^[cДg)yn[{4噦m0莂vRE}vƼsLW43,8h# h;t9H]J(XX.*>Xt3V} ^5_^6tiKwJҭBpܠzV豞%?|);#xsNCh?{eVJMy?7H}^>+ VJ*UN||(Tj= ;ۜ)tnE._BȆ(?.g|ݼ lԳdDh3z)A6F dlDƇa>OYb30=B5 `17Gmf3gxFҙu:K9"Dmv\='休gV΂tf!33+52jHˇ G=Xs+L;af_$O ؊"/KXÑ;[%rҬJ f5m3.;+YсJ@0mCFmtfVި[@m%8XX066@XU0+(vʀE$+G;%PB-Uy EqXpzY.)yyZ>)^E+菿, ͭ2r2YJ$u%?{W'[aJu@wz'oࡑ*|"@u@+J@RJ*U'Umt,LeڪV*5XnȺYBr.,Z@jp+}~C6HΆ}`Y`MtA}&ϖhQ@όZӣԸLC6,Q=;y6>c#3l'o0<h}f= Yg:3fj1R:^2̲ v{gL]#S{r%R͇|X TW,fY؋]뚏!@+\zLJ&}쳖#lL71dښY_vaP_F 7 848[!qoW+(o5Y:Snh}#5;|'@ff8XҐ e+/JM^U ayI(逌_+ŻRXU9llMWRr2k?%?Ԕ䝑=?ozz}ak!<'V@Z (J*UTT 蹹`8Flr;Ԇe ܙ- E, h>? Oπ>#fN}fj6#nƨ Tmt l0VL_ZtФ9lEJ5T2=s*ָP&8bndփ:\6`eG-E,!xg\U9vD8-yg&9gUr^5|4Zcf 쀮[:5>4zϻ> ٠PϷ aA9tP>qn˔ꭢlv;;Ɲ- hLB}rUT",S2RyR}Zuy*/zxd+jŗWoT^5*pRU)..6931WSdppO~WUK/Iҙ^$O@TOTSW::e.\O^<ݐ'%vhşA@{ʹ'Gsh]:.״ >m{sR—FP/V(*UTRuR C;S󳳡p8tz+ب˝2=qc7Dͨ?}n!mnԀ ^V@g6Zϭ4SIzi>/.=g.93!_ٹSn ƪϘt5+ǣhd3DZ~曒tE~ hޅYo۷]n MKo%'ݍvb|=ʝm<}Evˏ&qH2m"8ػ:}4ߡ:kN8]? _H'j*-VJ*UN%-e2_ IJ|gN nS3dRh%}mv hQ=C5}S`?9kmM37j^<;V#xzt# %>/;#;/Ԁ.a{g>^L6,h;g;#!l\>$jlw:;d,m' h}֩n&9G8 - ,g>ώ0 z1fP'Y']>4߹P2%L]n̛kfVe2n~E%hf L+,G.ʆxH3Dqha4by.|s#[[X(B, )q{Lȯz{"U'PmK:^W$(z< J?FyLU[k=){)H?q#yh#KOs8\Z#:W~h<_C hUTRꤪBЩ& RɎڿ|&Yc"68{\WkWL/-#%,Y8gI@}<zgģŸgPm|m6ճhjӣgL= Z6Bﳝ++ƲL<1XO LMo"32CkZ_;v9#3 ÿo~Cl{v~G9=' yՆ%nz~4? г!-lstP !*Zp :Jn͢2{Y2Iҝ&eh4CgtgO}2v3&E37h`L=Q]V3ـquMϐvA೨ϼl ݙ4KcϹ|}qҹXZ( Of4 !J9.<$5杮NyYL%G:[$;I;0}yzFH X.2l>5KNfTQ50^'FR?W|_?o_|>5 % 0nbOZJ3t1ɇWI c(JnWʟ?;]fB 7{m/.}&[xCBh5jԨQu'@;1@cț&rśVG?2%wug4{YJjtvn{6<<8=3)3{L>vho zcwgJޫ6|yiљ's1MϘE?vnGO$F=$3&3;,r3 t4دA]Ƞ%C-p3Mއ @{,4czIJ䕼Y7kqՆ>O;3agGWT5WCJ^IZX'ÈUЅa͈PYg"=>;VmZIZwy&U ݙyt9[UrY3|yDO:/; .q9\1/[+,˜HVn;>"f/};G;/AY8K^1٠I {*ebz%3v*܈k@50V'c/{1_xwޑ#ϩy=z)\Gq:4OZ?ʒʍy6ImOGr硫˫>r#O$*7= @QF5k6DUǖ$24GI~#SLrwd`n}~]fljCDgնocR\=@yggiwpqhy34Z3g3Aۢ>7ip1qtg{P6|a6 jѳ"=}6:;“x ]e;Q%nyBg\iUzĿX4o/o|@Lfj) ]ZX#!:Qg|%"F0b7HՈUH3xyYk&<~nt2ps1(3g<+Βs':4 ǜ p0_; KE\\X,15{C3u*l%Jts_ $D̘v'g/hoy=]+F [&YoJ]0J:O96y٥bzZ($l4F,*o8=>pU}_oג;c/~+% ^ j! EoX俻[ oDǞ Gդt\yje5 7{m/.}%s?<"A\o!zRF5jԼ @BD9@sI|̓6o_+B?,s%ضf=$hv^6ȗ '!@S^?p}ڡ7Y!3d3ޣ&tLB}8虝wy{>}F6 vHg3y!mS}9@LJ+8 E}N1M̡><9;RNh%tƜLJ!ۚ97K_cΘ3 3ҳ3jQ͌T{.N- 9j3g }v=3}FznX Lf,`ǪoHg~g؋/dR:} u* :Ғn,a7׹?oG8;;w֟|ӿV$W/Fpgtӿ] &;O$@~BHĺ{h5jԨQuM7 "@I| ޽#Mos6&9pk$}o"4y{uk`uQIڈ >uLG>I:\īM6odqz+@Y|;gMnng \K*Ihَ5Q Wj1.o~͘VUyj#Q!qnDڽs-O gAs) j|3O\!3IT9*b6@s}Zgj=,ϕ…ja٫ բgDŽ<&]sG3W*%ULZZv3lI}A+3 B>9O@[@wμ߹>5e l a+8\q#v`\@'c)f5ݟts Մ67ﵕv-(C_x6";Wj ?)[Mz>t~6=c{ͻ>ŬyӝEtF&]]&lf`}5`h{q䀉.[\9d Y|HGGkZ$R'FN'I&igzٜ3Mؼo.uϔw:KqhvVن љ3P2sFq&Ԕ3y3>pAFboaܚI] ewܰa:aut%dGqkޤ7 37pLsũ\3YEG6Dqn'ŪTMwkL媤L.&3LQ <'L~-V|5O 3?7D;viufYOSg~/n~ ~95)gk$%,˦$6wRf5M 75&1}y"'?Q#10_N@)VF5j^|WOo:q``d$<>{'dIL %n̏3Cmk"ώU^!@9@޻> -2@>st'>lp͎< -=p xЂ>0(@kJpJ pyHVxtbY,Eo'-w;wT$4rh,&Wf!`2oP޳#=lvv@3+Q鵸ވAcz3avN4#U8, \ Ii$X-u<T<ɲ] F 9/sŒ>/aw.gJz_9'3Z3IڪAPjp9cI*->Sr[v1exҷ<yVЎ51AQ{ k7\E}>ab`=e$<,19k﯒3Fog>sfLlЌGsvB *$˞o_(vkt7= ܞ!~+!bܚ^ ;- l9XLӑ9h||sgܰ%zfΔ:p2c[-wmpc:_\Ҍ ,拕bŭyy>3z1wn\fǟ%z@g+ݪ1r\Y$n^U2y>_M>q͎E\>CVvGK~jmV+lDҫ͍r4=#=Am@9=ͭyl/kZBp<{mX; 4MWe=b7eGqg0} ZE2UEɿE#lS>S͜RbE:@+Gƍh?\ xo@IO/~[rg77_|>5o"@[;G<=#mh՛h5jԨQ济CÑϗ x93z&Mٝ ,-Lfqchzx=mnέYfwa\mn aCrg}uҡu3tzUᰳu!Y8,4y$iC]ٱR[5 7 JMC!`Vr@cq >H\E&E̘ 27[,U 3?\h$:e*c:řGE8RLn4fݺl[ICH{6tՆÝ;wҰZVyt(sG}Z>lѳϛ_g 9_$zޙ2&*Oܳ!]rTܳM!h$fO/kgtULbgQ@Y3n4e1g 6hs=Fީvʜ6;z#Ύ97k+io5s]my\mzVs$kFǜ[iˢuҹ<_(/51R<8Ng9$U821 ˗4¥FyV/T$z섲tHy$?'{Zo.7ZbVD,#j=W HUڢ;,Vssr#q!J-{^Y-yZK.c EНD3:fFgc|Cɝ__)D *J:SF5jԼ衡X|b"d͓Gd<鼅<z{3zh777 SϻMHnv3\3:nZl3g@Xl@GL<zฉ-}Zh/yհ1a39@=ӫ7"FhZ<:4u!3ѝcfKD̞ٻ5|L+ O:,O:Ks>{˝]"=[;CBjD͸N$c薽yVm:Kn3d}Q{xC7h]ܶ;dSg2@[;7>.hcSIAR Hѝ>$f;7EfHf^vB"_a眏=4;w:ct*Lbf&IrgLBg4Efú60#l6vg1qɗKgJs<=Ε<<.T$=c^L:_ɜf.u#z[1.Rkz[7kZ<L̘ˋY[=c@r 7iʭ7.7s21ozKFf^3?ip$ϔ] P?I'O؇|ZR1)VF5j^"@;?͹J^eyn6ӳuvf77]'m 7އvG;%>p3z&qn6p=& й~h_Ȟ&71~kGرðs3Av(Vȃ>r01'&iF8iNhPN&h׃z 0nI랅ZrXߠԈ1ݪIg7y5|t!`>-}T|ZٯWy7t. Uybn,R^ɛn#$Izk7xC$nۨê s#n —Z^D Nq&,TzuϝLe2]JiLY`qY4',Lg bY`F:K\kKKE}],O認3b\pT8SѲxUmgYssד/Vj5 zs^W%$X^ӗH ɼK&gx`o0тv;1 R-I\'?0<~`W˭+<"EW9LPl &Wj3l9=qFKJ|h651k&AyU'w yYIe!5(VToL ըQF:>t}hll"9Odk[!#O\pfǥ]g3޹ܽ>fgMn}&y3Y;C׹;D>qv찁&oC}| TiNw&FϠϽuy|:zL=ijA gCN4Km$Ϗ?gI4d5Z)hTFٯ}:3y-N}P( jXw볕Ý1=\Eh'Z3Oz 7A ж;NWڻI3ݘt,} bj#_-VJ{F6?-KAعT,B.g8|wf60<Ҷ>;:k/t2+ZV6f`x9c<8ZoV4 YO_39Ilmh/3ALpu8\O]me_iq h?[Dg1 C~Z6R-qVg4t-2h*;?ͫ;rEBgJ%!5(VToL ըQF: Нwv~#ɋyx8(K\y3hY׽σ>p43fwҪ M4Yo,wlngǏ$Gjõngϸp<>@g)@F}%+$4fON\$}$ĽW眯Z PܙT3&sк;*I5jԨQZ @Gc :zm1@R|w ?V߯wOg yYh8$gQgѝS#[kk,4~P3ơY#u+u'+\67> ۳!n۰>{VpߠwP1=V>M]L#[LBqvt;=v=&\9:R@ˎ3cD0Q.+ pܙNg)$3sH3BhN\q.ihuqIXJTpϓ)m*O,3hFϹT2 g ϤbeT]Ju}fnZ*]ϋҩDSx9(\ʞ/疫V/V3bx]62jWj8j=x=ߜޚoW%A S$_i6Wȃ+~z\kKF|yϓk,rs!'5SV+e^܍Z=b&/e=~AON"Klfm oKf۶_dShJƤZ5jԨy#Ht;h6MϴMݲ3hg~ Azw6=s}O@ 7ȫlC5q uIOh esw6c|9_Zς>除'F<$/}3䵛>/YEw􂳢߀F)'*(*yF5Dm}$YvgCK^%\Ūno&ܝIوr+6KugǪ 4Mg֪ I6gl8JuV;S. KRRt.NgJ<0}mx2,zvppL^ez!\-7;ήVZvRϯF沑^72WjiL{iu& : ݕzڠ?FL_oeגf+/w_kfȷIF+{'ΑwRךIw[)DtJ[ ]keg \3+F_3Щbp6;>m%3~_دï_`S]hJƤZ5jԨy@%}p:cD[Ifws|ySm,;]'Iwag+;F:qzz} pCͱy곁q}Fmyv3ϐnDE ^lЌQvҳ1j3.p+5HϨϞpƹЋj~ksR2S?eiZZX/J%81wKnqeVx+賸ΔXN}Cs6_,"y.TJB~?MO=/u9sv3Igg Y ]mm6:!=nf{9: Yg;pXW\lj$KE"Hϖ>ӜLtCsD}WmHI!@lU-$z`/kQc^_:S?]ѝ3eyȏ: Z*ψK6@ϲA{4*3ӌ-k톨ygwl3FgCBT.*KBn1;U,fk7@#ϹseLH:,w |^.Պzl{6Uk 캙,٫,yLy\7,$V0;+Q/ǯ5fC& ?~z-vٌhov2+8R/~Z#yLh'Pl< 7h޵&h;ECP - '`#8`vO@q/m؋>O3j]/QRg1i2 ըQFWnBHåD ofۻ~u_蹆w g)@75g@g{xyEynF}Z8#@!$tD9FM@UHy+mYs+cx$3Fy3.z@Si8 : -ʧS\.X̟*gʥ%8;U>stfU`qÆ^AtgʿҪ,IbthzIO^' X!3hHި',CshƀF#M1xz3×w}m_Ln;a6ޫuT;v;l灣5lXN=@#TGgi3}٠6gDCi-}0H!2"Zx*E*pH->bFىzjH i=8RMUx*Ӛ)7rz~dܸ!O: vxU P3tăv@Pi.wfٸl%\ ,Y3љk 4H RROTj44۶,cPu2٥4f)~n( $dg5D1 [HƤصftj=vyX;'fd8u~1oHuwDŽR7i1m~ܻ\բ+FdY Δtb`ӏU:wμ_>{< ըQh5jԨQf+kϯo~N=w3 G}@'~ֻ?}Γ}yͼn-~F>[i;v44y>>w? ǜI)qZ:,Ǚy7~ ϴvF;vz}:vj=4L>oRf۔-vW]uN#K&}[5#+FxY IkYZЙVcRjԨyF5jԨQ^qtI{)ذԶm ˼nGEPs;җ"7nY\߻킛y{9C{VLѝobWlҝu>mw汵AZ|džjĈ,Jj܌=F`59fƌhzvMh@\L#_J ,rgz&:P.3ƕ}4vycz;b yGh[޻kA`y$pgZUgovs&3,٘2v3{vf>ZA*K+ ;Ӳe-IZWy\]m4 kfzUKizj殘u#ɇ%XJWr.}.ϋ)uӐ31@;;g}+!͗ȗFꢞXZZ-{{6 R$_θUægvI y)l'b7l׊lx6zَlI3 ވOޞL$o4?_|KM{wV3&݌]iDfdEg}[#@tb}HN@⭷$w~m7a@Q jԨQFV;@ G#i7h;=N_4ɝyAww!Qe޹C߱]#v{v7Ew&I>,@Ϙ h|zc}y;5pAl+=>m.\Ńev34zrzf/8ݾ*&G`v@RzrĦg>We l3]0 P 7KSzN^10Y\Y 2Ga 73Yw}yߝJޙv'F_n<~%W4'_z3zYG."E=p?W ,róN5}CO?Q'_|_?˗sjބQF7h@QF5[/X&4o"=c/{VIgɝ\L~}]۵=; hWs&_LW<dA338;N:3]\Cz>ys{7I6=Ζ>gIEF}pg 4_$>,nXdc԰ؐŇذćxr_ί'[ڧGʩ8Y.w *.ٰٮIHqFzvk8VjBUf5=>,f}A̞5(ܝ:qLMgNaLi.[QɃuعP(`j}>U蹔;Wʟ+|5OcGIgj=jdLZlk FD\ u|3?  'Sn}VK_'pULhFnwbnN W[nyJmo7[v|y%dBNܻWN'&q!@ݶz3z7BkU=RN)@&h:/~W%3wꗿdSh5jԼAZ5jԨl}p|x,7+(b+ؕy۷7H;۽_̭{7`Fٓfޝ;Lڻ.oot> J6||$n8y@8s}n !ֶ f]0(EwnԆOIC'm}FYh @ 4L+hif|DZzԈ t.ߓ_χ̘%GM(+7ٍn}gȳ i>͎6%lvЗ]U`II(F^!岼jj=RJ̊˗ fڌ3zy2#ώ%w&Y:ci4c4C}ވI>v=[}P<#|>[z>Ml3*t<= N"@U3X3@)@'/I8L^$ۧa/ly@M>wkn P_'0<|-shوb/ 1M$d 0ӑݎݟNt"ۑ{3S;-g_{#.<.%nc䙄0}щ^oE5WXb~x.30kzj=g |oo$w^Լ9Z5o(VF5j2zρ''z艀ЇMoޏ[lvlk`/{ӝy[29Z腃ZKx>kw_ghaCgI'AgRapCh@KJ O}& h˝p-6lJ1iFbLO֒FlRMt["=ek1-#%>WhYgJ[̝y,ChՈiPh44h͘b%?_!sR>Vy?7;{tu&UfLC骍g L\)@gR!w]n^SϗV<Р/5h3[8g[mwaJ Io#$Θͼ;]W: ,uo2AxuvwߟgR?O~8]Yd3cR҇I^ݛNz,4y݉ߚߜݤKf`U]&NGCsd_3o{[CjިQF7h@QF5[-tЛ~|)u٪,dovN7+5Ζ,ܵAڹě]W 48vd葩{{v mBc${vp_]|,n_랏 GE}1q>~$xYZL30sr^G])4W{6 ?yFw ւCuRhдr4.z'V#2>S;%8 N$`*ݟ ?TT=x?~<p$jЎwt'vމ\k6BWzhh\o&׉4"C{O?Uwμ߹>MjԨyF5jԨQ 4 ?@߱ hr'"@Lb67ZZn -s7}Uf (ZRfKvҡG>#=>̫ 왨y.[pgL+*OL u ny>Wɜag&ΕE*;Llث6VQE+ h6lи8ԙ;3z|;[oc7qb| LnF[ne;b J+;Y'c:2 c&#_] @?J^g-f+c[L>e1hpg*z{2B _o64X} S/`5>sGBga!5oF5oȼ|_^jԨQF ߽ @OtЇNx-{nv인YL;@sqHZhguЄîrfcPgL #{<۷E4gc s,}iP}ZHϖ>}.zQzf4C5hϤh-=^ó$@gj8m]9 F>ɗJP#TW5w={60ݼ9=;w:K5\ 6Ru Bs;VD!$Kώ tv.;9[|[Ȗ\HřV\(Eϧag~Rt?Mo#܅㤳@k7V%;[^RlGa˳^0(9~ Y |Ÿ8ؑfw藰j-c$܆|X)Y LGGDD>=lv'GSQZ31§ Kgixs^!& ZD>pw2 } ^}08KLzZ7o%3={؇ԨQF5jԨQFf/_MI;vlopmқ Y,ݍ;}K6X{X33n>[{BTȳ y ўhO}kgW<ˌMy9hf}xЋ~௒2ݿA^+Yg4YY f7ډΎ9O:Ќ[ɫ&Vjp<N`Si ; m2M7 rtvͦs钘(3mG{FǟЯ>_/~[rg_NQF5jԨQFo{]{8v/7 G7h2$}g}@e4y&DufKޞ5ޝuҾ]}{v"@ @Ϩ5xn;70٭ϤZ׏[{I9T'nDhFgg{gQ9V6O@#'k'k=uszMW#y3h\džɫ=cLcCeRbӲfnegw;cHB`OV հQW 2*3VCKmzv|ҙlKZgYfV](~gag1v|Lj%-StEϰ^C8/Ӽ4|skFí+ZjHyCDg3vS$gz9yAM MquV#BO:mɃ}YۚVd ?t$y7Ne߸VBL)E%h6j{8GzPž7;jn+>]>]Xͧzgc=H؞:zɝ__ϩQF5jԨQFlĨY:0{6\2(b"(ImC;&獓 а|cW >}x_thw@wd6gѠta}Cz#6=k1 0nL 0 C3)5nf̄ӣzfȎQ37Vܙ^h,SPts^˙LljYj+{GZ|posA$χ$$H@C6@3q6hNT[*3IB8ZtbZ:L#_VSc: ?ղfnE~/(Dg4/֓JHZ̩仕JTEYhK_U2@8 7DqnGd2LG*Sfg 8@]M^-F\N@gllZgЅs9Nς>^gWu l kSfrL]⧞ɫԕ9} |YHI7FF3zimyƋezgQ'٥||Ig>2@K{2YG ї̆1[@{ȩɼGpnZ01 = ݛ oS&]8ݣom{[هԨQF5jԨQFo6ށ(Owlk[8>&K@gG ];v.bf ݽIڻKy{4IθC Ll`Kt{cZ vv=ēA ?\;q:Z#g љz<Tc&nhO=ÓL^p 7C CEGjz|4I#zj2QfF4db 'pIEyQEf(_ {+Z5T_/a} x>>f`a є#uύhUR=^1e3V"zfLw:&\s;R:*XswƓ.nNj^U'S%Tď9Ϧ+$0,a ;ۉCϖ\i^0|a)ѧ yRt!w&=SȝŊYҹR>[_fϗARb)R2J5/TS5#wUkip}\u`WkZrL.Ւz멫8ߨ%oR7khu8|Z 6Z11vҹAjFo4"7vN;v׌Z#3yfi< uٳ?zE~4}4jޟݝ tZb.yb6~|2~Z1ɝy 5jԨQF5jԨ>WdztB>}߭K*@h{MLvg+O}6,[IF}qݳ/ļh[ kE}Ff 7dF}5Ж>@MZd>'FPisqzyfyt>&7:WpXJxǜ GK ϘjéϤ64Hx4gt ֪ IefǟѠ Gm9gl43L+.}Czjf.Vӫz[3e#Cd} G5hljnܨnSygg o6ͨCNB8݌iF,os>pt&mpyAӾBKy^xqdUaz8>? a ͦzw>Azb1Я4/k5 y>F5jԨQF5j ;>6qDow N:=8$.[3$@sDޱmВ;d-`ݴ&t|3h4hvu4h O"Ϭ ;3gа|â! Ђ>@`'Q@[\>oH<СAnȠIAA3>T ЌwyΝKo_|:hhB@+tBs'|MN}fh65{3Уe#j]<6bfLk%NFo$*XɌR#V-_87ZpY@g醍xnTu*]F};Cřd4*DqA}^Vagv٠Yg|T>=> gEtȺ=Z䖫e=sQ.k5jVjzEˬٕj&ЍU3}\6җ%}Lʮ ]3 @[{6nbĽN=oR1z-xs&فajLϐ_ˋY\]?AL!4YgBBAߧ+8Ln4uslM`|\T3[_"3w45jԨQF5jԨJ烑.ᘿrq3Otgގk|7>Kg1\u@,qѳp/}&, hO]AHb}nD}>>v=WRz=%|sYp!.}KȠ4y!z% ,5fDvAкEq}^6 7Bhkݳ [8;\UkpT I|1cP#cZ;eHT2skvB3&3f=,32(pѳx wgAK|0O^ŅT7KH <ϋy<,勧r$zyzݙ=__(>_d/T/#G_kfnȱF[3+Fz;gLnXf#jn7cwq]]%5"[mRN===W6aM8?&95ATGϦ{:M~9t&mq͓.w<ГVVb^҇r} sS×*dO^oaRF5jԨQF5yYzsȲ3v"I̓ܙZUU8o_ę zvFz \%zƸ>V5[A< h%FtM6>{\4g(ΰy [gqAaՆ=c}&qȗZMϠ®J.mA8yƹȷd}U/`5$GKh$ĪqbFr],O&97O,(mC|sj.Uy1];8;ϧ=3wz|;_ή<[JVznŀkϗܺ_7jzbQw`FF-gԳsnn}[(y&>ăvvovчȃvAGg7fGǓIIϻd`:h&|& M~탙gπſn͆NM~z!hc>\8_:W?ӋߖͶm_|>F5jԨQF5j׳9@e;2KA[˛g=yf-y&!@֌|dt@$,}ܢEz8>ӳ@s)}mz![)@K,slN.ܰnFlzNScUљ' \~h4.(ZwnP}f]gֶ q6ybU8Lάh9Rh8E>qJ8N:>$i@ g綍|*.3E|)=Gr9r,ܠ;7Ԡ3+53WԚ^7Kzf|i.u#^蹖VK]z .d\Kl$pɆ1{Æ4ذAW<7DZ{NA;k+Fܚ&O&CdwϦBSg!S*΀KRϧϧM(y&lz6|6ـw3ؒ>Axz?< >zvw5q>~c]:]_HOU|_w$w~~5jԨQF5jԨ7@owc}ޡx/[%P~>C;Mnb ;[vn`%oq>LO:#= ,sv&@K> QGAN};@uGhϽ`Fms3]LXlG\0X}'-m zLh4hz 3(+ֆ Pjh#謅auh# ж>C;7vhZ'8=H$k}lU23+^NIaê<*=-iIg1Nb yw} :nP}Lς>/yz`B%G"pΊ aFfEO:\37 ie#uL]86?S'/^?;|_ϩQF5jԨQF7`=:;<JlWpo۱œܙ'35;Lyg$A@s}lP>vqt&q9=[{4$F}:@hdF}M>@[ R}9>ҠIЖ>@#=>H@K,0ѠA x*I 8KQfhx'Rk4FpCV&auf )yǢXe g=k /t+8 @ ڍByv={3hY=>_( >3^.é ,h ;7P̪kZ[36&]!uâg#ɏߪC;Ľv^'zjԉޛ>] \$bx\g@tp`:Q l/-3~}$M> z&3/2+Qhh4S~q9q3Q Oq/_f6ɝo}N5jԨQF5jԼ9@ &rp|`#V6o q3{{[ڰ۱sgk4; ]Vc{v75>K-􁽵$;j-}Io8ƎjijxفG[Ag 4d/ߠ6NxAJ&߿A]G}5-h6Iς>K'pr7oܠIp͠#O@g'Lx7Pa$' ^1IF*g5Q$@&z4;L: F^9(a VmyBFҌVVL#z;NH4)U7zJi1g ;y4E^%fgxa*Q3v -f3sk~2~ 9i?y}>`:| ^ѤOOOfM EpFeL<漕J]?N@KLrӳ賴$Z'GZ@Iz>AMA=S}kP捍Y|h{FWg@"& ;/}F.4Q@J"$=ȳhAQ_ > mЭX+wR:Z3Qmzdt>.q}vqt34 Zgy(ttJhΎ]Ϩ.9o4$Bl>6$x.ΕٳJ\9w=OKZ˭V3(]1r]0myX'p?x٭bvN=~+zOpgϝ؃=L^E['73' g'mӶ|:Asw3tY΄WO~> x&}'Xs!N˞ }0. |̉$V'=wμY^fRF5jԨQF5oҼ>~Kb-ͮw<۳1@m AŃ6 7Wh8{WppzPxԚ=Bz&Y99Io$;,3ghv٩МEqhgLrgLYM袟4ߨ h4h"@ǟ]ǟmv Т>K}7llhЭxe27 1dVƝb3TezNWf9*mޠ_Τ g<7'3ϧEX  gp y8 |HoJ9>-r^ù l5clt l`}< F5jԨQF5jް{g{H,'P/y[g wCɛ%}-Л3&3ixK:@Swǟ䙼c_3g}&JU 08@kAX#=P Up3 =ge":JV[)\;Q$)+8g\<ԦUϕfvg!עsp@T9@ϧ \gsLx6W8 stbV ;_΋*\-\Ԋ ًj%Vɯ3KɵJT2+gjr]\1ju-I)53sH]{u3~6 85g4hm8gf 7OǞğ-.$NtsI'4٥϶;N>ZRr\TgSf`G{sa%v1|=pѫD>Zi`-\x><'SYى't&o7FoֆoPX;_;=:28Z}[oIs_5jԨQF5jԨyfs;c@;4oОܭ,$wY' igw3ngh·\,GH=i,ҳSAб7hNv}Y3d3dQl:=Z'YLgh'=Vlm !s-!7Θ[úHg r+Ub gBdSCg Il0̑fSmP&-d Bƺc0[XNS}Գgp٢Y͹3;7hB%Q/ZxY+\ȧVKf[+-}&e zMKAԥjz]Oygj$IZ;+zBu,73f9j_0H > ϶;?l;zԉOF͐&5?w< bO:f,ƟLO0>=4y= 1^onߎ'}l5 =D[C3=2tBϙ̱ı kxmɝl>F5jԨQF5jGǺ;:K7He3}>ܠЇ41g_,y>qN:yqw&HG鰳>;gEϴuEݹ=;ӳВ;8=Ki<\>lz9˖> gO}ugr@iCjZJ"$#4aHϺsGggˠmvuU;  ЌixٌNkӵpl+`L#ϰOm,Lh8,̧tf%8 m?g иl>泂>rgO}l_.K+Zr){_KRΖ>IԚgسqH^1󺖸ůzH^7Sfo\0 {6sӌkưp ݣ;7 ZQ=wB[۰p)\B:LtY|ht}5Yԇ3f&>&ĂiQuI{'}lӜ(y9AG'i6L;z>9A4`tf)8}5v1zKO@+~_;c~}N5jԨQF5jԼ;x|@±r)g6:ov}֪ @g\9xhO;Ş7#LYhN\{DzPŸ8#:6d~<~=~5vGAN $Q%t:995\-fl3y::( ~ՠM=`j~Yh9hyzfg ݎ{Ԋi}zԈ'tRmt@I$}REѝٞta>KR&G:͓Ngg( gstv3{&RbVELZ.gW*Zr9IW ˥rf^TMSz&)g+Jt:y'":)zno780٩[: .܊mیޡ;76۳A%tB<yCC'SgSg~ξS}bh|{:5|j߇ޒ$w/OI}:̳9>G_]3 gm'8@mނ+= GRG@|ů$w~;_sjԨQF5jԨQMMthVh -fw"4]vU߳[AڷEڽDŽ[1&}`xYh~>g[-ϔ-cO;g]<z<|882y M^ǞL|TÅ }ьq(:X,&}r?(-=cwC|lz'@z{f@˗{bSF5jԨQF5o| v@vG>m$Iܼn',@qGﮓpᆸvȞ&>#[<[uϤMI9@!k㳰vd ZY'[#Ml/٠YG羦I7њݡ>sIaVtL@6Hy|t'+DyҺxp*A;'ńSώUg"ARA\!f3yɚNeA(_gOs|L>dh+gs;:rIJ)R̐ʹK<<rz]+J%}w~oZ-ϗ`3әO}I0x}g|z&Yҿ'5gSO&wFG5oo՞J߅‰#9"3⭷O؇ԨQF5jԨQF͛= yzv?2qؖVpl>$w>޿g ź ;ڙL-7h>'Dq@vl@ê ضA >;Vmp`|Nf[%̎<9^-e9>g*Uo0:uȭK>[ů|Hp}n& /DݪGi.}Yh<=wn-3v`jyٝ>XdɼO|\A4ƾx{gL|03lz @^(Twμ_>F5jԨQF5jн8;|"t7z??Vz=J{]n >Cs hK}@toNhluz5ҎB>4,K7hAQ9@S}f8o4}v}pޙٹYh0hוOvg^v 4gh|؂>@,ي3 ]Qz3}&]ϛ{K$v gb:;c2lw*W`Y6|%[34fRzZ-/i5-RITkZg-3t/DFz Z\m o>%&IlѳST94'G Rj$c y:;nM[~#rgz.u<4_!Dޱ@2#:m|v}g%q܉W' ;ȳ7=6Y*MiI]=3^HT.Z9<Og6:O ms$\6hѳb~K3$RJS캞TMU*iֵ$-uVm0z ']7׀cH˛Zyw$}"=Gaң6ZP ot,?= 3!I)3fgI G}-[)/>{<h6+1}:7 >' ?a>chО:H]v^03|z)lo];Iө h;:~QF5jԨQF?gϡMZ2-&Yg[hip6^6qߠ@϶>٩6@>s9"!@g>i;c\ձ ghghOg瞖g poAIzF"&>bCM^}/w=;(=[ r}}ƤMp`w}6pE2@ b@YhmCpgYE}<愓prdʓ5Zg$,|m3i]6(BB>w_E}N^5u48.}UݪInzۈ EHύFA3y?na Zd ГSn#fj._4jbޣϻ>#-z*Owzh=3TM> -<(=3tzAG4nh=k cg3߾[oIv!5jԨQF5jԨQ3G{"'}#{#{vNrP渼q"1oܦL)@ǟA-SEvs& <Ԃ:s{p3CmX=~Mi^kqz:2Ќ Ѡ%tDzZlb Z #mq3Yl$YʋI 4udÝU|ӝ>o۱J'VƸ8Stv3>ftM%t4 >--g1ٱg'3V-J1Grz@/UYe<$/Wu-}Et;Lx:rO:c7kZtAϲ>o;"=COZ<3a:l*U=)3g>LpDdfUhҬ[IraY1oO~2sc{󾟝 ÙO,uC4;q۵+pgxlЙԡEOJ~o-3~}N5jԨQF5jٽd5~b$r| @nir ϩ C`o ;:KiGژ[6hܿ1q4Ӟ8YD}-3hgT@c(9>܊7E}<=^Ð1Ju4sn,LԄtǍ򄛞Y &43| 3&3ֈ~C3,4sy&U%9=o \1gk΅da vnl,}.N|i)_' m@עjt۵:{f]!f>l afViOkOy6x秝StZh*T#@ ]⌹ܙ̄LL?}D@j1{}6K~,~0A%|g [4h¯LćcZ%wx8:?'Yzɝ1>.5jԨQF5jԨovm,e޳ ͭX7>ϝZC-{E&>o Т>wh#4׳@S}s4g#}NՓfjszqt&9?Q>}fe,12j4{Kct3 ׀5^ =y1_tyf|*U$l:W\̗H:{:!>;> Z̭@c{jg7@>[7 ֢wjLV-rAS`3? #,~)z>瓡Ӗy'`|=?@k'>}<%#oz~œ]6-:?A~/fFIc?[la0O@8@1}E?%K.A;[l1pf н6@gN _oג;c/~_}N5jԨQF5jͷW ڥНv{np=cM$qg_>!ga@nzx2=۫\6xý7eUF :ыYFH7IfHq#3s#ӴF^6dJĪm;OǡDe2UJ3ΐy.UO`3\4.-JRAjzR*OUZbj?˳-ϴ3¹ y/峰v#;͞yl|.KVm e33ha0b z+Jf]f/V3+ rY glP8L"U=љnވ@kM3шlDI[ukF3vdzk7Aع~ڎcO:AvM>w|OZgmnLgaȳxG;O|4;DK).Rόdvc> /}ӹicM?b~ v_,~4/?bAO?Yd0ɂ Gs̎>{:3drA{nsvv8q.{Lbp{HxK!5jԨQF5jԨQg8 W_=:~2%!7f-3w4RGϛ4yK}1@ho@ __s1N>stQ1@;پrVm`"78Wk4] gA { ,tovs7f/ڪ*3tZrgI3IJV'zkN!1Csɢu么MZL%>@SVх,h,Ag3乐?ML>X<_*˓o> m}Qz@VH^ Bgɫz⺙" }WpPi:FGk7!CŃ>cӶ\!g̥p dzc0X٣YBJ:i_:ZwШϼ?[g}-'yayfl 臭8 }rx/K'qըQF5jԨQ/lu$^0H11@sq\K6س y>^A&A[h4h-4Ox"@>[=vF"gܝÃj#2硆E@3}hnQ(5R#F@gGMm.}τЁh<\ `!PtU4O&"UAeVmxt;nāeNTIx:M'kWFh}SR,bqq ߢ睩AwNgK"Bt.s*>.+r\ѳ@ MJ1ównkgnƨ>=>ki/}UW 끮݀5=vt0#7LxusVVp z>INI'򔼶#NI)'zOH^6>>k^{m$w@SqħKh/L|0\B{M;yN@;=/k5 y>F5jԨQF5jlO {7;br]mG=8[w /]|`O<$t>D}fg;.σGc-6Dw=PG{ژ%牞4wvo|5Ht gϞHgXLJ<<򌧞1$fg7@szfjy?3D٪ V%P` ٯW33gl4lFzn4y ;uϝD,NMºATVm 4 v=ta)[:+/ei!MsY%9NNg2Mf3ٜ=LOgrs܅Rb\*,5ER {&lӳ˝*i*y=#=k+Zz]K B}]ωF↞n0z?Gn3| ۟3{nDWGC~0~L~>iuHO'msOAw`3f3rG֮g0N\,4ngAw+-Đsy񟲟͏u.z$w}4ޭ>]%}FOI0 c-~8;|zhegt|NWH]:>F5jԨQF5j;h$dwy31=8IwnHILw@,t"Y 2z.,3tk&⣳yFfMCz I3g >>zv.7ȏ5+d3/?^'lezbV sȬJ` [Ͱm}YIZ-  Т>z;N< @[ggSe/wvzN;)"=;9[\Ngٚ| U|6gl]0FA,3Ks+Eg(hg334ѹj ®8nP}6$q m !@;fN;8 1z;•pޙ}m\3v~ B$g3|t{~nqr]^:>:9?}ɋޒ#CjԨQF5jԨQ|@82oԞWj6 8sq`;yS>צgv̙@[|p̉b;cT@g>#ς>$Xogdgtڷ _OD8=s}S%zHε1>cpΎ7I:^6N܄{6|jxƝn-}7o6ZXG:gjmV9HkUV@g3&^6h3ҳ[Ff-AclFnagݸM>>߯G֣pagf>?j4=+ij۶19>}49A8qй@shk,< ډ͍x(Izۇ?dOz'FSc-qG#L<~:9=tKJ8t_@oKo/ԨQF5jԨQF͟xջcC'CGz##1'5m+ogGns󡝐&g En>Sqk,qn]6(6P:"ѳw>ǟ%}Inzfy@\Atghgh^w=@}Ɩ;oиpr4t`M> u^z =cs.8왨ϝ и٪9$*n.-@s}=R:Kw Mw=p\\.vfri<|>Hq}^)Et'Jir9c]WNr%͸6خg\qIW$|=CqvaobMm3| }~Ј>Gg'pٺxzb}u ;AMH|̝y3#3h逳[ȯvlY?j\E\ro"@tqjܣ/>;5O'6@?yzWi-8>=缂_W#3_`SF5jԨQF54g\;8Stns @ ,%C-M3fwf+@;>wh'@h"=sh@gy`jytnQ3Ej:4+1IUJ FTǚ557h>kt$s6 0MBmzIB^A,3,ְ;;狧 ť<@Fz>+ gY_0.ت5Ab&Yh>;_@.}N>}`ob zN#vG|P>G7b#T.H']N&IhpYB-wȗN^A;UԠ+jրwΠ8êJ2\MWd<\֩;[AWu˝u+zsaFoFw :1wk{ZA-z ?$?ݫGǭģfa#T=jifnI'=]@ϸ=O?<>`j >ObӾOg|@w;[ }1 [h .RǶ%Co9QOFKϖI?_lafO>|253psC?\);?/˗ٶMrgo?gSF5jԨQF5)}Q`|^BxlvI:{%>Myg쳥lxޙthkc> @S'>-zvg1~yc Jyt%Pp !lfK@kAK)@As}ƨ>ag >-vn"@ A mЅU6hlpƓ@PP}&#@2<< Qhk. 2zVвg-u-qMNjgAdq~Pv,O狞 8<'3Zg˅$4IDATɗq_V߽FM/Org[o?jԨQF5jԨQ|'Ւ<[:@sn"@F>O6/ߐ/?oe}M^EF{ q'@[ρ>@C`=LJ[Dϯ\aD$sE7ox4g4XQtb6@M< $ЙGڱch*(4hDT+]@[+8Шϧ>ӝs?,4f@ŴpsfQ]ϒ> D ?_דם|L07 tӌ2 >߭IkN.rq+zK#gA+''mn$ǟ?xz⣙gwfzv^6]CLئ}9/0&7N</Ǥ^;@03lz'ֵRIrg޿,/QF5jԨQFnzWswOϞ|p=6@K͉YLh{;g}m4h7=Z,4r[44G7>{U1'=cCYh7MX4}Ftﳧ>@ƌtg4w"@Ϙ>4IrֈVVhՠG=wd3ggpLQy>Y&z.]MYb&GbىVy8L ,sw}v; Y9@;=[ lm|ƥpYgЖ>@To[GQ֢n}~؈ޯ݃^6؂OZg@{3{fY,l|N:S}>ö/ vt#@gG~,pMrEØ8nڗ֒/G~?[ }6?gNpJr+@μߕF5jԨQF5j"gs;9@K @¸,s\L 3h4hϘNh(:w{H+1Jς>7A)@{"=>z>S +[91K6I"@3gRn6hAy\)@RxIZ3ZfY %4=@KLڭ$hdi6i3g UM~͠}9]XLopг˅Zbh}FzR)nggIV!Q-MF3 Y N~-zԌy⭷$w}H5jԨQF5j%7nJ;y{vn76hn;T@cHϘKNp}>y9;l;P-MnM^7;,@z%MaQ<Zx>>&jB =Z0LC>o 6=kfJ^>[{ÚHϲ>CKmCZN4zƺz<).<ع 8 }Jhjé: w rn&֪ ~ޙs)*f.<ϗJY˥ 7=zU] g=~K׍ 3n@ϺjfL]M2}vti!UO1Ajv=Ϩ;K!=KL4\o@^g/IgǮgŒ%v䙖^)VKKyS=_*IA>Wts;_ȃϷM#!szkFL3zz =ngo}Ϣ>[WzǓ㟀;}yfӾϭ?e 7N:ê l6˾iE}_GqqTodʛ3 1i)3e 2~_دï_`SF5jԨQF5;v{wGC@>hѠЖ>7K@>oШLDhO}Uck@KKouhh[Lٱ#T#I ma!@W s$͓TJ^;Tltq&Y-sq!|*4;,3Nf,ً%bZʮg'@z QmάW nlзQm#&a-Jz`F sA=z[:m84[q@?dr;@<=(. yϭ9@>όtfE̬ { St0I="-YgsCGRz8q<~U郱%w~;_sjԨQF5jԨQ/w@[8{f,{&I5Ld랹;ț< c;GŃCvzuz5Ipon|QwϤmFNtmDOg.!=[Ͳ<ӽ!ߊ i$AX+>T h#=eZ>[k7H hFLѹ`僵 f9X!4*!T 7@cP #h3F-jtgAQpW?['lZs'^m%*$͓typt\6da!#Y as*t|+Llp.;{0);9`˶;9obKZ2؜s9<;3 BD qHO(I,qwgV~iUWWWWa >@dc'  L:s|b0٘;5rù6 3ط/7 J;_a\fX[pa/\˙qhkx}4 d6}i$ 9mν9xYD 9͸ִ#ǐ.NUvd]ڒ9xIQ5dr4c3ЧdzNg8>~t(@i5' z[@xK9g[oQ( BP( s'ھGtnDl~tBqlRiBjEJVmnQ+L-# h}8 hHg-у\@zNp*ygānNO}>KE̷S4z}]C\@)ϓ3Cf hL@ 8v7e7U :- hnZjw3o}}R@s mzWG⥎:ʤY<>߀g$>;z>1njC@;?M>OO>;{f,gFXKAg3統? oe1hkYG3 N#ٖwq,xk3?Y& h S'3?O2̹ߡniﮟlk,I@Ku ha w.W*fYSжRW՟+:*ml "R}k궑A=z暖-5N3ճZBD&Ά>3L@ KpR,zAA@s,1iy<^vGgݎ5wf깭J9Q1>Anu-WuZT-~>t?ږS%R_ۜ. >fR7GL*YҸh)Oe # m1Zw;( BP( Ba-E|28;EQ I6g u18g0Jk=sd %qW|NԳL@gL="rϬw^_}w8L@OvY&Ef\!w .JlEV qswV*R $o8ԳD@OQ@깪gqghcح̖{fZS2 fZ̑g&w 57swUj۫vcˌ30U=W>&g=sI-#.gg {9w.O==sz$0`-Ϲz&;6γ6z>gZ oo~cЛ+~5~{[3MOև>ZQӯ7OauL:\( BP( BaA=2*Ug:6#"b~PvbA'ZjSNzL@;-9ɓӟ0 Uj_68.ah 3ǩ}cseY* $Zbe\]@s}T],PVް Rd>n*ۤyXAf+Xy.Yil2>s,ώ)ύ4qoLQ g*s/wfk}R%ڪ <^5;*8ls;"R,Μw}3[at} }ߠ>=%yR@f+<_xl0`86w|!zC)Ϝ'Y yr 8s 3&4ͽ0ç<_͹4}q 7Ƴ/l;/J4<Ny},1 ^ np{a4Xk[nr| ^2vt|ub:t-7O8f@st'a5n5gß 9|X&EkoDP( BP(=7$CBBXH?'Ogk"N0,L։}C=3r./L=0%ezxm\@wNYolE4l-2/O磊>39&Wgۜqfsi&Ng:.bw[coz)0 追YYQ( BP( 2[,C;J9 @&Ź\@s,Y"} ,>;4StJ/MI>3=>dtsJ3)2]?3g}v&vh[}~]M6 fjH΢n,;]f+>OaR@wJ}*+EZ+[erlxes k 3e8?`R= Y&kZ|[5ۘ~zGkζ]>wZyb8hpYvl,Yy}U,_'3 658za4X4nW޸aDhKv[gεC@H>җt'agB@w.Ϟ-Μ?,_+v BP( BL-e~Y422 #D">a't>g|Tݗ {Μ>ApD\&r-ggA;)9}I@stC>[C:K&'3^0E@wu_*`e!QhMv&KXhc vqvMR<Ά7-ӟ i趚m>nVzW}gn iӟE-L@R z}^} #gNJ=#g6eKxp[3 C= ^ƉO2A=Q( BP( 2%7$SƣBeK9qgPDN!"> ˉ$6^)%:a'&F0⧪g>3#IKII q=7Г/'Гnq})9ӽsAr@Z7+>Dlϙr\-R#R-R]0jsy=yy]ynP_]oj̛n6Myq |84s%6k}t'Wy*kVUUj+m.kAeY[oy+󤀮hR͘SWB3p|$MCՍ5M#c5͛k6mix]3\׼ism#eXZp}}ak}ֆm 46>Xc8Y\@so&;O~d: Jg.w4>RlQ:?RLkͳϵV1ZV=R vJ;I;[*wVھ|w[xvlK}Z*X|ξm[5t[=E vpr^)rx#}L@G} AF=1wsr gb WZE-sJ(pt]@˼3gnkFkk(f(FA=sna[Ѝ56\C@7֋ 铠+>Yv}v ;Z*_ hY-3NT32|Pr ;f=KW>.>95(Ϝ3C|f8psl;<[[f?gvH[u f=33D-K3ܛ3ϏM=;zf8PQ4{;_ ?ʼ3Y{BP( BP(NRW@%"|I Y*E, hz3w"2-=\@eg84#'~Pй#+aY2Yhٚݥi=n;=>KHA$kjszt;˵.z[͑f8Pnpg9>K>O)/nik_e@uW 辊Q@K5T@(+[}@}iRσ9l z(P AcYPɼ0d~W:;!,awؗ Lӵ|fU hS\ܜqas :~og( }62z?KpTE{^{# BP( BPh}fHԳh+OL@HI@K>of>Z$.A }"y/!tjqF!n@tТI@'us^;)="%")e=n;tE LwW-g&n{5tˌv[:9V)}`y=i+> tup] o8"-R-(/$lٱ2FƪS8-_gC &qu o~d,sТ,aO4n9Km<\yIgN*f}ZrΎ*wUj+v!|3s/uYM hq FW)Zf@](/}M.p0>>[#ƴ\=瀉Auzqv8HӃg2Pc9Khk^!31M~RSSQ3p"Y͖K[3.a+essc%8bg -QCf_BiWdY( BP( B17[@3Ǚ}H>]C@54T,eR@KLZ fC YD0l4tVlV\]F3A&HKHtQc:ҔIf,[\Z=e ng&snȵ^]@7`_Q@K$1S6! 0Ƥ!c5{8| >ˉM‘כ%8VnLCZt\@%w%"i6W(NqwED-sY6.jm@T5VAAC[y]uyVq=hNC Y݂NNsu X[ :@|ζvQYw [V(ausWIGМ2ԴJZK[{{J[J[_6)jh˛}#Mv-aǪxM#0D Y+yk]õmu{Vz;7>P#"q(WKyZO4V>Tjzn3M؝DX[fEkbloTBZʁ(9e;vw2Kw8(}ŎbFgV;/ut./[耭P}!A=ғ}Ѿܣ}9rݟNed GXsΙ\`=yvP\y#k3A="RVtt-u}ۊȚӑ ym<2EL9f0v~,hڙCɧROڟt7-noGm1;" y&EO|:uy,w)6ވBP( BP(k(eћz#{Ù:!pB=>KVf>Z"#3 D@K.bc{WY{g}N쒑dLX/┞T_EXŽA9L蠫@úSű;<+WbAJCAWc^'G*YM~A R&Zڊ;@G";3 z.JzK hFY3[˙ӟ=R8RiѪƑ0jw 95uRYZ99!nKm֚Z.1]h}5jhTqoz h'+9\@saJL@?Tyg9ۛ+73 RB }KD$xw{л;wwM =}vh/[ _*`WCݓz Vy7po.HoQЗ9Ǽlp/T:@tӃyO 39g:3i|6$k: ! .47?noYhkNK2 .mθ07g՟ϏMey8yb0ib0@ʫ}IzbGn~1j6=RZ!z2]w}x劽BP( BP(ȭQ@ܽ~uL@32Zta="DOIeDwsczRdc{f:'+ȽsvU4(s sТ.L)Jr  %styzS]3M@3#. h hƼ6NSA;h.淂6^. .; ۀ6(rьGTZlݥ}-i-ir =A iq}HUPu=wvܰ~sUxu-\S'Y);h{vKMC@ncYvHm5p8h.wO2<)!nD9Ano);ZKwZ-ujhq wu1D@,vog`;v8hq+\pؖ'r[fHtΫـ;hE}7 0, h謓\@Ba0i\AL9= &Qqz01~vNH]X)0YT@;H;?:v>3" Vl$ ᾜ0[;2,ru+pw/_8h;J>=tj 8Љ{titij 2/Q( BP( rܐN:<(c8Zf E3,r@Ɓn؛L bǬ C:3:1/17)$GrR"Q}SI8Ȉf&tId%2l>Kg@3%Rl)N%iBizgij(K Cۗ噶tUdvr**ZUmmTKiZ9ºֆ"l9%55-Vh/mvvZEB4`X ::&Zڬ-֢I%&HIAS]SS(oh F+*+ UUVUׁZ0Z]3VUHm5gfQLoR]tZ]*GmGռpmVG]@׉pDC--vPTCœO֗YmAg}ּ}+e[ݹ/rt偃6ls<ݹsruy;Hwj7>ڛ}7DǺ32dK?Ƕi'Od21ݛ=r&BYE<=zf0M4ϣ0Cg"Ye:α%%Jz0aj/ ]4dP"F2/d大qq$Hh1'utHt=Ɯhƥ AdOQ4hLAhQa<3Ci&R'NN>ҕt=fOK#ր {A ˇW>0P9S*;v BP( B\W _TVU]89zG"S4^A"@dHWDpWƮM=NddNTH7'F@TY$>ٕiKѶNrTԴDuDsERc:vHVNFRGfΜD;"R:E R:tv f8$Sa'8M$uNlt,͉–lU59vr;g 嵃IrZ@cnkS^[s~@EMKc^ mm||*$&f΢0c+i)j77a)n%M}3J9eM`Qan:C~~Q7R^ FFG+*ʺ-u㕵cUDʚZvsUHM=uLRSe U[j+U9(o\[*ǡmuU꫷Ul/PHCƊGe4?XXc x TDSyQy&l˞n.(eLKx֒[Ki-϶>RM)AP (ytg;c[6Pb[KE{ v(ב3ߙ^ߚߚ-rW[9؝};@wC6Ym#Y ެc=YY9S X_qfYh_걾}i{N0+~7d_dpj 3a'@gm N'dp? K>ݗ8џxz P™3l+`9& dD)OpḏšK CF2OȅċPf$^I:¹u΅#N0 esI熓Oş=5wj D챾W{ۢvFjtcؓO?\\O ?['Μ˳f7( BP( B\M@qeБ!C3G"o4 o k&";E"C"!RbB;̈ `4t7#f`q$w%F0"l 9NJtOjL XHgptgŠ3cEu9= ] 6;+ d'1rm O ?e 4HazHQU8K$*R%R l"5s+U9=}3av79zfu8E*%>!p544悖Vf\RV": AgQT Z$J5cz`+lEv8=%ҦR9 N9hFPypfVԁ1&k+jF*jF+jE+ʺ-[*jVւ+krNU%xj*TW` WW2j*-OԕIyqnmSu:LgӒlss-[of\5\3϶@+ ϵϷhV|k/l-V==—:.:_c@!W ooWޮ콶}]lz+e0o;@7sև@w=9=Y@6xq?(+dO:~t ]PiXic3Nd `~b(P꩑4(sR89iӥN? i#v&FSO&OG0sf8G0Wsz4sf$HtΎM?;8#2vz&ƜsfLHYcc#LJ':xd0@⡁cwi\]SaWn-[IʟsseY7P( BP( #dF' ʔ캜64\4@aٍ"7tGbCmQ{/Jh1RbCD39I`t%F@Rw$1%%TbHQkJdGjL.;(G[3b86֬.x'+ɚ8In)lOOiR*VktJItwd5eNR>P @MH{m5ijneIijnB\fFnSsnsK^6淴4OҞ(#I#; Ǝ֢z^^!hb-k@~:FymwYMOyʪ{ʫz+A_e@E5 TʁP5P%czjrjseՖ-`keUV]!eԔj+NxVzI;OV>UW -JuEEO6j,x#jhgsL=pv4<ߔ9כ|[VhܟtYПtG>8ߟ.[t?Ihco6xns9?S OTmR,OWl6tOQ( BP( \@oNNM6" /˽3;<%<5"=|5r5rCgMp6ZwiĄtp3c8qvN@RDGXXyӖb 3CV) m +d'd'`В [Z $&2 [DRZ9$C 9e-9MЬ< T3*3*3AUVKMfKmV+nngYzv!)NcV[S6C\ v[EZs$ֶ)M1)4練:hifsy VgA=N7N_A:Fºz0X蠨~a ڑڱ1lKkxI@XixY՜-Tmls@%漭iѓy̖q;X_8!-*._!DTp?-ҟֆ`L r'-Ȁ`8!;cgpt&;8;s930v(n:gc ǝ#qgFΎ?˖Δ3#"#FO?j_ܑ޸=qbwD-fgcsuaՆ=]lSU?_5K9NM7P( BP( F\@_c .gY3U@DFn]>ڰ uaՅY끴&t}#:< #|Cc5#jkA&FLp`2bCbCk9qaIY7Ĩ䨆Ԩ(MIOwS cD232cqvjAmV|3rd&6&6$րܤZX /Z`RNaj P9(N-/V(r)(I/QYQQ)ϨeeUgVTdUVd*J3eS,.TLRS֐ƜҫӔ[֔m@is^ 8yy%-A[~I[A1h-wAGaIgÚ_ҕ[lctޫPPWXWXG-/¶hxN`Q`qtKrJr%gfH.䌔g9u0V.c2c[9c[+SL]3IgDKy>QdkLx1|C /$hdДBSŽXl_hJjNݜ Mq;^h9fwK̮]M(Gy5R[܋Z8[^l$iM-mێm޶={:b-j^L0YyO> yϜ}Θ}VRukGLB,9K1/vn%͑7E>t]5![BFC7 >Л{-/D追ٳeޙu>rގBP( BP(Ɍj_B41/#:qs@WƦ]lK Zfҵ˖)KAK׊, S`S.$e VK+p-]%GVr-J Ί 넠UI=c Boˀ`qiv:akW._|WL`U"+:JJ ֬ Zkţ[^X# 횠5k1+ZzՒիRڥVvUe+WbjJ< +T\|Xb\>'w4Xj*V Fc8jD+Ws}|SvWX VXzeU+^nrՊU`5ۢxV/_VI5W^rrVY$mc5"SN]bvvְ[ZzOڕ+Xv-gQsŲwSkWݕ|w9_ ܹzŝ+Y<]݅~؅VݹR`U`-F`]֠5w`);Y?w\a^9V 㷳ܵB^ܹr% -E ;[r׊fY3;Ex"w̝+V( v5 ;/ ZdŁ-Zx…K. tsSٳSw(Μ~xBP( BP(7 𘼨ؤi:qKLt3_#"l0`I|gL z/~ZRtW?h ^k'ٍG6I^v/)h0܍&w:Nj_vހyʼ3wFyގBP( BP(s hGLbq\j9_# %Ø}>:<5*'bSצk\n??__?A=g~Pppr8nen:a!$&or=Hw[H$~tf057q&YK (Dܕb#ṉH'2SY#|#ⵤ|fo>x{JXܘ}SSeޙsy֬9|ވBP( BP(*#C}f+>o ` ml{eK{z]/2,;vQ( BP( rrczڗr,lMM]6^b~J diݺU&ElF BP( BܜTg fo  yeSf SͧN@2,\{# BP( BPnZn M]lqYK5cGžt h?ooyy,wq:{# BP( BPnfnvL mX߸re|/w? >{n& >4 z{П(wR)Μ~x劽BP( BP(737$36džG57CFo&}g>s6vlx0h>>^zy{xz|=$5s' "X,( efjɒ ވf\=sF3@=5ݻw7H>|2>P( BP( &gf_TR^]W܊U@wnh{Ul ooOO>{y{bsT⓼|?f宙[?4e@Azן e &>mjY8V;Rҗg^|+.w\=ooeoGP( BP(ϭБ!L@oZ􀷗|O?旽-܎O(͟z> [ k |) L";@twwomm}PrTt8 gn[/{Sh;s.Ϛ/Q( BP( rKrS42i}E+ >>ˌ |b's?lM& >sˌh;f=g  3;' 0..pbе _pphuumMM]AACmDVʐ |Rw) BP( BtV>P҃mԦ`h ~~ //w䆧A"^0*w3^oDA,cfiʀ  >>7&)›w||Hkk{VVN{{?{j7.[BwtX++2JJ6n W`{ܹ VАL:BP( BP(07U@DŽtۦV5fq3<,>/_AAa,k 3oRwuODDڵwGG7.]{ꮭ_|%vkjz{7n F{aɒ 7MLfo,wL:ވBP( BP([[)cBz;:A[eQfw|2jjj<00?ݡ|kmmKXx)NU8 [tE6l.--߂K=:mwmm6[v++++*jV\cK/ao&{YdޙP{# BP( BPnyn .]> ݽho/?ߙ}L&JJf8>2vhhdmI@A)ޙ7?544=+''GMM-AAAn-ZrwtX[[CBV\z;{͚;щNg7u sylwa\P( BP( tfhBP\X \=MnaMM]!.]C^^|cc O==}CC#>%8b`EآYpp֭ih 3E=sVv]]C722ԲdIjV[cce+Є;h4}xS4=s,{hygス?|ގBP( BP(Df!aqR]S܂ 褱"y z{c GZ=jA& Eo3< h 0Ef|m---ill޼yk[[Dze+VXٵeٹKEGl=uu Iyyd>V\}`;s~Tw( BP( Bc htΘ஘M_@/\xllsoo?==}]]ݾD{0>o$ [w7{:))!(h9ޤ#[[;W\Qㇷ'N7?['Μ˳f7( BP( Bj:20:8.4 Ltw&ktpW&[4azqś7oB3ьf8qcceˬAA|L&wwO?.X5|(CCx C ng돭`BZEaΜy{/!sn;F BP( BCs:.ıtFX\PLXHth/'2;J*m!f(5dn6.ZOx|||8#=zѲi4Aq E7,c(Q8]`htxB޽ߤ\dY[Q( BP( ~T@G~,X822?]CccꇆFGVڣ-tA-`R:KޤwQX<[(Copzh4t:VW{ fwIgQ( BP( O5tLr5A:"b Y_tg@⨿񑑱[V G\LA1Ecx̟]3F&g- [x _ʬ]n =uY2SlBP( BP(T4+\Ɩ h a >ϣ߲e+P7 o%8 [,E3V^ PJ[\F+joڵ7/Ϟ-Μ?[+v BP( Bs\@I *Ss%k@E DLƄt3bKpD[| 3>s4gu?[ 1>ƣ1[@3 ,_%hw4 =kMX;Q9 e{; BP( BPiitctiBjERzMZvc^q;L hq4wТ ezX\@ _-fѼxRԀEf_`!Z җA))7 ~|˿ ygƿBP( BP(ܨ.D@Gt]E@Qŋ #:><>vцZi޾$ [hʕ?['Μ˳g7( BP( B't xd?GA?pE`X-ͭ $ sj;s.Ϛ?Q( BP( ύ 蔱؈>n'. h|85⃺_ZZflGF2 آXrr*N@oRe@AI<wOQ( BP( Тz\@_tLKpx{O>>~8Kewr̥@]Ɂ4Aq U]Oʤ_ZZ( BP( BFtb$ >'1BlhOl(s#yçB:>㐟_ \ P'NSA⚝sL:95ވBP( BP(OP>N:!̎L@DŽbBB:Q-| > ;c< /  *#|Y2uF BP( B|rC:7y<9r81L^ʈ m身 蛄AMA^;Nyg?rގBP( BP(OV>t|h/;;t h S ˿ygƿBP( BP(\K  {q?@@xK9g[oQ( BP( IЌ)J 4#{q?@@)6V9gS( BP( BFtJpRx?'1 [t h ӆ Z@VE{{# BP( BP>ZtЂĆXì]$ O''R}ehH&EpވBP( BP(OtnfsA|4A)G^['{^tKiBP( BP(ft h ӌ H@ŋg͒ygΟBC( BP( BtXrPbDޤ[\5>+>'÷@CA? g`4}/:˳g˼3˗x劽BP( BP(8C#b c*" hS?зf4AArhA_2A=Q( BP( ȍ ~蠓#}Z(t ZR-MA1fr2/7`I>r˗˼3{; BP( BP>5!25/#z'tHGB.VzzYdN 2}NPw\5/^7P( BP( Ӕ-úAB->3AB4ηA_3ax_?h4}~ t\wÇ( BP( Bhj`rDoJ$Μ\@'uuqqusS[WWAA|{ ru3g@a칷v /ހ\dY[Q( BP( ˍ 衔>Q h^__3?MP*nnJU4 [ P +bW@8( !ϙ :xbY&7 _Ν;!"m( BP( Bt h+ k5NoZZEf[=@AZG{Am% k/MVs1ݴ _m]xKS.Ϛ%Μ?ƢBP( BP( -uЉaI=\@'Ylk|5\3H?:ZәuBsJ7 FAjZZoPXYS?V?'"ΛgF ;w[o]=[9\a BP( B|sC:?u,/Q7ZFP5zhP jJP1 3uFٹ:M᮴zU4…+V6uEQaTOoժBZZWr%)B3=X6ZTTjL&i%3ef0||,iX￀/l}0Teͽ ?8;t䜹NMeo BP( B|rC:?}<=v8%_$9a$DX##j.R (ntњ&FgPkIe2JIcLbw٧<1:5ztRdwRН 5ށ &\1YL5>\ n:BT*Jm1XA[d }.&˦5.FYmҳ 4h ;(\TJ'~ItkPi,ZwR BsF\5X!cVU==KvVZR1beK ?\4&vWj]pyhvq7ݔ:WAV窍-]1WQnzA7OU.jʨ7TZ^W1bBesh1I5tWq讻9~|m_Skjph\k:pPCCSZZƱc'^ҥvz7ͅ p\dc11q?3z@`T(*V^λٳ糳s1G[S|ʃI#Yy\=8+995$$Ǟx뭷7n ;eѢ%o݋_-[122o↳m{oѡ~ᮮ ۷nRR jemm=wyOسg_aa}=]3Kuw'? X;j՚G?hq?91qfݺ[M;Cn nz׾&Μc-- BP( BP(rK@' hN%Gw'Gw #)3bSw"ZcPFΨ1&C+kUZRbhѠS:֨s<\aQ׹j |sKvUxy{V8iL1iyg>T# Y\3t_laK}xz4]|nAY{MUfWW}) \c0ksH׹(T~K^n^\KgХ޻`9Z%wZ{m#:E?wjc5e2 RU1k -~zOty2!,da6qq ~~:A'P7y'.;j :>#Ykxޒǫ4^4 }{{?wmm*+7aftb0E%|s_6_ ≉3] Ϟ=ӇCs`߾[XXfw}K766/Z p:pQn8qժ5?8nQ-ahߟszF㮮=_oo\`!n6>>hii7 L& )SAč1]@~2,vހ) BP( B,ljMx(4%2 :(64!;):93)3rS% ^ͳlQh<"wV,~1hSօ N6I^PdžHU c+-ǚ|4¶po/&aB5>_h)Zg4ݽhw)lOgC TZJ5=ɋ5j/FQ5zgY>L.WXwgRR/]~ut5ںn0K}ntӸqs5,^{sQ_Z|U-zwxPWjIKjx!D{UV7 T7Νd7tZ`rmZUXkгUK4)]sUJ>#/?}/تyy[\W߾9/^K{6˗>~(oFFFKǷ!=>;04kjjQ(TpN[$ @&K#"  _" h BP( B|rc:s4#~05gle:97h0zެכ=eVXNkPJwk7,n zɻ8$bgjBrU}|]՛ nWUc\pKe-=7=d_Q_jljU#M>Ua*]ǂ~LjnʥKZ{aNorݴ `PܔZWU/5%m<>2Bh14*E _ؗzj=}vVGjB>w\&1!6lex;|y\-Zo˛7o9+W>ut]]?t];vΝr=ouvv}aݺx`KgϞ痢e*̙ǏlhhR(T{?yrWcpKoSu1TQp\7<<߼#22!00l%w -A \eYd׾$) BP( 5t\r]97+ݓ՝mK"X9zoZթfeɨsU 4>z6WN0(4Z;%GVkM ->+5fOk,+< &ywy-CmRkԮ:WKE#mAj7C:w} <pyKu ʣ&l}d=UuQknjcגK_/ҺX4ދk<ט\T z/UkjSKxVt.@K~; JW$zW1内jsu:\D1n*R_WZ}/ֹ{| 8n ilµZk2Yx`]NNjz:Ii FŬQ*|߹sjj'N^rɓC8W'bJ⬵kx5Նy\>>CyΜy\@766)yK67~[7)s]WϞ={OCF'?.8SYYͬP@ '?FP0LUU5/]z]/qs֯ɯK/\jӦ\KP̬s^pƤ?"aDUnyg|H@S( BP( s&?Ca4]8%EcYCi1}Sm)Q]StЁZ7(n:Y1}rd'.VD_gNRIu[y)pGE@KyJW]*v6Gݛ<-{|cc3NAK:0gλ塡ᣣKq~もzØ7}>}r 1, co|p=f`>`={u?;6WWN;k7ox`7x,4 [ AJջ_;sN}:7%葀P( BP(&7$ƳD࠙泡Qh:hPZY3TA );⻵qڅ5^v1Oi0j<_l0 ՜zcU +w,zƐQm2zӗb%xC[+mˢ_Hav Qےjk-FJcr3=|=Wf4ZiVvSi<<]b<<:NjW;K^ZHJpVu>Ϗ]q3J"}cՋzzmU&EeR+mXT[eg?+JQ*Ԯ ??Ytt,*hP*ՁFF~W &778h42',pm}뭷}Wz,%% 湮^v̜9֬see( ZcO|{?/;{|II':DCԩݽ\^^SaVk?s}_WzׂC ڠه˭[kԃŋ>'ɓGy;cA0[|I9pS h BP( B|tF\(b *?RΤӘ:6YQk Ai0i f1T*oAQ EgsMmz f5(хNnlTZyj/aV\MYk6&{q|cwuw,L)lEӪ  [dAZ&OU4f⩙T):IcV)nwVnPykURZCoZJm6j4n:Ť6Wtk4d Agk= w>f8C3#<<&b֩}mxY)|^]]~ ٝ[c4q-wzYl|_/ԣ 0P p"QSE'o-Fn>>~ ga%ne><좀sщ_UP0*30 nZ7ȼ3/~q$) BP( y 񜸡̘>.@JxiQ֘Ձ*VWkleVnqWhTzV3QJҰu:^ :7fJʼn*MөzBA:ZFBPi5Z [B;OrQkzdP*F`gz ^һM*]ga LSkj7^֙\tEBoŀz`qWMF 7J鴸V64FӹtjjFipPt&wlVhZFwh1lP܈J4ߡ1)'[h4:O]\pi1 [R31q-Qވ]77Eآ0o+RO4,88f a}j~i48 5[?Β(~'Zb+x8xs'".]ĉ᧠SxGA7̋&Μvۃ\WH4BP( BP>7nӘ_ҁ͉ȌɈNItj M5~Z^Siuh4QsSO}MV+ʢZ`` bs&g:FMVoh&ΨLIͰ5, a4lV@5h/f|Yga+CA% ?C(pS-7QBsq(2 xGa&Ač1oɼH+34BP( BP>7Q0ۓڹX@iЛ:RPTjIo]wxXLZ=*^gRjtF7`6M٠1WNc65<^gD[RmP3Qj,:^WQ11Z+3nΨSUjFo0&ZʼnFI) ^i4TZBWh:uNi(: ИFQiб,JС3}stW3]cB'.zWE`ZAQj5*~FFos.dsTE[($b@k. 8>yϼs\x,6l4qeWW?6b| .b4Hx Ӎ1%xx~.NA^  {D{4ÉS,AGvth h BP( B|nr]:9: hec };hgod0i*JVmPL^FgT)9lu A1t ڨQUL4Z^7fYKdTѨ2 JAi F=sRt.F^M5q` R}:Z7 &tqhjΨ2fqIv]NhuFJkjYk65nZބajq`RYc6(ؼfNըz5P**Qkt7VY Z7ZVs2UCR٪wFvn_29Q4:ky^'|OF:El,+y4df:IO8D^) w4Tc[4 >ᄹ*~sm2T#MP( BP(qf!iqS/iCg@3-g t'| F~_ygѯ~XD4BP( BP>ǹo}:.4AcJ/}I9җLBP( BP(TeˌfNNZDg&Ag F_ygO_*ߑP( BP( &>.݂rBZd{|p h āY_ygon^7%H@S( BP( "tyX~Pvl/ȉㅬ.NFݑA ,ߐygy>P( BP( EAsc .BK o!"s4BP( BP(B>4Ay ܧP/ʼ35읋4BP( BP(rA& >k)5?җdޙs_kFBP( BP(i.Q;E@$rrz8yq=]91kVTM~$ O%պ _;s~/)5bK BP( BLs!4=* ĴJ. Jр Ѣ^<> 3'Р3f@ANY_ygλ_} 1 h BP( BPe&_XQ4Ɏn'MA|y˼37&kLBP( BP(iO):#jI@Ay;du5$) BP( B)5ySpQbABȏ:7+74qh4W_,At:7zP>gL:1{j{;$) BP( B D3R4 yq6fq]91H Vk NgP4E?32  <87L:<|7x{S?Y"$) BP( B{ ćB" /!NMt' h5Be01Ͳ͗lYAe)+U6w5W¹ῆ$) BP( g@&ruiO!M\.qF(4L*8 oL\#Ů%Aeօߑe*O_dޙs_)/7N4BP( BP>q.7_m ђA>:7 [}ȋ̉ M\?jV3QQ**eY3ē4,\h4F֌ 77`_ygqm㗋98$ h BP( BPnP@䎕 %q}&M|tReT`06#>xxja3GKkf@*N`W+\+n;E NbMlFBP( BP(IUr]7Z:X)L.HD !i hp_' &]]\shoB⧣\- 8= h BP( B|L@'n )M hm ض0'i9\,|\qG^zH[|GQ:N< ͮ~B3n s;aO =it|.78 #o9e7~$?' ?xL+='gC'gX 9ؤV;㆗\<4he{O b=4}WxVygoƃBkrEEUYY@?Jh#{Gq2P( BP(#g@o ˈN(M*q.sK %3ۧ h.P=lx,ZɲxRh/AXf ,\bk׬Yl ΥNġ j(\:(hUkv@zv ,1X HaAX^iwq-ރ_䷆] G?C ^#mxiN+]~t+1NJ5~Bz{e/x.*ybt<(^^Ml06ƀoEҏtD\ /=~x ogOMLQ 3>opMxWzY|$rz=>6 ?lyȆfc 010x? 'q?>Qm!9:;A0PZN]`ZocޥE-\琜";iA<4x77帟L:-O+Jx Uee/~ˇ~w..nؤGBP( BP(ܐ̀tI+'7#?#/#9wNo(mbb}R~ӟmZ>L>mBBOǏ_O~޾NYp98pfQk?o$?_g_,XplCg=5Y(@8=(s'+q5*F\m?z/w``/'NU\^|e~0ϛw0 , 8E7={.~tOxP)=x%-#sxLl2NUk;u/>3.]BKJNA [QP@ zq]l9⫌1ڠ9? J8z8bwś_Z oW]叔׋g񞥍c03(Y̝nC'N|?moq_OE߼?<ǎ3gZ=3[,/}|;100wL?WX33C?:*w zC( /k02y1>HN={.+1B e>rZO666O4O)hopu=wott[ߚtÆMgΜ3g/>#Gp5,?Aᢼ1| |H!` >ԩUE7 ggc@8x.8_[9 3ѶmOcbBClOⷉsǞ8s,y(1lq9ŸQ6o7w g6CsC ? ?>lCUe8bzz&^Y{?}:qGO g(ǎ |ؼahGy J\,ZgϞ۾}v+>l0l4F=Pqqs…x`݅ j~_)4U204^7ή]/y!!a]ػw?a ={fnaϞ}'Nfzyy% GDDal.~u9|<%Ɔ]>r~y{E=Acp(@ox.:E3!.dZѧ؆e1?gڵwEEoѳn;Vۿx. _5|g7BBP( BP((\@ddK4^AOy  )L@l >/Z?IpphOOo4==r^^zX`j׮=n6M+XVN7{l//nݺU{zz>̙s&СV/:!33|(LT {|GcF{LII qŋZ,\=.,[MM-hPRR vqkf͝Vዓ`xDz{;sA3=3߼p b* 5 zCPPr =xGرo@f˂ <=<8%寗@p8e<:z^~omm=pDP0 ܪ?b텻^$hd4',O~7gZ?'C3o%0T/\܊a*!! o_k;sCErHHzW䷏AcQ<+!4 px" ^wÆ5<<:)zÉ(t!!~ p:@r<_}K2W>?x_={.:zOο _7t1K7 -pp h BP( B|>r ZL@珔pAa kAbWA"[.z=U@O(8q*;;y饽uu xu6=33?QJJڏ   ho~kϞ=>(Ҷm~?,X+Gk+ F *0pы/y≧~s}谢ài)(cO?@4r\\V^o=4 G{0~_λ.\!WWҥp#? //~ m7CnV`kޅ9sc'Z̙^}p#G[Z9.+W>|fB=ڵ_7NEEIĊA{gp-\/ʼ(}>öxt3NAaٲO{}#oE?yr?BxA/U\aaZPP1={>))xPx[ocxh1`x Ih?}kG7m AͿ:<…11q Gqw8#O>׿ O O_<^t8*>TblMz3 ihhBx]/}+Caa.~0lįْ5~~{]zjر\_>ǂƏ~pYK\;s60 "`qbc^}_ygο~%Yp7񭎎N<7lůncKZ8En4BP( BP>NH-k@Ouy#%=n ; ;-?=%cb<\cc+iiiy:p-'|zqRۿ>vڠ">2ںuEK|o+0/77|ۇ[ p٣>><>(9v{pׯ1bpx8?zq4x$  i$?om"#F/ַm۞cPpKn={<u[nh Ax!XBfDs~84B/daE;'G@!D*8 1APxHrerxF6e41z. g7oAFHqQ]6m֭;.eW3\*'¹猸yyyc'N^M}[\tE .+?I#w{NKtXk~}0 3(?^ͿM&I!ܷK,PDg6xMzL 耠q)ӃfMJl@.H + hUtn܄|Szx_f5k}ڪU gϞ'ž={_v#;;۴i-ڊOdffڱcׯٳ~0 x/[l=z/\ܹ SLCnݺH!(H>+ [ժbe۶|!NRKH1իf͚n؊fIJqHFbV~(p֭ۂ޴i\!9!! C ܾ}-bǎ]vAӳ>V($&x$3R0 gD9P40AJ^f6|f.#KIҹsÇ|o}IuQ l  dLz^ؙ0EJz:xB6XRWܾ}#ԛHE8qRD BHD(LII{ ^RR_SlA$p/.KWC)*U%'I+TԵkwiRdAF+2" \G@Ǎ(PyW;wy TȆ (E=u47 Kڵ_g+gڹsח_XT2.:q{Μy82A_ddmT3gΑ=E??H$ d,{ B8*>ytn=w8"E9ao+--E>pbE ТG&9ml$tq;^-q/ԩjذی)r V={. ǏD%N"E\Mfp4 2$gWV}g60 ? H)xN<#p@bW.F M oذtD\Vإa = yq&ķi-<4#}ZZW_m;j'O:ufAXޡC'ON+/oР?;vlwq1}6{nv(5ks Czѥ ϯfkCLv]X8;^x9!!kF(Di:::9TeHuʵxI#҉`K^ΡY6lZbR-[>v833[ݡCGrrĺ0_qժDQ49cdĐcϞ^=fV1U$4VҥG16СC?x(zUZ믿}>}v}occ׷o$rڵ;sx[3Jb]t$ !Do % W>T0`jooݺgoߝ>=K.=&L[rʆЈ4 (̅ok۶K|@~Ȥ$W>Ҁ%޽t'Iai9DB5*'`H=8phϞ}C'4NIժ6Hqc g5~fII)T vTT vI R s1?{>0! D "vq:bW#G>u +=AC?#%"^@UܹsmӦW]t#p8r=Lc"9$3! 8(uwV66v79Νv 7oܸ,7nRRyQzAk*Ə$`E 䄻UJ?~xR/Hgg_۟k!g<8>TQ˵F"EjՆ ?y4"ANgO8bo2ޫ@ʕ2|3g}Z !VX\lmMGEq66v@Qyy5? !Q0[WFq2.!̄'o@\(!' 9F\hǎ hAMRA=pCe-NSlq#B[ʸ`+n΄L,(=TmرY&q7%!qdZ5 LupGErP 2.. Pfٻw?UVd(RQ h~=:Ԁ5%ܲ=uПF2+6hF\p810?6(/6(?xd_s䁜^|?\qf-.]co<3.[ ҺuQS/ht6p{cN(/nKmvP رkq2oLS o_߀NtX\V\J! ?tBpA`܄IAyCF5iҴf͟ Gq۵\`Q&x266vΜ97sly{իԭָq"{xx0 i?ŋbϿ VBǎ/_?y@?]F…aC_nP–gYܺu'#cJppڵ޾}kpbc4%Ɩ0z ))i}ŝ; lÇ 7oΡC1k[[{%%p D3nlذO?A:#Lp{Æ G)6vҀ|||.wAbb2qYsq[B~ٔ)Ǝ/Ϳif ia"5yԀ˗v톼١E 9NJf~ Œ!̑dL7hhɒHQPPȑ}}(A>}x~:uf,n)Sc΄}vƭ޽V5%=:`ܸ [nkPM9iRqmٲ:Dv[l}N1 ]@!KH_ODlI s9-΋'OEp-ڵ9B 3lITӦͩ+WEFF('NO͠lI29>ZA2F-pRhhFVm%!۶`+Z5[vϞ d 'Nm)2e/,,QB\*UD֯ȹ=fHV0_|uF 44pPZ_#cTT#Cz19rpx iy _رK.g\>n>\N2-Zr(\~QD\DQ;87/jx5ʵLYJJ2!8/7 ncI;wτé&'B\#ùE-@2COmPZB+V/˜1㈑c )kmr΂ڵV8Omp.)96nh@.#~R9T_?p$ ?9DB4 ڀVPPPPPPPPPPPPxk࿯mA[6s:#jn <-h77ٳ\/u|cҠA3 7o|ߨQc ыPظq/X]'Æ ~ALyog5/^}ĉqQLp αc#KY[h۶=e7sjj:R($ $u|X6?f+V|jSҥKC GmrÇ1DnmM6'øWTtk޼%9< mv. `'KKQs'3h@{' ;PX8 gd 4hȁ{LmަM;h(VZ áCTPK(D-WT"ᒤ('$d%?ڵRӧnb# $ؾ}'ABr^0p [Yǎ W( 䤐b޽b(%Kh 3( rݽ{pnٳx޽RA! s>5D!P(5#FzD!wr֣G/ϝd={c(@,rYZUY|="d? ͑Tin=ؒ;K<9d*rKg75 hZAAAAAAAAAAAA76G& NX=}ⴈyɡ`bp CfJ9>y]&PNNL _(hcys\b$43Rx̲d-lx)ABc|aE&.,QCaQ"%iSE00 RbQ6Ubd$]"8؂[02]( 9` D:Q(K|%?Pp[&%lIa vqw΂}Q+Vw3a)FOO/P@b(6mv7o3fëarFrL0G'#gЃGLk: 5S܀NJ ķi!ɜri+0p.siL "ЍG}%tTTx > 5&Hx3Aӫ?-1&t)le6aFJ1D╛MƖ'(lE3[2eΈH};v|``W_mzZ-م$4Y90e "A  +^X$W=9ABmBg)m&$(svŜ#VKxD!(%(â9-Qd_̡=bX2'آ؂UL~!O8A 3-%^6ܐ RF#N{ t(,AyY~2 EV|@ Q",Mqٓ73GO ZC gI>c4kA'syhvCwM1a!X?H1Y 7تn"!BdEQ.<0r(.?f.j_AqɊNT 7,H`ctц'2YFtaæw?~xC(A`Q'Y2a ]DAQH\~9{BX.h(gR3Pl )Sx@1$ С郤"(3^c'[B-A,tGrL+n+Gfp # :(g TDQx[[B YEЙ AY $M1~ ,S401xl 54sx$€NTePBRh6F&@A6CAńQʢa9"PX G8 )܃cLd) 'AC[(a&1 %px.~2,E3qY{WV}g;WAq7oIU@PNQ--B&l=h@O[ htrhtB ^5Mo@a4n<ՃL{գ-( $τ{0AFFGC:&J_C9KMjf,!2at38a@us &AP10X!tT11, 3e?}‚HVCb@1(Kf0EP6v!=r:bN#[6B" ΰk [OCPNY1 ~!^․-d.P Z(`[bE&2Af"!QQ.K+$J ؒZ%E"B4T1a q].[r.KDK1-Y Űk!?GL%s-&BxƈƮ+2ዠ"K8%900lqDD11L3a ʝ =8P."lh9>0Z+ Bl%)jaBxDND XVe tV⌨yҀN }}:90O2-(} ƫ 4,dɖK$#s PfYrP0aƲ-& !+[0Ex DP J[@)ٕ`Ϳ&sfIK0$ l0@a0-bYDAe. l) E  ]9 Pt#J@.AQM D!AyQˏC%%.FC-K#`] 1˗@_قYzR\80BgF-&MB KA(Be.映D1Csd 2 Q8ˢ0WHB](-8x Ed&Hq1At2!-cd RlAYCPE=l1QC-Kx%K1RF E'삈'D!K\REx(z,8lDH 8#,Sx %'7P o 7ڃtre:/bt65k;?9jotttvqqa71nE2F'] aBؕ^d==Cd h0:&,#DZƢ9.1# AqC']%օZ7Y2`C?$F+>zD-F$? \PT1adW93).E#`)C!1i''̙3 "-<(0D <am ~BZ!hÜb">0rxK@A(l؂Ba@q%8QJ+~ƒ KƁ ԃHًN J@# g 'Ky-%"bX <9A3#u"΋ٵ4de"]ی 3 #t,ɄE8J4E!DPL 'DQ˖Q.@4C+Ag)UQ(ƞ]_+gwU`eDK☘c)~2]& "3r^21cg 贰6Cf&'H an@jZsoӦ]=۷о}Ǯ]wԥY5=e&700K#e>>-Z+6Wv`WMFi6YDD ҙbZFL@Q% R s,p۪UvwO:qa]"YСofK@l޼wC"R-5mܸ 0[aN KÒ, YL]YM42'zF OÉ/hc"F Ad1sӳ>gބN| PT81 q|v{nzt˛] Ax xXdGla3 mL$0+E]Da08K!"(ژщA%yrCĎKn=zbe֒4hĒmd߿#BBq$H\L̑C]R9E`xˆ\D\qK*Y  ц,/.x%̭It4g ]3XdD39mZ;XO$A43" b/$EŒJtrְsT h~=.8 ɑ fJbz܀..͚(*:˿>u̙\6mB`R/&iӧg=a#.͗֏۫w"K_ lhFi \M:;Wg4-M.+D!qXٳgsP"}"qU*9td,RbƮG^GKMMpJ"DNwܶmǢEKH/ a4r%>`k7@Bd E1gq|4hȱc#F%^,A2 Q"lL$4bB,ac"HC:O(tO\<1bQDFPąѱcǟ?O>|$G,:A#(j$ JPR&  3(nF1m, .G#@ Dq@DDʢ|ɧO=yRwQޱsEEE?O=#Kg"0DLwѣVmbb2e3b(J0dVq 2:j%.ɶ%pN-88둑U>z %3؂ra= BcE1gΜ۽{Av Uh[bFлzgw;~5c(?ÃBD?sw=a"qɮ8c KlԴioҥEP$@m@+((((((((((((53 qɁaiҀNH)ԀI\<%z^z,0#l&ZZ4RrCC#GM3 fg>CNm۶oeG͘Q\$vݹsW|厎4^Vf3KęK3E b~&3l EvK-H,a7Pl֬EN][pM q&BxQ.[x"&(;;椽ܽ{ϒSSLC&3"3JDƮi[l[tY*]2:AG= BG~A'.D(9t+W:xГ'O'%D$H&%AD !?:AQVj3l؈gO@>XG"Zp]cH M6ߵkG֭JA#,&(+h#DdKQ.B(l!"q B B"_*e|x o;۞={9r#~T2%+V_ƍ/\ԫWwy/99";v3a#07_"[)BsLqI`XVVΖ-[9_h lڀVPPPPPPPPPPPPx; #"oр΍ H4HˤI =` k۶rZjӹs֭֫So)wwϖ-[w6/W3"ޢE;v//o''e=1 B۵3}Mv `&-θ3("eZ86m޸qY ,oݺ`WYۥK]c :~BС[DYѡCG4hyȘ" "3!mcNJ֭кuѠA#@)>#3NfO/ątY:wҤQSL1;bN\|S_"B!XQD_C(=l脂I%'LĂcA8ݺH:7oI\b Ub('JbAD^T?tYUl!Hhy4":azc$"΋J`VF KCE!"$+бB>q(tn@:dBd3׬8ϖq'ud>=}G-C5kS藿 ?#Ϝ9Ga/nBBRQ#FF2YrȲ2'(1х؍-ʛ !=̰lpЩ-ql!5.]x977}mK05'!NJ)2@rD!!hrڴ/L6mvL`8;SPaKle.tA+;{r军?Se dIP\ ݻ7>4lC\d!!9G I H>ss7m6b?k@OO ҀN tYFIbbÇdI6jf6l=ssa ]5]/_>xYu Vj֬ݵk[߽{.])(+n~+f%ᇣGnܸǟ:tQQ1Ψ1bԡCGqgΜKIICCO2eFԩ˱c3fbM A̾~&@ޡC-[>{DyzdlAǍ'<)}ɓ! ~ âEKJJNZALsvMJΰrǤ9n UmBB¯]wJKK?اw?"aa:7 E#UTKK 5kBڍ7Ew}B2ܭ["?8?OK,uv6qAI\ؒϹ<|xzED(<ܪU'9ИH grFY2oЧpիן={Ӎ7-E_ٛOnw7o=j~Os\&Ee ڀVPPPPPPPPPPPPx;5âEMIH}ՀKX<-jt BLgS:8;5$'5$7fр+GpLHw*{)KO>{1ck͚uϞ=ٳ0 =umV7>z/ݷeSΝ0hА]RR3AjԨ/^|3dȰYܹsk+W~c.gM 6uܵEw:t3[+W:x𠓓sppGO?LffոqO?С#8@Ps̻}ٴiM|:in7oիܷ͛!׬YT-%YzxxanĈQխMӳ ߼K 8>JʢC~cd,((}?-[޽۶m]zCA{ԙ}0hZ\|[r?!7#KK͍5䓵8] 醹x+V;fkccu_'OJ=JjL-"({yRQ(7.KǏFӦuOOo[]|vR!>)ݻwK;oݺ *AaCGP=a#^zs.)9 )B H5^}X.4:F7.mU& 9;;ĉ8JQڢ+Wkdbl$rHV4(TF1srpeR38pHIɩqT\s3v֤I /_ap8ez9Fx~ܹɓ'h˳sN8t2B$\o=[ &?܈5MMM?}̔)qp\d-))Yv]?}0ss@z b(ޯ`t60j5NA4$ G)[bFDDQW R'Q}ns99y5{\//o2|-*J"jٲڵQ]v[jֳ hZAAAAAAAAAAAASS_a#-!S¢E&`j@'.=wJL`FXcZH~z茴ܔl4m@Bgnk_$!PZhuБ>ZYMv.^ЦMV0.nUTo/_ODUjyfrr )s č;l۶m666ekk?dȰK^6ME, Aܺug8A?n;Ӧevϯit .MUbel1OLLX8ЫWKU&N.X_Xfk@{66vme dcL-b(l!E>"8;t^v#22YF}̹ $Çī *q E JNN%oT?]c"fBr8DR-)GG`\"4 ԩ3v>}Zlٲ]k֨ZvullL #GV^s͚u7oܦM[VXEȞvHl7A'. TF,((c78?\޻w_r4Ι> 5Lzcbb温U+9R4tlE'GK={&d D8q|>t' O<0Ht&\d9W$zm sGCt"%K>ܹ+˥GWgXDQ?IN f;VܣG/sĉJ*ԬR9//$""RwTd}m\T<K(&W1Ν?s2:_1p` 8g|j6G#>Yt7# [ p?KEXrϞ}]t# ٦fFِ{ss@xXX8kݺE& [-o@GOILh@g̝9 A ԐS:47ft_ڀ]?cz0:9mYY9ЦM;{|Y4GG瀀-Z^`}O>{-[ P+M8ed suspܸ >}O::K,)SoܸA,0~ͬW>Ϟ@OٳoN٥K7""GƋ_mjŷ`zK,(HRodu-29hkk?l؈/2r];0w|h3H,(dO~%%2]UGoGWjj{U [&RC?qd||b Op38p0[ IlMD֥-ƎO$[7oF;y܅Grpx%d*7GJ7`ʕ "K\.\ AGDDNMrqd=qyERdѢɓDO:djիacc;wÇԨQϾ hۼ+?F۶ N~woߡbHHvv "X2#4%DĄ? wJgHh.E89&RFRpRlx8e4b$20c:sXzu-Zn)`'MJ8vx18?U!K.ge+77_Q%eSRYh-I5^q]y l 2 &9lQ{p0#ޡC8:jrVޟgd d¥AyS  ĉ,1B!V89pP߾˗նfZȥ=ԩ  WzF̘yҀA i9R hPzx!ypqqu5._Vm>_-Z9r,/oJjMxyv##^qq[w;*@TI9ԫ\}>ō7n@ÜSӦw܍'c[n;aBЙ3O<=Ϛ5k&Ls)nHV(`Ю\ ̱$pFƔmwԥ q{2dN:uM`kkߥK'ON<)I:#̩ѡCǭ[Ο?z#".]% }8>| 0))-__Um"#C%Ba#8lDȑqC Rm~ge^޼y8/fc%|HȦ̤((˗8sNW)t9٠В5k֩]ӭVͺ-:z(>MmÆMVʣo۷? >utPPȻ~I gM-W|JJٳ7>$7`i}Hoߑx)QKa#nnr"Rg :#(+.8CMR;w;vh̙+Vtu!jр$ ) s9nbyЂ*Uͧ:tD2ūFwQ fj ,;) hN|ĈQx rF(OV\|<,,r*uZ˦9sO>0cQjIرb4` %'OV3hՂBBZ$ղ}Nlc ϲeQK͛D)&|WUYVZvի$Srd8/X7W/\Bs9HE9~rۻwآwML."b 9V D|jZAAAAAAAAAAAA76%MM}#߀~SzJdAzX^Fx>cZhvzXN6_a󛹌qq?𨖗&IDATns+wiNN.mڴc9cFGll>yRڬY iITuM޼y;))+~ sF3`>ox%wwςÍ]_x9--X8p+23D5ٳg6lصk$A!=}Ç%Rx~yZl7c̯9߸q,4l؈۷簾WjӳgoppƎ{Tl+fQ8߮]]v\5O̹|VRmĈQ׮[IPɢɩ d vvCߨ/X:tc~ؚ>=ጎxνd쒍bo*"nTT̽{8 B:tgN8zw`|cڴL|֭GNNVPG{(Ģxk l'gxx$َ~cǎSqZ59/ܦ60!Tpp( ?%RF%'0AxH&?00 7dpp3שWӭgJΝSTTUVoٲ+_~?ʑIΎˤrd##c7qpرb|~ 11.\b.g;i۶{}w'NCäI xK8gǁJvFQd˫+5o26'.ϿN:tֶV-GARl;))iܹ8 3P^Ν2K.jũUX-BF-[(΅ʕ+GSՔ+Y1z1.@LsL?!11r*ի׬S۽ZUiӦ_v-00rjHQEFRFǙ p(,FP(5)ihɞd I*vڽfZ{{OqpN΂˗9y1ML6m|X(㼘3 XGuܕ1rǏp "Yt^}0syv|{*ORBڀVPPPPPPPPPPPPx;{:ya9S Do\i@gƎ1}~&II)|ҪU3f3U~˖YJs]7aѢFհz]iq񉨨1c-^Ν{C2dر^q&qx{iGGfZ;V\Rr ~_ˋxCӦMO:?|=Q:8DXBv #^xQP0s18eʴ'^ڵoJh"< 0!hϧNxҏ ֓L&=;k8H,Xƍ11 FjРѪUoݺ}gϞk޼%"HD 9k25JQ]\\9ԾrÅ zHm7n|w>~4&&C wAbb2߶maΖIr&MJڷ3g6m&MmƖ-[O>ۡC'HqRH2CX x(!*66J@aǎQ-v&P.]9d3[d[ ?^B!1'W9JNyÆMl':LYr(O>PVڵLo@;,[k͛m"L\<Ν+|ޫoC Z5[9s#`N5ر CCq v8VJZqƭǏoݺ}Ȑa eHfrH a6Η[zݻ9/9vx !;wݳgl߾3++S1u‡ر̯_mڴ[fC_n6lt'k#kמѣ I@o‡mv#7nkƒ 'Oa(DD\(矯Çd slچ~1`D@(={/RS1 %<4  ǏܴiQuZŹKVVkԨ(YժR11gϞzIYsP*U &&h۽{O D=x?9xbcc׵kws*!ɖ8I)9sQH!$ɧpJay@4狭{])9}sev\~ôiAF4y.e>j۶=ֱe%  [? ɶ\_T +?dQIqk"u8I6qb! } Nbٽk_\ 2dǎQ3(h8 RM%]Ʉ(..!xK 9tOPf\[i繈ХUYwfnk q:Bp$%0,-$rJxĴW q-{Рt-ڀ6*Wg^4;%-қcDI[g}a_[Le A43򪩋w,Ad1! O V^U^^BStpplٲm6nXF-࿊E"[".=;G9D(`ڒF %X h{&H98,&,kGOx@&Z:U(,QeQ.hań02."#s8DvElɜ])v-o—l0q $^xnHI@g,FE n0qƒQF&hf܂Ŝ-FA͍"'GЅQtʜ"%i3B1$[H!3LX]Xd: ʜM:/74i/G D +0 b cZ ?iiѤO#ld -(ƛP,0cHd"7P``gQ3K- VϳnӈϮ5ԩKA3OIU2g,[RPq 9"j5c]\Qb<"NK.[#.v+ 1-EP'RlIPrvL PvqRK2Ph@ 褴0HzaViN!89"O0=,+#<{rxNX7m4)5-c lKAWs'2ZgаnL,MB:bN]fϞ{IPd ?- Ac!yTk)% ]]?M̆V<"%hRjJJaYA+s3fٳmm rϛ`3eBCO ehNCР[m'KKvvEQ!feK %Za)&[e,閜VKhZrğ lҒ(([B!rINfZ5 L2XY*ݻ%/?/mB7l[7L [ i@2tTtpԔИiQ k@O)AkڌV3=̿?, ^NSWN ٲeko4zO_Q dbkk|:ڊdt6p^5KNy1&>Wf-GK@hm@+((((((((((((aG[5L 1Ҁf|Հ97={"7Ҕ<\_kGηŧ8\!ZHNȆ$HgS ;(-_ު,xBE2y1r@/GQ@,ڀVPPPPPPPPPPPPx k@ԀΊiGO=%"{jDΤq i"G&jP̿eL芿v4Kd"g#R֮5oUYһ5z]r[T/&,QjF o7} fgM,003f|ƩӢMm@cbqstPZ*@h̘3"y-D+fFlT޷; >xJ-r^Übἰen h~q:1 Yi tt=-*ό?5EƏO}m9NN.Όtu݄NNYJcV..hd)Lj *Q>δF +T%[B\d\]KUbw|Y\yqXRr.i1j jZAAAAAAAAAAAA76'OM}}zVٱ`1ӢrGЦsTlsiZ6 @m[j駟߿/_1~lի>}z֟gϞ>xhʏ4hgϞy湹9;;ݻwܹnnmI < F <,+!(1*. t\8e޴ EKA`.QTTTT+Z wbA=@9[ e?У#Dž$NM 0#1m6 hmـFfMʞ?>߯O< z{7\hɭ[wC;v<}zӧϘQP0…KЛ6m~l߿…F ,xS[حS3ho*!J=[NN.,&A]zD![NL`ÐyDL8;W[к6cUB[+Bs̘4;wb913GdeFfgE$OoҬyoĿ̙]\\\|||fDE3w9wwO[[|'۷]NÆ ;|o> o|Zھ 4޽g۶?[2:;Wg[}k۶}ݺץGƚ6mԲe=zA|}ӷ}^&F7nҫWvQ*Dx:O- EEEŷ\^+gw\W?jZAAAAAAAAAAAAA ]  =hW 8>Iczn~v0ލ7pҔ)Ӽ\x2Wϝ:u깹y:u+ׯ/ر RZrqqmٲ +WfffcWZY~͛>}vi2 ٳoaa{xrrrtZ3={vnЇ-luyo}7.\ҠA#:кvb5J˗; XɣP e5c3c~m\AS9:+;:;iB_z?} M6?{|F(,cWww . :} IC&LԩK~~/F6Wך~ǎڶmGtĶmK+/_y7KNN}qHHʽj+Wϯi||"a0HzVYuCQQQ-֮UY{72?jZAAAAAAAAAAAAA Is`05/(LW ;̝) !mnשS^=wGG-Z?1#c|n]7=sr_~|GO>|˚4iTƍK h[N={.5^`QDDfZ8qrl997;x.rqqkg^QVVm .]{u9r%+V"@o=ZĖ/z|}6!jm@+*** 6YһYonkWn"h h2k@O_03acgD1fEfDgDeLHn׬f-SV͎M6x)<,ܫWէU6 4靧z''__߽{;?57~At7tJzdn2v:\v#>>-Wך7/VZԼy}̛>mڴ{7߼|ɽ{>sΏYwwփ--[ς4oAǖ_1!1 ͜9[(*:v:|7o޾ɓ 0t˗(uY0 ttj:J5+|B 0HzIy3rA&yscssrcbr҂R5m7Ou3tcd.]]P! )K0"Ȯv߄0Nz25ygƒ&!„%DdeYb[ D 1GA8DbhUV- EEEŷ,WΪ,b%+_jZAAAAAAAAAAAAA ] 腓I25tA|^~\`Ĭ켉iVӗ5т+Ȗ ұ9#"xvZ+hf2bt! 3#^5JzPwtt@LB3\2t A ֭nPTTTckZ[߯Q{?>jZAAAAAAAAAAAAA tdl5taBЦ!QRj'+̍f.KW&e"[e 8G0E\Fذ8#b掶B8e ̅.%6(Ŋ  3#x֮ h2?B( hl4g'Z7 rG+V; ,WgVBx}z1҃dO̎I(LJR % M$̍ϙ5k cό,59TPQQQuUZ prbm6k!CGE I 55,zj̘II a05M8p~re;gRxΌ˜5)kf|0}ZQQQB[)V̿Bxm:ԀN 9%(Xg”9 S%N8'~܄ig'hZQQQ7=,WΪ,bE+-Ϡ62怋rd Oʔ8]Њ=lZ;XOG- -D3 h_Ҁ T:y ?5Maـ6zҀ̈́o'AW(3JɅg{+ş:uCVz i4iWWz)NGG_RB<$rpɐ|cgFZo:Oߍ3t&FC.aD Hϡ8IfCTڲqoQbRlF~~ÿVoUYDN$jZAAAAAAAAAAAA᭄Kп-c67p`F?}LRl߾y_Ze1ZPt|ޖ0k`criI1gKcpZM Kf tFZnnm۶orK8 U?De^dӳ~v7nb(1 FAXn ]В2-,rRĠy;w2X/AQZcK&,  pO DdQN΂wr蘁eybZ2A4Њ(c ,-K7!YF2ϒQ..FZ o =tkqIS^5WpJ=hp~R,}N>?13+< sFynԨCG~'O<|pÆM:t2$}wu{??F󡡡<׬Y nW(  QzaDP(DQ^=wqՈt uc.[0KWךP -u2".,E\@a"qC 9kסDnn%0rFk(d.q1[(g,Pt2;ɓb9 '#WEp&&lRD@,lQ[bՓ';vSExfc38`,e">9pҰ(t1-׭x(ڶm-[;g'J}ڲeڵbT^Qdsgiccgol,xĐAKjh t9@CXAC濾7`j$I3 >Έ 1'["R$ 77iU`A? %tUB$ֈKӵkcNJ33[p9 a.#ْaWB@4*(dW߰ձcÇbBC($ɒpP{x"ޒyщr(dmD6ܐ [C-}BtᑫWi֬oą6N X1RYD ])|Âng b:KÂ܈O&M(!hϿ8zE @$d%R4VR d^\"gm7ltUm2`cA<ĜBU),gdg>N:mێv:[n?},1q6E޽_5p|Zq^I1R_f-w7Tx>; %X%7wƢEKHBtr޹s 67l胓8Y,Y򁗗7vIKg8G%IӍH QBCsQW(D"[sn"[\..j:D-(*U;P!"?$Y–9 , :ar&dcU QP%|fȜ{5D?b %$AьJLʢ$ "~rR3ݼyb2=2jBXrpDFP̐Ăй?8={IF EiYO6?iZvdk{[xqZ 6BZ*<.D3{s"UZ-[>}444ZnۼyKyj׮Cf-ؒ]f >|d׮4hlG&ٻs}޽' ^֤[1jشiA 4Kn؂BBce i)8ЪUӳ>Q,[mڴݻo߾6?B H :$$vv;v>rԩ۶m8ߨQcFF[hEҐE9СawȐaEZ%qI_X N <Ѣ)NKˑ7H%KbV[ w r4$ ȮɈX\ y&}r8t&H[۲eR$0&F?^(Bx{JL>dQH,xBꐃC bEj'"#t3g77_P0W>Uڌ7 s078qRr@hX~֭+TfCYv98UAz<tJ*8-k5}7ڵǔ)SΝ;7N.(J˜j4IWСC111ʕ%Rx8 D7!3AK*$8 l-[ c)*K;;;…ṣBz% Qw . у6n)/⒡T jױj:8Ӌq( O5`h )~d9 LL$JC!dP !!g*Jȉ%[Pȿ4E-xp"6l8d~vAt:X%ˢ(P}A"7~7 ye ȼSf`j@ʛ|, ů - ~`Zj9;;:up \\\o1 BݛRJnݺ}NN.-[>vxΜyhQ߿Ν/ v:`O޼y?Ő, 탚o~<|/\cǮG$%Zm6lBUii+fΜ- tkמ۷>yƍ[˖-o0ѵkw޻.^~uw>|dQqL<}3f^8qo_}6++Gԩ >| n ̯23#G}7n~O_'9Ӧe"]Rt8tν'O^vcEvOYB~ѣE|!L<))883gΥe Hݗ>~ٳg]Ș _~D:Bb [Z,EG`-Hu}C|t͔4#F%rd[mOt%iޑ(*ɐ!>JIWsseD!nLLٳ!Rx8qbjl#"8H 0'$ آؐ4)ܡCݻP_v+V8Q*'eϸs4E ;=V޹s7WI&Q(A4ݺO:TRB@1bG0À&z$L1R/^t{tۻ!s8pHQQ1R_|%Rl8Iِ[;cH;5h(33c$Qmg L{p C O5kbF\e-B C-"\W gY5 ߬9KțἑpKPF[_ Sc=99[lݺt СQh6DR W1pL/XOsv '"0p.Pr 42/R:qbgK9޽^ *W*g hqlذ髯^&ބW˗y lP$6F^}sМl?PRRҢE g'W7*..ΡA'|F G'=/Ǘ/)r#f\mgw ",g駟SirUrՐ ӧgn K.O($?Ӧe-?hf }oݺu.=T7".}ΝP?6|Pkq.(Im ;v"dL&A(07/gϞ [.]/9# UV9zچ 5X޽ΝGN>|̵޽cc'Q6(Z( ǎ_Rrjʔid뚫'r9_N3YЃG~08"#$rZ`xf`Xvd\~R\~j@:CZ2rA- h}Nnj@G&|PfMGGF_~zOouӧ<*-}vƭl}||8wݿ_uvvMw`޼nn}ڬY`nrI[huW[M()9jja[tYQ}5jРDc<ׯ}]tիOhhعsܱcgOtرdHJOCɹ䡡WM:sLnno"u(du͚ubN,xnKxȒ3.׵kwy'-悥I#v@@Q@*MrbDm۶](#FneH/az y7t/?rr8B*nssfB ==';ӢbDNnD;t\z.\tUan@X6gAzֲlAK2)&MYr2e7:~q?#F"I A]'>(BnRʽíoܥ" `,w"n#|ն%K> 9F"-Z]Wn(֬Y?jq"QQ1ѣL+((((((((((((( C&FM zՀр_cFmAԀ\:իݳg… 7iͩS[*5Ӯ26mT,V666;Jupp;|y =]O&Goܸu;^2g*sFs0!h5W^/*:ޡC'ь/Aϯ]{?QRѿ3g;v%QQ1%.;V\c7oA7PEP-Z"Qjc1؎-B9sQcǮ%K>`)4ܹkq D\ICB֭ xDY>}]v#44K:33-r;wۿq&]-ᓜDjݺ-';wxy52e2w|νrC #Qb Nq$)z$IQrr۷L:#L\\M[_QүU%)BnP wփ##-NILLain۶c+Cٳ7loѣRal$ 8Cbsr._"8S)G|UUTc ?n(޽'>O222NdN8oӳpͨE_|y *A %+,,soD, IQ=[bP\52ƒ|B rRPRcSh``0gLjKpbܼy֭`o:_E^M;ƍP!hn@qppWetZժ6ule~͊H!+>jhA.r="%xȉsdCAf3T._䢦TFd>8b<+8z;6ohjgO\/sI6ɣE7΂w4w~G}ɓYƉQK4_1W\ ̙3ȑc\6Mɽ%Es b r ҥ9z`@k ┗/_wV&%PbÇ$p5/oƣGOwɟBrGPfM'k5 H;VdXAAAAAAAAAAAAA k@ ?$j̄6C" '/OpV<+KRҀ6uFLj״>/#>>w7oAsC*99Wla^=nkמE4wxߺu-[n|L\x~&ѳg^Ʈs箷o͗4J_#uv>p`\jѢUpp{ovx 7oY\|bOavttn?''/00AO}ҥlݻDvʔiկ߀=z1 y[Ҿ}G%vƌҦMS,^]\\ ۵p+Va NB$ `luPAD-K-Z3fff#ժUϿѣܹsU8;\Cq>!!ɪcH f͚CfXBB&|Nyjj#Ώ3ƍ[Sv~yB%qpС 9:z[wMD3g7gϙgnXc~DzھC~M i> sII)DEH W$$E@#~#GVl" .w5y0> #C766^ap|Q;a ƍpqlD1@]JLYݷg^ ;#zu ~ިQeJƇ$1`dٲ@-4…JFhܭ\l>Μ9G/Rgt/J|x|pQ.JXraΟةS ~MB|p8moIJSDݹs7tG򉇌պE6(( ^JHH8<_|tk d 0` tNݣ Б1FM;}T]:}E±d:uJ0>*Vv Cs//3gΝ>}fذg] ~뽛[Z\rM jĈQ6lzqTTF%|zqqVZ_-Z-O+W~fJ_x~N~dwp@ ?/kԨe1Lz…vg99yѪ[{W^;v!~_M_LOqRB}`O ">|1]_OYgg͚/Uv]*@3'&&'O>wBӦU TzEREXX2HT8!@_=n$xZ޹s7/;tݻr'ͬ;9]h |BQQs qEG%mo`;h`|} >5j4efbKWK..nyl/^GjM>BBB~tc\\<:6ӀhܸD<3* \%5ͣ yȑc\ ՠɝ`%qJx2~|bFU޽PsU~:x '#MUQsVѣ'mԨ yhh#`n=(:8O=Q }Y5 ar0` صkw"q7JTPm/8yCsDj*+/>.&AS7 #JaȧN%K|Ϟ|RBF.Ҳekyh1TZu/&Ma|̚Wp0` 0`tL4Fԩ3F괬퍷|Ç22U6$'^̼֭{¥#F^MySq رի׌»g WҬSNq#0Ξ=?xp,`~o{>G.$ ֮,+ÇO>7L+WU6{xg7m2n\&)^|%Y:t$!! 08;w>y5a 4X3UBlQiذk'NLAкxrLP4[{͚u?I7o5jmێs(|W?P'Na 6kc)Sq_CơEWy}ڃӾ}^kЧOؑ#Ginp䘘LI:u/^z']ɏ߱cg' d[nqf#oٲ5! >RHlذ99yy…ΝpbqA^?T -MrinCJ&xbȽS&àMw>\ @L>f@j۷DyyP?AvrJq0B%qsrZhhss.x|50!:v8vl?*mۮ')Ȓ%˸wTT1W?yy֬9X_#H,NjĆ#GkסdI;BV羾qc.bBCg (Ix``Wʎ/t"C3R !*S|歧O ̞=wٲ(u"dG=rSjœN'p˪-T;PyiӦAxԨ1Y] P{̙G ޽I&\ !WܫW0·ne]rmO|O:> s̙0` 0`bB?x|䐔SEOj߸_OcJ1hgTO0b()HXIBc t H) KZ0AO~ p$ׅPv8ZpC42Z" SfE#Q9Rl E[EXjXEX ZZ8%t--8Z"UF@t` ᰕMhq$->2p "@#(9L![vzf4erdZzBPѲU$XEˬȎ,CKK6U P `Zw,o224 U8N-&̢/W#8 *[Ј)r+,Xse>koyYxqE ZV~EcSx+":9@#,C*d, eryd*eD,x EhT` c%Β)2)2Wuޞ={l 0` _{ЩPzl䐤)zh3欝8medpE$pyDPo( i1#|ʾ]s *|kPb}/j G3ww}5, l 4+l- /y _J>br'E[>Z0ђ i|钑N-ah 6 7K<ܷ@n=dʒvu-5XHD#MeV@[C(RW vuNeD Ʃ r*5h%ဘRlA/yVAy/ulEKRd/`0HFnQ2#z JD2GQ:l[{zրP9B&#h*]h PAewtWPPkp.jTȲ8$.SɲK6HQ[׍肒)hYm#Vegd@#hdXZ.h:_ƭ !Tm c#YSl)rJ JR/qdmw ͝>fII2ΖS-*"TRǎ!h?8Xa>2Єam,@H_2 (BH@|@h=0 By+)8y 0` '@50&AY+8',MHe]2>ӱIK%O2ˇ/|3ח|oڊ#}c rTw*YuɂE×)e)kx)y L8r$ ɬ bE0E*pėtj [l%oɈP[D+kQ@#ZrQЈ"eK")aa*Ɲ-U 9JQAkAqWʈ!`Z߂#lUy[^ :@Eت,#EP4L$Ȃ%/a[Ij*x+r*GR#`G| Eש%̪-)2UE(eԢ-AˠX^D˂‘UL)$u Z*S)GlȈ*-BN ege ¬Zb; _n2]-;ApD:VZie+hFxbZZ ecJ@tŷk@ҡ&BW?ɻ 0` 0` _Bu14(ltcF'EM?#n<蔩1uk{U.fwu1bԤT` HXۛaVG ơ1ΪA\K^Lr*݂JU,a)JX TNLBpVhl&2l--hYfV|]Ƀ*))[Y,ܩ%,>핬`I*~NZBcv3.8b*brV|G?HJ$+R+JB@+$#ENe__3_>,p$,K1)IV8lQY$ĚE#pjYWYF-W+őQ䈽-/r-aePb(01XAΥ5,b/u J h 8iQy$!xVbBh+j Z+BL+$E-TlDp_2k!fA.B3h 0` 0o@ t@o>g݄i' W&MW$NO]0a鸔cXM1dx;o|ZZÆ4tRj@@}__Moַz!G01UfVڰY9# MTmڴҥأG/oo_I"׾}GAA!;w[׻Z+Z 4CNv:ԨQ / w T":896kE$ูVzm{ٹs`Ϟ)k2 ܛkժ2V:P#<Җ<]tw mUPPpz TB2l),|r;KSVʠnRխTLqd ڵ*SR)P)} qp,4tp&*/X MBBi!SeK)GGg8`iҤ@XZd*x*pX%ƪ"u:k@9 ڀ 0` kq&N_2,4^0O)cy>YTRvݓ'O/]|Yŋ-[Q͏hiL{h#G׿#* h+h,yeL8!oeg S͚5ߞ?ٳ}XVH J-$v%WBC2Fko]p|\Cnl!8S)oN\ӄ / G2X"j"סήn.YR)Pa5T$HFW  "{ _?gΜ[כ}qV,ȑJ!Ŧd\$of!^@ #@0` 0`@/q)3 /|!9~K+WvwrrSر|򩇇F-0Yh[;n۶CNHVMgl{^ S؄)0ۆ lk9r@ .]Z/z }ɴi30E`PX%m}Kp#[# +fm$#+ed$^D ?qr 2lYU(bfΜ&Y#SVU֤eԬY#g^;D!0Läh{OOҹs M:=7K9ZH&~/_6l4@hp3hPk9iӖLSTUC"V#+ e|J{zaPG ".nغu}|਼ \2/x$[h![$YAe)EBcp 0ֺet/Vx>W\G#\o׮ݳs̙G:}}c abF &@-,_t$-9]xX Ѣ-CC ]%Ā5_b" ^UAG $w+< Z̿S $i!a 0` 瀿zt ux?~O>l֭})25~d>cq1]l>LQ&7o~a]~#,hd!G ?66gUmF….^wKiNz4jIŭvV{9#GF:-.]D5ZaiLA{눔-fZժU>zSe bJMG 99y9d%W9rεj!͛v:wBCz?Cvn޼5l!֬a!.>`wd׾}G2jР|"/]p#k҄r/0AzIx&5;^a=tDW^SF=zСSjIJuΜ9;!ym۾K7GE& ?7+_/#}jK!)OOX@ >}A"$x5:;bD!Ȩ .9E8ZlEfmurYESy 9r,%e{}@hH vޓ]eܦ[)#`@DB@G4A,Ag[@ba߱cGV/ɣJs"5sw fnQ oYdwݩS ;g † EEqq8/ZǦM[Pt>@Pdg'&&* PXұPe1Tb ͝ŋwjݶW "=V|)&#M#x SHd-S y ôYsvH^4F8cG2#0xeP#ڃB DS˅[W)fU ʩ䫔-ڀ 0` s@I? 5.4f]6.ua^>ʌo..nux=z|ѢUlYc',YaAӦݟg?]~jըQ /WUVmA9sn߾;vB%)-[pO72QOOpᢪWv౲m ) X5}%o==k̞=DEȟ>}nѼuɋAIPPFW^1bF*\EG "cwܛ6m'4ht={GY'Zv3#ɺl+WM8\!qd &'<|;msSz͕+W?~DŊԙu;88uփ؆æsf-N>qf{{nܸipp:FH2$`"|MrehI&әne8MKPB?>11C9H0(۷СC\BZRDNS40L$U9"|(/(s„I|eϮ]{ ed!GT#aH7; ZE z %e I |5HD"INN#i-Z̛cɓgDK[eeO>}z1>cxx jJ}[), |vڝظ/PO> xhB pgE)@Ī_f!/wc! 0` @} h Wp#/M1t_cF=vzG%輼|9mժՖ/_yVV``jժ?#j>2_U6pF/^ʺۦM;FW_{[ W̙_|`ʕk аJ11C_xQzVŪebΜ9og~m?N޾:vXJ۵s 8%{_If7o>|$^H^B'uoܸ9 ~Zu _{qrr_w(NM0^s.8:x0.:u l֬ŢE={:iҤ2exVZ|ѩ)<(]:=pK.qFΝ{ ?}ȋh)"gowbXlŞ=^|/V*`+W=tJ VtHBB'OC\MӦ͏=ً7~ӧOo޼% -С#Ԑ^_ڵ=z̭Q^0x-[S 6=xu붔CNr) իG-Z_˿?'z_hyܻ]ZoƉ_åKi] ZtTɒvݻLO½cɠ˗9Ppur=xv(9vԩSFŋݹsKnvvgkWtS&*>ȑhM: 1r.\"w?ٷϞ=cK%J¾|OӦs;+i*8:GܺuҥK<]v< ƹ,V")n:vLc,ByĐ&w=裏1r)>+.?H*e?`/}{}g2u\]%Jeee]xiET4;:uf5j:s{,G=+W ͝_}ϯ^:y͚sԿ!O|q gϞV%ًYsڶm!tIGǏ 8l*ɓMZ :*_ظqSB G}#槒\"))嫯B33oرh<Jh}  6⿀ jc>@|TZܹo޼գG/?`VU3nϿlӦƋnSgg ]\P|9}Ҥ)ȸ:}̲e;ʚ9sFٲM4MSxX@#<ƿx=m*Vus ٳ>zɓyyfΜM`0>~_\Tdj׮KH،AvI?3{"J.Kִi;vsh 6x ɥAF׮?>͚u++))8::5i;&L,W.ߗ呔O <([6 Q֧.~GegRO"t@re\e|3guڽU6˗|e^h)BA&UI&1 r?²% 'U3#ׯHX]c΁`4L |Ba8jԶm 2Kn'N&6 4h0F55&^r5wGQ=8Ĥ{W + p/shbŊXR<.Ef>^zt߾N2k׮۷=z,m:wo0| Ú޽'ET~Q#) )-^}}Y1 R^7o:&iѢWOjV.-:*FBsg?Wh (Q06|\~'|۵d2J$I/b%*Qm]%޾ĉΝp_<yE`E޺nN9yV$rJag͚s¥N9#`z'?yhÅ"PĂ{_rԯߐ^P-  0` 0Ptt?3fК>k 3cGf!F?5j_ԼV:gΜ[h1|- 8rXNNީSgf͚ӪU&f}_N|䋽?}''ooO.\kݸ9jԘᚗϙ3g̙S'[5"D&б/_twwߖ\Lwg͚޴i:u<<<*mݺnذ;wFYn}|N n]ӧfd\޽gddԃ>tI@@}N tZluz~;c,{{ƍO_lΝ{CHJsM4Y& Bh[j5e*Nrrm 1O+WpB@@@ݺ^qݡCs_ | KN&M]xyrH ś7o qx#K#?4aJ >|tѢE...ETl! Qhh~pM>5 ʺD'N>Dǎ/_N9r4l]vOKˠ4+UʞP{c kɔG@`<R֫TT|>cQzUE7cB>|oLȑhAsJOm@A?q2e ŤCQ&g!}'N}Pe N6zuR{/Y4h 0` 0`Y#?4cI3֤N-8.O"q"z\ؑ~ۛ,/XCZuN>[E,^4=7۶mϗyWV_}䛼ʕݝ]}|?w|N߼ykDq]fSN͞=N4G#SC hLUEKҠv˗/?tPΝ&`dҥ>/FфͰOɅΞ=Ν`[iiSYM6pS[l"V^z/_>}S9|V3))ezUFe˖"* D@֫CK.)]4 | t QHH[Yz!&79+8+nxx_"WHtԴi3>c5}cqXjU}jĻwuW~ܧO8aG^_[ _xI*|5ZTCp0H ]n݀zhWTT )(V8]AX9o*\%b"~x5`.]Ο?t/]4dPTH}aUōC!e¾q#sݺ 613fի׹>DI]v8p)<u(tE0{[Ǝ" R;GUil./"umC#>.^l{~]NU[/qŋ99yGAԬ\ "Mvp,4tp[Ň$9t5a? p 8|YeZs.hM" a>/JJl$BOzi=`ᾶlFqjٲ|\xԹ>(99$aL!y|1J II)|;uUxDT?_fm 0` #+lTHĸ~S]x=wkRS&' W$N.RfƎ8_U6޾}Grvvmٲ9&Lrwzn=ڶmϗR7nIM6 /~~O7ob_v3g-\-7nl;*өS`^^… +TO5!01CDE<{ZjV(_r%ws̹|%(BXvϟ/^[jՑ)'H7=z"_"6EHeZhu^vjDF5z {ԩS'N9s6ƩIÆIsڴЍ5rڒ%mHHHvvɓIY-kAK.3nܸ򜜾!״|cǎ/OSMU)6E%/.]~>*^z][\Bܹ7n\^ሉ֭iҔ53wMFZcS.H#˖-sppq*ׄfN'Og͚é]]*QTǎ91c"9h`9r4ХKKƏOĻK=/\FKZ9x'| _PGN(޹sRsX8̼M/G>xhиKvO?]B$8vG^8Nz_~sĈQ8R gΜlo_H 1FG8q!O<|'~2D%b`$8e4set/`:; >͛Eiݷ_K. &x:D[.pgg@⹹_Srr*^2(ڵܹs Ln۶D 8>рY*q'[nX@ڵ<\0xؗ/_+-ZvɋKFjӧʺFJQ72Ӈm}kƍL>4hszZ`:tu+4tY0~iQP"̞= 2R x¯+8]v'*b#%&G cWF-9ё#GׯLy^7nGTaAT#'!Dh߾#}H#֭m޼wjڷ  0` 0Pt̰1`5^qɚA:ܻOyۗy}Շ`yŢEGcǮsڴifTSL4eȐeVܻ=p`$*+w966n6{!C6hЈoux]pOTDܹ jϟ7o#?lÃ,Xk"Z nzl޼7M|||FMʕTlj<͛wf&IGGg??_|)|+f$͚ 1c*7?A{^RƦM[fZÆ/]Jӯlܸ+f̘E qg^,X )o޼믿;w.a G1㋔ ݣw}W<8^$v˗/-[\ <׿F0 V: .{H'}ep=#>~XH-Z?513 [hHqP,^$$ザ! >HHUV#n?/Y4h 0` 0`aFCh͠W&M~=퇍Gt)-77ᣡa|+Weg^xyĈQlíVYsrrrsBܺu;)61W qqY//*pνO&$$Z*&&k}bٺLlnذBݿ?##ϑaP^\ZBƿ/QTv\v݅ Q-Zneq[n[S`W]6l|ԙ3gq P Xzm^^\}j…vű"'&''+WtWHW ԍV33oرc!C ~ɒetݻmѡC'2" }c [(g&VZ31z=ɥdq["M# &]7;sJq׮=))6lؤ(DiӖ~ا$Q lٲ̛T.fZ۷_[l#Hچ>tIn 1!¬4]Jg3^o߾C׮]ӢEK˻ ٰaC^AR*B F@R?yTQD[9s6*Oڵ;)Y`="eQqG dԻwnG^љ eZ"lB7nf t]tCHFM2z -rSV A>m޽h ٬Uqrr߲eKn10|pw11Cm@rOo㧮Ar}Y L,cOzwӕ ӟwmڴl^5-%!q\8|knP+Va 1nRǎً lvΝCw7 )G\(|Vph|Ӧ [@$Ĭ)揕r4h 0` 0`}5hhPب}#hq3/ke+_5fAholJm bӛ˚%ǖ-[hъ#ggVܻw?11B @X4"ZuuusrrΟEJ C1O# w!l* $Y+9f("$b!8aQ+}-]°ZZT *l3R66_G|(_@pSءLP|Y[Q)hMݺ۷@MQWX G?DY2a)"aΊ)|Ac f'_V-1mI;CƅVJFZmڴkذfiѠr"̂ CР)MJHG$S ZAhBxy,^ѣ''jȋ"ȪzZ)Ft2nn1/W\YB"<FEdP4G2 ʔ $8rG sjERpZ-* [d+G#)Bl#P2в [Ib-E}PpvvӁ  X.Чl/4wf^uSNG=b^vv"|,ȠĄ w“A"%̑nS銐}@T@˲* P, #S U0)X42oC῀fm 0` @ 5}. eS4^>>e޾mB B$Y_fW^~3))e{ʺ۬Y =,k!/-R,,BA5PP ֭M{G?of)[:[`3ʕkK.פS4"㎊"?-)}+GLYl5ngϞ0aRzcǎWt͂ۂr# a:;PoQ?BaH*?KBXr82U/|!_b-[ JSX_TjW?Yw_ -9$'9ٻwG. r,,VS iUǷ?d̗, 0` 0P:ԥWTpQqS 3l_GKV ۹yѣW7ts` ж.#7lؘ;?%$AQ)k'';ر+;;޽ի6mڼgԄ}Q퀀ԙ<xXBsg7888 iӖ:A[FOڀ 0` (?0=X1^/\kК)r" pwʸh:5BPd&&XiNVP)kz!_/@K?.Q>^~ͥr\5Wy,h 0` 0`@xkPtHğ 5l~ЫR&,OL^,! b I3bm/|!w@k&o.Kۯ;+^Y6┌ /"bM<#.{RfajjK ku#4HI"V'r$XpCcͺku#47>,(ύ.%h 0` 0`@tpLHBc"?|էemYeDٵIfh-[յR*VrvrܹKZZZRRkiʅk8CU1bbbbx 92$ IC'zVܰ{%\ ykԨqo%4`T){׭۰}N]+UGGgww+WoݺI4`1dI;V5aq04fwDښ LZ~mۜK,Tvb30M6i p R)/DB(bAa`GViӖk?CW/P6U"2ÑA]A ~b$vH*"Br_yʘ a!ŋY}.]^ģ*C{;n坝Jw)##cȑ;Sž!8|rAģ3gT\RJ .mvl ]bx*eV)!T 6L! Us9GT٥R^4?q┷oZu"G԰eG8qrb1KVU6/9r^ 4ڶmGvvnv ZYEHXz;;-S\J.tb|0Κ5lU)[vx!\@pD :f̸Ґ 唰YUh M^P=I1Q2r6_I4jС#W7nZ!OTX>b u;vtq0u09eOUgSR&L>ӳ€*2;4*QJya`^ШCk 0` 0`"WZgYql4 fÆ _|cǎg{xͭL*U۵~++Y|wwhݺm~>z܅]ܹKxx߮]W^|V:.]~~:tfDR{Ӧa687bhRz۶bN< DDDGo]Z+Ȉ7oIZaBR ܭ[pjEQlӦ]tJDA#oH(RU=S@2/I& BͶ8/*a-|qQ^ )Gs#a:W``W5GtKN8J< 6֐ |u-8VݛSJ]]KsS:bȋ/:t|u/N'*u&Gg۷zUϿk:^x199EVG^ 4O8|]DAF ''OԪU_-ZΟ#9ɳT{{GzgΜss>}zZUF{}={{hUV5k}| iStـ|Dsίj{Uw~&ZW^_|k7fϞ R)Sjٳŋ_dgg3'?IFwKMHUB]?)F!鳳k.ݎ=Q z„I$rڶm{ uV] Բekb޷qNNԩӰLʇyoI\0R&#Iۓ'O%6!NϞ=O(2*QJU|5i ^_[Cյ426[+AڦU6Ny5ow歨ȡ.[x֭ۈQP֭adgwT  C\jUTTTv9rݻE?۷~Eٴǻ ȸJy)?\C+r1slb  ,p 11C)X^r 4ƽ{ٔZi˗_ze{-F7)h֭ۍ7>3֖-h{7_|?'O3BC` dIaFU]q LJJy"" 35n$..t0P0`=x͛C-SyȴROn1,,J81cS0}NNo{rã5c,> l'=iG122 ":zZ#V"T+VK( .ˋ/4XÈ.]J2e[YСS̙GH;vFF9r 89$4fHy(/74STm4h 0` 0`g +g=)_N gO?tÆ 6qf|p!SZuz۷ܷ@FMk*?ڴisկ߰FZAcժ5gϞoժ ȨǏ5ٵe_}UϞA%~EOyr:PzzV6m:&fg/ ظq]߿׷N߼Vt鲜7/km&\vF&A"w.]J )SxqAAȑco}ן׬YeAOu/`=9"rСɓѭ^f:^(5]N9jʚY[6msss/\@^Ӗ->|LkH}ј4i F0(qqq/_\`̙3{qMx԰B@(,,XtϞ~~/ N8aæ5jzxT;u+^ K $}GG=zŶYYY.]t>G$T-[/\G NaΝogȫwe+!]J<<b#B3;q4<9rdDhXq)Í`2\9-&*;B7>}&Zuffر㱩`|}8%8Z4k֢s.j̘neaDR]I?.nbDR݇-e;W$IQXAGhQC/]ή\eː[\ɘ2e *eO$ K=zݹseduԺ q4jȬ4(33s޼y-dPOLLͣzbw$;"ٸqٳ􉄂<}fC)۷?Z3v8W\ŋW}=ޮ]('Z\(4h0≸z [.]^7㦶!#GM6] +`USÞ=ԇmRC@{ #:zuxԉ\G``Ioߺ;vLG4(<8 -0((Pnj^DDׯ_ϛ7ג-2˖-x$r nۖB>| I5jݻS? @cqA,P.B5=hWq<+ ޺u{8ndI?rF)`LJ#Vzs.E# |Aoٲ_Tb{]Xw~Xh,ÁCǎii&N+9aS4h 0` 0`ЫR&@LJ?˧mUB%ww{iժ_=k֬>}lٲƍZp ثUvg{h0^֭[{^d$7y__/>~ݻgΜ-ZxIf}yuGse֭}̹YTXƍׯ߈e۟YM[n^tof ݻzM+fkp9surrp3] Ν{_!NNL!1wnٲM|xm4&ɪUkdurԡCQQ12N?lQ``۷ 5\|% 6&IPp٦eLPYgϾ5k_Ul.#l;v޽윜? B q~N @#5ט&U.]IDċ: 7oŋUB*;9u9##}9kҥ4tӟ<~ڵcƌ,"G/NNcƌrJLL̍7Νk׮ٳgCm_0ᎇF=z,3glyŇ ;ww>uҗ}aKX=p Lzަ*Vر>y .rOdwbV A _2Dz CʋRl߾Q*SX~OLH_ƛ|B{#Å*UʞG0iuhON4a8vQo?Ѳڵ;&'~}A#7Qc*\zstgm]zu֟:uӳ_fUŋw[}gΜ=` n˗M6oÇ 贴 |խ};::j .Ұ ݸq'=A!Nv7rqq#G8%k"t*7/e(bgӦ-Kx 25jBʟ}߭[۷臘NĚeP>Tƍ^b*0R&ӯ,_RG=z̼,k'pklLtϞ}{Nqel\ʕ+ EܖoݺLl1# ډ-4~6l,-ruu#KҒR [.bD;ۯqѢHrDEH={!#''K˗Ӟ>}N_-]CjH4ˮR%m/rgjМ7B>?rhhqK'7ndE0s!Cb@ޢE+hѣ'FB!$-s8傣_R3~sQ6leqV$Ӿ}xԓhQk:X8IEFF!""{l5sޤIS#1sIB׫ĉS'N`{6w +x/]^"l]"IȖG޿І z*\=;ȩUpp9s9 Q  rRCڵRsdhyqGaߧO8ZYNpmiiGGWllzAW2noA+}FE^C ԁS\+ 0` 0`"tHnAa L>dc! S&8\3L]?2.oUߙ/3a:;zxx:tdϞ}ժUKf^#G~̙Gٹs¯Ra#>}>: jj#Fzڵn{CBBiҤ_|U:^ IV:.\u+H8nz@|aѣ'sΏkݺmB-[ogω_C#F~~Og֬9D`'%lܸٳSNא"GeʔcRRʃMmۣRbe18gμÇ^vyfpl5s1E0';vƍR(5OJJ>},ޱU6Г'O i6m<=~M2EGDBȻQy̱csDK̒JO<2e8w76lL zz cҤ)TY6/2Tbf"aTdI;GoFm.e">t A5FKd<9f!ą ݱcÇm4a?..~Ϟ} $cvʫ=$n>7|}eG^m/qPk]~#JRS'g9svm/ĸGS:(ϟزek& 99yhii'OM;88Qg_'N"Τkysׄ/\"a>-K(c@@}u50-ͳfl2iT )u˗ @kPz=oUTMJJYn}5kS;{'|Ekj[;wMHH¬[))\ʉl/`c]<\f툈~6m!//'OXjoIK@ xT#5j-[֭YYYGzuk{)S\uW\=vxĜ\]#Maϝ;[E L>S3E"[כ ss23oc&H&MAwѣ2H@ұgSEhuM."5Bq#3;;gSۆ s;zW&֯=DZ2K1׬j\~=**Iڵo߁#GccvvvSkwwE2z 7nL$F WZM%Uq$/\7uUu?`f-6l4xp@\iK9PI|),ɮ(~xx޽h1caRS'.Z/`ӦyyyOjՆ1ҥoκ?6iӎ )үe"#||/^J([7o;ܹ޽wٳ/87%M__G_z~K~pM4NMLM@+S] wЉgk֬ գ[ Ej}&xJk 9E8av\ txauݯ ͝}zVAQUnER^M)~˗*8?5W@0` 0`E-ޑCB"ƀ4>kؘ̞qu&fo@xTYCVh7譲WxmoA[lӖUYpu3 0*l!`0!5߿ɓgϞ SV,h6G0aXL4'ԅ",l}-[FΡcΏ=6lRB_ˠbP 9ґh PUUVC<ʋ _9ʎu_ >*D dLؔy1(DZ1`-AF6-y * * 'ovsˏ-+1 r_#$T$ xpHxGĴjl)NuA8%Z*fV@e'<*D@Ջv [^QG0A2<; ѢG1@hK-# (*$#- # Y@FB 2őhVT DDFvEgH{$*C A+#Eڀ 0` (zpa3 8mҺɩµRLLǷ}|%b弒m#|EרZCa bVtAQ$ pdGYSҥO?]"TlqP,>vd:ZZa[L7e$&&xo6nTYL (EN[ MSs „$1˗ĠeJ|Yu$I ˚eSQ%  8 G*Ae$).P@cJbP2r *xqUPD#PY2U7VP.P5 SK-H` @ ,X^ łV*"EGԩb wIZfeGUZM|,HL ʪ-RשQGV)8Җd - #rd1p,k(r hVBb+ B5eY <[p@\hl{PĦTP-Ьr)҇`kofm 0` ?'W`/A! CFψ=¿֏޾X_5kh]t) #![@ ֘Dl" -=zȑĵׯƔeP3O XYH#N]tyf{ױco~![Z9bY%ɑيS!~a+ b&<~)$lc2 B SdGL`Uq _I% MAUf[9"0 !œ Sle_V">[ !.Jy[2pXNYQa!!8@^4?G !PM(xC^+PKTDa%/0,ed+#$Ê1 @#ZU {d+B[;,e4HXc _ ~?<}^S ay |ڀ 0` (Eп ԥאQ&0hȔqFF@YNY7i"hSCChָ{\5:H_! jAM^#T~3h81mq8h#J6Hȑ€ ==k@CHSWEy mVdS—$ŊCK+*AėNQሼCH  $)#pX9g A19*&NY;G2+2Še@Ey+Z2X@ $~erJU9bEƊmC2(DGF ~K BHUa58p XVFJ#袈uĪ*-!$TY$#2e8Zٲ"`ARFBN ځGUV#]Jw ͝GYk*_ (/B#T  0` 0P@/{#G舠QaG;-v,4qu&k'N\3a:5wEг|\ms*o~|!HeAx1 x"<hPF9p bJefd@S#Xa BÔYH>vV&#Ȱ _([PY%,㢉 ST$$e 18rGfYA“DZ9~.##p*ّB!~tKpMe 1W6E[vu5d)9V@bЩV 8"r8 Gh0,k#i!#T.RGБV-IT [DTp@ĩ31·쳕<[=0G*Gbľ"h!$)E% bCXreR!k*E+(РLW[h,Go )lQ\+eΆ۠@0` 0`E7]ϠFv=WL5q)CGq]-kSSW%%NNY"!qUbҜۛm\$}?盹R|9fI5.8FL/B–)0BHC([ي)"aY2YY%ɩ8gLߊeUEFYLلZvtj KF/m ,h-l!eVhaj] $ GZ2 >+N"& _Gҕ`QI a*<ɳ"leTHEb RG98).]+0mAiPF"4ĔlE[ ,(rD,ULhEX2eeMXR,*ZQ<+-1b%*;l )Z^ $)ȕYZLuT6kB߄aYB#QO4h 0` 0`zeP؞C"Ƅ H?jR̰Ξi&M }3^Zp=;6z5;9[Vj o젻MT5j)PvNyL)ʩ]6ga+; >RYpvƪ8q8 UA7qČchj*Bq@N1ڂbJQN|`r?>^9|}K}b7S9ggW(Qљ|'LeJh1T)r PZ@XJk0XGxhd!PLpHީT){dD ad\]8 s9c9 e BZ|\@kf`&]PGȵ(I,%Aܑ)a>bppH #9[HʎSPF>YE. 싣 pX1(/Єlo`aPap .&(9)nAؑ)VJ#K@fђ"*(}E.jHsr6ZaEŃKbJHS=2aEG4jdI;0|);r#\Ô䱃*ԂAp*#8EaV;Ar ) bD/F$&TX-Z dKRd\Y;t B Enh 0` 0`@x}AC 7.l@Rg2e' צN@ύԩm7sggWzzۿ[ժU0E_ζmTu#1Ѭm!) U T)*i ń Nš JF-Z޷qlK惠@ajՆdCCڵkOx@ 6mpڹsTd_"tYDUY4d˖Y5˵!B)2ѬYИeUjĤ@Vj5 ne>>~p/dE<1N[ @RJUal;ˑb$2k9iѣ~q*^w$08x:|\+8nsx@#& G*R@ &e޽C}%OZ~NN. XBLq;  ,d⣋$H p PI8bRj֬ؕg]v^&)B8)44 XН"qÔvd!2ڵѼyKeY`hٔ#"@y #Hا Ī% ͝-*P6Y4/w 0` 0`"^C3w߱}'?@OHY&5yUrꔤI  +[67p \BިQ={=x>^|Euf=Ѐp4QFNle Z2CEsj Y[ʶI4lJET9µfF[֭ۦ_yst$ٵNK=}o/y^H|EϞ=k,(;QlU1Z* ]GHQVp,|)-bshٲի'OEE[G urriժ 4i G@ s;rj厰[۶@)BbmHyhZС#Qc{h%nitAˬ !")a@TW>dG]z5$$`].\9s6`ۑߢc3"_F՗/_ҨÆ)–_!`Z*yVTT"&`e'/Uݮ-VRdR (N:^_q#s~&/dP[B#QO4h 0` 0`zh /!bPjTt ?cbꔤh_oߊaëTjժ/Yаڵ/cbV%]\lH-_ס>hGGgcu!VeP$K :žo@KPf b#"5k/^[-[)%*$ChHTWJʄg^VZ kHQzM//?~Q&"!d(&\#k8ŋ [- ;j^*B5TA;p$NVmΟHRaMr"1@S7 AdS=nʕkII)G*v@` uxw`޼\PV.ݰ0f8E0+l,ɱ0 E!iK ӯO?cϞ}* 0ؿW+< 2x!;Vu^ N̈|9U1X(/B%Y W PiРё#ǎ?IQ45jrĩɓ~t>œV$$n9#GkP˖mo۶= FAK3@|ByfDDknP$$$͙3ZI 8e "G#FժU0E ԇ "8)* SD) f騴;wQcǎ_rE#o ʤnE/ _+B$;lQQ`RR꾈~~Q1uhɦJ<ʩ-/ 0` 0P6i{t|Oyp\ŭvǎXj Sժ&LU6lժMÆ+F`m7nn{SKzr(%߿G]9KB|G+$$4"_n= 4i rQpp\Vi%J"u6l۶qJDP1jӦ] 1EpiĈQO<&f+bc={hV}-Z5kB*b2/óSаz'6m'}폖U^V@ر3f͛}{^MQV$fچ!H% _HT)rQfmĥPX"$x?P0tۯU2."|ԇ @yѢ0JOM Zӯ̟x\\륥e<#G}9E N59r'ϐDD~ٳrR^s̓<2yS% !+M6t)mII)!Cbe=bmESpBRu+kƌYժUW:>}Ϟ=Ӧֈ…Kv?Aap_]t;~$0x~̙勘)_8׮,#dTPF&N8淿/?~|cJo׮~j ˗SRRk=)ƒ &OJ8B2J=d_W=m]]K7j_~mvv6@'أG/~[v:elΝ;ʔiE < y˗nܸ5jC ݾ}_ًGS1 'Q[RNǏOq#s]={Q*YҮS..\o/O 3"4/x4Bw$g''~q »rڎxX=ztν#F ^ȋi#F|"<8-ի@)2utRy# :7͉'Ox\yL( ]J9BK_x(ߦM/~3 &TA?~B񹸡Cʖ)r|9mʔf蜎;l!dpРeb֭gƍ/4w~47"BBi9VIh  *G_'ƒQ4h 0` 0`НE ׫ψ!$:96O~D/NHY$\JJW6٩h)k&22?1!!q|W;m}yUZյvǎ[xq/x]|entt_~Udd֭{~ϞAǎW_4ŭf+V:{|T:p`FkuЯ nܸ936q7"=z*S\u7mѓ__n3:~~]3g8 f̘5>|gSfLLՏ5a,\4$ZьUm.AQcP_az*L{!oٲp9r4J@@5k֭Zn]oǏO{ܛjٳgߍmڴspttn֬8]vk^|Iv׮=0_ǎ@yTxɒe/_NLLHD-zYaBm]BQF-wl߾#A!k>}T ߷Wǔ)rrBCð\[6FF|YsȔN&Fl/-A4irNNNj5Hʍ59},͆k\ѣDŽP;cʕk+W :[ZJӦ ~ÆyyH#5jjժUb 7oSoI7gLkբUesboMPvN8QFKSAF^ufvYrfZ<#Yv+VKiя7mڂq;;z ^Zh)b yZj0ۗU77֭!TNUca,.L0:;ҥK]F5\ڴi, h@1 h۶\Jӡ59Ϟ;L,H,=} - { #^|ٹs׆ w 881tf¥Զm O> q ֺu둒g>OO!C͘1 OƍvijYT{ٲVV6=zb>oBlĆ LݻY~#.llIퟚsn/Æ 4i K\9+H%58bHHZ~;wݾ}},]Ys(+<<<قիp81r,LTNڱc' q%/ RsRۼy3gϚ`Tĉ޼y))͛ 4iBLj5b?ܢ,l7)8pǮuڽT2ԟöpblݺ---}ܸI66?P( BP( E߀0tpϩM#|{^j@7//4>Ѽydt]_ZsбcS 6\Z3۹sgժUlg 7oIO3oߺuxYOٲm_hԨIvvW_}䥤\m߽럟[lիtPl׮Ã23= d[ȣqnԨsgN>mn4TRrgr!͛VYgΜⅩ-o>B_3={a.F61!r"b+TعsPDxԩ_ͻLO_;L 8AFF7o|ͯWXeeeӻwߴѣJS$#|Ji>"VZ0ͻw_Qs #\\\|}bv=22zŒX8\J)d5Euѣq'¸`IL D5{rW߼{?cP/RCs,̘1+&&vɩ[nsH#qѢ%Y'/ʗ9|[DDԬYs$A|D5Cjjq9ro22d91 'h7̓cZT k׮N+ZR.̲r26* [YPñcdz_ă !.o@s*#Ǎ@RA.l}'OٳT^n=6&Lɝ0sl#M$0b r$$?tpDD,(Sܹ}޽';.{e$ׯpٯs,З6o:vU+S+W@'W,44͟ڤq*4bktرs Uv@@СCG*WָqӇرz*ThذappݻQkѢUbbҒ%xamIi橩4}ڵЦM;:t蔒b*dnҤ֭V7Aw۳g_||qh&ZVQ1C$L\7lԩ/_F˪UjKxӦ-pʗn֬Edd%m5j͘1縨ht`G>R}J$bN.]5f̸,R-$NĤ IVZ%"޽R(jH)#Z!jQ{]b-[hl4'Oj/jؼyK樇\y!o?0;;w޼ 4k߾#c+EaE!R I }͛;w’W~(рӧQaʆMOϜ6mF=##ftB/mmf͚$o4ܽ{/ Gs;{ܬl) BK]]1E$T`ԨɩɅY9 &L:}۷6j_MXyŎsµNGmڴ83qm([<%C"[l/6SƄj/_dR>>O>,!Gg}>e48&oٲ5{l=4vxvT2T299|}bbbYŦDN%S: HrYEg`" Oٹʔ)`"~|8l a%R+ƙ.]`9q%JSAkԈMԹIU*װs:uZxx(E#Ax6lĄ}dLr}g-17"krFNz{J^DHy _Q?P( BP( EӀo0> h@Op,]yfMU^V pZ={ Yx)MIٳX[v ,shڴyHH7֭oeeӲe-[M0{9dȰ*U.]sٹk֬0Xӧ_ʖ-ߩSeVp)= 9sɓej3U6[Z:>-''o5_ ;r2e7|KT$N%#U;45Xbde HI#"6lX.bc峼[m~>ToYY91pw-2{1!22jڴ,u=<}h) Dň"_tw\"/i@;?` .9eʔ/pܹs;6q(G20{$b&/^5 ,()S9s333e[ %b1EqƎOq<=qD lj"mv3&OqF`K, PJ2HOI'N̼jU@޽{Kw{}(С#i:*lAȑE=ȬYs8K(3&MY$e(U elڴ8`L)"=z,֭=|3jSX _s\::zy,72G4))̙s<\ln^ITX(Jh-eF|}H5,Yf;wUѱĉBCC<=5D6ԩ3v#G+gɪ:ͱ2=lܸCQ7vH(jR%$m@+ BP( BQ#xL>bLsG/7y5?Ԁ>rّe._xhK^pi[d~Z҆YyӦ-99yvY|ŹsrFɓ߾}{ԩ ;v˗lB9s={bK.~fvvn^}\g칹,-Y[۷[,=} .HG8::թSO$]~2!~DΝ/k$-Z~Kj^aVr ď705S0My%@Rh!{>}LCq㦏?ԩӅIRcK) رsTT E mXlťKW3jkk߲e7oU,XW_}~Ft o϶l$ (1Ivm{a&鱲11V5^xEܸq+! #֠A#ի7[n[pի߽a;;"dd$%D¼nϛS.[4[r5aX_׊ʕb+wK;vZxݻhaGBɈw0_ٳ֭۞?_:t:qÇAɼyܹwɓ6mڜ5j/%jӦK66v:P4%56^ေ5(<daB ҥi'7  c ߶meKI22V\5eʴ;R[ǒ}"|8Ν{DHG˙8q2ELJJ>}&w"B*Uf̘qŋ̙{C6Ópu'R4  P͛d#**ݻwK.).SϨ?p|}MoҤs9*a`pB`[LD.ҐfZDW\c/~R1xe6˗`$&&'pHjd֬9fԨѓYY4 дzr#ߺu͛9sv'{ߨWr̊uEa hBP( BP(`qn^\=^3=|l5KL祋,[u͚W27x nzlذ)**&==GcƌQ+V3g޽{g͚Yvԩ7w7nyyĔ<תU{ǥ߹sÓ%aZ-~Çcǎǔ(6n/Eѣ@?1MqdTɈ]ƲT֭ۚl=ݿqXŽ##a3%x!;gdd O0Xv~)M"[֭RR~p7LQ. hx1 #}\JӦ8y4[CAv]uVm?ɁIJJO$l۶BNѣ`m }}p Kܱ͛cqfL5t;X3HY -6-|qZP1:vu߾}3g>lTU]*vYj"|,-lٚہʎSa|agࡔږK"qqqe-vKHKK;wU޽럒y77K5ĉބ$u ]tr~rrrBB"[pm;9&9oܹONA:>|RcNPR°TH)o _СDSqK*8Ulk1# f5n7Fڵ\*U;'Ohᑬ)䷈k9pwyiZP( BP("h{4S>azh@_޼š5gVN\Z'V-?|ɱK}d#m5UVf4ݤ(ngZUi֫ٳN*8VQdkkoŔ:~aJAXcRfkTkȱiʰRʕljWժɗMO6DO?; -E% 'IѨbɐP}xPL=*V Ů~~@뇗,8SJXb?/٠Rբ6SKJx2oqP( BP( x߀4? oឦf7%X6ϮY% h?ЀVahŁ_&$; e(ΩOP( BP( EX6'i@> hFxBo@_\pZz hǠ7Q%$[Q߀VRZx?crR=R}gן~-xKiZP( BP("Xo۔n]cOQ}iskVA׮f>wu7հmݿ1c4X숖1b:צM; )\2D^t g:_ >$ŒA\:uBZs 1($L˒HKG&ƪL%Vk U"z; *m!S'm@+ BP( BQm@yMs5}OyޣذN|nj3g,;j trң_%gMoѬE]6@ޭ[w>},--/7nڑayyy(v=""W/e &TFEwA,Y wp# ߊ+Ib Le"KWk/ /2g]+P,X> xeA-[ԩSc >YH2BWF83))e")Kpd#_x*VvݫWx]%bXqsmڴH 1bP@2vNU^EY(ΦTQI6 BP( B( hh@u0taMr;oIo@^|@?܀nټV䁼AFGOMMWgΜūɓV5Uheeccc(dmmko_'y[[r嬘G'|djժ}ܮ]3;C>;ѫWƒ+V BˆxARV+T A"/]f&p|Ν")aa1BV*b$b qq }oܸ5?^ɩJkլ[^իWKD5k:Y5#aPeV$BF&aÆGE̞= (􀉼| lRJ 7#*T&`a&d b/Jw+K(e)/KLDD/S,'6gH +W*Q¢,y% bS'm@+ BP( BQ?Ԁv3r߱'N]c˥Mkϭ[_oϮ]yv튳k^:rKNZvU/QJ&MƯ]^hu֟;wcY~pڠA#[]!üFoߑ0DGݻvG>ݻDl&LrwѨQTx08jhh۶}׮ CeAHEICÆ/_VzU*V\ٳL h\Hc~~cƎOԜUt588M!OT˨SIIB)%вe˳sċY8lC(Z[z{|7gΜ}lwMFjՆ Y۷| 9 RB L^_^D_-J;%zs\F0mmEmlll.]ZPPо}0Iq(/{(pݺ %H:œ=z)d:~)Fe8dGBBf̘8䉓m Arjӛ6nV/jܸ'K.Sc׬YGԇ plI_uwܛ9s6$r̙@7u Ryt˗VV6e˖n`cc7|_z֭;YY+VI/^޾}ԩ38Rʸ`~U322_83#Fx=~gϞ1O^]v|J<ȋ[4/]r͜\6>}|~Iy0uĤ\ئх/FG.?N],]Ƣ,' 2o) m@+ BP( BQ1{QL +^ذ ACg,3cKO^~jݬIj:P5k:ݢEEp%tvppSޑ#Dzs]\\7n:{w゙bbb9TDN$[Bb-*|,x?u_ʢl_D,~6 hBP( BP(ࣟp1|aݼf;nwme݅ /n|O*}zrcΌZcyj5jԨeo_uO$/^TwXjѢUB“k##z:?v2 6 ,9::q%խUv͚;vpoԨ $W=z_o߾cbbҊ0nmm۲e;w#L۶@V㫺-[v I.puy]n=0 ڶmiIK\~a3_h |H.CBGo ''N4L}eg^x\&ag/=#}ǦIfׯ41f ,pppׯߣG֭[A #1@DKYY9Ϟ`>f8Jmkbx||tҹD8q2eJJJW˕"gAq;w>8`GW\]tY__?Rا NKIIIu'H}OOoΘ13 y{pw7}!S\`S9DMvnݹwx*F yKg@Kml-d!3#m@+ BP( BQ7=k0)31ҤIܹ[ֶjFR^ikxd]h!o߾޽`cΉIg% ;;\l۶֭d200x˖mزeP.1tKԇ:abJmڴ† _]޾B.RSӧL]N]BCWZA 0h7N: , h7*רZڼyD?;;w!e¸s%/Ijٲ!y_<Çݻw/_}7"I:UV]o # Y?v'N2qD 0QٳwLLX%xr7od5<G)DkiE٠[+H BP( BPG?= W8F/7o~܀=]ܸ†F̚'V-=f5vΙѬiJ^0Uͭ[իtppS.mڴ㱼Yqq \)_|H6lÀ]Ԯ]ΡEVn߾%1c'_\/ppM::: 2͛o%uɩsGM6}"yUml*$$lǎ]֧|c\ĘԬq[[{ׯ_3CQA:v,<%%mڴԤI 66t {K O}++vGFF._՝+:V\ʕ2"TrD+##kp4ܹoܹkXXʕԲekс7oFBktɵBo?Ģ,tt a%iZP( BP("(=xOA~n^!Wi߂SV `j@ܳڶ6Op_>j 5Kw͙޼is˫۩ߣhڴy@@6l\SBerZ&+t#'xoРѣG{QSf-ܽ{}yگ[ɓ^_V N5h޼eXXٳQt0!;;_,5nƍ[w#\\\󟲄A MGG3suuuOmڴCeݺ ȐWmqyVX9||}D^^_# ժUGBkʔiVlz5k_- #GQ4s-==sٲČ6Nzd1dȰU{әK.Ǒ $B/Xwdf Ly?ɞR|__\R@lQ^"ģnws.*8N8`…+VD_~aaa/^Rկ߀'_~yt>8BnnDNMt:tQ&:u:gc`ee3x3gطh qΦ[B={渮[ l%")T]~n=f4kҬ?Q\}f߷ktfΜū-]))i}㉽i 5mlZjڵ#}.]r=kjvqq]`'w7oA۶Yei/_>zزe+;QPlWzg~7'O^dى޾jǎ],U07ܹ ѕ*U븹y,Zĉߝ;w͙3svv;vmm;tqܖ-$ 6zfpa[A%ի"w~j#nݖX%NG7?}spժ5fͺxЩST\C!!aiiT7e#xRt$#yŋIk`ATah$v/y?!NL͟{A}Ӧ-}oe˖_zZdIJNOH_f-FI߇@eʻxG\\`#0# F"Kʕ2dG֭sο~fzz1p*ׂ6… \tV;!Cl<<<>BݵkϬYsf&peUmkT4h}N\ۧO?T7mڜ.\LBFZҥۙ3ptEP &*); С.СaɎh IIX*#22HB7ݻw?v9sИ1c*TХKÇvv#T<~|! ;mڴȰ_"2yF S<"a۵p NZJ 9SxyD ޽CG||F".\v܅ q,[;n~1*u~9IռyKꙜBlk]w a>}}Oɭ[H 9|(fkcc7`G(!v@@79B0 w$"y|ͻ(9WyI>kD,U~ hBP( BP(^2~JL w޵ڶ Irȷ8/nX֭Z;{XJ['pGG'kk[{ <9ғ$0y,3Ǧ0RVmdˆ)j׮;p}LrLrsg̘e!т*$1;'*dUs`ؘ;;\1 q/UBS++ԊKkCkXCFJ̘2W}(bQ€$$)E#(˗*_1(sࠋq*\łf咑P1ŽԇPȥvv|%0!) D„Lbb|3}1Y#BfS&}yY`D%)xZRyYEGQ"ǝEFBoDɿTiз|TXKy1iZP( BP("7X42b]wb-E2*Q1%$8 Gl~JGʖ;e0Ky7iZP( BP("(=`#xLnzw&M[}]nsA7v}/r\ܸԌ޴9-dd(Ly8C8d.%r5#bD24\%9שSH] `ZLLh3#1g0e"$+_(JE&50ĘH Lq)ĥx)AYb/FĻ!DK!Q#a0 G!CLdf!9rTL&#r)(a&2K$%Q!rC̘ "/pA!QdSb`* 1B")Œ$! Q#jȋL$Ilj~b'X.)k!!m@+ BP( BQ ?^n45g%&B܀>{6ؽ&ck;7Bwmcmkn_wh[V6wx k(%%_Yv~ԧbן~jw/UڹO/#*BP( BP(E`j:Fz`Ͼ\=A.ܽg9o Џxhם}[&tk曻7ܳ-7vmsӕmnxuۆ/-ɲcvNUJ; ~^ae~,U~9 hBP( BP(to@a4'N]plߣCݽ[r{߶{@7voc՝px"m@+))},x?ZjXZ%-BY%Jsb!K#m@+ BP( BQ ?нxL147E'>:ޗ;q;mo덽{6]ٹsUeIU*mwz}L REFڀV( BP( JzTi@{ZOp>xr#yx|c{dnrscjZIIdqҥ2e-B~򉗃/P( BP( EX6~k\/߅?B|Hȹ/ 9w(cy&֩ǣq"ʑ_iV-1iGykAm-~ hBP( BP(6cn}qw&Ozp15JZеK'\J х83wO9UVMKJJJEɲcvMg6YY[+I BP( BP5!ޣ|-#jjЕaסkSC$\J q-%rRŤ .kJJJJ#.ޏ-)[BXNڀV( BP( Sݽg9gt?Bq#;zZ嬨q2cnf?NُofFH{3'Vc[Tj@^IIIO}*VO,BJ[+)iZP( BP("l@4īQ@823w̒)3!`j@͏~-'ӄPn[RC_͌{7/^ݓڀVRRQ;*O?̢,yI*KdIڀV( BP( o@;}PI }F/<}-7Aq _$=zp?;&+73"n]? h%%5\-}g%WREII BP( BP5 3f_o3ÿN zx?;}6хĀP kݪЖOJJJJ0rR=}gן~թ6 BP( B(o@>!=wإ̐osd *;e꣼۹o'8®]O$RwNk?G-ꕔattз|ZAڀV( BP( o@1Iހv6ހЀ~ȯC͋`:=0?o{oG0?~CII'@YY h`!TP( BP( E߀P h7/7G^K~$ݬ;/Op())8ɹJKZ^i;*JJ?@ڀV( BP( >րb~'8&L^4CfH |UN:#Y܄;wo@h#m@͎x1h̳cdΊ~N,.$= {Ԁ6u7UѮ]QFO2 ӱcgyVQV`N8ӻF gi[21=sMLƙC\0v0V^ܴi"i@ȘGdL|OR0yR]3E_NbfRV{ps]RL^(Eaf;%* a֘kƎ{6lDt%MCQł{gn37qZ0B ={޽؄Iu60`pv I8BܹۈF_t #*9[ MbB"fvdZV2B&sws:uq b6%$vQ~#ɗ$Ep r .LfJհӯ߀; 1R=zխ[H-A .fJ4nlРZA; ̗IjGL8E}6̵vbMfK"SV޽ >~Mg[*5oJ~xG۩SWCIGc^ǒc%o1iDLd$b)8olpi_oߑr(4hضm{__ɓN6cҤ))#hkK0򥤒%Al%ͥ hBP( BPaـo@d#C\'xL1cE|h@S^'8LH x(7~AʣԀ{Y9C}Mmkt^~;'''---77A۶YU 233? 4Yg5jzT^yv2fAu%L\ٴ*|Y##X6`DU#  k%$[^rҥ+fUP$6mEElٲM"Fa2}?X0`\g歿w.. RFH /Q`hK"KXዽsɓ%lfbcW^ S%/888֮]w߾O5wxM54Z5<IP |F#L1/D0!\ *n99~x6.嵟={N\QFY[f!/*8F=?FR(F}EVV6ӧ'61N;1R=x𰠠_,Sb,qRnn/JcDR&Lqq0% jٲuZZFhhxM+!¥PE0Œͺu2dƍ PDիW˿ˋ/RRRrsbN3gΦh 67kFE$KĀe 6CN@ƍڙ[rM6g͚3Ky ۶m$ y\B57Gիݓ3 N6cȐaҤ5R6l8džYrv&Y_kҸM6%$$ܼys Pv(FK `ూ`e.PɋcΚ5ĝ`JRY9oނAP(5'֭r(HĠ16$:u*ӫW),ArrsZXE;^ 59-?z_Ql(;EEMvƍr\pSjՆ0/6oKY%JX lmz%H96d`kn hڴi$ZF"e__ݻfdd={v>>~Z>}zpp)S]\8P@ xKe &cX~..CBWb%f1(ѣC#9*AAAGRK3<<#KE% bݸ%9I 2LPg_%lٲ,K%0e'?J&?פ)~EgqgoAҀCvݺ$طo>lՁl}VӦ䗊YObTԩD% E,*)LR%,;;P( BP(_ ,47{8G͟;ĝ SV `j@ &7Uz|z2=UV!B>M zpuNNN%KWwoܸUv]yVI~̘o߾mܸ o|(066~Ҥ)D&M?~w|m$ Gpp()3ȠAC:"hnA8"e"}oPK ѣWhh8I]v_|kns$u>yԷ~+d#%|! a 3oނ|qq6p'OܹweF^^vAܽRjj,a$vIHPd_ڵp7i'}|F%$_:33+44"`}Tc&BCRQFs830h|/o͍pK&TP+L0)bΝg^lذj`׏s>k+Ǐə>}&5J*H0<dQnDn|Qnzܻe)p_,.!~`;XN^}n߾CC# ..AA!ϟ?;!N")JݻKxjܸ #>pdilDFF!/Ke>rhRep#YbV>|%”WM&r ξ_R .a$$\]ٗɓ' @+WSn"~sssѠtR lܹ?{|ةS_Weʔݲe;?, FHSN(L<yny {aId D,Ss1kڀV( BP( /70t?B8}Ϭ珟S]No bLM素7|,-U萧҂zٳgO0q׮=ٹӧϬ%8ǎ0Yәڵ?~m۶ꞟtɒe8;ٹs7M4kbĉSmڴC}ģGÆ `ݺϟe-E+''oѢ%|he&ܰaÇݻAF'a=U6Xۺuȷl:$$lӦ-?( gϞoԨ I  }ef>[^K.g/oM`,aj jB2Aڵ;!!A|9bʜ\RFU0B۵@"|G66vT鳛7oE ֭OOOׯEQv*5sNcQ2g˖i Y㋚G(44lѢE*U\VVl'M͛SLfmhmmK#7nL:lّ#ǸkODH߽~6++ HEiN>;ȏ&g/aaᔱdIJA:7nܔҥ{ F<;{9v:vBḌGk׮/WjР!K,cՇnذa/v퉋K /y bjY8Ā'eYraek}K;vHII:uc'6oLd%;|X2--1_~ya^0VZխkzc qƿ}iޢE/_g&'2Ž(<ڵ))iٹ~mv(|PPȞ=\zM{ ZADQ^$<5&UV2dݻĀJAovp4bvv:uy(pÆM[a 5k:F۶Zv=j߾wڝ&M05kqƭ#G;v t@9G}E-a;=WG> عsw>-ݻ|ͳg/hP$ZI(z˖ѣqMpdk~z+\;44"]N2-?i&Ђ/uփ5AP!p'|⥿L!Դ;wc X.yzƌY̥De˖׃:p-0a$rDfBCC=&]fQހ>rhҦ%K.fxxd.2p ?nx޼y{׮=T_G*/r htr,H\r}~Zb4uЉBq,a0N/VZ%/Jsnݺ~,Yr:u ?k܆dMH -l-BaQ FQ/J 6RajZP( BP( #|f=u%󴐯"f *7(.儿 ~ h#PSGqјkcԩhj<i]UZm8'8j׮˳:|6mf:5Zn `߸qӻw}&66vT_~yk6$$lD2c%wwW^_3N 0<|Ν /:qǎۭ[ !I)4hD:-[1%tˇ-@/߈XbN%_x)h1"blԹs`Hիڵkw\\tkiEY[.Z8;;[g5b58qBK`S旔Ϟ=c*kۙ:7o6qq8/X! 8OLJJqqq\'9 GTT̔)N6>yyDkXrA}ԍأ'N={NLcLAɈ(7 }羣leK* #` g=z,G=;;ҥ+x!~U@79ce˖GRl.h:tEKQM8S&(Qr(Sq*Tjݰ,'/=H4wܲeUTÔ)SCCC3gGO>[zmllaésFpKr^=*L8bĔ'3gG&!q׮]G8cƌcg90(SvC수%DYCsǎ]vڝȹ7n"Ɣ,Yҽ{1{܅ 7\b3@?8s~.jٲWC~ZbϞ}l")g}trrВ2Qa7IyʕT{ȐtXXx}BBB\Əa@c]90Pa0R KauI \kZP( BP( Ӏ8سg?r7mоcN2+]^aos#.iWB^fALo@W47ٞr׬Yq\Kl/2#Fx~w=zrp(O 6 }nFM[hu&Miii{C!Ceeرc8bHKСS^^ƍ+{j7oޮ_}6mapHAF 9hngddm޼hmmw߰a4ivJGٳo vș*?#ڷ(b),,uԳ3˖@kuWK4ªT1<ŋ͚7樐cYѷo"\`c-**D{~aQ(b%LjF,;w v#""jezb*CtQ! YP:?1Æ lReg͚A| 2M9?;w>b8qrA3:99ԩ3kEr̘q,%4Pq&Drj6l|9#uLʗ]vvYE4hH||Ν;Dv2e1r&gΜM ,͙3/?3%q,tѣOaHYbeJJؘU3C`\H_Ҁ:u:ƱxƌY>Zn޼S8*Io޼pn۶%x!/tĹ8ٻM-{jCd#ׄ 5\(Qrl /N%$;p`2&ƑE٠c?~"~'Otɒ8B .ljwKq<<<\0D"A`P~ܸaSn| '?_ɥK#q7*SLƏ76ar [}mcc:l{rsy= u.$/~sn޼*l N=83gν~AaXusC0Yw@ހ&$ƆrI5/_` #$|E jKDŽmnbM&~KK,O 0f[ bHHɓHwD,'֭H^ b 2b(Ld@(ʏ6RhZP( BP( ۟g_i@O4ԻG~CG6v7}.8!|&'EF*+mnĻ<(uv/AaZpăsmڴasi^NMdff7lؘsyneʰުUG 4hM<5?ٳ׭pڍ\wN7}1j՚'Ooo߉6gΜ՛ .!q~vϞ}D.Mҟ?aA{ZzȐa߾};v‹].bcnNpxR"}~ɵkݺu}/J e{cΕ+W?_zO\o:[ O֬YG ٔI&S7n?I4[Xbf-(obbذa#ܧO? G)Üq-Zݹs/55}m{ݻ,Y&9HTT ھ});==3""RCrrmeHEQ8<ܹB^&˗kq@Advv/- ;"2U_;#X]>}&y%&>o~q&.4i9 E 7nfn)߼y3fq׬E5H [ýƏƂF5o'X+gg14i\RF,[<r]PjH.ԓ[(%GI5~"._7ps}Ei1cLr%/oMW\3㇑skP([W)t֨-vtq,wX}l"!+8|5lٲ^<ĝɓD7巂p^^޽{<1۷_q9rXtyeY◊_|v7jJqLQ6l ?܆];4$)um_6~  D| >0*߉/ )^YmժѣQ`| @jmwSo(I!@0|'ȨS;6kbcƌU6 ={7y"884>>D0Xjٲ5'NFhzרQmv$$$FGDDDG( 6޵k/^T~Å ^p'׌ |AF;vWhh(bcc׮]9u*٦M}?1ٳ711166.,,\"4h m۶?pPx8'={~p7b 92L$.]!˗r`lFS͛L\\ܕ+0#Rc߰a޽) 6̦L:#::Ç^^#YmݺǏce_n޼ݳgo0a[v}LL,@bqAF_3gz{DxAEVǏ$HN8u+[<8}LBBGGe|=&;tԅP>}Q#]>G5;v"..ܹ ؁/n޼)~QbI"Z\/M6KDޱc'Oᅻ#JgΜm߾#"~9걱Ԗ޽'QqZ"""'gΜ b;w`ᑣ/(^W6ֶ 5p`;d0N#qJ'툉,od9d#r$Sj&#&ґdB0۷?r^~l%g;, %5cF::h &W,0Я2#]nղU9<׬ tCxD^\>$3|u#GEDY f/.ᒉJ/HFxadUq  @ADU0basb`"&|KFaŚ& T"a^D6,˘HxH2GKOdgAV0")qmXDRbf4`+VK*[II)cJS&bb\b *L($\F.ŬB a @\@"& L8Y)ȰlAAF "i6orɡqq ]v7R.J(B!&cK bIvSIT0 G# &6dU>O?h~XA]t%$t0`ࠠ 69r,99uϞ}")b8 A-QGK)bC0-HAE^bSVq!gI1H5Pgsb%#ĦpEC"x#^@Ό Cad3`T>/h[a #Lq-bĸK؁DK\%V *D% hBP( BPbPLzȰ} v?xS944\F$.(#HlJ`r02&PLJ LL#t!|LYз|2_Ĉ$~{ {F>z$$&qe2#dBI0ytM|)SŨs $'12_ )F ϙ`Gt1p MԨaTIQ.eti< GHC"*y|p%Ydj&]@:&_1L/E[!8 ,IŒDE(>y,aD #L\I\<ÝD%*r߼+[΢l${g@P]7;2p,|e2ˎ@F8Fyæ%0cQ2 z{#LK  3`M!Hd`F 9ő.16%/$!V_~N Dt vo1Œ<8;ׁ!22 r)$X>#b9v*Rd2P( BP(_o@7}=bLSz3?494IӔ`9৩AyIyOL 蜄GO#_hժUEf<ˋ9277L̑DK .\RHeUN%JPJ&0kSK|/}޷f`22ǔٻ!ggWAoDQ/fS+ƒ9~S;^([ l}dv]&&ea"2%p) aVM/x?]|$/s ؊eb%M-Hv ׎5b2W &f]AT@d%dR)|%I,!)./&D)d4ߴ!H.fG9|}:b vL$DbVG˔#ĥ(BW,@9bf&asK0xP}Y8^TI"Mws ~)GvsBl\ݜIG,Cr)֌ddE٠UŬ%)^Cze  1Lo5`5&b6} G(# fr_Ċf#3/zX%ZF1E<1"##$Epd^e4y'~OX_h1"/$%.yE{4Yx`}F R|)~$H_\pIQ2/0 hBP( BPQLzπyLpq9gq49,'!(IH~R($ 9 98I@~RPniIxzLV+|G=n)KҀ~"5,I@KЦo@=ʎ{03ANC(I@v܄!NjZII鿖XX4 Zjck!!m@+ BP( BQ79sϴQcf0sOp<{25 ݜ9 9Asce&<̈w/7^z7!Msh:?P( BP( E۟gǢ:{G3~iӗ͝'8'=̉p7;Anܣ9w23ˌs;3frŴK.mݪUժjZIIo& Х2e- hBP( BP( 葓!Q3F3ai3ϝ Oeȉw/'?;NV͌w2ogJ~9>TRЩ{綶uuO-BA_rJ hBP( BP( hS}M3nI ~ vٱWrbof̈}53FFuƴ+O 8zV-R;*Y%JXK|#c$m@+ BP( BQ72w3Ǝ0Â[1c.\Ɍy)=bFմ+PJإ ? s4AA3YQggD\H8y6#bjŔKɡR.'J >yBU*mwOTd!BڀV( BP( o@5uc7alx /jZ؉̈Yg3ϤI<u>%|RȅK)aW%s~Й,y98Z+)w6 BP( B(6}1fܬMpƬ ~x:n԰a3NH ?u6-lr'Ћ ;<UTVM&HǜiN\֨Q 8"S&tihE٠vpBa3I?5GU//`߯ҿ̛ hBP( BP( ['L7y™/\x;?FząiB2 ?v:9ٍ'AN&N<~? ըQr_Z 'DLfrX˦c#9ÜRi1!Mh:UD,$6 ;Qﻢ $('HiNm@+ BP( ◌?7g1xzĹS.3gaޓ[73.J =r(-DZ锰ICN'}|&)lB;Е+WQLdUSei~(TRq's+1.Co'~$'XΔ-'w% eݐ7RK0<J0QLH BP( B%6ǎ=i<t;OneE_ ?~4-pZSgCNK r!93.4Z5jr2 K*­%'ɡJw]lwTtz}g!RkDwƏ!x. sa$?b5k: GNS Ym@+ BP( ◌h@= ;ϒng\͊:q2=hzSiRBϤK1)ЋI/no@Ko&0d~钉\TYz7QRђd&X&f8~ g?|+Wsd9,"JI(APQ(ss@1[{zz&3:TO̝3=g~YO^ZkW}+ΝֽW'Ǡ[PI7mVC[Oَ?*~m_~/e_f NOp>O<2lty++;P}){ W? Q6̹3:Mkq?!XLY: W_w,:ٳw=hx޹/Oz]ttשSuޓAiW5-}C ڵ;sWJ֐4G9@ m"_~/e_~wyQQ g/7oѧ?^j9s~E\!,˻_Qt0 ~SN_1 ~ĉa1TLhmk֋P(Pw}ϧL7I;WFq͘ᒐ 66?@j dB[Ck+i1* oơIдHՕC˄/bԨ1{JapaC+)5@5VhFVMLxrpvv_S4NL6G0qz:mQt)wϟ;7;Rt6a$__]+)$MԤ 8RoLDFGppS-[=~!@4ɧɡD-ԴYsg-[MB0YY{ܩҥoRUn|dMq }cG4)jԭ]w:;"Z*i='RPtAiK۷gAi Z>:vCV;uK$"6m6ixxxa;|C&'ϝM  Ckk.s}\\,Bb>|kϞy]9ďL1ו(8i[uHƕ(rh6muփ۝uDzQ&s?@hȐafE'<ҙO. O`~򓗊j_~/e_~ _?=l<~~Ǟ: ]/}z*ܽS}aO=ws1RޙKpzKUg;wСC6my?]8Ɏ;#]G.]iwA|3Κ5W׋jѢԇGHM]zMww-[kW k@+t<&]>52dӧYݻdK_f\\`V>j!ID3g>~OF 8'A<YAAQك A.p+RZz'~/e_~/eןe9t_===CĄ@ϛXwc_V{vГ%O|TU5ˬ_},~Eҝ/@ԩ36m7s;7|֭6jԤe5m;G : h޼%/͚U6曍psrG}Sc#b;;lذ$sma#БOhe1AiYXq} Iْ:Vg!pg9DioL,]۷(C)kѢ% `~Am`QQQYYYN]Cڀ@w޳d/*n5[ ҩ-?iP&AҶ߼y~|Z<`r޽]V +)A7x4 ( ͈lA1"|EȄO2EjBJ8ed0<< Geă&8Ċ9#"DQQ 464  e+mz5VMIآxӝrP %!!` b&ɓ$-6)!&ڸqΟO~!Qv톗K/1gӌwqbq÷n.| 9,[';P8xVNj߻WC={>y7GCx>>~ϟm[:;#F!P#֮]_VV[rtd H&TO4IL(gyyO~r,6XĤKʦNk5jT'9|nU"$C [1Lq Pcqj!pD>d%+<|xɒew+W=BLW-55RR@WS T丸AA3uVZ](s I}>>~ $VVVݻW(&&nڴ:t哔RQQy픔E͟<١]wt6cc= &}sD6$$!+3 Zo~6` cEQQ_GYt~q{m1bT\#N`ݺQ&ӧ;32 GG'Z Qر3JL8ر㽽}.LH3. P)Y_aa 6""3g2ڵ;UG'r!75$y Hܹ+/Qcjctԅ(!ɍ_@ݻT+ E,wwώ;E޻zcn`9eqNV\u~ͥKesyX1 Ҙ4i |e4VNN3…IA} QVڈ >BM>rLéS3ibB_s,66.&&԰+i !LO>@M5C<"rppԊrqq> p B ݫ{>}:888 !a)SqHhb sIE%Q9r4k[hذQQ =Ȑ]2`SgW ϯڵ/_bS3_6'C>P4E{.y@q1q֜(Vlٲ5 %$N/rAA~/e_~/eןWh̹3Ccg7=^j~Uwre߾.te/@w\<⋯uٱc;`_~Oo߾`B;u꒝}Wu~͛߫WKȿr;vo8YG6mu2ƵhQ*|I3>#R| 24P#yV'Ov4i [#88ƭU J =<ض}Ր]Y?`ʐ2R5~eN2"ܵ9˯*=:jF$$,~FAAsP@2%#[%"7sGb~ wg3lGR[' ~劬q­}dž~~Q bmp;er`9S?NZ\\@ߘOZ>ԙT[2e˖S>3o ܩX< _߀_~/e_~/j3@GD̟5k9I?8/}z37Y#ѕUE5ys^ʹ}1@SWk.Ըty޼_ j]tۿ?R^aPlo߁{"n}*nݺ3z[zzz (|I;wyoӦ']pݺؽ;aa:GҶm3f_|r~X;O?Lhs\|a+ѣWIɡ۷aǎO/,$$L;vƍ[Hfɒe|5v)η\݆ٲe#Fҥr ҪUtuuGYG!hR4ʰuv^?ٷFIJJ!nٲ̙s(ЌW_8XbAaUաC35K.'C\tٳO_?aNHq1;v"m6lϝ0` ӆ >KV(GO0U_b}嗣GÊhqK}n߾ݬY qP*oJʢO!C/pȪcl޼"Sٓ9C okA/WoT#==N7%+W!b0̝ϟ7ἦ5ΩBM`򉍝G';(ExfӧLh&ׯe˖t+**׬Y/բо}%ꎭ^Z5] u>-.]*߶-֭vȑc{ܹ;̉3fGo}lin=Ǝ#qtԈBll_|ѧORE Gɀsc=T_&7YfZ@lz55O`tdأGs.lߞɈ q5Vڀ!Cݺuj`gϷ|2V]\vz2D }…sB>tq=<<]O/YK|M>&L4o޲gɋ= Rp4L2)S޻WC ͚ Hڱc93P@,5mt+bQ .X]w?Gv7~©Sv1#- 8z8U%:L2iڴWtCѣ^Xj՚-Z9::]z=11Xt'OvO$C50ɖ-nݺ֌ZB$$$RCItIٵJLLbNN3KTTtFMGG y63B,:uڛo6bDdB1G׭.d_~WiiO>GvSQA& th6:ta" {4ca,X8ig&K+Wv:~ۻwkfZA=ǎgthD?K/ukΝ_FGIj:vXN8Iƍ f0/Lx [1ٓ0)ˬg-t}}38cKYY{S\5i +ZPLQ `;1Au~ȑW=@HRs;:{o(#=tș3wuNNEgOlY3ii`C5Xed95dt^p|jܻwѢT̍iet(֭i$Õ+W;vjٸq3{j_~/e_~I_ @{:::N|q%nzzaeê ])yTUr^;r,pݣGӧnٲO>iժU׮Ϟ=I ݻKKC`ke%% /z9[߹s⼼nUv Y`.BG CwCb=zC77'O1Rmvqq#C}Hd,Id&MB%Y7]8IKΪ }5iҌ(NHzTM닢ӧ;O:nme#bq޾}i*KSRWr*|~If/ W}ǻv>rؒ99/ʼy$w; K91qXp\]=]AIp"!!V ݓUTR;J n޼>>~.""*@EU#D&$|RF`|}a^U*\TUr.f߽]}i_ w-5[wy̹m۶}ڽMܹ Huҭ[;xK}^gN_/ěQٳ7lنN˖1/((ڿ?eM4:uʕϟɓձξ1[:ܜ8q_dO[ 2e_/? {bvwTϛݬY 2<~6lĽ{5g =zUU]]jy ~8$ΐ!*Q5jU˗$ I5)Zj_=&&2:sppW_}ݻw_NN3GDD@yqȈtr8!R _ض-6n|>|[o5vuuA@@Rb7S۶i~֖r-[޼y eJC >}RK_ߢE+[EE%f=|8$$ Mt}zQ@(VӦͩ!I0̙LeM甔pɒeo֭.]*tlvNLb ,|cɜ(uqq!gG%G:vvve7e̸mnݺ+W6;;y!}'/mذ]wsrru6(7wK/QQT'諞k׮Ӑ&M,Lǘhdd`f"bhcƌ+/Xx X=駟 '`␲;yRDD@M %AfhhL22L 65uqɢEX1:FDt}Ia"IVV^ 'Yj jڴiZYCr" .O^fD,ב#GFԐII/]*g66F [ %.S@Ʉ"kyQn E5T+nܻt&L#FD(@N6 ہC?LoH֭ih&!󱥟C;r(~/z \j)eן~a窧i Kfs zqvqsg,ˀA 0гg/I_5{׊?^*qžǗ?b߽r{b{s`~S G_I-G^~s{`K,ŤMvϟQe} B9 Ͽ\j (7o7?gk2dƐGEO.͋OO;v|2!ٿ50 @srVW߻x)py4gN '-@DBzl={ӥ cLLLF[;ՎN$4pfNkԐꂙˤu l-pf1@ĭRmҤ9It+**Qc#}Z߀>Lwlν?.K,$!V"tΞ=gOR"rg\&My&( reL۶AJ;pDD$Qn&74FƐa۷ȑ|@2vԥ]YmZf41nݬ"2'0(oo_ ̙3|Wg7e΋o[jG/e.f? `[? +s?+O[(zĚѷF-깵mEX싽{[ӛw{D:h ⋯W^֟Tm[:W?=ܼyqbبٽ{O >7 :{}[v&c'4iz\̛K,{СÝ:u%)˒0XyyoM߿O,ì_~>D ?~׫ 3,EңlOԐPa0]v'O?%(?|.lٚbf7mڼ~e֞?( +W_}s.0 R[.\\,K[o5={.BCɐ X1C|Ѵi?ڰa[u-l25{,ZBC#?Ō.tԸ{a?cqpaCf{Gp@mKۿ?Amݚ&$|퀀 'LpM\!,?ٳ7Ͽ`#AMa9Pa O5-[7ggWm !^6D}pKʕPwN&}p~aI>}ƄeLd\)W|ɭ@I ybee &9tȐaN![qb˖Y~ Z[M#n˱q|Dǎ0կY$k֬eH姸0G{y>|zղ_?eK{_ڗ?ϿeCA7"?zYZZY ogƕ-? L z8WխjY֫Wqi| @oRZw \Qx0C5parC8֨ ճNN%?V}_ww6" ^>I68k/xg緿'n~otww  5kY s&/H\d Usͣn~zbz+|raeKo_ȹsaM lQ}]]ZfX-ǚ5뢢)?Xho̷b***c Og\>t@@ҥ*._*,,?RKn,6m:]Ȑ_e@C3}/+7h3u6uĩGDDѬYϞ=w̝:GAX/RNN.u(/?OסC' uʪ3gў>}fimڴo & I֯ЈB8ɋN8R#hnnnN]\]͠k׮GIa\ZQqX'OrppĐ?Cbbc5qfBC0vޡMHH[UՕ3ӧ߶m.3}89`P +eG+Ce/aމBpXK}ߴi˵k(>)1d.Zz˗+7o:b(ƋG~KU6–CgZR_~/e_~ٯnԩΎNs#DI3wἸĥDj#ʿg>yO|z҇U%AequYݲw*ܨ?BvAZ+r;u?Mۼy&M5mڜW}1֭oLo=ƍX˘ױ" vi۶?EsQڵ{zzƣGO:u>h\R5jDR,Ijq3u4xF^_~uXXiDdgEq)%Dtq0H9 D!?`XtP@ &5G-@ >@ 0!s!s\s("H9$&*Z!-{ JhpG-~A)esH.jb|2+%& jդ UTCq &jQ <1Q 5HO&yp pѣǡURh-Q r%\iH I-> )!4k9}|3] ÆqVAAE|ҁ$ D FJ8PdzE| M]l@2MZC¡C iSˬ@';ܻWc.hJ6Z68gCɨ GKQk\+UiL8G7oUE e}D `R^MRԐFʄ$gtZ@],\EE1G$͠)ZuZ% ߊ; !RC7FMѡO}֭ەUq\?P;}K߫]}zT߬{ޝ;ZQ$2#sQ}}usܻsޝ U@l`ur][:\k\}^w} ܽ}Zܺy֍׍7oܸq7oֶ74KZv{\{ի+W]vJørjèqXU?@eU}\`cep ˗uGECQh?ʲEՏJ-Qni/ P˱EXR}/(.eVXd ,UXp{RWyY2,*p.]*;ً\8҅_:wLp셳.;w̙ V?}m:( ԙ'Flg/ ?(*l.˼+;s8zFq8;<2aNlr|’ &'/3e_=w?}>rE5W+/_QX]{`}~rL)ݞwuuyo5> -tt.w~ݻqΝY:UkQ]8*GLv?fͺyrs I;un݆9sb0G@W(`<Z@X>޺5 TU]t\?:;H sYNp(c3"Z_ Oh<ס "C.DČaBH  ZPUAVBDж!4] iPWAciZ @R CR#)ޤ&+C9} ShDFGA"`hṞAa豬1-[RUtH4 '.x+shZG& !?=۽W; O^}u,dF!+h<(Il޼S#E_q !pL>bEh f"!MBȃȕZE4 5LL\V888Ryw&0WJjM>ƹm u4LÇ0p ]̘ DETŷ~?Fl!f_|$-Y;:Wsj2hmđ5Gґ TL g8 A h1p Z&F_QR 'p8 ϴ0iX 曍^~U:#0˯fFM7n*V8ո^;O6m>k'k^z%nn;ӂ۷W수9AsgƄϛ:onؼuaZ {Ddž5/" ]f&DABTȀ1/*`ެ㣃@`+f&ΙpNpX0;h@[$DX"g3 676wN_Tod_Lߐ >>~~ xyyyz{xy{xz{Ow7wO7w7wW7wMpqvE@>89ӦMqT :̘@;})Y4i#gE};0`?Ai  l΀zE׷}A?ad~l0wQ{x>#֧޽1Wρ޽}ۯπ}?x@A߁٣_;u֣G߾}Qإs>{stI?i{߫ûvxmvo޶n6jAk͇?@٢eDf-kGЬOD7&Ff@h-,hj-hcM[ZѪ'۵ov6thnG]>ׇlnбGoNc'MΝ~~jRԺ?B^Og7J\-~XY*2~EBPsnپ y޷iyK;ozۻyʈ`.lyfH#1[@O+}-ߣV(Z;bO:O D5u6N(`ѣYdJNNa#L>:BSߢUD9ihD(ࠩX5őhcEW 0-gZ-)IJipTҥU t)B>E3DơM:fDCC(aD@I'&:- 3 0-"Z]Z9T 8 at&>aʊ+ țZ%D--ߏ֨ oKAlca([*I+B0;^YW[#7 qHP|EWVڐ?]4(2F e(GfV+W@L<0F_0! G2,]91ƹZ1Vc@0>Gĉ)4# "R) ODfrOED Q1єɹZi CD(ȳ ][+@ЅVRRZ -ӥU ZnQDxbI-I <|S-̎tim9vaÎ]`` ~SÎ?Ijys'[mߴbWWo]s]ܾvWƺ=;63ge)dܸa jz'cmؾ6;I_'m5޶z֕`7ؼbϦ7-mKvoYg˒=[do]MX7}Ynڒۖ9[SXuR lNn7dm^{ڔkSr7-I[u⍫[zYʥ+,KMZhajrbj%)KRR'%,LJ")q!X QX0 cZ΍sΞ3;:6z5wVmLdDX-"$t-fDgF"(8t`EZa ?(?[DzZAJGXaaz{Dxzxx5 wϰjG-B]KS]f`yt058ـnY1`..A.΁/yF0c?'LkhE4ӦLM:c$W0 L,p<}''GN.3܅NnM6lѓNuqr8aС  JMEkbA"P΁)a"s@_!j L%r-,W|rr7; ~ Ise%ƹ8W@|PpzA8aȩ'0cIw&/[ѻG5@3ӽ=- mѭp݆u:wEnCkuht#IChepA~t2AXN;\w TOCwSs]{nGu3ol~ Ф>2eAC:lQc]&{9Luv )~<ơJ^;AŁ{Uj\)_YT]Qprѽ[%2G譞VuoѼӚ}c%'/M8&<áʃ '.j:/@*eBA(H DFY]\>A8  DxӜ!-ɋ@ h2(D"hVytL]ʘMq4Û:--QE4HS  RиCM"P GtqS85").rZ"iʳ74RZB0|!>-jFRq,+HDd E)C%)#҆FC٪5>Ł߸qsgma GHLe] )|EĢOH@l21Q B'<E "Dk#]ZE5u7LZ[HC+5*" ٳtWDKMq"Т@ PCUQ6jYr#ODheb 8R1]DS o3Qj&tasD)MZA\G3x!^Օs* k !d(hkt1j2(EkA zFdhzRYHG:4j-[-s鋩HYy s)V&֣tVE"Ra[i &Qqq|D~BRqPaEȃ >xfIDATeZ$`hZ)@ pGTW@V|ŗA "glL,POL6:0jM [&&G [P6R_ĬlhmhR4lp|YA—FmFhFW8 M )s@RkKHGhuoti1![! m^Wqq%`$5&"DoLDF'mmI׌}#1 ď[G0:tqEr">V GWLE$ ph,NqhԕHta("g`˗qh9TLq5)1hC2-?Z1)-]f8ښ}59rZNwm޿{촼:礃nPaK r,ޖ{K^] vn۵)/˂-P8{c vb~ ۹nߎuv۹yksM;W w)ܹ`₝;wEyz{R-ڛ8 +-){kR6Tm-N_dOҬmvnYy˶[qu+R._vyeKV/K]4uŒK,Y(uXxqEIR%[0%9ɂI ,+>!!1!aaBO_`9|?:a^܂r?gn9gGGG΂?kּzm3Ӎa:4Ԃ!!sCgF,i9t@ЬZ V|g~zt{iZtnޑn>V@xGy[ߋGW,=;Z"\#\jl=bvʔ[K "zGyxyxCh-S5 Vߟ_i nACja-K} tl9gЭ(g&'?IN8dʐCG8=}gI'xL'U_?*|vG]/}XYJуšʂ.>rAU{^۾yiS흮1 M+'xZL)|Twp&8ƭ SJ )41CI!}lՌ+|)u?!3v8iҵ(5ZMe+Z MF^RO+ugj2'!]̍˜ӚeL×9p+'Kʼn B47Hh`.ˆđ!* ĿbJt<|4k^ evCȜָ/om 5FShOF$?rnJ*}dYR:Z ܈?!hH [ 29ȄVN$%e&z㒂-Me)q+5ZZ60&J ЕC1N2#+k`EXF_]ZL+(qνZE. ]Zo:q_tDE`%&CWR @=_](0>bBדqb PLm5BHV|ƥh+@Vjm K"$ eVGV ) s ɁI88`Qj]s "< )+!/ 6UZ1d+e k9"JtƿJQ&RcVШ94 BI}hZc(j"L ,,(sZ![h DL,Zq%+9џ5& Rm\FƉAM|*Dp,4EEP6mmּc~n-yI|(7x_;@i.Pr`'mp(? tw*$o~p_Zq{ZhM[KŹi9[ sRokѾmBa6s/P(gcMٛ o*X SM9Kr6/^S${eɞ`u{VZz0kWdŻˊv-/ڵp'XYcEa҂y+2WX #5?cс 뷧R-ݛ<7}Ei{3f\oǪ5{VڲbǦWoX} [yVnZdڔuS׮\fŲVZ|EҥRk-KRRR䔤.NZ0uabJ₅$$-OJC|y %ظ&,`0gNA Z`Y⣢f"2: z3먨 22>"">,r^hd\hD,[XOcGH\XafHl̘:"`f9Asb@@pP_`o\@+~|g|l?#`g9蠉l/?H6pe3˫QQ>Q^k ;; iO_oW{+sp natu9%5=5u _.ny _w_ow?7iNc'8q3<]<5j! :a&>qO2taS b}8Ct<`aj:B>kO`{ݳ[:c`uiХ݆5ŋ/ԡ菂G6@#wii{=zzmAfjl~wst[ 2xԡ# 4|z8ױO0k4n+~TEY@?~W]-ꊂ5ŧ MWwLW/@KWo|.BWDQQO9"S1Si|R-WtADMVƿ`J_ e"ihDM8xq 4pZS4qPP FmD"?5^AWJc( A C9bJYh!L!LW>a)#2Ŕ8b[yI HtP`ZW0iH A[)Pm+!&]9*:I* (ъ B9`cVP(^t 4o@Jڡ𥦱B FjHE(FQWG|&V|%A! ` i r)t0!!!S:teqAcE+su3aIA \w U\ AGF.- HM@CMh*țq%M[DDB-"c o(O! ¡["Nđ4C ([MR:7dZł@Ә@b?4ą&4qn\CCEW`hz _&x5 @+2!d+%)60 Z%5.<o0qbA-jjfmVtW] }<(rYKn"JViyVh)j2HʒVhlőDći E-+N) ?)4<@#Ph|Lh) ҧ!Y,4i颠(d"M8?F-|9ФBbH*[1҅"d"(h t5IRHB# A-ZBԵkwEt`b(F_LhB@+z4beJ$>]y4AL8@KTeW=zbҍ!89EMD Hl%3ɐ.4" 'r!Y!(H_-jL%Li&tC9L!0ՠPUD !&4JCŁlʕoiJlEW2KGLh}AR( !mmѲ*=`9e։‘=Gmq8A ):\py>K?~@ZI^ziC2gqhfH Jڿ클`?vh8z ȾGo9o˱xtƣk]yd{YF pC{ʆXu8gKWXguUw*ZYkUYAѮU;WX^siԼ̥2Xt4w܌Xu`;fݻÂܝڐ1{dݝ&+[ۙm߲6}Ӛm\iuVYbe˗,]|bbI%R$/$'IZ eE '$ϏOO7/9.. 6v! 11Is&͙] ,Gsb֜ѳ㣣g͢5 DJ5?bV<Lϋ=慅"4lи: 1 B9! -Xs_w\/ڠ_Yc~̵[]wm9rpk9oYEyGyFz{{{yxExxGzDyzGZ:++ xxFzX]܂܃݁[.>nn~u]/_O@? 7)Gv4-`TѣF2zԴcf8Nu2}8-'C9 9mHG@4 }_ֹ3ѻXACk@H7n=GQ9x l=SNM0#-[ϖ<[~u6_eGW^P2҇Uϕ|`asi|":7mڴ"R roդqf͚QNA7GMS͛FoY jRP "%>rfU`KD|L8 8,EI)+bhpɇ զ$QCDDM4UlĢLXXi`b 5ZXjA"$"4q&-ZK/;w jdr ʘȊ.L#ġOI &P暜myZUOZ)QWkF mrLhe j01cM\M˸7yDd"䐑*:oJQP"JW 8b1Aq -+Xr.B!: jڕZ/'2aW#- p4 Z(SY`4B) w ȴta""8,nP,i} (7AҤ?"ďn %5`P9-@W^yB#D RB_IhYA T*Cp @\Wҗ+u BqE E#0>i@DL,Z@)5%L}HDBc&iŬe0!`_M9E s: ?xoDshZUL(\%%{ gD))=}-]|̘q 2D8\WlI8,)4ˉ 67 π2wr `<D !C-YlADJ@ FYL(+"yj0H)QK11GMQFS _EBܓih! _;[ Dތgt|Ӣ @RPh"AZ8Ѷݻ-[t.-Sr`Gw)>RpENS ̑;U Pd){:^vc;f/<^]Yq8dY'`8ZXa2#;Z-NOl?S~*-7x:u<}ˎ[z4w 8X{Y~,wܵsׁck][{| ]kAΚ#9k]w?ڳtϪ+Vf*ؽ`皼v:Xq sU;WZWY g}ѾMt`φ}YY {rwmܻscO5ٱ>;cCV-k6޺n5k֯\vV.]KV.I]xE╋H],5e"GK&.I S.^h -=A0o^-"66} 1Cj$͙<{9I,5щf-M'x " #þGBhx-Bg 7:,:δJOj;1, ]A?зN@P0ǂپA~Q>>>,~>}-_|NwG{GLO wW7OG /Qjc[S.Sgs y20x!̵NG#F;:z 'yN0@~S:coz|ᕼUT[}Ïphπޭ;B4<:>SypvvE%!aAppOJJOJ:w9~#~,6lD@@'E, ,XZ^}<[Zcb֣G/Dx@={nrrJXXD} G5sfh/W)SЄC+ogNP>zBSp~h۷Ȼܹ))(۷?RP.LZ)):uС>?iGy02CA5&00}eB:trrA*BRT"B+IRLUc.S:v&&ӭ[rf0^^YX6~~ <<< 0yG OtsG4R7/@0A06m:;ed85"tp A0#UV[e P#Pjb:uڝCpD@&ŕFVJVF$ķ; x}iC0:ti "0"\EX6l~Mc.?cHiJJj 4`* "p- 9U\P8IM+o? 3XMPn&h!HOpP84SƉrnҁҀIklqLKFm> &iwޓO$nXeP#'h˧`M@ eAA$&&tqkhd>&Ov~EJtabhC oL"7a]͋%5 5rP q/ҧ/ZC)͜{#!p.EhB _P&:{))ӝ7*/q J(r dK2)lz|2@=R6|>ؕ#B >M7a""WTTϾpح8gLT2QV)sl{Ctv"_LזgçK ten;JeՅVhiB׋I+Y&ᨥ ( &Ҧ "Ͻ<1Aر䀂I+Chm(3f9Z4j*Q@-]ʄBŗg gs7NIh@N/ )DM4ha ApX92 &m &CShwI>б *ӢZ`IJʜphjN:5 ³BbOr0:P`~Em`7tMd_"0Dp!Ѐ$! jp¡ѶZu=zhѢ= /9Q{4DS9r@8{4 .(œ?sG=3gK3%{X9}8p8}hϩCO:m%;Δwp׹K2o?_n9_| k9lޚ3y+89́է>t3l6[o6:~ Nd7|lߦc?w]Iκ9l8h = 6em;ZWݖ{7Xoۊrݒ(ws~Φy`cME{doٷsCNƺvoزn׬\zڕW\r,[vKSW.]>/yU[O.IhNlʜZ̝ԬgkK3n=t5DQl=t=Fg{-Xam}D[+گ-߀,yXu|l.;{/΍fN]/_yo_x>O$RS޻W7?oKn8̙O<{QUڷt`)U|Zʃεk7>sl?~cOD|=~d, V`zxia4T&y@Bjb}ǐ!Ν? a>HbU0r x$ΝU֠hQ"]bWHX*&] ?m[: DjB<y̹x܁2DmЄVIqاOWk ݻoV֞koÇL&g>;vw>zeK1a 1 ѣ%%M4 ŐsXZy`խ_&ْR``͛YQ557$7% 49+s>t==QfH1٧RDL/lۿk׮5m`tP>Ƅ.`tR>h,Ls>}]ϾHOA0"tz0i<,]5RFG- RBQ]Ҋ[tp\oWP+2DY0Y,*$"OZeW 4,lEn=[RK9dDRQPtc\װ&dYHHHC 0AGVODp hB/pP2rei8H億Յp [} I7Ң>w};w/ȷj|J. ODCI‰!oCq4'&C*8@V|Lp_:qԱc'}a-"<0LhʖJC2' b͚u WeR(>8޽GPfWJ;KTRC GTy>ʇ 1/B"qBxƉBӊh-O͋pV?ܹ}{fѤSM"倈tD}gDd9ʨ)7Zc%Bh} H1J-p΍=rXϞr#*)9ăIHH? o `7I +VJRs8>>~|.hKqII+@`8THTD)Nx C8*RDF[5 Mn}h(9PJӖLwAPL⣄ݻ54!T[t[8K+(5Q[n <(ϚpA  Y|4;::,M)da80>*ChHS:$ 4 GW+W#>!hó[yPQ 3ta&1_@DC`+41`*[髕7hŖn ;ѕN! ȭYtQgZDi=enK.ǡǎш(\4|H`B)74$R>xMh*=@R└Ј4/(D<8@@j$OKLZ\(:s?k3XOxˠ>/jTɹxL_32n5ʧRPDp|ח5? m۽ۺM@S-_[>{Ё3G,G?DpdQ,?S"T-ŹgVFTʯ8W~ˎK]:v҉O?"b9? .uт0/sHVᬊ#;+gViKKl)+Xvpån*?xcYK/oқ.oPRK%iJ//vx˹-B]8 -H?Sv(LiN姟:x^ڑGo=omj-Tgm o׆ݛ l߳ {kaNZAvZ` :N+M~p{I^Z~Φٜ@ֽ;7fmߔmSuׯݰvkW\rڕ׬XjU˖`ɚ%k/-Z RRVˑ)) mdQ} .OL\f S{Cx`%R/̍]c=3'l0{NrYHQɑ£D-5iE.:4"jδ"t7LఄZIw<~w{^Hγu܀13Ym l<7`O/D0_`_ ?_>+/4?, xfpXy$שS<=<<8z4lĴqN3y.GM:q(cf =mPf.ctS,@gN4g* @|!{;0=zwE^cD^ zzЫxwV0G 2̦À!uÝ>l39uX1=>I7=\PSy2AUw].WQt8;w|)R CGa #/:3ou$L6lؔkĈQ_}1cx2e*<@s֝#Gwu֬hlgϞ,v:ta藿3qnjyt/'4/Q-[1xP#mGYY{::JqLʢ4j>@B!SU+WƜ_}͜91*t"teDBF HᙠIL2Ԥ@ǎϋ1@egu]RBd*[U b5<0`0Ċ:GFΚ:uN4X +RDA4d¨m+ ѧed+!!a{V+7Dԃ\)B1)飍GQ+&!s;ȡ AW_||n޼u4{AqKta'y>5X](h\fl>) k:@D<-škF M}EjZ!1">SR×+CɋSOmIpc>IT|D(ChQo޼x^ }5|2L7$nI  Xr@@nbuڝ5jlE [}jJ`*G|@Pc&>L `eD2橩KϟاO?bȤ&]*y"!dh)]Wta`lI@CFMij4'L!:6vi)8rh;d. ZabV: $>]BSUL)-R6`t5)J)]L%C'a@ !P@JG)E1q G(;PP蘠aaKMi}"EW  Jh3'8 $-cAY(iI] Mn^ع3+!!sDcGrj_ Ь *IC[iY '+IrАM*PmM5cuh2$@ BȭRSI?:8ǃ.LO<"e$ms4e7 9|sd,BDV8D@hU ty/fc򰁂<"xFra=nuTѹcy;Zpr\txa%ϔ UgW?RurQ8V#UK+ϗT):STut^ɼ'TʫCSg *ɯcԾDndz+|lwݗeUUytgGwT͸rt#۫WI|x[+KT\J7TZжˇ^>+nG2/qC;gΰ+duNpЮ.X:Wu(tq֩' vq,?h^o?/$7`NZqζ✴m[߹u-vWZr3rwn޹9{ǖ]2LݕYt`Gсyiy9[ rӊl/y۷gzxx`ͻ|♧^;ɓwڍg_p,Yg0=s!pUVVS8O %㽼"C>}Ʉ0߼y֭)),H0yT .L⃟wZrXaARR2DGYj6lE#Oǎ a^--LJ" )&n'$%-e$ ʢ oo߅ 1A߾]TXxہk׮E0G 9r4AIqML\ ȍ) Z~cM̓Oy$śH /NŜ \'MAX3DDD};wfJCF{lYˆU֭`Q:txQA^V]]o߾KM^θXZ6'"](8//gEyD^t9ʁYTMGD8``fp%<bNb0O RCΊc(&+Z0a,KA Xh?s7fXh6¢e0j EP+mU<,Xȸ=jTYk9oy@ǖMląĒ4$|JWJR\ԙ%G]IyBG6-OTV^a%c4kL97)&,lvE۽{OJG"Be)"R,3Ng%h%<فJv9psA) < "p؛sİf)EDDr` 26+0ˆ0/Z򌔲34Y "-+DgDdB ȜM$5.޸-PT"neԖX-[3w'aCn8bpGedlذӤLh:88!eU Y5j d۳go Xy!W<]`1Tɜ;v<6GIH/ ]"3R[bbI9C# L˳fF7b1g }̹(dN8TGrP!}XXi`ŸeQ^>22v?QR33ql(RFM,$ "1 Ϝb=zƍܦC\mwBP^X3f&bPdf7oΝVub ._[-c+@XQR2{ h5dfU "1øqqCڪ0a~uD<Z1.%M&xf1$ܹ Bɍf D#F!ɰl–5ke<|҆ 9[ƍ[5 Z HXBF2|ro $BР!|;) :Ueِ H2"vB A,3d*)l 0V!?D!kF;% ;HT0V Q`d3SBePp0B8d5îQ VHQLba-y~mk9flݚƊC5$-;3@bW GQ^*϶% 8 +I4T FC,f|- ZpR*SC H, OtXԇ;@;9h5_pT@՝ #b0.V]ipKd[iYa+[·  C${+X||,)bI7FL1MD!>ht@ՃC!Hr!(찋Y6|sPdqDdC'XdC9ʴYGJeuJc=7` ._*..-b:R5^ÈP˽XZzb\iy4A9882 5e\h 7X|2V!bX a (fõz>^ȁj3dGs+@,XeAiPL|bBnJ;8XH650J7(m$Hwx' Y&> 1cҦM[޽(,7MctJѺM3}.-xK')|z| GKo^qz'jq8.r %.vڹkgɿzg ):Wx\s%W.T] _ݻ)}DDYZ8|/sgÇV\[>!Cp+=z?<߻W7<(ēWul|nذS:ick?2y/7Ͱayˏ(o\nCeܸ׮]'ƍ/^,&Sb)ΝkOgp,a_}.+Y|->:˗2))Q]mE55X0ba'&&IٳOyI+̻P~~an~a L 3qV+\/Hy;l R`-Y )5diQ ^ƛ}wŋP%@ 'ONfϞi挗9rwjCL ˘ Ac\tqE8g?{qE\b[z-rW A;@{/@`'zJJ㛛8]&o>AP؎Κ3e{8~8w140)C@ƋW\Mllnn鿱1֗/_<eFKX54Gp_Q]sD.08˔dhࠚ,Ȓ,JYYvHtc҈]a]# 7S8G!̰ 7(bb]0J F||, * 5mYΞ=a5|MiΐaR& [@[[tX1r5p4E~{{' m4553, Gi9f޼y+:(3dq1ޭo~[:od)c 'jdYHB@4/rkk;l<9W#̆7n%*!:D81 }Q}b1Ą-+/7#փa& 6JBV11q")l.8d- থCX}-󧾦5E_L Vl)#WNNnmm]UU5}A9ZViBwݷoe ܻf)Ejݴ 28Ri[o6}᳝9Sʦx! SGpEEfolܶ$K Aؿj} ,!0&,.,XJ:T 2Y@Ѝ]h"8*@m%Ф0r`HeD 4,|B2YǰCђ}abh"EvXYca֞M&?6'4DW =@2mmddd1:5, PfbcڲK07d]Bpĉ/L@F,<{(FK3O[ү:s6J8g BRVB6Pv=,6-:De9WM氆y+_hEAӐ"HaAtR\(E{6N&ϸoa=Df!ĕGFsC(Eb鎶? P1'tN)EOlYƙ4E&LbcB hZ6!}׾ 8&! `!+E fR1ckVfӧG}þZc妊檲kjojxnw˭;m=Uno] e]Wv^骽U{Q{^W)-YW^wRGΚ.u^=֕ګuTvV8UqTWyq݂z @EaOEawyAWy~λIECQ!w:xvWuUuV!?D ZP 2~50|(zFm"㾁>_dw~oZ$z _-$"zzq"K7]]dd!pw61u605prvsri`iMfmicnv6n\o1|kεTyɛ!65덨}󭵻 @*A(xMWk_|me>]]$SBŚ?ˏjcKXw^Pll{Ee =%%+Ϳv|7 tg:֛n4[|f *mYf{csHHd_@cpkp˅sCMKJJ rlQmF.Q`wgse\C)1qvvlIR>~ SGӸt7@+@ltdll:~|vwd<<q5 E;6x~֯_})Sgi~#BіSͅ nܸ?cA}h ^^>sss:kI>-Cmΐ)rQ!yk0:4jʸ"|vӇ`9bP#LNNA׾μ"c kWW7=ByZ<%9}O+N  V6XCX8yqd,1u䐠R#Ë"o!`8 WRRM|dy_N3|šSK(_ԋDZL<& AQ; }F&:E))i=#(pj@1W ៽0l4! TTT1)` Y@[N0Ke}}^CQj%8g+~S>ȣPp~9bQ (X6wo~Mu4/؃Hww۳~oÆMި~P,ڀ>Gz#L~!(3KJICIyI_l'[Trrss_|E<''6!"<ӟ3Gq2E3 1̃ ait,YfGOkl2k,+.+$[Ɣ!12SI(buqqѤ9mQf& Ԑ}Q5R'R"&8lɫpK!-PAb2!x PKK/5G̨ rb`6guyHAYbW2ds^+2yj8sOGGghƗ4MHR2fPc``Z'r1*dn/&/}K ĮĮʂ 5JP.g"0o*O8e",S AKl"$` AQ,;7yezc! (L"YÚ̼F@@w( Ɔ^q(bWl۶mgKA %bfP!t3!A[ Ɨ'#V':g/&c+ ,^)B0&{dR!Y ecԤwtO}]AEK  ԋZ>ei+}1 %!1ȸ"fXұȒ+O@ d%l֭߮DWx .f#~hˬa3 9 8&/,ё>ckZknloPlx`g`WMWll-o|J/JjW㵞=7zooxBWCioݹ jirRws=9Su`MI_U}+jԞ*,,PHQUq?*z+Uj:]uLo3@ѯ9SS]}BwꋠRGeVuB[M\uW8_ulkgRRqK%.u'sǯ-\rrIO_8]xܜ#|<܃\]<8KM/++.?Vw8\IAم](TZXZRpTޙy' s2s2233r2RS35$g$ĥŦff.CFLģ%6Z0Z}(ӋhuQɇ% #AQ(o!||)'=}`}>|{x:}ogG[kKRG}lihhbefUaf-,v7~Vˍ̷lްTxs[l2y{whzuM AAh7א76|]]lڛ;t+^~cZÐoruϥ?/ǿSY^Z 1kPC@A18 u_@o4]|&u-oڸf̖ cMjTUMum0|j@]`Éڢw/O<6vv5v8vANhٸllOm~<]]{sC[JMyⒾ{ss%ٕȄ"BA2Iƹ6 :U'T֙٣cl8Cң{キfZgb#8s -Eil @SAJB_'GNP*"_hR^Ƒ8bNmUC466DEw=s;Pojj* @!𪯿&-- G?R Dq Nz12yA'>܏Ei VU.s 9|r4KKK!5 m@|'BC閭+:D?5bq ؀> +|tX\7('Gwb||Zb"ׯߨYvc0 &q$qJF|/;~$t֮]䲰pȑ_D@S Bsu-g8r(/9B_B.UQh)꯾(<@ABլ*SVƃ~^z{C!C&bJ!r J}OOO0KD01{1@ƋxCjC.TaD4|"aeF0aI 4lhhB䊎a&%(Vs(J윾d|,JNN/QcΊDTkel55u6lq$c/=@sdrt􎅰λHMc.S$:(`䰇&Q J 8`|\~+B-%% =F˹8`6L|>rjV- 1vT`*RaiH `eCuRXT,V&]SC)ۜ|Ҙ4Ɠ2uhҥ+TC(Dꫯzye4X>= Sʈ 5}A I>nuu-aKΆJYFvFnn.+J5s^kk۞={Ǟ޳?zB2e/Q*222 UֳgKO}O3* K0N )}ї_z!""' idƘ༲a]hʤI> t(3&$ab+gG )biDgY4FYAC*#dIBÓWF U[me_B Ι\/eESG⏬l~xY{Ѽ `s@sF3kX$aY0Q,~1vg,賹+ {+E("1` ݢ: M Y^^)Pzi ZȤ #FQT300P> 3,0LCd}h*BLDc2lg"KxA6/͐ ,T/`H &c=uvvP 6Y"@u`w܅r& M2ELYp(¨S#%W u1pЇC\H+ZB7!b؈Ptj "S&l૰0mx{pLJJrssG.ΪX> ~K% \a`{ly#P?L.N+2JO< @{96i^wA]|VUwTvh Q9S=S;U7^=V>zwV}@}tnr  z=w._>\{b@ɾ~5'jOՖӃ5kO ԕ ԝ/?РWN{U=^쫻WY]+W;ktT_nVbs9|bÝu/:WuL3ZZQv[O]?wZkN;UVzSKO]8s&&=↗?p\jrfNv^a^B~^qaΙK].-pӅK+),9^P\_zK>IZ!&&tttʲ4G|:rpCI%?$w y=#pG Bϻ#F WQa**}0<<z4(4F?cӤCb|TrЖ#kC@к CS?ţi޾<{UP{x>P^,Y]ݼcbl=}6Z76q54rneզ-V7[h,>d"x{v`n`SctM?ְЂ?,-羏 @K U}G`yω?+>6â4|t1 [7n٬ooh7pjL홞;GZ 6*,;^~1啗_~Q8$m< *~<~0{u읿ʾ@Aиk씺L2&&&ōxx. ū8FCC#xi9rV8sm[p8ČxC7lXO&?_… xd T@>777;;ǀ9m^xqqȤ!>4C ] Aǁ rYٵW-ȧ{ͩ{ z{)a~|_o8- ,JÏe'*8X__%na>8QOmٲ3 'O0М{ᅗ%SԂb9q~!&_(j&)Y+눋Gx8MBIE}rȗIII)2'd'&0(</}ȅ&&M VWb^X~9sazb'4aI0(K"5$DNN|֭;h)(/}F?441 f8brBAfe OL܄gfiELG4cNDIQ |D eLbU=55˱E~ Ι(Ζ7o iŀ¼Qff }D`:O0[;X*9v2ed/`A/+X>c .1DFBJ)ihB4;5 m+`1IK`UU5L(8Ad2q HHIY6)fmej" +';V̦CG?pffs ݻ {O?VчnvvviW_}~FGG``aTcc#fL#ҍ7sssCu>D iG5mB(2iYy_Pp נ)**:qK/Ĺ+((8}/( 5I[XKi("b82ШGڽCǏ+C)3hwb0P0l\2@TKJJa,^>D 1&8~MsZ& NWaFc+dJMf4%%%}AS@Qb.w82J+$%ԂƲL0kCWeVFnlR} lle8*6 q2e4a`qg2 =l"y1>6J&[6E~Ǩ ؃ }/sB ݑ1+cܼ8X^ 6X!""|o ݍ/ȓ^$M槇 @?SGkyGí֊J0Y5U5]3jGzyQ5V>z{`ۍ-7Zn n;~w\% RO*4_orqPapq?;P_2xvxhㅱcͥcMgFOםm(k*mTQ@QsH G.4]n4|y˃`ϫ 4^oXPp:詿.묹ڡpjk+W\}vikW*sKn\,qg-x% RRE`~єܜc9yE9':^pdѹ3E_:WLSŅŅyy9Y99Yi9i9)) /)9?>)/>!;!!3>#T?~dNHAe_}w)"-"ֲ!wqq;< \+8*P-pzhΡ}A|.cLTo<P7u/BiiS=::gϞSwhPLjS?y3~C_@R@T*Ӝxuu Y{σ 8XxHW1s }rL"7􎷇,5iB;SXXnڿ6#89+  4_/GN#/NhD CmQ;R B T#"@]ZZQ&'8{gpnZAm%&&*4aa!o#LNNň`QV+4788G\=1444beeCs6nP<٦&QH*L|\`>|(O=~DccӃ~ꆀ \?db6N'2n/>+1sD0lpZxs!.Axw<",kME _g("%pE 4n:E( 1`Z/Cw8ؤteE*/58{Y!ÉL“qɅt!!Q2G}^B9DW?1׳gqySV*G1h^"pـWsRh^PΜ)(p D@0@#NtOޙ&BQIʱ$++^N*1$*gn"7Ծ& MQ|뭵pHjT 4;,Nh?bbiB+CÒ*bV1NTfÇ(,ꋹ]_B+ gQx??UUU+_y0::UA_ g:XXX1蝅lLtPz&8Zb'@!LMMMTꉈSn0"&ҊRfc/(3A8 &3(ADlg(:fT!SaL%lqh)L](PPcOaƈvI1Fko߾ dRn @SLL( !%%ʕ27jheaQ>rj^|Uˆ4L8y7i*԰,cGo}.]& iIJI}{ϰ..ഏyPG& ӧ_yeu~{WǟxGc% }ݻ?tD<!N5H2ZBcyyϸO;p/ ,...))*-ih2Y)%G(GF֮x0EQ:'N@(M^a~ȉxȁyaUe-d(4ςàc*nYNQ2s %TAs>ZI2YRpHt"DT i@lff!dBEu"2f䋥1 ElPL455kOClN62ƒϼJ5mQڽ{`'AEACz_3xr:1 rXX'?rJZZsϽmQfD&2kebB [~L#z{(@:l?|ǟy;."2ePKEFᢢb @?iڪ EI(16LC.J!H>B*H$NMM.ձA0.. 2j,˜+Tci– 0+}?}F^#]a`+ S1#Vrvja"T1h-6X4b` t؈y_D xxYT @ߑ@dN&sqQ8Ű@&,9rz'p _8 f8o؉TƖX肎0FC3a:cntV.ةY@&9VHannj]  72z+TM[ ~0 *C nɗ )>ǓO>cz;wUv7iR=WtU vWv/%<_?>GF{kǺ:*:i5!=Y>Y1Y9P1I[m7ۮ^n>ruPcMϏ7m<" JƛJ'ύW ͥcgǚѦұ m'Z\i0³hֲkv5Ѱа8i*q!1bCqAWda a@:L @/}j*:3^L}PN 8쭅՗>"=<\\ =zy{{zx`in~^!ޡVvYYq s7٪g]NoC]mߑٴj )۬>k՞k7eh _CdZκ[;_ybC/~/¦ЅSYcE/ +]rV`u`P1I!b+?ޤg~zlձֳm[Y7+.>>pv@}RkvEec]fc#-{L#dd_47G,'[v2$0|]eƳ|g iKve*- a~''m၍wy7E4t8qBqYFG]~?)gNL\J;qhկ~ ne8'GH`ƿq^;E8yx<ȅG,()id_ps󘝝(39 Bw#<\v-8jRG+B͵uD 6D/\YDRGDxׯ_ Ԅdroo$ s.8J+!#;w95!,^;*t_/ uȧ-z#G P 8@!gNt100G` 73Ю a@}rr}'9=)%C>SB*ܼ MF @>CqZ[2vx24N5߃~̂iAtxi& @1yBm6=w<",C=}< -OW (}G*QWJJMp?`  200ַ/}S r[mys/,oRf^|Q@!,M쓃Kl0`;d90S8)%LNN/+TCdHѐcpp9r( E461r:ۀ%;s4s _YY9\ Վ+&r1X0 % HcVRPfff-w̠TAQ BYlx૬ۜ9?^ Ȭ?Y'rFDe) 2CYRrcGFh jW1Jd^Kh\0$gFA]|Ƌ2 .yt,ӇS؞LI@aYCG(kTcPf}}CVV6ڷ/|1..sy:} 2]luuu砋2鋚!)KMP#lCLDRSӱ+4?p\,#:(ee;k6J혴Ep3@0܈}6PͰ$^ #F365i0@ a9pu#S3+++_](<{{}{O>V'V d/dyGᡷĘ'dV2l`ܹᇿ&C imI) rD1(W`Y o67\|W|]TTTZZKJLP0ژeќ (S]L"^~UagJ[^|aUG2F ''ٳZZi^zBQq0X&s5jCDp+T" 52SS3la H>E,GE:)VɟLs/-=_QQ91dA9Pq'(B3̤(,,E@oл;mQ8@/P@heeױ^ p\ (^+tE!pkaaJD#M<\uÆMmm[x dDvziY^n޼J‹F+ANN.$z-&EI_/_}.aV}}}xhhأGJϞ-Et'M*#{^^~#>G_ݽ{L0{үDT`%&&( Od4K{cC T&(@LU@_G!Bc͖|/qXlsr<Ԥa3xLyyf(02Y8m"5`_7jSSȞJJ4rP53;ObeUg2d݂8.ĉ06(raR~aWVh">Ç~dpBaiv™?iH_Py60^Q|B$==¤<Njfeɡq'nmSĦl&O(CB{ IS```KTs3(ghE 5bEhCr ( C/k2 bWAv(̳vaWER!+4OxcIITa HO`qnܒ՘"2r$!#K 34x"8EhC2Xj9YXX p Qsc.LP |FęœRы,8[d+8|\z;z[Zڪ:k' `by|i~zjrDݱ;cwF@xOBwxgX[7G[o^m6Z6Z6zuh M'J'L6j:3\2|fDә-&ZϏ7絥tx륉&ۮwh6~}D͉[7Hwܞ踣xю[#oih;vwB n7kpfOͮ[kV_oXq;j^uW+nݸrㅅi D%%%)^SptVsutt vps w tt}pJrJ^VvQ^B~naQaJN*>s'ԍ%gO:QxX^AA>~~fVnjzNjZnZZnJJNr2MJILIH՞hA||N\H2feFfD2Q量CQi>xx1 LѾNXZ}'.22vOdĠ## v>!:"B' w /H~ (>t @-6!c6 pDAQKhD G}$xOEZ%C>~ozww twsW o`{GG{gOW[vmzvwoճޢg6oްrV_>/Vu;Ry*oAb.ۆ-ooꢜ$ "f*X`]1?VD` )B ˱\oJ| O7,Zn@zlHɱ--gGΌ4?>PS4XwrpӅKW+.+&lf|nrǧdb/{Mo]|vv)="x}}l+'C5Ű8seo P_&~k/~/|qacc NGPFE 29CO)S…KLUl8ީS%9΢p9f3n݆;wgD8b? v+~'pBYYЇgtNP3 5_E] *dL5:Ù4aEL"& `qx 0XY^0li%3Rׯ 2 a=>C"):et0 V3H1YX3e@)I[6eP9Rp9XRP(Xc7?K tA&;5Ssa^(>(K%!dJK/K 1~ez~a'N4is?BZM+woެ*L=*Cիeq %԰ފuuu'Nt edbX#GYR;SSs+fLU˖-P{gn޼iB]]ݘtONLLrw ^&V2yYWH KܢW_}IM2 5vg֢Z bQlc%%g׸@k&(B 3Q#F0tH׬ZtAtX` V>:, R LOgɓ YlllFS$6}g1;0 }Q# L/نXİ("SR,q8P5Fᄵ"cƚ"̛ %ʤ [:A3QQѰ$K4k2:yT (RCeςC CAf.}1(a 5N+%gY1 re&mv|-: Xr+ )/abK9`$6hqeda lO@ر8cqʦ;>@T389L+6ĂBbh\w;fVN*^4:q!PY%9@͑RQ)z@}3~02r<=g?;~!1 c3Z:KZJ/Nu\6y}d۵Ɏ]74ܜ5}gT]xyw&DwX;c3 vGHWpWHgpgp{H{p[P˝;}M{6iUfk-כ**6T^kYsV[׮\9s$+#+ptHno g_;O{oG_Ggkkobv~6v^<<<\}=\=݂|V0˵WEZc~~PNlth3MgGJF4?>p@ ͗+O>|G6Z7v57NrlE 9?& PAZpŷ &S%8Ifϫκq&=.8um2cNJamX3?AƗ:PF ϲSpcUUUo߁ӧKPw]WTCip+fH8n98F#)So={'^M|eEYX}B, ]aX)l<4I\죢">S1O!- E Mo(JvQԨabgf-Q+ea@@޽{4y'|tdd/~L]h ׯd\0Eg2w+*Z! ộ(eO`;\$bD-To?b$SA,*:x@Q }V!Ȕ@b0l4i033,RGraa GX@DBXI Q>[aM͚PɬDpxe+8dUsV#;bBV8;0Є|l7fmG]3l"X>A)KD Ƒ i 1YYGd~EEEy{{ rDᤥȅ hEw )c@:i``?1ܡ{GA/cᒱOz겚gyݝهtc.f鍺0~4#tJefp:ƑUj,4:DC(A>3H`h{ lP'EX,HDwpF_ 6QD&!;#\.ߦM[D:O<Rߓ; YA0;;:(`y)&bpKXKM HM`b0u6Yc w+-@G= FdVy!cNLLw<(E5B}Kik:8X( r0niP-S {=CQ2A Iyw*BfeC%nll:0XxFQLFZRnyg:q!X dX B-d`yAa/f(5`Búє $@m0+ePp_9E^ā"T$Yڲ'l0L #Ӑ&4_pҬB0>o߁C)I/2jTF@{<$-ާēO>cO tW wԎ4֍NO 6 5M5 7unj||rvnvnnrnjvjfbx等c7ϓOvݜR1Q6qqtٙ3`\9mL7j>=RBts4ut^,­;3nNܘ9{kLol_⪷jtO 1Wz`~TNVO֨O{G{FF+G:+G:*G*[[*[5npV[A+hXyƕ %gN'&G{6}l<}}|JX.Bem m|llkocY99Ź9Ey9ǎ+:U\tDEENJ /./.;SNKO/LK+HM-LNON.HN!)1?1!?!>7!!'1!'AՇڗZ:>;6>;Fy*:r4eAE)$\b=`k={Fƭ@Q興#-EvDžAĠF 8"!$>$Z @\x8 8?_!Q>~}|~n^>!^>dxxz{{y;:8Zٸ騧}mmfIφ͖k7YljaͺmobiզVXd~"6nڠŠ׬{hk!M?W ~c+B"^x_hE? S x/n ʛ<+S,7^A7]y 6F.ٞ]FO5o.k93|zP%}uzNԗ5ګ=]퍽  }L9S*dQ_Wm /"ed[lTؼL&ET&|"Mt Y(P_&^ix$GHItM7կQVV'-<4}= ^Nq8;LnQH Mǿ%*M ""tx xj ArhB5X%LYJ0DQp." 9? PD>}|󛌑j"-B"zg| Yih+=r2K$t!ӊ4l&\JC@2 Tp"AP- Ȥ2m)l91I)L&O:;߁'`iʟVj|gѰ2CnCDJui^2yª.ҥ4DN+E<):R_@.,޾A O>",/|;j.( o@jt!:1Q ) 4!"?=u:H MED96É L5 h͐ )ؠMT9UJ --muBY8De`Jx!uB~IX/V4|dzz@rD$7^84|@&l NLMY~{ɇ&D[6QUᐆT@:r$'ԤkTAM #:wK[Ih799iX&49Olt G%S@32ory5I_-7o WZw0J.J_$`IH K dPS2HFaaT% [@+E"#U@­tA_J51ƨ5L*PS޳'~Oc rOuGh"0 @N Ua菄8!$")dwRH$dA$APAW! aC谈_Bb= VE R>"1h((>~}}xtt t >Aޡ^!>!^!anAdz8[YxZz;9z:;lQnl7l]>ܸUoTqh_CojiՆk7h~Jzu-֬7[lӷי𖺥荵@8)ІW^߹/PG^Cߋi. Aq^B _fh.Naxf"֙0_bk}C4 \㭧'ZNOk=3|v@c@޺5=uꏗ_JyWٙ؟d/\c}!'؏Xr8@=?|;+:x-9 49'k?Ezy?/4`'b8!ga^<֬Y?_ݕ'ÇYYGǂ8Owe+j^@dE'UH%<(a!+urryvZi``Ë|%0\L(Y2ȑ8N5(N17na/#8+)={TZMW)|J,M?u$''&\HOEl'KAl|Bѵ%KGz{ <%Y2WL8d_~5995ѥ|#%hG@&@U5II)NKşt tx=#UC5#}cMS-#S SU=Փ=Uӽ5S u*;W9W1swD׭[ק;v\6umlL祙KW:t>>vbTˉS-m/̶W?w\:smLtuTba.SW0_;1P71X?W;[;W7_n髛Vᶪ֊ʁ5\,=zhHw {G?[{Go+{_t6>P$<-,,<-TYxUڛ FXЅ&%OĞجĔcYKtsffHK?V^Q^Vv,= 5)?)9?1%O%$$&$%ī-JRD%~dZ}}}p&wY=OV+wEU^cwI1 <2.<2~ ᑉSjPAPJN\BRhxrhdB螄%$ $G&VWpjpW% ồ$(qУ+^v5G`pB AGtQ| rr ֮ u u 21v63tt pp51snm#[#V"MV7/bkwdzSlf^ X+lQak@sV:7SqEuX ~ ,EstӏÊ*>+TNۢ|2U@~{ ~ٺ 6Y{}tX 'N6C%zjNtwW:_nzsVh<@-jDgbbaiE? ])9 2a~/_-+mY@mLLܦM[c Y]9*yE?.СGttkU3-gb $~3VV6.\.3h j:SYGBFM@epan`S+O+O-4Pk!( 6tkvPTjrR^VciyiikjFArFarZArjAjڱ")I 1@rE9q9  @K ZˠаtpC)$RPq}Khu{GUht\Dd.ɫzU=h g]oİxP:tObڧ*I-}@ @-&ڽGzZuA_~~{}w/=}|B|B|6=[6}aH㱑cujTuWT>+U |}q9 pp#+:~ dAC-~0 gy?'`啧.M 8HBA> rQ \$Ej 'g|SIe%M|u_ztr(g,$dy5Jyp _#tfS (L/]?e}}``lMo(^e^4O^E(iaǼW!x=MC]]= c  CMMSuj򙾊 .ggTNWNJtϭ3=7:ou\躥skBՅKmgK6n<=Z2~z팺|U@bV|UE{TybnfvvnH燚pp^aZzjqji~nanZ2agpݑWKOOOgeaaaeekoigenоn*Ь5 E,܌囚{/1ZGֶa!HJM-Tii))99iiy)iy )yI)iEiRR xUHׂ΅ID-+HZ9;Nő $< A8z`Wwq$ ,Kޓ;k_L+tdGǠCaIkDMtd\x]:,2i*HBϋgU.E'u`:l)r$0D]!:,PC~|| r   pqu p43uxm|,w۫۟o5PlelIZ%VXmj 6n7jghrc:|\Z QNtx(X*bE/+DuKpbкˠu1h,d驶̡ʌ̾잪;g^[ @b[qpxVĝ*ȹHd#9AˁMWH"]z@ZUX*X0`Mgc̗á >I0eɼ&c5\ɢ$3_U|"]8>89&&fjf{g{*Ta~a~~vvZ]Q5_5[>%n}5{slu ]7w߸y^Յ -fNεk9=rvtl9u=tǕk=Tl[}]}sHH˽QAK0} 5ϪtPP`@x_x_v1tx_XOx_4mhlUv4+5yoDwF]#iHBȺ p+u ] M]v(c32c3־6~Vֶ>~v:RQUYUYrS@~b9.!76!'n) @+]ѬGPB]bKZ :A t>J2t!i{#h-֬}tXdvUtbGc h]0:\ 8w;3Tm#;87,;+X~--7w ig`mchMVOaN;m5ۼv-VSֽF= Zbv;Z Zbк8>h]Yߔ H`YeO/; ^Ο$X> g9x `yT':$D.9J5D:d$sE?..PWjB_FV%$v^vV6֞666nn> -,e]Y*d L\$4e\ei2wSm."+֮Ζ@Okn|0}t_ȑ s#$EɌϟRjBth = @*oowj#+O&##5373edbfcgkof~;N lݬoINq&!_4^7n٤6mN@o'O7nS?`a| un.69tD/@>`E+" :4Uu1u,w8,U6}.k!g!o>g6[Q_]q7<<晨*V9y_򊸳`K_vO{0\$ 89Gd$ 3L+ v[+ G$$G4rr>X!?O/$Kt;=Ȉ*6 `X%"ar^+]nu5?/qN ~m!Q:>!&VG?,c Lj7> h*}+n۸}VeWf:.w\Yv;Ks;/͵o?w <.,t_Mzn+_\\P>˅C Ziny~e~YG4,Ɲ[p 5gFo*[8fGZfZfF[ƚ{kjo]:w:=%uwwg;[/k[;k; kO3+7 kwK+wK wKKw WssuŁNHly)/64v%gĚNv!m`T1m] M]wek]vQMг'r#ajmjelilffaemq$66=#(?xa~qa>¼lRE'N+(8,/Xn()HMKM>7>#蜣1Y8t$}T(}3Hp Z^=wG&HktxD@6\EuWp+5vl:l1bк ݝoco%|?~|yFzK6|B}=}}|a>n!nnnA>NnFgo[;; nݦog`smG{G7k=-[w8l7tf}Mz7lbnMug$Щ:u?5VaC]y92vzTc#ţM'k4++.,ʽu.WWЫX>zVĝ~o>~MN; ͉ȫ2j>X.dWsȥE+*OIKD>=ɓճhL3yՕPe9F QC'েD$6+DІ.&s?i_I@Y_*>f̫Ly.YƧC# ?,vLLY?@2OX-S˫3#?,]8[3W=W0P35X734;8;{K0stݙ;l]e Wu\(6Yqyls|W6yek sBOޛjkfq~~~q~T]>|ii^>|^ @kqUH9g'$==xoDT]{cWrgcfeakkcka%:f:f3wFf 7N#םFnFH %4r0N]Ny+ةwCUln>venhYzV9*26eabiicgkzࡸ좜¬t$`TCL2Akahu$k{#κ'×EcZ:\}֐(srXDrhD 5@g1AI#R# @'JzyY"-t~}Dz{[}<|=|B}"<=\U='=>>uv{=={C|cf8ˣ=f[ly`6Mzrآ( [!n~Zo:7Z~MH*>:@Ϻ4x#ͷ/g.u_o?7qqxۥі Í#M5ԕԞ=Ww^]z; _<r*xm&Oh4H 9e9b>9Nu,w ԉLũ?R? ˥%~ {ӟZ.,{ XE: 0}X4 "KB"\Ң-\JKzq?8Wr=҃6D'jiqEۃfoa5z em~1cܫXr`K&F⤟)0eF4&-J* %n^e;[=E~j  `zjzjnzazifae3U3woOܚ9scFy]t4r~lKvٶSswkAS \,87qyڽ>;w:nճݺn2uLk\k76~-w~P@]$ߏ1U n[oomY#h3=]znh`jbDݱ[cZʆ[7]l\q%VgUb}Wĝup+*bX*VUb~{쉏JJ,HJ-LN/HI/LI+LJ=R\TQ]W\WSݼ}4.7&>/V!#1YGbx>ux1>|>r;iR{'GK.kV?'iw 1bşأ U !i8oЪ5~pGU0:>džsH8Aa1A!t1h9(P`FDyyv   tQh?Poݎ&FFAƦ[6tnbguگJYϒ 7$}ly'vCŚ׵l|k^cӷ2y-חBo5*] n<X'B+k;Sa:,>i{w5k֚m[ @xocnj'+'z+G;vj9qzk&_WAg"zxEUbX*VUbs8kFkw}ccڙ鮻37go ޘ*2smνފ{=wo=zf\)3smsf;.u^Y)[PqsoCUkkϜH慑{m mmsc{cmznygS:'{;˯]=imbinogeeiiiaiieeaainanjabjlU,8;[vrR_:Ϝ ώeSgEAqǥZMݫUAOaN;w:4GGSs73 sKOsKiiajN%"xYz[y[y[Xx[+_s+/skU4vq :p(%&.+>17)0%(9019?>1/!1;11+99'=-/+ ' 7X^1))9 Y1Gc3crscbscOjɉ:}HơYБQA\ZA@ޛ(5|t3 G];!X>(tN O@Zϡ'CcCbtp:P#0``-gw C{۟=<ƒ"B#|B=C<=$ngkblb`kk}88nՐ. *,@MzhR]$$ C[,\o k[Ygӷ2yC = fk7-^^ C/4uh]#}{lUA^|;Vss\iڷ g/w\X躺}}Y辽Iw׼3\{oHᆅƅa87 7T2kl/Ύ6ό6ώ΍.L/LO=.m3-C 5N:p+\XXxXYvt62r64TW^0rرaN Hho{[G`RZ]h%luV}m:p7]F.&fn(7'A9D~ +΂_ƊʫX*VUbX*"lI-_@У5uuS +8k'**g+zwݘm<~e:{ݷ)~׵َ٦`|م ./t]s^k =7itzn?\0T0\0poT|o垺[y~Xݤ!guu)x{ smcí]uKN uQQf+Ok;_[{+[S+OS+w3K7Ssnbjbfjfbfdlhs'; ouV-lSTTCJN2uE*q3i۝79msܬgu0>V]&F.]Ws.1q76064664ealejkngnkf~h13" `GcARnbRNrRNJrNvO\Vs$5::QcڍCG2N(ġ##?N{ h4yݳ?UA'""TZݭ2 =˫|k^>/@ 5 3U:!,D oCtGXl0XV1~%;+<+,3Tg`OHx`D_5-+߈7ru76sۦoUVa &qyV7lzh @ck)qg 7ufk䨢jUz9 X L__cƯeʛC ~c|p>~d wf:g? G&[{Fz;HTݺګW/~qEYP~jeUbX*VUb,?n i]y~vnzr|\텞[ow\T3u-t^y~ͅ3m'gZϷo-Qnt^T+ =WzX3g`Ž{MF[UY5/,ޟhW_=E:k?X{S]?35>XsSI !.n~6^V$}---,-,<-<̴o܍Lvг.ם;v:(GAo :Ϝ%a<8;kpTb-,A:^7mSe۵/Uy`ۦ.Ömv[Un`SţۆN N;%!.Hdm0q3402e<,L-},}ͭמV>.!~{âH>r4+&.'>)?) )I]ʑRZq4&#hFTtzTtFuFTtէ r'MЂe9wɻ|8,賖a)<-AEDPAU[ @Xv޲]PvV)p"(8mTm=ؤ砽m[S:o(i=gf}-QK_zZnݢgeV}m;bB(h?= wםnadil^5<ͭ,}m]#|w0̣ 9 y7dP°z 5O 4N4֍ uVt wU8z*Vyϟz󁯬; 7xzEUbX*VUbAXq6$c˾t@`PHP@@\_B3e]e {=wwX0V2zzTŝ;v8}e|{^5ܸ7pw\_wG!uymikkk7tijn^Zr"5-m#>ޖ>VvV~f^Ffn; MHxyyxyn7rnggr۾}N'гNm.vHne;O-yp\ 9m済^7n @/6[lj[m6l۰~Mv#&}Ǎ7O7&=;ViFܼ]u6r.g;]Mݍ<L],=+}-|-,!w rp ,)q 191 .>;>>;!!311 PA͈>u$:[A8Q1h]L ~ozԥ@ŠWcCŠBϱrRĠ%1K*qKh#4<:4<64<^baaGõsH>D,F oWDgXghgWOAzz{zyDz1V6;6mڢgy>ff%1u-u8 {6~rF,Ro>)e]WDlt݇.I!%MS$i)]t1+yozme_@wiV07sfuybanNvvjz|O_[w/=X*VUbX*Pzg3ĉ$v$fQ3fffn1YblXꖚŖ$Lfݳg|g9߯WdO23;;ԭzꡂ[^7f8]O9ջt}?7=~gu#G_4ҵi >w3|G:>XqȊ`aHơC=[.o>Գ}d`œ= .ָxœ/:rӇ/9rlg;c?xwѢ ͹y )9ScsOɛ:9+4"+lr6O   2}|@_pOPO`o`oPyt i675ds97I~I\+ 퀛O$87w(7s6!io"]wo0_;Xo#m^ th ڜ N`~/DP09=|jfDdQ9StlaTlAt|aL|O*JM/ɯ+.mغecX:}ҙ͚teČKX:}Ys&ۃ[7r}9bcRrF7>h+GgYa~PYeO/3eJfskiIKIisqIsQqSQ1OE‚ܪb 9siҢ"e٥YIqqYY!I!)#3Fg'xDo" ;lU=K5:mG9,1e @ۯ @Pn^@+̫@۱i%~!h"\p1O~n\ý|cFO@xAg{9pwv0ps;6]11߁o%,|os 01a c08Ϳ &}EE' tn?ջT|C 2' um4ҹRK].tYVt~sώ+tᒦּԂܘ)9ͅ'FP?4/$ @ ,lc@:0'078;0 ('(CL+ H^L2|_W@ J8и{{xŹ{ź{Ÿ{E[t:b$ +_#asMuWo# CBS!3@蔬YQ9s#sE踂؄Ĕ̪5 ZL_6mƲ3_1}K}ieg->s(mZheuQ]ズE·Cθ| GʚyLzne͜S39_ `%˳+*gUVΪYQ1гu:X=zLhgYqgͥeJKZ,4 ꋊ  j̥9e6 s r+ r*+r* ˋ* K JJ2 s2+R"3,JMIDATRCB#R'Gf{&%L?oPėuhtǾ#' śceAQi'Zq(*3O;'֏p]$( @0)B1h;w.1?.ٿxgWǠu]mGζ0Xt.qgwB<1a c01/.{o:}f`>n?Կo}gp =[.toصRK$7t\1t=ݡ+8:td5#]]Rg7n.]</80r|&ř_|~飧{uն}ӊ-]<"#(!!'.)/.9jL+H:927y l"aY 0<{6B3}3W 8'8\iN@Yg2G1h1h?EMdYh;bmws2;us>&h6M($k6XhErڎD_&: 35.%XZSSV9e_iuKgzqef-6}Kf|uV ?; k;mǠih ھFCh}.n (%lc2b v86C`*=?747\n*(j,y59E(̭0|+]_eˊʲJJbb s* CSC#RçoT&:V?1ʎ>U>fs:sNJUC>1W?_xgHM]/hh0҉O0/9َO>{u~撅 fe'%&GO <APxvPxf`D;YҾi6Bҝg#`~&0qw`NVdّvkI~ qwrLJUԵ~\ bhsx>Uچ0z ӽqЎW~03bjl;_PW_X\SSY3emD[4M[b.嘹Dg,1}IӖ(زuY}Һ% k6ug}:mÎA[Q`s OR9Naĝmg^9ھvҲ%%ŭEM>M&]RXlb9+ȭ"(.*-,-(+4蜔✬ʘ 181|JzhD_o_`<4[5n *LPPjŝ/G̕i!u{P͏d'c["IR?N(( -M0@h;\ \p1ςs 5}̑?is3=Nw?ٳw}m=w!;=1E=m|x-.c01a cr7&(]\u)}o=n{=ۆ{Fzwm@ =[F\3tdM;Ç?\9rtѵC vm<ܻyp9@=һmop.Yw=_8u苳NwwtV~//Y2,'83$-()0)81$>8*hrLNhdV\sFxNPDv`xV㒍̀PҎ`_p_p3Fo$y'%'6KH~ ֯9rVta.}62&&h"+"G:KKO6KvBq`wz>Du[9=z !I1h!trF䌈Y:8 bcK2sjʫgxyKu-K5.6cٌ˦O_2}i-in]ܺuiS9]߸ @[1hqv@XB+l @w+vk%< +<%юӱt8z 1?/o}%,lGc01a c_7FЙ'LDW鞽!hmgwyW۹C=;vm2|쳡CG>| = W}v;ۀk+cfI>M3֒fŠJ KHX>7‚jG *?"=,*67*.73"-h4ÒS3C=b}%+lJfə&l9aYaaiH9loPw@w@2 xos=Eo_aԼ|c=}=}Vp+W!+au+'7'is Q8EfũݑhD<޾q;xXk(,s~01gJ:Jϊ,#'Y?F X#Wz L??q2xf\wv>up1g_1?Wflm}f07ᡇ~x߽gSm4?Ev{]gu4?r/9س|ڡ#pC;W [3ܵѱ#>l1Ի}oׅ=#҉/ϙZ[]WZZUPX_WWWS^39:7tjnȔ 3AAaYg&bb 7+(X6G|g붍D? s>&h"Ѿ &zNtM$aL¼L4(e2RKBy@ukOocOs zg"OWwW; |c=pVD޺:AGͽ)Aaa!i!aWBG[ Ad\AlbaBrq^Qcmゖ/5O{qQCyeE-5.4A7/ufiGqJW.YXYs+te嬪ʙW6kyWp(.%E֙Ƣ‚|t @W敛tAyiIeIQUaauQQĂ̲ȴ @'yD{śгgw=*fg$( ;mpsY^D3Ԏ& )o.ИB>T@3u]8qnS8 wn8u~ .?.ٿx9'yEO>uH3=N3ǟ8cwt;6м#Ji:V~S:4꼒 (CA,&)$ ?CBJXyt;%,LhuSD_ISTb|Ҫb97F-f[*[:6>ȏ :v(W8߈&5pQ]+d:jY CȬꆕ$9I[ܨk8C]ѐ$$*uO)JР#Օ )QKՎr0Vh(IЧzysשcOuϧwng LxȉF u?߹zcÝ[m>w:|x^omݼѷsȉ}N>q yMŕeee 5ٹe) ) .1?2.'"6;<:;dJV9<#rU&lz60ne[('S͜ՑOX&.` XM8؊{:mpsDϘ,LZgǻGJuEbћRP:V7//qm9^<} [~XNF[? @`9g>m9BR m@̞cn$6O{q̗ͱƅ ͋54-hn]:mziKZZ7$\мIuKj͏n49NtQU;CЎt)+1ˊ>?!]1`VY̲evDL٠U7rC +]PWPP]XP@VUWUUUWWffVMɩ%SLK |^Q`2~hj}kčc ݛaF$/: +82X\`4l)fu6Jfh?4E 4SLS]UFoƇ?3.Bz>y΄ _<\Χ].?6JE@ZBG1 eRJMx!"*)L2IE% -/ӋF̑LVOյ̄ԨMZ&$L#A&s|T-|TN4s)O)LbGQeE/@ʄUˡ?ԬbH-9uKW E4O[1NzϏ##Sv-1'RPd$>Fշ5 Ի%2R` ZTVmT]b.qb'v]2gw8|l`ΕCGWupwㅞ C];φ7 l:ҷmw]_>xԡ=Zk64TT7UVdge'%FGDM 6%+d2fhAwn_56?q+V\`BW9P8器$x &==v[T Mn$Zd0or.(-x )&,h+x&i #8)QfOΛo[05pJLAbZeiŠiQ}eu NtάK.j14K[54jW7.1qg^\d@r: jO 1hsBAqdش}SY5W l4|9lr!93K+ftKaqSQIAN+)n%3&Rgڂ|w6 ] ]X]\RWTTc.?*=<*67*6'9H h6=\f+5+> 󆁇u$9>o ElWkuɆBk9q&_EP*`cΪLJbY Ϗ n|ijß~!Bm<|B%>;뚐@;~x{u|suu}:oܷuê.My { Њb-::+ Z%%wbI$" V+*RBVj'G2S i CY'",WiWGUb]dbbRvZvAgAxp`+ *^ :OkK+[19 ֓"<裏2YIErkzJ+&. J]@fEotS])n*GH RSJL]]lSi_6QEAH'ؔ%YaK!_FE Gy&JQE2ɱ!r>ʿ&D<#I / ! ͙0m ck9 dO@vzٞs}wt/u΋/nlؚ!+}$3]뇺֟?~{Hw\:v[|撹3jkk*ʪ+Jk32 23S cbs'GeM5q @gHaiAai <BR4a˧2>hg⹎h(Dk?!0c/+<}AZ$3GJ-b̉f#pMCUT -WVwO' @1h+ m|(7:ǠC&gN 0؂ȸ¨-ӖL_f.w7j5.ljZ4uKf\:}օMGA%5Kf;]g.ǟr# @(Qn`ⲖҲ_ @k KtaayU)i%S"cSJÒo`}:mŠ h,2]^6D@α ,΢'GgbexFVϏ W$qO=rg%0%:뚐@~G箽'8x瞁.sێұokޭW~uh^Yrmڞi"7|뭷q]ZGjSzmw^1V<$% @ S((b2U@K^%TJ8^FOi.qXz 7|%dB 1D({EГZ=yݸ* Oa v&K( ЄȢȁ?dRD]w)%HZμ&>"C2:L IR-~C1Lz :ג,)!JI˒#bKVy!D)̥P'vD@Q >Y䈕PEz-dzb$Tp :ۘv jPav2'ECɡ`# AWU3E@c'BBcۅhuS2կēU=mMYJPJB5Gyj?NZG+7r)D'H1 1P|_|Ɋ9s򗿢E*<"^Fyx_C)`3bC rp@" ei=%Bz%ȑ2BJRCv!O9RXUQ-irMPtlPHTVcxU+_ ipTl{!l$Yj @\rTUU**R_1ҷb3GWtCV v:߱}l` {7_zq`HﶡޭNo;cۯ,V__[^U]QUYZURX^WV__]QZ5%:+<2`DzPxggGX tZP8H KK .~CN VH mY=.ܝ ؙW}?5;mE]JFgx*`-8=5@M.fu_6x9V١i7  [[Θdڌ%6.njYؼeq}ƥ Kj/kE@Wp(+t}󕙺c4=BYҲi.oL2u&weL5 @ܪ)QY19 ő1AIA[)mVdecCzFҁ4 $AV۶vgTt5` jm[|Ύ.))K̡J[4&l2Aiѐio',qL`` .h+J[b«XT&9h `aaٹœT|hK1(j7hȡ~ӟGGLZ4E33'd/"@C"H>7ozPWձΆ,iEƓRCd0].nvur&詮<%N$JS*Aëh hƍĜLI؛pm)@L4O[O^@|/ *> Hl! *S ODÇ4um-'4 1Ej*I&E! PZ>WCxWRR6{ƾF=F&4lI3-A\_ߠ)RIjk뼼I$Ů{5(WMSLrWx%Ai@2=/ȗuL2 Ip&'|TT'7)%Zʷ* H'%'>.{hcAA!GEJYUU3f̘JUy*ʡ[OD'_IA~U1qK,P鐑#bUF9H^%sx3fohxJ $_ȓdeTiW;|ӃB*RI3H84RΐHXQēz,Q6&x 2+J=+{)ȢEFF d@:& dV+OdLj15є,s-xR2d Fe/g?H1z9ױmЧ:slBw]irxؚΕG>:W׮C[7Ե~{PýF_/Nupתw^]TS]YZ[SP]UWVZ]`(*(N3g csFgGDfO emdy Oבg!8,=$4=8ĜNL Mv\ǡk%xz$&V@BQ07w9my֫O_24$l@Zgŋh&A]%9]\zyy׎&?@Sҹ9 ISbs㓊De$'i_bIj]b" JaV|P"=[`Ρ"U!G.&N=a"v3ž2A;v.:ysGL{;u;q}=o]'Y{aXZZ|h9Ȏo߾55uZXٶmյeC%Z^*A>Ĕ8VE!uxT+jZYd<bJhǎpW_31O..Ļg߸q󧟮D.fM;w/m(l.R4b4"JO&uy:{cױsg)>{==i9sL61lp PE HUaKHP > 4^bmml25wy7{MM-deJ\Aa"^<˗wGoo_T(aHB: DjGa@zpٲM<{g+WO<Ő(#J|{[r; [nhğ-[]ń %ΰEH11*8"A)jVЈ r`.BDy^Qo嶂Og2(jdIIH. )!>U*-T- Db^bHn7*p.R4+ b&>@sv&QB<)&;rssrظzә7LTo$P4o`i={yq&SLMSA1eBZmذ֛?}5 [z) S .(7UQdo_ݳg7_vݺ?iO;j2X @-xE & 1|IsskWW3Kg[OPG;vvwwyo=&7x>@GGR YXQTTrA;44CumI 9"xpph@lv50pȑ#-'2P"L5$x Q!_&,C2.\|pi^[ng1z2yY*&P'u'bHi54tk?կ~*"s*UVC$I X CBހoRM />= SE!|%J%';;;ABT!*#+ȷRF@xڔb4Tr DLR) U'_+Vm޼PlI0jd8UUT!kt"ZpcUTWC<Ky(PdkhBy'x◬:嗿#ԅF m&<%2_9ܻekc;W d'+G1@27q{pϖmý/y/Ol_Ϋ [뫫˫++K̍Ϲ,+4)0! !0&!?2&'", Hh ڄ#Aa1yqQ9$Ҳk+k7M{iYmsqA}օL[bnnYԼyqCSV aA5 ,гK3 a9pleǠˀ}. =h\|EʩϯT:/ ʸɑQ9 SM{GgAgr۟tG]B"@B!cr1IGش2=%M)iUQ]ղ_M+J8EWB;ǠGO@;C.1]߀<DOc?hЧ;40z;{P[]<ǁ=[޲}m[W}z4K'5 .X mb²e/WDUV_z6l6/ڑ;[-KR-%I{.$ !TKOȇ9}Т.ͺ D[JQoG-MɄ-Oe|tTidnc믿?XF+詎V=UT'Ze,xwŠ'!N4(*d dBwᄄ$zJ̥0"ieMnBIy F;KYbœRO.mSL/7<&<5K#"rGlA hiX&2Q 254$ 72m69::}ollͷI-kjjٵk7ca,*BRG{2S# "Z@P+l CyIŧzo`L:OgϞc6ЋJJvB&XT *r BJޓzӮf|[O>YWOEɔݤEA)\ AQ)ILdaG-g !ÓZ!+WSW )FJɇ40@A4G4b|hSR"8@QpszZzթ"=VR4 ɧ92*R lyWXO哐 LFF%鱔Z8rv$nʍ&Hӣ9]!U4Q"2U s,LfQ8ȽTDI詋NdrĐZ,BP!s~]'Ls";"Yp"6ȚIfQ ϣƇ*PLb@)؈2r Va 9tȂ L1'{/ys};w~`\zتGV Y9ܹzڑφ{6l<ܳ1һK'?}Goni.*,k(/+,*.)KK/NH*/͟2%3 h#rF6̥Tऀ@}3w$8&'Ih`h@# * /UAdT &aS+8t$JA7'~w$u8 \*FLŠ04 ZAs;BO iDEU-k2U 4ίoZh";oS=?bB}w}pw~pݹe_ۖ=;7\|.^uclrX j¢^{}B~%#%11100Xj$j sr FCZR3gCCB$YdR']^^Fǟgee52>>Zɩ"p'PlGnn4ZMW*?~ѢŽ}]]=3flll =r`H&:S WAp@y# bBL9WOϦf@pصk7{tWA7d+ٹxMII 3*sRRĉng22cOkN޷Y_#((d=#u[h)S"[[j?*?ȡQV./D"rHgM]^Y z|ҖVL.ǁ(f^s{Фe5BCxUǐ$"# ӦMOLL͏=ĝ]e,4aiYYyXX89TQlQuP)Z+33[ i/3=6::6QQ1:E>ހ^蕑Nhܸ ~Ё*x;w3AD}aV+a>Cc^AZw`)c2I RIe̜98 4B>VyY&'$$ѯ͞!799 {ʔ(/"3jAȧxuƌYtcz,Q+בFK[F+W^r #z B:!K>I STWWz<4gϞcλ|믿r oK |p1 Wt`.nɐd1 Tę Cˆ`dn$l={~W^yFAa|lk،Cz„I?fF MRv G} <==UREʣzqdi#>h,FgQ?kngf?]nà﫡Ȥc_ 0Zuv q֭geHvaR Yl0$Y4 bB]4r&@jWP$ԲMK4Jqq pKPP 3E D1о3%<0LS|`؇n2 CpF|f 2Ayd$ng&%>̍b2215rzˉ#۬_ l7탽;xl2ܷygӹkv1?!(6hrdnhdVДLr9 3όt.w=Zuπ A)~A^)oca9oNQI!fn'+ g(_QcAn;+'AWpL dw :AFJ 6aecYquuR$7DLjhp9h; h@sw#M;L ʋ*_[_Y7iQeŠ 5.hhZҼy^C& C6,>[O4c.?7]Z9B)Qʙ3oα~~pZIϣ=;~~P1)EE5%%eYYѱyaSҧFD(I[[gDOs>$"t 9ڸ$'Y͎!0 ^uY]˦ +;"q+6aew )#M zvADEE[w}@>t`ϑûAס::=o׶m{wmٳsˊMZ[=gԨX"$b4Gf̘Ū1+K6;;;?JfHiL;z'[V,(Y>ӕ .fc.֠\\FP[{?ޅ=}˗_;hG'ٿ)bv-73/ԩ3gEVG{}$dFI,--gˍZ1YݽǎuÓ3EcsxXGvng1SO=x??H!lPw۳gu %8{ctKl>IAya.gP?ۿ;w#Mfk(4dyH“o<1'!=O#?i3p8㍷~x&MM-XzwN"8F{4ܷomivG``0100sٲwXO=zɒe8 }&7|7oJ3! z9=CUtꎎNZ`2'բEKN=z}Gz?.^D+oݺ522lhGd8qB`p!ĝ?zKU+o_sp##<;*BCv|{9rԩ~>h@:PR'NUVVOn6{)=|w?rͩ\y2nvt2>λrrrq૯2+VQ PHdXfYx:hKiaa1:00 ͭ u]F%T"}vÇϝ(МFO;iTT Eɩ;vv 7a;WZ YYٸd/Xq ,@81Y566_nVe<2(?B. '%^b:8|̧"EdRgУA +Ʒ o%Ԣ|>xdJ)b>G E머e6tZ4E2Clu>>~jRtlf,̥ SojQh/;2r͝&>--[h210i;Ƽ6lb80?c#ӗ:#:0BQ5i(yrĐ aqdu{x'Xo۷dD(0 cхNoRB7c$4"MsgϏB\O(g`=7dAB+S|lz(&쉗_z,ПI V$xYRO- Oc&0>}Ag !TnoIݻOj! T|фV)9eܰ1K$R>x2ÁA?"O&R,>)>^~ h͎)Lt+ng0#fnQCOp=="C=nR$ zuUv++lvItM0+ɴ@qNd;&2--ߡĝ^Q=#ݼ=|ihҺsCp:y$h(>̲֩}~\ПPJv)h2i2mP󓦘sD9~ C0is"A \ "}#G!>VuYUf(hyfQ➝!90pc>-nMɓ!-;(V;٠#YUHzTaۿnz`#_p177"jH8JdȪ/ӛŋ1cj=GٳgSOG\\HEEBe +=$}X-gAOV`,bc+O?]U&CZ\a_[oⷿ=sgކ Zg.}Ԃb0Dj ] 7xےnCK_Fg6r[VVvHO1GO`_|κodrQQ1vG@@vԅ?`^kjp6n˯}}G?w}ϩSK%K^p;By9r,Xܹϣ6'(`(Oq'_؂|͡"͊R_7CIԅn݁,!xu׽ӦS-gϾ\آ! dF]p1ہ+6oN1'h]P'.P}&p Lwu??Ѡ=;|h/gΜ.COO/dHT]- ɽSjh̚5A:DVYYvѓŊYb&L⵺vpps#~߽=|F~wwעEKpsz[ݰa+ίGo 7nFQda*K++qWDG=P]vg 3p :9S%9g\2"x##YYٴ*nJ||g33N?Ew}oq '')Y(̷I^^>4+fT$={o/a `H?*IC3g;+H=,̢ٹLAA!*1A@we=GQp LLLZbuw;Qx(22WfZb W^"/|]Xe/|Qh,>ʌ,bґ^z/")O-g'3HF/:Hv'?l=abb"9| .CX4(WCx|Lo.3im۶nA'GC2Ȣ?gHFl  8L Z|P$ /lL OWK^:ϧ~mLxTdeX E&3;!Y|@4*q> Oy"^6-mLL>:ghzdU2Qՠ |Y33`+%֍,^0ye !j prhq|~t]x23laN8w},!34a 0 ߾X=15qd?>pd@瞓-#[|gp =.]3xd#ͽF [=tJl2һBޭֵ8GoTVY>gged槤'FFDfL1堈`BmiAL:``PJ@P_9b=|RS|t????rYs4A3aL+-=-r nSǹhũM5 @$Iމ6}St}Bqo)2wx|6k/ǵ:jm;+m&vC{8tĠ׎AO4ahs%tVxdvDT<N,o,_Pۼ~ae݂ŵK[My^s솺uu344olXP?nn]4W3꺹uPĠkWU[WU5j{9>4Fi+<׀DŜ2 @*-m66Zf !b.,n**j**4()n.,hͩ˭#QT5Ԗ֖TgdTedUfNɊ192#|JFHxPgCgu'isYGiP51NI8kBf]ѾA<Ng %<; O/re*H+>wA\ "{@_}>q`mMy=mӶm-oj۱mϲhcuk;le=`G֤2hC{YkOE0Br؀ZzTawf+{]6/YSbK^mVVl]֑)ΫZkfa C ݜ$Yk@; ϖ-H`TPP\LSmd駟moo1cMĎva9H/..3޾b8m ?!{ <#u(lU9 P\@a`D={v&P"v8gK[[ Yr@"FobCNh7t }R6ҥ0]+hn1GV"P>VU~hyuu-|ݏ, Goذ~ѢE>`"a~=&y ]DC0OMM>}&QL]h!;gS>G+6 O@NGeJC`›oՍԢ:۶4_g @# Vd"zz/_=oOC] 4'  vu{K D0..СC{WG@7n#hɒeٙwuDFFCCCLJeehۅ':$k{2C2RQ&`()dhoWH{ソyÇ0: ht`)ϖǏ`B@:ЧzYJNiYF=)`/_AT\ O[ҥ/1o˖H۩i|Mju'A  |ѯ~hxZnmmݻwoHH(Ҝ'ԛoy> 7?dAlݺBٳgQ G! ¥tt{ @P =-3(gtxڋÐdJԅ5aKCz,sV,NbV&b,PEO>kF<׬YwX7zuݻ8JF[[;d(Oz~z .>||ZEhH)p6 Yk֬{챻ヌ̷~F:NbCK4:`NElA1^ ٹisy`{7'7lՃGVv(vk5\ mHod~pH]N߻ ̬*---,+*(/),LK/HM-HLʋˎΚn~oh4BSBR|⁏_OWD d%x$zs @'>i>gcg @; @ Q/XAqnSƛ0T7)ꅉ6xU$2 &p|e_oD'~IVc<@wA`nLtO @ vA+ }u ahg #e ':8nAuâʺ$j7.ni]}berG)m~l @7[gEt^nm~^]A~../-(+-ɮJM+O˨P:|JzTKГux8~izS*b&<5P<Ɨa+=͑g+md}BcHpEs.E׾}V+y m޹u{7O{9~~"gOZ6 8X+Z:*P/lXrӧϞ99K|` W^^Iư&BHSWaPJ)kR7ZQ,}}=!?d[j]pn^^+c,e/ta$޹s'{`$Q ѐ}LrtppHʦYN<]9|R+ic{Y*VҤ >l1 dW! f^ 8A;w tM bÜwyv/~}TW޾d_'Ǐ(مYԅlY+&b:ZĉS/~t{ C~ ewWVVZzqׯ_lM< }UT g' t-ѴrBB^=44L+M-̙1"M v̌lٹް[nu :ۨYbb2=,y).\t1""tHHHWǎk= )O4^ D[xyyy=gZ&*IxOLsEý|GKssϽ@]m]d1LP!_a5.  CKmP\¦M[&LDlKo8эO ifQFDPP(%'#f*$^%mϊ>h934Υw}wSS]=K-px~5knc>w>f]놎}6hn8drq`p֑N׽o/.,,/.ί(ȫ)*M(HI+HLΏώΜ<5#|rFd\AggdQ%&$'z%X7nxŸ VTW賗 H L L 4hhܼcy4;qֽܢ&90\[c{D`lNg. qz[O)0nR 1 ǟ<{+@w` fnH HMrdң?k7l\D$LȪ :yG{EO1h1hp40WsDf$d6WίnX\U~a}M 5ϩ][3fN 7_;|SdB5skcU joBU̵EAǟХ G @Wp8[OtaqsAQv<<*mٳ-cgO? ky=-jQ)1K{zz8q Y9l15 #46ʡ"jIġ*b]lbCa|/:$H_O5=|!d<2Wdַ!)6W'=q5 8+Cx p> G**P>88Y55u4M7^;{mذaɒwu/{p萹5h  7x)(Q^ ʲ \*=e @ VOxd6W KeV,((dKys~˖mloV'^-|P9HIMM)=K_ܬQ_Zp^`][-ܖ=zb]RR2.MKKNO)X!/`{^ oߩ>FSVVVӬ{v4l]NwTvii afWW{8)^ tup@!ز2:3 QØ|: iK:ZW_ݫN7 uQ5::7vw2r]c-t}t2o0x8;,**ڷo_||]eCC<Ϙ0I@Fы𧗗]St槞z5̙!sBP2QĠسg](++=(ɖ~m˖-O|mt^xN= 1HHCHa_zܭ+<0i;h)tTb]FF֑(0Ӻs1Sy&dO>޾g p== 7pΰ.LnT3oݺ33OUF0F:Kn0_<̴9rdEt-3hYw7oU)zaO7m‡4Q5 i>pp@+8S%/vdx~Уϋ/=9Dc&vO" ů&:S mӬPh"Ը|̇18󑺷O0;?7x}ڵCaUY~ΝO1:ԩ3(oNR& K[ ~]C@~L0 WXWY;w+Ԡzf&ORC[*ʕi\&{.}G'? h&C: @sΨ&O>vdb΄?10긋 raQ<]p'w}?1~,<*t'~̐u#=w㓊](IV Xp ̙ӘNXCc${( Xd1~ܹ^۴iӫD.&((_~Uө5*Ío0-3po۶7ނ ?a?) v!3$c2]Lݸ/22?~?S1h 3f̂nLR?^B"/-RL|rtQLc&j0'3UB T 44a2u#'C(j&z)JZ#L>r z>|ٳgq)6OZ$ r(aNY{su;{t٣k<ѵCk; v>zؚulз}wC ]<}x箵> ,? 2'<+,=895/ޜ}΍ɞ<53|Jf!ap o%gw`ba@127xk{^67qw@oG9'0'0?u vf)&M?zi=byZWmL2GMtm86L>9n6wGċ3cqAA@Hޢ<^Q&k`p)Biqgv\= w}@;ؑ}> hߵDw޵m-;mپeMm޴m}駟e!J* p)raH>,+Y8c khV~bH ; g &Av-vz5++Hv;0Z`ea uGW  :U֐ÖUPEl? 7Bv}ppӧϲle|!jaÇnO9}ܯYBa?ICîsn޼YJii,Y@gьCp2P6 ؙPD&.8li/0ȑN x} t R_l.-;%(ߴv (4 [٘%վ]Zk;Ƃx#((seiutvO٨m@UZjdbee5M 3(nݺk=pC6wyW@@& 7z*uvc7dc󜕕CMhhH&i4T |?A_--J_czz[o΀!pCmllPXX +y̓LBIYxYZ~SO%,Ҹ3>>hNNz `.…;::(8Дtx^bbsrrhJ%if&n8/9[sx>::/c#ϛ7)rhh8{x]b,/[pTܻwoZZ:j38\hTܹhSh54(tKIIЙ΀:ufK_Dለ)TA+f?o^3p`2awsݼy "7pSgϾ{n1^kqqQ{{{\\Є'7ޚ={ %mȤO4?ФqMݽ{j+?ȥwߧo_w (E3Q 1W0xrѢGeֽ|. Ha >ѰһC@k2B| +9( [Es(؍A>LЖd)@z hw}ÑB-u*x"q{3TzM0m߾t&d:ʐF}_}?MCm搝;w1<<<뾇:w-|YU-iFN@SLnYxC:̟`|"!Kc> cf޲e+SSO=#a"e\Mb@>Lp??S0Y3>@/)jSH{42r!33 '#ǒ@g'M>2}L# mmmg[ULx__jzcs)iFy:slvv.ߔsPEi u@V~$ Z#||$gua1FBB9{7/F,g!t7 '3mҔ2Ð^|Y&eƣœQ+WVd]2M02 CnVPPO3y=gަݡ[etEl@~>#00Cjqhu/?19~fIgc AW/UqHoϼͫFEt@Oam,wvĉ^z?7k`fXiNbY#m`BoP(Lg! c 0HӸ7ÇJ"TC|_̜~~7<>Q7n܌8fɸqX 2 p:x}hhė_И(WYGh\ȥf:>r|wPZ 7-DѐoalgEѐ <լp#K&+08d8Y1lPII)W4Kk8|DS֡3dK|%c_#xGPInk\~V>LNJϏ>\qc#+:V u6ý[.8m'?oۺsUTeg''%FLʞ153|rVxDV>_8"MM+tyLD3 y7͏ RҼS@Aw`KRhlU CriFqEz#"<:;n P ^&AJC&C0-Zfdﬧ F.LwO4uG20G?;%Z?~h cY=ݻ "l>)Zf6Xj?;Ru=Ӆ "GC1lZΝO7̙3W6-MM-.\-gúߖ%G]Kii9+V.Y=̽|``siTVVζ޾+8Cx Z@#`{,Y \B766o׮]cw(hQ}}~pᒈHT "ΧE![}f+Vx K7C_3gzquǺ@¨AUHﵴL2Ł}, S ˄W4pOu$ܥ!dBlΜ܊¬E^}5:'<-{ҥ/?x9](].=ˣs?{w zZuwKIÊPQWu An@ ZW\ @E_xMPucǺ_Mf<0|O:|{wWMv{UU@rr hEч~2%Jϫ2{({t@+cDAэ7L4͚5kwt`BLL}=nz;2սt-!o9s6\DFN6EEŐFC&'N1q EpyHT#A& t&a4-ZBOFZ_h\kGmqL). 8С#hE&R49l޼)(ﴵ͞=(E:t[ ߾ SN39?͘dE@ |eo߉K!'aPiD7CB?\QQC |Ԣ <؂u ja8^J+C2,--ۡaвox7$bJyWݽ44 1H o~i<ʳC(t U%VvY s.ñkn)M㤳_ov0Aы5iŚ)<#hX9.Je 'N_=Agƅ>3r چKT_Ku .pq7t}o߹o70gwn۽c۶mݼu͛6lX٦ 7~᝷fwͺkA\Y,RG{̛%54|g/]YYMB>{9&E7nڲe+kz֝<`\۷`̦,X}onnaOkh6X 'YgǺV+Vr*2N6𼲗cӨ_Ub#cMغu[ZZXZ7J$Bϖ ;ilv0SRXWSSˊ|ݺRc: M6^fmXJ_Orr*ye:=!! Yi9\MFe% D&Z5ꩧahE7>}fTT4勋KٓK/n}ij84Z*+} K,۶m-=vd5-[́#Z4Τ |xO<1cm۶Z&*2{7nb"249SL:+*в;w>Ґ&LizL3ʖ{~3fȡOrxu=5[;KKCӽC.J'm:~gF4}a̙3u^UgPTa4Ot*!CᐐP|cLLUQ&dQ@/z_gSD'}Q>*n{~ڴiׯyf{CCCpFx™ajA]>ܜ9c}YY24jɭ{STRRƘTF07ցk!&L~饗ÜE"hk߂ش5>yq+8pڴ8ј:~4IE?!3[MMO?d<0K[kkSO(ɷfcw O]~Caa *!a"bT^6==S`8mDĔw}YgyF7F|hYtP>5:BEJ ^׮]jj'?1>HO^QAa}"..)I| 77/#Hh3d4G"ͭF7x[Ҁ oرeL0o  N@)gc?SZɡ4_[Z67XPD+0 ͤJ=;;rs~[1+-&j{+V _`!A&)T|?A.\@ETVRNUU]C>Ty*hNcu#%%I =!`d]%JgQsÓR:<;rƆl ~GKYY٨JEP k eRXMGeن?6lĐ;< "ÜL(ֺьSA{"Z4=_ӍPRRXSq'| @0&rz"Z}ݏ dhɧ =VTtiDCA8|9lY `)ܾ}o\V@CN<ӈd&΀7/K2%LP|RFXa>j9L4d&Y+AWÏwEYQ}{m{o|p'~;:V\y @]e };.3||G߿{9ͥ9)I)y)iEqyS#3'Gf O7Wmggdf !i?s :;Cfs h >;Мq  ̲A'ulӊ xƛ[&xBp` Ada[ nQܣ{R n#`3n P قRX r֖Lˮ,MEavnfvD% +fcp|{7I||"45^?Win)Q,'|P4rnԐ]A{s; 8P9^ [Y8 A4tDC~li>YV5ļ jg$-3֦!` r`%RD/h_usBۗ\sZ<]`5!ϝK-uK t~8KC^wĸv4vA ڗSD$Zw}7nc8Sg;+v[Wd{u ̱|u9I],Z䣏+-q@5WoP{-M<[TB= [0nF8p($$[BزxMMMV3߮c :c 0@QF+h'@oE)בcYSRDrUAOdO8&dp m*ZU܌\Җ6:WDaXPLQ6"bdrdL|i2z?SG ԾҟLך:nC%Xj4D5&' [mD))"9\ iNYvoFieu!%^風g g5ZeP̪nrts;wnpxj\w]zy'cxm((>fZxR[hw1 Ք1L@fk(LiSL1M d΁$RA˲Ȍ f.B%a^Mxthp/AЬth ".bJ5iCDÔB;Қ&j3-xuU0ܘ$~J"R@ c0Y]LFs2݄QG}l-[caL0r^-o{1!U,!p юm\a riӖ%KQ'UJ-2Gn@rJRDRjy Lo|G~1OR2ڒO4>C ɴ!B5b.J|,qf:QC=j>aLG#(ִl̘J(.n)oja5 .Zi;)HsVJv a~QFtO[=^wNp`=q?G|zsUw<۱U]k{6n1ܷkop{Ot}ƫEyYEi)y I Q3§dL K|FH ItEن9l@ºjt,h!9AYA֑g /sWrO$ &53!hr&yMnmbʞ1ݣ^4XcGƹEtv7G/ Yj*K9aeD;S3\kIN}EnQhX#vIMK3OTTҞi< s<'gO 657ljΔܢy Z7,lyA}ݬڙU531Zs&:syuktUJ .G+Xp%hG 9@()nGMqbJ8uAQq3(.v AAACu74O./--).(LK+NJ,JH*JN@[ob^1nSt)gh=vDͅNإ^f|V> *$Sd % @IГVdY9vYi@h+.*uKu .pq7{k߳kg`m߹u۶[6mظy~x駟mfi5篚:wR7nBgEGeiQoTweMl4 Qx_=q[o=ڵvg ZEݨч]WfwOgt}i:sBccsOOSOoCjIڹUp?@Lv'`Sw 8-9WSp[g~wL;v;&&8EV"8l>q)2Iknn]~#=9g+^-X¥`rL䓿ްaӂ'fWU? kU%T(i_W&c>Wwҿ;}o~g(3OE1'Iv˲HV@(BUrF UʙrΉs"%b ԲgMw׽|wͷwu{)!EnR̳gN|_M_~/u`W|Ś?wxӹ#[qc=SݶnwBmAOk mfe|.n+I\br˜2[I8%Տ3ιm)O`]zG_Xف! .mYĩY@3(R7f%5˔cɝ)r93Ee- 5fl(`̬1 fQ3o`| ))Ph[ɉ49 CAgqPVhAC]O?3 F_ճ0ٹ0I;SP*1NtiWr;5i4[H.$(F!GIF"~AG 3YF#Q#p#`BHxP `/P? =`G@X m*EW\RYmPjˊkx3хj  贈 b2L"eOSPTULׂKP=g;*kpDqqu"W=_>i!WGY Uu>zo];Ν>o߹uێ۶lڼeӦ o\ njC}xA+x=bUV䌌,ذa'JVP _LHt? p; 4)q H2?@\> zm626P=-V`|־59q|WxR.?E3JHXPĉdJ'K\s^wҸ',~{zwBSJ\ s.͂C@a(TlZ*s*= yd& t6wFLZjVjmJ7\BkkZ1QsD}fCf: ih M h%1H h!ZMZm )%hn`8Ξ'~ftZؕJ wɁTb N%Agr;5ړ^ؓf }  εB2 }ƥX'JBVwb 6-`]c[EPڢ54} BSOϔPY Ag3*3AlB@gzr3]",xjG#jp]d pZIC * }YW q~o;v;wL۷oٺm7koXqݚn|%*8._aφvΉt-{S̹_Wq A4&߇*-/N4OoIgĄDdD>$? pƓ3w;|D$qÈ>OH3$OOF<2Aw ja"@58_h2GGG\ʮPB/D<_;u?rXۄ ^CjW3gM2=j< _|>g_X oȖoloػg>ڽeEo*h֐FK\UҜgІrԖŮ+ejK\ ֒ fU@i?3-uihq*]*̷f혀&EQʜe &S2eS@QGfڢS $C" )K4K]PMY4A᪼ SPh3 h}Y N$fm\g3&ы -uM:WCWֵ״UX>`gC <=4@=tvww}>x:/d8ҩ} D t"]sЗN/ X@ө? t`O + DH*I̖@Co4*k\L@s(  EBȳm?Xe*2 G}!#ːP^hB U \ARπ੩u;4I"*!0N@Xgvcm۷nپe6qfv͆uk6Ya획/( 1HdJ`Ax;.:u:9^/<@4&0aH: ,Q1 M>3L(*4DϠ_+$' .{Y zM^q2*V0ď;~*|C<ĵugW!s'*V+u̘9k֦|^>,;ӟ5_XYՁxG{o9u7_~kx3p Mm5uZZY㩨tWK+[A%#Sgdpd ,*dԲ,>saj ]RѮ/g7XV25V<EBU#wc(zsKW΀0v hH@  =N@G|*I PS= 5ϲpd4nrR .9qйЂrqWDuz_- v>>0T} ?poHoz'9НN%LwF IR$fz,Z,yY@%3r}1Xh3Iio{j 54z:ZlAZj :m -S( xSxAxS"ge2d(ޙ R; erIL`L z9'׌SRɅ<Ն8S=_#QC"Ad]% wwضlߺsm[6mݼiU׬ްjի6«&oWSGpDP)+,N/℉$~'M_R䝉wnQ <EMeI6)!|r>6P2j Gt𬨀gEG^ %<ޙfm< [$$~Dg#YEԠ.q!z#Y??%gkX}TaăHHHH\:3i9+wxh+?xGN|ԧ_벬 _tsG{d׷Gw?{z}tu{;#vK6  }F?[c[# `@z HЌTIeZ4m'z͙sw{\?6cw`A CԠp1rJ\{^w|??2 Rs4/@]BBBj0c)Sox>zW]|N~kN}5g?_}sfl?<t7c7}w/B>_f>3QV]箨vVTL,낱ip\2)@NYWЕٵ,Ǡe΋QߒV%Nd!$%NYbE@,Y dL e&S3Q A;иD)8*\kk3n)]- 7ClIM`pFX?:TPuYϘeHLnh.ąrO¢&\43LqLF3isEZ&Ke5:_U;{~@ς`:r@'X_:ڗɁh:4&P@S }α# D$EjDy A@ 0P'httHSҮ5ϥ&;L@k EjJQ\C쳬P8eA1jTz3Ш~wT6B5gФI4GƑRc\",fB=|Y h*+4<ߍȺJ{vݳm[Y捭[vnټcm7lklL@\b4Ng2r_lG8bT Ջ!N*?mw&?7Gw} >Y!@bHP P~tbAt <z`E{⪨7pJ3b:L7v!.!}2qćJ^ܾם>;K6Nh??NJM0$$$$3f>yaGo}/=񒓟93;3WlWsh9f~{l'{sGw~stc?/_}oh 9a Vk{CSU2U9MJWI0;̬VFl4XhW>%,NWg!6!ԕUWު)u v֬Դ(͙TL7Zhb("PF "dYg(`UL%FLh LGV7jq4 h EP3X@7ɅY7 m֔UzRǒ\Tb0 >ڃd8ZzJkUjeYk&CAТ|AAWj@kYu[E_Yo%x磝==pϢޅ= zF;KMG{:c=XO*L/,J`:zt&9h"5`3:y}&wHA @; záP'1t8H$R@B-J{cdՕk5&*UJuJSEq"`mrMy<~_U|+BΚ # #9kxgPaT2 hE H%%)diGJL>_,"*! лw>7n߸~u[֯߼fFrź+֮XfŊ=Λ1󿺀ƽo8TE/?6Z#/68%I\=1ȯQ䝉ӿu0Ky0o G@_]wEUr3) O /xX/|G=NQ?(tjJ1'W>N?[Bsu BG|*?uia#-ÈF)BL@/>c.?לٿ_Xsoخsv?_O{sGw}stw';w_yj䩭omqW*۹q&t\F;uF\V auhJH{hYbr+ZK+=8L ДCWG ԥ/å6]iġԵ(X%Ka\̒ض5M<[g)ehhUS2# G&Z29+[dj7 &M3X:E!hH¶+\ҞS4X?nS]R\J wF@cZ]P4<:C5Ny8!hhZ\(W7\@7nKsCD]*i-qVMu^S!l{CCGӽvw?H#Cz{;ӃDo*֓v:chNdЌ"aFC A0}@O]@*O$bTg$oD͖`MgvJzPj"E~.TV(* rd: XgurE^LٯNQS*i^x餉jh'=29eTd(r=M@*ړt7*dehCT@򢈼ȺJлwݹ͔ymXuݚMkn\zL@/[<,- K"~MwM'Dޙ_yQ㫎∦eu4Wt?*ﲈK\c^eu-ﲈKHHH\ f̚5u̠r7VdOןdɏf2z՗~}pC͑=;S~u_zlu[,nVWVb]jWiԳC_fXFżѩ+qjKDl1J[/DWҠo;Mɣ%v&1l)Zh]GmtXdUl,ؙtےF S ׃B$`o,`*N]]x4툛-ʆWIEoJUL^-WXt E@S4Z"EMQq\rbGO/W= z~$Qz3@6I4& %N \J BA>/!Qk%5u!"*!0N@7ndI7lض~u6]yMVoXjk.gyEWtWt?.Ot; &L5)}Wt<ۿ,F#NBGE]Qwk ,?9]Qw &Ol,;㟬8ɺ:S:onȖs;cΟ}O۱;jjq^WS箩kuj.YbʙzgR$\FkKCG%[ig]ZFM.iB6uM[ڪ1U'@A]BYY\6 ,P6)S ʙ~<,+Yf4Y5(P0ib41M:zb2QYql;7$rV:g2*17-k:J2A+oEgg6g9 -$⸬΄BWʫ=:/(ieڑpxhE}ã=C}=]ɾtj$M$x;M\]4IH%$ ɅB~\@}'35Y  #7Æй (9ꏄ#8CݱH2>GBp*Kv;{=fk<5%eVhMJ5ЀPV+*>MoP*OQ<^@S>tU]YM>ԞKTH( 弢j,fA@V@E9B:DZAn/tEd]% ;l߶:mm]v5[Vٸrպ+-[fɒ5K2$W ~MwM'#}tVQqMw#"~iD}8$$~TDeu"#ZeuL5{C-==ʓ;ɪS<W6|sx˹#yN9wl_;'?>s~eoZ-VoCS{MT.t |9ve|&Įg&î/uJ݂&l(sJ]Ԕ`dֈ\@ctTNuK[ ZFє.6.ֱRg(p;mEAj A P3 Btj>һ(tmz%Kb hk}&%͢X- piA,t9zڐPe |Rˤl *J ,,V!MzvUW h@-I$G{>?;՟J %#H"ޗv'"]Hg2ڛ H:5YJh< ƏD2}Ђw}&|QrDC`42cP,:/r@$bP< #T:IboU9j[KMbMR]55y 2gBhhul3e#Kk'ygLt3G!mU ) yh\PO5ԞJ\-rdß*H@_>nu'wl߳}\@o[v5[x+V[t;^d͒%k~Z}YDݯ88$~,'7$j!<8yDYD/G4ď,}YDrD˻,WifO6;8ٲ:<ӟ>b7YGv?;>ܑw;S}XCC64t+%&;}gs&sr:gvBꙔN N!- en?Sѩ-%MŢt׆=ܔBW4J<W hAz&*3ogY|nst!G*Uͬ,e8D^EH587'&4k }Ό^t/Nl& -D@s&0;V%Zec0W Ra& CAB.Цv;꽦PkE|ݑPztodAPoO?H%FRT?I҉@2HBh26jh.GDb$:H$&\@zgЂzhFA4:D9N&xlh/ꎄzсD? P/~lt-rFZU6S¡5+u*mZۤ(!hhʿ!W٘eS_eaA͂b4ѝ>5yg s- ge6y]s41I(bU@\EYW qz۶[^~+O YeͫVmXbe.]۫yg;{i)_qD]qDI5B|ʴ/EޙDRDG45/∦Q}~E]C/OhyE]BBBj0m)Sg;'/?93>wd￞}KG^V]ZYZ^ҕZl}Is4lGAmVn8A^Ϭc ס&Pe0U3`ƙХnn2Th-kh##ys6!m!,r!A/3 L$2Jniy <ٙ{k)2g6dTjY%:&T.R5+x83g,ؙnns4Wl يh,r0>:8s4q -AV˪OWT1+(T+4?*ƯT3/ e(&& 㪂'Uj#A=N&_^C$1-44hC@HA|Cb}Lr"I@ϢD8e[w]e-knVo^jʕ/_lٺ%K֐~O=$/G4G45Ij~j'O~uFf^䝉OwYo@45/∦Q}~E]C/OhyE]BBBj0ciSgD/;ʓ:;g>Zz'?[uz͡]玼1&9}>w7, B m -`C[e}f>¡c Z8,3Omh~<fl2Z_-d1[MY8H@N6H^fMY]bq86ڂR$y &[sH@3A6䖙i_y}Euy5By$j|dZ0OQ]s3ҼfGe=WsjeqaS 4D6(գFjƘh,gA@z!(tfU6C.,g^#z,GAA Wieq,VBU `csL}`ob/9НOzҡT: :Qt%=h%;X F1悹FёHƆ#B96Px#`Dq:fY5'kCNl%lP'EH  SGydёd4䋸]foU}kZ^(Y8jQm*,_hʗW+,(,qJWj}f)8ZSjwDdLҙ4||D35@`pL (Y)#\PB%9h&,ks!|}U}"*!0^@oݵiε6]u͚-`ժM+WnZBkzkoI@5_qD]qD'cL|Ϟ 8tz!tpw<}%x_2w;{g>_Jg?0?~SMw#"~iD}8$$~TDeu"#ZeuL9kYvǙϖ`Wp鏖dũV|×7;o9wd~wßzEMMΚ&omUQ*r+]%N}]ͣ\Ī-i,G1}Y5%JsŽSW XrĥsMrq,:Cc fM _*I01]J4L=m'hV(\Qì@ِ'ϗ7*y"fyL^_ Y r^8hE0aF:8uhLwfC2 E=G_X k7x Ie=[ $1n㐡#" ̥=W@$#7> :h'wnʪQJq̹:go=^7zZ}vW:J+S_γ33Ģc٩3KL9WlA}PƑ`jՕp1z`gCJOۑz榬Ħ.*McWn^A= dbGGh7F7`$6/[(.Fñpl32 EGЙQ< H=AEX3qyc0O`< d"ޕ%]poS,lW)1YT%2&+ƷWy2ׇx2BuLS'Sg" Յ<Z3hJ0N&ZoՖe7 }QPIH2G@GJ5G#jH@)h%T/eX~t5e+¥T<0rFH.,5Лw yM^t=x睵oG@|YqƌYӧϼ9gQ 1h }W%wlb~7]w_|4Wi3gM23f=[_rg>YzUg?[{mжm;wd7;?>޻qxTi51l+5JX:o_)}GYƌHb:JɠG1,2?Gb#1#ϼ1a!h=`:JcXo2՝Huutw斶v&+7㹕ru]iA@9(g.A˔5E1K6oD3~&Mp  hCJ@ }-8RcGK3_ zTb|4 jh:2ړ8 \Cg2A4_qDf޼eM;zdyŊM˖mXd?/^ꭷV'|I?[H@Ϟ}4JqEPpg̘ӧE?~"| X]BBBBBBBBBBB1m)=SyO}Wu_zȎw~shׇwsl﹣=S{O|Wwk m5u.SVVa5[KJ%|A.AsliXgKL\@%&0tcI@kئL@kV0XMSU bZ՘.Xy~ &OL.,' h\ ,)3KM1m6H5 ˪5oʛ<3ΑX6$k[k9P53Mrt()G\|<2% jdf)f`I<2;ӱ1y/rzqw'Pg,ZJZM]n/s4fHU/WIC:h!:*j;uF_}o=H'Nw%z❝DW$e,C@ &|? &cx_ v:=PoV@EXLt3iqeՠΔܙtD{jr:J =wt߹?7'۽eUWezrŧ{Ogpm0>}'sXڛ:LrdՕt}Y_b1]_bes4 OVФh:-112ryf.L\ MRcVQZRF0T"yEe"U\*ʤk JIC3LZAإ0d8erf~aZ,hGšl6;ò,d,(7F&ʸY/,`Ѿfw6hG /=7R|)aL":AWgM5u޺@sKb :lA+mwxx:nOuh7ڂh$:㡮p;`P(2 `d0y8A# I@gy9<9;x^iF,’lNDGzb$#Bh;c:LCtC,|kQWWg4s9}Zک5zIS҂G/+̗WU- qJV"]`Ҩ! -)~q^C Q;-eЌ(jq"V-r@ WqzƝ\@le6-Yׁŋ׼ƪ7\\J!񳆢eޘ>}o~sM7r7^ 7tm(I"Lh(^QBBBBBBBBBBB3cSglg>}|̧x >__]='>G@|y"L4ꐇ0.g+Bi"- dih [3F]Иڳ}#֨RNӽ6L7EjHYL#*dY(E<9,|ɱ|sA Tʸm7̖p9m3q;ސۓloӁ@Oq/ѐ? t!' }S!0`?M8Fhd$Hx d9Bƹ?(kFMg 0Gzth wǢHgȟ{c/>>̢t2Mx{f;z~(^\(w˗o K~Y~DWv~AF_&6mCO<Y{f/lͧX/ms}soO| -m֊jkyf0 ev]CPŸv %,,RH$pgB_0dAc\*cK:3`@qB{өd<mhjr8pZ}&`ڴF* &)rN h@P^ԋ@=jaD6tJS{N**E#H8)uD &G B%ǑjP.Ѥ4 ;! %G()hf8A6ǑӥCq 8R Ft(F6B SZUR\8RԆ)][Z[ߛ7o޶mmܸԩS'N馛SgƧ,` 7t[D}%$$$$$$$$$$$2g̞K~'O[Ot/o;{`7Gv?ܻl큦FwM^U(5Y%}) VՕZ96=KmlZfn`ٶfZCr=(f3 ,8-u`(fR۪g$JMRkV,,Zo+Yvԡ);fU1bbvK|LY"PlQ2ِy=;RQȊ32PyyyUs VRcA,uFAqC@QYbF^1`>_Ÿ)p·Uͬ=} ӄegE"Yt6|7&Y`5<<;gO %B,yq}+df0'|57YZ6źf¬)a4.l-0jM  f :Vw zngl zS_"#'",EO$ FXl@,>㣱h$2 Eёl&hl47!F@C`荆{(s \sl0Ga08*Ѿd|0O{cP7aAЉXO*ٟzbtgyE](|U*Gi]o,R,TΕ >{s hBa~Y~QU!OLƙ hEu*'ƯIm`&'Y(~&b~/m ~N65%b& -h $EI:dS঩#Yf!B|r`^z."5|uYkqzÆ]ŸWزl٦K7.^~|k׼oyx!AvY?LNSA/9 TO)?/uJD$jw1t&B@_j ЀS_Dh#*iRSZ*̹54P)t(hh@42 b\qz/@G\&BAG*cW).42u%hD:u: j0 z᪰Lhy@@. |ރD7~_l#GL0aL6: Hy/Ϲhp]3ڑ%$$$$$$$$$$$8fΚ2uV~'N_w֓_l8}xWvu~{b﹓ݶ]ਮVW*+eeѦe?scV& d:͢,gn02X B[ +y\{/&uV#W<8يbMw lb=A9(Z+N5SX1E+,Zj̀XJΓΗUϓyUfcFALe| ]p)#3L#T4KYԦpi,Y2禫i4Z yOXCrW,*Әe&=-*nTp'U'fJ5YgL  ΄LQW+MS2 Lpaiąxep BvT5뚃MNW w.gm}m~_a/ 9pg$M:N%GSH42 GCHt4H$dtU8 2 #H3ꊄ:náZb?H$xb('z Xo(wi7 $STO,5ãO,\ٗpIDATw&PU+lFUg#eHUß+yy&7UfCǶº  <|U笀Vjr]^)`Cq9DV[,HR 1L=uGa|3z6rb/|Ykqzkl穟7._ɿAͷւ\+xco~zhޔ)H:D)۹Y\NQB5zRD;‘[?vS:┚a@%̹L58 S=U)H@ NE7LP* Vj.YpJ6ꈫ48 Kw;aLࡡ-qZ F@Gtju%a-sWP@=G#cU4&-nhI@%c^ 5( 5S# ՛oc6*sU+.Se |gmo=wd;ŧujkETn)-"î55%DWew cY3ܲ%S&ﳡIb9r'9hx" &CR5+5f3.AVi@9hC]4 hL^e6[4%(RecX +d58ʸ}&Y\_tm 4qZyerY(T,Yn: 9cRg ,3 Jv 0zii&9(@P(dN/'s ^%oiٿm\D@5U \@fkb۝֐ 8]Q#qI7 d$a&Y1_Y@02 h`(<f6#^vӀ`wPo( cсD|0dr(N&pڛ2p'h4{Gzt u'zR}H0{J7RtPY=_VAҙAg^QOޙ44 h$Y3#njgV?9g87H?Lz(1 %L JLYQG t>ܑV(x04zH _MDf^nǪU[/߰leKn\dÛ{c ~oW>>8"I:&M[{ 7' J-sOJ58ENIaom҄ qh<$:wŒ8N2 P9utPP@c k@=!4hvwJh䷿ۋfZHWq #5P#4Cp P/c[nǑрeh{G`7x3FU[lpͿu'OP4ua40%Nԁl=Ŷ8t7Gv}s|?ڴfy8V٫kUrĬ3,MSbVZ8HSds4vQ>Y+W D7#>J&.,tR(e&g*hUvK<3S\=yvg\Klt~Q]%E榘b:$F/*39|1&5P8h^fWhy"噲1L1+rL/e/68f$U tfޙu$9A*.@F_Ewa4"4Z-:Bv{pl˕:`#h4zyro$cf"EY #,0 `?s}B7>|`42%Ø"gdb(Jtz G`7I{ѮD;;=h_g_*2Nw"VW,-ïYolQ隊Tx>!YW-(ϗWɊk27 5%|8fK!x̿3z&P#ެà/eGSR!LysC#TD? kZMF~G_x3f2=7܍%O=O??PRR:eʴ۹mhD;:u3̹\$ʨA}mm}KzQ=Dd Q#u<2@/Dd'QF:-Pw 5T٩U~vh,8`L$RsNi.aIt}(^0= HkF=Sm1ZB{s:Xppp-z'Ǔ EIS0 Z B .%z?zc.FSz4)N1L1cjԋҽS sWqJG\ZDԅN*ErҬfq$$$$$$$$$$$$fΜ2uV>ӟl<6>[9~yx'?pၡgenˬEo 6K!Y*A@%\@g64D@3*<z\4O$=N@RjZ/g-XT)v5$ h%g(d ƙD0tJtДTZ hJymV@3Ðd<# )rLiRi^:,b1fZLRD3K.װ|N雳Sku`нTOwPg(ݡHO2וODxWw3ꎧ{{;Gӽd#`3{h&Z\@ (2 yEXi&u!uxj\gfS%̞%ڥmT5 'I)I@er8z&H? Da.Wў"4,jgI᫉^ÈUvyKlzׂXk+_mkz) zsLv=GޡC?#d:wtT?Bp;8Q?޿r;va<ŝwE5WM ;iJffG@2f 9{} #wߟ~ٿX~cuu-_ICQ%)@-vPfxDTKs@N* oFF ]) ZTTϿH1_ӿ->gpWA@bO7l7>_wϝ^~9QY*5 f=b(T 4t,Pxq6(`riKRh/0F:Cs-#qHـ(f' uKV+-"M eL@c| 4M.X-49}XS L4u$.ZA# ߌX)j;j|-A%l 5YipZZ[mVoo !o F} EcQ G#H82f EEz a[ fto8X0uTh4_/g1Z h"֛Nuw C@ߛ:ӉT d<DP$MBޠZU.cEkHU_/3er@?ijpz!A^(ƓoKK7ůa`isZ&* x/h1Z)S7URH@8xRnQf|~\"Ī p:k#:{b^ÈRp\:+7\T@? Hqxx>{&O=oFD &l7]bf69ԩ)M7rͷI뮻a/ҥoL8 #6 ](SX UZS (jN9R𷿽 TOG̎?}'HbW~~a$7/5TIS^p yi.Z \@5UGw"f3n< <tq K@e 2:vT*ͻ#˕{Yp-awwi3[[۾X,Aqн̙JKXVǀ]]=뮻OC p_ aЂqhp(Q_<@9zhtP NhW_@N*륐g $#֓ןl;O|4˿C{<nZ"LVUMUJ{Yܬ/mR ˿aL@id2UgJ]Rہ0A2UؿoXұ "q99 /hi*]#>vRL2e1MF6,䊖SC*- cQ6xP5)Xȃx4EL+1y*(se*Rp hFPlL:q&3@i*t[fwß q@l(W+U/Ѐ4IЂeqX\ֲ֒꺎ЖpYڝVk𷇃HA,<Za#C9z$]0N@G}Pf94 A`Px@/b,G2z@GߑRp"Nt@" Bvns{h*#NS]ZVa#I(LBʼJx2A΄A)a&4ЗeRK~QImJz6(o L3cǬp]TP7֏Ey )BOs TsYkK7-]x o/^^so~/WV=fpKzv$? {ydd>Nw hY]];:˕y9wu M4/?3T'4i `1T̢eP Pн&E5O hocSjj XBqn;m_[ D  v}@$>K C>#P$< Ly0" M8"l s8C>}^_ ݁@O, OC\\2e}^xs߾yˌLʏ>~7n\P #e*NV\3m޼u۶m 믯oXrѵkϛGj=Չl[E,Xt.,,Dd-1`~~/_Oc;v9i<2n84>l/8t~K{/3x/*noo>c1`N~{@ &Tcoo?rr߾@p h-Ϝ9iL\/dOo˖7\a@-cwYGnW7_z<%J < Ls!2J6EO3Ο_Jo5b?~7yg׵uqc 3f1uy⋍'o=׉/v:}=_{訪rWVJ̥e-ch-hճfY3%&ebmԡ/s8J{6VrWm0.]Y&9kWm*}&Y4,L2jXt3%k&p4 Se5:,P fIv'.٥f7jv5S7U*44 Bz@š\$uŚfo"ڡ79 *T,M@%b55y,ͭfh֎`[G#Gt2F@$ѡPx(Db БL G"C@8< F#LI&E >@uwx;Ҟ7vɰ/FhO"ٛJf[Ս5W[ktښ] zweԬ1-+WgB8E=mEt'K<d, 6PgѲ8vo?F.+QA;m0g*b͌X3[6ʌmF wqJb:H*0N@^c,%ͷ6WymWX_z}%X ޙN)F_ꩧ}ѵk7ngƌY488<2;7ו:u&2e]wnɒe[SN'Poa4{}+VZfc@ĉS}}iUhSSΝo' v֭ۀ1Q+?ٍm۱w{X,w?𣸄|-i8O8Hs1փ|p~{ j0WMMg-Lxy6mٳg/~з~rO}=4wʕo,rs0fđnG*P4V<([o O>l޽;vܿc( ~wuw>} 3ĥrm0c'vܝW3} &S%-*Rl޼_ FC|ƤoKurWGkbࡇ/^Ν0  饣,\}}+)YBBBBBBBBBBgu>Ƀۏt]'{Ў3Gv9bTUSfrYha7(H]MWj!)ɨgXZ a.};LԉTx2_R1R E\84z;B8e(@' Ujx R2 Bo+d[eF2e#m)FX&Pdu2.qqrG@c y fQف8"AV<.XogrMGw]!ʘP@A8EehʨGK)KnDE XTy@#sd cq2q|&Mfs49h}P(t+]eU]QV[kך}-ކFwsq[;|n_XH8:ixjDQ DC(l r? |=po"ߙJv{{z'GG^0<=<`_g4ao{ kV{?ko ,mzw]ZVfjTzO6_Q1 BA&&h֙a6hׇKԌ* P>qSO=C0H9ª{ކ^ &eVw8Oc^ )H_]]??e#'|~Fq#]0Z=r{ܹo~{ C*61y< OfϘ~?zW_}Wh",FFI)8H~_gϞ=x >#GO<-`3gb1CNgb.M7ݢRi?熲X_Y/ ^~կ> /Iz믿5Tyw˗\t|_p#7/G,#j@O Lx˴90}'ψO0 {,LE]Hw4w' Bf9DG< :e 7B,H7D}G7Ñ@+Nw =,Zc^yl |Ջ^_yg;Km6f,+3}x3Ҳq 8z8LjٲBzNRX3: zͷzMJė$$$$$$$$$$$$~̜yԩ3^۱ۘ޿gzg^h+ܥNV4f*PШ!-d** ڔ]Ҵȵ-&H@^F;et>^&o jl?@c9krm(Td3ue ⛃rפхnienAaq39hzlSf&Z=Bf19:줼N` (`(`b, uqDreP@/VmUWn3KLcmnpNk[A/&d8A_2K逯3;N0Ѓpo BPH~RjtqK $SC`"H_ Ȳu=Wpŋ+^Y ^||E]p_r`hzSh+ꊇzRT2 8v{Q[ﬨ}c"-EBS?_Μ5\B[],uYFA R xZiTFK|B<[m,L@²,\AдZLt7k!\K#05ۗܖzg#˿xk"~uXr@ny]g1g#4"E"˿a߾7oZ߳g3<dڴ?dd2|S444#O ?c}\%T;,?_^54y1ڽ P6U h ̘yǔi<7ڿlXN8l.-o)rdӗuV!dev^c%+5:ect6r[n]$5 6ЦbMf32$b혀VX`A }&WKڐ0쒦EA3{QnGIܺfŸM-Q*eȓ)397 uSV5"͒>gCK6(࠙F"Ywƭ7B+e$U,SftVCVN#s ,3猶&IZx")dt9Х֪0]ls뜶&ڢmQO[-"p#H#HLCI/u|]Aw8]@WN':!o"Jw&{z:A_@W+Hw>6:c Zp],yq—}7},z?N/}dp`({Dၮ;{RhnX^W[6U u&Q1"Ђ(lWE"_ پ(WCD3^ T Іꅟ*".[wg|(77q`4L8jʬR[[^X<FOG[-L=yTT/B_ô鳦NzN|mG>zه}b3*l2_w+KE,3xwpD>R`^!Vxy [Ihe<5wr42EVhQG&Yks􋯬 uRIS<ؙ3?L:u 1c֜9w/Xܹo7m+-]o/ҝwޅKCC#g|vzg~qEE\;voݺmⷬV;Vzwݷdɲݻ=p`II). "@h O(p+q=N< gp8ٱc׫rp{p Ï 7mKT ;q¢?Xjha腂~WXҥ}O>htXO<|>ۿcǎy͜yw>3g7nzWjki@t.pD K!'q_۷\v}ժUXZC[`'NbA?ʽ}gΜta1 n/\0n|ѣGF(Fy+VǂomRiiCGL.1o /cne޼<̈Kt _۽X6^1jCk_4}ڴsG>~~'--rZQ,79JNcMg4smE h}Pf6y3%4teІ2輨.ֈ4S/+ K$VA+x2t)WfI -bz^aemО`BeC?:s{v-hA@8MkjI@*jH@)(T4  L T Lo4x(hQhJ-l7B! G%]Q^U穩k%j7ZMvݕlty=vWް7! #¸r]@[k-ڎJOnukkD$w{zS=ɮNxg,6HbD8 F}ސ GRh$ uzb}t;NtwƺӑP_z/?HPoOg3::WiPҬC0BGW++-RI2=_V!]e22p%۞ylcC.[PW)zSj >4JGM81E#\HGas!ADf^z۲[}^mßdWڪ_Y܋K_xe/-YΝ]w{~rhswߟV\o9x P|Ӄyt/ʟp4Aqr:>OGd ܖkqzmKm]bxsݫy &>n7'Y0a3fdV*gq7uoo[&N|뭷M4 W'Lxu7\My1*q P}nfpr 빃h#-"%.F x 7a%&5@5erxb"@%ƤA0#A 6xnTIWQCuM7O%A}~7ͅQIS`^O@3ހ{ǽqfbo71FwY wAhpgSCna(,Sq - z4։EO&ţ0NQODQ^ȑh..tՃMp5B/F81cbM;ݵ NSvn GY`m}- m< ]gDP&z!t%?}֗ xg]S[`S-*XkVj[-( Vj4/k`,5L+sLB ө,%Rj p"4<ǔqLҖ1jv8^S7_V=J\fi*qE5ydxD3[- gFGE}>FVrV6xf 6h MJoSdg8F*d@Y`{ֱ"`nA܂ZYqB mΰX uZOYYSߔ8vcE[ҬffIkjCKIiP@eqRp1'kKE5b#D%_*>.QK.MCXRS BenE̸;Aqx"-:ȨG$VC@^Wmg7c7^smF@ŗW<_^KG;NI]Mf }z?/,< z}Q;|r`LBBBBBBBBBBBZb9SAm.xmvT0l3UM2dFxqL+gqK%FGȿ!@JjBw!zZky~K,,֕'"–*s!dZ9PLe6*-JW|_>M,yL@+$pY"&י>dQn:%D7%h"0y7} /2&ZBw3nA@u;v|䐼 #Gvۤ)S ha1IHHHHHHHHHHH\̜}甩SCWEcm}/}&LYWdenvofԥ]ϴyFR$Jd8㔠J@zJe΢bJH7TL@g}UeY8zkvL@3`Y5r)(tSbnkxzhAL 8&{t-׳% Y5؂&dYfKB38Zc6(e9KRs*@eUZCT|.Ie8mD8+4{Ք)iJUN&]L@Xك:xB,; yBm8[݁֠[;VۭVjxv`1mM M Occs=h:='NĆӏ=1P__*ܮ:[U5.,T*+뎕,MeL@@7!ГRuDenM.h"p:(iA +4Tu@P)im42r!A ҭ^\B@W__+_ze /-{%Olo /~Sܘ *VC'L8#kwu`.0PN {7_DlZGbmX>fKʙ黨& . fm%,X1rdCF:; ,$ds ) SE\̄,KLUu3W hRk>~w 2vy.jENl2 ,zQG*#дr>a㠞% }elge`'bl^~m:1T!,蛧F~G²ʙJYM/cv9ٚ/РhA: y⎋ h̷ Z6TK*JgiK6U+*em*k<-fZV[ !=[]lڽk{lKsK{Ks{]]UZY멪kmho6{@kk@wG?=|D炡~tAPw< ۃl76ֹ*J%&;z.&/sV@3,h4YKhTzB+ !|!?LTw; 9Є{'}rPwSK$$ŒE@42 8Edia.%\@³? _\6YI@Kl7 f8ƛ_O[.ce<*uaJE== Sbj)WԒ&bU?(S!ZД#W@bgY%&栙t3nn/TԶ5t46 -A5hf_Kn:a5`v\7[|MfoSQ^]VQ{뚼6{=i >_G0S :S#=]]dg"SYZa+)Yk `14Aٍ Bgu)MTеdg34>B݅Sjw#,@TDK9̗UB0?tS_U&o!u($\p4 =#\Df^r;˶\(_zeՋ/|Ͽ<202" h/Mqs rre[lݼyTY{RvW;+/a~fϾ}Vc| cbl&+0g[ t\D@:,LZ_ Ke,8o?-dP͂}jk<5B% h :4+ W~ksXt'DV2Yb'>hAͤhs4& e*fj8 J Trm͖4h@3UL2 U 3a,4(c _f rjq\ I2&I"}f:Y%6tI@4 hƑE2ܦ3&G ЎJTy%UjOU]GuT6}-޺چ_űh4ZXFomC{u}{U]cm-װvv7wRݝ]xg,oyZngkp `a@_ݢ5bfEc4иA&qfT+Q4> Iɺt)|+4nx8RAؐ<=0<_^M_ ?S|b/*sA"0[Z7ׂ9\@~U/W }E2Ѧe(sʘz->oQN!Ϲ3ߐgM4tI^ܬ\ a&phK,Igyq$+LJrV(sQQyEyhjVhc$[@D@n#d//D:grzP'OV/+AKͥdy9C^Q|YADRpDf5E"{MA(b hJ-rD44v*]%ֲvSM{yu{%5SS^VVVQ5L׸jZMmu[=~o("` {|>쯯krDX֢c/k-jXK2If6]d9+I== C*[0N".6$ -he[bexc2"stݠ|!"K{ 3N@loo|5׼ƒo~U/W_쳒O>':mڌ|Gl‹Rv̘1sΜВ5RpHHHHHHHHHHHbYsnK0;˪,FSRfW8*h(OԳ. З{4& e(uNѪ.BYSb%.*= sV]h)Yi:erT2CgQ2ٟ 2#ߘ.,E*sPXjs۫ALHeßT&}L hI̬naneѨ;-/ʄKcUM\@;Z -t3^Ek|+:,%??g9 >:|p׻ץ1o3؋ת3Uhyp8a/ǿ$[x>Ɲp:YiL :Ik_ʓ h(Sg2U ʂS*SVQl&lod&fG4)Acm l0=: \q!ǭ^u砌vsG- !jBZYYn*r/̐íZ+4ޜ \. .'(a旚0oރ4HC סlpB$TAK 0'b`qabF- UwJ7*:hfz8hc}PΠbMa:C z mקڔ[Sщՙٕ޾zkњg*r}Xe ˸Uq6˼Ÿ 1!ӁU:z{EL_EQT NN)&MQ: khI^MChE%<C0ʕtc䑣Q(1+P?;_!Il*at-#T6h/'}qcD%׫7^~r7}?[@w6p8p8u/?e+)>tBۣ`bm ngK4i8SL\uks^uޫ.y2VfDXlo,LA5L4{HoaHk0SF -ބN P@!ǰ3Kdq!I49PIÐ[&[E۠$uSvh(XۑT/H Cw[9Є|NQ"+"r/' ,iPwY+0)P@%h8=>t9A7xpr4*8`D3  zf,JAGB -]f ,"V(56ܢ hh,*-:UaIU\K0Y4ZBa0KY,08:dW`b ĂuvcWƐj2aU2^MVjڄWT1~AB}D ^ 7XP3rYGLfZT|?|5@T21a43%ß)HT$jI9duT8ZJ~e:v 7 Ow%a*!)xE-X.(3'R谮?_qӗ ãpp8p8·/~/Q/FUfSdRs }(ӥ V>.Oi6κQ@XXڌ #Ъd2@(i e O> C "fA-Z(ԠZ?' *%Bh\-ZPKR|4,,kB5'ԡW nKQ뇫%ތ1" $a \HT1dpfʨh`,x?. 2A ,@:⳴B4I|XQ7y琨fݮД4x;4\.n~P| -4/Z1ZaIҘYDG҈ 8W:KT&p(Pv>RjBIh Td;U1[w'mjCh!JHǭB39eG[U:`CrV .B_vJ&aZnúrB. ^'/,}p8p8yA/VՉbuThE3T)f괏$g4?9:$1 3hid氢 &Kp!hc .}8*ǭ z+ΏПrNc U/Ÿa K$l ^/tA<439Q@c4g%LyV$$#Pjz쌮\D4%&MvQ %tsAlD4nAw h nB% Xlg4:@(j쨄CF[q `cS! . A!L֘FFUAo&?tyX(֧+j}s>]͔30[nUs|:W]2g99(FO vj1ja d>:HQ@$)hWajA+&Na(}b~d JA~eQm]ˋE~BSdrb#KZQ9p]R@1iZ 2@%Ó7?G{- gIuqY8`Z"$\7Nlv)b[sBwuzT.5f%/tYW2" `OP@tvHRhp- mnF܎\=rhɤC=3BI+FT% $Y@Ϭosz&B'!LKCC97yE(߆ڡ hZ?2c34('GI-!?Ч/ٿzrO\@s8p8G'Jc.s9Wi.T[PE 0a!I蔧W h!=݋C%eFm`h1 Yj! ѸAqBt-%%j(g$0oWhKUe)A G%(e@j)bt;MtoNBL&ieg˸`{c@a(()44 hrЁ'b<r,f tI@K`sK^=/T: h!7 R]PdWzeܓ0pQ M27* ;án?{ÈKָVlD +gҜnS%M 7M%ʷhuAI&- uB ! Y GQ !ԁf:=1[{υqH4 (?Z"x-Fa*>T[XBm=wXWNe:ߏNIC}>ã$w4p8p8$ Ql>RpLk>W b[@5A3n6\h>_%1.r@7 Gqܖ䑑H2-CaZts._'JP1#3h8„{ͨ_%Lo`BfPXu;1QF4{s@;#Za49k໢q.Zpݼ@PaRLt8?:$Tin(6BsH( .J QnHJSV[ګ0-^С5tT%;s>Ԝh>0gQ%a a\s*ijg_eCҝTm; &L+I[h! K?sƥ Z䗡Bil8 'i}xaٰ Kz?}R3 úrB. 7?ϳW/'Èã-4p8p8$??% buګΖ3ʔ_t gˍT|>UI.bʂ[]DBzDi.MZ@[@>@Y8q к3ZKl 014bz(u c(l,+3=IBAB:8H̦BI!qKp l2XQPehT۔3}q+3ΣYΊ+k,0-grߋaƐԳL⮃#ǒ5S2Lׅ>ؙ%+}44{Ϊ6h`t^'NNn q p.⠡/ E|t]j tG4xT 5{44hGDsXgOqCPj V:\&(fʡ\HR=ژa 4RPٕ(e3@>@kIs8E:g|qaLc.C‹ C{GP  t7, *^ľ`IM+\9[u\Я~/3*烣/{zw .9p8p`~"HV6QMթ"~m (1 G>Wn3<`gJTm FXSFJmLw̺, OTA685 P hbD6Gvx2 \C=P!,j43R$ jngYNgb_Yd7/rR3'4جX$f}h1r_[yY)Գ喤 \f v,ԡH|%#6_6Q=+Ak,} m p,uA0*(0 :p{@mxF-Sħ&dt,s g(ZZA rCT䠡^鲀&thۻ9&簌'l ~ ƄFlR+5%*D?<`H{An | $L4TN(Y3 v (2gSN<&^ xڋ%/™ilS *rIv, eBmhZmdOzf8| Pԇ?U8K@= oW%W6(LXư>+Z[YʗYtzpxٺrB. 7?0mÿ~p8|h]`6V'RcoLi6]Mg+J}1rn,HD@gWvNe)O9 Cloh}& P T4{j5i7tP=$B=&-(}<)RɫԖ&3  ^t_ F[͂Y41`ʽ@̈؟嘯\j{dʕ ZlaZfQCO6I@C0 hz <uhɽ4iʰq@#ՌF4{c))VKëpst;yp{6GsHP*@BjVeZNH\A3$CCpI@3k|I@ Yi8Nwd6m#TЊ44TQ~QǜD4ig4Zq4O9$HL 8Lب:Jx6a9ٮ "IҭST-\1-frl2IC1YaHx@= 8yÁ ,9_JPP0#\ITrt ?_> #mp8|AR]3ӥ\1m]j̖k3e8CK ~( ]h8픧޸ÀJ(B9eMw! R䠱=Ш6YgɁ% m %&vRUNt9!(!duI97+YVHLIg0C* J$Lb~ PFKquRj0%(('Aû n&D41

ӝ`:jl,gS@7)%TQ#!8= r͡_fYz rk@ K<Ȯ/Km W bKwe />o;:jWm{BJ\){;q%LNH=JT@_@7xtJ?1=5gI(CSi:Q4Q MYuXwx(֕rI@wgw=?={{4p8p8??W# &t> hz ]B=-͸EmżsU](aݺ>pf3@q(Z5v/J&+"nflTT@4t2Z(hlF7)s [Qbc o2YZ(d¥SD*_!Fl;zPJM@(sfeJ!Nӑg>-x v> \Vnf2{Q.t B-x[@g>G4fhI̕2A&]CX}2d @=iTXq&w nF8*Sw w)N,eOP OxqM ,KDŽgO[vX;sCBLBP7wg  LE=3!"TPelد܆3tH_)C[NpXN>C%ű +>6 m:+'䲀~}I@v034p8p8*$s҄_j &z)8.tc bu}ƔЕ9LC:my#9JFYI1$h kB=TT/UE+,dbgO\ФS JGM&Rr_^he5# O h΀˅V7.P>+B7ȸB@c7L*ihD(Y!jx{&\p6 ֲhkШ +hX`dAn?))l9fG NQ%pR)YPizpL*N@iگΗꋥBP/KS43 v .ơ0A<[{V19S2K%ސZx&_D-h=l!UJ($Hc)M('sx.f~eqI3cz 4'MK-o`8,Qxڡ sXg_,2?4J:+'C@_C /|^ʧ;?>yÓ?].9p8;O1[T) %~e2*]fzn ʌS!f'ҤiB &vjiЁAfr9,)ŸɓR;U9L=I@cމs@A b&Q>(iNҵ4dt3*RLnxg);ӆ.]TdY8pЁ4KQNkYl,rAS!6 ,9Ig*:hzL'E/Ei]!@@Ɯ*?!dD0%kBA_)IDkV&H7w@3tfAiP3%!%i6jj؀EȜ]S7i( L ϒ -P!uqfH.f8,iFOɶ&L(BCCTT t (dbI7F$jSXfeI@oHT@ 4mxHo?TK޳̒ojؚ`?AzwNO6֕rfi7g/~(Ώgop8p8烄E O _ʔW}v+3tqJ$7P@64q 7:VBM=;Sj\VFFS\!3-B sbd.@}BA36{Gg/~xً7_s__ hp8p>$>_>W*ƘfyԘjS;)5r}T>%s@T@ƭ֕rI@σxǧ;?0>_~\~yʫ)0Ն[T>[Vj3_z4AANy6  tqFMoF-e֭aOV,ne&"1M9lY0i ѬhQ\fyQ: -,d*pzB̶c,!FV F:PaP> ӦkûRQYQtx?#rr/ h m{Tb9åz͋9ۃ&;wV9( CHPH; ːXhh&Ђ(hM@`ɚI:GF/PЛ(u@P1YҔ`BtИYwFҤ[rK3~yX( L2vYJ/C`sB&tw*N_ebxX+6up4olPn-KXsӦ;a.t  Z/埤ú\\(c?K¤j#H/>:'=} |p8|H0qN0ҘZ-L1O+qҤU6@@M#0gÜP7zX˅qXI@ƠF6!l _4 *71C{@Rɘ3@ |1I:Ž %:e.Tl?]"Tl4)8A 갤3˿gJ t9:Ε鮮⒀&'HP TЗ9&)#(2ftȅ[깕yt0^ Ziz̲a(rm\k§U4B W e`DT(G\n.a05 JuC̳8c8c)j};w>w'p+BtI7.,sƋC7RR&UMp*rX׳fwNI;=LL'RXθ]I;˔eL7d@>n^Uש%A*GttSG=,i8.LS HCF:-q3rY@uϘpٛ_>{sC#Op8p8CRpT(VgڴV^D32Y*O*SElB@SA@vFMwjmi3qʰ\H Q"݆eL:1" 3M╥rb(3m'9: }!̳!z:9T9hRQ0F= 3Y&:Sg( 4f}PCc"mD q&|a5W 謀+H@StI%$1C@+1G6C-Vy@tA \+MI핵~X5ú;j'a1{ ^ $,T7Ni4tw ZX U4g2TXA8ʟ4IϰNX=6vdc)/)%~ 1 ̏30F2$3v*m'Spʈ'X\x\OTi'8 IŞC꙼3@9C w 7 o@QGj @=9ha`H흓9Kc L(}5}Mb"?#?{sq~ hp8p><8~m>PkӘqLub :io?xzu0`>D(u"9$)a ttܽm6AHT@KN(i/}5P,t{?@A AsVh1fd"A*paA!H-$4kA O*3u.Q4f|R:( QCGJhnF$se3a9Pg1 ]sH"QHq  b"tЅ mEru<Ŕ.k h fՈA7N:`vfĆOn kބE̪1%E7ڌrs)P1 V/1haK@^l b/2XsT@a`rOI:I8md3fWNcr+fj PvF,CkZBa?^NkgZzv:Ņ_-O(?`' .9p8!byܯL)< hʿQM,tyY4fSwTI@fnc ڸf e y~dcT*:E9"A IXf&hnnjZP@y貵AAATL@M-]DbqIDhCҐEY{mHn -*LI haWhK>Еp?]i?,u55ZylG~ Xkʡ.Z㷍bL$P@q.oxEH)]~J܄\T҄(Kb}]zKfq*a L=CiΨЄ % ´ʡ֡|I@Z&l , 2M튉)8 5t#B hDLޙ.υ 1t-@.8'6N 7LV /Ꙁ>Y(9z۲"T%s% O) yk |f pɫM[_=p8p8 п8Q@c΁I ڌ_^uگ͔:& psvi3Ig,m }n h $݆ af̕}r=`jLW=gs<0I#S@M^iYh1Ǽm%BH&1J4:J ռh,Y> sX Vg~߂ܔ\BΨۥ)Ãroڻ/ַh C:4mBYܨWVàRcm'|VqJwÛ0 ;-i}~\zz^gXJYH;]=7.*KW c81֏}Z9rN}cmO_W^; }텶#kG~:sލmzۉ8J=9?+R%Ro0$ҡR5g*5 +RR5)S?=>8[cfP17f 8ӷ@KEa L`1x}Sn^"&d=i'D ..pC"'_?|re(Q7MI@S /y4p8p8}/K^iʭL ֋R}X^uƫzf=3L:O:N0azX|@m aȳ;nVM8֗<p8p8 2_0`@@pXM,W3dYoAVF8;cfmB t{B}Hd9E? h$ M゙cE@m՘tT@}:P@و:J,v PLI;s;W 4o[c(a +n/r!a7ɶV ]g"D% Foq G\QP1ӟKne\ e\gY s s=o}fy9Wʭ%>Wjksvi*NJ5'3]>cBcRp2ڦmAs^OJ$Oz&ft%dqFc=7Ww]ce*{g/vŽ^~n?KҾ|hyϤ2HsI? Fbݢ}V6䠩%6*-En*r *ܔ$\o\-(`J,&ƕ"pMa4 0GЙa̶&0E X؃gxOft9U'O1%}pgЏfy'=n="oy4p8p8ګM{I2ƝsИ#egmcNm'+DMU g g5(PctP'7GPP@z +EtAL@T4V. &g7J@NJA %.ł"wkG/%W2^:hT@Zz|1+2~Oʏt9.$3za]v:.t 'rI@۳?Rߠ}~+G_)p8|H 4Y 4Č_Oy+]叿G@ƈQw4CQ:G 4gƐޙP6.E3A= ͬZDt+a4ZhHT~J[@c) n^E45PG4:]0 t:оDt@@ mtt5s2t˰NyX_ -ajJ># yjgMpSNqdjj^Y~Aa#l!U#D of+(TaJ{@"妒~"v%- ]ƧZ?7OCey_[7W_L@_W}y__94VLKҞgcGufm望UIElIb#dk@et&jh &Mq9*)RS9˂&P};(~_ rY4tt|!:%t՛ȖbiO(L9OIzW9;4a]v:.t '!}g~ã'h';w_hp8p>(7\'D;tï^R}t!1SƘM4樀]Z3Gt;#N?*C -TCj J! WtW hQ&/B<!6 :k^^Sp\pc.fj13nL```t-fnOMm!`]}{?8_,Nz& jzxv5{a"$+,Ꙍ0YZ*@2a7=a&ہf܂Y!zBQZB-PwJ0 ? hx #r3b՗#cX_;TW=yP];.=7V_Xk/rlX7w;Ji>' Rj\hBw wJh h VZeLҝjܔ^QjFV{EJ:KEN9$\tJ)}/kVi,~&馓N&stgXΉ.(gr?I"WGO_h?n~ hp8p>$P@q63=n19*~utw t+3W hT71φ; u(Ds/_JCmS@$#" ЌYǘhhWXp4@9U JK{Q@fX|em/3^Pˍ&M:S7k2BbZhd <*FL M(L@GCZ$kEH:$m#_ąƇsY@l-(5j`b J ghHRCůG!Vi.O´S3p e(Q䚩N(]*}tN_Wc:Wj h'f}{Rv"n_f}Žq񡲾-⾍]Z9t6\`u[y^\v}gځZy+G}ܻqhMQ 2P1* IMQݗs򈠌HBꏋԄQdO@+4]p A×Ht>SXϕc;xIdg/~Gx7?GsH>~]д!a smB\)В6Ma*f1 hI>JWyN9)FA<GЎ&"EXJ5&3 ePMIܲ1":v2C4;u!t!pHJ.C.{RS@Q%*C9JTQbޫ-5n, ԣ(֡*bPa0[}p*X.: Y.iI7 7FYqB|T@cw)7 '\O #mzi{J\7Vvʎ/ZrX䠍}}m8b߭BeU,vMCwz9Gƻ:rǿV ;S3FlfRF cw777vߦMa͋uE{hG.cXPB#t >vxs@zcksqtCPKS~OɕӸEN(gr?I"_ |gP>zç=:wr/p8p8㣏?$S0l3y司1K^yX*nH,ʬ[$;Àfw qݝНquM\T@S4@@Gs@Zg 3AA$A˸G\[@b2:h `OP@C:\ #RKPsoVh FAKFÛlAgFPKcNP|E@C5f ץ!!8i*D33>aodzb`:^ũ>t=EP8ᶁ~e.NY=cʭ9h %0x4boڻL@\nxb}ɯ- l6@s!!TX)ӟPUf9Ihғr^&kD-#_J[iyyyu67rjկCˢLZvAmZ/K_" ѐz˲ev>nJJ_KOGXOL1ijea]v:.t 'r9_o{p_>~{,{9 h.9p8 ޘ_t1UY3ny-C=nJ¶&Ar7 ĝ0lv;ΡF Io2ec4G=Z4frr#/6(R%@ŲgDT`d%21btJ%671AOCGF!br 6M+I4 mw -n QQ.,EqHt@t G&m4փybeޯYXSʳ^-0 :؜"KD3+}1+45FcJwǡ$MͰUB!Ouh7qUoнھ~ov^7nƙH Q/(\Pau!|eUL3LfTƏګ/<1쵳tO˼sa%wg; 2h.Gg;+; wtUyye'藒;X5C,zP6{EE (va o{̺un<+}ҍcwxՍBi6-6 jƘj & ? JCP'VZ#s^=O*I3qC@4e Lwn޸4p8p8L@_ӂiGl-o*ٕq2<DS@8` `"+thr$>G@cw hlD Z/ >as(YNk hhǙ1.jL@+4I12b0 3tK[% _h$P;L8k ::z4$ahMq=CN= ^;"얧A1mqڣ;W*ZkTL\_knuC r&C 2I:CUH=çB>CI-TBK >KƠl(E@BU\zomOXuKדobPYV^h{ e1Z]fyi$\˻ʖ_cz3Yo>~t{FG(gˏi⍗iq}VyXy7$kȲU >>Qo*zf fDiN։ލʎ?uKk-?3:S˹YWV1N;-  ?vXI /,uX́J[tЛHY\@Gr ? C:dm.:7 S'?:{ ! I5XvqʫLd 7lp-I&,E˛ʳb\i,ꨘk}$: ւPB.MÊX h$ ߅`g#=M$ zW`y,lXBYABhǼXq+0u˟ōm{@YWCl__t^w̥]mEL5)-}vM -k恳Ȝ}bO?WlJ&2e}kws:ϼ3w:+ͭG=5(KhgRߣ2V//_7~(.Z->C)I:,jcr}Y-Iũ+MAg`= чe蠡} )GG5b K^ - hgt N:,{"t( iCyI@H@+S>TSpLz( ! cpFukDcv3ĕs:똠C r: FD@$t;2+sB=[fD| JSJN WN06ua0CF(3^8!AK4`)t3BmK{!CM$ 2yPq3?p=ƒw)]2r@?= h2A 3@ݣD hp8p>>O>$4_2Qz-yPcL@O1-D4x;f_!C%=zF3p!_c3ϘRRś& 8/hyf OVj:#es@p@[W h6e-5 2^i/#8%ʩ[@c8mÖM޾DGO>! xPTS4M7zDÌX/NyRmZ*䅡gJ vfgP6M䩡-Ё4);iSfV[BRzRo k=*fy emWZS^hˁq@Yx,>KOեgS}1Tyuzi׆2Wԕ#mP^ړՃ\e'^Аܿ,z ^^h5~TflPAiG4>+{0ZX+ TjՔ$! ||1TJSP4 hПbiIBU7 ЗH\@Gᒀ~'_B?8{{1p{(\@s8p8#_4>;lx#?bGP@C=fڴ_H@,Sn tQYg # dtSȕZчe9L@4z:@ABM3fAjY%B0^9tAaYF^~rи YlFۈU#0P2 hL8S#@S&uh hw 4MW5nNt 8BQЁh왗ʬM;E\7 K)ګRmXMХE2h SPv+d$ a謩(aT8ł?nxc2,lܻ/pl,ą]=Ƶe^e[a@\طEUd1DY|Bg10\ү}c⮾zd+յ]uiм[ɗ겷¿y8ooһ֭׵[//gp_2z%OS ZSkVKS{문q,6ֲrC0M\YUjy ؓY)Hl9P͋5AnJ5̟g/N zNgDR(Kٱ[=I' /Jt^?)̢NNw|n<Ē8O,a"PIZq D;{k{pC fDZ˾5 W! ]. {x_=~?>|ޣ?sGP"wAwxcp8|PL0!u16}&4&K)2![&8ŘKA[f9G(# ZwG d@NNi,)AdZê9Yq ;q&HFCgEP:0Y y ,L@8kydʉ͜ԄyChP:CC@\AXrˡHXha5~lIQstZUEWf,oRG g.N'l)M٥) -f-Kbm\Rr@@bGF@NI4C% 'M}`c Xo-SËw e銙ƵkZƝj⡵/>v]miO[vysu2P^|$/=Uչ' nzYF~ؕc鹹^{/_匑\XZ𦻱m[Pb͗ś[ץ/^eL75_ЀDgyeX,iJ]jؒ>>CzsZ+ r=fFKKYgR*/,%J0sP(IJ='73|}Sj«+`nXIi/匤ɤ3F@PNzד^ZUҡ:}FeDIc'u9't'x12D2லDB]i?r)/sS;2|zi+Wc9o*}e8|HKY{$S0Iڋ힄rpޝx3)w:L&ו+^KYI+qRy\)w|;,{$w}t~ɫO^}΃ݹ{rݝ[7$xhp8p> >Gl0aM!Qc?j^qTBqLk.BI rR(4b#L:ޘf5;cZdB%( M6B$vhfj k(,>$C3fa⯙\UY,'} 畾ܛ[,VWz&i̜8 c6y2:tog uW7t\K`Y>O4McNRثUXsI\& P tdpBrX4CKJ[cGǀnx${nwJXkj!,=wv#m#/h_;:>?3 ' ї0Zs-S~]Q>Kꑼ|`0wꞹD bn/-܄>4Ќ΍SD,kji9*iMEUxO˷~mR}MrJ#s9?+4$OR[Z/ȕlRІچ:;}W^w^ OhbYi$ 42Z>USRFhԇgi'k:E84}>)q+0YGzΉeDK?'}Mo/6xCRB,d LKR7奝ڍ-zlbW[#RB V B3/ܬXM·mgq쮟vo!<3~[sȘ/vlMKy+A wyǾqjo+'>Ll܍Sȝ/57P+)#_z꡻k-x꾵zlYk<Ʊ9]RM9}Hhn諻汾~ZƉv,/R:6f*Z<'>We_/xO_$Lqp8|H|G|q:vf i &_4g̪0:*#9$H h]l;be h;nhg!̜]?TC"(1GGLġ Q R~!YLQ>fTBNAϰ3pQ}De@PAK@ql*f-N`:t;D)ކb1IEIuX_DBm\*A rʤI7)&k neE.O;8LHV8kL!7 ? #C@]=Z零A|.?Ֆws᩾Xі+g3qa0BXx,﫫Ҟyu]Ӿ2[{HY=w]mZ=u6Ͻgŭ3k+?3}~"5W7%}DҚ꽲jAun8o87^oP:8/]xGq%֖ j'ֹŏs{̻ʻڹb덻+ zKKi"/3PgUWw#kZ}o1-`^=7Oc{^uWSoȘPI[Lyo͍Ck㥹rj/ƹrƉz ~tGdIxI{rksX=O={륳ڙy鬯WC}X=w6μcw:2NSyܾvN/Wbo2t>P!=\;|'n'>~ S..9p8bii[֠6! |7l#;8h 5})4B9hc(/oK, o hm hQm"/g ")*`A!kia*}4L > [4 h:E9̡z–Oo h ϋt~?7!3A "$` ;jybQ@;i-cr h4E1kSPF?ELCiC*fPRgJ8!4 z}VQ 6-lx^2څN]@@C_kS}5]yaG\xsm__P(0Vws\Y5+[5(-x<*m;kg֙s}~TW^MosXT\M)MZ.8pxe{wuځ s~F*ʭ3+ky󥿾cS'fK7[tgYQ eAɭP*xwƾqL86W={:4pSm-8Ʃ~l+Gꑳr݉ x`vbژR~7_ڱcNݕ 1y[w6όs}땿| Jh=)7s+(ScD^9VNC{:z 4p8p82a4 h49hܥ-uQ{Ѐ}!1 I$1p hh4jB14k#izLdW?䯤 eA3|!Ê`fS RK݊ 5ѱpH*Wr~^B-D3AN4dM8i˛DI4M4989Vq&LQ IFP!;i*ТX#9,^('8}#a_ݪp4>O>Jm^(1=29h'lh>W h@, e^}X|>pc@,t+`ۅY-AIM\3tb:t?!#A7 s5椚l 44 h˛7i@m?X]3 e!g a@#g(CxgNu9k$f9S!Zϰ\aR_<]r[Gs@_ϯ&ce,a}}u\z-/~.?U~kW%kDݭvc=^,אAqt̽yZDQMP>9Ն5r*-Q J_ N7ā[9Zb֞N*|)%4ֺt0$X~b|WnWNLɸՅ6}X;ľDJ9k܉~P[ybD½1)3/ޕƸ:k[\qӴJ\Uok,џK&D鴖ɺ]rL+Ù|# ;vRY7ugkb4o->QW0.{ܟHG@ .thcx@e~}ۻG{7 GwJM9p8`:O,gIJLwGΰ ;, Sp1hv$[=Zs5{İKhO!L>" ~;_ Sg}(*E7!,7X2A:#T9a5YW򨳃(fNn\s8I(`Dʨz&PvآPv#Ds@HyٰFC mSjR/䫂ثHMPΊ͔2N|S>61+gA^ EIh rC+I{YyPدl'Wrw$wR*5L޵VO3{mW*) %~:%rnWTi/=fwo/}e^;T'+DzM\3y$SJ'H{Rn,N"n^yi{Қ\;Q7=kb-ԒGƑݝw{鄓zRp8p8C-U_m8COI39 hn E!$CLˆG Gm;FYEBIΪ5CqYM/iP; U80j udA4 b,ѹ؄5t< 6ѕ DywꎹB[yko~gW €62qZiYBt=[Vci/Ym}l7N  ]ڻyZ:IEjJJ="6DzeWj,8UR䆤j6r_z/sodEER>(XcfcÙm/0OccGFe^ywgJ(ɤV{ڡqb7VbJ:UIf=)yʏ-*{鴕Iѕ2el%*#;#זՑl?3c_ٍɸ f]*G8 :,{$7=,P{Pwn|4p8p8"l vA6!2ahdiG-otgB3܈gJ.ρ4"Y(=I@dV͑6 PF ht@A+-3VfNejNB5S(' TjqV0FN͉0 r? h e%Lt蠩%l "^/ꅐ}VNt^[.%5'։y8sϭw3m?怮z8.n<Cn J%E_JS56`/>oNZkM-hRf^6KkXLl Nj7։u:/nܛ祭C1Qp -JzB@?z#gJq)pمs- \@s8p8! hӌAvڙ70ж7j}̋d䚯$^}#:l hC11 0.ih(C-1H8@@Mt^jlZ$;4ѡ):*;t؟OB:' _N4[PԦjAúXfVq-MD=Srw4)El'iaSL<;ڣ( ݨ3kQ!(ݯa*hӦ?Iy<>S"iӟQXhX]yjYXoR"WL7;x]q+nKOR5;M|l(Y-aѺ8ɗb + ;#Gvl־Z?֏}uy|S;&Kt|(%{GĐǯ=|wOs\@s8p8aGQ UBmy#?BS@Omw訃 hM9䗙=dg hպ h.ݯAg܄PNX "D$&nPv4q>:\c{Ay^hi$WpU +V``q:EUP3AC#3vq@Xǝ`;WҌO]& پb CiMf!(uwr@d %"3܄pᅺ,s.5ܧ}ʾ'*KϭD}cɢ4qxG.~nn*}54KM9tЀwuW<<+i AoJJS${HMK^(bSҹq`n7Oԡ/;miq׾yn}ڹ~U>mՉ|ZRRKV[=N~l/By)-eq?'-dt)z~"2VƷtG"w}\-;n?{'N~w߸p8p8@@gUhJZAC;.m͸B@|!t1s&*fG@Gd&u |MZB@ztB:[ F]#C l$sH;Gs2Wr>'`OBB t< o h$%UD[:%LP Tb3NNQi)qLXqA3e&u"5å4)iв9$h}yӑSŖl=t h܄0 sa/י|̷6]}aW}ο#ka_UG' =q'Iw汹y{l'd37ah֛ͼ/h QmP׍> ~Z?&EWUk;gŭ⎷:n^7^qj.y7!m-[Kgʁ2X[ٜa ij4,m}uaSk,Z}gT9xVƆ9޹zem+;]yVhƱ[M_P} m];tt)e}{'@ wo?p8|h|/U[@1`a!e;l9H_D@Gs@G@z&)CLt/C w By h,7R#'6T@F*@coo-Q='pej?^Td-Q0ZO;зQ.>W׳&Bw",؋;S}񹺸/j ;2(&T蟦Xږǿso< F }&xSYkyWTԖ20IN:KO(c$ՂR/ҫj-QZ7W+k8oRo{Xyn7oJ\FO*I*BEQʉ5Pjzvqؿ^wnwKJ:t1Xʏe=i'sYzVܥڱvOKȽ G깾|`?zi''{t~K6OΚ3Xg ^إ)Ýjd ~Xy2EB:vG{O~ٕ)~Yk'Mі̅#,=IύBnHY7ʉ筟DtU⍗$xQRkuAU^QozK0 h(7P@eǘsfɻխ3{㥹yn:{sw+GRB_Nh RKkXpF<o&aҒJΝ-n֎姩\wO:)"OXɴL9=r3'n+(7Όin3gk꡹--dj;d2n cb"'SnO siG_-*3dRO*&o h%7WZʞHߊ+]bOŽ'L^2駤:{_[~{IH)8mqЁ}\x&f޸{;|pohp8p>(Њէb!p AP@[K=b-Rp\&?堡rI@Q \ϡ6-C#K^hИ:_Bod ͜C*@3>1)߲%W.?D:nJ‡}Fso4d{KԚ x oŸ1efĊ="[ޤWsnYF9fbz xxcn3CWԜ1A4XC5(lBrT|#tbAnw]i7>)z;ʾ6BU c4\QN=jcncnypJ;w`8Cx w4m-_f7B41bh1CJS{7D[ZDY&,3LAй96$J=!A4%߈hg̹s B]t:w% CwuONPPesP0Q3\XS^eί{Y=C(aY8p8p8 Q@Fb9ۈ팘ΐj3)2 gvo So vqx&LS"%/9ײ`iA˗3.UjCee #DBy[|Zʹڽz-<5ǿSoɭm6;{anxԹuS2r_>Si3/*Ƒzl};e;mîk'湱v3mLO(LZ|5f_v͕C/Cm<з-^x\8q:3W+_%xL|˜^G}f+l5ti7/dB1nƝ.-xL.WU q:}^~+橲vث;B"aRt/=~׷0C(wr#.9p8!nt-{@<; h4Ap@Бw h xK@_@p{!A>a G@¨ҠС>YA_@}P,MRT-.'X֒1@~\i?i{S,y0ZL8d Z~hYXnyʯY4UsNm!\pu{LǡRa ;#7X Cռ-Щ|)6ПϮ 7 c> Ҟ<̚rg?f|vMϺ_%]PƟM2'-Ӎk关rb/k yJA eioWW/+ύޛ~M+ >4AOOV{EUКձ#Wƍ7gjs[PR-4r 亢srR[}Gc&M['S晅?^nxemsw Ps/R;禍~c<7^k믴ƱufnQ7^/3wy/Y0>}tJ&DiBWEx?ƹ~nnqo['ֹZldr+iwwf2ˤdQ4y@ hc34P@U Ղ L'P @̌XHj-}Fq.vAnRb wHg%dLf瑖\C*;[IQoZހިX4) wIM6870lހb؊‡8o;m`vίvX 0$b!S0?KNCqO㓔aKIj,37?aG[L>Po)>ofO7~Mڟm1V3`!göaي&p*Ka;D_5cv%z@cVԵvkY  h?OSq/߈v#a =5t+iRڥS]}upiRvϷ&;n!`Ǖhc.E_~)fǥH?a㬲a ={4v*j١m>ߛ|a~>B A?_ 31 z/R7uت}@QLQTP1ޢjw@7Bχ^4!|?D]cj;lޫMQ|=zG]秾V=J*f0`QE iC0 &M/Ę]0>[O߫PBLx*iܪd h4R8E4`4QA;EqvrD M+r9rȑ#G9rȑɚ5XCU@Z@16;B^6549bmg\%F@^!M,71;fj~X99>S PsP,4F Z @f4}j!.8_]RUR|g/пJۉr3Z wܟܥn6O4*haC:Ztz& Nr{@`dr^:-N[n?:Z,MK?SޢlF @K O6| z Y?t3 ?R0g:LcO?U߲YoFO?1ؼ\K/.~`}QCL.\DM3H 蝗#-~ 7*~Ǐ&lN?hru'<(;aO]o^ Cz/qi[-/P@kUݭKC}ZeiMEg =Ol{.]7:iQkc˚F_jدOKkve]p?SبGc֦-κ|{^ޡj_lܵEDm' _Wg;̕U,A+lU1LS*u\2>nmr+73ަv;bɍ6)++*Y(Y(jX(+nQޮhvJ)'C7 NlUߡbf MIeS%e*A ӎ_}it訃;٢m5]ޢw*G,啋*O@o<#ݼcutv np!1bw#G9rȑ#G9rXf|k(.ahz谑[T4,HYM3jlH?83=tQmZ;CKLjGYd КT5 M4JMosЀ\@kד|/-.7Ekfn-N*iL:E 400;k|L丑i4-a:x/h *ǎG zg{CZ@g9_~'Iz57IDAT?aay3*}>3l2@yg&_5s~bv1|Ʌ`ӋaL F@oj+aEk5mK}AK%5_N:IEjڇii=c ϩ^5Jj6+nQ{cn%mKUC*&'OWбܤ}39& ,*ܤ3EJ۔`[sE5[جbYm^ucf;P3Rf*mۤdMU-aQbgj;V0>b$π#G9rȑ#G9r>mC,`D2cR eS"Ga5Q+ qز  %IX W hji PŠ)I"3OK h" wi/yLt&Z,-qId+uA]PL|4[N7N½SNO{`--AvZTmh~J蘖]coc:̼bopn>eWEuG:l6ڵ֡#G9rȑ#G9r۲~~{ڿ/*:F c3\6L)NBZ-d@c!\+AoȖpp~11?n,g 4`f'AXeykFk2Zf Z4wjVإL,!Tήڕo(c  Ȩid|/ hM07|#ԴwK=佑{`-19/b葾7ɶS$WZ!2z&ǰAmú0 aszoнHAޔH\9-bwE͊&hLz  ?@稵g 5Yo3gu = ?}ι@sf}`r.>PL|h|!H &CL 5av)Bň^}=fPv5<? k@'W^zF 7M}"jiQܩK N[U`2B ճVU {m[Tv(nS)m cQ%&[P@oQ1٬SIex0N2q T:4@UyV=e ;l +~4ɰB@'.=QlhHu !}pVuk۰a-|֭`֯ 1zɑ#G9rȑ#G9rX:hYv{*:͎[l;mb~☁Qӣ&ӣƇ a4zВ5]@S*Y32BS }PLa!u4p@JF}Z2@%3)=*ZTRT4wZ[qiV hZ 2*G*GEU%*KCM%|ZԴw&(!EOJ52fkLy.~m'鿝pS|ƃ{vۯE:Ou{VwO[7+U@oÍf:G|{.\7=sG笷.)tQ,!z}gtY~1EBKB.Eecŕm#] q䴍ou203:kyPGQKRLj.] 5b}#~0ZQftxmqF a<2{5, R-@~ @@饐ts:3 hfV]zqRzUwAލ~hȲ/>^Wh]lBl񪻖!~ 6]J}Z9rȑ#G9rGF@ŵk~GZ&D@vtqD HD3cqv--eVV hZZ@10*ef4QbSnGEsEBM "VEYXԷT@C-֝Zz;nk00:d`p@_am<4ΝgcEc@K/NS"Z 3^]Vb41fQFލ~X)eY@{݌w"f=S w,T@X_mfanÇY_߰/kZ9rȑ#G9rh!}^~ IML䀑13j&X(㸡``o)d4ɶ&N XͦOJ# ?o)D@S9H:Gt PL#eDra*::`Tr!*b-v07] H4|5h-שIJpTR_L=[ Z  mB+)h}!SȖhwQR~^@}Y3}fx3g| K8CG[oop3:`x&-·m_ 3j~ uͿ? \CztM7v2m XaWCճT|-  R*_Z(E`pXƈGB8}[4dҦ+ WZ@%|eX8U-pNޞ/P& =i>ĴzUɝnB\.4t!@ xg7(Ȕ`V[ >h./Տ^7|?CEqix!BpKF7{_^z68&'Thk``ib|숑}#7=e7h5ܣk gM'Z<#j30׊1*a$,m0mɿ1'п@@K9Y@K\"h K@6~{e5׮Y֭!. rȑ#G9rȑ#Gο;, =oOutwi79dj~Q}CL3hzޙe4nv|T4fX I{\b[;LԐhi/[i%hT.J1تJ.\pδq UTc/~S7Nu'5p n6*UΡw*:A_ha_tRC -ƛ.?٬yᖍo4ǺLO*}beoı7vn; m?;u,0Vζ3h~ja5 K5=j;5thZjY$Doj2|*k|'h~G}>S-MT,Ԕ,_VԷoکW N.~MxL9m_[o~]CK] 8!ZnIE/&퇀YIF@UGc0瑹tdȨᷱlF@#WGI *{0;PIjmp蝹ǿUPP]f5֭{ ׮_v^mX~#G9rȑ#G9rdgq&¾v-YK >G[ii1@gx쨩C#G}G FU#NBq'-2T7,2}y! mh #q }b]`T&cD@kRڥܩ }%udNiMQT۩ LOɑ  |di1SSI6ے";iuj$WnrG.;njN!нjQ͠2w' f%S&M[%(oފP-m)n1H#϶lܤ&϶?ޤ&n&@3ڿmhVO>Q0x'[ >S4ڪbnn]Qsj;4vij[j뒴n}|^!бԄˢWKo^-}LhIxd4t-!߯/釋ZfOV -n(H;+etdHbF=lGwvmU޻Ur-b qа&sždgs!vΡSM&:1Ukk67hb烿|v{֯[ڵmXU9֣znɑ#G9rȑ#G9rh3w˺ulX:Ky?UPU3ֳѷճ?`h|1#}쨞!FG`}ÃƦG,NM09VlI| _)q0L"M &?'e2% .L!w 轪ڻUwiTSIc^&a r"s!4-U+;Tv)c@n!LB= KУZg &E&)&[H vПLt>ވ>d[椅i`UUTPAOnx2[R -q{"}nk}ʨG&O.ua>%I/>]K;Ƀ| N/[tdW"%Q(/2K|4t٪}$hRs@f+4)KlB(t hXn5/iᇟ?k4clgu[fﭡ*G9rȑ#G9r`L4?tvo׾f~QQIGS{^}Kmݽ:z61;f$L=fG̎蠏Z7vLKpP2 V۠0D:a)2`j@@SM̷֑@e%]d4|*{5m7 2!n=J;`[)ϤF㍊Xdc8oQy-Ш&Z)`Hjf$utZ8JJ*;Դv1U,ze6دcxZ***)t*JИ=M`d#P b 0Xd0@'y .>[~2ӟJ1#ŋ Lrsq FF@Clt>;}u%8l7lxオk֬_֭?ȑ#G9rȑ#G9rV9h,~֬]߆ 4T5L5uwiҮ{ 옑QAh Ff H=h:R,m'L7`4@l2f@KdY*MLJ3CMhw1jLV@RZEc%̵DMTA+Erf#f(w [[+}"ѝ]S`Q 3-gEDq-FT@S,u33oV0VT6WUߡ+LK-}:XUG"#ASM2͸c`Vepm))'*i9- 2ӟJ1#ŋ ШhʳK+)!蚝북ֶǎ}c]nÆ?hbb4Zwxrȑ#G9rȑ#G?Za ֯]f{o :jfjԵvh-M͏30>k|nHe@6.fe LWQexf򠍠⤩IRE3 hYz4 h Ib$xԚQErf,v*ᖠ7 x3 И~dJˊYy; h? 0,e Jfpgݫm_ C_?Hu:>thJ?\0 34F//\g>D1`XEQ"ogtdW"%,^cw[q]sScck?^v//n_?]k׮rH[?rȑ#G9rȑ#G?)AR's57~FEj5wkTܮ]Kwnm͏3X_6J6ld~w}0,|Vt*tdZ: ģV|ZG⪭VG߻S4 >~X+9}N ??p iB NY;IG;Hա/<;=g Pȑ_9c=ͱ?yIh=q̉SgN>p<8u̻8nN}~rZ©Ϝ,B—_w__/7w~șϞY=r{~8~.b{W~xvWl\shd8ݐ`kl;ހUWl(/[_d}"͵K6W\9ks6W*93vW]=kw[_[ oalaե/} 2k<[Bs]> _ol.~is mϟ;m6N"ĄS6O —v?; %]8\{ Eݥ/m/~e{pK__>>n>ޮ>]|nyA/~*\ڛ~>Ӓ ;p <0/ x¡b'S>C>WleM~x.>nV>}\n vzY <.^ΗBx9_Ʉ0Bzh|麧5h=A8"@dl Gbx8\wjwUnsGego\r~_rqC 1N7.8^?8\pӧ=}S>yɯ'<~cǿ)^%:(<́c;ߑBL q8x}-LA&x`ݰ_:2 m[vmUI*й:J[٢{N *;YfbAI.>.Ў4 :pp wrv qE8] nhclfojneX;Z;ݰn X;88ª`k[[+{c j) qwp 1>.H/pG'HgW{Pk +[rT@S.npj1t>155%!]]C0N4/G,0-subhdmcKlnΞ1.^0[{%؆Il8+ +!v]ܰ v s arR兣N!Ρ.an1ޱ^1>q^~ >|RSCRCS҂C#2M&%,<א&MXP)")qTF8%:3 ="ć*.+:>!&.x+7!)'V6}VvRR!;99/%%'557=-/#=?#܌\h33ܬܢBJaAQQA1P\XR\mQqQQiqAyQaEqQEIQeiaEiayYQ5^/h u7yv_H_޶!aPO@wSAQ^VVu5Z*Z*&VOC.KP]S)6= y 95@ZOm>CX&x@2 ka** S{Ӆ5ڬ잚n^C/MT.Jzy*X*y8 ݬHaeDoET/+FT]U]AwyRSTDTDT Y=1Bذ^RE*-*r{ 8wcJyqz9 T2 HS;P!fP bAv ; bg# #;gmNܬ;;UbVx_yj߯-_[U ӏf_,<~2?S%Of-f0lnaZ2 ־} G5 0l$Kff,aCΚo,.GÇ^BX&hafn~j~azai.(s']=1끱ꀱ4'^h佖;Mn74ve~30>>`~{N; ^i}>lIg޺Ǣ'z y{Ѯ{]{]|dhZrn[ѝ;-]mR6Z 5b?eCmmm@{io+PZZI`r8vV)B8a+K\{9J;8@O;"vI['jam-64B kT*uU a;=ҞB~}nW]NwcV*h!W8ZRQ-v/$tڛZy-uڪZnCmUS-S]ͮ\ ]^*-)~ sss3ӲR2neǧƦĤDG'GE݊HO  cnFތs3/ 3xDyya++3ՃFpu tv pq tutsC!pwWW..M,:@````E}nBvml]mm\mlm=lnrrju 5+\^w\v,7`u+7`7ܬo[[{ظںۻ;;yzy Ntom;O8alz⠡au -uwkWj٥%8vjh3ܯot!Ald%8e/-o;av4&`!#FX@mL @дG,w0IZjS"zg*MI4ɼ!r/Ei_KRSRhC2$Ɗjdm*Y._dNlU2^XABYunU]*j;T)` E%XeUQ<7Z@^@Ift+@,^j+մwkԳ pJY7M"Q8X'Z\YF@aZ)oXҿ>J<H$9#sx,./+;p h*\"h3SH{H0k6v!A8Bv:7삮Z(sQ kasM1))tcmMm]CS30G)p"X9Js \{j he`moc`h @?lWCB$50uۛlܰEp spbFttp<_ ĴЃ5Ol &5&cK{WO_[7n'$a4ń*``B`Z)1bBSЈT1)@XTjxt4iccc3̘̄,n݂ߛ3RSRSRRRSRr2s23r2r3srs켼܂\h J |0UnD]=̓–!Q+M}~ASQY^ t[x]UMv[MJx] :yհMm$wpɘvέvVB'' =]\~uV'd'wV&;X:a<7vrB''}Jndtp:9.vJ+2Q^^QU/,( o/ n/ k/ȮRhúQ~E,"<48* , и((R F b]]eAy<_YU#( pd<"aEGP]S$,@la%KX[& +J<@D?OoEf? `@6H3,nTeK F ;MYꟈGmF{0;ёLzwǞx2ī񱱉WS𙜚|C}&grrzzrf<79rr'Lݟ{yɱ{/xu{w^ /G&^ݙ w&^E^"Mݟ|ExyM6k'$L? 1XK"`|prlt:aN†O >1ej8IoΉ3OMMM"&'_B =pp$cO&_=sdjؓcϦz48|dW[^ixynnW^ܮ}ySb <P yg!&y6\|x6 m= χ?HH-íOZ 6?h=,ދi_wveqʍxgtV]o\s~W%\| r+])׮^&˵.W\ӺݸfefmlgdsNZl?ffq⠑! -u h례P﬩ t U@ j2No?n&fbmh| hy0yl;Th61=alv@"I |7Ƀ?#?#e2"/cÐ_Ȝ>EF:Ke@ABQyvh!^YdcYd4y|Bi$3L|~+ЛL6+ 734әCp  cŒ4H2-A3 h O&0s/e$?at+g=td )-5N[Kp%zǹ^nML-'@'g=y!;XYZ_ nA?5mX$@fj;m0m3{p[6&Z[`{G%!8$GG (n;i :8.>)w'`/\"N moRL}4.`p`0Xrl!NpZ4blEw/l`-ж!Na \="=c|}Q@ Ld44,RĂ884%(8WBPjKI:h cHxd 4"Lh蘌tЙ1qѱq YY0:+>13!13ɸ,Y)@j uTCdffgedeʥh輂|&0(8%u4m5j>w4rP@ףnk(o/o+o.hJo$qn휤έhUhMv-ǝNv<Je㪊ʄN.NJ'N8-Yy Ơw10:E,+;ʣk,AQYUQH~Yet]er _Y uv#D4 ºJ`@(lXY 3wW$uW$ o |40 @ pw]eq]8~ N.K.Oae2{*,JgnD=s$HL?nV.ʜaenT])M,KP*K7DIzJt)J-g2{%ʲ`md`qgPLȒWP BFWʒf8hjbsGAsο]ii|oxsȓ}O Nx|tdg{؋zljrlr|$*7h(?ϸ'x51|bhG_G^b0؋`!^@;26,/8Byfxuo]2X[OY&K؅XRþVgv*쩱G>ÁFK$e ޱg/&'^Nc4=qÇ^_ل1rݞ/&Ƒ11L=xOs{6>tjGφǞ=l5n˻ꈀ}yսj5*>F(U Ox<ӡZMPA 7<'4>n3h _УEuT=UsvqnwF+AwpsonW #-e#M%CE :t }MMŔtЍ}n.6 FZXTXPڷXP!/4 .Ek3Vgs%BVA9^owF LzٝM %]uqХݰ2~})G\JƒN>.  AC7 Z*[-A qNW ^jlm`r ZNC ǪTؕ\v9R\RR ﹙qJ2Μt+=!156!)&6d=Khj}#|oFތC9 W(^aD4k yqv@ ā.L3k h;8ZtbN#koz!vހ=^v6 ZCLq'އMqg[kW[k7+Wb1ߙ>;T=EW]^u&`pk\V\^s|510o߰vqusppsurv u?}k̀vbЦ L7ڧkWG%К:)T@khU8h zƇ̎HChb~l1F@14> 4\@F600=N -e3uT PL(teͿ2?ӧHgJ4uD=cXYmQ1DU^ƌ}f=t`[l*Ý 7:)L:ۡSUb#[fSY,Qy"h@#E5 R h,˟5OG~2.дj) S=n&zǻ$^qX@rBӇ-VElp*k6Zb$rm,p.ft ) q;9VZAtvrr=v cެjnF].qt;ءs `!$ь4d5?ꎥ 2o,ˈ3S`CXK`3Q0M겙`Z(PMy"'Wb6$wsKtoD}?() 8T衝Ù~ o܋$:-$H'HLLNc2،Agx+;>)+!)  mVJj6MAdeYy9yy9&A}F_X_L.(-ֱD"~=̀m Z1Z/hvQM3-qD@W]Ml&t㻸~խ.^r/QI$9$>'ɹՉ:: .ng'vaXr/ίJ䤢eur.NJbbgN gX,guGvKCaˣQe(򈮒R,JP!( BBa/ ER6_YYHK"c+Ⅼ$SS]S H Y?w't'vWʔT+CD,;sE O/d,?<"I ŠXqQe\),";˳DeYdeD/'H*eX坳*TR30,aCM!N07B3ɀ .4r w>z|WNxt3/{1'_NOLOwzf~ c涟< ԋɩS&NM:=`f0;0 ijN>|63|fKzF3${fJ gzffC= {:3sLǞx>5r\@tcp g&L<|:1bjģ'S/F&v/b憍->#7H3N73Ytq͕:hwst XDmaenefknoy3+"릻W_qlm;Y46;lhzd>=C:z{1bqv wqpZGr@pJ`HjPhZpX:,R;i1b3/2FS"3$DShhR:]LLFTLFtlft,ˌˌ"бq 6tbr^brέ䜤dBJ 妧fdKBgeegdy9X 0~#_ҋB,]XTRTY"Ņ%ܲNO0ЍzhQtX^K3`tmW#_WUYQuʼn8>7 zx@bW-/I%J& zX:YP!d6@sn^ex*hlJ7/[Te`g:R pS{BBwUJ7;^P4L,Y/C+{*"#Q+ ʣݕ@ aB "ˠGGwEEw Bee0@PÇBVՃY,*i2NX H}NaY"vj'W* W1ު·"8, Q%fQe*rEٔ^h+V0UWx_҉+%0deoA60'wKE,$g@́άn66/Eywk{5$ȥwjܫ/Tvrqw<<珧^>}3g&_={lzj|vonvv~nnUo53کSO'MOޝx8⣩ L~52$uw |0;hvӹ'OO<{m2Q˸Q/$e=L„x633e9StK1 gO}菈ٙ9n3s®<~@s3/Gg &g'՘|:9|a#S/'wNN;葶gíφZ6=}KpF{B#X@ŊϜ|.;k@`m+Rzvs"`p %H>H([!("-eeme}me-儊 B̦4W [ʅ-=mmvo)sD,Q;%T ۸¶Vu7 RA= [`@E7 ht!_BAwc!ߘU'h,bk@1y9م+1uЩ9II 1ɑa! aAq@@p`̀hH ?fHoH//OpwP0wppw0D\# 0WP\QRX5%El]ݰKE"-knyzL3HB[ukt{;: LZ;wMp Xs% z~V׀bnXyXai/{[{OGGOW/oo>A>N~',۶㈩"h ht IXF&Gi6دktMvLL gk@'Mw4ۅZܳ_lHk@3e$ڔhS|!y"qi>_"uki٫l#c`- VjoC#sF7f*MY-7k4;jdz#8͊MZmhhiG Ч.BKqA>3h8 02_al:2 q70yǠG ИJLT)eFRzgMIs ioж䅄G8D9FpHT::h*Q ه4s9 q wpعFae 1vrtrE'gvvpqBY׊:h4VNAN :h8KygMT2b 8:V4ݐ@`5R3c&nQ125e_Ep $0'gUKQҌ"Zjãc2"DdFdEfEeEfFf :OIHMMt.uɩ9)DC妥砆FK4@ҟ~#/,8hA%Ee( E lФsiv2}Cցf-hf3#;9퍬 ٙWPN?z87xn4y!Qꗧ̎ߝ|07xhh|$3Q@ʓs_l|XL<W3q2>9c{ TCLmN о 2~Vꠗ34瑶t8"CL E5գU].NʻmwZ DCb){P֒b`Ж*Ҿ>|aP-lcY&2paQV.lzٽВ^ ;>|U 6ѽ\O^I=a+ssIwSQOs"j*a aKywkYwkiOKD\,l,7rmS1lރE`ҞҞ28¾v8`P ^oW5 ja{N؉Ujuzhmu]mu-mu-5u5*V.gU*ʉ}.((/Ǘ `Os 3bS#"C#BCCn F}3f_$D=Kp wM wp*]Cd>#>#aKjCh{~hI"mm=ml<(#v^ߎ' `C_GډzH hEC@pg쳵3V2\z㚄7EF:Km5xM`3U1tI6+]$h[]Cw/4m8bide,a`ƫ@+"GeGgddTȘ؜(Bt\ q ٱ 9 I9(sSSSSRrsSs32213M^) KvhJ *)-*)+)_+ *9] H3 t bдsd@\~.ekҺy=!7NMnzjSkS{z{xܸvl/7*NK֦fvd jGwMz7LR.mewduE ڌ # Y===vj?^zY}}~6 HsRnWqs$^%+WЏ"% pE}~v `g Ѓ何N>0b`zge<,)10psʽ pV~ye&YD3 s2ZWx~](Rx~S撇ŏ:*w _ u<|vG4ēٱ/|pinj峉WON~0?ť7s Kص(?>ŅمŹO/grd~Ω'3ۦ/ubjh,aHxW@XHTHXCy,}S_ vWm-Z@441i+ZFVr ,i+! UC@P{@G@Gy[%M$gkUU}-\Q' 觢C`v~~׏Gd4Q'O؉ZsP1cM޶޶Jh YmB%m–bQKQoK)9@Z$j &0EdU_W ::] gO{]7V:mu\\ۊW[˭qj,*cU'77?;߿- ֣KMu3bSbcSSãB#C#hs, X,? 3~~7#=}QC#>#\}"W*ЮD@ChM55pqÒX&ppu=ekacNu,$3I&0ڇ<")&#QI;`cXIƵVsW1ٓr `emienmny3+2离}׉O42ghzP;4,v*F@Cgx@ࠞC4I棎AU06; 0Xv}gJphT@%8I Rnf3c(K<$)2֌vAj-п ӧHgiJ hFmUT3c~ ?#LiiFTo'*ψ pN󠩀,ӛFB"mD;Jꀸ33@ :!]XQho!/#XRSvpu q v@Hg;G V}g*vmJz-1b*m0 95-p&. =S[G,㠥 <\#""1=#M4v>ù; 0'7PGBgH(WhWwq3.1-\.v qu u 7 ;c!Ih+@A| tAkKsX9`3wUu:؜膻`-`M4U&e gPYd:eE#C"2`B(d+g:/[L&&": !Ysb1brbsoʅ6Vޭ伤ԂԴԌ􂌌̂, rr r%%8JJKKKKKJKKJSQ\n2Н!Q+з;w [zZ®nBB$AW]-.| #l6dvW%wsc{Bn(IզR{S{RD5I)﫾 qm.UT&K֦ k҅թ=5Zaκ\Q}noCNoC.CXS moMzomfomVomvou!NUgVgWgB+Rz9z9 "N+đ ZȊVŠ^V)#rbz "EŠHaET/+Ig'VT(+ FX18 ' cEl:[~n71[zs|?+i܌A^@u`u`uR;X7X?X]0X]8TS,-#E H).f" VfLq  r`)e` Q1rPL p8Fظ8%0p[⠩t!ͤUyA\/.Q~;aK3y򠾈2PtpAcу-%[ːG=۟ ^y>:3Y`_^Bsyiq!BiCd;?yiqviqfaaraabi~rqgȋŹsϗ->XO]@hi1O`)sӏ=g 1x4?fbݦm`>d 0X{0j8)x'9@z_K)C[=?47ǃ<[{.8GCřgy\WK co_̏ߛY~&y1mi3g qi_;v_Lo81-IJ@BKq4ZNo2O!?P!h׫{/vvˑgC`㳁ǽEՏDEuE{G|tУﵕJ%ݶR1e:]rÑNpG0 Tv;&tp;nQ@s{[9}m6.=U1U9btr:ٰP'k_>įW9CAoHP= 8.^W UŃnZ޶Q{yo{y s{eo+ЭebXZ(l)–|ؤfl9~ǯ Fz[ECf `@^V͵M5MՍn-ëb奴Faaa^^ ̜4 +993;VF\|ZtlJTLrdtrDTrxdrXDRHxbphBg*I {3?@MB >O;;؆z\=7*݃]=U87WqqsqsFS,Q#XC k岭vBh>~X4lRKs7JjC{JCKaakXch;楅mJA zC5I=[{ܰhdz7:kzBkgcsi!fm`t p݃o {HhO hCq%hA^Bx1}y!h1:Mճg }XCжTޣ>S(TPj2[6 a+T :K_wYl1RX M!k MlV4e 3fM[7n1blg[ ?oAdfoQM8fÍ%{y!W [  7?2?!>&$Gݩ|g:Ba&,I -ey/Aӑ9_&/d *;T\~M+fAz q/c= gXz#XI-C{.MAӵ TI[V7찇nHBLB-)aM4BӖ]ӟ>;-Wޠ hXcGL3I|FLg, [R$=]B)MpI3:hpc@ {u !:0$/JJgKZ\\#ɷk%7VHX 8hlSRӂC3B2e X&"s*]ivꭨfIHAGF@GdRF2Y1 @6:[yĤ[RRR ҐLtЅY@VafV~VvAvnQn^q^#poVEIC h zNn4 ~GhAk5iy|| /7DMebQ}d$ ya=H!/AT&U'$&%:ETCto}Jo[*NMoH5666{rzrEuYkj3zXꃞj & INrAcR6;Zĉr{X1=1"zފ>Vq(E(NJc+>,0Xq}(a[ ~n@U@U@U*\h8)[ 9(N VeUe ddWg Tg))õR_!ajBM0l+V VU an10ąŢ!^ ` ChW0@q FÜbܐsb }C adY!T9y4E|y+]Jm὚{Յ3!̤֐xgYL 5o*|TaKɣֲm 6=|yO4hx;cs/'i~“o^h^K>KqzI,&0zKpqهgK3n{<g6T@?nz܀ ѣu蝑цV&hL! -j|$ W =~{mﶾiy> <gO=%qo#QCQ>Wm+^0~gѮ{;]wBvW%NWŝN,`b5U9dtr;9~LOA;p;`dPW`kIX;+GAAg a>oz@P55~m?h>˭%}}}FMҫYmmŽM}}$񹷵PZ j+lQ''t ݍ#;}mw6`O^끞&U@P\_X_U_éqjlNeEEM\_x+=!!=.>5:.%*692&%":9o O HKpSFEj<#pw)ܼ\\7WpwP7*7\>M>;Ktpvsr}+="^_3H^W6Gb#V u9|P@)SN;O̳Fjgbg``jo&CxYI!ʖ`ҙl$oMtrvqup ߡurcz mZwIE.10odz숁A]}.=:ںi]*7&ZYxGuzg6odsnڼb0!#$wT7kPGp"ma 5h PR_~^zf2ǟzh3c%Xyn˟Дmd++=}Fa@l$~U#dtk6 !@?݊33h.ZrىEC$A3V@$D@;{ƢjLOv񌥸zŹz&8::X#5*U/7쀙03YG:Z :_'H%2Ā\:> 0|Xpfc`0aZ؜:7/fBҁ D;%9La6aM4 堩k2H;hj#3dt|qв:>!DtJZ~qВ$B33 2 s ssr.+),,-* 貒r )//-+/DXʚ}h)Lt{E,"h4 j~kEЬ2Q}.SzxqB^l//^TsKT,IVCDbн5}uY,uiܾ¾撾bQc>WT[[W_W[.IjS D貉Vqzq}X!;d:sc914~vl? p㠥y?Mg'a>#a&2`fQU@U /e -q)U' 3a[GfÒDXap}~^@ftp-,ɢL'2X[4R[aH"*ŵ]7h&D@c+/SL3.muHuzg^HMboWߩ-Dmڢqe =Z_Hr)wƙ򨱄a~chSᣦ-ʟW>d=~Hhԓ/M=7710jq럖&ߛ{6zׯ_i#?+?bZvaiq,g"_/b4_/C$>$;7YÅɡWs/柷R=miֹg-OQFyB S)L=hv6`A(fA.}|$`h'rw^^))]QocQCaCaըQȽ6ό(߉vUvASLX*9ب>.pg7EڹNpP,{1{Ϻ##( +jzXP=D3g(X'8$ٹPYQ>QُX09_w`@'W u.0yH qXFo7qo`;փ–fQwЃz>7ښxmZnmScWT*H卒BQH*>efdf$g&%'JOKA9VhxbHXbphbPHrs?_h_A70/ h²w w=hw;[7;;W{;w[7@& t~ߗmmh[;o;o+v>jlh$RG'¡oGԀޥSMk*MFIФ ̀&ZgQ k1!Z h_6y1^mZEmd7d3V-R@k466%8zP5d4W!3ϯE#s2s5UP44wЛ0^ßA[`dI`TdNf[ ƴt4w/jڻZ Zp[y` ¬#3 s{ޯ^_/=b1LZ[2Ō_B,[]'E)tC豲 TfvDcz0X Z"18hGH'H'đ$>hw8jM'f8ؿB@ G{kk{ pXF@yC {n&`3œ>cAiD9b%vA+f_77=Tg-igy0'7N· y9U2@&A2;tX$AS£Z~ ":;2ΤU8rX,A4tvL|NLBNlBnlbnT3!/) 90ڴ D접"F@Ee%ee%D@WTUTU]/h?uwN!ljlw vU UV Ʋa]l$ eNKꭽ%Dbtomj_}F]:"GZo}Fo}Vocnoc~_SQ_si_KY_sHP[_[_=P1P֏vA[$NINNx)[U}8ǍF"X}Hc}UqUqܸANИ̎& n!UK,6hN 2'q`wF,҆Sx)CUI~nt?' q+n5Ke--ZJ7ԕR=y?q.!\SܮF$4(,iJUm U KId$/sId*qܫ.P=ߓpNMpfiڢbxHl%;G>T@yziyF@Yz؛ʼn^CjQ* tqz“7/_!a+؄7K36R< bO5dd'b {iq%` 7o&`؛1lL~ia',|܋p&7`3377̽y37K3=.Uzz#~ZxfV0Ν\Яg/N~3907kYS /ڠsI3&Jz)[fӄmGAC@ G|Hˋ>lzt͓z,?<V?P+w=F;( :+w?W~}A}>@t=A=)wU`2P3UMLt@gPGU|>w]~A~b_1"`tsGܑnްzbk~, &r|lDLKQos)W؜'l.m-%=b ̤ƺ5!Q MaQkPНwu(DQ@ 4YQV\km@Hs}5+ٕe$snNAVf^fzn}LJHLJOLHKM田ȤЈ)Ls}fo(р"Éft{ȲvELY-egY@;cD@`{|og"o`h̞ͱrh1%*fdVngԀ# iIq؝jh[/}l\W_@mGMM4Qϻt@^VޥSEs.m2 @3KJph+fi* hF@M4#eW h&VH7i>FF֬1f_#d<2/s%WY[xgӷ4:hb)T%354FмfZZK<$YoQ0}t3 n-5:cxF@3}(z2'BIaE)2ǟz=O?T7_'T7ESeZjOrt,BK7$S51mZYR= h h7 F: kb8&c=ʸ3+'Ջj\ 8bpTؤR-t8Հi8:G8a !=@k@kR 2H(֠0i45zŸQ@LxFL>dD c:N,;C2C3i-hQ@aT@8Y@X2Q^Oh-lqDF#(㉀Ɨз )HN+HI/H(HG-N*sss%PRXPVRX^RTQZ\V^ WVa1=UQP6 ZFzFwnv;(/u=E1:Ak-ZЊI]$hn,i6$sjm@mľdgק5d02 tQCf_cVocNocMEͥ--e}-}M%E} }5 t)5i@m@]`}A#MMINB̉eGs#">$:K% V r@, bv /yD4t" 诊Fqa[|4Xukwkf  4Bpu L2PljcGc>'U% A^ Ej FjaD=e#u &v]r.yoJghiLۼ;Uwxz1ԅX4Ӗy>#B1d+\510XJ@ܫ F-:e Lyţ@mi(g)6k|g [J|jkcj ːOW}[0>Z/1DaM\.w:  @v7w7gCnNnNvzwcnocN%8]ƒ6U[F4က^Q}gJзPv٧Y% Xt)qШ9|"#MS&i(gRz&u hj?:h~n߭5z"1CONCÐ[?B֢z72CmMQ2]F1 F݄ڦi~uxvMMigvYG,1e46]GBA`3 &.7.XGVۢtYQkI96]FC;{:l(2 ELcaL2͈D*DRL— %AP@/U>wut455Ե5bFEe}yy]ii]qi]AImI޸_W[s7J\+Bm #Hb ҳ ̂)*r 蛉 7Ќ}ft&y>ÌؘtR|%;iѱ1Y1Wbb8736kC:ȘL;" mTdztD Qx4p|&01q9h>GgDQ$:!.+S3Ӓ/8ѹ?9/_{/%Sg:y3oy]A"IX}mЧ:y>T@}0r4-HM7hf~x0L@čG0k| o#G83p\F 35aP1`k&g @>G hʷ W4@K\̶c2tFT=õm^'} ]?q/|@w# ? ρmؚ@{x1tbPVtɽͨg*Y p2tח|u1,YaO@G'Aۄ|X@SMHq4в&dF]K MKaE$bWw)T@̘[q.E_NbQ@m)D.t,ZDH"c酢Q7ûqA*a*YM =GXIވKÑ*3 ]Q]^[QPЀtcWsSwkK7W@N|_Ow/@t@O*ԍJu#N V&Sv=1沚lfŨ7(MQZW}F="֏t*V%)8:h3)̲32XX-ʈRh td5VyU`7UVoFlfpu͊6eFz#\ژ\ny=;uΪscsͳ>^n7([k~`{}r{} ,><>MtD@‰;w\{e#Л`kAẢXE h#tX4;I:9\@ fgz٭B\%r98F),HfƄ3ia@=  hQ@OXσFM[zHGwY,t"N|ˣrk^K }^}/fqD&+ccc3ccDfG]AcAb7(cbb24)S;DiadjdF9R͒렑Rc&c㉆ńh4aav\LKMLHKKILM os|r^}^z?iҙ?V@?KOϝy_~g;ySg}gV@/3*AC⏟;ʏ>B\B_~/}4QϡP6ϒXL](Y#e?\@s?#a+47$&o<栟|O 9H͖'tD% ehbfy(Mk/3d+° h:\E{x1tBJ>$f5s!b?/\kY44|8z:蘜˱7/=`UxT\>_DQ!)QqH д&m19'cuLѻD@4đR@2:PGRZt`f\r!(bƺc:gZMuoF^w 7I⒊R`Zs9a>]>, 0pfo hAG&RJ3,JEVv%}v6;a3S:dW4lhꚩnfȑ::oAЌm$u5 u]@'-&guT@Q٘Va3z 4x䶙F@3(LXT|hH8&5כ,-qa6IF$YE^kS[m)m&ɮVH;6y]nSt)`]\kl; ::vIS5 :09P@WL@mb 2Fm h~_ Xϵ K2R\Х6 (FI]"Q@C[m Lpk0{Rv~2T@;5.AtN)>#n#9e},vq:h.T@xnzv00ܡ NЀK؎JZ ="\WuQ h AO}} h>(RQSRd3 n5l_=fYUkNsh$ /t.=c7VWW/ߞ{npwwoo瑀~zzkg7 n=*vQoYDz;{xbyw{ Ke`g{b@Iryq_@o ܡ7`F(Abw6I}4jz" {{xK}%'9 O h=Xpsa{srsݷ\uow\;UNlMPֽ[N^s#^f|mbw÷Y٘ nΠG=eL8Ip}&1^7'v7hNX| R&?z94k3ʵ*}f4Fkn mne˟Q@SVxD/KQ`qA笲qᴉg}T4hԼIoR3C"A#ճ0>@4]׀؋9^ f߅2Z o1C4<ۣyt=^a!&$rӠEm=e8 C(ƫ}v;vUu٦lC_eWuT<;g3z(vidq2)f1TU "%aL$ CWn4ޅ7kk*HsMqIMaqM~qu^Aun~ͼʜ7ȖLv$ ̫EY%f\)z+iW-J*D2 RRZ@Q5idPي0瀀NGjh2:.6d\P 1qbb}%L˥b0#&32:_Z*f0v#AJTdZLd: 92%@ؼ:!AΊ!Q(긌Ą䴬/'~(}>8S|g} 'gO;N?.[}>?,i hh>LC ⏟{C&A4!p͵\M4#}>Oٖ9C7Ns4f@p';`9@3nֲqu%LpʾaN߁O>CP+w,|H9GrX@c:G(%x G#S -w.0L zo7O?w-'}= C@'d Q7_~5Ps3U\%{gB&g*Y8! \tH@eO7Ehc1O9HG< G'&a5t"kƲXnR!i)I%i@)tR c1u$&1sz)S͉i%qL3޸BꝩS`ҔL8̋ˉFs#&&'6Q|cvQ\ȏq>"LV@dXn8T|=*9i3GN(I,MJuq ҋ32ʳTd4Φr7 }JRs&oj` 5G=_Ba!M 9hlHVD#J[z&ɀ&)@EM{emP]YSQӀ! ݂EQ}F$?gbE@}&Uy@H/0-#ݳyЂQ8.=^yfbJpc-~{}[msws}_^-_Fݥ.#vwn1U8ai'uͷ +w\aT1 ݝy4*h 0s5HLpsq˟} h eC6<ϒ334Si]LH@OZ݃>B@O#8h3g* 5 x^#mr Mih0Nϥu^]{BCs?i{t(rnCh+݆!'#\AmgˣtlvUSӁJZsj0x0h u(1KzLMXG|Qk']iiz4516RIl6Nz-?3l:U㰨*˟1ᯔFͰN)SrѰD}}dn,n ~omn,ogu:&:/f^UNn!Mc7e\-̸RD3+)YE)WR )JyHP@熊 褿T@\> dbsH@GόƪȈ}L4S/Lt*%:Ӂ A(c,f/BsDtj$qXŗo՛o>ܾ>y'NsȩNV@~*Lt~R|Gq54C\K@SLL_x헇48O R <~F :ф}˃N}_=~اwp} hO1?T:SL(;?Gs,cP栁 ggA+Uϔ'N=<:&bP+_]%pHl8ds!LM&:&\B }_]k#}yBr1:lÛ"r0 &boE΄?a,i H^s<wnH')騘scSKS*hIjx貉wƫ@'f&g[w9k9QMXH炘,&'F'^&2bTv> g,vM ц݌O4'RӊRҮ'gVa$%$5(M*6,Jyֵ+kofߨS{-hoC{VvPGfx.B q#k8mۘx#йH>V~SnAsP؜[Ԙ[ؐ/n* T’VХm++1FY$ w#lo絵;z3mn@B*ԫfܢSƵ^wYN1'Zc1j SJR6fpL9hƇMq)7hV٥Y]ʮs4:mV; fp}6dnt(F"oʚf1t4yMd48 vIUTkU;vIM\ajz#i@.riI]\e|hbV.ScF]K1fY2 <|wb."VSRqMF1-qj=:% *mCŰ_D( X7] 9D.qS▶! #{)9e=.y/x}y?WCxd}.Y<qKxUS,DOhm2h%Ltu,w},&[JHZN@L6$,M&Xa{zxqe͎*{g=s9UeMEE~ۥ3ߟߛܟ ŝ͍ݝ6:-R&zC3q჏^^/ "~#;#Ew+Lf7cc:Q5Ȃ0D7c4ƒj h) D4ہEٌ&W\%~Diw)#/`hOo{7Κw9\;sgնsbg\&5+9ܞ%z.5=555ܚ Bg{vj҉_}ggnleok!ۺcsoͫ7U[ Z`c^sul8TΎ*WgFXQgtЫӚS;cW^oOLL-׬LWWsǫY(ܣڡ\.Ff-qi8Lz}Ӛ)}$ h0MCZ^Z]oφ>7`0 C~ZfC>YO`gikBY5&y𙆼nsg7Mj/&x{ }ZfT:nӠ=F L ĴhavmNuST8>u][ 19&uOؔzʭGGF4{Xj=  O2DGFD8tFB|FJBZV/[<'?z^|= >xinƚhjX }ꭓg9Kb$O}9M4h  ѴC3tO˯Y,4[ XpK~g^ pCA+M2?>'~p}Oy8qg,]t 3,T|R܋~ʯ?C;S >~XP@3`3z s Ig*ّǞ|OO -'~z<~4Pt_l?{ߡ:h"at=À?OEx`d1|wxǞz}c?v!kY.0®~P@G&:)g~M8$KW/.f}Mth g糀Ͽ6v2a 4W.]Mk__~>ƅbMV@cnDb*4&r$F%D'1IE1 $#:\́ؔ"l f4#1(9$%QFMKL*ķRJS0:.֡UЏOgrܱdFR.hLvȽÅYoE[f 3%dRqf٘19 R wdgWfs) F1]kY7j M \YVݑ;!vnuTύ77"V^ hx !n654,l"EM6 rS8+ۑ2 h$tv ͔BR8(M-]@kz~4Ѵ# 4Fa3-z}csZLqӂqڬW5D@KJ E }H@YFƇm# c1IE\mU8Y -I*mj]pChSXGl#֑fpM^MEUd7vy@d5Y%6iCꔵ%vQMXfU8$.YCLRiTRW`2gw\¹6ܫ *.(X0a%g~_nڅVAk*r UNQS܂YRnUEո>;1p\(+'B"/wEE.rOq\Fم-mH- 80A}ǫQ/{F$9`^)l]>cLSƁiCoJ7BLJ&]޴R]_z3 }cx=^Mv^,zoLcZ8fuImL/F0b4 fTՌ*FeX  ޾ζƶښꪆ򲺒ҺҺ⚼܂[y7s+oުɭv rn9H37`4U mF~rz+#G %JICr#ڐ}f4:}d'g&>@@v#̌IMè 8dgF@dG\cE<>2}xN$r yD2Uϑ),nxd0MS5ˑxi {Qp暜~ #8~7~+?yw<ϔ?i,~gNI)3ϝ$[gs|g={̋?>?8g^๗ 04V@l2 h  Y+nNH'pN9(C,/MJ)39x/@Ϭ>IW@~~>V= f-̵{o\@}hb.qs:cQ3+o-^awq0EӇKsχ~)t}'A{8´rb<<1?vt!E AsUF:sbu,ϧuW @ӯϿa4U:0B4V=Sώ|}G\^p܈< 2>?* $1^4xT6:h"G:Bb5tzYbJqV(aurQ52jRAZƈiVIB vd'g`rt(230n & ¸dX:hF@G!СfSXߠ@RzqrFIjVYzvt`AY׫3VR2U!5X \ͩКhq&5a! I(G]I߅ex/[d}\>tA\1ݡʼn&#P@&9<ځ <*ƃ,m.aFz YhIb{#v6iܢpcv{snkXE,Ƙ9Bsk#]mvy7WT@oFM#8BZEуZ ܟְ؟BOLzeBEY+i ʤBk{0Y&U+h1pAGT.8Fރ>/F2`"O'Wv:IUFp{q4c }IbC~mjc#o0T@O8ytmzGm[zXjX1tyu]ƥ>s\>;Guũivi[c}t0TzL}QK=N5^<-N9g<+syd~9N,e4̀vY1Ũ7(njJ~ĠkF4JR!X, 0usUna孼l97pAx* h8>H$a7HAttb܄VRͤ䔜}C#4qЙhuR8 # hF@S]@]4gD?q_茄쯾|~ׯ/^x <_L4u(Co;H}pμ}"|}Z }gX%}atX4#h)l;|F@S|As4[,f9HFLJL4>>)*V}h>w >Xk|]@iq4 B4/ɏ~ gEg(O쉷SL0:U>O{x}9WʄϿ4.*>Η)i~@f ?Ɍӷ>&uд,E懡cn^\EnNM5"boBij5蘤8ROtL<Ʌ”Ԓ$L+c1:hhT0!!$1$9ɌO)NEHLȉN%A *kVG в W@S+M5¤bZM4W@])ϼV& 5Y7j)W: f՛(h!ښBC<(WsN^P;UNjX〥rK⑴鞄 h6P$\=S4@u3Z{8h( Ќz#:hW.uw|c] 3kK;~=jŪX2EТY0o/U~gژso-v,m>(MWv~(w~} 4;A1 hThofX"m a%9]iIT+79Zf?x`!Zm$Eyz3>//v6IzĒN|%XiI;л[w(w;<+K:^e@όVBKY~mV*'5"W3zbF jV&H3f@]ej9:o)P@GlC*ӆIm_SP@07T@ɐ}f1)a&xMOs<7|n y6 ̓!?O`(V7nc߄ãkhN&.]&fhzݚíiuEx=N:<V@#nm[Ѵz6t{<. z gWLͬO70 cS)4^YXM9zzrbDp ۦF͸Q5EJ~ԠgB:"B`hhp_jmnojlmo!WVU0EE!_q3g37rʨ&%YWgj)0 )w&`M4n|LR Y!$>&JJC% hF@ 1Ɉa\F||f||F< hM3БY=,tAo.Q̸̄+_}λz_?~wΆ6!Ox9' ]/8ȋ蠱Ny`;>O)TCfyTC>+YLm5c>pyhQ:T@S͔B?):Oo-L@*wy?} MM1r9}ZM5|J}}מ⑀+{x}1d~UV&/i=0E2zgŸ?OinTCSFBq٬__b"1:7D@_M4 舾 hAM7-|9hZTFŌdRXMJ#Љ$72p]:&'aލ D%3I3S $#2.R4"3pX@/Gcunbc޷:X0/X y, ,cn`_LOZM֖fk(_T@l-aH@gtQ@)&a63&6)smd=+M@z:$ ̲I4琀/b92yM5n^aDm31{.ZcY]ww ;$ςy=`w >;w>ۍ%;<+ss}^Uΐ琀&YK4Rh"f3As"8VPI3VVAVC߆ mnţ]hW<!?ȢwgqɜE`Ώ >5?)M7и a@ZG4#: Bߧ:ݚ}BvL&]C7u>#ϏE}Sy`rl?63c@׀c?>oBu{nKCFxMWմz-nuKBynuSxpN&hm+;m;&c1 c g#zOqarliں8Xq.͸fKsܔcv>MD@(ilj=nTt#^iЌjF2B,~z:y]-Mdꦪ:ϥuŸ`U^aխ*b+}F}5<G@_-o0ƙ˜C9dAV@\$V2o$84@FB,D'dR脸ЌwgVeh#^@_NeGs4uT@GDk f"8x̌/x_ǯKs;>w ?g_?,|O8τJ|w<@2/UZRc.sV5vA& Q"C6Tn*E 7  8QTi9X =Tb磤FLSTչAځr5B>Tf, P@Rv~_o0)"F4n Iu8e!sxT@sHz!i(]@s;(Y/qLƤgE0fn n9Jgu +Csk7,KN̘l$1 gaA2.Y΄ޤΤ{ue~gg(/*GGWEa}@RB#&3aq&$aM\=mg Kʙ`-0cɻ$ L3-|&!!V >gV@F|xv1' :6Y k ]k>]"l[#׀-x{ўSo,nnLme沞Л$ccA>f,AiBL}Lf4=xƂ -\ RZwۧG=zţYrXMU2=&HlEdk{&Uo@K"8xn;I'_` {iy.ݭnZ'mmsL~c' hg `t>gy^]Zo7 >׭AwynL[3մT-.u˟{1CR6ԍesp =DW\Q~:od_]I3g"Y:hO@hsJT@C@'"qĜ>3:9jJ5V@'gQ M4&!G ,u0>GgGF1\L &#.<#::&3OP PϞE*?~_qW/g:}/K4f@8}~/~_c4̤Z 8xx# h _=~y!cpemOap1{J~ kv)f΂$U~9u}{8 닙"&ϓ~i?K %?~~jU:t0X+M itЗH)tU$7 r.Eݼ} $7AH|niAL3Ԭp33ҙhji8%DaPF6c:N9dfQlR-UǓ8)ǧq}o".F]i0sb]$&V\Bnl؄[d)qCFp$gP M&u:zZT9r0=`4WCg߬K!P.Nh49-f4`􍼦CߒP⠁ܥ(.i+)EJZ0w&ll쨩ꬪnR躺ΆƆFTd7Ghuvx}#RYve3yc}FʠST#:N)7 #|Ƞnx@7c'b=3o2vO:~]DŽ`F無ۏhFB [׋({&XҴm.MG p+]j } MWM^ML0M1*pHNK1|ŀaq ,M[Vfm+Yܴgj}nxe:ZEk7hL:V;QTQB!JD ==}ݽ]=֖ꆊʺҚ⚼jZ|3?W\)S~FWd(9+.1\k>X8 ̃nB0 :Zmi6tb|%>.;..;:\@3R@'G\ ЩtK8t6HQxEߩIYߜyd<+fϾPMǡo<̏gyۧμKxwN*>=3'zԹgCuд P1M 3u3+g d! gNMOg@SG `w*6VvÄy?<:laJ~Rza.TSkLOnn٥3c_{,gz:;;at=@??~ &_8 )NKǿ$O~Y>Kf4pHa0O_Biͱ~,V@s54yݫRQ(Y -ݱ0BG^u9&tzɴPԢؔdlMZV@ZijWACm2а7!޽L/1 D+ɉŨo"f-303>NDb:wXObtMXT='(3+aSVe_A^%\^\az7ALjzN >s4Z(F^cN蛹(Y}AtaSq%%[1CUhlj 躺t 7xܓhijkno= :x}=} Ĥ5kflrYܶq7 6~ܤ1&ڤSJJaG>+z~|@4  3z\mnS4IfHMZ5[[ISVKtU^mWZ1R.qjhv F:lV@cXF :&XVA]XDt1-waVIB.r+-8~_D;,܍_B<*X\fZ<נw "k.6dc4*j4AyЂJ+E9̯p`5+* X8v"bj1Z)mr풶9i-t.f 而=h/ʟ T@.=yo-Y i]ςd/K9`e\|1zϫ0ݝ,;v0$ryzzwy=X@&G@ߡ5 D@#VQCT>8rFXg,P7а+3@/b=Ş|j_YJ/#z+lm#蝃[vwC߾\_[ۘپ߸&ZGւvkIH˟!=\M7;;g;Q`ybf /{UKpV-{T?M'tK^͢K.}VMPdVɜU:gZ31̘`f|hԏ!Κ7RO)[T-~U;Pw4~mO@S>n˧:aBˣnw)yCr4MnuS!F"&^3.E>$&٣.˓ƥ1ʬueα2Zq.L;g&~&9#ϸӢklcjYc3kQ@5&JU) L&J"!pg^GG7&VtT=_/;VrjquLn@[Uo~}&9I%&Hr H":%933o蠹:)>+9 uдOaJb|vb"3ⰽw5L@cf2 yR@#:t|tZjRƥK?Ͻɏ}"ɀ~wiN4g2߀Spk8{ugqO0*X}D@L,n`OP:뗏W;S|>;aoW<(OwOs;Ϟ~5*(a^& svÄyY= n'Zc >5~QbNdumWWfgzat=@?|%?D1oS,vX~-S9I~g-}%<"?`t_JON|:uȥ__z>څn\ι}2q͗brpB>ik`BkR bI12-N %~H+cusBjQta&6։OA [/D_&"eF.G/+2i0BLR\41/&Vٟ0t ץhC:ZuFveZf9@kӳ+&:jU՚k5W^Ђ+LY\qW8ܥp_O#쎅7n6޸p=0Le0c\٫+ssi5A_]Ԕ61A֢Җn+l+l묭묯jlhnhlhNgSc'Btۺ;y]= D;:WtJYqcd3FI;65u&ƠQ~xH+t^W5(zMý sC,|}YOd =`@ Q!̩z%:h`T}B{5 ھ]~h$ZqkW\.r"_0 yaLb-YdfѬ&MLߟ[^޸vwg{kg@s) JzzWW / bjnpm7] @1J.oFL6Ȏ@:0Lg܌} ),ꑉ;C22g;$v3]0lr X:h"9| q 4=B_ ؒ"hlBл[w ͹ێ͕95# ^SϨc3j萀>w )X貇wdGEUUxU2n<͒GF yB(|cсz>/Xd,1 g3&ahR&՘1jJ#T=~ =8 nGB0x^UGEU4 >mON'pOžISïkh}FyB2mڽ6`B5t #ϣ9<۩&Ν>ް869=^ϣqx.pZ=&"/m*p-p Iv)*Иm}c"E &il;2S/t~aiDf@cf: x>>;,ۘ6-&[iuJJ1:,KH0}}}Њ e%e5Eո`> Ȗ7JݠWK2 4 ΩĐhJb&UϹ|7 1571%HB|khNq7n`t"!AsrB&)y΀ h2~%1I@ʟ 1̔?SEvˌeG 8NtdTf:(fL4ZV7}|)B4LJ qdংGF!HD]JEQQhNKJ̈LW8ǯ˯;g'TϞ|zg[ӯ=ԫI[L4:hbZ쉷xi>u,yٓo=}p7>'=E۷ÜolBs/Hˢ_ Esرkx՟ϡ}UڒN(W~<2UOμҙCwYh~L[S?tsO^ htEs :/9xR9{'>38I{ğ8\{|V?=?ct~D@>xOp8ǟ~ po9 r>GhGͅ1`T5;b))4Hg<_$i/_~ud|q!//2e_]B+#G!sIDAT^&M1pFG^u,pxz묀6.C t؊f q&jhd Љq1&뛈/e\B2=΂upi3}m:(;tLhnbZ@54mӮTd]ɾZYQA9&nS85YkYX-L4D*Q_p4~f8nlN A oS8h1f^Q)tQSAq3Pi**e6',)o+l/ʫDWVwTt` G7p4v7u7nllj[ZZ[ζ.*e"Ѩ\RG"ԠUZzd3XZj֏FA֩:B7"*tAb@ɻn8kzÝvpԏ1.oH-**J.kj*h 6-VyEhnmz)$ iU\P.W;DVAq_jn~ 밊ktU &,%*e.e`M g[GS A0EX+;%A_SmR Ϥbچ'bfOcGgqSX:p Fh@e w+K`)T]aݖU4%at[\N'pʺ]RRKڃ(<7@  &Y wQWIc7hƷqY> ޙஃfY=QϔQ$V!} E]߂ hh +vҸd,7 ΛY8.^H-yx~Lr>rcܝ2ߞoY\]Z[ nmomlmnb #"f^A(WA/jxmE0KXzdA #Lj3f2B7SX}9Ɍ2bwg_GC:ټOJ-ܨ01qǶ2k[l ϪV(gF=YՆ4gʽ)]Qx3wEjѭ\zѩ\%(p8g qܘx,5 gx(6 L{]uSl7Tb7k; CMh։&٫n[kuL;&t>]>s )cW@U'D@vk pZK八;.6zNmKVG<5*H5>ZP9 .e[(&7\7D8`L;D.R@ЯLyyƲ4e[/L9 ӎ)t`<0y¥8N>z̨2IkFT#H.担N^G[}j(o(-+.+*/+cr+,vͲ%W,xQY6}$ܨ032rn&ߢ:%0)-?1t"HIIMx=堀ƷsR0#%FRqPs&3l бWcbhb/GdE"4/3胄 h::36:3.:+6:ˢҡC#R/E^6bP@GG%&dEE%?GW^/wS\}f7c t&!!'f283&C9R@gKb$S-G 0Ÿ%(]o8Z "(p$ 0WDSpʛ?ϼA[8 { #q # L3G@1+ǏcU\sCO*.w}o;~#`vbuPiI͘ftÿ}YMKYM54 φ&UyGc"GHCGR ҷ`B3˱Ic{:huX4 hhaȸ4aR4;Yp.u,tbԵ 0o"8I{R4<5v>t۠OAfUddW]Zu:#+iuY7j >ASYMt}&e(Yzgno5FF}Ac)4n;VVWtv֣7u5v7v`t3&AAwmݽ~@8,Ȅ2ѐD8Y:}a3[L1bҚ:AkШjA=bPJ N>Skz9ۤ1vp똼,Ze5I5e6qUTb&J *Y^oMVYM^oYĵvIK5;pMEVA8hoY$&imaE!tHXvg؆ ,nXsmٸ`}$AW`)]XXo̳Ev>9Mq9)Xš>CD$F!u kH4nE|`KrxF:ŵdF%iH t[t:$vZsb&CE8a6zܒ>w,XhpEtH4BS&E4pW@s3)eLH@s2gʢv`I7FpKVmnũ] /9 qЃ &h"3 ĤVZk?e3=~gֱ~{/y2ݭ͵{[T@ct+~_g|z{T@S|Ae4 hF d>5RL+NgbYm -W {GgLk9 wAV ^ n.l-777W,06ZvF :Fȵ4F#nk3ЋNռ}tΆ)h1y"e>ϘD3F጑?cSgR5:4]n"yMO@Ksnx3@IК67{~us@д~mۄ `F%ԷUޑ H&i `2V@=ӶOb=A~uky-ۉAz hЄqk hukUNEcƩu9.UKR6nU"lڽny(0.dΣX)aeҴ2m^1 hҔciƹ8ZrMZg&-T@O Ehm\c1 hvD* @* C=N^{[WKsUeu%E5%Uy+rHƵT=_/rڒkřWi~F:SvX23r}FVI4$^OJMtc2h3>6!h]e/Gg_@rڐq(9xf7hǾjZhC:2$񬌤_}o+쥗{?ShA+Y}pS}0H3' 7"i4:}&P`:ܨT(vΆj^ +̾/ Sc!Cx \;Ϟy hVCC޸`F+ c0ͧ#ʯF?R@ fb'CS/-}7B''ra aZ 'It~:hO*s:hO?V@>^o/]'ucPOMM4t` 55Ѭk,7D EIjhD2u\G\e4{F.gݜ0&1Z*sFKU/a h #TXS_z.Ć6O)HH-`0"c/\D2g =:0R//}y! k.I3:؀`E*i)tJfY+UYЦgW]H*q*Z5fF; hrЬf;wCFAS`4PUݎcBֆA^ހaH&U#RWX1v̤34zJRTJzԠkBl@˨2*:M$S+ZdMfiEZkXWإVqB޲MK8uD@7 vY]ZgZŵiKnq*$͵#E\ ?/ bz*>q@%X%*$ R;2xs|@u0A_n, AUPU4ȳɞEvASTnaE3㠙!jAJ%uIjp3$7T:  BƇ{(wk\:359nI[tbˁ%ϤYsI܀-arྀ慲8&͊f}$=_!R+н#T:gh- Ew\oՂE6gfy3iLp*^gMqmn50:i]vͻ:V'vV^ڸv7ZGE34~"5X_4f\>Z@c3uh&+`153'$i:m}?̓\ݡ $o ;d4?na<&7Ao.lF@׌ͩVg:@c4gi5rPso ;zɭ /; J]r2z>:gŪgg@:7& hgдZ?gF=eռ)]_ÛPvToޤcRնx5>uOP7D4m h#o2Mip{ԧ h&u怶-k9>mj`4cw]!kj;=ví!I5 zt=nMkɩuo\eyUQiUT4nBH 70>4eM[%ɴS:*}ŀaiҴ<=<34=8zq5OOOzMS1 5{a8-:Ug׌&Q7j)5JŨB bH08480ߋtΦƶʆҒڢ⚂[7srIse7Jh`9L@fgҒgjS2 h37^+zg$i)`{p_@c :):W@'>P@g&'0Иe!LtXMsDdVd* "KI?zg:r@@3U 4렙X hUt1X^ͮ 茸̤˗㩀~O^yg/ $rwN~>AdqptXV,}n( ٗ~|%ZL _̋?9pO8`5p q10o|OM9׾qt-‘CR>5Eo[[ C.a_>!yGn 0>pS|X@Sž~鯒 m;П@ثCg`2gz>hA #q #{ >LNdO1 O<@XD@Z@O~wߜ7?/|KGy. hxEPL;t:谚hꚡ2ZigKYa c<(t h]⠿z1:AS}L[!71!M3 dAZDpP*`0]ډ#Y)|7SS CO"|u1 i/gRL'xτP>W@'geUdd&*JejVEjV%3Vg^ _M&:'r+qu7멞Ф0rP@cY5c$tqKzAWU0T@uwtWccwSS@[ۺ[[x>@.˄RR!VKt1b֛MZAYҨGajĠի5#b|wFEvemcqV@걊YZQMtɸ&.H*2 )ց;di]Rk9$ NYC7Rf- +-bP8fhY1=&,`ֳ&D-,ih&hR=Pm.(q`1ru2t:OʢcQ+WB@T@C2NQmcVȎhE5NЍNqK{*wP7*q|`!I)uJI"TCXkōNI[ꖴ;vJP@P:w[BI\ hAur64G hR7fhý3UχoVG9M^;@gA3?o,٤]er~\:kf¸hi\b. DK;{skibm޽:Y]ݼvoybpgcgkmsvpk [ `0r^^/<_~Ajbܖ{M4A|@@Y }j^p2 e>3G >kni ͽ- &N}&l.nv/oXf>^Ӯ͑}53)|fCGp P!t;.80yɩZ+lA!-Hscpv 3ơYfLƁ)ߧy].>Mw@Loț6tMͧES5UM5A{}5k5Mi&55eՄbBYSUu~Mc; M5[v{nÀ03O{B8iZ4/Ly¤ 7=3&42l:U6ê5&A;׌_U2> ~ښƪJR\RWXR_TWXy"' 7r*(Yиg8hDS h}&4UHHQ=#IS>'`3))7zHIp@gjbGeEgƥ3 ؘ+1(9!N hƙ>=:L@/V iQiQ\Ѹ! xП|Ƿ~~PƹᆁG h6 AӘ$]c I-yAv5DRbZ-*v=γg (ӴC9t:T$|M#8QA:jz>C IeD$%_=>A<~S wfG|ԟ/-炓0ѬwfrSW#@q>ő՟x >®C0at=΃aDcO?|rЄPNC6nBhh'tp0$s4㉧3i̯~{ᗿW| /~ uп0+ϋb hꠡO4kB&[ jhj` E4T@^&Ѥ$bElRAtb>g`RA\J@|4f\d}t F !Ѕ1舉8Fg}1 C6l*JR&A_"\CoPMoZftjfyz&:h =tjV|B YY} jh)tnv i*tkA1RPЅ%E-e@IyAU= c4tssWskg qtwuDapT.VȠU*$:ȸ`7L^*ժaR.AL=zY^emfYIjɛZdM6Y]րZRmbֳEX:.(Jmr@\ZΉNM4t%vI] #q h$И!RaMTJjl*heLglC֡\- ms8<؎bVȌ E!Ăh"evuίp Q5zpt h hvJ&.:hq ".l>,^+lrXLvaC܈В)nwJ.ŭN2N5 `4Ee4렉}ƚ/L3{8Z@L3㔿K@sMwJLʁItHH0ԳwF7&hg)ځ9¼v`Q;ȩ5 ͏o;GWЁ98.ZJEfI`jL+{3%9zwkk-׿ {Н 9PJpf3'#L@#(W%5`pp4f M>C?TLga;/ BvH@/ov/ZWk9QΐY}^A6 g"w'U+f{t٭:yt=/ٕK&9ZBdn\47rqp48c5g?iz&>M_M7|_t>=/MM3foз5͸ q^}W:m&uS)]ӌiR[WNjZiD&{5^MGx736<.ˣ!onϭtkZݪFhSQr*k]:mtn躽 c8 gYbփ>_9`^9ؼ߲0i'9NM#I6mG6m\;nRzͰN=U21_, C{zᯠm,oil(h()/*/a7rn*2 5*oXLtq#L7Uiy)X}+)fRJNrr+}Na:9NI$1 W㡓5>&+.*36бH>gС}ͺfG˗R.]L>,:3**=**-&:=.:#nlE=*[>B»>$Sg=qͬznEx}F9L@SSvzgA Rf}֓yOxo1{yoO F :TCvՕGOX@0\@a/S  dAF4\OMC Oߥo.Ыc'}`4+ Èm>4Qɬ9?^Mz+a砀ݟ~?_ˏ>~~ aPCjh>ˬG)ijPx4+p54+Y MD,*oBa\ ME-hi1r$SˌEБq)Te6F3RI̋#5Ѹ ":h_΢AXL bWS7Ц [pJ&nRըx˱W@θZUόew#4W=)Yvy 94#,B}4ݜZ&貖nlꬭ鬭목k謯;[nl 2ɨ\KFbX4nٍFNҨGi^3j , #F)zg$n6ILfuLjAZf7!T[e6qUTIR"* Wڤ5v9A;evYM^ #6 &>㮃J87DU6ȵ61h_bY-KP@ K :(B,0 tNA0, oYr,M-5cB4 h4 #qb*p,U&%p1?e5hJ;)u)nz x4p02GM6Z,XX-!u6ZZv%nvpC &:f">}4pty%%" ÌgΖӪij}>SLY-p._ƄFY4.^Hqb.:F&oOZ͸9κ.ll^_]6Vn n(գףڋ(hF-!vp<⠩z>`s>f4ykoowS"$h6lnC/}$R|!\޼Y_msQ`}V:\V}V:wקuӬ}w&U>6* }x#ilИ1.Θgyp<4mO&a(`h-ϫ3`4vz=ewt>]3tmVɯo ICs uWU:^UeuWK4oB A xNݩiujz>R$;:Fkg#8<5~@`lh*uݲ9W, y1`^[.N)”s.`M2Yq<i\6c\o16T:5F?+RD(!$|euu5Eշ+nݸUz=zNJHsqVP9$>g$f⎂q#8S))iSs1s㠀N> }I X}J$ЬDIIhVq9 8dp}g :N3"st|w$ h81!.#..wś>zܯ_/V48ޙ y_@k2< ->㚏)ƙRr^i!M8~⭓9u,lR{'2H83N}Bk]ϐ-OaF@up\ G;#%LA[<$U?ᐨ L8PرG!pE粃y?@$>s}`?pzH;4D\{Èc4;B8P}P@g&?F~苟k৿g MK#s07͘h>?IY4 h)KD(/f} N&Ә BNT|ntB>B؛coE&䑂,&1\LOb&#c #n^]a>&.f|Mڗ2ˋɟO|ߤ~~H&"hkx&)С ׂd hq•·4P2Agҙa ܸU[O4I.@r#4h*rm [J撲V hR܁?4(e"H AfsmniLU͈V=W4JFeP 2I zgI㘤,m2)͊1ym\fU˚$j!B,*.-IJlXw)2tVyER;JD[ۑrʆu!sJP@c#]NeST5:UuNeC6\eAtW:kz̟ƅvѼKϣ hӢ4cc.`['L^m8tnm{&fpA͈zD>*D|`@__oO/˟/5MU嵸`IMAqM^aUͲ7J^/v굒+D@g^+.̸¨,h}-B7.nI9I('%-にIqD@_ 4# ItLlFʦtIA hj)T1S\)&:3.2C(e hbĄ?<?|/wwCϽ{[?z>YFG䫏=2@S?D>Jcx7!:Nz Yo?{c1?.< ?ޙ=g»'!po1qOEP&X㢐b0m`ſn`׿ a}PC|O h"qޥ_}=&r+Oa'R4}r]9L@++P%y0?zŽ0u$K??}_~ӏ> ৿_Q~?k~Mc| ;Ҳh.DS,uDsTCU*$r0E @M*U5ٮ pq2FdD݌Ee8$RLl5u hb$864L͡>V@cΧ|q!/.|y!ϾNd2>'f^-vBh Z 09)18K[Jm"dqTVWtvuwbt47uu BH" x"h4Y,vl6MF^iҠ5hzBɻV,i3m6ɚMFɌAmǥvySVb.,.Kj V#r&oJm6W%yz mJ l|2Tlv|25ѨEQC\kXV>l2qT:<-`m:`>%,b,IƝm0_P8R6Tj:h,"p:)iqI`Kx̊ רIq7JgvSA6mH!u`5t;8Ư%nvns1pjh1hV@w`%>Y1!14 %Cz|/:k2_(~oYFL\3 0&I3Г PgF7:$<Rχn`Q<^2`aL2?&Y0V,d"ƥK6ْcxɣ=96Y^8ڶw6̮ޝ w:ٸz{gkod=z=zoX `5v7jp : R˼ ,i8 n0Z2n>ݽ\̨g֚fwwݝQ`}7~8;铊{[+; ;%q}F{Ryor;9zwZywF}o)n@uoR}oRCZ݀_}ǯWjeBI%0 KhU"uM| # UZ>2kXy, h(Ml6g?e€Q45ΟCCLh'6"'SƮo ~cgț2N cW6Mhꀀ~Rе>c{&nԷ->hrfգih:Ӝ8;a󓖹uoOO'fj]6a:Mn>7nj1ڨSB&>kn,+))*.(.(-]o_Yz-ꍒX\i!} vH,3HL#!#B3$LsJZAJjAjj^J͔גoPt Z"T=_g7&%f'b3 xhl !JllfTLjLtZ ج+QYT/s4فQm7Es4{hAf\3KTd:+)\G@{9H4 ߈΀;Nв! pQQ@ztTZB|fr|z?~O^G!dB'ϼC4-f4hСs3?kO{x'CP1~[cV'_S5Y3?:,SϾ q3'=s-&P̩A~,UBɷ42qjśТz&!}r[}Gaxyq >?Ǟ| #8@C(wBSuY'`.{z "bpt!sjom=svOZVGm){0@c~q.ftwWC {~DBǞgqdk44r3i~̀.~?S'`_}||? go~N7' GyM>^whoB1T@&䠁1:h&{/4O%?_$ӂh"h9 4BK19+*v$̴8lGu3D\fa>Ϯjh1IEqI y0훈 W"bs.E_H;.Fe TS |~>q}}),zEz9m"ύȈK*LJ)NJ.61$9,%"%<ڬTk5W,^P=_}.+Z&:h*í+ЍM$8Nlnv70c{/^6@P$`l pɖw^>3gF3#,xϿ h.Fs4vлs0)i+:hХ\eŠ֢Vҍ3M8ܪv!"*{q4]i"8=oD84D x#Jd2 Ig1L!ՠ5TݸQ;yQnXĝfIEdr̲f2ʱvX\.Ij: *k!W ;evICZMj]rPmNRF;2C7:e $MNi-59EW& *2tY+ G (~KT &t>i+(PϐU;BWDAs9%,sB(G %(uh Zʨp1+P<h\]S*JPC cPfnȸ.I4 $TLQZ" NA%ACG=qж-ht ZԻ/awz]3 [CX@΄{9Z#{4091hefKhb-;3{!PX3׎Q6 !1M0Z2o/%RD*al)V-l7C޵Vؽ=7Vn.6B;w6V7Vw;Z_bh gu0`9%NT.uE(]|xgF(w`l߾}6!sU©&$ϷnloW"}3lYѯ53 sPysZ3 ;sY!mM>gm7fh+yd2D4 fQ, A/hmi8h]g@7"|ng𛆃^2¢mJ8+`h9~cOϝri}W=psF+./?O)6 5j5^;1V?1A(\f=^V{MIu_G3-#Aȴ?=Ȥb;RF|߈eoYCS)Ӭ<3Sϓ&qj~2L.aZ*^׌ \1*JDB;``_oOw_g]SUVY]KEx&Q]I󕜊hg:2l.33CiJ4LbKS3JR3JK2ҋ3rSsR: h\#S^IMJKJsvJ5 a`c,/&^MLy7p54Ac}>>2@4:D*w4]3_@̄DA@g]@#g໣9Ds$񗒒2SS|ӧ߼GջϽp MUR|UM4|H |4f/E@&8y#=<-pY-^z8G_>؉O<L8siV VϏe2q,ҙ ٽ2 n!3> f +G,btџʁBrG@yE"o}9jݻߡ v='c3=?‘`B<:F`bR >!2AAa߃g пo[|.dC44-~7_#7&D3)GCY4F́?GM9FP E_L$ M C& u@AKT2,yNvFKt09J,0!tJԒsA? $;C}>s2}F' A3kNN/O˨DYv@4hp Wލw[;-F, M$;D9"E` `RMw#lt]ۂ8zAs휞>H>44 H$ɨӪ&=hhj4JǥzŐNmv$]&qY *i1K̲f,ۭrm.kpkbh<W1!* iK}\ kV;!irHJ8My+%oK -:;n@>C9 +Cr5%p@>z7$)8`_|HvX:QR 8JtarW*v :G #"t;(~ =U_T9o荸iGꑴm.q[ߠ=!F !]O2=\:_O 'ɫEP|f4 h%iwo!^ sw>K@#v4qЌkf&A\3Y$E@zf|7yddN413 #޼`}FX Es;*c+1hlw4LvnloB?nͭ.La*-A/ǖcKqı2 y%@f>C}4>D n9P"3,1cq-yX=# B0mOE> mh" ZH4u ] >43!ay(`[|.m 6Й0-^]˔ūn*۠i>;'t]uGQrvq҆nio "Y1 85\j5nEk ݪf٣V@C$\o𛇃6޴?Knb~R#>͂_ y5Ep:3e}1z)=nƮwZ6ڬWJdRH{`7 ~lmhlշVֶT4V4]W1иy_3#?chcwY@f1V%%P]QHK/I\9,LjB3-jZRNJr6)&9% srҵIW/ I t=3{N?gf.GˢI}t<}2ki;i=Dvz#Q/BB Ly iiW;ɏ_z7%g~~ so<ܩ="hRXqhrpE,>/G^xڍZСyᡇi FW*dD 3"sI>L20c!ɫ58/"9׻fs(V&>)ODܕ/׿ ևal=0?&3>N!ٍ+.+G7.ItfW@3G|_~3ěsR" 4]MGbL4#?}4(ilI@)&bf*cL!178q$vx #6Ȍ_5 瓠L4dq, )% #!e}wjY6".}m*z&㌮kk(&VD". dH#mEW@3d#z,f:꠯ lhd͈V4gF@LG (.sJ܍mDC)4N"E PM;Vjk&E\nwgg_O[0oD |H$Q(U*h٬f5[QgkqRSG nt 1J;MR h,mrMnw\!jlX=;%5!sb.(wH]2h97:h\jC CHI걀nqТ[֊An2%i.* !YX.nXGJ|Gv)iѕ.a5 .q=Qvfpм"),!z}2j9RD"\|N= rpu؊zj>$#F4%%%B4AF!@ωɯ'Ucj\ZWctKq.ׅ4D{&@@ĝ.IKxhߍ3N~F]Mv4n D4M4#甃! n >9p02oGc_ YJvK"22t~]įMtt:!PNL)  кZʪuVʤ'ZɉGF!ޭ̭ohmm.j*)o(.¢F@W]͍?gW0-\*YytfS/a2qdGFMJ6=Q 袴B|?HݜHF@@&_I΁hkk̮g%&dA3h&ޙLЙ83AY,!ʟABF/@2%}/w. ,}HLIB>a1{/'_+K>x{gx׎?~!=ʊ&FC^G@/z$Ȏd]͌fZ"2ؚ/ƎBl.~f@n}kfا 1_ }o )`>lӏy_h>/ȇ O< 8zb~>&?$?;=>#>zoY4A f[iFIs'M6D@h_$C4NBm[@&Τ )C/h3g:h>렉S&P3/|WMJ.%gɹ\F|Wߥy&oS< o$܅j ňR}N+g 8kМѱ\k% C dΪoZ@gC9ql:-ve",Aa˹e`1U85 뛺  uМvnoW'+O,JBX$4NXNnMFQg5jM:ADc1ng&iIڂ0KͲ*ovGrm3/FvaC 7!FSRǸvC)(y3nrZJCSAi ׊#A@Cu0$f86~ QNA%SvD +]ZH8G< JIX[^_H!-.!+C"ѥR;*qA4tH!sxhuv%E`=f3j'nB&}&ڹW@]\6bݢ# \6hKnz7]pNO4L4X@#~94c` h83>zVy Z@ؙz(} ? 7 ll!m҈]H/y kiZxrs!X/Lwgkcs ڝ; w6Vw׷7Wom+q0dZ71+91]@ͽ4Жpqgk}۫[k֍smư2[Wjٯ@ufҙtcCBvC]̴}6 ObE3C>AȴydƄ6-}ASow// A}0h||ïmR75MK@WzI5wB9ALh;ǫM'unu7jݪz񠭲έlo4O[&t\g|uxőIYdjl^HP?4yh?h#Ӷi{(`s~Nr&]) m=NˮsZtvjPZj\6&%BX(`OOggO; ’꜂][q%2ڮ 2:i=[gԳx~vm AyG >tCG^| =<\3+j H4]t475`"sƈ# >ʜ \`83|~ ;:^|wa>Tw%d66># /v?"vs)..vqY1q&e49`!tZ< e*/sΜ\MN#dEߤ|y&TIWۑBb3BtB2A'ۥmz93Ӳjn$%Xis (Ά1de&9AtMtЈXL`4EcA r^ EUՠk꺪;k;k!t#{Z!ihqF&S(Ɣ R9D@,fl4D@kՐgP A(k-eYUdA@wmcmIm%FNYSLj)IS Д!mK)'q\(M(y[䖶PV(%纤lwSTN]Q*5 !M Hmr%rA:lpf(y8F#Α3?E@cG@3Ր-`]hYhp)y,pݘP-z4' +Ag%42t,K^)rxgk}̝[k+ o-X_ZZsgckmicm0ƿz`Ms -wFg8o/9qWSI&:ڸr{{msmasyv{9YVfKӆ9q%[g%7=& h(kYz>h#A@Bvq&3Cf3bh4[B󬅏s4@Gi@8D[3T4Oƞۯ=lL~K4&h韱Nހ/hz|6ѫj𩚱L8^5wR>&]/Ur&Um^8UNi;h)%1V7u$5ZK׸.Uw'tg!:g,2X)|E, Co AG$ӎP4=u'z,em5:A=RHd"X @_wwoGG77j[K+KJ }.t3m+ٵϗf U #c3iP\3Df:#7 :7%9*NK&9wt*rflŤkIA_uedy>ЀP|kdw-8:4}A:8Ki20hV~F^R }NIFb"`Lp9--+11z'N|˷}Ͻ3=O?wI`fR M\3}X@&~ z>\3X(+~1;סd5ч_G~$r" xc/9=qW?Gnw_%MzG&c*>1_s(c dFhm?[d>w hRt-?_[oNvY44[Cz+ )fd4qЌfr&I 5ь0lM&&8h_}@v2|4$&dL1ydHL)29v?zel3Ϝ"hҿqW _I t=:<;M4Y'А‘պWjpA73CVvƻB7A˱A6#)uts¨+l-n-48h"K圢2N1-)Jq4$䖳tU:*z樀,n_g@O oDR zZmP(crB9Y,vj5,&hШ5 J*Q9jTGn7:2Eb6nStcmVyb7 : ʛ)HhtRHyvɚ(i=ENy+5qr6-mtK[))9#msK\V!u +CBQNr*92:@@W'0CS%ukf=)p9F #yp}>T`D QlFmh}AG*K/w*#ΑrWI+P^MܴKX7xč.qK-j`glYv A7"jg.Aw!h+'4$}/ nE#zF=`4;vB`1@Es{|RDr]T/OoNo,ӮU77LK^Ҕqyֽ~~cn{mq͝7T8SqT.$m$[ M+m}8;hQ7V6C+76JعYErP3Z8󍩨}sT@k"P~㠉gYh*l3Lyx88c5ƃiḨZ0m+0MAH {?h'EA=}.kz ~CO3m6X=m:̓~CW2jR5T->gJ:z uG zJWvL5wRմ{5 U[q8>VoWR J^EVƫ]ZxK5t` >f[Cr^ h!MC~kohl٦Vb!étp?k&E2BQBB7z:;/->74ֵTV5ƃ%uŵ@^AMN^Uvn}fo3鬖iY)Y%ɱҙ Fw&DsQ*saj:=#?##/==7AW@YNKKOOOɇ hI4)&%_+/Npb" Ȍp9gk 5ӻqQ Yqq }1X@MA3/!+1-FK3.%HHJ~!!=113!>$/\~Ō?|+'?8q×O˗oaϼ# 3Gh(m~hIRfF@z8-cGEF۸*5l-/ b1y/b"@؟v M̕qЍҩtNd[4?Y@_wo͛o | û||ߞyww?">9|r7O>B?#~焏;ŸO>?KF?*ӯ?:3>6o/!8sﲾʷ?^o^\~Hg8{ qKSJRS &M;))%3$"mMJ&cU$U#1C sZiRZR:!rU^4\ڜz%rvSrFebjI"${\,HHU&qIs#uֹ [_"5 ݑ>GBOx ֧_ϼڐu&Z~[N!7==N΂ҮS҃(,퍥{?E%=ŕ }U+@UIm?(髨jMkkꆪj*jѶiiC46yM-ÈV^s+pNv ڻ=qw/A/ JCވL rR5]^d嚤(v:ID|I߄txIcbᝠ.{X~( $o{fM}/xVެ}do397dh;9s>hZM=aSwtLܐ Vȼm$d"96"Vh^0 B9]%m(kgª9Ft ֶ4sh"ֈy^:m׶5!MݬrvtNURUU񪹱ꐲnNU;hqVQVօ ʙYUͬnVـiZU5Q*eêusH0=V;jDִTmag^t7_"ڞyM缶c^ѢygX1Ω!Uz3@ɼ+t/h{nD7`-F0Ch7 =$D,Ful %9%4a4ȖrMI"L,nleX1&5(unSlh (bӡ[NlMqR0l-a{R궗qǫkwYΜ!NľYvONl/ܾsk~gٷsݵ>ϭMՉ^;Ͻs//>O>{'_g"䉧xנGxOx qg 9tq#G@|@_>`~WGO0G_>|#4/E,G?IPDH1W=8ثG(c8zs  a#N"C0HدϽ@½> Dbp0{?>yOe`^{'^E7zS?szgy|ӈ?;nOsǠ~xN!{WС(S?}7v3=#_B>`q08`q08`q0cgdUIENDB`onedrive-2.5.10/docs/images/authorise_client_now_authorised_hashed_out.png000066400000000000000000033516541513710110600272070ustar00rootroot00000000000000PNG  IHDR8gVsRGBgAMA a pHYsodIDATx^EƽS;9]riKX2YOp $`@I(1`@ e~[owMOOϲK89߲:;tD9JJJJJJJJJJJJJJJJJJJJJJU]N@IIIIIIIIIIIIIIIIIIIIIUfMe@+))))))))))))))))))))~)ZIIIIIIIIIIIIIIIIIIIIHJJJJJJJJJJJJJJJJJJJJJgDʀVRRRRRRRRRRRRRRRRRRRR:#RQY ?< d̟gby)EIIIIIIIIG&q!A^i Q{sś &(rB16#j@OLK M\IIIIIIIIlPvv7x>}TR剁h2yXΛ,#TB-w9w^^*U%:m%&XR.Q_z[@Ld! *p^IIIIIIIIw,ݚg4HXp!R @(MSi3Qm!qMB56YbTNXHJJJJJJJJJdwՠ~v҃=) D52˫^:ʹ$1.Q+*hs9lٲskE$_j@sCØ*pB9υcA(PURRRRRRRRc? LJ={B(nP(M Q()JH)jtVV?hKp;n_H1o}L".c-莻S:hР!/cB^{m$UH8ZqCn駟=z/2`PVLU%88SqB2D漼dgJJJJJJJJJg1!Y8kԨVR1 B[e)ʘ9+ C߿?]vqq15f!h<3gM6 <{5j9][n۪UV\U^=ڵ磐zǏ͛7~7Y#WRRRRRRRRm B|Ŋ!~;vb9P(]P a;+tFW\͙3rZhhB9 v޼yh駟ov߾}ȼ(|g|>_JQ9f@r[n7x?o)tM7qwΗX^;tq(B%%%%%%%%ߓd-cZjlZ* W#jG؍&eQƽp@^^*Qg߮;{Q_~l=s?2Tĉ1Է~[o6m]>:۷s=Ǐ/]t׭[vﯼ v-^K.;`_`xSIIIIIIIIGeH+VG!x"Eqqq 0VK&8ZlCy< 1*4o'6mp+rDaxSNEoر=^ O] rnݺE)))TRRRRRRRR}K2oExA]t W? vj 6Ko+Yf\ 7 !Cmۖq?~|v6o|a(O&гgϒDű=z"v+W^j}M7lO? ĕ1G}K.IKK6mC=QFui۶mcΝ;ߏqr/r9To%!Á(={ }G:pq(Y'%%/֯_/U %"]vu 5xcǎ=yw(wǎyyy(Aw^tΖ,o٧O\v؀J*!:G֑#G83eߏ|qOB}=/˭;ASVZw>xbן|CeۥKիWcرcH׭[s='6?s\׵ݻ7\2ݺu+RXX(R@u7p,D[04ǀQu],XЮ];|ꫯ8-Z@0zD1w} 2iҤ~̼K 64hЀ-WOIIIIIIII͛iekB MIIqok / hV0ܰaOyQ]IIIIIIII/.FnB!F[nJ5j OVyg@a^O8+>>AT$ 2DfagݫV3 z\|/R\\W۷y͈_y7pyףGׯ_?F-ZX"g We(dȑ#ӊԥKÇo߾gn \hQ^3ΕoC]0͞Tz޽{ySN[k֬ոyo!Dz}ݷ{nlӦMC~ѣG#;v,:uQxոD!CTRJ_5KS  6矿{Ν;0 & c#EۦMl&3\qƻv3Qe2q$p,[reHG"ΐщ.K/qovW9rذaz@~B4(_Ĭ4 UZnm6ܿVVVnn ԏի駨߻wol֭[wͨy"h~饗g2f}]vնjԨ;4҉x<1N:aXjnǽ{7DF=#SLST+ ƾ}ڶm%_|1ưct%ƍCy2ʍkpFIIIIIIII7T>[z䆽l"қ8qi^! "F4{bwhRJfϞzԨQ\"'7P,ק~-A |xSW_}5|p!7\>OD;wF())))))))HF ov K.N[cիׄ ߺu+,Ǐx/D a-!5ۣ_cǎcǎ͜9_~ 4@TѣGqq_ YT#`ׯG~իW_tE7pq믿GG9N*;v,**wڅN>cá7o?&^l䮻)A 񰕔~+!$+((;~Ǐ#~0`@o;vРA<o<õjժQƍ7x5 F~ʕuX8n {jgNt:>)())))))))&Bp,By/L O$-Yx:w.))ᆗ\rW\6h`˖- ۵k'B6urʳgFolٸnݺEEE v=S%ʢЦV8}B,H9s9++))))))))eYUTFDaÆ0--Kڴis7O0ol߾=>x[n5jUW]<KĴHӊ+"^?~<E:f̘l]#@ @%PJW]N/&>N4iܸq<σHmtM]w5`V !R[믇s 0P¶m۸ѣDŽkCVvJ9򢢢۷sk tSO HNm+Xh=Bۻw/ /_$|>$$%eknZp;Gkc)))))))))^K8DP K*H2& &^ɂ~7<᷂ds'.X @ { hNKy5<9CW^y7|4W@iӦ4iA& q8\=bÇ߸q#'1"*oybţ9 !˴B[V_.ὐ^럏JJJJJJJJJW!1Ƞ,AT qeSud BJd ΢Bi񦨢s$ pؕ]h](j\!r;!:\`3)Jx^>caj:pq '[<ΰ*V(֪UKăRr!KnVP!qQثĿ,xuAqRAfY hQx$4LW\{~)2%(BrT+e+Ss-g%pb?C2MF^쏓,4TyCޔ%JJJJJJJJJ <_Go5kQ;h ^ BkVM&chCeMM⽦&FqR*$S h%%%%%%%%%%%%%%%%%%%%%2JJJJJJJJJJJJJJJJJJJJJJgDʀVRRRRRRRRRRRRRRRRRRRR:#R2ΈtF h%%%%%%%%%%%%%%%%%%%%3UA&jNv2:jEډph:rT]7fPZu5kEj֎֬fjԬU5jtB]dK'l-V[]Rӈ/ jDު56.(IydD>`/U z#GaVA~f^n /[~^f~^ܜnu퐑nui׭sۜ]zgf"ٹ{:ڹ]Nm;u&mZ7m[^xA6E6-o޴aFi͛6eܱ-Zo{-6oְEFM…[thߺufF5l4kZh~Z_խ[UV{Zᭁ^|?e |ds)&n%a:^C*opD ]_ĖAWڕ#?5:85DD5kkJuyݳ ujG|+ j뀠~ JV%:MԬԪeӨM:%%Zy;XBE f]G=AzukBg=|Զ#D.z?]3[.Hڟ$Ѵ?ppѴ@$:D PڠPT6L6® F3!`_07_7#}2Poo']>DX+{X6=A0w(G pre fAg3 .Nof߰WʛipdM36_W+穉+HzKS aF"o_O]%6o75e2v]@w ,/x<+vYajΠÐ'eEwG(ӊdQfyp; "u\7Y Xr'?bVBV0  `4Hi|DO =O_4uZDz3^ 5=^P/\Lq{xCVMNO8|B_ [4 z\_ 4 -Q$@{h%6$8+SύNKP|F~W# x]t3ݣvYq;E y]p;.eҦz\ih7 e[c19 f[e%{p3˅;`WK~kN%2:XwQjkoͣaww].՝6w;&BKRTWKK hes4O7s/;t:h[/݉. ZWcsHq5$,ٴI)e4\ ̆VfΦOTthbw)^%R 5#Ηȧ8jԕ2٬ip}'.,.Sy\& ڨKz jp@=5u 5S]ȸ͉́i\Fݼ]-@%RÛzZټRpp-VPkO/]ApΑƝӛvi*eۜ6u,Хg;4ٳ{yѫ/,x%o]ֺ\uϿnٛ<'yodK_ k}o[떾䗢Y;JPQHk&2{}9Ûhu0k&ќ\6emxi5ϼ7^B>qQW/:&Aʪ'׮zUOY]Ք_t%sW/{bs#ٹ(YK>cKG>s hϛĜfL7QS|=4~]8s)9e8qn;n_q?&O6rݷ߰;o~ݥ]z-7^\7v=xˍ]{5WUv_/Kov-7^u׿vǿo{@鍺5zm ]6 /hp1piWYDO~S PWȲ$}ZpZZtO+NvYrn{%nw+KX8}2`i)og| 3= >?h | m!@-l# J6L$n mBL8ҎuLZmӢ@:Hk$4N ;I45ФqFwj4QNШa& ;:7kԅi޸kݼ`x$ F^&cBo|7}ި{x~NFCyAd_7 @>E?Bǟ϶/ 7Y+qr,qyMFπӟ)qb8Ijj%NO;'bsw0w$`v!^t%FRoItyjؒ`ttXo#Mq⫠+F*QU Ud8%pIc;q=]Yet%āt%!fRt1@܁67.B/`ęNV?$q 2LFEGU O;e8--7 B"";K("C%l?wP/ϑn< W e3 >68yRz F^;hhE;5ck@d5Դ/c}>"vLm R[%AgvKT.J}T#cOqRas.m vqsdE$>>H$4p;Zbm{mcǚυ0}]t6w$lHJ[ugTI.R=G٠ʒƖOB]GrQВ6KOmjo m\~ZZO&ՎؚWSϚ&ژFL=[cQشIi\~z=G) G:AjGM6hvJ:?`08k ڕjyějs&\6q}p0Nc {:t+ֱ5fjp(OIm[3u=GکMؚյ7BgE];6!S2` lMrZCmvқtm2Y.i6m6\ti}jʳ \psf-_ʥV-rc+^,C?3gfg\2 Z: ٙGpsl@TSTFWZ:+]hO `+V͹>rޅsj A(ΎA^@Tx˞P G˼lުR%t0tzr!IJ]䌥h,>5E O-艇}h{y=}c3&yf?sڄSM2xxL}`F=0qQQus w~㰻9n]LwGsQ~߷7_n]7H}ˮ]wk.Cze/ߟ"K] .t5_} _?_q٠/r5^5} jܤS0.1n \\p ߙK vu2Oq&Ji9D<3r@G Ks ?W*+͍8-6{SfkDlrt ~1|Zh=l0~Z. M; Z JBm$9I#)D5jСAZF ڧE.Liڨ3ͪ|g}дn`Pd 3RL ܏sio(ҏ1ZuǹHѾ`NB/G8w e7_1?o@1sSK` o@/ZBs5R=+h FlNH frY6Ms zi~1ƌ|Ml"o8s } &p:&hD i0 ]6wߦ1)e\K i"ӟF6> KLZ El=a>υeЦ$ao.1țleI2@+BvͲeNh}RuWhs;|:a[EF39paAod:Vպb6XYXѴeA%+*VijIM*UӨXU6oIS+Uz~j*5VTʹWT{>HW\Jڕ+ ͔U%SWŚ:WcR!FJf 5+W@fϵj `U; 1Y<[BJ+TpN Tpnʵt~Z-Ra \SrCbP5[Rr2Eʑ$-9bВsƒ X伊nKέ$a,7sF9s9muZrι\K=S?">?kϳ?csnsΩYNJf9&?W:η"C-򞃒*ԫU7TϖvιTS1u`$iyr9P^|+G8w?.psjhV k.i|^\1B1?VL9M q,B*"*WJ=ryUl8 EVruW՚u5jI wDmtj4,59~7I4zQ5e)>|&@:ui<8FO*S]?-@n8D98BJ+*VLU<S5ITG6J%r%[DEUP~u +W#_DVH*U1wS5~1%ի%vkT+ VR[RNM:^=[+׮u97h۴QM: h=7iؑ mrOh@r5Ӵh9K&J>3ryÙ\`( C}^wXЀa@g%7PpW:8dXrBXMgO=m.wؽ݀8}ttfB:]Sڥ8:pቡn5⎫8a|%tܺ,+tu3l?.8[>: _Dmi/H9nU ?FhX^Cm~_8 "l\ܸ'&p=ºFSCN3bʰ>s/x aV#d|pX(#,6bcGu߈aG=jc3v{,={ne]71t̰ΉPR:#FM#ja`=$ìwd* ^ l2Æ 6aC:ΡC>|<-vIxp$ l42|dKkP ɚ=#& 73t$LfxKnСLS:{X$4rwKMcO۽u#DwcC#GOzxʬ uǝ1tJḛO2iw=pN:ƌʇ „N`HCGP1jC9j¨]^G(Gj`HKW|ц]:w!9݉>(ǐ4G8cK?>Đ85DCe{ Y>rQ'3&{qǎ`܄OzpN0yy/ZrV=fV.[rV^Y5˵/R!6/|U/kVp WvJ:njTC=peP5__#\͚79͘9\0sΙ1cӧ̞5s{tљ̜1h5s֬3Q mgOG:ϝOpKt 41Y:|aYO{"Ó0by|[gGpbcF)Jǻ q%{Gyxp%#JtF;TŒybF-5rQh8~=koݼ--pd myh_?؏&ٰ<4YuB~=1ᑴ@Hڀ`+/:n@5A}0d@Ol@;dU I%?ڴ˒XCe Lc!$ՙ>í;Nh,z:I%n@k\QٜS\np'k`pX;k6~&+K,kJ\99yJ'f+'' - S5ry没Kz\c?dYh ~.Gr#:v>vǏ8cǎ:|doA{KG&atvZ8֏`s9ӰN6lpn3rǎ GɗԌx,8v!. L nIc/Ӱ Knakzf7se`^AޑCs59`P1ӗ$ 0_/3 >SS; <:(1Uo#|4 uCIyz8zq|E%Gl۠)Fe{Ҡ+z=Ni˃AYbq#;IFCJ%: KC.GDkjN Ơ_p5СHI J1(>r 'sEKϋ~b'C1BϴICA~,ĨGE(Bˋ6 7dspTSd舔cdqNqs V{P&)ЄJʠ8TP='x\h.6Pjk%*N7| pw&Ş2[05$4_8m>o#> DG5l>Bd+ LWHVϙUe+9x_}ϝ‚>az ^vCl@wh-/"3pdP8:(60Gn\P4rd42kf|"5;!a@`7+,d@# 6w 'PZw=%Z31|/;z_wf;}NJq6 5&ޥZ@+r24Y,+74{4ޚ,Fm~3p}DM|Ke#dnfswJqvޮ6o3hvrc)> cf#DXȱ:;@8TWzhnC4m Gsʻi8.Wqͻ.^M۔4%~v3C& <>5ȀfLtl0]k6*Mgw( 7'5Dl4? ҨW ;. `=g;8D9nwa{Lx0lt|8`1Y2G,2`NxJҗ{Pj(kbt jj䟐  A?;M$]|R /N4aC^tT;#nK5ax"Ȝ<\B:b55~]rF$qrAe4$9*c^|d^bGˋ/kJBqq)\hX[r>]qh%[o! "GR&tit%S'6%r#哈8N,m44k82'.s g9 Y-v5`T#n08Nm0}6j'ow0<0 _PD۔i/W_i3;Μz/T k6VPbr}Kl"A> 3++F(.TΩh>oCz<`TG_L%摟,1UЄD| n2WXF8?'߀.ms ,1[όwf_(/np!)~, h-Ö(l乃huʌ-W8u|G t l\$711y:UM%voCN͛O፠yӀ@b47%j gyzJH;3 EwMD2^ ZXli֘/ h?0ssb4qGF}6NaC3%::;g;^dCʖNX&q,0o:ǐjl@ @9YOw/6Yc 3-w$^ۍ}O?&q O\ a#.WAF_GIw,4'>.fo-dPIT&R0߿H<<1_IIIIIIIIISd3[kƗ;)d:xVbWwۑݠ}F[4ܲiu+iQ @tPžPC<`M F/n)^Q46zC}P/̸=Th,1Y0CS5Ȁβ;KІYƒ6&1ZCb3w`o?[:6Wg˗msvu4l۴Ua8Eoo8Q;)XG)brl ntVKM3SmNN/@boOV兼:!r&a[@~|#eF g€6'/g<o>._K~/L ynM;][\89.nR_Z/!;ItD. &0^2b nJ&|XrlݺuϞ=G#7,n1tŏJ8?#?URRRRRRRRR_bۻw/R(,wXm4*=J/\^5h٤A ;4mرqz :jѥ9Э_Ҵ4H/m@ m? EEh3!ag@}~1&ASl <"_7X 4J|<٘jtoу؀<萶;P &рZ:8E9Y.Z 8mf}4}U gmI[rg#+ [ʤҲZ}rF[o]x骗c#嶟 ưlNW sg +gc9+xW`3q3hOKV9<."f)&S>Zȸ# aHYM:=]BU, d#QՉj9[ym|mW s¿6o ]q3'ǁm,lܴO Hߙ9l%xbOdt<"2HiKl!gP}޳JiɄ:\'Mmdb ٓ~ؿF2@ϚBP( ,Zzh{, m"8ӳ,>x88}!B?#){в5٭Q|9|RZ~۲yi^2oc>W"3/aK^ E#Mqf'e@kpO_(6h@,95>-}:57Kw 9 na2e0, htOsB .Z#>g[  +3DBwyޮ6w'7Ibt'rM5}qwfOАE6M5bs̀ـ]lzZPF%q}gsK`@c4{#f ǐNĉIL՘]ɫpX 8B, -Mg4p.A+V[cZؚpGzx{7,bKfCaͰvG{ z:Å~PeU䉅&7:?+gPPqrEErN h⶜G i5ⅽ WC!q(p9W8C'GM\<6./МVdGVY,L.R q+J\!Q\ Dϧb@sWBHqKBP( k!1B>.Dų-8crݻ1t{s={ f42|@>]Qpɑ8kz>ucO3u۵O3fケˏӷP \MWҠ%5"CtZ\ȆNl1hDnJb1؀}f t7ؓiG;KN€=hm9Ā6zN}&ȳZZ#+$&T e 4Н_rW{(Z'u}{Ht2(Ihi.6'،O97G _:|]mΩN& ^r[}7[lݺk#[|sGP )5֛#Rn@s9jBȳ%VbR E;MZSAH]LF>)pphXHODS#:ٝb?gN<0dĩ`xiS$ pdNрf,P( B(B"U8Har-8ԢUew~8޽)Ħ3 Y(A5Arvvk-#/䃇;gl>>|O_\I.s42h` F1b\i/݀Dnc= ֆ69&◄ t3CY n_.pŻ )HYЌA 2Ɍkq8I 9& g [L .f46ױP޶]ӛJVS_NS7 )؁>`CMXĔj NeGk}P@W6lFS xh[ %.o&c݀næ_>!'4l_O\&Ȫ&Ӽ@O\S{B;S|bt8BSm&o86֭x@_n8b0 tR zO >uLݞ,9#L^{1W5p'ԋ h0=gWteM4" 6or&M?~ diVڻw/jX ͑I&-n!ދ.1(+#=A?p|3%M)tQG^%C9JQ wV/[mXk+cզ|>X]}UÑA F/*J4 hQ h n_ă_N+^EhIFlin>p+1dFKA hр&KQ{ 'Dn@w5184pz8=SmNnS=:ҋT'9b.pWxm`RF켲>YКmyr34نr?I!ǹ;'kh&I\L&#ֈ7rYD7ir:nbIs"C8 c!o"n t'7x\"tl*t< ҀҺb

*1*>A)xh$+kۺmX n"hEGO)z[ $~D?n BP(B_ !@BDH9b3p1,3bDFO=h <3)Goܧ!KR#}bV҆> &5"+Ԁv]>@TwW&Gwv;ٜm2f݀N93؂α:mBYbǘe;_nGl1 }=&`4v6, h,f#f+thN8Kb'qc %o$k=I̘{Te9m9mĺBPCjxC>$rSM&|Z-2E<s7|qwc+$ Bθq6m5k֗_~ɻzgxH8M8p?FȫND<R|sy;cڵRBP( B\bG`)_P…A"|$X=bHqӟCky32{ݷo2sNĩ(B|VhnqhfƯǏ,̇<_][/o|sg h€nMt$`xR1zH824҃6l=KZ8kE 48N?O'6u`@i6:Lf4MN|!I䍊MlD5f@;p(;8]L˛e ).tp;]l}],Aiq&C9aβNsjiS<cw4p S>18A"f@krYp3&C9h@3yNl%tf;Zc)19&,}XYG0Z&4g`W܊ȉ e3╆Ƚ?M''059h-m_~m@{#="R&,M/q"wnx w RfOe N!M/5/ZŠV\mdŊ/ի_~^ X)]en@ϟ?ɒ%!Fi"Psokq>h)Dŧ|b .ٛe,m[,YbŜ9s!_\\y\2iӇ'N`BL* ܕ & -ݚb\+Х#j9!STQkwQ!e>q+_|UY$5:i=``cǎ}~ BP(g7(7!7d@^~Q)JL~c \qRgV^jպuPɗ-[&'G"PWt%:j_\a_][/mz{_|t%^mp`tHE!`Px-$20A2ko&D%x6xcaolzL+PȘ}4vt?Zï0l/yoÓ7 M7f/^Hȓu5Cu2힮pӗats'y@&ص - {%<\n?݅n=N4EZxv7M:ń&5M4)~}r4y0xh%Eq+@y\5#}֜-8+ hq qmehLL1LDv1t>2C3>>tchDf͖uE[0!h.49Rw)@VСrlf.RAFw̸Iq)L{"Jz>L=7gϊK7&csBzS,'*r<7!x}r/Uv{agV@v/|׳ˀ>|P BǏcƌq?y `ܸc?*&M4bĈg E.FqI)SO=3 }W^Y| 'F[l}饵V_~G}g^5w}/*l㏿j zXrlDp@PQ>{^y啽{ٳ֊+{=|ɧ8 z`wt/ʕ+7nuڰMt^_h%ϊ+_xa p(q_|BB(~݋/twyx˖==ܲѣ<k׾w>ٹ^{CNo-~ ҋk޺v?GL4ko6n n.@8n:r(ZY;[VRD8%xysHDc hF'y0} fۈGu# 3Æ !Z,N4*+q8e\JF8v͝5u]+Ͽ~^拟~ᅧ(Zm 7(>88:68d 8DAK3v hkѾ`мĒ&y<@lD73UY\sAd2(gRSfxSeFquV=8X2…3-Mt7 lڄDH}22/-2bc,V6gq\t)fXZC^R1^s 7gX5qffЊ]ld|_lh. F:Y.;r,qsm/-}9╃a=3`6†# iO[v <) 廂yqo3*q3>Ix`fa/-) y/Sn[[ˍ`Z4d)Mvs ^rN)tM. Po` h^;@rps*VoYf@Iň90'X0i߈Hb-[I[ =նm۶r#F~\xR؅n@/\O/..ޏ_=Y{ɧg̘5"ZO?`Ѣ~iӦ#O?h&LzQ_8qO>l>CCv0q8$hSVXlٲiӦ!].SO=Co6.jK kfxtΜyO<1ԩ+Wܿ`&O:i!`%%#X`G{>z'ԩYG|{bEӧO![|Qc&N{'|{GC4ܷxǎxb̙w칸h۶}# _6sꔩ?ҥKgL=~=?Y= 69zNK}'K/_~9w.… }ͷ(G>YzZ}}:|fcvmE uv\@\-[q)_m7 8EW'4Q) ,;?>xnȕ!6) BP(nc?&M4g.G &O/(G5nȱDܩ !0Fʳa#gUWZ5jԨ; rQ{nt`DbA6bAMLsuu(#l7'b>{4&$?3foDը}>n@/ZKۏM>Cڱr_^bJyd3FZ`ѣ޲k\3g=\sy8֗_nF~|`׬}裏'O~Ȁqx>+!>K3ƹo_1Nᇧ&oݺm}}\lb|U? M^{u}=6Yfo߾hƌ/=p=p8:BN> |-􆙘 _o.0U3~L=Kˌ[7>9_vHho(6;xBIML{VbYf@:`2f|tY?  [B!ݱcJE!@ٸEVGj $co '|g_7M0>G!kժfz ϶m`_j;~MfϞϿ`=4eÆ7ۺuf͚oN>Ȏ_@;wKpD6Mmՠi3XG駟a]L4h(87x yƍi)gXQ+']l>3T_Uڿf#} >:{׮ر.]f͋/bԨ1=U\LM^_1cƣQs#G˞'ogyxLͷyLUDq2_~y _CKmH/;?oC:" e-wt_~k֬yg,Y{ႧF5c,V\O>G&A+ BP`-"BGl"|&Mh';wڵkUVJO8o C|˧}dd~a?޽] nֻ;5ܹ/!4w 韔}MB% hCNހ ЈKkr$r_$΃؛ :+ M.si3('gz6gy._ӃL/e˜/i4u&h&r3q;vf o4΀^)6-МZ }grYgʀE~&RӰcO6u. |=1U;1x3 eӬg,Jy\.\rs-ۂ9l[(εr<9%>-WyQBѿi h131TU8=޴tG 41Lt?c10u#ۓ[-Dw$ "wW"hobhr/]BaCG"d@{؀+r͖-,3.AQ͚5{YPO?=r & ݼfѲ-)AI> }v)Z}m7(ʯc͛xl9ˬ^z}Q!;w\W05{bٲb/ȏ?7xC,Y]r5tPSqE_|i.z&0mU^57 ?Д5k^:zb8dxbO?{'?ȋ#s83f"Cɂ 17Dw8M5[y'|Ǿjqn%#{֬9/4#}bJ?ߌkw4= ի,\/-̙Ͽ['~%>K0\R~rp#yg% on}H?sOv8?z"qݺ8k >|߿/@L<B~?pЇiY h~tߺuO>9gC 6zI3gy|g~tt2 BP(kOB"|뭷Flٲ_|q̘1H.TM"^E&p1Oq/A;v{ޗ_^}СwuQ/_? G}T~ė~>4a% 0~Y3Ж{慞d X q$;3b 7纼@6'D0τkeؽ(exB;0487nI0LTMQIjp3l@y3<ЈtD/lŲKÆ)fOpMlK3*dhpV7ÆN&:O<Ќi}f# h[0C 4r`Y?OZ+#5'&)[P y] DL^[c&&GD)gt\:-3jq0F«" :ya~hoZ_>HoWճ U}Ј*kgϞ Y X Zy˖zZ?4tp^*BT^* ŋܺuۤI|i GcǏ[l7n{l.F~|xÆ7QvYf}m3f[2E#:E,Ј&M4b sϗz<pX{v?7| 'SA}|Ҁ޳g/ɡF셒ݻl޼y'1y/ǏeVZjyvFE;w8q<#0a: 9=5.^dɲnٽq&sG~ ,|^{G}͈8={=JV-ϯ9stΟ<'>ᇚg@c)ꫯ hl[*6_yeW_m<]\:~pmiӿzw}H%!Nд€8!L5K$ 0 Y'0M@ җBMh@sXbA |HwJgsL<{^ry'76 $w0 ؽxI >g+M*5 hr#XaC|XQYQqc6΋3#]1S=]Bt`WP_9̸B9`͛eób lD.a"/mh^#b#zȩFl?'ܸo7:ƙFxD\p}wh=^.l&XP"A? 3M#l:>_ʇ6Loܜ\ M:Ne;f阎eyg4 W%@ƓדϛOopg2+4՜9sOOdrp\j!%(A<7nD$#(p ٳ̙|>"nU%OO/.—_ny3f<0ȳnݺ9s|<\O?裏x6y?skL'O޴ ׯ={6/,_ӎ?Lx5/W㭷Zp!ŇzpozچI&o!oK{);vDywp^n}w0EhEiq['Nv8)x{J7n[orM?eXG\74-1g?ǎSK-[Q\?7nm|ӦdXZt.;~ӧ?gnb ݻ qЭ[a>=/¹FW_]35$oq>1+Tz_|SDA(Dիp1}9T2lP( B(k!)@A7l؀M\5YsMnrŇZ|߷osOÇ{mwݻw]뮻{ ـDvKЄi1D:Os(O,M%P/Xz \w/€&Yb˟hy_(<'Oـvz3n`C}FM&P'ttvTM;K ]SSOD tkX% W+.֏8_,9[ϒbmMgQZʙ01b0βݟ qs ي|݀fgZ# g,q$3dLܡ@zo_+/(t̾ԃ$M. zȃ&NtЅ\dtv{Y7l*dؘG8~+ h;,1Y̌; j'<Xb0gKY q& Βع󀴾h_Ww`@Wuֽ!z !"jx)(8nIRI`|8|(-Y Ь o|LZ0dO=x9?>~&NQ_>}:;'?}v}GyjD1jȑ1uM:=k gӚƌ{l?>eʔUV_\Rrd}|"G)/M1B^+W:ux‡k~,X8cƌ'| j/^#3,Y B\9s:eƳe_hѢؿk)SM>sm7n;vG|e]ԩۍCDpG۱cN#>SGfb$O<Měصe˖y͞=ΝQl1.ʫ?<'B5PRrp˖mKqP\dܲ 1.3p˖yo>28-*$ %e1OAL(O8qӦMI BP(g=B@Ǎ"愰K,oH/A D_X=b̚0 0]_極k!ӢQꫯXg@؀өk" ]IsQ$:YdFGtWf&h_i^Ë: t*jٷMax _.\FqtK&_M?7qhO0N {ǟ֯ ݲ%s mݺWya A_q'}!.?ܰ :8?܄q%q Mncl:.,JPgǎׯGup?ի׬}>)_Mԧ?Ps1fQ;(%xlppgQ.*.w[V\\ /JW6Z% 1"i72bN&\@Hf1c}]pd BP( Fh)Bwdr_ءMW D=8"GG[q|QP8o/{n0C%y0.߱Gطg)/,[ڋK6ۯx_WH}DDi=LdI :dFk6e7t?f@S^Zig@##߹H"}g@rOXyC" x*thʳHPZoc yA 7VK?P'ewwsȭLvr[-C&|gyP'Kt^ eq% S_&gYm upRZڰ;Rr ї Z_ : &8Se65وCG+ӟ;YґrI {g 2F[Cf:zYbOe'RLO-7 h?c靄/! %""aTO<ĤI{ofm[|e 2C֭[/~a>cxa)5e4!t(e!p,|ѣdnٳ{̙K.ݻֺᄊ /|޺[4:>, lCld=n@k@tڈ++EщqE5hp8a4`@3FЁHO/F n/[ G o(#XЁH<;2ʳ]^a1#ux|+}Fzww\ bKڪ_\vLr2h<m$X|a)Nty3\lŜjг{;\RwZ0^iAt&ٟiZԼiĎxle^桭ݟ|9q hCrei:YTbrHměS5FLzF($,v#M>{q_Al;+iP;k>FY7 p!`Ow0Rϲ%8Ũ^w}&L7.2nԨQ3fرV E2!)]ЊljtsYpEzs+S#6AZRRiӦb."MHb y?q?n BP( GeQo>'y a ̠03o&ܠl@3e1=FZys sr^Df/ ,o0wh/irz{K?T89`'@`R;Ah8:qXbX,|`7'^mϰ Yq rY0Zn/a,C >A&AIG]Ѐlb_f}Ww(̮cX٩c'IW2J>4/ݟm݉-Ai2nȧx2껻! oޢ_+г#kIv€hN0y 2C6'g"9835|dQN ق)1Z!)GzXQa vz9å"pJw"<"O8oL$tZQÓ%x#]&SYi H 3%c$Z>P/9=`OW0̀> h;{~k֬YAZj XrU֭["Sǜ.!R*yk._|ݺu| g =ۊ[m)3PW=$"4BP( lbr4x݈hxS+ٳTB[/ݺ5i M؄wрHct:M|gTwf+ӪIDh}gM#{d4KL0³ړ˟4@>2V.!wuZ{4928(6!xfv>s5+ XnS(P( BP hı2v޽?Ν;-hyP#a h%8&2dh |82'A",1/cP9 zGr%H$hbpb/Hֳ۟n>|._+ Cyk@]l/D<ϣ zٽHwtqGrS٩n&Mׅ 6>*CKN6aXx:2.7Nब0(mBzSݐY6/]@͟ty qai.s"b32,1]23'PG娆%œ R @^AA Lr-4!cvJ⛋9Q_lB? @1) BP(g=q,ReA4[RR={؅:9D1]RdNIlI4mHRHt30V?! hfi@{;Kb VJD$1}^Ц8ܾ\6i*Xȣw Gurf{y7P tzs\/SocZV}ޮ@'9qp l@kz0\(ќ_\6М&/ 3clkwgS[`:3-I֧w˹1wNdڼ_r6bn5MR.;Fn;狅8h210[O(n=N+6艔Vpe4rP^LI/_6,&FZ"; ֳҞ.v"gr>C49o4 v1HWd=3<uGI> ~tEM&d1Qh?qxکF, ZQzįʵZ_x6( n8.VYR! AmI]ǀFp +ph.NQS|co+J#ҩ'4jt+ BP(+B qL+[d؆>p@.Q"gB룄#jn+JN%m6s&TBidw GVGT'wK?}4Q>{s%P4)pf=Z#@+&&O^LmIU2,6QiD Ϙx8b8JtByA{qYⳟVg&=ś!c/G[Cmb6\f&;NT87Ũ dܑBGVgE3蝁yH+Z .`z4d:zv=xh|y"b1Bf,g=}FF+d}o+;) L`/}!-A*$<"xEl\D8=% j: \^~NSMvE&BK!9@$f(UMhfp2_IHj7a@G{7Z V!Z3s$&WMxW2w}LP޻w={ʑL.4Aq pH?aoJ-wpyd| .sgyCQvC@n(T( BP(ZbҶEXZ1~6Qd Vm4sfYMI3pH(2D/G za=cA2g4u:р&9aNh@1Yόy!_N35ÈW; ݃NoVa]ҡ˕pӛ | Om5z$w$lJW|\T0\;Lϴ249O8Q!]'$b6R2;@pHu\[0vq9&&ֳa6 OB~MwI&нSὧ"G!V#RdP;$ q6̀ـ>y#\A|uz Hk2."7>_ I.;>s,`44hܲK1P`A$D4Vg+-hggRG 4BOHPH妥,w 9_JJ³4LIIɮ]"\F1h>e~ BP(3l@G.$>=HR0i@R&ْhKZ{!={ !ш腄$Xό7ӂPOֳFxĺ;{L'@˛eÅn_u;<pn Z(&2zЉtl$wեJWھ  :jid@:g,&J3ݜh@@xl kwfhF<5ܡ+N wi€N!q +<,d߷B0wZy4KGנaF,M.4͍=S7-/fk@y= k -48:/qL%%%Xqq1HQqՔN\AlCGg~ g4P( BPUY!>3ӭ hpZ4y&Y"g^%I @g(!aTСm5В3!Š07? \,+=8r>P;+rݙ@;DIPf:sك hw=,T1A+V pthYavBLcJ> `C=@;Sd7pAmf3K\6S`qrW7>H3H@qFf1puL2`66Ya@HB`AQ")Fܮ}{F{SN[gSN _ ,sU$k!n ?`K(Re {Ùj0) G3-ƎĮTC[-$B# "& e,xr0;LN=ЙМnݺwޱ?vNPB٣"Y?l޼y[o훙5oHZ!B"D+YktgM9̮ Cg!~0]$GK@;Jz7LtkΎzCtrr,aރNHh|y3:3%Ne&G3w@,;ٱB=j}8j~(-'\S\ېT:n/`g`\R t>fُ Y0?8 0/5xgr* Pς6o7 okK0e+X= [GV]y\H%‡ U_s$sG*i`)~a%JٮJ@́hmڴiÆ Y ѢC eE_dꫯ;n?܂#D!B"{VxKgK@{34mg3E#P g׾Еȷ:$?6{@?pHd*N D7⧡驩Xjr49)4GXnZDv$ixF3J\&c1Mԗ2$t"HA:dlz<=p"ed(g'[xG6 w9cR$3 AY؝!@1bsAxPɣ.lH ~vۍA*eM8~Hzd#i&M-|'H _L2Y-ӷu-[lܸqÆ ڵk_z5k֠ʘ SK/kׯgig]Aԛc -D!B"Dg=O@ rfAwI@|3 # #z\%$r3G9]㹖xX @CdzeFFSi? mYnhrdv壧DS-Y:$͢"#jÅ2To"|M_\&:%?G}~g#\dQ&)=q~ڍmΡcD@gʶlt Xza #`Y&n>_~G@6DM;Axl1b:YL5t%rB7Ǥ%=7ǜe!ajc+Yb{-~廸13>v+~Ӯ"7MVlL9&fw|ى^ "D!B}=+$?/figyH@cO[Bwξ,޹+j}N:)fY?'}t"? @7ts273oeiG$40/Ggڠ#a(isfj}NE8h1Άt{='2SIHxaDIMd(T4eXjRU1qtⰅG&Z >o|t09Kنq.Zԥz=4}&H2.FKTCrҸԡ㒇ùXTLa/Hל3֛Mxj[qRE4] kvED'RA$ 鴺hy|j*gg dhZ~w8'j()Qj!/!k%m+ІPv[memɂ ;  A@擳+mAGiuY`R YGw|}ك{a1 :a'Ogw؋3Cf֛9oީkڂ"^zel>é,ҥ'TZi ehc8C %PB %s)‡P؇-@J(J(w.,l#c(5n}];wں݅ E@_5m!]- Sf|iXrzс;x&b)5P%gg<DRE:m86{CxgV"TA5<qü<Z~}6ላch/Gh PD=hzEptfhh>LL6s:{ß9ӇONfKM'9.cnv\.qm =G:QqeY"REqL-GkwƳBWCv x"(gRn&U=~N8BJxC %PB %PB );vxҿeUW\x mvBoUzBO%-1{4Uh5;o[S|}{ӹXjXd%AWAwveҾ qĒIlboԳc xHyd?nAxKM']wvnKW5gsF+vrԧe 3j\[<[ԧOO˘9K=CwFqmO0*>l~^xO#֒7,#|t¾<**#rv?8>>`,ε^a*t<зlrg) V5YzIF _J(J(ʞ٫(5Pع}ǮnFnMC9ތ +d|z!=lǑ*'r㢓YZt23O@2-E:_&S>T͕ K%6H m ]B,1şڳ4EUOUTA&Jo9n7!\A:kEW* "3S;i8LO7Wd D|t$7#>>?ǧ fAѸԴLE_tzM@+ho%*gâ.FDw,|~?:sR 'Бȡ9hߋ= bGVO溓T'UN@qO54L"D@E@a1_@=S($;L%PB %PB -P)guAMW^~P[p|rAn¼lӜ xtA7}|ڑ~nޯ&m~:m3[ħs3{MO(jD-ˌO9<4/D;}-\\͏UC]-yg/ԡӇxHCe*Pڬk\aBm=V";;&8 kDs ޹޾mq昙I}-ڼ_lOQn%6J,-F˴d۴v՝ &\&K<I$Rflh}Nӽ%/ +a'`z6H5tu{Ɇ!a`8褋emiAs~f,ךȵp%?P"QAx_qm۶m %PB %PB eȖ-[ wADzPB٫bxqM@{l33clk:ߞLgЭ N.bCwv͕ k`#@chЪMgP\PNP1FnhN6PNFqHbnt黏tlGJ@oQ)b!tyy\JyS9mڰ쓜ɵ g[% .-rmĉe۫ju/#Ll|LJfhbO"'Dto# IuH^{FC@G@ tCW3f]˛߶n;vD8 }?Uv`iӦ~PB %PB %P衋;Sq-[?{"zzNb][l\ǀ5y,( "\N5ϴ3pgf T 8] cO@;8fy8m(Z="j^sNL$])!:nc!:G@gБ$_tmHrri(v.nQ5lr~yhO."XGm|%7Dh)W=ָ5m3/)xQiPNݎ"mwH`^*dffe-t'qW@{gH%i cH@kh{/x ;,흄*ټy3-B %PB %PBrK)c[n CR!w 9 @Π*n5tw;[tq#1 cJ;yF* p#kOg =k]DsmTla^bygPΌfIJ~րCltҚhDZS~p0MOgdiWpB8t|l\'[=,3) 7'57X4E#F%fFuCs5x{kxԳ~r0h~z}vzlaDh!^6lZPl(dEdesU}!# ߟ!nt>.|H > ^GKZ>WW}N7vgz8jL54trrb9& `vks-m<)y[ ;w#cߵc`׮m;7;pڎG$ XH֐AlRFV(q(5+6n[oݮ̢HGgt  f (ڦM(}7ɩH" 9;htaQZIIfKF n\bnذAv9dls&=ftY4ݰKg˜ Ug< ΂OMOLa kj848$c!&Bd-).O#]vYܤ;grN\]9E(#'wȎN9;EF.]Y^QES}9_8ڤ:\-ZwJb="YAtY8_t ΟtŕAQpjщBT]sbkaY\g͑eש%/"7S״DN؊LhMSq &bc*e[p0* rnA hA[:##7znbog'̻A6Db("$mQ52;N@'͕yzUD|KDsunGZp-f&2xvLjP"xC!G;'Х==a~ /2;&GrN>k jEץ'R;;ǧdIGRS.AUPW/8WV#ziM%v[}৞h60wyٿɆv#ۭ6b6b+URl\ ?;#"O YxO7 Ca8p S(#Bo/^hxۃy)U͎-4-8#Us;m߱c;ضk];9|o߹#㩎eMa!?ze#2G!GQ_t8ӵ8Cqcw%IeټaQ'֍Z#ITen ƑuVh]ꔦ0A1 4H=Bn eAQ|+Q.[ӿk# BT4&B|rYN%/| f-mfhBNY8-Qd5&DA+:э- T"## GJeA4P#F;;=Aő_䎊,QLqvQ)X_#.G/ 郵論b'r%*D\" BNiE X.O' )uMšVCT\d];NFғ}BEkB[Q^q- EC2 qz>($jBXFUOxBQ[.S1!Xok@w.b A8r'Г!UJsg}/_MŘxdEJY)fJ9aM:mDPuӫЙ鱴E)#G gWНUAKou(/{+"s ԳPM1/k'k]fep(߁)QMtʼt(Ųmc%Q#WR VBqU!lhES"k82] %rVߩpEAa7ֻ 8b"#]E(UWb@ґ H)(BduP2<bݝDL,ǎTz"* Xz$7,RpSd,Rpbe|t#UEA2~QMU*]v""?FZ49O5N@Y$舺FEtq"]_#KGCqSCR发8Et٥;#6';7[iB-UŠpj(zSgq'(1,1:mou DB1ъYG0FA6K\M!Uw#w'> ݱt;&j6?7etO$(\ q3;Gr2\sts%驕 5Ĩ-187`?=PǏ$V(ikSpURfk{}hj 0t7cIO6rg?kM.|㣟7c=Ѽ}M;;PMPGqq)9xTEmT/;eK= dgD bkeہR%H xێJ8H@Qرwrޓ(D3Y َxna\^%¬d5FFsLi_A0C]-qH #,耒m]vm߼|Γ2/ozmټc;;wnߺ=ǓR{XUgUv˄D9KtgG# C)&]wPwef:Ö~*Yٱ*$ a,h4hTɰqQ kbŊRzD~HS^WHIx$Be˖q;Q0 K!  ud.p;NׅV|]b (8̝"(1r8D5-&k@ NBDRcPfPq'͡0>j/X4n꯫hcxXvбWvUAQTuP΁S qkK*]R)";4&>"\'"N8gW'vI_r%G>?i8cN9J$q 2J񩨎":ON>ŔEq\R鯂NHX8".A:㏣s|'.ʳVy{%+k֬Ykeݺu/򫯾ʣ믿 +4Zݿ=ؼO}Ҥ4*G7tԛZ~C>c ӣ%E4w%H>hCe<$ ]UҰבlMOhfaAX?(Щ¬tU4 ^Ey:c\WLxG<ڴhֿk`][sWgnxn޳Oo؊fCU. bk8KߜTJ"ېգaJSBM6ihQEۘ+VsB/r(t#ؒ1h:ݧR,ߍdt]QA _RdEb*UV1~}Ǣ Wx򩺌(tYtN5rî;+VNpawn(JݕbRRspjZJ8bT2tw*ˢ#95X"8B򊣘n|dSSE::TDtaGHM?*t.,uѕSjBF5N9#xʎX_AT't)Ft,݋#}B-)k|7|ͷ[;{O<ĪU~o?/f͚uo_^L*<^c=nVxv =!\閺lr'\޷s\~6yp\sUhͺiM0fDs-Ig?CJ+-!Y&"v,W #)^j/y|g"kn>}FF@Gݵ넧vƺ}c? n3/>0;JX9Cao]-%*iCUOwN;묟zmG,YC? Ng1{,r6 h(طc]x_qǝp_ᇗoܸeV*[6׻ys;ēN:9s?-D<Ȅ}_TXH?" ,q1FXZ/Q9&B&+,N&+(5 e %A+G:GB;Ҩ *;#3qNd}!CĕEхLůeiz.G`BEauC٩;xc"ʊOrC (Ya(TT ) 354$|h]TGtxExbL,qS|DJJ"7uA 2 TW:(NqsѢETQEGTBXa9],.AԊxJGT7tr #":X3SJ9sTOщ ͽC]ɊZD >>L*"cA|;cDG(RurBTEmbG0!u9R*QE]&nɸxb,r wyw}}=#}~ꩧyg}_f/^{M*G]'j=Qha5bgv/X#_?SW裏1sc3AMu=:}v/a**ᇭ*D#g- 6?ehkuqY* Z%rp ~oG+ 7ܠECJщ3QH_rJ>19eP(E7"2RO>nvm~;:[_@*(Ψc@NnʊtML{GF穣S̎ȈxVtZyt©;N]=s$/arnZtDT 1"sJCE-/1\ѵqLO>f 8B |0rJ]זJYxb.#=%#qq;E/؉ϔ~Gc=v;9NĕHdHuWt7^x- Od3D@G˗/wFŮq5seٲe|\,]TrV)> Q(z뭏?8sVn1.2a0οoDtjM^dj^uU 8gbRPȰEZVM˓?,7pO?뮣"F9( SܘƸaQg/`84(%,dKΔ"Stb`uj2=ɅcJ D~g"*2򤤙E_{'*aIr٦r@k.M_f 3)GcE/A;GǍ1R* q:_wPE1Ds&(2Vl#ڵkI<aԎеZx/;40COX) #zBvʡNS#˖=;>X;`~~,Gܹ9W^y+>套ze; rMsrM]8ipd[g4?d8dCw:=B/eͮ|ٿd7qYr9L\=CxsXF`ċǸlq[N@hN@5-if1g!kdDz( QK*E+SǺxgm|a6hXco؋Tf"/;DRMNrX8ߌ(cP17 eKmes̯ AA}Ds}}=: QaR.3}`Z݂ãE"s47ψP9QOE8GN=gգcL5X9;\Axp}p$GC|t@cAwzn|vyPr>^@#\T,>`cnS_0W'w~<fo5]3H@iO7 Iri x+mo5\Hd<ٴhnnii>uFǡ3N>}ѧL<ܗK,Ynۺcvn5[pl1A햌x z9STKU&T:Ftյ^ڞ8=,Y"O9PKUC8UΎBaTc1L2(QA8s=yfV<+V( EFdy/yꩧnݪotX_]â&Ԝ#⨶T]E8##⡰hT&h;3EΜ))*Bѩ;*NNr,pEX8rD,KY@()E↰pM5ZQ-Q8*B)@>bgUL 6᯦q@|ŋ3^{S4%ɰs>J#(Q[j/v-]w%e˖1 WZ%M1E]Nq\}> l=>(TE9" N)G曗/_5_c#e/h>#NAԄ{bOGik4Pɳ>d]QB@Ŕ8u#|pn,ť%S-5$d/&ӀJ8՟x b먌ʕ+N C)הX~䀅oF\1%@D" znIRC"sI|!L02qꪫ֠!8R|t>fI\l~(fшaW֭Q ]!̜d4gIU;|Qj8 GTQI88ed;$T! nX(C@֬YìH@ rOPpSˆ7>| ƽc 套^EO+@86 e:Y+xAGmg h%nef%E3^N@V6Ц~ـ*>+KOOMl4!h 웿  1VhJgJDpԳPh-hr]Crʻ-5D@z lߠw]~Dr }\ϴ0ͬcZt Gۚ~i☝7(PA=QA= #暫"Y hv&?HYr]\O&c]ϐpCBr(柘6Gs ,\mpts%ûDpoo񵓿e>&7W `U?O?䪧Yǟ|tSg\u]W~tu,~{:oyr =ÜT<$q}_8>w<㞵>_ъ2m[2<8nMa⪐w~gh[lyf ?pXTWPF'X^bY8^ؘxDR)kM6?CƷz{{Ya$BR)<aA(r[ 6ѱ$B(iT1 6mY 9or\}լSh E `!Yr-xEXe•#^j-Z7馛X䋡`Kò7“إȈD@_ UvS̩BPQv<+^ ERh5$VPKq"n{ꩧ`-Np =TDhNBǍ#Ah!UV\ɵn\aUE\kE](A*%G"#(+EavqA9pv>Ƅ)qȈ'1mժRN>բrc(7tDMȇ 8#n4DYT q-_ۄFzQ1:Z3Fth: /o\qD曹y"P]B BC=2%HI̥K_"j#h"4 972ᖧkp wy0NYvDI#gJ`zλ("SrTqD;ofAEF疡!>yLpUwK@٩ GD"H)u婄ѹ芠SuZᓙŝB> }C ]E9mks=\,nL N]ƄO!fE-yRWWvݺuL6>-֮]a wuX.ƽ;$FQR3=|IQb ƇP/aI Yd 2k֬M⋒"B+D&%[+kpj=t#.^$t9#836s abSRð01E_|;d{(XB(yHJSAE n$@h4P"[9@HVA?!2CazXXj"rȜ$ dh$+0=tP/23U:d+8N:9p9ybZ+TGW /,Xpqǝp x{G}Yg1pժ!to2΅X %dt:D@; I@b+͵s4țcԼrA;=6%chE/G֩#5H@ )p0~1>{O\G,ď{,y9&zP|܏AJ.ÐEXvزѼF3_o؋4|< fxd Ǚg,w f Et^n.0}lgT-z90 y#!VDbP8:hf]<6 OM%xKя~|gdg?;7b͚u]vWPBD:Xd hfY fNbGɜ8rʕ8`i#g}•1AaLuVXX⏧];{8DxgZj*僰Ǔ*ZWzXf&7|hȳ>rd/ڥ/׬ޱZ ?U=™+[2Vgh;#C[Dr$@EɟQi E"aha'2'Z'+ TDJ$9"@@ɟ&H'`#k3Ԍ 0i y0'=qYiBiPK8IO"/Yx"D[3$Bo"Iړ?rJ(j)S̜N$@7"Fr#Fg2qɐ9a$=AӍGRDŒ?r˖-B]"p_onr:=]IGW^y%}ឥu(6l@|"3O@(<枆i@q$>5X7hp9hH;Bb5ШzP = F#T|pu8ep町!)b@ΑH4ZgT ^nݦM֯_? ,W։P|֡cQ1!]=TX EKϑkSĸ_RpS g.C H g/Z W(oqH-r#΢E(gGV… &sB+ D@N+ zW 3HxjyH/hii%θEť[Yi$&NqF($)%%:EJ Lcg:@gT(N1.R&ɐ6BE,w}7a E$ȗ8C#FgI EtlF?LhLgx'G+Bɍ)':kl!:H^3uHbG'=RĘ$,=MO[K7.[c")%a"G>1/"o|1VW_}oɓPVZ=oiw~}\, E #Jxmn[1o;TwϿ <tՕ x?<3|Z tj_1z<2ms_=,X#CD2"a1U0<:`Fϡq66 ;;X PBCM}|WElVR>8h ZvTE, G-Q> h t$ tPtrɆى |K$3-3J0ѯvZ</.Ïxw;1b:0EL~t*pv?YvǦM[XadYa𸼕RS+d妗(poo/+@/+,X Xs9_7N>SN9׾v2r?S,.k__Ϛ5U%MMu]F!|,2q`"7,Yֲ>guJ- gXer.[ OVtkQV״Nd Ye'-ZS.GCuX:JѓveJ4$əVbB qh3GOED:c"FDV/X`@C=Ġe ]QZ$% = ug_kՍO M> z)E"Βn.\s=#_-7u12 5;ɮB)^zIb uZjڵtF]wmȁIEsL"`QX"ØШB1b:3FCED#+NuW$έJi0P0m>2Ta@hBNL(f˙;7Ҿȍ"K-r24>Xr2-K]FzMXzZLn#';^3\-(# TPt N0Ņ*((EW_Ͱ3b}ɒ%D<'Ph>RЉl:-W]u]x5%8cgœa;4EuҦKO\8H]; f<`4d#]`!IJ}AOFCGuǑ6:9JHX4] 1\2$ӆ~1\LE;\'<1҄"e&HΌq|Wr-@bRB3QhF#><Å#1V*TIT̨≝R"U&Cn[Ҧ5GMt",0AMc`.v BuQ.C7iO02dif4TJ+s'r3Q1T!C&L-3%FU}a4 ̗C 93t$0nܼ^]LȐbdd@9_pc22J(A̙?S~iguOxyq8MS;s~{_ᡅ&ȓFuPL _X:Dςka|S.&G |lav;숣~9|E/͛Fߩd)54? *; Qˡ  0AJZ|E7طGOw =FN5*vJ!m?q^5o6G3-B[}o@-5- 홦6tUJkǽVރ<8Hab5p=|oma9*_ E!ssu`ԳP|[9fTK$33o癴̌xLHof:mE1|tp͂" gk-:o4MvH`f)Eٱc\<y{a9xg n[,V1z*}:n%4޳0PɆ"Qe` nЧLa>7zmxo۱oqCDe͟g|lۮv l5EGdTN̙Si^G5ɨBAaё=6u^v([lK+Vx޼,8Ynb88JiK.?`X'gy?XwIq9"}|XWu]tZRJ@G}۔Sfpy뭷AAs=%g|IS*RHWo[cF-YS&C];tD@Oi|tQhHĄ?RJ|1Eꪫ7]z"pJ9pJ4F }!18 cŀs3HMĺu֮]Xk2B//ݡS\hBF$UHυci괵\#j?^@ؙGj1/_S 29tßHDcX^x K]rFC~.… m^4ܐk%gACG\1!   RE:-e &} ͐*$NeX@&׈(" qL9RLZNsA ɊkKb d\}`BP:-RK07A!tK@@"p$OI .hJ#dNXq^h$9}d\ב =b0Ňr7qIL[EgiSPE4G7I|rΑQŎB4ǟ')^)7̰M0 5 ׂkn AȟEdp g4ϑ jZ7#ETQ&ǁkM[t\G"7}Ts+"f{O3z\#|&39uzM_#'"SU@S.2ۙu54cyHZrD'ISf8\wa1E$ sl9Oh~!%r&Bs#!!Ff}& 9s(ضm`Ӧ-46?/gެ*kB}کChAY% 6 4##lK-o:kW>3m|zJ4+gեbs_ pHvjUDi7]e-| CTA}-~3Џ@WC7k!`f\ }<$@YQ$ɵEԌHzf,c8etD#jO=~9ۆgd#5xq6p#5(g87?"ZUg"ͩ{yXCUF^ a\Bjᚕ@dZ=H=U~TЉC/r9`E}D/,Dygc=Z)qrVz]eWgRqΜ9\(G1T0/ƾ UB0znp#yc8Xz圮\do։I]ub#nBpzA_( n?0E : B .DYke&&-Rr}/s䳋HbS/퉩(.%Kzƨn>`w%ANYIE1a< NȄ#nL]ztp}ef9UUS CD* 9 * ?q6jQ1K/厠 FS.Nb$$>$ Ckxb$+'&ipd1PtOFd#dŇ6#LUg)1u{r&ufFKi;ui^3XILF >4dHM+e$Msɵ 2|kTTn ise2v./>j! 5Ff,e]FTd2FnSt3 8 H s:c˥GQq|89)>Sr8sO8n[y֍͓ vݲem׬Y_>0O

c9+{I't)<L-&>g ҹtX< N@ }#%QKz= E4?3RYt,;3mϵeI*yQ\u ;>?=ogH Mu8PBosp [ęV,U;#%3(G\ aMfZ #92 \$1b:ۖjighs^.0ι6{lMJɚ7H@' {*7^A,z:Ut̲qW!;;xQ#.Cb s&b 16&dc;(}׾N>OSYxڱm[nvصkmw_/7ƃBbs,Ɂ&KSq, Yrʚ%1]`KvaҚRFU7YnbM"cgsi:G}NN@2;Nz^ F7LIdG(Us,1]wuˌםu8 ΧG,Gib!fdvvt]m1aи$bs,a(4r:PADc/c s \kcw 400B(r44D%fhS2QL!"0\ uP)I:.PgL'trF-RS. m47nv6A9U5 G|Cd'muϘ@-uRn%tD!ⳑqƇO>BI! #fz17c\jt<͎YP"IЈaJ,1s=9jԳ`c9<!/p#Go'E1;03:E*ן3M=~lďLOȓvz~%oK5t =oOڒdf&̶2:ߖ̷% OU $SE9L;S+lN!cƞK[=K@'FK@QNNM+t=5qGӨ}Nfg!;;i|3C5rb,|1';yg=s6N߾mNk>ul~sݓvq'ak!nk6PCqVi-5tٿ<֮5[3FCzt+"&BȁQ0Ө"m@2Pp92\:E)H9, XI$Õag3Pt+ 1%ns|hBd.T 0"N1[)iHu#B AVԥ}\G#dp#$anH2tuIO nb$jt $CCT:rtRd%2:a-ZhӴn[2@. )R&R @hn⛔P1>(0AH^裃4T7fCGza%@#gQ>rȨbpQȜq2R{tMp$>]c23Dp (^S$8#&B()(_#ROƇPJn\P0T`2p &3#ÅBr1{o Wlؙ$& ;Se2Lr`೚۟A`p;0i(wD kD-<(q9cɧ͛2w{⦅gXp" ;+v}`dP!??9ѯ/s??_=Ӭvԗ| kbڵeַz.2e ؙoh(O0?47 Y6Y#c~pv% )t7(2 BO=ބBS]BWНH c40k~ eoՙzDc늧8$t{3:mg-D], "w13f$23vh%f8hgbegg9H֐\s4̱%25VԪTD9lj@$=%10$uzJ}jr]ri,˷ԥͩkck<gK y*lg,s>~ڛQ ;nݜidZ2fo ]}`{/8gf  .G@cl!݂#YhO6GH@Ap3AQ;볝|w<uDz]lg]6?hhf`"WɿgCq)_z"oKճV;.܁p%-v?aWP Oedw8ի_y)re>L{TJb3Pȓm}z)S.\5Ǒ]wXN:.j7PF' 2k!V8n٣Nׯpg|Xn16i]/Y|{z7T*DCR67X:R"Ȭf;;;Y11{5 c8gΜ.^<?VgEFo<唯s=Ti#BZB(VOEH&s,\duwvoִU PS1`qc NYF%: vYN&& cZrP'8 BF|X9 Vڄe5-[ƩɍU,YKgY#jH^DP-:(GORJV38$eɒ%L(Gysd|eXICx}ǖyoÀn4)c=FdZ#Bϵ r]w'UhRFIꫯrJ # *Aju?R!>1&x.]OK+:`B'ZBU\ZMAdw [p494dT'j,HZ!tS ׅ(/QĀ[$"\,nXJp1z ̇Et1g qMo.#@2\&.SO?.(t䙺4Am1hJ#U쐘NVF0 ImaMM)I ,8G3IaX%ܰsѹZg}Ω~?-غ۶G{'1Hu<!`&%ž dA?c+?OE#t:gө|*K&ҹ\뮿/,\xmע)jN d!wΜzzz.R/>X8jzEt˿ӿqwOwwifS38[<^x!7ShY4 SG'MD,xtҍ La| =z!:w;( iM!ݙ=aݶB*%pv}l9M-z&HZSyo J82<#bqK='-*HTXbH: sK (roC;g4Nw w{$ 4HMlONl7h#bQ<5J&}[mP h?ܤZc(G~ֺlk=O&[q2ۚʶbSv,%ҹn2;A͵-tF &6sO2kqC@lɆT)nzN++tG [%~~Z! N6fF7iC@q%@n%VGEO)3eTrq Wּl^OH SL&Phc'y|ǝ]|<Ѓ?sy?~ޒP'\ȒsܼyVب_F$γ8.XȢF$B\9iӦưe"+_QGjS H(FO+%V>AgfQ>GK.O *WîӐ’\WW zp`*&Xi VK<,X`]J,/׬YXo#Z+&B]ZTB2Z,YHf)⦛nbE8c=裋/in``V8dd%wD.EU.;:YX ǴfLdHVœ3w6x >D]f.]J>D CO42;42GYKkx%ZgPQ/nS!Uls=7pIhZt[Bŋ_O$n'S ĥA [3?8H\'.*Q.$>x!ɟ $pa.`$@.4M qId"dEOE 0,2dœa22a|8œIE|D$IzŅ5^ƟɀNCD@H 4Lj1ъTƖ"DgIbT-™gғ6LQjS_Pnb,$pUW]9I.G7(w&H7F/]L.>LQ'AH$)FƐ9F>\22-Ҡ(1nOiɘ3[%[tp:1Acz0?W^I C@ 3k&#OR Bb$C.Od&7˭udL͐*35.f v:'@BOeJ ;ׂ|v믶?#k4An$׈`sT$ƽFRk@Zda $\Mt}pfѨp&1)Lݧ2h'j#qq #T;,őhɃCD)Ɍ$hOFiOǂ!2>\#1VN8I'|'}_;c[>\ AZyDHlC,GU צb4{"v34iMQQ Pl6RDlt =wyэk\TP3tO>%*g!/;TjrUQgzsѰNfTlN4H6 )C"wgjO@D|3gqe6zF%*4Z&U.;~jV3#ɫ 3D\bt78)03D,Ru&'sg5ǭA2CJd$BVH|W$5gPT۟OWɖ1T'8RO9, 0Lv;c4/ ׋ZO=eE?K|&b!7]5*uሯFUJ:ΘPHtR>gpe#X`F1Vv%G vsr)C;OBwsR>J3> ȔhPSLiF~ŊEA$?ik\wn%mZ: huBs 2,ޜ*4J\#kDC@|0gwwsŕN)Ow XQ'ъ$gIJ gbt".MK  B*!M媑?>x2ġ"\Q# DB1j”S|rߖ0*ܡ8Pi!茳CPy8br1&Ll,E`ĸNA2hׂA}63ј~e(H/n FjS:<}RuOfhtGo~s}5oW Z"bA+< =߾[~',q.[8>OxTDF1|L֭&MˎTFcfr!(tn)Tzqm'Ͽ}0C#>dX@@'?Z@As))GG2kxgNo\0;ޚm㙚o@;Ypi83:*(ibӊsPCB{VT`j솁ىBTv0;VZ?J.*T@}fz$]}<# < ح6αLS1YBB>3c\[*7ܷa.4ts&B:ՀO{PA`K~G Cq%T D6HsC0CnA2(9Y77]7poK+.7]v\x^t /> ./;k~1?+ȢVxPc#<A=ʌ]W

N@N1ēVZ:Pf-n_#]w݅8jOO>$lNk7Hzr?EJdh"dA,]"n4SO"vjQp!&eV\`jaRo's"_WZQB8B ⵖ\ 2 P v. $TiVٿ ^ i u ?@eB+\n1U'2jB$7J!%IDsGGhY A 7j1´E-~zڒ'AL`P;GWRb2\wIFE"&1a5'B}$I#a0F!֭& iu"AVi#ή $wEבRPġ w};;赊H#w%aq"p]iVD3T$>O)"FjnOj$>:=T#@COFhS3M0ºvu1RD'%.1`I"Ӏ+BEDPO舝aasOdNqPnIUu904ǑNRO)uGp]#Tad:Y+|CCsƇROB1EwSF|72!7, Op7=8 u-h+KTT4M3ciO5(EdEE2Qgpq)m"Z_S($8rɊ%se6L2Xt|ԇAșѦEP appvGTPTpфK2857ϩ۔$ 1NLnFy2D* iS #bnk>X=@)/jA>BsHyPRܡT;zȭj{M@;KU!9gghtolj*|O"`_M`E2KI{u=xjw1 IdV dwc G@[ҹ%n(5QA= Cnl0w X\syz tSptf 'bkD <$lko;Mf--C2ӖDoavw?i( \W%bMJ4DTcWvB.COjh!0lsH0,QE7mNOf~y4*j#ij0^T" +qBSWj(t_<_qd^ Tm&JG.H|Ϫ+8.rz; <PF!"gFZQ"gYD;S?/'t+78pgbsι;y䗏>X`O^{Fy^WBőֵC!m%,u*S /XI/WZ+b;,e!* W,X  B(/xrhNY@[*jAFcٙZG!J[(k*ibPNpN9⣆sW;19 *&Bp L) -ٝ"(ҩN-`Yhp$,8 G0iK)]y02*`]9{jܧ GEJh95D@72AE%|8shpC-|tȑS.|hM 'ƇwؿC\o8iZQCjJ:GrE-("@4*RDE|OyҥKy, &#eDG9DMpBBd$Z~i0#NCXtgB)yIqvѩn?+%JIauJpR&TDrD8}NuGHn(#F[Y)>8Qj7 ,"E"(zF"; FDM.P)8RD?k׮w|48GGP8'%bAEVjOeSQGܑB"7+N Uܔv]QV(t 樅8 "& UɇM*B" !OgᔣN@BY( :9a…RCE4AUg _fnn1}zˤISgvvvGg}=ڴjn6pG}3=wa\9VxН5kAw_oa_q.[*eeʆ^@Zs)t -$q@2ӝf 4'eV"ϚSh#;`71p(QV`MgZO1A_w.!3:Ι8|}xpTP6`]j^:>99m0bzA]en2>My.l\ TC"<˷x>@. l92h;f89Qd>)!H#VN5Y+3c|jj}>Aij¬dS_i6:H %'x" }ii`^:֫ĻG1*ÀeBeqt\vkOB9nf辸!;#ۂKowG;NkKʮz@&ר'*.A]]PvGREJG6ouaAz/_j^O6ˣˋ/. / .h$YrQΫY!pTx*mqBP*](.RB_= hU+XV:*ɧQU8e,#:53"O5YEr(]AtPDV :(av)r䆢>2 xCqWb| HǍZ(J;"w"gtWWBX"OQ"^#FBBY4tM+W݅UE5ZX "Q븩TA"]\4œaE!Fpd4 F2fɂ~뭷>d_>r؉"9b^-B)ŮdjTF*"8ILBМFtn~}w}K.އ~GPoa~gW^Z`oC09(uucWX8ETQp5V:bL9p&*)7jq$@'V(Da 8,Es>ALAą48ѠT(.i+BїsCFOupw9P( >,dBرȓZ(JO "7戮q@8EQ*ET`D:T U*t5ӔSq]wݍ7(&ZA/r?h1J3GWmk]' '-.l*{hӗP)v]/GhMc-IluI5 quQKn !Cg('#- :cW lMwsv;|s??>:+0Fn)la'X>&C@23tcg2ߎ^F.VGD \ U!.CzZ}zy:\4Dz-u)OOrs{1VhͨOM&*پ\b ~yHa?"PV(MО["۞xhq*-,9a^64tvD3٦fz9us*yt04\w`^#zbܼ=4Vz5VE3,t}J%ӸY9ew*V!v="%K:0+ڋVa#H@OW }6h*qЉ9̖"}/q)>"0D7b)!kQ$#mfj [n^H59`G(PF!boQ3 E-k'-a"oذ^1Nik%GPsUOU!""pT+5;rFyWR?i^}b)"T3G֨XLgm|)S'R eYY; E$1JrqE\:QLDU|YpY( ե TFRT]vtz rH;GN)Pj9OWyg8. :G9pCQ+R7.ő%Z8Tnʟ9;WqM@:3Y8ʇ]8j|L89 )Mq$][ "p8lujZ5Պ:bTG?*BwK qvEâN!]X,S+,2J.ECi-Gq+t(J}aTrԯ >s_|ڵk__}[`Rzਇ <֛7n܌[hS:@ځcQX]pERe'}D⚳ziE#T "5R #]Lh/ _9cm }L~ mmҍkv31"4'mߘ2L,'|Ud145t|3H;ck:-}l+>/7w/AG֧fr= Ou34<ch͠`tPJq̶G3k!x5tF,/%VSuUPzd>R ͑4EMgAIOǣ(e|0 Q$쓚Rg8hQGe?b6d^|ekZ`ʍSɡ uLfag7M[LhfF4Ӗj1_IϳwqD3lG~Q5p ܧ]rT褊?G|P ;Qu9#*UB`윪/j]aE@TEдB!(nz(>(uPThdqSjKSs%EW[tOOD,sH]]倎/UQXG/Uğ<(шAEtipr."]եsǑZԩOXtU)ǀtD.k_I:u}Dd_*] G}aQ" GJQ8J EeT+ G (XPuDSLt("ĺA_sRKTLt)":C"RAG ҝ$Н-!: q !){c[(CJu5r(-(5VňEM+rS+*.t(1bߋo\]7=tn['! xd)y0>ͳ``7Xx,܌J% d!t$ݖw֙g/zŵwxWvo?/G}BGЖx-iGuB;b58h5 b(H~oE6?WN@W)߂s}O͏7'5.35iP"0C  #c^M4v ]`+EfXTD=Έۣi,]'q󫃞OR3  u{z‡qDpbz!ZƸgnB <Ǡ?*n*! Pns#KF&}ęO9Nng<4k 4'4{H4VC4,j8p9_/8;7TEk~oS!8/40/1q^jЩ''li5Ί5#$C KxZ*KV>Z (E(PB %PB % ]۶mPBM&}tE.U'-]b^ b߉<̿*b ] ^0; l{[_z];>* ɿqg3-t/5n;H=Rh{4bH5ѝhKB~پQƕܱE~B3SS#fAvW T?Rq4˴O7G)ԑ_vR7ƂBhnf,+'*D϶2 ~w2M̈Zb~D4׀GpO5J:;Z{2y8̋vBzm`S!0k$Rd~Qet6|ٌ!8 Ɛh(=l|\j=`) K)dfsteH6O5j0ߵ4oszKnb=!@FT =lW$1#Cs?#퍥KG=̦4fVYɵ-k5\g}c o@{0`n=@{a58+f,_,\j.T(qB2"a,"A Fl~pH@;V7[CWE;4Off60$yg3.ߐ51M8%-=C@soH@? d"hEJ(J(ʘv;4 gN %=#cL@WCcu8‘5 h9 h*>r[~ȯ"]lt=wڹiv ; /??}TlKu=Xa\h׫h*d5D/gmCbzlYO*MdL̴h%SDϰwbdcƥv&k}JU,9.͹o|[U?6Q۔3 S'Z3/|r[>".h*a5_;bņ@TngPr PAs̾h4|tq[-*TA05A.X$oܠ̾`n} @"6$fs ?ƾ I0a~q~)?\2>%g'z/G ?nxC #,i۟dPBJ(J(2$6PI:=I.{(yAh vS P~j8MVt[Ӈ^w4Nk~іm~zεdf$tw sAluX:OPwP{cB@NVNWmyvzݯ75K̛9%A.Ў܂̾]hSڗ%ͯݜ=ijmeo7Yne;َX @@X=3Φ}>~,sMmϵOyyP'-VQn^j6^܏\Ĩ% XA\)1;DÜ8 [VF@ 2{M8-/NQBwv ÓMGhԄ#J(rFi:#6HO8 F "{M!QA6kKJ(J(5 PBٻ2vtinzD@1* 袥wvSWÁ{Ӽ6t%r]w6U@cΝfO{ctCG:חr3t"ߑR0+D. _=hHÇLmC:I^}DqY[SmrWQLyĔO}nq)wll~vU9d:8D3 :eڣքQ ݟx&|xDq.tDA4sf' "B U4YHPB %PB %P?bB eN1%AK,v"#D XÄc@,Hs‡\FE[?yuh=О$ѳ"cdNyO}im$)?(#9"8879P6=ǥ&t(pA ЁP ݱϱLW4{rЖgKc??{́_:_#[f YԳ@7tw|7%GN@WPh Txg'-lH h9xg`uoύJ)"ȻC('yL@v O@gdqr+1Q8`vio z,t*t9?t(&į#* %PB %PB e/V.;}vʘf\^xPG?ytn*DUv{4?9X\N@WZ{uhpZ7+A(ba7Hruҝa?»_na}WԼH [-Q0?w>.a~.g~ .f#h]21kPܨKVJ-1CzdfOK_'99G˷l͚Ǜ7\.*ѹ9XAa*>~n2>aXb6 \X\J4(a|WЕ`je,2Ɏو2ѹAg</tadړ}tk44vsg9C5*p4h;R7Eݱ^(>#ǞB_"awMXaTdӬ(7iν ͊{ Xhh""Msmmnv ? 3J0'eP`pH5 SMsP{8ep=o7{H@r +J]5Иpxjb5`/nQ$NCᙉGf=Ҽr YAh? BOz \_=s\|?x\.*j/^N4Xk0~P{>RRyq~P ~9HJ}-8=ohR_ ph':.oZ>{/xP2 `sF CT\juff5żlPun*rg}C;fhq[^pٹhcqNgv1cܪ:5qb }s"8'fyݻ##11@1fxȵSGowB¼l(n.!==y(7vmAuml`XrD,-&T 0q`(n1 X@4@XcktOПOƙjA ~۶w}J(J(J(J(Xª6o;nܴi[o~ek(еLC d~:gAB_"f% }NOQM6Ί{.77/tdQ>gf%$#9i#KX :vՀS E}{Ot3dgO6ץZbfKAy}DcGݬc䴀p QccyF%*#h.Vi,2绲L]FM|k΃SL"h-2ˆvDsUm4r1gs}Qt IaczUsufOC=mkؗ?__mqU#}07􄹉j:ivyc7g sIWA2T)r0[p(|䄪0?W t*` lAG."5q~j*Hׂ! CB41Ƅ;:9an|¬?lJ(J(J(J(pR˶M\*' 8zg<ͳs9ʊ?`!ҦR҅>Y%H-VLyV41oevMѼa eEyMԸ wo/D7f}gaQDPQAP1 nFP 4FLs[{{AC>SN{['+ES!.Z{ Dp-ԳX $=WËӥ{xkV}׼;3,{.yJtth 90h,njl=<vr;,[s!/8ܱIψ?y0#0#$єh2]rBğ֕t+]JWҕt+]M?Fs| hsc:zU"WI6eW 9D"$>Mѳ<][WJ+RG9ŕښM@k9;B8 RB9S>(_?ٙWs))Sz[)_*/vvHW:ؐy#Po@%ZwXf;;E|e@mP*"A8 [@"⸣&&GUf>1 )ktF;CQw.8Sn#=쐪:ڮf'Qu4]sLGF˭> Y=;GUM;!Wis suwƅ?"@3J!ԧ2V$Ha& d}jήy'!n: cҤFoci/kK@w+]JWҕt+]JW/}n. pеIPh D4$ngG Dsx|"Z{t"w*+S%): 9UXʯ rulӳ/|١ܛ;ARg:]sWZP h?]:01lV̷,toyNpl8{ Y+]N!6Tu04Գ`hިp84BH@> dˏ+M;j9 ;0\0FDΤ#9LQshڜ@ ;"A4wB<$ǘզgGisفL2޹G@gJ6'<㡠v?J=}ED@w+]JWҕt+]JWXy譠o?]^O"_lġ{v$N7<< ϥpWY[q^VVa: }peʟ}rlN!AYDH hp&bՅk^zk{r +ؓ?6?ppгS87`uwvpvIjghPvH:gA= =E 뜍ʞg!^_#tWgn'AKKtH=Vtah|蹛dkzIYhG@IVF_{K\۲c J=!8v}6}xyt;}Hz8/qD",da*WK"cp>S/n|O NF%rw6dN 6HQ ͵?![_k';uҒMEө]fȒE  AcX?wY]+]JWҕt+]JW\tGp#[xJ@SnK@\Ǝ!F(oVa ]bGLJALA l 8η„Iyfӑ[sD#q\JkUd.ˁ8 =9g/,L;H֥?2flY4 *y Uypd_L9/߾;kޠ)2mSX-+q乴rAyXtkZ~)D;9]sxTe;gL@7L=F;# LE=fSٵzTm4?\s[af쭕Zk5c4HgTОήe)M!SaGǜciマC#0sD#fqN`aY45-D#eQb]^S 7{£lѬHPBi;'$):&7@ eS @PI9F~VpGpeE@NV?K@w+]JWҕt+]JWR_@@#Byg:Ch% q`Lܑ<71l`T'!:+R΢.w Yc?;9DZK3Ȫ:|dt0wLS9Αzr<)\YlZ$C6H;<!%㥁)]:ȓ/Y@_^)rs$gŠTyeug;GlCPTS\쎋Y獝S 1 =,UGz+cѼ<k]\S"Qgl2)G'_6h\s{DsD4ϕ͟͞[I䇂D1g!W_wt6YH1D7mDvӳ10 Za r- vH"xУSFXb\s1o?*#]+]JWҕt+]JW#;@@?wk]> `)\mrt2DtΉ[; Msyם>5$RU9?ٹ:][2wl`Ys,ln諮-ݡiO1q1| a,䑍h.|xw;|}1q5S ;vsmFq:]e>;[c =2 {Q\HʷCMLwc4Tz> d[(q 9@3_utp/HwഹSS}ܢ{Qc+nL!;K@gm1> G|Q\C~`rDۊl ir2[}ӻtWҕt+]JWҕt/DvN!t6%&PN 0ӟs' F@و-:Y R";Й>m*ltyE[t$ut`\;IEBhVf\_2sՕ)yÎ,P%L+Kj)AI@P N\s'+ 3nohFOѡ2UX-(z6ٙ3Vv[qL{+À=kC/7e쭛cUʣB4.;Ό-]\HǃˍfZh&;a409ps26 z! HOus'[ntV7gsr NgrOp[X>hָӀJnEtr 0oA4;l!z CِؐiEccֻT6xɥ]+]JWҕt+]JW!;F@%H>tt>3,mTخ3 ` Գ0_:$Cdq+0xۃ4AOEdžv[׿db^Tf`#zD. DUSA=(k}z `B@烫m(HǴrt^̿ 9Ȅ3A4,$tyU  +ۢ)Xv;w8:5hmD>\|A2! `Ipp<(vE-7)[g+߼]JWҕt+]JWҕߖ6?_׮w ֊t4OSyGAPB's\2F@$g!A:hsjG D{+ 9/),0.xH53Jd-6|BO[D>" !lH1Nh< G@,Â;ǹxg-pԳ;u8 Uwnf:Rti$b+t515B٨*!L-i8"3ʜ@dІ-h-\r3Z9o}d*"<%ҕt+]JWҕt+2zٞ[k. CkٺI̙g ,49btxFH@[cb4Ά8wТ[=> mA@ G"׆<+X 3s6w_ųϥU萎0!t睅Ty$6ynEeף֙5,09⠳lhO蛁"eDb $,;s+f%Õv`ѣuQZBʴ93.7S1:wd#74#fANYO'R-s } /h1a32(Ru*S]+]JWҕt+]JW"'w{Jr}Q(769D6;dSVlh"dCf4NQu Գ`Gs2 ) -B[z.s.?yydBYX 4b$Y[t3Rz˝"U]~gBzdG"PY^-$§JkH#Э`xfeЉz}~ꀐ_.GۢwUHR̗ Ѯrf5p1̈́3^Nf e-h:yv6v rUuP_R0І ̸Byz'#8g@w+]JWҕt+]JWdGC*3t)@-mA'>T Nzxw5wNHRҲNVEk64qGoMDor=D@h|',osB= E"&dżؙ4;aACsT+EIyV t6(w6X^iD@'›<' ;g;BXf7{ӎ!?Ah$zu?:A1_Zmśr #{3p{$sC$v \ MC"xTh|Kّ_V `St>u>]+]JWҕt+]JW!'=r@@ ӹlLu\h.>C!""[~0 -;V4І~yhO@gJ"$CaہBҊ$ܗ;D[H!{jY+ 3z0'䑷Nh6X `B_.\sJ7a ;U:tFtyQϲtBZ%  #ʨ_m2_- :?X#Ƅsع- ܶ S=ۅ uz{HPw_W\a\T_+!Ύh Mhw >!!hɬӢtmmtWҕt+]JWҕt/Gv,9?ۘz.Ay̟t s1= leA{:[nlx hCo#.vkGlxD8c}1"ҹ?s"K}nP dצkS J Hyxݜ§Dt'(HlA{DY(7 #X,`v `Ga#BfDOnIt_"E2nYHTn%FT/IoCs S'i,ktX(NRmFܮ+E1M,֧]ʎ cU# }~924ݙDy 軿~CH@osLD$D@(U B5B#I=;zt>{g3Ɯ+Yi՚tiuՙÙRj!kh1Y$N f'VVf-Z!eFo"=LwAϖFRN٨ jkUV[ώz+u"l5}h6W"HHcIБsknEou͂ښ V#h/3 i  ,#(HsuΎ}1 t_t3|)A3ե[ CEFoݱIr٣/tG6S)OFC$x9`:W_c[,eXltdu!3 ȗ\ ٱ:4>_'[!{?\fl-ܘm&Rg!7"G!& ޒ3YO@kOy h ˈu(a=kg r%Y[G]\S>jRa۪垗(z[)uO+CW+] Nx֣OOoWvk tCnʭCdQ%MC|\BUAnuUU_ I0n%"$Ga`PDuġ+;;E,9^ ! A4]!cۣ<QKZ65]n|p3`=B5E.u}$KG}s-8#2yNA F.'xgh -a' y4$chbyNnE8'5vH\)YXw!AbTuǣc =غ=U%}ﭞiUOFGps_q*SG]D@*cr9D:q;DdWTj\jD@ }5 jD`:9: QqWl'sSSف EhIgCo}>zcy>4+/ޔw&ӲvMSF4E-ӿ0D+ m48qżrn+|"l" υbƢ8h3ں{' V,)p6\iUvl|2SD+QPܺWAn<[2A\zjXDaI|QȂܹT*ɟ ߮\qTO~GЅts D;=?PZ Sq܈S[D8*|p?EڐFnl)ks(#[gJB1š^!u'§]1Q3P"-G(ҕHṰ]%x hTlCv¸0\}$'2zgrߩ4HpܲHΆWLZxg" h~Tvp󄣧N@t|(pD_6~;Z!]&Y'4P! Nt1F:Ýݼ rijEՎqǫ#VzDʨ}=Q%FyL]FSj#hq[Xiع8ÝS1g1],-^ Qg h]nrF;89]꫐TfZuw p"v;7#r!#/o3NɈNXKݐZ/dCPZo]\!?npCF&޹4I=G@| MmQD0C./޹(==~cf u`/ n<[Z;Qr/ESKh7[J՞u<4HPIH%U]\#j^D| QI,/螇5Ǯ<"76'2#LjtmM_udŮ暮p_#DL;:Nz5[- jܙ( z}55}9kqA̜QWmPف4d~tz`qTT_I6$<i t1_-2Mfy 6sN I: 9}l y}gٙ?;zpfcc C/ Tv !šDx)Zaπ~/5pB>E;#O]} ZJvZqۮz&J"4wL)(MywDOVhnV!@ yp]y }g;gi1\H'% $=$zHT;|\#ǁn>\- o#*eWu=NRFP8,GT=nvrQD,7-)>NvwndPl޼&wh@[.-[wqv!R _rʚ5kШi/'t;sxxYBc>)OBjʔoUVivB8k"$"VR"VQw׿c%<%) o[)($G\ΪoBmW\@SowCNa~_|J_Gs/Z]1aՀ?7شiӆ h.%!`*bWcGln'>H=q C$zYu*6:K£?1ȚG?>J*`n+o(%!=j!C:dibyN!3Ѷp GV( ِ Mg `E'ڌSŕ\A6r\bK/ B@"EoϽ裐^P]S]³<&)\kVZ¤BDN2kis7<[P\OEm &j}VFsQ)^H:7Pu  ١EsfS禛YLt}1Z2 .VZ·P`&׉ЌZg4GfB{Kg ign( nIdwt3ԥ{wm0O:+D"!,@H:H`gVRW-jo|cب}(vѿ#6EA+K./}i+"ЕYTcp _|^.b52()Ƿ\.Xt!֏/N=rD zţ;su'+u\wvȭ޺^{EY>Q~F*b=rP ]ߞwy|y坋lذӟw󝣎:ʿeժUozӛ~_K_҂ n`D"Js=ϳ,X,4g?pf,.첧?d~p N?>^^? }'Jx;|2;s MIG?qQ>Q###lьSteĆ?Z'/xEs^X#Q( oO}SZ=Q~_*l{{{u{~;<9N"YC-܅Z|uБsL*1Eqg826!]PHWt$tssH@JQjG=F@2gKk2%}0nI*z69S'']#FVxq)4) +zK)Jg mࢴBt2(N7#UX՗_?O3tiu_!:)y@@] gK(/ZLMڂpYξG2|}R=훩t5I@VFJ sTx/8KڱؔYRc 89?K [S  Ly[OpcmXPw2k8'Ndg* wG; G40Bf`:;᳻ J6;|g@vp&3^hH` <zѰ!eG f(~2:%؊1b (U3TV$m( G"?E"pSG,j m.cBfwj8䓞ˮ&sd2Z+H<Ͽxujjj]vѣ>u(nBڮ0c8~0!߿u'=I*==R0C%>*4P䙨okH|37[$[]<%rsX&s>3TE!*m[u|H{EǓO| F9mb黴|]?ts1o(@x5I4B{GrXF1g?-[moQ'x m?"YE|T'\VPz쪫ڴi;N5u]^qa64ښ4_mۭeF0ڮ&$|^xFҮV|܈cֈ@TG/ѭ]üB]尦Эh-:v5T*%K?>=V22K4Q>&mup𨣎ROI^Ӌ4#njVP|$,??o=@Y(${_Q ~8wSOd^5sSe*DE>TQ1MI*QDfN:I\l74'<#4M]C9R͛7r)2 ~cCнU>FiY#&rlO@zg 0t8'PE(՚|_9hM)O̹ ZgT5r :Wv;ic)pƧ3F#kY ć !݄tmdrrgkaRW3rX6ѫ}_1t6 }U82γ[1Li=mFqBF9>E$Bs׈tlա:SC֑TeL>C!k1Oj8h6_6ȧ\{[{ˮ4xq3svDsҮnC:7'vZKN.M>זZq>GH[&ُnL6RkAH n=c,:76F!s6 y-tzp:^ .9s`62-ې ;+#lh"yA"b<;EڢPHdĢ- (_3X܁*Yg'?륗~=͒[nYti^xԣ֮]}OK,1q F' (aHA> \`&-F@bIw՞ L(MꩢCQ.B5[ #V0}pk]@H&GajVT7>x`8(I$%TUpٱw2 ?!jG\KnM'Ix c p5Q&a\EqY͕PȬy{^F.'?<PjA(!n$ m"_/zыH/~,0 IF O\Qw###333_җZFrXRUx|{/ ?nK\axDMԺUvm7vAYt%E#Q0|p( WXK+bt+Gx%<иí[,G||E5rs%I׼5dɒ.&O5jLDGvUzo'RP{F)Q[=[ S q *`r( L#X0VYvQCO|Ue˖F)(ͣ=q >|ߵ=gTZ`LP*!"<úX&*n :(exS٭? 򲗽LuÇ/N;GtZG$b %QOHNDŽGя~t)\#IgL2*ӟT Y? O8"ߠJ oU*ɍx!1E8DE0 G#}(0>4BjЭ›|UeSJ=ܳ{7lؠ JU>=JdapKa! %h*Q|,B^R*2Q-2xۮVek(j:$QS D<0Ss .#]-0v+9+"y# k8͒㦛n‡M, 5,S>UDn)E!UF Sd|pp0_?__=5yzk֬ٺu׿u3pr H@ͯ{n+ lf![gh`r$agk`'p0ƹLt%S#nD0C57ώg#Ğ=t)AI գ<Ñd=UVk:2b6$ﭮ(z--yh@ gъD!AE"zA_enp!S-,ZW\2Cc瘀v8۸N"$,x'ALgB#t^f{gquqtD=j!xà[!\s[4;fOfD0fyXe~hQH l@^ZfiO{_8=jffF?qk1Gb3|ڟ˗Dmx*Jۧy{~o v!NH5/!"$/Ń!1(쭪GQ'!BIAk>묳ZGi4q)w(i~ߑO򴔑=Us.Qx 7Bo\s̶m۾oɧSJ%ax+{N:I>X"^r%"'\~уfQRg{ oFFF)QR\򔄹,0Dn||eG=я~)<{IXYR d(rQy䖣$vY@K*.F];[AB*̥^|gvWI ryIKT;GH}{V*=)O1_}m`E7#߸v|[G'2K$: d*af%4rn(E$BĴ[w'KCHt@ !R\! +"$d'J;#U-;@@gSU°L=l2HrgS8O-)x;A: #=v&OW ˸TL:hat}MeBbzvSc4c LRvM6Rw';wuuGFdәھdOu`:0`8~#v ڟ!站@{gs 3|6ApCm *yMgb!D? D"h!|ghBa|[,nܢ-Bz:;Nv 3>;75K^0g]s5xj5yx;-Arws97o^fַk~ac\~_~m###]MO̓\ƍY*۴i)vi:ZZ;{;0W޲e駟~m\`# ;Xir-TGyld}&g>CxQG}#1Qr?Lʤ~׾lho| ?AH⤓N"0h}f!:%![oO,r^pGy>D/Rv )?iO0G+h>[(? "OJ|>QxbԎ:o V( 0&szw֓6 *+adB5-9͈WMNG>$Bt;o~ԛrec*<6'h(E]g< @k 2 sOD n٘0Ԃ Gtn<]NOTπb x7HjV_PE?z@ [em5!/y13#< `=kᄐDtHPh)nЏ~we6<";OnJCQU5``(}fXQ}ĕ( dN42FcjJxuMҩ2&dDj1Ҋ+xL#G U )0-~҆Ze"ԋ(Y)?g ҉78!CN Y`~c>Wi5_#q OBaKxEwLMOI Ee!$a>ځWd(Gy!$Da_Wk X*Mh2u{꡸C@LμbEmEQICx ?3? Wѹ>죿99ʞ)q\q OCSs'Wdd\pgV L n`3Tg-zd4pr+zk=1ߜr,MvԳ`3gnaC$ݑ fl0 dWll{:)r|!:܄DЊ9lo[Љh.,>-I8ƙ1pKvh# tn`zZ+- :?K:nf> ^$6{\m5N䗰aw9%>ώ|?B h?lFǽ/5M=vRZ{A]Dʰ;z ^D$cFY[_YGXH ,X|֪',XQQz+_U/r׳ɝ*j5y/&Y+{⦅X,*59yuW _?$L^qoo/?c؀կ}wYs(wՋm _BI\b?x\ٓBIP*Z@!ώR6( ɖE!}2Q ڿo;ڻ}I+'B?g?GA^tţM&Կ˿XH7B!?OR% f hcжd7HVr}Ü45mb(z}}}l}mPxf<Qxs I U9v]3*6ZBz|ܷvGBO}e3eE^A Jur-Lő/p('3S -L0__h_\dLa4oLJYTv&XTיgIFD+nS/}KN(5=Bxܨ#\rf´$駟l2& :Rs'j|ߵ$dMzy}_UP=w7~#-"̼_?K/#:+~;c:HJL)B֮]h"f!kdzp8clu%#F1wb{7Zw'SV{Ŵ^i%+馛x0Ψu4=b3rUW~wlVB jL(ZQ`2"_)! #zG*y%GT~^ )2e}" wy'st g}lܸQYpEmM Y> 4#̇:/HW3D'j()+fơ i6+V D_,rh@K|+DAhw<)P-+c-гLtbtWzvrpE'_Mt%e(6uIFH4 g;###67,}WKs˖-fX@?gJ0+%&dq-4ABF^:^U񏣥ZG!4)dv%M5Vc!qR(su]%7{A~..T-;u#³TLyHʓ }7 ӦҼ{Cc1H ֔J5ktn%M G/Dz_oʕ+ O|V"/KA­޹3,SSA5}Wo>-'wb9arLvj&}s+B΃vhfgSmB1 x{s[/lyM:VS { #}te<I`1[vKUה{فoVfjum9zس!e#B<ӴOdml[g*@\_œD"I쬛[hb!Uw zO>ma 4諺!M6˺9).yξ㪻mJO֥{P&fCo͙<==vԳ{99#Lgݜ?9>@1܉@mDswD/U@G%#5>knEfNL@B 3T"I1 5vёv41׹_ !C %-8:g]F@gg@@?4W:Yb^,78ڊkW[D%NԘ#k~b/P,d)MWbD@S[н,VN?tʶ&{ޠ%%_äxfMVPeC!?V??^yꩧjwG 6hȣ_Q!lԈF`ˤơaRd|0KIdg³n:g͂3>?yoWU>[#6itugmanqHW\ag@ԞJqt6l(0-oabkВEd#djXl8Q[*$ .BdiCT6 "6 Aoof|sַE c / ,JĹzwJ 9Ft25]U_ffxv;u%& C1PŸRDhRQ_'Lz׻|n+P;իihBD }f41R*f(-%/] ̈{_LHa ,sh 6l_qR qĮatP0c MUy…  rlSC AP]3E[2}aIp Riœ&5.ᖷH2""4|ަ;ZեgB@CZ6#vB"yF`^1L8~;Y ȸ0?p]@jPmx2AY“ff@y]J=Pa1oY$5Z$G6 Ln ;,xHìNx107SR`T~6%j|aYuҗG}o~C1)eT֩k4d105>O5Y4P~gx1o?|XQˆ]cNc.U`<k3PE6@dsffFK&~Ud&ePIGJs1FJ2'47hG}3 cG[jD5rerC]^h[Y~0*GRM)A&:-{&LUb '&&xU&W&ʠĹ)鎥-Q`3AW Rf\ų4N8v`u-.c@`8kU P-Oͽ4#KZ,"X##˺:Fo29d|qӦMx U2eްE5; VI$Zsf0)""*F>p F4!t> s!;9"[&d_y0[OU&oHƆp'EVfAaծ=aPm h0BɱƆd)WecE3塵p;B+lq_ L!B pOUg-{1_YI3qʝÆu^eЕKw6&pǾǖmؕOe֦-NyD>_M37#5ޅ`;LcЙ$fr Q1ZgwXŁRろ_N8)?bzHRZ;X[fwn0Bn> =ݜ[r"~ۘ*A>+@ |XQв,kf5 b4D^L\ MSTV"zhNI.k_Z6.جHFMCغ&\8%Hhh#mIlXvC**߯m%;g&;vA}sʚ%Rp n;DO&=ms7MŸIFh ɨ᥏(%ʼYU2aeN9 Srr '<+M g>#:{  xai^/qFE|_,OQŇ) oxҧYE(rWy `i6mkah;#ɇLmz[e; @0ئ2V0AEfs *0B{S%na f5I9JG(. ,)~VZ?2I!a'#]o:OI~:V8Vx_/ Tz`]]j䮵 Χ6fls&;1Ch4!@Ys} B/n?jcCvp,Ǝ}K QsoY`iB4G@' X=Yn܂-Z\xH+J -C ِfH3oq6C[x~^v:=²M[ex VN, WV9fF <'H[XW`_YSfg{lmEVN䎏Egي r99i[zܲ S>&&&;fU%r8x:2::hXԦ#Ђ/XC֭[màH̍fd#dF,4("Ih4f/7>ڠ*5]}+Rl4{Z*r+E4]>Rg+;%F=I͋kA@jkG}_WK6]R]v$N"'>)W+ WNUcRIHy Qc+rdǸG ?IA묳Syy K(3zbDw:ȧiP|ꫯ'322ĥtM4Ѽzנ(-)%\qXEU9zGyRcƔ1֌ &w}QcU6+`&Bt-[FZ[W э7>{j#LZ`01jaٯ۶m|BoR[6 m hJ=(l٢D7xu%ba rd/[Q~`{_lg6# ?C^Z?9#6! F|x hD4U^Qȭ&[k KmTഡȴ:%F4nʌ\XMB6n=BɜuZ@P]>c g}CZ` SfusP yKQ#z"OJl-׿̴֌)q/FL3|c򃥸- 1eR-+ Ot&;aC/PHi UkrMYaRRxɖڙΫFX0+ .ʊ$*I'd kª̖joS݁a%\H|45Q a֭g|3qv& ƟN {J#:f'GpP3:;ܵt=t}:&*y 裐^O&*t+'sldͭ쭍/ ;v6hѤ6pȋn"uf9tf;GH F=3c[.G \wsD.pkĴC|F֝JHX=ǖΎ!茬?QvF8'n6&#幡4Lv-԰GQ /m.vltEEq-xHpr$a!쵢DS;[@z[6Ǯ c-jUk?^K1^le"xʓ%6_Lh飔=\[U%jX-=[YlufxbVQ,J|||\,}++RhOYU,BP6+*#A@lRX$op,<@ea8ٮ"Y1tlΩ Kj-tY؉l$Vf5) _r"m_^8\Wub󩢚9e=; p˺S.yq}(CT䪫rƏ$rR0iamTԔlT.M((-lVmVZ/~'o)䥝^͂ȚuOFZFM\m522bfP^QʠZ@l9ht{E0ICm aԠ@! qtC;ҡ"`8$ڇXGq>tg)tCB_LLLXIvDb9Q0v/cMjgԔHg:#I >h5F+0MP.aOk=NiAQfr$F_XI<` ;;aTS`O%x3%R+W&s,a!k!G"_oh2Q#|lChgoY@ӕfI Yd&kن#b14Ǧ̠R-e'vH h^8kB2c0^# PZׄ Txrݪx(׽{@|-xgW fʆP"o(%1(OwzzZ.#ю\xMhK^{Rxԧv ? ^ۍwnu4TF4!{!$cr'=꘨Z G>B׳Acw_&FQvK˖^j4G35D5UT N8ʊȦ38CUs b0h& B8N8A +debEB(/$:Yaz7ͥ'$A>)CaC;kF)pa1XӘ򖷘Bz AtgV,XۨGT`]封AųX lF ks m3OCi )?{w{6 ż]ȀQT#Ŝs Щ9D3 E:#ڹe:]ώwvX;掀͜7zZ|Z w PnH'`u4&S͖Ʋ4r,zv΁и]'JGdMfjFɞeQɭ9g1;{Kd6فt_}&=ܑnN Urdlr]&S\m^}rxZ9@ѥ m)CKۃ; >n9c(P̳h[%ή,:xzKypsɳ%\Kי~0Y%_^L=Xc8m'{'ajkŢ [".~߰5 8D(r+Z65#JXx(-KLXbnڴ>fF4!$h+om2YɱL$M6fM(|ŋsOd+)Trضū+anl#u/dD,)Z֩b"fs LhO9mWu!e@H?{%= ?x[dEʕ5[GsZ?(}6{m4R!#.]wź\>?EMS#>K$$ ų {iNL^pSG18cK@=\F*+F{ihѢE/|!}2s! %TXᡐ*kU/=3*緿-Ŗټ]ZI Rݒ;R>].  wMŶ.bw-Zl٩f'2OD,"ld#-P(P@*K_Co|rawF{c+|{[6߶hdJקfDB}'eC^җCDc 1#Ǧ 7 ڍ0=h&EHS`Nf kT3 Za0XtiؤF@3xE@\皢ٱ *Ą(jF+lCPu= oZHC&I(.BLbs8Tof4dwgb?/5Rki(ٷWi~_4 >;~`S#A@t,kcZc'S'h傃`<>nҕcB0 9<<,OT&Ӱztuי9$ 4L,%x3?45`N85iEyP0S/*md+}$'{3|.t6oLw]8 /ꇏRfb6?Xt F*5Eҧ) ^fKJE'2:x?hN abd+R,==cM)79 a.)!ZlJdq1f H7%ٛ5M691wØtmPCˋ(c#-<&8f#WV!\|ŶٰaVZh0s$v#v(UoHȓ,bvJ+[3K.|Ų“ HVG!#[:FzֳF1 bY}eaJ^FY7o*lZ*@NX-7*0Gꭷފ>j.ܢo*rnk6uR!5?^hwoLZ?hէ)>ul?e?6ᶫ'tUv\lG~RIDATFKFv;+XL9aZ :-[ 1y Fe>Zŵ^+]#JJg6{xJzBxL{N,R ]X7T?fMfXTF?1>IjEH@/C(:k5\Ɂ|4eVHV?m2E˓\%\ұ0E@իWUj~I JyRX/wH15b" *H!/^gx+A~ۙRgTcq,‹ҊM2q1=^VW%$SOMLC,Ov6vL5/M98_d3GO}SQE[hf?zSp *+ [!S m5{g^JŭŤg4+[Z=zާőPF@3ٟBHYqp}oo])0Y@mHh "OK$1('ʖBAU}j,ҌgI{_B]t &e$TMMdZ|Q;v "KG4Tyf$c i*>07ɓJckhԃX! gzP lCK)ӂ(h zCK Z63#WS vaZ`K(ɛffj$̺Lp| !dpƏXYh٩gA@עcg@@ P6`-eG:r\eX6YX[\qULCvxbTE.W"bhi ֧f]DtsŇzOgopq}3_~ٕb|6#CY=kAN:$V/r~2+W`^.-.#Y!x[kkab=!šE'< >lu. h՞1;_n_Wf–`MZ Z)N00TG.-ɆS-fl#<(vxSa.AۍFɈ%+V驶8֕\lB7 Ev> hcp1eѕZaVF~k@t@)AMͬK~ǭʈn%7|JB#zJ NRCY$>ֻ袋 `8!ZTU P]~Ea{c+L((]4QT f/}KA\ %KИV*o_ڈZ]S64ӟtKmK':/~sαߖAxɓ|[-A 0{˓WNT~"#dgf,A~^{WDaS’Fz hRCjվF1,M v(kJ'$zEW\q'?v` 8LB^Z/,mEzS, ? -UiO^+X,ōزZWҵ^kswtj «xUsū$<ʢF-o!M#_9a`6Ne0JH4Q#{A=aIMaa[&RrIJr",?Q6#A EЙy6GH(lhwF mg7#3F"WR剾8heglD8T&r5d"]vD4 k; [g$TTrk6Ķr9SܹX6C wF:quׇ*ggH c7TY+rush1;# {ݩ&ST s;zK@|Ÿa]iµVEݰ%V 6isnp}qhz|Lg4QBD@'qg> h;; rw@nvT/[L:va)t @J[4%J /9$< VNPBG-Z #$m -7͇CzaP@Ң[D@;XT_|,4›x[b6~-e`a+~vYBRfJa:{ PqYR}u}Xxͺ=,=>SNB2y/fϩbX6b|XyۺPB96HZ } OzZqpel-3ms"a9ȊMޗll@ ]}ڢoF al6Ѭf%va)C=]vqu)SN3*aǮme wWXdKX@"2bm^#Vw3'() oStX?i25be^"Q)> ݶz׿fON:$ l[o& + 72@c*b0]TO|"Ky%ttdZkEs(lV1eCj4ު$^𨙴9!:PNm2U ƶD fuNc(ؙ'fGvi턩ötL$V]$T]%),R n~<ƲT gs.O7IU muZ;s *"G]#8U;&_~Cv=„4=RovV*6k#m+8-[D9%}{A|NJl|k}/*ZBHUhanJ|[̮/[H.\?ԗiu ! ƤiFzv?A$B N_>4kb= hn#XxD6E(5t$԰eJ'NDaЪ Z1"’BV~@`)[>hi0X "4U0|V#7E`Jţ:G'P Y@Sf5Qp׾VQ* `23IOԠEC ̬[g@}݇z,%|;5;VA%h"[A}_7!eC:(~)Tx:3i72sp+/#R|; 5֪ܥ`X]tCOӑE,ޖ za0(xK#~CVdYBTk?=2Of:r1Mь>A1oq'RDڨt  X)7W26`A1BkES@bA~Wj:yfWyw+ FFF4K֕*Zb¬kCP`&&.XIOD"fMhJ[*LT s$Z ϶Ikmj9 i ~h ֶZx;Z絮m iZ(oad<گђk֬1 N4cЄ߰a( ^" R[ɓ2P:CI2#8/ lJp= ;Vώt#cCKDžOv{}nK@tN%#d+2 rwoq,Uٕ'co !G& `w`E,hM-"*f*ʩKY4WiՑj+pu=q:hʈ}L [:7(@16XVym|Α:ZCi% 6!ZYgZE@w>^ytA8ڊrЄ/5DG/ЁTgrᇋa4a` 6ڥCs}^'1ˑ˗k/ 6<#fm۶N6)ɢp-߅NV")Wꓯrbgh$moLh TV+3o2l#mɲUʕ+re3U&UkBv -S ]xᅑ߾?_`m޴ia –Fz.a{o~k1u=cڅhWK_R) fLqIGkVkjŕ hzV7mM2Zm&&mF B]ޙaWËP Ք=>e-nv ;Wշ-APHؤT~AC[-F]ؑO}@Omn4P0bBk O.tW򤴢#oz ZM^{e( F6=PUVɓXlle/"Sl|VA˻ᄏ6|eSg@8shO?DҪ-.L: i?Eͪ5[@klIGM! s9GqIL#D^ۄԭ<ꊚT/VA I/|ƓqgFi@3f{ͪqٲec\]OsmxR׾V1u?B SNQ~0?* ZXT~gRdh2"͛7KH Azkd )AAןUtwm|Ov|cc,CU#vl =Xy21:M<:vˋONS0S<9_x@_J*h AG$N~šZ5LC=^ @:,͓\4N8e ƾж6x<@6!DK7 *eKhrBw"f[,<7"b"0jbbvѷ #ˌЗ|cc~ DX.m2dh &v8/^^I&;711uγJ] ;B+ bn9I"+Eگn fkB* S4Y<A4~@4Ҋ.3ġȖ-[4Ȍߙw) f-N6k!,g)8+ kZgG0=\FT f{Af-m~N#aV^lFw'"yAm!Oy򦓨D⏌Oh~NE{QZej/)Ѧ\r^8e9 [?$N?PW_}~Gؚ:s2ofK,o_E￟j y;ޡ6XH@N G?R$m$mk3d'vs-SV9B~Q} R,>;)NRv6STd;D;'@ vXW^h#S>gkˋ61ajU}N?t;ٱ\""}m|֎wj#B捅efHħ)ڃK8ѯXnPվ (^SYPrұe/&"^E[GdwA"+_}?l`OD«x"F@$QIiVAlEBo;jZ'ekVK/}KEJEޠpo?~#mkMG.R~vSdv/*CFfgN#zի?Mj6Ÿ馛37 |%5<)\H$HD3/jdQOdȿ-o!G?jXjlhXBeZ[{ hUMGOp\ޞ[|GFr~` .TfKݙX):2H'GEeo~M{%4C${s/|~7=ܟ#v.e҄&|; SiI??QS>;}m?>mHFR1O9Gӟ^O N8᳟,s~b0 CHY&IdLtRy <)tz+o۶V%m&M@JJFUQj[O~Rl@t7ވ Q)S}Rjz嗣N$+@0SAzSpɒ%W]u}ݧB[ 1DUP-/') a>^PZy#h&.0) pnh5P[~Lx҆~Pwyf<|ƈfV&S1,R}ϼ8 J%ɑי~&#7=b?c  D400|E]G\&m `qGSzٛZВ5@-ϫ|J %CE# ^7 gMsI'=P(~ 3PxOۇ7;MT)=aeb,t<'乇7 ~+:&κAOxm! hsD&M 3γ<8Qs#S˅9N0pi<;g4` X`CHxbwN=ޙƳ֤Kkr eH✪::U-v X{5aDMEJЙ..;J8|j1CO`ɡ%Z48Bə!R^ЮR_bŘUWL7a^~z;:,veF,8ƊמR8X۱"4}o#[%fDC+`*#/GbO-xC򕯤foU:_Oڍ7k"TH1"|[yy:$Eeu”) !A^ ̻@3S?яdP &Aϐl,Gbؒ;fNV>L#T\i+|$KQ3oIJL(6pD~y&jUe<=wLh)E;&eEAϧePj!u"8xǝfY#* WO}jb+R?Dz !SRD5e^e>+y2b}ckB&pBҞ,4i0#| Cx5:j >jXivM &\_{Hh,:B¬Ŕ%C |k3SXd+.LqfBFQhtyF,eeˋwZ/xUW]EZH + 5$t y1-&\D@3yuuQ%Y{.df#Sk88vdSڟ蔐?o)J55`B,wߍhe?яj~w~3 h.=Jo|_a̲i]3NYM0Э~¨uC0L-/ax+,@.Ą|t%3/И/{)bHT0$iDs|}!ȬL̂ xgwmPJMPs:?dk? :|!hN ]v;CiL_)Lqӟǁjps: &:ʣ`HUFڲ HoisW* 9XN"a!D>L+hI”Gȴl/{^/=6A1o5=5{kv-PTFA#p'8XOuDo[2rB8[Cwtچ;jCX橾ɾ\T}/eǣ)"z}2;c~mDwu~wFCuA;йGHMNC,DVC2C 9D}~pc.F@'d!?Ie0/1G=9;qq4/\^)AAPcke6 /.nC7mC98"%lsmUrQl(dzŸaCKqjKsX x:K,=8̗NnuK>s˯l:8{ӳ>83YM|v9Ș.vU>ae+uv>]t"a-gC->"~!Y`7d}g}6 MVQxV6\)T#& Oloqm Qa$ַ>O^xᅄ j%aH/o'S«I)gqm=藃a|_XO_j5z셕[*H\ve C_~desaLx ף'=NDELN-ڰO Y3~_͡ʃi44oSH b @SP`e%uHLZـ OLe՗r, QBgIҒZ"ohq5j\Tj$Y ی K[nEdG E0ɝ2)Da+MȤ#5BFLv$ԡܕU yJIĤ0qKH2h{h&J)ѭx2900i MP.S?-Fkfx+n $;ef D^|nҒ5=~~b/ |8z}HFi!axj OZ8w/)#UHuthp,pNYT2[SsEsx>0:Ǎ_&yz T oj=Dxab}Hhv 4>֠P5ڐFHjkB7B0V 1ڐFFG3S]BJ%(AZqUO?t3U$Oȋڮwb M@I*QOR"˨& Hk)/1F(%<ųfV)O{X<4O4)TdD;+nP; T5fZFG4׾5{ t4rd\덀N24HZ]k\#TRD g r@;C`f->*D!M%ˆP-HZhF U5T7ug*0i ϋ2huwӤp s6?F~4з;oq\΀f~9@10:[̟#ڬ2YI jH́rDrʟZ$S >2*LjYfC0B6 $5m諌'=Дe/ *kz}00Xn Dc#ʫSՑĒ,}=0Ph9GmMo}>f,po}:2[l摷כU]1&Sgn&OSp#Epn[Nl~q-qu}ҝ6>DZY[_]8UZ>p&?)fGC0sD~ i( bAcwݥX) ;d7ܹ"nP2ӎ̟!nnAcn ,Bb燈0[ ula`c}aM%B %>׊bG"WFC+1?0T^#j88_8wV'o bA}p6sӖ.ݕD1!?܅MnFm6tN]$b a;z?o~SE/ ҕt"x@}4`])hyS;y`` ] X2?,t!J[ o4Q\"AHΆ$lXu,C]~sp4B{dkSma3ԳtomC!<Dv3ohVgGH"?$g!]뫮IzȽձc>f5 ͤsX,Mܣζ>pUܑH9ApRXz`lcmCZts6V̠a̭/rߡ^`\_gaU]gt֕m,  ry.Vzz;gc`nj3wg3C|tF[l;9B|ƾ !AS5ynZHX.Ek f9Di;9ڡ4@΁<,9q 8cEnuh&iơmaKv:lV^QYҎGv6.G%{bǭ/=ˆf#  Zp[ma5.U6P i gA@3_% w׿WJgb;~|-SsB+qe˖馛:_~}$ϿAAs}K^žO}jOOO__߂ g,]c㑗]#N252nム]vq{߮X3B"Tt+]yD>e˖=IOJ{(I>_2ϱLY,Q39V<9.s)a{z 0oI&HHA`l@D:ȖM9:J$ݪW^U.wSիW5a>\ܷJ_cqBSEvvid>O'7oxrܩS~o"*b"W@Ԙ"bpYH!2=@(;δ1w},40)l E6|Axu禑|4Bz꠩L;A,v ={$we\5s5`3~3%{e-30(>q B`}:X^C(Τn%04Zc'&-q@l.y$p#Af%>3M{ƙd4p: i2z1#V-QY5jz )Bٜ$s58D.}NeX8eBs&/7ǰՑV*Rkťut-.JK5f.>k8gռ۔c#-8e=i$Y{̨-J@\B 7yM7{|S?裏._l^˶?WPY&Զ?|Ϳ{/~\1W9wW'xBe;; n}0|K?O~c+ZO? WaK[X#ͨl4j1;)Sp!ZnQ>,]c'hRτ;;uݖ,"jhz&)>y0 譩xK||!luBdgl4pn9q nў7> ۻi[ˇ ;!!+z:W4ǻEg6W"Kt6͸I툶+?+ǐiғ0v3R hiIÇO=Zp̙X)6V Vp8[,h4/wuy@=Y2de>#|}H8|3dLa>b0绐ތm o٬`RX E3 XffŁ}"K޹†3=RŎVQi3 >izcN*?1_fa  h cUTTTQ<5G=R@7Z_G\H:Q@ 䤨6c7eDH LܚI0d[ hG8.\@Ktu#t؅;sCڵ4f`H9ie':Hڽ+-kޜf gwivne J+ׁik=>$uMvKm^׆P֦-\@뻀X(\e}<THgb9ώMI!h&aX ᖀSd0nI@SxՒ0Чct\"\+ih)A|{q D~A رRӌzz)'v;rV^i>c-tR);:~%ad~.a50ΔJ ^eX͞O-HZ **/-_{ 0IM[ =XSz> XE'#ksG4ݤz )+~TwYKIy=1 i G{@EeP@ﹳ#:*JO f TQBfeS@lA~D}37@evW13.<5 zyNή UFykq>? # O$z]JbKڭkk2֮ے0G`o2 &~(i e6l̇C0Hg k"]Ǻj5gA47|knmg~=.nئw&٩'ȄPO쮘1M'sS1sdY/x4Z10?3='XlQU;YsgZA;ANMQ!1c&jrj 8٥6-[g` 4+b0oͦ sIOf~$:oX 5vICKp)gN.aq?liO!蔋zEs{D3cl/@'.f IE(ɆïA-fբXg7fUQBz5Fz?**?y w޿FEEENzHߜVpW>t|{9ws=~ -: ui &q !?ag:N{hͻE.mM.v⋎*D 7'?ԍWY3jenIo&}u(pRN}0n^S&pAD&fr$q}(GUN@v Xiu݃1j"->δs` TLD͙@`eB9rP@318zj 9vf8 JF4s#.+xI*̦с.0MEif8=4E5O 08 K~x6' ̈́G@U hK#/I 遻r?|ǓM> hkp1t45ր}666A~}3 u7}|E ?2-k VIFn}t_=opڈm4PFgakCk$L=N*y& #̄ I=^)렇?/!A@w(7>ق9CHS,=|4'*u^Z;ۊoi]5X5,KlwÂ\X8ehJz"@^UMm֯On"SZ(z)% l<_Q53kq}*************L6.Qa3Сcc8atI.mpʢDl!"yghR;J_`/Wq[;dլIH]ӭ]/.t > k;#ΰvnwJkt.x0&CijatzW1c!󆙈d8qT:etGe*Q\jr LCwa!o2݈/ пk%N_<,֡}h[=3h,;@f!(W+#4@$G>{CKt+_M$qEmgH\5K5 a4LZϡ+{~q=Ngwz˙pk,V\1wD~&y͒` `gv~ud@:"t^LXBve`#c-h͚Q4];3j]N _]s͝39=nhL8tm2Gz!_b->b񿛇+f nHb ·3вeTb:*cX _KkPZEEEEEEEEEEEE&tbLN=t(H@ )m:>& Hޙ+I=E+_p!%[6~K:dkU4ƙNq'7DXIa@awS!yg\ kB5}6^Zͷt_bkqOm2#cJr"bn/GdG.o5:fbk {4̹Z,@~D,AY$i,L 7i$S#7tge b?qeiSk!:#i,7ݗ G@7*************LO3\|!M7.D@w;}'y)Ć3 yg4rD@˝ Z%}Ե]C5`m|;{֔S934sa kpeeΙ%ܞP6_FLHكFb9ca 3~k4kIJ6~tCK,:e>ӖF7K`|0- b4tP7٧ z&7+%̑qeiFqҲm؅#Ol {&i%UTTTTTTTTTTTT.t*Ю)f$#c'3=oL@cMh $쒅ţЯ1zv>_ٻu_OCllW:/3AkܪGsKwg=ڮN+ֹsH@YtOf'3Гao=l$4y}4 iKz]LӁHGi(A'z0ƍLܪ8Tm `4$uj|L - ;dlq~nZ(g$o9Cל/Gly r0.!-H\.HʟL@/ L@7mmL⯽o򓞍 h݄Ѓh Ğj>Y i6,"a8 ;Ѷw 'Fl |D̜N|=jLzcwҝ6 ")-k6QlI_ Ќ3a]Xkō3;.xn0~XLǸ`ܙhvmX4Ta͚^rD ing g{@U ܭG#@lq}D͉xn*j&vচD$+W@٦hn@h ;ߜ/!SLtY22L[ǍiA3rr]Υ 17NX1F`f8DFʚK #Ll̅2Ъφ \b^5\0{#k\"WKb Ta6YDҥ9NS9l\nT~.S.cEs u[% g3 Zu9 W}eO2@%x `%b0/β hl7~[<}{?kLOO߅C={vee07~Cw]x;ꪙ'Nw}/dFn oO< ^~eZr _+w<]-8ňY*. 4*k6n(%O84 i6,SτݬsDLX5tH(3 <ϖ$ u X?[t#gl;hti>m4zk\#஀pfRV3q}نU: kG]Qc7.c&c-3>]졝ZkB3[s:=2VMc0eD+JdQ4o3?y|;oHfc:#{F<^4b+gN\ i5```SLue.E\@˸__~>a39VR0{ze fB3[Bs8G8YMg{nZ.=R9X3΀[9KPmh/ wl)'JXb#^[ _A&w~>{lV{SB سg__‚ꫯ_T*>=‚_~_TZEEEEEEEEEEEEұ~f=-ʜVni}:\@ڧ W@KYDl:{Bi~(E|Ꙑ|1+61}ބ. oGA]Ǒv~ f3MrM\’g7]x=z&4DKH,B.%fNfDn*dwE Pa`I2Zf}7w~` y`3kӧRsv*W?/8{0L9Y#:gtQZV[=Sd'CRV-aY`ԓ&~DB50g2&3\%cb=h1=r;2lMP4S̴&Sϖta#<N(vJl3̢Ev2Ȗ.?no-[_ |< n|ꩧ~ӛ}矇G˰ʅ>:ߢ$Crg/kB ힻ4w,A2cYhgཙ @2~Q} )MА`;H0 $x z1 =+9[^l ˁEaJY 2M_] ˰AMl>+T8MQ9huw3[P]3WQY%3xsNzw6v+|u)Y&cW=z&6.F#nc:N}MvoQ(={FLaݜgz,A:۰fօFeA/ϳL];ot|&h֘hl0M22{= 6|97Fe>e3|*`TJ4;]+CBVͱ+$܅; #%;f@wʘktMT@weo[7 ]GW7 d]skonvj?ʩB_@z5SvqX SQ"_JYEs+"D\8ʵ6٩tψhm!\«wճ)g$OUm+ag|ʬ5WX2kh=#7X'*ɸQg6@2dLaQvX%-~F;-Z"_q8Yh$ p{%#Qhr$MB6E4<+dF_ _kQ\sa}y⣰QYC+M/GLNVf)}.;~-X4 .,3k6n c{k7'x ~䚿կ/<+J&b+Io\~.r[q>ϥ p&gۘpAotT$ M};ݍh'3ѝ].Ꮇ3ѕmnl}n)\Gߕ*7"I:#'s5ʐ#Zf*pg 2;ΥEV<'A:zo`:?-.lq%[\bű7 hzTa`K5|?9VM)J`?q2yӯ&o|Rꪫ02kA /rV{)o{x<~YDaO}4_x.݁ `ZInlH@H~LbnGNBBqf ]=sD#vp̡L@6@gmLw1%wMoE3Ig;{ޔ١zg8 gOSTh"dź3z(gny2ax` R)3kQl0Lдu`ې*&ͨUT%l^_lJszا>Bib:>g處uEЙjd:sXxOФ}~iނ}{__KtE2ˋ/ib1ɐؾ};ӧa-0: -l/f0PQQQQQQQQQQQQQl_0/&Dr3;#4]%:hڞ }f6'-(|=ޙCҹ+àS6JgY=t02;@+ʺm=vTo-v;h:OINq^R4|97O}f'>cfc1~N=lgP`s uZjt I8ab+"aM:>_q?1v 6:cp54.3fRV wdOYu*i\_i36][ui;t족5[Tvy \s^2.=hh1cwL aKId g5w;%aУM9h?!thv-D DI[ ahڮd˜r#@ -6Xxqs:13J[rL"&̠ef`1ySpcbL[leJS/% C1cnݬu*aLܪǬFTtq>B34lNۆ]M3n8 |D!ffA.nG:#^ pKY ֠-[vly#{ޏVZ0*Kfu4/׻Ӳ":J ze9[Zw(Ҏ^*+8NE 2#-*qHo-`d*{By-PCSJҚ!ںg\@[7?ӗYwo7+rhh_ 3n6[ /pL&~iDa HOUTTTTTTTTTTTTTX^zY?|7wۗD̹Gðc-+;DKhG]q:Aw2N yDWv)t{Т\HdM#9Wrskցg0)SU2AvNE,f[J;z!vIqgmg&I_ە;sMv]DqKae'BJ'B&wip,;Di=ޮЈ­0i>$6tfy+:=&,ptpF439.U";&>,qci@c^T4Gчtʬ%>4Lҩf $̡"ljJx/RIg1gVL^,asu3 h0I^4Şx !LǕt^{n??ۿ[eԎ**************BZ NJ@/YehH9Цͭ<2g3P>*Nskv>'6D! m`Z3֮p6'¬iF~}H'{]uy(94iL@Oe+p3Q&kD2WggnlhS`L>n5>;8*.Fa]0'3 I@$.Գ}zjV\29.9-EsAcQ.5)ISa64B^cVWʊ^lqݱ쒧fy|={sl;AtE+Fyo{Zx??drӄߢڛo /;4VVV~g~~g~ѣ?яh䩧2MWW|A8w O>$M?aտWi / d2ociWC"UOO)i}:!4SNÂR@)@ϯʶ@[tD$4~ʙ#UCgfwq"@|'c{g9$ u(ICsD8)HXƳQ!c*OEHn& Gs&8kH` Gz0pg??Q}:6)gͧw0,C k53 ,}U2G=hǡ}6`x6kppcjI#P@f#F Xn8Κf-hplaN. pRhƋ^ؤ׳,3ę@eְ`8@6>:{65jVW b^\JB3\ޠ}|h)dkVYzV/ͣ 4\oB+%¡ODŽиo F@wݤGG?h4?gɓwG }kpny|>\5g~.|3ϿۿWH$h>q7 7?/>S~g~xzM聕ьN)f6<ҙڈdfz]Zh~`K w^`&6JWz@}WlEVZVdƃ^=]h-}1vc /d> wt#\%;9ˆs92j$OϑtDoeLڃ@lkhtS,O*fz u43gs&j`h掙8\-l1aZ̬ M&sulk$P@$4Zª㖀V=cҹЈ8-'mcڰDdM1RlkX38; o5NcW }¶(dKc_,3E$S\m4YFX A}ƞT?fʟi%Yf+f+zY%8E9|Meb#>Ĩqh,nb`x&+{8FeQGՂЫzu?U46{M|#qط߄Xc?y;-g_?k!~ッ_ ҾoM75IVK7|'x?OA9r//bJOOiLFӴT*Ei3g3~w DIgu/|ҙo9ɳw?sc3L)G7&O]7@//./cM hQ8C_lVF `5d 岤}%~+  B;M>%=]wկ~sܗ%{ckq1,{|ӟ?/|/ᗿeDo|n3g|k_ԧ>E!0O|79g>7|O8w?J۴7;}ٻ9wy; g"lLp:"S3/"uf,-pS2gB(za{xr0P&'t&u3ff8h1s:êa#^LF3hؘhm}:9P~(St(_v-)涸ZY(gFwȂqSaFĘLX3rfW fh_A~{mHϒlk`j Ahl10H=LYi]0I MJM63Ծ9q5ջQX䔉n}w872yJ ەEq#<2/yճ둃࢙4Zj88bs<73+E#,Hvw$PW ?X,Hgll<7׳YN V`]`4A%u5bݜMt2HȚ,s/ۖ0tjf~p~ul;se>_aŪh;xt3!c/fBy}MzE]1zW*g@kϢK΁[D/GG41xY'罹}տw&>EZ*NY Kl#EKcRV!tUQt/дU-VS_>-mRlH T۬6!FXG`] "+^UçYoVm"SsY.l-xg\W9% cGfbzƝp@>Mtv7\e6 Ӎ~hA{`Y¬GqcҬe 0ob$@-5h..0gf+s5 IOıF-]3z'z:AP7g"Z<8v|*? V8w=s U#*fxƯ}y]"eRƁl0w .q).CKZyze8tp`!Q@s+yu7Jp,!{d2zҾ,U[зFX} JCzd58zVğfY)B$20Sa@Wa1M~#[  ~ѧtv3w^L>Gnu/+[Y1Tr =d{A=vvG6+ez1ęt1Ƞn^#aXǪg[mِ 0..}QA)DLiL3,m*ʜT XZs0.fn9VRj lЈYgg~UR3[KI.,NzO[siG@Bfef5δaLc(}5;e=uө\L <2xBIKs"-6x[fN᪍VsKe6*hxId; O S3kt`3ٍ$r{$_Wˎ ^q%zXsƽVZ&囿3 /W4Kp%n1-(h'KZ X:_M_V@ufoiۂcCNO0] hݺ]`vܱ ;B}]45 a2:hDHQc: g&]D$ 靶 eXna0Lps|zaTDcrfz=N2;>;H'_fv7Lo[m` D>H2v6Ԥ 攙OjGW: %*5΄m|#]h25zƦH}}UWJVnN[莱3#ݜB#Vc06$iؙ=S 6 kh\څ%M£x583Oʢ^YʤzyA// e 2q fG,pA^O*VHDuЙS^-Z6ZoKziп?WkV֊`RZIH~[?u9ifi2[CWG e~_[oB(E0OŴ!}lalwtsTTTTTTTTTTTTTT,=tcģw<ooZ@, nMT:;c&NJ\m>mLuS]8jl9,=@d._8Y V # B) dnʬ4jI8{OQ=3Ջcf$K@WN/ V1#Xl/u@gz LgvLX >(k%]-@9c$Jg퀨&uD45vʜ l4[w)$b6 ڜ;T$ $λ}6sƮ\^|#Se ^L{!܆lQQ^ΖV-JvyO-Cz9᧺7d[dokV֊`1 e@-4k~>@]ݧW=Z/4u:**************өtDCԂx4|b.FVmKGeL(|4GT(͑<5Gɛ)&lX|%{F$ݕz|2;BuRît^2Y3$ޞ'4pv2*;Zy^J]mxXnj ϗ6KH~WgL.Yus8KUvά𙑲^[m4z`]l]gR| Afُ$9tWޙQ]6{W%tQY4*+ZiEЎzn'^Z Bl))LCkHW+UW"sj[`8[bĕ- e\{yS:T505U?pWÑףDŽY/U@+r)>Vz9fFY=>Ațf] sX2k[S]4Mwpi:&$.w4rA4G] ǁk`_ GcZCWCPzWTbL._ khCĘ77n i7gz> b>K70g39 8^g741x3cIg.ES? lXӈDy{}V3; μų;/CkRiwZqAʋzŠ2DYűקm2aV c/yń?\?w"w{4l|^x[d!`ޗ2z[wvFUtt%I@&_:͒3^ͨ[D'mg5==2ѧ9w&-nFQKF0v?$id>';r Lfb-2g,dƊh3htTLGG͝1Y]8iLR\]\#Ÿc?vl>7>>Yg* e̎q{44-NIGdi/ |]\Sߋ.d .v5@ { z3gkv@M+/>ׅBݜq;X :29m]44JgfkYf@$`q d~a7yl!. ɸY3h?܏^&uS{:bBī;!NwDs+n` GpʶdX϶fJj/sWP&:ͤEHӘ/ h R-ͥ Xt\=YEwUrHo;S jN%Wzi3aGeżշ8_+-ßyUbZ.b^vAZeUg?nG@7uo ;Ov:o?st$%,kn˝1 s 8nLvickWޣC$>7u$>L|L8euhrg5"$q@ޙm~(gRT͛rHYLG"OQͲFgڮ8hQ"O'̙Lbi&EA2֕b I1xɩn2 `ճ;s;pKL[fhy?@ LSq51w4I1 2E|,UWÛc~|Bg -5Z#gbwį(L=3lp쀓+KI@n_^  h%UTTTTTTTTTTTT.#>wO@ƌސX>e΄Hf:1/1[3=Fjpr iw/ѕܚʲtT#sBbp%rKn0g@ީb=aJk'sYd.aXs~$,XZ9nɊ=.;~>|eQ4'!;;I@Ք噗9D/"Ԛã%},Nx@a٠ظ5z2pT2w ۯضt&h1CuB4{pz&6({WB^ ߍ Xf&3DaP< |(^B%D߁|o]/w wJ@lJ@̹шx\36rk8Ju|MgF,y^|ti3=Fzvn7\t>`ޜڢMlNte'bZnh%ۻpI f7dwRv1z^l1$/}\ |^BZPzw¬aE3+j 힍dWd5g|hfi6$V6p+}ݜ9Yu"jlp,s8ĞH 9^Ʉ97xEs0ؚ:Z@cg"t ̱[<;E>p; -8fiH7϶vp&@ByHzϯ Di̩}OJczIϢ&-yg7(Pf"HꅁU8Fټ)`^eL czB)ci#Mt=]nxCx>7dmkqԜfbVe*iA:sD܊+vb9_ (90ϤK4O# rXfSi:h MX}lYmg*sqf.bdL@g taNE"rXlɖޥtaV+xG~?X&zdKX feNhnQB 7ўq:TZU@{iHj+=4 8}@Dq @$O.8 7:PtdFe(+zqW[ hK!/$O hZ䚒}>3nBHeja:69jC$H^JfGK*yStS[-Y=h3Le}1MPڂb I ?O3;3پzyi qvY k`GSʘ>H'suxۨ>ɊqLB,~YRoh4 [Q-8IX^ƪ:v}tRhy@;A#5EśȾx=6|k$} ҹH:cЪ%6oH@G D܄Pg1Ign .7;'^ ڴxIDM[.mU6՝(fw}ST(n?M pEͨ}9Cnp4d.#;s"ɰ;]hPsXLZ%\z~{ "98#(!C9532:iR zF=' daIpc%U=N!͔5)̖W+#k\-528KYyg?Zi1ç\ kJlEa> au9AۙD~a'ڬ+f?mEs+.Ŧ.;~ @_,K ī|14VQQQQQQQQQQQQ# DCt$I=d𕀽cQ:&zHC8}n/>s[{wؘ;_ }&6!4vevc? O=p"$jI=S$#A :9#zgngdw%^cRItT|n$m7 |Hج%(2`l hl Q/4ŹDq.^bkr hU3Q,6 Goc&bֺ2I#ɼ!ZcXOꙎA:?̋ޙ!':jL|汒ie?\=heE5C H=L@7D0ٶl~3>Ktlk'cgY3gFw!߿"orÅ$׬aU)64SruD[jwi*ue'& @ܨ%rHfaզcLܬKdQ-Q5<2$LҚ)m[H47 ĭ|°j'5kOTϤ# jSɛw1ik6IL18++yރ f8].t;t8%-c0]O[ h9>/ie\hfl[Z4+Fu5k!cXLcZy,{ZjPZYdԭlMnUj1S{pzM#biGZ>.(7m{TZEEEEEEEEEEEE4U@G)(14֡VH^8`+;OpS0F/o|&]@~6m2Ljl>`L66 DkhJa|2˙kZ9ӥMM,jv6ć&r/ İ"{&fQ@c 8f0YY0* \-M9y:}+W ]]oNbleB(6zƯAsc%bV֧xuv.qA9':{b H ,&NhJ K<%l/. }Ol6bK,nhc{da{jP1] kO22eL>٨,US1}.<ubcp`r.5 аᖙíہ /7d83y?A s~d5l3pX,25` 2A]E?S={ì\y,-zoߢ%^z_9]lg|BtЂJ,VS`}S[@s{$ 0 wt a5(Gr pHޙ՘H@ am*j7hvE3x0k<a愴]!X:hn ^oMÓLߎoZKq4IoZ] VBק" jqn*s7b9Zm4 H13+ecE)↊>SA㌭an,, XL6HsRl  C C6R\dapԳ]aU>Z2Z;5ֲyfX3Sa49ekZw%fջ*ycYtF܄& T:D3l}@~E /x{8oSn~$"Gp8dU=Ve-%@=~=Zśts<7 h~N7'[!ͪi0X?`ӟ+{X .v7 3am'3NͼLsnFo@}&ak|8X) -7nnQpNTDjSo5(4B=Q=sY9Тh9%ne/5lA:Es<7#gG7oSA&=3.ΐN]٣6@hg3GX,gTyG<'mMΎ)^R4vű E Vi[m_,cŽѫҤG@sA܊@ G8KE_ܞ grsZZƁ( l§ !"#9z`KZVy7zVQQQQQQQQQQQQ$B@o{;:{׳}?\ BJ4Н  z yg8ְ#arkftnݬº5_":Bn7ɠt@ku c"]L9ӥOUf"M˜F=PvWύp';au3ˁI%hޒ>^hݞkبƇ3>s-g"g h2D2W$z!M5H[`hnEk`uـ}&,bQ@KY/i A 0 Ye}0S-Qb7TM zplV 6|ӱ8s2DRf?>g?ep/(PEs甆 6a6<.%,sPs[u"8Xlak,ƶA3Bf2U"$< |t$;oN944ezg>53Kuv6w>B+/;oH93!Jdn̆(g; ~JCzǏUFP5|ʸ-%4 $a =JGx5T̑ؠA/F\eo%6o7L@F͹шH́N7/S?W;ޒv'5~[?GnK;w`sd2sP{=Y UIco-׷5f;!V t(y!,FIZqc:Lq>tXMS15cn%bTq6SK>hv4c:7p,:.Xf?_3UUˠ׶3Sϲ\CpeXm( h; -ќnjG#VnPznmG@ x۠;Ǒ,S,@,k:eQ2LrheψqAշ'W]DeջZ7z ێRl߿H~=x-;s:KJ (2]=:rGw*R >eLnң\~9w^#>wàuf͠}wқCTZEEEEEEEEEEEERHXQ}9NVHfuBl`6(4 $8 c0|Jd 6e ^êy|7xCxbfP{ eم䗓+rpjږƼg(I1Sr*U66 viщt **f>e,IF8f2n>Mue칑[?2| ,jeWFzW.{2_#y6RLNYE4ZsyPepC Ç/qpǩ8"#~$_̍p&e塣gy^q( fhc0zIct,fۗ-Tϱ󪨨$$#@>oZ@i,y h控VmKjg2 8VC3L=fD\Dqx1m!g>S3c8jS1Ӆm7X3k1fbn2 ~pndX7Ѓ:c~07Yp C9O1p),cxT0* ֈ9ݝ4%̉j+VV>z@R>ئvu dpٱvt M"ͺR3ydT"p#]H 7Z N3uؖE1@Eʰ?07vxV*\egYf =;8u h^M+vjzyː bVH6 w8f4gFypQܘ.)﯌GOq h{;?t2|p c $.%Qڪ+*r ~۟:{3i'/ j1 mE l׃iL,Z6/^vXvsH=戱T'3$1\c5ŰgԻӻYcepc>b=~a%86ր1S\@c }c4:hxg0%2lG kK]씋f?+4ՕJ!pSm:97G(okLEselA6q¾  X`A|cq[n+Y^bz 88a[gjGp\]E\u-T{Ld~٨,^#e )Cxx򀇒evX,#d֐f8Q%RRq0WpȮTr{? 'Pd-JGdH~`~rϪ.F䃷ܡO~?o;OŌiw<3B=Sg߰2p\《>ƼQ׋fiZq4;rBwLty)8Kz͕\E8 h&zo&;)xO%P&iN9q8E> h),W VTQݴ0I>*ኹ=f/ (^o__wףZEEEEEEEEEEEEHK?zgy}=~w{/}̈c%񊴚䙤3ihVM,/kCĬ FeDN{2Spfl[Li~m1ݭ>n} `ޮ`2kY1GV Y@;8j5`GLXؤf` ߁d~n·q sCű=W2۷2gn54A}f}6P+3Z`м]fqc:fLrYf6V@#xgjA5z&sQ]aq^^Qg` g[@ hY.wj 泅9lUWtxY^3zHK,ElJdb[g=gg;BB9p >L^q|H(2A.d^;s*CǪCtR3C,q%f8x?ۛߙ}ҖoUZEEEEEEEEEEEEH{Թ{=:j &U[_;z$-#_3,cָ]IRtš-LZŐ3!}>׶Sl_!+fzn1m$ha7ɤU}߼=鉨659s3 g9Bd{+~ѵ5e e8s#YV΍+nSH3Syrl-'ۿզ|3Shp*Jgt@% pqҺ3BKfM]{I;%$IC~YD.(:elo.2 r|*ygkϕeǴԲÇG@KyZ7r#vg<3i`P& ]" u琩'% Q^wx岋;ȯǾ&++T*ri$P@~}=7|?|WtGګV[o.̆4^ b0+f\9D󰘊Ƙ0~zǜݳ8Ɋ([E î{lM2S刁1];ݤՈXyːEb9еUzMfq߿2X)ë́أ9;sdoDhx9HÑʟIs&idQ7*B+'L|͸1CΜtʒeA{lyVR:_ziN+bKx1*G^V:s,Y6$Xg%tdI=Әl2 蝅bg8KZ5$CXoYwwz!yaBZÑKuGHuSL R9̰ 68)VJ@\ so'ǿu{x4je?u/;:@zЀ8 tAl2yͤ 40I8h5~"F=dNa/!2f@zn}#-[q[P=1c:S g8kJjX_>[Z>ѧ^֗c&/j Mq3Z.mƺD~6.1V^MwpSF-NQkE¬).{:p(30Ǎ_}oliVq`T+V2kaw ,stXLp!z&c[:cto5߻Bt3@*9߻ G{r," h3~$ ܱ8Gå~ |Ȧ؀ebwC5˝;|"iٺr7 }ˬ,;OrH@^S'gG|ܽ=3@EҾΑӖ{@oDKf_x;u0{>j݋+p 9Մ#`z\™Hv*e5c6ظKg#@ ct؝fz-nְل4YԎ3vv9m%CuHjhY1j\=]hh9xyWESB#jAͺmV7xiaVP+r[6* $P@ GW@s(,g$H= :bhJ}*C{Y ̀锏ې]upnHry]$쇔q *+=x}#`8=:Z8 hI ;se_~=.oNVQQQQQQQQQQQQ/z_'I@'+"#Z&@d_̑ts8Dr)d] ZLpLZYYd~ζz=U&[G=F@5=c.Q5Oc9#]p9Jc&g8%|!)4H03q,[Sӧ7DF.YhS&G 2#f0K}NC\L.4E:\<0`3zy^(/2+]vs.wy&pqN+4DXꦎA2^X x7X3/ Op4*v ʊQ^~t]tbUP@BJypOw,0q]2ۄP hHL@?pW>txϞO=ul=_, HZ p*-@zP1DȘv/6NvpgSͬp],AzU:DL$f4">s{r;QsNѦΐ0j&rs\tpDөx^^pLfG#qTa}`MAWV~N3 eTTAXL8eaS4)vؚ#_X"== 2G"dZ/)Dt쳁]5f0y#cs^ϸh آKl!rYY4+ "`T=HlzWsU Vt; }{8gI.Mq̋>/GZƑqzGN#ygNFGAd@ʖnQZEEEEEEEEEEEEKgo?9m=rg~}xͳᛸ[qs.Ō^Y`NaR\ =FSuO1_I2+ YaGG@Sq#nѣҦ󌤞 1gS:餅m+ OXv}t&?7j7 >[mMZԪ%XX7tJzgniu;&v uib Qg 6j`=r+eiznۂ΁8ُmz[4{O9fe :4ZbB=\_n업fv2 ‘#e@A,@Le%zJgI( ڃL`}ŝ7zJi * -A]cA8ƹC*#(D;Ow+ pi@ipi@oeKL hK$goNT{=;^ gNq R-= ^a]/:gq"k]렽˂kmXrDJ=]ů}pu'$X'19g$ `f3ks5W u3JgG7zV,Ag/1c3^., No72X;s,Jg˜;STiUw VHY8#^2Re 9R_?P:T8Pu*:a?C{!Çِk$H+ i@/ g iWqސډTx@ooekCʥ'g죰tapO\M ?g)LB$ 6p:'b48Q>9D9 bHZƕ 4Sze~'wSQtL2YԳ#O#WO2RmC$> VNvv(δJ YlzqE3 5HBga%dbg+%,Aǁp9\.W΢TV z>3%v [kz?Jnd;e$X:KUy_5H(;h.+ 0pܷܿЭ)r)$@@{mgGz=O{O?ͧF!}la/覯,#ٞ.>9<}44}ZyC5Xsgl,NIٓ 'fܬ'F*?Vs(3;0쇋Vz6vs;ev5u|c&[U2 BҪ%L-0(TrMK5KBB9nHr{|مm!w~N=sKie?@P@;ʒ bX>y0=Yb^jAƖ0):lw搌&dM!^Н΁s<7 cfjzglbfh4ƶ"k27\*HfyϬs;pͅPYsg>{4Uh)%#Mqp{@s&m\.hEn%{Pqrp3]un!ʋfy!Y@صrH+K !"(f`%Z0QJgЙrIo0|juX0\Bz rޑ@KJ@ ]GQر$G ?9]./ fT xo8Tn-cJ@\"  A#w?~澧8Ы.>QV lM3υ&s^-kb?Ⱦ ׻ts0v3zbP]la5:?:7p4b43k| <dg€D&H=S3jw ߌӎc5f@P^l MЀXD h;ТkN|uл}{ z&tSLtEPϜ"hn`U G@gT_yrxǑZm 4wǢw9B [=_ Mc 艁ѓ"oG,}cat8^9R_!]:X_ծoC hK!==Ow+/yg{Lƀ{Q͈G$qвn#yM{8? !K?YL-x_b@bFĬ#' s٨sXkPf䠭FĪGM6\Z٘g |3]-ΛEn^zex\7GIsw&_7JZq ΁.(yt*.% n{Ko/B@+od[@{3Q, ؽ5:|#ð~mpk&p5.[s6'EL T؉eh~zp)bp$g@}z2#+ . *(nUZEEEEEEEEEEEERIK2}G;, hcV@RCW1@Ęm φu8"}vt͐sSa))15 e4gܿ|}M[9qxُ+;!L¬69lL; ,,5Fzش3& sbaf5pni&94 `YIf.]hΘ/Dˏ _v8g d['G/z)3y|YYz9vʼnww3\"Y,!zg15,*0@ ZR7s-bHXgлH*лV{8p,}ԋl2<=09G2GؾcSnm?0~`e`OG?pOT]Ց>(7i qGsF1HޙZ<pt11AW}`Q '1 kAc(9u;H?qe`?&up>~}-پ,_<-8Vbv ʥY@3/>|ϹO 勃 IEBuCfC麗Pv|̘OZKqs'35l,h>98S3'eͦ k>#z-Gé֧w\mŹdRV3i`%R^l4ug5cQ%s`>%su*K.[EA.;cRĻ~ҹW. WDwn=0zB*7 I=xUfL ŪKXgeJ{iWVpLF3ı]\e}ޑ}Ə\lDоՁ=ۯ89~q89r]L߈ st,y> ` 3c/YdHYuzN5>UQnBy]D Av8oP"Qsl!- ԯ qY>;,!%K{zGYfp\]q| yhϐ> XM3QSjWBib ʜ0i^t#v0 ,v#ۯ898z:Ի20`@޾{=o@34mrD\s2"fnm8{ ht$9NHWׅ?_b`ܕ"DZ?0v`wItQGzU(ri/C-8˧o?]}O?p͈)|a.I4sPSv!m=PPCtqnプe5 h\ xX5[ g kDsQKXTa6n$Z0aLMYb:?|GA`Kgbe B-;4RV]/ϳedI+E.$me,Hg 8Vut꠹2a0IW=}v2|p +[!e}<ޙS5ela8$=;`edD>fgg?:ɰ=!od r+Ǝ0:Zv-vzp8f3.d;w@0_^^;%Y@7{Wy383?O=U@Fr"ΈMŶ6Ԃ/! V^}ˉ+H@n#w$h; IxK‚5>s|ta>.mi8|t¬ R20Y/Q+hfs;5fꙀmƼ3cp! Y,/El,)H&5X'hW(%IJt"\_#gt&*{rk$ n˃{˕=cXh*cb>\idxe'pMЁd1+GBfsy۩>9,?.GLtv#3~r(AAom7p}=sD -8VU K';̃;}G~{g?ׁ&#-s3t?/zZh3!mPX! h.D3 @}n+}䛉\XHY 1kzi1SXLZq5{#5$WTݦY癃aa'IÑke~ @J 4^L5˞,ƀZY[Mq;f%\/*f>9b$ma8©(EH(\(tc{qt3QcNŻ mszg*s[VTYzGX2W##a ?vpnv  cE }c*}b2< NvIYQ@bh#sDA,!qc>"X@(rIE?>y_z뷜}Gy{{g? ^KwYAXn0kIñϢBik H !P@'sM5"HR57qc&sFe97Ӆd>9+s nq2f?bnC8-k+Uj]޻m7`Y]|-SZ*fh3|%4S36`)N\lG|q]HQ7nP ep_7KzrbgQ@8{GK}}>4? cMa1Id8⾅L@c&ǏnGƎJlB@da@z hI=l?9ddLF;Ql;|w~*************To9w3>yoz`(GQh`` FP+-Gi0 WA@l;F"wpk;?zaI@s.@@ bHțbh6bns$>Fz`hv*************Bso};<{c~G# qsJT+Cp*Ek,c#-|3fq7稍M[8! Y%m7m9pZ3sM+9yFbC]W-|Ҭes1V&ih$Yl,U@KfY"pcQ@J2)4j/ҼxN+"0@ih&Rh˜MJRCLH$2o2 \uɬ.E)S5rc0]8&,/{KkbUY*%rZ2@3P[mAnO{UlV4;*qLv?rޡl@KCc_Ёqhdۮ<룃c{ ·q310~=2GRƜW%$ǐchͩn2CGa| 'ƶ;><~7hCqR[iXuȶ?5$ rnÅr {;E =7?N\ʥ^ze:􉳷?yw{|7bƼ[HjK%#f9A3ż1† 8rA4ђ_+}p Igf:/&>/ΥJ7V=a5sYDKG+VZo"5h;N>WP=WHp.|䙍 }+ Mc]uX"%kAx< 0˩)^A}Fz!n1@yh?08rD|h`@~#Ǐ;G]S[7a2.s'%Di|rfrϚVzxcN'm'0FDؖr4w<57l1V}Ꙑ2GZ;~04vcˡ}ަZp\yD=/swϜ֓o7]XC8?sI?wzw"Nzg [s }&BLi;3i-bbs \"ci@Y uϘgFq^+8eΎz!Y,MrT I.%i2}4Bc#["hA:#4Yj-5м$1k$,9U81<8>OGl;28  `t+mW~[m` G@ rM{nHBh%PU~ٍX< +OO8hN85"fޠ,sn<]vX(n~2sЃc'ǎ/ 董CFvyw^ hނG?zOc~ܣۂ{MYB"W =$vh@}ސv>$s_Z8o 1s1[]Yuj!7v>Ŀ12>Bw&|ꙡ@j~2i_!P~85=g8I=~O=Sggx3ȁҙp}`1 A4?0ǣ i0̠>=,Т;O;mࢹGm; };N%a}>>؎SfN-A bBigD|(O=ԏ=ďb/ὑ*************D_Gӧw>sc|G{r Qc.S Ȋ@ZƉU=N/W(ץs$\̛>w&EI-{./&Q+e Is)i-K|-3iN&S'Jxr;MN?shR/uT," |7 ŝ3μYl H.[(IgVpY`Й`BY~&E״u!2vpx!28U:?J,(k!gТ>&y _ MNn;)3~bݶ#X=~;nmLJ3ev kh61MҤÍ~Fv82 3Pg;m7'ƎΓX}{)%UTTTTTTTTTTTT. ['뉳>ygxG݊di_sDm+Xݏ!#J(󭠕D:?sI.NJ&?7f:7dywe "" MLL4,gI@;nS G)Reh/,Ayp (ygf26n%L4G"554"#{RgI#4vz=#G$KGG7v~|yӜv2ѣO?}w;N8_6zbl; mP({؎SF5p D˛adǍ# y AJzFs;VZEEEEEEEEEEEE$tm_z뷜{Gy{yO:,x= h/se}m!cqMkhkD' ~LDs+H@ZF27.,$q-̥r|ۿ|뷝;}cę{xm92/7DbG}XUϹdЮVBʚOYt~6cjln]<3Ex z2mHX,Id莥K*K"P,2QYgrA3Wz4V@VJ8;8r1X YKgNehoeTPיgnIJ3"xkQ@ ࢙CcO '|th(;o;4684ȶìY9yk7,ze7&XˮoֿqI5j\˝ N^&_]z#8)Q!ap#Gǎ`d_4;cUQQQQQQQQQQQQQI/{_xs9}ǹGz̽O}x!XXn9jKH 4 tWTts Dj}q,75 &ؑ#^\31a͉Zf$Lchg$лF[ijL`K 6)mYRy S\L3ьJz.c-dE9[\JK^^6*+pto3|VɦշRܓvth(P1cGia+w^I+J|u9G,zmH1KG9hNo(`( ie` *k5 *?h*;SqaW6C.q6pg9/ W톡cabӌ0F4JaKe( WG|0m3ámW1lqf(3 a89o-]v_`; v |O.{ .;l$1i)/H uSO =<8vle]U@\y [p_M'>xz{:{Sӧ{4,@"b%eiqL7rZ# cJd8s$k 5Om}0hftt~.Uhfz _VZb^@z(/Y ]v=^dMZfz \@2g}HZ ,Mr*cL dvsߊՏp][7 oT4s+$Lr2LTF0쳫 Ѓm+E}vNS\pdd(2!Yc@Z@΀t;]c;sZ97fζ72Ś_v!ϻZVτ$9t¶ϗ8cY#bi%UTTTTTTTTTTTT.0{@3} 'G~=|gv*%5P  >wx355TGD / #- ϶s{ʖe_eqR>?.t e\7!˚o$AaJVeGag,E1r{r6YUf֠0!\@VKk^_={-s8qh_=# zan9_nWρ{d3pcx3^$_̑NYDw|19;6#)ifY˾yj1 Ƙe-]7P@)rK:pg>q]_9mNw>06Ɠ=dP4/n箃$E>~:e] "hs'NU4 Hgn9$34P@͔B*?Gb >θ Zl2Sl8La6n$su"tW@jfYn%ZB)q8ӋЅ\I+%nν^H71b `hD+9blIK#dm8$йh~)@쀋#lFfc0|d2GT=vv%UTTTTTTTTTTTT.?~䁛żh̲I39Hyp): p}. vf:ϒSn%Dl,3w0xeO4+I1{hI @X:] iS9h>O+r"t{D3_M]ne Q:vHn$79FXhdȑ}qZEEEEEEEEEEEERO@ѿ/>|}'3>uo=sO= z_Z"1EdGr p spL䗒e@xw@qxy$ Jޙe%,BNY3gN:J1 hvh#d R0HYo{fM `uedSfُ,K3Q.w;גbDi`%TКˎ_q 3tI+A+$,E8&Zfw@~_`\7vzGFw0QCGF';VQQQQQQQQQQQQ4" wgG|ϞǾyIG@K1kk\DΝ@=J혵Sïdg_)~"13) ̷]# ڐ<24W̆% h J9n9" >Sշ\ޛ-bBZ0%;s$L*yQ(Bȁ?!bi3nSX`1˃k0Ց}eX=ǴHYV z& #=G;8Igywp,e ;m0gN9I=ۮ `~|]!e#ێ e_vw)r) ٛ3w?sg?<(O44-JP ,wyg`$/!q\s 8 j] M&EWN47˝#gVUᘲf¢^\cpȺ=Z ^r.Sh2=lF+5alTXYY`Yt9RU #BY$bng>(EZt5KH98KcG=8hV=o9rYЂ}ЎY2ZW@{2/?N;mn}03]KvY.&* Djun;:HL E5YU8p fw+#ȮgYc4z$$b.ٞ,FNKveR2 ]ۼU׼Qg >ʓY@ޫ^__p_5l;E=hݻP>>> dm9aQGly)=ZOGN3?Y5s%4r霓>\p6h1t`$r%ь\b4x|"BsV!"" .9OrY$W΢_΀$ |d(([JGap,S\T ܨ\W $5 k[2ƞҊ2`W5Dա`Y%>%\^g2v7C]5 V!\m]! +-"al+f_@.%~Y9eL $`-HMf(0pl4l5;dvH#Α~ٱ/ip`nCi[}6y)UۘkbjʓpFpo>{;O? hi피Gп"wdYV_ޗ7٧>}E7Yg9tyoyp}y +[Y<"{NDdTY|E:jgrG >G*AF4Ԣ~&Vlx6չg^@CyNgBV$,ճn Y=YB kRMpl l]Z"[NpijcOZI:IgTGjuʚ@YZyzEuj _3\Yᯪ7E:{xq]VN6Y0Z2 ʺY# t# QI:J0:Ifª,Kh&߶6EcŹHx8-yGٵk~Y@'I@ǔVQQQQQQQQQQQQyrboO.=s{4@&gb-/s$LHr HޙC*HQA},YGىXTə1ei۾0m(箎!Enh6Z$ gn)*_{w}|_}q}p/?~ l$,St3!ikNz +@71Q"s>l"x&wټeX1t4!/>O;D6!KY~(p;t IDAT6p#gB.;s,gn"g[hNG,]3GfF;3 f@A20g 8Wg2ekдM8W5~1T[/Ա̴  0`O@r}S׶؉f_Q:[ii™#Ed3p$Zgna[pnBvr2N GF$ iqZ!,-ͮf׶I(sg 0 Tmc1Ym )DEП^koWwBh6灧Sݲ];yfG Wg[f':X,f+YןC33q0",999Zx^ T9f9 hnmZj2Ds:LV@KZ H9n6SVm;M! TTfEHL5}_S}UXW @ZыVld4j;gfI+K>űu%͎x ljZ xt WJ9V!a&! Т@KNft: hnRD{`E#:h6C h':~]΍O{׿_shݢ&lB|׌ɳ5,}dLFf~sӹyg:L1gPV3enkO!T6;eC?Y%Hޢ ;k[f9"a;s,~YC9K:p}k"e3֋J]q5HY%_N$mA^@fYlͼ /VT)GHuWTɰN;5\eЭD}}iβk"yg # -Dhl4:-s4&gLb%H%k#N*pÕmZ\ ڊ˵ H" t$́GA /kלQ@;\מ;F@5[!mEЀ Z h'14" 7^ykݻ;|}_77+@:ToseDԲSI 2vfrӱӿgOәt<5 X]3u:S32[3zk>pfk,?/q`)4tV"p :f }((Z>V]SW +ڴsYg+[.E d/qWE%D,!:e8yt(rKKWD| RRV\zgI+RZar (ëq x0tso&"7 T`%, S58fx跡Z_A9hl@lƙcX3N4;bT680{d t+\=i$8.۽q7-G0I#[84q]ŦWb(E$;-[-XCc>^:tt?򪨨<ϯҧ'8ݿFp|!e _ه9kRτ:fPQ\@?w\5bh9 Bz6&h$`X(8+KK }hր=$LY'tl){c:h l6:uD]C!t*************O`~_|˗߽}׾7|՝??C4°!7 9gQ+[zD|8ר-X3!yg .E`gN`Q3<Ռ,BfKG Sg2ƧgrKbud:s:rKRDAܢpmUkd J3>#>x[.fI1m$i zΌ$*}tHYM0 h[8KmI'm4`q=L.SY%2ygm3t\`IR lfxv][6H~YG,mc/m1 F x}ʓ^;7|ֵ/O?|]@c1aHGifhVZˇs53 `H2w! d}1tʆtd._.XzAKJgkͰrlvYfi$, YF=%&'o,-Zkr@a<53g5#ehe, I=sGmH]ϒ_Nw"_-ڈgI:s$|@fqg@"fZbNg$vRX·I{ ql z$g hdzM֐>n6ھs/XqCltchrnv&81t;j> ??s|g׮ܾ;׿wwGp<,!T=4I Q.uZ$ <0u~CHh/s,rTlpeBomsph9`5h%X$/l;ml"@ټ%3 I(s$ mzIEcP0S[J;ߙyEG ϒzFlr^bn19'Zf[t1ڜl@VHϜ}Fǹt1-f[D 3LnE/ *PQCu(uU=Sws>h`@f`mck j44,Hg@#YCS&`v= b!wl]##k=I5lo"bxI]3JE]F6:e P D6|#bv΍fg9ؒlh7gOܾFp<; ?;'o^zw?oWJ@tzc gsE<4Akz.XBl3![f+Rk3\a:sW1}`1<`炳YrrJ%l2i唜.9/fܢe Au~"(ƞE2\=.]*.[ILC\fi>n%zE-D3W"e%gY@4P@ҹ1ıg \k ah8Ps#쌓>,,s]1B%Z\zEt+;mxS wQ4{RnwA? MCzw.3 ;dﬓVX{v] f hqMF6TZEEEEEEEEEEEE (駭7|~w>ޝH@9\C-oZVȡ! 痯:%5Y()BM;i=x1O/^hOv`G t`QjqjQ <¾f~`Sf[ʖAB0AYW%K*WµMѪ԰rJovZgQ"U¢`hEt ź@emD`t:W՚\sQo>@s!5 !͍Ɛ1dQB٠9R40〝 -`6`Nl41͢h49"ͰA$,E@ Xq3Au)'8NORwz.o“'Ppoc{c*b0њq>8Njk7^b~4޶*k mXz rVf:Jd;$ל{ v6]TKKђl:n*************ORA|˗߿7>ŝ{}l@]P>\&UEY }^Qk0$;ojfYk i[:컞3pC uVJV㺙t;Q8Rxbm4C' rh3w.Y*Z+Y{. Z-(}mۭ>AzCճvkQZﳄ鳜֝]+FiSSCںg{ᡐD3G@9h&-Á9=c??ŷz~g>w惻8}4g婜iG6X~r HHt.4L!yǴ955!̐}>R|39Rg;CYG/e}.^fY$SY; H#.et?*}&2ǘ!!h5âŎţ@Қ@g.9cDV_aG hlv\l)^1L䕮0dLi-#H~6[EsirGlچ-e5~.m(Fg-Q:k_fE,5؉w&̩I7fljplYr͎H#iBHVlnpFEZpw pcNWTG5\ieI#k[^_{[LP&T& /B+X F+F1}͚qtЭfط뱣շ糃޲{gwA^^Az+bNgҁ::VQQQQQQQQQQQQy"" 蝝_{G}|]s&:t T5bH^WGqp[J;sH1[쳤-+ijK糘#mӟNͲ}.Yad糋AV,䕮啮J+5i]=hjs+[F̤3'b(,_ ؕ苴rC Yf36luEmfZ<ڵ4jedlFR,X kky&XL@GZ1mnh8b4ICDodzMYkAŬfY"ug3BG¡ӊYcQ@:V4M޹5ڶAТS3xAK9̵6voK!m6>[5ҭx}m65m. hϦۓU3hDQZEEEEEEEEEEEEɈ(W^~߹|}q;w!ilA(EmG! h/ A_&Vr Y=8\4[W#%GV.)Z;7?/헺NT-O)|x*<;p|@ r8^C@2}+av*Z=RtFm,cYКhN>J䖭貋el`Qτ8aCgΜB&Q.3 5Ukd%Z9?ksz( +eӹrz.PYt&$,atpxs}g)AmQτpSsVLO/ eMͶXkN)c~n wtnͿ51uL2@EqEthn7f|ID+vRkjkOA0-1H[bټGv\٣miZ׻l3?B+ģ#ٹ3w* y{{՗_\k߹ٝ7ܽtamU\O-"h%^~8,*yu[e.E-Sp++<}L>-Z9 ERV%*^9XɚKY繃*D 3C]S[.{gE=w&WAlcūp=w>xH h~v,f9BVl氣m1F?ӑ>xIRlrNÝY30@\-Bm9EV.@dEʫK*VTK*VʪK+VK+S;)WN Պji3f\Y 0 mnvWׯ[8A H1juH4 6[P6뛵ۆfr]3N7 ;,է<ǜ8 WVG\wbG錻 NXx^o;]A&w{=M#IXz@+pWNO-Ľ (ZR^_l֥YfJuiC&;fFżkv{Ƕ _"mv0۶~D H~y_[;6]3{H֖۰n"ygAπǻ#8I3N߹f@<; {oK^z>w۟uY@4Hqe[e"g #eKӹڄU@R̙LH(\+)_kY*?h~9ӹo.s6N熀z~47]цԷQ\ӀfWI@lXuu Lu7S[Θw.WNp38NO՗z7= &-4;!P/$ lۚ Lqf)n ob{fG~O6c hcEΛ~6X:wqQD"mm{Vh EpqB׺iun{[o,SNgg+^@W>y7ܽ>l@_z`\>fX>+bΌhE$}$gC:<=L#K &ǹ cyQ@цA!g6D/ 4' +9"Y:g6>/6tjIjqLg+4yCtHDjYZEjt%:h7KH ь=5k@E-;[3$ }4W@=5 ~}6r&EnjvP;3l ֯76Xc3mك44ZD3`U϶YP<>;7?1tA]է =ɷu,*93gQ.gټe>ChNdz 2hV_8e *[=nsJq<[_f8ֹt֝J +rKVJJ$muSτ5*V HZrͶp-f :N(b.Z))_g-\!lEe;s4l а] ?875 /gFMf2D3e1 e]D{ǖon ESsV$,A@BXD.)p˺70oMDZB,ttnuvmwfv{jsV;P;;6th kbftvӞ VL 0Im:1 {m]!)fЮpn]%UTTTTTTTTTTTTo޻]r/n6)-*0H8M>ijx PN wI#Z3AAGLV %kNJWAk%+e--\-4@8VTP7se-3F=4ov֨D \R eI1j (f \RTVRZ uyju]@j|65 d1t,at C5LgjI#Τy8"8+-l^4g %53eFѵ2׈BLL|B=Mo׶ƽ1_{ЉM78zOć%|p+ґ֓m)vtt |'ǴGtvlҭFg' Lgfge`sp X+ msvg{z'=+gC18B$O޶Z[w-.]8<t_W>߹y/l@]X~`UɏJ~4,~yf>zڜW$}`gx;G W1V*F-x-x=psQUPٜZE3u+yeeul<|^s嫒nsA/(]&V4WI@- tZ"$uaj|^=}uZ-qN;DN=k9d eBۜ8osKM-י}9]9ζ>h&DL4ypٗ;NW6avz[흩M_GPGވMBw3M&qo83B93mmTnw횶DGlƀd9vvnw&pXFW-%L}q::/C4&L\137y쿼**************m w|ʇ\O._'o>.lGhiGfdmqY9V6`E=G 5|o훚 :\&$|ZVRUW sW9%h9Vv|$t=k^v Vt Ls6W+nahWId%ղe'ֵW^RU^^\^"gYOsPMA~}_@w!q =ht +oj6f@kbϚ梙 LO\F5򴆡&h՗bפ=mqx#q923_ɠy$=HGV::R##/,56; :ؔ*mȎ9_>i]-{ti7cnA@K/ }л֭V߆ۓ0]p~/VQQQQQQQQQQQQy̓N@+{o{~zW.߹yuD=m9ِڱ޵ݹӱks {(:u ]tgchmm!)7;?:UTTTTTTTTTTTT矷^zw~w}rƧ߾q]@?S ?m_Q:s$Y4hᲆ#[2ۡi6 3c ]lϬy%6,i^)j\X/[)Y.Y-]x)|-4ҥV2m4h +qVhgjqŊ\p)ΆkG6mE~:lV=.gm ZfE-Ig^pBu t6x3b ͤ9L(hnM-ᆖP#4pќ`9. gLg 5,65$| ("D{{Rnq1g-ޖBm=ՙֻYVR]=L+a9]=c/ ]ݻ;=]m8gFQ@3% .Z ]]tφ.n3u hp l?շ%8%v=XA*************OT^{wx'}|Ƨ޽u6C0. 4\&qZ"n , hr׳hEB$E̩˨Et }4g]@GU -f( ,D,2yg>@퉷Ʉh;$u˜z4Y6XoKtNd{ڹ6Z]bLW\{;6{@;sD|0YiAFͽtu9+]Ejf=h\m-ښ<~!TQQQQQQQQQQQQy/˯~+^kW޾q 6(M>8~G…X f68znFi~K9dMq.]-[mM3RPV)l |űLZBb @T4r3 uc.R+jy }H ךjL͢wZ2Rόp}#\sل $٪EH+ٌAr"f М BtnLB5J|1/NiBmkn\s}HPl2fLtnpյ!ݵOtw5Dӹ)ڱ3{[_N|{׆^{!+i!+fFw7|֑sOE@ZS+uw?o.$;w67}L@{=J@'޺9lx$mſ:<,KJC# eC1w2GVd\7# V9ttN)eklѬJQBQd6|>! @ {"5!3"qpl+K+5Ylm hE,RYl%x3tiptlu~; T!ake![8uq2a)g@N܆ ;ۜfgQ7l:b3S1[4l]"ʰO8tu:;Htt&:XgG r&cG,9taG(u ]܂_ޞ;z{w=\aheU{zlxg h&?*Y>Q@|Fp+o߸ Eug פ6am>V_)uAg%FvQ?x V e^PMJy]vV6`3bab 9wبgYfQ@kS5pI:hX3! h.9qf.-ل;#V,ArDs NB+;Mz>٩rFݮN4tzUkڴjU@HMPRτU@s,ր>F@ޙ3Gh}u֦YZu3b V v#k͞ֈEZI@#qF|>.[8b6F/Õ6 N|CGܝ}ű6>w8g({7f^{>">Awpl3 螭Ma?s.=Է5wf h!; }H~y_9=ϥ# }sscm׊WSZEEEEEEEEEEEE $D"kkoK^ҭ|u_?0~x`) rM0Yiȳ מ-\[~w&$IguI.K2G8y3壅E:Z Wr5.^)s֡>V. dIFsJ#8u7畱6g8eɁekpKVz-NdO8ExRTRRV\c;sq PTXJ? Z 51FmU\Q5;Eׁ:EHM]^suʚժzC1WׯԳkml%l #EDDfeΘ˝o7!4ܙzf旍tΰÀu3HS5`fh`DY_3 0f5mQNG[yg1Ng{\nᑉ\t%;CA-:,tu'nl|P`@&"}=ލޞ҃4\N p `3DXau7o m [At&1cbwg`@.0س 5ݑѳ3=vh D?f ZZ@o_S6Þמ]cWO?G7/[oy҇~r-}1Kgguy[n%DHѢ5}fxڜlpfCs6P@P Ҡ$ hRU@K1-k:hUբ⊕WJل tЂm΢33 *A=yw:C]VRQVS 5YL@s9@]fe̱75p{uf ji4g7vP@Yf]Vpzh\s6tMYt"@Jg65Kt|gcw:S1ft8w&Şn3ӕa;l q }s}}5t/[L1+_Gzp4U@l y3гҹggg3,Z.3k h[H "{giGa 9.}t h;L1UZEEEEEEEEEEEEɈÉ^{+>qkQFp#_¡U[$/k"fiQI=k.^L+4ٙ$_rJh5dsZ@v1%蚙tk&-Ig> v:gL(z4v@TSf~WEl& ̐tC7 ZP&3Q]m굆戯k׹Y4ڨEO`hEmCP׀ Ya΄d3k8]13kXwԯT ussK#rDhC0\ulAO9h&hLñphoOx<6\L7g/-hY3ah>2ѩӥelg[ 23& lBW)c[#?,;s{- п=0|t0cFP61؋ƹ -NZaYT2gIۃ>7~%[m><[ N(͒Y>}& l gQ@y4f(G[9h)Dks^_f hB@AA깸|ac/vJ: 0*8Ӭg^s]Uc-M;YCVf]1YlC /JY $EH43iw9&W'_^\kl^۟-q:lFgkpl vH[[BffU?c3gvH\j΢GEZ!5q/3 tpYLubgCaAܳ9Խ1ܳi yv.Mޙ3ܿ3ػ= ?2U=1E[ =ط߇k`v+"!ôs A3\y3? n`;Sm_d޽yUTTTTTTTTTTTTTh?^~WxwyG{> h Όt&Ce*X$e,!}/JrY,!gMh5߀{.\ b3һ%͑|}m 91}3124n3/N9} sm6XS$,B4ĚSWoX{ǮۓE, ,I4[s&mU8%h Q#vE]s#G,ѿz].PƙqF4ͼ3}p{{3`4Whҙwt8[t 2:Ǎp 8}G l؅Gv`Qwzg :[252bIA=τA͙9EeutZax~ʽ7ng䝉 ΰDgs팸7;vE<0u8 osf mkFXiou6ٙ3\=`,>sGHoYkֱg6@w4SS3}iP68z EĮ-ҙh;YYf :n[4|@n.GP*t36|_+FvS0,ەVtp_gȎၽ!(vMvr鉗.3}]=(fWZEEEEEEEEEEEE&^zqキ_;v֧ݸW~xp6.*ZU,!}^ߗCK<[v 6 )Z |`HьHޙk壀.E.)kdf}6g[%kYXj`Y}$t%d%t5d5 Wsa4st ǀt PuNq:[_-zbڏͺt֚ Zem%juxDLfYTϴHY=KUuz?]El%X_k+ъ uM2Mfw-X/s>\v:G8ptE8aˉS5 vܮjGAvFx(q9^8z-FF|1Zc8y˳%1lkkgmPd hNuOπFmEv%8N $P`=Џ a3O2|'޽yg}{]06Y, b;$̑cv {88_@}d^ -m;.r,yg`4 >d@` D_fOG=\U1ʓ.l;o|wn^ypw}g@وZDf yg-=V2=bEi{glǑUh Esn?5DsU7ek"w"$MYpͼJx;WC&,+fn+V18 g}F,6g6:ܹԳ+|FS#e]4k YFH zrZ})7p8A6=(En6"h;Dۼ7ukڪŚ3ͱV،mOPNNgF;"Q@:c]qKt&ҹf+藙/0eQFsD`=dʺ)ZS̶H9&;}>9^vGpcT3͆) \B",_r-y^5 totjЉTOG=R]1%UTTTTTTTTTTTTzg#v}}\[W~xp_>6: 7'(fi3mR q1 hX<58K:̯f9(gN0mCDR%~|_)X-,].VU?fPʏ65\ny-"g\g= ZmݺF#Jgqs=πubi:͖Y"\li#H ;Hmb_ߞki t+9ezfPhAuۼ֨lw溙oI@H@{>o&)ZCmpG[$i7μǙ:s,DW7ݭe|D t,3A3H<2‘荓;Nwʶhʸ?5ܗF0JبMѡM:סWcvYwҊx;;>7:D "c;z& I h ^|י|nr |Ȑ=$xsڨKL=a̎p}{x}{#=;==[=ly=yUTTTTTTTTTTTTT| w_қw?;~Z]Z=R疖#*\{($,Y:H{nf=lPumݒ}&ls^, ;s$)X7Q!gfeUG,`4 ۨ*y&P^ zYZYʚ ,VTTT򪵊Zm3QUҹ_S`khv vIy!-h&Z h&>\zb$.t %MZ'wb>Hz;A}/:hMp9-+"4gNtb. ߡvYhpճ==6Y[Dz% !<fIS-Ͳ-CYbd@7VGc(3+"mHx*oڒvօW ;ch6ᭉ+{VƇvdžwdž.'&ApA#LpK7m 7ѼF{{S}]ZtOGz/VQQQQQQQQQQQQy"w~!w6{k޾v魛߿>oeѣE~){3#eY0CE\W2"yg7&kNYX`si'eo[\1z5I=g 5 J?!@I6;WGeUFpYR̕P0n^`M} U1L뀩Y@PH]=\g>3lcBV8t&I3g}L7e[nqggsj z^w"g[ "wFL(: yqsddhoojـOҐ։6_ͼ|Ã;mKh}$evCa  wMPbaYJbxU2hfm"̊}35 ~r\젧&b&6t`1 6ffrxpl@jbxNϿ853 CtĐ5юv$8p;&u;d%Mٖ;hHmhFvz7(;#_}_^<~~o_k|u\/`C&m07Jsd/b&d/t"dP_9ZvDPH:OېsKHᠹnYR8K9ҹO$M6>WDMmAkӟi賦k\7[X/Z%g7z1kha'fmt6 haf2b 6$ 0,9 t2@eҙf8RCeLm׍3Fvϟ}oav_1 hn#׳1зok wG;sL,453̄;-mfkrXkƙC#&,ALjt0!F3as\%۸egZ܆л/=z:Fv-}d?9=V,pW"ls`?cGCw8փ{v'? .Xh 7љMl  SKQ]цRZEEEEEEEEEEEE剈Y@z'>xpʷ;Q#})3!})ZG0&Z0-4ӑV@!}Q^[0 h>Z2XX 4g@aAjʪ@y5\qyҪxճFE5;C6jBd)(][c#ul HF,ao[[[r܎w7pf4muG Ou󝙀3C[cx/ wuĦ&~72q ;QFm NgI@3̰(!Ch3ih \#g.ijDHJW C)blݬ=ڲerx{ŴafEO+bG-|j)C,0= hA279ta|xo{^@_L _ҙ%<zn| a916rq| Ã4{zwx` ǿnv&ǿVZEEEEEEEEEEEEɈ(~wa~wo|t?>l@]=\-\( AQz_HA=Yn68iJVʱcE+G VNJֳ$9 dQ>3xk ռ2` Jaeb3*֋*֋q3 EHzqFI($j˪˪Q4Tö?'X( ⯬ UxҠ'4Ig5*z4C6,it3Jf|` A.[W55G9;4g*t\AꍺXNg8L7F|fo9e89ٙN\3!g;WE3(uvt{ ¨ A7 rY4bP뙯-1MÆedd094y5[&l q5- tʂq6.\/|0[v=:cE:m)+&PόNl'~J B ̰J穑̰ٝNց=CVãE^(瀉f (ܣ[Cݩd_w~ h?$$?ϋ{|ٕ;ׯ~qwn}P@7Fhm|p_@n3g QV1EA@g!A&Whlss: *; *+֘^pL@Zp4[%}&]Qkp[+ U g&w:kPz}=%MgB% l~\Ax`1PxƬgnQ@F .3}4ߙu7JWWgq:fp͝HwG3 ]XogKԳ0CZS,9cȼr:a|V0OAA7 H~y_,JM 'E&GR0ዸx4ݜߞ؁+Ժk6&+YߝE W-nCAW~+lqw|a2S&ʼn$=ԋͤ/nlN@o׮˷>΍ko{;m(mE 0ү/2K)5pbƱURƢts3 ,hYϴX+[甯\4ZTτ˫gez Т}gwMGhhuY:)CТzyz]uhqբ!@re WOz<Ϥ8|1. M= h |al^JG#Q{#p%zzw3L=k9F34Ds_@,h>* e,!e+\7kYl><ШGa}7N95Kjɡ$05 SIg]OTOmNoo'䈶Yu+˛I]^sѬ]7w'&6ކЧ{ wHl`bH2rajsVD6 {R=p(D?܅z峏?ڥ?{wP@6Ǝ` .d%o$m"5,H~#|3@ڰz`Z ~DX3JR?`kʡ= Fav en. z& h@zh+kVWuj-AچP975["@a㌮YD% "9ƾfqvc3ͭ(i m[[\!Et"휶Fbu. I7sT FBjs&ь]p $zSp]TѾhO `Zz H4'P0g?,g;1:?(4Ǒg Nr|(!B8$ͺyf jqnw)23L{2 oieXۦc[rzwfg+[3GЀAJq<3vQn$`?[(L\ h/ m nwqo?VsڍO>Bw>ލ?}ştyC,8 jGC"e#GkhJ٥@ӌ8zY8C"u}.C, h]=s4 HY"JqU:XȎ%,`%HUTA𮬞Kkd+jD9wYosƖgn Y=Kw!,8s ,`cshj "u.ҭ3,gg7ۓF@cd '|lkar+<. :5SA~YTϢkn{jgt{S#}pNPwr1t`ws #}I` u|?Bc?>Ž "Yb3lLB$"ΐ:2J~v>,c[q;MRP?ҹ/p͏]0Tpeq݀ "3W| 09797m_@j7 Po8VQQQQQQQQQQQQy" ^݅y+_|~O_ رa~ܾf+G 1׳K,-YƢ Q4[1t. 55+dLV8E(WJߙuŕueRVL>s-皺Pm!9Xm 0pk "?u:j9 R E̮ni4dÊH~YGt9H(d_ߦχ+nwhFZm8 ,B 2˒hμY'և7hwt kO|[XwlPn-31~!ŜȀ&e΀$M Ƈ8&2%~dMТuEVĽn"b淢} UkޙS[Gz֛5hY"8t#g .M Pb83;gm TIgOYRځhGkjfg[f]MsuwD (Npa+vAvǀX_oK3ltFzYR:$Pbd^= @r|!u1P:1;gZ7_ld ^>1}EBtds~lbntuǙYD|*_^=;˙0;~A?$3C;˞ނK'G#.%UTTTTTTTTTTTT ^~/snO/?ޅ iPWBڶ/iG.ZE&6Y$4(ygA3p@_ZΜ@iMު UJ*⊰@iu<3! h\@CsM]Vе}І}f3*f( GК}fb%4ճ!4"t.9^Z[a[-ٙpPwG0=B@gLW[3Q@1=]1:HY=sA[3;TF$<ԃ}}ޞ(&/>П@P@G9݌ }H_Lb?>8`Р i`lUϒ΀333bHgA43YlxdZEa=ֶY0m4sۤiq~|{6\gY1;j|^/$ӽbwmG}#'/M<' bC1jM"ѽɑQ@]-J@<I'ܼr'ܻW/ON#\Ej(H_)^9 OqHAHjVcEuX1A3=e>VJ$lksqrHDk2⹂ R"J tfK+k*XRkejCZ٠8`PVCUP׬ӹmF]SӀ[?PWk2Q$D-d,=M-z,f,gV֌3\=(Ng qFLs65XhF}a0!¨ A: g;z XDow;ۅѰt#8m` h`'M`1 t@npBy68'!*f2O~+B3 _`jV=5{qarΎm#tC x κ8"?ύmb|s3c,Nzqw"le跜-^_'vfǷ&&fm(|} [; 2Mm ;ض],>Vq{4/.y gf_eqmw=c6L#%f&f&5'vɱѝ͉akGzU<;~7>ɷw_o??~XtcXIN3ͩEz8Zzgr2\Jp2mhwd/Zfeq1'Gې#Kgtâ5,Yl|_RV h;HޙC4 g°u>z&L44m3Тz֛po7A M~3b(Ng>hs6tLr 93PU#52g@tl`AmHB6tڨN>y# ѾpO;ߓMJƉϑ.Yπtb74 ,Agv:kf.ngM+ w&u=;y|jw~b{usnۧ柛DLv2qLيfuiYM(ZYA&0}|r\@#2+E1|~'[[3cb6 _5WY};%ğu/iag~bJza‰N>b,Ώޞ=_aąى=4mv&u(}~wߩh>+}z{7?ᄌ/=؀)]:VQXFwplx=\QJajNڳKehU e#3rJ3Sv0䲀U@ wd>,2Ȱڹh%\c7 -:h;q&*j@yMP}&k0fkXs}Caӹ)YscS%piƹ%8ݑf6ճ!mz9(0 mM@[uBtn#tLҙ+t-9B&plςt톧a6m#I &}a%oűC8v9kb;j`3Q43@$E5,3iK+TO%z80sb" Y<;AҖ\gnbؘHq1nOna1:>}z6,e&suƀ<>}jf}sëXN@_~__ן;g:Nu$/т"?׮VG ֲMYDiMG"beۃ fu\X(f +@QeahY=X3 gALfBvfllVk6jnկ8nOi =8v:"is.7N\0g:FH;lV6LF7 =(ug)όHg{3wlŐ΄Cڷ9ԓHޙgp-_c4 C4gFV̂wց2ьhgyZw3 эaAwf+wp->uЩIt3c͓vð&6E0LNN91qblh9> O/='yֱhc@'v ek&_8>07?;7̎lM%'@|?𪨨<ֱ 7^x_޾W~?߁ (9%!wX1!}^' /痯.甬H*ߕ~i6~ ! h&fy_ {, hr$h1fJYUg@ϙ]hͧ Z3#h;gn Q@sѬ+-8֙M|xզf؋kz}цUiԆp5ݡa'pt78=a[zBmްj7岦WX&;f >UXis Zl= 9t;$j:⹂Ҭgybkә3 8\'GMprZ7R̚hs6ǒӣIjI^Ǔ)oMHrfYrYbv1V7& ^o#)SVμ<7<9}bl89uj| ɭ㌅:0:9uzvΉiXd0a3C~!wZYߙz~bw~<Fgmޮdfg{ nElЂ}tF@s, h>a+ӭt3GRq/>؟ Dg/9POl/ճ-̌Htt !<6hr:I=w7S5;FF@YCov86!8enxqt$NgfSh';Y_X 28y# OǵsƉS |_ڐƒ Ώ'힚نb~<<>2k朞>=omL[_Q@kXta=[M~ʘݜN CɁ@ԏ_^?~|7w>|Jw@?qmbQ%űHVڱe69pd,h$m3bf`Ͳ/3:m\=!8K+%lπ&\Qch5,Ꙑ3GК} 9i>gaB&muvF|퉲r3Np=N"\:sn Mfv_3AVk&L >sWG(Q1I7s$pzD?=Rp݁0f}u*$=3謶` 3G$As Lix9,S=3S^c샖3#oV mMP[xS3(3}_R||j"fͅ鍅M@t't 橉S;'ƶm>9{r95} ~'wDZY ljF{brIݓ:'vNOܳr,qdטCGS@jr(>1:VQQQQQQQQQQQQyR" />y[~{I@_?}/60) rj {^&|%$̱( 8OA'd+pZE#ZSGhiEZ- t|!Nv, Q4 :o|N,Z_R/VQAf*k@EMz T7C5~U֡+3@FlR6U;eq|:2c_E9eeÉ=n&ؚ?h,'bCcUQQQQQQQQQQQQQyl{pkn_}~GO_^nE]n+5W{@$/lplY5S,3GnQk%\6C @IFiLX3RM5P}K9Fn&ٙu=yHC>Zh[pžfW%tEt Wqj86 \!;HZm Z쀖>ζ!f.52t:w[sCl62[38sH@Zьh 1O(S8:$왛Š< Uy`YtVHj["XSɓ3 鹭sw h7NA9'8T qz&j ^/{ʉ3V`̮.%2PI3=?xñ*************yn^}wOMؐI@S篕Ҁ-/! _J~SfKye!~+!f7dLHƙ(hQ4$[8EPW4$I=K hC=>Dƹ9VՌ`V\k+ܢwB댓}63As6X554u:եsg;g.]c-A= ޙn3!~ A"mkp+M޹3t48ד;ҙYVL $FRC}.\{ z6yg+l Iyhp<5Kneκt[y۟Q7VrY%y"ÝM̛oA%8#:"dƩMp S35|jfb7͊# n镇<Ɖ{Nrjvf."sǧ6V]S˿򪨨<owWW5Ag A@smE8;h旇 +ye!=8w֠QQ7s\]-V-`\4 YƆ*[>XQ믬 Tk6jBMцXSsQ֬٪I4K깩9cR:lqD銢n :a>8pԳע I4sD;94soW΢}f` 4>ƇzCx싍 $':=}r]6a:˼EQzF<`s64әÆ;o2fVq8b~"A>wa2 sXLL Ugx$rJ`B9uzf&\ON%ON&NnvW XE̶f);Nl#!/ƾsYi/A7Xk{j$0??g9=+^@{WH@G?ܿu؀)[LXEz}_9cX~yAQ|JgI7sBw*ȍY.TYdQW4UƴPSsolk9[ZVϚqn4hn `358sӹѹ9> tnj8nOiE= vcg<25;Sp(G:|F!3LvE2uڭ⨍^m8[c/1 Zژٚ-dh f@xH0fk6Xas S[4"Cu+'&:b~">;=>X'N&O2eAFH7d9HJΠo-B![fi=["gu #7fOڑNXBK-I#3z鍍E9Fw@|t 6XDZY3Qk7Y7(n DLtSӺll\c~968 .W덴F(Ya>]s!fB"lǎffNg+q8wg:C8aڜ測2&сPrB: 6yj(1=ܗ19lsFύ%\f1dB:.q!qva;S' qB}r&ub 7>1#0sNϤitn[+ȹ)zD9m96&e1!dC,o>0G#/搭U8kΙ]+gv=;Oa'O45; LSZEEEEEEEEEEEE屏 [?ݽO_7λҟ6dH^iׅ ze5,ȯCg@ZtHIu+j {]Y hVzԇj5 zm6;uP׭Вz9C8ٙ Xt{8{\4b(wNcMβh"f<[tx-V '$L35:>>8qtU@yz8n3g6ch2dL㘅Ff$Nވ/|D sw.l}N&=$,qz&q, Эv-68fPM"<[q[yaeWZm[>> -\@@<56xxprT h?m^⽏_?.&[y!>S*4_B:A-h9?i`Ae+$5\* )đvK*x`Diu&PVDMYUvCp5\ u=SZ̀B۟ -g8!Hkfhi3#]7;C^^wmLv&,gQ7u7a@+Oذg-pWg sz"YVN`Ort틳9Mk ~Ɂ5[,311l09§j$SC\gFsc)B- h;L6tƒ1ba 9>1zr2ub <9<>;>b"0;18G%1B}r&3PL&l>;*Yb2)s Ѭ?"L9qElV P598?_k=I\rXv\=/-l--lŅM.onfG-M<g震[|: 4$&hduύ%fǢ󓁩15CEEEEEEEEEEEEo(=/?碟ys<7^7.l(M9H~y_>:OͶOqQ0˶KEaz0sg>m:TK(k4g݀6Õ55kP44Gka3iGYв}N;rh3h邈'}hAGSɀpEg A@N_8 ~6 6$LΚFtY@1wYa3m# }ֱ )'5nyiZK|4=4;\4'fGcs3</]@V(/}+a>.5WK *OI@KfYYpV@Kdy\mD"aU@uE\U^o6juz|7b-"g>l5-g8mCnw!g uOH[kj;> 5s*h z: tlV}݈fItk4;Yjyҙ h>$q4,$h+E<5d6zFw:OǦF6f(H@k5h6RygI= Xy˳N\S5E>aca,:?97|':8-ϚqkFy^2NB#~&7I@)떙4i;s$̑ <9Ҷb!}nvIqCIȩ_?**************ql+CŻ~wK_A߇   L9"$ •M5-ۥuq_$"3O|&\4"gC4Wֆ%Yճ:f{76EB5psK u mSsX@ΈE=3Գ!A>c oP!g68TPlfә#yg@ͼvF:}f7;CyPt+WφhꙉfxqjZbr0ΙbmV(pAǦ"8wv>ŎqM@8gca<~mrw>9Ѧ9Sp%#8cSly1:=<9')d0\tis3W̨gd` 3 3bΌ&-23 ڴ`'K 7oKOjyac͕%Ρm>赭X|҂!E,XGf>n;'l8+_/g+M?*\-LGO IUQQQQQQQQQQQQQyc+_zw>zK/޿O^}l@]HWճ_D u$p H9  n0g5[4?fBɤnx`}9jU$+:z3!gC@s, h>{<@hsᶣ-J&Cl:tp,HoG@l5Ό2\ӡffq3g:L"zf5lp~ Nsay81?d$f3SS/=>͍ A4d55j2Nn&HF'&)mӉ8dZgq4#u(s,K.DG̡"䝗+sy|<ɋ $l#-i†APujVnzDojMz΄9i8Ͳ-+'vWNY h4 ST8FlW_`w.=ŕݿʷ7{*->w/ H|q֥3ߠցt fNqB(zg: HUT+(msu]grbM6Dj.Orh\xMZm:6MƧv6ճAm4g\+Dx >zgw5%LZ3?NtE=BDE3Alhi,"fp_}H?"9fĀ (jY0F3As6DFI=# PgǓggw)Tϣ83l5榵-At>b;YXiLLǘ)641 d@|/gsq%É!a_מ.$SҺ-+ IbxrɎ6t͒^X^`/†맷vNm? W$VX̰lNe˜56~v.im0>6VQQQQQQQQQQQQyc+_zwn}w;W^K__뫛!/GH'VL+yAWR4̄}xA};s20@*yM}f pCccۺQW[g9TWoh ҙgQ=[3;;3 DϞ=3P@gvfhANHc=N+"`g!>0ꈵdnfВwHZRπhcޞ0 pot'LCGjqLhO@g:xr !g>'fF3cq1 );S#5OLjq);L%NN0s[6S&{g2=L'L T mrآOHkaϙ$g'?Lwҩ$2d&DHh ZYEճ63&gzzlv~;۳e&#^Y,*k zxr>{!z꺇T6ҦPT&PBz AGLٺ"leV%.Q\කjɩmk[8U$ ^d Y2K漦ېD}sV_<ճ[_?/z/*z ̈(E,r9sj nEy=rPwك|hkpY?4)#k/'"Jx3N gS:)3|TK6O3Ξ18Κzc}B}Fh>g"I깟g;#ew"1hlD:s8ΜCv>NFtYcΨgǭQcn"S¨^UJݼ6όYSIoa]rWOh\sDq% ;Ϸ)kk6RחMҶq ޴a@7gZ<h3yƞDR|csOxtfg .Q1&,eHܢ\{$^BF\@Sx>hpq?x_ᇰH|44>2.{fQ=s |L8yRL)zs8Y:iYb y04F/+ C#ER|9`#a94#q5Hژl_6тĨ\)3d9ɼqK,z4'dt {nBfF@Zͬn/LZ3cDI/MҤHtE&mЋS┵)n7o`5ҹyux2dvK¤2;YgsԆޙ.Ȋ`nme5KҤs#ڪ h.(eEOIȯq/^[*մRH=2A@4E]6on3dӗVVQQQQQQQQQQQQyrۻ=n}W?HH3볲w?sҘH(=G##R~A݌T?3=KZqzgQ=ZϧϘgNB6yg6L杣@yJgA Գ /JgҰ52dP5E2l!8ޙp}2,g:l 1Wmygڳ1=F388錠zqڨ^ݻsOt=1\'#ϓ̘>7n.N966gǛKӤyaҁw')eֶtFy3XSj2msFks|de[&͙&o,VflAZ+bk嚵1km&;NM-WϢ_,{U?{Jg6HF;@\ @Yq u(ge\W!lqD"SS piFm}ׯkv=5ʦ]Z7*Xfg%6\r("eD@k?`E33SHp 1,"1I"d' Rm86xs\==gq|Ϥςq3w$pL-JT=G &\G.,\ Kp+9#t>PAlU3tlᡂzF9QpIr~`c8,^u#gqқ02La|x)0 tg6@E3fi sZjo.&Sp]׮'igcߘk͐9xd=]0ʮt[pK3SHj48ǍsI̊[9p͢tHtFHΫni5ST.adͽ9J(wܥJ)St|׫7~m2S57|zd&\N9|JfNV2kWA _n5f͈8@1sYd X]ްKzi/%-TY@qo_߹{s탇woz h:Ѭ8c?x?@.Μwgy |C@9q#ĉP@:ez3w3%Cgk0320/y AA<\ Yʰ=:#p(e+ = v H|2W шwLtƙ|3n,CvfQ}*b&yG>OKUsi\ Xٖ_^b2Î8e,M{:mN[sFP6c^3pxւ1GnQ+Kls?tF,݊#(na)"l@deD| ތfUFD{$nyMomÁ23eiU6rجm:l?7S H#?^o<-[Lc$̶hmk7,$Em;;pwe.o bWRmʯZ hF߾u}{߿s{ϟ<>1-_)I4[qtت?I3D #3'>t|9nEx ԳQ@r9QL4;i0Ѓ60@gټag:̹tѼLutā@`sYD@_]68X!5F͸}N&V!gтsWaAŌpʘh؇Xiw᪵2ϴV muޚkN; &7"T:g`e5l0s:րxl3:hx+zg"[WXgC5D+gY@sts(Q"2\ŝkJ ֧qJ a8"Zҭd--7ӾigqA6{fާ9/mڇ/Iυ=3^k h%qbdnS5rCOME^\ Fn>?[I@7hZ۹}wn@;DLM7;c>d~Da#8\@#z>m!X}NQd-Ҽπ}A<|޼th+6i/Y!M쳅;Z2&VmࡂƌQ]Ш{P@npvHoܚunIge]I}y\r}FVh3\@&iRsZb&8 ;k3d?(` Jɭkrj;ʬԳZN}qήzI@s, h^9a9$4Q$ל`' zӷm\3Հk^p4brf`'LH`Qh"?% IG׎9A!9b6YDx{⶙/rI[O-W6^\3+_*************ި>߽q}y@_|`q柽gAMFDFSwbYr͉`G2uD#?X#Ͻ ksdqj8i2N[qf&t=)3ę&guta=~@4E?>cpк0h]4zƠ5|@ Ȑ)`\2/ 0Y XƕaIG>-I5cә5;2,Zf9c ;OSc ؟L^n]g'kWqlHp錮,IDh3)fv᭵r]Làvyg2Lts0#>dSrEr`91:VjnԲMX,D׌Al̙W t3%ΰ^uqBچ_nNm`\ Dv)GDԲ#FP!/iGOz12^ ؉o>% Oɏr>@ c9dZF}|Db:X4}=Kzʮ 6_ h&!omN`ލwzp.Т 2 hFpY\s}IsjNE3i7x&,@$9s8w:w/ܾ~ߔ3쳤.1NDQL%9dMJw&_ǯ5Ϣg 2'x-TmޙlX3zfsƏK~oaʘ&܅.͉.H $2Kq@|NN[Yq͒n"hf[ nnoܚ֢M\3v& $O:#Ut)zF$,!>(}f9&nI3!NY'OYbƉp}utf1 ;k"䖶m wG~9=-f-$G.#a 3yAF/L3'Ёz4P:b LHB~ɿ?o~?S׮hs#b9T=#pgˀFL;46g΄kP@c朷 Y5p$ ī6$Cւ@3̊]Qf͒a܊G;sqխm6:hV7JP蜠RCtgQ.Gp[v/So#~9dTI4am<+o#^q tK؆5~v "k TV w#^E TtZګoYY:uЍ_R h%6ujow;{;{o޺{k_w5#gq3!"g 0ΤH>Z2ʈ$c'NjS)yu)gϡhg9 j7y4oIs9o:>[zt3t3.Жg $zKysDFmuuD}f&0C 4B<7U{V?w~r;;nM4F\siՐ&#krBpyhi3oF3gc]sVHq3sC|s$K #{kL/9"K^n[iS0,!g>VFcw+^qF WR'(HN!@.MzKq\4S"q/stA6E~"Vރ]r-a GH  8^B+^/XŖY9Fdzlږ^0T@ύ./AEEEEEEEEEEEEE{Q@WUC~Ktзn Ȗ+qڑke@\=$4@{0X3像鑃GD,3i~D=6N13g- SπeLj7ι>r`_мOsA:./^;Zx`L7Âu:#AsdYc#8r&@@IsCqk qҙgayn<`jM]o5?^-zI){i)p=0Țh#%ugCL@j#v F4tfԂ]r+>yNvPAr )z]Am^c~׷Z-s%;tJg읉zNyS,3L.sV+@45]$#cY;V1qfζr+܂O>}6~ċ~\)xNxr'Bba0u)1)eT7z}ntQ h'pRM~n9\:ɀ$e8n+߃k/GboqP!oGƷ=-C?zu(5,J h&.ZvvZ;0o߼/}w3$$'Gp}`;yL~[D,6G}t+Q:waNhφ+= Rm͘wyg";K>_4D7_ a{t h6qspp^I=># UQ}4W/;KyꊁLkc I@]>O!Z5&qޜsݥIkn21|9ܙf_7fY5w(>k&; D^[ ;#rx`w뚓gjhsЭ>;u[<ǫ6U<焖gB9",s"3$ё@@ }9g)pkIj[pld d?PM4_੕%׭ďs'!{gNOAde'D~7£;ɚ{2ny&D@k؜*************oCt\4-ӳ-uڞi;ׯ܆BF)p|Q,r/h|GDΜg^s>$6lSz"@uK>i (a}FB|}F-g.EǟmCϢq\91l]]Ϣ}F<RF>G4ϢJ6Dnޜ2hƙ ;ےwfLƙE_zgڳYҋnj蝹zf,悙]RKiH//Ln3Yڪ[>\QIg =Z0Ϊ[v`klkkpLv}twFgz>t9>c!=hfk4B,`Ej+(p-ճp>䶇%p{ hno[ ^`MM/Y$rxe-{q{ \qOj.F2:nRU%UTTTTTTTTTTTTޒt>WYmvmx0q$/|$a)sV^H!1|$e#eHYw?b\Wρ6|E3z,q ݾƀh>S r}B6,r|M.c=9Pce ]hQ;\3)cԘ}mp,›=68z&,NKWM0L\sәZyiX2gbkk_C\:q&ጳ55Pbm4g '9îܾޜ376|$w&ꙶmdI3qίzU<57 I=  g>XfZAygH3Yz @ΌC+2mA(i%%'*9|V""mEQ`Xv;W[e(;n"^qx_[i/HCfFoTuqlW7߼**************Іg[-A@߂ВH~Hyd|GqkND|GФ"gN4p1͉l 9r hT>yg^8<`@g>_ hT8_48x rz 7>#ck&$VmXqƙ/} Ikt:˓%a9ТYyyJ[6f̵a/O:Ӯ V!uǤ,y>nJH-Xv5M-YRfMR^J{g<`PиhI=Ɂ}fޙT#+h7QC k .bEf`]XYFiY|fj;Ythir`|Y D3"gFPa[Y@,"怈Sje.:-]xwzV[$Ð}Q7wT88??+^ɲՌLS*************oOZCws>g?~CCB('8A"85'3"?69w$,!((h;snmg Ϟ3ްwHpy>gy00D3hQ@SL2%s"E BgBpK38ҳaf+ ҙ:U?KP;@0,œrJeyB@!eS{" &*[^QKvݮ{ t.dbpgMoӭ'87Dnu*5#]o+KJ@MtԚyѲlwn F@Lt0,3!e,@ zgd?8a1>Ezz>:aKޙ# hχh;I g.is?R k%רF, >G0, h}F-C4J縀e b#Fi`D644AL*8IW&Uj}&zuY}#b#Lif8Zeskg> 9[󦖿hev3nfU7 k>Wlej]V,Jg"ޙgʆGD@s6":j^%9Sm';T*|kP15͂w^ё3b~ J Q+#I[ft]zFd?_pmL~Jn%%z PdW2ZdI;%?56Q@rbl8om[{GM@K9%!#(o27t:Ǒ&E>c}ta3 ;3 z I 9 O>3X!¤3;mI=#8#x+fl. 38/X/F39lA[0eLj}vFi32~9wL\dž+8M&FkAՆԶ!"g{vHڀp=;v=˺9PiR茬^38k̵is}6ƌ<qfl>,l⾵@ X朖^հ@{38[!YY4Js<5܊PI(XUFL4EA"9y6T ,zhۆS$U;# 2l<36SuLX [wqʻvq;y缁``m)Xı*"1L]JN@ӭ9腁>,Э:tlq+VL`[!OqTm;=GIlWݲ[A<w!cNC'?]b%+niFgjcs!TQQQQQQQQQQQQy ?0) f40Zձns^ `罏q9;s׾s~H_9' h5'"91l⡂>u18ψY3OYp=}J}dqؙ{q.\d}|ѹ aʰ 8dKĈ3WX@gI%cif;ywaumW׳5=n&mSnDs;h3,b-( 8Sx3J9K"s65h>q8t٫g$@'h%+$Z!Q U0tfG- f 2(-6(gBO:sD@'`6)g(Er!W;^mm3kVkNL nN2!E]`tl a-rɄ}{э&oWm|m"ev {>(MPM-!lǾItֻ52Լ[8{u]N;}~(鸀lW畀VQQQQQQQQQQQQy" 淙t!7Nom x;vHޙ#-@ 0z `53f!:`3"D,gL;g];<={ZրpY΢_ @}"9[^b u3ɂg5KPYtʢz`G5gn8Ʀ4f Q̪6 W3[ֳa3^J-C\3%ZйYlH\&ES*}2G2-ʐTvpKvF3IPi3>C%wC2[svjnS5Wb'I16ݺG^kۋ՝$kwv m~^lC h'=t^Q@ǎd,#Z`7B]aG\(B@|'{gT<DE,qѮgdYspНqu3soiy|x`=XanG/qʹl_1 Scqw9{]sR3ڈN=>3)SK[Fh3碉6+Xx%)xVV6΀XiYsu7'Ig˔bP_(dܭ]9:)pYߩ;58M@jmn $ ;EfX!(>ݪѭusaخ[dj&W3\7`*p_م~y7MBz_g4l|A~ޭr]j`gf6qW߼**************zm4YҭaAZƼݺ/w}󎓷 W;G3f+k8Y7`!qL(Z9j-R 4/3`G|YQllWup7EwTE*68{5H?~${dH_gXB"kv*NTv|Uly}bJ@59\@&y߅C$,`?>f Q=#8SNDN%F- hBo|{}r; n}F΃.K/8#p9Zp^9@g`|AGf%;[&[`\ fQ3)wFH~g-#kYH8#Y8Gs_;Q@sT&E3VU-ѝ=TT(VaGM.SA͸^7,#= i&pPD#uMd烆4zkG-rt_zjA W!Et+Zlꀛع*************oU$k5^wM_ۆqݽN@{'}dIH#ygwHs/-IgI=:e#}`A=K9sƹ>pAsႍ\@39n @p`Cv3 h>Oygtгm~ҡΉ9Y@/).ΫSꔉM[5X df}΍:=kdLNv26$[kSXSZqna>e3\+&,kg+tm|YKgN`YF}6QqP@KȺA&EL']z"; 4ANJB0 Jx 9pΞuN6LJ6sN%_~ﳁ6ŀxgCڸ4 Cz4l_/yaʈM38k%WW6|48j"cp-v oy]9ٰXՆ48Eg{m3gmªXᆱvM66g-5oLkk:s*y Լp 3 Dvfܢ)6iNL:I" țYp!9P13>L[90N-W߲#e)>lkEFsph z Q̤^2iSpiv.^m`h.ZVL ʙ@wLfY=,hY&rm':G%kLG{O(`՛dq@-~CK DT/E3F@7t koh>&w~#4Զn.[Ų/Ko^}~G!?vs#TKURgZێi v?SPL@ h@8K$ p9I@_r$#>=\}&, >ygA=L3azA3RU2'gqM4zg2,u=aYRpݚс4>3K&C@'岄D3+C3!8NP2ΤX#t"l> >s-gwΐ[Nc]N޵tVm8w:Z"siNEUN@rH;Uk47%Dwn I%#d鵐:7˒EGz!(FS\׾GrS3^F\_FTNSwKvJ^19+%UTTTTTTTTTTTTޖ:%hl48&G_=#2fE3_q:nE-f@ЧO;gN(κ'RA7lz`}>]3"ݢ}+=i0h| 7 >qP3|P<5 9m@y&Zϼg#ЂzhQ7/SDLiސEwFL! yޚ6gu`#n͛E;hcF>ׁDzezFHYDP$y= $斋YD"(͔mgf6LY3΁qv138yGVQ,3UϭpwNA-;:)dTmt3kTjp[w}4*ˈJ^Q.Kn7xMpʜezAoGrS3nAfg<7n[ktU],ԔVQQQQQQQQQQQQyk" tX5@K@?vʽt3w:;>!L:CΧ-;W}L=3zyG\7K\ EȠ\\=s|yؽ<h+á;7$L=;SvQWmzggn}t(Ҕ4IIgiؙfuϔp9>9 jm d9sj[jamLD|܂$lU|GBG8ەU+N5ֳ(^,&iӮv}fcT@ˤ'ynm}QLvdLq(6ڈfX@ٙ:FdսzgvJzDt=2G~U1;܏%r⾴ჺ|HYt߂ V7bO䗏aBz|S?FcV+tJCEEEEEEEEEEEE-J(öw~ nt—? fi#8P\3is G' z;L=깟<@P.Gσ. h>_ 4L51j}g) h >ǚ7fq"-`~F:@=/N9$#n >:32KYsjݜ47̒[qҋHߚ7ұg;ǍsVmYn9tH(k6fFK7K46]}M7–+,zm#:qsFŽk:D@nA[CVN<Ӷ =QTm7[fg2>SL7  Z~ei޼1Gt7^BVSlvSO.f䖡M[? s恦ՉޮTe"[իUQQQQQQQQQQQQQGЛrb?вv_cΔP:BR"tBɆ($.gC|>w6=b9g>_μ뙷<C6Vm Zȥ 6rsh\rĢg`|2b]h%3g.GMn$ӊg$*٤ `ikcZb^΂tfX3vvLivk̢[B&{yg: P4'"e~w(Vy~YBI;&\9xhܰMGۄo9TD@Ig-m7S&-6DaiFܼ 89+8Hg 0ΰ66\4;PA^lWbw^ݭY݊yB,R\ PͽZ@pׁvYבu؉XpF=}h14ћ1Iv)n yoJyRb~sr׿yUTTTTTTTTTTTTT TP6P@c em2tT=#n\sD:I>u}N>sDĒ ҳD<8`ntELd$gBĈ3>]iɆ#>g3\M f'BL@gA7Kp Zg5{s6֌fm`kw&t9⠱⹲ʷk^jVKE3he{-ygA޼d}FP7%Óc & 3~%TAų,}H3~FL3<y~ t`Cu3Vm}>T@֌ f-ƜhQ@?/9gL3`7 fvQKD/E‚U.ExR2uʢn3>Wo9E!9 笣e4^p+8GM4QMysduI }>읚{6袹Sk3njUj nEP@gRLsuQ%Lƹwt=u7oŸJw7㞮%r7mqL)yùc_CMo6ZuV%CRzU*************oKЦR@sA,!䣈=Es}Dsm3 e)⩣ R|>{䪍>}0rxg`D,V<_}.0χ Dan}-EK@s =N63cyvŠI{vҚ@=Ig$thn%=X}NZ9t8xp̉;s\7Ǒ4:h"S.gI@dmE`3s2Mǜm[Mj7Ȥ8̦eL杩63sn"w}t Vޥ]X+[%st:כ9 8̫6 h .agvijwnj9h l܍Mr\4Ǩ5}ok{Vo7q=o@z vMmkD@7ʻ@t>59&UTTTTTTTTTTTTނ#O#O.E,"ZqrX3W7-p ;dSh%}v hQ=ݸ}Q`?_3!>vn]r%}ٝW@3}sdy~A0<+SHhmIBt35G3 $Шw:nIF(EB-yD w$ ǀTm4I琔S\=#q&8g a[HϢz3q -Hg<`31fgK}|ƙ;sMgΒw&׍|ؙf&4n6Ywηɇ8#r$.2!`$=/氟?P~`%#ATdZ2tW+ՈV ɱ_VQQQQQQQQQQQQ[ ݏO]5IDAT51לv9ВYA, h\$>'h^}g$źgƥ p)AE3=rEʐOPj{g6y;uٍ4ҙ# '@=;|unL˓6\=#qfc΢nI,|EwX02VWχ h'gٱal%ьT3.DkpM78kXlXDbM6, 3e)Xp ɺp3p#m9YLFp ,g&ELsj):.3`vޙIt31UF͸^#;3\ot&!FCst89AIBqߋ)f7"V[nOgGf 3:hQco[ZzxVܭ˹WEEEEEEEEEEEEEtB]o->,!)#Jz:H)3g\JD7#g Q:#;27bφ$EoyfygTx Eʐ$g蚹}'9Sq섅SX^yh3faYIf7sqU΍[:uɢ4|ߨ?oԀF-∓#27WY?v#<}lבG|Gxl7'<MGFW/nOt[noԊ~%Se'RZEEEEEEEEEEEE{dQ.b,jխ<]:>pDy#~V'z'ehiY͉h搤 Md9AҐ>:b/Q!gB}6Fg8Slޙg$>G5f}FM6-2윀ygX9 ֑Ys&:hH(.31-Ҋ]ZNg.{g >D#ͽhI:#Q ]3-sFD)D=s9^r3!u{[MR 3ϒsD@'gfQ=}&ƙ<˳{ 0h{;7 ҿ4tMaƙ9g ${vWop, 3~;?4 AbF;ج?6kYSGQ{lW3i&zgQH~HגYo;ZfT {\~ʿS*************|+}a{)K⣓oHLa#_>\&>"E,DyޙTd#G.Fztأڹuh"\ Du򶛳ҹ7[ນKgH܊:޹ R]gbk]*т>rgX!g*CLۜ4P@s, hQ=lЉfDl4I<2H K@?䅏]{bW|j7A󩭉ɓ'J Ca3"J(I)&8w8L7Is~Y {ɜAG(QC/x"?Aahs"a}ٛ Ggܹqc8[%,84,O.4g:!3A{Ꙑ]pxQLQ1y 78(w&*ǜ8Ú:eXfT̸3>Bk)_#V>.M"h);ڰh6aӶAF H#k6ifV A{{˼.z^6q9R!nQd.حN.NE۩4Epyo6+u˴Mjޫ5w$' h3+`[Mrݬjz#6#Bws o6H0,}~_# F!)c#]EOHCE^5I(½q:7IBsM)ԍ$ 퉣KN@;zV\Ku>7Օz19 hMv=4stKr3Es"{ x3g&Pxב$|qpZWd h>1=I3'jCn졀f#ςHha.WcZϲޚs6猭yHͳyg2`e ΑH\H';8T h@@YDtIMaIS*[`=6g>N s[9.-pfL2,gY@sD=o,=W['z0B盆d{ac75zSKTmy~8S D@C\3ģ68lg&8hiqMt[2F[(#3H; 9*'o3OO݈~l5ص;VQ(2])v$Y@o&P,Sf۲v"4WL.Ǥ3z1h9[3朵1k8u>м9nfҙlP]#e:\]k\E-jeHr9q@ ֭i3Ug`{H|HFS&]tD@  >gl'Cl|k?gzsи$g"yذQ%]21zm hc*Zmpc޼m9v:|ڸ47}Q'}Nfz0(HճƟ%L3>Õjr K{7D"K8Oh]`ީE,"A>OڑЋ^II?7繯=uQIMOPkU[­F hV*************$ |.u^lt,,>G"tD3'j#~3WH/gU>K3GTϗ?O#ImIFh~h?q>随S6evX]A/'WUMGcՇvYk4F-Ό_ h}zb.ûgδ/>#Ǒ ,KI4ΑZg2GDs&s1Bgs,fI=nC| ް!yg [\Ig"{gR_&3ГW°(6LLIϩ963>3,gB@xFT=% ڨҹfX46]3ӭ:H8YuYNs'P4˺9ǜ\m*Q̡Au3pJ{j\?8l];EG=3ڈxg杷ˤ9`ךZA,sSoj^ͦyaܠ A޹sz::Y8'0B>sHc_n<2k*fU0힠|tzP@"dB[}& o3y՞NSo{ff=w+^V*************&M@jw9qوwFtN*t>>aعפ}iy;<>s-JgN`[hTme Q={X3W< A=:3̄p+g-gygFjI/`gMس!HⲝسQZ&M!hT(kvsklqPmHZ3[i\+']3nC_A, hGΑ2`ǀkVegcΰ NсGm}ܕ3P=VlT5s#Z>SL:7:uM]snnZƙrY߬C.)F(D4'NEKO# s"Z^fҐ3,jk/[VvgNMR )' _t߄czgNeO?&1\{٪ 6{:nS~`iV#w)^J@| WVRk\@rC'+DŜOt1H}>t\7' . gTq1A~Bs}3qLn}\zzZ}kpp3&{G Fsf9yҋ6aeˎ&YH9[c="%cpf>,fNT:d{6xsD@{dZTA3,2ʚ-8viNؼA6-睲M<[v+^%Y@z87nj ͸٤%ͺvK8];FFt%,>~=4lm׌lWZ&N ~ owfUV>,}%_| */r~՗~-=zU}ѪlWPZ\"c)?J=-Vf/)$I@/V l3 yT$z4=2wliOBߎ ~lEe>{CP@sݫj6$g?τYT>4衋:bжضL\ t>getnY 9&}h R?lHs63s6zg>S$:74_3h㺙S] ;ٚh3Bk7qwM@Έ$\Y5;miqN>i'}t;guv7M4-:sͰh Es}F+8>V\R\nn5>֢+Ր5 ^n4}Ѽj&m0hյ{M =@yg@#<Xu Rp <4* #v(fرfgvS{֟[vp8hY1#1_̀Gǽ5߆Wj@Ue&oūvU&W}hZnn6956$Y@3F6sAkP@9=uCv7ȕ,8(r9z!}6 7`ma -,zƮgf^.G.7Hgʰ?vra #.O__Qҹ;(yvc>/LU<">O9+S.:kSڴEf|y֛֬uRsL@K"zFhݳ0hC(-9zW쀞Ή(9k;(.P]f}lnlt 9,(--Cve@Ѐ2vCu3, @lIF(a;@•тj fW"Q7G3%v=튱Sv:ثIgmo6*MnTjC371&j4jּl<ƽfRőgNڜU ZsҙK'VYJLs~՟SVPm2ˌ3YMx.U [5A_/"҇/,/Gx;'x{ĀJ~Dk`e ԀvE1D@o~^^)2tU(zK3ﶂC岸)_lȡ=H\@1}~OcÍx{!8it>IaYУ#;&F|9M:i|u9g/^ʔi}uZf#h>Ӣg@}fsC]XҒCs(% |F%,@fmllYږcl:J hED(F 3ms@;#vD,f9&:hT@ޙݒx` IgRK qP6~4kFXQ_6nԵAҹqټg2|; nC̡V:Q] S*@3g~bw~zxK򂬋Z5 ":hK|[_S.1wM;qDH(E Wыs=Jc*[4K@o9k~9s8k\(KB}~2Iy' W\7A-UmHZ4Hxg$I c.\zz 7`>/_%i/>ZСwF>3"h^*,x`D]^uqsmݩopMTϰYY5sml&΀4@m;s3̔e,=e;GsD1sx熸iN#3-szF}13Qlm-:L44\wW5&gnD4 Wk^ou}R6>uZ!>Ʈgf)x ,Uްn A>LG돉OVU{f'|i<4SLjss2D2kҙ2\˯ZUXkDgN4}Ou3޲VU }SxծzgA_~dmk!VQQQQQQQQQQQQQ&I@vi9JSF& fdWj~(GFvΞmI${Kg;'K>7zF>uϢgq ĻE|E|y8\06$:gfI=όzºIy0 ֳ!mZ>G3g' ϡu>S`}gs|ҙv:'t=3֬9r"y6jhi5]0Y޴䝁C:%h©gT)Iv*A@s3qЖg&VN"V+kN;ou &-BNZg >ݒ[wA3\3wk1/4njMzOן;5|KhzkI&8V} դԟs~bW;$ V ̭\?Tqvþ|9YYF|)}FOd ?nUyن?`_|*>3Kt)_Q*************%n7x+%,q zc hTA ͢nFD7z9+C-}&: 7BOlHlKy~ң0ϽN;k\dt>}ΐ`-gQ@B ؅%u3d*\{gep,zg݈pi׌:h5 V1Sa44>L3, EscMLvP ^:q1DsV;gF`PAj#UD7kbUq9>nvPߨ7cϻg7ZW*]~O#ϤmO|縀 uYOhArr`yX֜3«j?K)re>*xT S#MVOP,[866˟w˽7֮;~ݩ~ѭk5 >k|)%"Jy~7nD:DFnVJOc7>r-=]Q*************$ hRRL7ҍtV|)W[\- 88LT:ȳ }>|P@s, > > ޙL:.2:c#>s >'nE4oP >6B!:*9Ts8y7GtT=;%H}b>SHF}fZThdDG۴f}MZjS2w{RJuMQ:+^H2C@sxF5 ?kY93$B>]τƈ:zCCn4ufӸބuaf.zcޙgXP\KQ0J6Si>jO̲X4;WxL:pP~8)pJ+\xl~>,!|J'`Ȓ v$<\_w+W^'׍t_ua󥛃>]_wڮJ;s$G@Vω?G܇4Vᙗ{YGV^ h{4^\o(y+.Ξ>$g=DלH\=#wB bFt>}F,τ>1縀6B,yz5=4>s<;zg$>7(hfEi|xg6Vf\$3ƌS֜YVfs`)QL3мY\4BbՆТz0:@4unطQ@k:z^ eq}8vFΦ1;kr\D=:I@e|;Ahy8罊E9\@ÂgyS!h f[ZVv^le>#ϵ:iyF @@ sL@?z~^]ƒ g#xNs%ʭp,A~/~a_, N+#h ZvAMi |+/;9h~]O<^|Vu/y.?ހΛi$%vf[f桑C7XEEEEEEEEEEEEEch ;Ϟ>}uLNI"# 8}>D@}>R@gq}ag8Kqk)y|Գg T@kt`4i4?zu8cWg4gA@ s4=tyeI:sz(fuj&RߴƦ9&>6u@2\nM*>Ý2n!Y@gP: ypb8:pf+#(6( },z-a^Z(-MwtzvY`t6>s0HsT=cF\Ap叞ڍ̩s, gN]z+Nv=jCR84Wky e 4D"?sX|ކ'//}`["E(ED,/zK@*/3+>62TsnZ hy)sf0}yhtI92GDΝ:E;J82/@CvY{|g;?KCDC_pE.\BƐHG>pe%" h>,>_&F*`xD=̨s2?ᓩ U5KY{ SVfb ggcºgV<edB#e r࢓5vq/9旖‚UYكKfqVMNkQ[뫀S_ukXN:o8DA2Qhɤ3p8bnaMΌP.HZg['m8 k]r|fR  .fmE)N )Y%3mhR;#aƍvݬiױ|l0x[n7qҹyQ$q Y"C U{jNgVO,Rk~^uRa;U~ ؕWQ}&%^yqWzA 753㢙fn4?0,@1۹YN5!O/n?ޫ]jx,}!|PṘ^O$#v4ۥPM~ᥗ{eة'fꉾP.V|C3O&?v~)3[O7VFOL,VZu-ЗΝ9} Ξ9_> iK@͉3"3%aYDϒx>K-gF Gω#gI@/^ue=-M3-BO D3n h;5Lk93C_YkҲ_qr ]\vJN}~کYt ]pL3 ^wN3s͈29-L:Ga6ICt民gAú@Գb8ɉHgN D4Qϒ}4ϔFCD=kw@/Ȭ>٬=1kPA*8 +z|GXϨs hp3(zPqfsͭV>o%!:ϔnu7v}[Ϣ7&;h ?%`zNLNEgHpIu@I Kz[@_=w-ub/ql 2((EpZA,M>s;#}λ 9i3t1$*[6o\j0yl^k'.iSWP@ؼ!Hgv en毶2ǟE-g{zZ0<ژmo̴Cϴm#9vCrNn/E?Nafn(EKKNn,l 8t A=G6jkV )1L[A8Kļ3pFeXاAas͇gaؙM:H:xL7ozyAH\zn ϜjU:b I~ zƺ3Cdz 7(¨7lBͽ3;*OiSח~Nv[~f[v[ĭrJ<l %q91H~Yte pq3Yan4Wu//w`Sɔ/#AvCv$`_|6 I3~хuuW~{lo=1SOC=]_QZEEEEEEEEEEEE-H/]Xjl[=3yPk͠Ш[6T@  n·79z]qp3瀈zճLttYTρ}Lzhy=ˠ}FcegЛdϸQL3?l03FHk[$9;g {oujHVbzN$ϑgQ:Գm&,}?oH%IgeflxmoY"D(s,eB:{mpA h 9}WݢSb9f9IAU^mrn4z}F@]B\=zF":ɰsEJCsoe8[O##\TZEEEEEEEEEEEEmH_-669!s~H$y#̏Os~ 睋Z(E >hQ@E-g$yoLO@ng<7Ix)a a=3≮m#v8젣O$Eglӯ_r",.Yyt@zUg@>.g. ڦMذubjN_ vЭ!bf3N@[)MSl9Hҙ#g~fg8Z4Q=o 7vb/{l-`qgv`->߄kC)ouvANl6{r_S1\{`gtFxB{6VUJ3sܮ>S\ ԃ,:3,-NdBKaI( 7"h`a;Ouǻůwu;|N.o\~?68KdJ[zM]>i^Oͧ33H5VQQQQQQQQQQQQy ro56L@K*EH~9~HL=KȕҤCb_o xal y3 V<-B n -PktC-db3-}P=O]iM_a:ӣ-Tγqٰs`YϢFLtwF>" 9Wϩ@7l$3;!y -H~-ڹ%#hfqo_KKdL&g&;[uK6ogpp9ֈTjıRMqDN:E3@7#9v0ƙ{g<qgd"{dgavS`!gX͛B6b4h͘zxh)lM:\~bV UA杁gVIÆS-t~eNϨw#D R>?yrT\t'fĈ;:ys%/d_R_v2_upU' f #|2;o9iZG 9_v/W̋v|fm=6Sַ2Эj#耾C}" h>|ysz:捩+-(s skn A9f0(A;7IX 3 hI=>KzcG6 aA:/D@^XNn^?Wc=E8LO\5ˌڊjsmݩFs8>6t:_aX[4N!fXx"@>38.S]|aɰ3\"p/mֳ/ hd_v2Ogs;Җo>zv!:#^S1?al r"Z!Q%{!Y搨dmܒPph >z6t30yzG[f9В}~#v3ޜkm1-?Ǽ3!]>\SX^qfaWo&^yŪۅ%-n hZ,g 9 hgK'PfM'gzkH44;s4ڃ&QϽs1s\@?Kh_xAn-⣃g-t9ϡ&9DJ 83Έ$9_w?v%) 7Y Nn';9>|9$B,B"kI|WL3"l:i'zo>w7[J@59B@o}3-JNhzj,6; b<@ 8?IhjM퍏 .z;m^tz;7.;/_rfp6(|漷y7d!"N@KXn7>ýO[ʪ]^XK Uu7|-\+&7lܨ5C߰MG[k蝱|olXM.H2mkkް=ȕӄVZo g5~靜nߙT<獝5Ѽ[]/8hm*A@å3'fܬ(o -;u]BnNavG l0LZIz^v蝟f9u/ mvf/+B)bW9Q4lѳ^x&Оg-4ιPe\>B_|ن"ҐroL z ~;Qw(:CUu᧻y'od7!Ep8ZT҈9?/~W(~[r'Nu'Y;I;xl7Z)cyX h O\vv~BviY_M53fR /.]m##S hs<]R1ԺxɃ\@(3]ωZl3g"Y3В}%x h^,N:7>瘀t>" ch-8ed¢ꔖʪ 45LZnstP@#K@g"{n9Q@[VĞHFt9JD@se 8ܦt3f'k1C&Eڴj@ \z &w=`&Q@S0 $g"I9b5w5j] ~(٩t3Ȇ9Ϭs"I/KgI@B4my'>T@ɰʝsD1;pG1ezdh3w |so7Dl򷠷NO ?;(]}t7I%;'4<߫h|vqt"W.H#d@8 nz p>Kg l2ybK[qU/zW|gg ?oPXh}FfzWψp KS)&c z&D@3P@cG*8;n~p-.3_[Bisu Hyń+**|gf:T@) uimdB.E>J 9޶A1-YfvT7㭸tgT>ޙc 9>G䝯W 7[u)ڝfn4T>ĖFAq6OtfllU>[v]49&ҰAƹϼ3S>b~V"gϸX"}1̉h4 ~9lwr?t;';F~ٛӝ_y_ݪ'q,8tGG^ǻlnW۹/N6_:/֖|Q h +]B=zyo+[n/w," h.$q(=u%bЃaAQ=#S/}&#qτ }z}EIЂ}"g.MRhl<JBb5W[^QLV<ǩy-nTWumnnX :߀kA=sL3c9:*#D'eь-p7\p睜#UJz`|DA.rPJ&"gSςԳv[ܸhnԹ}GCLOjD=}ktY=KIt]#zv Nkx pLOd+޹U TPAʗ /3D=Ӷ .s/Ug0S#dϷSq~M|}x*SO8?;z\I)'{LXC=ξd>a\J@|, U"76>jsL^/f@o2^Y\8C}`x5<_pD}b dGPhG[zg`RgbĿh׮+>pm4Y{5qNkqE&"IҔs-}}-E:Iϰ-@a(XUV k#yg3=hںU0[v̴0:Zf31}')D4;iMuΒnfd!2G;3, ;g"5–]ڪgR!;kߨDsyg;#>ۍ:Bs;ǔ$4|kϝK&>JO37DN:agr` @LP:31m&ats0e+?܅E8,@qO䋿5_H[O~.Yl?7%C?=S͓̗K핻C2|[@՗+ꖾRyA@_nܙV V, 7D"E@$1|8} hR1豞 XYTψ(GgR36L\">86`EP=/R&AIwe>O֧3<ڜ#}2sL@p( W]YrKn}٭xwu27}^aQ0`߻=triM8YЬjO:s/M'# "-:,;nFW;L@l8`\ZχhR 73t&:I=â 3pnH9TuL#g P=S*cD:f6 >sg?q }g g~ ƙkɀsD=_s_r_SIsdgY@c-SV̀䋏DG_짎f/̛,,~p3)xG"_vӯWO *וVQQQQQQQQQQQQy;K@Vk&JP[@ζuȊpb80|G@:P{Y3󕑎$E YШ%M43gj;*gƤ ^Bh>_@Ɵ)pkVl?xe "+../hn5iwŎ%-06#Φ) h>Z86dY,s7K>dݬ1v3A hI7tpO hFDs/z+dF%bφH\@ ]aVճ`~NgڵA@nzO<ss9Q> _gVs?y+u_kʀ*************oALfiV_hmj:ˁw\/zlڈ">:n| pub36$@@s|L=%h h>fozsDg"S. ^f7A/U Wς}>D@3t.M7 D3At6SvVgwF-zp޹ρ}6}2r~9G3y:*(k7}Fª}f(>h{" ;AՆdeƟA"<Z{:SρF:XShGZ^pvM4So~֟;'f]EەvS^8n9&%y.?Ik_;}s?.dvAz~|:.ٟ:C&://\ZG$sC˃7EӇP:㟂O:K9$6&kJ@MIГj kRV '/mK&Z?> Q@{Z1D  Y=_j>K#p 34u#>:hI@O]5cz">s4)x{ h>8&>ϒOj7|F:5w!7<} hWbsp,mcfzݮoZ@c6mE. >sXt>3.YD6kNϤN68x0grf;gu vn /٦Z9gY]ntȼE!Z} ;y 7H^-hygBsJM@4U;g>|޸Skܮ︎+_ooֻNtP`ERL$ @9s72s9̙xlIdy$rv>t)W}\H݃~4ߐ3Q>[xg`[Pb;QdvD|;qθwG Fow»3{wE;cnXݻIϾ{_µ7!>SLs~Pf 7p 6(rc9dq+jl1n N=Kg_C3/+V@W7(:3gxݔnz=3n9H3ARdB"YgC{"Ǝ hlڙt&lI+0, hU qKd>l6 8/3I SL$vI҅zgskN)RJG6BKbyWb0-xG$c }α~ͥtt&L7KJgzDa= 2Р38 BabCP쳁ϕz&>bZ d,syzfRUE[6H8>dʣ} UfN0}"SrG3lZyT̠8=`>o:ggF8uq6Q=3PleB=#>g 5ܠ%ElAFжf}ַf}O@S, h4Τs7(:X>*g&>kHJ)>}.gb^C"b m6H +8M<+kH5n,[Ckl'+hogvBJsHuts=Oem2Co׻L@WT@3ƹRIRϒw&_T[mA?t.wf3!θoW>Iބoҿ?ߛG=HJޙ@zn8RU=˽2goz,c9@s~*8sitv`=Y-g zL\|_Ѭ\(_?l97hFOOJPVsh.IU|3#k %=eV; (:HZC~g˫e*RnW#>O@% h5n_d3S9JQ@WL@깣>I>gU&]8=MIYۚѵdz&3 㬀 hI=3lN 7d 7\=ER]jSV!}DA,s4f9f&yl<,Ѵ%&SEL(z笵HrEdi ΨN 3睱 p>KC 6dƒQbawI3StAKwDI睤#m0Hoxv]}q i0%\KHϤ(gb3XLOm<-vO-'Sy4 ^=y*'мzfHĤ)y+ cz)pg\ݏ/x3 vB/etIuR;.NqHJw M"dZAmuUڄ3?^9;3ޙu%N*+Y!}ZAt,¤3tK]>`gy)CQ hL@yZ&}Գ'C в}&38gVg> It(PQ@㦂ҹHbfbP-rMVL@GR`"u8#k8c xgDFzI l .e D;*4zET@%= 1 +8!C#0~6Ķs, h}P=4ϒ&U#^*a$=7>{v}{c #Ϥ9ޟ  ٟsJID@dMd L@F'Sy4Q{=[^>y\\*}O@+3V=c RL'tRczE. .y."Ɗ(3/d<6l)"ãR(RmKI`B"""""""""""""_|ZѲOeyE ٪ R37(+WȔEZAWf5T}VhAT֮N3Nn3Xl#9}J.萷,%Zp]Fs h5YLt-+$]4?쳢v`[b J9hl3XB+$5 P'6= 7Ā>"xLL! DEM}TL) hx)0-9㜴HY he霱D(ŀ=$H3vDrXYy2Ό^AB\JsyH3t&T7 XnikA`! gXJ7x}RN8o 6dd%;ہm>ώogп3@\{sе=n vD"mTCxwF}; =qߞwOs ?;;v'νI i`_u >tL:%]asq(eG`~$e?)8?z&V6@!<"7̀)9鼉%g9kKL1D |ɳI@sh$}t>:gfm+Ѽ3uDsX* h{@|t2\Nigi+(83h)t@.fҹ32~Y@x%`/@֐wkԻ%m .sezvGÙЁo_EwtxίO>gR,5}r̃7>ϐr|:g=yg>{gmg,{g F^@LJˆul2o׍c "{7SJg4+J0\2TDqC,Q)ʰ JmZm yOzgUGT@kuQ-""""""""""""OԦ[bt h3 '+W,)$ V*j북6}fU9l tƆ hR\ `AӾ.hS\Tπ=͹f C,>sg"RL4Sϼq$в}!3ϲ3 h1yd]:@tP/ h1$P@f|s.+. R\м}Vz3(֐lN1XGGzUЊT@#(J{: PTȠ;:=pg`$%5{F>oIgBp?Oߠ>o A֐6ٿ7C=X`WԿ;xh33uy'}R ޘs?iе/N&00 JϬơP~88s~,c;IK7e'23zؙ@ T \sl}ay2}ΛF{Mz z ҩA lhpmѻWm~Tē ?> @۸hƕA:dR6 G_6 6]ןӞUZDDDDDDDDDDDD ]PY8A+YT?h &M'/^2W>e깮P }fZaVgzFl)j{s&:ݟ%Jk0Lt>[m>[n"){OM3i<}&zgVw9`^>!E1HD FIh}.!n%-q sc[~g˟e99RgW! }f}Dt`Ͽ`9 l)~VyK˃LvD;cmΐwwķ' 9D<ި#U(D /b { qp(9pJ>cpZmzf6H3e%蠉z>'Ug;;O祆mc#>ә;/ @s;3F{ WFv ]. c}ңE%oZ/p/ .Wʃ*(<8@6D+OkCF h^=&&"ٮpatX^u<:VJiZDDDDDDDDDDDD S-ɢndh?(ǣ3ˀ;3`MUU+3L=kWIչ"eu5D: J9O`y\jlA!WD7X%YnQT@>33<>dL(gY@;UdAnU(Ϩy8,__Х9)#ݘX@'L Y@k}NEtL:#\o y#2zV#sE5X {1 $ւpw. Jm<~dX{ zHճ>ogY=\@3L3ܠ|{Ŀ3q[' lv}qߞ[0ňsQ;1c3LܮD:! 7RLL[KZ`g,|6}.z,^A8x&o8+ }ޙ+y6y./j. /k/DwR˃˃ZIWZ@PCqxfreIa_\@/> h 'en`By,OB. ]V:.М}YQ""hѳimh ;3 оNCQ\> h>#eꙢmN 4Qϥg^@+3ԳB@{2EܝfAL)g>{Ϥ1}&:l3 13D Sqy/m3gAtI[g[`yZRϔ=6%6d'}Ӑj L I30#@ T4@Js,;;>>}&͝+gJQ=wD|C!Xp_Ȼ/ wd,g77wÜؗpHb1ǁ`Ic(퇒#k" Ll`9ڐZj=7hۍz>3pGA`IÍQm [ʕt}߀xe^&+ʀVUx,y \R*ϕR!΀8a) k&&ةAjүЧ;ݧ=>9VNsB@|2nv] h9qM*IQf+R+88&zjA4f)dUY:''kK3g^@3sk}WgfQ: 1O[?3iks;`l7{_eW '3i cл= 쎅vE0v"}1oDZ?l {C{nat}z#t>9Hs,;IaNzn$c4.9g;* hɬϧR *e Hv77ݟ/tcz,u~i4>>ͥA wHi?E64A UڰjE䷤|ӮWi#MT@;OsOu2}T@ -""""""""""""ɤJ!ڑWR neRrxѼbeU+9U9` Ӹ]\@4 |B@3ϋYg)r3zgdn0`Zapϒvd\v-}XP@B:F.8yGw'w!i(tD>G,-v);{= h!`78\*}lt6ygj}. hiAN:W5Tl";QkWй/77=go-Kճdqo7`x(:pL%X|4m;vcYɴdB3Q.X˜ -mo:g<۫?ۯo$4k7Z/ʀrB:(|1Cqc P \JqExgdbxQ?T@óFAJsc>Z+! hQ@RJ]ނ5t9p&2}VPp 78#R5+6nԯ0Uguԯ1ƙo *3(3Э0!u|n=%:frDs5ZX \,>eeY@̆$r>3mIn kON Ъ 35v\s٠O-mC\Y 7Đ1#%ޙ7uf@{=!(v(Q i& yѬ o"ܡl#+o<zb3W\jIA`qSAl-5zgl6H7>sX]fbiD={ؙHo' v=oodWֽ!zq트OO evI罤3ȅώ}q;?N m#<+ $6pI93 S6vC*y93ܠN grs5_ p'-zfzf/PF{c:΄^ pO \!@udr%='#?5W4\>ׇ7*q}@{_wsP!d>^f<*fmpu t  3tdJ},k}5!EDDDDDDDDDDDD>!ҙ3ܪ[lnvL@i';G8G)>shF]qVPZ\A@VLՆpl-/gEL=K%ﶠR"zwO؇йwOij7# h׾oҿ7Rne7 χpQ@ێ8dg"> I r-4gIRX\NE (˵AaB%OxyO 9L4g&}4yL4gK>`Fg^@] )3c爴 >$3P  h^7+`YFT@Gh/g}=N@lgz;#= ^?c/ !(͛^Yuz.R3 h P@ v{c=1Ϯ{WĹGRϕ4g8p$8J Kʟ3g"z>9Y@Ф'a~&go0-x&Jx\6#24-ЪcmA]!7`s* &ckLJEڐƘsp¸Y}3PsUnMUPψs2,K3zBBsMiYk#DFfu"3/yLh΢f F3s|g}kg9vPgY=hE3.jhvK沀j~MQn;9`c3I=K58K$-q3'(YS{@ؙo @>se, Y ARL<7yE\$Ee,SۃΠe\@cճɮswص/D{#}Q?>s9)Նl'zzã)єiڂD`O9-g8!7 }K#KösՍIьƙpA鬣̜xm2ǯ"tϕ eJT\\\׆>3b@6%Zsi@3sttTFu<)_B@|s͊+hS$ \I hipyl~z.皢z.E 薵94sG}3s\gCj0}FP)%疜P>SM )gґ6X;3?l]Y8xL3gnAf}># hnA9%>}ճR@sYky}VhmJ\.3 h>%ρ!ҙ;yֻ䚱3@qzV M zv6o߷&Xdݼ#{v$vy0L>80u8o0Tvl|,e;da}XOg,g3T=QsyR"$e}T@.z^^>xIdfH/3L4?( _̸55\?"7{ͷ7z&Y~z4Upb}KґtA+3«gBwғueL&=Iۆ}vk s>`}TRݐqN@' .VFw.dt)3T:]8W|gVڌyG]~tFzg hyX mYgCoG (^'(F%żb0q 칁χ閃XMdL8KԳ>Ι%L9p!g38`o= c} = ˽}>_KIkrأ2q,JɠȭAݭaB1O! R߬čAaݍ6[<(I:hvD@&2it3SUA"""""""""""""_+ۺ*:Ptc`>5~|8ѼjE!c2fEY2Ǩ]3τq6dB@KF2l¶ua3>z>oh}-yms3м}f3>KA<}wY>sI*I!">ɀ6IgJXkճDEL I$>.+V4Qxg$c}Hg.ϜFpERM=O,}ʜΜwlp6B>0CM>_Eygj# vJ#\@ -e|I@!n>hyCRى%G Xʂxz"M=K:m "hɬ4(|$gh8*QszX5\hA{z 7W W WJ4ʹ8#eYƀV'R>P4Ijxr##ZzۀG˸1R,g. z*:h*GtJtTxV+*EDDDDDDDDDDDDy uC(WUKlWUа8ygd<:41DZυ\tK]Lyb4 h@2(}yg.?MMSvj.$ݚIg(uEצ|:>uɈ6$"DD`:G@+X@ g&#m3X>=Rg>otq.e= h_p?/|si>34;`}Q}.GyM>; 'R c)ɴ YsL7JQ o* 苽hN`/i")\6+}JkKy>35഻##Z2|kDW43}kٺaeܠC!*^WW:<:/ XDDDDDDDDDDDDDO&"lr9蝑"v(5zF"߂g:/Csz.{&q:o` Hk}Tl6ؘa`gu0Sr%Cn4gMUcFZ6-s-glb̖f3ƃV3&8i,&Zvi25wƶ>S'FkXLuɀ>/mSActA)4ƀ)$M1q }F霱)%Rlp-tFzmQ`KsB}.VLPtyrC31Cа;4 MY "i3)|v6Xx}|~3e7Kn|MO׳VϒZp -"zWK6xwG<{QΨgW=1glzF p0bҙvް>lS֣I+ hICG2+p,k;&7>;odmTt*c<1%5] =7̣yhgB(U=isAw!/tEzu84(-y櫞ʠZ١fP)֠ZOuř!էIOaaU97GZno^595zzQܨQw})jhʰzln*ۏE#D:7NWMSلVnBPy8ͫg hϼVPZ*|F}^X@w5' Mnڲ֌>3>?.-I 8(7-82L>Zr\rM3'd@Q\"KxZL@f -UxgV:;34P(>>g}z=BLr h`;<g"VfІ(}6dz7&*7[mV?zF$ *g OY`q8$GGe}Sҹ94ϲV7tַx(fygs'iaTP]Y=Z4snՓѣ t. h* t}($6ƒ8C:jڠTвzFR(gkQY@;QJX;aW@hO@:OX!{3E !ZL4l(A+4aFv=bύwQdwԍPL31w%LZmLv7p%˟G#I2vϴr,KZp` bӖ'g (yK> h>^@k9\W5׀J6 \Wr>%}[?u>5}{ T1O8Z#U@wvu_g!EDDDDDDDDDDDD> U2H,O| z&YcP:,52_PHgFys,gI@gn+xp<ܹՐct7 3YՒGC>k[r(syg][зg2sEXgT\3i 8z ,yƪgfg ]ʯ'QD RAՆDĐcg}>^ώ# ǑpBR\X;c3i3˹,~|&g>O3p>o>7^Iz+D:_/uD=Rd6}F|_+zCSfD[CI/srwX=w3Ό4uG׆W4WpO"""""""""""""_|g3, hj>wt}V=E|_ g_YYGUAc*h6$ΦdH}6iۍ}N>+so%H f[`GɎ׳;3*g߮$%ߞM33Qϸ Qu0F3'}NmxI4)vF!gc,r;ӾmgRc# kzutM6 L=\3zgK]3\4|My`EL{7WlWeV^Dһe1L4QUd<=+ĭZ 6t\]]^8ua@u\LT_h/D* SKסtj]ڐڔ4;dT?oղQ+tEPPvg>#p?{5YNf 6 I쳡D(ڠ-x:Yy1NiK"M&zIJ8@T:+ZmhVrhl눠wsH;#H#cg+v.n*8$< 6`!L7+@` M6je\f/};|n>}2^N:~A;Sz.hPmsr4iFLm7gϧӖi4}&l3 YB=Äzg~+hnKYwWwW T(vPLxfTv)ssh;S{*@++I9E8k?7,/9% Y/ `uUΌ2\[E<7"%Yмn>S̓d㜡 /.g ƄPT@Z'ѷfLyc;̉zfV}˟Q@+쳽+ gS>~Q@}&u3@.ץp#d*AMEuhM̩g g>[z.b-to F2; Ƞ#2DP\@F`R&}FKz=l(PHgscϿF׻zm>vGfwt yȾGƻ?#Eܒnh 368uفq'>{&إ-#IєXv4Qx|,m9NԳd3ٴ,I=R,o<3]kݳ$ L=<֫}f6zW% z\/Aw>mlY!Gah^.s72LR@YєCaZm2+\R]A}Ouy.q:=hx{ZDDDDDDDDDDDDP@S, h80fƙJ+K>#aEʟQ@F̫g2oOƎ`"+K3tA&T>M&NڧKOfT񹢀FhC@]&:Ƒ%&h'Ksl"# I@:X< o̲>r3@p@%y/H l{wOj F30et}.%!O}xar1iAs}v>pBz>O0(6O[Ndl'ӶSt3i빴|v8hЖr3>/lp"[|T=_s3)|I )Ԡz3|:h<ĕ# .[/`7X }&/Z;=bts{nWޠFl w7iҤֈƐ`@"""""""""""""_<\o1Ix\B4+\Dʱ׮I=jy<Uj2@cMo`3>JvD\)tQ0ʇM k˖PY#c3fKG`@L7,bCE DFΒ}˟))īI#>m m5I:c@M P`֧†t@ Fl,KgC"nHJ1C @=Oy?-bgA7)qRLGxd0=Ddy\TL,o`=}9WL&{m{||^a#^d{@j!Y [mbgu]!0A*wq&6"}׾sԁM6`/jObq;eh3 ˑhzϛ}Q@< ,|&PL\sWPҼ$zOCU|s&LZ@9qA뙳2J`Lr6e9'{:c=I,6˚elT@L\LXAO=O$]9-QQ@hXgpT=)3h}ʼg _~hgSA"h҈><ZDDDDDDDDDDDD䋓H*UO6LȪ9Œg h')WQ@7VҸ& ϓX\. ht0j!+ h}{Mj,玌B@[;sg{w֝S>4gQI@344GQ:1>'I&tfPLtIʟ'hE VB-#TY@;C`%ZY!h7}9xL{nMkXnTϼuN;b ;{v8s׳>!GAKm7qR|$8ێĉz&r|2eF NY Γt9ۙ,ilQ?Km6( ^ޢLvWWW8, Misfb(N/jQxFqY { Z@ФZФa5]:N5!EDDDDDDDDDDDD>l쪕9zUyEvUoV8hys]uyt\@˭u}tܘX@#L@6 Ь㳾5_jIgT=#T@:Ig^@+}Qh:4>ϴsELOꒌ>`D0;lM1}XbT72hV&g1-^%L3g@4a\@C4 5Wl\*eB3Ϝz>;dCi.m,gB>3)|Vg&eLTLѤX[P=}>A94{4sm4gT\&+TYB\gY*vLm hn}[ "2b{㬠 ߗ{kCݯ WL # (.{_Mṻ~"ψ,ZНc;I"""""""""""""_|&ZaO@!,3\L@f)WϥjT:(Q7P:䀒-9% Yмz&%ZJd6u-s(dzώ<Pe^@K}|ڢ3 fN(:J4g f))KJvvs3g>PLt.k9G󖱂> c#XA`T@[mkgf wz=M.R Gz(gB=# Q\ {eޙizu"{n~T@w-""""""""""""C 6!TtfZ^/zb\j B$THq.TS`ym3RR6σ޹A, h>7s`0ޯYbQ@w}V$F* h>{5q3 6E3݁P!Q=Wq}&>W@s,iHճ>P궡hQ> h>SMz=#zfy sE!7Y2Μ hj>ҙWdAa[mzgI:<A΀ސg_SDϒ.QK@z0n;#ُ#Il9/S)t3r&mf8Ӷr 9b1^F7sCn1}(9L@Ϸeyb>%=}o^1?fLN@+ym Quw6hR Q}kW;;⥲k2v{ Ј+8#6,u|FL4 P=+3ЛFa7P@{wJ^2!N@g{Wȵ;ta3z _ }vI`⎣ gǓv O&-}ƒg>-g3sYs8WϤφ^5syVAscJgjEwmV_[z})ߗnuD3hʁؠZCt7 苃h A}| Ws' hAOR@fF]>+4hh?V5- 4Bt3 #T$CLؐFMLt2g{H%7L)@!qBN@'0f,y2 L7Z#}(R\X@}tp`׸&._F\Y@7 h>ޝ!"wлC0/Фoڳ?):8H3kq}svɐ!6&14IĔfAsBgy9A;'M5ArD쑜# dɄ襭6z3sE>WB}."AH~Whi hI4=7ֻL:SL@<3*f^@z nz}[ޭ^f4`A﶐3ΠsCrФݳ{|g,yt09z+~D\ŽPpv4j;c1~m(3^ۃ"ipX0*`rΌ;_x}󵡮GT_QHWO? 2wV2uos^[HwQ&F5&M;#=W:/ t_(ϵɵ^WWDDDDDDDDDDDDDsH WMSnv@&6$̶,$9$; 4Jg kF}Yt͒qQ@{n4o `P7e>k[r>g΀T, hlgY=KU=Wπ'[>TY6qk2}YD=#>H3o(-8L@3Ь (At/w4zn68T hǃh4m 6'ih8h3мtQo` Pe7tع7bEp0<q;a4 #QgY@c1 @xŒ|*aN$Iv 6D@hDخ .hN?3YKeBCg^UR-Ig~͍~>Ds_ `gbUwIn;0+40NeAbׇ& 軃]7z;M:xTa{Qzg8p6"K]V`e =w֫d9Rsf*|!EDDDDD>TЦOM@YKQr>^2 hb'-e\м}&>0ޙ+B=#tV7f8$9 bgzg熱5ڲ<SdKճr ϴh`g-м&ƙg&uRÍ'B:HZV%g"qc,a3Kg 4 9c d-sArP!Hۍ3С!iāt ꙷϲk *@@Yy /y/'dFcn>GvzgLJ`3qV,g >3N&}HŅR4 \|h sù>á=Ky-KyB RPgz&@ oS PERhRD*_z׆=t>T޿@K`]8x 3Ꭲ*omP5s@XDžB""""""" """"""Q-qtbq4d ΉF uYauѸn-T@:I@#R3/Kw3/6zf`3gfyk+v|F{gs{) gs:&}gDaz6I% ɘ>7$Y;Sb)sФh3gN@P@.#yGg&~W3cYz^,KJz=q&->VW> "y{г5pIΥ 7}Vh>\{Ba:Y@S,s08 ۀVhT@+D|"i:4ϧSyAbϦMs0he @Rϕv4I 4ϽjlA{ר֧ާAa:U{>ߡ}6v%NmS2*k_D`?n2|}׆;?!tÃu31~ hRM4tGԷFzn wН| h!""""""'i""""""C5+VW& Y[29+VfUuչy)tஃ hiA}%(4z&,}]!K6lHw5f;3xj?6x\.M2}dyggY@H3'#B@3 @="9 9Գt(ҮN/y&]>gw7y}}DiP τR [œЁ zwг(R b{Î=} Q羈k_عU:0q8dL`ҙ(E,w&}FJIݟeL 3sI=sȵT=_}.e LtsՂVFjAm}ܠ3}n|cf;[}hw} t2;=w>Vu~}ä kU;Rf?<}x<2JΑ[pTrM A^59}s`΋z>o6=Z-"""""""Gʓ >>]DDDDDpqhU+rP2^U`s'kVdqPh3H,yg~.9i6[L=Yv^@#YsckԖf~#:Ӗ4zg)iS;I,ǫf6@>W}tLKtz&̤s$i Qϲ  h:j#&~ЃN?g&>h&V=M/zn"}3yc愊a3gzgΠED3gT=zq&4Q!?l=bg^:3ޙzYNp}$ І%τ>b38RNyhtV_.^SJX'V_l|p. y^w%@potmp|}kU:>: xm8㠋nBt9>w;ug}ݷw$]W|ې~R_X$,~bfr`EDDDDDdЫW& hv?AhYiJ htL@iR蠉-ஃރ%JL:sv$8 $ hQ@FM5uqBeb:Z TH҄:4E>!0[Cl^kl8$4 h''*7gd,w# .ϻI@9hbQ@ m{6sо?h;CI@$oz8j$>(iQR44 tIϤg\pFi|VѬbVwƜFFЗr+9͕Q̗tgOs^P#z/:nB-Ʀfݷwd O/_P']wno=vw|@(C, e% w)w +4-ݑ;9qy@hBl\aw][DDDDDDDD>H,$!DL2vƙ h6C Ҹ:h*:ƚ hnXm: u)\Cw64ݒa0j:rhZҼ.:hY@+=)  htEM읥|șIҙh0٭I &4$ A'hER,a$T@<\* 1T@}%`hG`%D=Lj=X [h&Δz3Фyr ΀{0 MCA`v hAMt h롰u> h>"h 4L@Nd éTp&i8#g0u$3ZB@YhV;4c9,a.ԗy֧9'ݟ{57z7I^M&)7{%nvߦϷQ@5H4A ;1;|}^ 6zRSLl/OR)yReܣ=ihxn5ZdMT}kC[F[f֝ζ -""""""t|$,tkUkvDVW5WJ#kVjVeւH V~,au:S:K! + |&7.'fxQmKէ zr\^- ݒiP5mkFӒ0'2kI(AK+eL"L7,kh{|4svRu+}qJ§N0$N:" h+KH[]8F` (3RLQFQF[bib`, h3Qϕ́%A-9g,h [gl>54oE$q6ӋAG܀wK3^^|qou]ݮ-7@˟ [-P->6?[έ2Gvpݟ!eϹppFRMV}vbC6C!pq(D4"A[D̨Gab<+r4nbK%}4Ϥ z|.EIg 09\hD7R|!D=_i.e5,yrNs£J|ګ1=9A3)|C>gvomR@Kg%%e4 {fj]˹3~F:; mx]tМD@J'0* #+ELCja^BH!C4!1ƢX}A\@$-a e.K0fb-0X6?4$~J(V@\f 9H"$4ųaڳK{D@oH@@o; h2! }ⷣ}s2A h itжT=m h`r0dapD'E>4JI3x:e8->IΤg=&\Fs5LFѬx &Q* Y@Sz{v_yB5FoύB.Ff_R4r4v;;҆l/2Tȝ? 1 emhpgXr Mkvz!x.@+~(RKDDDDDDD3dˢxTr$ ]$BtH|QQ@frE<ά]FNׯ*pu 4o)vhQ4L@ו8н.i= )Ѫ$BtAۜ)CK9mIZI4#@J kHzfq3qՓ>3\.)E 0,r:aPB>#"}†GZbdiK$keѤ)0SP88H RmBsCDK>z^@9CHY>qG\.e+\bǵdzϹρHڇ8lv >:]~F '` XSmVV F}0d:61Mpx(G]b1Ñ8h 87HO 'SITB2= $u3I 3IXќInBFs>>R"LΨT8'L ;njht^vx%߅kNz ihBvhBoB;rNk+疌D}e]dPۃowi4oX-skvez>r>p.p*2_O-""""""""yp(L4f MtH|6W>L.J1rԬ,Œ;]NVnu~Mz]M kB@7I1&+ik3u4ZᠩUCP7&]cJ)(L5mIphy]tХh֙dH;gGW pv]qOO1&ճOe41_A(a}ճ C/!@zqI28i?k0r&B ;K3rz>vXG܃א8vyt93T@rmp;7yz8l:^o;oA{ L@#}68vx.">KO뷠3!L,a4R$͐4pL$J :?7+:"L4'S -ES XTIigj4ü3r!3Kw;_v#()]r|bIU uT@Kq(Vm3%ںVokF]-aQ=[>'@qYG3RXu9~FBh\\lzLsnn;H~Z6Ԩ!ZDDDD!h"g>+4V7#sAv]TXk,Ӆ&ctаB4tC"q5q5Ot9m[n&;h@Q mnE,VD(C,CY;xH9gI@_7[e[ϥϤNͳpȟ;›h^CK"""""B@+3P^\!0g0&˩]!i0O֭$nU~eF:S*V__:`3@ƚ$TD 4Qp4@W-ֵIHGm.U 1=1cӵ>DEm,L1Fa-ajE+cغ ]a: TqΞNji&^ ~5F@[pD"0wֆ^"tRm $ > ig\@Ø1y)ɝ3{f,^4Шx Cv8#Nqֻ\N]6`ێl$>ڶm"lq۶mh1os{,읭܊5Zvz;=]dnvLTCvA%8 m,2 9P'F0@Dw0L8p&#?iE cQ͉8לÊ$OUjTB}hdϩ}*u*u*sHRTTTL(T0at\ʑG븚뺚뼒kf\#]͵*@8M4L`54u3pS*iF_۸/74a nW-g:΄}zۮ^5϶ʹM5N;j.3?W""""""""y~EХhQCc4$/+R3Ϋ'k(lXP<0/R2^254G 4& hICI4Q F+]"kkkcq(VcǑ^H&hwC K.SMs\S7E4QmKѷD Q5jl0A >6QFʄ+9{'A6PD sߧ ~M hC!MAF" m.=1]ޛyDF+)/62_K=Ḫ 'o&A9Yo[6۠6dh;avXvۭ zˆl >ںeA69lqYJXLmn"KE#c6twL;]nc5]^.a_}a_ =A-7QjCCAaÀpXsDXD},>!GUxDu 1X(%s":9뒈y2y2JtNtNtg]gg픎IBth},~1AFjv\v^¼i^ɶ(if | rZ$|5t-<1E7|k? q_ʾ"jۯ\ύ^ G\ke0|OlO]mZZ.fϥNO'O% _r~!"""""""痿\$-ͅiV&4!F zADDDDD/A@9hWduUamUe4Ocݪ8P I[GVe Me+͉iD浱%kh.ZKhtEPCSM(w P7TQUc4%̣Smld5dl &5ZT@#T@a+l b+A- G=_*Fa$Z-& adtX i+u5ZOL+EzOBFzOJIIi+ctQ,^CAlCxЈ$AmF:Ⰾ,v3aബwZFQz-fdCbӲi"a4*@M'2nw;\N'܆^vnWӫPF$R4 &=zwP'T C͡`Hs(>,:9$ zccឣS`x:>:88'2"VDUN vqiQ Qjh 4ŝ;]#L 2F5s&{^`=c!Yk6d`f2 l,0RayfG,&d lY6,mi!eq6&,!nHM[nC%[dG l(m>vWߍuIp=@ހ{o }~CAա LpPPppPF 0? Dd:E4HwrD3ɶV\J|<["pLU|B4r&l%Xi48FaLf.Rb\q)p9SYu_뒿+B$Dg*po&|eFRoӥBӥ^ -cCi9o *UU5K_MUbYjt"կ, !`0R,^\*Ԯ!u+HP` aк(}&ašPÚ OcMhZ& 4-kCHsmaV>VjwS:yzB:/0|@W{i#=tT7TM5~M)%_еt-R`ŧo2"m5L8~k2E2gpuwsuyݞ2nS_z ؑʁΐTہƁN##Q@\HHRq “2ZтdM֜Q"kf$ch82+a[^ 賛~yfB!qi\t0:v-0h :tCvݰ]?Яw65gCѩ&4\n {lu![]n6nKݭ!˭vke4^nj{׽s'>T݇ q$؎   IDڏ[ON'#-HHӉh3p<55562ƚ$M"&8\WغqXw!ԏ&׍&RR(d0&s1QwrXϸZ\L_L}:UDqp>+!_rfp%S+)JZZ!W\I ] uk% :>K?{_|DDDDDDDD|X?`壏>_/~Ak? F:hZ]*DDDDDg> Ig)^\]^_4ʗë^T/ ^Yj"UK^x%TFV/ k, S!*,"n կXJ~EpкUL"UQBu:\iYFkBB0Q tG(af&/ه} hf_%V7V͋ vO%v X;]rWp{WG:tKtݼvyR1dz\2N_ؐ."裃j[Hmf5sTci_׿~r`_ZANI"gk*rh !Vs: VLl\p6^w&^bkOQdt 9^/Z7zgxŮʽ]hc'v~@ oH?'?oӟo?ٻw}>~8 |Wh*/|i PC7Dlw&,#U+F/ ,9)p~%bIjQdȲ ,{| z%/O/yK<+xee/O5dRԿvYFv[__#xuUiXȺjB*wSi^EY㐱Hkak[kGk<uNuzG9= UmѮikىr049LvSD:[lՊXlV{MlHƹD@sZՄFa0y;NK6n} 聰V#*ZQuqĵ=Ij|QNu=}7#yWP`k ;#"]: . ^";c'0hC01v Nd0w ;Gm 7n4K;c}ibjbnjiAY[Zۚ&`Ѹr6v5!0jijK~'ါiquA:p7 4GB-`! p8PWC UHccڣ@x'B'Pɰ`pM9'BW/Cq$9ZSIxP|9 ".E?]{,Vs,J8=DDxTs >>^׻j{>WNxxw/"""""""~?я~o"߄;|}ч~_{q0uϊP """" 55r `MUjdĪeUˢ+FVz%_W,о@BEW^o-g|3|c D_Ee,ɄjiKfX@xɰbq˄K`VW]Ej¨[TyUWr@BW m*U9VơAZ]5*iF ԨjԭkzըqXYbtS:kzk"]=k+UKT㡮6t#Cml,e4nkkvںֶ.sYDphp[OkwZZ$ VBG[si%hu ᎖H;Gg+5V;[]H w&ZxRݭ@% S=TOcJ62lET j%Ե9Z kaa4%j* ڵZkukudUVWW V hX5[9[Qΐjи 2-0/6/_oZѸdZTM0Hh\Z&ӲMfK򊐇Ȋe[l˶ږoT1vvRȡUbV2.Q vI"~gxK&2WWx vWbCbsNvU0.j#:[,U,^k~iʠeOì^?޼yK 3G-)ܹs=߹s_׿o}{7x?[4?>m i~E7+8H4F8hb>^[F.|sͲ*D=\z%e%W_z]3Kf9_Ҝyr^31ȼ9s"sK3g>0w.y O3ޜ/Y0<Ys_Ι7F:4^"2\v0 y/<%s^?/΁3 Ka䡹/3^/AVyy(XDQ," K,% _k.^0%{C΄oO?Ac$LC#&m7}^4U<&>["[sKy'|'9st3ϪEOLF1] Cӧb2f3ʔ0U{'M=mړpXo״O2{jEșp}|b*~e\jʬS)_|-_\%WZ6 O5"Y/0 ȴ)du*'Sky!)Sf8F^3E4rΌrdԙtΔ)7E[-B9y)Sg9D?kSK!Zx=4wkþ51 ~N= )M2Bo5s7wfߨSg>3{tڧcQu*^^odP@IxL2s3O x^|qaUUU2|׿oo?AO !~ZDDD MV*@!n@͊4iQ\,eD^jjy/~ExYOϜ8YtU9üD:+%+y(;:3%-rsƃҥ\JFqNYyLă@'S9vqwG7YSrM@!['/ZդWx*f[}Eh9 2CqÃs8o!UJQ_v#xOg(N/3/gR_'A( =Yzuoχx}<>şfx0I:0ΘNQ >|'O8duxx{EET|'R}"CNga8S 3d],ȲB~iAV='f=S(Iq@ L'f= wU":I5O2nx)0L1xfpOy|ezO>C?6&xf3@ E~?sJe?7~?{g} DDDDDyH]i5+w^D\FM /+e "dxi<<9Y?FAHw"4it>}z$Au?WYoˮ<ɧ5kd<'U@ Q|V bgׄND8uvAX p2,5@ %? tO? \?-~~I8/! M zyʥWB_(bO=ٚoӳf<9st]M 1m'g? #|2?6&x2\ k:;V|;u<4ʸNuh|w@ #c}U??y7~򓟼;??7A., BDDDD OY@:o}^jв%Wo{g')=iO͘>eb!)C?Μ `vdS X #,¥.\xu, ̚kD'?@n~YO~7|{?_7awмP !""""y Յ5+@ͪ +R(>\eKKY潰Lشi3fL}fԧfL>K 1klG~yO?BI+gcys}9O~ntQ!~ E 6F#\o:XaKgY3/<"yѩ3@ E p/[022} ?/օ"g!EDDD Xв%%:vON6e̩f̚1uO+j@ ӥ |,|iG?[/ʗcݗSgNF*M י` zkXzɒ3=Nǯ?XգWd#^gWG< -06{9Lr9~!~i4-""" 꾵+sH͊욪UdA{pū}eŹ˟~jti0Υx'SE?>Sn+x [ 5p8GoMӦNկ>cSl3}q7Uj O:T?(1Hg<4!\gSNo|'{vqիx'/MM-p xG3s`[*\̝; "_~ջw_] >?O5~6jjj:}[n?7nqܳs垜S<< SNsxKpڼ }q]s΅K駞u8矛q0@?9S 0g?c٤3 W9|7Y of(~ P >i>1gciҧQq̜A>{R,SgΜK"7v c9d=10>/@#Smb`pÅ{+CsaR|G$?|gB@SL@\YjpK M>;R0*J}Eﲰ7cX[ # xW2e @ >nx9_7w7.XnG+> d?~`drO?#~krŚ-ܰ~㟽?}̙#SGQIpG|M{SXI3I7Y gf<1m AnOOzͥŷK}K_޷o|я~t9pxxx--ofX ͝{oں)SG>ܿ˿n߾嗗~[fchh~}wϞ}MM޽{wޅOozZ~(|Ԅ_?~OXl7d~K_w]8o}yxÇg;1c/}e&υ0N6cYO=̳́4fg h@ B?o>9Y,~OpH>N};ja9~ V"ɃapH.R9xp|DY3zy ,A׼`K09,C³OWs8?x뭟?q_WB@z8\Sգׯz__W?wno& ?֛?;fBx-,%+ 咀~50 5kkMUo* n+ |T#I~44< sy1 P*@ |1cb'|f޼^С#W^O z>}Xp裏c|;-}WW{7=6_*\n;v|oݺ?kkWZ~'g~j\ t:=e x ~og7߄Wo}MlyɒWo駟ַ 4LpǶ'NCv}y{Vp`3_~h4~kng?/;pٯ|Q0z.| x{?{)~>744}yB@ GO<^uNpW;E<3M}q,~zO=cNÏ,Nx$ܤj|u L`op e׏?FZp9\^/z@ a#Қhqe܅O=Ir7c˿D@cV@OB@|d^P@|9e? 9/+^E%p~roGIwu䷿<_,хC 4(N Z}Gh 6;v w.]t:޷ ^X7^Ѭ`t8/^ye??'xK.y ߼uŋۿԩӷm?wOo.^<8)ַ 7n 6^je0Z o~[pdill~_W_WΝs>0߻5k/Q@o߾ _׾͛>}W=(|\/v}` 2ׯͷ?t駟%;gׂ?{gUk0L7tww7""HwwJwÀ "bmo~3{:=><100t)ټyˋ/?|>ݻ?}̢E7nʕkuݻ̙ʔ t|! >00C1]EGDŽFEFF9N!&*26$8&̀`Pb*OYg Zt|KfIDAT&/З.]zێV>oF_`Soe.sU[y 2F+ VqPȨ{քmMW~"&-k"wu {ҥ[TTL aaLcb⸥ٳ\t%$$M˪WmAOVm?i-Z6mSuܻwo6~ϟVz˯ڴi靜:~~Gz{"~k׮pW_}ݦM_.ڱc>Wn/^VFnZw#"lvuj7(Pm۶2O87TI '8Ν>}͘>rjN}'֭G}ٳgȓ'M([6$%%ܹ 8Ϸ1'ݺw3t7olР/!&CIIIKjٶk^~aQ1 񵮠~f>] +`d2zfqlْ#G{<rm޼T2ޏ0~f<> tlB{t_zG>ˋ+m/Y٠0fCS bD:fbb TSΰY>}^u\W_w?hs\~t kN_}BjAݪZUGר.? g Y.@ =T)?<$8@?k A&^`qwY|efK.U\qƷnvuIIo+u]p}Gѣ/>Z7={&&V_};-%2t۶m4iѣG=^vc͚u|rw)-\خ2y:[b/O޸~رO?y6m';҃>}޽{*Uzܸqک߿ڵk_?XjjUO_®]zӜ͛q&\rɒ%oߦ+V9sGWTW>}ceWfR&,_J'M\1+mݺ5kl=zIvn޼xR>ގkP`|1cEJfZbe?KhөCfN>|bUjBN%h}ٖ }_W.^x7oܽ{}}/us\2ׯ` a|ӸyM5mtyXn÷]Πh@\σ==}=.呐P7oތvJ3hsm````)Q&G;z>;tٯ]pȑɩ̶sÏ?WfeC̙{GxwYX),St30GjjkC};mXā]-Z<44|Ȑa'OFս{/z>ĻoG,_ 8pgѳgy߼yk˖IIlo{ 4d%' .50000 *Q 3.2d͚GFEtE{=@d|CFFFgਨ(oo\Q&AؘT(CC"Ǐ՗_悤l+0b臟=Z|eHpNAKqٖ@?|M=K sm.s\沮ځՒWK׿~Ð0??.Q D~#&lnݼ}?֮1d6:*>>.1::Im*[ٲeC4)*&0 0Acωwxx$ !^^>u?{_y槦VMLLLJJ-J*Tiؚd}}BCQe_ N=,,|D[G,'{P1PP6yF? v(`%ƲeC/(2"uP` @RHt60000…frճ'bJ_7peo)#L{XonnnJ*eJ{P;˘4zy39AfgU0qtcJ!<8 ?arG焹p"Z"D>m252e]}ݪg@ f@WؿR| G`~m-|ժլr<*?.6A`:4z02QudL/K8fUV:ߏ*Ky񂈈wā#lAD̦^^>u/^bG޽wر6nMMZc ]*,lF Ls+­\%⒎;kn-eUqز9kt˰>>)XђM4y֗_~_rߜ1}V<6iyɺ>lW_braʿn>BCB"""""#£"#b#"<:::&,,ۛYqDSg7{~ :ŖO2sƫ_?c>{W^S9*OϬDHgz<\2texݩ~͞|ZaekN[}PxPHЏb}otWp{m0)oCsm````{Nq>YaMչ[xxtΝ=޽'O;w>{QCS¯c,F+Po4IGr@R!dU2du _I,˰֬Mh_pph! /[64y3Y&lhXXDxxDdd /vuZy&n"%{ͮW@W|ˋ-@zXA=2<,:B2Α)DWZ.b||ٳgЎ3c5II)l+wY4?c:|v\:}2e_tt@j2AjL:tAU*O*{@*0,K}?/+st'o`tT_|e ~O{F:ծ:{TS`n2zYUioI.PFEƗ/_1&&.>.!2".$8lP;eZ;O}4L%iL ŖG E[PP[uzz:ᔈmWz2F a;b:D .[6$88+(,;VOOǿцDGC>"5x[3ŋ~Amc?>ZlyѢ%ʖ&\44h܇aQsOjؘqSN_8?V\XxŊ:wϟ)e.sǸ~C';?vl`//訸*_?S?&ȈX/Or_@z!Ysm````Έu 40 Ip61r@͡6Pg6xmqA%Mn>Kw7onu:n,vL"qphU:Nå:-uz.UbAHĮz2k````_,%KiԨɕ+W?s{ş?x`Y ܬY7n'ՇtKx;& h !11ѱl~cboQQ1VS\pphP`ŗiۋ toHpN+$JLt )ӧ|q@|6_.]VbRll9؜mXh\2̕?i>,,R%ݙ+PʔX11o? h̛:u:/tl(? tT|}y)[e? r0Fk;EѶ*[u?5?7O}/Cإ1p&חIP,buJ'5Y-@s|cDWlEt%P y $1eW&A/Jӱ#v6mڔ3g=z=rmٲxRL+̘L8֧,τ5E:&)/ORʔ.FiB(YLHYώ9Y I\`ppkkT"#b ?-ロfoe.s\[+ѷoo`._XRkbNЄ{n @y]srR:SRAsĔjUk&UnP FG33e.s+s׿ZuE˔-ǟ2?i.$$蘘p:>ŋhL4%8UΚ)=}qi0000007)qjc֭rݻ'ƍKr"6s1_X~Ner?EAt˔JN:]A4/S)?''U14>AajRTZC#P&\`e.s\ڦ2k6_+ǿ Q|olҤ)e}naa``````Ii/(0TLjZ8wvީSb`````s鉩[l{vO>>}fE6m~?>3209ΠI:n?\ 1Tbb2@t\|\&}ˆcZ'l  ҧb'VHֹ~ \|~mRڧґh{\2̕@n6G:vjjMA^L }-橯Z7صk7f͚W-, ~R[\9Ō\E[ׇmk=}ݼ=}2DҞ4*Jy-^;:*bbJJSAI:IX!9&DRSgbO\2̕@m:Q j_}z֭:@SRgQWN!&&8Baёu-, ~R0wə+V>lo.C.`}ЮJelB{X"u&8xԤc1e΂βt=S*Y !A"" 1qg5->Vq !f@\22wk>I9^;X@gaҥ{萑lh\uY -O^3h*S6(:L6@  d T&JTr:sД1嘵Ŗ =96e.se@kg kst [n 5ҭ* ~b:LLuXhTdDlhHow㎿f%:?uFJT3/(įV ~4SAN~͆L EJVdPS>3ADASТ$DǠt?3B62e]?]MjMmTcbTWXP꘺UF:GJV+eH͔AU+INOp8#|Y[X\$m9u*Z].<9M=0 $lxDxLlLB|\ AGFĆGi)r96e.se1u@p,) ~j q \_;؀Lپ ~-^BL;02e]tAh q \2Y?VEu\3sm.s\@׫:@We.N[2=ڡ=ze.s+s:ndfZSטبF7648u*:@2'\ -pf3hO3sm.s\e ~\.ӯlYvglhs\2W:oAׯ6Z_0r q \_;td]97`e.s\\p700000ez @\22wvMg4=Q BUGׯ2^uRNR+y@}Ru.)*?y2000000000000007ӣW^r͛7uCsm.s\r~ݶvZw832e.@7ump@שue@I E0пD6V\8mOsQR4͛_b*xxMٯ:A=%E+TԪz-zm9 AsT?tQHP8-rAٜ_'@ nk00000000@\22w:S@7>*h'8 ;l;{ϯ}*0#\@Bԩ@:bo(Q DPQ&Q OEz'UNT$%Ha]ڨp*g JiQRHA "U?5)| Pp_{ h5=>sEi<[PTtL Q'\CI 4#B t4|_ү< ($K y܃N]ځ*Ÿ2QJy'O> u.Rrk Dt P$ ͛q(9OMLT308{B]?0حPhvR'v ;ЫC/*vnG=\)u 4r.Y*n"@C^!nDcrE!+"D:ESکN;IW6aꖊMV _P* uhs\2WtzUٟH-1((4Ol3gcO:es˶}{޼K*#6mhy( ɓO*VKDZ1$@ %&}*(( * Ad Xdil : @H/_A;d@8pB (uϤN|Cv&-<й"39?`3O,*^zӹXWCT/ӛ4"T'ox)}@qIcL-2u(8)yCRؔyVԔ3gn(N 9uC&orOΣ?sKEMX": fcD܀(UE@uEMtAdd+ HJJHuk]tssNB/(:e.s+s>;UЎ3@Lꓚ/<[}ˇ{{laVti7oo_*P(a =}}~NЀ#<:8 A΀ ,bILB2et!œ%JWmeˆ$YE""Kd`aƢN~.xzz^6A^ر;?qATUW+y :uVS0jDžQ}Akw)3>C[|oTϞ=gGϐ DJG39Q(n\bͨ=Ffh632O<$WB||ºuz.vf'RIS.]ĭ"RZXXN6#pDroܸgPc9ܹTްaSǎutAi%""|si<xWCRe~ÇDuXN;.&O@=۰a-[5o SSt>7… ի2xQ(eWifzN2_T]3A[9۶mZ0 iʕ+}}4ƍ_@!ٰ> ;ثWȮ>$$O~?HHЪU'NyzzTʶm;)S!w~[lY`A|||llҚ7oN=.]͛lِ 6M0dh+ZxppC߿X oW}:_w3O|۷o?~<)>mڌ/n6%IS^^J/a(n})[:Ȱ>y̞=ܹ M6ONN1c7Q?Πmh @uzRe&OzkFDD}7o%0+J'F+ 0<F6嗱ˆX!Qe8ܐ9r䊏OعsACC!J=zٳg |'kAAV!9sΕ+*%DGE Y%DJ9 @!EI)AgϙZezQ Jϔ~R-,om,RSt(!3gʈjܸiM[IdƼ}Zڞ@jUԹs;r(8A[v\Ҥu=jBTAGPJ k襗y Z%BMA@Ѧ`|A]-Dyhr<Ŋ{pB(-5}  A/CZxsϽ@N ,Y:tpڵf͊!"*,,"))#o9*!ڠJ@!l<) -TN=+Wd ռ`[n*.~\}j7|߾ڵf}B?J߂V|$=O>|$.qꫯhJ+Ŋ(ULٲ!#nnD?\ Ê({~ [?I"XDV_f ycs a[-!ܠCI:K%J ҭ*SLPP1҄nzIP0WgϾ~dcs2v/ʺ#Wq ' \bb;vӏHP@FMx(EDq&m}2(ŀ FZԩKnO&$< 䣐*dhZrBu.&bF ~Q\m={N֬ٳdֹsӧ'Z Eu8R(g8 "T&%@}2~0HD`L%\9J,d&p =e=mڴ۵kOM1 6F iG D(%E\cTqabQD0蟗ӊV\toEJ\˅UddD@C@#m*Vy%/@ h#XQxlvaƍPF ^Qalڴ7?RPF\T@[4ϐ!5kf^A&M͖-#jCg8Ez ߱cgycȑK۶^&K?[uCrhh/[^@3J/+SLHӋKRVW:9Ą;|rdb?dAhh7@U6SNF39rΝSR*Æ8JSeHtl:#j```````Ksm.s\}t:@m@_}DjÝ;x{[ǔ4o_رMvoڵ_ye1^{u77vl7nzٖ-[_z- (675`Yfuss[zܹs{yXr·ϝaæ'bP@. - ϝT@@MǍOv<9K`[w|ԬY 5٥cttɓ!;JXGh7oիo޼};,Xv͚u3gt[nKnQq*T\z{O,()icEO8E3 7{7n>}Ν׭п@|˕+Odd4돔ZA5kiԶhJ-Z%GZڝ}Э8OU\-[=a¤mv8>KP0DJL޽n-!Gҭ7/}ٳڶms/L̙3apGt-4QHgñcǛ7oIPhF'#o!!Zܹ;w"ՠA# $JI 3SoPQ ƍ[=z)(T@C+#"v7x#$$˫]vs;:~+VN8y'Oչ Lڵu떛B>`zkR]jѣynz o(Gݾ}+FÅǀ?22;wayi nxxxaʕk[X1^vzRRJy{Ç&'R4i˕++W^_w~_?zeZڝӧgr2p۷oByJ ޺pRMSS̛7;Ç̑#WXXΝ!W< v;hΙ3wTT޽{ٳlٲ.]US@aww^{իW+/^\^D`Xt٩SgoXn7\p@ Qu)b$(>9pa;K0W CG0Tfm'YfOLt臄CڴiG"L:GRW_CIժ|ppe+ ;tDll|9]m8rXZ Lѳ/EBSBEݻ)""DD пiss.ܼy :UZČc FalThw]~x$iprK ֮]($v2O+5iҬn;b(>#dCjթ^[?@bdCcBRA(߷`l_W41h:z&ҿ;v\* [lKYy!(tJc. H]±Axv6no!#Flr!O`۶l02Is˘% # A: R!xH{OA|xl}>ӧɩVhF k cSR*3rx$ ;: &xk. oKؙ3_mРQTT #[ٵk]IÅBrH8޴$?aF%SN!Q 2zxl"BNj^z7q)ZT"˜3ԡK4x^r8vnP12eL\@wnЬGv:ΠOJ^E2?9NY<ݓmԩ8ԠA_:t=w^[nׯnqtm۶ܼyY޽{sqss|oCoܸc˗O\zISPÑ m֭[čϐ7l4f̸F:t8>>~գGVxxѣvԥL^{y4-a#X?ڿFwP2d00GBHg-hر3TV)[Nz.\SKׯߨS%Ja>*Y4 蔊 D5RTT rʓRn  m eO>6m+:DC:YU%=ʆ #Ca!?ogydF/M<rmIf{'OwۗG}GVڐCUvҥo;GdzX1jϞGKD!o6$"dQx3yNTv ,^CGR?rRQrU2!)G=xf```````K"sm.s\ĕ/4Ѽ݀g@ןb>;@oTkU\ڀ}R+tr 9sS)޻w%K۽{o );PzM}NvBC_{uJɞ=ƍ͛W~}Xdɒ 8}ooI7m?t*-FSl/_|ر>|'K(Ek-:2vxn%:#|lԱc۶m-t0xΜ#O>ۥK7{_}5 9q&:޶mx{7\3<-nM߼yP }ԙ[sl9OzG%K6<ܵkπD4hFGرc19>R _Rw޹sڵW\~WIJJ9ytf-#G{O I$*P'Gv\QӦ`X6nk֬C6 V r@wѢE:֭ .uڝCʗO$,.SS )ѱcgjj@(K/eYp޽ aww{u붏})[޾Fyߒdb\wYf':ZCL8}ʕ*?xCjCon޼<~ŋC=ԬY{dA6Etu]u͕+Wl6l#k@޼y[u'N!Ksl5(;$>>0QW"o^&<:IQz|l6f8 XǀP ظ)Lz`+**ĉSw$@(8ۍ=}lma˕+>0g\n#7o:rhΝmv?~g·O`:QׯgsȕX>2bbv;p`@֭wܭ_@ ӳgDj+<}ȑ#˗P\ *>)K[hWp}3 |* ÆQ|jƌYt2I[ٳ7 Oi"LLرVuaΞ=߿*/o3Q6lWAru~Бnz5 _xƍ^t"  7n%y R/رɩٲP\#%<> ]+))!աC'<*y耼^RS`6 .H#sU piAVXYzM6<H/ r|ڵ<"44`h▎u)) 4QҊNZt%IF>s&^׌^b[BbL*"o ~`ce.s\rݬGZhOGgx]rĎ 9~V&\{r6䩩U[?yMweʸϚ5{+WI[l?A__իWO4ݼ|s~Rnڴe}ѣr[:h hBDa@@R&HTTݻw;6|ʖ 9pJ*'NGX)VDŊI'h!@"?8f88sZz&v:ݻ4ȑ+::ѣ8߶m#Q+)@mPP.]-nq0'PՠAÛ7o !@!.tJJ'N <4W<":t܅C3::f˖-C+ѣDmBBG9Nɞ='ׯժթ+Wر*U:u[(؀n1Ư7:*Tkמ޽BJo٧O?Z [ZEDӃ=b$"#}%99֮]W?K-[7'sr7~xS.dr,yZ䰱Da,٬!BF /ܹ+HߑZjs1 U79+<ѨxWxBt. dV:hC Q]`;y~Fg(g@ɞ={?~Q9.XG\r/X`ÆʏTaNJ/fͺ>XI4A>Gܒu?t"]ٱcՑCƍ,y^C$-ϛJ)8F p}!m||ž=/fEyСC Rص9)piACQᣄXh1V~u%ݹs7%bI^tL4)^tW 0Ìyן?=Ho PM*=M6gxhъ:yV42y~ WDVGhV-_v5iGpޮzie g```````"sm.s\o@7YЭl0YBӺc@:ѸF55>ԫ:vjʉ}|9|%>|4a$?͛:t̓޽'O s<=7Z@M[N^ m>-nUOm۶C?dϿlrfif(rSLbz|+'O>v=ixʔq_?O$%3f:{|n=֭?˗/GE?:رc7|+udxPq…K:tBoy'PKvÇ/wҭAFseT)"#w3|HC$eq߁B2G~bbRR*=ٿuɩ:7o;v\~CܸrڠACP^Tܸu+{5Ν V`a<V ;~8Akxs.ŬYϝPߢEm߾#߸q [Hٮ:#C-NX|NQ.::%RAP իsm8|(ysp>ɥK>}EVd~'紾yIz̙s<\CBVZCpq<R3gnkדuC!v||B,"-M͛Y6cx sm߾jذ1< Q\z-["X*:G3| ~UTmҤ=\"d򥗲,|W/_ՏINϑ\*mݺҥ+o*Ln޼ĉ,w'-'N&];w=F,R(} Z F·$[J(D|Y_hӦ}(B A].uRJ'2] R lzC[ns_<<1fˋ/f!D*R(TAa9wo̓NE 'ފ"Y+1ŘuMS8f:.i%F\|#^;!|tRII)G~Ȑ@ AEQt OJIi (ET>wᄋzH *vڍoe<qէO?vYyHq[tYO ~q`Qde.s\诿i}\>`p@wj9U~Ahժ [if̟LsFGǞ|$"Ѱz)SAJYlذСUV QHH};Gsnٳ^ QVٳ7` nCٲ!oҥ˷oar9.ʕq[#G^v=ɷ3 9r'lذ sNnٲu,+1vQ)oJlq-[ׯ߈cJBΓ'ο֢W߸q̷n@hC-[M:2R7jGK\-Ze}Nz۶@7QNl[WtM.piE[\C27oOJyM[7n6֭,x @W2Yemz֭+W%F*0o"$qPgC@:AMZu?xKc 1DԸCWy*4iΫ[3R¹sf͚K*Z[Dwyyl 5j`۰a#x|=*|GO&t>yg #dǎɩPx(zuY'bxk:Z%Xx𓒺No6dnH/9sxBܠ!A ^ b3R@G' BM|| RvPL nz aTl {^t D ].]!(^Ř_d N\2̕@wn5uI-K 2s .Ʀz3{LwuXCb1ʂ֗=<0/_:b@ :}}}Q-VNJwɒQYJYM^^>~~r@"1DVGR%CHP)oh +pB@ 49P"H+ @^@!<<<)eCC˔q$JjZOI$ S(ySf/g0A\8#W!nBZ3 4xb:y" Q3AźTAD-%HHZ8t9 8iM|#(A4(Q.r Al R8,?e::"@OHs7*%<YTɜV)-jB )Ö)P?ӀEb"HqI /K "ԑRzZрz_@-D%bť I.&l "=it"~8iJ8up4Mr^[RG "1T$<0PA =QtvO7 u)EQ3 Ǩ(4A脙βEq"" exxh"l8ws.4kB?F'Tl@tTF9 ~`)ee.s\~h3/`f0 ѩkũI n¯ p/H ʕNJ-NRWc>Jd&NYNLTe<"EQ1-%M0ۉR έ<{S !B)P/`ɒ֬YWVjj3gΆ) uaWiW e MXD C ф,'XAYͩə3<3#/Ѡ lu蒕}6l~F(ܹ.]ҼyKE :u*  @2cf``````` sm.s\@A7=YMko\}hjCTP7o }r-Rw_hRh?/Up(PdҠ3AiKqNRGm)PR#I?(U'3<( T WPK[,hMtK+MPtBJ>4("A VZs̹[׮]W&9)fH*p`I봝ب/Np+%EE(&!niUm"O$(R¬\IC!C88:Pbe&ݮS*j*0S )_D*9p4q 6;.PN*"J퀭{AaKU&l63)AѯC4+2ǭ R(?\NK % "Pޤ@!ZĨr pZA 6?TQ <)6)Ie :P RM$]L*NZeBxmCؤ4D3JbHhKPΣ'YJulۦ(bTC*pJxPQI%@DM 2NJ;|a~Q[aSЩ H]JdQ&ԄH(@T12eL\h(l8uFP6**ǩ6nf*牡Cz [Iuj\G3?`U SR.#. T (-ٖnҠ[P S&* uiJJsO9 , QuRYuGM 8-V RA}`dQH ")dNDfu fOD+D?6\uIـ߅(ԩ GFɛlȾE\@6ݙ-TPhwD*"% D(0ϭ\*YJlDB) DH6$%q%^61(TiPlt $6Rl۰uemĥYbӓ&Wv~q:;`W$ Y8%abg' Jxh{VQw&$J)꺕QIɴp,Q#NͩVw3n}G+]$A٪@zǔ!OUpnMUm(4?n#zvh{$ `ifGO0{$tOmm߭9C֣iۧu$)4Wjrbpmz - ~O :Y%㱑!mO3Uz8[N'Ѳbs]D2vΘ]l *v|`ߋIt eTKcৢRtpK&qfIn0l@Z3-`8;#NQ :t+X#Х-C D#UJQݠE *%- 1P"H ݾK? B$49OQzO"ŭC훼B Ez(gm]KѢtRⲅ?mABMI]&N*MXbipB2d<Z,^Gn[J톭 Bi+'WGXΧlYDdt+q&HEljG$m 2M]i T>SqY:e/fZ˴4ֶ**܊G_tnV  i!RBŬ*.qi18z J>mq*"%Eyd,J X<~AM:}&)%iQ4XR_="AekVU,6@)*,ĩ?mTuUsܲEJ2B hs\2W&o԰YtONna O;76Yӳ`idϾ%wԵ-g-la֊Dh 8%IɒЙ@*f[V3PP䧜Yw"4i{*REl]u*"R, u)QP:t@]*Ķ*/C$(5 P.@%F z(i0@t.iœ-")~;"٦B6T4p)D%l ]D[p P]䃲锓09#Yna BDdI Ef@Tl=KVtbQEMRE%KL(KpK+)=lmT`C 9s憎Ν/W<$7-*(BۇqATح T~'(=VHtrJ Q&85 hb(Z%%jR\SlRI)}Rl 1[ fԚ.^9Q-c(KSn8)" fa8Q!-JY:V&9MJ&r :&4Cq QIÖJ?PPM1Yi4Jt8ayQ]NPg~4#81Q7I3JbiF0\G\֩K*))np QYᖺPO-NG#(fEĭTI-DcQΓS|!?RK]hRi@"[9#)5Q!AEnmC@AJ69/NE0BBlT3O/R3zL6Dl ([[SAH,W:tzYʁBy%=lR]F(0 p3UAP3 sm.s\@G>44U%$$O9a'M[:-`)P[PP6(Y7‚%еޢlĒB+i]x I@<#Ӕ@ :v 388D:3Sf[4nmظ-[6@TI)UPazTX THV:g 8LNA:E"D{RpknYS()JMU*ѩpKR:~~%N4:zPbڨ^Ì bCJndh34@%/tyCHGRvuJn@fd! .@ MRNf J'%MPl4AO)_P<ѱ޾j %'22:&&,_l2?道[s(-V*9J6< QFDSMV x⅂"-8T\R E**PI[ 6S&V" ) W / (j.ab:DTx*Pp4P`ps(h)TxaCDp{ j3K[UDdfۢ"%=)庅[-q&xD'*f9! )=)e / NU0P wwwoo 2!dX*r) GN0 'TdGDD236\ [ &K'bN(SC4\󂒫J2А<J^b#ЕJ$h_kףc`6i?؁+%Tj뗸C"~AOt ;vظN*r2=&tz56YD=LmEP*(5)^ߩzzHPyp ~V:)-o:+r fU!.^4AJꪨBRS"9(KC1 Ͳ(^ IAJDY( "% G&IBQFRD2 T:dp %(O"Yۼ./x rA<$JM<3 yIUHIݍo70@aUVI).n!fť[A4Q O"N@5 x2Ll%%@qن4dmY2"L@\22wmfm8>}n]w\:F69YMnR}`^AЎNw pbw[n߻w/JKKvȑ0_qĈQXeˎW^pڍTx֭[ӸqSf͚Mv4!-[n{uvr6g2IR}!7@@b-`UTQ6rՠAk׷n뢣YEVBAeN8ФI3[A2G [;w%~pOá.)2M+:lZ`_&ԃVz0'"!BqRV#׬YW|=3zg@Đu r+2(X yy72ZR槄Y*h1v%Kދ~^ 64Ɵ>}vnnPPv::uΝ_}UӦ-dɆ" ]0aVdW> ۳g7W'T@ =Q?=l%?}|Ŕ*.\u@G QCH2 D1kEC4(2e1ZaLN!aÆ[.,,D3V&TtqED2t '>˴[AdA/_㏿K9jԘ_*K@cjmtܣdC¥TCw ʔ)VZC=p^%A駟ŕ谑 4pƌYK. ؐ|&M"qgYE Q/ "anϹE3u|E:~D ?QP(yo|=dVRrUPPn\&/q[C[ü.%8 Hon=XW^:l! |Э8H^]nÐ!øM:#D ]Bi%j~/;KfϞíyׅG6"i=IbYUЊ6 ©SHP/^I,Y?ԁ ԦP  xc,SlPXZTژAH&mf >WM@b{Y#41ؿ0;r 3PH+.FdOn$@AD˿;vڑZ ux$KqqbأS[%Uŋ:44 uŒa||B <6l9tҪ(vNh^ P' `f3>eSNg%НӅxl5s.#J'Tlz<&ٲ4zxxY:<<瓓Sل LEBbkԨ~A %25!C &ĎLX8qwwOAĬf:u*: $j 2C$R{{B:VN={m۞!'PHLףm =(?Pbf\OHJ0-[D6o:bĨ9{LQ!aK!PB6t1HMV x2<e7N_C(HA6uB?A 9s*(tؠM: zBK(W|>Vխ[]ƍN6#!u aܸ [6*#ڵwa:wc.nIz? .3q5QU TiB+ t1&{ᏳA~"rΞD]%_#V9TO%u+ E, "ҧOCٛ[z=؂ӑқN8q uF!4HIӠ$ ڔC4c VT\Xd!MdooT)ifYhBC| .^LC ƶ<%M-A1b$;V -Y EI!t NF>]'o˗0BxƑREA%>ڬYs\b(Fn@T;"RrU 2A`:c (#RCm e0ѕ0메2 Qu<ժXno1r0c%D}ѩ\aB4DS4ˊ3<[ DN,#`۱0PH8S\r]ы~!Q ᅆE)ωa+ %Ozy)(Dm֬ى%N9u| d<34h:Kn .uRd@aJ9)"F@FBaZ "INEJ@0fP?QA *˖-?D2 sm.s\@=EڂK8?^חXmڴ;,yŋ'V`.|Y=@g@/|۷8Ȓgx2XdYQ>}W_cuQLJJW_~;wE {ٳ7!`жm; :i9)YK?30Vᄏ[iiw:ҩS[ݺ7n&--[l!w|uvr;wfg8&dm8u|5k[n}&l /6Af˖>"S+&a`ܾa%p^nܸ{^d8pݻ ~ױծ]OjժsYn=! ";10D\ &MaKZHG13S2>y* I^}Ν;Ə~'7o\ 61c1hyEQC4qd'BLz=fbrAUf .vБДnzJѕ7  xٓ2%!ō_0T3«AdGIƴON[w"{^D!B#Gu%gD1Ezzz>|sRhif``֝7ZyPY6<{<c< TQNʔq%1xxG RÆ_{O0TuN/ЄVDDdHI񰣐7c{ܸ L<'Z䳰7 f38@QH92c'̿Y2 x3O/ 72Pŀ?%CFեD%Ufm2?^wdx (`]תU;Y2w AF%!Aяd:wUyH2)`P".,{54uB&BW#gbћ/2sm.s\/@Ym}ݴ s a xfz,X`eɲ%{ Ҋ ;w>ZYvPp;vj,'% ς֎k5KX'NxVPR7Ӳ2ցk'aY-c,7n[\ǙJs:uvwÒcdzlKOA Pd:*L,BYVċ ueaaⶅ FFFaQ+&aK2 thudžVM0}ݥmڴ;<;L"efkYdydu:qF y`݂6cÂ#"Xβdn5("(X1 fUqdt ֲ؅*YjO&311qٳy:I#|:l?É[~akqǟd: VA- _Z(_p]( @3$$jϿZmϜ*I`c.b&၁e'EѼsn(WRݽ{'Va("BN+yI%McΡ *@O2tdU< ^;,a7B?"lH 2Э[Uۆ\@/C>+ʵcAhaGؼ}_x%߿2'9z/M0鸓@{f xeל9sP[€t֬^^>~ĩw} С<,fG Bxw\-+H1Q°OJJaԝRzB\")b{ 0eny.̐[i=O /=Pԩ`"2/b!`Xh1ÆHJJ3c vBw^yesh ^qL:Dx3Aᖷ=VQ+FG}Ĥq+Mxۄ9~Њ۴b9"7ya].q<Xa;z;w0$P2e4it nL<:{JOCxH…oRiB |"n3M@'L1< &M%%۷Cބ( ) MHn'/R- bw/p]m۶;v/k̼B?Yb~r,ƛ׌8U#^D8D\,nzY)TC$j?|%n kի\xL/ar‰0CB0m@G!mہFyؑڀxݗn1@Y0G0Sܸq#9 Xik-:oV(nI>'["b£4MB2yH!4G1Agg3(׉ƿR H!vn%yXH20X5I '<(P«'qH+K2!k<>{Ōp„o%)c4n޼6O+%:d%$gԑ1l!EzYZ|\2\?GNiSopּ֐浆59qoXOvЂ첮]-.Vf,DظrbuomgiҭAnf١U8M,jY`*/zXoUyHFXwڝ6ʂDn4+VZّK-Z/U{'֯x"Ȧd}gΜaVcqâ#ʇ -ooF6d̰t#(XZt=z"d_gɕ+wjjɓ'_y.gbJVb' YCɚ5;+3}E35e+<!J9l Y;(օ~E8d&ezֈzV֋٦"Ś+N9sYRVyDAy.T{{xլY F[}-]vdGSk׮ j[8Ϯ "Q;w>7ozJb$ lZ,q!B4ƍ<BcO,P ۔)Sn݆~ n9 |6$c`b ~Vp7y<).}A o\xNN2TEJ)m7kKC'ljTd~ҕ3gζiQpcL=QBOQPD#H?*ׯ[ '".eeȓc8@|l3b .7Pnj̘q%<آ;ĉvf [n=[d֯_h;pacFU R.[8"ln'-L{>୷-x=y{~˖m qP@c>9rY)]tD:ujȐ "nP 0B<x+ $ԩ3 'bWVR!49#~xѣGU,^.^w'ċ\`h}7q!3=` Æ߾}'#]+Wcҥxg!!Gr%44Cmܸ1<Ѥ* }&#-ѩ(% |[ҡB{ l Ql9X=j 0%m騢>o{SE!'KtQz/\DϲaEIuo~6cSnYш%53epJJo {d&bE@}t#;VLL1D+wI/tҕ7$,y0¦0[  Q;UkTlomرpKBX>f 8f8 51[V[ncڈeǭ[XkV~~,HXv=!X4B\.[5:lO:*,hb J:Ub}0O쩦LbŊ be1&dHs ⬹O>r_̄ò %fς}`{ڈ:nDDDjՆ10fǴ0MHHؽOKaKpK4T?|,12nTSR*k 'Vlԫ_!޽h"/ckժYdcKzY&H5+,: EV~xB@|b IfgϞg-d<)5j","Ch׮J_5(#eH>bHmEPm;CS+iPQhGmRR zz"! ܶEDB 4kւTKƏcNe˖ c @ :uj`Q XZ50AVe6*쨙vlgqٙq"$!$@D93($@I cL&sd2svvu|=@w^T]u]w-}VZW/u;[\_E?߿ɡ<&3 /&num"K.C9k4<X 6lر3&^8R+/y; A,CL:m߾} 4`4`h{ ˖-[byUrSʕ{l0d _^U/va01 [$7oK\^zy+Zx۶_@3I2x#!`-cY+U0"f/X˅/48g(6|aG!-Ins_O>ݶm@ІYfEc1CاHN櫅 ?Qn2o p/ҥ+<)ǖ|JpOFP2-@,0PErKТOYB0x3HBlveq CqI& \D3$UѴi lܸV O O"yjh,+ӠbIzi; "#]? f1fa<O-]OyE30zDFZzȑqyߜ_>yFHIk`Ţ7Fҭ:=H&M:4n8˯Gf Ep:Ofce x`k1̘"5jL&:@!I 6`P+[rLqO04DdIȑQ7nܤOI>/qLcxeC;M@цVq+WuѓAdd$o&XEp /!A b45u k=!|b`5› ԉ6aU$Z(V[>JLL`P|IP_Ǭp)$aEVzIxZ2 %ʁ ,Yl`Ixۋ5nSL1Ŕ 9qcBF{FL =5@5Y߀1@ İa# hѵ8|(0^,Xg ~Vuyٳ׳g sFAFZɲk,F&vg{ G= GHR$֣,bX_U||"!jݺ-⹵V9wƍv S.^ ݹs^seU΄6b`A׏\X3gߪUc M6`^~31q<9֯Ye;wbc]_ PH+[@`}6 pˢ] Y:#e 5KdXA@H,ش-USH&YܳfWqQ a%7gV,gL43$$N'8XG (˛6m1اO?rVbB<;VFh&޽J_.!O2 _'l~wE! '`ONݡ51zvEci&l3؛7 x5:/@_v=0Hu3É^<ͧd 6p` =dQ1_Lb;=C~bv⧁Fܒ nFs.I<-[Y`oƸPE-|V6(HdB8O HؠɌUv#t=*a$[| v0ȖIjB0NH5L=:uCzO3uA>IhdtoݻwŊ!Lڱ/M>[G;qԩ7VCICh, pKs4>X&)atTJS/.CL&ެY%t2v/F_x' ZDb]{걀 M ?U_޴i TH_Xc_/_Ԯ]_,-Q8nI;WZ_VjFB" e%@- T CO?+ŋ҂@0˖-+[ֿXђsM͚5ta#x)- ]G|S={.Z !L`u&5ya:-òp'DȔ5DQ{2N\zghdO8։sQ??;w~,;0\-y''x9eL&̥į!t~H25a\xQj-]2*cekk&Fy Is`@ $n-O(c,#pxXh={L5wGdH/[pDE<,F7 kE-;*B/42SEM>HKt#Xdbڃ!ql;ݺukK|?eXT#H~B 'OY2@#˜i& t$y ]xʰ!Hl48@aM1SL^ytu6|:&t#zϰ0 sJhIݒM <ӸAt@byVܲ8`2MnYTy`:u:uڿBBXh_Zm B,#X1kqXxɨQc޽bXn>|aĉRb_… ~u @!8zYhv ,7>|nֱske˖_(aiEتUk;<<ڵk>|̘1nO sC#˸?^Ja;IׯdHob)H#6,\tL&+Vݿ5iGjӦ-Y۟߰eL˗di΢©fGՆ Тڳg˗WɦyVAF"$| ;wzݍ"ZϞ@DKkp&XcDPUl|pp_5]d,t 5H:^v'ShH-Mضm{ t Q;~Nz EϜ9#f;v'W Cƍ[䊮,~.1h~6((-LHa3>} T ZϞلT=z뼌Сz #,_!q>|'~}Y*bK}xS]`>!JnyNHwa~1h6m_;v\*Ɓ !/G6[n>;*b@-qF>@/3 q&<}<)i* Nl f ;jWF*!=8o4i2, ׏,Yʣz!y4x^ڶm7dH0!͘1cӧM2eJ.]G/^bӦMWh>]ja;-CLTbl0ZxI6OWTӳh".~~~7o\r2IƯOR|8GKڅ9 SH/S&0O"o@-bFe%Rad~ϹXwH V>2MiasL4 0"E3W~ŋl 5LJf}hQZ'<.ZWc~q_d!`xۓy`Oh2A2 .Q] DŽ, 8LM⑩9y?Oaүα?fL4#]f$ٳot=4Z,a|)%\玜,6x䉐S710έE6 r4;bϟ@f͎?4䔐l/MV/vꚱyd2xC1 y ˈA/q \dD3uM>i&+ < &X+,({3*y .OUIGW }RƍM6' zū<$ ֭RE;wnh1ax]0s;FX:S :|i0P'EYH41rSp#>ax<˼}m^YEDK1 }RmX@h```ytEl9;z-(bC²TfU+S̢EXXD&;b6+dhS֭:f MÇhoIZF#OYsTeǦqÆMlYTI˖8S)))YnB-ebXرYVhm+WfoϞf"nvբEw%yeC+Vz]ŽduHY"z"h5"CcEOܲ"'BjYd#O֭[=zLa_0 ӕǏ^zqŠri2[ "A-^&b~Ois6ҬINy\h2:~1,YUi =5tQaYL *VE {ivGXؚHXXĥKWS0`ܧqnyniNtH$Ɲ,4|a+Wz!h8٠]ڊhH&hrN]Enp$I=gV |At4)+Foܸu HeX2bpǎS=} ={ /WQKTb|#zi;8 67n",O[>bCKD[W:\< yҾp'˖i1bCHJLnݗ&" 7[$ &wh1Dل'i3vliyƙ*vAH+V!&G4y0jT͛71HA@Y/y^<<_3g[\Z֏iWxxW_}E/%ٳ0_7Iluժ-^WO˖'J;4;U<Ѽ )=;Rqq#vi0{/0@W@Csx1yϝ;_G)o: [tJ``eeƌw!QL d>׸"dNFƄAoSc : ̛0 [wxCZj9tWR~%KLΜJU);X ֣t޼*2k7oӕׯ&OW2y?aJgXF,!oGzd^0擒&YO3z+y>x9)DBWF5'8<ď& 1Xa׷ SS V/ZMxfY\^zG,(0-x/f lXQTٺV?4t% N4 M+P]M/3]c∰$~F27-YR:2x0%0&=g0$$ E"w\30h皆0sKZP/:'\˗fW? &8bêRiܸ 0!ƫ[&#|C"ydum&@ 4ؾ}ȑQX sto]玗yI n`U-h2gA`l:DaYpH1sKz"6䁷6$P!ǎǎM B1>qu(^٬:V * E,pD6pݾ};v0 )T>xC"'YTȣNsHk`p%pTxtᣋ- Q,᳈"TW`B56^0/_A;w<}tRi&}0@d~n֮^2o~:Zfڀ'T6/ Ãl7lbP 3\Rqb >DBEFhSL1SW2?~:, S9flfБ}@:;I-Yx*_ _d/|}kz6!a¢ ȳc)}hy$Gt $!N ;"l"“OUVݲe˺uy۸Fw/`Y}Fӊ/A#LYwm9Xe MTO -]ڵR0x&p ؇O3ӎptU%H! <b Ĩ*S,@Jwu4RCؤA^!!bĎ9!e`Gc.`ka*3*BOK0/15 ENqD˗ /jJ`P(BehFC#8 J wvQ #AjvvWxD.k11q.]i׮1KP%@8($q]f;B؈+JrMS4"GA9^J-B텉0ZDBvSZ.\|yҦ_j`1DTC\ʻQ A-UHF!Z3|X1{16ȶaQdBi2*(dsCSZc0K6R0;dd> P;*AZA8Ihx_yš!j&aHؘ]T-zUŝ jʈC PEЕ/kՐJ4+Ysb07"G4ʖu-Q 9.$[S8 v*U-Zݸq+*j4*¦-zTNa? N)Β꼙W]+LAU>hA;ں˅]ʒg MFr N{QĠ`PYC2AQШ#nG2LҭH6 .vZm-v4D%AT0VdRA)BfB'K, OiY*ϴM+'TN@HWX]G-W)k5F^}mT!J^젎Ar EGMM'O\+$! HS }- ih W >C;pZMYI-khSL1SW^w4tgG.XГAXϔ.{ ob y v jK8ZXNin&_EOY @K …],J;b5#0' &''߽{w r'G!c kXaT*ĂL(KxBJ0Us!Ȥ(oނB @Er'ERD^d'e.}s*.eCU( _AX4qí]XYuZ;-BˑKddIdpw5h&Uv6aָj>rMEEЉM6?zxLL\>o*Re.tpe #%a~O*=eE "L$e6#^S2:#4Vr-(Z8N)SK B+v5!a((]E+2RTam*LUTS._}u/FKV# .nE/g f̕ Wҵ˲rZ$1%kH{@;2T,a#[L疫eSD+WH+A#Ln1[h`'%#\\QZiʪd Q _rM"=SP5q%kNcvIK>- O.l`SԢ]s%k+.]}ѣך5nܸUn}(E+`q0+i Z>.GvlTAd Z.u dK*``YDk?z~V$,\]/u`r>겠5/#nC<*ڰIdO4–;W/ 0q CCP M Ғ;@W%, DR)e\-iJtqŬbpŬjEΝgެ*Z6%SH]mNiРъ.]ԪU+VG w( 𰇨+鑻r)BB#hypJI-Zь 8Z [kبWu_~'O\_?ӧ|5~Ӕ=:wu_>26Y ܵkÇccDz Q0fBm^riM1SLF?n gȘDNH##'33:~.t4)'-5"/]l<p֔[ dsO\Nh@}ɮAuÂ[sA}Mc z8h3.֡nKnAi Yu/WěESM?:,00(Wa Of< ToU|<= Ff+- FguW)Ɋ15!/2JZ"Zg0ЈJZAL}ܺ Gx9 eM1SLFyt丠о3:wt8ۄA|͕[!X Ē JO0vgq^$/⳴* ^5{c#f~J?^ņP(9n$=%SxYt?2p {xh%`xe ` GpR70x `ʻICS8\h,A0~POs]᧗f- Uzǡ">,bkޓF[)b)(?:.|CN{ tpdn3?hț@h[Z1{ڠw<) Chy#uz p{iЃ~ra7 ?\ ȘÂ/g٠-WM_V 28G;JbxZZwX0!C;*kO,E;,D2AӔơEp4|FTX1a]7$h96SL1%%Cx<3Un3#b~ *Ϛy#5dB2 <IJ*"mN"`utÂ[s=#Q+im=__=dCƼf8*/ gO F2}TTi fO:,p`G\}G~3X059- ak`P` }/Κ"\cFSn@Ro^mkQ!f@v@26e^g$rjM1SLFytP 聩M2=Y@,XxX|x* ҎTZ0Zǣeg"x-uR G:uc#йAU?^I@BHWÕ,1sp@1eٷ/ d+gܡ^16au|wu_#A`<zC=klX1FGxw, FWb5[8g*{5hs쭓ƤͷAI0h)=tǖ lsm)bJ6;5p}mA@wg@g ^ekPn5j;tiڵ6lظAFUV/Sy V.W^VX卯 YG%:a!rRW1\Pr!׀g-dƆf! {vWf4$0M1eiJo=%Gs t fW!{J 1!Ǹn lYBޮ%'y.X޽-[;6o4hgaooɓ^tIfj:t{y?p9sXWzzzݻwܹd|/l]*X# y(PZdSApA&K[8\Q#]ڋ'DܫMyqln}Y¡Y¡nKY¡n Y¡n+C%? p0Цb)d:(r|Ф"GN2,f֨DL4sX_~RjGO6T *[>>>IIΟX_<~[l_ݻΝ[dIs5k{OW2jժSfu>apeׯߐYDXZ"Nz*D˫6l\v*U$p$pFMjԨ/YU!*![gC-CWGC/C;CWGwg ?8#K8 ~)/'@b)G YщxZxzc衁U>_zxxU\ʕ+Vܰhϟ|||ׯ߰mjw5|ooo@8p`̙o8ƈg -[/pRlG)X> Uqq8OH}ιsW_]5j jŊUwCvݺ ѣ'ϞsJh7CX1XA1b#4{D66Ⱦ)/{&@GTX]-J.]/f"pKX_^.Yĉ?'Ϟ?|2eyzzUXq޽3f(Y';vx7 Tʙ3M > UO1cmh}dO!_+W=u CϥJFz_3g^z Tֹs׃ >'Nծ]p<a'fZaW2 8 r8/K8p4?K8 ~I8"K8 ~a8#K8 ~eptwp1˭Ν .W@+t,X3gfhL/TȳFZ_13n?X^p|+lٲme"Yr՝;wOƴa ]|u5iذ1Zꠅqʔ)1t<<|h*pM _2"Y qln}Y¡Y¡nKY¡n Y¡n+C%? p0Цb)dd~= (&xSGƤGн{XGuLGɧ~~e+V5FG)gϞ-$l| 6mZnokժu#Zg  O?  Y F/>aԮ]ۙ3S}/XrqȱEkka\11qzϜ6l\F-|mo޼=fL |m߾cd0$6oq8_9W2 8 r8/K8p4?K8 ~I8"K8 ~a8#K8 ~eptwp1&D38ui`D`XCDH gbH A= ?[lvzyeY<>&MczdҧOՇ%KM2W,b}7TjԨ1?0!iȐeV`YTYp]䔇'?>IǎQѯL|^2ZC8%Ki`````````````vSL1Ŕl@NO ::1Љ i>;NC{%u.G]i W΅?u_S_G%Ij P芐GQ 20n[b>>\c)ʔd-4 VL 01_$%.n`````````````M96SL1%%A:1rr#bS_@>/:x֨@[gГ"L3!{tvaOpX0tb) n}1ΗE{Yא…B:V_ihK*0m1+UKK\EH8)|n[-m)bJ6kÆM#R" 5}DcBRh_@8iX$@J 56Gta-v˵YdљrRYG%?U$ʋcspFG@6Ǘ+*5hc}:q )|Y }~Zʊ>ɲ5;bJw\USL1Ŕ,KvGƤ$@dž=dNOpdzݧ]h@٫yK* [) :kQ:0^^E HgUCێ#-"p ˠj%[[>!>2s r5Цb)d::p?Nń=d*5x 4yQRFON96G\H>m"bh78_o3)b)+_sp!_ t}u= yi:tIMNslhؾm#tVp fhSL1SW~Bf,^d"Jl}RJ` lE1ʕd~:fW_ܩgZPq8cVCNCNzNxq׿OܺV+jRnn %J,g@Zl1(&+$&B2uZ?- i}@p A"Sd$.b@bjE58VX vH1(ޢEq` 9:@ԏb}@CH}Mξ? F)b)(Cg&}kw =8<>|$@=mZtlЄ1:_܈~11bޥ'/ h36(UuʋFb 4(v/N#Y8H]F:p} h.g'dR\ gabsȩR_AZMx@h#Wh, !u pKfP8 :.(EHT <|jQKwك9/e K^+U#@/(*iA$_6ŤQ{ Sr' ׷9pi8ǘ ͖AN\BƦutQp!<796SL1%otm>'M<.,gNae BΙ[/"fRpG֡?\'o l¡%i:> O=PEh1>>j<DCaQ*f=Yz 'ux IDAT` EA6Wlr*Y{ A5"JEøbP* bt: 渀A]5&ĸ%Ne)ܪQҢ8xwM`0xyz_Y Y[!9xep S ':>Ub oC8(aΠ ~XHhSL1SQu="zF~<1zpBԀc9b'8tZ-4g/`3]1g2X ]vA>P/U8ԳC%pUGu :#]@UDiǬhyyƃWnQ-B AqWؚO6Z.&€TDR]`+BqjÕ%or sn D@ϣ8QjBwLFָMO+9U 9c.OcUUUp3# _0000000I`bM1SLFYb$ K;t2:6:BlnuM56lܤI-ZUhf7nڦMfZԨQ &<[gv/;lY+o$i!+8]Pw _Sje˿}gD.<3 ˗XV?E̠cNK՚5]m:lIUTI] T.W,茒Bhԯ߰e֍5T2_W|3R<Wa4oޒ&T\Éjr<Ø[xЅ H"lܸ WnQ 8㊇ ! g`)SN2J2L<"\fm2Q%#TA#Cm&͘PU6괈V/R ժ(W G$#cK0szi- 45`\#{^^t'l<_e?Cxo+sm)bJ6=N>}|dAΠ3;P]EogϞ}+Wf3,1mUBBO2$^pt!RU8iɈ̔/K@ɸպHKrk! y֮]С#IIX+7;rIYK# xëiO,\I8]RL7.Nd0#n0 v,A N d~|)CaZW4WQ:˭Qqp/Qȇ~~-[q:uR]v[s}y'l%r$6O|={>uLHH֬Y{ϟ?m۶Ν+=-62~9 0 J;=zٳxdןIV?Ӄ )XЃ@AA!t˖m:L_vM1m_EPk? idOpk;H@KgX1p׮=gΜ\*ٓMnqMzcwD|u'NTBRh]AZ|W@u^?~22rX|MرL/ԁ(jyZqdIIwfx5~2ղ!,;" zV`pp9ucֵU/9E~t1/8m ޕ͛,P{-h~/\7СrʣaCMMP ƳfÒn_Qd ,b)b)(@v=|гM2.| C& J0f`QGu X7]~/_q߾K.QVn=ΝcǮ2eI%JX_\Spрݻw}իW_U>*%-\ zz.d}+qr佭ЅZh[cw5at<\&r+&ppt7/:RZne5!JLdԩwĩQɗ"mGtojve Td_smԨѣäJ1E-NmrD ȫ[",&!/Eiʆ`-uGD; dFnݗ5kֆFKXLh˴-;ŋ{áX8\*Rŭ^J 3 *k֬;qNT^PAwgΜ ͓'!U`g[n;xdScKxRJj;w:pcd#h+!Rk5r_2\DRE{7Wǎ<5w{\!/0sf/*WVxXS.=qʕV&HTEZhVp iX>޽#w5'>>s1Z1Hc Zh  BV#JZTĦ I̢Bl4fT 3DK|T4*G\""" v!.@Dg!Wd2.)XЕ YF\Z(WW Pe<0O>C 6~*T^{y.WrVZ?z(&&LApU-j/N @ȍ N ȓjoР!2('(M4Zڇ+Zxiuy#0Hh& ){m>|xOT+l%\iڴ!EEHW"lӦI`˦ȕOxE5jpif0+0 E"g`l534t.CGxG>f yiޠ !ئn5K̤J/] NCT…]0}JF!h{lGxY3-~2E-3u[/OV5T@\A(y+U 5y.Ā#)\&h}aJ]|Laæ{ϣYs|[nFEvw&"DpJdvqeVgHPE,Xg>n:M30000000XϘhSL1SQtozLc@g {ΝSgO8'$% -ش=qℾH_tǤd'۫W'|ʳ֭;ÇDE)"6,,[#r/PչsjlЮ0A޼iݻдi H Tw2Eyއ xh۶=44SE+H3L:fTh Zw}"?E:'NuwhjdHܹS"Eh{^?fxٱc'ڵ@Ю]cǎۿy͚utI,[ֿz1gϞ9sf ʕ+O-mر3Y/_a=T d2#kjig8pKnT4k׮_?>{C͛QNK|NȭT 3l߾S"xKx CNX9gbd@&XJF:Զ|Sbe0N7nya:`Z#<7n橡25uZ Q,ڼysOO}a`` &&c|˗oߑe,YzeEcuFU"xAkܸ _/Xb[zn=7oI={1id/?:q?~ݻOtÕ#Iɂwvժ \ӯQ&-xy^} _! LJDHH6h)תUkΞ=O_`arH<ցK mێKo߁\-^L͛zk֬[ruu >5uέ[wFB$g «S^Jʔ7ow gϞ5D֫׀=NT$۝:u!K~Zdh۷֪UGR #T5޽_F 1ܹACf̘u 7w P>7mBG׬Y|gW\#| Pp sEFk+W o߾ԑ5kE!r.$||| v?6:E@klˍ7ݲe…TT042ߎ;3iO +V[|I K.ctЍ"?K]ay,@ܹꄱu2r<ޥiŠACHMB0D2PǔϦMm{VqHк$J_!pcǎURӳo vٔ> 7S?ԩ w>t1v0<<5qȐ9~ WB7oZfyBE {~aB<ތ ¸p_.֭[o=zEz9wo-sm)bJ6J&Юo@G$DzٓOMdcbx򄰤ǃA1cLyXlYk׳fc_TudŋǏ>}Ν{'&wQ^fؾ>11u]|={͜Zo6v>}&~}||.ԩ3+sp2p0>ۊkCv:ܻz x!Z#G:{Ta,ZӍk\a*I?s5S0HVGzw܅ID3g%&~WקMAU}͛Yv>Ty>\n/Xn}<| p{3f ΡRh Vk%llVlWFЭvXrKnݺC[t VF-GD5ztt\yZhuW|BSS͛?44 E\\W1OъMfhƏV`|REtv굠IŎ9#h6޽GO F͛2*U@-C*ʾ. ؠ]#FD]pi:h!O6xY~ϕ&-20utK{Q)3L׮ݩI>ĩz+S sbh;w߽sǜL> mSx&9s0W^x.ܛc ;v_>{&"&:J&i$B?n߾AN{˕+{@*Կ5kl,nݖɩS:tYEJy}XDJn߾;w>D>:pE31-Fy.x a+Vd $em``````@b)13Op̊=eĴA:N I t=޳g߂ u {:FJjlW؇T*TȳbŊ_tiݺuի7a„;w" h+[?NMAj16lV;yɩҥHi}yɓD2xp_?0zt4F'ϾY_xvރYfհa'O߲eۨQcVYΝpM5;%$R_zӧ~))S (D:W%NUVC?At{ԩ1l)OلWvÇ&Z ԨQkǎ]-Ν;/Ə9Hٮ[''LHmڴ;r8td ا6#kn 4~$3cM[%M= -Zz[KM"ŋ0H|"N:j@Zj׮H*l,O4xv$èPc^su`qcxrkUGƧN22kٿ|4pparrʾ}Zr}v22~wuWI+"Wd00c̘1k ,HNN޸q…05-#rηh"6ZƳ@>1odڵc&TV1ٸqS  u6ILe@<$<'" z#Z%qqW: FG2fT0`c|#Gڼy+cݺ/ˤaDM4;t;v"NJRS0hHZ'OFe$$"b(c#2rx$cIII/*gK;f)X&_~d>*j4`~} C [ejn2m_j hs8[>EFQVИcG?Q'￟6DAp!t6ͣ!;ܸqmVDF_41RPS6跿}B8|1h >}?~la_QSN#\HM>ڵۑ#Gƌ?R~TWRbʽ{-6X$B8 lF}r嫥K5jԤ\Ӧ x~Izlb-[nڴYO@f<M6G&x` -at>Skn3i}<|x„$;,+ Pg!xf9s*>Ʊƴ }Ќ i|=kժo j×@GCNXc`RO//Z *=tpٹsW='+<ܭ[J*ak@LƤDzI>yEN/_1c,YJTH)cfc$.n޽{۴mQH",W^Ν1G+V?2Hho7C ,$*j h`SL1Ŕl,p=.tHNN@ﶾ(ϟ?oҤ,s?c^BݻwϚZxq7o޼ajmذi˖meoܸ͛hԛ5kz;z5hΝ{O/tVCNϞ=UN{=::ԩ3WZĉS_|-58kA'Zhu֝8l.׼yz`!W|$DAfĉΝ+U~9΢E^xa 4 Č52O'r1ҿ!n/a/ݻW_]gM2C ~y@h,|}ː I) I{b!((ҥ+͛]|!f $0 h 47lH;Ae##T/Gt}sxxի׸bw…^z,a1 uԩO`a^#0+]eVG{yᨨ|Uj>bijbʝ;w%:r+rBxX_~)wQ"g2SXcǎ7m41!,1.xllPܘAc Pl+T8|Ν"Əxν?^fw4;={-~!t7M>388O?{z{?}# Ķw J"."wW'Oz؄/#))S0~={.\/X~i|?pƌY*_ҥN:9 -bvUd# Ү]{ΟH>] >LL~4id|||'O MqV׮݋X'j,+B+PF9s.""Xf. ɏ?CZlѶm۾?~RL_Y7 _O>lGG:uΝu.\"zA=KuoZ9@"w \ЃƄtu}}2/RJgf{\Bʕ?xSN/S7^w`TpѲerO>|Da3m/WjϞ=lيq&PUHk⎝6'N!ǔ}8+D7nz̙5kwCnܸ&3oܸ;7븍T/v=`c;ֶ\Nk_v*3&*"ڤI={T&ODUlL >J,L-y٠}|| w i'줢Zk֬KIt28wç>&IIVXED5ka&֑#F&%~gj22KLk׮þ}ԏ&M-._%O|>|_ّ#Gmݺt1M䴚񢛮/,?ڴiK]ɰ>[ +<<-zfbkq}|fZ#jӦݖ-ܹKݻР!ʶ)ս{S*U"LU׭[u#@ѣHv=e4:%$$,_DaFh=c 6mMpb߾l>N>ֶm;f̘E3_ȑ΢/1'W\13gO&0.ևYh;yd`@e߾O>ӧ?ՀŦj,Lg<26k UKq85LlbU6quؓ';wzo u끑\p!Q 4_k zN];GjhzX֭@di70Q' ZM{s'?Xf--ТE+f*U-Z0%]<2׮]Νh۶=m!B}eExAо:SȂ@dBo娂amا xԩe\;y!!@C+a\8A9:YCȂ$U.|m\IQ͚k׮+v:ܾ}wE37h(>Wh5Bnq'AXlRwjHb;VlAH'㨔~ _.SV1H*J^+wZU( TI^h  Qm]׆p-JQ-BSE(n.tna"`WqŬ-u0,usJ Ƞ0W$@`>P(h @ɓ'СwڣsXUEA*ҵMqGSM:eǛv @@9rS xXF"8)wX㊰ RTT!99kVD&240^%2.Sr5\p`b_BkP%{HaǠֽ˾neI0;PށJ*,˂m*@#[Ul2A<▫(opdZa#&]=Q9¸ Tŭ•/@i д>2@"h!o*r*Zȣ\ŗ?P20000000XEhSL1SQ{0?~͚>ra)Ct119rq:N7$:v:b%\cOlw貝~vZgp6#î8#O.PWJ:\v;m\;74^ʾNDFd+|Hrb]XY!ŬȯbW)_e+;y֫WUV&pTnZT+a%&&bs( J6u&`{q1Hb][KҶ- -ˆ)-PoU0(0f|Y# 82BxT0lȔ,;SReįيr-8yهYnšJR `G1ȩT)<ٗшA+`FCÁqdi57mڲx@*㒔؄PPtRnaA"Ls $^VUF  hLaYL #:@-8HRAUW@|eP{0/ LVFw\r+2BL 0nx{]tY: ]`hh_*tfRE[ .rHl-h["_' +ZE,| #Dp%)nW(بɩW`w"`ru?hɂ,@4* S$%,;22BUnQ`yh8Ъ0|[PQl _TAH$nO0Zpnʣ w@ _UA#eE˲ >*жÕhR 596SL1%%138~y:g@ǻ~=htXJjOFݯex_6#ImvAJ |m+ E}UU`{5 ~8h!*HʩJB1ۡ/4S n#QmA \ɏBVlaM(6,$QG;9)ju  C)4MZAQUpdJ2ELsj2IM-Vt#1(CeHlU\Qi[DhR+0WpU@^lP 2>)K&2"#l &)@K )n!qTOFPe_jS[>GAZB$ іh)lI"bUA+rh,H yr+u IEEWnW@NA%w8[z@Fȋybʝ6KЈ"ZHȑcyjWG$WC+*( 2V}!E*-&B1ˎ,m*iAp%9\%IKe1h4000000096SL1%M5uI}=)rℰĉ& 7ptxrb[3]8Kk T5S`Di0;mmemvre ӮGQk}B%a&]0a @處w%/2HOq+k%iZ-\H-(r hSL1Ŕl@$.HL:>uƨSFL&ON4iD0!,$M;pLQ]+VN]6uk,3a{K,IGHjӎ< J?)] ZF*8)a[R[tiA+E;Td!*nu2%uhh,˸@LFS[h -&dU@ABWQS(IĤ! M)];r]Ɇju.} Mjq!Af/HRA@ c-CCؐAdt0Ö aJE/``&C(BgAp+y]S o_%IgIub/#Ba"n!EdSpVUUU$z.0 Jb{䒴 dI̪mP2]ȋ Yj #˒2٤K ʅMȎ<ʈܩ90%  $#52j4ЈlI Gȵb( hZSI @ ƎD|5PǾX֝P tѢxTw#l8WD eH~R)HE@LU"&mDR'i.;j.Bk)"_2K`sm)bJ6:76ufԩ')ÒI)AR8A/38,!|DJd:ud̜1%$-B zTΠ'%c;pTDʼ [\^җ.Jsc"@耉 R_xN`<[ 1IB#֕<]Zp ț7? <= ϗa*ɕvGWG:%lird_LAGEøu\5iqD&U>Xn%0u="zȘѳG]?tY87htxKX6:jZj}}UT㶔[d .SFʔ)נA#?֙}|sZ'UIL@P+&t0U'PV[6oނk``eïTJ ڴi۱cfZW BT!-mԨIٲ u@]<* B-(xAX޹֯߰rP+V~B4ifZ)W7;w#u]߬Y|f۷~geg(krI\?#G Bry+Ul/4*h! 4:|hbx K P:ӇIHfj5֬Yr}~H tx)Msؔy!)TiܸΝ{ 2ϯ,Ud|@lOmmf޼Ϟh޼%/!o嫡tӨ-QTU~m>W[В`ڵ;K  ure=SdS4BTh0*4Ev] x"AGV޼{s96!ZV:'O>z8Cڽu(QD(8`ӧH &MQ*AknQ@-oѢS _jժEY`uTa\CT;ڣG]LN-2wSIZ+ր2%z]/1!ddݧH"rbC-L}ȑe1w3#9,,/ܝ;wvƴi3*oZݺwC]Z F#}1571H \̙3AíW@^G wxr"@@˶I gd 2*sm)bJ6JfA"I}:!5ui#mL6q KBb&7(*Gp`@%\,:\ kמs/\hw;oނwJUZlݢE[W@K|,ԩSif5)]O'#V^B@ݺ[n۸qS8:SZhZjk{:԰eDا^֩bHH'Oa'N{y.[b۶A ˖׉ ۠A#g}~/GEƠq21 ;._Y-SJ5R6mڒ#l7r媤^dr)P80}A`P!Occ޿# wtK0aæ+W#LfpA0X#EpUQF|م _={bj ԹqѢŤl}.& 1Ky[nݾp'; z ,[i2 DW_iݺMuRŰiݺ--<4[}GmS*hʕ-YuHZpjܸ XV!Ii-"/ZCMPn2TH k!XL@hiҤU4~ði߾#iQא | HF3>.-Z !TIʕ'&կEƹbHb0"1!D0-<"6%@0&XaXX'/_I4BhWz vjSD~\~oݳg;ww޽'Hi]O:bAmRҤc={wネaK XE$ }}:"b(urk׮С]`w; 4gAF 6# ~ߐ4Ix]$$#/Ci BWWS_>|L?GXt.֭IL hyjxNl{$:$?xpʕѓÞ={_5ӧѣ'3/^ rnaR۫W .},_#mڴ#Fˊc$}i8dZ:w8zɎza1F lIF&3O˖q 0TFH 0HFŋoCݱcga0#Y &=2 'PD=44$Е *Vn=4EЕϟveyp Attml0,,]+M;tpB0l\F1rH&]YXxx i+`fM1SLF7гǤ@ >?Gpʼs{ϙ3T҅ y+W~Dς oݺӮ]JAA!_۷?UA?C&tYO^zm~~enjtULKaO~ 6>}g/̙['-duU"%#y#0H3f̼tJk[߽{WbveakѢӧϱMQq/X^~ .c'/_vzTPOH׏wIU͚̙s䁐LMaJU6oznzy2wDqu4 ۷OϝЬYf͚Lw]S@jjl߾Vӏ ȕ+_}unݲeۋ޹s/))wpo œ7o6mڝ={^_Z|&$©`5dpݠA]<ͿۿPjB#\Q"Zj!Q 0B%Q+W+I/9ܶmMe+ 'O֭Җ}TZС7oT|&FӧXfOz a?x$_߲sn޼_0v]ټy5k=|x^׮݉TЭ4;wɓ,Yʨ^&~:M nܸEV Q&'N:t0 5dH0ZqNC#Gd+L<˿c;w^S|yz0!zO?S.UT#xu1nk4˳f湠i<lɒ>z| 27m۶ UC <8o˖g۷ȑ 9" +tҀI cYh&ed[l̎cfeK2̖)^3m|Ș4zZg{[O8'NdBy6rq32Bդ_~|歈]|uM6O|}V4667ہA#0cOcu I 銐9|`8 ǎvhFd6U~(dgYզ<犓nQҥ;wa׿-PիW׮]>O%$?1PIgU? efaf|xwzr?B8b"ӦN0=v촘1`jtƔѓj@ K>,1up\d'_5kNrZCG̙ 3g>}}>>~Ker)U6/_ hf{ᣋ-)_ϯSg22ƺժU';ԤIS:ӦM-S&HqX*ʥN*N<=y?j#("3???Ls'd]~nܸU7ѵΟ@*T$z4oФIΝ%/3++g칄D^7pRbb2NK{{/Nh)p:99-X`ѣݛ0aIOE*UJzxq-Z|ͱcݺh:pɒ/>}کS\rAX9 s!@bCæL׷(K/^fl2-Zxv>K$%Jw#\Bf+VF:;:_vѣו+"f֧OorKn^$TyUkttq rf6K .?ȀGrР엂W U[%'jX'ti丒rŊLpp(8Ⓖ+c9\'(8cVY/Gڵ7hկߐR{cw)V s˖;w`F OÆPjRl a_Kll<;Ly93Ahuޓ!>86)6jTƺu9 .pP/򯩩igϞڵ;tKc+]xxǍoAѣ,?!mTCb9r4;vSϧNٳ8lK dO9*/GG 96jԘO6jpx(y%YyKx@gak9ZG86j`pz>{T >P${D&Qկ>!/e25_.&'U>ЬtDow\fa04S>?ǰ#E%LI<=>u^r ҧI8=vzj@=." =R?yf{1޽Ν_BE''j<7{Jw֫W\۵kϘ1+ҥ_ڮ]O7k&fm3fBs5k_x9**%8|9sʖg撶4?>ڞ}jSG>~8K?u܋t鍊#nܸɵk"##}m۱b*`YYx3gרQ o^6njvl~+9rljpyБ &bh|Dp" IϪMKyNDUϟԩ3\vսEST80ݍ Lmw޻`"R۶'&&c&M>}v誘A`N].\ }h(,,L$ J[>gfΜyVa{^~퀆 qы%8}E''bbG}99FNzwʔi$HQW\DNXoz0eϊvd#,,Hv,w9=}JŊٳ_#?tذj۹sWb+RΟ}:efLMM/A.s` Mܳܭ貪tF!/NlJrA'OfZ+~_%Ԋs~֝w?\Xm۶ؑe֣K;w޾}'Mסm*^܎Gc2$$(>>OOn߾{ރǏP 'ԇtdO(  fS~ŋ~Q(J6МZSbr\/^ Nz_GFFqw)}Q.KGc%;t2^TC,W|˕ i@af !б܀7z w |}ՀSY[С#SN7+V޿"5j]p)%e4K^^>6mZ/V{.g{%O<%B)S?~Bm_RJKnذ!00Gdڵ~{>}N"u.]ԩgǏhoXN=M $5j|dرK^@݆ F:NN;qĸqQ&k.BOlH2WZ}Ѣ%l '{B6njzuǎ#;СqYV{Ϙ1K[i *#f߿INri %pvv><8ի{YK$a/ ,]y_CF@a@k7Gp@͚I(+٢ES#GM4O*FO%;̛P}d7oUU/ѽ{OСٳ#"kFRnãwT23OG┼TC萐06",,\֭߰?Cc|j+V6,*QK$8Q)*IH$Z!匌$ 6**ҥ+j]YY9܉,q u!X2hqȋj'Y޾Tܹ\2)Dvo޼eϞEzxTbi۶}VT6AjHxT\]1` b7l< $a_ LE|"?{ÁFtzÇ\}ddK˶|?۵k7 mĉղekS'C_rɑ SAACXb/~1k*yÍFzSOTʗP,5|g5|sDP#M՝}WZ=ET ,Yգ܉{eSFc@ 8piĀ bO2] !#F +ۯF M_CM7X6m5j\d)'[3N ߲e믿Ifui3o߁I>hђrגhΝ;ӧO/[hbb6,m&xĠLv9 a$w@45as't҅32`DZbc&akINN{7|]\ +VL))Hj ::6/Ys(D…K3g]vrjz( Le[n߹s7ZH$!bJEܻwr.h*2,Qmv*1K>88*.7"Ewd_?cցԳgo.ccޮ]?Ww۷xqw;ut+ER2E˜{b<555Q}VT00QQ1yh",^ܮG^OE;^8 1Vb͛?W /_A !:ۭ GsN5-;WEq 8*vȈh 5A aFYS}DS@ + 7n+>#烅Hhu! z,q0{N\? 完c Sܕ$޴is,NG nŏ=2dXxx$ߺ_HzD];D ӧOۏ@&cg4iͅ:)R,))a5{/?T!'2K>kn9Zf 8!'ƉYdM:xȧN39g`"5&Lɳ'kݛ>}zR]?PĊP*tyŊU$:u'Š+Ϝ9…K*7 4թSۿ̙jB!<5lڍxpd{׮=/_!ի7KR\N2t<<*Ǝn/^ddwڠbyۻP!ҥW_mÀ-Lm uˆ@&͞? ի{͝;ѣ'leLLG/\Hߘ2 ]gBU:ܑW]9+W"Bv_H"8phhAmV^Dy%&&%:t$7b !fYqґ#Ν˭WA":ur u0$'BYKϞ=0VR !Cnݺo~;}W扌5˻Ic9ÇGDK.{yjjw9,agDEH!)Q [Dg>="eRعs-8I,)NG<~<ũ+ z:BSE<ɍ@ϯ&y+::)!Thkb]vcg琑1'飺uA"l%4fG$u^T[r/na;['u7W^')JwDY65j#(44g^UVg s}۴i8wkb%(r0xp`yÆM%쒒Ξ=ۣGO,c\ l"l:G_">>I}J(YVG\CTT׮]_~#78y3yǎ]e6(~Ѣ6Rf)QX meDb6ݼy#|ߺuCNHF޽.]:>}]{!$$40"e"TA|7̙sCb5Dԟˏ>S^lG{ +WfE0O V8o[i@aftX̤)㧾=mn҄cgč1-f4=J h`5ӆFe{K2̫ G#Ϝ9wc2{%wK|yU~ee$&&Vjӧϼ~^wAܸqs TTrj$ʕ^655VTeѢ%n9q"+-mdffԩS"emo Too9sGW\ c_*T5*cժ5DEήʕ9sŋ;tw PGAF۶ "~f [l}:ufk֬OHZu֯¨SK11q\vu6P#G1bʕ <QqppYvݽ{Qͽ70Bjc))(btĦ99Z!#>2lsoܸE;vj߾#j!X/~!;9+m_n݃ȶ@%ѪY_.3fہ)f;5K[lc$ITx~Ֆv:Dmؚّ͛6m%V飈YU.E'ѣjFW~M6߸cdzl#Zzў=F9g_86laC0V˖&wݥK7LJHRl+Q7@sPgn޼ݹsWP)n Y?NR֩&~Jr]"!r5YB[7_˦,,c}C2nݺ}„I޽'IEȂOs#y-8ꬒ>Ks#':u_ ٳ7wPDG`r 7nwfaZszN[oy vW'pfS6~~ OSR` .vw2 ʢR d>/@$,:bpdR@!b" MR,%|C~(*ׁI{7~AYw TF#ZkVe*&Sd֙Ĕ`f($h*6.IAfn֬E͚D1,,{UTQ!Ì:ŀ#ZB Tb$AW\B*b>9r4ޭ=}RaU1S4Z1 T CA+/Bh1;#;Pv%1:2 _~@5`N 4@E4Lmj+3[5tbLI<`_W9gfd.2RxJ&p$:F$2Db|9e̿C,2Y bPA@<$E[a원(Ӏ6 30 C#F;9&i=?#j@ψ>5lY[=07)c룉SPz%Yg !RKO>n݆W6n;I^ɥkcŀ/d6M1[ #b:ėeKYv AKtYEٲJ !Y&;p,Sࠅ4K:AFSEBPֿ((޽?aES(.2l0KQdS4 sKů`u 4.!VYrgle:7jx׮= szVY]pIبs)\J E*;q0 rރd X@!b5$FxpCK̂n8 *|"F% PR0%)a K2L֊S_%:^dDfZ!1V-#Vb"@րub%i)$˔&*< juX)ЎBAEsgގI%Œ"(fS1ȵ"|ʒhIxR/hZB^1+qǒ JvK/xE )!?S7/Wmfa7Љl ШIƥ̴5_{CГcFN>b|d금aB҇=ۯy~/~?[v1f8VWN )oUFeVܸqҥ]_=0hl,HX26- 80 ʾ*B2`%?(|uwÆXv{ռV%KDKFKZ!˸7O.u B O Zm߾SYv}Ӧ] <5? dMq3a0uT=K JLтcm mv"K^XZ!u PJX! \+/8?˲˰a!mС |6 h30 3?ǐ!a#&!R$K9[zԹg&33Ǎ;jjH5Ճ}O#remOqZfdKP\A9͒↢dzGSc ˵iAKiTbJK1V`Ж2asA9 E'W?hQ[,`2#RJkXF a.^`VR9qbyR$v`bDWAş XN1K ZL !/aÎAA CQ Ń(ɨV,DY(f_[V,/2@.EPIbNJAKf$)Xкq ~ekŲf,k`NA- g/@غ% d($ KŦ!$*|meA +/%QHA_\) 7aӀ6 30M !)CGE~׀<;)}^|߀8' ԀM9]=ju[ʾzXC.Q׏w4zl.!*2+#_W B2%hTbedx~0KWMxw-2Atj(vJ.[[,˸HD KKtvv KTجP %3bb!8^p ˲}lwG'_L.~%:nm w8E f) 2j(N|[@#˦h3Y@T՟w IfY[: 0l%X7ʵőqyTHjI  ɥ$G;% :?/dɅ`Ҳ rDL7Xf宔eMfTa;ђU7U7LaSʬ2RHGV"q")( ; `Jʺ!3000000000_MM 30Ì75 K 7)2nJx̔ة1IXS'fŏ7jF1j@=. h.ޢˏ.=3%Kå{1|8u=p6p1(6ar8"C0,A+N;,, +`ggW ť\!r9U;)m L8%h5\_lL 0Xfv;BR0\İZu#*.EM 0ȹ}fsh`~#5`ͪv  ;k3M,K@$:X `;P?*#LOIFiZ`^~[ G\g~ IӀ6 30M CB 6g&KzVz|x{РjMүCFZuEK/K{[C b KhK8#K/BWA l-fkfaf0(8="45秏]{S߀}s[Dm52YQiΜ9L6,Djܸ^lŶm;*WnkA KUV_fݖ-*U^ 8dV jY@?<:;׆ `~ymꦤoW>"a˗8 GbCgk׮ǩ+;q .K)$ߒQJZbTtqq_!;|JՇ%aIj.xiYGf+TҠAݻ.^d%Zfj¡qppjܸ]{.\+mڴ9C(9b{쳷wwr˖9_~ɓgc {" _}*R!/fhU1fAf!h]PԹO~W\{ٹsOXwl۶ѣǏH:}t00կ߀SO>{YC-2 ɺ,U>~;w7og[5 () rNj֬e˶Yf}vu)٦M`vvvBBB0hbS^e`:88sq 1})ӧudʠ K$/"dPdtcA>l9M 30Ì_/08mPHZd#bGO`WX1G6a8nn 6|ڵkO8YbeWWWa4iҬs{;~D.ڵk_n/lτ7ݻ{>ڭ[6m֫@7^^>[vֽe-Z`%MhѲr*޾;vFjj֠ޠA>}w`ݺuСCZu8cAL!)S\ hԨq5k!Ț5kwЩyOO@$=zC]v'5jɨ]xTLlwxf$2aPƍVP&m۞jKȳAXBRQ_'Ndڵ;0-(Bڵ}3֔2K5޺u{۶PԤHT)6(R#ҦMڢ֮wM΄y|ĈTA"\b/*(U*|Uھ}5VZŗ-[-[J7uԣd/x!~K8~ԁC5Vԩ AbIJ/U%8XӮ-ZZ޽w}I/x11qgΜ[|%7n+5?hxx zlS'x}A$(]|auVvj߸qe**nk@>}zР ꉗE;KIի{կ_ãZ(# d;ժUp|9!R*Ū E}PL K`h)A@yVBCϞ=?p`}:u: #ө}ľAnjB _aw\lEۍ O Txs. k0u6>B9u oAҏo_Ufa0>6?}ܫ'ր?:-qiSS&G%O4><~\Xؾ_YT_ҥ]vm=_!ի{mذӟ?>{ii#?/_cO>?z{njqggzlڴ޽Ϟ=r̙T֠A?٧oܸiwOMMCfG۲efoݺsE7 8b<~֭ۄaVjK׿~Ēѣewoߝ8qr rrNoN>;sr'MfЫ )R޽{?)wRruuoԨ{4vM3ƍNbݺ ")4h0#UVw` >$/MG T,X}B % B广@bEN{Rrr*!]voWO rPCBl{݉{5nnw1 <-8ᣜ |@ݸ9|hp~`i$.?a`````````RӀ6 30FKo@GM 73.unO@/L`5z)A=&8:jaSLrf͚aÆ ]t%88TEUlԨM/6mn݆;v7T̳g>خJjÇGݏuppjժͯ=z?ES8|(֐9w1"!ҥVMqsN___??ʕEB2}ܹ\=}_OvPeV &0)ȁ/_SJJ9;o>y$٬r=l`y{#ս&Mr^`1[B+**V3gΜ0aBNrssWZek@@*V޽>}fug*رcpgYܹ -?b#`h|;tʕ PDH$:8ڰaEgvttn׮9->qorzkٲ5Q0GBl,h t`pat ,"q 0yfSr9ljaӝ0>m(8E׷5'{^3f\D8w| =5 wR[DE…Kܳ-ȏ=Fy1RڵAJA8~ emfa76;1*acfŦa5eLY:n^h sGΎK>-&ujtʔ  džysI['4++Uʕ_l…K*^`\/^mr*888EWWwľrƍ_ζgO>b6mڶhѲ_\^-[?}v}QUcbN:S<#w.Y%ɥR*k׮_n]ٲe]]K Ćcǎ?ѠA#ԉō0\p15jԺpRz(¨_anE=CmgPn/O0 k 3vW_mYb[L&gΜ9r4 O58!\C͚rZJ"gE nܸKWXb$O̘1 ٧0N)K,.(#B:G̖lҤYמGRc< 7F\ԩ7k֜Q(8 g˖m/dKBA5۶m;ws~vN-[:{lF7ɥS.7n (Zx._2~֭7'*6Sf!ccc^cǎΚ5k۶m>SRRoݺa{= /nףG˗b P3g$e.ùrjRj̔wW^ #rn߾#N݊+رk5R^*V݁$GӅgE;wz$\99gϞ(D8ph̘qЪzTȣc)18ذ˿Gl"#D Cϝ_WÆ\vcĈ֭4m41)…˩)~ѧ 5S"6)}:o<;;{Hs"64nٲ㺣w޳cN$vHNNrz.9. ; )YӞΥK=zG+>[|||"'" & _x ĉK5$ܹ;}|:n5(5k@p@ܕl.ZCp'| 9s7AP2w000000000|4 h30 3>`=`hzx̄)Q "bfEόI:UzSO؀}zo:Y꧸5i˗:uZzmnrny߅ZڵlVR:K+W޼yk۳0Jݻ7ݻ>|ѓ[̘1Vϟ?_aPPx2W:pД)pk//ڂ_lZfWXv˗*d1/N<{߿ ښj9|ISpvvQ֡CGooبQknDFFҸqS$ǎ`H;z6yݺ N-[`HHXٲ_H*5| ZU%VPJ%)fiѢ … 'G$7lXfFXTu޽wɒ/11Bmڴsߏ?o~ߦ(aƍ[ FȌ.aL͚t2 kG2F> *;wϟ?٥Lr_*Tu6ىIǏ O?-ҡCo2QW'$ q9-U>..ٳ.\},aS4v *M럦Ȉx ~&fŊ?hrr*?~zN^^Geeaԩ3{ƚaOPj`{y3֭߳g/!LӃ\5kA.cqnտ%? b}>&={+/d #_9 oNM 30Ìon@22,: 13BfD'MxsF͎K7bFt)Q#&ǎ 7۷L:44ógܹw7u .V˕bŪM6CzUk6nB\bo+W;~jթY6֭ /uݻo^}//ē' С#SNT*֯߈=I0[aƍf{1!;v~⥿cZ^GO8j>|tʔi"0"O>@  Ud) 6\;QQ1Nܾ}l=(;j1mvWB! ^m{ǎeҒfX…YSjN5@m^}ΟgE]~ocMH]\w% C+fɆ w=kLJ|NYYYIIHR+.OJNN-ZxN]nݺw,PI*B=|ݮ^zcΞ=րvF/ŋQ[nW\^pG^@QVU y'wa"~)jM6߿SUg*_juW_my-ECڵڬu`<1"`љsG*LT\m۞BO@+xT^%~ҕ6m*$E/ڧOgsXTԩ3 կ>!S" UfF5VէD Ǡ999ŋ翏"..KTC eO.DN 8)sf23O!@m/OMM+9B`9uC>1Jի{!SP3gB#F^`sXtBc$a`Ja!ȱc9TBlw0990z>8Eca#/Pn?KG7 /*M 30Ìoh@J42dG7f,A i1?h@ Q=uQykܸoV}v `z={+W=?~/k{˫>nĬj=z|ʔilz9rl„IQVS̙3O޸qkHF.]Vزeێ$i1qXK۵k򕌌[,k&kRљ;9lXmΝ"K:tpȑI%;zAYǏHOMRsvvDif}://oذa ,ؾ}ESȤqNJD=/]±F={ fgeUݺ ´o ͩ T ERŊa $ҥK7|A%{uf$1С#&M*&G2rWppBV0o釯d:88GD ͽZHqD|LlYY9,}YAs6RSHM6'NiX}PАl[ڎtBcd'Of;::_ c%*->v옣c+Xn)+Νݼyu% '|ԓ␸nv*ХW>C11qС/ʇ<22 1Vپ'r$|vYoƚfߨ\-/ 6n۶# W%t>Zlǟ37P^Vj~0000000000ˤi@af }}׀IQӖ y sGΉO'EOH+8l/ZB޾W\4i ..n;yreΏMm֬:P2xCk ))#~ɩ.]`^٧dQQ1[lwAn=N>z$55 _M6'l׮CHHs?~!j׮V׷ƙ3f̘E^uǾBӦĉ#W\#=+#[g Ps GA` iҤ%P">&ظ;v^v%|!_J]RS߾}7#clLL]{_A bSL,%ر$N>#988QҤhaRII)C m_Ν'Ȩ 6}oHɥJjTy|ݻҥK72Xjuu q,| (/(eYsЊPAM1"h mPj<9*Jnhe9*QԼ{߹s߿ %)o=Cm?#G5<=/_kBB'N̮Y6a/n׵k˗FGrbq}Fׯd33Odee$ ]sXfXX'ZhIy|֮]/_£Ge`6maN> (5\fuh8]Q9uaEG>ᅀ |\nhh8K$N^ ޡCGHAFŊ`9K|IR۷0`+ARC&M>

k:JPpsSrp"78޽'{DĉSΠ>yÆ1­w%60yIFZ V^~0000000000p40 3xO~Uz`PrC'7G 8'yԀdɣQ`nB76 ^ͳLremѫfg޽l{\nCJUmo'YrY޽{[#e j<Ν[nLq1jTٳ9s.$$ a''&M;vw!6n k5jڿ [p܋j>%K!p[\v=..G3fݻw///[w^ݻ/\bb$f+W#w7(bƍ[%̓c * _.s.a`%5'Mrubػw]&/f@]J5|ʽ{o٥K7՜)S]|c%wd؝H@aC5kօP:^xM…,iZ8pZv<|fT,X*0`֨Qᣓ'O%8O1uU+hRpRAHXNAyeM^hF B҆r` (JG  /kP$%0 LdU$!e .U4mNK\ZAD3 GY_ L|# ]oԉS01Q%Y$##w! aƲYe H>.dfHRK%FRꌖU1 GSʎ€i´( .1dP(f8^xG^#𕗖 a`````````i@aftAC#GNI?+2vfTܤ 4m7" U+UjkMd,K7[R$1>\,a$`U~/++gΜy,*ʝ-!kkSgV h٧"vsʵz(ס0PT; *N.˗R~XP$Wja| _e#;⋣芉%10{xT{18 Rޙ$Y\(`ʔ* I\Bh I86_w,’"#&yTHX>5Ĕ3CIZy' ~2ifafր_4$QCm ĩ1 3#cgO6 S2@fZ$zp _rp5P d;085fw[B-SH"uhlي+K>v;@JW#Dƌf,H]d0\vݕ+W_zΝ={k]6X[@0G ;H 0_ZU[S.,% i"MM9BEKKʔ,#iT$ȳGE&rɒȸtŗ<@]NeM|8r A.1"]hg[q"2̊uT KVvTIbVp$ ceRA^$H,_KH dKa G_4Zrt /\B ! 0(T+ef&^D@fĂTt)/\*0,3@a Ƭ ^+h92(\ G8ZS6a0Yddp$ -"{5钑hĠny;hSȫJ*LAk!m2ؔBE| bifaf>րtt쨄y)r/G}=7!] i1?#޾_z@WO˪!RUSb5M$&j⨓Rի$Pp )Bš vgSY 34V4b)B2b f$ Z bL`D`&4dUt%,1+~qd\V$%oєwl>)_UNapjU.8 `b-aFFD*d%WTh <*/ jD*@Tr4U-ɠuiYPK ;,>@KV!0"H”32%B|IYaȩV.XuW@U\b`AYU"1S(Kr`r"ሖ-/* p$lI](ByIҲBЯOfa|Wp 6oИaB$NO8':q^B 036 ̈I<8rBttҬ R!WpYqɯ7|>J^ J,doȬ9IƬ,d uu|QoH_:8CN`UBa8HV4,aD6*a*Hy<4̮lgl#h8NN.*vR ˊSLT]]YFXR2QɒD %%Z"#ggzlvd$ qK)0!ws% CLPbMTONPLf0_4e9\8XkfqXQJgqf8GN!!&.JK타C,!]f2MX$ DK[T* .d<(3<|%%IX 4%_Dr!w*ԡE`aX G ArD;JYNѡUt% L}VY#0C@RT SE3000000000)໨i@aft!o5 ·M ~A^>%m=\5M"m۾sUVwvv-m TPQ^70fɋȨ&Rm2`VB@eP1I5N:uڽfAp ^ÆzԩG.[|&:uܡCfZ $EK!S-9,Ȕd *|&-xXŊeyAW,8F3١HYb2RkhÁP4h G{:@kgUFתUZD ~޾KR #wЊG6) j%!@jEuQ_R%5jj<ൿ2K>3ń*,)ЬZ S2*w# SY`-8rw8*P.? dV9:p޻P#Hx`jYReX޽'?$;R FhRX\ )2ҡK,I`7&er],WAuG!#y!%T"Y ۴is  jG`Fa1 0faoi@}s̫Z:V  P%\K1*Dεj{Z9p).Q_]Ђ?~˗/oܸ NȓݢEK?~gϞ!~o}:8CR(pȭXU8P+$qiD 8,1CJ#L`ڬY4*Œl*rfOMʠ3K~IW ]hR]WbS.ufeݗn˖96yT8HL=z9ɳO9s.44w@+#8 Y6%QQ^5TpU0bbYS0:*N>Kϟ$CTyK̚eš/&!Kޙ'0Kr`bS4FTUh1S ~ kfaf).N  5'E7}KjH+WսBf͹s'o5jԊ}눈_Ĝ\.ik:{u[ʖ-ϥ}s` *Zq**ȃ% fW kF>w@{xT1cիW[j]be>b؁@Qa`r媵j=:pD `ӛǏzSb\T Bj8ȫ,0A vvԐU9Xk0 Gʅei?;;+--^I0,^_QhM4;y2;55 )Ό϶m;,XgE/ja  BA2|J_3 ߀&2l9׿:4xuqû  )ՙN *0uࡵXA(,eƻV{uw!ooJ RW4hጌCFd!]r=ިQcqW.]i֬ /&"h",pI%6 "9p`Ѕ )F˻?ztB<ȣJm!F={ս CRcVhF &y |.1a ?/dޑہOWM 30Ì4 w@A=/) h//^5dZ#/^ Ρrc )k6nܴfڥ^5j\F-.tVmzЊU|aTձc]lj[]ݺuoѢeJU[|oߑ֭U#Utֶm{Jj \k֬Ymgj``*Zyϯ&z\wGTXY^pGjXf5&&ѣ,Y4kJvuSʂ%+d X"HA*TشisGTE^:tܹkUT#6EX֭G&H)0$cz;v,##A;vbk(/Kj6mvڝM!*JGx6$'RRFh t$0/]XXDvvζm;:uǏ%,խ[0#q`A]z )G@9th0߇ݏ)kٵ͛dG8~mFEf! O9pS@(|Tpj۝- x, TGTR^ ]B>3/nW^}L8壏>v|<VZݦM`I 0XX ͫWG{?!!!B ñ"$ 2Vb-Z_NL,|| v l`````````S7[Ӏ6 30G4 U,9 )QV G#)Uǜ9Μ9װՔtqqQցX}gr۶w'Ϯ^>y\^[?xٳ7oޞ4iՃݻyDqs|lO hro} Z˗V͓1jǎ]~e+||HBMo߾ UN= 2=z|XP &/Kel-i88"Bd'CqeiԨٳLƥ#:w.wڴc5=TT+ǎeΟ0&&/^ғ}·?} qnx{)FP)ZȌ9JjԤIӓ'OZj˖ϟ1cA&M89-v<$$LNCTP1cQܹ+̽;,E2Zil=̕+Wq>A^ J/>zܹ 4f!|ss/bD0¡GG.7~wǏ_t%$$TmPt{읙y 3 $YJ1xP2d֊)FQ5p7`ӧrpA*C֭@#-ZܹסC'%Pطo-R^jBy/erG8,̣NTߘ? |4 h30 3?Ҁ~+8>=yxw hӋemPsyg9r,&&N[..n0qvvv=zy P)_c7o۷ݺSS^|9h`w[t-Zr޽֪U%~ qrr^kΜyǏh:\ aawKHH#..]v-[WTeବnze+\ָqӪU<ݵkwWWw nذѣх 0ZFZ'NdM6Lj׮)S)咶rll<^YOTT ֠1cƬS`^|م͛^tBի׀z>~S.ˋ/;ws?ԶjǏDK56m,_ժy)=o_ͽ{?!0]F.\7#FcȅKQb6mڢKUT紐#5u{ԪUXv=yw뫯BMk׮ vY9#|)p„I_~|ǎ],)BB?~;w)E_䛓s PWܽ n׮'Wr̨LԇC ~ݺ r,Q¾AFǎe>~XmBĿzZnUɓ)R +V ܆mYbUnE6H}fQ(Q28K|٥K701yCKT,7~GYf-8lYpp(n֬9DE2ZTܹܱc9s6a7A?ܹs}A;V۶8Z}xq; 7#e˖mԄނ¿E| lfaf=1IrM c 'NfJj&L uqqY6K˖ҥ[ցrP"Ϝ9׹sW_/^sqסC'B*W|Vqݲe۷oݺ~~Ttwvڇ& L&*e{2966GFU QQ1؆p=k Ç^1k֜̓2jA` !Zk׽pҡCG`9::7opeRk۶=)^3gnܸi``;"""/]6-%&&Svԯ߀%쑧SL#f;;*|՘8v! Oٮ]6mچG`>bѱXSXȑN().*U[-_sr9$*rZDEwDbbb/\HTE6l%ã]>jAAC4bȐlRR۷9ll%fcXXqdڴ0Cș'Hc oߑP$K{_WN#OCS~9]UTիWff ;8(~{d] P%F+V[à ^Os6>^={T"ʦ_rذo9sGɩ}1av)GKu;rKTO~ϟ䌱}G<l 6>|Wbb!22'県;0װcXPX&SN?}lSԊj$$$a!11;;aD6B[F^BcD8`l{w,x!ߵk[1 v}C,V35.{I~Z%n޸x5m+WboTjfafwA!㇄O:#&eftE B ԀQ$SWou@ϫ>xm\Vs痵j<84}L.}/_ɂs]lv_۷~qwݸqKO%CG۽{QM6W߿ѣYڳgc7n[9[}TzUV+[e֪Uѣ&M)],qBE-ظGaALJJ9Q+ii#k}*55, 髶Mlo0Up7f4{/!/^3f2Dl߾ܿĩdHBTbƔ<9bD:.JSgo_s=rjrrlAhaGFH J!,&ey}QO8ܪU.G-Zog/zNÇ.]CTFV=ѱgϞ zzF-[q&)1$ʕX}ӵkw l%Vw<},#xi }C-[v,?S6RY@.<.?Pv>}\'cOȣ5`z{{9>mm3AAC$YPxnYhqvv$Y%PFN]vA^BQӟ|tѢ%KZ޽Νi{#njm ur5V}lYKWXrs+NMua;֨Q֭;OzԩS ʕk٧5j>v@߾,'YB%սVZaÆ>/Wk֬yI`kժָq!m{F+8d,Zly*Sӧ_^}W _U,CGƌqYlZS?T Ih֭o߁={iӖz읓sa@@+*0xP,cP@5l蟙yrф ))#lo~f\\#S `hh8Jo֬gF BJBQ:-ٹsv= Ā/8\nH I}Vk׮ݠ^^>9{}A0Cw11v)S͙3o׮=$>>͛7ݻAAT3ԩ3DBPR UIJGȨ 6ݻܹ_-Jlz ͛PQŲ jǏgzw8p%7BbΝܹ+Y)Rj8)կ>80h 2HՇc3th:|x4yqlakРQjbAlŊOzz۶9`GARTy PFJTرQ2SϞ=;1rend>.}CN8ZV 0A!SDT`Р}qbb2 VZM+&#e#'>CYY9D'∼֬Yǧe.O8&Ma x!+SCM֭GVs jfaf=8l»KFdX # A^սK-5[l8qr ]\lO [|%?l޼u׮=+Wuppjժͭ[wf̘Ͼ}֭PR7۟ۻwZRJ?i_zM˹qR;O|,;9w n߿I^Q29Zb:5k1o߾;f̸?'oذ\nʔ׎;w؅^0a$ bGm/,ԟ@D_֨QĹD m`%l V ޱAF99q 8O)ڙ3VZ\NήM6 B.nܸEyIʜ>}v޼RN]СרQL8"l85zְٳ/^k.k{bz?  s'/11P8H)֯߈ev٧R!?v,3>>y…KsgqMdgP0nQQ19~岉}_p1 ŊHLL}ZhSh?. t={Bmˬ\-ZzRTPKDGb;P$ {k;v&/j5 l{YGG-Z}>wãr9ZުUcҥ+"[p9Z'K_5*#22j֬97nիϫ:iӦ;v+QeJ?_ᑜ7\ŋ -l''-[?~dÆhђ%uѓUghU{CHHށQS j^~ .?&(VX&՘9s6^w۴iZn;w_xyĈ 6z*U=3f\Jʈ={]yFŌ U8M6?{}6n܄mvP;:88UEq8cǎPl%FCj9fX4)L4{# iП0ӧAlGGg5aO<0a)JėZ2/(rDBd-5ZZaΜuZZ:޽:P:uD*w~jArrΝݻ/4tz$ G[u04h0y?|tܥRlss/i=<*)Qm`<®]{4 kmfa[У )+FSZ=w4[s[O-Rb'N>w.Νc2CErwão޼}̹/\Z#F_tڵ80y7{Z˖-?z܋waIo:-ms޽+_p\\Э[ҥ._z̓*TD`kd2 ޽wãUVleVpqLPRʌII)+VG ="#.^|Z.C0B ܫWt/ Z% Q7!ZfJAU3ʕkT#$)ȫy;wSSeVh_m/6mիٗ[w >+ ~׮]V5i{޽'|j"wo) arI/zNz?E7kB~aC5kօ!oo_'{ڵS.MiƲh{xRT\5..aƯ؈Q3g;gf͚yyy7nܾ~&:v츞ԃuκuZlMd3 ]K5l)DN:k*0;9QXܶmg׮ݑQY9]֪Uk&x$&M,Y$::wxxg7ne6<ѳgo B`u9Q>wkQ,Сnm۶'G%7\K[^6mܪU}Ǐ;С#z^pΝRnz߿ɎlEo۶#G:;8 Oy)_*Aw'5y{|a"JmϷ2WAvppKW3굩bk)W ZaրbB`\ 5PGɒDV%@@v2@0-R)S!7qYjq$L.-17[l S{a1YuvvE.fu)КG D ZxKqc,[֣W(U* b0%6h86;Ig㒹|yvg˻߯aZ@]FLq)I]2I"T$ Z2d֥b.)` #fUaKiB9rd#9J &ZdYVŷKLxKR2&AZ/ .(# J &<3o)r\~DZ6H2 /K0_ӥ #2 ҒQ܊@X)K| vtlđt-kȂa,:fb h+B./ >32ҕIBXTʥfx Ȫґ;QAoˋY2000000000mfaG 2`X!bk@X ЋSGI)g%̈?9*v|Xdw@z)1ү꤈@@?+4@nI`=<*-Z'OŚ0:nҕI~2+BY2tђ/TA nAvX5!6.SÆRjw?K$&Zz#w}#BbHʊ:5c`````````OGfa0ɟO/1,,ߐC'FONek@ύMOh@{c`#`K? jaͭ$4r*1[=+G<%\l/c|P$x%z%\V 5TjPUɿ GqbY~A!^AT\=s a=:BYegYU)Yf}|APm*T(Ehy((VZ"5/[c`````````O fa0܀?4`:nؔyq( ZY-HYMzxT;2)u ʗPg\WPQ]Bb˾zP8d$,>4.Y2FȂ^dAq{:Pg]QHJ{ `!^ gE3'qwԍ-CIQcXX@K' ɼf)e+qk+Bcˀ?Vbfaf|I 5j@ωO‡'4PM8wc\Oª,k)ik 򶧞O!^\YPP^3Lh!WAj(Tm@G* s&ִIf] 8J\ZWE[*C86 hɪ:݁$;^aE"jk^UC;_VMt{i@af F08tRHT5RǏր.mkY/mΓ2&3f-53"+E:Z̮?X+Dq!(ei%8CAj@ IDAT 勉\ *KfS̊Y 33RF0$-݂  E$%]P콐ECoRr UHo mfaw5B&836uV'=fi%i#R(؀']]OhlY4:9/n5pџF"zR'5Lͤ H5tqqCL]mEp²:$/XCևHw,¶ޅfQ(ch+TBRfV.o>PYƔ Kd[1"1. Y 3sB*(^E8._&~P mfa7'o@K+3.Me 5gψI7!|x;_k@C׵k=zm۾jnn% \A:be˖wuuoпgݺuS p#OOoTy3,^ Ħ@|/)NW2֭[s箽zi:R*ダV={ѣ;, S{4nܔ!_@x͛@7o!kziC!aURx'f͚T 4"/SY`]``{R:q~A"5kid5{ҥo qHNIM0$Zp*$^eH-ZjPٽ헪'V:?ͯ~)0 h30 3>`:~Pa#Ǥ̌M'ҀNi)[Uر{O>z U,+ti~tuuoѢefɧO߹s'=}!?۟jwʈfq [pJ WϞYw悒 Hђ: K԰Mw>?/]2aDN>>5-[7oRGK,ڤIcƌr,E Hz{.[_啕rWPł\C PׁҮ]pYdqhY$ yb*P5 1 UBY'6mqI1~w߿wEK|}kMNN.N:C3.9:*TZ+x߿X"f֭OȚ0a933F, _Ъ?`faf|xc:tȸi 7 ɩGKH4#&A8 ˧ZIS˗qVϞk׮ŋR-]\Kw|& ;;6 fjok6}̛7oT ^ʼz4sցk֬kѢ%{0cu'2fe Q)K򅢋3 zuG 1fseu-Ua&$`ŃJ^7opyժUw̘q޽{~TZcǎ˻g^"87=~ĨQwzPK XZ(nŊ fwܑ)v6m/NK5TPT]]Y)0Dz^QAPy UZ>$Y>j'?~ S刹]99SRFFddԝ;y/%BpwCG8hURӛY"N'WA'?sãqY{9r4 YERء\(7b ?fa0|o??& Wp0#&iVL܄; 7mFQÓ -[ UNv1cƕ)SѹB))# TbeJuԥo~-[\**lCaC?mڴo@vVF+WK7l^H1'ܱZG-;w _emKk/PfFc&oRuEp]R,׭[G.5v/F@5jԂ߫WRV͓GыpJH= A{{&M]p)11\PWFFF׮] W%%%ݽhf5']vUT#l*FaSmSy6nܴ[hKe5*؁&HP [U)weԯpw=}ӧϬVɥzu#G޽wÆM?xh*UFM44h`]4hSJG!x "s6/ش-m 3fݾ}y :tѣ|w>]DFF9889G@|[hI#GFѹ}Toʔi#F8u~vG˻O.\ੵh*޽bc(Ҵwl׮~(~;uBTD(dKDg>b+RXb%P<`i]ܿƍ[ѱ$6,ٳZz-쳢pݸmvܿƍq"NvG<~Qŋ5ntÿ.##Գgo$1snkׇ"*msw7\F%1ܢL |CWӀ6 30{!SՀ 5'Z IUYuK*靛{1))cB/uN=֭ː0ggս˼qV˖_ͭ$ZV˻9~=x b=۷7Y3Waæ+WuعvO|YsI SCcfڇ9svr|}kdg]n}+U+V?ӧ5dHx.]ѣW'L__f7n^bU5xY]\'O,t0e˶3go={FY*\|E*/رܹTOǠ,NE۵p1c±FA5kqU8V!#b*vجP2y=x˫?ZTl`[nOTsU# bã`VmqƦ."ܹ֭[_%&M޿xrLLkժsڍɓ,'${AUT[t_~ѱ#G|9ղek*Q~ܹ3g& $3I ,alqM;uҹsב#G]z=6v FR3~l9b9rϛ _Bݻ/9>={7Xʓ'icccǽ֯/$}$YC$$$޾}"S.0Gaa#gωlK__B dzi:W<$F8ph-ZxReth?XifiYh@ 4ipȴ3?H7z#ᡓ Y@uYjn݉qCYzx,`}טc#Pɝ;oUlٶid84w/VX ePeʔ[v;!~Ġc uhL1]ݺnA5N:3ut:u;v"1qbY_yfj2dԩ3g,QDwJ3p/hذ1y*IIU^h3lܸ7F"?F;w>Zl}!Ct[ɉ&ݢ%= +QdTTӧ߀D͛Mv< CڵgѢ%ԓ0ΜI$aP={-\Iz\ϾꫯbɋY@`?|#@2:pd)~~޿סa)`bY,ψܹ,ɓu Z:FarhWT91ձc篿-K3ro{TU4A*@loCRҹ;vܹ+ 4rh,P:FTT ;Z->:ov8eg跒ԩŋq vAٳ/b_#y';4bCK}XV)bF%#B*â{XPO8[\J{`pp(rʃK0Ժ\L<ZfyݻwMaN(U XPl᥷Xx7Цfie}%M٣F9bZIC}VtX\zoFFF)T0WAժՋ+^F7o 7%JUR]fT?z9",ʕn^Tɝ;-[FR 4uNXHyTTELծ]s*V|Scj֬}ɓ'* hۣ֭_|ߛʮg bu&Müy#FʡaΝV:g$M2 kitKHm۶'0u&~j„ Px"n1c<}t<< *֭޿pذb5ݿd2' ڷEKˑl׮Eڵ$`⑞GCpaP}J.;a¤?:˯-[<E}QcF >q+W-Z]|5""h }ƌ ס'T>}a*88E$)@:ժPXc={>}7W\c7S.1rhBʖ-߳gG\(eJ_`P,-vҥ+쇷H=zbs˧h4ʓ'*o 0HZDKX_Ǿĉ]QLyԜo_g Q\\Op`ӳ(~Yٲ=`wP@(޽Uju_GOz ;t蔜|aDj[Gg֮] 4cF0dm)CTJ(%+-ZG_>}fn=jbWX(W#{sFBרQ/_1ݬe5kqIV{șOpL:UrΡY={1cwGݺБȑ?m۶;w-T~yɒeJ(#݅ JUnݾA@c %KF=,lĢEKx͜9+88]1a¤O>lEFY|%a̘1KcF׿c׬Y_Κ5_ z֪Uc5|a DR={ d2eZP |z .\4utd/P~˗bӳ0fΜ=fL=pƍ?zŋ8;uBF6ifpJ.eOs࡛7o5n4_>{pq|Vm (DTƍ[Qj\?;Bb9v'V͛Ty?:4ay ܹ8vXC76,̀F<}zڴj-6vaʕ]ϐ∥VŊG]{]Ѻu["i+"ӧߣGO Mmڴc(Z9;q[9RCǟ_v~ɓ##/_a͈Jj,:GGRG^&ըPROPI8)~&Ʊ7o~? oX)w ~Р 6fm;s&y˽@2Ko?a@fiys pD?8>`h_PBP猊X0:rQx=yccKGFZ:v}u[JwСdɒ (TL؋/?zxJDxxs2(b -[U6MbFppT$cCuG;Ih 0??~L)6% U:d E2˲r';*/`u/Ba kU^aC`K"M -yJE112dh"-'Iw|! H2n* FYB^3DW`Z2VZyӧ'$*$QQ$eiRCZJRSCRA;wj``````````ifiM:qHQ̵ڄ+bbFG.\86|au=jČӭ_:-a@1ANt\3LS:ϦD@6=%K/u)z ˖-x+WąGݻ֭;5@^$_PlLCH1bL>ҋpW^{ڍR:p'ɴ) 4=a)~KA*#22bQ#~ SfC<2$W/ cE+2 ۊ`JSvA@Ġ,cȈ,kB֔#,@ۡj k k*-0EH 2+S@˶`K!ț7}o߾]Z@Aʎp0A0%㑌0) %#ih3S?0oM34L˼9?!Q0`ؤçm} z~x"詓&[1.zy\X4&bIt#g1=ue@Ρ *\ LI'V:&+b}+aa3SfP:C6n\Y~ڵ>ڳg_ǎD#pT|- \@(e۳k<4D`ifiv@80xuOp)?vm}:>.a@euU@!":p [_LAS62db A-yzoJ~A XpܽC)PĎ,@蛡r'-{NdboѰ$eEa JK0+3ŋ\H DHO ""R:lJW鉍(*KXc Le$b×p(`kJ)}ĀkJ^8,^Z6+fkH|)<S"fqАYGŽIJ^qZd _,dznouzG^*T*Eg]V)%LiO!~1v-&7 ˂+6EE-`^ifi}"8~3Cf=2|ԟ;̘F 9sit1峧t|@fif@ ݳ((q I< 6v.@}f ~0Цfieev?8~IӇS&2.FX,:riTĒcǺΠG=b960000000000000Q@fih/A: :f6͓'?nul X2:jETH1 Ǝ!GsmifZZ"} 2 Π ƌ="LQ5hifiYj@30pzIƧn4L3ʹ,Dw _PėN^0~X?B,&jit z̨9#f 7?>hL34Ӳ28;k@W@t |]Ϯh8Y⨱@n ~0Цfie=v}HoDSx7RC3?&hL34Ӳ h^~cE  !_>zQ Ƹ@hifiYkB#oиC'FG,  9wdg 1߀60000000000000q@fi>!q~\af߀^8b̢חn@׬Qh@K@AŊgVCN][ķ2v Snݍ^)HJ;E@,Կ TO"᷵Dc깯k*i6>N 캮N.\yڞ]mU5>|?^ijNd^nG&OJ߾d '5*5H-``G44T"zV964L3-kog _w8Ag:.pHSp@o6yÄcUbVF-\8b⨱ǎ7fĬaZ5ky.j(%hhF/Ra P@)[q) )I"T1z%Jb-%KF@Huexrf-8Ә}P*zDN B'HEZ/ (g(E=;ed h]ڼT𴐼"GLw2Ҳ $ZAzeqmd~`k"l }( 8ϊ.\d`BKkVߊ3pW˝ %Ô`fF7pa```````SR4L3ʹ̛~oU7ӟ;0?(oPC㇆MB"#g[ZOpXG{%u-^'Ŋ,"NRe~"q !J, !f3JB=J.Gt켘 .ڳbJ_D%n0C+ZeD1+ ]Иŋ^AHE%( !;JDyC0Z4l$U1 ȦzILR UOCzh26yJ,RL{"Lvౠ t=e CʨV|`0+5CCr-I&>m~?P x2Цfie;{πQoPlA!CF~zu6>nM1c"Gu@v]R}P:,X}Q: KXRe|}oRd"~E`j4)'&Y, ^ bG@_ "AEB/1UF%FKbx1CA+(B ~uIB\ lb\hE pcM`f%/$m@oNQ,sjY/b~0H(d_!A+$)~O`S%}˸a$u[hD!? ŦzUF^^  lUCOD2 6IZTK964L3-^ޣFyG߁1 667M)1~8v\울ձѫbVDzAcG1|ֈP!VCCa v^ا/SgmDEj ZP=!HS+)h$5m,#* @]\ӳ z%B Qm0/@: q!>P}0aU^xu^d>.9QݘR̲@T@ʅڊDw?J^whN (f (ډyT+964L3-OoX}3 :`çD :ttlԒ% "F-;jHtl_)mSķ t.Y>PBFBFv.pT%@gIۺY(bJ^ )*|WAyaPJM÷b *` UUU" !f"l,ıAoGGˑ](BZb`*e8* ,C IJ.ه* ;yQ#hDz"2kȖ!hgBBiz1'fˬ mGB;J*MƫF@v?eM34L˼epwXA11nаIݾ32lkTQ OKYfP@\͛?Odp?_|h;yS(f_BHdaZY*%JPM0K q_s:WbV#)Ey uXY%00,>,XSP:{u7d0uQqd%8pT2||!#Iҥ2,HYZl: W "SY jD,3+w% 㲯- 4lz2!Q'I5sΝ:]0^p~]='F5֟etOe!Ȕ%9sF) C4000000071smifZ-~# 0F 8lT$\ۭhׯpXK—D8Tdis1w 4ٳիdV-Z зW.]u|i?H{lڴ`H Y?GKeڴiWV֩4bV t}h@׮]WZ]2Z YM0W2ڶm_F-h"!emذq.+WAA" #ܹk@@`^}Zj6$TrA|;vLU^bi׮Cz B|sQKDz*v? "T UJ5<~ ByS[W^yE^F-;uB5DWʗغu:u)OwmBce!riUIϾ!)oŊU \*T2 ٳ.vwIq+0u_!a,%}՛3sXGҧT0dmA.\#2P|li܂xP.gz;CV4i Al/}$30000000q*smifZ-hhA.88$>u˄ ֏ŮY2.ZЋ\УN9^f>ᗴXLĉ/.\Ŋ2[2o^W\ ˬ{-/)fmf]GFFыgϞwMv)%^ v6IRN>|Ğz욒ّelc,fk׮{νӧV\UL k6,wIys49|ǎe;g}cOF/_5˞IJJ޼y+$xun f x2Цfie޾7囿P)#3 ?(.`p|@PbP$4o@O7cW\,:|7fĜ㬟(zJR$&NzjjJ*իWG̞==gpK.[\aB *!_y~V"w@_ '<< ɓOiΘt< ?-ה LK':Q2̛79!t_1Ȉca3gnR[fk͑#]g'NH54 e) *T  .nܸ؅B ]8h(Xc >|`3-+VٲeۢEKeˉY~ ѱ0+;2UɎ},YV~C{8׊- #KegֶF^!LfZv䅂TPy%ׯ_gVQM ̛Nz&K$*/|<Up{X+rԬY\v֤/3f̪^\(0Hl$#5SVʮ)x<T5LAS;Qv}/=ZU=! :uzUQ)$h)I\УGP*U):ukӦݱc'ƌ ~J*2rɓe;"% r zx<wm*yq!GѩScǎ6FE/osz_#_OME >1.n}CoV||ɓ'{聃5k8qMRn}O[#;=L6Sf 400000007smifZhO~~bFCOD zˤ3~]6!!ŋeʔ.TP2e[pI7J*{Z`(v{֭Gժՙ,Zإ:f\۰a}') Z?=z?&=bItY 6i򾷷O>*Sb.WB-oaReڴiWfmܹCO>"!GO6U6ďAE֫"qҥ6kuwЩO~r So˖\BIg\i3۸qSKŠ҂+vAHHŋBqR|֭˗/ׯ_^U*̙#Oh'O:tӢE+ kop&SgxBٳ$BC_)q 1EN^jul92Ţ={nɒeTѳB1)nӦ="Ek׮nݺ j۶)dPv3uÈ|1Őeb!Nl0Ǭ ;n\xXĉ]v}뭷⒒ڷo'Olٲ90Xei/;˜L2Lz\ ~"@fi7ח_ 8$a`pBX?1s '.>v57&\|TR?K,wݻ-[^g /TVPalRoР?>|dɲo2s'O={{-Z_=rO=zm;j׮M6mߧO;w-]\ǝKţWKDR.^],XTL9MN0}L$ (T^/N6!f'_<ݻ7|"Dvٹs}sËNpĉSǟkҤ)&R>1GG&%%_r-0p *DBYVZ_W_Eǎ)իΘڴi)Ïo߾K"U efQLsሺu۷O?%/3ƍ Λ7ΜIھ}'~O>ERce7l>V,Sݻ$/`))2Ki/1PK,=bĨ7o#&|Y,ju~ы3gE:ual#ΝM, X1cn,?^+ٳ76ɗ~Fxxej̘p"|yVxX#_^$='ӧ.\#Bbh]vƍ,`ҥ+Tq֨QcXDƒڍ;vY{ݻqMxi/ZΝ_v jTveYی Spykzm}yeuԩ[_o۶?uu*adذ sb >>>ȱIZ9|cǎLյk/|㟿7ϟ??ut]G@ĉR!s Ѻu: 5FsѽxJyΟOrVv1鱙+WB>7.^yvN?_p~Ӧ\? ~M.w,pE;<]0[N>~5BuQR%` Y\jNJ{ɓVX`H Z$%%-_"gvAxlӧϒ)¬˷pb߸qcbRŋ ( 7%;$eի׹>|++}cXV~9n箥u h@|=ҡClٲ:tyo+Wn=d7!vݺڴпo&) %$f```````o4L3ʹ,4~}|F 08~Ġac#:9kc 1׎N< ׯS?#FgT$\߀j|Gg[-ZrfZ هcƄ{zaj޼k֬U zNc˖-zګW7i>~}?٭[ʕCHhxDP҂/_YzMQ ԬYԩ3Ӧ̀QAF'/_.]a;w޼yk*5Sŋ\ֳgڵN>O>ѣ*+Wݲew۶mOj > R 7.]YvٍMB,(QTPLa_)`Z۶@FZCgCG`]i6orb _Νܹkݺ,YGg@y/ɛ Kp]8"G9DXP-[]\c!|Xܕ+WϚ5G?>$wZ!'Nᅨ J'O֭۲֘bG1Ţ(Ha͛G" &=xR*$'OfYE?{Mvriڴ٦M[NNmS߿߶m[OϢE xN:;vtY̲iY>|r` Xߵ]|cN_l{PywޓRo߾Sv֬Y/|6GYMkݺ ԍA'iΘ1`b \XrwøCkٲ.]t3[]M'T*dt\2^(H1үwRR2 d$@Făr~ ݻk\ojPύ7S[Vp߾O<Η/{~#vb/٤ؘw-^DҥΕ{aƺuv xP?0i%n޼MRy '$L`OKHiN4ikׂ .Vyh֬#G&OeU\/wej ԓk2m:urqݻ$eJ)p02ZJ\#GF"lĉarWEkZ,P*C.\DqPܽ{$*Lb\\>*,\ժ#TΝg%+r\ pMı]IY.3gεnWzg,")CS7C;}w`Bqq]wЉ 'Ol߾ϟY=`q[ѣ׮]MxMTHk3Խ] Ob?dM34LBK7;0?JgA!@=mMo8n>!v]|̚`YtˆQ G5<~P`ǭ[ׯ_lYEŊ߀FV:=⋯{_z}Ҥ)ܲew^v3fy}#G͚5Mv ӧϾw?y W^O74AC脗!iժ޽ ^7S_! 1?s&iʔiz;vZ~#)bu?{܄ E{tZzáCdXjX -MY*b8A<}}^xQN=`AOlR?z85kւY?jNq5**FSOX^NI^\lb+_> ?zΐxرȣS6,?QLoѢ CaFMϞ !4ݻSg_O?Ͽ l/ΊFs˶ϝ;/&SNG0@%gϞ˦1=h1=P/A(~߾^'NbZO>y1| )\Ó>|xƌXFdZPreuNTgެ$~wzs% SX֭ 6 >-HO~ -/޽'4 `9bۇTypA na FH>Iœ9pʐTZ~\l]LX.\|^^?EѣWRR2Ym wѢ%+:Tc r GR4h0꾾ۑї.]!rʕwذgz{{{x2p nqgΜ5jT}֭͟;_\riݺOG[lyj[j QzM"i{-ZSU@!#ebs  ++-I}za)oݺC2"0JѲekJmێMn=]M^,SRR24{ O| 6>vĬYseѡC'N4y1cY`_`Μy׮]ÎQƌ gH`ȑ˫w{EB5+6n̪*U䐐Bj԰hf><} ,Nv;w=R,W@cJǏoW>Sչsq(Z4̀Uf`ۯ]8Br7 Ο#S.\Jz0E13PTHÿ/ٷ썶mۓ~ ze___EI;Xr0Qhhh9 ț@pppRR71_-.n7w5ۉ*5hBYpM [CH&MaXqbpup7Fo@]b/:ƚR^&'_t)1$$(tGc ٺtΝ#F;>>}h l۶m/ZDG6)cry BN3H.@ec$„.]?OH?uT- .|̙[S:[z8kָnȊ-mh*.Wz`ގifiYh@8$?(; ; g@lQSx3h@MY5.jezqԘu]z ߳XK*U*\)JZ(x8}zoҤY!%ԬYȑcwXrǂΝ?p`UVs~s#ouYs[O^^;woɳĉX]gmQrklׯˇ;f}M: ntJBBB9)VdF$%ݻ$$'_`i~w fOG2Elyg"Xq, R&?s&idlM|J׮(#VTӧܹ+҂MM={nǎ]I10Ȧ8Q-]…Kxnzk֬{5vXܑ:@d 6`!H\'O a={_q?SgsMu _v6gF"۷=z^z3-11;wy fYnRS֭[O11B Ѳ &L:t9SZkp}30000000*smifZ߾o/_ PPπX!`S&l4^ЗSGo@/5okN=tXQt)Sݽ{|pGRz~{ԩ bxڵcbb׭~Q/Wʕ?~:{H_7 ,lɒ/^z֝ɓbjٲ7o+l# 'aæc>Rţs_+V޴i˃H7kR9r_zŊUѱ⋯tH`FG/fΜ5vlx6ȴ~f͚GM]piƌY*ULl?\&8pƍ7 ĕ+צOIe0 *[ӪU.?~ѥXvWw@lE^>(J01XJ5K_}U\ܸ0)8BO% 6ѣ>J50鳱/]VLL\@@`ժ5X/TrUn illܰa!u֧ի8ە+Wq  cE'uC-lQ! Y/JA RLvh+0X;wsm,ٳ亀!G\:Wjժܲekb HORdbv:>누y(P拉n|L"-zxtU_BXS~^k mPR_cH# hd( `yy=f )@` CSZ/,d_ؤgV^$:C&0D@ǚ"d &,#EˑG,`ZMյk7*8H`:,^gdIzv^ V/-Aڋ`,k:hA.tA/uٳw6s+WlZJS@^7LA0D Sxq,2@:1MO`w[.d3],*CUOkz!aYm9Ѭ* _CLa 6SIh+5GvIaArmOիנK*WJ׭p Ʌx0x/GG֮@h`%: _^ަx4ЦfieRr͟>G;0oиN6"'8͟gOMM=~äqkc\gcF,0|䄡 h>'|P-DR:<Q+t=SwQC`G8EB3S I/E8S2%(*@0hLɩ 2YMA z肩sBLf,Ke(ki1DLP"p!&2I:# )5P/GP^$ɔfUfKUb'T`W ܹ͛##=_iA0ݯ^5+H*f!=6)="@#C*"F@E#m )IDP d1"۬Rx(Tq2Tѣ/]ҸqtW7%@l2%k9,21/JFYRz ÄrJeP_Ç#1M'Z"dA'#Sҕ5e⤷`J.y$h l3L eSCyc\6%`Љ$k(  K hhP (ԬY%Ky{H HaJEK||+r*I k@!D"3eʔG&qT`jXlVm\BÑ:3K/Gin!@SFlٲ-9&LH`!0Cr!Sp .+; Qx Eӫp2:CEJNV ر{op3+V u4\eP)%ː)Jv"8f!1H/S*/d DHu_ R TTd(]YBm_ڳg7]1n\|ٲ1Bɗ͡w/ @$pTpvZ;đfU JXifi ?0?`Lɡ#:>hySv͜k愝3& zMS\±nBq֯p4lP5 [|gxzh>{<+P*LI@':G@'niVGe˖ ZӳH)KEȂmGRw'dSP@A%ݾY,1%/dh-G bBSaʚ @ C +SRpZ5~=Fq8x#t% Iل"[QF&a^gL&4 ?XV(b 6P)d*#/bbVvۅeJ1@)qe6_,|/ "JطC(Bc ݁z,45C)ʂ yEPRVY[RM2*A0:HKLTh=^AYCbhQ)zLAhVF8@˔@~y\˅)z.W@aesJ;,(4bJGC^Dz  x_2ЦfieRS:gu/; :`p|P%̟{֤=&ryj†IO[r|%c& YfS$}ڇ֙C>C` i2e1a|z0KYG:M@ fA*4e+ba ]hf2.>r ;W^$ MC"g $6DTeB#c fC{i aUICHBeYr^ a`H,cJm( :BXFfɠPsTT7_@¶A{6eF8/2>ґ"Tɮ8zĀ"ZKoJ !Y&B)6Qly TI$P^ ʝ Ju,ئ Y-)!~Be =Ŕ:",1Gb(ZLd`)Ju ۉ0 _Cˑ гduk " aلh(RN,6".2 % !/ ԐAvO`10E/kL!A0`$oKbƑ$4OhL342o@{;0g@w@An?qh霃 3yl0i zLO8eCV'Ĭ,6|J萚5j-A t--{quHHe?@qH`JEMAzʔmS2”_zALݽðP2 S'5Є.zG0% RSz 0 P2 %H ZZa2"啦CHB2 :0R`V|8:Gd I dSa(0ԉKY)#"ۋͧQ˂LfݵV3倰r5feP|vWa&bB fñ )nD0ҬSȋ/¶2JBeݔ:`Bd拖#yp7P)fD,@a*BP[M !$)$5 P4v蕗E>Ҳ3P)@ ݦlth]XpغS2h#=E|ZC;0| x2ЦfieR۷|B{z"F 7pow`3iIfO=kH85~uL]|\P7s}8?Tf```````#964L3-Kݿ?o^a~bu3@޷`̛w=1i댉&n>+V&Ĭ6@Tf```````#964L3-K-~C{yt@7/x g[0s.̙{֔&o>a댉&_?9~ubi#OOe?bhL34Ӳ2>?0?BЁCGNEu}dł#X43zyv͝cΤ3& Sǯ2nEBqS7 ~p~*30000000@fitHO>"?ؚEV-8l΁%/y`fX6kߒLٵ`궹7ϞfJܪƘo@Tf```````#964L3-K-h}Z>'6,=~ OoY}eҎg/;iKnXthfX靷OlubnvĖ'6_?WmtxkO\zl 'h ~0Цfiee^#|XP߀04qH0yS[M}쮻I;o .p؆k^mڵj-O=v>_78v8e kt8e #LPue8.S8 XLPpuk#LPLP7p7S83C=S88 4L3ʹ,5? =u<0+0(qM; {\sv=|{paݳ;xK]> 珬߹v9~pp)w?88yp)o2C=S8 XLP7?c92C.S8 ~Rp\wo2C=S83C{QLPLPp*hL34Ӳ2 ^a>FyGX;`hbؘH?yG^W>^.p}]gUug>gЯ^;2CG:o2C^pg 2k)p,Gpv8e O ^pg zp|O8ʛ)¡)o^smifZZ?ѳ; _+@zԯ֑oƑ'W=NҎ7%[unʳ.>uɑMϟT@f8{pq87Gx¡)p]pñ¡p)?)8.7Gx¡)¡n=(opg zpq8{ifiYj@{#S㓻'gN|z8K}̶G7o[vdsAp.S8_;~pp/S88e zp+ñv¡n rd k]p^;8e zpg ¡)¡U0Цfie@oz[ЁoиAFu}į/#/~׽;n'msn[rvWm_3v8e kt8e #LPue8.S8 XLPpuk#LPLP7p7S83C=S88 4L3ʹ,x?/770AC'}@u.wa ;r6ٽr/zXpLPp#LPp)¡n e 1ˑ)w¡n`rxp{p)¡)k83C=S88 4L3ʹ, }=pHӑp@?sG>xG?p.~K{_u.@_<$֪YHwy p?f- 0 !ږGD̷ݻ8kʝ `)R A2mlxGE׉bžw %P鴒dP;qlږILKەu pqT-kKJN5tgj(@; *"`ۖ_ ٔ$֚u5HeCێ;a+(+@;YL Eift/d;}WrKxvjp,{VipشU%`mIO ۅMۚmY=EDm'U[_YCw8"l1{E h l]!5D(56^h]  ."cgdh$&]SRXVZ"2pv^_6T4J]a뀊)2C4OÝvʂ!>ͷa)Ӵ/=!xRC=SPr!kLɗ+Q=h-"#{>pߺ"HL66+MkJwKݑҫibpg؉, OC|Hlڝ 2WTYcM34L˼^zx iHXз~3/{te ;ﺾm:hCҾuNYVѢ':荄g@CHRHdS/=_/#Lb2TpZˍ,2CuH!PxP" BMFU>V&#&tmM7femZy(x׵?hc&`P mJ9@۲i̫Gv<0@&S".#2"/pPEHgR[Y|vY-\ S BGۥF8D. Tе ,˸[v((H%//"2cVHKtg֔B ^/-EyBTkt\`Jmg f% a 0)"R&>=|d骑] & u 26$#-A( _-ef5Z@ C[h%mGhHH~/Ғ z\ T8vx%L.6 ¶,kfݧžU;_+,4L3ʹ̛uKWp>|G?o@\`иACCFLFuO;#Ox|uߣ+_9xɻ|Ȇ۸hJ͚xӃzА!tv@Ѩ%`!OM鉡?S%J})ځ/9ҥ$ WM)~!J*\Y#&UJGg!~zpN/Тxk!ҬPEEI6qԁhlLɚJ /ef "P.% oŊޡSsrN#Y `e՗/(_BTphB 3+y8e9-d–wM#˂'Q3)AfeDN#Z |ܙEK.BC4k*(*cZ0DF56bb"E)ɈN>ZXLj.# G9U0*rEeHv7kY)b aٴgY׮ <6TF^ 0b{WMPLZ %v,1JpqR` 2CUxt+]۬N! zWThUؒ- k/1de#!)H B8E)\Wd(M 8pKCGxY L+F, KUO(z _( .yt?|Rd (d0"k0lb;pw1GyhA/`FĔ0S$" T Eh8)h۔Sh-fQu. 6nlqLĤжU4Y. w˅JLrCD~D&uL)5tkd?DF);"0ΔD"T4Z#Mbf +/h_)0vʪLF@xaB Y8Wvbʑe\=b3ASҒ/0;z8GG EF% _EtLɸɈ=6Vz@ o|v>ȡIMYP<_ PVCFv҃#WsL2gzpyb34k6$} dg^Lִ7/qX!wr!£m_ 1 P CHԐ-0TIE|] bJKt }HmV`=,\^dPq2Z1$NWCZ4_J)8};'&İ;6!/ 8tRifiW@  @?q?wꓻ'g׏9{J]L95^R7^U=aoC '׬#]/E,L7Wp&Qk7* Nfpy`?Pj@؊ڥ% !r+]CpV =5Dڗ GO|vǷs{G=rWmph%kת]͆zy&p<#sQQ=Q`Zdx zNWZ(HP<8+WZJ5D0IYrN}[iZU^3K驿N ./A xJa \HY"ձi t0(Q3KkԨUbecvKow1XZ/_dW-E6VZzmBnS@kcadAu`׬Y#,wIHE^]*I$16N]wepT1\##2}P=|MA**ţ 1)p8&M*%1e;ANSVlȠQ\[yhzT :,۲o'”iNV!#SEֺ ZNE )b#x( ٤+6}"Iz`AyhM,C00$#|Zh u )Tb"B^~KPxfm~` B2!dyO׃W/( Y[^Jc (` #P:6 C)a1deazhTdA6>.daQ!_ ^T8ܹ@`B`_ߙլNZ*R+ P*,s1M;H78ŋX dʞ]9 =6ɹL8RI ׵`.F4e! SCڱFL6^C+3K E-+%+0Y@5tU LA.+;$BхoÊi$^hL342ota}}FK߀?vÛG=n{v+^;v^?-lٶ|Vu [_!ʣg^yAP_Fi#!cSb]= 8N^+j- << ̙G^J AM\X2J;w>)$@ IxLcDP=m9h *:x h!BJO02= ì0=AI2tg -[ydxte ר;V`pA:x a &}Y]Yp2BŵV-/DnPH #M=5b/)Ĵ!L(Y( f`eYfL %cYCrZP@^ܑ.g;mQx*|ŏ*iH-+6964L3-xE 8S<Ҿn+\{7lr|#/ٺ}5j^ yױcoΐdf-ڴi%QzhڴSI'_ڟ~׭[S^` .W_j&;w:p`СzQF<8ݟ * ݷR*׫BJPH, ^2ORTvеkA(>Rg|g_s@Ĭ4Zjekذ`__:>ִX]wY|Emiw /Ñ])?cƬwڨa$]+Q`?YpU.]UlqF^ Ycpűt>_FZ]|PzMb$`V*\l!C2}B`'#[l;}, 8$I28lР܂BxH]вe1%)>JJ072.0UZ n}#:]`D)]e/StUv% ӧwrE3 ,+HJ8U^C 0N8fY2v—z+ E׮]}!={~H V׼yKԒF $Ͷm\V:CBBF탃C7o|+ ԯ߰Hwaʱ(NHebBC dINI Av떲= ˫?s%c޵mLj%N`gTvÆpE. 4|xX),#IT:g^-Z=z˖y/ LmDA IdX>Đ5]7Ն5 D__Rg/PjuSq y:aQD83b5-8;x}Y(/"A&M煍ud_uƕ+WU@ۛ?Ĥ.1(PQ&$2XeL1EO uW^LaMa$R.bW;^@N;yExlfR lEdQRU֘'Rش%3~K؝j8ܹ@`ʗشl6p|F<(8LQg,n` ^Ƭ [&E{#;palvLipIϓCN<nz䥽jKSeӸYQ"sէ3@B~u_%,;6;$B$Qg'`7tqosb"lћ43ETú@v)m myL o c_J<]tT ]'8լYkp.R%ɧ F`TC5t<:B*˰x4Цfie?/oL?!L92"g_9nީo}pq䝷Oorbţ/ݲcZj['9EB I`RÈ:E y#8q2n^mtEH<)[%>Q paL>??w頻-7;ZYZtxIIQ@QaHƥe//w?yʕ+|=vIJe+X K>S UyT`^Vի>|??oܸ3gn,(vkj՚dNvY"je35)WŕKJL5FޢS8S t-o-IWdAdċSg(W\y, WFnD,䣑vJEXC *`YKHz[N^rEܹO"jqY,4X^\ɻ(=`ϗϣgޗ.]7.>oha-O|aW^C[N^ (Bxx;>}Ӌ/9YC@wpISgM cy d - FG>xɓgO>/C$scƄ߽=NJ:e GK:u|jl8.Fd2+6܇IP+W wZ&HwM^v2`l Ǐr[SJʚZKbZk׍(E{Lyp3g`i)6:f~ާOf}yƩzb:?ݻˆʔ̷鋆 $).R֋8wQQ\vo_/E+Z&NO?|lfvRg,\|s7+D"BZ$y z1傖 )7l؈Eޱc0Y+WڵQ!6݉7k"ŐY L=v]F-J-l ׫`歔'2?~OhQd2k֬+VVӨˤAF[lw?رcg"Yˑ"! mڴyu1>0U6mU2M+Sb޻f?6խ[taEV ۘqGm)#ƾ}.u,7jd۶=}{5,1E/ruɭɓbS%ȕ]eʔi)=d+'|bVg?~ٍx!a. r5lؘEA "`YCi)#º"\wKfS;+E^Tj`|1(#:R>ɃoܸXiRSի4*OMfΜk~_~e"=]w%KBj$ W 5WR +Ҵ7oo;o=/Uhb.klXQQeVō+T3>>GiӦx ƎxC߬N~|.y}U$%s&lAZ^+o+k}ŋOK[lu[uŀgo޼00e.\135~|I#Gf*$i2E DU|\cf:6l*~U=( @cM]P:"\L8@*#I{#ep+/ Qɑgww{X .㩋zmAACkӦG89B|&%K}@\ qwiϽKn%vf#oرfN܎ \oi>|lΜ ȑ_Zw#/^WoG)|s dɲ73'؄>L*z4B|۟Ĭ7 [L ,*vdX?Ab̛+SdEyf*Tdvd˖bʼ/QMZ /!6DO .~:Sp0=R~Oɧ\8#UvfK4a0)U>SѠ¤ZIK){Q8*8 ;|R*lv)޺uO~D%k2=Zir_L*L\(YF ZL$Ġ1KӢ&I~f(|K0EoΑ#7ISR<f!`$@iӎaa# Ґ#豃5_ub ʿ/{y >Ro˔kFEŜ>}]voV\EkŌ:1,׋YڊG; " ѣǖIG8H")ů&S`\{Cy :pSUjjkSy5)O@.3gx g2XHtrA%ZH"p#2wÇ~s2MIˠ* (ds߿ .kqĩ;>tܙ[nKׯPRe %YwcaZztU)JJ:ۋ-)`t2xKYlYj *zttgGS|;=ҥuK^UXP Kc%}>'&N$}q;2CQO'NH1K=$$ӧzǰNY;w(*zd*Ut->Sy@KFzmڴe5k֦x߱cٳP"Ttuv'ufyQa*mێu6pűU`l`CN,VkԨū[ѣdzfͪPgbEYJΛ7޽1*U+7ٳ碥 >z, jj\_.]>` - G.ï?ѱZj@LCAZF_}UvL@2L͙3[T ֊}9ۋ؄Ŋ.sKEw"$xfe @(0 aO|"8{lbb"J1b'0` IO ~_B  kYZܮe?66f``-]|Nap3W(<󹈦=P=zP ywWZ}]\;aoGP.<4لl!nh%$F:HP1nA|Ja)&SIIǏW[T= `gм&˹rD)\b P mNCe-h!s]sW7c,M3BK6)2 ˥KְSN[oU6󟿅.gEH`I:c >!@5,@fi{]Юh}\~o@6f 䯞&?u#;)a#y+o_s G7C| رAxY]Yxٳgg&]ru0mw&ޞO>s¥<2/u]nē*z"# Sz#03Mao0E S+z0 1x񂀭vF ƛJrA cAk)X+k?Y];Ycy!>2jJ^^޽z|x1O e,SJJA((hAE}"C+}ZQu#@0 Zխ4 Tf"jr (%eUF;v̜9weyi#B0Ƕo @@⊳Y+#GїL6m.ȝj}d<{o͛C@i۶l۶}-҃a'c,21V ad"CGBZ;v N 'RV$,l$~Kp?eWSID+O|skM}RkҤ/ީk{w(<2|V2d(ϓE>ըQE5  )uN>+SD(w 6,b$X\ ]nH2$RwZWW$h콥ۍKR((VE@bA{M$&3wܙy>3j<ڮ{~(?]K9I;yTW&6;xPv_`Az dƗdaG k2J֎/Ғ wHc0rȷDLT]<`g$Sq1fAQJݸq g䣬Ldq,aFSz}V^ٷo߆ uWO}qÇ~ 8} 1c rҞ'0-z0-,Pwᅥ@c#<:m ƌE7%|8{r bԩرcH.H uعc`N{ꩧ&Nn:' ƬapZ hX;vvn 2_DXh]v_QqUW/rȗ?sI!jeJϰZle^T}b9$vJ5"d/ 'ztvM8_|RY-,hC)TI!jJ0\JU.J`ۭ1X9O*R)*V6-Xa6`R#*} G]8zf7q_@!ƌ;j{Sر7DvC7n?񏟭_a`wSO]ie˖{\9s3iE7o<ճ"^Sׯ߸rjm!^ 3Fï-[+XYh*Udzk?7|sر:I]2&௽ʄ V^˻W>\O\-߾#^ ׬YcӨ]vCgɒe7nի*!edR(\6 6i#2bjR}'H SP6bjLϲ*y۷sG8rRENŹaCߢ*w}1yJ='OE^ј3g7ʿAF?yw=C7nQUE[':c͚3gRL"׮]/yz.e…KuŊUwe#LU)J KOVP2_|S?hU鳦sJl2N K-ZڶF s0"p" 55oJ5߾Ye!RY\Θ"˯_f2%YH`)*u4/(HvC &Ė&LAQK磕Y/h޼%,<˖+WjX2J'w\e3i6m\XQ^=)=/"@C0!U}xM2._knk)+xWjzu|6b=;Hyz oߎ;Λ7#DAx,0#DH3oҬC/F,ƻv}Gޢ4%H VJ$4H-!uyj=S`nծ̈|{hW^cb,L|-d ׿|G5t+F ۶m?gwyg;vIrY/GA͚w -_.c}?+`;ab}dqrxhb3@9 s@֮]ǯٳd` `#zan)v=Baы)'xʲey yX,gϞf}gEfx) fqVk+.|Io(6]{_lA ?RfG6Hv:H f;w3]v!"ЙٙbmǾ Wokސ]Ck2㚕:?$kN=4AoQ={ʙZ\a eުU׬Yㆽ >˧. 8_3OlkK,m۶!C_PG5707p@|cR FDxɳg~#<VMm" q_2-//sN; /*S~(fЂ19~t'y:f @ʼn5']1GJisL0\> /fa6 3\L ՗ #Gի.!Pbಃdר !\)*PVZWᐱ$jo)_GQVYг .G}L5, U~Ҿ~N¤.})eMb4AJsx]5HʕFkbbPNuh߾@Q*M&䨯\Ƕǩ!r'!~׫Wב3ݔN j/fͶ" "Vey?Νq R]o1L~2AԪU1R(/+?O->t o5ZYKеv( 슠􇫧Z?cIOضz5SݸtE-jވsF,:x_@tҩ&M VO?YvazO.@ف+w^ٜ5i uURt+e\ m۶kkդ̔ךou{iNe 9Ɗ+AEX Wݢm!ЛK֮]ۤIⷖUM~6gCEmhźbqǎ :eo+x˖yN8ʏ>.HկPβvصceXȌx&Ï8üTEsBh=̙xUԇn|UE]4sEyx\d% z_t%j/;_%Ja4\if<=uƍwqvy?M6+h>&I']v%>}2[;g=Emݻ?qfvWIu>]}EoI4ԣK/yp=lZB+j.=z߶xfx:rҸx l7YGC- QƐ40ם 7]!KJ5 \bhGϏ%{9^ 禛n;3gxg?=#Yw |Yg/=`PϞl>qd.y'߬trNZ؁q}ld?.S,a^aA-+ާKG6wJ͂k֬cG\$ V2cS*fۘ~:BdghG>.ӧ:N:jz7QmGnk?JBnt6@/636mfW:fr-Cy-[ti ~zj̘1n_[1aE_x믿AJ5\Oڴiq㦓O.AL',`JBw8ml%7]N,a 1r޼rH!y%=Lu~Dz$ٽ{I{onI@9ꨣtz/ D#zM+!~饗7_~j_d4J{JQ;1;]t a|ϔUR ).,ՊL fuZ#+#v(Ir'4V`0Rq 7AJi}( %Up8Usٲes"Dlз+:~a䝓AEJ ndðݻ݇"I2DI˰7+?O>] o[TѺjyv7ܴcJ_@o_;M?\5yq[VL,~/G E/ _@e対P*.B:eT)6u`8ѸUBCTHŢ*ř{T,W#J7'v7wx5,m<ܯ15Q`z{7o=묳|LV}Qf߀F iVWo yzD]|J:)ŨZk'bjux$L6坂Lϒ8B^GvT4k] ߡC^b(zuyIn"%AxU.5%\t{1p)Lqy1KՓ[)ԯHu%2ԂKD_k=H{O_0fر}Uy?XS, .:t4(Y^J 7NEѱcg^S7=#0WErʐ:Dmn51!tqc^E7:oBO^?VRә,N] R =0y.;wggB)&77~x7<=SNB<)ȪS Kңs۷$B)Lj7r 8u^b~;?,>3I43fӧ/{$Ю ? UGGD^ًYhzC 8C&Y P 5:X_%4je݌2#hH_ Q:=.,NObY/MZZ_t'ڵ/,nayQ#{.}n)}gt$~z8:|p9v֭;zQFI.sĊ4)%]<5j}{OTVݹ!tY]Ε+W_|%ff^+--Z:!Pݺu߼y vtG 3eO?TSEH~ڍ8:O5_~4+VY^{5l0,cǎ<@8~ Z$[5/ј-V ?J:MFC[IVZvZ` N!@!tbɴ6lT~CE飏vb얠gϞ*#8K _>߭KR-)aݺ]>79pYSZzM\0fٳWIQ6FN~+ Ik"4#ߒ!pv9٦syrJ)'.YTRuU#9q)Wf7ntڐIbN9\c>}@Tv:#;g#,[nyn]4ۤI ZڶmTO@sf* 1k DR*ҤYgdS׷ erXbWdvp4Cp`OyhE[1dR^\ ;a׭[ڳLu&dDrm*%ZٺuCO?%W^a4`!9XJ'GqlHFpϪG]2 wرcӦMW7onܸ({62XB>r#besCON*Q5.F.o:su慎UK ;F+Zҏ/GG"Lt'LMalmqhEIb HΏp0Q2Wjժe /;w:$IcM"e|Ne]!"CL4H7n"۶mۿlqSy#^eJEF<|,q)DE Օ m*hr;0JhY@u]SO=b˙WteǙPћWYz')={>RZ["EIЕOSv jY灻=Xq{u3~y·&oX2vӲmIY=#tޟ;=zqzrO|z-[tb ;L.`S`Ce͋gjIIWr**73C\{7TEQC #QF2dȀ~#r顎%˿m쭮TgQIpT%DaN5h,D殻NZVKxڴqN8KhǨGT$ :i˖G6R~MGm۶-ѥRB)*H>C/ӧw {@Gz^1|HkQSZ2%x.͚JhݣGt?hݻwP !SP$T-_R Bx}ح[w gΜYB5i6BIpa hC=Uk׮ $ .{u }NuV^F ]pJ&QGސIAUfEX%0eXz;vVS9nx~w%\ũ~SSwL[>])s<*UJQ$O?3{b"b|8i 1=w/oքMv-%|p 4{{vOqM4|iӦtM>>`G{jwƒĐpQ ԑ6rr oi6jy7?6/=՘$iG崁g-xLo@[!c$3fG&YxW>'ZqK=n܄+~ɧGk2P|n9q6vhL2Z-,I6TP?_ / " Y ׎;& {ߥ@\BxENڸpF|q`ZYDi|5a$n"*$sίkҊ+<_njs9Zx >2iǎ>X5ΝJUqxQ_fˢ W$w31׈|DゆDF/FuN)R+akYK.bBf#ԩqj̐j!EԽ{СCڵ/_>id%Q^`CJII9bI9rthflHC0ш=c`bh66 +jF4胳:bh?g̣K\@fϞݧO;a‹Kq 3xA{4f)6A C+rX|Kt$02 Bi#cBX3-y* d9 '5n݆ƍAk'cǎcǎ8-$Rei>D{ʿgI!a%8} gk>TCr|1EY M2?.I2PoR؉S?}j6n,XB4&š}Vy6,4S-D7IRO?ʕ+%F"\mcE UBxd&,&t`,%~.;l˖6`۲ N*m߾C<%JI^e  w|Ezݻ?Ŗ:Yf5hPzG3*޽h0 0+5C"ӟ7o,E˫\ gW$ E"a+ST~*? &޺jMi+'m_3\>zyWl֐%3̝0`w3flӟ~9Oդ: PLU$  6@5 jDnb8~FcrnpO>Sծ\H8ܦD^54_2@5Y, 7֪U#K@cغCbFѴ}Gi˯bJ)Vx(nI%$R2磌s[T?ob"8K-aeZl#PLhx_}//6l'={6=,I?wufX&sS>l ίo 3{\/.q(Wإ`cVڨ%*\ Ӹ)vt/K7!85I{o1s= i''=iƄ#v4 5_IpG~)yF&buq< o@h{y24*jzdrE G L4Hi  }̠E[Ga3fa&<zOJb^fYSDDzk&Ntr!<(mp}{7my `]lҤIo~SYr''Hz#67O8$x?vf40r^z:kDiap; H0,a!v4<իEaY4N{>&_{9z[駻hCh:CdE/bTv峳8Gs`Р,3tD=$fAw'K/"׀߷AnЄ8"34BahKCN;2˾Ǭh 8C@> !il O~ 2lÃvZp.%Kؼzҥ^}/|)rÆ sXw/r/eH3Lb<\O66lka9r{Ѕ%1C]cڴO?=aThI9fSVW^K.[dp\I5I[&(Q(hHUJI' O][@&m,]h@WɄhxY8z^y)~G^RxݺuA +f0|=6%5a$JG,4E_j[|3t͟Б✌Gk)H]X Q:lz͎?QvaOdhwhvVitKxiO [F}ݶm{Z$6bZ(Is&Y%Z{r«nݶr>}J̅J *oHSˤXhfM9xjwK'O#ʔ >,aq@5"NםhatܹˆJxgz+;XALp"vѥ|ߴiS}?Μe˖iV'; =HJ!6dF]zHh?.'vɡ֤I۷UyO$]Pۆ3g g3U ̙Ӿ}̙ڵkgʧIr(JuT&l޼YzC&P >b3Cn[_xx[ +!Y r_~ hLꊨwk8I]m.?銝|ƪUN:t%L5w>sugQCӊիWz\Nwz/#LH_6PxwI7 Uвw UN*JE|ڵ)YUvf~8č@yGd /ż.gaj՚}<6ć.+'СÕ c k r1zVUJd,%RF^$>)K#8Y}=ڵkřXĬ@-T[e[lX/E~ћ. ^ -Jty3,b=?KxMYo{~:u^`! ^_SYSѣ QKc']>xgYov􌷡7Elٲڡo@{x51N=O<%*L SVS%mrއty6}eV-? cn6k  Y|!pF[WҊ'zJm W IREW F9$Aca&ډv !#n|رӾwA4ڭxxzS~lCPV1\`}2V͛D \h\~(kݺu+`SpiPv=`G6ޯh VqG ]|<٥G|$曼|N{D9EH%tWlO9LE8FǏk0q+kpXr%z8]Pۏ<-h9lck-e[Ǥf/_\rH`$^¾-vftD&v/68_qU4ñcC^ ܉d&& @v,ZgFg{8C,+#G84O:/^O@(!I/˩r;y{o`ժsstS8ðaÆ;"orCl"1|HgKvW,ƌC}!CA4Tqrm?Fӿ>cRЗx4j^@i}/&;0V?@~,+ OmErL/.((#t8qE]LEV*ڳ|uN0>S?)Sk tʔinLr%_zk I~:ؖ|ws'‰@ BlĎebh,>7*r9bĈ=;ē>GGY*ĉ/Bqq;gd_`"km8>~lp$D4~DRW:oƌ b5{DVҥQu%huw/_xl@'Sy38!߹/nz,_>pɜE$˯2!NaaS@:0aPoR9T1XqiwƤ6@֨QyYLI)O^Je) vן)+pky:\0i1cƲGܤm>+/8(W* ! |\v햇)H0@i #!`Wwr=NdpVPW #(RPe@صEuA_wl@H*K.d„ ?]3nяJ v 1Q_I'nذɵeC)6liӦ۫+?:};vf52ej<7A r&Ma\NU䁷֦O<K)!s#pћf.ՋY&L*?R)B>/hRb=iРU~m۶[~\e=64zcU,^?/M◡sfݺ%7tҥz(~ȫ俻1W֩d?}ףf˖%@" ]>@WmA+Ę;w^^mJs n}{Rp/;Z:)NWK\Vz JahoKV_75k֚3gyB/zݻ@eQ[NF"Ndaj^BA 8X^|}OWB,/+?O->?t=WoyGVNGPzʩ;M߱j?Z5eiu'_ͺȕk S^0yGU?'\ ۳g+V/k (J" /~g,%JdCe'UӦMWϩfw,L7ֽpN2;ƏodSh|J od<3O dP *I+jRM)ǽxjJ)wyբE+^o+B Z%'1W>'OUCTȪD._p0##+LIDAT=<a& ԑ ~>Xo1X{ Pb2қzqUht Q>\E6@H)M "K*UA{EH-awyG̑ Xcqe{{OӦXx-O19;wB&M۹͛TKN^X&U6ir3IO>; ^FB;>^Hf{[nV_dժ5F:" Ѯ+{N.JtaO/(d6g lNP#Gv"Yl߲\ՔkG;XFcBԲp RAJ˳Μv[ǝ;wZ:ʣ;vv.g!:qcݺ=kEܰ(1ގ:uE4T~xAUWNe;k'~O.\)%?#a.s֦4}s+Pv,W+$Miذq^fq<"fO>g}6o|f8"vet_؃ve]!yd.~w<"6XomܸI{h-`m;d~lKYnr"5h0*?Z^K0eqǝCb"#6G|{z:7,IhɎ21|S 6opJ]ޢX/].Af5jx%Eϱl`CbfVe3? v5(2Wasʉ?ē}'?M9ra"^H I+lN/n2B0T_bE*Цڵ~]:OⲂv0KʬrGwR b }("s1C52$$_.λ@fDyM-YP%P$*x@S*9nY^<*Ab)񆄨z-Pdx͚5'R p…I ~WZH ΗB`90 S$dc_6sM;f̘9q> qaAcJ8gVzy<#.T7;LoQB=mbEg37n=:65QN{ଂ1}ҡCAĐL-)R*..m"7pky<*Oef0FbHrS疕AfS`!_<_LI*.xPa弢"z̔Wyc{o\ >r d̃(/ szz9W]ӧO$v.{wpgIx0R#70/ E-3zX\b޾}a$d8EY$DLpλc2Vۍapq `weG8Ș!kוcQM8#c4>|…fΜ5sL,xuuƌ;k,Ejogx$= e1Ɏ5YL;.;:.{1:,׮Υ#1_A?Yh;;мcn"`x 5bfȄ7|B8جۤ _t%dL1΅}_*\sϽhWnj`'PfkԨE(൥i4H>|1LIb;- 7 d8m4f;8ϛ6?WRZgф 5j"YgԥyȬC_H0=d{:"0Zbqк(}(``̺xwCDE#r.!C٪.k :sVn nrFY%E+Zؼvg)>X_WxZzejzEWrv9]`dV)PF(WJ2rH<4xCc5'N(bxeŬ2*(+_{yvR=dWK˞[^R,6uW. P*䔚Aj JH  uq*zJ83D+?z[uF[^(DX0]XѨq튷4I'X ~- i0H"f9)"P_bh1E[oc1љ6wRttڤX\(bI*US8 N-Ϊ4UY\h$y)5TrZaQ^{1Bs `*tST~^ޛ͋/4|Ὕo@oZ1e۪iLظhܦ>\>Uq鄵 ,5t!Kf]4}Ȃs?BwKQC`*Fst!ӻHlhf1Es :&Lr7Y8>,ԁݝD&­Y  ˗T͐2$VZ0^ @xԨc$dԱ0H&n媫dbb5Qw'M) Q8A3LHCgt="*AL, Xp̋af#Aa9Xx=0A ɓ 10.J$.^1:\`B!93xfv}Kά>3K[H?j a $!FЋ!]YD&[ȉ6`a!J\WZbZS! gq fM&'X6xrb|4~cK«ULBEX꒱!j0f$4d,GB₌T0;a%f5Ħ?-E#NJJMJ0Zv ْ6D @idƆĐbY0r@pi|,MkHNvYS9Lij38k]v*Ich*dF?jQ@A(F8%˄ N#, .C.ýa {4Ff'1F#*YE&]#61d' )2 1:bIL`b4l%a%Ɠ@e %b\􉭞Cl@4KoLgo_Nj%x [؀C#g@a0\p }k cX>t'q}"/{1u,؏ ʸl*2 MRVW:5x)G1P$0rqƒ2)u\#IS!BycuU~]T~*?_@rGkzt/ްlS7-q6nI[WNڲj҆%,t%3,۳'8TrA6Oq(_`_Ԧ=80+ܻ\YKrb"04!HSv T$t)O>tv2v!]O=LbUf 2hԨnHI˯._駻.60P5G]6-H0 LE^3K>[dQVx!X !E  d@2Xn v_ڻuAF'JL|Bf #c7hXQ|Uš7oիOb<$8@f0:}7 -@$ Pd*)=T27xm~SoJ_"#8Zk'M qEBoz ;D`;tN淼è dFµx /aE>%1 #< ÅX 2CAQ}TV90,(#3P @-GHQA+8D> u!ސb M0\~)Hs[wY,-BBφHL5d$_ 3LpPѬ^ & (HFejcXD`ED@0 #Q@h2 d,d x30XpE L ^+Gl@UtST~7|]V[ZnѢmk7x^7{E/^xҖeS6-m^2q҉[VL޼bƥ-lְ%3-1t{{Vι\ZrbsBN֭}57 iTH !RKiF,0 |!<4X" r @j!#-HȬ!8, aDYl4|"HzC P 0È0qD58HðLAQb!Bhc1kD!_"#*rҲ dLGQW(QWD q dAC{bX ]# &)\g*b*؏,L 6g@faf,/" 2}-0 XEKUj4QT!A '2b5ziߛ"0#,zJVe eD! PCDaU0J}Z FL1Y0$H&rԲ!>dYPFE!؆!C` &"7}L@҂O aZΰF8AFF8^k\`.% @-) *i& 1,|DGNz ~AFZfa"l(&4Q#bOQGST)r0 Mada^0d6z+b"@Mc8J_0!E} ;E h$Y4f5ZBqi4hg?EY@<հ,GD>H@܉hB95SAxP Ci7"I~0x2LB;|+$DZ2zMoEN֦A3DK/F}J,TO1 q}=4@F}c|$a7NdB@YB%!!A5P˜ʐpl%EEf€i4b? &G5aZWPT ) l*BYdxqT~]T~*?o/oqߝ[Qe:m4|~Vm@Pz͢INݴh%7/m\:q҉MZx#Cgr\iro aϭ}Vr5—o/jxGpp4ET#Yvo%>fhEF [3԰D 2$.zTAFc? xqPE+S0$@ƒLEiZ DTxF_5L,Ad'A CH*pOJ)T=4#0 #He,#- lJ >a"0b#-@R,Lk0%Dk5,`e* ^S!, &=zMxFf$@L8XX2, x IHbLE.CWC3Z0<ZAi4@E3 u ƈG))y09ZAFx)Ch}&-4DEY;Q@oUTArABl|GW(a MB FB) `V`Bu€@qp)X<8 #aWK"yBBAYX GQ2e0a !Ø>Ҳ4EJJ3‹8&ȔoQYX# 0 AC)"=Sia#gaƒ`BT4Qi_i cc'@(=CDa Q !ca5$Vk#b j{#uN-[K,`4Ā~!+Xp!1@ ͦ71$ׂq}! ,Bz @aX+ e`'_Fl[4H" 2vx}dkQE1G}!¥}Va*å'$}Ɔ|daȆIM1+5H}V!2#V6 (;T"vf#d` E1Ffc =1 h`}XV6/i!,4\H0F!`p@h0>ME`H4FTx%0EaOllCY}< Af~S$ ǰcžkh7[Q aFZ`XXh iixr0FEf֧AF ShYH(? aST~yw;jWjY]F5ͻn$ 'mZ2eIOٴh†-v '[0~ٌaKf}?eȂ3hs :}n_>4ŔLĆ&}x+H E#$2Ȣl#eI(wªы&*X^oD 227% c%6ͺDV aB&iRWYC!G) "L!LQ)-h0(a.b5@h2y cA Z; zi6GXD2$D>a C4}(јI fg6Bc х+^C0L1dICjh"*Ī@c$ 0iug,31ԇ*K3}t1ذ~-AF) Hr!@9^}|q\bX5$ 5\3ULᅏxVḭ ! VH@3И%A"`&&"7xXbpTೠ"?Z( 0,a F ,R/BIޔ|)(5 azCeO^o͆Xcbƒ 5ؓ3&+O hP_ έE[Hl)̔>4Sg!x!ol~FE$XO22jC>*J`IXD qF.  kp-dj ddȂhѣ oE 0#+#`hm%1L@p+ã9z8IcC4$ Y4ȥb* z-Ƙ"Y YH6ǑTjQ0qC&f#M8,0.͐#Mυc C&@!>F .pXo,K#b g@e/ #Soє `bLV3,z0`9zSQ2kQђ) 0&[BaR1YBd0z%h &  /̆ҷ@a'?oE>ST~*?S|ovwywu/ 赋&o\2eNZpºh ƭ]0n1f_NIb+, hF)4 ZA,iR-SHD` dJJ- Ah!#0%dZ!0EWE’%Bb@x &Cx@Ȅ>b % xcMP̐<ȇO>*b *2pYW,4dL2\`bd&x qjf*Vd IGcũ {@YȂ'đE$$[C7Yb!ևMIJ 樣%.߾، aa0ۢPG> Pj 3%G;LD 2McdI _aS= v ifIB!3Ϻ 3*dRdD!Qi1pd P ATiȔ8fkc' 1eD^c? #2 5S0 4LOB!`2,ZB 0 ₷0# CP`xJ- ";8p0" }Y 1䕢'JoƂ PtST~~Vj^nu]}#(}~MK]0q̟͂zF/;jgX2sĜϞ0p>Rn/7 \isw/shC} ,JSS dA9BY2ÊH\aDx1UCPh/$aZX Tkq!?R HT2B+lЇ"K Wbe P-iZ2p qTŞPDZ0@u1 =ȯh0L1 0ɔ Sa ɌBUd/h% !Z aE! ʰ p-\)5C_qAfVHFC-YC-  8K~AolqE~8H3xW=\  Ŧ`f@& 1Be04}BYhTj0i!0- /P: =`GVLeoT %d[kYGSPf2B/LZq  }E@ }Pd @ }ES- Ѓ ib@  S1#ZA-\ 4J1#Sa eV0xȰ 2*x3>0dŬY-؃ "Q:؆R'xg]F`SN駟IN7dEH `)S0C@f4c^-h ࢔0HEh+H-LH3i3hv+h4TEZTB@72uG!\) ]a 83: |,כ yX(Hbha0iTش`V;G{HK|H!S0S,WeO>qh̆ CU=!LEFZ>=J1ư"YaADA%2#0d!CͰX1,wR:Z=oW~]T~*?o_[j_^ۺ 5h@&5lнui?nєMK?!;;nE祳/>L=a/]xr2KQ?o@:Djxwܗ??zxFC,{C1k)ŋr} )st!adR;5kH@|  a49]3k Èz36f3%.-ZDf=^4b!Y0 kX0  ࢘ C@ ##!3dY )0E ,>y! kϚb"m/b] !G/!@4`Hg$?CR~A"}ȉ4F-0bdP`DBd;M1WL 2|! z!`bRaX%6jh YX0B*N)dH Y%4 ϗ> *6 C(H -µX U6\TCVe@dK L64Z`OJR$3rz "&H a∊ C6#;ϔE!'g (N/02(1ׅ4g'7 LzCB[F2#*5rPdIЊ)@659')%G(Q+dC=J=2DLI3M >Wق%[*"#͔dA&Mfd ( 鑐bG PF~h^0"KdA(iD8,_ݻ?׼y 0j={j_xbewf te#ߐAf|ыREfAjRKȴB,Lih.dQ٨XXad#?Ї,b ^C^$Z4_HKN4w 6E&GL%́0`p/G{Gi8EH2r!I(v=d2k$v׿>޸;c("7dYxpl >Zf!ٓ腬`) cL&DZ$'0`_reᆛ u,hh4Q>\q* ˼B^tST~_@/kiYoиC{jԤcn/޸xJs9cWbeG_@~4؅tQ/yz UTmٲufUvgnS%Kn믿ifso5MDpq'}w+:7g[]) /Fw_5>3DkXְac"r/sU L{o;~ig _Gڙg CTi *-z-SaO+l#̤0_ov-5jԸY[hUN1eE0ǟg3JSu"[MY[o-wT;a"*}` /^'|* C2J1fO=H4SY'x4h M6]k !âHZLR3kiLExȄŽޜxGa'tr ;JB f5o1]yizn(EY@0.1 N12olхh`"\sǶSO=_]tI% vY# ;p" IFLThAD&,V%xa"!-K΋/t 4a RIz PPou:un-<221!hUf =>!`3.42%N:t2B_わL!Gz0X$ uBY },GR4mzX"NAjn z\1 2ab?8PZE F>bc }C P,TcBaa'|AH4Af"@E!0pS-Qn&Eb >M-ܴ@MQ@.}F Am׭pY^ζ bL$8 ,TT99W"bqiQjV&sAI K6l c1DE,Xkf2;DMDzmVfނ>p, i(q>hv4h4dF8XZOrny**SLZE9Ea_`mST~*?__@q|tz mЮ~ЍԬm=G9c,j͛G}D~6m?pz2 ggMnP}3NP1|ȉ$&f6x\XGĉ1ugkt!bs_fg 8\;n޼UV _q&Tڕ/ŢQ<(k׮`"Ν$K R'k9L4j$G֭H)SUp+vgw $9K{oT!A#*# `6b,zh .SHά!<{`b7[`u2.B91tV\mlذG9{ ZHdD >6G~}xhؘCPH0xCZjD ,WBIhj/45q3jQY)3cZx-\…2x4Ka]>1g2!$Xo] U|ͷ/}ɧn#0<%K>C}W3D j0 d/Y^# q$5zErF8S4,nI}h|OMKf2$'qUȉ(0 8E _ٶUX}@dFT!K.;wP[l*T6l-/!DE!J51X9ح[U|'c<̂Zjg1ŝHF*͢GBiHDGc &хOBQ3R@iizdE4h XJ@ DX0${ћ"!@IӊY0fH˩C`0j1&x ɬ(?M! ́B2eZ>} o^hBjYhѮQvEGuOpib\ daUW]3slGb^(i<۶8 i7"?}#C\5Cq$;zm g_"VN9rM[5rJ]ǘ^=@͉^g{߁fd2/%ߏm2U OS|7|]A󚵛mЦvVkvţm?%6//Wdfo@ϟCؽw}SvԾ5ٵk'&mA5I\x?l /x˖;oRW=˯u7G>^R4ŋ^{mLmLS*%K)ML r=MM1U+駻y4k4XA?>5_QipQbZSv$<ںu'8DS[zH*R!(US#w}9WӦr <^lܸ颋.yG'NX5w5i4STQ2\m/)4Sh <ࢇ/VdVScSN8d7wb^-Z, կ{>jx3Ks4Ҍj_!]"M0UdN>vO?SzsM%vͷF]"l-)C‡>a$ xԘ14+#S,e^}3g)Yd$zv%@eЈVT,n\ A;{(2kʲZ ȇ@, qŌ/b[ !\ԙeHiZLYd1b!)A~ C\@A2%a6,"_oIמ{umwH:u?}䄑d0$}LcF҆%e_4w ^śu!-H.Hrƾ4i KVLjLo0=x͘~C ESC-.nY2ZFT,!Xw_#j- J/aHcYHOPWz8$D \C@<#cL"vQͮ*gs͚um۶'٩8x38 !{ Ƌ/1LΛMn5BVe^l0˝;FYn1C]^DIل48KNRkzHQR0v1=XfأFx !G]|I(S:b97Hc9.$%aR`1Eb|B åU̥).rL'5ixid҅&Q%=``i>3hI`2b ^aaOa*u\p7T0˫+,1prG< if(7oc)SK.ce]Q|j[%^_lX@V0E4BE<_ŅN< qKW FoWZ&m/ &Of*x@2h2, `x-fi ' Qba['ذadYxid?^g!`v˜X !Iaf`gy֩TF|7Ξ=EVޑܵ]pISڝ+WR2#vaOx Ddf1b[5j#!@4$WiʥuU8B)$zC /*47 !zk=B=t{&LU!034hԱcg/g,D\ b*;߻+Ǎкu[.%WX?/*~?6&U~]T~*?o/۲^ö/6h/77.y~w+f)O\6{Ē×1wҠ9o@+=7oko̟PAl )טZjNGBxu۹sg&+ֻEҧO_ʦM[Α#GÐ7}8=voZ3<{? E9|7gIx/U*ըQ%ĪoFWzZ<ޡÃZfVvsOSu,׸ܨQx5M\#.jk^N{-j &yׂُͥ^N;ߙ~մ}w2 uu7`H 7$P <0,@bOZzIEX/d5ѫOr\y2;M %;M_ Sj1XzS萟W_}O<HY@m^x##< .g%k0a%5^bH ]Y .;b)"6˅^ 0HZSeXol*7mN/R^ի׺6lЦהa1FH4u^m۶ٯ5cNT34](@L@Æ4|%/[Bb\RS,BTRU;]O_' d=En7f =_' t< s⑥ Qt`LeE,P;ts,i̶`U?$;m&Jc1B!K4&%=ȔA JuWYJx^5=ayaoZMw}bt1+Vt?qiJQnĈ˖-.͚݇Xiderp&Hc8#Nv$cJoSxcY fZtQZb%F%<^flҥwSq3H'_1b(MGJr'޽;&LHl!ֲzA\W:d~n˗𬰚5jԄd4D+/ oЕOSovV װmFӡINxM/t~zq+fY>ktYx9G:~ʂ͛|wnz;v|=* Su}ӧt\K/^&GyWjt|J׳J+t[k޼1 <4GIaT=׮]j  ⑂c4VXE^SL6׬Yae]'>P'%E7w2.(>&MJڵbmRO_sTwV߰a֭* _ ^+njR>|$U}R #b?;^}ݻwo߾R,gZnݟsUeAEc֬9m(.<^x,h,'Ve.9bhi4zy}aEfMiEqRz0@ٿ6T]d*sYz/YRPn*q"⠕֭_hIv,"IaFZn [f,4ZaZ`QU3&jJmQ+?̳௩֭ۚk֔Եd4)zEo d xսs>cΜy#GOiVX=6mt^1y bE yd'\l!C]~cpEZ6o'-C)iw <@FM H0D0 $ sK7W WwO2_jWz 2Tޜ"Ma-|ϚC_r\6Eq>be O(ؙշWE@‹/`^[J56g:L!V!wʁf%" ,lٲ BAwƎoMz~dJ9$igu@F?$ K& &?.] q&iOdF9n5oz!l6 p\%ǎ0k_N$C@TJE3"PtF5nx+[wݟg[lժUN*W3%{խ[ՔXGVSqL.8X(b9 m/[SFLf?h@FS<9z]vL4ܰ^͞-e]A֭8.]e??, o֬ -L0َprye-z*?_/O4rɩQ4͛nJ!彿ΝbR0zb2%lgdK$S`teGȅ7ᚭ`} pw8T3^H =駥o/q'%wɉTnU * DP*ɶ%TkN J1$jo˸22q5{Y\C3gʺ'8\'i.V4J[+?Ǐyfņc..d٤_W~]T~*?oG_@ߨ]m4ni˦[0~q_Ufw-5?!6l3ǽk:SX*:sT(aջ<U}+h,2W&m a&6O;9ki0r<f+1!žC{ҥ+ 8+J4=Sz˗+ex.ZĔ],1;ճr}7e߽Bo4; 6eemX[xt0Fyw\$RS\1Skd\S _n}{k1_$ M7x;Ţ_ڮ(*x&I$W%K Re7^\J|iٯ\Fl{zk45f͚-,҆^2$%ECv9NFx_y(^I9u;u~`ݟ#`ضm{~1ثjƳi<B)$7w@rɇS@lMjQwڴ[XC[ޔ@q&8T}ߜW,t}Ȯ3fYK.wgG2gE[o|H^E/1dhˆP0qB $9߰a͛Ju^xKl38SZ}5ky%\M/'?h9]" =Z_M&r@@Ღ tY Xq96]sHJXjӦmXQv ;K`,.[׿b|7a7y;U?4eO^L^鰵,dUFOf ŪH"cF笭Hk'\24i1U^/hz+R\S%Ji ~9v8"[ "1ˁu,guay\ mV- b!* K7O?=5fxGn,SI2~$є Q4nȘb~ac=nQ$5+ +VWGfpd6@aNjxٲ]>N{r`~`YGQ~S!Dbq n9l1F)Q;wƛCʐ1c$oM ^**MSjw}"$^_}ovф+ K/BR1͛EbtɣGYhl!Yᩖ!vQ4 ܹ6E -[aoi$P^Co6m,\借ԧK3f5^(&AdC#W9Q;vdS:=!&Pf5@}vNIlzCɶk.v;%$%[^z;9( G%b0+e7[JB8E}A<T!~RwmٲJr-lsȌosc<$nr7-Dwض̨^ƶml+A*yE-izZuvrY'm;)0qdfcam\|Jƍ<5)4ZȭՉZ(rqQӛ1|vCnݖjLarU2*ɊC8^XȵOK/p%et99 Sj#/`TY M3zif[ޅwXOe[JUdxwXbQwFlʺ*2J4dvp.F^$:2Wb( Ν2ջYKTW ̶*bzpY^Yq*BLíD 譝W$qȠᝍc*JP߶UtST~3}}u[k6_@7iP;7o u&nY>qk\3g̚9VtKg ]*495󥒗祢+B77.9ޙ^,h0*#UuwR x_M>\髶P`5l UkТ$ML)^S#*z]4 JAݺi!\aD;TqGEL_`w2΢YBCݯPSxqӗx*OcK.W*yZ &!`JC_7ǏM7) 0UP*%/"/A|pEYf@fS^T%D̨Rڵ_|%\kqĊ>tW]u{HSKԑ-W29ȋHNճU& Q`(aUo) 1KLu^ ^{+:2*9g̘Ѯ}='?ŏ0nܸ{ m&E6TgO0I =HyY;cLKr E]Fz<vpם)ȬjѢܶElwd BHp(fˁ=#v@lμƛm @]ـ8}wif8D9ij(Q=lFZ, gg͚kyx` ],_:rlU]>>| `|֋/E>$"ի4CB+V\B,i<½Y('WȐ/[VC.˪ T'bb}3ˏ>`ǹeH:!^.8/Z?;"ha^Uۙ߿CZ|Ua] !,Ҭ~db @Q ei3=hlcA\(Ђ:R_Bx9vBYg#b9s'\ Tǩ;hnVCaAfm۶j"0-{')K`8c %$[1Fw-nL?J@cΝ.a,|47nB=0QOJ[/s Tbg]t9_:!cq|Gp 'O5k6Ո .}aKQxcyٲF1r4;!\6ǟ0bĈ}97 :tXl0PXBch/pW`|H=S|{4Iv|vȬ2G/*`tb(ENou8=oOeHkB *"爡k:2er* _um޼E1m(Òѥ:RqBy"Ymޔ0Hˢ8rmkպ{ƍAJ[.glÆUL9qUT!"ZtR=t9ܬU喒rIOoyA zf#q!nٳ55 1]p!Capɰ@qfӁ~:Bhgk ¹=Jrr*l| Fttkfv xU-gi yC9cXOO;%‚%8_q^l¥ ЈmnL)1. ("lzD%/^6#KAl! !SoyyyFFٳ?:۵'" 3fTUUAEIl;39HFmb!%t6dL#AX`tpp ǎ4VU/Ӑq's$Id=bP,X}S%f\XB8P9NheR|d6rr&%Bv=晠ˆ0 ig݆9zTQƒ]KRQ.#FTː1|'N"oFJaq5j;1X9 E >a&)Ξ='K|bɒ8Zsf8 ;y2ixQ'Đ "h2 b"!!a0b@ڱ᷿=j[[Y{cB$*bBʫ,2>y)#?,,"335״bda~J[$8`6@ѣK`i$Cx]3(bD^.nxE x!0Sy%D;ڵk8%gϞf+ + [] zl@5 s ^efJ Q;UZag$%$4h<~$#qلF;)1 N xDxރhJ$zu v!vxq?:uF^d) VXB_ȄHv<ŽӦ/>eM<ag1:@䱍;rFqG$ʹ3%?S ep33 Ҙ >WK^J= lw}7//ԩShB;ǢC,;B\lfqvՈ KXmێ6Ր%%%%''Ox% gϞE 4R'11qLϟ5т@6{K 2|bb2\MRaˤVި`OD1@ + uˁ!eG쓯^e|,Zf4۷ bH0pD#ƛ7(iL:Q$nLLH>\`Ʊ]'/MI Ry(2QRCV0Lae]N-bq%uzӦ-/_ahQU%˖qMIGNV*߱12Ӂe3+[ LzzI&B c}c 'Pl\ %CńCsFbK.^L8U&& >a,,5ȑQdy8 pACIUl>0^$<)AHgxC4 Eo%X 9sLje9 Hb!ihP'>*x͌d+ˆ.gQb z*4 ~fK!Cb|ˌP411q %qtEP/۪8W_}E̓Q%@1"D5.cv-ً_ē:*(Q+ h?N{/z7Ϸ^jhLhHMJk<^~8 $Tq#?Y<*8;8F[V6駟oD޻yMW>AO;֜0-_m MX78i &f Ƃ= a;X˾8XpP%_A#ohgi_ A9E~vTY8$Ypa{2@q[[9; A c6~~D=ԉ s߹ 8:L qb[ٳbW 3:^ BG`_iԩ(B,]XBKyy$X'| ذFL`Dΐ $PG8 -?tGQxpqcpĂ_H vc4 B=.N= Uttܹ[ZLLIҥ+cyޝ9RڲgɁdc*{B ӧ(//ۻwSO=/gf̘YPPpabfbˡ3b^][[#H!F5.I(}f'VX* :G2JX^<6ɌkHH @HTɵ}2L|tP@E]f=cMN.18^ҵu3](b1s8ꐏ 2PEɺA'32"ـ cA8&{YC0Prɸ)=KDQ!%]${֜G"ń} C=Vwtthnneeш8g!|'qDVCx!e""#*0p/d&3D;&PJ$Nd;bq i@@Ç))i_VPʥ E8@\WĄ`0^D\KeVRK4i =u*C%eJhGYjUw?z8@"xp^l 0rs$IOߣ7fw%q%WZCn(5c1Vzll<:pnllDw}?b&>|JOOzAwvvKnI0tyDAheb3"Jz3SeL  ;%aˈ*3 |.3vɩ҅^XN &jȴ G,(! fmDWbb2HPhC fvv.F*b92H}D#`BCc]d`cH{BjKs[%P+JxA ao%DE11qy"gH!T\N!#F$Ӯ"%VH#^bU%yVğHxeBp+؏4N3ب2.$Ab0 :|#%PHسg20R3ua˸c肝Y5.c'$6<4\`?"A,Y·FQ-\E1O+?4i2zQ= oC9E)f 4.^d\@3LQ~|J%r`gEd,E\b zqP'o~ _דeI $_4"A㳋fƌY?Ϟ|oFvvvpp"zpsm!ALJJIN>MB)_$ZA04_))p%#|s/=oVLLLZZrЂPS>EbND#Y2  Y@X&G5c4Z?&=`HX}>s-0 ̎2v;025Fblх '? D$!%A#>D04,ˆ!vT`Wb vc!DJ"U*#J,dx妄4̼y&B]ɬor@//ʫW?Bhp%[4G /\JN D 0due3@aֲf!p'?yԔ=1 1 H!vP|祥S`Q#BvPnnLI$bIݭjCr'@} !`IƋȨWF0a80 Sx˖`ˁ W'[5RM[/Tc!%;ȁ-3( ݁ݤ]vJ/++'886SC 9|!Ey0סQ.тR*FO{-%%e#D 0,q8 1AΒl S-A(0̫AA;U2#h\tyGqA#6# ar^~?^>6fcemi5`ǾЃ[O7?WSstgmME uy%g9wbB^{vgE6a4 d*0y]w=)ϐ1cǛ_Yf[7v!rachD>[ج\6ek 8K#{ $w:/r%a=1x _B:cfPb ٨}5~0|f166~ÆMM^|UνȄFl`Ź'}GvSNN.6 -MKKgS>9IܹSr{H X#rز`fˆ/0aG]0SNEN2vB{؎"I4tQNBO0:W΄Uk0x"r޿a9Qg;L ~gQv]q xH k׮s~-&^^>lڈlR*Daԩ'Pۂmm4#GH;+W>=vx888mٲEG_ygΜUTT_A @ή2qv >u*+bi`?rvrD-)Č<3faT]${we+.JpTL2S IF1\nb #nzyy766-ZDnf;;B8m:s.NHwa封|#l0@(38gPȓ--m~1gtttgȬlF8st! E,f $3aA&SpxC/85ɷG /,$pfC]& IX1IXQ$ &ml}0(rƝ# H6A>9&A&P"m$7ȐXN1Fr 0ݘ&񆑢79^H5Ҙr pᢋF'NbEiőYɪcQA T9c 29_MZUtt,#P,\-_Ag / < K4ddE%XRH9^aìMGY &Ǽ31Y(C4 bN2ִgUV*?XMMѣpݶmx(YKS90(ƋGD1P #2j"n|m&d&d-cǎͰ jDf 2 [o$qb@> &6 e!;;Eѣa$/FD,}$9>^*24̦Lf(5X1TOX0qWQ"7ƪ^{BXv|c,MC1,Rf%uh0\c"fdYSYPĢ 0bٖ Ђv!YV Pk)pQ귒LHH 8a2/_a5F]&RJE Br /BvmRf9Rϣ@d@0a,憎Ì ā HT&&La `Cv(y')#X]uȇ^fov: C@x,zxjBꝘLܐL0YgpDOƉ B"2Al@[BBBFYo p Lh؃o--Dmoy&)]x{9«P8嬮ff,h%łI+ c,ڼЅ z[]]+ځjy `b!@ѣ_=1B""'Y &{~&2Llx5Ad"Eo c J11rI gIHJRGh`aaN8I"(qxd@aB-$8b-#t17ʿ!p"^"8Sah` EBI# 꼳qa,bya4gyzEY|%ī7m!@2iyŗQ#TS8>|I$.v8›ՀOڐ $5 ٥ֲ꒨ɸ#H^ .0Gs h7[/`y[>?q-bkzo]R_}r_ޚ]U;;*Rʒ[J JN;1zGy9EV77#qHM6~^`?ӣKiyIjTgؒJq14544^^6NjS1;lFÖqϞ؃"W,,aǎm./jc^^Ν/fOK;?W\\3bgسmWq4B#;!#reβc୷az9&o9Z.73l9pG lA#{MK Dfng9q*O`ǹ_$h/?/fp8.++Wb߰uq^kHSU?={쎎v??媚vpCBTnnpf3 xƗ0!4^Ill< Ax%qDCrގ릦`9=Z2\Xj |jW>>ʏclgqu^`66Q6"=`a#DYfo{YNrޮ8u*9xmlZ";H Z% pm%bҽ}Y˩.˿ C''g,)ơ)!u/X8sY(}D(E$رDl98iqQ&>--c 3g !==. 0`<9 0$3Boff6s3"'*AE#^V&c9 ؉0 T 4Q%p.N, $ RI*YE-տLxxs =..3g3dFej!|k~8J *(sYF,/XЅ0@ # Ɲa"0j,n881do~[JIXȂ*jL(&INDč.m"2UNpDh >0crr{/",p&VbEF`?`%2nh;vP+/RCFKpmڴxypf$7?Q,ԼVx|RaRvfi'!dnQiƔ9,P,<> Ɵ;A֮]Oi[l1v"MboaFEĘڤx1=yJy)3‹%b!"  Ա 0"ѐ!2 #F&J4a3/4'EI X & %61X.?/KJJ*.f^ Yꫯ3Xl^ Hx&4K, $*3=IV?̙,&& e8l"x(Gn<܈w}&,, "@#Š`LWW&a2,tݥKDt Vl8c޼yĐsϾIIyyVrA#Jt1/HpXZgg' ^6Ld^@R% Lc\w. |WYyY3翰2Y^Ŭ,P "[Af<2]Y9qAdsECI6zJe?Gd/g1ax,҅ʪ4b~p,VE/S=iFPDJ$)Qj5dCvĐXҬ>s&`0jkk_UNAb0!>HfJEE%p#dQix;4'O7B{AbAf-bőW9T E_=xT_׉Isaᔸscm K$sd/ '[b}qk`P :2Ą} k;&#izŸPO;23XsDE)wkb.fll? 1"uD2 y ԟ.d8# ItIGXE~B*)ax|W@_@/9z'߭.~.v; Kmy[zjzk{R;+;*:*ZK cJӃK=9zԨgfވi8Ev=)q$Q7dO}r5&2;*^jmm-K>55bCRg?f1"f[b ]m"{_^QQy9,#GUU5a0[" /_ nk©lbhds&& F= RvD-аپ}A@ [|wW卉):9`\b]wa$s`)13fxwȲ{Fx~̘1Gbv@;NV744pkBCLp4[2@ vb<SvyK]A@V"g%Î vl^J$  )# ^6jk늋ר?(..ȳe?Q$k'NB;G2PˆG8x4s>{N'j &<Ǘ_F'.bPF0L!d$$^WWOR V IӧL2 ̙Gkr2!mHD%hxi2)ss=]=QvqkԨt1q(1.̠KbA9kΊd5`ͱ/$kf%2.tEpHBV F I!-a,LL∬QĖ.bŜb:`'2t-X=6,/Ӧ@}&8Gf+FBPLBsh!D fHdw0ub466GY<%9"zFG3^]C ]8(1aF2zq #[["""QD(XL8X2񺾾5mP&N0`LxYQ;b#c$yX[9sP$UEr~c,r"HLr#BN[/\.CF/1NzƑIMx9"6b/BApb$J 0Ir;.G CF20gLF2s_)ψ;@ y0Y4 cb^a4 B@]fT wBBBDgϞĐ 'OT$XŻ%-l%>Tk] ԍk3f$s6o6y.\eD>H<^,Hly$=MJ.lS@0cip.` q .:q$(!^r;{!a EX k 1O/'y&9FjV6_ԑ2XА]7ؿw2Ϙc~ZxB W/u9^GW /?*"-WO/j$BvaἶPB,2 %\@p'@!CшC/Sj iȧ"E#.&tH#"PXEC=BK @J;T;H &4L,4K%SvUa(9G %0g0}ٺ՘.e,(a!蕳DiBm-?)ځX/ C n*;iB)]5I\tɣ#.NiPٶm;KC!.1CH%bB4FȐ #~QQ}'DC7nzDzz b?%t!GX  ZTTÅ:ɸH! 8G%Z쨠BsD'Xr./2 bq ]pxJzJe(ESA42׭!~DJK9W˵; P`H1]aJHet#(*$D2\U^h$n̖i E r Ft=s cdqX r$ӈLib3 ."h#]ݽ}}2*y=3D2#98rhaQa|3$bL"JB)C>C ]ebQcr 0ޟLQMI?C|G -#P r$EV6B!,D@BO;A\ u6)#Ɇ.)<RTC@ARwC%C)2Euj(V0u0@y(1Xd4i1pT{b h?.G][]vw 3UQݕQ]ѝ屠""$0.?6/43ɘޣGn,ë=G .Nqu>t%ċ3u^?\_oPzzi]*T2j*Ȕ+uT \b"vU*%1UmW^>ހ H~%e+6*\-.!uhJX HvQ#L:5tlKPEQԱJ&td@]HCQn.`% ШdNe(,b-Jx(%"D@Ơ eNv:֢^Gl1Xt)b+Q64j2|TQځF*^ DD2TyfFv5`"@#9EH_xgRahTGq"dF*+#.U3*rQR!bjҐT`UJ_M/o;Wu)B8+]Z|rQGMI_:T"J Sv"5C P#tS% hs\4PC]պ⋀KWWϖ-fШ* @P]Pw6FQT,E e#T-/JpzU bpș0CWm9}~W]Ɨo[[ǚ5严(6(#4DR(TTb%nCB]¢HJ"_xAJRFZ4i+<ؼXahF ,(-BT2hh!VpAr)dt;v]gP@DR]mWaW!24yE>b]+\j"ABífffe{{Gq_JjxD˔ɔ@ME%@:*#aV.25(9C5jEqFQGQ ѤEb!Bdq&CvI6@hVT_U:L+!#SFmhThFJ;Q]QqE&Nɣʫ)PWKeAP% !*.)ǔɓ E! E,ꆓV"bHCHH;Pb{V2*\%4EF<).1xeTu27| qт3g3jp2wD+(q٪L.*.!~ee塮1d*r BD8d(K$@f@'%H$1`(W.bȋ`bZ**mv/VΣJRK5Rg Ȱv%zJP¤l [.п J2̫D p >u&9,&." ڢG?W,P -QGDqYN6K"~Cjv+9"DFhQ+%P¢E ZQK]"K=-Z[>УE5F1 K#1=fo x/5PJ^@אI"MS. X#]^b W#=ן߿~6'>ή\ܷx]@f]lOK( ( (j+i. 59e=_@С; ΢ϩ_kbR;^in^ qKI0BO_{:\PK9v/qf5&M#!YE|K nuW1@\}J!G_1+_BPǷ 7 ~d>dfsV?|֡CGsОo\@\hH魊.,(j/n)k)m(n,͍, -I;wb~C$}{1o^ qo#F jh6%h/-~mU%k&{ J ?a-J>:c uY ԟ}Mi $+,_ϯc2/+O]:t|`_@]/]ow}􅶜+OW'TtҨֲX 67"3\HI?ZIђ;>{;X7BYi['1:(9G[Ux%0Zb(I5xEABJ6R?&'<#<=4!8@֡Cw/uGQn=< Կ<*⑑_0T| \=_}1K؇ $%;d,)%@5J (F:s)-502d-8-̔R]:t?Z=~67^n\@oμԚ1P6j$"<(0./*;23<94pԨQꟂ/u+Э ;X7˦/?3N/~i_[BK970p7+ ē aDvjpuT26bl]p#- AJ4A>̗/A[.JMq'!:t˯~?^>V.7m߽c 3)Չ=]e]QQeQ EuyaaI!:`YcՒM?θoCbC|`>ԉmxTl5u Q*RE/ KyW;r7hLӾ " ʬҌ} h:t|ga|F,l+ؿu0r0b+ #F #v1 ]aȼˆ]:t|/?G}=|9L_mJOuh+o*j(S/OTf$*?_@С 0bfad]a;w]a~W0RwWh #oFF:tС~?^> ۲_8SYY^RTYRur:4P h:t|wa|F,l+ؿu0r0b+ #F #v1 ]aȼˆ]:t|/?GNVnN.>wܙ-\@wW%vuwT'4DVgWe$:th+ؿYvW`]a~WF_;F:c0ˆyw:t_@JW嶬3o@Н] )%1u9!Uo@ N ޭ_@С 0bfad]a;w]a~W0RwWh #oFF:tС~?^>zz]@@ KuקT%0",$672dYҴ F/u]uW00bȝˆ0b+ؿv+u|`4w7# #v:t/>.]裏}/~?O^@qO_n~+߄wu~׏&ۈHk|]259Ӈ?>G#-4G>BsG-:w a$ǟ4t_ZXٸmuvݶc;}} <E;OץKNL(Ohk*n.>Uv쑄` h:tСC:tF`|˦C?ɏqquK~|??˿?)_?+_ nL(r]11 _ op>>SCmI~!@ $[%#nܮmch-_cQ7!a!rp:,R1+ڕin P !l?U|}h]kOҨa-a_cĮ#:[`< %XO՜/ٸXٹ9ymؽcG=|@죮3u{kRAGURky|kyB]ADUNhɹ%i:tСC:E0eӡCmܳ/<綹^/>_??~OE?G3ټu;ܻgW{ʮuo݆줠١TzGwGGWG{R*NЮ]K+VVav#4(e[sK[K0]JpmM-7yM*[ĠUEKC#hUeCC!UPMzUlck#bE 4hlhVѤ@olbj}cKmcK]Cs]CWPWߨ^AZ^Ahުʺʊچ&P]SWYY]^QY^YU]S[[W_SKKMEeMyeMYE5eEʚ*e ʫʔG***K1D+QX*7DAIiy 0K*n;0b 6=bM)(41 ҊJƷd5lvn pܱ#k]@_.]r9k!C>U}Bn(͏*.=w<~C:tСCo otq[+#qy:oÁ'9u|o':|42hT豘1cŽbÏX\qBq\AqQàEElUq$.譈8~(6PLѧG srO@ub{O>u :@T؃b 6@VLJ{j  ԇ2ĞU(8;!Aݾv7`.?_]> Tzz{zzz{ITvxxllsM2'[\mU8njcXZ ,,mlPQ궦f6ðbj=-V7*[6`[aqƍJa- n9XlZk a 3j`+M4]f+bFX|݄E7,\~ nK6.\i l& 6 X暘ϝ?y&[/2oCX`Mo\h`Ѣ[p-E*&_hZd&&,?y[9g _~ނq歘5ggY6{֒3Ϟ@ɬ&J9d@i`ά,2d>X4¹s̙tڴM?~ڌ [6k1c7'N9yʜq㦿7o7w'c~k~hW^򫴼{~h_~w|y/!F p?m숷n+o~#x7<<^x{_~2#埍G ^Wѯ6շF7[`ʇS_qz{/m;vpv}JW`K`S@CZ_s'O:tСC:tM#~/_<1Թ䈜qI YE9%yg VU*ͨ)M)9'-MPWaLu9u9uuYu噠jʐQۡLmQ*+H-HOKɋɍɉ͉Ύ5CeLUN\UnbTPS\[XW)e(ȍo,S "##"TDFWDUeGUDVDĮ̑sqY%GK:E CCTP9|2ԉSON?zؑ;t#AA8}{{j;hwATڵ)صku_߽{|>CZx* scn oOŝ ww?*N.~*:;ptG)p֛`KA0 aee[6V^[,=Xzm6d\aXXX"&bce ,(yT`jRZG+KwkkwkVVn.NNf[Lݶn33044ܹr-f^M[\6or޼qM67YMe شjz+M6v֖vVf6[7n[tâEkV633s4rkN_6cEK6ZmxZX1eӖS*|eN^2q p&c'P LX0f*( PQA 4is0j\ #ysn*>}[ g N~QsGw=_0rxtOmJGeB[elsYLKYB}A\]^lEfx鹓:tСC:=0eӡCm1⹗{vĦ+&'gD服=_PX\^ZYtT)=WSVSJlmiZ]95Td܄JAv}e^CeNCyr]QWoiZm9CjKފԺ亂¤ܘhP%ˎW㪕X_PX\TXT 9?40ИژҐR.7.ׂ<V h /ώ*ʈ.8G#R#ӓ#& K aѡ!Q!!!! '<~ÇO:xLp0hЁ##)}w([}]??zVxy x7Ά3pNGÎ/pؽm76n.I)w;*p޽8G'ǭ5;9٪R%0z0|m.`fkjcj-+jVzN [O`iei~Mޖ6,m|-m|,}(l}xYYﴴieIEJfv kw mlNsK/sKO3 OS[,vZxl6uߴUf͛n\iͦ 6(ؼFi喍f- h +s{-[69Xn6K7lloaf+M_9sK6\mtzbڌUӦ:}Քi+'O[9iISOt¤%c-p>\]N\Lzi2ZcMR15h70b?&\;Ϲ-xYyovCUP?  FV\x܄%On,:ki+Y7eY7̜nK;;;{br_G=Ń͙ gSꓻZˣ[+ˢK q:t|0YZtСo/ȁӸQ:[Mw#^zg7[v.%"=),LLQfrI鲂3gՖeԖfԕe6Td7g7e)(nQP\:6kչUg6V7755aT-՗/>S_PXTXPP\_$౩884$7'$$$4DDE 000 )?1?L@!?.?>?./6Weˍ͉͋ //Ϗ΋ȋ)ω)͎-̈M>u::-9*5>2%.2)&"!*,.",.\AtDXDDXxxHxXUh TXɐ7U5'=u#OÇ: :tM2ZshϞ 0qw>p ~DBn5zMgOϽc`{ mmuU w Ag] |(ʣ?7F-.{_+;+{z+7U^Nk[fh!*<,<-ͷ[ZzXX003njbU7+ߏv15s67s13ݺeݖ`v ԺksS+ 3k {Kk G`en~͒ś/ڰav 5s+/޴rf>kٔ'O_9cVMlԥ*Kp&-p)'NYMKYos }Uo ޺ԮؖҸغʬ~wQα#F@ivQ*GaPD|2ǃ;uX!ǎ;zG8t*Q8Ⱦ}GpsaZ% T W~~z:wWM9b/ax};vPT{G0\vueݔK;+_V0iIV.R.'_{][}퀣V.'?뭻lTX;A'u򿁭7`7|ocX[?`ieaim._ۭl}m}l=mvب2Tiic\OxZYﰴR궶6;-wXXyXXQms'3 g gs3Gf[-v[6Sw442p43ۼz2E 6Ymailjt9WϚzVZghYOlƬ3f=w+L_:yJE&bJz M4;a&>\q?R*1b&zqs 1r?J Fѳ?3=ѳ7pM~p9z6A\C%?( ` OZ&O[6qʒIӖVOǙs̘fƼuslhMn\sZo-}u纫OwV%wV%57Ɣf%5?=YԮRB;¢SBE,":-TGQ+}vyiT.F"!#KF̦J"$5g!NB@%]&8E"GSMHFW" G3CI N)"A_?sШ!$kuJyh%I] B"iB(%PTFZ4ԅ@a @& Ata(¥B<M2-RKj"@.CE3䑊&A*bpi`K.!QD*ҢI0۩ !bEI ]T 5QFEF=RQ pM < V^Z )B/VQL.S$k$BP N嶠 v%IDHhdZT]DiJH|(S^Z t:p:Owbޓ{۳蝠]Okؽ(8b~G|iuP |x/wRkh{羝;zܻ};o߱O vo[;o;{/;/[{O۝+;/K[6V^f ]f殦..[6o573bcfjki`ihVVvvV[o^|W-75boijkf[7sK7]klٜkZ9}rl29kX1yҩ3OlEճrA6t8eo@OZLE ? M ǠןʣVѠ4`cR1z{{[7?!k< FK ȯ GOX4f"X<&-7i)?Y)>bg:k 1okg 6[yW]sbg`KvczomZwֲ:,+2)l.=O}q٭瓊tH?CPءyOq#`J;$)!PRͨ@SҨ 4…:W^T4F*hgc (@. O;u!Hx'y1<_ZD/ dL;i"uD8 =QP:zQ'w:[!IdH ;q HI;-5^ꔴK#@$JҨ9T~(iW-._ / k)ӎUbB |Zd!QBy+D,$0G @#T"H= ]‹pt 깻DCOsiO(mMe* :s:r:k;k k2۫:s:kr:r:̶J/45B^Q^Yޥ* P>Uu*touJOerWElWytWYTWYDȮrYQYFtŪ KbڋcڋbۋĶƀ&4D5G47E(_ΉΎʎ̎ʢV|-::? :?*/"7,72? 2?$'!?=\BAfBAVB~FBnZBԄs1щQQ1a!aa N)_ 9u2'NWq"GN9O:x`Щ'N8p\>pM}';n{[c}R*?Ȯ#~*vA>~A>jw޾A^AM o ^W=y@-Պr>w]ls?}z"u2z{n@J`G@>jzr}+r 8:w"vV>ʕ'bkD+[#u6p3Wn]- -g֖v6Nv[]\-V2_hʕf[--׬Xp瘬1Yi:,.8sV̞vɆ͘R'/[哦.8vzP6\@K'T>S]@0-Z~[nZ}^4á hzSC笝1wyglpŦYYpz_μ M}uzj&wV'5(?!Y1)AFZz&Mze 襋m9=o߱hZ]ܹ/^ʾF/  J_B WcKPU<ة PE@ EEЋS[ZZ(^1E ?i׺2Nq .7EѸbŪ3fx*zE8HrHhK(!.0:"dG)1@͜9[Zߥq„aAtQSyEhN)*(F*bt 33wyG"2:ˆbFDɈ eVL6vQb"-фNţH) G,.#@)fCCQ&Eza(< 44*.%zEd|EsVH #E"4?~"):rhN`B@)KA+r^MHE" b&DX^ Aa:PA_-HX(Gf,#p2 %B Т"*EJ@@v*Od'q % H@(TA}t=$$L&HH!9@饋R)Q$(E '@XfZ0JZbuMu.y bRNR ˸CFJ+u-"DPĊ@#@m,ֶ,%~Qgbz gby;@d-hbԙ~~nbhFFh!t4Qa8;K uqw(#^0۲67=0#,; 4"I}g`xR&o0@Ҿ梾FӐS"!!>GA]nO]^O}^w]^W]vW}vg]L.6VyMIUWst_U@u@uB_ElwytwEdoYXoY<",T.tFuFuخ8YYYQ;J┲8888N "ks#ȉUYQUYYUʏrT$47'7%%'T%V&U%W&秔&f'f%g'g$䝍JNK:ǩSNzG# 9t0 ((h Ŵr+mt ={سrCЁ~wxG|CM||zz)AyAעoC86nAm6J;٪‰ g}R {5 D"Po\{]n5R]vǡ߭sܺN;*_.G?[{_k[ 6vC66;--,-ܬ-ݬ,\,͜Mڰtt0g++W[V[Zn\o|ҥfv7/\aμ筙pʵk7.]a*_1{.ެ|yi3WNb%?i3WM)K[TІw5!gzGoQE͗_?|vhȪA|\χnZ)˴ 3VifAϚa΂M&,ZjzGzr/foh=]UV\Xtm^\EvLjd]@c@;;v:D}} M۷'P gϞ+,,A2ã@6Ble -''/==%;~hdO/K.N9BkJ$+-Tx#^`D5Q?S3fjo ܋.P$E ZBI]*@ iA,uBI)4B,q."GM4:**'~, 9"D^)K)JqM/_1m YJ HHRhE$gϞ,8q6vzQtx7?WSNGD&,"yX,@ +νv'_!I/ut!Pk.$kThE#`!-M(iuMҚj2T4(Q* _,uȄ@J]t H"_)E)yZ&^YhZ02*B!{s|v+xLG715t~}vv(wО^7~cR0tZv߱>Cp~@9sr V!7 ( kG[@!2ή7.N[]*AQV'[Uu<;?[]W.--ܬ,lܬ-\̝l̷Z[8X;ڸXZ8[Y:ZX:prٴ~2eK6wvټvMs筛;o< nZr 9͜j5`ނ &6MJX9q Lbfer/J䰇Ҿl "?j JB./ƋTC;pGN/3yyDcPV#\Z Q!j )/KXx+h_mAC_+T=A Lu%LD&2j1#CbcCC 2pi.Jd*X/Ў4RA#0b,fS -pыdJ2H\J @IcEA&k $bF 1CW@],$tAL %1 $ MLBe:.Qj{իVV֬Y{xM0}|vUTT͚5Aye^YD#감^*ZBxc{wރji3pJ|2\99hɢ>ϴ3부8(C_SX$$%ǥՉ#GO:]/زL5A>^TLB;d"C,kzKQŽ@Ehb$?$MTWW_cB *C\ebؠWl3A//rx$l&2PA AlD,t#]c%188EpU.f3mڌI+؀vcbp!0 @;ޱ&wy" .uw~:*E#bC1!/P$NI| . ՘ AwLj//J*IO-lnq,Z.7΂ ]5ݵ*j.uW_詾Uubtt|K|YEK@kQKBezUߔ3Д}4f77P;ߔC˅ .6ԨB]ź䋵j/TF]IP8Xw2ZAU@5Muu侚}gV)8]UYR;S˕ߡn)Mn.Ij*Nn,Jl(L/HO5y չU9Y Y ee1Y1q yɕy)eɥe9e)eeI( SK6/M.ϋ+Ύ-Ύ/K.IO<Nttȩr('?vhGQ Re/Jku8r@jZ0t B~Z*ǩ(wлh ѻv)>An 0 D{Sypz;k<ܶئ|K:#.71hǭ*C 0Dvz @' h;hq3pp Pur%gmjr͖)IDAT XY8YZ8X[oqqmf͗,޼z%+6ϞzμuL6-]nzͲUsn1g9k5EUڗ'M]6}Pʍ4R@ h;hv=\j5^ucMFio\^`ĮLvkb Fd#[ad.#3 h6&,2]VιВ7ؔ[w2<4$(&/*;$3,)3?zDDTkk;G/,BΒSB8/HFfͦwշp>6'OeogQ]dWnl:m֬9CMR@ssss555wskff 2leeA,-D[oċ/1c}}w99;7 ή׮]out͜9O ra՞={;; ao:;]E`pB+-իرE,]3b%ΆVVyxܶ}<vDz+V؁.B.‹:bk[oC('|*rz*4H۾}7.P >XrNZj g!XL? fb֬Ysİ/`EFEX)0Cazkk[{Idmm /( a\l==-,h )tÆM2Ɛ!I?tޢbOO/pх:^,E0h$Hf R99yg%(9VV'*?S&%xk:[AA2^r,bi$ ,) fbDBq%++ҥ!nnX-eIV Zp7$$,/iN0ygg2~Ae_Jqw5O_dR2O xp"!ň<ďY9*Drw)EIT񎼢 oy|gK>İ?Fz1b*f˚ƻd``رDY^EX0֞AaY'.-FB&2 AhP-~LZM-lDdqfA* XX P{6(q&\WӝU;+tVW3ͥgJ4n(<]WZ[ZR\\T\\X_W.>?-1\R3yi)gOGgIKKO9T}ly钼ܤӕgK e''r69:9>*!::62&"[*϶֮/oX;8ٺ۹nupstpt^z2kl͜m]Wh-Xpmt\dg0sڙsVϘR5SgFEWgYK+'wvo=hYt6cp-?R\C_0j܍9^o ax|[& hZ.N?¡;iׂs͘~so2YhbՍ k}em͹M Y=tBki|KY|SI\m~TUnxIFpbX4i*4s&^vٿr T2wpfޑ^_|o6DR]]=N>QlOdCCSj꙽{鯮*2+lXiag_SS z{~] $SUUSmt,ӟKw@nZZ+.^EL,aGa-SH̨ǯ.EfXS}}?|焥Cئ;~{پ#qFTIIMMM.\kP嫗/_),,NI9a.CFi+%Loo?0#LYY9ii|ɓhV\جE|CC9HxN#%]!&1ޣGs(}ǖ,YF.y{C b|p 04'iuɊh#M\\!&+t$0!?;::GJE^ٳo``u _#͌́U8q0Mab.ʵ sDyH;z׮]?8x%[!_ g4g̘.F$ЅG'Y_8 K:H*Rm{z991\6q,$7]KL&#N." wBך5됯C b@Dn`oC )G b(E,02eɾW60XU.>""'Nb!Ss\d#05VTclzyA˿1(i0Š DG^{͘XU΁ Qf(;[3 4Yym56,_~%Z$il/0]]Fr +Mb(gg`b1@Ȥ",H@+ZMD! `Rsf,dK\fF+6:t ύx[o,K?S[Q_TZ/_־rC%И|!RCX?X{6R]1+c/$ %]MTp.r]ź/4l8s!BC`>}s @z_]fmV]v_mvomVOMzW͹NP^VZZ5+Cy:5#59=%\jbZJ䤴ӧRc#"cR3&礧d.9]\\^x0 8'97АȐS'G8yXѣtѣw+7;\@k_V. /5o@w2\}V/OP/oWrs;ho / C>Cw;jTcT8H <<Ieێ 7l9\8]GGˎ g`>z%' | `_Ȧm7gƝ viBCU7oϖ+l.ـBy?ZSG8HlF~W^39p/K|C gtVO?'1bgωW_wrralg@cpxS,GClbǿ/4~.k׮Q眀d8oڴ# !5uzcb^yeCC 9JbcOzx_tqvkܸ G9ɧvc Q25Hxx6L4r 1l֬9;p p|'8Aq1~98lemEbi׼Nh*;@<\WegϞ[[[s<hqԩBd,$q*.._ %bH7(W/_T;9qK;,q\ &b޾Ea${p݇N~lj1=LT1 K94t H޻w_ww."9n/s_įŋ^tȨ1 .dž p x>b!VA&!Ga^~'a@|aRrŗ{؃ywb?b1]]OO_?"(v䳨2 ]\H9B5Exa X$aپ}0(sT[[x1//( Yх ?aH Zt?6aˆ.̠k52NμKNNh atryD25'NB>@M4K-ÎN~~d2?:$ y4 8-g#ebX_ 78~ר=/w!.-o[LaEx"bm_ x^hiic%+ J #by^ӂ I$-˖`*H >!::_5aW=BU%~FV͛M"gx?7n&16ltGt1 BWjj Dyq/*Xx!"]dw!bC]xnC],q :HT*+WӅGDREħGy|MKG"="=6xD^T hgtAO59Fv^ixDY_B'Đ7,"EIWF$LX8e+ ,b׮}\#Df`<%34$6oR9JKadF SG:t(xnK-6柩,8[WX\V_PTZ^!1gr_+j_>.uU^(^|HEKm.u_jQ:ء\:_h+V|B{`k`K`sΠM΁ˍg6ژz1jcGW/7&^V W%^ITx.b}: %]j<}̥4d^lʼؘ"BSF>?3JsglY-[ckxuwb1ֲHG.6]<`vv'B,!( x`}-`_Ι4"0YP:عa7̣^||b``0j^;X iՎ%;6X:c{m$Ba 6@ {3 ǫ I&ag= UJb%׳<b} NNN8!P#-"6(Bh}6l2?#4a75Ck_{! *B^x2h2L_kkT* ̨ mx)aHHJ ַ#SIzH|oTj]7Gq$//(İAGx?8& Yh&=櫨Dž_> G,hVTAA8G:O~WR?LOτ= Jhh86I0/髫k#@ :-C6$0P77jj.ơ/L&OSSӨ]5K/zd>Cp^j4|SS G@y~_??-- Pg`kQ? 0"d p6SSS0R믿~̙ǭd B$B-4ܻp?UBѣM诒[iiІ )\x~dd|Dx7y4 ?99HJJƫGg{T L܈JիױVB6,NPQ/EB:YwO踃+8fvae522)uD1<<.w^RLeXa"_Xd@'i+Lѡ&Bat7mE]Pch2&tFp)`F3aN#f x5q4N!c` d5!W7/ΘQ&C=?яCYZZU0M@W# Cf< b(h>~ "DX" tqvILxȍ0;!EY8!t P6H4vuT 0(bvuT\j;4#B!#`?[Hաlk< 1*Ne^|L2X0,~LiicNJJ*F(a4$%1u8aVhHZZaD3R8 EO Z|3L^9"\cc3Y`WouQ=|wqW5ӯXZ\Qk/M>:4ڡe`dkebky|ke|{e|welget{iq͚{5;%Jk4}Ug[ٽxogSx{OuKxcwnAyM5c{ܥ;Wv_e_KVRTv(.tm/^DZ{*.x0xn\\l з<ӫNSM,̏[0zg~ɾG{ots@祁+6u^tʅgˊ+3sdT4U$NSdfe׷=ҥ\pW.޾~pkW/ݽq _p3gO?v\Sӵ}? ՝2tMM{uu[UթJ}>eDe[eE[EE+Εn)+k,+k(-/-mcQ>'jBʬ@}fae٥YYe\XY괃I8|fNI)gK3M6O8`^#f4AB4s:w瑦gK`u9XP`twdwHGKYqk8VXe[[[;vV׭o`"pXb/[Xco@Ag߸q xĢ#~SlXbʼn\}U&6XC'@-fx)_ XCm`y-͝;]fc'C.hss†CCC%%%X`4ͧ.RPz=;Z|?n.f la|B͛ϝ4,!!a|$B{YpPUU J9Vtd6aWS8MhnnNt1Z 5?Fi:N4B$?@!^ Zh6 [JE/Jt3//h..n699h%B:"00/ :z`goJBWZNaasssQQQB >l&U- 0W^~&9;$VLLLeddqXX,O|4KB4}zTi+L3:aL-pBȅmDB?ُ CfB)Cpp & 7]qnmmspp$t g1^0k˾ouot|7!&77ꫯOMM ]o $ BXXVVkn^xѮZd=E]p,zSXP8踃ܟ=0D BGd @"yY ԈY{h¤f"_~妦C,//;;8裏񃎱hB'eA?UM>,t~ \_TD DYb:utt;Epכoq Gav:} "!;77pNgEᅅ LAH,!x!!a|u؀>B_mǯ/~[9;;K1uAx &(”w'6a':Y8^1kG!IC|?prLh#%8̆t؃wjQ̀.4:TB@?/b "a<~1`|OXO¯?'LV`!pK$Oj,iؠ.~o~¨/,Du#J!0 ]T0 D[h྾W=~#pvvE.| ($ b~ 0݁B $xxVtGLMM#wNCHn!DaëXHG.Gf o(K 4˜CG(%yZbBf,vwuKKB؉ : Ј3a~2#(BZl f dTߒ$ZDɨ@&"ёۓg}Y#%ݍ9ڴnmbgulgelwitW;-.l3n3y `,^~n۪muޖkGuwWӭ=z=Aө'nC z]흅ksWw[ePv:`6!sG}wGݵ{mUזn`SyM`3O@>ߘ_zWgޥnTjgqwaknhpݙ;wt ߻9xP׵!vƵW:t\q֕+Ϟi(-MT+d)ID,0:FH,.-==3.=.^xݷ/߽{zn_tn\pgη4ijjoh`s}=3gkjkjq4G@tڜ&^LtQqCڜY9U*6tvevVYVV)"O] gJhl#Rll '''+**^{[UbRmU'B2n&%rl(]>j%Ѓ*!RP@?Ʌ kbONU"E{_[KQ4x0 kwlxP! 㭬lf ɇvv _G[ (eуVjtXhkkOXH"{LX433ryW aJJ4@5·~nn(1PLNN}ŗ6BCá`By+w!PŏRp᣿K!ŸB+*`87#7/)#@uII4CiCd B]qEG# @.Yh&zOkb! #$$$ uePY9j K߬hqCAAҀI$_g0H )(DGc=?qB ƛ^Og臫a<6_G`<X~(+ߌ'Tjq kE"1QnMHHQGbbRsE0P )lljjŁyOLS=c:T [1`O TR4p`@^z9..S@l!@̖4Pi3y 6.G(Kx P#`jdd4^7XGxmQNCVL:P/ \~̙H$^ h Z8 ^E Ob( &(0 G|/a<1۠0% FTZVV1}xH|4B&5Lb&RHF^[CGᵂFoɳ@p>^dG0z !4. 0Lw18|UU𐕕[}J]WWO3t6`mm}oo?fxB_%E]H| '  D]oڵxC~k0&11Q0ŻB_.*Y%|0=}L_K0#?5JxhFu?هBЃHVc!@)1644աHzgp>UovvvL=r,B0|}744Ï;&ngG}-wP!*EPHf <:CPV@Gj Ȃ$4'~G!kXk MlA (ĸ" zޯn2.I8wt*b{xg"4 ЃIʩ-RJ`g޽ b>|:Y( |uwb)]켋5AӰ*X{H-7xjHT jQCP ! @rQ!!*'Q]_EAxɓyF PUhoDQ !~50<`<@{a ~ߡ SVD@,jy1(TG4T-p#kXA,&%TAN o>`v,F#&#Y@)T"ff؉wR[ 1`5A3ciisiqcqIcaC~StjD@ do2:; q#MsfF)!=|;s@ n!Ma5?f3v"FIʼnIE̎B4As7rFXyB"XnJ@dzˠq9bYf8 CHgiLb(A&VGċcS䒤Xop?X*pp;{ExŸzD9lٍϦ3G @D=z6!xf߉6\͘ naif~&gqDCQ}pzeP|śn\>[쭞ﭝW;qa~RKa=5"6XS㖕kآ@nuCւ##,#tl ĢŅBuŖ֔, hьM`rm$'bf؉.Ecv8*JCQՠ>p~~[m2X[/a? %Bl[M,޽UHJB(Rh8v5XcG{Іvpp?Pt3Xܣ^B5==KwP P=~Ѓc:]B9W;88j K%?XCN: 0#1NAqzFg0}IOr'N| Lr.Xa oas8إ.K*a#Aql=Q 6cplî)##0E) L ɡjoqtOkA(Eb@tЉװ34aj~~ @'sh#22` vvcЁ8eڭf聻Ю*ZG؉)tF lb?&>Bev _?аVVVֽt^*vxzjਐ0o 3T ;fh~ddnee5Q6#^B*3kة╇< o148ffcB^RR b)#Opľ+ SGPP0/ (D`ѣ'P^ T}g,T-ǣ.:y8s||V}ߠ/x~k/xh ШCkaϋ/ܲ ;rS_C` HA|L!a-Rz G0c/8~Qz4#Nj ^@ h@9to_ UggWǑ.9sաᤍZR{YdA@3!S^^9<ׯ߀co޼ c,4Ƙ,*ddd *B,ٱO+))6N0.߸qǺF(DupO ~t.RعecNN. آ[h|lh Sww/4dx/& CY;?шRxS01޻S^^yO>MK 3I|! z}b>trThNNN0i˘ }P;G[pq jR QQpr=;88Ĵa${(؀>tr||\H'<"KG'~$I: D4 o7(TWE0$0o;66ؾwl KQh}(Ĉ90rtѩLD--oh;flP cn0#55v0e=\]MC 6<څlzzf,DUO*c̣+!O ~G0G+tUqY4jG׿STTh8y7n޼ۋYP ,'xa12au?я.F{B$^4jAu6>>~x `0FOh c(fc /^{-Q 19o)JL0-xe11+ˈdLhw'4~ a>G &=؀i9dBdWd] 0uaћ)mDS"`dT*òW?d 0T0<= 4xq B<8 $؉iۗ mxdK*XBF5ꂅ( PU6ġ - XA.y /)~ݮ^?ɐB 0 4RLdA>/&LA-gCYC$!QVVzPz:b]C) lU2pJŴK.d#M" {H@ ;FY<[> 2[׭q$wCзRwok]Ay7 ʛzM^}[)oDwt.ǰԫ_#Eث[3 wvCz`iXcD] <<4 lrxPT5_ OV`J`fҳgy|PČ6 mRZ6}fu}m䥕 ѳS}-پǺگ*{=9,RXSb,iLX&$$a͇,,Pȅ<c-r_}[ijj ! y,I=(y—e.-4Ynaj}+;yC 7Z {{GjscÆE-@ g Mfr``.77(,ֱmC:} ۰9{pLm(3c ;(gYrXph#̃K!?8>z699yv;\=36?( ɿ` 3B]##iA۱fdը)`9T,@===ᑨ K|( @P<Wu1l{Qh-CU㏏9sEp 6A(d(;;9PXX,(AR]];11@ a'>~<~pN@@`(--?2d$4T;ac<33c;v!Տ(:pWRCfc{)6B8F;wo~5DP  /_B k^^:YGãA4Yp3<G3\&0rnuvvVVV}o$(NzP;u")0]{{Q8 /l^^!|811(,"uGWĐם+**<<<Ж7d~3@^ x zZZN}L@Ӱ---wrr#1z|d'so.m VV6$ۣ8B-|~ihhnBzY&'zP xoy{{ gx >$0A ޻׭Vk\\"}.W^1r0<231Ρ dhޑ1 .1W0b&0'Z?}-//*@g|1y)gH0)887-"0#;$ (H3"&#bC+|dᎎP3^=ݐ %38u ]FőORV[>ڐy SPGLx1_+oo_LwALNNO~o}7_pN7L"YxQ mSxA-HD66v II)s.]&"̜^oxƯ f: ˷|]dgh/~j^B8b"L"DĩaؼE"Τ? -**>[oP(ѕ(NB:"084qHH81vss/0h1bro<]uЃ8P)BAp2<,_wG7{733Ӈنks, J0Ep~hh p/Vi^P(Z< bBAtJ* L^BM v^[:0j AףiD!Ս P/RKm*ZO*؏ S7ZyD Q*MFYT+>>n$,*K4@І\֑=T @:DŽBC4 tCbdCT~y:;bх6hP3M`?' |hF(įLII)VC-úEFQq|Da0-ƆGTtwoݺhVB NnA: WEƲll[QAݘF0a'V Yɴ`ltyl`ڈbx2,D0Ga\.h8|NOV2xga?lxy^FWJEP`$nG 758 ,s5v?t.Gu+c&I1v)v;v wuϝ u DTU ūz%p]W-7؝]M~߰< [/Y4WFƌsGʘ1}ezd{idkitky \ҎniF>sC kܠv_=ݧSM-L̏M΍L uݽyҩXIrt"4D&C$\E00$&LJ+XzhD{sgϝ?{3W.urk7.`"LٶSgZO7776n; ֶL4>_fl>?!srrjsjM]E3YNsFzifw9>`M 4yz>V$?a;}NH|pǟ}.MJ.IN.NJ*JL.LHb⠹۟ rE<> e RE~"_&ϕfJE8H!= cIR>3:F7bS„`Wd`(*J!tt urspqtr ubcmq+?vgSqg~S< Dhx0@ UrÌ٦031:˔61H="sgdD乵 cGjOZ8=6>6zS%?{g.cu>=p/M5ڔ|X"E$lvvD:^z| ` /#$Q UP+VP5Ja T )ra ֦P+boU,N#NRP;ľ2VP~U*=DAHa$4 Po#e~FDx< E#=Cj[o|e c3I~P; PhɓLDxujDhK/1(!Dfʅ PG%GC)P  q$x$A<%1JG_| !I!hxR2u2B!DJ7Ja"Bm%H!aNu ␡"fo}1J|^v /|k!lBL*Ep#aNȠ.J$B:jBq$׾>NHEsEPE@Q@G0,8W^#҆T;= CN3WG?F a{W)d;9^cx WpW LU`9@.. f]SS $a@b|HUP(EyKP;s*H>,NrQ "YۿGqZAP5j2dY HD!t ܈@.I#tlS!r]aλ YAg,TAp/AJDȵu4|R(q(B̠ʢ 6B3Yy4ڨ, m D"!aBOYXUē6! >2(]- s.;<[Yޘ^YZ^YN=lw:f=);{7 W W { [뺅+K%ү"Eeku>=㚇 ˃LsauȰ:jXӯW+utFau QDVƷ'Ƿ75O@?T?/rv_3ݯ]&ٱ._<^YZ'MJBBihL'A " A!2B  F\ؐиpEhh|@!!qQ ry3-g[[[O:}̙^>Jk?{Ϸkk:F4qе郄gn).m)*i h}n8D@̬,gS:=$#$3CFiKSҴ2vGzd4QϿN3EE>waJ@gʎ?s3$%(%(1xI EchyyTw48%F Nes4&E"LBqX<&zFy{EFGE;:؇9:;:8Av6vA'D탏twqkp?vz6%(NA x0#X]`{K{znjfx qr88:վ2詋V&ΫG, - mi4r{vX֬ȣ-Ck8>Bw$锅 t, iHA8%Ht>nRKHl6j; #_EH2T#"xN#A m!!i@)"Gh|ҏ,Pdʂ0B.~SY :ydՅtJ^tMOߋOTp̒$4S -|qIo3xB gA)DxydD#Q2a"D0 Q4Zk&"r9uP"`;}dTM? ̈́ZȪN#-¶<''W]n~! `ќ]zoGo&zSt0|B*˧S #U/> X @)h1m2.$LH-ɓ$e!BI?"ςLZ"@4} ՅNDKw7e R$UB߭$OY|Jᑏ%gA d3@)^/H0%1JJR:RK{{l0P*(NPNDG$d<4"Ee "x,D "EYzH m}$(t^-T/P"'KA f H!;鑄$D: B" dNE׈ IqzD: C.莋ZVe6D)Ҁ)! S),o?z ?я1={B(Ղ8"uAC臞Q 6Ra$ZS:R$DQA|-x\DH H畐$tRЃGҀ *)T UJ|.YHEt$<:"Y`WOh#<=͵٭mv^hvGtc5vygcbgut}oppKۿݶѽѱ=ny@evcƞ:[;ygna cSҪ샄K=~eذ2_t;n߅IkI_ձ +;'vV&V'8zlS¡hh:<0.XYX[-tߺzܙ̓؄(yH,P  A!R%A@i@Pl`pl@?0/PȄRA@ ,+H X@`lP`\@$BB"Q<.'3LcƆS-N>v p̩sm-ۚϝj<Ĩֆ6qu:2Vv*'tsEEseeKe <~t~a]~!眓F]As443Pii8; h(4h$ %Y$逑>~D B\`AĈgb 1(!(.~B@/ ΏM7q'XiT*/Er(^&N&$IR;'ĤD☄$49*"_$xzo:9899::[?fwAg>z2>p#vcӼ3;8*5%U?lgucO7.yP4硣t}=fn$-uok:gM_X:,M^ЎW[:8|feivrk{J+ĴUX{/`b##KKˇG&&&%#PZ˙i16G?k}CWj9JKk3^S_~# AQ. 89ܺq֞hJ!#MZ`+00nCƈIZ%ï45aBc.3_aEpQQ ]]B5[ ,*[FSV ׵VgnN,O., oj%vڸn}rg}rkm|k}bgmlgudwyH lk}gOӻǮlkjT NcU'kzݹu =m`od%1,-t+\ׯO&!+H[BfDcҗǷN=ZZ^~zEi(G(/_`LrtuqX9=y冚ܬEP& KCeʱ~ h G G( J &ƣ4`:cA dYFjfIaicUM[]3MMgN54ן?t@n]:F=ځڶS5[  -U-ee-MMe-Ϲٹ9'k+8b3+3k2s23*3+32JcJ&T3^^0}")< ]ǴԲ:%2%#ьeSUIՉiFJ3lCHJ)RRJOY$B1V$O=g |"W*ϖfJӥ1)baX brI|4Q&I`A1I"H'K$s zD;;88ڻںlN!6 VF=>|}>E>Cہ#tru>ǭ\ŒҽM+&ήь틃gfZG:nU_hzݯ: `k 2;؀}G7H{*_ ~U14]qHĉ/H1%}xDzOP "*BgyR,~r@+((B( ~7G3Qj&cW4qax`1CU=` l$1qX)=9x#c뚉SV-Onjٵ;w<2 `gmb{}b{ulkidsi`KӷQs=k{5=nǠptTvMͽśsw///o:n]vzݹ1_amㆍ)ú5`0gg׌00yvcy|{urx]Ln" pg[  IB,,\* i`Hl@, d3y1 r<oW@w@ S)_#m"_3 (46JT_P[]}l}=}iTMMKMͩvTu][USU5m5kj۫kګ*+(<8U6Wp(o)/k)c h}/> ̬*F@f\ǑYΡ,#,=''g"< c&HJ+' 4M'-lA#K)OH-'+XbdR)Bq 1#O|Z!.> S >9YV4C*I 1 h8^.IPHdD"EtLD$$EGQ~~A,0Xb`$uq v"*8w3qS$!r} x}FF쬱+k;k3[kӛ[꩝m#CCS ݹz\eieJ|8:!4"6 478/X d !2X:QB⎽|Onp r4"| vq D3g?>M4qЦ0#ys`ʊq0kkgP4Ц1+'ùKgۗG#ZPjJW1S5srfjNЍS{]  : N1OކBi-(r`PO"|^RIz tjMGC?uWGHp ?+u_+>B# x`l`V#Dx;`$F2 i0& :::xl)YS6ԣꡇGͥµ gvබgvݳWf^cPz5==U׾Ξ~~a~a~;xS1ҹkW}wWsoWۣ¥~3EIvzcH:ߟ5<57Ϧ4vקvVvצuk3[&.On.oiG6FjFiwVf6gFgG{ܸP]&EKI0Y' ]$3sf԰)lݽ"831;'+3=z 4E-B/_B.Q/e4tH\*J(-(nkh8x3555M55MUMUUU*[9 %eM]ϱ3C~:Qm!Dg'NF'C' DC'qwq$?!Y: <=5s)> D8%>adx<;\Њ|@乀,$!>gI%q$&Y,LV4)N+N$EGGG+$iljx;3_, 9; \BtM2H#>ӭ\a>&@̦)i Ayw 3Kx0KsS̔6;}섟sޘj?QR V*Õ5e}3==ţ% Oۡ0\Ad /;jB6d$" /kh1F$mo:譄$R<N'K]IuX;F ? p0\iZ`wLE`W&^ lǴ-0 ,*”0͟^SF6Cԃ5K#[;~]FwG jٵ{{:]ˠ>Vw?VSvn; 7w/.W W]ʛkʛ:eNյan#A!ʈn>s$`@Ĕ63䣥K+3k#[Sgs]ZNŦDKBA88D$  "_OO7;q,9Exe"\#`phB,'K|bA#Pa}kSCkK3vt[s[ksKssKSSkcCKCCK}]k]mK;7ZY\Q\V\VPZQό)]XݼA'rNֱ/2dlЌ}6!ɾLy4'sj)G=?FXV$q!B2͌>6!D$d2g )% &4'4q,G%fHNg(}~0Z.r cD 2IH͎?˼}N@;`GP k f<#@3`jjfځ]!8f$rĊqG>Fg hS<#l 0)9e.9h9}Bڡjpv~iA;RQ -Ռ)(^B@^//63d E yK+D̄ n98Gd 6(GrQ5=RA/ 9D:S UzC3)4N~s)`*%x@X`WOᎅQ"VCʡšʡʁͥ͵m]aЎvh[;k7w]:àWի-4]]q7;#AuSWw4wu^Ҡauذ:6ʈ~eT6}fpJ:_oLX8[16 @=UF=fvV'w161zbbƕ)iQa@Q@$0 & H ||}}|}#||#"<FyzE?a#<#<WH3P.cG{DXJWWŒ0pg7gOvԩ榶ʖʊR !}~0/߈ܼyyY'k2sN@3de?6}摖^^,}A=eɩ%ɩI)I,bdt;cHrDI:j)%Iɥ)gmL7E@qϟA@q,.Yv4S*N9:A"THy4>^$'I¨(v9V*t`!tq w&I>ƙhS;<ma1^@8a'8n|G4g] s(oHDf K?Zply aiDtTeũ Jhtn,*i,.%E%MEM ss B̜j5Yٵd+3 #"-ϟK@s,3w:,9$98)89qB]1]KdgRDf'WHl:);0% sB^\8I<'˖rɲd 8M,I Ra\4Nd0II% AwT .(X(ppw,b.8fʗg&xgqz[0k `+{ q GmgϏz|pĝϧV ]<ǩw𐑃A9f$7o,^?{7֧/]֎\Ќ]T[:76:Y?|bS6le=^-v~omK)C3&*<G$3873^@H3)hf3鎋7RFI~[~+E 7E Ka,iД}b&OB̽l`#N0c_EpD@O w̏Sk{7U5#K۫[+ +c; [C[-u?ގk[}wG}נSw?Vw+ooo]]^ۙ͞WԫnU5›:5A/ARay28h.~c]|z]1>#ރ=X{4_0}ϓ.<~]_XYz @(J}"AI@O/ ӵe/W].eHg('hggPGGgP2E]x8pP0p{0#$#ܠ-‰wuw|? GySը-;LPSհbҀYpx ".$2.$\*ahqbBbNn^eeUK}3umU-U5-5͵խukZZOЍmM j ]TZX\ḧ́⦂ƂBMy y '9ޙ43!YBj #*=]^VHK/~>s`Y$N.NL.NN)p ݉&=!^x:%H4p,6SHdg !eI<ERq|b!O@rv9'#ceXiZ4%V"'Ic%"D(Y\>?(LPDFED$U#S]\BC.vN[`GAf Qh3`q6>)N=RCЈ@Q&hz sK"M)i39̘֯,~7H  h|p cw#!ho{YЯo. :չ.Tfȵ+=ƺN_>U{*mfX`X`X`yEG Ɔ;F:ƻ}ޕՅ5fÕQy}r}fζ֎AۿSu; W t3t3׶.?xUS^-^+T7 NGԻ2`X8k{Eφ{f g܅sv~cVL>y?}JUE,.-(8,@ğA>*}Tә]ݏN"s#B{)3r9Ž!9Ԉq{D9G$9#cÜ]"==>ޑ>>iho(Ow0w0Hoh_v$8$64B& b`I@8$\.HK/-*j(?UQVY{tESe***[N559\[TUTQXZA24347泋86556645f6f3wƓUʴ̊v95PƮ&gv2;LȊ'ŧ!.nɠN*bǨSCx>'W&: YxB'&&$H*K,R$sHH, "O8)eeq2iL+NJ⥒$q0N-eIEl8&AIǤ==C!pWccCKkى~>;r 3' qu k7xp:0}>:C>>yG^[z666lX1V6 gci3(yѼaAP`٩~N-N PW)   ~"F= [ޑ^"ؗK/p'WvkJ,36 1@p;G$G&cb8X+q';~hB8 X, ?'e( J'e**i(-onin+l--o)+o,/olii?.h:|֪҆⒦bvCAQS^!|dA}nAp2"90ڌN(_fv9 ,x>]\"2#I #%qΑestz$xY $HERa\P&+)XIX -$^!aqA[=~`3v!tqۃ<Ô]5?Y? f#o3,/; #mxTmmn6iPwUԽ% <^_}>11>iX2c,}vƂ3t  ͅG?8 ή-N޹t2;G# FE%>R`o@_h__OWww$;_>Ȏ::88:}g;['~ƑL,=ĭ`b u  #<<#(A9D7WVT@XRQ\Q\YXUT]TWPPTmMKUESYYciICIQ}qa}Aa]>¢F #rrk21d>?&? sЩ+SS4A&3chRJ? ]vKc9K ~9#M4O@!d!̉4ВT896&1V/*b2QBHK1HytB+rw Cml\DY7Lo@?L2<@(5mq#VAO}|ܗQ'("}G=?:u7gS x~p?Cn~mƓfD/?Y? f^nF@a5§h'M˓645v~pqw~grsճ , , , Lx^Q1ouU߸4`yئvff`[;5:emB^եWS> |W]3{fw,bXmPukz-ziizWG kcq$w ݭ1_g7igxer<{8h\=}>ttIQ".1T q;GA_]gErwuuq ap bb*s u uxgBl)#X:ih;N%Yzv F=anefmjm/uw8: 0fgW}nnhgK+ݼ1^RX7 &84.JI(ͯ-.kAMMUM55-5@]SUM%EE@PP@n\\|vY&#zLϪ8JNI-KI+a4[ÜgzF}6%y>]x>sw@Ќ.KJ&<)x8hihۃ4 8ظ485.&Y'Jd?dy<6IÎ?GF#d¨xIL@>9"s wqr=a8 Qk?(t h T⚟= `"$ޙ描~tu(pqӜDX3 ~x؅}Խ<J0IX/3~K|ܴ;C=y䣕curawjDǵs[h , , , ,)zN@g{s}+ kʡuчKc[K#vf`Sݿiz nvyKdǙu;}}ea K zUAik }>raupo}T>_[f_< sةtރ7f?tKmfk}a]=55wʅ䈨'0_HO+ 3^~zvutq wv ur apBG{F:cD4# qPtwbb&X<ʎyY& hF@:Fl"9:.ؖqvAN@ 㣙ٮ샇g]#"(('3G#r1^~؛|-F$c32+ JJ+Z+*OUTK9*ZjNVnh./m(++.+,+(++gn4͎B34f7ALRjsЕU&DS3^ကN)7%D6"L쀀.hN>'Mt"" tf_yD@2yNl\,6CF8KI Y(N.V$HeI(A( bQ5#"e->^Q|-m "yڊ; DEs4 ;1n|&^ҏ=㝩,# 4A?!<3O_ff|%kx>?6:2pivftM5& ;}W4[N@[`X`X`X` ~PE!_]\S ocG#жoKսWuk5}{>NyK?0Ӱx۰xcwnႁ}`Nu[Ww:S_[/VVC1]>I99y=`)>|{Y_\UNO ߸z>'+7B( (|<9_O-rg#=ܽ]==9Z#rqrtrt wt 5{0{vYs-w3w`9ƁN(Cʌn6†!a,Ynv\cA] "Cgv15ru9r-uqu sw(>=8E8.h[B/o wMo$ X"Nʲ 3s* K˚[HYsYySyEsEyS%]QRR_\T@@34̫έ9giUtN(FN99l D> !CO?0Y:)467/s4Ą|EB r q'e.['l9iHYm[مp7w#cc P+vtZpAVf4ͿNvt{G[8.^BH(o?!w%_“RA"JR[U\XR\TTT66՗7sЅu .g42gs$l إ Dz.{_N@ qD@39}~B@3%4ݿ\\\JtRRa2>'3Y`d'9q򬸸 Yl,&%N%*D 1ɱ4AK18<^(OKE"Ed,0X bѿ^>B@{}pG 3⠏Z =ƫF#V$J'P)f^z$|r>sBȐ*:7,)xga/Ϧ><OǏT;+[˳K35SUka€v~@937vojss , , , T0!;F:&3K++5';e׶kg}BpOkPwi5w Wuss s 7tʛ;7wU:]R7GxmȰ2_[}`}^_4Mqk<~0'-=Z\|{Z[ݹv|MMmvND }ށR/?K)r\<==N"7BEh&suں]wuussfSc$e mA4 s](=ZهZ9;s9ڈcAGmY?wqǬ%m]{7FC9 |.H@G.tA.a'pHW( z b~( $ql"!7=<'6QXXPT_XT_\PRR_V RT\_PԐ_ؐp}{!'.$#r9蜼ƜzNb>47!B#̅샄>$ d`4/F.N~B@>sǁ~#]>'&HibRIBbqb"OϋOU' >8Yz$U$IPp'OJRci,)A G$Q %ɂ$Qok[?E`eo1 tfo ;a4;Mmفec #9?ͨdgЎ?ZZe3AG){=uϞcMǞnnaaa=mM-s˰tOan V<^[[{`js al Pkp<\' 2mOX@=G@3dl8k2s2sjLASMʔ Fz.Bv6? 2)prirJIJJIjJqrrIRS3w;X}pIL*xgK9 8<"hF$Ŋa w'P7/_GS}Y`{p3 ό_vKIN=u `;ah2Xi"pq+M3B>!mpRA>@q&AL8/3~KJ0u>v?a5zf`qwfpHߍg-X`X`X`|@!< +5zfvlK;!ҀA.г7z4=;w~w~2c~Aiа]={Z:ܷ2: 쯍=ޘ'g6f7cۚGG+ѱޛ.V<- PiPXOț#I|%ȳՋ1Ύ"#`l \"%]!d'll"l9!)?>>aO,3cfkpqfue'Cg?>sI<cq[*r"DIrG 9&ڈ<;LwZ0 F$)y ť-yyuE%%ť %EuEō 'n6YٵUO@)m7%8h "݌q@(Ìwq ̌&:ag#+C;tY~>)ȁ,4]&I''If$)Ǧrt\#JĉE!q.!nQ.rpJ'@37Nؠg +Bđ,vw wpa6t;p M N~7ДNYg hD#A?&3ìL]S ŽʭՙGS}°vvH=303=|gbseX`X`X`Xpp=zE9Ќ<ЌnG75#ۚAF@/k7U;3gvg.0YyӠWu]evrrRAk쯎>pƥꪜIyxdlh\ Qz\}] 8{8{>?A8@$#yq A#˄N6B±"1(d q) 8F@'bQJ@ichm`$u؅V  66OjPv%Kk4t{HGyC#}$!)% $|@44r?1 p_3^Lg]`ed 9f' hNC#eqq2Ў 'ÎrMp&p6 4lN'RۢٙOpp 5 n^^ў>":Mq0E`"$,^(NOJ+/j-j̫̭9_[PPTPXXWXP_P[P__w2d;SmN@) M3O9hF@wvÌw>G.)OgI3>PϏWP(lR<7N~R.ωe/\$!>'$Iؔ,)V$&/"+rp sr Gk k@:JOQk?3Ђ086+#*9!#6dɼA2.d}vN]vN ]A43OyfYUts)Bv+tr*Rj~ Pτggbygp#o'19! A9qs>gq4H@'ȤTE\<.5V( Eɑr/HWaIOk ?@;GMMqv0x. vؙs hH\Qw;L3A#$eSHgtܿA쳅M`_n?] 蝍% Xh , ,?8KG7}?%N,qg?K&?q{띷象]>lBoM9p_9P5+Ck#ա^a~e5cO{#i4ݻ^"'?Z0<[U ޹z(/';-9#>.Y($EE%E)Qp ,.0X'{ ݼ.^BF:c==->ss`j(q 6^Fa/eaSVft..ք\e`x|!ǭGl!D;83'|㩏Fv&]q>⸝Q\1f!p6>8a'@?.E[ .nQq^1ܭR/_$  QF&cR*s  uY9' KJj s f_ `5O@8R]Qτdggff|&]T( +gW?˹"y<.ShiL IIc2)2Ib\lB489<"; &(D-J yaxDzD; lm+w3O@'VxM"v,NrbY(Jq-G۟I"\3{G> 1/C[_f a|sZ}r|e~dynX=331}b{×f)|]~[}߳~#?.~~x ,o/oG>4gItgItgI4?a6z~O)zB@--/ Mvxwix3l N5%NuS4hUzecuǞKԷ::_2Okܟ3/w_no.+HLHHťHc%$4I"M£!aAPo_#q; =]76Q! >jt*ȉ]RnmF= X5K4rmQ)O.֎aB۳[;rGn$mCY N'i 8nGpA#] -^pgWHW7(+=!h87H'SH99UyMM95'y5y5 9zd9胏fpD@S">OͨJMNI#H_NI)IM)f_>7L gNrgLt\)KefĚбΔǦI-KJOť쫃!2?ap"J슡hGPk[@[`F=[YZcD=jG^>ׯVΪuA>k5wwU:U>qw@s7o(9+9w")RI{ォރ kFC77ޑf1ow޾ּ"oU@#4YO7nܸw 3{oť[N i[y ņ겲ܲBZ/4Gguֳ:p#87(G; Ot+[>]=c/杠 {j1mjPYAO;o)Z>ۻDkr[DPЊh*WQ&EcݼܼܼMF{M.=-軰 hpBiq} r"G`p PNvEfǨS8c@>aAbjiAIsc˲m 7,kXؼe:z%MM 5.mzq’jqB&z%Q-FE@뛠Mt:قtd޹fiKffU,+W &>)YYNP]PSP`,,6йy‚=w3-ohhwaE!gj ~C@_9sN;ੱcGF[{7Yw{y^xQnN}[,%L - )DY"5)"RP/N.rN}F[߲,RD"4H٤A_& V\ B+tD(1 *%j?IT$"TBeY"R:^|eq@,K{Њ+km$me3<+T bVJM /LtUt^xAEW!bSP EjG1YPr)e6k4H6ԃ@ԔU9WAIk!5G痿|7yeӹvvoOUl5WQ fe|j SKeE\]t "ԚD.%KnE.땒\̚*&gS }eZ]Ռ"DF $O=4ZImMfS*&"!"&}cY gτ\UfS #ȑmLM)UleZA.QM (hE}IZ/P)(:ԐFLg'/d`ީ׿~}t_S2$bPEHfYG/E$^%& .^PSn7y˯P q~+ 2E"[K,YU$X W4yr5k$t!t!FxHy_QDKB@-"h&Y&"M˕8O6J VʊDG̒\ˊzZI:vq[`f2(%M> |}Q*' $?DOH/ bPtM#$ľím4?\~6lr5)yV[x_<=޶ўC;Ovu9}ܑދ~383xs=׏qdͣwO=ˉ/<'vV' K T[WSf(м6,_\WaMƅKZf.im^Ԥt7-kS8V/_l_xg_/66( wsРZ}P`el9ʹefy }V zNiҊ2P>CìRE@774*U%=JNvBauAAUHm ]h,.)*PWYZL M L O;Y㝣#M0\՟7\-: <6ze]!B1##r3rBSk,*B{i>;N >}w;=H;e+>+~+Xk!D@_>;vܡF9}ḻO?~D@=Խ}s[O+;k;X,z~~xj*dw\ YAɲ,)"$c=Ob BKVY@hK,K+. rN-05sԯ N]۟|)!L?{ǐ-$P@(Ag)H)!^|e╮@BrIK]((q3&JB\1$蓠w&1CL+9\aLy"Ԯ˿䢃#'HB 9 PQMk*%H跒Pt$Y&:\%q7(>u3=~3ƖHJ{\[o8,Us+ -BQ@z4B!H)rEY(vG7tT͕,BtP`KI Y(r}C>5#Ã⌞BRȹrK.ajdbr+jRv#ӖdQ M1"-VYCuH("pK&W]YtJOi BwʔufD~ligKOI+/ݫ#'?}pN_=5ps|/ :3ptύS׏qt#o붛Gw8~[';n~7AWg<7չ/85ֻs%sg6TWWUT 5eUʤܰ;fh:;@}x0/4u L h%*oixt'YsM蜯JV,k}ցN)XGvRԞRv457$1(EC?K[&S&#3N':*FK:0,#(<+8";$2'4*Wh؂ȸ¨ÌZ?T;תS5j64,ji^4u̙K[[45/lh^l-=/_b3:m# h˿V_N@*4zFYŌrmF@K˚JZӟdWK4ʔȘĔ踼d嗨wv@o5֒e! \1E(3HX}$Y,hYr4a߳C@3-LrC`ŷ`p}-$Kg^;{}g=}t:1@=C;wڼjw",K&wwOjΜ3f4=׏y=:oMtq˳Uޯ<3<6}'[jk+ʒ򂼲ԢظȘ謐,txddj h:?i@jj7tFISub> }3hg}?- hfRXԄsLW!&бjb:Ŧ.g&S7w[8{j.ss'J'Ц8,9hA@5hȜܔLCqNcˇ j5ki.ܼp%-34,ll^дqI]ƥKT!u!]Y= ?.z,7r e3JZ Y#[\LutMAAb&ЅV ]Pr+ã"cr#c|=|]l Z>Z:ڒVp+ArMI㔑Fi]}RbM\}Qw`t5jStP!Wgqhh9 Omŷ`p}-$ CW:wbT#N{}G:0g}kGm{vnY{/W=f̘_ѣ:ta//dM%1YKډ/,+@[{[nؑ\)XqŲeH,(`G_@JHؗ%hJM;;C~*A`Ibc)($(}nj<,P %KԸ fޱeb #{xx?~r칸Ï?yr{ 9r̙s[h,~O>Y-c'88TnP;tuu?{|ss+>xN)+MW?j\)"HUMz \EHx)(rn)(r+䐐q(!zEG'&\r5x#9;w`Ŋϰ#C(PA(e"!B8 L))?uttf}Fa2 Opի?~2,YIK6 27۷trra%"H-֤,r,)UF$d#W\{iT-.a A  Fqѭ)N,n޸qmv7>>QWWÏ|%KԨ yy8@! g 8 A#-"u&5a``0Jb ֬Y')$ĠJ.iX A~+E2N>?K.Ol:{+ eqڋ*פ}2.\ۓwL|KT;N@Q (H+XRj!-I`iBHR۷?}tH/ii )(;w7{"?\~6lr˿`OH; >oϩgu?{Es橞'{nybǵ[r/m/u|׍7Ov8yTSݷ&no m_|ACPZ]UQg)+537J22Ĥ܈Ȭ,t֑ /$]< hm.ߠTHhqrWDOdO9UيuR]X:+Dܺz&{'CBW}XfeK[s4-\3RVע˝QB4i4Pu6xĹ]*RI9Ch6~ !a4΍+ƹM5.[\SJ}WpA]ƖEMg 76-mh\дiImuR_o'Eb3VdŸ8YA ϭ%ehXť_C@5?:O`A~UEE:vI ãbs㓊£|u!y3Bd+ZSA_&!WP!,"X#-A;CrG(-((!lCЖx.uajM 9|ľ{Ǐ >16xt_ў=;{{;wֱ}g,}2o8bÒ>c,VhezlOe&@xSX( kD^,XOvYa)Z 6=O>Y#XtC.}`VlR6QƍxQC 1"f{|&2rrqqRKpX*i yq(#9)%Y8#E.YcU֠p}(rYyRVWdKʲpݿ{BKn՝'x yy7oͧ"n{ej,ҴAu`r b;| *%洗+$zpf꒦!B2CMKuTM_[ccceeek:ZD‹~ڟ3g͏ rя~"YfBiWzJKBp`2+vbJY< 4)Wp̹KtYQT!ִJ_Yf EB)h2TE \DR [^n_1F6)ءWr˕4ncJjJGp4SZXXXkZ 2f!'GAi82KFDE)& J޾ǎBK)oxx877RP UWE5nR_u )Eq[ꫯ!Vܠ^!qkCA@dJjtr䒠:T)$˪]bDƳ4Έ'&W Ț5y4'bS"Ou4d:Q OQJE X㊄"F(WRJ:"dUjVm|i8 $b ɕP¸TcT  EeDa, ,wppB1>QYY}=}wyСw]v"dPDX*+H|P4B\@N0B5  #iHgO)$b]$rɒaC.nW)$$.*2h$ έ"{MMݞ=]7Fp Wٳ瓒Rʕ+˖}LdQ:OQؤ828 Gq-[nڴ+X; LY !퀖[g&M.?\~_Wpɾ7{n~SQw\;v7:ub㝷Nu5wk_1չ];6ұfZhh4՗ssAYVViRJaBRABRaLB~dLNh:Y|F! w(T!_NHM6ڄe2pɵ չ`ҺP:X`ɢfUJ'Ak4:~T,Imf:}P1zH5 nm&'S)Zh3{KfNCGfEFHˮ6TohYVau:~AmゆͭZӢ54.o\\׸D}P㠫*ԚPU@gr KXF@92f$I&1.,4UmK(͉̌M( P4p#>#Noև x8B x&NG37-:"%-EoUY6J;ˑЖy7A[6X*\߂?g .>t' <4xC#w ٽ}mW|q X:fk'N+,x~'Q_ ^EDD544566Nwd%+%aag,fٹ/8|ș3.\TSSz+F Tsskqqؑ$%7Bq266W~__dG7 őMȩ(22zppxƌYhvYp૯N],_|$>>~x>w,%k1ٰLYt(c#Tq%&-`jjzKˌ^ I1<++7B"Y^BBgmOr거 )E4~שH:<::"UGNB` Y-yyo 9uW;wa--tnY|sFi%JֻԜ9 `O}_'Yf8&qq z !;㏗9rL\A`x/С#BH $>lՁc>#؈o9s65 +E #s9 LLjCNgp֘hrJ vΜrhDI9[YYŴPII)qc4; OMFYTDŽgSSS 0X& #{}8 ɢLY0)%m4!Z] М%uO=55:Jw0[yذp'D,)A`j!mBFfFHQ !3'Oe2i3q^6Ms\8$yRN(MB^4wuu߼y{M %mѢ%v!YX&Jh*}7@,7H(jL@/n##3d!c7tG(XL~D7cɢI"ãCαyokdYXcjvw:3EkoIGc9> ' < 'V^"Eh&%bqq8+V|J<(*Q}vh߼7b,<hx9lExIFkɖ-[ׯ.AJ1> 2Ѡ8O_;{xRY#ligKOIπ:ҫ1qbġǺ.v}d E@y|ǍnrVuNuj[]ƻo'<7ڸzvSPY^m(+/),*.)KK/NH*/ Musht֡0ЩI~ }Sg&XnJ#I( h*xN,0@}B"[."bPxm:=N#c,heFMի$AWgG'5J!.Zp: M^M[óCrBs yq955 z6/[\Y~~mÂƖM͋7ίWׅa k/_S;f~MV 9hKY`A4%qХաn 3Vtlu KZ Z"}..RLt~^N@s9M;ITTdUFGdGe'0ڽgzX.h3D*uYƏ]HAitOҰ$Q#KY,ݔqt88EAqXm#ao$ cGGN84{poν}ۻwoܵm׶M|fg%ӁYG?a900}N, O85>~ȑcǏܶmǻ/18vYgΜ+4x}ѣG9sHA:},ر.aPů6tlЦM[,XgOpVV,YY>|GΝ(rY_pҥ+}}6l83k hђk׮ήTx,81e." u:B;~yyͷDDD!?sɓ'Zf,tY>q$`=K)3>AHYyƦ\ň>nqE޽ee{r=֙hbDލ-/_nB-8<ֶԩJ\8HNN{q_}W_'Y36Xfɡ,EMO$P8qܹ zYc"ׯܾ`>EVx'NvlkkÇݲeD1yW_}Exq#>>G#k˖_|k}FY8&DߒRrb%^ҥ$Po?#&rhW^;:VS--Ghg:$TUzBEX{ڵ(3 [Zf`M@`\/>?#/aML1:1m'5u1v"Ajpω$AHC=RPPDVQAnNHN6C%.1qoƌYt==8}@Cg1 )@Hyr\6y 3>2+|`[ngQG-Xk?֥,}G0xج?ߨN۬9Y~r|oaڃ>, Y[oa'+++ڂei;cbwvvԅqECG;t2/h(kcۻwٶm)StJyPIDATOQeoKYڎ۶d쳦}STMp53>"E[7cOֱC55uFciY)x@heVTJ,Xw;Nrx(;;99yOOoD̓QgOOʕi823ϟxB?`-mC!I<9w|__i_yWܸqˇ4;9tw.Yқ$p.\De^r8$}ZknHYY9[l>^zMxR_ CHb0GK.\ˀA.M#裏)^Y Y@k/ae@n,YR?S~رX+±X6l؄#BgO'sxqF[oo$*Omܸg4!C!GlΝ믿I$EJa>nD~6lrgS̴ۏvNu;u؞G;/|ko(yCm״j+qD>w1sg8F:V.[Pg*)0TWd榤$$GFGfef(f+dggVo`o@橾ǭw"$%cch#~Q24w4ڸq3eff# n{NUf5kc iOO}饗֬Yo2(- DqF~< jgD1>>C8Kյ?я3i~dd4ΓrDvv.,x,Xx1xA$$$Urrrc'()%^񁂏>Ē%KGGѹr{{޶mc^(4E?EqA]L]2bKJʄo{`Y< =0?_8eLs#}B):h%2FY٨.!! |I)1!L+w H0wxPc32|JJڏ|"@d0aa/k׮#kԂ kW{G\ ,--?x4S 7VD</_aرҥ+cPˀqe0|۷;j {oē' YL"K"@LhcL2yn9ra -.D < :QH]fu/O-[rK]T TreH|n&(0~+Z i-}~ ZaImGT8OR}N>`FL%&)Di n\^h\~6lr˿gJO޺g|ұ]_8Nډ=׏udۍ#[z'vosT/ ܜ}v#_=|xMUeڹE)) y1QY\ͺ zNH1`A?_do_;;3=3#ĺzyx'xxx'gdT @YtM ęѼ7S㠣vNvΑv. ӝ#\ԆMK@BFB@;{&'D.^)+OG8{%$z,upjE^0YtYXlE@gC+DC+_#4M% tXՑY!١QayN,ȯ/]PݸXPX~Ic󢖖͍f̬YW;~~}݂y5skHyUfkkΖZqU+*UV7Tȹw4Fa>U Q1LCiYe3鴍҆zڨQR:X]T↢B‚ܜE\AIQ]iIuYiuIqun1#2#254"&+4"#,2#$<#0$?Û4!~FZm-tt1vI#7evwRB(fKY~^KBO Yi}^/$24ǰC̼s}VL"ǏGuƖU4վDDZʲf Ul"M \B"mWWw`Ҧq55MؗɢXK:nPu%LqKx!Ο(Ew`5e4=p j<Ĕ4%tpp)56vRcc;:$'Q &7ni2iiXjATTZZNE,CW68LYyϞŋJ%\"\K.ÎTM 8 C[l{vttNLbg4S<'\@(%v94/<(>8puƣoIY,&Պ&zsLHt:?Q^^(_sѤ8@޼Ǐv1rqB^YEV,Zxdd7l߾m۱rz?Q&˗JO.Fc#0Y$&4!8@ M,d1xt RKhh^b•d9jןh0S(EE҄$rq!"#q93fQ/c@z9%%mtt?1€aHDGRu^My_Mk֬{ESL=ڵjґ%%e%`$G?̙ĉSN0,e'JԨnʔAR;u(/HSILFӆC/_AG&uzP''[ EE%#~(7M0HS "(#O8qf9q汀~Yd|o)ϊaddHmJQ}'n1Bd4;2 qH>--ccc+xNG܊Wr6mAw^). ^ZJp0 HD0/ؤ.nI;}TJg]r~NxG6O `^0 i8k׮絈1uΜygf2h&^IoA*V W a <#MccĜVP%8yTo CCC/|PƘ̈ligKϖߟ06ڷ^u{.n?x#.}Ems뇶^;vkG8<֩}_L}u3vo^0gfeiiiaYQaEA~ynNiFfaZzAjjAbR^L\vTtVXdVn;zx'&%yyOxX7hu NpMPvNU۟=}<}3<|Sguj ܙ&hN.;k]k$s#F)jcncAv$wWfꝤh&DmsꮘeKYu Si{qvQ4P|%-44s0hT]PQXP3DuM 76̩]S=zvuܚyB@ - kzne<+Y5>3MZ82}.7ؠF@7jz7a"rj ku&'25<-BE@@@k{'2Mtqk SCeҖ%54ʬ Uh,KJj˳3Z?|Cgo p} &Ч?uta}>8`o߾ݽ]{vm۽cnZlB߲ܲf͚RSYw$c՝+MVYB)*bιs"#8.^}2엿|*igXhad퍐Rr8FB*}},0V /#Ƃ%_IICvğGyv14dxx(ElimIEy,aCZ7Ra"0Bh,YhJKqǟx񢽽bЈt7i8VZo~:9 LaBa'>+``2S&rD.\ȑb7hWRRct j؏OiYG .fĒ@?w};ws[61U8:} Kx![|m>ktwJTT }TTT>oނgo۶ F(EE%`RT$t Ld@GFa)S P/((~XXX~LLeGchZjO~r 1@۷SGH XC*ܹ>>3YxP4EHc,XDTyl xqQt Z`3xR5vo݋/cKah6y11x-ڵlAdѭLv"O>TsԨ<؉*0bD 55D"\ccO>̢ TbVlݺ>_.a=6l"dD_S QF/HHH1"x~JO0J1>|#S,PY"L7M<;oUW҃4a& "ɳ+څB<< ^3vIG0_ ȉ-?ot4`VjJڥ sϐ^{M8G,Yg&M.?J=;kVZ6ٻv?ض Gw^>*8~Ўk]=QE@_?]cou:|˳&zo荳O\lP_\_Qg)*M(HI+HLΏώ   5O"-'nᝠ!^ҡѦrtb}o___"q 8N<άIv.sl u̅:95zڰa @Ӵ9Zxi؇;(ػ8ǫ7<۟\5Z8{q zDwTW$)I*mj˪"=\ܣk9h4PGsDf$d6VT7-]d]X[qacÂysjgWW6VͩVt *KQUsUte* zЊַ?[Х M ' ]XXPT@'I͵PQ[ZZmHM-KM+K( O O MJc (Y;gÊ&MBhaP ԘhO?E@P&62M\Aғ8e}eI@K>Z攀[r[aӵ7top} &'?yd#޽݃={vu־m6pѢaXt knn=|(+.nYIjosXs-22ڵϹe=''"w?˿Wr,(Ȳ+Id vd2}>imos% X&dJeƍ33);_ SRn ,CKb +[bKܢ>whWWYzzzo۶#--(e,2Ϟ=_(Qٴi QLM Oh:[wk0*q߲TXՆ&KYcVqF/^Yb TJ }G55ugNF300&:ZhQ@rqJɢ=88mkTT "e/!jɕu@@ءrq?[.ut{5ON㕰%XmCBqVfhF{1Hptq_y 7o|ǐ|Տ?…Bb"aa?655all=Ǡvo,XE-9t .%%0i4f K(ҥ\*e|}n4\e_aʔ裏RCa̙'Ca)'oA)*!!gΜc K|m57;$$|OccWQD \1cO9>&CL*0(09p'P:<=0:<ĄL)W^nx"p Ź ŐJK};v޽8@XhlGr^F+ךZЧ]|}\]g~@H0RXXeeBV&ѻ)ť<̩k3`wwϚ5kGꫯ񠫭p&I3i#3YC1xGU7P<ߘ}aF5'--3xAG?/ xd0}쀖'p'}D3Ox0cW1db⌼)r Q}GqOoXx㍷{>s?4'7sT'cb$ww_JsK4xh0h_(H<==/_\\\C3h8㊱lʡm~dyo(O]?}s[gtܱ]>m)/+-3dge'ūϹ1a!!Ć 9d30r00xo%y*3/Y0 gڞzc:^7YC}NKDm:.@0@t Զ6k89E؛OnwsӎpR[MKZ Cɑ8G;8yvij:9N]=BO(4WgD7Tܺzꕤ .N&='hg(A>軏Z!2;02[qI%9E͆ K+V̯_Pj؍M m:ʪ9F Usjgpb 3]R>g󃂒R=.,ϖtQaЅe% e嵥%5ٕiiieijtpXj@: ]h7ْ\M' h˦ӘhkpVsyyhɒhc9_PdY&ˌZ2Hw } m:F@*\߂I76:t`dpށѡ=C}=]{ڻ:wlݹmkۦ7|xw~W`կ^?KWX:`CΫK,H,^mێ>uF笔X%Θ15;W\=44\uHVVεk7XXiB8rLbIYQ/jx(KAO;vć~-fo_r0Ya^YYYbǍhXL~g,=<5'u .Ǩ nܸRVRe9kWԕe֜~NMP[nOc\s;TD/Svl߰a.X8q7rff6"ajԩ?'n裏9so{ wwOu&aGh⋯hR|1'' K3(SK/6bTZСﷳsj8IwO b ĸ:6zyXaj K~ C:{\ڵ׶a.aToڴKo6u7n>}5V^w{.ZM+55װJTVVG#1d1+++{q_WG}"99ICee6g֯p5k2Ȣ4?x90 ߭k`"\pm޼I{{ 6>ciiİoeDFFSBe8d`61{y=b$t/jjjq}>dW?|-[ϝzZ:>C l<E bxX+:7h' .&nSߠ.\q&&䣏>f*WZ@: R#tįڵ)ؘ9scyLj%hL iB<1HWrjWWwK Z89s6~;3C)S 3ɋQQQ1dIj'6l\n=3ꡇay󖧧7P;r:4s̓ƾdUBGGGEXHx1r|Ƴ-q uaē0CO ڂ;v"Y}Q!s㍷?=<(,j'^ Dsߴiv Zx)#vaBٳGvuu{≟W~Է~gppAF C}||ӕ#E)h݁qG(5[zz&+M0PyF1GZπЉ011;W#gl#b^ FF,d16dVvY!>IY:4ϬP`bҮ?坅&4QtS  x m]Oab&<&c/%+"4`o@ R6Q%2SLNDX\~6lrGɿ;fD w|Ck ?936_8v¥-Wm~d΀u[o_[k_3dC4C2_$P$rP0_v92V& +;=_ ڊNX6X*\߂Iڷd`buttձ{׎[5yÆ/%4Vn,yŲaM?w_j#dAEY544g՗% VUհ"%1Fd%fvuuQ[dc<+PԅM%gX[VHDZp\NII۲egbNJV/J]]u>gHCXВƁw _{7ͬa+Y,nS~[o-jٹZ4zY;::X,PřݻiHJۥ"$h>uIx_b OM\TTBExo/ZdϞ={ \{ިԸ}wf̘-V1_dX"貇z8s*aE@[#ligKOIπ~V,2Cw-޵@ýt|x}ۿ l<ʡ-׏lvdە#m7NuRGo}vwyCV5K +rK SR RS cs"332C3CCB+Jy RSthնhwdwOtL@E4nVmvJjھN ΑM#fX{;h| G+'o[! $B@tZirkst(33^#StZEZm&}&.wmAI 컩c=b]ch"YwoоRSTYaQuºE έ]eUeQU9CgsuytlAW+YPY 18Z?Yg zfi !KM"n`I@]Xܠ}7-3²ƲҚR`ƬԲ̠TdbQױfZtfiOwW: hj` @Zp"ȴL(eMs o&)%gwaŊ~',VU#Gѡ~>wwuwٽ{۷mڶe ]`|,uxb#8Wd!$*tKxdkKԐ?sO<}ݏVjAIe)MX>˶tF7k΀VCr VQ&kʔzQqRA 5BO*QD%W QJ]dQ{MnBG"5w?(풲=֖:R0X#8H(IȢ 6hR'^B=q[<-( 8p^FJ(rIK4n)>\IAbYӦٍر%(b;Ч"+fE͡"<$A+鹹޾?=d͛ҥ+)KKiSed(bɘ!IK(H$% t1Wm>"/=8OHy`b  r%#MEq"4r,j:\є,mj\x5¢SJ: > hO)|~ēޤjb(YR/TBS 01ΰrEYL!Bbh8%$ɣїqRDˆ'.\k@SJ`;[:PP!:$pGU1ȥ%tE4cJǑEA&bkK~fYYn`(!'!WC6,BmG+0 Fܠ~'N}g0x{U@pO*>B.RȣQ:87ndff>ÔjZh"h!!Mu &S5ŁPsqt>Y$(kɢ2Z)Fk(Q KK n`p+q6ecqY^ J[(4[C"#J!\ 3ačY-!v(DH-=D"/ }m|I)׾1+dLg&M.?\~6S/<3̤ױPϊ+N߻GV_]{7^=vU>ysgFo;ymsK + *rr32 SrRRҊ""3"'3CQ!!YA~A4RHgKݬN0SϺ ?; '(; /K#3;\dۦƚ ‹٫SP1sD9GOwswրM:CQvmъV̲"&}ti9F9!ƹbߒNNU;}ҁ"tMwSWC@;{%unޖXtquQL.iA[n&B@xf@xQy)-U 66/jj^P?O6AWg+[35zNM*0OKi]Y5uzAݨYXQe]D쯇}&tFҢ.*iRtIcaɝu2=41(1(! ,2#0$?(?/nڒ}vp N hn\#_aOO},447tRz0}d R3<,%<ҙ83鸕-WҖMg {vV4nhKX:V`o$ЁC Ѿkg[6oٰk͟3eĊH[(@,d-$+g%WA*Mєz^,&bJk"4R#O蠌V{i*a5-r\ԩ,_xᅗ~3EiŕݬU'&W| JqCCYZĠi!-iM\0IAɕeTmً/L|hfu( . 'A%/QVW= ULjBfHKii/2YP\bBBsFݒVV4UbPkM/FZH=j8"!FLzGbb&& m!W+`D.K+FG0N89̝;?::Ծ6MG5[{{YƩ5#b9*қըZ]JMko?bŧ۶!K.긢L"$V,`+MG5&s5UuD Zq%:WuT\5ZTlF1q>["剦ij/B͸IJH,+ڥE̤/UKVsU Ǥ6\*B"eŠ^Օڨp}J@LaSq͎ j2GA5ɱpZ*Zq riÕR3|nPh& ǚ(h HkZ雲1$ ?#Vg&M.o̳ A[ ׾pG'?=9Ύån|x#m]7O1>xcb3#ύ:፟-(*-/+*JMOLKHOH,   NsF HLӐ?}ᡶ9+Ў@3+ ;0Kmy檱ϊpWg%'x9y:)n-Z_4'8;h)ػDMwqxds&=^maV_j .RM|>\1N(XFmקs*mvU.)^iinJ'7͗kOjS8|h$8'`w=т;B sЖ[k@Xf@X_HFPxNpDnpDNxLABrEnQv^]ōM [55.UU=jh⠫՞hskYfTϮ#+s BLX0A[&|FIY>+tskhI+XºZPPPW UӅ%ƂCZZqRbQBRQZ;CA{83WKZzMhG7M :p'Yp=4rng WB%T[ !fY$:,i@h$D@[Q[mU胣F tuuӾs׮6mݲu֭Y?oイ *k_jgŸԿ h\Q=-,g}L~3- +yGɟ Ia5u*YOܝ/ơӦ-ZAa춎I7Hm龧ϞwӕOkĺU{Oc[92)1g&M.?\~vF@Q5>S46ktC]KO}&uglxh;.ڮFxt[.~dS{4/ :wޞ]3 rKs2KR cr"CՉa>{y$& @n=q묠z{ey'(Kg&,n$=AptwUS2Ԧf;;e8sqRBxgDqSۙ4H Lǔ{(G_i=vLqà 3Z EgV WHp>$ ܼ-]meh -89Z;%";$2G΃/i_R߸qqk뇳f,in]S7z8Zmll1fTWۚƙ& 9قJғvC|D@[8ҊY(P(+e2 < E h+49sCGQa}~A]^A-/+(nP ꋋKꊋ└ĤTx/8Ig["=\õ]ϊw *3 h V#Ng 2zOSQBY$A.iYr-d #:0: $1)+: ,M~lI=;{>T+~|i"wwg[=;vn߹c-6mؼn͝΀wO@`ÿ 7f?}L(o'YBc4A|'l k#6` 6Ĕ)̈ligKϖߟ΀O+imcK~zbëG֝|Kwv]=NssxCNynKd ,'8# -(19/6>':&;2:',2;$,3043 4Kq:AXf/+BY?+ ] ށ'H<\l}ϒv7}O;-Lr첝yY)ZE%--M7 ]ThmC wFTj2%T\gG?U'ɮgWuJZ=⅀vQ_A4:@$MVAg H uGvhTnX:nQcg.9sAC5U3k5&jlՕƙuU U Fs/<>?#m>>qA)ޱG=daU'6ϲUYnj@?3(rf (H:O-t>H"*24N,4N@PVh9}?3ŠuA$z}{z{{{z:;:tؽk;ؼq7]~ͪsf3m YZx_~7&YYGu_ k#6` 6~g&M.?JH@?ֽm%c]K}vCG֟ݿm)ʑ]W_;qT7'oM <=r[g46Vo4Tdeg%&%Dd#B@hfPhg!}ӼHW_\uy2e3 H>A /$/ ,i۟ᇦv_Og[͌Z(ZebmYlL\b]#8gD V]V;[u4F@„h!@*zk,Uf!D3Jt0AkX'S3Iz+Zg%ZHg$l9hK:$2'0<;$*_]\]K[f,hj__7vfmukAU$gV8fYP5n`$!w8o?bp"]RlM@mAa]^am~amAQ]aq⢺ڲRciiUvvyBbatL^\bALB~HxwPh r vΡ\-:A:ܴS_L7w@* U2K(͢KDN;YlF@(i)/ uA$ztޞޞ=;wٵs;m۸aӆ7YfϚg#mv B@_hU'o 6`7` 6oS{nԟg&n1mHc]_}|pɽkO ^<:cc~[1sb:yߍ37]89eٹ9YiũiEq ѱ 3$<+8$#0$?$T3Ҽ49Mve <T?7d>g)j;D!opw:|C . G8{k8{M_|u)mb-#S9&ʍsm0]*9]#߷ }Pl$*:ъ8ГhڎorIHj@Bn*8N046VΤ& \<5y>h˭:šs 0L\_\SeI}M Ψjl54VW4m4(8jFNCVGҲ> H[ڙ4(PsuAaMaQJJ+KJr*ccs㓋V~^1IA)nѮjgnvΡ.aDOYfYfW&ΒOBY8hᗅFAguYtq^fnJ׎ڰbE.WQP !ЊDS`źڠcwhxxp}];woi޶eۆ7}~UW~vym#m+ų½X$d,>5Uф_?( Tlll^5ԩ?J9kh}?:ػ{?ط#/z7N<晽_\TS[YZT272Ֆgْ}H5?Ug4OttY"NY~!?:|/$W0E/k.n\A; @Z :.Ahs0F PQC"4MXn{7}P+mE: DWgb,u^w˃s:증MZj! L@(j]3sܷm xd& /8y[_j/v5>>[blll{g}9sKu|rCڻibtٱ-6?_9کkzn11p u]93z)y)iiEqaaiaAa44tT4){zx!LQmhIYL!ugi |<}ݼYvqnq:? 'e˳bLĖ*g?%/X:6>{IeGԱLL 77xg8Qqtzg$GD 'rXfaAYώ831 B@;bSQ.o#{qչi!1%5o&ctjvpKw2( LO"<ݽ<\<ANj03=:Z a!qɆ5oX7~vcݬUU&uGy}UY]uy]UyZ탞[]5[Ü8]i'iqx:l+f_@@9h}&]XX[TTSR\_R\W\\WTT˵ܪb`,(,.MJ./ IJws{G}͎꫃va^\o Pnڧw?P\\d -N*Yh)% B%KH2,Bpn%jIP=wwڹg۷oݺcƭ7l]f5>t[[hj!Gp"Vd/ V3O?3sV4̾-|vlӅ[o~DoqzF;e)1 I :6+"*3$"38<#04= 8_),P34/TEr'yoKoP_pHW ,t>3@VoWw0vU;yj?'jg  Th b"|L2Y@q58Xe%=]ΛVPqh(XptW++<4q* Z;ioOg2q}\Fij. qm4-ZrЖ[8Ltpz`xf@xhFPDNpd^Px^XtQ\rE^qf~Uu4ikij2eMƲ:8S0jm\yډ@}S^9[Jk0(fk(D@E@! .)i*ERd 긖חԕԗ֗CiIe,3$!(& "&/(),27 _ {gnw a.NnQB@jgk0A i+ "^"44 )i"G2],4iOސ;hFMܴ+~;aźڠj@`gGϞ{vnرuֶ]6nnZzç+֬XzFm  qX*n 6` 6` 6|̳N}ٌİ]sv}8U'F7m;= glle*hHɵoڻF;`MQvVnNPa_inh QˮIBy4"niݝ}#gNԈos947b nhaA[΃ 皐f/kY`Y\U~ٳj[[jMU3k*gT754V[gATVhGs(&|\}i0'Kf \΀AҲRJMШ"SB磋5I.ȯE奍% Ņuڱ %5ƢX]ZRUX⪎~w sl6݉D[$}AȎu5915b ͲY>m[=Wi@):]hb% -rI ,C5FO ,iH  , 򞝉&rYgtZX:XWtL?;Gܾs玎[wokko۲sㆭ?ߺv+?_|OV4϶6ujx'awª 6` 6` 6=3>73"wѾ:1M'p:ѝWw\=}Mqώ1>psY|YBRFbbFJj~L\vdTv"sw@$O?EcdҼ|<}SK. L ̼^5@Όã}SY4h/,w4WuuVmB7t#Qv ЊР8hL=}ӝ"T!Pf'C}9l9:C}U;ôڴ Hsm$2ij!Gp8{*:~m:C!eݴA뛠AggGF+DƧW(g0Ϋ8gN̖ƚc]:y&0V4WTUT+fTAYթЖr + ̘D7s z ҲV?FRؠV‚ڂ:% %璢ƲXVb2TTUV$$FfD$zxy(E989D8:!wv@&h4sk:It#qzԳNOBF eah mo%-rE B@#dESuXÊuA$ogPkNuFǶ[v 57ZOV~gM~]m_1wª_V}'` 6` 6` CL}S3оpo';W[}|h 'طGv\>ʉΫ'oL<3pcb7&o򑑾Uqi))yIᑙ!Aa~AiA)>zB1 ўީ%PrYei|P/?/?/' pS_'@;hu,)InޠS4A+(f9Jڌv}_XhbĦN@KBB=[As@}6#AYƠw8hm׶8NiR$t6Uqu:oD~vvLk-4VpJtR'A;Ov|rN}=ԩAABeD恀LAs sf6ϙ:8hil(5TY5ƙUMBcYu0@ D}U^1r!GpXa!-dsIqciIvC74jsIqmyiceEsEYciqmIPn)OJ*  Hrޱ. N!} u(;:hbN&%6Yr-EpE_zCEe==1>\N@[ IRry$nB[r߷ ,K"-aźڠc;= ?ܡ;ܰq^q?dGl6jx'awª 6` 6` 6=g/cv/X׺#kNm:wé gophǥcOvɞ|s 8?\|gz6!,4 Owdw;{錎o4 ' ?]C_/S<.xjG!{LO?}HdzW%MBV1`έLBm1ԚM+KBHgK.ꨐd3tAglwU[ek> h]G/$tI W/ӱMmk8jP;mMA =N  S5:G!"/,0><'P9vs5666ʲZCiMeiueY}UySrFqYʙ ìrZa0>[:;gᗿ:e-%ee-e-eMHJuʊ҆cU<78%8*&/ 4-4"?(#=+=9!)T}Z?ZhhMkyA3|YB%%UzZn\EH %ag>^;Z?:׬E">oÒ6o~>``E@߭o +nX6D@ twܵS'۶ڲe׆ ?|՛Vǫ?hUcm_7wª_V}'` 6` 6` C UNnq*c3Ŭʾe.iGw䑨Qfr׳v>PJ" BC;5(Z@pNr!m>|C΀vƂkВ@S8hi~A9 b˲kKZfl1d40[ƪ*CaeeX\[YXYb4=0`Qq la0B#-ygB@wCgDlh4*Z*ʛ5זU5ˊkJ eŕ UU f̟\m(.JO+/M K NusqtvuvZC 0G(ee~Y&&WmSN1).M; } hKY'0iZ4#[rB( ,۟XڊkZX6D@ tuٹcǞ;mֶ{˖Mv_Z>i ha5Vr;aUlllgyz5zv=:к;‘KG;zDS}7Ύ|ua[Ο]dQ|bvLB^L|NTLvXDfHxf`H}} q(iA[&V*gUWn>ͼ'AեP:ퟡ7NL 0!y[{E@=#uYhNd-WjK3M;YY07}xPeɭ[a&5tT$mgpgڸmlk6}d1Ώ6};lE@;aah (Ӓ| 2s9]]USTU]ZX[TXTWXSTSZSRch.7WUAP`PVPPѢČ\ 3++f5\Z6S>B$I()E}.[Zd8S^TQ\ZZ_TTS\TS^XQZ_RXY\Pa(1j_6Ƣ9-ueq a!Ɂ>Qnӵ9o(+w . hlhfP4dfVʂ&-4p@'Y; \$21E"9".B!ubZWb+:]Gpw[B.h!>[Y⚿V :&Н}wٶc[vlҾy ]eݺ>|*mlha5Vr;aUlllg)1Kts͑OO :53]8ʱ+'_:1x3ny@OBuS5#8i{fTÃ& 5O[hh(ZN/''G;HZzif}StYޫǑꝬm!G$'hT(Ղ"A> ̊u#9>\ O׎Y,9]\Q huuZnFk[y3W@PYT.#qp&:B=Kug7 Z@.t4Z:R`ls@~!:50,B2byئl8h&NCfs0D:_>S& &!8~{l۾mZǟ7mz| -[dɚ W>r˘4$&U?IILB!B!B!| qn4ה3]KN='xhG׾||l{]>/x_>G?zKZ%Ee y9Yyi9u)5 )WHJNJ7w4'؜}nmNLXixZ\UmΙ 4^HHLL3WuS0tPºP'}dϦYcM^,]j6ؒia%E%ᑅa`&Sc*b1asU,X7u;Eah;C11'c⃹(#2<"߬76-"8*ps #2#t' ;bN0{EF+5,o7{|܉kY_/03:qs"pc4 xC~WOko̱3Gt{j@[aisz#5ӑ]Z_TS`ݼa?say?ьηN@&HtYKf:8#ǜmAgR%'Ѭ"1#qWlٴ_\P\0>ffԦfץdY3ĉiUɆzKNOhJ67tS2R3HyNnJnLάIZe;ǧv-,:!&.Z^vﵩgAg~AuF8ʺ7yF\_[[W_c>-hdkSHÎE7D GWFWEVDĖEQJ,77|9laEę#Җ}) )3P}>hqŘZشw`d31.$ GIxD2.hE|Bids+ALˠ/F@.>HXߘSؔ[؜[Ԛ_QPEemF=3>20>;<=058u{;==Sn@}Ý#~᣽>Ϡ=>6?9+}6,:p7Ϝz D=w9amhN0ܼ1twu|^s3}g  8? KҲS2YՑq̽蜩 zuŴĢȄ tuSJbv$8@9kFfImJZhbRѤ;בm4sBmĴ*ωڤĴڄ_sZv}zN}Z`0&Ɣf$b&gPOH-K.K6)HHOc͢Djud&|Bt]̔#hQ0-_MҰhns8:<\p!O _?9#-7Z'/$n,X7o"Hgy$Qẗ́ݴIgN#bQhus'Iؐߘ]hݖWܞWQXVRVp65=ѡޑޑΞ>_wvz:{1aw7Գ̠gDܘ1y1ڧˠgx|c^uٜ|m?{3f7,#؝Nߨ3uzݝ.PwY=F[e-a脢 Z41]DF0 b )E4U4[H,9E2!Es 5<⬭?ECnDCO~q>Νuy޹~UWXtEV.\⡇ !B!B! 1% !Bᯎn\Utd'v><գ_zkww<yq{g;5׶67UgGz#-Ñf}o"mqͩՉgs}Y]RV^th! KHKdGBJuBju\:H պ_6,.Umd!b!Lܰl.e6WjXL>6Ԉ)yS#mjغ"",,ںٺ#P1|0:"fu4/740'|ItTB("b⋣̽6 AtsNaAQ{ai{qYGiYji{##]}}~og.pvWWwu=}^G9u=A{h6N7>6jfg],k &c+;}.a/=C~Owvvth|h(o(.m**mȭO-#tYqɥDslAd\)*{ófn6㋢?Df5e ),ؚtV8e֣Xf-=dT*5A7 ɠ/Y bDB VPZ؟D@.|p_W$Kݻ|[=6?Xfʕ/߰dڅ W> B!B!̒B!Wͷ~RUtt'w>|z3VrtkOoyc~pݗ|v׏;ϑ_0 Щ5@,s21:\o )ÃؐY^k`(lݿ`D6'U%$Wc?ޢmZEV&WY̩9#,Fg*Pn}ܕ,Z$Qqì =Nț75 "p GeLlwPS"F81ќAC@E[8gq#GdXPG0kW+`DC@G'A=ؠm&ںl,2抁hDƞ#Y osQh⠛ Z,-Y[nmt>Ww9gG_[[Wky.onAN@{>{>뒍ІMPdԬˠ<g cS@Gc.Po\?=L=tu}>wOwム٣=8}Ҧ’̼Z]AQpې-f9ojd8V>[&e,դ V ZGVΟtp0tG!B!BKLfIB!B[o9srSO8ʗnxĖOm]}~q;/>rO|CssT44fd;ҳS23R*SҪR5)iɁC9HL5 zL6eզd۟' f\1e:3WFħsbQ jTk#ο¢"P3gE˚C1d<r9`jDԈB*Б0" &..0фEy`6T NV:<*&EPn ƠЦމ&#)k}MԳ .1 $ _L@qЍYCEmE WUTmklmlmv4txZ{[::::zZۻZ}-m6g:{|Nw5r]C;wyz=jx<3<Yǜ> Q^i\!gNkykt̟9#sg??sڋK +cS*iXt޴ܰiQ9;K:52/2Μt s\hFSVuc{}J& }:q7AR1d$),nZs} ܖSvu2ZrSxgB< S"r ϱ/]dzǎ[ټyM6n4ǟ׮ݱz+6-[a!:B!B!C̒B!W-~֛(9k]KN[}Кn~-DX$&>:6*6*"RQ,2b Y:e]LEN,ihA9]45@e hCb BQUhJGl`hhQA㳺FL@7UAYƠ>zdwMr]9[:n}Q R*9r64bLQ8Uz| sA& Z@DvU+\5g}Tmuֶ;:zήvgg[swzg:'r\.`i8葉sк>Ntw3nzF=1>{8x>h:׌o|opÝޡ [q? }>o3}d?|HPowURڔ_]qXj'|S# 3M@Oȍ)/} Gb]deh}"C$L%L^t3b6[Ce$D"AlZj7V+f=hfw|Oaɾkۃ6&_bG@y`ǎ6au!/ZP!B{^t7Kk;eB!PXWpy'w/}vc<+l{o<3}{g|g5s1;ߑSQ^cv0ݑf?:_Hf% IiuYHɬM )(4LHOI 0PUuɵ-:>&vN$sS6 $hVe,  .6SiQ2uFGĪDGL!#JE;8bKK mޑAâ E@GZ9[9PLÆwX&^[#EmǕ֎ : u#&P b =M1H2|&>8y]a>Z0ARZV^Q3Yi59 yM⠳@ak^q[QY{yeQWlw6ջ:Zk܍ ݭM}^wGtxm]g5.Qw\pzGs ?G@gx\Nz/Ӱ5-L zC(xC>_utwΝ1Y 7;+)kɫ*#8ID0.|HP̲E@gpoxNDTATT^xT4!&/, "XM=5.9#p31%,R[Ba Y԰hdb¢ ­;5TJ@^FdGj 2Ө%wMͺkj&{Z֝SI,۷߼ywc͚mVo]bRC@{?r!{n{}6F4=TG֞I~-'ElAEBbUд,MI.7|+y!yvm :I~,!vhWGٖPl@D FTqʚm(S@$2ҡ@Ԯ.'-@5jT29 R,Ȭ2ѶI"ۚQ&h~WPj?ږU$$HJ,PLs`dGINSӣEBGQ$lGPE婮Ԓ\ 7Dx gvTB[ J" jr! {C 9v/?Ud# 5**Uu=B)W@]T+eEt j $"{KhWQJMB)3:Ҕ2Jm9&%I' R;C]BNj{.}4%ףtcY?%Db?T #Ec_ʫT/ڒ5oH)A e#TLi5Uk^bz6@Գ7ϞOu$R Hcc*㓫䪸*&c wlXԘTJ 0Xo.> 溉(s*>5p%72F'"2.@Fi"D7%"J:#<$,(<}qbRKbǺOÜPfqX9roa1 e=ыHsBٜUwӐ}n66}ie;'UXV$P-&°qe~<4rD6·CбIeB\ru Deb3s9膌̼&̂–֒򶊪jWmr5xzZ\}g{kw[WGt1{=C^s6y9sFgLo;=NfL=>B8qz-3FnІkAw؉p79G!xF_ θ]]ڌҨB3"9wJ޽aXfXT^ugC@M.f5% ?>jdKUR˳d0hhaQ$Xr%67-!XfkdnH}92SwNIW:`K%ƅ}i;֭f.^ؒ/ݸhɆ]3Us-em6 %>A{ 7֎}1%ޚJH:Ә )I1|H+hR{kt7+HT )Ej 3HP B @ 2`(Q@%ҊlOmP<'W@ Q}R١Tms&] e eIF"=X0Jh21(H'Ҕ2rId$r ݶʣ)Ba~UHTG:H*MYٱT2e.ry&l#eJuZlQjB!X曛k޻+O\ѭ/^ynǛxSxWC/*/(˩˭ɩȬIˬMɪg DVN8waTZu i 攥AL\ag I !)tc*"9/Α_Nv|DǛ{I'W%%U'&ƥ:tELGԱb,I2#tA30Tl9<-pjdHsrJD^DLIL9M[2պ *G +9,Uj%*>a1*몭k4*bKY ƈ2WDƗ`*OysXXfNO[FŕX8^YsC9d`m2Q,DEEDшc8ljp1׈͵9 6 mBvʪ\g]i4 5 7twuxO{t={V;ttzfgxvoy=cevz^gu{}>πECxܣ҃ ߨF:Fǻwv; ܾ@GGoG[Y0{f vuw꬜lGr*cAH _h❧Ddkj܉#>?hyd Ui?O )k'U3LB ⠃Vkp38)4IQ`Z~#ӐI5g-NϺ9݂}d^oI,Џ?~oܸkƝ6/];A@/۴xƅ?3oY;6 -^qUW^y%\vW'okUn`bFFy@ mlHS$䑠C'?)M6{_&Fz_v}饗SPnk1HuՒM-(ˣdDu% $C5\MA $> ɾbb ZDcdd JSIPuF[cGdVyʫ _Eh ZG"HVVuBcHE  3S?z)n0m",4ģjaYM+Oy ]!BE\靯>{{{/>ޫGΞ>pރ5 ʜʜLGZ#iUim~nMjHU'bpYu⠓' h&q6iRTXis| AINMH3hbrrN :̝Ά֗#i1%biI#-YdqxLpC@O,D. gV>j]" m_lg")f]ugxlqM]\e5-cM0OI,9hC< <):x$syuxzuh!%"+]WnohwjzZ|mnOiw{:k\q2'G]qw<|i6F!x\2q[=v #F::cc]=]ӻxF<.7tw|>PWX_Ct z]ښlGjFErT# "bFtA[ǟ-xg"G6'YsMgOf?9cE@j4Zb2(L /[(ن/f-UilYl5 7ӲD@gD -1<zǎ[߰aX\fի-_Uǟ]GV[Kfy='Ѿ}Eoo |pͩ 'T~nb+RV-dHmPRVh)Ld*gpsODHu G;bbϘ1HUMt/XELo 1TʠDcBO~S@LIGHihhb6jVcnlhhZlZFkllɎ`e@CT aGT M\\B}}ԩa*KFX),|K)"dhTy;FGR7**Fum}Rvd Tdxĸ,BHӶl c[&W[Z"#ECYGdKБ\PQ(8*yIUK*ePm]! %'U]1Zͯk`*t( '#y<'TAMv+hHԐtE,RG4%M4-OdTRV] y<WXXO$?UЂlc@^PʫGHiJ(i!ToRljfF늛9:5M%{kY-!3"ٹ3fDžBhR R 5 ȫ+QH)'@C!Bb1A@!0ѠA8`Yc qYk.M2K\ ZM@:KHw6TE= U_ f~%8U4-\> ¢2mb-\ai.Ft@Ө|=mKud;6A[y|Luui߬ +m2QO4iQ4^lxgO'B6>/S*SWNw!h|YQ嬬pԺkjmյ6kju{ݾwY!`twWv{657oLܰq}Vfb lqF|Nxwt4Αў= |]C.o@phgvxޚ梂LV_yJzE|rYT<53jgEE|?1-pNba~E@o{?9Rf5=Ě G <2֒,X8ha1#<5FBG@o~`˖}b$?xU^ӟXرO:Ouvvc/}ԩ v9^)hsc3hqإ[d!\j )yPF~?>__G*~ ؋.`Du(iN=*WwݻwIRiQ;і,#q2<4:B2jV&Fq}Iq 11Wo6E v^!R!  #}7'wTeJAt\)E2EHx]~mA+ʠ4mP@ IpCd0K )۠$B`iӖ|lCFfaaK,=y*W\q4)^t9_Ok"STd)@nw ڝ1 fKx$vAAы/kvnmm{WnVE2uQVR@9t3Ϝ~ͷL农TPV^je"^{.Ϥ QJz! T)Hl5ڲFHG`^{Ymi9і?b\  $R&owD &Dj2(kZء"U0NN:<$emG݄4%G dudɲGw"qA Z2"QԐfFrEE%, Y> 6Y)(N)_RH"@kPKZplܸС#`ȓ]2DY@<ذ[c28 [?py" WN.9ҧ#R9I&EAE"Wyc>*P@],MdlOZ?жwԳ̜'N2Hʋw``M*K']Sf]Mi 1g4e7r!Enֺ};p5bm"$CdH䊄ʤ*h]IlsК!lOmk2ۋ:+UwEinhr9=Vw\>3Xw1uvN5M> =twkI8] -3q Yhh5v:Gag5úfzwuC=}}3q:._owg@`_g@gP@ߌޡnweІN(-lZiQg h>]hE?!A xB ,7 jBmIT5 Qc*O 2bɋS&,8{f {=PN:k C-;R6&KLbih]h]af/A<`SQUUg-7;>p K*Td+ѵ^z9)U_0Цk/J\yjW_KC}vGͫ4~ݶxfDD:5R$Zns r0$/ p%Yfݲe+( !Îzw*U 0 -m:@"ZO|8R,,XVp(!Q-a]#&iiǏ@Z/B\s ,(`_>qlwfFZXcX-r(*8Hե!BA[i (AZ EA(2ձHRD)”QI12EQ##>m5i*2BzQW^nñcǵБ'իײe| #cYMO3ء/ƋRj+_M8pΞ~ To8uQ}]e RM@+bWXX>3Gj(a2wKJZ[ovH)`FGuu %\tΝg7-~@a"{0;/Ԓ"*裉'7֭o~ m!"Q[dot< E)mٺ sqή׍ 鹍I5IXIL.ߨKH74uYTiiT'92:$ }y^$Ut#>\1A:6:Vl[  c &zLu: M@Wp(.$5[31I<]d3Q+xL@[]@n sZK, n, })j*Iq ?j(N0 /F@`Z% h&ϤC͜iHkk.l-,i/pUUyʫeUUUuխuUՍ6gs[Gq9._{=u#>s3{ -p&У= smT['Qu9G;:F۝N5u}wFC=cnPG[5rux;{Z^jiLnҟ2 ʁŘ\գq2$ZıE@o9%bP45e0-%C/ 8%f+W'=}X/1&[+8 n纵Y}s-xxռ+o`]w=6Mv l]xWwoܿkjjfͺhh$&&Mv\lKr͛ڙ6-݈6N};_ZZ~}?]]=l]7Ι3ott<::k4GQmm}vvnssܹGF(b$7m{O~~av{kkFAl0tKQs?> -~ӟ|/yW^{퍇~dU[[Xcc:{X'v[lMc]ΛhykOLѺ7))婧O>twb-(DlADcU@`$Ta(;:\":YʈvudG_&޳ ")BZͬ)5 1**5ZOLf G+^$8F4_\*b/4_3"綴gGd4d0ȚoGFF n޼? 0_y5ȑ#~'?k Pİqձ?e4mORZ<\,f͝;!aLHtCSx2ji㼗"\su,uA'DS!yb䤔pIHHEk?d߾Ċ.cD+t|+ tr@N^DĖD`$ Ą aRO0==}/e4 Tzz&/|ҽ^rKK >fEq]EL*+xJ- `6Plg̘EWpVx0eff7JC^YS ES)E8:m<C"ڢS5^)̉|iaF+_Ė]Ʊ:ŚFF_Tg"D[!`8h1..~Yk0Ѥ/h2Ʋe+{l;q``Q_rCofSَ'̨KdgJYE Z-jay) mذac@!aa´SE"y #̙3_DYB \?oWj;YA䀼EbPG%P7:dC" f̘Ih C&?=d.}+_ 4Z,az m4mp<ܠjL6| ܖ-\.BB![n7TSvO[so?7;_=s|lٝɭʭȪJ˨HJ/OLHLLN]Aw@[Z1HLw$פfԧd[w@1_ ʬ htq 7D=KZ,* >&:m}FTlt2es#hX]$棂Ek@TZXTaıhҨ掋2qbQ!h)-]AHԮaJI[(s}G0Xs"FF~ЁZC)@MOv/}&>(1qK$4-vRAU"9>=1-139i*ORqy.{;| M@wN74w<:Z_a=&E:c5r=cNװmv?3lh{:=]~OWkKrv67kjڊ:]_[W^Z֔_ԘS-:&HM̶`F8-*WM2A3,XfVN@4H \ݮ&ԟNE=#RzͰ ˆ86m86 zOg=-#k;MoI,nr`ZvՏ^} sǢ%lz\?S:זï~uH~_:[~݉@T>/ʞ=Oob~+xb~ȱi6g?_ط-6]t?W[GT)m,);^x =wW^۴in&N8/2El,Z~wD=6fى˿0iP[lzG[ణ~W׊u7lبASՖRN4bc O1'YVoɓUkt"J:k$.D|?H[=fǘEԩ>zZE(ӧ#\"8++=lيC)-+u6 1'O| 7oe°/D\}yyeK-o?C-vl4ry("P7Zp"Bkk;E/]OL<7M3mzz\bˀL4ԩak֬{?088J!L gE`85Tt8OENq]~@a!\k׮?re]! ݯeqz51|QSS NA-Ѹ{Ƃ5NpiƌY^҆KL),m>ر[lEHQCCٳgo߆W^ߍMӣB`\(%aULҥ>ʬKJJ"`*~Of3ϝ;_L"Cr`)<.+G~Ff8 Ut3;vܹsٳ/'cĜaĽ _qULN<@o/?1b-5IqFc)b7XV>,nHO~S_|WYW~^_4A~¬52SR,"ky],&[UU5zkGc-)AձxR^AL{q޽XzO?}Fba)}uʖ,YF-Ƌ*IPDp7KRH[g^{uҳϞ.{z믿`6l,255' ±cO7(]yD?doܸ̙48O_Luʕk$?ULZ XZ2LK_Nf5k$DҁAܠt!-EG2EdL,J%Za~ىo޽ãhC| njRZfY?ϐ~;p@OBx STPP!{D9T } X0IT,|gYibiygxQQ1O1{/ \>֐?QjѢN,yT/Zqq "іՅ,~0Ș:xWtXԵ<$B!/"k+x|7=OzW; 1}d!7>#Ǒ]QQQӪSRkH&N@[tN. a.k3kR*}NͬM! Mʰ猺?N\o}0>NfA4cLB$u_Gh6c谎9Bc }tmES[hEԭB-HԳMN5)ss\ Θ? Jɋ,mS#+DL-]?52ZLauDbBU4N h\nq ēkChŸI@ Y3ɕI ɕ%Ӳ* t[i]V᪨rWUuT7V64T54:ZۚNO[Gga9w[;\H@dwzF_ ?qih!w|e8hR۰vP{ۀ9z=mM._yw[Q)h-l-/+mho|-ʪƬܚd5~XTlA} y$Ӣ i+ Gl*>N#X7瘿?1 8h-p-LYVu]8R[(i{²D۬^Ld^vo<z6w[sڝWXrۊ-[eђ d%=}3nmWaAFwq~;>–>33 v?gWöv+bvhll~jΖfݏe]}cV+O % *؅^~Rxq?mHl?wHTy.PvYOZZh.w쑑nVkk; /-v*UUұMܠmm!:d/J){7>1W;BAxꫯ#Œ 1wy b"Z?tm0Ą.ypȮu?o?m{e_|J4/rZa#v{xܣ(jkxͷZZ j <<femf󌜱&HL{_@f|ɩG1c7gw}7xx~_żzsg-z~{ڴp:B$)z 2<7G_Honn%Ԅ_p(ʕ?TGU@ڵ;c ɉ]``.\C>3ked25^3Y\rfU2o @dzs W~++֭]gϾ ex'`ժ5Zjj:k`EhqO&˖ E mv>ݧ-IhR5#$Xb0~m޼fRR 1d62EE%x<9rQ]f#NhHqy AUƻO7=5C@/&&=wen#.:bXYĐ(qZ4cFXbQ:X%&U'tGΓᇿٻwG(UHYLo}қny xa.`ɉ2%xe‹>viֵE4hH?HN:-Y8,[oM|:q…XHDD4+8|0 /^ʜCVo9eϞ oo~K6mO~J]cz qǏ?' _onP(R|H0%5ooˠ&gy|5N 1Y DID_9sV=aٳRɬcC>*\K.RD`qdE3og,.OFӢ+)E43|pxe5&$iDΥ'䴴 QdoܸЖ< .i.1Đ'A~8x#1x`$e*my#ćWʕ)b xW7?cwP  "I-zRyV~9q痝>n6nS]""L} X,n?<bwӃ) o'SV qugH;p)~X(&u&m`^UWGExklbD)cB!Pzn{ 5%;vp39륓;Ϟs^8kskҲ*ӳ*S*t9HJw$[b: >'bҪ2jS2S2H3@lsszNUݐݐU|ús&>:>%p9"gѐ6ќnED@HZXSemq) 6"c+͙ :*,9֜\XZt4#9Y0ǐM@ 5t[W Αֶަ֞6gvv{;mno{wPOPRQvW8K[ jK-҆ʄdfȸsY h<"ק-}\K- 6Hs$sNMbȟ$bČ5)aMӢFNg{ٸ "E0ͣ.Ճ"8~lM[]sͺ5WzlʭKoYt~t+_ k'`"8gv=-H~:x;t'FTF}饗'22'1"td4xTgqkllmc}}㷾u)).544)P̽1a0%p"}L}}`Yo|[6^)e4?QfA1a$J}[ ɂ8Lsn"n51|rj:Ųڱc'#}ӧKJJapevQ/FɅ-fsϝa^K//}|@J<xp?~ Wp匝 mj,s ^_;# 3RmsEdR&}ԢH:-ۃe)ܐ38 ;ȉrEE~:AQ0I2s޷:t,֯t䤆 裋|]̺;eΛyc %7"PPPDd{ztu .\:y9sa̙zzzYĐpaY>--mzfαcILL8>y 2nػwԩa˯X`>]KLL$\"CyDbE)(L`1/b+32 xc(hW_ h/d~R ȏڡCGX={A(Zlb~+׭P]]{=S4Z @Q|cw@_\->\ 'T( Y/&U>i/:<EL@q9^+~q櫯ΫP nƠ031 Be&eLjQ`>mݏ+iϿ[T?%ÉZĥO?!cD!)?FyEpqdSi>j!A yI^,7I}Ì)">čU䩎  B!B_~p-?>؁=?gw][6x]9쪴Ts9FeCg!n̵ 5s}JVC2:9 -)l_e5f5 LML1DsJ?v&.ٜqlГA 7ÒH.b }/&:*1p9:1_[*F[uXg bv"-RAv-L&ºaðmbFN :.AEw 踔h똶\E(nDt50P9DDwHcc0*.pbDžǞ{87m 5ֱ`ZtJVMjNmZn]zn}fh)l.,n+*(l/h+)o.-m(/hjp7; t<>߇e>95Ǩ1]#Agsgwg`hppldxgo`x /;3yVO[YQRXVip[UU% Eʤ"YsoDV0}!Y"1u) p&͵: Ccsa(G@~p#a1lȳWa#Nv|;&}{]v7 YbgօZ/xOsVx{y֕+WS"E<[KX h ?A"ᑆlJJJ߳]m6l۝֋ ?dJ񰮮ȑcxx |).Yu6i6mٸq35GE./@7;1vٜOuvZq߾77|֥t7***e7EUGKݯ́3@ cciR& %$$?`CɩtʚxM {ٸ<7qVytkk; X ֭'W[t RDL7>|+4F!kjj:s\< iMXAn##]~wyFKAxy[l">cC]8_z{ ȣYRRn8"OcvpM+V$Kx#>0-ؘZh [C?LSYw(_r%ã2IG~18LXm+ndT: D1_gWuOSDI[ť3g$'jR5{T,0\&'!yua. ‹O7o>K}}gN8ߵ3g^{p߯/ WZsgC0?\K!GMCk?dmaæmveF}7Ξ={= QtD)ݡQ .]oסox?sn&3]-`_2PbD&~W^yullV$D[Aqe޽Hb Ў;yHC 닗9Sn n`|ٲ̉VcD_"2=D8O={9RV4iGUO? ` $1BJ xd|b̟'<~JL>vbVhq}y3_E MPL"4n3Qݽ3!VG"J 'ا>cл 9YUq f&&}§5fkEQCX#G7+JDc׮=C?OEw~>j@F!:Bo[nM7~[p3Gҳ*rk3R*Rҫ,<?|jNcJN-:]o. ںX#@@dFuՆT6O"1esFlrU"@@sU6Ȇ Մ a,:|#cAa %=qٶCFBsx.h6ӢAj/] hm1)h il[>\H@SrDl7 .8A5m}2 h M[_U Q^H@+ՈfYL#%pЩ9u6tAq[Ai[AykQYkIYKIiCYIr=m>ozop;5r ݣP^ o: 7J sgV(i RSſ N%1<z6޹zm^/&yopwAB~;mQ'};w>_zQ/`9mZE`9{;; u6HT- [):*~ԵkS_N7fx͚ux%Wry>Rm;ÂO?,jש2$NLL>yNƅGpyw[^^ttwL'mkFRFF#CAER}32D'^?]u5|ᅗ!/+ յ~2ժzH Mg/I"\8FFF3_I/FFh6pTfhNx'i~ԃΚuaX10.5EHUk>r饗k%شiGU"~9ǏuPgP]Jǻ 566_reUUZwn! 5441mt H )#HEaM,Яz:NKK۩S}k~ųD+'Ox|t\%I@(H˗>|_-RY7kgϾk7y cd`./?nr:hi@SV[dH/0 Zqq)y ,ҦS)e43pNjK'i0c{z׭;"3kxRĜkN}^LJ[;Q˛3<ÿ-35)B&XӜgVWySu<>a eqN(⭋AΝyRd^p葄D( )P3޴Rtd/ ,JKъ% hi yWGGǾms nl8?i`-Xm-\鈖ҥQ}WE)?p|| 'TlAP.Yl}^`Ki$LWŪUkw.yy[ .#S4Ğ/5*(kʄscI8 y_Ku sFxdLYPxK[oذq#ϵ`/ "ZWXE yHδ< E׿=nT]FHq1{YAL6<  hzM+/P>M4aTJ!xכY #aphÊyd-[,uFP,$$B!6o O=ؾ_>{=:.9 #ۑgN@gVf8.$3lھRZyY ٍg7n:>%>969ð еXOv%W ^H@|}Yl!?+bT%iSSXTaЂh"f^o $ӬOY ds\K"b؝ 57o -Z1U)C+[3+m}!ؤ$8p&v2(28d0EcaCegRQ0GA_H@a#9:5&-6=.+1%%\nvzZ\^8.W{lsv wu=1zr#NH{cahwxWXWא1<+i};Wy|żn]|ߖӷ,nѬs?2Mol`H?{{}~=9jwնԴV:Z r陕)q :MN|O.RS"c965]vbuI/1 e2;8jX Ty4Bm16kMCVlߍ;MHm$KI􁍛Y'񕫷/_ز[,ۼhG53of6֖ q0lH/kUvbp /୷6()lu|[G3f&_RB#۳:"{(dF_WcwyB|m6ie#ǎ;}Lu#hag}FLPvXXʏ??|!mgllQ2rC4^#dxj#πP@]u5Zwl ?^& MK!E]]=M qq MhuWsϝپqhl 5{[SxǎUW^y< q=Fg9h_7O?]ueѠw%J4Gaa7b.t_j Ә&) WZZ6l^Eyoo?k_F{P2F_g|Ф_sabbO>9w<-6nt12ÇWT-ywY8@-PӃ>s?9 TzZ /T (\MSS ~."++Ϯ^jedq|>F{:5/tw饗g_y=obw }g\)yd V^s!Mot 022VTTtbn0 Lżݼy+1ZZzv;7*--Y+V>B‚8C酠i&c7{YtK/ō ϙ37!>!+Gc^h+ ;))YD(1uFo:nqly M#=LQuEO', 45믿qıcO #C)3z D͔# q&tǎgΜȤ/J UBZ_)x:=pI^4ĒQD] 3ׯ8qr^x%uw}N@1<9[_ X|_ICQ 3į 2XĄT&6O뮻=zĉhĊEWd<8~(y+hPDFDDQ #ebuu-ȬZaQEWp\wcjk֬/?|L /2m~ɳ4X<>~re*.1_ JWiW) w~sinŊU"1,:tHdd4nF̀A2Ku 򻓛A"OgYJLWt/_IQ|L1iZLQbޞ:u,j * 1f:d0# _{ Z]&Ybb߅[᭦+XbNJM,XkM@KFO2D^d*GF28OͥG,~%ayxl9hC[N@XXou!+ @ŕGYAfn@-EĞ2zX %3t!3rs'&C@֕VU5T58};foc{ܭwu]]6CCuwt9]א5v;ΎsK[_SSgsSg{k=872<066< w{F{dά ϝ;Vóf,sf.7}3W.G?%ؘ!d~L\ [ӷ~'ڴiyye?X-v5I7޽=$b;0rԳط28˯wn)콟y4.Z?WҮ۰;| Hش\79r@osQQ)] > `ۧzO>eL)lTa#Gsto`\9Bkݺ..{}wۆodNLLf9kd{ zGH~c Xfc]'"D?ܺKӅ?-QcWe͛2p6z'϶)D[aaxvMAcGj]AWœM0G'8Og~߾t:snzMOѶm;^{͛O>mr6-L7f0ʩS]c̨-[cqqd^:uꡇs~t?{$hLZw"V]]*ci< RTW׀3GәKE4Qx㍷>7 *L'2KFyH޽y-[:!vf:tLLo2CW\qichiigVy 6mw_)fԕW^Ѭd{H$~?`ǧ3(EUWٰa#'vɀ3w1dժ5.ho۶}^k̓Z Ҩbo?cuCM xx}~oG3jݺ XAO~>o8ɸƍ!d>0t2 khܙռ7xb{ĺcB[o.eөy>s@CbҲoAEyGFF3YVeffk֬AegX#8'oA/Ek׮[hkK/ZU PCd4pZ( {{С{2XI^[/F,]Us 7/u~T׿+wŋ/bJVyd}}k`:KNNeN/įRZZSQcbH>ȣo3<`1O{N |JM rCɒd8x?4?InWu 6yAaƻ"gba üF)USS5u?.˜⇒=!lE |SYIDAT{d0ۼ ~a)jjjZ'3èo~⧄w/ +X 0oB YO>-]< ȋ0[ />Gd# uHt !;yC!e~ /uDx TUUHMMG+vC QD8vi?(-:Ȝ߳g/1%b_-S h 3M`S]sgWmUT|e1h`XU.N@Q`m6^uN@:1]\PZXWVX[^PSYhqw654w5|M6wvyܭ^wkoklmlil5soi# 3 N56>clv{g~7pkw}tb')v/pm*B[>Fp^ؿ:{;wU[Bc`nBQ\\M34ãE [?\72/8CttjaDg^o>_gQQ *hEܹsuQPJ(zzl.ZDM3ZU 2:Q6»`Ñlw1H TnnMBzcl0Ii&sU(]T ؾ} 1W]^FP_y~jܹ`G5 魯xܠD~֬fK~o¦uww/N]'LH:J):(lMȊHK$–M<ڵePDe0y$X_dd8Sτ!dhcᗿ5A 3gnjMHHB5 N%{]l9j:Ew|c1#35Μپq^/O)"H=Gٳg-wx#g^V.GH]*nFs#BpJ-744yZCU?Z8IJ`5Hzv؁"DsKxikEP03X,6c j|oQ#,~9Uװ)ecLftHCؼӘ4~ӟ#,+,,úweDŽ?`Ca֥8$ &:iDc`h46T BJ]*2K1d4Z0',='T"ę8p4:522CCյfΜEyҔ4M^k׮gUbh"^/d)cARXa]v?DiOf>#}@H8!'&GѩGY ,Yg6C#ubrjf>+HXs/޽O0dTQl`ѩb^a9X01 Ѡ_ְryQ4J/NYK Ī7X*eX\N7pia*2YL'# b|GB}(T hLI))si3*x I 'A> Xhk#Gy%y"o #4Ϳ>w~yQkXh.؃S{Ry&StٲKCS91[b:X3 # mТt-Vtp^l#T1e6-}8hFV4)ME@'WgT$fTڷp䚛s[  E@חԔ:jjk껛ۚz[;}M 6O+j:MOKZW}kAnj46Puu  vtwuy:._{x|^hlk;zG;LJ{g =c`|h᫫(h)(r'tVac ]ad\aT<4ޝD2P)wO3L`}A)Æ:yoxC9i Qjk &,]5BAۇ:$ vrR|.$#6&_b|bնe+.]eM oxd3os}-mk9'e[B}# G6_d"E-\i]J]4 cG=AZ׾qeW {J?@rְ)?D"@W]u%\F[HT:ȯZtM!pFj!]FA~b^suh#+Hhwmx"ퟚEHZVgd_Ers_万>!Sl)!RVPi"*R$WG`5csl TK/Xr9I[zKv!n|[R]!Z}丁)M(PiBH- R;4^9fD9e5y@*7!&ݤBUWѥRfOW_# r9K*h5oI;#q -Ƹj 0I0׊`Ƕ#M-@E `&0GI]k9FRJ-BG41'jQECTT/TGA*:y0oX#,c i"Hp!p@qt 9 d{(U S!G ȫqˁI@Œ"TcecmFYŽܠf5HO ErePJ2 FEUeZr"Š_ՀRm)Jȩ\NRJp"Tj}EB![Qʧvo>ĆwZ53<+2;6;&;ۑ]Qa;HmԬT#s' fN6n :Ԓ2AZmbJ!6g~V -:ІN D.mQT)阢hEPܺ\đ;űh\"i .;-@Ԉ|$vh_[_tsT`tQxlI0_*"+u t+8bSb-k7P 2;*& őqbnoțdVyd 9Xq\dAt0-htmjE|!2fЙYمM9y Eeu5e%u5ݭmW[ux|^oq6{< FgSCG]M[ueLC]{}mK]]k}m{]k~]]޾NOuvy>Wtz;{>lkw9;]>p`op_P⮫omhm+hjtT776:𤵲>'>;!36% *!<6Bھ>,|J4c 6G+5%"p fpq4"2Rf ˾{yg6lEqǽ>_c'xOR{. j8޼u{>)zN m{o#`ߐY*g"wS.ZG)(gϿ"3iGGYi;"+G pFvБ>ȈԔQ)B$TDzATG""52rGBͼZQ`#njI"}4d$OSWyedP M@j5M[jel葌23G[SFPQїU?#ETKy*W$o T%qoSYPZb!E߮H꒒DjPj<AAԴ]KNTQ%G4Ime2˔A(fHAۂl$Wص&PW)UkS>_W_\EvIJI#rhCG GU(H P񪈩r4EʐI]mG2RUb"=;F_]#>4eAY %q$ ry0H4G,K_eG%lǤ~IR`93a䰫u)IuRy 0#at3SM5q"\$eH0ؠJ)BH5"AtPP-eJSPP >)H #@yƚtj[BHM&UH**Ԯb7a-7h]I25 /:iT޽v_ߩR2Q)QؚTnUujTHo,2g5d?Jd2a B!Xz+-Oڹ}Z˛_WU] 3RS3- h!h}PsMr:t}tf9%>`YQ jSS⓫*c**':RFh$ΝFbhen֣-1tjD'XEtpET|y"p8+ȲiQ"mi`aIFOȳ h \DBL(Y05`a%DgbLqc- PX0LzjulEF'SӨ@ݰ" 0OXۊ0tqxlqXfQ$"soxnXTad\ILB!cqiA24u/B@:9t|jEBZECtzv]F^}f~CV~CN~}~ACQaCqaCI!Vw{sy}.jtx] TW6:k*LZZh44t67v]~stmk\]r9<}{ͱnS]QU*)m/j-lk̫ȭ̭ObŁʴ̊ʄ䲤ʄԊSr!=m"!c psl0[:QE@L̵ ` 'L4-9[' 2AM9ela8'8IFTYFN~:R=_VG@oĺ {>\&-?vCK\j;+m޴c_J=ػZ5_!P؎xB XJ~tݺ 7!|>dII-*N0NR!Mh^S9~twů~5BB0Xxɴ=3IA!B_,n7tsCCɡ'7۽e}ٹeYsU:rgU8jR HΨNa5MhHjLn߰鹀 :}z:)ݺ7ʜu.ܰ8htv؟ʆ5GPd k} e9:&I#6::R38ai#.)]6 ;q='4t]Kj6-E;E14>TYkq&<$,É~lu9-8b|T|yD|iXL"CdO4cʬ2(ǕaecX𘂨Ҁqn[QBdtaa'4>|G0ZRZ`2ӲkSk2tvAcNAcn~S^AS^as^QciySS{oGzZ]-MGs9ZW쨬,uTVW6T5Q媮VW{jmhnumFWSt7c.z}oCC'rrk3rsrSY_ds&121$%$%R464*F'ТA]SӀ֋a- ۰8O y&It.wLv@Ulږ}<7x/]/P0CL9T ?k*;4`XIV{@|B![~xol^쑦ܜ\C@WgUgVeLήIh>!|-p~FjF?Yi4hc?g46fץd%IՉiygg@l2ip~"yT-|!dͅ΢k PnQЎؤd;~:w -v,6 PCTQ* HD@sF +̑in0NgNF/eѦq1%2:asۺ*Vl@> Bd5:A@i3Nm/$A'm98a]qQZ[m>S[[[gKkmoN3tAISEep8:wCY[Xo55U55펚*GKEeKeUU+Z*[J s KZ+jjZw6vڭ=݃]}xp@g⢡ʎҲ¢\k̩笪LG7W b'hC=@D@uZ 7z\um:BLmߍ`9%"V@.숪#uH$"'dm碘~1޿nޕ+Vm_ņ޲pGusz`,u®@WpKybolnfm! 5E/ #EFBY1'XCA&$IwKu'. _:GB!BpTZZxr kYUW ,ΘL@;g,- ls/GFvszNcJv?R ilsgsﳡE@suXc͍*ͤhoksБ(]ϭNtD'Tesaxɛ;Gl(ڋkV|ZKP@3pо<EA5UA"}ˆ}vD:ҺlT9 NW1>pĂQ"ugtXLhP̑C6 8 8sd:%&5eй YnIok)l.*i--()(pU:\WmpV;:ʫ**JJZK[s ڪk\-Fw}]{{ 1?3w5UU6476feTR̝6UIt*ٰ:hnzʣkqE@$#Et{]4}ۏRwv`M\A+S#s )c'Luͭ2 )"<9hTp,|N&_bG@oܲo톽+V'EK7/\G=Zг\:G;cD((\4ۀ!B0D^ֈ>k𗂸ZRݏBy)swfJYHB?_/ YiΗ r$B!/R23Kr3+R2+hs:=ˑm6>׈pu) "Sr D@SiG[4tRF hJ} ɕ5xd83[(Zm x?ѵ7c c#EWFƛ' lC͢h h"8ˈ ɄE hk!C+}X}^M &QMC9M>zh먵uusDtj!E"}6l(X:6lYE@OE@4N" cYU]]fhڌtהߒהߔWԚ_rKڋK+ڊJ[ K*+;JH˪%F%%9)1).)ohhhmnijw M{;ZM:gUEKYYSQICv^MZv,f{UR:W&W$W&gN>MSGM`M546mb]Et$NY[?ReWG#L gI؋nZ$X/1#oڻz嫶-[ [be]х~d݂̝jf?t} иaþK{06f"t}(,B(XA6mC/"RQBdx RB`O9 ZO- jxͼ[5u\8ǏB!?M)̮LI+MˬPU%y2WB{i>ݜeԬ$Y ̺LC='`YyǟS*R̗<b7'hREǕ$^ᒋIdZTsr>\Qa*( P ]]8-*9 $룈h d(ꑮPv/|&g`09cIݒZݭ@Y(g scMmq6g̙3ᮙ7o~UwzzꩧMB QNFl2ExӹCF)nw!L_'D=n 9h.HdS< ]5/qd% ,=5*LKnhhs'z$>mo95kNsN!uj=gN{9;fn-΅.4ftl?w fΙ5sy/dɒK.[ys̙5ӧX3c ܉ 62 m` 3"}׃v޿mܳi]7ܶ=ZjǒoB;zTMrAyރ`kmɸC$եT@^),o"vzYg-ysfi%s駛zŌxVy947Gtvr"ӛ Vi9H@J0>K@MQ]vHf%Zg$Ah2o΍fH<7-it,m9RfJMAjj8U,T /6`l?6c!%kCH?7:n@>V lX]w2ˁnJM͕1o9X.UdK@Sef/7%)* *GƳN b$冀ױ1Xkf/*n v[3L @JQDoq4(]n*ZBEGCcxrm h2}_,=`/{SiPezezu8:iI gڇsm#&4g:g;f;ftɷ̵3#kw\H}ĕu(t DEhE= !ݟ}vPQ@`h}vD31т+OZQ@Oc hyc-WT`.,w;ع]>LcCw=` 6m{æ;m+zK._ đyV? 1u!UzA!l⅋`"׿nbn-H𷄖3[BmTz_8̸]\΃珥3t_*79ʹ -SӀHZ 陖Z lIlllC@IJ$[, Ng.kh6O}6zIL hQE}Pd,=-+@0g>srPaxd'1DM _wchw@ MS{݁p񻂖ƲM"}͡@WVN?) j!8Lehh )ICD0% H7 E760B@|HjJA:H@7 ] S@7%h6t<;X{YހMpn@M'cCiuNhVҤu0bx'D{ĠJ1%Mci%Ciha8]0MT6" ̝aIg}ĈuP|t ۆLH^5u3Ϛ`ڴ9gL70{{f[njB|P0Dd~J:?5e#oϓDz fNc+c1]āJ77EXSN0](N3t hcaz@ڴ{,hew8` \>kʗ9m vV`0kGo`Dc0Mt{Gs7 BX;-V~Y:#AV&- DK17rNДd2Ctܣifm }1i&qhrkV3-lBvD Z;nwS)Ђ?j>G(ZZLz4 /85!^cwa]#APDjbPoP^8k%cT Ӆ~4{}& -o@3Գj}m >{ڌn,Ʉ. P2H6nUBhjK}a uXðTX[ƙe~[5\0t &sb&6V[:LTd+|p[6dP}sFk#`f3lH a/5(םe7\eJ")|[ nIkJBiV wY~:XD-(''եrW嚨D@UN̡谐T*QU"8C,Z!ymȶşr} Ճß&h0(!:t$Q8G@XD('MHl;❁!a^"w_Θ(CF{C1b&6K8ֵH@^#暳 hȂ@{A%^%ѻ37  D@Ӑs,Gup/i9 ~xpL*r3Wnz_!m,I|&2t/)١b&X-]A@i)b #\|t%*,+й wBS"eZ"oSRtn0bִ 6䧂=b4PBTT_)UcZ[ U,8ڔ yIA2bZQψ SɈq|y 2TO;ˉ]h}}ƓĘ`]=8T{n{Dt9e=6߱~6޶+\rۥI6Hmfm4W< Ж}>0m?gƨgG@LH}hs!:Y8 JT!!*#rqs G q\N@[|Rώu5Mb )7;L]]HРHоPG%NC@І}6XA{Y5^Z !MB{PegÕ1M rA+ 8h)7Kg۟.'I}rt.]$u tи"|A~!R MK(Vd\R O-@ܳIAS21bbW}OOg\>G|9]+3updڔP~ZEUt:%2/[t8ELS}VslW}|D@D@o~#oٰW+z6?I@.:D$Mpb壋 h ZvQAsP|0hP",U0"CɡDFUnoY@&b3`oL7Xlo<L\](64&dE*>~ȐeY:nPJlyD@!i?h>إ-"hn[{dd9yy1`߲#Jte]Ŵ%`MBG@;ZډU4TFshn͆D.\vwoWԳ &̤[A&"GG4##ZDzʳ^<`j 4)!o|A sۣ;v?}Lu}[߻yݺ|ˆZz+^rMVl ܒ2巹ECqJj.h r.U4c¢eXWgYq]+<:H@ڔkTh@EwHѸD4yw1\qT]gubn2C6W!o{ݶalo{v".a{7mg6mk&sy[Wٹ|˷\dG@{NnoX *h h8>`te4>tp%pQ|eKФ,HG&xdR._N=K^ṕ8(4'}aCCo. EY#P l AT)hY065:1&@|({5.cK OڔM"#}߲ᶵ\k7-zBX"RLnj`@g pmFK̖nͶ #iY7Zg-lt~ԠOO[$si} axHr0j 0%*]OA{?H~@tr(n9hh.5lhO3||Z cJb} iu7~6: mB-}@WS1ha#FCtDmxwX,yRs!zX!i vӶI`\;iA|RgZ!`r`_aA;@f,6G+z,q"X"m{ lHN: BPg %4 K@Cp.}/n3DMvԳK8K}lR{CPvmà u-NHgZ;I'["'oqӤU֥35ZKVgjǮ3S*ːN: CjQUQXۘkԳex2$#1wj 5fu=2f!țmnn 5jQ|q_Ճ; m Yw]˗馭\zsuG@{b4_\ea_pХ;mj{&6a. jy5;W#brU.MˠG?j-Kns$m`/l.b&5"]'OaS0㥫ӊaqPhlm!ZdL>qR .2Wyg&_[4 p1no M`8h] A I}hC@ LT PDذP"bC{H  L A7B]u`J7 +=:!Tץk jj35uںL 5)CCr^ښ0µ|IhѲ2թrʻ^(m7ZEfCc;R+8 alX*L y$U wDm5rP}==}׃+Mw޲o[v;-߾͋/^g\! \ztDއNG3ta#; HgeD=;:/-8wvJF8hShC p\$pE}~K hBt +4z(ϖV671#VE %4RkcʆUҽن%pcrAG9*Df;k2e hyLf7cp}%Fx_}>m?(Y$6R# '#A.hh1NRe;G^xY5(A'~ m×@"ks^eId&,)0-݆.gWK쭃hhReH@O)rE.#6LSGpRYL9 [F@I Ơ &eKSQqzL^[\2@j]^;¤evzܬ'j7q!uև|@WwMw]ۚu{E@tnh]tG= v/=H|0TkHX&}E*'}aJ[>EVŐMr &Vew7aqҪS]ɤkW%5 bu͇ ezK7%Yd~}m.XnBHt4[>ۊ#-1;uj u5\*оJ_{t2D(&V-,-_C6o9hʤb]HR\*Y3YmJ!ʌi!ˇS-`iem& a3L^gފ?nN_,CJE:;ȢLjc{3@k?P%mi#aRF\hl.4, ҙTH@;?:/U*8Y'b8Z;.`V2Ef`]=8ް.kF*#=xhZ 4͈-Jw1`F' h][vrD72 (W2Ngκ05݁XO/d憒h͵n>'>19/ P1bxfZ45ŰV ЁvUBժ򮤺A‹&5䄚q,]jG:C40 Vw),q@3. }.'e]s%Q9A:V%*e9KWvR>q,ڂ'U[ ဨ`]=8T[wT շܺj힕kv/[Л<ڃ+Uq ']Q|b h$}_$c̟ -hhs%ṕv> mD;VD7W\@D:#]pn=tel9ٹ9m= ;_Lcsn=2+2#Ifgm%ZTfZαV[t¾a7&p6hƤd][5+SJD@WШRAe&Q&a#u̬h7ֆrYjݣ<ܣ (~z50SЁ\ (G?}^n?\{]O@ cr)P8ZtGRc`2a %Ѝzn t1/>`OaNA@6 ,oaT):hl2/AN4H(t% )w8ZԳ,onmln+z_k]Ef"$#/)ZlQ$ ] ˱I9,*xnz0k]ڽXB` z-]]sss23vhMFY펀gy1cha`Ŵ*9|%r(leE:Cg!Kc%pR[y`Yh:8کKy^0 /aJLTt`[0\Fq@T!w~pA]5]zU;q[.|./ <ʟ?Z{"_8TaRiQG@ #Жεɵ5ta('[a4J(t )ןA4]h۾Xf[ߘEJ'Z {Z^XN7*ȋi)1Xʜ6:ʁfR=jzT/ʸHg kRg1v<,[.χ`Aaz瞇6oO3XЫݺ|Kozck_;SYgկq淊GR99SOG  GOYYzEtHy ni4i,ek]QҖ}6!8MVő(E(ԁƖBCs#u>P m8!hv,4Mhܗ.>c H) D}N17@*}GÉxf陖\\Ǭ\|ι٠5/>;N䦧ZF-#&*t^dvmVpր CԔDv(]5mCP"oWgoLtpVE" DV[ztS![gd">[טM-٪LUb{9[Smh2I5IՉTmm.]WknC5) k,jMyPע] g,j yT[ٔc6N Ǎ;O2 Ћ fraH5T!aT!&'|ʱN?_rN3^[h:q4|댫8 XBO7>~2үGZ?PJ'yՔ1Ԑcp_E!fH A{;P׀"C )24ZLR(/GLjՄ\ %*2"GRl~QCJ+LYIW9H@^] qVV*iPagɣ啑fIR$F f[bwqPBUIs~ֶO7Si LRbGByN6u{$,An$Xmli#d 4Aa2j%Q*ä %C,\Un7#RQ!2*T p=j7Q.l et B"eݪ\;ƼZ4K jK2]* PHHWr;]+# * nPj<(@#I􀐀p,yiS9P=@*9{(!IӠ&P 3:A )TsAFJ V$(%*AXϼhDTcfK~ iCҾN^&dTˣ $&>S-ÙLˌ\aVK|Ǭl .$G36Ԍ&ynz,;=JGW2ܰyl@\;hve4:39=s)lΏ&2ӣ溮!1|xWQU6|D}}iALmc.S]FDekUuI צ'e&gs9MښTMuPI 5+/YΚUA^ fAޯzݡC43}? ʆyT4bz{yͺ+V*XwٚKWni˶pnxu/vҤDrXu)u1G}ܑGsGRůp 'xGqGM+QZ"չs9*HBV4$uܣ4SBP#"):%dĶt# +_9*J0U(D”jH!J@ꫯqPRRE1~U2r+JtPV@M4(!?S;SN9U! FS(ɨ R Pj!jHW{"nK2<:#s瓧P#b <hJsH(K!@+MG˾8dA=^7>Uew'֦ܧ ]p jdu- umj ؐߘؐXXX2,1]SjMlLMM17rU -ܗwV Z21X[N^uuJ܄&._!-@mfʷ#U*DU]EC@ovM&{n^}`7~Kmmݸ6\}-^[UU/$w|˚5{ۮ]׮]W(QsȌ]l۶kөhHs;7R#)P&IuBA2TA9`2uu=jyh&ZP"m2Z)qP.@Ȩ ai*#/uҤji&%僥HM$Cy ֙s=?Q9uq;/w^z;VZp`'ӊG׻쑘kx@ bŗ޽g͚9@#B9b< "\QHGLjll9s66˱.BsIՊ&j%tA*U UaU`J)aԖTVy*p G5k qKdt<M$s!#SVJGR3('&*\GfHԀ.@pUCHaJy#X#QwdhQ(Q@eH%@&UH*x57=D;#`De O=4NiP͈"{՗G4Tޭ˙R˛u(D GZ4p*'S2\/*QH3yȁN$d2ky)`'Bt2+UW]ӧd6yIQ}HԄBFMxCD*ɣiٰa֭xC~K9;;)QPZ^HLJBc)䑔G- /؀fc]] 7,mkPJ4 u$#5@RBx駗dW2kҦ&F*?5'5!8,=/ FH@B?(4tzj"3tb DfZ"3`>.!޹eb!tr."Q-Ն()г>*E:fzV^j(rPVLF֨O6SuTūkUձXuu:QWc`֧QRע'''զE=wh,T I!Iw4͌Ӱ"aZk`ЄA"#D4+3%,QĊn{_[wܷa"oZۗ.ۺ| _e 蚚z9ψ8VX_^x[k#H{>/ _'s@'7Rwt1Rr뮻A J'~/wLJ~x1I330P"=ZRHy]gytDpszWWʫ=HGGSPл"*ɓH9)y`tpO>Ͽp=3TQ}҅z%EXrN8IM(1c֏y|)#tFM~#駹Tl;$fSFjB UBhj,<Ex5g5h:(wbdhE!yF!{^ Mݑᑌ AZeG@^@G:eHJ'ȼy|Ҥj_@:)'U.U>p*/ (O(T@Pá< SPPzJ)Of)R(wh6#I%)/a m.\?a*il@\%D泀tyt=*G- )'O8w2G2w}\pEHՋ l Cڒb*aj?G-]z~Aww/y*;z"ov"A^m$߉|o bؠA|vz(tѕԪP@^ԑ I)3}O<d $ƏocO/#UdN^PH-Ӥrddj7m[4EW?rzT_jHHFx Q HiKɟ l&Xsnkɶ 9+ H@'L@Dͅe9Xr#E:`|~?.A'QN^_H]?kgiY\g>h([C4] reLq&ѩ-oB6Ǭem ,um">M|oLhhA ]&6jL\8n1t\CchPN/ b+P n48 +}+ 7UMt5c"%c ɴJ)wndZL`Xvz43N ɼ1T]^m6T[h2pr0bâézP\e>z,φ4&g'զky4 L֧&67$&%&֛k5I'.hI UIUщd&'NVW'3 LuujRUjR>TF$ݿ.PKRy|vG#H `7;"T}$}? &z`mc=+V7/NBpTе t8D˗|85pIz락{o? 8Md5<s3ubZQN_F94^(F-b KrjV+3%P?mt&ZctTעyo 9H yPL<Z#a9*;J4d/엵ꗆDӊ)ƛ^zl6Os Zlxy PՠBQ{XΠ)SKmmme !(D- LTQ?TfM/g 14a,J%N/ ,·9m>plw4AS>F@>.gh }(` D -JWvMЀL*&ԛ뚔$FJ%MD[cY *i BSNI hG@;8As9h .^anNYMe)&}09%:|6^df1ۈs fƾi[gfɷ5OyK\wY2%"nF ώ'vb}A%Si>8FꖱɻBB߶5ruzE55XU}:UҐinӘm1)?4df֥g4kZW.4e25%١H@ Y&9r~&/}'"~@F tњQ  ;cל..mn}J{?;*X׿::ߚ޶ueL|ΕkvǀVeނkN\o^[w:m۶9!ƙmhhIΊq^bΝ-[9ep5m[nYgϭ7ݴ*888;v.]zs2 NUpRϔGԒQ'7Z /Q{ hBۆ&$Qи(w6]{wܧ~3l޼ц0`ɒ ^4arWЌN$q> Yx&bP8A1UE)S1/87Cx,EwtGցnf֤#B!.x+*KXć`dd/|< <00+{m۶X< NyƅhE rUWn6/]5a&6|&IN9R«%кzͅyccG&/1l.276/ `ڴ!m_ 1My%ǖŘLfd 6k.,fB -zҖ\D2ohn 4D!Ux= C`Ȭv ( 0m"lL37L3SAБ@41K R&P4%zze]y>4 BɢBᘹ-SbЉ`?2[JhwfG|2Vevts)3 7q?c}F>Ӆl,Qƅ ZtʺL ں[t.[޳w.,!=#aL<;=FI &zY@jf=}gE Һ1_W5!́ 5 RsU?;k'I.ސx{r hGbؼ-CK㽗5V/k*UUI>;ޙA&H3)SlBФ h&1 eoy6 _rjq/Z΍_c̡QowYwYz5ؾbWqŶrk#"G#~8Bsjz9A} _< _y廜T;W:qP9':q~7i/s=>^z~ݧ~U8o+=~}⠈1SzhgN:R!~ nhhB XJ8766TQ‘ gMhtPU y罗_~#io|7净N -[8KddƇ~?xWPO0 Paر멧O~Ï[ҐӬ, y'jjyѢ?[=7߼rVFo#7xㇿݧk֬vf^{tY1jѝ'pܹYlL>btdesq1w:S$Yv}};SG?g _pEXB-w!oU:D3<_&NZnxhl߾s1㭷?ga: B?#%l. 7{o/u7 @_yUv4Abx6ZbkCsf[?O<-ꪫaw/`*kZ h,#k.F۵ke^f!c*#6Ax$SƧz~f/2AlW, bB7mgP6o?}饗Y2tG Ƣi\ &|}YBbhG Q%Gb? ů1W1+V)G\R|Y({mqtӏxͿoML+35??lIbBǟ(xH!Qx5ː[@_04q"UӇho} "n֢kĚaDXi,BX xJEJ500y#JB`칼0~ɒ2=V/Ȝ␎.l ͼYn6SCY!g C~ğ{9wQkk<O6c *c)Wό1~͟pIL>d"/>c,vƍ}=\(4&?z裏? ,e\G})9O+?woƿocx.KT?Xjͯ~랞>lXT[[Ow F)`~}=>/VKwExa2)_?c6V>_BzI->apM6 Y(կ>QZwD_Hٹ?LD\ո>=П-e˶ɓ;e29wttoߩp7;~PuaGp_|)U<k{n_|G 6ma0vܰa80:c[~(~ZmہKho&),d׿aek M v¥UߘDl(kѢKwdX*L;GZxO5+ ɧxi"BF:%o~;^,yZ`\̙!0|,ʙ ^|6T"ƛcO_xEZ/'50Ee_B^?"@!Sץ^/| 蔗&Ñ B'%ws^yfbq/W_}-oޱx=[G  ˗dG1}EM["b10w s8%ymCvc#H,r~O١Sŋq1уڵkSz'tmY栐>VVeV[},@ ^1"A늡]vgޙl uvyrpx^]~Sۃes^Jz|yyd؆L=(w[;Q|=T_OfWR%b駟N] 5PP5.0uЩ#~,   yb>KE';ՈU#瀶X! <9L+ ?7= ]h#Ix < w~}c8&)ECe(:omi iɵڊtmvexg 2H27=iDvj"3%.ҋamr:q( RS"Ay  La$i SEP҉20_#,Ф!s9z%{ D@;惄nh  ?$/ΎS6L)0F@ח.&j6 )&f,w\d͚jdlXb( ɋ}.暧PLi4XPX"`bUpﴖ +ghWGՆ)˙%}DP$Jbg6e>h&[sH@|q."d|~5 ubf YCxv8]$.hYh"{u_ٿٷoqvLq[BVoCK-s3Њ̏2C Ngo`jdrg3G!S՘PjHԧ'LJZŦ^1~;㋷Gn-ؚ\=hgbͱb 6o-[1pCpТ㋷fnJZxRtp|]nRuĀPԔkjik1}oҎ&&Gӓ]Mvj u7k}l 3&!]p^f)=hа“E9Wo5 R{|R}a?:*8@E!*V}[Wm嚽+VYji-7dkop5̞wuuaH928]/r~'9qH3fh/9s~_q M7-TkמdCW_}G|u'w8qXO~/}G}h4G-yH9666c68ᄓȱI.]zO3{9ъ@9ݼy+mwÙ{g4`F,xt_4ַe6ήb*I|pȧ*~o1^ػv'xr<|Ν HJ7|VGI8yw31OyfΜj{B9rSp}ІI\ Gz9L~"m9:f^tk^x;y,~'%s=w݇zo2fh{d߽%;' {qfizIPhCe]Asf'9Q_D~yAfw+>BG9z1?yVS ׇvĜ9~?؀O<睠ifɊqI]4add>7M :z7,LIlCC`E=C̦ ӑ gϭ/V M,w,^| Lx0 a#ҟ; ?/b-U!##+6l苟 җx)~JSƻc.\JRY 8 0@48G7P#œDˉkW42{ #/-H@VdHK/y](|}߬o՘Rĥ;SO666~R9fTaQ~{;r(g/~KzdI;?`y Hmv5مGy;1:`0~#tQho~YH?ume\a2}56SɛmҤjfG Ivz!=(~9缺P$KTL26 09F2m39C@}6p>E" U@7A'̕PŒ$p1@F| !0AA86hh{҄(6AE>R@ hi4ܴ3 A.ЖM6Į.+c"3(eI[S iV \>ІL1`/9`f C4 ['#KL,t=/;9 ZD4; IZhQ8@}.j8@/ -|>sY OmnI7HzZ,3=δ̩\B0ۻ̋:.隼;/|iK;&_5kR1 ][*F`bI;ᑾtT 1DYrL:m6r2ږ꺖 uu ksiၫR7D/f/8oN,ܲ/6SX-p[b<#_%`Sl&j#m.ؖx{z茕mk]泄 ¾px} >/rSeY?-`+:_ƭ ?[,WKt2h`1B"5SUKUY)- TuTt'Qo}M[eÝ]}m5._ۯ_I׭[.jhf8ɇcgwy sĩ*d$@fddq^Qg?'?3|c-G|h:;M:ꫯqwW?rzh3[oy ɩ ?:~jaL^ДZb]!^nմq#mr8$_6݋/t=R+dw_p18<㢒+|WWЋ7߼!<%w}̙Ǔ7c, H2.`hW_N=Մ`܂g͚N!84ei"z7/d@5o.%L=788U -"U9R$ :˔P p̵ܸz' hAi:b h4bi%I+P#P@ƀ-ZP4hs/2} 2dvK@rZs9h%O"XQF-Vh4+ ,ZpԳ#,0~2@? ZF33 ]\ k}6nb=_"(oa{߂B\ǬYd~:+t՝6y&>" Kfm(3}vP[TPy::P4!qAm6?#:Ԣ7l>%hSͩ[R 7oL۔11gCzbsmJے-p{v`BSm:Ux_8} FS悳8h8pw8u `o[kSfJ6+#̚v]BpTaM D̄CW5'Lu}P__9\Ns?CC@ovߺww.'oZM5ׯ[W3DhŊU/;B(jGFf4G&ynX0g-NpzpI]/ʺut@{\"ƈ0n4R:5i"C$(2޸ІG_~LSWW4::QKpI-2fÆomn@G$[[Q(z裏Db"#|Fh ^4=kc9-o N2:[Q[bFV A9fكiE!Mf\s;^We͟W_Q&(h/__)SǙeXBSaهv~Ӈ<=k Ѩ3f̢/T1C %e^w Hzg͚>}wX3bC-o kp #Ơ磰ՓO~a;3S5Ƽ0eȆe`G5w_yb< h6 ٸ%nFbL%Fb۹KFQ)gA9F}I<裏?clk6/ ?aɒ%/r_UiCk.0^}WYX7nf#^I?(^ί]^p#c);p ŢB ;DD''OG2<(ml LB+FVZÆڻϿ.<v ЖO^o}7$Xd-f*8`Ӑ72~ME^>cbgM&ׯ߈$/~0]yfm7Y{^_>+~9Ӷl3a&5fQFtݷ~;ϋ\?,&c$B3)l(Gfǎ]O<c$|߀Њ3qƼpahkB&7f!7.⧐Pq/fcCFUUPE^Po'#{a-%a 4cv\‹bC`hh1t1/nN<$?Bcc78%}X wZ쳩5a4@@:'% G@ʆs. _$ҭUðlfXVtSN/^%멲!tin} hAe􈀶A@e8˂S[ mH@v4ezεnѕg{Y4t[Ž>|.*tͷag̎HF¶Y M&Ie|2&WECʌ ] Q k;Ea \m}VtM]>;>=69&Q]NN^:?6kEE 6 |`X9xKrіͩySs7'lJ.ؔ15wCzM"N]+xSdԦ|. v'zCHYXj8hQbuEZ?l `B{7Z@S9 1Y,K}nؤO Y5c,rZkuRc9_RՐT 6Lq=u?CC@owXZYrM˷]t#nݕ2ou5Ft\W曗?xtUxxD _+ZT95]x78x?7.\0w}gBo3O8RőK/⊫9\-Oo7쫯&*!OpEζ8˽ªy|o9ӪfɒL?KތIt﩮#z&?<<*AO0gΜRT_~uX+|WS}mشB x3s 7,<_y啥Ky<3xs̙~OpNh.O=Saf8]3X72e،N Z8chBJ(W*At怾+9aR;xͷjpp*@6~Ҥ|r-?O{ {gꗿsFc̈O/<2M,?&DƧ7x1?Ƀ0eݽl"@@ Q\_RePHJ$R?(2!ۇ5g<9cph:BFVp8K`'yYˆQgc6mܳg/zЏZb3/,HE*2C ,Wesqh66;/~+|$U+WGqy܋WJ%Ŷ={nW@ͬH$b*E R~txh4kׯ߈aO-{@N:'z5F9_~%f0|N\d [W hÍlޢ]]=Z|,|`λy;>9=b Ƨ~V[.h][w;k:d諽0葼,]v<+[?:/^4Zެds2K? 5z/:@Sg:m#E4o8< GFfُG},@A )  <3βW~bw}w*38N޺u۳>D'6˒9(O݊%"55>aMQ{l j6gp2 _>k ٛD&&QǘM~m "D0 C= Ua<ر *5kzF߻w~a>. d4 yU6Ԯ9 ~_-^|1 {?b/`k~;f@AobjZW|C#~WFÌ %lXzg,ԝ;wcxC17d3|-,qΗUpF@b弳 I0F@[VK0tP vB |0ڠ{KD@(%M1Ȳ*# h`etD-VGF TȀy@?]^R"/Жn4t[ zX,k#LFsD=;PB6,(c ȋ&d0òӬ&1 {>lr(1MȌZF8}p0y#h󅙚6k|고.SWLMHЩIU cohol6wm[ $n[-[cl/ܞ$4oKh؂ͩE3&Ǧα=:g%"ׄ@w0%#"A;ZWE@tS>Zj 5D;"Mᶦ@6L-pe{A#-T2f{ct~4R)bޚƖzC@ Zk55T-yg\mbW.iu?C^*la}k.+ \pEu_pC9?]H1~]W̙u@_zN9If8rBwu8Rq񦛖q~o=c9T'iBԩC?\yW_}7Tܩ ӑ_ׯ{G#e6ȪUk>#Ι(|ŗE7М?4 g€jƌY7Ķp q y=#p&~{~÷^x%s_S2G}\:U(<3PHKÏ{ {%ar5_]^ze3tgHJ^Jg~yYGmmuיKvS(1AzDxv'K7QȳXro={n>[ZZ~|y ;4Ǔg@rʩL^g)r xM,'x|KnϿM4FE ƍ;T: a>_`Xpl 6bh PK_-/jR/vWE@#Ʉb-/uwŸXc4ɚ5sf]v3L~V; 8 olڴ+Vb_l &h``ʉ& 7xoӫЀ&.0)ha5^L?xR60#x@zͷ ccd H\(={[w}7UߠG1.F3o+Z)SQ{mk@O^8A=Yi'K#&d_b /-z.c, ?l`hzl޼E.[bJ."wb3MO k _VRiICj64;R p3%dTB=6!ЌW(5u|uutm]zE._XW80gEẑ v$n=Hbn/[-psxmE;~F"Ϡm'Oܳgl <-C6)(Tmt9000A,4/Ջi;w>ڨkdȠG~~t(z afw7SO[p!s)_k0q@~I~-C.N98CYޏ<YA A9 5(|{ݻyb̙y0Hjڸq}wΚ5gܸdn$lzRčdU,T16x f?0 %(]op[ r&Q DYtCC wq~RD'i3߶mGGGa-0{치KAۍYh$v"3D@!`A3Sɓ}.0tj!%Ȧpڢ?3w)@Գ%WwB=6o[%R<>Dŀ\2͡N a>BXN@KXb@km!QenC@;ctp9\ fnLH-].OzaWngy^(﫼G3y,G-qfg_ h0@/ȏgin@O3@$5\r$2L0nYݦ!zHyZkV^:UɼaqD@7uSKMJ^XTN]tQ†Uśs7$nJݒ27nN.؞4} X)`}~ܢME[ҋ"[5hkjuE GH]'{ٶMœ`xr$n.>uPW4{BS)`_u!fzCޠH>4(_<_t }}hڭωuBUCnb]zR}1]6}^^|)Xk鲭]F@_U]];s:8QH)NvQGáNh Om8#<'p)!pi&0裏PGw&䑆~U( ,Ad<&sYg~p'PbxI'/8"RN! <,$)#EFA(6AQÏ$XpU'Ȓ^98#OfPE,QACRPCPױ2/ư-#+G7^z#q L!#1 #qR #f5Jx$Od f87dRG,GA1<ҐZOF*>N0v+jwE.FqN?;Я.d%NhɫI10rKK C q F-N`Դe<XL)"CH9)h(LB@0SO!#0Vfd0+Y㒅Tw<%T`\TI5ty%tqA*- D;2<"0 2(eyA_IPQZh4yTcVH<|QB2S(TH+ ` VLk%Lg O9;te !0cr^KHF1|pU/|የlMMފ 6J#yFF9֒ʽH]/¥htjtDN@%ZE!M(DI!P!TaX7M:G h:ۏG) t4v5;Z0|a+݃аy{kSi [ah&[+ԚOiEay|}(B]39жjSH:R+AE}y4('%s9d wESm"l(ι)I//Atɵ ; :?A-VfAt@t$)*bQÂ/'ͥ練|M]&UST_XOgl78wK|؂7oJ._ __%hs⭩ś3Wz. , :G-Mnݩ2 ܜx{nŷg/=wеH)s﬋Ϧ\{)K Df.O.6ӮO^ʎֳhoΆO ?iMaQY"V%;ڬ7&K8L,,huºܤ|CS|p,y9*X׿:*h7>pת5{s7-y]+VYzeni˵7lW^̞wUUUYg1MIur=PYgaU̓wNMS*hXҠK5Pt[=VE_i  Aj,E#TQ }iXԻiN*<4c'R IY.rMR[;<~#5ӄ~5Qn&t_!*/M6SNBJlDү fFcJ&7l J)W[k2ZTkcPdXEJUEC2@hH>a,q ,"kY'G 5*1;)v~&c pK$,X~t~ef8(ʍÏ+?OR@bbYvMGmꖖik35d(_YZʘ "-)G}KSJ 1ү|4Fo}ه4$2Ihs#VB+`?jp3hLjwuSc.cly4AҾ&Qm[m)ƈe` f?"/P.%hiDfz9s¡xg,59a@ONdATnj:o\pKhc4 =3nf:afe$߇N xf A45`F@2c!K& hQE<#cNgAE@oĕH/ j#᠃]*~ЈW `?pO)0Ơ b m%`gt.m`o@#ߢF?hRWM4׵T)P.o n2؇>XrLuXc˫A|s3O懳況sS1ε͢<˪z[7eФs{ iBׂl|Ǽ\\q&:嗁Hmrqv$$c#D$r#)6d9k~i5Lz-ΩVפ@Uzbmj|mjRlIk6$lb 7Fn lY$lqn-_=}ٞE;.]4)=*9._m*,H 5hg-K\'ޖ(,57w]tPv(%cXrř?b Edkn݆>pUOß>O`Y"U*-/lݺ]tz(?ޢ=;q4(]`EMQɼɳ.Xk'5` *J_Io xWqg;g\]S&d)@:?5rSB\;aCp8zv0+ʏNJq<(C|l#mxvAfzO<J;#ϛMJ') KoL ٢Od_ SlLa1(c9˃ dSu@ )Kfh( {Je8:#6;6'mqMxzzeFKТ˯BE j12@48뾳.>JizD8Nij<2SCq5ArFgĪDUu₪#PN@af97lD&`Sd伍u-ΫJN4)vU LL?!1~R&~ބؤPn 3Kv\7٭-),2ҝW3Sɾdrr,>`o@O%zH|0zə9+2WN^'u_}[e;2o_'s]2> OƧE8hJv|fa)::hgj|յꆴG@;Ṫݫfn=-ڤ᦭W_k^z 0cs,LGP Dz#BWy]pD<ڿ^ng[zܸN+ősQbP,T~ L޹b?T<+=1vDN3Mra; [z8j8h.|@t.'A|D88]~:/'Ѿ"1t;#%[\$ VG@Sn4KҥlLgK@!ECeB >9 }g ڷPP9(A5܂jM8ryR3gDCA98N_ |_[s0b8肹ʍrܐYpuVk-&R.;w-|1_LrCM&:3>[3imt)IUwZ 5`|r(196Y!bkU% 6Fn[$+8|K:dI8gCtMQ'_10~|jb‰ ;jCMUf&Uǫ&E.g\5{ٮ/5{%[n|w5y@25ё$7 z~^2ho(9e;WޑlO~M)]Z.1wUz亦pc EMRXT44. mloyY,"Yz_OM]#Q2~p7޳;VmŪ[ܳlnDyۖ.~ vG@{A?l\YՇ$,@ՠb/#_-&eCYf %byWzeyWBz6si }KQKVǍ;JS9y^U.=By_U"/U~lС:4˕*A*ȨISʏd[GY6ƴTnz<3d)&ӳm][;twHgR !ӂS-ؤAhE~cPiDn&*$YawjP`aCżڴQI\41tAuԢ[7ЂM ѹ ɰ״At Y5)KjN/ifD||&z]Kmint.rG@{L-)yCˊw]TÿT"q*4xӬe:TIqBy_{`:xDkPZfk Mb*a,dכCу]z4t\F@Oe,Sc)QX(h3:Řν!6hA?kҵ`G08__+d)X$B4Ea"/X %܃p:D@&*@^bK;F@KA AM-ymIwrJq?u/Iэ#ioGL̴1(K42݆ Zgm pmȃ\lpr i0” !ZXQ%T,<Ҝ&.ij> V¡3ҎPI_98{St14 .?z3Mۙ;RLG IoK4ٖ˙nezq:"Q1ȑd;I@;D1'͉Ts 1Yҏ\} ΡM:~F( h-gvзHwvܸ~kמ\|r%/ h_l6|((hWGG/.}wE@?ԠeОy >ۚL8S4; / y4ehZ0U8C#`0prႿ%v::::::t,*W?L`M1A3b2%e]zXЈtrRVr@7ࠅc2HK3p ѿGceBjH%#8sǓM):@&W(t?:VZᰀN^g*}١/F)C?hh쎹rdg,a r==޾w[^KYZ[9~($Yi\o PAL@ w%]@_gO& ?kߴY(v a i70(v0!ę88JXV*&cT E{t}B_ f #Q<R;%qD]4=>33PF@chGv ",$G1KYI2=xr;N19h:,SŘ{F. G%6cυsqyZ=cF@?%)(3\e>j55 _cةSjfXXP TdzYfy/Y~Yy n+H'>V&ۑ:i/NB I^vEvm&B4xKtD-1I#b"cͱdKhKE >N91Rxtkh '$oP8ON&!݉A:tH$_HP=^?D!Qފpگͣ?,a fG떀+{du-ϰ .)@m5Uh,k8$}~gwSuwͭ77.KWxqe]@Q4fwW 7 M_8w9XwW:'_S/ ?)l ȄhiqӍgq+89vU#Tn!NdNZF}\:ԳdF\i43GC f1(C^DA 4` >EaS zMفBo0Ce4Cp#(Vq- !ϐ'@)ʳ,;qֈ8)C@hMY! *-) ` (IXY*Ǡ֐=4pl[Fj*Y<5N4\wp*S8ͧGh)݃B)!wv"Dɶ˵e[ ʼniYc :43q!fH(W>UiEހv.֒Ba(JacĢs S}l}=ΤާS3$5JN=JC8{@O? &OɧGMVOИ t%֝`'rgjbT;7/ͭ]q/}is vlW$E&["Dgz≴2;_& 4JZv줠&ctGnq5k&dg(GRqen$RS 'oNs)5J)蘝qnT1 N]ŖD0":b(=B|[@:Dugs&5z+%Xް苈h/f{Xa49{L_c1E_0J9?tP1q0[Lׇ3>\ a?H7"{ B%/$xR ebҩptP #a0t6FA)b7C55Џ־wwn۽uww޾rs+2.?]xa3:\hѬAވfu/w4{G9o:FU b.VAXFo#LrR b9hEYD#qgPh+ҹZB.=IC0D1 z !-(ڀ$R$]-9E}4?Cp(ӛz(b,+Y~Yi r4ՆF.c}3NuMc;X%i9GИr@̊VQUcQVM ! .V0|F̏@+Em |ƜA2h2N7-ß1X4C&L (s`xV oD9j;4'L/"r/: ' hOHj ~7QSqbߢgU}>ȍ=$="QUfNܬ774</}-brzMԣT|rSNfEz0@˼v3;MurE4K㉶p% ]5ùpNy*s})u}6>=Oucѻ~s~v0(XG!*z#?Dyz0~N>Ǟckهɾ ai-4(RP6 FU~F0s.:pnХ8H@{HlsŞ{Ž?&քgGЕXq/ybyEo0^-9М92354Њq \P8hF@lz hqa:ġЌ<2Tj|>X@'.-P4)*O8 G(vE@c SX7j@:Aw'Ku7 &;( !]J^WQϘИo4GqY‰fh"? m70˱55*88RbVMg]3u! QHca 8*44 +nHGےM FlOM>&-z hvb{B}"J?џgܹ53}nUŀW7$\~!w!gUblJ/fWw>.o hHHKT~8`bNR]ǹwr/{LEg@tOЃU Zd;?XmYzY /ypfm6tx9( zn$S⹇miv'w=fn6ġd,wbO;B|$$BX1 =lyirUXb9T"νfܖtn8#3x3\@8_H>OOoJkjzvS~Oos{̮5 ]$:lM5n~df6NffG؄+]fOߍ&"-P&9.G  '{ٝ/>zy^` }kk^P:thѬAވfu/w4{G9o:vBh*$(b:":VtvC\Yb]*鬦UZ-q 9i2 hACfuAB@b h AX)DP@~Y>+`k RI3 {՝$$rЯrh]%_Q86/:RA4jA_Q}FA*h8-dOstP2X7cS1d|e^*#Gi[i(WE+Z\fY(Ϧi@uf4Hh(94$}Lv.D$7*3ʍ=fƟSr)1x[{{FN>7unj=:t.RiHT5U wI"7=O^vaOZ42Q ^nv'J1)Hm I9Nt斿^,K/+-lߗƞFDI6dd~ANza_:}~y_XK/L/*|gZe&δ'9BX"ęk*3O/؅}]~z[f֤M~v7=Ş剷zB|4^&$ #׸M~7Nq/Dث>;KO0܎4I\ H A.y9qvbfv}~Snvgwuaᅸx^0Q E2d8L^z~[zalSSdG (Cܫ>>*%45/e^޺_{s^9%]@rioD7M_x#u$lkG{ttttttB@wBu]X@)=(d89 hZC&}(4 t}Dk J‘;8kqB|>*c qlڠ ӎBy0=H@CdwD4h+f2+Pr. h t~=b\&& W4R >  hL)F.ge `G1c `x4Lܨ" e3Lqa\Laׂ>S/mܰ)$h+ dEjg@z13C55bl59sfjFB;ϮrO۵\]}C7F04=g=q2ifQ/ {Ev ;$ٚ d1=R튀.m_ ?fw ?l$ŞX4N c +{饗 nEfv?sΟy[,˟fW~ yȵIX< D{4ϰCŹ5MoKC|{.3nKS[8AKBEȆSTqv[~ 3*w6ѵ/%;Wؑ;,Ln}+~|Q)}9zOewmjf>&.FZmxhn,.:%̽?fT|@^F7O?OyF(l4lZb_fC:$4hV oDΗDsz;}hv」ٜ7t;wB/H@= вJ>*!AvJ"Au&8FvSrvV\3F.br~ ٥/Z=c¥NhNe|zrXcb1c>{MsHE32iX< 4|?]6X8cGBpz[c("ɉGH@OSɉɱ5r|]^%[g`\0s:9̍on{yOe(7OrSL}^Q؟ڒdKjOYP n)}t^nw {1F"0_-nKK/ҋ/TTLQ]Q~/eGnd'd_ˌ\IdK '1[{ LoSŹ-nzh=PN7ZEainf/=Elԙd?$'QGn ř-~n\ea M10D,67ߓf_pɎY_>(D#|0ޚ:ueIإ 2?J4OrMb}@ G` ]}|(sړhi HM>)nt"4nƛgVXTPghN2Ab e~ Z} qht94З(/=Yxi.u~47Y]G盃/:_}h6ٽfs::::::t,f OREE@c)dYg@̲R0EFZ$Ym4-@&*sstwCX++(z1 D>1],;01=AwQ@cь]3GF1P$T_@~I3-XCcͧK9=BZ~`NgCqE(CfzCa].*LaWwƫtZv֐Jh|zq{ x):t2u 4;MN>'Vɉudc93x ]!w-[h. Cw&*ibR/]> ٰd9vyOm ẓ̇*o &d~Hi3ASI9LwX@g>v2{ilǚ2ULd1HJW Rcl*QLm e¡tIuٝWSH2QHm~zGfދTߗ -xÅH( ~iI0I\'\CMsSjryr@CYOPFPLo:$׹jn#3NvOt '-anY%.7:|M_ DM/2H>$GE_X X Kat='Z&ǩYdszE}u~L@?^փ+77ںqw~gk\~+K.,ߟ_w_DZ%ϖNb7J j( *xhV oDΗDsz;}hv」ٜ7Rvd("t0luR$貀ָA㠱^>]J@ G"q+ | <x3\/zAks$]) -_xH@#PpI 0E8B%1kb쌑J/!%ڱ`4q@zs0KexY4 [ Ȼ hua5J OPEhQCVX4ZH-2c!8gOSBb.tK%y5. 鲕f[9i\R$?ȁSLTd틠M,I 9ʍ=7'SjlKTom#S]OTWGkcùx7[xZ?Sېj,6E XGOJIx>=vv;3捷|_+g@1r:G@ ġr  Ս߼ӫwwoܺv}ְ[wf hd16C9.ȇx,59x&`1[U0KD+ô33J1yz hP.PgUZeKfUEyE!~!WX@c}HAz4 $.F1%Rh%j&cxs8sx>j()|#&a8љ d< eŖf,s҈z d_at }hvOAs8 b s< (G> 40$94LA㠅)1:+aHtN7wLa iҰ0nP;Ο)+ a(.)  ݌mő=cR`4V۰:% b?@ۃ LSrh'چD*5ʜ[ƞSOUjl55L8/7PxMCD5r;?o;/rwLMYpa2q(s=3ٝŽ4--I3~y3ii;;$%fYRT hwm [Y,ۦg(:fGI$U:_ئzt$T7!KC~a_ /=iy?JC7He/U_!iHH:!1CGn p:\.5) j`'7ęmfzIyO%_*y҅Y1 H [4gA-#7ϝ GPR(,zBbc4d#t4(x|NS )}.=ָ-zq/= vjGѯ)j)e<ZqSf5(5$bKzmkoů7n\\r1Чϭpf+N[,V=¡_z,f)0O4Ud>V@1R+0\z@ `|ƒ]V h%G-r C4z 54Lb%.%KljjZ1%A(h׎f4FTKe] rRt4^n" e!;Ni`a!J`P 5|/L!?ӂBy@>2#884fIuňH%-G>N#񍒀_K=&/UGZ5񦺄>zW3OgSz1742r!k|0gkŭFK®p.̜OO=HH#4;Ǚb2AQ Bf7)-"M$"(R˹M~q݌6O-qiacs [⾴]/S]+a~(,2pz*3Mc-htpHD׌'$y/O${ٳؙ]fzK8};j8NnӻXyO=/:Z7i6=U-\|ɟf:Rt[)"t^^/& dDiEHbb-fw tqV_ ˟_[3Od\𤺃vj'~i亸-n$H.'#YO9yiO(faPK3]ffHI; ~r@kmP=hLS4¹p$ p>w"h)Ngh3Mh| )L#7M~vߣv-af鉇Uw_EGf7g^sK5(eК@B]8$W'߻u;ht@пh`l(6 $hXJ\^a=ңd3ARlw.5K#}>:hY!NhP\>'˱8`T9^4uZ#X@ X@GP@#݂sHQzVC8jr:3_;SP49w^r(5!nqkW9Cp`hȳ:AX\f7EihL |.^6*P֕ax3-Ґ4VX@\oQ(~ـ$gغ"s䣆DUn M\}[c3OsϘ?X- ymqSa~ߓfӳh8YYZܓTo T3^>۷t[*4ʰ) +4Պ1ݓ$;( :TG?\.WO3 ;gҧ ,rcΥDLH$Z78F8eOaezjXFAm, BY@g/*C7GaFnS>֥'{9xmH4 +B :TE!hA!P75Q*f Ng !HhnNݑ6m~yh܃Th1P, ;:hu㐀~~~ww\s.\~zғ.66t &} zhDttttttttttttt~ɱت`Y@S1.FP ^FD'du hA+1!*/<}7 H-,*6pBhsLES_8+璀hwEv4{qX.lN0psI\tr h!sJ4x <@Xv\1GL5}[M05jCXRchqQWTK8IJAJ7tpgesZ@SOȍH:Xo RC a|{̌?W5zlU|N<&=LMb4HwQgNfIgg,3?+̬1-1Zd  ^H1=ģ2ЙdDhq'EvPt{N/Kr /Ź̮8+,^}z* b)l8KId{4ْk1YL|.єj`@ H!)xo8 苤9eJxl3{?)n|Mg&7s.WDM!J¢?Dp3=fY = HhB\S}qv6'XdF ^M\S@ 3;dfA54rЯ_V@?|vX@KW.^~gu   o;|ѯʷ~Wo+>֬ȃ/7%MX$۰VF@}rC hhF}%nEHh!8P=,$-=( h(r -pfbBT d!ȇ{[q =uX-@8 p 'XP,l)/1=VPNr4Ւ(<|w`{pA!+i<Z1b4,Zȍp%MT H{Q,sYc y9ijzJ^SliPЃf(I I'BL2]cht 43h$X@{5yBc8[Sv|Mzr{J=2'ɉ'ZlvS<_D'S;Z@-̯|]zA/š0'ctk $U\7{H@!#PW%=a7/-S"Y1Dg4ўH-ds3֒BAK QLnz5?%M>6E[|1~ 2A{An4{v@J7rgH3&7Mx-MLSH zm`C@P32M2kM@#`=z£vI Hh_Lvɩuiѵ#{Y_p@Hҁ@&jܥ'@~eKZu㐀~V?S% u,/^Y#S:_ Ra`lCڬj+m0Mh$,tKҞ=W9:pE`ZYi kkG?X_X]}Ϟ]xdBC55P=|n;$"\,"ǀnc@w\'v4 @( >7 q~! hf8d͖4,xԳ;TK4( t,NI,QpMŠ<NPyj1'ƴ}W7hvX}񪍳Xjl#Nh JIb: ßѠf9 le}\\Ĥ0 =hE#Y);*5 ZRiYLBA<҃R 5"-& ͸{RB-jF, FHPt؈^i k./YH dggרg3vizibS8[@H Gns+#ыyZCC$J(=IL[&-t3Lw\489pn;$eM$Rm)%&ۥ ua~v#?Iw,QD1o&Z"(њ:#AbzCb+N =|%xH$ r Y/'5qz␀Jl}@^fvɹ-zv]8u+L5 g=/FB g҈x?άg;іNM*Zoh)N2Sѻd|\HsoTjH:t;;85{+Ml{Q@Zu=×K8蛛A/xz|c hX-&ls]Vjel9LV{f4V\fhaVbwVajvvl3ڝvnrJYV95RrXNa4l6ivdp`Pp٪F݌fmFt[V'rNjžBhEe9-FF;㨰l]iMv' mY:PjW(]nv_ cwN5Ģ3 ۲6Kfyh>IH`n gO -pemEG~Bttttttttttttt~遯.HExd ]u Q^Nj-eeVKg5ZI}X hՂ51Ő_ӓbz]ABJsX:L*LНQ}$䆯ěF*a#6=ffCyN^2hA8XB q~3Oqӛ6l ƠʜfǞ3fvngÙ`@( >? C-=K3=P( ٦p:uWۢ7Hl 2@]#XOmp÷fjG6D}^>a`k||]8c9n)5Sd'g}v/ .cuZWJ Սx$^ܼw֥/]_?eg+^r,/ff!Sjs8mNZlt[e9al[݈&;VJ|nU&Qe4;vds-(dtdVMN 2J+F'+?tUfe2muaw٫\Pfw6nA6UvdAⰛln 6TiZz۪0dNZN6dJ dZl.tφmXlnh03`uMNmU`@ALH82]ɲt6ˊڝ,u:~E}J` )|r2ʶww877I::::::::::::: %Rx6N|#v,PX@r e2+A YH J@ç> d 2A+`gXCb0 ~W%;N!M!"@BC;H#ڰ⌑ @ŃXA ~`]y/h׎f;^y4\W_\: T[Êbv4?#N Sb攐"e2Cbn6#a,dJSٖQE@\qHp0L/ `S|v*ģ 4+ECk%QB] 螫*{n{NN!8&'>XK5&e~!;zNNm3S[5Rc6xF>&Wmzv335#>g@8ԆpWm- ˻Nfy_"Ş(!d1A"tPtGipP0y/^TKfTk2ЕH?jG4#כW>_J D~4BwFc͉p>0_HOf?.oRC@"Q[BD=tZРfnjKš(LtO0 _V-zf^-f/ ˧nzf3ɶ0ќ?q8KO *]f|QDjY84<"AW3rfǛ6?No;l_c8 Br Ϟ N>g瞳3٭ԓ@.]s7 7etuZR1h_%7^yV篬._zr&͊Vn;,Nb-f3mwZ-VZaE'*L|j:O:v5; jhUnYaA6nuN8v`_쮿]R%%`UFrh>YiN|tT&„W-Ud,V8f86ubY?GNv tRa3*eT:-b2U9 fc f0*,Fo-VR鴙v4ڄ|<v; m0P Ffg4V9Vd6-NlZD[,ŠxuÅ3 btNX,V*"b|l#Zdn"@ݍ#5+KsoA4UY hVVD9GG@H6£Kg@4J@<~hvc4J@eh<9g/' 3bP $K5Z-iӅQ@Ea7J5ЬR l@C2CPbd1N):ւCSG43I{ik55IW=HgSOUTq.Dt~SܖDl2{F17r+O/fnrʏ&b*@ Dd{`.[ٓBX^zq/<$5ǨD é$N%cǹҧg‹cn:ٵB/RtYZDg,FTcĹ-fzSn31=qrMfgv}vf4;zOv\ b^Y6_|ݤO#.$:}ٹM2g=n)}1@U_ X;w8iE)|' Ƴhnb5=KOn cOօhLm.ٽL&65K;?sxtP.U gpsl}ʳ_Y+,/QIɶhHtDVlhM?- Kg?Ѡiva]xEn:{vp6hMFѿTRb{O}vSz%=)3-qQs/4~LP&3z h?Hτ.qb.=Os IK{.~S[,zy:ѽfz?+ 7mnn7=#qFw/noD-raCB(ެ1j8h/{9Nz84 $Cۀv*AC3ЀҰN*Q8>;HClzX*'Hrm" 1 M)Flz/" Q| y zj?F^0C5^Y '긣&V!=d]]Ӕj(;qߤ';Y♀^?Av{q˟J/ sbt,ْS$8ݝ"4ЩD1EGo.^y~n=Ds bbйA谭c©ٙg§:=x%=X+h T!N'k>w]vvEv&dʓ'`5Tm~l86l︳qk.ǘ]m?~lP[S;7]IpLK}l|O+VW A?4ؿ;U#6fV]Ï?|xqR~m`qV:IISl䉊ONFcfQaھ[i3XMfł7[͟|r>5MA>"? 3 0=|w_ 1Xь?6&Cb0~z 6no_|+K\| s c]c`^M4w\q͸Ib9l56v9[wfQc2YlNͷ5\m&'n活& |Uee# Kź,ᰙ\OQD.;ؤg*ݫ:I>qٍxooO&2*M{6VZiL&se1ܱw5̺c?Q{ZcjVZ\BnyT0 &tXUj#3]IPa4mT]uiw{dZp`&a"2 іjꬨ4~nf5LNt~r"Oş'rŸ?ٳc=P!Lr]@|1,KA"ʼnf;z|T@c"(5 RleZV G 1qVr,qNa˔Jz6:a94xh 4]@O9)_pijpfia׬4,RgԳ %qÏZ]jư  @g  xۆZ@7hj)=ʌ=A?/5~njhW X 7PYg'WɱU~fKg7Mq~G^zyyy+9M d;S:DzP,DgEjO/Z8M3#+AtG",Eo#L4p=oH$T[8zQe.QmDT*?Tg4'4IS-JYO@m`a`,=D)@ -5_(dQX7f|U3hΟl qi$&FAvȓfR p(HBA)J7D^ަP)$x?(FX M~)N#RS0Snm"LoH #n(Lc->6@6GDv72A5 x4LK+~70p+\~pG eQbV;*-j]Mņ_!|#˞ߛGnr6'M.dYN3Rgx|Shh.|Wˑ?(u}L#{C?]5T讬rޛ?5^b^$&f6'[u?*.bυ|'oTޯaNH]O=ӳ`l5LH]g|Rr7~btd}g+OW,ܟ_;xƐ WV*=u{5)g?Ygv v᪲՞om+ :*MVڷ?ëQ=Ed?:QU[|9ë|Tn7XsD\souBb[ް6:gtn;߽ݛv^mk_=jN|RQ6R8w>0= u,ƾG 7\s*+jq6G<&Tpm pwm%kjn?S?*MVUYi[[{Oﶷwv8( fs[^$6]n>\L'*]]h>T>Up8\U@r"D/pc6[Kd-tRuR\#taxM4Y=S~?!BN7!8q1X6y}"S(s'ۋPDY@рY[ɖh%h ǛC%#Uգkպ,aoc(Ί4*G$\,pQ`n"TKjlarҐnK0ō0 PB?ca*F4QJGq'CB%rkq[AM׉ߔ(rh-%ZBHDO@@9(`3ЍlmC]6;x̎1ωub99A5ML>g&ץԺ0Msr|[L=s[ܾ0%.n=qn/=WXzѶY˅O+T$|H H@Agd?&lYw]ۙB%D!hN} k-" }T1o Zb#:|# E?X&B9Qz1ّHQ(EZ!C8(R0| Ĝ 3 !W6rtL: 2\(!FI^B@_{byA];HP2dH= [٬7FؐC3QP|!4 h!{@G;AqB!'BtgB_j _ p#/4i8$=OoPwvݺr{s wc.Qf0,NgUnql{>k\KQaU M?PnjL'͞.hs3Us7gUvG֓6KῼߛyM&9,bm!Uw?'|ڼUn o/~M |ѭ\,OM**2]ke2ج/?UiA 4mAnEJw8>ǰJl1:f_WԜMWϵy"N.Z TU!d:l`1Dj~k9[݋t/5264@'ofT.utttttttttttt^Պ|W5[̮*w8BƉ$Έ=\i{X9FIeP l4ZŁҲk>^@co/cc!(f@@ ?#S%r@g)c"2Dk8I"K 'Z`)֥(j hZ F#[u4"h,9U jT$Bh# 8<)jrVHåO#!M%HLh]MϸA¿ШB|)hx^&4'#)u>6?㖀_xO@8V@{تF[aVMfr{F= 'O$ 9 >%Snj\eW5azSK󶥅}q"2]=F1cnC/,%p]I=IHprC1#z# de^pPȑEND"JΘhU~K*)RCܐJz_Q2p@F{$1ʐÔ𭎚mF'NMasu~z\%c'$RNOO>U'WuvnٹnvzOKϿȟYBZ ]87@0],e`h vN1eTX@:>i|$p>>j"(W5(VKc@w+R|VB@ٽW¯>elC薟~Gޔ@v7]}WVW.=Y:`aU˺fj:,&t=ZWxڐm5TuF͵Mg:l:iWlvW]c5޲[}t9vvNW4Xn6+YW}l;\}L*ZUے{WUU'Jl*[4؃?e Y]sq5Y}d6~vYIk 5V|O&[OV:5D٣O*cMߟ4'͖ZiT05D~t.8ޚDMո; &j.S۝~l,vbkH\ bvJqd)sU?0Ux|nEɁm*}ts, hns{#q!IY@pR,tt/ubg84ʁL, p尀t\4}";*4̊:|U`ɔ)Z@F@kjj. g ]P8XXZ6% Ҹ7'!΄RT)(GGբ;4zY  {@0 X;h$}T65Am:=_C=έRh|4/bטuDSfb hNfn7=# /K/ K{-s c t v_餩.InC}ƨNKSܿ+΄Y\ L1Jj6~8,= Owwvtqܼ|0{ƅϖ/=YZy8|ofFWK_]Mjquf`6Vv z_{?uOTYfයl5=WdjFS⶷ޚIUFISS+䏮7 5; $VuYj \l<9pØXLpˬ1U* M~xbsU &juչgz=HXO TV\ܳ~.𳛾] |6w=Ü3~<׏ݓ9d6Xޚ^~洺MJΉV.3^w6Xl$'/f8q ~OO.IQh1Y6CIhHDo?|꿚o.]%>9E@4L6[w'KHI5ɶSb'>N衹NCpp-0=4#*Ye쐐ānsCjԋdJ6A&^%RTTLU\(T.X0]@EO L(\46Vֻ;+A k΄bbry(M qCmօi9 @ B`hDvYz xTj"{;N?e&c22cO 8bOUnb_g؉uaj33;*?z'ӣ$C&;G tSb7)n$_r5u98SGʬ7,! .=4 e3X89}hvhqg>[߳~Z%y*±`vSS fG&iۖBN~sno,=pZUd]OTVz=W9lvbl|?ϧk>Pc__֚nT\,D#G'487ëtj3w1YO: &hTk"~gmjul5YV$bs%|?>s=v ?W<>ߴ=?=]tVָwf?i6B6 l0t۬&ݸxbho.WlVh4+WY`*`pvd*ٙ[W`wΓvS}C)>Zk[ d1-MuU\Rg;xgld;GGܾ}7K6VotZMVa4mN 겟t9--#z2hG-.,y'+Ytճ.utttttttttttt^F@Cp8u `%sTkncN`N=Ьr(b-33|f@#e\Ha5j,4ƺYpZ hH(8K6DI@Lڋn)g LE{a.|,d#3 LQ4lW )\q;!rpK0j?z@}mMņ 쳏o/rUOZVc`hC;9a4XuP'ZwU8NZ+-I;''**,n䶚3TB{ sh2V[6VsI.tWuV]&l?OF^im.cx~h:YmŽmZ GNX?]aj &C;N?~Y]aBm\f [i `6[m&'ba[ftY& 2vJFķ?_Net8_}֕Wom^uKOfMߙ}v*f;jq8V{bv8Ti[vdfJZm v0Y'F+,7#jp#[U6h7!'k5]0ǟmW~]kh k2p7YHl2MVՆЖm荈rf4[pL* ,nXf̈́lZ!bɅvpY,V l6ӊ4f;v{ֵ FYrڴphNV0 &UΜ󰊼_Xf8'NEIͥɟ_ v?|Gv @: jQ6 P{;*pa,hi p"4 e6Nd1NA5%1,6< UxcRyoKJ,fǡ[M -0fqX*: G;&^9MUh w4#7o3\b vvZV4*|uttLajt/ZM79 nPoӇnj?r8JOo v9QN4 r}Οw>ě?|p$dÏC# 7H~/9ʱ aVMjD8 Rz~U񕔌'?ܣf ~VNˏB_J%V1h nlG)\@WcRNz<^y83C8LMI\9є7[.M\n: Au>/Z Hv qZ_wXpXb#pfr%۷*i(tXu)gm0M}0b%4ٽ2Q84ž2f R9%G(8RLԂ9JwMNqrynQV<=NzT@y| lZ4(vUS!&ԇs.UȽޔҰDž9C+|Nϒrj]rt p#gF=/#xVH~eP*t`Uoh\5M@2c\'BhNU !hq)h[E !ܐҥ"CaH.BBO /N@kFF420!xPrgr_!qe:SD4QhHU7$b ]jȚkb`-2[}6Y@ *(ZU!4>,b S%+77H\l£KwgnM^=J Vh4; ͡=<[ʔ+nsx BSei9mHETR@)J^ǫyWJO*,Jy[f3=@>໅B+}Jcc=-ďV^!ڥRBM&p{Tߢ8z+qd1mdNH+_%@]TXG`; T%h8h(_4{$>f@k2Yg|x{+0ZVQLcM1[ⶽf׻YYg! mU2Z|})ɠFW:lG<#|_T0^A@+[~J_ΑXt)ȊR@xQf*,ߪ1vlf\Ag_jvYJw M> pP #QM7Y\#%_\,SUvQzyGi0\{ƪTkzxՖs]/j4UQS?T g)\@h`[niY`Qߚmf#|{;Nό!騪ixb0x$tvX@RNB!R.f e%t?+h1}}eЊ1 GEsQ\,+Sm fDW_tHCNcyXWA]siȳj7PqK7^/5`26Ѳ EʒZ)4L$&(p04`˜b:ƋtU5FO(2Z`\C)JJȔaAg_WiN_;{GTXȥٯV@?]GH@yClK_Y]d gn LÄBw[YvtD8ir&syHEəBq9˫40|vL5r>=\!FS@1p\/~xE8qm:M+>Y}x'OW>zx)$=|⅋FI~R=}<]?xfEQה3}#Vg90%ܳԙoVhW/mkc܎hcrh-ٍ%|tV orbrYr#`y5c]\h[D_k.N+EGjs h5%.Q>ǡ|QS"G@j{֑?8P?lF86;f7lF=EMU欭iy $ hfnA<2 ͋}j #,P !d4Z-_ h!x` hA`YA-1ou %Ss&ZQD>Z"XTt~ќ/ v Nu j-[+r;)Nt10 Ts@@%FkrX@cv??Օ=~>JGbH$)15I, ,UG@F#Ac{:ece8pn} {}ݳ x0JT&_A^md@?x䨾iGFcEX0jvߩ<Å!N@fPUnFpI0[&1W</!x;B[1B4[TѨA|>:VW80JجBu |TPp=G`'XB\>?JuP*Ay9\-WD 䀱<{<+`1mcQ{ ,fő5 WYܹ4oW}(4oTh Qj:#.XqaxJcP!>r:$ʷ bex_v?Uԍ$ɑH:^&^>R!ݮϟEPD `D3X@'VE@C9 th179W29A)/ yY8ٖb:H+u1Ci]\NBu炄 N9+EZ AӜv4"K_F/!|^B([[[84ǡGF/^|tS-Pmi`Z7l)>P8sjҧ_ZZDITQQa"atGht9phUμG\ǂ }@X DGEp[\^y",& #"Ɂ0´,Ffdè˘5u)Ҫ0J! p}z=Dcn+L|~5(F`@Bt_Aw!9JXi?(}LvTQpQF`}LG0 8۞+A2B=~Yߡ4mIN::x+Lh@U + vf<y@s4@?6hΏIYkP~zԠOj(߸qUrP?cA22f4ZЏGS\@S+M-Q4h}u9҃h(?X( +oPjK'aMC#T-(G@8Ґ_w$`T}};PC #1(_Qt֣ձB֗?0'YB ~[h4NÅژnEw5 >?Jh:͆Y@X@cL$KKzy;9e>3!|VFF2CX@kq@$E@kE@Yx82DxT@4i8E4N9]_tʸ \&qÀƀ/Vyh0 e * >O;xge΃:оd_V HF@U;@h4eJt$y໏ hζb,^@?y#ٽwD%\:7!noC k W-8pns7go/93:^\4B{"UU v{Qpq9k` ifs|H+b(ՠeT*B]gZ9'޽ҊGʔ6Z.p,<(Å[הDQ,^$"U8]N SXfwqVxl8R?gjᄔQʣ@ԟuU WQi|8+: c9%~,Kf7i05+Mͅ02xc1W,76C~'XX,XF`1eJ|N(U`y(%WpH)?Cɒ53ؗEuhW/aQπvkdU(j"KȏNB,߇J =6.?ty4YTlEi7؀* }A w/>aBǁoX N'T[TaX4b"(:(sPu=qBnwm.'$})ǂT,ēR, %ҡe"@<Idc<O5L<밀.x] h4Z$+AA9zƈPh}V❏͐xVP4 PU8./yn @:.J^u'֊^" 2PH>cY_R@\V@xE\UcY@R(8&K\UYyD3r<:z3!Ot+' hJ8\3. /BT2zdК*4kG{J+4 k{[)!ʼn˫Οtҽ/n\8xabqe _BsOss/Ll3| |hikiisK_2e`ʁE-raH *yPm fv[ZJQ eP=Wh[P\咸0\FQJJ16Uegㅣ@1xJ;E ʋPZy]X,bk@ w Caۇ 8iWzX4ߞឞc=U;7 i}LN CeFSSNV3:zF3gO*)ss&OL[\Z^Y]gV{[ǵ 3߽%luɽ;vSRm*{$D zQMs53Ac{r={|6"Q&ܾ%wn}͟7/p7_>/ ҽ?Ogo3?nq+?|z?7[[5Ls?>`m8}3Ƿd8WӨ?|gGF?~00E-ɟ30!h3ߝIѿ|<1Lb_%Ox _!?S/nƤ&ħ&'$&$Ƨ$%B $Ö[*і=1yTD8BZJlZrl*!LI;vAJRtjr 뇮!#-.-- .pXD|BABbARrqRjIl|^rZijFybrQzVeFV%YYUٹy59>JnyD$0r_P{J)Eu!CԖԕ֕ @ECEecePYQOl TW55Mufojhh[ZZZ[[!;m@g]mC}>ؐKrc\Vyr.JRVYrS.dHt1oTĥ 9#63(|:1?%pu\ZVևQǣUF*y*hpOR+8r\j5BFjaC)C p`5%{ХVb*P[ZCW(r@X[(-8;Oԕ%w :EYLQW@S()H{|Iw;'Z8Vȕn̗z$}eAB:X% VD%>XXWHˤCU0_2X UʆdC ҡGhCP$C(2 8V1n%HI;r6ͲpZ}0Aكz[gФm!™ C=Ф:f>Ҡ; )&YGm@;֥eS4^8fr 2Krv0F1 @`zjviߋq}n9>'I1 z^y>`5+0A puz05O,ӁE` IԵC;|=LLMG?=My5i~\@;=K&'}|^3sL%uNO&Ai +cfMtqm4qaq=ptݰM;h ڴCvŮa@;bR~ԩshØC? cMGjF,jMôj6 ۦaٴlcհZU˱hVcQq*I9fT(IN2S!@-T U>O-P'}JN8mծ 2P ]rV7ك`=2R6B 1ЇŬ! 1OwD!!gHp(|aDȡ8Da {q3,c'd/fpjO W \ RH+ ]>Go6BF%dBV#b[ C!Paj<8 1i0 hFPᡡz{{;:ZZښ[jMYYuIIeqqEQQyaayA~Y^^in^iNnIvnIVvqVvQffaFfQzFAJF"Ia$&'%D"4BL\j8XDllZ\\:"6=6&-@"&&5&:%:*9NbI1Q訤;w܎DG%Fި;nߊn݌ 71nX7܈h_|U,˘ؿ%1/aoܣ|e_sȴ_:ƍonEG''$'g%d&f޹ku;W/ŷ_{;Ͽ~w^|Ͻ ?ν܋o7^|>xa>|o.^䕋||%篾o~\?x ?p哋X@h"9g ko~q dihT萀F/40 }y - &G >@D|_x!q4j~yg$?`?1I!q!Lxtɧ_})Wy煗{w{_>&:Գ?ן|5:ͧ:px&.?.Mts$ꙴᝡ ss!D»v8 _M 8M_K<rDI@Z/.|c]2!h߁LN''d;A?O>x_< ԳoKpB' 𰀮.nMkok$8Q ԬF -hT:.,:$:81,!468*Wx;&:ڛ1&*Ɲorn܌ɇ4mrnF|8$*hD߾wv۹"މοy;[0vT8{.&vl@lXtogî|LAt\![1yp_κq+[Qdߌɾ{ᖣcKcR~V;H!p`0/J,w' &$6$*Vh|XFTp`t͘Q72y#FVW3Ά/M(Aa\bIt\ܛ2oκ}'+*:'&&/66?!(!8.0!8149<5HˬȮȮ̩":L4C7;"7.D^)9ygW"|~v"@nA!F yE BBIcQIcqqCI h,h@ n!F7a]_ߪ[[ZZ[ 7&ֆ;-]m=mm= |G$<금sT2ZVJbRĘ3]"?*ᎈ9ۈ9g ze|ZRRx# &H @4(V "jdZL/ U uF jPCr@PõBj (PR+vF8qn#`\0P# zxy!MM'!|^{^=FGunyd^jҫإ8'KI  GL=h^k#mknL3_b0ǥ4>IycG :ucz- 0~69.E^D^M}cGkD,p~CS~:wj'jY1r:[;zS?֏:u#.-pk.SEN[U6]3Rh*C3PU#5ͥe: j̡;c ݡa"L:Nk65îf5l5kղZUͶV@(ƌ2N<QA:^Z5g9l`t2:]%#Dѭd{zqf ș]rVY=bfO1{E>L1 b@/ 8%fBv?p>{@q$)w@Gʘ5(f8B FT+dv |z)dVHu]Ha}1h!s$!bN c{_{@&Oa2.˨ D@_d$ [ h^} h!+>8H hСn~_:/<A;S~?IsG't<̫ ?k՛ϽίzןyxO<*=u4%X  hrO=nWە;K>xd As8$o| xp~?yP@;_88&(`C]|hMX<G&'~.8< R@甴e6dbЩY5դ4ȑUOҟl cJ򄤲 :D M/8.${aL@F8U&1#b c㋢c wroɽw':Fb⊀bB\B #iwbN(FnALn\bq\RIT<\.ftvL;DTRGwbphҟc .i@L^T Pe'ŠKBE- ༷bsnbμy;6 @Oe<񨘜䒤RdSJʰzȮʭC"†%|L>&5B/E((ӡ(,i*.m*)k(/Gҙx@[QZY\U\UR]Rts PmZmhihhilhm޹g=wvttuv ;:z;:P#B\PJ S;tJFU9jY K)f16U泇x( fCӚD#1QBoЛcMdE:,7HF#uV/F@ Ř P &["hTC?0آn 6kZjK8VzZ[8VU7 A~ vK0z<7lBRj]F]?1lIu>u~7qN=3ӓM>oG`~~va~v~n>3i0=힙vLfӓ)qگ2BX]`fFLa<7)ruf63VBRZs`/fv3&E2;itL9)ܴ) 1噁6??ss3 ^FhOsS6Ĵsv9W;陚¥Nۼ.͌8O:6Sf椅0f>Әaԇ4FVFy. aXJ²G(LM[E将cìa(sTuJ e? tw55䖆ښʺR젋K+ *rr˳r2sJdedggeJEiIS 䂄@ ABJ~|r.J6)7.1;.1}&q 9@BbnbbnBBN||v|\v\lV,DGGGIJmlTjDDD'bcbSRdYAqtܝqoߺfo$~s3)A_߸7_HI77GMW7af܀oNs'!::9>.-)1-=5-7# ;0+5!>y\r»/_xw^z]"_86!$ϝ2Q-_q}H@_7>{!z= /]k?M@o9(/+K@__ h\= A? åF@enH7_!_?OO"s8Ob ML;Mp%>IDG?ug'! #N ]0 3!]d?V; 3b,|pB+B#AF "p".GS:lY-QRٓWڙSԖWܞ[ԖߜUҟC:QjҫS*bJˀؤR"|;6?*V$^xj{"5ѲxMB\| Ip)FbD8od$&ښ\ 9\[\r4><644\RZU2ĢXlHB!)q09NL@T|6>4! 9> zц3IBZAtK᝸qIH@ ɥIi´(\[.3rks ’V0B80>4Nq)p8-+?DQ)\e-!J[ eQ^F U@u mmk먯hhml45u55u47777tX7wuwtuvvuvvu"zzzP;;K 2G%QQp>X2>T<>m)<_*ɇ x|lZ11\V+G&h&iVpT0H]^EkPմf E3ڦtǺ<WCCzaGCGDE$DkBMEh .M R;0nos:.!:cߋI03"av`uYvgxCMeMLzf]x_-iueie>KKs 3 Ӌ ޥ|etΥ4\gfҴ4c]2y.C098Nά;c9sv֬9kXƌ1m 0caM1iaOY8f3eN[yV7i~3&-BY3}f|f*JE3.(D^ȣu|x\h]jvaW69ͮ;v9.ƬR`&YTbXF@gc `@ 01CX^cN8DhX-V Z8)86.d|BDSibB2M1e4c!&D xXQ:.rB0R&DT@)Ӎ"t:%N2:!i*!Rq .9ST{'J~`v"ʄTQdL%`A $L!ѥ1` 1)1er4c:JP)CoCC~Jo@{[WkkG |[njojlkoijl(++---))*),/+-ɯ+ΫέʩFJ:#UtizfYZFijf qIiEІHJ+LDnKLr>!1) IFIy DeE"EU;q  ЍME)1XXQwnu+v`$[7oB ㌃[So>[)7n|s H{v;iQQ11)qqi )YEU%9Y wok~|W}@+yp_~gW%ρbW>p ?x~M4W_럆4y\!W丌kC_F.kaw4DXfbB @v8BO qpAM4V('Qe砷E I&q> #dBH=u~^~}*8M<.Lt&oun_M4df8(D3{}H=kШE=D\ޏ 4(++)j-j)loA724)ABjUlRyL\ c8;8 :(%9&4.@"0aOLHLJ+cQs\Bq|bIB΄򤔊J_ 3dԊiq)\e0ZZSKcFQqBribJ΅ (K,J(NDy1I%wS'U2>)$Omx a@ pR0䴊JhF{If4TSQUS[ߐ_PEem%h(9GF΢4H:EжVmJ(82@eupU]UWtu=;wu.DOۋ@A`xpQYtLԩFȠ^f3:Y#+97<ƸƔ EV[qngO &Mua1#40e>? Q}C]}mݭ-]-͝MuVT6W6ח՗UVTWUWUeVY9lҖCU* 4hN$Ҕ"DZBBJJMƒ:>H}<rlĈL Xha<+!6+1.;)>')!h>>Q;@TT pNrʳNnw޾B8 irNͨ[w@7NztEHLLOK..Ϯ.H\Ekax{#+/bЈ s@kO#5,_}D}o thqL}?Wb}5qZ##3xp^T@/SJ$Nt&<!e"?=O L !Ō}1PthM'CA(`=)4Oh\@gffyٍ͙D@ƩwNJH\s|i\BY\ryl* ˁҨxTh[Kpoy|J%LID`+S}RҪkRM* )21vU KDBHJ+tP:d!'TLnrYrjEJ*5jx'1')gG F#@G0Ѯ3))DWuBTV#*0D@Wt5uݵ=@M}Ouеx ھ^awub 3߼>@?JDY! |=GP(40@EVH8FĬbNf7*f%0;MJ[R竤l @JEKJ@k"F0x*nӤfkuZvۤ涨AC Ӭa7.P4 ];N SiӲ`NӦA-Sr5t:vq.Bz.ZVnV;ZhXQTkFuJX)j(Pk ڱ:4sJ7ZԎZ(7DkuXh`4-u01(60abdFFb`vٽFvgd#8v=hRL!r(FЏ-kF`n8q#`CG W^KXcb ^ J]0 ̈́K20Vfߣؘ{mgc!~w>'Kpq'x!܂~߅s \!x+&'n{ L9s)ڜuqzZ[XX]غ88zͻm߅ ޽wwݕw7άNMN"֦6V}+ƊkcuwuwٳeW+ލ>vjsm`}wwl7VXhp |"|I-ז=~]!!6Vg6(4"ng.nl]ݼ pNk </2>]`scic~"7}+޻5Bww:1:g켻h]TL*exeR$^OYV I EK4.8Q䖄Xt`S<; NɂK,z nb3މr9sYr&6)p(1eu\հ=Okx>5׫xqK>RPl!E8Tl&Fr*Phn[ bԢ3cLQ taD0N12 RV˙:S7C`BWLeP2  Ӡb'F%˨dqK+zq:NFH#^6jF9(zt N1Uj4jD: E+$z U+~WЌt8722LJ^ҍgU_D4<5&B\ dbD9.ǦsXc,}6JR } = ߖ{ں[[;jjZ˫*K+JJ K k򋑀-=f<':;*[S]ieYi@f"u3R3Kҋ2J!Ҋnjj!ЅT$&'k 1! 䠳nN jwɹp,!11ࠉw&2:>6#>6Xlcq&ultZl41聇iѩ1h$JHjĤ*HLtFtDEg܎ɸmT:ؘ8΄Ą䤬ܢ҂xk}r:Зx|ŠA¹4rиi +}oH3poHCk@ɵ7F:0z!*Я}"5,G 5|Ϥc?|/s/gB3_^Ga鉸}BH7?ʓh£G*iT+(Џ1 ?e'r ҅tq >p$u#00#o]N"\ ]Tѝ[ҙIs^s>X=*D@VTX-I_Ɗ *XRN8:4& FqƠR*aet̺̺jBNƠnJZ 9d&JLő%r91 F+22+BɁĹp gRtT"QQ Ȃ3B% J=&8)ա hR$!]I&ZhrDuz&[Lm}&$'}U8:. fTs^as~Q mEm%e%Uvʫ ]g   p PQNeMU!òk{ޚu H@7!tt`::ή.55sZZcox:48BR(*edd ІcT}0Fƥx^`w' zC^O2PR_62dhjubΪZp7&Wg<˳˳3Յ͍KwWlommmmنx|4moo[V.ܻ;{ocfkcf-٘O5p/ &bz++^ɲGX旯k~+^e|ţX+~o3Wa&%rɣ\t)^p/6ɜU::JRQve``x7adPFk[wKkwsswCcgm-UeMM%e Euŵ@nQm&]P__s *3Q2r*2*3+3+qVyz&)QQQ^BHO/JK/(N( NM+HF:. h % %)?)!SiTLNILMJC=rI@R"(F š$T#=.&1 ֤8X$+6 cfFFd|͉I9ɹiH@֔ۿ7?yO_}X@_z*_4so}{<bH@ct͟\}^k][\o! 濢7﮿ h_\}U>S@ qDMLvj:1_MOg? p 迏'DHp B964 Wyƚ;091:NUݐtЩiЦK3\3$"՛VKUC@ڤ̚zjR:1g"ӲH.!)dde4g´x}SN*IH)K .qejD'MRx]Z*xALSڰN?&yyl2׉i%:>e@iEWYew8U=Q0 GyhC;ezFT޹S]S@k|ƾކƦf,}nnohh>w t 3|F$)4>(m62LSi`ІLR?S@m*Mv¦5ÄP FSsU F8]/$zA9f#k6 ZK/2JLNi4ͼ& fQYkEFaQ Ac}&Q*(0I(fɐi^=(1 { splIctxf~j4Ym4Ȭ62+ r=Ȩ53HWuFv &VYabVBC[kb՛Y2 fzYXF-ce5YfvNipZv ݊h20n21тlirڬp{~)6ޠPBU0ڄ4* F(&T;jxvnG 6b =  AkDse99X<ʩJ3(`+ eb SaC~ɰO:<)NGcSg^/KVyfmZ\nmί.[X]t}wmhvvvwao{odxBowwvvmع9{o~޽ս{[; osln#fvܛޜچii4Yur݄iŧXǒ8Ղ2\ {nB. F^lonm-o/%+\Z^+`jK}twٽ^uliͪ6fkj|mV>'٘C0-ZnL~ɺ_Ix+]TlL)_.{+ŚO֦T&kS`uRWihzɣZrO,El&VɼE2cNNI0kzױ&u)@Mн18F}48ͣvƱhfGEF=1@i TébLmWj&jǮ ! E* eY]rh9v-h6߮[\XTBI7k&5Ϭ8 ifR'%BZ%m9ny|4>jT#f"eŰANcta `!bo ,:E'!lZM'fĨU"RZCD;!U)JH)%B/r<6఑}fGilH=׋*owvu7v57u6g44մUU f!>g$ꈃ+ͯ979ܚ윪ʇ sFVEFvP@*2ʳ2332%i酙ESQ"DJarra &CtB\NB\6p*]3)$ m09/))?9 50HOIIN U@԰2HC! Ħd k$h q|,tH:Oͺp/ ();1;%)'=-' , swx^w/\{Ʉ >z‡K~/Ǘ/#rS_&_(q6o!S4yk)qU8H@_in琕44g)֌ GcqΓa:SׂqhGh!Ld$p쌂2ȓx*+$x3$hL2yLhCPIwy}Z @dAr"  Z:(},`/ioIn@7ӔH-At3bb:*6,&2e"a0:H7]G| 0jw.:c7$Ҳb2P*4q}NKMꙐՐ-i5XbMHΪMͮRRI5 iU)թYASKAyMoefdjiɩ$$Ǧƥ%dT$W׆{Mˮ3j5)K.!UR+Pu6RqɥűɨGRz%\Tΐ.-D( 4(U#2^^]Q {TUC44jps/uM 4ͭm-mmmC@C]].JGPgPw7KCޙT`h6<4J`i##cQ dt16q ϠX4Q2+=6׮ٵ^cU;*AaMZڠ걉)%O3ՎsucT0t(5; #o~$1I̒N,j3[&l-N*H.,2LȆ2YJ1I2K̒~f*쳉~faEmvaUaZ9-n3d78u&v]mbe3ª5kLZBYv ZYvUcFAdXMfYXX VvUofYVV3fms;n;΃a8mvN mq.;S89p!AhѨS.hr.+@+qOqN%< SD0Rņ)f0"V vs=<AAGQaQ\!vq/  a Igg &E2i uZJ%8Q# 8mVIU25%t,[vj݆I孍{K3{{{>Mhv{{{{;>,l/mݛݿ7ۜ=ؚ۞ۚۚݚ۽;; {p"Zg!, bX``f9tUK{;p[vusoyA|OzM<~mV ;Y>Y>< p={xw |~q>[wl/ۋ΢r{^=ؚQlJ3i]`3%6&R &eI8jʵ)_cWʵɉ)1 7ftZdI4fů^V<nS/:KEl*1 ,9p,?LxF/6pi-{Z *b F*O"ǥuN-ée:u' xv B!:M+Z` 0YliNِf44Xl>L21bQR-a8 UʹjpMõXEÃmD6ȪI(2DƝq=\ĬFl@  ^-Z+"T  $"XX\͢3cSAl{{{qƮںP4A݄ j k QW܂u$ɯΫ'+ [W[SAҨdGyzviP@Wde(L+L/J/ nFjazjQ*純 H F<01d錒E#)p,V(JN*H6${Sļ\X9h)Y Yqq(W:>3@8c MHl6!Cˎˆ6COV́SrSss2ssrsK 3~?oxW|{/{>+ _y;ދ s/#/}xʯ/_/\ !2?<ο/^ߐdK8zk? 苗?x ?ɳ gz!~apτ_p M@%hTg}vڧ8 '!/_Q"#+ /{sC858.H|&&DxFdgb4&q/3ul430~^L&HxZB@a?՟?yg,' V 3K[3rC~65>51%1)61&1:!a" E::6"*929&Mvplbʌ-E1ՔՔU,9\^GjZMF:hƇ4¤dפdצԦ$eV'f tm ƌܦ̺dxÐ&Yϙ9̜ܦĔҸ XHʨNΪO!oĉʼni>'kh LGItRA\2bNB(8H:M4 Ai+FStj^-2D:@;(yZ%OlaCxz-į1͂"1;,v,j`lv*AVIU҅@2H{̲~bSV9$4I!l*z*IktY`D @&]fAevX-V^l5kn[o[fdlZ­pmF;z+hsj2 mq+`5ym~:=A8nj8xׂ4 :LaSc.[DqKHCFbzh%ń9cvƜQ`!@ph#aPaVPK0SCA>qXUn$^?}p`ͧ`!Ah(A'Ӥqxg15`&Ӏ`Ʃ| wQ_m%vurw޽:wo~zg}cgs{wtprxxtt|px{=Mpoco`o`opopo$RvwP2/nB{ؽսwwx`w`w{{ {K]$4mw 0swhohoY9؁D׉۵}.;to >:<`1m 0vY \'rǻ+G;G;s;G vgvwNVwE^Y=_?_;؜]uWꃥ ` hμbknޜbkV=؞FtRҒiYSsʍ9UىvAPYؘ̜կMkQ@NW_r֥Xv"rm[ VтY`VAϚD3FެK4aJ͜T BȔҌc~ݘ_|:WGǰ ձ=Spi.-ǩ;t<4;TBZ4`&hn=t9.=mL"^0zm7@+a Z]'p. dž3êb84LeGi'6>7.!;JIIKO/˯(.۟g]ڵ.\z_zΝ\㹗z0r҇}ro.^Kr >s/_.] ~}ڧ_@-߄h<[@tF\~ W}~W|&E $2&B@Kp?wxxpBċI Adߏ'p럞I_^3~2xyg .C~o3xP'r~~jZ<Wz&Dg~Kϟx`H@ ]Mt G &>W%-L#/_x x Q2Z#"p".CrC9SϾԳ&uD7R@e5 tāglRB0-e.I77>Aen@i!Q4f|&⠉&3a5t NF965.->=;䬚L=)HӐ6Hog"' f7²d2">2&$&$64וNͨI˪MC.%bô4\ZRP; Eqɥ RA=HJZɛ&2b8 %)@90Yg"C q}89:4tL@8?L@=smPWۀkohhF `njC}m ݁D9 X@S{{}}#@ASq 0md cd?NeQ-Q߮tϩu^iZ *. ARWI-6O3A4WduFQ"[f&j;N3D@[H=;$viUa&Izl^|&X6ň?,6(ِU>d %vI`:mN&hD܅f{lNoZ֛9Vn58uVvSgie;m9vlf'C6N<$m&ha2ڜ%vZt:ZsHt.QSNS0S<A~y[Qd-f4H@{$ Q~42hhp#󈐪v ܂Q`,? 0BT8n "?<ќ8|9\=#xE#j >1-:30% LD0+!t#Y肊.izMlW{ {ӻw7V6O6'wOoް?^!pw=:{tp``pppw#8:FvwEG{'G;'!oݥÝ9h h tOW ~rpdpM޲zi]Pv敻sʝ9\c~|Yiǁ9役yּpoN9fTA4Y->6浛F$ s ̆^Tի `=A&:$IE`-X V0g̙E3f;kLkY挚 픚Aഎ:Ƥ1gNY׳ >=۫b8ǭnϭ^ ZCZS+tkEnO`aq-6n\Q2]& v",;N-ǦEI65Ӧb&,rت"Gcs8,T|clN (C#ޡޖ֮斎چvk*kZ+Z+[*ZH3! %ƂDQ}>&$)a:'ЈH]]FtvVH@eede;耀> ,RPy&qA g Qs>#]))8?:+t.As@@$!rQfΞf#Kѵ'&''q îX?!')975%?$ r J r23۟g^>/_x;]x_zνKo=["Iq|❁ ?Bп3a/ʀ W>&/)h_~H ~> )ā85Tp#>g hRp#B@tsSsH=p O?lBB-eNIDS_D~ċ(Oe_õ.TL&4ͩ|GH@2ߘSДWBt PPabġs*cnɇ!lGIDvI#,pHmN8#tv;$NQSu8^Sy.A69N|C-N^D9`-p Z&iE‽6hw:%v B_[oۑnq\vxD}A ~p%J^ɈOJJG=$R:21 z$2R N9h3^# g1Xi2#^/dO|Q yRDģL$$cSR6%BF1@Fs/GdD:X>:Cݱ f,iY:^l8.)k{i`cq{e`уՅoOO?x{=Nv||xr|x46pru|q|n;9{|vapopohFVNN0GEK9ˁ9U<:! | u?wh .&p|:Z9n}UauN`5ǻ'O{rg;vX>_8ޛ;ٟ;އv_zrY<oz7;U+ ڛv&vރvA3`wA3@&Q5[s{y9M5yýyyispWX֮OjjªwbţD2ڭV\D#m-! 6ٜUgy |A1= tEK'k{ k`,in3pFE^cMbdbYLebA(󚍽6ۥc:ZLd nڕC]E u;`)X+*)q։IfʥirWuXNfRZʠVrRVTrR&RLē>e*>FCuFiC#CގֶΦ@sUϕ$-,g$K KO)+ 4u@X!Stv~mVA]&J9.;:; 첬,A:BCTRSrRSP1 ,SP3Z{`sq@@%!F:@(sRrٳSSDRSRRNJ)HJ.HHOHzL~"i̼₂ ,x .^A/_@_z块^A|ϿD@{z7;WxQ)3$H_5ɀ Gk@tH:Gt @HlX卐t p"dͣAhs"?=J>Ϣ?A q|okg4rЏ idk&QgCIֿx*觷o?B[ D@r/_}.ȇahAnD=D\O-jIf41d8RRTx ӄRE.ٍi\:=!-Z\;C@x-XƔLFe4R̹57us9+953fi9pm0f9 )e I%I)X@'&gˀWM΀W^dhF9Wd* P}L$J^bItF.,zf^cvAsV~΃Fᦲy(%B@#/\GH [Y TTUՈځ* lf&#Ю5!HM= "j uCu"ꛆ)![Mm!=t=3K4?200:88 Q}2 *1BƤ_L L8ᵩw92LMav 6bR qFԤkzР% c K=.qKıWo;y nA6@ ~Ϣ6ɯw`䵺AWuۄ"`6LKF\G!-8Ϋ!pOܒA )>f8ht'd 32r_XWrYnzj19"O<+ >ҁ]IؤhlR8A!D1h Fk><- xFJGHp#yV>00P:s/c8qʒb Zֲb%+Vٺ[ݛm͹6Wmom~{rxo[N<o| -H,.?BKGrrA A^vh=&cO}=8qdd4rH ֿoOv=م6Ѱ ?X>_<ܟ;ܛ; 7w;s3}t0n B,pGर-1t7W.]pf=8\xpۥonDw'/oMݳ;G59% @&zYi53@wQ,hlCdNbsNqk`^n[6gM09gؘmLk75 Bz\@(/: vɼU0kYs&3ci5c!dNϞ7p挜y dgiBg@7eM"[o{|Ax"Q0}(~#yE42'Q˚6̜I#gEHg h 諏4pj_@(LFBg8n~2^~=+!ya& PȁFc> D=D\O.hJͪK5}ΨMJKL=}gbI@F!M,sT|ɝb \CCttRY4)qp8~ 'Q\:7e_FÌdc> lA= G| @R}2_zʤu~.o>RSb:_t:4p,fRk!3bVp@'yNA1?ΘS}qf.Ya@f.j:ֲje]ngܞ#8}~q{qdރ|Wd# x{=ް>Ƀ\|HBK'(5Xq=5,p8]|o~wJIZ:@zp'&'}ɮx}?y?}?{rpp2hF0s0~rx eص*Z$K=z .11MZ6w}Nk]VuP@+V5H@k'dqR.RW$x6ɠ u6LQh#}]m}--=]FGu][H=,.kAKQYsQiSai#U_#B=r 둃~T@VdTfeWdWٕ8萀~TCG S-LK- )i%RB*&-4=8}t 9( RQ.Ёal)IyH@cҒQsNMF ?K4ri)('A  j!iYy_}_xӫW}D@;K9m<.ʀ9$y/~.t*/|p_%:)"1"%*-&#= ̆\$ǧ:I$2 )#4Ԩ3d$Dz0hhhaS]ܚWܚ_Bp?0j@#'Q0!} FB9|oxx@?A#bR#AC0<[Zm,i]H@wv:{FzFF{G{C0G}&z h6fsXl,&8*aVM: 3^۔2 iv . uJv~a0%F-1j1Y+h6ϡb:q]1w;e.iSwniA#=ދrmN%ŭ@8( 9hCEA3*G5:.i[FyНNI[bɇupu5:u~K8n~[6:.4e(#]|+X=4> !!.k yg='gɑ$3)L>G khT|lZ$kVSywpoҴ3ܞ,Ml;?ٽ{poew{[o<ЏoEߞ |w[ߢ&H磵'똻=|!z3Ӝ X+$u^ oNzד}Ƞ>\_ ~wxBn|{ʭ?:9N|A>NO0y=' O{8h\ Azo>b@=ޚ}8 L=ҟڲ{3i)7'Чy٢]hϛ &Ryg׳u-:t4;Jp 󬉏`ğ12nH@OilM|E7 }&ѤY7},i3G%;P4{2 =4'$L7i$hY VMB֗p.[~gcn-խQ1]4*31pWɵJل\%?slʠ1FF(T_np`o{k-[*ZK[JʛK*Zwn!>*At~=D@WeVf" ]3YU$ .##!tzZ)k=JZzYFzIzΩ)GIjJqrrQbJaREA'%$%' S -1II>OƙIgR#5v姥 N)0A&<3Ѕ(};(= ܂ĽoX@tοӟ~州_Ͻb^; 0';^(U?xT@hh_!LCG| JЗ6B@!)s&: OBmx2.q.\@ʇ/>P3ne mMN"OOGz.~0r艅W$4LШ:GJ>g# m <hRty x瓿 } >? !'~:3tfN]Rz1α1 D3 t3D+rFhCdžJ(T$U&Wǥ@ 1ĆD4TYMiY( !՟32C&@򠉀F.;(3̜,לߒT$|k`mvڜXBH[BDdtva[Nasz*qJErj%~!ݐٔ՜VKˮMʨN,I*JH-X@7g6ù #ns^&1t35 sʛr;>7CP\^JtEt ?T kʪ~LACGbӏH@<,Osps'[(@S0FZh-֎NZ{h;X@}c!=0@b Oo 0`XEE͢RI3n+\&Ϧm~xFMohlfլՀFZIKhH,MwN%Ӯ!ir"tmNqSw:}Nũ9Qs[9A4եzG\ sPRGyP3ӭ nG=NqvQu7niGދtS@%8|~M_;v^_6 Na#J@5; .aGtzq f/{}P {$i"Jmz%}>ɀO< rzI {vHnw :Zz$CW:dI٨g,X@?䠱}~X@>q0>!b%I)#>ɩƜ hP=O }H@=ZJfP^3#RƜ_@ +|*.OU֒a.ث&ޚUn:U{YЋ''[><^{pw~׿~ݷ!ڈu DpM\0p* *$$7(8قɨ 淨rk~p؟`{{=ɞY=>}N xO`r `}ʏ^zpo` wzۻOV^!}v}e* #hP{=\,kոRfI%, z v4Ag {30nĘ-; V`{κ5kݞ5n hl@@"-] P=o`/F H@S\Գ ,a6sp&(}f,h,:ࠑ6o̘}-ȏ%)4頀>=i=sFĞĄ H&- f$9~3g{ cnͭ5Cn ūt2p,tnc{,U6iSL;'fivڭ S)ҬX\+snhfSeg ^xD@&ͨTY4 Z!UJ2_yC=&1:Fƨ4 mhpd=51]ԃ*o4tT׶Wt. 袲²Ҧ’&\ܐWҘWҔGS>*AR‰PϹ@NA]NQr9y'sŠC' $jNOa U>># @''$%3H@ y FjGjRAj2P4tR^Z22p8. 9!H.#(+ 肛.]緡}7_8s/ 86/{y2[/! Ed/WOgW_<\CsD=c}ڽ=*Iy/}f _xZ8S@G8eO_.7qޣD g^>/Og h"}&1O󝟺3|K{^#\3᠁eރj=ElUۉq/'Nwwْ{W%{DX$`8)"\gcf0AҝϦC{}uh`4 #}=v{ߞxRM*Cg_L1F\r IV+E/]O1݅-^\CW/F@tND\$>J(Nd4ɉC6O(HH.O.K*M,ϋ Z͑@:SKRJa $bst.6&)MK6`^"51SAK<JQX0hx#bnF >x8 2.bDeUڧA*80 ׄ䝣ɺ;p<Ұ`ƟN*KZ^G93S3K8H*˼^uڭ[׳ko!u7s >KuMr<3Fܐۘp3f^̰zV.֐x;v^ls !q (tSAqsaIKAqKQikQIkqYK1VptEkYe{ymUյuuT@7 0nojjjl+uutv],I1A-h첚LIc1JV ``cb͘X;*ьcB DŽ43qyIVefQMRiTe(H*ZH}6btuh7 YE["k0mwچ;#64$ vIM\oXU61 Y eVQiq-QCWYU6Q ҕX7@}/4,5:6Tj\ /&(q*r:oa6TV8D5T5VaMT hE0 [4oT9Na[T85ۆ0 +8B & NqSⒶ] rIP:;i=.Y[ևH>.FĈqY.)v.c݀x\N '(}͊i22!d2tn$nb'Kn2ud`gA݌m΄E/=Yufp 7fǥw=nuoʻu~kyakmm{ksޝݍ{ۛk{[{ۛ;;[ۻۻ{؇G?lnnl=;oݾ}gsi{.*fX@֝mw`.۸ٚ4pYݭ]FUd^-lUƂ]ܰٺ7zM_مαcvSkk[kkUl[Uֲe>aٲ`Z6oٶV6};k]˓;[3;لmdj&7mC ~C[w7݇Yl޵nwn1*g6fڌkX=JXi,@I@juJ:>烊 X(~=h9$K>]^@{7tw;>"9fѭb='z>2gZg)3MoP7T 5gޠקޙ> hz vy>OǛУzj=ZvkzQk=0}kDmtބ1<>T١"g>z4$L7UVTίɫέS~3Fv[%n\I(  h)0&fd&)MG<.i 230J:9%;9VRDز琀FMˠ8&ef2%4r 31Y͊ TQ1WbcbpMVD/A㲄X $D6%*t=捈+Ʉ fj\;n863a~=Sh8 ee&%gg}ɕ_ūoyog>92~ 闞 `9DS+ 4M^@j \x,cŖg<p{ O ǜ#& oy`3N} d5+ U{?_{)~ʯ~؇vL|aÀ@)p!̹Ig*ٙG;==[-=J8Ώ:_ 7jh8K^G؏?m'_z+}%FǞx'xk훏xowY h"q# _Dd2z/2?yUdzaWY>tiK"\q(\AG~j" ꆎI(: '&cj| Jb4"M4JRb⤴n'-&rB?cMGribJYRjybjYbj)ZǵVz\4iPH=&vLL+8 A)2*w#M&iIT=.Ir"*7 ˬ *ۇpe2&pUVkYr !kZHMd4YYSb45q]TnZvqS`46a%jeQM\eWZEε9 "PWdTqV;vAmk:!+2&, CV^})r 뜢]\ngt-9Xaˊ*Jp *0)0pmZ C䖶%nI NY]iv٥Ysq>I!|@\)bp:: hF.!h#|NĜ]^ .6x8LҮ hY')59zsWH@3zFUͩP@YzϩXlmmoRvw6wmowuwwywν͹-ZOfooͷb^Qv;lqw͵ZuM{W};kݍ&Ɵw6ٽ-ݚ 7lۂF4YA9Xns/Vfs95>ژW͎Ό.K<=z?#uϊ)ʴfyJ2VN4W-KA݀OsϏ,)Gqè%DEmgul::kɧq(Oj'A%f?:IUפ{RT]~u:hml^׫Ƞϧ0Þh505~C3yC5x> н.U[17P@QOå& n=ύ<n˭4=I١8zpB3nu+\cNU`W4:NU[:pk\'{aC^4JfmkW[=9}Ymaҹ8嚟Ff'>vgx>N8Al:Yc3jQ7bЌ:(crLxo` ֦ښꪆzl(/ɣ9ٷ+oT.Sz--@ >_-ҙT<8hMBk6=/9=/) $Χb>Ii9>$JNޙ0x31fB$ ̄,n %$a6..3αWcΊd>N:!2*ǔNat`dD2MF3Hf!Aո,Ht:G@ 茘쌎KHML|/ .? A0|x/19i>u3d)B3o}3ϼu~3o.<poϡ=g~hd:2V]9尀o c> \}3g|ɰum5ka-ΰp?~ _()b〿A@sNg3}f4)Ves MG_~>M賯>*lz(o4Lae1o:1o=rG !؋td\+KYAP>Oc,3|y_?KڤS j#(`+֎c"*BhPqy@7f\Xad6q8ƓK Z\1.TYVYmУpU!h"me F.m@[-H-bx!kq|]\cUڅVaUTT;uI]TˤvqCRc'*(oʳ H Ea`ۅvaoy֡b.r+aex0$KJ%irJd\) r6TZPW .RLtCc%Ah&mivJ0Jg@I3A 5sM hzgDC3:4N/+V<3<>3i8Af7 ASY?KA`/}Y${3k y}[dW,9.ՒCϸ7[_r]=ciww]XٹQeV@]ŕ Cw֘:F"l-bh׼GM< &{ 1 054*imϻ{{{( {{;{3Fa4cw|۫^x|^`{=lS[31N7wQCٚFLjE%3+ލ;z *oQB>/OR| ˓(}0L}^Д{ˡ,U> hic1Z1kYGIqihR?䠢7 ۀ3 耢ǧ")^|^ ^GCOz< CwSxP=S=ܺu.SR"vݥrig}Xwk]vӭAkͤU:iu3hGuQbX9"dbHy}}=]]--XZW犊ڼª\\u"'eo^#9F1r>SM<G=0]Ϙer\f79sZ.%>#7SRo%HpH7n$sW#4 Aq1z>, >e^ h&4k",.0hs$>и!VAa49踌شk}R̳o\xun4w:hΡ]N<Ó$}-8ԅ<M7hLI'ǰ:, 4h [xF@S|As4[E3&ͱ(/u[ h6t_+ڨ5_# l#B翡P G?H@ gыO .|Q@{ӯ gbt}_o#|7Wbn~v!L )P O}OSO>4_?K>AsM˧x (I;0ZM*euDGcn_e4@3FdSO YcF@'4CIȋMȏK*O.P SM4vkp43QhpſTƎ℔4eD݊ˉN% Қfxr1}9:ILc=nP ώTU66!vƘsa`' h3oYj)Wk(lYl֌jk$7}v]lǍuؿLx>$so5l+tH@ FꠋKA>薲V8jnNи!q45wPezz1H JYkv˦EmvbԘ*fLuJ^)cZ%g@-D@G#fpu"VYeVIٸ((7 ,rJj*o7GZm6p k-&Kk+^*Hj-z+8z+>UiWXehevQ]\eU6qEPaVE5NISRo[a8/Ӗ瑞^`1zVGN38D 9C1 8Vg};9]Kq"_0 ТQ0gÉ:Eկ87[wWwwq4ƒ>>D@o]^#T@ߣO1L4{H25ۤbbgLz{s@Ōx!^$<^+>H^7Fq>mv6!~vw[{;ule@4 lolEa~k؁7eتod>"ݭyo/o#-"3F 3{%*L@o+fGIGH@Ob  ;Ӫi @44̨'˓U⠉V}^b΄rɧ].V!N4Qm(xLn0)c6آVu:^?I@t5h~,ZHL_ 4.sBs5]^mW523q4H4vFX7mwk\*rЬvtUτcB"$4M2p7'::f91S-nU &5n][ IH6y96VM{5~80Q@A/{f3A;+Ra 5:+% hmH@+֪FUc1dX"o78R_\SXYQWQ^[^V_VV[RTW@srcLlƟJ"T@fA2D祰EyX񜑟@J6д#5trvЉ\w5H! !zעcEE dW":>JdTFTd:Ȉ4P+4K9 _-~fthFc:=NKKo 觟yc_=s2OxLv'_| 8ǟ|/a#4ߠ=m쏀Ͼ|4Ɗ}7]x>g jhU,ϑ44Vþc4o}(*fOc p[gϣf뭅 h0;BE޿>|>o?G@ hjY_%!>gLTC{٣O t ڳS/x(ηx})'_d~YV&Oݥ/0I2zg_>N˧~@v8.f~z*@4?E4l?2ʵ/"oPAQh؜\< hF+nOtLRk'ygƨa^ Nt,LBgB}4u$C/[ꔁ i\e5֎7♳/"^BO}%tzgN`#ZEjV̰ hVLşndު(W rnܪ?k,ID3팾[O̳9u hʭl 򋚁b& tI9 #$lhjl&"mssWsk7+;; bfaR-IV@;67i Z.+*A)֓೎g.B8>gA-o6c ۜ5VqURnV[$VqMRežr&kz.or :Gڝy]l6ڥI]RcUYe!Rk٥ i{6lj+Ɵ+YPfى&d4a8K܈hQ_l؉h&VXD0( +*.,[E6A ^\P "vAMGd_B(w+]B:ba[@Lt5`ZItCXe* YP@c4 ht$suN h%jvIvqe.YCu9dؿ Z>sL tp[szFXgڶi~CYލ[>3=I,ay3Bth7yc^=0OQclήZ0 Wf<ޕIi*7 gsځ;F`04m^Jв:3!be8;svcqsn=}߽ܵ/h*ZʵYъiʔbeR2jmFMR:QhjuRRK>Ւ]&0aR,Mhw܊'QsȉX0e#8!:Jn~Es@7#}Ь-C{&.Uݫk:˯(>c7L45bARH5ۣth]jHC4ݪۣjZܪf*=;ܪvV79fBR4aYhhZ=vcsFg\H|612VL{>sЖ)”cqڅNM9g'3A;6z]T@]VˤfԌ(c(G2X(x~KiOOogGw[kg ) h>֖Ϸ+nʀkJ9$Zq"*Y}GəI3`L&e< L\i`rRo')I)er@6H-S-9jrդ,,@KHˌIqQ<ē/ E:ʙs?uU.y_x6r -Tx 0_Oľ9c'2:aPXSbcM4M/Ž } H:`ꌀ>&ûߋo |7_\gi8)(Xn#: '8hb_dh逎QCM'ftDL. W@C::1ZP+s>3xS}f4l c r|J.&I)&5 1Ⱥx%DCߢ*= h>GF뙞E)Ye*3(5G[uB],\|c@:CnF8eC h,g"r肄yMy@K^a3%((n%bˠ[8ڀrj鬮騪騮eMMM-=蠻aC4otMO0ILZäq5nnap Na3ͬW5 bX36W BdP|ݘ@7!860>?>7>i7yh".˪j. Uۆl:ʲ:9``nq`FCRZXfUd5vYS5:e j!be"8r*WwJ띒s1r eTƒ%!˭|^ >DU0 p"EJ׭ptq-6r&X ]Ժ$4( /dC*JmCC@. onۢ"ZKԈHLt[ᒵ; a-Q$➣p t; Ѐ_kpOPN6(A3k gmgkgF3W=cYώsT.85wIc%h]tg3F~pF78Kfh0h-نy˓A뽠{mingg ӑ#>>W4 P.Pi:)`42.#Q#]\Z%.Z*daFj,yT@ g.KZW7L3mҰA3״s~wNSKvo#Zx{d]ǭ=YenuahQ듖mx{sS['Y76T@o.hp<"&ZIP_&EcT@zP@ 0[{>=fiBR!Qh"5K^ZT;Ac}d1JU:mZ 6M/Npz3h7nЯc := MDŽݫnۂڎI]社3h C }AS$׫Ak7Lg80y<"ڮ mG!z4UK⢝ѤzBQ.USkpֻe3> 5#E=Ɓ #c{Mwȃ.3լOKiqvgƹ4;Yvq4 ǩwI٦јtJfXŨ|X&~{:;{Zo muuՍLFiMQI]~QunAun~UNn4&K218n&&cљIctC&SsSr}@Jb6vC'$[ Sn +)!1.313e$b74+㮒ka:2*!Ux@Dd吀0qUuXqlt M^11QOMOIx{_>ϝ܅W.`^eOp7z%uX}g33o$žyI^x A?;cV@ɣvYI}T@?<^&/|! >3P}>l)GgY,W?J'}\ߜG~ M~$> W˱of/\`8iՠ_Sg_}k>P@# {;M2I>Lハa?J>JG),||jY: XC Ѭfb7/"o}}9*}9c+9;*>Y8h*STFIg.g$4QLE,E R 4 t$ʀ`cإn /g\y)ǰ.E]g35{ RM3ڠ0 [ f͵& 7q=K 7تh◯]Iۍ͜ƛ /q>I#IGSvHFΣ%/]P܊&)*j)*ZKJJJJ [+*۪+;j:;*۫k:kkH G7jFT$ M37h^a7(]6c|>zuFRUjZňV!׏P=򴣃aϣ$o6I}M` ,b,W95%6ic}1msu`z vdM +%0Yj|JPfŐrMb* ʭBxZr ;52,2:]U[v*ph+BGӂix),GS*cB$2F3cD.c1L3  h="Cǣ&/,H$Lۡ3RC3#lL|>^g>DㇹJz;2AzB̈́T@Ö= *Y~4a;j8Cv %vq񠃾Q/1T;pH@KfO`|*Lq.R m~e{PTu(5A / {Rt{]eDŽd[=%n jI}[@ hS0ewN:Nëi;N/t!:h]?:hfЭsyu^ҲuׄOz'4V5Vk˫ljHkѭl쳺qBV7{mm1 M^k>B@0iwmKλsى;3)'UϰY|n#mgaA}֚jVQJ|lT6,H$"h{:/-]͍ 5Ue%5E5E5շ9-F@_QzI5>#-[w@.HINKN%eJ@'HPp59@@3dqB쉎btkqqba5WB,SyRf^4}N&SD@uA86H.@@GQČGǿy%$_x\M4+E h:'|zΞ 9ׇWy7Nyɧ^>uSg_}2Qh}wnf23TLs}&npQ 3]`0\@[-x⣱o":Pk+5Q=ao?<tؑG*?\2֘% rpK^{$>Sw _rkf3 {A3=?a?8ηx|ą%caKk_DI(O%`8\}AS>t?rb/#/G\Bf/d_\;;2!J+$:$/GߢF4t|jqlrr㜐V>F&91$941(*>4;3 &a4P30C^1V@NK]F0s`K4L:x8̾:H! PGr]d3@#@k7j딛u7(.h&`4SS  7n1caޮ[O4@tB*A75$ -h n!qUUTUUUWWUWV#5u蠱 5t=Y+[ZZz[1 讎Ĩ 4#q:]Vlm&٨6FʨQUc:~Lj4mi׏KfhMZ9%VA]\$5qU^mk2Ap͎6h ˠmF} ` 49!I5", KRCXlhoI*cmW:IUPd*8v~_;DeVaEPdcFE6\ʇq%}&4P@cFCPb* -Cp"l:Na5rj^*XW:sp|+Pd*#npC)$[V.K'o .1f=r oI)8u88*|Aޙ+ihU,9rИ>$]EfkZ[:༶8oJ;o/f 0g,Y$cJ,[ {;;[ۻD01Q+Czowsw6ZM4&yW]%0ƪ C`a&T=):#w^hicႇ3{T4SBXqP<,D@( twc ϵ-55MUueEEUE5yUoVܮ]vV[eon\N$gJzCygvL)ئ<杉\qjz%9=)X979v>'hJrg vqM&$R !}=:zt̍D@sVDd֕ B& L 4)fd>@@À:%1򥸟쏯w觿M@s&) |x8,'ǟ'^xЧ{:(= 3g_#HƘ\ftCsv/+;S|>;aoW<̼7)O{̙7:S^kԯPPUG 2a6Nnثj>VW?|+׿eKQ.EtFM\l,@s9aT@)"FMt @M2NL)N@5̆&5'fx q/"2/^b4)pXT<6A|{<7/Ћ} [M4ݒsuƵʴ,LCS+M45љ׫n\Y{u D= [$Hi@΁mQ0ߺ]g$Yv^Sn^E]ؔ_ۂB.֢ʰ 8jj;k:i9ξAX)dZ̤U[:0m&=jИӸdjJS FEZyVާj{}4k6vLzpk1\o[6åvq]R!h\~&]Zj au6i= h)1"q׾d޾kZU1z^>\gO6fThWgiŁ0JShJF=}333<ʥ i3^P-yjޡwGҼA@=cZe9|z\:&ѧj)ͧmh]Gvkqk{۩&INǯ~ףú]uBVZeVYM^T`ZQVֹUnMG3|"E K631:S-w;A┑&z~ұ0嘛tL~s;|n>;,j۸6,F[ 9 hF5ʥ/ y?vwvv4w\YXQPVQ[RVSX\]PTWXE7H9e׳Kƒ6o\g7XMW h9%=91lHdͤHjs)(RsSp[)٩D4'Lb4I0 [$-9jR|&%1.!}5)jbB(}=h?Gfa8/2l1w|dB@I"q:Af ݥEEzqdDM̈́q$Y0""/QtóQQp pD%%=$?{/sg߼ky= 'ϼL3??;fRƟFM3@CO~ӯ> Ә&fOy剧^:\^'NxWc/95 қ շ]q)٠fG#(~_<~ cp<|wǾ_0`^_j關~fNr G3^:{'OGix*N=.a?8΃a>+|ѓ/?rHYL4!}GN6G@Fs_y#0W8 _/&ѿc?F}S͟ͅ1bT5{b9H q")ICN hL#]ES:TLgtQ7YjhZFd4lzq$L\3aUufB"q.d}/#^fpoG`Pko9.:}QvN 9,fuӊhvntE֍kk332F Qud6s8>nœ[97> DStטpn+j-PP܌k`TT VUuD@WtTv` Gwioolh4:薮֮goP&ɥa\5 I Š&٬7zJThQfxH;ӑVޭwF@a0nn6:p]`T[D%6qUTl;ZW U[$VqMRQhym*o#vyMZ;evI -" [U`b;/fAU(2+2[hVQX1kX-Cy~fpb%T3!hx >;AcmJLj⬫DT4:ōNaSPkWRlAP@[sP!<*j%r†. W@we]vq8e.i8=.)hS!$'B h0MEhq'0!:>P@`s/2> ޙ>P@##ݓ Rp`4‘*y7k,GOKvŢYhysA`[8 fE`Ιs㒻e}ڝݭM2C f(jQ@ozg21Q q+2vw}oȴFzqIP*`Oa10ޙc 9 o 3 xgs-\pwkqgs~{cfmsɼ{߶6ޘUQg ƴrcWf3-ӿJ=3ϋ1,],3Kg3&ьQ8cNzn0tT~e;f%}AU_@u~M_{~,Vzǚ{t^mOѷ{u]^]w@3i hjڣ)|xpOAtOնOH)GG 8TNMKWu]aeM`sKV&jcUjdp(꜊scF /gxqQ"SьK6] KARа0mX2ݙ,Nڈv.L93֩9Eu&:Um7zF<7(Mz@e)uQtT."!O0 uwwtu77766WU5U7WUzo߸]v=Zv[%W,ZL7ҳ IYh3 B r$HOMHILMtJzaRZ~bjvbJv"ܠ:{6n&' ptBvr1: !k*cc`d78ƙ+/_ɸrDDeFFYWELo.<225* `tfltf\tVltij0FDRQh̘(i YQQ|O?|~g<ճk\}d DD=#d2l&㠁3"6W~ɗ*IW,SAasO?%q&d~ ?}<p(S4tӴH1 MЭmtO}SW]cg}cGcc'I@ۺzT<*DCjLf1i]qd1jjQc2iz^ҩzը^! AfO'A>]a hj8hmt4SH,>ԸΰKÀ3ɬƏW$q7>>ӊg׿p\ݭݭU2K;[ sK06\uҿJ4tH@I A{E[1CLݘklt@ؼaXsfFѴA8mO`h80 jNcRTwPbGT?^~g-6A|;n怺)n hZ6`FOwu~egbbܫ Z8~@t4^-B, u}nMτh;'t=à85<PuZ0<\p8:ޥlp)]&lP5Oh1dmfE<M;%>Ţ_s'_ LӦũ)cqڹ0嚟tA ^SᰨݢӁiF ذxX* ohppod>WW5VT4㪃E5%Uy+hT=,z%Y73;3'|N&-aꙂ K3 hlN+HNOJ #VpPo&%\OwVp7sVR\fBS̨gϡE蚯0&D8\m8 h <@@t1QT@.~D@G4{Ͽ}ͧIЇDstfO.O0IM:`gYsDž φB( <܏gg-p^x'^x(癰Xwq7Ϡzf3@{Es?yu*Y 0um(6j\xD@yVn: +{@wpՐ3&|DjHy*v~i3|fz0{"w(Àǟ|JgžNwD؏?`-I]"99PA[?{ #~+qpꩩA&T@s4ƢqyCП$@a\:h.#3WF|R [x**>hhtT1lƬN M0C5A,J'048DӘ3 8rOLt*pM8:t{?p (la hN,KZy*Z5lӯU]H.rg\ʼQ 翓`氆o4Ьf#:Tht]w}}wmCg]cW=@ ޶֞6,h="DC2O9**8FbҌ4FAiRTTcz\3,T:]N# 2;Ƈ[-&"JIݳ.d)Bxʊ6.`Pd7euviURk: .ys9$h%-(2s1/ b{*aJ&F-(#1,46i ^yy0˵ 1\yX!ȳ mv*oW`̳y\* J"D3㠙CvaD"\N%uIjp3X']eC*./%w&-isK;\NL@Ky&gqKn KKL&tOЬhgO /aҙ:zj LzV?ϫF@kP@cW\Twyl Cs&U|"1 fͲՀy5h]r͹8V{[wVWomZZZA3knL4AM 1\>^@cf_+`9&$^i@vWpn<~ko>3 b;d_hl^Z#67awws-L@m-bzs~csɼ{5#kwgʔjy˓ЋaȢ3Ntw! E'#cVL=s4>qIH@ >&tГIM_3{.ǯ h1}~mO77 }OPԶ{4-uOS5TM4m>uj`9kԷMjH{ԧ Ơ9i hի6 AL\K?1{M焺ݭ2hÀ81 +} 8谮XRZ M908i fDH`<)i 3hVhYiG}&o{YkjըJ1UuGԣb|G'wM$kn6c,XQMtYPlGWZ$PYVցJ.sHFpSHs5- +-bP;4,`ఀXM(AR X;= ۩p@Q=Qz`V50`0\?g,ڤw];ŜY:g s&Yh,YqѢ}װN;ks9;vw6v6Wnzۥkww7d>>.~2ĸ,!70niH!ML˜gaB2c12c虹7>Ҫ .;[ۛ[tMd{cos&l.lu/,k3 l hbVjHڔzu3cߺg`rǭXPnzy=/: vż 7>"3ɜY<;gQ:}6 fa48m2 Nǣ* gJ5e:6OW6T't^mk@2m45EWQUT>U_\ЫnQmnMϭ|wB׍Y Oyt}^anw5Fj :\irB4vn >#h\i@8/ A|80AoL2:3'J9VJ-o|>HINV"->_Ks5>*3.:#6.hQ@g\%k}&tJH@3c4dnān>a}W hЙZf&ƣկ>x xӸ`m~>oKC\(L2,\}Յ/3@q>_cc),!01W@Swqao0"Bv&2o3 hU0旿__|/ a0K01G4u05 ?pha{XCSMChXA8hAp h+$PM"pLL"]&D'QpL&ĥGcL/NݨP .IDGL1:KQX[z y/"}~9/Gjk_F^2NGߢ lЩ蠁kS*k4Wꙅз h hʱA?X@ B-Ř.,i.*m).kJ۰ IHtug#iݍ蠛[;[70$G1X5*bXUMzd4:VP)GTaW[hzXd:Y^ndmFII2.o6qk5dMvY:hIU]aYPl$Vq ytJ8 ha[m0Sנ[>Q@c'lZe|U:*>{pqm:km[^.";+4Xyy6~]X$]L#3Dه \ȁh"ebl*+*ET_ 4q4;%@]TobZ\jD@`"/A 71Om;čX -iqJZv-L-nuy].*YM3fp3.;gxM\3όS:5Ayp?AthhICY7V3,aN3-p39sl1؝Mh*7LY`"ӮEis\v[퍕-{Е 9Pjpf3#L@#4L+&Izwmwwp(ΌBE3)΄>8}&{aHCz 吀w6,KֵƬ@@O+VI >ja6 g"Uo+f{[I4 Hyl=/%&9ZBd,5\=mMy&ތ?Qh~P7SzU>u_M7|߯i|'h2vOz=Acg@W7^hi=vիikImäiZU^eGQS5M~%4uG1h{=:Q@{&]nmׄ<=nm[V6jU*֥# αF' mG5 ДU8L L`yΧ>LӬ8[v"3~0g=0лӦ5fʨөGL,"?D7moiis}KuMcEeCyECIY}QI]~q Ӽ[vv9G@U WoPMKF@cƙ0FnSiy)͊f$IM"<$) S%ap-1z|LV\Tfl #cc}Ί9,Cͺf2+S._J>*zdTTzTTZLtz\tF| oftlLzB|FTT++8z7}Mg/qܫT7ꙻ sygI Rf}y'O|+Zg^}kϿh)}0d 3Oɱo{O}} |_! ½c- Pt<ʕGdX ZNQ=_+v_ ap?V) M *h>p53/<}z:=aDa `6cCdV@SƛA^ ](asX@/Qx>.?~aPCjh;~+~aJZi.Th\ MhVCSh745Ѵ hP4WCSh>[Fdύ PM&Z Z 30Ja &1/dqDtT7_E1Lv? RgR?2/`JW/$O)˺ףⱂ^}u P \X:V@s3˱xא[O+8Z8(G aA]mmU5]5u]5u tYBags Эݝ}bpD&KrɨT<, nAQUc4SIE;*a El6FIQl[-H}&E%VYM\ab*)4fĕ6i]!h.ka&g\uPR bᆨʆ&F$%V~e";*(!}Ьs*ϢJ-@]9p /ƻm̶ 95cC4 h6 +Ř*p*t":حD\ί+Z)mq[f.wM<o ^˷ ֎Gm'MдcբwҒV'V)&[\6Bh蚉F1Z|G@T:&G=5Ϝ%Q=+S>}2Z h̸p.cϏ `,^H9H}nв4! M4! 8bwwo$@@]*4w7lޛX_m/guթ1`}F:XjeF:gקS}>ʻE@hCmwJ #}d#il+,5 M7eML)`(]d,xtm_u]AC+'ݓΠ#mi۽vlжyխ>M_5MA}sR cW F٫inhz=EzCŅ{ܚөjw[&ޥV; 6Va6{t{}>À8 f9l36Q|4-L IB-N:'۴oȳĦNLˈK>yw_y/猀gv)Cg RLa| 5 {0a̸Dqgc 9/ I'z !mx+gξ~,lSǛ/0X8G2oIVJZ5cCدGN< aoIǞN~+ HIN3kM`# Nw}Z^}G\~qÈ`4;C8>,3 !K@곟/䧿/?{?#2g"w% #߿qfL4GISVwDS MaetX;7Ͷs9 8]&K 59i dGF'#D@_͹{;2! 0Mj4N'ib&+c #r*p.o3Y[ͲqIYZm:UEŰKm&q5Ɵ]N:h"ƕ UvHM\e@tVsH6~)V? "PpEPbȂU6 vI;$ X[5;UNASXxm06x:p}0λmc y$D\lJ"V@"|) *ˈh.55NqC┶9-8;}")[,⠋RPKQmEUN jm6aS8ENaS~ 1 M #%]($a[ 葿[@azN=/T :޼?c͘ 6E$o(lcs68Sϲq10;.LM>v8gДq(` )2& }.mW ;I FS)S7]nMO7>]W3t ]W4Py٭n!EϝuWvtnk}~F@٩lt*뜊ճm6[cMuWb f]4cyğ6.s h;@O:fek z>a¡u5n4zUk5akGU1X& xC޾?_Dj*kq⚼ªPVN[o޸YzFU"3oe\+̸ʨ, -LihRqH@'f'%|NxN'7tЌ&`st&1a:2Uϗ.SL8g(,zFB3\uБ4Йq1(/QM5/R޼!x+4S?|>YI@#{G}xa|*%$dRS/=˧Hw̫gξ.מ<*k1o. ÆYsG.wkG{@O h L@,j=%mRo/ {{"A_ {o0&ğ4{ Mq qv #93 !ةM@w t}λݏ~';_~䗟?}3Og)_0Ph;Xh@L4]ɐƢP?Es,uTs?,r0dSЁ$aU5Y╬/ȎˉMωX4D'"T4[@29  R$&i9446o\Jb'_^ɗ)~J]G'Àjr0OL&m-ۀ}&$$II%)eiYW+3btڵn>J_Zn_R5ѷBd[ȍu7aLg9Mssn7ٷoݦ>>;!'644悢h+n+j/j,(n*,.ҖR6RZZVZQVE8*۫j:jj:;1t6475uMmBP" ۠G$ Fn2LFѠiZBV5czBj:iAbİm6˚FɄEmfyEfi]^Uc/*( lhr 9`7X6iMZGZ+J\I ,35(kf!F?S ɑ^ ͬ}ft3CzVuϳ!|Ait# E=7 %syh"^J-9h,]#ڻAڬkgѻ0>?c^[X^Y?Qݭ͝ջ;[ˏWxJa566$ 02I-.gtIYHphICp3Yk;C? wㇳN>Ioo-n.l687iJPVccU3(W&+r9ZVu?W+]\*0PRAbq; mI0680e$Fޤ?i €A4iO#ak74^MWմ4tNnǯ:ISߤ?`=ɫ)m}-k hZ|XV59.U넺}B1lw= 4\Ѐ>si{Vhk֭s+\c51ζjhcq4M MG3Myh"fyl3<(|Yngg}~o炖ـuo񛧼D˦p=NnkոA9nP jD1*%B`hph`kn,+))*.(.(-Uo)]vVɵ0\6BPL7XfBFBFgI"ҙ甴ԂԼ[7oPt F"o2ד%b3*x׀Q11i1(&YѱW"T.s4YQXm7Es4khAf\3KTd:+)\GJ*ghZw ˆvdZD$Öң3KK/ PMV D}T@3+aLE3=N E'8? z$N`d9u֏_<z0`xy[q;|/>z<}áZ@9䗿ں@_u@wrK|CM߈82t1jGom=s_=·('\|+ؗ l?v7gV@]^'^|I32]un a]n4 Sk{#]>~痄>ɯ>~O3ʯ@~u KlkVH~i~A uИ&k|q_Oi :h6]NC42lT@GRf" KQL(g8 _:fjhz" b b⒊/"}9%Rq)+pi~ cꣁ/"/g\E_6{"ύȈK*LJ)NJ.mbZIrFYJVEJfy*l*Rf[8n\}GAA2V]Vv=lL4uT@s98rro58o 9h( o775J;`TR\Z®Ftg A39f7 x}}}@?7866f0 :Ѡ15 Nm(tQzT;* dzIIiu&IYde&yӸu|2\kUVIXLR6AE\b٥VpFp}!oJz&g\O\k=]oۅ6!+hV~!\/0 -9|,6H!Tt?_QiGam(gt}𶝗k"";"Іv~d).E+[1)2SNr'2ݽ ,P~a07o!M~JՄVݝɵڬesδ>] VAؽIje hr9b] gF@z>,glqB ,@KQl3VU2XgͲq᜙7k)=lI#σS~ꠧ4 Fq( yY09. ~=ϧzNݧi h[Q>g:}^a hM}SNjʧ Zůo[}f)nԶ^M[TTm%̴Nh=`^pz-&Hc=RucEMQ-wUnUㄲŭ&v ~`<8iq\҅EwlY}6}^Ô03ǧ}S^ ϩwԀۮuunaZq ӪF5cQٰ\" ẃΎVh{}]KuuSiecI9:X?ƒ7rٸ }κQy(Թƙn,ma>S};$FNsARj~RjAJJaJJ~jJnJrvj͔ɷ(:hNLI32Ӊ}wVp$a40Kt|՘QW#Q@) ihA+(|IYyЗ#04 4J^XDEť'%e}I[o/~so]xuиsҼ N hڿ* pLR~E0I"rGN" Gc'^|107塀qa2^(_!}ax?s$}ѷ heg}xX7@_AJ}kr$0GpL1BP'_y㰀]>H} 8!?|w?/>D~ jhFF>~O lk D-Gc,ZAa9G!&6r܅ 1 a%"R톦P M)AS:렩ɥ*fjaMaTgyzp F䡃N,MʿEiPL^=2 ȝ`3no "  Mtp=Q@蜆9u@A\Y]ԐWDj%-XFk:jkIsщ hiloy<>/ ErL zZi4hQC4zN5Q2Qv_#I v(A=.7Jj:"[efyEZm[DUTW,B6$ChCnr4;[l&*mjJj-- h*-XV>i*nh^eva,h%Dݒ೨)rbr ̳ݶb96Ct΅v~8X L0+Yno[or)KCX x3pWE֡R+.7չ$.IK5:DNLVzbC' 2*Wڇ|6TiU!L[Tp4K8DYt18hvqc4&+4;kc#F7XM\MT@z3ځ]vp^Ǜ Chd*c-X$fђ]/Gչ9ʬ{}ƶ6No_74yX7~owc{c61 'cWh}F=Pk4-ܘQ-GlI'͂qI4 COEOе|/`קcr`o}F/7XWʄM_[{Ueg-Tgm[R-f&NZAVwやz(pzmfh}>\t`کs(\P=&"]~C84&CvS2[(|Ev!` B<}h'=>8a h`Lj^iԎXRP({3: \ߨό&#gV@?hw]HzQ))OJS>NI=_/9fbаw#1: DS9!Z|\VL,逎Έf7P@G(c&yйE|tT>u23v3~9ݥF4pltt:{?q::trՋG߿ʯ_{/|}}3oi̙a:S?xcgy9sݐ5;\ c}QA# DbRnQ^PAX(IS_Lppe z3~gk/뼰\A#2k?^@XOc ep tNr ; g-~v`ʷN+xx(f!0M@#/?x~W#4"p4JQL4+FM|4*ibiAH52ܵ i/GX1Q)i`4m`2KE*%bYL2(8\ꝩcIhȈO.脼KQ7.^ɼx3,e$\*ϒh3g>'V{ >@@'` !MR4 # mC4[9}ICzFM!}=i h|-'EyMaqKQqK1lDcp0 t5;Ɔnnhkl <`h/G1^o6zdԙVUdž5ͨ\;{uN i6m%&i͸,k1ZͲf*.D=vIU\iyV~_d9MVKsЎ&Hc.oCRcW]o5¤S@VdW)Z4vfA\,a!,cE8eV;DUFJyVAۉPf<`.,Klv%k84vySm%L":b)A-nyq ܪ]Pi}»lCv~6Ta*gFQ@!jr`A4EnНQCu8ŝ. 8wgCo(إ=є~遀f ağME3DzfoV@4rsZތn`V78ZAy#~\h^L9p1jzk3weھw_\Y\r7vwwsuoȠݭݝA-# efTrGsE3$=J}N@6样Wv67a "-mܟ\3h_6իj?^̅} h}F}>.4I1z.lY`~&,&~G ?c? N. h#4^ 񾠹780y>P ~uO]W1t MG1taFkh[B6ǭ%u^=߫4vUKY ;Α*XCQTָU.e #5^}O0LA+oΟs؂W5 ~$A307捀pԹZUjQ=ST@+#2*C}XV[\UP^Q_RQWTZ_TWX۹7sX]zf(|]rKZfA:},IҙˁwNJ#ʎ\ a'}&:796}* $@ݜHP@'%d%3\MN `55 !Y0p C̘L?c h适+3+*/}F !ˬ_ftĕT"}NbӢaCБXh2&/]ʫ~^xh}o9ک/=Y@~>$y,N t f.0qg\Dk('6F@?ʩӇD3KaЗ}iv9)a׿ zoȯ?ea m?{A_հ/ 7{а=b o'FI]|}'?_(L >FQ hf4,a~AofQ@9hWTP M4͆)\/j/g~r\Ir)]jYꅏQ0ȏO)LH-蛤d#//gP 2S><ϒ><.S B_u y@\Rf:%+X} 'd}t8j^ dޠ_ tICgfe0LO4+4kpt^as. &!bτVR6U5uLhhtSWKsW{'%a@$GG*FњL6b6 z^3W4Jj ЎhF$9O'KZ F0Jjf\`Z@[UfQEe5VYM\M*BmVi `9#Αp}.# ZF4.*('k5*И 捂Eh*]-yd"cѭMZ'-ksYpǭXoml]XX^X\zgg}gsu{syeqdF7#a31a0Q{~ G4..Kml/n흇__f7M{4M&M{;hҕ#1EDEFQRو  = &Mzy_9ρ灂/Yl,ٷnڴl1l%6ѲU{ gз-B )-A1YsycV,l?81kW{˦v53V߰A2^f6(PoЎգQB xP4 {zy`ie9uZvUu}yEmII5:* RFniVvYfV =(=h> nxAJ@Өɮ)y)A:gsB0٨9 4FI' hpt~cSzF&@4iѱi17o))a~L h(g|%] O 3WiaW|y7D.S~'a #“} hZxrP8H_~'>='W˟^~OyϜ ;t)Dʞ}>B':+`@|Vڟ@Z`"cƈ#;(Z(\{7@p3" 4yxAؿC@EO/`gDwabc(.H?Y8E h҇o8zYtP"ߞz.yw}yP(OCO./S2Z@M@ D@R^F'r8h1З"`Ÿ􏸸\VLj})ML5:h΍Pp+<\{ "pt%ZbQo.}w9TIGˑBb=BtD,AǢ>13RIGЕ@1uliDJh h 4嫉rXC4"l h,w;`_w"f}ahƢ2vq8n<*N A#j9 -Mmm}tdX   RɨVMl\)S+1)R1dɆd ׀)5JR-Qf~bN=X51P6[/t*-LGjt%+4Rk$CzrrrZǯ,@;Z h-.nz}!кnR\aaRl.АyPܕtҵ, y95/{Gk>joTgNtdi`-=hWW8"]w' X(aqQsWk'j *]wW -߮ZOݸ8n{* k =ՈɞꀚhЇ'kz} FqSZ=W,ujG#X^$d+vӰ2Iv&;(NPmv+١l9&(h2ƁtfYIbVZ[x봚hm-veMƱHkM ",3YFqQ65NI:E&8[o7lD# &W腥$C?X) KRlR\55Zg- U Yժ˩uO=9p"z!V۪k觎s'>4flPy ?{"jJ%5|ʉ82w?x̓fy~A.J ToP0 TA>S>")n.[@9$?$I3"?Z@~Ν@8ׄh @ M8DC,TA4%44hDRMio.&^:hM441A~G 8%2!4 d1qQDta,vdl._I!/|hw~N{Ck1D@yR )q~~U@Y|W nV v9@LV~3⁐@8E(A3D@3osB`s> <#.V]n0:'!+?@@3Kp~]^AT 8X-6N+bАpppX &ժqJ11PeddH"Jc\8(6b]䳕|8Z35|`Pz^=\T v7`GAA\s7* <2HF*`vN-&*&jt:-,@@F_+A'v -?35݅h2:@@{.HÀ{0L,s4]yt0,mGoOWud;Y\th51љ9;R+|-@ә u]Z(FW/"nZSj+7U*A@UOVg̾glt-%Z)G`]Co_=QA7"&Q4K@SG h~&y&P9{tw&1 !GΫok&GuCFyl,_/;`b4d/;' 3k;K˳s޻k[+KE+B5wj7+t3aw!C-ucensٵ\0oNV9*L+lR9>/ڧZBz5w MS-pj3n͊yKAʟ;rTyE]c/`mNkfٮh+ZVRm9h$m4ʚMc&YUƱ)8ECɛzޮj:JU6IDfQETmՙ5f!$dM R& ~faJ2YF$7IXSIaݤN'R%ڡbdGH^Re5`l>}Q0 9x&f2et,wYUng20} Q;˟pDp?4; vnk[ Fp}./-).dVsKrJ2@FVqz3l73ω[&ťK@| ${g>g#83ihЉL-#1Nuп*,'e$f&eB4'4)N#bcQ c"IERXxs6|9wА$>$ aO@AS!3AMKia#"iף#hQII>?JNHC<q׎g> 47qࣃ46?u=/?_=(4Ix9L =G!:ȯQicD@:L4:<[H {@e7:P ;t#5xAۿAw8~ډk~ @.ߗ8)"Ct@3?X@~/s^|K>H>>>?> ?|G_\A|UO Wa_-⳿G~Nߣ:_˅X_/8߿'!o.%}s:O7.zJ+]sD&ŕ_"Wa1qy¢W#3Dd\̸ )q1|ɯHi[MR>7>IR5"^lb>0'E'܂_/@ 4H(~*%:92V d8Phn YA~ZH@gtEn u],FY t]OϩO˦`䰳L.k&i7MD^AsN!EKu-yEm[EmhPҊ/n6=,Q#"5,5a3tzYNG tde"RGʴz3#N/Hg3 ip"Ro` S"DZ 3&o߼~3/=%?f>Yv#&HNIJNNb\ϸ7Hxbv\A@Bv\~GN:r8x@.oؗ"Mq 2w{ۇً~4 5:x|'|%R!$Oh/ bt"ɥw/ @^ރm̛@?x!S]~e#@}a0k 8</] NRCϽ}هB/(g9.tOp>ps ?Ρg >sσ*9A?ç&̹}?}A<}w'{ 8rꩃ C-B-B-B-B-B-B-B-B-B-B-/w1|~IENDB`onedrive-2.5.10/docs/images/business-files-on-demand.png000066400000000000000000000354301513710110600231100ustar00rootroot00000000000000PNG  IHDR܈sRGBgAMA a pHYsttfx:IDATx^߫mYvow?IC~~z0S $>1X%)B@Z 4:m:h4-__S[Js)?k_[ۏ³sv~;߹N#No톀GjϿ4u6"|7NE4-  1_{/HZѻ0%UO֮^?]ֺ(?oT{\ўPsevڝځݦ}'v8'~~BFޒƉLϪWou^ 󶗰d[N'4$ַ޽l?[1/_3WڟG>:D;I7;_9/r僕T_)Z*SPZy/++ %-Z_.pdݢ \q'hm*wo[۟{淾gmѱ38 65_j}oroY4K)e\uhT֋pשEajMS^~o D4];C{>=?,w "|;&:I暪6Ŵe}Z}V$փ';w_a/;>R{t͛1F;y;|{C?{*ܶR_ꢣʖ/߾Pb 8,O*e8S|ąv6sc"vV;Tc 8"'^wʤJU:Fs9f;@ߐH/`K[YFM}/_/~N2~~7eMR3î|B" I$EjnOkWT[\Yr p-|VQ ߧ?zJ8 4"=YO[ Gqk=3쮫!Ef۾OBs^dg|> w+(n'7/ް}ǐlK#[>Ηk.,|*xH]kGnܒܚ[I+9BBo4R5MUw/ʿrd3PO"S|/Ta<|dT̂)!־eo;wt+}s%ۿ}{.۵$؞eJi%Q򝞚}<ǰh UDb{{[LfO5J{=Bnzq[[+N"&]|m^8g/՜yGVw\~V t> OրFlSg.x2%d% _Tv6ul |`*^Ƀ9zg <RǼFWj.XYNU&]ޑml{-΢6VO[wh[}ƚ{G=/s~=_~_z5o1OQ1ڸYF+NwS{ewRBdpس/u!+U ,v;}q24IL_l%^n{>+HF̤IwD:G7uyֶΙS{\GTL h ΑM'\E}XYzc;Q{s`Jx˥zkZW{jON;Ke}m91}JN539haϞ)HwS X^5VspΑŶΙՕV޷rvuqڛlZGg3;pISB GӦnuxۧ?b!fwNX>Ej'l )~:k+,f@SO/>Y{+ѺT5ʫUmSиv>zRm] , };5%[u/Yx|xzmyW%cʴ/)ҀnZy&/AyiӤn!:-56/ekj6pӷ@͆˳z_aCz!߰u3/a]OZȔ$k)kCmK07T͖66v,L ˙8[U(p-|VQ|ߚGtDYO[ G|-~pg=n%}ys['ܭ@O9/23n >pOSU=|< o !AB|  $7@Ho !AB|b_ pf^o^Qie؜Xv5|{4IE 6'o5 J{mV"[}|@XN*߫jt]"Yٝn!<|O:&]dmF7{d!y24eUVx #M_sߊmfUG&$S)8oIgsWVߩ+GN1:4-EZ~b#ǐ>pf|'D]"괂; 'RSvmh8+7,AB|  $7@Ho !AB|I4'J$ AB|CwϞ_{1½%lr!NfcVZwk<@زNT~ w#&uKפʩL w[pD;gG@L\ =w)ڮ[szX$qvn[ĹԻ5Fӱ|K`:yLI\6O75 u S~Vhe-}4[igVZkZCB%CiPLF )/Neҋu0չw"Mߎ:vNWv^1!eJ[-6o{C++&V-4eKbkD]WjuSjJ)kΞr~Mڵ[ il݂Y >oeS'ӧbüW'C1 < c;-""i%%i)l.bT6Y9l)LH;!GaHrzm8n)k9Ŧ3Uq+$ZWǵ_vBqlZʢڲRu* nJ "g<2-,}͵E0״$\jJ٢&;ZG)Ύ.D;i*v)Ӏm ǷVhvSq Zn5}_"ֱ=fY;^N+UYaI^){54;}l^eo pXѸE4TƤ2Xɫb5;}ƩñO~S@C+'d#&fqm0u!YExFUHny&c{9t,cYj룭5Eyi|[{CfMjvV"x3kFjWJ-bmr_[sw9ӧ7oo!gTֹNKR"z^)#r)w{hďHvcd3*$0ܲ;T[efZnC,õzVo^jd{E- -Rl;qYJt#'"r 9م?~RLRd;Iw]j>.} }_Cl]8NvODv )?9y  awW79ԮJvL6$t[bJ|1*eWXEѶ5ZȐr0̫J̡pFF$r2Ȃww3֩3gjz=i) &פ.B5,plRn5=-$.ITa'idHo!{-jWg1H<~U1I N۟}fm^A7Ūf^ܯ;פ]/8ՐVm$]b|{UzrJq\":Z]^DVo3xFS'MA1{Rݩ-Rm8JvXk:K_oeO #.OkՂvfgivל˶XYi|Zc)P暦C%J;c&香Et~@˗/|͏>8KN򝶷Ttkg2 ЎEYlnL^elYUla8ީ\K4lP{oRȁ\aݦ,sHq2nÖaݘle Кb76Kk N-)R)(Qm!SrOׯ_۪v'&-Mm>isVaY‹nѬX]z5F[b+ki”znu[b4\/.hO\݋X P8٘.Ck)&#}Y^P$Wb6L`+y#Th4X0EIUp6!RtY &rD#`Pw]N6nvۦq&sCf{ZU[ eO)ͫ޷0sٜ(YC>483+܁/1U0}:ȁ.,2%6lu[Sr-Nx/wȅgsnɎcl(ՆԼC! p |'iwbﴧÖ; Vm]ofw'kq-&+O[(ڟ&Lr_YD^Jvv}^N8)ifUȖ"ŞDҞ?=z߷L$fW:bawI՝h#: {RsKV3e5vRvvlV$'Y/Nev;f21jeݩH l7X]o2*[:H'v^)1Ms5&z|&LMJcK*+L=[ͫFP";wP:}n2I]؍z~0'ΆٹHGl`Ej3-p. !CღnءOl$"|osTpL@~8'dcɝ@cuCy0a/I=Qoh,{s䎄o !AB|  $7@Ho !AB|I!iOH]@Ƀ|>/a8h7,79 <)~ׯe:`KABLwcݹ\Ǧr{*}w,xy;tK1I'NG:Aݰ,7k{ߟ;<"];,eMY];W1j׽ɡv LUc!S!4(V.,*rG+oc^Udˬ522 D1g/N՝9TKNSN1U0& j؜>2L^$W|P<ϯKZL;"]]oTjWy9U wWLڝXwļ3coړn5nNwNekծjH+f6.v1*[=9%иzabYU/"V7Jjd@ 1u=; ڝޅv펫mq=g-ʪ^ٓkd-&L\}6`7J֐ mf/w`$KLmLNA/r`-@m/+i)˰LM?[T\2khVhPA1{nlԘ:oHN2쥻L+wϞ__zS'*R|zOmOo=r4{o2e?DcK;vYӝ:j瀗rnL )1/]E|Sٖ>\P@`ׯ~mUpW|> Ng)Ni۝ kN#:d26?wxC ]I3'4nolHR߼vkO=wos+ȼ< |&OȐq & Uw},^߁Cn 4TX hvÉ)+GY&rЎ HE,zJW{H P,? p f`ŏ}s{*7W;m:=x( ݉|;ӗ:i)i&u[YSY6 q!.d4M/r16/R3e-feA-XHsH@+Q5W>wD& BRI?Yos3OU8<4TX ƲY]h`{m̊DZݡ+E$:͚3C 6fnHm#H9&Kk W!Q{1:#7_Di[~\7Xo !AB|  $7@Ho !AB|$|4'J$ AB|F/3I˗/_~18|m?lvTm/ dx:{菱^D{6w| T )p<.ڝ~Rg󰵯Dy߲X"3)`Tͮe09Ԯ4e.~eYs-ГRڕͽ5j*NXgXsY޲%9q^5Seƭ-'߯^*2iw‘o*y֫Z;OqӍ>GRC5 XQzWD,dN;>*ۺb#-5BsL݉nWڻ\n'I!ZVөEr4ȚlV2x4z9]T$̉J֐6xxw(v'V;?vm?aD[!!1#-Hזwq"EBjϮGt# 2eH{iӵ dW.)[u>l:m^Q )߉|A,XaOm4_z65q0<6rn Uy05"bF;1>hqf7{J$wsG[6{tnq.} #U9*xD fz"+<|WaP:>Gj^e¢2ρpjov\+ƒy =`'aGR뻾-~Z6L8!ZpT0LL ` y|cx0}!\= 8;\IzkfW{ ޾Cp!oX_p}]XMnwO}屰P[` o'w}ɿcA7p`/޶\ޝt;9b<=GJ\Ug`ջ=[ǝ1a h_P459TC&p.F.*9C뛉LziK2v쐔a+LN]=<",x0\۷* -gϚ\f\ 25PܽX.̌c6w X,RufHsYgdę9%kXu0ZӖL;6q\^j/ڸtS3 &R\۷PNhAz"J^~ӒkTexb:ɵ9`:aQgQk hR:sG.Ό^-pef7rNn|vżR.t4l/`9{Qkٚ F6L8!=`tRm;}D ,!flf1zTa1WƖ@Ͷ 7`Oݢ!Gf#vcHkX6}2~ސVQ n8 7ywh$!uL];Q {x}[g Ҵ|d֨Z}ؕ!í cm@ Hv?LULjeٙ#.xp݌=G ܚ9J"cY[P*V~}Y#& xN`OOvR7;۸i*_Xg@*wt~3cuniqL+{5y\ Vjx[ABu&/ץx2N<)jnKxOGG:3ۙ,G K2 K۞έRlfk;n@dg;IԞ;qzp7Qש)+;7'82mi6*lDx0\ x*`Z~zKx~|'WNH$>qpv ?1O㧲` #p*x0y Fa+F hǵ©Ai4q>pjov\+w_~].y{gOWj\|=6p4#_yqg?_"_Z zN/πᏁ t+Gqջtk)g:$ƨC)$5bHp"0ڳz{9q\|KkM&Z$"[m8˒»ύt|v[4Wv'v8 Nz6!oCDOp'I=W؃ﵻ|-PV5r:<OA)"˓퇢6uDž7S"仾2q 8޾B|  $7@Ho !AB| oUFWxp  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB|  $7@Ho !AB| ;7*[ g  $7@Ho !AB| ,x^x1|]`/)V 8kw݈,@Fx u#Fo|׍An]7b8 w݈,@Fx'?ڹ#7Y~YȌdߟmm/ٳObxLee}>Urdr7-6rvGy)uyD+d5z]zލekh 7%xhjM6>Oޛz[dQ.fwKt*f7exTV,X,Uzk۝jPS;6 gɷ#a5H?O{q۽2{nd8xo{@DG<>{y<^aK&t?\yD4*M}hQ˅YĪzƶܻ|5)߉,B#3`=?|'7)Om+nT7e p<|-@n]7b8 w݈,@Fx u#Fo|׍An]7b8 ]r|׍A΂I.ՍHuԍAB|  $7@Ho !ABRFhO}8> WIENDB`onedrive-2.5.10/docs/images/confirmed_verified_publisher.jpg000066400000000000000000001313731513710110600242140ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex5151 2023:09:11 06:03:282023:09:11 06:03:28Alex http://ns.adobe.com/xap/1.0/ 2023-09-11T06:03:28.508Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************+" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F(ybʜs}uPpFFy 7ԸTKVdKaEdǯI0E, {Vf\^F eڍTes)sZά}vm(`c3+מ,<ZFJQ\k:%b$WlЄo1o݀yFxoo-Z?]y%Bʃc6p˭C$hhūZtW-?/SaieHnpd\cwˮjfFe6 f<mᱞ.=x澯=<5:j+T MAhmI$tzS Ԏwp:q6'*wd`vnkE>G\Mug҉"કۛZRM[HńMnar q=sJ׸{x:+ӵ+[ M),lً @JD RK {ExhEFNr '0S$Z WWNLj5'OD{h̊ Xyclq۞t ˅E=̒il5h24ޱ9xX ?#-u58]\g,"+ݕ4W'qi}R4z[}unvK 1`⥻xRX4ЌVe`;ov3m/׿=xuK-heH%癦RH>Dn=9hFZ K R:=JM_3+S.l\M,񳻀x4ZLIkqIa[l@pc\$ҮT$DkEt4n\Ğ%M(]>\M'sWI@ᑥ7)U''9CrR3}QYQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@J) -%!4BhjT և6~Φ6I3V(!+2ζe=:đ"c;@1:+5m/*Ri^Z7 rA#b+5; &9Ǚs2ƹ-QUmu]>_[\ZIu;qk24/4-eHdjZ8n.hM:|co燒{ ~Cޝ3q֛~-MOƲIoy46M$O `>{m|/kSaI' :uV~#%Կt>ʷHeϦ4CZ&:êRKW—:jI B~ᬗ =*[{[Ξ:͕=H>-%,CTH:8"ps9?ZӢy{+KWKpx Z aMǾkB)9IƢȯ Pq<zOS;YmJ8 W yTV籶XlҤ@'VA%S%M$gb!;wa>EhME289)4aS$juUO/,sׁZq$LH#>SQJU%'v4dhr1!u$jt,[9+R۾omkgKdUdBTFH`ItUF&Ta-џ>apf+42DŘyFRby>@XdS?)P@8GS'^%V* UCq$L6VC[A-a3=TÁ(Nֻg le/*Hฒ'U=Wzb:pN8b2 -3mE@U8U(u&՛-R2Úc2\5#2džjQE)JRݎ1vExlk$(OrzՊ((Oip2a_XMĆl"-=:֬˥I^7[ԛݲ8-B][w` znU`Ӑx⢗ÚlR,S9ʐ-pEjQMTٰtHp}\0 3cQU΋{8M18xߟ5zi-bE N'l̐c5f!YaAZkr]73c,#+q2R|e?)0]  |-O7Y%tq&1YH*qqZE?i;^R .t۫,o4#KOAץFt[ș3+%8$үG<${k ĐI2nkw#9#k`MT:oג̞iO91fsZѢn{{XmLHe~IdRMMAңYɣW 2OEhB`R *X!N7{PKidO%Ho9aX N8*)I$-kxK;Ec,Udү D'4)9J[; *J ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (IAZi4iM4c9է5NhGNjUZ5>~05{dɽS{+e knRB1X𝏃twӴn%y\2nncJ|W/$=I%mq 6j2A^xFֱKrj YYJ ( sܚo|fQD.dJ }s@3jO鲼/-A$pcF A׬xg3MM-hU%`iYg^~m uYo7[VfrA*gh 4RVO2>[ўLsrh(|my Còskl$(++@Tua^Ta PO" 'n̗:t7-gcԲМ{bt?h<3u\<ŸpX2qq1:uquccmoqw#KJ3m X̍uជw3äJpo+M֥Gjn.C9/ ֕ǁ4;cP-bHi[`0e 1@ş h~𵎵:KլaZ(${\:w5~4y @UQ޺/Fa_^j̖m5K2[Wqڹ׍񵧊d_Z[FQS6< ]&g׈.2]I\f3vz}Žޛmqdۭ^#d~b 1qTE  }QEQEQEQEQEQEQEQEQEQEW):&P,,n dUF|]2uy3OJ?:L1楡iJYK vMQ4/mkL%Y['Y(ϧ=O\!a ?KЬ?1!rÿqXHߣgc|R^-.Q$GyR>º!'D| iְkjJ"8`n cnVcrL9\ЬBOW?wG_|?pmfk} pjV&lm5 x[En}ځpl9eI+,x-SX."'o}}+ eku6͝Fe>da0sBM/J5/_z-x$ Cy-+`-i'ڬc `*?ZZƹn ]]R1bpzkVvWW;};Ŗ:5OA]鈏4E05\K.;d{hܗd. .ljm}:^Z%fC"$f~*YZ',! ^N:ǟyiK,&Վh%p럥5cRW,O x2V}{e8NGu|oϪk>=}5Aq2 ^ԮMmmjwTl0DQp$о!x:拢ĭvifI ' c% 'Sx<ދbg.Rq}6m.C(zy1zJ\oGa/Qڋjl<'6Ok>Qڥko;!/ovtWG:B.xmhmoa<.~mu5/ x kk}DH~'v9=:PW@v-V IMR(n?0kgu/_͏7 -l`YgP6q9좖9I`u92:dӾiimbn 2xi_%rFyžG> X_hVYoNU%X=QiW+/?+ӯ<_-uhmsr'r6z [T,9דް<+mfWrmI}RrjwY2:Ex:OzM7}JHv";-jO񥦃4MN)$Ӽ:< j-Ί⏈M cP\Vl[Oo>e2ƩN y*xV׵XkV6RiS %y23Bz~G]\A ;f/l#Ҟ=EX~3O[]Š /𵾩Y趤Vk7lFTWn$u% 5Ee}lȱJ8 }l;;wW'5GYY[qƯckjDI3$ 'sB5/D(/UC3ncKmžuEqzh별X*Z"˃)$ Qx^,eM6{r]=Z;)m:#o^ub>"h^4F7gX.B]m 322ZM'Uv:ڊ;yl| ¸M_ߊtK-WOЬl-]G,H3X?6\˧‘psgsW;MZ:FcPZT}˸A#{Ur~:Ŋ\꺬ܔYfg`,N䓞}&KNmm4ȭo+0|dc5[2z_vW' * )kc`ʹ=RyWXdGp-n$,/OV=9 QEQEQEQEQEQEQEQEQEQEQEQEQE! %4Қicyڀ"sT97@gFM+A#V((((((((((((((((((((Zjaid;9^H8xRةaivT.|'?{&PfOgPT #.69@z< az ,G_|K9_9;pK73{V|3ce+ i*O$15sY J# gcڜV]H*Ӌ(RTqRI5IO9J>Gךz_x:u_´=U+Ҩt~ms^0Ƒ7ZK_'s}(xm7T|q|'_y4CUncs{*jB2W>$#o7s]"KQեUn8=詷ÿo:-- 8 bSyyQHހO#ᫍ&$IeY:׺Oq_ ώ4x6v 噇Ozp(M0mFn5e '2r=z=mk~7֖-"]cP}=7tWzdRHBH9횇Gwhچ^m,Kc*9=h>=J^i.xd\0u>e[ -ݾ}' t`װKgti[x/džo4Pvl<]KQs1ڲA%I^5<628U {rzqxsA]V|>͠I5I8nJ^E+{>\ڧqKӾ csiwO $c#"x[U/pqvn29_j!F4S.8`U`ĩ>Gl}+h_p/u+t|S NXHY s;קQEvxd>#KM}zB5k[y|ѧڴ09j~*|K-N2Sl<#uf砯I~W?|M}-ջMld|P21ֺo^7NK5HdhiT+Pxs^EhVYjz~yYhwPYGd0^}8Kt~vM%B2䟻qroy#^~Ry]IYMŗÝ:Ú"Sk.o礣n097sb&Sy;޻UFH ׆|a_ ô$9va@=tmW;An4D9Ϻdè>Į?Ż񦯩hi~gqn'#Pu$WyEEM=ktytۿ <ӴOݳn'H3q_};Fu]>+خ+o *F۶ 'b@S]7t+[\±wq0YLL\q[ӻm+ieߙ!aSUQRx8N0< m=  +HBdyڹ߆FHxSQu{<s%)qkhm}إ/C?~}!nts6r68hlaF}*xJ[m/ƥcqCsyfmد!3| `.k(m,yVH! ,-{FC9DK]d˧Fhx^XoWp(^5QUJ<͸IǒSA5{p@e_!Uf 7H EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE%!4iƚhjyڀ!zpx5vJq ȿ_OI\_/((((((((((((((((((((iocv䑌hOƶhIY6a,=iA7oD?SZxwIK[5Tc:(uj5g'aEA}( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (CM4L4ƨڤj *CW k TЍ]l$1 ,@ILы}fgvzcي薊Eet Xdr0((G"HE,czOds,"pcm q z}UqZpS#MiQE!Pd xh}dr33;1] EC2pcJ98=jjkpM= n$8_s@\ml~i4 (Š((((((((u[ZN!yv 3N8zT?ۖEgnZ+OQi<]?@4VwtEۖEgnZ+OQi<]?@4VwtEۖEgnZ+OQi<]?@4VwtEۖEgnZ+OQi<]?@4VwtEۖEgnZ+OQi<]?@4VwtEۖEgnZ+OQi<]?@4VwtEۖET-0$wH#z=jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE%!4ihj&$= _\4./jR? B5v(k.?'kFF4Q~S2uk[Zf5)sfꚕŎ(MGpЉX%@#lN{q.y56Wn>mmݢOS8װ >99st62?9%A}J̆IJ}oopnmRDm0ps=\җ./*d.u4R$[IvPϼ d$(6 '-1hs_`^.Y qq]_XI4/qRAau9Y.^6ͻ9!rrONsZ^࿔e֙pvæP W捚|8cVkV'"6<ߑkawi4J\ ;@o9kZV*EF,sѬC7+82nN?SKUYOuIgBUIb}Fy,ЙneXD[JTյh&6t+L[ё:`|ۻc mǧ٥%W$rXRI5>Ѹ6@8Q"tj.D-Q\EPEPEPEPEPEPEPt3ם5X6yˊ<I'H^Cܼb[ XԈYZL1N;t޻94ܽm{3^}`2''pH #yėڍ vTwoEU o/I%XQHUQII%Wa\-4r{I!|vATy{j_g߱#*r;]J=KPMVKl2J3n\0eb~$asUk+ ?e{kx$᳕}߸#lڤЪU١y@Rri,KI$Gڇ͖zUTG5,z.kV9[F=c`1F@4-mt=?3<7xnd d0b((((((((:Ck:Ch;m{(3@$dz*i-5Y$1asqƍ"k VU6sJ$yOsr( ( OcI8Ԓ@7iGFt3:VZŦ[.nk#qbjZ!_<rW'#++Y3쳞JÒ9?Ep&1ʶ賸YtYk!K3@ 7P-m)$H o;ove.k?cܠ4kxF6M}rF.gBLU|̹)i*O6=-oEbn ($֏5vǠ Si_Ά;bҮΠsPǮK1^e۾DBI#}g]G>Kqq#JY22UK+p q O).Af~Nyog ;Z;//Ԣ)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEaa5D+TM@IY _PhcHT?/ڥ*jR:R BAEX/ ~4}?Khj*ez_Gcƀ&,ޗ?X/ ~4}?Khj*ez_Gcƀ&,ޗ?X/ ~4}?Khj*ez_Gcƀ&,ޗ?X/ ~4}?Khj*ez_Gcƀ&,ޗ?X/ ~4}?Khj*5Q@sZ+(rBsҟw@K;Z4Pw/?w㵣Egiw@K;Z4Pw/?w㵣Egiw@K;Z4Pw/?w㵣Egiw@K;Z4Pw/?w㵣Egiw@K;Z4Pw/?w㵣Egiw@K;Z4Pw/?w㵣Egiw@K;Z4P\i֡kH?γoa,TQn9$أm\~kza Ma0m$r>QޖO"Zj2=Cm5Fl~T~)X[kbgCvSgQAq)2 WC?ɡIG^ɨ]UE&Uw#EqdwHSxz(w,FT\wm$^w_j۾YIk$2)?1V4zi]m 9?uϣr}oO+[EcgJ0`RGB<拟)e6wgNjPRc\ d@~6]֭m4}4Io>nfG#NXcY͖ii:r\DqQ)mrI s(v Pͨڍ(㙳L6AUVKegRK ;F98=3vWg[۶u'Øgݴm~t>cҭ\x~1ND $IەS22uWX֖:t^lk19ϳa00kκS=7:+egfbEPT2> A,9|o!im#k.fo3T]9'˗>NituQۼ[D"6g% ;Q@Š((((((((((((((((((((((((((((((((((((((((((((((4 < 1&Zj'zq; 64CЍ]ZGFEP>%)5/ D6ҒBF2HVk^X <ٚq8 yW^gm';C`K ~.oZcT n] |j!P66Ԧ!Ք{Erᮐ$vzbɬXe_FK1*H9br.*x/L{ྑ%6 `$s] b[=F9g,da ` Vw"JkB4H#qg$qz|d߽Ix~&!v67{my+^^C{4: (;GutP.^_^M "yD(PG@;sZo Do6Ze%E`i> 4[YZu6mf*ϼnڪ;{$uFk8 /,empT]Mi[Yo$p7Iw'?Gn [RY{GUf2A؊آ9h~鶚um5̦h̬YYJ Aߚk:k k'$y] 3Hq_-[v6Nϛ>>ީ|?ӭ/# Z=6"yi#;;]U mf~e!nŒ1D,$y^9.%&R #ae=F((((|%kzj^}maHYx:Mi"ra9o, <ytVDy1 R3"TtQTm& baI)\@dAO#8$`$A"QY:㴞[VX=痕*ƪ!rx8m`ml-/om䳔:A'rl)p o@*i}q{uyuko-o,FF%*-@gUo ioCp s3s\HК-a[XK5~SC+`N,gk(=I& $e-p+ApG}5EQEQEQEQEQEQEQEQEQEQEQEQEs1MN=&I$4l"p@?::+M|bFaiicErR=\H[jƾn J6+GHBX~1ʜdgGU}Q\5ouZԗqǬ6еJ&ñU }O-WR{[\DSix/cyŲ<.1M4oXDUy3IluNW[-uH U (ی]U%sI)'~D77vP[ǜoŒMvװw\Go Ee j({ #'BXh;Tn]pWO([JPmwfmEQEQEQEQEVNkcCi˕C.px :֬g;?a="*nÎw ]OhiHہ~RrÐ2xk2Jt {H.^O>+8u\n ^#뱿@O \k:^j -Zƫ*D6(nrA<5-xkˍ:j fU٧LSi^P3{EE'TgFNA⠀[2@Ͻr#liW֑*ĻW1Jс>@$ea^.\\KmRKIzHb& T'4'tt3{EE'Q@O[S>u3hŵ{AqK0 ZxkyW γWwXF7!N3JOD֭$_BТJfkt@IGˉ;{ .WUWeHcb +t_ Y5]2Ynn,e){bbwJ~g 'CisCf]AD/;*̦B3 k~7"o_@O \~'Nӯ.oqy4kqsx'|@Aɨux~{Zͷ:8 ?0M͔.ݴ˶MwxcO=&M /:(sW#}5c Y>!K4{oncCpgc+!PpG*e߾ڏ|vDd  )[/9<K="*9Z$ӴPi Af (I ܚ|֥%բ-%T(.ryJ?5[ӡc0XӗqK{[O6a="+5 i.5f {0F"Y&U9 xؼwwVZ'R\jhYUx#+늋_oGgkcw G#/,??²^\y{!X=†ěﺺZb3a="+F{EE'Q@O(; G#/,??´h G_X2hd Ѣ3a="+F{EE'Q@O(; G#/,??´h G_X2hd Ѣ3a="+F{EE'Q@O(; G#/,??´h G_X2hd Ѣ3a="+F{EE'Q@O(; G#/,??´h G_X2hd Ѣ3ahd Ҥ4|=")7,?´0Y@O@ѿcPDJ?¨hZ@]VC@ [hEoE"' *jQEb9coq"'#"q$tܠTwմQFJ" T*py/Z #QkfxĊnc0>jI:f-mܡKwh@EtԽ]Rx ,yXy3֋oy8YZ;HW!G̬2}=qYom dn<y7s+uዩa ]M 8'{Tdc GZ/⼚gxct"qY#qTK:Upr9>#-ml;t׶T)!˷˒F RyU) ' G8{)5v-D rCX2^i2O6†a?A#1?y帷Xk弌;H!Rx90 $n!x^.B >pyd2y5ݼF3Y?Zh8/|8m}Ҡ{[9dxa[} 0͸ | MMB&)s"";yP3V5,cu<1*|jm VI#ԥW*T;elpyI?&K6ݖHrR@;YG5о`n8}A T5ZE$p&Vt5kMѮ'n.X4k $ Me\xA'[/>p%B#_zu69ڀ.73liǖ>țci1Xnݜ O^cMF4 nʗl ! T,9YWn/LVhC-TI7|v ^im5BiλJZCϖm:ͯF% grXwbpz}nz/MmsGU;5-Ë{cv!c T#77*jbl} VѹH~YlӧLUS HmG^7d@#Sf,Pqn?8]>lF?<ڬC"YһYY7s!8jK횂2wRs{+>pSe|^>"%aˬ&@ݿ?UOUdV:M:Beyǿ8̓\kͨ$QD ȍSi4$1{ mDvsZo5@bs'ֱ4\]JG7vI#8w>z÷P\ZQlm06n=W: ZF7^!ff+ 2[1hq57(Cay8IKl.Wj bp[),4b`-'qR1g"6g$bH"*M!AX/R nmv3 !wgZb =5Kjaʦ=N[ nݥO9*c}_;_LGo_?C#HApAb7Ǫp99y4FW "iaE"J A'p c%}b'w=T=6 ( FCt zFqw1pR wgaڵjIe3Y#"PBKu9CQEQEQ\utb⸓Σr:V<!1biњq< Zrs2&EVԴ-# ۸OE%TF̪x-@'$`ӳ;M]llQ\֧xVXo`{k9UٕhTr9' {o%,6Z;|0yۜJ].3kQ5zn$X#hq;F\tP?g'>k lϛo ##rG=<<'Y U<Ϗp\ns qZP K:lhX9:ӭMgxoNOҭmH`4E<(8Es\^4C O$<`9lZ|-$3C%ΎOdi"+";  ѿ-c)5k7%?ƵZjȓ_wH TݓPhWA+ mIcmt`uTCЍ](((((((((((((((((((( OCr +*@qg85Eh*ɳP'yE7GooAn8UUմ5Ei&Hqm@u< AEgY}3jvVi2Bj4^ZIw"To8dw6ܺ**O'h?0υfFK#Kb^@C8[SaXɤچ"Xr?oRZ.q6!s%sh(((((((((((((((((((((() -!4O4@ jV+ި\t5~NB㡠 #AP#Wj _QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW7VV= }%p>wuK*%Lp?  1\5$F$<`FaNUE&GT0?i}RQ4Q 0;*z+8mmPG #GjsiI[_-GOJr+SJ,[=cEmk#^Zhڌ"oGk6wZtyҢuvo"c,Vqʱ\mc4دKexj,d+,?R=/@h^j^KMT\BY xʐTC-um-p/#Fy+UUbX.[3FcyWn[>j_ 'K)hUq!@JF~PG̀p3jsjR=ݨwhVO1C)U2`@<4W\jvma4Pv:+>yD lqd?eoXy#g!6xk=.u4W'whiPhԈշ4[ *kz~&֡6Vv07v:NРr@:_c?fXQYb2˴d 60q3lju="OYׄbv7pœ$ Wo?gkEPEPEPEPEPEPEP\4m-Ay".brǁɮ5MoEԵ"km=ɬ;wkFLUÜgUP?jZ]QKe-rdڊ@`8~n}u} Ma>Z:ysZ[yJ|22=yKiݜuޣyZXLQݼ_hsK"Ù8(CtQ٥kXBPt GODXQUQaKT%-QEQEQEQEQEQEQEQEQE?4 _{H4Ҽ6Er ό7iism0c*I!۲>xO+Goqqmw`|rq~»|MOMX-}FXIQO1lQmʹ{[=R[FUBXFOI6egԀS X(v:J|߁u }6亳id'uRtހou Kڝ֮\0xշpt}ۑw:V[d`~W94b ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (CL4L4ƨjCWT.:? B5vi @"u #"%| (%| (%| (%| (%| (%| (%| (%| (%| (%| (%| (%| (%| (%| (%| (%| (%| (%| ( EټAur,VQ̀N~f~KԧF*q93|ע~Gf_ wc춲J rm#϶՚+2m;imI1]>K,$7?z1~5Agm [IhkCteY8x3pr+8i"g[{'+ `M Ĵ(@VVIa5(!g q |[QѮ;ޭ歨y P0D"vxʄTO*A5=DžmLyx.nՐI@6TcܢX|3lm,WW70]%d4[D7PlaBoo)v[ZY7v1*n헄>\~o#3oTq c0K>ھyZFP!L.rϗ}y]XSv ]  ÷i0¢>V?iK{z/VXyDFҙ Iq(ooA_xQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWx/Gt 1 ܼ-T~a>ae}ZH>M|]fHrwr? M&;{Ք,!eHco?:Jk6"p]ycҊa!S.שu\yn|SCM6ko&GO7c'3~6]z%̀_#U!SGA_Q׼9F[As;ם|8özm[(ag?qZyMjNf ƽyGrŽLN#+Gvz|]*E,c==MJ=V iۤn?(c댊GS[8,tԖH,$aV$͎8=,u{5XX;^d'+L[O''q?t?Gg^8S-U;?|#<<&{ƬyyMC<`ayi,z} <),LC)&VI:;bI}6H%!Op8sQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ Hii !ycTMRD^NB㡫w li TCЍ]((((((((((((((((((((-֭m\FԖB,HcaѲUc _VyaH4?۬i!Xqnega0 *iZ︳>6on3T|)Xe QX4n͵ X68(<x^(dYR |neF;c5jz&${b%im͉<܆?pRzqvj?ڐ[i5DIs``i.y쭘-L9(U>OF~n:v"7/υIt'WH}MN7kMoya.k]m b& F  Rߡ^E}7+#<\t7(_0!sW|U/'|ΐi X+fZ?ٷ ./x ^Yqvk^|BIY,F0 SLsR"ٷ>ǥBTՙ>IlRYN#!D3- Pbh =qYveڋ}6;hƸK2L%Q ջ0AּNX'>ߩ}E*Mo#]Q>ek2NASV}|'Sg(0*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE%!4ihQ5JPy; ި\t4*jR? B5v ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (!T? j) %#acAE3HϴUh _C}?MUV?owHϴUh _C}?MUV?owHϴUh _C}?MUV?owHϴUh _C}?MUV?owHϴUh _C}?MUV?owHϴUh _C}?MUV?owHϴUh _C}?MUVrgz^멥dݔS\Ir Y=MA^MHll"'RD ӺZӰ6V۳1 cΝuGjP[N&G2C޵Ui͵S()*QSߍ˳Lv2\ZntP7"|*FXz ' Hi!]S˘ʸr7(c]Z]\^,\s1#:®ճ鈘XA"Iw vMV ~0͹R",#bA!I8L@\i9#7w6V]?oID6Nsۚu!;jSI-Z/fcE`/<oЗ?-.-GkrJD9m0w*)n1a|r-R /)m})F_'Ǫqw|{V5ל}x\ٮZJKE$ҥG 7 @9$KKfѿfMKhdu̖` DHCHx=Nе 4[}̄~v#psV.o4nw3Fn)0=Z.t]RB)1}`s$q'vIȼ_ ˸?U5) 0X!An:tOEs~ϹTSYWŷ\df>} i->et.RDنp $d:f7V] - vvg1ǹORs3^(((((")((((((((((((((((((((((((((((((((((((JCKHh 00j& w _PhcHT?/ڥ*jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEg}o~VY>7?QZ4Pwf(,Eh@esEg}o~VY>7?QZ4Pwf(,Eh@esEg}o~VY>7?QZ4Pwf(,Eh@esEg}o~VY>7?QZ4Pwf(,Eh@esEg}o~h ( (X`ֲyfmBA3ßQGTM5(/'_[G{ed儑sףδ}ZQE (zfg2|BG?J֡k~O @(YӼb6w]1<=zFh(S(/-e/6ew`/Z5?_q@ֿ_SYxwP}CnpBX<2z|~^Pz#Z;GO4ŖPDs c2:ԣ5y .u>!9EsѠ #Z;Gxi #FUӃ֡:Lv\+w/O^z#Z;G(;ֿ_k_a/kF5y Ѣ3k?F?vh #Z;G(;ֿ_k_a/kF5y Ѣ3k?F?vh #Z;G(;ֿ_k_a/kF5y Ѣ3k?F?vh #Z;G(;ֿ_k_a/kF5y Ѣ3k?F?vh #Z;G(;ֿ_k_a/kF5y Ѣ3k?F?vh #Z;G(;ֿ_k_a/kF5㴞F?v fu??v0YY;Q:j"HuӬ QW; 5t* I$ȅAbO *jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEonedrive-2.5.10/docs/images/default_authentication_scopes.jpg000066400000000000000000002543461513710110600244210ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex4242 2022:08:06 08:07:072022:08:06 08:07:07Alex http://ns.adobe.com/xap/1.0/ 2022-08-06T08:07:07.420Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************p" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F,kmSVo%ψ4Ớͱ9a[:+JqREI86#[|S"sTηz|}urʂH9Fas2:]*=ŒVn*b1nv8}O0ŷ]_;J+ԬjZKEM$!IX9^U}bSG-#6FU{Pr#V_ OL`g8nm_;jHQ%NpGQJ3nq+6V#[A\qnmCӪ{mj~\z¤k,Pw'5 SN=JvKϜT }sƥNF\>}ë\ϫCj,߹X01gBd#<z !/VX6c# mqGiZy,Jko(o+>n OwO"V|8\xkv)KEդx_caIAhBVPzE*˿hqWWsFC~Rb 9-Ks-bfV.AdB({Q}ROk"2(L~tC* J¸?⴦ڕ<2"]$ \d$dq8^% =oY%<r.y885p"Jnu"b{{>\ L#f+cϹ@&8, $x핕]Bl.6Xf ֟wԑ$+JY =r 3L{umrFe/tF'0H!-`Ka9u\aKٶ$.q \ƭOfmdmtӁ>S`ޕ55]<*qzÝ]y:_,x2X=Cd{rjFxebUrB9'ӌV9l?̉bw_ֿtsL)_ɥ$( Nj+t!+f5+jY3p*=2/+bw`vE`gt>JR]:k6?^Q <)* :oiA_Z|q4jV=_m~V'Pj[kپolKc%%e"lAOY1J?iFZ%BN0Ayp7W4o8[lx+GDZux囟#ӯw4c$_JQm.ߍ Q\Ygc\ yov\<)oD2^bP0 犣d&{Er0 RGN)Eq{nWc ;W6R鏪 6\,}}GdSp32[v/n瑃ե}_Y31(Mh|C!}>5s=ҵAERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESQ0B*$IiPEP{ (Qo 3 w|嘱M%vP2)GWbɫ4U97{%E+[QE%fn!IDjZƬ9_8,}ZtQT䨥QE%Q@Q@5#"K dEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV 7C[Y7l3[_OZfM3YY.CpK}9+_cSz\ڝ QYό|ux6u{kcjg\Wd_x3Qt( 3x 69>Ʃڨ/@ndOֻCmqMn;[wl! AԷryr~&uoŴ,2tt9 djJ+_Yӿg_ X\],*֕K-7$?O Zes5]Adrn@[}I5׏xS~6ν粎_"VO1 klGxPo j^#ޑin\\X畀!XzcIMD'3 ޽hֽbV7Jt#3[R^_|,һk,>q0Nw9RNesaCvWUKǰjzmP#* }NjVpчm22+u ~:yդRgK cs]^ :{8$]y7OaUmdK~7&&Ckƞ'֥}(Hf =O4]xJ7^,NmV%#8}N+󤛏ͩh^-J/#MEuGoJ^/LG^nIj@;r:0=ɩ-g^I#? [RHݮ/ _OK95X]+es&pA$du5IwWcWWt_ }ՎGO ݧ9Ǩ]F:mS52dg3ys8¸?zWpAj>Wa$Iw& S߬Lm╰qQrsVjM7ۑ'\g]H'WX#8 A3F[i^G= %8yr09 3Bn;~tWx?'BiFՃHH >R9涯K9/nVM){Q+pOji_z+~.Ǣ^ujwAizr^ܭSf3|1\>ՃxYmk<7Zj'J%Bs/j'%qk=#H"6cٌ1hךm5]FQB\G@=?WUVlĵW:e<wC%]\2ɷUiO qߚ+ƥw?xOߴi<_ˈW;R9-ٍ-5=YDv(a׌ןi|MpqGC)TI6 ʩ'Z|5͸GAfA<5ź_ /Gyv\IGhı-gӵ6ݼv-;:t?mn෌ʉN7#^Л_<%K"-f$u\Yq^ToOՅ[joikwz]Hbnv/RvzM7Q5MQlbҎloh±W28 EN g}?Ýⶾ%Q05ɣ3E=R="N}kuwV qgs`s.-Ӽ9U~z@FnWkn"xR/'0Kmw/BU pOS H/sk2\k:鷭comO4owqN(lh+:SY%eBJ; n5=X?ë-GPVͻ[\ l3!8q8u#z_?[Ey#׵:]UӢ:B +k28IA%m1PVmg#ҝkgSERUmCPҬ%&X-2p:{*9=\k^5ľ"k&$ŲaC 9)V pr$$du9 BqNO hEyimXms H=z*@HRTdぞJ Ӽ:zٛnBzkf3ByV8TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV/Ciq :\WѲ#HvnQR.qvծy}%SöW2]É$QӦ㏮*y{-[VVMVඓl 3uWPrI"!w6}H3s JcC?,ƯCVUY%y)T~mF {flI* Q]MUJNX)YN7ƾojzމX Av]g 炼}WN4Gy(kӨұǞ_nxw춑]E",ʢ4VsWoe; 2[h;7 ʥT0 aO6I.ksHd~V" ?z֥U|>tsY5yEc1A~Q8'85QI1si\Y\q0=8o~ ֿ/Ox3PԚ[\#4t=MZ+|sG\WWz[4^\0:,1Gn1T+ ;]PK|3#]-'=}o,\x?Tn'InYw1e<'kS:?-tip>%6Bm_7o<_{M'xZአHx)|WKk;k[|Tc8#]U6я5g[o=gJM!$Wi8i [yʵj>?c%VZ2Ȳe $WgE>uoW%ռgxdSi:bGES{ )[TG/kzg[ 6~h# e/ǦMQ־P\Y-ʿ+pW8][@o5pna:F d%T%]Vs6m$ i#(ޛVobiC2eFG f\xC"xJN2*1䊯gj׊5 YV]Q{2#$[x8>tQ&i7)}4fI[i\|m^r@p9G}GHwz5DmL0Fw9e-G,s+2MȪqy^oDoq=/scUIq 2=:cE6w5xrY׮X[82I#$O_Jχc޼Oqo#D$<[Rz_֡h>(ρ4/HIќN.L)k^,AkK}GMU3Yv9wER ɴꁊ @g++.6ʌCZξL+y:~]]iZi y(>VlU[škODm#kV=M1F0 X״HuԲ4ܠuuH eel70l=*kΗ=Y洴, NHA'9F9Ko?q ӦY.$I"PFUR=Ef[K&BNȰH1o $w=ygiN-Hx iQS[Dp? GΟagxZM. ;oˑ>pt5bn0y)5Ti\E ,H iw=)wd&sjwpK_+E-o4n,p;Cnڧq|.ӜyY֬t6kصa$ o&O71ObiL_h{(8.鹗80Nq^fFIuČ']`̣>n4i< [aYC(]G[9 c$S4CoshOo$aЂꠞ98=Eg UC>c:\&F|Ҟ^ݧ`G:z5ޟu, $%J#څ?k˰rKu|EgkrB4ˁ39#P2x9)ScotgD6/pT<6@x85V2F-I#^MkZ2L|y'G#w Xn,g%I#9ar{9V\s-/Vl~-Ӵ:ya-6H^XJ3 qPciijyQۤ.($qd\mMVMӴ",gі/, p#qRzu8솜1@4c0PII^xoK 74}Z=:ieY`fFBv GE-"_Aa-{8݃=C`#7~ծ5%2,.ڄ4+lrbO#&Kk4Vk<$ozl wfֶmt$voi)ᮧkxc2߼89U6[Ƿ٧d00gimil&wwRѫ@|ˎ$7\t ((((((((((((((((((((((((((((((((((((((((((((((((((+>A."fR\}ZPwֿ_֍k_a/h5㵣Egy 45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/z_@QP?Kh,ޗ?T?e>45cƏMECX/&S~<漚\Rf{рP_ݟκψQ㨑a?6ٍs+ N5*r_FrbJ>hjm'⭖vu!>f^kż7e|چqml',e$䁌q^ЭfN9M`kT;Es+19ҭofuz"Y‚:6BʼDflPXI-(zyDU 8yF8֊/7Q6n^P[[fyXݓ! ,65-׈n]+N.{{f;vUXe@JͷN]_=6=Ա c/$TzzT-\w ۝.O%~{& 1=jY5o4{緳٣}! ߇f@/^֊+"D}9lf@ѿi>h;hi *sN>ԃ%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Na.$~'WEܛܕdGqm崖p<I"C+<PiN۴M,;hV5-g ڭH>6tI,O[WL]s1Nllmh¨#V  Q@Οdpg[81.&8-pT3U֧sY}wR[J##=]'W gnY`Jbxui=mh$oZF#ddW +!pѮ"{b"&5he\ '<sxvGt_XܛH-[Kwgde#RC_Əs\?~ Ȍ/!@9ӭ>KwolvCkgO+ggrRZΙƏ6 !ڍu:f rh|W}w[Z_[Ƒ>%Hh2yVma_ k-F*mD([zH#SPӷ=?7|3ͬwr@63ƧyŒ o"mZ\"ܦ1RsA`wZeM=-ĦB`ccW'na~Zr_:"Yeiػ0>8w/Xvѿ?=Z-u JgQ9ʤmZܻ*2N[;@RrISmukz852q~RR1fP7du&1{4].+ܻ ǵ%D봁9BwW^v|AA-gŴڄ.Hv~7s۫o]622@G;#S9.wEtoo:( ( ( ( ( ( ( ( ( ( ( ( ( 4))uKG$V F̤5ECgie B+xGkT SQEQEU-+KH fI圙't\,qWh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((\a0#4P<"EŴ[J$U EfYSCӮѦiؒ^;L>xЄs`HZP ]Hk{=*4Q["p:Isj]63hP݌b@~ѯM1DMlS^G@yO __ܯ8>N>^8U(:ú%rGe[$Ȱڢ@*Ԗ6^y-2\ۆт[|u((((((((((( ~M?GKbR[nW!S#$ eG/[҂˅ UF⵵m \:-ռd4YH9N==KVD$ז |T`|#=sp{}{K7 wm3ژR1|< %~BfۻGIx RKk!oI$l. rG—8Z_M?ڮ12ИrX(|1kinnyYw#FђP1 Z_ :_//t9tM-g-c$j*#O4_2mtǹ)/aVU<؂kf4KP6ֱ9?i?r|ɴǞ} #,h?.#&!'bE9jݼ}*DŽm'XQg6UBiP[*p$x~QV[)V67 0 AۧoJWٿf]P F`1Cmy$$.He'Wy8jڂ\j[lm$fHrpYۀv *oEa Pocq98X*˓O3nova24Y"J:0'A>]<ïna|A{ ;?+]7OZTE,*1DxD@3Kp>T^-*NY@'8ғs9U!mʄ+)g M)[xao" r6e S\g8qIxRtXϣ,2O%ݬNgUE#;pN2$d w[y/%LK 7v*v-6a«˞p8MOHS҅V"t` APy{U+ sJu iVʺ`w6SraPqӮkK䯅">o٠7WRmi6+f…V$N=^`խ4w)# Fp0eb9 [mrK5&rHH"o|R֨]Ȧ1 ccf޼Rfh]yb(ay`߳lt5;gjB69”xj_̟p0AϮ{j^u(uF8%< g}h{%l_0uO4:$:xn^iB%]&eaKlAs!N9nV ,^derޢؼآoDtKqlNbL` yo~_V.oqh _oJ X8 B歪\][X閑\ȉ4ng r rOM -]m5KhI5~SC+cYrQzM_M/.lmGcK{a$jn\N' (迯ԭoˋ kmOv]XE6$9rp:dZjK%k,>YShdcw|5 { *@.e3c#dq֘Z˩j[I0E(00\'&忕n@=6+t{j9$\S7wX0ԗL e]LFl@fl)8!*3gG4w&RY5`3u=:v+5JF$b.PFH`'BWӭsvE%,&E|G9*N~R9:qɧedtWU"7}sN@'ZV72[{(FUu}ۿi'4i7ZI&[^4\@J`AF0z1Ka3tuGn^6UCYqd0HO|k4Sg7`$ad(JrV%A_{13;?2 6m\W`+Z`.@ݟ@'~?s~1/0x~&cU}G lySyN0*ɨZHeҴL*qZ@ Dzŗ,?'os3%߻^* o Ccnj7%+<~S0"N ۧ]6 3~:H m60pTZM/B\޺-ܾ*2*O;{?;drO0/p%p@> [}ظty޸ee*v =~XeSn,lt侹[,rq+ *wpB 庻mⲷ{/<8F]pI/y+OZY\$-s.`|++;K.xv䳒J'sVVf#SR[s,ʟwpdӃ|{Ա YE*_j)lUx2mPd MxtJCi;Tu'J\is[A.nd.q͟mt=CiYZ Е/!H?5BO 4,NyW#]@MG͸_Qv.zM[kXЀ$xۦzVl)/$bZj(eq18 1Y6gY4/""F/-}躄pT`j5| @0 AۥYӬfȒbVQS8IBs{躝Gwmuh9H!?*1]G ,^dew w*=?F8T_3r>[;s-#~iFjIy= `cXy5?gikun>C8￯J4;-նcC=mWDh!$ 9i nrՠ<lrꚕIe%1Bx]FIOz_Ibn&HnQ?(}A-n;I $nRdbw.3HnRR.DB>jH $Gp@5vAcnX7:Umec-е qԒ`ob2TwB}bK7 KUZx~?ʒc$nao뻏X RMWܴK“`Xu_\GiӬZ;#$sX(؞o;[9зk.+WU(Y8re ##ڡ ,tmj;.])(z慶֯o!m~X M;Ok~-&abU9=:& K&)# H<'='׳H/o"`V(ʗrrN^'ɯl_g]΋yǷZGIie?]Dw.|#2.:?Q{_$/sٳGAHo+o$%4{0RsHX ˌ1EϏ|Ea;%_n A,9x>Rh5 H/t >`bJ @;FAm4#זzR8k4X ;$֢)QEQEs~4}?OrܤkzQXb+*Fcj4jhZg$Ӭ."}?Ʀѵtk[-$3n*Okmbxpy[fJsԔlMa5 +]DX}2w̮͛DDfGO%N~z'?[y_;z+ʹ[OLJ4;YZkah&@qycO! ~Qu-jfMCQmMT4 &w F2?7L+\i]h*Zv5wmo 0wu{7N>Pv@9P/WMmŹF>d~2l@lGRN-Z]?I9ibǙ,5%qڶ.D]Z-CBvfP#2WIXXZ=AkfBo!@r \>5ḴEVt^A` psvwywmeq}/l գEjnFrV8 ?(.-Tq\C;HM' Fc`޸ۍOPI6*Syvj1ݟ,5=uo5>Ul=a<ѰNyqO#8|{Zb/Z}6"N)c*6$c'sa-urKY,5xm<حuCI<ӌM%+{G֮٬u`Y8JѤǗ1Ogz>_(@QEQEQEQEQEQEUodAcs!` .ʠq܏́\⫧4$E.n9b]M*r1>kwĚkp²_0F=˻9qYKEMM=/R*M h(Z?:K^'=&K%D)¼:sR3Mg'fֵhe/28hE;o;wOi") RXVz+;i!K_T9Y,Ɖvg85mA|$Kw>ʶF6Lì{~rݹiu=|ivڅԐ4V rÂyY3qA=ikv$㑕$3Z2}&-6!{S4Y2!/G]?Ȟ_YKciy~$LnFzFX8njuN@WPf$8123BYnf[;kj b XbppsӁZ2U_OmcHSSd*,bHylg?/ԍiRN:FtFHź?ݑr x]0rI/!8%%,TmK|5 hlyp{7sלT9SR[#4s$@Dc z_~-pͫ}-6hlز }OmYYꚻhR$"Ho ȹ8o2~SLȾӮeDXf?l>c]~j / pi y7]çrt|ggk,qZG{,ѡDa3c5ԾեHYoDP8\NSs׭UZĶ3L1 =l>@~_Fj "pipnDŽe*FrWg1m2ݵ.5oMh:*,8eS-OEU!m5ޒm?) 6Trr1R0iwW%KN}q@ǗЂ9-o//o%+Z5ޟq,!Xfʰr1_-Ν} s;G *yRr pPL 'ё 7X,~u5<Sī=Ť ķ !JpQw(U4KAKo⶝Bk5 YʀdA#x/4+n$Á~io]o[=0 {!hc9%e*975jax [B^0ecQ;IG&V#+Y$k˫EFDX@~%NKˍUZ~ Xڠo HmWJA/Qg̻e`H# A *5MCOvČq$ dIߝhK7Vŕ孞y#6ķ/R-l'('L˪\^Wkiia2p@e=ֲo|({vtG18')8覩;sʣȿ#QSK+g*S6ۺduk^fNd3+o|drq"_ _QiXE9H̻(od_i >^<x)b'ǨH;$Jde8 ۱"tWaҵ'kβH?99E[Ww}6_֣\;jBRp9@'4נ[vnHJ!euwOqJԣWnϓ}}P4i[_?X|soo%O|W^lu[U[7 >Wumn'kuo R~iUv$cޘj~36ե\2۹ڼqw"߹a x㔦J<.ήryaǠiڍN2yDk[/#86I$A.9%_+$ ⑱ͻ?2pe.-v\\4g24d6!ӊ8W[7ʚ|IX g Yw tpsQKگ_{ou4K,Pd=Ag'cH ZúƱݣZ˴H7Ӟ6C5?hK.s/^1uF&bm^u5DFT7''$1_?Tr/QElQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEjw]^b]l/\Z8T\WEr]Z >kbT`z=STU%݌d2ƎcmYA##kej* #F9aNzZ{EKI -$/lCʑk3Z!]"= 44y]%+[v᷌ @NA 'sU;YMkiAop&+TTy ѢZhSm#M{I-_OkyQcuQRpjt^koookcm 6UblaNzZE28c,T }Mg'4=5"ș0w sAZPiކhiXڃj)Fct2ygG#cP;#M{HИ 1>:RZ] go8cEV]*ivhucm:fY!VA9QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQU/' AiXvP~bKHoa a Ԫ8 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (A8C#M&-e w}{.g׭mAuғmO<ʰ#hQT-kx5[B1Frza״kX% >JD~֥d`mV;rrsր4ۭ{NKhu=!3Im-ڡ@s(8I6Zay{pI&xT HZZ `u+1y#Kc:@s@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\--}{%ҋ\Ȋ? yE&Y^=3yළܱn}LO Y7WI]]mNK" F!o9D$:`WCvy5n;GР53!X Y }Rxtku .M`i}8=*dTW6.2jT8oYH 7KٵujwBWZ̬>p9sOw'{/K!h.u򷝃eR7cgh%$q)v $@@Ҵh (Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@E=ҁss9D Υml _s&_a+w[PZکGc#@Z*RRN1OXZBp+-Hlğf6 |Y < f2vz/XۙeMb{mڵ0<4y?!<0r*^ Yk{"1y;v_ƺ)[owS~Di5C)PL` g:uYt_OΟaxo:#X,v p{ފKDoK@NSuCaeymsnFbLu"5=ޟӮj+,{ ڧ U#8hhSw9)ɧGWӉoU>"npzc+6SաӴ)QngO j"#`FwMb!mA"4B閺f-[uė$\+K]jZ>+ojZS˰mr /[{M?Mwq)v֦H|ٙ~dr$1H2]IaiiiڷǨ)anUc ?xsu=WHe X' <+??KC\n21c;ʯsml3Su﵏ҢI da95iwkHge#Ԁ$-T/$2Gpaw peU!]s[pɡ݊6EI|K 2E 0Y%"vCI=1jZqӯoh$2$bee.9/=|ߤ"j'7He <@Ҳ5/Zˡc`q=%̳r 2ǦIm%tho ȍ=yY݊bBc|I޵1 n-DX|~)N{V~cӮ,湖IY6\ T ZH^YK.;FCyߡY^jpڼzy-Wa 7L;4zhl$ 6+h%7\61t_i&MN,|`m4K\>pp%!ǿbRod4d^Ԯu+ nQIe%C;Y$f$ #zRtM&9f&F$I#t{ :ynT>RG6.um{V-kwhfY8 2F zעiokjCnb@vѭ- M"ddxEVu9 @$4u)q>!ռCM!iˢiqc;pr|(.s뺮dޝ}{4kXO6c]+dHze>eo/ڐG>¶GOM\F M6!(V'##1(_jMC=m1>P`/@"zwOiw8XY[*#}LNt@d4c\gZl|H 1#Zo_'+m{5FAs p)s4Ck!3I.4;Q u[-#Mp;gem}* ۼhV5ϮKaTQ4 Bˑ׎l޷':񞤷7r麍W:50[ƈ/ϷxԼN^¾!`#УUŜ[_l.<'9oFG)GC0q![Tx:ij1%|wNju?ۯU--lnR3Hep:)rOJgT'д-{@InaGˏjTBŠ(0((((((;o i'iQPk2F|$n^qWUi-o[yP IGS4z[7^,oXApZ$eKD?xGu vӪf;A3QjG5''6]]ф~_9ecv< umevue(Q=U_+fx$Sm%[΅; PI1+mmm. X'Vh`QE ( t_it-/b;.D-QIl8zgG-M(f,KlROR_JgsOK :+RЧVZC)Á Uּ5kAVr L2sG_ɇOn;|&H8 [ l,݀jΡmK:;AuCf>~نX3t HQƗd4s1>Ko=uq:6Jˀ1-?OG~q#^$MU]}~FZxdQZ<3MrK&)h;Ol8,.^gC+I0II Oyj:^-4Vxf+PGZ]i#u4m71Hb`/vAw0ZEB;}.(#KtP }À:oN+ia,<ħ|s,6^8=pv-؋I Y(# vT|qk{}9o\۳3yR2$(km4$K+etF(+# A9=NMKmiogGio2āAf9fI$[zS:~ nL1:xEVe;7m"^4t}\5—A|O&6 I}kCa{K8+n7KZGgmYmT;uTW!A\?]?ּHUO˚4K0,"VaP^x^xrKJ U-cLiS`I砮5"͐K'lrp\ uމj ,5?G;R^~__Zj:j%!mFUBKcvAA5xō6qpH#3 LvqМKIVKgY!Þ9apz=)SNQ;;uor(tR֟w~8mCZݍHe/ ؐ ۼx|MmŌ7x-tC %$BEwchpk -8%p簪-6M:=OK)[tj7>qx O:ڢ[G>QHsơp1r0sǵ-./i! hm-ܨVA$t XZj6[^_^Kn8UvxVZNF`c1He*69K8$pO-__qV$x{rI}{uqo2Ik4[vwU5~Nյ%M>k,.e(9d( NrbIt].L]:}6[WLC0cCg)9# #ۡXHPw}GWIQAgm1k"@TMK`)QEQEQEQEP5?@rX9'N1rvKQJJ*bi<7_Kk,}"'N}]m]JS5b)ՅEx;QYQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@GE-7{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM{&ooߘ7o>fM+JqKEQEi.ߪKE6H:mNOZڬnr_PXfN:0?N)7g'5D_i˵Q7BXA*Ӌs(99'6,|$L72 }a-Wh,kݴ jm$3I6sإm#}xK{e佷?ʅބmat5C2k.QnHNb-զlXFXGn֪uX$Ng H1k^]n;ic;Ђ;h0KyJ)%FЧ$)ko5^Zq1`jR~xnn^Ye܍R8`yrw?1_ax(f9oWv+g*psq=A1K☭qu^AtGHЇ07Xu#6D[{FTK+@pT 3۵@|:^eoe*Ks"@ь==~f_ys4g4H^EXڂ3b'f{^OWY?UeqN>ea|'l!^h$3FuQ $ex; AVt(. Ex.| RR1TeF/k2IF׳ \\o9bJT vpqk--\jzwtImUyXԩ Hlcklz,RHn" IA A*IWsq6o,>YT`=9QST[R _Yl]i$w6м̦X\7WF.yaB4)3FYA*>VaHKxcȶGK‚rOV':+%[˻<|O(*Wjۉ³b_hi>Ѝkqi5+Y_ZuՌk HA!ӧK p^\\!bKxF+!_iYk6wDyJ$ /˻dqNT-ԭ[.gŬy@3et~cZUaPUHa(F' -0Jk8^څQYQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEbu7.-岄h1n̞N94Ijϩ]D60v;9ǧ] CCR--e&hb9U98'SW袀 ( (wXл$ԛI]U[mF |܌Wz޿jHT4R($((((((((((((((d4x ˟"D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*F;xD(ݷw Պ+:Vz8o~f[ry⺊鉧$s}x7I{ͶO֥Ӻ1H ?Bq `ş-,bARC6 ![eh'Xq(s@#QՀxQIi!BRZ-̧0k uȾS5&]"7Jm$r< @<sȬO$pz:/35K[frEt'h7Qk 0T29ݚƫyq$Iu.50g H+m8 Gdk-S Pϻs1 z viVc|72\Hg|́ SO袊@QEQEQEQEQEQEQEQESVKmxl[RA7vye=MFzF?:q:fh_Qծ^b٬ĄdUhuYiqjﻸỉ6o̥s#9Ӣ˳9xG'c'KGk Fʆ8Fca:wCva:2mZ_QE$:f"eVvkV,0G\톹ruL屁kBM=}y\Η+ʡ|%IP HY:ڗֵZX_!_TךKmï<'sqwI-%uڕ@>iPDdt͹;OՍ^նkWMZI4Fk4K_!R_(e\cqYRzK?!e6myW|R,J19RAIoq?SIXȳ KPp<@8lSt 弊8,.h%ӵs ʪ*K|gi[k'."1q <2p :tBpzus2Bs!^35PAsH=#9WzƳ&!GpeeIBduv-<Λ$7x4g7WeL\劌 UQ`95%^Gg1۷q3:,ZFEc6, Hʹ-(A<O8oCzmR[ZPP#p3}\LGp${}6lE7?0oCH6#Љk/汸kDGF0{;j2R{M65GqKf ڲ"#0x5 JG U#kw2.ncks+86 isfG-9Ji-4r0s yZ_5k[1m#Aqgw"&<ē(xFpu  WY=os/Lk?UFp*Rۯ5VG+< vRa#_q5wKbt䴁UIH,Y bNg袊C ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (0Qsh$W3]Ċ ;l9jRok%6cYSLԵ VSl-!?9W4_!n-u> +3( 0$aesZh qs^jW;<ǹ9"H$xV0 ( ( ( ( ( ( ( ( (1aכB4E7 OLg^ޜe$ӵghwύdf;w𮆊ϩ\k߲41cQ@Q@Vvhb.W7iiþpNHTb쉔U٣Es~5Ӭua1E3ߛʂ;ӕ9^KУRvŠ(,((((((((((((((d4x ˟"D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*F;xD(Ii!'Fq#ڷ*FK&y_eY;ۯZ֔f0FR7p!4/ zX'A}G$p{ V+lEXJ։~>HM--G;a'+Ya{[`! wN"yХZiHQK5̷.S*$i3@ wO秾l'̷7H=*tJ7vd(O.y#YtYUX,'<:Q[շinPH0X@9c]3ZɔZmfWs yr]߇$ؙ$9L++²THm9\5ܠ8xEOr؋v$(}jZvvJ#7Aֵ>=\YԴyWܤA ֭Tn`eO8Vx^I&,) 00HlLsgo%ֳw3+ןx7s$REq$k&ӕު_Z_u5ZtJ;Vm[ ZM9 qM+^-ƺH0-Ԍ p2z ukn 4Q⑖(Ok [{8 dV(c]v)]Ǯj^hqxsEBiK ,I$J7f'%vHϵm˭:m&s%$B&d v+N@hn;3g3!l16 4_ ]Ix-k I.qhO]7oЛovK5ZYč2wV'gAyMFvmskukMw9 m|0{o igicI]2J3;1f#80:)eΕ6o;YD^bٻ2hVޗ{5Yj>n<Zh6(ZF@sZ~Oܛ#j[ Y. Svj^ߴ<]7m\l 2:UṶul,fy(gqHBrrT5:mn>uM-VB%nCp!67Zꝶcgvl[axjSAQH((((((((jmm+y H<պ/,IhدPN6#Lѭ :LP5693 -.-V}w;y&|YNx@c#=tSvqG/dF?QÉhayPl'Xpyg,ơ*;%(r>_$~H5 2Ni #S^_OK=ZsMJV.経Wpb*85Գ}PߋK0Hlcrn1֦k;[;8^7~lRNgpdYd_۪[pݴ6G_[SU?,2h>̀3vQBY0@.y뚞ӓkcU{jQEHŠ((((((((%Z볉-n.<)2Iwypzo $.q3.LB,K%c$Rө7[3b$)cc(R6@GΣzŀqTѭZ &PU>nFT=1]7X{=N&u{Hf.Nf\=rjxR<b&}:2݌er09`oU<_=zb[]e0 VWl)YWGƃNVh+億QT&F JI;_ĚEipkOuh-.!8.:n&% p|HjWDCMoG3ŷkP`8ȷKA?f_ jmq,#Im,v -00pK$p3jmme{I$`#Yꄑ[&.v8OJe۸2lqUKs;W9#+m,De]|Q8<o6T!<#c8Sc >ڞ% -bikC J_A9]o} zgVH.7֭[nHbX ;p9TԴ,`XomZˑՁ$DXJW71VԒ,n}/BW_^NfZ[Vhm?و$'!؈88 c/?9KGs+k DqF&MF㌮[j4Ou]LFQI!@c,NH'@=Š((((((((((((((( ?\pA`,a1"Abdr3|T Mv4AeY6x3uwc䶲J rm#϶t.u-BUh {D#9FA/?~kO3- (`Yxzֽfi'}\\)f1Dv2I2xL((((((((( XnżPa;y׷5{4Y=2+Yنq8+(hsW:%v G*'jPEPO?z?zHeϷ?z?z@>L>LE\3Ǩ3ǪstPϷ?z?z@>L>LE\3Ǩ3ǪstPϷ?z?z@>L>LE\3Ǩ3ǪstPϷ?z?z@>L>LE\3Ǩ3ǪESdh?+EGo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7UI&wBcy@Q@˨Gi)XL4mSڵjl).ec$Pig绶gwcrr+3t7kB2J4蠊1${N4/uGWns*4]5*c4%,w[xˆ<|+:յ烼)bIe?5v9k `T%f~RF L]"{Ǻfsc&6,A'ԭV9c%:r.3jzyd$7 ?<ح]VT=_hg&fƌ *;=so$ɹb9#kmeϿ ßZ|>gwp̶[Mn$PѐUuNk?1.Ϊ< n棓S°K E\YX^Klc75q.1_2N#;7 cI.caVwz k^yIul!iG`ݿ8=v5Yq1&WxpB6ႇ9Fb325+ rrͯ7]( ( ( ( ( ( ( ( ( ܖ:k$򬦆l HA' u'Γ꺄},q1\,THW' K[Ndlb#͊ kZ) P}v)إo[I҄}_T'Ib69vڇԒ٣.m*9M:3PYxn'g7%C0>xGsRk'ݥ6ңvy;~t=kzwmR9!q $f]6a@b@k:hѭ$ԼxVqUĞQff@$`dF'ITn.hoY"hleG _  3.{mymXpzPGb2ru]>>%a] 6S~F#/vg1;yM[ .R6iut Y=3gY`, 3$8'+=|(#Kfu(.`[~NG2.NP'N_WEv[}zk Fo,O@w:VTZkontrB6&XȻxq)g6e6D#@w \m!}Ef7n^T.72Aʐ !yRph mQJFnjp96b>>׵dWkq8 b1r9oChz:fe餹1l)T y8JЎ.}NK%R)2=TymO%J>`R]Z0 {iկūo7 7 4ṯ!1U8wg*,PspFN[o_/㩦MEŅ7M%FVbBP z5մc^CfW^Ok5(ΧjhV] q=1nMP&gQo|N淇r7#N pŗ MKDyq}qr᥸UQ; 9Ě*Q.BI3*bHԤ".[kYL7$bm 6 )J;G oym$mY}BmƖ&nq,McYSLԵ VSl-!?9W4_!n-u> +3( 0$aesZh qs^jW;<ǹ9"H$xV0 ( ( ( ( ( ( ( ( (1aכB4E7 OLg^ޜe$ӵghwύdf;w𮆊ϩ\k߲41cQ@Q@>M?>M?ڷHX*b$W/Pk{+f'VT(IXQeOOvOvR2?;G?;V ``[*}}niiպ(?;G?;V ``[*}}niiպ(?;G?;V ``[*}}niiպ(?;G?;V(K#G^?2*?K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94D7UOEAo?>/S@}_O*K>s~iTPh|ϜߚU=%94Hi3+M>(+Ʃ2z=+|=Hҩ%s Rv :U[VCOGf޸n͜ OI-6#Aq$.pHޫ iFX4>FepŁ݃s?(ǞA_y&$ڍ<͙L}V[8:6T74Lg|K3$.Ð %jeKDq' R#8+H$`xޖuCy&iy- Ża~W9¸eoM,bxR H7J#G7:O^+S:_u ptPFxlGN*q(43\)!l)9*c88\t_AzvEm%ӫ6nl4`qBl$mZ)%շp c#|s\}pkCDuhud{c)1x1xOGKyq"{Y#=ނ#ӭa co #vu'(_SoQu{`[緖b7d`7|/Ң.V_wԗmco|Hvf>gJXbry1$ms*:qQi=t<$ of&v$7([譤M<$.aB@I?kT0CmrN(pJ ( ( ( ( ( ( ( ( ( ( ( i-"v"c F|p#4/1ޤoZkFKꚅԆ8n-heؠ)prUhsֳhKĚ ϩZ]_NDJvT ہCx~'Yd3M+H >W >51^|~q1ҥ 0K /1q缘$Iks /i ˢ<(#x!VVP$ȎJЏp(RN4-7s\K;X.U#jQ8bҪ֖1r3s(Ƕ~fzy~FM-B((((((((((+?rXz8ʲM,n)!GrK:OL屁kBM=}y\Η+ʡ|%IP HY:ڗֵZX_!_TךKmï<'sqwI-%uڕ@>iPDdt͹;OՍ^նkWMZI4Fk4K_!R_(e\cqYRzK?!e6myW|R,J19RAIoq?SIXȳ KPp<@8lSt 弊8,.h%ӵs ʪ*K|gi[k'."1q <2p :tBpzus2Bs!^35PAsH=#9WzƳ&!GpeeIBrN6mծE7e2n95쩚k\Q8z5TȺH/Im.2a w4^fFPԚ$YMC, >lAs!N9nR bhM`5ܬ|$OviyE5/ ٿ=iI`l,9O{:l/KOz dkt su"2A>-Jmd.,3T Eᤎ{ ڍ춺zѼdMgLqRkIG`>Iv<1ۯK_D˭N{KN[)Vq懍ompW7F;i%ۉ4_Qܤm21q[R701h$f uVBكzt-@00ֿ̯ ]j:j\*3y a885tt(3^v|Q;$)m7 ϧxzL[y&f{u8r(Ѕ֡w$P }w98f:TʗƷoG9\Gs=pqqj 0UrzV|eo+mUb'|G#Ո<#cVЬ 6N(V09RywJUm^PB݈DR~IW y[)6wO"ͤK"L"w(#nK 6::ji$u*j|~RÆ灛pĩ{vL> 3.c3dmXaԯP[6!J,pēpkbJI_s =r5sDd/0– A#l^@ R mÇFFqsgVQ.d1BPxȭeE:]Ӣ)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQE⋝N,E"&$PV@a8 T FsUO{^)(2,&ҟqηncIYMrYyϚeΥ^Jaoqa!?¾0~^_u[oíiY\<&xѝYA% /#Z׬3DϸkBR,f=șrFI OQEQEQEQEQEQEQEQEQE ּ0, qo2zc=:/|Q&>[Eu|k 0۸8t4P }JD\T=M_((4h2QI]ʹ%LrTiلdtQE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ Fays¼~dTh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iQo?ϜߚT}_O* D7Uh|>/G%94z(K>s~iTHgt/?WȚ}QEW3mFJ[;eMc]5c>u۔e.lskjj)Kdrc)ԫBTMK*ڋ;}Fh^ 6ڏF9Aq^pk: jM!a895em.cI3) [EcE訸V&hF1Z&]="fL⸒=B46#wڭ%c#3}%Dž/4nk-$e14y(žer1j:md֚"XX*2V ~i?GeKGE/#3m8\dɯbߋz<72[K#J|9vfBo-qm/?tܼG=xDtz[֍:ۭLztKR>32QTn#pxZ} Mن[4{^AjH; @ N%։Cuž*eð$Xr`WjM=lmH®_?ڷ;#/n#qIlEjV:x8⅀2G8$r6dF/-0ʐ-HȞZP8$ddU1+ (Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+u +:vi+ˤ_˲;8n\pXi7as趷,tؼ7~gPc$t^#^Kyҝw=Wz_L-DͼQC>Gt;]Im]$fSgnT:>qk_&K0daF y~[ilTs6}?K[[=nkW rPZGo 1f6Ȳ3d{|7IS֌^KvZFʏm {E~7gQEs:=fU:v"j2Hbʶ6Ay:WWRF ʊ뛫]t1%ͶkmG$3nAjT-Ϡͨp E۴UFp<еv= ;wh^I\*'Iqs]I+U+ہ]i~8qդ+ VѴtKJ@c`'ۏI^[ZXmⴖYa1˞ZwN[Ɩ˝HN=NjH=& Y`,㷸bDV` 5>?M?4 djRi֏| t)G|d~um+m"pvȢF!k}&deiZ8MHakM@"Q*]7htҎm0(1ҕ4}2% h$`P U{1RѾxC@߇Q (ZyO[ c.\9f3,<G `ZxCF?M @ܞ}&}&}&}&s"'-P袊((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nB܇IEom̗?'@uxóz,(2Am-XKնxճku \[>88    "T|>rڄ"{ӫ\h7#w +p=ǂ49|9 ]68^i(DewF\[K2) \Dn8U[.]BO[BTY6>U8bE0PQ?fʥI' 6\{kMJK#I£]Bya "oh%7 DU LMij't+>I ˏVIޡ{}u1)X`\"*nnսԒMխ]};wX H*0C鍚(/@a?`1Bj;Ffr vp6Sv=]]E5PU0@1 Gl+bӼ=iOI34nU9'Esz., ]aX% ŲA2*b\r(8L.ғ.IHG^sW|%}Zƻ|>Lxdɦe{WF1d;0I9Nw(^ zw׳-[:_%cf`@U~N6{͟D SQk-Ⱦdf Wnxo@- [IXgy}g8r"z|[c/o!l^$ pw7dqA_ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?onedrive-2.5.10/docs/images/fedora_integration.png000066400000000000000000024011271513710110600221620ustar00rootroot00000000000000PNG  IHDR/ IDATxy%Gu/|NfmwY4Z= $/$YHBOϟy@8|cC؆0 xswA(R"2RJ9+$I䗿%ΘV'ppppppppppppppx\!',4;Ngiiiii^0|<gTJy^ ÐͲwFZdxm۶c=VJIR,80Zp!бNzBhX 9c9fiiI!2Bh74$ItΓF"1]/*r֭;v젻[Gs888888(ι(iAʷ9NO]J/mJhcZl+j[Ei`"=;88888ln2W7x#]d|8g}=*An0pSj18¶mۺݮ2MS:3sNq1J׳,C "j%fo|c8 !*̀%$WUʧ}_VJeYvWh0 3Rj߾}[1)DԶ4SgYnɤ@Os>iJz;$i[( >Bʴ<9<#k؝w/E&v(3S@\y^UJGx$6o !VWWRnw<W2TN^ÌhN8p8)U)uW~E&}5%e@ϿdDiZR2"8h>Yt@77'|>8暛nj+,TO8GW\qm};>1$4B\xwW\A[U0Eyw=sW@E&o{ #z2 3<@$VRL;"6cl.Tq)q4OHW14Z!+Dg}o6=*% 3F///{?|}A S$Ng<vE:tMEC] 8o&I2I}UBcL6(и[{- Gmۯ{뤔{nn{]wr)W^y(R'd<9x+/,,Pd R`!.Rz)ooaW0$'γ[e/{{{1о(?Ms?OoOZ'C iqjw]}4AksNrt SU1rλG?pwwz׻Syի^_o~u]w߿i%9b)'=i6Iq|g~S"#Rl`7`˖-]vg>N8tnKPg>|+__ve31JN:88888p83c='}g?6b7>K)?ORnJ{'MEY[[[kQ|Qjeʊ|`IPJw}]t'?I:K.k;7$駟~ 7|K_:S9s_|u׍ t(.{/kn]ynֹ88888eмͤ_|<ϻ@j蠡{!~w~ozӛ JV!_ޥN8n Bm ~[VFoy[Z@=LbpP;-"v׾B7E}s~Ez꩝Nvi&4 UÔm"=Be/{E 'я}{w}ii|'> 1MdztIڮ!?Їn֝;w?m%W^!׾~7 ,w !ٳ{O~{n!Į]~fKKK$Iݾ@$kkkd"$7[pAVJ@V4E*[sdQ A>O<&g֭[O;/^G?0W\r _`vw9}g>A@)R.hv_kLZ0c9˓$FБ(-[Mr)|Hxq6PG^}WG>C9~K^e%\{{W]uUe/}K'vmwQ]zA|ӟ޳gh\s_.k_ڿ˿M}Ϟ=wSre][[:‹шrviR>0عrpppppx,,㱹RfwR dΝ`Ց$ꪫ38ϾjdzCL(9`g\zB3[6EdH3 hΧܮy"lҐ "q֐e9a71MӓN:鵯}m$=M){QJz?/Fď}ckɲk5"#b wv/|ǎ7APbmNB{@὎?w oxՠ4dvfIK47QVC)) G |q <r~R,G4=oChtv}w۷ԑhX1*d֏и&"r@:y<E?ӵ0 3뮻?O~8={|Pxڰm۶>zֳZV?O2ƞ%AOYqLRe]w-rצizUW}.+RHK!Ocq crh_A9@}mI|h&ݽ{7[ 5P-[{g}{Ygyg}gy9s9g}9sꩧ>??(vQ |9yΓ . /<3:N;s=3;3θ ζ3$=-[l"Ц ;ԧ&IBƘ^z)|sxϞ=_y)>1xO'[ %_$kyy9px'J71mЇo]q|M7 Hc$N{OEQo}_۳,^EQ|[nt6}+^l<Jڵ}S$noF qk׮Y,gL>*N\%c>Cf̶رcyy9MwZ-]) IV뤓N" rWHs$bhv;F- C:,Gtp)T͊N%3pppppp k۷޽.?!Y=y^'vٟ/?K_һ.2N /̲³A@^!tLɛf Mo|//h`("W+ R-oy Ns{_nI{_+~oK.wʡtu${J֋PՑ.aݶq4Ò g_ $W^GǴ1;fxP_o?|1're !/˦ 1'P9?.>87RG 4X2mT>jѱmv{uuymaje?v> k8tneQ7J56JQ*4mA LoEx<|&͏JJ!P*³9qV@ B$*"}| N=ppppp8*AӟqhH$_c"z&bR]ve7JMߢOG>:X^^~_4{aaa۶mnlPOUkT0d[A)٫inw޽V_dTh&Wh4zᇇáv4rYbS沟4 RT]3 dIm陗t6)-9TΪ7I43BOպ0O4#`U?Ä;Ytn۶o>smhgbνf۶mo|'>Y=ß1PҘhwܖ-[!_2 ?Al:Hѧ6*8IRDƵ?_ Q-jz/ pt4g6$ hdCI BL V+KMpFjL*V˹:8888۟ԧ![/}4ۿ]|ŴfO;|ӟ>;CZZ5@o0yX,M$i!m)h*f 8cDFePTMh={Cl7#wjʀH$I:%_rH9\i}."ٳ J4M1hB,cmG% Mkk5aNm۶^C`LQ?d$rmmm޽:w*+`-`}v0 9f\C,˲,ǃ`8&IBBppppppppppppppp=~ 4piJtn% 8r988888888888888y:Vkc4xOQJ1BYioX1!N亙D}Al ?墒t{1$RiQAY{YZKOSo ~etb9l$eA ѠmCC(-:Ø=& RJira`"̗RR|s\TG(GYi";Z=*K qc`2Lbr&Y}>,dPe 2\18HgkۖffO,#Ũ+"dp8K)%4!2.X$aAB0PJH&P4|cqZGk=4Koi&V9Uf:QBX[^c,MS\p}z!6NV1#i,m4-y#fC1Rz$ 6Ckz*,NZ"!DeƚOZ"$IL8nKBJ9;+G&1vp T8 Lb7TdQix~Q1d) PJeY!y %0q[)O, `H$T1% !惐abGD^S PJȲLR+cl4pΕRi".$I8$I,#WVHc`Z=y,#lm~\˼KR|[o)-|*J7e&e|FDe6#.E\}Us ѮAGQ}_)j8}1O!S[ՊCqNӨ*}/c͕ d>Kdy5%¦o]Z-]\fs5[%<F4%v+CߕgIj\$(Ȕ)AiKI MCŃK+ʷ 2{jVԻ>}?4M7%^jIzi>inݺueeE4b+͏u||څqP=PĹBJn8P C`IX+3Vؒ8'?7 W1h8 9jfD'6:sd5Ȁ됒2h<gY$ cIӔ):opZV8,#>hqqq<Hↄ۶m[폲$qo}vdcv,Kq ="IRDg0+r}=2 66SVPj.H1W^WXc/ȲafT̐gScC& G뮻aQQ2WJ!0˃1 <3ݸHƊ{Ú?v,b6Q(z,?G4eT)d`@N]bg8Fǀܸø6&Rq ^dּkUU[eHtfRCX\Dp@*Zcv3aiW6 5 9tj̺ M IDATiykټ6\i}aR 9CDڨB$IE<憆%),q6 's~OTdG"&I$pLQSВ"y'=R@l)`-¨rR@"y#9c |>/߲*%+Q:c@\2(5d$w"9#)08ɴ$4 sXJR,rB*NG)h<K$!c<iAD@a"C,c}! N2c#{8IS>C1Q,@@5 9USiaYcys"LB GPo2X~<2#",49 [BR@b&=jXp(>mKb]ΩWISxhǺ+7k40#"*8t[A,--ܹ23hm>GWYZR4LN܀AP?> vK+T=:Yf[>f,@* c(ʼ|MNC|h&`+P!aTcqY0`|d_+0BѲ1i Zj.icsDe6͈l>4NFB,heN&cnqL c ƿ/~9ѦRjn7I)@)nzQA*6xL/--83L@"2s*m W]y{jf'RJ]9bF/Ԭr2T 2N R90,TpYaH/1A!)GQJ)DZR* NtlEh4Z[[CdQrΕ}{N0Ur Bqq;Q"D,GRJ%ID<0md$h<$ !=.jM)?ׯ|1O{W8U(ePG̀)PTazDjʛl ,^Xm>f,z7Z?ؾm~gCL40G'̲ufX%<[V² ee.XޱcY9ieR{ԦoKYoŶpz4Ćjy}VhټU93LcLqz"PxStecޢJM%e0ИQJ2)S3`0'=~,cHQM7gh;,9iEC8O :xq95na(h+++KKKq7X*sRN&DQ݅N3 .I=///F,4F*0-f8uGD@ѱۏ깗.,J@~ Zӯi &l~^ "4]T4܏}'M020$&H)9" ÐBˣj 80E!vnGN mR6n{WkRy!ǥBXa u'#UqxqZ=Wڌ5%KJQN3׍~@f;RJ3!Ws gʴUa ŦWAyՅ bՕ `JZOa `z-LX{5gq,Pn'M,4[3S̙re_Pa4F#HXN;O8q}t@4"P\lD/tƒ#M)1s6csc m_PT;U5K; KOhyzC(~#u\=RJ! 9CMKq~.vv>bAp0e86%8pS6UD*v_Bdhce enlۦa'8ʯUL!?rJ } hvUCw:chT,`2ŀAc 3M/ϧGT!+UYlWh4?! D2ly, ݔIǙن]~ioMq4NXQ"GXtU1U;X"Vr)I CE A;Ke2iFyٍC)e?тnKx/z kk^y)=ƥz3/:iO9yqrpX!86 ˓ӆ`g i *ZUmgV.A>blQD?ʘɇ9N6Ċ;t6,K;NoMo}vfצ1 L4<`0Xk;~!M~,h+A7c>1u3r7s `?H Ski*f߸YrnY[:9)I B؇18gD2+6OrVyHW&8J.~h2OaiC~ՒlJRt4ҏTlh+3  RMg8 <bnGz9372I1КVJٮF#U=sϧ@!AB-O1=JwyPiC"?1?ㅅ @Gz;w^g-.t0xo4NR4:" 9nSD|tSG3BfdI)A)?Lyjq)1iI)4?5IAA%@ٸnz v( |eeإxzѕʣ`m@J?vԑmw}}bVrIdjWDme^Y,wnGk#W4yԓMusI03KE&j20*O%ZD1S1Ucɹ1KUxً^E7c{k_ ˩fni芪,- N&PH@"IآX-Y67i0m1 fQM5joBY-mRi^!"F}\?H4I$[tl|nbڨ(l1asJVz\a11 ijF#'#FS'zzL =ኯSLAZMKN7C*8Vt$q>8*/o|fhSQ3o:JQEyiu ̻3‡|,`ZVEiP)iy@c4ߟi0TmUJcIn&c1;:opy9*y_>{ BװʖZdSs6K|BJ[[H/8.QCUyRttҐ`z;d{NĔN@+'LH3˲nǣ8{C)fmxSnJ|,6t;#]RoT1Ҷ3@U0;Txw^GA ~tĬ@ !TD2P]Iy~1lkVX9B1XO>uHEc\ PJyC>t:R xYT] g.& X_5 1 V `fd{}9|7 XIs~Xڤw *>fF؄ij޴i-r/O'Nr֭'|ݻmxbg |}LdИ*BH|ſŴT^(N^_qP,LT$F~70&/Y,ؼEc}dzW4VN.ݤ)~Bi㮑SFӭH4 3z(6 8׫bJʕ[pl k4Xv[40D@&&K9}ȝI7RQhx@*A36%! 0<3Ƙ{H(N+j9I'Qa=GX/y+A"X~Cs$0|ߧPPNk )\y`~_G2<],!XT:)Ӄ4xu ,ͲLDo-I`k@_NTJJWQL RIO*Z6*i;s\@*3Rm3QKFˍee~d 嘳(ZZZVs]]]%uAkBIk+iO$#"0)f>U!JJ Rc\I~2~Ӄ lVrӔV*>B}{n+i|LA p8|ܢ5or2>A1@de8(7+ *|?MjLsv0`S(U`o%VN^q_QUa.N`PW-nQvQ/NYa!m3rڤ|\ L]xRJ1UPE瀈0b4GS%=y@Axկv+?'2ҚqDsƓ?/DIyөIEL"f"QX%XXPT5t%ʄx VK >E0]􃛙}?M3P 9㜼;AJ548GC ,(ȶm[YRẹ_ǜkk}΃8ٿ:h)Slc+􇿏Tr>}? 2H/OLsaju9Ѽ4zm.ƪvZ0)3]UU`4ݾ}ھ}ZA8 8PiPo׺c.,,ˉp@w J+DiPVK&AX6B{Y*pRH%02(طL޵a^N n-nmL$g[:uSxE2A:fl;Q19ׇ6+hU˭ 6]heNSL&0CO~ukE"M(1F'DQ*`O[W'$+}ea_)uMxQ|+dbhEf$h帡lSO3Ma@)HǗRRTAhus,;AvmK;{Ƅ 4 2cJQ ca4E'oz3QT* #=gj[GՙЍS yPQY*yXEV1M+C(߫eETlfJv&k'XB*$I}&gkƘx9 f}k5Щ8+MP6Rh>L{ۧBG񝑿EF(|PH%bw1O:餻xWrlJ.E] RS72Ⱥl,ko$%F)Vl CXYԙ {ʖj.SYO8Sx4<EB4I<=ojm]M0 osa7# 3Plf1>(F(H9N0h0UFsIAVKM:!Ws3$2F}/ bS hh ͮF V1&ZUEZ9 }2(q {}U?Q#+ι0A2qGQex<}Na ͦC*B'=qﶃV =& 8lyLZ&uZB~~GUJB+I{%ZTA2x<9pDaiz=iE$I-'1zhՔf. MIPb2PB<,3p?"٩@4e#]F(x$0I`@91v~$p~UJV5}VvjGc=vee,cWo{9A$InM*D2@Q"<'u{!8ծ誈aI"DC\}~Mvz;:7ͩFUDbH(+0%*+DD^2cD  FFeYFAʆh4E">^ St:re݅NەR.//ar;f0ٓBdB)PDL;i>.TRDQW V'I2>gpP=twkK#70+P{+uRQn2wx8ߴL<2E %4ٟ4M4ˏQz,[MX$m P$ AvewRIò\,,ƽLnfFfHJX`aJPJo@#PJ,G k˃qoJDQx'ڪ[][<$ˤQ9O|,t*b=6k{h:wZvѢxX|5 R$2"w WXu+D\F}Vh*8f 2  p=fL3i~) ֢sinRyI,˴PR)'9ZlI+3ET|/LtB؇ a栢 ”1%Ȕ$'9g1dPDÐrNӔc.XnK)j$m*ςQiDig;2vѨn$m4U5W LD@$_ꍸ2Q,}+:nJ,19SJp{^qĉ'n߶+eqJ3=+=*!]"QEWɋJAf5ꐢTt^"ѹ1A g.-A@Ȁ 0e!DE1]zˆ5c˖-R'O8D)?裏-Vn{m?ۺ٫&J.6OxIQdh:BI3|om:G>يY13'%!YW]ͮE܊:_IٖLM6&Ƚ=iaRe>szr1!\3H"HjZaTJQA+2Y':mb =&tn&ۧYs>p-?PQjQFQoZ篬PĖJF!Qj!wRJj v-Ak䕶_],$ q]y0cQ8Ge P˥dB d~Z2`PzӋ,0W W)C Xȕ9"Uu?+dDF~DޛUCR5捌s~ _P3:w+)(,SDTڙo=-(֓1FNho)ݝ6Hl!A p(<^3~#?p+ݟ~fgۆAJLx \ٻn^wf篋:Q.|*A,K% m'9}Ih-4g$¨"/N"$Tc+a5%foN3CM#yRg,˿mͫ!׮[YcQS'JPs?s~aeo#'AxQD*BE*QHh{gNR͆dJ)VJ- &AŎ Èz4M#hW1 .aXR= l=n&$>|./^RJm[c ZVbZX,,vϟnX.6 Beu]WU\.$ɋ"hxy$"% 5}釜pO+E&o6˲6|EǾ3n؃u=އO,ݹqsˊPD!5TeiA(NE~Ww$Ri`mҦpB[x3ԏsb ؿDZaQgvW㯅7qu;0>\Crq0ؠ'j.>{FѲsVLODxS9ݣ0eY 2:@?y<+B˲TA"tVPD=)h@ߝ׹rxz( \d/ҡ4Q ,RL}Q{[X!58o!6y qvJ;a!<[L)‚.YŞkvZusp'[{CFHy[[G^+w蛠Yd?~K)ʲEmp+n`d݅01i"K1[vgMfķ4Hӟ~WQ4rګazHsLjݮX硹^==ͽPcr1AgWܮ'lwRihRhX%?~?ψb ,4< F cB]Q)GòKC7.y0-<.:k2 ]zK 1&]d2̬H w'ֱVUu8ʲ|wRjZiv}n5ƊyQQN~ZΖ~J)clHۛC^آСDfojCխ[ke:9*\܈#"bK/=toN \}{Kt/ 8bAJtuBcβ΃v r[$׊'ݻ7ky2,"rH!zy2H֝gs8'kԒgռQ1r:fdozܳrOot :gV<יfDB2V-_(p74Ѯu8h#dkClI'R83gFU,fX51#|zhz[lnx%|?wzV+3'a0df}CtT~!yX^=Ǎ8N&<%6Zf?O3Q%^u/*zsFދH+ۢ(,zn%p4M=҃y鷿틋<7MY2Jb.Y(iy˗inr)VƢ2y yf hԋǟ׾eY&¯J)[J)`T_>z M`NAixL!F6axɆ&̑!M67bx8ʺZ'uY.eYަ Hzp"Zׇá,s)^?~,hCZV/^x3Ix=zR?ZnM&}u2j׏-?3iZxǁ5F>7PzXyG? b* ]okmb@sX0l?5L-ˈbe:l * /`L`9N] 9z"AU!8zw~n[ػ.WHO=U>tdX0D)p7~TNd"ˉ\ gv}}=IX׵(,E6/G;;;uŢf[?&UQJE\.a^!s<  pm>j:냄щ0uB2~䦷#3ҭ )*=7p@)6gx ?>>ԨZ֋LK_$I"񧱴  cLw$jh;XkZ,,vBĖnGef6Ɗɧ>w]'ONrQ IDATVAkri#3T]esJ/w~ŻW?=,*νY ҙ'ʧyg+٣<0 og<ҩ5]sݠ(Nd<ȶ{@ K@#x:L'YiU?~ꕘ yURmo)Rm]JWeY' *81RD5̣PV1$Vi-,V~ />[o O)(LX#7r@(0^(:#+ODrK *pz[!'3J} =3pu+рRZFfJJL8l2LJ%ZÿiDFq:ч~1OP2!Q:¾t:v/?!|!oeWiTz.¡Qkmq+>8/\%0/L'¨f)V{lE$d"zLވ(&j^=oT4g~Z ыֱ*^hޛ 0f4a^!%[KíxђЀYz$%a`dT"]bh#]}DZ|ک!"`}~@nRZ[0*>̥]Gekر|;I pss\.'nJfӿ뿖jcZ]__Kvċ\TH/E!pfʐ.}d0DQ&ā_|"HkSڃk94X(: o$%ADת2uyqeȜ8@?]  L?..B@3||"G|&,R6=x0u],b!KRgggZk1ں%Ic$Af>Y$=?~, V+kWRo2c i||RDk}wE2pON?)0ZMaD3< %D:c^⍂u"0@] 8?~\%"idBΪ{me`^<"]r,kD+7닪*$^iJ{ᓥ䤍 Zȸ99ԧG4$?tJjԏoh1N707"J~/_fy2phjXmUUU>=~gG:բb0o4Y띙 ‚%,J>vэCˑ ,p #! gK! Vtړ49tjxj1Rlst#FʜRBuHB/Ekm$D쑅HMP҅(91FrRr__ .y]עj@J=YkHLDC$7F:Pys0DL!~l`e !d#+ BT|/+ݿ_*B̅ʪe{b<^CD:чZe,"~6~ɦ|{ي,3YTJU#YD5+eQq^Ktߋz)It]i]\' LDd~@7 ˲ /s^yysssyyPild@u 7Da|vz9ƮzpF N41ݺ ,~yyyssT:c banR4~oఞFp~~߿ʲ%"%ֺhb\l{{yPrWǎ-¦ƯF6O *;co;70p5Ixp<ÎHyE !z$\x! sΩ$\PcH%6VUJ%v "l(-0ob˛ )Iz pWD O[[EgHIjN;@y=!Q%6T~hH҄d$D7]}vvvqqquu]QY8+D̲,2Dvz V)x\)}~#T[MeQV*6h_SzWk15bOzھ;#`r&~Qhmv+~|UO^1|`{۫)RzQK,,ӚHlb__O{;#Op@S _/ְ=%l.hO& -HMpLvitgN&lzZ@^d Ɵ+$|_x?55kk墨J1\e'4!s/Z{^H3?BrBux{ 9 hbNm!b g`@LfԂkvNQ@ ,`DJᅪ.tյ``o# 7ȋuv-X;ξXbp7;@9Ƿ;$\ VfAP(R9ا_|+ggg⟛Y H"0T Jk-""TAC"Q7g]{~]p|>FDqu"?CqscxupDp;cS3|;,j ФtUJ)" Rzx_|?Crv= jYtm(-޸AO~Z+- v)8CKڹdp +Hze\?8hsVօ4u^˲,z+1Y0s6_e닋$I>ߚҔ[Rd˿Z ֍.!fZ#³g3n سS S8Rz{5:t+"NLTP[Wўwp!>sb0)Y̍Sb>!V SEi}5`mL]Uz}ﭭ7g˼Q6HC  q9_0|&{9 0AcA{t~ Ri):>z\ g$C$۴q,״frlJt,zhYZ+QKf?ٳo۱,E`ku#e{+eXE5aI@}a=oa"쐃 G &kHE7hhqF`pxϵTyrsw=G5.ɍpf&'o}K_D$excʲSAbg%bl6777%Zp9H}wr_,HםEe.ۂ--?QO!!$gO c;C_*R"7LeNS$% {!~EE(6Z+<BB$ vD5MNbO M`{u_FuH$,KR/y岪*1D(,i\DeY7J/ H|uu*u]bqv4=䥓Z$>&"~}2'J793nP ? uklt7eNeԻŲc^z.DP~[2ܛ~3 8v:2&ED̲(򦛮ҿҔѷŝ4hyq>4$2,>G7BQ{c|aRZe,[,E!A5 kۍXjD8݋A P/9k )($IUU- 37M, % . z;Ne`l#ݟ7s-2"vuo5=-h FDad  ^f9͓AB'&:q}CW\Ag\niθ^A=!ᜉ^ 1 B($Iu3[RXYcӔS`ʼPAgR z34ӏLu.~䭵 ql{ C\Qg )HL$IeZ(. wX`!LVˆ"1Dr^kr䫮vͲEUU2䃛5szVDY!"w$>ybq}sx:r7;c3垻SYViS}ox"Kqj6N!ehBkBEcQg}nnmc"_@mE"Vx]d48;D`= [pCW:`Lu]3bk#Af~ "Т!'K#FgdPY0Ve6`q< 9;n}:ub 4g&Ju(e]C`t4ZJAD! 1"TU'-_CYZ6zGB6"bc8_V !_ ;L,Up㌁ 4'7ҴWzyA"] x)8,,݅+3$IŅȴ*s"۸jں3-"oEmfQ B޵FDR* 5ϸp1FkmlX)hH$Sy֘"l-zg ?"u|+p2 AIQ)80$J5H]ג]fF{Cr48ijF$bWTU%2=1s lכ+w{5ꄒDBZlYr\V[3ˬ(,UU|t~Y~8 kau٪}җOUe̳6SY6Ia_V d2&6{ ݋tJU]d9Iy@[G_?*Jtt?  =66";fJ „f@l Ps-k$IP,`,%."MӪ4UUeYfl EI[^ȧ >3t27~E)G tBj1@}O fC<+ۜ&< \eXW[+Y9n~^PbQE.J{kT@ɺb*J6VePHQA]j"e:󺶿V=!y,ZȵVDv{c{N4?{ݽɑ`&չ2Fx5 Of0S9.x@hbOdYrټ|2,#̛ ȪH15CD3]A|q"fL=/eQ/SYhZ)$ogY,2Zu<8ߘ?a@C HK8|? ͅq^LC6F%ڰUZWuE˄Xe40hle]^^VU nJXCJYO{;\RZŢN_3;u>)g]ﵜS?EHZβ(5vC˦ajN'Q{ :Mw[]V3I20( ) pze&Bٞ&~6R)LK zw7 (đToΙ>A0 J\iӪ8n$~Zz\8yX]mbSa݅ڌWIx7 t0 7?=9ZsV~y<P HjA s JvB}}sW!ԢHn6+RihA"Pk|'>(PHo~zȣ7 w5v( *L^ׯΖF'MJpQS>`+qfYV͆݃>D DZ* UJ_^^fYV։8,Kv5EEbQaye2y]B4VDl]|prvA#E(4MonnͿ"M~$Mܽ-,`,an-O.[] ,D4y!説...,*~([+Z _2Nۘ2ʒ} "Ӵoń+X+#}T-hB~ xWh=wBpG.{aNfh4i1 N݆ Q2625VWx?ۦ?n"ntcn> *2( (B IDAT_p8,W^yᱦ',j)$*IHkxz(^۬}Lkf _ۭDP1[ 6Qsu\־fh(^[H`J!EL8bzt妚!y1qQG|3B«Oi[ϓHGuoe{)*Jk(Ib$I/G{,|tN}\XU)W1ۭҘrT*SpLw^gYvyy%:WVgc ϯnooJġw.ooo }~؜=Rl Z6vl"D)y^yuJ:YP<[w>ro)е7|~P;?v-뀃CXaFknu, T"RZeg![PZHxB@}zHUU˛Oh/#"ZD(ʢD0R9<~Sy@(XIp "&Q(jHZDL* א`J \N_B~+4d,p8v? GZ %)gqwዐOt{)$o+N GZK z]U`&eg*I"@s+~( "1T֪ &ft8ۭ؍'Ib78Bvt 56>k~h] @|_!w}F-v\ Eo}R@((va v̶""y/QYubξF\RU"p8DvnHPʻ;??e"^Vv]VZ.6?+I!f@;(n$3ܜ)\€~'* #X.ƚ,ˌ1_~7~뷾o)rڲ,dU0cׇr*Bq*׏<ؽ%uy$v;Vvp%L 'OS6qN 9 d2Kt1%PnG < &Vն6OKb-+ o{bGp:$q5p{hmLj.DrVPF_a;ͲL-1|+^5 brjV{)<07gA߹4kYI r pJ>Ƌf l5Qd }$&Z/& 9T˯k(հ9[S v$ ďpb\H| ts;8~>>rb]n7Аȫ֊HD3eG狩k=ME﫪 ^E&xcvnbABnok%:[,f`혵QʲJ҉RJzJw΢G]ݘj'U6bW+l"Tγgϲ,3u9OfO~%8I RCAs ;0-?}ܒ0JTuPR Kˑ=F8&9vN'B5351]{R5@4~el~@x6 0s,vF?ォV{e{q.),˼*p8?]|`ʲJ)Seo-p-?Mjo{Xbf@`Ac'ݍFgZp[L\8{w}! 9j o=;xG(Asx`=>O!1VTZ^ꦢ[Cͥ3#D=| 'ʕO}SyE!Y/)ʫ"Nv/rk3h'&`w1fZAqRhc"YDŽA:I®R eNmR ,\{`9Q7ѯ|2`ARc q ZYP߫) EQHWCpc .`(lnnn\.@^*'PJe)32- <}tdu﫪+cyl"2ϹBbw(Y.pbXͣoڹlAN%alFn%YUU/4+A2qz ]}N5<֟8`5 f ƴa];p =Og? (;/{X%X+G:0/PY.||sz[s⺦ |X2hU!޾BBghb<&KPK6:"%3;6a4tTRGʴEB9/D]V dkք$IғQlx ekS*acq읺1>~/tr\J.Y gD0g>?ٳ?XP_nnISe"q|JW5~>|*~2RNPυ,}|X=3p_*lU4 P#[dSi**,;??~u-ZAAbc!DZx 0(J J%̆5Zk3*k!n캠cPpo a=>`FuR>U%3`b_$#;&EL *! 80F1 `-vo[i֚i/}); o /w;ujFȳh#n4 7y6 B=tc|Nރ[>Z' {hú >mnwgDӏ B]7Me/_4o6>=X YUl_Ƌ y.O@t po,?EgpJw&<ٙuĞG$]$<| A/C љx_d tmz0 #, N=~q/q7km粄)]%Es|TeWo־HA 4F졪lւ)DTuYvZ]\\yX,WWWȆ,y'Ir{{Owss#fi R(EE+]cͧ@Imn-<µ7uw`W.;5]a`YZ/^V+R$Ʉh'I3W>(9zF苟dFo3jMowC$K AՙRrzFn)5uWu?7y( S !CoDҚtY- ÍN-Gy熗l "\L+A$Yfm]GMWWWX:XKD}ǐZT"ҧiz~~.Rh8|rAF X*$煷:F+*\,$zRjyo4=]YqL +XeI3s:i^o[Dy}e~k,j9沔'd]* f⸵Tbi8$=& '77Ĥ K[=y}JtUU%)҃Dmro[غMIl  CF- ad"0)N##}97H]&+ i۵;b0) XE]ƚhE3ɉIlex,CD9zed('kEkZ[׵<1hEVfBUY^VǮJH`wj_/}KiC0mN'7 `yQ,˫몪8>~Ð>~grl5$r0O{P##qU:opP#CoY_X,nB#j"RPM 4|~YkaZ"b$R*ZBf ͦ*ҙ,kdZeá,KcٙZ^zb %9[)ٳg璫e\o|YѾdiy|'&mg5f}}5ݯ̬LaX Yz֚H#v+BMJbUa*刱Jh<9oX_%"V,53")!vs !AQUiY?f/d]0Q.<] <*AMOU#9!s O&ŞWkm~kH}(0+1 h'+y"ƒ`,xazZ.wW ` &*Ք03`[g|N\ǜqbayCzލ%>y"1X0bc/ bL X&7 `5<&0Sv<[bfE+>Qb8=dX1AZDퟦbLw⸧tUNk)}XBy(J/Bv&$e(He{k'| xz ͺ*b #"C̯#*:k4m\}z{{w] ֶ*j~}5Dә-O2 L>}\c:dA2QKX(hsAeAuV٬~w@Tc|a@\ RR܆>  Lo,V:,:X(F5G,ֲ)$њ"kLeQ7ݰL2ebH~?=@(h7Ǣ}{"V;`w;AFcڒHgfCl ƘnnqYFmf ;b.bl`[$zŋfnp( {Q&أ7'~|xYUU>ى} GyD@f^d5&"d{ɅFbyO!&/{)*70鍡%)9/*P XYZDr;IH$I TUn="V+E(*ԣG={&\T fY.8~ IDAT3;ﯯ?^1 eWJ1׌p|"[ӫ򫯇m YFªgNm 6'#7=kxnD')ֻ+5ɂJt8ӉvN˲$RI {B᱄r˅A` {pt&pki oIu,׋eͺ,.4n,[w؏ wyrssSEe&b҃!X?ɜ)kǗA'M|I_eN"[P$T)j9D8g~~~l={zFwל5f)35'ɼ]G} X=<DeYUU¨ "glB8\dj.q%"@SЮ q=Q`lvrs>3+d)i{ E$شSgXw0ȲeQumteZu27CQyp`O_hnnn$z.rو{ː:kD%? 7^ϏT#c>hP__ZZ#`q 8>՚Hbvti>re|Om[$UO E,˲_Z|2wx,iUY&!izs}@Ԍb ~78O){yq"r\<6G@Sc`@K%j`ystc"w?>;;{EQ`:Mrbk6JFō'XZ,Dl<mnX * AEktvh^BJj_VP(m0g"D? YT%h0Tڏ2bH4j%)fc c;`CѡueADJJOsxxƉ%@4I\,;^v\zh IEZkLC:):|IP1?u AѹZkE1 eYFq1PEbMi@&ێ\BKdnoou$WWWEQԆ7$;;YUŷxyyyyy)a8ʲ7`*-ƨzFݳ "rvKCDR0B4'`^_yAi8h+0!獁ۣ?JO3Eep\Fk8EۚP2z!Py<r}n,^ =8)6znPy)]\\<\.|ؾ'ZXIARXȅ._?!Ēcy1Ct0K>9>crDjo4MeUn'0QVx,ɉRJQn'sR)HABip$8$ʌdK}9[,=Y1իW/wpѳ!*`0PY])9q=^o ";\5|/GXDp꘏= o pǷ_:1._16]ǝL $AVDmN Z&MV5Ki1FfU;dTz(n#ec^|}￷kkO?X}yX,Hl\nv*`W-ٗޛؒ\wb眈̼KݪzzaK7$EMHFؘ?軾36l l PlZŒQ(֪NDdd[֫ה>(͛{;'8|"6dx`( TUfF2fkC68s05X`Lf0cy&F$s2]55e3LR͍G| =nrM}=:Lds -u8[uYeY&ըԄGb?HoB8h~v q*(Ҕˑg +x2OLa`я_ӡ=F"]xktz8IxBN$Li1hWaus6 r`yVr)V̲CTbxa|0sO>׾v@Bqs0w.\w:1'Iik _\ nLQB Q)!tWПY5Ih[ץ.*ӊilS.GoO擯v85fٟ& )?6@{}6|jBJ鴘__oѯ~㋢XyuغsǦ_lY4.Yv*Ӎ5?Rm-= ZvX83Zi3"0?t},5"!XmeZjҊjhiLP9px|t4qzcGo\!l݌}.<ީ5pֲV,/L·;vm}&fD ;92"wkЮw ]d=tby3ơI! ]s6`N0JΙ6]+"`GHqeDy@~;6vPgIF@f'"><$rTN7YqO6^^$ZRh ;#D0'( Lu]K^?ǯ!f3zQ]%c~w;{4&f. EMy3Hk(y9~DpD|H#nl76#uCC[tnftueZOb~1G SY1hUCpby$fY,Z<=:ω9\,\s8犢899ALcqD9X~mIO[^ڨy %>On cWxʲؚ)[GD-N kz.YL;gOWNuAdW*F$0, :f-s D,LL(=iLP;!yc}Zk;[_a<9Y4MTXc/yo_wDR*Ӥ)/h~Z5-"͎Ji(jlPt9QK:'J)( Z׮|F0Q}Pls<ر QIEώc^nؖdiK0H`~-8C}uqqA5FR\5SOdBlCpvGÍR #E7Ǝ 9 [yAVoh?[/ t\B%{b;8O AG%;8 O7_qN{'g5x5XMq,~q%x1d9G%Iꗷ˜0tH s{2 +2 W9_Fa b@勐)؁BуdK#As%HzLS^c0AbZz"ҊY뙺vDرi?C0gjb`G\\:!H+|&>LTG%vUUeP)#>&Zϒ&;::(Rdz٬i`n\E!1ť%ˌt|>ϲ śiuDĬ""X%Gt]t*Cr8'ܹ߄wpKnSg$ !30<뺶0EqƍѬAgFL"GI1/z+_?V%aSU$,#DOQ(0y92AÐ"d*fxyj0| X`WEnĽn~zbfDi˰)m-U]6Dy6j\B0>]k4ZkP4nKhvѩ 5ݹ{3[W֋}ў=t%d2`iGtc9ycO\Cp(2]PBfpγ} ͋2jlrvvbG"3YF換$1&:E@ <;n,0@{_]n)jLܯ8a'~HuRj =iSi3}t.A !5!sh`{۷U> R=9LhRz0vADL$m͆vK!c IR"BFDߟŌ_$I,gHQc?03mɡ~IH|~vJQVUt3`G2Wt;|?f59:wP,3N䓙;K/T !\Z=A&Y釔&K@nkZL$4|:5M#^*#+D,G\MCpH90$XY, TD/"())7qZ Qǘ;:I=%\ZX}үD.n 5+N7n8q\dyUU!L.5/x/_E3GD# 0H6W;%vkčq/8 % vJ$DZ!\-ehz3ؼ QMf͆@WUcՄE14eYm]H zyC}tSH:g-) ~I'us^Uy->K}6YMlunZLغLim]u>1AcAFf;iod^HE.u1+fx8>Ne]);=݈/$aꋵ)8:;F…K6ś.OC5d')xuQ6=ߕganC4R:Ax35E7@T^ٯ祊I]d0~܁.0YEꫯHbb0zލ Nj꒲uC#Eqtt5 1~3Y XDH=#syJ>Br||Ekw)La$B&Ǐ>>ߖn$*iȥ*7Pi%։X"D'P#^qb{vT$sszCSx>B#< ֐E!Z*yeG]׈$7M4qbf;WDܸyx~~.Ƙ,sΘ\o6&ɤMc {c/|K{38^L׈aMH.3c)q$}>B:~ARP <wV0[:zr=q#ZpSܵ&Qiz^5tO,;&.cxKJ"RR*^QcdHfs'ˀ@^cҙcʁ6!?qEQFIŤ=9wvvɓ4%r|i0 Qa>e Ŗ-(˒ʝjl_@0Hتz'# ||*HĵFsF:;҉dogVh9ԓ!iHOҎ釕05dRJDD o5>ǟH!JHF<{\JL, :M(A)d;j&F:%J~ Ds;Pq}x/u`}=VW<8D*7GtG@* K=Bt]qpDOc*E!)'5I!@WisY+_qB-3Z+A4bBMݺD+'Eqj(bqqq!X@$E$@<.Xt:Nyr|2VEqCT}GCi̇`OE P{s`Eѡ-x}v8>v$!l6 xͦSczUT~KŻgiA3PQEQsΧ`g{6hhP_HayĘuޞU*""1QnbH' <\eHPkjVZ뀝kAk]62@Rbi1Nk)&i#*GYoCmC'ʕøŨ''?#?sَUUGc25p8QƂ${ FMa(V{~?ҏ~ |ﻫwfYWtjnkE,1I7{]V,j{p1cW# Rp|Ai P:sD"ھ()q tf4f4wU$,A5DG%*_On`Qu/qRC!;"@5 CʗܵeuPWvJxӘsiTDEO>5Je@e6ŀ/=P#{c 2uemiieb+@w$ $?Sd"MJ;;Çt413m?>]ޱfӭ#u\4`7+yhgA(;doq!qs ,W($vm@IP 2wQi";$">HBъ)Ċ&E΢gHkP"i h DM-j DUUE%z !$ML>l61%D.~&A*#Xv@I3#2"(#sd7U2 Uʩr_3)JDR~/Pښjs &Wa*& QyQ3"!yy"g?TבLˎ1#I1-0Ci-OO'KFCHXpIiRCŊ?tiO֟Be˺KFp q2:jGb1LΨ$F#1_ l7E`BƔ{ 0;W%d"TnmOO~rݿxt9匍uuaA+5< wcl&9iJ"hWw:"F*h <fv$"-V eG,oS%֓s<-cQ[f B^Y%% )!#B"&c)r$3Op~Eإ= 1 SYNR$*!G|c~V(RG~lX4yQ4֠,F[GE`f9gىO_1t:(sTj41 ;.=-rMqxɇT+%bq["(ΩV %DZKH+W hR+0GxCp ue"|c~[Vc!"'&ZE73[H)K7,ySJ5urMb^y{Yg]^'۷ Ă DTAT䣕љB/ 䚌IQ6sދP)I8Hv[@(X@jl=PZCRrFk J#D$JL|iBX_m2 5t`%4`:Xkpn4|cDZ'bHdsR䤘 TX,sfTjmq9VJ7qo.:n4}UǮ5ZA< R >wx#u@OÚ  B+, 3rB6tu@a[~dz۝;\02Jm%"RD8cL:=;~{^5?4ML41[g6''W/W~yƄ kŽID|p ݽoWHc=s7ƿg"uOS._Ø;aV+RH>TS:8e(Wx}赜VcrJ+9]\VD U3M%evC1$k!R?RRѯ#+-O/uwJJF=-ҿ%:3u &%Z Hy>i!|yCZӟ/ݾ{/x7 @s\E>wp$܄PS=Fj7i X1 `Fk,pxC!zg+Yk}m4|~:m)I"UI|hqۂbVJMdbTT<bYI(1H4LꪒCDZ].b_ph=㞹eYH4r%h*)Xp(IZL%'\26GD}r1R!vjʉ\Ğ1>z$yvܱfr$tİIQ.3@f&tjii2d@,H VcuU\Ϧ&ȧ-eH1* ͅLu !:%*o aG3lI؋G~p` 5L)?x7s5Jr Y9>s/?',˜aQذ8J=A"H)Z$.#kĚStrb$o%fƑ@åLvBqQWHx$9*lcQrLm{r9[q.֊XtZQU@0pΑ U4t /Gs4EQM#sNb– AGѝ;w戮`~?GPW_}ϣ)Tl RZz# v~,R'''=ص=Mp{Dl,$>>;ui\&9fùx yg  HP ( 6뺮3fcaWKqH` |Sd' q+pH# c:Wxe-Ѯ'x>ǣHGP7$M(e *8::zcI\(rr,&EYiy~vv3ˮV0HtjKD`Cw?~DJ}i^DDHкݖ(?#ؾ']b6!#fr>S=n߹s{/߭MF5}7lSZZ51'}uJT.A;ԡIvvIv>=SqדaHˑ&|W` G~vZrǐ#\W#O5w0o(ֺ{)XFI1^V0dџǮۖ10U۬Y_[X(Nن5D4*Dscc;r lH)E-)昿|Oُ;&yNtژ)_7YTr QBYty i:]cdD0l g޾#ijH)P ^fZfq)fA< T摒=ZVFĨ9)Ff7N,?~(S /#qpd7 ~C,{=c*gX4UXtOEcz[ ¦٢YlӸ S Ez'E7"pl퓨RN$QˈGD` aR!S?8 L6&P"#%L&f㜛ͦ2{M sĬ䤮lVUjTJidIٺgggXyHԎHuhW֩iM+~,Yz&nﺗ7L 6Ov,@8tQ ?_ejmz쭬-`tJׅe0oUIKrA!3gA Eg`v(vA1W엳s#,cdWEgAKA8riDRk[=XֺCQ"N&'Oj2Fk"W4͛7%d2q!'sע'`00q s0>O4)o5,IIb{"$h"RH $X ~gbRgD BL_)҈Dm2"&<2/Gk^CdMӺb`,fXh$z8ɲ쯾z-ab\QRCG^.Rt..; .lBWà)me"jjjc/#!Zޱ;gR:6lH7xNjy\Ja\-gj[lmoۻn8p؜k?c907KG?3?YkYn֤\* 3אb'ƭo]CDl]ED@ *={.qKZ18dd oIDPx ΅8,A!6;zhsc iyXr1s4!AF"Aj+_ip#AB iGY\B2:80aDUYjQ4\otK_oo3D[hCgʚ%gOFTf.(dmҡTÔYqG]#;\o(3seC~u! @!zC5;H0L,RFCf#*؟޽7=@*:Ljb1y>|ܼNBd ¾Ɛa1K!)]?݇,ԉ;-G>ǢY:mqau@ڈI481cwhM*DHY$Y("NJZ,ET9 BF炣=}zq||'%hj< s1+Xo'p!@|}rwSKt(n/ڻB#i3ع$/8;ܽ{ƍcM]ְ,d"ۥmOi=:b_p#d&Kc BDaHu]⍻@I96pm5L5E& ˰|cǏK^i6b9O秊czvIǏ1JAÑcz(ʉ\5t 'ԈDD}kxP1;Bu-6 )y?4KQow=mO"֕Un?"[lZM[%lc酱Pilp8 p׭ Pms+kJ2XHr׊r؞܎y܂:)Hm|č`.Wk֯)f}(1C8 JO[UJ6$D1imGm&앲o}rܔe)i??}^s3r. tJCܯIrzOLTRS V2LhQ*犢XilDs#QO%g9Vѣ!uM"'O&xwWl{rJhcʇ;)EZeYqqbBQC_ħcG=G! R'.~aݖ|=ԍ[HM0R7wHKegt2kmY$˲(b*0~2EWyC0q#a\>fuvzz)r)"ңlX"e:$ ]]'w*wػRBfŅ3A#\ntu囯 u>y w_ݛGyAx||ӧOmܸq/'NUcA)m$w3bf1-Y窦1Rgw>Qi}xGbLZKWD@t!;@,}4@]sUSWMĔ sHA,KEv~AȀ/WMUv@*Rkmk Y7J)D =()$$$v "EP[Ϡ hy/@mqde@$z43*#28$ܛh]"B Db@H^ 1RJB1:Fl9`1qP$>[.+DgBtЈFtP(D ɞSD!pi7,ˍ1/NjvاORH!f~ 71E~I;c^ҽM=.2uB"o\?Dkku>\?|Lv1:S".V5Kc UFZ%pSw(4C4+^'&T8ﯾ=)бįJ1*ĨNu|xF<:F@(91YҧGƷ$Lbpd% IDATOC3#a|<@jL`BFZ Nkd:"',&vzD@)Э`4p'7!J/˱GC[ ~ ]G/`H~7[|L$ѵCڈHmXNiˡf5 ޞdAbpgrs&2#v~8+, ;G8Ӻ\g(LQ&O>M_!"t,m9\l830~"Rk 0)|nkEf,3sz LqB$R!Zn41~W 5l$*%C;vғ1Zg꜂mVM$W *H!`'1Z}p'IZ1lTWwdF zEk-Aek3$ӹ b 4MJ0OMA'pQJJ6|nmfȍiĐ,Kz7 \&yϟnޓ'Oscvl [!nvqll_zvO9R&@woJq̣ik8j4jXqN*׵m(Sm/N?00Ĉ ǿx^˂  9F$DϱqTZc#Vy4J6C( |m|YMS`\V'''eYs:˔Rje*Vk 9Ágm<*ƒj8vsH>$&#b.vL;jd h[ ư5&B > ә`3[)J1K=\u^9c;¾q#=zdNf:;֭[?y*pfumt19X1>d]ǫٛ"\j^],~jh u<(sl<vxF,/ݜ%dxMrGO1i3gYvƮk Ӆߎr oiQ'>QL䬮ˋ7o~oܾss\7UMA"){1$ƣc3{.B}poW$nZ^:+bq[h6l6;woojͦZgCox~-.m/=>2Ry1emw>G^%1v)2 *ו,>d<31]MqDh_{R|do"jeژ&GicAoMӤs, ځo^>7nYӗ^:U"japi^nqL*~l*6M!遝4m3N"bKN 1fG ͮQ3zMńP 9,z瑩# h$9ǂ%0E3(Pi o4O&yzp' ijLs&J>׮݉F13vcgz~?! 1z|cur=Q#ӑeyzz#ÇED|S^K%wP/'W0L&r)Kv;3C.2x|aS+/q͆CԩLp1c8j\|4JR23E(y$k\Vep$W2nM1BbQ1 b ܇)XkeyVUUQL?kv* L@Y1YJ!oH<~7~׾7nXkWUQX1]W0[(r\]VJb5x||ʫ^z{/޾u)3Nύ-u'D)uHk`9zTըp$9v#:XzӳVɋII 롓fBY򘠸Q6fYl6>yiQHruY-ry`A{\p;MՒA1u.ĺԾ5hy'Y(q-SޒbTQ9HUt+o .XMBqaF8$ai2 VkAOXi ઝ}o59a9 [߾i*&`E+5;֛wO|*dX'vJL]Ϛ2#%ftKYz_AtQ3CT!i53[1+ԾCz?=x!eM[`` )5NS פ: ~F 1s6|PcAABvcF_];ds$X0׶^}~qI}30zGe,VƳ o`kbGRZc XoDDJd>[n֓,;5$фGZgp+6y "I$f@t12Ƙ<+O/W#AtLO( OQDSR <> $@)tρ7ًSTdh( QF{5C`{"TeH9ijiv!& vEQİM4Gbh%_UUNL&ιzO>gg[f^ jS `"X`vRC>Ktv:Avɘ>f'j3L35暣2,~ڊ3z)Ba׿|l^,Zzv1vce93uIMSh;~O-EKw)&{gY>a"r6+ cM(zx>-pJv7gﺟv\Nvۣ{Frvnޣ]"Z(2s5ΟYe'''DYWͪ( hxdOv*:AJ0>1RzRiesȥ8ܔ.9.QT|@a|;DTZ0fn3<'cٹ\i|օfMi+>1r=Mme9gS|h$$6 (9-8kR* ,~ 4H .tu 1F$9@DjvXz3K3yM|(6~* /˛-;l/B2BUw 9 1=Eؗ|t A!Ģ}C|1, -[^c'@!ëQt2<H1#v ɾ!.;жv]٢sGD 4',K][5FHbfdO}V|=sj2DZ\ĔBoXOҤCbjEU9c?C6X)6HHP8PeYJ5...fc>Ņsn>_\\BDJeY^(.HBZBlT"R\Οu?C6#G)U럼ҽPDq nUdY(S5moaob ,_uZAcfFfVmDUA l0rl@@P ]/ZO1>Z Zf*$C٧p[F!Qx39wF7&pӣɒ߾ߪޞerbB D\qT'O܁C8E]'z4/rYf'=]\&E/(KK7}b!8?U ѓMi4wee?F+q * Qϩ1$?=v(0>|zg%IH"f6`ؐ%h@" dCDcXDP'*zfnY2 O/ˢ(,Fxf9??;Js0L`ӟ~Z"z?L^.'e^ѕ+uWf+OϧbښBgFo1oNj L&2gfX78Ǿ+"$ '>CoOzTәy>9"MkuZ8|\ N̿E(t5V6yq?mY-8M!EWA F'B_W \)d\דɤ(,K"ʴyE({a RqΝ b]WRJŏyc(89@0lѡ&|/幢G*}/*NJAEn޺%VeY.ӣymMYϫj]7 IܐQ] !}f\%هR}J`c̦\ز,o8%eB(47UMgh^nK.Q! wbpS ѫEk-]fi˥RZy65MZft!]dZi;wc{`*p7`6'-)taZRV#q|x(-3Pb(`RQyZ$ܹCMgY'7De[cr.\Ԧ+A$ΉeD49l߰?iҢ`9*Iߪg}ÏP1M`B˧vresPAyJ)Hn0rQlrԓ4Q}A192|Mr%Ia$C K c@4Dzٮ]t<|޻J\wb眈ȬGy SpH!z`_)z( `ˆl /+ŀ!PZX ^QWFP"!5tO}VUfD'3*nBwݬȈ΋l,"Narwq1m i-!\bպhՄ!Rd:LG Ѓ,R&u\d 'UZMC~f$ ^Ÿ&5w٥k'YA\p` ];^w\!"xh!"Pޥ3D$Ep 2Zx 弶n$h"c 4E1tEէ M(, $$ЁaC Կvfj1FVͪUU@4^zv+L?2fUm['_Ef,:Ƒ8.l2%?Xg`q]2b&6ws+{^%7( L\! R9)$5-"A6(2CڐBLrYJeC+< 6ݻ'''o)4+ldg%:1FX7wr+Ȥ, Pt 0E`y[w|! gG12Ad F{"){6X WnB%j\`\\I>w?X@i"a$H$̯̬&h3U˲Z-FU&¸\.5|>lj ݼy7ޘ^ IDATD4ϭM8Bh0ZI@%DѲ1gEmD66QC-w:h=rZ(/l㔚)|W+۬\;ِJ EDrE!Z$t%Fzk sMQw,~Ya2غ^&}g쭛jLιµ9A̋F `iKQ1*b6e)h:rrrdw#WOc'ĪZ+3!t:===}ܾW\P]?WY'<`}?2",gؗZ4x<>2z. _um4RQ}ʲjz0]:[>4}JWȚDMv(4Ddn}^7*" X3m(J(̌ DH8 28rXX ƈ ɪ ЮbKiP8 "Ah 6 F&F0!18g9hPX&A1T9:"!0u=B@ (^$2D&m͖PXD(J GD3DfHqlTǖVZ6n;!^^"v*+HqE7vR 9%9UGŴb8?|:ד5KSloahMPKcSTr3)F@3rfgggZUc S?ӿUNMZ! kىl蹌1ع@J~Y6իN%1$eԒ@(!v!2|?/"zk,i7ʑ3Au ]HW:t٢yAD1=32|`ĨO]""j7E x.͛UU)peIdt0s95AL&4DY,.3M5ڮe wܘ|O.=>UPC8'D^xR}_[d;-[\*} R_{ ^W>nWYao!˲|_~|~zk6y>@0%+6UzBF ݵ }3:X%wXkwP.[xeѿ"("/ⷿmDBT`ekNJg'hm#ש[7K5Ф|.L z y\‹fxzK D 3F /|i-;ZGAp |A )3H΢AkpDPH@Lt$/4Ak6P@Fȱ/m$\/E3jCk 0#YK1#~ -eE!@@!zK,@$!kA 4 @jc\@4zjnfl饂^UtpRq#-1tJkBogwt m+)#OJ%OeY>Z}r'Mh͂&t3]iew˅Vl4MPэdW#뵛R UM%Nyl@$h4Z3m鎶" PNJ]Oڅ.jv`'r\҄J"̌蘃&#g,4D0O'p 2#0>MG 9YR4zjxjXJ$u@{iQT֧-B!*P|/s 1ElY6@ @%_z~?W-cdu\C&S D ɈhlƑAhPc:E}M% +{;&jc_"#">1E4 XT  EHB& 2""2paHPFQ( i(9 c "EQ0aaōQB' Hqh/9׍M|/׫0ϙƢ5} so[&@~ϓ"m :>>(3 7:Avvl{ڏ6d쌺9yUAfφL3v`W90;=3}w),TUIs_ Dj=w |ra0 < ١s-=jgo-޶ x6WB3Ox< ![k€sH9.p(1j!g+Dzޒ|X(]Y}!a4YO?윓# )HHpi)#dFk0nP˽ DAA h:CT,Z8\A y͓#g"Z1&M\G"Os "!>VBܥt֋mee9L˥:MJiC"_+pW*oHW5>D( aD*^~_Ǟ* #"ٵ[DUѓQ'aO1 phSryjI]3s~^]'PS111˲.tqqcD67QQ٬bqqqkmQ o}r"pt"1<1%3=Ȕ [蠵_\oDViq=h}cO>D9[n9KV!Gb:$U6ӊ~L ]#39ϗfILlDϹ%l&"jheIxmo[=ZO)Y[nqRDFcu7T)dX=,%-?==rB=X3hwW2!ďP;bh}j2QQFk\(dIP"Z!l}^[,U(XH(J#Mb F&gIeGrԛ!D(\cE1m/Q03'j(AbmQ(e%,`6h$@ y:&A be+ʹ0\ Rzb,#C ,8Gl:?hƊ(8Dr|>_la wY{#0>&[Ƹڻ[3doby^d=-w{- TZMݻwxG9X`8DXN0\joΐ;R%4ש0;}(OBs]9m=Z^5ۍ7_jgY.itI_KB'VxDZ%hvӥt|>O绱p Iq, >%M~vXDŽr\˿Fr:A`-V&]C%UCk租Gi#At>ʩ)7G%Q失YJG"X9Τ8]˯4qh') n<+%M]'',p,3n{(Efiquf`>oyٲc6YQ84`ܑ7||r=m\Veȶ%Ӡ\.k5)A\e֫^wvp X\ m3#3Oy3*Jkp2DD 1 V65r9߇lӃљv52ShT/Z{[l]͇bU{sݔ ޯh/ܡ\pU O=o=,Va7naIf{_7Prם>ƨʲԐih'W#㳧F\T@$Y`Xa#B4DXi>oQ- EKq\D'<̂`6FH Ǡ=Z2DA"UxVUm3ZK x=`tH` 1R0t-H#?DUM#,^mRY,KT <!b"VeS>#ܺutg2L(aQ/"ȞckbKohցݿCj{?rR=oz)ұסv|ONtg?={VuքPb 1bY1F`Um&#gAILv8$GespKrN:t t5&YL-m'nIhmW{ vn3+\;=/'XB5n:sxؖUuR\'#ۧjNUlm@OHh4қjس3-ӡʵ@ l =_ u]8WżbhEY$F 3.>>uy^ "9k nȂ(SXb+Ѡ(@ m0sdb=ii̓N " ph2DTQB0G  h'%%bǕ%YptǞ ƖeϪmƅTkrO6N,ED10 콯ō}w#w|z_bBtCN0;O}0T%]DXZkg8+kM9Sԉ#^ uWY}@,K1}뺪F7n7@>HElڹin%HΦCǞE=U|gڟۧ&yb8pL8 k VPX.ZGMDD "Mf,4 _IwT )Kg{>槬Eb! mUUd??Y3  tY; ^cgC*9 ]UBHZ ;KΤ^" p4M$ajjisUTI6 `폂_! Ei84KŢi~:"7MIUcUUe.!ZWZu@h묽`Xdd \P7~2¡4 0?O f6dAwQWnHF crg_y^(R}w @ƈ1:GhwtBᓆ{n4,lh4E|˂#rvCFb* !,/~oA{1T$r:`!B 0v6ɈaHX"A8amzsK gN8( Wݤܻj)>E9VR VDDb04$ݨ֘v%,>Zt+{@ a1٭{.=@.m݊[hE5D ~stZ8G"Xt~ЍrtOhny2ЁO1!Dt@$ 2Xn/ ` #U+hug BBK 04k:qCbb:v\ I?WZqc䝣㇧J@Φj<~pvv6oՏȸesa,q\E)L{F< Z]xosZO'$Ί䙣3=a=dU sZG_H"DF$RYGe),*{r:tksE޷[%!tYߌ ԉtٳV/%itZH $Rvk@1A:$9 /Q6eWEXDZmR13sYm+Ct`/R2|:{.eYjs/x=x j$?uˇv$dfmW_;d-@¹5[f?w&Flnmdd ]zukcu@QHT#;qNlMr#L IDATxjX,hM N.v`:=emC~(cA6{ɀ6~40e"+~?<}hK[)x_M&o(5M];co Y!AZܹ7 ,xO|^9>4?̆#F  .@@P&&Jhla ˸X8 m#@P8DTC 1A.Y,c1f7j ^,.x>v2XkH#Ľ{o\XGT!C$B^xiyN;б N`XEՍg1F J13L&ub+ed6!+zIqJr;hsl&\]>^1@}x}#$sp+qz6jOHaz+aJcҡ㏀)0UUE """^D~J } \9"ef]~ڭVB]U?]TP1dbmڠ8#a4֭WY "֚,Mb!uSt:Uts٘V|yv\wH.F[csw2@6*FDDi´*n\'dX3o֤5j s,˗>|28v`.XA_,HtEgh`WgSAL֐u>Ԇ'&_xszy>䈘evssx)h,Mz{S:Ӱ/Gs:^q' PS*Аi KuE. LBkC4XF %)6Y (t誑M4bj v,4p,8"(,_ş\*OO7Db  RZ+M3Ú:f[VAvV b:'\f@?v$8*KZ/4x_85"J)΄XFkdϞ2sd>kZ-[ān>?)'n¹/a=b>=eֲ,JEa}ih4:::ZW"8 8 |d$]r\Y;BZehm:n >O|(Ե1d%K̹&5>Ē$`j95)-fN: CITv% |[ XYs>.yGʫƐ.i1>zD,BXk?|P66Fq1Δkj?^7Q !3!a܍5M=s0-R1f<'V8ʲP TdYy7Odx啿|Wk4*CmSa1fgyleY2Cx]|n|_[E%; *fF#Y K/=,tV(YGҐ.$0a'tj>^=9iX"sUUWG~!D E ?g;%ycoMĻB䷟3hHu6@'%b,3smOpxnDBHwYM`LY꺩f:^\\|+_nEhs騭sP6/HdKzdGW33Zk,"q m\ k2ޝݨ,f4 WlGa㬀YFsqo7p:?:gϣ]Tz(IfL8ònb༹Ě1,)6 r%{D,*0>ɚ]mkljS\X ^,Hۡ{̾nX/LFbe[[)PFQ@_lŸn?H|E>k3kC\ʲ<99QR\EQMӼ̬i lV5yiZ~FvZLj}S⨋{ˢk κRZ0WWZnN$fΘ#?s?M@IrB>0JcgVkkE/Bp[k&z{ WR4)b4x |>-Bޑ{ӓo5V`!BPxjj<WY|qRmk5ƪ+B]߽eY. $!c4SO= _Wn XeBm#<fvU'z~OYZmq௘,eBrr}*-{iF C.,!Ugٗed2"꛴5\mmWcQlh* y~OvW}qy1EƅQe1с ;(9gϾE 8:k(x`إ-M@ \ 4s$I# 6H<{lH8.zDqc!DE"LQX˚ŕ$ 1KRHd$/|cz)c-EYb:y6ǿ`qqBdEbf}UUDd</} 'v~#sgJ-ĖJf fq 1g @*hf(W0]>;_;$^iZPM0GGoz'1BQt Ekuw^#M֭[Ƙ3F䝧g|饗&V=- #|lnj.1hDD?__{{GGGќ}SlAqʘzef 鍦Y>|p1֌Eg+Ӕ]=cGҹ@K/0gn??ڐn`.:7_.| eQhQw"̣H-]興YPrGD#Hm@~ ko1+1Aߟ1Z9[$.I@Fč:4>[FۏIjmJs]4c6!bYŜX㸫 dlj9#z֦q0ʰ1v~K7lRQ JԐ"WpBys(I(l5 __s]*UD0_i0H{s '&.PXDP5ݟEQtZYs 8Kvc0EȋYFZ[i2AXD@AD 2` H`D3KwcP(1IK7r꯹. ][մm=8;1C x9;=ZQ9k?|P\5Xr|xˀedqYEt3ѸF奔ߩ'd2uFiuM1G)񱈔刈@3Gmhmubzze,2FE*T1o,)4 Cxnq0;"kWu4)”Y^x=?ɗ}5qQYU% [c@&\e& ѹrlZS\!DŢf`[:FŢql|֭[R'+g4IzܦjC3U= xvLgƕ)E{&[z3_ ʠukņ9dyffafB Pf1BR+xQ]כT4}\B.,"WP7a $H ƧP?d~C4 DH}x0' P\'??pvώ)x 12 A‚EH,sϠ)Ek[vmLiDLDBh,2 u (B)Faj$ )'B\|cOiBUUu]Ǔ{FϹ_z `@4^+;rkW͑hDNDt] TzmŢ{":::Z,c6ڮ M&FqfgffM3WJ+ BD:-rwtrߖ@*GWN[޽{UUF7nx @D )]cH3\K 06nN䛓Ý0^^ Y1Ed/" 7⥏xd处U6,y>PV+o$f90㬗1Y%U3źJR"Ɛj֖ewxʄB`Ұ,36Ms޽x |4/ߞ#@MlJb]L4ldޟ#bQzӻuq4 BfDLɏmE\11OMQ. aV:99EqvvfS![CGnl^hx#YKEQ8gn=q#YAm/ K՝o^?IHxITϞ2h:RxVwd(5e68玎44 P6 F ˠ0L;yi'ke)m:VUu~~ hG#99ڵu@@[?@?a *( ^v~,t] Xkb=w{;͟S5㪚gO~%8cX{H/Mɀu`bf,f$ń HASl0tԐ2~FFB i ݆#KtLF"0 p^rQ~g?3%VZ&[ x @5uu5@=M>?{Ģwٴ ^Is<7`^U."Izlnsmt{1?aȭ++W],[> )])Nmu떾(>͛7E_ P_&Ń+7vmcQ**~kHNG쌌}(O%)Yk-sʦFCM%+mH]"]&uJJ9;ߑptRZͼyGS.GOḪ.ck*(HF"u=ϵ} ]aó|;`Jf},q\;eLiHty=1:sEQ0bYw!Jh<c}O2F3Z-"A]qѸ}UMtΔk厜bWf[!֩3`F4e1B4dZ~#/ZkIk0d=Y0svtn/[ԏجfd c ;?;*Ñ5Q@q$%!IZyaPUnm CMoz 0[BJfoYl ^*]͚9nEX& 7jBk{t|M9v1bX ;AU*lKE&_s}Vg^Qc/*͉bNh $l0`T՘\y8mk `XΣ!6 Dj Q)%u9 |\.aDMB'7ӟ}򡨪qIF/-"#TX+OA !b[Fu!D$,(bm'" e+HC,rlF!M8$9摠];`@t:Y;Qy1%n&6uAV*ٯ7euy<_ǹ;gfy& .o\SIzt iBooSX &B`=qz FR鿝oi蓟3<ۿ@\ơ.2++s+ 2$ 9@!o GB $h8iqM?!TBVE3˶7)!biQHW"GQ(SM6NZd-Isva4:oA|66b"MMFMlRR hsz4,xX\ S~s3S~Q0;",+~ʓjOښ֒) UNUS\[13G +Z0OO#0ZQW"1 Z`2LA"vЈ滉BP 1ާl8۽*w5uueAHgKX kLUU߽3O&K0@OD֒& 31wQ5ɂ1'@O?0#6ʻL<=}ԵI,]rQXzέ>ۊc;tf"2ց6|͐ץ? !Df@D2 y(`y.b8d!VS7ĨGU/ifOA{s_Z4qvԊu]`U!лAE )3Nfv<=@:?C,'ֶveBX3ܜʗ?cz:$!$KїYl~parQɒ]7х -,clX*cxO|%wΝ/kn  kokbULPl9F"b4XcL҆?*}(@sfq IDATkj갘UBUKߵ -V Y GGc{VA@GplHj&]⺼5ҡ99 2" _tBnNK_뭷~m}?+V'pkpYdM"E6=" 00Bć9~iscfD~G#¦!BB$!H /6(eUm-eEcH!Y{_ hx" s\͛7(nF+FEE?Gs+[cEoW^IΪwX޽zAeCmߐ6cwhC?#톲~f'xˍ6z 0-Gwne;'?9@qClԺحѪT"(u?\JfCmZgyFD- =V2M jp2XMfAbt;;4Cru1(@QAu H~lE@ŕ ) 9@W9L]:]D6Ԑqq∈} #lZ'x,9ɽ{:y(}ㅆMau0w~)ED`DAP3sC[X#hȄw;aWj>Faݳ1{wY#z 3߹}tafGK,{\b-BB" BH}J`n6SF9Cg& |`K25|v ښ{y^z' % #M-9;sNfU~ tcWQ )F)͈ Jؖg>9#՞p/p8=^b6FHD0^x7ݷfi*Mb2.XÈ*RXs`Q5mF巽j-h&{o  Y]uP hEKeg$1󝝝͍{wͭ_zW^l$| {ڔ$K}hH : cųGNzLA!>|躰.~fS,k-HYD@,G¤Cm؞05^*j11hP*vIF'b[Ѩ~<8kn)H<{ `0M(^" xCh iNM{xj q5${x` V'} TRh/ N,{C`,,˾O\ 53ݟ@ ]6҇]x釯D7l[艭5 I4MW(`}0*ZQU9=H)…EQy!@5:&`R sPd%! R'Srdb/k}BA]0v{``I}r.EWv(6;+9P OhTT" 6MoĮ 6i.f`DEX5dDa/*$ڄ|mNbFRBh4|&iklxD9]AlҠDiV̖ekқDwXq\UO<+8B e`ɼXR.!tfnx'SQWڥRO#Xst (f#]z0uiīUD4!x/ޗ j/Z5RsH8~ 4 !ChLA^ߥ"eĔk]8 p я M|WmҴf{ĻΘ8>1ohJze1FExw/b0Js9uj&!ϠN3w0q뽬XSY%JzI:-L3_n> x[1@DdxG=?#BSZݞ Ofj8Z`juN,, 4c/~}H@Sh`fWz&Qc)ZVw!_6]tQ\H㊴ s.Mr]~h &:z4:SjYۀM: iJ%?],G4sJ~='L떣{?q^{FR<7,Kip(ŤIIQPW?$0 T=!s@(q޾&VNVUesw3)zW1Xse{<|C!aQUUgUձGi@ݶi(DR3omm!½{"m:Gۛ{e<- f8͛Zϼ^i)6CLq\pWb5}x^r0sJPޜl!Y͠I۰QpZ8/I&7adPu큌" ӉG[YHQ -/%'XS:2C# YwUZ1NLߣo&8JU1a̾ra~ 9LCj%`wwK_ݻ],0nw/zct+©Sugh| ރտ\= GMmju 죏m#wn<ѢѫibrWv&dK_*wdZ"̾SF" 8WVUE&ԧ_ܙVرpP'S 3M^i ]~W+LbC:Ue܎> &-D\.۳Fg^܄YrIHV"Ժ#@ob"&8e2!Z- ֶIy"@s4>ڗ©G΄R̳$VoUmZy`:^':l6;<< ah*vHs 4 UhCZ\i'P$MGK%H`WS7{xss,l=S&$""]T= dh 4I)_=2WUGٚ*c=M[n!|cb-*gqԝcSa3ٓ)ǝdtϬ{\pwwwooou?~꜂'BgH+8f֤j{]%8;\b .RcA"tΗD:e_777?zecf$)Ҙ6[s:BcU*1xv{\}rh(M,SzX~HYeY2׾^DJ,?2{ F\H(*>(zrЅ@M^ eZt_Df gLCnPeiCU3M\6sncccgg'MS41sQ.qss~+֢tTE/xda_z{"'u k_J$˲N`&0yV9: 2~2F|cyhuD?S͈I5+AFjAPGÊa62٧>r@@㡴V DPz"!E6h@An<s_D"4 "0v _1H{01F?ME!@ Dzų뙍{l"Z?coG4 'g8BU9l#bH,_6;uf~S{`oq%yCP?:F4ī];8<DRn*"~1#HN iWugMt{OjtӰ.+h)~[.iK^idwz0>Ni<'vیҶT#2>M&$ !&sBjnMz(48W̪̌5u&TI`tWEdZC-ܛSC*oʕ 5 UGLpx`dQm:TGhcHCHB2u԰1> x %!JxiHNĶ)K@i(D E@X&鉺@ I CGLc6Nٞ %_EUykD 15􅺪Χ6J- y㽽" =Y*#"&i͢Prs Xh{ذD"u&Dhij =URz?CzJ'я?|4'iE{"cmEE, DK&MR+E^#aD yhaf\e(M.:^pOX &)2Ile?x| %?[y$YB3IȔ PI:ph"t h |.QޡĊw}j *$4SejF,VdjDo&6'/h KS.d RZNBfijp;;# lڒY7rҖ?aNa 5$MS:1֭՚SO]ǟE[EaY}A5 $6~Zprk]iv ;6/|/͹7B.ا?gi$E,S˝K0xm+zՓTڶPb ޡ[D4oyeYy Q)RW]yﭵl6G>D\^@3GW/#'e/UUCeY$Ib*'"]C(Є8U E1pwC_2BV;^<Qc\_4*gSǔPC= gE&<'úS#lSֿfQQx+$9h~I4"t;j 1#&ՠIfJ =9:: BQqd.MX,Tw^eԞ3^\ H{*bItw^ͪz拏^ 93p]{jRH=+ljR(O˄%r8j1[}6,ڭ(˥sNZ.65&$,&ΥK :)3 `Lclߟ}6[S{5 ʱۜ_]ї'{).7_Tw$d24^YmâzZnCTHUU>^`,"|aLpN(EDҟb O;DۇmS Vz)-=>Mҭ{_La՜ TO?}|@D_=$셖 !0 ;BVw|&EMhdD{V,#(?88͟~I#b$UU)"^| rB Q9Z?W6afM7fdJQFZ ƺ>,QF?w r*q:bu^2>{=2F?35>d}2?2vƞ p-dr{w4M,cKSE 4>3bY;;;UUEq -fxJu `D`3kldޗe)tW_G_-rɲw.7"0#ռB-#4j~2S؇E"JI4̙A)l"?#mIc4+ieYEUU\.9aIv対Qyxwn 6OS>U ޏ5oeȂ_ ?دWnHX"{mÿ޵r|ͷ\a=PWh/:{6~tpš:,tQnE0PO: zDԖ8m7$I{Yj+"O!K|26ҳ!R'':Xw.ِPf@`v PX XXUW>?+=0S5ڂjEY`mG 9H/\PUlP|%lXk}7KΐF Y| ¬Y~D=Dz,^eYV ~@PMUyWU/O)װQs]Pzvwwܹm=00d2n[% gv Kr0"h"]k߸M jXk>#ҥ+D˴4Cjj{,I}?&:诈4vEe""BY@Dfb/.׮G{Pnsk^,$I 6T,2DOS8)f(> qpHEA8@L@R=*ȋ:Z6L7"c3 Ffccҥ˕/n,!y=jt>]Lt,+;.45'~ʈI_H҅}hc5w=K}"2G4# /ܯ|VR-$:uS DFwU"JޱNdtGSU]mZ?;|y_%X<p6eD6W'K\Ymom?_(@PUUf\ɦs,GFR8 {薩yUd },p>~clϟϲkc&tO!'v9->OloYX5_p$wo\|,ͭ4xQT㢦--0`7`cH8 !0hBuv&,$v-T[KqH [Na:NGYEQZ-{w0.b//!@{,PWunp lu{<̟XA<H_a|1hL#aw\oCq]9k-ֵ-wX9G{8cpuvÿBM1M:Qʎ|kj$˯<#O?$cg͗¢ȉlBc @ "f4a挚AaD{׫ 6L~8ilH ˲f3*$Qۖ7ho 5*EGmQ sΘ6|xS(|Al >4LtpS8vg@CMĒn~?ZF_\Č0&ҥCχ?nL G? ¤LjpXI+Xdj"(@GKf$ʑѨ:4jP,E!W^җ~T91P2_̳ʕ;|絷x:B]wFC=uD(J7V~14/\ʽbA,PiybbHfMH'6$viGq*Ac*]Pbs,lƏk=q\9 kұjr S˥bc5qk+WL1>#M x@xmS6z=%~ARsB}$߉LF&XL j<_\zɧ3$H$FYhl~[C*gb#Gbtj/a_MW$}"vȰŽĬ1yW?gۿ)`RںrA3/t3׎Jw]Gz I+Tبե rΤyt4^q5WyՀt=6(`t ʹ2On -fsDTh=ᗖ~v v+@!89랔8>v=5sm /Ebc#=̜p>֭kxZ3~>'!"'+W$L/Q Wb(ًy` ;Mp"̇kՑܚlLf M͗XNn[”B?@TC0ˏ=(DB4$!7nz8W!ND4Cy$I>6B¨Gf=r6(mP!9$IӔrj6\:HeiE,Y`T~T܆ m8#c=OTݛ'sr4!-rwwW1cVU7C=h8=7F싿b {{{tΩǰ CT KS&@G@CcQ߹M7V>g4\Uib_|k衇mm$d 9WEn6J/|F2hf/[ 7h-;U!u L=46GuYC xRBG$H,/qH4.,,wlOZ#mav}0;UfŃ(dD9uoH}u4{Qf x{&Nu "$*Y|- PRj;Q*"ڶZFN<N sK60: !!*1V]@`y @KFEx=!&%$>jRd,r]W?<9D(MӃ,-ťiQϪ @4H@D>Gc %N /=7Iਐl#1*}j-!:J'$B>΋,I(r&d]qh9!"0:H-fFg]O0cX{ [kޣ !!P}O=ȵ;iz/ƘĤyfdI45|?|WxלC)kJ1(#anU-stSX,Ћ&6>ҁ!MyQoCms/ecfl` R܅6Tb=poSvЛ<`7M:4"*r6=amQ#!Sԃ,H&o l/̤&Ԥ+ %\=B"n+ `h7||ܹV/4};Ͻ[>Gv ILRV DD0RUeYi1 ]y 9Vw3Pd)BaF[:U[2$I[oy!@)!T`nS?qD߼l?$7vI 1[ @1qf4|G&l ܣZč#D=]^Y"g{2d#B{^{ nr+sc<a B"PZ1x%ek<'XSHG@z84DS OV~Ȣ,g -)j3aLOc 5<1vE7[;YMgNES-M4> z`[JFD 5D8 8\1ϳ,^˥Ziy健nܸqʕ|$Cz}ف[.r)vDQ8~Ev:3:3"}4q3t*MiZu4'*766vwwG!##0o&^{h+"/*$\bq>۹⫪8Z|iݻww7_g9fھr+WfƼ*bf\{iV\1ىcHEcZ2=h-]H֦eYsvv1o IDATԎ%Db=0gɏ{l6;8*fLKfo-b{{,Ef3Ԧ"3zXe@zH+21iQNݗ+~ح@D ?Rfi{g*MoͱO"t5RaY4*ltaKd pUl,E޺ꛟg>\|H$I,> xCbt#>?5 ( V*cY~p?:kLϪ*9EUzjpsUaDs$lbwHSwqxx2i]@:3ԯedP кRCMzX1""uؖpp>Mimswpptf#,IZ&h-kuqihtjk}˃Su5KLşNOHnNA[FLn0{Y_rYsW6ᚈh6yau]EBJx04Kʯ0j\[?u6,?=T3Ƥve7/~]񕫊*Dx( onLwvv_ȍ~+l”,+ 6h4ȹ|7( ^~͵qEBt,Lhܧ_+ 6/,jaIFuu@$2B3/"MSfcR#2{II^;s@/Y-zHc'y%(i^H0=.=2hp7%y/Ο?󼘥oW>䓏-g6s1{Ykt{,"bhCka#mkpLov54i}Zÿŏ ;kmm;re/~pd]t=;Kɮvyh,\~=W^yyY?5j:Nrjե =c(-̷#=U6]b$l(a{RW_}7&,RO8`xjf y_g+:֚cͶ7~M:f)}TB!6Ý^:2ڀ j̱%bf@ɲ4;8tЙS݉M)4%SmYvHRѬH*PO"4lTs2s\U9h20sU:Im =,E|N9oQ;`$IR)K4T%BDJd!(d1$1X:ݺO;՜ip

fBjQc hǝ+bkDH9J=5 \ieݷL-ugN,<$" eν6dFwJdjYWEN&yQXe >^fZA̬KڸpngooOHDp^X-\1Tϡ&f}9w$4E)/K/>g?O{}hUUYW#Xdh3'@q ;Pt# THfT64ݿwdi~~aL"w= 5|s"at])Lo޼`}y?kԘB㡞7W i͝/2S=x7;7A?B|_=2'>ݷ-N;ӿ(;S^+f^ P8XJ۱R{_:iWf7VU{~?Hww:RӾp@ZF?L%M :1Ъp]wX #q# WVѨaP\γ/Fc.qDA9e"FUV!_?2E2kXGuXD)~]<9MF1vv67$ AwWoz:2/iLUUi|s* lM<ʅ)Ғ5 GYϟWGC#|g"2bP+ !rE'G?tE ؞*& bUyuJ& *<3P>d*"rsp,+XdƕzUE4E+o XN8e^|Ž۷o֝ŹE""NmfMsA7<,?ysKr/{sfpn MPft+%Ē$N @ (0Oy5Uz  ږD &e!g̹wwWUU]} gٻwwuuuժuO QM{ˇb=/iБ NBq^Nͳ1V6;_E4ѽ FG!A^#@P|&At5 ?jq|$Ը"m[eZnzqY-bV+ bHdЊs.Ѕ!k  }Ҕ9 1=z뮀k08 x||-&@f0hF&iourR1E]tx e{ŬiR1 xQ(&0Gu3^y_PaJ(G}@s4x,Kko~۟knk-#3D{tx; ̨{TlľnaN)ܸp2@ϟEQL*%z)jߐ02.oF4XY<<;ML(jGAdWNj/TS<8(ʲ(K@4J= ,""2 -HC@߁y5 oL.}tC}].;Zz}4k.ó 4Fɘm;g|`X-3@Q@alم&%k0s^x, )2S偩:ng}>̲6 U2(m޻{|uZެՏTı*(@ft ;+"dzo6f ͺMjM6m01 I[KTs;!}֝mEfB{F 5][F8'+h6C8ZCuNR| pS _Lr&y'44G\.ięWA *~;%5E)+F"jZؾRa Kz$rWOz9qjIgbgЉ#:܌XXR'ZmDdY"׾7KC~CzpY )h*NDAay*Q1Eav~BiAXCuz5R  " [i;?7~{\/2kf)JEıQC4^/"#2 y*MA}}!-gI9bw9N|UI1T(Q(>{?P8J0LZ:?yvw{}`ϗJžI0D.9v+S.Si*yvT-mۢ\gшvh W"lB1 8&opb3 Bqb{r0vFh^LLhU|˞h`f0=TŢi^FYD@d)y|e[6tfKNsRqptl٭?Tߐ?o_ONmg[lшPv'_,28ugQ0$vʖKKǿ?_O $Q2Tq1%bqm׶z wQYZ&@c̢΁WFeyxtݺk@:w(?O"S;@=$LB##?1~5I)SJ e&>)\ED$>::g?uݟΐeKpʹr&"0G%ytWbYkv]WE۶EQ{w_DĘ3syCvI7("R޵4CNJ[. Au]k5m(*0b2Ik=յBr~I0"#m/q`PÅDA KԌV4” ;+괡)1oq#-N#_4={˥yb/7a=3%Ѥ3F9qD@qD%3۷їPhe#j>8K|L/G=-6,KSb5XY=eLٲjV `^J`d6uUФ Ӷ) Щ%~cL&aPֻcc͑Cb%š0u(f0=\Pnc s;'k:' 5McQ[]i?S~2O{o!t]녈@CaĠ֢u43c|F򾉃KFGPԘBNC` ȋSoO$]g֌Yb9/He @FD$D(,H3`=sύ4[_e]Mgؿ_1we`B 2Iڰ㪪-&[>c uy,^|cc]+Ph<( O쮑[ڥi>{f@ QisZe}qq!"rِٯA"UmyȍpyafSO__%IY~=mdfR‰x+te 8FĦi B/!kFh-kSTu?/EJإD:DǍ7"L*Ӈޓ, "cT ueY\\riifE!woXUUӷn= /zf\;kM -")<D6 ̠Du+$w߹;޹ڎ[@ b倻cM1sƤ>P"|c@4I@0eZROt朙c ZSB̲G} نZ ZF e A _pE*`aDJjOF.TDZ1P?%;29/SĞ/=0/VЈkįq^)g߅̑f^Ƚ_"*ABEmE$lJ|dÉTlv-:rt;J6frpcؤb,U;?OW)eYSX itU,|e;CEQP!$MQ,8cdV\]2SʜϹ9o@xJTvRٜ=::hT2tXOF6j[Eq fU}$X޻XٜUEkiAX, +[-sf#MSl`s~Z=?8?=~[?|pѢS{#\lW,[(}şO3y#8yj8\,o.s5`*[pK98곐__>Q˲5hm'֖ͦE ra*qr#`+ ܜ-4yYi\Z3GFn $Hǥ9MWì4̭rٶٙF~u2`uwaԡc֣$ʪH.MxM4=KKCp_6M>WMVfoLrpdNg@PkUEI",ݹ}4hJb-m=ﰮ_#a|م ﻑ`\[M7sdEal)ݥbGOOVX ҬW˷ͯsVO<~ՏF OѶ{w~ݷ߾7@uo;~tqt\ˏ}ӟλb]U-:gvV^LXqS@vV ` @l"⋃h6-J"@U|& A UQWU6Ƭk z9C%"6DT5g]H$Ag"n6l6kl M! wm=[ӟt9<̍^~/~by^xDDy_v}@\ŃR_vϾI/[<=ӷ:\׍`]Y&0VҋM.-6-(IxL:-?:: \r '*~ol (ҁ^oYJ2|ㄞ;w- ek:z4͢7mk-;5kȰO)%93ek@'mtC4H\4{䈢zɡt-|"~WᐱF*SI=lLԳc 7ZR$A"vکSB.}ϑ(AF0Cw3ʘrfMEϷֲgF$ʚ<2a);PUU݋O~#^~rXhTu`{(Ͻ˿_gG_ʗ؜p7νϟlQVT<99Ym6|ppz& ;qQQldQ1΀;H$,Vڶ-=g(kz +mRl!Zg6\lu]VUU`[4Rj-[~4dcG`VsF l;?'eXɏ>|xpp899*`{>]t3yS\b"C.겊p%qCb899am7 "g yk"  zJH6w' ? I%$F],<<<@0,EOa~/f~w2u]^ }K7Rcч"m7EO7i[h^!κ3H&  q-"'<i"ac˵ V'N~zrЖ?!4c86$!-3(\O3(x)t9_t`u[d 5b b(nT0yU.UQ6M#EbY!}Bgh"צ:C*Nd? p1EY{ Cݬ*v/T=1c$?zdKԧMэPT;sUɷ׫@pp(t!o$ {G2.RB0q Cwq&/RID}}nLs UE,}0Cp%Zb,Y {s$ [ħ@9QZ9bPk+ʥ5]5=~򘁉j '#GEQ8g-c 4AAb-rD}` `0Ƀ_~Ѣ^"]zZ(rhۖ6EIg酏~[_gwC|śϝ蜠 c^Rz_KS2E[PM, [Vlݭg~W?GeY6S?4?z5ٲ,;k_Au_۬;99ݽi(tmri;VJGȄ^f{iV˨Wjm2GFcȋC!x<Q*޽PE" /nI;`fD)ݚ{"j.^9P"@mϛ?93{,IeIBb,R" gŁӲ*' M4bj2e` 3k8xIAMPk,[Xm6`NE{@ I1H Y72^x 1Fe 7-~UofI'l}[0 w4N%td|E۶4X9aTO80"D@(p/SI,x"a];we}/WE]UU,Ν;2N)߱>xF\̌c9882g#\Hяx *4*9LjC4xz"*ecT \>8UAa"B"D- s(_]@CԀĐ08D,ʥf˵g m8p_KNW.]{co/U0/gOrɝe5M]xi'G_uݻ͟_Ddi֋&,Q I8B7΃I(t?qI`CGj`ھ{1lRK%QJ/"uLCιWc_ TH;+>sqC4a'rQ5t1 РBxT\!( Z뜵*9Eقn0@>m\4WڣT(RΏ(i dWMMwnX*I747lo޼i]bqrt4muçj?o_ZT/XDp`#Wx꩗^~im5mz=5RURXk -UUz QgP7[ ]H4>Uۯ}&=$ϊL̙}ӧz}ttt~~UU^\вDDih[ 9vO]!dUw_ѥq\jb窫뺮ul CDg(B+e42c{7RƸ幢B~ݺu7 jOZ78'}T񨅸`1e̱є+,;9E$},BDFUBND Ea^ ݠj, HgPS㲎X`:6!)6vF$0bU:Fn$aRKƥ¥-O}ЉF\wY"w5rʖ[""6;ʊ$jW b Ӿ1eeE]s–[Uҋ6w-|9cǧxy3^FDrßx[KU)v%fCE_<8:A@74Qjw}O ** Bh_~AӍ^yWppLDSrs3qϼ/Sk~V$ C#5)U1xlE{u烜 pN IDAT@kAXpNb$,LYmޫ\g%u? sX$"`d%NdX֋0:_)@Hȋ>fDG֖vm-pέk<88(ѝo̪/w˷'!6jf.ԗHcLTX1,]׭VƺZ ~VĩJ"5"k!D7 b%Yǎt޽7nhȲ,/.ggg[[ s\P-ESڒY,͙Iv5=/g6l1{ d%9(L4dGaO*_!Z{tt^__җCi9u3su[sx2* n3ఢo!ozaVgC9"~ZJ(л9TpF9(pA|[bt>ROC kj-IA^‘^Z&/Tڻn\v w{PUk|OKϟIndv,K{BGֽocBz'IzK2N]fपA8i` O)Z._g"8-;'w!%M% u]t멿,8==xJEٴͧ#wN )E4.YLN@"vR,ښ^zy~t֞XRY/k]UUDtq.+3}16$UբZxu!",L%faOX,:ۨ ^kvEQh0%jҴy]-#׳k{ laW,T:~ $GU:O$qC _zQ?D\cF>}K_R*j"eYVU'W|l[!ꎎ{5B scޡAf!崖$X-,98 fNs|pKe=J+DW ڙFy'cZوs:W(̱oϜsJm7`!]{]ApQ,W \~>]ʵKk^\j />u 8q1%v?V%"Y#e15IB(2Ԉ]&~{v;pKc;XD$$ڜp1Wu!WXuH4D`3sJJMntf6{~Y&h ̌ev,J :*'9r biUf&!G^dR|Lnچ, O8gUD躮,JIKs/?o0\tޗ"9u)E3 Qg02z9f%LvoǃQ"#Ya{sK`+VdƹZzC,TWNj^:ۃd+ H\Vij H:s]ZY3[2/wZ.eYV+SPc@lEo_?u㐠*Y8ۆl YP ĺB39:V;, FJ,/o?ۿU[N3OMm q(XVDaTkfd$xJLK& $K :’2Ƨ2ND(DSWC:>neڃz)`2'!@$Mm(">5Ĉ $ߩj˼ȄxG}vQĻz 3)PO%=/ ׍1>O$n;hNU?{%_i헛7%N p]N, ("Zf4 aFC #"@;0rl?jDdtiM.6\`a)( }" 2܋"&/~$>>^{0<}Pmc'R_\U5(r\j j 1E4d^v, P4Fec caX|֭BF&Y@:>v\;)ڛ6sE4%#P6̳ZJ]EaK8.c @d @۶Z3iy>#h`|I:r4MUeA" Q_S 4#]M'S,K,ˏ|emJٷD1ipɖak,9N˄Q =$FxX:Q4(Fr)@Cd)x>KtH~F)NKFj9yU}u6( ri%C?`Fڽ7R>ƒޱk-LB;^U]wrܯ;ksHaczփͦsQK  $Cԓ$V#1ہK)P;pF}dQW7߂̯9' "K:+"::8DĦi?G{qqap0la,tJD$ n[N1LT0cŁVΊs8#NZwΪɺ B¿һh)܍e|K"ƖE$/e6888 4oVQu]k "\?i8 ;73\1vttN;6>apG->{t eqPJ>/J&1 hd /ұaV[K]D@,.!‘dVGbC4b?Z$ Z)XcdS `Y5}|92D✈TUn E;-7KBVj:y&n?EH1*۩=7AsI"vO|Ν>a}/5.將ƐI 6wp"N(ln\^sM.(65 6e~4ap|ɨla;P0zx|'-`~]ӵ4",`7e4F-=1{9zl: p쒪%wE.o$S#6Ɣeu]\"?WsNtf2|a@ɒ l,LxYtNQ֌>4jjdDȹ/Q.K4 v;s>xseKRaYQ@L - y vSn$׀vY_i!AWD,Z۶S1f։#H^4Rl&c8gW,=3TbU$C{մQrYdrd"Rsdf!0j`$EÜ 1j@8:,̷wD'M۪W Qԧ.jupIa83FHǥaJ9 U_CѾ:SLk;*Әѧ$񰹌q";uU4&@|,z&Wb]TlUADDmoSNeQh]F9g=;}-u 8Z2}gɳ4:s_0E2OkmEB`â뺁3B'E"/)@HĆ Ys⌺C"Bdx\c(20%_)݉‡85E\@E܍#|m! `pLrvl!N])0:3[c?HAء5ZG}Căᣌ *59P7fu~4P5yZ,)uJ8?r.dcdS9nc笾0Mgfɪ2_)i_,2Nu~+wAS%M2?4o`|WS~]'jk_)/#Pڱ'ߺV$,V5UުPPSC.| 2m!In[4UFZEIǗRZvXa"㲵O{l6ΦM5m6N#n^3A[}U HG,4_JBB2IX$}/i+n{_DBzf\*E-::59>Dk]$0Ci)fTj g1 |O4JNm۶}3)$S:ݿum;lbYo&q.ןh^=l\D$qI3]Dt܃ 3c^(osj[r$ukm̰[ё2WUW^Ҙwi7t<u@ ad OUi`3ӖO$v8ٜPߏi(_v8$IT*P8KtQLś98"BȖD|OD&-dX{nmڈ;[>W;ԉ( 4Hr~>Wm,K6D HѸ9Gm˅\ϻ_MzэaoA:rPUrxu'>  މ "ݰ<$L^!* \OTȀt7QWOxf&B< ,`;Q,qO0ad B9Guu!cH SR2PP'c1+͓^@p Bnaz^u-\L8C&tf^`Y,Z¶[ XAZ{|||vvV" 0BT'׭c7-2sYDai4 SGDň3KOƾ%@3>(w@souu*"l6%n y5O$-=dKIRXvJ2 F2d}6zČ6Z6V9D4꺲a*!- +uBdDa롳2mc̄h:e7)= $Df{zvv~qt,]ӵ*w&('ֶf!,X!1 2c(TT]q:LKDJDЧaBz(AOX%: "ƇݦH.>\"c9, 8(hMox K)i޽ ?3eCR/4CUq1#a𥜇-lmH<NT2YjCw2 џ;wi 5WU2?ϑ:CН⦗+^TI&?υzψYV}5~[`dw;I(l6kmQn~=ׂ+BqU41a8^I49񐋎׋jb @ȊETɀC+[PIx[M4s XHPS/>u:arP`<sSLDd!IjH}_#0\%T4V -/ KSV(%],Kky*ult B@+DGEb+ӥ IDAT0|A ~O'0C@JKڡF 4qݾ} J`;øm-zy{sbn $ܰ&}(0|h˪4ӈHP#T{^GlDRMeD8L$q}"""f"Z,UUIF=S Q,CАGB-=5.[D$‚bQc{"gQܶW1! զ č'%c2ǬI -{4'Ƴn~3G8Wh;+=)4dP%v޽m_jZSoQi>l}27|PR%Iz{̫j_T+_pG㍶.:ĽS_l,ݗvMʷDꞸ`ld/A֛Ãc`lh9MsמusZ-#cTA$$-"UCXM|Z&]w^v.@Hx&Qh̖BOi-ƈMv=;nDH v]ˣ]oڕ㋋UvZ ({fo:gggfe2_ZCSт "#шnhC|1+=WT;OJO4Ea]' Xv?|6l_Y}*԰s$ۚȱE`,]*^#H$ 12KfM!dbv8L"ƐEb?'i8IJ|&qf)/hNHS07g%Gti*#eӜ_դ-DW͑8$^DqI9 |r:i?!ë}VDjh`U@t m\[%ʆXf\5-ڣS,GzzjQUeAuAAP "?{k˒EDfU>ǹb)&)Ҵ@%HMiLO@CM<=2<6l@)RۂoI):gVUeFhYYj}.]*+3++32x@|Er9{##%C>۞V*(m}L=n#"ZkUޚfʸҦ<Tnv&nWЈ~:7JY{MSv.\Uj,O>iϽiםjvg8;oxvq4"`w\v1ܬ@Y*>P&t1030O%c|Bi,Qcs Q:ZDDmef{I - szM,ô'Jumn9ϧөndFi2Vk h@f 5slTpen L"Cu/@7@4*v, >Lt7#"&#@DMB" {p@d`|EG9UW4 %DL*|pEOp31[1d#/r>qi%UTr]!R.%]&W(X9"^QzXbljQ](l>SI&ȶYcw&)[y7 bVG;ӧttw&EVЫY%@F zα$0/V#ݚv# |u]gL]۪{cLοo͞lcߠ'm>yTg$6H ݕL}x}K4_E=)0=$.mlH$dha\iWdWG\t%=TI"K%s[Ó۾E<??཭Ѻ6,x :uc絒k>8(($GUZgIF(T,mX(vtP+.5P\+{5͎HF S:Hyga'm`H@V`f=$d4.|tIaN.K8Y boe_~5"e$fh۶m>ogb-eYO300AD=O/[h0ҥh&]g(MNlIU֐0$;(939*a3֗wzDakȮEq(|mB|͡@CՋa<~'XNuEz/DŽ努$ _){YAD86#Wcܼ.R븰~MQ40 "FQdBfֽW1f3>V )b?)9.e+U5EQ0jH'OʕHOIeRyФ `s4UGHWǿ~Vh9/\J$#!Q5 FD0f h]6 IGșģgLLE@ Clڸl4 +W_GOYT¥fa#\ KHnYh䄪""Qss|Q =E(K~N=g3֓YP'dYD2:9J"ZnJ.<(BUy> ~q2 Lls..6~ɹk-g]YQ]XNu%y?5VZ!>~7ßr/zZ|4N%sTtneyIdanȈm?>w~>fI+&PcaL _hp ]9GOcsm~_ɮ?0Y{8DeEU*l"RC~Kۜe6c9/3_z<4aHj95Ȉ {gʗbQa̶un"d;&dy'c}D(Pcp4Z,_Bo4+BD=y:J')-av %DoP3\#3i !c6CgA3 ή4˰9CUSzwoct6?h+[Υ] t{sraxڶt]3\JrfA1 E'H 'P׻IVCҔf>ҡf"/" }H9!Oʯ(\3d)$~T201ʭbO |n@YNWj^:g%XBo('ZQVk+gd{wo#7nﭱOޞ~9t^[ Dv!Drߘh>*&6 GZ7t= zz \);C.؊؉^@#0*<̡- #a"#ytal@w@w8j҂`PK~nO$ҺիƤyHܶDdZײcjq.fd'Dߥ|` 2E˕vB"% 6t\.\A`U8卐z'd"E:)r>Z;bj;瘅 ĉx0Awdpp#@ոpsh"00Wͮ=ԸC? k([ @1r5MLUUs\׵Q"$Q,(3JGY N4v,T;9Cs1♙1 lKոuWPLM)fVO̶FM&j 2'& yoooy۶ӧid b?ũ1Ł3Hq_ Gx 2< b jѐEP5Lƨd.~᭧Tb,=3nٳt,ֵvl5Ri)rd_<"Se7h0.ݕ#\,q!B4M8:,2`8,Jiǩy&x@@4^ĀΣxu/+s~j4V,2u)ts.mjkKD1Y3O ?}GlcZxD@D~ӧO|E.,6]MfTB@D!bJiXYAO[L7X 竦Wmќ-%Y7_jd+iUUͼ#}"-/FDݪCbo4kKr(GrK2 (y<ɕo 2'O]wnpx|s#0'O|ǿ7/_R!"f"b-y˳(d/"!5Y OiMW}[+\ᔯKAU_4HƘnv;f]QDX, ׈lrq.W+}HI!@ڵ^?S\)^Tc20[o\׻=vڶ-'cJxa5)~A'iܢFF)ũJ (7W(lA_5x4GqJWUնٟ@uj!%cӄ-׵r`uTO&6!^ЭsIRx<П^,T׋C[sn'sJ"DԼ91TUh\&#G??;~ݮzyѳgOڶ5FMG`E`&EEPi` >3Jl;$ 2 Mn.]sً%&%=, ̕񌄓muѤ! gX$2ᙁf9kD4%'!BYЮ+9#NCf>H4wp'ߕ4[5 @N@ ȸ^?Fn\>)2*Ө5G)ȤKAt: PhUS]uϟ?VNͮN.*=_O.=CFqk7Fu (b+0uV3cW5f1 0E۴1;CqJJA?V栻Lztbb" aC3PcsQ .-e*W+A^#|3umBNB*< աM3DUa5KH^:|񟯚6b`tccFBi^5XE8(8:WLXҢ/S*;:Pj7P]Zl&H}dUUGkIۿ;ѳ7pы~xss#1&j 12 Bq ,Q %2LDJa3 IDAT8}M`]#Lbz$4k|-%JHp{sck֢Քɂ""2|ujg?l .pGY*F2kK+a / ڬ) S~QU p14r,ר+04.%ͮm)/J+b#b } [yǤ,k>s#K8J VQ-^ 2 @u9dHcVz]c1&LDԞSGF*DXSW!h@]GFC6 }Tf+Y7*r_$ it%LozYb/eoӦN~_4Msz䍺ޝϭ 6BG0xp֛* kˤa!@W=\^>q0MM2{^9##1-H#'!rMӜ=Ǫv]ak>T߷fy0lY)J*tph,LȭZQ(%.S'K#n_[ޥž:?9*`%=AÓ[:DCdoٿ~K?vxKku]{/M^EKdk/>dL*7rq6zZ[pk%Jk~sC!A4מA+RIֽQXiJE=NϒOO,1F*M8Dm[;83. ~ Gc$zdFב4ڗ/u`WaO-<(-8^x49NO>~?7oYkڶ}7O?4sG#"E%Nb !X f\iIo6Y4s=a)%5dbLqEetHhԣA ɸo:=Nk|)!Ua =Hfu]"{2I2'D"ɋm6ѬIteG̥0<Չ u}8__:۶\rJHK%*nC"X+_<`lN. }šsI-/DmibG3?F/<5ـ rr+'^t]vOɊ pXkZZkټ1$2k5AW^\յj.(A*[kYxcvkJFv3Et8ʎ}KP '6PooܶΚ9⭵|@*!ȑMn^(ES%BwT$H8$`;9\,/\Mb}[._N3'U-6o>WU X̻ mPJtyq|R>Ϡoo1$_xӃ!Y<rjp\0e [5jh <ݮ "M2PYΒeVocLthB,{Fa!h1•1ZpjȎgG0$D Vd;gk}{oCI## 97=dbg?BD5d nkV?fO'ũKNsַ''u]iOɾ>d Kϰ߶ttƶ 53}ڊk/nq)hAa HqpC 9 1cMDz]Dzw4޽8o :WYcنI{ πkt] at@uF7TAh8zfu=S]۝՛M3huEOdrGIρHp !Kn{b 3E@ ȗ>Dշ1U@PsUuO7w/B[ M)+ IW~?5/"񹐚VpYtU bMdd8+_`v2wXp5Լ ^3iJ՟ҶL2 {-Q_.V&/yMBȲ(&L^m\fjB=(3?/Bȹiȷ)Ylؚp{q>"QJ8I)}qY%e9Jpc H &}>xN AHH

ũߛ'(e_R:US91 3Ĩ!N6搥Ġ@ 0N\TTxq;}@3)%#^ALAR~9Ҟ&Rzfj ,E8![fWUFT֘&&*k*{8^|uL 4(#ԱD%n2_OVU譒 ^.}#Ǵ9pPDA#"ם':Y@2`5OFX.(ۍFZk}ڪ\cG,Ɯ]M5ϨQl5^!6JlRwY]>eOL\&7+ ,4)8.*d\+Xï)1 N Y-o j-$ZU{=~߻dB[K1LN| 0VH#[aCN糉A701tUdQ!̜M9Ti( >c]3F0[kN@4RyԘORۥ\>#Ό1]וX'*_y2LMaDOҊPsFoa̐xsIsmh [ 1v4Ӥ⌆E D̾ "YZlbl'njf=HMBfQ#Qp`̜$ *@DAW(_&$Skd*5ylG 4m.0mr<7Q_;($*r3LwOPea'L~x6gP Z`^gkj5w;yWo~oV߁*;|뭽ݹ}i4UUU2O! "[DT" JIMD3Dp?F{%dt = '˷7b0$ Т([TS+Ά~y@T$IPU\'k۞CU9'',LZDW,e+"*_ORZb4*3^2)11EfmKO D,=KLŤ)hȃimE\3Q{>Yk=Q]59V6- w"p7{?(7&Lzi)]6Q.Q^V,BƠx0,3nH r#c_Sd< >+tA&/HzDbř9 _Y2/6aa&0"*o=S 57Ud$ gθc?:|P umA~Hgpk:x5{3ZCX$9a# R^AEH M @leE|j[n*%'3y)+Ԃ8S ą,s^q_Xɂcʗ58ZV??tު)ϪJ})x)t0F:q"d{D4lŘ#PyƳ0/SlQ5-})uՔ1)#Aek% )Ѹ3L>{`/[!"Xp-Z2?CfL]:%'cDyk*)&cg`0w`<Γхk(+D@_'o|]H{k-0~{^|ASӻ_zNj :!"KDlO cГ 'nSnpk0L P.k --7n q*uY拻b08Hڣ(NW @T5N# \)k jk 7$E~Y_돸9z HB6Q&;0d1D x`U kSGz )}\B҃ ·QV,7Y1[~s_߼Ѫ2"ܶon: ni> }@QWOfDDch(!9J=NZp~̬_ N2~W R0)}p${?XgT).m7 jU?Bnjt '|uz*daw, xvC-jg E"`4/߈XRο}{|wo3׻Tgj 2Ήh2ea.obz6*0dH=Sqݽ}S9&%,HǑ)ByZA`dp䊜__q\Ci^Ӂiz$ށ\ LD̘Wiy GXbԖ 9%EqaND{/(Zi-sBM1,<ӬXma$F?Yq4 ;ˌ$PHU]v;$_zToGOO?xv] ~9d%%"Ԑб-vc&9U׹*'?N?'"$-s85J䏒̝,8%dG(˜;8O 2C&mMLL] "B8p(㽇Kux@}/3u /%b)ta`LDzȇ/^ᇝsO<{k;Fh3 d 菈(7M=x~l!\' ^8fgkiy[gKݣB ?S% SiS%xCFϗg(827MsىH۶#Mykw|6ed^M_+T b7)Ei]/*P Xp`1R 3XfdR¦)=> ]W 3!2&j0[/ъ08 J/*9oGıG [ $* =ֻ?NS"}Ԇ _52Ia1d="" idjf@VS;9!i C4~tB,i|*z%yx=Cф,&xI?m?E˔G0 lKSJ꼭,{ [ou77ONSU-cJudI)F|Ik-H ޥq$Se!EFCX$"Y"j=BٰJNzDR^4LY H ckbL7x99@iE<6b=cHN=[8"@(uOn$}qB^q- @}/T>H\&e&"Nd)xDX)^'}09'MiN1R ޳ȏ{d|fPTwCb$|f0D ZKր槈n}^rIE+-Ii.l̘9s҄??1mQ3+D~|Q.U7  9tD9FZ7^[4 D`nPȚWYm7uVhlcOAvUzi%.ԥ`W*ɪْXnG2%0n $݊'z 3Zpa#}4LGr!Q,4a^zut#!1y2ry1Vc{wNu]7Mc;ܚ}Sk{E1w MDTX+|'QHZ^bV~D]D ( l؍\\ϟeaJê]$Smk̷1&cn'"Ƙ?BuC1r䌣Nf_I!ݩd'f{ÕEb5ڰ@L},V {?%D3DvM{ LCdE v6*QK݂]ڄ/_z@D}Ud!`yqag*4 IDAT5i#w, 'P01^z#1 pxq 4qTO觔QV/%fGyDDx0D$ZXbMf "=a86-5J.8"J'3]ն2"Ãhti"f{z Tw{Րv-T.< `x0$AnW-+d+.΍oQ?ۇJRܢ3 1&JF=Qּ$2s,_"#<~+4\cg r5!M.U6G*"ӟ{`p7?P]nTUUv{ͧΙB %jv?ū1fY#$`\}.,[. EҪlt`*f07OJZɢ IrXN KMҎ"dN HDn0Lj%g |p?VsG6PȓIo7&V`=DMhns}uB")cl>xSN)&]:\A@*nGdڶeԣ1MtDCB5яZD|Գ :#ֆ XS6,9kK*XvEds=j>+凗q@9o_^{@$}=;X/ׅ%6SpQ)s]s| 6mngKLK㫣67e=ۡD 9d -m3"EJH%˝f1zPUt]om4jȌ` `>-,^u`f\bIQB`sISq=ip?e\{aFmk=GI72EM t;gf^M%RUv‘ҟ~,`q?BYp@8!/F?A$'K$\N{ oJ)ԃ%Q(kZRDVRLW0]Zv)$]TJK -@I'nbH}K?dr-ßClV,eqKV5L7\ռ<0)+V]頴Wԑk$j۾}e%2  5>UU1*`αgW׻Y""t]g9oyxUZ$3 'RP o_/*65yp9n6r !Aq f"@[]3cLuA+ IB9lDiusy]|bcmkG8V`)`%DvS P!8i&]GbE,#$إUH" ‹y24G<\G,5PW; tҶ]ڃxYB}ߟ*KijjEcF`su\E7` ,9PNsgp bJ0e32óɑ!HVYŪ2}ƐOT}f'T_V(v6$ 9v|HC4G0Gld Lje<Ȣ/`[r g yt0]'T+/֨y0YEI1gȥ׻^Ds 3YfW11—>  Azl H$(Lk43ftq_qNDw+Z`=v!Qދ Whb }}efP&7lQ LIV /Ǡ)Yp^4͡!W[Sh`@Ǹ Th @:MeFICQRD55}C>旟{{#2d4 '뙇D; ƌ2V"{AD6h2Oe8?yp2?%f> HY]>&s XKJr=t\\%9 A5 d]x%(lr?^Ҥ_ۂş/o<[Zj!sz.`iy:` ycK"uF P4Q"Dqenel{E*[~,X;&9Nox(#^?w纮twE03Wy.֐9!0}- %adXF}¡pB&}Ň%f'^k*—s_$*( mx[޷$~"[ݱW;|N bҲu~P4 z8f+=y:O%NKhŇ̮έDWWRbm[kif3(e ZљEg3zx}wg `a0B;J "FP*>Tq_ȣQde})%~_i/)Nǡ Y|)e( /Rx\OJYP >\Jo"רx )X(Q @JD9.)ܨ×SњEw'жi1HF/U_Kf#*5[Yi~wM] F}W{@SWϧN7,Pњl0>x/\K8ord;K҂ZdVP2~(Q Hz|JQ2zQM ڢIAwɋVÑ hqSq1Hrck106HyLA|.*q "Sh# RfXŀ)S\^ o~E/5,jD]Sa&,.}=>-u;4Td 7!X$&5ANռA"70z|94$ b'G&1 е䉽=Ԇ_OO[UuuƘbв ^:)ˀ)L%Dԭp[lx\ R3 {9};quq|$a9R~IK@p@Ѐՙg4@ j2zxH?>*6 ;4x?(ԴMJ(K'W6oVP*M?=Np:^cji{.zgN_0i$nOş?'gv {]6mG2ϸ(rA8_1ras +  .[y7:G%W=?G Q_awZF(Ȅl@("kX@M']Di*>31aVT}2=ztw>tqαT ̨(|L`p~|RKKD\j)FA)za|~:<+1A1&L40gjf>4#fECH}"R;Dr΁PrFB[-"^psﺮR(d'7v>S[f!t0"B t&<9v ~'UUv9w>EQt¹J1ôL]~ݝ/ܹ]uf;t_|Vd1#}McVw_5/|3kIDhj:<TZ >^8 ldL5uI!(ơ bl>;cstcB/kt+3 .!2U3Yydd+O5?{AXUv7u`{&7 "2 {GCXG@TvG7sJmMZ4HE @y6(+e @JnZ'ņ?.EDaQ@εVibSٸ STW|qODj$@ b(6 2h4G>#s`Z*a|'bZoxJ*~*Z!$ *@佝sef9׼ /Y$3gZ5BSPyf KX~-߾ޥSdte~2df; m'^h<P0F(0@>,K 3EQT 1¦EvS xF 4a'C@g<:AIaDQDZ2SyAhsֆ  G@FA 4 (Ƹt!>J W q{݃pvSjӆ+C_E{aldz՝` A.t6ܧq_2g{D1ʸ̞l5."Q R }XcP"z&~ԜJ++dc˳\E3(8Oc%{,cXWR b (ky.Ѐ˯L\ʅ@O__r׾~Ost(:qŸz/Ray^B,\+F Pz̰NֳI[{7პ_$V(`8frr2M^w}{^ r\QxەATkT.D,2V>5lzfKl:C0D4FDn4 @ k[>rV|׵^%8y̠'!\6<:rB~6ÚltG 84? ODy{SB)$@Z 4M#Us:=9DatVwLDj?!DI3|(+s_q!WYĺ,Z%  !Den t$֢^?KQ@J)~,Qn=O 7 %QN!) SI$$KYXN_"! B҇qJ5 A\jjb'l<DwڢH~aՃn#%}eуΑ.C3 {<5G.#X0e}.O ^R)1~Ѥ!@ HI cðb+ y{KNhnIC KTQ\HTd^5&"FQtNF$f\`kCJb92B?IDGWkV#CTJɁ8(vo7A"6@Bi#_f4;wKzY !jxt3e,E)эe,cy&jP2v{k$LJZ8g A;_)C$Ib\={+l1Af?h4֮]vZv!刮\S-fg7/KZqs>y䗏Ν;+JD!q3{8˹7u='K6G٭>ue/ 7Y6"#h 8GW^4:WR8V0$EX?d8,àz =daKϣ{+=aD}"jƳ>ξ_F< {faDRij_ ^V1TVgggy[ib,cX0"A`i۵Z-26xbl !8/>H)?_[[ DX&C~|-}ѷ {%KDN6rXh̐  Az!ƘՇ6QAhMiN˗ML8UnX܀c@fs ͼ!$.y +OD`D/AMΎ{ d@V_``EC#)= {)OSSv"A IPGkҏnvSRz$mLDx0LRAVy" CEs <5"rDy~B 5 ʯя%}ں_)h@!,t-M-hyp9, @D j.db<+f|ڐÐy׮]eбMD(OȉW$KԐ+RA3!3 ([,V3`fm;<8kn򀜛}aDd?Sϧ/~ݮT*/K8˲lnnVi@q-yKV}\=:~ V+{CB ήp e`Q$ئҬ +G0xqC>e,r቗':kQ'^OdX9~#s,W ٘yLy穸g7nU}֋ĒMd={y;w3Rc2HVܕ\s(n% sܽ[k|7m4kxw0 k 0B:;&ŹрPaH\Qs@DlH ERF11Q_}ʩ% ޛѐyf7Ra h{(|r @Sq !t ˖-Q*EО絓TaP\ 2ƀ0);>8 "vz\rΙȯ?pbJG|C'NGcQdc k\Ea"Âq |$s-<CB)'y%hO6P #)e@kw_n\n74M-xYO#tbOYEf-E8lQ8qb¾:q=ό"XZcjP05":<]yˇӋ!C$LDkׄі5OʄAI (.m"D-&8MN6^,"J7CdhSON.o uqQa*a؍#EOP`<Bx П\Xjҩc[מߵ Vi2TJ堃WXL)ua፜ݾ/]y@5@Jsw R6&ǃ`XK\ mv$v'#\WD҄ao<> _n{Wλ(pR^LkHѷfuhV5@`jټ9k\o5">#n4eA0DN]a%~H $>{:龄r+G?ږ22I@DizfA,`o* CNY`rrrݛ6mַuwZN8N;9VC 7B)>)Q)15(ֺ^3]&''Dj~vȓ$afɁ'Bj:lOM 30[^< Ɛ Ԍ{}M®dBB~ 7h8˗.'s^{|2ez.x\]?яZ%\~yGXުRJ&U` \c@JL, ^g -7^=,"j],Rr0/uҷźYeܥ됸]t#˲Vev{k7,lSQVs,8­:F5ԅxzQС383'ɝAxr'BAqܘMMMX1ddteƠ'=R20ΕTT&.]z衫+JRAGъ%Uu&Bӧ* gp"arƃl+ԝ^^?u "J9B`.lOF<3'_<4CAA 0NTA. +dYVU=P"ںukfxp[JVO" oCnt'dېq 0 k՞g!}-h`pZξƲ,S]`?6E J)Ʉ}a`$f;6n7<==w7*ߪƘgDt!4 + zHRշ/4t=|~'8Wre=ǰή4d8imX2ֺh6M7//wm|}{߷38sϕg7q^C,Oe6=ϳtUC=sN]M,˲,۽{#?tn0rϲoްaݻO>dc=s[nժUo(QLLL̜qD|jjJE97\V 5e,"ewȺ-PS *Y6*`s8"ԧ>O~### nڸq%ƀp3 h݇GVw-[NzQ$<DƨGaȮX:26ˍ\Dq<[m [s} #[a,?ܫ;v~1䞇xN/!9{:f3eۃ'r V58qVn;i5yrCDQGQ2 * !ԲeˌQͦB.Y՚jiqLDA IAJI#2`\ -dq,& ^t6 Sq1 @ILuF 8=c~أ(C_싸7ݷz q{Z}Y@SAB1BHkt9˺cP ~^ 6[p/N=C1qQ t_e"[Q.hp@_s?HsCT~7~;Ů;wdU c/ /V8DajwUF !RFk-1p8ya.sJ笁q As?Je?$R{ c=r=MX;y{OGyd^wwawV;F7v}YgoZ_wu_s9{m #QCqP:"g,cXdޖ >b袋V"&I"`GӦI)oƍ<0'v\x>^2x=99y\ո^=`}],۹sg^ךhUw4 Ð8rS]{0߱W&=K.Ū=@IkmsX,X0j1lA+zfJ=`c41ZsS?&2 q3qyQ䇑_DJWZRW+Al!Q ?c׭i["ʎYs>O}_?#5{b?)[rw]|Gy$c\#x%x2O*7Q-]t~~ނ6ĆG8C gr7l^j dP^J"v*bG]w7Zf s-nb)>33s}[ÿ{}Sj%z뭵zCwN 87|𪫯oۿ L;'<q{ jj4@C\Tֹ1ƓQB `J(,"/ 3zqj %Dk,c˳_lxq _~$(.@k zZرA1|_r*"i!OR]v]wFDygo'}p3F1F?M[>WJ$;~vd6U*u=8mI(wEIJ_qĒDfag.P)Ev1J|K/?7c[oujj'>S {{SSS??ظqv}nZDLD*;tROOl\gId-B‡>W]u<׾ܷsD|ӛ׽[n_C=TO=Կ˿قGiX2 +[?VV7%I !x:]DwBxQǷvҷ7pùM6hl/1)8v^?8GTM'aRx@K0te#0RիWoݺλˉZ^x۟7`S/ݣo1a5ܽŽB~eRz .fD:i͚5B Bړl(H`$a)2hD휈,KLQv{n/ PHIFy2jgY6-eժ C2c&p+BҨr>.75ɥO&(!]r`wM{OBD ~ꩧַq||w߽jժfyw}կ~/_LMM]]tyq5}2y [o}9~*ϐvqQn13ߝl/D0&8eOѹw;wݼ̻yƀ6=-oygOSO=ugɟ]lf*lZ+-[C]|__z=ҥK`ʘEݸ{ڨb,爵8\[SHGwȶ{dfI۵j>gWa՞m[IJ4r2m<, A>Fw=X?Jb iō,XBq>ۀ@G7M|]?_o"el1055aÆ~!dckoצi*,\2R hlI4juwT<0*C9zz}zti+%jT%EQe Gر^j5u +a$dl=h5FnpNIUTB,GAZ##;p.KE{(un#Wc_BSCY_HH v\gR!m۶ꠕdaə#<%K, Ci/ ό!|1Wx駟)vtM=GqWdYo~sÆ _lٲO 'y٭[YfqFRdh8鉉 c3~]{,?֚g\"b8F}:묳N 0l5D ?3>ow=PEIDQt?9>>;;/]y~v>4Mp Iwy{MN>@27JXDD^w ꫯ޹s_bh " }&T&V#>RhCTPxXvmG*DB͛z?ndᚔp;őg~򓟜6l}u}֭cgqF?1 ުYEQh\}]tу[ѪU+0Oɡ7eo{ A/~Ų : +|O؜kc놈TZZ&e/>~(ɳ,Â5&MMQ-t8u*,˃ Vk|/4MDQPFyjK6L,_^ðR(%}WJ!\sm e@+a cLaoR @g~eG!lJ 9(L$KLC[0be=DP#XК|_do)eVc}1KT[tJGq֭[C{ >d-mDĢ֎ʤG ịP: ;2>1(XV[i !V8pݾyMMMMOO9yÚ>,fʕIMo{#n\CwtZii$NBQشiӍ7xmY㎫T*lQ*/G~rGsJ0͹Fcn_p?Oc+|߱cR 0MSߏQygQJUW-VC I/߲eKј:`Ś5ksիW?cw)ފ+&&&&&&֫WTj+Vضm0c=6??h4WܲcXFpЬϱ6lغuwc4^tu*ks=ozӛ:{}ݛ:ꨣ>X0(X~0c=1Y\T{:d!Э3!L[{n ՚بac[\nTNq 1sNXNJUjim Sx ^ ";yJdlrZS! H)Pf PA\a&z011Q#)ֹ3!W6ƴ[DYQBijHAsLAtXZU_;&Džqc}=ݻ(8!1ݗ;2JDV̨:XC낣k. '-=dŐ!D,XE<1e'nܽ! Ã>jsss]oQy)%/AJ[QMMMil67>c\ %Bq⚐:'ҧJ'aX^òs,'JknBvz@Dp2KD(㉂ fA`~A|O?[n?I'uQQI$z20+4YMV^$A(}f[Ż@<|߆%r>&Jnݺo])u_մesٞ_D-MsDT*< F&' <_qeR NVv[ !1!\s~ApRvYSveZeNX-˖-kSc_|MM-RJ+' 5|t k[˖-kwszs9cW'Q_xO>|啗^7|_}_ۉeCXfN48~ջkA>+9i*Jv4%1YWir~nWEK.ML"0$ 0Z瞏z=m 4I)V,OvoG츢qthis=b7; J)WukęXn`=, [!U$|Hk+:+'bp h0JIM͗K ? "k#sCcA(Qs_;eS5==]Vn({=7333i;k֬ٽ{>PܰT YFSE}δge;~e"؁b] A[x3$s wKq 7lذC IDAT9zɒ%vz7Q5qs(MBݻw3[pSSS}>蠃N=C9d۶mo{?nm~~֮]n[֯_m۶$I?J!9ۨϴ x^&y'"V:Apwܝwޙe]wݵf͚J^-lRn󟳦n:/fOGZVE!(<9|?LY2#aVU1y n Cl6(J{) .m|O/{9䐙J ,E= [ksN)9sW~8餓o~Z/v?iZce,%TPaeU,ܐE֤T*<EBh#>r&?w/}KoV*W괳>!}R֐}Uz{d$z+W#V7M`u4Mc=vwƆ N11==]՞q % K: ,K$j1@hm(alNv;z()eUr %Y)S*㯗\Cqǝz3<3, Xz$-%+HD!_ꭷ~W??RJn1X2Ws<UZ]r%O<c@St9zaV޵kr Rv;=ꨣ7oO}sϽC%@ڇF"`ӦM?{Krg}.sf\y% Ea&e1'z@_yHDl DFbY R!0"b,cjHι//Ukau_u=3Q8wuuuuuf7M~,χ!"jPgcEӍ\Wywv`$n|삈RgJJ(-\/mDÃ~4F "jVXYD0vF p)#5># QPCC511P{*[LP'iq@$uB.Mm]̒9ԕKi7*f,gyϼG?3@(+/R#!dy$)bt(d@#bXU "8gAQSYG%o2ou " I<$}s)FBD&'}BfK3` :2 (@h ѥ_!Ī۲'3x/XJHx@]+o`۬ @""LF_zap.8YκKU͢/\QPN|w'Mq0\;セf`"ߨy%&;LQW~FbZBK\.C̆#YDE''"ri^uj2jN\oж_WmSڬT5lsT/𢤕o,M0XsWktm"pyeݻ++'''oҗ:mR\~]G8&$EV%*;Ta=BD(/\UUz{>)0lj[[_CB%OǯwW_}wql-bb6Gh-}NA\Y֫>~|3u]Wlo| _ //y>!x<PI!}qFLR䫟i?TUٗF YVÂyrvv\SDϣCZit: "R?{o#7?23kP~?*(D<::? ?կ//^g瞻pu|G?1&xw2Fd_uѣ'׾ɟ W8 f$߾('Qw˜E4V &QXk Բm\=깎ek#k.$8]p^iD$Ir]+vtt d޶ws36 " JXhʫ EQ(64&T 6swwu'mJggggP=˼@çz* ^!;3^N* v?'/|uijW_}U~~VCJkcp:遲^o2iD4RFߵө&0BĽlԲ,5 "RCgѡCEU*tv2YDd8^8Hk\__$>;;V /~YF4MKKsMk+GGD9}?jptD1 t"j"B$I@RKn}<^(YZ'Ma}ZFKsŵRkOYn(F$$ht!<ːp O4԰"̍hAZ "5! Q@i =n/rKXݹ4SfifV"dI0wf4 EDA턍E(zFD(rҚ6l\ZJ>ipiJk!X X_UU6q "'Z"xHnrdX7d.YZ]Tעz~WK _4y8Q+Uv~ ٬PV4"̕&"gOХ`MҜ#FH}n/Uc`Gh@"ơ:F2seUUMGMH杒7cƔe"cL'e".zG jW6FxUdBHXsC1Vۥ@&I@Ƙ/_Wݻj?99Ƿo}s׮]6hՎ]NcCziֲ,S{QBx<\>A"i9JsF=p? :tp6ƞ??_"3>lrpp0*Qp*ۤ^؇%w`/})AWu$|WEºo_aņZcj?mx ,~Dl`ij"LQmh4UK~ l6*ѺcWjB;۸0[4Mө _PXkhy&5lE%t/ӓZ8+x!LFvDҶ AytP"C̵(yK@]:STƪܖ'jPQvC/::;;}t _Bih1A-Ub:t^EFDDV~;&K8mj6G/|ܕ2 jFtFm hzk_~'~"[S]ډ$|uHDyƅSUc NY3%$!"lx|֣B6.\:4K|# h\65IZ\_y? "kdUYKn3` "r%'ֶ@(I\ 4wxѰ_x%C|QW, k0i}gF`$ܔg V'0Jc ΈtyM"C,BKp܀"Dԅ|Y!8ZϒKӍk1lmzyȆ1>vj3.I<{A=1``DD1B!Ko-!she@R~"aXw?(*<ϝ"M·@m ikkYk'.Jg0< "FUc{˹K3eivJ|pc;J] -XQ}%[WyrOZw6ڐ9uUo`f~ 4{B4uI1f<5; 6)2TPJd8 9A%Z B+n>[Z*tXq v@)dOְywrN]kF\t ךcZj=kL&:U~DDԫEʔ BK҅lH[%OVk:taHdM;ze솆IDp~vrW#!e70Jgס z^o!!Z?4Dߚx Q+d7b 6^W?U6P<w>,lSi^clކϋ'=oe$IE_x?x2짧͐2MXȠhp0!c5D$= b^.cqC)h )JƋW \>I83ua(Ea TEj]R/4OhuAbu,fK1juu~HRc1ILYNʲ񐤶ZH@R"+Y7ƠEJ'qy@.?nSC8˒tjNT%ܫo~}uW{B=I$;bOd{54b7񿸐Rc.`4B1*W?4 ࢲ mk0#sN>写Y믤`Q:9ӔwXRG :lUdooO#6iXsU 6Mdwj+Wuڝedr^?:UՙfEE笪""Rٙ1Q{y5=-m2H}ZBZ wiOP,~_}jǎ;tOB 9!"HMm /:i5tV\ e=;am RPCm6@u/s[O a<'LT#j(5ORΆuϺs]Xe &ɫu^{hO,녩uUyϼ3_~~Ļ3_hfYƊM ˒^/ z^袑oxB0Zb;ang,YaqBsl7swX郈Nd/އnkupP#A ed³.`_n#"BH+Mlx+]mI xz?w DYYN,z|g陞8{!DLtLK nYժnPo^ʪ*K]~I/Ml׵EBĤ\=*r +-kqUFԕ0Pkp2p8>O^7uZ4K3VpGDcXUh4 sy;.ϳ;yR5t%h&JlTB 11.K^ b^w~~>brB ({t("*QeNlj(~SN%h}@b7ɆtxRr6BQݰ j0c45#pJPf#[݄ ::Q^SǓaJIa㕼[QX-o,n#츬?DŽ %A{@؞h4?駟9;BW] \Y$p;jq;tСڱ.PKvxܼٮcHɎyoM3I +vC݆ f@cxYfҎDX R'4M,sKKW,I??Ll]yffA`ZgT/.*v D^s&qA49GB;Cd ኧs%I(lT4֧In!*3dؓu-lFy!"0XH$ RZ6h>W&ނERjH1r_U[A@t5{áW|jlj?艈F#U =ٓyf!N4M:>?ɳ,R x$J IDAToeITU P`0`5I^xw)j,?h\Vp=Fu:С B ww4{N:W1L/ȲLpŧU{fiȉA C(",U(]~%FSU &}T)$4q tY?/䏗snSDsޣoIF(!BçĖrxji** !e8;`$͎ $$DNPp\ G̅h~m򿂐2Q( jxFv"hQQMkYMD @x9AaahRƹf3B] |эTmaM&v}B {YKuٖ17rï=<88`,pxt).`SjuYZYGNOO=VUץ1.V΍_-1dAGavATJ;tСÅz9χV{sur >.%4]_ D`1W.&}& R̸ae<H/t-VՀ_x%0"(u&y\ѡC (*\QJ:\94])$hi.0uxwbyma*)ʑSI&"~Z <Jlpf PYkN+_]v-Orب0Ǐҳ}ΫrYϝRdf$$&q^$!eT6e &Xө=* 5YpD0%e5AA{`c;i40B4!bP SC`s_AE ^,FR D`, , ,^6 @A{a̋bCďpgR`Mm0dDiqcwc6am wiڇ6J62'-yDb<<f}pW7=ɠ!ED3lkk-GmlŢKQMK}Y5"^VWސ%oUS޹sy?1∾#e{z;@cI14{GDP bwm]e5cСCOx֒‰761@A12ҐծB"0$LI3ԡu1&˲dr֭Y [~?! {Lmf-Eل.,.rB Qhy)joC"(w9ךqnG` ?ɯ `wY>U]@%jCK f2m075J$)R,<<@Ƃ5^&J.6j$4фH""⼆Kef,{m.*y9szAX@DM<%~WbtsV۴;/;s6ƌ,Z+`= D$k` Ѫ& >K1O39C{""\LyF@"Eu{?i嬭7:F Rc yCg#"Zƍ۝h1:` |%O:tСCOx &6 콵h;I{Ob$ @ЋԽ ^n~Q0Z{fgKZq!#vD9xDXcvqH)"8`>N5#f\| ;tСC:Wހ\U $)r5MAXE]{kݻw-[GG7TFl6+$IЇ>ty?zxvvrmtGo?{o[2y92áw^OONƏ'̲}x2#co8xt|Eqz~{Ij(d$Mj6@XDc,G %so;  H „ {"H%@sh8V"Ԅ m*lbB6 &UA!aF $ͤtM8Ribb2so46QTXm@ 9!bUmM[;+YHv<=uXCЧo*ɼAa-ui8N.d#[nm 'V"B=nIwpB4 kG؍([Aֵ4Aj9^vСC:tx/ 6#4͋u]zɵ=kpsOzl6_|w7',;<[7#ph ri(K\UU*foݸuvv륽 ֿ|ͳo|['U׏t'詻w' M{oz{$I,=}gpED^???`$'Λn Dԅc"I{\1yUa&I@`t-5w}Da鶮k:, }g,",(҆UvHT^EX ũbS=7{_>M]tg4~6"2 IdYVd2 Mk_SΊXڿxd Df*T[[bܓm90`BPO%eZUp 7At@䖠:tСCoВ$f)%voؿu 7_Oܾ~~{/=sf+Zߺu_h((;)1*IQ"B1@v]$xߍGw~4MlZVEy;o޸yp/Go[''zSw9~tz޼uxp wFޗe=v^D|Xq\r(v,k3}DibAMzX9u50"bIBWK %qcǬb D0TB@HH 㑈'а`eAu ! FXQSXkz0F5K<YטA< ++|l7;BY B7-_QQKXBZrGbGrc0e^&,1G^XnS D$Y Ze:סC:tСCQTRC}ٻwzxtzppptxPS>==9;}K/M`_TIgg{Z;O`PTUU qu$U~ P3gYRUaއ>;I=,*=ãiiz<Cht5xvsguQj+3ItVVf&L$dQA}0в8 `D@` D68<88*@tzASvUSknHCgf5U9dXÛ6.(:frURqᛠuU2b6 1FYc-cTT 4QjsdVs(bkXlo|bgjCݜz\)picX_;8KDZ"upbg(L:tСC+@/?x͗x3z,bFyt ?DO<;?<<-=zo޹믿/=xdWUbzF]bjbV%y$/`$}CwA1+g7 xؿY*6sι<7$锨e6)Oꨬ&|e}XH e9=} IkmPYPe9-."6f"'Qزn`pB }4ۗWzi(BAf'IB"H DʌYcM y4w X!ى<* H,@ccJ0x Bf',^MrT芈MFfD"D mL$l.Vp-/W"ϼgl`7(8o-˒G6!㶴V\+=TӼ}.Ɋum?xOMb]_F=[|Lhx#"ULF(7RMDD@PFĸj0dAF2((d!`+AD! NXSD$ Q{q$$Hzuuhe=v[G"JQLETJCCP=$A@f"‚,ju%N.*W.ԁU+ѩ. OBQBDι4Mj}ԕc*cUlwشsMm)su}x6c<6C$F+ʸ\|5"c)h/6C ;Wl6SSB65T@hQ9WU``1h5СC:W=w矻yz]? \d  Y]&M103R"A cLb!H0i*PB+v _ p; f!DHDXF:"Y`Y}IDc-\1Lh@q&h w@dt!j, A@"  {kb qFpઘ]ئ`-Y9UUE+.E5,Dkxgh靌L\X>KYrv! hATD\Y)6{ïWM)Q):%zu]'I2 3O&l TמhDNbݯǂL.D Q6k ~}aU/,f$I4vA1ֶC:t^ =r:9 -Y_O}t:e筅 ѣcpWU2lit \5%`A41b Rmr[kٱCMk u=)qbʫAWUtV " @V%:I~NRZ07fZ/2ضQ Z@ 0^#Tn "{`Fb;We]\ dYEPً&FFA-l|VW^bͺN cܼ#@hȀص{]m~T}D]dm|"Pk!lk%R]Zya$WUu1 rV[}!׵Ɏ%\X'ql9q jTUVM\bιd kmqиN#GA(. ErDseY:]b;KRј#:tСCo7Q]L?xzl2z82q]km9ӺMƵ+kk %,M,)gL$y^R h˲ϳ&dYchD"h)ZkfYC5xʲ,{A%M*Q0j IgbMǬ G.2lQM) ,BHK {DFH(HY*a@`vHF%!@15#"a&?ED10s?0h#( ȢW#:Im/v*M4 &.*ѳ٤DXl DvQ4lUv[y>Xt(M?i ι^7g,6ȸ@jUBUŖuK%C[ʿl6(,rNFpS,̥SIDS(Ѡ^(aYG IT al'&J" ? B[Q$U}:tСCݧvnߺV瞽dZ"U-uYgY^Gug4ҳ1\Y8W GM^,!PjG蜫]I겚>h.`^ZU)Xk45 30sjRk:ʢF0| Ư</@X)VHO BElBio4&Yk{pd%uwuYX zG4] 66%34'KX "{n`i)&AB͕2&HjޞdDa,A`;!0ƢEDDCDmP `]TxIiL[On ȦXyOFUU)7L67kyUҦKw\}rxWbs牪#cF; ,i9 I8Fcpe7$|JH=n!9:#)Hum(СC:\%{;{$G[7Q<9fYeYoz6-,;u]z6̈́(5d2YgW׾ yn 䔦!"9w<)r|v>Ok{UI!JDD\-uUy<)eKW.IW"=X'.MΛբeu%KFA852Hۼ{ye؃g!liFJaq(7+K̆ AH4 zIsDD iCdQJLs"lɤ!K@;Ƞv@yjGM$xi/;Gߜv- U"fQI{OD{{{۱VDgDB4E'.Xrр'53\XZ&h;v/R'B"",lbjjԮ Ѐ20O\YW {5Pn5T͈]X@QfIȣiFǼ5СC:Wpo#sx}pP0Ȳ;s23326qp3ke0O =TLf2%Rkx!$IQу8a2kz.SLR @M9D=I2f.JdJqZV:% ;M&&3 aJ{⻔ \#.'\Bl- R(z1D$R;FƳ`  0#GceW33C'<h< 5EbũC@όB z3  "z"!Q8aP"MM! .'\Z.Ū^5@ !" AЃ!( )ma\SD QRz|XcgJ@bl͒ ϼ jܢQZ1D`/Dd9<<|!uq嚯*MmpΧiZuCFh13Dg,lK QKlhϵ.'vS,3rN@x>D]-Z&  P+r $̦E1EcPdAFk6zw&~k9vwGqƏx<`lC{lXČG‰ EDRH!!PC3ch cV<4q_n眪ZcUթ߽n|~έڵk׮]u~mێI\U]MӔRvu)ED&o󘞞Hڕzo }.~F߬?_f4ppq-I2 cs-V6k2M*PøY'-s`D%+L†[ MꀺɄ,ҴQ[8tv|B]LJ!aRdUeΪ4$ ~P國QfEİ6_7~z+z*f֯^q79 cX72Z6(@Pavis*2reZ\>RAE $AdբdJR h2Q!c"A*M3UeC-$ ::jԶn'>wmW!l^q"rOm뺞XǶFv=88 :t8VVb% 3kIDTIH (PLbi HH۔B9r` Nf DAsr"jUL@۶nZmS)AVi7yeB3Mu.}װp(m l"hDt"F],!6R9PxIJ 2EaʰsּpS  4(s^.[TX঄Gbf-%&ep-"OP!'%6mr) JDHT- hߊ tƨ`"d5Ov+QLmތHJ^5g'}vٞFw'0'F24Cr Ɇk i\~m6m[;1jCnԳ?w6=5٠uVBJ͇FoM0|>jMx[޲\.۶?W; !uyl6;==6GGGML&b/ppO.'a!ۧ:Ħ#03tN؈S-UfZJa R_7(!2 )2+Md`!̦ӥ7P\`"M r)]ʮh7}Y=hD]T#|zo)4Ա},_htvb7u SV'QN2u ҅ b0P!U ge΀D;J*%H`kќ"9RȮ24ƊNɆإ54}Q?Mb2ڿM%8o0m7;=ëU, S$;$ZXڠ)$jpVlr3~N l_&;HJg/v;uw]QGܰQ=>*ëm| m6U */NHˏ}gBj*/[‚//z<7祔=)%c?cu]|O]mhONN{e8\m=88Ţ)1ȵQ Hr^.11I.URU3_ge nHIKP{轙bdAق- b&di`l En" $Ak5^(T`(YprO$ ))*OHZH lB(DLXA9,l (@RZjf3alf[0T(`D&udLYMzrN;72jOMΝ>x1y;x})Ɲ[o`6-sI=rK&<<螴$CTudpkx@pb7 Amo=[KXl94k c'UիWjX,|+_lַ|//SU|>Nąl۶oO➍pp6(+$DH"DւP\BU50YQDL3VfTE$w$Fۺz\%XI 4DysӲ0l0p78+m~>:G #gvpΥʬcgggråÜަK;HuOܻ!8TՋۛV8LD+t~YwmJ)"јFB$٨׊CΩp U1 vڼj4ݰO<73گ{[ok|ً_Uw??rk^;i&PJ !s.BX,"""Nvt #]CHj'^OzO)Eժ2vn[JG!+hM z CS*HpwrSS(%@jy D>q?dExw7[ pvv6NSꔍK)DJTTR&D%RD+W?s]w5y_."?}۷}//}c{_ɟRկNbO|Moz;gOyʭ雾[n)2$pp ,S)L6RU(s j3K,/|EXK Qpt:-X&MlDTOR(PJQ*)gťCT> Ӥ $= b̀P6n o#jv΍r>M2R׽uu%b A\s)/{'ɵk~뷲X.Uq뭷m;<뭈88̊Z&w1-9S  "Ъ)Gɝ0bO؄PH ld(hv3A-2FyX366]=G2k᭳D.F97k߮} 6ձ3koJ=a , alƹyLfv3!tdz,l`6&iš KRJIQ$UՄ9 wm""YPUH$Al! 3rI{ }qپcqMd*; l9ϵa0e}.P'eO9/pvvc\6dR}qk]W}Niw-&ߘծqEkvOchԵϛGݟ0T'r<'M`wGcL:Y(3!E65䨔Զ-' ހ3NUU#3O>83(~йx.rYUjzwӞ4n,sRN۶gggSa2m۞L&//[Yi1֥r9r88 9iU'nm 2.`P7#B!BԠlfD f6C3+[Dd}VI É`X[uhb L|Ze$RHk!kGlQqmo5U5{R3:H 0n>(X"3颪 iU3Qj4*v1H>o0s1lҏw]bT>ƸLӤ;~}||}{X/*Be-JhK+>uqvuM` 2w wcgS*r]c5vO0ٙA?;J(PUإTs)ɬjFd:J Fc00ɤ.%;M)[]~a}\'N+xgӴ)'y4|@ͩz q&.H~04l6{f{^L&~raҺcDTbsfׯ?;|s<#Ӟi\l]881 ҶE$F lL!a(Bc`2Aآ1Jf.)Ƥ 2bcWB!l5o'#6vű2@Kgk`3"αA4?ϯpp n S``ֱTkF;i) Fs'VEivTOuUbS͆ ʅKP"!xKEcwʆ2;Q) vS۶* Si :? @)3eصiu_4Ҷ˳7f0#=%|\&I,޷mUUB Q7nҞ~s;n{˞sO;.cحڱ]^mҠH)9esjzuN=ډKXwCŪRլT2 [Q"@_ԇxg5mRψ,q{I'qo /\.RJr}Mof.2oxXP!_@9|^C=?ݝGܹ?7Gy/}bqVt:88n"D+"lV}I3|r tg`~0 X"b6#N}&2ϤP_Ge3Hqd8D:I A/ҫ]Q6 ?wgʞn?!)I_RZCJIF9EeԷ)Ncx4M4w8K[)US%*nG?Ez4vI "]ʾ rγl>_Ե9e!8eCxI33+.S*mۦNCJi6G4Wu{ɛ=Mw}w/E%R&S>+W/ pp,*B*H/?t* 0+> @J ';(d"a7#3sd !GQnT6c ׳5`u,_`u|#h ̬p,GNCARJ)jNpxTSR+PaS|y̲s AJZ)DS5AIK[ sJnlR{O?t5gg:gggn2RjZm뫭)sbfED*/_>Q}xQ=;gobi_6%)wW0}ֳя~;nCG/ 3c)|Vua As= t@\QdO?/E}__;]mH羍':#z 6976Ju$K?>WʲW8ُL۪ТLJs?% '?ԭwV@5X/˟ʕ+OwuWӴǿ"8L;}ʯ}L&=Nq『 43;"ٕ+W}x}k5E Yx LbT^!Sq <ЋF(qĄݯ@AÒ(J*EeRyoycT ]C#e)Y-i>`U?ʠK8Z7 |/gPIJ±%(t*ĿW7P $%u]eJ!t]a, ` R b3Z'u)=pCF~ ߮}NH;n`9zmH a10?'S5yxx #;hUX{/Pzc`x-(DDQt~7^]DzZ]- a J\ UMԑDDjV3RdS-\" +g>3VDtvvpvY:fG+AJ8/CUǺ^,իWOfGUeEJ].GGmNIJ|q}:VU5N۶-eA)%qِイw]&xuBpfX,e<3wʣl2=4:E<0 kiHr#ÜRza]i9qc;f"6_%>vovmt>n[[tؾVl`k\]͵0˾~c\,Trzz7}(~^<'HDrY\cqOPs0H(5YVr%3cS)Mfɳm5ʾ_\#̠Rer9"5, PyqZU P 뉉5H Um6싢#AvB.4M]x"@Pq*"Z d-tF$q]˙<#q܉ ؂iXi_`(rP&X$wJ%M,!3*ȺnBtvmB  솓4Z-%(cNÈܥ#^5hu1ylҋZoZ`n\Umh!Pi3O& W+-i uGX`R^dW߻n~vH٨ dX6L˥+U@OKup cWj>nƟ]s۶:agʕ+Wb^4>[ nƇupɁk V;lQ2""}mm(.bZ6RĖ0>"'w)ONN\n{s󒗼]zL@pqT( jjd``_8) ADF)`y]%V)B"(@ 07j)Ǩe+:iw (P# mRR --V1a'Qìi7%" 2ব3D<0n .eQOsrcfSk!D4E>sfvqk|ߚs=ԉ-LEa"c!-PU7UY9hĽkPͪ 1!!u]Jbt78ID*'j>wKk?{T{#z Էm} h]BR~-[rz棣#+2Џu] ZM860/;qg7DЏ}7bM¢' bׁT(&ҍO[/i}5扰VLalh g7J)O}wW}WZ8tDl>m[a0/ |XyiīLZ6 ױͦFb[m 0+FPQ3-PQK Ip3dI()j-r6KuYH!q#%5iR+B-e@|:S3Q -V ͎׋9RJ`AFjہJb&h49y4,&6 (ri: h bd2}_k)sL!tJ`f r1" :&AO{{ 1n4-2Hnmq^6'2`]0`nhWFgJkEvP >̅9e= Pg haxHVi&2֥ȃq 4 bA(˒%`ܩl>1^;J1RًIa1L>[lY+lhn/2v-5ZѩofI)-!{U& 띾Ggy 'x-/Y1.yUEC#cR 'LR|{o^~j~9ۖJ /͙p+*@dJX/9>[4gכMf>? {<Kٗy׭r|孯|,hÚFjZ ! QWZ>􌚄i|&Km%>5.EW?Ƿ f± QY5|LfVԈ|!HX1ͦJ!3BkF\1SJD-ڴmQe9O-r4~ɤr3V¾XtwG_wsp:}FoG>U; G0hFpCFR'ܤ<;;,̭Q#; E<6/V@ B{x'r2%<&{ ȨиhN2q)oH@N4Xƾ^6uwPZHvG IDAT2Eئ,e4 %tve,_pr;qT bB@'&Z-C?}'ۏo^O\9C=x%8^qkU٭9BcJ4NmJgOXVI9+IaH,yVK|kE{ i lo/#Y4 @f?:/ɤpELTgC5O(ͯD0@p<6+430AdRa}6 (a)jLL>J1R ֌պ`ܴ!cc< -k?o|:|z^(}7eUv2 =Y&7Ip2`Ű@D ȍM'57ˣyЯRQ5R` L2x6],锫*M:PUU5MӶmd2a檪}ѧE.hR:D jXJ;}0v\{&(]-oG@~`SX]QUu<n=40Ӝ &b"vyb=/C?U:p%Nlh}κ.~[[w^vў@74hF{b3:`U1kiM>S#w0s޼Όz_񐓔?P:@9qQ5].wq${C_?/f_˳L Hv"FbU"%dg^僯x=Ӣ̍]W< =:ne2ŵ;Bx/g1@}p,F֜-CG_|B:GUNX$NG6*T;{]1ϗTUϾvzן?{NJ}In{ &LĔ | ??SYlȰČ µ$X O%}ur\!*ߙֱ "QDD0(ƀ{MF byp:zU.#솎;փ.;,cճ? 0a*N͖Kz`cg<;˺۶ mdQ`%֛e{IPbad lVc&!R^UY\PJ9 mJܦj9gUakSιd-UǦ9 AIk\ԬA|>,Af9 ^c?|aܴma7*^`x}bg" TՃ83r(QWU)*s'U-%^ϡ̫jw#' d @btwhw`0rlNqhi;X S- 1JKLACz ]}C.9TUSݻCuZmu]ʦR?<κkOR-?*6XMTϖX J%j)d%ʨ"gg^%)u ]Es:>^sE?eX^>}bLMS_jϻgzAd쌈G?]Ii+d-)kkR"&Z Fרzt-#<)ލQ@j&/#g !&eb\w?Zل"iF9jӓW>L27S#_Xx;~Bc"OȘs!WUB$3FdjjQ"vgނ[S-g]:ۋ~j%vgBG<>udʸS&{ cnHw ;h&b]H3%b郤(."fXTUVku]<Pq5B0LkUsAb^JI)BBDڵkfX̯Bq 9;/7gf=izC6ޚ:ƨ@zzR00׺B# A(H%i2"BcK"M $D,]UeĄv8jH<1˰fbFoϹeF) @ X\JvvVMbJEFml2J}=JݍV"ȦZ0Ks5M3nn }^na퓬5?D2E-Tմ2jL@YD&mkFK1bq$ 2dR"e(IHtP?G556پcpu˳ ogMc WgrH#+@TfI S3}^U'?3*OmIi('zh_{?t vB%H T͹<,@aP0Q0dtJ(ZgTFM+=C]XKLL-- BIG۫w'LPH1-*YntBRɁh@+}ʯݟ|z\4EW='I0 F=+_g\ T۩KB kU $#9Uv'IV &tmk BD 0ů$/J`R"3EXH`0=ȔHnkl>g[jOx49wE==Z$V4xڵ$mBeY:ެJIZ# 䖣[n_.WήP1x3}o|q1*ܴk;HnCy4]n3Wg1n~Cܸ*)@ VЎvApH({;K׷$V8ˁeqww!Ld""<ȞSuvb8>>N)\6us/O&vZBatάxB> :L]KdPCP214_~N?)`ַCs!ͤZ'/<N' (X$̠ ^J)p$o>鑳~)H#Rb ?˞4h@ ǯ|\ G2  %l<.ps6/_z-|]Ak-U&_uU Fc#ՃA dHÏB1-݈j1馭CvLQ/:<ޙk͏̝u9}K(OȈȈȵX[S2c!K A4Sx7kϽh65O'@Ӿ^@#Sςq ZPb*X"ԝ 1(0 LIWO kXTQ9+`AyjVEq;6m][5J"PB%pK\^e]y{DT)3c,4? BfPd6(y*zƭ)^>{̄9,7Nbq&lJUUƌPU2 ichoCtI;RuJ]?9}K^Эrbw~h֕_8^єM" 4?:,`G#K.M| D)UzXSLW QU"bhL5=1u… 7J4:AyO65EԳu r/5W4 jQU0kaM?ݷSyCI a$iq4"> JP +)@)m;ns;_X/Ȼ&:u;I;@V(œ!cm:ujeBh'r'}c0!.~lKϽ<'o z)`Ȁ6$4۩l>MGN["`6 H4/zDB1Ow?vɁzdmjIA ,E Y@ 4ճϽk=O&_dݣ??mU2K= BŒGADB̃DEYARv T]@:jÕ}kJ kֻ ಬjNjTڽw!a7롍;8X(DzAK@D*2cSS"SvkJPʲQsښ£&flYXћ<o2p+D6sfk2 \f|%zXbZ2uHP=K[s8u-dy^Ϋߣ<&35 |kH@mfDI8ʴЙ#VNË"+7 9S)3KRu$wL3)vS[ۑ3(D\GL6S7냍HJ&"HH~!b 0L\T8D`N^Hp2uB67l 2 `z4} UDMKPzCS61tϋF*Ԫ# Ĉfg/{; 6JV(0Ը}{EA Rq\Lm࠱s}?~[y4+lK% "0A%S( 0 @r)c D $BT#1hݯHZK afSWvc8Eft5#] onm”6}pʥ" *$?$PcϲDC8 QS`JR־EQd~N^)R>ܦ<;EQUUe $VJZU( :1 !x_)IJ,Uz3;g%LEYvYBb4*am18':}R[[.ثut Ք5eVK/Ϻ}d^@X- Kd~qY([%H%+WwP&8%Ey7&T7@$Ąȍcɞ\m"QDBƍWc4@^% F] VFU4SS;A&d,WUlޢi8`- iII69۟! 9=oL#0b/,#O3[0H!޲ T^Ug |b]$o>$P/iKᐈ4ps;Zpj5ƨb:v߿6gw=o|۳ʈJVl#oAN.fLS< 1EA:8v}!*ݎZ"~S3/'F0f0 9#SB~Q H2Nl E i3^;s]9hֈ+,s8ˎG)FfFxUd%UUA!qTlbv3eƋcU{K,cSxig}Yo4)Tic:$J6g=Jv^WiyM(1%AĪ Z`B0L*BB,K"*˲!0egϞL&t8F#IUi,fÏW$C@C8g 7e33EQ*qEC5aDKz?2PW"b:s l5BicȣNHz0w_+fz5֍02 ?q>;>z 9d" J `?lu-Ž̧v72,*;/|σle*܃8$1F{`f7a# JH@Q@ABMFyI8#':iO]q/lf;r~`sxDg,iT"{߀uyݘEkv+9Z>J32Lڭ¹u=&j+{ĺwwuvdRՄ_Ոjn{Xu9#*1~{{{]5H@D}(vwiE瓗D֖:&s|nWmz Qj)l_EG)E5,Щ!k} _Pcʐ @XA2n7!&JћPZI[C3@nd~Moވ \'eYhx`赩/Nx!0a SFS<$^Z:#3h)&@$ڽb'U!@]-&ܪuZi)ۭ>_ډk:6- $F`+$0L`H†P d_8_~LZІh3p $R )Hz޻Cu68Fua1Vc_1 AzbqW1 8;@azL(;hAE}iCXnM5__?A?+6.1*1Tnw %+Ź~RUvCNIu?:_ %`YesLMބno͠.rez8,Y IDATk/>Ov^o{(17bX!AfEY 9C涨]ktyYaGɪC֌^ef"0 TUBH4YmFe9=<3Ҳ,9}"7UUb4\Fad\ BQL5Oec7 3Wuu8+5cK}b Z3=nnXx42G rӎ>IMŬܞ7Z=D䟓<2Z~BsܖMSTpEB巶r-Yш`1K3hڶ(D|M"VER7_o]EfaۜJjrvpqΥJD+x65XEoy[^y^ T9XV&SI*UUdi:Y_ RcpI=! G! hf)>{HO_@Z?2ot<7j{wdzL9{ oOS; b*<a3\ iwKUC3In0/jCCoZЗz{7܏~IM8c ! @ R+Dc'V엓*hCjsך<7gyo6_g{T|{з F ! Ġ"N&\U'>(Y(bf9( b|dQDhd4J!c{QAD`CƘ, `ݮ5LYJy{$k-OV_?X5#.oэdlw/sO̹t.sώ{K3fY=?E:Uks.T{?LDt1pi$vNh_PCI_C`Qn&ф Ps-9Ӛ.}i-#^9cgj#I7;罯3/vgjgI;,iYvwCU9%{9_仧r*ob!zA~.]ڰ*iAG"{W{/ts2ܳ}FJٝwD2ȶJ?Q3;G僗]S_痱7 xlghT F"Yk~.83gόc X("mrBK^?(_|W^|ϣ#g5)"ENx6-)p$"@P`zmg^:3,!7D_un2 uTU{/qc|X /x3÷%HH4Sw_RqE58]_~^R(Sb&mrIvX0 ˊ1ye?-Ԍx̦9~nYEd+* 1F@A ; ˲UAYFG2>H%0afl{Q 1!D @B1FT1 '6#¦׎)=Q,_e{xđo;fn)hn++$%1KX]?1mI:G]L 1&hIi)R=-)r #`8 jfD"mtؐDjs)zqʟ lOTNeAPEM^X-8WdpAŸ \(!"CdXw^D*iJ;$}wa*([ؿ-WU ؜Uk<W[3g߾FOh*U4y|] iY #aK$Cw y^^  A7ܩ%C$B/hm?oykB&΀1FT ʳ88⸲7j<6l ȸKߊ`G0EZih6  noqU< 3}Tݸd4MYB6 VD}=Z$6Z(AI콯R5N^YE!sZMΔX?Ds.g"<'3 "Xrݴ5;kv foֆku/Dcae߅?].n=AV-A !(3'oL1f\n!%o]hߕCp2ϒ?wmN :#-n4$>mN 3U`ĄV|Is}f3HСNŠD(bF&ۚdr*JPI3FQzUͣAY>QBl]c" LUBs0>4 wNpB.|U(kIu ՏGWc;1D?qCŽb \TK@ٌN2^AoūJU ]Op*_Ї_:9}=W~9BLf&anVʈP19&z|^?S͜6Q`F)is)6~("4qlvq9 \Vcѫӿ ;dJ`SBP/][kɕUĂǗo݀T6HlTj<!LH}W$(DddE]CD_HZU3U EQ C"BB& UUQBD" "\!RR1 Q9o1vu8XS:ΎuąY(o- Z¿:Pm6. ;`fyNt,@ĕ̮<͌rʲtα1Vqm%nŚS| - C8Ƶʪ(ϲp8{fjtk "$hf"v#: <ꬎ4t jʩ)DԸj{=w>A#NCAڽNDZsRc?KWɝ= @\zc|qP dBl"suH+bOxhGSٔLM$m!W_ Ow?{:jB #`}M*Hb2Gи%>Jطf3Ihj$z 8gLG" C;JPR؎>w; )`ӿJf:K[Y6ym!>.y5j A|9EUL2*c#}hdFDPDFDDͲ(& Bɺ Y@H,3"2N=h !2EbABTHp7vutJD$$[U'zꚏD73i;tZG.V4!+Ջe&AD2_Sgg:δ,,[?b?c@"ۤMuնZkөU22tΩjľceY`<xUX(l%)DdSI KrRϋa$6X,@ D>Ve8kXgvBBҦ<7 i/2G=]w,뇌MOm7V%MSXζ1ee ؄rz_$2#h,vܴ HT@gRUP ""DXE(G6eSHرgK2#Ԍvoq)IJ!G%د۲{aCX>!D" f6 x\"B>LI `!$'jkUEUPR2t4Ƙ+7}Z@%D9{km%j(]~-"Eyۏ>8R@]R`OlB_s.5gI2@yʤ[Hu);7(z%LzOz(4*hE+" NV*DV.Wه.g!Vм,@ߌaChBP]fXF 0,o#.+c0ɫ"[ <eSQ%2i {N%9,k}eT^![7}}u,&<4D X&.*P!E9Uw/蒻s(34Mx@&@c\p (@}3F=Rpz!?tF NCL1TN.]z\WSh؀f]h:ِUU%5=8t-ܵ8. J=uWg{_ :d/-u[AԹ$v؅!\sb%޼B@T͸A}o>S="͛7www?_vٳg*P `f}%FjQ[[[UU~4t頥 Jתjed{{{?*N&cz5}ET%,˔8 W[N:DrGTjA$Abd?p:v.yU(Fh *My"P1FLeb)6Jea:^xv/q~v:vM 2T6M(4zfR#ښBoOP.ۮ.R"bj19PUB7 s +p/1lD(%# uZ^{m0 +@c(+) 8hjJ$dDtI^:5Hh\|䮳f&ɑ]:tf,X%]'fgFY(&ǜҽf4; IDAT{IE%l%Y1@g1KDUUmNk@UUg(9y{H/y6sID0;\%bQ  J)ڲ H6$,Kh5IDcڇU,3N(Hhtpp09;n_iQ>6-:GJ:C wot"y3b>dVۚ[E]oVBif6'ն h@DgϽKٲ(s?Zm\]Yb\bIW[p+N+5~C֥,D,K8"~(:[;QIQgx% 7yooݼyx{裏d菞}ُG._ cLtF[Sϳ^"qs(<;<[2Co5`cH.=zI C%FQ{ `V& D~R<|_F^ !A p +؈kKj4&Ϳwly]6wg^r̐9htn,l,ЍO]6TmYT-?PpQ@k(j+fl;/鄢J \[b۠Faf*F%2ApZkU7eYZP5DQT""u$(l89D-`s"@@DdB%l88Nq|I}p}.mɶӰPz ,nwZoԚpA"Oh ~'>e52 ) r[k״ ->135a~@y1cާ^ڤR T{F,MWJ{O5KԂŅS?ɺ֮|0խ[$,Fy P PQy>LSO~w؏ x<1~xWЇʲl4ZbhBxXU>O'?䊙0 muSU@dEOT@X7Gm G8oՅkrxu@ mA Fڝ-!|׌+l͸xsWzE"p iT !ΉjnW5ZQAwV\ GދHJ26O@6 ?mP{ͯM[pYE7꫎b^o!DY%[OmX< wNPR{4D@yP&nlB J@Mu&Q1QM!"* ,*k3M&ƘdTr"<'( "b2,sh`!"P5MjBEn S@^25vRo(^""bQzbOKvoi19l'Dԏz Zeyl< V7X*vQ끘5)4??~}p8LF]{4US^{{{~?z$dhц$ |7T DP^1v$;(7V >k:  aAPEtG̜-HgJgހbՋ 3*0:&/U3#LYSU'40m%M83 Xm9-V'c' x-¨LDl]]`x (Љ0cr6H GS^p{f&bTQdD4]uE H(Sc`Gjznn3ur8~PBJ?)g8i@J<_C цr،pC _D6l˚6 Q"Q B+1P0!%#E,%FL!V>")*d-ˊِuDTUH1V"!3D#bPQBCc l 2dQe(B=D5")R$G=8w9Mر(_;BYU!d_SU&gH r^cws`dzDLZ7gPoG@2t װta~Ai{X 6fKE n@.ޱ,x'~~ڵk)'>_|ܹs?#??1ׯʯ|ӟ׾vՏ~7~~>Oh4L&YeYvFb ਺bߣ䰊QfZ"'iy@1OQI*u'"1mX\d|sv> HXH^-hi1 hODD$kSѽ!0~k*b y`b@LD숊.6$͚C￿xKB33U(T"Đr(l*FT xìD]vt# "&M)d~^]QثW٬]nDэdne"k3ȾUE@M}tә(SCO1*h3m"RThiA# B‹1GA*ND4l P2EQTz+1٨0-rQ *  "!5G289O2zG1FHƚiQfY_ƀ]e [4Fi}||Oc5y^2|_;5h~]#7 pΕea-wu-eR r=+e;M.o|tH6{{{8D1D3i)פ5y@ES"9!)d2yW1(h9fbeSfAQlZ*9D(00ҭmpp<3VɪhUSjm6d;D02NN_̜Aǽ19zŋ;5;MfNꝴ`)B\p6 YYAP8wW"FY~@ztÌ'6eR!3 ATxq^{t"& J"ɋn':\g!ֽIIX XR}6́ai4wUl^MV 9hEDDނ͵RFOߥo!"HTսF4MD vkueYJl Df Q !;̚'U5#ƹs*VA3"3[Ѹi@Jh1-M($RPA 6;۝Ȉ&q Z͟Bݍ$ _{kZ` :&ArAvlm k7t`ֈB.QK G1 Y 0Xtw{hZbR$RI7Btn[AdCn5b9ǥ0|& ;/+DT\3_~=dBoHI-~>b"r.IE;0-`UUI~җ?o_B1Y^W,˔$1꺞N?~*7?hC]|~3g???~?t7~}[|??z׻ޕw?pַ>#.\p=e9RK([[cJ,aj$TMȨȢͱR–ۧ8 5漩L5q2Hg|~_Vs70SQuY9mHkEiݏ˿@^9PWQe|3OO}S^ev|yNDQ̇ftu7[ck[ֶmس1K;5lz*Zp%8dK( k=Ǿ1inp&B9BDc$4uzq: 6lȌ8Yܽi,<-d20Ve9;8ȲSzD& 92Kd@bb3h98a AِٺA>$[]e)`F, `{)ʒ1$ums@ KUpdRWk& j5fTլb%"Eg Ciz ຳذs}ZؤM" ƒ) @#Xa>FǻO+{Z޶^!+75t*0w#<} oxt:et:<ϓ?^^91#W3?[e>Gc潽;.RL& jL\y/䥐$VBNiRM4I9Vez?[ֶmmk߇vu붤3,'l+ Wi0}xX z1ڢρ>f o(Qchբ1 S#:K(OV](G>,g?|?/~{{^&^IBgijx]6vfjA &0DII)iֿTPc(;OH qo\fd.;F9 `;I5jLT55QD2Qkb]+r𨜝MRŦeh=mdsؤVby vӛ:\XӞD%B=r<;O7rwjOxVu_O(, r:7owȉ 2v uLOH$3_??xG?Mozk_kfׯ_G/21&~g~&˲tJUUy菣ěH9>>ٟO|o|cG>2o~;Q53>_W~8w??G?:/3eBZBEQy4MUU??7~[__뮻J.~ IDAT6Sֶmmk[3 v[txq=t뗧ļi( :dA-cefXP#gmMdqyZo]ETxH7QyawN0LS`^4cf٬jj4̭CQ Y:<%a(B UiSfb0;"ӊt '3IsHc(8R,|pcgЮB$mZD7gYF6  d93*R?hѱBi "t#ӟG%/HB7v7GЭOJggU@,8:N!-Bԁ5e+~>Dϲrw_F0:OAfHYEQoܸlf1FfUU=?s?wf5M3R H9Tu6J,F1<$gYS$FY"RE,Ӛ'qis玎&ɠu4MYI#ILB;~_Ylw"#Պ|+/_UL5'$R^tSrrF/B!̮^' ̥R";@VϬ 92L wߕۖ~̆8pr,{'ӿz}!sg==_--ٵ+W|lLi/E ;u_}. )s{hD"!fU",B̃`;pOg  Z~ $0sk'"$\7anhpXG5\51UhemLf>ĄkDkCR͘c]5(ONA$2j!q12KQ$hctaffVב-,<ϣ7McTΚ*C& _|BMȝh^; =rb 93(e  HncMqңMiDDYEQe=M3U&  3 6a&.bPf~m\ٞeYVﮔ !$# I ׯ_O mNMӜ;wXUCM%>3mmk[ֶ*GM7LaKЍ~Blb Ҵr-VÍvT4Cf6/0w}ȴIYٻ{dBN3;Y1!ciCMc,\yFT5Tw&j bvm  &;S6 &ktt~}@&%Ҹf!ǭHpY;}!27!/N,$ɸ( HDB-F`o!`2,yUwtv &BN,U]eY65HXu:i[&Y!Zq<.Ύ::,$̋Bo@J:FQJJ<i,.̽4bQ7ѝrځ}% w)t?cZ5z m\DS|G*׿뗎L"j֒/Zx? %i& 2bN'8#hK>j4 ZJA&#!PrIB֐9S5l'ۉg#oB6]![HK0W\Ԭj*YaT05w>vLsPni7I3;g$"nJv=롛^~l]C- K }XKsrɺ,-1Ew1c nfC?xJfjuKmp51jhN~McQ4YEb1KDDDTeQyȈj6bbG( %RFiUUȳv^Vd"B!'"cE$0Y pa; yRp8uለհCĀ_6w ovMt3-Y3􆆀-ָq0<`H9 꺮s/?omԡmw677v}ɟ"hUl%8Bx[ `uL[إS,4MSE>{򢉨13R3UhUcGT-*"!Y&pQkULx?fs38jiEm-[r41YInHL*8cS湸ٝhui(AٍcQPl:+yI;_~}+Kda* V@@/̮^qx2Ո RfVխlT5 3T \4G|`6,wDO'jyaX F٢`Hd0"e7`TXqLje hb2ʲNuE n[[Ն-9UapwWu]k: (Ҹ-h=a?ϛ>f'qeYUUnhT`6}ooŋ)]h0L/J⼉HJՁ.%`$1;;;!7nSRE3[CTS^=\ڎg)_ K.dkomkvW5\jtqUVy3+Hr]?t+^<0fyEܒ0gBX$g ӽ#M)DYڔjVC9_d?C\+ш΍O~hdv/E ?"@ ́(* /a$Fld°7voL×}KSB1:\3/:?tϹ=U;xa؇"NGE.<'Rk]bEn6t3`.|Ʃt {k[ڙ{ 63%kd6&3E BHm`BA#3)S&MDFLH ir#P&UR,)Hۨ&f2' ,(EK1E;H{ڰ^4Rze̋oBӷ҅HlzhF3S =5bBQFiH3T 0@*̾ AQ {{aJAzÜ< X3 f&*e} NLrʂ8;H 6%|7/_ 4CQheIf=U?|_qrUCJc2f) "X6VN5 (e&w+̧/ݿ0fGw|Ɛ<9\>Q8.~'5u(/1SD鯶h&q];xa[ε_44MvNsiydgU OnХ}8;m^ImmO,'EӁ: ĤԞa8CʙYL7[J(mYIIYRzPrR_-ŕ 3KPM@TU  'Fpx@$i=q7@lى< A[ !7C2;;Qr)ӈ9DYnz7lf ?{.\vxFk0S'\O~$8@:tիWGyzm&"a! .:!Z>Ф 2}DZC͕6`eX f%3Sɤtzŋ??#x)* &0%>B"Md\C]Iיʓ#=#"j8RZiGr-$hD I6h%q:}@ g_)R}7޸5uŬ^{zv,븬wu9w?\!j, JEMXBPb7]9ѷvssfH!p`2ʹ6~fsVk3) qZi32~}m|q!\Q sԌݽڳdSzLr[M1Q^ f"*hgg'߹~_-M4\La) L &scS5G16kۧm ݴ[rBKʰmy Csw7r{bC ;)';3̬,$mtU5B$pҧ3+EȢEae"g!-{CnPA-DwZ͵vrHt1qAKr|Ӷgw,e) IaYJxQc(6w|bI;ʲ8vvvƆh1y{t՗N?a vD #]F[ۖ;mG0o@ YX$T 6d}h&]D)K#TYI&QǓ@ tFekФvx m(CdxCѝbw?_Fo_Y2'^UG"B=Utڝc fUXhKv.ҮI+#;n=쫏Fq0tFPYdRw^ptqyfx$6㝽HuxZ3k5-=Ʊ s^3L#/Z;mU52"nfB!s])I2SʚwvD15"p.xN'n K9S "&Bgi5MibWT|c !t6WyMީZ܉T@;z#Yq3LDd$c XTe$U"{M[ ˅Cj~‡6` @֤!df¡ h!831<(C`ζGz=dTiX쳬˄j12sB*^$孀!6Na&I{F%Kw8kÅ.+ 0dwU%niOL1fcN50cAMoS2$B rzֶi 'YvTkO~R?DDKDD'DDG4YF#iY#AwGo*BYĤ+ߊޡf,xi2&TH \ntaw3;{HQKs`A:6\f Z^`DD6Y-m閻d=i;˕a4ʹnJ˔.-yafNӯH!mmŪj9g{7xr`13BUT'7:>O;m:my`6 {wRȊ*y߼1BB=k2 k8y]F̭ݱVQyqtTIQDˆ#3QUZXi;񬶚vwN[S"\VW7ԯ1u6pxMt2W n<_,+]x,Bu"TUeJU3ftpe̾}ڬ^t$nK҄oĐı'>- 2sE)ND FC4Hѩ!% XzTVeuS؍ź fn Tcد(Hr݇J,ݛvwa4DĵYə k/7oUnmkKŮIՀG2ZV=QJ`\'4 c(S}ֶvSCկnhgܣ!1$[2xO&CU))Xֶ}k9Pt' E#szg JPs]y-[S #wֶ; >7M6kSg,3|r7~Ifz~4Nʻ|lCAg%s \Q+gDh("chJ HX^ R&巻+wfWÕmP/Z%SȆag)JW|`&вaBԤ2L') 3BHo9ƲNYDB b:Xn>`povx#s/#av#Sf2aeU&R4[Y)$0FF,*Ϣn񴊯8FKTN_r_/qe`ŵ^uzypWū`"XEU5Z 3 a)N[x]E?-fЩ^̑e KNJUexQu2A|$>J=Bҵ{g,5lPi-P6"0d[L MIM+Y-y6'ĩr"jlmk-g977$ ˆI>(+R=7,L"FNff*쀈+-[s4͕?>vRWWqLYp*_d_vn7{`$T1.Dfk&nZ~| AŚ^`\Hͻdz{*?a70®rm\VVȃ Rns\p3ԅ.j79qI-.&w "YZ%NÓ32;^Izw\5L eM)tJFO H8H 3D$ĦL)(1'31ܢS$vТ8^3w60V<® lAV,cb٨񱴳j@mИ J "3A@C@C͋h8/RZZz 6=Z#Z<-vg;ďnԗ.ݘL&>*GmjӼXߵfbSy^E9=s SWX0;3OֶȂ@KFCdA7 U~Y3Ҧv|b9X @e,E͢=,k~h0Lx ;~qDGbR8_cMvg=#ݸvf Ycqs8A9Mw~ysws*LhR7 l+ϊK L^יִI8=Bs)fj~ Gv&0K&%܋ّX)k`v#ca Z[S-qKߚ]9QQmsk5j EK'(|“ҏAݕ獭]Y. XuVjtcd.,"zrǞb Ks%;pw$F)IJQU59*0aQMF:һD̬-W#h\-)uk$m B,Ym,,C  t\?672;`gT[ݼq6hh-yõ}Aci ]ݵX@&ě/$Ҋ)f7K <U|܆)V1i`f611,H=R"&'Pj6c /EA  DY07"[RC"vHL X (rN H4=jzһ@UWѮȳB]k0ιYs0&n;^C6wYVS,\9 td78s*7(ofRTf~%Wǒ9Š"I)܉4$V;Բz_xhoW?xg7/Vӽk{4Ieكw4K 7\|zqX뚚HfɜyY@h-{ 8\"&rQ+[6ΉJ:<'33x.u@SOoGڷS "x֓@ɿH5n{t7eМcEea`Ґ+ 3(2;1k`&%C4UK -v0&Qġ`49 ý%q)ɍJ&{bQ4^UT5^LʆʚE#sHB HZ86nmMȆ|[ywX$ngNN{jDʡq-B"5z2y^Uqui2T Xu>o5)Uo{4m2B4ƍ7wWh]^&MlsFF.n&?cfyF, !{#֞nYbg+5Ȭa#s#^g4걡>IDj`%ARTș $dhU|ع_(7/"M 0-7/KHT>/7|<~{c?fUYާOs^#'Ԫ5k֬9gժX1A\`f`C%2<+}X'F4RP/ JvDD,A{oXk PA @JэYixՒ:g^"NshT0*->(a ] Ԭrkodi, ZUmVyW* 1 BicS$I""p^iS yTPTs`{Ҥ&@M4"iz KE^ HZa'C/ommcv^Yh4 {L2ˀK+,UWN K)2V޴E^֎x\1( cV+;~Y0N YXQ*:`08I%gXX,T^9=פ%n%SHIj-.吚\ˮs&(k@2ϬUHDEկ&`,IA@d|eA%EA d, D@45RLfrbe-_,6fk#%$`꫷5KDzTcLH/ pSOGFGQ +F7CJWVaOF` |-Y*Xk&\(D'3@=\] ^@; -E"ee-Yu]$&w$@'pw<iKZ5]"]ꂫ!̙~m  ( *^yZ; /(Ze%0W5P$+ZaLPQ *B@~õZf)8 `FfLe>88 P~rͣ0 `qxqNGP*`PR!"=A%v2PC[&ctʞ˄FU'3Vvm/͵ŤÓ'̞kQh?ĠןVǹmMC%6G+`[-sa+\z m|~%9?zo-eia'v[HNԌɏM׻z@a2i Bp+K{+ϕ\t`ČDS)8`ANLDx?^nI ;WJVv׊3o}1<*qDNnx@ P|[9a/f,yˍ})ׄ]m3^\x}_]jmTii׬j\ dv9ϩҨl8D$!o@pB닢ߒ5- tF\oMҁ=%͂dlzzp*OKǐQR"!ڗ# ŋcF8MHE(ܐvxg H{Xn8Dʂ-!KhEHwf@8?NF6=s?zB~-I27^xejbG3oOo9X[Gxmwe.:Eb*a#YLX44 {^^U$4*DӼS^Gg@y7yBdWG `ƂӖL !0UR%:*\=T@TA5(b!$z҃,jfiX % !ZBQJ(3 (P螣54_t,]#lpg9|ssGlT(Zrj%}2$IeY"beιnU.E|fmm4tɃy&Ə]DUX%\"itoZDܗ. e蒱gAVF7Us־]t:}kn'[gCn3q7}\To8y5Dd۽S3NA`9If'T/$Uk!!"&->:G.k9WR ĜiH:BA0A4@Z elP tGZ) IDATB=Ǧ>BF,)9}R^麊EXe>fYlɏ=֯[ zIo:`wƸ6P_`Mgrj2ٻ`Mj_ʵe8qm "Nho0+qhd邫qf&MQ/>^#2fYTDTg.jF%  0X *(3Z$T+Z* :EC 9@YkJ0* Y4M#:g/8tó|h`=qß@m 2D!'@D'l%kb e5+U=1D(7P%!;>o5\q:-4U؂P}83Z$XgS8]2 J>c4-WlIk4jɚ.uXWh62Wp;Ӂ7X0bj-4wnn U_c)ߞ­XQnf7Sӎ~mEƘDP]$n3$G|&)M[ٳ;ΩSz^Y$L&Ƙ$Is"d2t:ι91_Ykt[$Wn<\uHO i 5W EQi!-TE<^SYٓ,Xܘpݥ2M ]LNL HЁBVʻרYɴt.3l$n2:'6KwxSN~H+tcj*%$- *E`FF;4/KLNP{ MbFh-^#`M"A%ѶX7bdƲ[p:ufbAIUBT IDT {( yaNDD;BDJA]UP*E !#JHz4GAz *32J<')6ڥH`X8& 'nOJd/#LNYyD7JC&IM`<0zej\H ͸̌rcֱljZRdX_RM<P! S5Ji bK,)t#/j1w 7pU4&ϯ'mPC$ e,Xtɠڊ 1Lx@(PA( Z@7W pxGj h93; %Z_OOYkCxyܹ4Mt:Z$ɧ>}Cw_׻;뮻R |a4x"vݳg$IAM!KC @p8anƀ?O}˲… YVle+[//Gq!JMK6,d ]K(rgl$A؇0 !&642PA"*̊*PA%`c5%ITVu,ʊcv)6&h ^ yփ(3O\A4h%{eqEX*[@"A)jEbΙ X<{9m^%A1HH櫙~h9p-ujj BEBEip^/U Ŗʃ.u`+<3HQRhN⮈lffṅ# P3AJM("b]~G4zih7㲿`EVY`Vle+[.ۢd. ,xSAne3[ă@0$.VUP̾6Jdp[m-&p5PDT@Xc^w NH١INepj( ;_Ca`TȨQsags~@>|n~@ A,ipRD.N'v,!$Q **8M6,2Xu:K3b7IΊSV*m֒+vz):d{x:TRSuV< P !` 1B:`t[\Ng@⎀uT*88!t(+y)ql\TL4=HyZy=WJb %:ahNEK"ckZ"G+FՋd .<#~,T 7ܠ ֤`0`fe45<?Wwu//~{ \t]snkk+D ⣏>zɲ,Ówww7|xDO4 (0:( fsјL&r~B:le+[V]:\̌8d -b!cHp(v;ã!:qy몚@4D5Z @%d` i4DN hK@p* "L", $ ӁDg'^XjE$V ?h sSy̌ KLI,AB\ SոõgYhiei6Pi;.!4D ,k PSRM\VPMI/h;ZViﱅFG 47N(]XUUL?o}ooeizի^[y/~~5yM8{e~o{#?#rK$%+ԕle+[V+eK.X|g_}D/))p-D7f˰ b:;sDd AIjIPpbBc dƏ EUI0@B>W! (,@,YP=[12R"*mGM^&,,"'BeI2qp '΃WE H@"U/GCMe{+jf{ RG12&bH\죱Y(5aFr"ޮ!8Z5AW4f3BɰPQfCpU*awbҧLwX<8#X1AN<4Cgfs,u%X9pcу l)ʪȌxD(^f@GDf^__ p2lnnfY6 ݮ1( @ *9iHd8v:Wտ{w;/xA6I%/y[{[oͲ/ o?O}O:|~hkkk//__7񭷽mI'?|sG?dAp݀f;, tү xrĐYYZjDEjx+/VRiW el $$HA IX`(8! LK:T }N0` O&^e?R?gY8AWkޟ^Byַz 4`M(US%W4' 3%}c7As"Di!)^ 2) u220Q֚ ӏ ύ<8+M\@ _d .` 05&8[8ZgQIdaff">yD$).{WUs]w}?`0̲ @1!#!/z#1&(}^x>wyG?{g2~w}S4Mo&":ydFozӛ.\a_}C{ɓ'wvvzx<~Ӟ׿,K?xԩԩSo_W~x3o~K^$5O{Ӿ<9NDA]le+[VK3Dz4nXLmїhvA4[6&aOG03Tt PP}Hj|3PUQh́YU鮛G"XNivtgtߺ5eZРu!KisgpgFϦGat4-FtbMPS4Fz*\p,KQ6 %U!I EDK?/m>˲~s1Zkͭ@hc"Z[[ ,q2<Ͼ;oxO[oS$IFY{~sn8$Xnw0 bƘ3goll~_~g~&EÈz뭈rǾ/˿ˠ:{^YVle+[5nZع9$q5CB$ P1e6hY \B RAi"g^jLTTσ D<#dD9V` ƨ^@E+PU( 5QTQU FBi8%zL5&^ B( @)nG5Uh%.HEF57S=sEf]<z.c.+|H (HL fCj$I8i%A]}TK$d)f5Ɯ?>˲^Fϟ?/!wy>)}~x<>qD d >Ͽo|k^swlooFچ_ a}}:u;q}݇OyS$n.RU<L=FdC)C JepИO bfJ7NkPD=c}w WY׊35e`ct`\9_&=q׸nLD@)!=Ғ$ KabY< EHﺡk^t/mw$g2&kQOf ÚƘyRa U5(nLgTps^BȄދu^;ҋ¬5! $,7Bcs1$Y_KlGXKU mZl8{r\ϯ8ݸ8L7g L-V.1Ysٳvww_җ:nDҗN8WWkkki 4pd #BwO??s?gy}…}Y/{^ԧ>ӟ7uf.208,;r73d"8 ΁I(0"!6[EEDNYZ+i2qI"ϒ%b6HJ{y^јU Ӄ]c&"5^P*pZ4PbcCVg4Z%m8"W2QXwѣ;\uoUl<._ l%lױ)z:)Ft?R3iЊ68Mm<_FZPGϷJ %E0HJ^BB>T:ҁ+ xF'"|3Ѐbn ؁K<( cձ-LgF2,r .{/Jt+/Wt^iCsP]"b;sfGE:U~)b`MԴо3*@e AyqԩHiX}i: iM)(!)*SS,oEm) iS̥n!,f+U营#&`ofBf'"cxO$ hx3ceYVND~wo}ӛtĉ{Uյ5DL&^o86K tsoF/~7Z+_JcL7;_WٟY Y__/jeau?"TԂA0-{9b\\X"DLX P21\Qj71A@qVTԘd4)dV杳6!"QTMc~Ct oނ Ɇ4&SGJ"w.I2DdVJȱdOОo2F18b9BAF?!vzj'T}À kB6" 5!hY 7TJ!yU5dr :QBu^DĀ5Bw 4']a;IY*E65)ELO=sc= IDAT{D3b,$gB"2A+b,74/ 9fAZ%)l.HpN"Q*4)pqf2ЪI6f* T=x*A^f:[jsh  i\·Lm[0/{8VPVe'm5 l1fFXxbQ|Ve="TdQY%i91nԕ#ZqlK4`T(L,)Z6jU .i\|*,0F;c͍ t<,V=Ebu֓)l6g"B :BuHUh3"웦i 2[[[_D__g>i"@U`n[EQAjʜwww;1f2EjieƘ5eY$ D@?&IX kȲLD$)rie! Vg @ 渼 .66ޓ?zpOBf9ñuDR@H˔*{?s йM6̘3{MPw #E檪^8w޻>'s@B6wv0}bF؝?d<λǕu$6~"7ئnnAo5J,AD 0jdffaMR۔:bEv)S1 `Va`SVE/ p`VeP rmJlu WU}@i_ke`/&qyYLK13Ͷ8(Yǜ^B"*L9w5U[(L+ʣbQG@K[7'ՁuP;A <#TYŲx$ƺt (!P0 _r%үQǶJd@1 ™PoV˰h﯇>? /if˲ (^/B<̝Ng<3sy;#0512\$Ѩ2`鐀#s.ARG !%05ᜳ֪h4 ^.Vx aHT FE'KMTtǧ3'8_KԘapԦ[a16# q©Aa`$Ra'(eYgoo"T'+E9:dPhzj%!8*yzvMD&I$DS8uepDcT~e$w,e!0Y.E6)4+͞VM 蘪*200(3"Bev佨* 1W +x%Lh>e(5D^l@hl.j!YX"1P-Z~o/iЍ#tYYPBS`$,Y;-U28ZVCks6Spc3wΙeh T%9L8V):ɉa =`qeYe9LlX4*hu: \EA"@D AF Um4MGQlvoo/M<P#V!"}I$`A A,2dZcLI4KU~?$I2LK_4 '̙pP·_fp [kS, lvDz`s{'z1$4MO>DP#?V4۠W[k= *VS5gΜreEQ:une.pd[2 T;c1msVOB7yJmPCYQwL_0bv8́u~2**CU{X1x\ 3;BX7hy^ (qOAEj/Bؘy?nfRjYl^?B[M'L%3;@>ʳXR`C6T-m m @R-OC[2%6$DV~SœEĠ͡xGMK0նLGQi E]إ.zqD#-BPks֪,04Ǵ18"2G'H)߼d„@ԾMQjtgPaC4`.?dcq" Zn-ͦ[ʲl(Rgx )i&Fnff[cxt?p}75.^ySpdSn/kNT/YEPb.זxA2A,l&0qyn?@&IAs5ϮɄP:ܺ_utҚ 枒ρ욶'"Zky} rdHS8EDRR*ʹ?#qZ֗έO~xiPxR"T |T%PF3„`βnʓ1kXo Od[:ۋ=| wca5A;ָX@e'5. 'zvz32b1ԓԋ@Hm?tGG>p,.`'|֧Dr3<&YÂeEgnJ͵~ `lT >1|Ấ%ò,MQ4!ŋKG-*@R:M ,ˀPD" !2 4 ;!ˉWP IaktbRjE-YRQʉЌ4RqnX1ٜ (֠\eZevo23&OĉMkEhwJ+VMy0 w[yQɇ(c"SMA 0OHE=bfc@l#t#2U(F :U,PX{iZ0 .aj Mښ*DNs3ݶ 8QUY y**bp_wk=|{nh0GKo`s>Q1bH;I[[ZW“Y736Ξ:_(k*pF~\EfJـ!$;Y͍ӝجO2ql&av$ꡛ'Zf7Ш JRX @ѵX^~@fCIz[R R%^ɚ ɭ=w:NN@B e;WyϤov/叼 kճ X97jA%fH 2:f ԯ%EPHD:#6U3l389+_bGꭚ+nr Yi"@@A d)eKUÄ> ԇŊWii_1\ T7( 4zÕ aAN_=]YA$@x(V(3]#I󜳌[N&ٰdhҤI!1yD@PB6kX0~ c ɨ q BjĽ8&CF6@K k_ܱ%9~ 8@"Сt(\ W9Oez %&) $ɲ")~C,m# @9 W9̅bcTGcEpeXmJc\D0'wcvk۞]=::Y/yWA'{,z |pY"; p齄+,!PԬ$\xtcžN"aӒKwlpA'{uD;k'@Tȑ=w#щpyHeDQ\0EM'bt4 N6@CyU pdT'a+iD@,*+Ge`k Ia!M,K**$$4mQX0 "{d̫d# 3RB^F `%)E% `?? 3dVW)cM~NA@73;l, >3ε9NDD"XzU}i: R pBWgUP4D}č#vι`Ź %NRC&'Q jfmf`Sm(P&ξwF9ӬRDATHXYRXI*ЃAQRA7b,N/FApfS(>Ejc&R!Ke i9/I,o~g_/5@E@i;־^~oiҳlDFQ}=%(Q"R_m* d @2 吕_ln[k[uaf@D`e,7IA̐eE03;ˊj8"R(gyVRU!AEDؕL眺!5Ɛ`.a)E7ʋ݊#;%HR!Ddk F_a"'{Om`ke ]"fsT^W"ńL "Bó"hÃV6Wvp@_}MUUS;ToGѼ1azLObQniFD"13kib c&E'ɐ+C_ 4&"iZ[rI.9j#ӡAJ־·*$GDXF|.j!|]vK`g] EnMP:EHt j#@2 d @Ҋ.%B7ƹK_J bM HPJR23 :i Z'AX&!"2>. EZFҶ}+Jjo4Q#LD&>7Ao"׶m{!1vI3wD5 /^bVv}pLDzgztғ3n " 0A ("?Ze 6#Л6(a )8`Rv@Lt`Đ 1bmG޴`kys7Äh dRg<]M]_+MZD-$&EV֠NZg>_”~t^6]|N=oM"7޷4J6{?~5z_@2 d S*n?vyޗV텁P|D\PZ )ԟrM.@yz`|Ǟ9"Zk1@aT x`oRoDR)hq܁8wQ"G5P|yώ_)ҿ0^qy YXޫ3Y3qr#@7q͏jm%0*^6AXڿF(L/P~roCDD9WZ=`k[nd$DF֭|d|/эRIc$!pczgt'kOpUˠ'=c`Bo'q P;;D&Ea`p7!!]wM2 d @2ׄetC)|RJ"W[-D*D$ y ~"Ui$.]Wi?U6~yzVWx".0(8C>MH&G3CCC2 d @2WD`iV`Ld1K٬8ZV)p !Zn jhB?DCL&;D=a iBlX6*'Ib*= "@ :QVaωP8Ǯ;f+s X/4DPx_%/"q"A!$ÞAB8P~٭}poKKC$)Y HV58cu4$@CBkLA RYHw&0X~O5+q=,lFD` 1U+/nW L(gKJj5Ĥ;jgwu/ Ea 05Y;뻽BF0CR=Hԏ4CQjh8=(K.P+> s!;%tArdX?#B@ѭ.F@tvkd@F$Ar)% =$z :@1V>D<"Zk,k6Ȼ,bc)#3/f6XkE$Mr 8q\*тe/íH dBCΗ_hiGJfnZ6~] #*\7*"َ[dz絑ڤnys.􂞁(\^ Q={n.Z(`;KD{H8 qHf4EQģ<׃x%1}q9ҳ fUu,K-qhȉy[ۼ[ r~H'קSj=m¯8n$Җʡ^D$_{Eo@!E4(RZr$b!ˮ%sUX0kS.FQĀ$bjy&Kz08):h݅իgY706HZd0KRb'z$d0 m#ι(Z!Zp@dYr Hi$ a8OS)r.rE:dIӑ#`@Tz@D4]O {ݡ&Dc.)mxLקTPL{aY~;/YlvQeېW#­Vkɒ%"7* +A/7 ע5x!av@D(CYj@d*.!Orfy^ӟZc,_hdY666p$)x(t{yߞԒqUoQPoԁ.ХLgޓIwQ8j L1J\^7n' qZ[ƦLb%,ˈhjcafg>y(bllS'IDk4ccc$-ŞH3gY~[k׆Eicguccci&I~x8ԝZ~ 4A.DL4b 1&(3sQZnWyeu9"JT@8DԯV^zoITns~TτNтf^:QG: 6q_ߖ1A[GUftͨT hiƃ^-.zhi_x%ёwmקyiQY)~-ů]胙eYxU\DBW_2_sRDbL&Y#9Rf0!Al 7b6PtDdtЇ]Pj䎝c@ *3 [v>JlZ@A#4'B s" NFdǀ, R2ą8tטZMX)*5@8໵'`Rҝx{|k U|9icuL&G֓8y-TA/{gTuA ̜yX) Qs۝ěX"ookA>^^ G^m>nk-a}Vk ,UoFC2, "0;w[*L E5DdVaަ3gPE#Tc gt@U+žb0::e˧N~Wբ^/_\d\>}e˒$j˖-|xxXz 4 ˧OtR"ʲLDw /}uttthhHuT:b@ ; RVU%" DMeG(`z (oUoUf"*6Bj!j6Z-z;󪷈H@B0tR$(B12YBhL=^ԩol1e 5iɲ, L4M]o՞ ;%˗XU ~X0y'(JYi4e'JvV1s4MUّr "u 45Ъ6=m!98:YLRnAa$1+MSm3i\XGVT\*(NsIaZP9CVز=ADR|x miC8dױl69yGxQnh\[g=oߨOkHUr8ϐEgH Yy CJu[e}@5ءTݡZ&"H sCIao$lLX`u}=`XiGt7cI^GD`יI7 P:Yg,!) Jq5nrHJQm 0aa*^F$G kFjUs mU0;˲uKe###h4$( FFF&O4`ѭ.ʈ1&˲Kyٜ4iRrȫZjZCCCwSتҠx'7zRW6U" ]}: _MF՘ jTJQC_aQ fAVCѪzҥKL%X;NLs.MӰOwjZXo#c ؇fC+`p d"RgQz+aeYxkbUeOVKJ4.L!>BWXz/- t]kׁ,_Ė.EQ(%AԇWG$1%Y*NJNp=3 D%aBЍs>ѯ1hZ.w'qi;q;#Ao\&\n.&͋ -EWuQ~(?kI$Tƨ= utk!1A8Ι#L BҾ$@v4I0:hYA 6z|Օ scccIDVKD&M$"`-J>}zRhlbpI ?iZ z><+HՓ ˀEt(Zah6GpΩ񨪍W5 %5 ѺosDdW5TЫ0kPBdhODdL6AR(%H7kѐ:yd$ȒQ@Bd JsXXY'","؋WsaV_ r/#j# }YÙr&-ݾކ0U" QdrR{۵DG !%YYԉWM_+Q[1HU;~J [q(gY$͢bIdԩfsҥXYͦI0]X w}aPqSt$\`@N pF㊄Q-$@ ӅVud۶kCaOA.ϲBZ-e,[g+~V%\NӺLLtM6e]Xsaɒ%afnZ|OT)aw,˜s&MjZ˗/@5#:8[_NDO?… o-Z褓NEn!Vhh&1Gi!˒. .O~Z`llu,YD|A{k;8}cB{P;𹂳5Q#g-MJ̲L:B]*QD MmUefZx""Rng}~ƌ"c~GFF7GrЫ`lǴF]p cX*l*AU8X_5E|PARV"kty^Q++ N%uqxՠ ȠKބ D&raP@@iOkkJzƓֲ,&|`"wYSlYCDXT_(W5^'CҨ!̈`PCLCP 3[˅u%زc [}8d!+dUL>Eܡ}}nG㳂t#.p;>}$n>k|r¸%;j , Wэ}S!h UQ5\Ht7HPzY bz IDAT,Kd-fj)'}@f}u׳AcQ pq ~ݯBJ8ۡlU4ŽIQ]%dkˆMРhwXWdlr(bA~;S w:@7|W_/29jQUETӦM{LE^ (2+yy$klzmGq駟~ 7\s5#u|0i4!VB5 L$Y6'M4|,}j(e) ~ittQ0`v"M7t6lo?"3Gc5RD#Ԅ刪"sw%PBЩ& H,9iFK_k!qX%q@TZoYgm?%\<#Y x, Ia0t%R =KS Փ}#8#5Mf&R7c.p%a\MN<-"X[R?wqpZ3kYj ASgjO2_kFxy KE*0AY&A F1 l!wLFf(wx0;DĹ򥣹5"¥A2HBZvk=yXQ,nZBDU{Z-; "\d.nvSW{|83Q*%9Ŕ}^vtjO=D-TJ8BpҊU3>,ha%NlV Yr}ڋpO>9iӦSQG^{j~78~\d@VFQ{/ҿ}4aaDr-7l*<{G>vo~EQ_|G>n/soٳw/:ӿ[oo|C7jo3go~_@e?ٳ_Wvmw?.lk>z??Yo[o=fs}"2<gΜvi޼y/jpwܹ;)622YxUدA{ /q7xٳ%g?ut&vmgV0g9ꨣve9sxcccSO͞=u}so{N;mҥګB&}޷heKn`z,zeZVu7gG5W=Z[N!jD[?,:֖NC1&I(I k`MH1H؞)Dd91JZ/#9y'0q@a|3`x/C2ݟ31Iw|09["WC !J_ف! U0 PD))Cp !J6LfȌetP˯*BPR  0Ob&~$s6bP( cR(j*킰@/#`0ɛ !%ic vB(B "@KagI{A @֢+:t(Uv8Hd@L.ΠCS)4)rHЖ@ä'LP}2ȕtĂ Tw&\HD?q^uD2DT8żq<7sSRk$jFrFD뵡"w_5rl$1;'&FCiD]0A0yf]v{'ځ]$&j}RUY5AJ/AjJ\Ikm}>$t9/9#/;g?E;XtIyѿUN9'x $ Ds]wp‰Guc=S.w!7y_z]nD5f8ԯ|W|'͛w뭷C11qhXi(v|ٲep- ?wQG}?7yf[Dϝ?{GqE]4k֬Os^{gq/[SN[ovmwWl/>cgΜy饗r)?󟯺f~ʼnKvDio$nV=Gk_#M{f28O.'a˃eNj ]/g A=RdB]|]N<^uOBlj(yB( 2.Z|aw} ua^۬8z!ĒBf ST 5#cLO:5أgvq.˲ŋfn?|饗~%4а!tx|Zua\6 %r+X'cccSLYdILPWlN`kڥKi:y䑑]m 9UҸ?>dK+ e\0o޼wQ>oͻ}[omM`^W>s|G9}Zŏ~c9` >s͟?w]l3v}Ztgov#5v{"jؑ?y{ o|gΜ9t l['p!$Ʌ^xǾ=[򖷾ozӛЇG͔tVk]wl͌1o}khhh7m^D;_}5\>(eߦMy)S&M:hL>~V;:묳_>|!񧇷@`]s5~if;5\O=}.:cvqk׿ᄋ~7w…CCC[m2Zk#897{o?EJ";-Z+.]{ 'l}G?G|r5ָZ_=3\{~;Lmѝw*;Opg ݝmD7?W\O:IK.?΀GFFD^7MX#Gv6@>ɓ[B)'?ԩSկj~߼WqWӆK +O+Α"(Vֹ(XV0%Ib(Iѓ2v$>'vt(P0ƈpHM9WC Cj1ͶWEXa" ȀF]0DXDdv *۪0Ǫ_{vh[*g'8;1e5 W>Hms'WPCU7>vicN:3A%nA@ (@[km^ؼGF7n=C{)('fXB醺Q  ^ " 37܎p/J?<222}tU픳1t?66 /uty;<5ir΍*qxA-\h\LrAy"sVu77p^`nGo j5uzg̛7+_>LQX#|>c2*5Wc9=j}e{fWE`ܹ{~+_OjY$ E#쳏NBYhh fs̙ZGb?Obӟ6`z*o;J%yk`˖-N:*yYf@Q85k{l6f9N;ȫrtFeiӦc/_ǔ)S C=4::oܹ}wgӟ"2c E7<ߜe#Bo[]vg>p,bD&"Pz}W_}u"xCuYGa/ftMy䑢(vix`ҥr3g|pM7m [kYgvTC`hhH߀>FMDw}iiZ]?wAZӟFFFn;Uf͚l64C=393<V@^BaC{ǥ^{ɿw}sUzn N:|P(ܡzι}!sƳ> Z>M?oy[K3f֫Dkg+"ⳊF)H>DDL}Pa %MkY%F\Ǥp>lh$v L+t(Ѧ-ڿ&l4Qڲ1|;fpN,;\Qb @(p b K Q$iӤ$ UGd`vL˜" #|܆b?tڕ!Y Ig'9'۸WjFHTѕgx =j/ Eb޷LQ;-=:]T%"y_{p9眳'Io[֥^ze|o{ jpV7Wf?rnf7/iӦy^L6/~gq\7ZOW^y7߼*tJzU'& !HujCuOD4LBQD5,-Z4eʔ5X9M/8OS-U9Aı,K-C!h4MՍ9'fsuם?ȈfoxQfweАͲSOn믿I'T(1h-&p]wmjeul^wuz;wlOԧKŋFιӧEh@;FGGR~aڴiyɢ(>z9s_~刀=*HqWY>fYp… ;]uc;[o6| 7\'qy4YW.IZtӧ?Ϛ5k…~??c'>S^~5lZtyy  bXkf/OJei_AX' :ˠq@[+{ d64TSBhH|z "bQ<ϝU) bDX1@DXED[8A `Mb!HIN7wDB4JqNluL0; 1l0D(LQ kPsBT ETs㎫8 Fuyk_=(3K}߾G=;._ad%H>ЯqJOhBg}';a\0PR6 ہnt6WwB7B4́dt#2H}'@tgQ [WV;Wx%Eqsg}btB<5B/0 DtDuCEuW96’/½h\|78M/~G}'zҗOwg=K't<o\s?_`^k6~W~S}\s}gΜ9\sM^4iR dɒw'! ~tM~'}mfn`.'f7|v:裯ꪥK*`w1czx嗿_ZoQwl "|(乽6t,AjBa}.w, ;Ԡ"hѢZoCCCscW]uC=`h?xVE?^˖-KRmO>1f[c5Z=s(3f脬L$Q;@7߼&|g}; |ٽ>ED}i'Iᮻꪫo?knxKx-r-a-m6˒-g?s=7k,hZJ*2Vb99sҥK|ɰ&6x$I⊍6Ns=z+5 6`7xcuwf{r)Gqy睷5+Z;mڴ׿-ܲ{yZ_ҥKE̓/Q+W?Z{0}s:ݥ3qY)衊H5W AGlo"ުRH-"HveXm1`ū%\V}hO (:J;5rǴ[/H\۽C0 $ϋZ݇~ć `b25Ae4͹sJC.Ye6l뮻˧(Fneusv馛̞=[9ŋK_R֡~zM6WU#F|;17xodɒ|^x#<6M6swuh46x㱱{lV###kf+xGc6lxxxɒ%hɁDm>y/[[oK=9sf@{l~fM6Yp׿?~u׾+zww>oۉ@Ds}>p3VO?tD\-ZSOUC$I.ӧ-o/ˊ!gW?IӴjM6|$:5xij>O믿Y?k_Ї>j^{o~sҤIo~zYg} g݃nIzZ+k4%-.3T*g|PAyU 4 @h8A\554GQ0PCJ8mw}Uk+3+k?sNӈ'SvVVfVVZSԗe '?w~w~~(BjVj:==u +:y?뻾a{?|ggя~ے3>5vxC{{Ї>%?яٟ3` _x~DW/yKG>>g>/M7ɟ~Yu||a_%J>&0~~~cxnzK{ Oxoooc__yG>RՖsw]|Mzԣ~7~ꯪ3O{ӿ꫾WWB~h`X{۾xd9|rr<ҥKyk[㎾E_Ηtŋg>{/_?ggg}s?]5kFv=sΖ޾Ċcx'ABps!!%S3 TW-jq1U2c[T#o",%F6;)Dľo$"(_ .Ȣ A1E1:RffjY43(,&5U%U# LYSSK 1X9 D ,2g]>N)]|;9tw?{MU??1_>x#b ^ 4u tMzի+ &B/}K/]tw|~Czm=0w]Gn7_RI* o}뭷7o/}ӟ%O{nu/}aw]'''{~˾K6>W=y__>!۾˿]9PZi}…aG=_}w]x;~'o[o ^]p|]wG< oxÓ$U/}{>O _wggQrvvRrH51о??wf[~S?Sx$ Ju]7/x /xm__׼=y;yҥ=i k\;BQO{ڗm<~;7 /_{nf"ٟ1'>GG/7 __K uwIW+q _·mGo;m}#E~țag=7y__{D^*y;qvv<[o)fۋ^j=x'n/._|??}0&=>>:>>/oz<^Wǘn{[_"'=xEg.G>}!//~_'Ȭ񱃶ky%o[2`1GXd2!Xntf(tfՈlUh2.@n'5JqQ52mY}#dc,KVa Y"-Ij ܉QuIj2+TDJܦCVIܠ9?`;BESYO~)V{bWjIAe Fw2#E71&D4NH^L)%q"F>V$10Bqvu]|. ֌[RNOp#,OTD*FU=py9SAϋ4jL&]5k,sTPz*<ё.^#iD~5 ҪrJ=mlm@~֩ELijR{3|[ N?,1-͛&'k^ [plū^n2r-G~GNNNg~STG7>|}C?򑏼/xO-}[>9_?_%_;;>{^v||uݯ꯾onmo}mMJ=WҝۚV;]w{݉Q=B2jOݞZnx?Gg}OlWwJpyˏO}Wi/g2C՗V{gq ?Wiu.UQ̽/ηڝLin}PKzʕ׳-Q6*:E:@N"ǭ.`ÐN*Lп|l4~עQpgED~}cD`%kf~X g-b7^t2x4k85qpQ3vlgGHگ61ƭwcf&tPf8=9tAU} æZ-jIDtdt:X, z|CRr!cr Qb)u‹"umzu͎I`bAf[c˥P`Ju\,ˣ#諆Rmf!цd1B^1j$z}jԩ'UYW )%ռj$&-pECj m5/> c{k(?_JR&8P CU3:@"0J0L\O" jrzWMa )@0p]7N;{x %ݏCYg,TpςCnАH G92(c5 d*VHeAbr Dx87m d d!q}-=xL*l!꺎˃ԇ$6;G-0ySSeS jy"gzM"FN gmHb9L~?Y a b*ʸ'Ou_׾67ΗP2 qY??ﹿ_ş?qo;>ͣ??;^=xM7OOCO|׻ojOz?s=<)t|rm=я~OOwqS?1~X{pf"6֫bx^mmoy[^ 2,?K}}i'IjgWOOONw7n3q-֎XZecۍ#1ECk:&|{ږ;=fC:.\lqCٮ j{FdD$ӣʛXi3Y"nxl=qLNdRTUupªp~yLf5*1,"bgfJ rO}P\ Ҡ ¶Z]uB`fE"㐢rtЉ7 CјNNNM[D `|4S3˖2`f,k]'1SB$ 0 @LRJl0 !MD/m ( i8:ZB4 ] [W^HW'A6Z,םH_qhJYP9T&G9]?z_1[[ڕ5>gIIBqdͺmQ{!mlaowϻw(*hj NˉʞWܵܜ{5&e;vslOvn]e"l#-#C@Ӿ@U9Ag>3GpȽ}wxh19U+A+_c玆gz_}x ^g?U׾v 7'ϸ5yw4p7z'}'|r~f2gggŋ(']6lv_ZvG7lpeKSzraDVO|K$J|zzzʕ_{kg2!tmU^6&lգn-3{4_)Rh1o+RJ0E%e>i/3R9,"8d0s4p~f^=mm217SsG>\߮v]{ZuYz} ݴ¹wIը&fU#NmD iJS_4)e8/co%}W@… '''z8'A|rc !8U=99q.}'}z^,'''x+!"qp_p]cvDgͧP,s:fmgM\., Ƞ %>&DĀg!_nHfuPMZZUs IDAT6ZI}w)0Ud($f|%ߡ _{3E!"a!0ľM8% :HWx1⨉BD,ܺΏ()Z-Ɓrl!"Ę "bˣC5]LX%LJ!bb`w{k1ɞM7vXluϨ|.UOpU#"{S.SWs 4͕rؚɢ M|̴ˉZx8Vtx7v>7,Vx{dVxfam]#oLGp ;;w\|A}ygZsMw3G̗SfԜw</Su)cʆ=~"HVUE.\"!^kUljIg+Z3XrGGGPW\reZ{f(I3˥1fv]w]tɕY=^gpζl\^<%g5-}{Ҍn6lv?3K1(L5v&jAL!D34OQTJL= P2F-S:tK 13ȠLfꞮS-9Dd]T6=Q=-R[eDrO jUx̢)|Lef+6$qJ=9HԱ5r+uw_ F4FȰW{xqT*!o=!W8[MF#4} i"A Zק츅bU5 Aa2T֚9JKN&jFP9& b-2ּEJ-FT\5֋}Wn j4Q*6 OAudi -ɟZGF7㈈=%?P̋ŸAL('( ArV`qZ8f)%oI" 1 0=v؈(HDLD5e8T p*G}#)Ǖ2 kjްROHe,dk⌏ڤa\m{m>!ݘmf~f& :PGbi FV,ҥ4Q`%K%T#k3&#Rιf!L͌F %' qX,ACJ$A0fZ.{ ,p_{lV1fͅ 7.,t}߯"3w]E=OEŨ)BMA)3[R@ˎ&AID(J`2KƊǔ̃SB`HjDuv-Yc?laj,a$]U[->uˣ!nLj0X,PL[ (QBȼ4h @#@y>w$:oP3޽vɫX#[6wruUdlw׽+xӡ}8DeЁ(.N(Ql kt#o]wb\C;Wdw4 L 9=$,'78Os4!q}`H#NGcm[w:6-1)Ucͮƞmfmfm̒{c$(*eN %DSFoFÈd6{ ׈ "J/ 5-rZog%wŨNՈrQ0*˥ppאMBGW1 >H5H #[:wCٸC$D 3c+EV-%Km_t MUVo }"&0(<-RJ R.)ԈHMc)*wc=qQjJ$@R({eG˜JΘ`~oA.A*Dʸ`>c_CL *W@A@xHq(I6iC*`Ѧzۧ G&H1b35L 57*.YKwxԏ s|(Q.|jUy2̓5"}N{x՚έ@K~NшM"S*`PHB5L&n3O'nhκ(MNGP*;NZ:"͌-; 0%6l6l6}nD&$y,%Md`'"YPy#"ebf!NH{r#,졈H*yp׺` 23/Ivi.N_8,BDE9 )%10IM["*dRJ)*1[LCɈ1*B"yi4L1roNUUb" !ZLH1ƨI W"hR)ڂ끎kN#}Du^bʿ@@ z'Ѩ0#+Pz>[}nڰQqSʆ@-4`)-!ar[/`J2B`a擳ӊ\Lكn6QN_ЄP`1<yɜQ e?[#Y#nFhҩ}4messMA=*&S~:N)ϚYd& O\SYT-VrY}76l6lv0+cdbHJ?~c=R0;{Mg y F)J``5~% w_gT8E4Ia1A"|܍d5l "8BPjuDu3YNzQ ;R2@`c1-N=2w[ڌ25P|;'ڬ{;.!!QדD2D4 [Z.ad 6Q"2k &2U,;H1!3$UJCؘԧPwn_},aԠ!-c.lo$Z3"C !\sfATTiQr`yLPH FP3׳ԐFy|^0-9,MRLx#Sl$o8qhZҤG\)Ř`ZLfPWAkēfmfmfMFB ,d)0uf~P ǔn@I, 2KB%jx=ꂋfFd04XwHһ~`h `p4$45l0 idV="t,)},? Ɣ@Z0OAr,!UQ \-`FlI[Xt!aQ뷨-"CF kOsɐ` D5^qQS]qfYC7v8+aRCɈ|sRk<[ZBJ9QeZXv{:r@ %d41@9UȳAZ8ڠ   =#w@ߩ NjbeSnI Kж#f3SQ1$w]emk=ifi`s̚okI=mfmfmHIPpBbBlP#cl%qnDHI9B(@qݓ񐍺^KEc1Ɯ@; r]jd!se!&+z`!36$"fPU03r!HepXQSIUC45*iv% "iN˪F SzߩdRݨ(վ;a : YL 6g I~gQ9dif}$3";9SՖyRPp:) -IpN`D5 /-uݫUI%Hk&W5s ʄq[ODNRG7RN)c>o\;eSw&؇eM.2r-"W`jZ&PkQ~GTpmIp4TR1c1NZ}ԧdǠx"T/GV5% yj2.*i~Ōt6l6lqp"Y(GOtI#*mNEh!DMH$n13SP@ LI3{ HgBDf胀`Ib""b!!qgujDDGG"@$!'~52abKJm1E!tð: !hJ1qG\`D)'1 H2 C!zB]dc6$ f i.*J"}4;0$f>4{)ZTECǎPZA&J' ZA-fH6K!Gg Ɛnl$w }cB/>! Py DcOVPCH̵PQUIKA8N2ז6(|i ][DM0v~]`QݾMP& OFlo4c,pI3eFxJUbrlcS &#W hV=cesL`k0Iz=ч58A!PëoKF{hws⸞KhM<-H gu+rRI(SZjGx' l&Xٰ̿/`LYW+u\"%^k̺}qî>"i&QN ~l6G>hK򤳨|"ۄMZYΊBDE쳉"ȴ#*(y;fۢD|(!%9Hl6l6lWvL LNE; RN%MdLC0!Z RHj1W*15$~PUB 0 G 3xZ !d쀍:"x${.:Μ 1C"yYDRZT5%C ċRT?$FSRbJX0EJrΑ29%ѩ+d%lArF@Lyvh ml<dgh]kxk};5EvCp;JHTooLҦ` [E7kҔP &]cpFivɥnS>3[ut [jBv{>ӦjTn9h`'2j8AҜ S}R͓i;Z9Sd=׎q>;<͡KDڂ&ffpWo)L=kwӝfmfmfx1 42@BDC5&ٜz`d 墸eb3WGd% d0RIKĄ$BRlzWuPw!&R΢xd:f'q9E7UPb4R4UP{3;;; f3mNXbU$ àXx^!ՒBP̬dRb)F3FeUUv@*n -_1ќktTز VpQgQ#U>A&9PݢYjr˻4A7vې5ID{ M=}nj٦z G7F"8s- QSMLsՊtN)ٓv-bo M1omtFGBxܡ8ռq j(Ԧim)n&˒\CMSO6ک#t\Ȩ@56l6l6liv!gX: j6$LoF՟rB_s;""UB&bH[b8Bl< QȲI " f(r S0@؆Q5UQQ:Ab a&| i; LBBH]ct 2gY1%Ĕ!%EUs&RQ.Tq݋QjT;?nn=[ ?q>qUlnuo OPپ#eMޜsRB꫶FP㛽ݨ6hc(9֞=^dրI)JF6&4fEIrM)wN ac۸Ƀ_r IDATk +Ո섥d 3*7@0FThpSrΑ)6l6lۘ(3$"4%X",n(r6O7mczu]_tc+ZJ"8]eRmI%X}0jm4 T`B߸YF6*9նNSH%')CJE1:Fg6?Vf-'e:N,R`H0"7e~Ck /cr.k{ ׆5=P}J6l6l6ۿ/r bqB,{f 1]`q”HL{3"R3NbrL G 935TU]g1K@$b"R3}\"*Dc+).!bqzzX,do'mM) ̝HI"%13.)HbðX,7qD HJ'R"q*,UU LT`*jǷAnJLQjw{׮= %#DZbV0r֒{ Rgu>KkD&'p&aVSiDʅ8.Ժ#1n tj S3T0B@qK` #͒ 4 $lm3(VLIG5Iop$`^ZSA/*̀΁AL_R'39aeb8D3y@n)SBJ~[/(ViscS!RFsI%6Lg"A5|.>l.^W3s_.\.2DDca\;tDfn^͵#V};ȭf\ `xfwnbV=NaMX&@} f;\.| %XX^2l6ct--VB S2e:".)h,P$ŊlHӰX,$&@D$G.0qܜ2l*,[V't 3DD!HtH̜RˆLU+X:\q@$D h,d$=7 X4zH̩?Yv+4=[u YҌT3:I)u‹ 0#'gggƒ{\6/Ue`IA!3 (yVW`I䞳#Tbqvv6 4!> !mSi-f6-]E!_8&(G@v? G%+o0W@ST;'1a ߡPE>y{o48 #[\G#E Ujv5w5Ukx]1‡v0Wi 0 -f}ڢhM &h뱽4fV;wэ&dL)(P+n0@7M[%ڌ3#PnLBQq;Zn|E[ەvqu*Nɖˣ˗:f>99 !Vz}g[H:rQ|XbG v]7 f_pw}||> 6l-3@@Tem=:4n +!@,ˏKgج_R^ 쁷s$Ӯ'x1p"Vxs*Q+aj@C8b*:k cތq|,6 bxVA5&1 b_I5R `XBYǃT;}ɖQO1 zvێ|Ѥ4d}߫Z?ĔRRH'%hPDv] j""Ѿ"SbBl QI- 뺮U_ng'nᆻ/@ccL0!0W#KbN) C*D"&Rcoym#C\o#>QAA :%Ir|癇)xHD $ 325ȝX&1^-4 S=䍷'N{ 4R0 Jʩ%*`92ELq&X(wteվsNM)Ed80&ܢu)ĎfIZbZ|D wl>::6ujP4u^:d]}wur<>>f{gZ]pADj:===::Z~]abWd=7H.[SҶ*Zύr,InsV Bњ Шj -Vx0c)M~0L=^q3ygk ;Q*jN묰D#x]R'5᭎@ Qy7BJMui|T`2̔jiEԜŦ(RWyV:`vm6b~o>>>Og<=b[1V+XPeDl\;h%mC)nXz5|:a%P`F&JH7>J=8:$G %g=ĈAX ,m1u|LU``%DJ8" j[^}k䭯sl J0 fD1@U5}1r;%"h2fUՔSkHefa_Adf0P3UDSK1280v\ubV{dz'[%{`#5$I 8@UR cHP3U !` !R`0–-a$[,~={wZg}dUsٻw}z~*5r"b*YU c(+OqDIH"c@ՙIuX9) w; )$D#G9IlfPz:c{_;;uϽ-9zP0־f?tu^<0#s&{4y+Q$h P媗>t`As#K+ەfXmsKHua{ds4L}Z+aJ].޽fZ>pt K.slakgh2Sl2^>{z9aĐ--XwZ_FtS>5y',<I%=ep8̡fvw{L(,\jk.Z/F(ˑi A:=4b{ҥk6n9- 6Y!UmiW>.g;|{(ӌK#Ntktߥ ^@7Ӷ[QC.tMӌfrͦ>;bI7w}y%k:u… bݝ{~N}z2tF9AGvd_P)0}t~m*z-ϳw]qzpyٗBdr@p3pox7'ӺNFja"ĶҔڜFÓNtͭ/ %Y/U꺾#w__b6Cꤳ^$xo`bkyƯE^bJ疷i청ڰqHT)Llرx3&h#& :!)3Ǩ"33Qت)iB^sfnX"&d21b#!KC*Wy T%,D!hd`!%c0X4D3"p jfžރi4袋09'E<-XSl630x2U[!DyMx~Y,p1i:eJw-\jڞfk0d jǵM0_~~OKVxsN+7X4=i0#33&$?x4'(sX0.DOXw˸]Khr{S,;2D1G:9>RЧ`tef4:﷝t!Pȑ;(䷀{@ˣBK2j]ˍIY2"2Nl0d2)˲|tYn#+b4Ix<.nnz3)"7zY!*yFq)`C#;#{RS5τ<7@|lC{_r{Q~GD'Fb>1%v$K_~.M}nzWzQ'y:iҠ BUTRYqjhRNag|}/>K[,,֯.H3D f$ @UDBC^'9Wt*njʑ}</XaYͳ-Q])1^@ fgT;Pf1e1٬vΩ)L ;GI(4eqikc{ r"q Ͱ5ygrOfs.0rNt:p%{!hU+Ρ'qZUU' tvB .nO1&Xxrhu| 5ҭA -󚃥 +npwNi#P]8=,A;=L~'{3?mt1փ e)%&'*4+fw}׏ȏ~G~Otgg}|˷򕯜^}7}SJ~??Q0]i! P"k2CN #$-`3 y8?7謌ڐ'kQ]̮U)n?qww 8ȼFR%w6d e49,^'j<:0fgO :ڤ9?u@ɰ7:?+fu*Ň4NE!S]alǦFeXd.pS1;_vT/⴨qZ݀݇?n$UAenxř\a۽.${a';QcM)tR€8&K]YȒڔbq4UBjuYUk1ȵٱfl\%(؉WU6;qlpfI%!CY^ؙ8#}Yx!ʸRHqP DHC  XM9L&TUXh>YRӼ1JF@JI(;>+˾L )Mg5Ha)͒:GAy_JU9%HY5 z7ef&gmG[`[vҜfd)fdmwi1Lzjv4nL.ӥZ~uqs.kY"X},{ۜs;_7M_~Μ9s̙Ǐ]g?++7pw?d_fVsB9KPq>9u2"r MB"$@)`VAa#R*Χ߻/4K۫@Rtam x~ Oy"uap80"8Ga8ynj4)Qg3+Uq];?;9XyiQdZXZ`,OX=mٺ'/?tW=`\ qGUEEUj[MYIie|qӤ&/Rf͠a4L6ĊŹF0 Fɚ)MXJMtaoM3yݍ3 Q![;Οٟ17Y2d ~}K^}7'N!׻kN;wꫯo}^A3n׿N[뮻8K"IK0˙*Њw6(H lD^1zGǡZ]۟||S @eIf" M;?+["8A=>;Zg@$$jT ̦O>wC!8%Eaw(p!XRRA|. ?ց(VfӵX()dQ ^W"8F&=Ӣ(Pʟ_2ap=FEIu5W/: 0ɚL &c5bK)]o"oo˰E#*jMcB=W5.z2cf8Vc fI %N̎1%I)fJ~]D4(, 1G$`E )gҋšp:ۻ[`GR.%玅ZJ(1ǨUfӽRrJLELS74iʟavd֋YkZڿ?mߥ}w`6W`dwȊ^rbf|"c"9Rk>K5bNlXйOq\ԜU-@naye b#_ZDZa;+EfL9ZH3uI{6SJEQjڟ+/5NETb6}cxx Dx~꯾ۼLU3c2ӟnȾ-Rg*B$D!0%pܼ~1[md(HX8SN%G!*e\ݏxҸC0U \T}F( q 3av8u­a?'͏?J17OS|m=++Z`GTGd1 G1m=sniw~o'l,,o+¼ Qsd"W r%#(":.hw=Zz:a-hwG*t{ƩJP*ڕeRH H@}F ׄb+TUCWo~ސ꭭߸뮻/>w__T5KLgS":Jrdh‘# n%;UEHqRAH,.A(5k l>WO&33J#zĖ⸀9Yơ.\2%ro[_66ΊQz8)R0 95Q+td`cJslz=<3LK_Dݫjÿ~?7k67Sm>m l\L*L,H W $M|!UwN]qy$k Z Yța]5Hd$bff 3f"dyZ&[}f:} ""g7>,"(1C 06o S7!eYfx.b,AcB"u9i+6ۚUHUH)99`Iι f.O+Y-7N)6 pjN-LSe’2$ J1F3 sNn2xW6)@𮾌1Nsqhh&|gxT]+6,$ %K3$Vz^󟙖$͢L&Sf63b+iD<-& d@Sq' f6DDl &U,2!:kmPJ@'YK)U.LgUٶ6 Pp-XazL*1" )CBH66DX!fJi }O6amMJ,*;殖}'@|sBP.n]۔/a/'IɤhZG7r:}Ѝù/ڴ8l+{̋B.wN1Z,ˮK#x-`gvؖ]t}3cFs5ݠ6#da"m}8#kd. @Lˑc=L͋(V`>Q%vY|pe1>g0Fc"MY2BTʲӨ~4?ɓN8qĉ|OWW%33>=yfBp0=KqB@Jԩs|(|qYռGi-a6i*)7o%U3b`L84,\1:7`4LcQ \"*8ز?оVX5бg:D>x"uY<9. bU=#(Q{{x  pZB+ΑZ+:v_}_#_7u}xwp}?+4N.ybȕ:0U<1]04l9x{_}շ~UgoWv܍Ώ ;Ia˕𗣌; fG7%bc ӐR" MYBl$GBNS|gMNYau]$+a缈R"bp3iy1C!YO*VD&)p ́l]{v`ۖ4[dg2TUTDkdENU4p_dt\4v9߹b>*<\ugc@r}Gn8Qöox/gX_B{w+$Fۼw*WPy^tł4G8:6pbp$ pkN8-Oώ%.kr)_[s_/~ĕFpYsHEj]n7L-oK޴j*)iQ,00q׮N,%kDCRۧĆ\f)өe2>*">&4=SWVө&$Qy$o%e3 50vw΍FA\c%Mh.OJ&t)f!M=7 ڪ#|)\i?Ut3"R^s'.SU[5glO[3D+->P  6B\tAMZg8]HѫS½ۜ#[Pl(tژ2˝l^3Б,7j宦8o3TzB ~&7ޘ6sd*m mRjօH C)|%MtBiV-RYDDHY7Ԕl) QZ[0.cJڃZ6tvIU=>LN?wTt:}[:_׾/DTE]>,7#{,moo?9Ϲ'M@ :K4p6±N|٧L%4B0 f0 ciNKX^D6:ƧwF~My|.τF5ŸRW#2 AΝ1 BRu*,KdA`8K:}ȵ*S?=quU^%!Xoe^Ο;M@b-@ A D0Yj ^)Jxkqt5%^ @!ib u0Kd2C?wN nej L@~% I &O_%L}U/=G_` *CԎ}lcs8:/eYg$"s߸. !t>6ZdU#PLR Ș@jբ2Hy+1縒/̴f`ZS $b3*V(;/9"ESäV!TVOVUcf!#_A's"S_s)`N"}9G;\Ck`-R%ɏj4Ɠ c?wBcP4̻dx<43RJUU*@)VR3j9'w`>?N?U랇\hEK͉藿PN׼ouF}x`:{iv9R `!  ޞN{G_ xjQ ]},8&a{G@EЍאoQiE;nֲp"mmn4M6ev47 ˴yYۤ>ѿ\h=87+9n??<82]"/WeGvdd &1Ng**ڿŹ;WERM>zRS6nJjFDsgVEr`_?psSRۤ-Bwԯ86&J$J0 a4',|݇:D_o=sJ!<,㉰i(*(y6HA-*đ&RNB"vO?uOwЪg$E̮0+Ҳguɉ2']NI0, -M s?7~յ@dLyUf X%mz,/@jfFLaYaX.̎9SjG;䭗75#Eېj( 28G:fC |c{ u1Y7ceLB>߬:n˴XLn^JY~Tc0#ʩp6i9)˒*%NZՔ@iݞ}N;G"r7S#ҁ]?|?_x~U\KicB莯+[<'pФ F\%P`>4?:/NYr,}n.7N+*IozA<ËjY󌹦- 6]Jpt-wzt -527milȟ)2C: RKW9޷@^c}tcԏ7ˊm9Ll)LPd9$~^Νt:3^o+:#;DK" DF ʩ_Z!(?ϝtxCxHTI1f #2%˩pFD0㼪`2 u]|sl#wɿپfX@`yȞp+֕d`.Q|B.¬0wo';yt?S*;+7)BS]DCL`^3Ab U7PWI1\잣cW=j'}ͭ/zHY"))>l ݠ9b ARNhKiVpAyIC}g'-Ffsۇc#kK>3+2X"%L A):HJl_$լEJ9%yuusitX"c8o4(jsO5, Mp`PIHffeBhHeךM4XIf0 3RJYsfV5Mgc!:돦dҧ]eE7v32:V[~]bSV_<([cZ,^"w["ݙ{[/%cԥ)ng{i^ˋEÅYC3YN(iBitRV iAAWum IXFBagmU~xzWrK;)9ڄ0HRv2-߻.guȎ .e]QQTKV<}.tGݠ!F?iHP8BF<dafflPbڊ#:T\=j)FQ|:o;3#OfմUMM~bM>"h:yϟ>UnΟ~ߵ(A˄]|ATȉ IDATՌAιBp8@C+kT귿Ϟvz#(`Xh9#|[E7S"VX,H<>qxdƒbkf, {o{֍9+>c)9ai`w.wi/9JD 6cj3)0c!nmSP-bRh-Y$#nU6FnpBbwTaƆ"ff9@GaT pf$`8 r뒗'\oUUcofj9~~T 8 4&nRj% 1^E0EF5K^6CWxCOA@(X]{); iDz%,Z߻"m--J;?d]rj7{FnB"&+Ey'%ÜG:i#M۸/<1{z. O!XDFj\ֲQƶzcB ,^Ht{ec>,hYtYu]e]2h}ydO󚁾d " ) c5O;?TK ;6"L vdDYlj6緖l6("+s*hJJ'~}|猷dpIi\_4d`9VIljoU#7 3/y˹#K,Z"ai`H)՘4oe67m-GgG8MϏ" */h'э`TTSaDT;(ڦZeyH:<֒>DDFEn#G'۽0uqS JZt ?۷nl={𖅫LQ"Ơ-|9\LhyrF )`1Bv'[UQkO@‹w&+&IKlUc n,"d , Dm~mfZ590>Kݕ@8^̜FsldJ덍,2:sʒ|{䜞+"D3 (`dR=~؆ RԦ[S!Yr"1S &6"AU i"r wVDIJaqYSi2a^-ǒdM >C7*c&MR҃|ݵgoUKr'>znntlf8l,YN]F1 W|dsT?>df 6қΔ} ^ul¨x"af&R&H)2rZ3KfI@"l9mEOldD`)AXcUɳc ca&3˨*c1yg٦+bL$BLd:, IL29SR!{1c10#fV9OQA S3dɛ98=i\vKl@U~gstKպ2I I Ah GN˪@>Y{Vؒbt#]^L̒Xxm(:fX(ڬoͪG_:JhAX]n`a黜I{r_>KpU]cQf)Hsn`vN}dGĚK`3j[M'=~vv!\*s0L#Bq$lu i0AIfd&"HFj RH!iDdo:l io"{4n5( j2#lړv5̺ ݖ@Qxbmƍӻp͟5{6?Wk][^ߛx No|zS),B#Ifw8m(ӽz?g'>P&?( +CJrd{O;su[ϸOiYo`ɀEJZœëǞu]w:ƍBռYpT>uCV#㙖jS :#j$̘ P` SnLZgM25S(X &8ZB2L Yb˒OwgUd"G⌍ųb݈) ifr('WJD\`v&.X'홢f`6X5 ,%$5f$eNQԈcPZUC1hJYs$~2!Ȳ3\S<|Kq9b-@#Q!j48d?v /,Lמ<,x9y㫥οPًR* ~ NoS='OYGY3k1>}cvf*ft¢̓SzON#c\]v}}l[z.:ziEMDDa9WeMr,1Ͳ$Ǒk{4OO>7۟|~]سYkhk45b70)KuYЬ V旷3 iN%dXUt4べ ޣ4v{SM?'m׌wRtf7vi" 7^~]XD<3?}Yj֤9+`!+1?DyחqoVI d+z#P]_7 _&'_~wv7"!Q\aےMDι(3vĘhr'r/0!9NUnNɍ)/.e/˨fHD)jnJk3"h, d &FS5䈌RJdJQ4YAeJ1;Dcfƨ!cf&jL)9"zcMR#fUH$1P% u:Ĩ R26Ng̠!6alوHx7`چuhHoD,V|/]O "' .ic%^fΘ 9 >!{XVn2G +.{kX1u[bHh6H+@yN 40q~8k634샞/hd֨;G(QAԅZr1^SD#ZQ7GB[ntcEDlF!hYH- 7;jY#dzE.^KftEq&gw.8#t$= mhhJE/w(t~6&/޺?= zil;MU W7?Y~pmye7Hf"ozZwXJU,ǫM lmucδ~8+/AH[ EXl$vɯ|ж1u$9Ipb(Bo˝2cAVfLi@ $;ͣ0$0 Dblr $ qcPa*qz3ml-1161BiJ =XƼ7So-KvmwgggCJrL}<^6Dj"YT!m<&IX"z ,!HQ<~|zѣ[|uo01͝M i6$KpNߝ9"fz8|a,N"xq`UuN`Ea ycsp09U/Mr%x^<]g;2i<7ϞxjT^; ۱#rZQԏ/` 4GRKf kUm9AjqƦ2E׹^r\\ꝯn@]DŽˮEݶ ^Њl[`77|y m:??^?Zۯ|k$D2.sI'(d݋8MD%/p`fS{'1q N?~7x8./ħ|-8Z;mlܚOV'owR;1FU%o;wNt<nC!\3 Dh^l=c-=YONѥc/TZՠV?yo'|˷nbZj?Xwh vg_,D !dr4"̝HT jvc|o3ʸ ENe"vm/=VgCOg4k2&<๛Jq'~TN?$ ^5z]KbT$~/QYךZf']e&!!'.lq+;H'u)"R:UHf *mҧ9QM fs*'yu ^SOvޣ>|M !;;M$"s^mBĦw8 8܂Pjⵛ_㭻yx9Hؽf҆/q`_ސ[H9AiADD @'&wFO4W ! ݒwh&1ȁ:,;ReםED53% ۴ ]6H/b)Bqe:HwBM"du^l:p) ÐB`RsmE$4 e;BF7᜼g"\yµ$>~.^^nSkdNʗz0}Gq'wϒPWN:сY}&7L;t#7op!}LP>vqQBjj8 A&$_GsHإPe{!q)D]/zOj@(t(kx"`V4Ng9W6h:U7.\;5( DdJQ!i=̧^۵}-| &m4i_?xT_hNȐn0##p€wQ'¦*b ѬsD0ւ| U~eİGAR.gd,,E7lV;?~.?u3}CJkw6` MW E$t&Bz<ˌж9}^7.tX}oi i,?l;4bщ;Nsξ*^ ݿcP% / sO=E6pFo;[o֔A vumjš&as."z4{D0x_B~/8ȋ)CP*ۓ `bH a b\DE*:T"b(9~dJ'PޣT\pJ3ܳ 6 ftǨfE0#͆ )9hciP Untkۥ[{˥#lL5$cM21󔒥퐌i#r5 1%LB1cwLee! 7T+=+c= AY7M^hmn, }o\7_ǿ~m&m効-/@|l6Ly=2!RZv}૦pGOݾ6/哅{$$Y}+{QIĥիf5}-E2c~{́S,~FFz ?!tՄ.?=z8ׅj6,A޺?cㅛѭ%eU!KqABIYm2FM5犈3)M:91ݸ-~kwߺհV][VNWx0K"cԨ1t,d,{N{15ϗlǞL=rޚztfP˜n䬙pENF7ጰN='&DDHfm^4rPlp7&KO5-b?iggdW^1N¬ ݘsPSFBfC75^nu @?/{g`tmbZvq~X#_{?l 68KzN h7?Fɩ5醔WABNՅ;sPA%rS* E3_*@QrݥUxY[K+{z?'~jͫ\ɎV?/{3!ܹѰV H:-Kʝ8; i{iWtc)˭ڪIz:hn 4 % tmOQ y..Xw=ņ$MaT /]~>_HK荪XUbCQn}s0mE%D$pE慡͔ڶK n)`Qp(!t3ًiS~ֈA$1[R,); Y;EԲVHaL"1d JD+CA`x$#FBp'GR@hzE IhRJmj *8`!4"MeM!T9p$ an"!pn^!a'ڴ۶14-8fcRU!B.Eƅ:`Szk9Y$pr%eox/j^R ڳÚub\R7Ygl+r^l/KQ&xbB haփSo߲ $ (GƜ+ -¥@6ִ.TU?7H7; vx|r; 'Ӎ:y>V[uON|6Tv,TAX5M.)1(@ f׀W Ew޸}4\*H]jL(ffணWE)ܬ_׹*`D d׼+bӈnwo|Eؼg< !hX0GWjŖ &w@>3dN hs]#}FWf$`y1dUU|ʎWrUJa$A8aF3E= fSOCŽww84a3/LUf(ݻh;X8l6pn6$Bmfkc %-{||b{(\\,jcr=-O#}c\xVpޔ$# ʰ"f6D$v X8׭#BeН$l/HAC)UsdIM%^ZD t5Q-?ychAx$PдRj"F]P|t:7:܃+fZ)1(5%y[h庂R1TBRr)%'(1[n1qOnﴀu-!ݷX'> YR d1)!."gמDsAS.#M8RyOy0Oxo?Fg?>^h V0~ayZ=aZs)([YpsR..#cǭ9Yc 63:==Xm7rsr09]ezr\txnEqiB^J9ӓ\WQvCDb~8ӔkvjdsOmmU&ҡ6Jzg|#3 9'n"4ҙ&]6JHQ pBm~ݻ' Ҁ?=na8(/H)z5՜)|2jlTEge% ڴq\ d%e[7k;bV %_ BD)BpH `tATUH(QIڨ'"yٯzDZ"@[DAh;]ST5T5ƨEI25AHiS ܷ~WM@sCFP8ZJ& YDE$,/4zn&Rʙ,9%XJ9D:YJ Q L"ETfO{k쮷\z%9yx k/˵A@E-P_Nvy1N)UtT1'`ޟ1ؓ.9&u. 35k#8uBZ>0wS+%pi.JNx4At{[R"~o-Or%ePǤ_aU '!*lg9Ҏ+5:R!/lWO~/qsxLSJ>8A5Ŷwwa 7c`0 HNQRtX;Dz+PQ* Fшzrad#t)zK u1~[o{X`vf$BqaZy|Q›#Zc OWDDU?\kIe= w#es΅YJ5cY:E2N`%t+A( VE=l4QU!TkjzFw4M Arɒahc0UH+""1hJTbۊDBi@f6x,C? $ F0:H,2ڶrFtd#U GgbQ±~SyNǟvhݖ1B]3#kpÄhhrq~]D/0}UȽHBF,߹Kw1I{vRJnUm կeݟCD*0b{j3$Rw;#j/E|AkykC S>QIf(Z wTn8yY)t,TNiAs2!#P1]ڀTRgң8ݣ;N:qaܣ~\KiR@`M-sh>VqsbM~o O&@aisa+Q9ݳXHY++CH1N2D& ՛mեƹ %@}8ړaӷß{>_}mTxU\A{B*l<'`Sf1v1ӵF4_PݳAAP^fﳜĴ1UAA2H9P8 !8;EcPR R5>{ BTj$sBb Z!4nѸADV&:}+Z" Qb,*5X"`$ynM͏H!5sJX%ɔ&(RʘK{ s'2:~8IU{.*>Sj2BrnW3t읎}}yM s^+u Oj~+)@g ]B\wpX sDMTdSqw'u~dNڄ^^ OsF[ߧ-77;޼<( >&z9{xݷW 'ɐ2A\"90 jSS0E 130dV~h,_#!7˻v,bKѢT_#.6߻{UNGwY"22 2 *Y^F[CD->ok__6Q=\vֱNi1(uBUL#Ƥ {*F j@H6QY,i: ؉H: &"1cYG&`1w5@zϬmܓ!4JήSv D)JS&w1D!/l\y۶БG/3=B8Kc?_ ?񭈾qmqq1׼э9QnI~_uŌ^:0ztc׸ԯdV\s&tVJ)) ;zf܍]T8@z%"#d{6bM=0% R^ O42?bP /5%72NS9 eA{yL \MiQ~v0%/3fs~~l:BRbq||X,nnf#/ilZ񃅅sq b֛ޝڮ'Ƥ톞E14`D؄n8 Wv~Md\ܑ$5˼dhU!N8Dz8EwtRzE2w#@̥Zd[3fq4vFC/G_}ݿkGf3b*)Wzm/I5݈k`$;Hsi\c3r̔G>! (itZ^d$eB@̗i\N妣RIzvnTUTRJ0M˅RJ 0z-\ ”a/P166m*W@t[`7g-Tc MDDy2wgN* jsT 2;yI=: b"NpFRBb$%YYrrEPq:m|{J;'\huE\vNat͑c[)։%bP[cI7(]rp6>Aj.%hCsA|( F!] ȑ xVPwJ2q⦉"&Qomi:hvݦ i!I3hnD]wF 4с8kP#"8қBUHPPl4j}7MY]uW^Nưp,WB:~X|e|];xBS\pT~z/nv9O >xV, l3v'HOg6n 2]MEՋN% t0,;6sԮWNvY#;4SU3@qüu{T)R85ӑHbfgݵ/ H)7Aell_{W[$Dsѝ~kk֛ml:}b9j: ΨctwI($}d{߲}.:Q6D:A(U9m֭ .jPNVXɽ gG񵤛<7u% \ 4~Eg3*^WvϺ'˘n{&x !}SL geOd"Y p; fH2Զ C!%s ݂ 94ƨ*TqBUM)A!YUdg]0Ml2Ti@E18DFL  <wJ4RDrY\3s mEۭVa;??_.Yc0@Idtv*{obx&Q~2K.q.tbs,d?stdPOĄj0h Xj-pbLHOQ ]'@aLtӒSvSTrԊUk v>-Ki`?zA*88\1Oi.(29bL($K {6?`QZ`aܖ,;g wAN}Q;Ee#gKfjf8j$,bH˝ev[Fy)3N0T& JP+H(x FD@TOqu.Te\#f|UW֦433zGw#˕Fw3ym֧ڄ7~oFW @Me@o s6o["*$h$2穈dor5(mWw7q4$9PӸ,Esp3=g˿EUVZ8 n bkE4i>maQb3,]B=QvpP)Qc쯮C!IAhk(nvƢ{[KYYX.{geڒMY|oM IDAT&@VyYOg}ѧMcqo44 B{Rb$& B/hd窾\6ϗhge> QB!(G1J-':>U;o#ݜ=mPHgotˆ>$Q\="('J !GFQj1> iAdN*zM:jŢ$Oη;wĨP^$B跖5gnAm<Bc (qBPy99Mz' PƳt8y۶fZH>~XDnܸ; /6n0|fHEAT[. U<8uulA:cHH(G2zl~bD ,,"{ ]H'J.rYjt~ąu@?N7d|lPtgFoK΅Й]L؇QtÃCNĴ1jB7d3.'/Fpwfl#Íg㠮]ۋd o ]BHBk aym3p21'4q?WX$W&Itqf(jU#mYlf\nQ4XpG}*BpBAHjŷn7nX3 ʫ\ǰ~8o:l̓OAmu:fY~U˹Ђ:)CZkRKa"}8rǫ[Iw7T4.nԺ\k{A!rm/,#V)y#"#i\.,hbJdY.n6+ڴMSuq@! q' (u*dϱ]C)/BPJ#I Enym D̅Pvy!ЈHhbB!a1([L56:7YryӞoDa^I qS)*^E>* `{g\y 1)*Ŏn½38&j߀T]_D0/pץi>dIMȄ+hg6qq8!d" ո_zsn!*U^ƻs;kU$'<HLϼ &f'Bf|rN;(ݥH1QTxPa_c9C.d  7˂&+$9O}|/vNR㑤9QLNaZ3<>vJЅFLFƗۜFZKP`IYdz"2Jĝc.!"AA~qQ 0͵ɌI!ABB+(!Lߢrd9U$e vx^smNwGas+oNn1l5BBm7zs;}?¡ѡmK}ޝRPq67Miu >ֵ]f#CzW5!"**"fT I0ݒEf^҃Nd&;l:sךYZ20&nl, l0L)WITN Ѭ *3ARA2/7w .y e ݇>%K$B)q03jfmftc4<c*tcx1 ]\vvw/%EEDKI4?Q>B A;4Qp4V!rm95U!?=?yxa; 4q q4ģ7;!zeMN' ▋‚[%C !$5Wvl 'ŅNM'n?v| Oy^8L!]*'PQ=ZN_=ZmPtl:$&1U61=I^?mep8h46Mɂpzr-}'?~k,~kon }k{6X|ɺm[nA~P9_U{~Gۋ)e̼TVKvV;B5b'BJݳ !`b@,f-@ DJg^Ï; )aѳD4՘v%\Ů]}fAcMcBP: l,M2\8M)蓴`}ߛYͿ X,f!ƘˣdhFDGB+QJd^ɝP'Wd'k 8GOq\81de{6.wwq;#.6|iTQbUu'V]}#ҷ0J]젩_bXƕy"|Gyjx1 851A`І]"P݀x1'uCdn(BL0b{Mur'5Pxa  ғybdAA7fݎ >P15u h9=5k> m;)INwg2RfHGn_ݬym6v22ws!X8}iZ/+Aqx9u 6ݒ?}46("rt0*IN:A&YLRj rm;oE~oƇ<']5LۋjL)9t @Ed -!BaKF5Gq is/n*>m<)(h0>:jD{MYI?Dom㯿~cN# ?mЍ#H欷LHV'r<+)˚jQNg0:1 ŠzJComhƆ뒘RDCr!HEp ,SSm 0a4 `T# "6BЦiT'<S=TPB=ͳ 845~5;Cᙸ'&.+*:?po^~nN!;7+PݨѺW3n;(ۡ{s7.-YVT C5>Hcx%ݚGZx>1?±Lx8β`Fs΅L\x?QƾCFrD7QhHuvƞ 2.b^61$׌EvbȌvDX J'(4 GOci}MDh}k= G*6AEI}J?vX}lt$ 3%tqgNĞ5D3bbN 'p6Ó?DJڳr/)ȟ=Kک9, 8 ]%sj u&$_ۆqq-pF-?11Ė 5؞n{O8W"$z8)#*1JN IC嵽LHɥ [?p[cBBfCͷ;o׹ /,ov>Z]#ͯvpFRtkk~O~[~7(>Q>2h\ݟ^-z^$d^|Pߒ{tdRÀ\W7ƘUi|}؎t/MlH^xB$H"%A$"dIDSDBЅNt{T9x?FUZk}ll'{h뜵jU͚s֬9o*DD@Y&hKa&0KSYi)%(pUUE!m&ƘRMRT0Q! ՔsLAm,2)YiVӆHR@fΙ4+1@-EEYz$lkD}6*ju]eV~:ؓU c~PQV>Tlm}nblkCg9r>l*W!NkzQ!q1,V%rHYj,{3nU`:=5$ZOꞁ?"2XhI<&@&PJ@2Lˇ"d"YUڮ*7iS#*THYVɦuQI;fY̴8()CjMUI-$Yl$8u e`;,jLABUH;\ ˞euk%hp ?1)蘾q Ffd_M4Q W胙tR"GsJ1|ı=i&ʽHEw+)RWE=_$+pqƛ&z\CZ69ύ"ۣpB}S ųN&@%phZQ=ݠW͑N+}R@ c @}ˌ[ Іޫ&N11Ȅ8YΑF&q(*BEQt"XDa6 Q Yg2>""*EιM6McF4-rD<H)($Qu^<8q$"OJQGRX.2$!Im<dplԖ3zc.ʃ +9YEΡqH!BUx,NgKn~kvy ia5lżn=UGkӁ8ԡK}rnX; z_u#NDARlX*axul7 & \(kz 1/fC'$jD%Zs@tD:ptCU7v|Ko% Y00Od QvC) 2XWmyg-O̘5F]Tߗi1e:^0:+M6.>|H^÷}A Nº1~e3r ݢK{gH: @u5*xtʪUIRMR >yGǃv{:P#c'U.gG4L'̬}ggf|I}.3y5ԛ,"dFIi 0TKf8DD/e!Ԩ!K%B&asi1 kj%M6/L(w0M9ט mtw 8{&Y^7"b&.u)Oh0 |dd`,=pv sE%kd.щbt +z9~<\_=^AzWv**-~ؑ!{+h<?h_g-2DmE ц`P7LaHq|*\N6F7I27$BqzX, Ԫ uN@*닢`lЌ$A]Ӗ"mA'w0Q6()eRӤVlQ{{{'_tR QVkY49Aa8 bDZX]2wr*Y8G&l@mzfTs>ff箏UhIJ2]n7~*lL3ÔUyt>dvt=]N V"@n4^$}8#جͼ3pidci4:ϓzUV7ݾ8M2y[xlO) d%ۙ-'oIHj@ZGme_8|FGQD̬څCf f ٬ueto3*$ʡiZTb_UՔ4F%6)Pj͂GRs)ǔr.Ř%Hp~DS''4Y+Yc!Ւe,Y)\TI˕6WD8c4Hj :(>4XHkw+$>p FUĠfw@yDvJQ<ӈ; ~=*q8>r~Vmdͷh =e` JE:>uƠ}0š.3, wMYK0t'ʮҷW^Cx7j+M4j3NZfà|9:ERDiw~TX@&^#q>)HDZUZsB, [w:w◘hT.fQ 7T"F4u6&g5U%v K`mdm7EJ Z]YU JP Mk͜ϿN -u*AffQuS8،zc7yPd&Bn8:9[L02.XY'תbC9Uq2#֜4Lƣeֱ=)f9A)kFR$+#\4;S"?H|NkO-/2T>ȅJtsټ鍬:)|g[*09͊6{5̔` _\Ói9cjZE l`%'Y3j*a9oN4gw3{.ɁZ;3R ̤MPEF`GB 9?( L&fĹBKf3"0 )S;e=( "sZ)ڼ0==}|Bxa1pj$[GZâQ6r ԇU@À]O֞G:mѥOLwzxt! IDATxU: )IXn@"RW۞ztc2@s5,zJ'a` RE K*]}mQ Z0D\AFu_JJ>W@!'Gu!$ ?(]vλz9џkx7D[UtcE;cSE됤Q0vfZQUfBt$c\H -+:\l{wh,Omot]yt=1g@9N{rF}ATZVVǢj|) Kg^tSymf Qo1r WVzB0vAw +1&D&mZ8?2AY(Mk/ב[HuS_l'>YNoھnR5bY dYs=\ZvLxZ;ʱ!ËO~~wpF,4k04XS7{ߩ=n9N|x47B,zcIJPf$HUpkXp۞j]Fw}.̪mr sRSbϘBJ H2#Ϲst'4Cڥt$R5ƨDĔ:ܸ\Eyh`,GE!BbȪ3Rf3sVcgB2iPJ@Eo BrRJ1F]yWE 5-zp8Z3dv˶r(&pex^O|hm~i?,.0d/<|ß*MP9rWD7COX]jSp= jJn:uvntvkWgn1,s3Y0rZ~5 cX#jr־]z@>v ;Wk@"_;$Fݥ깔Q]B G r ـcki̦C,i0'iPT@bl _*D6vG'yk\" L0Ʉ,hU9FeeA S$'qٲ I5ouo/FL 2DwEr4–A c  viOKꑒd2ihLCllӗb=<خ–Io"/щ<<ƹXRѬ[3/>em9+)g3)e14e)FSaH3MsBnOs*5х(%_P ch\Sc{s~_Kȡ5YrɁBbT15qw5s'V$tf2f&,r3RJB!d v^LU`0fdRcRLeY|i dSnH3 ;?@U{4q rvgIUc#͒A3j>`c/jn:#ʙyY:u O]= ~q?82{\q\>Nt+g=UGOD֭0|KlGz P@-+v$X3{m :`^}`5[zhAΫRlLkDR#=0iWrb88ʱUW{sۺuEƽ͢bo\n9]8Zfkooz(1]oڐ8xLrsx/$0z[ӍA ;jlw k#?40 !_?i'O|k^swWU^eFb<5*Es2iVuCe"c6̄(Z!v}TZkU,+)L P-UCS{ݷbJXX΢`Ƙ)M1mY33tw(27ߝu#: 1'g#r4VOadc7LMeEQCOgqNaAlb)RԩD!QQ/go=˛Mʻr,i*ylF((դX؞VLDaib2!,`IS 88e ui;8ڣT3^1=NdYj)s&n LɀY LDEl1 SZQ}ifUaQ3 &% C& l Юn:WC\,,hdf9xul>+ϢB!,{{eY|݁^Կ 'X9a\ȹ,(ZVT,hp@w#J`+v0&wt"Ctr~'dw -]u -gz(.JbmDɊp)9!cg\d-ź14[ڒ/ѱ6Vh[˖2Pz2"YheGF{9fAIN^^1k#-\O]Av5%.w ]#FAemK}kXbdڈB}H߱ԥ Cdz.1bt8}Qj[5 2N9)M"%K$c]QڜٟmJ)PE4)i'_k>*!qċ}{__Cvssy{ޛ;SOVE5MCu]WU?^ߦicN Q X.霳ufLY6U !x by}MUq2Y7s B!u«}?yXi2PC=m2a :&(7I`Y m53SR'e"s΄s[dkKKCA 5 DE62C2Vt!YcPO!#6Ľ;?$=8q,h["Wcb|r|Y< iŀ"BBnnlƤbL!@YwȧWݽ}=lF&8LB\+H-L=64M#kp|N=|"R @ICu ^;m~F67.agҢQ\l=s{]I,X\=4&5VOE KBGTFgfmt5fʷGxs53᪟.SAd !8IrLS6mb* @X")yfbRT & P[ "P!"SQF4\ڌʲ^$u=q7(iUGB#UU-Z9H8ԉH\LLHԖ1(B! dT#dLkPYN:+g[,T'TPb!1nlmP" TQU, e"Yιx [(6OC1)X_t.p  FdQFIpC'DmMDXG<610O 5|< cv GBKk^mch4:<@OG[ڏmIow/׬tP@FKPOjy ;-]Vd0:j}{Exs:ӆ}nf bf23@lԏA FMuZ^aǏEJrMr.X,_EUw\eY:^c?c)ɟK_Ҭr677y/xnw{yի^/1u%Uz2=l69F#>ؘd6UUU/x<&W`</_}圳al?,l`ssswwG}7xlmm9 @D\=+a!:sF㵣sBz*%¸_PZ {9渠B=TYmHI<4#w[e(<'}(Lƞ LvPVuqJ\ WY8YB~ofdS%#30859xpa>siW/~_]~<3sN7%_=?I >N*H P"`FS'6_³gϜܙ\^E]_Wn;7a/]~૗smMmr8tDii.Z3y[?{x M2mŏ1^j?P[ԣ w@uꞇ"P ZD7͖>]KV4(r=U#dD*sXÁ5PN[̐bo=)u,is\u]x\ti2TUu(~x2,KYUU">N' MSWr^WUUU>p՘B_xzFųE=(i JEkCDšinPp1[7,+ȃ*M|ƈsfy㴻UۘВZ&0qChtyokq(oJFO2fє}".KEs~[m_/>_>{\ƥG!,}ql]x.۳f${[_~^zΉ18D;$g봇ܼNٻ8 ~Υ+bϗeYhn.<ޛ.Y5F9yss`T7iCo_JD\7|y6>LaF9S1 ¤D")q#k ǚ't(AOX9;t't8;Ph?-=5؈]VA =У4C/6GoU`yڟ%ξ;mR -zUxHOXDP6ڣCU2̒6Ab-ZAD7e{TBȖdKV@U2ظvdy\>VJr~uikuxl-.tnHCvIc/"[ΰu)uH:5卣 BXk>=wS9̬kwEoykkk4Qxxɓ'=d:=o|cQGө~K_z{o~~jkf>u}?}k{{u G}~ᇉh2x_я~4 ox߼o}_W7}}lkk+O|mo{k_7Ї4MC5G>?ïd2?7yX|׻U%3/^׽ux;z衫c\W T%h!HEhnبhb1%HɌ%R"m?[=%e6cs[9)&+Ϲe1dB3TI d C# _|aLf̖YH#4FHMH@*d?[hVy?'bDNk l6t>73zkbrt(Ti#TM/$ 1AiSnB93qIFE^\3g,n;u뵛'Bfן*^s5{;،>pQCy҄ }uZR֦ 'o( l=węP3jc4F(Ky,YI~X$*7Mvi`0(1# 69qU7?P}-kr=|nobnxRV~趫t7yΩk'&U  ]yɖ -o@nS)O  g!1}Bڄ6c)q^",ӂ@7QNS}~4ް1{!^g]{ĥ~9P6f$؞ą 0 P幩f1iщ:N.n|˝<ݙlSz%e5 UTłFqgżg)Z?EѥƜCacKE9^,S7_}hͩQ.hڐF'Y/0HȰܸz}v3@Z?zNJ+:I8oݍ6bLCnt&F5RFVNl qY֟@:kZ?0v&޾!kgCе2Ft[3zk m.~ -6;zv\9$Bq+o9->öiD䘴Cp-/:ubcccX:ur\"TRjP7Ms-/tMU,n]wO};W9(<=Y,fO>ṣ>yU{~ԧ>GG*?~{{eM[nqs5MX,өb1͘~K^W;xB|lKDP Fe,`B.4fa9Z$5-f@v,g%5S3USғ&BGoy UL VK4E*^t\\ic$&jiy(Ƨf3Ozp=iBx\ YCğfRAԲe"2FZ#V"7E)ٌ4lLNNEW8oFVYnD3͍@5,,cޜSC|Ngrshv1j$ۛlIe3nynvS*b!Ol~j+ғ^֝u F$.sW9O&MNɳ3YJĞی25Ҭ 2"msOBJd)USXĬ@ ^p%$)踪 !:B)r)C'7\@`̍TӮ]'YGW$3g|NRcL9Q.gjVudRJ9wE4V`ba5tcoppο83۶={o_Z;Qe"]͋1Ղ:EOp8 5戟+0 eK;QW[V보!$+-2BX! `u֌ äCcYڠV+PTRK #ꡤrujbVeWџ,J=G{t/|m5ʦir J˂zOڪ%;;;.f6<ȡ撟^h4h4_e/{t:<7?F=JjuDuV TRJ^5Aw ,K2Nh6x㍞%h4^o??~S{o֟(T,Su o'/zD"9b`wqxΔVLBP^CL7o<397^|Njf!JQbaF pQ52S*|Zk6Z=&G Ư܌5 E'[x4.21~s$LU xd5Χ!F˵[`QxR38F4j, B,n ).PV|Qʑ"ϛy(bMPL҉?Nf:GBv.6ʭ3r[S+˟{?tsn+n>}/N=:zŭvMxs>[v[o-]Ҽ3}pB{ڔ|s١hSRhyWUU!uԅUY᜔5dL`x4yU#%Ь .̕&ĜMb!DDkrTAf-fYw-ľo̹<=QUTم˦\/Z8D$XHHС,ZVh !E D@ZXD4" AbSqWݺsk9ȏ1k}nݪu=Gչ{=לs͵7RDJh(;N$pi*1 ^}Ͳ "Z:h @G2 fzD3B%qٸdޥiD=q&^?2pw,/{6rVO[8D!B4n-4A8 藿 cA JȔ} eC4LbeeVD4 Mm n74LgS۶R*IE;Vd&L~R+NL&l@=3ܗzLE"0 BÌ] j1g)͖JO|Qם)lR=!Sf(5S:{8?>%2Tp^dgV+ ւ i.C 3[bEptiنMB̡8?(&ِ3Q'iUF 6rbp~h6]骸oݖRljHUUGSJ\O?g}Mozmo=GoܸGGĐO?4O}S.oKYRnSn)+iԴ|/y?_zUz^KXt+xs=}{~>O<./~,`4( w?]}o.vþٍe5=]{Bj% LLjhfɜFu2R.3.MC߻@] b54Lz36j6d5f#n9_dD@xlqMjO/[Օseu}xel *|o>bR+*n 7׵!$+q[xpŪ1Jh"36{$C*THckt JrF#.a_u?yySu/?Z4RPnȋ**nE P$3"RGS]f0S  B M3,PP*J4k$1T5RUP:LR4 ̚BeC`rIԠ !ZI.5{{{&י봩VY*jM\ D"v)&`U5rIc Y֬(!dP *uYS vQYWvH]pi5T1%J,hUmz鰆b)$sSRo_d)NAɶ@23˳T⑝aOH( %n9ҧŔuj_I)!papa[u^+!VBqMGTL'gaa"Wrn[ڢfK~{c83JMf"@7zi8-fӪSՑrnv{k)6=/g1Сf1.LcW9O=oMK.ږx馶i-͗z~su]-}%mkf2 Eg}g?μ??i뻾w~w>||OUU ַT}{ooO}ݼy7~7w|w\v_uW -.]Jsյu)!Ǐ[3}7|Ï菺NU4w^!8<<|G~ͣGyz|-rr:߫r]6?:B WOtU,*"q#-6AcOkK̹z3:tMw:LS~óA"S5@T]ăF n/ZDm5B<#NZ⳷N~+.[ZZ ^hp *4Bh.J>Ȣ_/>asi:RDCxrM[Jm {,iHqu?KWV絻y?GC7'P e]{Zbw3gg?ϳ;|_'[_{/|vOjO{+޽uCʙxm`(O: "VTӜv@/U)w剬9wi RTAaW]VHX,ڦ61F %^?a$QrF)5 ư;t.9 #el @_:HD@AB &jJ)"! 2 A3]񉔔PH%6rV|umfF$H5]&uuPv'`>pW^f'fVX{w=fjqhv&B2(yjL/c#dd>'L>w9bfd`{f3ą=PaNme=dDґ"V70l/xBuR%b(lR2ԓy5SJƑyA!=IJ7Ըnw2l'ӟυEgvN?Ϩގ==|W^w]??3{Iڏ|#G?Ї>ub~/>!U}{?ËBU?OO<#??nݺutt䲦fBЎh8 SoD=yϏcG?zڵ}(jTi_/r|c>؏뷼-??s)5h^Uբ{n?|t)XC'*r дM: Ġ 1椸MN(ݤ奃Ǘ ke̬< -4fM4la}s#X/Ԁd t-TuǛ'WGSֈ3?v= R3[kzW\H8`WEx#FH4J05c{[~C,BSmĖ[Fo}]7;d/VUoj^W,۴لӪZ"d)_kqy&m4gw.*T}^hcΙLNYƯP% R}eYKU `BLӬ*:(ueB`T1(E }6deCqLԜN3LB!kR0N5*!1f`Xzgs몊BzT@B"=>dmg;49w=#7;q/& 3¬HϷq7`Ya `5TA2%S|tLjHduQ*\zUU;Te&l?3UDQ ʱI #36KW :^w~>a|\uhpZ\K|  u"v),uIWpVx3Ym`_YU"Mn{+HQfٟzDžq z>گ]vG?َý.|ӺrYm[/84M\.]ȃsI!ަW{qޞaf C.iyWoRU۷˥\ԏtDC^YyfFSlp6խߏ=#|`r\ƪn:2vJ};(%II IDATf)[;>].o|UTˀ3jTf05f̲z.3yzyI!! ̍2&?OCԆFo q7lʶS[&^̩#"Tmyh8ljǾvSΝB۪F:O2.Ìm*/ w'W_9yҩƓgbv^WjX6dmu۶5Uеvl͗q^?yzbR,/-}0:9_>Sz-Db4SM&֦: ;7b NӍ{Irvhc.WdI"a;l_&1x@GX UN .%RU+4i2EVm;)T1.jsn+kL XbEBfLAU=i8ء$ ATU5QiVEʪ0cF(iP*ZˀnvPJ{ɚ,[V@jaD4AB A`Hc0E_Nq (DI*eP 09 .`f`jT-0L)"X" ޤ>".m&'е)w pkmx%|zzN/"+,Ԓi2y&(n(Zߪ1|6i'P[[_ N-hc+Enݘ=ۚsZ3ЍR'F!C:+RNy#*G_Qt0INƈ# UW>Lȗ ;Wh@7g ASatm>`{iN ZY;.pu|){gE1e] OЍ397}-|yLk`7|nE??_1^ձfSU;'gŠzmOip^ߎ/sڶu֭[.]ju1\3 o=OSJ!F-f"[x!,;w8eX :XyO.n5]m?ڛ/l>?}E:S-iڬ$ErLk85'pOL]CuV<]4oy[R7Z]6I:AJ4=v/seو14Xn'zt&˼@u۰z!ْvLb8HJ2|g6rD-:3f9~Qua1'C4j&V@UJn]*Rsʥk.]>h֧ΑNoV6߾sGipz||Z|+| 01iRӶ]NAu\֥jy#i+!):ME/ŕCK)bͺnù  \pvm )ν$%/f/T51cA+2xPԤH#pJ@h`47SI$jNLB`241mB߰(:}`;w<׃ƺ^8 r̃F]C7ȅ_.]Sfk8hlel R;!j,RC EG7&YU7rv}~_ N,2DSl'\Az*j.h;wRj=:xZʶ'=z(IEE LŌA0p 0EX9xv(CٲS)Rer6:S.LD J)!̝f<)O@E7k1F_Ky̳mM$e~ ѵƴ:=fV}۷u/l?\}y8%T\MxU/l61ƽf֭ŢP༲'Cy\^|^fvʕ'Vb׮]?tt4uh4ͥKuU]˷nݪF;w2KG[Vzj=~n}, '}-,jaI6vhجEp}jG ztT5ijȵ]ol0G{34ZןuU0K8Cg9r*g t1VuěOV'M8=TMtZ/o˵f .K@E/.`43Q*OYTe˖RJ?hf$; dx5fiF6%4m1TD&#YgpzRYPմX"AmM:ԭ+a+e$+0ePgB!#hM`&~XR y996E t38@BXX)%%ul'B̰srADv"'bY-dK`L6TbQiC1x* rpGZE!uh;K}GJ iU  Dk#W5X)0 W= 2EI0HzZǚ_1ݎj΁P=h0՜R\}ϷGvS$8\S=z̾|`̱ٿY&vv!ϰy{%T3egCZ'}g ,Ѫ9s@gk3&`Vc l!a;;\-s(9T v9;x]Q p"Ӥ3/xrʙQܫMN 19d8GxY03jEo6|#'˯ܾ}vooy^k/ڶmx\v]\hYDl,!Г\1Trx.CIPYNOO-]<;=EROy:&pPUwG^_}{W MӆOV#=ճ$tCU/UϝzorT]gEԊ`]3򐱂^ͣDYn2YUDQwkUW]|caHfX- )\ 29FЁj.px y6fCk)eSƪGb^%Kh&4@i.i]2lEIeߑ8ȅ:ܹuY99].6߮Jb|=884[9:أ;U*+~Pma9k9===9#V} e ݯUUH25"c03]e1TU0@AAViM@NjU" Q U DPFA$IJ^ "Fx@R T!0pKJzQ on(B"gڶM)՛F$HI]@49;]#ܶ0eW+?[]My€RuՄ1lw٣ŭnN _s@Dk12j1dF4s!!?(}ZϏDAs. f.x)D@"Y"|ey3BzV+;ctCeH|29d>$%# @ށ>Odzp?WJxpp.pA]CI>CٟL#< 圵t?pQ2g)?fK`Xp3tI?c2!8f|BM 7ZQM2n.󐔋YySJ1.5Cm@ܽ*Z88$<U5;cq@CA:8CDX?~Pvgd2(lL :34y>W4thjv>W{?y$%r!)d %ꔻκTf~0=_rU DV1C:H#eΞ2ք%Nr7cmBz5tYrO<_>}?zvTuO'F9 PZ3s&eYsZAC 9ljZQ/{DHa@ʠo^>aFRʈjZkK0J*4'B| PMJV]^<Ɉu Z#|"S"4UR:`xpjZIu@ !PPU""f nɚ,QKm~yk"jfft(j;wf~" [-&jj"n[E겈"2=$@Ɣ:: wQDⒽef$)j2r2FZ*H0,7 *:]%0 (ɲ*?^l’f^:=qCDT;!j!)|b SU#ML( MZy'2xeِwn\V!)iU5(@ATŠ!T5kluhL鞉6f36l8kŷK f*  c]b׻ҭ.t;8  vԃ3߈qpHQBLoeF1$tLTEomG ,_)=; G 0zC'8=,Ṫ%333`#0^GL8rt~'9K?}ݒ4˓.('̣3Ԧ)&{A 8,K~W~ß='_9_^ک$$R4w7qB&ؗ]߿e 86 m K?SںK})C3JzM>?xbҵ+K S)A#r&`saf* 4}9 @EJk#iȆ}G8yo:rN)gVJ[v'+eK9B5U骪zEBpʆ6T3#8*B`^EL 10\y0}^}_42 nom?HJ02fE^3)t}DU9*MRI͡8ā z<$$au{2,Ld׾qntai~>ڴFbޔu8zDsL,B33%{>G)vaZ_$`Q7=z޹0>ws/lNEN6ys^.Nf^uC6L5bWv /kxi0LO@ q[6GŞGA ]k,G؞SE^2isx?y.1Kȃr)79mXX(T˽$r M2OH3HtA!f|v瞾<3iבߏArǢ^*jzr )J{wSa^,Aa@J(Bdx4zTP Q1奷13PŴ|$CBD"D 5E0HTIZ (4s#h {YO8!x/UJF)谺{RdD QȯQ~QT;b8ppqsh,8-Vͬ)e>yFEp@δ5u`;~iFFϤəUJ˩sㄟY;qraܑx2C7veW??c8Ʌ]iqc' Ue^wzpxح޸z׾Ͷ?lOS7xo\-j8XZqZ"BKm2޷Sc-&F`v/u/*(^{3PbzyV6lB"4 .È[>N/Q5&+b<f&͚ ErF#N7QMYM\Y@rL@i~g<Ti!֗w-)%#б n&ΐbJzwfdUQSGWspP5HD d("Juģgo )6w)ef"1%fO=@ӵqfٿ~52n\Q0 0SOmYV!pڷ3 [2U^ [ȁD1ыȤ?yYq ?br"э3'3 ݘN ό=d)1=r:cʣ^ɹ]N4K݇m1[9sa5n$ r<Dc!F`ڊt&Č4  'tĄ}k 㫭cѬ_'rW@/w!`+ÚZa\t€;%DxVkM%2h03ad93RUdmiC^3 MHOt @Q^(1R̂s*P @l@ C "ʈ!WhFS.LSgIb("Мsc+%Qi5D%(9dMB ɤj"JҐd@dI{]`/+bv)Y]sbdkBf̚{P I 2q϶tP#FBϳe_ 6mnahM1YPE #]"@<ɼػ'VH 3ʝ; [L8:-e AOK:Ckbqck6ȝ`nHL~­r8=NǮ5cEIՈmtcyf2gKz3om;mggq..족G|՛ϝMWy閍MZ&S"o!0sX̐UMI"UzhZF9mO\[>\],3׼_Lا#UUSOS!=0چCd<&=o[޼>t_{J` ȇOŰ,A.^%՟={{T;t j!`gפ]MZ2%b|3}:h{ڄKc5gSl:0!a3d35)j< C!h6MYH C`TUAR%żj;mG2uXL4t5S0R8 iXؠ!"b=E#&<(05uh ! f (4<Dҡ"&HPj rjtM!L{@[.唣ErtlBȑqg#-U82Evv&6@'ssN<-Fl"![SQ2bt,&6*0K H` VY! a۱i&is;2vLۏ}HDMpdPz8SmTS!z HL3_QLtWfЍ]|m3n˝hv..~a4ׅ?s/>YI85r:&CH @OcfpPaʔ3(5흮___Z>8j,*@@B("(bY;5j0ND)'4ʛfR`k<yJq b ӠҠb@4#4PQJ6d $ftRe%M셷(Pn`!. I- cQe AOu:LEͬؗaglg[Ygwa<{mpzu{R@Y4эbϽ̊ƞ:JB QeE̅ :*S<67q9> &eP)(ٛtK }3S旦vH{j)Ya^l -uOj+rv,Ӆ9ӯ^ W׃^+NϷ" gbںͶo`yݳ 8GL..5n;]$w&ǻ?):7/.5 Xscxm9)%ђn q:qV~Oû8Zu^]#=LTKV}ɿ_}2+6ATX|Z;P^oM^f><'a@q/ p ưк&+Q/lL9uХ`rҍ0v]neZTw>:U@V'r0_6<'?ɩ @3hQ,V3`ȖSJvTUsU9'' i+t `:+W4 1BZ[DԖaTW@"`H9g֪֜U{sI{=ΨSjjoM"̐[L5,䣴"0fAU(&Q:Ii0 !Z@7ލ uL a \Γ<1 [YE BG؂X!aJ`0!DC"Ө(bX$` spf!⏄!zL[N!*el71RN1؀GW.ѯ8G )0V(kϢP *%ҐmyQި@|b>RIfGDf,Q1p7Vk2$tC>nT`YaR9)@j=C$шxBT|dGPŗ.KlSDS@ خDPQ%tOcўgh#Ƣq@͉9v{KVO<:zngvYTZ8gu)< Ya`AjjJ%ݱsiOCsGf[2/I8WPRa}|!iUf5.lXsD{rfm@k2st:u;VyN}9he$@Dݡ-[-!dd9MGiڽgf=Z#3si&ώ˚\ڤ{[PՒ!3:$*gl?c;ՓzU~[Es=[aKDhT.)dp >";"rJ"R. d$Iy+)&bB #PT#T!q̪2SraALv{DyxYD,z=x@,$$Hb@rI% X#$.; tA3f`Hf0rdIl`+G5PX@, 1X`"m~6cgыxw2>zMԉ77q\.]ir (Ot^bD@q3A )ct1D9`Zȟ"JL[JEz7'ƂW")\[K9Ö>z )iKM(k:} B]1Ae b ]K}^5mm P@  JDV!hcQеB@=}B̈@?(Lo"ų]܉E5%ƯIo2 dD4S7lbcOgL-@fQ,8b(M]f*9v;l*'n+z 9QVc~ύN;f9WJ@l+\ n7#捙#;$sG0@r Eں̑^8.<TFҮf.I2=ӍY֪y:Sb:z-N%YknGFpٳ5>\'ΐ\O2+ 2f>"D$bAX\sP  "ﺈe0[k)IU!"ֲ1Q3X V IS"s`5I@0x%@@DPT4H7ոXB N &AE/Ar"2V``",H68ZL JbQp'S@#b-A 23ˠ9"'/. jLYKnLC!Qր6/8WDr ({*vaT&IInx΅^|ň;Bc1Kp<& -[d2A%, n\mC7ge@cNl #:@MH6 A{<2"TNQ x]Hҡ)bIzg!${[s so%JFu4}O2bl3@"'(Vݮ:gdxjkC"€Xkml][[Db 9]3266:}Xv"̡nf¨U8lhMJBƄdbs`Nz,@?MJBޚ6T9mt:TBK`7p6ؑbڼA `5`RetZʵhզns8#i&!&L5(! &IjjCPfyc=mz'n bX|DX4ΣAwsYE|A 4 тCcV10V\rdApa$xu[3 "HxϜ`ЛQ YglAHD4$9Y$Ĉh Kl<`_,KEJˁbVBfNE|< X^QA;:(a3эIj՟9NڻS5`rRR1хz|<\ӢtN7gb-?t953G"\NV꽾R5O=^uTR팄~X6{Zpi"onBO56#j-L@%K bMZ._x2D01ef2 d@(ozud{}f׊0[G"  $<+3MΛIk V!$45 WLԓjlFf9 $ F,ڼn !" d I"RJb*̐ UpKW6tNL ,fyj&*CbZkQ,Qj4M R`ȇ(60:'!"%a6bJb%N @a3kh檜[k4*u+XkEV(B"YQDِ2LX,WGfoݭw6g\ $@ v D dqo}˺&Er hF%Y R+ڌY[e$fb5F!<8v oKJ‚VDarj2Kq66Y6L\Tc?J&.mV"$VM]CįHR`Dq'߷aVʄt\$(v< OpqjqdCDF:}lb5Ce-Q@3Ok1""6iE{p 72SXOs*v#=l)yEq|\V X_i'a/ &EFt"cػ؊ߖ Vm@-*@cЩ! ~ߔ>xDnkXkQz(h 3%4M.:"t:v-"Zhi1.1l eY&"qx[ZyRM F5 d[!0u KmR=m CX3p&I R0P0@ZDg[oD@Pl]H/ Ԡ;)0W+jŧSG^:ntoDI]$)ny l$af%FJI%+ȢmBbH08EDDv IDATy'jRWV5¹UHrA-d UaQ@iAbMEQDrrI%05I<ef F b2`h˒10ۜIl&3 bR0W|E[!8 0J."l~7zl-w2k%43$D DF$qJc?QiB4p.ڡ\ :@Uaz{½F&GčzJ:^lp8L!B&)IQw+ƽ6&N~硣HP|ՂaE"6+|0(]m*%.TGċo]< ˈIz->prż8޻z3cbTI{cjOumpAS׳氞gHDD$dYVT:AVPjzn1MS;Xk԰Zy$ QZ5ƴZ-3@^J&@vd[wՋbc #] O"K_E d.+ PG#eN'vQ!`8 YʞO$w,}^ {E zaMcS` "5;0޴A Z!Qn XDsrN?VDm.Ge,`8.BOPplM:7i#"c0:E>)zIEfDiӕ`n Gͣ"ߗ{QOnKCui7\2̵!э+}uW3T8tBaT2c7$!`t#!H/7GTaԹK,S*9[88r]gq!|lCآڑӮ7{d'~ 7@~x" dR GsI` pqm xvFC\RO0rN uϸ#(p +l"WmP"^(-`}p(JnCd@9(JidLT 0A`hxŽWL2Q->I̡g?˰bfukt:jY)`jzI-2퓈̙3'&&*qFGG'&&$Q9st:M&j ={ڵkvR@5ȋU@+}uu$ [$DU/[E;_`8؀=ӊj+hY}I05ȀA DET< T+64!2+J@@Hā2};A JնmP du))w1 j P~=D`a`F`l3adf +(;ƀq;^5{hRbL J_j0dҰkD-e*,>>p*tA'AЍm[p@ S w~b߻D2[W+mP貈"H9zlEu()TB ?GH"s{`R.)"E %m x^B1E&Pd{&Iӛ26$ɲ,MSuWQ6V$IZkTNvJ: {ng a@D"2* O@9E "pH7Q#C*1H f玽5ȸ4ݾܞ\$ GʰHR\9 Y%G xX$%m= PG"eizF,*i0ntU`|Hf+1ø @ ļQh鈻 -PJ 8;(߄(3 10A|{Kp Q,zh#]>Ȕ>&ٳx gI[\>Fy4> hiT#/BFienTh>xiO:<w{j4ēJ ,͡c E-`½bnc瞟'J|<66RM>`}Q9kzꩿo>z衊z@pi!oqc=OOgu… 訚l*Y@2 d [V^@^ ʃ>'N= L`D4DzbY,["2 9OraAQ pQuKց`a <դ!=/e&}3bXJu@F ۅJ"UE  hP10CB>zD$ qW\CĈ& SH^6 )KC\AX15Q^x}1!LCtaFQ= k'P:бSzs ڝft {EUh&H Su.Gr-!LƩIQu};hMy{^b,EYlSB7@.,JFrKDʡn o?$iJw- Ln ;ZMpQX|]8 66[ fD$#(]!m7Q:vakl"R1x1T~."9JB1HT@z #"[be&`+ & UYszm5Xx/VY`cÔzYWmup.,K9QG{eT"m 25cr~^02! #i.y{obijvRkm&vۭh̜9s||{'n./ Bgp8Zj1he4bKJk9jUDq8BY4Uc ʋCK_4nNU繛KӿNGlվI /0.*Jl"5:7|Pnv=Ա}nup>JPϖMyЁHw5/ꍗsLt>.z5̇DDWb-wr"N3IRc X%d09 r@dL.," Y`0*"Dk#1g(FCwrafdQ 6E9瀘2}QuIbV8}DX$ G3X Bk+ ZgCHTbH{Y,[aSD, :&Lڃ9lZG}  %^(DD倍ޯ5DD Ǒ!uүuMoi7(h r5F|iL؁{FB}Da{[r,w"*OPķaO#Q"+n"}Rv倘4pGlSoъu)KTxd' w7ۍ5=\ͥ3f7=9M1z$iH|jnݺoF;^+W*-hR{^:'4;<h4Ƙ뮻SOͲl|||ݺu˗/?O8 .gAħ~Moz?@~N;mҥ^[ՊQ~n /9/FCҨZKDᯔ$ z{K=|22ZJ G4,dcDLT*:pyQƟ2Q j2EG/݋S@aJtK$QiDj/(4%Bguqfr8L%~tKP$XmHk>]JCqolB_ (l$JjMOe2h?oKs73gRXkuݙYfj5Mj|򱱱/.Zz׾5]hį~O|/7tW\sSC dE%¶m`|:fZnBöٰL)AQ vxxXUӰVa3gbx):B5b ϧiD-Jaq.k#Z4.3,йu`?^܉\JKy*Њ^2RIL_zI,i҅c>/R֭[/""gi*u2lo_b/˅ Y?|I ɲ, ?sz]?x?Y]z饺VzWZk>?Zys CCCN'lE + :!Y'f(m92uEZvFYh )R蓮95HdJ`fld>6P\@"R'M6Ф62ijZC?[amDͫARz"1TSe}렇<ޥbju3 ֥X xW A`f`%hly~Oٿ8!L4+8?[gBdÂqCXĂ"삫j2fak8Xdqrs͎@)-By8N(pAL+P1CAdBHQ06ad!D@x_WUJZP8"mȁK25ȎD5T/JL±$X^0H@QJ_Z[AE #^-BIΜ)&M$Xՠuœ 8n#hSk&,E^6(@FF3h&D98TJʿ6!=M *2:PowZwSf@1NaMnRۮrJ KIS/ѥŏ\ENxc 7Zxo?~z e\Ӊh2lE?Z;=~M6mӟTHݏ4M4m4ÍFOꪫWU-{s$YzAEdժUguv͚5G͛7:::>>~z> kRbPl#Y B@acʸƀ[UngjʬC6'DTX5OaJĔzR3Q(S̀fh5! <[/I}tJšRa D*1F81S?PѫZKVEG ^#Dhtߋ(q/[ @Ƥh b vLoUuv~N"Gt bE 0 * /gE-Wpf(E9]n`PRM8$Pa v{K<6ne"Q0)& Y6IM&bUh. "rw~+=?ނO  k1Z$C hjslpԛ!BbQ_A-,b:DPE ςi<nTGhdnA+/!Z BP,3[ IDAT]VD*J\jW_sᬶpZZ{Gu]ra<.:4]~}~ׯ_/"y{⊃:'G?bŊuU*kYnvmuORU緗$F9c0O a#Yf4miwB2D "QBx>VG_?/MY{me>a01%,?h/".Z+ d@02g3XVzKdfkEuuk-8Vl2Pn%bE%gV #OpW !*bШ_z(. #XaP:hX s.K@jJű jwH<;9g.=u 37tF\]YxuuJ}=ߛȼ7YCoob]LVE_-,(߿^|xJ楔}z>ZG 1b#%'\ *?DE@^tC͹Eɬ#;2)\8#ߓL"]]"!AHc`J̣%r?fU A"Ev$r i9'~\zЧJd_ÍXjƖ0"&b&KXoV| Xt=zPV\YV/^p{nI Sov[z?\ݤͦڄO>}ժU OiOZ-ux/~1o޼c=ow/| G֮];}tuxի^jժ{NGy䩧:C,[~АnbO dklY٥^_OӜ9s-[v '9G8VJկNzk^iS^Vgq3_z饪; tFlR3NsG6,j7gV?j4W\qdYkJվ}0ۢ 79j'ٳg/[Z`,MCʕ+/;CI7tMW^ymnok_ܹsl_:35CRɲL}y7 ܎/!?裿կc KA|i+ӈ@gaԷ* Q& B28EK Za8/T;J ,hACD0QXff"3 8? tŨ*@?Ja u.'Y(~ujwX ]p$;km(ErdYnAM#! <D!HFX@OȰ/<QC̬4>KpS@3>fZSW"0%R''& +']ȡgEـB=S` t1Ea/G-)z˽r(Iwo@o+{Ѝ-(^ ՚p^b![{Ats }4Z!G%ssH)MN})$`ŭʥMv"?y/X MӃ:[oj "xir!+W̽H˔bCjz!\q{_rrKhTW7t_`?9s:NEh4~>n::{{dɒG.䒷-K,ѽtJ4/ !ʲlbbO9sqnZ+_<[b >;<[7SN9s>h塌`ɒ%Ӹ{[` = ۃ I'tGv:/>)H |;W]u=0mN .̜e?ٳgZG}/nۧzhJN1oZl)[r+H^o6PVw}$x95W  L6)b A?{#.ql RRPjrrU_}0FCc-I|Il:)L.=Q<ϋ `/?b"[RaDAlo#?F#Yf1;OO'?iK,蝥~z3̙gY:ܹs?#dGqĭުlN_-uY'p%\RTq} tMw;]wݵ.hpe]k}߭h1aU%ZxgοSοf^{o,[v+_ʻN;=?.=3Xhɛ/駟[f|׻UVO-Z{߻娣:ӟ'> >v駇/QGu 7؅^dɒC9^zt͖@lFJ{c?g>s=WW6^xdɒs9Gt:\pE]SO-X/% qđ7pcx'_e-]z<ȳ:K뮻-oy롇zI,p׿=Y`;oPא!D{oh<Scc?Dž >#zwۙcc=vѢE)<:#i[xy_wuśx'u][^zPm{C=mo;[eG}W~uO-]=9Ǟ-[xs9ɳ̮_u{}~1s͗ڙi0!pܷP:P_M5LJ$bP18 W'DD%q ak]b 0Eݸw)ܢP>(8#21b @2&(F M4E."PR`zkG6Mw T0whЮn,p#L"%VI&mWU uIe M:alƗ$.0_'@D맿dO]לuUoSXe?gϞ=44;tI{gc=N>w۟r)|+ED>u_B-~;NVSwVZrΚ5KYܴBtMW ӦMS{5Uz!3Z- ;j҈fYvl*LJ~)ijV^h4,Y"R <:/첏~_W|Wv̙\s%\r}s9j=cox f7y+_?}Y?Ϟ{?>_uxx]zWh6Aш94}JЫ{h̝;7IO?׿>eY*m$QB%s"Hd͚5wq_\DVXqWwy\sŋ:묟ij_җwr-|;?'x#%ytڋX{AjJ^衇M&][kƬjZT&&&.?K_ٳ_^444>1("W^y38㪫:>O}݁{x /? :ꨯ|+gq5\sW5˲z;}v:3|/ꫯ^j7 cZ._N;}򓟼Z;<_ .\sͫ_ŋ\Uz}٫Vg?{5׌|#+bʕ_җnwIPZ*Ʉ"QB!t|d I*H HHWsH4Ur V؂pm [` l)Z5}z{2#-3]0G/F6Yfv:˲l^ۭ@(e/"mixBzF+tM-4ٺ2 u4i<)O"'nD08'D"|)AA?-:W'E70B"@7zS~ޕ&nzOxG&*E" Ql(h mR /#%lQjyB{ر%Lf]S'󕢒 etM@,48_lّ/R8HxzdQi9I :7+@ oP%*B eۿu]GFF%f͚n͛{*.[e;4M5444jueڵ bez]\ =ׯ6? ghpXu'"w@Q?>cƌy#ȈBG>1=܃>㎟|3'_{キNBCjzzj"\fM^?PDw}wqǕ+o?㉒o};o~oo3f 9[o=TgD.MSlf911dk֬k=CQwmo~qK.KWjt:4Ų,Ƚ{7MoĈfWBDӧOfl._/ݘtW{q}8v߾0wn3<G=c޼y z &"bŊKIB|W_}i}$˲Zp}هN:OQ@nesDC0F`%&TD/bE8.\۵y[cEoLWWJ}R$J =2x'*U@gyavpAiw x4H@J꺇ZT'_@neT\ @C(EkHX\6W pIpSt,B]"jKA]5$?\қ ϫӕa lA.}iSMJd-1P^S,L+?ϏjO)<,S6} ]vxxX MDD&ؘjM622l6$Qz +"9"Θ1C ]V"#h̚5kڵOU*ء<ޛ!$,,tGGG;lT׮][VyN뮻YfGF|5ks1n~;T6OZ5VSc̗.?_rȃ>;j ua;#tFu5P ("!4MGGG1>裝NO5s$Fa;wneˮK.Z5yGl6:h8oQk>T*Nl6o tA~Zz>66;'=Iz>|T?c1CYj#w ,PȾR,Y:/ OӇzhʕHXfWj֬YD笔%iӦYO̻k{vm8t:JU CCC7tu1˖-[|8 oxŋl=/B$đVEDF9"dD5S8D"(b=Q023g`_C)JY(00;eUmA=JgM>yȰ7)"1p@{ou[U܋V͹v5NˀD IDAT#%(OAe`g 1#** WM4$잾AA\'hFbⳁ8D@(Qs|{Y9kjӠ"cf?Z{oVıEȹ D AQqsA$QscTG@zrQ־wĜ3`@0h1p)2TdUޒ'VJ_%-vQÂ24HHdcZYFij @M*h*&MGZR[[ҼɆ kveP,`2f2"-R| U\m?.?[yX` <GQe~Ν!lHeYٳm!,..J ͉:1??ω(s%ZOe{!Fy mᄍ9AR6lذBu.g#8Jp2)m+⦛nz,w`o<ꨣkۼyΉ I'tyHQEQ ,p3o}O|N X?S q@(K,&B*Y$z=qDJx9__{|衇~߾k^Nj!KKKï S&!SN9>o /|Qfr":䯛!¯* "h%Lޣ?F pr}>Qze$!c/rүAj%k1b U$ pm^͂CDVjWl-LP FKŒCt./am4qp@TdOmO5(GlpdlOZ݆9)?"< UH03}£a"\)deij~L%x" F U)'٠I4\qY J{JS]5:\!5 /u1FsZZ)oMA($^kHfBQQ.09 !@xE!Fr67nܨ'bk.QB*diiI5)F۱c|ewβL TVDaQЦMmowy??o ;`=9ꨣVVVnݺq-[z7nU-{SHW_}x<~ Y]DRJ;\_79po߾cf>C;#8'?}) eYvGuQx#6o{&&~W~eǎ?!EXxXPхD( ...?esݻb pQG-..{gvG~///˚Y^^'_뫯J 7 c>~DWݻw{챏|#G/,,3o۶ (GΆ;ʢoNSp1K*<1^!|3wyvj'=iΝ۷?|֭zp;v9(b<`Ϟ=+++E^t䁽[d_G@r믿}=9'a{XM)E=qo#|w]{g?}_~]wz?A;PR?X; "t!0kB4B` Nra PrpR@fLtjuiW-K1NzvØ&xJ6"mD/F\`rJ8݆E7&M9{+*H;7Nz"mP@kk\R8)ϒچ8Ǵz [r'wލ7xmo;묳~/ʪF~_Br u}c?u{W}{wUW]%,B۶m{oٳN8O| 孕A[c=_;߹tMww|+_\wuۙY]JN~z4lذA\䊀J3=яKr-_|1$X/䒯}k;hm۶717m4L9w駿o?_cǎ 35\s{:묏~2~3,,,^ԭ~3'>O};ꫯ??~y?ۿ;?Ν; |mo{ 'pYgr뮋/sݿ:o~\sMQ$)3Mx$1`h'.@`cd`BeS$(* ܐkZV~f[]kQkiCQ- Ӫ1OwPZzllm1>kH3/ٯ|+g o/U^vB<;OY uY7oG?ڶm<wiWBCde d0)g93[QL9眏|#]t/'< B_7]k/| \py<北~2c/;%/9//g-o;{oycˏ8px|嗿կ޳gqwemݺg=/pe98'Ƃ\ .<"1!``5DB`13 "#-Z۾xnۘ&[ҜNZ;he#wE fnYU(&)6 "&&(p~!3z" 9:CP دz/Ɖ9dGD\9h1j B$ֵ2},,"@cǓQL2`\)bQIUAcQAxGY ?Wfu=ELY *ϔJ.WÍRu\#Պ88B VbJ F۩ JL-kPe5* VBP`#+B1PA7-э4`EGۮP ÈmFaQXfjiL4p6kk"1E#r]2-x:էNM)paDnE01($.(фј3b43ϻ ^B<9ܹ裏l?E~t[lR2u="U鹁Vj-h#aCJ( 5ؓ Ύ}X#Ȱ| YpMMmU'vamEzDxlLtM2x<F}6W v=אh]x="oc/NYB_ &]T+OG>u`3y.ϵ] @]\z%a.K,s|?s{{޹ s#`b3APvL32!`(XX(r!bdGnέ}t hRNs4$kV~AAbv pHdgB0$JU:{@*~=An /7mgYgdA9 y@Ĥ$$mֱA7'h!utÒTBRUtݻ\D*f(3v/ DD)LyUA7~4f=͋rsM[Y%=uS.I'FrE/hߗ0+S'q /PNs LQeUBD5u?-Ѣ6}a = FU 1+U@ Y ~˛Ր>YHiBPbhpP &B"gGROq*"O!ʕ<υY#` 2vh3y-ΘXՇDO ywLN+%JrI\9-B& ڸqҒ s{ Qm5thV &YGnه:棗).Q`1@bdhǔDn$A9_DęՅdϓ3њpY70G5,0δN@7`>C2S˨OI'!2(&GP ӣp$^iXg~f^YY%e9uIb5mPX7p"Њ h5B#$AI$:=u繐DIRrJպrCIv{ ʬ) >_:bt^YK,s)ΥYX\&@A +F2.d*q) !A3j:h. j?3dUC1kަ6 sZÇ8}4 tuUmDD4dT?0l5ꍖ6XQn#AIR.H%&ro wʏ\"V8]*d" Q]R|YY5ʐZH3LЉh!,WHj|a,b3z"J 6΢ ~~JV\~%Z0΅~'̑|IO#Id:N*@L}M=}34QEtB zkm7RO3|a4XvQd,88GG tHGP&bA cʁD i=8C DY,/fiU2VBI z]sqHc 菔]!zt#̓?{:ۏT(i' 1!IDҌaUa_^SCf^"P8^XgMgƠvlKX[~A sO-N,D[L3Țo|` :]PݖUL˷Iׁa@' D2cNA1RA@DZ(6TpE%b,70He\EN"(Dۍ gɂ`X-d)ΫB6$,tB`H%{h"͉,8 Co]`R1 yO& ,4؊iːⴳmWR ^:Iömo1I@kTE=;&@ q )`yto tj9|TSvdvg j j);i^Hh8lFc?U 2q{ vL 1Ѥ3 ~ <)(Dbp*B5wj$UkSx JBf9 0%9rt*: *-,B[AY}B$3% >Pzyf&.h97BY .:. !xCD.B9t~-,R}DW#*|в{:f.(p͎ 阡rbށOݬa"d[Qk(!ȨGX2ѩgfىkaF?oG2ʿjd"V7ծ^Ly7^^,6?̞lnXfFӋucSN:餓N:餓Lۈqf&d0@Ffb$ @033B`qLcn!9E(Oij5 uZ=Dd&$"; 4P,U)teSaԾԴi6vS³ZAb)f [ݝjE&@ $pe@Fj"XHȗl%RJth VGDda HxHQҪO# ):.D2j Ad(4Df$ʩN| kcRR( IT o_v{yL{ljm;Tgno})5ΦVKc6^i4N:餓N:餓%(D@,HL`\!$WQvUMVڭ3@DQTѨ}i?%3SJ#y}!2I3b3ڬw9]P uPUYZE`Unoe턿WЍ͈h8pLC7TБ:%nTaK]P8$ĴbY8(}1PR׊Y2eɷSǑi^ly|q%hhkecIeBw))rmRrJvb`[ԞǠSۨmUE}ïu~wDD \ܸY9FÂ;餓N:餓N:d$w6Ҷ#2"31 H D !00Pd#ipm4-Z[/Fog Ofcؠ暀Ϝ",XO@PR a@,sCFAsQXph48T=`%g 6J grT*eS4Q#TT ޵KJFNPPn&:n E7@b,uYc͐zЍt $Ԡ$R1юJ͢gTN b"K|І6+HgVmX]vNJZMMTcUX Z^Z4U +@hd$ C4mѺN:餓N:餓ND3Ft 1x/Ĭ 1@E)X,tPæ\il~vY^L[1Ű)4+>&AoYoi*i ]9NX!7܈NhM*rv  G"U!d?vI?Nn@0*]|M`k j8Z'PI8lk4;% %HJC8@"~ "H2 U@ qT=JJQb;5 (u!عmIK ;V9:*Mf ְ0ug 6ƼA A[_":ZG{ KuMw?1K@@kV;{))rYZ9{'vI'tI'tɾ aH,Hb8G),nhTq#cmc}vIS+zi`EOeT^-"OL$\tRtb%%62pms>5φ!kMtkV85iSbdxLkZiA jm5Fhx#496"IH>GZ(HV{A$>V1Qx +_ U5T&TxR&h]mqHG[vIOByZ"S e.`+ɴeq׮מFר6ov򛖸N:餓N:餓N03|#Y 00"(((SCf $X@Uuo6M3N[ɟbv i&iV6E+hU?]EoE&g/'2AB;Df(J"im:շf2f]6lCSj-M/֎ FTp)FkEҞ jYu`K6bKMliaN#KtXHSq2ZBwjfPr3Ōqk$^ZqDl!P[_mfW><-Knvƌ͇VZ 6-fWTc;餓N:餓N:%\Y Gr ĩ b{JDn%5#y}dZL+v@fNk iS""sDa"|! >7H-bJEJ WmXL s*"hM~P_4ZkT?9v 8@$p12!'9k3# ]=a&HA dpj qbrp$t$c$#!k 13 1IX" WaicF`ƒ5']B$82i$;Yrsv2C%+Ti,W> ID^,4 Y-o2O42DҼxYSIJ!J螽~qxGsn~~~<Q_YYu!dYFD!^GDEQz+EQ@ߟL&Rd29eY潗's9HB@3ƙzx, 7`0NJCK#iz~:餓N:餓NBaYB"10xf|AD!s   =@5XpԦ}jG )ɨ>\;vZ2+k)kmH~)4>IDb?@T"O Jy4BGri4=yBȲ(j1>ȲT t$Vk13Q(?蘁 Id 08t=113#u.LCDn<cjўˠ5[sT @N.z{8OȕP#h00kJtTH#C7JRZ$v*iL2E7$v(}Iϑ[P+NV\C7`/e,MtcZ9*\ ̨}Z?7'y`繠xƍ~`<`<>(,dEQ2"h(,s+++D$FA`DL&YF#‚y...ze^1c2L&4O`(["A7({? j0;餓N:餓N~~(N% 31fDD!EAEAVs^z,?\Mt5l-!)V0[kU.TA4Xؚwgi_Uq i[T9ImWqYڭ>˲crDIB2t-+"x$ Qi-VRC7LKl(+L\ PQG)`Y. HDPKcP- \HՌU|GlCbYB5X:U-ۤ-y:*kJS։e(5xv3lJf="@ ̜e3/// LeH^ eYQ,0 <_YYz=%艘r,..‚#9ڵkaa!={z=Ғxz=5{ަM# 2{D.R#B9+&$fN:餓N:餓) XmUc&B 0b ((pAĄ$F%ieyXͯ0kb źFa.|vBg[˯6VIL[ckf眃BQ vK_X|+ZCYyi0Y1Fg Gj YH\n0T-O.9p.Rj%dya: ID*}0rV^ʋ3y( RHVD5Р&M#p D!IЦ1RVrT|0.0iTu_PV׸ےIaYj]eٚ9,#š+ LQwDf>w- X 8|'o޼y4)D 7o^]]EDKF"ٳgƍsssL&V8d"0h0 d2Te0]vIxy/,,r1LVWW) ZQD$0vI'tI'‹Y=0" s!pQP & ,[vCQo MpvXTòXMּ〜V֤*QUeŽCM+IgH1F[bn97?~N,Ts4hjg+ɂ#Li\ɹ`75>줂H:8#Vb"z@mM2!&3]b8_88s,'@D7b vIec6J*Id9dN٪)$l(}AjQWN/Jtcʪ\mՄM>)iS|ݞz-Mz除lg"TQA{//,EaeeWWW' رO:3O&~cyy//zD̲laa?>x~~VVVFd2ٴiP0HDga@DkuuUL0@'۶m۱c".}k wEd+wI'tI'Serr XJ?-4R٧k< nI:N0qፕd^"3?Ygu/.. k"ww릛n:SQE)-$s)򔧼%/]v}C:쳯œO>y< A`F#f&O}S|;xa%^7??/v֭bϲL>H;C\iCW78:餓N:餓Ne gf!C W< "3nu[+Ä] :O ˄X9v5v{w$n<5@MHus]_`fVܲݢ0!dq56wI萩 @|gZV"fM q,]b$P h QD!אȲR:Z֛|L<  yL(𑾦E؂eUdQv5YA쎵4bC*w#Z?3PhX a@H閵$pY[}Q\SQwoKr}%jǑk~L w"|p̓`ee ]v-..!⽿Q<(eBqJ{~w~g?D$>&!p,3oܸqeee4Iu ]ennniiI;VWW7nBL&{B^gdY@ycݻw!bYeY&f#tI'tI'%oPx`p,!F Q8)98 5U@3i1UFOX}8Q3:_PC>4ۦc"~bd2Ll4DE @RkcIOeh>nFE"R_갈k(.i^E"hBUj>;shqJq&}(ǁK|+bɭhgz*ֽjۮӔ"4v=K}x+ՙw[ 8Sf~qӦMb! *(P(FhO~[֋/XſۿW_߼g\z饽^/}u]'V$Yկ+яe/{sk_sNkN:餓N:餓^ĹQDDC19U͆-) LAKC]\%k{f55$zQlvij{ -!Ҷ b F2Cimjly&٢^n'@Z'ڋrh&p ة}"HdUƔZdtQ*1$KdXj' FF5u{'.B'Ek1RLkFF #?5Jű.vE91^v`#2"E@ IDATĘȎz&LPREE4$D~_RM@f@fS-O`DG@( :e|&b20aB7`'!"LȲLPU$xD~x3}?Ow~o8ZOs9oᆿoxz-{k>>~o8]c~oxG+^?5yGq7^x)r7^q{1s7_^:77 6N:餓N:餓N2 Ő3 = @rEIA8dL;Ro(%!@ե%ppEyv,N)M#JVYw OiAf_ Zcd#Kfc+#3hgD\~ш:wǘr60' UޡkTX^z,l@ڵKx7^Y`R#8B*aÆ;vzO{&p8ܹs5\sgzYwqsae˖-[/͛t~~^Hݻ%Fd2Y\\\ZZzK_zI'eY{yEr l߾OOyS~=_XX8Ӟ'n߾=s[:P#tI'tP$ff. 1"3AprڎW~={gg^6ՒbFL] :UC*>d:hQ' j+Yh4[dN-d`?85U̻5k?kR;ڭĩ\%M*78EG- LPX͕,$j3a"5N r(bib! VF,2#i>LlZ?\X-R3 %ATS)[^Nefs[n?AD0m"^oyya$x|>O=#wU VS,xeg>~WrqlܸQB֭['(Ozғ: ׂWVV&N&<5QG%tw=蠃"͛Cz'?3<Nx<(h$n2p<aA!`I'tI'?}awDB\KY-jfŶ&f=q`l{~`[|D$iՒB1i,nVI8@!9іJ{jsb1? Q+b?#ժ_јz?*h b=!RE ) 3a^M]* ˆp`h&eDX,' #@6i' `l/p}P<3AAHYH&#c=$SD( *Ϲ̄Zցneo#᭙[>+S]ϘYL{%`lD^(KKK[l'?s__ꪫ;v~rp8̋؈%0͛<q׼&iӦ-EιOL<<O+N. 603F#!H]KKKhÆ 㲹9OVq~o/~Їw]ve۶m2<뤓N:餓N:ylKcf 5ziOu;MϏʭ4ᤲ,qkvOr"S*6HJBthxE)" %@j[00;%*zPĈ\XH Y[D`*\KĠ vZ82|^R9 7m $X'_+PLXŒ @6c;t; NMYYgbӋCka'7ơk#\C,)6\4ЖHu #`gi z}2׋sf&r!E ]\¶mۮ|+[o}{9眥^@Q=Ғ 𨣎 ݳg͛,۲e׿;L/~z+{YXXV;㑏|d2ٰa .s1L&G'x_[$ݻGq=nuu3g?XbWa?r8:餓N:餓}#z B`"`i=hzZ պelq5x1=HVsLq,&Xo-;Vȯ.*@S Ȅ,L>,"UwR@@3r숏c9`K a|δJr1y beJm";P cpԎW \Hk{ߙPIfi"` KKK_җd2z{?%Ϋ^1ԒME'h4ʲl4z=I<77w/,,ݻzֳ⊛n>7M9rw}ݓ䤓Nk_n袋`8:ٳWE/zћ/wqLJ???WiӦڞ:Pt`oCZ6"u OCJnD2fQr01HX0J0F 6Rw}4giϖo0zbJ+bt.nK0Ԓi:Y,60(={?{{ޅ^"ŝwID{Q3ؘ ͛/ {?<_^^ι~<̭[^z{yԣu{g<n8N>s=3عs__-,,qX3"F#Ag^mڸ뮻<׽uO~ ^x߾iӦs=O 6y.X́NߡtI't6\`DXD@$n"e-u;[ӓ+Emso׹-p`'"D>"bR+QdsZw:YS^!w}済 zLX!r8@B1`mVBI$K b&DLjo_0}CgE"7r;6sTYE;]pY3⨑IEhXG!@T#TF%R QF_=39ĕCՅS;]evtKl˥cOAll4Է/@v_jXԩ AZה+p:Ķ:Ѝ_ɪ:4_vLALSyL!䓢{?:Ȳ{5r-dY&KT4Qup?_(0!.b8eue,H ,>R~A1 ^$̬ 1 z@"DDLcE g-j眚lk)"j ثq{sعsG?S[U?"Xj餓N:餓NG7o]ذ^ 0c^0 `JD%nh=ZG6H-ІIdf=ɯC%tz_vFNSm[2J(̔@d !G L{/G}{'(ˆEEQzx<A3D|e@7v>mUD+aDb$A@]SJEF9ڠ\ j;!Ѽ@> Y{i"( @bDn  %D *%'l4 Jq ؕ.> bBCM?Rر73_H=*ٔB _Y"WTќ }k3Ωkz9w; c. ;$bvY#rhT|E8?Źo9/CQdQ*nzG?\Q1Ҳ,+(^3a|"e=#\P3HdFb<ȴ ]MކzרP'\&@}pE1'`0[W[+WL[A8hŹs{za&}a>褓N:餓J@`tC B(]O*AB\ B\`b46xYt,SJc☠5Iٰ ʰ&rbRo{UC,U/z> FD2evsYUmz6n6f]_I$]DxùYqpba_76e׮]'x "pй d=d~_a[l9ڝvtB~9&Epwg3ݐ&<7N:餓N:H$33dU7Ɯ{gT >AԀnep# l}0ے0|6H\ jPC|E/X"exR]㜳k̜c􏑏r978Q+ʹr7 H(^Ip^aO끎 1_0r` M&4ڍ(Nrc.UPӐy8(Pn ZY1$26mTB"2 AU]60ңSa4$vqWR$:hݨTpEf81P+@M(r4=l[o琬vnmD5}S5ΛIѭG7qWlQD,RsnکQ`K, 7<;v@($Op-Ys@Bt{:bĈ#F|ʕ\mzTƚyUEgו^72?iE< =;s)Q T[Czv4UfA~jb8N?"S 9g bqމ;FT@씡2g<:7riw7HPYV+@QÌswLJϔ/y|TnEjOR0c8<&i`ׇ?=c@#F1*" ʶrAn">٘=F|-:bbX;| "/bh|Ѣ(}z,X]6{D#Z1: }_67u66kjxfbk3ZI[l`zN:!X  ӪcyU"`4iݜ-01FM~ z  EKjl@|v#2"KO؍0M^Â*־Ki6F{,ey!I,TuZ<ʲ4<#>a1@#t5+=^yK'~-K? ɃIUEJ*B.L!גb˃Ǽ#F1b:**h ھ]{;?޼wkޱ[Dl+@/& oΣmaebT@aǑC۪^uސi"^ Ez6Ժ5C Jf* fCDq׻DqP.&ܴd`P'c'R`JS eHo}N]!ͮE9ztJ1b0$BW}UpT8{L9NDzʧ_~3.]8ZNg\RJy% MA,n.6D1bĈ# VhErI LuQqD-mBg8&j m/eln8uǮz "_F^z@aj̤~"֜bwaY1bp*(ܹg` LCN# B顟O}//e2/P&Ε9Fߛ#F1 Y Uj7I!Eޅ 1hmozCc[D{ca#H=yCźаpDDk\$3IX3P)F/险Imh]yB\mGe"vÒGtLVPWdFnݨ;FJ 6\RsU1a [nTcbD*RqTMM0{3Բ@ItqnZ!V6=תX-:,񉵵t57"'qĈ/<{_ )rU(HgS<_hʞ]J@VL"^gmW^ &JykG1b#(J(HȢKJc7b:3(7dm/_AA7O18Q)ԙXdUU#5(7Ѥ\hHу=_7zf(7=p "3/6 :HC[('M4DC,h+ {kvKmsHzW'C{FՁ&hU[(=o\U"Z'f:)`I]::xw[MG AAGx)'+[~';a(m&d}o$ vq%G|(Py* سsEATR`0B^ \"qN &ٵǦK_׷*ܡ=1bĈOpƭ;!kb B DrvM=w@p* i'6(+%ˠiώݣkP â!MfW&J ]\?52 զZQbp vne>k!#Y=vլP7K-Fh^N &,U2F(!h {zRPOݟj)ΐ*Vt6۠y4Cd$Y<$z vF#TN¢-X'O,T1, QZp< e]٥]L22 v P?hq7z6a8}Ca88%".j6u1/j9K Mbnye"6]p5@#(ш ) uG$:k~HδtV blYp25q(Rs2Py%-`*pI%=Ɔ;gva"]y]Ȉª\nӂ)U"0MIK/m~˅t$L% GD!$ǹ[f gL5;~8FG1bĈzh߽Pg* .:AL7[X8֖AZdwfSl2濹oPp ^7$&V2j ],ʯbXXsdՅ5=m ܱɵAqU"QrNl!)9.ua&BE܄ЬI*ՙR"2@D$ (U,TFIXB$I?,C $JNـTU4WURLAA&o.ڊ=^}%͏8YT;5?4L%;U= Vvt詷/gS RvP* 7kpn%M!?z-1bĈ#X'7[q13@\%&Pfܒ٭gAc{Ts4.1bX6nNi;C-+2h5y@U9U꠬bQ?@Tm)E!8zUSQ ٠4t0ntQ]ة|,܍QݨICk7sD"15$ jc0ؤ+T%%Y5]:ckxEQW)c믂9NO$䜊Ū,auLT|rK&Sc3J.u>MXD @RAJǞ]BrhR{9N4ev>ɼ,jqT@Z7`*ah Q r y\P("^{7^'J8յk=8QX}T!eZ$JP$#FX&.ӞtKnt~6I]\1鲜~PX3#8,9If1{OFvPe3-.]9?#F1 Zo+P%""Z&b"4c39t=c&u ؘd}7=.Q%l-8To׬(bh2McM:SF_7AFwDd7n)]Ubm%(h~>m C2\wjA%Hcpj ]Le Bj&90Y1)4I9&.MK9Pe.c!"QR"%错Ka*AA8ɼ0>M2  9)A 插H |iyı%HRLBH @JDɳgGLpGHR/ PLR)NEQdҦgoʝjюTxMQ7 JFҧ?eE=R-傒Sճ/˲1,!P *sM4e=dB() t1bĈ#>'hMEE$*SUU\e*54n*6&og(ޫ l9^la%zN^"i첞f V ŗF=E'j]aYU)[fݿӇU 2m3 ڟ" d-h}AvA $KO$KHʐy( sZ9$t9j(ɱ#S8((rI҉s-f>RdfY꓌}셉aU k JlVk40L^_:ܵ:/U!PivĈ/0ܵq/dO, X] Rv]k\IK$wIy DsW@w.vG1bĈAl:vlז fv "&WIY;LmlAo-}vcC702"8P{]kkXҶss^D'5W7=)J~=Bs݆q"dDq+R54쭳r5Gܥk/*-$U%)0JEi˰Y#0$ >"؜ R;kt2-˒|OS\.!+Z3MO{ȲYQ ? C$hTB(sJPvlRrn2uι$I|8UUUrZGrU dHj.a)&Z _(A ab0 )4NQZڃ+xB/UWW]_Z)! ,P݂Ymٖ>50W"Zfj'_&Sբ|\je2MSy<˲L&RD,4M!L)I&Pa:.WITGULD.I,I*"vI,v+.X>G< P ҄J$\ȅs j߹g0JU匒r150EbBPpPf7q&)(_'P NXdĈ#Fx!D ={YN5~JLS)@>q 2OyZW6TU5υ$^q;Mu C7EdK{^SX h'DC{a]¦-3`9#UDjgim3'[ZjR j3*7ud"B^f@Q3H bqB"dKTY'g@L%n4h5Z0%zeιR/!,͘q, PUP(PlB)A()I\WYH@T$9XP.Q_( d]]#?nZ=t W?!ذv&tǮ߸‚*ěRbFZ|/"%ι,xS#/jJX{TE\.ιdrxx$I$!;obJޡ,K#:'Irڵt\.+"֫dZT5I"*2˲-VLE}J[r/Pr.~0iOyFBMno2DꔱoiuL|>rJeι4M4ǎbi~׼/L4sey>^=yV&Mӏ}c<;N9yI9ʲ4bBD<7Gri͙c::]V gI {>ij3&!vZej3Lj'"C!//w}wwbmo?X,gS(ɟxG/]җ/93iO~o6I>??jTHs i7BN%[9bĈ#F|NnCEꌡzhBY8I*/Z[OgqWDutoP 3ju9(G6D2uCr4$#UFЦgRkQzws'jl 'XzΐTU]ƫr9i[OP#W P اt>]8-g._󓙟LID ),Ɋ"@S+5 ! u*Zj e#LSc&0 r$GRY7frΑwp^y"9rLD":r`ᔉDN1aʘgD ⓐMV.gp vCI?E?xH"?;S<C-JtDvc-7< sjJxǿ˿V+w3;;88xXxCT|7~#w}̜$}C/^,GGGr2OOO~I,˟x~vu{GƗeoy[^o;|{ѻ-pwu]ք)>T?Ooƭޚ˾˾;>|#ۿ}…<7|w~韾ͯ_e]wݕ|w}-C}~'Mofi]p8v"QS~+; l1bĈ#FH-WkR5Z raB%bF3ɺjIK@S˄wePd*%iH"I]X,uIz2+BQKBi V>a:`PB\ʪƏ*VC=vluBP(U XQT)H A5p{TT*W:ՠ(; e\lZ]+rTXR NDDUDg&%`8s@`KJ+j""ҪK#:+/@R2QP=O\ eKvNi DNI,jeeYNEaYZAc  @DLMM{իW۷}Y0cd?rn.ɲy{rtB|jQ3,>_YzֳTyWW__>|fQ*x"0z ^T n:#F1b*,h 3< !sPdbf^]"Z*!4py]WzQ=&P%|c$~,Ve :6Dd{-NDeު SU'IR%f.˒FUvVHP¶ot1Id50CDj=L;_u3;YD{7J6D՜$EcM$fBP-A4M2XR6IBTхHj Ji#"Z-۞Mp"zZjޛ'TI50TmY4c03*)<&M$+˒esO숓I罈@ۘD#R(J;]4},vy˛P}l  U "d1ebuD(ATU Q0A CO@du-+AU@|3@ߝ;<̦N[c[wttϟ7mEY/^<88M,`i=P:frQ9g=ŋ/_~%/y#nv41PªJ ҭiO]̖٤oDH0((0MV{Y fظI5[$DOŊE-Jt@׆hit@MBv9ΧlV/ |Rmד18t2;S6,:0Qk"b0+'MWF vI6R ]I,􆅅Wl(&r`/ Kyr'"$안TIkI譜ϗ>gUfXJAWQ9ݥ1N1_`b 9,YI$F.XFU5,Kˁ$.ˋ/~}~|3ocd2)wy+W>+pZ~?vޓJӔ'=?˿\U?_txWU~c,ei9é1bĈ#F M@UTDDJ3DEDBf6멸dbbU`ٶ2xr}lbm- 6$gN; kQ tW؎G !kY*4mBuhk~:c[q]BUfkxjN8.6dL-co*ǖo*pX+Y i2ϲ|T%OdBI2N}:a0S2I'{w}g=O6˲1bĈ#Fn`J3hݻœ4Tf&4J:oK+cP^7 P#xc]s.ba5Gó4n+6^o;Z@(#6ҏΞ܌n=:}dSڊXab6abtTu[|t0^S{^AJZ{M,13yl>%nfSwd>MSNRVI$ De'u aW9PE?36KWtC*s)JBjZ> PR۬T9UUB*TD,>aX() nО?SO(k=xEk !Pv/j/:x E6I}+s4K?ws}l63HL&rin _pS ^9NS8%"%ox~G~G&~Cgrw??ջMozwQ ^{{w{:e/{k^s|||w/¯=9~,\.-ihĈ#F1bCV$T(8ږN3DEĽL ;N|7,6Ŵ a(͕ٽuGW>M y>(it|;WLvR 'DF}j[3K;u]A|<\*4d4NbITjhKm_šh%Q;yuH\aڅ6{ c'i:Νg[ofS i:B)Oι$ Jy^hT}jR^$`OK%]z!Tm/ԈhuQUEկ.GUY5AUUV5nH-,Xi~H 4ukzzVIY/s73!ԏ&sTQJ/Z.}9m-f^,Ν[.u"~}(&hkk]t EQ0zbXx,,RQaXZ eƒeIDTUNeQ."IXrX iV+ff.N. Kd{|jrw߭C%O((JR;M?x9.%8^;&\,?#F1≋;'8>dbWuLwVB+?KPWU# UUMtU QRخl^c{SUNQ+F^7Ob75f'ysOcu{ND*s Q%`̄: U B$2 e)U<-Mei>huC"2-\e> Y%K f=ȣcfNӔȩjVj<4q^btxyBٹR_(;ɲLajFd.Ο?X,[n%p5[y l6Ԡ&`%3&DfH a 3A6BTOlյ~yo$hf#%-)lbZr'T٠TuF["YEUX nP3H33c))Y%LѕIH=BtY 5]^8Kc.) )߄ nyĜuUm[I@^yO{q3;fh¶iu׌1>e636b5PM=;#;jyt}g ga0LHr&wWeOIhc0ryR㬭&EA` z3WɅHH`iSX BlIK;؋gF}!Ĩ0&5q3c>2ّ%!HefՌ#3 PEp8wŅMDV:򮌣Rdl4lFUK Hk]cGv#^Νu㖧Vx,Zj{k+<~82ID ("cGȣ|`܌u]33X W1uUsc$P|6%#6m4[R2E2N|c|1s Sp5A<'F5x )DbCA)l @ DΒ8<unZ {0j㾧%[0u8l]0a„ⳳy^_Nx>1: :UDT53釰qy 掕|N{)]2G3f(?kJf()ؓ;JI dJrY+4W ]G&eJ#oܛ8ی9hU@KTafFɏpK{WBhLY롬(ۧKJD !9,:f7޸09{L B]WRW WA拠JP7` ԯ]cT$(x(80w uHy!R*y`1+2`Aa!b02MSmI~^~LKr4(BD=; XͲ}2ox+>&LL~ԧ'ݪ[=1=qOXɜ(dagdNvAuXiX.Ţ^WC{N0a„ E(xêWDvɂmr?فݞ\Y/9,+>ϙ9y?c%T]VnI/y4̡m{ȧ(YS㵬^zK-x]]]nȼ+!9Ʊw6d9nLp1s?v.Y7#Ϸx>]:r*,r,|/=iX/~Ӕ &L0; f W!hI$UI61絾Lpء!8R/9>(}쎚ϋk'h;OdmFcq֝k;z)7.SE>vIV&K#uӁ-ݲ{G['i.5# &Ln΂)%!"`oEr ] 2 _M_P*p TMr>^ ?J^_FsNBǦDYy"/ϮyQx=c'_Pb _o v@Nn?/3SpF{9cTl6|6/ #ժXжhVFPK-].$CJ<޳EZ"ŏa+3-ZྦྷfQ}^c>R&gKuB&"BTB2j6'AhsBnm43y( `0;F< @+gp2G]-Nήݼaggg]zMlDjqzF)YJ-T{ IO, 2"zb51 !R:Gؙ#1mzp#%R 20c̒a^4YɈvvGIU H j՞AU'n&l Fdl8Aby r p#Vb&6ipS#@BCRF:q44`&LnF?fµ/wj/}q-z%r IZfᬕx~ϖ$gMIgbx"'L0aw(1@H,YOT3C 7S)0hzU0 )ؐi DXTc~֡UjMÅN#gFI`lTR x,;D1sfVUmJu10$36JBs.u!b§+"nu6͜EV6McbB Ns`1uCIâ{iac\ B ތHN6u/ylfZ7)LQ0/AV}5 .u]5q꣈T!tkXj۶ͼ!R1E#1Өݕll˝uncY<pA>13 t B1% PEd)f 0N֪jj iiCiہpthPbBrߋCi8=8r@@AN)SD2h+:`[b6h25% M)Ty/6kBUSc/}\'}/գKp &L$hτEGNKVl„ &Lx!\Y@ٖclxb DOys.uq2厶gb3}k(v%Ca"$og=0e'qMG6:YdjIiPy)܍,81<{`e P6^ԭ2ml:0WGy]1[!sSqkx-iǤköo71٬>i¼*h1&jL떈JXڦAU%jۡt͐!3e蝎&jcZwg,99Go\t6?O@R33K 5#cw58 dH f#0i22<'Mۘ bL$ؾ؋J8?c{Db+K ^ L{mm9}ٷc&L0a38G{c8lᨗ"a!]{yD&rh3o|DFe6)eRfڶ-M*wPY(qRBwna(ki 6i5rÝqB,4P˄N;ve,Pnɒd+FVD :߰af f ^y߭G[CJH`涣Hli! f &b!#N1٧C͌))Ad`23i2`f 5ԮCcH"ugN3}Jq%T/(G6vPw~8TJd6p9N08,0GEWI]Uղw-R&L0a„l ДTdkU| xw5wXUUM7Dtd}qv$m|@ވK.Ε;2 <'O0*)%f ATm[϶-h6{asT&gYH죴\X8f2|߱`sfCHU/rqSlRHn ;nĈbr|S3\ 276`I!CLhz>.aR;z}:C#!ԋXhCռQADE`/щʆ[g4L41X{DefyutsU$:Ǟ E,V BD¦fp#DfꦸF Pc"![)@y v_r_?obCKHJN8x0)l ;ЍQ+3~`%9Q_ ƪj> ~p׶{J4Q3밲|n+ޜ~& bwDd6UUeMWUE@',{NS-f!3W3Nfh&$+bD)VbT8lAD̊W=_ Rcck0 1Kc~%s hX )Y`I0Uh``:s/sF@ޞ 6;th'L!Uw)Yu2C/?Tpou&L0a„gv^p1 9+|f7)Wg3<|˒m42J6J6l4+m,Jm#|#$"1F!,Hf`1ƾ])1ڸV95Fu(2dDŽ*-C 4^>;"Y0BQww&+rBs{5A>&N PK`.Ce*RAP&2VJUV$AEPLtax$NPA¢nNOڮ'5[ކfq3־%3&#HX#}A7C6ڇ1n1ɥ1(!ܪGCc#QUH› 2cF31[ߛ IDAT!،8r!+&D Ʃ ԧ%KmzqZݭ%m `ZG\VqffyeͶ+L񸗏`;J02/3m -w6س| 7}!rLKh~c;m> Ϛw=/T?Ƭ_*,&mhwNqϒ'ղ$h(M &Ln0&Y IMU^c}JCF0s.RɄ bߥREya_D<0.L[coˎ9mdd}JZj{"@ھSͬ1jefٌ UEDfF&DlfT}]߳HUm׭51gVf @uϢdEPWURk΃Rf<]ťɔ9!"DA] 184EJjLD– ,Qf%$;o(g,֖?_FLÄ 3w]Di6ӝ0_^zt!͚nm}+Ϳ<﶑d~VC5{$UiB[u_}nx >  i6a„ &ƪJ)9?RU3gSWEuHΎ#+¢aM}W3DȉH<&Hk`:SzIHv`>dooB)ecZB6ܙxceSX̷NFS7_(.ŷ;П2BM4MB:~-qn()!%%b 1( "% 0h8Ʈn4B0>gp% \V ]{*:>/R)R$g!Jcx2q41K0b%UeB0A셭#)nq^p%c^W`S`8v5j>;?U/0+0wȬSH5)~ X_vyglk7uطw$ U]IU?Վ2&L0awC1)3h`DDJd]L1f""}ߧ0x烹%I\j`wL\Lщ\":]ץ2$ PdT5_SJ]ׁ*YV1lB.BFǠX~BUNpSl0x2b@`aEa>iM,"]djU}AALi ڡKPxx'* KLalFE*A_ [H|P3 {} "|4 { %0bJ*pfhfQa:H98ϥ4p*. UwNHlm)\xdts;9|cO./x!y~ 7+9yW&Jb^`e8eLH=Qrf mۦF! xGwAVv2lyO[ekϺ~%Y?{nw$!ԳWҚL'O0a„ )%S֯="0iT"jD4O(d1>E ѵ`̛(tث;/eL{,~)͖9Nxn<9T FepnPպ]u3Mcfm-TuZ9uR*㦮 @cK(zsK6olR1"ys`gvNP'#߱3唕Sƍ n;TN>]ҭ"Eȳ$Ӊ_**Gl CiLKخ]MM4ݖ-^037UiL5cQ=NNz"d*L `p *^c.N5Vˌ~zs?` 0|e&)\Ҕ80&G8@ C)Y21(pU#Ȥ _;Aٹ?wPlK )Tز&3"SO5MX,- @4~Hg0ᛇD<͘fn=Dq6kka]lQb'BkB{I@cWBH vѓx„ &LN&˪ e fG5MS}{*" !vML"܃ߖ|~>jmvQEڝX@c,1H !2=ku3[[3sj̪RJ}cLiYVN]yBRr{F&eSϝ^zbM5jnQQR*eKc)3M8d(%hq?@p ֮TRΡ|&&7͟eO&>-w檪٬5|.̢YNϪzfePYp^03#)T,_@n?#9*J9,{yZd:hLT#"aqЀPI#¨"KMnI#ssf>ŔBU-Mkhf%Hoؑ]hor*nߎ<0y1Ǒ>},Cun!pO4a7m2K"^GHc sSjʨ^&zה%ؘyIt]7vnPd]L0a„|И`:,Amku۪֧EM04d5AQ2Mclo䇔 /TʐH.⼉*C1WU%vUDs^d.IU7lb+ DBv]@򯜪خ92:-6|pߙ#+l;r~Jjo+<:-w,i_g6M0v@7G&c{RAHrxEG! ~8C֡!>iedv8vVgjAS/u=?=;=uQl"aIC"jL ׁ(;nל-]pRQűeng4RJDAnH $cbb &Ibl0" &w3H$lI-i$*J-2Cv. jdbc1o<99Y^M׌c׫zQ/QvL!3Mr:_iO8覼(E2PJBJ)'L0a„@x:H[k")`=dDB+]׎zU.8qtdoh+c8mxD3@v/FI*fL F`1 WƧ8.K%84fwMxA'Lx&m5IShDq}81GM+ T7hٯ޻C5 U^8Yf3^jgM0a„ dTH6^ djjfu+m,N'RU@I" GX%7,}+Bs"ȘUJ{Tώ-)Z<s``%Υ fFL^<ŒO\ $"AN@!S2U 1ya7yU{<]jLPK?ݻ'NU0s\+l?|e)ӳM@&s\+Ϳϑajd쌒^H?rZ2WDDܹsڵNccfOOO_򒗼 ox^m/Ag?^.f92K]u]HuMd73׾׿{1awQ RЌ{{#"o}[ 뺪>!8"픖r Qh "psRj1Q Ř gfT iҲ_)e„ &|ChK"B$}*TQX2"qŗ S߂jB :HŚ A/a3TcJIsvTOjxUTlC-K GH#_ vEXCn^ < 9hpu0%`f ub}̡gġkWn6XVf61'R˺5"p޽_S4"1 )4)"TuuCe_zuuQCSR^`rG-,V͈9HFDdfGUB^hgF4J1]LI$_|b{Mc3Q=S9vdyԫm}eqWFU.;-G|Ju'z1g驏Qh#ṳ3ԣL2P,4勳 * 7D5sjOyF F]@DDNy*JGB] + Еv|exG r|O:%gUU6wXt]BX,8RJ*C?Co~ܹsoo7-oɟI?Bڶf1juvvv~~^Uoq7ov]׶?3],VU <[i}:99]VuX,B/?>ͺfnz5H3 bZMz &L0aw%tHejDD0.gm7^ ߆ؑN`8zyy˃Ͳ}s_>Y"b\ "삑@Dڶ3jNٍ1oeEDNaղCJU #,Զ+*^2"/0; Wr%y,cREM]jhT}J! n]yƯ|]YR"Zxٕ["rsڴM`na;J񼗱C`d2Rz6DfR؜&",(W1m_jC|zl$#(}X7àt`PцH0* fi]\ ^ $l@2N] 28W.ɵ̦U2GF Ю*OorOOOeDC۶L!Z\ܑR,Aϑl6{?}]."/|??{s~Mܾ}i??(zk׮mέM);w4Mɭ[8}l6[DcB0ډbADsBݻwz4͝;wlN4Tu> I&DŽ &L09Dbf2%1Ģ))pU"cTYzdSd:sTt)3؛_ۻw,4lt3J.쿇믵).R4B4D^۶],D1«ɞ[}?/ܠ+ȆPј!O1ƺ])47كs`񪹼^ 7LucD57*3{ɼL }&,Wm@  ˿˪nܸ׿^UO]O_׽u'?=y_׾7o32"|'?ɳWk6ϝ G>}_'xGyO??ݸq ox{ԧ>| _X, 7&8&L0a„@/ >51UU4if72JR`'7\Yɽ*pWӍk=,}!) "RPbfjK >1{d$JDwUl6TW隦i&Ƹ#RΰLqUGFCrj#lwDn7CΊbˍ +uhH10"R)$PӘ**\v+%7VM` RMoa! <&C_i}bo zNX^ &GUSDWj~0TZ1 "Yp5S u߾]si~w|O=g>J֭[Nst]\.8c,"_MoBxς3 IDATK_O>Oȏ?|>'>WRzk^W__~ ^sUE|^}{?}'W/z__/3я}}׻җw-˔|>'RJ|+ONN^W}{k^sڵ2a6&L0a„oC쿾:Iq%3WJ)9줢~PcGJ`'[~`{la ̃HEDr(Hn"6VXDiU뮮baf{n\. rٵC췚S!fk߇gXM9Քp ;z+J_ Wy@`~63u- 82>f\$>Uq?vR@!(/yK1^؈ٍzqrv󑳛7狳-3ȠjJ%NN9Y^p_ʦ4}xvl,jR֤>cwU`M )mHJC i4Af@h:x7}h|{x{=އvZq>?䓫ƍ_߽{ ;?prmۦi3ij,?SJ]}_c=6G̯zի)~x+^}S-f*\̬{wn=GF 8H\x% Q[#FBB!$@cF /`xa ݽ{U^"byXQY_vO[WeeFFDf[zlK֭[DlizVV4v[Esg>~>O?i _xxNlGAqz衷>я~vz{ ,XोsY{ώYUc٣˕_9 b/q+1p AB}wbjجԶaV{ujRm[W}? +G}?qugE̘&*`Cn%9猌´0ns1n~*%58OۨDU9k$EVxhzEf~sv^u0W/3U O&k+p9|}yچB2K|̫ƭ[7o5]W?W%Ũ\FjDg3[A{4sWFa7.Mnx)?wŽ/Tf]WS? 3֏ys "T;!>hd-$vUd ^{_ְ{"Z-w?86M++OW=y@/<ӈzyzv[o1}ߛgg4Vmo{SO=O~Sooo?߹so{۶4`Lkg`573>O| oo~]]Q}!KDZ~G?׾wӟ^Vp,X` haŸtzPD n`F"DD@zΏ3BIg|֘S9&$EYY!UaBHMәUnGjaϷ_X Ss~m:FLUNQUlKYJi#&>.}nϚodZJnWvÏI3"DҲi9|&(/ QtjIT48$$f%pEA{Zv2 xb(֍CĐ&5mCƓc#Z1{7 :*7SU%E^ImADUEQ'Y&H-W"W⡇'??_z?Wzի|@.%^f۶}k^c;."_җ׼5){#'4NjW?_? S$<&~|3{/;??0esGHn"*2!h1&~ISHB7n <9}bpnu7 ,X` b/hDIP߁ 6)<{IpC~MQ-s*()0 ))1Cɓ$h?|.P| .Kڇ*&B ťq"'EQ=9JBRHMjR ̾NTybijv'wɪt3 _Vf;nc֛8mE %Ǎ$mio(4MQQ8gR)$&6Lf4M]nvb׭D1&M*aL:*()IJ L@X(HN5'Yt$ N1ȪVHKUQMh,hRY$`|>+5e_*f@&+m~'VT I "(1{ m x 쫺d"U-^kw骖*պW+J~!* }G"uxs%`fBdc쌇k AhfHخWvZs9+ܕ๪`'nx]*Xs4,k?_mVj^O,z~~nuRt'O}ONNqO~>?vo?76o}[w~=y4MV!TՆq4k"|]zן/һ/~o===}^x;V}k^coGy~~Gƍu?c??ozӛ>hP&?}S/_#:EJ.cl\#(d AI|{e"׾F-X`/09N@;g4g,"՘0{x Gs;cH5;@TIvyhiX-c(<% D@`hDc$1#nqM iL*yDVIb.  Zf"6繮G.rDT#d7 % VC4j<wν}ٻݮ{vc4in{~"z| oxf[>[[?S?{[wä<ȟom|vjcda0]||c;;;|#~~nm?#?{ꩧ~Gy:CЯ~__Moz|?u;zz0Τ9R 8Fy12^#ZE(~)T0CF6:˥ c x!*OcNHTC yZh.(8R^s1-uW׳-% sP@;ߨ}7|]BXDJ61F0YG12.+n`MUt5ScϨZ%#osI.WI9.m^'1< @, ˊ#\J!IH)(#Y_ 7Q#21RtI\%<ǧ'Ҵm/?&:&D$J2UɞK;[p/dѐ `vwB]T1@R*1NB鋻O q j .߯M.aDg]mW6 c:_;??L?9F!AOOOΜs[UUz6[lv2A0xzz VU֭[F]v;󣶋\<B0zbŤzMXIܹZNOOo߾mbQ?PPMo~_{Q!Br@qh4>;'O_28OF'#<4mQ-I 54۷/wWmyziՂ ,z/>k{j/k ZEJ @%jƁi؁J?3jT!,ǹ3;y`|d^ |jWDP ,K>4M4QkNN:x~~֭[GpO>y{Ǜ7oVMqw~=6k3!Xa`m۶c]"v\uY̿CҬQ*cfDOV4!b%8TU$*q)U%L`RUBa4Ulc$z.RMl}ԖHm6omMצg~f0*#q V)_Z2NCZr83yxrQ$`ߒ󫓍_]㭸NvO85VIIkV?='d ) \nẅQ14uGAz5! ,LTRJ Ĩ,@RU5 1EnYl@&a)"bJdȃs."{%߭OR$Z$d]`OxE<`2. 6-ϳ"q1oNU{^͘;/\Wa YVv?==5BUsgggfv5Uݩw*jݻ+_>c]0ZS4MӶ0 V,S1bVtZY+3Jv78&]1Q͛7z)AI0{?fn:}<9T*wo4")tbО_зE6ox`ת ,X` %aѐ=*Xb%KBKWl,RD٨@aj\Ӄm~4gqыyjnQV-QLn3zbc]u:dj t;3%n6ۘ"==Mq^HaSsa=T[֦i,4,Ը?`j[5niLSJi И=DKٖsǬ=Gsrœl8U-4 bq5de "f Q-Z`0A%8(we ٍ=Gx5Xz"u]چE4jҝ)EߌBUT2?@c h"_xQ&dAP3i5,"dj-T QdTTTdT,I| "HP QDٷ3s"on݇ΫF rq_d4Ws/6D `2W ;6n[VG67UfrQ1Z(Sa=lSKZ-)jB0C\ F`Işg(3D#ƹ4Mc$zRr|^ݺuXBw999QUS `//x HHXV,=}^oOn++eDdDn؝tu^_w7I~fJ7 L͢ Z`/bHBIH@JFD2V+)i⪈h"g&\E{jV`k~G?L[î_y4!["H) $޷޷"24"Zm^w@'m8Mwܶ^5 CHId"DD4MVq@rnet=TJڤ3DĔvjvDP PSݥ`rs,^݇+-%⬑]] # !Vdt+ۣɼkWD`k"2"IJ撊ܓ΄E%+YE t9 (E;"0#"drk!ډ3}>*!f$o.wz^'2q9Z7#ko#";VU$"*RY> "l%93o* f)=ddz3MƙY.8KVz"rzzzUĴfJ ,~7w1x3cY`o*#0fxr#mB ;IHlcG1"3驪Zz,1˂g$ )ŠO;_q_s'o~[ D4zϪɑSIdv]!pɧ{ḕf9Jش!Yr ؟ӯ~v3!snYJy"(XN"֜1R ֊ȳLrv'rRL D a7`fPZilySvV qumVP70_gz"_ʺk}TJ-+k-Xu%4<07V-<:J7n>д'+l {siANOO麎 Uo,X`70rQ0jTA'Ș&IDN4% LH*RJ"]-:MRs=J hje 5YKEU*tX7: ":T[TTި{Dd6}OZuz~~g"6kbnuqnta:9?w݊67)NͩS Bαҵn7!jO1q-8M8"mAec`rnq*4Aa"KA"ePM&@Db-A%D0/#UʰBz5>v("EH 1EGHE#M@2Qc{69 C{nFR}}[a RZדxD|5IU-IJ؃hv[kZ)bޔ_h SpMjc理"R\Ds )!VxNPmOA  H `#9I;y= ":\tyqsGdн!ϹO`9z̭^봸s7 ,XwQ2P4M)żB-aNWkmAu .CJs^;MR璁^#DP4\c4ڌbġq mON6İ;]C76g!MY0:vi5?""yPbBm77MS?LMtm&Ц\P_j)y@ jXysbw*ӢAe;H&ѱpl{FK̓V98T9zaJ))8{39R!981┒9"(*NdR ¬3zZ1Wc8Y掍@D 2DKxVAuU#;DJpP?d3laoVvAQU gXw"fV(ky2RJ 7ݝP"C)> ~op^ylf65\ {n / _P8U| ,X`FB" $\Sa [9"ƘE= 8i*T"Cxl{LZ3f'5;QR6x3 #կDvΉY[VfގOι՚\;\?ۍchlq c/)3}ߏsM۶0*x:Uh8& 4#ڟ ZR6 B?V{\nۙ;s:Xa&Kk  уS 6]uYA$)i !Ei4TݝsH#jRJ *}h oHV&;UΊ)bJ1'$u&B1ADPA1C`"1^%4LpYX񕭿WRM3Siq* GV⎋Fef^hb !r,J"")#\׉lZ9b8D5Տ.%7.g(oW) Qz)/:**&t ,x1#Gk*@$?)4M3MSz1܁))f`v…_hƱGş9R3_/l'@a7Rvri])yzۦjI<zhZ^oۭsfAľCA[w0LaF"@-@=Aq'"D9ݨO8"bZ uWU!Ju(ZJ gcA{Q7PWT`@VD)~܄*a/ G}+!T]Am3L`JkȳMUՕzfRUp\!i$*">I)k-Du(B4JP WmBRLkkRi,ao774yWhI6a |`FtYE˺"ұ5yA‚U7s޹K7%R̀z/ꋳZ .c QU5Mُs[U5Fh̜B,R`/ROkqU'2,E/aE5m<ܭZtnE9ٍaIDNob7E޾}gɻubF=ssBHNƓm8iHrUչSJ!FDnb6D|̴nlj970LU9j(eZ%=H-خh*&?A*T^.kY&/%PC R.Rg.>b!lUF-Ԋ#D5 &@']צ$Yt !ኊeԉ%3Ǭv=JlD B A9k$]u>A˕V*͈ԃlP/⥚+=8AXQ+]h#QV.h>emDg!8ژBti=݋DEr%_S:<빏ܕ!šFHhQXuKS8"Op |]@CvM)m;MSunk:Uь Jhuz~8ɫP]S%PPYA :س_+y9١+/Pbfkj!EQEf2q)vbLۭ[sS'yڜtRHK)8y۶Ui SŒ#&fGD1&1NS9'l4#^:.h&@Ak4n0 ȯ+cTb=5e R}:(Dd^OK%>CܸD *Ƥ91{ 0 dG1<#j4"(D"7d>Fݠ T>8# )J4KE̳,i`T>7ꚇ砜5@/l4*aJAKݹr2[WH5[*f:.QQA$Ǒ@kcLꛋ O,Xt` PEPq'm>X-mn:Sg`1Gɿ% YzWσ䣦mcLr2O1% !Lc؜m4mۮ9>l5aBO)0Vg2vfJij)zu2 C3i :Bct!imsj̙)TNz#H*K5^%#;Jxk] jg<*nU rDTg^\0.Gx2=\$8v8 \îYjHn-"'@l}Þ٥]8JӵMv;ʮdIIUqdY"*ŠjB uDګy|s9fVUeB=H\@HMY j>oU\Bb%:N5ME죞$2=B &:o1%f!RM1tnN)Pƀ?vzis.f>iF@VNZUp跼Ed3`1< ,X`KIEHD$ N v5"Z$aT#R@5$ss̀("ձ E,O5ʪP'UK>Af1z@\bDb0\1D%TuJ1It8upT~]rΟX9pi[99Y,}eםm֧޷a{>jj[,ǧV"NaO* " b%cP@m3L|FM)@6I,*b ** let\ ~_d΢ QBj ji-"4!$$BedL$ D h&s5k.3wYi3m["7 T#nYI)IySUI!DDk9Ǯaf^梔=]a(c)_L!2+8kE1g^g:&;a,Ȍv^d^yHDN1UXfV>MAB wiG:zq}G;B,X` ,=bPє-[:Un>%̪jFq_OU@%"b%.;>.{ϥ?:W J Ńp`"+Q=+n9fǎPbjRJt`1 8%"ro{& h\,cM^L%yQK2OҽbUH  ,_ ^8vF,0`)k E{ B#""ɐQ;1cU^5b;V:u'p)yVg} q݆ ,X` bBiTSaAA՚aqɷҭB7S'l{FaaBm֥a="H "IĊ@(DHkRϑ+jM<sP\t \Q9)gQ%bn y2Bu =٥j1Ĩ~0NUc8>¬ " F\e:9EhT5k&B_QᘙD%'3]=#2;琩R*`){iIRyvӾL€a %EquV5Ws{K7A*6W`6D4XPdOy0._GQ-B:QbfhID )Vd~Rp8#_vF mkS uPqDZzq,X` ,j!Nc@;V!O싼M#Es!1TKJN9@䀲!LMA "U119ssfߵm6r~6Mnn)7 6FAĶiQM!!7DJaHY$αʋȤP l5I0L6P>dzq"X}F{e%&'XḍjTEj[DDyᘪ~@DEDU0%BHI$gr_UQ dSfQRJ ٵ{vsE&2RmDUi6"yV3HTO< p RUR**E=)|q\ϧ䒘$(Յ~#D!hD/Խl_5!,mV{=IWNI]+Dc~닔PS?t ,X`/*#mJ B {Ͼ0Q飭Iϗu9$fuV?q,o^`BM}Ôå\Ɗ9+: "zv}C/"7qJۉ*vVHժi|0M0޷m:)GU1q" М#B lY1G( r=J^ Z OalDľ!"".W#Ve,@)gq"' Z/"8siy3kXيU3U+WH@f"dr2١pB=Jmz0H(@Hª: GbԭW1FSMY!QզĈ(S̕`ci[ |0tG_5!/$%R|%u :q X2RJu[}("á;$}+FUm@2 q.>i ,X` BMӈtZ2ޛ?RDZ~UVOqA]f/-2z:Ӏ *?6ɢH<]D)d.!qODB0 !s> ۦiTn `8)Ӫ[51co9bI!9MAC(1" ՂTk]抓R%;RUL@LA $&Dc% lENH=ß}^>T[t`D jhRrtѴ]B!B)i7sU׶vaGՊ0Q!s442\|ס$1FUta04F@&Lm?5?H UvB[ +ɈF 9JX,cԶDd>*exR}V 󘋔IӾ+@pJf7Z͈7SNrWaŦi۶")#Ƥ,NP4L9MӴmkD`"CxP;D4Idfa IDATPdRU #nkfNk`T,.( _WU+d7Q;odՆTlhɋt\ݧUݰVBwvpnn."%\.]yʪA`~z93.hqƥdº,46`A"O>hՋM*5J︮^<3׵JrOYF¶UhmudYVrD96 8(mк$ C3`KwT*A˗/6w~{ nknuQ "!-wp7Ϻߴ\H݀L,80CB@@lX@ODHCH1Bh+. Qlz=(!4TDPa& +Bz"idZͯiUrpif@uRH$@;M.fh& 5^Yә*hI&E0I,%Gd-hREefy_"F[Pxy.DwHE9*y6v;?rh1)wJzSxMq:aե.[fˑ GҚ;Ve#3cޕEQ bYZ|6M&AhHj~viUUM&ev1@\DԎTtZ[TWk6ς1y{E81ތʊt8vangmI/-696f2>)an0cu.lp&~@DYd6-AĦLFH#Xk`6)>̲l6)XP׵nhT悕e9#JWxJi$c%UQ0iiiI@0UcX6] ) (0a̬%=K @, צgChA6Fx2o~g~S:3vBַsNڟr)Y!w޹vR-:Lo׿RL|ɳ;|ӟ~_u_ zvEuFguYgO2KYC2I;ȴEFMAs֥49ɃKE-oؙ1cp]eAD(rhH (Aff-eYQd,u]9klmfs{ρ`p.x9v;"q_+Y*"^9"[Ev.M=<Ɇّ6fʷm_2˲T~5ewÒ _B  Յ&)DՀW*jHs+""GXZX?DY l=Mz`26w%YVA N4 ƇƴP!D!/ΠRgbJgHhʪrZWоf32e,xk," ~E`dhOX]%/zL@j +dBN@Ī,/~[ߺr{;O|ι> oxEdяc}ݷsΗWkkk;v"j#&=Qs9znSO=ꨣR5眵{>묳N˿?WW8쳿ox_B-5\ teb;묳:{Y*:yBpH)0Nڻhyk$Uiy b@= FD6'r`D80K`0yژkB`"$CA{jP$XDBHd c 3 X1H8c0g2uafHc!(^7 IDAT@dEg9%U 06^@&t,8ƈhw8^fSMpb"2{MHf*> 5qJQ۔GA4 shs`BԞUfkLy!ڠ𒯛q:/{^@LPJvc Dn@GIsL. hh:묳:{d>?.ne4ELYu. 8-bLNloF0Je( Q ŠY]+++!FdYHg]yu!D|SEX ^Z un$!hٷs|JN, ^PKHF"9U=YDPTpXL;g/, (V{mS6xP*+#*&#C}t1yFa}UMu,+"3QVTlshD\7Ӈ5D4|nPcچJ]<3 BI3CB8f@ 4~\Aks.(ש6@mSKڽQ .n˛96{qx0پ\0N?/_;s|~ի^eYߟL&7 d 7p 7fY7[ZZzޒW Ơsa}Eg}9x֒Qũ޽G5\#"DN}uYguxZ_TT^LKe}hkzj37>&&MY%Y8~#(ô*)`H@F k,zTa4 (XILffPR@e8 j8 -t#eY z /E@y+COgr>x"eQ 2AO' )aۀk!|\+(uB~^N<χKheF[XPHMn& B@dXQ-iz@@lD$!.* ?%4c/"ڌnlY-#)EOFScTй\DϿ替/r)w?'xbY_W}P{wx9˲K1xbY!H2bi)C,3:ou~&Y} +DDby ---i]JguYgOV !sm[.@osH?)6][k6jY\=CƐ4dрmYN4N^΅6   C¨Y`@(B"{fB `#E.Em-335t&XBxY(5зT30vr;C"ʩ W5WDM.CV3qOct٢r1{@*Bks4TUl6ʄWBpMǓp4H8GGmS, @=lB,04J$)-0¤+o{~wI=IPm!aZhv1Gλf3 DqU [w?O%n4NhLDKKOE7tθ91r/[$@S`5Ĝikphm)؎ 7605Va4Fz7nJ[KM1ЀN)h^:OEgi3 ӴE7RDqq;8cgmusLByuƉ///g*h:LÞnܔVNÄ&|Ї>җ)Oy y>o^ZZ*RL&DTHBK{瞫oo|nfeDTD|γ֖eL&*hL& /𪫮۪:3&g:UB@C"=MDD$ xSIhqV1*LGE)I$O+IE=0tK 4:AH-D,Ί.n+k#XrISC79mOUmO]q$?%K#vIC@4 5 hc(·; =Ff h2pȚPo}uZ1|b ݖ͍#kjB˘y8N&mf3F*J~l6;Sn}ۿ}1E1L.y2\r%*wJ$, !O={n馳>{89򕯼z޹{OgS^MZɔ[X sr (YX rGcܹ "B&Ҙ?(sL>:3%*3=zơF\eAODUŀz`kh@ lc AX$̲}7whegQYw{`urjArZ$p{3¬d\N'Be'I XKGzؚ̜ۢ f @oU((g#*0Lft2YYYE׾J JUFA-*Ҥ81@0B] ~R m3(Rw3`o !h,!"4ϭ'I&L+5m<3l[PCDEƴ煍dZÁ &m X̽DŽ5ɤհGip [ΤGmpl< `+wGn̿p͠DBP@DHDH*2W,3=C%00+ -%sĒ1Z0@5"Z]nsU XY 4wKL{ی5j|a8 (M p0Υj aSC]I>?觶W_z Xk?O_TN)m}ы^t|t:U"_Fιdl6۽{&hu]k CHJsK{M%H򢊻k 6)Y)\1%QF<SΝ;׳,֎c='zHX]]=餓::묳:{v%<'"ca#ɑ%lF2]}xPqN-94G4ST@31E ɸ2,-PUק0D9a, ǂ}|$A Rj!d4N%kmಜ1Cs{ᨕ|@8`L\|m 콟Nl",5p^Կ%D#5H$)Y`3F@H,˵ |<@crh;83E;((" hh4:IH~w3GRh$q6$!\ǹ,@;1,1%BD1%YXUē=J':QًD[sM݃ X EϷѸC5ߌu=>H8F#>ܰ 4IbH&-ˑ4Y3X1E>=Y_g7f | s6kZe㡍0%,S~d={?ZUPn~Is75ƠQ>>6{CY<h(PkA/s 7(Zl*m9C DD98(Qá3'zE'AyJrڵkWUUeUUQt:M/$Yekޚvs.:묳: ZTej Zg&GĸV 7E$0wd FTtIgs3] \gc,ʩ@!sUUU{̩4! &rN"mCA2 ١֚\Dj+knv,w.ٝ+樽CfwWK* ruSx U<@ ijC Jy@IUU,5( -Eqc֋QমkU-=YguYgu0]ưIQf? 6  ˆs3q@E=x^/jv5YH{v΋P\֘ZkzǮ"CDbؠrȀy"L+<@dP~2Nph{ܲs[C)H@bؽ{<Gy&d* eD4"% Ypz^:̬vFf&" b$֚tZ 1U͍PY{J !7"fdqͬ8@؜R,sێwj"˲Y]>xh2r kvfޓ8ppui53- v{mVMUU767+t@0\B8M1c08x=> !x` ZCse3cjC(N0X:pھ}P#lj8""Z 5!hֈ " hQ@<.22& Eel#_<{fy UhW3W03T/ )!, "PcVl L*im#4E4Iɨ4L$Xtz""BpAmrIۙS!dk[$4Pbvji6p&Y.F"롅7c1&ˌ^UZ;i~1D1dDCޱʋmg%!f 4.MmWZ#}M#I#2cw )!P p{Ȍn`"cfpH@; 0u55Us2PiׯH!]ieD0S"A!hFdXJ]tFi'Z=oR""MFc)Gµ$*yHR$XZ$罢)Rf֯zȌ|G,Q)([Hǵ)(n'ci-gÎ|'ɶ2ۆY6޾!/ayuU\l%>`Vm) 9|2_^YXiN>Wf*f1 ,YT_#f&I~֫g[c),[Diɛigwf}B< |voo?xa(,dڔJHªz 52&ی8*RqWaeYT7BTP"`4to~/_,%HȔJXS@Yڄ*ɌXcmf+Ozo,MfD҆!MuwALS14#Y押=Z -2hvוgRd#orͮh=y+%r:1 7),`u743VJ8nޠ ;3Mb~F,O؃-xlOl_=dҁ\ rrnS6o揸i\H?2 /7Ysao]N^M ̬SD29ÄBaKM k_KrZ0{hM S+쟦?|77zWoǿ/;o^ǏwsPl;EiSp_\'?#A3׳*ھn\ztz۷o3 }J,t=DW2A$ AYFBvo/4P7ԞTL=U]n";iS i`-n h"f@y\$.h)yIťEj25dzw^dAOYS??* aW[=׋pet!K/B r!tݔ|z E?g)!0X<8nyVC(JV|Jppm}-Y8+/P,+2S)ehM" r)ň`wvKcE;&!hpR5,2Xwwv*/n߼_*?|nv_}wYvT9"B]p+a|MHZgL}HHVܽ-\Faӌ?f_|ʋFO L!UCEHR$0%[w"K .Kr]y ]Rn5jpu~3gz 8YdBi96\Nm,d5ere&XJ˥@dL39r1pW!,tdLӍrNPZ |og,FMa?&px@g.(>rC)?T}뷻X߸Đgggއ׷-&\ξKACF,,FDLSޯn >H7UЁZtɲ"lQ׷(ی2T廻7_}7qo?|w?G)ӋW/i"MM<F[O~}Dzvm"|CY̊4ǯjo޼bBWM2z4F(D ḦbKn`&ӑ =cPy06߼!2S!}I kc &bD \˩zM{e^=k1:`Iו4w,aݥLcՊd#XlbzrwpyG@IXDyZkffTRa|qˬҺqe|jpow/J):W/w7՛/6gnoߵonͪ"b> 2/ N6?XO}?cGLԳqזGţ [~ʂ@5K{q^D[ɚ-?Db1[M? C({ Լ1]H4!n([cnwBIT(B" *%0YFyF#ÐE(u\w2oQd1QDkɕxJs#_=ov6_3UU(:gecRlFiR~yf`2Ыyay^ׂ}4-;ɘ> 1-P1000000000W64]H+Í}O[?3GώşTༀOXKEnp" "%r 4FC;X#;OҨRX Fkp'+?|W^V?q/o?~;TW tS̡E" CoWF - |Nf?Co9쇵^Ѹ61acRZY߿⋷ox4ݐkQ~U|UN+(0ӝ> L'Z_I2dv ck~̉4(iYvPrB[6^5@Ђ  YC "4  {dEr=W )jIjW⣁ Z /F~ڟذ`%ura kͣo,>.X":zxOƆv|t?<0|~<{mmY[+El8>bA\ .U,)<,EMb 33_ <'̬VCM繵xw_Jǻӱ^|/c{ūnw/y?ܦ/joff#.jm{|ql7?.jmO3[9= j޽yׯ_}dD Q29P9 +L0*91E4YeRBQHJYosh@e,xժ ȷur[$W׫8vݲ ڷo: \Y@K # AzCm1Bj J/5cgNXkmykf[߿ӱ|i|Y_fg/on^}өۏY g?u -;)u-T9M]]gH&̢O+w߽W_v\V7f&`޼~y}իW=%$PfH%3ZUo k\Z:~\$%0}xVy%u^eV.}W}>Ntx_SQD79R!KBY_&! !n=&XAL"( kM2"$dN&GN7 ȡMno!5l<Y>65LX ΔǢ& t&hn eԿmRRa q'ʈѠ+1lvhu.ҴgRmQT hf=Dc 4n _cK?mwij)kd$zvJl@$qkӔPr?kWf_l?lSjSsUg.Ur4ZMDۉ4MVS5"~Avw.7 M0+AYe4eI@Rdp0E0L!In+j!m{S-Ō$Qݻ!ֲ)i4ik>fDzԦ] ,trgv0EL*2IgGϖ@V tJH Xt IDAT1&4#ӭ2o?m,s[5M๿ިO`4~ e=z]%nkB[W oQv.mK 8<^R/Wb[ZCQ%CBH*Z~ZZOf8iR(kǣWR|EwWׯ_Toi 83veJs3 ;~J >k狲tutv6Ijh?U|V Ǒ=IJ*!.+w3k-{~ūnwxwwYt:<GQ`pFÇ햫?LJ)b?kUX[;%~LjU"p8{8ׯ_WtB$YDMN@B]:A.0P2 uMPG %dFe Z\>\)z$/zS53Y ;z]- ;9hQ(B2&sYWJ_Ը, ɮwޯ6wFE8Z3[e. K Zh4"gs(Th'$mW/U J7?&,f y.`O QRaZzphՀyw7T,L$?cnt$D 'A]~?y^vh}]1Mi\͌4000000007-&20 JpD-ア4%nR*Z֥%a&Ww(3ܡAƴ \tYN.hQ 38ͳD3O; O>N=/|Ew6{{M7p<,ᨴ8YMveRЬ3O.ص՟^csWIvZ=$u7 REhJs0igf*fV 9R2 FFt;D4Hr"؄6gʉXUIp;e~JX(I#r*K{V:Go%b Ʈ,8nܖSU kD Iy&-i7ne]k1nIL0:XhFĪXй?&; ;ׁb¿FIG\C%d҂M]+ X1i!B3O?Ë/µoy_ܾ2ө݋Tѥ9);kԫI_&)~Jb>)9ɀ/}uݾ\T(0`R`3D U4 0<I1ÁB+h'X(yXJhm"dKлn,ϲ,Zg̋a$MrF 5% mfy#['iydl6Ÿ3x9\6hXR$rQJ&ep!x,[DJs$FBH.#k1+/\Wx>z.>}XNڋu>.{Ng, yS_":Zb~Tf5 y)]A@mS!{s>sAEֈ$9PF8@\9^0?ɸ}6.; RƖe cCAТ?_$!8Pk5~op<Mۛ:NK("RvC. _P˔Hd43q>'s*|QC4`!-j%#$kLF1(3@^(.xV<&N%V97 dnZTy-A\930 Kz P"e]"_/t}JRmyG= [FJ)p\]qÂtNg {vB$)3Xa DY W Ыm?? 9]2c}$eZk:ѹ6SVkV_<4{;VJ H&f>yZ~oJA3000000000 0$!\<6J݈5y[^˽z# ?R_.?\{j?RUzJ ձ$s&dh8艈)AhHP($@@7DStԴ1m2,lvq<_ܾZ^QB.MEuu*C ^ʔeesB0-7ya@Et@O p6ac[͖&S(,jsN*ThYf%8R}W\y"_~5`\ًn5럸ZUHxFڼe7.۔r "^6$K-ifoZ٦zupc143"x_&H_:1KdSϙH[كs'%` UXgoN"de{!,lDmaM7Yŋ<%FK`b%9|V0bKD sW@Z@P0 $ϩlfFww!HsroR3ҬfZȽYTD1piS?-jP֕ga_259mZ{e::p'`[{8z4ƓJ`rX,Edb&,vid;dQf7?P7Y/ '˟#I&J<·V.s.y@'5`b~<"D#h4"uk !'ש//JzVjׂ @ѵWEG8$Ԓ"XV 31CFZ“ah& gow7_~usWf6G>ϥdIs6ʮOG@4y'ggԇxـ5bÿ6<3 ^mhn̆ ΉT#1@43dٕRY$ DD"4b-(De!`Da)ik 4ZM! I3+ҭ4 v02PHy4d^. q}ϬEo.F }qv^$ " j> 4dwmy9šYe;~[dfK*Z׻(Е^Ud:ֹ>,>tDvi?2=i)eدsY$)k<*6H^d [n\ğx6_m/~ zs5S&3mBM4p1%֍XUkö[xF>Wjg^SЌ"uͳlI "U6+m"+,"XI3WsIԬ)-R/Jx0T9@os Ibj$z^8 R erA8*`1Tº") 2 X2j[%Ҙ2bO]>/L`(e}vdɲpS)[bcǣ|hP@!!Xƞ13?a &K@` Iuؙ1AV³tƻhdsTȃԁf?}K߹1ZMWUw'oQ[ZkŅULA5OB e`````````7IN`['c`<~P1UH3sfTK`©\?kbEW, !_9er{ f7 JN$$4&A@2D^!ʄQV%vCph){?CgCgfkv_OaQX˩IX_nCV7hZiShgC3FV+˙sv.[q5~X쯳@ϥ-kR KT{ͦ?[b=AB7R(1#¬&n}MV5.NÀ*Ѩ46{~{? Yӽ{DlF;ܸD326m>ox2/DYdJ70G2p櫱vYu"( BzG1p9Xj"HfhXJ" yfH"z5uVHGAfRCJ3S/,)I"ZS6\U'%o'b@7KYw4킵f Uv~4{cBR/gDS4K#d`169UwpOǺz\oƟA{R~8yo= ;D]xUP^XWp)k_PJ9#I,WEk8Yk͕}=|v^VhpիCsUab`uxHv:r`Y6#7+ŜCQcT`%uvF#h7H&Ђz- r ꥆ+B2+ BJ?앬*BPڢ Lš SlnԵ%R  ,RGdw%Ƽ"ARq<'@]ܫ72/s|Idzp(1[۟HN$vR;Bir@X;d`;Qz/)LwmYptXL wx>oS~nntgHK-)|2ۨ-"THG (7IGI6ܬWWy.:_asJz՚Tfh 'KCAGۯWvi1'!)=i'k{K9gL%)5[ef2D+t2B8.?`բ8@+7ffVJ1bFV!ILaß)\LBNZ:@" Y5)hT$d!Ym$X;tkW..Vu}_= k33+TFvȂE:E4Qqf褘떇r%S@ď|pվk./sdnS Ѐ1PzѴ.T_@.2uƀY)enY倘J[k2w<ŋ?~%CdKx:.bY1vgD~DXM<އU(boa<EAX-?JRP(m,iiVm7`ؽ!#Y5+ #7}t%B@ fT-R `2+#P9 ETD+WTLZ)7OJ%/Pn4,l yfO$QO|\=~i$W_wǃ PZkP*TgnN!F|N OG//Rx~ofeebs>sF0cSeg"@y3Mr_"Z,@o-n"fo7SDN'bH<ry%2ָs@f꽇cb~OAZj#YX26J3Cҭ%+B Ĵ\@f$`;#K,`鮟b!3Vn(Iޗ1UDA8 ɅPx WJ("d Y(Fm,䢤0DDN>>2Py L2 2. ?[lyY4a/vHJU%B2#Gf2ɲ8qI%Tudo\N«m7n8pIndͶjT1#oc=֐(KQl%2q`kOI:s2|t|LןΏ{;"#"Ĵ)~U>Wź6EB/wyr7I)2YU3J#e$ +1ʭ&^~+:H!CF Sй?g̾4%! `TTA:9&̛Y9fJ =5S1IV3Y/T wFʝR[=GRND* SId&gn37lw?ҵg^ɴnd%m݅, ]iU+lC:a2*#[`L jσ8p8{+RW+JI r8PٯϦ U-/t0TTQH0&rZqtͰٳ"LkʞiMێ@n?x]}>8-=4VFS{焮Y/luPAd"-$]zV=`{Ь +Gprk`/CIW@$f"+Me)RlIfM@9̐"r4HkwP .ʀ7quz @-eX.K+Rt5"tutK9ff[ IM'ݭXV42cIFOsԳc^?j}|4z)ԍE&KHR$s7"fVLjDk,;3.TvƊ8g_06- r kbed7&Ԛޛ#.ON*e9qfchu|*a'_8p>̔I%Yhv݈cU;c4[МBR4Ahаd-hK@Gx] S7܁4Ƅe7ϟ.tN.z?~:>wÁJղ,L:&1k{km],HRV n}O'5/6:c]Ǩq3sG}GHf,֘r bfN7m\yapdͬa;@$mnSP:嚫zH‰xQЫ!EJ  x;-0AݷwmQf@OjBHhbFQ61NȼG0-{$_5QpArb 3s7f]*eͦP¨qHmfo\:aP%o012A)s2TDy`8dd6{8p8S-v-Q֎Y 0)QZc@FVm*chg&g%}km];/zIZBclօ6_؉^] .j_T^`"zO,@U OkBxJFlN)k eBI%4k& @4 v e㋒Q4%+VQG4LYw[xU%W 3#$TG1&z $$f;'Ldj)8=G 33OWskHapz733jދ鸘Aupx?Z=&a+PP=3*?.$ F)7R!OamO˽nt ݍoS8p8gʊʟXWApXTRz F k%zY{FD(I_uۻ$\oQ ^v262&bf%'ܱ-@+tvIbͬ|ޘqW]sV;)OE^},M̩uAFEOS- e!bɵ$/hb GhzFTL Y :19gwmJi#lؚ:Lɬ=4kڬqeAx05?6\zFi+_,GlZʅDtd"%wfhFZEB4h;/0K L4itt#9W8I҇ly8p^} yW-7N#B`І~wp^_&oQRM~x`nHC910*vVKŎۼvr}*;74T_Q5Y Z@,r^34'm&@h `+ f>0S5T@W ` d/msxF@!'V$"$A!7-[ؚq!cc7$Эv+3e#HL+\=,7 i B?-ffF*f\M a$h26,6RH A x}?$w3:+8pb{ Τ j`0%$H2(mQNi$3٥kHʸ)ߨ>~w.e ,ׯV-E|nͯZ$a@dJC"@Fsq/m9=$hn @JD;#ܗ[FLN2R!˜#yBMkRh8pE_ f}H+eG:J}5r?A`%(x&֠jUbG5{vchW+IL`'߸v'퉒璍Wq.m9+V(ǎȝ"wQ_xm bB8FѨ6ИҒ5LIAɲbf\X+HHP7HglSJe12=bk*'MRŨ z, YuIpԑT4TJFPGQJ8;V˸;]H5rBcqw5VsFFVS/ +sL>[fzH|4f+Hir1GaOb2VnöRZR2%vf_`D{@7e2%#mdF S6Dύ n0&@3,:#f$jJa@BW5/(Në.輦}8o T9yʸ^Q%UouxIP,iY3 dW"hb5e))Kc( `OZ_] ]kr>E|Ie5cFt_$v:ˏ)!Mkgry8ARDԡ Tިvo . 0 >1/%Ur 0zECř8p¯ rݪumЍ z|Wǝ{i~ 51PR@K$tjSPFO/v>PBr=:'5RZ CJq>C~Lg3Snx|^^_(!<86c :σK_> ;7Oj:j )׎lh{ݳ:bFbG,ZefPj~d2Ѐ@OT@D)Zqm`a4T[3ۉ$duXq2b,BH %%sG )vaMݕW2s~~ig%6,#xmMSdzJb~Nk:۲,9ЕH%)'-ldKt.h=b\-[ה"q1>lP DEtپܡu8pFhċ$ڍdk*bYn(T@T'&i py5z(vMSvɲSsy?-c*%t97TEZ0d5j1~պ6=rhtSlf$Mŝ,s9]eD:aK%Vi B?wrPiaF"|$ L$,~CȔ:q3g5e1>XG1A:1)Ť`s{ o'/zWȍ8>L(lV3! ֎Τ˘h@BG=Mz"zt"OE`o}M'ءjR?*BB SL P"3{_%^oh8p̈ ЫR|w!Q&U^TK!(__g IDAT8pC#96* $uZSQp8&vA/ÀZb;o`t3 +[zڬ1c+]C}wJTdy V@g\ihab잴ql=x8p -uRpNG~[!L }8TFU1"Anrfv\pn6fjKQvOvFD:7=gI6h9]Z&JƢ6gH+^g"2I :>o@ E d^Iɏ#Re2E;"=3.~"@p|Z/SUcdf:hz_HII7ҍ"ݬ9d꫖ 2ݎsWQDF ҄>nz& _J.YRz*#EX9$qn$It,-1q+rXū9 kIM-͖T]]Ni_ :8GcQ<)-ͥ3L]\4A K>G'7?yz|?}o߂8piP%LD\S/KA T2\~ -fb0:ҹeIUlX )@B(r_L#SЭIFOv9]=X׳;5%=<23#Lf/]#c{>̦"gm4Ed EgeY$뇱1ǪR#fy̫7jlQh,cSj(AԬS_nfvw?? 喬S0t>,m(D~IۧXaRvGp( k|+&МNr TJ[hk(z9:UD :h#ɛQFpl!2͚l RM!Ӽg0n@Ϻv!F~_HvLژp137HBt!Yώ[ӶefxFDhYAGS ax7d'8p~O׭*ZuaB Hfue% fe4T! 7˕OJ d >~]Ӟؿݻy 3j[vGcppf&6=0ᨉ__KKyʝ`4Y=߉v?WLlgiiiÚaDjk\alҳҐ6˒$. lme6\f alVwt jI$8!<"0OTFg5U$d.֞y=)q%&tqfvb1"2ER\%'{&%PAp[BҺeZ@ɦy빵1M3u2wcy-ʋյ_Kc8Gn,)BD@fy[dk'[8pxwAK e 3A5"1*F?OF|gjƔyfBL,J:-c_[NQ;3~x~)nDs5,/d(vl Y]ݗI`IlQqm5l4r#}į03Eҩm"-aki ʟ-i2rS53CP >2bZ=Rd"Q_ux@TY{8# [@1)#T,"2Qa7ƒ'y슮T5ΕEPno Cn%/T.66|_̦0lBLɀ`қen@K%U߮U5zLCiaR0= Q֩id"AE R劢F)~M?fl?8p0E1BǏ Hk0oaS(%uu0ߪAmY2v$!5H5)Z N6VI+`g㟹`^' &w2='RG}ʞ {n_$J~(Heh]`/z`͍J%H69bs%8lD4Sdn+bD+DV|ҌJ} Ҙ`^2PffYM*([%Q Fdff*bȮk,N$=H4tfVM4Kza*/$I8aBeGȷ*EY[[7v鵐` gPP r:Iww[`TY )>w AǑ(=HX&4˲ !R 9#.ҢBqjYk\;d0G{d[lږ˥g^|U^]8pyx^w[- Fs"U٠RANy9OVd1N|".o畤"HGkom5TB 6fFg֒$a'vŋϞ{BK>`4 \\M֦oCkj{o 3/Oj2L)Dpy)V(0$ l:@Eq:O7.t@ uVl5EWz!,={D NTP f4>UppY/f*#2ar `q\wmo/lY,R 5FD9ʲ=Yb*F1##1w.t1qiO}y/$NU:#S$M.SQd,%!$`92(ij6F% 6Z#k {<만')Cr8pź˲ܽ.zFV90XKc7֦! " H֪RM Io?~|=7+I[LbZ~N͡=Oծ.=O*( I˸)u}>ba[1QJ}X-[$n4T2lan9i((iQ1w,0do52 +cNU7I2cJ=N0Qʾ34a 0p=ABt@KUy $hͬ/=WC>$Fl ЁH̕r:{`6T0\3em#23y9w4s-ʳt`< 6S4H=sf(pH8]s?C^.|ߚs^<@}wAy8pkv!Nud,ZCI $HxF".F&SI2;W"6wB˔ՉWH:h& hZ\.?}c/.y8Y?}Z٧٥`3bemE dLGQfZݽZWDy_hVщh9rǃҴv97og|bc=^W ,|'G^CER&iߕZ"BfB(ST`He9/]wl!Q&df0f5y7Iro r՞oIFZٸRu#)@؞=˩΀IͺZln"۷o#G26`b fZCL0G180$E0,# GXRIDko8=ک~|:=.k?{|޾you8p/zyh'?_Dž=Sk'Te')M`@JM!k[ڞ뵻YǎјaHroLdP񴬗˲ObZf>ԝKKJݫj} ;g 1> ܘw ^,!hB_6xŃك㞿g7X=,*a$GIYB;sVЀm^2P;0*i4!) H frI YjI;9O}THH'SDeS!Em Id80nPPffڮzyvAebzzȄpr;ҁD*8 )in('l6f>8t"ST| 4cdpoȈ,R”=/H椃!G8-pqat u.$8#HvOoۛr>y[Nmyeo>>.>.˲BW/`*P^ijc$mtsTb-T V Jr BݥJ#RM6Û3#TQ^fG:nem] ]vCERC")?mz \- ^&3Зh̋-&m~1՗4aG=7!8E{ ˺T*Kk-2 'Dzk S# 6i)Q:%ٻDG p G_w˃+7Ii<_?/-y8p/1a>~6S\?d_OevFt&JV[GUĶ, kެ)/i?W% e[;jS֙n-뺶F/qWN:8$Y>Ud%.n)ܚMjzW[?K =&3O`_d홎 ]kϯЮ}>#HnEwO%wfWPuw6eanQWn}Vo`U %TvJ 2E"J sSDInz~Q\h^e_?Ox$޼|>+a9jYZ^"_trsTٰ]MQMh9Oh:],+1+lWS G8 J_΋u]bn""ϢfLc9 I>JԿjM܃4fVة9ʻSs2xAhM;EeKtY|/ܺݬzxNߡTpz&`lY=,F9XLAJєF*!B01o9n#H3lhdo>"Fa11{YKvʒeYBk}/^DdeeSj@Bb@ϐ Ĝ#0n. Z'dAFN>223wً>|URB/;v>^{EW@j@.sș~$` TrS03%{75<_O;:]9;@ł3(q mIa9M.~V֒<()>H2YE;wR%HkQYed-֖; @D hAQK@5'dӑ!d,bCΗfKufK}w_w~oJĨ<8>OST>OST>_A&OxenMS>.fg҇#-iI, W U8A:unE7:FU|9_Zkfd}&\tVacϑ޳{뚯Z\7*؇,mc/^Rэvu-Hǝ6Wkt/)hHOh=v$SgoDO"IFe !H# DﲆbR?rӯ 0{aIAe=Һ*h=,!* d$ffioe;/Daf@M.|NL%sr Ph4JBP=AFP%df7/!v$ .\.ZeYmSy VPpض 덮YHn-6 ̀NG%eXp*3ˠM5YbXgI!̦>ɽYkUDf'YA+)ZL^kmwnJhY aavn2,\Y8=`zhua4FULQ,q < ǣcL-"jJơ].u5/a??oK ws @ ';NX[ֺ ΃_ܿ T,M Gs5 ΅ nhm0Nx?`HL`^j 3.Xӹ$F QCoWǢwk/%ݘ6~VUN+EL~F=w0~{yDnlA +:erei)QR1J?nݧ$h` L keG1c￙f ;"ƽ}~[xuÝ&qhw wWcoڱ+@{R]oΣ+|DWkV}3jՋSiIj[L{C2=^nN{_rOnuKKDeZS@g_koԼih6E)7EgNmib&P˱03Zh"XfB=➩UQhtSdFqKR $%Ǻj]ՠTpHhhFfph?k#=rZy~9r)e:N2hZ)p%#atLe(9-_$fneM!+kA/k[ vվzޕ>Kw.Mv_TZ^Y/LU{x:ؒwzΘScvC&B$g 1Б23\AyCʧ[Z 3쐞`5# me2$aA Bk$_}.J)-큥+қ F .;Y| 66t ={Bl;WSCHR'3c|aFh77) ۲Y9k)XjOM r[hJL>V{4hֶ,Qif O~Xտ[>4f&mPzǽwp{/%(8p5x&DmbܵvTwW(3_3 t~ F(@b2`<e"jX!hhPH 0 eϠ+}e1|'@|ќry&_]iɂ,t^`ƘlAxcj t#AEzbW!x%z'G&o֏zjq>.|׺ 1Wpvx)BF씁b ivsgI}\- o~)߮^QnGh J2ݬw·v08Zꫛ+;%.a '-7XGwY{owf?κyٓQ<χ~rfx|P%,wy}eG̝}<~w r>s|x^g?ۿ_p|,TG!XkZ 4Z-;FWAPKoP)4Ѻ>eINefG"Q5"Plr8T/ '.+Zf{U7Ji4x45Ujަu#jn2$%l[O|戮 ߍ_n/J7Vu0D3Z9}1"3DYhWB5inpI$Z#IAB(ZD$(e0 2Ȁ,dD.,T\" fff\ò56Nj|tj v:'Ew mMIc_FP$3X1a4h9v$-$FC^ i0B s$(0G)Ek5apNKˬ%$1u0#J0"Yg!:"M2l *5C)E J`(PH7o>;|ioAR$.ח3k~rO!9ks @Jv \V{E(>ծmMw!t"S3ukAg/JH S[Sl6sPZJ)耺RbBhF]Yx6vr!gx\mJv!t "`IdS@*gH,dhKNW2jJvf9vb"ř<{D9]lq*IE Am1G D[eD B!`K lb:EQ _?ݿA+ZFN^?:잧ҝiF6/v,u^ʘ$EQJIO3sLGh)ERKp*EFBHmtL桥Ź_Q h 6R:`Mȴ$R[?qu$ozK[j0We~Ovg/><~zw?SI4IjrlVҢjў#ڻX˃>4/r僷g7} jNbOq:}8&~'^EY<3=_8/?A2uk8tT֤\W<ҁ`)d>V׳q5&yՌqO/0 W^XP^yBձ֞/ %q+$vD{=~Oz]b;xr\{F |J/KlKk)_?LKo͌4!E]E6z])\Q{%d$SE' =gtR|2w'c@N-@%>BU ܘRZ=9Kv$1 6/??\jei6֝VU C5.k 7KMo+e[%$S<^\^6`SڤZ+w 80yG^@kK7SFD)x_|\3k\iԪO)Ez}ǛT2"=$u[`jPY&m@+v%MҪ{-;ΧQK=jAa>~E4\Kv_IJF"X&I#I=9p_3~>&nOnG׾fݬde' 8iՇ4\ak.JA qs$eZ%( 0#B `Yj@rbbJfQy,I5Yg3fPu3=2LR^["=̺Zk4we&pw.چk'ޑ=~:}-k"rzLQD[]Ayܵv"i@)sGT`PV%ānpwbSidT2E?2^.!c2'T"x0&CMHZkcT5mMb.3lj ⓗ˥ Ro"yX¸Z|Wc1"lqYہL`*+QfwQxc ԀҿIv*0 VdL6yyaGNo{Sy2JTՀhf`.7zn&'X=-ip岆z&wRjC>aA(0||坎~󳤣ItD+DrA%PD D[\.(>f#7Oopx9k{RI~A<C}ՋY5iy7[=uhQ{nq" SzEliKտc*}jT+oK~c{*|w#.?.z.|3`s}_,ܵ֗mMMIC0˔ ^6%;%j0  W^_4kǍm[%m_ @?~Hk룯It*6eqARo)"1>͐I!Ub~n@S]%m&lgt =ϑǦ~q`fEj44uLL X(5`H\9:w%g[E_3yoyAO:ip/֪{r>%2mڞZso(֚xM467uco&a+$IZ{Rhl5jy4l*|x{tQׁ~1i?FD4M,"NkhG P>fpWn]UE|*wF2](|趇/ȿrS: 0c'gvFPHBb$٣&%הD3[ qR![`gS#e^44D((XXR4eYEc{4 X$#ze^^@0LC AC"W$"IUeCTR[|cn@nH $nNZk!Ѝk8Ivͱ5^6!>Mַn'֜a@ yMa46XT[\ZzZ(B!5DKAIz>{?"T<ϧj-DDZl懷7IbrA2t$׽x&of~}3Z$(w $CQ3FPAj Ma1ZC2X!(SxC h@p(1eKO:5[zp 56{8 WI#MH@˼={7A_~T!F*1f@zʌAb0HVW LtG#f5:6.;F$徑wa==:O bB7853"z`iSq)V$lc&˲Z""?=sIO4m =u!Ԑ!(T snec A<%27mYc/b1ŗ8GL5&f;?/]V)P>e;lϊwXS'YeYn,QҪw+%mp.t>Z?z,;б08/Xs .LIR覤LZlKBM -BpI`# $U6*4dfiX.Ih},ܪHAH.@ 99͉H /,FHּFDڂ%B-ZkhZ$m،aKDq<<͒F8Lvg|ˢ;!*3^pe蕐G"畛#VJ ^;w3Ip#R7296lq<5,C4e2R=Ca.K%#K'/LtNCزf [,{G5$Fa>P6χc;s~&Urݢ[hV`Y43"0eO8ϫf/\a~xq>?O_KR `;t~1 - N?C oR LeYU =+Nx~"NKyΝ< }λ@ p)d2H iK"0LL.i@'Jt֙R:lށΨj毶Kzq2aM:Le;h IlN(#ޮ"ltk濚@S Y3xUZ'՟"ܹmv¼#5^|= muWRL2liHF3 lU[&v-V fV Zf'h47Mq f܊h^قHőݏb!a! O]Qlޮ¼jNȒ]* )DO*O']%jN9H?[nKzEؕ'э}CX W*^v N$t~UJJ)ݻw s.Md ,#| wvYAw*RhI8t_؆ iHf"Ci%WED]:)'@}ze,,sf5U}:vFFwMc|?k7;7,6C12]̻l>A[)]3 h'id?޽d tcF74J&E>plĶ^FwlAS1$S֕vNA(1rg@(Be$ `^Ɉ_dCz 0 /H;&$:-V,'Wor-z-Dq<9JwYh"1G$ze޷mKkV; qڒ".2/n*5„&낥;Ӡ.^"![7BA]CENc$(xgu>xU)fPR-Ób]%=nx=a;$:B{:%IjhTWm3l}$!Ԇ-5a8fa~ғh4GщCK>2.QRJm`;RȧiOӔ*IB.yx{g>,g:&OFOfGD;FB`m·瘼9v[}p_QCޟ?d,hz s\v#(0eЊ1$u+n@# RQ-2Ɇk1Ĵ'N҄N `IG8vPEnD=+rǝ)0֏D7zrz17PKgIn#[d#%Z߈η#xos@_cЩdK977Sa=Խ~x@{鎅_lvܵ{%B7ց'ЇsHM.F; h9'bNEȂÚ֤f43;FM6~dDЃ:PD!;Nx zv6CA8;Zk Њ7c9H;C} F҆{05tSco'=>>X (ZR&\$=#`%5%k-yb У~vOn`Se"e\rZ9M^ %rZ)ʜXJvD(f; &Eo&|p{a})er<{Bk}'^TKiÕKzCϺqS~xMl'j}6Mtm5&#΢k1ufA*%c/p K6j>L"TZ$wh 1YbglEkMɄ?.SRZ)9Z,4-57xB$Ctvdhnn)!c{; `DiP0-SlR14J?濫\홮?Ei8|?x_̰C9CRŧP p X` u+/u LKy@ IrihJLA(CF! Fq$!QKID[&)ߝ~åxjӹ['ya>MUG|t.pR:1bR(LSV$"чwp d+sET@@ ?uҏ s #cw}vI|P9uO;igϹtPMq2zW=~^,zqe\81rE@XOܔJK'FDXiB%zC'tߵs3u#],7b`OPl8}hW hYe~Oώ.nn4D(xR8nʸ[}-T]CbI2"}W 2sy ̖RxCRzVAnѥH>eRF]kKI :]-iW>F?#l)'!rJ}.J!/Dnĝ[U%/3XZ-DS&q>92s&6Y)`m}g~%c!f$o6ɠNs5X TXܬE{xa$B]$;L4R 65ԃMR ]H/żXnaf0p .)H/r'jgv(^?~r:0r2 r+6IUVƾ2hx2s=]?d ƧG]o;a9I,% =]2Z":ѡOt}kfgw=dWN=r7{]Dʑ Д5-DιcYXYl[r"S׳ .v/6æ L؇t̗GI>`cÌs$712? AM0e>l8=_oNgm7Rb{,I˗uaHf^`$eIJQ fntv׫&5#cvkgĪ`纼b<}_a>U=eYwaP 承~ġ ~\k[53IZok ]2Vong@]{o/"dK0e65DZqt@?X/yr~~70χS1[Nϋ\抋mYNO#RA=6}r?nI1 5dx?4t/?:3YWCTndn7<楬j۶$FԤ7cR2d5. Ŝ֥LaMV*T6N1!pNs l$^DV{%#ZIm|!QDONuq}6L?||vYm|Fnj4Ih`$"7ԋ3&K)4)Zk+!RHK\̺ܽƚ3kPϙe H'*u#響x]l_淊Cߔ.Qm9CD>:R,h6]rN#|SEZn2'8O<6=9<,b~8NU IxpFW(N, IM|3׋^ ɗ/ɯtKjE(x&_ Kd+;,& ngqhsEYV"9$T" 2KR[= *EFDF3 1"@G3^ \$iK[ 3R̠DglEOv}ޣN$)cd;V|u4p=tl8s~gÒq2f"Ý7t hJORF_JssIȭ01@E E߳3 4ƯІݍ :Ȕ:2(2р 08l/'o"ZW=zp=H)r/I}[rÏ7݆,wk撑[7IC2܃гQZ O\a$0&?iR :kVH. [֍v.?6$o5?UC◦S-Ȭ> `4 IDAT{!eZzћd2鉔I$Rfɥ\ޖ^1̹tWU#"fv0LuVVdd\<ܿp|0Gk4=C ]c$:zy2ѹ"{GIe^mFb!׈ , ᝐ(C.djnݖEYVѾ?zzsYz8J9Ͼ|{a}u8".%^>z"*` p[Kv"n2yS_!\8L12|SMPT\/}qvn?ےRo'st6gΌ#6 [,.\Ft\y4Ah{ipx&R@)!KTYAtPÀ@K8f{@hnSFJ5"cSK+,SObfQs8F$xL{KMKh3B^}݃.эlR/N~o }nڋ4SL?F2`k)-(He՚)IM¬vmH"A UM®eZkQ5tClO;8-p͹Dý)͐ttr^Sk{YxYH%L噧f2Ƽ1}F䑢"S:D)hi.a; [rb]tRK}^ăaF1s)gvr!Er*WyY~brq;|S`˾Q6Twb^mV au9_ޓUYD~߬^͗#c/JTHPES=hP@XfcuCAlydSYO4y#RB @ّFfO#fn$M?8'[DL |top,DG#JTJfgCcOXnoʑ |"}+ˍ`ɅX(Sk?2SfݼSSsll6!@:×y>\g`Ù8>])yJBI "d7 B-*e+%U>@htMdm O"ѳl0"3,0Ʊ%U5<>߼O\ӂPTHZ!>Dh8ݙ?#~a̷5UMy[ YA o XTlZmKJE:4qqI1F:=z)C_Oݧ_ @jx\u=߽po?<m^BGrs Q6xe c%]〨 (v4ntn; rCNNמ5?jB]+υ 83]m(>o1D$ݑMTPUwz&KLC w\B7bt%XZ荺O׻ 8SV+"Ź,opE(4a=~OXb=HJYUEpG0ܢKZJ)WȢJXI[}|y(p@Uk;¤򂎒FPJf1BU?0` L&g{ADwj##jq!HF?aINGDhEojKd zDK -ȖuBc(E6KlgV-ƱZ.lH6A ,P\(QBr[[ta?75dGC7T4WOU>bPzZviέIIՏЌ 0<9GlN 3Zx0=Fst0:.Q3y u!K,l^ND&aL=QXC$i&!JUY'(n!#KR/ͧ?z?w_}H)fNe9:և" 2Gd>$Uy1Y'q?;2 Fay|nX-v>N9?{#oΌ0i"nZW,Q Cz4EJ 2(5r2*PENGys뺼/ QwO@[ EED~7y{>_p޶ӣIiOd>OGj꧖,KfH)xtoL/Kן}L~:׿4_f5􀛯n6 K tv د@  -d"Da f. 06DDt9nE !]tG&"[KS,v8hR#|2"#dc9\!@I:x5|ƴc}))L͌q#2sZYZ&lpV%#[‘ꩅ_e6 as-)ܡ>%M$vmZL{dj 75޶w]Hz ێ6[~4vdK5k\oj1~!sZW)8eB:<fzr؈P<ȡi'0F4$B A/: Le.{?892<2@-2ԩoӵEZQ">g˫twO`JXJYҒR!H Ȣ;1p8v^(KYvy>yOr)U^âav-WߦOjd)EeYRRw˽ХT]Uu ^]K9RU=67u64h6Z>6TP=dCT۲4I.] 1JtXm4R:y ѣݺ v̇ ҦG0R+T`'\2 ~Zz0НJr_^?v tOx׼%RQB]6d*_F_gٱB2"UAAXx8ipGHNg23}D$ft@I2]7HoL{@t)]9TIڂH"RT\J)R3񊢒N3C&Qëwه;U%nv<pmG=KK;bp̳u*<{}64fc>iqݘs%@D4-~teSjv(YcmK4[N!2Q{6YR0@mL1f>e\7p)It"(˺)g"*|vNlVNk)0}%\xh,Y.ʚPM}U5Ȱg73eF|1ȥI_Kǧ}RI7+!vvUF(Zƹ{񱓑$uăG Cdd()ӱ»J#ƒ[ȋ[o1$<b;>֏tBjp Mڴe^]7u Ly܁Ǥ/F~0F MAb9}MSB+{xAQ"B*bZDR'aJy-xzۃ4UFs6o@r S8Nvy'o~ᗲ:?oFw(-=kÐ/Qʺʲϗmۊ,X_ߝ>\Y.C_mGf_ݕ/(_@Wg/xP~S8MKe=̬:R%"^ ԭx?^G̍EWbŒaI`@.ֲ 5W`tOk#ttL5Ε`/`z%C$) Y/rEn7ܟMY̤6F3,%t " N9fC CZLՌV?o8Y"E!O=ʽҺkS#Gm6^DIyCEc` wi0cvh*8j]I$BriD$ O׌| 9( ) "1ATKY׵b\4 NQHJJ_ȹ|P/5ꎺYIn7#"_ۈ*]yPQ7"Do:yX1 'ɑsGLQhȮp_׿"Fp4wZU޺4d:w6W^Zϕ&q1ώbrx #n--hE2ia)zQ/?K=rq{c̠7O`/S9mۘYy?ўэ#`krS-aoYoP)(+[ތs^,@=9옿<=ww߇<]콇TU8\mUՖʥlz|p2p!q#>=g?9t~i}yE?z;R>2>:/.@}ES1" 0b (EPR_^"{ކrptN<i1?h%Ø   I,Šnc]xJ PJ s- Hj^ZK'rETЄeR$SW-T]b d:kyJ()%K@5k)u [ޜRus.ן|rx~>J4$,pC 6GRBzva]Rm/;xk:;EEmle J 4\$yI91"U--CQo\F0^#/|ֽa~)eؽL-hE 1xbsB &BI00cf] gz*L 7@ R-H#qq]H=> ;:x>Ջa`҂PXsw7HLC/@E mL8(O-Ubę1xaI+Ηs&4le _vM@^r!GKd9fLF@0gOzHXu3,@2%E H?pFUDB`+ȩ2ذq=);{;GCpYLDòTD'=3X0+K|uM":J.t3dzμi>|"#X5D4H๡cryOZDIm^<>i"jP6Q6i1b>Okx)Fs-Qx78!mjC3|9.E|a ~ D)CMeJP,/!}1 rK&rS'%N~fq&> ɷ_iY7'?ײ~o.V/).RD""T)Pc.Ŷ|-zXnEx/+GB-" L ̒,*Q39yT˺zW}h _k}oپVEKѽRzKDoئ}P =0d]6LG1MY>(:$վj- a8%\ A(BQB"]@@;E2"KY^.NG -Ƹ'D+mV(_mwv| 4cFkt󌢍GV@Ra5o,j½QY?1wTUD=ݗx?&LRU;٨-hq\nBu8{D ءJ+EVzPGغ?<>R{ ?/~ax8{|||r˭lJ7-YkjN6ѿon$݊Jr55/ΏBkdcm37Eͤ︓kH.jh€F&Y銹+{oZUU `<'4pC?i=@jT~4ʲk9׭}<߾{\-"WqoC19zo:Ɨ:f>_|K}f^E64Dnf#A3F+j!]Xv[^n0 < ~@ (&UC 'c&Y5O0QURVD[)(n-"GXx]IF"@E, N_/#PT\R}k]mQ"^h-!?v~jZG)G*"0;"[E0 IDAT? y -;,"^elnxEvF's)B]^z| \|"͕Dze&g6q]_PܑB @I3nMSPt_4]uޘv[N5HaNTkz$MȤi鐆ppQٕ؏ty](ы.QIRn9I CF<4Ra=Wn#|L _~Jr hgW0Q:8$[Z $c J3yǭfy43Y4c 0aF38RvTδ"†W%Or-AXp! @wO?h8۶q.yg׫il^cv9c\1xn5,Yde~DSE]Л}k>wsVldj[8nn~*,=aHCRL`l3ba_ȳ5ЍH́ʚsm[%KlpEݽV>xWv޶WoNg{8]TU7Du 5 b`hWw{Xne-c("KJLsu^D 2d59y ^NWuc>ݮRo Q+"ۄYޢT$wX4n4ǃ\*dB!%wc VoT3p'^̸??nZ pDZ~A"XV7_li!k#0 F:b'<޷fsiwQ4Z{0**Z@D'CKVj-,Fc̺,`OQH6zv>eSQyi]snl1:>#ɹ*KLNy@JQ$+,òb<4x TC Y[f)\R~Q]٩8/:~] yZ|{'%΄(XR'E+HqnMO=t6sD9 Q)xq|=Se;lR+ýoSY,`>ܕ:Jr?"u"*HQ]Lܩ|sBZd@6mcH dtO*Y$=#M#tBګ'ߟ])$5x.,ɫy #Y(fMD؈dLed$+nػ·Ky;h d]VD&{;Cjɤ]92S/{5PK%=ܹ38݁M SoN4۾o@@`WU-p8zɌtܹ=f*ВfXFs $ HfK:hK Sx8 "wSXXD؝SVUC{emRSU-fOEˇs8w޽ݹPS) 3K#3 zh;={೷I-GyϿśf~Z9RI4AZX :yNzn݀)2<݀rEmv](d,/uukT f.VȲ,PG|}e É۶]Λ{r{a7$~s奛Sj0C\7ϷA:PJ~y+/ef]Ze,3>sW#dOv:ο o\~<\[[Ncdsh:BNhY".T;պ3~{|">2~s>xng]ytt7Y$hЈ̒$EhU^ޢ>B@f5U̓=ky#LG wnZXvs \ GcA}~ѤWX _p\S]qm έ_g#\q{tkgbUIޡ }ӳd~՘rD\RT|`@ /$̽8 Zo/!VwKR>}ؾ<oK{Pñ7qxY|Q_w?8od@%,.D*Z2 X,òؾ"^w첉Ⱥb[ l]^َz*Ad@\8IpwRi-L`GM7PY ѿGzx+` Ab#gh:2$b E (aЄ[ {G[{):G?'H:RՃ K4)߅D(P(nu;TDPzl(lkt!4.Hk;ɰWJ@d_n@ ISSOՒQytck0H<2%ן1 *wW9>Lt3R 3d)f[]J]aNc| A0,SB" %y laJm]֡A$kiTADQjszp# "c3so R/x/_'W>r,֏}ATVaY+\}q=[cϋ)"1NzxPH36{Et=)9sBzFebŸ5A3 8`iVv13kʽ|d88q[N6׷%\*LGD9:˥ ·ݙBn(|ޜs$2'MƼz?߲*jwCs*cڂoUn_l8iݏzS㣸W^l=7*C1s,)L .`uLdER2PexzF A}2y<`M&!z &l¬z(cϢZ94`7OW-"J.IRȕRRK{i]ry\;-}ptB jmh$ݹKZUAC;bdEL*n:uҚI9})ls'74K>7馍8PX'5U\W2 xmYX*_lϢy8ܣ8$XdIk{i CSKiHduoai3 ,8B1ZV/oms*zyݫM b; ~dv|Wv("B@*"r.;ԯuYwq .UPα`8RA D4jY-0@xXu7 "!D z|RUf$]1EӑsDxhf'u2 ! :EQ65hhQM %-!F AEqpuHaY"t 6lŐ w~}snG"&mi@ti"1s$,p]CUKu}zNĠ[ַ~sCv XXcHt<٠!z QA Drh3ϼtaaNjd$c q೽;s4uTF}Wmۗ4jWFyz<q1F>YKz{#~&%/⸚IOz3a_0m.5lMsrj$""8F.ZV[dF`"r@FHPiqνY^^a[%[%"04 @juv2i%Bӵm[쎦(ZPbUv_QvVV}A )ڐƋ׮6 @O·?.GGBO>)}m^}wlQѼ|mڭ{pn<р;d?$v 5 d M"Ꮠ玽Q~K߲|j}#+k"T$XɥJۂee54EʆW&F"(gA.AܝP/_qc($TnfRfftaFI4zZP"ۚ.z`UqVT[^_+h]Y880y4"DaZat!\kO:! SJ s`3X|}fFBe 6," fGyBoxt=:{C[H;<%1zzRn^#ws0ou«jU%C=%EZ eزTE ۨq7x͇ ar$Uv%=g1=RW[e )םilϔgܒV9x2'ƪyIOiys;,%a. 0*" 7F~(Y8n-W27!$j5` E[?!e! ,3a5cѭ!ޗK T|^(]!I4[8UJSF h;!?B8ZPmGW|FOڮߜMZ/C!<:;繟{}bmkdz6;+zjqU~CSJ"<EKZ!0Fo~R\4 nA=\z tӱJ-ݧlhw_y/߫X/Zo/T`9ogoO9D6 ERF) |[-yh%XEI,eYS;;T$-^X>E+`T*i17] ihX[]{YB%rs&+dz;3>|jw8YQ!HQҒDDG:S!6W@xaE an (RìDcY!">|l9.]pT;Z# lFP24.1ppw-r5C˩????_jyʘx7sBsw-zm֨HAżf@` <'Ex ,Z(D,%%J "+s-c8@|t7lAhI2"^2.I=>3 Bç-b ,;("rd !P<&d|U]궵>5FiQom ҅Ӓ.2:H|'nx&-ʳKr3o[Fi)U2sQ~ִrYaZ,(UES :̎jQM 0%(Lȹ'\D:#{2J[o%]>{GoV_ D.{{\1;/\+8 B.~I}Y/_<]&c}|T[֣f㶅.G~"KnoO%ߗjL]~!HٿNQa_º:d)0rZ3)ìϖO^?<~V/8?] f.h$3v-dlD"Hޣ.=O/huP`"Q߯j8]J9|o}{K U8p/:"-CML3+e9 [mRqAKw.u gBce2eq#`M@MjwLUϊAЁ4t]#N^pA׎H᧾ H(UN\GI,"t&$5)ΙZHF zbRJO!Jm{!V *Pj&PzbS^. ,6C/YUI'PY (H 2 TZbQA:.1ʶ_oکe0|ZZ3Ɂ`xx| =`_#!AB@E#)긂4<6్ ?$=EDD%Iy2ͭ DjY81A vg#[7r%aFZnQqRD̒U=IǚjVUkݏpaG(_ir-wHgyVE`1.Mo}7F7%a;,B\fՈ8"."p]eW@X6X ţͰ}¤`hJ߷Iɧۗ+@mB1bry sL}ya;m Qx\/ i35w2{[E|W}mnWK8庶)uDI}xwS[L;ug8Ѩ29EgUMIZv:J)&GXj>?A@M$fODN DB]:"!a\n"%vW%nڷL]z@4[A%$Txupk0/|҈L攓69Ϲ35ߨp w*ܷ#;b d2Liz}v|, Q+z4wA>bqPy:Q#^6RDYl)S(%p.l+=~qC+%k)HyMi4ei$Rxz]?×gw7o|ym+}YcczB;1~|9{ފÇ?ay^?|/O?@42j d(Eu vG9BvQ2 IDATb|uy`iz')M֭lo湔lMC钿qrO'"!!Bk\=ժ:7F^;$Ozo[4wX#^$tڳۨvV/^i26j2T_ { }>[ѭG{22< S`N{nL~2p ^rgx ȂD8Í?{,Ir}GdGUuu7HI桇dZF+-$-V&I -D3HԘ3$A ]]{of8y& [٭P9zH!|TxT<+hIQ*J# j/e 彝!) d&O\= W9~_j?uz%+fNWvzȾTljl:eAݦKZn.LW7 UZ<1F_ EDR{/EQWExOdgٚFK@V'=Uq}nJmi,`u~Ҟ2XЁ U\k е)%k9opR"i `y&2%T k̠IjyT+GKD!{A! #<%3#BEP3iOW,*TAFjC-{ 5 o;Tw,28L;(- \;e(@؝B{y[7Օ*s9_IqQHE&v8ÿnW%XtIanfbBp~414-uyɄ_E<+>F1WOEKOd6;킀 !^ywq/n~$(narHb48 hm?=B jr[i|=wdHiyN绰 c{C 1#;R6˭ħ߲a/CROw ZC4hQѠ$ZJqv$Idl!DPv#yNF{GY$ zgt@k?ÕEU "FwP@0f@`۽*dvX,P!4 WԳG!USx"C!T]E +"g@sg^JVFֳ՞>^wFC?alKRT&Tc vjpNXmObъ8[ڞRuS߳ctz }wb;yaB.W6\顰r>(%jV 97hN.Wtj _'ጥG{@^z]ިѥP:kt ȫ X8-5e9:NӴJded"q~o]#N8|/OeFH I.SQ/T_!ci>eu{7pE Gxr' Fc~i[QT4fZ3 oy4c x2@9 ߋ;_b)^1Y=RHP@* & lrME\Yu %&c xI LBvt@!d*ExP|\ oI3ggҵ A]sk ) R4VJUvS)<_톇4Di9d7{oQGC|یT(5 JJ2_R+6WdŜ]OGQ 90P 1@K9' U*S! KHh"!1#YK@p )4CjV樺׼4c*!Bu}ɂ.N -eIlC/={" JYV46{Y/TORb2Y3BJKȂEi'L 8[gkٯ J܏,>`qbVaIhBHy4y7$E5֤ݭו{OSzr7/g4zy'ʠŶ}iqBXq z %Кz]:$[OU1r1ai=h~XM^p`(]1iYfˌ.,MxNL()f^ł^@p8va)\xW)jemP%e#:NfSa6!P!Pu%s!Sq:@Cw  G ,n!K9cQ;U0D!Žʜ!fpRDThGwsJ|jHE55Bi24g2Y $%1MEu(A5 AL rhf=^؁6ܟKb"~ Fd1Iŗ`[3<_<}z|*f,X ݸb>,_O^OflSU^r/Q l>-ܓb!O$ID`Mw #+P{lKGzNi .dn4Q]W՜..R+}cp"v/e-*.~.RȺӠ`=RS6oH WO+MUv~x AE&WRl?23b)7cW7nNnye6_Z(_ uS2@DmNQ;"sU%>Xd,FFyԝ!Xy1rxЌ<1Fɷpey ukѧ>@3CД{wՃo q-|lC`*#љ̔nO- >x "obwzP߸TtUw?>[+dQ*`C`N;.2f>S{+{QWk XNbI@@-#&D.ȫ*hdv#UMըr;fQ5Sd. A4G `F e "9Bᬚe'fr¢j4WX5rI{QWs ذLfPgNtg+"S7"&nf8(*fk<Tp.NBJU0:~~}UA4j$i&=UMI/D IX4A !0" ʋY2y CUz7 n,æs`]muaVjP\O<3TRb rv@OH_cRKj_9[I'/W) kw !ų5BDlqQeCSh,N'o|tEiwp#Z /=ۼN!H܈VS{QosZGN+"@tfm7$ڬMmh[ M:q9-9}7t`,KXFfՊg[ӆgҲj`8Q}=^zN Qv,BWCSW1ƻ;UkPU[ W%bJs-Y|Qq3fȢdFɯw5 颠,t]HubU'P" 3o`WŪ7ŪF%C蔚&% 1udUYQQc\ NQ KknbJ,ܶ;dt6n|q>-7~¥KHԔ(I=! UûY9s>eHPKmVLm9J2eP$jj$9'0ؕY#<?BHb b@,IO//.d* On /;?xE೐/ǜcQ"@o..A'}7;>_&^oPIπwoL@Do@1H 2-Hh! Qpdfs3@0Y9?l^岸;ݏ|XtN`_07 P\(L"%8>20Քo "-:59(QmC'ڍWXYcF$bX9/X[k yл.T.#lYkbwlO9n J҄0fP(a~8df2I ZzZ-&լjf12DKz  T @fR\VcVTbTTAџ5>WߛfIQdp6̌/A⼇?_)a' $ە+ =Ov66=ҳh8/jjS )* 3܋{7?ҏ`Spl08flZ wͲ$?p?ܷiϦ¦PU00%fsJ8Eِx5֮Q^Dj*ΐ#νjvT}76t^VI9oa%OJaha*tw_؏ܣ5Y\3ȼl{ʺ9\/qI:{6Ei~8ܒ)*|! xJP &T5lR[ڻ*=΄԰8Z:<}Ø)|a+yB`|B9]װ&pbq>D?\Z1U7zP{͓8ֵӃm8,3Џ p[) 2 CVzO^2hf0Um}*$~00Gf)ÅV̄P  sbcq?0'Kjoy<7>M<'&5B( i~Tez{qpGïN?_o..XQ~S~*chHSԢlUCi~AGr|}2`ojU8t7.p-xB-/oiL%nܙ,w2$Cp*3./ n8v,Ȋo&sCm"QCa]2 l;1Cr4gP 4 ^[*}cZW.EͭPC:HTYm iZK6wEңFj%mRtK8Fq{ilJ2jt;  Q%' #+Ua02Q2''7 mpJ\(*QcIPR!I*A5Z8U5E,BBrRhȿw<&nx0 Lʼn8IeF1sM>j-#=8bŠi4]و ŸaUjL)8Ti+הTdQQHDd{_$5Qߜ[0_Z.U)ڍaa!Іi#%NM'Q;DՌ:YAw7a7' BJ)F<퇗_χ/~N1l~hT\쾦!}͓!/n/؞wo\_\>!?n|Dd h?nF߶-#rr * \(_ 2g(~_4?qh7~IN(2 S4r Q:TPhEpc X2Ngf AN&!oC0pJ٠!SC;ADh:L,q& \-G rk q %PXлX~pP5G%Mc7ka)FԕɩdMJ U;-1ْ#UXмC,r#| hX*̌T 1-d%rPUUg0 Ae)(:~g8H0  ] g˷J CXb (ͦyv]CZ0o^p$Pu$nsBΖ2LfP9[fRPAabRQiMG?x!%GF٧hY$_048.]U"F ټ[-&fwNeF˖fhOz|3s"%AH: +9MF p.)\hR`bZUU$,y[(AD3$KU4\"؅oRlDV,ZU-=e9AƀC6*: IDAT!ncH\D}FjԘ*U!W!T}R܆@p%iɻM)E4#m~<VR7Qv\Vk.T fu)JP"qm˨UA$뵏&]@4veEp\y8j}yFz6PQ UznU׮q Hhp3N:*S<__7S$]udo:'us QieJ76zXkSҬ"V9ȴ6n|J٥l9DG(uE@Ի !}JA >2KQ(cL=`-q+%l@(gan@$\ݾn16MA;J`/D(z; ].(,*FtXZw|׭ʑm;"A_{Vi'F Os @r OId)C1Br H l&@e KYCda)x,)b \ZZ*s-D<- EWa(xDsvÖ0y^VՋ&Ƨr#Y"uPL % Ĥ"@ A4%zo1ـdHj$hL(zPj1K9gH[ :U/PXӾL*4ËCrR@[fwYi_΄{\O.h?'۪4y7J^zt_4#|O)з@shPUgOb//_D{t9mj\QDD\᪊<{ @Yk{Sxm%rsoi,b 0˽鰶C$hrm뉱өu\^i4j5k翉%iaYZ3Jx}ly 7C&SxB;KmBj( ˂ϔXn3ۼ8@! #1,-*mYuv?+&c9,"h}#7H_u`]>^};6O Vu]e^6hbeO Uǁ ւ6 Xg*WygyߪDi=h_O)Gt?# fY8ctE1FqoP"DB"⧢fS%VFYtg8XAc:Fd UTOaɒ̗q_;xc`A80}x7xY`bӋY!mؿTvWS}u[R>#Лj 3T^c5l!O#0/;݋Nvq-vwXՃ&<TQ"W|gX`"8DK20(\wB`! ̇lY&B kVy1yC s6 J%}*igM_-V =G%0 %-s}͸Urih Wɮ"%OEMoE} A嗱ltONer-5;xKͬV*Szw:Er#'5vq\)ï^Yv,IhEOѬ9h^s5OS9B4JS6@Sf C8\3ã9? q'6OpBNK@?='Y? W.~|}ghã;E7?9]\|yoxqpD^"kRRE $OnB Q/>p'RUX,U/aeTkYstA7_"+=tPMf# !Z p,jAU$7T;J٢rE>[S|k7 K0v جe-e#<e[nqrF\DϛC]Nw`ii"Ofczk4K&Ai_4K!RkJFi),kؙUa@ϨSp(&ҒW!,d|'ߔ/7ȥ}`ɰ{KCȁdd8rGZc.C|Fቖl3A|^>K쓐4NbV\4k`{T՛{΍ڵf˾d!$X+he7:F!h !HPahENaPCTؕ&O4e3ƿq<;EDuO !MDiC8탮 CP|Ɨ#K%J鑝p=_UNmfdӴ{P2z*ZU,rjWqٔ摻(r^ "J%%Ds/ Ud\i 7&Rcނ|ι#ьf4jC؆+Pz~ż: _"]ͻ6wgsWȆ~9-EuQ6IU,嬪CT9K50aqL)XwIAbXPCY1e>)ÝUBs&s4?ߧLI;0S!y0IA~mERK`V"g0ٔ+⋺ٿ|hwrƋ7`fCw)1ʋ o9q4Q] 5o_Θ(} QƇvoW=RPܦ-&H(,D SX8P\Hsl@,& ; k (x3JBu0at$T Bwh_e'QX\ S$]F<ӳ=x\st`"éeP$PB:,܂hrq(@3D)A, UU""* %-B YaV2)4I!%ebdp?3EIZJY,՚!nVUVa*d0O_|vss8ު\T)G[|؉z.9_Hqz#Icɭ^oC7O6uZp{j@$so\sFw/4i9gt(Y^5Op+-J҅oFPCC!Dmn .xOFbD@kpJ)Biuƞ8^Q>HX߉n47qK[RKY*tWN'mSs2f!-/^tGwnq40A0$3``#`g^+VT.'OgiǕLTl&zv43? 5a~vxd7Ы]0_}{qX.,77xΒ(K7O~qDNǧD (į_xҡa63p)x+/c=%YP 4}D%^ 'Ԭl:n:x7w[8V"n(C h \5H"-a)7ymN鿰7n)H-s !T%hN)`eAÆM955 kKCDowkViPq Mhj^׏TU:%9 ٬r?%J@$3frZR/E*!Oe, @ѐ; OYֵVV(Ο1M_"JoH@(>~\q\8'b/4tA23Ej4($ "V}4qwj%DCT !3̲)0f[zM&MO{#Ny]q|8?W:= XA Xp&H- @ -հI., P ̄Q22h HCr*llqWcj._S*KB='4~BF#@FO6fh􄨸)#0pgiZNuAF` .AA5(xD+Z0UU\&Ѯ_hMARڳf㞪4 LV koYڟ~m2TV IDATՃ]:tOjð qqBTcVhaEtt<ǩ>4On/)y_dj43Vt /.}gk,z_K̟Q$TcTeo$n`?K'1lxJ}"B}mod[utE̘)BHbdR"RRR_ ̫v&HC~Vx3Hu+;`^12ν`xҵts=/O=%7ݨ]|Z maM ZAYY3< zC)197_[#WV֩_| qze?:";߹iyTeOeo mx6ah8P6:u_0px1YԓEЦqJF=o('@ݬRLOubt S͊ϋF]joԭY> ݒcu>lScu:P[?5gLZNuDT>aKP)[q+HlsxKf:=%aaA\#xM!1afB,4nWj_98mԻ#-g12 Fs˃ge{.I$=<"/٥fKAu/=]Gu[r9@+3LU ,. ?8}fEhqWl ^EFu?Omx9Tܳ*ZӐu'*RɄSRU<$c_&-9RTP"sUލKY^YJ%-'p,,E7ǟWӛs紐+Wrz\䎗2ee9^O^o^~+r{aCtO$Ltq;yy-4[~0ޝ OpK,9d˅___96ƺcd!<گRm!X*YӽΊ zf0K UTɑX'VCՄ}g\fbY/׳mh,_<ؖ7OUIi*%X#S& 38RmI8 >5{]8k /V*Ⅴ$SwE4yfnf1]\udx%:U_S!4HcC$Iib3- 뷤.zzuЭOQLԊ|cX2$+~ےݳޞ*lGsr3suT1v>:|-7ǫAO̪5$I)i4uQi˘ %9MS}ifad WT;fn@n+Z*1hp|G߾#<)>Bojk;K)i\Mrjzaos(ﺷq }&77(B\!IMQ[PY\»RJ(0w=碩6 E`Ap*I)|ӝk-@0|L@y' uWy%4Z;<ҞngKyk\0h c1oc\hDPol4^Va`(*m+/9$$88ܝVF0i'Q*C+m ¿q%G6BCaLɬi,GK)_+z/^SLDuv:D!VxL>_|x_wxw'MRϙNV&+ }l5Oz+rәQT>d1X('+P$q ^8n_[/7~\e)5z䮨&zw^OVm-,Ph赒UȼDZH@cW{B++C^@Mjx&/ 64?R'0ſ{WD0 ZЮߩkm~?0oGlyxb8qwsR Z뀔RNӛISJ ̬h3;N  WPŧiJSJI@6y)K$=nkKwGcIRc4ٲ~\XvlKN،<)w4&.bjl[ǯEQ72Z&L?$?omP .cPkdҳQxL(nfn): '!%+fj:R'qCTG>Y-??l?^_twezL{-9^W)oߚs{)V}gB>[v0Ae>>Q/}mP?JnzӰ:nm7;7իw xϨtoQs@!Mv }G,0t)ɔR).% DkV] {8R27r|o2M>q>E"[*c7gNG7ؼBF7J/i7lP: J\=2?X#)1xl]^! \/XOG\*m]m*aA8fiٹ6^ժTgmvnUA]Jv"AUlECw-# Rse^"D\AUK6WH.r p,¾ef.klF^'f=qK;n<&oq1mUo@Hyl:R}aJr>84ݟo^Q3آ:g "6#sL*g7s)^-P8Kq/fHP 8[h jrtLv2YHC,)%bJ?|foC>wb^ Ǘu6gW;?94#ّ͒k|*P;bV1b~u{υrcrzFufj`jeh@մ躗<3MwR͹JR7B"f] V15+D[p+~#̻7F*e +;'ay;f Zא7޷nwUJkGVZ]ADjvqg1٘[e,g"4Ѕl)%Ē (t 78 4HȾ%Ti:|ӌKGu twG~J !6AI/8|Ɏ>#WW9XG*{ d_qmv^o~8lf1: o]BKHd|cZx;I_ɭy'N߮z/@$M#ŇK}$me feYJ)y12},y&?ź-;a0[9~u=c< hX)iUpE<&Pvwc\h{]-ݵQv3˶V2F]\,#&Up)|Y`5t6[Fh'AMdpr%igI[tχCj#k@eD(-إw~ǎ}[nVAY ë-[,v։$MP.wwx&1 J`5?t㛕aS~/0`:K.%JwbݓVɡ(f1w;bg^.6bys™8[yC)XN:nIW5K%e9}j?{x( 節_׿M?zxNy4I)$3~_x$5ZH z 0/+4M^׊{bэ<'綱bYBUAo a0d*.WjVnC"e`f.7 ζovZl[6tpE}-3Vh<ܽ{SHmhUnz;#"x7@cD=!u't &oAthgnPU+KTu(\Fȵ{VoFr wYo)}y}~*Qx_ا+~m7 Yn\?r+}kאX\mF)P'MҲ,ӉiIqB_qkz <=x5PQ @1O~BuuwiMAOґEoݿ)q}˞g.ڞ& S8ƃm$KV3WQ+}ZƩ; ^@4kzPؓ1RJI0/As;3au K4E[I1xsIgq\IdL|_9xw.Ǥm:p^頳_·n8p@7 4ȕB#.(3rqlE\;R}  Xl1a!z@O :f?U ّ05.4k[ILNGyz{}Fҭ8[c¶<ؚ [Q밻>P 7{p oT Xs} Q6#jS$)RC:<ϞAJ1|I`ٖbE/e5Mi@#o&@MX[5\7$C2;2pwX{}ҾS]R+0z˭ґGކfĈk'BYwdin?8o|:JF69ĸEPG7D R2D-=0ꗶTtwFȯ /RWSo J`n_ 5rMVTNLRdXwww-NY~J<_. `ł\@uĐH^U>Z;7 iynTf6i8鸃ł݊sqHw%i$jNt\w`'o|ۋwhN6Q b3&TӋKd<) aQ#{$2VL7FHv+LQ.`ÈB7p;PӽJ}~+5b~}΁9\6Ǜ%(/z&+T@ω`W_CV+ɟ{iv2ȉ Q@ b7%5%ZbHIY?K^j;$kC)ՒkJ5)E&w^ o*CV=P*{(^nGLz8(qYlm r[AhyYAa"Tx|bL*̍ܪ%S_p"CD%<:jfMh* qIk91! "NA, Ԅ<}*- .jjf˥{,0qELI:UGjR)@1o "DYI2Sr8;czmphfltP$R(dqW@DɩyJ;={ ̡_>6y t EL >C="uJbVЗ/@42PkxxR=9DB,Fot .-q[냮qYZQ8|Sĵ+\ߵafyY0>|((TZeDm5#>E49E=pМ/py^t9;!I>6sTa:CGܡwbmuz.t_iSzES5.,)4z^jJy-!M'wWd-męnԵLJ\}~?EiAu?SzN~Oa e9bul)/K)rl  @D.2l > {B' -l;4w:n`qr2HctGh\Ӭǽ1} i۷ e*(-JVwwsYHX3?K?+L IDATW[7OCL&l$,tU$J}Wd gi:&5afP>xwCR;FQ݃v:IQ\PR}z]/"X2n$5Y|j;'4s ҁ>(k7gg?ê?'Ӕ.gr~;>_E&'Mn.[O>/{/H$?>8ׇgPgprB,?9%?Lz"(iig~pT|C}m4#!4??HOGGB4ˊF  >f jl:BMdonH'Q!wp+nQo*ч]@7k|9=,ep{,(}hasX rHkESMUU݋%Ra2TUBwU,z% 7e]WiHJTujլfHT9_V9fZ~CqEI4QDg#CuxkbI/_/ |F=.|͸g`{3|(>>hW챟EZB|  VsG9qN C ZЙ7U/o`M wٿo}Uve8::ӻK+*hz: ?Z5HK4tDlȼ Y=6:Ӱp~A '%a/ӵ18nC}f?vM{Bje=9 iӈDxr,ų9J0|++a$`zxxJ)9u۰ɛuED Q`${sZ8cn'x[7o\6:X&_ Ưc4BioFWږ~hGo9[ȭ8ʣٗJS`b$ ]ŪD'tbP]<[:t|0'2,9J6MۃO.yh6>OoGzDfȑ8^Z{ǻ(n zg,rtwYq"RfH_ϵ9F }1!#UԖ@mP=tde*ЅQfXx' WDxϚ J5Wp|D7ڨ;;CO:n]1$N`nPr0ЅC7wg/`G&aKhqcKٖ\ J; 0 N3+;I4L\fbdS-`),rfYZ;a0y. lPb$Tح>aqOn'(GϷ㻻2ܕͤMST:/ݍַ~mTb[u`Q-r+wz0W[;zw .azHG|Uݼ(}[HAHj+n4BHG}ͭ~X90ƒ#璙ʚ[MלzYf56[idqtcW|ЙYޑLdsFys\o\7+|WN;rN ZUײ1۪F| ky[s-cNj~}ߪNmy>{zfٝȉub:Og/nHclAkíCIM(q[ߍfYtFDfmT6q4)/[RJ%{]䀘x\Jv3PS.z֤6DU޹6B᾿b[9&d/IK9D%tnaebXD;Ԃaxd]n@Iji$U3QM~`-h N:LWq47E%<" #%*}/7<]O[!fO<5X@^.yNOA?fT: 3燃!YlM$]T# E#8.̢܋M)g`gIc.|zal{u vV8IP\SaD\cZ)@4xW B%R1Qڵ+#Qաc^1.Z6ض7UuE>C+ X E3`u#rXPq*-Uvu"DDE -HקEDTȗZy055L aYtideq+9_.e9+/%4/eqgH.U%@3)&aŌ  ܗ- 5;ByF1 F>()R%M2MPp~Qxc0qss ƴlcN)aՁַ;w7Yk?,3/VRr64jD+ 5!"r7%J1/K˹,KJ %M 2 .NT/R脈)H@}Eiv ߣHH!(t Lf))p!__DjЕp8k[$-Su}_uya mfi|K 䝐zL)&)i <"\C}RDz @ww[rs[PQ_"RcfvhCޟ`^l8\\Ϻz~9edc!iT pv*0~F_g3!\NV)H.iA8 yMUe !(mD9RbP,Kd uiIԧY٬uR4q M$;U]!e"(]dv9 EgJQDuE=4sI$ ]Pbѣx :q{Q N]ǵ9wxzǍk17[Q]f =fU5`-zw^WVu;A=+T3>xj_6M9管jϷՇR%~~9nm,?^ҝ÷{^mǃ}ѩb㐙ќ!M, H :"Ҽ{D?kKntkԌ d0 [+Vƌr0,T\""v@')bH~>E>@"Η%jV"r0++"t<)%ŰƐEҀb]Y)fҭ3Iyqeye/kkq6:tpوL)YpB!ø"ًA7$fOAoA$q=01JPTӟCeIu0X}^ &p. ӃCb웨$0'5' ^ &R C =_p ,}6gsp٨%4z6/ܶ)*Sxq˸{%]z4/䄅~opTO_onvTPTy%%d}lo~wى)Qo3$Ҽ ]wvYdg8X|~B/%&|;|/&=ńw)=,Ӵ%+ߦuQKnNYp1 lR-%Ѻ tUQ+%~@ gqIgnV9.N͂G\"{scӐԽH 7] z@+%Bʪf{J=`Z7^_}[ּZ&ghR.\)EΉRIE9_K2;|8i*NQFj::<$]Z7J i6\Icj͊ &*`9&?r8WjĖ/QsY )\Hztg,e:͜CpW93Kz ldI apSՠ:R9p3>ЉŵsJR)ۇ9.fAKb(*܃r^!<.F6('8!L^7 chqݺWJV")Ŗ.6DdhV:ϹDNpYiJƆAi\rEYRKv^K^o"x4OӁyN: J" s=,)%NǀE=_|Do@e* AͬXcm4V8z +Fw&AOS ]CDCy~Hט#7YI.˹W{{c߬|+/I?_Z庛Q {0 6Sf.n^CAjދAjvGpïc|zATfB*Xss`\uQ:P'&"IRZYx{NHkftqjL`6%p>$ʺ+M,(5MS SIo6(3t`yw_,kfY"g~]e3]7guµrluEyǿپ^o0FpwW{H/u xC9'Zt|"^?IO\f=>_|ꗟbY^}q<^c —VVv~dri ,_ ~2J?R_\K'tT~TN$s;xb 5+eFsm@✥;H57795!5O7žFt\nsw«h⎕ T|MpVb+2:~~WٸoGΔp,]Mn3 )L .&b",[,,˒b8(HI4 "z880vY +ARr8h2R:(˥[C$4v.^%|z8,ܩB}:/9g'I*IӜRΦSflȾR^AVxA5[ig=rqsnD1M ^#zзdn ~Ars'ٞre͞'TVaf#GFZ-rpnZCh(XGbES!K05ƌQ!(wU}~UjT16˼n?1LUh4Dn5N7QM{TJvt1iFeV IDATѷׇܰqTɝ4{"WHi{U|/?Fs~ӛSp>DƜ20H.V* djk@Ui ߍ5cyW7A<ϱ)V5*U)ȚDjkTŦeZ6}@a=bq1:}Çe-o fxHסUVm _* Ȟ-elyZo﷏Dm~⠽)Em/w{5@ȑiBg?_<=˛ϧi_??u~5/o[8H:>3C8|HJKh(D ה/H3HLwpEH|hGBU~$ 3>Kr9qʤlK"Wbbb{iYWuRNs _XeVw12h`(H'5"}{kT;_u@ -qi"/iG^W8X_je&8h7*>"% tqd+,ng?4S[g7DIfLfiV *@10@.w1nLwwL|9kxȗ\2IϧbH*B}zdM2!h NH*Ht5:M&HI:ׄ`⌁1=E,;[%L.d^ k:V;'%飥[wƏq6|?'}L:Na6,-swv,j)4zL2Nݔc\2gq/GzVlg #9don-+Ԩcc](F!洙o''rX]0' +%urYl'|5-u7MBg4B7xSJ70KRJEhVz5ŽUt(l.R</ѻ*"ul\(ןUSJnv9/9i&Mk"$oP_Tڽ)~Y㽷@UxȁOi'a SQaQ`us:݇|w3;,nAyJn~y%ݨ1R%]._///|񋯿{| /_}x-ՂO>W_<Ϣ#=ƹ&CHǻpfIýt_Tw4ߧj"IY#DP\ I"uI"Y%Mh^Խ8$BB r yŔRYeq7o bTO6On@qQ]>)G?5ZdZc=S~}❪{;Kw(є;WCSH|f7:7ЕGa} 26f׶ź}=Kw|ubllm;PG^!(Ȭϋun_#|.+ҹ09(B6;cwZ1{ݳFeMjOl0cKPR}>nZD$8QTPaKN)y)5,|c b<т~~X;ő!N7Z rNVrd inS;u2g"˽>52pӨƙ5{qs#'ΪuO<`+ jo ƨmC:/W[>MY^h?="~m9cl>L?F}r>yߗ:?g?p4ML%:A@7yTjJ8B[>Br^f+/}c,X 0 uI&p2 %P\ܩ&Iuwxi HT?i$Hj3; *lo¨Y  (@'h,ut] Y7m$9Ğ{Df@ٙp)Jj~wrp]`1WUV>~P3sF6)ɊNէO&9̖-װ.Ϝ۰w1,">dv!(ykxKA.F7\yBJUHlFeR)ML*ӬI0CQ]OBXTTsJ R%|URm]WPbYi^\xpIjg<cVD[G|3K+ #5i9ϒ 4/Ѭ$P8T l22+$5KJHk>IҌ3OWo]>nW fW gD3;C}ޚhurFDYOKF/,-?q0_z|@/H r6t{)s6#Mz8}\Od+yGˠ"zpeGP|! Dw^wUuP!_NQceQnW#Q8)4 2"Ƶۿ}&Pdw6z4>>|ZHԟ_DWoXG݁zwwˇۜq[>ϞWo/{/4=<{\wҌ| . Ԥ&HrM IW $=BgJW e@Fʪ-)Hd'}/dBgM6Z+2 zjeWlVeB2ML̒oR=8$BҕT!%/HJ+*#;] [Q`U#6ԃM|)1i4NHG$LU."E]ՙ 2i)ME$RDŽKH NPq_\}dO<-hŹUN>7o򜫊n=*cLwxIu4˟{o!5qZhp퓫rF(}s .g1DAZI*U5F9`7rщ;Ɔt;Wn4eo\Nez32t)*^3Œ~9\ a)} Ta5|}'XS?:NP#ɥxlp`iQc[:BWزn[a!EJX0"hyu 5fCAd RSBY2[/8$6/B{WBf zKY:S e 1*%h \HKJ\"l.D1cDWo[:oz8[҉H5/^󏔦y~t_}k9=`7<<'3n)kJ.:d~6%tp+j>?K~$A"r1dU?Mh)).I??Wfe@XP=Dp4.U3tcf"y:LsN39xMi4Wa|$$Em,YJ"!6RnN`6@ un.֗1H<٨ڙ0ol5sحܻb/KЯJX$I)( RN*J0tp&,@Ih)Ĥjޠ|s+RRX7Mu9S8Ho"hq_w.N9ENcE\ |C`IjN)%yArFP)$ZB.B)N CHiq%D\Kw;գ] eM.V^G˥Zr|EX=ךo읋 ~ըn2\r(oxmMǦՉ$pkEpmsl cJ~ՍC'FSY^`gۗScCwAϹSDZT萨#(ܕ#wu:Δ uu}GPv[4*eJ_77R{aXD /1(  I.BJ+I[bΥ"ITU_x3l)"˲T)|*PJY׵-=UqdK&6gR?CJrgw_2MSO$#R\! -VoZHv *X{t "I]hb<ػqsC"m{?Z>g?|?O>gO_y+Ň ˙RQDN7Ye&2E!s#I 0!W j}k#3(IL;q wjsJ74xJ/U_$gaGKv@̀_ B&sYu)R锼n#Ye"wc^`$w;s]T/<1-^3Y$P0څp2iD Z T*PKJ R%cgdG7 YZk$ }"ƃU#MyΎ֠$mKZHvr,͵&AM)Z:M3j)e|ZМXUr|8iۤS甏 #!n VjN+0A\R=ݧi_iڴ#Nεi ]o5g66zKX}Fh|d޽7{;Pκ,."C!xu~gԟЌ“]DiZʪզ^;ְ/\oqr$@#Bn6.ls{PO0oOr+3m|qS8PMa_1I+S}'p/=2H2VP ՊrKc,WVLֆ{ϮERsM,b@&SE(jN)Y1q]M(̧t{{ʲĎ$hZ=2JI)<$<2t*י{p?xQC-67ݦ Y[v1KLX1 Sd EYRV`S)F)2IoOKGb;^+owV7 #HһTLД&I(Dw3E!P G)VA [M(,TȼR5'jעr6!s`Ȣ;D鑶X7=Lh2`N*YO;$@&` Kb.ǯapCΔ ĩTGz- zZ0 x8,r߿n>W~}ovxx<_oY)zz-_3M(k7}7&eBcD[In,!3c2P̵ntw[|wV.Ͽ"!rŸdDa/EZ OKFAeu[饲"XbyI!Z I5bxS2 I5]w5|͙@ EVrˍpeCu'@P!ޢn{yFz2-ԥTR"+8мW6bcަ][cagATc0K{#$ %XIi _N.J_ɳY4i>L'$U%fDI&uWiCSՠb!vffaEkOV:B초!,""4$<ϳ*<-k ru/psw9Sr}]t~xx8.뺔u9N𢪖DDs9 ! =NCtZ~+~K9M*gvnj8;LYኚIBdvjXuM!!oc"a L22<zΫXYKoS>R\rvS+"<,$@.ӜH[TYBDX)%LBĿO xHTX%Bs/TJHN'O*f Քg/0iʢ2䍎$&,jTAJC k]ܮhŵc^>0,%fՏsDo38O4IJ:MSO>}z8NO>U˲- u- HMJIb$z:"nqS5mtfl%)@Gm"9ϑOIUsI;"¡܆A]̽t1vִ1{2A`wVYX&3A1exs {4y4ſX-ݸ:ktxsѷ^xM62V$5zʳ4C8}ߦ'/_~|n?S݃ W^sZCz٢.TJq,+" Km2Vw[*/ׅPN"&NWKphA$)B#19n]Ӓ8{u~pXp5Skx`Xuj7/ սE6"`R@TZRPt:iޗӜ4'zR`hUʹn4wRau\;f5מj๔6tNx,MJAnX-ルERyL07v*9ͩ !TNׯay8NLUѪeM)G aN92W[OKY ~{w4+g%HxRI#amȝ(\hOc|۟q|'åCWv>cAmVCUjɽeyy"E!XV'sSWh?S4hw~9}m8ِ/ۧ$zʷQI)OQ mnx-fO$y9;VĎBql @i3^2vL72Ucpv[o4O|.,As:qYRʲ,= Rx7~RTJ)eG\)Їj!UG^Qߤ訷h^hV 'ͭ-]yUe$i#lPhuK'!!X?wmՆouh'TC7]3N/B @749zDc IDATͺJz\Yq)"b^Q ˆz.ZtU=fUBL&l$sRhŎnLc"PEtD![iBQ5OiRymŖ/'U5E`E?*YD4MD;W׋zn%lN$ñi,zb=l,2Il>M)5MN9織f)Mc~8lK@SNRׯò,eyhm%qjS,s3!^ (x?DAIսg]-uqs:t8ΤS$SNi_U ˩NkHr)&QTUU\\)YE-%4㜦IR?]ZC G|D@IF dK?k~~d.\vv~;S6i;?pK66o㸻_0CV|ܭ9!HK9MA齃 |2zq" D+ewĈr+m1CuƟM>{n;>]t_ZG$-OgpiĆJt(/qQ Ma|\}Jtmr<;q({v09W^E"'I:,-K!RioՍ,ʺC,t3?]|nesvZ $ FG8J&݊tdoDxեNq5;;]jS waȀS}Ě[]R 2jD և+H'MOݐ+t"NA6r=Ee6|l[)Ϣ=?O']av/ӿ#^է/_'_DH!9l^P!8,DeU_PL t!S*' BUQ]'j." jӯ (iEH5Dn >8D"%^}q4[HQa=4g>lY})}-;/aYla_CdӔ&U-4̂v\y] =[cblx t1pXzD;.Ui UsW^.o[}{D!`uyauHW$!U $uZ4ID Vpka fV` FVQ=6ѽ9v;QJƩوJ墧*GVK;\R+5IX#f0-t4u p*(H.VzHIDIԆT tKxmP31ΤX!+9S~Nq466pF>26I@"ntgN枓J"ۇI_ijE'N)4YYR$L)ڼQPGjg->r?*4OqI":^ϨɀJ!8؏w79r6AY!ph3([pN`M%0-ѐS cǟ=`Bn/{l(@cG5]8~u5M\ -W/;5QF7ځqs+kW?M z)`jf_<.%LM .n,BÕF=F%uG_aз!ob4N8 kpJAjAF jy00\ zCbM&DBnbor-/'T!i^\Oxw{.ݗ\tL7w翼}?ͷwWy(~I'?M7  ࡬EoR@!LD;ĴݬDe,|%K"vWHIĉH*6ĐDIlHЎBVneLDƫ3Qoxt C >ף35}n"غʼn @d i&F>u>j]kG}AJk(03S-`VͷcՄڟJtE)H*%{$eNwzYm0K`ݼ97bRzul@ #IͶJYI LHWZGvrMX5H""9%Q7E)R5#=$ڤٲmRT $`R&*pU%`ϟÃy;-_nq*y6Mv\.ڍ |X^&"҂,*16ϋtRXeD\2澱"yRΘ;qzi;꺝P #8tsD{H> DDg'?W/?{rzw,Cn98}Pj߽_5Ʈ}?HRJ4=<<~ /D\#B߰]uFF24/1> ?6b@UrضVbII9e=k-ˎ?X<Ѕ#^a26H6(k&ྪj.ɖLkΰ1Kac ǦkXMl" JulQ*mnpM#Kp8P4SvOmx⎏u>bӔշ+[(q6.$qmOs/7TՉExқ n']3p4ZڂZs]p⚨x@݃A"T &Hkz֖sCʇ”} E]DSj*FwE+$MJ8aSxQbGo4)6:"|0@kJk JĪ&4A՜R$whro N,)>L"lDtÌ9-Lg<߾n V6nRZq>خ ҁǶ~ݮnO7暴pel!Ӕ:xV_)zkp# ں}~2 ӳ!w#=R8}u%TbYtIShp\eSvBkDiMkədJ:xa䌅dlq UVmn?%w R"6Z%,<ͽAIJfaKipohF k@`$ 'K)4NNz:Uj iTn1 60)4*j8D s&(`9K򫙢m *{;U$ 2VxjUEB1V!SuKބQC0@Q#gAe}<(sh7Î$Ps V?M|61=sxh¤21!RԦ-֕h̤8+*X"*FC QëL鯦~O/>go>y/}?f@1Wo4aY߆L=kZ֯͝!8,D%pUľb\%ذ"1G밮1aB܂{!kS EғZ U)EL–΢ oIBiB(TI)_(BsR_<(6E1q4XJMDZzpPToa#ͼ"z'PlP0\sI B|muK"X+(ވ0ɽ5RE gRFDh}!2MD9WZ Ylukn^՝@E:HXgӆY+ 99W@jTSag%C0+i!m)%gKg b$&MDD8!ZH1WU6|rN_v8GquQTnu#"L $;4s8ͨTQ'D۸tBH~l$&l*V`KSWIFcCz36e;zJf Z^ҩ{mxH:mWg7:8U5gU_ ˫9g+?O\U)^=> p.f ˎBKMz?/駯CbM>1R 'Jb S1z).IYYISJꔒ/'߅׿2gVY.+)Cm2'HڛS&ify8t=H0ae Q~o267p'/cT S RԬzG Vq?3\-xC{6IEM_HhDʻ#uBrQl rAbK4%"w连Ww^5Fj&Ǟ|fR6U!$!TmAcI)%\7i,C`.ftߥ`w<Ĺvm0e[Xi Q~}v} lKʿ'ʁ2^IMK1QVƧ)$f^-fRB[n̲ D!85kwTPmZtPZ t=o}AR678 "JS{ Lwa[.CN^EQ?ԑYUvC\ú0 C m 2F91٬/zY\pyFߨ[^Δ:R~M1~[R#}%0 K0C ~g!!(m:ܟ2~?tmr&*!,9g4)={~կ~wۗSh>EThD $KJ,TֳVG٨SUx#&B(DV:rN\"oX^e9G-:j%ʨ#r!7'{t ҰP=[MQXGɩ@$ 5Z0qZX\5M!/L(Ҽ:YeL@AП~tc`na?3;NKL#`V cT=WFDܸx)dz4)6Rr_(*Y\D-G-Qbc{p˂6f:2L7;'$7*^$ q=Ys ;1:Kn~T~j{ٯ)=쩝eJ9g{ +kTr{]ݭj+4՗Oxu:Jd<8BŽj?mPD˻nsו1~*^:حDh҂-BJ^ #¨k#(P$diN[}"qm \cZ'} gH!{9UjWtR[C hҔV(" #1H *Hwa;n\nA.Bip˫a`_?lIjP'D%쯄Hs/8FtqnCi/t!u8S*HOo)ӢATh$gDk\3(s~z%`ѥ賫ʛOsIVelІS=kQ5b@RU b)NxsOfz7k͕PI1wp~(DlIN2QNZirr:崽CD^=x$0óp̰L*ΠpròpH*ZgH* IDATIZU-E~V^eR6ql7NWU O@$GVl*\ɓi z m̓R\Da=V27%BE% JĖ0.g os8n=/%UXBm#C{4 a#0.M9v: 52-җ  /:$H羉Ɓ+t9S]( y ݳthRf,bdpC8Łah7N/㊺lmD-u7#32ݣdd+(rur%ͣN!gORA cZGªJxF۳B1{S9~4[ٯ=B$i pyg/^4Bn'~|qks+"kn̽KE*7s{e$Sʪ/ý1׎Fyv_f b Wfzj| s/]P@ "jtDFBaM {oV_:fDdt=M@C#Wx/:F6h ߲dx/;' #e>zX$H%$u1Xq\!+dA"J}Hxwoyw-]0~e8g FPj^cJi˩̇Ͽwm=d:bfQ`tM)k׆%t-T`ZG)5(k;`TzZ8h3he5?&WH4ei@s=-4%m:\neVdV58:؁;(n_1Tw 5;ȍCMZ=}DeyW7IV֤Y#{LP*( kQ vSPzPpRn0FV?\_[4qJl5gXq@#ly6 `τ}<.oR,$ftXUxx]/ qn".Q[r5s`p#=xd.8/-$8^ó&cע*[8'Ԍֻ 6M33@pJBIUDRg?yZRrhN,ڀF)ԓt4==xN'V'O/T|çrL&cn5}t+;ux^t*ųJeJ}>G#Iєpє2OD'uιWõ]2NF;w,nsQ ˾ += )[F nHb4V>#Gy^\Gу 0= dK&X3i@8†!/Y{(* TGx,ق]v,a/&*XLƒAp=J"aDU %y:{4NTlYHlj5 tʶ>nWqY.ڷre CwyUF4%f┬99ǟtt"kD=k$ T?L?z=t|}y:=}ǟ|i9 콛?y=W=|K φn4TD$ -%~U5EO~ .˯mrH7 R98Tk޲aF;’-xR_x6b"J :vm[0<]vgq"ro>gM߻0OW=ģx4mHEpfv5 -)RQj 5Y Tm)\W.)KVYDݲ6wOkDi!*Q /@_iOo1i'cf[2IJ3 ADhJ ^9tGnah-6B|9!TH_V&l/3JRmQQW :TVGۧFi`:ŚcCJ]%Qhz6 |,h4jGc qHg{Jjuѥ b4 taCkYo&p救}?;xOU}mpyo.|_ʛcElmm+)j N㤤"}Q0M ͚a'Hr#gY/>+i$9%T38 )_?QvErv933]gfP} ~DVѻCv"`0U}P}z˯CybS1cVN| y~:?)n+gH6aQ'd}X;xK]8 w|#Kܿ^~ko_'EruW[2$Aw!*fHm$O.U6HQ0` |iC#lF 1$}Ւ9A"SCl[be\\k~G~"6G-Wܸζ4QDEJçŨlѽ -^ooڍ|: E|v>ᑡ0z}iS4hD*q$Ď~r AsZaBhIX*1\O*ag{{h\?QOeAyRa5+>Inx;<.<8bap2FxVGqxk&JZ3 ["P3eU$e B1:](-A8وER6>{i ѸůҥŐn&ƠNr`h=VUݵڬ1Њ.C vD=uPn_1욪CAuUsX^e- =K`ׇǯ㑓1]w^ށ>O~{e4Shx.]-`őԡ<=U+V5~ZOvWXmO%>9d_׆|i/5Yxq 8°{'cQP!Uw7ߙOЕSS$R~d~@]K#dAMRL%x^DEDAU$ L *"MD%fMtDz]J쒧Du!s2QMID=)4s T4uh{HMmZp`#n[55jR*eI)F!Is107 pjtaa'g\߫'j[Egxꇂ#҉#գCL%j@BKkZ3wP@Ns+bs*^aR-V &(Z! !u@BE:'$]۞ &PݝBĝkv21KYTq=|{%fGQ& u=" A)K!Ӯ")mh'}}?ٻo醢Gs17hf~R}afkNl;QEh{mj.ɚg,od)7O>>|7o\?aJzYHJ5'jhC)DVt+2ڿաdNM)B燶9KR qM'(I@͍JSvxg4?w<  HADZ9 ]RfgXáˀ:(*J[Hf,Aw_E$k*H 6AV_"ځ/HGw3Fڐ)˴LEQ A&zI5Nt- 3dpA!^`DDrH!KR Ⱥ1;#NqX&N)ŲU  DFu>F8b&qYqҕn0J oIaݝ3‘~OX=ČDl#;lQ"AZ8rqQ՚$/ *4*qc6EG"ϋY XVe˚ŋ jy_kYBͻPEK$wHRuZJGT}F_͚ sj0뽣qxYx8Ɉ54*:ψqs寭 IF*6 )Akre |j [rÊ%2ya?h`"bJӎZϪoR/o|u<܋e&]>Wx*{5eW7|ܧi?Ovŧ{j6NL$,ˢbypUdeayn5r&E=Xf$Bw \VubU ybD.DW 꿙iVD$%IZukqT^MW4SԩE~ɚR⬨v}@4򪶬W,Jsm;Hj"aemh]ᱟ._Ռv#(DTCT!ͪ_2$;B纮e9UpeH3Hӕ-gƆX4mTkiZц4-9l?IrIV`̛]%QgRG}uj?wPg *h7d{Mx.vO>퉪=̫;R3x;G-VpZ )ChUKpT)u69nzt\>= j GN:|tM:PFh$up8N!k {֭l~$)Z{<#뺖j)>O[s#]nc%ʼn}3Sº,QM-<w>?8C ^.L)Ukް6_:9K{^_6{BUnѐգxٶe{scB(`tl$%lFO)ȋu9gOO~Wt[cx^OT}2#QH욆r.qB` R$qEQ 3K'SN4^UUTP^ x= Ct#q99x,~6 8*H NaS@8+E))TD x# 4ÃQ8.vbnEq b"QL T Mcd;u*=V IQ$M;CTz;RyGo/ }npm/%<)ظFe@` 8Pt?~W6XM;j3O~C7OrNT>|'PA>Q2qo $|7bh ۱:hJaJ44jRVS=ĭ-8Z;R|Ұ 73RqmXgWEziœ)nDiۻ#Cs{a?\l$ ·@:6lxJ1YF<#]ӯ'zQ4Zށ)H~'^UѾw9y){}pJֲC|PpR|}Wr%Bx)2|E`fLKYl$7hjIWW%U#g(`w+9CuʚXCw(a"I x*i6gqD=KzcY FχDgJq=CpI J)Vu(en&s=\#0V%ҖAL BN%}7w!iGZJ!)H]LmcxK]<䵏y TG$&5yH0zbW:* n9VXut69pƓMCPͥ6IT$2yj)p҉y BC5+T&qn7TjBY !qܜc!RѦфg40FzCx@xQ׆:F7"p+\ʚ25肮P~^(vdx$F|lZ[+(`[6娻32.4Zi=X*EC P!>5Ee{Lq vi5 ~z ?"~, ¼_C 0yDžUG JPGSiMki#i'<؊ՉgQ;kjtz'*Vp'yaY\E$Htݧ|Փ )-o_-ܾR4MjW[ܗ=y/~<]?47_WS^~޿Mf1Dҁ(}5Tܮvp;.pe/ϩGڊP?^0)/U6iOˈǏnj0]9vt1,c!Р֞t]('NڱlGTBx 8P$}ݲHDH* DBfUՉᨱsf݉ -g8$p"Tj=wz؉`6~ Ueu9[?vD̽@@FLf ijN|]p{sx"VEFs  N*TnR\(`]H_  JU+S#6 DŹՈ L(UCy".Lhk`=(roOI=( >Ώ$; ey']j>ѠۨOԤsSJoqxL,:d fe?lI_~6 yTAI1JխJש -a4'`Jsu:m_Z HOb$)B?[r"y"Pj< &TŶ7{G+ cO3 ŭ XsK}1@tB}>cB` ]XE|P03ӦEm^2!]@2[emt\*MDJoj&сK4[:#Ufz|Otۏz|zy9kcSu.P%׳aj' 4]ݪ&4+@ճ^ Ng%H-)Q?Mq}Y dŋ@%#!yJ9ՇRD*MWϮwfϞ>NPRyOJ$P?M曒&HrWז&ʝܛ] au* 8~Dq)"x;4H%`WG QK4 #i_Cor;OGg!Ֆ.dݔX 0&W{OWqKgq,xwq6\~JypfRF7!#-$D588pG" HH1șg] ֊m. ᨑb = RZ?JI6]UBGb$@dg`glChEj3L#5KD0uBA  "c:O-8hw?m}G rc"rrB7.:;}8:}km)rRhU- 'KKܓCP~v9m*b{Z*KO<;w֐7\]pF\?{!6&#L [<zH`dܻiپb`NJ"C#ƈ% h|E#h͇G:ՠu7"b[\NfAHz#U>x͘w3XqusZV+J)h݈fIhcCq(ɔhϐ]%zC0&kG=;e6] Sw 95O! l:ti;?T;EX^߿yno/s疧Mk9< Oλ)iq-$Z)>ٯym"zA맟<7/Pv4) +w7`yӟ߾Ӈpi:NO>zgW/*0Olԏcv_O 6c%[.k*W_wD1HZ(12bG~2MSJ)2O*F=鬋+{/Q4M˲R#_.#IN \zXISOVmh)jwSE`x4Ruml|@0G;+YsĊGБ=0}R8[X,U4 A6H=kQ EBi5\H* _vΐKz;BmO}.?98TFTSWR$͏p>G oAe 8=;XH6ksd288uo"uVZ#6撄iV?\>6Iד S> R@5Lǿ(Oce\ *qi}ֽHs.BH6.BwF}f e;(AEk]$zF?& *$iXl.NspX\u]W+@5}]#^%(6t fU\yrLöeU^Y)1ƆUb%#[ʨ:tu4˓f5<{"7-3B%o{>ǯ<+3n -"?]^S-Oׇ>|ӋIQ0%=R9$*"eYe|XeN_N)y_sn W' *rN"DUu5PռJWWkp8}b.;<}j?iڧ|{?BOewoë_wwwU~G_`omTRnn|>|vW7_Wַo֒R䣛O>NӏߕRˊ<]w;}t7eJp]Yj/~PyËo_^UW~'tuݐ!_K礘"2stRi+tz#D(6m#TPo?U(>4&JaCe(˲*,5$0>^`ESs"%뺊 DCM=MFVQfu]l(I>OF4&84' xД&ExLTnSiuEhH[cR-6dlK4 FV!D3CD9D"XU;3{I+n4j0\g!mp)=b2% kdp cRպ%DGr鶖[}WӋKQ(%292`Q 4I˨"[oIA8**)}sttb{P.e…q́(5tt8rM9LZ_= ne1]Zè8J;]_ -PbK[~di JSQyMCz<ߣW|^f̓CBߪFBt_e! &է; .Iv6CD4 28C#"ث I!GXdo]"5Uz >}APL׫q՞k6 Dà݊)E:,e.)k ѠPi p/*UggJi&\Ћfd6HnAJp%<+KJSRIs,B{DR9wQ 5zrDJ >Qw_C7t XM R1J#k%fG$`<0:G\$˛w:s6/N5ƪN t " $B}LBxT.FoPBEYŎIMXA'!rCoNޡL"YAZ RsRI&;/Cʹ\CIq YsE$;I5ۤI+_j#G|=6eÙkcWՇ,fE%C3Ũ±%G5;led;WKEt_ߧ'c=Z4텫2X0*ۓy}OIw ɹx =ۇo~?$J!7/X{{}/%w IWO܀GkRܩӕ9ȕ$Uv/-+Ըi~y4]ҫ?N)?Lo_M\w?÷3f?[?,y܊/oү{yŹ$!}?͋]U||rWO>{g{}J\ ~w׻8?L oW)YyՕYo?OonǒNL@8<)tZ|84"c؅gA*fGk#G9:7>4Ms` CEi߱-5|]+hܮ|XDZF#YNg;K=q D%I>J|zJ $HPS**fKª"jVTckkeWm'7wYDYA\sm{V(P""Qu|ҍoSbC(H>i1!1[]lxDߜO_\2WRH{lx& VМ*)#RajYP/Yٲ5W"6(qXgJidLoviV?e6-SME BhdJU _j"ץT?2Zͭ#8Mh#mJ¸fnfzE1V W6i dd3S^ Ap xA Z~HP_SV(YR1KT6! 2,O݋73Ear.da*sUi't2jxĀ2kY50P*W0 R>dIrݽxaO利Ci:J){4Dϳ`Rut z{U/t R*/ wE|ȍO|ZrK)Uiv%_?<jTw_ nN|-*IUm]էӓu]4$K1]5Gg뫏4b_~epN>a0kK7Ҕ:F&lQ9Zj6u 9Uc"0AhaΕ~5Z;pp#ЛRJa voʗ6O#Hp;Y*Mz볞9ӽx Tܒņ`psW ,35+Z5f댭 ,, c5Hr E$ELN #HT}E?j4SPI ܦJ R" r!*(q!B"N`7 ^;+?A_kg )*EREC ^٦isV@ ódh~}(Pӝs;ք?XvJ,hxqv|ED&+ͤF x{K3D} ͚VK:(u+LJtr6 }Y:mƕ nߝ=a4`H+(HxEf=Q"H"84qs3$#Ndx`8TAJ4L _h}b(+6GKHhm#"JV͐ |$)eԼEnh+YgzXCm~(:F| ҍ`3ջ#x|>/ ByU}҉ܻLSj6T.QEn)}r| DAgq'u"-C?$\ )7(帵>ibT9y0LL9ëy}~Ag)JvM'K~!9OJ|oLO``Hzz8BIMܭPβad^6?yWW׷ӳg4Y7wKy] r]`eU%p7/~g>]e"ۧkߗebI(|Swӓ߿PYKY ɔRe]ו)Ag?UJqB~I-nMӴڒ)! IDAT1.h==W(cH=m8GƵ&M9JZm#Q8r1so3`U^=svqv6i1>=اNUyf{mݱF*Ф&*9[=H@1[thۯifvB(~=r4^qI x+:cj>L6!$]Ny:)I,HcS#ж?0WD F`G kDeU#qUti@7jL9D5%"#Ƕ*H*i1W%ʣ_D8~L)ّ?ByE \4üUkW6ﳶ /l}(+ 7I)I4uVpHۡG8]WK#,h.A0uq+R[%&I" &hF|Zֈ"h9 BZ ˠhf+V0E;m2%?6nd-'!I*&i,,)0ȩQfU[%D cB)5].iaHc`' `GdƩ*&@Rmn $X5EI5,sHF.Uo^z*CFY:@:6tcK*}c4DyOǃBN~ ,cWEi[=N_LI,/)~/}fWHRJ퀚3*}$lf:͂y(_\'(y{Ji~2ן/>Y[o_|ݿA,dAUMeYWS ~_Tg+ͫ'We]%Yd2*尖œ꼣&AJ)dϞ?g:MgëO"UƂpYH<8qtm׎.ǃݗ@Dtʼnէؒ}Nx66VI;΋'?0h&9M;,%g4#b*$Q X'}xCP޷Hxx!>IsK<,U_Mٿ3g' &+ =qm䒭UڞȲW$6 ;" K7R0Spϯ}R א#TK L?R36<*qbۃ,pF8&%_CH¥xQs[PN!BiE" Iчi )IRAR)M)% 5+QV3H(VHa:OGlQ JC">=C&vz.. ǻ-wlHQ'lcmkuqgPFQs봹jI]9P޼vz64u}1+dMi3U>zw5?vwo֞}0.HS &*7jUV5&Ix*l}Sh"lޘ{UK7sz:?ϖefFz?ܩ_鲘,)PHhq&"$Q26ԃ!㤅m FLPcy}.n?yHW&;nfOV1P_Cpwf ?t-!ZdS̈HBHS 5.H:d,qBDfź"DJBA5!`D͝aC<1v֚%OqLsj.Nȹ^lqaJrlA*MUHVňEjM6kS&E5VO!Tԃ4 )EBuqLN/Z]|Ý7J*>7:) $]=xߐl]TJvB6Nqv𑆪ĆCJ׮&3l'\:xw ZǾ"^Tsah!i%'߿YsI4Dُʇ@핺5åFF5Q9YDCA x !B@!Jhx4(c X#ehNXL50JیHޖ䚂*jđdGĄͳm$M ŮS#T$ř }g@.˚_^" `YXo- 惃L"ݪV{CgæDRd@SUYUD7")x6w7{iQ*4% 16R6WKrnwOTQ%>r8Q|xG矔J6PKvƖ?%,j9w0U؞Gű}|[DZ~a bʥn}Gu=ˏ=b (i43[4_]cs?nHVf=iք".B$}mwoFDD9nwii_9??z7˃3IJ/_|vwǯ&$pR\-渺Mru}~Li~?0snni"ÝIJ Eں4t__ßo߼r T}!@N~߼(l88Ƹqի w<0qcJjEC-*k5]VчjCzEoj'V,Lw# y=WvCtLC7Rϒs.<5aFTe,_:l|?'F_/5@T2`DJC UBttw3{FBR0@jXǽREU X/< 䱷61i>ti@uT> e ;EA¡N#tjmD#A8vBHJ(Z5f8\E†Hn.QB?9KΏ?ږP)MŌW7?2OR\Ӭy;o$E|(\hElRD=f4]ӰRͭjy"=Y+gqxԜB +]Q1)8E[ K[jZ&^Ȇ {5آiTMEŹV[VD{V{嫮ӭ&KKaik{bZ-?]蕀#"6qL#R{tM,"(Sbf!"t\t*IR9#F p*dl[ H 敇ݍh9Sw#<7sDoU5VuZl_cc+T]X㙝mlOuFyk6toߠ:ozDg. 3;\?|jGs^LW6ƾ`4 ď2g24Ն~楷]cPxq\TbX޼?eUN !ŗ{h $, r^|޽K8 xs_5*?O??ݫ7/o^e]2 }Bnp=?5?O_/*5?vgoJ<^x.>[i4 5e<|z*~wx})yiӭo͋?7_'$)]>Ǘ*O,^u6O88w_cK)Go~_'}EU5DDJPvch4M7!f%UxSJ–u]I@{8`6A J)6.c )g{R^\^7B/N(i%)u7/)2K:?N} 2U$i¤$)"Ȍd4FBA-ѕ}>Wa5-ѧU5]$<2/pEKTF:AM(B&b|POAA:"Sm{&.]Uu_pCi|Vg< I(G,yGB6dxowyQ?yrr[/UgJ@!;YT ps9ᦊҴ˚1 |Gk;<{^IJs{oU 䒻+H> ыBKg_]u2ݎ3[UdYFȈ4;fv,̽cּ=,Eon>뷿6^ |4\}Jow__M/?ǿYwoRjnw__ pwz+%-.eV@_zo׷?rY仸Y"ٔ?ܼW(%mu=l!]_|U-a[]uI.-dӑ')'BB^BsAjm}Am1%Zb##adC4#-fje0cGנ (a۶:+L~Iv;IAQJI)vWV;"3(5"҈ː)DK1Yk>~=Aq[Ɓ2H'{߃[vW;^Ǧ.ɏs3Le݀_ jĨS3:@uG=@7 Bn"PvJU#.b;^bܽHHPUr(9ؼƺT2y Duk)EPMH^tVɐH 1`fɍ,R047 -"c@"cnM0(`P*B25k $U0"G.~e$ \01DunD3;r)PE_HR[5*ypdВOH˒Mxs:JI_ttl1iPo 4AEP-MD:uM{/BaaR KQ%X$~T=@"Dh/NYJD9 %U(QZR+tޞl$:v5(s#yřs9QZfV.cF9ݯO~ۯյl+T:ׯ[~m~:ecϼh[%y yu3A ^= ?d#Q89mU;6`y(@3)M#"Cq^՞ccN$.m#l8;jNW3F1~$ uR62?hƯ\pyWD>&PNnN IZQT<`zwV$g܇"lGSk&Z}6Rh7,R֪ ݭZ]P+ȠnGקCu幡Apb}ŒL۪m+c-k$URDzD}~RJ9lAQ5Ťi{l"#m؎S8 * GS-bzStGK187l~~X=RS;_huJN{+I RSjF78 AYT.IUUH "0z:2V%z kbcDI**R׎bxOTQhuwבom2_.i "zU)y]X: I8l3ϿhQSN[NrgLjz=wPNӱ2L;ly\=/Ae,93s0d`)/oowq xxׇ5|~c"_+v(y1{8os}jٍk$k)e4Q 9Pݖ_'y[n%Y._6[)T[l׾T뵄#~`vҺ>6]tyꛜ@_?ܿzxeVՋ%-%情GXfϯYM Ng,){OYiǑєq~̎P k8pXQg)0{'`>wcqm\Os %|NDSp^khQ_-8>yžyӎr<{Fˤ䄱iu`Wa TZM}:6m[ڸ$|ʻ @:N@tanxqhe`wu&c1Yx~Ey~~= p '"Jm6/Jf^`i*՟ bvr? @>7l$]]ɘ{k8::-/A&E19Ë 0%IW(;(%I223qKآBTkdF$JfAa`IKquٙQ ѐ*PsDyZ_k)KŸ[ IDATFZ~JG=494Wu9O&Mɬ>98.ɟ}7zqwOǑHrvM|NBf=||;O-1«R?/~#/?ԋZLۼł)/>o߽rS=uK(ͫ׿}Ț Rj]~ˎnmW.^~>ClտJu=듽]~!o><\rsscz_k;Du&no_&'Ԕ`ygv%<(ҩ N$!+Zo+$ܬW,[֯~\]_}uvȳc<~GOj5NACߕ-b4jOѿ<\݋cUcǘW7{ٱk 9bC0p|\ȩ+S[p En:޹NAt\mG]qqRDs/XT͛:p-BɨTu28HE˦4j%AQArCr@ z 1^(G:_oRATu SlR=)DJ3F +l$z+tD+h{x .>( 8OWIM?t4*պޣaIĴ0eҧ_|wׯn~[?/]"mRqmj д DEkE<&Ќ:%n5hr`"gMۚ-Pq7N )Jx 9.p>ƨw6Y2KS{ pH:[*/.1%7%B81((1nF }[U2;pVzK5KU/UU' #ѻ,,#su̦#{4ДԽ[Zn-V/j)`uAQAWG;GkUߘ׉#bhtB\z)g?7)/~VɛK23jQrvq 7eHWڇqxM_His_jȳ?ȓO|]\ur)g듒h;^M2]_R݊Y_/R^α:S*Z}׻x~y=<x>ޢV#ӒEXҫWWOKzx|~(?۫ý%0Y*8y-iUp=ߖխvx|SZ=_fׯ>aZ?.1>-Wxx#w6"<뷇p_^}_}K>oW~fUl OOL.Ĵe:ʢ汘s*S:_̳d?qJ)\qZӻӞ `_[,Hqv !Y2YT;ܧeOWuM-KsG- @mW&RYE5=,Nz' ]vAt)9Skl>uuI.#y<>)b <4C4NnH wE7᳃2ݹ0?l\G~Gy~'ml.f. E,_wD)_jnEO{8+Z~;AkN9Zۯnr3'R)~y}2 ?,/Ke) AK9%JەwKRڃ4~./YB .$~o_o׿3Zՙ<+Tam[#-}/ۯ7_ݾ?]1;R^l>=X^ %>vl{~ y6$紀Ϋ.fX}#ApF)~JFlx̯0} M)m69]%+GhK9rΘ+ތTO1Ǹ<z^z]Q=%xWlTj$`G§x)X_ݪ)QopR xSΔlU-"ۇE : EyzGAQ2$ rU@> {*")KDj)|Tq^Uq "-ɖ_AV %#X륎jdb$*Gٕ&O6=g4NGS^p5,Ӓ} ,/WGw-;/+]9'/5WՙqU!SK8'@N/3/|\nn_G2EpZDõͳ-GN[s{X*- 0qm'QKnq"uR!UR QɼհEaZ\@hRUˎt̒T\^K:^${#@fX*16" #^c i4ERy-N U^RUh=EFZJ[u581#OgvпaprcǏzhr/gZc@q.:P OY#~/_s '8 !9]ydzO>wxm] f,\_41XHl1I Z:ԺK(k5[n{}Jb=ű]~fɼcy_owos_ϹpUVVUeXnU5Lk--RR!f4,)jb I&@שE& ZurSa5(0򶕲*D> XνW\W` u-Ɯu?ٌXk9UU4,RT=ӹ4۽] 6RNON 8|k Y:~ppa8ڌF;RwK٬rvKJzMhѐ TFZJ$[jT[yGxNWժFr oUV`U21SfGH֪s`-[H>AU+aDEOAzHaP"U)jEt6pge^:.?>?ߨ6ȔERJiX^YN۷ow+^nDGGحG2dN B#r;NI %#e~q?˞qt瞡U6~fQ7%U߶mKAB*r$O؈/e3'`0gZ>a',zZm}|m.ʉbV'!:hWm۪ f2j=yOO(0)k`&S"W;`Uo1-u95qp^!8ybRJi̜XU"9F=9ɱf56u2Ak-OzCȩ0cYx~Tطx~]P-P+:rq^ATaĿ8BPG̥u]eu]; &aPM=6l|w,n}*yB|7 S2tX0<=$ZЛ'|LLDRU.TKAjDl8^{sEn FD3zQ叹>-/woG(TB\] ʓ 35O{{3mA^TH ~ڹ0Xget]%gSI̥5(H%pPȪѢX7'0-6L^HPNla$j)EGղZg͓fgEZDSAA<0tY;J)lD0FbJTUݕvRdyI^jWW˶mj1ˊhZd0E( 2̢ o;B.M؀fV8a*|Z0p`ARy=nLV=,'wGdKPey%ET*h)UH Q#KdR&XTeri]&Llh2"f2T@);Af HH#QA@Z' C bf9iH@ Z 7Q:R(:)IԈf7e _s2}| l= bq 6'iѿLi+:[nq@kQH\q.(;|M2TL;3i-._\ʲƷq˴~nw"AZ^/?G yb|8Ӟ'2LpЧܷA.cRԀ?I?! KI^@^%Ke}u}޿LY8},CQ x0Mߨ "8K$p@lE DN3BEKAyQ-El" W(YZlj^:A%&K,Kz"-ǵܛQQa\U%Qi;peb)Ì@YrKeGsl*X]mm+ފ}/`+$#SoA"'4?!)8Y<.-8vm/Z\rv$ҥ*~6kBIA rMZE7uyz#d/0)Љ $Y6uΔ hjS CMhwh#޹=X=R.,gp NjUv[G$}Rt<6OHoq\,.u9E`ӧxV'-O//Q|1VN&hw|&\5#vnͳTddVRNMl-oڑ0hHL3Jۼ=؛4lX7񪛇KY_qjk)ML{9M\  $iYJg*o5T 5BfB*rZ*[Jż oX w9^R%ՔӍ/ULFaeDoͭ}1R8)qYӢm H/B!cuLOБcZUC]P'Q@CCj)r F2 + $wk #0SƮ ɒyh#–˯׮͍iQA{dUeٽB73?taYphY^]]=sQ~̰tuyq`OxqIipyfz=QqN筐KŤatK[a$0y"Dѡd3Q,C5kpRmĭ^,F$_ݏWЌ K)e')>6mMwㇱ5Nmr|3K.6>f` Cee9I'j\VxYu4銳]067~'M+|LBEJD7H0^ۻn?X0'5jwu-wp|0:Arj}?:xYcY:.Xsc'k^bwYjx΋MΞgf֍RN%WSu۶l9rƅޫM"0C6Լ0[qu#'h}ěD-:٤F"d2 WTI-XH!sM't6GLsPC,5b_4SAYaI尜FCU`GV*.3 I"`cg) m4rc2 Ԩ*J$N* X6WTl2ZUH)u$rqNR) mIEx9c+Ո؍pf>yaaxpBرzO<WWWwۡ1R僽OwH㸏zYQY{FS\׊;qm|֖bt2fe~m)h,at$b!^,8zY^}Qr1W0y󚅧Li׎f6Ox8;Mr$hD+ْ?G])eD辐[)ePx!K5##gb~ͽ4sKv IDAT1Gy%;&Lg^bv/jO28ZGdҷz҂01:.}}}7]E5”F`Kr1r P[ An"͋1ъXn8j%؉UhABQY]E㼷zihސhIjD* ]S+ӻ2hq ^-X%o&Ǯ)l$z},Ȟs Gztι U<^"=GOT,/y{f;e{,,/Qn7_۶Y$eW(DS1.њ|=pG)ev洴3%Uk(CDE8C7||.V1hNjk#`B\a. IX[ U@qwx;QEkVwxb݋@Fv/$ CR`Ɍd]#|j2`rJ)nB}B'5{zi>w3"U0rЎkz)VMj{㈼G =SeScu8q՗A"._\^ڐ/uL'tf\()HX$Q̯<8HAIh?¸>\f|R>bBum۔bҺ,0Fp9z, *Ux;@m}?xaL {u1|n؛t!cc+1ivxU~􋠉N4nrv|ɔ1I+~FJ5HQKT^xB:.?ڼWTxQnyb&TGti QÃ4"n7*tl.J-q,Ҷ Lre ^5&owrD)@*%9< r$&3:2UҘIBڹvp`jr:EQ@^0Ũ1Ѝyz> %gp{x@9 x9kаi8'>} ^ޟdm777o|3-^W~R~~|0' -g磼$9*$iJ^Q*>Gƪ+YNYڶVx滆IL4~ۏr&F P{3PeY' sƀ3Г;.1$ij##Ǽ@uSHI@7q#s^eDo橨?;լs?"0k.{r7 ƶu⚘عfh-+"3F<"_:HPeϯvmۀ%Vƣj HX/HF( .#iE(:;Ԩ'&ҨP0IT(cPd ΚD%a_LB]^i21A!O. 3SVY_ReLtܓTlPbdքkHU\?e~'*%QrdLi9@T`=mgm#TLf\/mۮon6??GyQFQDtd#*R_a/ @ `{坯Gy{ᩑRlW=&UO޲Tƒ 'B]DFuD{[""yn+x>gBOY0azi4M/!YҚ8Fx;777q /xJ>;)r(˟_T.^^~'D ~GP*Q2qY-PfY/d4]@dJecy>pvtc>_"K+{`E:C[p\tyacB10ƷW}8~SsVx󖥆gwSVKYSYM)#|bjsuaSTΚ";S|ae؉c'i|T|'[gv8Qq|cwXWoR\(U4xɵlԋ y2$`k5yVTo@*d2@=mC:1>{iq1Ox U8)utHJkuek-@Ds ZTvͤzEeD/JKu| $H6bsO8ό!֕&;!$*7:QF\b(ZT\v#DШ<0 8)4Neqd`->wt+8SȎÅV|CRa %22M.[kc{ 9^Og[̯<+gw;tV`|g=-xӐnd>VˑQ>Hj)& uTRF#S5()E8 \v~ܺtvKcQ䘢[RI0 .˽5[3q$nEp <9Izv1RǵfZ9JH|˲(^o˅;0' P?Ikwgz:*j癧%)W츓w20T{$-K~xxRkI2Cv W_&I9ov*b Cf44Dz^kQ"-mdY(q3n w96'(E!$Fz# IV(8\qK'Ӭ˦w)%9wݻ3nUJ!Krek׻Qur[|ScJ)>nQ始.ETJ4e i021Ս`,j+ZV?r),RqHjVي-\EQP*{C f;I7 Y>˫|7)!E% Pz)frh-DuO(~2V2OHn+U^K9>JB' O8~("rf BGnt#0<$ hQfIo6\6Jw'Qݓ!B+SJ)-#3_Q2(e+f"U Ma}ۖ(Q'Gq[9{ǒ.% f4t+sNfkQ9vP2\&p [Kpt aSFs G< uE*VA{U>n _6~j=ؓ[y!SޘaNC|<P3ϔ{*ȔL 0x [VDWzk$D&R(59 .I+n8d,A^`:$wo!y.zaN~ސ;Y7l3X} 륎ϙGmRk}$./Ivδ1c4r#J?@F͌?Y`caNC;pPgQJ! ʴq8 Bń_ŤH(xfFdz(:df4ɡʌ^OCF E-yxOղi,n$%#*!M杭%Sl̡2o3\:O$T`50/TqDC\zmGkU,e|<>}{PPz|e)oȇ|zL,lCP!9S"$1Hq1Y 6"`%k N싈@klYKQ03gGEb9eFB:fUuM  wx(8i)lO>Ass/yyOۧ%Y)8u^vPԣ^^^OxX ^<A0{[o 8 <88?= WL_|v?{iծ;ߘp_+~2.2mvmKG1vIOгn_muN<`Lj-A.R4";0gf#PC8KZL*M:cM8z`tbyg3!PR鉿&uz._aϏ뫤}?|bK&D֠A@ͭ1dRy 19!b,:2T"/v6QDRDՃ"HhP(G B4 ZIOD8ə1uu͈";zǖrG#9Mu֝ÏK=ņFZ+ƗbW_T^YZkTH(v|گ?5ZKɴ>)>ȯ$!_+==Ī`fŀ  r}FQ!owfrA1晃qF{ԩ#Uv_Y?nۨD@R+Tf;B+jGJ U $}dQ*DbD, (S%稣q@Сft s*S3/ 7cBm9x\_٪-Zqv,&~آ7,5У/kD8cTsU>;4r\?F_x/8g/o q/Ƒ}7.Pw2$@꺨di'd@+Np2=Owb./N6Lω> 7I'ǜe@{WmS]}_p k$!2uPHs}#!,t^%g|///A 4d*O7ܐ!#ե/_3P4 ""ʬ<#f-̸p8ELZ]D)^E5QSv>xk(SxH tB-C2dޅ Y+Ȍ;0+q'_7HWF}=ӓcWgZyD}m٥ _u/(рFe?C-e8Ij(Y P=JT̀EPC|,[dI@iH@8T,]4 nf}`$X)fP^^9L Ůam3KY7;iVĒ 8,Ro #E؀fjDފ4Z}!L0"P ydRfkR[n Ljw11ɥ}nqȷҚWxnc믧jt}b"#r4S-Oo")w;z|hOJ3ӖXOw/Zd3e\~mq\V^`V'zxsw~zZHΧM~)~1&gFHD^T'+:Ju&b<0"9۶qDm))-!}䔔jw^Ƚ3Lp>kI1q9rH9XHWadF>z9217I a 1{4H$Ǥnn~_<ܾoA9jLJxtܢ6Rocձ#ُ>]4"'.#>FD5za/'bˀ: de䈁 0hMHE$djd:!)9Y}㯖rkݶ-XsbC$ mN! /\ #J&qZu4T*fi$;rGxs+1Cd~%UBCkT jhb\.YAnb( ,%a f}wf|*e ~m>}CzhDMhH: o e<fڇNK`eH}k@Iyo};DNS03x ,A#D!pK[Rvھ_[cJCml WZkUhMRJgL?Ѭ @)mK)y%XI!ӧ[ֆOב7Y =!(14숑>6kXLsjd}wdY_Za>pD*&yWzg'd]HzZ!B}RQӯG2F»t]%+0d@jmX-{18iv3xzf˟aVd%awW@p.nx K>R_l}'ZwFnrgX>>NJJ/4sʦ219zV@_}]XVnŊ9|ŏgoZIag@׎+}| 0ҙT :MMN=[NiYCi6ۻcӜNO1>b-kpwMJ^׸9]j x$a,m^RHJ~ƓwݽC~yoZ Jf6n2WsLtQ!ET&-)+HPK9l[n{6U-+,NT\MRLz%F2ZSI@RCu<@Xj[vlgq4l /&˶mO`t$,fuc{?!'Ev.6>CD\]$ʀb&\.Tƴm( Y-%Bb[M;Pa z@uud!ӹ&X/dp͡*CVG0HHo@\"ZVqPH>y^bܸ8r/G.`4J=TnY5WBPNí`2=}_}Q]zb#nq2 x:XCW zj15p]z}z]u~3yUry[Bܜ xF.'Sb῕S{ mCro~q甓xOǾ}{L^a~[>,"*ɬOj=@q]sY抦nT>S֯'2 $RA{>*kB:ϊT cf7en~\З_225+8֧C+ouQRw`Ǫ4I(Yci^Ճ. 5_l؅h&UD4"vtY 9Uf0`I,BŠvpFE1\,UKnfF4XV$"H("J㨰"lCXA Hb(I*#3®fk6B<rrB]t;ff%`nFYm#6/R6åLJ|ȯ :'/1BD4ej)5_L[fAD4yۉEd-Gs\9bRó #5F&!@赺|날2dL"jq"DR2(B`-U:vQ_ D 6(Jh.Gh*u&"2#gIHAn$ nUaA 4Jj{raܴ72aA҂Lli?cEܣOP[ 5:ԅd(#chсoJ$~w.z_ Lyy;ZGɳs>#vV3ܩbwj%R3~~ ߠ˃=,y>^|(kX8,y^+2H`6RK)RI{{eN8( }2Z۶'%dcM훌G/aTne*1 #äPH(+I Yv?dy Qx ]ev!B×EXK2 J Ɓ#]%7H*yK" 6o;LVfh hp6 GJ&n@)[ƌd.呚>a)ELrrC%8Pgk 4f #DrdG T3~2Nb6_^kKFXR\jx 5+]T+[kq<_*c)\=ZAfL\RAcPn &9!%TĄ52u ?]1&;9$3u`0 b7V`2_ +k#=9Y! PN)ZsY DNY8 0K6B6Kڈp,_td.jA떷'Oj [ē瞖IDuo?,w: @;}l=T{4%!C(jIzR+ɬbЕ6Y 3`vZ0F_ؓwW/Ḵo]B {Tܷ9D?4W #CVikMcH_RTn0ۄ p{㹐K(|C%8?&d8@;C"+4TN/ɳX|>m|vx#dt]"P ԉNb>)ZM@[ a"iB*"DKrf24zrAP`/ZΉ"=ڀ 2D*dҲMpx 5<y:`}75K3 ]"c3 yA 4o60Y%%Kzj?"߭#$ wƻx;~u<觘C1-jS_ )(e{K,UQ@,)b&\ ?|?T\^o}Bm#JY³_$_x_gtlq"HV(wK] KH"N2'ctYP2B=$RIg_%F1h,,rWSb-:0KNA)Q?Q{D%"\S#(4@4[D^S1٬%L#?-.&ꩇn!,|8j"2V2ɭ7?uFIQoYxX!?~ȇ I#oθHP0x22;f 0U3S;+5Z-C޴9w,*'wiY7) kG4sdrru4V+D2R EsEOI("lY77C9$_g>[x|%)4uZihT}62qǠXdt<.pz HM!5[04癖$[MЊqL8\3c쳍e 8WL,U]轷.Zh>5>?p_.'72N_ѩѷGo>cZGoC"G6s^.)xp)seٹyY?|ˬD$,v݇g#Fop׼1k^9 <9ދ47?KR! kn Op4r#W\Yw/, yRtL0Z)l% ݻѼf2Hzc`u5B$p(XڲԫR?TJE=HhEpkls$2<*f59&9cS8f0xR֚!};>+ BZB#FE9I>j5̂Cɥ-~;/ Dd!OCA8dd,A[SV%4- Wh\E`$ЫLuhɰB7Nl~c帕ԋԹ/ƟgM$/5&#*0+h/q徱pх%*9%% -wvi|$CMt}ߧ;vx[:? .>wTzśb|Q^#BȽg">܏uCrLg~x?O}۴wS똅9u_d{0ESnٲ3+};A-zWlTH}M 쎈,-zP/so|O s?;α7M|˶Io4IXqSK.D ! yfhM}QlD sS~P3`BmeF^.D! 0E ȍÙ]FhLï G$bˌɱD;2E&e8Y)^]\Yjp}.^+RkZw ,)͞S.A<=P'6r VMRKi{⭌yӁJ`')zX,$ZYDD@%Rs NgrF ~ 9" yFE&Lv%D:*rx^]ejhqMnBwf毙E'w_ZhDYC9ƞ݇7pGw4 (TUwgH2wW7 c:ZqJoM!zϑx}ȿ kcVizއo-?\Z&fH'8a,*F uow_1as/}4X̹g"(Fb1db)<.C*cVtȇA3[۶Kn+Ť^vyRb\a<[iV"0kaAʈ^u鐻@PHR:ֶC0#S-kK>ltz1yc s9(1 Y&FVJ˧Bap먑VP(@.5Ba0aY->LO.J)"Í/`WDRD$R-) h-h 5{Q73c F`w4JȤRŸ)PJCj0cU1 iͨYd}fK(b=?A6 `,K~<JD[%>YǨC3O5wMq L[a4OZk4KV.f4^[+^w?|3~ IDAT_lԧ׿W? CmV_Re[!Ȁ<,>r\/ =<0jRub0Cah[٪0#fIZ ')=Y)ڄ `&000 [jq`.&2&.KHSya72P8M2.hAK-9Z ,VhHXwi ,syG歵=¥^wgg)uV%+7L|(fƇ1c60 D!\H5L8r9 }If>vXFe9v<"ES;gI9:e# SӢ GMK M4MfV 0uxo2KM>_59%Hx8Fza !_*G;|XM~CN޳y+ǎ%$kX_uۆHxOg<7{16 e . %`<"N+݁ډŬ YZOߗ+ `X#-;vzXxZ8qrf,-W^8e̖O dXf8Cy[v퐕dFܽBk/=tw衷䷧GERb Hޘ!'p鋮ލ5Tج(iibI%ߨN((Ԩeќ_HE2 "(K>k%f4IGѺΘaF;^u\A΍MdlI .hW'@{(}/ZQ77l33Y@!魙<>OﯗUKulXda:o#o8 >Cf$g^3K%4l̐> :EC:pkrGDv ڎ}H([DarB=%jIs#|,*Fsh.ɬBT@ <@""W(T2Y3BBZ)[K%- 8ƿ $<ߐLOOط oJ[PVS]I %:35W`0}Ke˕>&)HBcAfid,F>Nvuϟ1ֿpS/Q=SY㐿紖_?߉A>L &fs[f*:{9|uL=K`r ;71'aͶ@pbt,3c~ 8 L,㸫ź;.zAG8=^u}D)=MA۶mff!QRʼnD2ޯw#~B'Jdٮ",:@2^㦆X6 sP#] Xҹ0J7MTRx.(= !sBO2H&/r+'۬iTl OzIW=?xz3uh,-˩Q>uDL$XMFqK:Pd`\=䁚ICt"8dݾrgX?R5k-5d}/֮O؀'z_ʪ!aw$/%.)b&Et:'(ԃ]s$XjEY "i$&y7?]ae峦xp z|;p6S98S$~I90ey֟ӰYͬkY)kfS2k]O{/|ϼ D#"rCd.3e!sŷr#D[kgʘk)S$R&ggrZC1"e@%/x5詌G afțJ1FL3jcn99xkS?8-ԳA6X!砒VlT/PɌl: x<1vqG}^#z(ᲁvE08]Od8$) d@I1$6LrV,j|GY^L1MgI**]VgBDd?JÞXICg)hd6JdnlEV/RH.bp9Y)pg}_<_Sb\.l[hP'q"v-uS{}}q(?U|W"v $w([^>|ȇ2,śujVbbbȼ0 @ZZ.%#\Lb,D(INq੬4I?EZ0@̚ b0-Èi@1h6 "kC*\n!"rv f cƀX/Jy %tUD΁uh܂FDS Y29gM_t*L&eV5 uFbGbfK9^ﻻdT&Z@7^TS8sӁSO;R;q'ܙN5?=l@)4遊7_!r2Z#bNcx9IsAK8򾤽yFW̜OL)$;EL3G6Rs +RFS51wpտ1ܽ{C /5,9oF)'qr õ"\ޜ̍7lrR0+e$4,B@-$vBP1ТZ"Eœ@@df%XQF]Ah)\X4 #8Dbk&P #10=\±r2#s3P=,sP iOэ NC5cpSfVKU#g@Qj|"€P3a) \p91ߗ9ioZI.:}.d꓇p8zZO:9u>?|,y?2nN"27gDZk)[KXj%k{Vrxk_>_gWҎ{ p!7&cHz&U/"dGY[I!W߀$$-f퐇@9sJuW\/420kTe)0wxQF@:TPPž'BPт2db|2Ț~ڭ+kѿ5$Ii0OC9){#K9<}_I2/0P0`lq}QSՈY= v2s%`T_]'А?)p̉Sl$!1{sW%vuޜ/m>c<[&lpI+q;As!XjݦC̵!f)q^HQyȌq"DU* vjfAM''҆My31!TM C#FnN B Fu~FҬ-td+[L%JZSGTJZTIXd۶mp~Lց5P 945R4w4fMF^`BK*vOz.xGw)Z:HGy'_HX@:JR3Glm߶A flhpf+ݴ}'e¬E4hB),`sHMrJA03άh3"AX-JTЛBP,VJCY/\@󔅌(:y~bY(#Ԙpx ,fV`V*B&!I%H϶JG,%y=orIbU>ˑ4Yd2"?W1j;֪@@RbܛʥnďFݿO???\_'?D?0u~ZCJ@o%#f6h{xk>%b(rsbQ8HZ5բ~w!7"`h8MPg|tG'n___?].(^j.vhf:Y~WOFT~UG"PJ/V XtY5KuIp)M3>IB ^'ce I^1<^=(DpRuzc7+D2TldC!+T./歇DYP0+X> ݻ NX#U y!-SA]Sov_sYш6oM$ɕ-s0̬+-E^o(lEUBlpȚHws3PL@m}gR2p"iVZXdW ݈M5֜c6?JIf9J.`$vqS^ݽDՋww[5P-T]atIVj#S f<$Z{]Dt"1qj&@a;.n~i^jL'8iaJqy4fv$f4D"_ '&ў 8+m=S[q) #xh۪$3-oŤ Sz7?;C?Ul;;'pm3L^MvHI`m8 Fo įd>D9mw[t;JI.I/fsJ$PRfi r3 ߿譼u])/MN$(N7#v*ڣ=^}.rZj)9@04rU] iP=%P@iJfFO$MjŹzw3WMUN À#}-F>RJkT;-/Q WkHQrZ2aYNF[B[b. vfunAUB\x LƎ@]. Ӄ%I{=YRolRZnKltc@s Ug~^|)Yfw--/jk]aTkNC SA%<: qCFISGPj'ў,AW?YObw$>Ltx/o~ӇIojvQ3X-GZjH{31C w=hx s~zJ[L)|s5''3 c緜bF٭lJ&*5Mhb#Sq<*K~r"&]SCW;61b c e]d ȂqFpI3d_,Ea*DeHuz\y5!QW]RĠB/d `?6*}f)ْR6.J&My6G0&t" =؜E Q*06SbjiD6m @Ny|hԠB&yl{wBS ?'!? IDATRkdMfM>Ɩ$Yr-fҐ:/8Ȏw̖N4ZF/U'{Nc-q.,S52$ zqTcJ9U0 5?pKE%"\)G)c:`fs f5'Y`0ⲍ`Χ=<a{5जZJ!"z:cpI-̂lQ,}]WFCJAܣl[*Ρ}&~Fk9 )ΝOqu~&8Og'#vꟼ|Mgu03~2u,{i'|9Kz<KuϏ6J!ܸPG(~G>66E}U4En-9M639Y cP/B3@p}RJBd;DuT=I'*994L#0-"~cڻr [Ed#`PcVmv %13G?-mI\kVbMDi&Ь6_~fHJ T ;@{b9U+[J]VD'= f649>$wy.BgBpԘ-G:~܄@}U9|4aڭ: eb <lZ7Qyf w -0~?F/6q$=$\p/p?UpGJyZ_S/i)^UKT)-oG ,gagZ60EQ)m7( jo;'}Gu>E%>@E'̸KeɠVR2h7+q=@2҂6n-A5|i1naPr¸D!,%b5)5=S<rwu1FHкC+ T9etU%49cP ZD`a[xV$ :PY"΂2,"4#if WD=-I.-N`s,yN6ѫ%$nXc[ޘRt3!L SI8\'yRܛ#iԐ<ig"sy Y]d?h.;,K>^<;ٙwߣ_ ixq]aMm1 p,zpDsoFfuIqz 91ImDЗs@@YߜH;t?m6g4Ӈm~ꌚۇ=pt~dMXk*H*EH;3ͬ^۳W\ "G8 DJֈ>ԆWRI Mӝ/'39_o_~5i-h #dp92TD GpƖGpU2S;KS"jURJ5=Y<)âE͢ ј$I 61b}9h rp]ƑUA%= tt` &Yxv035x6{+Ǒ~H@$_j]|ƽWy{Kkn G֌̘Rr6n+4"4,˲%xi뫯.R$]RܫWssG$F-#`a昔I {T }KA;y>/FMڤ.ƇK9^8yqPr=2ˊML$̳d~:OM|yFUT X?Ӥ؏q>+b(]1v>և}˪D6Uy$FS?>p(J}'H)FL&Iq+~,cfw8:9"=znOjw> vX#t7v˷/kUtWR<"̴IȰp}˔KBIk-_cjt!!M!0DF˨g3ßLCI qP59*f9tx)i}^lB/'N# LNRD.${&Dvs~]<'*IbJhןrNVw)Җz]'D&ȈpCjdx+EKʲK1{E x/=F`xPU+HYr&5&O #J%tM&.Dlꨢ'b`Kѓ N$[@ZI*/5³FV h7 Id4tu~INb~ ddio(d #Wa]J)zHU'pfI2W4@Jx[= ,TDZk}$kӏ=mi5H2=3L{?-hOu1* ƚΦ743RJٽZtW]+ S2+sCΏKv{s} +.g,hfIїr F5+0ok(Lf>ytGqёɑ0Et$M'"Ħ[v4x*IAqFA*c::<2q&$.ԥpk95lsru]Y5%eu"j4͢Od?32>SnKxr K$y)6x!>m>i3&?gڏCr/xUcc'29z)"7yf}rՕj1Ʉ]lLB<#)$Z;Gg܃j4<ϽWN}[)|FOg{ǁ;<L9J5Ok,fV'K@1̇30#˲Z++ٺ%M4O@/-іe۷oߪRWw,[՞xɒ.JUN("ri^+d"ƒܜZk19o\aS%[L/U*f9:i4t/,lqfJZ_t"Tp)e,$03kqڇث6 ;PnH]ܷqEfٽuKlxM aqf'rʹΕ@j87a$mۜMdKdo//˺o_oR}5 @$UuiKJQ{)k)vȣcH>\gj~c,e;0uo֫0?pLݍpUUHUS,zFDJ܌E u<F$dY\"9,RuB,{QH X(D֔ReTx1Fp`Ӗ̽X|, rl!'{鎈T7ЩMlRM|@sH_2l>xKZr9sY^Fr0p0` d^pX->ZJ;eٯU͍KmL(ol=@y_7w1YNK)8Zs΃ƣ+/]5O{hlF,P'q-v=#y4g488k?SKFrYURj])e9b4֔K^i<RdFg0a/85?5]fW4hfH@j*}x#r@b (:d hK1`<[U3Syf@HHO~ֻ1D|BZQ͒ɘ ɤbBljAIV^e h4RQnlE(ik;#1ci2"1Nk/qb֣7+2*~rDxu>c3pu nRN#.Gs@,NT [A;j-I浺x sJr ]qABdC_fÑ5TE圑 /=TW}lDDS-z{4>B@Y$/qq[5r]WFV!ĐY6S^Z]W= R^VܨU ǃnKĤa/n?qL`j0޽9Zl%,/7V1022'L! ޲؂" iR%sMLU@jpUG0q8omF *Z4*x* h7Z\S xf,2/WfLl)P6e6Z O-@^0(ơY !}դbK`ËTv}MCVw/+-w 6Y$QREOR-UU.c,%@KZSfJɖ ⧯_޼,~/0r< 7L4#' ?]suHʁ_-i_Ǣ-FU{G_ r/1yϿ=;"@B7vUځnPIw0b$>9Y,d?%f8CD{;-rڜ MwdTj g[wi?r|q"cƃR=j S]Z=e6PK[M< `^خtt֯MIfvO?Dז^11FDˎ{,%쪦 S+[<UCz 7.-m &R+Y@$CJWZdmHHDm j@#(f[TIDzRkV@Lb"Q!aaݨJeZ%zSe`(/Ĵ)eb Ӯ=B~>oT {;ܙzy+Vee`Q-wJ\ɖY=A1iz єń9>B^QEdC7M·ĐZaz`m9nn6P?~R&$N^IZ^@hk7ZJۭxRx(Km'0#6ša"CC T*Zm%Ӕq Q1VwO7 Udȿ ]vS:}\q2W WCs;Չ8ln{|L'gRf%܏˗u]ѩ~hwZK)q^ò}9fc.!+"G] 5³y3`a'vd x|}r,z1Y]COG6}By)?8 f~sR.Y;0y,_:T Ė^`*w)uܤчMvaYQJS L8c{O;ZQs3joZkΛۑ57FFqݡ+ͷYh E tl<0 LgSI]#Ac{Dfs_|Ek)O)41@$].4NA{dG{QE+(IcbKףf9} -^uvO16m|YdHRqw-\xMCFZ!%fax0A}-%-jT[Z_iyEp3;m=sA: Lq<̣߬u=+e!?K~݌,v{pF`H7ɦ^yd&RwG 6΄{%dcȒWxjpL ~[2ibشhUFS(:pōE%Eܵ-o Hd%-cs?"Q]IrC Λ=a*9d=^'閽$oe)DFN7RmR;z/=.) ;)=nK˶W07jIDAT%GQje-}ZlVgj?'={C$ӕ U&=jǽA|7_$]p!>w7^_a4֞,yYUƐ:͐$% >'M2˖-(]V`-G%`0Fq &U%*C1n؞pI Y&qNQ6oÖqP0%)-۲(t//7`]߳Z},EƍR ի󙗄G֍͑SfqnvVWy2CP9cS4bأ%R$:c:?fBIjzm=HϏ̃kη{+vGL+ fJw'82c4G:y+FpIGB8H۹D_Ϡ9#ŃVHͨP_m:uB@es[+`aAz Ig :k~[-9me'vA@aKi"h62'@˛Fb{s0) Fb 24$À!&f·{&""i1C)Do$c[2Л(T<-DRF܉͕ C;`n183C횶4N\u2|҄m|$rѓ**l`LuhPe#\),?W-eÁN8Z3+0 JdA_EyT [}:ߥ4NxErIf!M+#Wv˖dQ5=7:t12{48j 5/|"(&@~JF,Rx' Ѽ=R Iݪ(hI%&X(#̴$f:ġqú{Ć6#Vأs{S{.Dr+tYTKjm, fU`fD27 wWZ5gB577^Zn!$mL6 0% :߿A;9%jf e@qa~z^豒6yI{tw=QW#)?ݠ`&5==VSYcן<~xv|^'˯.X/91ao7kg9ۃQ1 QqeIHڤz̅#D]LF3pqmʹE@x'9Ǽ#ˉ΍$i`d7`tP.K)uWѺLeZ%׿ J)KƲ,fv ,I(,QKN[ dj^yY$w[aw0MUha" 5\K-w^aKWSJf=}|ʦ(Y_=B%#yc#^Gp0JѫZveIF\-1`{V<$Oc{Iv݉4~ K=FْZWxr{[Ri1r0QXUy d𲪼g,ri.~@?vc΀RjU Nu[[vZv9}RJ|iH-m~jDw-i #Dx;ڝ`mF_s>G9L0OKtJw)c1m6o 4/WHH)ɓ~IEdS&c0L-eUOmܪMf HAKV4ɀs;h.TP$3ؒX$WT3'IfZEFJP(N.P)$9Z4t~WV_'P I;wJ8;8s;²%JާQD3z" 7 Eq/cd2KɌDoo_~yZNӸ{Gc4p`Y_]B\e:a7$?/e-{z,@֢q}#_W=9'ށ^g_r֍'Bˏ7l3&< >0 s՗qPr g{~]gܴڽql? ?1̺c&f96\ @S&MR.u I gP2f;GL7V)}k』U{Pu?;ux0# &aX>C?m>j_Q|5ULAV2&0NvW !j>D dM t8=ݽ;bKEΌr'D!=}NEH!R 45i)J~8h_YnKNE30 .hhVD'^ j_m*ބG<6 c7:I˗%vVηU^@ߐ6A9*;UѠ*ź̈́'GmMu);,YLKr&=lFi>,j*oﯯ_dˋ\eEk^^Ư3U'VN0EJ*jHj/k:~sh&1Ta]rw/kw r)ūМ+@2\t")]m.Feu v,z7668[7b 07k;s?3.!ɒ)iIQk- HJ*0*,+"Wa -.Dw/=YUb|7kw 歱/VE"?f 6ڌxfaA L%l% {&%1,~ZfMډuPH>,Jm`=Sua2 vL^2$0Y }7FZ4^=ǓngYL\lM)ϰΌp>|NB {ua<>_;awO 5JK״=ux$}O3Z>l` J}cҜ.;m= c&|,:1ct!\bX|I[~dwG|gUDyKUdYG*"`rO`Bx5.qhOm7?{uvk{gAԊV{˗/_~u%0!:.&9֊DL, I ]4OARTu/EQЄ(*JuO4&[8Rx[hnZl5@m=$ 4WèIm!jCt34|Hk}Q&i%ZL\a"J!@PhtF+;F%AϋX\3ZQ0`+ ^7;'f -i___di!T][s&rC:P .~~girmYjuAf]"+I^_|#`0qs٨(ȰwX;{/8&wy%|ẉ["LUm'߉AZsA յh/1=Np:X>A焈 HҐJ,6aAUucn,4HwJQY%;da@X(BUK6%ZZdɤHtȳ)QtmNn=(iЇ{rN"P#$ͰsBm%q,/0JZ=RmRiB5xP,$Õcr|f>|pՙT|fF9#fN>Tl?Q*k#c )s_;L՟jh"=FKBNMs~ qG8Yd7v~;!1N .u8Y귲V nI9*L^/9UG6r4,SZK:jzlX5IŚ,/ -h=0̌+@cZLN'֖݊B<y5jS3|52@+ҤYj<Gm;GI)vȆz GEUdKf^h+.gv_-3THIr__[EfԂےPXRCB`d%p :3"%3,0  V6 ^Smp ,Q ͔h)`$)rUJ^i[6"՞ꖬ+5l]wL\O WUzZPMf0z#R"KQ,UrJrlk)h ,T fA A1Xy6^FYP:aeر @d$a*?2'$@pB./^Q -YQGvIט/?O$WJVT D$Qʍ^=\MK.%UxU-.9⟇# d'яEW9$ ^>dA X8t 5$\ÀeV&,BoBd!3INay-,ꡄ+˫jyH:c7% ]~ESH+^ Ϥ;|I,U8גĺ 'Ţ`$)4ĭ K7}Y*j'ϛ8 I<<u`+~9^Uh4*wՐ]NVm~\e6F>Fkgg|^́X43nߎ@{Ԋlm>fDB+ #)A&i_.e)jF=?C hDA* Ok[$i20 &LvQ<[tBNK %e;<=}My@x\4y/\Z5'5JD>3p:庇mL"Wi~߱O?q<Ҡ"&.)Uk9{x/F%a Yhܸ͠* "v:z`0e$ZJ]L sR{f)[E bI>n|=9vRG-2Oa)O4mÇi8 Q4Z;솈My[4~* m$F㣗2"HU͸0sFٕv>J#lw3PW9Y~8pf+8qZfGw2vWu=bmb#< n  R~VS1EٹqÈu:'nn8󹉸o.{_ɵ/ԳC;ƊڍFW1vEpO)1Q͟bN2hx|yItRg4g܆9bv#yz\|T뺮k 2{a f Je$s4By-!x͒^RZQoMYa)J@s jI^Oc"DKt3/8r:8ɼ=HZDzl[ ,*x]R2t9w"Z$#(Ƴ7]v'`]375ZGg{Y-HC2[*=3K)1'ɥFrBI~4>|3L (3aZq9vrmT#{:UQҫ lPN&SG0A[@V\f,B󋚊޷TfDŽdSl˄ M9ᇔ{5}ǩIsLv=e}8$D Gpk/oOȥ^$E t""fs8.HA9k33@p-UjQz:F8jLJJaarxܙdȈaےqR_ZvdIu얦CnO7f񎽍G=j 1%ZDFWYq dÍRb|jҮ2ò1DCҍ*`SdGå1O|Hz՟3dygp|(%.PیEU~Iܘ%ϠyFļnYm ҆ $ 6Ή2v9t"eWyx3KxJr q*J73 D`-Q5`%Z HJ jVZxܲK Ub+{|V Wdc۶1-eӸy@L 3֍$lW>!Z0T lUg(¤f(GwwX7FіnqaٗznW=s:sT_P`Ny͋)3zv88>_Knλ55vMM s63ь9 =:!otxY{qw>R,ѡH:*=RH(Pӝo6|FUm4rDȆ֪0f2ScnAWJkRZӗdR˶`fTTE߬HFJi؋ *78K;np7tTirzTBYJOqj3^ˮL$f*TQ]!'sΪ"Zh"yYL )iflsS1ˆToLdYh_<ȥ"x2|̹x7ėj>x]'??P}o1m_7^&iDτIENDB`onedrive-2.5.10/docs/images/fedora_kde_integration.png000066400000000000000000022530251513710110600230070ustar00rootroot00000000000000PNG  IHDR/ IDATxklU&6Ƙsj?mCC#!@4qc5j _Jj/@HD#Ktlm訉 ~{9U^1cԚ{ZuvS>Sګ֚kso}3o3;dDHyyfZ=iZUֺkv0L&(eYzURw蜋{Z#sn\`HVsT#|"'9;y{zu]˟2{oRh!".4-"Ik^kPHF4/-7|9䜋ZqQHDZk)_k-, pr}9$|0TU% NJ)|߷~X'X-#K`v xa)TNn g&{ N@Z}\EDQI!P9p=t|ָœ ux<v]`Oq3Z9kͲZ'˾$qK/MS"Fiz=Ov5;ZR9Yc{ݥ`DFDG`ߔȨ`DoU@@%=Z `Zo [#!:^](LQ3CUDJ) Djw#xZ+N4sDLd.`k߿_U ksNhjzj#EpC‚mpb@'#bUUIQe''' 8(c#ڝa =/̱]r *5XuϽE-3m,YZcv鬮v9ssoqSc3?~9K _b3-c]WIiZUF"eMVi*GKo/n{?<:ZȆRn}}  `3 =Zt  ۷y sSrCDhykAQ1֊nY~dYbuRQEED빠+,M؍=B(elJG]YyEQYO=TUU$cm 'H7Ea,S/]Q?y 3(Ofj2c?w:G,=xUm6C#ow=؍-v] /mnzT[|ӟx|xx,Zmaq$$I,F={7c a,lTEO`H!ypȑGǶ8sM"uUU `p8֟o5ƈwX{=iq$I*r#C05Qi]qq,4u+ bRZqhݮ(D1iEou0H6AsXZEj}&s[<'}xY ,uonkOiSYBw< `'ϓ\QeYFQ$IYEQin9~//` ,#xmN0 x8@8y2aVyd2IPZy.a~D#7XQ>f====>>.˲p"@3HCAkDC[=b64.٬"|Rqsrco%Oٯ#,:0,X$ 2\p-uw[m}a\p<~ TQo@yź]Y]Y.2xBoz?lilQ;a ^UUYI 6^Z6&+$(ΧDJ04Me,6r[ohD D4{v] 8 &p< mpYY# cy e=63(GC_|q߯뺉{_K4qci緍E&|)"EqSe3DXmFCkFP*(Ν;w~:LD9ۓ,*]kReh^_8~VGmϹ=8/N. `Y+]zaׯܴx5F]b>>97jx|#8}]z\nYal uv+{'D1zieCT庮7){)pJeOe+Q2=zxf$DІs}[Ŷa3( Sq=qsͰ_KVpYHΌX V"Ka7$@BRXqxm}`fƒ3sbMp8җ$ѣ{llX*rb˜1=,[JXm|Ѿ_Ι2_wGŷ~9}_ﻲ8 _\nqo~{v] }vkG7[y9I֒=} .zv .6k}\w#bZF&d>KϷMf,mgJ)glךi_9Š2`"F/?=m9f9r>fAڡ,KN//7S py~||,A.]pj YK:R3N o!3^V%'''dBZ$FimB)y/˒4O:1Cc[6V >|Ak< `:O;h4@5}BfFM콯Mųph="zaE&<lC?8>>bkUc%0sEje*KnO&Dz8N߿/TJ(\M. ___%d29<<4Ƭ*SCPqY10hޤ(.*0˲hdY ,1&8wUOh6ڧzj<;$$]ݯux{h EZ O$L3 S4MUUUZNG^7q(d襗^sh8<Ȳ̳%"b͑QSL&ܻwk_{zzkmeL ׯqs.(m3SbȦj֎+e)OfI&g\6o0?id.*esz=g+zS%~-o7wz,P3BE4E/ԬҘξ,j~JSh$<{dF>C ##11@sA %Bd)J=r3wIL^ ]21I"a| u[9+ӘJv9uNBs,a`Zkq*R$&@Sx~i4jUxF*B+ VQ-γmwjs ,r)T//OEE ZςY0ے+oź˨^nq9?tĀKbhw"ǚu=S$I$d%@r4xl豁ViFQ$!-q:C?,!tB]UUH"BfWB:P Z#F(@Q 7wTZSK}&d@ qx$OԒ3y#ZTf:QܻsFDt]˜_߽}啻hzRQYPm ϯL,͆`f!8 #ba!nq$g[as1!B3A (ҶVL]dIzJ{MON T 2g9B ™mhDD)벊H!w$Rn3{X[14@a+e\ڼ8 qƘ eYF#dZ(|08>7iYYi@@Cx?o0gıe0M| 8g,v`hm늃P[+3nUJ)ΎKg>EXBBir&1YRFՇ`RM%л&룰]ʷys(%Ү&I4G-"{f̚0I8RZD >S[c55F,'Ib:(pBoaC_{ut]a@UW^OdJ+|G~!V ^ZV+ A2٩Hoθg91h0XkOԧ>͵-`϶iUY3@\׉VeQ/c 5"@3dRW_{p:*Ҏe^֡=P^WuUu^2EmڕWkɁut 8yaǙ4MۮƆ-8hX%3OSISHy?mAh#Xe+/QA uBA)3jEqv\=6$DK$Yi y|fKd~ӟ&*4ydQŝ1И F&I Vf cyf6u/, I WƜk۫.m.^ڥܲiEaTS+9gye)3߮/kCpL&}<+_[]pGp3`}mSLh4_S\0mX׵jq" C_Oݹs0ٛQtpp0;iXFɴѱr@z ^i3YF,g-Av`<#x 耬W^]AkLדm=l&Im mU$q؝ kљs5-]d"D'zQ%It Tq$!h$>e+db$Jp'6%0g Z%%d-Kx՝^'o0u{J^ t:7Wt.v 5]4#"(qGQt4 Gr|Jb,n*05mb kmY4MCaʲ:]z[ IDAT($ D"& `\Ut(QUUi8΋ ,+4]r`Vzt(-^)i PJY8qeJ)c-VڸhOOOˢ~/mOxsOʾ ,ߤ8P)EQy.h""Y7Mt͒뽬xo ?wJ~;l:R^ ߿sDED ]^}s3k|"&fj>QbU̵}qУ"r1BbI7nXVU%g>ǥeoч("%$3UG^0{EsajW;;sD7%46'όO{mc5"se߿+K`ڱH<_lزsȃ(s/. QF~ sNB?\aϦ]u ɲLJ$bT/^2˝"R,y#GLqHA?ox-'Y/)z0q~@Ơ["sl?cx[,m"C $rfP-RFVmsx:2믿^f:"bhYQ'(+_~m2LYkgsQs=[Xm +P~;ru&-)HPgq)CβLuıu%1U׷"ep޻&_,=/~Zy"F ,ey$f⢉{g"uE(g;6u][V:aZ,ioxN[8 WhXZEؤanm9H,4z( Bqc$S]spp`0,6z f6ug"YDQg !5+Iם{ҵm߱[ j1eRBmD}6M{E^ʼ'ّgט`cgwdc973.T1dM&6>؄*M$I&ɺ1MFohX"9=sG򴘌INZ""J4J6M!(Q$:A;3Ak3g]3zg*@1sRcb1NI|rsH xϮk]cv~֛Wgz?l-4Ƙ 3m* VJ)1-\pn.T-}1655^$I<#a#!-|+ E8$R4n*d&EĢ(ál(*g'DPg0(<P!u>]:~u}籫,]w9[nOvifS^;L d DD;oEhn_HPc쁙{hFI0`7d͞',e=1"/;z/F1oaHZhnƸ̹Y| LӔ<  em9p^ Բ] IXhZ\HiJRJ,~*X$akYkƒG{_E%i-#yI t{=FyWUYGB";_e$Tu\r'+cgdvQ\>lEA6"3*Mޗyݯ'I9Zsg2[µ!8"﹪`0N&i4zqs ]Wra"A).<ka3fB^ ux W m!;ltwӈj־E j,WD{gFH(3{}Edgn2]$d@ @pd$@R40AdD@$$E<1+btW:.,?( r傌^q}-f&!!yZ9:+CKf-XMC)%EQdY潿{\QLD0unq wݻw䵻uQ!<Y`Ee$(fBs֭ThQBk#Z8NY8~+Ok)gN+sJkf*JKZ!Xb358bZeq}K޶-"s܊̝<V,qjќ$N ;I!8]UscliZGD@4MN̐%5{hy H&txw]6 !6抽D.ip^&bɒ>B2fo|?e:r&U-=ttW1/nEDcufXWĎ+:gɍ܃V>-]qsQ 65*h  =.4Yo hl8Nf}^=RBM!b ,z`PKmw}3ݸf;Tc}uIik$l.Y~E<^l*h$4u)]v $oa) D 6Ӟv "xmTAijgkxQm$Ig1!f MИϷ=m)lM-DBvȀi\"l$&PbTEx1Gm4HQQPX,;$6Mzy#عSfnN8Dq7(jepL+yv8xWd,uu񎗉{I>71Noo}&wRc{,jtχL? mW u^ϓa~Qk’) Qc_ñ_-#ڣQؼEQ8Dѽ.)iV)RR>_%VuY0DU%W@ȗIqG.'A4ӱB0yAsZ;'ÇCqL<D19krWIXc1I=!<ϓ$+a!=%~wMS"-Xk"S.n±J$uU7WisPosG?) nОPw]BW?Y~#Dt]xc=[1͸p|C!(DZO[qESn<ٸsG&+3"EuBȵ!cl ֑zۅoe @ܹ#m©g8==UJIPUdcjG4L&@:@,tD4M9(bƃP"@ IU}so{ˋޚ'r+L\;I82l"JaZ ~+6G > i,ˢ( 4 %I" yb"چáXeɉ_.1ژ޽o$AkJSY2WD[omWt?"`0xAsnb$bV؍p8SƘ~/Qcb*ɒ 7O4;sM1:cpȸm{]U=w%,֍}nMVZh7a.6a8bfbݮB|j%'F#>'4BL̈ G =""ֲws/FM`DfXphZu'o{6@,2$RWY!5YvŌ_rvE%u-=^¥bx& u-qg?Ylh=4u]E!EQ3LZԮ;GEIO*C!K)~"f%!\lkA#Z_2"2p@?sUUYtc)xE^"bUUu]T5es,`Ͽ\Y48Ruax!sh]nU-6,/!TUu||*% h4ʲLÇ2VEDp.D%IbE$Uj/C]G0rSo_!dQmݘENnuj MPW[n\Q%8|6baj1@MbyE<\x\R5'@@0 8vQgv}&=JMJsbW죣#IM]u Rj8NS1,˿􊲰hi׃"q^*Rcz<575%g{o$UU}o,VUo{?}Ěq#۪(ѻ٬@YbhoGxHD :Z׀t= f;J)$4H4BV(@zP)圏8^/cD~YYZpxPf2(ʋ?H팕A@O&>O&g{;(H$;EQHΦ,/W33zٖum{u|祥 n**1cfb0g$oD楱.eqݱ%Eקζ]~ݩQ@3@T-UlB2l#>Q `-bj\P5?1x` J8K  }a(?ߋ(˂٧i썩"{&w_\4Inr>D EQ&URղ,$}h6,!f Ƙr7|!Bc(##bHib_k |>c?&lzuUY%}!!0 z)? v9*k!2gddȲ 1b!|G+͊(^$h4kehtKo׿~zz.瞽c}۾^UDy'iRgN|ۭ@%IRU10۾q!˲T*"SF7ǘH4XZ$[[FmQLٍ/Ycmž D-ѥ0o۾%r/hI199MӸ- l'(0(;bs?sGd9]1yL7 +5њ,eY杍#"z7~Ï~?hA/u\׶֋U|@`4gJ5B``CjF v#8#OSQi*8'o} gBW$FQkfD}mfvDz aW tfzRT5&IyHz݁6 G.Q2[Ж]f&TޑI-VCXt ĠJ)8[Rt$/- Y9LͭCL=` rQx]ީЮ)Yš@k/R޼oTo";qK΍/Ŋ^jK9D1&d+1Ї>,bMȝ9&|N:a۹*AdHw~ȑD4v^R)!p.! 6p hzkCǑReQFHƆ? <%^ky)kCτ4qJǺWytXG3+JkY{Aٺuds]q<؅UȄ[f3$SL!+,-kT_-6%Dlٱ] f*IRHӴ(.gE[,jZvX\v~Ҁ #hF'0DmǍ ,>_ +n#qKWiII!ZGu]%YEQ4lAx\`0LDʲ \Ƙ{'{iQ^(˒A(ǓqY[z,^OqspkN-x$d1z)<~=;/"n^M #er[rm3Ou@y\j޶=!k  󋰥:tТ?w3,+'' *uj7 7 1NGn=̩ATx:fYvzz*=SDrmܿ_rjܻw0t[KH1$gJh!h|#,uBw8x@g ylp(Zm,^b* $C RJt qGGGk 4F IDAT)"~/ceYFz%OН;w,GGGROQpʲF0}k\Rץoy&J{Yci^ٺ!P<4:B!j~舙/y4]Ew|` DL$L[XO-o?H.I-<.2[Itڌ0Z"T_7IZ#w[oC^GlT vAVpkasss+3"9BA0{oeKl?oմ!gq]0d3ωɗCp-7 H)z?PiV*w?v쳙,ca~SF!Y});%pL^Ae#6%D D~#wI2T]N1vDɑ' $m;l:BBD1)yKyzONN0hԕeYKo GGGڲ,wBnx<><<&IWyX7oջƑuөR3juuz[bcPw^ZsIf3N^-;](f3e;z׹[ ֑J{^={zYc+H#/MMRO| }6+lm3M({o`u=²b<gn_۝?H 5& 1Kv* a3r#&~(zٝnH?6V5,IIL&$_|3bfyeYvr|zz*FQSD >dHL6":sSYփ@L?I!)(29ʼn8e$DC2QS)r26Vڏv w"$wXJ9 EhdY©y'D~ eYRP)CQuyF#hDDϽqUU}y />կ585B^-nq91u-ix Y nE[V7u:g ˲Ze.wnEwSXe~; ]am B0KԷxӥ/7KiK'p 7gРwwo#jX_r؎$ţ!;UU DL~d}#.שZ; Yq윛L&@WЋ0 *ȯmQL>ODQ$Hf{f2K.=s|pKAY" dIt\W9(԰msWK3ۄPmSlepXRB$ +*qyrrbOT^d28˲` 9e0W_}޽{_W>>R^AY֕=t:s{_E8N&yqTJDJx|j-*{BI;HZ=j2I"3q\U'Dp+hBA8߻wOS˜6=,+_ rs;|ݠV):H3~q\WF޵Wi{ݗuSus!Ҍ D!lme=[]YgGGG/YWVTkĠ}?_\i_<χiCWf  @ڣkA5}۔}o#췋߯\Ƙp(b.Y9wnl{{8_$I!rœÇ'IE![AD'?MFB=|'DJ,K"5qGfBa(L=64+ruj#LT|pqˋrB]r;f|:x\umꪪEQi*d-ʼn̼Uurcw fhh7-f!i4OFHH^ /Xy0y0O Vn5noWս7of?{g8q"#2VR*o}gńR,DDADQFa$I1pkiYt:ey?褨.rbߕG܀#<̲,{umP)+w0oueǏU/okPR[1J7_q 'GxumDhYUg(:cRI@d$+/>ߠPPB6x}+,"[vgwSFqNkɲl6[1$DʧBsͬʉtz GX\H|{D[N#DYHX )7VW{/bc{IP{>"$cY.8vե{!-f 2K L&Zkxز)#513->(/{/~iF"D=OPUGLJo>9?%>HSu)ʾ `M(tHa2 ;DD@kEQh|gf1|TƵ.A FtBb[9˲4fq#<ϙTYib4Z{HNofQy~`4Q%Iϫ|U]!:<|$,Mp L{Y)Ƙ8'I]0If >{!*J)ONN|{CRʆʲ΅TXk 6YOF[8uW&b,lNOx=i)>;B۽?8m'/zIݿ*ubA.oV3̬,egI&S{FA-:(Uh0)R,  DĤ4guB+ 8Sfk_.N, Ϫ m'߯뭲GĽNЯaXU[6CV[L,\+Ui*5W-ٷ]x맳E77.LHaO]9ZυAiL q3s$t S1i8hfAA)Tej3m#u׸ y rY07lԘٝ:,mi}edBDL~w͊$q>>) _Q.h؈ζ\!BDD2Oi𦥜{#nJȜdN 4uC]a.l,vQ,K RZ5"de<(iR FZ_Xz4=::Bc_ҟ̲11yjЏ?,+ D֞15F}˽ T"yHt4 v[м)v$I8VJy+AcQ#eg#'M!)D)E4g3}Oi,Kd)tVF 8asrogbҫj j Uk)^ "~j z,u8~p>9:~֫2̺ <ɒ?'aqU ` F',~~q"mj6#K%M.bۤ[;of؋fҘ]S!14>OV'BPP'Sy^a8e꼓ڷ.loRԞϯz߲o\R >C>ה3!(2̫9(95jO̳"<&[)4q%bXygU=,mv^>׮?{{F."WW^/i_UU."!ݸ;5la~UUݿwW~S;J)qDnBvX͝YHh{n,^7WV`Ыf}/ zj8gIR-%mJu[,Uї$`ʀ1͠qQ5",l~J]O@)[kڥu,Kt} `@ i+˲׏Nߏd2ǨHD@Eˢ&8 A4M> <?AD<899" ^wrrBDԧNNN 8;Oy:*KrM^ŕ=aaf"Soo_+'BCB*-rG>u. eԛ5_˞SWasʟ*aЅ~xT(0 REQDQou䲇Gh[E]WNJҬ]W#i78׌ELeW\qKYxerH[Ũ5"C d`0L&Z{aZ f/)JCG`0ND48Iǧ?铓$I>zyV*N+O\g|kWU&~] "v{knm_ Jwnkm pPkղn__B̡e#vb wXj  :n7}ngwgIJ) IDAT{5FsqbVĚMv8h^4 DX1uH7;? Cvϋ bAe)Q+E(Ga[g`㧴'n`!HY<pA WK݃́0 ,˪Ff3" DT**L' zpp@DPSeB0<99f΃>6uRϟ?fاs!HkmLr׼hwPybk{٭j{HזV~ڶj;!u ?M{Wu  t5ʮg_k amez&μ/1îk%m7+ hriٮ\v6! aZ>|f?i]$z=$IrUri&8D> *hەix0 UC[l0TU7f}USIa2L`]_nĎ癚1<|x:ךTD|?P)U>o_k ڰ8\oѣjK]v6[%w}eV lݻ?WWZYa+{ØRBѷ-ikoM&7|3lhS,:R=ݛ\roi|n{ 33bZV GZ}:5o|DxbXN{MYot&^Q->LGDjW:(ReDCbMPoSINZ^ym:OqEafY7 Xp6ReYFQ<lpX sK BD Z<ش"2N]Lۮ++-T|C܍퀽-IQV yɟcGeQ)KSY2mS(#WaW6nl\~Sޝp̣/J+۞k]*2r`^9??1>Hko:|~ fiq<ͦp8Z?xիW@R(JӼߏ*S=<= QM&pL̪ ➊ZO˽T`L@߾?w}/z]xeH>xw M9{Y/R+X8\@"2l%#1"‚t îH;;p"pUvDgF =Õ@krtKFV47T_rz//<ϋbwYax||3kqk2/lX+Y&ۖb*"G vgA%Jb8և \zXPp89(P,x2Qiz=Xw3N>}b־Ϥ)=z寲Xy7:R(^9EQ pÏe3fDjywK0,  3lfɟ>?ϲ d0'cWX}=`!jyH 解К4Cm`Ү N32ja+P;\]e7> ji"'oIq*M8Mu]xg}XkǺd+bLϕJEQ*lEx.ҭN-no/67׃zג"1z[}p,<RĆPM FeY JIm*"ܥn[5r3Zv:Iy.D3A(>y}Vl1(___5Pfl -^}ov=ztrrb8z"M:\sطtqUnMP"}5jm7K;"nOA4%lAð(5fYVp8LigYλw7ޘL&szzAQY=~<NaQ~xppѓ'a/ ? cW9Fэw%V!yڭk.lt?xϿ&I>6ƹ1_گ}\@aL.1fݳc)'6Nv A5Z{N Am6&cA0N[U0ÇŤ_% a"y|FY-T_d0WZ}p/b!CuS 7++Udb^?/ &o.25gc,!ЮKd5o~#P7(s܏~^ainJwrlI$LSfXD<-D\2xUkM Ӷ!QvxfY(ԟz0ldKe\C ~nIva[*Zj_qi x'f΄j7O3AkUB Ek]4Uq P1&"A2lz=tEh4bt[5 3s#s|VD4M꺞NQO?zt*<=kuXWwVUUUU $I|R\|* CQ) $I~Qb\BXkgZ$,I<ͼUmYcۅ/:34ѷm%=!aC5]v"m2o5Eū`UZW R[:JDXXD)\km(DƧw_`yĚH v2L @Ez>{3Ryg0 kPVhcLQJQz?_d2q(Bv#f-OnC'ف_\bʉ+AT?l` Sʀr6Š@9!ԃtRJrEd2b,Po}p0XftsT})\Mh&A x;ÇQCZ&f3HoG'1upX\TUY{=cbrE^Xw(v "$IFQS5 WNl2&-#2ֱg{߅ճ>E$07vx#1yCMc )^Z3\p5mzX8Jh'Y3 faD̻!̋ȋ'ׯ{ %X TNE"(準"8m#;ܯFܺ\u^A?ꚕu_PLb K[XDXbԥ\[7")aG2j'5f>QS O  kRT䷚bةboD6" IֵOĞf7BMb5-y8%]O7)EdK]r)cAF(z=CcҲGk]EA0-H, S0l$."2,yB T>}$M'V^?GvvVqW?Ϟ=ߧnY}H3{ö7:v'yY@þ>LiU9BxVXLE-ұ-dc2~8t)5͐1TKH @2_M DZ6f&C,DH+O] pBhݙ; †#bM=#ř&u:լS1,80AX׵WY:#6%_-b( *Dݰm0 ez)jmn}cɠUmr;Ӂ \s23`cBZB!bE+JS#o  -䭧oԊ5 ִvR^zww* /B6ONN1~#G[n}zOfuR^-ֽi ͕ k?AN-/ҬO;Egdi;Bq!Zνyy"m^J|]׬Wrͨ]WOgQ0>k~Vp( DIk5*:U@pNѵRwl"ժEĐG\@HQͪk7G,Uzv|;[̾#x{ܠej9>zE;nc1 攈~e W.lx|p49P_w ؾ5H7i;cHrXlpXzLqڬYڰEW̃}0$ XIտ˿ԋ`$X ҔP3E:P:b IDATpluQmv١xvS)t@p曝Яp<ԏ+$(q/_KJD-'0w?l6撦14Nf<}t:MFIzJ)g?kws8:.᷿{Q@xT]KUX :P[l6{`yw/D "D ^5nx~v r*ڽn nWH2IZ~s`ve5ԂSpzi ;7y Nx4Pp>s/7 & Ib"RL(J|Pu ^^ kVכ{߽BM(v8qt xI_:KmzE7̠Ƙ^x<βl)=MVl(N]i}*(1I C7D&ɰ}-_JSw}~ad]۱s>G6'0 Ҭa1t<Ӛ€!&Rvl(7 8vuh2)@.ȱ.^C Ta]2XʹHMe3~RzXt V0Ea6(:<]H ->"NO-CD"4M"Td2)"cOOO_xd2~U֓d6K1bLnؕ 4T]v+,)b8r]q\^?_kmw/Oc+lYK~kȮ́tqCYWnwa߯XlvppPUVRsdGmlN\@ߵT7#1•0(QLјw~~ͱnpwvHm@:^(`OS;]uM )W..zEm9MpGe9::G3#0)4<`)d\[ynITVQkl6CQB(ρÔP<<=~0_K KTOOQZmVm "2eE2c"D[n@b3WU(cAc=jP r1liqF4PXU\MSǦ}y}իW0YDD,CVx<-kiE1 PhtTrvzò,E- ᮭ [,3 Au/U߶ ]afp8N(JӔᦽ.ߠZ:x -xƸ57wMuد3ʬlw7MeJm"L!g såZIJE[?jQWwt}p("+}x64AOtH:bB)-"$ST%vMuK'7lʻ{ yaf!EYiaM!B|POR^o0f}lŭe?٢̪*ϋ(i)5ww=38<{`0@m'`0 /|[spp`m=ұV,8Ǯכ4Ax)9~ nݘ(oum4+r2yyn {Y B}?d~ңBqT7d[k3ppšu]|BJkbHsH=1Ĥy,rh,D44̦)њeY$Z/$广HSPqҞҚgأ&W AVݚqK3"62ærʯHc[K(Ԭ>XC*sQю1F"=6,HB/Dh.6.QhYyQ 9.^D[ ܨ IӧO}ߏ*EQ#D,`E1Fx W:M<'j7R&L8cQvnX݈[ĘHb܀؝Pk-mIW;tYo`]N#sg"WL#lY`wDd2"}$ZЍe`<^7N ] WIDQ4N8β6Oki\ymcWNC\ r ce|)RcJv CrfV0B%sE$$j!"(-Ŭ\~Kr{/dm2HOr@DeY~߀m$7MJync4!lD5,lBW.&J`~v2??կ~^SfY^/$*t]P=yxTRZ7UT윷*Tb'eo p7One۔e C74@؅C?e AmТ0 Tak8Q:"daR*"N&Y2y0 aGG 5 ~ Qp8 _N>yV^RqMA4 dBNmw]4$v^a|o6Lfl^^A?x65jE+,eͪc[T[츍;[䶜PZ՟[~qt\bĞE^b:ڶ4QUY~ i8(X~[__v5DcͥLQRKcoђz$rp "QBBL4$P,Kq}#7YM=W %[\mzEN<a\ֿ_[>f0E#6;V1,HpXSvWbvu]-9[nc @$0 PCOnA0 }ͳ=iJ35=_A/PbyMu6kzK N /PDCVj_Eu[e)vxUocClyԣu2 =)*ܤ 4ԤX SUe^<ep8(I4Ml6SػZ?lN&8ONNZqeYJܨ/N*R^8tq}<5}/ATv ? 8T4MaF|Gbws|;bJTǟ{8 7f$`\SW.Vh M>QPAna]^n_b\;J4Ზ7;v&XNc.duovG65(=[OӺݶ?ёM@7+=ϋh_ \VTU]7("㰓`WaQpb Y6YTƉU p.Ĭ݃OĬ`[bm&-sYgq3li[kA @} E9tjvDd6M&<=z6}Pk}~~ k5"JhB'Owq"IXH<7}BLI+>V^n[D>|Y+VʐTŐbERedD+UWfO+MbVg)V4Ft%.y;qkŮ")Gp!dMy(0 <]וR!Eu!&M‚.bVLrm6ו'5y[ie=rqsM+l+87s~TK?yFwubV3BrBan%(VZRĭO&PJ;j٫z8Z?謙XUa{͊i!SB+_ᖭ!^5t(_Tk_xE`1"~a߲Hzk+`EcF<]l0 r7 P)MRD^(FCwk5W&CvYg'(};B?FDֆ+a*!#=OiZ7Bfa24P̥`X\6`B4C3D$0C`ӳ0 jCk p<>'"~o2)GQo2c80IfJ,lу/^EikwP{߸f熂3rY4| [o*]={f!ls9I;R3=PyQŪH|$I0t/^Hcf˺bj 0Kd u?4+ϩiNٰ 7r7&h( w@H'A 76UU5A7)UTc5$!:4}%W^i8rl6Fj:OHǫW>,TCdc| t}mpmHk( [,KN ŰPWW$Y**& ;'ps!eyxx1T`Ufo& h\fcDo9d!xP{jyӶȅKaŚK,jV n x{ܯX[.uY)[HEp n7.BZ09}00<88xU>Y!ɲ`0(r|HDJ2l-asLġ)u @aq˨N[{MwభzK77!ʩ%,D9tDoe!e>cQVĀĽ"fYN>|0+yޓ'O^zUUÇ~]EQ1s^Dϟ? }{Qq|xxXu+ZVYYҚȘhyee8#] pDQpvvvvv"~PuI̾{7 63pœiuREQ)?EZGtA<ݺvV a8"I)bcRSڦnxN\{ەMnu]A~c,9ZQ]Ah4e'JTkȂpDKAKJ:IdcERmJgNoa=K0 Q4z ̋~.K t{Xe5c C܊FϞ=! ;nHSzrWB3错(O&} ׽ aWA?ok(`B;~pؐzj)G.QfZR5KơDdn;!.:4jyWj08\E (4,o@9fu'2+hA+|hb,={f^˲L$I $)et:C0!"TmDUr#ыjwYhi1 pL ˲0GyI@l5٧]C[c_ٍmPUi/}_erWOmeL{m;ށ5t=E[E6D>4MTNnWMBtR^U+J92"1iӎvނ+Q/2kȐZ"nk] LUUxVu l$°]mz8BeYizx5#1A6veǞ_pYFyz9GnK0žcd~ .? ê(-(@D1+!"ͤ|_KY$ʲ,=/ҔU] +u {ٯ,Up[>z?D=2q?Ifa] [V5%{nRnv^f2NJmB6K6,PDԜ)*DDKnZv%ҺYxI$lH!R3ǼRBX΅[퉯; #1R>`lpl-pnb$IX]񬦶Nn |ߟN8b>NslCZgYEQ$Kj曚צFpb]D=-(ŘI YE6g&uMS-i K*E4R" *n A^ 5 X6\\| 3ViUE]T;x:zJk)>e8fYvvvb]$0ٙf$fm~ŋwEnʾv~lvٍK|[cWK8a׊]֣*OFv8d'7%( )9<[ok;'n+ IDATRMծNViQ+V5.-?n!Q=ڟ] 3K_"yi}w%Vԧ>u[}wMVΟ64JpnwD‰;h#2cLEHIUiS?S^ְF73э4M8Ze9n= tX4EYeeԽU""UUYQRnE}Ϫ 6qvSmUrCi /\zNP8 Xa/FSǢlUU0--Mx qTx3L&+5Egʲ0q6!# Ci`0l+999rzzٙ:ILS,Mw ^Ç2oau/lxM:5_ ,Nph]E\6J̳g{ȓ񴮋< -⊨{7tD0TE׳O3e tHioش$VJyN^UqǓ??J ]Fc ۓʹSc 2Tt< p+ ^\(s7B͹q""*(Mt0 belPyQEeH)0 "䥦pXUd2arGD05+o Ddܼud,K:]]_;%Pu|pIV0w9! ՠu,+(ByD&SO^{ɟVg?Ykm$Zk{^ƆבuNTUu4Lx??O??<[ @rB vggg22 ު SV߲PAki;n|6),glJ(#$4]W{yM5ѶSji-%Z)8"X]fiOVΠp^=O(DK,7]%L J xpg>OmS vkBDQ)o<9dc#"K)(D3ް1;2_\,c\pp4jb;(99OL"Br(+crG)W,E ]Ifi1}Ǵ QB8geSc#xDz &f|_.+^ˍ8|i >')%2\8{x-"&IRd3tiYb%">Fz^+_ mmm=GG#^~2N&MS"*hƔicˬl'4c7%o 8m+4-l(fqu? 1NImXV|ZX+cZKQ!X׽Ф v閖|en@Bq(i!s7֓7vt`愄wj/iF#nmmι{, A ˜ul#'Y]VBpD֝mIC*H2Pߗ FوDL&B,Q/IYl|,~*%>o3ol`s V^ߞ=meYm-pI"AWI|]uNuzEW'T;קɑ2Xd>@ v~ƙ`0p̂eO/l:82EBw!" DD$Ӯ&zQɎe"D(@(GD¥]"zj&/"Z3c%fz?&K%J|..#n(8Rj4i~Yj5;L<~(bJ>g=<58g+Wܾ}kv*cӧ ٔvs4Q$Q8ޠ}k5U/TՔWn,S^~pmǮ(p ob9E[9 gloo3-\_0Qn$Z[kXtXdW9*`,A u̫6 rH@'{^X֬kֽ@^aiOZ%R8 G(qhiv-&KV5eYrԺ۶c~V Z0?ƮZyge[![آ)׉sd2/(I뺮JۇGiMuJ:""9gIdS9x,QJ]e:HV|E@>,lNt.D$;rD{( <ϫJpub#^ 6$Ivvvvvv]׽ƍ[ιp8F׮]+&."f]t%22J۪9Epe=~fmioz/,B<=^l,pLVNP7n: @˼J㞀j$/C1"s&f7G[ i::(4MI"oJ5Y"c,WUe]/˲}^s?rj3T8G4 S1wthg SNO?H\m2^RPExy  tDD /+E'bx4!pM? WQYsn{{(֨+eu#-]$]uN!Qi)0d|=RGR!B8]Ə`Ardـkkc,)ZD'Q^6_yo<8ٸ9 4`O%4! 0/NO:0W\:c1T2 _s<@+` !ʲRDTeYqRj(_99>7nȲ_Z0TUޞB?1&cT94V>@]WUJ`q Q<[˗8e ~:+$Z@KX|{so걎3"; :NU#ɺvQSifYV.G9>> :{Yg<lgb{{uki'E]h[}& 2I,3آLDa[o ^[Iq7tsi vƃY\+>N;+g!TZ t9)AL#˞s'rw?w!rrlS|xk@X$<,bdlpop&I$Ʉ/~֭[q.XkuKPtD8ދsbq[YTkiYqI9g<[Zv5"b)cs9"v:VpEMnCWM.sR@}-DDk׮]}`G"є.þQg4aa@ 1lޏ|jR8 _ r?9Y 4KD q3+9$IcG1,pCch4J)&cFp8L4#kU~,}A׋ 03n` -[ӽBKȹ{ZivS8uTqDqs`^:X8ψ<ϓ$PO?E)iYc1xǾkM+yEqs;\}_aM,K>GDĞLz Aº9[J$@)K S҂/ީė\+xBQ,=eu:P}#l3? z"!"SaGZUeΑǿ(yM&N9Qխ,ڒRE۽^GQ0bͲbwww8޸}Ck]E;;;rttdIBu@U+rߩ;ySzիWcd3m?RA?E1Ai8bU[r$ҴqOfO=N j6 ׹#Wcoˆk^|9,gQܞV׻!&EX|V[S<)2sf|̪"楔8s }d'9J{S"^$ E,an^wpp0yTΚ mr iK֚Ej YTWI%'_RHՕ/?*s!@FAc-GpR5 rp:HG.BD=u*, ȵޗ%Fl[$Ş6b%R\7ڐ˚`6_q!1)/fW뺗Gi4 GV7 WK)%:AYfФ$ 3϶pGaTlw !q| `n1( ÒĴMZJX'%kkS{t_+JD[M^DGi(6[ Hl5,eA|1uIRJ%8&)(H?ס"RJuP)$RT}{?u] }]^zlN-]gQR߾m._#gj{g¶[M-LW԰v]Y(^9o9y?SJ1A(,yu}LkDWOӘ$ B4\pe<>O|?>>'+oWW)c!4iEQ6.:MO8rV@+W_?g( "9!ڂBGKt [lW8gU9(J[ 9XԨR@ ђ=%4kNk#}6-vկ6 QY/DQt||̇aޝq R( 5gEB18x< gȼ _@`՟4u"Hٵ|{.3s] YE!I(F?˿uVg;|!Kh-<^oҺqCc#"֣{h) Xk]%-oR DD)PmsϕfUʑ]Pd2Rઠ vxp9!YbuX#N(&ح-_fGٻ*k\4Mwww_eq6ۘ'15;س?""|445օnjT=qIoWæpxa?|V7K)Yk؞NN|P7Ӫ.gY>`p a|c>9cy5*P+c"4f66h2h*+qh>~DXZxkӦrSW0|g|Ӌhpn(8Fx\W"" 4B8wU g%" mTA Ń/s.txYZ+Hq,y~/ =h]MԙEXN<EQJ(UYGQ$1q>fʲ|(÷ɿMi;GP(p<OeRX$B_v  Jk s0M4ymRO[k-r' |;`ڬWVRX9+֖ea2GO]?导H-7Id|\Էk,(w & + IDAT` g;*9✔ڪ(mF"om.EDP®k-%ǠEDUUIBS[!D]a@l+!M[P.%rZ7)=3SpWr."rPVOqU%DJ8Jxd!@O{e6 *"s!uo?Ͽp )P ֦AA@$p!ࡶr $5ΌS`7 -9NN-TctyvEߜT ~lb Zk9 ؊'wNcdGy_p\ 1+7NڥgoߖRqQw*" * ; > e{=u }Z Mӭh 'Dn9~9))g %@iD0|F|29YY6 xaQT"8s 57oby֊$I*S-}(zřh3+K畈8|d2a{A)=<74uvvRʛnu(w,24W%'K/AM!%)I)x|ӯ{R?bm {饗P^Zz~|;<¡-y&vo s@YYUUijtdL7`X+b*JgǞqM!##v_wu h4 $h4t'ž*>ǂΑs0S}pʮԜuX ^?, YVN[Z$sHPk9׵ ^̺Xwp|F}?$ȹdEQUR4N+} ,ʱ[C#+MlAW5uM"U3n~`tfC5}-βBZl 0 vw*g{glOqād2 ` N W^׾vrӽdp<#"S VEYû-Yv qw]{N;dCE'a8P+hcC F}`0`n.?aRvh"wmփ9 ׸wƍN:#8зȶw/jEֵQ U(g@9"gAX8eUQ]o{s/JL]3Qk5XpDo.3; c1&Bv^hRۼnY|dHL;_F9,KFa:7H6'9pA!XGƻњ͏}ci ĝ\<Ϊ8PNY̾& 6Pnܸŧ뼻Xx?G'MS0 cQXB6_׷^ l{ u?\]PX{.0!Aڰ{SmIatBX3fjǺ*x3b0pqIԦz<;vw>WqX裏_v(49le(`;::B~d#JS9'@v(Zntc{amY'K'1Dۍ{IML.=cR?I86u[[:poyӳTZO~gvR$V(֖0ZGI:myˏci/ct^o7wa3KVHzWژpz=λ b[47Lfoo%R4Y|{{gvwt_ok-58!.+i#릮"],I#h҅^N1愵LVͱ`=ikO׉pצh-!3?O8V*Ipx|%ImLu$do|8N:6H&A.(^Me8⌴̰lrR]Z`m86]"@ RHr Uc EK( bZ,ٯ$MӮ1 yn~lMH&+ZyzYDt^ұ W8v̕"L&Lg( ^%%%ItZY9؊^XjdN3i6q}>E|/K0p4cxԂbGY˲~^̍$pJ):!M̏l>iKLmO4&=iM[^lh{~7)˽dZ@[=3?a-*(x_xuYYkW[[@94-Vfai/uj.R Y Q:0ͩDG+t@ R D4Z{2o"A,FعS3h4T,]D`F4s[[[Az^)|+ШC!ih4sN"8WMoHN9.KЂ|.4hxӄЪ0S' CA"6Ij>6uUU3B)cOUU %9j}o=V6w`'9!trVζrp3 Z=j5#bD:.Rwdkcֶo|푇VEDZNEI^e;˘Im)Sn"H |:.D9>ec1#@9r*Rf.XZ/D 8]#B@CHQ`UՈI~QYhn#nѳn , (, kV f[g\zEJYsNȰl+݌MISV) {S|O¢JY< 1'lHuG&ڞ0TQ^YqSs`aTe(Pf@R1V)$OO o}˳I,} UQ9~~^A*HC8F {G"Ȯ@!~舳ij)"I)eY挋xmoosس6 f3k9˪ՊՋs;g?더?"+ݕvi*<|wMQi7@D,"ye_'㺶y^H ZYKPdo\J 05@@f饅B03!k7O/MBl|!BU}xx{02uZ +OG+]6;nuiפ[npF\l\0꩔q[Ulqua>d2X$K.X%icXPY$%Z[3<:Z!:E8N4m-xB`?0320򅄞Sk=1w` "CÔ/ DdhʲEw㘽G̚< h繩C9vcS9+E VU%bx,Q.T!VXem?$C,8Hq|e,Ϭu_egeY_{ԋ"DpF BKw{%BDe{Zwu\"bY̿g?/~Q)@gاV_ϥY%ZIśz_yh+5|K_qO=裏U8C"E#V$GB";yVFQw?ǿioumu9gU"";5pb۩\EQ<gl?s n..C5X) Z)i?4uTSJGFQSQ!+ >oP?l0ĥCo7 S BB \"L)puy+`s4}>_"" tD"8.ƣ#9I]$\Ea웶-yAi;5` ʹն.F'VOZ 7TՇs{9$autFQLټtE[lQBZ˱Q95Orr| X Hi(H1u #|_}{M !a: (ASp, 0?@Sµg &gp@j936dn0dLrd+umIgQHξ,4K3Mb ;,SC)+˲ ~U<9(#[[[DnܸgLupp+mbbf`,v@Cha A+~c\$Rj[8-L!?5 >yIދs#USe#DDr*R*=kxO޺u Jc? >|sx=8H#"$M(Dž>~~N}^zeY2 !QZBhi?s)z[IQ~WFE+jċUt˺jc_>;vvNY?kz诖{TJ;­*Q)(,q >$RjSfyI|` LU-X9aJsQNGl6ILωSQ \'.ς*gpO(gۈ!'.izDn<>5 IDATZ6RNcRua-A\ÜuhWs:]:061˩ .nN>nmֶ= 54C{L&k|N ]ouq!|nL&nM\mش?ϯ]#Y׎ ]ұ'^o|3K_-y٠yadsB+"_%xhC`ᴂƕɧ;U{7eA]*ʲ`o#+esfİQHZ>9`k-4CsnwwׇrF=AY*,|H\v0j:7P{FOqkYݗ{m+OͫSHLW[aZp$I8ÐιH'/5s,]Gt7x}C p~gZA_==g PtڳJ-V<׽AgȢX4Qy7 àQJ ȑ1=d&ͩ#}̒&"$'RI%Pʨ СnGܓ)"]#܁r Afig///c禌h)9H6C|-hX/5liPtn2N-V>CxͲA3i |g+WgvX6C yĭ-@RéN3_qYqq0V[>l/hWtC>γ9( )l<YuY(L /~{=dL hEM^ E@y#<_KyrՂsJ8<vGm}^=pΛfZkMcFvN3Aq4$9owWTueY:cc#&t0 Y&>]~m2|dY6yOA<|EJ(Ih!Nyt&ZHE٤`bgRʤcX pħ+0-۹Rn;k^TEQf*s_ƹ8|/1c8z` U`ZLK~JbO2bkN/> pKzvg# ͙Նq۸mwB[[jFFu-ݭ:AB*lgI(CYmH8ljL*1뿎! m8 [3pFbfƳTEpIimJ !8ਛOlgbW׵,Qh``g Pp*P:yIEYJQ&" PqPH B[I Z-VJIBX縝Dd]z4t^R߻6pB~`&I /`ǹt݀Wy}sq\9-I7-"NDmn][EXm˭.$Yq̶\oYxuOsnJ}y404o3]\!=o?q0!"P"*t`8A[gZʲT ̬̣,LpAM j*lAxP$`> 1 "YxpH'P& "B<88q &{{{ׯ_ƍI(ʲz^8F tRYaqVZw LŴ8 ::JEUW,VCe@Ayp훻[QeMZ )@Du]TJ)#\vzueb]% HCGމ(X_3t I%RM$!=(: RS;9g@":4[,Q36N1BLiP~:4ep`uNP ր$ b[Å 6))g' o km]csZi]в \96;Nㅯ(cOTuP#cQ Ϻ67@Q|ֽ~\B&j\1GGG ng ƘCh0ׄU åb l8M%_|OTJ&tž\hbO60HG(sȗ1!⋝8q1ߝDžqtfa}j@D|*d(0IF71Ue~vQJmmm 7oYcL^lej%f.< Jmd])>{nzňצ`yyA{'H"=襈 } _ <<#%fw^~bCc<"~җ'-Jjlj"qH&9AC[dc\=x_z(EfmS1+n׆6xsͤi:0B9X(=w`@t-6Ÿy:d 2ULW/U4Ө1iWۻ@PU65[Ykn Gb`20XVK )PJPI^GK$iB !C#B5W0ƠGI ]r"r@hrPACF !%2V!D ~"{Z#*D@KJ5aP$9מ}ꁼeU)NP[FO?ۮ잍ZP6 5cyM̲y9m|cUoj=]P}=k_^ƤR*Md|hvp+op_OYy1q|rKQ Ǥ ^wUvPš?É}_jPIy7%9FYTv¿ ?_֥C /IG|/M~Zkż'^M0 t .c1L,;88t[[R^umZs~DL&Yi%@#ۣQA 86,M윴Z_kk͛ +^6q#F@˽ ;O=Xvowo`tp}`$Y6k4гn͢ڹ{ܴUwmUUy~8g nɰxSoL<{uBbj0IE>K/:wvvF٤S$iWgݣ%z9ZUg: tHļ:ICP|BA +cBB:_BHDT|{ 7CpBxD#A tsT~USvuEQNծ^{ߜsKd>Ry{)fHMi:~\&|R5VvΣOžg{"U9ȲLK1;?u 1WB: $K8g+RJ)@)I2R Y ZD9!2эG5?ǽV%a*p`5;8i5(ZKB(mR#rͳ/RY |m3{k$Z5ޭNZF+O(A6䓏R)\<)|rv)!9m^\ 缔p] bn.VJtYT&Xjy|ȁ䗔B0zO5erSe@՘Hf@(xϸbQ(f RL|x~$ N->2{Ɠ*OuQi3Y[rFL  F.p+t+qVIhRյd>>+D...(yOB ,"rg1f`M|=:] O \_;tL=OJE֡6dI 0a&^y`T|^5:Z 3"ڶm[tj j^zC=TՄUU]@3(ŤBV'DΑI=G`,kL}'E'a]k竚(itѣ򵫮zf@a^D(j7XI}nW~Rzˍ{\tx!rgBp>g#2cL/x( C^qȒQ2XCnA v;P үQ53/{ FZ "4Dk}|us+k-×(Q(.fHmLǣu%(@yՉ扪Wz9(#,//f̩pp39+fV#7Ȁ:R1@"{"*3Lc?.@P\O qTsiG&?@Ud!zEpcP <u*6v\ Y ð^ݻN/lS<2dfg1^+ b{ՕqC#ơJ(t:FAPiH4 - zN*Zƞ=ϐJ8]!EpzȎВ'U5Xv[n0 A{+% Jo! :,9)4fM-HJe&<=t>s69e!T` 같?D]O RVHR2qC9IMX(9w#CF\gɮP h{%T(!⇱Ӵs/te3yu Q9~^yl6l$6m @ &Wd>]*ar\~(hHPNLRkCmQJAjXm;"c*pȈAjmYƱvRZkynQ\_p.,/C+ ~]Up܈:Ppc6Aj({0 7~'Ҿ T->[ \j+HQ90Zv2Ll6(P=yz87F;cY@f"YA.fҨ%dLJ cjR3$@ )T .[hJ4 Y ,@, %sFݫ]v/ԕRZDv}|R<8T={^D>p7o&%USK 986'^LDD`0D)gn޺"C@ PV vO4,V=_~BR tk g Ǥ'H[q"qa$IV;tdaquRrD9DoCD eHZ] jSO=5;Wͱ곕VWˆFd Mk-><޹cR!1ʆ0UFxprb 9. "9(.V)%6ٺu,zeg/ |-AOXex}9w"d˳ X$_7;GϵA-}}ZoRJB"p"MvYA)ec=կgb'En;[nm[{ɤάϼс qo p{ַ3?׿ ]>WT~ l.نMUID_XQ p1DI !8~؂Yj$:$( 4Dā0}Ŏ_pprA#jh35r$A=bIԎ@qva8^;I08  Yal-(!#Ⱎe]k5:rRIr2G#?Y+^[^7{8ŤpTÁ~Zuz@ (POMVpxLLY{P=C@1J4 dT)#3ʃdJyLt+thܽfʘjZk1ƅa 4lm|=8:ڷdMyGQew[>N|ӟm4\ ^gYqtfj0 fffݮsh0q®w77KuX%Bg\|vr砀DJ !(ʋT* BCb"⤿<9S!^xُ T@ZcZVdҔ_8Qֺq7~3Z빹9f"_nUKN9TlCTq9Uϰ5 /yQ!Dij+w N桚z38, ; \?_Ytbp؁תD-đBۛ/yӶNegp[*'˦K~b&PW]jMhPJdY& :G0QzBB~w(Wc'.6u,\ diH`+8`O%C%8 :l8\hi@awZ#J%C޹0TYJBjuulYSեf<#'Kߘd99ʆ="v:= l.;w %bb24<&`1 V9>r@:dh_N#߸~[c s0Y!akqi ?Ϗ,/w~:xfyl6:\շcJQJfiLP繵v-cҲ c  ;6˝,벺(iر/?|Wpp̘ܠ յ$|{شqffka$IcѽZf6q51ze]!*UG 7l, Ðu8uEe*,ceB7QeVWfCIS7`By1)lVtGy DV)o@`<\orp#7=)88YGN_v೭)f_$ B_JrY%3:Dׅ2!c3B^?, ;W'{XODpkClB%J/I!B1>T CD %Nd4 -"eAҘ"'o(* 8 q8Oe 5ދ@4F~@kUBT*2QWKG޻T@?7k D0ȸo8*?̎ڜR*Ɐ}み6&VEш+=8?{noG^i:'- pp<ל2 ( I8[n]XXjn7($ɲ/"q4Ad 묹EK6L]^OS`sC8y n޸l`cb!*f9DuQqHEQXGRR*/0 &: DOp|Ͷmۢ(JӔafd@/x@^ה缴Z۶m[\\fp$ C).~REz Z]FJeyyy8TS}I= b! Rc…A,0(9qXa2YAcU@Z!X+%dfGR?V[GL=tP`oDə/#ꝋ #s,xB2A`AJst+Yژm+)n2we3QRrMDys9A!CX$/?oEaCo,#"\Fv$t:4$M^z\ k2˜:KJ UJCXk9$j-fzACyEZa9"cOiq\}՟'xo8py0A.7쉴]#ixIyzF߆[[oq1@'%ZuӸTDlDp%]0`*{[yc>c[*rT?.B\ADPEyQHRaQ  P@+ )w + "#5AktiU8"!Bi]=@8"GNBAl&,EI B : T@` [ʯBe])%r2s֢Md|C 4V^n2)NeП'&]SrѮep8|`/CX ޒE"vS%C(G4=i.T9Qı8`5ϡUχ ̣Zkrs@ cBJ^"FVUu !€3Ym$ RJZc\EF~NhC1!e9)0v|#hɲlr':0ƜjAP*S! yӣ-Eu2_T9(CY-{L\QuՎ6$s`!(%!ظFUl1N8~/o_?JZr(E4O&OVndbM( uj^]أXKٔ;Pny-ϰx̂*j>}I)d0wlcd0#9>f){WJqdrz΁ʬ'-s6`ʎi2^X;BeȞ ΍ts߸ ð-svmNY0}qk&<۫'i:0EX˵EB[ zÂXRJ)@;RZ*r R º_ 0Yq8XogtX0_:vo^W4uZZ to^bәRrD Z;wjEnn~K,N( jq2lcȲ?)%֜Usqqq9$$Zʁ̐*#tAP X(G#uJ鈮G<no|#M :=ʋ_6nI`o\6~eYƺ~Qdc5T'h[ ),Z[U/oDJZcSlx+. PTɢNe*S9alEM Ð3u:5 KKKf3 Z)Qh Ð^A/Z ~ !1z]k]D+3+9j@Tt:333h$ q3\h4|&/6{TsMe*gֺ^cZVUJER025A v#Si%Um 0(={99W'~*&L5Nw뾌kgEAIT /B@ޠ02o~*i{4^J}$0KPo=o5r\7܁0 -u QZom)eTx.Q6/')T2"Lj`?$[ dOeY0Q/$"6990dāݤNǯtwe:H)./I!cY߄ΧgFlu(.jFj版q///#bEna$ c k|ۿcVX\\ 0cDL뮻[/bƲ=a/zy%Iv}2FL&c=1Le}aEE+!dsnaaFr*=q<~_7\tEƐǿJ)?8}tem^TV\_t"u׌1 Ew?mǎD#zӉT5sTti@XaW6ƦDbLC'}؋zqRE?Ŀ&t] HcұqVꗴ!1=gG[jTۘYKYp*]X*땿l[1k= P*vEgB&ĔBR(T:$.sA&TrZKq_ɟF?f<ׇl- UVcSi;<Yi#EQ ٟ=9<97pÝw޹C-ZcL$Z(  Ys`30| _!n]vl2j6KKKp㓿CSTs8l!Ţ(6q%O:&-g!|3K IDATg6xw7[kx~ykܹR8sfYV9 *gB4ͅ-[Gqgn4ݿ?i "lRvi4CIߟLe*+vyb,#>S{eY/C0 ֏>֭[w5A^Gx{{RT%fp{y_wGQtW??s=ozӛgj5v0ͽn_i7|xwaJ777H.INN#?5D:N'~^>#L&k$NLfKUW/ m#T%'a.}&57ć 0>3>)ooZk$֕21 (j$g=֦HXLʯ~J(A[krڐ3A MMuiX>>Oe*S9]Ǜ b#yEc;ΏVk߾}K{nk_WbkϞ=7x?OIկ~s+X\\>O~~憲G4r(g}[oxw~w~F/zы^sLt:a/_}G ~~fL{1[n}+_y[k_җs=w޽{9|}k+^_F3RoMTwΛo+HP<p]wtMO{8FxC1>~]w~_|R'}Y}k[n7w}}8^Z9ҍD$X ,TKDTNjv?9'Ǽr`W6EDv횛z(gUQ t:QQPuj;fTFQ66oMt 'HW9kV\dxemű]XIZ6 \bk8+ߌ6Fl']c[Sw=ڽ w~?ro#EͺK]29WPa 5\ˎVv,tTr iOf wEQ1; _»~^xM78 x~w<_mo>QQFDマ|#^xx[\ZZ'?wOOw~DQ̹/╯|G>׽u[xƾ <;4L/&ƹ-ػo߾[n;|ᇝsq3G;o}q >~tGyo[߿[no~Gge.7w}w7.c(}(D"c Ƞ-tm3F& \ھckLZd̝=̼27333;;i~4P@Nݟl A/(-( %mﳯ9pY*2J:p(L(!Qh%אΌxm BҖ,!$A $Xq0*`9QecSnK%%DZk~ND PDTeYZX/ZkV~83܈ c-4Z877p'T/|뫞-p $DGVzED1T@2nU; 2 Dzu uŎJgg`6yY=JϛrK&^``S6}M_*4\{__^|}@;A_>3 ??o> _z$W_}E]uUJkjm__e/h˖-/x >OA>ǛU(_ّcsvyxk]=j?k׮=yQرnx@&/ۢTW'O| $y)p}]s5\pAj7N_ aA}W㮇g|w Vx3_ _w~뭷\y^4rﭷr_>+CA^3ǁDzl憶Uq:pD@DdKj:Ʋyi @\6#cmVjcu责z(ƒG;KG )8#sNʠ-rdMQhch2 ?DPUI$*>^ZctJP*uPgiHz+~ƟYnD='ʋu,vz  -_j|k^\;2'y 8Ji[V$RbQJ'ikZ~-:CQD !PEa"% g˘nLl֜6JBtf9iT Pw󡀙9A_.Iu .XSTxhp}KKKŧ>}CO60 .R\n{}v΂\Ѩ:t pii)"E r_{axO\v{nn y{gÕh/sss8s9Ci4۶mvy*)<"2Lg}6pRGQNZF:v!䂸QiZ;6 CMe*gagcmݻ;33&o\Kys_ne3:i%_44sy^,=|ŻƟYGa= W>W8G#gl۶jJY!=crBOS_k$ɯ}ݝNg۶rqIT*j  {)%c@^oT?$O\hmp@DIX,HXD-{g"-49B--/iL-@G P8Ljq2N)e۷oO1#s=Su&anmƌ,ˈHL$Mv]׳,kۍF#߸+LwJ)9M8V+A02UZ k>g=s`R.2[n XXX2Lwgw 2]""_kǤi޺ucSl lD)u%8p={w\rhxNy~Ygz뭗_~93a۷[oݺuk>Y)"2#M Ie?ַW]u8p-oy}j R +E1Zl@U#"Bɠwm@YKDr!)4M}(Y}=\;5V|R\ƧĈFͨ(G-qF2aҩ%ͤ|;2QqBW\ַַus[\Kb޹s_LD9+ϋ/xΝesa}7 ^{-M_{oxޯ}kv|*.vY NP: SZ|s ѷzOz1M zDZ>їVUnxmoz1,*ǀ@`4.v%|(VQeqF]\i$S pBL Sp<1Kk |{׾ywy7t2у "Uv;^W;Ν;_ٳgffȑ#[n]ZZJ+8beΝw}}w=lٲ%/yy_`1?C?W(ݻw3mp"MS"b$G0YggAH9733fISʉ!8f&~rycW?a{[Y'ذ1*5duûC aL g@pU3FiT |q2؁M2܄v 1f̸;JHW,'`++dAJ433*f]vW"u bF'Yƶٝh eYBT;__󸬞~ ߺ!GqNY~Y刈,Y$D7~5At7tQ׋WΟcB[F KI!Ov: EوtC,L{G>LGômD 3qÇkFǼV@ݲeKN(2Fa<2.$kmǬqI0 $YXX`X#1%ItHp|{J!SO=m6kn8p%\iGQLt::M4M0>wvv((:s*STiKZ1dpVk%Ez]kh48 Py~lٲi;.+0j53 tΊ?~+b&# h0ܓ 8Y%+ VaCkoN84moG ![lyX%6f)lL8=KISE$nחchO;@?\e p !+کX!#:R?RtD7s.K ¨bQ8, !' DuB8c[V]uPB-[t]_ Ƙ;vXk=v< )=jNUQ)?9T6ww Vs_D9r>zT1 D:;i灊sAVgfby[d?T!XvŸ**U5]"dT m@"_ts|_'*sDu* 0_vXꏧXaZ7!2 kRSb?J嘌uJyI@΍jyPqV2P?f@7>~D-/-nWιbv$:,QVH ,[XDM-#a"Yd>0LeC¹}ruY7jEQ hRJOйUumJ(}~3i'.De&&(.e) ٟޖpYdV(yr)|"(%kcvΕFC[.6V_d.$ #;TϙH?Q1Uι'|âfd"a{1ѭ^&CK$a0= Ð\cf?琧%CgO#(p?4gͣd93{m-B!!{$#%3672#/ v1d6̀@$ cX ~B K-FF[]UY]]ݯ)S̸7]dE;t'|w{C'Ir!݋]wTDe8 c/:=R 6{ZReD%J(Qb[0;C]b $in=Jd)y1+%rM䌑^ȎtbЭǎ@2)%_\\T*_>\9uL{BvdWEkBZ,+޴;!(Mm1-Цb{%~ɅI-Z{Wt}e,^lT]XmGx2o; a@/G:0H ETr-,, r- ZT@ mVϓ%J(QDl1C~I|*A}c"{s = xZKӱ OV;3P&T9ȘLژ)Q47@/ tEuv]w U IDAT=N{|uOD)QiB&^f%J(QD%6- n񹭰'k$ZڛΘ"S" )ydKx66W lh:3) ql/ %c{"v9v!hžMp"=8OzYOWu74 ̇VeF_d6 (io Pېql'kX9Fjfgg//_a!9 ¶mcDsc(5f&fp3)&iw:ReΨ v_9v9jB*Jaj"c߉0%? Z333iO.(w]wVM$ցnlT/&s( 4 1vE|`衜З(QX 9 j5:dA|Rv4A6ijaVmkRq1ƀ.VJ*QhPZkJYƌU4 'ɟQu|̋1-Q۷ wGxO QȘ8;*nY ~&MR*e Qih)Ť(źmzG`R,Cr3Y4M4T(F k/^cs4`wc BT^5hJ4 K'?֊h4hBZ64+}@iP:m@eDJ) \)B)ZE>2Es'?a:0*ޓ cQ4UF JlOXBja=?^G%J(E^F9B?2w=^!=)L ;pVXqT3Dj"A (ێ ҵ>4!{"*v{Mi[>p`߬ .}\JIcYj|1*^f<*Wn$0 /ӨHC}hoq9pH(A+Rj5q/VES΀QW@Sz}(XFƀoϮZQ8D4>#4MQo|M;"i6ҶJOjqz؆(&=vWHe۶mەJeMTfӍ1IoTQL#4u|ߧV*y$pMT4@9fv"d"v%J(1[qf9OBIE0&DNQaת l).{ض--4R%1u37.m+ V '=ВZkȽju$2$M$8$I)ِ3d]s]# m~8 @DN֕sѲÇ۶9t:iL'nF¼hKjOql:o&BAkx|dc0 dg kCa6~ZމB$#ՏUl-]q X2ʏ?_`qI"j/# N&Rڋ"̩ip a`_=SdR  0uܵ?6ȷE<螧SÁKc'c!P;{# >0mӶO~zq !'tj^wuAqeY+FZkC-JրmU6gWpl1F ot:BtXZ-0p6&˲0뺆aoFRRwu^%J(QNeYْCޏ(fzJj 0%u0a7PJj#iRq;؞AP>]r4mM ,F"f?!v#8&AyVL9J&}&_l&=jZX!1˩x: JbY$3ǁ8|3%XבFږJ)˲0JCaԥm۝N'H)YV&T$I0ذ5 VBf +gt)7aj4eATu!$*f6 aRJQ+MLD)$)%y4i<(XGSl8U85]'kVnv A$ST%q*S$QTw7zdVϸT۴n†{)draǙ 9!l6&I$2z0ƊREA?14P8g~~>(vڥFi|ۭc%?RY#5z12y s;GF/lDBE`Wg},}۶8N^z)c,"q0:41M‹.°)Ғi7|X(QD%6js&IbFzK^lNEB|_袋@DqRA!0}sZM j~7N8/|sJJPؚ-8 :  $ È?~QM[u0F˟[]GcmkBGwSwcJn"y ݐ q!&}dضuSJE>ۖG$hbXqgr-/zhsγL+i@n֗nv!;$b(GRB28D)^w!(lh41NoN /0M%Ӗj;XD%JLA";"=}T4I.-!*s`GZ- Cηw5\+^O<0n׿w&=Uc` w`[Y͟5r%Cg@ 1Lȑ3N?YJ9yv@Oi1a\ƣ^xaŐs^ht d1/l2*dzkCc@:8aQAf]+'˘ A}h"F>FmB%%gL+%28'hyr׮],{y%g9Z\ k_T)b!s[Mktݮβ1Hwj .B5DB4HB«֚2tJ) ,:st:KKKZm׮]IL>ڷoߡC0eYȅfgGiNt]a-RTD0nD8J3)2. ㍳C' 9TI|DpAwoOJ(Ȱ.x1K-H뀑*g!sthȎڦm%́M}Ј4ˠLcnbnTN|#[-R˩&yDg3&ejRӲ|5aX8NBHIJ RaNy VM>TJVhʮhARܗC{#sm*i/Ɯ͸2`ݞ*У0-+y"ͰԀwr(JRquxV;nc4N:|*!afr%=I߳d cXf&e7>QF(Xu80777;;cS6\C3 UO뤇ly2RYCiNŗ'eYm{pcuK'|ό ˓W$7pRկ~5N*A6c앯|Gu$AR4t:PiRh4anȼAdn4QӚMs/9U*xoe!jIBRJ\VbŽftdΞ>(^c +k1CǦu]ahnBjd#bZ]&%'4l61PURhA&$ J9|8Eψz~~sgbS :5;ȑ#AuS RO=ʁ,9/E0:̓yb[L8,[ny_Ip(ZazRs~etM?s/՝I5◾%ð*bZ-@DJh48Ios3Gizի,hLh|+1c# !3,ZZZݻk`B)ru2RPНhclom(N/I?Uf-i}'GiT6<p1.N0_<[s".c @>D0 0}%PZ#B⟞Wm4j{)xg h:?FF2VF[X(:]8Ryn/,,4ݻwGQcSd* 7}twN\\sAEH'SFN\4;B*1㛱>^_ߺx!h0;>PwB$I3R˲$1 CjPRs9}C!k 0Q}Vh4t٫nUjH)kZ0IA>*iȖ9?N{-VgWN5f# kJd* 1S7 6?? ъ(L +a+DЄ>3}%^KYa\L1):U^=F4 jРw:T!īxBĂOjHAGG(E㏞ߏ 2VD}u]VB$IPQmQebfffyyO YE.q<\Dišvo .?$iZn2lڣ׀&*nL0$SJqRyQbP""JsJ(!TBM..Woua :YlTGyrn(.$ֈS6rq=+ϓe0;۶]E{r(PM\+@ЍLaA)$hȡ@xϞ=??i^TбyG= ݰm[k1YS4M3 5~w';L^tta~Leف!ta֡0 G}?cՏrqЯ-wuG?WgqFZV$IRVq)#V*(bEC3VjQUُ?Mo}k_|O:ףqLEci{;?g={Ջu~ŋNvO凛GՎ3;)gZGOJ(R $ajןPy4c|wcI$Nc92DpU{~;=__J:R>벋OP1u9QY{R爧6g=K\[%%[t⅖8/|38A _#sV:LG @E8YOdb|Q4 'Wi"ks,3bߢhZ\)x۾RDjgsj޽R bԷ߀+`Rk~91W4E3`.42)R6-K1&՘ySE2w*mF\wTdXXXg?ÈӾ dTBģ>:77+4iSx_#{?T*xAt<^Z&7+fq /gENW%\~1Ǹ[omyK)=묳^W#yk^#>;;s"Ym 4M(?3?AqVYtsgTݝVO/ -|/~@GríjHq=w|28ʞVݥS3G)w+:|7wPkjSrL%oB0jBlV/$8S2MgȸԄ J6jLSQ4/}_wOOφ0g!z ;Zx(HN yb0VRc]y"jRQ@4/n( 04Z'> )_N)aI0>pvdƍ7ȹuN|2i !p BT`P(\ #|q8:}cLlcp-o؅RLmqqQL2E)Ռzfʼ%=A[iCq(%V(U:,,etW"` NBSpTP#DD}uc3QpEkQRPYd'|r4%2S_3Y҆q|, moĢ)PR (EkE$ p"@=={&ҮeY6g~X$ X{n=++| I^sy1]T>d}4McE~$E={߿sy^1EP]}CQ|f qlD%@4LS*ҩTV;M~iB^ !3w]iu{Ӟ> Y˧v":cBȻ.JfE Bp3"RT*# X%q9LvQO??OD8xR`m-1Գbv]2P'j g4>#ǝ_/zJF%68ZKi$iJ8R MeYN#Š! gԮp!&Otg\|5g3?ZmQR/8'VZro#R ehBKk՘!ӈ*Bd"\+}ꯞvipc=}sϕRRध !8Q_|h>ѢҢycXQKL$,#8tw(B@k HB]&BU,ljj\ǰ&%[|s1)}+QL/Ј 5d!arN X3 52 H8F%@8&m4MHf<#t-Ρt,C@4; l;u)%ј]KQd`O+N\HhRftٟٯ|+"6_t79Is6MAЋC(*A~fư q`y4`Y'|tI_TT916R#䓅Z(o|0xpCzbQ*n6eaXvP7YatU;{ӟ%FϗaG"]w!o;J)Cs>#cb_>PIZQvQ1mݞry|q]wʳ/|onh;Qi=DTAJǔ(>g~\~p^~K<=鄾D%&0*3qaC)U[΂Z:RJ))MeXc|#xRĞ3_ SU{ꮧ=˟{zTj{`9=Qߪ;:U?wy{CclfBgE^zϐ^\ h=7_uUW]u9眃o!D -;ah8 .Z9磧L7M\CN;&Eޙ߸ z9nQOift 2!2n.'?821SIcJ4Qf2+֛:glEE\I]O 3wBn}!{@'fZC~N=Aϟ}wqE7gff$ Òdt_T rpbi,eE=:q֚GmDf[p#aWB $M$8ib0#Pr22WA;8͙(v]82B']@w*qK))'JBnf?n@a`)e$]v_?i(b gR?VJm|~WJpˈ4u:VU/Q5'IZJǔ PIubӐk76g? vi4CrY#qtbZ~RZWZ+mQ(Qt7'>Q+\|`" !UR}sov̹t ø⋿o\tE_WQy c !}so6!m=Z, ; rd>WW~J͆c[۬jr,H"*ǁ!~h.sԌ@u-tvW_w31OW=y؁A¨.馛 Ѹp=ʯ+@=Z!CCT7Mi986ir}NטW[I&;ctEAR)ϵ g?i݊gSB?m&jU?Е+ +v-F QY e+vJQHH %ޏ@b+Vkq:vZFǰ N/? +=}@}Jhy޽{xSO=SsU<'p뺤gNZJs1\BRӲ(BW#9n$T]Ą TADͤ/qt+uQUB&R- w:5%%8 5=NI;8I.ov'hk_80M0 -ZɢxnӧhJS(Y)CS ނ}Rrg1Zk0Jfggcr|[XDJM6*N #Jv/ZTSudJs ]MRq"OjAL>S"+<W4XP3 CGa ^NTO*_|뭷 !3Mh Ęa.9/I J)Jhfgg w ѫwQ7pZȈ*s۶O=#Gp ӲM|O9yOf>Q=Zk 9<8^Otn+a]\)縄/g-Bjts\T͒áKhJJlAH4+<<̖eaIHB ;j%i jsNXc̩5:37M_,#kjXMSB( 5`s\ +AhiBTm؄)%w`jE@qqQ4&wVե%iP g'Ejs(8& @FDgKѣ CTPTq8ΈtȂN PYK%e~TSfwsP$n*sqF"nF$# UQL,jډAmPmX,L 42E+]Rۼ>+Q E!*T{c3̴m# YH^QU*kI@l4*MAxkUbO-ZWr٨řv\KHׂ%Q|/VK=efwW[Y[;[@ I-(aFQT4BzqMqv=;;$C֦}hHCT6cڿ5܍kAǚŴ̰(6MSȳ?1q`JjQ1*Q7ϱaB$Q)PZA982˥wܕUҌDD 2djn]I&L= pw-OmKKMXpg uuva!<98- uӑ>*hNB*16'ڢ8 ΅"}qh,--! pnۓEmYEQ:Iw dN˃ܰTZ# H9>+$Ю-+P(B;8S?;~ꧦR?iJw}zxV*]r X}lƘRiWG(QıTiO?t4iۨC@as7PrQ!=Je _X6$wc=W7 !ǼT_7~=l@%tOC mR~ h)#*EA)g M.pzN?^sD7ff8(.L]RjtJZf ErĊ6DMsO!(p! [tsa5mePY,G^^)yչ4U3 Zg}  2M26fXx]v{9e َ7Yg~7 ÇzxƴO50Siv=40 Op:1oeGyFnZ>cS-W>Og ΢H=I4m 4 :a꫟YJ qa9OTߗR(N(@WD (tH )?a4 VgmGc>?b >|}gE?* #sR֟7'1>{sΙ"s)NP^~Vk߾}rJ6'CܤJ%y XkyiV+L3? &*EaK(q 4@)JC#:y;D( aW6l*Ib@8~MI+mdsNŸ7_w^M8٥Z=AɋPkR fyvInuhA' lx~svH`m%QR JA:BD)<G(҂#qA!^B19ʓ%BGC.t8 CqsUjCǮưn Z!#21f7PTfQeL6swePq< J,5sb%?~/ qqTJY=H>1HJ)'sً5[PUoW0{LA 48`:M*yҵ!Z8y3 8꾻[-d'yℜC$ Rok^_Ph[Wu(L'8BA4=P)/ifY;s R(gG0\Ɖ 9ݕ0ƔsP)pbmmm\joìkn7)$es/-]# ʱW:(Y`j?GS ,Es?s?O~9^q"ֺT/#0BB"tx ^ "ƽA Bp"9k%zZ/sZs4+sNMbti=-cGMUw%Oyo0,"P {/(rCvl&677:`0讵8bQ|Q:OV# u8^ )F@.Js'5YTjM.*Ϳqiʼ,OF쑡Urut:EQa[{DP0 #c8w^ 5 JD<"!JEἘt:^ p>b2y3Z"ˍYBg4xq2* 4hpǁg.ZJ)K>TpU, ÐZeeݑnTѩ)Nd3|M $/ի_yer2ϳj`0xeW@@H  qa3K s:G0KyÔ9JcgyAIe'e~V' W3h.USNsJX-$M_wFwfG="Dpr2'\LTXV=:EFֲ Z!{^V4xn-ZbeBp󃙎rv0GUUp. x :Kl> y2b(8#w*uhРA+:ߴw .*98yʡJYN?ܦHOX|2E-o~E+^|雾ڈekk{). $X$TJx1EQ n"&!qP"]LH%:!ZMRNcpF|8Gt6OU~ p;W M2v&0YF#9g !(UULy@Od0y>UְI)VfLQS$Z,vww 1J :}g's- g}60.&jأhjMkРAw VΜ((Z;;=F@(Xo% K9OT؂:Ap$NöZh?+!D6wL`w3mޝ;E\ *De9T%& Tz8 86 '(}RJK  "kY6΢0Sm;ۊ :%suJ$I8:c8P>Ißԧ$SMerϴZDPׇc_j KTWNB3OITJr%mT=9vwww!A ܝ@llj"vpPz e>^jrKea8[a7n,[`8EQ?R7ֻYmm֢<ZW&Q: "GelpDc89ėBxĪQ21U  [o{-@a'5 :2TSZ+upzcgg?R: O Zg)NQ|S1&眒53@6I]o[WDQT2(88Q)/Bk휻qL)J(%&Zkkl3ĸ?`em {h=5 t' $'tP); L<D68plAiBM qfq/$z%[ʽ "@ei 0HY3,մZR4M$@`gnхAYm[e!˨ZHƜU@TBț{ PYo7t<@.rckQiD[ #JK9jM=y6.ރ$ShD@g='mq]˱8gT]8)"ഉ:Lإn޿x2J<4M8zq.3aPd:MS먼EXD7hРA .' xwN A:u[ॅQh42$5q8NaAɈx(}_qw4M#(јNdDHR2&8Y2{%̪dgTFN|;E<ͽ4gi5S?H%wXᴯ9ވ9g`f}/kLwns>#f$IcjXCàA bBpK 5{ ^ 8E&eY"74ڶD8Yܤe˭ֹDCQ Akfy䑯WdtREQqKDMVk-*(emRi N缱]=Ӊ6]3{F43_Y 4hРA f6!p"!1Q ?c#NȺ,Kp[Ș2R)R92&Eyo׻޻d8q-M*[QnUJKM Q>`:շzz} %TjۑtӚAJYY.;fcߓIO9G)&xj}5u1^kEQeinllc,cQk%Y`>D1Ujι~Zj m |0 4hРA n+Z%ßTE~<0pJ/G,'U:ب3I"C!=F/<{$ɋ5ZKl !EEh~HQvTS|LFnz>+}oZDв$g[mc7oKHnUH)(B21UTOEcv:}v_sΓCN!rkrە9-6hРA 4h& V%Q.:Bny'B$8o5vFy̔JՓeN}Ʈdul!շw1}w%Uy[se{Įz]]7â((2XkYa>`$eS pSsQU,n 4hРAmIYPD͹w:R^$ P_P)A$(6XJ%3m_͢rDPE'Rw`~^PCUbzsam}eKu&FG8Pߐuej]0P"Ts]ΗO1g̫1DD v1ew3X&χ κ `UK~ǹRk-FyrU>qEV+?(0 "R !V|}ő=Ȉh,#D* Pf!zocabjL 2-AvҼrC,*Zx3[!V-Vic9URESRiw&zvxZ v#[̷ bcLyS݊J ,J (GU=ͭ-=9._v<&CВ2pa:E(hL-&ϷݽRf!vCŭmʌS۸~ZԊ]7z@o0Tszov;%>@~hNzRA1 %xo V@[vǁ j-QJ QGw1G!? nРARLq\.D$IFQgESj\lEDZ1fIi,ˤAdYVf]U.-+eOh4jP).%GV(ڭ"(@UDdj\J?BHp:8Q ayRZLD0A:k1Z #t1EƘcAw:_U4=F)5Pa_(E[˜EZxϚ7A{)iJ^* B>#'I @#xP@nmРA Ye9JZk^j~10 GQbou@OJ97AELÁ\k'a8gc@YJ) #Q{y)%vi He[ R0Wf=GIt8 &HfN3Ep$lGՙ8jw K3nQıJ07Z0p$sN '6$# "7QpH*έ CfHK9КUnzy 8r (k`,Y 痯\`ƹ8͗NUɉ1 APSoqA;3@JEAD2Ч}]VHJS,/os_rV,@"(zb ѠAQzC;TgYf< ¿xk׺.;8I<[",_p" Ðe96ĔRuum?#&X׾Li9'Q3׻McL%?[]kTBRJ11lȔYN`Bui> 4iġsϥʡrWK9c6R8綶z{=y `.xC'e`0)uuMM, ,86ʨu `8ZkkNk7է[XKZ(EQQD O:˲0 y{auUς'SWqFrb@ea )"Ih+x{^qWD%8`1pCI| \'A7npOɘԘn/_ !﫩V7)_a7α߇^q@"RJH˗ۿ} , (lsZ3f8=6Ax,曛fij)h {B "z"k /DDwB"LD)9F)ҺM'u4w=!s:DOnOG$|kI{O*Ψ%?2%Ӑ)(a1ZK"ֲƤx2!TY"1 Y!Y=sL?M{JX}8JDE U@^@2/~d-/׿j- kwo)Xuc"_]mU"(g[}ÿoo~6tB}R%0+UD@$=+"<䫌F&F0"@JbY ^!h$yadZݺJ ~ލaDPSpzjK.]h1@Qhw0 CPlz1CF:R$^(!+s#vy h]Vd@ p6"}2 (ɂM_^GӬ.^UrD;T!n?2 ~LU\~9JQO:0 ")HBN[?xU| "csn8H[V^/̲Q7^h(z'@}[Ra8$pfHˍT'UU F)L@ +_4^Hk]URW0&h\PhEiǨX'ֺ gBPz}w}}=7Ծ7~|_{k[͸U߸'6/\y`79Tixb$z> @J 6 ;#ΚY:PYkk}?KQ @9 s)<@RKk*Ԓ:1> zk0RJ@) F5aHȭk]B /=IaPdb~hgiSY+ѭr@zVȓH@(@ S_Ek]$iq,` Y^,_URԇnspj9TWԞqYrM9}J"׻k[[[<!ȸAYGDv@e x8>+~[o'$I:Bns pZ]  ˜)< BV%ʰUɹȽ* ^@?dM5ɜ)`V.2h#AD[[[,`nUJAP*7Ƃy^w\GDnXkٱm5iEqNy[os?FDyP !0d _>Hnq=8Fn4L{LF6؜Dӎ;t/e~*qؾoco/k_>H׼aUo'O~/Ax-WN48)L'8@B[k㪱<[⯠WPHd ?C#YDn"VA;W ἓ+2ߎPjo3"(LکsV?JF7)N(Z0^?Yq:O|k`Qi$kr%y ®GZ6TI#[(ٰk~/Ɓn r5E"o ^ + 6(/\y^,@2#phW, ^Oj;6 'k<}ۻ7B A!&w:Xt+Xg,i;F#N YHf /iX\糕)#>)1 C6s (z~_աY8:&\aR*8 +WZpȶ0veYfYv7/_rڍ~ad@ IDAT_Gl)Rxg $GK/8)KʧrDFʫP2lNN&>H""nQ\9"s%!wrW`z6 r3'xyEg-#~ ^J!v3KX/(h ='ROX}Ry ,Βm^Ԫ ~"G O[a}[]QV7^?<4{~ۥ؈vۭvg/׾JMe^>]ݍ(; ĥ 9dN{{{y{{1ܳ>aegJQͯ9s.݊nbRp6iqsU+ v΅QMb$ҡЊ<7`Nq07}aF!u(uNϴ.Ӯ0C3`w&ji,H}Z0K^ d >N@abw)ZC{ H/en#bi @8yHlT D@ow n3r;zE}5 /&:\miQds& HbTVBn+LLzNjo Yx |~<Z# nųOpH֣ C1ʲ$NYppQɖK{ޥR6ٶ#A+o~7E,swBYh/iAx/ zIB@@')J-zx _-:TZ9 H:kg,ęY]Ju`5DQhm'KuԾZ\|Zk,;b.$ Y Yiaz3fђ XHdoHJD@(*(6667661#/u;;;wկ~sNGakͽ=)ZG Q*1 BYɊ &aǝ`S9P]x}Њa>E@ " ^/D4p)LYTwWO|aΉ1G?Q-zܹpX`tHBc4uē>罷 ;_p10TJ)yJxY9 =%EyXq!bEƴ cZr@B:fJQ IQf&p;CQ RkxgnqW9%2uEιҵaa]rX`V&%eǃBʭ8P-X@.K=1DD<e:k &Pg/ @7vo@n$ܻ7c.ZO?#N}R]gQ+B܏DFף3 su :w4X?A#Hh͵Lio[ !/eB&0dH /D "A9NDO98@kc\Y(vLG>D p,sy BE7}b\#yEg_li!w($$X͙ω4ن0'pu}-gN7 AȸTJW*5Ȭ I\GwxeP (\9K$xH H[C 4waZ<_Fce ΋(;|[aHyCtv>`ҡLpM`9xi>s2ԵDkl'Qka unwmi%ItNιQ RJcȇ!t-gDnѹs綷x1(>_z*sNgoKQz8*0<(wDΏY 9JgqB1,9*bL<0 n,s\dcXzD݃?K|8)"dnyj>UysI"yZ>Ȉ<M܇x9;Q/Iy=X!LDEA}CJ,EQ!(l9ʽ?RzyͲ eر"LCƘ cI` Ɋ6>25ز"Pd$.("T`$ >:HA$6'Mm{г6xKF[0`A4B8b k6hp0"dQp8pȺ J}Ijm.Q!h`T  j$zAƒG@@Oh(@iEBH6[G?ν:$:)!2 N 7>0~?q R}I-3@h9y;kARɐԒ]H!&6D Qb)˜$m3ϜH;Uqi #>>:KB[ԝ ! ԦDӀ,jt@'Bơ(80Pd|dIoXHfd7Cqw[ѷBd<($>Dg=6+"k8Oa qC V_ZʼnOJUƆsstVt @ڱ/׽FpM8)g:;QΔ+<縤v{0TW8fK.[eY{PBln+Z[tۭ$ kT !@qLXg%ܸVϲp8斈qA\@$z0 ,8IxYa-Q?{m~jO`MjqL[[ 3bPJA\\3F1|~6'+!A-z 0h" VEa5ǃAh7lufQ &+bH#2c RTDb6 DEK#:CMG(( )@:t jcD5pk4+g3`$]yx <=v@r[$km]׉/񕜁mH幩Z)5q?G}]wGCeY] iem "hfi #1!Ƙ~?>3pnnn"cth0x۶Uʪ?wMwOO\B8ąmgz{NBY̹ ղHWA&FDX̢04 h 1ϓeRCj,:WB{ozQhK""bQ1dJFK1te\`ʳ^UU.neBc; ]i3;$Lai4+_É\V| gXk0't&u+ "G*,Cuʯ]y%ZgM;Z[hV (&cQ;;;eYw}ƨ^oɒ $D(t"gvb~ "̗Yd:.{e$ō(3 "=r\YRfJwE6>~oI9Qe±G9hNL !uuAskAQ&m .|[ zt QKbC&Z$t{c%(!44+|u^7LfF`Q,hb(G{" f"mS,K2 DP1FLA覞Z;)Rkkac6"}y8>TOwygd/9sO~D k׶ui`_:ʄ1`z #V1 ][L4RDPb~['EMg>aLU/#ȧUfGCz罦ivvy?/PJǦNaᩨj0tTSH N8e! x {asHGJH`k3ˠADbQdιc3'ӑNZI< r\Q>#5$)4QE%xA0]݄.hʸBK䴥7=cD2׀API(`q8I3H8n7"2SOaa $8 P92uk#WƱSv ?I}NGg`# xJP̄IPK'0B¨HQ BYa^Ӆ24>j<1RJ̡$$6(>-q@h$S 2]k4*DSkKpnbT LTBDT="D ~иA"d JDh(_3Uc ȹ'bkţ"6UmeY^Uoi~w;.9}txt)%:}1F\Q$)92("a/Q OڪeY6N˲Liʲt&]Lj@XL}#IPӧ!t98"M %n$#˲ VBRţ9P{N@|],*(mۦ"5@1I$c,;]9=b<"KѺ8f]1'I/+6 I LJSY 9{Yc!,Y q! 0LjR9n"H("H3q Y*I;T^ur7y0Be%),^ ӭWg>̵!z/lcip0%M/B]句$ _Z&"QcLOpCʔY~~[՞oQAk=z=)8L%˲UWay~5}Wg׮Ta+!PZ}Ldcc--A1je Pjms$@P׾.4ƑBDB 08$$3dƲHjvlD 1oms!-H0c,= td.S0qC6/o;;HN3>.YI)X#4o7?E0<1ɴ&Ig}M.ltvӸ cmh]`.1 #/Ex9⚈!U;;n hF8iL6M^Cixy[ʹ8.WG ]59pkmrDNK,!ey!gC_[L&1rUD4֭w~Jo6 <'J<(?6prM9DAn;;[rm[  m ۶M5/ IDAT" ( I#QBBDB!H0A!RZRqq^Cb"HDvEoV$&+j̼lLCK}^ <ϫʲlggg0mr%>ڃL韋j(ɷ|kk,KDti_} SuR:]c1&[kkJ1Ƿm |"m77Oooo[k)eYtW*wU(Vթ\gr Rɘӧ ,\c-%h29_[N~1J^>E։> Z!O:aR"!΄}88朎 g_HHo/>pSԾg,)""2@mpZ8apf՛$/b 1p;w<km#裘oUOBk6:8ƨ! J"E1GTcldb4bt6xE8SiTo(ldWNVl%P}Q[c99Dl{ *L+zj:Jgem[f7Mv7L@fbV++,K伤z6/Z}k66Z)Rq<e4k2cucLwʲZ+ԭ -"( Qw \8.J ~ FO}# um'jG ʶ-Ӧ&(rۘ#bM܂dsPȰywbɺWfFqmغ'~ڳO|8zmMssOxDBs5c93a:גNN ];qk}TkWhYZ'?E).8&4)Ok D(!")0zJ)sSu/ֺّ(,s EQmZl1Y/7{`ǡmGz-2r0T3DRDl )($fHAiFnI:]Fa&J,K7E]v]fY,ѹN3O|yƯGU Ec&D"ru$2Wm[L jQ(8kt6 APUtHr Y 'n( 9gS" "VVĂn14Q+xGQ߁$@T)J-@0,)蚗 @1[ն|}uFu/m9fYD.Iw?>?mh|Ekx hdQ7XF iz2|[?|3!o|Hr@ IMiw'}h[}dyT@Z׃@3彛rxM5H GxȀWĢ]<O?}L5Ŗvt 珑WָFOX㶂=ur_g B{KT?8a.a<N"n}8+9إ;=YD`07Qp~֗?9Q sI`_j8ܠGBs LXR Ѧ"im#"!DF4Ȝ)A TJ(D=DQX3!X f6fZDPjk$@Ɖ1%49lM:UuUQ%W QF aE(enr|+   NcRm;XJ'̜Geħ<ϵ~U #,jyNzjmvvvaљ5!~4MG:j0UL<e_&)-'qv1A'ZŸkOH?߿ 66 %Z,1B~'J4RМ}ul<rChid7< P}ب֍Fm!:c j2uZIG;v&B'{j]՗ְ.CDFQdBۖ-6PM(H^'(X@P ~Z(v͛>o`ӬTL˲m[}ȨM VJ1`'[} ^:&H-M@rX:#r Ӫ: ࢲ~! HC_ϾKKD|Ŏ1@:. F;b8>VnL(Z-zAW& (p~d2JU)Z:@dL7.EOO㗼7>2s" ƨ,ynqUJ9|30Ҟe~μ90$< 0p}DUEKE<6 {PDBO̝.c!G=םtexAPIx58: DÓpتh/rWJc_կ~k4w#"۫ʋ2ybT#YʲL+890Mե8)*87>qᕥ8-m#"D#33(bվM22UU;di~S='/± [ QZA[ӦZ -ٌ4G.@I AA?Hg ik>n^ҹV+M(KmvHB@݈BD V VGv8N&" $0{ʌM!{X6GЋѐ[ LJcX >w}9C9e bt ]2v% +ֳp[`\5 n!`fc^dS Zp^JAq~ tȭ{ ,QWXq8X +J{R]lqH+S$ @olV+:]wh&& JdyqX[כWU9,zd#1?cٵEtaXg,#Tz<kE| 9XkLJCtZk\tDDߜ#"1 #3f?q])A^; bGeR1X2Gsa l(D ]Fhg+*0G7puWEt~K%Yto Sd!%8^UZVۊnrFk~;~ĸO蒋eYW-UKI1Ƅn Wߵ67qp8L\}h鈘xS.Y,ky{_-I[/Nv}YF>[P)c` 4 Jn!sl=W776\]W˻Wޗ~?[nyvYeo0mjU"dʹN=|x2j*)vI>e6Cmh%@rUaM]Xmi1؉=,wz*~,if  "(2֪'z𩊢1r?[M9r FPcu;2ԄMF2Z ПB8}ۉ,YUb DZkJj̉A_@ݺЅ 7);\+-֟zo 1p=js>aYQEi9@%@{> W~1Mq +o-)B !: >ф5r)ׁf,~m 9-Dg |ˢcF_VK?NǃZ۶PkC1/LgB!¡4j $ԂY$BZHz|еdf;?K3-ReǐHQXQD@!GHAhuo@ZtmDw7<&tBvGRIфtTȾ* `]l$h42s:⛖eYJ$,z2MUrJ-2YT9c,sƘRJxg=P'z 4{R^;71$=|tmB$,M;D$"7IFOG;Ko|;cϿG?ݴ~p]k4Mk۶7f(x#Ku~J7m3 zNMRr*< ujv['5)+-@m^"G! U)D1/{"Q)8G ¦)1o,8R6 wn fB{^t*o{o&8HЪbq^"@D$`3)[Z0q=E㻿_{HCIUlg$R{G3RO=,LD֘Y(ۢ3/i7pŁ҃QUc,D"HJx(HJ):&5HܷYҢa *9Ʊ(vσ̴s6g%rQKo\ -y#Z~)+4WqSJQGJw$Ƌ^;wk+,)iS a8Xq}Z{ܹ(RE- l/\Q'U;Za)i7]zkzU w=ܴ0*`3Ƥ9li?)C[ uz=_럟Me;YT|xf /%ikW5m#٬gG@pdA5.wb'ZzI(?ʟ$x0}r  &) F>:E?)"rlN dѬgҩ>j?6JRJԛ#s9׿~ss3,>f\)-%0˲dfkKxS{ 2dzX"rH?KLkՕ5EalqGnK[P̿{_|mcMU#Wrxͩkox}N@ȗ.^lِrzk uF"Bצ؉'$PSt2^B}(0bTmpR8٘ APDˤj` 8I2 1Ɍ;~!.$RZ},HHJ+")]Y!91*nW13\W]/3&xFYkf'#Ʒ-S@ȽENI[.8m_EQ$tP"Cjg0_WӞ\/Y,+өR8^nNW?qO$ :Sِ3NJ9DɁ .Qeb/S,=i׻m6*03  TJ͏BdHHAl{% `8=beYzd,iM\[PnlT[Nkm˕{9gM :ꔡ24M&碻W`7ߔY˲HLFõ~]O-GS=yoxRi1|4 2Q}̾H{'Џ^)yp۶dSVx:KN~ٻWԩi5QYYF+ػ5f"`β"IJJr+r S_ o7ݒ/~Z7|?z?o3+>}_ gX~W_s)_OzR78G! [D@ hy! ǟUPEZFAWePF@-!n@|mk.ֆM};͌A̜4R%^ȑ>c3bޙlÑLb5)-Tu\4i!!5;0HSY&!FWy~ܷKWt&:}~<!&9emw?_y3> z2ϋi\cB6e6xAQt~Ni. [}SID88`r;s1#Ү("βj`f3]q6vDp43Zce)&8 f;®a(9SsI|4Iy9PDZGRA$4MmqM3jJ)\bL A ˶mT+߂ueRRW<ث"a  b)QjϜ>X@9<]eGT +kFg1heW.PV ~6 $+v|4R{Sz7=҆BR{X- Y! ֺiZU}m!eʹfmژ/{y뻩Xc8b<ἱ!^i<{ŏ_ƾ_*#cCı2w.YEՐˇMONMO}ߏǾ!kΫI_w5/}?_//~͛?|oSE?Wio u IDAT}_{O"NG^'vbC  Cf5T1圠_MxqNVT2!ꞿTDH `8P[$(baDH+ un  /W BXGmN}c?K:[d*fGW9iklwsٗ}h U?}eg{64DMVk^j!tXBD#l9 s#OW,i֚mfv}}}4ڶ sUUeY;6=쐼>tw@mqo?qc9c1~9zu]\ct<ͽE5؛_x r Εg/o&?u׭#s~g;gg-g~ݔ:MSyB>4__xoꉝhW)t sA8[&hH67(*HjThQ05~xqMOo<h}l=l5SU":bIc@X!@H{*^àU|*G/ǵĞ%UA@ی9_3vSogԢ3S8lc75B-XܢJ(h C{C]&B%yJ?2s]kkkcI)hcum_?6^fz,}㢯fj!r0SaՌ8%;BNWz:dJ)b,)ja`(#B|̑#2Ϣ p&1gQvEg1%|(<%11BS VDY=uTz0KDG}r+79PRj:>:s !(ʲy'Zdm*D`&5߰puu91?Ωv)5p(^p>9H9K9D8Q9&: eYzyΰ\sً`ӞfyQ}؛O;w6bawx g>Ev`00AWۣn/}nmnΗǼK`i>~TszyVzLPD)A&ΊҪwkwouЌ"D%vSHvm$θb] ȾE|8Pv] @ZDR);p@!Ĥ!-U{I`o"!!ΊW,\PwhDaGԚwSJ媤`NEbbI @(!,H5Y£^ɸABXy\_m3jieJљ3h{EW*:/d8RZ9?%!p>eI3g>$"z(yn*c *MiM8J@f&e`!|s8/J)[86(};\yf?}*ׄ>3zond:6|}^OQe buhR2pѩeޮ#QyS.X;U:{l5D‚0S_"W0/ ZZhK%"|_}_y3*Ǭt[jP# 6"1-yKPO2tmȗoi1*QR 7=%|a~o~~%خU E?bљ7& !pC3#,(dr2> y9`&n?O:GՎL,e^&c"E%fKNVsq;e5:` mBtr!% 8+23BNhQ!D'LCX@c]|Gc*;Dsdt B 8`hDD ʘrzgzV("ŰXe5]w}HR-z^ݬ-j/|*?J+˯yH,n"KQ̔`ÿ+25d\皍Av\YIeQ"RU]t)3"t$Dmt@% }9ꌫ*(obx*jʕR(:WLcT5nBZy{1wX5xsa'ԗ?'~Oy,ƍ[ aTVݻNU:5/U|? Γ|Ʃ^~"Y|b.KkF߻J=HfNJDN(s/d5ډck2Q : h,w]h>#<" _WVA$4(XJtZ3Y{(%T<"^*C$.1Qn32ZmPzSv Dmb 67t҇za#ڲ5y.PZo5 w=l >ppY-V1y>4Y~o\[k$ Mњ 6w~O}4FgZ lדDg"foE| C.Т"2 F&wGC&*Z)@@BĈMqF϶ 2! EbfQ̐T:"4\ CP)RBQ ,'ƨ $,]UŬ9<!ejJ( pDTS<_>Lk^oy;KQ;,vZ."R xcW2w oer̿O/"Z)9Y!J4I>օ1#DJQf}J)A"  `C˲!i eDemog zki2% Y[Όg_?c/m=﻾瞻VA\[V-53ug\*s~?s]noxwU[t'vbdх@0UQIČāc$D3'O7Ak$uuoV[  " v a_)Qpo>;8\%3D r&@ GQT1dי9.\2zMr$"5jFG0@2ۂ ǘ1 cCl DL˜J")HvUWUV./s^W]C:3^"n| ʚ1xcP207;Qc'1`.`a 1Aay8M}YWVQc;):8ON (E[ ҄ၔ˫?lXm6d^ y,i.r<{U 6MRyӆѧy9%yл2VUx^'@Dy#@[̢x%E5L;E\9S)L]Z%"..*hJ`THYAL:lI Uf( ά7r[;sH*)*lj@ @Zdv5:Ȍ1!cfI7TgGZPH@0xkꎙNYBh۶L&^ؼ{@x_2ǿ'%d2p6/UD.Nsw"ɧd"2ɸy#{_4'Ljh2!)b4U_wi^j ;2ŠLUUM"(Y0&L!Zbā6¤(jMmSmG~!ކT{?~Xr4K[OV?1qb|~K?G+q=.s HpL$so/Oh[BI{eiME@)a K6.egt#p*1YvEjh8ڂ3` QWnvoI(gcSi45mtcoZ;`;. j&Ay{}#A^ՙX 769h@0)5Lw.$Ɓ'd➍v4cys&` $<ΆƘ(f.,SU;0yw^9v%NNŋkCԦjUiq۶DX.wgA$;eD|j˅WO] ^1KR='UE2a!3 D@hj-I E"PʬA!y͚Uf*M%5Hs UaeYȅQ7"sR$1G"Bt323bزcupg)*˗m2ZZ^PYyb3(n1TE]0'ܾș. hȜ:ݒSDȜq,Ŗ Om'߼!bfʺz޴܇M,0n3g;%j1mHT8c *R9'mSIz%["}-JXDo+)M uJtt9-і o7-5;*\vy[ŮS1nw-ȭَIGhDqG{yhP+4{!]Xx6䓦nҝ_=7춣mS DߨeU*bI 9VZ4lx2Ʃ,b:UM0M-z#qss3dt|6n]DW_Ol~ŭ ڌ0OG֭/$`~f)B""eܑtw@IZIvcx +./ͮZN[/(8eYv:n[Ut_~mU]v5ƜxrΉ1f4**X5@+?6ZmMHHn,Bcy.19pXr绳QN9SEc{r祝U@ɞ26"*2"pΈG-EDQ5Xbcܢ˴fܧp3/ '8CL縨G7p!rP/e@f̓$gWDaUf&dEɘaEY0~&T=h=<:z@85!5BcKV ,S "9Gju ` (Z `.8X &>_.;B!16Pv- .*e#@ CE"ͯvR1K87lkM`  `AagKy @ŠtȠ$WUXj?m10D$6FXqZsk\!ZցҨb8Z Y(\J")_6p\P◻Uh/hg*-Sy_Z& /6zdbc c3C.J[K3 B zx\BPމ9[Z5Gſ,ڈȠ"RI*\eӶJcBHEQp1nImEk}lonL&AٽzO>y֍[7nd>7Msη_Z[[?8:޽x*7ׯlm}[~962G`0kb"Ⱥi`(9TKq|O}óh|lqKtCE-ФhuI~2*bV7]-yI]9)"U̜"$UR1"$"Zܦn0'K`PYYN]W(=ش1'UuPP)p.[i\xT8D05R!f&Zkcd"+d13"kif,l_ F 1B *]7o '7J_a^uTu0u :NKYp@}FZҀ<Y6:f.Y;3+>bfkBct-ẁȂQLvd?@TVUt$*v#-;bdB J\s㻁 ! zV Y5xgQ\ݽv6%45N kK;U0M~4!2a4dAX*-p Y~gߓ8ScH!$ik#-17P]t6ޢ,@gR9׶mQLsE裏CȐ'*!@CWkUCu67m \N Q"8;D!./2 嗳yU@3RPIQ ڪhG-c IDAT{[^fv/JqwkMSkP!4hY])O7TUTU9tT*:c J53"'t9-@QYeDHϝٚlY^~x#{-mڌQroLd Bی+ 1kRP @6=hl %RQD$F.}TpCVϥ{c`L궭777P;o Ūeǟ꣏^%"?q[ŋcRSNUfJ>X{ڣY,pttTX7tUW_}.>7z{q_?s#~^%]/|,à J[Vُ<ßT1>'UeGzG6!ι&3טUnb2xO<09? Z gd pŘdX j2؊h&clB12)Yl]R*ӶmN6ϵ`%9#s'"0[eS@Nѹ*j("K8stXd-<S t^sZƪ xUQygzX$t113rs񸪪}kmYCau85$<=z:<^uW&=Nկo9[(a9&9f2TU4͋/4"Qg;'!#+ a@kC`)w^;5SKmTnŐڶ-Jh9N 9񶢬!1|!*RTήAU ͎ k6o=t{ϽN_lE|̔b8_Hj̹7["FUB jYQ%O2 /t|@wMPXcaEy6ʧ2`@B . yzQ|`?ӯ֤SO\rJS?x<͋~G'ɫWyIUL)]{1k_Wr42_ΥK ;GO}wv+/x(%9ػګ7oWe7IPS+ê|C;E'1Xc̒RB4 :i*?Hw}od!{6 "qADX%B+  Yl%FT:z~B>5" f7aVNUD@8/D1!UUaPEcf$ڢ&9|1A5vPbr d23%"Q|HmK-9v"7ͭLq^9S՛7ofGNDɃs<+?]}.7j+3,;{XcꀠGa*RN Ȓ ۽wș,k<>S)H(Xxc'jġ팾:v.|{z(n7*Ƹ"ӵ-7ڎc2V,c$--)Fqbْ;/unJG@D>3y}zgD{D7X {0,̂R!8޻Xe$BQ"tp]DE2'>=eCO+RQf|ljq"4z#.>uLFm۔`0 .>w6E$%)qDTrޡш WO:6e B/irw.JjQ Օ89)3hOBۏݺ{c==VMꁝtM9 u_@,刚*k7|@Ξz/qN|1LR"EUx4%W%$<ծ_,B+O)x%wc9w4ȣ&PMNUSllG_VNs|ӣp>1-:u{H) 9nzx!pl;*MR" ih^z!e &5ttB`.{IND *[>666`gggscm:9 5?|w~zK#^>Uu9|8%W7)piHn{>('i㳰P(?,~0<;{L[X  !N:2&ιk!bumȔ=~o!%"\"kO 85nkd(>:>R/ou3]gi`{#0k}~#mРwwՙM{=W{Ǯ=SO_ry*U[m[oFrJNbkk?~͢([kh460sYpbS&4ufb`CMpq988t7xt|k_y嗿Ba`}G/r}}=im :v۶5ea"Ѭ _6P>q1a@N cV03Ab ;XVX+XBHhYc]]1R|<XU9lE3x8̅T 0<,&S)\5W]1]iSwr-QUH3G\%%VM"rӝ{eaïj?ɼ1v:dR%M&`YsIWW͸_jjQ{@d4^ʊ)8KF"?p\.Vg-Nnj<Éb^'pRdEY(;kdn\+U]ؾF'dlwfDB *i5p:YlVW )km[Ҝx V`V\DD}Sdjm!i0wAImzk Z !'m)ڶEFM;):*sE B*ݴsta{\M %UHk )vԞѸ젦lP VM F- Dʠ& JMtouQPTUbRPcMf% _4/cWS-)v& %ME%fЂZ5F$yfsyP j7=)^\&eێ[%9LM٭+ qv}㨦HEiMtTo6B; ZkL@%pݔ,  Wil_{Byw+{AA ZH =?o~~B,wIT1wѨ( D4Rbcl]ׅҫW}_ٵ'ɸ3s͵k(׻XSwoo_D415E 0tF.WVN !k c lmj4kݾ}{ڤ3?a5z<m~hZRJ:xOenGGGhx2U )@J yPӅ"ƃ ]s/~]0j,l+`0B, UhVN^UV:+" QTq<6mYOc b@hg , 8N*")1 csst 1ZrbE|)" k Hdphۢ(9I%d 0'DgHp޵ aeYu]e8?ּ&jttLJ(x}6O%P"\q]̈́t:< u*('ɥ=Y:A}U9uzﳹƉsɤaΝއTmCR[M=^!ɴII}Yps냁bNTQXZ6%2=r :0褎}Zy[mzXit;O/诘QNO߿m:bFxW{_koqߟ።`< ~a[_trB] Z8=eh9LbL`ifccDڠ ~5;ё!qnսq͍kݝ )6[0tttTu;:"۝I]W:<Mv][mT9g,TEݽH(>K("Wxsʫ3?*Nvkq.R|c8ݗt8}|^<acp8'RʕwsϽȯ,sM,L&"ֱHLQz2cB4\U):έ|DBZ-JQ>ӶAQ&ĔXk*nvw( %::c\biW@N 7딣]{+/WnoP?ţJ 5udNtNsq WZJ *D1QdQVvw<}God{мޓquUQ/)phR1]oq߷8>EscInQ{h>*HJJJ>stcqYkØu@)A%,- 3("ZkWr.b UDE UYd+*!"& !*zcM"yo"[4 ͝ʡ49bVkm4mNOBJ(Yz&p(#}u]Bq֭ooᡰ*=u0*8LB|5?d Jj:} w-`QUɼ>9Ǘ.]Ze2kEi7KCD|;-YR 1O93NW=}k9k1P%3 c)ʧ("`$zcEVf*pQOhzti*[Jd#/svR" %Ң0ĵ?y_6PlCp, ss fCӮu_o\_E׬֑ Jd[y+Оp'9_Ͽ6I64P lh]3cnZ'}!r8[5oՙ>^c?CUӪۂA+[B׸Y1|4C 5/5|9S8M+Cm4 9jVǽ{wH%av1t IDAT!Pd<5ڶ f*/GJOcGƻ gx>~_hDY I52T`0h77>TUu||| }brV7f?)|ɔeTU5/_Tammkf|UբmS H Eᚔ&mhж/NՓ<.ZWuBhYahsSq*-u3&z_:ܓйq6?j=mW h~(}fdgiBD,p bzD ғ(F>P`-(Xp9NhBԾw$Ćud_{.4 (mBЄT[):L?['I92TԡY!B JQ!E (Pj-9v;eYS3W!wJg'?tZzG ~D'fkcӻSJܼ|rhۭ MLںl m[71a8"Aଝ\$qTc{愈`IokEQxcOH{aט].ڐV/MX"6,I#KxD<+էn368;Zmǃ<uo+7ԿvʁНSGD,`0*fV]%qGQs@wC$5Vp{ޙ[t0*3z7nVUUcVU˲<::reZ:c1 k 6:䘙§W5X6.o5O;5sӶNumۂ*Q9BT$o]>;C'خ74BppɳvŶr7ZV P?Z0ZSKHLcFԦ&50$)I9k7sdI_:fQivՍ[:]$H`fk}t8A hCΚW-6mRa(ە UDDCNVxWasզZR_ض׮=α3O~tg>xt܄I[UYn궉˻c7Tusss2jQmһ_TdfeSh-6 .lt*ǽeY.ƘR1*`0ѪFI;<|tVW`6( "bg%` yitЙ;QVPEE#(@QD1HD@Yfa! Aab6h;< ""40c21>8Bf1)O B|]u,k7i9}4ל~ֶm[=켂T33_ՕDx6Nݲ/Qsy]BX5$j4M7 .'yE$3}GGLv ò,Omy&`#j<zpa-&ãh1iUmnqH3EUJW?qTo֯w~j@͍[{{c̹^s΋ѱ"aɲV×e ~趼&j47RZ0wڸ{0\0X[=n]K*TetJ"{ԠѢ$༪[w$dzph9VIrB3\}W lnnzۭ֠Z߽xi2>VK J >EsXbd%77J @Jɒ!"QECAAŢhdU TcdU " s6XDELq L\ ɵ{bdUQk (j  (,pP]g"1cQDʲ<>>kYcU}fjS3:we8s 4:UMsDv1fA*;wi,ZJ@=,zX`0H)e;ƙ+ǩMjϩ"~2NQ=T]o.ozoc2^N&L:۠jT_z?L&7/?ȥK~SU%+Rqw4PBѫ2C4-ng+$Tf~o 1tȢ()[KF{1T6zMPY,(ΖN;g4m{J?{-Yr~{Gye}UU?Zݒh%!0024.u󵵵Ѩ""S!E> \NZTEaD\^O=sY*v(,Y!$ C2V1&5Yl*HLٔ4SKNj NJlUHTERc9Xkki)$%AD8Q"5)kzghb$e Ի9G GQ38_g]&GE|`n U:WS wXbB,|\I_xReYfd2fEQA8CN]ƓQ=&Uxr,/ȡ_7D"TSJeT 2ʫG<_+PůgՆO HwRѳV( q p {[V!cX D#wO_~i}?3_[/s$nӟL̙x5wv7ֆL[?տ{Mcڏ"WۓQ}gY>s]sz N8?qkb F ը%6%kimY'/umXRELT٣`PA kߋ?PWFmf$h"f=tUc]׭(B,o 34W+asC#R@u9*'# P@LTCIMRLd&3k~*$_dwvT%G l"؈Z R Be,<ƁSr;kZJONs 9u7s082KdEV gSSTUc s6`,Er1FkݸYkjYSu1Ϟ=(jqNUG5cɨ&#jXn>3*l6Qt\@e] Ǣ1f63T`'\AgYivY!monm77W!Ykط_l(]Ul6rɭ1DabLQ1?{Uז*جJZgri^囲Q#iZB"V7G0"P,*Re ApBL:u,P[ %(K" KA21k3E@dhB)+k UM$HUAR,"%1VaUf#"i"N)Zk۶sUR`,>+UpUIUU1›f@e7Ē|`*8|gqIJWxId2Nmc׷,& i\N4C"gq]i}w ygxg-Qw_xקFu?xv[? oo|mFC_?&~r >oϕ&cL|]߀y{w˿Fݗοyw/bK^}?_7Kr~GtU_ot+[sN\8uE0KT~E4C4 @Y0"ˬv_ajYqPD*"Č ĉMh Du?H;|; @.s=U4C0h R:!HYF bܳ`8RY"MCT?#I"rͶNM7jgzdO+z-{4.Q 2Vo[#+%$TWb4l2[AU٘,>XEΰ&mw;z?3UUl6! ` yYC! MUi6ei)*XkaaN(R5u,$0MseY֓NjfVvwQYS#24"`h7.\`mfciyj.y-cܡ^[Au[Ě h"D "L&bqR0 7̢ DИ) > $ J,)%b"CY'2潏ɤ$c)Ųt^4&}/)(R`{n:yQ\%8> NY&Ku{pErݝ<98^V?Y\IZ,ј0"u(QP!l~_k~=_w7o{?>gW~{^3IȟKI=?.;7>s0_z?/Z'>CoGt~{}>kxw}}7ԟxkoש{w~8B1aRJ2*B,Ob}0f!$rU"!Uɴ4XhkQȬK}cUvG\P@ 8Sb]+ !v">!2Un !R`k; r;Ű~5sqem]zLF֫糦WM8֪fMj;sI<)LLD"~0'eEB .X C{O{كz}&䦨*|(B;kuk|=u !WU0a)%k]19$IRUUI 1lD IT8+HD1+J"7 C]!lf]F$L֍. e]ˆQ???BDOYs j,he-b*$3BĚ IĚUT )@IIIb ,EQ@J 9_ T(䇘$UeB͉( cغj/p) kX-k!J)QB@$ϰ=vި{pp+8n .? GhXB)On\wlǼ\ð`y]pε;9W\2 eDnxW ТJzto:ǨF5Ȧ{a;Wy;^u,/_K3w¯¿W,E;+E+_|çMwt_ln&|﯏__;{w/Ư偒K?/Kg|/ގ6 LENqκ~eQ\6e?)v>Fϭ~}H?cj8kdk|5.N7)1ʤPC۶Mӄ ђ XHa6ge@GH@A,!me3ZP[k7NVRv[IlKnP ,x2 3*jl^>gαN]ՎҜm j2Cz%ټK/ʲ(ld2og*5{U|1S5}44u~<.1C]!Eb檪m.Jx<&RU|gmc-*ALU\UlD &DIiTYb6|:khDl}?1m)~ z针teܗe[E?G2h:*P\-vYX1s$*A)fUMQ)EJ kY5I Y٤`k$I .kk 4T1sUu]e"Bv6Z[60pQۡL6 -uee- 0yN\esRS/&zۼX䖫Ejʲ&HV$eYcpQ>͟kGϓ̜ԑzƁtO_Ywݮ\gtG~ l}?70D18.| ]S/^u/շ ꯽+>l*?Þk),g !5lwxj@ _4 .3 ;ӝ{lY?61hQN[k;Sܪ(཯ʊ (PIF#{Xf2糲LW\KTY@feOLOSVJ@!IsEN{]ҝ %!Y +;c>|_ - XhMz1 vcN}{xL LXvF^.4%yV A&Z%M,kzP=[R SOn= F"2s-MB_SڍƒZCD$To.Hmgz\ciZk>^sRgg/=5., r,UUe_|>% QBVW0HQ5Kڔ$u{{f2 ffIh֓Z#rՔI1Ҝ3w!"Kz_׵2{?jHZ"1pnRXu[(r+Ktըe\ݘDT`<'" @1qҘϏyuXɲ" Q$_=gK8@)>ITp kQILBGL* $$AJW͇Ť-0Y{eYMit~C(Ƹ7oSJIʂDDℭ1@=#OٖhY6.]Rkc+wa>Uwfqrךq:_m|n!$k=SslXwc,:jΕJmAf۞_//Y~M[\Wѽцq}:ozYȍ?-]w;,q}4κ~.g&??#k-6@i;k/P8X)XeUIT єN4ewvsk^$U'yJd_!my96M"")j2iYm{A IDATn!VI睽^Wfn[+ּ!)QrBjZEX|'Мbsϓ1#`ťH~{s%S sOŌ -y};bITÕInPPTJ6`+L3=+0$ (lj{LveDgl>1Ξ;smӔ6ܾЭEahP$W C!Sh1"в(rb<[k(g (JJP%EI"P$adCT!$fY OӲ,fu)uXpR0%Y5Bd`ZWW-e՝k7elǏgs˴n\ǀDLPbѠPkL 5̈C, KN(*6DU.ơOJQ 8&NR0DiTuww:Q$AHiֲV 1MYevP IDY"|YVJF5MWVCw, cU?W?~J>BM.q-[9#ϫF}S6N 'Oq$͍EUDcYG. CC|3_zw/>__'~w_ޣ/<_|piz Gq-y|y|ܫG>ɏٰ&{їoy%gǷګ]?_K|C}o}}_c}kмы7O㕆fۉX;nDS'm %!B"PRɢ@ 5qu*iKo(ŁܳL,k *&v@}mT!Q2pux986د/E42IaוMz;t ͳ ĕ!&T&@"C8P:(!(JD@u3=~&-(Х6du<)wyѻҥKLZUU38=YcUjOW"KWȵ\-W7O1BI-(H-$].!IB1#R\.өP!"0Db5d"a$JT8$H&EMImL 'am hL}pe۶ι *h:]m8WQPX^ e2lsDDdϿ տ8I'̽<LxK(U)}Y>g<և^9`u|4=mΏ*'Hs8T\%+)G?UwoBTy-g8RG$A&v֔0"D!:8b 1+⯒)Ξ=KDTUfKgUCڜL&gϞue5 bݍ͉UA;;;9EL"98Ȱ0 CQB"L\kA,7 &2bҰ/DabḲ`II%k1\~2 @/ gf)*Wcx(VKǕF"+%Ǵ?`)9Kf=q9\:9s8}#HߖhCh3bKrza4,|ڮ늺9|>/2wF؝iVQ~醘=SC:)NqSDr e/Ʈ!!bFI2ds -6L0h4AY!ɸ1캮QǦ,_`Qҕ96ﺉu)ld4Ř(1T$rU$5MMgvW"2D&ŬRk$΁$J$yk .dZ&k8GTjNϻUCxDB“zëW7{ Xe Gsr5"ù!Î *Y/Yˀ AE$%%R2m\ٴ(}l{_ky  div|6%3[EQLӔڪ(LA^ 0o\Wd2QMι)Չ|V⨇P6MsEi{}8]H{^-c,wlCWE{ ~F'}rn8gѨvc4G;LO#;/I%}cRJ9қrᘣLKJ;SxbM=2n.pwGz+`NqS8Q 8$l0'.pbx@`!vHNo-IJj WUx4ԥ!1t45㱵VDfYGIUUiҾ4@GUuZk˲LIC9|+:HF UYJR5`*0'%*3! e"gYpidOq_c!߂ },G6~3{]FRcB:!%f V5b22D%aD"I]Uĝv4.67+Wb l4UUཪZ;.˲.mw1dq53g)cRn6P53=ٯmɃ-{S8sj`DN"֪dld[6&pmmnnzsg71g }?__5M5L s6#4IU0 uƔR"Ҫ*E}J:(Ƙ=Z*)P$F@9([fkbHVe$QP"bdQ@{/`ߌo|KUsz *2ю i8޺vJ]ɪ )ĪcJbu!F"VM~e""U1,CM3~XXCLflm6 Ig> lst4M&Rؘu]^r4$]VUck>c1̈? K Z7fND&(4N˲4ƨ ] qef}{lSJG]WjR<=Nkq.! C,"<4DǍkbZc,nSfxEQXnQX"%Rc)DQG#p+qb"kkkWE_'?X/'@J뺜d@Ŋ*cLɿ%EQT{G. `p\p@4'FfPJIkCι%(`[uh4b|s'I{`vp3̤rC' +0*I $*EDDW (36VzYH< 0 HjﯯZg^ݨ*|u`CrQ,c)b(8rIU OrڔBHOѨ>Dnh> &S=*7'+2hQaou8)NqS H]M wu3*Tu۶Ȱͻj^?lC{oIt4j<Ffh4*KgjsI` u&k- d QU7*U)+L G$Ě=: W|xz2SnAIu5.K$ \EUEb~jwhPafdj 0 P;wՒ@p1`ow1 qJ|܌6666VB輟Ѩ2V761O<񄪎08N(9ldl :DcfjQ1Ʈ7u]<&r3@Y1%ZdG>cSUU\RSvK)YozW,rSΓ-{"j V$̔CONZA_ RԓFAԱ ΛQ3n UL'-{S8)NIڨRS$xi&w}+KblյC;fd|1F=3R mf5ߜ)-ɢ(lfۺGf"QZkc ,#A ) ak84AB o~1HsvՀ:X)w-SXjor͕ D5!0`1H @ 6Z+Ti|[ŋ.RaҖEQͧ )u0V Gz}c<͆ac"]\EiI\)€ͥd:ދN+{iE$C AS /"3| C/`Wa-'HUC>tC3rϒ`]AYz cY$$j@u!1@אVe,KdRwc0W; \| p ->"cpł1NY|$DaAU -[y594 \W3P:;p _8M$DE(xh  !~ h Ĉ$sD(:@5A!HHt!1 v0{6ag$ ^<>I1Q*Sx`ې$$Aŀ*1W@4!$ B:< 𡃊B"DE@R cu$PY )zA{1D@DщO-%;H#`@gTۘ#S<]CD-gN KQu'C:D\ P<$֪' BF)@0OKzEDE:A Ab Y@hOof,[P֍ M;)EMb&]yk][[רι`H!CJ !(y4qaX}7ծ с1΂ RBaAR( F`cr@X2@)De5PRlbgQɂUIz $;\4 (= U"4A!4B#byʤ 1yoޏW^zLWЯ6Wm붩([bʢ0 bu lSq!j#P6#+DT2Lqci̙a躮SBL`I@?ty,˺pM fc)"mK2dm#4Ev( CwXIm8m۫Mgp\#:6j8[Igzww7^|5󄎤A x#}?SrIo 7p"]GW&'=h~yv:B]׹KxѨ{km&ucf'$8)P2}4j)ufA<[\XۘP0]XuZ[ FF*n H{Bf7v c0* IDATE%&-Z9A] ђ̈́H2\Ⅎrt|fHԪAs؁1K``c (ҴXp "Z@5d4M\(AH^S\4PJ1" Ryxl$yG+}lɠDf@mbT=온vaQ[0PDql@Px}q*RB* kP "Z(kGnB#JlB; 6{%@3%;k414rV`۾ޗ+V#;xtR5(ĠPqš&:]G5B h1,PdYVcoo/[kK!!ku]+KԥsnJ$IIR8.K$[ 9$ef&Գ1\cu3L+ e(KUUZ$,)_ neVd~o .k3&9~O\upN"Ksx{l/"@ަ7( O<bz }y?C;<_3˕/ô: @yEާZ5298M®$O`:AnBk 3qG(U<4 (0ȌvbY"ZCۂP oFJDVBc&`M%ʚʁ+x#bH@HIc1Lr#c05&Q~LNuZ¡@#j,*%l#`egIeg@PgFMWnl:6 HX]4 #{wβ@ <eEY'Atɿw%_"lx1YЈ" tcssa'Vg&:"M $@JQP("|ŏ*|"ҤJ^Z{嗢37dfH0g;眻>k/g(%s\ )SJ+i֒`Dd-cNt qvF-㝬dYF,h(`Hbm!ؑWbYe/#,xXu 89GV?2Ca;]! qb.&r nsс0),d>48Z$IxOOR."<*JwqZkժ ܓR'I$zfSk8DP(4M9'6^I¸ ˉet_w+?+K tx]k k` wݣz;<ܘ#2n,L>-he5,ї8x} os%\v+l4.E,\R<qWb%V B9|`AA$(t< HH`P"CP#LcE\#%imZ&ۈXCI59QS 1FL RIPK x5|,22:0\*0}Y `g%ͼц %|9ReJ9*)c f%j`)(Q\6jVR5 ?O,-(&_TʌΘ,)Pцɛ\3Ҫ|fDZ9}b`&#y%'!<3E%Q: #*r)ֆ5D3ma V﫛@8ͽLIRz(x͈˷Á?/Jxp2| a @0)! I"gWk720sAЊi),K RVx_*%&ʀC)d59b1QrAޜkNqC@>9c(`"Pm. !"[{{9@4:jJDSNrIF#IJn,Tqa}3f("2k3&nlت/Qr2Ɛ._ NDZkiԌX;cZar(uJv56\íOF1hW?m.&2`[F.gv2bL?FkPvJ#N "Sc4Zt; ib-8/sGє)SZV$R7[\g~ǕJ)IZ<~Ea6j$mK) yC)#A0$"+ DQTT0$[a2P"-$g FgUA}Ď3gf{oqοCe, \!gEi3ZB`P xd`>[oF8A@*4"ayZOU # D @%<_bA-o1 5rYIazۿ=Bb Ҙ{*mw~ϾER]WKc-@{A3L!QWLR*6Nl([I_ݦo>=oR^Y@6ojf[B+?Q>.azq31aF[Θuɿ&ơyDhq7vl>GzӜ`U34uSYiLYEkfY*UxrkI+m(M,Lƅ+!1DD8g'cü KFM򳑠R#XѝLj+1k5R0NmevmAvXm'~ޱw؇uGߜtS]=t93̅;yej +_~s~Bi_UC): lvbbԲ?:?`Mo>n/[cg/9ry;ocP=BdlUn_iX/n7u)?Joʷxg {'zenSGU[2u9dS|4'1YG?2Эtκ/OO=o;7~@{gv}<4mY4eR]pW3}:ITu?wZxG{K|>u+GsλƐ||>tz;AVR_~|dzA%Z@TLVrJ;jz폯K7W#v7%'bR6/~'CC 1Z٧spՍ'«U K(/N`gwn67SV1k~zRfZ+27gO(g ?yv΍cuP; !X~^1D-Ap=%go~G^{ܶ:}x)G; G_qr/v7U-IO/j(2󷵎uIďnv~'PZo:ϜFѦTQ2.W_w豛}7z+G@i_A'[W 2c70=Q 2 ,e$( ty:7^iP$R|boynMWYj^yn1䙌@̙?dL5d298جDA"\.9˝5Xf 32dkeaiv:08.*ؒx0͢\zc51kќxsxUo3mcZ.(Iu^3A nwRZyNZY=c`0v,+YZkΩV2aܤyjIqFRy2"e؋/]07|kms("*R1¾> ӿX[ 7:/R N:-u{%z(Xr25&O\T&hds }pB\)\B"<8Z"rJ..guuYſ'K|e,=t`^,:MG}zGx8/s9Ǎpڎ|1@L-e;M~ǝ?.zZZ~۰\ʡ P++K鹺{qymwU*f  k+)#xTC<9X&en5{dʩԈkC \r(e\jmyq.L0=zOOR9 x-T(ymN km> =0wOP"bLyG-,vcI,08H${91{_ׅ!kUO{Q%XgzmUȚBIq.deT&)o@) g j` M^I=؃Ikⵏ#|[ooܤmI|K @nJei%tF C>'s5-?7CJFfx@FgBkdHoNiMLzaR3&m2̣tmS&&)Zt0 EQ/Gzg}3_VK|reϝ<7\~fHrW?9 dJ>qĩWw_pЛ=oXjL %Sj{>yI^*K`gj/m?,tt0ˡ~{u;O=`iDf!_!J@,a }*i vl64U0  FY*-IfJ]qҕgQjp0NKR?8 m5d,9 6;wx%%Uhie{~Lc{Kh/2|P,r<,!bT9 8lljp 6v$`]}Tڵ|fcϼcFM-xx% ZcAk=0OY {$f&4x9 ̼+~v/F5s3>&@̠gLp ć 3♨3^MࠪDGca_wrlr^q飉oyџQ;7{w<3o!ʞ~ 1xډl߻'h&%N5+QfZe ">Ovկw^4g웦@E *вf Y}ӯh)گuMgy\ůؼVKq͓tzi|nS;ZC<*G_ՆPVc+ι'\0cȥhmGV€jG,:aj)묿_9o›1c<;5jݥfܯM#'ܢ{8KǮK5ZXgSxGʛ}+~Qs|Y w_\/x39_ka?ֻWK9VϨ#(i iU%48 e+Xs8XO]r+v5p]=ꯞڨV]}+x=W~v|YКk+މ~=/ΟG_…(Y]J|0B/!|&ڮEDVwߙvJ#i)]5Na+@`m{C?g=?=\Em뗿o%%DA U?o4XCǪuнګL:pYxgnz'~|ӕ]u/[w6|uz2azӣ3N*vn_|<UfD9Uv[7vgAa'u;\kYSV3kSy´Me^}N>sO0/C̥'~ȗY!VLKa\Uwg"M_nIxgN|{QBS ӻpbb%kF}z/vV=dg[,6b-~a-clڴi?`$.XAǥRln6O=+✻*7~wKo3zئeICrOrҮ?\{{OgL:몣~I7=n&AosVO]pgYFo{O?䬣{U^}~4Wn& R;Ͻfp/_:uW?rdr~=>{( {^}==oI'w63_C4˂gsOL64Mz=_%`u 0V[Pȅ j#Bh*bna54<0}6dѝzCȂXlj,dz0Zy\M^jl <V5- ֣=TYeŜQYAbثM{v,yoAMy@&NiX ւ &Q۰=I $PX" V4=SIx/78 PeF"D;o s1)PyA]!+`|8%Γ嚂JByb\28`drċITmT'@ Pe`Ue*Bg!hy)D~!I&JT3 @bPAc/(,cahbPy>aJ$B,[SQ<ok ,%.E 4}݈9+hF*h UQm[T j}$ri¶9ڇK^1{5jBIk<߲3ẍ́bd S:^IYBc¦D-*83%X Wo7|e,G!J`+gJ%@7MX> XڜS=Y,۝8@:@ϣ"|1_tp6z"9;E7.3O좦FϷ.ᏌyE8Dl, X } KLxR3l+P)FThEDJcx4 [K0kJ'Hkji\դAZ-'#_R*]  eTJ$IV[n*0L})S0lZzUd<00]:y@+( T*E0|aʌe:;aWx%Q4KyWzJ*>khXtkk_+fK۩Ldlaehh*!D$8(""WEAJ:QՌR `ᔮ~vȂo&h7^UM/UZհT^o&ѺTT/Z Dj<6,.Ϧ^{n4c{s+hj20oÞt^Qf۴3*ӠW juuUZł5_𞋿ώޕ7M=&QXꝓ&-c #1f" Q(I C9{`E@\AKA,2閹*0!HᡚMڐ2ETm,$(ɬ@(z8QbC'®( -{ 8AIaTҬ?aT{5Y$J9@Z%#2z H|䊣] pH1%!Vnmm!PA @*+Zc(B)PM@֐wrčnvJ &\K 2!Ʀ 'HbĔ򑚀0_YѦ$A$^`04 4+TL~^ R,ȍ~ MH0yu8 Y50 (56,g?X5|6ToU^AœT9E `x Le")ePn"$"04B$“sX:YPЄe$@NLTBmHF]T*J!DFhc8d"W0;a\Qrc$IXfx DbHraą,` G7U\1ϱ;f`\ IDAT]'Opśec.-a?zFkS{;Za9pAJ`WWKeE8}Ru)K);_da1vx7;ڥ\:|Ghq=ױGfq-]z;#S4fh*`YEёB/JBGzCCJZEAXdf̈Ĝ8o ڔUVzޛ˖Uuk=sDč;䛒$A-DS-*>ϡGKFiGjn,mT*!2|޻tߍ/3~;qbg~:{/>R.=G򳎺[ڡ@GZܱ>ɝVVAٳegC}I­۝g|/ޟ{~O_7Gs؄-W'NYyn) ims/Wke_WO"x v[|cXt % ^H=,\L[ F3.$)TjDAP > \F~ږnHhQ= { eAp0ʔDY6СѠIz(&f'.=@> PJ@R']Qp[` E!pfA0uA!H:+eeHKm(y- 4XZx` w4BovtocVYPІ$hvrƸ]fKz͐v8 8@U@8PX ꎅ R} C9 LA;8E R vh $2 Tn-H-N Iv#i !BHK.N pqŸdӓj%tІZ jz6kBPC>0C]e⼃*!w)AN.A>9Ƞ !ƥY^>Y&oH"SuZR  !Dq68.Q\jT3`pBpi4yjsj=8|!y͍:qNObssESe$}0#,@+{u2w7ĚFLDQE7FjfE(@),G$Cvot:~0 bޖR1)l0ty!s)h4<;N]oubN TݎDh4I):N}~?źʅdWa"*P W$b*f*/U J(vZ)/vB"g "7UVo7:HU!㋅I0P|ы@@D}My>"UUE`G_KqD1DxϹW33 'q=s?i8Ucy@f汎&`Df@bb0L0fD` Ykb,%Yk8;SfY6 v{8*B- V2 ?<;~%g- ٗ_~W~E~W=-c/|~?]ShoJq=ov0dHZHyvT" A zT$Zy_?y<)_ߧ= ~4sx{~mCR}o;:g8~@H[HG÷ww\Zf噳ׇxxd#dOoQ&$C1=h+n$p;J8(HM'BɾȔH/.mI2{rl @Jq=~k HboA@@4qNMKe$0唰M$T F=Pl_:x}z@--(H!Z-?26ܜ)z:DxO.Lr'Kh"LxT -cY)ANr ] S( aAC P@@R8m`+z  %u#01rHTxr %<2w)U@%!vq Har IokO =fn R2P zrmQ҇T @``/ri+O BJ쬔$1   {*@9u ihqSLv1%Lfpl.Djs䴚 Ȥ|;N駳b}bO08N} S0 LE1 LƢMcL|Bos'φk09oW/ЛIJS4``!50Sk_?w=~gѡ~^97|[y?~ݟЛmo}'?%}t0 --E%f3-*[]>/xi;-g姻TVߦߤuzx?|o _Y| ^/|ᏼ?zO%D"D1䩽q;Dv5dd5ɃOt_g0, QږO3'_z{N+Wcn˗eY={Ň\j'IVHjQ~ z9c _H!d {!0 BV5^7dVp(:8V]%^@XT4\'l{ {L@LAڬp%=5*Suir 3.dI kmlvX8,/=x4=P~$s'噙 DKBffu |_~6$1F6)e{]:zֳDX|tt堆H$yAKTmOj+ǁn헶X=كyQJփ}O$[F}aq1?U@xԯ{E&zpHWT+KUGސuΑJ^,̮ 2Ʌ)2{ĉ̉Q04~BB D`2 $4<-lXf4f#1k 0 4D8HkS ๐wA( ؓ  ȸ_HX{\j=@ndh@DS)l`Y Q$ `^I l( E*Cp#K2AC%ֻ NIRJch1#'))P B%H*!aeivȑkŸ<5T8"NCo@hLNjbZyౝrJ1D g u<#pRrƹeΘ icusZniP03]תlvrUAxD3qq$B(H:W>BP- 018ITn# ``!xyP]xFޟP`;MY&3&5~T=4\癯̃ZWt+5UގvnM`L=rw@9ۈu6l5>A Dd=: hYo z3! {$L?$Lc_ Zc/ >[qKqDFK7i@ 3 =M,B8aw44$q$w |Ps]&98^K0@03scusE}:'2$A$̬BlmmeY(A "{s…VDs=R\!H4Pu`YeYFVYcPʼnH(UKk_'t}艢at@@U oE9P]gϞ DԼ.3}xtɗhSpG[UJy$I/:/DeY͜r55Xga13.%&Zѷ~͚O4kZ5ĜǕ,f1ms.*X[/m4_Ot !h-Rj) 7BNysj)X4:lߖ(Nёu٭'Z`gn ~dZ蓊wҋkmuUZu3hz[K7NsOݕ&ty Qr WȮ۹%ޭ.[ f|<$ۅQ[}W lظ|zb^ '0Y؇\=җޮC+]-e\{+8b"&lBĵ7TL9{t_ug<{ A}ð ѻ|y=18oh'b$fzI[ iVU(vMFd>f h-}+ǔ.9xVy]דT D+u||OF`.̩ ޜrE@s35qQ>X2(A ι&!#2xAyPENtZ뺮P?-ĎNc|M0,GŕC+YS!n~em]AJJy':#%WV<"*:~Tn* dnOg 8 cNp0s4V˲l[}jFxsMjĪ?w!oiA5ɋG ,a̲J::yzT$N`0Hj|ES 6PiwO=1h3'NVoX{puţf8e0s ALDa>2'*FɱQ6` 6` 6xАN/&#D#<"1%1VO3 5 MHgT>nx / hrq|cF6Y0kcNȯu4iRVJT994uK)Cp{DBz!T$!Yz$Q@Dރq,(qB)d@=O4DD(D3s`8Vp{,ֆ]q+_׽R6`%D\:<:zVHJYzLs%D<1xxocrDIAxJb2ʇ~8l<d?hR cϸn2IT hF!Q*.Kk $%Hr 4 EkTYnUozӛa16n.1go Z_%1Zʘ)L-u`p8ǯ<>cܥ0V2z=cL|bx6~/80K; baFѤ3AɋɷBk-DJ9#9?%"o\T6` 6` #L;Lp00!O.'BL,23BA?DFd48Qn58",L׷q.>l{4>wNAvcư|LٍhQQz raJdeT= !;DLURqN(Q5cnvz[òxwZB:"VEQ8gZkc\]΅Ij!pS1K(Ǻ#ua Š?bCKlk"j-(s~Y;9"2VA*,UL %":gHk511̪>ܛul9%FM$1rM2̟e9%gqB 9bnc4.ǴWӏ@ufc>]cdNommcN_llkO/`+ $ !}, xZeJsݘ6'ȳꉙȥ4Sq 1يFgW?{lU7|=9ƈFBJR*f/DyOdȒxǵ5DqAum.3/w:Ã~Ӊ|JQ CDRc٢Tr!DsNk̤{RDPp uMĄ ~zBJqde̓k2Mvo*>88{zZةFN'7o淾,\d7VOen)¥*8pVy1G14"*/ =BD53Ǐu]7llQq$D.{PJ 4jcR! "!=mx?]{jy[{{4'γ/ U$I'>c~>zYq8g*>9i[~L.ё{Yj 6` 6`czXhX)e/PQs#&ұ|8qr*Ն <|rM4}+Go)܇ι[@)m @ f׵cu]D1l`jWza4M=ZF1UA'@c1BJ_"TBk9U2ORdvB֎ۥ/k]em1[yk@ ׏g̼+*6WgU= n[RY׌sok皘;P{"JhF7\a%6Xı$Lquls)$]WK<TJUUES5cM\5k:yq ,0ˡ^k]u$L."P$e900 )cc*g眐'qO 0p)HB@"?qƋJ4M(;B]__YZ !iEQDXs]eu'%][6DwItd]-|XTIW8Hn~lʋ{ᩕ_8d* &KۖFm0Yj 9aHm̌lRQa9v*"KyG(}EGMC)Kr:X~llMf&@`&am[ @93`n#UAcUXB$A~&NZx3`֛nsSB8_H`g1%$UUS ,qFFEY#@R |u1ɋ1j~{Zz{ꔭLmJp;N ѺN!cBJ)磦$IVulzG:MSfqР$H)a31Jk C+Ga +]!;~Ǚŕ$2k.=$;9tUY'eR'muGe% $eY(Z&5X](5ivUvC?HSアbG]hR}{.w=pY/mᖢ=>#su7ݾx` 6` 6y8W_2siiUKO.jxMcِV0 3M\C=>4qFOvn)ӵ;(|01. $BeM]W9c Jzgg'5" '&:ˢ4t: zsK{Ru vSkB\vxe/Vll̀ИXSƧŪ]pӻ7' _x"JQ 1ӷcTG5͉a=e8q&4yJ]ֺ ?Zgq!R 8n"KP$@֒ۺ9UeFWזqx8CKhB޳}bUޱ[j|%_Yz!`S9oNje^$"=kǃc8H4ds_|׈\ߤ{ݽgFl_Z~bd<7` 6` n4'x錆"ahH0 Γv/m+a1"1hn7ddOٷ)yu+z;U401zǰz01 a197UXk Rzfr1&MS03I)RQ"HIxEyFD`SOa`!Xd ĮspD kwrٚbiɂ齸67u^o)_y@Psi` beU6SPj^\٭ qXb@829n`'%') ']R9WUUnQUlv)"Ƹ*Kۚ;c<χaιn[s|gL[U QCrwP$q U>#sfg<{~.O^'Cǿ/_}y_M/?y~i+/şz~~ǷU_?4xȞ{?^[8t-xo՟}9k;C x?_W5_~m[/zѭX䥫Sgs^[^/uvk] 6` 6` vf-s-65ͣgקFZNSօIۘnVǶp4XeF| 4K!֧Taq3[ $ R$;d$&vYi&!'k{[QJE=ݽHyG6YIYbiaEa3drf`OXY^>]Ow?^{7=t#U*#|_}uڿV\?7}Wg~G[g.U~/|_}ࢩ[_xo˯ŗ?e~(SllMIt>T W9vnSֵ,NptZEzc }Xo:9VZD݈GEiFN" :J))h:bV;IsNAxJiD "H)P*cW L{ l `PI4J #f[=]wVsS@k OLoeoՓ)Ww{*OxD#o0 oU/>搓=5߆Ku]gY/˲DJb4M1dQ鮕P Bڭ-ϮG\_/ۑn䫿`/s#;^ _Xw)w/xV ܗaWtg_' _M_?~~o}ۊ>>s>όozٙ\>}7~ oHGwEGty$llpbh<޿LNsIk^k}Ca8 v:GԹ'"f|C)" !LYTI- Bְwp4*sI)eͲZ+Ze1BGUU(x&ƝN򹘘źc5cBf ce0HNI@+!8!+Uּ+\lM IDATZp)MB4䬵GGG 8N9S|kX,XYzc5$I"אe*[:MW'NSDcNO1hOi]'ACPmH0UM:  I$)xO; 0vZB*`ds7Rj8*%QppNkx$HpѰ!hjO{]E(,cⓙD)'^ @K=+x' CyQ̯X _RqX/}K|+7>9q{W/~sDTUz0t:D*a9Ava-]_j=/mzW`!R^iwH?4ǒs>Ͼpޏ>yɘgKMudpLYËk|~+OA9÷\+~k\xHm]>=씣zo{jݝ/7^_k?NZl>~_yEc U JA  @ ~߯X"T D$0R_}>z!{ 벫>lq73f$1 *@hB Ȳ$T,IRDy?&c06E%q G1 KB  9%!QF$#`5qV}<>sg}9g߽~~(5; 3超L WH&?Pk.Epd^@Uj?o꫾k(*Eskr=̉Qs@H)#"1s.3DD%JRhVkژ)γ(r}A+DmI&2N! @<0(B!dz7լX D@PD tH? ??7n$"م )2n{ LmSg%Tý~w~3k_Ƿ|(FZs|̟_|A?|t ⦀JXs(jHP)ZIEQyw3h-m2_,'}8_ޘYKVfxu7+}ܳxk#??OwqnKx?i`/F~%>g׀"b̉7ݟ{χ&] 1BZ4ޗS $3L*ju>|G>Ҡzk%0, }[I`eo7޿)4@{_E$*mJ`y-Yldz8D'xD7]?gq I_Se79Ȁ9 1 T>.IU4T&2.!km ֆ5VkiJ#)P)@(qE$ ?F&+c$Y @AD@ mE  Ʃl?@^w;j7sGOby0w7pU a{Rxя~t+=u,T9`n4\*Ny7Nq҅+௿^U_kv Q5Hl:CWAR][x˯7/y}/>''lB;|_C O|1=V76=nBy!geZs/Rh@"/S{Ú㤌hZO3ic Кdy@"#bRnf·VpJ=s;ZѣT/ 8|lRc?.bgk\H`,$0MWE gܗ8Ƙ$\0oH*F!"s!Z6P HIkPLb8%@ 'j&IvV>ABv2Yݿ#n-8H'%k.:u'rOTUAKDTK)34ZYksEQ|7}s뻼rJNZBk_)Y6X]"q*I8a.0KgC1XqOBױ,Cj%r"}2G"+=)r'`BιS;"ha ة(BB'B \ZQwh[cg7-swWfӐE!ȥ͞/PB4gҎ" Uiʷ냆3tȟ7vFFk{#c^7s FmI3{  hZUepHCk]5jeaH "vgnk%怴B hXhͯ͟{(* 6:* (/PM;y r:-!\K5ctя:cY)$iP濥#ġ9QWNDdc%n* %gIUDI")"G"JoZf )_+DEEQ$N4T'myشě0u e2SNyJ_dY" !oFE"a("b#20f dpk Ю:p8 ˞i; -jUQl۶iU\?gsWyǣiOܼ~zG̝so|Ҫm~!L"P׵Ͳm۲,_׼;۶U3-[Ax|w?/?яzilfoR9܊k\~MytLSH{3̲^ |bv? 󼥥(˲$;$"v7!ׯk_~xPlsuدGx+Ԏބ'96G ^YRjz>Dv2譣vnByc_mm벧nG(EfHbvSOo"syV7\#Yd@DSMm3]h1OIJ#!=9疅L,3D$ιRKwyяEfzWa fjn!Tt"x.&e)<f[GVp=\Otػ\KXP\]z?j"D1FވcH%"!)3&QRDBD1]J)19i\34DЇ)́́Y Hb¨ )1 0$hCu ,"W *f*iU=gyZ7dzJRb$bOQ"Qι DfZ2l8$1~(޷!7zR2\JM1~R1~(򩧞Bĭt ̚TeW^>c)UT*t{{bW]~b@tڨ)IA0HooW<%y>iQ˒'JKBdG?y4T{RMӤ'!t~?M]fPWq"62WHӺ;FBOw8""1B!y1HRA1AE8 2rTZ%H 0816.a<[# , ^`Ndt]h08E=&,ac1D8[m8NvT э{8Ō$] "*l#\?,۶M-fPR*i"Ҷ Ckuwq!U(" IRޓ3LkvԢcgiյ t,y11XѪYȇ>^:RMm1LiM,K.ʏc*͘x:jS=я6/;4l4u U }bPo*{IDa[wU|@SJȀe06Wp/lˠ줽Vpos',ƝU~ 9l:M;C[fU(>&ZW߾v;ΉQU]\sIj(M僽qI5(2#!p\I]^ec4hl,:XѨ&C%"[h'gP#a96 L1oWS61 @M3֊ւEq-2o^̚)DA`a2jE@ipn6-kwč9B3Gt¥`-DNJ8,2?9a2OI0G{2sSS;;Q,*ٞIS$=ÉR҂ihds 0um4@=aFT@ (DA/@(B؋:lr25 @nCƂ d@M0!@/@CChCP-f:s; =ZdҀkT4`2QJģ Fe[a_}bd<^0Pd m뙱0Q@ ḕaAEDbHh n]SS6k!K3K dM/ca5Ffn٭31 po*USLIδ־V@QJ0D1&.7m[cqߨTlEo,t>ZZ1R$B"A"%D4*zd"ˤ AG`א5i%8hý 7P}d/*gQ"U!&Vp"SLEdNrǭeǭ 9=||=2D,ԟ'l;X߀ )oeRc" IDAT_ T I`tHYUxe'iOs!^wEp8 7xiHҶZV~8vIE.ܞePJv@A &DX-ܢ'{B{T䬴궍 A)-@J@V>._Vcc D2r{؆RkZ[2ލ*&?oLA-*pw#8U5P%4.76Pfn*#(YﶽY2,/<( vV )>pd^ I!)+]XQyQC?+qT[Hu ^?=r~u~ܬ5`QfliI\UduVR3"['ȑ%-*P,AL` BbQ1`1ұȓxWޛgĒ_d骂O1cN0;}R[H-P9}3?c7_,\v?+%)ia̼ӜӈnR Li<&"xj2o ¼,0kC )-#HD ր6JmǴ#1Fa݈~Qm0dm&v 8~St9^No'+mmU"RBf~?:W_E;jKc҆-X 3KDZ V\*e!_Mz׻Ag@HϜ9^vnvngh`Sɚ?Զˠ |iyϋvjUV0"~Ly | `5CU2満XɊaV }<94M3ٽ%_ֻKR*BQ&N1Wٝ;ܾ/ n=(O.f>Oh9S%W\|p={VB+ ^ۆO| m~kg`/;e(.Fi6$vC wđKZb;QuhIQ#bR豍VLC[i 県xHY9o'Y}Loƚ HZ4cinxϓLO>Xg~۵A_y[s?:|عwqIcGv.ARox!8#\%\'y=zȁ|^/)_oovgg'+#O&!" \s;s{L a e:*#[AۻxU4hP]E-O&ܫ# *qU-cT7X[EQ(M_.!۞L^ 1\ MZeC%J{5m2ZX{[ +F M=/x/Ĕ˭ QiZJY@S>6},rBãB1D4e3L=x =0D1FZɔnDQydҴ9:9ӉlA=$A8*ֺ)ēO؆c?p8BK9f+'蜣 *cj' NQuP)C $)azEY QY]R~8m_νQ7[v'*6ۃ/’4]d]ͅ;ျ")K+9β*bZkua2Xk1""#P|(ٞSCvnv+ #52es>kkC ru@"1:Z--E[1  sڗ~pQYn Y[)DDAk2g1[s]]sʞ40غ3Av : ko;4U_vdOՕ7XkzvWGmqCT[k@$A[Y2, ڔ_|wѸXR&j±9"Ojd\S[!5ׇv7_[7cLp)̇UOG׭օa1Um5y)#&"fH)5gYNCfVt ё;f ;dN=s1f=I1"qV:')#*Mȭ2(A8rԶO+bfwJ 8zNpܮ9CX8{;tk7ւuڭZl\UmnKnȻѝ)ZBGZz$)AlmR1J<ort8s{ xh3I)gWaדD(D()5F)u J]+)~A (s`EiȽ^'.dsDh|(Hƾx@oR}3fTK_Hol<, 1Fv(H:iBֵlb@"2 B l`2T>6,jfws\MjKahVYnPM^<]Tm̨\o_ty,6zS8u8"rr>AW)aJwx1^1z0:c^.]S,˺EV쐓4p1Bx ٦GCJaz횣!ad60&D e,;:Kb 3@!86)gY;R! "6McxKA;BIjhh4G,*̄Ak\hW>)E(c@1C=:@R, ,%<#lOD1*Rm@u]cCI0@> a]׶MlwxV=;ڪFe}uwil mQL}Z!*eGt6J'5ʅb3F*AP}n10GYMP @Mg9iYN\#t:R<ᄫ|=G~f8ӜܶͲؼukkuiQ8CpJ)ha `Y $s5fNJ HR)B+" ~ʵ@ Yzͼgf0=-\,*NJL`ȑYE<&"j@q4YKy guMӗ(m묵-JYk<"Y7VO(!TUQsZXk;Op'Ckk~ADcs.<# 9GO*+ff_Ak H X^HB)"QI8SD)#"cL4zիV=&Ϝs1Ə=B}R{Ԯݼ4v7ki۾5{#MG7f EVG4Ͻ֊IӨ䏇!82m`7=z=GxᇕR Xs˽0jg>^Nf7}(e(Knc@W0Ufnܙ v[5maO_cQ+֌*>9o"PXLZs),ڴf 3yE7܄~t1v.8e%d1U#n\g PQCe"EEl{&1NV3y)O(69){QU[EVZjĊYt.:vHr5%_^,|@y>3'8@#A.4O8żй94\N!y!YBLLyIT$QR HbZS"rԆ9R#҈Id%ʚ-gp먯jϪz-cIJDdMnvUUyam&1Oqa{ֵzׯgYfMVuw]z ۫D["Q!N0b&r޶ֺ(pXw^oYu#Çˬ5n"5CGeH/A[UU]Rʕ+)(RDs!WloǶa{ET(* >;/+6k3<=̟Xo0#i$4W67.M{Cm8]`N&m @d4E۹۹=wL) Zx܊.&B9`3q 4u'C{cv}ʆR Aroė;})=jBQ1쁻XcE&OzPdU%iLZ綗ygY2uB־VJ%geWO;W8 L[X6-N>&fC[#:0cmWrt$?Qk&UU<ύ1__s58s0x؍brBJS(wp|hn dwgw\^zڞiB3kCY}O?6|?eD֙]SGsǹ۹= Q$P$&DZ_yb{|Z V026#B.\m2uLH% u1Lufmjd~Q+Ϋ*ZXgqnϘrlRw\"UǩYkժ-;A Y6VD-/NȣQs˖pUS@`2 @q@Df6iw `pK<հ>8+$8V@49PyZô AQQDH["@$} BBFbL 57&Y4, H@\,6E1C"RF=kbdzcpڪ~p6seYkꖙ^|(WxcavQljz: ;Fz;iRuUUDy4SEZm;<91"OϤg%ϸ $>!`k׮xя~txYHq1BT5l۾o_\cّr[o}a!?5[;wvpwyKQ^5vwVK^%/ UV+@g-Bi"۹A@ڽWؓB RZ#R?/~Te&5l,_h9әtZ4 ֫/]bqW><}gwBwګp]]\Yp׳})6j( MAFʫO=/}|ppwo1Yu A[nБCYXS\ԣP(lngV1ǼHYBRƆDD)@8iR A1u{fw_!sLS: IDAT")( 0壕(".c9 Ā"B "m֢v7@|>CB#22U-QYVg`BRhoccl x㇈)lڿV??#? ~߶Љ62!sm-v${IPd2I07_`1_ftDeY }P{ ҇sӶmz0&`0z~U ԒS`KJp;ˢh?t|~?ls{~i_\_/4wȪhTOGz@d1ްҌpǫl4چޯ*F$^kN,{nvn,)fAiaC;Te7Dǘjvsι{s!F! &Q?:UQ+KQJRO bgYZ%(ht7>w<5+W9ımZSD+DC׶|$͊^qw]|")b70\#7h)(5GzCx0 }+4bXd":C "b CAP"WecPWD!`\ 8JYIaX*%dacDg{19H$ 5LR 8u*Ꞌ91=DZ)n@eqlH "؍3-0sә:)DZJI( 11$I:N1î*B~?DJ(xgB(d4 4OYEQ$I5OBki"08M/.Ӈk~οZ^~o]nYϼEeN|}oxDzwy/yg|}O|V0?q滿;_ysoyvJ- ,9Kǂh#%>f}??'cw+P SClaJoDE*O ^W=wnZG|x}_c[xׇuImDw»>L~l_`4zc;[ضG᾿/x1%1nC]8sSS&/`oὟw1! ٗ6\Z2Qge1W3uthLp6%` Us@j&&a!M$\^VYL"H-4\nC=:PYK.җ՗GVa`?8ׇ 52J#{9Kacn6q#bho{aD|v5$!\s@aNíHIŅ+Q+#Gt ?#orVHc 9yqjyu.96>B*PTT;cYҗ@Q}Cf|GK߮_AD b8#!w:T~'{7ߜ1"j`s(z) 1ABc {.{WY: tb.h̙e'',^H)diY?#4m:QJER6MfYTBCKNW=G6bywi_?5)i4cbzM{~߷~O^4NfP KY+wkw|QJgX| r|=Hf6=/]'d6c hH} QLm(ku1a%э/Ě^NjNg(0Figi$CJA{%z8GrC ?l(DP  6T)tPW `3@1~{x8cLw2) dRa !1-w] uNKl-K'"YD5 bdZkhD*,2dDe/IkXKD/ DcD,  X%0`(DC, LJr%@d΃ TJE!Z#톖Tܖ2+Mmɍ.9lJ:I+(av*J +G"狵o9j 9bKӕ~O5 rWk9͠f_z9=bZ2cjRdpxC6Q 񄆧!ss!^ZkN$L,,˒f;ND$Oډ^\+wO~w?+~w.%/=v{+7pQvj}_}b<4۴[7Ww?ګdV, 6Qs] ,B Ei7q\]$lB@QV͋҄smklhXQ(=1-6}%Ot;eY6#lEq׮qGK"QB)B{ƧMSivf*฽8/:WQIHl g?A8XfsQW&CưJ#cK"2*vCE@ȓUJD$#ZiAkD`"tD$,#RT,5al.ʹ󨑊6ޕʢ,*/(VϢ>ǼM慥ztrvy:CLн{1Įm} QEd( rճLLkgoŌ];R|8,PwygPH0mcw@/j~4S6Yu,v]eȮb9v;Ώ}oFZT(E]s~R|$_>W_;onUthr,2)nfCKG_loV_~|%_򚽂z>r8*48xL ,QXFVGX}=@hR EYyQ[׬[Ա&2/߮._Jd׸tV Cόң"نwNkV a~~7ڑYҦ^J*T]cx8zC=r,?.ϔND2:ιa2#g]ZXQ3xgA P ٳVϒ!@"DDYȋsY3 )fp~k~hlno*FčWX] E41I6VEX@>g[mk\B>ȿ/ak"ֺ j_:5dLw9VɌu` cH.o U=JUc{*L(>xɰS;9P SӉ3?"qv14Ztk3:hG7/XeYAǁw!͜eف,ٟDOvHn4fdVno_~eIGZɺҞG|}X ޷r~[|/~M}[,]I6WRauI WXknxNml~7犡E2A[l~#XESK{>kGny9$gW{@yWLCg Y[Xh{E3Is֪Ya8}o8~uNr.2qr_eF40VNfc2(رյ-~@}ndƁ|o`,%2V0 T1UvRϒ r X2!h@-B{Bi"H y!D D‚̚Qyn,mf*X"2蚍y' TRq uBp Pd>eYTjzF睫js7_d 9/Dh1;{dT2ژW ""LFɕ~z/ӟ+~h'I/}( ١jZt0 v7^s=x/`6qM~ —_gxdǎMe'Wҡk_^۸ .|^ÿnxMcw#Mńr8?P:ˇ.;CqԌ)jf%k l"UsғFɯP)$|F"qF֬ CЂʳ"FG\\z$f`*}hpޑI\R ;b4R!Х㸙6\Τ4N' hY3cJjxcp(>nfo`WV1gϺߓa>0^s5u18 bƘy#/;%UFPCLTQiأe!40"xeyŋHHjc M=qr枤C7͟gRs,--8qn{ﭵZ뫯'oY)R*V E 9V/>ͯ+?|ϳu@.(J@i/gg_ka Xu0tn}|7O(HVr7ko6+~˖:8C;j\r{K^+I \Zibe{>y~?@+rz-&|-Awa.v(;a/җ}+8 NMh%/ V(D*F"#Y[& b`H!"6-m> Z-ry?(G事Hwj|Zl_,Ƕ]hMFd)>Kav?-Gf3=py˴g Lc-M}^: q zҡ 93+ӷP *[a-*-90`8i?nÉ" )E[M3y)9ﳂM"<(f@R`Dӈ̠$YeъۮC.K[C^cGD"@+Sԛ=kz l VPSgj''*B{Ͻˉv-ܘ};Ưse(\4ƫVkHd]1$öֺ^qweE5\~__`'Mݰj|.i.nhХvᴑ.K$E]+cm PkɁon҃ WQD16m[GY>qq~(+YrEyBK^`8pEMWZFĮN8kUAs⁻哯羺tC̽͵.Gr+ 65ˮq{K 8F=cҝRIN>ᗽJV7Zz-@4W>$."9BqO򍽯#qnA߁j! QH D|ޅ1.,Zk\k`nNPϐ3CXDEXYyVF"N199P^6 e~ @зeB>NlȵZpoƴzCixiaQJL!zj#1yf1auZ׌I1 \ueĞV?`QMA *7V{ڭc 1VӢL5#i AȊG`ۣsWJv6S2gF2l~FQQZ\E~=^1FD˜տ ̪# N1(B"t`ND~rh~m@Υiv7뮻 ox B4oH?qLe J3E]!@h,yvP’w5TK Ӑ\0nH S.}ކGYCMLE `7X`>܁Qy1Ŧm$hJf®R(>@483iMF ׼D D[h)*m{|Ռ@yVց/M#yٕU.F#_5<[P%}vCxι嵵5kׂ3}Ou42{D9UDQx+]z:dTU , <%Yt+%Ey"'0^܎Ċ6nI6F>v{qtAp:uv+z^{j/PP+Zy%Nxq+\㆜IA4Z7bcs,_ٸk^q3N%-D>uZD78yLDvj0C8bקr2vP@\P `""D K}xxSt IDAT+QfՐ""RAPB00EV!#jPk18ދ'CpUTE'_Lf5'ֻUEIff,J_`mSnӼc7bW |^$D?lJ[al$A~Q +:퉪صNA乆 [e tLyt}U<σO(qT*䡣: }8HD!=f:E $H"Te+ 'yM^'O ׀ Vi'80؍NW mqBJ)dQJDff5h=Tc fe٘AƜدQ@vٟ:Rf0e|Z{3XU=z&کrjRݖj!,[^^DQNQ=|*#6ujN(B4Zq=ؼ3Z~C7'*M5Cd)X,D)Q/}6bR:bOޗ @yF?-YqtPKu:&8E!ߘW@Ml 97&͈ڨT)$q2 fcA%#Y:ˋ{I5g1N@1j`ZڟͰU1=6Om(XZZMVN"$lO-0̐x;\^%fN${cL; ,q{Cϋ!4;wקwfڠ:_KJN)*Uֲt V*F3"hHA#ΕNG.5t8__XVJGu<8t`js>_u ̊A,!Sb%j=3IMWkNU=]L1R! (:}Az" Qp&B\faf?) @HY#Xy%p< 8"f`F@UB[Fp* "'ғзqS}uٜ18- ~y?:edBpʗ9\s#j =SwE-jF9 :]0QF~!Q O;ut(GF\QfhFD4n<.ʬN# \L/B~ᴱ Ͳ,>xlX`Sɗ>Y W޴t_|pڛHq6T"SZ+KLc5q˼ 8YrW"$(ΣMP"`Z2^4(:8RR`/%9XY8lwHJz`or~J||lD}qQ{G'=/Q^ǸiL.8)cngvwONZ3y SOo]=V*8Y]FbeՓ'O&IWTn)Tiզ]Hs$"T!FsnFX`?ޮ\77oxSrݷw#%岲L(z{ѬEZCJ{@l_Ʌmr+`⒣.r\/n\ZJ!"G),I&F`EI7Ʀ4c@gJNtYk{/剂oM/уju#SNPi7-א{ t⑝53<9PeB` Ɋj! wL# %jQfFDLDQka\EcI/#P02$\`]JU(ē)B sv:_aT`B 'Ӫ~ykv4OL< u UcTxNF]yϧzƩ,}|9+ۣn&;%19V!N?s6p)ZxD3!UwauJj"m ϕ87iOGDP\B%;Qh$IT%P6r(k[`x~ :B1J3&B"e<:4":c[ѺF ѥN#KI›E#v K/:s_`y - atRHlR8f4|{Cэq-պZ$zqn?:n+;x7ItM{t"ZUf7of:fr]@(x!@~](GcN&kH;5]BH$s>tM/-ZGQ>]+XAT2I yBIAD0a`EKDdp`0 %@ p052ha~BXsX ʧvJS$(0vČ̶ZlDE.I< axZǴ'0tnyQ,%k:S!UQKVK1VeYenf<=jk6[@sG 7Q`L5:vYJ}snh bQ,Ͱ ^Z ʲ\^^ɨ(Ƙ,a@0;8cGM S-05\jQJPiɲ,1f¼ 0ENQZYܔrvh[t >=GA2VOKsDʺҗv:Ex/_6;:teNDVHc9#8z|Yj# (>s(Jx؀x>e8 'V_G\W 2pPBg;af E S-8pQvr|f ?v>SIs9HP0)T,D`=3N:ت=2bj֍z3gZ 8y)`ax`ƮC)zc?<*t TJ) Sl|dܘac:Uk3Dx:ޟ?رZ/@Qomm !m?gnTz5~jaa&E3ieV*RD,$IC)O$nǩwP Vn(b'@Q<#+2dP. /@(" XXeƇ/9Z9Yes9wrrdVOL1c<9+:GY'2򞵈6Bfu7N؂EZǑgOZ4JkA^.du!eǹ޿[Ҋ0Gp^;xME-#n A"PҚZEQi6DRePqQ%_Q`AP& 18hgCPHǐ`B>ʊT[PUdv{22tݞvcV]WGkN0#F^~!jf{ }NwȦdg4sϢ(D$|CQX`; FmSGT~_O=}bgcxߪ%.D (ZJ1s<M<X8SӤ2|ñ1y(B9"} 8讻 ,$IQ1Q&BJ#jv4N盍a;4 fn, 2ɓ/IREi IFnY N R}HL aCᖙsmyET$2Df4UgGb *(ٔ BU5*)<-m! OdžvYdGLy{mHD5QIk]bh3F9*9"E6Lǐ ),(}dxӔR LRAaD18LJ؍kl%A :4=ȼv,Ǥw UZ_ џkɼ8i1ll8bz ߟ| "|+AwdjaE*{_tҤ X~'LMaTQ$E2v^YkCx"s%"!`G`b+>"˲@dqy^2kf@l(s1Z"j 2O qJVj"1 @yY)ql˲ )]J6{`=W' 15*6A1;6N 8H@L@ ؍m DLQcDNa幌nԒ {/Z*Nkc}dX l?< /T\u91e=>aѰ 8sl{R1\]we~J񾌢 އ1.! Ό1^oee%0o{ێ;~;g?СCY<)b(D9MӴZveo{RiG:]:h)<?[~?xucAaÇ/t:/ SsWVKʜ#ZsfYE:B FT ޷lS ЍXGzVD%祈ma;N*gx"QJc<Ѩ@Jꡆ TFd8 ;W182ߗ ՞ My"F:f Ò1+dEB):Y @$I6{U(% cߣD8qrBޓ"*8u$ (" ""jc\ŮGT+;},*'uT}&6圚cJ#sc4ve7@Yn쥇.n#.aVjI'$Q%PplfYԧ>o8(8p! 8c3mre4MJ[FPХin4Gvv;20\g>x@5k}^r%MmG">a@|kk;/y ,pniT*(`+$j>]+ &B!qdxW\aO XĈGVڡc0q R ϡ3S"#J_$b'NA.e#0,tq{~7YT"}g [nmα"' @O;rʼcxD$ic EQJPC5xCX (;%{zH5)!r@cj) {5zm$@5LĕfU; 4QFJ)wA.A1Q DTjۆj=l^y lRRH/̀"-8F.T $-ME +FiՎR3ޗ33;0a~Q 9s D@ D^鎃jw-S%A^RH5 DiSU r8J`Pv "dq@s@3EQD}@IX<=C7eS"zc3* o̾,$I""q#8TmUʈ003( "O>P(y1YQ*4 *\237z#@ Lpqx5;%"8>@:<1qH٩?uQW>pڇϽϮyw2SuOf(2vdm0븕Cn!"}ΕNy%ѓΒoLa(7n IDATINuQm}ݏM=e 6S%U}Č~뮩3ZNw6T^7Z[n妛n 7ȕ* h4 c aMvE&ʧRd%x+y[~4ݿs{}|y} /ݷůH_x?G? /xSgn~=w-һ?~~诼? ZgK~|[^Xne[)KX`"S2 Ultu5l,(-9B+u`Th\ gnD9F+$F88p"E>TCǖڅG1ˡ^Cn²FeQD4k!*!ySP"[ʗ'j&`k*C_=(UF͆ sU(2&,Kf 40'0IjTfԀ{H[0C D3RZ;TZKduL,Z)Pҧ&,:G$D}+EH)QJDteјW~f߱ǚ1Cc͌qpk:{oQͲ,xyx{U {5[c|RɚD,˲jeY/|k~8S)Ug;e=N`xS_IG=J.`݇3ڮlNqy@x".2)]$ι(bbit}=.ދsouծwų׻z! \[Q"ǩ!bac,M/$@ * ,<&q@S1IJ![뤔u|%D!x[ʒ@sC }h9g"L qeY[DFDa7| 8xP\h13 "`!< !L,.=S71Z8wt26զf 2t|Y[jwl2K8m^xGR AgPxhh)Ԁ*I$DQYJZI88nz#B,Ykt[5rc<+14п}}R|{zy:eښ)}yw` sƠ[ A Ik"Y*@$>\)UjelesUݳt]ҫ>vsV.jy]|.߻̶ٯa4mKBn7BŊT8N D&93UygZ1:.?uknO~C?Kn?ibcnc.;lTWGʨqz|Ԉc!!̅7 ‰X*@& B5 !Y /r_#) g[ks0mOMZ[C-D="Tߐ^9QLzjteKF3#RO$˼UI-ݯ grkk-ݵE-݁̀%MwЇ~S ʼnJ#t.=HJ'2D(k<)cLhf&8!Y,o>kq'zx-RʶFhQkKi²K'x'x\{H8ޱNh!!B sc2vP|͌JtΜC부YYT625d/1 a=-޸ęťޖ%5CT|+""c 3yTJe{<7_nSyQHEц -j^Kcr/ȦN|? :CsIJa^z]X+v(>^lg(bzzzٲeׯ_rE~fstt󶷽OkBţl{8NG|/\Mjָ;F$3Fo%̝QK2W8W6b6鮹yTnWYcZ!vQXqrz3|߾Xյx4gW w'_=zp۲׳(ںƷCb!YC0-"c\5Td?mзiʠ+78֕JerrZ)} VdKYâ K/1q|ne_ &F zcUu]/DH@_|w{14jRi6;Kpw]ZLŐS}/2lsu{pT>Y)Knι4MFeF׽nڵPW_~0MScs9{w (Ry_.i؊B,k&cfTvbfz]/r~}Eչۗu4vIMfLK??umDw.˃X}sle3ʑ{[G[=m~8tZ}<*uM1Rc~\aHp HXX9In聑>A &/>[1bA8,ZJ|E"$<;IL`V@$?48 4s$[@EE@Fbk{:LMh@-+&8hܧ1697>s--0K$lP(sXksNkzk] G@Cwi;V08<;oB8N(&ˆRB5T9k-,cp%ۘ{)B{W{oϭL^X* dž9B!?#nsQ`6憱F_{CZ21=Y؆DO %HjJ<΀֚96.\y^JRZ}錥zvTUcLxC$1Ϲ?0x\J6ӵv0@䓶0g}a7q9)T^~}B7ͷzG?ѕ+W^{vZZNOOgYw3L4np$5>W֕ _i4\eJSdO=kl:߾> 9ͧ?]!Ǭk>&1\U}ZXolg ոl}F&yxQVV݀69V R vpH9UANB'VH0ZHxATX4rBnuDVtN>4KV[2 8NV R dHrz+ <űTG's07NPN0E33jEQH cZfR* B&edR )eĆ0-~ib!acW r%m+XHhCYk;A`sgvEAJAI7`k vKx*\roY5ot(?缡MbiMn`(g=8'IRŁ?^$8R1H u$y@ wM05=[$I$Je>|W]uUxdrKpGpi 5z>0k(~~^szad{ w{c[#{#cVnUN.icfvݻ:?gk㭏}~eǤV+G?}s?|fg>qzիs{Sg^Tͥ5TqWJ^"5>===66 2" EӍMIH$sv} Et Z &OpW׳ʗE^t P\Ezvk֬IӴj~p*YEb!b!gGDrV `f01L"r/u9[26sa{o:u"NӴRtZ-05OQ|2]T~'zն0[Q~ 1:Vj/u`"j{b^*_7>{\c =f78v5T-$<{cL k4#C 1C 1?j丷S_AD!̄Op@l=A^BkK]{*5cX)EyGDZV*z>Ȣ(H !$@٥B… (;9 G1FkHyBpEq /RuCdtF"!6wfODγ3a o, 9رw#N:۹w۹T0Εhwq{p I2X8p]K6tوhp%Ǡ(G2#]G-᫽@}+:^P ypo}oBX$)SSSccc2Vp٨V333A%| 42C 1C 1? "a !'"E-a%(66,Krb貔crW®>uFp}Nf BVnap7x?>/^Ҧ"ky>6>熙{)$7@F -F×%"hbzM*V,LS\y|&w8*Je!P }PRḘV @ǁdjqGQei!b!b<oǙ.:`;IRnGmI)K<GFF<(8RhcL[kM9#9)u:PI9%R#<S)SLFQoY2s+˙yLj)gsv4YYǵzӃ!$c9+% '$B"x6J'Q VI<I f$y8c# 5-XxSV3ϲ̲/5:"Т>5RA˸QCGLRK) k3 -HCC(]asm@Җd \Ea=;u(;Hot}f\g. eQY،dMRw,r|u߱:nnG?LCeZ:,[b޻3ճ9;⠥R{<>2<`TS2G%RHܰazPW~Ր7cx>MәTAZyb!: @KOAJQU^}>˯]{[;m_?![yD&!<"0`s'8j -O}Fyߌƶi{럷ՑqЪF)0[(V}EZբ@Tu y+DFc) %ȡ|QšNfW1d5qWѩkU㕑ll#|ݥy߱90l,14U~F?ßY)#S]PZF bUNBhE@tz[ UI} E&+l$LjЎ$a6OQ,O}!ec~?tґc* > hfJj 3M"\hN*jyihBV$^WGe=4RyͳOW&i&<21~=ȇQAdΛGvyVMZ&F*\B`6PyĨ]-BNxy͢gMD3NGؾk Q^1U'!-tJ x {-Jm#,9);H7tI@ʹ9R ":̜$IZZ0ӄJJUZE,ZSz̈WEV4 PhKtDg;yaFQv>12s?:w%IbQJ.͟Psβ:6.G>G)% M$4SRt++3wK]DxX j}&Sѽg[K=P@OG. ^zzʗ Yρpb)BYeZ^:. " Bwz#YJEk|ۂE߮jns lJ%$ɠݘR,̬+C 1bN@4᧟ }׮M& = ;d47UErYd2iqm~ಫx}T/΋uQHaFatG==F7Uj2it3B VNJ_ox Hʟկ?o`G{>a5ᥲuNϼƻP4ɤ%rLN,Qo**r1o"4dddbԢ_ŀ5(H  (0w ,*7.0&R萅%tU8XR:]Zt]GZywoSGF 0艾ƽ(x,9`~1/8K]{F0 GʔulPy~HNyHO =?/eh.p'p?S>G=A'޽t!~Ç8|e!*={ZjBn_7^OLL4pB"b O |^o{3^vꇨnǞ9ȖM^#9zŋ{!7}7RGk|ԗ>=vR̊R09Mx޷}3?§|E:rbzﻩr1}O= /;l>'Ww[mMx+S\GFc֊o>Sq\7c1z}}?_}=)e~Y\Qթ&|KO|ɹ1ow_z>kxv(}??a'wλ:"RluZ b4 vźi`G+S/($r8d3_yyFPykziGrأ[-JXҚY- ~ƉO|hj '=i'˅ַ9-;GD+ 1%Xŋjkq+=I?V{O>p3}|/:='?b]Wsy'ϓ=/,C4I:nmV}y_r1Gpkݪ7׭;]ȯ9ǞW|WM4Zoy|c{|k,*" Cx^r':53\cvCNlT-g;l y);t'l!dmu !B$zP{O o)_$I&TֺI)AR4p3H0Ih\퍞GBIcLp(=>"wQaRbSy0@$8猱EQȊ"L7Zf3˲,4ȝܴQEQ2e.N΃V0 ct㩍AD wTR1ne`ARL\e/vy[,&J:wDdY)SpCFX§?缺~ɠs"}<Xnr;ęZrdd$}QTB|J"\!g@88)XUw,{{FX.lj?pse/}O_}w}wO^^ӧ[E B.ɊC|DܔOk5yZ !ӽd{7oT&v3?ua`WΫ_|{ʟ߽;~v;/Wg?ȉ}đp{ /,Z@ybTf{yU{1ljcᘹNE. */]k/_{?ߑ~UnIs4oN[Z`fRmNe Oy̻˯֚۶9r4#eHL둕uP a7^>zŗ]cj;?f]._߽ 9W]}_jʚg^ڿ5?5?wqe-3bR DS}ק/}_E7n~V2} ^^3~wy?a>tigO/釟8QEJn|,}&Şqik}3} :v.!~1 )s.ZV(xjp,"9yncEVh4lz]nKj;)?)XL&;7w1$7PllĢAs6Kr_mܸqӟiQeQ|Hh$G?vƍկVO:$" _v"r-?Ċ{tbYlbdDbAF6WmRTGO}KvKJ;Iz |=_'3{!o}ɣ70sa׳[~Y8qJ磙d/< :5z=Jo_?]Rdǿ/pȡ[m5zE 41Oz9yNN~ \<'>lQz]V2Aͬ#Q;1✢X)u'X#UUfm#x|w<>oB^]o]݋/|6^tY']qܿ_mv|5e3F l9DjOC~s}E8#lߌvp&6o+qq'UϼObJ'mG@wfլ婟xA!jGNY?>k[9ؕg~?]G;zK1އ=Z\3jJA;\ɻ$ybƷFNz15Uv?`?]&-n |v^;gq}k/;N>_;^"#I>E8aY Iքb5ٮv⓾cj?&`;T*1 Vhq$*0Q1s!֤V*ڰaCME[-w5o`csV(vR2L JER84)޷aˍizxA`;Y@8vEaI왼A3I2;8x"E]KRм-}J.iRك(2Z>o/|{lKf!E-?s18v-la^߱usX {:%Q/t> zȋ-_ HdIxZ e{`wkcll쬳z_|敯|e=O}Srgq)Ue!"m;yNhH@Fl6ъxdhW,UmX[\}1|472)rClDjCFN:;u{&;[\MFܮByc*Ԫ&3+8鐇>«Ͽ=ۊ_|}5OzPա@x7KD[kcv$+?6{_W>!97 8%@-r=ۖVB9|g X)3;OĔp"i$Ib]FV&h9( GRIB"(̤"*˃WS{"fRc^axA^B APH뽯T*pR6@pIL{HJEZAZTqpBͱ;Xy!uz{xO,r|[fAu-YT6Ypp4Tc1.f={̾o/!&Qw~c1}b/?IwɋA !kR Fiy.=4sR/˲W$x^@OA^isC H=CP3!,0n7yѪ-;/=~|DmݪUU Z5V/#<ӏR`J'kYvVU~xwy˖(W.Z t7ue@VN>dד~GC=m+G經x4쉯A36hdC]5}!mY}MWK'}}t_|'ڳjt$z\t g)NDPJd9_2?Y,.uwЌ'_+=8zEx!@Djutjm%E:2Ae5xI @ӴZ׃F,1{:,˸#c!DO$B7ta :D$U((Z668::41Zk3q`vmZ OִSJ=39)ATF0Ȅug|)e29k/0'Ʋxvc}Am KOL_?"2Gcv\ >. :r!ipX$\EL۱gAd#dx]Ko,ؗ]Rxo;}E AGF8h̻n[$!UJ;g@A"vQdѓW!s<І=GP|oACR@^*Dι(DXaE(A##cBO=B>q'T*V䠵RИzEwnɮ[h͟~qopXf47g=i¹&OUIb*KXXd6&4sdc;jmh5 ΰ:.2RԈ/Cl :R1{/+?r=~U_|;/xʳG*jƍQb$4 Ό<rٗXs Vf/"˒Za1Lw?BbE땟* dzvwO/>Uv=Yg~ђ-W- ݢUll&T +wb*7*H{\3j)woj[zz 3<CxfVEbfvXst P0gK{uD1}'bv^Xd^f!$88A$g|gX̃Az [ԲN': VAd4."Ϲ,@ yXkFnJT!)rSXV$R:YXE*E{efڃ)UE̔q?h?=p$Rr 'Eei:gFG+#Qˠ7-+Cl{ֽaCOH#O QQ b XhbOcм0T4@W31^wsnUYU=]{su֚o#&Ř͊倫R9BXM3! <@e;rΧYd/t!s7xV?eUUW1ҕ}ځUYwU;_E=,#Ve h6\ů4qL|ΈtJ[""V&-ڪssua'۶{=S=̜ǼmBQUvc4 s.p!"WKf/}ƷKG,X~7e/E^x׿kާs4p⺁o+qio ŵ"[T+?KwힻXۮ 'a]<ĞzxNc)aB8_m nSG˞_E{/}g~3z0GS;~+??OX>s[}6,*_?n%`{rO{sq$^˟s_@Hϸ^$%H\'(.ݿ5OG~v<[iO{S z7W<5}B#¯zyO}-ӊ^ஷ=K?å;?g> ~?/ G|7e1B v%!JD@<J &SB@ʷ̂]47Os&q=+pGs MK!i/'r4>(JɿVU*2Զ-+4QȜUwڍL"5O9)3 !9;,6H eYZkGRj8nHyFNӕQVi)t).:Yky(RʜR7!i_ek/?wVmߋ8K|շ|gc|OV\/.\cVs|5RyUD@iڳFeƼ%A"W5~nS9*Ll+Cg6hx]>dU,U;W`EӒq[ZCҥK{{{|+'~"sHe0o{IL_q;#ƐNr;;'μ3+򔧼}׻}(^ڣ'?)9ǟrS0 [>_x[^rݽ?Ηl~y򹪹=G4wC#.i_ǣHhPC4N[{A]2c}u z=Nm/5"] zROSw}-ѰԑpR( G 5R!Nu ]cGnj{D$Je)vDA8j ׸r D1V跩=TFM Z# v[VH$ӗcnJˑ-dN Z6 Li߈hQS8BQ"2jbWyhVg`pޓV 5l-"HBDJ!&+C!b LH 0:=V/iؠmF]K,b-(AD$=溩" eƮbS NTO'<$T A\"G@0(4:2~7F:vb[c'Uw^v`lHco=66JSDm mP}J#Cl 8}_*G ۅJPh%V{5x"+$2%$TSlwsTu^R RԪsŅ ~$_Ml,YI{X ! !d2s$m[TNJ8c'Q*J,B$"ZKERiʰ]!p,:CkZE)b8*i[7 27.7D ƘuB2F+%mc>|C03RDLJ511s{x&^l:|ཏx,sg8vEUbW1YUis=YhrȕA4s;eڕgX/ڿDͱ=wY&eȗw.+5o=8[]WO~UU??d|||h&\#ob+ޖ<݇ VO1r-3S׵1&ڻzq/~g_~qo=>\?Ư+[ܷo:޺|7}?ӥ?nz_G*>y|86K"4Ѻxw}Z K}n@s/6B@|4!9XxJD`$`xȏ }e0@^@n+-5A";Fڢlti,=,U`$yq܇$d'iL0FC0nm* ۇh5bGJEP ر&atqwpɖV+,,teCAPf"H=KzoĀ5$ap̦NU԰!@p[Ym!mž<<0[8#eM_K0`04 X{AH),H =|2'n 6ܖr\bSkM;9 1sƎc˞A/ (:Hڏ10CPubd`hu'' U`ĀRЈV c"@Oˣ*D&2$鬪2@N1+nv̯؟D"sDSrv5gt{f1m$VlneSvcz4M۶FB01R{wQ)SS֜j{!^WRSzEQJ,UJiUJq3SZɞ#(c BL%1bMT1'H)ЫQ (d$/IG2**mGu۶𶒷"n1SzJZ+7nn1;է.?S€h&iEB?%.M9nJ,z{MAA@4!9(. oe<*OѲAWA;8 bH* < P\R9!B MҋP lҌ2Ij43R1F iTfc~:fA< 1%=#0G@r^9l]N:;a7Se1t8oQ:Mw+U9I> /I7# uulIUʍqvvmۦvQH@w9W`䄏mj)TsݯRJsɁ1Fkm9w.YtWKQs˶)4eb/~4vwlQx}fH)u^6X&S#kvXk\q}U':41pt&ɜCrkvu,61d%]wfcI~w7&Yg5_k\`g[B F1{`"똯|Ҟ/`VumUW\3_"aM)I)s0_y׹mYֶp8z9VV-ki@V1FcuOz eO?GsLmt;'~?{ 7h*x3f "~_lkGOr_U⸺C׽&Q?~WG?n)O1n5#[ZtiTo%%!$K3j l@IAQl[ Kɒyy-0CN!m-sT9'%x#Jj%Rh˒^PX N(=PBJ0b̀^롎K[iU~J6{ %dD8W *d{ "%ɉ`!idjX@8u K`כ $%AR*yk"ɄH ֋@oQ[4IvXC@ S12AStra}$QZh6E}Uv Q2($P:Hʄ4 굨L[Q^Dhz5d~O~`T7j$ C-OA :A2c4v#H NZU$h6mj!Z*3Bt o*[s,l]k}۸MwHeDG<&'RCJ!EbLStyU F2@:+3+34nnHE3G$q49BtR1F)z^|C:꺮m[V0c@rU1*Za;-&bR4[;e9j ,6ƖA7@f %(<2UUcKZ,}zjc Yq2^U~eV2q1N4.3Ws yU;!K=lfZس5KT5G"Vg'w΅Xfg뢅2'=]M~96W @Vmwjҡ! ,c{nyg~k вP& duzT*B69%HUp$4a$$L,|VivA,p=Z ə-GLPdFs-ZlkI6c P .)g 8xPZ> HB'P%@oB([- J[0 0h!n`3F8a[BaTH ޱR!JZܕB4dЋS <6@=Vȉ-,lM%v#6bDG[Vq$*KmeHRQu* !,` ]\\Jy(u{4EFq0 GPI>i`X QBJ$E@PI@ TlNbyTԐdGTWb$NN y 48 IDATLsηgj.uMYҹhwd`@NÈJxT{Ȝ‰BZNPuLJ)A*o0sN89F^iMr,n}1Ϯ%R !RJfu= 2w||<4h2%N1zyk["Y` VBHʘ3sc(& 3hץf}֙45Xi=9R̖9}L;vNZsL#P^fZ` 1nQycʥɃ@vٛ;3m[5\ŎU7ήt&U\k&Bd(׽uι^'Y!7vdv˱B[ Y{W;? n);W(>^s@W[?uËZ%Cܺq`FDPD!"A"#-5U}1F.Ro% CA&%'f=U`!C#D-孖R E כ1Jx=<%$B()ȋ&aRhuwzX"jh,h p(ݖ'hcl=rГ2E%fNx?tH)DBHFDэ)wS#zԚ6qJ%{z0hDk%% D4$! dj4vG T C5L^[+K܈(z)>xqώNw @ĖΓgccٰR+e2< Аi `\>F!r!} $(cV1gvmIi9`v:g"-f#w{{{]EQ`j'pxDDƘsYI=Gr9di7\kv !d)G4ɧrkv֖~0e>I|zdD umM 眔2O3ҶŋVJ )e֧I܍tJaz ?1!Z30s3}N6C\piaJON9sir!<0O٥t1F`/%|hq`x]dy"!!$z2s{Nd3)H"It)rr:%f%cO/7o$IIⵣ{bι 5WmG4}tr!cg_P!ĄI#tK)S8H("N)8HIٳqߋCӔg *qƉq^/|U/`KVwQ>aTץ=wqu^̇{}|pZ׿;va_C?r:zOn?ܮ +{yJPC)l@E @4$4$@PЃ&+{؆  '@)%.]}IjчrMJ$(BY@~*@D!)r [J@c 3ۀ$= () XЃAC`$A aM@@)` 0 J @BA4z=@D@AоC# a09(Bh%,,}HR" V*- Q )z4-K'9\R9b7PҤ%MQ8V-mJ@(%BcRO\c㝭-NA XZ:y!ZSWU>V ꗅ6VR):"FrP4mUEeYsT"$15(D VP]>L8}yk|g탘88QJr-9G[sozBi&ƨօ.o度ix $ATEkh-@;!צ#eYVULGGGHQ\f).lf s_ge/,߫ýFp4V?h_dN+lE$NM'3f9 J /^[m %Gͺҕ.%\r[ۓt]{0TǬ1}{cXdN2 'NpĬ ƪ/UUF7Mx;3R׼5rKJ_vsuNջ~{_moho^a]b4m\nW{ݫR"p]>%_g|ۚ㝭#r7 ?oYT\Uб+j` 6` 6O ̄gH(AMXc$s[RʙS$DN1OPF!cZ\ PslDw*2 D_3[^)Q}f{B(ː *4R&;}-Fx J72W&2JXXXiO~\;S f7'pɈUu{'ơjduGŋ]u[2߳ ImNw;mȏ~f֦??;SGeY LֶmQM5e }[1FQ孖|0ç}׶۵ ;wP/-));a@ &@n㠷nP.M;j[QymQU-bllO4^G4 >1S E&dEO)C@! !Y< )p,1Diz^A+S_)hs!]@ip'༝+RQ!~YƘi!Xk9"Bru=-ڶQ@"ܝ#-c"34ِRh= ȓ ǔRj4}#Th8,2!M2SZsJ1#FжmYY)[MCN._j5_VuR+ UF+zs+{F,ZdVxJ,_/mXUY/4U1#:Y L+vNi꧙f?W=}_=^2̜I}t k8E/8cG4,em#[/WTJ[z߿6súȝ8QՅ:/(j<AXU9cC=wllRAY'y*(UQHb) )29(sBR RJ1lfB^6O "hbJip3"))cR,euLP,?Gb$E^ˊ; @^RJ7r;VRR*'L kmi6O=Y(21Fk, D4->0Gd9n-a+Y4ES,[PV0(r-ej1Y "V]ia,Xؚ_pWvDE"cIłU.S Jp /s Mje宎jY+[Js#fv\U+~Z߮ ޯzի_4fRʶms޲֎F#U2;w=jw{ohXc=(jJ%PzH"W);GeVEǺiӌ$ t%#W+T ի'uev8ZPJKۿlly?I Ɩ19F$' k- $}p- !I E$FL!R#ʼn0ZLRG rBh-sFByFxp9F,4BDVj~1EQ(%򉊢p{g1:Ex8HR9yJnm>2s'1FB)TRDn@jnFk^7΢(rRRE8F)9kx+u]kmB݁% QkȎ2K=J{>njqyg2Wy͸$RJRg^`?=Nc_U)AN["gg?sbkfaկ.oc.ciQU>Ggi\k)޲,Gֺm|_u`(z^]Ƙx8,nU1?v1}qSY{O9q}*nwF}XPaT5M۪0H; UXZol< z6ǩ*12p\7.*ݦis1F%9˝͔ 3f17frj'i++{-ǪծD]DOe簫L:>gm75{y=i13mWN'JF7Ny?_^f4X,9{ޫ1z8Mr)km4~?""FJX}u^s5h?^XrMw7*d*HH>(.m}m^}.A|v{xboKG&Qq9{wx,o 6` 61Ep8牢^K!֯A)-pcmHM9pHPJ11ƻ@SJR*DG!SI7"l@8`b~ZČRT)|GM=EOI Df+IDLQz}wrP-PHyC|ڊn1R9vQ13 wn)Xړܣ1US>O^phZx onPVXeX_d+n'?&e)}N|itSs,(-i;uGc*$E%!XDZ ܯ2Y M9cLuRcBKġ zxhA%°y?v=A!|>xhJ!c-_P> -p &+"BڇhO` 6` :iQ&"޷B6Z;uIYZ1[zh|BrαoHJBD>"z{{;:p׭BօĤ%r҂2)&椵嘬Q6CkGHR(1R$] ]|`kjAݳ6M)DF>)iz=R4 ABJajmYT #HJRHgA)X%w qDTq*"FN:))TVRPo888pcT5*aژRuզ(MR H )mۦ(z^41,svvv!}Js3$%;X&ʘXTY T18N_XBi4pǽ8ϵ{J9 ϋ+KJN0?8= +@'guesg e53D5uY䖙kqYgg 6` 876^tqY SswM"ʖ BbȜr5cȐRe,F`I -PbBLcz1" 5' 2$U4un*Ov !IǥZk#N㔒"at9ĔDڴp1d"$"BhT]w ?HYy LեdQ./r.B! ոM)1|Q(w9"{)bJJi͗8LsNkin<1D1SYo;%B -0KLQJMZWY[hmmU[jC"fNun3ǘw sX4 3 ),3?i+r8%0(qH8p^&ə86ib!UfJI(WU%֖j-'GJcu޷ !E9RM튢R;wZk-"ġ#* )%4.9@d7R61Ƣ1QJ ┤Z%82 <ݨf{b۞Ɵ+pcb>N?6:KuUﮥ.Y: GeWH$N AD]̋O+y٫pWZUIe)+itќu! /gٍ;#:QrxeSYE}&0llDg `{k;. D[G^/T1 xn)D߶#%,KA*GQkȆF1NB䬨@RJR19ImBdF<'2j4Lp2ӑ)"zBnm[s6 IDATALD hV >eh^vRJcYjɑO22VeN&礝 @1e bdnx+m!+j&ZUuw{#+_"iتE ӧ;ݻc6خU $_o)uUyjDLeG b4ؤ3_XCR3P9־*N}E%Mu Y!"s18L[k kxEe 6`/fg ɱ:LHR)%C!3{PZf3J3sBS ŶBDSآ0tM\ H܅TBL( )%$14s Y̓94ZaANꗓn ( q8Ep QHIRLpd('4>%(*Զ9\1Z4ƘslI2Ik֚i휃%9gƭwIqz^{]L)1'"IS] 9r|}eYz ΃,T\XZA`|*Y E8wȬfM^VēWXgb q+{N|]l4\nrKɫ{EjdTm_療Z_Xvyag%g:]WCw)o+Zwawvvsl<1` ~ OA.BLyd{8+ u$#bњnƑVƘS0% <*@De4hCRJD]LnJ1B2T )eض1&)rOl9VB@.AlWB @O)`eRZk-$ЊHBXxq}…cT!P) μC[ɟ1D"캮YS)^9Pq]7/RmIJ7Hc11pJi<;犢H)u>_ůRs`/W&<'b",ɈyʒKb+g<)KZ$&ukK`18MWrR:f^2C7TX5tgoN`9u>k7%m+` 6`lYyc>j=޾rI# B-GN@"Yy4la$PPjA߾{V=ckծ֪>w{ν]YڧVլYfժc|CvWNDw+1!kQXDp)H͡RJ֚ED s!*2GG,{"m>Ԁhdg7p1FYIJ@DH@A&NI$D%zQ ֺ,ˤL%>0kU`V!#Zh-imK<{i\Od6jA:J bS{cb8::D4ϭXDԚLF#ĵDXRWU8z9gi"^NZJsPWUet1?bӉ;>>l̼۟eRhlǹ3/bOvNG=;өi)n\ȃvcmoR<\):vg{Zt5܄{+U]gO>雜sEB~O 0`;s!ɢFDfip-cd`!IU-clhꀈZ;;7M3!r"@7$$u.ƨTNF G%$arKsQ3*I4j TycL ScLY1F@5v%QUU{rc(s1$%ZePye1ir1~-"<[I954_,KZk1v6_ʞfUU)Zeɲ>ExBqu5M+hS$( ymᛅu\A`7r]N ^Ss[M՞s vXsaޫ*庡:OGa@MxD"B{HdbׇR}m^ADG8)"Vv{ȠzQ!@A@ ZОJu#Eep-}:'؉B@Ad%%\zVڧ.O~R:O3h繡yGn@x swdy>)cN%Wc-4S:,_l~Tdn#/E;"Q=h]oijxp\!<+DRR@CQXԍ&|Cbjd;ヒN".&)F2̘/HXf]ŏ3GH*qEnٻ.R*ffJ+3Pֺ,B9H')4|BHA4 HPԾ֢&, @ }1R)fs6/<_,kkm1ʐ#"FjY)Pژ<)r*$" !,wMa4>Q >w":x,˽fE4˪L@Al%~=z$R##YMPbDL䎵6,$D !0U[\ ^ߜs%p}^Xrl&5Lە_ \[AY b]ɶ*-㻱Kyi/?Y nr婟 +v_E]Yu>Du}7|>LONN~Mx<;;F:^T#qvl|1'oqOamxC*+r~TTM.RI=Cl_04;\9ҧكl!UFTt=6`DEH(Ve W Zd pMR9ȹ Iu?6ySbBbNPQ SۈP+(;f ӕs33ΕRUUhuڑbDI:6e5:f (lNYfXBLSCDιt^z۷oe|:88g?{^ ~Vi{0.:4H3s]eYVGj:S8\ҹӢ78S vUmDsƨGtXq^'^wE&“ӣ˾6'|2ӳGsޣ:+;V5SYyTOo?צ? kפՒaLr09!s#X2V)DH ;S@h41Ctŀx^0ܤ)-!l&3d+s@)G^kĐF"'J)N2AE&IcC(!HrDZDJ"\$41ѹ{WRʻUks8juHbfVJue ݺu]4eYݹsg>?5FDM=JٔEy*Q;wҔx~a~{xl//*͝zyN 4|],ϲ;SƇ@sKwDf xpC)tNRdc5X^(yL&" 6`w{֍@ Z<50W7󂞈tAHBH:9JqaYiCAheЅ*dWJD$LJK@S\!b̠F11,klQ!kVZH!CZwH!FFijr\zӄ/"VUEDXiVJ)kͺy8DVB,Jr/g|>plyz80Z/ꪮ]888..s0WM5YPXe}0~i$lɭsh\=s*P'OT5< K{罧''9m/L5N#U0ȞxfnZk qJو@@F R@s#x^$41*X'nmv-ؖhHN_D!M QgJC`6DцPsRJrY]ԒdIgIDDD. 싢(18$GY@A !$E9)Hk1$"oBDmD1 `B 53jRbj&-)%"YcESJyeY 8Ȃxxx8sch<ȣH)S'!d2-|<˳AωH>Ƙt]M]6 Q\+_xaF|=_-y]:/n5jxa,˜s{H8]-ok;J%X3Y}CZDbv6ѷig4v%Cghrc<==L&C>,֋>O:qEQ,[n-rb___3/G>o~.'~&/}ӗKSҏ?9l&o?|T=?7WKO{{xv 8kx_?w#?#ڽ,ЀDB%A e}o4Qϻ-t ƀw creE"(LfHх jbdDLR ! "xMfp1V=ݕQ)"ZbDAc19*Y&޿s./J, Dc:Q (Fp.X8Rs.,KcLZs>t~yUo Eј >|x]f~7Kd6j3@G4% |<:6I$2t]}ovoE`=}ҽ5W]ճU%1#^η2V5k# !#D<2 rDBadA@FT"#O9ǐe8$M$(3&"6'BDutBȲ}{_p^D|7x: /6+LnEM*7ZQv6_)cn8\ͧ9lEv\u&gw6-U1#aZh?~"}vQC2he#g,"pAW-{[Cw=l-x%<}{A YWv=#]6KV 3i^rT]I9UJI$mf*A3x"^dC'Z$+>Ͼ |mK>}~}??~쳟~4՜/ݷ|Wޟߩ÷Ӭd# OރT56]|e/lYw0Ȏ" n˻/dOsOw&ԸXZ$!kMdhU"LU"R,pc)rl&5L)n)5?EiH '$5$勤ڜ|9j&FAӤ.Apm0& 94rfY\DxMݿ"qga\ g=J'v1 !gH1vzQD!I@Z@:rZAݧ ZM6«l)"2D:J̽>2H dɴuckhNNh SAjUK{[gY__gNu{/Ώc}~8Y1DEGVٛk]^d\WF# HneXM1A5Dmq|]dYu,ƆuޘL)˲,v1##k+Q72f^286ZQ1Dx4!TP9o3*9h Cª*n {@6sMO<9LDJN|1*&Q\# GM݌ǧYcP"h%>1tl؈}(GQzyg̼<xC~o imnnph]bٮ%tMY=ŞؿyyX[ q̥'=yN$!8 Wsbg(Y,!$<ާ<ۉ6NH:I:NNNDžNt>vQ39'&{R`$~_?S>ȖoՇu%r~:y~'W?# WV=C 0戜d*'19kbă(t51`x5nǐ]^X;rq+Z+" b"׺ "0) U%@Dju|MJ II#%ЊD020֚9"Jn%'|sJnRZIe!1 >?y>;߹u轿sZ;͓cQ16 ƖIdaJzb,4Mxb g>'"{^"{}ӟNѨ,,ˈhX$kZma)|1w^o+ lT;_K>S]Swa4=53iB9ϊrny>a3tO;OҍRJe]~\\"0+hqkѽIY$ ԳX]9Bzco53Z)eWY̜ez>J"X,>O(OdGR$ZG6Σ Ifg՝7TY._O=_JWc^?C׽txvr"/*b>u hjWWPʀpAD Ex1`DzBրv'╥ 0` 3*ml<h5С?`k1^)̀D)1  @DF҆v-&"hD$e2{ f`k}=B\tx("~$@Z$M?1nϑhEC%Q#@hSǬ}UBd!^ܿ_/Brۙ)J+V*l71M8$x O<0͖}s",fiDAګᶞ{ `y .->8}lh'WiO_zX<_G巷n ?7Ιj/ 葵,K/tx:[|߽ B{'$kɝNI$Hg&>"\xBWԞ#l))sn2$a'kmYwY,lVbںHysO< Ѽӿ&fO|s[w^/Tn8|X}Ճ>&?}⠎%Yt&6M}%z,3lMo|?:` &B`j1Jw hhȸ I250`ۉ`rpRjhvAJ:ҥ)R "$"*i "&$"jFfAY1@FDRyEpD0ƴ-P+i5!3v*RZYcb!1Ӟf K!"{T$֍1e7F:AYUIN0j!f*3!erc[nJDFѲj"ˎxҸprr\TjaNON'G٢eML&ca2i,RҀ.?u]KuByu祯;f{ó?kO6pۢ {\ h Z[m,w_vz!|7$C?JDؠ6vz9uvrRZ+8 ^aݧ[z]ŎhJS#imTU~d2Y,)vzF֘eYY+_ewWhaW B[cu?}R19vyQoGQX.n[kиq6^dk%$ ř^Y(92 [́GvE,!q pU xH"+yoL­:HA+yLO$ xEDiEZ1H92s!JAPJt brX=]Q*aI&0sW Dt.0sX`r!EP$*J!3SG&R0+MS.2o;9y>sN;yCRD*s("J)DF0믿>R^³3"}|| 8Ne5sMfo  ;~\z[GCl~XsiyL;[\kԃOYͪ\\f]i!)׽@}7S\nd>D!v8p+.-$asާ6Lp=1UUMBz%5͑^~JV̾n4Aś<PTّIT1q$|>مfrpM5Y屼;=c)OQTBqZ33r4 uw FM( (& ˀ<()&NPDlo丿ë[x E; 0`A;`.ڕ#V׊tM )G:zi%) 8ԂZ"!D2a!DZx[}ݰ_؊I(DDؗ'Tjth,['8ep"ۇ\FzEQ5"~LSi$\䜳"bRQ|\&j#Z#Ɲx6d\)"3fAX*~6 ݹ G9= wm^9/O⼙ƪr墲1˥tHD#">|0&%eo>\+Ec\-N'ݘ ~K6l\8] 55ڝM!P=[v"[k$zI4Wb"B݀ )!]>FsX[377B0օ~W[+u &{!0վ#脡Vϗsq fdUe"B$Wg1:ɕR11&-h"|k."G@A&\FtfrM@p0X KR(*С0B@ (#mŽjԸ9y̔WlI8zHxC՗ `L {2D, Dӣ5{01ϻQ<3% D+y gAILYŨV:(Fr^H"̑L@ċ")僋lc!cB`x E!Q(,BLc90wRLl$Ҩu )UPƣCBY(ΦêO,^y.G#cOGc47!2s-"1@5iJV!tu(P anQ`zy5Cc֗}Ym'輍/݇xPɃ i5 n N[qs(Ɩ)#`@MI]6UED$BF@I֣}R@Ji&`dB(("]KPD\Z5:0D6YQ1p 3#e;Q1j^clDhzoq} ܨ~]9^=HQ Gg3ʞf6њ",M ߼ժs~ctȹ^ɶWxM(hak.,wt!};gJ/A#qk>'j/;ƱVkSK lAnָfv9 2<_0! Dҁ~?gZd!+4hV)&#B \(+hëp!J[1j]$8Hbmδ%`X"AEV HGTD "#@dZ B>+EC)pŀhРRZ)wދRj|1s骮aQdsQGH."hEEbwZ"H/Q)eIYh4b1ƪ,;<<,ݻ"ʲLtFeđ|a~v+にr#ʍ?M =l4_CO{:/e*Ȟ]W2nn/@G;o"q\Q¦]ݖp.[% r.ڭmQԶSFҭayݮSD KRtU:s^T  @,{'ȯU5=Y% 5\XY=z&M]J>b{vj!ϻ!<Hʁ}tZϣTRx 'BPp$ ( N"q5GAP+c ;GDyum !qp4"VR:ɦ(EQ<~x2~w?;L1EQXղi8ˍ1fED)Z{UԤ@kmJ%4FQΖ(btzxx#eyt];kx<.r\Zk"@R6>%[!pq#7ib/%&[>]e[-]UndNh["cWێVrMc[=?K\Nb*ۻtW(pNj\|4@a{\ҋgDzMmϠ\EȐT`qTyV((x`>T(QPv]y[fx.1&yU5'''L9e $o8A8s*.3=qE~dk vw~S|.]wnQTշ|W)wt} "˰MI\lb;+ǵH]3  xq L@єxWs!AUJ [D5 /*^gNtw[ x -ʧd+ɊN!*u]_Ӏ:QfVHD,1M XBU@ DLhE02U+)F-c"","""T@Q㳳H?~|):˲65֊ɢJ5<1` 1sI$|"SNOOLYc\+b>"jBu]|<,CXDYQ9k^µnu[t*ٸ=.zEF_&oݕ~@^8_ĝ߃`wV6*N =5')xǞ]v*sݰ+z;De{}$AaNRO 0P cpБk3A )!DQaU|6 P#(@C1bx3Tp$#On/*`vkrvNJKj$*h\ k;F@?df@ Ҁ2arBTu]3{RPP$kBKDb k Z)e!Ħi8RNUUe5OSD%a<{oH+O1f@u@)30`\ֵ =zGwnuc$4u;ς ֋L],M92X9H"]ߍboWy1Wz(=$O\%^EˊK POMQUU͏ !#\1^FePUSi?VA.w;7OeEP.,E\)ݶ?{vto&缃V\zv|Z=vJU}?߇oB@(}VwQ )y;WD3"*|*NM!cL: #(k"$> 08KQ8'ɛn=ʽn 3@\H# @\0ѴֈqƁt2SU"S M ؈QcDcbKQ,֤ $(!7ʉR*0Ld>DuhFeVVP\R p%qfqFf2_&cgۍ\@f +oƀw deЉD(_[3 6D!Z/ C4=ZXv oI;EcɲP %5`a GFBE 1f1f™fF$ ^G|0 >VRDJ#peDQѣ@ΓkPDVҢhe2Db]q4R.X= "w8'ClAX IDAT,V]D,Kc`NY}B6k*׌#e2YY~ {UV7*X.)A,)dI.u]@YY50gA֧qY.iŃ "CVi ׍m~xڑ""pӕt=uܾg26ݮT};}"Em<;Zzgn+h|syumEO͈\.G/FEE?0慳&p6(ڳ!B264!fh$Mt||T K&-jK^7|8vbpVNa@79ADV6+U*jxeCg=cA%tkƾAqbG*?g׃À;Ў'_˸89܎D,>yΖ!"pu"j#Ir0 bLiWDEIc +I(L !Gh\eH!cfA(LG蜋QbDUUUtι,Vg6trr2O2\NCJ9FA$a@Z.WvL2fyyr||z:i`ڄ%40Lq}ǏR٬( \KHί~x:WmR !G- CN6=Ewo1nx[u?uDisq>)]zҼ59VӟN)Yٷ^ B2UFk]Ucsn<{Ewڜj_F$:0 9.! |Mk մ/IbBq h3j(, S&=R7[k^z((>::b㽟N,^WUU)ZUi$ ιE/! A8BNuͰ]жO2 m;sz :+tʳj9-wlIwbsSm'Zy߼wvSdu"HVoAo-Y3 j WK֟&DZ,Ɔw֦d2&β7o~19W珜s''' BxRj]:}ojQ?_Rqn(IiE4JE+\mE+1Gh=)T9v0'DWG/a/=Qhx:Rޥ(uLe/ޛ:<<}xooO ntyZ'I"iF h4 yGQ佷z? <rk|{cAT.Ee;qǗnCYe^YE˽3c{#"JpU b5 rkN Y7JNYލ \w;8`rky W5~ Fxpό2<_4WRR9XkC~eQexڵW7ozu]XJ(z^qu]]ǽ"'OL?[}@eNc!֑ LR Neܘ$@Uy;7hx\ץUQ3#ut2v9X1YfJ*qlQ{ G$*թjUᩉIP%I5c+pe|+RKQI]-C,TAm.?#СC]쑅Qa\\J.ns9{Dd cҁBX&,< krJ)8(\ #ٵvD`L t!$IbH)E]?OJDuއ9f>g\UUEq0`k k:y~R7nG9DQTepiL"J&Ir;>D+8Jttֹ*;K6R+x167wG휫yMZي3Ϥ6߹QҼ#K҈F)DεwKZ" \B6esy .3m甌EsjU/:Eit:-,K.y~rrMM'''ш&Iʡc]U"EKsC][?o|tG}|3z`+=ezZ0)jkiI8V/|7:>WuA~''fYHr]V0)E_)bIYd8ʾqlĎY|{ʊj?-LKe>ӔƤ*Ib6+>:tСS++J(߸Dwlq^X ""TV2da̼ݒC@}X!P,ȈJW}D$ DzT&2A18a\MY ކd̀2u}e=Lw1VClW5)fh9KD="ADTӐ5˲(c$Ã7ogYM 8㩵6MS"eYAU~Gt: 645Mb@#lw hc(qT9spqж;`s@D.$& mnMrkə88[cp̷]{qʋ F;ڥ6~ShD\>yY86nlʀEQ TE>s?կ~ux {gfO􃃃<ϫZ'I- w۾w7/{ޞh:R{0e S\!Jw-pszŭG?o{ݏ~ Q_Q8`Iq)/yei  4MY࠮3>I(,NY/˲Ke~OWWnɳ#9.؝/N:ep|7[:;;\V-gVnB)~ʻr;ض ֈ@ppK -~\S͇vH|'al6?0y{(^W5FEi1~fl^?q_~ڳ_/г>}_/k_F/i%W}}k^mG]I?77"u%8)u3|e<_CW7_t5ʟ{_K}{'^KeϽӷ?_޴ ^9~"wmd[/HX1]X-Ws"Y[bTM9.-'1tm;;[%׏3ԒbSEih:5wi|Dfכucq"~IO]Q66T?'#ӌMǠ9DX{GqeT|D H<4(z׻dXUUZ7B}$΋I_0+&0=?/|dU~<#Yo޷ S_? ?ڇ[ooygIQOLz} llH= ?;W}gĿҞ{_?|?F?|ӟ}џ~÷~Mդ!sG02{P%DpSo @H9_x [`H*E@ 6y`bafC1ڊ)V)\iÐD!i/"8{h=#"0,˜8M̵ۢa X(= 8/ b#eyYW\;qH!K%TcHDdt$E1'U4c[Cc]R9xN6@T|PeI NAtub|O~/s ~ŻAl#Ɍ\ Il~F[ʛg2핷_]-hf.-Ξm]r׹KxX{g_KջopˍcX]ً2?zWz:{~~'&|}=/x(S={KӪi\\9zۛU="{+xGٜ~gutBӡCᢦ|[LжL;(#e|Goi?AC+zxxOJaOZSn'jRɕ{\8LǥGr邌vСu'gs^u1"" 8&fDHgN%aNK8f!B@J"`vDJgf"&RZENDMlJ {@DQDD)m  @s(Bj2su+3 ubBD"%<# f|-U ցcKF{??|tc{?TuUHW"jUTp_˓{h S>/襯ˢ?C$UD}GޡC.v^6Eݸj؋E%H \P03Xa"eD(xz7J x!RBBqLyBFDDUmb!R>)UOKR^EQU`g&IXYZe9DkzƘ7w2)(k\rPk];L@@ׄbEJ)mla˺0e$Inx|1&su]ۓ~ gf IU`n˂]Nv4q8sC&ɾ_|l< \;|A!Ewf_B_{y֡M 0|m.NPַ,m oNu]8;w?߈3ٸ :k߶p!OW?揽8?yʗ|3 #[)Ej>vYT7ꝼRB2L0_?}E EVa,^B5xqmO_׿d8z_'{G?'F1“򓣋:tСCU 'l+yf "P@A(€2H"(!K,BT"D faGhnvnS+cw3rP4GYsup-1,2q3I4MR" YDC|;UH)ecf`AՆ⼯$ "NqE>`zk?ZȎm3+ZlbX\ӎ5wGcͪ6IkR 3[xK=:M/Ԑ|l;ܯ`0p4ؐ{̞m]d'iVyݕ&z-Mibw!5cڊGo"-MQ__~[;FW| <8QCI_~u;rψMk բf IDATy˾Nr_Q7s{4 G'7\"BUꙟ' ^o| go䁇JP$=>0{qY:t|m [Klj|WiuQIy{ft`)uҡCOW4@yMi\Ԅy_lĭ`{/Ł(`8D !D 8qx$$g"*DAo=_akk,@)5i"ι$1DcL H( $˜CAB bv"I$t ($޳N`zpZk-e'''ιpXUuPpu 3 p$4Ooߺ鱑._ᄀnq7c:FV%g0#4 usLVbpn0hOrfwgg]Kgw*oD`[ǷZ^4X ǽXŭW|~g1g G&ȋ!r};> b{;^t:*W\$ii|οzkh~oc}hrS_/1I'++d ux#?L3FGv4-^?8]{cQW׫gډNq@+NP1 tRcR]Nv2MUq2UӞtYT:t bMn:|8,"MU-(KB @"f99B@rȀ 9_ь! 3(AXk]ZODUUHűIb]eQG*ޏ(8%xTm(EQeAA¬uDij0"j""L!Q6*O¥cRJtJqYFJ(+_zXz/."V2DZ71.\nӬ=uK/mnzmMutint}[b6дo67hfi!nbm ٬| >&ayl/ͬ(a ʈ "x;[hfO?:H H"sgE$\X8y䑺8.R^l(6 C6)㴂 #8cښ6{XT)zuO2{v&Wѓ<a :<y Oi+9[` a ,_d6Ć^!9\8,2wceL]פL [2q5x0A#dLNP"b#PDij!C,Kёsu8R!V)H,|YxHRTW._:yWef}"v EUUJq =V"脼C`@$@t+<_;k&R\ *u9d QDTUEVU}W3"ܸ~+dF"bm=!i]GQd/n\xf-@W6ǥfmug8wb:ކv^LwwKav;vw.r"<3+탹l1Ü>-XsE\"Ҧ";kgsz׻m4 fβ,KfNd4%I|f_:tXz&FV/ EߣXQY a;~RݡC>6MA,3L9!" ">80!N_Ed6 Sr)D@yR⽗9LEDH"icVQkmqZ|2e4Mg4N1HHDXHad\۩n4 N5r\ޓ;:taG_x4if 1Pes6ͣ,ȨPJETl g 2ќ23wΙk9Xʕe=LsK <MFޞQZ*R)e8M"P5 ˱D{$+aTj0F;"y@p`Y"U]J@3:Jj{j1YTY+nJld1y9wq8o_jvxܾ<3+seAxnB2#6ruE9KM7hq9 F^VZv](fɖw@ "-7:P{_u;ot:!Q]!~td(5V({ˍ+?zSrc}A:|W'-687~GޡC>lqoH%DG3iԈ"B:sODPiUiDDR^{f#A0CNDtg4xǓ*/kuޠuTUEz:gYZբH{omD QRJ93A/-A߲ CsPz(@UDQRzﭭᆵveqTinV,{6XYmkAh9` Ō, JҖ~7•,o:Jrnh9Nd `%pkIvoZZgc$;b@Sz65ҁ.*K/K3SNs8g4:˲ڬZ#ܵJӴ,(ڬСý BA뫣;~O;7}Ǧv\b xt18:tСù\[)gf=)pΥi:NC(sAǡz"(^Ŕ{LA<1q2H!8)(J)Ev,"luVJqVD$MS<4q΋ў ^]QEQT4(,  dfy2z'ZkQegkK"!d2 JUʓ$)Z;NEdgtX\2~ŷn mI!DZ>5qmpQ͎:3';m:94DvlTr[rۮ-pîs8cs9ǹޭ4+b(ĵcPgYd?DiFqهqSJH/NѡÓ[C:㵳va_'1yzOdx]":t0AsMqa^x["bp`fc̣B(8P[q u߁BH&A^H!6z}8KD96o(QR^1ՈhAMc=+˒zt:N&+WB!(P1)XcBQ)EDJR xuR4"! إ,$Ie̒$IH=>0[Fy>ZËV읐r&֍wh2XmVFp~ ]9ܪZAikǷoq@g屭J_1F5j5Nٔx"XR~$D|cZDa+rg+rϻ$VyGé "!Ί49BSD$l0"o$tx ?IBض u_kmHXC*\f zLʬ i.$wPU?CСC0#"6fu g< *  iZ_Wgڤ ja aSkE9"BF9#mRBF,x<(Da E@ѳH)fgH , R${I\:*V 8磑ZQ*X؊qdx4b1-Dz}_ 2ϢD{ J="y@E D)%"(GZEl?,@=H!XDJHy$I b4 q,ޏF4,"[`BP&[(OƦyBxvov֢JK?c#B(ػhrYqZlwСC:txL4 |v)rƄsaQc؁Q{)I윽D=sFdM)AD |X+Z_(M佈#"3jHUT὏D麮MNy4uJ)5u3FW 03{EDFk-Q"BBT쁙wȃU2NӴ7$1Ƅ &8J`0:z(\a)"]x6!hBhX"[xjdHΝ&v{ScYt*j,u>þ% MI {ϙ]vw}7%Ϫ#.9/ve4#jͿ  H<K V4~W-gѡC:tyI5\u DB| xKa8@QE 2DPY]HBHT ":βse4duq,fDu]{1d`eY:WQZ[Uiz1G5NS ";BZxCXR:Bk" :[LJ(DͫʺJ(2\đe1f2)̬uB.X Ǻ-Ӽ޿(dbp_;q1io-fy]Ύ}pB YavG+Fe27*g0Լ r,x[ ܍~l H˅`f6џ[xKDm `1,ϽLԡC:tIuلp} ќZ#6l"@ z@`f2 pB$@e $"@4gZulY!RJ'" d~#*cR*23eGfI28&"B H@IZgqUCEP+"DZG5$4tҭ[.]4af (f.B)EQY$Wbe y4{OJS!F;bq6)m˷+7FʙN s*5b@l It.fioY,vVYac7hnZgQhEDs1ϙn2$!18d~.+r:tСC:wImh]Fh3aPD!8_XkY*QYP }5 x ""!eriFVJ;QiZRGQ$HYҙMXD{q¸?F,%!  bF`AMȕQɘ((`UU!k yd뺎x2 ׯ_ߟL&$Md(A(索 um18 b9)@>aKk s!仓u9oMx# Ư[*Ԍ$϶׿nTj(~H>rTtoYt6v 5V:tСC8swum\s F#PiNJ=3"zb*d=HDѱ#fdOD$Z;@DD3c\em4MDh\9b. IDATM㸇֞ei"E}O:Z0afUUX[W%uQ!PU^Zk"A/UFBbѸ@L`#DPH9s.J)LGXIn"Tds$FA,^(A#x$!2>/5IP$N'I፛4lkkk(3Y"lL$ҼUyxp  Xd@)Dc`n\kDmGT%A)?pekcFY]~}0x'Ƙ,\Re놈(Iް*)"nᥲo\ ]qZH:. 14c}[l|*;\wȉuL2W9D.ڡʛ]W]ZvRlgݻ$QBQHI sl -R-lOߦP0H׃A金=xxAT{oId:GJ+zW'G~ /F$}ϹO~@?lb (^^](\Uh@5 fv j ӡ̒&)Duދ|C=89i(v>C>"I,Lbi)HkReykTp*q̢(E[/ֲsF:#A$Dދ($D\( )axEQ8ʲ4(r`ȴZ1d2Ͳd,mYUuYQ)=gIiaNj74ADڵp۫ꡇzz^]4DQt}ݼy,(v&MSkRiKr2;5 K LAǺ,yrm0qElV[Gu|vJZYyn DlL}{K׻`"ic8x+W/}ޖiUUq;ٴrfm4_P/S*ېDytiHMXn DG÷>Ya4>>UfF{om[R ~Cp7I) BM@@RX*c-Zե].YeXZM(h)Nͨ@H(C;a9{{˗{N|^wΟʝwy{g_JCJG _mJ JlEe6CsZx a TIGi^!œ`-ZxaftYDyxXM:݁GU ADݒ(l{ *t]PAUUι``6L@Er8 b# ^&t Fu*Iyf,Z y08D<&Y A9-Nw(c\$KɓxtBPffn8 7]{LU8+D"(Q Ȉ!D$B }ln̼\,mnn9s=h4nA4{{{f4۽9BsN%x8w6qޱ9.qh4q]R呦3B.&|9y 5 ʼnCȴ%Ϳ {J3eF:ײ.|/ɞ+27)>ƘO0 =};2|h9a1{nlL|1d,+ȯ*N2J]s7E4ƌ|6ܭ0O:LƘ]sA4BFTJvk "(Qy;k4E-Z_XSBYnaHUh- OTcTAQCb1&D8ƒZ r$ xD  ь;uy'( @d@S\*JF@TAPbfODiFn8SU]pZV,OCDtŰ&<* c7B@cV+ @R $X,!"5d<4-KBFYGe%I2,#@{{{~UU[[[N`PU$֓LXS0q6ᰬ~Ke4 մFu1/_*fvgZXxɽ.Y'3:r8d M_/r d fmf hQι혡(hwI0,WWs1eZDԹɊхÝѡr;w{͑|?'_w~moǟv~MۛaI@(pmhgept`4\ gvP9U qiOOCЗ=4'x &V˽򲭤Pq@Ȋ\-ְ@l p0Y7(EN%8Zh;rrH^"B4f[DDBAQc,˲,+Dd%"BȤ@{"2  z7BDRM MB(A0hTDpBJ!h^TyqXĠA`Wkmdjk&q$IQy5 !AIP!nc(hYM,GDn{Mf>w\4LPQEQt:yH#1/.3\~ 7ސ3# Pf/sՓ;S<[Y Zgn\F@5C3b"1^u0Vb&g sц!DhȚA[X.cC1q~8bsh&Οr;~!5j%O:(G殏/}Uڗ|R`|_𣮹nӞz7o~o>]U{#;޽d?릯Mwޟ=xz8J1*`-_rZhѢⰸK#G3="G:# Q>DZEY9M-@QET*( zBl@QUPbF 0zDCdI WTTs.`MgIP_UɲV0%I}{Sq7ȷt}~?wcΧn~ؾ:?gOMwS_o/=./EÔ-Ҩ$)+Ac#0D+eq>M(-Uݱ-Zhq% Ia䂦iiPUU\ollDT$gYvn{DTIC1EA@ ($ZUԲUP$Lԉ JݠH4f 9'TI8 yN>9/]wݕe@Vkm9UndL ("F}w:t;;; |ppnDܹs1v 31%gϟk-*tȀ ))/%>ЫAR,KD!sIT\X6O,cnw J8{ X2W+Ȕzιhy_>?w3 wk,g仾K=9;~K;l_>t/\~n|mOa]]{,Ώ߶}?~f6JN\s3w}tЧ}W(ܾϝ͏~ҽOo;ozսUQV Jȗ&eJ4l* (jɂ%X}L[hAK1o00hfu. @ @BWQăʲUU Uen_ADBUUl2@""o jd ^DdP_Um^%pBY'- =c,lQT""h0D1X3(D*IHQPEZ(F!Tk)b0@g 2ι Uyfݍιh)e~U$ $O kݤ۵5K~Ƽs cif6D&]W#c~V| @D4/~Cߴ쬲Ssfuvӧi.th'HMHd@-:,~817^uCk rͶ4T8޹ $xyƒU2s O'_|GrjWv}/;N}hMepE-u ;{6qlN擼])9_x:9ic+{6$euǮ>l&W_hFEm1Lzܦh#LƦM4uQ ENT,,:Fw,OpXv8FzWn;Ɛsbɉ0k iq ˑ;Ø [Rw2IK%KԡH%@􈳷y%HxX0bsxufYѫ#>^txY1c?F9$/b1yXbեN> u꟨#Vf sWUhM_7my̗彼b)/p|8df3=z>Uo3n_!wv;e{?OoܰcDTbmk~yvƏ 3zbz!,?0-ZuG JM{*0I jI9sQa#/(0@f`9,]烘13YcIUDsAUHzU4lУ*J j 0$·pXh#Yӕ2Mӽ4M;~4?9ox%2IbbeYFw,(^NC&C1/F*뛮\\cAJK@{I&RUe%²,ұ4Yf(2meS:k^ǚljhׅ5 O5txVä~$%$;"AkO~O7֣٧< ΏbxO)YvrdH2LPqvw66Nn;ퟖ㿺 )Љo>FgeYeYQQDi! C!8= `˺?qu❪Ġi&j`8'NX6!wtO L٭ CH hW:qr֊E-,kEQRզue4iv5T<-;Y%x!>byBVuF~#0Y^rB@N'"FNĉ@T4^Cݔ0"ʞ038W8XQRU3k( 1F@FG9* ȀʤPPyρ@&bhn[t'St4Mcz^Y'N8w`0GQ^Ο?vݮࠪ5hS[Y6,Pg)s'_N'`qǶdJKcz,s)0q>:=屌]?W=VUǫg}G %?bͧNUÌEypR/**LUO[U//w[ N3}J=;>~tˑ>$':6?[q:u~_QKnA?OXll^g]ӿ'`@_2-Ij2aY!^!R[`3>?0с,xHC)AB2+x9tQ~` W0({4]PtTLQq7i-Z<q~]~5RÈhacȘ: G! 3"6S] IDATw@T),<1u{aP!xZPtA婸"D E :ͪ $IBuࢽ%D B T(2TUP6EDLP}UeeeBuhlJ"3"Ip& xJpkH  b`Er.T.Y "\ԕs$>TF{Ed4'NF## !mU1ll"DА8j!"Fli3lr oK<QTȒgaVKԗ^/zvQ3] bfA4ӧl}H6OfY1 '.@]euhk!8tpysQX8Y8:!~~{'6'mr ˪#^fT 61$6=v.ލ9R&Mԏ,%9?r9ް[cI9ƕ-ɓ|| wn<``( x_UpUk` QH-[̧mUt4^}x 4#{LJ `5-ѢEs,\auাJj_Fb\NnmXfNT%Z|mI7႟t&FE1z4MUu4*AU&N't:ywN't:yy6Ik-q"@ec&Ȍ⪲9W1S QeDl($DFdU1"N8SOq\a$DEH*r2ܬ3|r("ưvmoo8p<Q( XNy[={a<0_-<:|E3XallŇ+?^ظz;ILa [,KkS(2FI3 ǻ hn)kndI% e˜ygGOuPUU$(2k1&f?EarP` _H[H}⊬ v"USC+wij7 ^\w4U'rodf>օ^1^v o0q8<8&'l!%oXV8YZghpF$;.a vn79"E!MSV#JD(K_o{;υ&[~]7|>깷|5BR(e@FnU+ v@tzx-ZhFsb8QxvLdI?(* h✋&Q!LTGWLcc&KB9AYTm}x-B"A$$w;Y P7z,gI r*h%2֦)R$H +!` B@QIIh6EYay9"CEQTU%"NP`oo/˲xCnllTUyT8|Q;isG^S`ufy3Lؖ2`9L6o|fO?{|?36_?xSܳu{%9ѻyO=zFZS -u뵟N5I [C Gq%+koF*,7z@}kd%6LdTE<3jX[&ѨBL$S ո$9Ϻpqŕr^4`$Dh51Lj$ɮ!V Jc6&fs+02CsbtQWDHQH@ " HB*"+BffN<3dhΞ=; 'OV4j{ksUιN'sE\" ӐnyYlp:M.V>^ L%tD[#t޲h/}?P̤rӏKbuj;]$Nܢ^-q~\>;5+ޢ@tw_v+?]P҈Y|wmowxſq_k!7}%'o_;ow=o_o~~餜i~r ZhѢ WMq _D$"b]yppPg, ğwdꮃR*Bd$P)@=tđi:7Z~Js(203E1PC*"3+2" @ԝ'B UBhKh 0HB  /OșL?B53z0 !eYVUn7Ib\ywv}!H!ɯ j pnXa)mWk7Y^- ' 1 ǪgpM=ޯ<246awq.5/CL7VjE+\5Zx-[\5+?ƸpJWle[h `{_E}ۭܜ}ouK^~<6Iwóe'}-o-%zg3iW|ktn/ks=x_?𖏾_[c{nsFؖhѢE0kec# uBLLpx˲< x\0y>qQ\VDCǴ'QBM,&f5j"CdBtO0*p8EWer4*QI6 Bk,ˢ7 &IxLdpN5 bv2EFA8m4 L !qޕQ25:[ ,z^vN'ވSQvӴ'\E˔ffOAZl~Cus\Ce*Qk[ P8BquqN9G ,.Ƚkj{cZk+s+uQ5qd΅veWkw ~t&!hcoyuowE_y{{ O\yrxoOe?m?-_yuJڢEQFIMÓ&K֊л2IN"*I#PtQ1 ױХ67b&UŠ@ هV&!Шa#EBD@bfDK [@ ,2JL[l Aq*pr8%dBL&LD"" *DȦ W!((E؅USQޕ988E "4iz7Q (MHj} =wc#=X&d>ȳ :2X 踄ȥz\:Se^âզ;ݣYB7ge/K10?vZ\J?ɏ4iYqEf5OJI3^*Iؘ9Rڪ_%3n,Zh7xKp7Wn yq׋9 GLٻ7\s]}<FPqy=;|5w|}~Q/넍{uY Br`S?[_5`ZhѢ} ɰ!CzɆDCUѣDfeY2QbaRʲ4lMbũfmU- 032M 栉9bEըfP Վ2(zQ d T D}Sc|@dOq81"EX"E7џx1D(LN0D "dfT(" HTGQtJD}oeN!lid_m DTsLJScu\7I [9pnY*3E.ᾌ,<sPVLe30(M{E&'pJ#܊>^Pd3+z~pVc+֬aX:c[IMzSقMnHna5~_ᙯg^3)X?ԹMOo{ݗ'q=go_Yf7}?ܪohѢC 3˼qYCTD|Wc! eY@fyLFc zZ*  jȆyXUU06T5nAfTUcl- DD@D IP"VZC'* +D0L(""Q%P ] ("jLCAUvѰe# {ɩ:km`f,l 3H},X( -Xe,׬_"f٦qKc[4'pYjp,tAV-(Bc8I"ʜ "fkz.xV5[hSfчPxV{ !x AO{W=_Jf>v3@H",6,-szhV@@ Cppw2S@ fBX^›Mˆxb~ፇ׻nk,cl I1Qv2:aX#JF"$ѥh )"CD11E/2;!Vi0 P UTUHeP #JL,'HP&dBi"FzBQ1^E[yp^s("*0 ##a;b,&!"WsBy1a\"h)1J$#ө.F%38{JE9QIhXksx ř sO3J@pƪ}̪4s0eK&vIY޹TؚD̆|jV9+fXϙCf'9bDǡl⇛ky@Fufϗhmϑ,$`$F3^qv2oӚsm#aXD D növ37J͚@dEܘØ>\Ƙ]FDι4MJ;(Εg{MW d"Oo2hTIAur噍`68 Zs6;6ӢޫC>V_҄8ݺ[!Ppn!#A|' ~&NAE)Ɵm )X `h SX[07 T@AOx<\% 0ֵfDD\M_Xxf!s2[c8"Bl ZYkEHF0=A@RD(ȆME Z}i:.1ƈJ(UD!2U?+!G0 QkH c$mjAY ^{oABP% }YDefd zBbF ^(x DCINjxd&2A &"Ε04諊!()R{A$ E; sj9"2s#MmjS@nR 6aFֆ9nYC"${@QcGQ9..1q?Zs~َ2sN&?d3r$_sXfegtͧf(=\x5s&ED(hYU՝w7ߞ$ɓ'g/|I\cLYڸKPUV8 HNA*9Nm7 U@sbtwAqY<O2GI_mYͶ 9yml?BrU f[ʾ2Cz˶!w$LT-ZhѢC3rhn**jN ds:YK(ǀQ^&DĘ@&P  a#WĈ2Mi c!qO{'UKD֪ 4 !r=$Č5FI[bMQA~Er΅q9IVE'%aFQaX8CO2p hqEGyXc& ۘ$Gpq5ٍNqfj~IE &J(3)MtaC+_t:,4M㱪u[_5~;W~Gtss3%IREt}ɲrߥaT;,T}Uc L RZZ|oJ5O)^w"xNTɠc;^A"O83x\CeTf$ !w.t}$-D($L}T4ČHHDA4#" WQѠV@M5~fۅD`L|-֡9 &*ǯg|=4{h|A.hzѬbR{7Ě]$e#}-`fWY<ȴh3p B(ʫ)4h'Lyqqb(\T0XitSX"9Y2Wkg׾IDCXk}zի^WEEJ*sP+Tjwј}pw–C u`wsvtgcK \sW3ޟ2 axotm^޶=.t(ͷNFY/J 'Nlgߺ띩-_IhѢEG hp^ ^F%_*VBUƑ($21 L!70eFt2:ħ?YhC ;T!+DS%L}^@Du.5 IU0 TEDI "CDVC%p( J%C%  lBBDKcbsC$ DL5/e7̝\WUyߢZF,iBs{, >@X5Pb\ݷfb390snٷ:}EⴔH|x[󝹏gWtugy3/βoneYnnnu]o{^Wv:W{+^QU5?OUU3QSUilt|ioz巽|؀Ѹr~quOEIiOlɐ|V:sˍ^u.Aa~g4crpr@| iSТE-!8#˿`q2ޛےTuk̽Uuk*hB E AOm9t?|GAϧ]S"6b!2)EUw>gwfZ;[%U|2##V ;+/֠,I!b=X ŌLb[z Atڻuj 4I)J 1, N03+6 L6S؀Ѣ5kEa|s;믿yhyx<p,SE$ɺR_K/KU{N߂PhK%5x:75& .LNW g鹛m[;w.1%맊o0Y>ٝC\;pA3=pTz9l}#""""hތC!H,aODLH+XZxjLƔ66k fmz^W`f~jhI(U/dž@T H"h 6XX#0,bD3Kw#Z3hMRε5 3'?,tyO&;gߕ\s'> )l[]gwe/;>_/>h2>-Isf/?>?'~Fg=Gezݯ~u8vw~}Suvxo潟;᧟Wԟ~[S8rwc c7~c 6?3<_uON_~_x˟q'|x/c_{p&?yݿyӹo{/~˿878x@q"""""E<!A2d"toeޝPRhA1KW($$@ `T HEQ$YY[W S0%#a4i'O?a"@H"BfEJv>zS(PDVT ~@l @s\$l ")L&m ؈$lDD ؘl:90S ԅpyS|s[ "A"d@ffarꤐőMeX@ſmҜZ@Kla|-,Tsd*<w=C g}ʛ 'S>]tTYU=*N{KtHp:ҸR϶+5K"Ëy> 1p8:u*˲`puC)eCOTc)"쥻fS~w<ћCg]}5T993^U_S̍7~R}{N_.zWN?zFtooy߻?ONzwO=r>D޹+S~IBVfGf1GDDDDDDPXK mrfNae66znyJ)[f#c$IкLEafb6y6"bz2  #15`iX Rwv~.A 1M:/ذ av1XFkGS7$\DdVHK>""wzynAE)6vc\ ˾ X`Gv/Y!`.hsU4C/Ð;{BSb!_6O+mRY,D$˲mY/X__[:\{yollX돢(FpHƴxr:^}{œ _]5Wҿޖ2T7'tœ/o.@]yC?{SWq҇6?{#A;u&g?8'W~3;.S3Tݝox=wo?gنIu۪DDDDDDDD?C`blIT)0`c@$ v7 )ud wDDɬ0e`bK@oz@A4`࠱h`{E,u " D љuŔaG  yJt6 ybe )Xv#>aC *fk`tn)ZC( s@|5ֱ `iZ}0op6u ¶VQ+{޶Ͻ Vu KKchAZZ>61E/zѯ_YTf֘P)5N$7t;=y`6!1&Mӳ:[H4kGL =o^}'q|nڧ=z}./6Huz*]e٧n95K8ا?~ѷ߀O+:}}{9}'{ŸOy̑"ݜfkC# =z%ʷ8ݽl6m""""""""h\ vW@&?>TB6#jx8 ("F^"Skda A#Ģ(X1"pM^<׳\rZe)y]R8ثEQy1͋&ѺS4YY BLnL3]lꖢ03BgػP %*@Yxm24,|Ae~W/nn,Xp, mkfr1a8ZmXAFfiz#Zrj%#<^Fc$K\j-ALH*8m#dV^V?B 2٨#UGM`M&hT_>~^Ea#? u{ݳ/|0L&ool8uͣ]=mH2غ_ow]w/ٸk^OGl]Wm{~<׿Q'(ύoO|LF{//wOv^ڟ OL6Nlw ug7#/|xx!"""""""~y&*v$%EZf H l4 βpߨ)E8IRDU1f ì(@b" /`-ED,""@}eg @߁~^0AP5DF4Th眈RI"BY",-P s' )`5Qy˄{Q U~x"R"@ Y "rJ "zˎPev/%%@ZTVm׾uAg!:Ԁ_ͨ@TS ̢zs ܇}*p[Շ?U+T޶Q'88#Т0\fk4SSy^S

͓wQ~V]~ty.Wz8:ŢΊCG&)ٕٙwoyPYw$$[{ h􉈸_})>O_kq?{߇?Mf,ER6gZLSE5|(1RR9ZJa]0Q DX\8O xyY 0$I@T*EB3""M6JJU\cj/1nR vQĔDM5GbaҍwwfOD& \QlB_-;Iym @ҡj 6@Z\UeJ?>VҴ)B,A4_, D#Qd|KBW}m-]w<}Vg/iuȯΨ]=Sؼl:h0h U^#t谖RZ:bi&tpXi^_WO4N|zӾjmӱĭMZ\__D4ͬ"izO"""""""""}" HfDLS%"\N!b$Fa!"#`K_ k1-LGD@.kpiSY[ KX˅(i۪P@0C܄@jx)e(k*ΗLCnr-dDLdAH@5hlը"4+<-1(@ipq0 +м>c]?*#^1ซD7E ZMN &1F^p3rk@EO7"-Aؒ7iMJ>ZgYfP4t.vDDDDDDDD}HNV@ :h DJe6(Y D%li`$E)Q3&pҞcZEK`n:8Ræ mAB"P) sص>\ u;KTT *?inj&Z6Dz"ldRR("!SAJ%M".m:,[lgQoX/ R;Ghkԧ|fMr› ˎnֱ`V$K/vO yūR\z;ڦ~+ [J˚H%&K)1j_hk.fiR@=Rq,ZKj 5;uW/XQ͕l@関lvRqۏ$ aZglJ@D؛i<MHDQˬ"ęa4wLֈ:br f P^@văQ6`Q6 / 9l0Scʄ)&8 [.>Fٕ5pǴRS =ZHǽVˋ*+A7}v?j Kهƭ Cm59g`LSjE]?,c: В2zXp,Ul2Ӓ'>kˆڲ> ;{E*gs 3 2*($hӣ@ha `N DI\2bӂ(T*(0MacMogaf6ւŁο-O V;8:Q ?;wCY^, w_}Ri:o.b,S_:geVZR2P\]nRV0%DRs㗊Q5!a]ozتܶKoJ Mлխ*Yk}^B凧T>0g*wsxT^ _"zw4vxWDRmEDDDDDDDDׁV#b6QZD$(RkD#J*E@ @!$ hA3`@ ƹK 8øOS|L2'@\8 }A{`]jQ߰{ T9n. 0z[2ݹGT6D eع#ݻv}:[ "DC?TWNtc hOGWjbX=*s R2c_KljZAҀr%R8B'!*GH\/O]$RX;k艏:|p_6Ǒ(`f$D`iBuH1„ Qe,J4WK_ 6`S̍6\P(M-a߃a&Psn#H5ZBS(hғX~X%E1ᢌ&r o/M\ s.]Ș Tʭ%$arֈmo2F`zGK@JpTçojoYv4=2yԖۃh~-STJ͊}\si!gA VyH#0ů8V[w#g Y@\c֬wAKDEev^zP`/KBJVQ| CU`,pݯA@LH2%"Y0}G"~2'IbIf%A1l P6dp6Ϧi:H#(4(rT(3]RJfiuD%`/Іf6  8bEq' P# g("و8WWlΏe.5,er,2mX\y W7삵Ѣ]W,YD+`4e.,adAWp!D&(lY*K%H&Hn8  [AIvjҺTlUHK sO~LW W_OTݮ<R1 )QtXpJy 1>03<! K:Dh+;Cw%ĆK΢GAp(gbTsi+5cn9.},xߒDdMcLX óe(' &%:^ޚ:]`B-QrY8h66Kܶ:I),I(6B.$( cSe Kp=XC=mCi\>|V QH1ݝyl򈈈ZLP6$@a!"TJ)) $C"d#D@ 솋ᢄ20K_ بNQ.Bgڈ Q5B-ܭze#vZgR*"201%Tv鮰V(2& Yh$DVJE`Ή}/"r~goyHpI>mRgAίϥGo]u_Ұxpcu,)?.6  ,;<_`y$tXwؕ?yv5$)*bCvikصg:qDDDDDDDDܧq-`@fOGa"B$"U~7h50J0ه a9Eئeآ5,"bxE=b5MG|lۋaIЪK} _(6<0(jd ~J'QfMuMkl:8fi (j] ) 4*dx +_yXyV#qo3#hK-Xw"H(: $HQ@eIigP`<)6ߩeTQh[v9@PKF:sOpt6m FEFF[}Da]EdwUtB`Dga|h pk87A WX܋mZY "q,hbp s*Rj}+TB\Ѹ코y1͆'V`\Bi;[T k5Xp GXT83[c}hjaK#\SWWfN6""""""""da .Ȓݗ"*hdDɬ0p ʠCu3p6"lLr!9 ,%ġ!R *iz#ۚxeޓ6TdoAY)E4 eeFXFf6"lCx( <,uBD" # eW3yl.oӦT0mXѭGЦE齎ه~JpKuj2+hbjA J9X4ޛ185dQUȈϵ7`y'-W|DDDDDDDD}K `A 3*#"M %I8TuBx33g7\ tc@G0j |AP^)5SꀷALХiw0;(`9!eOB/bh0ָfFTHw{m ܾ6im$C1a8 T@to!6m!.FiY4\ *: ~Efr~`J_t}X1Xn,tO0V*rK{_:j߫{H@Ro+",lKXsaF$pz:R)̌F fS-ˁ'kęlRƋ4G7v|B¶lĹf@NChakWԫ>\+ @D"D-6{0ƤI$i$ެkS_պ^TU $p$mMhA :]= 5U.-:)VL~[`6@"`U`e RxT{lsYzxWJ2ZFKx Hy@?p,ˋ 1Nݟ%S)e- pWvfl3# &Ӄ}3K(Y7GxXPeL69ۧS-6Ggm}yN1ll}EN^ھLgC]\$20~A64M@ "?`D`Eh0"`dlVJ.  2 d0$fB p6@Fcc2 hDKq& #<`7f{b&4XXh0X: ZWV+G|[T(qdQ<7Xf8c$I1Fait6,KԘ"(Ba s %)I6hmE$"ŒIbz'|p{~v>N-U Z#"=piobs$Is~꫍8.ҶQN9Yi=\uKRLY::]u}/]ؕl#S A#f2-.\`l n3wVO]Nև[{wLwk{$I,@C M pf|6ѹ$C$<@Q8Tf#!mMT @Fl:4LPJ_c[X:hԆ!5k:p^цc7O "uM6ƄKW LlCDEQX,DPʹ#sAZ^~}ݧP~dNG4*2a_ʄu*jQCў8fl! "ϗ&,"z߲,¥{PVD.-eC:6֩+m>R^A]Xi{+?8g׊1=B5*z}tZ9Iw &m:Uh@׆'fq:fʻk{۷ )Rkȣ9en2Ó9e`7)FFDDDDDDDxƊ `S!P^j @ڜ61 0 2eO2Al"X2І Kx'M@OTɃmzutw% ?zezD$B"K^P :GBt(DR~lRfWE`ϞXr 5/J$N+~K̀6N2G%uXګ fFbb"f@APAˋ '6Yaf6؆@"" %~+V]mM!0:J ^Zusc.u)@ZŴ$$>~6K>hd:TÀv`ajBQm rˈF =P': `kJ]7^je(]N0[m1giuAa7 ^ّQqvm{Ɵ'^rwoػsg}͑+g)d5dmp^6`wwmdvx4KLvpco];lf\:Nqm{ ϞJNG?\ew%f CEDDDDDDD<`UM ܇eua@ Jys " 6Za-e#XRK;SX W7TڪuڮFfG䉐٥DȚ#8- w:Zm˞,-b{7Tu!&k.UEk:&f "$ V\EZC9AbYG 2Au= ,ն&K,+0..K5}SJxο-7~`~7]1/}K>~6z?1sk롏[||~o;1?!={w6?{W~]qQhThq0@I.(("""hD7::DDD4P,,h0ђ6ـAӖYddJEz'zΥ5\|Sb@FR fIJZk24uShpCQiNM!Zcs{G zxzZ5~Pn [8}Ƴͮ(mzu`]/v=ZqR^ fx K\>R3ck26!ov9ɧst$}ܼ|v>wT޿>~;޸o#|]p`m~V=/yփCK_|߾5_G~Þ-߮ϽT,<:}FDDDDDDDU_ "Y zCd@D RYF- P"hk0cęoS8Cpa*ia~oxnNW^s[nCɅW<"9i&mO|8=:H$3 uq~Zt hA㠹uEҔ`y6,leaA `AYC1uUX9x{]̰>n2kfh#Y@OJ)jKVÞܰurzo~_wT }]T>m"OkX҉ah$5IFP&@>k.l7x06JS\4/KYWbS!4ͪ[#asRP?|Tg4ғV *i.X0AkZ,Πx2f"}1'c}`mqaH30td993d _.Tݐ>7($íqk 40i"GDDDDDDDD"d>? )FD 1 (@4D%L,`2A#$!FMA4K^p(T*#ʺ`XZe;KfP֏=|vCM!m+]܁)7rE9^ fD "aZ:IRj0f0eβ"AU6Kj"1ZJ;.c"!6.F"fβLk(y` [cH22PKv>% .㐄vbADRP;:_'O4-/&c7mW0KINOU `\ -|,*%/Nߵ>(>Uyʭ'n]6wNl0S-`F%U&Թ[d[D4-2`E/FlB"JBVDPi%2Y\k!tYT]:@D*=֘_bX-) [=`f{^\žZJR] ߡ7umZo Zv@yAeٗ=BS]5ZͶQ\1A-#ގFT ?`+rM˂V ;% "b-9HȂC^{ʘbCr"0Z7kǯ|'|>]ܾc'~~CoLg>W~yG-?Udm!׾{~J6޹8ݦ)%01OzFÝ3dmSۏMCzQb(u,,aD"@DdY* 6 $*l׊W`\-ӥu } i4LypF -,,< @=XRmQ "~HD>i2HS|ߕd@kFT4."g\D?L+LKYX6_8 GpqM=na6rTuZW%bmG򀶍c{Cm$뼓TvzBd'dg`oR2Q@ELٌEW䫊ɾJ7xX$y^sW&n=Ở{uV=zکMٙNp#?ryi7`ßz ձ&xt/t#;'ҫgyvO_4MB30R"ssȈ.TE{o"~bdaDQb#n  [ExOlXXEe8KG?s8|)x5>0kXاLD1Aye1F)% uTBm,ĥ ؇LJl2s]K|X}v =*G(V!t^帍YK[!6\%CW$w CЄWdCCZ 5k,R91إH7Nvlmv"ݸxwGhvC֏QSl7] sٙ&I$$!-fV3c;8tvr5&[j|6w截&SI ڀb6N*B8Pl4bdPPrvܷbf!d`kailc $.@ТOen@Z.T\Э̫>8R@5|\a@pVkTDYs*!JdEF UЦs$("6,(,/AD<0c.x9}{1$PHj]22&>do,, ؼ$HӴ( Y$MX R)X:6 FE&XڏTvII:xFPQWZSY.wv+jE[ª?iC=Xc+kx{JK] t7nLgV>25j2gE@okL7$ѳ鞦q,Ez6zUV*MimLRjҁ a18AώriZBDpj 5WxCS  (_{eH}^R,`X #_뤙ݯ5Q 3]CNtFd$dEHIK2N!Лg`o 1H>5FC=0,EX! jbb؈2%( )  1X(0FA(օ-(1V ش) ,"hƂE,f#w7@vHiPa(淫MTf}Uq098%~PƊRolE#gE.h i"LD u4M 3 PHkc.Xd8~."hQ&y͐ADA$bAR1QlH )jm ri v` @G%hS\M9oR{_e.ج{4DV[2eC|k<+:S/[Kߏ˺O.9_5uDDDDDDDDa: ĹOr"237I1(aa_rc0bh"R BE(*`T_v2K<qLRwD2$2lt//.}AF^4Y|a:`[74U[+ѫZjn|}K+JKݣ6>>}:$qϮ񍏈PZv4E~ KT.򈈈?!,m@0K&԰q1JVF""̀DI"l ú`bD^X$ԚosbQ/Gĥ8_\ɪr,& Ҟ +Pq)xJl%JDlB4FijvՇC9Sxp!r4Akwe=0cʃu kq#&tàɢRƦ _QgOHS rB"%&duC@R;""""""""|Ad!ByI\E#?{o/KRՉs""3k{nFAٺYlPA*(*¸ ,L 0pZKKnݪ%Kݪ놙~s_VTdĉxqqa@$$;,K-;AKo׶Fv+VmTȊ/{UEu|L!*uVכT.'8IU_I-39 %9a>4RC,A]Z-?VY:2*Z*DOO9Zm]2bkG"RXⓠʨnkcCXٶ 3k ȭŠpXw'68A8-|Gͯ#YWC:tС{ Df`dm4A 菜0 PNmH.H1fKuEdΗBhk,2%hQ02ucC/|(k+m|cu "EH^sBf$ Q`bKU_wSA7 @B$@_<ۋ%k4g.ڞzGs2K" ܡC:tគ:E9fR䀕(sˎ}$$AT?", ,'a% bUE9[.kK9#3uIXG]D %Q2 TI,bf$,8NޖTK%"hQmdckVyjp3Qk\n7,k/K:qv8]z{+rvϮ4œ"]N^_ZpYY0?M9df,\!uVDYDtΕ ,/kѕkW+늅[qJ|'yT>-B]ah4޵:vEit%h RsU,qZf]"9K"Cqc~] 3\:tСC_\8|磻0;%~"z58F2#9. 0.W,|ADf!$އE[6Q+Eκm’/5VﱊZTmݬe0DJ'z| sDW.df:y TchKG7ɘrDDD Ok `ӧ@(> ai_?DPiV rIZȻgO<J? u"X]JZEQc!ARnK~"9+Dϟ@Sm>6[yUy$P%,4E>4קQ~eգl7 0xZ$<˘Yk=N?1Y 'hs"JvR.L*R&cP* 3iF88jvB4NH9 @z"D `54PcmR hE-)Rba?V83 I @:}#tmfJ|ZG"CS`A EfTY@j]QC:t|!D0-nqȢ4^r.˲qG}u~CrL;NEYo, 9?R0& Yj cdP\̀"@S|-'DTY҂U[~%P1? "R/+iM@ F@8pJrW+^UŒREsecrs 8Z<9?l٠ #9f(":+6# #ahI9p)"Kg.A$bzʼE`^-qbrڬQˡ?۵޺¡.b=mUl[*u楜XhV/؏p"L&ǎs=A$Is3N}_b眵[kQ)q34MTrKI S]'9PrB/.ՊjxJWPβ7.s-DZECW<2h5y0ͯR !Po#-2(1 hY|#qЃw# a9sEQ$ ts4qNF&=M &<}#.68"zΜ$|"ZQF S`d-`4pcDOmNm3;©) {'h t8l$MiZJPtdijn:tСCf{.8;\* "Owˆ y[23;n T8,<̧=+wuQWLp~ΨɆ:c<&B ޘ3&$5[.Na! A꼮!eX^W2-ILYß-ߖȳ+m-|[q Ӂ6BeAnZ|Ԏe /ٳY:K^TK^/mnuFx:up8D,|fkRZ%M0t!eY6z0Hgu48ڭp4>#Morhdl4snZdtJ940[d7quXIHB$P; `4(ޝ9˂`p*){0ܜht&J 4t*e63%,;T :6vСC:tpSR IDAT0{[g~pZ$D " "! 0Bje%6^78/k _̶DsuW/v9N ޡrʲK+g+T8YTvɯR2c\Bqނû+JF RkԘ^ي/~ 8:s>z>kR329++uGUq^Ec?:$%Ŗ۲rg?z_iu=z/d4lф SKFh4NTi r.3:77:tСC(H" ""+bP!" c89㧸0Fq/-F亭usαu,˼+ 1xSh4(d?1NW\q/Rmlg{|yϿc_r|L~, 5q˽o\#wMFf88i{ぃ陌`4ܸoBooyS9A7 #Lhqhڟ0y'Ejc8tR`W025po w7&gFVԲU):tСCeCDDXDByg| "( Yq9" EG~elQO%Z@Eٮܲ^)\_W]:WR菢"0>ki JE|'gx'o_w~柾n1-4&̝n,77>=׼ɐ6zvMo|ׇn8P>Q?ʗ nqK_/8sc"!N~\uСC:%.lSՋOs ⽊:vΛxJuh;o7 VX֭Tn\r{{PyP](Hx¢ r\1״ ;n Si';t)) -jʼjpSu_W2Th*#+-vZ|@&m_#,N"C ',6R|>JMYcĤKaxzƵE[2}o{1sRsYybf53{;1c>˲  眷H"GqdoJ(X~ja|T}#_s]tlcoՋ>׽I??׼?+F𦗾#7ߔğ:}ņ}ݫ |럽c?_~ʃ|~{?kʷ?w^'~Ϗr;3|?)$hwctzC3Qܷꘜ GGwnOS~w"޺?#uoxӟzϾ-o~;^}ɛyxt[K @"R #,5)墰xEbT Z D'S-`z"P79lNRU˲v8M HCW텈JH}ocac'DPrFqE^M@Dz%A:("@%QQh3QJ1;jD@dD Q`e&$'4Yg EfKp=Kzyy)ϻW_g9!z2pmSۡR\q̡(|Svm^{>~94ΥnrHWZh9RSSFdVlYE~/|Ӟ:I??ys/6JZkΝNn9f.s%>sg;<1 [N8}/>#8U[d2|ܗ3u4z6v/I6GjtGeIO_g{r6', ?n{p{]al7sOm]Pt:~tFxɝaBI@t?>t\4Apo<<.q@B}!ȁ :tСCsV-0 !i"4cf 6&!e_,Ye¢hT 4#{e+Gއ5]),-[˔U>fbJf?7dYy BQ@".'8M -՝:E9l{jޝ#"0 C8rUҗ<]݂),ev(+dXvFNXT\CeAȐ]q#ooꪫ믿~u{ի^e% @)) Mm`%dxo}%Pyq$,p3_w&Ln۽t{]Un PdRg&`0TOF} gleVwwr<vNnNL㿿W:>ݵmo}o}#s;gh`t~#/~eկ=c:]١C:tp~1 xO Ś@"B")eBOwIX̼qjaQ3juoyp9^a4* W8-@FPPR.9s :>/.nrd-3Z+%+L ihx2.!""(X8iR[,V>ma\yldDU|GCK.z k 0˫ t-m[erKt忍Y/*Od 銵GQ4L>O [t8ͬ: `?.]7.ۼ_>?pg6zrf:d@_rI%x'u:ͽpM_wշk{1ͽ>yíߝ4k1׳z~:tСC(D "/jB0.5ZޮTH"9hҕ# -rV=3"Z=SȞts>Ovf \DŋYȈm|4|εBJ<@k5s3Ӌ[?˛j4XC9\ɴ uQ ph XSeuzZ,) )KUI74ࢋ.Z֗_~yqAqGQz^)4A^zjc[ .o^? ?꯿7G=']Oܢ]so Ox [ _}~}71sƙOt6lSUeSxg ?CO|>1hS?Sgc~mo馛^W(^ 8q]x2 [4PoMHi6xpL.G{қ{d`{٥Mw֋_;83ujL|tS o )H6Ntj3 wfI@љ~\Y9cܱ7'F"`?v>;dcG55ɽ  ʀ#*_\gc'?G]{Z:tp!oTw+@ 8ЁRJ!!*!҈D*4&T&"2(UYQYk9~a 3;(~+zGCA // jx7MD@>%z[z=JK~,:BzE5kj"\}A 1ec;ػ ޕZ͓z:&%Ν)Q\%gt S&eA;Lc{쌤3t*nft$ OqtСCPP-%{g#UE4bv0("U=nQ/,,֕޺m<-缢hݠ@$庴R*G$a;"N}sz-!EIQ4*/yhZ,JD7hEs 3R$ r򬕻bnUˌK #@b~NJ^^arx1m Wa ^d߅#2\"j[CuIq]bJ*粁JVLmgIfvrN;^@%Ŝ A02:"fZ9'HsW(">UJyc0 ?\wu믻:_`@Aeh)с1 A8D2=B- 8+fzq [)X` 0FP cP`A [sS2a04H heQ0 ˀTpg4L:ٰ0qr56HS@I;XK :tС3X@$b(=dǂF)@iTQ@Gʠ2RXّ_2XAί,b[BE@DVd?m,kh3v.\h.^TRCF |#"R;+]R Hzo.o]VJ].cIǻZ'IsZ"J@"9D+="Ey/lu詇E%5֚@!&J,JcYs@*pD$̀h`FDβ$)mEǒ:ʷǒofBXi-9YdUz~jq՚$5gk^,/N%,<k7ޭI H 'hT`.HઍdZH/\k=LĉK4|,˂ anC:t XACNBJPZZW.,,b[ژ_,Q η&J%t K߾^~Xb ab[tO]^D* kjՉ4Xy4'J|3KuiK3{;Fh~? )c¯ry^٩"u:tСC YCDDH#*bwP%8*V ٶZBa rP**[F_}+G`7LOUZ\Yi z*[E"OKYUp+r*}̬5yKw0l IDATG{ EE}]^D`lW}HjUgf%w{ %3p͙P<4\ZyY1R~4HK(%{kWb@y`H~V01] >8pxZ2^2Z[b!1{~Ud~=ܚҮ6brʿGBKߒ f&/4 dgzϗ_XcwPߺ(:(IGlJ)ǃJ)U Yµr:tСCD$wR?'2 gW Ȑy ")QPިѬ36esTϺ=S;R20M SϊjMK^lA;FpT e|Gq `(]Fp8tzr<ڈo#֨hWVkF%d mrVՙ:c9zuo"1{;C~IDxC,`ccc<ollOmlnnzoA$IDZ\]|ѡC:tPĂ'Q0?P]ȕ`*5[bq3mW <b ah|*~ŒeRfAUX. eg$8yÉLfA`kP5/oeyBX.D_)S:%q%s6(KuK X))".j`.e)O4?qTfeHh#8 ˴^7N1/(JT ؼoСC:tQQc`ɕQ"ZY(XNE_ ηwK8sq)˱uAjvjHq?󊡄P6Py Ah4Jw$Ż tv{գ(M?Uƞ{ULjCJ %+֚17QJfEDDZ?T; Y:j٠̧ $IQ"✋8bPiwP |EBj6B,@%D`r NFQȁa,x^BXTSS|tTD̯g ,H<;1+|-8P,xA7xϦdvX Y Aq!aQDp h",˴ ͟RJ9_#3Pinllq A0sI:2gc~# b#"+t3[l92613H h[b1`}M'o$k/QR q#rf"$Pj,K:tСC"((D FA8 D@H)8ʗ @|] Ys.EA%"f3&t.EP/XfN=$?[3W<"Ҷqj"K;Y hV7ZW e;yfP8Afaa$$q~Qe/B,ԫE`nY4Weej^ c{ tŽ:A* +Nb&Y"XiNLcA,B!E1- V)m ,"{VG6&΢Z1eYYR s^.8+No9Q2M IżV~ ڛrj+u~UJnwn]hr6)Bl0kh!׺M`fc L&"Y&I90qid? 4g<0cp sZ2d"\KX5a%"7U(1) ]Z"B"t: CN 68&QZg4C:tС1#PZϧ0{ (m]-̵\DcxD)q9@ DJpK.WY{gʺЉ(؝q.0c( ݰ<` n]62*ي((rmXf\D,6?(ʺV],9‡(d=Zk59e56JDsZD%"Z縠Q+^1ߏ& "8y8%d7TT2_%{zsY1ϒz{mrReb<_IR~)E],ALS?wL&~9'2W1Ymoo>}zccmfIfVm 7X,@;fZ19 ,,- Z҄BrNAZGek%RDEXEae)DA-P`]:tСCJ43*"R…Lhs[rP+3)6 zc&B4+,v_lhS?Uɍ*g>/emBDsp2i %̻AYia:*{ψP2/7(;Pp ƯVY_}9">JO1GK6AG)THp>Y4+D:adBBD9 NQ% 01.I5 ."Ls{Pv]Pjc>@pʒ< R99/b%5߾HsVFͻ"%@Aɏ iU&&$IG"*" ɓQ0W_02oQPiZ}cAEHĘ ElEtʒxv9'L#IU`YP8 I1LҬg(ޡ~x\ǣ'%˜(r)2.vֻndlss`.`n:tnAyW M#dP1:RHT RJRJkIe&Eϭ Xׂ_otE1Z)J_(<^(N giDRrQ&AʖEE؟́caQՂR^=(I Q1Ewu}O-)z0 K0sfIp 0DD&h0Ժ  s# -;Pa;M;瘁@gNS 4 ̌0#Os m(Se+[6XJP X :DA41`'lY.cL$ʱֆa$L4%BOPi2СC:t|@4Aer;$LǺ[B\"dOu͢Qߟ[T]*ARvGHݘz>jE!UErffmh ]rJ] Y:ǒ1.Ik1J) pRB kZ)-'>hR*6MSEba)twb4SRͱ-Aj q=< Wl %r9gMr+qC"UPگ ,s[[[wyVdD)ַMozi8a&I;x2&@8u30;lI: Za NXNgY<)_`x]^N4R`Py9\mlu&K9#L8:tСCe󕰰GD 0 |=I^- XXok23,p*Ky6ˆi{sGFaY5C;gEn-йKEa_QJPH=mPf:x6El֋mPW{ z=Z;$N$4{I,ega:Iό,u^4F ~?R 1sqO8hJ뛍v?.$nn ܉ǃШ |M^Oϼ@DRQHc|?٘1OJxYòMiA,x"# CU ƄǐO5'G J3o3 $q΁"" *2_z.'bq,au7i^Es7gS{g8D u$& U:tСCVA,*N)%HH"{IR/R2sUΉs{ey UΑݏzG2|]usՐ,C1d gjY>Rqٮ%5/ [-8VWPVR{KnL6AAkmY1d1aEe?{fv*%Due)~`I?݂.7P*M3T CFx&@x2 #<氈_}|Ѕi,֚ G]؇+$ʡş곛MKE?X-݃tAhkk+2"B ls* DE_Ck~=;л^=W?a w6#ʏAQns==uBWn^%Juoa|~Dg)Nuy:tС݃ulTZ)%"\Ѯ/+NDyeUke]:L̖6DZɫV BL,>DۮtDQB] JSe/V_VvPi(*\KYkeAhM+&황pQEGaN&,s 늽Dqɳ@k9 3Ij"8g` n Ƙ CMD$t&If-}.Om8F7Y< ,J,y磥%Aq2K3ۤWh ^Z% \rcS2tSҼR*no ̱fÒRidt̬ ?""8!E,nhYfs(l=^?8 D=̛o3kT|:[.U_o[_w{^ I((qpLdOt Uē}=N l9l$rr0xܦʶI3ϿlXj[S)g2 A+V͔?#=]femjO-b{H`S1$PeHw"~kh/: S}J~xMvA,Xq@djΌFvqR恋e]Gt͑pTM鱎$>EءC:tXY+d3 Qem>#Q9 XDJiN M8#")IZK4Ck !ηle xekq)ltz +_rPYX@]gJoQa߽pgAJ6`I8iN@ ɨ3qIZkz.F;/80Bfv̄#BF>E2f X)f C@-dFBbY8tr *\Yx'͕x5xxRJ(q2$SuQLƈhQ("A('kv->j(s(B2'Vg;Iv%I$sYXA6.R{A(42M9QMs!|u_cU )w* 1Bˉݾ`}hqD@gxvG1ƌcǎ5+N\/Fׯ_؍oI/y\ncؿ] vvz(ٞ_vw6kmߞ?Tc+ook}W^uU̙'|_yw|WRl?y7sOF0>`!|/˜?w;y-{} _5xݟx>%~WAam`5diivСCDGDD?\2滏:}+M]sg٨ =hu,)N! )Ji^,DA%AU|u5Yr sۍ $%iy+=t,zh> g%rD,qsn8F[Ch8kM;af@Mξb- C-|= @ksi4M9ǩ Pac%Xk+[8@yjf̕Y+YeWl CTd+(9XѡmZ>}zggZ}̏,< iqdUyZ{37<@6S6AE(gx11bnU"D"*6UOn@ƞ95cUO}߯!}[g׮wϳPzs IKQn(s޺6XC\>m/'.xW_v~5?WW7?q ' ? SMFMsϿ7y}_x#>w-k.{Ϋ~#Ͼ=yN]rʑJ2(Ny2x]p-o~yyVw_)w?_oquߥ'}Owxݏ}^s׿a~'Pn2Z7i??|OO'φb?x{O1?}y7_y~ˎ? U<j:t󀚚nk-hm @a߉"bnr|yp9njJx~ Zgx.ɁXؘ?jKb)jP(UQn^ȸf(yȢo~ss9')$L&Zk\eD4Lޟٟ?HDOɯzիnӧOoSt`?׿Fn߾%w랑{§+K?|˓wxI'.}w59Hh%7_싏_|gcy]_mJ3.1ܻw{*J9}>zyŋ~']'v IDAT~#_AiLS.r9j*pL`a-lBvt@; ]pߖT&NO+Q_D3:ͼA{ӎZAX/8Ɂ|Ewm}HDUU$I2LkMDA9cΞ=J)%88kQ3sTUs.*c*%h6  S% ܥ-icݐ [gƐ}%ʭ[@\q<`173+k}fg~1b!辫?J4I,Um3VU-E8˲l41K>W_RjggxK_WG///^qefEk]oo菚/_mz+kmw}vO=;}8ynڝ?͉ard{ޗg=rPē;8E}o2<6U\[G;>N~ |j3!쌫1 Kpfq?aO=]qާuܻ%pwX5E폇c8s;o|{mg|[Osצ&|Ek3 틽S$w/~^릧]sE_wjl |YM.l:tАu8!zLP7TXWK[aҗĄZka-DdRS+#…B9iaT׶pp b! h%0."Wk¯A`frdaSW85l%z=Cb![X,/K3Ұ҂cLXc4,)KR"1o 4Y*<ꩈ[3a=)/+F2$1ȒNm-N)"69)eEYmP:Ŭ9%粥LX|#ĝoTs䩈s@aJ|͚?wO9Wd2*MSD\{_۷} _믿M7d_y UYex0*{g֕/o|ޏűGk_[^f ߓn/8k==3pOk3['4rdʁOzɩm<[# +8s/Gov:ޮ^a3pM.> .KόO|rd8+{s{^?=}ϫ7NlUB.hݓ4)O_,3.|tW6ʹo{^Oo;oޟ_Vf\i t&O:tСP] 32w`$d= ADr N ֖AMaMf]ċvO̸~%,<TL1 rLh#* "܄ն̍SsrBqdn-͆ED(6 C zi:zÍp-6V $IKTQsbe$ɠqQi"JXKTJ!`dWsDL;OYǍfJb^'G!G|ܡՅiճ FgT 5i_6XnΖ<̫')i}ਪZ>3 7 %'Iru׽ep(.-eYfyǥL gx?~?g/}ֳ_O>B˻g?^Ϳ99ӟ-OOnOT}?}]#{7#V}zN%E"\vx&fm>a >}t ΞN%zI;ɩp>r'~x Ug>װC}c.MΘ̻~3?UK{+ݍdc4^p=K,kk_uO[{ y9z78er;>i6k_|?᫞s+[ aQؓ|,SY>~~3h"stw}d?=˞'=Ϲ?|3x~˟|McO'#w׾G=Oտ/^_c/}6WS|,+n~^=kGiJt}{nBn[}˟dz_S?|vv9Y'EC:t𠁡Nq t}ʱWt)ODM3Ҙ5āR,Z:@8 ƒD,<_KLyYѣSS樿}$PhX@e[GȿRh067vwwgYoggGb|y㽿{,8dQ9{2#"0zqE*0;-xr8 Ce=>3?Ũ.PUd2)B^켬 '&׷~jڿd|Zgs䒓K Z%W x aĮ>S6"bH~YJ2ʌb1OEOyA)PWIOzEьi_}7t3}|뭷uCD}EQd!aEk?ݞ:tmBV25DDe* ҬmB0& X)4J\Q/EZyƘ"w>ܪ,J_VJ5[**δY!JD0Obncc5~>,b: FU5 ~X7 QLV-VH'U!uOXO'(]|CKE۲j<nid$3cdɼIM<1p(UJ)`EJ)k5*vΑWڰ@J&+r/&Ƃ*Y]Ud2 ,"f-u!\0MK. |z wرcJ9g^Pkhӥ>ƵӔZ6 k=QJ}cLEQ O`QgLZC^Z8dY~:8ZJt`9'ʝkmooUz+_{oy[svww766ʲ<};tСC:7g[KVf&&FGX!4DJiM%nljRZ2T]LF) D>\a4VXԉTTυD/D+`*=jW3жX H8/%]r,]3 yvDtsG"mE`P{3 ~Zc󼨪ʹQWY/-Dlʠs#T! 1>/h]*Viz&b&]Yͪ[\X0#FKf:4/JbeaCX {2sۓEQ|}ӛ?k 7ʯʉ'EQL&hdOJ:tСCDl󞁁I!nG}(gcbӊсt\g< )_xr@kRD !-cY嫷EcSw9 *kjC?<Ŕp2$V\eqIL(J:LTr~>\b#jkG339B[B2Hׅx*9O-Z˳c)cL$IbuIF$IE q\Uzq"LƲ1Y8GظBS[keIH\" ƒ9 p+ ϟ\V|xfԒ0<0sMOui:4>b{`0FeY8qGG+ߩ<χޞ$?СC:tp~`f Q3+E\KG& ^cڈ4R"[PI ̭C8BSCua!A9),}.?Zv2yIKBy;chIׁć,q-r< @w V+B*2 {FD",`Xj2c~:sZv%͗<#Ji&F),K_ϲ(&~wgg8{>se,Ň@s;$WӸ(Db h`x$Bn+kPLif=$le% 0147a#+EX$Ix_f==y%&izܮXsc$ޱn<35[aX0SA[&^nKi9}7=iʲ iW7oEj,VtE@k$>iJD(I(3;w'I"U.Rc I6M;tСC:,;df ZӍw69ȆFpRU+$ Ib2ucM;$pI;s)`6#ɖ.2UEDخ#4M[JaYw}ФRxIB-rZkL:1ƓmI`|46q )eYeIYReA6 &H ȶޞ:"+%'*Vˤ )C?L [RrYW*4H ?J[Yו-%'43j8"nX0FCX>M[}LիEmhi@!AlP: q%(DLhLƮ.a$ Gc8)ömĞru \dH _J aO 0I!Rvww677hFPZ;P"* &b`\?Q)&@tDT}j 0;VbjZ}RkgYҤvD&AX4L{v|7XvUދy ic{t8jL&,Z#ZfD#3;G33-_ؑCOZ ,y87Zh J ֗X+q p;.p|KjU+&0e?Y(AF-s\X릭'6_u:tСC_Xe596g"gF`ɃVs, e11wo-kYj,F+c}iĴ9xJ)qK Q:RgSζ*`YsA bc_*NOBIJtX+13>0pqU|A[PYj,,L8̙cqtСC:|1e嬁"1+y-42`CH mN36 s9izTaeQ+iW7N#Ԥ1C!;^9}HȐHZM1ӦL˺9h9<%a?げb"n5O=|Xa,ZT=%W2K{HwUUy(D2F=e6'hز,?Ȓ$qBB:tСC/.ԴQ 2mEbl1P̢?L͇Yzk]kRJ)V׼Hei5V!"%KC$BΘ:]V@*?L g1{o4(b/m *=Hf6ƂD8ZMQcp%qTYՠV e1VV~6W4 1imfkm`jkftT*M Uj&ƭj)Cg%C:<}X^+T?s(~RHmw`~<>_~$"bY?X4EIjWEQ$'X CiQJdXm/s8XfjkFO<2XJ@k(RAeo# J)d0FzּǯV:$rK ^6t C9TVJ1N 3 @ڶ D0jF3TU`)Q1xi^#db!;O9=H*e.Fkީ̥֔^Pgdݬm;pBkd4`c4 TSʣ[8:tСC8@ @<#VbЊ=RBe,& {"XG@䕱"11xPX KDEUh3'I1s}&Piڇ` /X`N"rH Zʬ g4"4욙%څirsͪ(\k-Q0{.]%R#URe쭵ƈI%Zb$I$FY0( ~1)4 8G&uԁ<  Ypm #9fI9BTM q'1F$f4n&^dyRVK{$q  ٣>׌?Cy' ]b‡͈cC(Xskh2ZRjO)P {#RJicUR̻8X_K #0-DXE:Cc¿X2B@&P62U^ksX[9)#$IS1)G:3kr֜P-OvBme{VR'XjX/gFCQT+Zi#DŽ=bm@iy:tСC_@MAOI{t V T6)&!D cz̨Tu#hk+">qOconRx?"4lj=uc @!,UUZLA'iZUե"pP;\,&tsf,A>; > @73_\ܸYĪG%v)dpl&iJ D#GZXXIBrG,ƨ$V)D.2666Μ9K0'Iȳb%"%(Δ҇ͿH R:1&U^Us*UU]UСC:t!Js^Ue#Cn" 1ֺYKj`r'"*.^Zp@Y@?!-hs_QK6sIH7bEC-;Axj($heo84z ̬ƎDfol>0jDMn\X噏:?Y԰220KLZc.cXUUA54<#58xvud4ƁX4z~9,>sqsǧNUJ]p %wՀb,8$b6#v{{_8# BƌZ|=BD9`0Jɤ!`Z!6Zk,]UyWyTu+yi1 ̿"S/jNX!BܰFsZ"i ORƠ! w ?ז*_ik c;;W岲YߗXimk`vDΎFk'6}O*锍|{~.ǫtĚ+& W  }ʆJoYӡl:tСCwQQ~' bPqIYs@aJQ1CHAH1N&Mtʲd0"pYt3y,+ -{x h:KYZt J`(Lw  DTsUNA%ʲ 5I̓DL"!j|{{r NHw xTyr>nrhf.K)~ I AWd:Ďiւc5{h5B k5ϲ9+"RJ́666RqhtWJ#LdF$sS<VPwzO̲53⫴AŊ1Z~bUzP j-d i,Y9˄ X0Wr j|FҮ4 ުEVhZCW0wm m3] F0 J0rU,qPCjd Ax2|b>Eoz,˶U9u` )YA=!(:^`+5Ϩ4xw0yY9ES\a=L3xҢƻ'"ֈ)Tme!\!X̖\$hW ';#O9CJSN"xӕUiaeo| nvw|+k 묞T$d-ST߻KDz=s=UN.(JJT\VfbIDZ3NQl9tСC:dkP`þzXq*,݉izڠnh%3k֞^x؄DB\*G&ƶhcbMV$7^X&}; "ɴY D” 9ή )4a蔌y<AQW<a* R #$:@$fP2+8&n+: AaԬPho.d,1Zы:tСCAB0M;}<ֲ,n6e0}Ӆu%qK&Ԋp MTK\$TUka-"ly.Q6I"q ò,%oKUU~G^٩BD!NgKK#\"SA 'c.Df F jr$C'k1 GqCJ~ bfLij~=dF0" }Z[ .޻6771pUUiJ*`cY:qz|bucF0Oі PpQU|xY YriDJRV L)$ƘNHk+3 %VZy޳RZ zU^zϒ)y:E!R4p {J$byntsɨL ,u=)@ 0QLVa Y$yGߩXj~5XVȚ1lڡYǒJx7}ŵ_lm}ozɇ펟|\]M:;X/{=E_K.ɉPo/.|/'_ܶo/!C>r_:tСx J!0ј HQLE獉Du>)ʲI^ bK9Jb GR[WUe6u- ":&z:^JDFyEYEDPd;t$hf0&q.$S0"ve% WKJPy28bmt W)h$KKp^o߃iē{܆qO*؝>+/6O^G|97ݑ:tСC/ĵXL|N{ͤ"*BDWi`ݢW N9h-t]\lXE 5 sN[&_œ"dBv riafQO&aUUɐJB Ն?E &N5Ng),/ XH1VhGJx?+PhItbm=f_<18AkVktWf}$IƣIj Βn[.'/ZQ0Ŗ?|\&*,U,UUUb543S֗K\cViKD)Oꦶe<NJ3!d.uA{ $s`cOĵ̤(]%~@;".+dwu1T||ß[$X«v~ &̹^́VI>-v osO:gJ}[6;q'ܗW' /_o\|D:tСC 旸pLY`*jt@BT$޳D*&$3im"o=ھ[=/*OGk;~:;}Fї <˟_'ADzccCFzcǎr0<]gtf•{ܗ?G8wc>H٭IT|я?I޳Y£'3N{?{{~޳Y //Glv:tСCav"VԗPv%shF"pU;blВ}>LZD8C 3 2A jvpc #*4YNƑ7ŵ( "ʲL(RIdͲ 1YIhb.bfQZ g$ h84*Zq jkџ-$O07!xG^2!y;v$/\'a*/1X3 0rV+3T.qD@DɢRIC9L1^#tM%i"4 TKG V]橝H[MyF0?'#;fP.m|&zZYAuz9ֱcs/'tx6(>:598m:؜,rFz.DOx:K锼QQ !(|JK^D85$p=aԍ?ͿЌ2jq!Y ifȨkiܗ~3͐\UzلsTxC_+5dθK%퍊\W*8~uzܩK҇;v=آ/k*Jͩ2'WfK'{/]WuF:tСC!""D"BU&V(k*HRLPm1x]8v\\ SĵUͳ-0h\$0*$*J$iVU51MS{ے>luI3Cv^ml . bRĈ  DA,U$, 'H*r@<k>;|}̝h껷>ݽ{ׯ-Į4geڝu]f3+5̤: ӎĈhFn#ny֪a$lzJ$θLCҤb 0RH4ʸ4QF%ڥAIU8Υo>.B`|>WYZ틓GyE/zы_bDn ۪l6[.bDIa;9_2;rq;~t Kcusvn CTx6ԉKUcStLQ<;&wptM}aU,yB,X[/7GmV3:CЭ-o+OMInh7ќ.yՍ2YQ܂XͭxuVS'ys?a„ &LQF>v adZࠫqk sT1r o`yMhP>8yqy;ad[ ұ1dce1.2e,0&0$1N`$KGd떞t>8.Pu%" TI!')Cf~lZ-dhjE}cwD6Hפ^τ}@K_ jկji.NAU{,5^]ΧwI0h/XЩ{頭4s% ǝi}t4 9:ɏfq3k_1!cM]׈j vV- cLp6=>c|ΧY *&9\0bzeq$j H1&٘l1HBc۶g !X `0HY-c`;>>q"I+ے=`q+8N ]8α2#2sC98Ɔ/ b[" = PXĺ-E 5V 18@"3nޘp RPpa҅C=&L0a„ !5c"\B:QN}kjǶ[k_R`-U#,BeK^=2 H?Msk[% nڞQПahH¥Cz7l&A]hu]w|] 5s;?'L0a„ >qW woX$zmۊD!,0ZuɴQm݂ )1 (* GkTޔc]9))gQ䔱b3~%RˣBbYu)u3{k>f̭@Fsy4y'"2wiܪ4Gu/သ!\k^r~17#1^DF̈Q^QRv(dۓ#42I(\&`o\n\Erɽ=Gfylg,[r߃2#9a„ &L0ن!]EVZYy Iɑ,sj }">yqNⱕtp?63ރK}C !#[#D~*K۶*2PUs.6eID*e2}]P lޫG:k(ʡt3oС' n('E " "aO0<ևҴ+BBdp_ Ɵ_Sq\x(|DFdyWOøoݱTzϢq޴4N(Jfis.ncL/*Dʌy36M]ךkF:Z1 UUe &$ө AcL4~mLDuM/~۔6 RI=`;n܎MoeXzK9|:\OJ$gZ9Ǟ vdȜ]TD8s/LbƬ53uZ45Y۶8Yǩ+1*B%#um;=!'0G>V-rpH;4Rhc1٬Z-Ē qCYcLv] 1F`0Y!7C.ya{Gu R\ZI!Jঁ[RLԫ`dEQM4ECH+\64g۶>u;2./ uˊ*[ADqu3y*߁}2-b1YkL:1!i}^6I0GiXK&$%Ȑ%<84kCDvo7w_ISPX,f/%Ѕs<ϭSgAƭ 2 2K $$C%Dcz(5Oh|np狘\|ʳ3&L0a„ &|֝ت("=3hDд#ee MTWTuY#v>Hy$ cac{gq>."`E;MǍLC65wswfȸb/焙ک#0a„ &Lxv)2:, s03K` ;0vl% a SHk}p:$T>r2کNzG](;%50&j{BlU zwEIS46۷cѶm]eYe!eCTԣm[T=Q 4EQ84!m8vݨ)롲̬I^Q2{ =DKǃ{OLJ.2|uɭFz3k-ȦcHL )х<4$@FMdГ,Ȃz IĠړ(3Yn^͈lUͻ+.vޚ,&T%vCpnΰE "a粈my餞0a„ &LxCȊ 4! pa]]%BF( >Jb@aQY0`ɜ3~}'`1#DD5W56yN@W{cbw*MGd4("2(1F?6ЬqgunfY^] YY`l5TY\nYQxԝ/gUUǸ:[sQUz+<[_O:/M݅څ۶[3JM!rsLStD$/zԌDm=39W D j֑t5sd HܛN %XɆ(FPXˁ0 )Afj(@tLu]|X5c`ϟ'P`sZOtH\(sg cY@@-j%"BsNg޳wh`FqjԽz]7>x6st$[wԶqXtY6hDcʦs~E͢TJkp: Dr/)8j۳e<קI۶Ue#4ߕf3 cm:纮3Ƅgk8Y['ErsܡM Y%_fG[";D*#]l]fEIna11.Gv H6˲,DiGvsҗ&L0a„ Dv¢Y7`B.9dD6)DD(`?oF&WIvҚ^}kl8w#CSGy!& s'}<>Q̚,˳R3u!s.46e0eٮ eKHz;yrl6iOQ{ڢ(2WmEDl69:,c1T0lFhgZn*Ah#"lwy Fl1I6ד+x2\L&)vόǻxL&n;I^ꩢNJ2>ȼlKOGxKx.JowΖeiͶ̓F ļpƢ曕{7 z>eM? V驵VR,Eu<7MLUT\s^E{-.UGN1ST-)X7e󣜢5Ǐ/y9_sApyvպ>O[m!Da$Ue&L0a„1s݀g@$ D)\H Cqd*'3E..bI;d2%` Mv.ྡ/{qdl~u,]g3<4kWVeu~uM2/+Ӷf,˪9fF/@lu龣sy1.Ď2Wqph?cқZAɌ11JReE&ڌ 0c ^RIvZu 'آWړ[8dOj$04}31 eZBWUs'kZ#5hG 䶔αˠ^ IDATqAL]F`yˑ;cBiVm.tn'Q_m׉ѠAB14&9{tttv{U(oIwuGzYpI|^#%y;ʲUzzpxMCnn6kvڵr|Rm6ͩĕ]p#)ԹMXf 0gU}ş~8?6t. ]哦|aX5[Uve}wT49,ֿm6v0a„ &16 EDb [ߦ%=2D b䱹e%Fo !D/!" ws ;Kǃ2v񂼧oO[]#C> j۶ir^z !dY$mֹQE&Vz]5s g+aw8Fc3ѭ_]Zp۶fy^)Xkj?c GEr6O}(p؅3HF@D@X dA@eJAxi)ӑfԎ7v!R9cL͆8z =53c=:e(D4x$fD%8*>}Gq][y{ Lw쀱TI_A;H<=}`U!>v︝0`j\_/1hfeYybAzYfD(r$wzjn\o7s!9i?63xbwc&>.P-]#mrS71Ƣ(Tձi4Ͳ rfdlV^3e\1JЙق2ֵ_B6Ye¢m"ƛV1sN}ۺa +":D,<SfJCaHRi\Qj³즤tn}P-ݕ[UP_FS!/xpE& aIQmތ݁6cr~a*kbr"I!f6(Hb,2%75uKTW|&(;<'&lSR 2(وE=~<ʲ  e.zܱ3<=Z7θzX.v]_e_ֶVǨ~ ox1mo{u]f,NOOg'խy[=wW_?_y\ fNl|.}MɣX 'Gٺ ~q˺;ni⭸0QFPtܖ,R7uf(w{4yQt]`t„ &L0# Ɋ"jhXCals-L ja,a> 3sڙ1Ff]}))GH5rh7wCB:y1qzfh0yyfy^34{WUVՙj^w]wvk)|6sͦ͋( kmvTEٓfu-4M4"h "6c_.& %O{o7/o{W?OTpg~擏lg~Pa/s-w>wsjo䇫G7xq)m@6g{&L0a„ SAQv〻DW5E``]cdBջsW*C"jVvp[AKd f|rhVi,M۶u]w1E UsTtM\/XT|ܬo(NDv[2Q4u]PYYԷ(*iRw]׶-Yu]#cLeJv$dM${\l#FDGXc " A$aH@;m @!Di]R v8ƤFbmN2֎GExQEQ7듓^$Xk>9=:FAD\ԝ+ 1rl@ 3 FB&1Ջ9胤t`eJ9B%٢%ĺn5sm۲*f9J2[)hϹDp =~v,2U+J$=kQ#D5)Qй[^dhnBD2}cz^WUe3"du]e9" wVJ߶asAR ݸnys/ !Us* 5&YҮSAD+CBgmj.ϑp8FF(e~z&$y([>^*C9ZSw hl!Dj;}=ͯ~qCC/|{?m_𝏽ǿ3OwtD?q}=oG;~_3~ծ/|?痽han>o?Yl_?u]Sʶ>9/ &L0a„7E2GBKd\2 1+D1PD@4L­WufL}YMCdEu1sfm[\YMj z _LVH`dЎc%ll'Ӧ;or 2Õ2x6x uB4cmY>Mot/+8*O=F|uzzʑo\331hB&ܚiic#XD0 WU!tm=",+꺮뎣=9uۈ}Y AGB,`p$M@dRL@"zGll6`.#D$%%K.3}h  V/֔)$;DD.3e/,4b8>>&<QY* RUl6+2qĊΨG<,4Q(q4dfl4UDӡ؏#?DFIJ[{)41ǐfkFGVC$@Ft TΘ%d/&0R{Enͮ׵":j٬cl}m卧jkm^cYjM9x,̬#̀sN;qO&FQ$"y߶5, f)KCWo߾-#< tGquϣQIty7M7c?co|7~5yͫ_juvc=vQ9]S,_/]E<)O]_fGkMxՙ=q.O]5/m ^{j'7%_޼GN݇+|YW&{L#2w;Jػ导>6wope1β@iw &.#03%5LaܶmYS+N ݮ}#-wՋv8r1'/**)kޭ .4j#j]dEQf"WuPttt껸YwM-DtIq뺶jV5l2͆b͆U`Vͽ"R׍0s]]c mrQ %Clx'qo/2w-䱿ϸ3 ZU}(J<ChAE-H#5EQݬ1׮]S4*+=8yUmc mc[;Cι, EUIEYFo A(t;OE`ރ@J(ufz(>Zh9UMdYC0EQDDr(U1.q~!>xLHps__++>3>?5ߍ>__qQ904GܴoO3X;_?rWaW۟| ?Ŀx=Oe~ާ}g~_kC/~l,gqW|_,_obT9E٬' &L0a ɀB‘ EonݫwV0,C̰lTJSUTƲ7 X'5j*p:G 8zJv b:HU9`4jl6eY. ZӔhXXVo!e8"7dus,T*XMӔe9-[V{B[,K%r~]3{Ƥ߷A?C PE@"HD5S&p`]bܙ9'"ι%\1/\e]ru!"1eY S~RcW "v{5QR0`6pO "ҊDӑuC:CY \~EuCjkꉞ:?VR"c6AbVADcz"rSO;Y2n۽Eݗ`6՛su]ۏ2|8^E~w~rv'rJX]yݗ~OwgrчW9..']gy¿?'}ٻ7~?yJEn6ko:9'oړ٭O|+wymqn]a2bOb'L0a„n^#`s0vA3կc 6H/0wz}4Ob:Ok(d؜N2;L߹93fxNLlɎGɂ "2,1F5/zᒺi#RQT%#q1[MXUUC> kfƘ2UU^`CGGGfnynQu fMdU20s^Ro61,+"mcD2ȇrEyKم 64 "İABpHlLqX:S+*H8D""! l6@!<ϋ0sׅ!o-p40 6@T8?؆BAu!"ubTVDe)UzUܐRQ;μІtF EƸw2,ҋi2 i^,˺麎%5{/S!hjno,9uGҿwIFVim\}3뛢n|(5̹es셻0a„ &%^!*Nj"l$/c#]FBQ` abP > }Qjya1r`m.$D("!pkTб;r|}7 אpǨ,j/3sBh@CPnB5"z6u0gցYzzo\_:W6M2kS_\eǶm<+Qd,W:ư E C] "k]_ՋPs\'0MgԾ~ Dp;q4BHDsCUF !wcHjCAQf wh5=dc|1F3 IDATP-(ʌ-rv& 3<='4w"jע(wZ7}udeeYmo m\;N?lZ_onWMS5[kf,C 6CePnEZC(DI!x\dPKA"0379c2W IY 1" 9@#` d2acHS6Y€& ָ~N=ӈvQ˸1Τ2\6f{ZM;l2 H$ꉤA@18B~1Ȩ6fYYM9皦%tS|90rtw@辒/H.6es9sɽ L3ss+Eucι`Z Vp6i/k!Y@Q4ֶκR!v 2sy pۦyeG9wM:c,p q,Z*puӭ|`g>UܛdtH|"= 4>a„ &0 1F Bodfs @$uW匌 & -.MKDRɋ1ZMӈs9(h co!b`֧"lȎ cZ*oޔ3 R")B`cL^Ӿ&8 !զQ?fP OkBba殍Ε<'Wgј¸fqg޼yw,R泮(*rԝrSeCӬqq^ϼfއA **A1>˘c@$ꚡ'>^#!g:= `-FPbQ!$A`Pjbb8c}neRr(2e4DM VnFG(2aLIHDA0꺮mۦL檪PDDGAS\ΒE<_s]c$J m!:gwKu9ܮɻi)xix]"= [K± Q.P -.ay3ϛuDd; ν_3CrL.(jUUUʳB !B89Y7"kP')ok]}o͸$3EOcʲy5q-MNěP3)̔z_ Oݴ)t5u[ŅO>^/ &Lp? 3a!+H !D+PD `X+1:cAWu4bʀMٱlQUL`?e.8߇\Ь1ƹe-ц1ān:|5 "6T3t_-}Dr#^)|h<7ݼyP4MeGZgY ˆ`8 hb[Q=â6qTo_d8\6O 6m0IEA$%D"ЊH]Cm' $KXEMXm_7&M>%ӟBw\*:Mc1GE Tuf""ԒB#JDF-1jv^we„ &!1&&CDCNF*(7FA5@亮 i[n5M_1nlUJ'C`ө(C^xAo"ï'DHzBP;cd"Bc7ȫ(XB]MA2/+u^1Q~\Pwze٬֫m[Us{^ˍ%M,.IU::mg_l1'c0wiiӒj sq"t$~Jks\df;/f\NnT)vXNT߷} Ah [ڍh< j>ꤌz=6-@˱ nx 3˗/ǻg 9*h$F634Nh!sڂTM~/^.3aK)!P *0^*j:]%! I܏-^?t?}.FyYi}w=?$^;v~=]$g+[ Neg(3*B2@^:n TgIo}<5`OHC:Sv~ofu8t~#4#MK Н\^}C Y%_ SAkRqXbŊ_$*a⇂q ]s43")Uv]E1';Tլx<};A m`9p]Hqf^>nVϥAuh\l 02r8Ap\ H~ b)x)(]u]cf$RT+%ע"NO)L^-R39!M-Rf(M>kɱ]xtW`iOgU6/`hνCنГۃgݷ.8xLjaBh6jLYT@DF6C4"# !RuMql!d6^.VՔhdB>%35]qtFfUUͮוOAG|j4>tIMђN""R4off`K^TݷR=QBU]E6ǦWLC`wwGDhx>x؟7y@|swߗR\ᕉfnw8:=\޼o.z9B:9l8q`o61j5O̮XbŊSqP_b""0Gz75BYDgڇaK[8/yJ8G0+{AD-$O܂!,w6u?p rήb2"^Q7ɕM7}Xơu4~1YS1xqs>)%4aByߗZsy3Dd3Ug -s3d?$< Լ̍*~BBz`gCeDSm7`薱`@P4e[[4R. g bZk)c|>{Nt:oRp!$w$u9(I5Cnp#sB fV\룊1CBnňfV/Ll7fS靫Gq3 TO-G5ߡ0ȶoo9GYΊxhLR+=I##l/'>ttU-x,սH糪vaf)z~99nخʹ.{;cʋ7^J(}цr?,ϾbŊ+~sEi6801 *Es!h$"Px*Zc-ŝBk9Xv]b`+[yTJm&x={ h&?o'io2:[n4R_q~u~pOǂf9w]l1w}ߋڥ^^uEU~AU^}XvCY3'O"i˧+俐oהj,g_s@(}bfZUM)"6\1ʼn{.t]VZ?F;tߗ'Oޟn׏W-4ɮW*q,DdDD&)cj&gicNjĨ3l9@E#iqt=3ial"_]D4P7h cvyɗ]w30[顂nYbad}5'xU9ĮP*F qSJP6KR`= ϷoqJ<~+~nx@t(+VX6"?o?Rv(sF&Z).i̭E^4#0cr}R͜8wPaDu""Z 鲽/O:1#3La!-IMrX^XN (Z !("R:bwD3isRJ)"'h}R߷ohq(o7~ZjUf1!5Vno7Hy,@qr.UKUDJ89!!,ɼ4ˌtFmx1l}8r.tZ`%}J 0"zAW ؃6m32V.\pN@TCRHD8}JBfS,NEs1vy圻.&cCnhE%wy߇@8Cx|>m~?pn 7y9看R?tA Fq_ f f5٤˔ fYr |YTmk)M~;DMboDb/r'A?^y圙TШ N j Uc \J&C`0$Y=""lS0?\+'{ {v)0?Bsx ]{WL~ F4 @Q[?~"! iCRC4SJN>8jC4yګW/.=-8}Οk+VXbŊ?>nZl$R%Z*؊9ԧp]6ZzN0X m}?i[n1KFBe UU X4Zv1f"RBYBA Ey""zr\.ު9gv 02l6~e(RD40R #0E@JSm B'ff&& OxgNͮ+טwgk _nq.R؍5|cE>6u?3sHbDLD1FST1n!8C"R8~&!@F]oPDjminmM vVcPձd@`Ddube3a# nwaW,@DhĔͻMI)WU˴|]=rf"`%bDnPMiN.>>?|D:Ɋ+VXbŊV0itzGbӔm)MmCzrU&̌El\MaıD3+O%p0}t?V3S% ĬfUU<5 􂔢" ("1wMEv܈$sK/^xy9s@{UR͌椇xsi9lYoSs%ݷ_)Kpf:0wcg- b}gD81H1 Kd3`|)Mh`0ej\kD%J9q(nR#|V.TtwcՒ u!YĘ#""QDU$הxNFzGI~F+Q:ӁSOTlVUSE"r' ZmN)ɨV 0qypOƠ<+V|+V<a0jL\jW?ζ^kUM.}009yGRj pQԲ]a#GZp/u%s-2okUu*k sRTۥ IDAT)ETK#oo1Zwow>4 rtB$sK1SfVDJL-#es-d\6ʽ.sﴄ n s<=8?=$EόϽ惙C:Wp$%Ճv4n4ԻK'x\ۜdfU"T"(R5[ yAeI [ ʶRD*#ժAD{Eq+([_xqF)eG-O'kp* ",ovn7s3ׇ}BX僝Hs_j80jJlSJD⻭F̺#r`ٔUS^EADPk)93gquoY0u(l]m!*r UDvK0R28g:Bc̹fAdgyc9rl&јI5 ?o<Fg dqDDfLsF "pOefOcѫm"Ndcoo7|}?g+>VXnŊ+~!PUc=F󬍩*@KQO;pʠUTa|mk$!UiCE*""U5AJ-hԉ|ĄaȻMqJ)^utV1D>S$lv2":DntQD\.DR:/12!z1u{&^-УV g>a$DZGaˁ1cE!tQ 2t"Il}u1F'&;q+hfU_~6ZF?ڐ%"U0B$Z<5etT KDq#K H@fd̥~0E `]r.9DZ}_Dǒ"tϣ WLnTazMATh,0<,fLyl`UT@D2m>>;/y<0 l!1 nUh26^^B h*JD(3'!x *띜s#DS'ڱ9׾a1m/!jTU>mC|rs{eRm^ޗװ8ՃZӈ-knz75M/6\j"k3of` 'L [YsXbŊԀ MQL 4YZTU 2DC`N  L)z @ׅLd#;aafo޽.!^Ηf{s<ީZrt]R!fObw:X~_Àf\/CV!Zy^m.eh뒁 y>*cJ$"Lf̈kاw3 (3i "T@䜳Z) $U+*9=&. rkʏȽ2u@3;n{`bBD4UZu.W 06z\K6SJ @%XVD9(2i/C5eV i4]#a#VJq^?TZ5,XkEĮy/yUǺnYD?|:?^5"#NC7=WXbŊ+V\˷OOﷵ4m6q ̬ `sRp6ߎ㸜*ϥXz:.ەRUΛ 朔RJoU0/};WBc$"D1'Pqu DHRJ"]'ŠA.%BHFHM7CsTl@AU "wqFaDRoff/HzۇZ3b R⨪bBClҦZj@Dha&m!ء1 ;jĪpMuTjQ ;>Õ~9b( 57޿_RJ5g?Gkonʐ9`H4a }:7])eQ}qS[F3^҃'u<|2X9>{Q@Yi0݆X3EBDFj/۬6:'Gٷz?]@ī')ade:VXbŊ+~)2i9\\sj!1qlh!R3హVK(8H#>pQ Ïsǃ/Kf6 ٧޵fB8ѽ$sί^ޘV0ΣaLAdREJU3$ D2-+UL\`6ߗ!ϞR.E Uբ"E.]틾n67&PJ;w320Ů'RbBȩεH?N,Ç%sOgdSC#5NJ+VXbŊ_ Ns9lA )ݫOOz<[:B>4qdtD^["FW؜^ oM_j>P:V˹ի <~Lq.vX+VXbŊ+~LSFYO*JcxEm^<j ~.mpS71}r o^,W_v.oRU-S<v۫ PJ^]= rY֊Į(fgf+FDDȔRISZDE#a$D0jURJHM!R @8D#&6W/nS@HuIUa8ߡ PlPoΗ9Xh%K.&) 149LW3]_F9ww@[3qfo6Rk@QZ8wx0s/GdOgfCSTJZa:7sDD QDav!!3pO0 09X5A}*]cHtyyk8%H3q_p<]l_ *DD7ef"v/"DT\`jW^?N6BsG:F㟅+VXbŊ?5BS\/ :x޼yf=d,xhWS]ASy d V9,fq7.TJVqBSقZ (TZBkf+ႈ6{Ij`S 0!ZZtDhJfPUx/M_w>T_zs 0ᢂT 2*Rb"LRs"(*67܏/w%#]l~ wwEUa8Rׯ LUl*ǁLږ&hb`(M҈ 3SPD2`2Üd8bٽ?-C)\6F9^.f;}!PJ1D8)tdv|.ƛٜxny? w֡ s[]9{Z8UCjDƔ0{Lfq9RJ̪Ԯ̈]w4xFl-+VXbŊ@̫z {ރc=NDє[т{05.o{fn.Cf3[.AJ=""n[Uq(Ulܨ:՚PJ)3# f2]x 0OTc=5 M хF#Utp. Z_~61c(ew/EJ|e HšZ8RB%ͮc"U @jܜڼ6ye] VwCvo6_lt*l:"gXڀMfs k!?~y *#Gh""jqF@75UBpbOT@5TSf6)PjsJ kpnʼn*MԔϲ`>D.Xl@Ex/){)|Մz̞{/TZ ⲰT+LؔCu(uMѹbfx\.15bc9nw<>sOn_y+VXbŊ_62n8Vl̶mb8f.5YT՜s.p}GMlgg 93n?-ăaH)t]7 '}sy{ qc~CD, 3S@eB+d`7D oޝƢ0z`)*(ZK] )HJDrZn=9;>ZAd,@yYϚrx\y\@dM2׽TjlJ6_]Eͦ'd2p!ԪC[fͻ W^S;}F#z(\R04&" o߆@nw1T @ȕj 7;0f!@1ʌ'"r 6_"UTK 5 '1ѥhfEx;z=ߔ_ L%>f:Ř|:9åJ桘AETADDֆ58U!}룭_w3إ. /V ^|_m6C(9n ,Z.GcU) 쒋J  YsCy|)"Mq0߁#ju#Y `ZU*H.h"^5Xh  @3}wq/d0hۗ{|`"mU'_a֜su0 `Y]ؓ#9RUOU0nxup!C \tXzJȣt.NDef3 G7뒩x؍d E LP͊ͪ"!!O[ Lf"njffV Ko7݅*oW(1fsR_7oG8gD413;.RJ8 01gDFd3=r߿xqkՔң̕^p*+4 C 6:䘒\aE8BWn7-Et*5rSP059SJ @~8>Ag30#*>#~+ЕMTuV(޲|g"2@%D+ul}8n6Rzoq [=t&h%qŊ+VXbş)ڊ7KdjTDظ_q=!4vv;71>@{,?-pOv+VXbŊ+~"nPW7Cf!=/0+5`e,'6nmf<&+M3\*}B9C51|9$cf$cGCrF&@UT5ASD4` dSO#bIKӊi9H1c lz{1 Tb*M_߽;l^.#m.s!Őf˻]>^i/糈"0Q? xWW؃湖QeefhFjs-ETՋmUUDEcJa\.9/^#2bJeRT3DD ě Q+fbWSt΃1!:Y fD "R"YK1ZTcAjs^sI1,3A|7v=ĉ͵Nd1k812sKqRNJJv^·o.^{˱|-w9XbŊ+Vlŏ)|1F戈ZkSx l#jfY'HcfJd6vжԢV7}ZXs!F6H "d@/r٩q䀌S)b0?Ë/Kx0|\lް=,)8GS q@ @NԙLr$# 5#QAD/h99Z+”7e 2Ch0A8N "U;M*kN.UEBM? Y fSxրgX.14?i$B{DAU5,"> |ww̤:m e ^:fUs_'=?` 'nŊ+VXb/ xVq''5BHmѕvuxhՂݱs_Ԅy hd< #B@̬*R4ރpbLD$"۞2%#L+HSOV)-cw}\"cLW/Oݿ1Ϊȯ]}{Nc0PܔRD+"0s@E7WJ t̉ bq1W!LxP*fh1tUwSpC%Z}dkN_˿jd uP R`A@ UQD * $SUEbfdZ+3HfVt]BZj!@D!R*"إMU EM g"Ú)L8Y:E!B1  0"Hm9zbX{f8d4xNBOYlyw!A kLw"&JdDXݤbx 1vCŔ/v:˗JPjʶ~7 +xjo^j;35| L]Q*![B fO`hjpU@as2V23c"!φ}XbŊ?cyJk}^$⟁hD,u81 7"##@+`b'`]s P}~K1ׂ ↣jfBD2Tժ˜M9KX|e1(!GUeÔv#٨cJIChfRKH.ńCB7mEo0ү~s~W!ſpx'}OZƞ_wSqw鏗a4"R=rD@9m >hGkSō3C |jى#rWjS#*].EeN777^}lVΕk\BPŕ\cM֠DDHj`Hh M|4=9d*Jd h!޻k\̬Տ陞c$Z`8 "?e`Y AxcD{/`XDȰ/A`k/f 6!a%$4z=}UTW޾3==]]_}UYYY9ȋJZz=3-&'i4`[uךz_zW[ Zi],[BYWuhz!MxLE-FN9h<i+Wؼ,0dH92\x#z4{ϞCx^eyeaC?͋2"bޣ.?*rrd-CZhtfI3%k߶BjBmqcL1Ţ Y%aIx"/ >$EDrUx"ΊqY 8UeFs7g9\%Uu, 0"&UXvt币1+A6%X? u 8`BT ((Z{am,>?LJ Wayʲ|Ry} Q"Ƶ֫h\z|g!mCU9*eYWNv5RՔv[/<9#`9@5"b@"Ff "D8FA֦ +M^4VΖDTII,JuV^5ʁ x8G`7X=8="B+pB2V<[(7a4`mmONlRl^^%0@2g\y,b-Iߟ-ʭ}[P7Y1'뎽+b:t0T5diY()I%BH&9R͟8BT b*(<2 #* !*7DRQrHysYTTWLtf3e=P4_ldrN| *($U%\$\96u9^Jh@q "mkj@HJ9n޹H Q9~XBGe2l)+i=[ioܵt[ 6= !z=U'?9O/{p8̲<́VC:@9iN[ƿ)U¶Չk9 6 ݼ9 46mT6+HYbIBH HAp*VUXAeZ 8prDA P$NbW\q=<;=h,"W>`Sמ~(E,`!dZFe,#c+@&O:qJ9)Ek 8TfsTgyj8yn.l!"[E TxP )%$ S7 'I]UYE]Df&%"`LԴ!Ik]U?W$ͿJZe@Ui&UD8@DVBUSp0$ZC jYG)T{EqsgAhLʛoC7r)%̜ *( *(@HY0 HI^fngD6B)%":KB_8@1k۟'www~a\KҡCN[_U_4 jR_nh/562J ۧי%4SjNUYTv@XLD.'FY/7yrS2KhCf3c=;·<FIxw88?88O>>yao?? 04Pй+m;݀ ߜuk>iioֽ-]l6f.\ vTU'{j5K/|̮Kf y(D1sNASYH"!x=s"J",s-T%+Gj$ *0(.=`$TE&[DD,kݲ+$DFVa+n-팦{Bڃ㽷= .-JfeEQ<֟mܼX9P^C:(D* 0(&WU'F^Zܱ:tp NY7鉶JXPcY7Ue7!3ƤpNTFRAg(NipHP@V V}zC//;?H t8!jI9㏘ŵ.6\[%mwYPi_i;W~:e2̓xX;w!2ja{}"x%B3@d~掂 D-8 CDK,FX'd&J4Q4Jr@ʲDD"( (SQGA4hs"d|#HNd\*9Q$-'K R(0rBGTB D̃@Rݑ 履7 UN?z>RK]^(6׎? +$ Rr@@{Bt"9c{9hE97f;ܹs !Lgc Ho :;^)v!or!UU,Lm:o=Bq]|nLI/ x=3+@Qw -ѵQ}3u_h^Ћ%7Ʉvn .w3oEB|K^hV{nc}:tСÝf I6RP}dliTDjETs> ( # !jyb b1 K}G9pߵkѱhoop=ǟ.Yb,AU2V_ R =F{,o@NY_3Ԕ+X,{<QY SU(G0Wt6Sr I NA$މ$ A&TRW[WUf6Ơft0cW Ņ,MWy2~P-ZUMT+2AVJ& λzUIΣ-6kklbD(X zy]ŴW1*18;\ŰFRiEh(x5~RfT7:ta͜Y6IsTf*R1ЖVnka%+Y e@4{!%QPeiz(QU}pu4[| ~g,K)G}O㝝x<ty/b `.і]͍_NyR g'MnkWٺܲՄiwkȦ[ (bw1s9cf3OAP+ 9D\SKbR9V ,AHE( "("B&h DH AC ;^6nltgR%arm@D!"DjBn?F4^*$l IDAT-*XMգKF1qu&1uLm.c(4AMZӞADtHc[9̂LYyxY磃V廬]`^[T:p ~WtСCMA|0DM}jNI/ޒSX5"B^CTЕRM l4QAQA!DtP-k9ezxx슦:JITܹsal e&>)ǸZ6<6h+κa7ZNJxCE6VQњkG>yKPU )z6͞4{J`hB+HKسSUT,kX%ARe`FD&dah +~J*v\ `t"6\]/iD(sΙx @pZeQ!% . jioSo$KVlC1qT ॢPhFdTj>͆FJ)Bȳ~e,@xoooX؉޹,CfISyQa6TǍ75鯒5{ot&x:t)lp[=7goк'mT!,6-Ĝj<@tIX#DL*"JZ'UCE!+;"d2cN{{> ""eիWu噹 :ﳲ\ER*{_MeYeY6.i?Т6vog9FvS \c6 ?jJ61x0FEQN9-DyTa!*Njj}RU"%%ӃM%'|`frbk,Hd.RD}sb̅ey Eq *z#H*`=P= @U7U3͹ʸLUE}C)-9gDyd\,#"*9T`oo*O3H)%D !@Ygy|8W_ta+j7ѡC/ӿuVڡC:l&?ï2=ZmOMO4=f® (Zyv7֪H揈hEŞTB"P[D@y Y>:N6&!Ń';;;y|E*!٢&~ gӼ߳ZYnо/]__ٛmYƆVj=!3ʲ#{O=Z<< -vΣ)DQR""rüi94‚bD:UAU!Z*ucX#4Mk/* $X((`RՔ19,|W8JKe+AUgQ6Gyf}lITUDۉ,NsJ\(6\,RJ:9UdEłbd^!o&/{Rh^vVܖW^nZ'@y;+ԡCL4ɊXX~nQ'9m&X٨Ҫ@/碪}Rk@*`uEQ=j"MLi1N}0/8E$W?0N7ϟ?L&,Jeshnǡ!I?WԴ=#)eX6 07hl&6-9cx<~{ %3s"U|85ŒUĔΣ#r΁elD," 2hp=P es@NB-@aI@v ""N$Q"OD"jcg `*+ad n-=k%ֻ q5Nk h9f.X}Y"bGADþ1z=Ȳ f0Z$1@Vl{4["n9iPm,:tE:3jLt&m ֭wW&CT3@1*؂9M4k&+R$eYWUptxx,vh|ctng},qp8b*^7gOdOgS}ejyo1[>:rK  :kp./DL. #pc(6'E$TDõ;RtR20@UDRDAI==Cii4 PRNpQ &*Mme+ (8A+%[]7D7vݓiNVsH$R Jب̙mC^xOl2?DbޫN)y$U XK"*yNUl63W7IA[غ 9$D$ZNeyvh;ts:ܵPl0\w|/")fr<* 29(="胖0,8QOxsN'.݈F: p 'q2# *` qz**9% ,8B$hQ{;tnmLs֪/Ȫ "J lCM$і~mڰV֒Lm9pIR,)" s(ly;P `A2sNH@@X,J[+ pHtx8/tm>18^z$"eKJPԢ\~jJ/=sI "qX#r2S}=70b)n=6_5'ՖĪLɌ"s Α"# 9u@pD$=$J)1+j=jnuK"=9J[T̜:#8d PT22Kʰ 'aSr!99mͭ?ե?Gk"ҰNUź8V&ZJU#Z9kXhmB0 1~/"@U-u74׏b1 ,e<X|ԕҍbt6*&;I5?Sr:U+y?{t1 .Z88tN~W*ٟ{o/K_W͝{6P>čy:$ӌçs?xG z/=] v^-=}&AMMY{r׿:tp7amaFd=U'wjۮZ66UR4/ cދr5:|^`0F1Y.ZɬxyN^KҌ7?=u㷠"EG2̼'*J*QER>8L:TDRJ%*TDZo0,˅UZ$$q,> b* *FhK*.ݙ6z\-*"1T: (ƇQUhSԒQ @ODuO+4M4u?5CI=o-,&-Bbko^LbCpܑeXbeI)"\m .]bo=9$;S_J$[7 {Wi.EMw/g y7|{WKNofǞ?=-_G^;7.k+qKƽK9Ο9]}hv{ ~"y;!/ڕdz\,z(y!a^Drzq{աC^``- `mJ>,p ˘S=M l6;EW";ګ1m($jj#$%33s.L&qrҥd2N"phX,e*DUpdzMHm\͵-F&?gYY^,3W2Tc:9v;}))5 }6Ϻ7zuv\;}槴 Dރ'"B'@PRJbœ9JbI%I,c,dI- :^sBȃH9 Ir!X4ufUWJuAUPy]ڣƪ' :on*vq9EjmiɔkBβ&PUJGU/ %h>̬1FS<0ޮ Dc_6X ֠][s_wp`o>9>f;a7/_*xp'aW78~7y(?/o|xngpm3Ϯ͒ʅo|[1twԻr~eo~_|| |}_x3n/o||_ǜƤrЃ>en:tbù\-g5Lۋ|kj7[M\|XIE95Zʜv"xX{{ϟ'bd"ǞZ-CjkfZ\|2ZkmkŊyskk,-on<ՀG_[U4jJ$"1,QT{@ "GVf^:,"b(y[%xBf."b> P<@ZHld0:q^G:1G[3n *?V܌}reJNuۮVq R[@Hhu^tj6^ /aWoyh*^ZT[/{o'sN"2wq"bōoRR'p7ԪoӋ=75 Od7GC >;r}=u8{./ػw|ɾ S??OЏ??}e%)݄:tED  q,W: @_ vs6bb}>r%uŜ!w6DfEL&Yx y@Y.0r"}V/J$vciFƽUX͏퍵fVo @feb˹H )(''ZY DD̼.SE !.kw4z5,TЅa8D@*+ۚy,UG5!-UIdc4QCѻQ0)J3ƛTY4Y fõFa"_u:#Ay֨ۼPSa}eID}Kb-Dḋ6ZKuoO:fYFp9Ol9_/޳= ?k@KJz=e`+" "~N $ȝG͔A̲ $d$,I|H`N9*1Qq9s@RBnPEEع) B"KAȉDP"#DΐBƦHR`^dM?|OUA-8TXef()@V؍SiT?79wRtZ}~.6j!bšT1rS5@pELMiӆ!gL+RNXD~eaL`c%|(!ϬM|TD0}rs'~ü+R|y/] X^(-=]IBPm"zYnC0z("^t.c)?7~G??7{مl/c^N_Y-x*Y{3UtS?Kg82AK]Ѓ$5"J i,-hڲWɹw&%iܽۈRTsiXK{V͊0מU&rɡC[:mJe#T9Z:֮Y;@l$+dV;0Dcm'* ""8) f'T<{g9Pt2JS@0D@DEz"@z3ffIQDB #tB@*$bixRqxvTO)"j=F{$*Kڻj7$]uzPEOUlz"ºb냥[@넸73Z/X!be!i2֕ ߨ2sY2NPD㩉EaV k6zKVvѮ^/wpPFYc_ IDATFGQ8Og~OMi|zxLbtmeHavb_^!.~ͯ\7s;z8<=/>rĸx}3=g+q#<8{LsG0<я߫yu#;?ۣaYPwСC ky7ki'Gl~Q~zhnd󔭅foZJ*X|na֢Ujlln͆n<Ƕ]k;Ԏ^x"`D@Ԩ D`>HyhŚCAɑAhr+@#AXЋ2.cR*D*IGIhSХ@!` :6kJBEk1PD1X;QjxĚU5Ruu{4!*[bU+Sh 1 ! µRIcIO)M&EQΎGyi6 Y\p殂Gڃu:赟(l>i^` (ip>g~M_?]R'+]~?}O{ǿ[|[^Z =ȏ|~҃o+wxEη~oa>W۾G'Q?`;N>'_~vEO\6%v7a:thhWblsX(sGn9݇zs~RQh,EYQ&EQN~q rZ%[zo|7N~n#pGzB4OfacX6E#@BRPB $/g#() c@G9y' !d1r!1MeLsܹP 0oX :,\$̧1HIع(( SU0aRUxl3g"\#CJPr^iaZ; lW!GDudr]pqUV .Pnv=ɽ*ᖇQ}Z,6Gy’Da [9K1!r)|^8 MQVGUel7֏kuҷ_ͻrw w\_"ɂM,Wb55%_H 0SNߡÝڿk_!<~6zZq_>Q](BϞF{q88Ea..8,c|iJ{d17}v{>ͯΟۋ1zx8.fἎw/?_Z;`B:tpgBD7~?QP"$tq7r{azldmR:W%FXz*ۃWVhDl': ~۟v 9}ۑ,QTsaXLt~}]=RUt|kV ],4?PL[ eC]9 tՃ }$8Zm;5Ҿ@EUBRU&D$oyV(- -AWeUe a I58sm$52|Hr d1(*Pst@UPhAYl  )n k "*( 3U& HA(Ug\T6࠺ hv2Nx[QeT*Rlz'ȍև5{ML4&zJ)gljչ,46u / Sr6Iuö(&X81C$9R^W霂Q|z@ x O^-;]ŵ|4D_=\{@%O/"ld>d Ӥboyr l:Y8L`V Q]Yvw'"tt:ܭhݛoB3-l4V͋4G uleu60׏6(EEd @EY1CUD#;WU`v6'ضns) m&= TuU_ūյF^@v[3iuqcc|cȜXUAI0 *IB3< 8"(DU^*F$ N RS U `/.is.OV  ydn@\/l)!"@\ Tķ_4^$缻y~s|~?7?]?|kWw@ý@)+%9O4 Oaa4}w* !m ql d֟sR?Jxaa]cO(ڲ<)cQ* %PMs s(wb%ϴ]}ٿij3awNUݲF2AƒY @ fA I^q1 hUuʢD$ 2R֌fcR 'M) J4%D@) rR"aRJy "Q$"kRA3j2]cJOB%)ĸ3{<f5eC,%l g6,i;ʷ.IYiTQУ(ܥ&SH2Vxn'i9/:c^t7 f6eѺiV4!\]DDRTRrMjH &R2&! 08v 0X 6(H`B`zR x0IX> 33QIρ~]jdjAĆTU1;Н\>桄}q Vъn(s1YTBfsʙjJ"""efv(lfUu;=74a("u~%<̋ͥ.z2aYg6r:^ZN!pO^fGv;۔PBhŔ^^B!ɿn4eAUs2,a9[Rreq]bs1ٔV.u ׅkP!!$!TUt4qcOOObaֽ9uG\|[V3hRb)cӐg6u"UC3ˀ)g6<) q&FYA9ӣO>eXϥ$.&1 eff $)&HDhfUiD32+(*&b!qD` R 7s̠ܞdyC.e^8j̚aD9-+U\TrkX]P5x؜ݥ f"rC~\y60U5-7nsΟC7>X)n1ʜt||ǻW)EZ^词dj,2Cbħ _'t")͇߫1L:X y$œy>4AԘy? qfÜ̆ Y2gyufkZ-H[/gybbCNb9-cy'Quv-cg˯ĩ94O~;|n@  CVH׌m;.% ..)mFdq!zKD4_79OB`fpϬ8"G粙y{S&0<<<8pyED=ԦsUD<RK-z2y B@$B`V^6GӲ/~i].4֥igdM x~,̧trFB6%[=h1uB{Y^JS_03h|kM\47o3So (kdīͫ.hy6QL̔݅p#0fjڔdQkt+V'ײ̊ 9܁J:+YlANS"sf9eU#cN! ÐR:'0hZچf$"ЮҗUes?z}>yc~/Xҟ|3l=t3&#hb} uR7S'(7rK{M5gd'GhZB%kӍs4@Xץ>\ͦ!YTuݢOCkߖƚ[L\nRvL^+f~?\RUo"i۝Se靍TqaNqRT`a7BqMdkp1ӛ7o0")8\]_yuǘX.ٶ(X0 ӓH"nKi!9w"drcfDafvuu.#Z^̔@ʗ\ˑ2 ೸ !j"EԏFWپ:N\fFB }ǬŖ?ϵrFCudz>u~ ̌+jekv^*Toj{!SC>- :^B6X!2\8K{boߊ>Bs)%Y%*?F}}cTɜztηȺ^Pj7~&zQp@Z3E|j*~DD&n:7 ecj:R21S6$;;)'̂H$  VC 2 %I`#R+:H Ỳ d 7?bR'2d,7PϕP<9bDV]RpIg 9<^)H)9i@D*6x-,)103vH<8Hy7=+ Tz<.K>.qO %Qf %T!" +puY0ҊI5j_o5Ӿ%TlٽޝotAku7[rx:ۇ맒s0wb.&Ddltss#"0ncf8q f\qtn4M.?p}}5\8F֬"|>).z Xu`J3t89E 7ǧ`i10 nB|ugv~Q8xꕪ^]]M7lV&*80d!Dqv~&AB,~0W1SәYEsȘz} ภ Sp+G#aZu.ctSS͓]T.q-Rgen5LT팈GPg69jUsSP=BIN6#]B<Ҩ$$x!smmwsL9 (5x}R;D-jFU2c? pl,Yk֋ԯYrLLEؘWDG@D$ Doa( 9[YLu.>/e6=쯟/pZq_f+g#SŸپF-33RJ1ay" #f5][i;K?}h,rw$  xהWWp8M_Ǵ5W)g_#fel UVe^.~G@j?6-[[poM̂nΏ@Fy2hs8@,lfEأĚcymQV& cmx|]cɈ(v>N3xBfU%5d@sYv^6sEAxT3P"HfX-#jOXLp/\KqsJV`)+RsN)2#ss{M_}4\9gt}u;M4Mڐ 7Vm@;c%~m[.˷j[>om*̆*9`9%Ru D; KOxk?+87CniX/qV_yVx~-)\TOM1{԰yBp(Ǔo<4~[C~zz2~? ,~{tnpn[e" !ѬG͛71pww777ӔGܦi7߼_Da9l4#}ִhיJQE;/ba "ab .sGP$ci.f&1FKf\N٢JCIh}-:Y>7b!U?^L?u|i~5{Bk@#с~U_2)\4 `sA_r6Tm+dekf;rEKJjPa%D1P3zM.6jveh<;'QDLZuBS"f5c fL 0:C&w[lL#D$!G$ "q?۷o>폪$M)ADGZDk;2̭vDTAP6-1 T[~Ieͦޏ/_)s g9qxC.===1Wy8r {{i[l fϤ_hf{me  X"#DDHK}ois=HUNTj'{a#0+Ϲ"ХXэC7L/LW,ϕ.*B(\eto3@ $ )W3|󃴆_jRD"asbAB ES&a2S5;,d^uQXd`yWi`0DsA1FeD{TL\ʹ?+/(,,Ɇ"OǙxxᲿp'FV[ҫqw<) p<AIy{u<wyfvf̓ZLh.6S˷.ۿ*6BfLp6UКTEurt.*^zi66UMidE1k ,# g4d6Ͼ躱~ZPtd4VpC"r<cݴw뫯xzz$-j?_|HSJJ3PxѦCLd<0<0)I:7779("ġztxj5W3n}^O1u˾/pDjqisgڶ$<"gH/lұ>̂Pf%Q83:G92t&Wm6 X猡t^,:!Wp EUf3.Ή;IMٔ-w0=\Y(*VCsJlLE7S DBŽp{e0YS,b3PY愷oӻ~|Ta8%PR;`Ƚsf2TpۭpBD+V2u͡sYz[lceiXM4: ˳4My )!n՚v7=pb147n2D8߹pb?(X\OCu8PG"z|||<WaEd/x<:aքz8 A67`1YJZ IDATB O^blVҔ+>1һ\U 7դږm79$1ӏop{x+ѐ1(4xQPM>,(2lG"0ƫ]aةkv?&]ĐHwQm0}]θ0M[CZaH !tf٭֔<.4i̼ ~I(~{ S!}buvdb~|]s<<V0Ф)ooos"<ɸqas:GjZB )Q6IMc!fю)7jdql#33`k_:K:XyRru)]3=iM@ǮjeG)Qp,P|U+.($X&"Yzqt'x\ ^ul +MHzoiJ|꯮X]Ҿx^PPRfɑ:U AYB84]9=T6cRZm9$SC ̖sYuHViJFd'Ƨʁo4f# mfZTTTsl:fs'l0Dw`Tf2%Rg&SZ "_l`E)ȵCϤ{3Lஂsv^)%ˆap*AAA4  %5%?wJSIA&03nybSGLj33܍1d4Jg%)M9g#4%FbWdI8P`f)T#F9b?T: 5?hV{m}&mfsɣBă;+g2V7BPP|RJ)Ŝ,dŘ=0+i1.,:/ҙEҥ>m~ZK5Cٱʲ̴AnxwwaRz7sg5HT#Z_}&AEf6cY$^__}4a1)?5w.OͿ˿1t=FN?y5ݓx ;U]bj޷>wLIEH9H\bcٕ̐p(~ {n|uJP!HξAl$/{N>]GOF 9M}}pX/-PVџ#2 k@ I`ۅgI[G](w '/.srh;]J+V/I]^%1n̰.e:Keh&Drp^~͡" b\b\Yϛ"L:p@v@D0pOϿ{MC a8vIjXsNznV|K|3C:-['Y.4-NT}iu]iKʷEH6oJ_TrLzN^"KR7..nG=7jtya1o7en궱~ hۺK7oF luYcQ Po9w^@)wlXkz47_bfJtyT";XҬT^ %p ]-@A(!A̒ LvD`j`f 1N`bb5Yj)+iq]MY0킞0֨6`T+8e%ps%85/03@*_au0 w-, C,jNsqmChyHs0 eN$`cd fNB"Zq SkM;5dN'3es`2i/ba0 ƾMqJUOP"I)y(/q+!'s:3نaH$.mq0ئ. (k^A^~=O3p?8faPHaZOOpDXퟏau0YpxJ)}W)ƸO]30>>>߿ 2vw{v<3]p .)2 XY8ݝ$duS#_0cvicg%#‚[Օ WWW?i[Y 1FfiHBDYpVD!L!g1Jun_.V vgc>[N goT>(}*q.}O't/Ճ%kÈZI}9fp|Co-͟ ?UVoմuxzrxFl-hQ?/ZH.oޕm.j}bUBtFD\d7r{a.4X"*TB֮(@nDDfJDDS( d7OOq,L=x\=f2ne8d/åBgȥ24ofT@>9g?תs:NfnIU\H[9g% fH^J['sr|hVלnups [Qe#r±F^܌wS_l?.tŒ&!6X~X?f޾PP b*(}'wC@ڢwoAtV,Ͽf]>&_6\:[ER$DFY5 Q|r%>H P"&f. ( `2355%T3$"Ube34|df A;[+ыÅI1#ddV?jFGak*PլqڧlDǜm?v !',D1!.yK!xt󴋞4a8snytfԅq1ᵽ ̽v,"ժPB()`-9Td#8: @w>I~/ffK7ٲAs (>fF.)@DrjS̬UWos)'%؊[UE 2$o&C+"b%Үƴ㕀.lDH+8BJ2 )SV"b$d+"fd& 1H^FBj:Ÿ S]K 71<&|0ԁ*"PJU@@02i7k_i꭪.h׌Ja9ȪXߓ(ÃHEd{&net1Xg4%ڟ14ٰEDNKJe"y{̹s8RWc&4V̧t]׵Xv}0 y@>,fu A@Ӻ#*c4!qԞ( }\s̞I6:#+LH6ǃ[AcY@g-[c׃ĦiD`vM8A? Ct9@Ym}}+m3\TfB'''7_.àbj_}v}syqw_]]goN$ ,p|.摔 O1Voi&YK4@>=QQED>V>MsO۶!em \SPìb f28k|c 7ICm٣:oSg4S.7@sG>\S\qO U#NQc8fXvFka'}PV}vPI#^oxdca/+Lh=ރ@*n.}Bth#݋?{\*q8muq ŐQ':k'iu*GB`@9:A3%"ɧ4GRF4FQR[gzfBLddBns_̴Ƣi)bvf6;Ebr'ӛ?8 mv;&v>VdwJ{|qjq8gͦ"Ke=͈CP3#q ({49&7ޣ hM$VFe6j 9wrr >j=,D{M?my`{xQi5AȮP_ihԲe)R`\Y^mR_dzJxZRKJi/,EMa:BFٟb1!<ڤ9U }._H'i' I㰓*QI1"RNTI5 vеT0\ D][D |Rm>SwͨRN_B "FUfS ( ɩOJrV J9J 1 d z!DQ4G 8o3,|[pF͊:p{ͼ$îhݚ4av@6mH0\.ٵ- B!QӴ#:#G"B"`8FW rl"Nᡉ,"!@@)LSn:e t֜a+[x(#e`Z~!*:b%1p5%q,Z6ƸyCaB`KΚ$3?3q+rt?NߵZ)itnm{Up5]Nyx`HW|5Ʌia @v\^]=l61jjr)A>}M>zOG hqfHS|핥mZY.|Bpf쯳nMU)HTa&Lu 4Z-޲ςE5c)U)*Juխ>vX I]~ y|.}/+5/{xkT;x%]#H0eYЬhA*9iǬߖiUB驸3psldX8ZME%F]z?'3l! Ym @Qa抰dRULo6)9@,P0sz)0[(n,_,`VAldB|DQ&iɇA"r}z*vX}^\M;ך:녘 FIݳ+uBED(GT3%p"+Ucל3CY~ױ]QtT9y) @Td XJ䢀RZ1W$5{~H)A~c~0R" 2 GkC-WQ˷UtFX_ M;\elH)TL<ON'4eK 6ߑ&~UF b4G%Q(Ih)oqFD1xU N {6 UUw"""x6#4  @Ԫci R٩cӘ!jbvC۶VD400sD#jX/7 B],fi& Bާw~WEּt+d)+ ׶m j$5JK*V'4X)qr@a*#ZSZ J {/-h.P>8FigO|=o[nr3|BDD <s2 "ƽZ:D=DO_BSGP]ɨ6z[h|GnHTBQ*k2J*bgVfNdGnw)"E@D՜!撩euT֐rg᳢u'Ɣ9UW*:IM{~KZY1%*PQk-ھ!DX$Yg )e+# )?%"P@) c.Gl<97ְ>,PDP$Q0{-9NQ!*"3#0"%5THEHdEhQ{ECZ8PP&jЮV 场B쭥p&KP@{DL } 1:HG^Hy,$e81i̊ 1*".aJ [iXh&m?BmcH9Վz7QKs@O5.BmỴk GLDv.k{_˕ #xQTM9݉H5SҮCf¬9 60"چ{{~B9$;P ӻ?۳) SCuMcC,nUqޟ_om^>^`{ڶ7UԪD#pqqW_-퓇`儻G=xǏ}[o~50:KDf@nMmnbۮmt]7z\u1ƮbjඛTx1"mug|X0j< |M !wM r-eDe>oR=`h6YaA(JJr0Щ]Qx~k,=_JT{.gVs{k?L~ 7s&._)Y\]c,9߈-G y` p{zR9sgk^'UƂbmq=:gÊ%%F3p2(@Pf}Q͞"l*kVm > ,&[5'/`hȰX'Oo;f@(FP5Zc|NH MWUB:a7hBn+.Y*lcdiNJDUᓟ@Ēmcz#I*I+3JL7XsQ `P$9MgIX eD6Qbfh~Y-cL88~Оa 1Fp A+jQ Љ;43=SF"r1 3;nB 7Z!D!3-l= * DUثdjN}EU9, P4DWVU0._0iLaMZ f"D.0HCPadeVb)APuIgpyyYT* DntmFAa?wͱi뇭0j1 pXD4ٞWU\*UEFq~`ffg㇤_%elJ8s1&̷k}hnoo0 * 4h~p5%k'@1$CĖ D!UMv%r  !hq4!#Rhщ4_o^H5MUH$FRD.7eÞ9u\]]-Uu햝KuDϋD޲[XNCwO?GO|?wONAխ~s4 6)Ϲ&@޳HbHA ;K岓88ޱ;kn}zio躆%Ss[4TWӟ>o'O]{:ç_7]4~z~㋯遐CqN$XMvnZV,0ׅk;*j&b:M%% xu}1hEںsxdD gcb/~A[6́ Bԓ1*iz@Ih@!"`BȈ@,rk ܠQAb$b!?vcaZIZD"'1}`V͊="gv*t} DTlnr]4[F5c Yt: L 1O"HĔ<mxȋl7E2-1g j&Z7.p@dic]Pגih.8] E#\Y7 [EU?⓻w.Α >DD s&"A/lG;X*(aLS>RNaH J:h)W!8)P~=FK0M6mGDՈ"!떖CDya'tUàm+܃cJvZJӘњK18.,Yd"5tvrH"@he-τȥ9b #0uaDIS( &bUŒNbIQzUq.ǣ'QX}= ^R]c3Cd$ǧ!9muB9==uj4Z1Y҈#˧=zIۮݻ/W݃ɿs7^w;_}{X,b0w.DĮ̎@v"ӳ;~Ӷw-@5}_KHDD._~ПĠm0slXX,,iaحk}!0DdٜK`r)/°F"5}1(s27owf'''!n"TZ`zdp^mv]5]g:c"I<8 ׎ -Sߔq0'M Ǥ*6M'F^J տs_s 5 {)90H0Tزyvvxεdm"aLMjhe%u]R WEDW26"ɛ(;) P|BTU'"$[T'jcڈfvhV,*DHz\,?a0FD %*xq賍Pu(vzEtO~fUbU qfc*L`!;78DL~CF9"u0 aHCLJMHBus^903cq-"S;_}%!I܉uk]YPFqm\ Ĵc4 H4sa!bH=HanXb*S~ߴ Tsz.3cY%XV&ɶ$Zp uSyt*b˥Ok\ZTU~^Glsb-s G8`XEٝ]8W_Ïo7O7?Gw^ w^ۿ\.}ahZo;{șEQoT%ƨ Dtyyyq@fV.ض{߶ba1_6[DC۶߿T/wG]׬˫+D.Y,KpIX"xēm73o[yXo6= qZBUm9oڋIJHI?D~.:n(+<}s—BN=Ո8̙$V@::"\fL)7`L L#MR\ h2k|NI eGh~8F+IHڟaB BH+1enH覈E,Xm(1O)*r4Y9sUegH<[-c:$"Jf7q^Jg"J z:F%r] eȪ6EW[f%1Ng+[[RMuY+S~V5ɟ(X{tHoZ"N Rm'NL)dRl6"1Q HPҖVUcmRo a,!"`ngjN+;a=QUsS ",L`,A] "2 et?YX,S]V"84瞘fRM2o]"PSǠrSڱ !9E)cW(a1E\ )U #:N"BPUA}jJ6aP=9AR]`dx H Ѐm&I=@KyTP7PPLc4"AZ/#΄4cjX9딳r 9J̬&cmmD}B݌zwbVq9"BK,''k"ni G/g_|n_k}g1FD1C"!mZ=b*kaYDD"3[j(h|q;+CCMYB偱_*EerLXn8,9x~g#9؞{5s췃`0CM3\E0IRPn&.B/}5+(O ͿʦN,rG}Ym^ 2vBD1p|K&“oClsj :*`rnTlCJQ"`(AYT};"Dш@{f*%?,Q㓍h#f%s 4(lEw =NfJ@h\10H-܏_P?# *Ʃ c_1&&n'@cc~Av13? c:w &Rce(ɩzշ's=xlSjrj CO^I۶-J2EOXIԙ6:a?ft ʬ ujS 1˥&[f}d,u Ve XL4:s?"Q$L;96Ϙg俼* ͩ(#z(Dz@= */1qBT)ž52 "F @@*%1 D$Fs`"gFOd %E(6UqTf/KDyAPƣxI@Aa/m ȾРяHT@PT![ Lb֫i{6oث 8Lʩ # 2 :/"a0Ӷ-T Gʖ:T(r1FPV^)&8-Xxv$hh 1UթٞIyʊ&Fzwrrrvvf)BD䬒h 1Zk0uk 7lUu%6DHH-/bZ E&%͎0ՄCN-P輎 fCLRL>15I%NO%)Iǚ)D|\۶~';w>zu^?~\.۶Y,]]__7MX, eℜ}+o67]`|NOEO?8˯>_]o/{+O<BF%V8YDk1FҶrٶ;O7m3/N 4jEh[p>o؝2_wBקDD44 V.ˇ_,TC3t^-\u.wM*+'7OM"%\/RVUTpxX?"yyаr$-= !>{cL׽@5RgDd B 5cӥ¨D5"b4F }o7xo_[WWw?/|~w?Wz (%l?Ǹ;nM2@T(aVEfA$tOOηKm; ;Yjn9=̄oûŦ^\\H1EΊ ң(x b x48bq"2T}|4Ue Hʌ"*/&h~G)0yDۚȮ NT[" tnrm.XinOozt[ P#j)X;.ZVMj0e4B5-ʃ,fM(զ 44gj鞍C+}8s< [DdǪbH1@DT @̀D Li zlVDS cl6U5Ǚي!Ζr6RrmF("Vui#iz$9#@}UrLj t=0knj5+ѸW ?@pDPE -bY_b0rQTHr蓨q@(\ve ,bcC1"-D譞9@{)u *hh J%Svk6kBT 3hRp hpXZX3'ٔBa$Qd݊} b48v1S0 l6;[gsnCDْQbeд}`nC嘑O#b)5f8nщ{"4$:GсH !􈨂.MK 0 Cbd@ }oxRŪgIsFLUbîVF+vf|M? Hf !ۮLTu2p%s#+T5GqG#o\TR۴m9!ɓBMܽss}{>c4R$tÓGA.&{n?|޸޼Gw?{?jr~ssyvz_߹w>|IJG`=alh#Kaø$,2sbAm[ZT…؂f/ V1\ܹ;}׿{ssszzW~{޻]epf{cOs[lj4[b"0 AyxQx1 l֩FV<TZ#"[DZ@eѨo%M~H/)B5css203Y0A'T_Wّz`Xrg@S %b ex57d>jƂ]F<_,ϻncfBsN!:n="bcR߮"Œ#jD{}?X-'boOx|<|[o?}pjÍjb0lαobЦ],Wj vbѪjt([sG –Jf٭E|x)W0,5B*`ޫ],XERp\w!tCRE~|~ª{zƿ2^uAC&*ݷc *-8؅mZVn{9]AYowW$2#C%É$SQA~LtV]O*0`<\ĜP $X֊1Ni?#Q@1Sޠ, pl\ icL [?֓<df)'_\WPT1kH%L (<wdb_LizLR#F `eTج}h{{8*AҰC'2Eo"(zB%FUǍvQAd2sPh,@PA"ftщش6Fnζ'O"XV!Lt  "lukʊpU2V5UE[p̌@DT;Fc@ kmrN+z7U)ySCU$ PZ-SD;\H壢Q򓋋 Z.tжi:OaF"hƋYCUZ\D ?lNHo .۔U!A(S iQ(g`!DF 8dֵ[־NNN=zdfVrm,,,neׅ0 !$J7tdͅjؐ戭 H{HY|_hFpT%?y4ϹmKfg>WDv7ſDIUDۈID -SHzHD"C㌟jmj!;daH*ѕ"D, h&7 Đ18@JbnqR.pB:7ہus.!ƨ9'-a-9(Am@pifmF ^///UuZ5clJ 3|8DtŨ\n-$$Ȍ™ 2*&1 "Ҷr7J4@DDl{CJ1UPDd!C1zDR2ϳ"O箾VX PJjCIIHJ"R"PM*9NЋ&a h&3*̾!v+IDrمLUж۶F"j&Y,r,[nZկ@ "w?ogrvz~bǡL8AuŊ w\*"!?~Z\_߬V+PK\.-ؼb~X{׾W<zߞmۭm޹s9mwme$u˔\Zf&rm^cD˞kFvA22 kת " 5Xa1s|iyu* L*TPLl8knݏݹ=,#DӬOH? iN/U1} {iʧknV86OY=5pBOD5piM7iZ oYMw""LY#٪]1zv@R@of@D&ƶ7^UMy$”@E5"" aWMEƕ QCPVǞ HLMG1Dսfc͏϶#vkg婳^tŪ?JE̮z<8U5VO$ C}MieTc0Aa r=t]"9َp֓SCȖsc믽wg'+>[ZQbP kaX:X4[iBP'#bHF#B  ,"27DSF(JF.`VqB(1<{EQ" lEDT`ڸ#+!I]cX_)feq d. 3tB(-sΘg͚eI#3k9۽}h7h&H2 $D&IӃDr3i4S2#QYUmuUKd,;jz~~TΆ i[kO1aMDt4M(n)uSl)`z""VsIW]NArJ&c>G(,i9b23J~ lѮ `-믮YUZA6F` ]_,**~WUQU7.̌c=x<Vm)E /9(ۛ޾}uv92B%l?pzPO|uwwOooQjZ=>l͏>˯Unަj4t)%@5Y4L憈^zBluCpPu. fEGðv;MX ۤSVW79>=ީm (̙ w+iFhqo}wkǣD/o\~_WfV &r^ܡ=ℓg }kE5'|S+R-olyz7a층 Zrm6\$ ſ]XO?sqO@tWآY-@!k#}P(T8]qbӎVSvQ]4J'b/)QS,=n"q53D H׃-wUai_id~+o/+"Y 5jdY#")l.̌FF׹?M,`լ}xxտ~իw 6~_"SE}77͍pr$@R2tNIS8m)7],u&HJ4=}ßn6on^Uj'|_|n%"pe _"OElI I$ ӣכqb!taX''be·e6,N. 'ZF IDATZ-?y%grv 6-,wuEZ,=7#Lb2M E#5 %MF'JYRy8ߎօ}ǩ oAis(fXbXQ%65Sf43:’iIaCԒP [5FOr8Pa ⾢F+Af*TDCxFBI lS/CכdfJ^ojLSJ $Ykyz N՞u}mQy5P58#*, m%^'{э) s`Sz|inM3KNO "F2:|1p&uU,^r^ j P" R)aMо&jH *>Uu~Vy<4شuh/eS U'8oN-a^r]X'N'5'/~=/Ϲri~tzЪ#@ؠB*r 2"@ ld %pqBv:C %f=Ha; Ԙ=-T-ҔUa)9@%A)_?FgGQB#0VHEM9Q 5 @4$3b¦FF5NEx8?w[J8z 9:< QGm;nx 0 pAcGj8)ju<x^;G]*תv }sk3S4>==uawH)anB@ՒS31.56"3M.\Hϋ j۹,3Iۓ+e74 9JVݔ46WmU1o7 l%ЙB Uu^ xL>Zm6n !l| o޽㙡*5_D afq~_?n!_wf{n{:e %E/^LS"[!Eȹ".á Cׇ?˯Ha#3kyOhOF ҙj`JɎ7f}_ ?D1haV`XmZ 0{*"B@0f̡1T{MchzڽtG fex: yr.E#Vxυ[{>NŲ8k:0 me.q"Rzp g{df.V=],r} ^K_/z\/]rcܓgbjD=UP!s.OHU^.NCUik4% 7"fGcK̦ьƔLeIkX 3bXP)/DG+ĉoPաv{p_?14 $,\la:+ޘ'b̟Kνvݟ1fXoܮ,# $Dާ\ko+E8o j6m;uǾ_̾~q&a!$A=]UJ$%30Nf6.k;R _/- (18. A08S Jmcw+(I}䷯\OӒ:}.\d,(EŢ Uӏ)w¥`vnCf?y+rfyD  ٢"wsMfPPM 3 q)`E,"|t4e;Iٻ=A`H "*<*ۣN$ !yO>Ԍ@y+:u.TYڬ@,ɺS= ,tx@Ko]*q*fFa8.x aq~}J*Le_^X,SGl6z }cQ-q|12U1S1M&MI6B5if^VH*j˴[GZmՈv_8 ׄdj973/6!p>+޴8Z6\Hb,!ЛYֳQr'J#sޮ ÚI@fsQ}ѯ~v{6á_~zO=srX,.A?/io޼Ma?W_Jm*wN.0 pw1 9!)#K˾_MԭW]/h!zܯq<`0kQ6s 3hv* 痷98. +yeޫM^/'⒢(7pP3I|0ɀY ?D4} SE#4!*W5w E;#88N9\v0if =~ͽ E@MFbJnL1 w^KI@Ї  5 f&9ʰF '%"'f'Sw'#yL]_oj\l6lJOBBl;K*p>;*+T'ey@AShojJSDh~Q\=pf&NjXJ B$QyCE@)I RS{h D(F[ዳ9 h GIB/.j٩Z[+Fjd[^Oʟ…t ض„PL@I0;/iSqVpmkKT4 ۲,f=UCpos]Zg);AǞhQ LpЄE PgxL,IpO$iTϯqpRU3b,Ax f4uhḤB1 L4YFd}W%UdBdRh[=K"vy_V3sQ,gxa=e \:PΟQ%K.jN1G;Uxhc؅ړ259M"E13ⓢӘbct78%D5aL:[i `afDB]巚bBb,~`y~ie5!PIXj.`fF j,kۼLJ0bI)s :ч &!jD/?z||71fpx&#.?:2Dv!O?̾wlq +EX~}i^ &հe#%1ƨEWln~>Vz]caXcn69/*T5bS k[ՇӸ~|ow!t@U)CtYDWLzu3)u a1l_M@Hw9_[a^Bt=8f _~h7Wj FbᯑJ9!O@Wme^3r;[oD`{ hS8DZm hUs8])'zB ) CE& 4qBD&$;/RdBf'sOibfJɌr6+xˆ$1=b@=ӼɆ~__xi+ 6+N;KOɩ`&iJs ;wMv _"zU$$wP-G ,BabMNC4VzݮVui=8jZ{+nl6!IϠ8j YH*{W5σ3D(!vY!?SJ%;[씥qfafQ0SDJs `ΜxX,'rZgε葜fY ]p n{>+'1s>iRjfDoc?js<&" :Ym˗/뛛{HV]}97{$6i(=Nq۽|x ǟr8֫{Wi Q;f" 홙x4 ܩ*̒8Hױ0?c !aZd{QZŬ}9po1>jDZCRpDVnn/ӿӟjLV<c\J!rC?iXh>G3yxbC/͝a<"A.cW{-1ib//ikf%`|ĞOG+HoO$tĢ0Nb_7Q"׵)ZtpR5B܄Sy8M>p̧5uzxm_h;g{"wgQy-@6VPfeƱ2<F S̽AX`  nw#%1~ "dfTǓܑ%0Q]n'߮W7NnӔ0C Zm'vvY] m,ft= EVۢ- ΄O2S;MXMZ8ge1+W{}*A>Pqt_"ǩ^VO~ffbFr:}K"̄vC8 i!Ҍΐkrj]Wծ8(!'%\k=8&}k@Djf# RF :<#Avmj.3Wڼa㔲7eUіZ1# l9( 'lq@0D O2I"8^̖p 1<1 q &hKt;wքR4H 06 K0M P`42E`ɩw>)QpJ B@)$PӂHXEs+QL;N0%5)L$qGO箖wf r7GCp f 6L'TsLDd#PfH&f MSdA%,>n]f>Ω1MSLzÔu5>aPU>| ޑ }qJdmLSq !잟a]:)}~u]Lϡ[)xIM cUE2R25X"U18}a`h" 2?Dkk tWLHJ)=ퟶz}QVuJiҽ3?<<|+X77wcTe}R)VuJ8v=X ]'f?N>6-1~ctl6;~ގcG'ga38ՎD,aVk?>Fq""`ZonXvG5^J:MFҭ^ڮ7a|܅.T%I3$ڙe F,e`auz"< Z[9ە{ڽDge (;`3s4ڕǙn0Ӧ +@bPͺu}^~shC&xОj,H_yZR7cZT~Bj<;(SL1D ]"SInb͜V#+ DFtX6Tnu\uk%bz%)M%Yn)FHF">4ٗТBɉ hD+$dv*RYBP 8ƶ2] 0M)̦L&(Mg'6(ab%3e"S&PXdG.~&X_zo jO80MMsie&X ntW nkcF+5>rB]am;[5QׅHubfKJfW}ԋ|L) CFj >x`859VUe0&9'+.ADd^Tl6/_/߾}I}P<ӤxXofv<ǣtMt<5rm2ט\4~nE/_>^8feWPڢ0)Ռ1r`"60Ǖs=&{E'(Rx%YpYma?߿|>t|ÿ%W^}߿W}߿~-]fKў=y}KN7NVf^{^DėA8t"R(Q}a]RLc8ӋĨ@!?dڞgP<}>m":|<}n^[+{5dR̽IȘ̚ |fލs:#"^ Fl,,XR9t"0u]~ V{ fp1EȹQ߆\D-,`|0")켧ݰaZ 1haI^X/NIg*NS+}S˾u0 <Ϛ_7t Ӝ,Aڟ4Lاw c%dX{0dLGD&dALpcA>[x,{ X4z))5GE;YD2M1Rf fn6)W g]u~=ukS>CJ7iwԟ|S0)_B&)'[,I|Uwwi&rKv튋夸I) J9,<+3dl>$ F(UˑbR IDAT n-˜eVdP5M@YY[Ϯ4a |%N^O@md3J),$D#\`32CBYk,}B"䅕Yt3`J9|E4MD4f&jؔ >fusspZ-d?h$1Qu1jkZCS:ѧ'ISIb Rjp&gv y jڪ4oOph4:; (H+a=?Y[NL[5>2dq`,!"–Mc{ׯ z9B_ΦM1&K) }GD]/Oonoq8?_/ukO]T 7sM$ݝIM1q]܎'? /Opx>&ݰWÍCi{ߏ3vu9"•F{OL,f'`)uj1I^>ܽ=>^xpEt-ؽ 3Rvkы X\vXҧ[z@`Zȴ-\̋ʡʓj"?PYl_r|g*uU25ߩ&Ecřop:?!!).$ oZ. 竏8-܎RX &fU!PL*RRBoQ8q =.}2\^N>:*Vi!74I+c\*ggUSX/6KjnX\hF*M*\SY4f=VbJl}Ig"L-+ptbsQss̒0 3CR(ggft]NxھpH)j sĨ%okըcgk[6y"rs|ot޶T"v>Gy2Xj+y&DEu5lRU L}a볷PP,NtaJ3,G *R^](9[tXA"f6ps"So4α V&mFlm%V6XtrR"P4){Laդ)i?"E#QyĴ>}?BLm?*@Y] O9f"m63?ń;c|6ZYߊnq0Ky|5?6p6fJ)dDRJ"%[IDb>F7776z!y_Xø^x=vzvB0A@"t]5#un4~<?|||aUSÁqR'p{jl[:PWgav:1ƾa|ެп{Nr{{;Ȱ9j10qB39}О,OjOx` 'pa_ޢ'_M4˜*Ux=פ#rrz{`TYJWZ>D'Iyk-'Ϝ=%bqi–#ԓ/RZźcy@-*D" 9RR]# `Pw IcWQÝ/1 !8BƩF9U-Y*\c d)Ss`&KpȜC]T 0ISR*) cLts]͡ UYw:Dhbj1gܰfvW'oCYFmX73bJzZ* H[Ej<K0uLf؞3(kYLl}YV-6Z1:<@}'><h`Pu8n+۞kfu3!ju(m'ޭuo{誀`B /v֟ˢJ#rRճ9i|;7<^Ҫ:k{H1ag&qRc&rc&9t)% H߯SԌ 7B&畨Cٳ)'ffQPUL `BP/gN#X!8ibqM)q9Ea9`q+[fi"B5]zT$]reIMF237z{!c[}&i~z~2R Dtƨfzw)-3V {54Bz;kƨӔbNEg$d!1_~P6:Irt`$p ~^č[TMwݩ.3f-iOv)O )jB w9aS233yi! }BJ:7ڋr1R՛}9΋/cV)?XՆaXڡ }6bAmN _;Mx4M)2jqeLg?7߼~^=>ݽ~ i7m)sliƵߥT񰚪;*sQ*p8ݑoqOG;ZJ%b{P15 E^RŃ*٪qI%\^Q[_kd R,1q`t5 J]NOt0:Qb4O; f/[F1 x7~(w1*\wnF ,&e8Ƞ\lS XC KDbزZIA>flIE1bc,dFLC 8K3 ԅ>u|a)qt-w g\! sq^ )ivrjI+ W%sdh^[b$U4-̦fu@X"Twn[7^RLIX n>@cLD*S$D2`k F,9Z̓ sO"gwm2{RC߇U?1#Fj<ۮ,mOPu;J))dUgX,x+7}W("T/ͥG_r.H2Zڝ_.Ze=<% 8O+/VV7afOGmPUHJ TvBÌX8jG/Pz,DGU߰*]r8x15/fXěؤ7h9eqA9+TҞ=:;ke:NuW,|/̢v·'Pw/w&Nw,(5 摔ґZ62;Cc"/V???ð^ooo뇇q7;|(QqcJp,cu7vM(8!4&FfBW02rJj،bFAdpңڔpx Vu!tz&"aV DTB0ą/C`)2&quA J, Z~j&{0<8V LhN Qe$&,nDP+XTA1M2B*۰Z}v)%UK\iIj]iRz2n{_oWKux80x a3P;) }JSL O LfͦTްJaA21w5*2 [aWiMh@&ZяukC[ED) p8uiûUWI|a,LaRbuN3ޭW$I{Dd9NWWu.3C"Y/7AHZBJ AwtOWU׹%`3\GTf_fIN w׭d&:tv!Dl6]7Dc:;>[&̬݌- %yI#_߼y~tt?Gos똦~&!rDWO?3׭>t]uA)wWoBpt^oww7 ѯ\T ̷.~?mz_(R|xwss.ܼt@^y9L,w'4f%$qW5hy@m[XF;o.ϵUbA3?= 5pX1΢\3T~-=$qkZQ 9I" 08⢸) i{% fK4^;C+Cli:E5\9^ggEc&ל-&Eĵ|WgF*LAF"{f:v4AJDQ1&R Lʎ$`Hed+qdLLa0ك ):%AEvޱc⺻J)1bH{&v$Epb"r Ia@Uɷ: IDATyBH*< A0Laйr;!w&e_jC\nu [ˍR*Z4Q̦cO"VˉbeL)J+` (#>E rM JSfTLkJ@攍bkǢ)ƔpyDx.L>LB:FA9q#b1i 1&`!:Ǿ${ RޡX&HSTFM]v qb}n= n?zn;viR߽ݾ15RN$eߍW7 {].:6>Q31"RDhbnL͆9Dչ#t)ZAVz~T~lϷ |oğB+1cXU r9A3ƴEh$%O%T$ :-%w)j1]SmhY-Ȑ\YM9cX1 2!@򆯚2!F悋ܳ뤝;$"'%8q&s3F VJɾZ5הA]XyG$&A2 $9()%܍ jj>e{i/ ۇlZm('*RjK—:Qd3Ȯw]l̏<vl1l0g^%o"0!e{v]RB)@~tp|5qsDUm"sgX0z31 3۾(o!ݮt"6Q><8P,؀kXѬ)ųw ёIK84o|TK$@DMrXL1lLX5{LDHȑ 5h\EQ"UAI`X!Pr(UqY # %N:%4x۷oכnQv_c߭LX>$pЬub1y~ŇȜ;(.)D8"U_ccEEƶW_#%6ŪuY+ӸB2[xvИjDPPD, T$AbT@ RSfPLl-^#am fxsps!LQI|ﮂSڃNAℨ}߳ç| v|vd`\Fv@Zst\;SSV |^}?SeE  WгR;:wf[?NA@.?5XnPD4hT̺!RbCDA.RI^$PdDDa &S QR%|TDT3dב#"tEȉNFJzL*3V4 &i@B֙Es!% ËTݸ32dxaV D2)- Eds?w(VX*dX-ܙx"/0"҉lQv ֗fD<󩴆ٽ (J\l 8w}ǮP3KRZ*AKBq"88Mԓ}pp1%מAxsRI;a  !c> ðWy3PK"O4Ƈw77W1/~wozǯ7O>/BCՔRQ9ތo\;CA_{3թn{QDMq <\ݸvO 2 }#`-r 3J اфF;̽Xq 9tTMPY=d ֱ|U-R ٣2@C )ں-Yt, 6ڋ٤Nq `E(H3ǹT~b58jfṟUfdHg+R\E}S@DT`TF !)1&M3_IIx_"iG)$3!2s9#)f몃 ETUQc(lA@DZDB(SZպ_uw;o<` R*GCSέ.('7hc&̔vZEV52j@FsA_OCML0?DDe\Ĉ I#ɨG Ei0m5Eվ๳,`G8M:jӟ;k_ߥ0)ZB`GaRAT.t.$k]I~iZ/Y Ff C:w-:IMva<3ʢ` % mPi'rЙDRdb@!,Tʻ̯RA#1@_FvT0#!F'D6\"@tBUșDF,"bGDDF%U(h8P~TDH@I)QnsT$v!1"HL@l5H,ym Էri=Ow$H#劘]3`JiZ4vʰi_0T Օ`cQb꺮2T&8r812!pTUz=lڰoש')lguDC ].&/ֽ\=X|4*SF5$W4G jYZ0/ypυ IH]”nnnOOO!L"}o5)M{/g-v!KilS ;LUUDb8ƨGb LhrruunC_?§~78pL}󫡿]G*Y1>z^x]e8R6?~Wa} !xﻮ'1Amc V!xBR;JcG>># h- Iip 2*swf-TjpŦmFk U9Z70簟Qڳcy2 dk*-u0q^&@PH8K2kY~3\A+3+I\+*@& R"eF{)jJ~UL ,@IA@U$DФBa0&`@9m*(HXy!D g D_44%47CfIB[2"B\_!G_swnnw "ǝ&E֯i.,t)r-0պv-T^m 5 v6ƔAZl%\)og=l +MOfdam:C^_^*"*jȘH4&AUq. Z q/"|`F‘9~u4?x2tŗ}mn_nÛRW_nw؍c];P<)ż$OƟ= 842G]6t `jaJ)E!"dk@ ?\k#z<)A}C7ǯ~'v_\xg}B$BS=3N)`7㋛iD"s3uڦ'DHѧ~?Vꯆ?Rj}8nl߾}^_;4̼~S 9}RS~:}ud6!wdyqo՛m k02f^؜RӅrT #_8Zfq:^?TPDl08ZѠ7Ϧiϒ' ' Հ-[rXi"},aYZ7"k8ڞʜib*fʲ!"1clXLL9Qj"T %XL,?qͮPhQbc")TbDL)TGEU !%CA`r!jl>ş#{G0rh-q=Z :z@ ja9w/n8?cWϯCυԿz̔qlW,;@AщgoA$=ޒ,j@t@ TUTkn a= {@QM ۇۼG'?1z\}|zs!qznwO?_#s+Is׮Li>&1KHsڮL=}bQ^riq>S37!c5^ ܷz3E3M⬁ec QjMXS40p#d&"l@)NtG,8jNxJj# )%|PIA UtA)TM#ZݓRb5&BCLGHJM+ @@jyg~}nҬ=)ê:CJq[khu1d_T cv Riw!q!"NaDZV)%ΰeʑ*Fcb ;\^_xSuSU3>d%/ZFH!4ㆆX@[2 09`tL()0g \I#d|_ &P8< z{جqv?<܅qO}ܥ̾cmSQjeWջw^xnavi:t }y1Fn_~/ÿGDp?$UJw=P1̏@_ø3jq?>n?z=Ad$ 8 & ,jN;fmzpd:I3} 5Oq/K wbfXLXS*_E :j]-7g(g<;м\7D~r4ϴhuoT9$UD$ 29$! Y x@bTD%DjȣLD  C.!Ɣ&1$bMAPM,c9^D$M [c&bdFD` "Z4# W۷?!`""g22VQr;;H.lhѶ؋gk P6Ky?:iL! !R!h9ck 6:Դū/.7BKjNR*9眧"$@|UM4ڂ)a܉X$c^|!_{U$D99Cwn;}ǧ\=vQ!Ю .MnlvJ$=qJm.vu-vț.SϽEq|8oqv"{G9T/c 4 0'ȫɋ$Q:4OI"gBDlbN?oR#ĹMDDtbئ9UvH""՞afHUL=K)R"pJ5~^%ƓaOW Q] e=dOԡnu2U !e:*mE33M .%zUMIr DCQRR" lo eUܵ(x^/*viqt`&UtPeF"c\G CZso8@!!>~{H1"xGP1IDP.۷oUjjb뫛7oN_S{O>#ۏۏ^yD~Octe<W%o:{sU Ae٤~_{f>ai:0:tnFXȅ q.s|VZT8Wlyb&y+GZ] R-جD ADMʱǚu])`"  7ax[y`˼Ѧo6p<'L]Hhi?0h K+((C1`f&N.A%(>X.MQSD@E4d$ fRH4c2)3Q,EtuAȎXju"Pb='r@ImD[J(_g0ĸKb-ݬ"bh$V'm˧J\]o^}z9yxxva1r0&FDZabL)Jj|5%'U;"kbd[d%}okoR]{}]ŝ}ӡtK/_dsKD8!Xv -8y3B# "mOD`% bJ s*nlFc0y-iK>c hP;M;ZNf<=)`3I*"s{5F&w%N"^VE$8M}Ls.E a(!WzhVY3hU5 Ň0íQ|N-6z} d.~/k`f<f18뵙 "]մ ֶ5R;{L,1X+dbf%"4w~0[yÊZ.`a%V>kIqΧqo?އ޿W^QAb{BAF7իq˟'8V判1Si,97Cǝݽ3Ats$"xŽq4zm3x߭n !4 T9@1t 1ց1Y:25&ǫTWuCJH(;/=*27KTu``џY2d2{≩|L42=}#;+pG L9ܜ ujꍪjvdW]v^U[ƻ2 ->$B3}$P#1"[Ɣ9ܕBj~T(2@X0*[zk"߇Nѩ* X[$D"Mp>azX^wf?B tmr6qEfؓ3{jzLR,fW-kBi ϜIgJۓo^$R9b:R !JOڴ֭e=M:g.R.j" ȂpBO&0ف$qO IDAT*CG~7- 0 Dd:?հz꺿{.Pؿ}wʘǀAUgLcJ!M{P4U&.O%ymT"TU56t/rN4jS;KͶekjvl&*JIG(;qO̽,iI.]pH EWʀQ 1tT3ihb*:/ U;vP-.щH1*bNB1W"hbG Dh0K$ J JD(&"G f)*ι$a :z!TJ E@A Q$0FτRQр@ 'd&*VJx@N rINҪ٬ 1Rɲ %LQigyN)%I;BU08(HUeJ(pc%7")㤄EJ P.ZEd2(Ć$avZ#5P"$MͷTD ^\SDHwnXcQ]b! U%~i}8L]91گ`I 41y"n c NIQz$: b-pҋ7/t}x4N;bVvZmwWW75m^K0a߷D}zOQʹBo&09a˾'Bhv]w8,/ ߾ZU?gOO/_do_|< ՀOOI٧?A;I')ATW#sD"_#G% 8:H2u݊ƘiRվ[uX=m|iܩFPLA= QDhgD2v^8PtԥJU"x|I*MUrV`h;;+G*GBAu@1S܍Y(FIHjJVEFG:OTunȟ_c\2oS?"tft"7^<5Pm 9u.Ud+rIP0ʕsi8˴EΊ")) !PET #DLD´>ljهб x7!E逨I # 'G+@w*l0(f'>S/qKD=2 !;Ob ~1%ILA@*H$HCu]: !$ 9t{߻}H tHn( T[P ,znJPd*Cɥl%w2ƒȐ33#TTUE$kCDBN@œhb쉶 )kK)CyߴqW M,XL0)%uYJ8,"ϴ yorxg_@ $@ɉ$۠z_zD !7 ;5!X<hHU'UL*pB_~̽ɏ7/>z ʏq(aS8"f. hQ<8v+%38:%rh!y}TU]ˉ+7j-T[ͬrļZr5Y~ _ߣ*eYpr0<74B)_gP1ufKe@= !J{IH/dDthfi='/LRfov֥(nKRSts-P׹}M),JmRɮc$U*.3BDD@IGYhىr# 9n{B|0cj50 E{DvP] ~?ni0M!"=JDwkմn7ko~zn6qxxz| ιc&=v뵪]H(XBD7T=tbOzP=(]H~S$v3 ʶj!̕eɱ穄 Ɠm,ḼX _XyVKd6a±9XAS"[blZY;"b #y9L sMXض`=x!Rufǖ~`γgRAt\r&sy瘑\\Bb/wJ-CJAjj?1&)f"H)eB*qblSkRJ%#20MA) P֛!&,ى &$"G";΁ހk A_|p}?Ӵ0_tVh0݋ *BQޠtUEZîK"_+XVJmNTՄVU;Pv(Y'۶.UiQ}t|c9:; +U%ljEbNDb(qvЃ)$I-0^܆8~zw?g)N1?=McGp!Fj=F[Q/.ۅ 3Olm\;4oZ$+G3|_.1B9Ujz I\uCg;zdR3[dXm0)"J4RDfv8ƉP"0`5wAQS}a!D" ,lk9<,\ ,[nX⃈(c$*L"h 3J~J)% ÇZ-XVeZQA- VnfHg^Ml?Wcotvv}qsm>Ó+ߌBO9YLlSR6#}UcuPevDMHA(B;kdSc}1+$v&Pʧ\7B 췏_^Cxb懇/_w8aRWMwQi8m?9w?o_|)=dû:˔{>v))~n;/ ⇟}t߿||8DfQsLHfme(ߪ "#*( c ]컕w=*0׷qcI Hʌ1%W1>T+u\HpAX\4ٺbA'bS/|܂#"x쬘O8S~3RC2q5:\YQz n>ӯ(4^hdf~zh,kfi0(,Ll"&JH Ib2LFb&3 ǘ4%%H+!y8(J@ytHaH)PHUa21E4~ȠWlPcr3#8MMI ,1jn/CJbˀ{:#LIgU<]6jY>EgۂaE<`{վ]zeA7ׁJ̱̟`W3#0\^^l;PS> HFNhA1F$ɖf;juq|vi/HaJ")LIo)/hyvXpFŶ6֫]^*M^ k_;+8{f{siP`-_sWh?hfAN]գҨGӶ*D@7 &B"iѯ:0X0OD$ EDTRgiMHCʆ82HŨADw*pݽX+ N5!%;Bԙsډ߷x9)jkVKZ~dä%1R^Ex܇ȅ^YzN9y|q4')gi۹KcjR Ixj#̫ SJ@dgw"*ֵ bsxXy@̮JHB%1H{^r3f8望iBg՗C;8Xu۩7o/~C[ۓ:!eLQ9alvTuGU1"/|5"~GD_qG?Zkh=3w]{gT~Ve.BO3ߧinizzz8iPEmȭƃ]L( ΋֐U5-Q йZN1D6B*._<\XDmIk9t-Da<k(BYD`^0;7 !$+$M;COR I|Do oY=Y] i^<#mm4!bMbvR@ D4J!Y0#0;b@F%ȎA9"2qZo~dw~Zy?HԽnNPb0r~xzz{D1N&NSt<0r*cq6WLJi?O/c^^O0M͋/__0^RcfPb(CyơJ8qbuss39Dꇜ4]~>}J1g䂖֞W<+ys(#s /)tD _$HA)孒a, Q*(\@ͩPD ΍%h($bihD#H1DT%ۅ*D-}/"l"E"YAQ%U(DJHL_c1b&BIA ;cؕ|+pZ.a:\VX+% esUUPHl%靪6czUpp3yAx!6gk^_p qwݡ0!Q®;UWS"pE$y)ثb3(A՘%L'Ǒ!ߑDHRAQc訏i\m=Wnuw?|xxXVq"*xr(qʾ'p߿ӟw_c_ AJJ(CDSa#B}_}j ˗x}}#GkxZ+M:QVAPE4ojJī:0M}?,ߊ@ ṗc0%$ZNu–}lj*PZj;F=lAg'"6(6^0{@>",jbڲ%GZ֍S9X>6pV,'n^.1~sK1bFa ř,UÛb-4/W@b1xabG<"R LSdGQټ19BD @r R22W}CD$NB1F$7x'`bDr6|Ub=01, csY#HS"4N0j5̼ٿ/=(suE^e i!CqRߪB}kK],꘴F8jf_"=dD ƍB5Xʫ!mQg ctR-KeTP 4caMFU5ST1>øŗo~7v(8u Fȴ噡m޶޻Xr.v1O@qrxuESZwxB'kn 8|v<]m)i˘b1fd΅Vm@`Z) { BH)%BY'Ll?eh=QEl%MDř 1'KQU]5ܴH "մnf#3d$Q~Vh)}+U7^.K?*NW?UnwR(_-m\ukoΏscY/vy)9WqVgEʥ}zi/4h+eHLn,:O0c9}QcEHI@s{(Jy fTى "s.ƨ*]ץ;ƻ_mV߿g84u4&I%z~?}Q4& fmV1q݊tUn?s"l6{Zm޾zO_,zOʘE5'F]N{Dv!pLp}qhq s['a1&Ex2N*'ԯbp |E(FS>?QNv(}[J]`J7Jbf8KȡE_dyU]|rsbAwЫ=/ݹy/&0 5qVlPt0I  &zre%xz||\m?BpH1R5pfhٶz싿m5[~8j}դzZ+5r`/Y^l` &Bh]$rrFl?JW5hTp:UץnOLz՘N?Nʱ?%UG:(EEE!)@ׯBq{AUM!Xc%PTIJل˴k1VxbPU6Bn&&&+(f](j3b)CXT;][Vl=3|p^BSA3.%^__G JTRRDv2 T#!L $DG?"N2#K8RX ͦ@ X:%_v"dLZ.htOo6:̕@ IDAT ˉJJd~=Jh9$HzB銕D^φ7T/kΈ3N~uŠ)#Zx# m q\0 `hd4u}o5(O)!h}*9k@'{w RĶ^dn=4v˟<>~ل3xxNs>4a|'7XBa:hpܙo{&K@윓U"HBW,kW!oa?m9Ÿ ?¯%(%$%tVU9p2Ē A޺Y8y^y'+;su]jӵ]?X˥k6ƞPs ;<|Ӷkr0#`)W-ѸP)FRqANVÈ[ $$# @DiYadB?RaB y@ܨΐ|TVo^s囚865eOG.I8 ZA3a#C`/dHDm[2@֢AW5X-d`;0 F$ 2r8_V]U11nXt]uAS1!XکYd aZTrjuʿw^s茳:k~7VIsyY-̊9|Bi RbӗfmH+mXL+)(>":F3dfd<1sܔwKʹ3)HL|OnL{KɅ'1N $dA);A?uFѯ{_ۅu®9a߬ku >u !dpSN.vI1ڟbTҐJˋ'9<ŋR mXԸ=(nJPF?HwF0R4]("A.ufH! 'b?7Rh;B Іi _.M{.T\]ػP2ݮ%"d4!)ADb,"-11ЊĒ  "XǢ:șEς]_"H.DqA/@ԞY48$;[DD$4,^D8jhPHz?k4^_fjE5UcZ)6:%cHPs􅞇.;X1 A`/tXa3:ida x@i©̾%ƙ3e3R>r~LLP zL{q,He|Gd)x᪪/Vb!m@k 4 3VD Hz9(=qthvhf`1Ձ/mګ]83S;>=}m) !qdШ74/[t}n3/z *|NOό]t]քcfϗr|c {v籫6WwW/L^MfQ8kYL-@RAApմ-=^0+lm+ !*kiX${Xrk///{wVG r,)3sF"5R`-bX\'Uz ˫6_ "kKDtΙiHj bt-X ,! ;fJ"bL8Z^Mw*j^cPE6e葤?Kϙc`Wҡ"eWr}PD,/8M0w*| @+E, # '<"ZD JXYCBD,ιe]ZD6˖.tX,1&0J!0X@8$EJWYGhN;zRcoKNقa! 'g Vz" ;c^eg';<{Y&CoѶˉ3s'kZz&\.]V]1& (ˈw,̞>Ҧ/};Ve`DKDd*C5YH",: h&)@⎎P/Qʥ댺W?=s%ed|e .+##cJ',ccupW(=ۯVZu +ee{_M$>m~/ɟM4IsBuu!θ{7a.ˋ!4ιW~nz|j~MӜӠx- Z> g!$wrF=2H?\rB4{"$Top)dڇF"J0B]ק!xuɘQ@11Y8*""HI`ŐNPħ˱JA{)-ˡΒzALA5HMy7L~‰i`)(wE&B#xK/MPFK s o"h0 Ot"YR.\0y0.ƨR#|h MEZ1Ѳw/="b`p9Ȕ콬 ~ƣ SX6f #M La2/gF"#RYSX1|Xl`.ܶA99JCwZ . 1m *B뺪rifxx~VW+c{ifKH)MKt|b yZ ?o~?{׫o~ G4MM*9999v{m?Y\Uš7;?'ODsރwtmpvΉfs}{iʀ[נ#r~Pu]<{'̌h b}c܋//?~^;BpD$^#M{Tw:00zP\)'ԫ3`[l/)L/yF[Lަ  uOBjm[M) J4Pauf 8N~.)Ƙ_l*❭^//vU]O&gi O'QAYkзۯ{}?to~/;_miD\(kpZܻg=u>]׸9qCuD}moOOOj ]׭V *1[f.gS[rpDFqgUã?lj}[?}r>i !ehMbvnKv<+uV'&ydr\,m:gS 1Q(榰c#W=a(F"qSW[:8F(WYc9a' AX@T>'$Hs7@{d&D`cjDH^E!Y4 GO5bHK11'*"U0 Q1ftj! 4(x"Kh> "( Ā˦alu*CZ ]-hWp&MWYE, ,ԕPJH%Awy? "E$C9)_$rq"1C0x"`DWT[rϵ?*37rTU|p18÷nFߘ‰Ѱ"BD92r3  HTaIVW)Tzwաhj}ɛ.E}_Yطv3XpSDs)!0_8ӯ|=ÏW5m>8;?^\QИ OOO/=zRUnw\.:֮wz|m-'{Dc *`ӄ|#_גt.//N޽;{X,ܶUvz6YA%1jc}+&Ȁ5cXk;޽DǘBCI!z VI7(2K ;ܼdyHK@s}8z2;rX޾Ӽ++۶Nb,eH)Byt&xs)(RWФcVrЭ׫p^s}Z|~ I[ @ w|2'PFHibcT A/I-0jYp˔QP3Ƙ7zM&C<% $7a$U,3YTQxY2<< IDATHӴ9$G]s&9cH&Zļ:c j͢ %$oBۂ1:cTkp(He*Lo=,]=!2  ! B x$q@HijLyj7""LWhܡ޳gZm^R*s)>^doHSQ%yd+i=D9P̲@n0>)uL C5|ZޣIR~VPE`P)h>)Pk85NY$F0^DD)h3ZdƖ$]hʣ2)Lv求2z>mF% 6(lJqyngHw~-cG Pj7J0㴌pe!Q)bzlR cֲA@BocvW{2Κl27F$H3ABdPC9 QHG&cG\ lBS>IbpۗW7٭o`GW03$! n#0y6RZ;]LDbx\,fU?V41_ Jb :Yn[.\.ڶ^֧Fofޟ[eil),Q#Ct#1T1]םWDu"mRYFDԵ-覒R(:6 ƈ#(EI t*K(\k ÖH^!$XH0R4$^s#EC&f eVi@Sq IuDpE":G,Z "cѥ7ưWIU8tH1ڍ+ ]eQ>JDkH#j3Yfπ,"r!z'R2jhR$o# (3/pյk_7dM<(8d؆|]&0wK&xMPjȐJ8TT+?Eek%1rNtxWĻ9CY9o\,,9 W%|,c~uT `KLR\]pҎՐ9kq E 1,<`UFk'I[]N-ςHn&I74 c,MQ|GIfO_=a"BDjf :Gޘ;fkv~p뗘kyM)1Q]/ "^ %瀬|%2if\uƐruuEDD9*7gw6msUN-w}A0d,0S:jad,y -c!"%KHA@ヨ&v C D@BF+rlMeJ9[aF'aT c(9Dm Pqb_+[sK#L(р!1#DwBs'/C914ɎH|ӕ2ٸiPS^#V|HuA,u]u16k7k6;`͢bpxբc), `.82H|!zA!kZ.η 7|zbq{Oٻg6rVĹn:"Q۫g)?]^\ہMܱik`U~ߴy'}n^/_/{'ׇ^uaͶE b@d 龓/z?/?wɗ~DTnõ1fuuz#Ђ;(nբ6{]㴗m@E] 0EQqbt1-CDAWAIUUh !fU\ڶuu]u5uP*9ۖcS(7s 1dB9́Fηeһd> ^1gY @8P ~,.F<.j9~&#x ([D I"icgh RDD h*@HB@P 9`a12ֻp!cU$ ܺV!Z6pk- g1S^Z6lA2jTʗ/P0Ti. A hCD/Bk )+f-e BnC@9|?jEڊHU}^d+Y{wt!I{( l[&  t7d+#I%`8HHhP C r!YI`R<υ.uNt KdE*K/!⨗e2WI-HOe)/&8W(3R$8Ac4oS؋#-p2 >7r2ـ0<l y۶uΈ@A U4kX) Ɨ?3uvE8:>G@,=/nJWڮ#$X.A>E6+$1ӰZF'f݌"o5RJX+IٚS_Ki|I'BNLG߇shprMx 9QA ^!u zt"źp8XkCuwvv ޯV+Dz<뚙EP[ރuZ}7;h~Z}ݻVU{s^.krdyY,R_^ܿ'}'WT]ש4g!e3]kl6氯sдuev;w#)y@Fl r_/|bbPb* !, 5> xS2F>="RDYbLV˥`L|b]reeQ%ud 8,RJ"z'D*wDăx>A$ D$V|`D'(L Ō)"F`c23@~(G5c̒L~u DD[b!`Q}B4i୵Ms8'`fJ \nɪxx[YN;Bf&^KLDr Sf4Epb`FsڽK3dtRcp`T:b|N^,bBS! 9:B8;-;"Vt{uM6 b?|/S dtaOw]٦̉sZ~N7CQe vjLTrV(vjj2U"rLH$Zߔ(11{׹֎!`jr,hJ3BTFz8;W s@"(̳Jf[:Y|W&(\PDGpY0fn%AOh@fQb! #\4o6pdfȈ#O[g1oH7CQVךmQup8TU'd^ "Y1(FYeD0D,sn>nznx{O#"͢rh*:fCG+djuҵ۟W}[_kξo>؊/.?zo>N۶\^^~o7w{w~@Zj|^>%ހբgjmz޽G/>]/guE20XTXƊC%,E :_)C?꫒,{Q1ARk:IM yA:9PB/c",(dUgEիZ &l-뽔""Փ0e{eW<-U BX]Євڃ -BceZH;D A naI Mz@PZ  АA ѹ4DAVꝇBB,D5:SZ+,A1mN|ﯿ{"hnVН fo7?)U|aK;r Yz,\g4x~G[?0D.)?e8}nI;V( !c%$^/}!6+S>y`Ӝ#g1nA8'@BYзntÌ`[v#"DyQ͎פx,*>-\cl92tFGW'9I9QR;RI2IDw^4sm@w-%NҳC9e2^ȨP"!S npJj#E̔$LOǗO>}e nUTynf5nРuoF#C35R\d6f 5"SBd-¯ܾh/}<\H6̷чL-+1rz03Z+k+!qUa,"QGD@X$MCʪ9 L-$h$u׭l0FR$!,EW@-:jۨ $DAIlg>S\5{`-cP0k*E~CfC! S42L,xFz 9B4f_M\.vurYg:,,"E8+`BRG9bAfvw8N Xk4fɩ rrC_Vafh=~mK ɣ~?k[w۫g?mn":??k^{nwSZ|Φm;O[p*$[SH۶&,r]\U9.8W'޷"lP}k]$~G侗g4^1&ZX8ޫȪ(JDBD,2q`[M!=J /^aصL1|R~ 1|5B?D"T=9Qk% :`":D5ՑfDKW@ H)wHA考9 fa!K$8]q1h Lf2(!L7"L2]d ' aS 3`0PO_& {~88#\IѓTIdL~7u= IeI]کZr$S L5?t4F0)}|͒})0Asgf(BD^g&# kE a0/>PG "1]zB "(%1^By%{ ݀o/1nG:]W@s!9cLkj$ %6{yyX,Db&Vɀ` E %c{qamҵD0!ZZ4MczzjQ}q]~\6M.7O(l1V:[9lwϿ߇ry;%4<4Ƀ Ou^v]wUUŪz T;ж@h5 CfOِr0xD4k+WV+P5OO_\<qwdsv~q? ʠ_@O9IH5s}m=rl:#. ȕQ0+Qz>h , e"2)xb&GC H&^LbO4hɳN_߉E 3fG)?#ND:_,DƐ "H DԐR0t2m/̜!3,H,A*` @" @FX,4vD >L!"  KB %0H HF0؇TA͆6e*P~^0?}%:nZ*lnS"˧RTqcfle;ŜEFfX ,kA6rC6pN?*g::ڱ2mH?2?DmH5hfG~U@?D?Edf)=[e d%kPF*qV꾙Q5dJ^ziD+sQIKEugxyփ\/cs: N{ޫ U^OerIaw[kɀ@M ,UF2_ !@@B6VCk&ϳ֪~yyyva` X,ڶջ!YK,"@D;C w]W 8`g_d/[_~]==֬VO+/_}[y>}ZY xW*O!S- kZ 5aY/׫*&swT>EjI@JS8)8L*,x(c .w/ 1"k8 $8~VN~PbpL"I˃rA@Ȕ̇G]bLbLf!cp(p@; #G'Ay?t-(!fh #0JĄ!<2AGE!x *00Y [>KBK=@q&B`V]Y>N8yYթDÍIyW6 IDATu$o(ǘJ|BfoŨ)D s;8Ḧ92z8ޔc|1xe$p)^,Ky6K$9[s!F C.IcLr )-lI  fH(}r`\fnwM!idp RvQ+0wFu< 14Nv]WLNHy2"Ne)^SY0~;6}}2yUe/34|8#eLx8tM"pu߬kDRj+ 1݉$ !;ǰr4Yk}XHB(:& PЧf0p?~^cN>|BHA 0{ @4aKQM2|;q\+`i^*,$cTנLu]בqR XvɉYV,]3ƘY! ]SZ4DPsmge\]\^^]]UE}zYUm?Yw)+٬7= n>]cy>o!_{ ?zًwci'Opmjzº|K1"TSˍ%!Ddm ŢmZzAU棏fo=Y?DQ͌YSU\_)TU4M@9gf۶j!x)Dh1/ z=cXcWKM6;:sa 9[3z1K:(m&톈T&p #-D,=\e,#"96.da`P  "¡"piѐF1 BA:VC6|柅;Z@`EBEDT[\]]~ыjh vy`d5dTN9|laND6eIEsP,KCNLy8Fu2N%)%(" eA8Nh__j7{Dd%4y$ga$؀b3 !e2*Vgrcb8qCA Vz, $ԂcLp MwTZ@ R`oR4;]P)-ksiP,H)Iʵ\j5g_j$rݐ1X A` 82PUnۮ׫c,U 51U]סex-H 8@ |1R%W庮d+FclU_m/1`~OQ_1%&!dH1A,&HXF9moYxn#zhX@H @P# K'M>ςDFw0 H` #X:)V?(B"0@qNJ0`a A|7MbP쐔οeP zOO23IDsy1W@С !2IH"`HtR/VHXs-cA1]X,jٶ]UU j{%it]c,6uh_6 `b (: .;˫>@}]UܻF;wWO_}_]k/.z~~?A4ZX޳S_fhH[2s5w޷dl*.w)kC cXͶl0 J %w+\F_"eҶ]U-m=~h^L\UAB@Z| j'UXT&(DIyN "axnBuF(hsҿ12CJ})&0 BѳpH\}蹧$T"x` B&hkmh"`P5K fT "AaOAFcLLD  9ąP B4H= Ac 1xCY o=`Α@L۵Um ,i Zxφ :AcsP@8t{Q@R!GJKDg͖$I1U53ȫFOX.gv/K3 e|r)p`̈pw3U僚{DfW_@P*-Ց~ۡ@Re@ r+:D'.l6ca6vLSfS$UQ%(-".^,kYLE3*׎` T,0EP\*)VUE23{ف-ʗ(:y;o5:2-KE]B$4ix^$c%/vm^NŧZa&yYkݐ- Gһ\7!tysբ3G* }JiG)x8LS04MZq( %j*2}TP}MT/¬^ߵ:L>E0]YD?*?>2fxю@U9B_lZWb@khGfGWECbEZ>ˏҥ|+r""Gʏu]l!uO-˻ gi1df(uac(FAUS84 )Rk*/ UQX̼O6c4N۵cY35,h (H] *CPI"Ef(Ch:5LW[U^s6=mOyXט[:袳?mtC;`U+2su]usR˗WWye !'sʹ%oL!$%De%DTǮ)nݮ q6~?\^ޤyA2;?~~_~Gx8m6.0 D~Wӏv۫w~wv"Nϔ 9ỎS24')ƾx<>y44E21[E8"yVWϞgK15f#RyS Ւ;V= # r>Xk& GH*$[9&(`1 @]w }}~orW?wn(<{crEJWW77Oql/6gOwZ}Cڷ :q ! inw0O0{DD#4|+sA}G}rB!!iJz}}RQc ?"(I:eቹ؜{E;Szʑj/l8V1n ')CNU~l>=j4,- |w/bUU GpI"RO^Z׫*6 BU H i26iI;#GvĢ މț_ԫ2Yѱx=H> ( }9[9\LbqܸMcAI2=^}@5xv/)E7-B'(aZao?,XW_ZL83O2s|}ԱjivnH'c7i5Ժ9M%.2dI(jYL;BUW_EB-l z(ނ}nfSd-jqiݶisalW< Swew!u䳋g YF=KGd?ڭZ[{-no{2k% sd0E2[)Io>*5t)q(@*RҚm9זs,RoA,1%[ߘ"HYwG:t.@繜=_ ^CUт +~@P*$?P-ԮSlhn @Q-Á?}zw#JEyTIY+o0ǔr$Lu̼nJb6Uo&v.r2nn{uUx;aЛ/T>{Η/>~bw>1_oD4 q;~; bVB/4Ak7hf@Jv^)"buþt~ ˓/ٓwS: H<ד*$3_ԖG v]D>{߅>"z4EWRt Ԩ^y+c^3_ӯڻGNth9HFX \u.**.s2lcڬhT}h97QkͪD$9m#Tr.ęrཿI)Ņ}͘k#"SuE$e9xT`x٫=>vۻ{x+%މ>_GO>O>o]]^='ϟs躮0u4LNs%iDɽ?m0{7x<^^]]<+4o˛~wssqu/?vUE #|Ap YkYƜm^]]DrREKvf-ayJ.9M kxɣڍj?OBQ3cUVU8IZ_9eu8G85LdMN`]&`ŷKM%jj5vX̣NQ34XNUEI۹ʮClb$켹""̖iC1 *'FĮDD$|`)@} eDy-D4%@+]N<]^^||]L-$hE28a[X,zyXQo^UrG]^EѶ܃άؼӱE+n%HVxM^sAm!eJ!낹[bQUU5Zֻ~J <1r%w+kW [\g7*NWW>P2!qYx=KFXTm;wddX' \UK()6lgy`EGDU9E1ts۫':utWD7ϟn6C&/n\#"9Kqq 1Fެ@+A!8vq8`Oqν{e^ 1xmm%Ht,*+byfzZ;qEEb4AUT%D. H'$uG2I9J‰EJ( E5-KR%4} 5朩P@$~`,'1 Ύ:?mHEACP v Ւayq*:  Q(^8@qjDibIP" y$BࠊSiHx8$~RJ@r:Ej5 Rd1Ul&'@{/_ 0ƔB$#(r;cM0KBNjݶ'yfN8ӝFkVs(6}oͻ` O{PGwn} 8x`W?X{<ҭBE]aT~eTEQuDZ-Iд 4vrՕ&?#L؞Ε>Y 1dPLb}Su YXRzqEiO^duWu\YuNuI}XO׳]m)iyOZ| #"QH@IE9rB#xUNe\ѵ)U(,騋PPQBЕZʮEĜoRL*Yg]F;xx6Y zX^:=7`:gC4XU$TJ\e MJ_Vmf:I,1]( hC{V*0)s*Zm{DujcȒoE+͏(uzszQ%pWMUb%?iV+Њ&P~O&W6 3ht]‰fͨ˄D@ IDATbj+EPeJ1bzEN̫m:̖puJձS>߲ NB&eDu5#9=Yj7D־*g|H VȷZ خx|<_ųRgWRXՕij6P1m6VǴl SC0ptDy72fvvx8bUq)~;/(`ރ|1juV}#부8D*dC4__2K9&wu0k.i?(Ζ'q _^3 WΊW̬( =V/GUvN.8 /^x-Z""Ȯ 0TK;6B`NS՞f!h&aano7]_#~ŗ߄vw{P 7wqy]]7ENR~OL["$M(ɪwW*u~O3y5F`0l cWE?Jιq!9wL6wRՙ^RsіW LL9,i9YDHӋ v5%@5*>o]66 Ɖ)QU1!3[iZY9Y..OA Q$1 ]!O T8NI\%4 @$" nB( bhAy*!!Dnz"/ST$BhR9`.y7;ҖbNV"Vo)9DaHcq|,؟v`~ [Y`WPeFQ8Idm .0djJ(gGp L"n-s#E¦o3Buz+]Ug8 6c; dƪGĪH,S8;{h IF%X0NEZ; 2s )&Ӧ԰ec֬BڡgQ Z+٘i~8hbDߧtkA*-,jֈNeUs;y(S]H9V]݌,}OSD$8n7CwwwHpoXj[f-M-gH4M, *@L (;}BWjnCG@b/P*$d&,E l!9r+Th>ٳU O]%Yx+XHB(rHNi=$ )"`5 @=fk䆆܇Yk-.WVbȡ]?3&[ቝ/P_OO8}*̾ؤk˹>/~~ ]1t ^+^^x44,&i t&XۈDT9n7"u4F29u>ǘR&du:Us9B[!dˀ&ɑ+gSEFm-hi@/SZy[B`%TnS͵DUDA D-rTBSw"Y$H Qnw'+W%"$ 9qA@E)9gqL )N#RSDTGu@Sؐ41pa'b|]ߛ44Q9 >'Tpz{TTUtA!:wע{|b<vu݆y: *9U]b%N& foCō0E eJzo̡57!M dp3j^]zpun5 2Z*sF?۾y{!ΩTߴh`-V }MH}IzN,v݊" !:2(d6i]aIK "RP򫩘DĤT9m$BU% shTb]F@3r:2%j, S  2f!װhەVs:oQր *8f<+b|Uvƒ6.u췩fARm~?z$EVWN/ r&447OIUyٳ'0De88OCk~m/zVIO)YiaO.kZ(S2U;Uie/NuuoFE{,:$us4DDDUUZVzCZlVi.`. 8 *e(L t^;W]4M햓4v©*{~8DU !pJ䂯z3 8Mcm>ǣCnxd]JWWWY{g_yґL+s0%r9c0]ljI7~'lj"b:[VDq0@1B@9YJ4QZ̮Pkmʊ&hMq'Z 휸X5WML &%p[\X8uy\pɼbw#ˉ >*KN:)u12 'Uu3KH;$ru)Nxr] NTFDb ti0*;\@ADCšBA5e낀:gV_tE99IL Hh<=ŢzjnZlb˛m}r[|~WOMb϶ cWHj?:ޖZVLI^U|0t7%fAqMNTDij6+<^p2ч"F-EG SO{DmĠLTcA6]㐏"%^Ь_\T-ӴXrziϴh +RWMvn{unY& \Se k_眉3fssQC e^Cxآh]j{EPC2-6XgʚQ=A$m rCN^dyOJ DwkJRA*h_lٖo?g>J|[l*U. q{pxqq*oQh< tDlBs|O&h9vkZ2t8n1=Y;#2veEՖYLl0gNW𫠩hѨ1YRsUfR\DT79hE *jZ@{No-khhN`j"EQsUЂ9YVaλ)~|Pz;/_^]]|P}Wf#_{/.."cu~|O~cz乧N54) IVw އiS#D ٛq=%L_+ G> Wm74}o!rՐ55(w3r`3;YJm>dCDrp@! "D8)QTs!3WRq#UIqD%W+HI Bw)jqةA8%fs)ʼnP)8Su^8V]Y`^'%9[s*V rpVMp~3fwF\ +WgEwd k[Z;$ދK1:Քu% Zdal,s*UT>\7x$v;ʼn9GrPrEwv D>$1}{`XQh&܂PŲoʣխN\<0kou_֋}aOTB%e0REܵ"4 FAuOfCqbn{!"0<~]O{e!wr% A A)[`g0 }!SBPn/'~1Qafx (L"S1)EaMO<җx X`^2ka;T{;jsaDDyJTU5Ww,GQZNϞS͕nWoٯz  LYl!g eCADR,kUG74P2iJ)9@P6&BODG ^U]ckuu42Ĥʄ̬/Ja8hSby?_CYbDALS,^]#,'DԄʰ71>F}/ ۤ5r):,"Ȉxa!hr 6c+ȵF=o1K V+1jڔ1+hv ~!Ut|*7nFUxC(gw˷fpxߎHD,uʧ]7  |]uIVv,Wk&LN[驝g_ozrJm!ொ,"nRuw˫8NFU-ͯ~&4Ys]6?CP"KŮ:߉8 ȷf$&b.hUV2)UgHR{TL-i{|]12\s{{D*8e VGE?bN4I]vxdM"wn#fEUhoG#ڍvn Iֲ3gT9{2톪hiL<"jYTl\WUˍNDt4dr1FNA=wAQ蓀@ބPm%RJԲ2ţ* 3o|mKt{NL^TY (i㔜 [׫*'Qf8qĒcT$&#v*.l9 H@sa"Q]Xov)%3):BgF"Bcp1F(puG*UdhSNaϭ~k~5VgHXG} ݪUKLGr ΀%T8}+DRQ(4Qi*uk(XkJO8 #23.ԶA(kZFF]'΃&bx7zyMG$DFYo5dk-Qx\y8mq;iOV\QUbk2a 1ŀIS.F)it:S.BZFD'RqAGvf,Y@XYDJ XV*[{Uݥ~Mx(Joy3G2`V=RٓUU2 BޒZ~PynE<=AԢh >K4&$nvz8{w/_ֹ<<}E6a~c:'"U9'| G2]_?5wlW>ǿg""\??u hv!.@]xuE]/ۗWT9hqf3K-V@Ru3#jUS(u=gnc|RY @C\)놥< …'R6MMNmVpɬyNQ_CPbQ\?' ";՜)w"]C=uWt!8 DpKQ'G .U}RUMbi8!Mc}JXbb9$z̢ȡx$0 PYGI!RDbHoEYCHN]<Z%A@ 8$#)fYQpXJeK+uKW4D:+[߅7w}ݾЈE9Lv]}Uy3Aj}F͕cߛ66bh=b:܎T P/VULT$#$)>jXyuPV-< Yn*8 uhkU1f^,ro@[6:k/V H$.X! "ҹ{[gϞ x8N>~)%RJp4 ndNn"q٩$}]8&a,lSfV6'޿񺞷 N='x>]<in'@w.../ݾwݖa5N" =?0a IDATgi b5UEq( UUaj*^HMQ}Wj\uˮ f(<gKAUQ, JpU8d\"1iT]xRBЩFMׇmlEcαUe8Yy *sɆ⦻;6nv҄4 t/U;ڪ$缣\Wcl9)M.@942M"xrSQI{u;n:&S)t;"tއ#Rߊ;"K h3E(a8Ņy*hdȇ֍$R~ݯ`ۈ΢;XgDq{ѿ:LP8y&V3ɔ. "{b7FQh~4Ѧd8&h w{|@rGSJU%eТh7Nm<>2uV(CV)ʖ~[iQ,sʓNDR*ГWnDADl ez,xkLT5XOҗH"%3)\a Ar)o DTv; +ya94%DTUK,"^UXn}߇Lige@"bls·`R\64[(Xh@+DhvQpHDsJ!tc:RS\f k;k% JMDdHYqP d5/;@qJJh&HN@Ts/L fsv @ybPI#:`^ ( iF?[s )5gI|qAS.+e3qPѦ)W,` ZF 0C";UEV6.K@8%FUQe ?n?myO=~|u{o?o qwcMϛdY̞@u4LSb>{Oqy?NgwwWׯn_]]]yD9xy 4@Dfub^EEKl_" 8**}aD$BdUUdQJ"S$n)(' H} &HF%'w3Ga Ȕ̬Sg73*"@v"!u2ᦒ1ej0HLчDɶj#UJB36g}4Ӫ,z(Hؿرzg4+1U5bqX;ٔD,v|&xy⠺]fge[[Yڷl Sk*b<=ATaezDuDD_V&RUB1s8*8,o"ZRz:WaBeȪ:/ո͂RW䟢"#TTzkg8VΥzù,V7"Ia8֦)t rΥ&g4VlevQ;笞V]0-EDSkTVމ7 AUA˲SVi~ ̫WN\B3"Jx?"a\ Ham1j  3:jJ QUTE|@'>68="22YּCsN$Y(N4Z$̱)* Y2_k gDEc5#cԸ)bkv0;@gEd=6G1|DP0~9+/]']_\~ϟ?qqqssG1_|qbnw8 J9Aۀ{p%}xseYs6L#[xSvfٙb܅ǧO~j9vBRJjKTfdA1q# skKL"& 4W#,)TtvgV*{zġFMTE,̕-TXX k"9%CH-Eq&J vcm0HT\"$[Lu"bRri UTk4q"p Ιۻ&fft1$Dq駓H1NQu38 *]Gș@I*3CKb79۽4MNDs1NI_qr B-/֛s)xp܂+s+Ƶsک[ ;Ώ) m2 ju]|nz +kj"YiX\JpU#- 5(L}P=Vꭶmˍe~쯖+$lQJ*%'t~% (=%-qfe2䎪 d&WVt"S{="lZ*vJUE@l"E xfI$"!y\V:6 }[~_MSE,MhZHt6vϧMVa,ݚ8:o!:Ms6 TfCrb2̷ l sw [crŗ(Gf)AF"S8) Ŝ4XUEuv RKR\^D6a#b^]n97MC6S뾅?k!pJ)~RJ0X Ke~uEHBIXR"=,Tr]uP}Gv]IGٝH"A<= w?<"22gB8UYowoQ/ !ۊ`fC%IuU"Lw FlD FUT XSDnW L[t~4q.7cdTd=jf9[ eK+cAEmO8U k=#9 +eJ`Y{*|UOԋ&zpe'fN0JG^:r#m:x`=9}G~sw?fCD_|?G}jMOקVMY 9|Z|uuE"jcL2+H ]V8 14Hm37Y<[oڽpED xSs NasXr׊Tp+n%a~JWrI׶S=RKF}YRUGG|3pV/)ZBv["& DjJ 3v3BB fUIЯsQH\"~5e0k.)k5E}ShJR阪vC1^0ty@~7rL̤Fn PXԘ)80G^`ԔzzPw݊KAw6 "s"jSn @8.1U߿[q˷T{uH+*R}ZF͍3L ˶_b;'0SIk*H8pt L5W\}SQUh \NZqʋ W{>8x%H:Qk<.t^i0_r -_Kl:*4"rLדՐ:Ϟ.bEsm*Xw\@p U^ pmW4<=gzPBIM5DQ M{" a`9,)O3l9$"=d|UuFm`{™;o~?__6Co7>}ɓ?}ODlsڟПtLqm6T)n9pү'|!>z8WkfJ6"nޥzG!`EJ l4RXۉf^ff&EwVDDJ2˃Q·hXwcPnܭL|$`20p:ӅI 3:O/_DGK1'"\iw:&.DDL.c+uA9-D́(IOWUv\-Xl+5&td.>en'''Dzbгg2c^1qg@JđC*.tu͹BFb'_O UE?˅n:O" Eke9+u-,y3s# |p s,mSoY\\fS7ZvNiu٨;fh7V“<􎵜w{"pzzfvss٬^F)e |I}C\hf5O,Q.iͦڧ5eJpʔ)nؼ`Scyz˺u1oYoO8dxsJ>elڠOu#6i~ X0u8Ƹ^4CiU)+F:nT3W'<˧^ @u㥙P/BQ@e) "v]Q".&1MCʄ@U^w(OE%u$+OM_BI#ffi&2(&3`bW9)1`YɪW)3LX- )Y[Ύ&$(D3|=2+r]9͉h˛"Ə~_?|Ɠ/6G?z?O?}蕛SJ=sxdQ TT^2% P ,<=ADL\Qzt潯NԝSB;!hʣ bf^8LER8vM0}ϡC`} f7J7A`""/jf6^spU2fhGcۛPbf)%W͌iSa;JI.ٖ:۫!Kp}ׯ&kF xMpdNiP3J72-(>|G|u޺ۧaΗ^$ Ɩ^kBg"} n~h#6h.̥Ȕ69AY$a^)0EV NU]Q URe_Lrnc0NhtfͭDu>Q&nf#%_Mh5~ԃ۱}PG# ⯰w'ӰRNAS-lf US*Q}/1+/ PCEX ' y<܊_,+V8^ϨvGd?<~ޛ 3z~?`n?ŏ코zܜ?nbܬjG" vϻn^ '''u-A u]n0 Cۏsαu]刱3U |rrrutuxzZT&r\FjI=7&Gـ j]Qћ[^|DT9.k @:Ǫ8 ~|`T$arA#N(z ZEDlT``<.W"s8t&r[0i8!AeVQ—uژ^_&M5G׾;3.^WlFD.]@T7PR q%"j,jPFbc)iGII HZ0 Dn@1`**"jdfz|+_շjY~f6LAY쏭Ec{I@:g6F\l|Wѵy@^~" ~\ADPURV49?^`QŠJXҞ.ob{m_ UI< eNkqAGu^&cS_4 uT :ώ̍ s+5NPg> mr&F}nq D;n1X*c| WpFjI(%oc#=2oŖhs^w~x D#}}}gPT\lqeF_1a1D*92ROrhț31!{G+&^B@Լ`,reJMf?jp`v47nUX4mߝr~z:%=??wN~o\^]zݘ c~=43}RU(]w"iZ]\\[ׯ~kxBP'oW0RbZmw!7?Tnuԯ6+&"jRKZR6Ρ,3SMʙH RC/!I&~q/5DP::&Obx裓}V~>(3q^$HQb9ƸZ͚CK"8̌9[.%̜RA%@Z`M~vw`l$I/f'xSO1B,DcPծYŠD. 1fc]"ϢjuTUH7tzELAe8(H2SMIMqBlk81miD8r1Nu_>s X+ IDAT Kr`v@pLvxE3\xWå~ dzX"꺮Bm*}jvZ8`6uZjcW)@-^iM΃gᎁ9שlfraPUaƷg O0OE*y5xRQ#Ղ޲RnWv^6RR2Qa ky7Tֵ Z-sJDskP6c);1RJ$!U<୷޼Qfs}sVØ߿qq!a~Z6Ǐw0d J}NQ3=sn?38BeBF$l8!(af8}\^֌͌$3*ؽB0ZzlivZJlGWf@̰>#S]7TݣLUDFBQN v0SA#QLy;Ʀ#T3'#Y@juy8cs9t1{g\/OvYgTF2±Ġ߀yayv~~QǮ PD4t w/>͟~nln\~rӾw/oO׾W7Iw rq{al)Pe|2FЈ???w>cg`U!7>ѣu=_iy w߅!8F:Ӡ1@ v7'n7}OzwqL^bfDDj#b +v''3va?9IU]s,;# x:cCLqe `XAkL,=7GKb5WmhӃ x ,"8q[u--L NMEtGD@Uq<: J@ C3Y}0ƧWW2V}6f#[ (N3JB$΀KUFF1Z O>F0 `u%3TuH;ajo/..moNLƝ%QBгA]6'g#y/3\aǴS$n{^!vp !(E[Ș#;((1ڲӪªJ1 58-G`s4hVz;2[:rU38Ծr2mKTf:ۙo1쿚C[b9Q !Hd}dǘRh*{|JJjdZ41[[sVeW1>aQ>΅> ~r^%ɲ]tS)5_*zpZ_2qEީ|4Djb^\6xn~8qaR{U''_j5SH~HSǡ o3w_UJQCR3Pֶt i'nb+šS.{I|uC!&Wdbk<%YK8^B1c5=&Wtfe-o:P]b;^ "G?jד_/>y_/>?7#\]뾻ۿϻǟ~7cվT\R):a:l6(%TjR1˂ar{]`!03SM CFXd4" E:Q,%5}#={2ҘRrDh18[ޜ/oY/,JWLlLGs/V۲C좻QωA\@[Y5@fls;" !蹾rHWا4lWz["0]c1oq= $p#M +x( kΔvLRR%ט)#ߒ+7ITl&bD+@~m'[Ep^Px|1!lwn^ 3L]̼wcmbc1?%X.gp}sXjLnߴœyo-~> 8޶'s/}ő6C_U8C(޸fNśj 4!^%)n"k%q=`mq]ߗO{ j@T2ZD~Z:gϵ(cC}}Bx Ð 1~ب̄&X]Da`XOPB tj3p_l\xX[Z(?,5u[6Y] a}h}/|*\M) u+IwjG(C՟AKDžƊjWj3,۳,f%""*L@ _{3, Կ|griNPf9Yybf}vv< !F1œ'oS)u[)Oj1s8[-{sO)_Si u !h"@2 p]oɝ ]̻\oro'X`\懲f)y"A:E3&`BD kF΀R+ō_U@`@FBF:Kae&MЫ [{fgwjy}yw?GWOxrrRm7|~jt:_lw'O~޸n_">;jڣp=B5*f%/^ƲVݍGIC "BTr[Xu%"xȕ.΍}Ev+) Jr&=į7'hɊX>RBfIUMd&P/c"nW8!8Wz}2"Ӯ @D%`f 8&ano d9&8 Su@46!-nlJ%PQhB= cGzO v*P<2=@cwA4%-ܶBuR_3nb}O8fDE3+u뀏ɢA};4i .>Qęvн $Il/Vɮmߎ܊S f*DPh!n#Cjֳ*>Z'v9٥D*z,qԋp*+UX?A~~zrrpu~Jc(;Y)Oő8,YndleOQ13!tjBDiB.^c<V?hGn%4 3zϡsm ԅ >ffl~tyYw!# R*̝D+PgNNF@V(z QQgrKW>v{xrd?7YowG|e.7M>Gy;?oœϟُ޻MO~֭I6qqXU Χb 5U9B!usmDȬd&htNotr>I1Z)zZodVQ߱e?0"E@jyҸ%ǘQ-A8u@0ϠP "#+?3'0l= 3(!v]GSn)LmBIFb"**JF8ŇY)]7FP )TƜLuf{bUxcenvkjlDDjl &t4"Pf AИBԌHA˄@:WZl̿ 3AknnClm'AKPgFTjH7'IZݧ#YQjGGmmp+zG65;D:ĭ$ΣZbQ(7_-\׋}NGDvUV4-V k.tr^EUg,8w~}Z=/b+RiŬuaf}"a;˛muaϞ5ðSan6.)p}X TY!b{ Wgk**Sfшܞ9tNiE f3JznVU߇@l{s9⿊&w 3pXY2!By̅AǴ0[Մgs#2b7$\jn1lqC^f&L4X`Msw[wp_&ԓGw쑪 듔[RO|揿Y!K;<9oU?)@<NW c*\}˝|@pWV85x84{VUQHAQULh 2xVNb gYXjfY pNerYh13Zf뺎n01΃$̩Jiڸlh--(MQ-hxk7*RJ2BŜdewqnopZIDaۍdDUՔD44RYJ?PLIqcoL1IJ#{Z! E煀vc6 0m `-^_x+>`<{`A`0T&Cïf']]Z~m7BC7rkK _M@N^ CuQUѱ ]bw&c A5Y8Ÿ3 B!M)+Su :wS "wpBT%gjٵW#WN@Vy1P6%ˆZ_,k(kk4E-gME^r(v6%]vh5ec4뙣*jCRJLIb炵TLn5])rmr1Rۘ!C|ۙW,y, $AL<'0Gh5]o1DxԞ$SXURk&3' .yvoRIJ[̹t(8z!F(YE˄pIEhÿxWZo.o{~8={wG_o!T 땚o9>?9o(i eGǜy_Ug ̨Q 1~Qb\2e7J;;U 2"q9_MI5I|d&0stӁr~53zBD$#31H*=7JNSd!z ]H@,Ԣu0©P TmrR$" !();+Ezj25&31CJԅͭIXV]mS FvX?'yi+-'b^woǕz-'69r  wƚdShG8 d"f:u}GBi.V4Craճ4K9aQ CK|+e(fC΁ 䑏.ȨzfWDfFҢlB+,v7ZUEW4/-;s tǴu]]rm"ڸB Y_s۴[b@{cqR7ȥ'M|Rf&kUW;nW_u]&x3O 3GM̖lfE6gorhD6 Ѐ&D,"ND>кAet:qz:^_;|=GyF>YANbQGf c8 ^/>ǻ7wꐌmjߜz /;PVi./]") fB[/hs.~nckLmTUrRDFtIهk4T5s:R| O"V{C~buj@j S sgA1,K`<6l̾3L3Oi uVg0˹BDN1TrpX^r@Y!uNkv-SN7dl R=rY%_' ry^! Y&jr=ϩ(0visɒ@mæ 5e٫Y?hdn}g& wy- ,>Ւ{j"3мvgɪo^ܲj#-Q.ZUקJG+J;=1}oߺ"B'B\`d[uf@WU-ecdAmyW_P<-C4GduQvh&XԀKCz6VT5{ &U\I>ocq{.45[Ϲ";R^jQ.!ۍiRJa̴:U !oIfצucLT*`p\;,{S7^a'Jjh0Z;;&7Lrw=Mը(?Q0]@}o?@_x} 6X;r`LQ5"pX prvOͨPzGo>xA7p^×?c\^4ķ Xh6k V8\Ƀ>R Ie"ڮ0e]J'h ZYuG}Χ$ #ƕĖ_f!*w+P[]Tx sv4 8xqrCE/.^JQo&ؔ!C ds:;hBCU'ո 1Qɩ_EzJRchj1sC;=8j/Ue (EOK"Wl_\yYs곤p2NLPRUdxFIUMFMaQ QDzj@봔rv+gAZ$D UIAS&.<%W3,0hIF'@dui#t9'qba,Eۧy5lNoo K<͝~=^#62u7ͣSJ|LO?aV+h;;+[܅_kxe3_]-.Ŏҩ2M'G,syd+[!M:.=T_ hK&Љz-Y\Higsڼ0utԘ7fBr r"1`_fJvf3SUǛ*I8:à !(*W3˳$% *ꛋxյe٤ڨ5VTPغ keh4yR:dPTƽ=7-(F ,~ضrMvOS6׎D5j +リ:"Jf2SMU lsi~9\&?/Vev sE4ow'BR{pf.nv7?~+['j^oDBW^~F"кy׼϶E 5w3t:LJKEk4M[:Q~[+z>F5dIDĥ@5#FZr/>٧̊qZ*{uh/ݬwcVi5bjq43s*jiۜ)w?X{6(OTeRZ13f R!ZFb>< \"!\M^*C0LbR$Ӫ5Yfhe%l; jh8MӔ=gI5feX."xO)'5Ȕ `zv#1Pa)ݿ=U:T?yQomg K4Q__!fhǠrPm}5ñlF[+vU,ݶ >umFA3EzK\q}c-𼎰~.QSy!N=>!/)|ɭCIRz*(WU5 zꙻ8e5оS"߶s̼eV[A%K0Hmz"UeEKV IŌZfkZ11N{ɣh;n(\vwdx,(53ޔTU@PpDf7uuQK(7ik}UKD0Z>j $hʴ}W5qxtn?3fxU=Nu Pb|LIq,iA_c6**&g} Y컚e$(߀:GG"-ݥ}X0~:ȣR>=փG黓]l:7O~?oWWCm:q0:%I]~5<'Z2J~.5x*DA2<\%cVk!Nrd-+| ʊY r=G>ۗo:&UACaR0SS+6@~kh*فVXۚyIRZ/-fr/9 8F'Xgۯ 2{i ږ(U<0 ?~r#{8aU`fV(\.ϕzPS0ŨK'R#:j);X`b B.!}emXWE()Fᠦƙu` O-xh'B{hOzU9G}Vs^cppτc-zZBk,3Z E'"F5K.Iav3rLqz?ٳ mM *L[ R O jn^St)자z"dc~S<!6jʌ hѲ)T$;0%MS 2_ f5җP@Yqed]U"Z~-˰\Epa'>|zK( [$=HXk)D Y4;p_)Hnd%i)B{buw_%#Ylq_e13HŬ7ZnR^U7tGuh>Յfź2%C3$Zۈ35֪ij ˰YH?n?5?CO\_~CyZr SW}cD6~1URXf W3}8'%IƂ违E7hiDJsчK fq=Z`3C5cqd8|sh/-F4/%^Yz~^UXHQ=@"nRe9rˆ,iVxGUKZz\]G46iJ0RXJB=JjY;dz$_}ݩڲr\#zDu(䋆 &5Rx<9bu2g3DxBX9oHs0DgSV+^w3B&34 S%Mcb8YT )i;5%OWqK\eHQ8NtT1byptνJ*E# yC193ڹ6}Y|}?x;n߆Z .$C;ЖC&wHD0e;;"FD͖)%x8B!H }[K%vCSS=l0&%P@Ķ1Xrnlq\Jxu5`'?~J3{/K珡Th2o+j#̕У'$' j.`ɡk8Lrm=d2ToS]@i#21SD~^kz"SIVlxїec$&hZNآ^XPh+ ?aFT&P0ظ00%QOYڨ:z+Ka{UpI@^j&1GAF%(JfG?憈$M^JlYXj뺺7G{ ]Ǥ2Xtf' {ӽq%Fx?Ж9 @3&Fjܩ6a[G<0+;KHMbR U&4 IDAT_v{_vےo$Q6*ۑխ5y~d&6쫏f4kB52ҁ.jRf3;,8N%aU,\kAyLnYfC :43f3P3vgj0QIʤ0 R$}Jb[f82rcZn&HM)Id)0Oû:I0y9=*o_c˱S[jdn< 5^| U.6K-k۹} 12(cL a3 iKFP?v`t;on\hd Y"T8KvD@̴E0vZ~AyYβwޓF,#iYbmv{a}ǏΖ񾵼_ ((ݓ7-ghXR$z䟕k_Biz5{.QTR QlDb|2vpƙV,=9e:xϋS̖C%9w8^ߙ<%t Иh6. ~Ya1bmweЎ5?Y:W'FF;!'kpK LCf~Be>TDVRUN-~Udg1 ZO vh餛bD߾kh :y4ͺx7oss8Htg1I6CW,K@y+:r^;${*c*dLuJ/'8Xb1aεsIe7,ݗuwnhc? qUX1Y+nh4hY-&4;y m;JG4Nڧ9 Q1y7ѐoi1}v~M8l`i#L7ѻտ3XJ{uYH4jcJN.1Ř  @N ԤO٘Zt7x/̲ l'3h?JY72>+D)3ʹMO3N&$)i6<3D,T0_? N%m.9hD&`̆x{S׆M.eP'4 $IEB+ 8fV쒍ɖI63"00ZF$f W pm99iVvi_{i:ɫ3m09^tț+p Ȓ|?jTe5=H<˜Cwx#&u\,.<zD%l|D{Ca렸dBw~7d5N8c0YHw+FۀU@ֈ dWHaeY2sbq2MYۄ=WI=Mzidl^p9l 8v&3S~L`7SC=Nr[nh,H @Or֦TEJPlѯ-Z7|ADvAl F #-!ԏ,a'@.$$Xi4 [a{w6BAZ5q|PpH 0ܪ9jj~B>@ xfd1G4tsz_iI o&EV\f+AUW?gvXa+'3{y/S"af0rsMҍ8cL̻`k!zjڂV  JcniΔ/ N;*~GRܲ>3I:!%NXAŴ6t~~Gf4' CQ_ )aM60~9h혇M3I[ILT#ig zcD)jZk8$${s-O /Wy\96bGH;qWIJ-yHc,IQ:;Why[ۚ$>ˬ_;tDk6cyǪ{/[e7NZen̡gv~ Ne!?*:y˫ˣ2LBwL]ߙ +qFkFQ!Z|VfCWth8GH8,gh3QK{Jєٍ5Cq%feӓ07ԓ́6:eN\~i<^ݭ%h ccs\ȝm;B-Os U\Qk,$6Wl!u+̛Y OQW ̖i{yߺIK(@H>B57t9# _l,] Hq:mmz 8dgA͏$I^WOçƶ2IāQI~(6w񽼗sDfEl%fnJY^9s̊?]AOPgܵONwf)cs99}ymӟVj5`?k;5b1HpuOu\} "¬Rm$mEqz9Xћ=%!9T%DljuvTrH(]Ƭ$JAhWl2}m1# 8ϓFJ @qŰ _ã}pgT 4HR>M bٙ(ڌBҥG'$ՁEo,cELq~w4jN3d'LCl .jʹ_jx+oIο񤽾y:g~ݜQm2:a#l9bZ @0j1<S\4A;š 51nJ7–'G6[7\UmHE@3.y.[<~5$.,!oL%|RB•û[9bV5q\ZN0d<'.Ȗ0C`Q&ϝc04P~[XAJRIdo.BxY#}6 T^yk7~u@RBlI ?~[."^[&|_I,h`cc@BKݩg )0F&HN64v4 !BJaUfݰ }܃0dq2&y 'k}ӯCh{yi\oP`:i.E%̌|l"jN=fW<HNvv1^LjȜ ˸2t}Ϸ<;߽]~ǃ5n9Ҹ8mr*`2HAay]xM b!\V+yUߤ;=()j>" ;Z%"hE?Y2BKA?K<}D~% Jߓ7hQԨA7q$RƋ[,~Q/_hu-?ק?">ڂF`ael{ ME L6xnu+ɎRAIFDDיHlMju@ ㅮ"ҔDr$4;}FKm$@$d_mKJ)kawwDU!r-ϟ_.˺rbau%7bSRU(7ĽZVfz)@{* Xxs"ѭ`ɕ&'(=dπ0' F7Ei8$o(z )ƜHiG AkUT+'\ $JY,hͱ{i]IqވDBXTEĊ̑a ]y\`j͏#%u`IpHWM:O hS6̕rdIpb<ȓtm;=F0@3Q0MN&2+E{CvGYN-t,HI3*IߢC ivȷ ]kճ TMͺlv@wJ!`J~2Րwߣ\Ǽ̪搖O3xnxFK*?Wx0=dR?);09F|z Y);lƯGZ_76H~CLT(cs^pv^tRp"=݅D'D6ކ,#1˲CFge^˲n'fV|eej续̤ e/-G|a\ 6)Ъu ;'6VAo^DSe,49nMmGTZCp X%Ǧm +3_ex!,d3b\(ȗ1ͿCJKŔc<ϵ$Vv)cHvYlfCDfʐ!:)|_X^%mo;e|t|O-휌jLcT|Čy|@&/E3TF!E3oOUuQh$ 5^ʶˉv-UYdG6RGآs5L,"2e2#IITl; Isrh hz4<~z Ԇ) i4- Su{In"](DA $/f0@ɸ e)e08HwBl)[^}r6RxG6>' o+w'͌8>?g&-dlo\wnbyG L{V":+~__aMw>z0޽^#=>:뱷\93+&:O\ ˯UƲX b;w$n9Z2S$m!*S('Icyeejz^nÑiۢ%)#;ixs41;ymb>f!bZsk4`GɛӥnHm(Nu_V^/%=@%2Úo;ÁD#|t9% py4ĽQJ \T?dRҩ4 FHqZFmBZzS eJ*c) F٦xqҌ#[Aζ9̄z|XW>|7O>@d?VB3F<\h c4~CFW8H] ޸=q B>"kC<"x""L5z4/F+h͐2teHdTaj: Y!xD>DI<8lĘOxKBtVЯQ=!0Y>RO&L̖+st.SaEN0~Ҳ:{& iZh̊]KI-(ZYIF:npnBu#FV=Ԡ`Bҵ3UAtp}핉>dsz wuZ(=N/pʽs毇gݸy ٹyĎC}Wݛf>ü+G@Zg%.y/*ȁij c~v/޾cb>hyWf}Y62jؚw\Rn\#Ye8ɲ,`W1޾,? PcY5w]ER?7F`9]gaI4p{tpМ4}=[LWt'>j<{do&D tp I#RK=~y3M6MW GHkNYRzٸ}]؛ː<,ϯiRP$$̥AIs]#/@i KffHS?9 wN 4);ШŷJ%>]?E܊]<]Z|#`iێ7땾I =E;J95w"kH^-lԦK"#Fbcm@:!" ;}JԐ0+&wY%,CF9Y0/Bŝ<~ *q0Siݐ׈[9o1G.XAh/hP™K=YAlZőJ.0)ANМhtqL-ba$JRhab7m+m$$j4 <5G8 O4?G';σ|.zM]690sSwԝG[A?<8Dz<> c}=IG}Sco,j ]s .;vl oϺ_RfӠ(AOǬP287a. o #:t ieX kƒibX5//_U\8tX42ȅ=&:.KPB29`dz5O߻hbCEManO.Y吷a n=^.zպ:>Y?xe@ `tE) B g ~4__y9-oX_7Wd9l4>SLH5x‡)GGfTeD*_gjI\rS!|xHΚ5$eY=+%]0zJidϟ?ZGࢻ֚#->s6䎒z5<(3;Og93 PwrqDtf!ҕVj9hƥCyxlO#[(*A-Prg [8\&h_R&iSnD_R">րCM✩K [#.'smerTBU-嚯Z Sw08t8[~Em_#;E+_5t+y?/ƥ 4,.W 뻡#h  YISxv xɭ58Sa:d䯻;obpRyekDPA JɌ DRz*&.֕ !%$f(e/0X[vۇb^gw^LOD#4C-}ܤMb˚ط3L K4($~Sڲ;Ff2] =mL p yz%rS-6X2:Ȧ.\X.e ,Rʲr@`!ѷhŧ Α`smvL&Gp#JͦI?5:>egi@Gc/o8 :Y;ecdJO's;r&<טdWj_hΖtb>Trw%zu)|G9fQ̝'#f c3c\rִpġ$%&C,ONڇ˲,O+gGtH)o[Vh`Cc'o9>^$$zFAAnpf&5yv`2mS# s"l"BLjmCb4mҸP-ubD GdڐCPd"_<] N\Y)\DH2@m3n؁IHebfu6F`A"$nw{r;S2W_/1K+A~w-Š oəՏX Fj[ L-" t:ٯ%:(ZW :3($4Mu;kB"E'iF^ _CH)`pݎ:rK}gɺǥzר2 嚺M7k [JC>2ށ:HVs=qE3 ٳƉzi.9]L[ЌM7*DdVamBMWuMU̖bݾ& $eaRY"|/CFUmƕDMߍߑ9:YrN#<4lA*ݝ7>zl_MsjpRH}q]v^ f:^Z#vV,rȎ[ϾRku~\aYL4u{ CX"r.ߞ.|\.y#Y D&4Pf.eYexR ^,a\$y֟I3^.P\.Oc|"qVDbd .oAk}C"TUQKR2O} GE3[roYJBD"B\$f@wIsI"威y~5I-")8x!6mƲf<}ЀqSo>ߌ[q_!s8rayr}z,zZ dz`*w?HJ,@rXɭ./JV݌ "X!]cC ȰRt$Gth> L۴-cA2#tz{ ,k{t@q\ Ij]oeme}=}hftYE)3Tb (Խ$rⰭ#%.p =8H21dK҇A)'adx صD4 ߈"(BBC4ArPuE/Ћ3+@DbG–Ɋhp:J I\!E4# zQ(U-+qk]Qk0)}$F~ئ{rf۸AjݍI3=3 Rz}ق'Ue:ۓdhtv YT|xκv[D%9ʈ a󽝤uܓxE3+<3HIKB:54 +d6 i0AG=ؽ3kFܿQ~4SnuѮJ* x`)Itkb_GDWoe(A$gSGqĢa<䰡/Kz M׳5 ksyohBODtJrlD@۹ҍqǠx!`Ad( IE3VJ\. V>\JzMrI?0w~tpnT-Q?9;a˺].`>?02ڥt4׼>'oH-ZD4L+f豲\d2Q]#Q d"#oa-r?$}eeїRJ۫u(}7BB(MG{QKPƑ]^iP_TH3ˀKgPޙefw)p{މvu7aѸ|O@\_~tgĀ\?YDX<߾rsP{y/DXNnwDm<5UAR1zɑFDʄy[h] J6wuOfU dl6uM`9!%7TZ<]Һ(>p 7A-`0Xp_<{R=@Z3*1 HJk*jf)dz&<'M-SzM\0#G;Fn5Vz&ȸ`whNQݡȱ;m܃` a=DPDX$y1]z5/H2$B`2Ry|ẍqtSQU,fJ:B)h_{-@yxK႑)nRwb <, -|x"q5^GR>v:Es14m7ϦIW3ouZizɸ4!F -)sa2@.K"ݖeKԝ(9bځg3vli-OP=؋l$!*PfMekuRJ|MóFQ}bQhM~Zhb6|i,4!YsHtPֺy\Y8`䱌 VfaT<}/ڐ|o~Sl5OM9Kʡ_tܾ9#"e_e@ȝb<^Wֶђ`qv +JsӸlm ǫ*tr?¡ܛ7湩r^]7{yVu:׬6]JA#{wch:f̪O3_ԹNQZ`f$g!ahdfWpxDdjQY4p) $`L H.&Q _ʋu\.?~\z\u]zD *3EV3KWt %yIAb\<ְPD#"ì%]c#jDH4id(]iYRϏ H`V2# UJ0jf0 "'R UyFZ.Y7|(۩E8 cWhMM{'~=D3M7$bO2_@Q| /y@e1[ey?op}?oߺ̛|I aa`C[̥`xlNlS.ƨ*_9gpoxM {{PR ÁE-]cTє%}I&A1tv>/7iu@ vؑMDG*ffzD*$9H Um,.'p)diF#GL`P*Ñ0)I]:"sw遦-EMcۺkIwlZ뺮5jkͯa%1F#-Hcwsao)s>OZ.1~"7II" +ƍIs?1p`OwG`.zD<==e?qPA;wpۜ]qV !9=ȾWqO{+;e>"ۭK>|B)"n۲,Çr͋%m(y&T$ıS1g8'Oۃ"ٶF7z$ yni`jZ??O?_K|,/H)Q?S"Bȩ|:I#i.%F*9$ȁL'$F C~A'7.fe;JI1Q#.BX- +6-!sDIBi+eIYЀu@# ^Af0Jd#6׊z?ÅKIEc#.O׏?_t<%[(;{:ui#jtm !!S)#[ 1(1A!EK\gT 8Ad<<[=֌HnAGc2(}=j8mkd;R&R %~'X'GNLˀH$ !DZobV,Ip򤀥Ip5y Vҝ$ Lvra:ng `@vIZ[hR͛#:'sdC_e?FnHdWNVȢoB6by}^H6s (0ܗY>LѹAgC;;xHqsdaԝf𺃮8vU@Q>G_¾fx/e&<<=^8t&w|KZ={9z~sefP~-eQx+ Ԍ^YkFXHu_>Dewy`ۃGvpq!:=B}]溙 dxyyɠv|~OOO///KI;q&4OSa@:yw˽Mn>}~砂uK Ԉo4% AVXb!SZJC QDAQ‚@%,EIRݸdRh„ -H4Y!CO|dXA?d >E`5Ac%7ɹ}pOQuCuŖ7H.$CI G{6j |>cy@6soM__oY>!Byr{Ioe!O?PW_Wߞou?ӗ/U~˗e^Fy,>`a'`&]ưe6)mNPM!9'O(m=jlE5.Ҙ5tC'g724z[_ڎw5uZOqb&r_R$D<P}@.C+vTdHգy%UFҖ+$Ֆ' b RjNyf, `i8SCl,"  ^pJ$Q_uOy;g3hô6ߦS_43`7OF {]fҽI;p^/1s-cះQGƕq3Gzg`<2y4f|^윛b9) o+ߤd|<c5 ?Gq;hA.r_FUtpfR1'd^nC.ݕ"Q&\=g |mYkf~} y[ػ IDATlOG✁jgNIa5b3+:W+ vjݞ-\WkpiH;]>98"y{y;zp`?#CBµw6#)x{)Ϸ*˟ UXٝȲ"=.t[la>l`Y 4{A60N6?M-\!xxP%Qjfnv[D +#19 $;2T#5E; ҷ쏍QO7MDoCLwNzRW>(=`gY׃VrPkrY`` d]br?˗ϗu}x/^ +Ś1#It Gm6p΂6챝K}4EZ^%"tkzݘw]rv.MC6IAIȂnI1uv#G)IzԱ}d&d3'=7Oh"Z6$#'/`tn V+'(&՟ɢ氓it# V5$ʱQ],f%pJtw(Ec7 ]iJnpm=7$ZoZk++ԀEutVD Uh&狓pMAPj)]{l-oYRJiOa:d1ew0lb y!Rn[nJbmg9jUd|C]~tgT6_e_6O89(mL44r۲]#2ŹAsww^YYfZ1gF~;/S-b.L7h iJ@@s }݀v7Q*-H׊6N>Ed[WRT(e#hkP k>}z~~~yy%\.H ّ{{kq.p_ lHZ{I-I(h'BHXb1g]/\Z@8Mq#*-p%"ncGKR>\B]- bv6/Hf办"Nr@`Qh<7)!Zk)$!Ԉ@YJ- Ǭ`gh` 'Jʬ?٬EP&ycV<β_kgS =44 ̈ DQp5JQAQDߋ1SQh9Dddx=ǩ{ܱO瞳:߽Z }9b_#O)g._ |!38Mm g M eT(d!(ʼnjBqzzs.\gB}fY^I>Vmddk1[Ƞi)zcBOgd>uyQ&9W2~Ek 4YE ȤirQ8*51silh1U ՛1&PMdHYn͜M-ٛ*39WDҜ ^d6ـ#Bc)cYyHu9@G#gIc4YF&N,Y%CTͱ,h1j-DȲd1dLӔRJ:%VifM1&KUvY9η̹\v(~#;政١SȈ~#TȨѨNa3I"mD#q n@``h% KU2so1ϱC⻌P"Jvѹ:ͺt@=>KՈu?Յ+$h1,]2S11QA$t{ !2jvȔw-n9C-&$ KQ$#+g"q-ͭ X Zva+$"J7 K'CV?yBB3jA72 Yٷ0j3Y(U[Ѩ!Gv/%jظ plGc>;d1u>K.=;svN%NaOߑeX?CiTY>cq3"8撹=r  )3DyLpضWN晷ہKiO^2;#86ǰ=(=gyzpkF/ (6Ѷ0|ycG^Ay ӻebA 0By#qs(tDba[E䅴}s+1 ͏.|sX5;ɯ tpyp,5l{G~b䷨}y#jl!e]l{ccbŰ0bN;p&33QN鰉yA(4nYl~_[9d(bX PHdIQ| 6;7݀z蟝RЈ}KsDDD`%)sKc2Vod;#&5 18)#(AI$V/p5KF/<2Gو:v1n8vB!KnNճ™Ef>ww3w\rG2uÌga`]ê0m_;8|}9oBOֳVi10/GNE< [0?Ijl7.8x֙$zkgjnqd'/se,*sw+pej>?b\0=':s:vK=iHtj{p aukX^a} <-ǻ>-JA &Lu;2o,=1hZzNݫ߃c.Ug1(?y}RǾնvY]v<`g>'ΆٴtX9ÌvZTMwojaq-0,ڀ |;op#"֦,5JyG8 Zk"✳w-M3*h~5cH[o:Wü*cdXNcF.bȟ63'p'~"3"]W`LE0Bp($$IJRD 0\8Pȇ0B0"ZI)m%cg4Q5aXdhCzjU!O=}1:2M)d5Y2v&5fjXs7n)c2“y1vlO֭[IRj ǡmL$'C?kC+]ǀ29o1s/^+YInM9[ܟeIEjWN rH0ˬ0H,rYUKZ΀f 0Qlr柇[UWw0ew<*168$meIY\\SB-~h&ƥ9](Mة_Qa;x͌I 4_s΄H[z˻ͭ7x*5,g"!C@$5.J g j7vG@6NBpdƘ$I0#52ʑqjg;o2Z"un "; o!/cpcڣ8sfuQ^I,l5b`;=S4wlҘ2I)9uqQkRj%v-)e]ƘRqe^%8Hx:ZRqxA*Q9$IlMQr1$ I)YA'H3@ JDT59tR8u5~S+Yn̬dR= hN$ mLMz;zeGsiUY$qPHmkR&lcRtAv[Y++Ut? x$0Ο(V\.#+(\a8DvÝF )LHHg3y DA[,c -6N<wZ#jH i!O~a^V)n0#k挥iEQ$nt>Ck!#HkJ4;pù<.S2X5a3 "m)SEoWruIoqA]Ѵ. G Y $K=IMViO.L(hH+^SY0@Y4%XX`h\9`Mvqê*>`/M>Gb:4RZfuz< ,472*fK1YdORBV4w)A,,V|{SJeM)c8M:[(8ai,07짼ư8XRW9aoVnK\ z.dQ2/c7^ DxcoG;ccjq,H$,pAfֆa fJ~ƚar<ԾZk=;;-eh48qk8/?>SJOl1{4L%<>n\F%T:$I 1-JNEev֌Spo~ZG7RA«aAEY)Z)aƷfx3뚒G0&|^gYBc9 Dd2']c&'qGS\4Y9͒pUmѫUyQgJ842G@vwݗaEi u[h(R71ڝQTþ Y=ϲ<_<ʠq]H)sRj6s/" ֙oRJk=66E M 0s' V>(|<^znIӈsẌG,Zq)+@$:tN~O}X& ?-J'#9y?uWٱ|޻>zeW-vEf̆^~M^Y%MR)c\9`tӞ2x?_E򱕍!"f+:G+=87q;BZؚwEْtֱn+&zq8X$i9Tyc i(2߬ D G(r-!7>%Oor.t<šQcg9u`T'+KRSR Pʆc]60PKga(Y;ttxlJG\DәAe`ՆP5RmFo{R_תL;x8-q)j֡~?CPZ.-H2z θZqnZYg{ C0ٰTb1)Yu T)R5CpTc.RmOB<'qbA<y6 }JwđܘM |y~KaÁ3)$o5e9.ExҤ0"aJ*H5+(_M[ h9RJA{b(aq˻v(; <⇹$ ݔ:8ic~Cnښ~Upsشg97]5kqf.aZ d8"sN85#4Jq88*I(fw ̨xZFlK|k>>eowCMSƗʼnӻ[֨vzd>8<UqXl4J\ERJ2"TTjZ XLK bBl V+EQ/J1Ιf(rGj=,bV8iEHq<3lD-pbc.O~GM6jU;?t+K/Cҩpl{JvPG.6oj9+ƎޡoԗyI&׵`hA8&6o{_MZrp;{z#\GEap Vz"P>$ pyp mvk#ðN<\?wW0oB"1NMR?XT=tӨdԤXF:q$lA^uK2Aq8tSN,%-њy%W[uphMDOծM-8ƫGOzFS\w?+(_~~ssrǶpd4~5ДAL: ]N_Vao?ۜі-JBƘ5indJ52,"DJ)AVbu,A`c>ڮm" T,'UW}_e,KH%`_)m7[!b'}K;;pY٩`;.dI`_Hu7_t!x]w5ŶVwyJ~\.'I?T")Q):cn& cL8AY8ó0QpX ՜4~h[6BrMt W+]!vX*l|;]vH)wa8F#a<3ECDYЍbֳo8;ph^yB"q|]g^Y(=ݢ)`.c+2&zolasϿܽIl_\v+q4{Ȓ|ʹWQi=z\򋩈P`63#YRu_̉*j &\7 IĮ3O}zOL%3WIYaUK>p7wۗW@ZS^SxȊe9UU*jZ8#9Y ,/f&7xR?#l )v*qJg@AA` +yҩL}ֶa:7O c7]B4|'ڍOnYSP1)c%i=W H-}i.BNRbjJ-jME}$Hk'O}IU)"J)h:0u3):lAk,pE>3n<㙵VY=x3KC )C@,7C,rdhehi(F{Æ {*Aj"DeAVdryT ̷Wom "YnN~}osdpDxW&CBe_37Myl@@wD{U VGb0Cbh+1b g3 s.E!t=/ 0]W=Dsǁߝ:*w̼6i3EDo_/@,0A;^B_ph!Y24e@,@&7-硵o|7G?1dA8c/?c pIJέ‹.Nh!\(kDqvRs@.2 X@etT Ո1aE6ƒc΢ZA0kQ YPΪؐz-m42o̦?w7^ׯ/~NY^&-[fgW@^;~K{_om;}OI'ic|OSCd["j#)ͷ"Ϳʮ{i~, :E椩Ɵɦ_vzTgyO~;cZ?F ֶ ÀZ r 2 h JBb$YY$5 F3Ѐw50n e&*8$ζV?m6Sc>b+L~]l T,$ 8Jªr  ,B1zLɢB$tkWpdiPwFcLR}j6K/}[ z#Bf> ,1" -k[ѶX-r&r+mc+paW5.oSu+Q bhkK4sƒD)+2x r-tnks'$DJzd+ M4[ c CDC ȴ0, g ]nQ<}Gmت5m%w%g ?̭@A^ym۩qg0$"q6oO|s|.1;\׭jigkXBE, >\ iUX2!}5 |XtfSsk ~:묋/#Zx$-pΰ ;Us_PX2<0̟?| ]\rhGz_t3Xf;Rg4 V{{.mq,_'_|O~O~SZmXNN+=yAC9'oo׭[wEmڴ)IBPjB!&hι:cǑr&Y(\׍N0==};.Y[dZR(o~#|:b\oO BH$$#xp^IFh*peqX$6t'ǡpLL0!Ә!mR&8$ȽY(D$<7P$Y``,"#P `22-lZ1 ?_~H)e#bǏCo YRǧK>na||"b:h3xXDBK`mȝ٤Md25eם1ʬ+filH8iXZ~lP`l$rE'IRʪJuW)>i3H,$SHV0;ҵ-5$3Ő TY3- R¦GAoL )\9mjD XX^_#s?yȗn BNmW{[2hih&P8M${R)C&8:u2]wmsHBl޼cW|K.y;yWLtZBCs)} /q{f1k};`_Hu͔e@`c@ "N 1zNsdnL[g1w cw{>" "k J)Kl_="q^xq< pÆ |;x`u]o~ߍ(?ۈIds7n|C~Jo~Yg>g˖-B 4hdA:a¦R{&$qd)Q2}8csE~_|~;c!y^E,3V{r*yܩuv\yMAۚmt @Z5 QGm8+l˘8Y?f/}3sRfxAR++lȟ'N]ǯ0E6`|Kqz Yyy/z:}_qvɲ"0I+i Q! +J47z~@5Y@K$a:Fu~. tMب&L nfh@Hlbc`!78t41nHr*fyFN)2QƤ E=& IDATئvj֊ngW?O{;vH`OG筇Q"6ۗ;9E&w5QSA'i  'ޞu-4/_V]SƓ>vs[i6/0J&Za"*k+҂#b "c-1Eh13 E@ae0"*%c;FM$ 阉) òaU,TGv?[iݢKy/s #T)B#A ֏1 |+Z H@Ψ ""cƘ4K|z[vR m[,]r+dQ Æ(rXp,D_YT^7`[h{:f(s}$cD^NZk)D (!Z[kuFOAPV?яs9^xo~󛷿4Mِ-$B^g_2jƿ} _Ɛ9q_r%}kxVs^,E c9I[n'MqywmQvxڄIks#$!p+a21 la; at6QDYuhĤ4$- o*@Y`DD44NsM)ÕfwXt ;$ 1Z@@ɨH e=p~v$'nVz׾^VƽqԦSXKM̖tce )C%=L#%&hGQx뎲 #$hԧ. ./j#{n1q_ȼpGϢ0oN;me,1ꫮ!xz1̹[C~pae+hգ;vxb2hX,֪u$ ՚ Z;B?j_D;֯__*Z,YX yio}?M}3vS>~DŽZ 8ǣ>zllB l!pD n5s0TL%rjN<} /K?O}7\c\Vf!Yd@g_pĬ/] ѨNnלw٪pӶ&nx07ߴbDጉDQ*_U;cM~(6M'ճ;RN)Գtt[N_-2 AiZIv?`wZQ Z#{9հ p+REjrDhZރw+r_f$ђ)9=ZͱBMY 9iu8r\X"c  2!37CZ{3ݩ%uKH  L0Cl8?$|<Ll1N!3Z$Cǎ1pl @IHSUu՝ΰSުn﫯{g{^ AƬ+!Q:-"WE~Dgֆ%јԎd,ó jwΉ)(a蘫 OIO=?jcg[|:~f˫mR6K%ҍBT`\WLNvfON@c*7@(S%ZցB֣|ݴzi+Z<i4ʇղ]ZZʫ2TNHdQݑ\֧\ixVo/)c zqHdq40qF>cu3gYVUU ݻQD$DfA,C.66߲zQWqK /~_*Uw^ZiL b8 *P +@M Y*C!eL+KU^>)ѣVn"q,yEdVTͿjs3v I ] ŠAE1ƢP GJă*p14 HY0NIC+YlABG6MK6cL1x[\"F Tpg1PJӔ,DWZ׿~8#A ֕ɶN:=^Ⱦ4V|;_W|ӟnZPk P;;}s?s?oxl#g@A;[:KOBRTKˆnS`*zrgあ58/л#X:ѺyqY8ODW(AٖU$" )󪪐ŖՑ#G^Wp*/uS~vP '{73̴3%YCsY>vU$l 6K}o[g-BPOt{N?bI}<(XH`*]Y_'"" 5u:)q`5iˎ[NYf)gRnЙδk6o1# "č c/XtyfKvla96uksj5{fA|=m ;b *9WZV0/( @ B/%~U[ɳnM^v_VTUjsJ7M/zы^򗷻$&vN/.x&T&~!Rs 86uZPR ((Q8pi6}5!h]VLyS_e? P?fǮ^w]W_}1f~k"A@_lD&IˁQ ;Il1f!fUtrSh_ywTj&SFn4qUTkL% 'm>6qW m`:qg9!DM#*W-{ *#C(W15AQYfrc, ^"Z%@(I̭)&B4/s(fF(|*nWK} w[n0:~ňNX&Qx`$ϨPc(Fǿ""/4nF.8VNy}cнr_0?D;"U|/'K)į|=NQР!c<7éȞ)3030 yO6>Y|O/'9+c8bGg EP""`` m2Ā\LqjTqlcG%=nU_Hdth e{K2nv,K5D,"](-~Ӕk4yl3*mҸ˭OA#Nmx(\ ?_fU\<8>}xmOv'L:P)Q3!pbX kW_}PUw~w_iD*micL^w뭷:ty{ _]2,Zpym$˲}uWk^󚗾}so~_Wog?:CV! Gm^woǵM7ݤ5Y뭵v!LZ$–Q HQzӧO/--+_믿k9tx4-?OK_|31pi. yک cLjj91 < (Y/Ne>9Kn;` mVW$f+.H$\jǥN/u7p.[5s.gDLI>r*lq| kqv{4@h!ZeY*Isىѹ8"$0Ʀ쯀=pSqP]Xʠ(BIqe v#%i'vMW܎Bqc]#KaU*6qezPSЗiulqQy=}<ԝoNLvJ.f^ ";)wy;y~Z"nx˲<("޳RokD{7KQO}s_8y|Sw~}{3~ZkTUU;q$y9kHwDžVaeYy%`08M^뮻1yֶr??DF{oi֏яx 9acP g vwYVĖ+Vط88Z;w|u[ljc]=WY)PavE] HbtN∂Bd-Q(Ph TADGք53!]Nu+?i?],Eyo_K`}hp$dڳz㦈$,A@q}c'N\>Eb5|XGIsBVRd6(AAtt 褪QGz"[vjUQHqQʭ:H-8'^kd r>彏GVZNg=aY'ʁlK [| ֝0 Wa IU>O1dՈ8 mؔR=eyW؏T~W/2IT>q*Y-Q7?KN"jnIǮcx 1cxN,swJ Y`p_ݑΟo8d~cZ<%ʹf؜Mu=nd3\}\̨x־6eYgY}Z;1?/JDlZVo}ƣM檲JQ3P)t/曻ݮe/{Yz< nᆗ}cZqQJ]'JG>h4| _6V?w2K⬯KJjs2SιZPh]v:km w,$-IQQv+ڟ*QZ$iJ.qnbrSv?\WۊK\VȎVDN={?wuW/]~å\{+_|_ȸ݉a,լ # o2zJ4"~yә]w#"B n;!$[*Ӿc-c;MpP{ۛ#!bTtgGW{/AwӔ@O?3ꍏnR{^=}{ŧPMYֵ%H+mA#dR*p{F$1,'Nhz5eQρS Q8ϪL4~`d428w1ݏMj<>Skķ{N=㷿 IDATe˃LܗV5T/צ@JXCt8.~\Bm3RsQxH\Nk^uh|tat@k]9qcco}twy6?¼*mn,}c]w]mb1yS^y ‹__o!֚YEU `yyF$uv]E]VͽחHk];(Uxbqcj v˺S=wy $ZŒ-{cAŚݰae%U;q#4>8Cx@_?'2(;Uz/x?_='FQk_] -;wbD<,GQF)G=:IZhU#T F8N$:wR˘ɜPF GH H(+Yc|Sw7~O뛟݈˟)Trp1ޡ^ ;b(?uO Tx8 x/:jLr. il"*)9ΗOXی=euJG]ze \[BJ/ _Y8I+9a13V<=g]iSa!A "ԂHiJ\TXBE:{Olβ-L8ql.fK}B dQ0_yaG"K[Uq^˥ ܓ2{A 1Faj,ݑJ V^5 qՒc \[z=[˭ĉzKv%-3ss❇>r*OaX0rC{Zt =TDH>_<,gψphC-|h֧|a])b@_3x9=҇2_ZC"~;S6ʲ̲l'7.n9 Z88q+"9˲:R*˲p8\ZZ%ꖐ!JEι7-x;Lq<(MhesN)T6MS\$XDjkUURVpMqDQ4{3yvwꇝCSU,]1鳿О:ѷ>oxϛ~tgWvntnuk<ښ,Fq.QaSWW.>&W_x Oѽe,+_ݿX|>-p][[ҶһJ|TUsvdq hD"b~ٯ͇77eX`n'aBB\.]ԭrX\y+O];5_50mBMq<8P-//Oγ {·Cl m3q}\؅ͨjGZ7ɱ0ÙԴŀsy`0f Ϲmxq!"FmBu:jZ/c<+tUDD<]c ;埦iUU \ݮv]Kp+J- # 4RN PJM,[y]i2.#"F2uC DV}NVxmRFiBu9 U5a]C¦;E' U7?#O 9Bȕ̚z=˃^ĸ^/_OW]VQg1u٫qZ廏vQaG|lv eP)UOWk}k}%J)uDz8wAҸ9&"=""AB)$wĤF/)apہ@&GqG(evm]mc =wDH\FcclZݳۻ?'ZlpAfէAD9 MX%E!H? eC]b* LgbnpFH!3 KaӶ!S5XʼnJk*ύYP%T2s 925KPZ!91؜uwuX|[N>/8DŽv|[HDxcAr}io BZC Q)ʲV;-`D<Ӷft(F,(~APk,٥\Fyt!,6)p" ~x;Q1k+zzqG|>YV#BS "  XH@ Q} Rl]E쬝 f?su[afՇWT?Z7~:~s8q\׭Ym/numZ(,[r Iڜ@QB0-Q﹠ɹ^X>qaAzhCZ썋fio^,.QffOv&`QӲ(тZ/H943hL[1Y,La l/P|.fH pWӵ$ۙ[fYݳ)XX׷vfy{ ̽P93=+ֶ1vDX DծIkkNDk];f ཯FiVUUgj\WLc2 4) e ز"f[ kZiwrݲ7q\BZ kPRl!DJHdž$@9CT5HIlݨ|߿|?|햆+$U'cS]Yɡi8[uZ䏾3'!q9Fx3z̟1 P5;LNwToeu@q2E3>l "q:m6na ۤc$U q#͙[1)j&vYͮK*s|P[HnJ+d"qcMHm?d́t1k$BQ7ea%cSJ DJ/Z$툮fj 6H9λaap $07@:KpsL>X4'Txʹo3|Tkkp>FE 1.$v"0|1/~Mn(kn:L; ne_q q&NUO?+?O|+lrx;! d97+߹w:cw.~W^ѻkL{ˑm>vl\[~*J,.{Ύ)~zJCؙAL ܆6Y.D2#vy3xaEPK8H N,Ð҈Fٶ)byӏc-Og-w#lY{09Ј[Y*!4F->Yδd/H믏]D$~n)'m;+gm$J\FqAudq9lz?~ۊ޿}/zz gr )QfҸذ-oK ak3ě럿2}_TYU<߲ ?G{7fk$ 7cケQ"'ǽi^Eٳ_$g<E!oQJіHDUgCd]m"Sv8kJxAQ$C_Z'6Qrs6`ڲ3\\R_!QÖ'g[% Ӕ{sZ}c\yi9 VH 8ϕc[ǒrO=닛_ݮr^-o G(jj*ŰlaehtGzı{t0O!&UER"y6dW@[Y $$'MvJ8Xl J˂jQ ) # *@C~kZ lyW$܉VyEQ{ D(1*#) $JKH=!A tI3=I:jD5dt5zf&BXe@i8 `]-X+MɎ7N!iyh!dby>2y./ΐ!PRMK<(B̤Sa32Tad1CpX+Ahag7EV@@P "b"R}=&:[J8("hhm"to[M_6pI̩%94R+ZP!MƔ#,`ۃKĊRc) A"%($ȍ{wً,B8d'۟Q߅S>(lY Z$gY߱}\Xx3#h~=ﵼu:=Xc}.j_ONh5? 8`;lY8bc-تtZQ'I*ϲA[SSksũ}D˘`OHji2 R)@M--e|lz6F'Z u@H ǭQA-*Xo_їUw6RLNV[U9I~I|'l.F}螵-K~S}&g N l2`$&eVКiv}`d@ҌD8JDP! _@x"4{nTR>/o )˓s|TyǔUR"l@X'WN(@0۶IQ|c@pZEppnLCXdp "\l\@̳V-D]nf}mHgD 4jFq֘}p|}{gLݳV~'14.Y}|MF*ֹڴsq.)Oh8&Z,k1cq%*ʡJ ":EYKDE4,1K)Gz#uj(6$\8adt GN ]b[eáWf]]KstߤiMM缘=0ًHei%8:A|n>+i'ۉ8=icE>BFAaIS?e# ,[5: uMj(SNkŐ퇽H8g@2^V.ϙiAFjLmEm$i>1Ft 8Dh5ye+PB@(SqX@i8l9D( "anN:2"q{EQȈ \ވFZIB~Vgb)^<M7O j;~xZkk68iae9JƝv~h2gJܚ~jmt[l({uK :F܅Ѕ)aW7]"n柙ӅXͲVeISvizN7 xfAZΔizvGyuMkdrTJzkqr?,Д$Ԡn]$I׊hTsŠD T:E0zK?2Bha ēFR̟v`4Ӑ0N_ܧIVW eq7<,r1FHasSޖe9HS)RXZ+[EԽf'jO 詥% 'ţo<>N[A;ڿFRoN1w*JaNV`$͎ ɰq`ruq˜47ܤ/m!*5cCg$aB& eУ(O'os~1TC˳ @Do-긅=V~+>s9i_J\<(paӁCGF}k,>jSjH ڵ sRw#Z RB$݉͐\86 ENV϶M,:6&_d3W(FqЀiZ'p#90T2u`1 lJ[%%j8CI9f񮓄7i[p2.Q|Wvy`$6Ɍ2gge+!/gY-fDkqRTR P30B{ &k5N:\\s}̀IWAwJMe*ql<--k"NB&jm$K y}|/?v+e}z5kMFIܛ"1Qc=`pzć1#2L ͖w?a{j=PX)~^vL< m\D@őfjGO|k\lPF⡦x=Fׇ㖴ߙdz#ݷ6sL>k0x1{q㚘~k#5ǒ9 hF +a CKi)P8l3V iFOgOѸz'ߚ}n݇8ћ0`:MpJ2CyØI3!Sߓ=>~+Ny&}o_?sn ȠP ĄJpOȃ#(1I9FD@ QpX{2+s9_`8]XVn7TJ ӧ!3l{gY muT*csȃLL"R&/:>3)bO&:Fc^wCr~K }AnpJmD why۶ݶ-Va۶2X<oL9Tm$i֙#Ulm!3?uk,Ӑ*mӰhⱻS::𬜖W2`խ<.&DNx^~ Q[?[9΃-Ggzx,Ҷv;F݋GyS=PZeKcˌwǽۊMy3 qL_$aQ,i) b3Kπ v)Lx3P>PcNC\96NJ .C4=zn'`r׉u<&k f$]sj-IZR܎OC=YοZt?;͛8D&5 )KJ{'sPnຯL$#[殷 {ݖealުM2RwE ,k*7x;8utgM[J t܀/nskx#|Gl:;Z\ #W#,3=$ `jj0={Tl8uiחOzY_<TI#G0ґScc徽\24i<9Z uۗk)%l.e$+p,hj{G  3(DAj53{nf(bֲY)߶[EQչOm7p?_OW9Wר?a<!E^[fjx 95 ‘͚gNX}[tzJ̟16W^'zH, r(s|3>X;-ĉl Wa{yH\NK/< Im3T=NvƇi*>w[AgZ &9[x92pX.lEHPr?t;ɐKwYtww1+fxyУtܣa641&]` [.2c@R$vi id <֡q>| 7-%a77+yV9L4'\dx#zo=&ف6a eV^/\"ƚ8IiYu]̬T k5齨6C}dm <[L3L5}.GCP32ݽ:(EDjÍa"-^UQtjtHvG ;閑\ uwaQ'fQ= EKz7C;e~-e1!k>AȤ\*i,Vf_0"Jo 4]绉*^(Z}]^OL1$m]W ?RI#@ȼ[/wI+W7[vJ)}h|ScfTG=8FRok\2\(",K5|_rN?}9^_iNY-"f 8On98u`NX6}*;0 U eA6wZg!*ڌGz-k5v=IHmzQ+6Df/9`$s^]jd=Y^8"teD_B7KnVuT560Hjv(@~m;hOn$bUZ]v y&4~<3p 34ʿ׷n4!t8 BO$E%RY%% "$dN&fRQXܥrn%xb΁MtJX8|gjCzh~ʯ[ߢ<[Ǐ2/D{akS 0'Oy>dgmۜ1ASӐD϶̓)2Nԋ,O-b?{Nn0\u-겖}RcmwQ;ѯx#G|ߒQ-\mqD7lcCi9'qĬZ ̌%yQXMZ˛7M۲,*O/Z^?@\Y-.5?>QD,RM̢یuhtSJ뺦e JlKC(}]Ad[z pQyr" oZf~8 Nr8K^NHkffS9)IOU4CC-ܣ "_p):q.Mcjae|>QAjUɉ+]%}BҽjV]0V5MtNr`: =R',7 |:'1N VK4F{w7)6G o^z9ݙ̊[ΛU#^`'4Sbvg1f@$=^L<@Z^\' 3JN \_s&MNKBQ9Y-*"v{/|00Ȕ'?B1S s8Hdzcŀ|8ry? w.ȷ0 }'.8G;N)V|b 2Grh r IalEĽ`D3PnⲮE]=1۝$4Y i;mq[X*90Z;-+db@+<m}܈d-[yOwƫG9tH@gVHXR[/&WToryUYy\*s|}l|vS!i>n6 }2 < nHNs^됳|Sʺ$@ }r~b\#W?y^g!*-=vlfIT襚J^.sWa&?~Y>y20we9r OT՜U5Gh)=PJL;/_R+Zn 1>[ Јp8$Ж5NYw9Zx^kjݶr˽ؚV릔j[J; Jc?tlJO09_4lʱE|3z (pRD\`4_bf @qUUJr͋ժJSZU7݀{lFd)o3K4s`a.LY$msh,jc Ϧ@nT(jXVQP>_Z6+JR)^_^^ 1*Gw£҃0H)RevU_7@?*@wR]Rִ %Znc0[]KfX]LTj|\juc]6JKJN\3|Nt@B3\u#&]sZn.>PwW"Rc >ҚJSu-9nIXNd""6^TWy`85:=MNhdMA‰)mR4̪vJ}U__&XJխulKߗԔdw]~QmX^^Kk2_O$uDz}{ymUTGaٶv9_uxES)\ͥw*ٝfrnsIX>u-*3qb2Djd ~:eF՟qOT2lRMy( h~E-A51|5B&&U]ׯa&RTe]s55rY%`}]Z䚖j.t(TD,.b-ABCKml{*=㏈ZS?u}AG:*\\w z5v&tꮠY .pm$#ѳI-9WDPJ)7V6[dѬ법]CN&*IN<$,-l^zH`Fiq1 fEoj ",)~mbn4<=n==;0'rpLt͌ g=3X}& 0e|P~2' !gMiLy="*"6'G%[)ġG=w^]d8Eڙ%ѺPUA j7-iK= ?{ɐ7)LJ1{HΌgܹO|CvN80AHy%"Ivn^Tt\UDrf%\6̕d9'mu"xV4D/dnbif7r͠׺U*EƐ+`LJD,RmI/$ N:!qN{܇;ݧ,f[ <ólExIn0R*u) >E$*/ȇ4~Yi_a1nQW{@YG7lO>ql2EG9bbe).s)e]%iE.WQrX򗗗u]U(ŹR\.\ʔru]WBJ.oe]W)L8eY|YMG4^-ذysjacgaY}~or4Q fylpw.O"ɩ:DLMGֺ)LUkpy [sޮ%$”Bw2u7QtGZ+ # -dkDrٖM!fZ0p #R SJ)[ %t6HvR}\z'6ԔR5ArPU-LIc:unؐEi뺮ZEUZ=  @!roH!QnFV'o(0)|&1 =1dOm CpT7 IB @b 8r,Yk3jj%bj۶N@5;d췆@wp[<#* GQmLR)0kk)pULbɺ,)DwkfqQ*I'ERuVE02@1OgI?3~-k>3xqhj0>>̃rGJNʎTӓ}7f+}'ug׉bD&;qq4qwJ}ǯ3M4ḜiמۈvN5wvu=ٙhx;zLLڟ=ybQfNn4GTc`)./EZ7#> p "22lxNb )l#Śf{ ,Yv<8x00=@G{b)*mfk7˲7gsLazn0ypr^,RX6YɗvΨ MaYZJ&H%x?mum_KtZ:w717 \1C[nUunyk:W q{tpX0RL{s/<.m*Jmo^9]U3wsWϾɃ@Dz 5\Aݙs&?6p֤),~h6@SU~s~1{qs~gCBxc/WzpPTs-CKLq9ijQ <('MIVeYm[\aM)rۤmY 칥oEīCZeyRv$ad m->#vf}@2_Qi"Rr$SZ5tlQdlqgس >TT#=2{7y4ҢZ=r IJ"d'Ǭ^vH =#A zNJ\ g{Џy8EcqA϶mw统1q^2Kj\ Rn9Uu8m$eD3Lf;iEgJ5|ڙd$̚TedHPZb(j9kJI$i)T1b3Vg3 ~Ɖ >xXY_ihaCHONSU_Ve(u0+?{ש_|ɦx~Ɗ'q<OX` w^;AX>8<OY1r£I34g$, ;-$ѯq(4D_$<,ۣ|0W $a;xv? ąyTE Q͊ëW:ZݬsN5>yilP"pQ|@&Rq:- z^^)o5?slgyЧ^.d|B_4ydƨvl*VR7c3O?ȑ:߸_#?;ȖO5^s@ ;c|[DgNYju`A̚}%q̶N/==:~5P4~0l۔‰:w"C[piQvTDǭ|5ϔ#QZ>J(fwsћkS"HڊU7\g!hN^oatu|:;fi66AWo'r=K:=yȳ>vsTpp[Zf GqϚ"Z:÷: ]>?4lR/ PIENDB`onedrive-2.5.10/docs/images/files_shared_with_me_folder.png000066400000000000000000005571611513710110600240260ustar00rootroot00000000000000PNG  IHDRu;&Q>sRGBgAMA a pHYsodIDATx^ֆYC.օBݽnJݽHŊ.,?ϙ|5VXhL|2sL:uv"n[=rǥ}+:T%JS88 qaG8U9d#S8:cS<{a㊺pY'Kf)j:r3O̜#ӡH^҈WBFN!3"Ȫۨ[uS>M!IFƒY.gow=8/// gd(JŕD"2EޕDbKƾWJ~8J!$sk%$ۥ1J>&Y<*G<(;!iӮ}8HK]uNSd;~[ M UQL~ַqy⨓L7*y{gFBחoyf}[C?Fn32]}du}9n/n HݯYwQI㉏: kHOx(FF*#tT:#b%[Ypa3aSѲ"SLVlBS&O&AѠ ?̌LnՊT}([1^│4"Gq+ q2ʐ&rvGr}rFm"Rw߫ץZF<~$KIJ]ϕ7JC!))y79hRB0OFPFyWWYK+疑y_Fh IP!K'u f/' XYnr4ѩR8RK]L8J u@'u1bVdu#kpʾդΈ֐Tԁ+m+Rg"qsvGŹFI2ݑ$XG莹O[2@iȨ~]ԋ*׿UJ$N^&u ~AMvz:ꂾȪ _MRHJʍ18ID+,1"/uQä.K v%C' M (s"($wY+|BW>RsKb'Y5j%u FJE lkץJꊸBRJ=^hsV<>A{Cy (q: e߃-ŠgIQ^})g5#pJЭ"u EieHݣ.DžsdN{U5 Q. K8K9FD`(ɝr׆xXfU B'eEy[3xqTK"n¤n(msRWzEVtPD؊D9+l.ROK2K3wj沎/wJa=ꞿ*rLgֵ\ :՚@$1VRP6N@}3w3 . <.kb$.b:1Ơ( i@D*#iEbr?ݖ lk3[D*J\x%uxL TYn#N* %kH]ʼn]22w;\('HYU N9BU⚿-dH&L[䙦c]r_;:͜K=,7HI}]o;=oTnew?foR'ʉ//J+O\}*7!9m(N ڇ\Kws}]ϗ,k2VU.`A uU=y%'x%- ܶ)'Q5;+GiĮ6#gJ2s{1%uAЁbQ1VQ#iE%{b#e a*%v!$bWd쑂 _q($txBqKȩVϙ:2w }ȭRב#n Z]Fi $u3x~^CNK)7V ~h3=8b2̜|ߡҤ:'Ii =+Vԭԝ]xtdaU\ h%99SOL eE%u>#NF uUkKqRD|\I ?V>*  4إQۉG̔UUؕDH~֠4pdx LH"nEw*Dm'u m-Ҥ.ؕ-'uYA*WJKJawJwI#ҸMRpc`bVDwyowKY!,tz|)}#p+As ·냕qώ;nw{L vV$I@(2ZT.v5TIHT=+_1SrVRդ嗶WAQR2Ɖ]5jj+g/m-:KԞ;H]Jܯ2w~;ɞ9Gz7۵LOv6^:wòE~ ( 7H 磼aJKE138!v|ϲ&wxZH$JR硁#́C;MN;vjbWmN]ݏ}廨[V^ґ&c9#w_2p[s; bDsX pd vB-8*c CC#>@nqw> ,^IHʳ"(V @]:AbuEP$x܄P?Z U nvf_Vxեc nX~Kr/T+tA).Yg8mgOS쬨_]$;koiAcPد6eo7+@WDuYnҐt~BB {;oq7urX TæGW},7 !v+s/ ؕSuB%({K!kw_1dVU98?<(K#{!CqduA)웻I~ݒumzߙi JH(L$m-AàtNǬb+.}`np!F_ePbيeeb!oG.}kj3%!#ۑ7_jHwrej]]u)H'c~xw.>nʻ~v}RonGBR0ӜzJsEo"~B[d ADIaKWTbnIյ׏_tIb-Fv]o G2#Z:'I=8f\l#>vnᷞ7pFsSbwk{ZyQ/!vyt9f l8R*|PZ]&[~!`K!%A8>yՁ#ʀ rᨢХ0<+r]^+O Yp+W[ҕ:qfIf}7W i;9YEM6Rإ &2a7 vsǮݐrL7EЊ`e;9b!{wq#v^!9]/9 uѹ;v9MPw#ؓs'!uoߵHS+"Kܳʁ//,[ʍqW爱ovjx{d'9 :A?ˌ'J?R.H_Gw>#zI]/̝ΊHPH&lAl&CIL w<ݞ3IS@q% Iq􀀊ۍ|18hJi($';e9q8&^q0IL"\ǵսvn+ 7h&K+q!+CR2"zJn+wGD6gDMőv|MD:&+gweGpI 6Cwwd߶)e-)LY n{eT[#5Hr7k߭#ilwsשeu/vkw-Kd㥛*0YR͒ori%5u̺9ho뱼0Pydf@%P6Wu–l-ޖhpe5AlySiK<<+xzYR꣬奕Y6m9&G&RH( rq$.G|&9"9^yQldeEJݿzq{RA,t^^Att##42)@g?( ?lVΡnb}Ts"ȨWRKKT?29w:jpT1&GVY:U+̺CvcKN'tM뜝Oz,w=E\0q[+yebS5!Va%!HQI".)-Rp=B)$dPW*+IiVʦf*Q$$~jIBR>┆?-~IqIw>̽(CQ}0̺+m,=F@XF.>!I<\i@,Tbn4/gX$LX[dk=;M;&9LI0;#u H]5hi_ץEH]EVL4o;n  $'{'$??_dÆ n:Yv{mZfׯ_/zqF5q3? }{NX(ة?+g<|U cl2u xܣvwtsm()N@='{~*~Vt~]@@@@m}\37_ՠo$OK'nu(_(|6Q. kHJs[/sczyX{][tK.qZ==؊%g.ӁR5v|"A5}9'G'nɈzg#r>9%s99|d|yKے~`V ֐p @1ieaZr"iU'7!T~VW@?ŦMdŊ$i3 (_@ [ go爉OU!=7F=)N@@@s0gfViWQ2MCJFyʇ)v޶墜K);_/{8>td68Yr|A)󮍝19r!)iyhGAv]2[M겳,Βȝezz۸90|X%l<ߝFG9q͛ :Aȗ@hh!^ꀯiz ʂpāӫ(,]wJB S_ `[@(#$c/K++ =) }(PQV߷fmeV~S娛>y*ʷB{h uINXC*$#Ǒ;G첳ɜR:g娑UKW6<$5Vs[< qn5Q~&[~]٤ ;v+{u7K򳼭~37Lp720Bi;&|Jmu:+n]g3ĬG[ mm' 6,l^bnf/ IiViy_w2-tU>~nnطA[1|F}j26rԩ{Fɮ{\>Y #sS2wJ}|}vG.OTEE֮n,Z*g`˯h  CLqR>@òFgU],V>HU7 ̎ue(/&QA[Ť.y6<3j'|*8ұ͖&g~GŜ@x8qk܆}3D3慄 +-W&GyWqM1qθRV˓lۙy[cG~~.Ewے'Yu٫NRg~Mnf>0Q-AYx8Νb i V,{vH{ұcjGn]gҪU Mڴi-|V:uTh׮#F ՛n|~:V۷֭[J>.ڶZvѡ7*(t;(І[Rj'h<3<ƏLhWbjر_KK wn-l\;i߾eEćGYcniK>g5ok@:7k|@2ްvX^dHֱR:|BN]bWHtK1wj9"]g8g$9V:;$3+kWGv5re.{pI~5  e>uTS.{ci{Vw QF=o|mW'+77"e˖[u큩NP?K.ѣep~xE5\ӈ3f,\0V%)͊ Mw^=\Nʖ-fS;vL4!8/t2{xvi\'f*C{QCjs0GQ5J c\iH'+^gF(/ies)+s`N܌c^ Y :]:wbt fߎ<9;>c;NLh)&߱D2gn]>2h%F`x< )ShY`…YyƂVIKLЪԍ5VZ=܏@:޽i?Tӫ(LjJRPtIuP~=͟?7ݖiӦ6?)m4=~7\|YwXh{a M`nIż~ ^zɒ%K3fLS%dΜY7c%\(_(|6r`~^%jc&|'U"urP#vu';u۹d;iE]vˁ9s{\ {^H e:uv-v𠔌 zamx,宏XڵϕݏwZYnbڕaMP v f:٘X~qPMFeOL$D X 6GeͤѪnlar͒-/+gq(ũ, Zρ:)oSwpi! 8;os,|ǎpgm;R:x zn*_vYab(-/;kИ:?rh=BRgnYYaΚ5C;p:s#<>H]@@@@QX'% )6 ]@#rŝqj9607Gm\Q_ZU;Bc^a9.rˬHX2v:G2YW;v9w2rm;RB Ӈ&3kֹ XBz"ݰFnX& k8b4ʓVԷ4fɎ:5Dk $/#u6KU-ȫ6:*"%17`vz+ 67se8/>^iH sc%3@SS1w>+uxʅwv9߅kmԱN^9[&֬=tk;7lx.HGVn(sJYyPmΒ/zLON[] 9 U͜9]5s~tq}u;2uei u (}>)+)[0_.^Dw^ G kW+[Z>l,HA喎Ar uzʥe~^Dv`ۑܼ:Yg%8d&KJnS>~3Ӿ3ӥi|IE~2uJYYVY^Z<}D |ȕ& IuedyfR8me߾n[oYgGBR]R B7=8W n3gϒAC˓O?%W^}}9r0a5_qqԟrMx+ZUYl,HCԹ]yq٤2 sP9Ra Y6F5v3go3ID'-l7/_!}Fϑṷ]Q6Um*F޺!u|րo$`f)=g,Z2_M9KN"yL3w~:\ItT(0&c6+>I+^zQ#]jb##/_> (3e˖9 .Y&Z?BBǽFPY<׏Y.pY3d2x4yu933ΔNo,'vMLEF%SgM)ĉeI L,3MwaI)g#'7>[N=kG$-[]Z S'h'R&QFu7&_dƬ?q41Ņ)&Y3j3ah\SLs'cK$+TW)~܏qLs>I~]'LRrUªWɊ+*/\. `GGӏ1nWfΝ#:vϿ@Nktin^pcΕ%9_:t䏱qqSi ʖ0sv77YXv47_ȹ͛/g1/VwȋLg1gbE%fL6kWRZ\ĞT* Gh!Q()nnL[#u9w~|<#t9)3JDJCpEljۣ"BR+Ek.w:2n #Fjʔ)Z6ݴe1]3fNq#XKʝ'o.ט6c0ٳ .vڻDãtMN/`"x<%ӦN6%`&d&q!D:Ik'LH L@y5ucǎ>L/nH{%W\H#rWi6rbaܨ1F,7aH3o¸Jƌ+\tg_Fn9,GN?M~t=\i){ }rk^zOs:?~Oqqu.%k'39HnVWQFs9=2T^- e:tIIƍ'. `GI$Mq%aQJy<ȏdѲhJo~/'H. ӯՌ)7?)CeG^,'J߹PN:tV,ȆΐN9ͥ+yiΉR(|mjRG,n܌R()NEQ.E4.׎qp#vNS~UaȐAc#|'| o/yÑ7O^/:pmԸI 0L[5T̛-$oS!zL8Mʣ zY(CEIoN}=ygՄ&???_5JIq|OeH?KԭXJz_44ފ¼t|R -g:90Z-W^ҨEET+hb7Y*_~xirίWZW3̙͙r6x}λFM˄IuݠxN7jiJԟ6ܧpvgΘڽB ?:K҄X4#w>_~9Y򄉣O8E^xePW_M;BƛXAO'Sqm}qZ2*irǤ l|֙J.!u'rЕ37Rg4TRǼ3rgT>V5cʫe+G֮j TNX/ T1bHu+=R1[ߤ8z<0y7>)O~6BYQ䦧HqR&:J6/k0e:kfk;Do'9Bw):!EMh"א k?$(?3yi|ӈXTQ; h,Y&gpq )fQ'hJXx|]ֈ;w)O~4gZɗcN8A;_2ej4gI'nVM:A s3 sy\x%Ҳ׺4SnQsj q#ϼ|gG~ȅ^x8GZ? /=1=Y%uhƎe3)wu3Z%<Я~[}[gѣ\.?s.P. z,>L?eW]Z:HUsϖn^+YsֲM[9Yeo_ry=oaѣZ,ES3إKHKȻ_}4Xwr%E]aA:(Z8%p4gq>i#ch{(#LCz$ExAA /o7U: Q{XsIW_jGXǷ .Fl,-.tN>UWuwgD1GN<$}xo@ZfYzkֹxؼE$oSlӹ%erSwɧea+ZΪ'u0V%3g:yW-)NEQ.:fnz7Y_BR+}G.{"|}0]R_gy c~+=JxhVa5^` 4RG7D67{CotL~q)}̜;O'h $+JX 4b,dY ?8>ȧ2IihP_~<D70n3B!tMY${_ rƙiǷyH)B5='>mu<%Kn6}Ve,Ō:Ymԡ>rjdk6;GF6?oG.Q}:#@cteW]-_|Q-[.|BӴ)w)/ڇUqoO#$"eƏr4Elґ3gW޵Q^^L"}\:\ϓOhGLGG.r%};vph-#$qبѾRt_~w=CJ!oԩihk@\ VO?>8̨Ln8=óiYFvzM;~߼eb&JˑH]@@*<Ἴc ŋ8R7YfϚI2cw7ԱMK$-^4uq .t7xB|+oc~bB>{LAH@[ܮmՑI3XTդnr7g%uƍ=Iq* u+3F[Flpޅԭ /[(4D}a視"9RwӃ͌*ϑ:4uiRIyDn٭0;w㭷ĩӑXܒC*J~A%A>!u쩣 ߿< DS Ο5M@PX;[gg4VmɧEkYGGBQ2L;W3Ur-YVocI:⢚?r)'˹知]BSy1?p; /˴Yu`@K#trYH.drIh9{#uo<tb%dNۗ^&XRqJ^z5GFʴu _U]ݜ!?կ^RHϿ^{Miu[]{\F97yL%̧r 2Tig6R 7e.BxzW*9#omw7Ќ1;ӑ?%֣ѣO_7xJ^z|M{M2ROZJQQWwPS?yҋ)"Pa/D0KBYNSR=z @?D}TQRVKZn{꜏|]{qje6ES>{9fِ;nߴI܍2V QF5~ZQ>;19uCia{9);(%^wl,jR );=ykunbMNRvoiֹEJSJ '{!rs#:shar3ߪzOH9Zx~qX,1١[4CJj6ѻ[<7MFIƛȆVlbS|V.77W'}*^{59LJzk4uʊ٧Oҽ&ɱ„%-;FK0,\z.[`m$7,G ,s"oL5٣Nvx|`kgth1ykM9瞟nBkT[g-z6mm g_n &P><}G!"MБW>4t;:O Z״򐺙hɜrE(O9A#cD'ZN6m2>sJNi޲Hआ 7n,=uWc2r3•eТt]zFA&yhO!_'ruQG?/#a}K[>Joh-/ɮ};Z7EI<3Ygg^xQ&ZGҡnyn,RHgKE&#QUHJ8Rb\Iۿ/~߸14ѱ7OUAi%2jgS` I3\s<⑿(`2bf ԝrja2.Seai3XTդs-p@Mݩ/KSQT?+۲Kdo[&%kuFrsEroNR~Xczkf䆧HQsmp =u_~'uƈi?z]쨧V7I:M&ܤϲKc:Hw::SG ]6}jH xgt]=4iD~_00МEc IFG&}Z[ܔXgohKI$"cu ŠÕ\qJ&Lu0/SMg_|n .=p#]#cr#O~dR!*NJFO/OӟK^t<ٻ?ڼpnpc}䏫6r͸ZĒ123qïy $^:}=6fVgH|7A|;W6m1B~y:>2(O 6U5cn <oYr 7+)NEQ/];(%}XJ#6#u!ZjbfSTZ <;Z~[oL߽:U~4YWOа/ d䮖 fpL|h|I(nUNsL5th.)򱼌1ɓ5yjXv Y^ ʐ:!kǾ: cHo.0twPGL0!E|ΒSO=ݹqȑNkƏ<4}n8dͥIZh0{&qon(Hq !|ĔoA"ug@dm!kVg@_JǼ hсw]k%uiZ #vnmPWq~gΙ,;$:oaƦ~+%7| x[w5včt)'?ާj1$4oonV]65ռ .$Hi=$I҉vohWUC6u <@Ob94i3Gƍ>z[=<5uKkzaRH-&'5d,|晧qÏ0%qGY7sϩwM. `O^in]tVո14otI1uÓNpjC;d ö̙߀1܌T|l3`dEpv㚹;BҨ7ֹʌYۮfΕiX0De:J)2*+kU;}@8#[KV(_R 'uYGKFN9{!+ ͑)8]4qav́.}vIʆ{K.;ƟRz^$=?V~hCg>"O}YN/y3ΧGJ7vͺŒq+(Hs.Bmڴr];QfȃD^Z{,/;p靴_*~cH '(w}> ,e)@!RA~~)d0 'o䱟X 1iBJ2 7TkA7N,#SNo=u@q%o@!L_O>+{OK䌺>6Yc /v# a-^,R=^4mT%)?l2 ؾP8o+JJJq ?}B.2֜s~ ݦf\}z+N4w6jY<0nLbE{v3~p1;{TGs-+ǟxaXv8Kd_9e_2n#.[0*+kU:ǞEqZ_R .3TA =kG.gK֞K~WIA7o;R~:]E5seU1w\uoΖ5 <3@Oߝ;-KNj:Gpir92dΛHS;1=o&yfn2aCc߉\~JN~_hCֵ{7 ziN ΗZ4C $'iYLFg2Z̈́ D8KzG~g/ B;ǩ}Z6C u:u#!\r;:,4nxj2nF<;J5r ?.Dr~ ,f'y_,'kӽ,Ճ#bԫ1kwQ6ܸ6F%<ۃԱ07@/X4H |٘/Y)+V'nͷߦ\]w2ħMCi1܍K,E ccc\&sBY>H/AO=wyPDfdjeχI]ͺD;J7[ʒ}s$#sH82wtz=mGVܵ<,weS^ Z#ogȽO .<1B|bd/n}Vn1wPGhe‘:~L`Qsw-5@8ROtuL=,#Pp!u\cǴ:I(C$ CҋH=MfL]C>\O>Y2Pq񧞪o %c..i#mhlbM>xΛ'D9mܸA݉;w:g͉|:G)[l:p/Y =F+mxh: Ro&V/fyInjq(O}J kǏwaL\,uq;vXǛQ9sv-đ/& Ck4d}J*ݳ 7zH/J:wzCz w2&:KgpLLȋ UtFr<aǝqA '&q2?7nxpV>(bM!  C:~\ A#xSِ'6jH&ک07’/x#Svf4LUb ?“i#"0'FFLSAXĥc5vț_ilv#-cP)Rä|NH{^GrQ>G$:ؙ¢D1cDKGJܽw .,J][=~؍|/"sEFVV>"<vs' aõ_I(iOxq ;Sˑ. `?I)˶`/};.zaz2q럧MMh}ERͤ/lH1^`㚱;RlQ/ly`dGYKSxNW\[* ?l|/!NQiR2KBa#s'{]eRݽy6#u"ʐѲuVKM!Odƪ-by4_j,Uk}ŊU|f([(sׯ^#.<}6IPl|{I49"6DCdI#ޤ8q4RgdLjViб 'Zh'Aʐ:[FVv;e@{EX]:BJ8DeHuauO0621@ηM*3M왳dԈzM:,/ٚF t<蘰[>6Ybk =?yI1q7[ۋ/"Z-cXznyI=OYl$.an+f'>&܈ 7diiN]cEߔÏ,nyć/]FQL!GzVDŽ7vҳ{qÏ0N\ Sʳ~#8aH]@@?~~VR?ꃾ~%|*!u&ۑ:BVW2a^a㑍3N| 12pv&xunXK< [V9UMP -inίHحEeI.=s2K4s^/ه,9.Y8Bw]6ԭݠߖc?MzvcϫseKcS =ٱD`_R7,݃XY^VyQz+݃ɋRiY(i@^hm@<>Iq >֐:9)՘W({ҧp#AzJԝ' -Y'vک1FXH_\3Y3:?&S݄M5&ϛ9/ɣS#:dy%Dd 1CF$k~0yƸQF@`n + Co EZhX&>3ҔH $5ڪ?];91U<&:nhլС0$S :N:P&K HwȜ.M1 ^* ^XA8rw-]@@@êU,>e1EGH濵`G3|)C(_(|0!nJ͟k:vlBU|J+U[io3(`(צ i⿕# i `^xKxƋwd`[idp͋q^扡|Q.#sƽԭq.nDS\a̲A{\(^)9^/Yߤ)dBפDfͮ0BGU 9l(4~&Cַ:eoAV' dѢEJ$mjQ:ꋲ־}BKJ"kzIBڪuޖNCaw_異?AkK47I6)â _^淵ɏ4Sɗ4tU>#s^4)$lذa]죕)CS琱y咵JI\Ʉ|oID%" ԡe2‚ɤ`jó4xjK|eC|r%N9Pd-" N]ϐ}(\jyЍu-w4KD"#Ё5@X5tܣmF1!ƤQV'Ȥ8Qn&u\W/"<ߒ0`#㔴F0Y~9r+`ծY&Y~q |j=ZK#HBavx1@}񖌺ݻ%ij \K)_Bm$f*v!E+_ʀm^HyQXaX׾};%&,Lr&#&Kp+e6_|{unfOkpdzdqd{9%t|̃o.$u H&t{}P e̝;7ݠOޑ>yךI&/IӦ/W+׭{zdǎCKиT'vyA1ғ=p:49y޽{b{(C.]MR˻ᆳuK/h֬s/;%-Z|9jGK{Xo*~hyYB Ѡo€ڂ>?/cx&1SzW~e|#:5k~[X":r#$cӔeA(|sI]C݃H\Ʉ|oI--a2;o/4u;!hR$&:eE91NoJ6mڤEY1YOܤ4+G=B}$W@!#-?aj쥳N`~֊V*ƦMyAp傑څH~c[f}(󧪜쬠`|%oq+ey;chn]=ϒ^!_#\-4RܢK0sUL|$:P R@n.#]N6 ؑ@cM- ɾo~~؀:b~RZ]T֯%H%cK%c$sk%k$ynVbںrL@H]ffd֫3sds5:;2 q4rGhX. *v-/O!'uR؀aF_ PU kdՒ钱J2Ƒ%〫k'CKDzH[WOsvիl1vT6)3,a ,Vdn^a¯+bB=V-֬^.s׆seL23wr Օ … p6_XpbѢk>;=jU於<΁m\.a¤NCU--+͖{){_܅μR2kkԕJ_̈M4E͛'%}{) `G¬Y3dڴ)zSSL)S'T&O/ӦOIi>}d( ;&NuP9̛;SF!>[Ik%cK[9G4W]2k[y=4 `GG>Sz0XS>}4{QrI^g{BͤuH]Z&:<ևoIF$$%cTSuZF sYYb4 1/:? `GG4PH`ͲeKf<W7oޤ|^lIpɰyɒ%nuhuPu$ ֧5ur_HZ2w$I"ÎnOg.G6~W)7;; v| :GDα $H ATlrp)[s 3aʖym'A)]_fϾj?H]D·S?>Gͪ&cC}{ہ4VIiVIih;~ѿlBYSfE&NHN@h$H AlsJ$yy)ljH|,(%m1p]8%~&|cZyoJ_DmJ7`g7.~ؤ1ٴeo,¦ͮ[J.^n=p$"eHpMq%u7dz++I]EZ@&CRAR5H(u.iB:BtIҵ<|܈wz& tI $H ۃcOo@L,<qAJ"ux}vQ6o*y!<#݄gO'mnexI/ #Iz[+)RW$Y$PS(Yǁ;AߡI!yB%uHtUY $H R0cwI,M*H (&6)MSgv'Ya\Xcbn_:#OL?C7?ʆYZ*#] u~fEf@M<C;<1?/27nN'NY D)i"H $H AjmI/D~Ux菋~ظKX 4f)!)µzݺu89w &fgC9ej}t 6 ĉϏ얇LT,m`2VVj1K88%:ɓ#)͊ )̀BY|C|-5f}(_|\6+L,-?͒f<0A $Hm,I?vq]vgG}$_~?=oU# 'I$5!%jDO?fo.{y DhS^h+^j4iR{fϞ-_| 6LHEһw_&O0mLiu[yÏ>HV_K߾}bɵ=O_l΅a#)BPtVj9+@&CRAR5򐺷y[^s{/W<W_*#B|fn"VR?a}xK/H Aג_o >_C׮]dʕ'7||m⿜ۋ.SR{kԍJ F]ސxK \PPnivV.&4oke٭{Oݘ/698BF+C~'K.W׭["d;>'s?9so)CyS&ӨlRW9$Y$PS(O>VBG'D}٧福ul~B87Yfev[aiaa $HE6ԙ0zwbEKVac1$ήB[m4u?T^}M-['} 1bb8kl]4nxk~"0` %t;sO费}7w\ 2XWI!RANH]! ΐ:3ɿ?&:02mP1޳+Bu-בݻ=tPh0֑MFu!+K|K"uH2NN2YC0BT7g&`䥬D]0%5Ċ uҕ+t~4 &sfsCGsfGڹQWqc)%Op{&|o1"=qHRL+#:I]t`A+ 1 rc յkg?.wy\r/۷ͬ~MS)IvM0MSW_6w|"0ٳg;+/PkZ%\$?c2g,WgyÄKiK*X0MǞ=#5)\$_`HjHN7fP !::D:1LƎ'tYt%)^mۦ6&.kad!v5jb$H AjX|"d}7|78 "L!LCZxI^HNzd K,9 1ctĈz4mOjI`[ҦM'2xWu߳gOtv5rHVAX\W:i޲kCK/@8rqCt(,Mq )k(/I7s%y Y:{u2JvRdfbVAj0M6k ;kz@̝;;תU /.]ws]2udtA fF&S!]v+c4g/yeBe{S~E`C+/i%#9݀AY7E (,7^<5tNl6V I#d >lHfZ\odzkN Jf>s4h1>,=u_b%dM6Ցifj d|&&>]a4sxV6s|}3akd$u$(lF7oyUW]!bdfcדּ_'Y`̘1HIÆɣ>КAktWF挔nE-9O ʣ3J`BDW!ehL:/Rv] $H %HƼhLr˒›=u&LmЇRBD(æiDۃFcaLg;7gV4΍4--ܜ#v)&#~ވW{̋K3 \7Koke$uLx&%|]ثW%t?#O n=R~_B䡱k߾6/D]i$9%ui% ?W,_{fiaZx#<)4aH'ki׿TRgez*ʼnF@͡,RWۅ PRga&! $H AUH%H^ 'aβ]Nk$cKyP2V2+5HݍJ2%MZyHD*W^ytM{2l 3j=,eРMr /<$H!L#f!N5~2Mqoko}`Bt:@?A=أrj|䓏1cFi,W\I3BH!SiU6K6ӱorGtF8!^ bh8eĈ?YdIC U)l >b%u;Έ$榛nPfaA܆ F"$-߁b4aٙNUCrNL8^!ą\6i\tJ!zו;Z22h8#eO?U-''KwiGhz?멟4p(Yܹ~ l-w $H*F[ˊմz /^9Ov;C_ՎI 6f)B{;… a`AX 2A/W瞭95^=]h u{?Hreٳ&Rv(Q$Cj'ѼoЩS'}˓I2sO/MSgagaI|▎dP3ݸV5utD:/J b+bp[lY@+8QTԱgJ~KAj h"£b%ߡc#+#UF~qJ&= 2Eҵ퓣ƍPRg2~XM iA p,y;jxȓ4LÈ[.GbtX JKH&5{V^k-Z&G,3 `xغ`%qh}ىqzÜ;wnzbaRXx,YL2꟬/!u=u]c:H@8S ޛJ?Z:S@HR~OWÛ?A@8TCk^}VH>o^eB!sNd D8ǟR7׽{T#'jr 'jZ=dPCXJ'oe A ĵVζ5U\m!VaRM⪗O,2G._dpu:%drNN.ܮIfάR\T$ Mf޼=rO͚5Cĩe˯??A [FЌ7HYҵ(YT!g7^\5A5Ry,fm'H A $HMAjdz#pH:bvsnowCS[y#n)du_  udZqd1S{+"Bi;9S~R` rWz}ݣ<~(# y#iJ,5@țCIo,$OIǒQM剝2N8bx\rpM%(YT}lr]Clvy(38#a"H A $H A>Sxa|tV{͎]/G8"tD${$hG⎹?ũuCp̣%N:?e E3"{EH'!EY„$ɱCE0!8&X/ CJ\Ⓐ@;i>i3rfikg?i~A&4'>~89ԈnsQlM$?o}!# ;$H A Rb=ICR:q#u;*#G=:BюؕGtJC $O~ #u6DĨ<@n L5eIJqe!^8#`Fp3GNBL#dF[:;a0YIzs賈t$A:ZI(@Yqp8&u $H AԬsϐ}Swdp#vGE<4u(8>Ey#z)$8Rw2]}$+c?عBeKA`Ap A"#I32F,,0D<a'B&H qO8#gCw!iduce)d#fPݤ.wK/I[)ِ爝|69G7OdC A $Hڣ~ G㠔qڥK2Sdz PKS"ʡ1BS2!v{KV>EI#)IHQ@Rkp}X\5!On "ŲHƝ!yvX5Yı2X|kț2<yRK\#e`<ԑ* u\kyۜ s68y,3H A $H K&[uJnt])z{ veD61L2|@|oUAj҃ 12ĵ(A7Y#=)7v+0`ƴk -D#PݤnڀOdpۗ^_O|[mlҳ;p8i ՙA $H AjZ|RiMO2<:cw`G sD(XfdT|O]]SRUI倀M~YF@Lm.PLZ&o)=[Hׯޑ+湌7Rp G@F;ςMA $H 7E2:2exdp#tGĎuRWTK#rYGLG}v%!@u._<)vh&߶M~ hk̙:Y-m#5׋,t1MSncp"biF(H A $H% M#uMe`&ҿ]~m_߼ehפ0c|(ú+>{Ji?/ן>+=Y0݇+24uA $H 7 . `;Bu-V6J0!t:6qD%߶ tf/1? [ʐ1gA>MclOnoȷ_mGUdsJS%R $H AR}I]ϯJH/٧ 3S"22AV/ɀ֎}b@kG=oDѫ 22{3_u_QD $H ATX$*5Am"[([(}[D ֫sҧSңœҷ gsg3ҷ~_>Wz^ѫ]jt <> }$H A H]@&uݚgO*;{ٟN>.>p$7oHזHvKϟhU:zySzxIz;eʘ.W>wQ A $HJ u]S‘VOJ%>tHϞpH/^mޒӇeռɒtlX2]Ο,N &)V̟(Mes+'K 5sʩ}e1ҭc)(X́ $H AlRa*ԩl޼ّ\$M8{*H]^}t)%p>_o>x\:|>#dݼ2tW?,Yf讻ydƳacIy]yRlGXn:~~~O߼%/N2Q&*=Z6M{&պi,1\VN.3Ec1]D|ELy?Ype˖)ذa]V=Pѣe]VM!]+'x[ƠA(‘N;$}-?ƍՎv/Gnnnt]^Nd/͚5SFY--ˈ#4/\CF}W:c=uy9h]A(>:w~iӦ;׍bq} A)>>!I&ȑ#e}YN]:g_|uoo\ y?y +է@BwZx3o}7&}nޙ{|es:}g;_I~7LxM%{:W-[s#gZj/:8kl}V~6ɓ4=TG u utw `۴9ٻ 3B)揖 ƤaX]4pbo1ޑ2wdG ROF)!A뮻O+.in> t)}M!²ҥKt}$ou\&rƼy ͙3G [c_ VQF,?OW7@^~eMzF(J3: ?մuVu;eyNӥ'|3&\zt&-޿93nݺZ%K< Jp7y?CwA#V1b;o_<,\tiV Ë/$Ͽ$ Ro˻ᆱc47|˗/]Qo2zh㏥iӦ[oСC'-*G3'WΞ=K%عt]̯F#}>_z1،e%&3`I&O8Ey[8@#E4i"@`2ih 9{v `uM;}M1ב.60tg%gt˜±]e2sDG+e::(^x5kȊ+taɂ ڹaÆe{#hX6^3S!0H="oAԧ0FXА?KGjC ,#%o4mRD)r=ܣӕ,)n6~x6G{Xy+O?ujPƠ~?<]6H%,vMoHegUW]yPN{i3eI-aׯ/Sw>k#beiG"ZSO AԔXGy::bDŽf}yM/\o~ҺꎰRm۶JH1BfD~"jIX A`Ǐ\rQw=Dby݆\X~:V^{Zn%K/ӽw\gdc&oQl%ov~2m< ؎PK:ya 3D{돟u,j,[,vc:Ȃeox|w]n9gD%xؕ9R u:XMZ&7߬~/!>2aPsCC|81̙E:Z[k/?_u -_ =%:{OKeA>CpM'TK\ވioƌf˓2GYcGK/'nh [CY]>2(njGlBC %K.D7o.p rɳ v7#>+?8 $HMƅeL3Ǟ+OcÿiW 941pA }aKH8|;Z].w rĮsv&ĎQޜ;}G+_*YR6yYWXØOYyN2Y5,Y u:(bdq~ HhO~ȔIz~%} 'Z6#;;BR.h\Y0M"r>CI:w (͖A> uTJ{ 7ܠ*`BGKktސ#4d"WZL|-.$m}Q;@91-a)oOl gp EF26 I&F;<g}V. s)(ɲ{iS_:OgRbMƴ~@)S(GOφpSVhr}GkX$ Al Ewm߽gոgğ?).\HI\޽]o7g gBiM4 N5FO=X${^7uD[=vRf)-p ~&a/_y5βYO-B!q\@'IDC +,O3|j u'-=9*|`>_Qd>kPX{ʯ3߫ )|$N 2WRic&n%{tnF (chB~+!ھ򄠙RgV"3V>oˋ5R#Q38#My{ QD2gbDt7 $HMkIӘqc!(ܡ1M[T˃;6`[ha:=;AM„èZn`-i> ϔE[J}۞:>-d}%6⦵4u=ԡ)"Gvv_4{Hָ 5Wb:Ś5d(~nz#?1͍k­Xk&V^NzӦt9V\ׄO|$,n08ųI8-mLҴpD#@/0 rAimKLxQOI6GFvkU~9c#.ͅKsHK-E$FXE{Ύ^HӣLyՖ/ij7H3>H6H-d{ƍndZFYImbN=YğxA?hzFm2F|jL7f_I|!Vvʈ8nvOV=!fg!Ux,?>TZşO AԔR PDb qޑe{:1Y7Rge۲;# =^zFʯOzp5 j ! Ua߇lKb9C{ʾ8 ژhh9Gs! <=!&GZ! 2pa&7;tRwsHň#tH&qql3Rgdq`7B8a7SP lQ<`Bp'dbdv$F,K͛4 K5 nPҦ,CE}YzY8p;n7jY울vaF@͡,Ra&Ӯ5F)nľNf꾼dRwv!F(o`_rC8 OWKð7 !"HX="eFÅЈkJXb!,A-^{v$q< `v?$ я~iYĵ% M!{ q,Y8&ʏX6ãd'6Z2;?&uoMCp_ݻwO6m}+&4@Sg~<\^H PpBbf Al+ϳBAT}㛎Eyuvm[\&v:hʣ0FRpR?Rj&u#u}[ދ%Đvz`rb? $HMEЇ".3<&@Yߋtkb|hu8x; v:㷃E8KQ2IϼD&/.0}1-_5f8zYPxF쥃A)hղivM7<ςSdI-D-T{jb{G 1F ;&$7g?)kގG1܍'L[<@ c# G ADH ea$Xfe5G\' vH"5:@lC(-ܿ:B?i"u& )F|ɺݫ!_7pC~x_._:3>B|gwK K4wv_0rO>Jtce7xMJ*_ ATXdGIIREfዯA|ߴ=x_}?Y=ix}!l gqG޼tȻHrQwi0j뮑ѣGjx#RI2mǍ4yG);@9 enZH('vZ8 cϏGZ7۔)\|k4%CYww :@`)-2@&u92"uhڒZE`NMkdҤ/nW=H$6XǯmV哷ft/si8ﭦfZ.<r˕W^.?B҄7"hD ;$;]N Ir rN<’v,,ab udΜYeFJ&5h(éRd@;֑.ANYenք: /tv~J]D:SMc>% X~goʒ.SѨEcAJ{~Suڇ?!$SwbDUqzO aÆmݢ$nA!Bڸ6e w#U{챛:!`F卿oU?bwႠY07#}OP)N>xODaO>+~/&P[Y ],Hd_~׿.լ[7[805=(CN:Ye[.ҨQC-9 =]Px=ؓF@͡,Rẅ)=吺^tH!KL1IM?eȁtյ'VRx{4^/ŷc~Grp~^ L~Nﳰ}3>~8kM? w g⧈GI7'~7Z8X58;:|wpܰ"V喐kZ_&yƅdY5Ls-7!Y2|tx B#H<)[~}x5L uUOi 'nӦ}rFZyiw'e„qJXIFX d#fP+K6 (sVVDۼZ~UVL#ww+:$Rɵ\9"eٴ\\\9 $H ATLԉd~dsdxdwdn1I K!Id R q ]|V8[AvJuGV"fx4m# "zrCo482O K>瞭Xb}<'NnIuD[d#fPnfEK4WJoޕCZɌo[[ȴ_YYLL 2cX+.UP A $H LJ;&p14R6 R6 BDzKr!sL#mʒ:BLnӆU2W[ _*fMؼR=K'},|&C{-) $H A[9~嗐;H[#:HD "q1-`9-ahy!C:> a=Zm?K3!AƏ+N~-4uoia&?;ܸBHt!u͞=3MLc&AeI]$,7Ek7?qIKV)5f6/:JGW.VMG۷e^Rm< A $H͛ I>WHAA` +, 񌄱 E]Sgz AC"nCI5&p;-o&-U+g3hAv-#2?n,$ߦrFX]`^ߴIYx;A4(K9TZSaͶ|YdL5N|7JFAo*WǸqȄ1CdE.sG.at{ $H AWy#sWJ!)j!IQ2dj Ww IXLjn37%\r9bw2yDyT ׼p;ЃeY֭[)}3?֑=c"ONdI%v?أr?ޱlzis[MwMUrwsٹ $H A RAq*>t$YG8bw#o 9H%kLAT P0T,D5|Us%u_~EZ+id."=Oa `?ׄ8-O,,옔']vb7 'm!CPa(E! 9?x0z:#k;."upIdPHH"u8 vݸV5u8>Ca!ys#vԡceV{ܣG%]9E:S.$2gu֮[)mڴիW… eѢ%j.^X,Yf@@@@@@@@ ͗˗Ig;u:]~S!d;Bsس~d($lh$._Y|PcXJ?g[SW)f{ oIjA A$&RHi|j}A)#YGޭ:S@Np89c]r]DڶGD; @'  $H AXbNzdvj{Ա#uY'T}"sGs}̣s)r~Yq$Oj $H ARWedpdujꊜ~S-ÌH]GNCDrN;R?r<*G:r@ lj=i>4w$}Bέor]դA $H A uo&[ޑ7Ḳud"g:;'Bk>W./%؇}wߎS3vdDG uqvRE\xk_+as (!yyRy $H AT\Ա$X=w,<"A u[N \Ii7b wEýuFw+iA $H A*"KrN~c%w!dDG uq~RYd&G69:Lu6h[6CSY֬[=< $H ATP=7z㮳w.n=8Y"H]@@?p58.Svz-΢7u䦚;] u[ND:,1ÛKOI/?z\:~|KO*]=%~Ri_5Yᰆ $H ATHa_] u[ZC㖷^vPLZ Z& h-~%ZޟˤAdpOK`(r A $H JvCD"] u[N"l͟^ȀMge`Wo2m3|%G>!>^>U4 A $H j>(.eJH&5N ֻt?2]3Mu3EߦrD_IvMePH/]*~y'do{& *eӦM,}ķהa1ʅP6nVvsGJ 당Y-Z< {zvVμ<6&]uHRvV/zx=pGx[նV~>%k_ޚxvme2qI~ݘ_Ijh ]?x{gYZ{ eTViղXFx KW;cPD`eΚ+iށ_&vL%~ژ6Ŀ/_|_VZ@-yuMJ9˞{'MtvTףՉ?yۖԶjX[6dnVWYg]PNH|w(y&gdL{n~{?_} M,P(Td#fPI6n_=Hݛҳs#_}Z$=z^~Q|#vNMnb1jB}ۼ$/$2SSi79RWTDlZ)*_MIe+x+"o?HRԏ +Nl{Ix񗌌0X FV7 #l j;یoۿ.=|Ftj?2MSүMSSsgkGܚ? >. `eH_G| hHfV!@uaWysMJ&'.;vwnARY㓋$Ð&ie.gi~ʏ{UB~ԔϺzk}l P ~~nKxFGv_kR60?KpUl1ɶ/+6ؙgmhzLetfE2bԯ{eig-.bvtۄէ_gRysVޚhc~{/~;31d嫩6BYH l&= yju7=Hٳ&7?!~+Y 0F@͠-]JϟvxRz|tl?ɓHgiC`4_8Qr獓U '+V.X1,7Alxɝ;L&53ȊɽeңgK:_ UG>ׁ?)' D#6ilu`kޮ=֤&P~:{#?MܭL~xVG%Q.nuP$<ք}yf,oo0ķS& X^f/ _ǟ_W[[ #?ZU\~0!-[rTd#fPId үSҽ'{6Kڿi?'}ھ)k獒UsGqdh\O5S3uT!9#:dư2oײ`tgY4~Y)p uI(F*w5!#y;VNodwoQf̘Qbq>JښՇ[oG[oU]{gC|_yyU'~5!3tP>XsO3g'v,IO4a&첋p rkY9BLxX{ȄrX[mڴC9DeE(o$a叇OGpݓ”&XYHwzǍ6L~ En"niOkbmO{y+P.RV:[+ʫdƬlљ 7o|+-ZNpOa K}@ XsW2ag:u4y7gu;shx_x/6m"6dȐ!Ү7JY@iR,G"u|p&u bb2%AFp5jtʖd#I&u <5s=a{w+NnθT@D(:!ܗ?1[~H,r[7GZA."uc|R7+2:LFX~' Lfj֬CxCB P L5c=3&t믿'_~e$փI17=x`n!ArGOVℊ{hE%'ă]qQ'd~$@g&z%Ƅ<'*7b ƎI1qcY ^!["5&DMu Ćʌ'"bY]㥗^ʄ[T|=SE⢏Ap x>BϤr- @n oyz*(;PPd0 =8OAhi+(^ ]=]w] '}aEڀs=O=cn-6?A.{NKą.K,u[/ѣGt"&X+u䉺i_Օq,`T<^uUMX}} ѤoꋱbSXGy1K]S!14?G CtG t3fPmڴ3ɽKz%K|IꟺaS_#+oK,sছnmIx{t P#U^(=Mx|@L߶n_@mM$㰷hЫ"u͞;j=3:^wݚ|>HY/BO=HA֭lIoɝ Vfm dIݜys|6n fC m>K.Ƒ')RR/Fͨyе(N%$uX 0Ή 1+_N:!R:}&VpG?yx#f6qpk2(-o\#DͻOF FAˑ1兇?3-= L`Ex|cY^| 1fB dNHWya)D^?xЭGPx2aa 6 m&e2'@$Ix+ |}?K(~行L0YA3%'c2 ЇO21nCl&8z$k#{M6٤*:2R$0T:#CF@iI_^D@B(+.1'Ym%׋H40 ELYJ %pF 4 %L9gLwνN@=b `Y!z\O1)W,j-X ~W瀲WăpqN[m_y„rHvPuGP,̝o{MY|~=cR3x{1>d=&}hM-+@b;7 )k*$7^G{oA$!/nj˽>K]@}iҔ1=Jjc #ɓ'Fݻ*wg[V-;d}vIasnxx0BH|!#<"L#,q9RUNi|r4ke=\aDLH]Ő u1A꘤rM(z@hm6iP׸sl,mGb7!:vDDjeeʘ!L5_ԁB(/!Znρ/#y[#:_Dur.k.N yN0>Z&L.Ɲ<⿩DX@@)3uRNsڄvNt^Y~:pL^ ^hGL{PGt-%ꍸL |#a7dX( ʀ>,L3B^BO GYuIYE~D!?ɣܪkK״&3光̑Qey&@SV@|86jH /뾐B^.x |p̐!̷Ն%i9/dPc( e?W#X!uß} N. ^mH;rn {}kH7/ rfA^?.`deT:#M_3rpNyB}>}Y~8ХX@kYNa=vL}r( L_Sčz Z*=s H|h@y :>yf&&u5q|ӧTLv $R^~ȓ,(;;(}^a頗WV,)ߖzPS:c~w|d?-ݧP=AVX~^?1}zַܻ8GH +^Z@ظdF$I=APi eO $iW-(?MSSo(`dް]^A%pޭ{MAM-4#+[=1I&XL&X\d_3=H˦"C]6AU L"ےj ă0-C9hge">ʨt'&%3D) 9HҘBH4+D"Q=}Jޱ@1bo.\jU6+lġ_ wE_Y/ek|}Խ ѐ&&GYiSI:82%+o C)dC6Y^iSMJo,uӸKПYʒOmŋ!V[O'RRki}[ݩ;Ac`Y=俢ֲHoo{lZxE[-?aK1_M,B ı(/Ǹ?5z2ved_ 'sx*!@؜aaNXtJ-^iܸfMo {i6_{>,ec}OF+H鯳Z֬YSkPG|v$wCYnk!iAjÖ0HR>,ο`XR:&jgS d܍63!$qҀ6f}7RWQdpɤ9#ނ'm&ܸ3Yz{ &QLdi!.9 ?fDI/19ĝI m09dFV^!r!&Lѭ%}I' <Yq&LK|$h}9WDJ:`K#&x(HM ېS7i j$@c ]LT ē|WdMiS&tLڰτҗyx$ @/yc-0^Ж|XDȧDzau;/Mܫo&?cKꍾU[3^@SoeM$KuÄA}/ʁv`uJl@)ˎI!'Q1 [''u,;&?Zˆ.NdHBް`'I'J#^/ʀ0]biWڂXG,{C]? c Ÿ#/L/i ^">.Cs>Ҁč2Jx@^I?h'{T䛺V1ḥlp!U,F~H9Kbg2y",>" 9}x< HWH6C_{V{׉㭛 (^Z0YJ )]oO~yRH~>o\+2:S>'tPk$x#ԭoSޅo v"},\`ն<>N[NWRwUb+H]H*(A 7?]9B $. BX܎=xh": s(wDqFKnF}I[ݢѹ[۳֋իW:t6>aWN kh&Gs,_yTD qy,] $#JtA<@j)z؈p& lcct:D m XX~9fp{vx@꞊#lv0Ti $??rH1YisY\Z|^q0QXe0\+.@!}"z8|td<~˚W *2=ˆ'$[JÃ<ϗW  zU կۧe K=>xK@%+';P8ǕGAV6\GXGA6HvBzЯ4|]>,|=l5:' f |~@uT6N:}>8׽~ .YR}Y"K@kQ}ټBSU;>$ }(6rQI%0P{O:t{,F|qRW} .YnWZRwuNX^H:!;76b'Lt;a" 3 !^/8~7'aiIw뭷w>Cm̘Qv?PSb֪ ^tB_0Yi;HСpT֭K$%} lYh$)?YH4pkr 2@մ)C{[لAlyR7apQ iewúXOYc#(Ċ:X4(40Y:W{4_ =mLQйKXd͖Iz)>ٸٴM{!a=h *Hat{ɑt|ϗ)Vt?g?}¢o$e,d !f!vg;ȦAu|%> ٗkr>37!a )#W)@ ρO<>’TB: 27pN)Y>-g#:W=n;kSYꋂDyνѹn*m_(= n8u',|eka=ԇ4*,ns Z6˹Vmch sUbWk tQ z%/Rs6@ZqAp7I|\ci$6YϟjK!XXA?پIÒשSHO0w91}܈7t|SG:l&O c {≚1򇠟ޭtYh$)?YK7A}eGXGHݰ0~K(%oJ~|' kQ,( >JxO84gdu<ʏׁ~6a.ρ/;aOlxtgݸFйٸ҇Sg˚E 9l|x?֑OKz/.ȶg6+-G4  V>|4B?jwM(ORNO]KB#{-(o!osA k|JGPΕ~&[ *M^Aұ46V}9ב?}8M_edPBy^_w|[W"p|+~r#ʆWKs+䧶ҹ0^{ă?<ϑγ;q!mw a#D[o8D +DNketoX؆ rɸmmЖ6up?~uhR;T\P}<݀}@^HmաS~qyT~7;|#JǗP\ȃOY(ʆϿfA#yPY}|~tN|,|aWnEyiǧ יM<~uT>Nq|2t,iPxd}ټn8>--<:S|l^e|Z> WFuuJχ0ss_f=:G.Gޏ|yBN~TVGOa ^Q >V\ X>?#]iN ۃrr ~.VT)MwAPٶ*Ԟf!H׵@؟B9RW\[ss΁~U wz #uAv 2*sOtDHnX IE! a>!h2B']QJ)?@XÝ5z7!~^i wl)L6R*@:7z<~f{)L2qZٔAlbC;[GH]3N($Iz`sS=tpeY?zHn}x^wu.g'Q8A0>e_>P|YdhY(]ޢ]_z]ٺ |q;l^|_ݷ OlY.מDte_J[6o_U.z}޼G#={7~s_np-NNX#Fax?a9z?is׷˃0پ|gnuY}jc*'VƟtgk Jۗpp>?OuWZ8WQ+/jBg^]mP~Z屁ԝgke;^i|SWMR n{@$9BWI$%҃QO $/҅p-B9 GtCJ Hľ}uKx߾V߾>>( j$ԅq.ٻ t cq@td8Y g6OY=_6~gP&a_CJ<[?~ӧ)l4 _[Zey_ $mﯾG@\@8_e~+h]HW<{O}:eQ^^([識xNMvP(-T.~%0)\6B-tyAt)OSnY|x [>^/G/3_Tm#>}ݾ}]ӧ}DȈoHbw웞Wn=Z=c6?.ZPy Z,V dn@-y#@y}]սnj{߾UIRl$)YIܟf۠>]]㧭O[^YF-kR:4~ZWZ_:4}7g?mcs~$ K!u^iŻ_#n:5RwbniH]d#IjOZVtO_6AzZ]_OK>}vizχ ʄJI].uW< ]d_.MRl$)YIݜܷm6wٌO3sKY6g=3y3m i'$$$$$$$?&uUw"U]؍UHR=K u%Rd#INROusqj]NY~O-\ZBBBBBBBBA٤`RWuW~rֺjeU3GD2Ts$ +F՝Ա |b["ae\j*-F^DvoK,}E("lD~Rl$)6H pvB&D<"%%#*E-ȑzNi˄ʈIAj]u"v,\ؕv)BHݯV $#-WMzXr 'k>k/KH]+ K"sXKv K!u=]yRnۭ~w9bYd;I}_~K?&P#u[kE5α۝iUŠw܊w|KvԱ%d}o .7<9B极#)^Kʬӣ7w.sN,IX>$I$I…ܹP%RP1IH w숙o oSN oL!z"r"{&]v$%.߂x_rr_.X0/!pXڹOu/_-ȓ=e/-LHHHHHHXxwDbWmswNVyY9 q.kHrL 7eʤ CG|O>6d8 >(.4_?~l޺~=!!!!!!b%[b#uwNVyY9i8Xx 7 NֻB$IK* ,8Ҷ oK/DSK.{˯ C]Nˇ*ʋ]UFnj$i1aXd˹l'IRk'u*CaI1c 2(\Ș^pνɽrLm!wÆ }k_}Mbt~՗P)_g w*#u)qBǦ)_g;NO89h'IR^RYIK/On} W kO׶'iu<Q{fǢ?n!<=zdU/hL Mn7Re|&zȝyA v#'|w1vg/Y~];Y\68j&zq;CC^vmc]tA` !dn&&׸q8ǝxJfS8ŗNNr' *inҫ4tD?)#U7э([,It*T&RiӬ'.2˾{?٤Imjw}g3~ }um q?}0a\-kMU|^7yY鄬6m9'O6!OQe/ ,d󓍣kD4d||܅@>&lyJ?ߗ%n鐞B} !!aŠ'p{Q{[cPY:u@cWdu&,;xmvֽIDAT;ql}:KTvM!"e:$ 1-tDBÿq1 "D\4AGi_믿oZn믿u%4̜]C$GB9G5Gs-Dz"\O7Ǎ8MDЉESι Ǎ| ?_Q>aie%.K$ ͚==}'ֹSԱuhzvf?$SYoonݻZV-MV֯o2u􅾝#Vf{?T@͑4 . ~xJNgiDu|r,KOYV(= S8}: *wڷO?Tr$),-Aγ}G>/6m׀Mt.1 pZG aѥ |H(~-Toʂjeۜl{qȭ|IbJ-uĄs=;Z 3TA@ܝqiqy&ֻ ϓ!@RЁ|*g".^}8✼1.%= Bw"ㇰ܌7Z#:H%^n#_)ԓ"I{:?r'!DzeISnٜa{' $< }enÄI`-SGn^4e١AK{s,4AJO>+NړIOsi1G|Yٺ*TEu| Q}WNxחpeNd9!!aA3N},#,w+ Ǎ,rcx ׻UP]l >ŇRJUN H[jS d㏵SN9) K'e"Hf#>tAz0OlUWяvam 8 1cF]walmd~g6nܘPkcLhhv_{5_ch!d)&]zQ=dirV5ҺmM6"2(uֶmX>Hp*R_}euםcM7rO5)[ "u> Z9i֩SҥS$g:umYݭ[>־s7ܽM~!Og)=Ali^~:z (_V>#, {]^uͷçO;:[N/PV7呺ϖ׃r#t2_s\Z~gϳnܛU!g 7~c aQ?bL^@/^?rm[~.}W^VTA|8'd҆5'b3i҄BB8HARdq".~^,Wq:6r`?iH`EUW]IҀRk*-BYF ϭjբ+/ERGz:e]w=-,; &#GyD;:~~DF]P7n8f w:KVE=IyDOQe˒D2Ie'u]{ .gBưlN8 G#fΚg7m: Ӄ{3 ֻOد˂ _Ǿ=vxj=@ !ǗW rd!ʃp~O17s<3j(kٲ=s /X-d-;n1thO>}G%9U3&^|5j(3?1Ν;X~+0soN:z){GAm[>|" &-FK꼬2Rq`ǤG,W|3ǵoTk DE %ėA{쑼;’C{a =EEkXmcZoVnA:ɋCT~1!OSG|KNdVvDb>]RWUq;իZfM>xף瞻"Iqġ/W-NeNzf".nonx}M}n rG1g.rY(X}ϩ?MG~|i \ ! 䙰eqNTByc;S'Ǻlm֭[G=뭷^$u`CRv%s@|<,]YVZk'QY(!seȋ}H(Ծhp>]81!!a#{N:5aÆIq mmqc+JzuOˍWQgyƾp͝ƶ>cx|{6k" s1~?G ~ík׮h;gRg{kw%U# eC E"?"ZXXp@.Dt~6LgD 8sDa~yzq"qD!SXٰq,g f"3nPZq^/PIφEC7yx智瞻E\6y|;nKᑵ֪ᣏ]#u]'5:êײe|5? ǴG&I9G8ɩlRI]ΝUxx͛azuYv er{vڽ7kw_svv8w^֣G0^w. yȑ^)<~`؇ z'eO {W5\I7wu׵mF?Gt*đ_W;su!2E( ^7u!1Wu ^iVZ:0igz\<%$$,?8=AiG;>jsNc8oZjM{g8[m=?ϕf͚YǎyA]M;\~nk?fg}[V2+9ڮA 9/+A0A$ P Hs!9K/Yj(5]>䐃Ћ? y⛺G$č]2 : >bWMⳬrvɓH߼o?H;I wGy";bm/eS=7~c $j),˖INeNZRe=p_/~=~ϙV S?p=Pc;/ qx٤c,c0^-^zmƶF}O(@8K1_}p//kmlw??.ѹl-[XFX %gqF M7o[zO=.x饗#y~BC}&yǝֽk;C$gy :4[|Mkl5׌uò}_~y!CDKV^=wÆ b&˓]]`4?q=s6hH>h>;CeSz~,KX6Pg?VssT!_%TաzߠA_Wlkڝ+3DMDyiۦMFw!z#_˧cBBBzuoFIdzpDF}:{/|7ӾyN]죦9:r$R,]=֦^ze_zR8xK6qqvvK^ ֮];:0g\gkæY&mނioe͞-u92wM vEBV}-oD{B%@uU D.%dUVW,+D伬RDBɣC҂ȗH GܰA!K:Yj 7t1q=.#G elOQ ̉G=^x~r?2I#`?!4򉥎<A,u|aF6i([`'&B$(aUd2:.Yn;=X鸦X $1mUX "5l cLQӭYmGoj ke;޹(U4فaA3 0 K{1g[77LYB 髯~E}HĒkDk }x,A,+o+2`9$}H#nN,QG9G#X AboxL'XĂV]p,<6%e3|a⍦G se>yR>D_W10|ЖX XNlFIGϕ6:?ƾ⋘_\T$tKٱɟ硺lSw/b$G6 +w!ecǎPc!``{K(8?e7^ӦϰzZsۢ ^/ \f 7 G{=k6yM/ ڜ:C|=?\s +reCʪ/_7k4pp Xr?>:jK8  acܶ&~hdc#!DΕBvrG\[oih䛶=-QpO'@N7C "%93%Z~zRV~ eeP6~{<adBM+Y.u~ g^nu6M63wn&?~z)gaw!>=<)Q>!W>o &<&pR>_Z%hIY⇵P&圷v[񜼳? )@pWqG<ӟ'GOV`gNeF7onzh;8E7u5ofoĈ ^/Yh?[ڂϨݼ@irP7uW*#+-=]s&(wΪpumH\D.:*#u") ^bz94|A8' i"CbHKd?He<(_Ԉl1"aAW)DDo ⑖↨xG^O)ɃjKqI7GRT줮U0X}Z  ΄cbvÍчѣ9X ^x>dϏҫ :wj-Z D[., n!Q'/[ncDB\F_~;N:`N ִobrM[F=o뮋ER'·ӵ+, !yTD :5%O@Ё w+!0"7Htp!V˲BB/"`?yA'EtK98Ie!TrRMqG+] "ԵӬ-ߍ9s8.Ȩc6m͙O#nan?Ɠ# ~_GXwGe Km,u+fyl=ȗ v\ȒAȇ]aQ.NHu I`"l7p,;.ΩS=XzL h`S OvaqB'!Ar!ENe]b};CscJEYWy' )#bn, NBT>ꌝ+u颬;۩ՈGH})%ձ1J q Ż\k;v,9++E%,\eNdB=q(V&RH ~@D&E+-bExYA҂PF҃\V7@ЉEOу?:U?nEңɷ*t\$Ie'umf3 6>?>< }m}X^C7ݻO~ݺ[ރ⤝, ~/w8uQaY#NYȷZLHK4wު^N=a ua}$¨`mf&\ l,Φ'CKx.R^x@` lsOܑpX$֭a}:)D?;FX0p\b#|OE 𠄘euBY9t R.&M[`cz(/N'l$Nv|OF%tBTF Ϥih#&SwuWYt~o$2ĔuOGC\O2V,G=Ƴu|wQ;aDr\ Ԏ KqJ7>/zI,u Xtgl7/O/vG9<n9ǍʇOz'݊C|Q9p>ǏpQ9DzeISF[ь_40fe6';7\Fr>Ĝ~4N'`4/_itX z|D zN@K_YHHLJkwI!o78@yuuC<&^--\BB!;-qO?-ݟ"]y jV "u5 -B%|X } #a٠z˷Eɑ:-m,u~R&K]}g(Y6۵A.'qÔJr^Ey9Bp"#v_eD9I"K#uLtݲзIه eHmDz)-&,Iݻw;bd9wLX\8;Tp\`ZS|ɋ +3iuhC,<нp_̎YfBBܨh@?ߪx^|U1nWIE""BWE.)EKȲX@Vl@XpTyQkӶE \LLT)?[G ax9w΂XsU|PfeKHX=SJ{ 3OA!,Ye4KЄ6Y`śkE5η;kUw n j xKո8@D$Yu,:=M?=Me-Mi_~z4ZV ec l 9~cÿR7|06~\T].k'$$腛ɢsJ {8keӽ[iѧ#t, %$$`e u;\`kCvd,ۜgEJηx}aNDK|eY,uyYV=Ͼ](ԵkǦ!9?n?2qDݪosogZ-,!u%.mO$IV{=AylZ#Qd&Wz}.'-Z4K4˳l+nLV?!!aՠиX$w)^'瞨xu'$$kn{Ig[mE[jE#t[ ZH]$NRQhRܥ]>YڴiJN?k,zCDr>&5l9?zߒ wPl]&$$$$$$ FRwUcÔ-ΰ*[#u[Hܹ% 7HI.IN>:unk4VsFڵoi";_GcH߾}XY>P/GBBBBBBmH6甈ҭ0Ru$R$Iik'u,ᇛ'Olƍcm„ ҄pC2 078Ȫlzo}m[~Yeh@6I[ňrA!B$R$IiRI`Yc{mmV#p,KQqD2ń D$Xk'u*$KbIe'u[F\BBBBBB¯%IRd"heG!",IHHHHHHHH.I%-PBBBBBBBBB%E"uIT,qڷʴчyY~N؄ D$X2kh?OZ IBaP7i˄x\Ѥ2P IBjWCR!sAʖ9sfwMYfD6Lgۏ?~D̜SA~ϑyD=CaC8dY/L?]>M̆S:Ql/K$ޚ4il'NI&]XL8RK:I$I$KBcU iRHO$%S&6ŪwUԊ6?ѪnsUܜ.nZ [ɤ=/b;3"MK2!G 3E`A|)V/"}-z v LPR.HP'&%$$$$$$$$,0d%R:.Q*IJ!v`x9!(Jwdž"/<ꔵnX.mu׉>b\jc9ǎŏrf|YT&YI<ƕ%, lYmˬ ls;,XX wqf^ 7wp$ a"%ER)̭/%A< 7,L/ z?Ək#F|'䐺^:uËAV֪n͚5BV7}><OW%Ne՝A ABv ^ -̭7'69l\Z.N!3g88!!!!!!!"̑X~7J)Q {fArn5 $GF|A4&9\ γO?5;4‘KJ?ypVA9/r%\V"=E\k!B()MܔB'M`Gr]ώ9樸|QOwum1_;X^}XF/db26f̨_5 6le?hL?t:˒²$ѩL@ne-tH߬mvuɾ ;!He#/]w^DM7IE׽{W-^z72eR q'=Cy߿oq$_ߪ/e$jo$k5y 뇏ZnMMޭ [& Y9Zfd[8gffdՠ 0"㎉n:y;唓"(idGznra?RYX;֦MHKz"|ww}۞yn=nb~8_7-` evm u r?f-XHkH{e$ JҩRehĝ%"amְQixwTe!itYT6n5{uo\ۺ5c]`=n?xֺ5~:uhP˺j }ھ|??IEÚ֪A:4{n.tPk"u" "D@D& Q'I'K!tBn?N_RǒGt&u1$,t*O*MKfe":~qO%VZ<V8c#Ĭic~!C7\tQ7$ KCхutWM:n5h~$ i y$ y_aYT6YI<{kWA?i]?aݚֶMkZuu=ylx&6{ɀNmmHV/اm_6^5?,!!!!!!!bM8:\sqiBa9!$d+ 7\JBH/DYb9:,uG,A#i`c k+.yn9&iBRх RE8g$zp\' ˨0?7|Ӹl^2(AN 7g ) zYJp*',e˒D2Iyq޼Sqi`JZ7xz}uyv r5{ʺ5]@jZ{ǬcÇuFs'.KOX&Y. ^O?cm<`Xˣ̙3QnDaΜ92 \Ȇf{{/dUϕ/O:6\PXs#9fy?|. fbs|}?(oٴ]^?i|g %ϫS'[JOacٳKex-=|>N/At dPY<qw*!0PHdA&ؐ CA~MkԨAĐD|^ق2  V2垐<6$!wI!;s{Wno'e'|*oY}ٸp) T0JK - 8}^s#r},V7*ea@X߯Suv/+O aX I.O6+!usÄwﭕ% ㉙I;,sV:cYCXɃMߠAt8n4,ZOx9;n6qJ$?҅9  !"dF8|wzA8 ?Ōnlm6i6$ !g7E)ر#|o>ZX~.{tuV=dIQ9 #7UV6+M?1': fֵvo>jڼ|?֩q-{º6}Z;&u] [L:6H]-kq֣ۼ!}ؼO (CeTq|AV wWu I4yH z}oyu<ʦV\(o@IvfSj˶xx]#.n"[\{l~T^w7/pχ—t S!>Raf/sPk0@}K(P!0>=Xf7`{v:L" YYA"Bđk?,T3ӵI\n>lPB|-nß?WMQ?A(+aȏ,?Εz7qNVxǝ4qlYT6)/Kuԅux5? <`z̚7kOZF~~fO`Ǝ2s7y1zD^~S~d7~tWunX{?#=[ S=r e!ʪg=<5 zh& J* ùy7tSt{]b> 81>J)] Mh|.&Qõ($|| .'_ˆ_GQqu$o+M }>2]{}"g 7MGܕv6O;K}NެNF )?/&>^?&|i|'PͲn\޾xD/t ]', yP[vT8@칹v$|8c`a$uE=`n3@ɶyK]BQk\-u^jbW2R c!9" HKYBXpDD\DD?S ђ?sD2lܗQR&Bk@2p$s~=$ꍸM G^yٲTF)/RWdCY?ZFZoϚk߬gM^uk;ئl_nmctZۨAM2rGQa^ a' ng[uB/*CaBHO KS -PCE'~j({JCR_:/Q=IOlXtzx7Ҧ_}U;餓l^sxQHP^9AԆ C\QY L6ҋ7HC8p]r%oo7pM<9QY8<*s4,|xOT}Q4iR='79@Fn~'M1P>(i>rgv-NڦNW\/|~Q%萻Sw믿~$ [/ lݫZhKoGt W_N:Y&M~@F׊˧)uTvPw 6DZdz.p~'C;~֬Y3{c\'[ѥqN!GZd+V> G8'-E#J 7>*AXO"s,w rIXѯ2qĝpDХ;؄@4}"7}gw^<?\]vstH9q9n_wC =͆NBX/M%w Oy;\+-u?^PdP_lx՛_q|?e@v o,ʁ13,ʡ6mڴxTH8-Aု_ _6H(_d7/vDEBUн{2 _6.)A|>KX8WZ>}γ'+ޗ_~D_u>mcǏ+ʵI|1ЪePzH/۬de\$t"sAɥVed+*ԉTXd$"C8z]%$CH WK7M^ +&sN7(qTJQGC䉣"kᚴ~No+An_aYT6)R7nܸƉeַoxޫWoǏ_#7àoe#Y}ݷkYh?&mk.(C|dB$~GKȾmbv6OKk۬Vx"9WQQQ+D93֋kƶb x㤍4_u{ュjժ.ĥbN On#hC'NqC{k8Nkժ[*mM7/1ozXz֡C;C9G c]wwy'܃sb=(ߤy)D0E,o~a뭷)AT &#F㭷޲w9GC=暱^y|}ry<w_VZf%5jԈUVvAťs,zG% ,U/` b[nՋaO=T[9 =q]euYgׯ_ Gye>HW7ߌn yQ_ͱbmov>F|Gm.snwYt@~^alu5HСCYJ~92FFZkh>/Xڕ MڈX~O̿F/cJ=@ޙRzڊai_4q?)3u>|Fmc?H:8#su} '%G>d^^ҁ!X>Mx3??ڟx }[d7S@ܼa }Fe}=U=^|5k'k?eu1~I/{7"AhШM2>lQ\+/[n >,N8ncrP8񉱈dEL˖-c)+E4S/Rtc\>܉KMtÏwc;bs]GaRW[_hU:6gi%dmNV -oΗlRJ:#"3rp輐N/"ćp-+dǓ"a"]>qF~Z)B&(n\y ?)\*S><ᆟ.GG᯴7/]'9Mʃ}q;;{'N~q2dRȧ ecvZٸ2qC|?W&o\3Y$?vΨG>4ၩ|L w&_|q?IJ0YfpY$޽{x8 ~B9K[9ehB̈́ o!`,dy aAj& G@d<%-u .8.rOHP'&R$}4E|=<{xc|(ReHK)7e|AC&a:vhիW×\uK29䏸_}$LꙌo&oDFQI]Q~!oe~gڐsڞ4Eꄗ*Tx/iA!5I kɦ [ѹ뮻b} @D+IS 4mD@^(+#<裏Nrt9oi%h3(fmuC >2&[oy%,a(7/Uڂ {n]@\'|ͱ d%O[2$b}m,}QB[yj͛7QƑS]V2ۻ$|2_zB"[oZ'$OS$3E[nM-yL+;^:2/t(W-!usȄ n#ײp)niB9Gc Wp_H!Vɝ#EΥ#UN@Dp?nJOp٣M!V\S\KDlɑ*MDIo!/ysnV"AU<B7~qYۄ!-m ##Q̒)I`I94S L\V &^{ktc͂As]󐄴i 챴&L:Pۑ_MH , C?7g j@h:z&Lf^&W8α xwH`Z~HĨ7&CDwO$T0焃аIq<J?@!XD ҥKLW^yb@SGXpDy_@=AhԑT>' B~ʡ>M}v( upO,|oEx&i;C} XyAepΩKyz>G&/]@z-<.n Oj )&Rā\po]_z+wT:CHOe Ԟ^^^0ЏKݩS>ʬx!8 /ڋK"Y;wG^cyn] ?|@K }-uXqN-[͛sqG=>߸ G o*; Fmͦ%<Ԏ12@HաB~dıs.6aD9{V|^Lg <RaV)VƩVͅVm@?ӊk\ꎗd+T(Ż Z][$\LƾKYF8nJQ F8_c"H ukl7ʑ|I*&;Ek, XnAe{>x& j_2ǒI[hv[>YRȟLC>Ca k 1sE T")XV߳h%&= @8OX)KBκ{ŢJփ| S<_-,<)Kcf/$0yg@~TL G[!%x/}#8Xxc^"Gi/'"6-9C{5@Xa寺Y}Dި3- 菊 &-QЏ .hID/rT>SI?͘0*7_$Pj!,1'q3!2!d'Oy`u$?fx2ϮݻG7y!w`M6/kH맙3b<|rT/+^D T29%Q9K}=KcED$-vtcPm#x3gXLUR++rUV}kmݮ`vފq1g=noRm[K0'RHaSYde:=~3yb2ˮViAZ/ğ2] u-66ePz(0g)?DJPf,~RAL$;H2!0LY&PbbDʥo q#/+&Kt0Px@|i; :doKh_,Yb\$kUIщG}oh3YЃ BR9ꆺ'FIO9&k0^ K=wT qW= +u\[(/}RB:epGrKM K/4q#rQfy^P|Bԡo5>+t1#R2 lZ*?n(қPP iWO^76۩qy$:[biH&,gyn=Gt?=䋼B9hqp}ڗCK5?K%m OO? l Jgj]ZEy[H|g ;يK~n{v,ߥr+(;^m;dkYؗH]_"Ney0!y$B.+4[ԍBDȨmkI̓v6upkۨV.?j :HlYx->8.>I߿6kYQDK,>-b$aqLN:1;V[(-7|ݙ(b @,LiʪS] (=}Sp|''}b, Qj5DE\ƗECtM]z>#ۗB:HM !|k)d[)`9'B7pK]JK*u @Rp1jC!";M-K oli>+ЮC/a RX)z>+}",POAQ,],e K&XH"䏾#@Ôӓ#t=H6v:ס6I=M|VG[>[f-$<:sݏV6Q$:/H]hSڌt~I?}Ս曺he ?E "'  bR #GW@:VՆX[!_j}'AM8!ǍOc}.K?qaǍlHVe6V] t[2A7u;|?h<'W-&1\)D)Lv*F)& b|ÑAPZ AbiaF&P|CH\H>V8 'M>H~ﯱ{46`KJ{!K)n "bB wCH+e&Z9Ȇ:v[=҂$q(3~LߍRN!/_Y TuP8@Q_^Q䗶!`}_?6ң> X<9䅊ak3|zh7@e(~"mQˀg }Kj'V0!J| #Yr2ϳšSuNyNRg:`l0y?]|QNkGu< uw?|o+*pW=JH9qˢ-O/RWVov$@춿4%Uw<ȕy`aI./dHy:MP@44u!uStCIݘ@b2zH%HݷC:.A;LaaC $0!p1A"2g vضOy BX*{_'L1ĢY H1IdR?=y??6a k2]G>3$b|I2䙉Vư`[/}oEH!>,iz%}Ud$Pya"+q-ȏBC Q_l).M!C @Zeɣ&ې@\fɒ1/FTׇ&0%\Iܸ9feÇUg plx͖dџ >.P< Ϧ \:B@!}W߻*tgR=WM(Tl8هJ_wȷ$~>8_Z}&Q_P?yR\b ,d`t z տF:vRȆ뤭u6+ћͳRKXY";2%$+G "M F+ނ:GAR7~rʀ6v`37SC_?z%Y,<\cu@+*%,n1,Y6l -;oi}P^`I_?v ˍ"kA: oz&7;Z$AY KO+a|ĺ+[Uworm(V2t(>-8QJՍ~H_e[I]mϵ7 |OwsqC’H]_(NeԡG8j)m]~}3nye6nK1;FIwf Oj}ÒW?K^Tcׁl_ޘ,]h"2>̒NtM ~>h9]3x&݂'k3< "%B?pWs.?NYֺiCˋ79mrNJ6Jb.8t㻺U(]eя/)ԭ2)LT Y@5Iֽ4HO%ƨmؤ/zلc'ɱC. jkcF#:kU'SG౬_@ք峚 ~P7a %$$DGҜ0' #ulV ;`6J忡nD]--M[eR,$s,uM_@!hcv\*/f&fQioncdq°6[EkaP?~PAJ#kqY)䷼yY 񄄄_JIabHymd9t/f7|~:M& jaB6m8o\?C:&)Rעq͘v¢%<@d4"TqeBV;B]c~ T"HH( 5*9R,$RO$b& !hٸ~m' mT&6unۈ [>C[}ۻZ7y2]١>B~ N{l Jz"HH( zq*1c/J'B!e7ìWWlh692׫}] r^ džY7ؠ퓮oڂ?'4t`Obyɠ ٣ΗR ]"&$, EmPD*& I*i aM}×{Y熵Sǭ{ZdžOXj.iujTeS:֡f1I&/Mׁʾ"(ku~!gk3!!"<tR,$:qbk?۷o>}'|\t"_|:-KHHHHHHH2JabNM6- [AJھ>!!!!!!!B % ٷN׳g t3gVt1xf?|Νm}75ŏxys;c9 sD Gzmԉ׻8IHRdu'uK#e/GJHHHHHHH4X I]Ѷ'H Į2:k*3dɑ<7O hAǏ~?ܹ˝x)}&)?L#qɃ" I*TKyl!+*Yʟb_KQHW$%Y6ϊ68Īlrbo}n3VNR'k $f* n$ ExDPw!GpCH$!qDHSy?G^_,$2mwqW/ϕ J,uknzU4IUjK/ p_ rEX?DDd1ޤIrMwHQytpC_.X;n'd!I,u-[6V7C~V%m LHHHHHHHP?f\+PImYI;ԓSNN:!ibgyz<3NO>1O< X#*Uְ~>4#̑Gʲ >4ƃA b"2A=]G쫯ȓIȝHXOB#?N6CDjuƊ_"n oX~ձ"w%$3 "wG駟j'x|_!S&1d7mGկU^ժU+>}> c$s7!}fZfM ," I*̚==Z 7˒_ ~mIHHHH(Y2Hd5C;Gxzpu:kY׮;C;oeY#ZDޤWkBC.BW!&.n/DT֤IЖ?ڄ &MDZ,8qrI!IT)ԧ$IR1=2ZDo/?eYo#G縑&:_~Ea>q;Fvmcc>nG&#x ㏍K< $Hf`-Z4oefKHHHH('d--Bi/$$R,hSrԱ2Zu:.LnW":ap'GYCGUlrAx}gVju!|'ְ!C_ʵ <0O(_x9m]_oذ!ֱc{EGqƄo>( aFؗ_ ゚7o޼  G zBBBBBBBBC +@N۞HݹYNۜύxqE%uXdaq5Rk%%q#.V0ߧzJabHe&ufͲ!Cy3-Z$s͌[$ Ή)S'D28yx";H %xhx#umϲ.KrƑ%:<2GXµI-B!q1cgՙ3Yws2e+r3ɽ`1+`vِ\:%$$$$$$T@)̼H~gEgնun+`#/# Lx1_K)(rTXpC8)LT lN?~Ǧǥ9f˯Z:uYZnݺO3<ܞz / 7ӆb͋_|fF} ;wn<&$$$$$$$T8R77UYo_VVYV͙񛺢o. $.=jFbpdbpq?nnSc GdVІѪp) E}e13ζڻ[uHV7{Rw`8dU=؊?܊7UxVm zɦ)E5Jd ;B.;\H "%I˥v]2nŁ{f|x׻b7vvMv miw~λo0O]rUK{ .Aw1>%lvv8իW-,?|y8l ׿?x}<nq558 "5_}v7k= <1{=J @3ό=JYȣ JpNln:^‰ɇS|y/ao>!uǏ/qYt<*@$בQh\qljn@dIy8ޜȎя=V&N`ѳs?yB&i6sƱmvֱs>~m|R~=C83IMJg͞koSz}'_Ήd +:׳?-JDo,uu*aU~{U8щViVYVm qت#rE5lwU: OH]$@*;k٥Mf3`u?)O?j{nq]vۣwkZMTԱ?9뮋m 7c9&6(.kiCs e]f[lm6->i<ӬJ*al[#g >ckwqm %wlvyjf͚w{a믿z駟%u֊:Hc7;w?@.zm6{7ӟb'7#dMo"Ñ:~cSN9F~wygzvF^{I9'NK/%$$$l0J2t`Xg#9_ѣGGة̟ <8Hd?S6rd:GOoe f-[Oy[}|V2*ІO=TMg;@ Y>}g<uԉm3~ʇ}G};ocɓrz oK!uXHݺY[9rᱹyr-@"C+D$Y줮EV7seMw} j_{{ѱc'Y϶[.^)࿧ڼ oxA`dƍR<4 W^yp \|_׻wx&uY@2ƌc.]s~X:s [n%ȓ¨dzWQFEˤ ѻc~ BDK.Q=\,,=;+c}O6 }7< #u?ߢPgsO ?bZDiaFkԨkGYjBBBʁ^891R7b741V۩ZO>Pg_~3]gIq&؏ӧ忙8'}ze7}2 S ]^aiT[}ڭG'bx0@ƍ͛E <(ܞW7.˥oL2>i$!~+C٤hCT;<\n>Jd#KqIf6@d .-LIe'u;~# wu}8Y 'omkk?^3oSbAApu.p ^qPAbXM8F$<K5>xNx=eݺ#Qۨ2|-^}xMgdxX?zH 4(\,dEZjZf3,J92oPڵkL~62fUV1?|cO>U'>AHrXM":7vL/| %YpỺb,w?rwt w[MO[-wX㥑i f"uI,TzRץsxxyDt[8aW ε?}6'w gZ#s|`#Q"GϯhxNp`iǢ"u]7b5'#]tQ\stac&K)y7o9*,K"i$B )MRG8cjl=*#6'鱌0,ԕ/+]w3dM*Jy%ЇMHHHXQ`|8.hb \ɸȑ0=y6mdZlm|0\K䅥^uQ[,^=nXZm".i*v2~\P?u~h#}S|?0iby޳SujGyK puyӻK:ZAn#:uC;Ҋ~{mtmrBޮx[~IJ%R$/Nux;\M{z˳lΰ;; 1-Mkzۏ~o d^`9Ԑzi*knIl Ơ7`|[(m۶O֪TٍRx XjՒE@qci%$+&/ؽS7²Kv m9[~ T=&r_d ]4 ,Di,_}w$}]^xa;Fbtt<7tS$O?tWz +{o,m/ dJz}Y7hАhAt i&Ku>`gãEG}~\槍R$X c ڏ:{lgciB!u.:PG[x;ޏo>HL$Dw6u ^lׯ_=I6I>Y##';y[6NHHH%`XsXnLj/†eo۴ H,ɄidRuf3*6G!M69S]ҭk$|H/~χP?L1.rU-oikРA|gzj4~o u~yU;1򱚏Grokס=#[*,y^x I /i·i|qsa-B7dqЫ~#.E ݡPhq JۏZܝO q<@,U]Z85m^r`c'O?.E߰sKqYjG?/@y J uĎTIrR:B'u~&!h̹y%Bwt?`>:d5.@;e*ڵ D#$k;xG,<MzKXVu06Hc2x !nzpIaqf4qVp8?'}i?m~)T7~k-/-oDl8oYeZSamdכֿ 3-klLqDڞ{{&鿁+UX$V;HW'u..!NZwlY1;@z\~>@$zIkҫo?Vb#]/9(N6cKiG`zKJ8Z'F:ꐕW<鰁xnrv0Pn 3C\XY>)6l Xgaq?bv&3a_Zxz,xd6y%:Wuӥ}8N\\K ԵjS?.Z0_HY,p^:-Bg{o tvIK' ,u3gNW`ֹZb!COAƃ3:-~z`cwO#~ǃH >Gc7 a7MbırnP]&#n_nC!f n ^Xܸ}cw<-c|*Z:(+^p Fx++&r:{uyx'μystO:Y&t}=qO)){M<20%<•8;.#cIC8e.O<1WO[xpYu:U:6NN{P#[6ĝ)G p8:-!qXږF&$.[V)B QCrmD r?D+lArҲ?+ MJ"5CLC'ݓ+%Iu '֭'GZp8#?Qb\|A{jq;裏TN8Nî %P##S/Aps}٧e睛Dwf;s=SA*!#>0aA<ԓsx.ģ ͬpFml&a2qOz}pYuRh.vcMp̘o%ɷ~-?0F~{N0NƎa)2V{8q'Of,gMi?p8$uH ( dcR„/{GID Kpyq쑧&r qRqktyro+<򐒲F]z5Q9b09Cs8/UĖ{I~P3n4hPO4n܏rٿ6@7p]"O=jMʈe3)6pY5RȤ(;֟cqCXJ=% ͜Sp8H 0:[Aaw}F?qx8;q a&G̟<^|%NL&!Yyч^ӧ%K?sd!}~V~3g[5owԨRTTGF$O?);찝ơ~IVW_}N;E]wm.wy>JK!]vg U'@eŕ ]ʒv]K,!='xp8ή,;ꆵԡC;%`\?\9眳wJh>Cni&1Xa⊬:J^OA7xA!!S7|SB_R}33O)ЙHiƏs}d2EvxIUI˪B&unc~gI0]5U=q8KB: D`,A yĹ r`C?D+S(N@p{ac{z5Y"Q:u$!}'%z7r*:5ot%%EҮ]B x:"RNY{Pui{BHk".Nf̜bp8(p,Si v{HQ]n@nLR>9 nH { ocy$e8݅!e?jA"(NqjeY$exIի{ mߊk7,a|>HicO ٹgJ(Zy(La"ME &.FAAy3p8Q( 4j.k-M.F{K݆ARɗ]tRӽ{W9)ի#?U=# d"GR(Z<=zt \E ,IKH&~Fɞ7Wt8VJT[ԕ4X z[q hy4sM6R]tY2}Ɣ;?p8p[8Go/uJw:vkH]@DR1a@88+@ 1X ,T<;DqC a$RqPI'/G1Xd8Ãq " I\uRˏztvi/S!KUWA-6\h:;o>SH3bK%Ɋ"K˚">ֹ䣰\HZ~w v]3Id K AsXXz ,nX< 1rdɬZ QTA{%u/O*@ұ];hd SC~41e[6%~1cO2vm=xZYy!o>C}:e欟ޓӧq2~D÷׸,?>ťVˏceq7h@vWK]QY 5AjBr *|,u}v<~bpϷc6r8H9SF@ d;BX6G'Ёx7!:Hq0 V?/+ q,\q'lᲊd4iٲ)S*~3R8pNdM$" RWɞRARdde=\K @ EfiMܐ#ădB\RIE瞰YXId/yOip8X) n@နpmop_i1eZ 5#A<FZv-K=a\!t3(R<V,^Y#nVVigbݦtr%-ag U'Np8U!uM ҍa[@k˚I&.."k:c)𙎛v}Vs8XK -pсt"AQ}by[`%pdnĮ:qR►Q^^B 9kT: wM+F\W5:qRR\YY D:^6Hw8?yQ&EQR/xc*,s)4_sDI*U"6gD0 ;pf,J(u6uy[0၁حi+jCl寜Թj)RG]E@uB_p8#_RWR`'y"KM vvZ pjsRʥH]uD,[r+{Nvb Yt>Yy:p~${J$4IIGKGI驕UeI!Yb^oJF.AȐ!dz{qCpO&O99p8kte uuj&Emu]݆n j^AKQih:U&BwaF-T뛹.,+y5G?1|p?~̟??;pS@f=unոƻJIn}zRRWIRw;\ \i BeɚNYu#u!zX̙# ϕ@H>de ,W_}! A}DZA+ee˾<wq5a`\7s\y6YyY˃tKk匟)*Xyn_7t\Ν[qW7qa q=T& y .+Xn?eRT7 nށk}qc*u7>^J6?UJ wgt9&3&G(i쥉\,N\\Cy fO< ><#Ѓ?{[<#aCµLoQF,3EHkJ*V&([vVtY-Y\kJ-m 0@7nqyX}qq/6VEDzeLXҿWwQiGt}'q>ĺ #N[HחaaqX{\H{kW K&u i OlpmrbB8bAC&)i[rWUԹ,:ݧZqO?ɴidi2eD2eL0.MS'*v S#ɤIrՉx@JV{vYڂ4'oe$.^&/Yv8۵~b=1a~kLpnrjCbu)2Z[ZkZzhs$dadRXSb+)Dxt*u;"“%k$%B i":@XN9h ޽tQzt*ݺvPS.!ZT°2{.H:wLsC;oפ蔭Cw5I'Ԙ4tH/nx_lH~ g?:Ufñ7k~̚5K-k7ka%$ KS[@y|i Y6q< Yjű4RWA'MQh))RwGU;>ypbi@4IrH=FNǘ]AWoQk߲] ,Wʹ&ׯOZq@^˜<اMX-L2b3b~c״tc8. ʰ*XouչՄ̥U% kD?+B2MQaz`JfIgH;%kֺ[Y8sqY)tR׳w7[Y({={J׮]{.*=zt.]:I]cdҤ JHcWS]iKFdmPfڲ6wyaoMM_kOY'G9uY D$~orIX`3go|Q˼È?kl"qTD`WtXoH]bWqױrxӤxu],LdC#r8sqY)tRץga h>RfQoBiʒLq_RFIVM C_YGƎX+h^-n(S~yr}Ï>"=p<ұgUFiLci^z>ڵ}ţI6r{GF*N@_&NWRw8oE@b'aÆ0Oq- qU@č{oW 5%u9?T_JծjSEAnt5>X44pY1&.F u%s C/=Mnxs_w\}墳n8QX3YaPK:V:ҩSG6mjI ĿuLYm:8^zn=^5D\'8͘1cnݺUH]\x!Nos,5Noyso~qO^Mr`I!NgJOYq m _)I'l!uSNU=ʆjq1iG6 Ӹ[n%:N]:}o*7'v !O?lX Q-˯&u#,|s.j4wk$ՈuvZ6K:*g6/ճE*~ ?[j ZVHt.YO7x 5$Pʸ=w>g,#xt 1LoN7eHr&Kڷo_q'rM7[l!7vA~ܠިQ#}ӷK&MtF_}y҈Ϭ-SL޿Ϫ2 zF @sl馲f_:¹z' em2tI_w}q/,͚5S7eZgumrg .7\Oh\ڈ&[of4|JvuW]NwjN?ϲ6ˇ;N _O> AœXA]w]cɰ߫DRGGn]?P>@@:u`^{Msi߱| o7#X9iD% 7``MkO>V띑 ,xwj;>#A~a3PmcOK#sF䞀ec~^ e띷!w,=T1F^;ɚ0ib=ڶ |qmhGth!^F@{|@ :f{ʤ)eIJ%fqX}R Qo"JԽ;ҷ?-#V5H4X0)xYk3KݍN r!}vJvuvRǒM6\V:k۽ dQzHc JN>#u#ɿ"ݟiжNl@edb~>-+D:d{,MV:wnDh{Nzk s KCraurx^>иF TF{ֶ+}e%xFrEՅAvc鰾2^@쳧tY,Aq*l}/{|7`@a5cy㝷g >x0bc"#4RA!BX˰bŠOML He{7+bmg;sBvNʻ}|;;yTK\93=H:S^=fI++X[i:wh^aiѫXʧ*H+Ht0%M \@8t3h +,u|I]>K6pY5aPjq,tȬ¬>L'Oʻ!9sk2ceKGȼ ɿYڴiGM'L@3)Rx[A&Gf)Ĥ mDX[n%}IAk}o R4a4CH+/WK'ApXL{B@-=RI6rGe=vW|P {'XȞ@wXb*&֬m>&E|H,XU͟DQςC"y>3oײQ`vW\qSOi: `5Ɲwީcw $ ?wk}ĉ}=⮢ -:o8(~ܣ;LU3 d}Zx!}Fͫ/?Z:kW:R[ ua:pC젔V> $ezێ=u饗^20)f@77DΖkǏHyHֿ%t[aM/c@a2O>,jdDKǡv&7mO+gRdVD!:"òe),#/Ӗi n,^ℵ,u1; ?4XۘoJATϚZ=ԝvGϚ}t52X aF)Cd }E~ģxnmm95T,--uzcU#=Ymp8"T xURO%u,{p^KdSK"DWb KCJқtUAI_ uM;~S *aVM{Qg)X#>ACЋO?%IT$iq > {c}>$n ԅ%kSɖ˜A1߱b~ vsRϒM6\V:;W $)͟]Ƌ49"'˜yDfa #T?nvIC5GrEa,9rtY_&*a ^Ĥ77urB?#%s um:; А~S[a{8]Rgvɗ^y9g,vc":q$d "E̜5G'*ҋ!eA)hg~ ,2@ C^XId4Y&j$L,-쓿\~h?%vEuc_{HR)RiR VRa)q^{͝;;?ǞoZ׫#!'G.Y1WuzHs衿.DﷇIN7rP:aJ">+aV c'ʀL2IZ,deHMH]ܱǰYm!n Bm۷ Ybb̆r&{VbbU{7HbHʎۇ*IZcC9X|C| )ArXlBdcYG&ڐ:&d $/}o%6K!6 &{0H#ϒ:ʇeXeh_g858ìsH:H !%{ `)$/kcճB >S4&#> k%'RRow| :5 B:OFڍs5ƧCexR_E8ugF{7HY a==8pNA:2Zkg,C L(XvdydtP"{ߛ6a"Yx H@ </yk_^l4nږm{9qXI چt/}Y =@}d4br}巤'O-(s>n/ȓͶqgI]l ,ޑJ6m3ջH"#3"=4Yz jLcqc{&L6q~?mJ6d0!LZ0CF&EEu믿IL3RXzY%DeH~tjm)nt~Xes"}+N~L~C0WRjfCW, ip[8%t¸Rtg ?(3,OpNǍA^q;t g@J˙_FVC'?Wj7Xܛ;[[ޮĵ@? co64FqEb޸\V iX\t-=-MNbM/c~GLp']4<Ր.Ok:@N )4 fzH57#wֳ3,^;[ {qKoq,K%.!tdp o:ֈ^ӿm8}܏ñ.Xq+⾞mi־Y0+ݶ nq{Fڕg?7巼X-;UO4}ĩo%[ԟvbwmrnv[mΖN2]pyj'*qĝpqrI'==WHq!dCi Q4qʕW^FN=d/Ygg?lBrsC]Ș1j0>fm"7p>\-[:4;D 9/Jf;8ߵ Yd U#5Y~iPz"թ6Xԥ-L,r7g̟ż6xnmy[V_)P4a[X> [7?W X֙@G:0He!A'nD2Tx<*_<9?lYJe#+i3FF,Nܦ˝ Mt=M\t]-`L?rYVgñdYeS~~φwI7]'}hV[WW_:{qF~Q'$K?po,d[@iqdRs!R1R]SVXAp cI,A:%nCL7Hz~qTq5駟"IĽ:Z urSN9Iswׯ _nOuL?Sw9g+4h'td~嗣k 7\_IYX#gZN"q[eK6pY5RKu.^m)nNoԨQjƞ>?W97n>[ݸY^:XԱJx '辦M745驕:ݖă]oyyeՅ+XG[atꞑ-LY:)!.ncuÍe0]㲦8~֖<32ⷴgp8 ~ӿo.~q?A~1 Q]XmG\t[' i/4n3Ao8PF+oʶݺ$ <ĮhAB\Ab p,߫E + :#u &tAґ?zÍ b^?ƍ5{@wD8LL{+ICc%+))RJ8${C9X_n22ܧ+QH|ġ,Xʖlj&:CGm!n];JdJgI4d͗E啝-~֙;t闼pYĤ&ÔR8!.3i#]@X_&Mt ;xvoW+i- r-FNO5nG$a,}\.`@sDiuaa\M?nt2M'}?<@oZwV$* u7~#uAd ;?~v)ƲE7& tt#F~}^z.$>ċx5ک7q@+i<8 ~{pckذ IӦ;(1k׮AXIkO?T暫4#_E:U/deȲ|!n[poeG`AB萸zSok1pT}Vb@i|<g qZӍ_Rkf" Yq@\,'aq-IuJljx'2amcI\sz61eYReA_KDž[- 1!Xeqtv857{4o1}.˫J~|[OFp=/CK:wyOi؟:Ͻ]cg` {f L+X/+6]ݵIWC @/T2K7pg$2d+y@̊wwJ6xCym "֩SG`B3=,aҥ9R #OC^XHo8zvۭw}[80%O>xFL,deHvZ+[,/Vxqg~@dI#+u:8~րbǵ,M< AVi,ib8䋤sg[V/ji q i,`lȪH盆頞Vt~7I.s[z/#b=Kzf8q'p8$ukH[HۺU8ЭXõVYJI!AzXZUeX }0:79Dv/v|o_=0]]4LU-<?P:tZ uX!нC Gnjm63e@o&|MuI&q^U=$CSՂH]Z٫ljH]Wҭ[jR6,c7u-Bp8GaE-u RW49$9r]҅0M{w^}0T7K}6۾&p8 Э #ͺG8JIpct)mV@zH,AtAn@!%#L1#^L,.'Ӂ?n,<ć=$le .z2@Č)Vқ7Gʍ>˳zYh:)$RSaCz1iPp8Q/B:Hc%K1irmzrY{?:;ph3 R_L1bf &0,dGt&/Zf54?ľeg;]%Q+kF3cVْM6\V8K c5+^ o,XrqqqqYp8]~Y CpX!(i/tӓeRI_+ [{dAj H|ˈ.BzL3e~HHge/^it`&acqV&NҚN`Q_qRdZ1s:5ղAxOO.ƍ'u„ 2qD.IƏզ.S,,o_o\\VL=Ti*K.cKNV2*5p8eEtdݥJQ=x}KJR]WRoSe/?i|]Ro q,%{$%19pשAsV,qRM6\V8s8" 9cMEeNH[H;_rHJݵp]) i㥲n7ɺM3Wʾ= Ż\*%q\ԲnI]J6pY5p8Qe?Jq=hmN D ߠ;T8AJw4 ڿ]}~] iK=/HNKWJ.Wɖ:9{&.F9p8"N{Xlzdi5h7Jɾq)i{s;]-ͮRBWok>4Ż^[B!jsnI6YpYI]VK?>|Z<[jg VVV xqp8yEe2o,ӰY sH͎/TV^WK=%rX. rZJv\Jw"H]p8J2g'uMɂK~H!Zz͛7%z'b.⯩p8c G̕RRIh糤nWIAv$!NRɂK~/DV}Y]H_:}>p80sõVHΗF{^, v Y pM/ ׋+RvRM\C eoa{{./_ s5 ys/Z[\K/}p8EJJ<.  Dn˥hsh3}"X_XDdB&u/2rp6l=R 'C Ս:tpN;% Җc|Hor}xzq8/ ԕl}Z uA0oɒ̦!bRsRM\C Աr̙Iᆜq9W,Wk,1cU:p8EaÉd3xKQ;_J]XiR)e-l~ERn%:s;wvŸ8YM~\@:tqM'ֹ L!N#C[[e{8bq]]8#Ne5}\ӕ.gzЊAaY>Vq^F::Ֆgum{>o= v~%[8,@7/Hqoi_qrWWΕʚn 2<0&<{,!cⶊ=@\Q^%V+kI +Atp MXpC##.B,0) 7eJdDK~5%uiGz򶴐8"n8/(:ԥZVAȐ!CdjB7bDp.0,zqGo_Y\0>П vo ȱz⚮k<Hwij@Ni'|R~iiٲq o=?VW̍8itפ?J+#.>W^y§r<ҥcWsm ^Cܯom!.oNՀV[ɤFpXB +-i473gV D8n,(cC+[&qzҲ e>|N\]ٰ~ׁbV8@[>#a~?16.=wԡN[^MJK! 3ʅK'oZLHY~a@Hg3(:3=0'|Abc;T BLJ٠{MO~qA<7n7`nmˇV8 튿FPtXeY*nva6l0>UwVVǹ[u%zr#p8}֢nݺ~.` \=Ѓ ɳk_K yX~qx_P\6[ W7Znu%XgV4. s慱YNqOm }6vǀY^rvTHcm+p1L(@RgDsQG(y!'p;ܐ7 yR;B&2W&\qoZnOrAoc*oZ,#E96~Nt-" .#N:w_|!շtT?uR7`1ޠ).]:ԟ&;%nN )@p! :cjXBto.mOޯ4o\I!o񆆕hK\Q^S+-@7L[R\\ρ7、pތnW]uUN7 / կr~6.rrxvaDgܸqDN\|A:sv857+0 S1o7o~co7+ ?|i y䉧7zS`KB5?Oz-ߥ}O>xsZRr#'+aXC3I|=?mKDpLl^йsgt9)ci VWo mT+H]$/!wunWRx{#d!߈122fq7Y C +;O-Zkbpꩧ/\\tw }ꫯdwWBx\~-@=|ƌ,jE Fl%mdhc=VmCL?YgnDn6S9#wiXcr^j{:J_d߿Yݾ[yǫqhѺ?MS} 4P n[ 郠K奔--$i>ZL9!| ]+O^}iq>#y9q$ytK52̯0q˞V3<>X\s9 KdQy|c̷ɬuΐ &hvQۗng)7<tKy"띷e!z(oN|/KH$!t-!vKF d "RJ,p ±~PAž:,vDJE@FHd zjٻkd7e[or=ҴҨQr0ao~ki|'%xrT$%I]XxؿܞÆk%+o~n,@oSEu1A  eB8ZoZ N^oҤ`كxAc?A Hs=ra`eA- g G$A2@L^ =cno'0Ȝm=H~U$oc!׼qXźvnk[5ir@ hMIna3PV)iz)}ƴ¸qR]X9B;~?%s `} msJ.տJq9?{dFLcϤEOM~Xأa2CX=/ڰq%EƧeu2Cr!vm iY;W_L,|Ҕɚw}WI;uO#g,\twɘO!q q^~2pDW< s| ucs繒Ss˟2+*[yhso~{.1lp8 ߷ݧeN0֟ f4&8 #/H!AXLҹkì_~.+R&V%BB۶o{u|,-Dz:;Qg#dp^Y}x!h9{-H1ǟ|BC<!ܰ]!_`c +J{1%|r!&MT}Xuha#˫nS Ա͈ k %SO=9C D 80di:1gCZ ܬ c0x@ӧ M;TSO=!oƃ&eqg)tR׮CС%X<`j/$&ia'(V-XiWɿ{Jpd Ki3AlneLْDPX _mO߀?eErܑ`}X4!3ʗ'=mAb,`<5+;oA:(m;+@Y 5ĕx_!?M'=>߂edB0Bgg|H=̏!l!Fjc@V9qr"@LjdQp)tRצ]йU3.U}:x6p7oߞǷ1h2)NbU P.~!wL,-')Cd!aeg2)X ,$dčtľ5⚿IdU 1! REk]y0Rxc?z9.F*<2S'ޜ3=Z8 "hҞ5-9<ivV8/Ñ_6bd`6K ,carTunبgƲ{_O 1#GX~ٲu~:ǝwߕ[vHq18x V7,fU30A^!YVwɠMZ9<þݛgr?ĂaJKyvv z7K$ B!P ԱԊ(K/A >CX=$ RhQz诔ؑ$ "%W#aG>V8Z{cIez%je׏MänW^Ҳ@.Y~Ʉ;oe -񲈂KH[,Yž 0P'ξU?mGl `j])(B Q1 %],ҳ ^.0/B>l \r›^!0PeG9m Ƞe *yJ\IE|tK$ma.[lu 䆍유)5Ha;S<#@CG۞w}N 'a,sk1LYK/}E)i#o״iS-7o mpwj,}>t7ԍbKoy##?nvA  g,ѫNc:;xܽY31Tx0%{Ӧ][=w{ 27nxYGRF~PgHӾc=utVdL[ݠ }ugWbmd?uN^NI,.ssPVDxXiRN{POR?H`!b`:b@Zvi'ți@>îf?%0X\,OOLZ! nJhLòKQ<0w( !eu衇斡2m);mg@ #:G Ic/) oq!{Eh/ȤIul~|?YzˉrRmft.^0XYmp86C ,@XB cE mh|8 xqa a;#Gҽc$ӈ"/N/Cf,o^azG:+/+Jd뺺AB돭XD!HË_8Eݭ!ar} ֞X>!Yw{ګԕKF B|F`2q)$27 Zn?i=,A=Z d) ]^^9#Y:~ H񳥚FI4RƒI7{zɍ7,$o& A*_~t C-D x77BE\G Եj"thɩt|nBKl#nlX۷o8x6nbt|JYc?0AXnoӺ׸lOWWD-]&7.c6wVɦzZt9M%<q= ~{FvÑ7~&/0IO(Cվ/|\I>No{ _F@̲0! o2? 7YV} hbkm=3vLG_6@"#q9cuj8[ _UH]@,\7>H^ΆPr5kb @ qdA?#a=8ďI: 3?}~#u|R t~lK(*\6!˒Xy1g˲PV-H Br`qe¡)8)a|f "L19D*G\h#2R?il#ˣ;?6" .#5Yg`'t~+Rשs{;,6g Uv:,FxXa/^/~5QM}8چ Qx~Y{A 8Ff C EF@Ytr% 7P1yDK-0CpS&tY# H$Bm 鹒gQpYUСDݫrR[kݦEKˆbш[abppt~;@z(PQ`}bNO0>1cO:"1YpA3rDϸsn"i\k6+@R!!#zF(yJ\jK'=D \ 1?ğ{fÏrNG0a\\qHO~FQ4YD%dUYV7#u?k# x8;/|!o)UI&HϞbN[sQ=A2M֪[L:p}Yc4'(Ĥ.E]$uHnHd!Ɉ0Hď B#K'stț&~1G\хXZXӋFZoiYD%I݀kiˏUOs3Fڶk)m~ZKmԟ=tZ}*ڵQw=%ٓĮ0ߒ 6!7ߑ;s8 8j?`.QI]]\,LJlny2k6f%eM'u6NX*9qD=~cP\[tzyFp8#M@NϓgK$bĮy u/Hk~e@*H[qkT$%Z iJK칉I˚.NxȞV6p=W^Hb15{p8Q۰PVGԩ.:RWK u.ֺkޮU+Հ!1ˑI$K]\T)嗫~p8UI]K, .2!u:%uD.&v :,uBuUAwDeMB'u+ZG,}X'xn...)cI-bm{ )B)jzN uKqR@좥Fvdk*RFrP R K6\ԹnŐf&p8RRo/$|)ݱb/Ra%AݮݯץK:uw i-E;dD8Dxˠ`K[tS|/Np81 tAJ7?2!u;&GJvH\i s+J) (qSGU)׍ǥJ:Żrd@cZm&~gx.u͒aY:p,uM[A.̑:]%F%2H:I{HyNCEE,ߌIݜ&..k8[9˕#....U|.&uvx:tY^:;%/{ѫ#wYRA겉]@Lԙ(: 䮙A37LvK5\fI>=4i~mܸ 2yd?~su^&LZ%L$YmR$rq2aXTRg$ozn%WSrLJsT>;,yw^EOer:uֱnpA)[Rw8,eM fKvmm"%3.mc8V/Kp.%˃,=..J/J {v8Sm{o}xN y,EELeRR̝&a9s+&->p8Ñ,mwl}lsZw2d ߿ :8 ÇjA?I&>`.ˊp8Ñ?pR=ٯd\ҹ,sY$KgȚNCxay͝73Ey/f&~ɡ*e^>/!|ZeYp8NP'5,"Y:Et.d,)TK-V)!g t)9/8!yQ g_)} ZUp8jdOk.Y:Et.d\Y8R.FLf̘!C L] sgϔsg _&\usʂ>{7O`b6}|W2b0p8ÑpR=ٯd\ҹ,sY$KgH!:&u{T†@dO[ɒJG1칃BhGHݤI4>XÚp8GI]Jd撥sY$KHe,#JB>W[K%@a2`>| 2L!Ch/RvUwh%۴ޟwWK_^=rYp8|L2e.JϜ9}1`=:ua3fLS8vOiӦj^C?ş>'ɕ8YeD|V%Kޚ ఎP'WG ~]tRFz2t[>  +`&.=r ǒq;M4XkYA8Yb=SFz,qaI|KtK+\8/瑮㙿ay?p85?\'- }&D|RJtߖ>X4;O|:3J1#˞a{咺43rZR` d "=$J qhX##Fp~H G?apO|&vO$~M|gD+FB)S>Kޚ _`v(?4E:#F6[(R褮gnm1a:tx fdȠ2x  AIdX8z(oMV,݄^c0?}v~k # ||c _ñx/2o|7Bg6ُB`}u1q0Kge+}\hiLǬY b=A>yN~ &$?f׫R\f?zF&Om"岲wqR-t!`^Bሑ¸3o9J#~ ?Ǐae |jH.VˋKsm駟n7 ʕ9GM@_a{'_|N o(~U'aǐ_;О>X<{z-/>3W :t~.ɳ]դW[hך;>AX:22ýY,2̚/$Dȡ%oY%ɓvH7 e0I:#Hm [gHJQ&h^ tnfbp^vIJK4 | jq; 412.M sZ7:om ~vom_1gqmyȯ*3x@np85Z/'qc՝^AC>O>/$4 #N ڵ -ZTeDM:uI*g=gϞ;o6qq̐GĽzHRkI(#Y\-M,:w)VC}]妛K !6fC,oiX6/~~!ڒ"he%C9XqZd뭩XPGQ#(9w)tRYCL:;nx# 5nРAj5jj:ܟ|-g s,+_B^6`yOɔ)S4O?$wf_򗜞N:I-E>ޤIw\cƌ:uzIe=^;&is9G6xci֬\y6qD9cW3$wl6[ȵ^[4lPZ~cǎ6 eח]wU%&MҸ .@6h#z[nQebƍ}rjLO+{Y;ҐB>zX~Ԁ!|AyګҭG3^~H}yTo)?M&H֭O[h<Çɫ&{r=>͝@Z|Jziy'GjAF W/{׭_~K1G% W1y;[o2Z"L o/ݺu :Ԥp@Ε.Hk/߿o];Nۊ![h+$(@/miR&O.mN>2o{LY3X?)R?_wҔJ&NPpE{ ocǏS2d%}LG)ϽɹD œ'<3SG|CZmd/.@?4s.%L sY&5bvNI a"saȵ^~kJN8ԯ_*-Z|~Iٓ Q'r`%-YT}TrIZFyCrI~YH.!uth#G&ߦSa. Q?cM0ߗ!B0uT)..=zT~ K(# 8 #+eK.QIO׿Jh b=)d ?,M?֬2zhMGɠ.ȧ@VZ]".M?/m~/>|Q,cCG:tx^ cqn&%1>S=Z6tz7Qْ#'vcy@e}07} Ï>"|kA.N}>W M#-X8lߜysW! B y,ӕZ}?M!<̛@lIUS]UX ov$md,J!F8@^zeu8AA,F{3cW:ȃ#\!PvPt Jp F֖$X=jn<6Bqڷo ?UII%K:ͻ^%Xg/`2:Ǐ?~lZZ-+zlҶmkk=du:ZA[~I~XI7xSSiܸ},#ѭRF:n:]VlvW^yEa?B^?;rtj[X Ҏv)--va)e/u]G6xC鲈R>IvZ: ktٞ:,u坞wYkqX& 7n7 oAf/~{#V0:i,T-[XrȒG@֭[E^}AӖ4.M?wIJFAA"l闦uQҋuecDҥɗzR?a豶+H0QZ ֶby 0,#}\6#vñ'1!\ߎNXF_Z%rV&:&,dxm{^z 6Ty@Ï?0? wˆ@8}:[jX)w:a.'9*a՞@%%/2&υ%<43rbK/<*Q:$1b=+D  r%  X )X\_,)ǎMޢ2Hu1Sqq]%]ϷOQ֭#W^yt1LC@D=?P%u.d~Q^.Gȗ_VRGC?e9RG;%^z.oZ.Jg[o}DQ/ \bwm^%&L6!uK}u~ev+wZwH0 oډv|(%дYQ')tRײ'[ -[E &\7XA I iŊ`!/:h Ԗ[nˌ ڵ][i{4[mbuVVM\VZvyi7|sԑ5KKIW1VFgX(O $Ͼ3Im? [ E';u:{u,yv6`ٕ8)MC@ uq*%a.x9+oVVZRxĂ;72ea%8RjХ-9Tg K2-ɞ9o:9e.p;CY>B+?]߀p A"(bZj:'~MtV,TO5/x)7 @8<Wԡ9/ ci?K 9DጯQ;3=#_f|x^1;yṳ=P[~p7~!( 1bW°2!N/!1Y+{v s{'U@< s 7G%38MfE{ڭ^%2|8RH>ĥ|F >c[\ġ ԍyrϒ{;Wt@8b?J@ 'D,$?Z&mgNtOLZYWĐI%o(g:%fǎUd?7mKy|u}=qR>k]mU4wW r`L~7 oc[p Z[XY' EH XH@nafqFj O}Z|O2@ư)~ R k=VX 8E P'{`v_|~@̚6mTK>K*z-g (˺Y' q8OoN:i_~ucxsxГňQ*&tBEyGyD?&nYX.2Myl >B90WVPw}W`-hph yPN+%Xbn,YٳfUګ/g!oXTa5zڹkϕg* Al 3L!+LRpZ@lwR\vy督!80%VvP nǍE4bŒFmbr`# F舋^4;H\i'!'9e_}| K$E7qH#{ocBN\FRgci[{{3ńg4F,+dkϗ2Pg2V'uqG{ڶo:`Q?P;uXp/IXtXv倜7bd%-4IJK#}YZ[$:l!P~Kgg! xpf'n k~庤6s8%>4qLY8}m8S%~XL!F>q\8 vJs0賯$WGm,\У!#~ yH̒c- L [! c%FV֗^4~zCrts ;;e͚(hG񇼰Dr@VXRF+{ァ%b~1cDpRt Os9[g<0LUWAIq!-||Ԩ@{G )&'5޸B.˿矯ٗ G}OXXXJ=i,ULs/a.pLEI }0$IN5/۴iXW4P3i,jl%uqgNx EGpUg],M, >lll`z@+4R [knXHp8j= 8Hn}s,Ӭ?vW@GJЊ~Gًgaqގ3xiR ah2}6. ԙH G7S[YuU'ąPAɇ+0>R@>/(#4hB\Xʘ{9fPSR|0eFL\GXAXK,sX );颋.6@a1e]D>_7`awnO?x#e  dyAXgR' 9zAn&B=l=!e2AgME Ե&tnQ^ Ӥd۳8HюIgW/Α 9sC&K"b-.t wep{8efc~\!D#i ^Z. 2O l K?FXvN:_ qH]ӥvΖ⦁td˪Z_%%,勬/A\sC8,uxFؐL'&> g\=( ³1gebu,LYYjc#`@2)O+ ^ ;'Łȱ8CU!v:l/Rhkߡ/TU%n%$n c_&{MkbZUX/ xN}LO;cWh0$ugK@7PZ(}bO]l:l/R(.]dO][7 X,d i2a >9HKClͳʺ*?k; ߞuñNs{Z0}CS@y2p8cM22[7?FSe%3Xn@落 .GIJv1GbbW5RoWԹ,L1%2ڌ^>p8Dtte/ϑ.˽o [kzY¿tTP]+t Ir'=׸qdz0aL8QKǯdtqqqqqYS:|IFM/ˑk,u9 w_,̞&-[з2p85iDmc" R-u;W.z\tK7)Y3:W?9}QboB6;'u..!qp82ԕ;uU_!{PAUZT o5'u..!NꨣWp8N\\KRp8'u..%Np8U%IݒA,Ip888sq/qRp8'u..%NAk"p8kԹ:?b2o޼p8'u..%@zn?|-ÆɠA/T72t@懶~kܹs<,xtu#F 2؍=R%t`,|p8y'u..%%K;lTGf̘!*,q\/"3 n#x@ڍcЭ)p8GIK~ɪ u1c [XypPvFaFr6De2h #G8_}L4Iz%[V>~y3{)eep8GIK~ɪ\~AVA9 u}R5kNp !!Q `]R2=leA0Op8N\\KV_*IOurK,k܏1J.C b:t^nQ7Uq履2p8IK~ɚ~P!nXvd_O,e<\+u\ZGZ iM>yн{Ю34\ Mc2l劑3fԩSG693+~qƍK۶m+*XR^M?: Vatujp8O4Kw}>~HxygyFg͚%>#.s>ur=w'vy "p[*#+$~/}an%#EMϓΕ.2wq}R褮KBP/Bun:x ˰aBaųvᇠO;֭L2i.]4!t\`DYHԱ0qWGq.^zҥKu|q[~{2׿{ t8p8%QQ_;yde_cO<}{ܧC>\g+0?)_P~>MI zx B~e Iߚٳ4.20r˻ᆱn@)%#Q=q8k+2$R^Hw)/)?MUEmjm'i}I g% / =@^ҿSnC6Vx9oނ@x~[BO?i\ڋy<>HZl;mt%,]l l~:GvIK-B'u~d`M!'__ȈaX}s$o VǬI OԤr-`%!Txy䑪t I|Y,|8,t/ 鎜zȋ<6dy6gvQ 6 m򙦥NԗI']N= mڴ210AGK?It:Gy8F}D"ACE'ӦIΝ"f{3G(3'<cΏ~%h\=D0r_園ptCM,!dwWVO^1hY n=`E/7RsȰ ϫ{Fwȼs}t#1/5BȟaKWK*N:uasTŞ:Cq`&ߺ[6AK[hQq'6%!Kfr:vdfuYGIO߾}O>HN`=@ׯV75CIX-i(+@VCH ҟ~j#,M76r$ X,-1V v8|WzL>ѷ[Ob$OW_'9Rh^t\YRkʳ2K,!tf7V^j@rPJOB)tR׮C0$Yz?e ,g"櫥/i :[6HV7>=ܳ. '>!x,O4|0[lKzK`ydɤp +X>r,PorI'@??>w@[9%CXIgk:cM#ZZ݈$??[zo}Yl1 =,vw<؃i`6ݽߗGYX$ecmF+O>ZF+R@gǰRs,dO*8,s{v|>c`bTKH] _t4lv4) v*5J1!u{eUK[HaFCwұD8 !}xR:߅Ҫէ2}zj!=h4]tQ)Ulp IvPJNrr$}yu km?Y,{&Y'W\qZB>H k4O&t\kyH(e$NgeD3>rI>h2!_}A8Cd f >#ÑϠo>0Vq!twZp ;^~]Ȋ^qs6~aiO[,UK ]CX ٻe#a%z띷|O 2m!,χLSVc2BY^2Y5J^}U=0=ož)ϡ]sc= bR4RנRɞ]RWoO:%u%{\$,BeK? ]2P`u:t:'_:qo!Xac`6dml^b1m/dHz޾H=:Ic`jnrN% 2uUXx6w V,3p8ڀ!u;nXtbXNjy;NTdInwm8.V`tͿ?t [|%BO{$]gce u;^|Ҡy v_^+ˑ=orR:IgۇivtIV( G + `Yqiq` ,])ҏ8KDt9LOăaqx4Yumj6ƽp81t_ ⰸ? Ozq.;q} ;\{}[eKh~?s4(?ex܅3vk >cjs@ZVW%uw<'!u\*%_R`=uekaRGBEξWItCb_b/wή qGky?ݡ'eZ\gh!gy6QGTtX}ɪ[LF VXp }ْ4HR:~¬ξ;qY@OM\xs`^!žiֳq_3?/cK]ɮWV!upԹ.=u+B_Gi~q}H>>A)5 :f3 qlW#RY[Y-N,@MX0ـe K/z{@8n2 Iq8|^?cn}g} ߮pqJX#Od+]F~֯ǺWU_KK[EP!!n?sN<qT'8=uK_N>7I} :/NR=_<4G7d~U,t$p>ddΏe[ :C;ۚu7mPN8}]>=,?`*[t< K˔SZ'8qψje8Y:6~a K嚎K8ܐIK:MieϹCAeD\B!!~6qxhOH`gHt2J?i:,u9ȭ.U'N\\CtRAgvBur˃$KNr8[SSRWӹpKyR%9K]bN]}$ ~gimRR7K1Yy6H[^dIrH!:SR*1ޔm,FKp8V;{ߤ:]_[ֈ%r/.N\\C A8g2s&1lqWR-!#p8 Au.D}Bu1":B%uAz&ݺuN:Jǎ}zeKޒ}m۶AO7=9K,#;u4`~)sRH]ƚ6{L3[曯o~#?^'L'cp#ɓ'v)p80KtF/K] ԱpBnNT c)%s^̙3p8ÑXFR˘ԱU%IrH!x$uzq%Ȫiײ$]K!D p8E-q%vhO]La: L ^[8 "c]\\V8% DjJNbS/+"kߔ9sqY 2sOҪէbAp8e2W7?FI]IΗ.ӏR/[UZ_&3qR2cTAX:p8(pTXnsrRb)&u#N\\~&>cJne Hp8Qx೽emvx.ϑ]/U,\RH "wN\\CΛ/!qx%%Ɋ"Kg>7.(iK{5K#u;>;S.MLԹ,ޓӧ˸qdz0a~{3]\j;I&N+u78TrOݮ.Ӟ4CҤ.MԹ,̞&-[з2cO]Pp8Y}K"fk jԕ4=W-u%;|O]L*%!q1ɝ:Bp8cPAtOgU2i{[RWRE13˝:'up8* u[';_].>H]^,FeIp8o,8m9v08')333iRnooes6 !df!0c;hm9g5j%KdKy;;>RK]L5&Bάv;uNgEyt8pt2s:.xp8c`:hs:@~p8(^u&\9m~R:p8&\9muU__« aa۶m$O:һs8@QgtQt{BmݺUڱ6< +V, ˗/ +W.oKxpEXjIUgJ~[4_( ?p86EٵѢKa*jkW܉it u[-֪ \nML '@sp8ul]9m~ ^ K,}V) mftCXgXՑ#[3cs8GW=`n;2ټƜ W4Yz | t8:5hn7}N qi0_?q~ 9=Q#eqy~eJ>N :}'D D-^P|-*ܚ#ظMaٲ%݊աF?w83#?Yۢ??ZX^Hu.ȧEEn ȣ^y}q_3 / XE'g峛7z!ꔯHX9ʗE QgǦM¢E QPˋ<pdzu2\[և~:˿p8Ǟ@^<7ď8do};i~-Y7ˌ4Ն}.ny:_{y|=bXq8+ϐ_xa̍uF˛8mdI̙3_.p /p_hƻ[uq[򗿄z( m簸moVZn?9L4)lg{Nß.e ]rq8뜳ٳ4Nܷ6Gc5\9p]{N7]vrܹ_԰8/.ԱD؝lT!wt%":s7˙3?5&òet|dzoWP>ma?f_=PLh4G>uۤFX(skal=`>}qvqqv>< ϧzJE3<~:Xc8` p[ݹ&fG8m(ϮB{3ña]~-7tSxG¹瞫?o,X[S㵍n!;Vei-tԛ9tĉ1ۑk[zuذaC7ި}[m 5۶s;7^L}b}@#>8GY?͟?_R*9Us,u/o3un9: &K^Ν-gAPplLL&&b>sqlP@ՅomկjZ8p;"&O/!}Ç?a=m_!pʋAabeEmq}c\&VTT/q1AL+׎q|s>nW^a,,:Gg,u1mƬaʴcnU[o/ʼn8 ukqRȏ'x,%dڌ7$/NbX}w$^wlnp¬̯Xyv[,YB v K/ ?H}v\%b\ > 1_ǝ!q_ գbM_rV2'T^%"NN: .TiS8KI2Ps=QsZw}7]bm&f̚Z"*s"3PK:(moS!r0`h>>φ8 y?i0C}{U?|߯b_~󟇣>ZEه>!mn׿e!B;0&ξ}|3u\z?a1bDٳg>|x5OKZD^:fJv>`HN;-xaO׶bhpQGAiя~uwG mʯC W\qk׈rؚW_yӦM z,} h`d>u6WM9#̙7W7G-`o9sSXx Àea/nD?e\ƌ^ذ^m623]wu1"x…_nfos͖0al<1gPgv\uU /W0:YӸc+%ĠfuXWg̘no[Xxq6}>UYאyE ÿ:I1Q~͋RW}ckn/|Aӭ/f z!>OeN8A?2X;H}cX7 L8#w]o}k6b0[ um'oRiv>Xdx_d /~ X/A(R7 o,2ȇ w}.:RBC 5,o~K&+˷ =X9:ԅVD@"i ᓷЌu\,9,{V06"ݽ8S5z44c,~ljS?>,\YYb~$a•W^ ̀pDe,hXNM00Icԑ8V&cTUUlD}tBi+o$:/me`a/ѣe&ĥl,O^B>p,wީnKur$Bp8]o+R8˳Uxg‹xq Txg Qc&a?sY睫BKѼ8s]ˢmÙg:~H$=& Ge(0Yt[,.l9rd~pyWv*3p<Q>z{z"NF''ݎDr'5GuNgE)7f͐٭E=bNإ}kXLaa`5jΜ9*؞C(p%*xپȖC@L\<'YzPm?Tp@Vo¤~6Q>,CUvPZ%+ħjKyl-u9@ҏl~.]*;um<ҚGEN'QOzpt xuqlAhc2c*nR xⱖ_t٥kԋ{?qe?0[nl#DcO<[FَɋAXm,08q$}!Bln]k{V_i¸7]-Xigh{9R;S`ԙ3t,s5; 헩<+:"!BRNο fy3,slSf#/&BV4X*j{/JIђ0b'b&Y  ׈deeeoC˟s"/䒬8*H[VO9R݀<1ʍp8]& :FFI|vİ * 1",n ۹ &%Ï[%ci_4c(J.r]'cq4nD0R+>N-CRq00%> M͗][jUP|7f0OD1md'^}_/Ua:8(p8 fl ^~b7sc`g~ [$8 ?SִuۓaK ?1O#m|?_gJV?4\.Rul..U1L۬}{h ~P^rv_Zҙ[p߼mk^3Q׀DԙNCPuM"TŢo)cQ;tLSaCM?($olo,}-u0~nWάJ1^A F5[vSNQ`Z>[x& "$/nlD1uMlDPw]}ê0 /"m=D}3yb&>+mM_ !mتj[6CLX)_kElĂFZKGHדּ|7~&ITPrɖU^ n5J2bQg `CH=:1fM;6Ysf'ds P̝|풿9L1]u5"lnğKY2^[6g(y&r3h!o uǕWX{w-Ctc,ג4:i1^'{W40KnAr]x%[^?{2o3u~2

݈Q,rL>ε1`CzQ.=LX;Gg1x3q}WԒeKõ_, \2عa|[^698-- o9Z"0Sq:10sրgLCai9MxĂ>c&m8Ű{{`y^kV^NXx(={C'\g%NuG~8Tl9U7ݱ__&Vt]9mu`\.)+[bXML{ %Q3hW0qs/mOt o,FHydzs[&9M V&Z5X<m!y2oV8N>\|0'9gZ1vE>nq~(pj~>c95Wl7dOho:#o=poG'|jv'ax[k(guGsQtvN$Ob?uYb:zdxv%l< p/0ıʈ͋dPVv$,GX PO(a7>7X?Ű|,^|] q8GgB~͘X8V4^$y+c7l3W{!FV>T"*ݡk.pO:y#}'  h-2-25?@9ѕ`"*ubr ˢ0`"䏖'G7y2LxZ]0aaiΠ?ߧ n`}m'L$sE=;YWQ|]sq }O)aϱ?tU(9E]Y"l Q]BD\TйshQg/ aam E,&p8D**~{MԕX\9%/" .lNM<1#߰zgp8MQW^RA.vcgkիWk׆gyFt\)efꌼ|㺺s8 s:HD2ںuܶg4p8mDWu(EәEyp4wG=p8ñO3:v's: ',u %oj%:;Nsp4鴢΄:6Ə#M'9p8as:7nzQ-u=5p8щE]3&϶a>>:- -u"p8%a]"F|0Tiw";=T%E(9KNt:;Ggں~[P~GCKD1Q7v~w֬YߑKkºuNo+Yt:ʢq| χAoWK]9u~-uNgg$oB>GWDgp8{EcަYP_C-uG~8u#>:rOE1p83u5XDUiuNgg# w߯8hع>Մʇ@~YuE)U#Dܹs:;ɇpaWݎ;ڧ\p8GKP=^G}>Tyԕ)uNggcG|FºmaGvQo_p8=OEK]"`YI Έ>BE]Yu[m 5[dѢng}#; wY턵pzp8سuZ~9tJ?>^1bE;\cg}ߡGηm$RxwCܰMu8pYs:;Z!׶3,$n}C@mC. [kTԹp8coLShQج’qW&Lz30߇ۮ$zEa<ŽI<_Sp8= uNgbGI7_GX1qcʹ7oPyug5ap5gP\YWe~p8E٥ѢnMgsn L,%]f97,0?3W-K2p8"Q7.Ζ7Î#J40߆]za3Vĝp]_c "q_VWX1JI0_i7>LrS2pRiGR'p8@;lhִD!Lw"sY ǜG[ n<3,zE30 ²)WmϽ6,~r鴛2.zcƕO,^? ,)u p8R$wyQWQuJ0W3]Y"NУQGr~l(+jj[^rQܕ3?DYTD!;#TPyוNNFD]HQjE)ʼD]ru#T:EsbK,u6Hp J'%ߠnU5wa- SodKoSn&Lau'߇6L0}̹a ǝ_θN03q;^[za^n:љ 㹖9x?6o۶$N.yďyQtz  GuB 5{}tuɻxp;BoQQW}D}QDgB%cYVj;JWqnN}/w^&_SkK]pu"D(wQwQx3HD9$ժcLQmxexJ8߄I!}Z榈H:p5 ?+L9"q2ͱ)yԕ%*M'CȏNGAޗBWq\*ҝPqQ""Vqb"F}?Tq&أC)OM+=7a3چ)Q!)6?"lްGŽu 럾OSG=|WC3ú{WIw/F)>*y+JmnmDAE{,/ێ_^NX\^2?Gc 3Xu _h40q/nZr;Bτ^}&T/{sFݲoNZ[)O4=A>S*OMGYW~E3|Y*Nn Cʏt>S3(=n.J7JZĝQp0/vJd91ul۲EsW{ I(8j&A q\6>4l^7?.p8?}{.-GFgNpϙ778Dcxme1b@X|7 6Vf s޹ᅗ9qz Kt̿=p;-s Ͻg\oj?S왺+ M^Ry|*N>Gdzu%ש3bKٌlaN *zs[ܕQ7G={D0QW_'pNxdɤSO!fBv-uko7ᨣR}({N Vگ׾1–7 &O('mMꪫ'*++GH|8/ 4~aÆ0rp5I[ ٺ׾V8nذAEt~aȐ!?&ZO~S0~-u}j]7imO~F>z(Xb[/~1 0@vgh6)!/;,tAg?Y"qhbp8 lf|87?;/OC$|~uk;NW%aH=/_!&3fP7?^d6_*?|`{(m8묳!3r)*hptW0s!4Ǟx\x t.K/ /I[1[cTnZKpť,~V=Y+\xE*?!qQ7Nbz3I^nEWgE\GYєiSÄ)<,N_ /픏>u,y'>j5 Nʵ{b-{T5\џ*}%3 /&ߦ3A1Rl-y~|$]<;߹=)Շ7֮#Yq{xfma[gVLcQ)zQ l{r_9G4KW޽u)}e<ol"-GyDL,lJj7DP PCZJI˃Ӗmc$m9o~u·*mA DYaUÚi`'=y<7nX_vy>-cDy"& n|FͯA%b7]:(0pn Ay`1QsFsx!ƛo K/ڼj`rΟk+<-W7`C,xNuQtv)3أzh:IO><..]:#~i_#&[8vN207V;CDU.׬atL]^k헏(y03M* n.+Dj^<-"e| @<y3p$.y3zիb!hC^Vȅ  VDfaI&d,Hbc*^lA";#9B8@6XؚJbbCspbQpt8 b7c='(,lv,1X8gK:q,ߩzГ:]9]-Šja1Mь{澙u1[ S?ip&E 6mmq͚d>9}c$/3~#v!xˆbK⩧ 5+V뮻N?A'Yk=Ax~rf[3+y&E٥ؒ0Y0pDM᫣iQ*bQ{|w4HE4uL$:H搟4M J vتy؄}#,*ؤ5? Q=[+X;);_'(8`L%@YŎ v;GwC<62X/d,Z`^aٱ1M!~FeMqiis#tו>x)Ac| 7A\rI݄K⻨s:["@ShFԭ{pNxm[jR&^]g ZCul\0릳-u6X1;1:Цm쭗q> dqM~? >2CȗGzK畇'x~v/yKcyCZzC8h`YM\e!T ᧅ ǜ:(2u*v'%NqyA]9m`KE`_dY3ه憧VD> wTuk$lw4w.E X "bԨQ_Wv~O9G _bcXH8k*^<~ՃsOOX\b`ukv5~͗p8rlNjnQucQ샋X C}ci8->a㢼H .+A~'۳cq~q\]ctvޔe /.D0qL5 Xĉ7Yp8..]:[a,ma!^5eh7e"f|ND,bb/&@\n/E!c72>yaG}(X|^>s+'vy7UWp8 uNgck_eyHm3>@ ~C|guLѕQǑsp=RxGxa+XÀY%p8uNgc{z,45ԾĂ7Gݔ{cxx z|dŇf]#k]ts4r){Ta%2V*p[p8\9]+Q_XI>)䟺aၙ*} 9hnxB5|bU"V͹:,zSYZ\~ ?Ή;pYs:wW%ng"ښ-U[ n>S9NsNx˙)7^nF0eaiaMZ$bf?#p8cEӹXtO/j%T a5ឥк',[\|ኰ|lޒta{V,  X^znTI%T'9p8v uN^`=r۹=OpgY6v 5;6 5ƭ–͡fn 5[jwԅ7l[ojPa:p8ZuN^`=r˶cg@HHM<,p8%pQtݓ-n(EKX[Ca}At,>9ݓNsߠh .ν{ۖ:}p8юpQtݓ-^u;t8p#\9{Ed˹Ep8EӹXtO{DQ{kt:GCgut :D<>uRQגEs~tv"ƌ%aaݺk֬ k׮m,ʳ5,sON=Ǣkt:]hLݗX']EmjO> eQ\ȏ_AP}tǝ"u*N :%"AW"ܚv.6f0~kbm,FQΖp(-美>,QQkCհs:ox>~ء#O>H^Dp8GgC&bSꨏv%uNgg/ رCdX}96]B܉z#*٧|Z>q9:hEsgK K]o?ʑ_VQW5.F_Npgjuap8PvK,u#?zDEuNgg$:_b?S.2'Z1Yp8Nd=SK}/#ӷ_s:;oҐ?oqMqΰMuam?3Zp8h_$!o헕#>N f:SqÝwޞ/E̥Z˝pKě m۶I>_QTyhp8vFLe/J/^^*ꄈ^'Tǝw9?kw-lvG|6P>Qlj;"쾙GǫF!p; s:uϹ*50߿ӮMq0_767"9uwKEQ|HZgh:}s ;p8cN^q! G T8">Y*EUfeBWqDJ 7uNgE݌[ ˦^Vͼ:3p̽%7[’I f\gjcvvMooɬ_^IM&Bx:p8ZX ~o8=|D Z*R:PuCՉPagbNR܉XDS1Kl;ZMway]zI30kErXc. ]N",pM:暰sKBغ9kIJvnu~9^Xp8Cd`t3H<á#>ʏT"9]-vU'|K_V,olÌE]]9Ύuo %50xNq~^9aŜI[0q̯Gl^F{9k1xYT4bN@yp8J*}8TDZw#>*r&G}GAؙSKѢnʍPQ7 TqDͿ|z깊c/ fVVLV͸.זpɴk K&_Okz˥!Qp8D"*>T y_:ݡ|GCaQtMDaD؍<-T9t;&X$.6E60un-g0?9w]0?9$l167=;,xUgJVޤ ;p8,^kا%hj-k>D:mAԕ<,yPsyA ?|ˎOo&[2c!7ʷ_:=!=?L0s̛ n<[ Ɯnugn-IםI)'pn7F g7\(% 6 Tp8G'DظqMxŢ mmm;|AĂ uC>*_(dJY>&NX1PqWCqX N;Ψ.~(®穡GG0A?fs,^sq/3&;τ#YYZX]رs{dNc7Aquz”k~fxV|*7߆; ~9U. ?3LsA2Zc/v?ߘDܝ|]^:] ]>Wgh)㺷;"fQrMJwdnձՊ(·Eu+bQ$*](,D`'tfS~1T0}Zxޮ^{Fߩ QPPOaڰiP텰ysMܲek&i蚵#nF˟ ֿ-叛%떿u=^]/+&_0UݤkE*Lwaտ ]aU^{tiشCaCڇ-k />*lx꾰+Z>(cw'Ə^x֖ 팉q0y/caGvgnhy8^[_۷?򿅛;nyXz |z7eyu"<xq?Xޒ:Ywaq|@ˆocq̿~VWGs}`5wO Q+ 8^GI=U?O5b_T?h[e=Zաn88鱾"b- oO?gq40+=ώvx)XB+뛯KVEz;C>q# ۺ7y';$qǬV+ Ѭ (#bO2"ze[Q=pgM^*}(?| THеPUUvS]# .Yԕe-УУ~˶Pccxi갵fCf ٩Xt:w>&,tB咻񗝲N5O+{V- ˗-w͟V\:ƒwE ˖.7g~;L}^X4oa +_sy0冿_`QX|NʰfŬ0ƿi7\&]siœ1W\6>rwx9fz{-qN.=\p^Xhk 1Jms93}Np{qCߍP^#º,ܸL/X~K^y?|~;i>˖. ? e=zSO91 ݫ‡>^͏||EYZfGKm7/}a̩G?0izS}H(p7wM_>^͖ Gְ!׮%חq̙==<=%yvFY(<]yru{tJKw+wGhīyt°p\%JQ/޷~/GoKC}|"XziZO]&aw.]N5]h^X !kvHr}W]!e.{\_ҕ%$)xG I~dcԟxԍr9'/E K/ KYSBM -_~ӟg?Yn3Vt}_uO?{Ng%oS&Mn$ߵ ܷr!鲼gxᢰ|˖/3lX1e7`8áZ"꾤3v#H,v^0N~"F˪ByW^*{$nX*X↰Y5rsͦ.-NM[䏪”iSokm0wN(uLʲ[m#lV޻Hعa7]&^}g|i70g<2=<~[O#ǧu`/7H%#4-疗֣lƫ;2 |X.mH@1MQ ?ae)^NK\+CϥE|^,I|)Υq(s,6tYZ7qk<ŭq8֖/9u!^Ed r>*=2T9F4l_)Oesyv_E?iā.=V?>xY>R_%-Բ?#$\/aӸifhZn%DwK_벋i}$O[z?>aH>뱲?J~x'K^QRrN\MۋK$>>TژQW:աzPRw̓~i~Cq4l~su篯ueiyK=?kCI:V*zze_4U*ows5ny_GGWjc$q)fuHӒ7i-e$eK]_,tKx^_ V?G~,SoaP߉GrSB_|%8i<(S*F\tX&T-W{h hWYe2.1> $/_7/S6)amԶj^*{M7ޠč^?yIS*}g2jI[17Ԑ+2wެG~/i{_?-jЛ%7H.׺2~3tK9t^T%Juj]6=叶{u W&#CG]-T1)sQ&,eQ#i Q- L&=z 7L 1D_+qE# h,XcCB%elͤD0YKFz'oRy,ˤb.JYT(/#/mGګǹI#`bуk2)Q:걜'NrIyӣ !DX# .w[tNUioZk*~6Q빔g(ґ^Ι5ʹ3-_ȹ?<-~&!eiӶ i_^F#}%*+ X ngeLD(l59iIHkܞ"ɜ[ˆOZ=Iǹ֩`\e!N_e0p/KO97=j{%յ5t/>`AO+,줯I^qJkMCKWEa\ #uJ1W_?w軓UrȢIGXI\IG$rH'k:(kO:p.i{}GR'OO?=IzuxZqNWk~iy}yWRɟ~]uJEi$/c8MyAo?)A= 8^?:,Ur;d$3J. R%sRNA5.Oևz>6J=;yHF;#ɧBăgyh:m(y?LDͱϰwiߞɇsjxo.I^Ҿߦt>@ޤR³zYm%Ӳ]Cm" !. ICR/==i?eK=pSGiIgIK[i~?Ƨ-I<(7?H-dp-I7D)v[?CI>?"p94K\DzOEŁF 7ߠ׆Gʘ5P~/#4r,/;쭡0{뇼5T*|H% K܃Zyߣdg8.e qXu-|G#IR0憽3Г&ݡqPyaK] E]/qW>2a"v&@hK=Y(ȂE,jzʤ)7V>j}eqѥ) ;#֖(eY?Yw {d!/w aɢaz^5Epcm ~T%M )8:Y0EmU¯ϩyR% ʞ,EU91'rx7V"(d!_-*gA*GYh+a,.^zsV{KXO%_iX6=,mV/Ⲹ "MGVI_,OL+#1 QHZ^r.T-unkBGDp5\z HNz/ͯ uX'yq4jIv&kGH>VNq/rOaE#c_6dA?_ev/e\(rqn8H" #,-rnGx0fnK?='+CfyAʍҦ-ITs[Z8s˵kB%bU=UCD,B!@h8scW, Gi|_~pT6X*Yԑ`)ǎOZCoy?YX4t%Լ8%6NM/'!i8bYBX*ağIYF$|uJq^R~#⏘*K7"2dJ~2ȓxVs4h,1NoFWTi]Ŵ䜅.x# IY?Շاݼv^7\5:餌ʡ"z Io|SeZFIvIa" 0IA@4Hq# z%n0<sKˇRD;hw'-EӞ%6(u?PNI<+iyiՇ`/mHϽxyk腀Yu\?9<'qEhV1(jį PP)7?v x7Pyݡf!eC$ Xy5XʠlNMSyCaSQW}gD:Q k}2QXN~E_vQ[u}D3%aWK&jY6^2ueuERQ7;}Kn9<6(KI"L/M[!+lw Ʉ"%#0>!U "_/Xcvđ ~‚KZHc^L/A!07"{>{#y}* &L&uY>Q-X0Q<:jV/!*'d/OX߫(}'Ha;+7͇BN` ;[yI9zL2Y;KYZk.md"/Ęnes~p/Մ/qCܖ.Ώ9q`\a/, nG ? _ܣ|4Msq,HXsVJ~H' Yh .,3XxgV<%??-4IY~#YM\LALHqr9 0M'6Aq|kU qHkypN|Va/chٸ KS7Y?IK!r,KgEjaie,,p$}9aI~%>d!:LDXMHKofƧ4~48^ I7J(CO<?_=Lrsi7MҎ4cP,퓅=~)5mOӤ[y&~&5\Hڄ%*['`p}s q*7Twe-L꿿O n$,rdi5 AR'~wVizˏJ*>&&mCk{=-L&"H!RǃC#}U"刟Z3+I#^KKo s~kRz:I]hԿrED~@ҿߑKp%׬jEP17]"(bH|\OD}U@n8HȄY앲D.8 RE3,h#L(νI;lGfXtO:ۏ*cZgGƹR%Ј_aW_q,v/W.M> gaEuK.eQ"LH9Q77ClTOw8yƢ(5*d*:YG昺4,e]$bK׮I dطEG%›dQ]i;h`I_Z]b|E>/WZT`@E, NL}T7DM|U;k[Dq% Oܩ 7AXzلNllJ7"AEEDF6 gcPO۲E`//Z" KUGSX(噚݉ȳŦl g`?}^KBtMXW XH8tYbMň"@tÒ xeOkvADF2x|KRg)n'Cp5mL[D9ؔ;s9A v+܆ caט<߇hE Ē`lX,E7,fNgKY4&,|/oKN^uSVtzo1*uG6!E "¾5,^ t,Tm/HOG}bd!, RD.~kYr-#XS JC""xE> ~[^'KUR%8=fV,~PDȬ60Q'BQW9Ҷ&P`K-sf ! QWݲH=# ]12cт+qWqFbK3,;g&HD ;ޠrp?pEB.,M63²82߾Ƽʳ(B,2aok RQ+.[ vNEbW<,1a؊9jh,:$%?E,YwSKM,J@UaiXW0s>HMM] *FX/%mB5c!rwCU+U2i+T5)"׌k Ĝ}D] `g@*bѢ3qu6;;N ߮+fɽpF}ׇ}M%Nɹ1TTET0^GRʾL}E7GELf$ g΍:oIE{ޯY A7Y@,ɫ Rۜ}M%~W~L?`Y$:S=ek$6;D*uVjW)91ëؙ1q u%n7ۑ6EW~W>l9./2WKQ9s71g8Qק}_xH̋gRn&v{َ>'Gcj +A ֞ddKX9t"ϥĂ8B" /v#xjů-7"aV 8f) kO$&] ڴ'iBO_IJĒtE,4fq :y]*,=XĿ˓ ;9>RtZ䘊:#" دsRu;Y`%;-TbL5%ꎈry&Dn)E^CVB1f|J߫)Zw'7g2gE]bE rl`+:\~ؖVH!vML#r;~Zxx6rn̟,XO[bE![tGC, +g7efj+34c~7 N91])c+NKhb0W~W8*땊j ]JkQ ʑ_w+c>ތEU3"F2J"WQ".fpk^u.u"2}+߿E6* }Ae{ϹhQ7 }M 27J5OV gA֟LLf>[tAX bҷM|mQ[j`[fʂ4]W ʜjőeZKkb*%;,;?\Aueuf,YցLEUq1trmU}.u%.#Ovub^5<}-vζ"^*Oݙ&\uȿD/4+3'\o߾}I4u!"da"B_SAP$vG( cQ,]+% TVȪC>,B@+ZߚyGz>#vXTб 1'db^u9Җ6!hDp$"%+Xy!0yԗBѧ+3aRwt0t 9F.f3nW̋̄]EPwc^Yr/:e1DW^ EY1@po"?& .!޷OC>GX6XK=w,Y_ki"^R-ۏ߶o5X8¢4])km>4Y|,fqKZCKߐOTPQ-=1 MC"NR,E?ixQ.ʹrqfVFsKֵ-PS16{e.sF¡H8ufMyb;u%hN܈.]$6Y9ֲHh-/[Ŝ'[$viE&MeֺĒSh.L5[yAW]ʢÄE~M GeLuyԤi;#AǢZ7-˶1E]B:~4*lG/(qW# `%Kx[+B)b꘯+~ uÓ&ʽ#؋QQQr~.ڑ+v> 겭{M09[fD]#RA=3WV9m%l y᥂1_N[K?4h.Y7! b63T-dR/@IJ5_ W#vj1U$[*!K &Mn/EQ[; t,t<_U~ ~gx?¦ Sۑ :X!`bUu;EB]i퍐@X@!*F>Э^IpKvKݞu&by](P?^bO)현QF1bf 2< @_`N%I{9RBAo|. *wf,OS"Qg=C㿭V;F/Y)LrE]'#bĘ| /XtQk6%`i N0ϟߢE;wa_:ucqlR Ȇ=":vzon?aջwoʌXbРA>O?9sifϟ'ma'|oTwߡB2@Hb.%%%%%%%%{g(gϞvҥwuK8Hy?~O?{lq&2>}tBBr.ZCG}\rԍ+OMM(ѣHܹs,YyAlvڕf'\W7?E[nEHr EJ.!#>}`܏V j0`ӦM/ Z[JJJJJJJJX j"UTx7//_t8:rkwfaa!?eʔy衇c\4kM[ nz뭨v߾}h%++K J)U^f9R$,Dq@ L{Lƍ{(|p}>mРfGÇ1l"njذaݺuudؽ{wNNNJJ8]؅8ڥM))))))))?v܉Q2xgϾ|2jhd2aŋz *$$$9s櫯j k׮-((X`TTСC9P̙31 P9P%21(W9i-+I))P0??px| AM6mӻuV̙_K|w}ac=VjUQ_~8V`8vƜG:ux_J&"AC+Vsss333bj36{a7~34Z]EG*4hnC3`׮]6lMhwԨQwygr*ua@VHhzʔ)?o'"RRRRRRRR0x:t(]z|ٳg#q̘1V*TR8Tڕ8r޽(N~,Z,d[ɓ'8PF ?hZ섲ebiӦM)[n.lȃ0QRĐ!C.\{1itW_߿߾c}\qLi 8~`o>Iꞈ_eʔagiD$ٳr M yd@cIF-[`@~$1v%oR35*Wɓ'Q'%;ДޕRuKd@ z~-pt΀V/#>|8}9s&޽{p))))))))Ua@(d@c١C˿ =NxbFFưaΟ?5cGa >rocǎ٠AdC7|3E +Vw^MH$u=??ǎCISv8@EP͛7w5qqqyї/_0FY ըQ;wBcǎh{f6saB]l<ș3g0|}gܹs>裴wɒ%s̡U%yr?|i D 1f͚'Ov-[˗/?i$JϞ=aTոqc'Β8RRRRRRRRR}a0۩S0x3goG>製{!t%fL&~7.\HKKCN .\$vQY rss1:Y)ޠAagItuZ4jh`ܹsgϞy,Pd/AJIIIIIIII bJoR?s@YYYHԩW_}K.!?=Mh5kFDN8!VS51Wo˖-!Xxq*U*U4jԨoaz-<$׽kXP=#())))))))]7~7p c?I{12 {iDȒPS=m۶-:77 4hذah7>>~޽@hB ԍ[oGmT`0PzջtGa֭[5KƕDW75#l:Ze Ւ$"8ZtezTM*[gϞޤ3f 166R5k6z 5e˖cƌ3gm݆8". ofϟȆjΛ7/%%{V:k֬~rz($vň#Pτ 44C}GNګWA|rPv…=[n]RiӦo3gD Ȁtl :"GCŻRRRRRRRRRaHo߾<1ޛniXPPP]#4d%BJҥˁPIÆ C[n Vrrr6oތa'vs!7tuuG$!Bq^rNũrD(hKJJJJJJJJUC>u i|( 2k|!(6iΠfo9 Z4P*(FTAS$%%%%%%%%_f墽 h y5{!QƖ>|M[ ԩCC$9;h̜9o~Yf|>d@Ug^݀&Q蜚D",PuDgRh/īW)]JJJJJJJJUQD= H̚"! rXV.hgQ)rRO0p+ PH(B".JD\Q NQj{i_U^C… :DHzUJ6X ͛n)|Zث,뮻hߪU+eP$*M.+m8ՠ9 H+%%%%%%%%?/1 Ԍ !u bb&PIbՅRJLO(KF3).ʌMD6I85y4`O>9\~{J޽{o"wyg ho$$ !$D I_#ګ)-&C$΀*-%%%%%%%%%%%%%%%%%%%%HRRRRRRRRRRRRRRRRRRRRR-%%%%%%%%%%%%%%%%%%%%HRRRRRRRRRRRRRRRRRRRRR-%%%%%%%%%%%%%%%%%%%%HRRRRRRRRRRRRRRRRRRRRRݼJU4TKjDTgT TӤ3PIJc+WTZ_rU^JUR7JXU6*KaTb(M6Fl*Wa<$"QQ P2Clʶ\% P6Y)թzF٨h-r@qRa"Ug]Ҥ0nWRr576+ Q{+TD|+qD~ *T#;~( ׊ ~aa|UćPɿ}p+Z+Vp8s(O+AUQʶ*jTTz YXZ 5*UT1ʃ*#Oy ) b9*%$? -U,RyW(_U*WPj:TXTb+"PBElVXb+Vj+*r9VժReP9 zl**1W2i(W٬K&]W2þRۙ}1RuPɤKF]V4TRQCLah2kjBtbt)[^G]B̭VTWf-_>\H`.(-сr5@ Q*xX_w4Sl[eqbE[Gj`U!zXMTa{VGslU`M»؁WA8Vpo͗y*BG}tq: 7/@\S3淊7Jw:|l o&vH#QGIׁ}.pel.%H)o>X=YvO]VeZ.K:NÌx=ˊMh@ Riũ0 Xm1 m26Skk5{Lc^m5&䴚]VpVf7ڬnĺ\M\$7M{S6o2abs)؁;U`$buwX-J"T)DN.fgX9&8bv{; Z-h.G ]bl- v `6`X FN9)!X]b4@#]4``W#nٺMwitL$W@b0&3jcqDr wX^^~A~ c(S=KERuVHb`kTPѬRUaz1퍍F00 y ^}~B43\56NWk믕T7%hS]#ha'ӂ.7.qjbej- ֆ8Qhlv6Y],Φ#N O\_6Zm&nءAӔ-2Zتm{|颏ky}n㷷|f1>| |s#ΖO>yg+& xwmmEۆ]) {w|/~ދGomzw{o5V77w_[ͷ_Y+x7^z"/o^ڶ+[V6/G˷nZi3kW-ZrV'V|rŲO=1k3ΟؼI?6uْG2g〈"cs{sDۆA1&c' 9|Hkg=zmw2;}oVqzvg3֔aml4"ha 4074tKCC(>mm'0b]+tA BR 0?.P,D0X8FV`oduaS{Zڵci8hhw4P(p*8́4pr\4WZML5nz4xM YS"<A+kߪf,fjm n[VZmjǷ[Bj_}]0Sz}5V/t(xm:w9;3~3ݙynDNWG{ w@Oq3rfq7YI:RuS4 jOٙ$8,v@#~m8k~[u~SF{k] 6ю (EM @ZmD" 0ZXZmGmo?mNsKFkŃ 8W!ڂSֈhkq缄hN@?ohC,5hg@XΈm)| e8;6w`Ihgv$ZB? jA(QY5&#L"_t_X$O;fPA)сPEܩ&@hd>&|Z[-|lKՖbꑦņ):8Rm>w6g3g3ִáCTeciAXi()ΈwX4h26X c5-豘"ne10:8.eafM130:&h3Lc6FcbL^jmv_\L4BAL?&1FjO?a OqhKhK{w4Oyǀ;nwm}kнwݣf6._3`w78pY`G:1s/^ɵE¾ГCO0jj)[#JRW`F1VR7.n{Q 0sXZG@6lGX 4Tl_URz Mf3(b,zQ±:h p8&j&oZ5[MZ6ooV39Q+%ߪYd{L׍P[D14'Şfݱl[G]h|gڀ\N,jZAk~RNO۫ApK0+%3F-ـnK4˦ 6mMh}1Vf1ƈƈ"a Ye/h~Z@8NőEm;`gu&ؙ =9 M6L`,la@d(!ȡigsfJ:;8iu9H 9.=I&n[h9(q8mt$ig _l0BM_C|UBg^$Ͱyҁ:EI$㸔YcuX\&kɒhuldocr1aSC Jn D񭡁?%`c9 h:,֨xka3;->k smF%oetkoAfAP(a8l ~& ^m2@2\ l&h088 1flfmĘ,Fef4L֚&{ #1&{kJv[ ɫ ԓ|uapXmi bMi07%$GhNULm06P"|jj}fT36TSP?JEtLN lnKtDcJvj]3TFLjԬ]V$ATˌHljjԿ/ôBUwjDL̈۴f(?RQ]5ܝlD !UC{uQeFB4P18 { _-dm̸/Oׂ,{] ›#AeqֈfTE  n@Ƀ&XXh`q5y9M\M=|Zk]az5Kj2I.]ps ׭xb֯Zy͒70yg7{vӺ%nZdÚ`gM&2m`v-2xfeFfa`ۺnZ jkaV/7-l^̦ug`gmb{y9ٴ-A .][7"bNnXƵY -ٶYD3?zg7yA}~ѺK+Do CXgԶ֯\A:XbOPʚ>.`3)9EsY4'fsyǦ/|lN{ 3>8uH0iܽ=ǎkƔ=yS'83F;D97a̽G ?bHA;o=oC1CϮY`w 4|Pozϝ ֿoAG s;w]ilq64X>6׉2Վ20fN䇹(P#Q?S' rA.x2N;zo1a@ Ϸ&+~jte{c{z|fZݝxΠ7mh6Im=֎1L YVK>AɦJWcpE8&G[ 6#WGػ ψGZ&AǙţEAqkv2m$o\݁u7# 4 2QAM/f.&rHM7s&-ffYiha֧QAШQ5cjFuN5"Sz B(zc}}4>rjёKuC]j:VmxZUjVU=.إKQPj8fvREw0Oif1ӹVYen}"Qc(2بyӄL2@a7ƷB#?Rh\c\L_Ά85|8Tx2qUI©STT R-&.w(Fh,Q:pZMl6zY[} fGC8k=uZת߮^ĆM:4nҸY!<̂瞞bɜUYe_+.*ljEW=icsê'Uصh6yz3Xx5Y7< ظzD{נ'6`@^22|PCwȀv;[vZYCDw}{2ԯgǡPIۇy{<n]RvN=gNo4[]FxѦ::Q<1x.5S 3jN~L֧F-s GHT#*:%n pnC P3c0bilftR[Qh&=4fL3#-Fs=5&K}hfhنx lm`Bs]Z߂tlSg©olmzvK}Uæ@^8 ¨Ȁx  js5b  FaxXozӟ[нĢjٴh1KMfFsLEYmN&sbf=]\NWӓpwP@π\\:9}SKN0g S)07}F}) {;B!菄bs:26x15 -M(jB 8C ؉ bLJH 0ta ;SUMXDtfje!j7W4Yb-5iA<zr ȃiӣkD}&Adc܆b b`tA`76#sh`3 kc1 1&6:drjoƟ޸ Ll%%̖6dihא&ks86|ZmLj&̭ Z41D[Zc'LhsS"`d!IqF.Qjn_PQB )5b]j-ՍuuT+][M6&[D-A ~թV#[ cNyS=:^eTɉf-ZNCpJ久?xn!P'2z o|~XZaU+\5?~ȳyS`*6BمW<q'n[5Om|~!ش M(2H\|2zBC" ׮|Y/Dg6yzat ! fق߰bцpV<#EkW> (z>֬xbV=-}z%"%f/~be>'gp[9{dG'?:oYcM9uS&?iӧ<0sf6yI#'Ooѷ?DQ{@p>z9u{}:1oۆ>O^}{uп[;uУ{ư} 9xP~;:O cze y>ÆؿGnY]SwڸQ;jd70[1X;ڠ&{G#>]4KP-jYo&u൱2ըRK>dBhѢ).`}l1zPWv-z("{+]d˖X,+̀VNt`)f. l/b@8ba$@G.>wn4 XoxS۸V\ qXf7tŃV-ЀրFDc=DVd@\ "=ؾ:Y.OWjt9Ӯl5ZY@uS5S[Lg'ޞP4V04a

W!dN AC0Նo$zh)Ԡ Κu]8;b9R6Ѵȩ׬j T(gVj:Z}hVf.s׸`okt$0O9rɡaF'jK6ړM=BVpYQIITQ鞠 (Un%Jug(7"h7Vao 7T 7`WepCU;*T4/ĿT) _8TdGJ5*_**KDԜޫmjPao&=p{MqBxs".`Z.jQo@pXR@ CܺՉn^en樛no)[X"QRrU[h1}[1c{&o{&L9iSǏ9i􌉣Ox`Θ4)&?.$kCO𔇐Gdl>4cic2jCSΙ6!Ϟ:f`%<3m켙LX[D2l:'5PQJa"ؑX4qO{ߴ0Pg`&=0eFNɣM=yD)q>{l{G;z ]&񑩆8O&!~QDjrsx-QNY<ь1 Jb̭FDʕ |9U)W6TS8<=B\ĨhR̨ȩdZ\fzשi\;U*Z`ԭg@ E4GYtwgqZe}Yy<o/ӕvw;:{}=x~^G hb@=ho ڃ6!Tv& h3q!Yʏ%A+S:gJOV%G-C̲YJ%1<5.րF ѦVGӛbs%!=@m!MV93U颛S:͡U'e܄麰& g #}E|Ʌ ?Ο?13 = d4L4KIxPn8lS)g0Ddԙ!L3cڣ׎omR+%|33l]Vۖaa?Ix}ޞ^.o?߫I;7b3#8zl h2e^3jWW+dMp{8].w hlaCk}g; \vgn@ {Iδ AՑh|g{ّbf!s54{_`3j[áKj+N6{4Ԛl+Fe~4Ɗ9tF*b hJFFnݢ M0XD[1V{+Ֆ-yiocmŨ`;H;qx>C- c,k[imGq]@}0 E9]lʦ0Y+~X"Pgv»3 i"enk2pLg'M6\DZ?wpfjuvv8¬ Mhr|]M/ׇkn#N35*<\@jR`1P2`jwŝ L47h 0VSG6f՛y=`3UO`zIMm 7gފS[ov|¢+BtsU"IM! (*,(BBċ"SP+?vDV:yu%@˪"[A>=uqJi rD^P`I P4^YCʼn #XThӆ&mvq2w\OtO$?EQq"N $!5K:R8p hjK(GJ)={M&\eWQϕBSPH>tVeM| \-͹{bȹsRܜl\x)_. }ؾ܋9j/@ؠ\-\99H !Czk<\>eyegU!yȡĹX@J.(Kr/#A $^.gy_..vv)7Rn>˗{KPi(nN5bM6*(~P(Fuu~%oQxfj;VA,ESS~F&?ȣ4; k*l }WqtND(77.cڵ[[ԌkUjӲY`4n_/_vnZ ؽno//6ǧl Y3E&P>gq͓MOW ';AÝ wI8uQA19Sd= (3G)p5UgS>)d/2:hp58ۅ̛%l f+hOg,fB‰6]ǀ.6[kK{hmeW{Kɉ<-MvsK׬k@o1іl1 k(s+CF;bE"t8| j{~[5h[MNr# Ү`z`區K{]v9He|5ӐC11pClfb;9|uߙY4Y;F85i4]r`DN1y-GM.r]D5ˀx2,pn4Ĭ&,'6HhU*2mNVwّadYYt§[YJ!@eJ2ެ$;41\[%m'Nz[?~ԩ3}ΝO<})J?z8^rqK%E:#9vD ͓'Rp+^ÉG~ \UM4Fx'Mq5\͗@\񔮕<䷄cТ8K4hNggϞx1o6K(<4.Y|b@ש٪^6-C_ivvr{xʢ`6tY.,2bCБ h.<om@.ŀvf@p ho`@-ͭ-ml,vfGўޏ'Ohot^j8*P miMV2ʈΣ:ӰCJWC; 4lu807%29$lgmPzZaEk=jYe#9L_L׀V"F՝hxLn՛ar\)NOqkPOٓNdXĕ@ihOt'L3ؓq>OШM7Оd|ܢ)&WRjWz!?//a@#c=z޿}Dpp:tȑcЩS+;9K\`(g[G8/%GSD"HGR6k _b5ɀߢv|:5[1Vmsu now,ҙtwAqL\mXRӧԩS%Ή̙݅ 9{ǎ;΄lpu%vr7E\./Oi6sD[D"spbSb%6~b}.=4zR|\CX[u+G{E6z:L>N_5sәijjt7a@=HQ hK; 6CAYτƀ&ŀ/txʴLFQzFAT4˯VV07ՙ ZSC) hMђh&EZGGZT74ZGD}mep(&nCNp)g}6&{;3Mv62Zژm-فN"N6.>rw-`Hڹ<RZ[`r$p_sb(ah)hnotc 7Gbl% ڴ8 hGl([47g$Vޱbv3W4/:Uhⱆ=ي' ;˲yL\'Owf}4kXcj֙JEY[<l ׋̀6d7*V|Ȁ 8|C9zKfHITXx/9r0ױcLS7Ỏӿ%O;]*4ů;B 0hkH$<tI$j>䩓gھAW8_P3Yj_m6h:g0ٷ~l*ߟ0솚R.wWn@c5tXτݑL#2ƘwD6UJmh͊=h ΌVZYl,m#`noqY/n,ol3<6#[;+5ZaSzy7D@H7TZz.g+cnm1 $ѦVƖta&2nria^st]O Ju`Qzx#eB; #J09tfn@嫣񗯊z C uGPG:ÙN33Ն'Ͱҋ&M4GҮ\*LTGlVhp$|&4s]&rIX׆LM ͝w{V2Æuݗg:c3$"a8R,\rHNNNAA\PJ7{="]t%77ɓ8x0M%~ M뎦bD"H$Rr$|Ǐc⅜>Ԡ~3nqQfkWeZ-[6:7 wuvb2\j=;nq|쭃n5n@N_wBc@۹6)Q= gzәW- hFLh|gzGdZ,7U^ M6PYCTXW& ƥcںMomܹKzn,`imjcsu0r2U}Pu qrgk[}ơEqMqxq$1M"N1 cWJ{.\5l՟9|"sE]A]M6;LVwٝH+AGMe,נo4GH%,qfiFGɩ,(aR6LliKX}θNbO+!dw ů/耻fI[+O_@6)먵9uv} 76ۤN|sP+i-$apb@d@3|=['5sLFckq{|M$KpPfsH(4[Zk@=hrg@ Z= Z;XW'ADӚMƪS( 4Z W 3yz14Z[&p@ΝlhҢMjLҁNfh/gk[u5:)f{{D֬ݸy_'9ؒR@CA@v>\v_r]ݱg"g1ㄴu \b2݉B5$NMoWbX 'WOgѡx&W: J7" 뙼Zr̶2ɀF#!( j! 6^=1+)fwν㧋fU(vjˬt#cE4Q˞fGgCbhhL=Իv9ӟY<̀ƇϮ2[o@žÀCЧOw=ow÷,d"J:_פPDlԉ՛H.Nq"G/jQ >+K"-}V\ڄx`eaqK,V5a-l5}~{}3[Z Vt۞`6;3YewnKdL;FS{Յd@^0HX:i%9Ԋ949E(S53Pwtؕ:;Ⳝ^!ItE,Jl ߙ0q)iZCjUW Liݩ mb7 dw&T;MϡY"[z=~隉N2,2/C /FZ, ê}6Ep쨖  c ĭX8o92_H>dY}Mt/ɀ f~]4e̸zh A bergF'n+g@wsLV h N8%L7 <~n4k9v"|<ѳC:K:wʕ+W^)* .^.– ߌHA^QWtLh lV,EIM"#85J1E B.ӧGq6*#Ht`Y7!D-RN]$D"Hݡ/%jv!}eЌ)~iVgSg|lh 0P6P"ȶkמg])R_TPPs2s.].*`¢‹W\*P+l taQ>((*/**4s3\E0 #]ExDxŊ .?Uݽ{5t_CAOrd@߹a O?~ ¦f7CQ*'Ж kE9zX:%Nxh`x:gUʹR.P\Hm2R`GtCQ^ʠ4'P2r4ۤ'XO$'p4-MCt[p"&]R*pGܳgO?ǟ?lݾ}1 d;r؎Ο_X_P_*-STpJaAaA>\sr|f6_U8.s "lifa& _|6q.,,D"|gQ hR6DR땗[С##Cb>;1qsn< ~jU@*WESh3NY['mS1zI~O4w])?-Mů"xwvh pDOKPDMp;#|g}w׮={ï<:hmSO>ޟ !SZUS\񣯝4ٮiUi@UCGv׼}w؅Pwދ"N~9sU;|iS׬x׼w^76/?|O°6\'6"o/_\! E!܀)4QZπV"<vWbF#řf=:Ӂ͙t``@+qDT33U]m@3KQUWEDnΣrTu h`3Ƙ[mD=fp[]fGb9|.p{m`RjG`F0ZeCSLgfNf@G9 jl"&~sL"_:|o}&ߖT̀ gDhas./? oCӧ"1 BễS|;w>{<~<{9EEyEW\rʹ[H',_DEW.=~c[>=g;wvYDᐧ8K3G[>r$34iD4M*Y!HhRـS5h!9*˘A>|;Pa3Ȳ,-gd l v{joGAu$tMN"|={Kßwy;1'}U_Z@= ŀ.,:[Pt /(̖(\t!g=:db1moqs7/n|𵪣^r˕G\qK ="|-%+W]{TPlV(H5ZU+((ĸС#ŀRq #H$Bh#훠pav %٩»ԅi]`+OM6#P?y³ik+x" "]Sw)*t~f~gCw)n0QpPM"@О#R9(yйS4$qHdFT7mh*hL:G7Y&MN)A~!qޟQ0jq/xΜ:u}sfM[6.i7_^7}ֶ?xOưMFgC\GZxjga@ gMq ~[ZY'ڙCZe@+2:b`$@f4͝DBk67JHL@e h,V{ٖ`'YIBEۚmͶV&kk304b83C9lrhG5@ ܏Zj9CS!AZKՁʑE=8LWGh6>b.s)!#ŬJ,Msv`]P–eCd;.JӨ?Nގîgthr}=JQ¼K r.L{1!Rziqc&|?Vo8k;1o=+=o֠A v=>o&O3gαcd=S:VW.,g]z]3HRQr]pqÆ&D5xmHӫ)ZEtHtM BB6G +"$gaQ"!wԩӫWٿmRzxH*IF:CGO#2۷'&p;D"H$~V BxyRѣMu ?vhICp9Иo=mtrϞ}Jf3Mp>Ovܹ#i~ !MFݻIŜc_]3s3'X`ƥ/mYUo~u ι6o|?O\0B h_l/)Z6> h}wwv hڌ`I3y4ZE&`:g:)ٞls݈$YL B H6qDFlh/aAY-LtrlʄpL DD\X%Dm:@3_Zz!syfhWک& 8!Ţ>*N61'pS5ЂRb#be8bq殺i撠6r 4L38R4+ktWfL(Sɀ^0Kզ:mʹ`'Ny˟Oks@ybӑOՙ^Nc5bqe74o΀fvalKi(ƀ/ăXd@[pݸ}nr h54ÈEN:s᭛_7wyl9Ϛp)GϝO,/URg|%%8α%8 y .])*:7q32tdzrE?cǽRco8gbvyyy8,:~{M<cK 2>|2_C,(qȣ b,uˑ,NQ? \/]WZjCٟ~ځnf>V1@ڭZٸq3CA QD"H$D>%"rҤiGv!.$9eC>S0=pЎ~;ͻv3pSKώ?;w[g?m߳]?m߉_y43=uܡ1qǷ[ҦW7-/?z @˾X>_ ge3qz:]<,{ܝ6mI{Cb b yA*jji6Obs[]4?:z %;n?nÞ6W26-TΊQa@'\AZ)@c ϫp%Z959 dv:!4h硄%ә-b h}Ȁ% ⫝]aOONfM.nfsY< l"P>eɀ6{\bVx3Y7_ CaY`'O3,=,xnZaӟUok@۽Iʿ)ɀf"[lhV3Nnf@?8쁀Ͼіd+S6vي?}ԩ#G"re˖'&l6CzJrFjJ&"&%b$7ntǿ.^ ŋKa1_*(,/:WpbQ~QnQr ;:wS쥴$W߮1/GOz9uofy Q]_|%ÇǏg_t^^|`E޽`lٶs]vN_Qzsoܸ_{Gytҥ{17і-[wȥK8_|V}FDϜ9boΝV^}QW/Ċ/^XA!ϙߊ";\xqݺu׿6o޼pB⺬\r޼yhbΝHAq:'ΘἭY_j޽{Bq[nEߖ,Yʵ@^x]E87|?9?ڵk' @mGAU۷o>}fӦGrȆzRaw~{6mƅ )%\g--F9'$$K#!v)H$D"<LjϘ1ǟׇ㌁6mڂ?lG{hۏavƏƝ]}MZ֪Yy k?Dj_޵O{h1r>W6~ a0:/6@>v,plRgww"lKk@eX:e.aɞd'[{f@3ّ`vFpš7-K;'-slmow]gL*ƀLtV#_w^jd^$XVG"°nvDm:m0K0E, T "_+.)!9:+lh|䫢\FwF8l oI1S- ',L(pho5`@3xēv;baC~8kGL KV[|gL{^"hPWo4TMҢV@o`OuOD|W3g^^{B m͂pR~~^y(>Bb-6vy+|wx7GVuGTe̫~:*!YE 0nw]BH?~3g_re~·zh̙m۶A^ORRG?u;Ο?ٳTD  {KC 7g{=x tǎӦhڴy|'O>}v <{!CZl3f ?T9wu׈#HMMrdl_[;7 )V[DD5U8l+ p0S 4@-M̈́& l[ߵX}w;cw# ŗ- h+zɓlRŋ9C > ._*x3B?s97򫯾޺um^ɹDF,1E%E .gKB_*ॢ*DOm^TyAѶNJNܱo?x?W}g ?Z#Y>;{^wqO<xEF9sӧ18z'pի۴i#^˯0714zD \w>.]v?h]voe(WiaڵkwܣGΚ5k׮b1B*((\h`vٳwlsyyy6lԩZsҥl1/J&L8a„3gH333>"<+ҥqΜyF}9r b# UcǎÍ?z|֭ׯ׸NM9cg(Ǐ?*-DF h6YП/>(΂0Y$"݅,g,L =G2eg@rKF64-FL7)vw͙f]v$Z"lhB>3v&GўBG͓t0Lu h"čeFsBT& ,d p"ƼPn|te38ڕ)3?8w6䉳O_zIgL=m|grN<[lkҤن h4V 2hP KEy TPxy;S4wEsSrQѱv,ڽh甆}+v.ڳ‚"n*E\!sW^yu ޽M[h5{oX˗7oޣ.]&'~ O?qn\ӵkw4AP=VXAӖQwS.oR4xIu!9V^z%OB"={|:v9 2mڴV))o6ںλ_07! u魷ޢ"|v6(ҥ^{ ']v+W} tiʃ ;"GMHHxW)b#ʳPɠySΝ;?c:tO?}2<ͻx"ӹ| 9%% yO1/j׮p^{ %)32|7a&N_Ӧ͸Zhտ@\֩SYfhа["H$Dg~`(rs/Pbbt!)):uA"9<| !#~!l?s9SfԔ}c[NG263l!rch|gkxCAA*\nlIhO'[; 4):Щ}' zfivwɖd)6g8- Ma3NF{-$J3SfH3̊zG1m!|g3v9ŀL2)Mgv5 'N3ؓ 7M s?/^r8evvW^y-`rQϞ=}YnYǎC7ڧO[8!s.]-[Fّp!~aP{bάYs|`,&i- ZLϟ֭ڵQ M:uƌOF7d f4Q)|ԩ'M̳fJLL\|9GcNJUY\}]JJw .PAA~n˟[*$W^xmݶd2)5jٳsrr9Qt_F0MKW(ր޳gQW^`It\h42}h!CiРQjj:lmhW9hH$D"H, B 1>ܹ mHL0~Gd޼GiB iHȊ^ ` hwwݏ=DbBJ7jުe?;ޏ>Ij:j2i ~5}5/PM9d={,pg]R2@7؜YNwhg`q:6-I6gݙn%vz6$=N6i7 4" €#}4h|gA,olR6t lN7w{.%gΗVNR?^9L,,Lg3CGM;Fg @N׃yzd h}fr5sb3VO+.lqeu0,, sKð{l̃fֳŝhW\D"tx;b 5 ݬI$ȘvPhW 6;뢱 k4ٮv" ̢%,]t1{±xɃ̀ r8nNa@I1qF/]d@];lm9{g}|ރ'O#zmڴ{ᅗ.\A% ܀Sp9|^œK=-a/ƕ'Mkl8Yqwkp+7.[Vܕ7; {^RzZ( >G|`̙ϟgz?[4B% y/_߿va앖'89~.^ۿKy;v~ᅗyEyɒ%4"EEwuϴi3Ȁ攗_~ 5oϿwkώtСӦMU9r|ͷGy䱜~&LpSNedd2ŋ7z>۷ҥK/]㏣-Z5B}]|ѣhהEcǎ8yҥC;1Z СN ̀^hw=}t~aR:2tq֭cԛ@5H:tw+iG/z4͝߸Qzuϙ(-7Ȯ]{Dy< kW! FMo / Tvu'xҰlU';v_C ^]y=.w ߊf/<Φ^)/(=.*۴i;{={9svᠾ?O?y.]yV̟OR?cffڀ&-];ܻwo^^~׮6mڬyyl 0NNO\f9v߸td3gѣݻ)35:w|>}M+Xn}ٯŋ9?<[{ELڿo… ~QvvĉϞ=ХK7|Sc !yeK/ܾ}’%"3)êU81c;v G=toG\G{؏=:eʔ^z(ү_~q~'==c֬sss @СÓeu)<$lY/3[ h5ejPљnd|yl,,A,e,aAo՛0[Z5RYb ` ,e&CY՘()|39AKI,It{,R(tf:[b;뢱ե3Jvv.s0^cwخθEv~|Ęm³[ >܊}qر̙FZ|'ڵ7A۷oo޼G}D 8p޽{/^qFa>8&!;8ַ+gEM<~s9`y}^{ GU!D@[ 5kO3gN>sȐa#GQ y7ꫯӽ{cN:5;;Zm۶ ՉP̀{}}SL4i*.SO= эeV^~=ϟGo{;F5;Q!nӦ4@ᅬzPg}ֳg^N4e]tڲe+p[Sz%~BdYb=8;8peeJx$|t8{ԭ[_H/k2K$D"Hx/'Vjͮ?4E`~'L :#/ŋ .+~xη}l)ÁD4.ƀ~ujŀVɀE; l6z̀]|d bpw!N4=fZ}=T30:qـv:Yi&[ f{'6e;j7eYvO͝cnC|6$M\HOعŌ'mKL/@ԃٙlq)[ hŀVVHBh⒣1#&kA}PzO]/pcl {ŝB=:d6uD]͈ [7Q*^: 3sI][RMyHkнE?e7Hɠxf%M,ʬy,+Ո4fru6 9z&MdCXb9 "ގ_V$La' ^, YMz F͛M6OVj0 /l anUhv}?.!.V7@q[wܛ?'d˹0)Fb=D->|ԩ3Op!gC ۵k_`k͛ܲeH9x~"܀&'lѥ.Cr+V5=D_*>1f@i.|+>oW^ЊQ*lO>dɒgxbBzS[oGb /'=3G1bģ>Boڴf*~ڵ 7 Q䫯zO:~~|Lݲe_M.6Iuȱk=ēǎٳ^z <3_|( '!z뭷ιsϹgF8'QL0lQ$!P$)@ DB(sDHiO]ӻьnVZwwJm۶DRP8p^͙2w.;p N2`F|*~z%i.BQ^z$1c-Z8P?iҤW^G*\6m1bij>[omٲe̘1/ Ah ~|y.\4s3g:vV6(QZ&]zqkFW1QHU<`<5]v;+\0W.\p… .\WfY؎V3Ulٲlsmvk׮}ܒ& ov͈F8B@+h0Vذύ|PXf# -3TQ +ni4 $-_(IUxO/f"h78cb'ί?BBB_'@;o?)H{B{Qp V?ݜjShPVtNҸx4f9S̾=&lt$}HsX  Ml_+|юHuuF;*jKj{l&8  X$ʛâNP;k8`p; }VȩDU0xe.W.m &+6#3 &=q7v?f̸9s͘1mڌs?S?/Д?ˬEH'SGN՞8]wd}Olc#xus*Scoujy??u_Y߬K~LO5 lѣdžWrdۏ= o%la{Р\.FYt1K?OmnGfN`)W\qo{i۶qUڶm?kn=Q}ꎟ<}uY%[zمG^zϊc/:;Ɯ\5ϟ\Nw|MG6dIOkĉ9 hXۣG=l}={}Ɔ5\\Iq86YL< VP(sK@tMҔ8qw]QQ1{lRm(`$ K#5D><^Y"uXBMX$,"RI1U"\b""RuIĦ6`lLDΚ&˞=Omێ {ޖq… .\p;~Xmڴ%j}e+֮]/d-zժ5˗vźY -u&mp%Yn #8h±xWew6*pHn@ ZG$x&hV+4 @@#zC1uFO`'o7tE7πxCm~(_}lUWyut^yZL6nz.1 46@OEjY#mG;`;x:o>*T&؉<*zxVuDBm~2;ܮU@A7˜ә#YiC Kd@@q6G[ODOAD#B&dѬSEU%jyL(Lk.4xM@>;l D9";lIޜ2O4+Z>7(϶v@Ixmhf/wP_<$AVǝHAN@T]I}z0Z.(W ?{5GƌO?SO|H݉ukIG'OKPNם:^Z1oJ9<|Yb$@bܯ_nԨQ{!^ *ĥ76c  -ד'թ&5%sX_wʔ)/Rh*Pn kn"%^+rJ,(HjD@"/ai'ՕK\%UDbД\,QT1X>k}fǑC.snCDž .\p… &fB /fBe˶+W[6˱yÆM˖ /_)Ĵ\C@fbбgD$ݜEҹTM7GhFh:lUZ lb)*P"h`'U VjF4z'1+9(%P>OISBERb. QvE:xChppG`T!T_&t"5B''m#5ll6ʸ6}!܀Hf}IQ6Uyr Gg&q aߎȬPTzG\;kxnrg =XA+u:@#w6wld6.g1𢅉 BizE: OT-qɫJA}0vrSh]ȭ/NY5Gm$_֫D+}FYiT5)?J~F3ʩ~Yk0T6Ow$m[#;d~ݓ?0L8D]'O5q_]9F=O7tZOם?v?QW;ubNן?^t}ݑSOW1uO?}R3 ))$)T"'Bʭ"y H2n$HUVI"F]2RJ! hJ}S% 1&H$I$Wlr!b5J :%E"є[I2iDb}r'0\ m"j?k:|?Ž .\p… %d5'A‚;w_QUְ>zĐD M[HcbY猀t͈DNZ'}6'9 2,5Aڡ;!@ _j+>W|ӌ7 ]@$*O7K{2_Tf;xU$%@!wuNZ=iؼNHvؘvBj'a#mȊ͈l:xgmhIܡUPzoڤ,],!t)X>Ca;F8g#ΊuJ1T7PV5TQ(Y`ڿl;.# k߹XF=յ+3|M?\sG(;68 ԉL( G/ F˲#TWxY {1}n)H-VO6ʽ:FP(k MFkZDr/0o~G~trN&{yv޻otaj7(yєoQb2"Oן8ufO?udkkO/ ?i'O>}N 瓧O?qةӤ4 gQrk5)"Z׊Z-k\Ɖ'#E$F0 r%U)%J$"L^GK^Op5IXn%ё0I[jpEK)}Ik&1ɘڜ,Mhy "ۅ .\p… d$Vփ lڴE68u+qr\n.+D3*Fd>Z_ߘh+ÁXkF*:;uwS1 #8: &$Ryg9cvС}V_fY hXY" /\hjz`'o8ߣ7>+r08h!}NPGH}egxx_wkb@h \A:BSGm 9aub :R# 1YJIGrWd̎Nw\?_*Wt:W'>̊#I>gCNjn hhB:̆Mu[U#D _(;NgVfo{D'QHXH}<ؐyЊta P__}F@Ͳzә44L U@C%;i3/jQΑRb| OTmˁTP XE0?Fh"J(7AJ_s9UH?԰մo PAtw Qmv0a~ Ս)Yέh_}t*P; W š p:pLJd"vR[/rÆMB9?qt}IĩS3ևiן>Q_gO+𔊮?q#ID:Bw1颼"\Vsrkr+1ruX1ғ{hev5k㍚1I5aVD"M.)Eˆј4a?qkv(m*`T3W=.\p… .\|Uu20le}-[㄀^jڵ׭۰ymv sпֽby=HtψDnxNWULݢnɘThZhM=X2蠝NrbD h;Գ'<ՖbX|gj+?@PFI= ʛ.wX'6 v )+$lHPƵ8_ Q&"س؍?*ԶUm˜wHv>#R(f;A@p!DVSHnjf9zϻ8g ÅP$v,3ҨdEitbshyfZ Yq-E5q24F@zv k^wpi$&nXq5̭te5mAIv9YH9vPɀxZh)VWLƀ?^fKE@ʿJi߾G@ېVYH &YAM/[aW\6D[76ȺÇ_qr S.\p… .\BfLwڳ}mvlٲ ޹swsfΒtxNHv:Պ %!Q9#9h @}x0#PB"U$̌4Yd@Dxg;l!Z\T4wa;{X/1 :Ez#s'}\:N!H- ;54}7' pttvĪw@+ZN68Xfv)~ hpTNjtxT(-̄sE@$.td4[Ch6rcPߊ 487T(nW CJTU#k2am.nV`~[pgBSb4~PN3 hͤ3l9 Rgg:d;d$eRs׮U3شiˆ jk3oM%,.Xr 0 V4#5i?=pp/$p$p… .\g8@@fLe|!m&\9'uHР{hA;xg>vrVHAB8BJ19g  $mH: :\<:!!zmPc_ծP'+ u0,9h;霂VPf )Zld'D 3‘Yv#'AXt8,ŭ)fC"zf)3 k95{6فGD =FP,H#G AH]H7V.ge,rH Վ@BrFQ6^U5 u*{ *nڡ  `Nu0W&[ )G-YH0irfr: 4MFbk =$ h_fv2gμ5kdǎ]+VbcH@ᝑ'N7`"V3I=j՚Mu?bwPψ~p… .\pV&H%\9wt#HvB:'XMrt* g:svNCM"t( JNEE=ha)6Z#lC…@'S0T@8-;YpG_T&IA7,#A[/*t{}T:Zҽ}vYLp P'5U@9cսc6`tHAv:فw4 )7!V_RYpMI7'k|v0Kᓓ48m$)cCD~OPa9XоhY$&~Aù)j!8wN5@y뤌@: \Zbz.r h/\fB)k׮_ź v֝R'; K9oq=ztݺu Hna~ f@&w… .\p 8f&,:F3#$; v=:C 1"0Գ Ii9!67 B2R9F6D ۜ lСP/vFG CP-Ew?V`gA jZ)٩!mS -ɩh`SP;#3wHs8g;MΎ8gAt6fَ4Y>XtM k'i8gVg$ ŹT ;@ HMC);v x#e^^VT#?{koav tASz>n/x4/֭p|;v-^t͚u:yRmA}WΥuJ؋Ȑyҥ6m)7؅ .\p…5YVs+7.ha5m s}� P-P-:J &`'Cr`49 8hܦi`(+ ||H]U@sBd{Cg4 SiF.72vT h'".fR\3[O'*BF>OĴ suydM~F!ha0Գq:b>#<-D 5Lq3᠒_֧pX\{S?*;C@c7C45g?x婽H9PN/ZOM@\A8G:`#uv/ h%aæ6[ZfU>b;W 9z={֬Y3m۶ڵy).\p… .\4 ;mOYe$}tuA/`5\d Ŋ5] x4 w |1L r 1$U熀n/p7 x"C8*k:Zmy653 2sJ@N@u(є#όh74=A!T,7v“!V{͡d'e|nbZx`s8+א%j`[\.4T(]&ӎ/rÆM_}ue6Cm;VZlي+W]asuŕs/֭JxڵVZ|ي+6lذoҚٶ .\p… `b,&vtHR _D^xnOy=)v@' hs*бqYxg[s$9h8 A=琍&*tsNU VD_ʁQ|tYP hi@C*JZoy5ڗZgE:볞@p~ >T u B7SW> eiM8?#RL8j㰆E:44Eۏrs{|f("jSb1w:\J>c2N*̄P~pVNPNR7OȂ)jsGlBt|/ k6EE vN;ञ5O$;}[) }Ҭp'=QFArvzev8xd;x!Rt}J1 +AѬa{ЊPuXvѪP;@@t՛3K V-/ʋ,igUtw5n'‰.G|d-~9&>;AE=x5m_>pЬY7ld΀Ȟ=vڳiӖ+W/^t޼_~9/1bng9gU: Xr ;wڷo?CQ*!]p… .FACx.11֌I:׾==ߡ۶<g$Ȼ&ˁ 2Y”ϊhX;U􄝀#6A`BC}aLAоH (2)Tk֟",@3h8چ`D9Cg! g=` jks\n4$ht l_eCʆ$72;`'O(?;^yV,JMd+yB~&P$S6;;gAcӔbY Z+ʎ+M x[E [E<2NUV`'^ffoD*:Vn!`Haqs Rt}$Wx&4k9("m ch9 z(Π@E9#=w~p@@~_?3:N@ڣ4:8su68pH>3waFB{wڳcǮwnŏǶm;#m=:}Ca&… .\p〝4W p񝁵оwئMrNRXpБ[_*3:o!@3kvPha#h>3haw60rs ' 谵Z1)OQudQK2 >ƂqCmpҼ#>+Zq6ݑ$@@=_II:zfI8t HʊdGK0Iw-z49|# A}38m!6;vDmto-8pNu0^ʗVGmѡhG˒4@L 6H#Kmh 1Ӑr$tҨgA Ԟ&It2"60 r3¡fP8t,3HgR-Xts64) 2nAo&O0h)퉖x"Q4WwI +R*$ gG4 (%WZ>MG: 4Ϩ(Ŗ͂P`EWWs;?ܚ`LXZ|0%:h 6]Cjsp[86o ut&4ں#g_YN:m\qW\qW\qW\cx񿜁onmi踍V;m|Mr"!P߈RUفN Z±J4c95@q ^_8#6hvYftRI3ñ!yU}d/w6 ~ wʊtN:!r',-{7;̈́.Jw6hvq(Y͍@ Zq-9OTWmj%>@8kh *GbUrsӰІL~0EO1x7R+HHm@3=in3ӡ(?.5Y!| |7v͈ 颐5B!w8y#G}yU0RWW'r+IF$ҕXq]8X++?j>ZV]q;ƞނ#_?ȟpwI@#1m)cvV#Xe$QV#au6te Zέ>Rh5;lw6pH#A3hC,7Hذ ;\i !e sӖhAP I*`ntt![J@M 9yi3tN*,̭nK9UĜ*+9{bevHd]Z!^募;XufA~p8L\Rg@ h`6$, Dv@{gDC]Πn9)`*w'9 :wwG+6s_ Kcӳqܺ+++?n9}NhY ;sC@[[,YI1:r @)G-'\pA8 1{0́OmMh }IUmszCTLp59'Q#mh,7EG>Y 44EY7%kdsvF*|fdESVghC/QKTkB$VĨk\UM6G[ !m1:-AuTHE(J&vw%H I\|}  P|K@7)Tbݫ#8NoQ\'{oJ~U̘MD r5bMW\qW\qWS3ɑr'O+|rI! a}:5DY{=wc\2"'N8CIX"R\ܚ+" s֥++@2[pK>|ѣ'OjßSUts5@cND&7F,^h {)7 w6tsJOԀ$HSg@{y-_玀9?}tSuuV'N&UУ=Ю+rSY󘵐"-KjudĞ"1ىf?++|َ) F>\[[4$+-+-,"pL쥈}U7;uR<_@@7'Z_ϻ܀7B@ J@wv*;5%}e_е1"Sl,RX5 b6HgRЁXY:+ECGKՉI= 43# qIpqn@*,ȎjdmeV*9@Er_PA{|Q\19vZF@}Ͷ#ph K8'78 YUTvfF@;iF̰Bvu j&sEwA!$ z4hhB!#~";Y@}?}ן;9:XS*Eԧռw&f|<K#Y8D/,a%d1b%PĂPbǔ+npܺ++S s}_:B' jІ[ZDDH= SXMCPk^Wv'F?֚\~;F4.I@B9`#lgxV&!ECE፨7jQdc0#1 ,EdQh #6 3"[q`ekuz;|Bfn*&Rk]5+VL3/Y/._v%6XQ&8)fAc;Ac[EZE =p^Hk:NrYS} bW?%ƫj9p>g k!zN*?Ht)[0/Zm3v~/_&9-# M$rz2!(B9=Vh0s0&QD|b?@?ȵ"uYiZ=N__`}q~N՟sɥ+ߝ1+!IR%F_-vdEeڶљ\qW\qWWF:,ƻ\tuIգ݃ΑDhnpk0VQĐs[xgv?IEYHP{5ti-#m?à :#vD&o0eSY@Haق\C62ک8;a@ Yp uYuvj3B6sp~0QJyUSvU/8@^yEp8# lGc;_o$ϩl,ſ)-Dsc๰ pl᠛ A*_|ta-{G.OtߓQ#Ef:3#g8!9rv/Z.b__'z!: zeGV]7Ԥs)Zq hWca6KىXHQ`>dRkG1H@"IHW\qW\qV8 Lr4"Lw0F*\=[+<",Vs^9UK ޒsu{R>B {fF*AU} B9í{^BxH?9R?±. 4H,ge1'A̎;lKi$9&'U):D~3q†wN/{-4N@7EhW-TcVN} ț(ɊRc]14qԆ'RF HYvUҎw\ȅ[Яg5gDm,ϗuysF47;lw6pPgkNapX ,-uN)A-G4PaE@cM5"4:R CsG@>uB}i y?~?3`sֺz~IU?J%]Ny09W?檩Cf'Ή'_Ef4vHt8Ԓh|rÇS yC!Q`#cx\=V|sIV$;^ $Iй";<&LC,h촍ƎplΎgG*pǢU~Zϭ%=J2@[ut#ttf',СD_3vzc5D:45|'ϐ5QSf.rD+R~*:3Zx睧pF><_#wN~S$X?Ɉ+?j¬v*KfĒɓ .8p?Q#7_>ҵPJU]~Lm#sMnY?q;x} >|'N#Fٚ [LǏSO3F:GD@[_o<#3Zb6 sMBBjC>Z;ԩDʿdWq$FYT,{zNcUM ԙzGf͡FZA{{r_ xžh/VUI= R?h?F@1@s 0%IH#^H`XW/8w6/☘L(I8 <갋ppfB^ 1Haeds{ Xq(8h,0O6XP_8IdEC;I͞}51<;Spvp!PQ-ZaQB"sU7{Ř{Љ!>Lg B\C}ǘDe  ;ǚ 37 &2Uy!Z'=ZU| My^A^2p[Ot/@>gY;9P0v84fL෦W&#dk=iC݌==y݁_6A.x/VVfkû"Tī>;AУ>տR߿HpL|^u1;m95iuGO忢&z&0mRIOuL~=; c@ sbaCk׍5^x衇ynʔ'O橫;5s',WB;q*J wN/]7xxy 7KK,=r'V_9!y/?q 8wk0xw]}uW_wᆪGS횤5ΕDT[\Ieؽ/;y#wO?%;ՌE :L = LV$ R&̏Ռ#qg7Dh'FJĠ :8C\,|ݺ㽷v~w/;x:,YMD,h{Xh:<&H fbX;~nC~7p YrͦM[Fxo|Jwd,XcO9|`ݻ9rƍ7l<~]vQbHv1߿+V[ZbG֙R; BeL)\yf̘{\ASI8C̙GY8Qt`441lܦFT[Q8Đy+b,q["Eo-\ɫ}Q 斌 \Oi2b+]u…Ԛ,ReI$M!/) 1܊?BFAbv L$F$#1B\"I N?[og~bJ~1&^M1Y36W-fi ƍk۶]~~ Ͽ˶΍ e/@?0NhR5"s{f@*{p5p%55]*JJJKKJJʪ k |;Jsg@#z&Df`*y3-pEr9xV273W@IDATfd'w˖˃}*NĈ)Ĉe47lп?[cYC@dB,CR"!C\z饬iŬējXQ #Đn ]Q0rɭH.Ciڵt㍿3fB+f%#W)QˈDb,.2VS}1cH-DMBqN*K F RI 1)WD ’HY(U#\%"o.YBcTQF$l#3(j,DJF$TPB0nK I\Ra0-ZDS#qI2)}ˤ-Up%,«~Μ9`gǎ-BRY;:tomHF鲝;w9rҤIdO^ˆիy7x+ְk.R[,#F@( $ag͚[jJFO2k2(xx2{ly >|8ISJeb^[l},#/WbK^1W;tѣ4&}złx%W߾};sJcO?m7m$%iIJ^k *b2 }dL A)eݻw)}sboR)[U.W e@m8q~Àc%3{Ǐ\,`+6ϕLM!,$n\zR0'|-0{W} 𰐝mQF 1Nq(ΔKӷoߧz v4%#xivJ'#>< 4ay( $[")W1Yt)IѤϧvÆ )'ޗWʄ FĀ6 $E}6DR:?T+@=F@DEbDG Ƚ{\wo&޽ap2f0%ɋp YS/yK](vټy۽i˖ /4:K/MIaa!éM6t#JնGJkGz}Gyc=ƕ[" `C$WFEt^/逃w6ФB8?6ҺG0%ۍ-[bA#C "S8 vl'1H)&*=*&* @("vAM@-^i=3l>j1857 <\#)zP>{7nsm!,n=-&͞D76YF%;oE(mB4jbuTfEJ!0:\kij3>jR 4-a5㕁3p5l99 DyһDs'"m{Ձ dI pm9X8 dsu/ (Fu&oYZ{U-hu-:g)vlSOr k֬Yrպ+WXdիׯ\z 0ox'qfJԓ9 LoܸQX`"Fۯ-1h!0'f6Ϛjڵb\\*O E CL8I"dz!1/袟,A&UsEg}aru_suߦLZ+CXQײ=ΝcѢEd!;jYqa19z{{=v=׀({6l:|#je)l"Ee2kO+A2^53hTF#d :tx4d<dݺuӦMcL^ngysԟ8q-DVɔ+`_4T!$I  S\qk8Gm۶ x8FHK㉑,Me҆DJbD" 0DΚ5_ >/(.I-"ƉxW&D ÃxR5HM0+Q:IxK y~m͛8i3 dR4)7Ăwy lo7x"U&"PjءhJ55:\lҏ+WKX#;i$j2I.H4d<0*pSLA7LFd8gƌ3PaSQ$IJƥʄ$aIt͛׿̢C^tرcGxB<<4#7>CNMZXiك eKxy ]jʛ7o7qHCc$(x+Ք`\rt1.Ir1xB_0Nc{/<]>i" ~EOi,!?(#˄Fuq̙/҂ )18LL4dVA藁bT,B)@ϙX2&8e˖a $L!e+ Nri1Ts.`?c?6T +`\~("}_n///_|رsĈ_~18oݺo---' :- R5k>_|1_Wwq#< /B("F/x뭷r-wy'oo]w%O=# oVJfɵq/nH\pu(5-gݛO@ >*ZtCZq:Pmeᜪܟՠ w@#5e󫣭&J{e샶hnN^8 #p=lМrdemb|F8@)MGv*#gDrNE ͞Hyv' G+:Yv=c4y+ (>:^fI(:^O>cƌW>H KxW{e<TjԨQ㽗^z 7裏4WK7|=.=ߞ}̙덆ǰ9m!C^[~fqlٲU#)X8O>pࠍ7 0O(E.T'xG M0mzZ`;4## MZNӇEݰav-ymێ{ӧ7}Z(H>L6>`b6-#\gNCEht9 auΝx(-Z,$1c͛0aclhn޼YjҤIK.n#jRdHSܰaCZ+.\e˖ )S,Y' ϩ>9vXn؟:u*M`\Wա)^\^vJDF" lq*ѣ'NHr#ԚQ!4РA("|^o6 "P.qKӽdzf!Rl:ԑZSYnaQGС' J"4 )ѧT;ͬ?G!G#0nQf QÇw#OڸA6\b0 amĈcY[HC@nAސi6fs kW\8l5~l' fa ,!?AG04~2Կ$(U'DJ|ROE-%tP_6aL S'YmiNfNBpm.cNi?}3ƘT.0/a>-|+qLYhF,TԌC0-O^<$q]{ӉO(թaXh!Co2]Ѯж2[en*Ws֭[wsҤ)GeA$Ȥ.Ab/_^SSӬ-E$c!'NԑifX~h={N׮w˸M!Xg8RѬdQVݻQ{Ie,Y ۷ J_dplݺgϫ{kjs}O?F~~џ, ?k֞صk}odS\\:hА#GjoIUW1N8_|oIIٵ^߳go~_8=UjC>|~9g,i?'?p-oG۷_.n>qi^iaY]vKT>}&Æ5r{%%%4_zaŊ:cGλ׿>OqUmyV41cL"ykcǎeD1H͛!&F9rСޖ-[?sNmg}G{s{Re˖1]`PI2JtRٶmFy! cO>8ޡ… Q?>m!X8hiyފc?;}t?\NTT;|i7TOh@ʢR, fu#3g>oՙtC0NȂ)۴'MA-5?48L M: Tg>c/fyW Q&!_14>C4h560=JO fmk\~ 0K;*<j'F5N<*Ԩ u>I x,Pi _v-YD$y@aO5E3&(11K5i.aP_h)?C$/I([Fp(`aCˈ"ɴ-W%/A[AGe@^FMhm74M(WLS#u37nHBgG+b)$Lq)}Q^֮]# R^xg{o?x%vDh[#Lyj_p?eny{,_ˮIF#̂wkoY[&fEËc|f,@ 2ÌK/xη+Ԉh0-s,B$5bZ[4h rO|B 3 /Qͩ$W*˲cYIFRJ6J9 bŞD7QWIrPFVd8l> ;Sݰáv3"`BZU7AK ftr27/0hbmD3WƳ4Us;y#r8O6J'IgxV$S;Ud|?%tN"SJlt_gQygn lघsmnw<_߶NDIrz:oA{H##9QC9Wt4*O1!Gg.´FϜ:WM@Q3M"0eQVLe_\WI0d&̀ї\gvd150aXdŏ٢ZIOk{6n=5ƕVZ҈1[o+PVV(tD 4K,fL%+ZfeM[^zSO=O?{_qf߄f˖."1,YzdtرÇg}' wlY۷5˫ٱcOвe+͠ACJ<|WڷHYdR ?~]55]}gMHagh'LNo0B?'zG|A\y]6($i#gX[rn!`{>7pӃ>lnǞؽ{, Ʌ5nXd%E3f +;dej|h WYy޸Qk0y1%/γrޱcWn=Ν ^}uWeUCI ԩ`vÇY֞UgΜu!RuI݉$裏>޵kw:W_~-}7oV{SKa#X֞$~W^yΒ"wGpoUTTBAT6m"ut@7̓&]^x_j cǓz؟3gN6mLB+ 0CN+S˖С~̈:tx~~!fS?zmhyy9HGWTTKq䪫ھh;_|%2}LV8ha0  CylROy2V=G3uV2~42b^4j7o>|ܹs1HvYqFzw-1}7|lѻ [I&aRp& `7¦PHʕ+q['1H2R4%b,)}O^ov!M72y`Y,MwP!qܒ;Nt\iFSGH)ayȑ3y a *E;ҧPky$1~-KMv]wE}ł4J)C˕YK2P]]&j .w^J yM6-O՝:t=w]Ì@xœرcGaI/n;Kw}7wyy++[&E-󯋷D, atDrYT G${4=#=-nABPNPNװF$ a"] F[u,"̰u[`3@:@`h+M= ^;s`4*قNI & nY}sH#Sр\ tY3 -5mߟֿ_G"?]x'O՝HykSǙ4aB+&nn 3f ,Hb g1Aca*EOWa\ (Vf N9~K/cJ/%A@ݲe T$ESe9}t# XZO2;,#J%K׏ujKYZr!cǮ^zW_=}β_[˗l׮G}rw:u*ضm-[1i#S6mѣg>}8 r-wߟ"`ѺU_}mϔ{=X0ᳶmBk 67lٖ_8l¤ZAAΝ?vz8pHaA{;u,zg_?FiUkq.XI4WSNE5g&1F*Y&1&Mz#(edrS<ƍ# !ZP_XP`<28WFyF&7 ޽[!'?c”E*QdOqI6P Ʃ,^`vΜ9AhқoCp6IƷoNhړ[P@+fqO1H< _|6R)tPC8OФDwδi0&BkS(5"f̙£Q"1df~yoPMZQD/H#tԋ.1cW'hj2A(aL<>m/"B5ū7,cIqXc, t WD i+ɋTM,0O>dĉĿ$4ocah fh2) Q En5GjDbHA2>WP6Ġ#5DɅYis\o' [ܖc׍&4;jmt3DSJ>qTԋ<4 r2d@CzpKbą,š@v2a ;XKByq e$T):`MR<OOqZ>a˴<1TQa8>zjGhNbvR;t+ΓAh{P*da 3+b>u?>Eq#Ԃ & CHĐVB:ċF$>o1c` Fx'>:Q$bYָ֌͕Y`lڻwo$UΝQ">lYY%'%ՅjS>.))at(jjy'H<1dpK1haɫF'1&H4]i)[\?iԳ"頞-#H"lgPSDh\3aͱp0ecm(D+@(^NXGÐ jܫ劀CXb 䫃xI2hf"8y$@RdvCevxg}`N)brT.$JhG Lבh&<6I%mh h;̠+Hl/?O2;VZBɄq0*ñHZp@rsS%*4Fv47_Ng_N-ﮞqE@Wuѡw>9ß՗ʼn!7~aϊVGw(ZS< Q7 E@;YTL ;lCM3#*DH[|z.j~j 0>5] "pYp(q/&=a$Sj1cW\G-/@ǰ={;1 7[Q-j?סz_Wom[)B#J}<={dq%\%ޕZO:^y,{ܹfTKG+zvҥ˫;O8}Y oұ{n,P`jH0(ʨfyO*8`}! Sp֜HYU:TvYNׇܹsРA/&R(lbڹsw=~ٽ{Ӏ7n.+<5'Nԭ\}?ȑڶm~,3^u,P1>իO>xjniV}ꚽ{6L<0ab>t㭥%UO=ه֘4iRvp㵬;t4b;Ǐ +wql{/cv~AA%K(x*?բ/=b7mڴzꪪ! =_رc|ӦM3)SP) ]Yzscy1;!f+WܿЂXf6mF֓ÇNaŊ (c^ۥψn0HZn#9r3(]A\6,FLѸ{1Q"&B);ہoxBQFIϾ4AJ HG} mjFSoRGbxXZK :bS79&OLzdرE(6ǩJaW B/SFNvn>#֠!;mΐab Mؼp#UM!,o F3;Đ@0*O#*HSlذ,0)8I.y^^4:R Fp+:'xSM%bh.C[@ѪD+e\od^Y lYКo6! D*PBV)JZ OhU\Q\:ѡi:\I5_|Eci~Ѥt ^Dc ;,ʌjǑ}sH#Կb!E8)꣏{4łtBy0̔5⪌ CQ:h1*B׷o_n.\HP/:ڴ~2deL #,O dF0k\yHi:r83TPR)~Ho:o´6E#yaLqW Rx y!3btW~Ii 57<Q5Ggn+V?zYRaW_݋)31+s`+. +䩧*//=G;?B> 0hȐ!BxРk֬'߲΀fKBmC铉 16L$-[״Hie=Ѽ^1*2v&ڰB@u6kB7g 8>v~M9fPeBus@@ r_>#|2,/xXGp8xEJ@{#E|stOkZw@$;\̭_ʫ%J_&gEZE чdEU$avx?R hn NZ xHQ X?FFZ!^%e ;1ˠUI*u"G@@L@AЛCS(xȘMrxr5ڋ/%g՟rj$ ["}8ev٠Q9#2} ;lu/eDP;84N[*Y|fiBI#ֺ7 NTpЁnz֨+V捔2,?P0]h=ut+6̞=|n0#A͛&dzUIeҹKKE쳊c"i:1^ ɖrX׫V)-)h+M۔٘İ0(//gi*BxVb ̲G`rB#{' #+'H#(˪Q,ۺuB#x#@ԩSkjjӹS U1+&Imذ,_Eu;YHaV,5QfcaKط>mv[lfq4 7m4j(BHݟ}YZ$4|-[(3?p 7~,ɵ`黝;nӤ***aȜ8qr֬B@kvb} qt aF\uU+W9B38tVݶM/ai[ئM#GیTӦMy {m)T-[V]ݙa V„ ڵmIE+D_mۆ ("L*葥K߿kƨ I?G:1j6=z4#J,_!' ,/X`Pdh:t(I !W3N5'NdGHG@e2[\Yd oHdƌ꯾JHC1&F0EcƌSg.KuOo%IC%EQӥ)t2Vq͛G0Q&4iOI~DRh"\" 駟rqRqw2Sw&ˍFFX8]o@֣x6uQhx@>!s}vC&OPt0OPFXyeQMA. WC(]@Hd,cxjǛfR7~xTQ> XmqSH' ,5wh"!Q, #d3+qhӪOiӦ(ec 3 ӺѤhwh쫯pB`TMY:Q;7 P!i[FkCF1hBt"tO,QT&ӧ:obl҆̈8)me:H1b.Oԅ[#yEJvZ :T~-}z7%U.@4>BuxU Fsz !=.ְ'f)>Aїveܐ0'Ix908i(G L8F7c& yQ#LY2}x` \Hj*b̕AɕzQ"Yb$N& /ud\!y;oZJFOHx\iX ]qŕF^xW\}`0 @( 'X]uUۡC3Z$cDW|Lv=F m!L/K]B^?_!-}Q"~a&3Z !ʲ GN>v:  ̭&kAu::mt6x-- T|ifQ҂4i7F@;3BάHCOw^P'Rde<ԉՊS'Zd~t#G60d#&Qg)oi@r !>3bcxU8QPܷbC95@>]C6xg5#_>#w y:?w/[7Zm뽨gp lj'lLs(G!Dlt8rmҨ$$A, 4 ia 3: Phxn9[2tYL<ȼ0C˼ϟ ` Ӌ~:W_rŪ%KΟ… ϝ;oѢ˖xW.?L|y2Bd̪UKI%- hRLh$,ʥdVTL} )NO7\7tVqf ҋ3cW`,n֢ijE#c#G{M7ϙ3Quf]tj{cǎ%xr㹦B$b!;a9 .df֫_|+pݷo,Gf)+(8stVA$}T Hڎ{3}8t[:fur6mڽx*4jԘ:/7o}G5Y3Fk֬/X>l"o{\zmN#GG9rwG]z3f|NE믿Æ@mEwN ׭xX]XX4ڲeڷo{98t05k69s6m&~,0Wо`ܸO]tyYYŽϘٲeۄ ѣR :zjaƺ&%>#B@FEќ0 ,t2 OR{ZPwjF3)1&Ȁ^m\:\t(KR_@}GHePAKNb7O%r˓K/O-8:J$Ie8@^z `t4iy҉$6hjJ) ZyD`Dx3<g! SeisO, CFL N\ EE=I2Bv\(xͷ0F?7VXSw~ W}g#dIb_ 0n}4oWǢy9 Z475xN2wkё/t}V5z@ǎ_㫯gQQ&/s*^_r+n#r|8wy'~z+LkWZ[B=Gz(P:Z)t?u krٯخ!"-:5BNf!j"#9uQ!C= 3xv0&b4E4Ҩg >}9CpPK=jt!H*`nN{oh7aoQ%&tdsug5>PGm8xFk8 !3Q  o&NNԄ$].T*SDv`n7oLuW|E?Z_F!uw:XI , C0g P;em&QA;3@u?H45_8 \E I69,0I5 R*b'cF^֖vA?ǻU%0Cϟl!ч:v(^O7iGv:tԱc'm۶ԩtMց_,2i b2ϔI?04 YsbV,be6cJn>WNf\L}9&߾r`s>PQQիWoR-@v1­J˅ ])WYɲsS^wu/wH}oƱcDZ,K<26Alݻwg9*+zR!+**Xdb^+Dۅ,ijgUkB>|ȑEGq:$3+RRџb9RT,y~YYR?e$kQǏ;v=#{=~;_T~1cƲ,}ͷ~_"Tg)--ҥ D>ôszkXyy%B= *e<1c7xQ L*c\ĴB@駟y2Vy"slJRwޟG裯SZh~俓\s=7g D*n8)D`xj=)MZx3cmݺun)[ d1('Bis̨O>r%#4BXIM@)3qzt:ls řh0ءtᦑF+xp'R*XZWG0d7æAw a;lG 7GֽA+H|ޡA* m5ȵhou7^Ѳp/R cg}>{CbU֠A! ̚vLԇ ڵ(dA=0疀"ݵkaQoUlܸY8aLDLu]b9n馛n;;wo{U2"R+g'$T:ޔ,xdqHkя>w#k,#ee--Z$6ƏOvٳ"3f 4!8b5K}sIV4~饗z5t%~ٲe(SL?WM+͛KsIO-Y,)HwߥI=x 0Ceqe{޵kc=ƒ) . >^1ywD S>ڵޯ߫3r͚5 B$ISg߾} #pC!K\ik&t%]wñcN4h8Ͼ8pO?UU5_~jY _y޽곓 c06m۶e|{:N1ѩ?#8f:}H!ԞhC@ۡh`A0sѦ)b:2+Xox:f}H\K4zr>TkY@ NF`B!-E";8l.͇\f:GQ9r+R&GUW dHibRmv$I[*n0DZ:8h|FcաA⠓sy4 >/Ue;T!6Yˡjs rk­szW [\;twB@MN=}񞡄>#I@[Yr{4V dv qX>;4a։$mDcq !3EׄZ_*XvYUtk.: s" 4Ő"d~;bʕ=;S"Ǭhm&|6lW_[CY8%IDu#ʂGf,M=y 7pw}G, Aa&aY>مׯߵ^{vmrS-|ͷz Zy8 Zʟ*c0~rep\nĉVjsVe*˕YT$HP \n&KSĐ+a, ,EJHJ[*xA<$aE0ܒqգF7oS1dBAD `DB<8&b%jRQ0aI :I YD_JR$~ԗH D-WEbVj,*pR\n(A !$)RFYj&C*&ĠF*=Ġ@}He0WDb%#>a{}ٶmۤ^gJQ#`8UUCGJ&#B\1L.bSM^ 4I%!#8 mN eD$U$LTR4KR%2R!BO[3ODbģ,q+1b05S/\mhdn1KF@UZň%U+!!ҥ.H<1g7ŔsK^\$;:@ KR.B2>zhR%^*"M@ĕ$X U2r5­pԾ}__3Y`Ѯ]ǎw=s=s.Ε  ,\^’Ҋnz[UP,W_?&̗\ryϞW3{}5ٓu]GUW]USS4d UK@"g74R 輦h3N@r:W>Qg/zy;:_X竟h UՁc5jPdt'>+%?G+B9ՑΡD5ro,3Hd⥙@RZ0){"jKu4;T䋖ceaȊhf4}՟S+.i.*Yojn`4~h`+1gEQ8h;|F4 ЖZ0VZh%5YX^hpNWޱݹ5*hx7?o^`ʇձgM=gCC7v}N {=šy>ʘ͈baiР]5ۙhMG (+ڲoV8pk#\(2u`&s?/7Q :luW?Zt1xzG$^-.Y\B A鉑Uber} MDz,HnIBXA7m;u6CU+,eF W;l۶mܸq ߿믿>d2f̘M-(˒O2:D|nCѸA. ͛7?9riƪXWa]*%b\na& r%!e UD(s%I,چņ#K g)B|P9ޒD a vV&UJ39|_Q]ƵN46Ѥ Ep=ZnjRB2gEؔjرc޼y$e¢&K$(s1-a"D2"aDL-W̭!rE*j\Sqz"EEA"82FC_MA(p+DAtJDn߾}ʕ; 5j싇DTmFUSL!il6I4P܊+xM5 #FY4%,QbS;j⧴X J.XXhušĦWk08d؄, qz(ꇅ;)A.:@N٠AS0,tFX:cw67?z}K-O}U-Op o % @=nW_///o_שJa1< pw߁\Xmٟ[oA痾9Pp hak=dhCNK=EX@-/eJtq.]h@jc5XРL=W`iTE83 4ΚTaSxP hFg CᝁfC_d.=~oo/O|dHf"8u%=u!ΞGr,guB8pɞsЏ3\yPӞ̼ŧCO_—'O>H"v; Lp4p%隡$x♏$=oO|DZga訣ppDI$wpV6\Ƈ5&=@f$_w;B f<m©©}%y+/hZz: pB$}1;:?rvʸ/<|l.<|N/')f1:H}V<a^Nh!bT<6 Р6=ja(.)[t_kVC_xh1\<akqf6 ܰ@vԦ{˽;w=QF1fF%!#XK?H#"i;~#,O0d>.8c_z w ~ 08rhcbWXZ.Q\1p<Sy1RGve[ `J@# 茚KPb˸NOLm^PhB hGM-\'e C"KHb$}_ *|B+Xߌd/~(b*)Jf'Fb8s!]8z R KdHYMԣu ҩϧ 9o_L׬ҁ2vcvP\F$҇R"I~> p](Hspmk/,'.^J ݟpH8g})N0[J?1z o1W2\p.e *߶Qc GΔ8E@3 #x LoyEn2ŬI”&t[U %.Gu|IK{H\"1H&#I7`J6D(DrGYQ`Z%CO}{X3I%Ø:" S>ƿCOF@KN:1c?;O K Dr(bf W@$w7QG #zaQ|wu(sK֨5̥i#Zkg0Ƴ 7 v,3%鈂{L"?yCYЀ 0DpPGfUnB h61!b,0gYʘG<kDgW)£fc)j+4dIIM|⛆z|j&qpo>e 2\p..K-zWMLjC<\rڋ7,}4CdVVV)Lle #go`}XcwQ@/]Is$q)8t$7>g.QyND*H/jƹ>ñxH%-"P,_/i_ d8b( z6SxpU4}ߑ}.|J=L  k0w'Q1`H tRh"MFcRz h2h܄} נ_e/C4XX#;8>}@]3b'\8!QIкBaFf jRgbIFGcBe7A}T̽aLύKf,bbdDa1Q$x, z9v%M_fGR//Fz|Vp{|_p.e 2\ˣ_8 tp.iyUXC hGкP {&sf@/}޻{V;nlI_ /FR@$y!^Ie/G$'雖W@.Of[bAOD l1~_7L}17 Z4Kf"ySPβ}gp .&;b2#ӄXIO=)N=;3"/Rx5^Rtզ,,%ū B^ ) ޷ىXf"B:r+޼M~_߆_%e|@sxx 2\p.e dzhme@4b2\rL:]=v3Ab-wfLu4$u9<3]|{{>;|1L%2'-^gzh2R`e lB)Q4t jÀ=.#4xzؤbZRyuI'^oL,™H`w4層8$Vs>ψ':KdN] t<}9N)U t ڟ*kRLŰ$}ʞe7 &l~$Y@k+J/ONe,4,f;33Z +Y(ޠe , 2?`M}V.E{Kklc{ܝ  IMO,CfՋޫ4GjN.Zqxx7L.e 2\pylKՂ5}u{p.w9> x3A{-~JfN4!3+ lHve&BK/oqqZ_~DJ8w!Nġ>G:t hS}>jO@?(Ktj3~GR)#Z9h%/EST5Cg8^crS,9+33߀6 hq &mZڥH$ZQS̡D&T *,APm]sÍTPj/pvs}#,Hp-%d5TKByŅ $J@'>+C=\> rxxx0\O+1\py=<<eKᦋ{ѬeOˀGnfJY5DZ㔃X hNV1/c ̬`Xx:s%5W/upkmC~aDP2NȖ>i%q8\炋/SBzH|T^pQj(]\7(IP%^OrpYD k~7x| mX^0<.hX Č1 OK$wc$/%4D˜^.୕(ˬDRBDg.GKh2Rd\8uޟ؏)ϗ@r$OI@?T@a箄rEhOW"IzaHg-="*h21E"; pJ8/NCfO+ OZ3Ha*\Ra憪aVghs L@Ԃ⬄vqf@(cF3YDь_1]ͱ h.s JKoH5&R2&;8qxy>V?3JT N(u>9w2R?5><Ki=!A[DC]"4e 2\O}ZϽ>\p.?~Pj,z^̃MmQnt'k_W'Z"E6,Y k# b@kڏxaZ]L"7(lJ^>{)Yx{>_X+㯆2=~.JE3V8eיK@(}d :HkhYOB%%Jmel= ҩP{據2pOGS9RA':X3b,}9ČfhBᄰGPMsBlbs哙PI8JPsOYF-NE'3W4JIs t14Nc蛆CW`#ăx1ک{-DK3t0k"Ny.֧l2;K&J@ -sX2Z/X :5\Ҝ-_6Ze:J>E0`&#9 KK18)/0? )s2>K'}tJ@B7E(}"u^4w%"Xu3L {1)WQ@GMQH{݈04΂K@=&7}؟EM@IS.ˎO-52A*CcO4(̸]J[H'LgwDΈb0sEA aso9B'a/FsSXt-4t$D37,φr@<Q9jwdO_+WS(Q[ϥyTTֺ: eUn"6ɼT<ԳX@QC|NQa5ƥ ,mQ! 3t ;&S' $>*uþױ/{~m C4j>^뢹0 >ty]5wf Ȉa"ABzW E2 7Y~{{wQ@bp"~c" C^0On0޸ l`#^̘3"ݭYm:l=cxo#X F8Q~mqdžIA8xFu`)y krtUN%`Xu1 q!O}OŃ]:)k1,C_ωƈ#s &#C hq:F\F%<X5Qw=+@mo)j@`d)LlM"h&NqLHrt$;N_ OƋ ^Tq:*3% XƑZ98K&A vM MX!O&? /(#XpO/,_a%VxB'E@zNfOgYg̑,pWb4A8uDza}rzt6U~ꤔg˺Ҝ{+ix[:V2h͞8;S1dHODӉl43v[@ǰmt"q,F8BgOfiO^;ݟ)<#iްP6N2\,?C|,B˅Dn6ßTiJ*fRpHr.QF:KnTiK@&sXdDxgL^GH#$(/ ,aqi4pj@ #5iӲHxXo~0.6kpA\}2"ѯdijcg0{'"̦Do$q64p:O~5pnS ly0]'hpgB hj}UyTNk?Ϲ]SIܥtnfV4VPQ¶q6׃. j; QY͊FGwwcd㪸܄(u _FUM3&յ-x}͎;aPYBi(wU \]rXTى5>{)@o!k5յ׃ժ'"ZDY*ڃ;xV[}Sەof|Q}a]ۄ׺»}mKZU`}X 1h^jݹ#_ٿ_@}-m^W>&ɼtc_9쳉Grtŋha" e'pFhUZ?%tq:?:4 eoLwlHM'~9;*PCɗ"8…x.|-^F^.~(d${!,209uFxG ZfEq'P"8}6&74H@c!hqC>TY-}߁ceU5{oxÊAZЈ` 4n31U&ڶ,lճ"Ln3w~"wf%'*Ċ3,3=M0_vcLh3AYpQL2o9Y̅S"8=Q)-ƋKndd Na$h| lr}ИrWZ Nr(? _{.PT{Sّ߭#j}^M]lWa(8~Wo~O`| qvSiVO\U9h#5<\up4CAd[ڴMu{_ yVkok{}Ł9dȐ'Zm[{^kiwmZ;n9p@|kχcʨpU΃F 4[-)MSfs w D֭ht 6t{7fZ~DAyvGCC pA{MT?aJp|싁5>M>>>ZG*v*]MjFf]nvUw\;1 Fq`.3е!66Fg ַ=Y;^^mzjӛ;-O޾[aǎ8snjsu^[ooljSvkNjeT*mcJ Jkk ݩU[??'s#WMAtq C;D3CGle%x{ h],:pċ'w! @92.4 ezH݊`ΘP72QȦ.d }(w_.Hb;Z8tyFs3+Tg+l` wb6yL6V:'Kj{1Of.F 鱹Ȍ @LXNFr< S@pgP%'ù{2cKX L5NĀA;8ԀP@s*tA'5tv/hÖ[,&KRŸP˓'S+S7cר,-[@^:7˙/ol-V}7 =Rx_o Nj*ܦ_/nP|?Lf >>AV"ޢ:Դۮ-moD*l߫vU::6}Tj^P̐gFsՈb?dȐ'5XW߮;_Si|ޫwjZz{G݉=0{- 7"12Vs~:jAy؂5Pm¯u㶇nc&nZ .~zMNoQ<ϛ:i ugDɗ<}sx=8" ;^xj=9Nɷolw*mqVfC7Y ޖ׭[qcjeZjD6Ba8I'T:x2E-ᅈ'"ag"A/Lu6¹ˡLh+"UsèMR!ML$csc/,=/MsR=^z:>ȟěٓى)E L[T6rDjd.wz)EeNXzb$9Rϖvi  UsS؁) ЅEDSūL$pOQDe)>rĽn~3ų&JK^4^EUfNg۬v[n_M"̢Q L`X9/&);!*AGqG7fBwkZkWihOVsgSiVp w=@o`i#pAZ;UZ Wtc"cmֶk0WZb yihTlt7;ݍzuw DQۻ[{n^qiwSoG(_P8hKL.Y~ۿ"/\VwՅ_Z( ܩUkOP4TҮywa/{BqT"Q㷻І;+8 z0>uCp~p~WطX|H.5::ƀICmGVە:y75wݪPԉw[Ul808)xA*f@ڶ]4ع̕-\vwM(aYQZi(*T:›'kR%ެmt/V׼D$D3[wygc޺dͷ ߸݀6RWkF{sR ˘SnW~@*kXU*wo_K}s}S@g>9G]s(A~Ds,uT,7MDuF|A tҤXyP%MSZ(Lkw;f/spR_8޹H\4{ ZD璅K3Xp#b$uҟC28 8]C#xRnlDt g vY㞠Pμ/\(όLR///3"e5>F 'Jft6QP|(jxRe= o |3+8szzV)&J.c~޽؆(};$ʳK Ȗwe/'O^I C= ϬM pxo6ŚXlrJI~Lf*ʡQ!Ml6Y!X"٪lTBh$V'D/3ɢ$a3M؞܏'9$Fq=01BYxg&^nH_8ă"I&@S,g9V[ɞ>u=V^b"30'=5lB@i)V^Du7 -LEù a,>VSʀn-*UMv^a 2o)E'XRa}aT^C: w+͝J6jjjv7X×U1{ni /5`:[dY͚c@na$JI;F)Q΍!O ԟd |R*]PP@yП:*pc@lTw֫[k[n1444g }tG0^Z7؉ t؈H;{pan6.d6@^o Bqc 1[M: /.8&b 0,!Lq8^zlM2t,~^I{{ol`{6ދT5#!#aisEBlFج"֦J boT}zl62&wfDX_VwXDeGB4#3#j^mᎆ/#D2x 6oi!#;4omYm]kU]%6Sj՛Mڪ67+Mxݻw//_H_֯w+){ 蔁ُw"p%Jse,AHB(IT*3;`X?R~l:Ftw~ѳ Kph1*"m`j!ˑր~4A;1۰s 6{&}UYcCPVcnZzefs @!uUePՊjeNνwk[{N7kL &"^x]y,aRmLr[d=h"FsڹQ٫75Aﺩ\]5ug"n$jV U!&$O݈0'pQkɄ'}~;yy3g0eބHz} \-&o^=O8@l w!5k,W"Y>4I>E%8Fm} 0M&̘/E4$ZxsبzN{ʃ{涚oK@nB=kjK ]K@Fc7'`L=B!րpB0,d.:V S0 3b^W9(pͶC&D>e+RwMϺhFP@oola~+lVv-c徬sowfwf\ޙȘY` h~?pnՐux$3sXBzcQiԚ{5VKomomvڪVZͭ*omu? ^˕E Xs f-H t~ Mlfb"04iH 8 X@C;6Tj9hۦRBzy 1ii7|`@©(.]^2-^Ai)xp"Jڽpb1s$Ύx]cUnД'3e]XX^#D3WR و&cs$?+N9pg}& hc&RB,#53dZY+0Gf7>h@'Sk.FLC:`S|M<04kz9boD1rgwL).%_N/ tHvC%ţpҁ3Чp!sgA8}>M'jE 8;8x"{D4`3 BMy2p"G型pn"Z:LXq]3!UB 舲W1/\3` ;G31g9>[Y'`1>(.4׸0E-`>5RcWZknb ?a d \Pɚe H$=)J+)X;1c.OkC]˔]ZN"$A; tvF}6P@?1mԱ4;"MLLf4~pL@L{(v1 RnDA7nִ8}s""J!b44ON|q0 H47Y h5u᝙5zΌԌ) r@e6"Q"gߺCq7T m@[w[jjZ]omvַރ7~̱RG{kkZ߯7V_AΌ 33)343YM}&ۦJX)ςd4c e8tvۥeI=>34TDزҴ2&z|T4?u>R0QgSeh;F(f]+3KEXGsJd@.򰾌 l2odTYf@g@HԱ-bPn!)LFSc !M,p3#T:?-D 30Nq6lޙ G̢AZهHq.l heD卹$?d ~AIMXFPc%f'N$ _1b4<2?UOM` *+ OFiFf "YFR#}!p <NTZҵ$h"L>8/p\So9h=}Jy\D?7PbxX&Pfq"j yWP@y14lҚR FuZ۽];WWޫW\~ JNm7:[jނΠZw5` -D#S niTnZCP0#:-#NJϕbi/_Pjl hD, hV̨5]!!s_wfwfwf(֍Ό0!\7wij!nnEi}C.q;u[ hߺOm` ^&|w/?@@ l"JC('tgTg>rДbt3U&GfI4 xz@QWt 㦯~T4^L6?G4w)Q.\<27F(ӗ+q% TҖzf˩WEĔp' өХoẽfl1Fr3D4;q|bɨ"f}ЄS4_@lcXFs2?,̙ f ~`RΌ!mbE.0&VτNPybhulKa3}ZԊ 0kl.te/ [4#ׁktpcu ..'rt5^:Q\|~ӗ鋡-_S$E'01M&̘/E44%rPje 0$ ՃZw޽SWz~w״p84fOۻycЕƶzGgG@#⸁qRٔў^Fu׈+9v q0ƺ]gX@^@3qT:"\sqX`+ 81eCf9 pA[ a[FGsXsw6o?2KB:} m\*C`LfEKwzqfT@B$ݘ1NM#h/iVrc/̟𲚈dF՜&, PeH^8"aD4 g]X9YK:IᜄfP՟3z.AhH_/Ka5e4ssJ2u%dJ Ϧe/.~ן9U-s0s2;xy&r=4F3Q%Ymلf&Y:hӲh!h1$"憙(,soM@;\ <`v%ӟc#+~)sd V(]sCX. cי"Nx8j2mu3RZE^iGYA(5xCFa7\Q^z? _> h*bG'`~ĴbÚ62cCPVcnzV8j~ oGcz;ߨޝ[m]Q@7;p3e'G@׎"1yqkavHB($L7WbӺЁoxG"~O8ЀCg^@(M5 t6qgBa{#3'5;ۈ`^zۆF޺mXRI[w??^G_˖fJ @lPTS* ZW.. Y+9e y"7kVU4.l,HP ᬁXv:b`a-.{s$M_xA&78S h )O&#Sʷ pG1<♋107p^:=2yS8 P\s@,w湀p<A9h޿iQPudcC2و'DZClJ7OSyJP]s0 hvʹڤ*q.A"`sT9&$aL`q" "cf&$1)QܥsG}H[F  2u  3dp6ݵZg{wZںQہnmj k_6gݺw iڶ rW|i[mn>Vnz4=.^჌TNG.·6=z,;:7r}mIVJG (Rt ;=u_߼V}g˺jA٪.'-p Y}KHkllv):8ZBRlLCvŶhW(NgQ6fq-7+ {:]6_NO=t,W1J=)D 2km"s_\>Zf9 ,s]>׉ q8[T޾yеo܅׾K_տs@__UΩDi!YZL) ]B,s/ }?B:xTP! :S{.8 QANu.6Zs u>z fDрq̄!΄eNC kSk,ƂW;{MNiG(2Ӗk6]rPaF2k"$=J+:ә@Dx&BYUY h,٬ n$VM̙lbg-pXJt 'Fg_@(t呒~(12YIa&͊(lg"pa{džX?*0?E5(H7ۙ/|;|ϺUN!k]7oʭ4e1}1M&g`>UZ>1g_.`%ۇ"7ï^P* p>$eVk( y h5zsw}{[ÍFovw[ns{G &eh؊لA{pٯ@ W<<޻ hޔ9G/H`FcnbIg(RtuGXgyn kFQ 7uŇ҉A= EK /[hmoU<bXa@gSPV;$yVYGZ0c(vo:edO;vОnjf?m~ h]'u"̂r@Ν;߹ƭ[w[os/oCG_͍\͔jt` -I$[:jhRτm26KmY83ccФݝG`[wyoDX?LyܓB4Ӝ+s $0E UUFw&)+ٍD+"Fjb:͹lA'rs1Іtf}8ڌ=g hJpH-3wďڑ">+YNZ*yt`Ĩ7ɱQB Ξ"$1c8$:J@_ / hyoֳ_җ{Z42О<1P}H=8Clï^42)VY&;6N}muwn>T6Ml#3A1v?گ*]muw5mhT h.<# GxZ1'<"6uOe HOHkLDJ ك6 7Z!,soX7goi'D@ˢ=Șr9c[@X ˹bVQ?0&bAPFcK=l0-Dv/nmπT`I@8ٓX@x "UDR<%~4 r7 5RB].$h`@dX: 2JdbF,O">5M$(ax13Sπ}֔M>+|0r_Ԥ8j0 xͥȽjk`Ʈ6N˲h"N-`Q7l~Umg>ڴ2U8>KJ@ z)B%8'LO.O{K@ψ?QQbx(> s~WP/hp=dȐ'ZQ;XvW;omwjڇkn5Z;^shZLz4y0>)iu΀vE*zhOyto^@C@ѥ7ԠQzЩ[ж6q8DX@[kU9 h*aQ". xval8CxgFzg7Tn~HS.A~U@/JKYGǞA (+M $((Tیw9=O5@@!4eUDzW<q`i~8D'ޝ%O")?.zJgK=I6,>pMgx†a3VKv R4 ;ItmŬ3R{*yPTʳL|оeƟƏ&Q^<XY3[pj{ן=J#oOL$_K"j7F̌c22:R؄ \NHvH"M6^ص(vzо* 4Wp#49W!#r_wЌ1cΌ}1rs/3tK$an"Vf'*4%._=4Aq h-+ČQՁf/IpCߜh"Ղ)[9Mfa*a}"Y kJ^ܜԆA" )Ye71B%hKg NW\П/VaQ9,!J3HQM0W`= tG¬$µ-d&l{=b.L,KB3F l *QkwVJcT@S'"x= hus u<@@W@CVu2YT!ڮDz^F很Ï }=;vgٔRH oYrʕ},Na9 h᝙( $F@GSDR3qHLE:tfisБNmVIjӑLf) ,ċ3 kh$s"_猂qgAG>"yHiQ!O C@eM@FWb*_K>\iC4{BMjF8kqit}aLmڤDM~E xa ~=T ha?~a̱ h2/NHb(1~( :C684MBXk(̓jZDCG:ֺsk x^M eBk{ S֘|g.4f\*ěgN@{\1٪sU?^9"rZ̭զK=;3NHqs4}oGW%%$CM&.hREA P $|` $)krBx3,9*\ 7謝$H,7"J[U}KtZQ!D6fp)A;N!v&:l"%t'sV5 ״چ=ťP%"D܄jSw^qY읈and478tfD&;LD3A/\h~ 3#MTelJӡt3\8E<4hСn 2Al(thi6Yh.k]LhmK<RwcE nʈCUpvUQq1%r tdys%z AbjYvh^AI+ɱkIR8|H)tssL'CQԨ#/2"?VJCX2vs R^fbpzo'O/H>WB|P j[bbiI:3Ze.ooj}{b7@f>VC@}aX@S"߅ߚ0jLy[@~ ?Mo~W~MDyYBh- RIT@ k@/` hmU3'c`"@b՜~?oXv2tf2gmI"< κ S"A-Vn;C@co/Y ˔Z^V|Q^Tzԋl'#hq֑Is$7'֘dg™Dq!C%t͞D 3m&\>Y!f&S g6QFc 5&;}Vx]M8Ez|p5ҾZ>KmsU2:nM0h"@Frβоnj3>{X.B+,zU3G2X5^IfnF S8>:hgFI0(F27'O&*QШ.G4O mL S3^j'J ɑbbd =GF)pi>TVNN|D@)L^ h+-haUfJsz6!f1w <3ɱǮWcp NWX.gn,U,"5׍GE&5v3=XI҈=c^"VH(#iV/e@[%8C@%A?5i9&YcoM9К~/%Eϐ!CF}wZ٨lVo!`ouڝK4%{p䑍]N }DM h!˜ ^KB$h܄5<(qщۗٮGg >V#5b|g("r_wfzf_}~/;3~!4 4lΌ)SE坙гS@~ U &N GD  KDpekp\*FDGO` ;6-8~݌9QcAg<#VMFjFA,xa:*G?9*tqha3N,dO/+mP3tQoJXq1-jk\wgM pLbӍUfGeD[܏$&*8[`eC=[.z|0U љ멑|coQwΎ$ 6|c#5v2v#a9xv SA+(WEWxq%u0NOD$hD "3X0`@Ҝm`WCG bN,&G`YHZ,Ds@<-/F&@ hi*QXt,%WE(*-# JsHL$~ 裏`3?]y??kkG~rY@xa& vd#R ̀v hqyP@ *=¾ 2~oOޏ hFI߸P@kYF| C=dȳ |yWVU7*aR $ kF8K4E=_;ν=Ѝ=Ե.ش `R~z$`Ӈ<VGh=u 0$0u=!fRmr`M=taz\}Pp{i-kc#Z@zhK@mpMaOMq^"s__1%GFNewfLtȸlxn6刀S4R AV"e+A!J|f٪0M/3F~7 \hX,A3-2]ib¢J.c3řpsR'QO$ʳTr 3*z"3X:{ ډ\"-LNJdgJ[{b8h][i1UU#R f#<ѥUUy.6f[ .@?p>GlE%JMf42Sˀ6'J+P$Q1K!=ma14#Ͽ1oGen1J65IL@6 B\؃`oVXG h"]^Iz"|/I/o}ޯGźC`/l/eJ@{nC"&aπq vP4(zLƥ7Z32c}z6A#E\ސ!_lm4[67{Aw݁`&Bl vuC@;r(-W z[eX" S ߨ0WcP@51k(e,c H%s1Z79Zg`` }\q/m`. "!F]v ݯ̕XibIgA>z$.˘]2"%Ȳp,`D L@NJ:A @9}S7 Jz} .zLp.PIC>t unƂj+F*䁆T${Axt-a+adUѶ vWW sqgX8J,7^.Ln=qD hcL 血"^>^G*7kA٪1H_ Qݬ5WXzgwh=j;݃~c{9~XZ:h;Fqhh_XmV{`^{|pRơ~7hkzMҼ6ճw hQ^+~8vkYS+1t Y"3/EzgRCDz##r_${\z,0)Xm%MmZ$I±xv4"wfwfӁTƄΌ닟dhr\L#@ie!hi1Y pO6s8M.RHd0D4[HGn\~ a3(M,Nd/pcϟ\\+g"E-d~xt)ഁMO@ VԩkS+Eܥܴ2ha& bf,GmbJf:55ƻT2Ӱwl-3LNs&31̌ӀĶD6+hՏb],Xy.ƈ0S:0MvƱFsYq);1v^A]\ed% o"9n+Ov=TmJof(e$h#鋸!C=H@7V՝jgֵoljtv0 hrm'r%D=tS@íf{pyv VM.uSj(>ghhSjt/wfX@t#"3gC&tѢp5UXbLS-S[KFS6Ά}zxA,)N$JgS@Esv 0-s";lJDfTahsX ZN/J&K0a;XDv"auKUV: $x29DRWsSd$kC8C #3i<ڌȧԅ.2߆}t h b\vؓ] \[~t PUơ&>f"s_\>Zc`H\?}/? ]a,5٢C@6/[|STG(Ӝ K=+ݠdIa4g!L>ug:8Brfvޙq@2A8u"}Q͑8IxiZhQcDP+7.\ (reWDh3S$uٲp9zrjj{ép%!sUINGV\drͪRs8?´k- 1Zn:Jj͌cyAi(e^3@s4O=-m'Js'Jхũ䩅?ٕ}cD&Pӭ thD,FGvI n6;-N\p&2bI\Me$iK@F!ckkT^MjT,u$2[άzS뀲!~qH^<׸",ތ BMO& mHv㯤O5$ n9uQjN* ZsBK@:ݰcTqNVh cA`@x").&x9i|Le :`->7|350e@N#.mȐ. lloWݽoT7mV;ۇnsPkw۝mE{{Ϥ%%lH1~u`1i+cuj fimT6j;n*.@m]AjN~Q7}MبGKQDFZy{g4 b׽grA7)UcnqaXc1in+*c0{ Mt5~N-f4{ ]w9NT, mu/>Dzgƥ "r_fU{"r_r9>7#ML (=Х pm R϶}kZE66~P hwɎ:h(Um! =o@BUs!,(< ha*^ eH_dD/e]#KI4 U NcU7qx}Yf5_`%h+7LM&+948RsN-'JsЙ(KR=3J ó=]dg7Q]y6:.͆ 3S˙3+o&;[!4Q%KL(b:ae_^|grrl֬ .H@{afOz\68ecĔ\B`@zu0\g$d"9 PUe-0z~ZO!K@[~, 1=F D'2QbҎ9+rӄڙm)7,~axMHaC/͞ޝWu|Y?l;F簶-3q|#+AC7\dAvҾ?X@ z&`PS> bdž @Dp_~n̈64qzVP@[7ƌ.mᡀ~L\vAyVMNhAbu}~/;3=~/# }3=r]jcsf´oZ`gtg@h> As:&L";3 `6?Dnil1jbJUha3ˤOf.0OL!kW$+.}>g&+B+5bQMp >S1_llB9(Ɣ m60jIgLz|7 ]7toj>UU 9]t D;Ʈbg et =R|j*̇r11Քr$m;hUЦ}V?V#.7ПP'>z Z͛B% :+= 2T2lZ"R~-yUڴ݌XGϔ[@g k% ]"p(m!=0e8<s1W䐧 3S@;DoB)shS;t!O^ߧjm_8|oy~vYbw݃мYCdM>p h<~8nH@Vow, nGH1%iᏍAYnV{d`xN,jr0& hq9ho;{U6g JbD"q*RϽޙq M@כQK@GoZ69&:ٍ;3K@l503A,MwL\A(tO<3`tf:tK=pxgF(W&QF糧K?_B+"j) U걮򌥜.!4 63XJ;?kD5DTfAkB`s*,Q1VV8q1rM8*R(Y^ūFL.ә]Y~ (dsنj7́+1el%UJCN\׵Jm,*mb33 wֈar}IO4OIMLƷʵC/]U Ѐm~>-!-zx9i|Le "U7!zznDؐ!O6j s~Wn*۝VǑ͛PC@d@vЍ tm]i6na]0 5G \6lH"wA# x?C?b S@;nYcBMQŞ!̄fDxgF徘:X.:kwf_>2RC3ƌ&v"3#r_U@~Dz"tL\kUBI {zvc h83P9K1œ7t|1o&rөl0T$; j`Jgf&i;3x$KCO(lΡ[!lyɈAcƮ& M'sX0 =r@bV%1鈙hq&lwO^艕f9bsTe7SMs7ϿB͆wF'sz#G?}?Vxf[B,;2pSc#KD/DGVpj襞_G,Q՜}p@u +삞R4P^T*!Qm/5b/K@SMgTMF hİ/!} u 5 G6hC@ -MYxK;] h=vQq",0c!).-Ș#Pϸ"!!qFFu9hwm @ˇa'hFlbCCHO@o-r.iΘ:S;\8}ٴ3M\)s +$|1ܦvnǯ2GtMm%QC= {Q#.zΌΌK="Q޹//Ag¥ -wпow}?MYLEU)Mhvtvl3ͳ"`D~.U\HHn& y f|a5J3$ĜL_9LPbO<4'd3#RW©UM3 8f6\61v= |/YiNS@Ć%$cΒ\&?{#wzbd31g}h'౗WEKЛRTG RBv TR>b^xYGTxa=O@lVϜ-Ef<08/ 2c7S#$h먇FgK%,,ym0l=mf7" 59zSMHoz-^4IЀ2ך :^uZ{x>zU?kvxg'=1͋ƶ9?- ,B2=vy?N%ˁxzhqJ~4)@HQYBe2APSvI{hx8I 4t7 9 hW^2~hm.U)MeΌΌ!Mwf_yH-*r0.ܗ@_g hْΌm\ʉ 0N8=aY=&PÍL\֓= ӀbU |"Pa*TkKgbE OVذ3G!!åHi6QZha6VK zJ"i8V(EJhy!-yh`Oq!"6qNJT@ÉͦwqzT(%; x t *؉*q'c;sC[cVd)0FGY`Zp6&q 67a섋8x5kdyQac2<@=*>K*9K/ʧ[@ӿ4v6xEP@ۈCz`DqxdK;2c3!Okg/P@ff:e:;0 4bK%4. e0+e4ER C @:k͹y-byo5qXSUvOp̈́3AKar'3XUezAti L)lKabcAՒhk*6 i314ڴIaL)(^5gC٩0\Ia]3 PcЃLdzfcHaTr@,,Ά!lŊ ŹDq&=| eK@Ý1]ob܃ {֚jmԱ|3Y.3V@ඕJ[sEJp4P ݲoW3nkehw& ]ܫ5u<kmSVK]=1e%`cz&5a!O>¹قE{W>*لԱ~Nlg2lina+>#FF}g{k+wm4ٹryxiԻ\0Tp3f1[<.n`YkԛzӠ[x As\f{mڭE)1cBѭ7:nPC7 8ACّkkSe AFFMp,SkjY5o+ps[[knMygBpHiR;v{;a]}vʹ h6;c}M0M"Vz}>>V83sK74SFG:hOD~iՀտs+_o/?׿-s_(<gg,HB l2VE(ŰGZP6a%mt6»T:3lݦJF1l\=nNj 6{Lhxv/O33ld3zdg4qUEe3"pA'+ի2d77 02xy.VUYe"s|9bjjbt)RbAie_,V,Dy%^Z8o~z~hr ScLT}E?(0Yf7$FVh@u3N* Y4+x S $UuK4Ffh(}C՛rǰs Go$nIJgG²6_͎#9e)1e-MG{ŃSfpُ>0OƥN#7Fvk9%QS"{=tSg(.̻jC6;  pnZzg)m>`R=!Cz}<2=xZFUhB'3-Zh8VjNB4A}kF?fZϨAYۯnA@JaXSo&PZ2^ .3fО _1 FF& ]눡ߓW2^]bD0x=s q@Og>N;& oO!7c(c4PGP<3ϜC# Z' ֘x8IZ"`,M_87 Al z tqyTτP~Cgy:?.|czݍa}@n4vgڧ(G G:f 6rn?">`򎛺qbRw^Om^9 ֝%2W' sM prd7~Zfa YЀz>,F"3#3Y@{Zi(}&!C('6[z&l]e1kA܀0jF0$C$aBfjvt9UcMkUѣ)dTI.;V^2{u t.,kDf2f'cd(;q2{%ZVe`x8$hjd=aОH%)(.F K=Xp#i hDq,w9uuWg%ʋs >r5:jC2 pU`Kcs;@M)M,YlRϓ&U| hx3FAޙޙa,X]̉v#3#,s_wfޙ9LjUYu"j1=VBjCcO%o,, |$;Mto`$sDvEX7chaۺ=T {/d+e *M{,&*אǒl8 kn~/&AT:8T< D*z2Zle,KfUY@ \#^0VX4Gт*Y{gRĠ; ?y=}#5~Dv2VϜ[8dgа9JmjqU99z-3v=^ZC=Z@K}N9r tnT,Lc0ڥbmJHc>: :z&|'eS:PZ9h-1 |=YZN?Uxc¡.>&Kg~z h)^/"g#zdN4!U!.l[`yޭ^;Y: ZJ )X+Sqhƀ[]̀nz{hlPsZ%GgAHvi6wźJz"ooMoh{ 9ro&Y#8kC\>u 3D}pœk "n* Ц V t6~/E{Ў.w=ޙyNÏwnuP#7wfԻ1gԣ@l%Z +/Ey]d=4Ig؄ hM"v KyYJh6a6>\d= =Ai hz3 z=-pz6qgOtֳ]R6- i]}i7? <5{ُU}F| 6!LP(5Yĥ4n5 YzRbd5;3+m-..4NollUE?476t953 &:  ̐u#z`pt,;덼l]eM3j6>Q%eg'6HF+)LLS{#3+͆t8Me{p2?=s?C+t]t ckpnÅ8Q^/tqg|f_#˹7n>KWsng񷀟+@|d%9Kp@%);?V*YyZ{`$y#ۉg j:cm1xP^=Ǿ'?;j hhQ3Wq@/D$'R~ӯQCpU֍tG${7%3>{ >/ZC} p &=; $]-}0ǁM&C/c2[0 E\#CΌPCxBMBY?ت7v6v{nǥ S@V>-MMlfXNx5z־pqCfF@;o{'^π92$D5}զ.`BfOwτȆp=Y` hޙ9>d7I?w'cgm0GУ:f~K@1ΘY<:;Ix0tPt֖f~7<&M{pX`&38d"ycxg8\Xv:Y/^z:f%=ET874MEKWceD!0qxa@:TM.gQLkf  cǗ86+.&JWS+GUee|hhOl:Nfdi%UZ1~Km`3Ds[=T m - o̮ьSe8N Qx3?9nNa_@SlۋhѤy#sM7Kg1 O kzgFx6pg?7u%Jv&?|-+Lw=zU5#E0&Qh9lt6 ~Y@e̘'qyxhTτPCxtkV[{_Q{o~XouЦP~p;:JYNw>XTJ1MF< WAt#˜fۨx}l ms3#)v"ц@#3#t@m`j)M_m`fTi,gXRVك*JKs)5 $JWU(0D3a,尸3w6Hvf)栭?T$a9e*6NĔD3\T8;kl&TJXββ1Ĵ$M>qFᙄwߏ|{T(澄ӡT962.LC;T>: A`q6 lZ~̆ 3@4-͇ '¶ADvm "^DoHhjXjYh#6)-Fq?}.<YCX<$ #XTMxKm$`j+iEqZf珝2%R2nllo$- Y,U2I23X'IUk_chz(q4}#℄1lW81+fnAL@洇nΝz-EN$GJ QtLG`PDUYĺ3o0 g7 ~hL,]$|&O8N9:5%8aatv& _jSA&Fݭ((Fng }n-V/w*F:3Qel@"8SXxܵ4h&LwN=Wr| nQ rW0 I@.@RGPƋ18<ɘ/]cW\!p %,T~Г<|\&c&j=7p^WSf6Dϒ pl-^ooW{kN{oonou; #R4޴whiUgsۖ4o6hk0:W'=`kllӷ7N(fp#b!=Cvԛ],Ӝ *X  ׃d+U5f`m d5HNޙf`(-4#oްbEZhMR:]us>I3y+0GNp)g?Snqm@h d|d\>Z#A[wZoݮ~gu_ /5}pe1NtМɹτ)MHsUjhl/R:GZ7[>:?YX0,]1D83aF٨kA$??7e'Lz22YH~:TB8' 6 8xs:(#ha*=6㯞7BXL}Y uP4awZK'A hW0aƘ8??pv||zWӴلV2)bdG}R?l7k9|{ݻVQݾ>lm]}`%07( TX2<f@YfjMԹ}<~nuI@O2"~ =ɼ@6LW [kySi6ʃ"Mͷd3 D@@ll!zmjH^ַӵvm@);J@;!6Zڄ{a~͞<BK\ޙHmRτ*a'vY,A֩}πeX@=t0S:`U XaZPGjY04?)L}V _+1Z\3 X ߍ=O3tA(݌Ypi:1={-9-/P^3jhY{ H7Ѐe9hOPI[YNG0+?wX7cQVr|Z 419a bBI=_M\zN8FC@3\YOțiJe ̊hLgR>recOȍϤ7c~FD3~ ]>f}q }B٢t` g~ǞLgPfۖG7r䫗ֹW2J@  )LD!4> h geu09f$caDZ9h:.p?u~U߯[hn7^;ڽ{l[nM2Vxx `K@ԃZK@z/9ow2oaPq #ڀͲonV'm(k0аFX7;kVQt@m;7 b4v=V-+Y PEfOS"3Rτ}~/B:9~B 3YuDH"静Z*$^^7GG*Bf>J=}BDA鑃Sd~s8Z)Xn6RfC&r8?i5I+.Lc!"S:pG)枉Yb{f_63C@GJN5:?H,gOH]KQf !/[YϘ=u6F)V0պ5y V O,`fUyFlFdzt 6w)7MeOkY6ɎcfiȎPR{gI4 5 08.`8y5<?ބU8fn)T}kIGƜe< de97F~<,L Nuz@#xЊ7}%;zC9h% K(p85"ˆ1h 8z#|Y (}Oj=Oǐc10c?VVIvigjC'[ux FgypgWݪlߪﴺvkٹ hi9e1pͼisMh?Z" 衴eݰN/TÏtЎxW!_,:{!nR@N%9p@7>~/;[w<~//Ef?X@Zm޾ӹu;k>W8hZpygUVQ#JIJWc嫉7NyG - d6R& J>B=k sL(3JzhMDD"D8K3c鹈*-ϛ/N<_O]Mwf{d@ymB(f)c,K=1)-&F19 bjd93~7G솪a hA.0L` dy瀪gjz@Abz Ǯ+n01ՙJ.bR Ny˚Raw,fc ,!ޙao`5йS|ןÙћY<N67BtxW kJH,lgcow.X(ǩ"xoT$7H;ЉB"7=qDQy("$hP@?''c_|1pl\#sr$f)w=3N$,4mIF+T @,A|zLa ؍Wg_OzkUC4s!6rc7+̱q/5tfHYuFF_}N|9-chN?N}%1̟:6]<%[~?#HS.乏/yDŽc`T7~5I@gF._MA撹D# G=c#8ߠ+xZx^yE !5upLI^< p t*|N=g~߁UqPWívzռܹ=t;Ý. Ξ?ړK"3h6(7kB]z6a}iΣW@Hk<֢PjtV38wiY, =`-Q!_,:#[ZYch@{?<>`^"s_wfwf\Ҍ}~9.Lx܏q ǿ۞:e]GFWE(D(_vda/m-[mr_l|e* 7|JҗbÙӦ,qWBqp584,+ +>C6 BOs/=Zd*%NaQ1թnL g\Dt/[F/Ev;߮4a=f@Mx5QWGԲ9&. 8$S%鄼'ւ]03}[] WNiAN\uTۭ[^1 䠃4[h-3I@*;B,os~=Hxgb\<#Ī9QB=*|PꅢUYv->ewf)HI5)/Wڅ?=anorG_ΌΌG=;3/wDR@~gB>Z3.^Ƣ.,Q]6:, MYu28Pg@9 #(ݲ04̍G|l;e)9fk?EcBg3Q~#;3;3L((M(̨Ժ-zhrӢUI$YS"3qE`u_1O6u9S٭ O:! cL oB=lV F%`5 ? ґsN_z9yј|OӨ/?7iLƗ`-@HgkDL a&P}O.MG/,DbPⲁmJj|gҟ hA3x# Sɥ8C6ȓ "o/%Cl찊6l%37lHПZe.Mz`N 9vIC+X7w c/ l=!f?O61.0݀N9{٘_hκwݐhQFΛ?=B}s(s 0dDzüv+%E/ G_7}K_}OD5lČ.킙| 0Az<2S3.DcHJKvm +1CWu8lzI $X]1]|h#FnS76Ry>K \VD Ψ0< BlxDsֺpA3cUIJ{9؅Fu/|xpʗ^ڬ}ޫT[dnʎ;&B$. MoW3g(Ijk */TҙqD-a*g8OہHxMK̟$rer N@Y>30.88cWK,ီُU'57<2쏭iA r_cŪ. mf4L+B907e LY{"AЙ˓撀Ɣ)\w$A!zqd: hU@oDfM׮ Gf&4yI/U@GsĨ# MlkېBNx>Y@/}gBƼ~#zoƒ\iVkUʵJYVТ Ѐ>R@[YԖaF@ˣ XTtO+pWbFGi]!QcƱ?g3\t_/ F@'[:K\~G(%s\z,s{m rHk6̅zQQًΌτЊr(Q>qDmwOOD. Dᮾw& t:Z#˵%_H<# ED.dzy8za0rJH)l텑8ҭt%LX] /Q AXQHf/.QTz}@ 䋱jsrm*ŝÙK0|"Bmak䠯0 k_h~aŬ`lC7@x 흙')kVDfnXmצ`YST$9^wYЀ?\Pf H#IPWQ>#-(=lPz&wvJ"rWimRnd<`:0 htлrغ΃Re\i~B驅:=` hA h>e wK{bК" M,v`N1&+qH(̨ yurN>ШN4gdLshc}4+ۓS ;0ia><%G>]irG\%/4 6j{Q~#l2 o} z~M_g{o 3Wc+)'H@ htaܞE 63y_X=wc΀&,{-lD <BxE 'W=R4氕L=1;OA#1?Nك ^28ZHÂx46od7Av"]!E%Z1ۣ3bĖ3a=@V'4DT.,tc/;+;KjQf~85Fy:eH^Fe:|p\6{Q7G1*QaYܙP*Lr;(=:Jߦ49׀]7 8厵ЀrHL`#PWQ>1*C5QkQP-c5\N5U ?v;(`*T"fo;ov񓶕k{{PگV*Fڨ 87V<g%\4g sZI˱mth]~i9}Pa>}\rl֟lip h eE@.:Vm }d[|8Z*xSݠr(=(fz*坙 h4x=h9Њ33 @nPß$υ^:1@3VgWN|0iS:h'e5iJ1g(p_FL~yqv%Lm Xг}<^hDs;mJpONb1 !Dyg@Ѭp e- ^7?o[yK@J/~mw?k>V+}ZRhT`^Rτw[@׊Ny^Q,6&|k34 N>*: oRPemNZKڙ3KƵ8x #c/,,w]tf|> ]~Njo:,BBZfǔ@[D[ZF\`+xFZp06oR@DgSÑtfu*:_7B}@(E\xBnCυ rX./?D%`<1\f>5g7bV/HSLyaS9vetfNg< /Axj&Ē/cX" h漀ϏF.h',*ٯ#tf؉w~.)9ߜB0d άYm=_ؐ\̮N^άǗ#7?: (6ͻkөKuX9PlXtW@̶J]d.ڃ>*{Vddr%^ g7@_άOe%v3rr8{ hCW1e1ym`Hd0 tFO^Q*3}F ]4lx U!ij;uwu42˶Ql|2D-l;;mь,.,gBbà)<[LLA2KC}9xy^pyg/υ>C2%8;z9zq02^>l19\Ł(g]Fc^;\gEуv,BHeD32Vذla29G.a;^ʮ's89W좝Q Ͽp;8Z$;_`\^ g֢(4g"H=;YpvRtvʬǠge/Л#Wk33!ZSĪhf̢Yg\җ'8y8{ɤT%N]M=8< Ds({Tf}ۋ yoj 8F;` h-Y(7w]dn]] hLfKKb%i>2RPQq W@rB hE30_sĨ?p :bC?p=f?0IHfH_n/*3@i_i~;ÝrRW{CtXf#m]*WZ+U2tЀP']`+;=xrZ)a:6 >2j/,|ƙ,QuT-*AR!0{Tgk.D!)l;hAsS&M,$vre;2`NW b ;3/wD)(ܹ_i;3;3߾w?Av?zMп+?K{1i΀IlgЎgJ:KbTكa5z&/fƒ8h ~(A}QGCyЦDzn^C NN IMޙGkk.1Y.a<ήN&bG#bhד0%%-s"f/Cyٔu-Eg6>/ya"n@4Z.X1 VpA2koNߘ’̥pd\g0N%)TÓpfVf; x3X$>_d'bprd \b [Y1H,3A W3J>k,g_x'>?uaWuG< ޘ>$f;65sujTz4|pB%P_̀ _s_4%8B@]G@,~P {x : m'Qq 琂Tπ hj0_sĨhI@KkGs{A ? B*LZAN'\ޅR!lY"Cv}fmГ-ֽ|vlvKFڪTHa ec h|+ۅ>3*\nˍ\N޹P`!.3RK|5a{ĖʀV=,Yc/ *ъٍ71 h\~Xrlu/m<B'Jg`'W&L4Ǹ8,mdQEy((z&tYyk__J@ &!Sv[= -6(=Di1-;plxP!uн*1ASukh(L2 WhpS%R=ta""ލe>u90y+ccL~rGc>Ң! tXuG.YΏ.Ez^vz䝕z6 Y=hleHz~'~d䵱EWpǎzNL.'k6J}fh84?I<\Dg3ΈIm.]l !2&l_e4(F4C Q fîө0"uy:y%>w+6{MU MseϽv(}ъ=#? C"gkw:76y."Sdlq窶4\̉5=()}(X0bX.f&s;|(^wc@gz_Q޹#;|p{;ݭ{[۷??ίxk㉵b4<@b  VhZ4A@++u/;3Z#Q8ŵWP޵%>+dlDFͮ5}6Ŕq<":+%#dRCAF#W[larLg,HLIN qR ؒqxT B$g{ӟx#6%>2צSWc7s*5| `Nv'Scvaa0fY'ڡ롴-թ8 qx#P <6qо4F@Єr͸SI*c4 h: ,3#'y#z;**;;n's-;XMkAZ{݆waO\Q էO{y|/BiV'Y tgeB? ͔a !<T#MB\l:-#v WViM=C^G+hCĻ(ћwUޙPG5'NhUG+\מ^ X5? 2ZJv }nsGwf_ΌJfwfX@߹W8=\Q/ޠ;z,( xŰ-ANg"g@w!aPx~0ҁO^VhL DxP`ckCÕ)^<0=6\]´υ^9,ZLr1+`ҵxqg:y *fEP G09r+oDb 坉aSs#h&L~򚭭?XUê,P’˫*c0YL`f%Ce CŚ t%צҗki x LpI@DˀDzeog'ҫc̮+ݬ}^^B *آegL|v,Gz;<f9ŝP;.2yWn,"=$X%{K@t^bnۍo>T*Z ]X"peH@SI  ( `?4*^ۮDŽ"4[ smIV=K\ٍ+,9so a# B4x vͲ=r>W!z,f [@!%]9$MXR,@SInt'tQB{ۧz&_QޙޙgBygk@EE G$Yb|g\EZA#6r*!9R4O_NfjlRl(dqQ86 Z`>lLd.g.Mccfv;#&w&0ytO4 Leak k3 \?0wc5SfN_9w;y& 0 fR\aڗXj(F^uDIgtc9hq$:[]M9nOoL pe~_ _t4n5;Q hܰGz;lMo1jxG,w}%2s: ^۸;yAû ,/7܇~ԨեY_a4dλL[\2˭6V e.B6'f̩$!:Sr~C^{1bwX[CéGBe=b*3~rSϣm h\ᰜ/:#΅QaL_@?aD\fH"0X0B!:?0aa(qq 0`/!H[,Vֳ_4U;.N$&2VsFi //G z6-9a;?8'' ;ɖ\a Dq؍ᡩY!0laZ* UJaͲg":Znxru*14V6$hqu`LãFi˶f™-kDgS|pҥ/{'Opg3Ws'on6=0GUm0iQ=G:e6 wQ@'?'߂\݌^!ʄU:e3g\c<~먞gl춲ÌȌ cTc5YEDf-{ xd,Veb2>} ]<:#4#k Z&lԑaEp)ڸ7cխ ݷ,k6zC!g1.tJ_lQ=/R(:hAxF>Gz;:,N)gf--*bÖ,@)H4>v?ܺɥ{oo~s[ڃR/_jZQs h; [n@L+J/4+fبJ2jpo_ηTuGHg^h8%1FmhoʘDhwEPd kNVMt.}L<)D6DY(eۣtw; _V@+|`wfFCq}BGvPن2}q $h,R?l5sْ ]0 ULcf?zK'vx 8zc E. _g ñĢ0neG=e6k ǭ"I\!k]AP|azX٨g|3fDb)]KɮEƣg^<"6XjCw1cU@,vR){R \@A^,AXcJ+љs7Mbף311Y؞$3VYe= ^WĘ('a`rt14PЦ xl~,raq1* h'Frж)Vnlm:<}=1~4wփr  rc\-Zj z&ܮmTRD [,z`g@Sl rY+6*&L֬ZtIG < u6 ?d ,ioSGT`H]V|t3Нpm$>(eۣ,snM,q|48,s'w9[ tAZ96zڋVƇ x\54ll_QYΨ1OeEP ]ۃ3g>ZhKpt40[Fhf{s(L~z"8[Kg`8Xc7$/&&kձHblhYmc'0ȄKZԕpfu$rq^(S6%CV6W[0ǗHK@@ j䵙W솙@y"y h0^C!l}N[4;d% R >5 1[ gB+cN^R hl #fg㚽fTb2#%2'!?""Fbox ԜD8gǶ! h5x_B)J?L`)a#?z08gN@;)%Hs dX=b 8=~ȎHY h@NapB>Gz;:Sp3KZSx[:}Q֦xQs&QaCy \AۦXr[Ļ#ak@? jƝ_k}kg^[ &AVj-B h#ۯXszfG@WXx:_v@]BTf$R:jq{ގGV0FƐzfΘ{[ c/vp)*}#A1,]0вU!#-_#|`!/>6 ЄK@߃{V:sD|ru1]2]/ "hFygFyg؂/;3,n;3Z6'rf&K),VҞtf0t26|0[1|ybbFXy0:?9;#kq\?Ь[U3){(J9;&'2hr]HbFf A¨tz%cʼnR8fIgcbVxQfd1N╠SFEGTr%AO&צkGg=_ gGF:O331Zaq(1erPFMlvҴ%Ό9J!aS[]SG@g/R@K)J5Flj 3aZΫkXYd-qHnvieByg:'86 [^|DnfmM$^XzDXd~"x~ዿ,ЅF3C5q hAsAof{|vzH"+ ȩ5‘ C1L[ sXj{Pg1,tI||d 3y&(׸W|vڻWV~V߭a۪`nW Z+( h 2mBe˦Q@WMcbZ׋>jAH,CjU_*% ǁzO}Q~3ތBXY*L$aa!QЯ ݞ͝ \)BL-T~#J=wO@o}[2mEW=|tk=utgB%D3;3;3'ҹ N!B%D_~X4bdfH/2`0+TA{_HHL2?+^*Ōpr7Xr4`k/݌Ɨ, [jm۲8q- x 'L#ODR+UưIsS*Frbu:NX´Pj mu3E aVy&SX4».L ͔^ƭSRQk A[BĮ56g.E H `(Jt*kLFь=1tЃDg>cg|z4H@hl3I|SgYBKFgnǞљ[,f=[YTp=p+"hQ@Sɩ_3u`q"vq< hw03/5r*^ C1Єz`lE%Jݏ4nA쀟vW%Yʃf>>/8gy},=76}x?W4jc\kVjɆ8~(a%h8JYI^;Qn//m_XH J:3j.{X|7}0_nKS3 T$ qDsr qBfmz'mFD/Z.ƍhf`7̨PjȈCWc C k gf4[ꇶ wM Ag,h*QL%WMu* Zm@:M~4S5v9<(W'>WlaЉB=KQMs g.yy@m);q>3-h kB?V`(.!h$Nވ݈.O+l0\9(w-̚=Dg_. >j{T>.eۣs{>bz$(|z 6L h.,ҙ0 [ʆ2}Ncyg8$qu(IC6zDHSeHWñhry GMa V۰8e,4f]gSq 54<^09j{ F s\˙s7cs'P4kthcJ<'V`;xj*i h.Lk68b@4'L Aь.8s)U,4N٘Ⱥ1ZϬi6@–9 T*AY:hhڃ!znfn&Nވ͡,mo0!Hp3QD8v9y݌4OtJ(V>P? g!*se?~'$} =ǟ OF@  [M>%ٝ!;=R&Cm 3b*sĨ#(AZ=;d6-j3 h,G:tlj?bWn0~*̂z~P@)}/﷾yYx-Uˍ}#zVW+ZvG$\Е e@˻6%(wK#a#=,w ]أ#_PqdZ^pִEp)_7q!b=s'\蕁+>/h e"0.+ygE" :b 03D>elQX k.F/Tpod'hk5|-YlQͮx对1iu 4mXFwl1:\1B+㉕FlJ8a$ IM҂*. ZOYKnfݒiyd40OjX&`:3h3.#c)nYVհҜID!]buiaͲr(`.!f \5b1%8kn\g;hƣ&"2;5L괉ryv-2sȜ$>w0!L< ιL|k^b'_;ZѹjO9mY htٳM|rRы ~p;n;.Ԩl#mvF BK\">k/ۅvUlz,HCpňRcTA`r}ԋkB8JpL%Q"(je|;u3]Fih9-lb! s(ܙRs؀2QS®yfQXRTntTj<G]y9S qtQτ5anZrГhfi~WbV~y~Uxx>2F ij-@gr #&Ǚr ^c2]@ .B45t^-5G*zu86 ,0 ua_Paz9LvCCgPЌwNTШ_0#HEf]bpaC/:$4Ŵ†@u@{6b !C8vMiЌ2ΒfAZ{6Ͼ~->wc<1_-2+Fw#<eRwP, iڣ-T*-bA@tD  N'슘n_SƠ(lA542΁P$XAŝ 䚥w6ya,D.R/-R(VvΉq̅b.,pDp )<ζz uh MXz}<>ZIb@ruJm!Y&fҔѠ e&1[tІTf#_ `} [̏v hRɼuTճs7sЦR^qc=9h/@<ܫk5vF=㉐9,$:hT(Mn$i*<88oO|Kz!Z]i}4cEL]@׍6W@mj&|4 Ql &AE's -t^@? R(kqO C1]놭RcAfU%O>b˘P\_!eeJuF1j+td*s BU~c7-oʵ]Q@Wkj;3 kEe֮C~FK(rcYǤU.j{a.9Y#u'Zj>h{lL%sCƲ^_ 04᨞Ra԰%5KGmPC$Z:w 9*_zIIQτ ek3EJp пZ8#% c(%SVޙ7/wD僢,-3:\KƖw 2_yHs;>wr1mf8 kS3Wx̃!lYa.WL_n{"3"pv?y#qVͨ-pHuٶq&lGcONz]Ih܉-aNyI`rHzvTbٓx:U2Ώ?׿>:rς6%5_1 Z h a=1FNYPqxFͩ|h#FkR@+umxӵApq h##=@6( < Iɯol>S|U/T[U,AzVSޙh4h; d'DcFE{ׂ'v%H@s1 h8mprݫg"2V(׬o0jrG6_ H{~1`F/2wfz&H"{aA[,o?^0X"h%Ǣq/w;(7k(ܑy_Sfc,*鬐W |G+tftD /F 0\C)ǍA}8n|zǢ >+snΈAh,1hH=c ciu)Z`0jt`Ud^Ztj 3/M1S+צf.c + GOm5{!}%hӗ\*m-d r %}t*1>(u0`À8XΨB90'oIݜ8ۯ%NY93EmvQd|52w+2uq] SIx/%w]RS: m! ( h@Ω|h#FkГV#r@'<%plrBxF)>2K>.E؁go{~q?_٫8TYg;s{zХ*`EQ@v+΀Lu0 CJ3ur¡9/I]Cz/]|vtvN$.A+u442&/fTC5P2;3L@ˌ_}4xΣSÃ!̢йӤ/w+(7݂N@?=2#˾&; 9pht-FKhܞ#z&_sy_S&cGKÉEP*4v :ӱGWCnxd?X4̻c]s(ʮwH.C6 F#\5VHPU /,ձ$`)g+y k='V)` \Zpa42dDU@ݜZ6՜MTrm: N$kX,aڮl&a^83ˑ%MF3]޹3K7FԍFbtĩ[RJ}"0S9lrkB=<::lY4>p76hnF};2j=EZ<z/5 Sq}pTG]K l YҔ+%rNC1f] h%[%R×Y:̋Z#j8NǨ_R XJB3{x_@y/w-xq܃ rrTᨒhжx3s{zJ\C;W1 -F@SnOhyfR\.Vhf-ATkx&`oO)~|3" v1t3})+mvwX3CJ./fTC1 hC_Lw6mϴ{DR:KP:߷2 hε(KH@on>'{[{FG}m<,s(`be(n1l!9D{D+h/|dxԳ?OD}Q4'" .uLPVd*`3 h#M]T Si &Bp] RX:' uN&W&kNS4sryKmf/^̮=V} 9Ӧ3$.^NyJg/M؅5Cc"j#3`xճG1w#d\d4 lCطw㎡ڶɽ pZN:s=jpcs7Ͽy|coIWyێ@g60a~]mi_r$Op5H~-sJy#6g)faQ@ѹW#G `j]%818A;pϩ|h#ެi$aj)Zrrvih/B Q["qW 0唕//[+mZ+S޻k}ksoJ(mt8YΌV(+2:_Wk-+orB^m6ZZRV7svkg8Vix3CglY&5E6`8kζkN*1eRx lU5\(Lۯ3;b6Zt oL.8y;{הz&'gA0^wfwvYfUhN9oϼU9kq᫸ &7bTZp^۟/?$ɉ,KlA|`XŢedXZX\mNZ{9s;hǥꄣz? e;/ [wɗn 8ZY2̋GAy1.{ۅ=Ɵ[Ž|{gWH@WLtEyg^\rKrm3![:>J2f}܃-֑ATˀZIǪATQDl}$3У3c& qxg eF5QnBtOg4Ǔ.G=l0|M;3wP_RWЎsiξ(Lz,8'.KA3:5Efܩ0>/ kGwGW }qg=mHxޑhgQac2<T|y24]]3޳6Pzyד/MSk},wgSmI,GSB5T9>YO<02^ lD.MeVR iTϗCK![@Dfe69δdvcjxf}NDyͶq"iar̛\nLf6&g0 0Af.H$2 G-3l9/I-: h4gSF8hgБ^y$r{/vO SfkNw<q ԩ7RL|1!:hA܊m']6H@O.NoO|/ݰ)շ5_ƞ` tI[ֻ d )'%sՖ@9sİV4+ݏ*YW Vf4etILf6ass`t1/}ηwl6r tk&Vp ')$RڕaAZag˟n \cv:/Ž-;.-)iz&tT$6!5&G%[].5W ,A()T &0_\:e̱ *(gptm/Gpb1@bKpnhv23@"db1`L{g;jxGk1,'X|iGBFؾ2:o]P@bvgsc O >DX׳85tfk̆YZЄLg,ʼ:vVf+J;ΆI6Yv26K3^dg36ЦRAxڂrti3JuT@9}+ѹYR+٫R@aR41c# u\΀fƃ\M_|4ֆ&Nތ b)wg@K ܆S_C3'O=tHBew>tHvrw]YI K\eE3s OGbi20[^7~hcBlNMS'vWй<,u-`Äf-a9"M0B3$$v |6Etm5~6gCoȎHi+,-EwbGSeaĩ ʟ9b-`(I@6Ϳ Lu6 ԕWd6$4Cz%6X$(6/3g‘»"k /}ΗZo~s{~[+J}O莪مIHJw]?Jf(WJP)o4z=xGZIg=?fd]*hWI W"Qa ޙ[@ k\O Шx3Mv:,jB]Vhc#/ kgȇь΂Z._+*ŪE.5|4TFA{p{9*.9Cpa~lKR{B9 mbEV {x:d=bg) ,2tHF= ИH,2k#3:(5sʳQ'f@j'録X n2a!3ftXNs&865pBbb'DlC*=]UD3@GAXvbSg =+F8ά{gi?/읃dE]둙X8xfdT rm7^NB`P%&hinμʞ{ ˜ 4BNm Wk-E7k%9_^7ƿovkeC{tv(t'mz̲;qжwVHbЀcU|I 0<LJTDEvDJ^uԆ!6 C1 h|ƼrRn,\#=L(ES38Sf4` h㠭{d ;2_lL|nLg\ {6*~{{;/<4zH},wGj=# h-Y4,]n~-ULOjh ?FcKl S q h8ܕɫхPb eG3R.? *QQQ6 Ѥ-dH#/b2Pzu[D坱\0ěgHHr'5g$0Ϫ;g6+uԶU⹷=>PjBegFd7YG(#Ma:\jcmV4=I=2憂̲%AL;~zMs]v${)>w5>w#:sC h[=k~ȲNr b4t$)sr#ɛmMs-&~J+f_Xa,a}:}{2g!p 91^t^nM%8h1 ®`ז5&|함숔/ CX4r*d㬐ݠ|h#%yJnˠc<s{QKzKBaQRC`P8 g,]}?޷?PfҬ&Sk(tXkVjxX˕w@sX`>#|Tv~d([׏4ZJst#ݳ['ɔ&g~bWτΌŇΌΒ"*֠auA '}9n9ygJ> \@yvv ٪.c ]!?^OWCx+i M( M!{oz$Yat20- 7+59Yбx#2[E厰M8 Vs0%/hk.*HpҴI&̀$/d~'/XBH!`DbeîYЈca-m42_&9+t"vF3d )cjsvfp(>{-9w=2si.)sp @S.;[H*B~3թ0L®<86bW+Xx (Lμ׉Ωӷ^\Ϛlhm=wfTz)}}n||=Vd1 \V؎&#* 56:%2hC1ֻP"*CjxG,a H(̔ qDQޙq9Ӊa}K?o{Zzw!V(?@\m*+V9qV($KՖ)Q+vw[ 7K%|j`]-[yg1ǃz%J1[*K7AJ!b/5'w p/wDygG ʸkiyr¸\n6ɀI@ٟ~[d4t\40\sᅁ(8i]rgBz4 J&pi>e=1yhre46;}&L\C!%f-1[e#al.T 2Jr8b.&CPY1,`Hb&,Q~bNޙ!LP Jy=T3[fFZiድ`9e_Ϣ&fM!(q+QF4[=m3spSަCMy!, dec |1#4J=<8Vqv(XNځkщ} |x ;n}c᝝zU֕PnzzJ@JսJ^2:W,vr͒M FC<5t,1Q| ݬ4{"0{@4|rZ"c=ޙgt{P@*+t'/+ mz,m%A%To5awؚ}Y,! _Hoz. >_=Y5u9|u%j#_c p"X9w=\O(&3԰x\U)\k~x|14Uf&e]4:Wp X#v~`H@{q,s/f h P0Xr hMvR kgV@{g"wsj*mrG*r堏H@[^\/+jvY*0 G],Cl%KLJ:0 J4rgUV"osχMZϛxYQcДUr;eK/t;72|Ӂv_@Q 9h F@L KcQ753 ,s.[cȨ711Ih DmԳ~x7uПX|.:"2?O$9uv+c ͏F.OϣbXce$/ںV+TXԑ f4>0. *_J$\ʬ%=hI. 8$-37R58Ȟj fJpSXj" 23!tFaV3372nf/CdbX78y"8>@==\~K+ch,L dijΗkU-6bRkF| 8y5lP.If!zeT2g,DcW^x_=!ygTTvٍ}:g:QڇD{gmk!A{Nt3eξA H)|pRg "GJ{gƙ3sE}MVL^R$J/O~/Ak D3>l룈SQuHbp픁l!^Bw༶FkVŢvqʎ.uB .F(hh!S^xe5,{r]>Zٚʄt4}Q!!viţRQ_=V/4+$ kz%ʦ"p# m<"O&BWpC:VW`#{:u^Wg_G>tH7BЮ}DLH,_b'y/p1C;kB@JGT"%`2lKpObkqb*A{Q^ȠJ^mQaBS1V]>[v\MԁvV￷wno/|~WgcɍQ#dgK@U8P@q6ePh> \>0syb0=qo|kCR@Vޙa@]Ϗ秓7a;f9˘*MŖ KʀG[0xti<6y(ta$r.x<4^ d-klXby4>NîVLds7fν$.6g2@Z=}\P:ȣANT'`3zxx%NΌo48  fGaxొ/O7~K6ȏ̒$2X 9ή !,pMU!+ճ唍OB:ZceR@AQXJL^UjCr`/ʇ9b]wsX76Ị2f hܪ[RH[p~LꃊΨ0F]^Gp;Y!ʃ~EϦ{e" >eWZ{7{VW*[fVGѢ9+XKgc`mF~[ߞ,]A\-EjV+Vz*} .I@MK'\Ij3"^HB֮,h h@ߨZ:t}Fy'N>[4!ci=/; z>R[@׍nl{9!K>:䆲ϣ`[fRsd nXMrKwf\^Rb'飕J>b EP@^ ] ]A_"J `SPJ1yi$|q`|8~of/;+ R^eqq$ָnq+c= JՎLR3Bbbj=P&G,3CYՆFs-whW-s%R=i$.$he:hVmM2kD&A2e7䠉fL3XNklp)Bz&B fRD\lJaX*9$Tӟ}tly:din+4 lw}/'(Y=34 A=rC$ʇ9b]J6Е`+D:t (6 6 %z*y .n${bh4ݺɃ5& (ı`F]_=gW hC[D#ԜTGB P)R{VGKמif[ +?*JYЦ]h+zM@QxA qP40!:t>q!C8k EYMݧC@on7wv;wb߶2ǟ8"!T}HtfLP){b\\KDCcƉ@tUotq04?C|"r3zt/D#]]әuŤf͞HbNgOkܑѸ?;3PfG S`Vzfw/aY"ǒwfG(ΐV 3l}\2R+)A%z::Yʬ n>cqKSSKLz٘N39­J( qVYbNKtrlm8{kЀY7J+LbF"c= ZðH]4{i+8a9F̛yK8;[SGA6%8>tVDd#aY@.9g"eD  GCB# 2KgЮx}~#JN v^+ҔzD gYC3S,a%h/R:KwfdM~~bGMy(v'/FѨ75YDsV8+k#R@ݨRtXIk%<0%{26]rU5z^ԱSYBV*i\u~k-A:Hp{- )JEygF'Mf4|y_mM$~pg'>g |: hRh/ XFK,MtHY=d>GgbnPbFryǗGpWFb}& `6]XOKÑ!5m Z8;" A݃hbYzgK-E.LѽCdt:eSn (P!u ű0/wb(41;.|PFbKCE,z"Ӛ]/sְ#űX؎⮑ԉ31dbO+ыXFc!AXf/mf;R:Sg/)DjMvS!5I̕ƚTz"5CPԘIM2錐61\X՟2{Dsh Vn./J8zNh2X,9sVh3΀qv ="Jm(%dmx2ZeO@bU+ X 4:h74G 5#de8Wm) p'KUx#ʇ9b*qfZJxR.|abXY WP,)J{;|ac^{?]jUjkJ >WYDsV8+h`^\;˓A`"օ9&HztkYQ%W[~0(*sJsh(K ((W/{bjZuVE]n,Q9+eJ4@h hf.cj^K Vj(GBŇbţB NJ:#YԦ[vC'{8("YYcxu^88dlVwR hǪGS>\0p4ԡ.+.Q~l \e+?{+MУe{e<6F,J˰"0`mu]p _crcCхZ0j3 .Q ar008ZN,DGl/ ճ?_:q^*>6/뉹++Sɕ횗Ѷ_ty9=ǰ3B`+ =뵑mUqf/$y8 e\oVH*kb Yqʂ$Hp$H[PhT M)vUhCJn, -!hraYg7OFsdX9ZX+oXN = a%5C 0 ^AX>f8rfyaZAq#Vv8y+U@khXefJK?Z_4=ivIܛ5vM㚽ٷVggɜG9Y $S_Oz-uܫٛ4NK$?pkob`9lÄDg-qg6ȾtDibH5D6]*z[dۊ؆!pDtxU*B'(T>` 9UˀKsXH,kxR}Ar| rwm\pW:^_B W({4?תZJXsQ+61w" ln EWa$YZ-UZ٦$ :t`jeu'P/%G~;U7Ny G1(}g♶e*x͜V[ڃn&ԧmtIPiry r#PR u[+/Lh/ wd{*|]}&.qTIS\?*Icts{qۻwO|/O_|[ٟ ͋*`L$12} +3ZڣۣwUӅy):Bs"8cN.NWйMf*Sp3b6LƱ\’Ŷ5qAE5h2pa& *l&f~MpR ژvrLe [=[a%Mtf}Z,2VjΜ>}+ PI,w2 6 hr1:uw"I(`ܛtpۛΞp$D3ϿE=~Cb/ٳoK21xobF̜Ȟj^/+`l. htЧ_ǵO:jp\gI+!{/cte[`Q/ݕ{aQV̹pEm+oz,`h-R]:F4YA3&j&8KoPH@+(ٰ>ՖI8H:tԐ'enǷA [PJg hjΌ]"lA4)UJ[eT~pwibzQ)VK*TJvܜy%X-ZPnR.+TRs'v΂XA:a~v٣ہZ3I( xafר>ح7kimG64Ig窦HGAygF{N(/ܑ|+`J5IgvнBx7!]FR溩ž0nZ2/ _~_t-,>'g@Q=B߃1hi6h&V@x=d*]#GKCI^hy8\ ]tpqIxߗ'Sf-a[KMgLDf&S^#UT,ÄXtpCRKaswp n-E3wfC6n݌nVt`3EDrYg[M< qx PR^Z%wfgmPIg/g61w 疃LgwT5q,$$63a&1ENJy}njqi,ҟS_lg?99N;s΃ h)f}=kaVK`lӮјM:}4VḕŢ.j$NFK? _n.X6>f@z=r[o+{Z gBm# 0;3/wDy\y{c3Yd@qjCKQ_/~?ǿ/=xbPGc(H|&$ Qm<^6!=1 !S|1rÑ0Jg3A0H=%dy(<[([hl4 lFl f\ybK he8p'lr`=kx3 2YO^M``>Vx &NL%WĪB@KH@}vL1-6VYg3)`)VYдd14t+Ͽ$N:"!\8yР$h ` `뉓WcsXvgn'l,3Uf/g/0C \ʸ==3Ͽ[iSà!c,1FGl= h})^M.?P> ; 9.Dydk[@#QC9[(ƣ hGJhj775Ć3 , |]>~ag*aʶm?i}kswBը7?L( d(˕bQ]n+èX@Q@7,+ 3Sj"T׋Gwģ,/ۨ3IR'lrZfՅ7Zk_v;8YѫFzfn4MCsyR:bjtsl6è<|4#DߎlwreSTP8$Rg _}I@U-}na{H.N ^Q^fe(:e Kw`ti4=$a@d"iy|+ajtjdxbo5ڗҢ'Sk':;}L,qhޅ /Kg?t撙64 yk.R,Ʋ@3ޡk؝yޣ2cP@ydƬ+(*{̜}%$}&M̙w2>%8IK?_~JpP"k=\`3 13VA!%2K)ddDΩtD> up4ţqBh(#C,Df_G}RZ_z흽ZAhkZh!(Y(w+P*|P&t>0mAժ\;ك^ @vFt6:Ss7+$>=A7K#eG>0bkBXe^ocBJgU0m\۰_+L+k;9;խV@u|qAJLO7O~Ws7Fkc1d܆v{y =bA\Yo(0]QԠv<K;p0FCᅩFk3&k/f?^x(cj*w|O3#B hm"M=AtU@ SI\G"gǶ?43CW2oPX@{,7s؀>c=>iڗy W?tX@˸f`gkE <;g ~DZQnJݿj}k{~A_ofެ?ģRmTgW(6 h F5߬nM ʀw]hSA]=$:.;tA4ᝮl{qBmf2>\jY@D+Q h+^(TJ, L@ 7v[)[[e)DЦ*[O0ڟ͝ { 5K@_6-T6DŽ G&3kg賱3Gñΰ"' R1+lQ:KGFcәSKb' h/FI,ƒ8ڀeH,\lL$=!"ѣa8_g.'Άs*L8X c0e,aL GSnoL6T aˬЊ@5l/OX5n²dAsФ)y:QiwjK>6t#%ꙀR1s[eLIh liT҉Y\*;=icXs#}֙O L ,2gν>[S7S'o~쓟'???8yc$&8wgrʪK@&[칷{֔B^f {c?}_̽bgϽEb6³g,S>Y_8@!=|fy㣍>EH2_Ϝz=uvr&|3VXV}ݵ*ԤAFYĊ#-pA}!FMFILBnPBݮn hzthiQx%jQQbnSY2zqKcχtK18e=hfHAhtm4[j=7&7zeLa]_/` lJgƗ1 &Sƭ /\-DE)yD0BmDPRByry߀CI`b5aPf->web\lwfƒ+)}NtpXҫdZ/ hX-+f>l!S«#]E4 %Hw rtv}3U`,l3W ĸ!&)C %s§yM8J$fJnk!@Ҕ{L'?Oӧ)4)}_|S^~wҫΞy-erǾmФ Ͽ=g9כ}ُ> ga*}ޣ [kq|9Vg>9/<.}n3`mL?Vn7Hc![qx 2뎀N{ML@ʺ`m/ڝ !-$w*ԜiTL}[(6b 5N VhlP1![m2g߀-Iv3ga{a+c }_d \I>NwJcYOc]`GZ4M.|􇻭k;mFd/6ߗ4ae5β;w MjQ`fr/{5dܴ0b×mn#סͶn! ~Kj/Tً 󅔥v5[e7Wma85CxQBݮT>Rvd G} 4O듖;S u:FOkS 6\r9ꆠeg22f B:k8ALR, ܆Sl GCK /*_ wv~o?|Xkw)^mS{<$ZyɌvbP6YlzZ])˵]\k֚n.h/c8- VqRe:S7I>5?m(F+W LyfVla6+F9h}HRJ׸_y(>e.swXĢ%nP|$wT|F m,6f Xq l[ۻ\e'/Oֿ|_~.{ \0KK*atdjDQ"law2k,Lf_xcXZ}0b(L,z$hjtbX^)\g_8_Bţ tjc Kp,2kI1ZK `44Z"8Vhik8MbX9u0cSɥܕpfc*cK!OMgJv6>0y1o1τ mFeVóLp K._ ۫쎍>hn5.dzc٫f/͜u7R莯F={-8+[9+p hj:OFwl.qgJPV]6Ί78[YBYC]fVWK{lr'QrӢ>s>;3zЙ|9,?>z쫩ӷsAAIH([>w){kmAx]ζD{аNa}1v-Mqt{H)B> u:o'umWZ6*1ϕAZqn ͻ0:h%,˘e'=!FIZe$%,{BiwVn/{UܯTF}#:h ?m=Fwj/FȲJ3zTU*YZɭb]®ܨLn_qD"p }uʷV [@+Q^zA hYm7tZЗ+6ȥ"^QޙQ~#yS~ }oRRhormk̕2=Пş7~w;| KpOc9h#dأ^3uǦps͹ І-L_.Mg_xs*1e1z&^ ^q"[OYpKf͹lNJӷ/_z㥧y}|?}tM:VƗ2(MXW2mP8&U@r~Q=AQ쌬Wkyg~5tw0_(G:Ni:e*I@]״xݿFhpѭmcp{4'yg ϩkR֦ЌotnܿT,G4ooZ'64aeGY22̐t @B}m6uMmN[Wm-LE/Z+DfP:+ Dg7k&Lda[UV:Y!,xQp}\)j0r$,*$lS"*ff"*`+ hT:6NJ ?ɮ$MD&Srp]D KHM*%٦H} Pw PPWQ&Jo] ?#S"$%kСK)E\KYEMUEπWwf \/~2X6RE,:ʧb+烞/kү׵ۙmY`q;/Nf%j6911 26d[&"X3+KxVfe+WIf7BC2b[s+˪m=-etbdH\#tVa9@'pUXhZ k -~Zu ,(2olYc6c ]p٧O׿?+7_~:*P+a7ܤ)5^ 4 L6Y5 6)yP&laIr⬩@#ăQ/X^lHRϕ'\BxB 2&8ԳO),RƇV^i߃u_S+r<bj_ڌu6WX;O['ʫI@nB;7 }nh|ds e6bC>4mpw̉B1c GO~wlkj[&7uM6neI],I&_ ؗXu$y3fTr,`Hxɐ;V Y@3 6qʒĝ,ENľV,쿔KCw, m]Z:4nj@C@]OO H5 -ŸD w@&SY%4= ZrTZP$T `ZSA3G͒0ߺ =]@0D#M.6ê$DDgB#EJÏ@ݹbt9;R=\]Si?2k*vani3 f?1?[>KT\#Q\dž2ЀMaJz >!%r!%@J+с˛.60=EFc/E$ȄMѪųE$d/͹ yy2@|hUB~, 3iǯRі(ڰ٩C E$ "]&GK2Ĕ13|DՄcL_V 1kxZΚ@ĥ>f|շ^w7_/^@%(LS{@:nDM"T,7FƑ}ղDgs'vA؄꜀1XG|~/lj[\;Ta{d]nhztm {ƏxCԎ3v9XݯgE {rcЍ67:wR6[U!,Qr64W+zls)- 퇚6uo$:m ωr< L4#nh;6skT{q7u3:hZ :m7\ qAӖDp<3#1#z&*OMs"_!w Hwl+^T+']Z<81U:Vry.os $+ r|i`O={DF^KAz~/!ۭD͉8b%G3^ Fx 7)[u>Dzq аo]zGOWo6y3Xfyl]FIh 7V 6c}4 DmL}AanMܒ噈g-ۚi*X6Ҽ~& :]} gHe}_詺ms\@KVkfQ@׷N4wn=)V#2XQ:zOQYT+#;,XZJ ^J02L}gZ{Oy8;%0^r^譩?֮of hQn@\]@dfC~-:N LU", ` \UPM[ <@qjv Pwv0ߺ =]O\ |q2xuHMS\4Uy^ ΀gCՀ"UbG$2Ҫ1c%"=☣{2 h3R_ 魲xʹ;|rvrj܍*ٕ5Jײkگ<%mT,b>žx=?c.[$=:| c\NDTO(tMp8eW&ai!1IfK[:Q-a>S{8!+$ ~R.[+y)t;K؋t0,aY*1Pax2~P |K4 ٌ ]M{l\6e7o̝?ٯ~I =ܺoS`sTϩMTԍ%3 /6ӈZvx~:͢EpC = at,Dku!bq?ӸC㾵 z؏`5*\ #@c74^uljF/L߷{A؂q:Щ0^[˼/,RY߸w}ƞcScqSӁͩME5N' 5tl;VX_PBMͪgś)Ƕ-x?l͑ڷ K}#sVш?P--(`2:쳁]5/?u3zd,Ӥ~̀/4 V% S ';PS#X:z(z]$g,#"8!d񉶞-][O?{c6h9s&HG@8eTg=p ɪPn9DIЉTϴuI\1 ,ai&5x9Β;p}iЧ[zN6wOum³P}x]XCx]j_0\ؔu|jiP7 *xDXdƋ%˄Lj7ьif!kw &RqBa=Ae+X5ݹ4$E9Fr'ȝ=K虧gm)<N͢]8̂k D^ V3z*IDATY%*T^VM0 `IGC-͜K89A2@Ah` VFufrn d*"Fa+zLCUlZH{~yW˹F}Smط޼zNs\{^ ]-tA-nR|trS.HH ^rBZ/j^s!G* Gm4HLK9 Z>@Dw]tDMtt!WO^CL쪫wkY9Yjoh,Njck͑N*$"yQe !Ct慉%^,Ԉ#/h!+tT,fxm5їA摗 |%|c8YWqs(_|W}[Q_z}[k? @V!g> }A#bd$)}}|ǐRyag2Tz}=,#*";?34<#mz oh룷Z'a~/]6&V\$pmjڦDuxyà9w% S{ק 0{Ud)ҠPɨ2&TeGn H\5ms,_`s"wüTL@EstU>t`4I0\ J]s\@ra)d68H@LedҙÄ"#4:kkB9XBJ 8% 5D`8KYmb[}|h>"tSV@׷57քH\#鈕 h5VCA" hD&e0,!f:X cVWw]tOԈE9f9*ť۳4jЄ); N}{U@p'AF_?s%*&i[E\(81ջ°IX2u%`|̐vXO G:DfZ2ΉN~U&ќU>Ř|Y0V5=lrt˙372?N[.x 빎Sp^BN\@Np4(z8^4ݛӊih =on P]s"L@spj hU@M а,`qJ5^&wbHy"w2^h'VL8ʙ D8;Kw #&o[9=og {.;D_Ѷ2Y{6»:|;qs™~K7o_?yVzͶn'GXKF0qU|Kqh/ %>"5u_ؔ-97~#gc kcݣL=ػ+z&6a3>7{e(9R58tt3rfIdir?xc㾺 t%!ǵN{Be9wNY*2!˜kSt4uy PEs9hV![U,CH0eD8}T{ߙ֞SA2>}%B@}Flkl"rL"ԞI|d-gK^|އJڰ m* {ˌ7- } MW"U'J@X4 >FQ@S3Z]]ЉTHW,i0AR͗fYn%ԭҁUa~=|y?w0 R@6+%#WvE\=_pl"L]IH=K}\P:H;,qfrVerH( h YPi$gR@*&^+ oi?0q;on<)uWGhY]uJ nz)c\Un6a\kӶYrgt؋# +旫D]F]V 15Gksb1gam Mc M)|VztsCi4(؄6TzE@7oi]3.,HDm[m8`Lx!,eHp*L(PV6H@r5΂P@3 _ Db)UzNv(=&NwAF"X(cE4rd~U%ZHE.gH'hgBΣ-GnhjE(?,S *P@xwI@;K`7 .jt9H CXyo4+eN@! 〪AUUa~=8y?%hV+#9B&3fXBZQ 6zHA,|ݕLSs>YDeQ ;0TYS @Gߩ^@:wtF[9W tbVWYFP $x$potdne8}g;q~]DŽ^T}\W@\%/L.̕;*[&Ĝr7)]dQU')Qw PPM =3,.2{S@4R@n71tqdU&jbГ& 6ѶK%A3haC|5ʧ4`_EIbXisfQzsna^T@ ;Nq܋-\|?3(,#et4:be%f 4\(K t9ѸOT-J@1 ^p Ձ)G(CJƲ;UakAb::=Tl$9%#/ b="G^2/W'AfA2 4D '}-дH s<~bU)#/?W_|[~o/o tpb*Ԃ- l5~d45ݽPk!Q:4k[S??uRc8irC}N}B*T ǢbU賥M.ai+pܴ}|k3̝rPeF87gBY%0ϴ5 uJT(lhL ڌ0\l5/*HKVϊqfI@< 3 VF"uV('xg;XG:a܍#'aS]}&as I][y{P0t{"q$1YH{$;=~$#^ ΍]Z:6wnlojhlߐZK٠E@1r'jpQe+$񭪀fPmm5It{ 3>٬0?{>yYeēTR=T [G"*OĈ%Bϛ4<2 h%HTB?eR<_7x7΄Uix-7\A" 07]ܜbN\R0D j2jiRZ"R>A@N<6z,5? 摗ڎ#BL=#/֑C½sj$%l+#}͇j)EڙM 'Q~**C+_?ޛ?a(ov2$+Cy}` #bؚ `0\QD`wof,̙=1[J4atj%ul$8ĺkS U=r[35h99%DŽ[lk>3rǩ`\2ٷص828DP.z]@#͝j8SDKYdz$ASu\mW ˵4pGݗk=9Twiv-1gg]9z^ M@~qzbU3xY{Hd/^=tYv>p}\['R"趉ߨM@k'lj[6ŸZx1p'Kl%dP& Vи5Q%TUkHwJ 5?M =ȧ]}JY 4 ëЂ{zT<Q&/PGW4$`?A4ˌP2Ftȇ L rQɞa♐aҿPn[ ,q 4N >J4L1j g5͒iΫ:$ -s Lpж:7.MLQ"iʑz\V@F8+$L"~t9b޹ sb|jA/_=wT+{gI/&_oﭰ^+>i1®l%@Asy%c+M8 p</srs"iػ)?bæq\wsj˟Sf䠛iڷFdPZgfN/|:5y<֖Og\m?>ml-}Z';ȇYphɼsejp)}T\:tJkq> ˸}> hi}UD[4'lATgp9p?~U+z^}J=|)+{. ]!z/Kzbxec>xM ӭpoGRG;''k|(+;L >6εhx%@@ JAU"2AFXPgXT6%(tv)O];5Xݿ/Sͯg{×гM' J89Q\FUbmqU}&DPE%*dE4 F.Eh _?-״9ӻ̯}xbG2]?J07 -[p-h}ҿ2?1SQ7zK PsP.ºF=a/^f>ӕ75a4hKR62wpKNi~R43\S6J( #DuΡM%`LVI"@BcwݒڷrԵDioM'6յ [& ;׷OJ5h?T0_C>Bֹ'a=N89gc0cO3b IYI%ݢsw{55@>!4S$zP:KXrUz.%ҍpk(zCWKg۱8:7wL6776hl\: P @jhHCdP&>5:hHLRfq,|]QFZWT`[U\)r5U)=Ԛ~2TKGB{q9^P-|FLn缗6\ QMȹ9,:h%R0XZUt KSп&aEƪw%G-Ve/% Q2#X$K|F2}Um¦|a\D|*VȻz^^*YJk_ 7_P= h"lj>[pĻpHttCA^vӆ7{W)Q4FD@,0:D;>A#Z":Ѣw23&D#2Z%R,A;R.㒛.P2̂$`?vLT T媰+Тc;IO$K9b-%V᪚3lS` c&U## k5F^`HSyؔw :/Mr K%n2|V,!a65p-/drܲFV33Z~.լ= (q.[iVƚߚ=wS_y|g^G{o%V@GʠHRVh\ik>#`qĚl}'OllZ0-2se3b 148SdSӁ-74M۷n*iܿRɭ-65oj_08365jc )IWekˁmA 2.ǪJ@|cލQM)-\uû/ƽj\ hTDL<5bsi%M83[LhG*y#8Wr8-݉ޙs Xii1MMB=Bbk4M85xg·yDgc.#5s"qk5W W>wy| Eboفx@V8r'5,M8d"A宁 sQ~`my,2֔[EqzQ,zQ"+% hc:&Ε@ɻ|H JdT˩!FK Ha_>?yķv -<[V+ N~x O8.C Kᠫ R҅1LXɌg WEs9jWs8%ϕ*$ΗLkkza&[Uivν W@+hDvUNfnΛz!o,>DLt6ǭ.STtbs89 6q"(DDyC̻o`camr0$8 խȅt\d*_ DU/ _JW ̲ R7ђz&؋<&lu\ϵ,T{j0/|aV4˚9͞xP鰚 Ulw@5 39Ӛ;q3LNLq6Kk͛ٳǞz^ow^߾4#h'2xp>c\unhܿ!|rp l75aOFGR?kԦ1'6&AìnfDs tL=XL8,yV65 { MB*\, ;55ֈy oMg 35)mP]Dkϱ΁SihHq'>"9!} XM3uRs8%Ŧ@2`@Y}?˽;zv83px׀F<PƌA&W@5'ϑA}"/3fBY;rYm?g8*R1 ]M{З;.t?,?qk*6jhnkjfvLT h@ `. %,h9!IZC+#¦Ka_>?yķVpomK6H>2HK3 b%*WIhϛւng5dn󺅗э {6oj[aցMMS7&p'Mcre }Y2yRabk֖[[>ԴmB]}l2iZuU!Y+cE:3ZƷ55ulꠥV2Q/`AIT=}2<|X:ԵLַ}rr9 uswvꚉ6l$$?5xsmh,M~A4FOu] a :7|˓!=u!3!]s"݃/o$ T5qG ዀP #!#\=WyHЋy=#LwTgO>=:;N$ ,71OĜWT/~pdjrH@YrZUUCg{MɯK LU@+K(MwpҰOAz HAd&*W `h9k~ΜH|:7o;[f #\_1v2Œ^%CsͬcjY\s慀WPgB:yZXgЉZCC\xk hsD9C&\2KgmZpg4`~*lBhhXƸb A3bY[( KZ]//#/^B"$gu*Uw0/| '*0Gh72 PL>iټe|&kf&O2oK%W(λ` 3]_(s_ڿL>LgO=/S̛};{owtE&\ IHsM3 uˁ~쁭>l@ф!xw#D!>L4'"sE#5q|m䦦uk=ZlkN MF 5.3U@Wqf\s[[&ohx}džKRưZY2@TfQ\p[Xsa!ƱcF}+櫊YUhNw%vHڷðUU:PP&hbeqtV3sPǒE\@Gw2o?!ot>3|s@/KNu:i"N!1vgnmsU`^|$]/^]0j&m3F&kfhX霷K ^}w>iýieJ7[to?w7Y٭_2=_|ů/+?޷~÷ﱀ^ T@ShW ZIL /k٣8n/vҨ*PZy1f667&4M߷5[?_6^~h]橍):X=`t~i1NfY EsU1W`k`-33K76mG{:VFekDs\429y;5c Q'N91NCbK܉YH"5n&n=wfFgɎވ\@P '֞c~; M'8ۍ7Nv:3|]zFM!$2,B@CgpCKgg}WM (Gz& Eüs@cLr>I@c mǛ;uM5]A@jHl jDvtZC$uExXK_,rlS9TI@ hSb`wpUB}O:I ${* h$R@p>ZDz"{$4Ga9N4?j'W12iUf|Z_-yI@3ǨI1 LE-_/j R֘dL5*Ut_TMT + h_1+=('U%d0Xe&͂ݓ w@@&rU|PЀ~+Ͼ7|?[w?3+'ٮ(h)\Q@_mlSCka3OeU4Zؘrf\H[s4=mlC~HX;Jg,^ڿ 4gVKg 9$%umM]S[[pk]Dc6aA^bVAל"4:&6wml1ax$iZ˃])A FϡS+i0-I:K*4'ģfޓD&׬|Mh;sW783|t{߉S]JY(Nwbv+ aqtje?|=} z`UwH-kkD?zrВe+I)jxi>pL>޿4_@rJŞ = ;sDK瑶Cm-㩖/>ٔ%Ӣs+'ỉ:ڡ HcPҐ`ʡZNCl)yg.86PGDšHp4!' *w[hxN :WC;ӛU:0,aEO}k沆eZ¼[~nq>kVq.W6܏4Aew3N?ozs?gJ3/gӅL!qieES8}+ą=ooڏ_e^FLAjU>Ӕ K<aqahPCS8?@;k(W>6YVr!78D$6M`bc--VcaA@vϬeFbZ`Q@Jr`KضIOYZ'QokA`*Y24X1!RAX%9L4 Ǝa@8KkơTv膶C=Gtijj<&2m]G`#{h9=;@+N*8&;LtG8 xgq<هow;o>?t wd<;tDl|ja8=a%LK*oe0\ a3T7G<4zoۯ_20tޠ#ei`us͌_SP\y,N_[Y:r\>s#Sm--؂ =/~MV C3XbhJ&TۂZe4I"PH 'By?@4 4Q2#ThBx<5 QLDl Z@6LZPe۳E6%RR /a*OAgͶ  rp{G)U=\:V1]]w |ȑq8y'\2Utޱ,Wa~y68y7Œa"\^;+Q냭v`=iΖ*`WVMs B (0&1 [ ;[E6& -9x4;W4u#oܜ]̻ vU/r^QwsVYf? h_673MOO;q>>+\O{7ޭlaZ~jYWSsrwlJB~4N?zy~ş|R@X0~"/O2K(KȒg;'rB1/CikDY@3ho4V+_8L!095)5?'RsfcmhO]76Iv|V2Qa$40u2 yoGE4'"q-ԑ}nD܁KB H<$ Kx0@snXB[ȊfVGtyfttUt}>]nC$;p Nw>$ ߞ{M'vsJseL P #/\D)'/_84ry`b ADF.*$F/#bK^"M!0+Rpu`$ 2z&bf$];tgNsgth[TKxK |B@[L@  hɊTCG>"5 H;Șvz&;W@3*5᠉4Ar`aV4k\:Gav` DF!M_q/^q'_.!tӆ3Pxa+U!]'NQ.G(BeVǪSBLAP3KLU(#\7'SaaLzMh*w x߰ ӛg~Qǖ}Σ;6U:A9$U:à]B$$m,gtdESs Q\&*a=d#b*w]s9 hK)XLethvv,P~:$K~#/%a)t%" c1 ZN7,x?!jVVk_:M8 VDdMlP"7F_ s7aC>hNLд<>'9fB`:3Y6 74^([`i立 ?U`/g 3li:[f^: rmv ߟx#LЊpo3әǮ|_}ͧ?s?+X| c!˂qwzZPD.G>&}~ݶsK#R75Mo:!js"R"ckV 7DzLlkʜBfVL.&!H_qR a ",tc" t'lt# T2fu,Q²OXA;xf`\ $?ȮK/c lsc$ G,sJPN@41zKAXMx+k :@Z0yd9ʕѫqw5"t=×{/ (?51>:ȪV@8*v| hf| h@^@[!]xr>qew)@J2ج*ğV! Fp"בЀq h'4 hWa>]F)3לL4적{ut]OAُ?J߾]0 !rUfE@8DS!<ۆ3^FT@ۍkND idb>cޗb `Xq kV U4cL@W WvOFO0dxG5lY|ɐbyĭn9Xm؆/*;gXVZZ&k_4G귁9}>fI3 `zL]3, &<9vjmX*߲X΂a-sYx-[0SU\s_z~6Qn?)^-ݜ+JL{LƝ_03p÷$((gd]5沖b zOեY!_}ҏ{_~'H`*5$UC!:= 1#yQ=3~^p2y|}了[;kG5Scie.ljҌ䝉zD\.BYF*#kD殰FK7,˜c8z&Zz0gҙ1\ TLr"=<D0vCqgFD@8$w,W+ Es9G \L~!{. etKDKXK#=G ʸvfj,N@G+}â}^=uЉz9H :L|&g@ͼ;"\fU"=ٔ*s$ hpniC:U 9=-O/YP` !/DDd&5 hO/%0X 9**KO5oind*_$r5S&2H L=[v`}mo_^\r&"+ "l4aE ^Upogriݻe3_?-twsN-?>)|0i xK/2jKBxp<5126A=2 1?{+{^}7ݷ_{/ۯ= {DVX_&YTL\@WPRy? ˦ϵIgUR힓ivp#j-͇66Lml:!w D6KR>['-\eDr%MN9k=XB֚UPLcwbtY3M&r ,tVi"h瘤'A=+',B($C媐:?r JgD)4~#8z&|cřA^&&׈ G.s/mz"?#pG/ mZ : h*f l,J}8\A=t[T@`أh[TKdЋ&Tk\#:-`Q@q0ӾK$#6Ip,3>0%N |ˀ*X5M;*pU𔖡l3;"Q@[yT}!˓,# tVmVYt\r5\vX E"4AS "4Tw=*w.欢g毧KyX%r"|V3깢,UpQ  ؠ r0\UFsqy ^i8HD1 @5WChJiWvQ$yR#43`%c\n,AmX2rUqv.vD ZV:6R&$/*]aum6M4<¼WwYzAU0})tws ;[ۙx7] 73liZ+jc^3uiF.LC7閩M-P5ɏy=[0 373/_|ů}y/'T@c}]2sT+MIjIlNMRonAqGmn4M4"0kK֖ BL5,#Ё}$+DȵC^22ǑY:e@nj;0h=X2,ڰq3V&cZf^ Ua}ç3 9QMs09F p~Q G/Ɖy%sihr"}G7O`tc~ix|#( 롑+C(#yh+QD,a~y) ll`GeLA^3". mԂCTX"+UT}eVN]0?ċТ3},r&gU@c0rPU.LJd.aY2,US-Һ7pVt"tVŘ\[`B͐V2FB0ťsBFGPP,*whsgNƜ-\.hx](ݟ% <')ZIg_=grt_Ӽ e#Dz4*fix htJY0}, f'繦mC6Uh&ȴ㽀i"]|to$FTI|yR'vYB"%'G^2#-3򒁧6u "M֩C\Ztbp F<_lgq͛B.K7/ş dJLAg\k~1W ]0S)B _{{Vxf崼6쌙rY,QyZ=İ ;_q>0V0u4 =<_z׿ޛ7?e KSBym8P8VsCFDV . 5^&AZ2x`sF mmx`Kjs(gKjYr1 nI"R0,W+#r"M@O}JQ,.E:8JV>΂#7znhץ A-;^>s͉H-s$kVa᳣.;:0zo w#gGB3cp RãF!Q=W_Q;x_ў=?0|NGtJ8YE0f[+#ja0DfI@w^=xtW}RdKDsxr qɂh>/N@':r?t@Fy,Lf Qe4fZlN¦/Wv_.1,! Hç+fU@'JgE gBZ9bP4/Y@ jE@S'h5ær9D.|iڼ}MZ1o[.$U9sҏϪ:|ٮx-C?6hq/)+昃ꮔY\:'QI@ :jE8D&.FkM$":v,{ޚCH"ey9gΙj%A6q3Ŝ_ۅvvX?Nglz [EtgJ?l3sLVK3zqV/Eyxo1m״=gkiXxF~9s>aQs>5/l@J>iQDFﬣbޖE`UR9CΛgoe/;WOowz;?_,7f0/\u ȉ>s&Ii;!C6&75Mljۜ:ƩÜY)ad2QP3 hҙId٦DDڧRm)g䎓Ds$(3+S][{p=tz`Ȅ)hVYw7JggiՠDn%Y Ȉ ngЊehPPt_}çI::#gFgG :w$% }^Vr9e"XaKq69]кթ@hJ@&MI%|W x,*zCbꙐVC;Q4X憱 hfڲ恼F*+9dvcZ׍_xF/9.U@G$9GhÂ>؂#fA}U%q`s&U؁Af~Y "wikM_:N X2J@DI=9$y%c9Z6kk,yH=/-|ޝ׭f?̸_y?~:[LO{>ni^0f@v^dYzXL: ^uNH]30$i`` zx1X!,Gut6O}֫_{[}WGoO tu6L07L,X 4km8@KO"U$*Z•Q}LjE#G"\\i\%2#cr} 8E9 JSg[j 3Λ /81u͓'--U(c!QIoit>om9u k;T~8qlkXScSxB&%P"bƎ"!aH=V=#u-UsUV 0C)\Ps)fyd>>,i:*hA{ю h9t($%vAGB1@x]A, \A + s"d1 ݹꮇ : ؊M3=2f(1TQƋ$2C1P:9#/KDC09B<츌w`THL!br:bWC01-)+w> id0@26;辑K{Rgԅs^bSm'Z7Ct2鬛ҁO>4 nHݜHvH\N`.L:륳DSʺ9ŷ۾e @dV8^P=V;K`nJ ճY]2RYpi$hQo{z]P<dt.N|'Q{aQɠg80`ڴ"y5l̂^Z|4`_wl m'O^ [$Bi*YDđ9w`d!vEeo(f`g[$ s||m 8MY%h<擛6i is޲%-8.8ǎ3؊ihU4}v<8LC3R MBw s?ËlY9WsGFƻ-A :&@9mGX1=lЬnD? |D;G|` VpX\˂e0l= KGT@;V47x3O>_}g7Kk'ATuM6Nk&U2^8R@k>^>T"GPs;a(odq?샱qQL:ٜm݂3̅̕oRA k]`繊rrgxDt ,u+1X0P8D^gDQbė8QDU&ST\Bq]UM@XmarU`Y8p[W],\wA@c~F l4aa]0v/X`u 8W7,w5l|Q5=yŒ oV1[޼]YΗfQkLZ4V7bYWs޵tzx3[E9 7[dJ ;[>>^{`{ǽl% E(R@2V:3S a9%0-U/WAD_0!+l/WvrGWi1aJ6'p9P"aD5qʔ2nT8h9wdž*P\q *ǙwD|\ߕMQYjΜݾe,|-\7nc{]py׽:pbG+J-s)Phֈs8݀0 NMxD)0M0Xʨ< a W(L;8hzۑ h1Xf!WU.2h'^V Ni3ls.8L0-F$4΅نmV^˛WrNUҦg' :}̛J狷 nNn732+l,/ӥVښڳ WrK4[1GO)V oR@;s'_{_~׿[ݗ~o% hY\ϭ')}Uh+3D~Z𝲨hN@*KH#؄zsjlS[&7aONq@4wƋ K M[[`-?q_}{D:ҹBkGeY8 3MDZEf:F:H{B\\3CtsvEO+fDscz$&,fQU2$ydE@8`fAv< 52:# Ay|hq_P-sZzp(B59>t(I@3\#lr%8,DǍ퍣 hU:DJwHr wՖ2Yf0!+a%Բ#^U ]eYfHϢMhm/ 8l*1X8LNn᠋Y*Svyײ y{>_5 |N~%x{lfMȗF'vʜwr ,|4G+OmQCu%U#"MR EZ-!9B˵$=oJN AtVIX2TJy-{q0Orr(\49׻0? ͙8b{NanӚ7>VМYZֹZksk͔77wbZ/7C炗^6 9qU@$Wm@F 8b(/=ԗ{Soz^hY (b>7d}Ђ6ml$].u0!(`iEx'&\KBcW`}V,yfy+ hl!2쇪10Ǒ6ysj,}MM&:X S2Pc`CTCH`yYꙜoeG^R4KZ >t>;r"g+2CY"tDODetL49*I1G(@|1[U:R űw1-YK l1_42C*$鬒,ˡZ$葋-8j>(Zp?O^B=v`i8lzUtL L(r!36qk,`S~Xtm,^%)}t,. rՉw UtVaNV UaxaK>{A$ihiQ@8^f96 h87LhL] N䖀&B.!̂*x=Bv D$O8TȊ17@\!I:D3f߀t"J juL8JTY6N m U;;R6֪XL4{+73sm־6gLlC4OXzVe6l۰,ݲu ݢ/\3 ,T&)OO镗k/=_/}ۯ'5MT]ӠseVY8 a!5,]Cޫ]d<iR/E4ew&xYgfU)`i-1,ٜ:{h8$1 h1 T4Q 2T2 65h?-cum0KoI4e>ljerT\ ]ei>h9T QNû.A$3ie9( )12G3 ⤛O bCF :XP1G9CDr\&Qfqڛ\~"z@5#;/I&Q|42;,qFw= s0w->;PCxl`KG.}wLcX}`GDkǣ3B@!vP ] h'XOW2 K&;f97A@𴤎lA5A$q'`ӫ|>{qH"cAc3>c)BHsHp~y$  ba t?RrNpL0L>/Y?y#IHˈz||_J|)1Lq5|:`9"1 G\54BCkx*^.?e~7M fJeJZ0x9"Xy'+|]R78r9;鴛IzѲW+i< H1C0 F3ʉSv⒦[ld,~GOСe x[[ntH+~ކ0_-&J=N.G >o.L2e{]pw!Q 7\s??J[׀9zڽrJi}>-eNXgFQ7 fᛋ&w %cw{{7 OfR gO<_}ow|y}/~Z}b}jj] u 0\ z15|wP%xp𱫬kH9e29^t %$JV#3No=ш+nNDg}*馮CmǷ`[';׷M1,afhlU\QqdU@K -4u6yK 4pcP@{53H8@hAٯP6mGH,=j) ^> U}9+'V6EWZnQ`6PrrLլ9>xR/o s4/9F^=9e>u- H՜ii3;kLsY'Lڀ,\P$@x&x>ډ8ymÃl0[DhXF &tfqH\#l,oAV+E9r者*t2/vTe*#qyt|K`;Ǧ`X%-_̘9Ûѝ[Yu#]˺9zڹvoe_74hES/WTv ony#k55a {JqDuMS V0;!S_zg4 ?[a薁OM ԪB5˵@Y6jgQqmPC8a4 rp]A4˵gĶCt`[)Xn.\7Wf[+-cBd㪈lkq}lh?@>@}f5##Kĭ UT61dls>A[Q"}깣hhtsL4'Œ3C=pkT,|F w23"}fZ :0˪tV 3X3UtT(#;HHFF}F_c杉wDlW)9wJ=WftW.Ƿ'1\*9$ >$ pЏqipKF 3xtgTgD[ףi-j^ htj hUq͉HsT@ Gn­]2RlS"IR2?~_ h#(Mݪ0_šIw㒛_^ڰZvKw KE ReV/r/yO峹\4bfD>g$M2s:C$!V!=6U%̟բ>3ZĴ˙-}zژ1a#U'gӳ9HzN5cF?aݘs:H\ΤuTdzi8'6Vhʩ[i?4'3B\: wq>}Sy#}Fvdf -#NȍXN0oJ-Lu3}fff:;OxЯTM\DL=$+;harÉ hp2^Yíg='`,+A%\V}λVu 2WΛݛw]+\>ze j¯_f}3Mޜ9kt`g'jabC Krst#Be;g/v;F&^ QX\. Fг蹙KO~Dw}^ hM_ uC=BF>'kQIlS>MY0LL1m@~m7ol܈j tZڶ&65m`u[5[EsA7Y* ؆Sc[Z&ڦnm 2 S׵**x!6Q26\<.\3mj!> LԷOJ:\ViR+$2oFCh>\)9݇z 7z0)AiP5*0hgϱ.a ;ᣚel|twߩ^JhƃȱX=3ryCG@D>#HLf2\)w޾p#;C|\^*ce`KIDrWBv]ٱ8w]Myd .aiQ`k"_DUمI@< 'Rql?KT}oL/ǺuPtD{g\@v#{ pN%iN#+D2Ytxe%e`ig4+NZQ,@8g t; 'eaC*LL2Z%mjUT:_J|EG3l nMѨEʣz.sb0=%tWC)v!N|p'?t,NCrP+*u3a5bg`JtJ{3+ӱ/Q72g`#eVrp@S c,/,y`^R,a@|!L$`Q*bg \U+ ,{|YpBq_+.J\t ꣼^. '‚R+y+` O y@J0^()W i(E|l.df -7iO`ب"5ʃ6jO8hxyQW?.zCp+ 3lk9FqsR{Gyt%L3=C_͎wSp+p,vY0y-_izlZnd[YoF/u^1Cw40] ц| P+c27pӢ&!ENLn((2-`CC ̅sz_owz_woCeMl𯒷Dp,E/WeMk7mn9y u'74 *F;H66Nlhߜ:85tI *! }S65mF#7AYtˤL(5Vꙡg!tnl8ǶeQjk*eN4wjZU@V+%Ɍrem&U PD3 )w1ڀ0Dwɾ3L cBC/8(g.,S\8A0\) YLztDž䠑XȌl1Fv:eڪFv c Βdʎ]Ffۏ/wzBe{L1c'1eHDe2$4!*#+ hT ]H5Jq2@qqfH+!ȂUIQ(Sn­e4dT6%!k㤣dm/4>#:@{6?QuCss.GfQ49l1{^P3\c:ꗫ!ĮupS+KsƼ2 :*} O1I09LٓO}/W^z굗}Ky}Z4w( %֏,RDkP2be k,Y3uckP=Zsqb]XqlKm7`b)/0`ne#3V 8gBe2l`}Nq|Ur-`c59 ʌDAuМYBҙ@wɾ3gO1 @K:wOxdhjrHݬ´2 2[-H٪ȄTfLyt%R0H"L7sر;%bUSf6yEygMyi]ճX;twXwީ%@:G}JJy ;֟=D6g1,3[4i83])Qdng?dQz)ND%r &I:˚b/{M{~ hg@O`8텀 {+% ,rټ}{#hŎz[- ;*N*AށO+s[7әex}BˊI]ET]@R:'QE@y"4O ^a琊ƙ~u^>Zlty[7ێer|ʙsry's6=oVhH+8NuoXokY Ӻ;{zaFneݛFpna:ȚA7=$W0LY<}C TгsgN>7_}gx7_,"X]&jʃKdMӤ vC&oU76Mc_Waԏml0[`W#*76A$MI7MlN42Y@e^L0fLpQ\3e5ÀҘB99elUm Ax=NHBYB᳃=w$E3Ot~oß7|Z 4=5՘Y*R4ǑZ900Y{ wّD3T2#h})$g2lD칊;\UqNbzǗۉ4KfǞ/2(.L88z~`% @=Gt, =q9H@wG@K豈F\v+vüD ;4Ή0ۻNE}n gBU. <f3,4|s=$ >4 <|g<6 h/_(`'haCr-ÿt[39},mz[݇7_63;FMh栩sA1g"֗C*QL,N@ xhl{gw_@,/o Dyۂik=@R-qmBBc̬fzͬw#׳֍}-mJ;Z!+iy-71iŖ/>.] sT@ʵbכ G?]׾7zow\F+k shV,aZ`rw FE3?ohxh]:,OACr"R(W3CHJlJ8X"@}:MtdjK&fgqA9GV*XH\U4tʉH\#2WXt8 P 3bJYEl:$woCsw?trDfljx8L.@Q "fq,Zu K{-)E4&@ Yg8$UPsрYȎݒK;w_ڵN`]b߹r}%N"˻zL9a >*<2xb/!̂=Oxhǔ$A_qQ苃n?ׇ͏ ;(]I@g2سt$kDL v+5T5kGunjĴP+*;K\z4TrdYML^>YEւWb@:\\ 5^ &`s`M`: mڅ᠃ψ?A]AM{73sҿ?_Vo[MjfiY4 ȸ}C룹z&ƌs"d٪qt,st2S[>!a)4CyTgc9N(ѳk<Hs\綕[0y(YeGw#D[iQ͢igð,t'ds|^YzAk*96^$(E5Ό b{v$?ǾWS/>, 7^{oV܃zMrcWD/em K(pPTE"k7||p67xpk XqB`]tAgp73,!Ll -r֒wLJTxgsd^``c69a /UE4#t{,W)rp?w&BBPWi+%nV!1 :M810u}8n@Zhb\=!-q+ u H"R#رNnʄ"#ݻ](̝{.sy+qvLx9vE󮇮l*RC;0kat9 hl(`· dWGw]y ЎGN <"tg<hقcQ9 JNa{/Uh24$2o"k?(qͽ$j % -#1_;$}&(o0,bHsMIaWlpaw2qL,V@眢f?;su ԅW`m3^ЫmVe_歛ٹYVE*tNVrY-ϝT cO1Ґ(7d;%.wqA%WʚŴ^F.zӢP޴]饠?2E3W4t:fYck-Xj660vmñaY7!D$WUHkVNL#3_ƳOܳzw{{y ' ,GPF ;8C<;r.Hپ}bA*@*ؽk%Jc0 sgUUd5nH `~Yh 旫k.*w=_ü32zC_Зݏ"hD>_\پ2 hŸ=s /& hir:2t4"%"P%2AqMne Șv6_ %1\U.iiYRz.UX!w(3 e3ZnR43fl "yHʀny9TOkV@EB@|(X=_r"~*ܪ^Vo loܼ5tsM儲74xta?q 3\ z& h {(KbR@gxU yϳ My.򞎿f4{Zw5 7"p]/]oM/$6< > /CT+u;[azr9l bg<ٺCV:u>P _M+1= |}6>nP;l݄ l#_'/=[o[77-C&+jYsv島,X,ʙuA},5\S?K7 65 1qL[\s#kJg*vZ8}^&X6[CejkAƶ)5tu-S6ؚĄ#'QmGZ7Jjmcum WhVWhh?$SJ:e掃ةpK!ዏ S̒T!;wY.X@X{Z VN'J1 %ųOO *d J\STjHͰ VO dhYh_A,q/;vW;|q,9>JɴzVmr"R="Е]=arв֘Cnj\agB4$TyXA4ر>u[J0=*icRDl>Y1Uf`sc8^ЄDB 2g"aCOi~"eI,FZ[u͂ຂl:=rV>#͝Z5wKÒI+p3ۺH:2rKg;;Gu3[0\Yܟ)ftsQsT,E3CJgIL4'6DsV,2ZJ y2h@IŔ-s @C_y*Sϒ]j"PetʱT Yp.G :0ѻ߾+ȎK/ 9?0tjpx޾ީтst)ʔu͉dbLIkneh^$j!V@-uoC|) ü$kJyMP@jE ^1FP#=)('iUF$r 7 )8YQ(:&Bk7۪ak{) 蒅Z%̪^VoLϮ߼1Ka Zsȋ2rcc(ךh!:;$&Xh%2ڷ̞cX2w*ixdžO eyXuEw̻Nk F>T8=oe,lܬ-͝ѼY0 rSDF&) ?uL7(2fGW}kϿ{^pU@/)FMeh_FCJPp# }PVMMD2ϩI*yqRG5"xh[+jN(:1տЮK45h8,I=-]&`9wLtK }t8qYvvsݬ3Q.hm2L4}A 2`!mDth^,gPkNPNФ4)191LA]:h4 rgO;Xeһ,ܫ yB<$K_ y E獢](9eyK4(PW .v!+><ؾٹײ68g[o&go>Ôa|02簏X4q? MWEڮR;mggyů~叿Wӯܛw oKЋ߻UXߘ  AZJFԔ p,fe֖ClSz=zU@Voۢn$Іp q6/>GZXigFjo芭9"e𠜠=UF&1i`g<.8E-|.TwLƚNof7 l^?.Z2Sit87kyKUr9+"R%] H3ʊ3әCW\z+_~O7^wwYz8&˦)4!#$3:U~B@jl?qtV:c3р˃`'[['H=}6919eN$Pϒ (Yh8tN'e'h&Q3.3M1EhT̪YJ5(,Ģ:R'N ꙪO  !-Esѓ)}b(gGvFwE&L۱bCݬ%$.C_H^CZJĉ ,Pß"8隥nV# GC> Iٰ=%]+,ݻ}e+;v^ޱ #燆ψ hE@whU"kZP%c!K` Nx@Uf kߧ蘁5˄dY䠉P=Q[sJTe(Z5HL3+0QVCWDMB"2r4d бډ*V!/^ h8EabK`U@Voۢn i=kYZ:h25>mAKe'T]W/N ɹŔ4Db>{1GreJP,.B!^{Aˌq.a MG7]`:koe=3U{9/ Y̙żVsmvr<`)~YHLfD$'Ӏ"`uFrWO?gƓW_曯߂Uts T1&U=#ACD]_Us!$A=2aͰ U@7eAF`0-um;`! l2iO6vl8fC@)Ch UhS95ѝSdzF%yHh3MG,:2SvzVEs"T,DT*ǙeN3j? Ъt=-g43*Tc/>f93˒{lعDTwQq%(^0H=tqg+.>%?'8'$MwǕ~w}owgv;h_U-,@;:;N4"EJьFIqD#wNȬFM*dDdV BϼӜMhB*mi7'DLIm[[&nc>˜-X<z{%3/È}u3H"㖃m\:wh9)=A<E%8s$LddwKDfvWVv 9&䚥SE@3 hwhZFes_1YPѢaI:s1"e.t$Bqh|eV9i#1h49+M(_fX-ЌD]t29S*,33*,G-GMV ,tQUA**fJVdLйjMוEs$W 9-z~QAH.O-9h@C}rcvy-?u XQ@;GUc/?=UD0zg ~~ []@s^ 0\U4縀xxjгsn.v?&wÄkFq&qG*!H=n и SAKMZ 7c - bg_؋ vG`~?ݏ[:]Ӟ/Ks sp}.t>y,30qznz@_oƷ^Vt0\1(8"}w s?N=sOz{-t[mwV gD+uuHWF cSx ni`GDW;082dt7}fMJlLlۘкaͬ)}SbnN:X37Ć ɭ)Vq6Ўܒɇ6'\Ɣgshk:hIɭ[j ɇ jւ4ޑޑ0o*3@ٔ6E 5oPp֙@ KyxJfGvA>,59tF A*0\7:]ftgdL\k"ud՜J>Bͅ}Z F~QE~8ñqȂb0X 0u6XfQ4sv !SJؑ$r7xje#)gxgQ?-qVn+J*.. YF*R^1\^A hUTmݑIUňflq(Ԉn%,ż622Ua6*2! r rF,zx9π.-'Gw*(/kWpdR/,xT0pL F=h4C#>`0'w?SϚ}Vݱb s ,A,.3 q i:PS")ihB}:eOb`_LC/%TOi0TD!DKs9/Xz٪ i BҟoX4 "bˆu >4su?3Z #>: ]~D7 o_Wy L&^ZCp/eΒ? ̞jZp~>;鸀xxҤ h !pSkh=G:цn"P# U5D.QzP=蠃!.a⠍7N/B3CyZ| * x~? p?@ ^f5 J< |XS ?? vYsx ?~;t(nwwn&U=n9X!oV@)fn8fP3l']]hf9FT~1(ݯ_H4[ ;:9⡃GG؉yN> >/-tBN2*OnW%WDWD24W$;Ojf,64,YQA؆zI9u3 lGA`cb57%+и!(ȡX9prVkޜp7f3Ϝm@u$t2, ULg)i,YТh֓r f1#'+/=;9+DRsHZl*I.3l$R w`37 M71tV3454睃$A0Tjy QPTj1h6E4Qddއ#i_ۥ= *FJ-hU`b&.TV2V9^]3eԔUճrjP V%YBkFZcN[3FҺUa1b9**A˔tIXqXQp>̀}gdȼ;c9y9&- u J^&&"oSV0+yP 2\`z p (q%_:i.9HHzYyblHʕ# [i:[Qdqx4='gM+W+ S(w /V2t*]j}PH-?ÍPi? xxmH>Z,QCԒjĤf&MtRN@ebW:{>7KJ^/hh?/}7;71?Ϲ$8c;&??edU!֕}7 L~wzv.x=Π~l>m?|mtd{~Oa Sk@Gд]+\2WB˱ MWr_g _vhgLKHޙC_mk䗣CycRۆdTh] 7w}ob}NncYdsM;ܼEl1 ;kJmچR[9hIz-f ٠#!H`m.8i*dܱ#37=+9A=#(E,!g岩˂>簍E,;z hA=s1`pges!Y05xFꙌ3CqjM R% } cueh23NJ6т։UaNڬS+G*l&X 9:B3l먰̔(cyeeee%E%C;]؛WЙב݆:e@s  hK-ѥu%8 Z9v.fh8VUОӰL Q/HYsQ4O iq07Qf QsD $ @ؙ~ }8^,0p5`ФcH1SĈzI y&>M7 h8]Xۑt&˼f 6t[[R hq$TCUܘʪjكE Z-A| E+~{y#<#aO` ?!w0 /@e7{=tq"g8s;~N rn W,z@̑WИ7C?`tC?}3'xٓox%rGe7_9z&z(p7bHqնO9kEwВ_hu6$-fZض!$up05ggdZ^?V2Mn#6(ۊ\@#woI:63|oMnhlOmgȮؖ= IGv+5P4\HNo7Fˑ.jewtsN{RYٍvt ggq AN/3E,Ȩ5؎w&VqփU5q@,撁⁝Ha`+F17PR:(Ru%Ce*b_|H2Q#kSXG0MABP:JFˡ# WM0m V: sblM\+Ed}t$" hmڠ TaAp-mHu\Z芩rE@,(ٛWؑߑӞu(3οBmZZg#Cz$tG@/عYW[]*KpjғoE3ǎVF*— t[ |07ҬuAQƻ$]Z>!eb)p#lkxg"k>"%nu닐}VvzT *wL@/蠗0C"K5yϾ:--J 29Y-ʡ]AAMࠍ(ZB7HPI} {Bao8Aln?yoށٽ=Y{` `7, x_zTB3VQ_ooЦpZE9.G 9>G"Rf}ADL1/iO t57X~$?Xy]q CF';DQY.t{>z>N~8|Ⱦx1J_畐r,GQ?uݽ3Ss?c/:K/*wd^V"E-" W FЩz&q6e\4#HRƔIoLjݸN; H-ɇ9J0vlKܖڱ5%bVƶv ;lOہFbhOP\ڑ0Ф!=ۣh8@##td0#t,YˑF4\У37kF,f9Ř\Ҝkc %Eqn=T3_I~=/4h ,JTs7#E/|s sO1ׁ}}L@{zN>/~2vؔ+#pN1Ar_Wl;`3}0+玿ʪy=В/ƙqe ៷,I@/:R!Kp+1y^Q%;^䠕$vݸ;buŇeR za6e݋YV/^ S|d¥ h~wD8 h|j:C%Y{5ٸxx.E44*ҙLE@K3/~b^'x=!;rN]tx眾.߬7~-"2{7րzSFy Gw.aegYgBrq<#|o<Հ~%8^̀~ǟ}Ͻ˯DЉW%tPoImߚֹ-Kz&$LHomqk$Ls GDЀ$9UI@C`wjVGFNGfNgFvGFtsz >veD6ߍ3ߓ ה` z z5;sL $1RR:PZP#:E*_:)/hcTe7Ȥ+,NSU*G-A,Q9&aB)fTq&&k`v!̃U b3lpjB *Rl5Z}T-e #Ӏ9RUy@l5CuE@XDY(_vy>_Z̞Y_T&b1]%\,Μ9WU/wͦH`{iU ,e eh7W_(qjckxHV"-zEY/-_;,MI>+Z Y^S?v²3Th<^@H@o_ @8qB;?@\@[[EiT@HB#hkR):^|M@kЀzt4g;KmRNߜ?{ЂX}e@y\>r>!qT[q((|t iؚ/ źor;ۄ4mB8x=GON8Vg~^X`~;?;hxLXRqgBFmql\2c1@,5e$|D +/`aw7&3F K' !IUhBP̄,H#%4֦\epË) .ѕ p}1,Kh //ӟ/< 0/J4BJCvYLpT^@Y`e'=OsrM@{!7C?Y:2qooK4@+r7A9\A>+PhfFVA/guL*U\G'qczAZT ~q:'-)`%>{r:vg]t9oEO>]ޠۃq&Lx(mY9_Ӻ$lBtIe1CG." ڑ3[o37yCss w}`=gN9]U6$lM6csM}C Ԏ)Rrd54g-It]غ5`eq#9C;:&wlMnt0gd[a霡 hFz{rz )Dt&$ ev1-etjzGzV7h~9<93I=Itn^'/5!d:i(y !9ogOna7s z _ܷtt~QPIH1tX n6FfgO˥Cee#ee#eXVYmcDjAVYt e@#Ig=OfXMt6w?I~='ydmPU= T2H^cMT۰#'h)cj"GTW o&$KܡۄP21ooj ZQj\>f^dL05g@8岊>(k^eo $r̀x\pOGo/x}v`EG1|CJ 뮻zz3pA%Ye{zhM@gtw$gt6B7LgdudvevfdwguD d`f I1$1':>BL`b%V\=L4t5 -H%5}E% zs zKˇ .%e5SGc {D3`TϦY)jq ,ҏJtd|jE%#z^3'b+/)/Գ"YfEx `[h&+EaсVVNx쳠R͏ft6cRsʓUUh9UѨ"zD]]UbGrU8t6eb4c\]yy9ys*̀$"EHU4/? MM&v\^z&<x-YĀ&}KAKclD&KWϦŮcBt͸= h4ibm}V,h'|m] t2$`JΑxx[U|)~9 |ZKd!o( 4fP4řVm %'肟~xԜ†ۻc)ga-9KNLV F2}7ߌsrDCC}3}}zO<©_OA@o3`H~yE$̑29ed$(3ҙ7%RQPMܔt89hy [R7%ޒұ9 76Oe1g% UwmI:+ltlёֿ-]@f}GZMHgc4f@s$-f=Xe:gddwevdtCGw"JgYy=;s" hI=h6x tԳFcgon<؃$[ Bچ(*Y[V>Ta)CvX̑3e:PnA]9}`f{޷CX܂u9D,f/AYM `08R#jbuꚩA4C" \(WOU l)4Koʘ1AΜ hz4v0Z˒6"OlSVˤ/-+÷N@*k$ /^&S7BW/5 hWeEDuĚճ^/JCWK) o/ .@ Aq0֌֋ln`El WF9Cy*ݔuа>y i𪠕cdBn{>g/ tPJDQC3ML+ǎ(&FθKvwhA{4ۊ0(eΙ&ooj_YNWD0$UZWAGĴ.`PD,.1m$0yu3\0s͊qTv9}_;8-zG eiXŲ,8}TWz!j: (Vwýم5<4p#{?cϝ|_xW["+eb [WDA%GG."\`(#q5d(d#F͸ࡄBdInb D@bY8&ftX؞ښѹ-c{JnͦYgBV O$-fS\m'L1gg8Ml'lDe;sP0 tNA78tל64>,YG&h5FY q_~YHUdeH,ꅈ%5bQ]3nHA喡2 ,  `WJJI.,/2,HU@%"U"U^O D aEj&kj'QCTU5sd 3qajF֨6(fFM9U8RSuԈNRj룜jSU3i:mLX,J=V$G[#/tNQ4c`F5%GNZZ !V@":˼"Y'md@fũZtФC*(gE)D88 jqK|t[WYU~E=+D A-:hT,j4p 0z6 L@G΀K\@ xx+Цp pd909(i.6h& )Ne YwcT;Cd].ˏ5\owyg?ytFp.wRdJ:Υ8R G9~|9K/:߄rLH{ra&@+q5g$#Aŝe"M FLnMI:+m`qkۯM2;oqpsMҔE Hzf\|8!qC7xqk [ZWu';+d"nhOcz# \WDKyNI?ٞ)Ygs;,BPE/ \ւ E@wV3g$_4;zd _T 3x xVm%j5g %53eFQ2p =t 4+,# ˰:d.+Af@ɽʫ0 npzYBvRғ t2Вb/.ƺЈ*`ЀY.H#MҰu4ӷHV "s D+zgEKYJ `#N!HY/e1fcD|X}'<oȐC>o89wo~^p}~ xx(rЄt_:I@svdj>Ȫ4S>9~ ]Y I|.Џ1=wP=O ~%\~ή@ BKVpb\"-%ԑ2E@?S<UBd׀׌A% _^HYǂ4풀ޔAճ \MIfe6'#0 oJܒܵ9 7'nN IY}l{kjǖvٌimiy[pOCڮMYOv^WNn)qv;ޙzVs&tʄ29` E}̬ae*xx>a6l E3!gR?-U5#e}a[i:RU3V0ae9ԃ[䝅f%DLp,1·pGf5ʑqW)zeDZS3UkuYfuBmS KqjkR<  w*KvعtnW_m}")]SHR3t+ot|S4Gճ4] h.yM|GI@˦X5R\ns,咑={nv:25F\;4/Q@3G15RS}D.MԘZ _A$_ОZw $vEE@FCv p?C,|St$$̑)^wE!n߼Aw)­x>Ҕyqh*]3̈́}*Ё 0:%0# hA4#fH,~f}E@;=ӎ3oHdc$.--VվZ{g;L5(^ZqV+#U$}wx>]>ό3X>NoЍ4DO)'w{}nm zO<-F~Z ^/8_=0_%8fG>|=O?ʋ/·ЫE뎨ClHyp,#m2C:UIBd` f mf#!D3[3 -u'5c{Z'NUF*ϸ` &`>z6u K!Ҷ5tXm[a>:!=1a; )*ɔ ّ2IphOJPXézNZ<)ٟݑnjgەIduLH9@@tVvT$ 8Kf,/,+,/*Q2.p*fVS;-3d Ό a`yPv$,AmX-Xvcfbxjg(TV"*fZ Vh7R#T!̪g(Wцaf2 5O\8hNmDmDY򲈨WjM%m3uӵu3Fjg=jB͑ P}X$j%1 hx߸΂¶<̀ʫ*ypXW:eqMMc2+gX#!MBG፝EOR+`(84 V@VC a D֒5D^Ң5x| n܄ճyu0: a.5=7+8zL f18LXG~IHSV8۳>`UeYdCp(TTc/gpf;Fg 9'{ {/l${AR{g!wIF:-mU2I4{"Zi^Ge.0){0X,X=5\w`PA?jODNaջ,8yE2=Levp_pS@4q ィ}\gCc(OH~vEN)Ұ%z7wanw CGzGz'^z9,JhPV5ގNZG̑rtdMm n&6OlYP:&uy;&5oOm pu{*jmOؚҶ%v$ޑ޹4ҩ0"ہ44h3qThgFGrFq_쮌T&5 aJDݴ٠z&(.g \fE-IgF*s9㬱S-L*Ä`gqAq_AIN&I7GHdgXә4S /+YLjVHZ9 تQTUTU )FjjPz*G*GjA먫1u,ZgU 3ڪ}ki<'fk1q9frY%" ZXƄZzĄZnQW{Q4GU3S6ۤ :ZQ1R^6߲Cyy_u)Y@]EYt/ )t >\EY?^ i1o_< i<#V 0- tmL=&M"xtF`,fkfYa:: /M %:͍3ZAl%D+Aý"֞^֡$A7 oKa؇U8:-풷o&hAk-khwHZYgŝ)s)AW0FY,njwϨ'7-pSAճ` E m0Z,8Zp3'Q@. =##ccc?#=ȃO=?-ˈ#U@%w66Ks~yE$%$! &et6'$:GČknOm:!k[JiiWhNHu$UM@ճ>iznO^HvAZv HLD }V$E$,AY\=3g83'/nQ2M(I=zp]3 HgR⳪3hE\F2D&А° w&D\=BHZѨF}HceTBr(A65\:0m(EA\W++Vñvzi#PoF]*{g(cCUj͑iD;LM1btMLutUtm6X-eå}%]E; Z pԩw寈4lU3Gg:kűZ0"G`(wg&+Xi؊,#QIg690pG!YSp0x] hW#E}Fgq1,i4ký} I=smSw> 9K ^A@7!xx^@åU!M_!A:q3\f/@KI*G0`Pa `sϳ.w KyV [Z4qVo(W;{C<922466rC>C'xg= /G}:gn QSP"2X )QwޒҩAfS;R$hOH*ޚ54X ;Gie$ԁtJ}A@'evwrᘞӝ]8 ,s2ӳȀUg8tetƼf0,zg&%!/`>Df:uie;QHYDAҙ΢6͂wVҜI([ mf&*+BikR\s%+R]=J@l5&cGq.kkEj᪑(k&Dj9 fqu0Fs+}Âu3&ih@fQibffTlRCWHøMU&UֱJ˨*/-+,)()ܙ{hgޝ=A@bgZB?FbjPo|EZagb  Q+ta+խ%%v>ks.W#"& -ő)V_pL@zVLh߯jh{HP4k$̑3 /sýf;p yQ@˾0MXp >׵4ooQ7K@! ̑(2C~VLfVCt8} v).μ+0 { ^쀏Wa՟q/AU4{ܬz фjm7ljc(y/g-]==]Ǐy({g֜UeaSQ)D:\,KuPTYbw٘qMJ4u3`}>oM"5 qPmiYPv2:2KlG2Mf7`)g0&=o 5NN8sz6Щ] z,6+hE,ӓG2K4g~Y'4j!fS\fhҹk73ߏ2J%Q7i?QV>QӜdgQ7׬*b3SC(YO HufEjkjj3R]3R[;ZSC5#h63gAG e Bn(I8]hhil<4H4KF,՛S_ww栀l3 ʩCX}֤/Fqtnд4ŝ}бKNmE}ZBIhN$+-%d̉M@s$}:d X`FǺ1Z͈6Ԫ║I@Vp#$蔍JW#!hhbfR' x]!3Ɇ"(XPXXÏi 7%>ܔ̠"~J1)] I@% FHlh i):ҥ8qQ"_ R/LB ;隚*iQ6Μ(ƙ#iH w'dl`JJRz.,+ q8Z,<"j!3#b6R"hk00e:sp]fY@spZ5׎4ԍ±~lߞ{vZ(;FIέ,*t<21T-3iol2V :h#<3Zt0䵢e x$x vI$ښꪉJۘ2jvw,hYxƍgՕ  բ< &W !p7Bu`"4+I@+K5|$a§U# I=ň+hf2= 6"Yj+!cs$̉YTWR\C4Ow$}D,}SI7GB_Mx;X4gKgcAOt[[,"%!<'Q@h\C3w0fC\9wuboc}2~ހ @~/=~O>l€[95"8]ܬ04ƅQK@-1E˱SNv;XOp911>55ydf=Ϟz嗾n}͎vS+bXUؘҵ%osZI@1 f ip$LlNҙ{yg}ޒФtlME9t& qlgI͒}va ]S;2{xjgRjgrzWRZg":Rڡ@)i]^@KHr9FLfug*62ddJ0 h>r6Тw&$̑,8 e4>S\<5tV))>ͥe,hHKmQ4WXD,AJQ3bq*6TedTنmp$LsuHM4n~3W.E0}NSM7ݾ㰈dFwpl ɦ zx戧(]zWCG,Lj5czƆ njr9q hYeڙꚩIjjچ*zK˻JJA.y`&(}E@se`.=&,{jDI@ Wq.wʫbM3|:M%Hd>0Fz*1§࠵Y":+& %mx_M\zhYRA0:D,"=0eZTb\O0GMFv? hrkʳvz6  oH: xxlP"鵘" r :,8hÇ}E,ܳOJqU\ &cYi $v^؁,~M"BsOH>KqI.KlcGXc3Mx+m-k۷&kFܹ5ږklI&!+v`gݼ=9 ƙؑ%#3!NJwU2D'dt&)Μ$11ѕMu6d8fB9Z 3dgx) ʡ]+:;'3+=#++7_S̄brٱ-aG8K ÷r a/)*+/.*+*CLŝ%8Rev@+\ZWZ_^>^qG^g1򚩰N4slJQU9ȩfޙj!NMհ %5p1(ҭ% :6ԍQר!0Cy-M͍ikjoS"XLxQ $LwA|qljP ,&z- - G[4-3g fY?@nj&*m0hBl%AK(44F2u 3uu555555c#-=P^WV]RQ\ҾƍN -#zg.^EY,25e0RE\3FLϳs5CU2 z=$D-" _E/Sn-{XDi))pi48L; uAz=!|ixlL@sӠϫlp aC$`YvQ+}DŽ8e4S0@1cֳB @*?7:ʒł?.)goBoo6?7|i۾DQ.ǂ4}q9n=.{ΰu\bJ;G8CW@R`?v?#֠n/`;j,ә0WÈ43+[P\kV&V^ aUdRf$ q/U M_ yĉY%h8|9wo M=O>Ϟ|S-녹}rk &I7ٔiL7'wPQgV v%%kkj$5(RQ@K$6)Ν*h厤 #:h>cPtn$} t~Zf{FvgN~/ם] 4ϊ.+slYk^Ei;z-#ub1 h#hHY h2,y"pXh :&Tf:Vj":%5Wke%5VmQ3)\3e:hkF`}N@sufaX|8`sY}nE:?!xF\?)HINsJ]3!hDϪz hSIUaQPt}T]TmD 3MVUle]%%EvDТ}E@3QkB$-n#_^_Xgbhq<[zDE4i)@+m8B_"&\%Hj=\fUg,?/G>0БP}zUp P%hЬ~%yd'g|ǿ$zP@<R2 a` s\@[[s2qi;p\piE۹vq9θ!~n'МSì,`N ޕ4:&t!4/^{] / '%$8pbbygzgok)qdpMB)w^5\Tl@_5'wUvf viRǶ.IhlIfb:]3t&%9qIDATg`sDgA@ctJf:e11Q3CF4,hA=4WDv^OnAYP4`LdtJm䢧a(܂^X!o,Y΄d k tC;'U()E\T܇ƹdshg 犊A栕>AeKJJJSU5RQ_YHu6xNFA=,I.5*_tf5P,Z1QVu84%HÑfqZw4 '9-@T33G @KA:4M0fzWÌ7A!DMGi)\:sFyy2PY9Ra^\3\3aU$m(g.>Jg#Hgj#5q3 HpYLi:Ns8$jA\?n|w*x疦))W̪hyg閆:^ez=uTC4Npl>q(;]]f48nJ3:h$ 44蚚*a WXz*:KKJI@޹ycs@܄0 5Б0xgj}UALW<~84E 07dlWa:> xB{V=őL,Pnd ѭ3 jC;ocxh57 $p Z%"3 \R 蓠ݑ)f.nU1I@K \,/;ih!H.h>%üwz ιU@/[:?t3DȡfG/ؿg"r(Z>sa,9/"m6niO ιs(}d3w'9NOGxqj#ΉxK~>_=& h%ߙhh܁= ^qᄟ.74 : 8_gYAW0A5"3S`]@}K@H/?(宻ONL=2?wW_\& #IIՌkIKH~yEDI.Es$dLP>'ula79IJ [7&NؚMz;z6gBg I+C_S@ t8⦂Yg/Y֑;e;=>)(;ؗޖqP7A$]b?sگ nu;[=ރ{=i9}bf1'~O?i?}jߖҹЅsgGc4.eF РC:FW(g\-y۟B[ hh#%=h-8yGhg972 .?%}钝 n3@XR`|(VzB|"l#ҰuGzq.Cc#G'_8o* *ym򊠀xE$"hِ(`Y=;h3IVQ+uoOo߰-)X9g{jizgM@ i΄#&>'f}&-Hp:X r =K9ZsNONNL{SVsf5{H6*Bw}%58w͔l.% YGLgFY`I@QQoiY_qqOYyr/Pqy@ВzffXЙ}eR1`-U VW `U:PZڍzG:;_6:q̈́uL3eOpC*23dꐴm«#Ѧb: c@KI`a-]M3OSɆک*iY+:KKw,):p{ hY h@+bXV!F-8ܕ~|5:ʮ^]˳fO+Ҳ0(hm:E1zt>3)bHĮKǫAER9psБ֙W3d(\@i̊4 0L و&q| hB fVq 33#0҃UD4AO {Js$ Ͼ$7 ϝΧq;v+8brY[׋)~g{o7 m:|eayg. *Zzihm}syD3i\_WN5C89h BN-R|gP !=p]=4§9Ҽ̼K ?8؇~wݫa,a Цp9^f`zĮ/uu"!M!}5\&(y CLNON{t|SoR4eQ"_ /^3G^ Hޙ# hwVLg#\=kV7$%"m[SHJR{aHz,"f^msRFL9-g`gQ=G=+97;7'TU>YTPRCY_. T`8>BuE@3̨ VۆlVkUPMHEEocZ,}$3ZftZΒn0g5X~aeeGfFx4e E8sKga⻦wٿgS^9-n7OLberOEP.7&$Jgv4t}&hN ;QCXO7-7ijo<ƺqxWWU_kWEE[Ei[iѡҢ[zwB! a/a0QϾZZv61j(ֆ $Wo*NArJIh˧NԦsQZDҸ@@`Z@" h'pJ >FH]&WФ9F K^^ iQ@$z܇Tw gG@/-p>3oW*6*6lWzJ6͕_;ofg[[Џow{Aq Kg /:BǹȯGӼ9ih pUzxx[ܬ)19t`El1 YVvuvz7t{')Q%,gIni):sЬb/(mK(&EgGа$1" i(W5E_Rvrm]]mǎNwO?ĉ^|NhZ;s$fۭQ.ǂ䗣)IJ.ε)Zɝ[%AȎҩ'ޖҎe;mI"h>A@Kޙ h}mtefb蔌ܝEcYgfρ`^^oNr0bpgNnWAa|gbt>:Lu#`(-+/(ҁÀVQC T>_93 B*-DC5J%ٙ3+*zgb3żfzf4xF3%5sݨ? e`spsH&;CgĮ ҙ(#YYfZ@{fBmbc]>tT=MF׬ Ӭ MJ`Ȟv2; z-3RD\@n@19T?8y~a|7p]ӵ#L@[+-eeŭ$ݥe6π4Lck4Lce- \;`#:5SԹ<÷2Ã}Fx+!Ձ .aW:7SK>/q#8ST p-3l)m(>{ k?̻@$Kgwk:B)}ie栵z(XNTCw_S7G@/_Xp0짿_*SQ.^-s%B-֫4oz۝}b`wiZ !p3[*icVA8tW//~ooKKKtgՄxxmaч}CKp~j9м'7^#|^0ţPLgj*4f 07'V"4^aDt4DZ'ܵ#=Gv"=v߽ɉ{O?}O{}MĞf54Y4}X1qbW-3{w`nuK4c :k#rviiiiAvĞ{qv>[%Ό=1Cº~Un:]MSVY,eEJ غ+..Y4Od 0#GUvN&eӲumݶib⊳_p}<+η}<WoCZsêEy/~_p@^,5gΜ_g?裏 zӟ?~- nM!;ccc{h4oo-,8>0z9?ENhARk22'~w@\vġhw`}؃^{Ѕ?! vl/]^ߜ/0 ._J x<>ճb9Q@>>G͔dFnuT EܺdDI w:s\=Z4Dz}vyiJ7؟8,}L~8t9m699xģsN=+y-0ڄQ!yg4L* gFб!fS$RdCP.gݶ5SƊϊbrA'tsrZ@}3$Em1,Yf-v7,SHKtsTSDsDKdsDCXu$ ~-!S-6-f#cc5 h/qsOkG|xVn 膭;T}, h4AT0 AkŠ( 蠊&sz]P "6'Lpz.w Z̓fk,˒54CJkqPp*<91t'=~+j HR#ki9Ұ\-a72]5b |,1ؔ#y[Zճj:E$ITsEH@yRfU4X9 :p"b&49],͍3\=g٘lψ>*;;t^acg/G"hV4? t|jXJJzq;AV=(1Enր e}%=k|V1XiYz-劀6fOҙ!csEE_yy/ H)Yt`u@M @ 5C5Dm, LDrF/3_ܬ7ˢ~9; @| 3USb6Er͑`ptVxxI}90qf_<ٻ KyPh}3ثjn>f}CG",HW6xg$R! 3$kY՗ڱʡj[ueOpEi{yQk;oEwqQ,5 h~z4ǥE|lEݰK&yD@c0V']1mMS!#*Ӣq:h#z&H@OIUꙐjEL4ZؓT@c?&XθMhg*nLBYG2.pnB+%= ّ>Ntx | żQ78Yb^ԩS7|?r|?Sso~`B[K!̀ڃnG:0ŧ,Af;/]?_|n? t02׆Jq Є'"z H*HҙrYښ).%4nwח6eUF^/?cCKw>1>ttzӄOswsd. 2-gb& Zk9W9Lje^ϹfYQzwtKdSDs8P3RJÖCEZ4aK\>XDFB/g MUŷ`"Ut 0VQEt<#ҳ]M9bDԸ#3Hpl(" *3pdQ.[**+Gw.+Úp %MZK@e6dE 6`A x:TgZS[=t~#jY.3C5tlgE7׍׏ֳzJi`ZΒzD3Ь\sK#t5sL",3%4وzi_8Oi#M"wM~I*nפ4R;s}znݓٿku-3׵1̾3v8Jo9v 0-PKtNQC7jji$kGGߎj[ p(#a[Ջ/|31 hKE"9UA+,Ƽ(g*;k֘ h5D肩Oi}V AC\t+ޝ\|8b%k49h"v#:h&&B.&YA@g`k[~q{F. X+ç{\(`lr۶8lW;˯ V])*sw[z[~~N>_B.?{L3}m?wqɓX{{ `W~;GàB|_{gh~gN q k07 jpjo'|¿. &믾*\0/|;::y䑟矇GOixx[O?tzYXq7y;2:_:_'8 za^ 7ȶc2%{p2KHqm:h-VК[:F=,ű<n(8V/K@|?I/ p?=_.Q@p}ǧg>ԉ^x;Q@nJ, 'AY5,f /:$9,s8e!L4AHTrMrNI=G; HJ$2 >fd`sv@~HZY U7KC93 : ;!ߛߛW;}8w3G%YL4}FQ7s$L{08c% kf,3\ZSZ1h)-et)wFL͖Auς:8i)*YWҐDm[W3|M'-Օ@%H4!7 l>YZ0޹aqT"L=+YnFYڲ0ΊҙP[5JmGY.3 134W8!A?ccz}cힸ{|N]puud .M+GARg2Ȗ#׫q3d%Mٔ4˼֦qV@fzi)ΤU/py.XBƑq.7 nڐb{ MhWU+`/fYr4X#?zSx$"<0G/![b@KDZU>J0>nA_WZ~G_t Ǯww;~Q gCjLw_|nr8~GN}{_x_|7;hZ+a!O~yEdL~yElD5) <)s#Aq!)(P4AslD̩qnD DbzNAS ~ϙ=4g栕TYQ9\7J k7~W^aaPA :h5#0wfL2wU>_x&a}1⑸a4`ڜ@RdA4LjDX FǕ*̀.iܑuʀ} /S龄z j$gI^eD,HqZ hVYVDg4I@s$ˑIH׀n5>J0>Ѐ vM0gI< a~9hv|wͳ7|+ oH ,.9|?lnYn&o喉Y8vttG?b_^XXOqpӧ8p~0_~O<[o|>wuO8ox[o냫?N?;^~<<<Ы w9zu]'?o~裏ý&''|ɧz n봶;v';X'-.ES\Գ|;vGh]+̺0yްθg]pXGhu݈*C>TKYTS!n^t 3H#/JޙjͲx$kC=.׊SF|wł߃Q4`_p{jӏS'^}w^?_ok0W$AVτW$U4K\Š>gʉW'4/Q@'w"}R=o@' h;gI=$& (7 H@ZV/ G,A953#Kg7étZ>G hD4qUYlCUwϮky_nVg<Tй0ϒfaeo>v׭ݸN!ؠFv~#rY@YF}llpi¾]0Lb[)N7O4[Rt*nG YtQ^ =)&C )Vc4TdeLDz6I@st29\uC?i>emR3d%b XQ@KiDKk)7.^@ג!EP0 dp셀_]j[ݿ/?zߞ/緧=9UoB˰܅KX ?['&&<nرczӟr-={'|T[m 8y_?22s` /p7O~t~3gnirrrqq?u]733^Opwށ~g|=LΞ='LMMS+0f}pY`[]vI ~stN;C_8gKߙpç3ˇ|`@GG@5LqzPzZܟj>ROz hz h1-FREuЬjS==--г$M8]"KwHӿvd,gH/[^Q@{ íF{`򩇏|OxGyR3S 7ta.yDI0GJ^yY14R ZvI&u\Ծ) }mRזnBRFZ BoVJm<FԎi@'8\JJΨѝG$+9K!%HH@pNJFќ úRse;nFWF3s{,iPMPz(z)Pl"f8#!eF/P kr!,9XʹUsVS8VMKKzp_20j,+>t驴 ,6+WŜ2Jgԟ4)ƽ`]kܸw`#q5H0;!ImYfZ {ܰ:3s=A= ^s&~ǁD},73l44776›vVqVQQz_|7]3Ћyœo `  q: 2&d_" 07ڢ5We5j+ \4AS\x tID&y3Dm ׸@EIatnVaCC낋,ve[D*E6 WW/᪟35?POlϗqW˾˿ݸ}7-tO-4xni܅3gg/6n橩g~mmm===~?qÇ1 K s{辣=x8?<Λ·DɅ׬ij4ǎBv98K6'w\ճh LgӜE΄ ];2:ZsL@Z,p4S%}&iD) d*e7nI@쳚霗zfBs Y,A@4fytQqGzּQ7s.F}aXoE{+pwAX,ZgsAĢÆA;f֎׏Q4ԏ$}\sM`M@]@] P 5 *6Ԃzo(ZIjV4gt2@wp y ūZRA7 H~yE,nuGE3\ FX KGo;q[#U׬i +ƫY޸70Y\h8; U>RdG\[g ݰ[^Ej0Zg.w5MHVi(;Tz Hޙ1%905hA ,k4^3.E/rtECWu\.,3% _fpϳ_z<1y񟞘?? O}==5~h|sooν\x9^ h/?pv7D{7;w. >w}o駟yáP>p Grgp 9t~?wPhh㡇۸Gb_~%,?  D{ʼn_M[>yXw?tvvs?H[]O>|~gq!r.y➣?p㏜xǞ{^y\@ nH6Т$ _1Sxy qmr)cQ:H9 [=5,hW ZatmOI#4ZTτӳ10gij&E DϘL5 w K^PEl%p4>@reW`ED044gm"z1lj1yvjjzj8nf9H;jv3tzVDЀc͍ V[u E8 G1e,!e#\7+Yݬ8/"-BA7D/+gD4$1xg| Vsz.3m- B:6~9 wV@{K`o]x35a'EMrΓ%=/Oi=O-)ןrvZap9{.}_ux :߽[q//[>^|M7 ---A䗿?Cyc%8N*1;;:88>}Segyn۸g_p ?çzVN󞞞޸xmaǟ|/gs^3t÷ܠw;.gw ;tCXs1< .zOsxۋx Tٴuf?WI _ h[ɥch3~&ꇭ h}&5M72"\_{ʼn~O8Cz}ĽOg کo}x[(i;V,]t*f5KMJ{9e}DIYDA@c^38c3V+ hie0}e1~ySiT SGݬfB^U1"9h,f8 ԏjcs0R;Ҍyn~`ZrGY < jՠws^kFLg:_ǒJg ]#"d@Yǹnq8}q7;i/r:&F`ʍ0Kyee޼o޼o"nΛaɛNŎ ^'p|ӾcpzD3} JճN@ٷ{zﮩ=-qxvVmiޞX*&u,`dG^3)U{ hr$,.y.4GF/7xu[t0@=8VD\R)4@x3 ޙV#V4^ hjA3H$% @ao|b e-/g7fr'Nzrr7\xs\ux \}W{jq h\֖裏n馑*p8hn AOq=~v}llo5r|^xkkhKKKo7899 )g?m6<i<-mۢǟዹsy;~'w1óϹ³ݏGGpgӾ@h.Z7|aՠǩU~|]z&H@kHոbdvqitdE"">caD__ĉ73vC~yz{Ͽ}5:`hsre׆WDiGݚ)[R{L3jq`9A.( q}NC, hU=s HY"1;v'ev'gd&m Xg R)Dj ̕sjN 猜^";sݬ9c3Gτ%;ks9h\soaQU/*Ksy)n6'4g>K6X^[Y9iV*{gU:+U5P 4R25SE,׎p(gun0q-u#U7ڂ[ 1H`vs {Ghw50ixBo'(f;iάyR3 h8^'$/_ȥ3$c@p,! ̯+rI&5c{4I*:nmN@"3 Ɣj3V'\fLU[7=zN+\u)u2[v7iliUݞTK?DfM44-A/ocM4" _x7H8=1VWdcMa$P'_e>DۥP† +wY I+ aq w&/yg:h tVkqByH9hM%Th $$ @gåV!՗gov)Zx}뭷8={{wtM{/I[OC뮻zzz~_;wG?w_|V?g0$裏,j|Iww7L L/nwԩ3gx7?󹹹7xo944t~|xuo ?/ ~prB.w:З]/Ӟ'4 }Ke:{O |sQdzF l3h䫯a0:P\\.@oGܽP:ʩޠxp ^CN GUdi7ĹdhC/'L ~xfrчyN=?O ?k-tFе_^-Vj7٘ض)L&ܵ%A=3!f#nV O 8=L;۷Q3qəݩ]2ˤꙠ  %}ZT9y}KޜF/v"=ݔ G;33fkS*a#e%ә#x^BMmF ֎66Nl)/!l*k%3"U(H7heI4LgP?Ԉ7Z û0ijjQEL䭷J_~%\/IW_z饻a?KKK/7, s}GGUp;ɓ.+[tvv?LÇ~p; G=x Չ>|(zwnXn[%h>7!rNg 9:Z:} 8_:Ϝv#?8-C.V] xAw0%iC@ĊKWSA.# e#[9HA64 ^:qE; xmGF{٧z'z߾f@N!9+9K9ҰfY*KlNn*X.6f)=(E$ p,b&(9;һr5eaaԬ#)Yn֧?Q=FL9;/+_Μܾ$g5Yψb-Œf I@!&Y h}.-M= :3J3KyVJjpkj1\VMYRʆj6MaQ+VP]n$X3UXL=#9Mu-uC@sPcP8,μ!ӀΒb&{~ֳN4cI ¼t7ܤ h5_LdV4 y4F7Sx􎛎{&o -{' ]xU^}-y1S*D䠯=(騫:\WVUqVq[Z-s Z!. Hݎ#g@ !nEh4,b ydnf}VF 8.A+`9Vc4 Fh]+lL4Oj! A4,yg/s % {y|3h?./?裯*} ~^{mqq^8DoԩS.{嗿K6c9W}.9s韞x ׇ7|{z_D1O'N;~K85MSxiK/a}w^|MgGz@$-.E}w省Ь7<Ϲa33N_OtS< A?z! Y=_(/"#蠣 hÁΊ8i+ҫshOc y]l?:= ۯ=g#9C}s(hY%+Krb6"0`fsԓY(1(YTH%Kʒh[ 1EMߩ:ݧ{,S5rU,BWB [i:!R,,on-'z$L$c$-;I@Y}v޶{m;[vz6onsؚ桔gВzF$4t>N# ={TDl)u1zgC#(U8KԳ.4AqRu&:GXhQ?23;##1 yg'>3 A`d/|\X,Wf E! ,0P^(/  K-(-vZx`Y7bj:ճ$ ԖYV\qPg00I@CQ5UN僮aN]N! xS=jx$gG)iQ}YA1SLd0($Ap*TˋޒܾܞǺNfϪ߾ F 5Sڄ"l@:Bπ !nU{QLL X"tf#dExI Ќ3+!  \qD '" ̘4K$ՒE>H@yn>je}H=#xt֌.&mzfnnn>-/1 hlx'q|qqbbEy[YY> o0e|||zzq.C\2Cbrrj1:{,a5x Lq`> _WhTKTԯy/M?wzWV^[8hl<4(Gg I 6Kp0]?}ÝBlU=DyIYVQKp6J@?4[bfdq.ͷx" KtbO}3)#O51VzßΣ~[_??!O#DJ(&VE=afCz?#u}֮M}"0a"h#Xn [O#I4 es7qP=ܺ}Nk:s߼CpN]}f79g4Am{TD \ABCm?PL?``A" h}=XBVA bԳ,LgI7΂z6je85;[NF qfl k9J5˭NG&=MڻZgYb*G-f T 鮭d5CtUÏW_כ+hɣmDz]۷ƣ?jWΖFƢd_@Ӯ&&&Luefv":91g(ambkH ).Ӹi7WLVZB+c3 m#S0>] f})[4-t<+hNY?=;G 5e]=#sˀ Oi:hc2/KR_PJ^-K$O,g@#x4*1<S} C4G$Αy[SlHcH"° "j8m{HjvKSO~uٗf'+ӳhoYgՊ6EL@gͳ|[&V@5:L"&m &Mv,I3.R 2C* Md`a-H_7 ҶWEt\<}yH~s|_)z[;Hp߁~}fYt쳈ZgCS(3332YA*V`%5g@'4錝}>y'&;4gIVPR9Ty#C<0WC%aYgq,g@U)*E2t !,3UxF3 hͨfȆꝑDUG6Cpk/ 9mM;YF \A6dM(3G̵*5I[ JvUFJE*UeL#|J%fUVl%annaYyePdMqVHIl7TwWgh=쬆S>W H 8Sz5gM@2]~ʋB_I(;d'?xvǿbf_I7KHf,ɜƭ1U0/:5@r"M09~(vEiʚ׷db=Zwfr6b%[` H@##K*#yjU.\=#)>iv! DY,u=Eh4[f2ilbybг,7zC7>2y#3o _/ws{g~c8L)>y[49_>6b1n61 'g MP8lmZmx{ub<̫cLΎMOﱳ\%OJp}60'9iAD_Eo:* 5Я"I4ܱ%&_v9gz~O??}kZm~tK GadU$L6[?z[m7||k>}zDH(-n=E Vπ.w& hvaPЛvz8Z=W>>oee7t-:h;qFvw{gϼ.I=t>D,yCÙq ddf7ezqgYYތ &y1 u U@u#^8tNΉhZlG$|gU4!lςt)ȃ>^m#X,s“>Rϒn[sv +aẗ́Xڠ:3͢}$ Py }T?iPj28}[iHE\(x s]J[t&"zP[ mu*#5͎]a\j*GU S8\!\u*#zp}jU=LXAX 7Վ6֌8JKj-0UP4\@Ce# 9yhY\oaڊ!^?,G8XY(滋s Ov=v"~d(UmsA@FN$tB"k/mzN^@$viRZ7]A s M KqI:hif~xn Eh\^1cvQKBy4v !%$ 菢vV$,O,Q_/͊IW>ܙ .,U.\_|Ʈ~p/_@O ?<{cWf/p|lg?)M]-pШ/u#˖LLZO{㧧&ـqsfqY_,層N#͈CZaDN76Aե{E<x\.,'4 } =;{|_(X@ARw^i:[{>q[{Ϸ{ic>|kGn0Hg#R e)LC"b,& ]1kyf-pNG Y=阤3 gA jyԳ.ٳlf`ٍ23}%w?fheQތ,ŪjPg :UdftVwӰZ3ΚqV3ZuZg?3+L|DΈ9C|v`!\C¼`Q^p4?\㗼3gOs9PR.cyg  1Cr8ә˩f73\5djasn63PW{g L@G6|k+N`c(A;U` Dwii4T 4T6V7T D3zoa+7Վluh_e5L9 F z>sN:Y͜u8G#u#e5^f}2!m[ηsM^kВ'] KH"/k-Q.!ƬC@o) B2fm(| &sи5Ź"REgFT՞V1uKWg$XLvkBx_z1U[bOO.MNǦgfq$_X<|ne!c x/_;7ӿz8 +_~ԓ'mySsX\9j?={.z>jjԦƧ_:==;17?NՊ^4传#=ݫ%l< h qY}F: Bh6Y?o_4[/\kHBd4^7D 7 /Ǜc޾O~wX[6tiV*R*|}Ź]';U}>}gc hICDܧ0he4sLմ䉷F!Jgtbשk}IQlfZ%8W8O0K*yFdnq 0G@̌.f"Abк q\&YQ6nv.VgZ8=~Ͳ켥Ź+R@p>v؅L/]pA:Ioy1}^l ̅s&Ϝ?w9pfY}jjvqmjb?7ӓӓ3љ(6R(LHa趄ErHi]'*{[.qhdm7#~{# F$"8h^ZX'暑/5Ӟ<ү$N>}GƗ{?{-g@ ~l4.!bB #U#ܿi[Zd7va{8ς:BA(kz/?M?loUG@3Ѽ=n6`4dI@K@-lf6[vQ@$zg7zILgk~چ;zFf{aÞ##CgLvx 5[;M<[fzcdEfNI?"f _n7/Xf‚`RόBS Y _IA(T(\=]>Pjs\D3Us3kqJj. bf mFnf&`ME #L(Aver?8*ؕ"YU  ;vr }X ؗ0;hGe$r0+UDZjF[kO5Tz@n@0F'KD`cY4;uzl eFlX;wiQ1t@ q]U/+/*?ޙ{5hy?LCG M )[0Cb hﺡ |Ѻhxׅ( E hLA ]K\ 3;IWϼ,p ?蠅 xg7.D5X2IYЄvPR7FV`7 "_;WYb WΟr Kg]XXX w0z™ΟsK\87,g\Μp6-]X9{̻p~I}SZŵɉk/<>%_@֏%U@KGw!5XZS x$HQ.'4=Ky }w~w}Kz ~KL-bB"RتH5z?C:?ɖ-=#mou hY=#B N4Yf,4gtug`N@Ϣq&H=qV4/GZMg^Z=Kҙ> =# hC 4gg~ ;`hyU fV #3#YC=3lyʳ*%̲Dzg'+ᢂY@ 5(y͆|8$F^??OU3zgBRAFa(TR(-Vu4k,I=Kn2smreAtFY(ܬW`4qtE%5hά( N /+acU5X3Վl,kS\ d7€:lU=`9bXMHDWeu{cYnq6CYk v2 <9h 7GV:)(&Gژ@=m,!,Mգ&ckb~v-T+%%9]:m8~x^kEDN IUI"_ o hY !20/j!f1<@Q젙$klDn ـf Z*! eK(@ (.A)&},U!L+Hl~=[U@/V`XzMO38̪p *qA=[>̬sΞ[pW.[93u,ty g]X9ؙs TKTKhSOW_Cyt< q1_YN HS\$/c%nx'|~zFHabRHt}xÛͽū??z[?n$li0ceK}6="ٙCش+gUP h;vv4gzF$LHZ8' 2m KmA@e3xV+oϬF/;fđlϺFy9!8B3#}4ܓQdE-( HR' [[>{a-h6gǎ$+"UAN8 TDQ:}F4PSa(aUax_ ;4ڪ0l}4 je f 4Au{GÝML@s+g\_R,KUG@}͠fU;fn>7qG*+5&pDcpc"8@ب2 n0_lxQ~ `fh픙&w&P=VU#N~b]0K~I@?^cx^Ma^;hТ C2.gdܺ: 8HafH OMŀ HoMwM@ 3 5%M[]@K hI hx hAoc#Ќ huLm.;/\б%U@kJɀ>J܅sΝ= pw+V.D/[d̅Ν9p%a gK}L@K5=og#hqDV JgG "begm ,া71,rtͻI߲KZ4*a`n>`w>߮v^t vAg4OπԳw~5ә L!;Ρ l깂0ba;0>Bg?wО#^B-a hk@n2hH9DNjgzJ~_EwN,Rhz4gAJuŠb0T8useNH-QR1&8[D0YVO a!`myQ㕚Ԫ,ә]bO\.;lbSϪS`:~zĸuYg|$?{EV:.L2z1 #x )H<=eoorXߴdx }, Aq,;kD3mt~iUED݌%8=3fX9hf UCci*m&WXGpu@As#,Zu+iY-L9 n5\al46~ccSY%ҙ她rtWF sϟ_t~isgΟ=tnrKp< ,y+`B3WV`QaVΞ={.eS-Rm W_YOt_"k6#ZP#o%ֺ%Xv ;o&[p '^N|1SE4HS)FZ\bqsa[] WҏE Źko~s w~{g_5R@6I$/tB"/KgNȲ8nP K h#zg>oc6Cuv[TVS}faIw{(~0nwqe<ٓdZg2ỲC>LCތLe74H12T2X_Ovfdy^pCM|s-f@Kٌh h_q/"f* 2L & 0'B?_B>+dg-YE!u%238(5hfZ2(RWh G5#!';P-`YtfP H=X;ಅfP[(rĴDS@hX3DhU5H窩"e2P;R_;lƛjG8Ps{LԨì fWkC$PY)/-+)2m?ObVZ¤w xęT h/V-2sWФhц 1LhHDR$vU鑈>ˤ[@kn׀(Lr< \4\]y]@sTh v w&p؁ 1== ?$zff)z s.,{ܙsgΜ;*h;{Y?wWXr gygspٕsϞpSЋ0'jj(z4 9HuU^mI<1V(-+!ms,sb"kh@ YNiz+燀9Q@;Cy䳣_>|c_~xg_M@c毙mu[b*v0l9eLm&żm^D3Aل8#v hQ4([dNAM=cegD,gкz^4{(q3=OWe:j?]?iPA;pI{8ihtfL}&8ޙ34Wg;*;CK "蚩#s\vYi9 #7zg/ `2YHQgU@3RV(JեuUp-gIfxֳ;kk"0B^W]7WdgM:[-͹?3l <\oQ@3\r[@PL[o!dvns"n,QsS0`)4eMЂ&UjiT&=皛?1:`U4(D[ W桂 ZtЧOR_ԧ h>|"\U|4@DUU@#REBFUzZE fmƒDWG",.Į hQ.2`zh)ЀzCt, [5U. #^]Y\Y\44V]s:ʁ' `VNu-[TKTKh:O1M̥X>X[<4ȹ4`HbCOOF@#8}n& jy) $W8#5v#}v_G?O<~K 6>XgrpeoNۼ>UI;` Be 5[bLy Ev`C+{wwUm{@w(p࠲wZp:ӟEiԳ89t؏ S҇<|}8uz>b͈$ 8bY=' F>,,gN0O kX h- X*eW A%0zWj*krT ֠_(%t,3!^g#5ZVy e2PW`:3Kf.!.[n Fl`͂8#FiB9\;R;F{t MLYv9f0Ls`CyF.e/Rت*Ylv>*쨄`myLx* {s: wf $13! h^C^0y o ]FucdZ{ZڀUUe^-͊G2:6c̖%+a)gE=OՓ`"8D\C0XIh[jrNvxݨZ٘ h5>[@#h!“~Her:ƒY%h} TKTK7DDZ7$1M#se h.plcM^@#62I"MOq?Zw]\_{~fKW}/oL@buL19_/4}U鄼m u][tGU:HؼK3!PA2 Jgt=+3}6yT?߫g>+Y5ui4gLp&0y9U՟ƚde+( MYL57kV 1xdHvfN9 0ыoP %?^ ?LJ28ꭨ͈bX[0T;8n+) VɖYBԑ\3 f{Y^D 52`1 d۠fe"<[9첅4:`]Rog}GFp%vMa#{X{=Ű7\j:e"iՈ'+DSpu<ոofm/ti,Zp{LQ^aا5HXLjH'*c*߼&q _1 (muHS^#iqȉ'u xXg,Ĩ3 hϲ.a#0jX;hГsK~{G;h>3t΢z<؟?\r!W5ی؃ 5Sm#.[j 7jh.]qpUVw֯ q-u@@eʹ Ҡ 3GҸDc1 zFZ$O!&eP(iC+S;\3dhgeQ+K=,i/#{j=kƙfn>pnuD |99rc62XAÙn 3{Q"I= w\}6GRnF,bR',YLj0Y u8K$ŚHiiμ|sPVhKB%"8`+ W4֏wj«R[`EuҜU!UF4g^`m! AFPk{j.[o4YZZ9h:TYTX3(huF[a )L n2Vq ȑ6srpp͐|1zChf1j1f͈,第=:誠2PL@WWuwvh-<*f L̪( d!eГ_t;{C?F}o?ȑH@l5Rت7z>"-E⸊I= lf %,%ͷ% hQ=X i4Flg=ݻǒtI hI=FcE3XegL| 0ućsv/+˓ f2 ma$-1g&;1xqgY4\3ba8<zʋUņΪ}f:XU`ρ*šjYDf-暲 YDTh9jMg]7W\gEuFUߚ3c\FVy#T7qoWGZ]>ׄ _h 4dݮ;Z &aօa*0_eV+-gn4}U*۝#.Ak˼Ҿʢ򂮒܎}B@OfWuW&t X'ܫƥ*%д7i%XS0 ygbWEWG0 hdu%;9Vm/u4F9Gfggh) NX-ɰVY%i~$2tZEF.)2Z΃t5L ¨澞r9)pP@̢^_<垁/|S_?0oG?%r}(^L||G$Lu# dWK#*r=-;X; ZU;vxl d%5po޷eGP^cK'4m=4Cg.r^"m/ A~ҠS{c9QKmZ.EJm!x VvAoF'3ۛIY#@HHh^hE,O<@ W*lԳ\/7 \?Ø,Yf3zs$_!b楜2,RQ L13(E*0nHujjʂҠ$2W8c ʰ"*UAp2Uh4TC@}uu@-Ď ׳p~cm3c 9[L%K0LB;eB#XKXԆ[B-8BmpC A^쨃k͚0p;q)pt8I=w:]|p5e0fѠ6%NtȚhnh[9VVV."M_ɫhl|!lR5n"EJ^U\Z4՛cqE eOKߌPZ°#grz o>X-/,<\tinnyvv 105$!31H;k'f&F ,l23 c +W :z~>2>h%dZ\g tln>65 cgeg8`N/L͞fՔNTKTK&'&A@,24y*Z"Y"ٵVCOL?%0b4|9kb 8agMR"=%ͼmTwЖGXj먿b'$!iXi:ČW> m]cQowzO_z+w~o !{^ 1FD˫"-~LHPd%8bmkzl)i\mϤUt;3Ҽ][9L:Б4gz+߷swݽwPٽ1>xbiU-縵DNdd{-x,[U,wvf?\Y>淴flsڠ[ Vjl$(!fDHvV4y~U79e vx}g2j jqY@ZVss ܖ e W5x7tT5hwf&{ AA90\ơY?z*.;e7jB 5{lŗ5fYMm*$[xВV's AW )pF8U@w:#zloiw >v-iZҝ-#V[M?ZJc+3Y{, F81Af/26'W2",KZ'XZa`Z9{ȸm1F@ M'd+BKYB+&izwu.F<;L:IywDmic5y#kZقze!v?SS_o]tZZ2m"!V6J@?B pϋa"H̭qr0j_}.lY\hH(@XD˫"M'4-,͌nwly~>ÏC@i#|Ƕ"vlhzZ2"2Z̀$>k7j!-zu,]i{ӟIӟU ,ED,g]@*E3!,?GǏ$>3!g*hustNlF|y 8k4VOv֌LҙnUp-P ꗅ-%a/Ag-VLmf蠀VD;KYz;k lrn]|1Y3Ъf9>5̤! hV@qM9*An%/, XFDapnS,3i@Ӻw&$LHakRb5!uF}L"g ~'Q鱕TtqQR>n[c.' ! eX #DZ'QcDH&4=DIJO iKLZkCKZDh yqǍ[@g-h:^ h -KzGxCM0q4zg>-0NO/,EgoȋٙӓoΝS{.u۹"|5th?gϞőTKT{3ɉgk61ӣ8^7 M7?k@$kFpD*!Iheeu?m2(ұWۜw+N#G?7>ݯ}~KL$ Hn j:I+޴˷C[ӃX$3"Vv&lh5tѼsY=cyg}{<twLgAFRg5Lcu3ˀ> o`GRϼʳ~ZYj3!yg@('}9~Uw֒+Xs\RuLꙋf x*lZV$<ٌPߙe,XWs{"䪎UR hR}vV:`=aJ޹P9c gV*\/xɋHsmD)7r 讹&٘LZ `B6dDW̉QVfF'# .kĘxtꇀNatzz]]΁NVC N͘|JK"elDkW)aВLWVQ]QQR:w~A@cAgsYW6#hEֆ^+W]ML7RتsE*HdM%D!_;R,vCב4^ @ ~_يOY4 ·?SS9z&ް5[ԛI4CgeeE|#}TKT{4k=ݘ hK 6)]$ZbbNDYiySeU5^ERQ:^&/"U'IEh)('bv X4[fqOѾA4g'B\{8Bs hQ=#f,aϪk6 h:fż3H=d9L=?xjV(#z3"g]@zhB8!ۓ4ٙ=LgLv6:t&H: _p0l6Μ\EnhYTP]3]X֙`5 dg]=j̅5,sMY:*Ȫ9s\r92Liv ;DQ}t E6xRZoפezh*հP#+Ra5VYAHei4Y=[>t߾'Hޓ7}onuY:zճY:# ޙC6} CNjHYt&OI:'V$YF/-!dE5#+4,g 13|gϪϲs"P[(jk0̒(ԕ)p28G&e,~DަWmP=`S4lhUCS̈́p3Kj3L@͵6b$)y<t8340 `@ZZcZ5w !nNiq;ˏDRHw`EבO*}\@pRQRZS0cbꅓ(7CY˒w61Z@crVU"՞Vű&g%`Kpu6sz"*Z@W y&LHa*"qgj/2"1+#}FH:c 423op|o(Qg"1 EUMǢSщM@;wnii h{a:[(yyy;h3S-RԘ~ӯg::[.--J>TRg74-?:7j\XO7ZU.B@rb Dx8d1gءZ΄$% $/P?Qd-eJY8 h}b8gTEj:w`'"qs"T[$a9PѼ3vTRH*4V&;kC5F#Q?$YxUvn  8m2fٮh4bV"/9wqnW>tqܣX@K-(!!ym`G;zmO F8E$z{dZ@q5qZ-TNW_uԖۊZ ;?"z&ƢO3U%7zXS %0B PPdu0ތf鉨=$F**`4Q:Ha*viF@f Jg *+>Z4%AKZ7kбb%e33K\@ 7&fϯEpŎPICҢqJZiF Ź%K.^F #.k}5Kph` h#/EEs&;N}zqyM5"y?; K' ,3"f5K-&noEżAY7Gzoܒ߼˳iG?gD΢w9nUC#;kpl(ͅQ4}^"}30ݼwl-W9xG:39>x9qاᷴe=ggf)/>,!|z 먥6H: Y4G/*f,|/P n:q2)ٹ%PAA=e QJe`E:r- T|ՅmVd:XUT-d:#hƚZ [iְAV3 aJu^wT*5e~{:hG倫jQ&N t~grXf+H.7i5%p\CL%5ha9\U5x_^aCMvn qآfA[6Pg]*2w ,w[ UEz=>DNN}耾3d53[VxWǥ-oY_{JsU>C4 6ZaR*t-3r )<lsZ_r;+{jZm%-UE-ͥ΃=Z% `'8 X0\3:8Ag%P| kbJN9~Rdtbr׍ `} iD221`)kCaFш%L*SSQ Eմə[Ew(][Шs-?7,\68H+5 9D̏,ZEq& ,9 %6$$IC#Y6 zy6s{Zd^YYNE&fNO+>FʀƦv7ON3t(=`peeoqc8Y5(}4e=8z`Kپy9GF Wk¤I=ΘL$ЉJvNԆ1Y(Q &;ҜQ%W(ye1C@:ۇ_§xOY<_ ؊šygҜHi2eAU"eΪGeV4؇B/xϪmAd:"Kk|@YS[ަ 肦s2;(bg\AUq|%2Wʅ)c 5ƚSu#Jy>S8d/۸ֽHq$`+QmCtߍ54jX Tu,k0X[lqlY.֖"XohBԏޙ.znhp /Y24UU5tM!lQ@5yk YdYFsWW4kc͡f@3 7 52t:< R%S%!ڂx2=n( bD˫"MQ847ަ6gtPW_[W^Sj+jo*sfη~C.^@ &s 1E]@scWK21l{Ñl)cݫWZT-f3S X@%_]@Et~y.4 hX_aELZЀ>>5B ɩ)VMefzaf*:$++љ«17񍦦#G߿?77qx?nS-6Y\/5 ;sWVV[ɛogϞ~ðAM>v#bjjWl l@m:4_GZ91M@# 8%=#qk_Wu:7]?Bglj u}a`3>k4{O=p[b"} ׾#M'0zF͕8*fn I@3ża>ip϶=#iv73 nt#ZgLBϒDĵ1YT ֗Jm"j3w6Jg2Y ">DS~x?d /s"q18ꙹcr+@qqqм3('P9g:+}&]P 5ߙ(g3tFP=sRi'žT 0хJyo+ ֔YZ,]Q඗BA%ajJg, #UE>{if񙞖{kx5gTwT8*`JmyQ.aU=P[9XVz@mP\^=N0hc٬E,\n4׆5q36X w3W0O!6WrFN\Y (MfcD i&P7E]G 5-NQGwSD- %/#1,BY}]c$1VV՜p&Ezyֶ#zVi0e3Vv7Zo<,= v8VQ^Sb+n*hPX끯&bJ@G\rnʄCK[K`K a^5ʀnWG3릦4t,21 ۋrWob;h4a\LN|iFb ̀CpLuAƓ h[z US;Ou4W,!z|59(2:sdwO%2'#r.v"E"c)L'N*P%Drʉ!8sMޙشýmxޝ{ݲ˻cŠi0ټˍ`m E3gD;ikhh$,ȞI\@x 6ijY=<a?G}䝩sF63p9 ?=yG}')p=quN­w&N(MyC!Ӝy*( ' *xZ`eU=l+ڊBUQV,,me1Cya[ LVPMy(pѬfyr` AU= :#@miUqU8Y^X.hhn -W̪zFm8[jhtn :"^Ys͢ttFbB0W,2OF&l Ig#hNɥJ0([ {o6= [%um#H[ )Bw5RC/v#"Mn+D0% ̓*T(ęCg5ˡjs7{5\@7q};AlM%8/N=s*;P+tS_@38""}."$% esJH-HJDHk&gQ@OO/ZB$QCtX^YslYʬ&-}\@3_ {v<8݌ |%lKK-П]1Sɉ+퓓vꫯNKKϩ_?}cO>$My嗿?0jޚU/# Mؠ/0<a5\q;jvŶz\S<,@2& H -_^qo_kGB Kpxq!6~zQWڨ{Bo$}(|ߝ][F BXB 3zg Q.'t]  hM?عdzug];[wy ޙؾSe./3B=iq(-1gL麀޷ϏYYz4>3לΰPHf:;Ѫmd'0,{{^J]YQ1 g˶[fQl%>{ &2'*`]i4P9P5Ҋ;;ue>q+.PrU[UWύLIqk:YnELH.Q[U% 0/#b DD3*Y#]6C$|{]AxJYU aO>k:q7FFx ҠN,ygBI(]7XVFi./%0<2U:QBn 1L7d"Py.$4ڪ&{A0$̜rMH^@sFe,m)Ih |گ$F8=˗ˁXU|Bعsp---YYYN[oǏ'?)..pU&>vǎ ï*,߿׮]ݻ^y5aWp/~rp=== [AZQڕ'k:oU!nL*s>_F-d4&2#vX `Oбy> UO hdzV{>w$ ]woS@-F& fI7K޺S=TPл[w;o]г}f: Peg,s^Yϻ9qA@n6C"gKmϪ U0g@TdE>hV#ۛsL>\sb 3t6 h8Xj*X+8YТz7 #vV7nA nK5ڒPmRS{kJ%dZ^x~*iTRճ*bf̘ #r6P3m98h iYρgsK]4gQ@K5 hR̖ :q6"fKlќ$$aoC]5MaA3wc#-YQ@#_#{uzLmDNIy,3!Oאޢm: _kbklw֕ Gxb5a$"Aq\"K2OǨ/19eiYBE 8.U #e * \6}#XD]\Q1"tY uw[As.V@&zHV W8Tܽ&W^\\ c&?3DӧgNO|46l۶W>vܹE9s'曯n7/| Ї>|xȑ#o۷nxK_ɟiii?G?}~_Euu h{^|Eo?Amm-,s]wuی_|׆,ЩjW~[]F [/쟏VHaZt4:j C0ZtW&q% h>],呤u{I1'F[9śE!zyq tK`Hcx;oޛ1p.9i`3;iHraewzE-ue@o}4lݱ*>{wwD3s͚q6 !*鬪F^~E4Ϊf}|g>E;t r8z&feYVd+G?cP9~D9q]'|'O㬃SoG3+aL@KYs|VY윧Jg2rs$ƫ9ʢ@ER,Q 9jvؠ.54E0AkV- ՕjK@]iPwfYL7kYψz B 7%,hcv5 ?tko5kEk$BhkF A5͙SkU7C_ hF,}^grf8 9n ZVz`oS6}A>`+(p +uD|jbSZ#G&_!eZa5}ކ@Ow;]o{T*ks G<(x 2İ cր6NLgZY7[ Mq{VWKZԒSb50 $Ͱ:k58:b< }tӓѱ( P)^}q3ՠ$C ^=m!q,`bR@SϨ;uR>d] XM₪8UVjO2qGp> сОz꩏|#\sᘟexoO?}~ކ?222׿|ꫯ~`h>49sofݻ_|E:7;}॰xZZ=+?뮻>ZWWFbTKTOpՉ7ht\ HfmUL˪`qTbsLO! b32~AK6HOyqr|^monjr` GТ <͟󦝊F@nFπ䝉u h8 zVNDvv3ь`'gYj03ߟ~<@$L8;tH9tȟ8z,}$t8C9ᗼj3gI7xƠz g6gO %ug?;3 rp(>t*tX ;E6Bos}w _eR]. hDtA~H Kv&,ƙҙ?0XW0H]y>htD3 Tv6PjuDjul~ sj3;xP:i ԏk h 2 `jU I=L=Yu@pP⠧9i Z"Zc2Gh0 4C&: Bޖ  q7} ^:O{MotMaydߺH 0}հdB.Ʒ\^t)2d uV@0_4II5 xD 1QZpfϩzqzn0" hEь8# 4p blj.:>kLt!$52P@teW Ѐqou)I@۪zz{n;o_WE~e}*B F;葓Wψ%DcMt~tطOٻOoW{({zjm t#W ?1xXprBRيjGĬO 8OW;gUۈw&tgY@}֥3+RcQӹ4 |h4O5z* GN` 3e@e54j4ԕYfGL4٨ õ"@4T ;RqƤfHCuڏWFQ=’uZk>wԅz=-#S :[g,!xg㌄gQ.7ANY5e w#{KoR_pڻ;]β;9Ѐ h[W, h %ck40qk֔<h@ fZ{$]H4B_lY@b J\R==xˀ3UA2(gEьp$:hm> } ;R;_{uW&^x+Քb}_u]xΝ;#` wnO 0෾-|嗏=z5lݺull #˿k[n~#|37p,RZZn׿~׻+Ȁ>0V={LOOxZ!x՗R: \xeB9GY $tBڀ+.F@U@Gg瀔N&H@;]]=~TGOol[{U1gd8h'"g@3ά3"J{>kZ2 eD&|{=}޽}zFfzf>he7Y̬q =gf("Y\@[gETLΒq^ǫ Xz“>FUDG)#dtV @9+s<ǯ AoNGxһ1q\$Ə dTT08&f J&KF&"L=#V["?ʪ5 h;lCZ>!ygB `bK+/??咡(v|z衜oo}^wn6?? Bsa0@~k_^xa߾}W_}mak?XtM2 h?s >-SOP@Kcǎ>{Loᆫ0GNTK+zIxE h]&ֲf0 k*M'Lө$:I h$G> N#O `)89>Q]Yr8;;;{X?oGmR @"M'UALeyU$ѬD݌إxɏwaY3]>oz8pT YϬ#3+qs`@)gtfYHv,(T)%?s_[U0h+ װXjU~iPkN ;}֎::tPtҥ6dg:`yMg&[:Rngk` BϼֳVR6;T5 `egZ (( ;3o aaieAD35Nրoo *!x8k@i  -fxL(f ȯpc a!j!>%lD.l#fL5pIm @5k yۂYo5z=޶[g}Eؙwb%F.!ycR !l=0,1 xd@[9hQ.18_2`2D@&)tLC3G hx%'$L1"2pb|s^fܹs/w󝢢nk}{s6??( àEO\082vg-R}W]uݻ{9j<#70ۀStq_(m& g}6;;o}?\pW o fV #} _fY4VY>{Gj3V0gNq M:ƙg:t3(PJy3YBFU5* |5塁O} u⑺HuE3bM`葩$wu,V0<3**`Z:-E3l4VD33q̴;Գ d:\A-xMgSI e^RČ8㺀T2fiWLIF&c/0YfDR{[;#LF*Ig m2 hF#6ju,$JvhȖ;#ma_S%:=6{W}EQX[{o~qmz欯X_V ) )εrӓFV̉\ty3fǢ;х1' ZAEЂZ&c|-TůF+P@ ~EAW0w,eЫ}ˏHޙcD.,/OMFO6>ϽR4tgΜ>Omoj~7w#⋙oy[v_^D"W]uo~8w}{Ot闿뮻/))A vUSO=w vk׮^xFp^{o}-ۓO> 6o߾\Ɋjv%7Я2>16 -[]@/IQ-ڽ{%琵 8̰?ʨHI @?-G]Y^khkv>o0!<1uW`w_7wm|wwx[坭q\txZ/aiwELYКzNV@tF>ڢÇprx 7,;c3蝥>hn>0lNNyg hkHI^$OЪz6Dl( h͊List5T*WUь 9זF,NY,u3AΒw6C깁;T(;#,Y"ƙ߲Rpp{:]:E* 88 jhQ: φV 2~9e4KclZ]mrb߳ 蔀VX/I "!q)xUqu $r2@N2RyxEI@ַtvtw@0004e@ܾ+uOBFJL&0b.=]\@oi<_^A=?;|Y}?\V _=33vOd޽T?K/}~[ޒ p{ߍņ룏> +|~_gbx= w{׻uUWm۶Jp,..>Co#ɏ\SO=Vعs端 #8;vo}?0% b4~TKT W^:=~z*%-]F ӱy: bt𔦘YJ:x`(Wfjzg9ǡ)tEYymq+%280 %2?3%ͿyG8lF8ODˀd~)[XWf62$bF=mna9λO:[[̆N{}^3G=G*ʡ@]s>V VT2edgxPsv;!c 1rs1trN(><(s|@ALaB(YNv+ijJEa2+ 5eJu6<

B;\A 1 |/gvfaj2꫓<\ /E9 -*r_Ճ>}ћn}{W~xx;pO?e,--u^y睏aW_}5Ӹ\ɉZڕ&Ƨs!YN&X-|.!m4pBV|}DK=3{  ,-Pd&p5eu_WEH,価/O"\@O5>:<B?FNqoťJm]]}=w?D"!VHw&CH7I8',CnA7ÈxK0Hg3B޽,_@57}x<xY?g 3TY*!V3bGκ}&'33Tϒ.S(?_@K |,w./46Ȋl(0`< >6e:kQ)MF2 Q,.] 4$W3լgc -\j 5ؘAxus;`Q@+H;;l>fFv$ʳ%uEgFSԳA@\fK,fk35-kn q&́[EBWIn{0s[p!6nRɈQ(]0h(%<4^Y h+Q@Ͻ䳗O@C;ړO>я~G>˛(w/..”|;[n 8--?ӧxuu7};N߽{?o@ 𶷽o}__G"^x5M6ۧaf&Bүnx;}^^W^yj??84,w} Ne@Z] e-XtaQH*DdFER lnjom2}>h ̑WsY2uH4-ޙHN=S RW3UPGtVZπ\aw %7g$paJ8a}Ft>VNZ$EӟچdELzV eZg>nR }6hϢl0J>F\_n#fB0 s@*L7tf旡ޙhl cu6$ѬYfkhz֥&Jglnש%KdNmOdo$S D:+"]F_ f!KBIh.Q`SQڙFnkquwu״5 WU^wlov{:Y6V@_i6؍@Vω7<(VRB:Fqr2l^XX3P&#U"A+.Fc"MOs}gy5eid`ϝ;//ݛ6m'wt:xYrP\oXczz: _5\sM7]{pٟϳ>y=o}[!:%%%vƃ>S`"nE`-G?w]w:yyy?яl6`70?9mo{;z\ދ˦Zڕ6L xf9]po"Y^z hĥkE|i+I@mΦΎ.w_ G«e@cf ^YK^H:&*e6#eF$,w&vsE%H=kڇP}`"L qy#⢻ 8:|З)̀f9I@j# ^><('Y=ܳO BV뙎 v '?X(E*sKmzf؊"?CwaPә@l/ՔF@CuI:qfU5gQ7}2Q3P pAzzzF3R_ tѿp Wvj4 z6ZXgVnc}Sʳ9Hkkm!g tY2R wCb3YRYguy @* j73 ,Ȁz-Al)ɴ~"[2D"\ GՀ`NG?sMf@We g7pW0 ^@wIUt6kx }=(*\rp|ߑǿKO+0Hd͇^Ip_B"sb,<\?R,B4Ƙ1Jg&Ee#U(yc4@Z}:_s*A_u|}]@3|b`E[>`8 s3c{瞽lŷ>3OۿMOO#^^^_W헿O?K/8qC~oo~lk꯾/b1`"-\aqh2Sx;fFvnn?9̢`5NLLwq\|$eeO/W\pTKT3xWdGW3 h`uЈ4Z@Ka*otQOqWO@yCjВ%$*[v2'F3_6C1FЬ3G2΄4f٧ >4aV8AU@z>ff=2193p8dd* feT4,#GtꙌ>DVU1Z @ψA53,Km(f\3uJvf(mŊtf؋5ŊKg h,sM(;a } 3e:Zj h%;f՟f{qDIDATP@cin"Ρ;DMv:$;M@KO$0YE sHz6f: B_rvx -3ZT2%SL$)fp2˨>i}(ӻ܍hNYǤn~bU;Dh 7x#w|PwE݊5]0K@w0CfӇÈ  5A_)*|JGՍ#>H,!YfU"A'. ~9 7QF?,A8pjzhK1cHA+t;h!Ld؉ϵ~Zr=37vz^~.c..57Hs;{UWmڴ_TGnxCwee8qԡTKTR W_"Ѳ}.OLsXŹ%K&0)֗n#L@#R%F@ni}bH3u+㤸H[•A{I5uAYb{v-!,m<4/ &;Kxz g^gI߯ h]='Tj͐}fB'H~|voͣ-ަ^OcO}wTUP;?oH<-9?Z r|H~yUQ@KD1#x2\R[&$-,Y-dg5E@E@4|dy$|('_x%`}^"S5ՋBgyd:;;iii,NkWCW[\\NaRJ2̂--`D0ljjWr~/\O2ң!Q&5\ d%آ^$߈1EзgЍ mqm{[|Gl4!eQ-YzFDs3 g DAK ޙນmΆ|a?A6b9㰞 O>gf9;+YϪFg1d23RxR)` ( }.jYz, Tsubr†(PS-#g59I 8,[Wu:%>f1gH@h4 }?X4`sYi 0Ȓ Hc6t,&Vi ׅ:8(w&l)lg3L@-Θ㜠Ά%X$Xj%,Zv͐SVU,*iMR&ȴ&BJL^@F:#}PO bG(We;8 ^ZpOiq7t8ڻk[[mM Ά_!4kZ209f\9J@8I0 tТP\%,`OФ\_z4Y hXA\@kF6 h) hx#eva  G`>槧g'_|eƞ oIҮ.-tp2}ԩ[oԦÇOMM ̢CWh81xh؇+A*}l( v`:0Njv7c3Sє4`\>``Yi,ᖠ`Kac>5 e%UΆ榮wO Z ;= %Yf@7ɱ 3!]^^ä;F@@KY/ae}&:g-[v5 hϒA@ ϲgТ}N Q:tIU@(@in) j*;#RϪr,빪CYsmRYg&J"R1gtMI^gGO][TjtW@ǫ,Aax ygBAЗ1 _q1G&ťSK 2Iz VTKzۍгs/@@Fg'&^z2jPxbq> epCر㦛n>{}W\\wc?O1̙3&4RR G} c mii X,W>U^a-@NTK+m]F Ӊ'duz)Dc0ЀqeD__4y_Y#s\ h^kQZ\3W,ҶЧtUCjВGցGV0k7mxi)Y$mNgڣzΪhWA4XjCDD 3B[593@9;9'#ѣ<AWgzg9ǫ<#9Zsn0'[iΡ2ԆTmCDρBj / =˺PRV+2G讹0Q.8GhU, `?5|de=X@f8Z2[`+KpϭhU.Uk@h;p1g=Y/bqabg6;#5o [CF%m X;Έ@LvVB`(y3wn!XCCB خ4(@`G`&]4 rl(po0P>pO-SnŤ0>͞bQF%`\Fpc#݁S]S2=ް@haiڡѾ0 &ۀoi[tÝP7QZ}ͽ>WGRj,wۗͲ0(1w<7>>˯jcb$coiݞWHWGWE"Jd)lMr0Jjt\TѼ0>01c0Ӌ,`fP1/<#bt:<׿u{{={>ݴiӶm233"-xە\7ih4 4[ [ >01jv%ɉgkOϼ'juIFD"g4EOc,5:\LGcyYUdKKŃ37ݪ(,dAiX`4Q@aB^AC8_1cU碖Ha3lХu.W[CCGKKO{{WH@ڱ'H Û$t609[ h5["9&C%/1lψ=tH}ÇAq}Ȅd1ٙѣ8G}9́{<} N O>3Vx3+Qxg/itu@YAZJi(+4W|U۰송3e:36CdтB3:tvU*&yfM4cm &#f7Od68I&h+:tm<]<- f (-6(P7?T4e:6g&-ճ I@+F?8ӕ) #=CA[VP]vrZf+lPF#0خ2$ZMCNiȝ~Q+cؔ<WaBYf uۭDm hh0bZt֧zYR0q{_agf"ZЀ$j;.-`K特 5 ͢t6*t;RؚqG]@e<>0nπ$pЋ3,c:Iy lmWЀ/_3Q4 hKO@CUga_Ƣ5#333?'|~߾ TTxAb;UAOq[Z:tK#`MAZR"!ʵe,tX ,6 PN  y }WEnj髾Ngk}}{ssw[[_g?(C["Їv Jw}YD [-[Ks$Q7KsF, Xg8KXgCJNΩLJ=B_Td͈B ^8n3IOsOG OhQ=J=5#͟6'>SB?gTϕ >D1c/ճ`e-ր5|z EL8L:-s!;N Fof u ( \3X^#gJE2+ᗊch Zʐvde#]a 5F#ҠNq2ݒ;e[NG{CYzCV;r/]Th *ý`2t`[i6g?中D}~wsΜ==s9$(*X^{m^߽^g˖əu ɡxާ @i׺Sp[<nN_U-I{6*"$~F4 G (ޙP-J;A.3 ҂-'&1s\C;l{¥\@EiU1 [,Mڶ PY %)/~)_r:/t1R) KE@?-K[F0C@{9hu~rQF-O "%`Y446vÒ^a,b7QJ!kew IuU5H(C̀#gxWY2L(y*[ݳ=G֮;Jz Eg@ ޴fБy60;[؛ JؾECkɝ[3;i y;;{iwgtcWgjs.ڭ}fޙo-wtf ~oS:ˈT`gzFvP^em,f4xaN1:XTuf4sh&$㬢f G6,$bSAt&bM٭nZϔٲςdj3pEFk,h|:[\(orzjӲҤE%hv,s\R.'uǴ޸AY ;+Q.Qg/2q~E,vOz2J&ف9WLdM'wHNC\0ivƍhNMp}[_^uhKky㛞fVɴBNLsxc;4}{M]}jhq|Wz(~y^OJ#!Ж}d])R)x bNM.1l`K%4t h)4 {O@PgG<4 hZ~,Jㆦ=-8H%[fwMI.Ͳ7Rg%F k3b:i7 Ze6׮˲5TϘ|H)lm6k4RB@,ϖz޾ؾ-;hTg v[-vwv@=g[.M T)٬SD@Rmh#`gzv hrвvjhJڑjYGIg;v9Pj2-3*i/luPe8PiZ <@fY@c3tV3v5ǚ qN6;O:d{'9pp:.@љ5lA<@ޡ}TH|PPHW8`pf e'h'k} Jo\g-L1m Qi_(Bs|1gSKOx҇ ' WF@O$Nv`<5;š/lǛ|цp]sg!-/zMoE)8+ЎMP}v7A[ 3!PTF[;rRECTg)YMjp /ϋ< )!="t b(6|; ͭժىq| tyg /ÑghfY͊kDg>^ ._Ius ~zF[y:>o0d=o4vpoԁ&c'pg`8mwoegaCtFvݩ6jhHւ2pG: dl#Ah(Hkv0Ct3f_MFvdF &OWc'4]RhV LpīP6-\@7,L坉l sFL$g sfڙjCrP4΄>g:Xn =6Lӯ}/=FivzGϤ3f#cvMvj@.#nꅠiYr2/ E, hS و/]En`Tsi71xP@›&c# 紐b:5F5U hk Srbʍ*[J ";4>w&nE"KZf )S0g`rq?Isl'AzGl]H@3-yaŰrY!T@[+89˘zhxO*R*R*eR`XAy]Č4CΗw<'J DZFj]yVX>8?w hwh%D1 7\YAV3Μ_e^xP ZЌyJ yg;cYOeJiylY϶̏Bg`fMNj>3,gL=[<{8U Th($hxP3rβk.&۪6XZ',g_kxZb@:`)h0Df ^Fusi09֜nqVpgwS!ؒM@-@ES:}fɝOK3]GzC3:L{ÜI@~&e `;[CjNg.Uѻ#ΞYIGєH1QhI&;1r89X,pP.R$p89g#+Rzfc7whƊ Z@M@|a Ѐ ""ݳ-;XYJ[HF5u:~lXϼ3mm֩#Նwި`g;$*2;ˠ>ػ-UΞ[@ײ&.·jH>hoVsϘsn?UiDGٜm!ݮM^f!+8 4 >ñAJ->c3nu}Hg΄eEx.gH13YӠв}Y##:k %1tfs;׎t7ÊnM1bo(p mQ-2WqaG 9h?HqH2s,G:r$4H7 ŻBg$}T[G=~%Zm訮wxF UD{ A[Z2 (KcOd `@8xgB&߭mJ' dЊ}}v:i;1+&,)dY@n| ̉ٙG%i[Z@NVtTJTJe (ݞX@o4Pb=3ǔNesSDhR 4L.1,~5!#0K ē,Xp[DʓIzpɩ r$F)̼pja \&l bdn%\@4F DߙioK5u+V滳l1}ChFFEOD)dth:upA[Ae +3(.ʧybYAh8_jY4c8倞p_I qfPNg;Նdg{9YNL>vy}t1MrӲ$ Z?Rot\?2)?e@SObZ<MR̥f |@N>ezhd:_L@Y//dkȢkD͞Yny_4M_xzg`^HgH9 },kYS@^zFbAy3L@o6n>3t)YR>sطDLj7 Hg&,;/T@Sg}fJg|he8H<h3C=#\g9בtV`6  e5fs ̰T3KafMR4$LxgHKwE{ufg2j әu<}ҁV`]3},uCRqH_! D>{ hltYV.f7J7,s4q$4s:Qqi4O*> UfFzB@g;=oh54ꘀ޶bջws hH+hv bȑŐ#j˼&vt#e׿kD GU̥r '+7.qg3Ъ%; ŘfӒ䙦->(Ap00f'+,.g_Våwb])R)R\@+VRsG2 hT: J7 OD@+/BKwĖ )wG5:/)E((_=#de2r7(Yвk+/1Yf'+Wd9#ϼjkMkFS4he|hep? $zfsdymH!L@,jԳ-e#gTX Ψ9lA>Wz4l[5_^k`n }f: xg;Qo3"bKfI=;/-ȌsM9+aY2tAv̳AYD:`gusop th1;MU=;\=B&@&Z'lFPF3 uwFj#nq͎dcnW:#J. Y.+n&9e:.ey9Ok=wЉX/ĺC| L[[tCg]ݶ+޽㎀V=/J@/eY.T@3.%gqrУ#3Hsk/E7{*P }4.ȋ@Di xԳϊs lMnfy@sLŸA4p, ~ZE>1 x h@ncq] }+R*R*eᥨ.BE@{Brsy hqIy*B{khhGE:;e hY"?C&Bn&(" H_2˞W19Ps^n#`gm*O{ؑxgRNZmlʠzngg%Dsx%ٰS9S"祈q6"t7QW Otrg]:7N4l!s\7;>&ǠTN  pdv 6Mwijݡtw(m$(f<2e=ܱ܏ ٮ4놇zr,>1w/ˉ.h E P.Q@755+ma8)eEB3+qŲ|40\lb}Ko1L6SE*ag-]wQ4a6&y]l 4;b[@#K%ٍ '&*R*R*eA ?Os@+(&&@ JԒS6 ;QհM^b6Vtt$IsW"k yE>JfD|RV\3&+ f mv4(2l& j[=Y5Ja.FFV;s 㼃gv3>s޷ݲϮwU;کջ f)s^#pg%ՆdUm{2+Ys[M $[Ҿ:`¥tkuݕYn\Pn 4)!E7:hFX4bY!ђMTKAkVqFMGR<3[ Zuq0&Ι42P&ZS<(7 ;`vxgmCwRm &ǵDVx;ehYrЄ-cޛh t (R=ǓdK=8JX fFg №䤮)-?JI&'D,# >K@76빀^7)-]VfP oKƙ3ʝ"Bz G\ nv3bm߇0i;@H h;Y YL=Or4I(A44VD zYex3z,uؼNG7̭ Om)'zvnl6vlՁ΄{QpA f|&]#xgxFYD:+^JX6&ܴOoޫ7sHgI:KQkjZ*`n괯6m\+"yg [4{e:nd/+Ⱥ (᝝ fH8V!)9n$4 ծ#mC Smth@L @!8C=x ,6@o`ƹ?j ij1'BMn\N DE(@,yXrGXhp,FršcE"YeCnNK O2xi2(}PpK:c#]p.Щ2mmDSS!0}hq-e̩kĞͅ,m8}Se|* hB^LͳPH4+}7*E b\&kD6r, h;  pg7H*u*p 5!/M1 l<֘[2X]x~Eȟ5E@WJTJ,,X@/"8O9٢ߖ2م#sS8⾎9˕5',"&Ї;Q@T* %>{Tψ2}.*_Zad=4gL9˳afOnYa㺬l/(bM>޵ܹܱUM̓lzv7l GMg+ϻlB@DϒnV ΂F>Doٯ!tdY3wv8hLi΅smSUi}i_ -tu\w#gv2i3PL='g>3ݖM3sF`Ϣ7 0\F.`v`Pg!Q=xԀސN>1F'P@3tӈl=Sji'@RL \X;4L)BzKe01/Q ^Imxk@"2(Y3KӲJf$'q2>N;]nhh= zg,f7/l/b_&^bڹ /+^5ƪ쪕pj^ekVg JAYd,xްV%X d4tg`3@; ;ع蠑]ͽ};B=[ " lܣW5}f^A^~#s>٠P  9޹ hd\WqjW28,xJ 4wӁz 8"2+t0a)ՆX_cǨ-InJBypc)z^́>#ÓCFQB:B|ҥ[J7&t^ ̯y?"erʌN͏,1u OޒF3c|bFN oɩDI,lfQ<5J[grjor(L4`Ü nHg9YD=;sQ3 s L@w0>:MXz$־Q&Q:;I`ܹO`"u80ҙRm0Ѐ[@KΩ$r2:eqeB23%88.I4}%NgeZഞIO3Ztu3 hT!{Tp" &}@O_Lњn9ll5ԇkvdzvni h8J2 mwGj49gjcEB^:)!iN|Њ%hnm̤-4)$!!YZgr*VUF, { Բ8h"I:8 |Gj *K@ۋQ9̰zrdt"+R*R)X is1+2 h5b 5C\8t!T%t$e,#[%)ߙ(j̲r X( hϊ^Rw;+}&-g`>oZ@#^og}4ϹacKmwo2\\:g# }>gGs3",а3ۆӠvCi!3Z3 h/ШwVsi,ۆ-elvzg<*p(HI6$ˀHZ6m& l#>k\73G8oLkϲz3nl !Ig`А36ZZz9gcAYΌxf0Hg vfYfdXRn>^$x{3@#]86#nAܢY_\9QE0q qW{9BG4g'Gްlv(cB=&W>ۗUbt M@%>cBIX Y x hK.O! ׯ hnM8Vα/12>#gfC^-̓sqV Pn"t1P@OY3OMwXW_}%N).Li/@*_~%NEJYh,Ll%P*\,rJg24!!X{C"8Q. 2Z4ʄ еm([ZB( +Ǻ=x1X%q.K//h)bU=A, ht ">{hJ֔qgdtς-[7-^ z-ٝ6gQ=}YЊ}bn\{vgLCI=g1TqvfMnVԳ,kvK=wT_G;׈]A~,'$eH.ʩ;g,[f0ؙc*}4iڥI@[DL*?k 0:4 vvϣVT3H!Nh<\4/dj1QKr O<]5%^S1xyQ/X~饬❉"!=! +rl?S ϐgԳke, Y[7m3ёj3Wީ6yϖޭYN( >e3bgbE΍=Fy_q/%HY9˺m; [jCϾj*5G$pzgsI lAځPlh'qVMt嚁tƊLШQ`z Y +A12fhmP`L# GnfiL6s=KYhY=3H!І3z<˳Z>Üm2ζhvf;W嗭4&+f &K1#ЮDrEpH񂌳# J\Z >OǓcDp,0 !To ޹w0Lvg ԗzlxJ>! (.lnOe JEػJ|h=pt&VO|Q#G)=+Reth/'GML͌ RȂK= nϿV4}q43,6$` QXB\*E_3ݼqp0ݼKPvs>v/nH4RVg3r06:vNgϊn&gwF,G:;FP3$荰>k|AY:}戜aEs)9B4Kac,9q4i;''9q<G[43dgĀ{zFE1#ecrΈ3=8o8rނZ Fh ըpLdBoT:z">KQoW-F[C.T9Ts7{ZU.L<BƇ&=u9!(CYƼ(⠕i ҍ;(y^$,CPNeP&6\F=J3ϿK@3&'D9Pq ^w;h蠙'BWk]]gqٍ,e[ Y@>|GVEEd9PW> 燉g.0M18E WWyʗ_~ ClīؾЂsҽD/fu<Y)-L@"e.mfSE1! (D =K4dyB Օ#"@j~M1Q1d 䱲h~fD#+^"$-I7xڀSO"All4BYuT}fXYv;3jP"ޙg>;~a}FSm,E=[P-kytgmF1@^i>Pt&ьr}5fE)ЊtFNTI7+<w0Lso:O3},@q{3gE@K!ԳϨ}fƙgyVcX$ t"6, MfB@SNg:&80g{/qx::NhV\3YpeIbF-/h2/|.Q/Fi{g;tVLFWw&=v}=.ڠ5%jReͪ,0V h@|\(g$O!L|Z}H4CZ*蜝~6&W`irA-˦- J!x^aUAO1%F\uwe GA2dLgY^emyereeCG? ǧ\2*ֿZ yypnO,f'mLJ:T=COR)_RKM@([ ==pZdX"aB3\*.H@?9kbtsst#7o+4 r\@[7-} x =fl hVΐ쳧p}F~ڐ3oP ˼<ݳϵ}6p ւn3˼q;!S6 vr 5.,$J# hnπ*>Z4@:$m;d;|m֞>}浓7N#~ \ @3U3vmgfc~.ikAn)3!P3жzٜO&[@}}gyD}$k ^ג($8xyh.Qt{KF e3 \2ȅlө:chЭݝ-ٶCZ D@;4÷}^48hy2JyQt h@F(}GGg.'ظThĝe+! IֱϼE\2!f0_ h,E (.ŵ4Y}BA 봰V0a҄89]*@,X?}7*R"F|4犀^b /W-0bn2/ng꯽NٙRcr)v{uA- |%GB7S&zeX:Z>]'\Zw(ذ>'WY,m61}޾)4sܱ%6ޭ9`H۷-+am<ܑ GnwPצnYulL)4hm6鞹zftԘYDMV̶h3L%c3gs uht+dBTG$\.&ݤ g 3b0ZtaW:fp<; ׬4f(t h+=? rn!ώTq hsk4/ H/LF2q'1y LKP$Qh2IK ,lIv=j<><9a3s(>5JD 'hhfmPIJ7)/fS3~816+Xre +g\~ 7\4AôSg&WL<엋JU m-UL9K}İXU4܀ -q 4C#)߸wqʗȗ/4'g(ٳgoiO1ؙ3g;w`fhI=zR/G?i_|cT׶ M'g$9GKp'p;TP(cs Ax=,_[`B@- ĴlЏo=c8P%9Ϸ2(o!#CFt 匲lB\ePWCǶm߳sguuuK]]C~qc/GTfOD hwg gfplf DuG /\R@ہ$e\޸󶍪FLZ.3϶n0C-B%Hg>c $3zv h>ZoʴVk@[wf!5zGuW@jk )VsM)ˠF4Dl)J^;φYVC4 : CF(@; 4XjUM)z KMFq&#>-Q=#XFwЍaRڑd>Sj;'ǒv3WPATmct>]3d$0j6g3)AKun2F.BKp9FBzv e8Y˹|zLl&r:>Gbh"M5W+#yfE_΋Xڛ1/=ZbW2!~-/Zҧyl] hEL{ hs#Q@3~ؿdM{43ŰrЋЈ"Y@]>!K"*D=>>4᯸uV24 _{  /W 9s?!ܹ/WU,;<;=իǎ;~͛7?#xQccc׮]D"|\=WTʓ(O@KR;L@vDch+"o;(T][۶L4g!]ҙ`WYЖzC=#^zJ♐WMkg>eFP=pCFmh=3 hG39`lm˻3 hv%˴ϵ{fٛ , B@uzlқj;#Fr=39h!y n0<9cFɄ#q2@- XDní9"ufϐqdڌLnrz;Hڶ>Df|zoz8hl3ДCxg̰2z6HE@g2"˳1K1O} ,F4q49̸8,3GxgkGA"YQ/FKRH  _eMhAˌW l Rݰ\> Pˏ> ׿⁺Pߜp)>|*NLL?b*P05\z֡ッ.]:tvD[)- I-XAQ~pPS#@?|;Χ~… n"vCgfcq6 bgPpJR*ee-%R;!-*4vLE@#J77 Ӈ Oˇ_ݿ7);;%>AM*,el#fi~3VH1ԳgϊzFLy3\4gm2훙qVBeyP3pg[@ϤeMu!v{m6͎tf{ @X;h&g))3"p#s7w8\+ٚzvDsB˧HĐ2R5[i 0,u 3\뀊L.s6P.:O @@,ffe \=TyXf0 FHf ñ #k>K6hs4:HP9\;H0xB礜^C̀5g9)L&2>_L<Խa\` 4l,D9-jyG`D/eQaFQ]p% TU-'% 9Ohc0 tCfK}6To7{ٙXάW~rV.;hVJhUCQ)*(Sy )2|;+(*4,ZN2 ?vD-\A`a—D@$V8hE@OB@$)Lƹ4)gMhUB h{ϖӇ^p!J)?v.y~B|;×/_uѣկ?L7͙3gΞ=;00[oq;qD&(I?O8㲡_<|pOOϏ~#uWWשSp1X[ww7\LLL|߅;UxgYg>3fGJ j83Q0Ѐ$3Q DKVNbML@#ܨ' ިXO6y,bFlѬf2+dZLq͚O;/Qn:3ճfEzÅ@6om60Ay6xgj%w \V l9X8Sm0˜L&S@4GcIx"s h8zN0(FBΉ);JcBgK4K:pgheQZ|&Dl FQP@o/1r$e-W•lDFr6B8/l|Ij>Jq9~)O$vތ5"pR OwIL@w4uTS;5/ЊDVbHU2 h8+)K rCK2e/"j/eܮ@',z&A[LZ<4lg+$I2A5FvSL@he@+ ܹGڬ|.t&\\ò짜4݁(j^dOV|fN_ִsb/y 3C >hpp0 ~;{Ǐo~` .>(sΧ~0߾}FAGz7ҏL&~FU\<|oo_|s!`_mll C5ܚ@EV9L<8>WFl h5Rϲ}W@73s+F{ xgA[^eV#<t y6B,rQ(3 Xl%ZnpNyA3`[tK fڐ_A, hSΎ ,9 {BhWo8_a 0HU:dm +F4a<98MZ飉8wɴ z-n -"4pG類W+t#Pv̯\X(V V.Ш]G<6P4%P3Au,Q uʠZd,CO4:hD^xX4&\||F PVq=b%?\ Cf&&ا~l4XavvҥK/^r c .$a8σS|ގ}G9==}ȑ'O^B͛x,~(CI-g|>̳k:vGFFz{{000c5,ntu6_CϣGB&;;;1wַ3)GABZ>]oܸ੡ٳg&<7sΝfƫpwG?F(Ǐ?vGs.o o_K$,n``_{OͣJY ?|'CG'fe끤\e^{}e"%0MtRZC/7MhpzS_pgtE@ݐ?MiP(kj:--e- 5BuОe!Wʮ\%ԳvfyA> ճ[@;3fPuCFh)׳>[Yh}8n}wd1t," h9YВz4H 7P=#[xg>*J\F/f`΄h)>%Irk49┽>BnHg5N,ü}̳Aɝ:Be13T|Сuu=;``+(4typg&ÆGwgy gcHj -e=K'2GScId#<Ov$|2\@ xܘ\E"%ŜE4gh Wnh.*4Q3 _8FZ_ I.(t1mht(y1~ؿd;$Г2 %䠧02<,@0a8.{d.e\,CU@lGtuVa11Kq@ s>|8ݻOOOC7\t)NLyRɿo~?c޽oP4L (?i WO7t||ȑ#ǏHŋ'|PQ`O:wả0?c 8}!<^z oooO> h4+ :|{әx{iBO(f:44WpIf /?ॽ;T;lxя~~|p-6H?1«f׮]www%Xٳgekt[) Ѐ}Fs 8K /X@ p(d*QMI@Q@wt$#++VtrNAŋsB4{ByŊtTjÉ}V3,gnqvRڐm igUm@MY%}vhilh;h2AWewF-3G"F-вuw&& (6pʂcMD33: πnL-r#xgD$9t}fv1M}ηyvöϲݝFO 44hvkJ!P4{g ,KNS}4eI$DmRȑxhH&S)gPlOS)ЧS8wFbgSs8*8RKee"E:yȳaZt5 3BYfƮgWgpz9hU1#._,KzF 4ȋz!j^SsIw"W +Yx1k!3өNOn9o)0OK@}^#'G& hZEyqxgBm^.Jc \ǁ9cE3r(P4g4\3$fX{FVKPNH@$AfYfXY~*|4ޚ 5LfMĖ{r9\__`׿5?L&[o c "Qݯ:G?XilR?G":J(Ç;w/}l~BիWaU0-D4MK(1?98 emBw]~Q{]ס}~t:=>>Nx᡺Ơ?AUUɓ' BheX4³LLLܽ{^;L )6,aP9s_|'qhhhrrGzcuTʲ-ω~8=)n)ٿϗFi^FG"Q! ,գ%7mx垗^?.jJ 28v+ `jݺyjXM 7V1֭v]O`g nTv yC-߶)cC~,sSc"6gip dvs Lډ )>1b6=YDf,ph_hܛmܧ3@;̒zA~lZIa\O,>Z:3> EHgFЄcM&DK6&-ޤ%CTn62-&TXcHDe¡UzǎІ e@ЀѦa fd9Fڰ4 &‘2ւZWL:nvg  <3KS4'3IK :"%Rqď%3hHi6II~5215DZaT&G9#=9‚G'pakCCC3:G\ՉxŢ&Dԙ״ G>F'9vg zdt"vJ[08pB_@9_h\?(^' ײG,z"Y=[)^͜;(juvdwjh #{@",ŧ(āYp?/ezu(ܹsx;@*Ӄ&Bm/`#s&&&`,(n?q8_wǂ4>fW^ E@駆aܹsFMNN8q0￟L&>x4f`f<o 3Zۇ~%A:p*g׿ַ,1?#>裏_|^8|R?#).]tփr@ =ZT,<>?Azj|o8,dbz!G Dvo/l |83Yp/vYa54wqĕ.~9!-Fҷ58yg[Ynqa3- Yy(ß;P@ß0N [޶@usUmkm1nH$,xeQ:YrtcS"xgЫ^&~5c*! 2zkAn xgDgY@o\3csh؛D>}ޟo>i}&mչ}扞9YD@WgOm>:Pѡ:cxg[@+)9ƣ,yO-֬%ZTi1F@ G-e, h}fBFvm-15Ͳn&dL(Q@c&hL [ڹn3!,9sl6Tv$oDGQ ˹q"<:0agDH nmQ;G%X Ù/ۃۧw'.af#|͈\e @Z٢XV !|54t#dwBQr7ᅫNd7 uZlS:ڭlg/ K3tgΓ? pco 蜯:RiڷuwvEݞAE@s*KglO:b6*zF\ޙPgF\΃2P!#3\>$v7(bH-K˔. hr((Qʂr_JnкZx89`b!/q?Bv^aAQ"ᦘVY222r̙X,b'|rȑa|D"޽{l8ï~/?/900`L&s7r?'t-x# ;„;::~>4'N~i:y&ܸqP(T`{>P‹C3o wwp*8׿OV~ΝP( \ |0?%hBTJ,h{h{8>  (cW,ƞ (*47P?w,Z@Je_L( e.<3 hY= VkVAfL L h%Ն"ehAjm.wFle޽# #ߞ+fgLL@~w3ޙ}9O HuY@A>w2 :2z6 kC&g>ǚxs#4}5i6¼3nqІ /@Mϴ6 !rs:+E:00cNu44d jip!5IƁXH2s8ď&Rg43>SɓI>\8spAIG)# ד)ޙvZ:[ouvvB?ٳ pi> B]}~Zܹs?;{&x0.X ~0۷u]y.0<),WJ,22<>I@K[pdձrZSЀ2(} s< t^.2c]^[?hl$ysߊ? \]r@x([:[^/ktϲvgs=y y& 9`<}Sر gE@Sݲ͊z>#oa9;8) gCζa%}Њ}` ZψK=}4]r=hݑR'SzLzE:qfT\:vAK $'~Q`E#z v RÑUd[=Uxg!C׼Bo7 Pqs\zbvG1b69 y+ nvn,Eu.CfyO|'m#z#]!}_xOЏ hf)-&G'4>3J]XhP׹Pw2a$%e2kR(c`7c#RhMqD7)3P (LNSe-+ ' a+I69ykZ|14b'e7}2x.S@;NbZyr+{}駟}>222<< ߟ:fF/+<44W'&&`8tK;NMM/p:;; >|S$P`1n( ~B7VA#. %2 f>p_X MF7 g׿./_~`d8I` p Wy <tPp tiaLpirrN3B#`%pG{^Z-_Dџ'?GOG}Ҹ }pJe[<bp9YI h@SЀU 4b Y^tYZ4?>})<2AsMk(r#t1PGJ;YrB \&bz[VupyJZQ v3g^Ű4gШiAͲnFMuQ@ϣz&ඍ >3mG@ 7h#6m99g @y>Wq-\B@ȡ}f,Ҵ_D:i}ԪKY~[=FN#H7^وc1 βw7 'fbZxc&Rj$2TvSk3R͙DcB}f>e7hvv 4J @1lvHȦef/.ՙkm*(Í#aDhV 8cd$v8?OhrӚv,8JH1s*q*?b,.x6=]9e}єd;fw$]\6Ws|z6z͌\3׳*7r99r4n` 7 |4_뎲sg{SW"pU[=qv'UЫ]A7u1rq[^Ҷ(w^jY:,e–2ԿyJhڒȜ9{82Pj%Q" hqK좃2[:~Ȏb Z E@h.FqmgV$puygg h'dYgwy4PT-X]^\rQA0'?{7<>o} VC|vY./ :c;V -gϞq!fHf-ޘ´αCTkf0}dtW[o7MTs3VH1C ̴rMP kJ4- .A_L-g93c 88H"Mc̑$ԓ'3DD2~G=(L*><9swI6%#~L^cl+j kf | DϹ5 }X ͼ33S#2Yg|qG'8Ni[b ' y [:(C)ԱB@XJYedx?~NMM̢UEn"hFz[@Џ!{ץ*ReB^P. I@n(ß; -۪h>PZ]+tk{"D+Vtr+VȮzF ]U fI@}&πj8u3òA-ltAo{av!13ImX9 JZgY@92>;36d>5ȹs*XYкJճe9N3ДYa)>˩68+ճhJ|SL9wGgP@蝋gr40nqvIgMeC#5Ɇ3:h/Not[i7d,;Y>DtNi a1G=۠}f$ǒtx*y<;L&N>[!ϱi3TE:wfP|F~5`1ɆgNqEz6BY57Q\zue 9ZavHd/d;1 wZ u7 09z-q'w>CMr+t'ZO`t/MÒ<)'Bxv.;~t3gRǸ Uf\@+ ')'&G&gLͲBigj ffYisB`T ҾU=#OE鱣NYV3A5;zFͺqAՋI@~ ]Ѐ )I*'==7p@=; hX*\Z>P1%QeRИ*d6alc@gGP*旀:v6/p }'===՚ƃP*# Վ O}ЎGJ0LO(_Ul:TЎS쏍XX볳| .rppg=^8YHv<#R*eO@_|s!r8\@]2h \%484n\Bc҅nMШ9-PХQ?w'P@74ZS %rip+/T(^{ieK JO7+We\B@}W@S3g^.OԳlSve(*y漥sǠ}@ڮy*-!Y I@c,c1r3CP'$*|sQnf9g@D6eX[t ѢxgBgFKHf2ϒ}ָ\Fu2N=0:ۦt2N#+m`44'Жk 4ՙdp<6 *L=Ys1-%ܐTT:}2>O ;b}&,ȰN6 w#]d$dS8gY@_6#W0 Գfq͏WUlTzƈfФ [k.H1` haD[ZtcuX;;|NN( PS.p7r7ZB@_5;K;j=h=m:n ux۳^9I=tYh=5:<%()GTx!Q@U(Cj~d=9Q>e O, ][FnA<14BM4PZ@:&׉Xl]BԂX uJx+ЎC" \:?ϾI#ߝ*TԈjݠ`OjA/ZXV(BXWлr7ϋ7Oǡ'b7Jo M\Ƿc\jT2,Ϲ~H'Y@?cuuSn J ɇM@㿰 |;34]esǂtg[7z{ŋ2y公@r֓休r:ˬX2WUHfMYZIgy]VWf7^2A3 >+~C! l ؘCLҦon")P-,r`I9zWE=b1۬ƹzV=8 08h6Wq6Y$}26e&|Uz{M&ɰ}kj#Xhc>TgjH}=X2DF\3͂X?C!SNHfS((Yf*N2c3tt b#>h-iL]Ks\Y`e ݙِ2lϘ u3K@&8P!LZdPFB 6!u< IN`g+ζq4:O`dX2}< OR'Rm+f*Fn]KC|-2_ϡkf{E3u Ov|Uh`@S\ Tk]W:׺xw\3{x/|y Ts)h ŮM"t',6{;WrLltxБp@`zzݿ]#M$L6}ՖLU![@ =AL"4eE@όLhG|l񑉱.CKВTb. Mpa!xቡIVḦZ4C7[[p hVPGv1Jghlq?9JfV.A`7%iV$1aC,s'z&zRC Re+ ̓;d ZHpf4"e&J׀&.eK`XRz~r2;CMKEUllgpuFe+Y/#x'Ϣ C_љ9KqUD0N%)43cc2 EŴ|k:y7f,o@+"A3f&VKvb](=d燜yMx^.N?!rې1TSpT{%e)8^8ɿչ&~r9(ß;, f>{-{6n=@ӾP/I[6 |r`yBD4Ghm9k}evݚACe*&=3#YFϊ|J hER4%wob=4!gE@6띛 z_n_ t(*z:VlNUi>Ʈj#Tl0:5`7CLOڌ7ꈲ }ft1;{YfDkӨ{ *bvcHΎxggECt&Dȳ⠡`Y&ǠL`so@#ҙ(bfYϲs83SϩB@#"F1 yZ zg8lD瓷W&϶3f/\<4Es~57sUWP3 [N7 ˆ0mgNO{\|ao-ŋ"^ r-WsY%v[@^e h^B ,T@+a 44, O%H@SL$ b3jдh. h)_@ ?۸Ӕ}:p hw&MQֶPV@Se9 x 4ΰTa+R*{ χ> B DqJˤ h{e"y )>V@y )1-K~SWO2,A_dy%:tC@Ml_KɉQŠ@DPhY(`܂Y9}^:ZiȺyu]>7"ֱl`m Dwޱ پz޵Ȼmy[@(b1$f]yzwz, hY=cg ] C<ۆ;"⠫Mm.krLPPւ P a8+S=;RmuK@s\\ϊnv<&%ncYf48"zEXE@[s=ZSuJϲm1ߙP=wIτjCd>g8zfI6B@;3{v? ǓB=sRV Ud,g =4ygNwt.Ηc77Wzfo؍lB`g +#m2ˈ,\a:3!7ZKcc;Gwb<]F}Pqdm戗to /]Iދ= <Λ9![en8 2o?`Y/ߺ+}>+ڑvcI4$#"G "M|PD䠀a,AL(pMhZ2@J1gl.% hDך2`}8~;~rиH ht$Q4^-e6D zdD lO h/z%\@E=WJT  D?2.e[e8-(K@KsOX0-3 }t)_>$Z97/ϋ2}p%;ts[ҿ$ +()=X](zF0Yuk E=Sg}F\Z@S3 h>zpg­,L@;elgΞg\=}F0FaQ@J@it}Y^޲_2Qe3zt>D`ɝM:3`tzgO,,Kgz6S-T T>;ß[3(YЪHgB|¼sa &=0ڙP&, e|r:˶A@ЩKИgN$ȺL@#:B53%z>M&r$>(x"yí3qzFYsDNɤll0|NE#pIo梯7s,φ>\z.H Y5l,6 q9%,s)m;ow [z6ow1%-|mY >F_Aeeezm߃ .BZwLDtU@޷l;P_뭙ٿ3w,EҌ h(K!M^#ÎU1:z::- .=2f7ñ.O@|2wҹ!MDAX7a\ h4ǔ~89P23+=&Z]ea 'YܐqV@-44Sag6Īe%ᦔ[B{UJT׼_vP[r)*%< ܲ(ĿK&^l…kОi h4tQH++}$yd9_eshX-ߴ`ˁ@ݡ0Ё h>N 窝&C1Ȩޓcyof/Tg yn8e6\ 64>ˁ$Uϸ |G~0_>O\$uzgr@ʅ:[=t&$l 踪I43R-H5-՜Ig%Ѐ`Pʭ!X3F@m\=-pTEEQ3gN 3;nFǠ;tyϥ1 34 gY.Hz>nOԉD.J&N'㧓1L*a Bws5gEg/1n>z\1W,WlGA`9h#t ]ˆn"7W>s,uYͷ #B"煌p&[;7XVxueFߓ7{P{QLTy׺:n|k9lE|6r"p,V{8T_϶L)<вw&pP1:>12Sq`)nG9+sܟaO !DQψޟCϳ0dxgB~rQ'$Ѐm6'aݔ41CS\YFH^xiA+KZ(F 㬰TS@CAPmJJY>t3 w/hrJ>-pp'S"ٲϘYϲF>}!nU⫆jHg5uZWikx ƣyg9/E[z?3d U;he` x΍\Z6/Iu.2zkhKhMBrY|Zޗ,T7简)Գ" hW3`; sCϩ1ϥ3`g[@\ϖ>H$z>4i;s=L=,gY@_6bgs3F;|5Cـƫz4Ч Pu |䝋ۅD&#FT+rf=^=o솵('0[KEWaӷ{z;^xq#~-zl7ӚO$kDr6z aٽ>y=n;8ՁQΘc㓼#S0yq= 4~ h-P:;bY ᑩIY@ L}+ǘMb|lN_Q/O.[ m |B@)u/e= EÄ (YS@͋=PQh|Y)R)_#8fyJI;ny,=!YW tX^ӄs 8K gVY t*ʊ_Vp T)ϖvg@M |Ig2[@_6Bh K F}Nu棭gֈY8xmmͼq;)5|+;#h&Q+7{y09 [" xtSP:LC{@βuAۮf[.MƓɺ#N!2Ж.K@ =Az#\²s\@/A[zXڍPG^#4s#bB!Ϣ424ڇ\@]&jYg;BgVf"8`~ֺrP0 qV  M^,6~"D"pJsb>{'O,\@?2)4 hڹ 2;3|GA*ΈF[2C^s9(~y^+W@z蕯8Uɪ̲YnSjΖYv7[S֮Nh޴k761$lgXߴ!7sMy |F,]ؾ9GwJ!ϲ}{Gxg yV>z2ʹtF\;_]鞹hc<f3B;TZk@[u֦!13ǎŸ-;kHS7yұ H"p!#Tj#dƛs|fv ! N܈7fti1SMzQ3&`7dKZ.26SZ,B6+T5nfvF=՞w?n29/Ow3f%;ϝ> 53jc0)AIp$u8G At&gxxD"e8#q*lLd:v:?bgy Ygi0~.;KF/k+Z KfDY>_3׍'| ˰q=K0`)>~[^`7;ܼ;0IXhJA;ZXtvokWonڮۮ͗ڡ3#}M>ob-7n[jLXHW ݷLENfVzl0ztf1$lgGFf}Vc)8΄S#SSbI##<LB#wb|fdxO}J@C=zGkTJ|_?pbbBϤ }/-`j!Yr--5<!QGEŴkfDqKi\F~< wh.կ%2XDp,RFP]rjhL(<"u{^B~W2G)t{j<8[2|~pnܸ{Ö5>X㯩jIY9yyZZJ ukM`,Ka=\RI@()\ϞZμ!gIJL@tϤ\L@() Pg̼Σ}v h[@s ^.C@3d3X4Dz#r( 4F#TϲBǛ<o6DA b:ݢ}fx >{ h]o0φ#ۆ3ىC@}2h1޹Ӻ;2\"YP@WСiwA\σ!h>.eO4i\=;dTLT`S@]y3fP;&N׌5]gE@gy<\@Ys^$w|5e;;3@4-vgK@;3RL{C p{ݍP.38l"(.ь=xpo:b@uou?jsЖnD}<^u$zp0xc_Nг,(xq f+&GUQ/%yrgY@e Г(LJl hjY}vhbzFnvL+&vЖٜ%jdԵ"G(s'.)[Ѐd٪b~dqB844­xF8HCWJTJPY-A k' h"ҲTn]]-g >%[VV,3d@nA@1m$">sQ8h zl(4غ!mc ̡I6aQ@#(UpgDxP纽B@n0 am)8h#YktTgNz]Ƭe y9u=’o,}N6j36 usا$e\>pD'mZ2]N݌rKOGB}F M͞!|$(p#u<.3'u2<#r)T>6,g3s,s&zKg&y ;ezfe[h3r>3lЍB=sZAw輕.trT,om,#m);ƖYZnZ>۽{S0vv_U]D@=apȷG]or }g>*ow㴿~E@ײ-Z[@oo)8M shG;*,]#Nsًy<ͯB#JV!LGRψ2\v͞ln HP5%jOe kvK굞wPĊhIpw#VpOAo 2DZF$rXCTJ,LfXrF5ЀsVP".3 g@側,[E@';\cd O$o:sO}-sr[֬Qb9B$Ed%- hw3w2.k=ez& IgBVϴ٠e]Y3 h(* \=wq *>3*%ճeqAzp,t{u&DZ3 Κd`}.|(5GX-%\T@dcMF%l%dЩ;9 Vpg@k`0Zuls=y6vy~Ppm*X9ޛ v[ hgz;Pa-Gg;ckA;|.iz&DG h$I$qgNX2!'z>%)Y38p:?œoXygK@i7.둫wti7t̲<[w.O=w*;3z!Ln?OYem`6;=̤S8Vx{ynDQ!ۮDk +|XNDu<t2rAKtׁvOk]r}-|h)8G uw?ݙݛ~lmSA3M=566̢,GgGFK ) p$, L,ZC+,5#zIXUψWϒπeYzF hrШn-TL_Zzɡ8;pXvиrs4-4O14TOi=bUfp$ rЕR)R)˶,p8_rcqؿk]THE@?/YAzOtgu])>^}L(8kVH@+6TidHd}k9l6(3-Ig6SpXY:o+gVn϶p.\~_bI@7(p!϶}; bL=}NΧU+Fg/!iA@:(t.zB#Rmz r^ }ݶb;3̳mtv+_4J!̲KFQyPlwn1 pUm8w$ޑNRΠ]6qZH[ݭuokj6]K֜LT?7عc_]7[*-1"4w h'xuz9hNGq #=<1v'^O쬴,8I4+6٥lcWXfړPFDZp`l-1jSm#! ܍k]V4TY@1av/=3(M[@eFWtTJTJIhviW@c5:XL(݈VP".93R7!v2p >F^ݍ6=~tc^mQPf(lty.j(暕SbÚqmشi]~S[6Z$yДs\n ҽks~%>ۖo/hFug{:Dvgەa:[Q7W7wh_`y4"r}&-g}Γ}p4 +3aILAc hFg8F5f-ުML6gMixZB@쳭Yt0lΔY͂I|VeD3- t,@ty*vkJ޶{[wAŋF˄;o[o* Q.ɼ{`'gmnkݭZodL@jO% ?wh?}<-|B+C6K4 $;:L΄#C/< F-竴`2,[rhw8+H}Ɯ!,CK@EYOBe8+w S@ʒ hY)=RЕR)R)˰բ1ͽsrE*E4E:s1# ",;nFV}B@[Ept sNв}.!YgBJay3^* ŠzIpCζz>fYg1TϜy-|A c3Zٛ ^5,\f:x{Ym(o2x5qf5,١:Q^w|] vf I6}V4@ݡY@S2NU (x^s=24;49+ 2J;@S:XfYts*]Pv VV3AWL h}qu^&vx"IKӳp y+zn_ON@+ux!])R)Rfyf)g'%3a'5e%%\BW7AE@+X]rg"+17 mUV3@ynE@,Q=+a ha3쨪g,q/%в}._@ꘀVŸ9p ?7XqnoRdk6ܘJ]Lh}L#٢ZϪjChq`}̀/;}fZ hi%9>aG#lȸdI@'NIgS񳤞%}>_2bf,5:t9 ]|f>t#zF~-zgfo3p-q g>wQJ /- ЊG&D`~8+,B@{&i3 4«o{No\@:Y} }nt4ϋA I/=3<6=#|7,'G@@'}K )e$X=FJNن5C.a h@J[(@}*?sj9Zr M<5=7-qIpj{a/ ;\` 'WtTJTJRТ^ 2puTle%}*B P@?{TB@`I7YѽJ,^(֬HJ{ALa "y6߿ 0~)BK(CKk#>*JOEvj|޻mwmcͯu57]ןKWI<ssw_53wY_ݟoB8eKwX%<} Gmc-W<}b4<r>KN0ihkh9, 5.rОΙ_MC(M`[ [C慆pe$^0GbGC6!f>, Mӎ L"HƹX]ƩQ>@إDP#V؋g`r ~gɧ }H˔~PLXر1~?u''Od+R*R*Dyzjbq؅`H˱ҪP)&(~?Ed'*ӓ3t:='Ia1Zn _TS,@iӳ}d䩠N]wadQzr>7=3k_>z02<ኀ; ]ٳB֮BTliG@}> trglϖ&\]tlQ@ ̒o:ڲL@Ug}j~ hρ:̹A>zs -q^Idts6hNL8hZa&3;\D@,ϖ},:)Ag:aNt'a6d;Ն>=l6h 聰PV >Z?vgl h>O'B=[3 h3OEϧ#>c-|_4dD7WE-|و"W5#|͌Wl f y\1 ̳<"owu2];7{Rs]7|!+3P"Aǣ}Y z޾oВ}FW@}˟^sMY tv{;Hvgᝅ}6 h %\%0fn%]\@t9:ֲ.DskR,IFY@;c>cGWu[w`M]kiuVִjڄqȮMn޹Z}f C mdzgeihd,}bgؠ,g4λͻͻgTh[_d[8t&P=ݾö.۾N6pt^ht˶FaύMw7L=3[{/3ho Al9W{]w-WpWtkU}է5 9S[C88\)+Em ܐ3GzJE3f9gY@[V@[ hz jԳ6}v}Зg=3-933.BZ>m|K}BI@Wo])MtAQWM4:6gbI@wYfKhA ܨTZ{vb Ε[уϭ=mzۻkڎU[iiovյj>E^Q46Jgt*hk(Y^lPxg>Է5eU01 9Tlew:x 4tv9Zv>9zֽ3rV ϯ^@jmmmvm?m?մ;7tRs!g#}g 񚮞S'㨛-|=&9WV_- NV\U5g=@uWZF6G8B6\\x"1W}@Uf(C#$(1zd[oKpStYpk ]-Fkl(YWΨ  p~qyWA3Ac( SY?e˼p gICL}em:h1ѐyY "p08eORq yWIJMet5 >C3}; k\+-Oor_!j2g6<9GڇU>..*od|'hog7O$fK&>tZk]@K Hr0iY@'#%|DQ!,#l&37PtE=pȲb:-ҧRQf2 Z8ZHde0e# P@΂E@Z,Emy[]g*v&,4gD aEF7ZɳNކ>ؠ"I: 7}.9f h2ΘSZg> ]_$"ڰRτ>B@K`>KYee`2h >[8VpHH5j` խ6\NFj: >ˈ u;׷ ԣkyme6цV>ll>3-3g#XgQ=;tRt6; tdj}7>nHP@|yyg37CYzֲy3ㄫM\oMW5S}uug<ع洧lYOYwOՙ~Y=WeqW4+(̃.)6}Pe `tƕJK.T-4R@Zd١S(=lB& wkr=Z„AI@OM3,7@rMZ@O%=Τ?9he˜/^?qM4kHX5:ǜf),IrI+7`; ! Y(g#3|Bq!1J#ᐢ !6 \݊j068v/HB4 ,=9!Oɶ+$#ŔqF.Wj9kkۓЄY( ; i ~]CGV@Ld 3D\tY+t" 1H233a` _PȀYAvWd<}7y1gKl r3@Zvͤ,֮pRPn.-вz޶Ƶ >4p878ͮM.>3g!>3z& 74M zn(m(m,}VώR h hѼ`tG+|YKېc7We'let`3P+9mZ{+[gāzET+>!C&-"i-c fΦl,ճ>[NjgpkSֳ}_'n sM2:w5j8xiu5]gá#ݍGz$SZOk}~깧B64]'lH ,$Z┧tO ;t⌧L,\@允 6̥ KCEfQ:]!.],`ȤˮHQ .Y3[QEp١rL`E'%ůsrݶcO cujח.;Ф;/ ( hV- Г</xPC˂7Mj+u3%-~} A ͞3Hhylei2LS6L].w 3^n9 hD3 49yfru9+@KG O{$Z<4=9's-r-מX{t9+p&gF@S"s!Odq:K# صddr:%nYxu[*6nݼ~GTf!3>K^z6+ }^{2+_pB@+X-̰gTLX'yg>oZٴON@+>clI@Ct .٤ hn77gК}v 7P=Uz֠:\`so& {!"Eֳ%&DQZZ掊LZHJ~4S[թ h>#wqWyh@gAޙs_='}3lZF]gNmP] @ m# FCP2Q@;LH4[f33΀Ky_6[uJJu`Xl bF] pA\i8ppԲpֽ3nt&}8ˠ}vռEά8aΌ3S`[H)g+rzΙ5Y,.4T* ̀R01x&YFU^4Oc G+.SzuW1gڶvlٸanpzJ sVUt49M嚄A) h 훜l*k$ hs _i1 [ @Pv8ЉXx˟@wӑnM=w׋gu'3 &^DhV_)OӘCY'=UH3|&}6 ha h8P3\`3AC2 bs.qep̕@)\.D΂GІ2Fм49賃eJ);{ zcΆcuk+gNZ h: wxpo)R:Ft-.]> h9hU@ q1SAL%,UqfM4g!Ÿ|W@3k@Q@6>F@sε\˵\{-'Ϗ*O@#OO@+WF49pH(lvB@Ler&LMG0kE6zMK*3 h%y~)x%aC=y м kˢ", L(Vx܀\L-ئ-3h%"8z#(` d6 0ѽd˶i Pʳb{ܗRCbAJ`  2VmQi.t-݂fƠe@K}FK:K;J]eNTG2g.g]mݕlA8;xֳHTg>kUWAk:Om:m}U>Щ9krك[t u lk[5imkgVL7q#M0F҂xS va4l[vZv[J8iu:p+J;;lvؾlolj3m{[^tf{;旙n{NPX}~vZo+lt6Uw@W!g]ƣΆcל 1sZoԾ[ΠRFm͌SHiwiO%8Xuf)f> |a"bB(*;=T ÕW*/D%|qPa#CcY^V2!9gK Vy?"[pyX+̡W<pᒳgJNpwޓ{ǁ/lcߴqXuss(!,P(34twT)jrӓ>de4A5FfI8Cj3 xѡ*ZKVTh1;--EHLNs$hݛ QFeqSv_1Qy$&D%A 0(|$ ˲XNvC`W6}y@$59h.&Q+ )Mu.rKlGG2O>*&+7^DgL. ?<. k R? d~8(6Ĉ|c棛Y@S/ \˵\˵ i hP2H Om:Jf>`x5@#N'.N A?Jf?Yh]J!:d4P&S ̅R|0G0_Є4 'uXeE+–4̷&@X.€BfugyaP1FoeZu/b,HDP@?TЛ*7lٴ~[T- 2GY#[fҮM꙰0T+y>X+ ճg% l!k܊sz .@T=m_iPqШ}ԳdK_tV;gZij U@ l@z&lЊ}vhͶMR ~VKm/_jbh }НM:8Zvw55t}g,Tl2A 䝹}>=P{v`ʳ8U:g.W_8T~SrSz 'X,'HXf73x"jH2KirYVeW\TI.uo'ױyOӆzʀL@RFxdEzg(tЀ1=2 h !A#\;9ha/=[P#8ZUτ)Pr(Y9)Kv8N@ }49tޖ,OO@姢ep ]Wǔ,3 he,#g.h>磀&L(ޙY>CS;E3a)n)7˺I@YrsgeWg% hS.Yв}V%Z$N'mrUsdk 0MogQ03Ϊznlivg`bgC3& [{l-u4u2yTK-,R˘h|jWWZw6phk7zg3fnt4l:ⴿ8m;YWl8܅ؾ8n[l>ל־[zf]ojV7tU”goa3t 㔻ι/ןCg)^DHpw$d"!I1I؁(KSt"ؙ&~'L`B0> wX2q*<=>^ p* r-׾ hB #O@xN@Ao'f< $}a 3(2ʮ@f%9{hy nk Ȫ0Yh> gE@ϧ U=׻ :Hhc(uGmkP@K=uy >csFygQ,;CFe%з@klu^(czf@WeSpVS3@AϬ hؠ,ep7t8*ힺ,vm0C>SP}`}\a\fPk`=>Jg!q[{P@7;vۛwnkkyh~xE}VDmziXLgrШOz)ٹn0\{ix3޹BE`g}ֽ@o{oKeWF. _,4R$,|qWFK.YpuŃ [LV΂ĵc+*+QviHEgOyN m[^n޲׶~WÚt:<:y_@N=`Y01Cq^tдf dփ8$mpЊwWQ>@6WG4(v3 ."P&0q&S,v4=Z # h/.X;hEFZa M*V%vq3b2 t09-O:; OEzrrϿ|ZWdHDʰE8M_ Pj [hb&=t9Gi2c.la¥SI$AX?Ǣ(C|T2%8" AT<̞##Il,'Ajjd8 R~T2%x,Jh(Ţ\?O"ţaR`2t41 |Z$\= ,~[$׭ZϏ&-Es:JfP`s]tXgB:Z1gY@^y 7Y@[g>h=bA`:L7 hz7 Fm}FYgfM=#}t}.6H0gR2}(Q=;5xFf]ѭ [=f> [΄-$hBgE@ CWuK?1P>\IYq̓@--8\f:M4ہC m;8M]M{}FY{XgNjz6 hqF0sWv榃-;_q4hm&( l0[ճ> , h;B=+6ߥ^ ]=C1v}(ʺz&:˺;;:]@,.cԆa5 hCsMGu;N+zfjۜ{lƐ!t}ia) c `Ͳz&va)ާg&)r68>_t$Ζg Ǿv+ڎvnnwj}q_ka;k8pp1gpwn,v>YwXn_c$k_s־\`3lPs5V_$V@ `z>.?.<`E\6&/Z3[? aQ8P1`NV+U:\p58EӲYLB\ϩ|Xt1mceJ58跇+ ^.>?TtnO rKz3^ЄA“ мT: =54gGhM[t]vfy0; 0? &c GqH(cqHD)Phf4}4`uY,dM&5rp$ ~yA̼u=U>QUɃ҉ YQNDg Iag@vae2\!їtMCHU[PSF`>]G gݔơa:`̤l8 ep s<8N\,FXc*b$p0H&BT((ɢ#ЗH JSx=A"5*IDAT^! &^T|#3X꜊d p2O%Yvka-:Qxp$J"sܟD9,iy‰L4'BCa>H qε\%ޠ`by 0^''٠aLZ1Os0A@/[[r}1 +ݬ0YfKtLciQВz&}fy?^`>Zga7q ,#3Ig ZE=E݅{XL n Y2B@>%Ba ZgM@sIgt:hA8+ rggYEޙ4gY@S3U]]U(Es̩PʟmvОZ 5m5{rU wdYԆnjh[L6ޙl465Y]]Mv`9ښ~n\lPfqϰmj@glw:5hb[ӑCL=öS,lY1ؾ~x^ 'z~Uf/@.H]s]sJ'bT|s6ΠF+bPs,`KCM:\, `́>˗K.],2\ruH(|GU>Zj2Mpc%\+fH}Q|)?zOn>*x+nmUk*3 hyx%8.Uih!I@5Ѐ}xZZ/ MXg2'0T,~T :D;hH8h1m9hEX%/'f'ZCq@4 _X/D,fƏ!tۓ<(O!caQ@ h5f|w RC,3 4BG)#';,C]zÖ.H#PghtYLMMݽ{=9ar"bxf#?Y^dwT<'(atP<K'Rd?}",1u:ǏO Op^|XS#SҘKE~c݆Y%$kMiψ &K+%:9 sdrkPv0^*ẹ30f3h~^y],{ 98MZu˟ZGЀ,׬t? -ʟg@Y3RMZ3yg b! ?s]jtCaC h{qgKq7Z"j-Lc 3+K gd.k:":[u ̒7OWʜ=_ySyE9U,?;PzvPlа-<\|}gW`%W8+YF24A t(!K) H+aRDf%}o,vx<]AFV@hCB G]t_lı PyCB:2`Tɋ/y4l h`^MÏ@'!k?4.n#Ay>lR0A t`C޴it`/_gWmmkˢ`N'[ީ;>/oۯ~@"P$cdF*KDY~,× bLQX!?;|saz:J$}P8I຃T߁0)H,SѹD EQct* w<2MFL%gw^{N?WkMhOQ@[AБ9,"'oO!a:AHA $^@ ^)p3D*^B/@rƚ%.ڥ}t,w t,=+L#}z g)vl9M"d<-}Z>@.e[͐}2Tja}]zFt6vbB F;8k$-eDK,h/j/:;g!lGp)՝ 4=CG_`P Bs}{]ۀ` ;2Rճ!jCH\HP_T6TyXCq2pAv 2/:{ h9M{58P=ۨsUͱվ 8f?m6P'GzOa!zƎV\w8҅mtcN ܨ{:}F\{ŀ~ ng^37N+)sQqSvƍcŁ B?bij bֳ{8Pzi32P\,FŌ0M.”atF(/F\+^7FoZqcPɭRp & !,ÿ8>J1ŗ / \(<_pSp/D7[tl:о /6Sz~]ʿy hN|0 /+/K4ML`$f1h3|> > f:O{g!X{tY@[gC+ڬ'&(WG&Uf3P ;&ҝ+v_+ [@PDFet1zm2w a%h9Mvѡw6ݔ4l$ y4jh|w>]y8+.|R1@ςNhqr~f͚^xo~󛲲2::===<<\RRR[[g`%c@'޺u+//ɓ0W~__UPPg)W\ip/8.>44TXXX__5550}o߾}p3g|mjjp^ذaիoܸp/?>z6nXD2BqyO7>岝]Nnf+_m{я??x}C?f*๽޺32OEx4 'eޮ[i?\$|a|z%k_꼰ʯR@2Ū}Yo/>?|C?C,ӢFkhϨ&tAi~*f9\Wv:B LՀSpA&!f~G h@}@ tڰ+.5&B25 #BӮ2#ܱ;8KEzY4Chow"#?2 eڢʪ0sh(F&}~}~5+וX~KMVπdB@/NϊI'W-u d,s-3-3yM?Ó>sbltFC hn yl3+y@ (9.n QZhhK leY(Ꙙ_@K!>u׵gI@6$iYXl!1jhbφ K :tKYϊꙗ<7^n3 ճ$ ַlo: 6pql5Y{%oP :a_wֱ $]fo5CJH#O%3 4;si=В}b+e]KUŋc%JL:ќ[c7G˄S5VF d?J;,'zpKCiW7~3 `:SҰlh[T"h$tmZТ:P6g"lC/@\D 0A h@]42>IGT2p((' %XihwO~---0:Hd޽6m>裎|: faccc۷o] /կ-[vY]{{{kk+ܵkז-[`ܑ.l͚5p/z:~vԩO>&{( ۿ_|A\=r-*J$S`ɑ]IcH$oC;_ݱ^ٽq^i-yw0/?[?zWxOxˮ[{o}|%~?w^[MyD8cH~ϞwloНO ޼Y,K dp}_$Sw>KwS?Og^?Əbz"LD>Z}ڷT@f׉Tlr_j4x?HN@D~e'7/[]bm 6WoZ5VTzYP΂9v7$,3EVz "7al\ѷi{kWlY Gk>o_lK/}.X Z(> 3 ! h>r1|a=>iAQzgAv haI@S' !\u>3B6e=}xqϣ -c_lPg F(v&v759-j,4=Y[uJ=4/&tV; uv6oo^g+-g*fsjy8b! . S}Uv??RL띘i۶mi.\ӧ߿_VVva0 \.Fs~n?3^/-?~mǎ g\*9JMLέnI"qn@(Ɍb/;v|/{~8 ~lj/U]h6|˘Rɱ+# |<['X|w47Ɍ7q8LLE vT*%GupTӪqD̔kh9-#~AZ lh#9-O%C o=y骢kW/_j-yMe^uy3T˟s Lh٭ae5mPϔl ]@s+M+ݛWyѫ[Wu,el#-$MYg}:}.&\u">k g!}h(t<񹰧 u;}vۍҙ.}g.EhЪq8<ٔ, h>Z1 B=v зVr1ۆ`HRֳw;]-F)-{l-ti# h>iAM=kW[6g&:[5h8^pGphgÑzFQZugkkH==5o¶Ep˟r4e\uT<|iA /??X~eX͹2_@=Prqs E3gAҹY8t6iS+sZ@|.g &`fW5b͍ѢkcE7Kcz܇"o}&AV'h̼2\ty"pzˑ΍L@o|i (~+0t6"x,z_/r?#f|"zvJќY Y W>:aЪ6}"9q)y@b>ȎXQ3aOVFhV5Y6 ı8Qx}z&s=.8=; @?qDǂ< h ç_@4vRcVAH89W4T44Q x_DbffbEp|'W޷oWW?Ϡ-hhh_nll??Ò%K8N'5k\d޽wԝ;wa~'; =u1rClh"17=9ws"d0ં{>| ) ={v/ʏ h"f4tWm~[=~ u㣙37Y*5LdK?ok>*>\D;#\ǩw@ nak?8/nh=_`gYpupߏ_1u?x:?d3Q¸a7=-O2g@L&lF0/;h 9M7's(>G!6-YU8Vr(ْ,44yR-6hޠuBWF hB@oZH@>`iw&}޾ֽ}]/cK3 h@&à>or V h,|fouWnE Tm@z@͎>A,/<(g=w0!:(w P*qW\}Գ*%4t΀ϊiwVY@S3 h>tih*Yv`gஙbtzVG J|AY=la:Tb{tV+mMښ^mo3!3>hk`p'c7shnvK_gA깖By0瓮j*L_ϸsn )| 򫚀0d%E@ՁeԳ8+p̜/ &GnYp+)K]wvQ=h@S\@3U t|(zPA{OwqgM7ҼŦU>xDbIgtZFdr LO=L@  hICjd#ٮ~ .]Тx{?0A[BZgU@3e+(3 lP@hl S}\w? '4(^Xȣ@W7@@CCh:_?MJKKa?߲eΝ;|O }ĉ^W_}'p8; ["8r??~ƍvk׮_ܴtdcccaa!yqK?|/雭:xwӞ|/41No|?w?^1z/*|t7}e*{0+9e/?L? &c_"ݷf2:bw:Ӕ? \9_ܸʍϚty~1g}bI@6_E=@&wѦ^=vJ@mq 3UV3!g$*& j;N)mfatlfe g+ 9vYtw hwV6jY:9ii#qfI=qrֳ(m&< Ft&zgϲVFvZw[Dֳ }6lTL463gЇ:8;m;S9x)]3@T:[r*=&=U zViw%Ό*M=#=eLyfВ+/U KK)jaWJ} }yXHfQ4y8 #D GJn+933b[V)5VrgwݽUf\2$wк&HC=RtuH$r+7kYbӪ v뫧O~=}?hhZqЬYa3MMt: xAgomyH_vT}tHKwp CY }i_Ό +k'T1/qSD+VM'OTt 6b޽O~=ϟmmm֭?O?G???P諯s֭[gX><ǖ-[`Y~}a n}??OH$^}sЃFGG?X"&p TWyw_ٴ3P{3G~䏥~lj:*ix"r/D#_ΗϦ~PD/'z/aݏ'wcx8}߹>D |r.?ñ_<](H&}[?%Sw~7ݾ>2Hzt6H&>/GN}rbbT"O`^;rҾz.('.󫱾 AvSD! h6#1Ȁ^fd5^bI4/yް+F@xX[jGVg$b}W4++nY;@nόk<>ДQ3PSв}>sMqNgkܵy}}4u= 3s/4g{GBΌbzXg,|.s2&LT4HP3~H-gyʳ$8 7tFAϙϼYws] }nvѺѲnD;cFgj}47q܌&;\@F>4&opl!z*y~Éi=oTw>SV/=s[EU'Ncl+>UsEwE`!/] #.xJ(bA h|TAfGlCypgD@' 5liwff_ˆ뭮_|EWW򗿄x<"6mɒ%YqUUʕ+׬Yr~?뭷VX|򂂂Wu>Ӷ H}}pݻw0t•y_+K??`0O-))~';vbyS|d</];|W_cT^?~ OJ|J \|?O?|+?z,<?k;'>Kz"~we2 'a棁h}h"/toT?R~wWٯ'@}7GS]yo'D? \˵oN6 h.(t#?}'*.2e`>29 Б0XtzʟEQKbY%ϻ-4 f/eLk떹{UnY@oZ4@g@Z4_@ɦLg]@3sgU@ΚBEΆb.B:.^s[V^^0YF@2F,t0k bA+zA;; %>nhTld' h{NG+^@؛g> M4p~`ah->:>qY@c`O[=U=U'{H@[`ܳ(d V狀⒧55.R0?@૯9333p?O_|>? TI  D&<.Se:y}~JDH Äw&?gR(|xlt:db<ޟFT<ӤwN"p*KFT2%'/ffg3ٔ3H(6dP̟J&#?󯾘21_4~;; ' G1z>UyZ}3ڷX@#M<0 h~YL{<^((M6 ygb %}jAτԳ#8}f~ X>qg)y6H7׸z֣,6%g[uХ/9Ʌ 7 %=[-}DV7P]ms +\ƒ<E3f+gЅ E.)vî(@݀aЎ.*:gsa n+(aH-: j%ym3hG[[ZŢ"j4z] 6v61l-;X,Q4)ό旚`aݾfۃж/mlǼ3A;h)5j+:m6\xv`@ՎM{`'B8Au5̒7j=5TwV WqW5f_͛Z^-y4U=rUrvssWq37*/z.z>yճ>\p\^/(A g 0nXP ?iװ !GJQ?8 }?RU5ʃ鐅rHF\P8b6LOzQM4+Byz O$Ŭ(M#s9x @642gf99T<^gh!LiQ~7 I Yi!O}[ S-~瘞S~Bv4Bϫ>8 4qA3t67773g?5  2C##, :hW8K+|˦tGkGRƳoʉx`*B9%cɈ7MBd,e p/%31D0%"0/pP"܅ۅ0 ÅH.'3,&5 &b$.Fxvyz,GQ<Sp9sT `:Oƃ)NY5F y\8+̱iB !'$ty\G4mrd64$Gia3 hUfH=3!ܱQBf Mޥ 7$#w5v=5ʴDG nӊE֖]_~cզ-J"-n6pZVτ7 hϲVX>+A˹Y zOFh(WUjtdZ@쳾 FmnF [-Ep}4wRY@w٬>>ѡxgU:Zgsc>gt 久4mlQ@3,`>s~ּ͎=L:u8^jiy% , h$-g;S~>zHaYc]u;}~É8Ep0}\'z4+y؍s}|3_zSzY>#%τ>"xF she Fx6R?'0ۛQ'eFFx/44G"`K:*oQA1(o}hJ.-LMXMt,ţ 撉T<ƣ1G< 6'T"b^.Oăh"1þT(MDgإ d v*e">an0ͤR.+p* 'h x7e;f ݀A|J).\˵o@Ob~Ś_K :Q|Li&!?"K < H4Y4ggS@xЏ>!FZg,dMZ ga^9hM=49hIgB}fZ\@+K缍n,>kpcΥ[ݲVʟ޹r;FmTmwY.M=kg -tcҐۦB\@ MR@8Gh*yn/#`!lg `X hM=(>ZڰОZ=ճ*:*mZM9qϻmY0X3s0h!,f{n[^m_[WZ^rpgE@K:&f;9:: fQ=}lq[ \oל7Uo8CqϬ> ϽUI@qW_u*NoK/^(]zePŒzCE(n6H/:&@8+]|cw!?ULxkc! Ӹ:7 u/V=#2ͣ*L ,ZM@c4д ,f&lA ׌{?<.,y==#W@˓e+]7@kaDtSL1oM@fHj| bdjA9 JZ y@)ʤ}bQ4@S̀ξ)O8/YN^DjY֧jaLֲcC8.ҡ8;=?Y.%4R4l8lI8^k͏a]6!rӦٽ3~\oLFU&'M3 1*I lJ@kf b2ˬxgBeD4yW또?3H/ YX\ hW% hRNUEs]S_F `sqAT# m AY<wZwvZx# :Yg;tnƞ&&>rkzg.6akozJkZkA M YW&|8[-ƣG:$̍3g3f=׽]FW\=KUo:Rϸ蝩]է`W9WY\~u.Gal8 E5zn)i bsi/nY;h}VsWO%SYhfu-gOm:9mԙA@SHC }ΆgэB`m-;m鬺F"d +M ^[#_`qEAzV>p<#Y@34(spZXW>;k9y q‰[zؙWϴY\rY3m%T|P=S󥁒+L:21vCtƼ3fg [<;f p>ztb{ wMO!XN@N; n,+6Vpu4pA&=OF#](WԸrWêU,ZP44,`{ga船FqUCwВ}Cg!:(Y>.ӣBb.g,Ņf}TdJ@3 b@d6}lE|3a]aax8uY@F'N@!J ?*}> 9kk,4g_|6"P EgY_ᜀ'jb~,T@'JXA>] 4gc0 ʤGJ,#!NTxHa|߽ @L8B+<^TWϼ̙g !u+:t33TlϼYf psFM@7 Wlnvl#Գϊϊzs }&(pC?ۊ^ZlP`+vb'ltQ,27 h栻g5yCA@TvVubGSU}U] *tV6H4+Mqu8CuCu{bg}QQsc3! h[;!tglؚ}֤6}~ٱρϔ }tQb`]&IgޙԼ3g}&^9S0]긳3b7Ngϧ{Vg*fqA@>+Wg0\QzR1O(e%J(,-JQ:B4k. 2,%V|g4ߒ eѡ˲+ObFϙt; V#4q{w]B@#$z+C.8ݷdf&7o]iŮU5+3OG@S2:0@3.bt^GVVLY endπR- tb|+Q= #>$\0gԳϴ ygdB=@\( h h0hteAg `Uu\#sg>Wz֩6T:[":]@SгF;εp]H](n[u:&-31fzs6鬬1( hL///3^_7boR3!,wv[mZmM#\7w4 LG;vǺY%kpyYsۢުO>qU> [Wh]\=_gmAw➹V|u3qcȀVRlZ,ʖAX,% &2g"KB" o*( nö./ 8zwG6o[Ͼf {{mr.2 i\ϼ3V@OQ:O[@b] (&) 2 XХA"P"ԙ8' MB3s_0:3#TT`bzn >ZC~i AgS@1b0\M@ ? lyʄLFN@ZZ-y?өI\wn. ˋ-`$o~Df}NN@fb#?2:Sn6 .%Nf h8yH#qf#t6Z2 ^ hҹꝹ96>bR@g;[{mʭHն>a>#Ƶ\ .%-e=4gehݮ.]ݍ۪.|h;3衺be.GꛩyB@ٚmz ̲b1XCwFhܲˁI=hoa4u>mGm [{)fB_FlLy&}n:n!> T&\' hQ, ׻y=5'Vʟ+OV9[s1x\oyW9t$k(}>oZl0}гbE}6hn:1R|kԳlq=iF2 hͼ;G( BgI%q3Xw hi ozXm- pAP0o ϳ4hU3!3&f@q͖4qAa}ܱ\;-(z643@xb&41Дf'10Z{bCh!m֭$ 8 fw,͇2'-]ε\˵\˾}_}Ĥ~BPp<Nx4DPl. j9mI- hN(<Y%q6f5gb[_X`btPAUkW+\Ar>#Ui w6gf\3n7J .dK\CF*qLj[/ 3@ҙ-6Sju}䠡q3Z3bEN{a7l[آ1# 跕69@sSNAϚt.*srʻ::rД.gy7%oުng%Z}Fakҙ;ն׵ԶEͽhCp#/|Fh@<5r3gzg{la{&68b#^iHysЍ[l t&޹3FmFw騣 9¼^Dui޹KU=3\zw'Uo(rV:SyLO)g+#So9+λ՜uUz+ι]<瑲 ezFLY]􍡒%5AlF4g@eeZ);̼7ww<сXĴ2ZΖUw5sX#;.m4sNytmzk΍[ ],BHP|4Jz&XN4ZZ2t33hr/v NDl20FFslYbC54orߒS~071!qy1}-F1蘅8h^,& A1gB( <Κtӄ Z|&&д723NEڊ &z&fnn6 aM&73 RӵhlշxZ>k9ܱ fš@+[,5y]N7LxHM@2s-r-o^99P4Ebh-Ca_~gsp z1Z JZy!|r+Ig]@ ō"'"udkF|P+Ņ!㉡pfqf5eW<#D|t e#\M:-e@RM'-Bnd rY^BG?3(j5c7dMB@qВ^,{мyi gY:ysf-6hR@R3.Bϼ޹ ;549ha fy&}d hsz]W$(mnVuд`Mъc}3t&>#L4knVZ[P@libg,uuճg,g U@ >SutOyжӮ(kbt幾J>g&ݔR@zfYR){$^*Jc)DгQ; P@+0y'E{&Lm\=os)z;zs -3o}vpX򆕀Yhot]:I>;+tt0ڐ9C v"FMyZ@׷4X h%YZMy!g>;YnXgY@3LUTύ4Rp{͍ԑgL|>Ҏ0c7׻_77uoty 3pYf7b'{*I@{κkןdKwל8Uj3bA Y@]U\iP˟_*~{ڰ䝹k}fUc1diޘ ;?4e$YKC/#Vlf: tp,WQ49hEB5I򗦌/.SxrBg(cf? / ޟSy&#ӓ!; f"0?0=WVe-%1!NV!mA(sd&#E͡i&G" \˵\˵Bt,ǓQ s~Βf.|XLBDgzN@t-\\H[_;~o nb@}Kr%VP2&zi˟,6g֢UMy^ma׻3 hBh` h\cҙ0g , hE=ϋ" B@S3 h~fϖ;{Qtv }I@ww3am+:dUѧDj:,j hޙgۆ[&euUŵOc-6 jgRϗI=S3GRT̋a`1mc6T2: ;h ^x^YwGYaRÄ|;;}]E; oc4rs,W]"s[ [WﳯXtHyQNB@˺6F&}Wк414 ͱI)%>/}X}|(g3sNBӜIBmLO>x>ޓ +,3`Ѕu(A9W3byx҃iqb L2.tqyс \˵\˵CX,ƁH4 'BX~:3ٙHX`$'N"m>=|A8 ʴy?7lȀ~xg eK݄0B.["!,49ha z6ްa My~ΛWÒSϒ}C}>o.܌d'3<ڒns]Gޕ+d}ź3 hL@w+P`3Y3a=U=eD3j+ϚV3h}P@}oճϚ֣62zscN,9> zVf;GZԳb6-3g>@dlЊ}swP Tϲ}>b#{V::W~Sul/z.}/_0lzPT,3"{g l".?P^(fx>E?1L(Y¢\2 k#;o"oq纣]azٳ)+ fWF SəIߌ& I.b4)himޔEGhe7 )ixwn6/#ٹ7k'g0UyAT5055711 Lç`yЀ(7gn-huU,Ā JZKd#1hvAAW?9kk, h,QбxFh|.e?L#su h haJg1- O0 w(Ӟ: ۊglBE@z]e\C tUhy^NgUl}r+;egvyچaeZL@c3.Y籦qV,̍ogI@40gM:ZԆwҹjs@C6íM:}ژaT|hW:4]ov{ gf%ܥS=էU2>3Vg*8؍ }eRKb27؍0 h>#|{Ф3Hz4fdŜRO]@ *ww.xwW]w1ctۯo<ֳM&|wÊUf_}X 8$kQ`~@WW+2w@*|o& }8X1#,@zxA/W. ļ z /؟9Rǂ LEEA"[-1]I 3]lx{?v2B:+,r _넎j;]'Z\lPR'U}gn{!Ϻ*UwWgkϲ}.-9h) ]Gl[%Jni ZFJgڰBrjal?Y>4S;Ү~h&P$HA MEЪ^"8 lqB!yu&efe u==YhB7FqG }4k8:Qth wP̆zF<5z#SSi nCA#U@ùis&UY)i5v X##HC hRY5's-r-ײo ЉX,eϱD4 -)Q/~YΒVfb#?s:=fg9I?G$6-]2iY@:Kg͊&miy>MYkMEz[{ &{V=f݊.[K]me$D`Ά@д$+;UNك6@ˆ>`mgfMY-B@Ke!X,w5zg9sCФ`Q@s, h>^mE@5d #Gul-;ꎡtd5'kTlO5pYgzU\Ъ+/zYg!yD8 큢 kCׇ (pz[bB@}.|w9w,htL(%?"e3#ʉ =Xvm8\L{WIb0GN ГhA?N=1[}\"M#cE)`[h6WX =c-}w.29YԔ*(N0zgI44z0 wg`ǒ FwFPn1Lz4G/yfϢS]Nv}&ܵ;zX`PQ1\iPw37< Ќ{wG V.xߊF>&yw3Vx;cwY 笀kZ02M8=b̻s Z夡hdͱcyom: [y6FuVw,g[qe꿼vU@U5WB Z-ynA ei'L+u h'$xiB#\=3y=<xP+ ڗx'& D#FcS>}Yhkef!pmH^@i?,OJ92 yŊiOIl7Ճthf& },e,!B wl!CJ$A1{>_4 ,t_i \˵\˵wzO|0fa#p#f-"8!t#X(υfs^oWt "AotafA7g9ː.",s:ݥCƟ]sB)]P|v;F(CAfWa7 ו\(g$fpĉhi?w,X@3 @jҾ@gQ, hwQ@#>?n*C$YgDf }V4B@wö*y`Yt/}~tM}27t-ʟGzB@sZ l?fp )Z@_t@gM@CQ@3`?)5Zp{T/y4tͻz]tz&`!|8H#y7C[G{vwl;;녠gZLN@o>I@+#\V~W34$405Zˇht3bY:K?QA&A5~_pˮ度?ހA:<6s2tAԜKY%XBVt5ȟoRYbx4%'y&Рb~3Z \˵\˵cq$ͅ`x6 Ͳ ^HޙLR@} YNrSGws*??PuN@8Ry5@Z}ЅF,g!ҟ-3s]\dI:+6_h}f3gЅ}&m+h7Ž6QڛN@:+7w.PճLOE=ZFf-?tk`x0alȐ}Uۇچzzs:=к>B=+hYBA-Գf[^5SΆb5[ hβ}U}A&> >S8thWƣ ;zn3!g};hS}Y}-3䠫򜋭:W>}.hbAn._$ h.nh Y@3\ 7FXp޻CyB:s=ZB@#i**ہwb#Y𻣍x-o|s; dG:8bZd#k\@_r޽ 6 hYfƺxHZUy\Z+=Y̖ h7x|~EY@+CB4BGeΚDd \av;x ,aC,S{_߇A+zg\s:HZ a<M,o*CO%2ie= &4JB59Ks:r-r-4h4a#`t6p-!;>~4p@B|~nN@Ng+5<9^8["f]ڷn[~ Y3F?rmf yL(d(&LgB=+z>Wow D3v]hޙ>z}`9wV m&;+ډ=ΞnNQ[S) j>R杵gI@3 쳆H=gb^O|qϨ5P1+H73 h\cA5u݌%;SֳFAˁ2}Fgz󡶆퍇7l@܉C3fn^o{haKz=Us>TѫI=kplϺWpm\@+!og op]|sPႛtCwI=bgL{w9hM= 1|t ?plwG~w|^,គǷ*at:;,QCoRfߕ' nl{d-7wo:ӷs9м|mɋV5e4`Xe47˒e]}*8f8V\%\1+יygjꟋi_t?emKP'&f^  f3]Pԑߤ21Y"d1례ςӲT4|ε\˵\˾-T@GQ'jx"O8Gυc`d&jPteFZul4n?%Klz%=?>P@Cgzt ˞sg@Q^Pt@LXԽn`} 2nߨ h>o^X h]=3h , h>l˟4\\Ebit>К}6h bRτ} mEXgY@HZ2 4Igмh{t%/v6 hW -gQ>׶y-6 h-y h>3g.li8+Y+yv7buA 5 3j3[lfemZl|A>ncP{aƑ|ڣ5;wtYěE賜6z+Oઃ737YWyWФYЗ0.)2P|y2PtZ?Qtm:+y&kؿ~`!^L3w P󝑂#}YX|O0YȂ-`t|8xln3wn]T<L-1b: {nn>V@xֵot?Ҿ`˲W%=|Hm+>jVٺ*(^upj8VDwJh%Ѐ7g"Ma xͅg1_ 65~0Lxw,'&ߟ&t狐m3A@w6"} 6yW,! [ z؆sv>c3gQA@["bж79h{&XIg0t,$:J=f˺n1p h-vk+0gtVuTwVw$xs: 3-6(硺arLYeNQτ$> ,fTF8 4gEJ=ybӃZ]lvikCP3zFs4 }8Vw hY=3LwI]ouUƪg}faYWUg]h)d%.K}.}\_ŪgЊ}3wQx3+}&?g{:z]"1Vݬ!-[;]0a+l'v/YNв}Fvb"A3֛(^z&.k^s}mK_l\޸ϯyK)=BV" ,myjB>EU2ʭz~E@{Nc'q h hk_dzV-9yn bAЀI=$Aɠ>Vh8!WkF^ҸoRA(3ǐ1L6=d#> ti s:מO%#kl'Xšsx"%X4pqꟙc?2T0>|&OzZY\r:;9 ^?wP+hm- Gjۄ}mπزU@+}>h䰽b찿(gg7 h5[j t>+Pk# G:>Vׁ6z6u  hM=gi}z #N $\eb5 #\@_v^qzfAϰ@ѵ[#7Jn[Czg)y Trc FV/^䍇FGfa@˨ M@_tѽk"%4vYz+MWȄ5k0M ,YafwH@{!_ y.1=at ob ixToH89ߌ/$S͖,#4.'_eibcD$i+ 8m Cygf34?vN@ڳd< kV{DűY8H}q<`4GptnUYQ gSfЌVug%kτV0 b"/6,w 6},fuU;V/T@wl6D9h!sV>gkMY8h!AWdj >dI@ۋ1C.v:g+Qb]e hgϊ}4t:Jϲ}0֑>Y<` ݍ̀,ie ҙ-'e; WeѬl(7мZ@hPC7mGFG oֿƳnSYh>>[>g+/+.3-ʟx7KnS qncij;Å ̿;`QxF|wR5t k8 X hȷS@ lr͖fT=ϳ/6 ?g3A319\,Oi}sVh@1 4GAh\_C*n2" lF} A-]z/C$|n#D$ h4G(8L OX&?>U Y h.twl:ZN"D& \<LcV.RtyR7rGfղ~bRKW.YY^^=i!6'}V*2lzg8wtn' M}@>/Etl#ga(Kyު^>绀=/r6MŽ/|.q9tn-m)i.tЁ]hh+qzfwJzJ\@Wts:+MC)YpiϞ.͖Դ3Ѭuuet}e>76 v6Zމ`yeͱ`ƙEm0ؑ"h,YeaWZl/sgzYM(p[#A ̼skm52wflA7g27N0ʟE1y<[ql]Y-9Hr_%,/9zzGJz1Tx}HwGKXsw.~wW俫<;wGrU:;)YI+ gNo|c~{dۭm^2O:׼ٽXۚÎm_[󿯝3ͼPeleH@Xi8QerǀaAwOHxnf=X+1KGpQ3'kvNKFɈA7+ҡSfsL&g7w r?#_8R;$˜.uЁ/ThfFS}2|BxaNo }&=PL){0)Z~/lxx>'jϱKCPXkЗl?9̬w{ﳯεg_Dc=c-&H:z#lUhg@M hn P=+Q}ZXg!aB@w m>SY@;+аWtk`e =:"{gBg;zM:l~v;?:jg\lPT@Kju,X[mF в}XlesFg З=W/u5}P C!\QnnJM;hfp,+*]:}f4+3 Mg֡zZ;9+;hk蜀Nw"1#hp"IFO7cϳo.6ݟLLME=FќU@OMayW_=} >x7Ix_Uqh1&&-K} hwמ]SKbU=g}=H_X<HK=Gmxqc4hszrJ0  ؚLP,'bdɵ\{SЬl:&Cl8l`+Yd39 dв΂G3e8's,.OY@/_>gЫWXgn h>9)!ОYh\<m}.݌K2TЪZ?u}5.6 X4w$ݬgY@Ͻm=;Z.. Jk[ShpVde,g&1|CgkJy ;Y̶]n[n{+C-^;tm,Fl%2\@ L $y#m>֒zf٘62?[gL8Ճϧ{*I=}6?c WمKR&Q=+2 }˟%>cFM`ƀgd0y3_uZ@s(A#88gRЊxA#H,VM@oxU@kmKM럠&4o:-B@YZ@|4vNg@(M`9E(/E=Fќ& ܟ|y7E ﺚngG/T@A]>6-\m!8KKqEA\_8^Q@O|=hG8%X2Vwd>4ӭ~~uݷ>3xD*50̊"tɐ7;дo;w?bWE|dU3Ԙ|f h 7bH4$(0$pX+t:0UÚıDI _fY( a!X KԳY:mK YSn3WZgB:pZaY@m7qF60L|R]Ur_ETm#.S>@T=Ƃ>eg]-E.zYf=pfa.^B@=]H Sa~f L|PֳS_v`sS΄1Y#B7+Yh]=c3w5 M77q`3f~xsPlAeG#m(ԳfI.|s1P[6>km8RXkkmu\lAm4u hTϚ}&\-g@>Wg>w_pU\gn/]tb†&.˞+. St }60Q7}.x`ӟ',ghk rXA@~YfaN@Њ{Evm{PapZPtg`{!_WG&I <5QCg@izCD< ޛܻzxC\ >X:l4 $o '+zIM:A, h@<f#MD\Pd÷* 'WH%`D(Fcp"%|s0<M<Qxx T El7cdP( Go"&# >y0Of{@hn R s70Sl:LŽ3ZGH{S~n{_gynoSd>AJT3]T2R_-n:KHg"RE=WMCL3dAi]@3[r)9jZ(zVgVR}Y>-ڐ4g}9ͅsi7x\J,;Kz}MzPtc-5<*o 識jCfw4&ogP0n0, 0hy'A]m {Q\^W ~XXtxCX-joD@of(?mEм}M-;^ RbŅ1{uT6҂L43.isX4G\!F=3L4[V-^G`p^!zg4ÀAwv{z,蠭^E,8h€DxM+I8tB78!7 w^!aph /|nonvA]Շ,Nu=u,9"_.fC5G=z8c:إwvlnމ{ڣ@y1GGb֜[~cp="Wh[O~[6LN/|z>oپwͧv}pnAf>aߎ~ug:a?h{!y9<{UN.gɞȕ"W|-~ů|gv<{١?^]wYw{_%o_.z鋟:ݏwno&Z=?Z0Imw?\釛ޙhhxLآg\f hA{qQÀp{}n8!|]B:pBY&A hIj1@x <B@Xꚅ51` L30ڨJhӛi7lHg> ZSk*i u\SV Ԧ1, hQ՘YY^^ ^>gWkcf;38g&eYayVΒ}yg g )}3"4k\u0RSmP X*;3X 8# }5Q@S,z~<*+`3`΂wU"jyV&ccmU,gmBڍD=ӌ}F-gL!MIͼ}sn ,|sA\WP<sG,<;c˅ hO5'V.:tq~î{w;sKũ':NtMGnW]Gg-G;vW{]sz^o l>`ɞhkqo줊ꄫy?tw3NsN[eox;Qw{W>v|rּhܺ?|nF/}g ~1Z##Fr),NϞMpݝftg뱣?8^_Ӷpស?ӝ{}|]+3YɆO0?Y*XEZ?SE[ż9Si?ٹ u6~Wݎu?l§VQŽﳮ~r9[?wM8 ';p-| 7\җ>ޘߟz0v;b^n*/wSa~z›\NEU@`/1Y#nƏA/v0%D=SNG4|cDœ\V hE1V_*zִf`ThIgh;E</e}xN@KyV }hz^<PxgJ܂pZtЂNȪM>7/c(soZL@$6H$'N/Jn@3Ќ:gKzZ­7(gyK8-g M@c h>TTIbJbsB y ht5T7)18Ot.,R)R._-Xg ^A3zF*_Rm(9z)?]N}P6c#.9Hr=c 8!}bzKҤϜ} Ƥ(ϸ |4o& |=@[ C4atee*O,;+4s} Or/"𲅇۩^%b{S/M{`iD@_\@T^hMnMق҃rhn$+}6c~MYܣ%uFtsX8O͠^^c va0 me9A@ZC?P%FsggwgEh]3< Mr}knOK'$@VW ..o'#5_=Co_ZOVm&=կ-t$ʋV'wv<'ܬb||HՎw]u[z>? $r1ۜ_tZ8Gua==O>z[n'~]u>\8>LRiC5G?d;v#B3><Ѿ/{s=Ushx}eGྯzڳ2OOn z }NDŽھ2> ~p/pGӌ+7}x=^1=49<&s]T8槶:)kitg?Κf+t~tvlύ2ԐR4*y hj)%)%}teZUKSkkL@Zf9]Y.+6gdV͙ eM!ҟV?{g/ JMu3/M.dzE+(O@tsŹ<pZȶQL^*SmP-М}4!k+^R h>gL@+o->ohqZм}N hV?4F@'oC|5˹At{!1! z>A2>+[M,JVHX)G">j(S*iRcr}=j_[ԮJrϹRU5Z K@MvkwbrXޣL@;A@kVB@C;:htg?3Vn1;a2lyQ4w 찹S@ccP.F$KaZa\O>Zq$Ѩ^gz}oֽ?3~ӥk}?Pz!c^|߆ A |-_G ?2~wۿck-۹7{^hr`y総ۋ|ceGm>ggw?8ms_`ڏQc'Ӷ_/ߟT|'" 0>o[ $~ukɡ pj]ډ?7ew}v۶C{1/|\s+h:K˿6v;-p۳%~e7u~]>~ N\f nh_"- x=.x{I9C4t67Wg)hf&`} ӯPxM u莩U0rdM@k0D9o)ӟlQf\o SgNFx AĴ6͛zfB֩z3>7Rì:Xl?,2o᪃ 棁& ._ؘ%)9)%g$BWcBɈkdS9 B  %4"I +D36^,@sF%A|n@ ݘQsKfE+A’9e>6%+Cs<0󆤞nyCE\| sE>WP\a>@3 .z&_({8x(Vb{ o𢙂%@+%\s61΂t&YH:1ΔתzrހJuFUՙՙoUeYV (j߮IީI__[N߫%IQ@cg@Т}&,\p!-9("܁ 7DZRv7'iJ6'mWt7%hOh ̼gGAr=SL2> k J zœ\CHgj-:leNkTX}\'W.:0X!~ŗ^Ca*y^ O<.V3RptD zOK䮦mNռ7g-r f߳wz=m ҢIbz k1,FIg1IF@㳳 ࢂV#wu]eH{ۥ&[]@zjGv":2C:;:+`*m272(vѽKgv֣3LVesx-v">E?HA%2E.,EZktc1p4Xz[n~J[jBeY &bTU9ԑοp "BqE[dea'ή\1*Q.Qp} 2k`0;uE\0y\u.n :NO[.wT69eՉ?85Uga꧶\K8ٔƩWNA@PÇ'8` {>kwꎿ{^3o'V}B ]@كߕՅ"?=gXyd']6wu1vt9=eÙ?v)%{O{۟`/@P_ßWwॏMa=?Xy؃Fo_‡囿w豣7Iϝ{ |Gݟ?' f׆}_[3fm__2ˏ=g;޲maU_¯k |.;9l&_LWCMCF8'J6;q%s"΋Ό͋K"WY@3"9T@P=oZм} @%c K !ϒw3>-SC3 ,:Q">+4ϪF>cs-[o(8ET=c%K=H]VŢi7Ѐ"4[xRڍ̲̲f򶬊֬ h9 Urͼ3|nՅ ,:h> ?)%4(h>5hfҙ#uqA&9Lt5 h}FVU:o83]]+:KAT n $$}K@oo^*dA>jNݜ)y`  } C`BŸ" hf:1GW Z>"&ZUE/ q h肃i|>_ `UDzd?^<l;ھx@?d?oyn_>IyәOq\pٞ9핇;mpn vYz}vo)ݸk ^;u{?|o~cvx>9vkr{k~19~c`-OYuBdE9N \_[M8|w+olPgs~H͟AwpWnrT->X{uYQ_g}}Gux3z3e9+O@9ﺻ/?NܧNδڑm>Ѵ3ӽO7gg㎯ݾg]OKX1.jO;fSޗ?iuyl>L|;CƌvwP z*]NPC@A3<@ p ~Z.0ya hk_MvъƕEx-E@ύL_@ϘJPgJ8X~fwf P@-p:fp h杁f}f h^=l!ޙ܇}V?sg0 ^Q=}ƵQ=&kT`B@48W PKճR@> h>'}ŸW24!P h!Y&1ϯHY$В}˳_e\[ZU&J3g*ɗgzgB=?bN~ßNєp 7w7'(Y5 }Zchc$ Cm1>D@+3.6H4]x❁M*,:OD+K88X#ǴEuzVh>lw-N٥3b yC_jX,Kbc(&/%pEH@C}~f=UWh=@ϞY;ㆇjGOydփ_NO֫'n+C0y]'0?gϼz sGRsg04-X?nW)}^n@6W^ =Xsq~Ʃا'>^~ssvo3+|sዟelcÁڐ~5'w$tZAtAzoҫ_Gͮ·?=pt?,kw?F#?aõ'"W&߿랔$ag|,}1gő7D>sOG_̻|ǣ26M=n_7Y8?|;07hr/WnkA*5h?4 2wIzbvQ.+>"Jdz%(Pϳ pꙢ5QP! R4shgfIōpٟc(49\3,}FυII$!4(IT@W T@?sTW /yY>S3:)Y(c;$}VJ,h/!r=3 /f 9EBg>ςf+傃flJ Y>dϒ}ʬ7Y)y}MknMϛIuKDҙyg}(d& M);>'1 ݜG|쳚NO[>cs{aЂztg\ Y͒:t/5RX ˣOUeFᎇfO J@O]?`ݗ\@[Vm2 <&L+5BfN@^ 8wS<Y>|(f2_g0dUo6n2;5ټzs~_q>E@F nsN^oYA2v1Sh7^joEK ]%ep}a-"%ĩ" gGcu _:^ @wlAt) &arY nb0=>h8A9A'aYkF:} &fy}cr}uz}Npy~00;mD°V{\Cg}~kpv[FuzeZV#s=|~L>(Fb/Ii =swI aVo69\fVT:FM.eW &0:}{-N}`6X>is҈e9cJ sPxx8N = v2F yl6.GSor8,h ՊVBtOW`f?AW\*pAqg@{~ӊ9,v٧kbDl_h.o )*' 97zPL4jU ϩUYXr0<}.oJ/#޹Jg!wٕ>eg hA>3tz3Ђ}fb;ͼk0FzT~<_'_e9kmy9k+D=xg Y%,6[5U߮B,fפ[-!g 5RMiT@RԳz&xd8ܑxdy)ǖ'H<Ԗ3T}>ҁF .=  BgAFƉsIjN/_tFr{w=`שřU1gD s7zz('ΟZ0: fɬ3ӺL,Ft?мT%\7^@M@ OXBAtn"8+3SŬNr ٢7X&4<dP,_oP&e(r(Wg)澡g&y&wv7Lj6I+3A+QtbN'Wj`v`.hg<ب:(2Po̭tm`> b'9?^4>7ɳ qV i%9qM>ƞ3뀚 {S0h^.KBkqŠlMCh}0Z2ңPoy_?z g8P|An?(xŻ?^?\^o  zpB]@E&Zұl zpl6)@OO  #wݣVr&z\Vn ,偠8\g x~cu,6Ϗ(Tcv hm J.{M I\2KbHצ1pA@Ϝ-hf̜0kJB+s4:S<@9"YD-gʠt}^P߷sJt㒅`8_bHz/)rܘj }Nl@L("Kh ,>+вF.F}F˛sZr0ؙ!g>c !s`يr^@-YS-^WBƹhe^BSan̼:(hqAŜT:?_Bi.R̶rnP,h 3 hzF*2z&dV%g>yVg緫g}IRm D:3x Lm;$}nL̒>MLj=~?͹AeIϢk=ܱ!E=/ Qϱ':*cN3p"Z SYVc؇U+єӫ18hACM54M EL5tX<(Bb¨RC+N@a>J7fpo;|=T@c d`J~_ (Ds8h:AMN 㠻z?vvZu:< M%$tL@C7f bN'Wj`k\DBe#p=vuM7CbC{^VP`- z /n_kz?>HŏY]ހ$m  10T{\~5v$ 0k~ 0-wo¦㥎/g'^ՅjV{~\}k}B0axB4p0 wN \òQyaSx\>(n"ӽp v"a|6k8v~quE;0-fdM@_0B.!]F(t?)83%;3iSZ9T7=U> htг,}fg&>sZϢ}4o3>-C3,9(E R1gBм}.KHN&Q@+3e@Zܗn*k.m=S}.m. %$9^[, h"%\XN@,%PbԳL@?_$z\ M3Bt3"P}^[KL@Z\׫2X `,y*wj*f,YT>ozl3С9Ϝs=M5 `>}ϭq #b,SW*yYeq'H"g`(Rt3U1g?AJ) -W! hR h@/f@gB@ Z h^UM4pR|# ӅŊ|^:i-Τ3_4$g\r5zr@jn0Fo+ Z/T0;wnFF;Gk v\ 60!bHcbf^/:\ \JGv|҃F g %Ćpbr::{u;EmM&p . 6aěwXP<} t@Ѝكq.sㆧ^$ģ]>x֠ۅa~8.Fs B\-> <*!pAo<^$k9 6lAxbxEnh *WOG ><+ ht47tԗ>_2j(/\0:bm36) <@ME3I[_@S@U@/ܷM<͔:}g^@8hUݐ[Gɉ#Т}4\ A@"Rꊗ ]T,tujmM?/4g^@)Yٟ43ЫB4gN@s h)9|3P.҂KUe$' X$ WQ:SТ} h !М},F}46uL@+tҮ&63F@'oF>ؑp?cGB3!qGW qA}&Ny٢S$VAXg?~.SqIgBO@t,Ÿ5M2O= - hCe> -uA@@&yD SuPX;|]nhN~ͧ3;tV58h kT8\|GoM[g]=s]x6 *Y6,;d+p9^.Z+%Bj%_m X>fct ؼh>1ng0@? +:^ġQ/ <4^Фx$>VzI( 0 wyNhHQxr8=n8z`֊V*2x PQ᰸\fMM@so,V*8:qP\>"J6;q%s"+gOP?L4 K />ϟV4Gh≜LaK"t/7-=pV==aќF ԁs(1dAFܼz>csEdЍ@r,GJdacZTcºԨZx,I>Z!c(qB3AWrqҹ0Zj  @sqR->#eK0 Z F%r@ה/!\RSZ zgßqA1yiUm;/`~ieCz5MD=gV23*[2Z2+y Ќ-h!xg΢z b  [LJ?]PLA%$̙!g k `hh󚒼եyϕK乞sz˿Jy|g\l\ڲ֖RIίUeS^dQISm`g緪P:T43˼NMwדy3ldb,.4]cԧmO6R P3]f0iGc66&lJՔLHb7B ߒH9 x`[- %XvlymCmvR<#D^&?3}|y܉q>ӜOtĊ㨉c->L%V,T*Ke(}.CLm1@xsfUYX3!WHQ^nPhhbeǥC^ 9T왧czfdXxc=-"v4X=,B8}m<&oj! ;+=5v6:>T:~ hN74i4>uVx5f: EY?((zx,=AsO0HGA' + =LnE]Tɡ(<2 zK*F^{156/z`7FZ^ݣw:gP~_7ᚩYv(g'@BNc6=gu`:n yl6bA=M\aٲ*Dbm 8Qᦁ|CY-%-(xhf(),rgc sBPq{\뇃P,C FA`GKkDBCI`3 {`⎺燃a4?4F '#[PHԼ6Q0O8pǸ\.HmT`fN2Z]h@;$pXerЀچRQq 4:^xEpSnqpIp.B/Wg utL2~$Vr?lsP⧫-@4Ա&1}QAXr?ՊY8P@[v-K btX]@aLG,wt!CaX"T:S(./xg@ ϡHG~"yxw- _3pT@AǠ<>yΟ1:q R.̠)8▔G.}h3wg1ޙgff409Fj_@K9CH4K|w ,:hu]Bs\VY5KkjV! ݐ^C^tsLj\hN@/]%Mǁy} 袕b3;cgt~H>( Ĥ45%ykJ5tѐ1 Т͉[>k89PkeKv$E.o*ǖEc;O,[tze̩eOvg‰e |ObWDQ%d9AJ{aXUE#P*S$C .>ܱ`{H"쨟+kx9K(y Ɂ"eA2(L+ z h+u:MzE6h7[]f0Z: Üu.BEqE&nHOg;:lBta"o9ш`I: V@vxҁ'v8v9/$T/Ń(AR}ΠC}QQXdVLW3>U+5@Sp0Su7EbB*q x(mauGОym b4=E"IX1K. B;*w :fcrR^?_rݘ9+2C$~Oy|>&XS9ϼ3A}4Ϊ(Hl.IL&Ֆ$U3jQ@WSzZ)(>t}F @t=U@IAu3,s)o, ЭPtN9 :rD ,#F:3¨gYgt$F~_g})kJ ֔}~4@ M|C>3^*},e+9HYBgA@ PJyU3zd^fyT=3ުDҷW-%@%A{jE V:mCM*uK6 lMZ4E7&lH$Zfw7&PX.!#'az8ʁ%P`[C ]{9b9ǖ!,>ֱ8D_.4xbQwDS=p޶BbƩ O,Z( LFZٗCWgF>*&>_Yuc"Fn^q+_@Cg dCTtO&"_ĸaIq(R8XM+&}69,V5pi^:/G/p -&:hJWl9SOl"Y)B VYg C>X3A]p h2Ь(XRL JwSt((b!݈[&$ؤHBoqCюmGhEBvcQ _PHXVrŕp8]ҿxLJ_v+QfCa4o[6$4@?KR@{ hU9A3 9 hUg(g j L@'-lHO"HВfغغz S L>gCcd19.L84$4ƙ8Kٟ zޙR\RSVE\*Q=StϵB&Ќ25- h\g!#hhWrY!g" /PυySV\X]Ђ3󦺥ڔMɛ2Nѐ`s$Ew7ƅВ}RtP!`Z.Y)Oh#m uDZsbYHx=J s c?!*yhaHgwV9h!s8,PG v78o[ݜ3ߩzW/"-zh1b֙DL!A0r%A+T2eTt8͠O*YV@zD@ (RcF>Xm68;Ha2V3Y=zGo֡W-P~Q.r4jh@gttΝ;kq(ad;V;j1'30d}PZ?? ]@JYAӣ.hE+U }& v~4AEqx?`c>h+ɿ.2;&We1š4T>t4֟-?K,441(yY=:h |3/B3 PG,zgVҁ h>#1@yL44uyu܄ZpCz&T,FiR}VhB@+sEji*SV( . >C%Q@JA謲lda4gйEB3.6bE=l~gI0@tI>M!8<5}hƒ噯WdQNԳVE:LM>Svw*uP&gA=[:x&l@P@g}\d`%Qns$AϜzNE MhA̐t{i#1G3D̃x"LlюccN.E+ _>D3eOXP!2W@MdByPinA2Ȋ]-+ zzoW~lڕ+Y(4kFMkhGS@+t* YV@zVT sǪ">8iv[>kytFGAZ`P9U1\z{wjn3p:d@ h ΌhrÈ"&2M 'E5hE+}umwڃX?~܂t\vɁ_3 B:hZ)yh?Z4#G&EgOo9IAwf 7!n`DldD̪P5 Y>Z/%׫ h&&ҙ>K9'I9 h&b:*} H@S^@s(rnTHJ*s*RJziUMz=HK͊ڥ’X/PݐQ֘Q֔^ "D@8hx-mB:&}.i.sT=/)S[2UQ@=UPt3 }HE,j!9ouIsŹksJr^@, ht &_*Ÿ1$_E-B2ttҩtcUf:>Lt>xg9gU6֤6զ 60!y{} $@ᝁ %%>mER Mc-fla ^@n[|mC44'Q:/_<*H“+bN=}c(Hh,|Q*p9e(\uJ /vxtjHYK-l.Kg hj !l624ͬ"=6CZъV2^oq9 hV:hA@{\%>@as:: hzPM,ͩdM@k ܛ5 .9r"%=L@SM44f54쳪yPD]' hΊQ'D_WKs~| з.J)N(Ij$F 0grI%>Kt%5K+פS /E 0]^V^Jtczi}zICl 4e2*[Z3KYeY%⎬"`Yv1cyN˳9E+s n^[2`enʜ|`UnS> | ,@DqJr}F]|q E/yz~:`(H/d\x$Ҍ)L@Szf"t"oPYWvE*@4"dB*S}NPB4p,T6yL@5tҶ@!qGCŽx`gC.ϻcwVhMqb4i |9(fPhU ->Ҷ&:5韽}rU+b/_t#4QEPQt '/4'U144#g]U@ O"B3:y}-qg]4Q@blV%\O}9h瞏DAb\@G1*C]:) zg5;|l¨g 7,zp(r($Ѐћ@ޭvXv6s`jv hj FUl4d0[AiZ+ZъV^:_ P %#@`?x=d gv܂6 )8B\& y4qs h h"X0CEE/BHs:watB@3, :N +Sj)5@flmVD6sHn$ E5 ] a4D]/*T.T@t&*Z*"5iH &Ke@):F%F")Й}h⠋]2[)W} h&%p¼PV>[y0j hbI&IIK2_.@`SЂ.E^-Mt)ҥ}>< h:΂F].hT.WDK}Y^U sL3T`scM򦚤- hxMdMtⶺx8Є8S$iŻby#v_s|7`֘ @"4Ϥ6=X{4 #ñ:/8'q!2|:Բ5],3b(:0B4<"HTĔ#02:ٌ>,XGᎈ -2W / :0hѢgТ*% h,+m`s* ;e{dB(RcK'2apd[,Nc{Vwɼ>ջ{t.*A8\"/B(a%qvv;~:24Vπd hfi&(!h "&xP֊V hˍ7.CyAhp=.˦&*qSЃD<nD@sЈz^%f~}ܼzZg>G%DT@'G ,F360ͤ3%mq #}qQsPrkyp|„j* U<;U"%)B3PX)4GuiJyْJ>ޙdQ&QP M|4'5ƥ KsqP˘n(m(Z3K2J223)YEYEYmYDCvd,* *ʳ"XA &:`UnUR}.|6?gsgs.}0LQ6٢f ҹ8B>WzMQ.sY^(ZS|1dX,j̗J^*Wbw.x8㵒Wt˥K\zI4˗xle5Sו/a0鼮"uB\Nzg"S^w+߫Jy ^(8# &8hЛk6&lc:gQC'l'Иh;*gB,1~Os>3Zbi`.5G8h_K4Ɓo>Іl>}}m@h a(<uc-pMVhYtrE ȁs#8yrXhRD[$XĴ׃@D2́n]JlBee 耈2en綈福nYoWzdګOsSP@oxn9!Th*]deC)9baY>4/b-*aUhpL@%Y8 b>hf~y.x4hŇ . x"pl(hLX>o0tF4b3.<" h^jPMusX W*Z-?Oe,d&&GatSP^48Ir(z8wF" hT(e-Sj7͝uiZ+ZъV(zoMfs;}p󖦄f8}^\ <~mHih\:pL%mr]#pҙ'qo7A͡(4`;Å?K.8#Nű3?H>nBej\=ǖAh4=>y:;qYs/ZZМ}>!B4@33lNcZ hꠙ}B'1?KAr4P,As:AפFUPY]KE*)L@9h>c@4!Z&&9- ^@&Ph**s "gU-RP]VVVJ4'/-W1ZN/^Ҝ^Z" ,LH>E114 t.&X"7we*7ܼg Pɡ h g -@VH5t sRMt" -# * /-}8"D!A,}4}mIkJ_[ 8h~,%AH}"孊A@W%oWSH4yތ$nA6aKM6.qkm!~km@tJc44Mʁ;%Mqig!  zoSަń-ih/h]xeᖅhE3*[N!0 钌 0>:$L3N 5߭bkS_WLΟyǞ ^B@s&8(6 h:Z6麇_CӻcA#ܰ2>S@C7WL.od5 M4<:x֟:M=VUVha{ h1!p֊VKV]@+` hE.+hoZN*VM@&5}A`!DqPf-y6ҙ 9S$=r/OX"A31.rV]z`,L@S$ =:vnuЌu jji%1礈ZA^>^y 9E@![MaZ4չq ^@$Uq'2ʁ 4R"9h"E,P=W-)L:ga:hЩ%@mZ& MK5N3-BMt{fA{V~g}f0,'YNrqyssWy*/\F6uм~*?LL* /UVd.z0sM蠡I3։}F_(Z|a:¥䕒/][tR*z  ԷʖU`%oV,yZ);$ $H4T^Cs$oNP:qs5j7&lc4ǖA@oEMح1bQC7mk^C4⠕)8PCtnX!Ӹx_}- r Q-QZ6#ZPK$:p[$(#/<yi<Ҷh5 ^4<+n5H/ ݴ< 7uA3}: 4f#Gh׺`o=M v4V7gsw+fU>)/?B_.40ߴJP-9h å& 8.ݱ  /aep}3˅j{8h7&L.pf%64 δb6ڢ3::{?5;g٬am6Y6En`(B B y]ZъV2BtWW^o4 M:hf h/ h>\E@+4mGŸ2(nczqĊ)3͞\7g htГyxlDOkX0aZ꠩fu*!9K jk)JM4%v.:hcͫePLf$D$ERR8zId4ghFfиSE!PWEA_iB|&O((J`Z" (O.*e>N)T,)L-Z"QMjTC+'M4璦E(}nMg̣gg|e.r9 *7idQt^Sx:/|A@z|[~ 2Vdx 3~0tB䅢Ѕi/(բW_*N^.N{HhWK&*(Atɛ)o&3~,7ˡP"rUw*֋P q𚰡*aSUꄍ(7oġ& Aq[kc,l^P.fG w6,v5FݸxOc a] 6- iZȠ-" Z"&z+&| kꢀFvŌ߰oy)вvM@c&1Ptϝ<@gA.+=1gr)u"h̛Z ̟VD蠧#YKQ4`Z2sj(AD ]#1*n~5%~fЉ TQR"y}NdZ`a%Ep ңzŕ̘ @αq2?9hx28h* \F3ɥʔd %UuKTi"2ݘ&gt!GS-Ks[sZ3rACi!&*9T@/YMeٙ+r(˳2Wdf\27@㜗SO t!7x4g*X.n?)H_StMR| ^(L}h BRR_.L}lB4t+) DC=8KR(I~$›7J_/K~ ʓ*OZW vy;"+A44ƿW*acU6TmĢ:RGV^`kb\!Vh{}5;0YE@nR (T#4Eo5rDk^@8ЂV:#owMy[owM4PIp G_(y2}iG<)"s9,CH{m,bҋa9G;:EluokNCW PM1XlF 4z{{\Z;;6L6u0eL}+ 'jZ+ZъV.`"v|1vSRڍY>x}oX7*gH@+T4 !+-aΓuz2h ՔSjM?2wJuJK̟^`F 3Y;*MFM5)U };j>̨DLG"gT ̬x -hA/tЋTFW AH_I542 h FS-hrJ l3}QihDeK,7`ih&UMh T= ĒD栉}N4:D$U)E"5)^@sTզץ"KS .hN}nN˥RB dd7gff &-3=+ ht>X*/^Wdgx*'\Dd"0Tn:t39fRgO=Fty; X%k Z^(Hy1QgFa3ђF]$@kE D^$񵒄7~4᭒ʘ֕ @%NDC%݊Ĭy2fCE q@t 1kqDoTpK"ϰ6 hACtA `tCԮu nӸ@8+:8"3M7`z_m hCnKo`xCW@ " D@mТ6Z u"%J@/o,@Tg{\`F)w,3;LZh48&=`vw,GuP/rSp -Pzx==Nxs̽IDATf SB۽Gj hhE+Z h &E!)"S@H(>_G THmA;`TWkVeZXrRg@ᑇ&)L.@M@_q\(g&E\G(L7g=Y 3nQ5s '#̟R7J52Ftd43rLY0QMN 9jFMjdVY5JUՋ 1kb̅W!Y JFDUI"T7S}\"AJcI4 Y|C,1Y!\I3Oh 1t83\,Arbh쳘|N.(S}4е4:iXO3&B.-@DSגGnP)9m9$5+-+=S#+GNvG6˳>@<;}eN,x]*+i)|cUn檜Of=ι9'}un2g}K[,0mg<_B>/D;"/R” Jī)%ɔH3o'QHy$4RhD*C֕&ķ%חDž!݊w+q*IsUJJ̦*fS51[jcnŐgꝁ!i x%l&;룁]ј+Q# Q2/Q7gݍ",<"m}yhFz=PKāy>qqaAJXh3aH|u`G "Bd3CAƶTT86`ۼCw,8³,PǂCMyhZme9;lfƆJ^:'^9y&MhUm%YU@S- hYgh~ 7N@8hYlL L4ӽ@@}68lv7` &:#.9cp}fZo^ /Çf &COI+`dUW`P0/|(.&R@^ hhE+Zx_@Ǹݣ*I@N\yD@{p^ xa5;4=@4 h_q\Mܩͼ1{r)-ox'+ODm;qΓu3xɌNjg<^4ʟuf<^H( +w|"b`5 LQg5 O/?=Q3e,dʣDY4'/s(G09g +)"'% 3ԅ"mQ*Ke8K1ٙHNfLVY1yǦdR4⸥eeq2+*Biie KReT$V'RZDUꓓUiHI qIRBXXے#/cw51v8!k<(b $(s=ln2z"b&+bMc7\JG,K!2rmWx,k,=@9VȀ3O>>E ZT:03TB@.`#EJF84Ъ]aznO}w:6 om^:ȌPrK P)h8PŌ.NIfv= kQEN4 .Xt\׹s֊V>^g:{ffH9쀨:=B0Q|n40"X].i:i>(LW>x`?d¤I{5I= <, Iķww~K}^a>{t]o~[{oˋ/ u*YQV&#[Q@DC3M(sF$L aûfAa4;67`x&w8 hZfA4a.~c1`O'\OM hv;Sp+NRP4^}V\)%T@ |q8?O]uU4[@i0ZmvMn\4Ma#\s߰}*i4 _q yD: gMD)u~e_j9/xҤn|˄ A3zQƎpA7Fc*=Q cnjV0n`̘Q12v,2f0.UDaг0fb ;VƆ-K3vܨqU=n*Pƍ1aF؛Ə7rܘPȱTcǩ|(p_17s[(c:zD5n=U5fF=@ѣƪ1f4W؀]*!0 FFMT% 3a0cn a cǏ;.ƌUcH|_n5ѣo@9rȑxF{McG8#o~t7pè{%М6J8,vr:9hI@Axx7H/{9}X]̳W񭳙noyv3}&n@ 6jZDorCvuYvm>+%2̧`ZgY7"]-@B3\K&֢?J!hZ+ZъV[La8s[JNDТzfPu{}WBtx;M. KV" h h.F `4}ÿ_} SfE]"#͟:oZ&L4>39Sg=^3~{(Ǐwܸ1DY;f1@@qc&2fUƎs Tu1v-Aʭx*LPc *cGScQT=f\(ƏR~>hU?~0LTe¨pLPc<1gܨ!O A:fDF2v,5 t;~tEDƍTwsGȫ1s zQŸƩw<dBܳ #ƌ™0aā3n|i1ƌ5jHQ#Fi174fĈ70{pu#~<@4vsU}V hВE&)Ck)6r Nl|A д[u:A@l[>=U\\ 6O[oBm4L@Iq")NLC"qpXZъVrN@MB̩t6ÆU>SWtЈv{|^$Hn;4:/f}xw'6^ڨ3ՙ }fh\;ShFiDvM@+-3OX<4Zp\[O\~a&EbT^)ne cM@kE+Ze\P@c^Q@;6`~/ C^pf9\ s~/rp@ibJe::eZ)6`ݰ) h ~ ]@/ h꠩z4 YOΛ2USq=[aV>~8;hb!L=z⨑ɿWaa[T7Vy6c<X!+4)9jGmxe&+Rƀ=P42 Ę oQtCFR2 qO a[yom2'C"!AoVg cNdޯ ̓bw ъ|xLoh{%b0f͘dy|f$FAM3^ L _ cwEg^# & c ?J?/gfbcGyyu~uW=A 谠=, h̙rz ?f9̐4s:fj鵘{p.N8:hƋ-_f}v*vAFlgKoꌘ’Akzmr-N&ev } d)f"AmA3Ch4%#XV'%/3AqQtq&'db~GLs"?O2vԭj3z#coB2R`>D`j }rs(#NTeLoMDcFM=j⨑xF=nĈ7Qz7xnu?)8! h꠩Kqh+z*sВ:"4"*ߝx43 f48LF'`MV\&6YgP PL-|&G!i 6Q@4 FH:^\6 ?L`>E./ejczm<.M@kE+ZʕP$m2l4&@'>`xxAqz|(uYN㿚vɍbo) M@k\ft\P H7$\7sr'&?;Ǝ;~-cތU;`]Tyx_yQQ*`p9%B @8+F<+5 a1՘ rOjQfJN=$ W@yEx)4YY5U?_H@T{ (<y[ G~W"!w:Tdqn¿ KĀv>'oO2A3^BqCA@8 1A gC+?r~$1L&32rF5nyțny#R#~OW3/ Rht=f*Y4̓o;h摇 wb+1YgP1f˂y&KgmaM>!.|HZU; *3ut֊V.hLwA/T@.Qs^`c¯ nmo8TqdN=-R(<|˶YvL"oUQN8ͷK(:R^:afĢ踢 Hi(u~z_}p5a&'ҟ0p7nȑ0F nqNx7 ni$40~ĈQ_#4Bu5RLSʽ3M#E-<@m7)i|!m48^g1nl>IЬ2EKL@v]CForS$8;d/856^*m0Í;{dYBX9?3U7g }!;:hZ+O+C-^r4Ag{LAbwN͡:l.{焇 }^.mY]#q EP!g( .Zᑇ M3=> h.͡ Y@f +3CB_W87 4K-u,z㥿{xm<@h?U2203'44|=_k z z 77A lB7?')Z)~_*,hM hd1ј>3H;,kz 5( l(*z{ޢ7-v7ۼztPAHjC]jf^uv.bDT= Љ++Ԡ}!;;w)% QZr1G='O#Gigs1[4h\.}RaЀU4*E(>yHt mǯN&/cv f#&VHg:ϐ}s~ ArG_CQl37MhTς}\5krԿ|22+l„2q-wq׭>~Q\O<19;;'xj3Mq 7A ®k/yGI!)XpE1*0 HZPA[*KpШa=T@ V8ZФ08vmv,N?MbeYeTн~j uͪV@[-g6uOwޫ3]08SV"vbdvpnܐ >ʐM$5a(fرc'2B4Cf0654A{JWlYΚ _n0!yN'{q dY-⚷ae!!iij\M2Ac4 h P`8.>#e:ϐ}s~@t ? :/ͫg`>F@KϳTϚ\5ɪ))'Ne4cǎe[F|~s/))o{G窪zE?䌌ԥO>9pMP6lr^r (#ZFgZpF-9hz +`ԑ z.}]zm#;k@iu,N:gW- @VT#\xYR hŅ`/\L~k0Y\0۝4,e<2ڍcځ]d_)N&2 衕SN>}^=“?:~ H|u{W-^ ?OAﻄS(S7 QCiۃ^:}dzd.ټG ' 8;3_)5{(c._0C&O4gN@OK=;a„c&wرcVy`nOus@10ACCCCCcЯ "ۗUTTXjѢb_oͿ{nٳVW-Yifx{ӦM;ܮK!i#B@栍,8hK/-C8fn&ZЂ$ufA|n"40b>գ3:z F)f)Zuv28pmEfK%-lb7R0~W v{qe\LM}C{sCB1u撚0M@Ǐ9rf06_Ѓe5ۮI}u¶Xkx?^ h]Jh77иO}I efy\@.7D72XR[xPB ' hTJ RȁΚǀ_C3Y&TK߸qcF;~-$K1c@3`n?aͷrۭ~mwPQF CŤzz3f=oǍ0~Dkk{aa=?!?&=[SSc;?.ʹ{_-ܺqö+E@Z0r4M$L^3 n4?6&f]kMl 0z#AX h'^ 056^* uX] 40ǹ.KWdtl^k`!C((~nH[WZEC.N:qѣGy߾:~Ea B+Hbu68k~xU¶_oٜ7wV B]z&I4>/]w:=xCtWv쀢1#  AǿYHN=kN\9m&ySM3vSjf?Ys'N}{$18ihLP$wۗAAeee0;pp!3 {>}fll|zz&|a-['+{JKkj s32rrr&Mz7^/6 2 NS|7&(YY#'[2At&hLEUqm%٥2 f73`ߝ${Et=v.^ A1u=c3v[ F]ozlݧ7KU3Pћܼa) ᑇ0^1arlvfcz67`&6`CgN0n`a TBB[(p%;# wydIҌ 03DEճ\8aN- .M@kM@O9q<Wſ{U\-ƽ&nukĮ&m:y?ǿϋ߸*~k ruܻWo&iUq^l*v\8hEa㪸MWo*~Us|Z^o;[d[fFճYM +B? =蝽K C{.rYN崸ftY\EpY 5^@+E3qУT4B;|[×:4`jvtvACzv9=NL(F}1s d:w9B]s(q>pSjhUS_ fĉDEEutt,|}}cSS C#uŊUͭ (r aBfyYr&_86>>J?鱚Bw^^^ /OУIzo~sݯ>A/ϼqVl2xa *ZAЗ4D(Y@KfN@e_ڠ?\F`gh,:`tt-v58z8_^2W;p v@iM@ hclF f8+#IlXhQ-jZ+[ԩSB,@@m*n5[Itu{oU_%:qՉ[xM⾫^֯]Xcڤ&oe{JxڤWn6eۯ^Qyx+B@> h~V j4/%gs{6tXNav:C@3<4@4i}УT/#M@_(ޯK/a#Fq]~|r]ws nƏxwBmOZteeĉ h aD&yFMÜZ?x9s浴wQSSWTTUU5oiw?fo-{\y$-ϼqVl2TM "U Aʈ7 h:he^@ h8KH4pFàӡ6vcA'i9V>0363tJ(|g mS(4m`@*$]py:m6haRKAC;0LaGĆؤPZE,8I9~8B#mMZΜ9C7i.zF(P~4F=o:~/c6\NzW\ꄝ$l&~/c7])[b4 *n5qWoՒ]m6Nx-ȕ&%qD@sB _WJy沚v岺/Vp+*Y/L+d:wVXaDG5.4?Su943e„aVw\Tss+l1v=uP5jC;}Y]]ư"<5t *##+..bժiC=RQQѱ<11={nMM]nn~t⤤9s=z'vl Էà9h0I/J֙.=Y:\MC RClBdZM&L-:! hpJEOςAxD3M7 5MRp0j0LV`& J(6'tm#r-a\ u]^:haG0 }D?b $hZ+ -GN> xhСC~\x>s ԏ= uuP#Gn /h|15 [rUqx~-ƯUG_ڤB=פ%IU܆_:eq[tMk7^7 P-hh s@\@҇Ac ^@2l}>Nj-au;mnep7@> \@J3xG0 h>; AZ,ո(tԌiMS)5 \@Ce„a&ȑoeV45]74&s_}}c]]7 }ph0oii41(?ٳ疔=#5u GVSL/Ν5kέn3f̚PB;\Baܻwݻ.z#02%g{qpu֫]ouSE={uͪ(4a h.>4.'^"A ?DY/ =qQ<AJ@S`r>aր ȑeVrm Zo6Bˍ7W~O= U՚V$ |swĉ|[z;lo4-n1bt:[Uh~šW^)`N ;h*TBfu hzRCЀ8h1x"vms-Nћ=']xß a4*jC-Cî@ry h}&`ylVⱘp:kWGo1im0 )&aac;, 5˭\P}ĉ8sG}t}޽{׮]uϞ=GnvԩGBPL3mʇ~e˖3f׿~'>3h3Bjq \.rm_ǯɻIϩ;~SK|#w@ãܴtNƠf } [~7_w&:F^Zt6tQ>9-f8 ۤMb^%>o1Îax#6pXYIgJ8 _u e2o(';*h1WJ8 "[B7~4_b&uy˗lll<I!N9 u/IۺuVx:4:mb a^l~&r }{;oGGGO:6SRR{Ϝ9sQ"駟B y+qh?+t~뭷nI&}tݠrAo-6]WG6_FyK=zFm 7nֿ;7y=s?EO1~xO&J',-"f?neKpg߻*k]Mv%͕&8D0t݂Vy.z>/tlWaq 0Z!2\: #F뮻:駟BG޽{ǎ{ٻw/J߇AвsNo>o~/ûvo?}#7_WۮMpY oXα/R6Cw}wrr2ܹw? ,_`4 .XN$6]{]]#v]nѺ>uZl|FDcʭU/?b6>Pu᮷6j\ѫvg`3ڽ?qpǗnݯ.;.s{wNqu&W_^Z7~O:}dZV|zg7.ꚅ 78MQ|3 ͡9xPޙڇy8^FjuVoI-p8 (`Qʹ:|7ۊl2/l@՟221M~tv: ؁x%C(QP\3HCBSjCw/N@?69rڜRD)#f4 ځh4j ^tnhh`~wNp>|ֻ׆`=WXU[[ͷjZCCCCcX2@8(omE- Yf]i hS@ n^Ѐ}T4M> 4E697ļp`4Zfdny43Fa^zUT@:pVN?mv )tb8 Fe 8sTOQppFDȎ4a/A@'Y> 6s=w}#Gvޝ_®VQQqLYfϞ='M_^{MKK;|EPϴ\tW*7ⶍUY~׾?Y{jߴV"6ڸ|ԝwc*yՉde!_%E}?g lvdspꩠHŀ99^>;K>0xɈPaw'OVzjjj.K>VWWUW>Տ_pƣ+7X5'|lyO? htp袏=78lX+rҿ\nmy]?㎻~;RП;v~n(BP(V#>:b*S,V"U4AS8bH^@Gh輀.8hs:cwRmhӠ}m| $8/ jg ѤIAn ,L99>DAMꝀ6|9Lhr x" t=iYcw4P$N} ^P.s,p-B ,CPZ>[Z@o6ڏ?{^.k…o& _z;vʕ+QϤIЃ}WZ}ݨ^8<@9y;wyQ=(蠶}c]>o~g=?ss_+Vϼ%o}!{-x;{S_wf=>t7?gV}[ʷ=ϮҮXv_sW3w_:w+5~UЈ :=!C>r-6|ƴ I"e^4 Xv cl*|<>]Z x }X?GkLeerGqθӵXppDۏnަC9G%B-2  J@aK ~wޡ?رcǍ曷~;⧟~:6!=3mڴٳgO>r}t0a}E{#1b)x>$V []@?YO||}cKl퉿?+e7{s/}[SwGtmYЛk_]䇫wߙ yubw=2`ߙ䑷ױkϷ?O6<)7Ot*g>Ic^ hlDMqP0,%Z2\6ͥ$Njz.KuLli-B ;\;f %M̩A@w <2(#@uMY >F"xv `OOu4@2:t8F~qmw`:Tm6՘}t#>Bx 7RZP(}JA+gP*ftPnu<.gqSns#wƂEH0,>FwDl𲡤;XPpР X hcp4Kԅ43a㛄{G3H@Cb5B1Mt,4 }(x0h=hp,fLLÐ*wfT@R+e++<5H@%ޙ#aeS ߆%@sة?H<O/yq\1(E0eXPZ>[a4Mocr+V7nO>7|s^g:}7x'8CƏ>sGqĄ CFx'=غ;N8OV+vb}ĮVrӾ]~[Sw˿xÿ/kG]oMy?69޷sl<u ;ɽ~T-}xủ?}ܭ/~zηf=O;sŀz.Aѳ]x\=WMl|0S|RG??W_J@+ O)25BeXiSƒ491G:ЎS$Ih :$r +n@~YjlyC0A ;q3d|o揀fMŒ`4ͦ9cm&nM#հ6H-閭 y6.Yt\ψ|(4MǁqpHӵweEP B , Ă*y {e裏x≱cWɓ'nwׯ[nŊ~<(8m4裏Tk^xg}+xw:@ounsc>=z߂7 ُ_'[3G]oL~V`w5ϓ| oM{?/xb3^fh8Ήp?߾wڃGm֤gw;=ۙ[p( r鵀EwM$T36z0rPsl'tEHK9]ڭf/Sa6j8 FɌJ:[ 12Hs'K}C"x^@>o&F3 h9VMÆΘ1;?/o[o?w )wq@7z]?E 2oBP("\#dhV`ԸKoƴF6AcHSC@ihE:6/FC3A AyElI˛#~6H*e"lXcI;P]*l ܳi h _)g4BjFp>Xd%̑u#<\.x dISA0n ǵX0]pQNrFk. ːφ(* VÖy_ƌ?7#l:_\|n1b}ߎӧXXdɽ#/z)T-zDb]=o=܇^_Xu?v=oO_H^Yr?ߴ?7We`;p/~j_v3ug=t]zwѳO o{O{|ou7а_̧ޥ);6 zTȓL/豟Hf≂N;M繩{(+W l;ɁNVrYТ}X%.u3SgFZJ%-MRZ*&J@vT[Fqr44U>{i˖-I:vX~w[n]wkY2uGU U( +C/Z|MYZ-BRhX8_vD8sm:ڐ˦u$Y 8L]>.ЉH;hvPtl4ڜtI˛5g"82x.c!#DҢ6]jP@$->oi2`}$u-k81q |t4q `ud$qP;5e0!$VÖ~4~~'O>cf͚cʕ/… njs_uUy~o7ߌtݎE|S8aƒ:y~ѧ t<O6bvkK_ |g{cʶᗬm#{SC~/h]tk.~W/2,툛P@O>y[eι?x/'|d5 $b4Sˆf}(T<G{)#Mu+h ~ɲM,%ئ 9ڗGFF㩅lhaD\NOV `p88 6Gf-%z+eDHL∠*x&fcX Lg,H"Mp*hI$:BIn0E[֥ZL1fEP#R@`5\hy\& YΥPN͚`w. ygL4hDX4i 6Ӭ;ftSt:]AXN"U U3}Blυ* [#oo+ /⫯8":6!3h >ٰwEK/MTub8EȆ ^ca[h=oS>\Ĩ?]=]i§8:o=Y ^g8~g>i?{z'q3E ?kR?SVn^ /V۸G!-MxĒXM!nt)84G|cO -a媁\DdJ&5>?Hd;suxC; xH{T-zl1 J{ PPBP(jm h>ҙ)^@tm:h.ɫ h;q5 h6=f@#鳄7S@ܑ$QnҖQ@sDM9T$&ra=Cfٔˆ}"Yp4Tm%S(?oCH7S@#7ѪKE#pH cdRl&MCVfdRdVaG[gh{gU,cJ[i 5|"`K "l[8l#]`y+v9} v9}bW!OK1 UE T4Rj)ۭls $L.j LL*$d&{|DಀJHYeȻVVc'\@oU);䚹WM@Uk4&(_;̧(LkR$ hjL]4Zͥ4O6D-64"OqGV( v) MU+]c6.C wdo:ʾ7ȒAc҉?Hpk`j&eh1sI=M4?^vPMBEGM' hg% #o0YL^Q@QG;ڣ~#ԥ'"l !X*E]E@Ut%x~6HR`;"ҍ8HHEЭ-L!B ,5eȋ}F%U諠%T@S\ZfhPxYZ>Ghzecʀ`5_qA'dZOy$ʩgqRJr"pLTЬxIbJ󳉞z.n-9G4WgRDm9>E(bI"pS@*HH 5`>*UPzs}$y6ЕHw!Kt~"e1N2 F4<7L)Z2)b5<=gZ"U4$Rf>WиL7 m(+GF"R@/Nc֤[.l % B!A Q@sLmx|nmr]+Н_ %]mip !PA#b` ,*8h|V[~!U~`$$1t 7%N:H@ ƣzVOvyfi03a)\s(ZR^soitYMfXZz83zyEXMNޜt_= 5ۂA*攕x2C2T49B:wͤ sl*KT"HkɌ)cg.E,3 EY"̩.YU%",g`3A@ra{䗻E*QZP(wG_"gŦ@t]5 hf-YY@.x[@Іm4 )ͼl:hy];襀'/ 5sD[9` "$ѢfgCX,'dWXϴ3w\F@c ~@yH@P@BZR;J@\Dq"Z,8:)iD8E4-#鈍Nh R᮹,,`%X*uPzs}Ŏ"+bz7\@[X@+ BU2dA/;4J-F Ce{k̤̆B:$(ihFh6E{"ЖoLm_O!iheF$a*<-PgZt Juhz(v=܆c!-Nv٠ hi,Me$S49o$ 3CM4ŋRB ('d0p,QgwBEs%dr2q̍(& ^gV5`9\. X:Ih!] z̜#̘]kC=7e|^(i8JZlk5y\(&"? %U( h7 = ?oY<6ߚ''N>Oxּk'0} h+ B24I@m.gF@ʌ"-Fyo[c&#(z-hKеho {&@M ha1GY+?n׍Z(G"p<JzK}H%;š? <"W?'CLQ))qe)"\.-' 㱴K-];`LЩ ;Zbo*<;X{֭o'> x/xwMmO|iSWsSWWv& ¶Ο5 hnt:'>oM-%. M@K)lb7T*8G@8mL䗻E*Q oM* hqtM̓oIH@ws 떣{P( vBo( fC3h2>g-0tjG8ASKt( AСn+9hJIgH>S|'FRz,hpsUZ(fBMeOf:$2DV2l#&08{ئ 6 )ASrT;Mp&TڜfPI@Sp̩hk:Mc[\@K)J@:HXХҿ2pj[Ǡ6-iR$HSHxK` !]s&6딛'铖Ml׾ab:Ƌ 2" BP]&GsHL49PihI@u5*"Fz^:{[[Y@ɠ)%Gib@--Gacyp<ᘭ*4l{(ұDg,%ͼA9 #z`,Ҕ`: ,P4Se ڝ\nl%vϰm<~_\K%q c%UP $= yʰ/mʷA詀ҹ+V% g8a̲|lqfpдJ).I!gPg z2%dLfF hR }&* >\s* TK8}%QzGEț&chs!K.#vi^V@}&^g&{{98g1( BE3A9\=7 #K-kElacS*S9v6!*JDž6xgQ#X8h|_p¡DLMTW 鈦R@%") ݭYICKv}Tf2G"haY4a3vC#,Pg$uF0eL wL + ߴ@)҉xXUt uῩ(aӦt.6O4{hWwе h d d \^@EsDPE@F&f0Sw_,A7;sv>9Xce4ڃ9}.M(4+!>Gڝb+# x_F@Os!#Ig|Ì7R{ c4:C :/P( vE/)EFh4 M#DˮM]lZM1+e\R[A$٤E&dᝋ446?;h*5H@YQ6tl쳖S]ZzS8KGSZnt(H#'Mnp$h&f hQ1G"E=8sMq> o&ֵ:zF):8h| " UZ 3ѯI63PA"bh31΀F=g)VaŃьBA@s=]٘2W!L9E􉀎xyv ˣ"{D"Esq8":z聧VAod lG ] \W.kn!!t:ROZVτ$PNe3t3HiB@ڒ"R hL}{hO^@ }G¸[N@ӟ9lHz ,XA@:cQ}ܻzSn:ƙnu!t=lұ iX-[cfs b" BP'i.b[}R"Z0$+Q"g{ S@kL3/L&:;nf_ 44Mhgn:[+R֨*llh>:qc6D~*Yft血GDRQ㓃_f95s)EYp<Ͽ!#1rM/D">InE&"eh1ʴxA.Wlr4Z$ k%E(HVe΄ GeT Dg&5=q]P0LA\ ,7H4C%zm9o&A:yIח GlvRvBP(v2V92ַSE@롭#M-XoZcѲtwUfclr4}֛tЩ" hA H4Mh34sJY\h~ HH8}yY\0΀V)*fRN&AhhC@ [طIY7%)c%UPAY4w$EreIrN6 Jm;|Gm+͸ J@+ R@/. BY2 KTAбDRټƔФ5tKA~)RJ@ *lP;rd jM{1&sO4]Zl6v-wtӵSoz)7#Fq8ιFpiW( bGGD7~oZ4è 肃&M| I@;s ,4j&;\Y t,tٴM M;"~sh ;bpJOuiMD֯SWz"ADd%D٪(E:];>9|ӜI7v ']yϞ/4gCYP( QFAƲwZ*Ԃlj^#>l 8h.  fPnj Y 44w4}f>b)-MvX. _ Ri55X:2eQRe'Ѐ >vRqVmDWcY: )c%UPAY$x]S.zYr}O~l!e "\b͡lxI${!ޙӝ.\i-$.%]s)t3cHU!!3R< }]gLu9rÜzII@O>#*P(>Q@w(EW3ˇB?X7 N٤2MF%H(a6`C]wXGD R8KE49h.)"rJ\Aa$3Q)@ͥw"EX hTPAmJ@$C(HLf_~[vN2Q@YD tp(gx)8ͻ̩qLt_hNt 5J&qRNaNenl6`uXl V6B|A¨ Ẻ6j5F͖W>)Ub4i3j6͂ 1F;Qq'k6mMQNKagt^]'PV)Xl 6UleUQ(-GϽŦ/4Т6٤{-9\Ń4譀F TccxFOu-K\0d;"YC@4>o˖uPbzDl Mkb`0 &}q. RqyҔtN4=O2ų1,0sлd"e *6 D@lx#PC4(  t\W2$\ h>Tg%w>ӵQ6BC@_)4cҍsN^fM\ffMn򱗌j9ÉEN6vjY;^w@4\un갹6jqxx.Nmli9876Z|{vToiljtZ|^|mn갺:{Q]6t\&t^dqڜ^is4lv`r4Zfl.esp1p:|vذSVf28u8?ngvBEِ 1vy|Vtz#p-lu@?˭VPX"϶Yۋ8=:8ncő*EV``Xl`_Q Udk@fKͦXAX")2( E%'F5gS$I@aݦMPX Gt÷VΉ"9_nM 23#$-PNog #y a˦Fh<$7:Ch 1MOdpbS(7E3aCv"3(s *fA(@4^~S9w_ e)tA$p$<6sVڲuH̚%q,%rf6hV[)[ᬑws jEaUp=ܜ*vk% '}.(^GbL@D@3حf ot[~fSxr9<^w{s8p}8Gzau!C{= w[|Qi7y o=t>ӻ಻lFRg}q|7:]&N?p,n[Fˉ"nohG/<_>r-χ[5x'66JsY-vX^dq9.=zas+F.:hwXpؽUrڐp6fljVmn6 6]Mui4$2H8xPm= .qHvz؟K{cӆ h%V;}f$t[,f.LJJ(0Ld1ib,?|ŗ`9 yxfdC~^7pG}raGPh_8’lR( Q ,oԹ)0M#eZiڑWnI@3-tȜaie=l) h  E(z+" E,h)sG4SY@ 鄸n}U;sHԖ yU)Ib$f}*p\)"N,M qAu67$R @( *MCyyLJKgAV0F%Ev'DkZJ3 bW播Rf܊Z˂}VZQc}ڤsOf9#ftݔcMmw81wqMvhX\ Uhiyz;}^A=%oٜ[lxNjs:FKݵ;FQ謷8vMQolvnZqГoq]Fwoĵ'" it7y<ן:F8eqGUo t9]N`GFnl.hXvu9| vma}aMD=!VWam5zmQol^ybḝƆbs7ZXAW? )FFm,sPk.h58^Dl8 >oNyn>}꬏XfͪdR_ˇǰai8bb5cb06a"Ȇ67@bQ Eh+TH#أ޸⊫N@r_D=wSO=>*Eq24qdCBXdVCM B!"=1g#"z@] ʴ,׈T2Vc@A`U$P,Y 0j6Dz(HC3]W c8-'3z+г@Z3l( X)8,"ƙgZ3D[b6 ۭRj<1MP.y\ft ;-z:1a8adiI=B:e%UPAi.G qkeO,h.DXv:&`sH3(/EJ3J%:K6uK>w'tYFB:-߮t.>g7 ~H􁀞7fЌo02ψ̞dqKnkr:W5jkhuaaw;l-uc}+&[t:mcw{l}fǞCꇸѥo n1foÛC[|l?e 89Ge蝀Atg`$(q襀>O}LOqMZ8yIKhiw ?| {>z.j=Xhcg@i脽j18]t|vŹtڄb̬c\;]6{حg ~Y[&b0lmnqz ?vWNUSk]p԰\5ns4 jװ \8]{Z[[4 t48jGtq6,.ǶjިoheF~uE9|6~И%F=t#W!)7\ {#zȟWNj]xpڬGeΐYq?^sc6:|?/7n>mx,V4kFh7r{wVx[n2e+rg{4ؕ"ՊY, g֯_=^opc=_/y૯z>{!J,{}xO>쫯ֽ?9\lOvgXzX^z8ƃ:u^}gqϿ3{ihJ5o{7ߢ9~rʩ)Ӱ_T?ē?/ X_oժׯ7j#3#=T4) ĨF4zb hA-A{bD:dMN9 \N@S9al6: 02MlA&8hnFѕHșp#iceDsc{6!n% yqV%um1s,nHJBJ\LdJ3!RDUQ:l=9pЙnfa%VATfaj:)"5Etue󤙏Q,I5S@`1ebzgNeMt}[B@KZY63`3P ͥ&MS$o~ 0ȟ׎uׯ{މvrO\9E'>vU}!o3Zo5SGw>/.xhrtiOx&8Φ={5~,ic_-ha?ڏܺ|꓇sLc_端o=zϿ~ l8Gy9jXF6cr;neW\Ż?|@f Z5DEO_jʏLvGw{xơ>nܞw3lQ#~_? Guzw}'8<gΜաCa؊7޼z#F0x~{ƾf̘Mcǎ?=vw'p&rHIP(D'F5z&æl^@c~ KA ڈФI4+p頋t4;'=l4 ƳZ=y#枺G9 qF$%g0ƙgZ3G0>(l1-0H\WaSϩTIe*%]fLk]锖dpoG78VZTPa; }%I )&'әܶd#Zt}4톈Њ K\M}%#r4pLM5co4Ok̳WZ:g\&{'xGN` t:ZZ4{?]޷;i~n;}kZqŞr:{c5v"{[:eL9튦=cZ.V\:c/8'ڭ#t_.Mhn2q^Zyb Clpg~gq$G9r\:ENge^{=Me`s{#OXquө"멳Z^&oٻiPGԲA谻66-9Cg̘5hfCnndƸ.UడwQ764;4du#G&Da7fRF"Ro._u5#z~W/~ͷ"{? 9䰷׵.0a֑'8(l}eWԀuGy{}p饗c 8?'xmy<>4񺺆3Ϝ駟N28h-]w+W~87{(ڎ:?\d̘qF>}k5*c/h BBzbT@O-N1Z֬iڑB$ .р X:N9ʦZHsTMn'6DRmh  jK!&02T@I Ӧ*y dيs 9 KM|%!\J0_tVD~1GZOq騞2a*N%3* >li6G@ކ hϦ.gŔ-JA=38H8BF@tn.e4$ n+1枲lq>H@[vk\'K~ _2_=Y]F[}s'oes^xlOcz+{⒑+.o}7Lkv9{8M{vkde6ZM;|?.r̸aWMC';^:ݞ!M~p#mV{l#}#W\5%ch\WR-.a#WynG?q/,}^qO-3NcF!{|č=6:h̊+y5,v&m= :m/Wĵ{>d۬v1/3Yw{~Aם:|1\1⯋>yy?v:9Zl͝~#<6b(8a i f,O?7nχ~?{g^|++]z]v mV׬b5K.m=xic4뇟[gC =8YF{1lĐ]>Ń\pԨ)uefR(R'F5}x X0FM*Hm%A6ta48X4 hh<%4 M8'X{g8h-utZ2Mv,")R03g QY.NgJ4٢X,%KBV{-WT#O쳁Yp}\6G(- KtA3.zd l`t.UZTPa+ 3l3ɡ4 hQ3D/4C,ЊZs;g32w;t9yCŶ>qglgw t|6czn@5xPˈ?^4+7xzCo ؽ-R6k4qO.xSY69q;|>ޯ~sĠ1]_F:Y,{ĦSngii <(ޖG|ʑ61dCMc\^GCG?t襓G}6~G.=.sXl^k} /a6pCǯr%'Y)ZZ{s3zw;{9\鳺lW wfڿ~z]~3'Oy<{aIa{<>$Ncb b{:䭷du^{ks˗]vE]]CcuѻJ7pD%#Gˏ9Xs0`9ĉ￿Bc뫯N$DKp].ZBmm~gqg}6xPd& [KWo~q,HDmGu߀ʑܸ=/"ӼN,+ &BI%RQ@sWnSذ$i..ddH./#6&(QhelPwDt$ #`( ǃd(`g Mg}Tg4 ϥp#* h,2!]˦SfcC S+ l#E6),QGʊ\:4pV)v|=mbd)8eFg%UPAJؙ4آixŋ1yE]HmdE6G@sPZҵlq9g ;L)7gz#q֩7;3NY~)Ny'/vE#t8nt: N ߰_W՜W?ƿ~àk|N[kHnzN=d'MWOv㰵Xϊ~'9͏^䘹@io:q^?7mǏ%aVKC={xɘ3m4Gp79Fq^:[Nvz &1]8)#X<+Nv6n9#^f_|V˟Uc/z}4k|Лgx貑_6}m}Tgvٍ6kjv{:jИ,eλg\}ʸ?^}=z/]\oqhSd}aotMV6t{}ի??| " \Tk5@F#bu Ι>}>G?:&+]}᠃yח,A?_jg/8+W~tq?0n>[u9|Ӻu_@~|𡨄|4R\.ZhEǟp]?mo3gGe0Msƍ_|)uB!Ca_gONy: 憨I6) ĨGP,!,8 hp*In=%oe:ĈZOSpTtВ0:_l:HFMgBX$i#}2Il[,ViF{DNg.K{(| s6rݘh^j|1Pj)` )BrJ:ݐ˄1%t xle/}џUZTPakj@zyu4 bJ^@ob>Ef!]huA^ ܭfW.YDa)yKbAМ".meS>''M9^p<h]Lm8gםqʲM?n,m;97gw{/vc6hirۼנǍEl?v: #܃;z_w|6mou޸h&uA39-C9gKF4gZ:S-{ q]vgu m_౺rÏ\pE-!Mرׯ[5|7OsG\7~;=uYׂb!6f h<va0m hjL8i7[V@J4P"3lB)&2U4Odhfɧs,!'*V 'h|f0byst}#S]]$Y JUВ &se-NQ)}P: QDs$%n i {*gbK u6݉^9Nq6Y.gw9M΁N5Y=VkKiHtXMfYo7OT:lNe Kau4=h?t՞\5+Gb1;<^r<6]{4v@6a9y܃ݮ&6Ňjve⿍Cvh9ق\۶7[>sfCCs̽34q m7"y}.ť1'%H>DB.h*"nͤRUhRyMR^S-Ig8K-A,HI_&L ޮɨlzhJ@ *lP]@t6xR[]@laJmAp'}f2Yoe 깂V&dϖܱy㌢*':J*)ҥH@Oig^QM@tnw8-ngonr؜^G<^ia6fٽn@vyuFN͘q4 :,H`;j8NhNhy ͎&gr6ۜ>ǁT{`pyr7V gu7:,V[Cc]bXvjcA6x`bs,wؼ 6mxp쾁Nq9mzָ݀V@7yB:K;`@]cJ#ynh vx^=ht9V驳f=g_"?-UN $GG1Vv}f4 bZH(N74'"|fұvX:5Pđ-tOm@)؄ HD "9+ &BAƒz&L}rMAc ymhcމ±d8(UNGTZ4І hSCB@s26\/cJh-u-t.tv-סe S3чgH$X`3<Zp)xٜ|MPbD,"e3TOt(ʓb\$MK)PV CasMs)-t%zJ hTPAj#o7f&'Js/4F-!ez&jЅ#]lAsHRS"]t;ٔզz܋O;H@qδ[L̟r?suz]\@;Ӄnql.[|nmw7: .AiuMvi&kq4zzjt8 :mՃ48=^r 5`jdj檳8<:UDlVgkDr8&mvxlMVh8,Vv}z6fG;=hs>vp.q=nYiہӆ#,zjs->wm`dN$Etl.ORx> ;[Fw:vokS^FJņ m6&Mf0r21DU["5H1*/XT7CyUOaiTHͣji/qdC)XE HP(jw:AMz hp"cFB b- _Y@k)ۣH:cZ2OG]dMKm7Fz֯DG}&Set ?FHKGX3#Chɨ:băA3't1) @bD\PJ6$xK!,%V´ϵ h8KHYHo r%=Pf(S0RlJKgHF$[jIMOA+ * DA@wae4M@:0g޶rtgwLy )JNt9)^w.~(:u9SNS9:CC/~<vA@;lnñYdq-Av\П'x)tR_Wg+䷛#l6\x+!5ޱT'jqH5Stn%l9آ+ Z"+l c"C$5BH9F7 #h!v z#h RD3," s@#D\Ld6E~=Kn3lW۴"5Nw ElPK("")J2&@9QJJbWO岈nH<MȔ8e"ZL,&h/R]‰i MO33(}Nq߳@ NkIt3Q=e`\6OH4F@6tNd<b$VAT {%4 eG!fR`pL1'sWmh $3Dcp챀NwmJm2fڔ'RIS7%"Fz*S D Jd`"3$,;;_,e+]J*ۂ d+!jJΊt9e4O!D=ԣ5#8̩7MtZ|`u&mq]+P(h4sТۯ \^@WlP˨- x.ޤ%;ZЀRN7UT6 $K< H4^Ĕ<\"\.],tBM#N/y9+nN,( *УPY@'x"On5Mz hrЛ/>bmD@Wt]bE蜞 G@=&L! SŲvb:\Ŏ ^M[BP(vD6O@!? hgg nkD*Ρy9iF #΍Z}to4aǘ}4)7IKutlIH[)'ʊA4lbB")[ЀڭFE3(M$M4lVygMЬCJ%d&\@j *BoBuH$\5-Qs2dkg3ta Smи\V JNt9)v"cw;6n>s)˘}>uYS;cRQ@3;v7hܫW( b;g;߽?2~=/M DihA@%;\ʵ#(qX6pЅɠ*ۢ}kdξ=Mв-!XU@elnk,U"+-sj/k[i >6V@[N Y rlz"Pz$Ӏ .%UPAzz*i(4=yJtA0Jbt_ LDKF>9 fϦ˳}h(%cu$S).:g}ϙ~3AY hBP|饀ii~dF hCCoK DMf;htO 6GgMT}NDc'Z$$JT*QE4L>Wy" y #n8h´όZOet2' hC:9UPAzz.)4^,ә\R$:i9,E\[n|l`еL!p Yg(LbD蜮4=%֕sI=}E䬻ͺ7gOai m缀H hBPs# DłL@k YxYʌA3폅jdm@[A@;blHx s4`j\ ᝙bI4VխkTCJQ.ׂYD4W"MKYX=EYD|H@ -Mo!H=AO4ІNi3%UPAz hןI>$mXŃZTEМd*:UІ,.VgI o5}6,-_!Ѕ+͐3G̓ȱ}3LbDOSM@_|ͼU LgNv G44% BSytЀ&  L@:6:G_AX 桑l",\#5-4RL#T\jMTgGԖ44(wT>s] hvy6*T*vJ鑀>y9[^@/>sgrD Κi%g0}>éBP(v"7W=*+$ eN$43U_w&w¡?7Sv=1jO:XCs TW4.OLD\ f)A1Wz5}f68L^@'pFR>ϜH;h6#GJ hTPAބ*:$u`< hAoqݹ)۔vul#xK#{g#]VD2)2fgm{н $S).:4ࠧ/?uqKO]z֔3P( % hP]@;߽7e3ؘ4A0rБf4`P$莑#BX14&gf&:loې<{]h:u  $ -]ZzS(3l rU(ФZQI@eiin@`eΫaI@qhZ "rJD4t#wPC-H~ Es4 ,K)ճwbJB}q#tE{F$Z<'M'3T6ʱyՎxT0k%UPA&W۸Ga]%zIz*N@KJkpN9L)<8.EHCSN._&e.L&&1< Jg:S٬( ˼ɠ;s  2$;sL9h㫀.U1qYRQa.S Q˼[c§BQ)QS*vV)9Sz6tW:)E专N=D&L?wE3g_4u⑘гn]8㦪bmWZP(;KϠOt}ٯH@$449J=B*-5 hf 8#sn#h*6E]=N/A<)CY-ɴZQ H["D#}24GΜRG,!T99%`ON5=ɆB}tuS)Q<J@ *T`5;.oaLd$NW/åTЀ)I$"T?GbgC Ih3^kʒSΟzuiWs@+ bꑀw{=(+᠙4ڀgI@ .a@Zvݒ DoF#(MA!AG`[,ܮv ZD.=) sZ]~s4$+QEЀyTsxE((uĺb Uʁi]TjLeҒ>3R0G0k%UPA `/ַm (uC@#OJЬt*,bQTеcZt"Y4.(VH =};͹usfΞS-vil輀Hi x^P(˫tό-Mh8h-Frz 9ᠣ= ql(ta-r̦(١)]H5)6d{)#$-yl=GZeK)E$-RJXx&!sZ 9446* *P%lfxlM\Ai`P-Mw=ݦ%۴"n.+kwhlrE)R◻Lw6YV.iU@ T°_S ;Z<Sa<"@pfVATz#tŃXf: h!sh&]K3QA@:rL~t<Of܌ϩ3Det"LRb@ h'6iZ5}sn9o Ĺ3ӯ'}egS@>qv݆ο BVH/t`M]%eV@ytX@?o wA-t $mZ~s< zMg))zޱ4oE  9M3A\_B\"!\JrH+c h!).qeٌTDKB(9HTTv4V@S2l o%5dRMhHU豀'Ӻ9Њsz*Og̻4Q@_z64YX`uKϸv%3O ho-ZP(hc\vDw:ڣf#PMBtH"ՍXAGpX ^"kcA=h8 "`,c-io ul<)zED ڢ)MbP3TitGԔՒ웁rq.A a1>?Y/5t$QDY(MLNjA1(HR,_x%v %˂.IBOdWG"#&ho7Z)[_tn.E6%*4CtTIOPRz,hx,߰!I_JgX\XͯMJd2)[R!ֱ(`pzB-A*Pσx?8 7/RLxAdB!ݶ?䋞;Nq\m)X@ ٠}J@+ztcp3Rx}"kH@ϙxv.46륣t2MqBP(vh}!oq_#@С"/#D\ RqL@Ñ@0H!] hQ6; iZء)>2{|W~+?kdsCP+9v{zD{~WᄈyQdx7$o&7{ 1}VP] y6V2t>Zʏ?>[j՚5kX @Z,gDK%ٳ7շN# dHu2mH*>Wq64y}CCWNR@K)Y hEn 'g&l,&9n,N]..:+ B#"g3]pESBvĂr:e5\#\x;hL,Z0 ĢHG4g=ݞȵdzn.E"z&H@BͶABNs%-:h|u3)bo%D9Jp, |h%"voQͻ:1zZZT#Ư}˯>_W٪>gZ)5׬W&VBQU|O/?d'ǟ1"ȳӏ|O?ZG?dU~cϱd?f(R>V!>)p%!>xS:#-Id\eJ[v`K## 7RgaͭD٧x˯׭ݸq-G焞Ngo_ hÑv/ ZpЛ'73h'H=hTŊz9D tpjǞx) z&Є pR@̙t&-c zv49nÍD襓V( bo1FZfdt,8p@3>E7 cf(x8JCa{(kA*nꑨN2:14bᄞ茥7=QOnRL hJ,4E(.RMgLMG%E\+KJ@*:XR^#2yLG:B"lyoҽdDvO[jP|2,q5-ӭ&y^_P[@ lگ6lP?'4a $llx ht2I􅀦DJB=C6t:An0Rf=t(s6S@.R(9*@I8z43+Sg7u΅$.l>s[ΟsXr̥,> hfZ,Vbw}{<>ꮻ\+ Bt^ hPq1G4_  lQD nkD*4(b(FDCKɬNuv=n3L n.g6sA L e2Eq5 E=ER=D1EBFlR)&tYĮ.: hd8hX"P`m_o`߀`[ A(>#C#HG{ֶm:qC~Vݠcց(t":zǒ6QuU@cZd pگ}WRA"Lʗ՗=bW~\5`/vRilᗂUW_6רhk_7 &r|_1k%֯ýMq,wѱ/^v| V#%φL7sۂp0 6f&dݗ::14:b&ݭh$9[Z@2ZAKQM酀6;-:E}>ou g\[Э[vؼn눣NBP(&xT_"'z+t"OڠH@Ʈ`X`Tkz,%3Z+thg;b9l@ĢB,k.${Dwn)V*o& nWbbȩkǢHX@8G:B# E՘' }D$ۡ"Fp{[=PG%M3񷅉vJB$1m5(^E07H録TVOY6|7*Nx؍/c +"EߖL:6Ʋc#u'߈P': ?T!CA=H(h0ER@'rT;E] hd64s],} ͦݨ8J%Z"eOnN:ҹgWЂfYq&^8j03N tf۠:enEJS>ʌJU!R|)H7nDi6^Ve̜WTjK"HR WnF\LD XJR)H)6CC"5o* b:"a:Je{/L@wl)=;fR hE $ ϻӖ\ϟ ,K37f.9D@][-?9uѱ,ѥoh XO=|ؿ@#2`@v{ y#U*`k~D)#pȵcDNe)T .HE:*J#Hʩ UKQyRjАr"HžP"@ ?VQ$#*G颜T3bVym eVG, eÆ3qTMT3PN@pJՉ#3 @UђWNE( .f@  8.56y<=TV|RyX$#k8Qմ_M8t 6a ֑GtP<O}* R:`aIBm `+S=$ViGCuRN/g@mT?픊ӎ(π"6D"m’!R T2PC̴ zj醧hHDED:r1b*0*d{ȃDjVAf`FU ~)ec`2#n]T/HSN Ex r*D"/ AN&P~*H` bfH*"C%Gu 8ב<@6xᅋ/A .8(Bc+4|!h;lhR4rvd:Ba4E4:o4E8Gp(175zH<#a-D8hnz]rHY hb{-+8"಄p:"&WU@VDG6qAfM NY\.WJ'(*H~[S;)mu-3lGc ±tW"9s"i9/H$@SД eC"M^) '8 xBx^ )'R 0 &Bd8 !ba/%_ 8qȗ 62/x>='$)")T^s!5@:CSGq6T p/<`Wg@:],FРpߎ,S/tkI(7 A!c#cO@%썬GÌXģ|Ц(* Uky\@3F@"e,`8\sY$23ŜK䪚Ct&r 3>BH$d&w6t6)H DJM.8%g?7* b%Uf,˯bֳ)DL,nEư[$P&tt,Kt&Pߔ S̜{ys_j +ޱx$/]^@/~- 蹓.5|a hb[ ϾJw3Ǐߋұ:xP =@~w~!Ð`ӈƍ}tGEf.9}kh@K(v:rhlEmS!ڰt,HGP,C?~[=;V{,& 3X1cơGAm*eF@*,BK,%OGK P8*Og) PQ HYhwr7{`RP 52FÆ"]cEqQKRmtT)D"mHDD hw5y)DlE @q,R2S~lBD#DPA/{&Ԁ؊x=}Wy威ǫ@G'ѽ tlj@:HG6:(ır"R*U(0B٨cY 킟mB  "cIR 9iȌ"0dÍچTG;;t1 x|aIlEPաlXRma+*ġt# ;B"~kcǎ8@GkqCJAKPgeD/5)X٦SJǾ(qKHTDe Ah6MXTN V `tj)DA|N8}_k_Ɖ9xнtEY/~+\5G Rv5@P 8U4(a h90_fl F"LCq=@4q}3%ZvD,!gBț٥WZ=zX ^oӍ7O9Tr@>' Bk׮ꫵ;FκCW,Æ>7p8~Ȑaͽ7'O?3c{z_(5j?RƏÚ5__w޻KR 6w~ Q 2_?u׿seW`G؄PD-AH*[_߸~<8'~9看l8Wh^y՟cG S h+|#⨄%ȀtLP y< ltZ<ßzK/8efZ{ͷ~8EXE"6!'ӟMPK/rP9R;Rq:ޱJ-AS*:otXP3-\xچ=R ٣8i+5׃86ђA;Fy~RH%  O?.S)] ~,bJ%y؊?諯 G# ֭b?/veWLz"NK'<ȏtDPQGs/iڭ}JQT%W&,qϜ97:r-)9^z@ _|W8SI7~^瞻h͚/:k:Ct=~ᅋQèQc~Y%}`+}D׌tiu#G~ŗ-[n7/Ϙ1^N"Λ,/Z,AH }ࡿoVhҤS8G7|Uk;'=DZĹ@O2 'λc9v̘qC CU>pDs{>P h6G{*DXFR͈D%(T AU؄8![iz¦z }~vīSMX67)Zr%ct4fa>)2##~㍷pݡyHՌ%=hNt `.1"*VbGh.믿hȉN"X1 &rB:vJڊ8qW EIw;'=/(ry߿t\HC͐@ĉE"D D6Q3ڃV!~NlBBQ!DUED -He]g͚;g\wDp;Zj!@P6!jCATN""V)3ZBgDG(-~=q("oqt!x/MET6@m@m)j* Z_~O}SB:@ǍC7?z#6"h^tnKA] o_![}'ĩƃ?oG#<ŋ/NÎp/RNx2*Di:8.;R~mc5`Dž?@^3"H#{A{PUHw)R]cI׿8d@:j>qaNI'Mz~?r'sʔi8- l#ʃ9Ȁ}qo绿].MZGwЅ$K9`,": i^f.+!naM* 'CD8A'ZP:Od7=+];s$\ 沈]zAlR] 1 e$Ԩ'/B}e$-Rq کص6ZU܇S}:Ƭe؜ͦs Q$ad,dzcBvVYU~ "*=JP6)Dc؍6Mezߦ"T- $@/<;©^@ŋ W NZ7*WUԓ1#ye1 3taȳϬ 7n492ڌo*QD>3r] ^.pg杍 \f*<PІYY=b diX<*@I8=Sf.(/>f`2Yl!.+m&{'|rQGz+g>syلuu &k|O>w F+nV0nĈQ?Kt[[Gbӿ{bӓO>}7;s!fΜ_y % Pc{?/ z-[ZoϥKl}}1P3]Am#ƌa> qԀ#z㍷,yv߽v=4PQcC9lr. 2dvzd?oBdI{}<`DT:d@<qIԌlXQ~B׌U֞{N@q ~h<4\J¦cqďŋ/C): km:/O?q]&N<O˾C<˗\rٸq{bw8j&֢1t4!35{V\AÙGNHAm| jP v}9`rmÎ@A;VI%Xya'w#3%(]B*gG`^c(Bp7x7vA @:? c+gdsz pȆl-qA#B{A)K(Tra/8ȃӋM8ȉ:W?Il_xN;yPPśNj?H)8o(]&/uҩ&(G F"pAHD p *&< %v(ƃkƌYMu(6r^xNz.l/^fn3֬Y>G裏| :Ǟ/YjpO?,r: C38/4bauNnʏ;TSϐ9r .K~*$֑ӟܹ6d#9#"QWװ~{g9A~ uׯ7Mhر|?< ^z9!?szxqPǂRmmm}19eaC9_޸q#w{˯D}_ȃ?5xp\{ƹަL9z|W_@gG?:7Zv+vw땦T;|< t]Fc4,Ტy /`9#\#k ^A3f͚ax#<@:vJMM- ׯW# [ѤN8 g`ݺ}nѢ ;p1Ǣٟ}jݺuh%\R8QXaXE .Q8R lŅ; 8)q5;, qBBHB$";nmfuvwٞeHBN:uԩs7ܦ'dEؽK,}7^}u?P҅mk|/,!dvSaH5޽HG^Gq֮]:O?̙s\,ՠnfEnѩSB5mڜ`c(;]ۼyK_I/]3].\>Hz,Y ׮]ٳ7$_^6, ɒuЉ'O9iҔc~g{fVmX &QR-4'*А6Ipf5M#D-QM# !]Y#& 0Lf$Rع;Fo1ZWhay7"G;Vs(c7go_qvDYC@'8-26ڻ{ Y#AEczW&MBjIDATȆhiq`1pETZϕf$~c:>=vڑ0m2fm=@`$ 'ݾK豽8h!Ga i7D"oe˖~5Vpzʔ)6lx/rٲi\gy}wߕ+W}1>} ޼y_~U]UaF\|_<.\_7.Xh>dIɒ7nܼh{<̟Mqzŋ s/ҥ-R*L=hА9s)R˗X&Ɍ6l3fbf6H.CUϜ9'4@B~٥K;tTfmRvF˖UD'O;;0ܹܹSn4iպu?ݾ}7884 ֭; 2LvBEFy="gLU֜?EVuԣV 6mFʔVwSc*kמIC|nzO2De˷mAL4hӦHDH[n[v?_FR.)"rdZMLv:"g)/#AVآl`v)K̞a`cܹ{Ϟ}U޼yѣǸRH"}Ȫb ˨*U_߯Efԓ(jժM)5B5ؓժ@O X;溣Y~Cq3O$[۱3f ?r7V-ba%nRޒ%ˬ[\_Ԝ; [7bQ@"n/l {o$t}*O ⊥gʕg˖_}C.ԩ6lؘD>s"$/֎٫r \fa(q%08p?-Zx5l^{k 4EFK5pr4n-dRl!.UO6i}Gsb;qdX5,Y8 .5dp?.RjՆ[RSnwJrf{.5 Ƙɪa@H\l]/(q&P %+oW ?ye+ω$q`qо;8h 1h m◟7yLi[#Cm~1a1-1>V [̴ra"0 &"N2@ /?&ȤL3Crz}#uBp(3x%Bm FZ?Bhdc=4kAvbLK`d:D r\q0ڸ5HLЖ6qiFT#:zWn!kD䬉U0e0`2s nN:!:;vF@klRkǰO:nM~<0Χ2fZ"C4hx 6Er;r旟D햀8hqḶ0+TH@[~CDŽh{ `+w&K}<LDc{9Уzګ =Dro3[Yʒ-[VD_ |Go߾ڵk7lЧOlٴ'bJlٲmԨ'O> ,̣>!^~388wʕ'CLE*s箧NY?/пͣ~V"ٳ۷싦DR7o>}f.ݎV:6l J9qCtɒwD($;TnӦAfs*.]ACdru36MtUػw?YK{.|TbJ8#,Yy@+WڬUn޼UL9%)¨^'Ə*U9snS]{elժ7a$LMǎߴixcI93ĥҔիڹs7ە%51@2SMq !G֋HyaT&i?|ʶm;֮]'X{b>a!>d }7']CgK#^zeN >!]}c);uBmSHEoٸ,_5CHR('Gc: ʺԙ Zns63C,kǑ6an݀Q\wdH䩖-r˖-L,1E`,Wʚ5߽U{IRٳMIE;c."'_%{ ԳWK˒H@+%5N@[$o ?#m1[Tp}Uc=Z<{xgmc[_~"LMI foDHTP E8hS'VFX5iBxdd|:윬iG”BTTtttlDxthHm*{eR45:2B&Ť rFAc-گ\d-4fcug $ YugM^G@> ؍3K_ S &3&*fq-:e"+8Df' hgwѬ_&G97f;"-@'Y&_|v|Z1/&ݫ_D@G<~TtWdd4bJ@G&~2N>HBڃ?Mt~:t> } hkF@w2QݧoD@gͬbf͚TZȑ#_~r޽{ok?(tb%6mڲtM6߾}O?[5-qY-[={?ϟ-ÿ72d[l9svRe~ui3 3)SOCΜq\SrΜy»eI=#h&?qĞp7uԙ}$Kʗ0(W¶m;{*@v;v"N,q֬c"!sΝ޼y4B&M5k9sO~bJ0u괕WYǏH@TL=utRQ޽{N5FLqXV;wݿڵ/_~&O~O֭)WeLYf,*Q Ɉ֮]Teݺ'–ҬS{iROizd{m=ȧgD:+xg#,x.t6;+H$H; M5HS=ĮAi' 0>?3dyV9a\M`◟p퐨i5D{Yй;z#_Ҿ֖52*`υR( mQQfD4Y;oNLGFGk/[/Z"eF\i .118+6pE*Ew&qC eBTSsD61u >@K$Sr45~[ĮCIqXaX$+' L]ՅVM3 ?TӤQ,6[9oB!ӆyͶ3-osc{cz}3zLm gW:K&x+{.]=z_~)]Թs.\Pti׷w388ƍׯ|˖-{b%6lشpỹr֭͛oS}[ [lF}_~0sy+|A}oݺ/_t2dϞ3Mtݺuy 5bĨO/3f@^ 8ppfi*!L-z1eiE@)FR*'N۷?3…2/aHСq2e%K>˗kמgV;wTnqzw˗MFřZnK)3gkԨ\}CN<%i8ph*\'Oe`Ti*Vg>y! rǏϔIM-ȑoWƌGx]RaB@3{yM%eZI2X?8ɔsik׮{ޑ#0fzw@Ʌ% "K.= p.^$fTc۶LMU<7L޾}Ǔ'OiռyC 02;g6^roW1pYY>Y, ż;v˜`.\t-Y^ld8<3Q;vf^v2aƒ38K"=z;YUSB0/H,EӦͯ_Nu(F !.HW~9dO.%\_d,[E=p6hЈٵkwܹ+ ƍilCY8Q`5kvEr&NjanjfYwHBÑ#GzEݺFQԜ q2lٲ/w܉?q+W?zR(y}ŗTg͚:a3d0.=v?٩S.s.R!/c/XK/R)Sᐻ%E$@믿MDg.B͝;o9 PW_}]9a:֋k$Mњ4i&SβDh{` ZI/`TMBTPm֗+K61>#"Ču䪔mCHwin/_e#2Jٖ Hr5O irUQƔb$B,>c#b `R( h &:Phoq D( ֠KH5",f> ~s?4C@`"0 &N9I6; D@ &3'07pԞ N  _qA5ڡXB>0ܠXHTz'̖ Lf &3!`2s {isG`@w+,:'q)I0{ m {% r#,wSɆTq0\G@LJh-fK@ /&iS)<-o@ի4пHѧOknɓO8ٮrժx9sa\X}|9rJbGcs΋iÆ(Q9_bH|Бŋ?`l*.]2e.< saIT2d*]Νg̘MV4iak1%j[6￟5kh5kq¥)S!pٲYjzISTVc׮]'N[?M 4:},+N);<'Kҝ={~LAs o}tW=>|$_!˄i3Ο@Beu$ ,K*I%hU}vX! ';?~BSs9rtH/bh̙sԐuYf'S:&eYݱc׭iϞ}\w\SuB|UN]֮]G0 o(cǎkA=(&LD֭y 0Qg!zP`a.vt'O̅sS: \#dR2Iς2*e_޽W\Yfɓ[n,7СMF;5_͛в(2~y9&aa-|]/LK6*]V"$Y),xC#FQCvLf-ǍՁF$ر3`HsŊv?w"ґR~X z?#/Vx]ƒY86Y;s!3k͚_eخ@Tq㦔tH=&Vf38S4F5y*$ByZBI؜N%16.6C f$)| _\QM| X3[z}BYϑW8hKPH@;#?!!0 8(O3!5Hg#LSNXaފQptx 4h쳡 FZ#A E%:! QlyY%#Fq(fGk$Y'\"-kxEQ-z_-HzAVfl'㋖F Qdg47tf  G?]+i†Q}CḶ ߥ .]}…KS3'cotFW  6Ϝ95g+V+M4s?k7F\+WxڵJl={.0̓ϙ3O2W~o]%5j֬ݾ}Gf o@v:]:ivԅ^rmԐZQ7n?w|'Oԩ֨Q'O&=49_aԨQ;w_;w(t5zΝRûwO89J3͛8)Aiӎ LZcS)RQ#Gv"xzmH/BP"j,YJ5j,[7̎;w駟~w!ғ 7t谮][ӝ;cX+6n܌֭RO4lXeS1Tj& 3gn41A–@\o߾7lETzM*O/c1K<8p0YaB5hp-|l'В%Kc)$a۷Ϟ}KDxĩA֯5"POԩ3rVRWXonٲRsԪU_ˊڵR*lQuzhъ֮]תU.<]I."Y dG&B LuUɨ˗)R={ϝ;ߥK7j'O>YV \؏3qlQ ^5#wj۶+F}Bl8pw_:8dM?#?l:uɭJ>%8C"dM Զac3 3Ϝ9 $_DeU3cƬ7HF=+J*iСϟt[ 0C]-kQ[5lo{Jlǎ]>Յ /;!~dʔiED™QNdڭ[{IS˹ez5^]ReHˇx ě8DIo<nJ,)0Wf-ݻODجY [0s>Æa@Itt uK15Xz" 8k 9h Շ8,t(_AAaA!aaѱokШ6GalwV0sIB<C5B@v K:t.C@;Ar~M, %5YB mЈ apa N{%80,F lou.K@1@C@`NYbMgV  "QDN@>2:1톃}mEFGEh@9H'&Z:U3FBHG4W9a:A.' 3 g!=`T I"u֡=F9~ q}f9}LzLsW9й2f\HM?W};vرs8fԹK0R+_pw]IYvSm_|[u끒+U?>R.[yy!G@OCF^|M&nݺqѣǥ8nd}ڵ;wSݻ?QWܸqS^ԩ3LϮ] I$U`p}Nqu ɜZI2#e!ʕ1Xfm#!ի`ݺzK V:Uҥ˲(ի7lDb,mڴۻw7بsΧh8?Z?J7n1c֏?ի2If(YeF.݈sTꆥjb@/]((UM QUTUOOFMP&QI>o_~آd-/r5IOm}ԨQKaj5V\}A׮YK Iy-Z$~F+VpƯnlڴ2U~CJfYsٶm;tJ¬,1)c~N8Ŋ ,X&o߾#Ōnݶa+<~apq2YR[>Ѝbj<9/_{7m۶]3xP¸~: Y_~g|̙ƍ[T]"' R#$>`6oB Ȉ˜2ԩG+P"@yEYkvfH/a1s-G}RL9\srrƒM+a$7U"B0җ!{n4F쪔G@+tNC?HaB@X-PKD8y(#bZ[VlwV0s N@E*! #lF?{zh'HTΏIíʷbCs`kb9^B,A XBK 4o%TdP+k8hd q@8?IȾ>A ^WD r56> &3G@tAHR0ʡr9B}:H\Nd@P]V]ᓠHh_9misw `ci6y0f`B5:40,D6,vB3ml[}D6qn h4J7h"Կ#Jō+/qcУ{N h!5[q] ΝY /~̡vG<(C@k0F &Y!:)s?d(EO C@;A{"NdΡ+:8$CAPPO AAAv`@_ B@`P`Ppf,0Rhgb@yL]NC`:#v^1zνs`4Ab]A>?'؅b "8#gb=z=@;~F8q|}_`@f7`o;ࠀ` &B@?9[+俕V쳉EFErЊq6D@+}bh#%uz:}(R(г q"> h1k4$zS=r �.ԁݼ5KL yPq]΅_@H-,D2dB^xyϥӻb @(dO9, B+@pp,E)@p@zQ"(3 L!, k2oR8+FF8#l-ZoWm۶g`uN)(G2E֬FZzKqN",,gFCΙ2ᖮ$AˋHp++%LW{ыC8@@2Y#Kʋ,.sɂ)&@EOF4UKF2\RT1Y +,9FÙ2)c%K`p%2g,̈F£)ȑŕ'IDEۂ T>ךL={}o~H3ٙȟ~C.*J !5,s1N<:6 D'u:tA[Aad |yCh ڃMxY>}d^b!ӆy9Yޟ2hs>)ۏ(QLַez+Ҟy牝'sdQ_F= %P,d2{•(BCi"^s49 M,Ph %(,ŭL-M%b)fȐId`HFI0rf8J2V|AЬY p 1sƕޥٲiZ>de,D^% rGT~dzG&I"xf T/A o'u~F:ZϏG>~a'" o:B#mSejpK@hoiS)<ݵhE@Q&7,}g .s^S:H;-[Y< q?YuRC 9+Ah!,  ,3Nrʓ;w^El X/dǟ#0{!񫺉h $'ye}%@T١22_/3rfFI9'W_ AjD ) z3:[/z,[|Àoo~v~!/G+3Do  h  > apXPPx`PD`Pqo:xK%$,2j =|Kj3QOlwV B}CNDq9aHgq6‰e6&fwp" w5(i&yƱgj9k` f!_L@:)R@*QIc-7 \sx578 X}p!;m58+A_Am#^ TR\Af#£ҌYh&Dg#ņ?ޠtN qTL,EGD3~rЅ6X뤾얉ơWUp0 @5sVb~l0>(MmiҢum7ףC 펀vC@k(s84OuT̅/`.2$鋁/R 1C1MG Pm;x&` ifr|ą_~" TMu3 i Gжhh* -2+| Kddd?-]mY$M$.؄ +e4أD| hČ3]پe:I0/9K.DB4e 9KjAu= Ηd(C@X<:L@kB@Os:ui?` awcb}> LԳD:2dL\[bmh^q[`c攓}q T%i퐨OCݽ`neڇusx9<};?($(44%xh!/A;h hx 舰HC31  ;+G@ƺϊ4.ttTLl4n#"gb hҼx!=xAaT OM@02H#'-j$K449us.¹ A$ҥ MNhI3WqpF$ZYS$/=~rIoR8-E=Dh)8!n%eใ)BhV Ŗ$eɒ}Grp>žڊ+% ` (JH0VsV7=@jLHAL#9|#}AC@~C!W/Aп C__ QҡKtl`TOX/  LԳD:2dL\[hi+4R؅VN<#]'C@OC Nx9UAJH,0eE & Y+)nE e * Ȏ2͛(>O=o$ܹf/_`#{K)*]ee1Ÿ 5,\k$ l rπ.IY2Ňqu) S=g t9hhN(Ϸ/AA[BCB]8萰@k`*thXD5:6$Q@dOv?V,s35&N9I0:lb W@2<& ??Ç~{9<3AAwnWt%X!(|w?YvN@X`C@+وGPt(FnLuL$zۛ($zSD@w6"!z ;=AO7c|i !56mzA4RN>}F2g\bD^6Gɑ|IV(*ʑD= Б Esݿ`C QR̿ے?!_O R _ɂDΡE2ejO E9M<|_(H^ɔ3dSJ.],6, "4%g D^&HdYSNbԐdU)W8L,S< TɚrQ`H@]~ÛNĴF8h; ,%H# ` XBBG!я#b ԳL7C@,0F8FxgN$$ֈ`":C@;A{Mbѿsx98n߼bx<ҭ:2ư@n"#@@;F9Q;fAG?KYT4ErD B:0 ~01x0m*GQvqT3^NQH+ΝDΝtժը]nɒ8$J̞~ (j"uS6 R%J+VY^s6`^ `'O>eџ'\MeaP^)~Ŋ\^T ,.5UkLrP, Hժ[>]?ȸe+Kiϙ[ە\XqC\10o$N: fȔ KbCE3ffsA^hwE{ h`C7koqX_YcC"#Yl{[Y[ma5ۅnv&Y`"pb &-L}u'"nSN< cRel6sl]!MxЧYxOHxR}98q\2e^tᗟs6mZڵg豔7W<ٲi_\&K.]ʕ-j0h*+:u[w`Р!lF)+69ɓlݺ̼vRU}JRԩ' !N}{9ԁ)89Vsw77oڶm{VYJ;v޸qΝNo)Sfvվ}GR2f˖eBbD nzܹ{AFx$8ӍDEI=ٙ{},Sÿ 1/,b)InVQr|h'ZYD@@cךB5:4( A@ZWk`AksxXdLq@#XVk 5!90LԳD:2dL\[xgE&gc┓#L4,p U Ɯ=s$yOf  ־G4;&㜼| HЪ( .r>k7O'uC@{"oތA yJgЎڏf͚#[Y s+VLrSLw^ŊJ.7o3-[~۶sK.Cʔҧϐ5Ν/jQYVc鄬3F! =g ֡7At &a%+T4K.a@ 2>ѤM!Mɔ9fo]q)$7LVF={?cBen&)(qftKԈ o&oѢՁ*+$YIJJ^ CپEe.gB#GL䏱ҸpIS݅}N2͂E8`_'銉D 0LL<LJ!tsG;}ȼ)gf &yBii>2ϔ!G$);2C5xo̐A#d3dTt͛7Ϟ=dɒ5k֬XbΜ9e r;V^Redapފ+AW:*U7o~4t 4AF>}|ƲbJUT+\h  (Qf8,WBΜqHW<ʗ!(]lѢeJWpǏxyiD3べUA2Lr5jDHnŋlҤΝ;GpIS"Fde!Ν޽oWV\FE 8)Rv5j$),T2)( )␗԰zOI%6 lEuصk׀ҧO7oRS/fP()Tl$jT.tu:uɮc{`jǗ]\2 2!YIMK7˦b9/@ +WQfrm1eʴ)S3)g $||WGQ@! ٍ fSaH$=šZJFUɒI P1$ FaC0C/e8$/A2B/9ijj8'Or̘qGmѢp͚;w>R*UٳwܹzTaƍ<`{k.eʔɒ%9r{[l&M:ps E`$/'BCH닭%2BqsWO+jSq?~|ʔ*TZF<d\ܣX2uǡb1&!]8vcǎ?vif/_Uf#I/ MpbGDB&Z}H(I *TުU3UN uC8B2S;fZ6^6-RI|'җV+vX'fWH1-F:48 OpEZ_{d┓ 0Fxg zDDDD.'&(٭҉e6&f0 8(оOa5DBՆʉ>~vI`◟pWT5tODI0P}=_4766bbbm,z@Fiox9<ǟs7C! `qL0s>/%GFFDxg;"#l1Љi10 &~Y!a{z:>h6ΚhDDŽRxdNmŧ#&.;bi2g; ^|01x G>G}Xc'5[VLSo@g΢RC~FWN@޲e˪U~ᇻw^reYC .W_{{{_vDR(ӕ6m5jmٲڵ:s sKWsƤ° i3j:((h_\dm;J>#smڴ۵kn߾{'2Uqѣ Uj/lΜ9ȸ8=&M>{\t&z+W]vݭ[wݻw#GzIoΜ۷AHߎ1 =>iv92zh`,PWWŊvBv`@R W\}@l⇳+(Mt7ܳgߔ) rÇСvΝ{wޣ 0-ZblܸO?ۿСCxf͚C"E*Xg̘9U45ؾ}ݻɤ={դTc7nb8D̅ԐM[XhRotU6|tS >o$5jn!)"a=z1 Ub{mUQFS v?+0cキR*UT˛7?10XD;v좀ػw_bݽƜ>} 6~7f̘/ _!u˗aF?~B ;uBɓڵ;o7n|vabv:Ν\MtL!ĆQ"qiyI Zd1uܸ D^n}Oիܼyˌ3ʫ;v&!C?6lΝ;Zn1c4iҢ$)Z;#d0i=8zݺu{ÆM͚mC\\$ŶaR[ԩrSK`{4iFmeױ~܋uuI>s,{޻w7\Āñcdzv_|%ĝmEl6*__߰0޾}JNڱeo2"ՇM^?_!ʔ)SO8deo5kE,3!w$b@c\/@-^n ,"k6^@ɧO*|29@͆s[zeoW_@:7$/8?Dg!!A0[bCD=}`1qI`dkvtb &-Y4WF,'j6܅VNS;o!+]d;v}kOn߾]f͌WV9,XxذwhȤN˨…._oUNɒG{ \sͮgJSH\\a{7nt޼/QRe˖/iҤ_X+*Uf֬9_' lf=]QF-HD%hp:PF{W\ݥK7RX~_6Hpĩ&O\ wvh֬ڵk x6ltoC'$l޼%K9d0]l78pQ5k^jٳ牐~W&2K,]{?X^j\7n۷?&u~i0~u#_>],ed)ڷxC߮] ͏`j ࿥߲e7L^Z oR_p1faሿcǏϗaOyqH .:y{fݺ6mfnذiw_~UVdsg y2ٻ5' +yڲe޽X/&!1zDmB`.jfcK(Q}Ϟ}͞gkɶQvחB:k HyƌY#Wp14q_s+]Kpo yV:3I$#"t& hCSh-;5 q"35xh^t6s#~o֐( 4dRkLd)֭OÇ՛o&o֬ٹsgǎG5I$"2LiK,v|a)ӧϔ(峼7៹LC"Wsbyu~.ISTF^3fz7[nKL6=h׮ӧ"EMpĈQB@7il߾CeeX<۟IUN>iߦM;:u:5,[AChN8{CNŒL{:uwヤט8vQF3 ݻ?6ÉF˺+W3gα7n}ŗR fK*ӳgov@?JF5fiH޽S -½;wQ+V^k?|psv/u8r({饗k, 1xPz(2+޹sW&D"p9'MB YVZd:C@ MRf_:tV:HT 3΄{/r=z1K}{Oyd..["Z.^rdoilnݺFZD /`Ӧ-/,D@kDN[BAR h?@  P%,0,^H=KO .r"!5Yf:C@' 0=tO8q`O@s;V ,2dHL駟_k^9<&QmhԳ6O$emhN+4!>JwЊf(ᖀ"N#:|~{ hÕt Uڋ&f6SнN8h04><ߔGxhA7ҥKoܸq̙ٳgO6-;vdٳL&]vo߾]TszG=wڵ Qx">@mڵk >|Sg?uwқ)S5k\D𡷷x'@j5m,UT۱cرq $fƍpBF?{O:m ܹW\t2et„IbSNի;sܭ[ ^^c|3yFMW͒E{MF۷o?~xx1cY DH$t TaD%u볂(̌Uؽ{OEe@) :I&yB@˿0N|ڴU\D$$f̙ޫV\X={7U1bT⢣YXcjcI6s;e43g qM! +M8yl 3дis'*a ە 2ifnGRd|2eʡd8[n߾:tz饗T 'tM|ٚ5-ZYtZgn$gV`[$@@_)a@pqoCqNo >ġzt%5%5+O>2+(N,A65 -Ii+LO&4h(0wޝ;wn͚5v:mڴYfM4EM6={6= h9<ǟ}%-LZnᖀ{xg#lD hM@?bhUe^s6 WM {nab=/i*<#=||npΛ1h``ڀ ;əC@2fT\m۶_YdI:5۷Ϝ9SٴiӷlΝ;*U%ӧX@}X6m)],zar9 N*M]^.8s,9s޽7Mt%J׍8i޼eѢű!MVaYb֗ZJ<|{ؿ@"l߾L 49ܸvf`j`!qN)b^b(0d0.yՋ/dRy(-6Ԅ+zy0\&dj8~իc}q(n"6"1t|쳆xތfX-PۣXok}KԃhX!qDC@kPn6' `H= ;1I0 w_apy@NϏnڴW_} xҥK5k*C<;oܸv###Φ{ç9J:! LkѶX.FFP4OG@K-}hç3<,01x O@h'!zw 7s,g 6tΓLoԾSFvQPi #3d۷O6MbŊ[n}&wði߾7K,kyUQ|EMQ&.]#d几hթSW)RLؐ3gɓر+u5k>}|s#3gM8Y<0EV?X%q'8F{͡#h > zj{!a"#`"pb &-Գ9 0qI>~vx`◟pWa5tOr戌\|y&MvkXL_޻wo6m.\cWy9<ǟs$VPvpfZ9t3 _B@GK@#ݬ(#<**9q}}&f6BN= ݣ7ܡf ?=eJzdBedΞ-49rr̝)+`Μ9YdI6m2e7g\`Vnvϛ 45mŊH&]%ۿCN3ڵ̆7Xጜ:uZ ߿_HaF\r-w3g>tHڴqmݷW>8gڴwoӥPdi o@& q2= ;Bm߾Ý;w,XDKEYP'Oڵ_~u܅&MHBwvصo߁=zu~{>|EWX(jHݻwF`\%$b#lvŋ;{\>};v\t3_ϗ]pj 0h WR!4?2jhS |ŗqeܸݺu_j fj!%J\?F7n2$E \l91jW>wC%K| 2;w>pԐEU_1bd׮֮]w5kLI \OpHA\A"Z֭۱d ;rUTr!)wփ<\rURN2u.ݨ4g!۠A={͘1Vu~:u 8oNF`ƺKϞC?"^Ù)Jvԅ+b׮=Lqol369c3X ~Ӧl3"7>}k7o-[X*=l`ܦLzH/[*̽NsΟ5kK& Sހ^h  q vm.ZqPtgۃ $Zm"&DßN@fS8Y!8\4q&I NKhM~ HgPN*L Da5tODcrR^zuNBCC'O\xC%A Ç Ooo﫷HWeK)y}12E&9K,ӉXУ$bxr֭~`zY,ペ3 ES g<@ l_<AKri?F3"Hi`8\c dQQ)!K  Fep+c1-]6]b,J1z pYu" {@撤h 0=)6zG+pl0^hZ]b/!L2^ .GH{9i ™LSL=a¤\/ܨD"DF4EW\hp(Ib(XBW9%WnA%t1KSMdC cLtID@Ć,MH^Nr o(KJ1Fĉ0J'rkWf袉4i}ǟ~wQb @dQf[.$,%ME9ă(@'8XirO@ TAk h?NaE?}蠞=N$L$H('& D`5>>bĉ7^tiJ#B]evzsxmҌ;Tf F@;ޅt6"2*V8h| 記G>8h6"i{28/rng`&LS#n =ூi*A>mT)LuF@gɞU;m :*j#^C4 w4P2diJM4qA 0n`#̈yF̼KW޼U1w+Wo4Q93M&e0F%ШD8KPHJz+)Y_M'~(#蕤$fe QB@KR"E*,śMP2()SDʉ T^ LCSґȲ1MsN>hFhJdԓ8Mu@} mEhJb#ce]2/>9WT]]J'~d,AS tp\Q1Æ!8=rVIш1Me:dIjjJ<2D<8D#rfE/ 7KR = ҧ أ'41cEzHHL'r]{GJ2 >%0v ] b,sƏKz ,E#H0 [ BR h'ڿס~@c>~![c=:Q0#Tg A&~0 7C@ԩS}]iDFF_Q~={A@+24INnݺ5yd7o>eʔ """֬Y# xRQZjb!cɗr;}0|Æ #G?{.=z(}bIA0FD(=1e @@iD! @oLDED*:eg>;FRupNK LPAh[469fD!6{O4 L0ue:5a8h8K%$Mt#Gz-XHb^3TIMd߄4ы0P. Z-ࠁ ``Lt V a~~a~!aQ6k`caaw1=:Q0#Tg3;/Lan8pz5Ă/8;}3fx ~8$$dÆ C8G߂0% 8qb h޽߷ofqU(ze>>>w޽yf@@+Wnݺٳ׮]#B3J9߻wŋ< NիɅ p ,AAA3;###銊}635kΝ7֭=|! Opp`C #/qs&_4t\"UFnj9GAv4Jnb !DAރvfY,JiBc#\'V o=8{p{55xh0mBF@7v-P!g *6`SuD¥\ hy asyJy>?Z&"DNv2T BmpF)⃦؋bJ%i"clBL ̈T~GA0Y񏽸E x$Z@ӋK2g)Riu l$M,iX9Kx(j\'d:Y#"a)MQ&gzш8ĀE< 6P 0P?Y6.؈sj:Bdqh0`rYa#+HK c1PI/2iĿ9`Tt!0JDI9PXDYz hDT\L-̋+ ӥ2̎+z!6D&rJѻ2 A6h8zI*}43 $*#z42d 3҅8bؠ=~EXF+,(e-p.a#%KISfɓ'Je#%Hx%62 %JM49KD&JmAD _|L@ \߃׉n6@c  DEBb׾ ݰX퀇NL$H('& D ?w{"I_p:""b`+B 5vXaE/Iӵk׶mJ3,,ĉ ={v޼y[j%]s̩VZzzեKݻݻGeʔ:u 6lXz?xl7:$$AAA3fO]Fsڴiŋӧχ~بQ*U1B7oΝhRxx&N;v\bq֪UkРAnݢkov…߹sM6{'O,YsժUJ2dG}DT+WF(ڲeСCǍ7B9pb"`u:߀{YD+9(ۣhf7?PP ]_m~"4M=ŏ  z_&Txj Њ=t[t hyw<}vz_98h9"y匎ێI.R E%b& '"ːH,@<3J aC1g1SEYbsdZ#4Md83D1]AyXJH@P򥩖1P%fo㊬b h YE#~Pp" 2hE3eo*BRqK+-c!5慁l-3 A 2DB2^W@/ыF .X+Q+)ěI2Q2J< gp'].p"hdvRMfo2d$BSE@fAʳ$(@Vs^,QQ"stQj 1^@SVP gZ%bYVFEC*GoTr EKd8K0@YJ/qp&f)Mu zELc^m~&;'DIÇ!~}qρ}"bF= {C@+xDD"? rRa.{'4qk⋟;L=q$ER8}tV~gipPGV^-O~+Zw};M7m+V(Y?rРANŋׯو /^xܿW^[Vݻ3_/RT?\zUÆ kٲ?m۶UZuժUtСC ,faÆ={uV ^rرjժ 1ظqcʕ{d Q1]?W_}E˗qd6WP9<ǿH vY#I m]?{:RޅzN@,x:1bT48(/~::Ts}~Pe0mBJ@3gL`$o@O?I'zKcx&/2gz"MȪu Y-!,.Lq,o>JA'Y)_j(c3 CΝc C3M3 .\!x&$ٳkeA d:*ġa"cś?SKp6(K3]+A dF<Il4M%`)jK 3JCm)EA (ѳ p'68)WH 2i$5n񀒳ۼ8Ӕ.$*LBiWg} Řeez#Něhh"(%C<hOMăȜ^|"Koē2kYct(Rs6ALL!⇳@XYqdM˚MڌĆ]( +ECHp(!RH吤0fȡ []أ?2\ nvB#(N8%f;>0nͯ-@a I{Ib)P*8С:'-2a<too:cC}Câc<}h=x> {m`=N L$H('&B_~"L pΏ&4h0'×.]ڽ{?î26- Z?֮]۱cGAsH:Oȑ#K*զM+W?4dȐ-["[,QF5hj"7o\z|:u`)'No%={ӗ.] !~C??}S[nnȢ\^FE!sSNݺuC&//իGcbb>裊+޼y޽{:tqܹuΛ7ԩSUT3gtݽ{sν{F&}hB._Lː7nڵkϞ=( 6}#a<GD;httVO@ʳfO%Տ FD K<+2)g~'4e+c8#DңTg6tTYV ă.JkJHA OYb@#fI]oς8%0E+Eh4EpT0YaH2 n9w9͞N grs )bRŀb 3)S-Β8RZ_>tپ!Z0k{}Fm.F C0K% 3HhDc4)JɅ4 Ag"c]h_0WZ{[]g`$tW! ?,7"D<挬(HgPN*LÅ vD vM|si'!:` N@K<SL-Z֏>m۶cǎ㏿Eׯv-Z8wGEE\QқȃCCCef۷o_r儷 0`@VP6lS=z,^XS7Vɓ'+T_ ܸq͛of y]vb)Mi>|8d!8rHɒ%H' "bBKUV.]̙3ر$"~ jϐ/S@򱑇v֭K.uj.~>Xb˖-=% 9eG`@Эw}CBpA Ps1m' Lz#"#b оZ  m'r6ʎHhIm@DtLxgI l1FT C4:*)WD$Ut8jq65suF{"LaLPDXc;͵ -Zhֶ_n;w\{  s0=HW:KVHb5jԪ[^JU'[P45h޼ej5-;<-[T2B2` q Au94B.d+eN_gȐIe39W<*Ff\!J G0x ΍8@? C47Bz@l_Qnj$o@?  o J3\>a:A81 ,0ID~8O_~"L !3gႣ>>[n^^^K.4hqk׮=x@֬YӺukl6At<|pOcE>,]w:th.]P._\uϞ=['NTvR 8P̓ޠAԏ޾}shK.5nxܸqw09$$d+VĆ&SO o,=݅#G@4 t왳d+Yʕ\:uf AGif_/_z?_?̙)R짟~YܹJ@B[n)4<ꛐ3gn԰PB,gCYE`ȩhF&`jQʨs <7sd#|\OcCS4pe @m F@4M` D= z}Y#y! ,0ID~P /?x hαHKYf&<<|ժUZZn]$QILÇ{ڵeu^矛7o?lSN5iҤbŊn"cǎURw]d7۶m+VX߾}}}}qxĉ~{ɁM~x˖-+PTJҥ˗/qƛ7o2\rk^r%QFZڲeޞq3t̙+WQI!C`l2IDQVDد_#F޽[=v _E;w\ Ý:uڵ+ce˖e,E#1ݻ'NZ*AעܹUVҊ+z1x`v9<ǿxx|zp2h0%hǏ&L@8}CKQr$L4">#m6B - cd^LxoyB= C4e੊5pn#,C"3e\XϞ=7w<ɓoٽzyڴ'>|ÆM-PЖ--z|pqhx6B^RfBEjժS~C.gL*EQ&Sx+)Rf ԩSln \*K.XT`OÅԖxp~ǂ>PJ%`G!>bO}B}TZ8Ш؀G~Q#bG 5ͮ0 hKT@bN&Y;+X!0j8!'4wdъ^zׯ߾}Qz{{{yy-YDlz02f ӧOknÆ 4ܹӫW/y [EI'i[sХԁ3J1)2Dd9xVT?B(q1& gn}Cҋ́,W{J/!OC@LJH>vgY=-5O>~0:il[zEmገ+[` ϑ^hyfgr;t`}4N@r"3TD'N1 < xȟ>}#Gyn7 ,bF_P7/\.2Eۼy̙ϵ3dk|۷9snʔijl~o=uԩ 2.]v˖m:t?J#JX7|{w={i3O^&^p֭]XV_#5Kk@px`xl p[!E@!0R ;+xg˜<&YB 'D!Cq0FZS59l6ƍ;vتU&M,]e``ĉ?IҁgzEc%+V")S 8PꐱJPr1gD6ѻC)ƌ#?ٔ:PJIMDJ@ ƁZ(h9E_p$@@8h;Ѭ @X`ugVPFr)o%3l71ή0ͮE}e5j:t7nj{BEm۱pỹrI6=N6l4oނ>|OJN]ʖ-?iҔv=U4t}ŗ/_رsUN~;2>r?ؽ{*Uɓc:Rn%J 6ҥ K,j)RؠAC=ޢE+M`&;< -]Ƙ>|8jԨ3g?~С|/L'q"&/9s^z֭qw٫W@rr"š҅"2t+7iQr`ITM6X"!IYh Y>F֧á2㠉Rd'aaa2x_v!Գ0I$#"84ZF5&ل[xlLtT4n"#vA#L\ ^!Zϊ7L@4ulŋ{V13f\F@O0 (DFF:uzH7nܺv(P…nڴfl92dTX͛.\nt%84sl4z-os(Qf͚%Koܸ>atw},XXftGÏ֭_b֭ϗ%KNzE'͛_^3d&j<xŜ 톃a``x5:$D0 h}6& hЁ@~2L$H('&YB 'D!Ckxu,cƌi֬٠AzgI;&Ͷcǎ=z^^^۶mŽ"3 C"#M,2fjj kժUJI&D:5gѳjrHUM5_Cz9V޴J.xtLlM& *eEZ A{}ϻ A:Qd"סۈ=Gw;gIL?tы%jG,5kæC.2uޠsk=pAfv#F̙Gsr\L:O֮]t鲅 A-[ -u ȑ+] ݼyk?B0+Wѣnj4i!H׉J`2d}yMd;w^=cvl#}%Jr媷W/]|ڍ?!~_P??oP__΁Q}\čEBq!@܅+Ip HAfmfgVx_]H}UN:]]{矦'J feƪ&YJaRSW,VJ)3Q҃R(8)_ MwVh*s\Н І# M>.Ұw kM_]ֿkO@v_{ qK,׭[n+2?IT$cO ~RSLݠA *]xawyO~v7nܤjתUޤI_7ߦb_uOg "[lykzFή\_G+'N\RfZ /ի׀Ӷm}݆{otl+?{>_|P U_xMhcΗ\r)C3UW]oM#aݺ?aDccFn 6666'9%+@Uq̝z̕Aj'5ɛIw2@@aW`}tA0MP(hq`mZo]½rO@cO~0ZicDu'$񀳑S6fɗ9iКrgc@[lnԀ+rdӳ޸tASn<]c-# V :w)@kԬU̳ժ;{],^|c{ݻ^ |-[%o޼U Fge^#GrG˯n߾KkD AtdΘ1p;jԘ^zvwCZpǍ_ޱcGǎԩ͚˯oiZuB1B¸{Ck~i"槟~vo'L4t{矷Og˖~wYY3gή\*Ad/lllll{krK\m<֠6sg8}i@_Ao!S} IAy톨ϩjж] 7FS.JG.2v\Lbt||Ѻ[hc?&@{\~MehAdְnVԻ5q D Ё\ڑV}9_/=peF Бق-@tG8A 9|ܑI%{hOYV މ e]&wsw2oЉxFM3YAE|݆__=zL6_=s^N=h>}~{+>jժCE #g Mg}~8,qo6Ƨ!$bsϽ0ute5kSn; vZfȑ#n[^ٸq;ׄ & >}{V&/gW%CX :51= ])I dH,S}//D}h[P RhʅBEFSI./Zw }B~2oް?hP:7 >_T_5 ʜX1do~)0 wo{e[Py9tS1|QyhmOYM WeT5k:5k׭[>|V$zHRCNzTąt IwR^yS/U/@P®RtpEV- h ՠݐғɮT/՛7}>:4}ge h+Akb c4Bt")$FM_[>>g29&c)m =66'>"W\o<=p،a`-缂*@[5&-gM?[9aa'sh}fg(|ZbC^OMJUhYvuEq#PiJqU(p ?c1 ++|&!2+JбAFIJR DوC~accccs`S_As''i[8'';Tw şJ0ECެ#޿]Ya c4Bt")$FM_[>a>)e "=??"@KHq\NohEtnSiqh3L :#}L )I4ey9P􍃦X18u)[bX~xK.'zτL\ q4[8f3L5|9xuEGHƂxjX@.Q<({ R&sJ8SYv=*#U=*)!9bPJ /cIA:IJx5@+G1'Y9Cc/u:ٓII| :ɕqcDχ"@$ͧ-(] 7FS.JG.2\Lbt||Ѻ[,ec)'m(m"RC|xSsC}]8 3Ee!o-$%M6c#-;IgK4ТAO@OYxϤpyw2 s0om<}h"=zhs؜;s!))XRZJJDGy݁$OX +!aoAw xGct"Ф䢡 MwVh:r)lbf)8\A95\RwVhZs\49MJ.,\d45(X)%Z/.qEDEӋKm<mBӗ}H#lOXOQu"eb֬T?X~ OZsÉ )lln]\hmǦ7r@ C%Grlv}|.i5JEOL!a@0KCs4˺!h`<1 z3,wf/4/q*%#ݣ׏qO0dFY4vgɖh yhƒ K-xC} І=l|?d:j#?'G-`Rhc)QwejcRR h;>msU6^,MŗOC!amcSPE(oM'syUVА}FgEާQTe66666'(-@''%''KOM󥺃i liж](l:o4hra" ay{5Z}Ol}J&nq _?xHh#y ЂQ{o\l YJ` ŢtĜ7 :M}Vc?3hkYϚgc7D),B!wFM$]N[&@3qϪYF'ΨYsmlllllsJ[NI$&:SR<ǒP7+-:jE}` yEF ^-@m< Bӗ%GMΆ,<)i` cO?1v{Yhl&Nv`_ h}й> QZs\hO)Gp>Xe+V8M}6eEaABfZgc7D),NyȌ4lѷtw }dmL]X:'/\:e7iǻo}τ9N;[S`zQ_6_JuLGd_Qo٨њEEqRm:4Ajtц 4}9_½"O@$&2?؟gZGSWplsh:3@3~]13 m&B w?2cSƒntID6smoUY AUVR3OYXbzJ'+Jd8BYaOhY -@獦#MP.,{=]D@M_Ηp/Sv2䤴ciP( /^NRL9,}|)43f̊Vll fANwWDw0E 3 )΄iT`Y} "=4,(?Z}1`0C BqhA SfMAn E3l±n:z%VZi"@-@dϱdÛL f%2ǟcyְBa yEF ^-@m<=Bӗ%[8R8w].vml۶e_o?2 um?Fle9XmT_D嗸`k [-:bfrFN}<߼6Fm" W8,s{, ,\-y#]DN)Ԃ#9ƍcIy(~i c_wg7gC AFkMG.2-j й ʅETc6\cv5qWIGLؿ`~=aO`ٻ{Ϟ]{~`=;`ھM(uǞ_9n߻s솝6+{Lr 4{ˮlߦD7SDV8f/ц+n~eܯ/%lɶeQa)j5Q,0Ysa]淝{] ro9xp$&9i'4Ǽh/@0hѠO.mkІКK6& eds @gfdP0@  4fllh7X-Fhwvc Юqn:+"@?Gg&C) 4P'νo<[˥ `&%ZMuG?sugE7+$yԝl ɉ ; \AÕEwNJDuLueRA,X9JOT<¢EF 5QFXAAӋKmX}9?.?^S7A''9%&M>rCp`G20\9tA+8(} a/?g/{ރڷ=G"P>w}(spC{v޻Gqsh1SupoP#h9>`Sܰt1س;>w"{wŽ6b-2[_V3]FTNbhXwrGN7naSl,-acv1oρ}{{ טs,; R>!GLH8t,!%%P]nQs;hh֚93}ϟHt{@Og]' ʅ% tR23 )97#F|!_(Е0n 9t6ߕIMLc`#n:y0lސQtwEG'[0|b__s'UVJǿy*Ώ!@pL9Ci`@V Ц|̗ EН"sXG6ed_ &= ʜ\X4hrb"B8JqP*8pq*/F+y:uEN:v,1'_ &r|L# &K=z$!ac%=x#>Ç G'Cp`G;J>O.RX O0p ^i5, 8p`b\ Խh~CHFh=Onha(qVUricĨv0ȡD+Ƃ?jyıIvNQ wPJDMVVc!?K ʅ%,@g0 4hi͠mlrC),Pԣ福N4|a 7xo2[=}]^X(P~`|\IYthJE}N d4BӔ 5QU%6\\U\.F 2h#- 5%/(i?#]pi8iHOsRGzJAr™8HLIMLIIH2HLINLKNt@1!5)1-)q쨐j@e|&HpǣіiIԄL!prai#euCb)9xC kVr=kxQx0r#<GG %MM8lF4ss RTZKYL kX<,f9M9}m䰒7L]iOy#?CnFA7oh:Ah\4MP(:_ Z~lP!#xz|n!Y[Pd7!7g>W_)@h%gZt+Y#R}}Y-@岪JY0QjUVR]C`VR 3yěuȣKŸ#m*:şe ` MS.\LDG)Ƣ%6\\/E`jVz+^ǫp ]^H:)i4WJ*9StG+5 -Ք8M ؤsZ wL2\EY`Ӆhv@tx:9Rd>_DOwDtqOz;=r\T3Jr\hBX3Q`Lhyd:L>HK‘u${"x)"jQ8RwaF\RřXA˛9$(.̓۸(3Z:U5V5țs) DžEnYL ..'>oϟnE\=DZb $-bQl!Zk,>[pj К#&LMSZ+@  -@vS( (@w>[oG 1xĜ `ĸœfܓ#@?1{Hf J y&]4B[9(_%ecP?ݐwiO#=uԓe#EA"kЉn]JVOC Mzl:7494Ah:r4B)D`M/.q!cG..8/־"+N P׉<-x<`vy`UL.\c1cSZsð?HOR¸S MV>$W?.1qu-H]&/ {\s`-˩W>ޜg-@+(X]ܢU9|鬓mC` h`o c5E8)66cBQpkQ72p#WpmV'f/zde362GX:ig?0i[گఱ֔0>+Њ*Ut?y cޔ$ÓJ f'2 Y< EWpMzl:7494Ah:r4B)D`M/.qdX¥M/.qD| s9|X %s"FCB(G1UVǓd<.o(Owy^@ #AlQi^ rnrsXDԈFl'-7T(myCaW{Zdsh(_B61`0d kMp^'1P0:Y0, tV A]\rfcwE);wu͓r!󇏻m}sn{t"P01sAhC %GUfC_V!VVjrqHM7[NsUVY|1fqt8Jz49.7 ͼD4B)A rA|Ѻw{WӗE\}($ ]=3Qs z}!A@tӓpCc r^t:@xk2j50ksUrj:}r%iHA8#*ă8Otg\rS - ,<`E UY-?q8S9jr0ȩF t;3NJÖ qi-.3cXL~QĘ:a>Ǣ>@ΦmAzS%iUX68"򫆦}VW1)Ln1ߒ  e\G'#O@g0G$ެe=@ChPBUzVPۑJsg:ىC.= '!rsbz Ѣ>)@>mMqg|1f[xhrhd|1dP+T_ DaVr:V\b!۫4K!.JtSyTʝwk`t1X"GƓR7Y\ 5" :1z勓m<'h{B3ȧYjgfDGW'n2+sv||ٗnW?済X7ʲ*"W|8g1Fw" `44Йaml9[`zCG.0QK&L*@[5 5k Ί V4Y8JN;Yi@a/3t'V)[⬡ϠbͶ]:ta|Ѻ_[.m)=U.!J[)ec#F;.?+B7m!h\|^4ha*(i%NEX̢-~YdMbD L)43f"1XhOk 5e%X[ֆMqG{]\ZX܈XD6s6QbYAd_JNWD4hCM.j%@>Y` 66 u_hd=Y>>z&Z;tyS 6da~Q25J]̳^㬚gYYkժC^fmujcccccsb0+y g ߓyh)IcdӛJ e d5hQM=:ś ͟!@%7b@S544}9_ m:/ZXk5aKtE+^\XNJGp\R@oBL .ODvnuximʎ擳CݳJ1*B%eAUM.}y!&9ɱv=~̂%A`cZX=56n尽KՠX4it8 3>kM׍<m?(榝 VH۬ q\]@Vl597s< :h|#F&A#Q-@؀m:p8ԡȾ7My!#g } zJ.O@+ (@,9-kա\f:uծ](666666'"VJD4h1wZz(͛f'دQ@h'4hUPh>/!4-@*.{\Xc+^\D+/U^TڄAz50Vryn/̷s^s-΀wOꊧ3գeA},lJ/%tr[D@hn\L/)@~wZt;qDO-ՏU6BĒȑ=9 efWVC֘$Fc-S+y4 ʠ xEh b~FXV.MG*@ҍB!hy|:%@3' p_C`o}^-Vc 66Vي.@eBq]qҍ'1mߪygլYE6תUnFM oT򥝂C!Z֨JUVRIՀT TYZթz NUAԨT(XQJ+HVUPS)HՆ2Z=I R7AX!Tj^yHwk!7;GcR185W} O5x#ZZդU:UrT6ԨjT@ s$Ԁ%VKi\V[3j&HnLMRAelXOie)~TrTT](KZsCJA^Zw ҪT/)XQě4IY*U|[Yr[MY Y!GNA'yެ4vJ0;y(C'֗c5z:y*@[⬡ϠbͶm Af: 8ʋ`Wbqi`+Qq 2|O'Sv6Dc@(0dx}oדe#zOϝ ~ßnYX=*+UҼq9kD45h=Xp.(VU#z3DsBE֜(WXzb&z 'A5Y+(`:44b]Nhg|Z݆p}CkZs `󺽖'FaO11ٯ8gg~l eMn1{gL{hnA#=lnjOi2CSg-9U5ΪY 5]L+s\N=o5kP"5W,S|ŊU*WʩSR(kUeeQƕS8"f*<%sJ b ]W?C{5xUJQRJBԈ }L*b:Jz]juiz&ʸj,Wyţ ز3tx|sfetNUGF iׂV9yAY^kZܘjfP5/5Ђ">Q=} Ȼ ǖuoy+8z2ϱoN'-1RNӾssC+US.Ģ\Gg2^m#[Vțdن/(;MzH{0߀)>f1d̤KF~&\|%;v֭w|'|ɧ7ڵʗ|ў(SIN:٫G^]֞z1拽H=_+Bz9(c@uSDVrP]ăH ]d,z=e) 8UtWG6@f+WŕX7Z(~2}۶mw2xSQf8:X TE-P&Hn\ʸH=G2'8a8SI@ M^zIA >iJjR+,Ϋh ҋrJ&R,H'U O73!dH_ڴo%]T fW]uM^}zɵԩ)O R)M4mӦ-GD 4b]C:J͋d@N1?=Zq*X Œҳg}s]rɥ͚4jtvvQIp:uW^yuMFrdhH(81H!3` 2/L^zZ62 MիhР_֭[wIf2k'R)aHxT dPI̋&F'[aL,5@A(X $r'[e H rKrH8W#6.ҋ2]$HbTdi"iX2:N(POl,CEʼns}))V/{IwOՠMڝILpqH 2RGþC8x2|YJbְxt^_K\XD8(` /5aKhU^ťu, V8!C~miŌ6oO>o=|p4ѷZrΝ;>ӎ;cO+1/̈J٠!(|.`̩0t[nHY"Tj֬ӦIm)4"H_2KR⁾4E%~[:*R)G [ 4.9xdD(f6@a.Ԉs$JX2#bV2(ejbKA R~ŌA!CtXXƓHe%2{2y2ox2,-@B]X"1G)kzqlXc+J).%bDi+u, Vx . `hC@!.65|#3ݞG{ƏN#Q3pm k#XD}Qu4"⟲6SQh}VnE6(&/|h!^;°ZQ&X(Ԕ-oYR7ueeV[U(-m -@VB?Skek>[tgE{?J>w>=w͜ΘLl܇~pLOd!@W W5hzN+V.[e˖=z⋯Vso5^ K _כ6mٲeju<n۶PEreAjN9崊+SST{F^P^)T1PXR(Sneb@wmze&"8a2SX҄s LFt! 4IG,i@Gq$M:HL^zڵ_̝; |b,f8WC2 2/NB+˯ehz,3HLH`$e˖L$AH 0/ \0& 3lذO>E+]z:G$XBD5#cϤDL+P/y -AR$KrJn13fϿAk6l|>|'*bA_YrQ*T0rKzNoonԨ1VF."$b\ꫯ}\M0DBwH_%5r髂X&Np5}7}/K{%zР!D8xPrih0`>?S9H>B2#<|.B&QO+Νq+w?o h_8s.}I҅ /o_9)o -WFgsY%rB=NKډo@W6=OO>,?}$pwu=dLzX6xLjS1ޤ̚#6qyF#SSR ި甎ŠtRZIG\dґ4q ^BME)``1ec/P3w@LZӠcGӝ)̔Av{2L:җcxt^_K\XD8(aj 5R"z8]rU,. cYPqB(!4nj`L xkP.,[ A/z_,t\NURgj NYcniaV_DՉ Q/XGO6Sreb %+@k5RP^ahy*:Vz4qK< Ӕ/@/zi,@S k 66UtRbKzf'f/M^6}nAf4ÏZ 5{n/_Ww/^Mgs_ Sv9?8xPlUq%\e`ᅭ;wڭ[;7iotfRY|:^}^?_Iq&8ČcvޥK+s)E޽gniŒ)ZFVuԥWW\q.@ٳeoljh"*iӶknCw&‘C^}[Rf^VR W={n El ԠA/esŸ^]ּyKNeʴыHY2/%{Ȉ\uW0?_3k']=zаac\kF'\,:\}#\>.5\Gb):ڹj$^dTlLɲ64q)eF Dž$;wR"BpzCyQA!#Klb^0H2Xضm;5|F/ Lz:DH^\qA)'/EV^:rJe3UVrD*Y(BJɔ+T/$4[CKBaY2k%<%S%SO=}Ԩ16l۷8wiɒ ?9yA_}~Ȑa/S7Edj [oMe|y<݇u\H,tǀR.ogĹl٣C##0jrQ;Z +<_~/CŦ Č=1`@ M5@z/z @rE"X[t\ccx.]3(pqd,qy3DC^VCX 5zf(v *i hЋ5C '?KN6$NVΥ^X^.8`H `h|ď+"E/en+a}f8Ӕ&/w}׮={_|ilW| KnNk;v˯~w>}&a0%\kol۶??m{?a2֕W^ˉ[z' .LY|wݻ˖.&B$̥s}ȑ_~>/\8D!pH  #LJdD"6${ٿwR"_|ɺu_zbmۭYBO>l6"4rx=㍀XwyǞ*Ϟ=XAC~}LnՔ溕+?پ}nڴe7,WC=ϧھ}K/O?lьp߾$s„IAW_}-7x\cB,ѦM۷~'%%e\D,ڷok]WyrM Dȑ됴sJСY]7>:u:|ŗ>S,׫wk|g}_2]n.\ &C7 )LƚrQg S\ЛoN2_C,DXx^}5Y.o-3p`VD1M7 e_ $#799yl:u:tj,7x3٬Y 6 oݴi~GYy*#hs+1) 䣮4'3՟:<<:3hĬa 0r(*(9J8(EXӋK5` [ťApbƪkzqcBt| 0CǢ30LCdx}oǓmn'eТD@Ǘݩ~WZJOpojjUxUg4Ǫ%rf ?ޘ'qs<D-XRϜ K3vMUS5|hr,Htwi"bQNU~46 5^eAmƤo;+JE :V~h,<˗/40^#а|Qg뚯¸⊫OOQѣWZ<W}\߻w7|{ӬBJ-Z+C=N=>|O/mܸɨQc;|RڦV+WGl+UVcߨ?/Icƌ۱qn! ?3?K/l۳go>^x6\tQ=z,ϸL'zW?B̦L{믿0hb[ةSK.{'ysf-ڮe5mڌmv :j2ʢX\b֭/ްa#a .IpР!4]vYk?!9ev[s7o+o.5O4嫯w q B|Gdcm۶[챃O>\ 41_f}y xQZ:d^ż.\D8rÇܳg/wgyЋ}͛r~uu˗ȑz`zpp(?XV:V^Eر•>Gϙ32C ԷpI5 3ZbEuҍS ifu1G"B2{ۺG(\t5W3~'kHlrYI _!IJ%aPo%#c+Ba:u{>SOq۷rOdU?kiq ~& #0ȩ'Tn \s]/ A "drnaF9I~O>T*S܀= Xrݺ/ip a{! 4"t_<]82B ,~O?F.y` .nMĊ"KG+vJpOnVBb+G+Y~e#T9$و w߬Ys(K$DRXL %Yly;qp?ynx-o?`9NHT߾cYQïjث@6ާ8q2!Vy,Hz36aI9dm 2'|Ƭ).'Gos?z4;閭{]|^¸ywNX a%~zYqnȪڵ;׋-&ƝXg%B./'䐍 *;yy|13jؘoနDO1w;#՛Hgft }ٗe ЅN \XD8(aM/.q@-@klBӋKrIV-*ֱ,DA'E&ܰmB 0 oeOF2=1vop~gBP3&a%TCZ}.V.41##WaZ [(mוZ[4%!@Ku,e)MϜ#@[lL >(bP!ZNPIŠ?rE'e>JSe?mcΊ"ЃG>fEhLx世͛֨Yz//ZV/ ۷kמݻR7oA*4hwT58|ȢEKZz&M?{OD-Z\]wiz н{wtХkr)=SQ8ҥ4hon)S}z_tQ~#+|3herrʶm;nffdʿAKD<Ԯ]7Z|y28%xf{l?~О={e⬱믿9!ø gF$] WYD\qժE\M3voڴ[חd^,N>Z)I"Zz{wr,dzݐIpiA!C]Ə:WE:N(2"EDRF8Tju?L "< Бx}UfZh,}BrǞ/1c?o;v|gbjQ"@{xWG\K/\TZZ6"P͢S.`nO8/ƀpcǯ۶]?EKDh۶/5onJOY{ qJ%㪫y7~w:t8%%A6m9r46*Ua"k֬2wQ>Bc u= !!^Vʗx%~bfXܹW_}_|￿|?ʇ[ \K~0v- +YmUgϞ˩YϿ駟ri0iÑ~!3߸_͐!Ø[NY6ʩRZ^22ѽaƤo4hs#׮%es"̙~\sDrX6&LbїpRSLce(Eh=ŠS(#v>}?I&)Szuz#?"]ϋƔ۷0UJCrr?HTXTc{<9ovgN:4!:鎐 (rjUc=ԘP=i~9MXNE⣹y Nb=D/E*cOYlHkaw=]4ey [68´EJFbӈx4QW9]?3e4o9[c>|q?XX )@ ̷ʫO@(Dx^|yB̠B866W4YQ`zH#z0Mn:{,1q hMQ +8}M_}mvUV15[.umw7m2f8t6f*?o>}f˖@:kwGQa`jj< JC=BYy?!ђCNIܹ`["LqNk,DةS,yUׯ˗sxr{773g.[f|^ہT3.Ѳ؈MBrp5c,fTF1bϿ%,9Z^{+jlyĉ2ǷzY]בkzTK/'dUbE!?Ç$,Er9Ͱ' #H0,ɛxJBd„I8\5D2dؿFoy !aFC*@\7|?`⟁¸8a8dPNsIKAW#DHwZ߾oe"V̂2‹+W~LT,3jB{L>SO;,ϐVg^xiŊ4 HH.7nf41q6[Cّ fdu_3ƌCb8 h}뭷yT¿; k.dSAw(Lۍݻ䔾xc6m^dSeP,ȽeˏrlOdvWtΜy+W~MM$dW@٩F׮YlH*/2#JYF'8X% Qɍb7c t9$o<Û7o{H w^xO ;i W|17!a9vѣ|J_`F'LgG"@{rTf+}Zӝ[61°C.."@p4N-#@ӋKsX5M/.qcY(D McQ"gY/zlFӝE]4hQE6^1mmnІ"Xb=sƣpfٷUW]SÕQ5jy{ソvU7Ơa/oҤiJUp/۱޺uq(Ыmv;v`Q`UӅڴi{oy9ͦO~4ly_˯֫נbw%0̅W\q+/صkϜ9qVk# yS_OU1upӦ-2_~}\֭/?v]ƛj{ݺ& /l7߽ 4b,ظq8>tMtWD8B&.]]vY{\rݺ/?90HˆDy7oaDwԅ[Sfh XʝH޽Un *1ʻGcP 1Н`I_aǟq'."2/z!]t!u\2*i}뭷|-J=1őy3bh;%4]˞ Ӯ]SfKUNz/y*Bb3\iǟdElS_:=(\/d ! 2 c\_ 6$BNq~uæn&&5kʃ @’MDQ&D8iF9|gطI_#G~5xC`1f/'7px쳦,MwVhBךb &F]rhEƩE- QZXE%->V*ֱ,D,$ZwXI%)G4>!Cd{={\,3;==+ NGБn4w:4B}D --nF&. J2Α=l%ފk߿ݐYY,ٸbgEs_|S3%A'mlM(g2tN',@g/yrέVZX6}3A\̳ i#_rŊ'Nt]l۶{4ԴUVoڴ5>l՘1cV/뮛n Ixɧ)<x!֫G[@` !éqTСSrrr4Í72e[ͬYsvދѣ2;WS03ǎCϽza D 6m# oX4_LJJ㎻hk޽^KouqUdѢ%vyiz[$^̋qdh 6Ub6mnc͙3~$:bPNn2ք ^}C͚xWEe,L;u" >2o^somذ[&w˛oMs ~ݷy~O ̮t޽ 6^Vf(X~2eq.}pxɫV⋯.u3f̪VCwKc [ u8ҦO7a3 wc"=zk\}d ծek~_裕*Sڥ9NdK^z9k~ݺ/Ǐu!z1 noNRRҔ)SZh!G&Xd :xPqieD_mv w`ذ'|j})3Wp_ȼ,X'OXZG O?23f!| S =z=ND!(Z<6Kz.٤IYxMI&M}-[~jҴq^{tC6o޼m6I~AFƨQcOrK)Ɛ!N7 -?rWr7mo%=q Hi0``-e~m7UznΜ9\9C&& &޼yo ۷k茹#f 2^QΨ)t3lX=}væŋo_ EAoT5/n۶m;w\c_|fAF~-?O>ԩE&hѢգ>@Z jj0 *ʠիqŗ|g-[۫W?\C czX . ;vi^t}yyA矯3fnEi'xj歄jaFPI"[;;v\z.[ĉ Sc?ǟΜ9-ZBhҤ%o?PRǠyI8iǟ1cSO=CkzDʕqӺm›2e9$W D]_ݰa#UC\Uy9裕OGM/^u5￿T0>WWT^s߷~ o0L}߾~]ysL c"acزe+ cQ_|4p,Ɉ 7<\Q;+Yr 6{zqA.8d$\sc, ?VlN 2(C>#~e`{}@~a#9l޼%iqwq&7x37 ?S''Q3)P|{~7G~QR;E%\4oFzF1oF CTf+[ ~%EĜ7F]rhEƩE,. QZhzqcaKX4(ehK]3< 29_ez}>ocNy2:ӕn#tNq9xٕҠ NkƠ9hr=~b_Z"'EL7rܩ~Qcg bl '֧C/P.-][!J6p}.D´&4)@(VmlJA1sEVsD~x3~! @-Sl:@D( D|YJCX[=G ꛯ襦9\%ԛ]wJ -Ω.9/0.MbϑJ1$擧DQ#!:u o 8Bz C۶h-_b. 'e)>eDġX)4 )ҊRƕhgbԼ0s$TT908ŹT2(G:JL x%\:DĒS T/ JN2V,[#ɡ^R\GT4_ xJ Du R̕YH+G4E3+M rJ9g MK JH ]8R#odO(>Z u;f̸?p%c,a+j(㍌qĘ^@.5j!5qљ8ďD |/!z9xH@l4dNjE4#g3)F $F+xIQ/5__" 491U G{qTzqAi/fJejj @ A,C,0V- $3z&jdPqH=2w& ,1q"@'2M{ƢFldĸ`p#z'U?S/e(@CKsCYID;qgB`#/#1satɡ  84PGi%9JZ|U,. cYPlQnѺ ԗ+51IzlozǕNrs4tcў@ҼMxWX]YD$]) ڛ1Vaa(Īϑr@4YeI-yqs`8?XJZ йQ+@}wn)@5&K\.X"FjB/+ A Eִf|Ś)(=1U D-@7k|k|EiJc_z~Nj#M&j5xULu zEbKhU#*'n?lt*AF;b7 IbPQ^bF=s/|wSL=Kh,ks,JNLv9!?;51v/'"4+l:-@( J(-41GQIOD0ťu, 1pA.P_2tnba0(1}0y0A?f<ogrDg\L'tx|M~j<L :Bz|V(8uUd* qhoZ}| m* oϝwtZ "ꂬK @њ `ExRNCVsifǸtDv}&yp YؠBs zBH眽"@5T&@Bt_6\МV ֏-tgE<ϕGdgtS6jRxdlѠMg,95ިR7|&78_ ARFN!]D١ ҆TΫ yFAe (#K*@*B9JA* qQZA3 JHX_Rĩ^j䈱!αA/m8$HlGB pJr*!ɩFN2z0kYN  ږzBlA2; AJR/ecY:A.7U~(pZ VX{W3TvI|BcTPAEwJ:Oqg3zC&h+\ 2cd$o[Dg;+bt"~> ͐CTMl*%K9oJP}VZpFX.e£ &C8p%U,. ,c@jKhı+V,o1YhuEcv>!ķk/z<&ndܿ\tf8G(-ݛ́s[Ίx4{ 5;gpzԧf sF@?BX V30+α)/VϜŃ+Z}m,|S fE~PLr 12"J.tv)бXg X[QhtO.L]еkY)n֌`&RJ/%%32PzpZju)P/}9b@ůK(lY,2 G9)@LVP)A2_3RC~ +.2PJ5HX0$(Ix66W4YQpK}nG}ܤ{QfztGϤ˦\2zlgXV32׎2 /@VdIF$K(Z8yYQw"ؚ09Ąo;N d%z3bXbt"SPZtg;+4߯[.L-Jhzq WX2!]Le.|C~o05AjOϓwەrZ0HwF{|!*@zjԝC&tgXM .&V'N]e[. ͹-Dm1XepeR)Cars0谰 dr ]q59mlJB=ύS4z܂%Oͽ*@)@?6k119O@Y59򅜯UV|?rJڦxWwӗc HۙiŊ˗2f`ԟ~zJЊ=9"Ō.*T)6QH/jcI2)[0cv̈ʕPL901SOsʗH6#u"MBG8ľl$V ,\h D=G92:9dF2>SLֲe+uIe҃$!N $i$sg^Trj! ,:$>}g۷JIފE ,l $?7'% )Sv`i'Br!I,"SɃD v/2-3EΩQR,Zd ?Gv`.+S jݏO KdRs+@%@; .HLt2ӂ'2#Vbt"c tg5<y9wqXXra%FĜ7]hihhzq WX2]N#o^cO,ʎl3+=2k 9\A;xc;o ð2@+cDNWB1;ˏ 'o-Оx6;mQ +NZ85ѨM)oںXxt(e ];J',P(3d5,)(}CG?B-@~s =5o<9w><1g(c4k׮{饗{8ԩSM^ؚzQo@8|oѢUW]soeah7ʫs=zl޼#4kւo.]5mڼ)ʣqeZwu[<ͬ!]L]T 'iS&EHWW_ӣG.]ݗSϿs.{~̽a>\͋.j^p9YU5K+!b\F|wwuԨ1V9rC=0~w.VPCL#+(S`<ȘAB$֭/&xU,!`v7iJ XrN]֯vÆjq13ju$pmܸO>cav3)&0)!pC); .@8k%SR|,g MwVh:r9hSm0`[۾RBQJq)a+X''ƗscMǐϝsezug{ ~wݮL#tOF3=tKu; xst|\dugE|ڙj?EvӚ ngЄ8kXx-J:PR"ܤn " ũ).@[wE8>y3IFjXlb)ffiP:#%o;+ )@Ooj3?|\hѠ!:,gլV&MX}-mР_˛6mǟ>ȣ#V|E+5M:=]ב%T\U^XJQxX~g5L"oCFZ5k1qCjuE@ G&WEv]~CmXM?_C+1c޽wxc,-C)!o8 z~tUל ܺeˏÆ ?s9r4K,yAO?Ea Էl_;0 ׈)`"RO/ 4eliJG!-e}IaƢP1bC=BrT 7sRÆzj)41tVN) ՜WbeK޽~LwNS.ݸR@2~WsN3nZ&k)p^dZL/b:)Mu#$>O/+`pZ:ާSOWj i2Ab+WX zI+1F V*9?'wu͚uƍ?z3,-α'il:4^!( PH8^{mF5k'ƭʂ$-W5$x !$›Lppj^XJel5ҋS.4QCJbVKzV^{7λ[r0$XZ)POj$4G55񠌋ĩ` f| B РD'{i@vOT#? #[6tg;+49.VКMKS 8X AӋKmGӋKX-@Ǣu?hC2_jC`ȫ 2 5:Cfx2WǙIēd:B9^#(E5ݐY%;QzS\~0Lgt|h fƌ#9hÚr JGnU[Xv(L*@8ɭcSv1JT^|h0 <wul'@?ugskժ]3{ FtByĈQ{iذ1vmC8 /r7yg6nܼuO&LRDžVbжmnz?b8͗Q\GSN]5:[2g\s]N>Ӆ y1)lGMS(gq̙3wQJ94{e+WZj 7o+կ:t'D +Vf0n-e˖?Si !)Bz.]OI3)emXZ)õn}1K"v.^onʺW0 WV{O9pZ\uЉEȥa\^~n+e̚iڴ,.kO%$< $ }9#f\]Dm۶gϞ}+Dnq¼ŠAC֬Y7f8C-[؆ E#0G $y9ij/Hug~Og{|Æ mn thhOr MwVh:rCNs9J9o4ي;+49.V97UM.ݻĈKm8 P(bqi WX2VocT0zqsb 1@ɧ D'/dۛr M2ƓюtKx ]5L ±C4bS\vtW*ar]aをl$\fyu^,ڱ&EjStV75{9:n/&4"X,s2HVYTk(5nYZpdYEّ;| 8k7|ZNkt%덏MT?Xш/FG`c]fz^ = Trllh\Of\!7R{7==W]m>}CF-(]'k8̳>?#5PRӦWS_/?ڶmΝk&OLJ^vuebO%]7og?ˮ]{xࡆ W5мkÇ~7>w}dɒ ඖ"C0)GݻwoFW;FgԨ;cժU+W?DoVT]<4k֬ի9M8d,ݻ?o5j̷~?yT!|jv 7~={޽wwqW W?M}ss篿}%J~ܹwm8tڵ_< j}SK†T@A&+Ǚ3gܹfD~Myd|P|?kO?)֭[9h]׼Keʔر31 {C$&M\ g v-˚5GҘ]>}׮]s}b^2 XbAe>|[B )_su3fzY&MJYnݰaͷ-_˅ o]Vǟ.I#(\V;N֭?cƬMٳvqS?+E+!j('J iǕj&n Va#_&x"YZ,uR>tk,'6_3/I/Ћ$  $e)ґ;ew}/CCk+sCfN*Yb2M6=v{I`>X~WЋ5j dln&Lں}|ѣe˖g%bcͳYNEGV>c֯v.Ab"V@ jVZJc.Oۓq8;8zҍG.v. #@[z>!hiёJEek3`SBtfC) Дg 6sE(:"=SaXX,i&+8x:uqڴi+?YA k#n޼+nРэ7_ן|\ Gʫ8kQ׭^W\qLvhb})׮]_޸qs^}ڴi`|衇j2I Ac͈LԌ5fuO֪Y3o屾ŋo۾}-Ld,xᅗ>úu+W) ,G}lǎ0v.caZڤI {[iav?׹^,QKfH)oUV3.d I :rMJJ޽{Ϛ5N=tzn6m.i7|sMiWʙU7o/I{n=6S" RhymA}MX[,o{)p*esPi2PL97Wgǒ>hW_}լYKE, r|ϿUeÈR2y汛ӤyZ N= 7^oߞ{#kENuؙpᅭYB{=Uq̘1ڵݒO@_zS\qv 5aF a"~Y1\RR 7,\lP{,O>&ˬ'Meˏ,Yr;>pܼ|nvc넍a#\f2'_ OpQH aaϙ3ȑラ hqM[^~ nmR͠ꫯ=?ʵf<Caa "*tdh8Bb+%-d2R|Y8=y7t/GAV&o"@'y3*(MwVh*"[ %1stɢ !X\hÕ<^\X2?[#"+@ ȑLA^h-:Dw;~w9w$ݙtpN|w?fTA5XMh΍Ǚ-r>D `h'mՑ&*F#Ywh)wd+3EX)BP7 . %#@缢|m0e8[-rş)@qf͚gUZ52jlڴG|֭_rsi+x!Ss}K={ju^jժÑ"ٿ ǚXju~*<-Z}7޺.j7-Z3kVXY_=}v0#>i<M6]`N2kמ;~ݾ}mAlwĈQlӦg1k֜w6jt74Ӗ-% 6ctaK.c]t>|-?.Yr;֫Wp^|Ŷm}݆3ftW/'OVFڷoiӦŋC5GTJ=ٳgܹF Cf^8iРey_~eϞ=?̙%otLDu"7n@W\qՑ# ١C'c8po~A W\]dȐa*Bbdƒk&.4w.gM4e"C' f-YB>}z[nʔUQoi׮]<`o21eF#l2&U`}w đg:R)NK4D4dhRM\A "pڧ''4#0/moe")e w}g&L(Slժ5jTYR5ngyfڴ~^`}\kd;k͚uYWq~=-"wwwwwww$(RTh)ݥr  ɖ(7L֎@{kZ3Zx.w%ݦ܏rWr6'B͚Qk\9JnpΧ$FCIIҨW~ YN=Z#/VÀ(@ <}Ǐ,~ς=?d` }E?8 B@+qf Zd0<*V]fΜ6q7b1GY{w^ΜڻidL}|>:sL2ɗ3gn7E]WDs'tr3ٳ7ѣw_ 08z)n?֭;ϣ'%رkʔiOҵlw]BJ*A,uV(K1]z̙/ݻ7_|ŊC%6 [B;w-^]{>2gGŜM)_}OnHPGO:ӳgoɢ+Air߾nݺe| Yl Ql?~)<<"R;3I¥e'On׮^u2hܹ ,I-UVĒ'a:"o r)t?~p+cϞ='Y]25…Xm۶?s D&M}Ѩ6mڽ{Æx,z:7͛ [wᄀCLI3ϒ"kN?lޚ5_/[b(Onj)b&MUX]9L2`Ç 6yrC-=U͚5w|pɤ @n<1pyXܶltn=v[Puǎﰳ;wQ2~ƶm֭/9r43cҐ3gcJ;wۇ4Xbҥ JO[}ZXb-Z}N Mns1cu'"^ -s"fĽAdQīdSr8 y[!?Nhgz-4' Cn h3l1~ Ӥஓ7n={NKٳܾ}租~3gnN̙{'NUR=j5Mɓoǎ]  ,mێ3g{x)YQ[v5}t tDB܂=zݻw/{SM6cWNw^p$&ܹ.^WKW7o)xb%?xknܾ}nq3GVEM6mX<7lOtsKUlyJ0aLrvᒔ*UB={&S.]cǎUx)\8U0=ҥKi  m*M:1\]i+WIf7oޮ]. [>it)\J(%A3$ɟ2'NLHhCn޼7o~ 9H֯知J*sfMY &:,~LmO:H*nYjժ ɳD>I&/r̚|(3{'|1CWxsI'K=eJWo1.\%$t]gϞwnРѣKK釜Ѝ'pIh [lM&}Bt]?=_HK*U&R75j"(ݺ UZ$I$)Fm۶ KQ4[Gbx7hАӧMjw#F'O2{]׭[wLH7ܒ+/]Ǐl߾#A3k?߯ur?">Xz#Bw{,Y .e.w<=/_5UĐ($cI&㡑!}Tij׮s=۫W;w}…~.iTd)9y سgO6)=}ݺugŇ4mXѣ? !7oV1 Ft>%ܪUkP,,'E ]v%~O=<l>rN/gya%}s) 'wM&ϝ;?edIj};wŒ|N>57j͛CO<rrlguw=a$om۶?u h!CN>ӹsTiS$wܹwA&a+`hH FڴiGW;tD+0!U_}`d(f#Jb(CFvH#'|4gw޽'/@hЖ-[sUCE}Ji&O2eS{p3͛oΜ9k.{O>%s!RϞ=/o#4i ga\Hr{i޼KZjգGL3Co۶3ϜbJ`|rOt"[T,ap2jё:U߀>j\#|@_σ.Z,a~#^0~u(w6 !qXp㆓N\(`':p3Y:`dwЎPȝ':-$WMxnv`Y zJ1n0Z܆Nډ%(@+N^=QFF@BdȘ)]&ΔNe޽{ϛ7oBOO7?rir3wӧN4(ԥK7L2eҨQ}ϛYHHݻoeSJ]X{ϛ9:\8pϿH3Ycǎp;dȰKݸqsk@-&\H.eѤI^k\bJ6Wܟ~#G@D;ŋzӧO>S/i!Gz%KC4i__pihAZS/_ᣳf}[: Ӧ 9rQݻL>s_ǤI̼Y0w7orϞ=޽;$oK,۷o_tҤs)n:믿>0aj=ɝ;BSLsCP{l%is5jHX"M8xoǎ׵k"EaHP4˕eEIX/ˆɈD &dH]1qQF޽ sd?qgĈQ}*Tr*?9l.Vԩ3(LZRݻYN,ɓU6M~G{q (NWX% lذ H+n_}Çܾ};g?S6_Ko޼5eʔ!CnٲΗ)SEw3r[߾}R%OFnoc7䎠Rb?ɐߜ9sb٬#Glܸ1w|fJ­s.'Nѣ-Eȹ3)!dԩw] 0p(O|֝]wQ#.:)7n۷gϞӹsW @jQ@SՇp.yN$I:w¸q/ gˈE7g ֭g"RJ4i ԪU?Lx-U CEQCVqٳQLv_>acX"'r9y/OҦM;Qaj_KX)ƾ:ġ-2K:GZTRio@<s1౏EH>G>? yjkPyZ##'fZ$^7d$B:9F(\s03 lr lj9n8 ąN f(|qC PD)VI@;B1 w:sUBƒ"Yf纎__֗jav[ܦAlpր0k ϣ-Tr|o@kmsg/A@k]'aZhYR`"5%9D'>2NJ"QF@wb" 2ʐvcG>ctsN/A9^I@O Q}6sЋx-s^GZ0z~ : Yd.\iӖfZ9c>'N]xy߾ Ȝ9+?ݳfG._rs]x3:t||.\<|lr{#Fei\g̘yw6q,+S,(0Z##ȑϿp™3gO<չsW|˗) ,f'߿~BJ斪d|]ǎYpoWu.]޹s1bRJ]hE 2@b%/^:p`.Y-Tzƍv}h%J>2$2Vۊ+i :ܲek0gzE/0wgٵkwj5#a̕+l_Sfmb+9e˶{O.\lѢŸtٳg\{u* ŋ;w7$sP!s^5"n_P_:G7nIսJjtCP2CVIIc?V%r*vgϞ͛VZ8&Ǎg>WC]zo4U)%)/K4O?~vXR5kr,YL4"yñtJz ĭJj#yzK *9%FIV?ϙq-[ǎG"g3>yj? %'}K}K6FmɯD! w6( 70q@#њ`_B!B7+2 9Fgf69a8?#~H2G֨dBp_1ǿAJ8 _P%>d@d ay8оo :9hX1z5h_оjyg2d}j T(fA͖Heܞc ;[[&:ؾ XzAna㟃H&ZMU' ?G3 Xa~%[>cEynb{vCCÂ4VuK_ EQ~x.37Ĵ=jZQ54l Y&΀ 'PGypA@?fo޲{} t٥׸}'0m=uńKƎE% h~oryTq\&R1ϤxLGC\\2gΊ%q~QF!>ZzX¤ZW\0`rV2`."1hWWw+"cJzXa"9&(( $(H)ɄKH_%axM12g$hx#de$\P($qE0;trd&M9sn ڻ;%>XEYX?1D%I,[ri2eCGJU$t%,`i3GHĖR(MR\Nr r]V%K(Y8B-%j JPe/@ K,rd --R_,vƐ!Hč3J&(LJD"ѡ' % D5JVY! LƜ e"i?DAKF Y29BfDM HhI eJaFرCHPCU1J8%FIF%K [@YeHDMbN' 9: آ u!Wq.u tdQ%"A#_k5Cam8 踡wЯ Gt1@ PDGd a80o YtNgM', ,x=o:O'&+G[ynb rwE@,o=; h'Ǡr/tvH6vմ)+&[2[x #x^𳜉tg" ?EDQ γp)(C1ȑkE'O;r~X+b1gB,Y1Jq)$%ԄY@i֌ $)4 F<c.$ c"A%FJ!d5B̙!38(05kq>煉,IJ7`K%G\hDĉb¥0D"!$=&ٲ`B qˆ-#Kȑpɜ-vG*VϛׯoqGݸqjL"L%Q9ETG΀K*NÆщ˜0pLM7q(KUQl+C( 0t,!0'!KTĜ 0[o%Yb'6Ēl"B,Ԍ&rcsQ QD[S0d^^cxNh*!oDJnƜ% A(g!Gġ!&Ytd%@8.eC Pp&FAh2R U׿-](}ǁA~A1N'7_Nbt/Nt(T/Nt(⇙}0~Ny߷jBš' H@ jSvGo)oȪe.(uA0G>wJѢS#!§x'9&KnN)M4%,K%q)J0g¥  ($b%:cIixĥRQ=K [\qLY)% c:]R[.ݖ.]^v]%LKQڋP 艴Kzj"gLrҸKy-ELr!dB7Ȉ%4 `C C~g1,DS~ˏk8U昈b.A˒\$1R8'(Hh)ae's2$8P<&XXqDe. xeL$ssV$$$V@B2#$ px =3rdD84E+,1@n!"V̑@K1aBq. sU +/**iJd9 R"+2K1Pr0aDP xc ` #qb"&r)#;by) abr {Dz"9s\DY2kJ &KF>hʷ#p(<[R&R !Xen,18p].CVٰ`e0`n$%Yb"Mp rF 90&29sI*'Ő8 >%2p,((Yhp(t@dUOh(|t}穿--7(GA?GAB*9ap@a8+2 9F( h*0ab':p €':pC8"I@;@1O@l:Al ,m b_ΏFkD[?$ Bٌ@} hA:d5s#) :K]5U^fu@ th% x-۬.9 h'rq 6ڰymݹخ'v7ߐ1-/AЙ219_D DC_Ha9(cngթ[q.="B HD)KQ3439ſ8' &I .|( U.(beΓ%1dWbU9d+VїU! b*h"!$CUF rqNhI0gIDn\H 4MY"j81"aN\2A"@R\@9NXbNlr`.L1r@AJ,(H1"AMt$:s31$VKї&E`DA90\&H !MoEG2a&@!h\LPZ%,!triIV01nUq譸\2h2" 6C EJsC9BDM(6r0όrh-KeV4$2WhbNNVrFeg f[IIO_n%[Bk@!ZB@<|ְCk1O4Pg0 ̦k l&'/p'J z`{c':p $C3d.~(Gdb9 h(p`~hY4 k!$lt$ h{@xh㡤E鹡7c<$(\码p4ɘ(8ѡ{%A@[pք9?Cn &ͺoګYiyTcЭ侃/'NX:n,wc}Hi#1Mƌi#(~3e,HŎDtK\䆹̙Bf@(5&,_`I,4I>h27RKCI0tj4!#@K&:uEY0b̪S,I @QO4F hK沄> '!C,1% ,єU&:ě9+3XD!seN rrT-jsQsɁK%@"с1AȈ'21VeD(xTK"4:oKR:\=[cNjG&ϒ&20 ?PB"Ac,!Cl,1ƶ7E00?, d3%JAsK\bD* \JHD%#sD0+4/&fC<t 5QR_Lj>V, I>K- a$:,&鵖f̘)[6],VR8|uO s@^Ą( w~ _pg~O? zr< `/p'J zL:BJ8Ua@Jo $G}K$l!!mxj0/؈ڱЁc1fv}'ڇ8Lv Mtɸ|Q%\YL$qBDs͍#MQ#Evh':3e[5t[Me'I :ƨ!- N+sXb yqZ21 L8I0$PjB6g~~OC#'*I@ vX%k&|ʼn%0ʼn%\P7ĄsP#%A [PUsJCv}a$6SϖH::T[ ~'ZBel|n 4 Ҡϑ d I._Swaܐ;>D@kR-nt$xN8r n  F@7nڹvZoz`w}l^z"?B(_Xp"OF3b䨅FOk"7ӤM1>?]]?`vbп)DSpaEA&bbLj̅k0U&rc(0{Yd,#ssV %g)%DAH!,R1ǕW{"VEbΜUbI B1 21D6ɜD":"a>Ϟ> ~~ h Op=%B1fk fuiz^iC,`KHXpXx8A,~vGDp܈~gpdyk 8aYBR+\s``<ٞbfA|a ~9G6 t q`-vkC)>D!T^H$~{\*Thڵ_ r"$ A%Cˆȉ$[1%&2"R0LSed }!'#¨2?%R&Il9,-#7#LJ}Ie%J(Q 7pDWtH|ŊKLO9kl*U*RGFIR|!D1 5nܔb̗@ ɖ9 x\0GĒT1AH&`b#awK?-Br(:Ő rѧ@&իlժMӦ͊)&%cKXV"wN$=Ҿ}6mU\U+&hg4r%5I%дu5oo5՝%Q2QĤi2bIKVT2 @B aB2g"B& nݶmܘRďY"adUb"ݔ;%Fd[jjj&e sQJa$8DiM㾐ʼnáom96lW'fG<~3G~'0_[omaI@M0 >~u8įN:.(qD&R&"8d){(0/<? ۂa!@rqb&9 h#lt8 踡{ K3nDA]6vG[:muN@9 hw]M@7lާqiqDΞ74&zh,T8]e̠Ӧ8̙Λypph^}.ҳfΏܹ\̙9@_ؖlrXr u`XOH9BC_(A "DKsFh7o5k~ZȿQV G Vb.'D(I5P,+7T%JZU`7aId.9'd%:FՆbˆKśD et=J,aE , |%.eU.YE }*Uf .@,%FJ3J U\-[.\0-F2O9{:th}I@ #ʒHڽ{Omv;C  m pl/޽_+W*n&;AvGNs )VQ; xce4 '%IKn.\u֑#G۶mO-8dR{N4irz!FnL $q+u1Mr[Fq.>1h,=qDY̠rxJlB@9hg3l@1sOOO-a-~Aa8 h "Pg0 ͑8눚;͎0S'/ 'pC8"S? fuˁ=Ib?־Hъ!9ڷ,la:Y h+pBEL@kn1N~<՘a&(L *4d;$_r <:7hֻQ> naxN;t3_Ojc,#4c4cL2d̜%*nl9N:߼y3wqqcdɲo_ɓ%F77C ,=,Y  e/r1p)R\b1&Mo )È-[jQs&`<3Uʕ*U¥0}Зp(qA^8Bȕ+ϗ_~`bqK’$8!DF *2!(ʸp)$(FCX:,V(ɓoݺb|Ȫ,T 9Nd}!\]e$K￟P"??!)ы$)#Yd wuIsu:thȑ+W\|. I$%!}í#D2=z.ؽ{j9s9svHH?DSuuڝn)R  AG! #'X&t6jL8$c˄LP(9Y¡_8RXl&^TMlݺ=_9rPa7o:~wTĪ#E(ԨQȑc?sɒ˕fڋ/WRM)[,1[ 9&M%KdK:һw_>OOknL<EIP9ӥ8xPv@BW|2AM&(АH$$ #hTr͚ɐYx%JcǎWXM'[ 9[C􁑸(bÜV'  6vvT2$ T#Gz:6lhԨQ+o{:thU۵@B=c('~^ǎqʡ%nzy?Cė_~uƭkue56hШif+j_fF䀠e˖Vurp?Av[Y %=d.cťdBB4CNG+l5`G#+:>,'V%fZV'B!_ YB@k '@n8 踠 BE0ůXIL.8PoL:8}|({Czб1b"תO1WaP xЁ,R!\vR4{QFfD@3 ANډ5(Kн6ݴ톶0]}'G'81{ 43K!m:իϙ3ڴiwr* \Ν=}ŋ==3eʒ#G.nݺ3w .;>[xX~ׯ߼z;w^45j l߾7nFƍ[cƌssKUhݻnذ믿!/%Ṿ{bp׮ݸpႷK?c߲eg A**QΝ Wf},4.խ[(w;xEKN>;slHb~Mdrͳg4^R*u]SK%F4d֭;x0a0_m;(ĉq^rC[__vʕk'Oͬ+X6/<~ɓ7oOw{BǏڵ̳f͎$\LZ|tg|}ߺuSݻI,%۷6Vfѣȁz9͚سgߥKWhȉHƒЗ 8j՚ΝVR-ot?~| $RӦ͏9Fw9ṵa#K7kp9srٷ@Vm8ih%Nαc' lkvș7+:V޽_Jn$!G]ڵ6nܴQ&ɓY6[iX|||_NJm۶'=F?L֯j{QiҤَFС;7ZI0`}@NڵdxQ|Ҥ)nzY:~$Be.ݰ4i " 6Q(תUgm[ld82Iŭur)dzMW!a({G?9Kؠ 0> &LrVɟ]Dnݺcxpд͛wY$Pv] !x >KnԨ]{VڵH b$r@;)EP|tACS'^QYX#G@' DqygGVcgm,0ky?a>pofGg놓 Jo쟉/Ntb9'3"P#@Ys ࠰pj4gxlU`l1Á(ncM,a_&0hhPkC)> hNeP]!`x"{(L_h 7Gnڰm`63q"9?!7 hC@*T(Τ:B̛ʕJ,}9}*Keʔci Eȝ;*Eu~,\h޼̓'qjj֭[kn 25j7orAwRrթSw kx;x'{~AД(Qjon]"ŲfAIm۶- I#GlHomԨIڴ/ߟ[ĹsKUV߼y dFҠjB?ǏH?Vq4h;wgΜ=m ZwԙŋrHX9q⤫W Jfo߹AYPE\zPưn9t 80(ww+޽wXql/嫔I{+Uw~iIS6mڂN)Y"ЎJ*VZsUjd)8-[lw󈶣ɱqsK%':8d+T|ӏ}W)ƼZl?k֬K&MvK9,b!K8ac·ҥmIE AC IN]#G ($-#O+V|ғGr9dKvyCھkמ%KG|_rv9fPK9r4i j߾#]-/ʧ|)u/:~xŊU8$/>9%W<eǎ`ɖx0R VRqqƍ7bqWwP (%̝;̹vG$T.3y|;D6(ao@ HA?𾿯-5}[@t~h >7A!_ YAtP!]aN:^8įN:.(qD&s8PoL:4LK@#[2D%cCltP {A%' Hf :rQPҋK&=LZ6Nډ!( Н4֨yn~D^L WMKǍ1d7קHi2h_.R޽{9s &[K,2E<`yP[pw߭ˑ#UYE?z8&ZiҤY=:j՚ 2U\_-QToܸ;wA? e-Z!d*TjڴyÆGu9ƤIשS DW-[^̛9)sgRetynniҤϘ1G5=:id&IngϞ`d)HfΜ͙iԨd8cLRV QHcǎ_'0Gkʄ}tr\y$CuڝUXlyvq㦴WwWXɜ&H;tt܅NAS6{&t7n@!"V;vbԿmݠA#dXʚ5{Μ[hg>6ۡ`=l޼uڴز$) B( !_z9QzA tȑwѣŋ'L!0aÆx4IYԪUۛ7oϞ1>U)>rHQ>=Nxzdȁ#֟?!q n?ވ(BRYxi5jE0,>$J'J3>zh} }߇>YB,!laKC4ڪqNZB.(a#fe 'p _7t\P}L0ѠʼnS,$Q C1f7'2XhhhXbxj |b< l(b6uvoK@Yb@hK h1RGo46 Q`1\l+PhnP ayְq: 5iѷqM[lvHvt{bfƴ&MX>~,0d"тGGtFpwj5>:uzcNʕyF9r-]oϞ='?/?Q[lw߭˚5Oi *rʵ|._zkn>}v„I2dRگVL9ݼy;oC ;pPLY ,}ifdɒ-U|/%2!_}믿!pLH#"dM *2cv5}G]{LFK%~`hNdQH1zpbҐF1R f{#tBSi,ժUݺP/@w`8Oҕ#XÂKyÆyӅ .]߿phdRԩS;w֡83;ƍ[ׯߔU`OuȐ!ǎի׹sgMΙ3gݺp0r gdHڴiGɌi}`d zT!(i]tÊ&nL4H6m΍C{׭q(O_/If\Iɻwv`gyVs$F&t%9Z߾?I أG 2K۶mߣGw}gϞWo\N:tJ$iǎ?9-ԂEwtV%9یyN9r¹UiCO8UrU:v1.D޿gr$ y(b+B*Ţ*9sC5lq(Ool߾e֜muoɐ%&znժ 'bEG if 9&6NIJP.OO˝;k׮o۶S5bbOxao(K 3#Ǐ|>"͈F."VV}= çO'gp[ݷ&}` } fƙ"K37"^v1-t@~NG;9&' *0ʱl̍Dp _7t\P}'Xg/NtbEN B+88Pos:$84ګ:=d  3\"4 7hѐP[#a4joEϖ;0d&i_6$" GB:Hy#f6EıROtVAI/|iTt`{xHP.`D ir(G@ t$4;ϰ'~ ۨKV}ӴUfm4u]zK0] m e7o^<~ƍ[.]s箯or<y+Vb8D^B[$@}g)YEۿ P%K6(H()]V~={#tqqátWBѢVv .|Z* 1@uOT%-Z~TJ{7nѬYƌ'@H( MDϻw]*U_i" Hc8G4A )sl/X>qh"la'$Kx&w`ȐaqEȑ$IڤIkn?0g܅  醤a2@ 1bĉ'Zn}ԩ۷O:?u,I>t钜^g۶Ϟ=ߢE+$ҥ˲}͚9 KB@)X aa޹s=|a\yzqʵ[CQ?uLÆJ.U-g۶B@#!i&Kj O0 IPW:Kn G|)ݻL=U8н{_;|۶mrΓ/_nUۍ:t￟z L)vN:J'UL8N$(J 'O,YZqy֭rhi-[GS:;z,A\F|vwƎ[/yNTs΋+I۳g_6>i;Pѣ&M½ƽ#kV"a8q2gbT G~'`?[--%K+$L= q &>2Fh/>GIB/աĎ^N:.(qLUh0ůX&n3a&_y(79O׈ࠐ'g~,; W!5I@t*(%U6j tM#m @!&N8r 8]a&4mշ>j~XN/D@7F2xJ'O/X? ݣ4!gwޛ#G)5L&~ʕϿسg_6ob0_H֮6)6cLyzڵpBYf'4V?0*U9wGJ+u괹s]t[E :DLoܸo^di?{6m EߵkF%?xRs٢E+W 7 L\F UۯZm$ᑆTlيlР==$Cb.ʣBJtuE|`tf +44iv9o+Wo\ \;%DRD֓I7j׮{uRtEm.\=+iCG>Si,؈NH7Y|t8!7aL,g鳜47ӓ@ ^2ѣ5k:uԭ[:vg%2\ 6 TGbE9a@zMoOh~~_dմisv%Nz˝ҫW*PPǎ<>}ݺus>._:utpҷo:/_9B w"2Y?I&fȱi߾#=C]xtޓ4#לSoCݺu{ڴi{ &ŝ2̙[N>}$%IckM6I8$.ߥKgww7t?tޞ={R93ifXpѩSg˿XLǪQ(|˖gΜ]ju '17zȃɓIwör1%s?, ny ^r#shZ9Hl(^WʯZ~O o< 9s˗$9=t%*k'Owy>W_~ĉ O3XFlǎOuSL4hLn0a?o:uLŊYBp299r}Ѭ+W͚1[n?y4lr!Y͜9{۶8z_Yly&MA-U*Վ;1ut# =!T\-Z:}7=u>:C,Z*@w~.] QpHo'"H":D %V99&L8pPJU%K1O4yݺ)yh/2̕+# ȑ׭k ĭ#tq۷)r*!-Zx)"VΜ[jQܸqӧOtM9 .sI7տMhH9$/_lʑ#GmV@!ؔ7ٳoĈQCv[Z aEJ2[ƞMQt%i>=!OW=z*SK-@.t4g0Ra@4C`uT .8qĎ^N:.(⇙}O0s3Y:`e6P#@Y hNƄ8n <00xYP|1zh8 蘀J9| &lj jhprNu/N@ת߱Q^:}E>-?aOphK <*\|˖m7':?ųf>rEʕ#MFŜ9sO:̙sgΜ=+e?-[9s>}%K6wwaFݻŋ۷ҥ;nnʗq"E5nȑ#W.VX&MB Νwћ ܹ~gN9ydҦM'O3f'NpCGZhE F_dKXpiOѱc'6mB۶혠}:bvA^0$ϟ@488qѣI[mˈ~ɮM՝:rٳ׭vFPҹs֮%r*,Y{xX\K1& dx޽jjsZqfOOO>W>HBX$fZb?(3gf)48$d+V;v7r>| {{Id)t^uŋO8 6mRp[@!:>{_'°mdH]\F.9 -WP zNxoΞ=7| |VE,Hp8!u%ܲ5~:]7ožmReHLbj̩gٲZ?LְacjlҤY-Z_,?SǶo@;/' fY TX8I@ 5ԀpqA ?`&&0 &"8d)LDb N@k4n?-֐gO,~Q쭐hsF,˻Վ0DQB$aD-I@U6U`4` $B9^MZnܢwм6<t"QG3.=bE#?N!}ӥ즳!¿݃_$+MY)?Gd [HEU(,Zm;f)\\\܈(X% s1GDDgUBc%l)Y^ GRN *XҤ4htʵTgdɆ[梃'8$UP}&%8A%L+A !8DhԅICEbPItV#,.ɇp, *BɊQcXhr)j2AH0de.Q`58JB xB(T|eXb~rf(%,a x d oĈFBgYe (!0JY+1DM"*0/XqM$&(95R $(*b2@1m4H%KQVZ e4 tUbq)ʈ4J(H+P Up0b%IFJ4 s pz]5߈+(u${Ĉ}7YE% 9n1L$aEN:F@ڛyg } E釁O=G0/' fY TX87OA&O,8!fY(t\P}' )~M02q3"P#@Y 70ՠ_k_Ɨ%&PA@`;@&; 3r"\5nSGl;{jvN㠜s/N@oҵYM[M[hnh^zO^=ZsA@-3D|E1d1ϬtVg"gۯU~ b@|ȥP9c^H={͙3WB71!`$}ml9$TRɓoɒe'O0aȑ6oz%JyDݨ9sbe>!BI\G(&%@08o,I*&DK~D}&,Q$# Y9/j- '  @<0A(Ma &F9T!F9*D1:F$ 9I@F4!0[I[HLD.s ` * [FXʼnٜψv!FHD?sɐKJ,撕(PUs9bU& 1K @ K<E#dIpb"."'!H0gWjRlDg d̨5M$(PK\qb$#:,5,ޤcDGNKG'N$^KVy=}(W.}}},>>>' fY TX8f~'?.mƉXkc JoM0`&_LLf"L.8Poo#:l|… _MݺQ@(H\&2g"DMV&H\LAG2$'p& bHh1Q@BD`D72#KHX2V#jb \O2s 9؊Cc"2O6a8˜ `b@ %yJC"7q%$2#"4`ʨ{"s N&l+舜'ܐ92$ $q2℉xs 9VT !F2鉐A!MQ(HtK 4&NPsY5=>xD ـ&Tr hMvg(D"jܦf_#C Efa:mp~po9ێVs>_>Lc7o3P'8K1M_3ic |9n̊d`רQ$tn(Kk#G?B#tSS}TV,o3jH̅8Ul7eKF8-hYMCqD.%0j"I<9&.G!s(M!qܿ(&2GG aIA +IK&q+:HK Fd]r։7% [0hh}?R5}Y5<|>>=XC}l,/Akz`M0ʥMN$\Vf zV`ˎx,?#.5f9F}jF; A+@ 'K@b`DлPD.~(?"h0`&_"ą\~D3P=$I@G *Fe1y]C~508($4,$9g:lS—#/~u(Tr I@ %\P7~EPa0 d@d Il(rf$D VP p$uAA4:4$'g_fylq#ёԆ _ypЂ(9$r 3m|I@;8+tZ;5lֻa^[mvP:u?B@5a3tA@/=k`H:Ъ!蕬_"֤L_/r0ط̦uc㌤4aIo2gR B 2Nit ΀q <<Ҥֿ`ht9ι4C!Q$~eϞ!Ι_$A pr) 3a.FёIl>`Kd(Hdw̶X9(bďC#)qQco@$"#McdK2J%F]ԉ7N@uq~]@O= z 0X'9n8 h l@ \sl: Գ@a0hotU`p/>~u(Tr I@ %\P7~EPa0 d@d Il(rf$D VP Ph!wCAAO,6g<*Yr3"PㄓDqԸT'((;UHD4 yjYsmzt‰; YO<߰Cݨy-6k=U!{01n Ǽ !X{$OM{H:[*ɟ1fG" j)SQfFzJVL銟I2yAEı,ű,%ٲÀ,IMJ eQW}ÉWOC"I܅e%idt9Wɒ`DGBR`%LФdX"?A4 'ɒ!.YWPs'&̉qB^'rcJɲц WE8 ۗ4&ԉ7M@+,s;~~V[[c[5I@ ~9^(w61I@ǯJN~9^8 踡 O0t8+0ů 6$"V(X9@1@XepHppHHHXxxHh_` {ckJ&>~9^(qI@ X8`zHj\Nrȝ*j`$"l`wNa0 O@iإi~M[mҲ|]Q赓'08cc7NNJ(դIΝ6m/_uZhEh U9u̩#A@Od:ttԙ7nq?~rȐaMVӦ^6:MDG]wëW^~s֬sEl7i[\[yh/^Rn&B7H}7oC?f ,|!n…!cҘP' GD<=?> {@{ Z㆓֠ـqV`&?; h }PAㅓJo;`LkBd Il(rf$D VP׾%>a<,V _PN*nCb' eƥ: @)GܩF"i.{x0$gB ݠQz6oӯy-hvP˶t٥w,tK+ƏY6 ,\(]edА:]_p̹[ʕwdG~ 斊­pMUɏ|g=%Y'rA +pmΜUȚ5{l9J#d͚#gܣG{ݻwV@#Gy:ݻYOE Ē|(K9@M˥b+&RȥQQ`E%&F!ib$*Uٳg1cSHitVU&.!*T:pШQ=<sqm$I (?̝;%MnF͚=>lij%H]R0Jyt֝wLظlIxxu?FPЩSO>DRs96ɓTbI9̍BCb 9ɋ1[qiAJ޸q[+r?.]vM%.9(TV6l,UL"V\uҕkr'tdHƜD.!:tbO>C vƌ @ Ts3$AL>( }ԤiF\F4J>j׮{ɵk-\hb%ȑc%K&%CtwZ;% !3g4F&7@G8qry5M jR( @z Z&N~T:n]⇡7(L֠ـqV 4 hPWB%' /n 5{H B':pC8 &ܠqV`&_"ِD/NjhNZAT`-n VmCCCBž[~֧6k O4 7Px '-b!qN:!PQ w hf[ټp'? l8? Oݬuߦ6kݯe maD )ϫ&7>r׊q򱞋G-l,N6OB[l[p1?]]ݳe1bĨ={ #X2%sUV/Yp/ZxmtZ^ܹ08%JjժMǎ7n+WYXbըQ Qxh Uf39P hYB7;B_L' klLQDI"0 b(VtF_o߾#(,Y c$8LҵT2{=ycׯ:uO~ɒ Ё;ݻnܸ5~DaH$O" K4.l pqqݻe:uTR;wjHÉq0r-gZٷݻЍOyzzK!.wB(s֬ǎp[l Ħܽ{Ӄ !7':[_Y;t7' DMTaF^^^'NXm;hѪh:uӊ_~3qq&J]I&(-ۊ޽rٱcg|):t)SO~w6lؘ ܶmFzx"BS8DCHC e@N7UrLq p(H:}R0p߾}'N>3k<.y] n*r/.Nݵkju$@ 99ĢrR K(:urԉ=-o:,ǁ~}> |g yqa,!|?0ַ@ (kN AĮ"_  /y+a1BJ@Yܠ qV`&_"ą/NjhNZAT`AYAaDԆAjj4(rPドPvqԸT'((;U?͏;m9 h'Pxghnܢ7hnpNwգHz&4_M1_Mr'X>sɘy-}POpdJ1u K=޽G\*A nݺO?˘1[ oٲ?|֬.\|ʵƍW`ذ{]ʕ+K.]a@BC w,͟`۶DIN]nܸ5xPWWwZԩ3eʔ˒%[wլY 4r'N(Q*K:tڳg_:Ehnܸ~gMbJܹ{ʔi$ec5a$s[ "I̅պsnl9̤5?5cǎcA5jPSY/1dNÇ~-ZFPHի޸qQH=IɊ+|޼Q&ϛ7o7m+JFh(_XJI&.\Xp!ŸE|C}v+0 8S̈́ID,zp:Bzuԣ&]{;Pl"E9TޟQX/16m)_"Kqz+bծ]7IUTbyk7h5ǀ4jԄΘ1̙4Ԯe[B@3'4d=_ze3&p-ZB9r͝;̙s4wI>xp.HpH;?sCkp3Rl ˗ɝEDKP<9s&MӧD,ZDF͝j!QxzzWϓ'o(p3g˗?~Z%Oҽ{8p -hq'NLJ<>l>9EwkI4iҌBB+Was>iprW\MV+WK*Š:$z{l/L@G֏-f |X=p+NZـ5'm bW PŌD _8(N^ m#8ѡF`ׁ@&$q"V(X9@1d#a!a6kSkA[hPx$!qN:!PQ w .;[#m6%֤Nډ sj sбеtnڪo}@CuѡG<VOk`$}6㼄^>s֠:} HD"E-Y͛ڵ{YM^`͛Μ9;[\W`˖msː!SBE>:i~һʕ+w.1_h#GM:=S,..n,3S.tĩKqپ}Ǟ={zYd˚59s?ٶm2eag!v?Sho7*& dϞ$r*[7|C̚%GbJl߾sڴRKv;kǸŐdҤI?dȰ;w}!3wh:ےr޾}Zy&Bp8]]K,}܅ 6?,W\̙s .֭0鳟1G\j޼eӦGu䩱cǧHRzM )]k49}8rȌ3ݒ$I&M>|$PF/~\45k9~V, &$IryOh↞4Bi(9*j֬)"+wwdRԫӃyݺqNJ̐&KM.. zv[nGb1LWϞ=ߡC'y~l􃚹qF{sCl.LJ"E GD8hd;vo3v|ܸQ&ӧtUN#e MĆ? xR:r_pkڨQYf^rA)Hڭ[_~7~xv$m\qlf40_lԵrW[l+byy04lؘUiԸq*TƱa.8=zL馰Nexy: SDDo=?R Ǐ3Z-ϟ?>$xA(3l5'm  q`(|qCa{/ A[/Nt(fF`ׁ@&$q"VHCrZZt\/ <>e''LIKu R3ݯ;lvjis&uN@@7nѻym:mtoO\3e ^8\>{8YH@ŋ\d٭[w/'8fϞ={NWW رK~.\ӣFy#N )ÏyN>;l)SIcN_p/_={k7p2f̸7=)a+WO>R8'\ɒ7n|fΜ]SZ" s/ɤH%svzƌ\hq|Y_s:v77TdgϾ?E\?o? GN]..nu?v센B˾Whp͚x؏Ɂz+ d;v{'O>}7|3s 6J4rk׮sb鞴eִEV4?0y2GBՇe6mڝ9smCe˶ɓ&MQbkrի7n^&Ǖ'1¹W-SN6"Eɜ2e(\1 ٯ={8N#Fzܹt*:Qa yWwۡCO¸w~G$Iѣ i߾ѣZ'O.]"C>tޡCf:u8d۷o޻w'OH0G4HU6A)CP B7O|A<}]._u붖-ۤrK4iϘ1s|p4,!/Q,M0)x+TVŊ2nn4i6gÇ#WW)\if$IoȐo&4:-BdР7oB2/\{{=xPvܹWdi@llٴq^B={?Q4ic)k֬}ҕ͛QH1Lh;iРѾ}VVgwҍ'.餋{ժ6mZʕRטdRԯ "!|:FcB)M :@}6A*vG{ᐄkԨua s.ݗ*X0ip6[zK⒔ڷ́ԩ'Y%ʂ +7$ItZͣ;I> 6y9rbGH* 9*Kn(wIȑcTCNʼnWt {xO$y:ئM[!9Ke5y>ast/6ҾzO?m cHg&MrБUS5r"rɤIO:ԠA9sK]J}rhd=6:D9< yQCA; h;Pxg # Pxg _PxB1O̅#8ѡI qV`&_"ą/NjhNZAT iԉf5SrD~{8Ƙ h2eȔ1G| oެ}9G\..nUػwgϔ)K\y֬Ye˶ yxQ֕+y߽{UkgɏJ'O>֮ +W=xА!/_~q=)6gnzֿвeF_6,[7Ǐ6r۶6lLdRTPcǧ_f6Ok֬ZK]ʔ> [͚vݻ|DR$7*z/VK_`B5j|=ǟF1kHs8 +ٳoҤ)DU䘔.]ȑce:O]|)y׮]̙s^^c.L,޾}/^M4;xpL*U7bĈӹTRMI.8GmEX^6eyZ!Vj5:vڵ͛cYILr#F,P#'OIJG' 4IKIC8 |ጹgΜRʁ_޾}_P a\yj[>=9sv4եKCiӎ<ɄDC sɦYAj[ZwY(_cUVgzÉbk.C;vnڴYNrv5]1&y<OP^߯0~N\rU#a$= Chݺ-g 6j4PŽescNP2u1^xƬYT.m&WW>}ݻM%&8e+86mqGdGdTW>Q&۷?ig<~ }(b7wO(Jԉ/E@F@ K3f̼y <=+W5oCTqϞ5k֎1jɒe?}sނƎWԩ{V?{ E^9$` bV s"" `F1EayɰDW;yvuڞYX}UW:Tuu;vܞ=?3g%%%;?FsOo.>cbuڝXի_J֭۞|xΝ{] M;vzI$@ǎ?qu3v{%E3f,)d)@n7n"%$?aW_p{ԩpfGqW:t2%p1C 7޵k/=AC4h$I2tt:?c=*,s2D%<^tu{q1曙/eOq;[n֬ ^Ud.*T$&&2\Y}rE0cG`#F9c#Gc۟45j6$ O\v;g͚3` Bʻz*{͛._0n}Ӧ|=V4{Tʽ޿bwЫcO+;nݺ 4}7]tW̏dAzرc}/c~Tz<6li޼Ç֭[7nL/2d}1 24Y4qe~M$&n'o#=rumv|g̟4;G(^d2ji"[* K D"rmŋpQl"k ͪf3ߪUwyOEnݖSnLBPӰU`&?qMvfX,NJj۶oӮ]G2  Ȑy._~}5ױ`_ǟ|G/3t,VDӦײ<~o<+k4^-[IW^ hep ѻi֭3-n q-F$i%f6Ƶy3̸>࣫j"MC2FЈ@-[I55Cm AZ<Sp-8l%x։l#!}UwHIvde:)N'7,o9eҳPt@Y6udg5NO>BJ?%×tg/+NXk4Y i^95\SwVhZMeMP/VL|ig8khzqLKς8Z؄.:A0 Jqְg`VRXx0zy\F5cNguͫ99)gh)NG++ٝJCZzQqmAvA0mhaBs2\>+DJ\Y96 Ё&SYNR)˱9(h2TET](x*&sk`qf5p$nVb9f)1W~zt{.˕*ECC[pgоwjӻE"=w>s۳<܌&D͠$4牏|2i[phtƋzb%J(ūxѢšyfEsk*i*nQtPFH_J{kes_tHbũ8Lrԓ %xcFQ) $%OqE q*1à)4g &l@G*%0[F̙'A\EDlH'҄+BHQ Gi@\M)]h@%G?&UCf3& URxP/drJwr*ӅzPqNA*x ̃Le2M2{ ($HZ)i)P - h09%y`LW(ޤ^)Ht$ Vpƪ@…w8en9Ze6@ 14zf 4QK`&h,X0q|@=@%Ӌ(*9t]$P'xI dbe K+j%yj RK.4!TxHGqq^phgX\#.,'.kQ9."FGMe[N>>';RSi4W w_k_P-tm EӑOMS|p({l$?[.:ZsDbU,>*.ǃțz(s-]˓4z''f:)Ng*3SyV\@K/:wx9(h2T[> Y0J FmhV"@7oӿCPs3>OL(4Ge/Mzq֯gmWX\rzES*e~ $4qČ5b\Z 8Vʕ4#`Fz+ԋQ*xƃ2FsF2.ħĥI\aROzI&)P/K/ձczС#]vo$g TrJb@Yj8R#MiRҰP)82(Uŧ,"S*SC 8#%)GW4)jp.~8J.DLP R:J ]F.%,(YRKzqK=eS\ Xb@Y RT5▣_&)ݼM]Ft:}2bB@ꋳ_|(DّC>6IG'#CڬTG-@Wӈ5y#rPdh}h |;5\w'=ѝvg90mC[0n#Eu.@/xcڼ“̩SfݚfdCq[>?hюkUAGi 'HHs W>丳X*.-@"GР2yO+:m毆h))@/Ԗmz5oӿCWg}t^c{{pAiOxə/=e0`) S~~җNsOȸ.Wbي r *5"E*Th 弪.Hwx)XPG/^jdt0JtKR#pjQD HlJ(UX IIl(sN GGScm1uT9ц<0 j~B{@ t9[;ǫtyacs-ZE/=5[OZ=ooշcо=}^+ xa~YiO|əӞ3^xz'zvMo<|oʔT\ |JpgA;v+yKycb~3jDtD}&)VOfnnflQaëtu9ŘXT ԨRJe'ƜR)Mt'JIJq۷xeW`/M@d?@A9oTosغu5j2v: :6mɬbOJG9 5\'Y ⟣iŏdkYwS2B JtG$3 (S0TT'wW7(@/-@+zٖWhu_4M9_h +¡Xxк&LsQhjED4F)g -\t4 (, * Vq9^2/e. ҍuvy|l$lf;3H1Prmh[}9R$/XD`U4hQEN5 & ޵"@sO"]y؜{hV}[>.J2bB@^ˋxa+{9aK̞9iS_??S??G_Nr \Mɬl믿q޼II8kמw}^f΋ƋEAij*۰NhdJ(%mݑ;v|Ğcj5|̾}79K9 'Nħ LS H؋V(>YYN`YTV}eLARny˗'9CnSԪuW\QW_gn=1ӅOSISaaڛ4iaæɓFF'2E*LU{ͷߟrA&, d~H'W^Yw޼\VKB`[䆍-*l8 d"ItcrJ&T}et@ .$٠A+Wz;5t)\(kKڿxUMa̓ XrƍSSv޻woW'!ae=i"1.1QS =InzpnjK/FbI'3Ʃ(Ԉ>eTbseWL>ӨQc,1G"9b1PHv:ps=ŋVqrJ/9GrT ``ł;,~#ɦGU^S_ %D\z8SUTgr'O64h L9@ m}6^CAӔ !"/D0 8o'ZXjjED4FӋ -\t4 (, * JY-@G̋!hY^Ǜ>y;ӌ6\g^?6 M "곔7Oc>I^4kFs -DMi M=sm*Ny}V9Ǔu!\nwn2Sa-z??lxY<+x)fړ_M_O{ֹdيVXrrUJ.Se|Ѯ][n[#GyChj|e.\Ժ+V%J +W M뫘x+gn.qͦM{YV֔h€&\^ /JT6(T1 \IXrJ+f4I/?zo&%CI^vo?J /ft 4C/&Dݺvڵo:u=~Kn"U3=8# }9%GFD%!}t<fc\R\rIaqEVF͚Ly*)).X* kySq7=ӏ?#O )"ADhʤD̼xS$8dN2#UkJ[wp33 uXzqƠACm{ V@/.…{n*kԨ [ꗒ69Н HS#I!G.E]VzԨь/P\ᜠoLlBKi/Sԫ׀&\ҋi!`]z3gރ>L IGErdBl>J ɧ'jh ,-MiOZ3Sf'8oqO؅"%eS&CtB!@B^m:=6ap(u8N1Ԋhzq8ZhAP Y&(T4)@'F/[qe M\@~}99LXV'gNgӑ$cK9o?I~6hoW? ";h&dNؠ9o4QR]陾TO OqWίYM4h[Γm}>4M9_h +¡hrL FquVDDӋ -\l4EG o^(, * JY-@G^ˌb, ?/;?#˝tinCo5Yʚ5)ǰ1 rj}FE'c-$R~ͱ$Ay[.CF ؜{hVG۽}ԏ.埼זFou|aG`7ݵ3[[>}ɧ|F?Vrr+Rdzڶm=K5/p)T4knڿ]{^z+Ck:,YhђO?|o+~ڶm?|eV]~ĈQ{ᆛp{~͚_c~̤Bgy뭷ɏ?[~#6M{z{URDRz瞛JҚw?~K7l4jh|Iڗ?sZZou5jj՚ ;v:x/$Rwܾ}'i>駟STonu6ؙ .E39cCd1)Zh,{%Pժx7._L>#)?2uQy-%:t”)OըQ9 +W۷cQMp^O'?޽I\G\AӦגÁٷk~1\Ry\G@/ٲek?.\;ZY_4iҥ˙^H>;vz1^|2O= S-7+dr饵s̻{ٺh[]nwU(Td5fX}5/pnG?l4uԅ?kܹ֜AlwذÇ#Cfo׮ݹvލ3<'gdua}w01cfjjڦM<0nzpƌoY\r2L5sx>+ٻwʕ+IYC'֡C>d1Ъ,cCmPʗ/ZS!d Т> J;.>GF'M$O-3 QAtB#1U:EXⳁ.6^\hᢣA7/R|(&Re yVd|~gx3y8iW7+I93T M q 2usΕ[\u }RMH|V:1ZC[h¨Yoo?8>M\_\:}ے/,t//r6hÜ|0Q:% *%KSM[~R\~~RҁmרQ8vGtuWXn݆nA^zKÃ8Ba˖{XҷJj m1f_Mb[֫`„'~س>O& ^tzF -^tUhqZV1cu#,m O?_}5OиT216H6lja~(FȎFZn;t.]E|>CJ qCf}glQx믿e֤DG|?`%K7jԘN23cԹsWr*}t|RRC#.n )/~nݺajպ '_xXYIJHbz;Wᡇ)QSZk>}ƌMb10NfM^73Ǐ`J̉\h+4i3r˭-yǙ(͉@̸^K,⋯XC ӧ˃1.\EV'ׅKI>oξ}/.eZ~ܹY6 >z \ Sm^ju&J2b&{޽W]ՄaY6/OTIbUs)q MDJd&3t66)ι5|ؠRGzg8Odz=9)S''E>C>ʶ迀m}>4M9_X3GWChc& u)* pG Mt0y!2#Ȣ,JY-@GY|>jrdbJqgzSi\{.FTVq?s7hШvbT2wnѢ?|MP}ɖ->: ʺd3ϑWř %eV<"%ԯߐ$1QB;v|O^{=Jk.!aα!&Ma iJL~bVPjʔDQNfkȐa]vū~ɓ,mnX])U ߸qO' dŊ/R%ի2FҠQ˗'xdpM=z֭wC0G}<)5*IXCE-Z1m۶'/"p5!U3dK\i |ժ5݇C ٷo'|sFG)RXVm6%yӦJP`:ufͺ;h,M>-D6b&.)qnVV3O\͉lIoݺ ǏOJa5xPa66o:v8C.X .իW#.0)qz]wСNƌO\Gy>}ر4]x$%Ʃ?O<1ɐtܕs.޽ W *[l`'ѝLM^;knRZY3Jefb#(0\SnC960g.@'JY%+ljΪ dzROdOwpӼ]9;r~Ȧp_@ Fgtj\sBWn[/4 hc&(u)@Ӌ -\l4EG o^L|(&Re Qp¡f: E5՝y™J3HmH#]GA`З#Zi A QI5$" S62ME5ZyL9V?A< 0jeE6n>g_m*)@#:k{zU3f/yhӼY7sYNZ?k{صv 36}07,SRJ+VT|RJ׭h˖mcǎi+V\D) ׫`˖DѦ/YG}_pA>)SޢEK8V}K*SF?/\*x9i1CbJ\uU;w}=PIN"e+d \կߐX>}ƫ.qV45jx֬9/*sڶm?o"ٳCȵ]ƏƚB-TH~?1n}GY"a WȵvN2t$nC_BP+x!9?R&W EVۏ?kطo?Ԗ)$ KIQYcƌ]z̙[%Ek޼UkAҰ:9fdh瞛zeWX`HEu608'n^xŽ{e;w]9ff,/0㟃 ٺu~$C.:&$CP 'OIL^zMvփ%Cdս{ON b 3 ÀjСӆ [̣X^,1Br;| Əϓ+@ϿIR3OdGU#[ @3H5PHNs%gz<9._8:ʕhyQȧl%LkD3\nGӚtddXkviBS]CӗcuDӋ k,S䁦8ZhzqBya}@dxsS.0ZCcrdgEtVp\NWPDzαhv*sm* ~_T;==e^Ӿ˰v /{ݻ|" @_7Y{VNOZ7㜃[wjʯÜ殚~ʔl*+:1q}=PrU4iڰUkmfU>.bɒeSX4խ[_hJ*SX~"Iмv=uPxJpko)fѢ b)SK-Z"<)RL}y:V%Oc\9'dK \uر6hqɞ2dba@J yK%+5yTB z]su/|0]Cc21.]ڵb=ԬY~_}u]zi-VI;vl5jF0`޽:wJA-r0ɓ;{-VМy]^x1eK"C`Ȝm~Ӧ-#Gyqݺ E/nW?С14&Qްa\&jK=#Fѣ+˒Kfx⥓&Ma3ޘ~II:u1t䎠/> y~"@j^DbZӑ 3kU>Lys [? pl:UJ[4}9&Zhthb. ,(9B"%4}9&}}a;ϟI|'oFZt8ZŢthR/"P#h._Pzl-k_m*OzrZnyhN٥^6jb@~c;8Цy'.:y6޵rElіEn_3wlۍ5,[r+7ҥԾK?.X7x+^ѩYp_suDݱcl;[-x*WIY :EQKk}U"9/_n˟A.]N"v:ݛzլY{#(M;w=p|yO?[Ɠ#H (Z.?x~ʆO<1Hq㫙'JӪUk}}y<|w0n}$O͛\ncan[( Xtq4Ś?k!8(.\ئM;٪Y}g6l`PTJzEKK.)L¬1KNp+T`9e=pd O`ϸxÇ5j";wLuѢGk$t۶w]C ♦bFDOغuKO&L I5]t*0p[ng&N WW5ӧ_f1c:ҽ{O.7 6LA[c ʘ{TWJD+9ÝI<57hҳk04Ltp4}9&Zhthb. !By8,1kuz<.gryfil.wXTsWvZd_1ɕyh}xt>VMuS Сwjn' ,;oyhC\=+ݷΥG߷[ o^ٖş慟6,WFʕ*T)WlUGs7|{Ҥ)fٻ7]WTe;>8ocfnu^ ^~ժU(Q5kqZJ5^K[p|ٳVVw~Z:tz~7n :Rĉy罤Ӧ,)/}ń O?x쥗^)gnѸm3*?.]=c ^~ba\x&Mecb%7?3A8^{⋯vsP˅.Hy{צLyjիVߣhn~{_~}=p-H=O/ZxݺuW]դP"\s{lI.]t-d[~og>y?Ms'6:tĤ1cƲY )em?&dscycyM³9ɯ{" C>jJMy+ SIq3NL9{.+Ǐ&7c ѰjJ` Ђ/D [-\l4EA%A^\&gM_In_-@5g_?;כd:3S:ZzE5>hCȟ y䈕΂m,y.%«U@/AxMftm/hqO.Å={lnqt'۽~ٷl΄w&|mW[|ys>|: ʖ⵼|rU*URBe oq/ݺus{]!(MÇLHX믿i׮_qE瞛z=V4Z.t1+W-U oժxG&O~8ĉlٚj՚[r֭%KROܸq̙nAb4]~Ewy״i/ˆ4]~1bN0{R"'L ]n- Oz7|ŗFMKr+1L:JMbӧ &M"Q. ;^nfroVZo]f]~ʘ>(~uXrp8h2Qk_˯nٲ嫯sIO~ۦM}7)2uF2)r۶XQ-Z"YaHs3f̬W6$gap *Bdif2ٽ{@f>Fۛ6mbP}%K28[^}] KțoM˞ }۶x^z{_\} ,/`ё9k+QXLt͛Ē47gvЉSR㇕EYpaN]"p뭷S~ƭ[I;ZPɨeQ͌]ų9O9 :;~xa#4eH ҠFzFtw)"gǝ~<hhrs8V)9lZhݣa q8Z(ҳT<Ջ Pyl10>^ӳ9'}˗採Zs-Im+@ VM9JMXh =MU3&7YEg+r-Tkgr:n[-ZE?Bxk^ /;P_@c{~p/Vv`8Р74wYV0d_/զ+U|rUX˕7,axZRe3d(PSxIZ-.WEStƌWwNV3 +SQpUPQi*Zn%JU۶m߼y"E]t%w")1ci.KG MHB, S !pH& M ްP&y*ij jݺ#gt|YQӝD0,9SJ\(4 3:l#eIC-JJ3@ViiN}qŊď?no#"$ ( Kj11 qe r&\IV}8]ZR&DRU*Q)HH+5Z.NveprjD,p9fA.K+sHA;f]t+i~NYI fŧ+H/e)%[R*;eI@jRs~LlcW _'>OP>0609a|0V}Rԝ}l=gUH :;ɤ{S9S Akbc҆Nvfy= ʜlE]kȹ!@gt|hݣa q8Z(ҳT< P l1{ ƎAΜsԬT3Hdh zk0g ,Xs !4gZhAq TMAc6@I,( tw*'DvsWpo#@Y!w!@Ӕ2E\\KM!.z~66ڢUDa}Ԙ?BNMMk޲{=[wܶ#==0dDP>cO׃~ڷIg<ֹ7=uvY};W^Yl+:^by^˕+2)GB\ hŋ,c*|M_&:+4Ykh+v||hrᘣ(M_=qgsrD4FӋ -\(j"T< P l`!ym|PC^\FÑ{,aZm.')b#>gQ \4D_vgz8= h:UH}x(?RV,"UEP+ܬ[>rmVUҚrQJYB YZTEpJ1PZ)CScd{=9=u{$JE[ϣ(gfhխY: jq^4챀}xc{{ɱ~صm lwpkgZ3cꙻ~׮[lJ*VPtrJjS*NuXLJrasWY*gcsrtrMN$@kX 4GD8Ғt+5×IJdwzMk Ђ;+t9"|&XEhrLѰ8FӋ -\(j"&LD L2.X”Gӗcw$"0l;;d8NWەLur*Zj$Du@͟^3D| )4 0 @!AGyt~ СXoS &mhVq? з|ݡ.=eG,9jТA:P[N\hlvU3v9W׫_LŲʖ/[B9 hC6'^+&Hx66/#@Nob'TnP_@8SҼY٩ntG[ѵt"s`#1ѺGD M/.ppIL0P86ZX))U\@ǿm̂7Ӂןd;LOf.ڙLu%@G)Ux8Z|*@KM@Y0: 8{ҊFYž]#%D65 СfAjt0>h"z5aC3<՚%@sڶAGCC[aug}Y<'=lwf4tUaײ_]>c'h\tpܤM69mс(]jzK x+R|re5o؜O'Sl&@p$/[-E>NZs(bsDfJ2~܅#%ӟ=p14eS-{.7) p4M9_ʭ?9VA9pQgU/D [-\l4…&-2aD'ZX)U\@ǿcaDncG_vvFNӓ!3t3ԗ5V!ҳVlBG $U}}9t)QhpfxhJzVb1OSC"$gMU$@P)@ZBs*@{\!@;yhm*'@_@[lBY'~1ՕIqRnq)e еt"s`#1ѺGD M/.ppIL<Gr7^PgdysYTGVÑj*ʬ4oSZI V}9&'o!B3* qn !@]6Wis BM`*졅 4 80 Ar%@{qtyl/h Əغ ;Dqw‘m m%?[el~쬫y"ՙl95HudOv'+鳩A?B]k-@!1G) VQ8"{4l:NpG ȄQrhc 4}9&!tyNi } Ye%%pyв-: 2 \e9*h7̪!@g[9"[pDڷ]Kl4emoӬg:?iӜn{(q9\U~Ҽ~m 666AB$<3*@0HU)GюSiV<!il:9zsǝٿ9|;;m:sLV/gUP/"s`#1ѺGD M/.ppILN,lj=a,9&@Ǟ8,IWe3hjrݟ=Yi.>GРCO1!hzqSvDd3D9P1T_,! !9Wv;3݆МUOv9'U=ɥ"W)@̟" > hWn' y0sYrX_[+z+Vxк+49 !mT(Y9/,;@m<}^vg@<4h=osm*ooջm!m:neݽ?dxPnw,-87/>c/:cMsne~_L)C^mlllll}'@?lߩ\Y![-[ם^,eefՋTHKuYTiJ]8ִhMz:iѤgAӗc MwVZsDBs8/R+ *(Ǐ&6J#1ѺkHЀ.`5V<8^)hD44FӋ -\$O|xJ'ge8aznL”h -I (lvzm|ZcHҡ*BSSz6#f++t3 g` La:(%Ҡ糪zL 4p:({(ĩze"^{QMb[oBDKBAՒ*4G!8k0^'ui>(†dC[SS2 ֝4C{ٽ}?tdPu"@?[ytrn޹%6۷y ~ؤACB*mcccc󗤠0kJꭕAr3KqxӼ'7~CvjDg+,[!ݭ±-@]C+l:ZHڍ-@P]*>䩛jna`7U7.. VQ8_S:4H*@z૚@/CL 2HxDs-S [)E8ݙ~I㩑Qn޲-wh]wqgczoڷk߱䇝K޷Uq,;sąھxO6\J7*UX8ko6666668.@dzF8J XiVڋC#%ՙNsR'oZhhMzlZ[!ݭ±-@]Cgkxh"˔&(@)*.ǃ=Z=4}9&_T=~׈>yg;3t8ɶ]4gK8 JGPhYW59]a`"}[3~܂cTczwG+ݿ]dh8{wwg{WޱZvMtECZZTP|⬡؜㜹dC#m7m j,N$;d7͓s•}-V4Yh*7#oѧt l9=r( WVi8U/5V<t p0[-▹ ~_N61y.;T8RZáfCn_m59"!4Cg&@ g*@gWJ>rUQil*@Pi`MAppnA":r(u91h/z=.ms~-ZEMukv@GGuuW~ {$ @us=+~޷#?]~dOޱe"@7ihla~\mllllOKV6Tc eM!O-;A_:<]RTS!f!bQobaeB017"n/Д_xԨOgJ_:[ !O+4t+d 6/ڢU tn#ݣ=>ٿ6Ȇc{V|ce_e/:swܶŇ/^ _O골ƪu,VN8S]GYd?s؅״hMzlZ[!ݭ1/Ɇ|l[UV !* GCӗcuא/hzqc-\$1 vcu/ppa(985JzkO9/2^(H-B26BV Rՠ5=7 t4Bh-[?E-A]nyh зѣe{c = io;rKҪ,=}\[H\0 m 66666-Vs  rL4u8pdK|JK6t׉L_;'A0YChҳ` ЂUnGޢOnyI6cZ_r( WVi87AӋ kxh"qt=hc~9e;2 :r${R=iT[.0К-tPJWoi YZ%h˃kYBV)hznb gㇰ18_@ n.-@ۜhVqt^w{@x, @sio=+~ٿ׃k89i{ޱXhBX1+[| Uh R8JB}™bE$YZ+HƊ95KWZ#-q"%+5:s2ٓSDg+,`ÑC[cA6VY9~|+4 M_]Cʛ5V<t p4A”(e9NAl9+aOzO9\,gۙsg,@g OS&'/!@s|=u3Gms-ZEtVnGvZضӰ݌={oȠU?X}tߊ~ڿ꿇zx/Ww{nGv.>c)(/˗̪8ko666666 /@?l)L"K٪P[ʈM ܬA,!-eC eWj'Օ;uܥ˄tg9%@kMwVZsDLڪAgdA5a&*VY9~\ Z_h5As+~DkM/.ppG  CRQtZ,lj=%@?eWn.Ք>rfg{l{ޡ 'KgJseTDZz2TfZG?NpZ$fw:5 D1H'+PqgAPr$`qH4K:UcM4k&Ƴ.hu|N`ՠ r.se]נ7фf+ar ;Xx=F鳉ojfQ6>xf!ǫwrllIE*@{y$e9Ne{S3Zqsw׼݀6w>[1;ddG߳XҪw/iʣ9 z#;e7]\YycocccccsNe!@ׄwk09?{D]8l:6a8tA`jM M/.ppG  C4x{ Ь c\޼sޜ OFtVs;QpЁt9(@oϞ2*|t"@ç@hD.@gUٷ97v+/]4S;-8 ] ?Yyx)1Z^;h8/]K?e~k4ߨ\*eʕXbwxR{97 Р .@k(8&~kh!tj!@N\T/ՕQ;+4YΊmÑhX"@S*9l <G M/.pp0D?[&ǜU''Ԡ=Ϣy9^6OTGzr1Ѻ8Zh݃(ELhs@A6+tʜ7.(ά #å濘>/s1hѠYڿ=OX+4X|yȋ!@{=! QsPl|F[^ۆseQcSi^CNMlݶg=[؂chwqÔ}xGVڶD4$KZ?]qd}ߺ%Z5 ?UмPJrU*V(_rEt^9n 66666g*@lE y`U9WJ}t06nJOs\}91 !5- twj7Kve} MwVMhMnGi E,ljU>>sL-#y.6Vlthw~vK7~5!hznL.&E`h"@[ɗc~l WDi9Cb]|ztHAj~Кdd`NhƆTGӯh;+4Ya ЂѰ E,ljU>>sL-#`UFӋ -\l4E ^>?ěţ5Eg3 «1Ѻ8Z;jҰ:=sZgE@":[13R@ .G&PS\ :=7("IirDhMkV4d|z(РChЬz Z >zϕ%A_:-@ۜr =tۦ C:{ц=;GNڲ.;=жǎew,=VCNڼevUeT*]L]|9執*UQV/ߩQ0nNJqebSlX6SIs ⹲u8XPF,NA `!`| `bJ*Uи$BcҌ.zI)QrnWy40[L$g DYrB>EfV5*P<6X!e06[VU\:5LR3q(qsQ/Mrcfbc<@V+")BJ ApD G]`ǀD 4Rɽ:bz)BH&  BjJennЁ̥,WV`sFJ*e@*X[c˩8Q r@ԨVFJ=dh6"JBh5C6 ss 3 yKFټ16003ZeIXkL%U pl$kzO:R0 НYo40H/,u84bd"ݥtKH&)3QԓȤbatn\jb  O[ֶ Q7C  ԇ +fOSLs9R6NqgY_ؙ$LnGӚ#"Bs4r~tA)qbS >#:ZN0 Z8!b@ M/.ppm:~+,~L|nSd~ţ5iϩgfrm5=7&ZG qZp-GE$fH9=>[h2ݭaPi`jǙN0*/4hG<( ,;+hr7Un 8qfA@6dςEnGh-8 rfcTx<l0G$7Fgr1z '{. 1,y)@PQ3esxSv<'`^'y,pN+;ːΓ8%mY-8R3uբmv4s{٫$&ޖy遭&[Wږph۲[L\qLڼ+ftG2V,_b]x"\R .ZTJzb% *rEp՝z^Ez/A@=R/zWTLr*R/NL@đѪ5`&!T+P, JUfԔ-[x%JžViESR?@%I9(A,eʔc9J+GP3#f@z44&QH A*RXɒ!{ЋFBP#iSphT5I#$W]8bQZW]IjJ.Ea^|q!2 e^*~OAbLA#eVZ\X&dũbbQ> Qz1֠{ҋAQ) KM$IJtȐ *Nj((ȭ&\&PIr0?l J,iU#2e"] 鑀p"dhWF(V+X؈%GsFr9RObchEP嶥aYÅ6:W)8y|9'=S,_;;mlđHquAd\d}@ ZQ˕M)ۜXEg+'wpy.><e|q{S3:v٪M]t>{=ඕ%۴dey)GS6D[ݸ¾M 9.e+U,WBʗkҤAC{]wݯ߀kT2WTycǎ1bdϞyh/^U3Ē#P%JhcPr2ej hX+t,YҐ *AIBe%+ ҫZ͚8ǃkԨ٢E+f@ǒěAx *E Hb ]o\s]n=j׾SlH{?CYbY ?N(0|SmqMSEZ.kٲW_#bɸ$77#+#e5Rd%*9b)cШ[[ $3.*配tHҥ۸q2MP/+K5kăD^dL05 [osr)@z QF $46@$=A}ݺ[jӠA#쉎+*{ YQ p*sKtjdr*MrwЉS#}#q)"Z)YWu^Rh+ijjcB^`S'J=˘ TJH+ۺu *Ub**rQ*ԫWuu'.3HDW5&̊/ZQɳiz șV#6J5v9n',̝-@ۜOXEg+ m}X{ի]8w? IoYvh[y޳g;8xƍEJjS-ޤISgϞm_\zd,b{?!:/I2]pN= P.@h?˗'LrE%fY'|OpM@l%rgLp ݺྻ뮻)DɈ0v8SV Iwe th]Y"}ڈy.4A9(@p J}VI_b@|^\hbcZ0D  Ќ[j]^lǛ20Etg/DG>%,!@+!XS%@'q^XgŸ%@#b#.2[M"<$azy"@m74v{[9߰Vb^Um|ݫ]}=hwm_ а˲WL\zh۲[q,Q{@T\eTR}„Io+xKo۶]{^|ʦ Zju6lO?\eʔUT^KmsQW4jdOBX@#ŋ,Zx".ŞVIHx(cO8Ĺ&iS>TGdNg!8!ƍ_rɓ!"t ' & QC219TJG 4I/j޼SO=ӤISK+~"!K Մ+U,!KيtK.3^}鈓[nu?(e\ĘKI/ Hpbux6JQ/b""S7vPW {&SθI%\2GfpґSD/E_2Q/e˖BbO 0ݺ|5X?K,JzR)I,`IwÆ̙7qctAъen=uWL>!..*J@5}I&lw:t\H/y<#brH;8産D{N%SC 2~Z.çIVE\qN0c B/|ʈKnŊcǎaF% x<#n?3˕bn4lؤj&UOWznL>]D6?Kv<4^ ?帡 .CDx0thL|}6φ,r<(c%@A qMrE} ؜{(Y#\1h3"DnݮoC[=sĨ4[вW4lIY6տ ,E xc۷O?tW*eenoQw˯)-y]cwYn}O7_W]oTbPo vwNz@SĬ8S#҃X#G9j޽֯?x^;t-1Qf66rj5tÏlذiժ5d2bĨoύ5fO=LvƌiA kgw9S."V&M^MpU6 GZaF0dʺ&"|s3Z>L&OA$s5.]Nt'%J1%KMsr]wwYyץѣCZl2r;F5v=^2XRHrJ L î]cVACorŅŋܹdLwmѢTK?4h] ņáC3j^K%e˖λEjO+rŊw} /ƕ V1b[n@LEGnp᜚;hNHOM^CqH&s7^1Ix`arLc1ZȁV I}BEx0.f,\Kv?aL8MLOիreYXdTI}[*}5pCAYC΁`}42GEӑcF355+-ÕKw$s~w~l ѴXg y>mă:}hr~3Yt|RZ0D K І8qy'N7DtӔkFR/Dg >.>r4يWB eaHw՝N|"@.#?JV)H# Ja^tQ S v7GѠ>!|,jBtgIC>i}eo+jЕ?aÆMwsϘmj5x35R*{9vXZF^o7ܳg޽{w\r~[={߼ʺ/Zht;v޽g}ӧ!^͚ݶ`{߹so۠A#Hxbn;Cnݶ}N2!W4csrxitYnK*seW|ߓSHrwu7abٳ~WIIoY.Y_<M2$FӦ׮]>zɋ/%Hpo0~\/}ĺtzZ޽YL"+[0kׁXTر P?p󯿞~~;~ f!:DR7t e.W_Mg}O /GS5L/P۷?cIL܆^5DJbriu饵Ap)9>o۶c֬9~ybvFo.0MX'%&&XŊ_PY=z X}yJJʶm&ިݻM[dmlٲ 8${Y}NJ>#d ѭ[nI.СCG|?y,/.Գgo=8 1bTa;nrHV)0]t99_~a2g+^w l,i 8̜9/f;G Lc=/2ɜ9XzL0 46ej8-RX]y|}8;g~m azþ}y03@|G k{'3@d !4Xr<7.:ēpȐdc1!k{߾$dCn(BTf42,Ԅ~ .E>:@8!SA}B*\A;*Vazy.%Ky+Ïp%~'yV@{__gOf^eCC.ϮVڐEnٲuk.\|73ϑ?>g cj,rmܸ Q Ȍ)dn̸*LJ$4֨J>+%9m*@[<еc B3HcԬ /͙>yܝ-@th 0$UkM/.ppg-\/(@.<\!?;!ur3%WOhrL,2.OAVZQ+>D ch!Bp4f&+ljVxtg^ s\5 ~Unߩ;wڭ^};`aZرUI߲|e6-ka6-#pIkVZq)R 7oذEV/B8ʺ|331q7\=dҌhժ57o}㍷ڴiWeI)=ڸLE˷NHX%gz;k@g;d0q 7#f[Pk~ǎ]+Wf\Ǘ_~~L,]8]w9r;xz]uUs/_5Ō4̙)k7fapw.\cu-X+0,Çڵ%n޼eRҁyX?(tޓpˑ[r(!G}l}{Xlҥ3̐C/A{}e%-[3fncmI,` hS걹[W^˸XڵKy3#G˯$믿snH8 رcgfȅ[;B!gyaNM[4(f+ DRr՘^{V/+4Wog>H/VKO? ⋯5j,dokhņJ:2ҥqY/_RB D?!!ĘJ(?8aoڴN0i} n9sG_h"|/ Me =zZr}WlJ+ZC~>ɼꪫ5/X6|g'3Hv 93ՙab쿑Ϣ#1ѺQ(lPt&X\Wv*@} СM"@[4hcw/| 9Qѝs1~Ϡh>[5h|.9ZXA`:Enq@:wڽxϐ G~Gl5>6޸hƅ6-ܳqApp}߼`6l\TT,_9(@?woҶm;l"뺼0觟~S/TrlРц #F 4{ߴi_|UnF7{ 6{mݺұzK'Mz1/IRp_|#:n}$'U2Ҥ (nUVo~ :G#֓O>M7\lO?[LbJ4it՜0. 'D=:/E͟[nc=5\yևzrE֭dɲ^zq(Qꫯٲ%q֬9r7IOD+իϏ?xUMhf/*>t`.B;7d0fڽ{マ+lgDzp]zbI8Rᆛ֬Y7eS-ܺqf&yG\tzQ~7ѣݟ(349Gbj]vmw0(,'r}?nݖ|[` ,^r%︣>%J,V(MsS$$lƌwڵ/ kSF{GIc:^~z;8xڴX{,S~71:Μ9kdK${~ƍ45Lzƌo;6mz-}9Eg 3X2!-[/_ҽKǞzIX8 +EE. [7v8ʢ晓g Wr(0u <.r*VTK1rӦM ,_:tzqܹ;ksݷo?Z܆$ kY^zi-ẰZ֮]ߢE+bq 0L.%Ôɧ/UU9xj[L$ n(칿(S?zyL"vqĢ;w̙g_oYDi۶=/xqbq;0 .p'ׯتU]C|<۴i+ӥ?~}ÓG.][DK}@2dd9Xϐ̏\hi`xfl(X"@d+@Yl(re!;[vXHwI+R\Nv<67Et[gO-@GY'U=_Thzq#Q$xG M/.ppa[m~2g3g?ʯ:S]) LMEӗcuCp;犿4wkeɊf.?jYiƷʏrkԈ>iڙvez@ : йUN$LA2{QRT)@cPU͇att}9(M-1s #ZltYĜ7J}hZ8?c=Nۑm 6VJttڹېF?fqF>tڂ%?X뜤-6/Nڴt7ݳy loZ;3NIFeKW,W\Ud*UkLĺu5j,ړ(#%;]kgϾ~8}۶XzdnoڢE9smڴÇ= _NO? -޶m{*qxUMѭ[ V\ÏJ&%$H-[?!d?gy7\<'%7zA +|~9J(EK.8q6jҤ)N&O~HCcY3^{ 3cM^ LAA)irhV5,!M.iVMJ#9=+%M2܂sv*!4:zD"#p2a#d<}ܾ}K^GNM6vFFMB &"C<x$ %={!{%7DOQư)լYMv pR-/蔒a2k Y!SԦ/N@e=n̙s쨌Eg;vlҥYN|S ." O>I!Sϐ(Ӷm& ($L7ݳgKMR|Q!8dS_:w≧@` s2d2ޡCf=|(OęE8G6oJn)+CCCWZ-"aԁ@4aKQ3 /YxXiR1fˡ S'HY(E6""o(}[}ǽh]t6׏c?& =p~aI5P#o3 _a /~t>,|#;Ib)i +Ŝ6|~Q3+Z^/A / -iP -R )40<cJ C677  4+%G"=ZT h ,\_8N{ecH ϔB֪/nҬ3h޲G}:tحo@v>ιwsnӻn~̮v<ɭ׎oP#{N-V`/\/߀>sos8<|"̮LL]E)vh@3#YdW]2 Wdx !TVܢ߰ao@B۶mֿ5k&{0N_~㫯YLPJR'8CB6޽e\_lc8O>PVdlg3by 3?Az=zY$8,)]nݺ3xL#ΝƟ4kcݺo6w|WRҥ+oF9ڵp^ITcǎꫯe"k)z~߼yWߐk8{Y氄tؙ[5j_vޓ~1={!02e@11bW^zIv?e4$$O~ׯdt:uKnd J}AX5- 0_>d_s:utx1*Arڮ]"$)멧$ ?-Cs!25?iĈQ,Q ,X9-bp%!Vs# XYW9sHXȡ@*Q;w-Z/~5V=̙-Zdɒ5W.O8]24UV67x !0դI3җ;׿8 9ԩK9_*/Pf] 2F~dwL+@w1E($83О_ޏ匈vݳߵ) 큅k K̎J~8 !l3qXGe ,|#a9,BIFaӅ,dcF ~9]0鬻].;u/N}V^\3!Xta1DH&v}$`pп*-Rm&-HA@{5 ؽ/;%VUJ򴑼)h&"y:l>}_ q*6hN N'fsv `-x0yͻhսM: 욂;ox;g>F6 v#|+㛮;tв]k&/X0W<@.߀'Ozz<#:¶Pd/]cլYg~vU/nܸyҤ)6mqVx7_Hر׬YG4f͚sڍ O4yڐ?PVG^_}ͺuLe˶KԩS USR'$͛ox1cƅl?5c,Բ_wÆM'N0fΜsֻw?r lkRzN:3utgɒi3Gү߀O?<(h% ;~I9v_?9M"4oۺuۉ'm۶#>޽pᢡC "+W͞=3jԨE_La#mժ5k*Vr .-9r2gfJIQc[D$wr͝;oȐD9^&)g\N/^$dgΜy~KnР"ws,3#&&n9 ,Z8&3?3&}Μy8ܻw;aJ`t|Db 2 r a*TaY&L ?J0`Bb9 cEr 鈥sRڴis52kȔF|d`„I ,9p! ?Dx_Mj5Rs:d!1O?K0mڴښ&aϞY/_駟M޳gw+ӧ2O$,bJz *ҧO'\r"Q=z$[~™¶0}<٧O?7oSϐ r<<8k6oT2"q Yjٲ Xg"Yc{dٳ`HΝO$ grƲr* +&nݺt2˙E/ euь3 l Ӧ/ҥ[\}ĈQ,BC ~IĄj6dZ9I&-a*X g~̶LNr<7rXjuKNCe0;3?;I)[s;|CGX*OB }qgן!#'! ~/CS̋RC@<& fˡ V(:؃d9u!1 3pи+#".}7>큅k kt`5ؼfZ9ŏːAXGKw?rX:Ifr9#y̰RiÇ YS[򡢸x~q]Nwo=U_ݳKt3 ., |%^XfbI5 ts M%۸`q1q)`vcA ru,j^<$-0B=N@;q,M)g j+X067-fc'}?\Od)1ɝR7!m"ʹra!Sۊ %N]O'/~0g 2N@׭ߦi.ZtmٺG7 !?x ;n^wtȝӛno~r77_; \9JX. ڽVW Zkڵ_hIn_4˃:/H ᐲvw9qBQ@ءC{={n۶͛hgϞ{}7`ܸ ]tz⭷?~#bբE+ѣמ=Μ9}ΦMJ$B(H0 U,Y~z׮=5a¤;᫯>bĨcNر{ѹsW'x O9vx=gϙ/_)Spڴ S_{ БS* )6}L4%ip7oɓ?!<ѣ ժՠ 5s찰O РA#J>zܹMԨQyM /INtuv:`XX k۶=۲ek:zs;wq"Zf]z ecP Yn=&6lbN֭>i0bSN*)sH~N:m4~F\ƫt$gr f߾7e\y?ɓl&;Ɉa˂atd c-ԟz5k}6lĐ'{$&ruv~cǎa;s,jVm0aEMv7?D׬C3 y952E,rx*2B9f [J!5֯@6hbE"a`漦z c0)0Xt$Ftj00Ԋk6SCM /K@#Ai^纫> p~ɭ p pA<,|#2d]0ŏ|}Xٓt`Ӆ_V9m0d8k¬b]ny/&:s/.瘸{qf~9]X̴o*W}gALo=[ /D KJ/Cb?D/VZcI@ hS'Q qIaK@3YdRM&Щ!uZ`! X ؁\)PZ@ hoM>ra;pytofٌ![7kѥEnj۾O_\n\}+|u7N\;57Nz|c.mrlY7X9r~zϕ[/odʔGtyDE/"ϔ'x:&?<  9MhD\$X 94SO=3hBBBs znWqH$B)jx@CܢY "|g FEWc2(yUSRJub%&F|J sI;r `EԀ!^㢉q!DDN|iEE"HdP@"q(eg29Ω4UTԩ3}≧$ȱBZ'O'̜93}&9KP+xH)DMZum4 GK^("rxl1"%1Ŋ\j(\ n+xYu%lPЈVA12FielšInB(_~ٓaF0\1_6#Mԑ ^)CZ)P.> 0GRG.:xQ,YkԨuaFdt*r(3O6_|eYfeHҝyQ(t $ad0Tȡ }`U3eV rJgH(kJ ŊCHV) HI׵kS'JJ9tHҕ84!Ɛ鹓өD  +1'@JË̠4Q}Hrc&MY,ƍ%rVҩx6+ FP:\r,0J!ix8U|J+%uQ#o/E¼2+'8P,R XO҄94k׮{̹C;>8x[wcbhqKqznLL+C@A$~)9D& .M  hhz6el7†_gL68 KqĈ=ASh  *᠟#z׏f" ŏːAXGKw?rXbeOҁ\,` sa~#(ͣ 3|w}/&nl]FGأ} / /M8%GlD :>?z` }f!8cx}J: MT~1͉"ɻC퓿 ql ıw6Kh}ux}k"v] /.>AZofٌ"[֪M6zدS=z 0g~rnc+o qlc+_u=|͵k.[s(Xw)lk.]k y7^Rx yzO=~R* HG9<\0Q/{H5O ڋ/*̂Th–C#}1>B^PЊsmxN?’\Tx1D&:NO&bN)#E(Kf (̑$iJd xˑ8T ڭHw\/cCCW"SФT Иk1ϙS-:\+{hDtgɢ>&>}ƍeϞKkM *Uf֬97ɞ]ѻ!#d!J cbt=>, pR&s8!U<2Lc4TԳeSv:BfiE IZ{%+W޷>kj~mHTdM2!&*r:Q(D垵Xˁv1DGWnJKh}vϺHo֬?𣠠aa' 'O\XfR҅2r݅r%>\H ̤H`1h*TBZHDӑpNӆq|Bەdv},b~0nz t".?,j걏5"V*Drh 6IDAT*=qqb,fYHdE s J_s==5{^Dsفwrѷk)"if21SEOs my4}FLNR6 l7e 9J6g~D raw =hɌlVdl3.bR<ݖH̄=65$ 0BR .%w;m8Q@"T\g<6QJ3 f.[ptqKT(zn D$]hpڢoU~bO%cC *RTx1* f8\UKϠ ޤ#JGz2T@W}A1zJ I#$7n1A)F?h0g2@@?|bbn,0 .,D`p?&XA2W⁉,~P05}PXta1O>|#O:҆%4pKt*K{hD`v N %-x$36Jq^+uLiqދA@6:O@{QoCdzVlwF@Mg ,rw;݉:XVFk6ejfS%AH%@݊+i +jMhej$eU3oc{wmu2M>AAV 5³*Car˳ڄ2yRۓb5 sDxth&JQݩy`չ!Rj2॰Q#TJtT2uJ貓RV-&1A?ʧ;#QVh+W\2%Eҭ*x*۶ÏnݼKp1q U1COKH85“1\**lIqH`p$xdIG !w*2R Jt;ug%?K;nxǗ] [r-4ZXk.JXȥАa/]w݌ 3^Z=hyD<˫>,@@H,g ~ q/sh"#5ݜq:]L܇ Ms#cߏEߋs߳%܍saf-s&  .,&x3b>|(- #aҝ􇆗)~LP0`L~9]XAJq'i_Po$:g||+m;{n ~6!Dt h# uhq(H(c+mfS#@q)I6fshă$ٟvXfSچ6Ͽp;r'8 \Ĺ]̥ ?cGwmzݹN$xMQ1Bơb5#PQr͊JxI[LeɣRS3P 5*Q߻GZ̙yI . U'S&C5%WTP/]c?־]a|rZ!44AjV(S􉰤$r MҴ8!)1^& Gu?x<};ᆭU jDݪ ,(otGεgd=kO[6o`D [R ]JB(J7AW\ٛp.aȼy H*T` .B֏=G?W`2T%۶l=uҮ//}z7N~lC_{%lCO^[}!J/+9_H <ۛ) a0e 舻{GF@d>ZhK߳%܋s> ,0KlrC_NsC6=}e<2B Ͱ L&H&S ^8J4,-ڹǏ"ϿmCFCR}'NCsk:A{wݹ_kVțgѼ_}Fl.GܕK7_͗sn{?3a ?yGZ#ڶkN/)r>ɟ4t6-K(>jOn<'wn1"gw=߷{ !tqT-C>s+=tFQΨ$vaGΜ߶uK~zOY1n'3[y,hF o 1ldxǎ$'B]?~ڿԉ02(rEKzI5 nȼyݾ}kĽQްv?曯T1,3$_px(lLL0-uM1zW751M+HOQ@_=ChO!OmNmډU׏] 5WOR身7\=Цy% R߀Vs w˅)CHB@g˖-K_VX'?Bh"5롛bffW8@Q"&&y?.*.>"}7.=Q}Lʳw IN>Xta17!u:A`Ӆ<}P[823Y8`\&q˹_0<$|ґ6,xAi?@3 аM613$x 3L@;ԗ 5e5M)`&ccOq46`c5lf{Q=hwM@[9hm;4CB+x3RAIg3;B?,/A[}(9!&r s/0tz]Ȼ?1w~g㆐޽zm />;rP9Zj1\9mټqe~]VG(\@.ƌ١}mt:\qcGWZy}Ⱥx j3۷۳ڡݗ~{ܨ/ѳk{DESo'%]/\NǢ ?l YGkV2)VxsLZ5kܧG||dR;%hn ׼q#& wjȡ%Jmؠ^]_~酩S&1OcX葯ݟҹc޵9dڵG̟u?)=oά6[קT[l9cmO=v`̙F {^bB|\]RzÇ ;zÎ8<;fMܦEAz/\`#>coܨ}{b4| зEw|nw'{+~|43gΙm|-7ҥSfM q/?յc5r颸Y/Q!o^'pXf"k jh,Iq]dC;e@S/>q̶[g6<V ]y+ǂ/! ]{  ~W\2_N@GF| h>+:͍K@ e+(EEQqcw#Iw?F;{.>ˡM@SHt!/ _N# d〥;$*e|/ y:9|ґ6, ݎ({\z~4p03Ntn\RUL!0,L>9e$ !ZFh.!hq,s4 h/_p:z`f-p-p[u:&2^zn-)!>)/|筷6hŋԩ]_ߩm-dB*m۴*_͛6-.hBiٳe Yz=۵mpΝ:|o^tȻhp*+`Ό 7^)WgN#tmxۭ QdIoнԫ]kҸIIm?>}tb.~꣇;+&)1q`>Zqt,ZdѶiS',?{ݟ|/ﻇ}{w,Q;^rmF!I V7[ۯVè͜1m߾.GUg̘~Ծu/?M={vժ]v6m {hެ؉L#}SC9w2ŋy˖TVo:vP"QFb颺5_ߺl1 ߱c?GW-?nLs7xЃ{va<'Ļ4a+?{?~W_W-~Y(˻.BQZ-RUR"۴ }~Ǘw~rns[ox+|nrlţA]</Y7dfɂ^J.@  =ra Opd˖]-Dc6aW %-‡F}}>GFDEGՇ86O1o)~Tx>3zf0‹\n @@a9|bbn.AaӅ<}H&82 _a)Y8 M0S ., %Y8ay6w)5Tz9>IwFGb"$ _ƭ1"H]~W0VS@9g 7V]%/zVnN U,.L_ )VM bm 0X[mq1JA(f-VSZhENJf{  h ='>VݱYa+Pz'0mpzh3TS ~K8h 80 8gE@'8\`^K}HWIoz뗋ֵs57m\z@F vǷnռ_^?VIpc ,|R|T'Q5szmK.֮Uefwշ:Мq ZP}$)i`}z_tLgN+NabX ̋w]۶ecRbª˫WO5ͺhҥZ#nӲw_EbN.'ԯoնmzU˦Mn\L/&oڤg*7xyyaD_rqgN3^Zݹu&DŮ\$&%]kWWZܷkّ? Nps+}։}P'5lP/ /;7O5'Mhղ/|ݷ]{ih6fK)r_i>||0T]䍊lXǽ8]Go)sxmϊDq6Cf_XX46mgjP>pZED/ yHϑLpdfqҝ )yg&qDܤ8 ~)̨@aǹO8>eWQ"pܱ\|<¸i)hA.qh&H62x8h{ӡqPxd/=_4q˜ ŋ 4`yݻuY}B.tu5tI]т1dpӧ'] թ]_}Kt]fF )kyAiۻs[>xQ#3NL~oq҅)'oFXW.Z7']SnSQb˖DGEVVjŰaC y +ڷ.R8b\6B8;vŸo<&Q DGi aMc Fd\o~3ehƻMw܏_yFZѦ]^oߑC ;ιlujӍ!ןX})T}4ehc!,*Y0@ S`PYJ8|0MCB**zEEۣc6q?xsKQ .1̄BG/#!Xtja`a7҇/~tg‡2~0ȗaaS~9]X6ƌjK`;>>!.ƥЈ8aK6>z_g/Գ&оxX:.:Jh#"Sr &-jbc_6#柀VPB'XN8W|-Գ YwO@+; D'v'TfMי-tM=#[jq?G.nS:͚5;v{ yBnD3ʗԧLةc?_$ӦNnڤї}G e'C&5"6&eJN.)W̌S~~uVcуq 7v䦍jתv&a8i,RDNt>FҥC Z.~A;;hwBݽk[5,a_z1sV_}KGOpÿ&5߿w;7kߪ|t'%/=4kO?ŋflՋ}a* ?}pJ>{)S'wn1V(jŊ?e:;o߿ תU*[-G(yn%_~ 7-Z_ȹs9 {Mq.ݹM,TfG_й}yDUCNpĪ"#%ݠAt/g}3|OzbЕBW})ll]X@rc: , /m@K#_6K ,y|0MSGI^n+–slϱ(-0mL5rH~Xta&,ݙ`agH?rK03XfTMʧ(1E715`Gotjhil!c+&0Ss"tD6 KOjc쏀U #{!<m\,;W h 8`;HV hG~hXh_Ytɕȡv$GK;Xغ1'ѽ[o:!! ?~֭[gϜ|{ZJ EczpݻΝKfp8ӦN.YxhG z)ƍSj^umpPm6]u`*?yu'83e+y0MЈ>([D=2.^+ґS'#tN/P~P_j8-XK~4GFa&,ݙ`!b- %u3X|Y}b6Np'\{lʯm$i4"l /B zX`3lK@G,He?'_~z;MFmӆiOwܻMfkט=}yRLn]:կSkάQwߛ=sz:~SZ>{IFcW8OsdcQyDa ;s{?g) ޭs mX^vO ;oaB۶nl"f{cG=bk.n)R$L/(A$TEΊu"WހF툊To@7lܾu۞mԩOp|qq[gn՟X{#|ݵX{9,] [sxȾML @+ΣA=0h>^ n/!͇f,BZBoqFĺ"qny Z^@6pL5,rX^o:ŋ$@@? #0ŏL0^PƏ |\,iw ӥ$+X󋺚LA <ʿ?1)^:68ۯ&K@%I)E@Hċo4zPڬ &]qNh- Cgȶf9NGZ:m9 N&S>4o=Igfr[}nvhR_b5RzwWԤx{RW*ԟօeFf\Jۡ}ڒ\Xl=rehS*gIKj N6J/651N6;A+rYH\Nx`?@m׭ju)i5ހNu`C5t-}ĺW_;F'7\=R G.[{EsC@{  ryH7&-0JDG 7ƨD#"m1Οc΄c , 2 }e3 .q^r\/_NJa 3Y8`I BCJ*Aa&3yZ]s']I;&}/..Ү~{>[єw ǭf>+D* >M1 h)eJ/m\ gl0ṼЩ5y)-]ud'|!@u_{A@#m &-hWngBB|t+~S`Yǔ Tn~x{,TюL+MЯR&L1̠R|"}PPCNIeOךNU* qXW*M 8W.yH[L3'nCx,]hKwj:H5p Xz*<"ў]d!jf/vo֪YCbc_mF;(.;)CeYӤV TQjoۮLjT,cAi+Y!!%fxƘaxbʭ~Ʈ,?"AS)}1L@'9ˆnذe&ڴծC3=l/.ufs[o|ĺ'<r#|_{ W(XsWo@ @/af9 uM; 3ӑ!lXa eha`M} Xta1O #8Nt&IJ#E:"=6".^l@7пC"3F%/4B4MVKN)V2`$Uf 1 qK@y|qegKP+,_N2N Ww'$&'&+qъ*bQ\*zWsy(5IHFHO)95"ʬ 4thr%PĮv9/%jZtOLKDv؜/M-Z[qco@v=&1:휓j'HEӅ y۩Fs!kC̶Dr>ybȀϋ/!)@_贑@4M|M7:D(G5SBUIa$2M)PHiZ)U$$ESJ 'Q rG W:Zc9VG*Q!!o@ct_^ť]No}fӛn\w[8uV_>tpХ.]obJs w\k1R#-o@So@ߪԿE\d{~BJRU=^݈k8׏1?D9,] $p쏀6w6`&Ͱ&<@G~C#lU 1VOև퇇P~PH`Ӆ_NZ;  ӑ>xyt煕jIeha`AT7P ,r_~ 'aso$8]V15IiEGb"ȣ)S~8 -V;H&j /0"Nʵ_+ÿhXl)qvB-f&OJ}:{tzA]+XG&Y^+ޘe!QRv!(W;) rUG'aW4Hhe\˔8EG]w Ym򚀖 I %@C4Me2ŒЊnϖ9:t;\&NW̲5!E8VP,{c Wh;!IqDϷB#!; uSH-ƭ3'^fc -&*A~S@*@II {iPEjM(VQUs٣.V o" Vd,ND: VBMt9܄gCT hW"PB']ĺ1j*\*B=".Ñq3 3ȥIz@[g|"!GkZzAYN{"E7 bo=<~\ӂ7r]"ޞ;8e%r*8W#ECX7ԇqCH< yF(%y,>ޭ慁BX0ajaQq[=[O6б)gamq>";᝽`_VKz  4 -dnF Gdx3 یC8\~0 cGkCB>wJ׆qv-4`0C 8=aéf؝O̍U;!yLya -勸Hy)/Zj"Ьql W8 W+q@/'8 S-.*mFW\Uy@k6[@eat;mأ\iS(41e +:[k_pgsleYF_濫MdmD٣#M ;4ݜ Cpu򙡈`:O}ǣwoxXc;05_ Y`GN EFk Og$& L,Y%_Eb?U^g^o4:-kD;C:2Quk+*fWdt;X1U\fxZ( HCXK{1PԳqjz bk`{0-ZE9%R(Rѡ$No?ġ.3PNZD B)&튉Nr\4nӴyǶzػk=z kh \;nsvn _wq2<(¡}!ӊ(!_  im"C""S@q)&v}iPSJ( -ȍC4$:G}~ymH{b3gqn»>s弧8h+rF` X^6<`.>cf#?,K[scF@^ }HBxg +*L߸~j08 #^"tz^[ >1-HP$/DB g7LJt߰K'z"4&& iKpfK­EJQCWT!4Eo!Sqо"QBgi 8O B6$Gd>_:`1W;x) E]1II ?s6n߮C]v>{z 8p=W¾zwm}vS'g6 r3|ӭSpW\8t߀~W^z_Cpn<@iKDOpeժ I>^EFؽbQ#&G} ,Yg "$0_{qqQ(g=M@ o@[F9ta X^|6`}9&H t0V`3L |ha&Ͱяi߀<W7=g1M@T I\DN(GpܼZQ藋XM>y@S"mOp;qQ.oT#4VkDw"!RFԣ^e'1T ~Yg_:{OdAȖ Z멀& [9ԥG[EBXat!= 0d [B6l ٸ-dwߴ#lnƺnx[?hzX l K96nf`6ox0m7x _c[b˶JeH<3mw4mo[o߶L?غm'gyKVؠ.sش~ b~)?,ji~-x!7>?6l Kx`3߳Sg8v9{̙SϞ:}3N{ql'O ?mǧ΀jP?SOp\)ڹvs~p/Ά?{p'^?S'·+\8ǁ>xI(9rC {`{ܻ5bɁ=ڳoϾ:pC߻gݿ]GӞ (݃{ ޻{TQaO*3g>!QB=} ݝbd{x,nݶD|5kj֢k箃=xýz׏|vqϧv~z~[nxk'^=ʱa.ڽnJGsr~_z1wܯqsK/qP<[ !%qO?NΟqA@_`ˡ3H`.]XM <׏+h% GK?#|aLp0҆ W{t׭Czuл{>=:~ht{ǀ>6wA}@R! ]2WA չN:O4GA־_6}׵F[ASvk tocBہ Rhm``Vأـ4Ӑznþ&ЧKӞZآ[]5ئyVڶlަE-jָe&-6-4kѸyM5jPQ6Q իԭ[_*NzkMFzj֯U^uի֨SjmPr*kQuGrMAJB+ZPEPC_TUP//_l,P(]FŒK}X+Q>T|4/RB*Px )_ -WX `PT<PH)_hE)RNhlb-ZhiHAaP(TB.\4,@,Pp /hE"{ +X0B)T.P0_woVB_~^{7|#;or~ ^9_x-GZdY^z>Y-[_4d{9K||=sY^2?dNFLϦg>`O7Zs/>ϫI0YΖ-ǫ_|ŗ{/}^{P˔]\r֫RYFuocgz诮~sƖg7>Q5WN_=ɐ+7\ [ wV`rΡ _P֤+J)/ۨ ҿ ٲȑ#O|~T /ǯE,m2#&Aj"4r$C_ :Pw*?0L,JߦoH2=%.M-&RLqHG? }!4WFVNju94-jCL?)Sfb;vV{!X_ 5~wiё#YMv!;ΉD6)BJLfUڒy3̙hָ-7,?,]8e©勦xg/eJ+i]4=SW,4rIMX>b ̛le &,=n٬1fV2kY|,=rQAsU9w9#Wbp]*4r|@3x3-1pKfAfZ4cLƢL2йӆΞ4lS ׎|rՓk\9ұ)]?S}:9_TUK/hEcCK/AS"4-H(*jH̴(\$ @4Ea+`h+_P/SJEFr(ȡ 8zj)/M@t(JbP2. 9rV KHp(EʡtaQntmNX&[4CQ"QsÉsCGFY{(%\%MQS5fCRL,VWb;kE˛7#J*dQb\`͚i5 +F@uYT,Vo+'Mb+11 ÿqH)ADCʈ Bɘ% x…H,V/uJIBܐp(N䐒Nz YZEM1i\7ZCs8C :\J2JR:C\94@Z e4*a%R2Шc]ٳȖ-[)dɪiha=)SaRUVe¡ˢPMYxNw&~Ow<~#{N+'VM O$2e1J_w#T_+m3?YpKot'V@S$(eԴsdFu\V\fꪒ8Ds,lg&V5lYDSA5׉ʙk+=,Y]*-2p92(\#&%r jzl?./QVd&l1BQV] 6arE?U*✬xFVUtT_E[Ez=MM2[rIE/iu*i}5:o#]x7IG:Q!w”:9JG (7$b%@)#Сb.:. 4 ЄCiE\ r1AtHQslU|8:P`Ő#-=\$f?FP30rHT$f*Ix[ܐ[E_#O)@I81DhԥU`ȍ%*i"9b TD.u(PJV-r1789Y`? hVc8!ZGIɦgˆY(q%Q PLjbJP^*;kL_ߴǟ JWS0_oa6W6Or2 }XxE>WRՋVx墥-Uj)W|+7XGUsu8C@}7B?ﳋ{q;g\?Fk'_=r%l믅ovrM,3zZ=\^x<~P r D&oܸҥ˕@/$ %CAJGG!k$,-k51ڵxK"hlӄ_H8$"0p ]{s+Rc4:rhMrb4Q1:VxV% LIYA#z-["u9ijR'|(!jb(@BT'x38o@)@tÛp('1q= | ?ZV,u_§wїRА-TqxMQIx⩧ҞsnW6XVҋ1a>hJW/+M5F~1LpE `5QߙLz@>޾TG!B-ğ93i| OJQ8 j\HT6p"=.u81;?@%!qrH裆(V*Mҩ8 ȸă!ŧ1d!#2S2XN|JC+ ΥaxC#@]̇04-@H`DH_6Ŀ8?}P7Ze\R2^M&V|r!(keea (#s$TDbInWL: $ހ&LV/M2q 0Յ A%+}R@ R9d͈&yL@tDTFGs*܈9խ:ΐ1'՞-kgfW;T VUH<ÞLňM⧂[I ,7hD/] k}NYpڊW.rUZ6ryk悵+S[9/\V_* Na3.f鴵KY2u)N]lƺ3-vՋg^2mͲ^6cm̵A.%.f&Y2y)`͒)k'#dK,~G_rÇ 6t!C tK}o.:w JN}:vӡsz*Fc^m ttЧ}>:jۡg=@=۷mt[wOFU-ZѣyKf7kխiˮ -5m4iMиYW`FM4lY@]D :7F !4\_45TujnzHtӯZCݡA>hWaz6u뷮[_[]A iNޖJ]&u׮ӢNk5UQZ klXV:juׯۨ^6nԠi:+WiP:KW5k6]GzG%W.UF*U^ZT-Tbᢕ~E8"/T^h ͛ W(PX E+ȓ ț̻;yP^+0H`x/[j1y{uֳ); Xh>*RrUVtRej.[u}XB+7jӪ5Zn=׏}}#K}f۝3[noq*DB. zrӕo/ʙ;uԫR6n4yz1x+U\Z .(>RfmiT0n'*HiCi.iz7(iNE_@&"kڴ_5–ٲebŏ;kk͛ăMB4NEH$hr7F0UhӦ]1bH + Ĝ bXJ ˗YE'ZI)u$*@Bbh.aHکH5BD +B`u9`>(oVu?SJ0CnP:f҄+fpĈz__V0&U6DxPE1FJFҤMDҊ2)EH 5܊:%\%KsW\{7(s)`D%!SQD uE,u$)])$˖~wĄ~)i9 Ri""DDX9+* 6.Y}!BNz,XPeu0 @Fh 1H7o=vcPg$6m.!:05`E7决l%t-JNvV@w PuM*@&XIb:5qJ/^Rh2/ C/TY(K♾$!j\R!JHȥ#*"9g{UJu< chS2#ST.] >'0=jԨ%N0kc2|PʳBJ@TSɳ79P"gZz4H0Ċf(QCJ0N .Zly4y!ʠT LsXQ̚&:bи$dάB'wW^$ 쳙 41:NpE36lجY38H LD}lHDNYH10}09B"ldۑDѣ. }/T"WTP@_L_*(G#@$t!CP)E":H(IDbt!&w5a0V&r RGnYrBb<\ܨӑxR eBr(J](0?U0 HPAYzC}cU*x`BKOK*P [C#~|9 RZX I!J)'8|a7\ȗ&#K&,lwɆ̴ib6 YN'>|l۶=k%*+NdWZe }o7"c$"" <`"$e9 w2vq+ѯkI2?JNIaBylE/E\i%8T⊀H4qGB" H:s*x#HH+rȚ5gL׫S}%h9$xZ/a"57ziyRe@BnF56^i6od/>7ote9͚:~֔q3&>qԔq&5~Ԉ1#: 6bQÆ2t LC 6hopܻ^ٓf=Xн{֭_uح]]ܭz]:鬠};u:t0Ԡվ}vzhPAޠM^4WmzhCu{z a@ zZh*"@Ѩy׆@ftAf]4%~]*&Z6Î׷[u-kU^˺uשݤNuj7[֫۴q 7iؠIF͛6jJuJPGknRn*U)S~P\ZU*j(VRb\tҥ ]hłE>9r W@7@ 3m&z tY|qEF4%3LRɣw/y 41q^42ꔭP|~ԨR&Uk`Z /5ހujӍS뮇vrݕ.[-|m^l/ٳptE[܏r:L.oӬ_q܎sʊ*Y]w~n>h/ѡBI&)UQ+J.bbHP?Syw-[vQ@tt,YD HBZ9/<+&t-]pjүd}!:RC'&1DH d`P": /p[S_9r4OHҭ[KXfDȸƏx֝˗^~…K{(FɓƎOH$(P2"$<7~՛7oG^+_`EV"k8Ev7Бy[sSᐮ)44< z!3]|:/tP &JD%e]qr ?DCSa1 $Pb9^X X\(| Ȯ]{PƘ}Xl9pYNw5pర!W 6U!ÑC n%EB۶`9qpAɗ[4Zv]2Ϻt 'l414qn7nMRʲ -w߾lqCJNve8{cRą9-u0%}IN(eh|A+2:2TdųM2ST_Z G\\| n AɆxs*&:;YMza1M|PnU;w; rCE ; k2gmX5ׯ~ o^t oYtVlߨcwm+Xsc2vm ھ~ƒm!.ܪ`ۺ(.زn5.i|uH|ܭkm]3wyW۴jsl]=w9[go } 3wOl^6rґ[4~k[ۼleT&x1q򉔛yK9y Ư_8n±! ǯ[8~q]5\[5wL1+ 7vՂ N ^4i kMX|S,j䕋&.[0>hĕ-| ,?i„s&-9i޴&>aܔ&7vԘQF>zİ1==t`Ԑ#Jֿoߡf3Ă޽[m>gf1G{ cPc`nv:kׁ] Եs2uN}-C?оC߶зM;}ZݪmVm)j۷e>^nZ %CM]05Zlڪg4n|شeO4{O-5kѵi.ПQtƔM?'bL+Ҿ~W~6 (붬WY:MmVBM7jز"6jЬi㖍4YauWU~ WѨ|%KV)UJ5*WWj k*ShŐ5KVDA(\!TDXxeVe"(aB(( 44ͯe dt08,_XL«iU6 %3ʡgIL3y@bRd(Yf2V鲵V0^nTzz ;xnOp|~i㝟z3|Nvrz nyx ̙[|^͞=ۻy۷o֬Ydo踤`r3G\y\h2Lc|thJi< Ao\S>+%j`}z"\9\_hћ7o)% _r s_F$<ФTPңT![N0-%2 C$J1kLIdCr!nQ&}TeܸE J\?4I$d4I&% +z Ir"%c2B M:q!QS1:;"h"{3[3g& -8>ĀoĀ[lΝw0dzĊ00KH؆C7e✒Pŕ *X+%k}A `%@ ? l׮õk7,6xE(&JHǿ2ps+$A+z$4җ?FFKz$ L VԤ;@_w&y|[材x8s\ÆCH2n.]azͷy eӯd<ԳTjus&b `z'P6h<,S=Ν硑V8aDM6} c7o={V!]"֭2)p&M1A9{fp37[˖-w܉k%*c,E(=>W`ynzM?qU[,6Xpbŏv\>Xȑ#իWެY Fŧt +q ;K҄+{"gXSL^F EV%#g+uqJFNR&ȃ(ֆ, V&o&$%@ 8AȔѣ.FIb\"dYV@)$̔!TF&z5c-1yC(NR@$~42Ǐ\"$l\(,X8(h%d`1,0<^[#rsYN.*2_jFX"}թSo,]z&Ys +3'%#1rؽ{Oy(7eq&! 0dpqCa[ 6N 7n~ݼhѢ%\8miիqe76to߾ɥbc24v-DH$O\n:u)@r$KDHd~i"0/œӟ3+<+%xY2!SABue `!nJj !kɒedKt7`bB/t!㐱sV̠d,[R_ :dQ+S'xe_d˦VF_e͢k+YqA/;6ڴb{Rغz϶5{'ؾf6}Vݶ ۺj{6-߳qMKwo\vmX vRRG|R7,ޣKk㢝ܰ`/2Ǻ;B0d{߻n>2w{WO߻z5w&=cٽ2;WپbVM޵jʮSv}ń+&R<;xڎSw}Ťm N4u)M֘q K&,vº`lac CSt>{7Jwй|փNwdƀuצ}6)n҃VmYئ}`-5ζhۧF6SCsмRniq =4oͨa]Eͻ5k4S7jڕ ͻa7hנaF5jئaV 5oT[6lТAJF4nݸq&[6mҊ֚5VXR:ի5nԴUzU5/S5Xjz+~LW(]eURxBE+"1 +Y!0h0m !@S_tN rX "JRȓH4y@ YuŘEKT+Vzk,͒˔Az>lPR?j\Zz 7O|u~vqOm~br\}f%4_hI&w=k֬u=msm^%OgΜpes .Mcǎ?y2{ѣpRjuxD禟k6OW4r­%6>\GNd>W^ݱcoLވ mo>?xÐ :Wp{Uheʔe<2nD>:5۷?e˖Amh ={jР!ѻȹY6iժ O:t[z' +f;w7n5D"C6o{W93}p Jr2֭O©&;b`,XpȽoPX'U"Qd,ȹ!{6l:ufԽV 'M|ҕc *wK/6nT^dunӦݠAy>v9a(ҥK2qJZ1nݺ)) CFA䲜Xl-[yaa)Cfٰ!C&l+AJ٩8xZ#HBLp]2h+E+&d918$< SƆ }C'ƌ'_WNb$#Zr“|u}*j?D}C<1Fb, ˊbyЄ7ݏ5@$<~ rlYTlw(Y}2B @}:bR/R*ʩ'kC$#g >aK9'OV("ĜT>#ɰ,*BrףR,ri  xԤ#3+M}e- 8aD f͙3oL+d+#u4aHH)nY-[dSD9ditň}@ހ'uQ!!/_}&,[D~C 81SO$@tl9krݺ$A1L$&xfȨWL6λ?t-Zorns"H.AfpQ 4(((h׮]\ ",^$c23gΞ4i 7tY6DkԨ1bxFgܸ 쐜D+aHV&M))_>M8a4vQ&zdɜ)kꢶxy ,:K&RSo޼8%AI`IPGMT(zHbBwLj8b+9 &(/_P"Vw &cDB>:úŊ<`85 -MySĂHTXc6m! FGdO2q1S])`P~۶1b@HkuI-B£24EC gM)4sďùi,&2/= p(MqfQa;"( baxiV q(a0prA6h%&u% t!Ddm |A9&BrHV RNO_fr [7sG+C\!Q*x$K/!VWf8ػغIBv#loqHG;vfC1Hf&a+ $9TXQI.G0([IslB8}P[cH#llVh6 g>Fy?qYdaLe!:J#! ~ fheBi$T7nƏX\^1ow  Ӗ6NfY2/~dN}UjdsF%-d [fD #!M˼,)#$2Y 97Wda.XH^XJMl5ONpH#P| /ʍ+ʍ!;(@AVl^Ɖ̘,q's s߼.M)8d^Sg NS&\<|9?lb~N1ƞI8}2'=𗤄)>:QQQGE?y} 8t衃QDtݻ {Dfvv튰;wE(g@h`蝚! $`Hzo3Lkgn /ڼpEK-Y} HX=uupKp˅֋C/ 66W^J3OO?@{WXt;-4%GGiVV;:99b9/ӟg?k|d$Tn߾S^~Ӕl`ÆMͭ7yQz9V9z4 x=whu_ȢDFIɱ~mSaRۃ<x?x?^aO݋JT|ÓTkIkD9~tt !ȁ:;1 KbJbDz\u8z{I14QxHHa+2~72 >Ē3HH<22F L&p]aQ$>knobSz]DXac&f*?f\(bQcc3 @14@ `-AD\B!RiFFE gX\0Q}-kUgI6gGݿl춧c2gc$0"b "H{{' zu-_̙ ` ]AԀ;K(vA<g V9(@T(e!HJ [ AuVl)!?PȠgF!^&)OH;vM]_#mڴ?mŸxCtV%4G:|$ $Ϳ04 !hvˇ͟89sWh*prඌ>BI8P)'+FB͑-?&ؕΎJ\q]М={~"|ؚ`,eVHs&TbeD)fj0& d0g1lzl>؉.4!{l58=y܈bg_p0966iB|UPpaŒE'>HAՀ @7O\}Ո e<ϟϫdi0zr(`oM(_}Z;;oEI^|eՐQ8 %p KD5.Ģ+WKhʠ??dWbb2~\ŗGM 6[|GF@Ӈ_ύh+**7F1xWBc lz["Ŷ"GP]dt7@Bì{8 %I07$8JPYhܱ/`2t#NjBN <ѐLU((CHpb|(J$U4 Ŷ/K b!ogg$GN("/^&qb"bp%fثgBTVula, 9' @(pDʓ6+l)fdb!F1u'{ [:03 ]QbNVZܘY.2=q%VC(DP4N/I@"FrCRe+\fY #t:t:#TFbNZ|Nj<3Y)3d&M5Ԃ3y N'^8Vq ⹴SɧNfŦ%H>}2D\LLG9iϙG=IzGЀM3Y5,~{qGϾ0I~qy{X Fk aK2_̠~|ϟg]Ћzt[c S}7Ot_y]8zqH˥C-.~啧 n<x/'jjj6oWAA@bM>iǑLGH.,$]dJ9S9BA N.EJB$(HHȮ8>8\!Xؒ˒wuu %[߽{i.K 8''C C*p 0890~"IIHb;-!2y燤zwwoCCv:DV3VR ͝;Ç;YW׀E'Fv(Y YTp;w]`E/i96as-xXGEFs.0D+l.Dŵ o@LRyFC0FF'Cgѓ,OFH` \P497]fܙ  a.tA]-|;5uѢ%A]gΜJ2Q !b+>/L@ 1FTr{DԴw'-mmtZ( KÇ ?KgΜc]0\XȅT*;22’F@Z \>pɒe8.Y817D3#:vwb pRC.94]X4::F`B<2.3@Hfaƽxzz#d>E%%usCĦM[I=~LV諯O=ؠ ݆:D_p\}-0,ޮ*BYfɳ SRҞy曯:Y2~F:X&Av==)G8%`̝ ZcZ'W) g?™ x (4d&ؔZ(ظ!C؂ɳh q*Hd#BUeR\Ĥ`>p EXUrFCP@rAnq&P "I E ` q)ņ&L"uDDaji0ܟQ9e}1CC#}!v<)'¹o҃!Ȍ3kDA2j5@Q axxnBHb yHNNef0d lDhFl!(vH’q``d Lv0n A^EI(?"(`W;;;GGGNф]q)E\s6N:}/''رo{ Oe v~3!0d,z !>cx#D.8OuJXbL`nlޠ iMJJ!f̆C8 xeϜ9sO=mπLIIn!]k֬C 5yzag|N`3 (L?&q3]`~!CV=˄@F"_B(H00a8g."#z!!Ósb1瘐nDfqqQRRRHH(';;WB9C W{9+=<`/ 1 `8~8QXh'NjM+7Y@4X|6Q9E- gS6rE8UÖӰIgd;bA1)t!- mi:8845Yl'O=2_ dB)'#lќGLc^Xز C ހF] K ~V[+0s(؈u8 > 9v]B̒|rdޘ~2nes@VtIaL= P9vNRX0լzvT,جAd10aP7$d=.~[6:.]m-m\t /_a7y6Ya5s\=wޚsV7歛5w7̝nμZO>6_1~6z{ޝ/%+x奿iɯ/i,0~`ϾDK_Y&xrטkl#,\u2%˷qܸ߀ny80_55P9W1]vH˅ᖢѶK͗XrW_|)nO}ϽXUUoprsr$qqq p'@ PጤBCJC3XH8pq:rpU=3lT&!iSu?* S.xrʫO>9P( !۵kԃ-ߏpC z8br0$yPD.811d(" z?hb4rh5"R.L_..^A!W/ۯZ~hH200D·!({1de%i !{>GC%d*s)"G_2PR/̸! Bą :]ޘM€Ip2A ֡Һu` M>o܈ f1.J a'ހz|-‡wJn)ܥB$IOd{ ?mkkמ!Va} '-}u>G\N& WSn݌.fⲃ@^\R^~Y֌3+1|pڧ>Mt1AǙD,癋|lov^^>L"IYe܋p7(Ix۶m S ܜ1 7yR O򩨨b5qM%>Y 2?=_LMz&(**-۸T^bfyHD1"p{ᅗE ))skli8 40dZ;QL%L"#;ɺf4܈D"!TfC潦Ԇ$z} |yDوX+W!b/e8SN?|6Iqj!H⇳M Ͽ822ra,Hzҋ71S loQKɟYDnlL&0}63EAX0^YI+CF1,N *v9s8Z-\9t]0LJ܍9v `aАx:+MLKdZ>˓`evXrF0SS̩DhQg C%NbaGO9l8:EĢEK"`-ÍQz;::0{1S9ڴi !d,ڲ8#'CWA` IM+puS05=YV|f%a@K|rȢK/+r|Kl ƮBmOu'0$82 3PzTA4~CvWx/_Q".fTxr&b2je/|93"za,g)aKER`Mвp#Z @юɄaZ15KD6&pP0MHa7>|8r@Hda E] Q~q$P!geCFy)`Mie?g,MXDڊ^͆ @] !V? bzA?bjp#<9ba jIy&TX *3E mY.>I!gpxAOi e`@@ϦG,؋2]l#8 u3t_XȞ"bNĤ%>|e%:B₌)2ӒRSN<{26&DIKtѣGę DDJK%R G`PS/iЌڷ؞@=Ǧav۹hXP34z((@P~X~r+8|(0p`СC~)7@p?@iu7_oJ`A!O?>>G>~|2~Ii4=}"c.;wx2>.Wp㧥C|=<=v8zOm89yxzvӊ6nrvuw^bۢ[-ڼplW_b/Mco;yϟ37;7ZO&~7V ]$m5X=>?<>`V˰}`G ϾkKKKs/L3^hۧ___ Жϟg[?g 6oZb n[v*<<_59X`-#my#EC/474.zo<=/UW_5k'ts)ICN@VIUB0DiY/i./p#b,ٌy| T'%ud2<.RFBK ISPpg u>&Xq41RH'aw v$(rG g>5s'CK@Y8<|y-ƿQM@CI[4!C±@CTb>'j! 1hb Mf 0$ ܹ,q.A4̤t)*Vv,'H& sD0ND"b8>~绖e\ !&KnGNlbb%v(1x")ܦ` Vі>„̞{ @:K>CDQ%nb/?HqLQ>>~B=1mONLp q,^^hw}c\eЇ9"}0$Ff"TBR[X{rxn\ C,4hT^s3߾s.y?s!`䂷a r AsP*lDa04 Yz3cc؅cxEOVxO{Gŋ" Ɂ.` 0f )@C0/b`2W,a GR(8|{q_Bz_Cğ7 !fepCLF F!,F} ,X}=qr%n2D"NƢ'K6?zQ/|W/`s 6WII$ulS"j @.:22r!V@"4puirYŷ83Tg88w`TvSXU٧.$RCJ* Q3yN)*o;7{,4.#dq2 odg2A'|LA]L[ 3Kۿ'YŗrdžaVVУ$3wLa ;w&АU!0p'ܾ}' tC[8%OsR&xld3+0D & ; 9DPvXхE+d8h˦tj)T2d N`48&>̍oW11~Ojj:.%,0~U ȱY0:B::r8$8"8p`pD@pdQN_~}AA>rpq1=p/}}gX=-o#^}n^{=n{|N=;;{{m7we-.-XiM+m֬uZ~- n\xEg/XhE,\?ӯzeޙRš o7l^{}:[.ׁ&X?Zë5_z,  }K|m /kxsݬyÆY 6]xsіy.Xjp%+ltn55XyzX{p˹Ӄ֝o8sbܬ{o>gx8ߒg|iGL61p!E ݀SiG̉N0:wCÒd3p )'R "8IOml0.8(-%#w~*=9y_W\( tQ4[CbDCN  i&Tk!HH~$RJ2QАCfX b"پ/ mThK Y}\*s`,N+?^BaDcp,1'rQ'={.W5@[$du9=& )==\80`1D~CUfKYIT 2x4$Sood"CBŢc .5y?7RC.o4ag߳AAg$dp,QJ۷˽.eָ~c?*(3r`=*H"ܺpJZpSR`­=>]]=X689s)qI2)m a&??fpY"q5kA]b)Lt0a%sݺ 1QlL OMMG2>!.eY7Qon((D5gϞ(x킕[nYLo-fAQ`P|Et= \CCÜ)|͜M'&&A&)x_D n8fOc %˰'@Y'5Hh@.ƨhWeXsLٳaCN3K2S*q$$OsӅ\z,Yg6&a?/(d %G$@a߾za־w1.p5Ey 6LgT4I!SY\2\x)C]LA+&0#0[P;z̔'@t̑tJ@hbsATc;;`^'a\S )`CќPwI||W+r:bgϨ$&.C%tX!ʕkL+۔0b8;39HJ5@[˗I糫ZRl0Va '1X 8a'‰g0IW6I!giyO (Q,p%Q.x23s\MTb^-\G*"S]DO,U "i,.BV`9K Cw%*69 QQ qٲ:Xcd* 1ȯ}pԳϾ'E^C0D!/2LpűK\i9ر K`P{a8X80AdD[5H10TMHJM (/Pb#$|؋8q0D"2( NcE.s(CvBaܮT8c#&hKz҄)(sCZhbëdJͱ9,6gvKr›@%odt~䭯o_tW< '3cTdEp3H0 !b2p fF B$fbeI5( 1G$P4!i~ YHbisPd;dѸQGp$"IXzp`w%cɝ~KhB/<&  u*(aG*<)<3@@ݹsp@*(QY&B4V'N<5!CBW 'c[SyK ;}zmko쪡9^5zkzok W{5^k2{!o.oF ] }@Euzk / _l8pa`?;P{:*wPݙ3`rT93X{n|M^_پ3Ԟ+4g,/5zj.tu^4^*b"EꍿX\Sv4[W*n^>ҹEg^)8}3/*.96&%D҉h ĉQQǒK@bTTǎ%=ztn# +XGwb?g_4{qA[?@ ZzтC_2 9hx h _`k8X :8 xX~k/f|-tǎ~.NN>g7v8y8{xk:k;٬[v+m[~yrK,Zesn`ݜ끹h毝3^/[+xY_e.藬@f;`j 3a?00f0!/_z}{ 0_~dۂWؿXcՓ}7&{o,m0tv!}6m>::*tEQܬ^0o> ʪꔔKyOj!6=6N>di෿]ܦHgW0Ç\BGGANO>i|J6[oqVJӐA-$ͭE3G1iŸY@OOF8&e7I:I(XAr/%0vrGrD.2)bhBxj)(F/H*\% q r[v<3]$a+m[񘩀Jr;޾}[jahc;5kk֬dts`,VbR'DU$l^zUd%&&͙&1 2n/\0X `p/Aq%k9i=I? O==}@OOx&mQ%XeNJ7b 5(L"P?Ķ!"'8A܂sD ]hGqo\x=ŤDy=@sdR*d6d oL`81'K  m'gaa@dQ&se(X.6’D[vz=hpe A$"jWD,`Sarv0'p!ؘ˼#b#],D&LxbBw@&V "|ª_t9& ǖBӫ /Q@ܭ[| ^acU35m?9A\Dc-A%_,THIgd$a86'pG[lɒer`?!aso89oЀTE"$NP cc/7aɺƷle 46 @bFpQTL{)SCxNb!u!.]*QC}7lz.(Dcg?<#$$7@ } `fBBi=ML |ϙ6OFvŸ&{]ee5 PO&'b ._]L"ʳ{twu^To 5-[O%6d2 0Po_8!<[ 62 JuLf_Qa7XF&]:XnW/cM:GAF6L /g4]H\J9CӜS:G.F![ lR*<鬴1Gvwqu#=-5%3$,Ԕ̴쌴܌Ygr2ϝ)8U\}©9ygddge%&%%%LMMIIN>|ly}NTرR7-JyZO֠ 0'#@3{ߠ-iܹH#Caa DD 6yL/aG =z 9j*?A0u|>x ;𐟿 3ޣmAEGz;<{pby}vs!])(>n.n~^^n~v=Vl߸-d{MKoYvɲ6kmܱrâ[,mMs毟pEM9g7ng7l ͼu~skLxcj` com /.>{Y3^cMAffM 9aӳLk'x~Ycg'$6 |^~o*]2]zhkPꔁު̾^69/hBn  Г="όl2E2xwr,N2ĂӝD@r.xSS.^,p < G8神nv0<;#9n9b9uv"  ql'w!&S1T8eero Cӝ<ONG r6s3p;ܸA r#̛d4))ƍ[hx|ޱcQRD;-uSaY掌1?A1ןg\'vڋɡ!A >>dN7o {C|gϾ{w' MH4ɖ,o_'屋QgΜҋZI\bg&&&q')&}mn;bNEa9hQݛN%2q2 4$D!X?},97I QɷHPDΝ\#""~ǟlk9x$Y$;cl$N6n 6٧.$K1ӟͥ) KN=|7ƅFs]簋 Oր{.J+ъ\_%@ ɕo߾E0Q/D7)6p;ybcѧ?!-(,4>F 3;t0D :\n1u]eybFj[( lqwԿvP'E99K  C CklfNtqc'a90 l/p ?{K _ Q('lSRR"&j)}^nÏӟظ2O?Ë:̥<%."xۿv ]0,.K??kٳn x?p2%{;'7XGw7Q!,V,`NӢ dl0!‡e ݤ'|u e<0J&rmێ쮥eL4.b8_%IWWeEో]299qaC:00z\ڵW^ʰ /fr #HAn* PĽÇjH/Nc,\1̙ӘWqcs FGǒS||"Be침]lz ?Šn%2LEE8!ʣ!a,L oc~D5Vg9p%`+-<0Mv\*o>cb;bVӁt-*m)fiNȂ=2]|hD5R½ dpb*qa, oiic#b'DI-Yll0Р!Mdl0GC0^@ CTVvCYv @ &!({{GV Rˍ3HbcJ6,ԔJ؂Lj:\ nެ@i9+8[/|Г7HDSOI2 Öx>gX^N.QhiCLBO*eA!Bj3ӟ@bD8er+簢Y/$x.Xހ^j@h8d)aK\(A06e#Bdg8Y8oNNnc 'Ԁ2餔̯d,>!m>|8ËQi()Аޭ[m7YC14A~&$@1$ ƍ^"ѓ0L ]L :H+Ʋ!3\ 4EDkq9ӁY0e,!`0ponЄ':?n?qO%hP$0YxGy 7,"9D)&@m\#QI6%~?B$>eǷ䨈ýD+iQ:*uYbc3C-C)dgЁ hq ?SϼfzCvųyo1 h g JbVÚ$' J)cRئBwq(24&nWfOF>VTxzmFGFG{jFF;*FG[ˆۮ 5v}P+׆Z \j2\2Z2ryhц¡uF΍55564_l*k3ޠ764_kpHKh.4]i.k:vmm+i:rj6R:Ԍ>Z77]k,5Zwծ+uW:kJ:j\kTqrcEQ͋7jˋ*K/V\-qrލWK\(?u&7-3>:Cv 2]|\]v:8...ή~NN.AN~v^>B"#"cSS23r233R2R33rΝ*˼s|VsOgM?izzjrRJbqq11)HN:nDn4JQQT owLñ#yhbt⡈b-`Zo3=wÏX =YN+#!Gаc 1 aƑ܂>$$L+%g!%Ymm]}}) '+G&9G]maL* Kkk+ qCwnM 89jR129}onݺ 4`*diR !s"-Hz ޾8x919Ӎ7n޼\pH,tAC"43 tr%#d67[*} NtCy}(x,R7y3a(iʓ @*rS--(]np ԓ(2'6|zHF ^Bq+ knn./A&,ث̘[du }HI y'ݶm2\PrxW,⦦K.JI?Fc&Iş&jpGڿ3oKwEQaF|K Bl3(@:\ DUG|ϲ!vn (1Ǐt+vދKQ^0d8DSB8!eY544j*HCQ͓҅dɈ +茬_\| !eRbnSv;̂e D+mdQ& ǽCw*ҐA8!w60Y"溈l,l^⓻ !Ga5q=},|Eܝ%M&.|ZZZ0TXx; +.o^5˔ 7kw*fnpgC@ P?W0- ZYG^Q0$+z Ql '9+m?̹\'0*՚Ln/v8.b/;6$` >]p5eqC'Ͼ}k.&3YtLD9&#/1#,fo0Ճ;LN={sɱY0d b^0D KXO7{06l.)쳙c$[ÙPZHUr018Њ5p`Rg(@ej.n,K[KKJf=  `EM(`Ulhe3XN !զDŞÉϦQ/#!vR(vrt>OޅPR]$+C HCR.Dx)!w9sd TЄ vmܸ^"-B%S"tQgjR$^܅n9s%$j~ y)E``(Y &H(,#*Y0 YfWaCf.G`@&0D[ԃDBD[[;:u M™thP$N,Icux׾'}]{;zZn6WV tTuUw Ԏ֍oh4`6_?[3]ubxͱ7F 9U1]5U=Y5ystH{)0vՀí%í'㦋 n7 Ǜ& 6iʻݔ` c[ o^k-^2qNq*on2NveK;ʀ;w:ow޸mѶaʇn e`k`K@s e= }M{u7v5וuԖJíE7k/UT]RYvʵysc?#pkKS 889:;Ksv{_;?@OCƤ䤧H?~*7;̩̳8&|Ο?{\Ω Ԕtѩ'OM?FO9RuO2Mxm8:*HTbѤȣG%GÑ'`ؽOw'v~O>;Jkױ] zAxx7єa;<Rŀ!aG 0Cv@TQA i>[B@X=@FXh`HpÁAF2AJhaZ>~,V0 ۇ!cJs?mԡ Mx`+' F x*PV!x)/1&45~4YTASoLd(-zBPQnC *+'R2 o0/VJ,-hH 1j39"PI>Aa4Li)K t[ W *04)D%b1id$*A4R^.PQfU u0&1jЅR!0D*%)eM*ME%A1&ܐ4z5)! !t $% O A"Fd 7bCb@Rut&235b '4҂E:P.'!@.4Р 4AUl7JR^CdtC4 ! CX]ҟ^"zRAO@PI%J@Iђt JR? Ƚ OJh!  (Ig: 'C =]xF n,ŗoܸq'V2Ñ.5!j.{%`"(zn]ZC "ҟW9_,%^VH%zTb(Z`F0ѤPX2kpDY<@2aNpCt(#!CP(Ȥ!] Oyz D\E!B)IS2Мel/c)(YCJM7g E gT.i`zFt(=F~@nR ь(0SC(,W@^V.ha|CȘ_. eДhTJKMC B ԠK4a()0DLhj}! $UV1Z5V=d|\3];Swa@`|v_[w:owVwY6[9[Ue<=_k2\k-zaNs悉‰ mmwi2[ Z`9o9NKۯvԀk@NMtennw5ih##_jW wj9Nyk@́2k띍ez.m\yVI W*,*+-\w|RbCGCCz{88y9{;:x;88:::~F`o rv{ԡC{X@}NDHILH=defg?[wBقyO=}*'+;;+33;=-;5%3)9=1)=!1ɴ'3ŇˈNH=qR~<*U_C[ctTޝ-@=9}82PDqSpP'c۳/Ƅ{O=:|qD{W خ]Gw67h ?~l&:~4d琝ǃwYޠwF{Pw7w7_7G!^nn;=C|vjv-;\}|֮wYa*e+\lK,Z} K_enxMxh7׭`ggA[?zZF X{^Z?Z{3_[f8Z-x5gY7h돠,۾j/{Nv45ݒ?\0ڜ7tzP/7 \,ɞOO}o>_,FPE")h"!p Kh8ŶtƪJҌI ]ƫ!G%9r,5:P{hThNYڪKl1&8 Իwedd?pQa8Ł %Ld5sʍRzESd&&*i M2Du)b]&Pc`0%47Ȩ\9FD8A oL֔R*XDDOŇBg0TIP OLuXII1ZC@)h4;!<J0&14^0bkr3L2G..;bEOJg!ib2.JIO&0 PnMC S^"`IDATE d@eVŝܲeʋFL5&OEL @=ebRF)3H ^M@zT4\]Qk֬-t) PB#쀱%KcS{7mڒdcLX0 uԡ1BIH"|(<% lJSTATW* (Z&hh x*,14f&d&UTLY`EŁSHJhhUMҤ"tI4g) W'g4hᒨ&#Aҫ,N/RU%&^H裱^BU1w9 7jFAzM< BIp TB3H'\2H"@hF8M݄ BJS"M-k%MM`n OE4qv W wԎv׍p@P`x[5uN;]TR֎鯹W3S5]1yctvkw:J&:&/kpppTG |ns޽il+(yNgrnGP6ssbNOb oV*{*ǻ+ǻЭvc]5DX~zbbbfsYoSY7nוe5ej7VV\Ttbwqvw|om-{/[޶6i.;OQvvv۷ms pwᄄ訤Ąܴ̔ԬԔSYN=sTNnNayNKHHOHLHȊό͈ʹÑ~~mc;:5u@FY,`ޢ^h %_|R^FQ2c.`fuJq2IFRH{ȱrG622PRpP(@H"qR@TL>")) C)b1'00phTA7@0r/F !FH "Rʋ<F)Q s*5oKS<hLe!&*McfSPOd)2:DP u0TEECc,M.z}^q6@é0!Ȥ q&s.JJq)(,2Y*U$B?/ s51)5V@]L^Lm D/bq&-M)L] @p%H8C<ޤ8h4M)T1ǚx@LW(7D.ĩ jjRW)}J&"OD J jBC`2 z &T@R1 84tÍ` F9Jj cHJq@%Jب.0%&U?4#JMSS0P4h M@#VԩhjJ@$рnYǢXQG %9Vd'd8D+$h(EF C JM$”kn j!.*t*S#bѨB0Mb.j^X̱r4%F)«NLTLĔ."WHR] W_"&41S"%ꀔab ]"31hҤv~~۶n޶}v[,۽7zlFxng7| ss طw蔸IIIIiiDg驹i9))I i  ԳNfˌˌbbwЖϢOEG[ N=r8 БG#&NZʄtq@Eo{ۀ-oлvE_@۽ۀ]:"0^8h:̨DXxLh+8,!1]1!=:tЮK:y"4,*QgCȐ0@n4#""""?]h{Dx;hy=-x}v  v u7 \\nu_ev/gW{GpXi*6KVm_[v-sn%Ƌ7K?.GIs l]dy6|s7Ιa= {͵}m1WF5=7}~~ixU`0)Y`A`pfނO9*6m4ޠߘeǼso` _bj[J/zNm-CMMyԞ?p/yꩯ~xDk _:Au@rRi}48AHiSRER%eCSj(tѣ34"0 ?`5fXR`/d0hJ[ C`E](2z5XUGCmӤ@1B #ˆRu)P(X45wT$KdHHjP& q4.J5D`$W~ԥ0SH!0T 6Pru9Op@/ Ś\f+;hb@k;@+db` d ]O(R~ ǚ_3ؾW􁛺4ɨhL]T H1aLI?R`K]Y1[B+*XKQEh(M{ HQ 79*K R$C𑀌EC KPcDX~$9 c!sLOg 3w4|O[($ԥ2Fx!C@ ].F<ʇxҔ,o|$` )Pdii4-ϭp| O?'xw@`gPGHwh_P7>twpP󽁆UUWFY3_;1Xo`-0n߭=7v*u}ҩ{Wu\Agdkk;uݖ:_FO%S=`rD߭ɡ{5k&)-Ouh5`OO05P@=;ucwvabXW힚Erp[EM`ZuyQQᙤ ckgV{/=% zyus@ؼdif %ﭶlm۶~|]<u$*%6>+!1;)1;99'))3A?@|*%TbR.Ĭ$ N<g|oqi 5:&(:ĉ:etȨh ~֏A?9 }qܷ?ބݻJ<{c,?eeGw|>LA++tXxlخ> vG|`J  0 q'-?Hm3tȑ0*G, dPpd|_Ё&Ex 8w.o0O`@`_/wKoAs0w7o`EVv~?xa_ݶ-go7k:=xfPy`)o\o홞S5n}qOkOM3_N&tr"W>aQgJS2uuPS5PMJ*0 aPE.RS4u !]94H)%RR) [5Ugzi8xDRH23iRI[> iJ੃WfYѓh CqP#u,VX!NVeq FU1A͹RAT@<Ŋ?-TTf&TT$6.4颢:K.,F‹^c@S: TN`-p (<Py?毦uN ) IBi~[񔠏0t3(SC< #&TA/HEKIݬ.A }QA@RBchL pabNR7 ~K90Q FG[RLV̐ 3V&MR[߻W š|M+43(?4d 3GiZ HJ59ꃀ5g)& UEd5d.9:mz44P)B%`">4:mtÃ= c ;Cs`㽁{U⚉ޚT&jUyq lw;KSe?)}sudEmM4h93zRk0Yhj;pgv_; wnj6wUszr5^1VZZWYZ|1'--ဠ`?'go;Gm[ak{nla>1oi+-u}fw m⾉.nV +2siF}}%;<84ܤĄ̓'330Y Y'3c3OfLȡϊˊ˴@։LAtL1-?q<@ c0tяޝ3@=l1}Nsw]m@O]}SthShcHC`m@M@m@MPӽ5=էzroyg&M?oT11P*zWE.eT< GFJR5? SU@`>57T$rGSuJI( v Q8 sGL(g80jHWXo;w'b_1iɁFt<=hn=e=7&{~t=eo\sũsg'[Nמwdץ%K&.*rToTM4?\w~jp 7jni`>&ʉ;w& wNwý 7~jjrfV͍+NF cl{ƭGd=(oذ}{TRf=mƀ =6nشc$m!J?r:%tbbv||s2D|ډt :!;!1db1q4cNZʘiDqhA[.H8p(~4|r    pqs`qƍn6mq[aJt\amL]jRijM0w7-uz#-~n~/yoG?xt ɚm=wvhOKKMMIJLINLʼ| ?מ_>_|gH8HuG LRu܂MʖSñ- us,H)XYCo."PQKҚdBd Y%Ϳ/Cf,fS"q@]s5jS~p`OWoQuMJk FclL#>&'Q0ЀQb*NE˜4BlV4!PJ17E@@ /*8`z4\Αp@q!gsASa6!e `*QZ,-4q ݃i\Ph'r)M?K0 % &de4рMO  [JB̨ X}h-崒eL.S4xh&OZ~UcF^9$"+/+,k /˯HU@,J `R 1C@a?yOZ4DC<^5Ra_ 3&THX 3?"ԦNko< XjM 菶S/53~?/.@E־.w KQQB^gz煁X473DaH8'uR7ks ̥6@`h4Qf>jozwl4>tgu|e|z㝁{}Փ}5fw^=7*bie^6Uzow_ouqT{T[A{TGdTו{K-?Q: ϲɾS1P=9TsHパ&y`hy o3HC M6׏7[=Wsz`ަŅ)'puup;nu2>ynuߖ[d>{lf7Mn6l6gt&5=lp_k F6{ɀu=7nܺAVo[;?G@_}FGKNN>z*99;!!E )93%%;%9+)1d|'SS〴،،gޠh f蔈#p("&?Oπ9z߁},@x޳Į=1\ޠg:c| my>T m<@1tn7B?|1jYyg8a]g 7hfW*;cBâBÌb= zSC~_=>޻|vz{xy{y 0> sw y [z9:Yl򕎫VXtR{˯?O?@_m~[YO&,^at:mZqDOA͇1x [>u=@z[W8M?@5g7%֜K2fRMRoݕ*ȋk9|Vd*ӟ/|(AjJ_Wd4?>@@zJz?RISሆhGbREuTAg,~F܂ WRf 7W0o@oU|EJsR: O%H}[Ё)fBN@Rx$B)C(0Vdt . O BR Y!/| .M -g!|SE74Q s  QZfRH)G(g-(f'ߛ%!EEN-ZCy(U ^PG>QwE:JLQj<ԡ`coȯr M9&3A̾^@?MMSqz`-3.ʏpe5ܐ/?A$(/ӘDiE.OJI  膞ԡJ:@v19M[ %3Z[{bmMe*]&bi5M6L98Q8_GF!Q&~_@$ /ig֦ AUy3?pV[0 C@m&`"߸q3*)Fgs.f5nn_"K^G 6H02JƮYܹ<570X)>%:?@4`f@ 5 ο4D[&'M`Op|5xio3|we|y|䁚}5Ɵ뫚2~P⦩{1S~eS=w_}`@oSvՇ%/=4~3m; VgÎ]:/Ou])3~ߍ@````Pp#hһ󃱖-GZpĀL45>j3`;wG'F'F 77U\|6+c]=}lwgϭvl=lm=mmm޲sf-7mq߰xz^1k7ZÚ.:]5{7XfuٱX뺍&n,OқzT6Z`VBt =v&5TJRfjrFzjffzvvFNvzNVzvVZVFzFZZzjjFJrZrRzW OLȈMHKI3ᣧ#ǦG& E$^a~>aA۷{iv;?@*+W9,Y}*W8.YaxƇz5bQ3EˍXXXfXi K7k o.j]wяr>Ϡf?'BuMf|6ߠ-زrL.q>e1m1c!m.-[ ɝys^x㙧Sߴ<@q)tr//^xIG)%G]DD޽}HMt 7MٳСÞ>#\isp$ Myxxx]+Wڵ>>~/!/Y,,l=_z0"wkD@?j]HC@m6_~WOlP;wϞ=W[op?슜8g J]:/Vw==+̠pt4aWG+f Ϡ G ϪU5&%] p#$` ȶ/3h~D0!ۗ"ZX'HU4f qR.3j۶ K8V o' (%-uHC@j`܅R*Ys<=%KÇyO1 ɲڻw?i3(  bȘ5}`9y杘)nfxe"&Hk¸ ~睿eO609yA|Zs48lyŊU"08=PvRYq8p`%f ~ Cm()awrllVE-`Zqf!n?d]^IG8?R?"(#6%K%:c53nv2=2[7;}g8ky}7`~0I7*'n)kSW';J:Kt]y}aW].yQ|~˯??<(z{K޸W=o<=L 7hj@#h냑w!`u{#/ol7<5:9:12> hUm;[_0@=={N˗~>A>aa>n!nnnA~Є9;mشcl}nY|vV/q\|e3^Y;dU+ָ.qYʅXq2E `݂xŶo.6w9 ̞W<@'N0D0s |7fz zіScgFO 6?5X_UU(+_S<ͧXBqzq$8rXWWo? 3<ý}<[i7768prZUU Cf8[[o߾3442:z…>rmoe]z@fS\|3[h,,&:d,4KJ4HG0'?WXwB/2d_W_wq,:t(1["q !aJJJ` "7|S*0exxŗ3~}{"3E۷oMCEF!q~x= K 1M|IAdܦ M0hpC)oSgTEEq,T wo-[}O̚53`~_M7X!WyH">\T'[޽w~e۠jB04k} ͅ pNI*;$gk^ZUHٽ{/; h5H[p3ybdd3t]>E??w.mP_"p/wI"KFY4C|Y4k`c?fhc?vc2MtQ?`S`?1]K,S1CNSbM->>A^U(U'u O|S))i]]=_gdIhrr*Y>B XudhmQ3Q_},][[p"b@5HYX}@Th"@=3 <lcll0 ҆K7nb+9Zvr?OOO~/~_@RC8~4 RpRIY \& K կ{X=@?qwn_ꉁɡbPP0ȚɁ{nL޸}~Wt_e+:Jv\~Qt-{sJS}>?Vo V=?XphԐW 7<m~8f5iñVmѶcmnjXQMoЖ{Mow:*Kdۻ@wudh8lnw1IQ9HHDN"clc2De HJ3fg9yS+=wwkzګV]޵kWծ%eG$%GFҏ & HPV6yhHӤ xxRbܽݽc\h}b}<бpCs@X?2_ԶT{QWIg #£ã#bb2NR4lւE W,[fi%WKW.[zyK׬XZr֬^r+(_bт 歚7w\+eJ=|cfJ/J-()-KLz䝩/r}]ź*:ۿzyz)[WH׿-G;> NYBQbbҽ{_o {ѝ>DEzp㏇CO A4'$'X ˆuIO>4]Ȉm};bHH@T.`1\ѐ 44ԟm $hBMLpxGr3azׯxVcM+9vaMzΌO"̓kBIG} sI~Gy&P o+ " _wttM@_z;-`_z =|X|^#lllDyá6m8qrhh8/6uj17wy)X{qs絷wϡ1Nx~ݟ $22^,Dh\֤0f,4B,> O%qmݚ&LdYÄݟ| O?WvOI7oAoۚm|g5SԅWI_*B ác=iBc5ebmYR[<hp' 0+^4sQ.rlaq<|uWMklČg K_㏛*9%PZM8Bu 4DM^2L<|QP|R4DPM 0^/#66?A0X#&tcPYh1: %%h~i@G@(pk)e7>򔧧7bQJ|]>~D%kh\ZG,7Gq&C zQgca"!vP(,={ڵ 3M2*٤;EC%}P!HO,_b=0#|#՟lrgh˶zt2dIy{\tDUȲՐz?wȐ~CGZ È?~PZ!Jd~PRVb×V#wm(hlbC F9s-47~Iܹ hle\oF-&PA5f3 P4XM<71ni0/ xZ!?H=BIGK(d* !ܠG=d13{`UkӅ&hM^pĐi*ëM1𥗙K57_fJRB 5kn޼E+'`ӟnFԐt 4Dsij`0;w4 )V:ϳe" PEd hwNE`McIJ}epa`hHhVHwwlkN +ВexP$KjȰt.ri$R75TxԊ[ %Da,gJv-&&&q"Umz0P)8#kûve ї&@䁁'h9HƂEMBd}J+w=))X `Ze:@(m ;PZ:?1C+6 {E&He-@ %  `vmڴ` P#44bܸ}5p w%O- Ô5&?pcR>|`<&E;%: Ph/}jө6Mh8qPy֗.j0?t2፺7tUf=uju^eDž緘nh?ŭsݺf[WT:Jƶ[;:jww6j8tXgюK'[*ۛ+;.r9 Λ<0ݭ \Ŏ+LJ.\ho>sT תo\XUyM(-.ML H M H O5ĀĀD_ H5߻oarq>@wWgWwW n6ĸzF;ܼ֕ 0''/?! 010Q#JpG:(=}b&DfǤGdDfFPLO M JMH+Vws͚w([1cVt2dƲKKN+)ZdEBѢE {|!z$z^8qIL-Pz}ڀU(m߀rz'MIݤ g̲^a6cy- $Zk&-P:ןsgz3s fdɛ.iL%3&gLLK6>=0=0-%?-9/%);51+513;-'7#/+5`b^Blv\lVRR^zJAb\NpPwT@`RDTVPHgkk?;r2g;m .aV>|=3=N4r TZH坁QCG~h~ hX?`hO=iGO; }PgA/=d7>3kb'٣ !h:vHkݡCW/Zܮ;ltˣ;yro ~l^6Gݻ_-[ؔ3Cc{o⼤IGd"wq[_WK,]tu#88  L}#С#D<544M2ow"BEM Lahz@2^Z?k֬9w?Nk|;--#++ǗA!Ω%%eyx@TT MbȐS$06C\&_9 zM4̈4gah{C?oDEESYR^p?n#ETҪg^FF/PC1茹X\ 7\t6YhV <#"X D MJ755u[`,x 5`\٠Њ Y2x0MŐa+ ʾPkanڴ/w7>##Sڶ?^=nO/f Y(-ӦL8qI b.?^*k@& zyzz3"fYByMT2Mc^^>fal蕘y ACe-Z %ұ MPP:>iҐ2 ggc.G;be@I쉡$CcNn}1aĤd&F0'ƧŸ.4sM/6v^ >f٧%>4c M~G_{xzzbFIcMMeĵXM0)M7嵩#c+v[({êZb]JTXHg-<SY Gwy{A_ҫ>"ҥK%%^c_l޸Q` X{RG۷(4Z, 㙽` ',= 5dPb8MInem0RX^zy&ۆ,FlH86Ͱ$3Nl@x" vR,ZuP$)i fvv3E,M2v8C\`ˁqaFdi*Zc\l,X8^pQkF&4d*Kր3VmBXXk#F'A+ZZ.Hy rf,|60ꪪYFO* dŵxFlW1 cF3)Ȃ9;c+Vr;v 9\FM4a,Y + X0R,XzX 2Ej dCh(!Ld Ǐ^yǍ!`%PӋ XPg7U4 #ӑ GN5k̻D&r`;I/-L"@aJ$Rtlm^PFO J N LN2?n ʰDdO0a֌s笚`E/Z= ̙jU箞;oł/^l'+W]V/+_h͝t3ʖN7|Ƭ3 ,7Q^2rٴKfOxiEKL[:y~0h ,T8e`y'͵1K6/0)f+m4 g֠{9({x@@,3iwͯζAI¹z^.m~`zo(gfȶ΀ }|#;ijV攬I3g'秧䦥椥fQOMLIHK*N/HIMJMˎLOKI>-3+ #_ TYg`,s>lT\1!@G}|c}бC}[AT/ˁv& v{ߏ5mS4#:wp?tWkkUϲTn6tFCE[ѶW]>|a}|2ݷ_zAj u's\\ :;u: 8 2+@9a"`ŋ˗ruΜy%4A FK>Cq|ӗqϮ]{ѡo9wKG_ guBJ766~7Μ9GHx|}}***jkk\N|O5445дoD= Fud\6NG㑾gEyKxE젿b @Nz4vgʪJ,}E=ZD \\Q)==i+WF\uttdP֭?ae婣G$C#gR`TRw6mr|'ObZi# UhL(  d xB&%%J#?zW_5Н>tlh0o@Am trЄ>~BL&%d`U'BeС# 2XK33d,_ˇr͖Yƀ|-[~Ç?>77w%R֬YsG}TĔqKߴiKv68ƵkmdڮEvR t%$YK,%z]b`VŅ3qǐ)Ћ:0"5A?b\`ż0@wTWWˬe^ Y} $Ccw-m9E"U֜;waǎ]\hQAigQGH^ڦ?e% ;wƽQڵBaŸP1W$O17nb. Mhy5s,qAƣO C%rO:P2^\d[۵hoאַٺu+C=½pǞ`dvGLVAȸ"˳ΘQ%-/ Dy[E,C7adV&sd"`HC^`F)6ּ<0?lw[ؠئ4r9|Peb@4dcYNMnٲ ճʸ<-%?QO>e[FCN+SNU/jPqfeILavvvż donU?%>}_QSS Q߰fMc]AբC- eY:{}!4ZuӦM;vdl>>c\h r@ 0` ]~#6©Z3e| 酒\8u׮]{̙ݻw:& h8a„̧LhӦFf\Gʒ qÆMM.v?M7nft}}.***x{]r M6[cm߾}߾}C ypĝ;w=ztΜ9X]Z:_b+Wbb>hbt؍D:uFHstݿ߳?I'Qas"b13X8?e0_..npCb!1"KUa6Q~H@+@0X^!ٔtzȐy|Hzyy|7!pC cȑc86>TٳeB/Xe(V4̬k0d᰺P"0l5Qa!~`ibB%uK ?PМ]}(E Vx2C݃l5zX}` z׿>y$3%b ر/Gœ.eQ2pQɅ6qƷz |oDG/^+..a* fZav,YhYtAWWW4>&X}a?a0:lCbCƫܾ}[#Пɂjo3 < ' FĞ#N'x__v 4a6$2P)tD"1PU6^R -[,Ds:p6 i" ,[Ԇ&S+>&Tɑ#xi˝xo߾VHQqX#B,LXIJ-L0cU+393(`&!ޢv֬9L1 6m@=i=il{O;vK#GDLb=PP q!v@"@8X/"0NQ૰rIxG^{f M{/ʟ'#l%)`f--fWQLHnX0;q#° UIf&-"">HFxo@Ԟ\[qJC> S=9h7*n4Q{F͡n5ݸUnwG#]u;kvtTm8_]g VmoY.ջݷv5|XWK;/Te}sچyقv]VvBUŎꮫ\9wۼ|v{kV_?]u+(ȏK MJO K M I I N L L J4 |YqG6wsWTo9JYfz"QNQhhh"]"]#===c<hdI~֗:1ఔ𔠰ԠД4 84- 89 $݃BRbrL?|֜s篞y Vϙr֜,3|޼e(_b |ٚP_hf*1sKf-+|e3Vyd%Jˁ%K/%-09~ qN@|f 7M>ߗ6pڼm}/$~C heZ?z_|72X z^|NMs723R SsSrJKKJ(K3/&2:3,";~`qNg1J++l'}| h`KOZ^egMEIg; ǡ?@#xСc?R({~~{r6B<}  Z YOֶ 菇9[ n] rF^o|(4d r,Amf͛7nVv:Cy}oE0+-Nm$p"F[\Œ'+ggW6fdqTF K>^j &x>Xn> \ Y5jhhӵO=/RL/r?S8#m#0jx?y`3 %))a25S,4l\.,IVݙn? ,_Y0ިq=Wō!낄Ν{<baS°xQDsB..8? #n\5YL=MFMpΞc/lfVK, W1M+}.6dY?&YX8^g`ѣaÄ++q&&gpYwg9z{}&n\zpe=qkY7ocv CQ?r ChŸbg`jfd:7IСǎ  .&&RSٽ<1 C:u z]&BGee!g67fe:a12gQgʠaZ1Zv{o}a)Wl_1C934 /c:EwŠ.Ͳ\V…  VO#l#0mZ ]D0(aic҃QUUˢxgN<řEa0 G1 f+'N;pWl+(,;akk{c3_VUUU~O<O֏%Ka('',ɺI>-.v5t2V .e@[Ŏ;y׭[Ҳm6,YWMggWVVuD QEZÑА6ljop_^DMs`3g)̪v{.9p6,=B(/&eb(,%6)SЍZaBx0,<7~il[px !gFyLvT2Mdtvv+?RMH`#eh {ѲHN%Z]wGSXna,d?3Ɖ͇ya£?+2,Ĵozy&ʏ7V}zApuvTv9wwO8DeDˈ@%655j˙K@_ы^qo~W7˗ e$fe~7ofj &Y 5bX8.8-9)<4!;PBw0&#LJ+<`_0 L\%7SÜdlq(ZRЖ"`Nl}]]\"he`kBy؜DCVppd(VX8UYش cs" S"=v߾_T,L_Ȗ&`Tq⇔Dմiׯ`tb'{o"{,J]raEgcq?g؟9Ȑ;VdFpcM ঃ'b/ H LJJ J LLk)!@ѱ9)irKL9VΝj.s7oy_x%+˗Zxբ+]6{Yee3̜tKJg.JfZ EQN3iJM-19?Գ*7r޸wv~z6g%Y)z?*? ~u<1Yy3_M@9貜ܞrv:38R_HԓNR`[=>' 5%;91'!!'..+!.;- 6&'(0': 0!2:+($#--\̲>wEcמ= hecAS>:X9hG~$p*Vz0hБA+CCdo>^oT/j_Z9!̯~'V}F˹g-8wKg5Zj閚˵S9oᄃ7W_1' /NE<ͩiuqq&&&s[c39М BLJ~cu"B(pDH:wr"zs7w"UlڴWg- q!- @oe˖M6QG(S kn67 qQ~& "\  G}S) 8k? ["ȸ#\iݾKƛO,g"Y\ct...%$& &XRi `HThFt1ǚ‹FR8r! U7oG[]#B m>̢E;(?*Hġ07»1cƼ۷o3gR` ;wnccϿeUqi\%M`b*˵XpV3%׈pZf9""[O$DՄb"gϞ)> 0?uqq=zXyRsMB=  ./?d[YgMN ib ž4R 8<<… iii/h+1?ȕʕXX~ܝM p>3rIo$fbU*4=oG1,V |{ .u;w:ydttԈ&1Z&Ō7 b =npf=\<} 7ŋ>ZC0 % (=kl %pdG5`JMSrr꣏>[]]E<kAqO A.5^7n斚QhD+1 v??g@= b'afC=l11qIrnxі ‡üy -dc. ݛ9ϝx!(b80_l dmW+b=4ٱc{ (nI+V sQ@fa"]]q0Y?5dŁ 'NYSS?b9 05C'&޻GJУ M(ڮ1dz1L4\8u#2}LnԹٳwÑPv  CF8{bŊOXn/+2{tr֝$nL9jNN{QȑÖ-m?ē<8|paYEES6p!;K˗/g7a4AAƗ_xԩS'L\xmh@vڃAaqNV%>uYe =[ BbLvg(e'~;}Nׯ6 ӊuDa,٩#a+C4N@}(iП CA9~FBX(9]d:R%X"ln3/0,|C#KHR}_Pӗ -VPA1N;wyy&EAAA^^<,]$`ꫯGr`j +PJH/~aRHlx~= 2ꫯVC&<^Lżhv n,+vHv*|C.}!ӋīzhIB_{(_ܹs}@fÖ^3oذ S@TA1Dzaݻw_og,={2J˙J?81/d^&(.6;ƛ,ի?a 𖊊DhMdvtwmz1"O%Yf88-03}Q8yǎlĽur5TU s2Xx}{0PPs/0`N{M1188,+XDl8B444K)؂*mgdRQc3%zK'p7w3c{l_TZH7T]4~i%f^jb0w]6޲w W-rޜee3(YPZd:(QnL-Y2eڢSRZb^?}_z) +P&/rxGK@۩g=\sooQfL\/$tAYϻy*{ő?3蓀|69iEJ@H\`[Ul^ˊHIM.a}B"3|œ\\<"}bqQg(Gd =J@g4\?-J7<*z`L((}]Z kB!~C}Uh ˓ˢ7@?6;K֯uv߀^}fM 7.rڥsWδ6r\wRu%cya/4}w/84G'ZZ.rq8LLL}.WAj{M«S8>|8q8 `"СÈÅXs\ u&J^AHѥ88"t0p8p[o#Ƕ :nyZC Z7nFmB(nMI,R1HB\q{'tЙp|I&Wdq'"{p{JFxD+0zҤ)NZЙ饗̋{cƌJ[[ɢ))]]]\z4qȐŸ@:ڵFêjIɩ BUJ& UU]<|0 z7o^CCO4tdB&BG܆GSZLܑ:;SR҈ÄGQcsxG=Νc^O$>܋:4gg}a+?}Aܴ;w\ؖ[(F70 K>cdEc7i OlNYɹ{>ƅ Zȑc\hM\_yda`"3F 5>s-¼𺬬*F7f=G+";Dr3~d8L !>}fE5442dn(#}mVXFPPD puVNLgtܙ'O.ba k/!m۾dl\9vZ$?dco-QH<56Cn)&˖-۷oQ^xE3}lucsg0{A8Fa@8:#f@3g.Z>`wer3=ܚ5k }A\vJ@$`D~j0e^=_b߾|u}}VrU ;2ΌeP¼7,|_4Qeݺ;v9cD-[ >aΌuE{ ]()qo;;QC#DU2XJLw\ejfϞ˖M FǮa3aEL+o'%KX,a8VC/)]0CGT¨蠱 ֟+EAI/0 3ˆhWz $J ޸w+iE/|p5k|bJW{4QJaF4l{O֐.cа4NvS`=cA~Z Ue@XD>Kٳ}%YīlnO`g@pHJ>l֭|i𠁯ƛڶmlXPfZ_y^ƅ$`=qbÝ>O[ ! =6dıN. 9k%4aU|41."Û7od{ D.QiWۈdX2W]8 Fa T/'3: C+іyG1NiP ggO&d<^#}iŊU(֭vpW0G[I}-6(vّ}pY[1A;j0^GTГ86+ ^Aȑ,eŒ k쭭wDPؐ=gCF+Bq&KF? u0)26''.y9auZnu`L9I1QCIY Ppp8ac3 9.Q3/ 1vD.]00ҁc!Hc`]szß0#㴹p{0_x W<,{"xܰañc{1 &D%Kq{h(F?ɌXCbgZJ,Mt6:2(GfPH609$6H BOpo@V|av䭦ʛo4QwfujvT63W]|oܺg7vTsG͎κ;vl=$") 498JfpHZPPJ``J`prPpR@`__8zNr4Dn.&l^sV2-B3yg LJ1+I,8$z]7M:-V?=vKttw2pgp0w 䣍^Qn^ևAGBb=Oo;06+ ' H L J I N7_N KMI_gsW,jтU ?wYg.9sK/..]T\|v\ h*r6_,ރ7n}>[/ q᜾ h%{W{гS hJ.^|ΛyTJsM @Ū+=-#(=srF eS Ԃ̔t̬ܴܜԤĜ茤ļOh++Q..n>xQHǠQNktУן* mU;o)wdg~GpiWyr&7m hO6@6' h'Оt;7o]>k{]:{-5kO^l9yl{^}ekJ@28 ?p أ͙Ǒg{4Y/-~uBDQ\op ߻w?7+/<l/_%0!DpN|B@"B}[7i w~5|=)P||Mb}_|`É# ԩńJDG.B\ Par"CyyD5NDҊ"9 iЙ!&с^r%a.Mh2hɛ888}ٳ/ ZQcA}vP7`h⺺:$r1qZTE*h;:&L@x.DTL L+%Mrrr8QRyO}EGG#G̟@ [ˤ=رs}g3dU)'|r~A /b"544ܹsiii>k^J%2L&R"a}avfM} z܆ۅđфzc1nL( `raH,ŃqrCsff6 YZVL4kO>ԀBB/^{Ϟ}41XftTܹV߼,B\X0\`w\EQ'(jH%'< kKxh͐ Cg8q?{Y WVn> K?; @ɲя.u4qkI,$=e5x;Sk";^zܷ>lMXB 3,s~Iq!2|aj4ļ-}]lJo.t/[ 6%2?f44wwOl^8\0@6hB3QBpp f#E40cF<<C_fpWP/Cz=#?l&FY+#.c`%faǘe.x 5,`1;#}!Iq]ZX8DӴe6s? Brbl s`"a>|8sϽ|ݻba֭[G߱X,H)'!ZAk<~K6|Es2z衵k>|xȐ+WL< ^|aW~_d'-+5-[{=.ٯ&^Po߾6lBsXȈ 1Y@+& tټymz{oÆ G'%:*A]J2Ь\2Vorj?x- 8 :Rx<^vFRh@NPR |>(jbchXh替 aHvg2 sΝX2%̮ P%Z(s=/G3/ds_}ˁ)#dHد,S "h޼U OfL.'͛7iboiiA,8 #ȑcL YxCgzމ֣DCrQQ1LY v,)/40cg؈dq;q1AAOÄ-f p Cqf`ͩѦ^H < Hl)k2aH^QxxxnwWη^l\Z}s57[.U9yMW/)<-61#(4/(.0<-82; ,׼c^ 56c=<ݼbܼy W#|9rP1/)ts8 D,S0%z4uws3:*vc^|6o@qstE%z{ڤ#\]]ݝ#R6`\ y2pD$߀dS%&[H N I ̊M(L˘[0}RѼK\:ksVP,3w98ʖ̜7m|j)Y@|ZBzIP$y)O6 <;+ݛF߾\h' f۟6 oX@8J@t^| oz^niN^Ivnqc 3gjFvQF䌌 V030+9Tef'ef$geegןsr#"RccRR c3= wr ut uuŸq.?A 8|g|d,q^N1+LG6rӀtC@?9h`74΍˜w>pIB v pw]wj>gŔ7^o:}k*.]{ Pؓ<+7C,BVfȱډh3dB@Ϻ9^MC x8eʔÇ'vİ•ySNMl],k@U xj{qCsD:)&G$&."",nL\ˣe+?<ދaaaM41_pRZZr7DK*lwmUIC7aIrIXt9>͉: N/zxxq\(++|_ &^~-::Gzi`0ΝiBnj!>>:{{XsE+K.(&265]R( wBOKK{yp!gP813R(nذ 3ŗ} tV ݀!̹/XHݛE}&$$%hG+{Gi6jXoݺ,a|AAO>xܸnu@C"on/STB4ڮP' '^Ccc..3,=f 1FӲ6\iދz@zz&jp ?u>35͝;0h-؜^5T>kE8U]]Xn,(ºfҰ1.bԑmYz,ÅV pa2&-sgy&&,^7C&7נArD Ty05EbRf9zlVkP5p|6"jGZ~GYk $#7oĸЍmMw(XY?ГydDSLœu1/jCYa_~M` M֏ױъ0l)Q@M,.U<s݌Kٳg˗'2ks2Wwi| YY,(0I!#S& 8LD+dὸuFzḃECcCC;*w |5Dl^CCCY,0OLt1zy2l v6f-`^twшC7 ΟOfiHCYk,+V+>}C| EƏ7_SWn%_Xfͮ]=?WeZdiKKK@@SO=5p c֬9}k)J/h#) V[gX555{5umݺchy&o{{~,\>B\E6Vb*=-,xH"T̡}hhl/>5.fd:p75m0pCg}_7{\lJu Y :<9&nݺ3&CJ)ϒӟIJŒ>ӧrdgtx QĉJle< dي".ݻ&Elt744'jy|79,Y8hXkK/.! 9n<!ca!ӋxXvә_Ēa֮]c>pC"_zUcs/Op xwݿCPetD2ΨmgϞ+H#Cf0"g#Q# іbB]aH&EYXVǢ`9xO!,E=' l4̍y3e`py'"zX=C tfghisM7*uYf[54{Їuqa}/:/n2y 7lUVݞ}@UPG'\>\ t_>l>l^mnt_q|W/t\VsF~ ͵g*ٴ N\Q5J7$WWX8xW;3#3I=ǹx9{:} 9:RZ1@TO%zsT8YdIՍ 9&Ȃ<:r 11|s㶾=-5jyu:FĴM4W_'pgOow uO8__D~qA'C҃B!LΎO9%pzѴ3g--|Ƭe3f-f-5kK)/.^^RAqe2mt0Lzf^toyܛ}' h(>>6g.M@ 7 J fR:?z}1̜s̬ə3'd$f&g'e''79ԼԬ̂،ܴa>̯W_@bphOh`G0bp`G _pX(e^w^اTBN1z(z.?{кz8惂B@qe%'PxLP{mWZdI9 C.*۷駟q$N^ >d-!51.Q4ƛ˖-'ķn_`!%]4B$roGﴴt;wZb% s%!wx'b %D'nmS7"!.\ Jx\7G1 øڵǖEN8C&*/_|gݾ}p&;\E>R]]{"!DcK`iR#j$ǼA"4AXGG׆ ͛OHJ/fΝ{XIɼp фW_}5#H#cg}vѧNƞ /];t0>@83#0DI5k֢ 7>{?Y m !gbò٘G qYsuoa^d{< mWQ6D7ZQ݋^x4#!r{ikk۷oYPNL"q?ӟq`<5簰Hbܼg5_#$e,y ;9pdR. =$a4--}ʓc8! Oc (mrn˗pOƋb&6pZ_B:X8.޾X< L"ط-Za??_xCG'  +! ŋUUUk׮Es<%puϳkn`28}4agj}aFVˊU)v1/llY>/޽a1:P8/^oo '$$ YJjo/"zE3{#<35q#Q|jdoa֒RhbpV&b[c|LLc۷`*5 @= ev6vx1́5e~э4߶mo .w܀P2!'Q%R'μjJ y 3# .y aJ_9wE/f:/wwO?>Ô41@Аg&x,=Nm6I8xG9l/x EdFGNI< p!㑵QgqAq1|Er.pZq(# h?'BR!kwA#086͛좈ad)(p6"%a&z-sJAvin"{9#L8]m*6>l2.0DKL׫˼T0)+,ţXAL(Titݰ0lr֐RyK?0?B€̄t}ek֦Smͧ.|fv7Oܪ?nt^vow:u꼸? w5xvΦGZNܾzƼ|Tg.^}֪]mUݾ^V{bݹcwm^…MKMˍI O MMI J=6/MM $:{&9y.qNN twr3;'J@qg͗]chsh(=vjk{`SǰCF94`r#G#|3ihQpra= hh.Kܽc<}ހ_o@Dd +Ge秤OΝ6aҜE39--d%3ʖ̞UP1sIJʧ,/*^8~qΛ7[߱c++++**ĐcU4;v쬨u$MA.6C@OG B0}1GCsgF==E3ujɉ'pGaRer@B1@) _O1&D zP` .ٹ1 щ9ЍD3\c=Ď0ډ4q)- <|2nń0G ٳ熆 PЁA͝;;w-nǏ\XPyG"FDD} C-("`\5;&Yt K>0 3q6]41S26?%p `%4!M4! ;C^d1\щJ<<@R~"5h{IB2"UL t%Ɔ VҺK`m_\6v?Z#|x25i}U㢻n٤%d`7`O LؼfjilV+[ԩS~)V4$v*)t̽nL1H, f2dn4 )X&A؇^6`\t/^TnCː&:ҋC2205|hiذc 0D g ̲7@}Ŭei*f64.(?cFnɸEߘ8e ȑ39PJhf|a\k0x>d}mBCOh,l8\15,uļHj3~a-l۷qcvrM{S c8ΦDƮGd-7n܌ Clp]k>3H$a~Z9S`=`Ig#e/Ue=( M\\Ő;MBVxj,cҀ^̟YO]\quZLꊕ۠aN`0Ї$0hTd!c,N݆xQ2Y,1ˁ9``EGxX5h| tzQ!dݻw?{#H 1`hI+O>0(JHA+}\!]laFajS҄YU:vʕ&dk4 sժո ]"HķY ɉLJaGZ%PI֓Ė,sl 3lLӧwk8 Ж.D m1#l1ٓѤ# J)+Ml&Ok߾}Ge;wVА~&aÜ茡@,GÜGkx2#L1鎒t!hYx 눅ƌ!'߿[(-Q4| xY/_Aʌ9S.d^RVQbkzCm۶ËCٙe+71 pɌK`pNX>U[t͛Tj*a54vZ_1/%:LYYW.kptm-g7rVsg/0o@Ysfwt[/5~s:}y~C]U_vU^j{G= {tpgӑ-oj>RqgrU jިV}LCSnۼ~ɂS'fDEfeJzyMAgWDD+ $xpLrLv]R PwOtrOpst5 ptG`[05VG9 dH%j[ U hfcØQcBG 5&؂66bL*V=lK~Yh0J& g:oU;{dWh7whϱ^~ O@o`ؠԱ)!iA@pXFhDVxTNDt^dL^\8ʜ&ϟZxzy3͘^>k撹s͞S>lJg:Xb% LZ <.T4R¾/Ab·_8p܂sMx {za'%˳ ,((/NzzjYygr[0ɞ]]tF䬬)iGSlLH-H)LO.J)UX36;{l_`o{K{GS >k>b.䑾:5|7}%8k H_x`H)iB}QB= -QdQA ZEx^x# z@j4!$ )t:J!`+R: Cx)Ca5= = FxzAIJd )hه:H@HmY!0鬘HV2TK2C+L!YTP!% ,(#ۊp{RgPfήt.tD:@n0׈hBMȢ;ҐFЪȥa 3!Y"KGIG4ACxԣI:<J<O_◨ӧlݺ7 L,Lw: (&t:r%V( i4$ujkA&xLVHlՀ'*v^HI|BwE. 5j;R$KրpbuCCSCCcuu [~e}̎2ehϹ@Gk9˶&&+ x C]d{EGtÀ7o]o}b?~3/@& ;ؚ#So^ZI=:NV5jhFjDC$l$V#Hu#";t0O2ͥ*l5 xcRE"br $$hhHmM|lb=H+hpC.#84O2&Jid2@ g)E+S=&hEҪ D:ZD/BF`X<R<-آ ui`Ъ^TxG& zJ)} 0^#Є&<XJ+𴂤/"JDc @X) z ȂV_cÁ::KF ^E< /] HH4BEJC %H孷ٵkOEI?7@h)F >b4IC?]@C,ғtGIb^8S  #AhP(C?xG >DZIm1Y`C4VgnpRdbB/ & CG$xŁ^ A2XNdq(nPAampC,D84<;CIcd.% h AE3MР*Jj:oՂ Zh9w|lGK';Ot6n1ɼ:1|I[g}~<c('U^6[QJ:tyboC3 44` l'K%42+*671eB^3g(.]R\x%eeKg*/-[T:}g\Z2|jޯ?$'OY4q|N@9  %M9eބrw2r63ГK%g!rsr|7=5#( Ȝ6!#03%?2S L:5?ݪ礏yYiyIq9!i)IQ^ncc}T/a_%OC?)kj{߀l}{WOqU6T6UTmMCz`pښc؜֜dm:xx Q#VH:>!o NM@|,)@uREAx#I(% g$rg?:L #0=J/" @2$ u}_>`1b+: U(%oE̡b,]XRz@MBj%ʱ[ATP bM푪!iJ a"<0m=j@d Ⱥh}`ZЖV{\h\yU+Z!L!"fѱյ\g׮=mmbcۚQ/JaT IE 4ԥ vG1pSC5p1@c+1 e ah@#FR-uuRMcsX\,1@%&TÇVqIEm)hDF)h_pu"ShD~{{wMDʪT/:ӑ:4PJg0HyyO O`EԝRve udhtQ/`h/`9`֬9 II/6 uɂnPE jRjR+A >uObC|4w|0Z5A FBRl,`$K%x kRl-T(U+ŞDVԣ:"IzLCEQ(Р$D) H-C)1.707#/$£2SbbS CR=DH_xq.cC\#\ÁTP;vt2DsJg( v͏dFV@TDtǽ?N(PZ2|N@9PA ? 9 kU7iϵ5xƋǛNGl_zW̩ifΰAZ}&SHc[H+:98'i_+|(uSGG0Q>!RJ|BC;T.@J:d(mC%] P*\q.zYJjJi%244itV V"FjDC0x@PB RQx5Iu#H"슺]!RĄ HMLLJ]&7IQG*`D#H.`iY$anw~~eeGvQ9)me@Ҥ@L %<4B ((./buPUlsӦ-۷pqq+ezgCȑU/Jh TC#{&BRcdy!"2-Q ԙR}fB ͊DL), <g}k̙>hD$neD.+זKEHT+}`K]|Su'*wUgA @ T # H(PsRQ^v+xu԰[nAEG@^1UREIDf37U C,JPRٺ( eR/7TRLQJDYX8>77_ hh#&ժ"F7*3ϱ 6Mǭ?+"奤@PQш DHhn> \hJ6hȣZ H@d@ɣdQU`0)hR!Ö:|4%Jz;0S+lMK[)`Wh U$TP9pS_t%DL$M<G2;@+ȶKsa+9M ziNGHYV>b%#Kr)NI)9m@ (DIi;PF$xԐP#R /RF(iHw1МM x[+UB)V 7 Qf&ބA'TC mi@FChq8*ҡBPd F ۚ'AdEIJD"JuKl i(Ȅ#u¨eCG-2#%`KL\t+N:;#Okͧ.pFé'o6Tt6Vt5tt7QLg7vlYnw{ƃM l0/Pw5t3wo=w^{L#Gmŧ/.V>6slodw$l$ySIFxƹx:7]ܢ]#\"]\ptt DX)ge2@[}60z9rs64xdԓv3/P;:8FpdÀNaRςfFhNt ~+oZ06 IAs2#B"C#sS&䏟U2cٴ&/4mԒE3g,>}%.VhZ%K'-d%tq`}Zg>n6 ha:Cs/XYϽo6fV7mesKsJr)]3%+kJ65-3kjVVQfd Ig2>egd,OOOJ O 6@H=00+;/ '1J@Gq WS1&_Z`'mPn-^,J4+-϶㍴>RvY|\1L?ZNZ9N@/C?YgpA?{SpO؋vtÙu$+N޳$rCЀ?() uZy:Sѹ@ؑT_J/ INBH6M@= &CC&b;t  t<bBGˆ'BS%]0I"mm!f#IBiՑ@hEEM0/5)b#ͣ8I PĀݝnQ Z@< <JTDiQFm20 }G0*h:RbӨ2@@ZHԆ M(AIKx:PHEx8 I)ڏpT> fS_*^5b#uZU+Zڒ?JOb1qRQM/1@uԦ;Sb.r9.nwO<OPíUu{\ĄJA@XG!eO6O<"TTWwT&))zxqQ@(bDhe~4" @DL]g?B =؊<ZmVvS_zZHEJ텧l PGxBÒO]l*G[s5Zi8*#UG*6@*H1TDG-^ğ&*r(i؂H*nXFģPzA>tIUx!VGqxVdyZE#.@qAI^ sFjSWMLEUt3M64QaBTGP# ھ؁qoL Ju@(!K]t$M 8Bu^UĄV0rx ^U tj]Kl guA Wl[F#21WFd"&uף5D#UbHsRp$QPjFhe\bek.e$HRQEuJ8@ B(GQR$%rL_JJ|4P@i %DJErU y :#CNThhQ]yr]:tTo~~ͳ޺Eg.imw`N0_R|;O 6:m}lӊHILNMNOHȉˉ  N J>6HqM5_MvIrNrJܽ7/^^.1Gڦ2;EF856|gYZ bshTG;GO)rcH&k6)|s`?c*+%m.&lh.#LzS=9>)p&Az`{rБ9rxKt`H 4P:":;%})M_>|E.Zf,.tQq%Lzq%SO)ZOp(mC쳍?m'7a^oy;|RwԳԳ6k+9&Wjй%99Ӕ.ʙC8)@fƤi $s33 r2egfeKO-O M KML*s2?,96 +1%-bchǐQf{ϸeg7 F&gUkJ=9hJ嚕_V}cȰo ~ ot9hAI@+lMgζ֟pdo; |Ru4ǛH|t!JS:NJr* d n@i8#B64qv "uI#u`ؽ(ab#*RYRXJIG1($T[0A` cVi7@uL>Ab(=L~fhT@8I]NP DE}ĪPB=l8 StɥR!MHFxP&I taE)E#xUeOSB F.EG %HA$<ʪBJ«\h`[gEKM/$*`0nɢbG/R )ۃ hREMnZv_*A)bq&*ˆ @݄+$I8P蠧? 23u1$-ZO!n}ʩ9t9کOrJ. rԘ9t FIz9J/uf&|DNK(WG8̵h4GDԕ`#p&} zy L eDFfG奤O.- &6?$9,2#!)?<<7osqv k(,_p}h>Sar$>+ I, ?8hTk6ko=JL8xw}&5wW/v~OJi+*.ء] y|Cq-:8Hӫ9u^ IT{F&WX& M,$Ա/htsڇ:z)٨-#,=7%%VE|8AJyуѪ@*(`W-5z[؂RPuB9xpOGtęfBZOi=b@gz I+GGMV 0(^.Ũ#Ҥ ^(iQZEַ &^ӑ&@)bZ)15RR #qQѣ }Ebe17 `$] I]]w+C p#d{J=}khVguYS[F؋U{<hX" N&f`%,)=S(!ܲht\hh!0Q Z *A#Ζbl%M' <EJtgVyHRjժC&jb;.m%!^ )+NGq.:l}( ]@J@gF"@;b%}{^ȢU"PB=쌪RL, D-Ά uEo-=4C/@vP+ TSXEܳAj~%BC"&GC3duQ/RIU(dD#>MiA~/ R֐Qq1IW+֣6=8-@ԄVGTvf t׉@E)ŁK=RgCJz;Rjhr6 @@ݖ((R0m͘QDIbe )G"b0`ҷ Zm$RǼDJ0d:R+2:=,*5$*50bLѡBLb}y 6:G3(21ٷj$:!pdY_=9jj9GV'99rLc(%п #CF9P`堕> Ww9c<|b=}b||b~7(z :(< ̌N*X4xi&-2|ytѴť ,0`=m {rн?BXhRoY h!2vZq珛prJ /O' 4:hl;PZg;ddY_މ.ʚ9>3cRf> t>>3-$3ss sefʚh~u027(1<:;>1/00 W7 h7Ϩ1NNN.&<:hc<*dc4K,f! h{|4ܼYc\z2 iRMjwc < &%e-<}̶d-q1(i0l1pxF0Z4#vrNr֫Wuz-Y;'ٮ{իO}9)0;7NZz; }'?;-#B@7zfPϟ :;K>đC?ޞ`O϶˦=-LGK}qoqZ> O$F|-?2|*$x$yO&<^貾QAF.ꓬBV?LHy/bD*R.W|쵤Qe>F*XTiaY Z#)$ɫQSYPN\FAxO[DJX(.&y"Uh@Fʍک^C*Oekv>#,GvY8quD*Td5P+Z҃ZUhRɮ,N3+E%[\Az5Z+-*'Hh%Bk:4Kvim*ee\rEk `I<ВJ<řI}Q"y$a8̈́ b s$YT3$uӜ,R"! $K<@Dh)"WUe,"UWVYbdVݼ^,y~$dWDҰ $d<su m{rkD<ߒ$Wj{>G]TTz8fHFM+RQ6JXRyERy2xujhFq.QjKT.Bx#\b91"֠^qd!lN% V=щ$Rjz)WcViA(3L"&b6":U$y@FmxYny)J1+J sԩ*R ` 蔁F>EH;ꌢo$s.4.HY"Eɫ؃f]aoh ^UIJ!K?kZJEb-VI3bT0"rWahw]s#Oin> JKkkU- 'D] tT)0Cq:a_E+6ҁ5(KQa4, I) =HmRK#RhEhIi/)Zۣ6 TЩdTj%TQ ViBhR$KX ~€xHXkVN@?ْ& RST_(PeT\*(WEB%8\sD-#evD :FI*1%"'t A'a@֬$bG*$(2ZtEHђ0x%@!OY:I*Ak/MTTCLh/i De O)Eg4{F;K<%sFU:^咢 #@ 4*#U)D )yd&)#6v1Ot]cK[UYR*E/IJij-9wc8yʉ>>|j}FmxhݥG=j:uhȑ_: 6;C.uS{ݼ/h(*/-/o(*++*I(iIQaq919A9 >8`{>쩒4ao)Z>;F;T=VŸFPYJUJvլwOOhOuUNC{$8OFOHXw{h苡s r#GPJ@H Hn'Ѓr"b- Z>aaRZYaiks۫m_Wǖ74/mlZдuIkRu%[^jiYڬ~piC&!)T~rQ(X@uB"Cf\lE:[z޹hY.}t29U+gW(tIYbP*7rC M@ kt^uA~ua(0TRb**)*ʪKȏ)iaiI>1>Whwu0@?T?нjD8{!Y,$#ov3Eh:t6RugSDxd$$!IH]Xnސ/:>?#AN 3/*  ltΧ]O9;:{T_qdǩۇ ;w@}t7 =Y}_-h ??`7vw}ha?vM myn0'u>}p#?wl GS_\}<3zlth5#G7\|+Gnp⑍#6 n<5zpߗg^=ξMFkCCMumTTTU_S]Q^ZT_rxdff(kȝ~6 {4_~y:Zn@W${ ;98:%,D몎$\bP➠bb9h 0Xn>uY ;GJ-pR'LNz h'P4f[6?N%2'<&?"@!02("0)znSRPߴqiC+u Ϝ93_ٺEɼزYnX\۸q%;+zIHFTת"X8huB [b̑6yUė[H8kYŨC*gU,4)Yqeme3\j>IW?+(YEҺꌬ踼ܔ2FJpXP_`O@-h9Ѭz͚wv2A#CpSPpG #3Wm,F4л%B1/G:g% I!嘳d* 3i36mFa/8>7=$GoM`[C}S)7o78ypc;மCܼ7OGfavavavacr}du[qa'u:h/ m8<0zbSdՓWOt_9m#G4}ઋȣFnxdȱ-ozWN>sw_?TUQW^VSRl)**I(JN)HH*K( Ts`X932@Hz@H?UOT /l/O|BC_;id}椏3k>L@Zd g<Pܱ-rsԑRmC:ѬC'ܽEdxrYr=Pe]=< mpКV>7ZsA!9QayBCGFE%eTVji{e+rzuF]⦦%mKf|ig|uqSR!hƗL f Mߐ+h?{B Y啳*!hM@KK[g~-?ߔ$J5]TTdA~ujzidLvTlNRjiL|~`Ho@"O2 hA$i1mZDH!fG7)#H:hybqYT)=1NrǴD??촠g^4_ab; 36N5Ox:|t飻NyЎ?|;;肌SN }3~5[\, #lƙ$BX nB@ǩsuuRnȋN#F3f3PHp?]A@B_OCacâr#bR*M^ij}E_֬Ө_иu/zmqsҦ_jhYZr}˵ /_#k K\! ]]5]n\|}ܿa!gWhW*+o7VM@)L2Z>_O@ɳF>=IDATBWRR*wXfZhihkZYA" ldx`达{z޿;6矕;'|1UavavavaiO7-w@C;O:O@=ّupᾫ'mrd5V+֪ףFlt}KǶ:rlCݟd. [jLUe5 2Ss8'43$]}.IJ.Kȋ  ֤, 4rYN@yg=E}vavavavC@6ݛw}ЁE@R}\=wD=WGw\>uV_9r`5.nQ7eW{x~~rǗgھ7֛L&SesUyci9/gg%%&&&&DE-7od jhdSSӀ`8B 44/$%&$mµ &d+A]kE@ kpH7he[M1\1-5ihgu9 IfDdu)@b*B8 O *R(K(0Z>08h ͏/ %S[UՆWj6̵5.n%u[t˒楍K_R?E9چ f/PԳ }#L@n0`M+|g.}.P_랯#uJ"S~~59UQYqqEa~1rų@gbϑ<];оy?o}{5б{kWڕ?''?4eީ7|`m;;;; ~IKHݸk'\<;:}ES鬮~^7zd僫G9fкG6\8:etpNux}WOn7,{nK:'8'47<=$1(!(: <6/4*7("+H\ l@]a!|RK> WJ,4P< h*x]wY_a~A^D1B  xM@9[ j'렲_G \\=㝽.LV q)І36hh\m> SΏ/ȭ[TפgSꆥՍk7-jn[ҺyQcF\/^\R]چu kթgMfAC[ ߜ. Հz-+۟-oXs M@+TE@77 \RVr9j ' VVfWDdDg$}gzXЮ^h :* YCHFwYnҰ&#IYg$Cqo^k:#87lq \G@z?p|۷oWޝ]:vvѻm͊{I<8)?;mvavava:ɓNW=q@튀>}xCF^8՗|dCkGt壛F`PաCۿ8/ϛW[QW]^o(*)/,.N(JH*HL,- җ;g<3B3r?77Gȵ8}π,t^; ' 7&}b-adag'WalX m;K@JTDBd["b!UA,IUbUEW]\ܼ\OwpNrV'd5 n<mЀVWwpg91(2;4:?,0$27:(3n~mӒŕ+W7.k\дyQK󂆦M<jZе k,s~ m408hBeUsK5[^f g$~rg h᠅..-*2ԔVdWfgUDdD N[k.Ջ@&ciMK*X;s,DyXbeaAhU7heIRs (A[?}ښaEz`[:}<pt{ۿwώ;wwݶcGosS&=8G|~;;;;1Cd oU'y>yO,)8yt``Ƀxwdkd`c[G^>M9ȡuGO9N@g$;. v\.|r}uQCUMiaUyimeY]QainNaFFajZ^jFabrAL|^L\ADd^PXv@xXB@XBhN@Hv@HmC@>I޾qq1^xIRs_O:l L81xg8[K40hhG8k (@~5U6S2CЮ^IΞN &RxOOd*^R5D-o6^®@n<)B|,UmE@8pBC:ktXVpd6 Ηr+jW)yIUÒ%MK47/lm4aQEu zW[h[XSHlDUAhHKի杛-d>\Z6L@jVL@7aj@A~maוԔ֖WegWfeUfdVDEdDDDe$y&{D;GxƸyӈ1 qfq1@X`5 }f8m\F@*I>B+4$Ʉ4@PӜ#9h tpV4tÞ#N@m`[:zؾc{~x}ݾw]}{w߹sc{oU?~g'O2u (E@?#v;;;;a޹Oи J 3O~C;NQgG;.4qapǷ^|K\^> ^qn^n 3'/?+ Q?{xzyf_̚5}f0h!Np5UaK Wu`S#<50䁐ƹf.^3ɀwfz&8y.މ)n>*I]"=z5QkO w[Њ4ׄoAg)Z] 8̂ƊE/W-25.m|uI[ۢ sfnиaQCuAm LuMuHgk8蚅& ^OFe7jf+WQVibNY,`mQ?+8JfC%.*i*.n*.R(-i.*l˭ϫ#P\7֖Ֆ2332"c"3ã2C#2B}<}O=8Ng9NJ}JxYfWwo5(bgy ~Si``8P"̓c 4E@R%rS 9AooǏ:G{8b{w߹k{kOGwO?z&O2e'Ovavavav O8}Yumt:Ѽmtp˕cGt`ͥB@o=@] Hw~~P}}yxgͮ.+++*/.,,-*J(LK+LJΏωU7xsZ4T_d_do1W"}=<չ]!g/t/LO4R Y(fw&}6eG7uq[tMppP4tHpeWaiWp\G@vIuNr>B7$kDQǜyzVD; ^nNf:+UиB7ru% SAܘ䒜ʺE%Uu 6-mn]ҺyasӼusjͯ_ p%kW. f 诂AWY 3lE@tfm7"3W[_WXPo%Eeueu9i陕B@FdE*:0$ >_G@01hB.Գ<%RR(\ P)?N 4H: nHKsNv%I–Rk7 \c4*3#ʫA nAr@]RS\Y԰~~q}M4ϫ[[3T3Vxg WIzoQ[sյk̨2-Tsu톾[Њ6?[e 3  +DD"J  4!y7UU֗TfFFdF3ٰ! Zgg5hxЀdFH:N;$YВ*1%TUht}A[7">llx \G@;؁vW۷=;ԩm[nӱeG>gvavavav¼s8q'> gm>{x˅?wxåcltxȡthuG֏k?<8:yeǶ*=쾓6, 0*7";<#$%-?A}΋ U76dϡ?$Ow^LO. G╠~mC.q5_闢ifӽ3q1_ tO`pdG-.3#,7i'w;pWm8#3k8 m@Uguszz&P>p<]}[sߚ|CB@V*+>+YL@ #5]\(tQacyiSey}eE}Yi]NNuzzEZzyJzId:nB]8[:Zw3b w5 "3-I2X-2| 1)lFˈ3Z2w~!Ԋ6_m'W>r`ػ޷K=}]}][:nڶkۖO>gavavavav¼s8%ܿ>ok>;uK6.\wkGSؖW{rPdS;GOվt^[UiEqae~^yNvyFZIzzIJJa|b^L|nDtNxTvXdVhxvhXv|8+gX.̦S@ܤa}S`&%ncƀ4OtO4 }s\ 1KDЎnfF]vasrA Rxg C 3ptK3xMwVo5"]S}ID[?[g }Da{:gkܔFZAѹ)%mj6,k\\ߴq=fNmC8h>/P[٥YS޸Che͕ss22*2*ӊ#cCӃBSR|EwW@xƹzĺ(L@ 9h8n< 72(<+ <3(2+$:7$2',*7!s>:(mX"\3#dXYJ^2Ц9X%D  kV{ WMowܷs]@}5չc˶7oڸu-7{>A@[?6:;;w S;6{v0uҔGOR=o {r'g,?wl߲{?K?955=rxmWz _=cv_>kdx5ˊ* +sJ23 SRSSӋ#£rOff6BCr33~A7)9PYax/3=gl\/lM@+xdy*XN 'ʱMg ^A ӝ$`Kt1B6RE=p2Vb-|4"^tPK*#-f 򑢜' h}Ct:<*R, whcM@EW8WD+B_0Qh~i##AHd.OH,(j[XӼeqs뒖M tizfiί txACԙ9U7㠫jUވŕ5!h{sX"KJnXhb4l E@6^‚z ԳA@4ԔUg%%''Ge'$'H@[ώn҂҈ͫ[$+l2MMU} &]_ AjdYuH2t&l0 :^eʓ5DA64ihkذ l(6l~ \G@ػs;{w=ѱmk-[6mڼь}_Fԩzdʔ&OVg^uvsHDž#> O1+K.,~_T4Q\H_ V э2l=tSTǜ6L VDf|r=g}Vt@+9+3]q[N1bqwto pQ{ktHc# fD+X]l&]<f&#\*u L@O:D=\1#Y]Kԧ>]Tv}-N⮎BzyOwawtw4w?niן_&oIvMHtHtE3PW+8ugn࠭B4ܐȼ܈Ĕʼ֪ KZ6,nm[ҼnNM&UgyίSgh̭[[7OAWWi2cftŬh3KN@KX% %͠L@5ԃ†b}74OEO՗Ԗ K h}buq+8"gNBIduo6F*ayWO<*Y-O:6@0cJ&t5-*چ*+aCaS[:zvm׻ uuvvuuvlݼeۖ7lܼqSz;#ZFWVK[VY=Oy&7lJ1"&JQ7 1ЯQ-+oyDbHpZ⦐pxW)8Qx =0P|xO@I$<$F>pT8M`)yh00BU/O](ZMJQ"Ie~'!+iTߌAW2qAn}0"W&n?ؤO@&&$%G$x2Lݽb\#O=+25 :)WE" ,'Sܴm" R ̲B?"c l@ӝ#x"ë02$Lꋎ!租Jvx@g(3w=;ttwwk{[G׶lݼyM ^U)_6 ˲U6B7Hjvԋ'3`xչrD.n:-SmZ# V 1*#ΑMr)#7]W4֩_dI U;%FB; Hh]z a"cR_L;/+Jn,c41H%0'$;GyI" +DL)SxO#  pM!!)0'I#ë$* $m$,F[T4]A%cd*I JB!%0D#2ĐK1 u`]f5!5 $?؈}iJ)6؈};GZFYդD^hʤ1D(;~x+zꃓ cmhko xԎOg0)8*6'$<7 7> 8'Bh9,q84h-UVG5ЖxF HO-tIxS e6h }YhhHW!†uuuwvήm[ulٶefо}Mֵ[Y,U`^>^wZS,(Ǎ aϼ0e([&*"~ ,*WHy leQn- Dxk ea3eQ~Wⱓ'R;kc(Z{EK'd} AMK4D FbTJQ+$"WP/"HcZ:!bv|Oy.3$ U7YPKL5InhY$m= %0" ,UKx#`b)4,+!jڇ7Y(´OCX^E2IVʒH x84`xPd$,}0FD10)'>o'(=1 ^^6v~( `v$ |SHu3f_ߠ^R.̖L9("ey5JIEr Tbd[絆a"BZ QRP5;+L0͊E;87lONY&gל?^ n4yݣý.o={ޭMUE%Y%I)ѱP`uYhߠt Rԯz4ּRٔK$e1&6Yf0 V6ZZ,F.?H Y-WFYX|kGEKגW@ ސIDd72RT;~x 7O.Ί֑׏vyd'w/;oũ}+X}кkl8M##;G<:7:$ZࢎB_G@O|JLR*Pxu qr'5aꕠ k9砭BqApuGHT^HdAXtA|JEAqk]▶[65/ji^8~VcMkCuK}UsmeЦ*AVϬ3ͪc$zdˠ}4-1m>)+u Y@ؚ.wnXРPϵEuEנ.n,/-/.-ϭNN.͏KH)fX%yx&{ŸyD^1B@;G:Ep sp h Zʆv2x6ww@A ,4l"`;5*TjÆqxyY Zg_&F"mH6'@wgWWG7ֽmK۶l޾]Ӿn5׮>,Y5?V=zܸ c>pE'4$e~; ,kV^s?yUrB;TV"񃵘Ie_M<qq,I%pnN68W#/_[7V^)R/W!^A{QG /! |_RrIe5HE`dM<~1QR;x&dTC_:y򊯾u u8p^^u]Щp>HФ3Yׇ2:*_|Lh"I%2ܰ OX7L\tQ%_"`SIA2t!2qJYo8xڈr9b9.ŁFX+H5λq5RYd(RЯ~^IZy6tZ>@R/@qԎP)J'WŸ؉߾?xJ%reJcH d/ oy&^Ag`܅@-M ,zN\Mԅ%޶nAe\q4"-X ko =:xʒOz"Uy^J+YQʝw^6bCP;;+@@O{[0督o}NYqrל= ?͗;. utb`txȉ+gl\RWWUV~--0&.7*&;,234d72ԑguٚ} L3# Mgt/ OT YNUv;7_Hh.͓7̗>fyOCW&8h'b= E5FĊC`awt2b PO@! ஒO{mHgDřgkIѰYm>hV amͷpCZ"0tq5-4 mC. , )LH((imX~uiK֖E-sf6մ5Z몚.SEsueS: ݦ9Y+(ipЦ6XhjBoB@ ~orvy5rgqQ5皲ҪԲظĔXo uY`g4p@;;)-ǟ\bXB.361hIB M< r@h, H!5 HDFN@:zo`o;;uul޺s˦͛:֯ VڰfM֬> h}_g,FJJʄO,OY ={Μ9s#"`%J*KRȎ,vqfΜEM ׭+%kn 򎌌?#n%gN&ư]h8)mO<-1"U?$Nd0O?恵)'PG4WNSwO|E<&N{<11%IZ ɣdx|W~>bKsW)--cڴUHӗBH"哜?+bdׄd$ *x`< ]Ue7o~qq "Ä$JA yHs544cIuuL$fT_Jv~#`0Sz||"SMO={&02@9gp1_U /[&.&c ½pE3gF.*ńFԌ)  %M`DbK/\+QN@2j)I׿-h!K0;))ۤ!C$q@5 [ga#`JhA !S.- HGGb[ kE|ϟJ߳̀Bř P^%F;*`3 j#-ZfBV?"2Uze#KZ"F9N_PI.&E3oK l?;C<כ c[.#C=.7_>|0:%5?5 =8.>/*&'<*3$<=$<#8\ݺn@8e4T4 7Sm1%l `B!=_ow3ˮN=gut7 曚3,E PV4Ir{WkVdCQ^nhM+8z$3-@9ڤ8)Y-?*h`Y"NAKE?C_EAXt#hV8h!ACpQh!9耰肐ʂK64/nV4i\7F]]bh)ohjn5ͮ1Z|FZ.߰aoJ@[ϳ@ye B@cC@p (ֆ}.)n(+++(.,.˫HM+/ʊˋ MU?T[g4 !m$쳣[$pr", 'wDh)N"CٚqZf!G)"Lp,0"_c~!Gְa]0p;߱Mݼmk-]7ulڸ _ (zux;>dz+QXZZnj|XM6ǎ?q@AA,Cgðj՚[;~b!wmm?022o;tII~-[_NAYK`EGa %f&%P5vӦ_r57?oѣs#[wqqa-1tq&8q[dwDk ng/ bd$ d͞=^M*b8'cmɅZЬXM |Yk̘oEy#y?L7HLL(ćK.7 mxmj]RX*\yU kqL~zN:C7oOڻ;3 ? I4S"DY1VP7Z#/:tW_pEF~?k֜{~oN__oFv`,4_GKO`hLJ'v.?w٩}Nh?{`g֟=́՟Z{K}6:ܭ~{pPšK#'8w{$E@%'fGDgEfff#ϊ2[)T??U*I ,>:>g gɏzk7>AYAY^ .$ ?\9> A3ᢢҒҒze֔TH.,*)KN)O( MM(NKp􉓀KGg}pqpt.Asrp%)B=@g@gYtwV7l,%Ibf2㕧\,g~}xk6l ޞ~}sزsSoYnXjêUWZjUk3?8%Zu4B]ŏ?5`Y+ם6m֟6o6g_Q,RYn`GA<_v{dH%RVaYK;";y$Rr.`ĐK릦$!" I)Z| GGGٟ %R FAz_YxwvveW0}S4I&f$%w% E #B[1fZnC-fwww466j}w3ać2o0R/7RȈU@\-BH1H<HO<ڵk-Z⮻ݻ\&,  cXSڂH<$K0 TW<3K*Bd!RW0ڔ%~=܋۶uG?;~$I  A Fk 3ƈR#Ru7B@問?$)B)BZxH{DaJ$N!Dv_?>o ;;;N(=ŁP_bЏNE# EcTY\ZJI8GJ$d6Wr[({;I >#ƍtjGH$ a5&DEI.*.%I"4 H2jkuUtZI""%б^)k``~ooLb1͔.0Zkģ! IZ̙1IZĈr:rO>} 0O"I}≧[ ȅb 'K?S_D$P\0̮svwD>II)t4cEṢ,l,1CxFD4''o̓ASLT'[l1{xMJa~g}~ܸSTCO?_ìlAx% qW> ^># EEg~J*q̘ݧ"PkT8eI*: < dޝ<܏4WXfͺ1>U K,ɤRMA" Bb +=T*rO>YCꐊVZC$Qerj-FJ#03d$RIDJ/I@PE)DZ XOҬWyy O.Z,H#0)'IK<44L{yb yʫ$PE,TRP$> Ht\ ,}ע %hvK%%"h\rDx,xL1Ly7\l9jH ϫ@@5ʫVh \a&o Kt<7'KK[ʈ)6 x4665ªjSMQqyVVibRql|adlprxT_`o#;35=. 4]]#ݣvwk0֌A a+I.#;Yabv~aAI ,4xb#B@37$ |7m_a]0p=ݳ{`ۖ;n޹iö붮۰iͺkn\zkW\beܳϳ'J h좿/cd![2ǤW[dcCC'/^2kooߖٳTUHRX8׿ `+ĪժՍ Y aȠm Ms/((b3)*MZJD7{D̞7oNN.Pֵ&=X\\:22"K<d0m*+H`}D\dy [ZZRe=!fde̙3S1OZ$IOOo^^>bM'xW^=qѣmjj a5?gΜԹs=S'* 5kYpO?ROd0$ lASi//t77$v:!!FǕo'Km~lch̹sєO>4Y "#gΜMZ.*!pZJJ-H*/kpuu`řL511>)mG*КY3 Bp;wΜH5)Z(Q %@tt,^b ^xRtŽ7 **EJaË/N sΛ7_+zt* b-t6qq '&&7ӧ;3 g8;88aτ xM{NbMM~66̰;Ҽ:^UAAt6l 4'1F9]Syq$=3V~UjA1vS Ó1 6u{vi 3R5#za CVF6 e K$厎h*HoXzM-Ln/v ]]]sqo#_k0̆OцNʒFKBGv4rb||qȸqYf~T(wOp㎻ 8ٕO3m6DJR/21R/)L W6mjPg'MZZZFߐ*1o(OבDFtaa11*E<?"1T K і-[GG|r´"I Iqo]?0^7CĿ7oeR(wS&?2y҃ӦMkIpTHp q,q~UVVү5{>i_  ͩMg3F8;JS1]0ˌtId!iS_uֽ[q 8ʟ$2J^Zye%$HZ$xoӟI@Wϙ&'"8(1k|(OI[* zdīē1Ng0lxo 4%IFz LefU=x/Xqrrb8eGunNK>|ZE3RXQ/z1 T\S2arUH4Gvva zZDG;q0), 6 ]ww/e$R/,)eQwU0Y d)D$(^|lCqìC8B5lF 0W) $a6\&e~v8ՙXf3W޿5_<֡09:C}=;zjSRrbA^t\~Dt#2CggV PO#^X-ko  Vq;0CG?U^\,\[/O"kWEZŠִtiNӜthY0B)i䅌l)B~%ڜR׿y*wE;4f(V.F]aC~Qn>ByS5E_ݵsVG. <ɨoW{9J1ihaA^.AgDFLL*(YYTnQS٭s簖okm35VWWWTήU[\kUsvi^i~iC1і8(4zNFej}j^yŜ KU`Yl!+8hPVVZRRfFqiz.*6 >Dϥ%-5V5W65k7ʚJJ늊LŅUU5ڲʜĤ∘t߀DD߀$/xWh'W7uk iN!3\§;st-h9>E9D8:;EXaYN7ѧ)y5Rх&X/4aᔥ8EvJ y!%0_E. W67 luuto@wWycmXyMk^#W^}gy~$q|Np%%eǎg̞Vn f'Cn݆{$2>?Fkҗl͢%uVVz&؃9r(\l9;1Y8pHu$6iO>4頠6mBҎ֮]O*t7۷|ͷNs泏>=fP\NNmqMt9/ ZAáCi+W>߿@WW1c:;;ڵsժU/_~YPy]C?z ii;)f{]ǩSgOz7yz'A   V3W\u?\gޭ[;b4Onڱ|JH.[ʢ|vMxU(a !i 6eD#/ϟ E}ڵx=0O3S/ܛr܅m:Q;vgϞ0aFLWKs*yRe8`{>T%Z bԂwu-B]xR}r>?v{7??n[o<̨dVr)Xuc\~}WqI[N[Ẏ~Kߠ --mLguLL"*;?>CGGnd29rdڵ[l9s̹s粲2ǎU!N&XH#yR;Oa\AG,//ڋAzU;߮v!881L&OЋqڥ,NF?M6)6|K~˖)_~U&g|dΝsc6B!gmBG̠hM<X+xHɩK.8cL5GF.ߨ>t`1^}uRQ[[ {g*$?, =?S1f1^iw+;I !MOnܸ}ᇴ&ÙϺB7Fœ0U_Tݽ}g4peeDF|> ߊ%n)cOm(g|H6mTe]&s2biA.2Q;p `~XB:ɺ KA8iIoU@V 8 eW,\D($`$7_!2?|1 %ym@$=mt|*ti> >1EFL`PвqxP/$d?/ק=_:d*I ,S $a6\zg' Ov:oթ=wEF9wx.9}xץ=WNn=?2{ӻx32S bss"P|S4eYwOKK%I.aD7(/(Fxdx;3Z.KuM@mw@Y6ag :Xx[aᩮf Z6\<'<9j"JP?xmьc nj!h3(W\$2]eu[ߐ+8\*X> h c+VAo-AgGDE(%dTͪ^PeZP_`fymf6׵65֙jϳTR[3V.wq/VB[_QU5j]% VXw^3;Id֔+ s3֑%OTO6墣c-NԑD]n %413f8n/kI>Nv}%ラm-;&`k:g<+663> /k֢"N>ߩB*t1]y8z 2&S'lڄw1RA_%ÔBNEk _=S,͛f83aIo͛%K^b\dsZ[[N}h}<ЯjFҦ%*beVP|H<%}}}hO/ $iҤIoƚ5k'|H6ͩ{ y,Ϝ9˷fڴq_Հ BFg y+17oY@[dtiM.z#!s ޾?/h :<˜![1O? ȑck8gVf:^11q]QHATx~yF:)b~8Rcb| 3x$^iqOTQE51tWIǽXH >\~Sy䑰KF4 ,c)3I4%d6;ŒN{FVeO:/: Ç޻rJ^RS8A>Xv-N7v4`B @.f4466'F"(UV==!<8q܄9)>ڵbxVܷ5'8g_<;/ vzbWѵ\g9, KI!R[5耐p&' ,_#3s<3}?%YuT?85F]9e!l iVP̲K1}}r^XhbDA@K@B=@>[КQ(5ZڶR#])E"[Hgs(wTw^F\ĴB3am7$wou?E6Fڸ/raAQ 0"KqiU E-UUn7iֶƦچ,ivUʊFcfivinm&zNu깕Uss0@ʪyNElr\a}Æ (5Meeq.-(kl,o.+/-5UVT6UUTV$'GEdFd&{O8WE@uktiN!> m}Cn` ,,.Zfi}"/F]Ee#<)>\A@[GxrЖ7ʼC m8h`ˀ l ]}W;6ok߰mm]n5Vްbźe-_p=m^{`2B6*,,y㏗Elc>#l'd˓T_.AY>Ǐo\!őayJm؎zz(}̘ɂ=J&F EX]g5Oֻ,Xwf)I)|GG;72#zY4_%bTPFè ~ԂT"YjI& RX͟:uS[,~dAN5[P@BBۿ{Wq]1;f ǃwbqƩzb a"}g3f=kMMw@E֬YVW=o%U(h [czg?{ي{ >Z437N?i_wXllp,( ťٙ[}Bl9يxU:-eym 쓱ZPM?yO+dП|a~j=3F݇8G*;Ʃ&۹ѱB^^cylj!y# E:t҉D|H'|=cxݟ:au ax#x˯g.lYYIOdghz/ƓHKKrJKKrep)ȕgp-sbcFaa1q;^om㎻h&>yH2ʰf~Aodx" -={ԁc17ks&(xfZ/$})**WG?!>Ix)NdH`܎?>pqqNN.xySe̦^))itr;i 08/$F?HWRl,1@y |=6668p 44;;wlɒwo&p2HRR Ó/ ]b*NOϢoϝ;WWdcdg)BR2Ȃ$髜0 1^|IE9$'_y5EF3ƍPGe%]>>hꃏ<У'M^t6T1.\Ϭ+:K/ܪu._rÆ|LXKނ">1N<3,j<{w o͛Px?iO?עE~_7M} &;880sr'8jry%`1b|(?tSOj$Ĉ]kk={hkf!*&ϝ;쌣$ yZۄ7/1M1RH:slnn <ɐ9q$;v QEy, Oa3#$1EN(zTrgDD172HLH";Er-GqпBЈسm[e+&f~7Iٍ%`+X%դj|jwV Bo?SAz3#FYFPXE@\aCe}ѱca<0g#9o>,H~/80^ O+kN vI F(##e1њṣ?V"ikm(aJ}G% /1BqRG gPr"(^dG?%2cj ;-I,mG1R=5lF! ^^oc?{p/ntsx`}{'w{7^^gM=Kn|_OϵJ|GGO@o@A@ T/i*t =}2/L7ovN& hokC@CЎ@ċΚ:m .M:[类 IJ }JZZu[K;+n]"vQ ou-p6_aM@+ձV>m:ik*Z9puZsй E ) Uճn=y(MfSU[uJӬʦƚ5ճjL5昪ggWUͮSUfYgk EYZbfyY[EyKe1M膪ʶʲRSMEUkcꊊԒȬT7hW(X7'aB@,BC#l&ݢ\,' qJ*$2>ɣ;QZ`̘ǫ?$`*yxڈȘ~!e7xQ"Kxx$MI+?4--cS1>## 3̌{g*GzM1(G9jġ>߱LBYȋ6F]%$$jʟԥK_޸q3C43vQQ1ݽǏS(b Gܹcn5}G8soIIݻnjQ3ԋU8&xcܹvПQJBi\f2guu $$!LNCWF.4Y}}#3-P{ ̦<댿v ewߍsC~_?I]_@ho$1 i&JHZqTo`0 11bQ O>Pkk+cgPDCCژI$,5E0oCp M)v)+ڈ!L`Μy+lZ_l V83W~Ne0^f0p#(ˇ=/Љ~K/cSf?:|˗QM"$ŷRMrnቅ) %w<"%wt&Lbkذa[oOϒD(ܻW?AG5@(N/ Q0LbR_J/,3^¬N)ҩkA$Clٲ7ߖ?BTV@<  -R/>(2/,yỵkRV>YMQ>XZ]qϿx܅s1'mXȚXE'a6|?",PO?]N_",nt|p5SO&fd0 >{3,X:5%Jv@G7Jє/r,rhVd~ zUVoo޼_* (?O~n'L-K;y`kNYrן9un?dAuޑދCN^:yx{~vg⊘lȘ܈<4T}9>d,;Ϳ:hPBinD70۟IIOMqWtɛBdށvIo*pQA ,ܫhMpVc䋚}&O򔰳{ ;F*B1oJC 8{&i*B[z@ ٭ h% 4lC.W ' mP%JrxGk\5( pBC!h.!#r5c Rs ۚkfn5T5dij)o.*.2J˛+LZгfUUͪTtBUܪyUU+5m;ڠoJ@aaP^&sUꪙUm<˛JJJ*[*KJKjjn[8"?8#,.0 ,%8<=($;#++-4ACNѮ3B+P' LPA1.I; }6hk 0i_&54#[sB( ,ǟ)m56#;:zmmoߦ/m]v˚5WڸrE?dͧ_lҥk?ŒCS---gރ աCe"KFwXOfÚHY˲%8+WˢmYYGRHbG rT6rlYE(WV=`JWN"/i@Ze)iӖM``A@?}mm= eY7oXIczGIeelή,YRc2Df ֲG-Kp9BF *'>>Qhԗ {vA(ѹom;gT7s}A|ć F5:$^d16/i``0zx㦘2YѾm[Ow^FoFgg'}.oo(a{_M4y)NS^M ^ mT$,Z~H"&2 ooi\e&}5k̘(~1fx?Q((W\P'-䕉NFH:K"GI"$4xgr^|%Íytr|+/u%;o (DRχrҗiq jJhK@S|vzb9D!~F"#cJLIIfDf-t I̬B.}_'ъNf9=6U@Q$'JQ&(H'-,lX 1Lp&a43oT*E䢙E7C!{(͛YfclH&#V -Rؘm~n'?4/={ݩ+[}3x֋]#/ ?=rjg^:>pGwtiBR^lbAlBntlNxdVhDVPhw@A3/}"q~Qˊv#]8h+gOar7QPHU7Tx%MC+8$Տ" t(}|Y CM@/&4}(E0+7JWGXB@k|$3k\;n@xSqwN}cE@63?mEqZsЂ[p9l 9°袈„ڲ֖ƖꖺumuU͵ (6U7TU4UUŦZMʊY<*gWWΩm#Lx-)eD >WTDq3+SQRYZVX\\WR\WQ\YXZT]RXYUjYK5TWdf'$yFGzxŹy88MW?Os y!HW!M`ryc"}B%ÐEX ++A@T}4$*1ӝ#$Rh6≌B@?7=r2Zh-g 6\Maúa:zkGm=۷߰um`-lZzʕ+VlXlП~~ҷyFrcOYz kA^م?>BP,X`C!o) J4eȺe+o,Dyy,IEr``[ c(fG@'kqDmBJ?ytYYabXKEE\p.;?u|jj~78pGHUr LR??KPpoo?;+b7XmS5="Î *DٓR._B]Xjϰ!KmmyEx,d*{]W|,ҍo{KYl&MR\1صkW]]ݤIz?۷ֱ(,= a .=A R .a9_|v#(dg>>B$ =ׯ_ǎ.}>p9l`P:G`񓐡AQ1 I l] vPU[[)zxH:ӟ}nC.gf$TD<<]gٲeĉ8Y~而J%<щ!_~G ` gtt,ŗ_~uՋ(qxvޥH f֑(g[RRhJ{u`R0O`]E+3])(:&&oя<2hBr9sq_y嵣 gfKTmTK pbGf8}̜9s&ܣ΀3 vܹ#::F%l_0`\|EAkw@O~_H?aK3}T拉 ='ÇJi;{⥌8ZZS ٘! WO8ETc0cҬFހ80m=>c_"j)t9qEp5́mH$ޠ]2M7Ęɓ>裃˗/?^M%@F=? Ġrg͚uk.o"3BCP5o 2n9s6IM3ޭ(x^ jL`EĈ؀)1b-7g8' F;rw1ã[XQ4`*ς"INNeF4u L4uMSNdf<0vO<}ȡO?U &UfԴo"K:w\LL}c23?or{v*N6^#2$^O޹s'SQ_xaM:!zx D!X$OǍ6 $6m j*7!ug?YDQ%J?_ ưR8O$KFb?_?o? ZV:6P)'E,!ba `a6܌kN:~)ig8kkNg;7./)*ɉI(R=}V|bH$ u׳Cݶ~oPaM?w  @V-B@{{zxꋤK Sj^}GOBHNԗT(Պ!A~P̊uA)jC@^Ek5]s3\c(QY"F SbM@;ZN=bT>+ "8X%8ǣa}6h8qw ]/a ,G ,< q?$# 4yEDŔEƗfJjMM mM-ƪ֦暊SMQymqE-JuE+PsBVV(.X3++f*+.U^1̚P]n&ge`6ºkl:@QU5S@mYV*Kԯ4W5U5UU*jmᬆ򒂲̌謀䠐@} kgWS؋ӝC_pzngxDzF}VWpXhG(WxG=$a!0М?,G@0agI@e^E UFp<_ : m& X3Fٚz3a]0p=g_mݺ`͚ͫWo^ O>_zgPXM|z_#%) S8e-XM铃9ȺyjXnf0IDE?~~'|΄#EB ֣"/` ( deQdʮ 3''gN[YޱClBCKǵ[[gB36رo6Ge6ʢdww8vlb.}OXy Hp҆ lEXahzwM{Y_eɦ%#fϞr^հ;w>hc}Ml6p٘D(--padݺoVUCoo3gΚ0aر{zz+S۰]beei)]svl?O6aDzץ-[ΦIB\|mlmwA+ZWW;22|W_{#,4 Mt^Cٵy&f)Fjx#iӧˣ {'z[o6ryOrKTC@=3 9B;^ WXdv$oxN?^be[,l4h޼1`*I'i7## -} PPHYMM-S/6H4iܩS/NI Bz/PxFud[̛{<%z#NjH( (W0$Hy/2IQD{{II-{goߏ?R꾣{_H+2ٹsO>Ì&cfp[~M ?#{b  Ci˖vcqNw{?߸|O[o\Ymkďg\H= ?qCi_۶m~w^||J>`=GAlQֺ0]wwŖK}J*0#.ČYnaW#@>CqX>Eq?6 N clF'.Q,-¦!0(<nDc J\Ʒz'8066yL8qv;v\CCøqW'k%$-N nXl5N ׅ/|Vbzy䬳).y]?W(ŀa:WI!!6 OB|aЅ|g/9n+8_X2%̥],!??СC|Νϟ}G Ch7 ̎/>܀W\qE[Q[[}CdV]<׼/E2]`j`E]ޜN7nR|c7}9ܕx؀ | ?mӁK @83F MA>9-eZ%muW 8OD @]zL >pEO|Q⎾F!JpCAN%v.ta ń.~"B'8(5;|2s|)ݍ`W8jpp<E =Fahv ;3s >C}=OJ8){|_? LO|ƳzqCxC >VY[^t C 7|b߰!إ؂cpP\6D|ćGh𬅵 n, 083;'ۋV\\ ooCu?gNEvlĩ"l{WVVep+v8lNs6&<6`q?8x07օO!Da|) {oqc]##cDڰ׭g4aeVXodWvc͝'}=o<'/}|7^v8΋w|CCCkU]WmCOum{Eu[Ye[iE],WQwQ}UE[]-(\Jҹ]&ZQCTyvyZ~{aH_6IbHeLZΒTju ,Zk*ɷku,l3ky@libo:|"MXYCɃ`ӯ:$S,`1BF[2Y$Mr>t8rLC˱!FD}sPK@+2-`Ԁ  s0$63te-PRVTVG+"MxblthuSc}ѡ`(60L'5NMHN%@*A2z[A@6%7Ɠəxr},.rbwFhdj&)^(1JLȿ^'2'>ׇ&DlD:džo0}'Gbxk v=ޠh4jlJVZ5\a;MFs̀:po?J N}3cJLg6gҜ +-dԣ%.j³gc3W B*"sk ^WzM,%OĮ]}ΝqGH?x">ṕG@z2=O4C9~K @=0Z#1t5襀V3p!rgưx*ᮻy#CxX! a]Uha` n߾55|hp"hClZD"]O,A~#a ~`^ #T۫o6󅟻?<~g志X6~1>߉TPb8Z,XNVuyEYoxg [0򩧞޺u[ {,B$b8֋00)"/--4tq\| 4*0 1c!6\st-ب)kcNGa>0&xJp?j.of[\ab.h*"y >)a_“L](6~ÕS^9qw>1 qd8nW_ ?'m@=k'L&q0@Iхk]X']{>sϽ088|w¼8 b9Ƙg{;!|>Aj0:|b?6Grǧp&A\͕,pvl?9qG"1F.)>DؘtKԡCun-E@/^dU9o9ή?c_돞S;w<ݧ/~K}Gk_~=;z}5PM]d[J[Z RYYX v\znuy!(L9 I= Ly. 6)jwDsaͷۑzLYQ^,pm'QvC*`/`9&Y79C@@V6ښ yCAc`l|J (ر<(Ajlk6|&kZ/R5&QC@&GMņt[c()2>Y, E2@)mɘQ)aC`e3& !58T2v= p^oLg= h3"הP-Gv1SbmeաʺުPH%bc#&GMM Ɔxa|d >:ŇD_T_d*5)D2>'T2! HmHmL#uB<1OS$C tmzzR"Z}>Qyc?9ٟK'cC@@D|xopn81:1<>.Tي%Ҁ^E&8r^ A^'Q* ZhOg@[* 2 "+8'];Ŀ? =)nVQI%He/5BxF`F`$ԫҏAtU9FJt5e䔰ftE.K =1/~у#ܟ,O .|tP ::v{O \/|x `Ea: ac.88#j[` ?w__??KO3~qӰ:?E0)Ĥ2\(?q]Z{a Yn8!(otӟ7.pqa!z@c,(#NXS =,4X*%L0\b0q~a+^,f8G3 g%BS!؍RmBoëah1b``ODeS!GAIZ"rF(UHc>f`C,n ѥ"9眏 g VAc:tYCI!Z9]CLta.CFхBB ycqXy=rɘJt}QÏ#P{J` p#DCo& -"ECe^o>sX =Is 7cafq8K 15 \&t.!* ( ufpHWh`%G%@!†Opa ? ;KCZңE?'1 < a`vI.6X~WEC0gYE. ][OEŁjZd~,#~v%xxe@{Ѕ Dp qD=z Nxr.zq=p0 {zLKv#@h` <աCu>h咅V;};O;~/{ݑ9<o?}ݧ/o~bdS~~vux^>"QN%__(}vxFiw3sSVT*4EpέNb1V6 \ʐb~{QV8XTEdʰ"|(%1 L-fduVt*4K@mf 6̲h&) Z`$/G 's hCF1̀O@c +op @K0!Zd݌mQe*ҙ2yÿЂrиB 3$l/Vuz=ኺƞf$ԑGGƇ&'&FGɾdj(7 H.N%'DlDPqcIIQ1c&w*:b3tB&AgMy-ҟ쑆1-!R)T*>%b}@rdh C7NN"M M].åވ}+KzX35 PCwPp!0 cNJZ.-}<0@ JVA*haIvr7Р6YQDc 4Ǣpve. \)[Vo?~_®1ZNQϝtlU<*zܢW;[n(3 2PyqC (hqhF';+ -zi.-y@Vn!pԠUY@/y '庨[`@:A%R]}OTq!:O7,b񢋖Clǿ>̷Ǟ ywG_~?{쬭n묪iVK%e~O_$7( b%\p|3vyۀBQX#]y2 hxi Ppa¦W]~;`/ eޮߎ2/!S2K5H֨I"4z$) L1_6H9PPcT԰d07e-fY#=$^Hhv6Y2f(hbQ:ķafSOzG|$t§@6aKܟ hKZkD "kM^C@ dMZ]P4@4V[&\]mo]Dll(59:09?67<I$Gh,: X_o*HŇ3:~G .!*lOg7C@$}P$O A%RS2Z"z2'ST|$N%! $G&gFSo_7>55vPU\6` Kzl2T^k^+*Aa[I,`2TDq%C̼B`/p(O s @C=f@O34? Z ʀ2F Zxa_#=1~C^`}O}޽У>.^<ȁ޿m۞m߾6+zU˗]rN?<ީZO~(O|D26|T=C ,fr 5/,`EW_}tCC4.أ1d5NhU  WGod`X). }c|n[ N=`$hա=@?`T=7PriY-zy^pȱt%5mR-9StϜy=G108PW\"85s4 q?T]b,ͲxPr!B.JC%z.nTnnwoڳg_EEtd-@ ,>98˃0fOď.FCV haAVt)8ah pI?* Z @\xD"u嵇ؕ Z] .ZgŀxaRӽm;vC!:a='9la/+ ^x>N cqа %g@ӒcqEˉ3pȱCR#aQg?N@%Q  ТР0/<{<ݱ=|ɫ~wʪ Ye/P& =A'e9wP&WeJ?Kċ y*isxZidZgw&gE@`kITQl3[vI4ʷZ$)@c*h$'_6pbm~EʐlXs^k1V .pdt]:OTH2#4 /!&K; [5XШg!h\sREF[5-M7m (B,MKz3'ŒȆ&Zqt 3Y Z y]"%%̬jSDr?9'OO$RTr$M _?9z S7NG~{S]YR4b[TCrEѻ&_$>c%-PKYM8$H4Vu.yхIL1M༓ 敀V!cddsZQj29 %5_Md?:X3s'|K>g??s(cum۶[ vx R=c"=P=}1Q=21|D48%`_gglC-4|!ZxE F] ˀ@e g(0H:<-{1-eg-:|`'RD*fJC),9 8=@B`.@0#jE/bc/C3?h! .!a<@TJ7ha!C``P7-GgP5킆?bS-9/\))^L(c24\  @ r>%B40Bjռh[p"PF/e[ Cծ I/aQ3Z'8nպ0,8f\EzO0Z@cn[e3uB!@˩h t +Y,` (cC*<ᄧ(tA J'Z6P†ƧrHq % dk *{̥. tP'ïb,<F.SCKC+W((!ЀZ/9h0 !(h6\!c!(pVHpch qe$ "x`7IpcL3PCQ0SC.Axp!Zȸ8z2Z2 1٥zLnT`liy:ߒgwT?r^7;֑^[Z|]u55@w\>wQWz+Ez(4 ,hy]-RQ1\,g@"WHUЊKL0~~0ϤeEMLC&CA.r 9jfQyG(jhP)]%NC[QV$A *Y }54҅>r]h6WG&-j bH=+0y]cQ14 h QZNVuG>_% %z:C}D{;<;;'zbHg4ڝLDH<:Ģd,.X`zF$5'xt.GR9 )YWZ E6H@'ݗK%D d|EG u3#7LL 'cpm}[4[6w [g5sMekg|+"YH4͍ Sqb{7*ZY Z2')Ln@ZF R!fg]0@|K55e*q1~$-r3OΝvxؾ֭mz}׬3ȇZ=x| 0s$A .O%x8P40tNsZ}-8d;j`ֺjL'8@ mG]AJ%h=zd](i`Fr^Ȍg>s 0eF 2ѧGeXtɖQzf/;=s8 ZcEYX8=~=0 1 h9N0`pH%af)J zLKʜ+ebz9)ChZzt- *8Ю 2&R@0b6hիc9;bЫ2A?AcpE hqz*7eK0``132 fz(7z-pً!8(\/ria@ݍ8D%]E%*CFuJ3gO!Zq(cKK'{9)'4N e p!jd0*qi \χnJAϱ-PJtO5'JΈ CE= Ny@K~-p 9;s"2{9Du J9B cgh9zj.4tBc]Fh9Qq@5ȇ (%@8 g4p)zK/OuNȉ7v|kw}_~pO~WGݱwo<MRpYy"P =>W)27; E~>ϚrЂR3 hUCpӅ-Sf@d^Dfq48>m鳺|Z\*3yI€,4LI"g-!Ki&Y^2g5V yCkr:ZP06Պ,0A>X҆l2!hhRA3VK@361C>XZ,9͵Ki &;f'lЂF3$chAkpwHփ&hoUP"ކX/GZPk"n鉵Fz{"p' vFzޡDd$Kħi>'8O&IڜyФ$=ї`Bx">J&ñxOroo] O %Ch]}[/j J9FuywVZCRmT7XQ!qo|$C퉖D0ZI7%YL&%/*!e){j9h±y݃nV3-krU=ҞO@!ڽ!<z$ %4z {& ^8@:.ZzP>!k*BAu)'jFh9\CCKꡁ-i=AKg(j B2C r =Ţ )8C:Lt YkɱY% z DQʿVfKwfhOAvAb8ns]t A_gmu_Z+.z%AW_aHv]hD 2YHlug]Ry "U"^?h/ ڊ4%&?ҭ6WUlP[aК)aqwv -f e:5X) 6JJWP,!*rT 8htY>o PPk5rֺ|[%m$,癫I@e5gɛdQ2f7_lamuU,F#V05L-\\4Y\V:I7 fՈg 3@i h `/lt59LaH'#}d|87?twntCC}CɺҪVlՉ.p Yt"5eSTo*%,yU[+p7n{ai# Kp. @=>@=d3arfM䙫e h^? %N-!t+ >cZkrJksKWWX3C@?g$w<ǁm<$ 譒%8He@|‡??6ʌ54SJJu:(ZήBzX qtCX'[X d j!lGh\A>LFkYB ?W9N Z:Ez`C05W^8PA=ZX1J,85-2Hx2[", %RJ@yB]CK T威4!^x]"* Cj=!!,Rݡ22} Zh1D-z vC/.Ydr=R) G \̹gvC؅ٲ D/5 3r pHWh"hx0*B[aԋ7 d&s չʵ5k :e(_Pgɷž( ]P/5>f= yVDfI-L߶5 { 3[DYEQd(l*nLEb൱FL. 7BAI`¾YM%/hI` UmլM:W(4^\QR,VwUu54zhKK=FC]hpg0DH;'DD|$OT Db&'=K'g27$S% xl2,6s^ЂkNM0aɉPx*5K" ?56múiӭ37LXUK+Z˂vwV4Xdq5%|xa^I K?q2R+An ?_ۤ,ي{QAP̤auHB9>s~&Si* $ˬ BˤTZkKksKdsYX3sC^|T=O䣏>};c[ؒ΀>:'r:tСC:tZN3Y׹ V\dŋV[`חo8Ρ?~gЉO|}䥯?|廣ox𳏍6ԵTV++e%%-nO)B,wHZ>t!YV]dYJڝ)!g A8aWIxi9/B^ ]~ACυ&,ls gnE֠88l3ӊYlqj%q\o\curQd\5T,uHƌez.GVtK Lϲ3g1U6ӥ8̳ԊRFY[ZhʳJDNDDRyEh6:DTPo8;vA"ZdfHw&l%7M2 tm("ʈxQS֮hh ]]Q[mE1_0Nƻ{mpho7p4{GN$FI@08?5L&{.KlH$7$O$RwN'ӂe#p":$b')YZzLHNRd_T}R}らNOM'SXo|w?L 7Mqۮ89<17<ПZ[UҲw\`KmU2Zd59\Sy&Ezs])ҟ3mspHMAkD!jqE9"!H=&ĉh׌3!M|fg* !=1>xؽ;]ڶnݺoܲC:tСC ӡ@u.p:v|WGS_?9O?<ۂʚ@y-,η :X 39ΒVC@3 NW˂V`,f5/gV㓥}9טQT%00'q HrP<҇?D@k NSoe6NA@U]un6>o5 #m֖PPO@'c=p,;ƣcp\ŢD,ݷ/5SĺXbC|-4OEDl~Q:GG$=Ǣ$ZO%R}} xT4>Mœchox+ oZ7~ȺucCh%S_Q*_rcAZc,#,e^'L4h"YHA"Yξ,L-O oLb0+2 tY2Fl57ksKI@ֳ"HMdg0Џ?}}h׮'v|'v<Ƿn?ٺuC{5:C:tСC3YgsS=m'>wO/?zK{<;IUV+k-@aQ-jhE&tR$)ZZ?, hf@CrY{`vBr-ZέlMV@+].49SE@3o7èfЭVYYPz&|̛/`l3y\(> 2d%Y,JgHt1hؠ=%Ř1zl[]̃┅80VVtM1bɰ7C8W4R ,xg# R ]V h4}nv}.A;;'AU5=UuM&_op%ݓuFݱx8M&CظL^O$S 4KLNI@G(g s$<N&S}u1E XOLEbx297ޗOO OΌ<3abxb01=?9<$Κ}nO`ao d]&4\a, el(]Q$g޿$Ż=ş'KDꙀ-ά:ż0x%@=lyːt&}̖BLs^x曏_g|u}ƛ^?*P^<%B]w\F6MRtaI{Qi$/,d@ <9вD~92 Jkfl*%2!dd*ƙD0Z5e4KpJ3 %/{!,Ӑa.ȬhQ3rRʡI,73f) 3_;hvzi3S皫,5yx4z@H3$kG2"W{+oQ ۨ@ -4mt5]NpȒĊ"6Oy{qEH$A׆kz#;hs0PKWlKvP4uGD*2%cd25)k1OߐJ$u$&㉙xb}<.!I8KǢcţMĢT$<LSYfz]*.7/RLJFG oM$2K L N'FFdžGGMLLuG͡Ҳt k5gI@iB<+-HgCP5|{[ lpYLo)ߖHUC-sJh/ d!SFK q|mxg 5s=3y tK~hg h,R_Y,,}WGzt瓒>ucز-zp7iKpz h:tСC:tȢt83u&w:sԉ=o>yo|ѫ{YVR^Vm*.m.,nv Td\\lkaIwN36VTwzۜAgq :dH0Fz{‘HlR ,ߑ%RXdg( Dx$퉡 wXO멨nu&[m25k@_'phrc|O>'(z+ZJ˃%fwq, 55eYI d h ZJZ28 l.Qa#NsY!+YTX+h=ARt1eQB24 MT )Z*RiyLZ4ZS&yYԸ5 drI&A3c:RX4%;^%6#oZVIs Ut2QZ&}Wzb2YѪX3!}ѝ8c[w<жm?g{ύ Z2:C:tСC3 Yg4$r2XlE+/>>}}ȋ'>~OS֯k U 깴W\w|gEAY7-94E3 E iq KE>Ѧ[Œz.n?oo8lsI@=i$ R-vQ$$MYqY iZ"M.^'3659 mIPQQf=+J73VY&,\F0-M2bЊz I优tm~e2R'fX˧hj 0\rЍV{نfCe/$ YqrMWlw5.Ri)gHSs)|PKs{n錄;#޾H$To*?_'ut<>dftb]">Oɴ<f64XbR0*8hј`{#=ޱpd<3RcPOw_w/ߟNRCx* Gm-PyU[C}{8ԛ&]f_Gu}[emGiy% hHW hU24&AڒtDK]쳹EuǬ#zT$S@78oL9Vܘr8Ka Ze @@V4uy$k)s9Feb!$;s\Zx E!<}=ɝ;y;m~mxh}~=?7]{M+WR^:tСC:t83t8cu wx KV._r/^deg>?zN|ɣ/}۷lnm鮨h//o+.i..i*4=N^"9 پHfhNQ.6`/ 8[%mvbBW{umEBoU.!km͝NH|&j"85" "T,+a*h0,mUSWYp&L*2%K+rK,VH44hJ&(ӑ/K843>1>8鎴v55wƦHe}WiUKm][gG$m t64շԶW.l UyL(ZUHdQjYͣ(j|NQ'(iAJ8TKBփԹcZbXEU0Uh9h.Y B'0'w|xxw;p-{y_'=+OܕJ VTWJD *}dEiYS,0mt1Vȅe@QY( E`eQD;O%D3YfE@g%APe D+4҅+E gCFKQFk=m:dr1sU09eK,[c4z z1!Xcz,f1;`.HP1 d@Yi3~ +25ԌC(6b!6r¡ VpdՋ򭳇?i*MC)fڬ&. zJ*ڞpmSO]cg}}{c][)#!xg,NѾxo*'bIA@ftsjdg0OK0>ê$lSt* hTr0!Ҩ)Odod,}̝u]7Mlu=7<=1L$zcD{[)UvFR]YW^S4; 6[Ŏγ1j ȕ"κTh -hQY6xpj %lpfTB b# 31dkV44 hXX*NYX-IDATJdu?h0Y,yf G Ï=m[ݷe =d %:=YYxd-GGt?:ӡC:tСCqd",deh/|{w_8_/qf>PUJZ=žXA@\X.$e~t( - k h[!" VYjD*g'e h,JjX]>(@&E˧h& 6C@s ($L:?ByX/<> 3AIgTjLCYY+cA@皅C=iwK [,KH)ʛ1'c5晫0V!p{I@T0;FHkKW0ﮮm-{J;39[ Z7R=g %2Ne~YR%.!Y-}N6SPĮ "sa!$-A&Z៍fAuѹ?X3s}۽ |G7?el !_rť˗_fd} Ț55GtdM#k::tСC:tG֏+%e 襽-}?ɛO寎qh#h_yycqiSiE{R ]~-!b%AΰiiqIB!wjÓ RA_#32$,mNW)UU9sE-9^{8% '5bi`dлZχ?z{ߍv{7ܠ)ЧFD3Yё5ݏtСC:tСoY?j$˗,]xx4G?{co?s7z驙*qI](.k-,;%~ȃīOK@DVRYs#Sm#A;HF.&A+M@[Tg-%O^rCjHft {QkAQZ跺| F0&J(33r$dsq5Ua mM<&k6=?Y;.rI@!jt%ߗHЉ"d̘>4@xm [-rrj dqЊV%e ;kf ֆƪ`s)ii vw$[XWO+zD/Jtuwu< EP?ԞLA?]7:93>l015<258<58~dl驡x,RCC3S7o2=~wg"zcZz{A@_v+V, k"kȚGGt:tСC:t75^R!\tيK{C{{}|iK2Yyk4XZ) <͒k hy(Ң]T(9,hNЅ%.O) !4S?H@SC%KV.p-NmCȴšh@̃&5 @TIk *C(\gKdZSk  hE@Ns!ZZ,#ЦٕrQҠh3G !dr8DCP4 hg+nrUrQ &TUQ[M*X_6HOh-jw{ =hW"ҙ %{]qDZ"dX#ю}TW?p_p*554<544%pO'O ƓDPbt01>?:JL89tho_X&xpGU M6 se͢t*`ksK2WkOPVؐ%kp* 8hޡ8y (ɵu ;7TqUCJ&T93٪ g>(dg0{?k3}>} ӟ ݿeܳ{ؽ=37ܳzeKW55GtdM#k::tСC:tG֏B/^?W.[rɢr>;tuz˚oࠋǫd"]iZ꽂iYЅ$]NO+̜ŭ rWtxY3P]ЂvH$qh0e*@ek2`^84H5MZtsMU$r Ш^Ҿʞ"T-7hɷi h fj D"7>eի3%8n3;$ o Mb:m0L)-aPk,*7T+aOcnhC,A:K&xU*Ȯ-ly,wTo[ie:TVQQ^SPTT 4Եv;{F#hP/ܓ Gd8'Hg= uDB@s B{k%ioKH:7Xb/> $"H2"DP*F"=XO/N M N N$zBXk[wK{OtvtF{!Dm+lVM꬛O@B*\J8桂 ҵt4N'WG @>_6Լ3[?%^S^rS.{hAKc+vfM,A0=S1޳ٝ.r:p==s=YlZ嫖-[j%KE*Oi]@- }[aI6VŠe쳻*iu0`sl._l*p6An8\l44Vt3FЩ`.d5Et c%KZ>&i)Ц ;+*-t1 h!Cu*TKvX$3E"-yl D4 .IF;R1)yLY 26ZgE 5yjcAŞN<UK${ ZPKh[a9=H@{m%emU5uՐjj;Zݱp25L H,M$x8v{:-a-uۀ@slnm;:;zR޾,wuDOO<]p(cC}GO MT5huݕ5PIE{IEk,}STzJJEvflpf{aS's38-*b`YNV˖f4tY\WO.ZJK\JO5O Vgc؄,: 3"들eJuvg*л=Ȯg>|hm{,M@?o{6m޵޷{_C@KY|?򆙱i>Qv @zK_|MiīF5 Z-0/@~!nÕ=8DA?0R( j?>VS#rεp5kr6n{7}=YMr[GGAŪu sfԡC:tСCydX~eMpxe.^7o[R&瀷,Xm){+*H$LZU̠]^TT f@{д*{u~|"Uܐ43ꕃ ZYp"52t T|/ RkDvfj$e dtu/0\W&{`*-Usn#C/a4W V=SCSPAkqh h{a(lvz|$LOEkqeVuUuW*B՝5Pg<Hbd+ND#pw3v6757Z͡SоED #-o vvzcP$ܓ uDC-hgb8޿ql䶙ƆSd2HFz~_wCCwu l/+o).xEeB//KQiv5gY_j6w#[dþUSФApMN@P<*XA嘣BUOLbX;xYkjE@+vC`䧓!0D֢!GK{AV>g轛߽i޷vl!d}Vj2! 47rir@H_U-ÃR -k9[ YfZxex$!*`]dcDp忤̊6ÞJ8 /K0/!us_O<|&f4͝nJK%iy.-g2d]ŭ" e-gm.9w͑g$,luJd8㐠 9Z|6cI dht[ 79g h&[DU - 2Igb,sU,_lD1[AWKHIU "8S$7t=kB"$ ]FlfQУɤᵵ ɭ9ƊOJMVtq 5(ohUcLn,B\; h.&sq+'e (K:"==㒀=vsLb!Bְگ`B1_JtuJdyd2 %l4_ Z8!R n"%K. JIWcD8@vT`C3FKC*y%3A` \~ёoO?xλc'sc"kR:tСC:tG֏ QCZ#h%'G5PyuKY>O,\T*SDaqӟEtigwMe"S*K[]@&u 8sygQ4@6VP_r@3Z%:[KǏy@s$j8e0; ec(Gq  $!ȥ+8~C4l)i(s'"f!3-\KY7P XGٞ)"ek +RarZ)[$'Ќ?T+=A2k[< 2鬕 p) hB^oUʃ., z[J*DdoE{Yy{IeBpUuX{k5i v 9 `}=USi(UtVu56["ɶ 荆eeplx㺑[nyѾd+{k+[y"/$ǺZPϊ& $ɺ~MTJJ <3u8X;947dB8zZ"?%M3bi`|-^?( dg-i󮙍wfzY:tY&5DEKVJSҗ)up4vc#=cqiPRϰ%@-d t}>`d2BrhT2`b89S\K0xlg駟\pdErD;v ˼odk=:tСC:tm#G q1~|24,ÏK~LS}2-x%R d-4R)!Y}.*%ve^Q)p{[n%E~?wV(,> 4@2ZK1[d c KgYrmmR~'Ei B5e:E{ʼfΞzd9D,ЂaڛAA 9fJPCtz-X`&BFYlD 3>4qzrjxpfldrdpld`?ik ;kBo<e[9KKi pzJq(W-= h{}4iPEגY.O2N3Y W4gCPU4!X B1ŧ[uy+dR'9h\犃Cn߳, zg|mٴyt.`W>} SUz9]U.!% w&+z HJ'Y_ sP5ٞwX3]s_xEKpdy 3r/³>Wkll#CCD87~򓟡E ~6ݷp!cډE Ȳ@`" I1?Sst89r"!/343:tСC:t#G 1K@wЪNGa0 u{J%e>oy(,(- [Ţ$3 hwY hthAA@;"UYπՌgyd RfұY!Hja$|,l5ʗmF>ar YEK:LVK@c" T%L{3%7=MO$; FL@A7Rh>V"IɺUtm2ہZz|!v-BB\WJ̕L6ܒuqq=% ޴-X3s蝻~x[=<$! ݿon޳iytӽٴ{=WScRA[[oM͸EJ[dܯy@^zy}}cS糇d{q!HP_=TZZJ_|g03/v-sU]l/~溺("ZzWB]8/-o{oo;5Lыh33pN<8gF nl,1]ʕ""qyBǎ;wIs>9rt0  &@ٓСC:tСC6~H2yʕXꒋ/5]U-eoe MZаςpЧ#;J),, :@I[4l KZ]%zv}&='dw7 jS4g’a0he.h8潄08\wJ'&I:ȕhIII* YišC@o,p.\kJ[hqʗ"fG$ "Ig@nQ#l2 LtMVA< b3ZAgݠCҞC@?m;xpCزݻypϦ]w߭MWo$.Yy%pM_W^o\)I> \hɯ}z/?Dh3",U{ ~]w͒%ҪU_r,1_%.\O?A{ᢋY6D{M`\p9Ӵ`EKɓ_Oz_}>zKk+tagO>ٸxRLi+WE{?AWWc\p}Ygm?z%fҡC:tСCf>.^l%.3[ j[K*|oW W 0G[Tnc4;6gVX=~{;;|i6Q$qHVLnz.ŕLT57в҅dk6 z,^LT&ym~% h kzmdS*ϔNFTI@X>LG6 2a#Y%If sA@tl uEf5U0D!dKCZ(đ#pTmFDQP6Xk%yYPVIВPw܍2)I8, JnoZX.k),o񔵊VvWtWtTvwxJDaV5WWm֢QWSٞQT6tzÉXo'mouõ ` V'Ǥ ŐgH*d) ,Mϊh@&Pz QaYklo$+PI@+Y܊m<ݖY,9;xh#CE@oww{ӣM\b˗ +/33~K. l#Gmٲt5Yg{Y{]XP|B8?,X*Yh7oG +eA?gJ-Ydҥ+ͺ\&J2ɮZu)˖\^h⥘s[p @/b@֣KDIk?YV믿ɱ.XpQnn~8ATV>/hѢE|f0O~stp\ac]X8uy,^,h˹.1;?8D=9pb_sdd Jdyqh4[]--m_}d%ޓ',8g,`.|㍷{\Nz!mɒ%jlN EgÞl:)*0 ^ Yѣ\ҕ()NqСC:tСC\1&{xu nXCpD@0wUr 9qu>`\j%^AIc!ֺyr7fy65eAKў٘C@oЖm > @|&yצGu3dKD|ѯ~λK._zJq`4YaٲK,ᆛŋ@yL&O?/wm˕+ 0tÆޑ1hb(˪ha!+'{ZZJJW^yUOOXQQl0[|Eyy c0.Y""D$pC䣣^x4~_Fn.__4O3D⯬q'[h huͷu=XW_0-\rGnzcǎs=AX%]!$fޘZL>|5.Xphyͷ'''-Z`ZS`xࣷ~W[__q-O^{>|wy8z87D zŗڵڴiO0F̅%ƛkǮn-Z/ z4ƣ>zW,hW]w|˯<I9E Wh/^ \~…VM d l]##cE  P)qEv'K{{w;w.! V '^mՈAc͛Fa7*+1K/~=+^ >@:- h:tСC:tF@$+A o7Iƹ[R2'9M@{ЖxEJ K[]m.lPΝ. ɴSM rffzj h#M%q B)OXm!$ 0  dN ,m!12P-5?WN҂P/X4-2JjE(D,Q#kkr PJU$AgHzcAfW!ebVv,6Xe:!=Vxp^fj"ZVsYW gk% ZP;IOfA7+;+h hivjI@ :^rY4\U,V++4g5Tje T-( XR_aIi**, v7 =gj4k,EHguV2{Ŗ%ﵙRńn!Z8mȴR pYB LNV Y w@qOVICźPC@oqm~`$=ӹG@P5/^?={M7:omm_heb cc˖r:_|qb``hLs~G?_W{|G+n\mûwŷb3QW]zϞ}_*'BUetKeK/^}[oGoB|lOg}.\|ukÇ_͇dO߈`ß \q^̕gxws%~۫|;v?=ã = /2&p x=g -[`z /"b n9^{ ,-ff6syf>xn믿^aAؘȀ#G!~,lp8d`7o1'?'O~ETX5&pjj,"K8DTf?NJWWF!`m3b$Fa,Ah04:C:tСC~+OU]j)~p/[ߒy[,X\ZRDs}()o/)(*kg텥m h>υԳ"mZ$D;Ӽ3g,hALyRj hEp`ı Txu*Q'k#kMyH@9iu7a^gç E`q<[$SYeXgX/NJgr:Yp)\^r,HM΅sZ- )|c=;z=h!k 5Lk]6?"~ gJY3`t&8:Hbz|8gG ث,UBă[n~`p}~݃nkǝGu5˗ʋOW_}Wkffc.qG8c:^KKKYY\tE.CaRE),^fsa*666q9Y,Gꫯ>#ǰd2lq/JL<A?\>Ww:(y> h^?e){ eWZ.N G Џo9zF{;y˗,15?o^ .2Y+[o?[o_,Zymw` 0(2;{ॗ^trZdu׭ǏxW_ۻw8ج%8WN._07x3a {,XpQ~믿/^{6{C$1ǎ}'!/ [P5Og@˗.b.ꫯcO ¤]^zvFO pݿ {ٺu+4E\ׅ.4,o$m6ïMNNX_cttkݷo}Z䒉ɓ'D0Tb"v#x"wNǎ}kK;w>KzUg}nee?^Ml /pesCx*B[M ltZ:tСC:o%U.˗WV-R% yʪіVv$", k=wuEK]v*:pJ&]oqnQͶ7 *Z ,h(mekLBz2Fk8)-%e,lOBMg%>ǹ() ,0~㍷guNEEW(Űa gmp##csΫUU\D<بk]0@ e+bx+Ĭ:tСC:t1GUgҕ]OKoxZ+:J+:d x\>{U:)r:Yl=`OE@{ZZ>[:M@K>Qp 32ydM1,lkT<+U˳Ɋ2Xk 28i5y͂~5yPΤ! z-G štB c'̂rҲF,g` \oŬ-n&M+K(HϛgIU>3!H̉VA@k(Yrv24@ .+ MЂ0*JlXk,6% \?$hh-f(ge hS6Zq}:wCZ΂qHsԳU"kVEISϔg/3yWgR)Zו8!ΰÀbrɴ$,hO򩦠F&U4.Ufͥ5 $rTdUv\6çdɛ2ge`*6FźPC@o~-w=w Y6G3NQCH@3zݺ>W UhH"_{#G=/t|oN\~/T*տlيڸt-Z~~+l[\su .ex-áx챃Q|}<),!ThsrśneȗV?f9nw .pW_ꫯ?3W^yvu|ﯿFzXWUU?c^e"ks_|7JFhn /.rh4{8G8誮 KDK<2xtY,L'q_W׀Q [nm]8_}:tСC:tHdXr~:/]r2GK.\оⲶRo4M@$.A= tW\u6]eB ݉^Q*iqo U8<@6wZ 6%1(Mx14Ye2X>$ fhH:KWEEkOC@׉Wj8h@ Z & VQXc̀6kFByUfžt`s "ؐ[vˇlo4J̷ X3 F˂yZ%Mތ^kk Iuy:93ǹo"rςXkC@GWL傃Ђ.^ :+ -.S#HC@-f%kgj8ghF[Phu7uAC3 CƂ4LZY PZZY@ U,k]Wv\y%h! Xc [*xt^fg$pHNFid 5v4Mghb2gY*XA4Pm聀1w`Mo|\NO_Ҹz^[zhcb]u(!lk hwmzMgݛvy[x/!\\} 7<.{ŗl}ŗnݾkמ?O6mX~'|S<{ᥗ^"wL";lo^~GN/~wy_w/..fѢ% 29GLt|m{}pݛG`\r%2÷ĉ/~m};#؟g(~뭷2ۻwo=|lZTT.̞oSgϞ}ů$[G6n~ɒ^UW:~ g ,x(,`~9y<%~9N.iD"7=?}ŗ?'iY -`a\Q0n`L'`6[1 A{ È sQ"?.Y"l$cZtСC:tСd!i]vA- &DR˵"_:Xk1Vͯ\m*70zg$GvΗMC6 hPU{֡#RkYuVAPZ%d79_3{ޯ;QYtZ?f";;8u;L ʰHL))[2P=ˍ4,YL:oJA.[ `I}(qz_Vn&}^Ѐ+(-u+c7 5>1Am Ȧ&ߋ/}3f5LfsT(A6v hr Kgvٙ1d}o80ffŸ1!%]DT9*D0=+3ξn&1JF3Ut'lY3 P3l mH‰&3S__4To܁m(X8#0 ٗa R~*c)/fYc~}L}}eLPjT(e2 _giL  2?ŋ^.laBBa65M*J7w|_֮?\/_מWCpG}IWe@~_C'O6\Ot`tt믿˸s^*moa +CCc|7n|%Dbi e/166co~R桞GO?fLV0> zjj?>xH.ϾTjnWLQ/Ƈ++?N$RP @/zVtT?ӳ t(ȟO?_Kgp8iRC"o] ӷ~GYE v*cNy$_(Ԯxq:Uqd2QN0C[cY8X΍i ℓwNq.1;?⸈ͼjS2_W >j3Y`@ W h(PKj|$I@ rW%OihYCTQ@^ gs蠛1YhbLs";d=u1_%(dr!)Tbb<]3h]BƇa%Gu-YJ:WMl@PʴԙD3 ,T2^N~D36R`=4<{WL47{ahs;t(8WNI\IK):hFA7~!hЊ ;C!x]NCAAUId` ehh*SnhdU={ nQÜN4 53oAH Ɯh܉ŝ(F-M? lkФeRz*gX:HB*YB ˤLd`߅f Km_8[ |&܅-`5B}Zowf7d~\+jkV3_0G8_O' m@G8o.%p%zw?џ@p١ PB5 N~{((NcB2>tO?d'.pmp JN  ]N Ѕtt2`46Q@71/uBáџoۿ^t ^`4 B:ptk/Ca(` ##ѠzHB(@ =( R=Ӏl#ptF:lӄJRɩ? Azǟ_]@{8^<%p8򥆀Eg; /蚙/ԮkЅd2Q*44[o #x#;l3Kg*zzV@5}ȟB19h4jMYxrCH^ RUNt\M%KΔ̴2Fbn~#8do@` tӰ#R/=e ,p#tC8h(Cܕ7B_t1~!(egA|f>.L)l4/-Cߒ eqh6Sn aI{yQp>Ed,_Y gдaˁیH-Сh7q! H@`!(H؀VT"SD [15gvI(CSa2R4P`OM1016r AZ+猀>y+njgo͝_nz{o7w~ ~ ۧo44ɻn>i7?+z(CoL#@ $!IiXp*A G}pd(@=4,/@NDcJ P33R3lepe:#tA28DCA% ma(. ?!0Mѕu5Ã[:#tkO~糳s?W^?iWgp8p8-_jߧod}lV| n|y<_4K=.V&<6 mɼU/~< >g3@q(Zf/JX&=".p٨h{iYh!%HٜF$)=]ƀe_I)$N"AV*$-vԲa~T +g&Z4wڈ݆k>NNi"TC@g[tl%xY@>4fhI̕2AY&YCX}2lDZR/Kƙ`N-TQTݯ;Cv~ `)ˇMoPlNąɏmJ:ff_:2&$aK'?t 3|Mo0E+eS_.^źr| gޯ7w~ ;q~)_3v Y?ؒ˿+ob$#cmfxIB=P_j P p 0PB144>4O<5yi:#{@j%F.T-ԓ<Ѡщ8 5PKO]hl柗Q(nwNQ/:)@'t/Cm; m#] @GCc?翆PWR_:J.4" 5) Es@zzzpp8K ߛF[͗'0sT@&P_˗ǜWhL ]顙I@"M3oS?iP@&eRId5P3}Kl2D30sN(ФSr FLt32T dБlפP]@ ,uηyɈ_lA9aƥ&MeKµ..ӥG J mr%\>q%ԫ)[H xG Z3 #Ui5o eSHFPO;g,(tZpLȍZ@a+O3t2]k.S8 Zifc.=x)p¡_i.Hx)^@/'="DאsvCM&PXt]9I$A 2|Y8%Ꙁ=CT( L@uQ@ӘkJ,4 zP@grdrP KAdu"Y"b"SI Fcɗxb-3L[*nI7ppeP#w#9E@3ɈCa3:#V>W@37ALnn!؀F ,(\gS}3Sii2UrB{ Y-k3^ޑ+Vaʏ|W~q^%3ϷG @iбF!m;v#"cM5L Atpq''j.Q--]C7c%>ACssP7Ӱ.=ߥP60LQxKAU L}Uh_9 ˴XW/o~ Po_:NG \`bg,ޖ&IB=l'<߅zA%-IF( a4P[|+]8D}"!*PGK; vF48]$qTҰ(#m*١ @/) _>tR: [CUƁPO t; (SK@إ2A"6PCww?GA67ϟO`d: p8hRCoIQ6]J[s˓NiFxi4CatgDqŸD ?tBK7T3 |M8pL˒`>"5XyFjS..7S<}~>^e1 h,PYY2L2M/ 4,\,BVCns(pmt_p$U ѥˀS3%Ns\f@jR} hT@'34t3b%t(%2(xq59L!,[z5~#0Bm9_\dy1U`Op3(k3pzAGⲄLđkh\ 1,`bCB"XwǤJ@h܉'D*R yI3fv" 5V/ 栘$ /ia W%Pl >ӌT% [ڥ[&/ v,T$ &RCdO<lf~}Z+猀>z_v~K76~_pa=6rjX) 2\0v1%5YKKw(kkGgqWp(v+«)up4? 4tyC_-2ⓡe+sэPl?O`{g>_]ƙ s8p8Ώ/5|uj h -λf+ 1 $G|eX@ 46}x +if1F(D3D1 t1)!Yb0  ht9\jY}LI Ʈv $VjGV j]P0Y\F쳠tF #NaԫLz+^J:U+S@>UX10Yc^yߔ+7ê5`vq3Db;l1o0}]5!ńp ӣt>th1EF$Sy .2n8儓an4Œ04BQ31"Q+cq;hhL2ʈQ܅J O/I74|bP=o>w(P/74 A850`rD^/f+¡h uP ߏ3wncW60}~G[E@Y@3?|ek%p8p8?ZL@ oo;[&=` 8xbu\,U& 1< 5l h #9h%F3c5LD4Ig od  f=F"XDlΈXA heQ%\PL3%i=T3HJ1:P44PKf^(78&lb(Ci]H@ÅY <xi5c9`åz͈f./G ZiOPDFSՈ4_(Ɉe+"K -ȵZ_ޙ3AZQkY  ;R='s0 :hكva)9 xPW .,rAe(CS\'\m3#{U?P}A!pAKZ&YDs&*?Ы \@LOu#tO}c!p8p8_/DC@Y,F 26ճ["(X+Д;~t />Մ6C3L6S}ȳA9HYI'zCDah&t4rbd)3-'5sC@k/?φECITyhjbȝA2Ҟ/@%`54&Fr*<4ΤO\pqE h*ӹ|nC>d AjiJ*)ELQ*ur@MJ+ WYF TJ)0eO5g̏dvKL צ݆7 0Q50М!a5`>YH745p"3?Q% GAC†E@n8Fh c"f'#1<&ֈ%XҊ'X鑨hh"1aG`aaѡD=lR hBT`x12Їe쁲rC N}k; t767D3z6$\@GO~;On=}Sٯf9 Woc ~19̩-(]Yz19t WcZuS=}f!H%~PݔPO ՠ إ) vJm>YkpSpSp9ƌ=aWeʄ7%tnFE3aƹỡ@cf1Dz B2  D蠳e }x)] AJ'uw13Nٙ 78L#3#pZ1Rt_`8-g} ~I ӵ?dz" 4Cq>463|4] %P̎..hV{Һ4F{Ö#Q+2/KVCa r{LyXYx $Cݴ~3ЈFW;>kvl>^%C.Vv"6I)Ӌ@E`/»C^"s3>[i;'Q ~ͽ4=~qAy4p8p8?"ZA@ho|W9Mq6#7{CzC@9Spրb/ h(Ph%H@oBa3@Fhdȩ9 29X4O4}]&(`@V4ݤti2GWӹV @ƁK"Z՛jB f&1 hfaVWRRgJĬD]'?)l_@9y4j|Cҹ&d8,9#S&Hhr 6iZ0oaᲙ,&3˘1gX_/O*y|`/ffPƏ^@cʔfJp¦nu`ZGK8Q23Jl T1"q/s)dEhTƴp 3X0O1 M'ɸ={buGdMǝDȌ6OC@c "|Fs2gxde[1{(P=5O 9C5PY>0g|//P6Q3dzߝsz;ί)'_c .9p8%8G@=_JNy.o+*K]60T~Њէ}ѯY-6Z@fB_/I%%iaфl F҉֓c"2r#jF3Vh}i}ԣV{'#5x-t\ѹHL4.)3h  PG<)o4]z9BDre܅9בj,T@!g5I:e=_7k"Ib A$蠓9ifU@7vCQRcrVtn8?#6.yq>S/ 5 Ue ڵX^tWе̭gІ7JVwGT{/=!JB/2ُw&PQGSx"u=-|^8OYes3s9\ڰͥCc0=mvG2o]LX/] [ᰑZѳpv" [ҹ g$ [o{ h@Qٳexg?PPG.4{i;'j23zgol$)3[cɣh4Kp8p8O˗t oFS@N:y\H.\~a:Q*{wQ@* hJmF_5ۃjS@ lQ@&ЙVQgtC+]^e_&^60lY8pw@@B50h;]溘PFK  L `oLV /Ꙁ6Qq C d}QD(ŋ n3.K :hT3,: !: &ƓkˀB$I!G0_2r/Kg¯$2WF, # 7 QҸ͈!Jl urϸ``6]-gsJrsܽXFLֽT^AgڳʬYJfgy^/f|V!5&_-hF/'2ࡑqF 8 OۑؗBV{Kb}]eO=vܕ}siX3-1n[<[ ĭ\RLo/kZؙфQgZ_ʜ)ݾ}rN6zfpGD0rTNE5#Ob]wNOty-Л;|ŽO<~lA<|v!p8p8O˗t%۩s%_@7 ]LxEǽD:bx*Lw&0`LoD=l3N hՄaQI@l5 %td- *F%mQ*\)a+apt [E749ePMg+)TW,1tYДξSF+tSh&,FGV\Ҩ}ΦH`{7YTCֶ ړ}n h $ LȘ+@ k\՘kN 5vxaZ2.?ò|My3hȲf% z&J(sDi,eƹXdVf>߬TB [1݅\kܹ깫Akֳ\Ymgu/UPٷjrgܵlu#.ffhm4ga9 q6‡Kρa o$ݎD>,`Nmq3 -d\9+[?6CcP_Wv]s~Y<4vmmaK6MmqS]-JҾ,lW:CjXn[O.7[i_@VzU ZOK %UrL(Ƴ"}?zq6`o̪Apw^ь.1 I6grI' [oJ$\%8=Qy ->y~ l}-BHRp}򨑂opp8p8/D@@co7[sJcv|ePWǽ[p˨}FƤΣv'e.0% A} 5T1lW6h@|tD֏Bb fhЬc+Qz@tRGVb-[ "72>f6..Sb0z|% t)slR,'V9 N^xv %b2df@dd5I.GM.9gl;7r !~AIHXB-V#$/R&(+i.j}=9#70#U*SLc")2/VWkjrg޻Z]d+]K\csޑtp. -9hcĨ0aʱCcA)= /+Dⅶs9n% $_c^>6=m,e=saϘ1foi [pTn{=N͔b=vqYB4|E9!}(  ƧiA,Džb2Wr<[s N$0]AQtP@LczDE$d 'p 3 p Dro3z{7'/m|7ݸsܼ}p{>~ 蟾&p8iN$y'5" =Ln2dni-O}W' ں(v0ptH0x hd  j͵ >n_@&44 h f : hFUasAH-U27HaFԘb =i#9)RzR:0 Hs./p>~3Ȧ~'M3 h"ɒYh9ɣYL(֐Zq4Y2 [v,W>M*ŎYzPWX13?3Wt@}40H6–C hpCQ-jy:yZ|b,ls[yzG]Җkaۚ۴fMczÞߴS'1cY \jD&阗XpUY[6j>lAgrT h+YR$j9*|+rVSgԤ0I4s^I@)8Zlc ? MB(%Qu" /*&+\pPKro3zoH@?xCC7~ykqk!?ydoՅ o2ߪ Z?{;6p8p8;:V[ va9hL hff}#ZwX"&΁ú=T~d1JQ&7GP~_@KZcBQ햵 *hjL@1A-xh#AK$qHxP#ыnr,MҭU-[jD4$Ylpkf::Þ9{.4sп~ @"D oP= hfb>Ӝ֥9CTBY3itsڍ7Jb>U #L1 ht1IxҗѯX ih5B %n$h0s[Ta NzK:w 7bf[ԈĬh ]V/Fb4]-oˋ|7ͥsq\ضfmsz˜2f7 {nӞf]}Z=2R`:^.WM]գ2lh6I=}irЂ֑QkiglS{W2A![b)#|X0-q*fG @8xI/DLR h#B8^8%D%i -{tJK? goo~C)2 hI zgZY-Ph# yjhi'Mcv~`jlɝ%(݂+=D̏+C-!(좉)3gph܉Ǽhi, mJ4M=V=ynG16u&q;6 jiv[߶LDZcv}uX=6׶OewT;rb-vHf L MZ5R).j5r9-M4:h fpuP|N4A 8hht>Bt fo4U'P@4?a X܎FHԊA3q/o_jϏ3.dٛo_xm@_Gp8p8 -_tFw #Ѝ^T@Syl"l$I7tt Ъ1Y[ eAKg-@Y8DY8N~-q†}\-*pR|B%W $Bdǚ©&ܴ"b錋Yذ~{:#7]Ѕؼ_@d/DP@'P=/f$jzw4;a<$K,Ꙍ0YJ@2~3h-a&݁f~n_V~-iGzt(P 8F:#DŽ= eƝd<X"z(iKbkYco9̾=`.s+p ܑ6-➲-/lK { wi.n OCu@^5n9S7TZr~* ӝ~BeP@cRW$at"H)j"L{/Z\9xٍ~x}OWڅ@sޗֹ4p /s1;tiۓf8m'srosGY W?߫np8p8{k8~TFczc햆h3 F \)M+>Sp> a$h~L  h $fHDĈR>LFJ;D4:r h\Wf>#ʙO^ Tb\0(15H(a(:P@ x"8|\ƈiP8# uD\3Q@ \-8ux| WʢE[1^̞4"_ Ij(x ,Y1ӋC:Ogc :]h h/6/FP܊FK̋JĝgK[̆1eXy[[^!}sʾ,lO ▻c/BmaXܵ61.XN=s\ɽA e+Zj. 0RboZQ#bG2WQѺ$+ h 8ca 7 h~D).^{%HʎiǛ/vɝ{O~f6pVW hp8p~| '~wIe47?GUr#v~ !4`"B%('rC@I41Fs;s/ۃV $tdPO3 Es:lB3Ԙ|tN.rg*倦TYJ l32΋[B*WaP h [l1KTfX5Od L3# h8)]쒤-.gs)~ m}9HL Ŭ\WAbʭ8kF\! 5 Wb}P*:إ),a|ذ aQVh\威 .$h Gh E1=ۍp(+_z3;6osܖ5Rp g-n˻Ҷ>yG캖--8-֖6ⱵCm{y[:_/}g3Q[3>c=9h͎\}JyJ^>׆ЇV$w<s^j ;@PDS_ Fp\-TBl݁IbholN6q`.v/]"#q/'FxLp89[t-^?DszȷQC9#d̏lWc&fsJ^ L-e?x4lK3riB ]s>VY2' Hj~R2P` oDXV^0'|IIv{̺!E-$oi †y3]}~Gc,󎾰- 3s?W_iSKRnx>J{ܞ:k.;^a$uq7XDreK3{4[3{5C;d3/-[݆%dYmcoqa]=_=)];ɯwJ}9&u݊՗e?oM`z9 @7 Jv&ڞ@ N: ' 3ąrn3k3u?ӵ" /Gcx48}ZN龕@F@('_>sG/?>߼}] ^~(p-.9p819#1& DV^7dG a0besm2_W'2 hE)xOX}=lzJÖ&Ar-z} *rZ-iF|teP@zVZeZeVS*X ,4⠥v-M` EU:31ԍІ 8]:5mԬ V  niIBj\: X:bt@pG&e^n|i+],59&1Q;?'X.`@tcqB*,ͬiJ<Ƭ`1- h mX+ -H>!^w☙`?$G֐ѴM8$CaRԸU#hyA{O?Q(36nmos(muv[[ܡ:)V]kk3`PH _`pXiqO̘Rm{u[?q׎ kOKk+G\.1.ERAxK6:Ti[v\Ks%k桻\}n]Z}=֞۫ό@eyq+i%s5Q_HCo?c&?lCx+-`:6tI/pJ6X:37HL$pݿyˠug7o|qcW{7n]Gp8p8@p$(1_~;t\w00dP/Vʸ[p-p|L&Zz h(~hneX,]RC;2 h"9hJ"[bJmrc+|2틾8(ԠLͧth0NMG_=/Zs T)[[.ivanWd M9 MЀ2lU#L Pz D es@6tv5gPqD,=l#ƇarLܮ] uz#(OY6͹m}zh[9/̾6PH l6>l?h3.pTM I={~C_t WןVOkOK=t?9m"{%SjK^:NqNDžU>y^X?p''_?>)/od Trr)fd`HL eW/+ZBͷ hCrX<2َḦ$m.}Z,khK@|瘲p}/n|ysW{+w"$["r8p8i2/XްnJNitq{B%(\\p-8І;"A&7^-ВТXLP;Q@7!ß}͂0,W XI %_@C=AtɴWtfZ>#IA -&8T&WJ\WJ<ҾA $Ir47AGYTϾ?&ާ|S⧾#-))c;>;1tE vq5a֠z+lcPL\^.%(C r&C 4UH:-_!  [-%rN^h|g<3ϭ)#Q~J-l3 ⠕9&gpM u>B}ﵶTe1ܞخ]LUpڛHSaer1gʮ~T<]>ʯ֎KWkl3~hńK֩=-]9RYvh~nj״[cc=yM:R vJJ?i%ϔ44<"^xVv\%# S&sC%vF&AZ,k8c[~뇏ŝ{O\'w<7wV})8p8ph2 ロ #oC3h:Va.8a4r*d:UǼʘ[wcNi&*1/ h,؃=ahY43 hJzOʹr6vKJC:ϿA+*=-jY k\=6(;!MYFlFrt))M@hfd /.2G;&gT(ZiS'>8k "_uI*07[n Yވ lL;'ՙr}T-TQ1WH:ʔj3@K Vafɲm@%hx/\ ;iF 8 '`bJ5pB+c6߈q]0.7]ynG hv~zCD+^{Zv\vbxޥ]93uz&&eUJvh\}殝ŕT YKjwISlQBRF{M=@^1e= zL(7rb|t9~ԾO]e~_ߓf]ka7]Z Žtek]=ցk Aڳڱ3{TU%݊֗kY$+ywZދw,Y9JQ+Y\*5QdPe)O"I@C~j#})A fwI+b_O~O6EwܺsLmu탥[p…B~'r8p88o:O?}H@c3h8;{F~tУne­{41A72b3="lz~4ZAx9W@Zr:73ТsГ19#wr=gX%[B0^itVfYZFnrи YlFӈeaa44nD@_f О*i2(CMf >N8w_>*[U@3C> Ɩ 3+Mb Yj0EBCCItP.fqftv ŸlM;I2˴% Ю﬩/ߑل?CLl\X,&XSBf$NyKayWޱvTd14Py@܆~Qv˹_?Hx̖hO-ev+[;2q;)*9wiӻz쮟xWzמ]ʵGݯ=ѝ;sFgպ`Ud;Gq~iy@-bƛЙ{RR1%W2*ؓ).:b^@+T: 􎫘?'~7.GAմTMP3L9'131C1#ivE@/f'Q@I@'Z^'1'5(Yݨ_9- h҉.cɾυ g!Ee~ g_{~/J_x\4p8p8?xZ#-)8.yTV7~E>A0C7hyn~PCakCI rR(4;L:7%4!֭a4sX"*KP@Rm@*%|CT9P#݊ٯpHZƘ1Çz seRft{gPJwFHiJw ΌxH#g04˜f̾`r]iM;-hsf8L^y.,9ϣN~)L"l@Øe(vWJ,WϤI.hJؒ4dpvDY0AScCǀnx$C =nE͋aR, O-cf_]xnH[M}jCc~;<fy됸~sWp8h2+5heπ墀G-3zg+?dtlv3#M 7tw=۰6Zc}&-jݒH4ib3_%7 ?R,/;|MWP@ jRw&׉+ iqF@7b}}L_M\@-w2L\I .`r4Qf8O@CY?saM6^IEgZTݙGk߸kO'jXN$UUr\(nT֟z`w?J;JDB)B2|^dA]q-sz]ڳv̅={\<ᦖ13ϧ>-l+Ҟg.ˇ=H~@.͵*LA7_Q@o7w=={J ~p8xh2$;$Ҫbufaf/ hŨJqƬ蠃:})8| J@S @s g#k ,>놂_C@o}$ 4h8>JA' 7*[Ǭϔ!h7.*\U(2:W h6>}L"ˋ AZ!x-w2I*n:W)" h+?ְυ ȞANt0f2dCt)Mq8JC|yMR؅;9C؟01bi!hR]WM2HЦ7G}fC}"s>0ֻ™UZ(pB DF'E!?!M~,lh챹T[}҉pb ⮵KG>U([ %tҍpKXԘ?珍6\SgD?R#{YS{9F,aGB$jsⶽt`kG҉X:̥CkaZ}j='ƅz"{~O[8NcwYٳVCuHZ8ֿ;|LŝxxgҥAe~ go|s3栛{WcڃH$4p8p8?Z#в٥o&[~AS@Ugr@l5 3ce e.e }-*=l X 4@@L8+whʴj:0֋{RA4 h:Dٷ̾z/ h t~=->1ND`J$ٰЌEmy&rL6 )bVaоb [jLv dk1s&6B:^,کZm>Q19 Gܦ25-izC~cqGRQ(o ҆Xg,m&n}(\$^ mQavÝq維'~a^<6WOӗ4VsaET5x7E*H\_3_@w폞YY:̯y*+ڽҔ;}t]f=5>6usnaq~]=>_3LR)- rOZH ;_wceX8pfJG sf^92}]͈P$$f'1s{iϸL[9 cԽ/];Žrhϼ}ZT ŝHI%H$ߵCi@Y<4+ORy6#\~.LN,eykZ7hV1z۞ݵCsaǝ|0FØ6fo_CK-5u;_7/0.9p8eڏF&$:sC>N4B=94`v} &CMzjA3 ݝUNZ2DHP2hO_.Qhrw6@w`_%LW s9W@~  ӺT dqEQ0N49h8-f~LwG oA vIFP.3 i(P#/Z9L,)PNp14GԺ/F4/ه(gyvGޒgms8e+Lǽ7&{VnV(Y ]/1/m|XWCgйvb_{ZX{_mаtyD*(rn 8Sj\I(TRP@O+ɻcZM5d|YX;p֟kO+}6#Jw2A_׎/-VrrwRgkk†6ry&)A=f%ݘ#Ֆ̱[r,=5fȝKRJxk.i2\9|C.N'rq-ÙBPi#Ғ4tG'&BB-GXԎ5s즳c.pM<ұAe~ g7~uY81}7o~uw hp8p~|GZow=W@gt? h ELi hFC@sK"U *͹ hBd9Sh lFtiӸ0 PLEw%Z?,gAVM\3tbZ>!!OU tه*ӹw -ihЦ;Ұe`!gẅ́/)a;Sw*YCQ1l|  }l#u0~1],L@CuvC$;Ž1D*\Y??P0Vq?Dv]v.GCCn8]zV͕Mki7_X?vV0GP@E@ch&4r!Wbϵ7.ra&eDjJǒ;Z9rVWIg,Lxr]ܥQb^y W]S]Di u.'DH` =%>f/lK'ʮ;u7 Z<]΍1Euz]żhHIDBMDҋDd 't1,gdyHN9SD>U2g*=x=*uG_gsִҽAe~ z[7~Ͼ}DPV5"/pp8p8/F=~[xwiU4ϴLp o7~>r&.Q8dҌ~>F@vj pZ#5mH1O$H/ΧHY hQEEt†\j,F J[4)Q2)8P@ ZD3f_:CUm@b~Pvf#s@HZ0 C myc8a`ޠIU]fr,Ch@/-C/q]4Ҝa`TƂҙk͙P֍,aXbN\07~`-i(F0 $#Q)8ejzc׷<⫽o |u;wOn9@q}{p[H7 ߳o/"p8p8/[oq?{;/lh֬>ݣPoc4 huD!P{qF@4smmvpug 2 n-;+fl2n:Ag BwN$WR7zg4Y8I4lB>f ܕVf8[i0q@e099ֵ]tqAO P/(u݁ɉFwHC +A[Sp+h rДwf~.Y1!+'GFMܴ0|-6gF4lj,yNf3s, S H @,-j^ (/R†1s'4 5OľO۔۴/f/^?ax/}QG\?F/. T9pcJژTok{a~v⭓w>9գʹzNFĚ(Uj$wԊt ,ɵ营ZN1NMe3]=VOܙ7Le,jZ2j knX;Vg)!W8mꉳrPPG.&m0aR^z孃w} w w?r hp8p~T|'7/4r@6L 5Ws Ow *YA>e4BngJ* 3<3QHbՓ&>ѯM&M6՞ڙ;Xb%+rȖb,[g\%+c"9L;"J]ԍ,CY2h&;h+jTȾ+|ZnǧOᜏYX=\60dK60Laʼn<[0*] y2P N8fGhNa-NVwuw͠i®U2%_ny)Aچ5 sf L0|$'/ / mjKQ枨FnvӚ|&vY\~p9nr9Q=bJ<.g>1HC7.K1%ܖK沝Iu>_:VgY;1W#ϴ|텳~_~'tCKi*ex.E&=oz_>P;^ά+R:–\=PzWbY7ɧs=YGrF՞uc恹zhث'էڱs|!Ò1$Ֆ+GOmw苈y9鵥HʍŝplK"ExMd D] >}HsƿfѸ+s⁶a zcb(0I' aTk'bBtIk-hK^0LD>(DN"iv[ڋ򩤛[4TMƤu=2յcwiǘ?]}~;"1;2Ѩ&Kdt-# T>u O!L7n9n>>u7l hJ4p8p8?Z hR^귛70iЖ;hxX md$W}گ hC600.ih:wKz/~H@ױe#mtC@grYs$[4Ѣ):([카|Zn[N 4Z"[b6䙃yu:Sw ^Lyд (YͲ.0 hΰb ,44,y@6` ^Sy@7QAvhΠd ,4̮TM*)oB4oM1Z:3[#S՟}m(u)RSwDd,>I~y9Yxټ5qW.䗶kCY޷wz䬞/ϼN3*bSQ:GypF@;K{Ru^(^AKpB]ZgK{lDd> ~nO?({Wk'q~vRydu_K)9#pՓ2b9`tp %p cRڧ_y/i ĭX[J}I۵LGlG2Ev$/M P܍'8㙲4g)[r~&ym쎵nx%&ӎczL!51=[;ʒ25[ciOYٵVwܹҡt.(OBr .N1hT蠃m=  :譽 y~,(o>u_=q{}v hp8p~ش|' f Dm7@U@;GM;蠃 hM䗙=1矈7Z[{1bc-s,;>KҞrPs,4IgA'k3֕T̽^ h<+jU||-օ]c(r}֗/ 3[ڳIe{\ S m0:$Cꡱ4+gB W|(Y' JxѴNoСחsv,Y\Sgw͹cxH8f4㵧b,YHDN$]i𺱴c.JWi=%nС׎v"^\O4޴̥cuXY>ԖeVgȣ_}kYUf7rGE[1Ш|I@$x_yƝ#^}x1~y{^YZOp8h2N'SsjA}*m:8G@|*uL~WPxO>ɠ g%Q:0r) TJtsEs-%S\~zh ETϱt hAM߃}Z4r׿Խ)ٔhL!1[E]L L[ yf !*0ME'? S.6}רrtPjc4Ԑ&%MZ2+`:r60|͇V6iLoZ^<.}zKޒ'(S̎9oNoy[hr9d}1Bq77r^~n+ҁʁvHY;v+p|t_݂ZUM`B@+Uj(w* Pb⎽r_}jl3OC k1}_ZIAJMj &鴇>֞jj8O$1/$%&IфNxYu CmV4q)bA_uvǜ=6wOJ*b.tNtI0V<)#7- /´sw#Cb8ٞ*Iec>aEї,9NL,zcQХA/);Go vu|g7vֹp8p8GD˗qu}!NU11MAβ?7oڈ՟F@s@F@z&^)}L _/} W l#wXrXSmIQ\|yiAV9]FyfE?8-C{qL!%E&M'6OzC<-Pa9L@&wLδJ5Sΐjaq^Q+.c,Dh0=(&IbU{Ÿ3J'$b,n(|)eP@+3OmaT^ζ'J̮5aN?f(3:aȣBRH 4|Y<w#wS?3Co 3@t0EiqKdzFr]V:$tIr:sZ=л[:˳Tլқ;CT{rW3{xd/YW)X_i9JRNKJBIܑ+bVꁷš۱njٱD>*%Rp 'Kۑ{9YP+}@_VTbz8] Gxnڳ%i5.3; #2sM :8h7y[ ̼3@[Ex- hp8p~ȴ|'9CjF@v`Vl-,C6g}^-uKhJgL+=E( h)8ZM -,02-U2" 4XJCX1#:(sH e %V(3 %(hUL?8-"}f;9jYا{'l%&Yyfv37vm)]FC#,ux5pB%]"gMڛ,ų]q^X1ŕb ZoN)j03]it<AH}މ~ܖaKЕOF},><2#ڳŋʇq-7/Cw~]: hwt$p?zfT\ΨUANQ)Z`: Q@/H*e0!1mOʫScY;''ri& ą!:rbEXdUrv& 3(^ҞDbv癇 2pbq;.!c3zXP!cx,l(YiOz ;tbl /wBq7$ue+솶_ؓ'ŲM;E_pIN,iuL|ŭ/o@ C_O@|/={=?p8p%h2N7zo֛?p፷~;TdK1zu{rL5qP@7@Z[cS)W9Vm8-v~`K "Y _@3M>@zsZS{G:N8RL@YfBq=-9Z d6")F?GS=c &ڜoiso_KF>J9AC#^u{Hw`+^y-M: +?nyc7b˜F8f?Lu43ug)+wXDO18镧ap|j :%zaje&[lfL &m}~H|6郰3 ʖ>'*¶70]]BF(ssH[50ꑳr1]=qV'Qqz;}ܓK9CP.JrS:rr-vџ{]=VlqNYb+yJRWJEŊֱPKV﵌b7)/+KjW\_Gn#gW)IS,Lʱk/(}ŵh8ܬὋK]9P[7緌=ms@DTo oBޔŽETnKzڱۑI֨2|K佐=xɸޞ,)cw}ua\JRD |8z[bܲC{ Vr9]lv81/& m@\6( [̝]AwL Cm|}N@#P䌀ͣ_{'{'[}/Y8n9Z] ߼[ hp8p~|'Њ).6`ݧL@c ~!Amz^%>O}!#`[8W@54}09ihjw],n@@wΡN ( Sb)#Hqfd ![x0)RZi Em18 -N}Y4|X9 3}`3!;?'„ޘ卛ΨSRÜ(mƄ0`b.T:ű|e"_4l5c7 S(ΈjJZט)Z_¨ s8DLB3ЍBYЧy6G..f/^̵ u9@{7e~ږ/hQ(.9s-bPs3s%zTGOQe鸰zl]=zWOyM)CTuUTά֑ᦪ)4w7]} E)WE/-ë-+\E4מkϜգ9r](Ԯt,$KrSҴ>;w_{ 6VRMao[lw=:b=fK3ȗ. [򁺰މ:132Mk G=yO-$HMB-a HC{H]8V r)E0Ӗǿ`{I<IRq' f") Cep`. հߖC{܎/K+[ߔOno}vc.B4p8p8?Zgo^xw)U;$GXz[zTЭ> h\i  \^#A hrv};ߝ%V2-4Spd)5P2XeM`Q&̖N_A?8-C"ibt >VC >} l} gD PE5LF7M-,3ffi75p-uRAYTF oglVg/JՂ hmqOzX*⻗6#ֽ?16[rBxIFCeK^X޷0MĞ |97ןמ9WWս܆RzZgX"u^"#tjzdtj:SIɽٻZ_kbyI]+gd"JX̣3{Y}N?2פ5:u^ .xȾvo+I+,DJ[򾶰g{KCm*'cN"D2P*c =$솻|Yӏj-=W#{?PV#uZ؈fQ_ Ϳ@[m?ua׮[o(4p8p8?XZo1N{L@+Fd3~;h6Zz ײM\*t zU@ᬀv$^/< d#èF!(}}&-&~f&,Qi!lϽ˷I}Io2=%wscR{t1%j=h;{&[{Y9 hmaG/ggNJsOΫ9|[x^.IZ g<_׏ r\KgЙ\Mg1SXrgo_8+4W&xZX~\֯ʖ$ȕNB{ʉ\]z.?זcc텲LY~j;}mnۄ[(f,fFSZRﶇ>Y>ROc~l'smDqmg- z,cGcV{nԗ#wi'UZH8T>V,aGĺs͚ >rCc~Z8̕C}u_]"žxB:.$&{Z41\ݔb-4l>D|qvi)B`en8)8| +.9p8ex ÿ;cͷz{wXt ל~^7l̤DeYzCrP@ |"}H+;! @oԢggjt9V$RbAϔr hAHu@}3Jyam37F|07`^D,(K wV~F`dЋ4eq) `G5gXwGd> @Ag٘cS`ix)FqRBLne|*Yp;7i.lC_;?OAKwϾAbH/^̆sfg+{;{Ǵ.?xD:蠋ūG/ϝJ;u #VrJ hxԘDT{jONT9 <ʮZ]JqT)j&[%Vg g Wա3لԛTeΖbRV*ƲP#SY&Kt/j{ʡ #{=錪wCgqS$ŜX܎I3rJP_rxҡ|b,Kⱼx⬞[L$WI ыŬp]s`F0VI'&pu`7tMQkܦk/Z'3{|l/;Nv}kA\WF@Yqh#u)9w1=;,tS@7s@ hp8p~ |'vxwS-( tbV0&4 $2AovQ|L sMnٕƭЬ h@4F6tfz|쳟A!r 3'ЀYJ 0٨4%:[Hm` $.3X3l'Bm 7fc4n^jްbÔGmД N8:(/!Tg7]ivK07ա/#QS.e!MtQ ݌3 Aa驻oX+(>γХoiok3?؈ o{)Tx%+ud(Բbҹl/l9_8 h+L9)'jRa%ZR GmoeY3Wjgf}]0Sb픅QƳTN -[#b}޵&o#ա/kio<" +]ZԇShM$=t +/'KRVϬ]o=D})wD=n&N*E^,%v8Q9#ȗWf' m()FNgPTZ8[RMJ]r՗_bZ| W+k-l=GTED` 5 VVV/r2H@ h97!)>^~ J NHruvrpw wbw;WSatEvR>m EEo݋Et <'%)8f}2=6)MʌW-ƗES+&kWb6 Ld8G h(EhкF8;4 h.yDBM=<{ S9hN@ZqCDwGԼ$htR\}f>WAF` [m:6ng6VBߚZA'14_N3YeũoV+RDʡp{\9*hUI=}&&_|ep[Ѧӭ&[ 7l 7)Bs(#`Sі(m["DXna%t i)lcHmf;cy|WŞX ,v&XJX7q쏵p`bJ4yƶF+M7nK4uj,҅g kPէgDMk2Z!6G&{&qh"u-kyp=jMb::6xi/Tũ-Lp/VPUTհ98Nn,-U"jPZY d␎(i*ś[B/m+% Kȩ[VElA#a8oUy!e3uP?Najf>\u9 UEXWth3PIm@Bes,?7yB`WQ:8wC\;GE# 7$-!!!!!!!!!!!!!F%35M,V3kln܂af(%83)fD$e0<&YZ5J=BqE>d 4xŬ/Ѐ z ,%lBg) u%꺋4t:a-jkn-7 3HV *8*HM% Ez (!m˳puHy@J$})6NTP!{tR: (n^3 ЪK^_!}i3`qh78'(I@KHHHHHHHHHHHHH9<'=k\@gJbSBYd8 53k@e8g hR~c4'̫w h9SnD]gh"&2H@v 3AyQ'KUk>@jNwBd8;Q:CJ JR~H3cXvB EPUVQC= hr( ?S2R`Ow] 6Fl2a)h#cS81PC*Mƛ#L-og3jg݉&.ܛxgl7۠o 056]illkdpRZC^VS!]_&S-R%| >>Z h(Bܝ~oD{7B/-z,R=`g^l $>(#]DrPhD? иVa62[idF.-W̘z h (>BA3֙`>Db!U N@>$boZx 3G^uA+-©xHt`I@F *8.zg6I4aSp$FSρw-RGPl+ lR@DFqDLEI_@s}WZ 5m6dKMB7mdlbl 6Cƛ![ɖP&"7l0m#nxj_Xft7^F t2`b9[#f/}E᏿J#~6i PⰊeD<%p`)2qw5݈x30F@rK~ew+'4?gh'HP'׈<% x; c"yNY4 l,֘Z,ך62LW~6^Qy, Vh>"D( fN@37<\NH)Hhq*QxK$Ȅ%1H h>SpЅ-<~^8˄2z=4TH^UPRr:!Mh@44"oU6M he%c_~m"e؛m a#hGxG,m%nDq;Mwś6n#tGPm! 6s2ݣxz C[m%FKmVY6Zmdb F q []#8K l` CA]Vq:,e CeғhtPx h24,Ρ.vzZX3% h ?*=s2U&V̘}66] h&f`"fkͬ&Lޙ"fD er7BBG8A) ̠\@spǷLԖ h^,S44L^{ !)& % vsdv;S"@eVO()8pIwB*id#t^hha[i8dH!QVDd6[y|9sL~mSfeԭ7[oR@[H)1o39ւZިmQzMz?j[|aMU6ZK4j,350\1|j}zh` v1\2 t@4]\ $2̔NCX:d:Hrm;_Y@D<ȫg78FP@G&SI@+*MKLD?ωiK^QTi=MW[3e42]ced`bb*C$8[3y h}lhGb>5l6l7eS&s6rJ34F_|i~&<}?\/B/uwϿ4 }aߍ1WUPTǿhԚP`.&:pJx2}&6p!7 Z7R(]_t0)""\M"Ml$'q~?#j޻ge=vuag(p{ hEt %4y9n]8Mp1[HC{!P JrdB(Q( ͅr/ud"?%!GU,Etd*YyPMⱐf_FCa=݃)!W%:y4P.d[f@Zf+P6gsM>W1\_6jWs믌mlOc@-"os >k|d&_(d|j: uh,]ggu}8,Ku .5#WRτ4KFFu?/.̐JA(a-@!WQA!>4\xEyrE y>Q[XTIfҹjbDa!|euږ=t`Xw|4 hO΀w,'H;簍[]gѐğsD(355]FˌlͭWZ6c&bjЦ搸BUƶ-[XāMl l7H49h3'E#e ABßI^X]oBMm 텪Uq*QaB yGKEt~? *lh5hA2]ed| q$LB)ZK8!L fs y*eAC@A0r>m׆o7Ͽ2+/l_6RXP-4FEJ]cu#3lCB暗 ,BM h2YE`-]\D:م&??.#jG"(ce>(.ezC>Q6=Z@D4B8}f:3#pp ߼} EI@KHHHHHHHHHHHHH)S03\ghchrZs5fmSp2X4:uL7(Z ךla>dt/"[0Ɉ" _YH,EAU[cd:j虬gN:ġ@WQYk<6V6Z'٘-3s7/EFL&9h"|NrT-DIBUZCk"~ }!)dBqd4"LPL[L8zh%EV"M"e9h8t, Qw5#b^"s<Lҙyh6s[$uq 3$-!!!!!!!!!!!!!F%q(¬Y6Xk4fs*sKL76]I >7| 28Z(㝅0|AY hsu&2# hBc՘X@/)8Z]{Uk$ zgI@/1QsJ]Od5)VjQ=#_+~=ה4g h>?klf@C|H^XK2}ͫ@ !T4 h4 ñ^SfS'4? Aԝ~wDHo+C"&z:G9Fkv!Mzzns5%-!!!!!!!!!!!!!'ALEM_G23˕fkMW.76[anlh0ʹW@M!zs6 4 u h_56 hZ{'IM2#/#kFHEt~1z1N%t $t'@q:prk G hVU bq34@so0x͐idj; y&CvX`ra^?H8pe)?q栗"=‹ "&X ltx8tA ĩ XE DwGԼD y-:(<'0'3-M. (tfHZBBBBBBBBBBBBB⏍9ZQa: %*Z: t !ˌLmM-V h-֡ZoNy|岙:SV̬70+=,+Ѵh"pb/EB+fдHsPC$=C h4aBMqI@/F(Iˀӄ:t:D{I'9_N+85%Q28[ٜi\NE| ᧟RQUײRמ@hr#[#Ff+86X}mklʜ#[[o``9oZXkdl14 $ 6_OP:jhM4/A[m0B%v@HӤ8/q:tlum4P@kA.R^=_U X@i/(9_S>1}O<316]IJIC5Zڋuj,ZͶ1PV6OI*46(,ddlEg+=zhz&zp,," Xf9ǚzih3] ! MA6YX" d&} y 'd@K BtV-6&`2Lb_2#j ,yJj2H%SVRQR]"\sUVV_BrСG}BhwGο>DlF|)L6}L@+L.}#"zL@TVQ4W׶֛kDpr#e$ M,Gmt%+{#Fmjz磉6XkbtS@m&+) [,d!'qxФ}&mfT&UH4A_ h]z6:6ZL@rOhT$]DOy,JV䅕U4hj/ZPU}:N TlZ_x^@S)ʂ!hXCwXh qJ!7Mxhi6eH@lB]GZ .K_@$,vblvzɈy ; M@D I H LH]#1dSB پ[IETyؽj*N =1:}G,j"z >m=OSg"=CC60^f`t*czz毇%'MVZ|˅X<8z7f?'-֛Y7 h67#?dd[u32~ýo>!B\UU橪χ'ِ_H@Sʻ4%L/d#)"o_qMH@V6j:3pkeHN5`('D`+O3iheg姫.t =F  ;}" hAOq/$;07(K6>-ppؾGYEmڴӦ@=niSGM "_JHHHHH|8"DBO{2DuJHHHHA/j>σz,e5]Mmk l&m +ymhr Bs|٪мz?\@9LfbbbΣA3|f$xFe&k+0VQ\l_B,BI&A3(2o4yC)W 4͹1w h}thq#ށ)AAwn8g%|noUiSgL>] @ F߽D̟ET\BBBBBV$$,z/ OU4ih'odcljkh hx9Nad(^@Y-X0m5D69Kg!$Aq4'!-<8| A3AY-!Ѐ\@C5ɩ*M(4A<'c@@b`h~/FXDSK|#-,fL_>(X=gL|cez\Sؗ9*U6vAZ hBZ$,BhyDZX͠(:} H7~uQ> c萨c~=wxenF";Z/5 Eæ~6c,\:x'!Bԓ%$$$$$~!ӦO/稪ihͧ)8=å>sx2cށ<|BG> ~]/[s+N>m4ũӦ̀ە&!!!!!dHIHYd _< ͘1sjVײ_,FˌLV7ZN#MWЀX44fk3,DS6XX^GSp)8,ukϼP T yY3J/X- _h t$м&fRIB< h&"Ͽg 2@+Q3l49vMF+Y9!?H!3p>tB- SdVT2><`o"ypJpNp9ea) Bw{M0u)AӦ͠а(Yi ?B'!'Bԓ? q6q 3M0CA~# Oimei5OKgR#f+LW/74aqڕi ; -tA݃(LKe),'B Mڄ `/!\gjb-! h$MWz~1Dm 42m=-%z395@ %Eʌ"6<ģ*cj0#_yD/[빦<_1jy\4Ǘs2+ї9&_װ(ݳ٫8JoA y BXEB).LX.p8]xg@P=ihgq yA=~wDDEq/3|e$%3zT "E#=]=8{9Ck)|c"9Bm30uSMU:Ca,I@KHHHH$4z"D=tԱLG8)fNS 2 _]YIXCBKZCR] u.71_ijd #[=}=#|-!ab B#fk-"`y0=0A錘Z3֛Y7e3>ӤBޙA Bo,!,ϤxȋpDʼnw#}!9jU-Ptj9[b*e`r? gUBV?b|`2_ϖgL+_6k }kg@T h/Y^MY`)A&]""juQՒ_/ J/!;}<4ƙ72_@Y}{41^qmwM;gX'X8EۻD9G0&zC.;k6~5[]qʴS) ?8 o K'c! hs0  {~Ɣ}nx>\II[]RKo-]m64\@04^gƜlʎFf+i"fS h䗭~ Pg./gf᠉8p6 7DW@ssnкƶz\@hn=7/D(D|,"G99( h 9JW(ųp\Xc$s 3- @~g1ɠ ^ y2 π{_@/_pogG+$c kP@m3>W2Ua 8P@i=(FVBBϏ!$~ s- V ,$$8?u8?T(!! BqMꙢ0Ya<M0[7_Kweq44Nt3?z9 tt-$ LWBuAŸEQQ5ch_vuh y!]N=K[l/LU0Mv hٍM~trDk?wGv?W|e/qA튄;!,)?0nJ12ڱzj(X5/"{&=}v;"~O#?af\6Ɨ|jk "#:gSRT%¥LHGX<8D,K "9.Ȩ#CG )*`AY{Ƈ,EnLb"2@?Yl/h )6/^Bd~s?p´#<2̃enC ff(n1'Tȏ:؇·Y:4C"6s#IH`]2\OȨ+Ha:8>%М(7xæ3[Ujy @~cB{!/~VJT`3 a [Ѷ80bʊ]7}:uӦ}6vL !_hsr F}Qm> X%JW,Q$CV3󿗏(ottNa B83Z<1\xX1GEawINIWg?l[l+U|K*Ѷ#d_ c_e# }pmW19DgLKw9BmY](!>V7Ҵ&Q3>Uuuk.ԙ@e=O[oCF6 hAC8-&p bb̿fRqТY8Vdq40J4BdjDXxEU"_yDwA, h|,.&MN>BnfJQ3l G7nu}+] I#y^TBQriydt`v{ NnюnQdwCh}n;ii͜IF(DuC<#},$`xn>_$G%Wc㸛\:2 (V-.aȥ*OXO[:TwT@/6UKf4,G kQ}`⌱@|?6)0]q| n_bn `f)g*% 4Q{>yGApL}[al,XMo/`)?Ed~_bSmE]3!K/ٵ~nÀ į(ih 6uVk04dP'{3Q0@'X%#@p' #ƾs@kw\(y,pD/hp\"T7qad>d^@P3G h!:{hh"B-r!^ydAxh٨gGgΤigL@uغcν+21K|{cCiʟ;ooxO|Fac>*܏1`췁8"(VEX l%ǹ.+- V{i'qeYD0  w<P)~~)PvK;,?2]K4lʹ }fPhQyk"CqLc\yNᲳ4 O(Ȇ'GP%d\֐η"J=pb\~ȁ'cj'lW,؝ce{?l/ E#&@t~wӧ+3vz4pxLv iOAg5 \»xе/!GCQ? $>߂>*W'^zP _BF@pX3}Up1'k# EhGYp,c>'[Su;'eÀQƃXDxDxD8 xiNgǩS4Ǖc_?N뮸=ebgHj ȯѵqW4" }Tm6>=w@iG;<͉֎=g܏(YO+4_ 73vw q:tK=euox1Ͽ=[I[YXMBKw>/"4uPC3. h.+)BB#̆l%@3AX hWϲE!b-BMC@CaDM'8r]چУ?w#x&mHʾ_ &~#}P@X 4Nl|cye9dds95Ȥ!  4/' gI=_@Ӣ|1t {/Q5chDg8;({(h]"#9qS?&v޹/dސmw ر{݆m&>3fN8g@ L@yح:ywke[\C_ NN%Ȋ3c:"cN)E~MGPf󌆕BNae.M8>z [;)t@?`FCGh ֏=G[@F>h|9OY vXq_׊"W, "@qr@Ĝ,E^ )naJ_~5B ;\ 2o > d ~C6M衠mWgB,cjl% h¬ic3wF"uZeP@v02j/F@5U0 2>ye  pNWx܈,;,W-reW.t{]X'1/(X LJ%B\m? l}KHq]~3xP29݆Mp.ь OZ.Y)CXVW4{=&d99Qr"P\~G6\x7O _A$j-w \q9_\=EdnLeOߐwphKl4xȹ#/P28Uy3<9 Θ)S N'wt{:}iaaE/GZSg|-6,9h=å4Dl%i4DL͸"md:yW̲E!?'I=3-_@mln5MV1Vn>V@kr/[ZhDe?#}X@ZK@}V4IgG,l5+5k* `M9,9 hfjaB wсP. L@u h3Wo{1Ok4fl>!{d@|]};k_𖝾v ڱ_^MC+M)hB) E 3{"X"AZ3cD (>wr >,LPp,DLLFɳ'ҩS)+ y\# )%}`= ,>ry۱)S&¸q?cc;61ec n[6c(e=rςPb &OPgo *È´)SS&O2WYKE@S\MahuyA槁fo)8,57Znfy@N>d3\f`1M#0^'a"i-`f x4?B m m`RVd`m^Ilh65\c\HB}@[FZu J7!U 7'_yD/:hcÜ2`PIr. h"pe זIg|\9法 84IqJr=[+%pijm|txMzK_A / C;z%Jj  s%*/QV_:Wm\5m.#g^@YhWs$c4Y  ر7`m|ݮKYj|=Gu֧OMCXS§Ϛ1C~=>:s:0m YAyr`OY:+"g&d6`BV(Q3 {1}:1 BHQ3̜b8}g|:u y;~G1f@۠1GPd̙NhlOCp x4 DhZ~6A1ֱ &Q`m 5o8]=E|I!{tS ,hčN?Xz~Vfk/LɓL4yLĢ 'LN_3~OIڢG\LNMv`YS&} [r&NL0&NS00}DLA!'1b?&As?mD N1eI&O2yg"EX)?U7`Msɳ&MLBж'Ϛ md/ˀhx@ϰ ,8i tpL~G C̰E=s~1}>椉WX&ѹ\5ʃ8p!a:$(=!?sD&.d1)S&L0a"1Q <􉂦r?bc L AI>0O&Nd &M 'N2 'A 'O4e,O\;aʄ30aD)!x@G E Ja? /O }202$ a(^&/dP`L_( LX=( @Kv|al~BO>|21A `K((hhO 3ܾ'2u*L0i'( gDLP>:v?uD ,'&Lɴ Pܣ\1 N_LE  }hD(e!#BwA?P+0' US!2A68I w#ƞ7 &LU?sT NSYB8&"|nl,"p?³(N% 2-{h!wvd %3] C!|b]/ɝ=G  dIfWg0|‡+<&tfWp`R:^xr`]v 㑧ޔԲ:lj|ADY*!Pn-\x='ˆ#3= q~w_ǂ8 k$_X/)7> P~`%,a?!Y[d,2~#4~2B}8ͱze~| k-zU#e caGm wZ?JQ噳fmW_=Wi< mk5M+U kMiZiYa84 2mچ6FMl Vz&L.74C'zx*F@l2 hRd&J/' "l cfXm&И3o58gyP@h-%ɵdDMdgxrp"G6,|1?_ 9"Xfy-\ŋc~2 4=F@ulҡкuA% _| eŸHY})Kq^6WZ_G hϘN$4AzN6m{|~|vnXpEZ9.ZnDx%K7,fђe@Dڥ˾Y-l?o1}ٷlZ#-˖}B Y݊AW-[ە߭XʕJA%,_ خrHa@|W~Ū+! `vZȵjipYj;CP k ،ŘP3VnWa*lv!eZdu?]c/g(6,D\d&oٴ~Ölf7n?on l?8C~w;7k]lش}m77m޾q6lٱumؾk]{vﶷ`@pqvrqtpsܿqv9q~jn.wwލ6e=?zmط2ƱG߻C`Mg#`ݳ at߳cf=[vov]xn;ݛnm7f{G=߹wGM!{n6!k=vZ=wmؽZ]ܳsVϽې}۽a͐-zɃ){<^{Ob/gc7eUJ yxRXv/A6a)=;;wo፫y΀6ǰ{>o;>|"_8wj?yo }\ۅxxED'%!a<>aa!ÂBZ@bD8!BpS0a~`Q_O?fcB,l1"<   } ݑ)̹E * bBFꃄaa~?/<ԟR8 Pxh`x(`@ 0?0?p_P__`'X udsSSCB@A$CB!t rE v by8$Ac#!)wjsiv_~[}vnqa;qlvv%c.N;TjVpe Xi6 {9mt,cV/mn/'`T&؆ p.O];=wxoavw{`'+a;= 'wi>o>^NN^~>.n>~>n qrv=]<<]=\<ܜ\p#vv{ݳg]vܹc.жp;vΡ6gh pEg'pP;`;`{P'p'pW( {j@5-==B7hw/x_D$DhO7A`b`p2BFhjPXOpÿ#DXԑq :}4"} 1G#B:ke@zTq$=w"ǟO8p@"$<}0IN9CM;qpGǎ!Ǐ=q<䉌Ξ:yt3Yg33r2eddggAB΅ҖΖƞ枮Φ殎K]-]-mmuk+j*.W5U6֖6776\kmZ}:R֪#:*v,O@{ibGēKv'wVuVa:YudG)+m/;^vpg١R,.EJrxKA2 >PD/  1dl,>O *97XC \v~\^Y*%.2roVsq^w]Vqnkۭ%[KtW=׆Ջ_OϿ/+!o߾z۷#2^y3㷯湀oıBakHyR>UťPNhdx"м?y ^~zOonXe.vsiO/߾-9o^% ÑGp~zvH`68&OpFz_>|cQ{u/V ߭ŝgw*!v;ەπ[UOoAXf9V/nW?]fuOo?ހ܀ɵW]izx`P!Hi~pW/4c`ĀHA@#pNoݭڛ]5Κ]{UzZ[ѵKW_mdd e_ϹҐsȾҔy)rs& rK\ƅ͹W.^is99geg5`zsPkҖ}-rm.^jͽ~rš -.]o>rMY@cf_C朾ަކ}  2sP x!Lo㙞S=uNt9YwdOކ}'N7k9)dt|bZoݍ[n\iy:n]y΍ܹ|}7\uJͫ=׆:z[{Z[{[ᑲR\{(///77s999xz'O>zCR$=xHbqq)ѱcFEJ""#аP 18@ppbPp (?( C9||G>|c}!!|̥ mR.B)myiXmѶcG;vǻ Ntq0)H*`dvfŒ""\$: 2:ҁyg;Ӊ]\ʙcDN#T{>䝄+tw)OuAO-!)8[x):[|8/9+#$//"e9`+ҁʳ `2c*kr\P|ڥmw{ ?j˝wzo]kȻ\rko]Uwfmڜ n=y0|wg q^|/|xρ/~P/z7"g_>E!~ӛϞ\<Àt,OC\-b] ,.M^O_?}d<&^;/^S6˧|`lgNj-@S|rœ[/! S8~?ɕzx~靎Gכ]}|'W_z|ꇗ8 Uz8Pp~_TCJ`M@uV_UFo^{+UB3PlپtTrCN9&!.66 ;[WSS} B :&&lgՙ]z*NT: lJ:]yDGʼnǐU';NuU:S{uםnՔӜRQ2]~Zګ 4]tm敎[׺n\6vuJPo`o] }=u]m]uum  eu 5u%Eyy/;w|NNNfffzӧϜ8qG?v"5#ǧť&GF J<ƙ3̱1<^~2b<}cxzx>"{,Q>^^^an!{{P2\=nN.~b\℡S3@8c`.o?ා"v~}n췓Eyv2$}^|{?}y~{rursu ܾz F&ut鰙4t/] l!*& BYDKg=}epFDP)[mThXml"4+4e#l@4@3sYh; 3yFuV>rm\OH@DX-R3Bx _؇_ʪr fv"oy_g5GEMU +M9)@dž h]~xnt/@;mco ͪ1 }&xMyv/~yc#mwxhitХZZ /3]Z8V|x{i-> RZh͍w Pkcm(7&w^H'Kl?wv!5`Ť Im;`ܴIm_/&]Hip?H{nbq%t;q>|Бs'vO8q.='#'3`ܔCabZEhdr[nZ[ܣm lxbJ ='-'$vdhG;rvKx<ܗμcxݙ QQx@fg!HNGafWAf|̮hGѝw7q{#==FS}OO\<2 Csa-f0Γw?3f(?tOG%@SP1K\.E_)C. zřWVYu>NSѭ[Uz?orr]ѕW df_?9vcͺ.}|`[F?Aa|!}Ϟ|9?xg=y˧^05⨉?54gO o9S ? k* > }ç<`:nlI~v@xc/>r@\v>#/^ x0zΆ^x×Sœ/}0>@qH|K#~GW?{rǷ^ozpJ^||^@C`ՃJD"j\.?T,7Xz@{wA TV_m*XdfW3԰2jow*QvZkU栯_o+VtR@cPS>\;7P_u<_q|a)t͙@'{wW~04,)4<)84184)0@`pHp_po`O@ /?/ BDʈ0xD{DƌoO{{zx3BBy<\wPwFKs 77gWG?W'?ݜeL@#L@3ڟswc>;C\ a``>}{={fydo A;9~v t}|Q[Bfg;/;,WX_kaVGw. hbm:K-TB -̠5:ӷY같: A"NHB% hC8/y @X +-`xg60ŗ&} cLhјg kO,"_yD/:\G 蹂 mE"񌻛=k*JA\ͪA^Cw~0# _| A>mS8L{88 LUp| CH7Lggt#gΌC~zW8taw? a/ { ނ́̾ H-$2/@93g `4c,g,k˳.Wd1.W\8{2Je*"*P}*@MכnUsa{u7K^?o4޾TpFS;] 4=h}xك/ǑWFG_bxW/~W |8'#/ ?2#|`w_H[wFpgy~AOwF^gi2xgPj莟?@^&#/2?b u|~>#oFF^3[}2G^ y9 `ܗa9t0_|>=lǯ^ xϟ=z1~zgɭ7=^ۓ{ߪxղ'+_xt']-|Š*] T."r+5SWjTU*A>WuVo%(qs;5HOZfnuꪺYuF{m7ځmW. 5Cxzk鵦uk3+Tf8_ d@ }5j ?$⪌=+OvW^q,4M}^QYuPgMZgC5Qvןmms)s循5o4l=x;W:\s厱s֦Zƭ80ͻqٓ';zNq"9HRظȘaI!69108>~q~A1 @=ho(Oqr3xGpp s u uqG!ps[;{y".nξE>NͼvtAhfgKwCn2~}<Rhwvpup!!=P>{v4n ޽eV`"}b|fF&}H@֜1ZXW)caf_HSkB Eq4Z( Vn2)$i>3P7B<>2L/ hjf10s@kB=mVRA_ׇZs,UԬ^X)cT5pǕIW%I1trU hB낌3'~?=vA[vl)f׏p83h68~AYKq+ڴ j h{ ټ Jz=[w ]A]}B%.9B'p9.hhcg(0G'HhW=;+n,N1.Ip 瀻OsssK+T<|]\#p>Av84g'Hg(7Oݣ; gd{ô\"ܣByf DBqq=vzM1ξA}$Df!w$>A))AAiA!D葠vHHP8CB.1(pp(&(*-bzXđȣ@8u,>E| iVh$DlɸؓlV 'NI9z6%%=4pPNAaBg>q"ɬӧΜ}x/-o)oE/t\:[;[/]jTP\WPSU_UZ_YXWAԖeu*54e_*hHo)=TtDgى<ũ%i)-Emi%Gڋk+>Vr^vlkiXG΢΂Ԏ#E l-HjOl?ZBּy5F: ; BE ܨ8hXehE=/`gAR'L`GqZGѡւԶT$@۸-Ʒ : RqI~lIaZgΒE: yyɝ)i󢑋q6j+}~Žwި{rٍު{~ٍת\뵐z|" ճ8ukЈ8ƽJD [ @6= J!w{鮻Swvg pVGpvGpZk zk鍖כ7^m8T{n:{Q3TŦ8;>t97P{0X{BWgUeVN<[yz`uPm3@ÙY/73qSC5'=Y} 8;GCNO]VwmfWMf/iӽ YMUY rk\譽W]yHWibWA|FIjWc}U'OvWvWTAr[ [ ۋ:Jt_멸Wucۗ\is{7uP뵡+-@OSwcog}W[MW[m{ 綦֦V|HmSCU]}yUUIiiAqq^aA^~nޅssrgeNO:u2G9t*-Drᤃi%G&GIN H  K O M M)8eopSp' ax3xhAOh(HOpqs@, ``/ O /@/o?O?WB; ш[ ..ASN``Os@,NBws!w</{/GG'' :eqs!}|g+W}hɆy ,7Xg5 h~ZYB$)maW8\֒f|ϴȷῄtD@q[~q[܁!!Eوظk6v.MM{aN\18ǖ?Ǚ`11)bsO9 Bs6\"\ٴN ptk{{{Wg,s-M^*I=xڻ=9#q8F9®2{]6@-))]r3DC1.P[4䁜> ~^Iwx7(/8gf!%?$ 94҂B'B$8<|:Ϝw٬d!G!GC#E~UHx1 " u3P<2Dd4g6sL) 60x|I $>xLRrzRك)ɩgp&3iJ?|#L=g?_Ky$}>}:ԩәg+)*,o*.mni~RS[ScksCKKKu 5 U单E ys˳˳˲ʳ*s.UTs<2RK%ˎwW,=֊hķw%v*M7 foVKȍM;ЙAc,\Yct$u츘q@΋q]D;/uA=bq.M踘~*?]]p;F Ӻ Rtwu^@ И89 `WN](w@ '6 ;`O^rw XՕyPC2TSStxOɾl~=d02{J{J{KsFQv)ee30N/+f 8 )DW`d!}Sh05Cnq0kH.ٗ)CȕYb$kA+Ҝ˥Yt.ϺZy"^y", ~@e+k(eC?h*AUyO^~xK#Gop޼yŮer]oeE7P]pվ %wE^yz)go_GɫlyqՋ_~z#Z߬{zj߬yv7jߨAf3OC)XcsFW=*U?9: T=~0TQ}q@݃Zź{}uzk멽鮾Q깽VG9r7;ynhͿْ{pZӹYCuCCk\>s6rY>i4 g g՝9<@kO^;yh85tjP㙡g4|J/9_}` 'N 4o|9!L!u0lS9b L!g's=pts!mgI@bf:d4,z&BHbG:{lgR\0"Ǻ$˰ _ #6O4͡aچv@h!Tjut @q N76 w@"B>H@hj  A<ǂŽ Id9RQCPbJ#pp$HH)">"bNb0*Dt1'c c;p".$ӉgRgigSg:qhcYǏg8yD':Lp6=;+e奵8_uyqc]U;:KM͍M654747V7T4V5V5T\h,?X~G=7e5WdTe_nx mG;ˎv(>ԁH*J)I)?Uku$.N.MĮL[w*;U|pOC|:S;R:SKҺR;;c;  ;D]EPxw4t@TҐr1"/FvGuEƶ3ߙׁ~9+?0( v.HΏʋ̍ʍy6pC0 .JEw\ZUr)<֓tr Nhg|{^T{. -H]z S{.:Wr4)2J3U{fdf/-" s}%9zr~X,s--@_q@I@q}E8$3SL7C8XҹlPmq B A(WJKrL4d 3K9ٗ+.g]-Ϻ^}2ȹ^}2:QsM6zu 2feꜛ5ȭsj.jrԝ[/l*ynWͣG}:kﵖ޹KwZn^m/^rxUx<ix"aq47?맷G?t%IoP>/_z񓌷4_o}#7yvWOfWca!%rXOq+XsP=ߌvPOCfo_oo%9p;_# j3Wjf_ٓ lk`SC.מRw\f!}Pc`S`S@S̫T ֤ =y̕ƳWBd@Sz㙾􁦬tee 6_nLҘ1؜=|Bm;ӃXoʤݕG{'zkO Ԟ9_{2М5rJk嶢+׺ o{W\kwҽwݽyz=wܺuZB&jhdaۥ準ڦx,++*X{seȁғ'ҏ;}CN?xh#bbӢR"R#S¢C"G$ 01=,/ơЌQD ay,1Q8GKoOwwwWgGWo/p/poXA!^n!qt Eo`F{[7 W0g8:A"_Tu{ ٫ pf8b83Ms7P'pBpj6[ssKNm888#k(כ[167X0kXG h}UԭTTc39 ,`6GMg|Uy|5+A71`*y%7YϫM,Z6Xehʈc5c9fq( KD[BhAS|x&˸-U**?AKvGAy,q2WY>]e eVtg'EZ Jz5p̲?K@Et- nh3AJ5S2Ex֎Ettvp" gc^@vJ@@ӨgV@D >oqǏ|]!"2| B^@tRL={0lʡ2g8|$رsNO:y<}*ix>q6̌srrKJˊ'AiQn}MYG[c_W[wGkgKc{scG\@7^j)io,Xy\s\RRՊdUl-=ց(U]#zJzQ@qЩ)4pwSKvJu-?[<:Se: H*BUx0(8poɱޒ#=%i]ũ]SzzK@b!%uC莼T̉|Ȗ]]St&w%΍ʋΏ)8],*gaH4hw=%'{O-:Sٰf$;?#/=73M)HF=$x_щ}gKҌ>$,,,¾sȆMtI,, 2Kϱl݂qI`iq}(2μVFq泡h9#p\Alղk\)s$T\I@ߨ:Q}QrYk5754583]_$A{νՔRG}M{tVk+Rsݖ-ڋwn+Rta_ݓ'Wڟzt/o^<{y7ϟ|_o߼>Oϛ޾Ͱ<zOoOqyWex sXMk ~z9e/ۑO#st4Wy}f4G~ۓT@CKʔj軓۾1V@/{H{Mke1!y+a39LLYl$3kPCeů~"_=^U[iqu Wv]J.uSRT.ys>VO5= Eӄ٥lvťnu[ܪh}.+vTz nU[V&ɩlt`s]Tw;5=UMcSvyKZcSڠUum1[R:TaU®uupe;yCtLM4h:;*63*&!F#1QV: "Ӣ"R}F#}&V:!"< Q=†~L@_W`WqjHQ{-4JUа453˨gj"WŇ$ a ёWF~џ_}^_soo<`4ƓϠZ,l3SՅY/%e WhZ4c g,.T4)IRh'Ͽ fBǟϿ_sgb߲pwɟgF:4Wyǟ} hVCCިep بAp }Yy: ǻ'A?]$'~gI8<>'4sAWM?>~R@ ̞ȅ.;th3Pm )t~z9y$e4:hg9VM4̧o?*6?|>?|kpF8h.-띩iA4]u_u'4,]G/":4Y߅bx4ECT+qf8'kf/e0yPnN#E͌[_ c17sa* Mr7|7}Ni'Dڇ5TX,脢ؤRR\-\J>'Wa)5ə55i55L 5 Y h W=S`ڬu 9u'3_O-h )E *>3) [+ZP@WwtT׶ֵնյoojhllojN[KsG h ~tHȭ&Ũ:hҠSi5 rT1:ȇ5 UnK:]'mIZ  ӋE&Qh̢rAZDD@WEefIY\n$iEZc֛$&Ԙ%uViYd$UpIW˖h%@ ꠍB2XjA[`4@*2 VYVAZ ͼLC_/4cZ%V~4 M<4Pd(1Jr.R:ޟo=&;V(XŤbă;z +.0mhSRN=`, 'miМktޭG>>[gI;{ lj+LJ:24z Уj|D:"|``O7:;ڻZ[:Zj+++jKJj 9 P|ҴLD@3N-LL)HLOHg7HIH.焜\ߋrhFX߈ˎ͌ɈN:H@C?!*3&p}HSD]OKׯgq˟Q@_MĜ )1T:_ Mp!hYBCWl9"+gy>“']䐰$&.OUK“cЯ/sog~`45D4䠃bsC9h04$N,~:+爃)Ye9ZL γ?Ye3gw?pM9׾qtN,‘CRoxj  t\U]>õa7G)T@sN hZM?E:UASM4-EW²~9Dg\ .4rH)%ξASL5t&0Tp4V"p̫!Yпv@_fvY1}9$Dv}]܅n!$^1 w cr" "z`\rY|Jڸrvӎ3b"ߏCD=3SI)zzgtfa\H`4>51.m..m IG[MuGuM{Um[u]{ zt M-M-͝]=RP&GeaJ>d*LzQkZBSȇCabT+VgiV֡emzi^l6eFYQZgX$X,H*͢2#x|,,IsMVn[%Vi$1K̒Z#Mq5\X4 hc\=n-qz݈#a3]Yw.ꚔuN bBu1<ޙU^ٷvN;fe|::khx3Y-oN?8k,K9A`L\wfwf]+{+k.-ml]_Y\GH̝nwm#;{{(m=d:mE| :{[w^!Gq|\` wVv`è]d}7*UfކSĉ"@6 ؁/{ۤ5w_%z&}o-n.v6VmkEfeJ:+35:3:= LAXQYE::hV@祉1upY@< cl),8vmlΊyZyd: O@O pZ/tL`K}^kb}BQ^U'{ M߄׭ݭk4O]r MeK44nMWSy5ykjbrbjB^׺uNP?0t'V@k׭@8Tϩ9Uw9zp}&-5ߩk::@ѡhrZ]N7Λ2 Ix!vM<9vާ|qgg}?a *vâդ2z(PGƆ$2@*x|}=ݽm(vRW(J r s,3,#4?f 财.HHOHʏOʣm|bϬI̍N;rcST@Ǣ"ΌAG1#M3 V@%ftq,YM izޙUh%@E3 h ig*CaIÒ"“'%嘀@t"=zxRTDҵk|Я~ oa G@?7|56sU0`}1x,.V1$m< ;j"_¸Vǟ}g_EL4bYP4Nǒj4>+XFC=_FDԂ8Y4E\p#2,\n}х3-dO~KqO`[@B\MaC_I~vÈ> hBCM~!d4og:8k4^3??G|e? |ZtB3p4U\MO\ağ3&r4ARHe }V@ӥe&~K!eAnDh   Ь8\5!πUCRk|- W܁!)WS KA`x4ނ^ZTD@SXTJ3CbZeB*hh}!$?vrjP%-ɪ%+ R28@}!H@4RP4"%e-ltEe[ue{mMgM-V@飼lllg' ÒQxtH`k4 jLN Zik%ziAڬ4 MHY`ՙ%U&qYZeUT@X%qYTbC"_(J^eW[$u6IU\ G-"Z56QMXay&$˷ } -R2\_Ǩ" '.nntHՎ7 NqSgg!DF}~gf.g@X;p2s^I'fJ=>{%]r[CFSC]ӣH44NjgӤꙶ~U/Wksq-Ȓux(fszQ0o/ F? s&w[Sp{ugݥۇ۫wnmnmmlQn{ {`>hRwvnnmmm@F2;wwP4PY;]?8$@FvwWwVwwQs;F_fw јov൐v|}޿l4 hP.,Kεyi}V6\ŠWF)kӊuQBXRt;~m`8 ^rRYdv]社s:VM2QNMѣi:qRW5z'z*\Хju;].ץz=ۥnMτשeS;Fk#JXs;+Ꝋ:&cmB|i`.q ͸F}V y~ӂ2Of<*=Nvh'Mjݬz֪F4ЈT$EA>׍tMMc%M.+.-,E]:,fG@LtaJ18H@$1$:+Y>#7ccbb3cđh:36& FL@D@FFFgQ ׁ#:)a4蠯kfaD)C%@ AkY,6Bt"+CBCCmMthh>:>s|sOU4 +3A2;CR`BM4% 8+zYמx'G}A8Xfj).tɛ3?ͳ?3?y ݷO=cDQ}O *.?u8ux$x#g~0=_g; k7~? ~*  dAF4\~&@/л3OW n: hVF Èm>4Qɬ97>\Mz5pٓ=q/>}rO/CeϿ wB+> WISPC/"e$:/y[ u`ABVFrDpp,L|d.qңAA h\Z*fuVB#o7t-nūK5x9k)ӆDr(D_ K dTf34PϬ#ANP%%Iͬ}&dd]!X@SNM4My@s~Dh.(Z K֢V"[*Ꚏ ]֦掶P8"ȇT$N,YתcJŨR1_'tǴc+%:IAj6zI &$k 5&IIRiTZeaETl6̂|, UۆjIk QYVzJjlz&H%r_"aDXZ2!qHV46A]XJmV~4 y7\`g@k,iD@YQ[Epw>XhKRzj_i'7BvaC`5FТZТjOAy6> h;6X wW\k*[F;z.ltw8%ؒ8”BzBM;'^))S<+vKzcY %~ꠉf7- xxd>7 P=9== )>ώnL+*I3}z`w{5Z`/[y`VEh,Y0KLypn\`ѯw|)kݥ;sXvzk}*hO?{z}Mܭm`:]'+*2';{:܁v ݽu`oo}oczms9#O .y5} ڍ'ýmꠁn>wo{[Ƣm{ɲ1JzmzgAvVTT@hJ[ő/:Fy6h]}f4[=g1YŒQ0c B;m`1Niͧn:N ڎI9m4vM;q= M[:jIu_8mwL}fѭw+ѣl`NtҴN;ڮ ][ GOu].ݡhsnp*hcʎ 8`W^T4eNӴu^}O?3,Yh%syf_¤iqҲ8i]s>˔g{ eLune;zIc6IǘF9K%"? vuomuU X\ZWRR[PR_T_y3Fni͒R*2J4 ߠ<@@c)tR^,2's'`3$/%slV\\>]:&g*Sh `:ht@Cc }uI}*z{g̹ M\?)ZRHHPDEtdd+}ګoNDp`t}.T@G:XAh&Lg&5(T'yȒ4'_}7~,lRǛOQ3̳oIV|,94mq~5ăsWX$0I9$j6U~//>tT@#| A W4\vz_@r!o8%Ez9?:8hvpR (4AS y ~~G߾Eݏ/E}"rK|z3§B8&?U?@˭f4# M4_7R.&R͚ WqAB.s4kthG*f., B : SP:fSWSaM֤9dx*A˱_`µC/\M8"C#n;DFQ\v?M+Sjޙ_3H0& YK `$rsA8"fBK@@7Є梒b4S8:;k:;)m M-X݉ dpX$ F-Vn7 RVTcjV9Su*N!1Z/i3J[ƥMFIQڠj2Z,&Yz\RiUۥ6qU\dۤeViEoXնZ0.:5(>W:$vQUPjDlUؤ5vi]dۄU6Q9Z`^S,/9h,!m*Nùv!`K3MКy& 4уXz&@k@bQH4*( Kl8jh*Vq%<;5:;tV;Ŕ?SM:hB4o1-q#c X@9[R5OE ]v7:hĥDm~wBTtǚcESYPTU*Hu6\eUgfG3ONfM4/enUc3ƅIҔyq[~Sv m ,4 |QyLBnl|nL1P96ȁ("8>gESs\@GG::.<FA}L ~V@C~΃`Oo{a LsV@s@(.A?;^aD}3;Џk/W;}G_7~-·߼OοEπK~0ӤhD8igٟBA2O$F MWみ'dyaW².f\y-"p(!k%C"n7Ixt.5P קZzq@u47N., .BewX|*W/2?s9 K~943/\I΂[_ g-}NWTlATlatV@C4S1, ~/MYH3tM4uđUA3!3.+ ̮˺Qd2ξQwf=@ꠡΩp31'f^#G.h/h+l-jh&怀nJZ[***+++۫j:jj;k1 MMH3'$b1a^o6A5ZB}Vc^9Pui%zIQ:.i6qm5 Pi+%D@W$eVQEPhEqUZfUهkmP]VgYViURoYa] TÕT =$d]iB \*,61˵ r)jJjjNF^ v%` frho^_Zvn-Y i.E2IΨ`|V6XA]bůvI3cFVK.k ghiq=$IxsOvW @m_ fjO>:Ff.TsOJa>cO[ }O@}ڠg:ڡ_=hS}ڀS.[AGݿAW 3/>|%<%&˟ik$[@aU  rOo|7|Lw?x_ S>|z! ҜU ٘ϏE~A2/_E-c&2A$ :W_ICӾ ϸ@v/T_+> ,ȺddFrh)4tۈ54|F@"$w..mRmU@e5RSYWYOtCCWcCWSCgS#W }~~?r^ש z^TЪZN5{-vU/5 iAVceÍPIRnVڤVq9p l|,*JKm L چ fHm"kH,jU6qE\m&S85VaETipBUX`r,8Vb&rHq]\iU:`DT\aeې?+D+)DC,( <;/Mm"`_jB.$ %2.s]&)m&4% vqO\aᲇam܆&(s`C`Hu|u(MNhh4qT@g,QTYAL*=IuSt]A0gc3#9ҙۧNv(#4m#M`uIؒ9 7(eAǛue^\0q)B6I`.ۆn9K>9ƒogɳ=X4/8vVv6.wVv77?Ǣmdvݎ4mŒ)d3Q(CI23xT|9a+#lis(ḀivFkMJpQ%Ƽe{a|cF:¬)]`Z2\UNW'~9}f4'Xn"Gc5҄Xtr A}:h[Y@y2ncF۔gvç&Icux5>MWUSNZ~mO׷z^uӤeZ׵{5-fuB(&TnMG߅n6|Fw\YUMrhXh hyC^gG˜*֥lNu]^1igl9t581:[qA׸_y3^ì87xǧ=F`m:.iUlM8,ZAm+ Z9Y{pX1*J%" ݽݝ=]-[h[}msuuciECqY]aIu)&̼Yq4=H.M$>I)I'"83KL1)cbb ؉/ϏC`5tQF )ΌbQUEǤD'F%D%zHL4 !fu=%"25,"5tp@!DV7$1j|HHBHxRHQ1Z`}Fw8bJ/Q=6441<,1?cGRxx½4/aaaQIi~֛{O^|_꽟=֏&+"  h*/` R~/F/(q=t CĂ=GczGxS} _#T+c'h2I@$̅hu&];_}Ug_d ׏p3/AC:C9]@'W;4ñ}=\30}]e ?|=x"_ * GSc)Фo<]>t&ɀ> >=嘀O߽7o_AGTC32w?xG6Dh~LV5D ͉D:Aq&/u  f렯#Aw=t 8hРPMi]3=J/=z&.h:" *Z8JX̞Ƶat:th^*<µo.}x /\܋~8h.Eq %@l<#('tJFuj:S|/زe hpiNFv}zv92H@áڌ)x#&tASNQC^u[K[J4Y:h*j:jAs:;Vt=]}<>_ D"ȰN31:\ѪFRpF֮mqQR7.1I ZPpi2QLb7ĕAW9NqCTNre06xλaݴsm`]PaAR\ y6^g88. 86ANxh.|jq"w&d&)wk \Ձ$E*xJ,^\_D2%-.qK:$̲N uН4v :nRL`Q}&}7'Dv J{=>:>3 h}# p4#=)} h9E@iBc79u%~p X6qu Er>t9dYr  ޵yƜmm|kܾ3{qwnͻ[dML*Rzn70#I"b&-3}{C}#m6"ٙB}.BZgD`4YtZ][_v-6M3I4:terluJ6XRZ|h\#DcXv)X͔<ʟ.0g[yȼud24?.5YF@Cgpv\@4#ҟ-$yp,M '|4> hům4tMk}V~1a5zյ^e_Z)wT:Fq=C֮u*r֥hpZxn`i+.wJ'cKO.M|Ҥyq<g}Yg{0|CbXfܨ jT%HdbH}}=`w[kWsS`ʆⲚ’"+sʳn:- AIʟ/Oʣke⸀`s!gd7?.><8As4kYبH,q}!9:2=*2zЉq)a)at9jBʟ1ڂ_5&jH 3B:5F=s4s8&iDg0Aq4!122)..+~K(7R?}ӯR͵A:(szG ȣ/`fzy݀5;\ 0p"jR(/ {$PIS_L+A8Mb< 7 u^EBr `N^@XOt= z|f9a .g>Q-~ȃv`N+y80EA[_!?|{>H#%͔ES%Jfe2&>4ҟ*OK_DQ\fi\o6ǍqƨUicjF9֎C:i^f6uZ# 5 7Z-Cf*Al$vI9A80*ȷlrPc6\ow48G-c>dxh& 79F-]`&ĵ110Coxd2( -"+؎eŕXVq56am8Ys;/ h VF8g,F7-(l0K_@*n%Xhn-pBR:]j MS\68%NISL;.IϢ*/K+Aӥ>P! 69%Jg`7޹e iG8s=KPJ{'dMQCӨ ʹ/HH4\NrwYw6}CME3 8}-NǛ𙿤\ .Yv>lZ0;Uvūm9vL/kS^yceoseo{;S{;{;wwf@v0` kd90fьq>.G@pē0l\ oy$d cv @oݝZ\o֦TS)Ы1ݘ}_  GWuˣQ=@@/9>#mɀ̲9p(ge̙ShQCY0m̘3&4@8 }I]Э~m;@H~ao2O{L=6lL['5:֧)zqBфEʺ{V:ǚ\ 2 7Ҵ9U]Nۭhϩ)jXm>TfpU֥v*j'nMWw >S?k,8%KKW,5K )30?e'I89йZC7aʤ4c}RH( P=X_\^WXRK˟s +s+og(@s3д 踔R$Xh3K@@9q7@ T@G̘h 5IΈ 4H:=::=:*-*2 Ȁ&$G ))!a)T@SL;׮A htxhbc\` ,s&Eaa1:9"0,Ćl9:1..ʕ?˫}+hҾO~Գ{8+ݳha54w4CS}҅VFsW3Q1Y>Ozc% -po"'3T@gvY):j S~z]ЁO?`@}f4'q}7ȿH@Ko}կ}ֻG/)LA >^2I hf4,Aݟ'& hZoXM90b.$p4jW_I#߅ee|](\M5t,aL:MQ:r%,µfz0F.+N(-]hڅ+ ^FH3S|%,ˉ__uqB٨idh8>3<W[9Z6Ih!:4NN@33jP~0bjNYOIY]M 8:J&qЬf y \"yD@S]XD@7ZRme(˫P@Ww$h⠩hhhD' P"KrRh&l1 :N3S V1j:i^j6FYQZGtivUA|:v6 [YtoP@ydԣP>Ls*89fG@onm/nLl-X7ftkSIr Xe^/ '4j % A3B(P@Y% f( cz q̸337zf2񦍼00m2mI1z0kLS)swEu_SU5IU_U46YopB7c^y_WMGt}nMSaW4u.e}1T-'NyKY L'n]πګmNt3U.>_'KS֥ie~ heصn2â4(u zLVJG"X  |,iolinolhohil(+/,-(+-ɯ[}<34FY:M*N*N(NN;ЌthZ h}a:6)?.xwFrH htЬ}f4AgB:`㢲c2c3bӉzH茨ȴȨH4ѩXL~=9,<%$<5hA P>c4W&] Cpȵ.T.thH<^0$: Ԑ>W?}Ͻ@3ٟԳ?\Lа{h&$3?tGP(?G5s6~V@" cTqS5FX ʵ}~ po}E܏wCuO&s9 l}߅ߋt>!1' o$oA%w|ooś~ֻ_o=K JG_~ j"+ JsM4룹 T@R?} -SM94TD_K:$*:WS>4дpX:Mc "bK#JXūIT@"h&rH6K1&|{% Q__f<`>0= 㡑Mttl!g{ h % h^KIɨKI'@'_d i\$(q7Rn44 rh꠳hh.l:Dp0h\\B4AUUWWB )H#nkhEC F>*jh^g1Z¡݈X7ԧe iQLt͸A]Tc b.,"cD!p a/η`3A[ll;&`xX3rL771DY#O瀀-X,&mmEv1z%_v*oMhצsykeں>9.lonYZ9^]\]Y>ܸy`ggcukc`nFYOB|= @'K2l]I{ -,]Z_^]^vn̙f+ӺYڌ~eRu?v23@4c+*}VO@Cԙ ɼE?Kn`Z?c5fhIt@@g,|f ySƾiC;m6vO;'T@^m[n]393=3e`krsr{uԍeWzJ4j)գiwi'n+[&ѣh*[.ݫi#vL:fΩJ;pT8*JU9u&k}^xyp&…=Ëޱer٧-Oiߴ8e]m h#m(':Uc7FI0j:rT66$ $B@_/otv455ƊҺ’y7snT}*I.K*M*ƵqA8>)?\@g$>>?!Z}ft9q 7o@tV Yu4@D@E ccc22"##"#9:<1zRXxJh8?}G$+ ̤^P̬Gf=4^H4g׉Etrddr\\뱟~˯~/>֏g~?ʹfZ~VC?KЏҙ^_>+ щ&Ao>;{/T}* z7~XCA$ç>,$O h9nS !M˟AW ./x_#_R|nY4B4WCS~7\q D2:hVC9\&rКhVCu>KAӄhRHƥ%}{9K uдĘk{t@RhtRC#"Dw=028*$"042дW}_7%[_.Kq]Mx-K1^NqxHW һC)߅q:*&@|QLbI\rW@M+Yht>AsȨa R qP jhIB1S9 윆z ;u( sr "0H@7VRMteM' ⨮묭o A4wvvy"ZW*#Q@>0Ӹd0 &NTƆUazLúa]/k4H 6 ںq4uVYyk6j̒J.r  HvZZeVؤUVj:d h&kZf!itJlZ*, 1c0˳2g˂r [d?Lư J2\~ b4[lf^?2iȲd[2[r/ؗ9ޟm݄qsуyf~w itVOe[yE6^Wb"hց ;NQSTm8Dua=NQ]Pef.DFW`4 *YM4W9UNa !A š!".j&`6KuNh%8 hAK=$!d#MGin3+)e:P|oM6(T=+P=V}FY [&--u}deBWksi]aţYWg;wvooܞݸuxrv{{s?Cunۿh{4 ©hg7x'#8`do,E!{[k;뛫K+s{k۷EڂmcڌquJu ` wNzLS^ͣw+0ïl+F٣hP(UN(]f %op&Xe2Va H}>\j-+,0uk[gŅih!w-xGebٯ^-M}Yn7 Ȝ4L{~\z]a˦[ԶqY2jz՘F>HERhƊڢ⚼ʛy7r*oTd$YL3QϔqA9%?:9H:A!AϱD:s!97stfLtV\Lv|tjlTZ,&>gؘl>HHHuC-’BP@c1MG@j dnNx hz&9 ~= Bd@_@GD$ŧFE%_/K/ %g~Ff37g$~p@=SXM4Mx9# 臞8 ƺGϽHgED 1qwv Vvk,ZQ@7|ǂ~SG'!p?5`tY&՝8TF 迗_@sʟ)X@ѥ~p7|xGY#᳋}z.>|~ʇ |k,>C' p0tE/[ӠV 5КZDoi@epp8;~0k<?\.퇷݇3{W9]:\vnLnsxM:sivn;7iyrxx.lpops<\wU;]Êû݉;]wOT-k;X,Z-,{ 9֌akV5ޚTl;]|;Fؖ_ۜR"iUfï\}C>ɺOleۓSR`/I h5x5⓮x$wuh+6 _Oק7g3c5/5_uWl}w۶[.[m[Eﮝw1p޳lZt/Y{my[۲㖽cں4޸m-s0[OJ&3c[sE-]᪅  owս_>ؘ?Xۘ[Z^ݼ3v˿[],z.x,yo-xf'&f)Mvb |lltxX6$HB /uv65v6wVִWU547646Psnְ̫d9@ͪjԜ&CFvUfVUffU!3w2*3+ҳ+nT]]UYQQYJ,@2KbBIfziVzVRZRZ\RZZR$$$''%%$&%LIN y 9qy@Ll.@C{k lx $GHtI D3@MNfRBVb̈́qځ-𢐄̬̜o yx?_}_|ggϿ/ [O>O@g3 ~t^}2uӯ% 9tKgΠu((a^A?zGϾx(YHGν|W )x ~2OOo}|9X=2<6QycgϽvyL4 ~S~.=18a _?}旅=%o OF~g=f{=U5gx8$ O'G2Йo>[=s Ǟzs/(Ot;Nt;Nt;Nt;Nt;Nx;<}IENDB`onedrive-2.5.10/docs/images/initial_firewall_config.png000066400000000000000000001323251513710110600231610ustar00rootroot00000000000000PNG  IHDRsBIT|dtEXtSoftwaregnome-screenshot>&tEXtCreation TimeTue 27 Aug 2024 17:52:27 IDATx]yMU~ֽiBD) 7Iy<[o9"H4IT mhq>^W:w}]Ϛȋ|EJ 3BL>-];_`8UB4UNio!uqU5"ڸ'{l 0?qTyR\'T$ o6ᄿT`AxA%fhw!^sW(d%w8F)PИ5ndʇA2x-FAEf2,RX*"H9x2(BQ6Pʑ4j%D̫C>J y 3Bxթ`xrRCZ]]/JY!2!uRq(R0PweXy pMgaq[,?n0dAegʒ*a $$[K-CZ!ZtMRs`G yuߺQi zE*ٗ*,)K{@0;fXB{ǠBzeFvoF%!#䏋JH@aսJkI4Vg=8FZ2qjͿ̎Kcq#&r+ATyX零(%iN ~ 'X²A"'4h(U.sQ:0(Ry9#;(3@-ka`+FE%rK(͠޹u F2,OCĘ}B+)ʐ.biTNId\\f(Ǐ]-DBR(,(nT@=֩r(22u*c(WƱ:q~e_9K\'$L#Y+ɕcD@DՇmZ6ޑ 7R8H3E •U^ay GCoclCѦnD=5BPH!%!VEy?f%Lod+WsUG&`W1)adq6a&MBoA ն Q.J}) *{q`'<'̲V~fZdVA)I}2 k@nDK,6 )KEp6](AlRQܻ\TXFҚY\M\E9fQ)ٜxRERzR9)`8@u["p$P01rŕTTᆓ1pnӈ/b߫wI'iҙ71@D>3B6P:p܈#[t䢈z>L{'Wa#<*T)Bْp[- ۘ AIZ4 "1lُP< -M |Vm+L46 Yi[PɅlfjteMG±.R w.BsM7мSX9•Baӫʒ(PqսvK32F2 Vbf > !)*u iᡶ$EEăpNn8:dY (,"*2xTΑH1k ~}*jP94,+ړh8Q5ںϦy9F" br\5咬 U~aP?2G3W bjD!t4l@R%YW1hWȆ4KalĥL mXkF+⹌H4 b'huCR`;JvܾUek7ɨ+RZSsɤBg[d2HOWb҄1`ޛX|)@6j]cQ'a;Fn;aqJ%Dž' 9قe=<<9^yc]pIðc  I c X\7rN*VGQA?TWsA(.)En٠p G)!A jY}!&#J*eBYJr I]i6{ݶ)gUL`$+'l-!`*䍎cyA"CА$3fɯ,aSNxa1eRrX SNw1 \PGxHaXuUY!ܳ @rpO UH8ꝜT'CJ2ūTgA:,ўjj(I.K% r\ĶLu!6gW[O {\lSFؙ&U a*Ўs,qj8A\Yvcwt-Lvydw+3M-q[8~_#Ѫ(.)~ys_G?6;t0E*:aa& ,_f08׎|]$/>5ϼ(ߵhm*$,9f[դ.z2{jE4:*041)[9mK`2@șKR8!mbGD >$zAj6SmeNT l\Ur\pv̚~< i&0$t0C%Uyj~FNL {ʒ730TKU%U?KFя2g~tbp"[P\r:N?r2D'Y%\[s$Xĸ\l(ܬʤ qXFIκR0 i 9R0vztPKbTV$bNK@yenAzum1YhdHqŧM;n7_~C~pٗfM\&7 ~lcG~xdHZ yAヘ?z[ )-v{ \sgSŷ_J)Zj!G^p!߰?/vov|Y?:'o8ăѠacƎ/u茯wK=JI{ng^#O<3 k.)ǦҳxɇoQTTNvw!hаwüƏ3^x ZiS.u(g/Kw>8 |8jשN?cn|)˗SZAYצ?݋eK~V۴S+0xQ^L7Kخ87AbJ^0`ȠE={fM^} cO=Kıp)hѪ @ai xh4Oxxr 80ZwpJJQACm\p-⤳.Bm[f[E 1|YZ۸?mθ(& 6)ї'%4x+: `wFeg0- V3Ɂ7AqCRb]Ak):W Jܠ5| JÓ6~44 rxT4+; vQQHLzEF8CTt F=4/@tϦxjI%7\ءf2:Q 6AA~n"IxKiAxT/9BRoT]]8*#p #+Vl51 pCBt<)}9`ʴcbxo*y|y'ɞpv'A+kTS&Oc4$rprO%8R~ܪƮ[ND\{sc j6 P?a*,i#$!7`̚Yӟ;o.{C]yخm{CQG`{vb>69\\S~;tꊋ5Y Tzphm+\}hN㬡bw 2%piz|BlӢjԨ P`lVQTk]Ccb|pn(:u&&6EE۵m'G/3amhv:Q]v tw7xhgpiNWӞKt˭PQQOA O=\EEX|)V,ǝq`Ų%y[Atv68kqg41=u"'=: c;~qBp oYd1Ç'c98. L6Vk '!%I,9;n\ein=F|TU&˂IrYwDxr$P_6){B1|]dw@M H0M%b ABHaJ1 m y*m}^bEu+xOU@9e &Ey–Hp;\H?Y'PdG(SaޚpaS (/;|0@eAٝ0 ;SPD6D[R^T4pudp+"$sVtK(IJ=k䗉054@.-bU܊TCn"H驠h˨Z׎FnTA$F\ntKl$- ũOۂv i6kc `gZfO!+ĥH^S9prl-B pͭ-&5#AfGQI -|c<9jpͣqm{~#p!}̣rF%7h86o_YXt1~y͹tZ?^=zEEE9JKףt=}=7_u?u[_֭źV?/;kVaCOZ˖ {=jR\$z^N]t ~Z++(y~=vDHQ֩kS,O>|g8͗ B+|m̘}-g]z6KϊH(͓H?]hԘ'͵rWyy@fנ]4rnupyCrV4$OWqnRxGk=J7Qfn&MѢU|߁X ߮1$f-BXk-QPexfԨQw<8 9cuti`mZ`u7X13eoZ 5AP/N}Sz8N"4ͷsgDyyyr,lӢf5Br6V6|Xx{E.yoIDqq1<9':u.ݡKwn-?? 5kmm c grJLll[ݬ>|w.FgHvė.EK`VbSC@T2΂a G,Dpc6h j)ݘD$a^WiwҹO"%+qIg4U}E1a#~r{+PZVe(--˟S^e(-+GiY9+P^c!Gsm_!HչO[YĖϬ 3Lo MSWR T/ f-x8Qc LSVXd ݑ7,[K9 B<H8oJY*w:?\*3Nʫb̖߰g1D)61#%kl Lkdy!w.WƲ:nc3?VD¿0jBW ̺/ .)ZLS9BJ+R~arsQzfY^jxrӔڡt=n}}g]DppgмekԨ˖/`%8-UIQRRɏޛn}cbGה"~°q%3AGüfaGpYIϼ7\v6 :Xr9L{I,\v]V oxqغEKguӞ{"3yMk].xмek voySlU38Qt=mZB&MضUkԬY Ϝ[5kO- ?@;+B1pȑXxXG,N՗EYz4h;tꊋsޤ8ᨨ(W=ʛG֫/6]#.lݼ%λ 8bѫo1xrhx `wU܇ȑ,L;;v cdܣ7>=kyǮ՗C]DjԪ+oo^: uC0`Ixqӕg_Նw N{ozZkoǤcjRb% JcEWbp- ߟ'tu&u jPjrv]I,V9s md+w>&S= \Qf2szP<3ű_K5^q'(G`ѐHґ@Vb@bnE5n䫞ݐ %C $Pz&HDˠP*si5z,YYIԶ.U ha79l H'JxK*S`H6E)30$j06l)KhB>TOPQq$  vmHxj|-gs'\_aa;~bf62ڣ(]{'Ip;ɍ2j@R Lnv8fN}ȺK2\D>E+UlPMaOTm{O|0PQ"Cޤ!sTנ/RL{'>X5 mS al-)gvrg*rm{"Cc/ -g YBrwE"eavn׳WD(Dg?G$3tmIX*o9q!Y cP̞K~*Yc#eG Ic9QCNu="6DFVS;*lAKf-F؏+}c ZX55E9x~|#*a=/ ,+Tב܆vփK' ɲfN矜CQQvǝq!u׈mad8kaߙ_kmbHIB'cןBmpS5%)-+ǎifyم :Ѽ _?-9$$,uU&ji`*wU!|uq~؉j<0>[*sNY>[jHrkZڔ(rھ_i&T|W&[9`k A=4-_|cQoW ġQK0aƏ8uXԥ}ީ3Zf^k; AuK@?wbD>w\Tˆ, `bwU(dcB?FV\lK[IJ9 ЅI}%z d`fzjHC@nf:,7OAȺWLn2.؀l^[z01pjƫLHJ0lu2*8IE3$%49 TdBʽʍ ĦxӁhQ͗Ħ22tj܅gؗѬs<c= 7S!E+BEQ*߁$LkU.$EZ\ծ펥1tF?|C &Y9ս3N&4{02n&Usx d!`N9mm@VlԅDcKKڧZR8Tnň7xl=B$ΔVQTZ- e"ǿWо60QݢIdIAe`5% U2 6bQ5;i^@,P2Ȣp3JS+<`E#Ia0'%-!WOE8ɫ<C d*"pgAZy礌[.Cjm&)wD$`}w4oG)ʣk!^A^!%.9E:RB!gO4$z{Q4FmuzEVu3;5ԕ<\zzj 9V109L੄lsIU1.vRXUZ(J&]ۨ%]z蕆giqqKN"pḕhEk!,>%%{Tɓ#^reSc` y4u$274* t(ZI߫. D&amEʾ+cد`;K}@i8ҬR3 OolވCxWgPvJgq!*֖j1dSY?*&9RFNŁ6M. `7ab4p/r4e)G=嫒@"4Sj?&,oZ ꬺڞsdg>,; |*DP! ncUe{Ę aaw^(p[6M6m kgA P NA]sYjǗ**0I0Att|6a06(eGĞYL) y])dQ 2^=rR܈bO g$LŐ*X8ki|րhY! H159M7ErlGOd+CE _y'= @H%, \%U~EB,q2/SGvf2U4NBw%W8DG*#2NEybqvk]GTB0ۂQ{Mp+v7{f<%rY[ %h' ŢnVFU@YCU՛Vt3BEK"̩봕yn) tX6( ێTU[iFG<4>Zp(e)bV˾i|q4aӛsCs4W$N])PO,G?JT o)r}*5r Y$uqYy"ߊ&-BE,Vp<,u<L1tlPFy CгRo1j,uHR uY u7j-TO:Y4M=TbC m.;V&s#寞&{mSP$O9GĪYL[lqkL*m [3VEI648UVq ޵]Q5x粂/u)(sSى&iky)pp/p] LyLgf">½Zer7B+/5CRaq8b`l0Q=W)ݨ3#zԆ _\$f#~;mz}f,=DDl "iT(M{Q-%ljIXo}h;X'xr* aRaOg2J2T.#eŸNBF$+TM 2IΏ$ME`[tSnjsYؓ7/+qA(dF:1iENEΉ5:+!̀*Aavb]yzRيyN/`n -If%e) l4Ve3 IDATxҀ\D0,\:g]q 0 6 ,u]:RDW fVRS RtMo. $rm<+w#=kWބe$I'; GC1t8TS=+Jyohg=qc!V5Y.D^^A\2A&NZ5V|41t+pq`Q%J7ER .DHQ>U;Vĺ2>%ϕ}%@#e6YULV2]5d8Ts FyiYU;7BeWFӐhfT -Qx$tZ ?tHKdD:.Ӎv)izsh@ͼb6A(I!{`=8EQW6A8e"7 hM2j8aϳơ7J@ˠ]ЪI`#- % t!nB$J72Hm$ǸɄRĵTJAqY@Z 1Ɔ@yÑ*P'J $Iy1S r4u^"ŋ!z(xb+iXkgȗ'H X!2.WbiD(_) U,,ƿzsK?\<dct"f;Ι[0qfkcJ?QؿY11G7FF&<4`*Gt:吅RbQQF n%ҒU'ݓ4ʚ: 4HsLdz{ψ4JDA*t 1P O'd}*BP"Z)OKCXvHԯfQ t2h]:!7P0odށ]DX 7 Egz;vQ>"+[ 'uH i0"g"$ 93\7LmP~FnrDQpD\Ҭf HL HR@6thP̰ ,V?sG!I|eI<7Vp*pZBL:i0%YĪ UCh-"x]e"ViZfٯ,6SOM`K8qЪz-ܰ(@FCfB؅mpA2qK _sn02U9'_ Al(DzRPUI먚lI Y!voIń] @> :P.EnEl#j!+쬓u ->8ήPcKد=-oz-[@Pa$ 86Gqy>cEsm(*( d}5|!^ A̔[o&2H *ׁ⢪z&$zTʩGzDX=lKUZ<q0Y@'N޵6 Dp=uZ꿌%nJ ]@Ґ e3G)*XF=3~ XOibwz)tO($q.KDO6oy$i\Q 75h& 鴱[~ $pFSn\0_ܘSyڐTlw@ /eu I5%B__mNA\$CY !$${UD5D mdꬲ[2ȤwxlHOhrFueЂ t@wOiXQI//#*4m<<<<<<<<<<<<<<<<<J=OjhAP<~e?%Sw㓇GPN-p;0yeEtmz?!#& [BZ>%ۯU`-qqs^X; ?r|IM+}?M^NCq6,_|0{:TzGwI{~M* u.e44lI>`jm)|6v켳9Gf-[c e7`)wGz.z=*O+ Ƣmǝ # 4K{yr&DB4l:UA!?[66MVr(*|oJs D/2)L헟ԧq.Gv2O{샭L~h47jBLyxxxxxxxxxxxxxlTX 0A=O֯?@v:`(*.+qE+N=17QfM)]vλ&=ߗ1#_^7 ~n\\qXѷax-1tEح'5}1|xg}#܂yD[=#ݲʧ;0?rxGt(++ňKI_V 9 z$ɏ)Oukѭמ8fZXxQXt17lAG~v98> tٵNr/)*ӞSF5q K~~?/۶n3_[5SK94ZHL$nĦ`c⽷a;oV۠bGIXΛh:",k<31Oj}m:f,;,H۹(˰7ߋ:uŽ##PV-_uX;:b4 9[h[55wދeOXbYo_~͗ g_1;u Ofݹ|#}_,ZO>PR&Zm r qjԬ7RiKϢ.Es}pg7_զS,J0%5jb߅ E߁)<JsW`mZ߷.bXz_zL<x&~ufM{>zE )*]/Wa5Mqq(-])Q=<<<<<<<<<<<<<2n Ai Sw3 i0O{37 ;BM_x,[9|٬+<8|8۵mM7fLw{$!U_we?⋏?ރn͞S/2ȑأ6!hvGmZcOAͷλ w /wfD@v:uq¹Á`Շ砼 /Z=˖໯>GvQR{cQ6tStӞ~) S]#N>n>ىkQh>/qq* ԋfVOļٯAGja0w pbbCq;z֫DŽQノS`_ ữd,&JׯGGE7 << ۵moR|xq9)i-۴7jy}:u _YY]S/6OvL1|~R|eJ"ѼUktIӠQc~5rtضMͷ;_ɇlw+)cݚxL8m;tAEy9>_K=\9/?~z''`k"-O̭7%5jF4hB)ĖZFYi)r loI5PF K£cBнO?~m|*,;Lf9& )ҫ~F@p\y \(Xr'<<<<<<<<<<<<<Jb{`3pqI-CqxZܓjR%C꡼ + ?Zt <W!$#!נ!Z֮YiJԬ wqQQsMNҙA!an]*/+oCppZi6/LF:uѬvh۱ &֬\aӏcNƐb7eެ^}剮چ5Bԩ'a攧S^l|^YR+A& ׎bܹמعXG9s*^xb =)N+/?J)9r=9n-5hu?ԫ?]˓λ w=oxsxxxxxxxxxxxxxxT-(XL**.ƜW^-ONo!;vHV.7͙7gLUbhު5>zm^ zn똁9y=fNѭZMjv^Ƽ7^)O Ч D͔լU kV.oFyYsܺn{Gߎg"KJк]{|8!ha'|0 RwF3O*e.'澁^yYGjF.Cӭo>Y.? %[49NOV`7)Oa%8~xr= _6٤^ eeX<нdXd1~y 4n>?O{o[w %5jgbO0QT ",D"C8i:Cxv `c;%s}cbc>&}4n%F^} fvg`++]c]7cASѺc(};s8uǥ#BZ}u1z챷ON]QQ^v[Z֮zB1{<8QpJy;sg~KI-$'7l}< Kxy 5hO: W._=שL۽^831 Q\\CDӭ'w| ]p*^|a|iةv99tdS~hު ?h|xQQ^uvm1榫P\\/5j^9V,͗q\t#džyi7(ALN2k`uQV-L0&#"Qyaw_kꗊ7jXxo,s@<26| |˭7j |>yxxxxxxxxxxxxxl6ЭW_ >$>y̝5-۴г.FqIS O'61;<<<<<<<<<<<<<<<<<* Hj(J(QB_bf~u$LD'8lm7j%çssʂ/[/PçOrb?E~G Yv~( =<<<<<<<<<<<<<<<<6NBP !j!A~}Fɑh(8a2K|R|C{r~ ,_0{K.D?o5[n-PQ^}Jt쓏eoNSim1x^xQ֚0hr(νv/ŸXf xƸa;s'ێmpSjb]G<Z5lݺnvWTBãᨃam8-L'l/[8qUfƍ۶ħ-LO% @M՘<,f1>y8zDzOUÐÎoc71e,|aJrQz=4O28ŗ]Qs1ⶑQ=a F<zޚ=+aVxl8c1 v N>7'u(Wgbо}_8j Ce]݄ݏ/s&?pvG<>zYgW׷7O-{sY%?.1 F>b^qߨ;=<<<<*;<>c&O€={a^1!X48eQؽ[gu j ]ు`X%d&~~PEEfL{ٯ| Ew}3/`irqQ1x}VL2:t1cڋl4-x4;۶l[+pSq 'csq=saO?_}9G&?.Q,8q 75kp`!k?`]z`㓱zJ\rY}L}v۽JJJk31pΘ54e:||X]N:̙3ϻW]~i*+**PRRKq1h!~9^^q5թ[ٻLEDBDb%!!"$TQJ>Z~*ZZ/UEE*UXK-J-&d2?D& }5}e=s=YKP,9|$̛=;;;Oxf6;wN1nz1m߁'7zKTn-7 cokt:~o-_ '%&rߌ>-[ y,^8'g;u|ܾu3ߺtՇͻ1}943Tɕ@4XV{Zݗx>l 7ؾ߬X{{w2u,6GeGG'KKK._]N 0z^xA!lsԟ'HIIwBaF5ꋹ kG4aGw~#'g(y,S1;}v4i-*UE`;?Ɩ6!kϕKz8V@;cٮڽ'j{6Cc_ڶX"*TW/_w?׮^F\[PmB3>-Y&]rY?BkһcʰoG{o~ f~x׫@WhZ 5j{Z[@o{>2Zw IOOc}&c4kނZ%N#%%`ɔkRs BYO>Z yi@ȺwJq:7_C y} ,--;RYT*]/;lfa( *W}KfnBAǮ Ni)L1 nTW qׯ{}/.Uq숴zNԟ'شgB=o0MD؏+_.]zh~:vJ [[;*rERݣuH[z B@AtUnNچ/,.B!wgժSʚxE`Pe?={n3@6(kbރe>1F)>^Ch_fmeMx*W+}zycܱu3[FzzZt:[J:Xtvk+VRJ܍7/s2ߚn-ldg@n=>-zʎ3{{}된KV\D$|Ѣ=o(#cx J ӧXkfu2tօj_z R&;V?g h*O:V/?qy?xp?1$%&``Oox Iulln~ƨPZX0wc| !xr>OO^V%##-Z?DJRR5jUqrmo{πjyZ𒓓8'bi,YNps_{Rb":BÇIMM1HLx?))1חU8*Ub_WJe3Tqr"11 Lx89?UY/>gߗX#/zrwvvU`-]ax& ~ &{;9@mAU;3W'gzJMM%55m%~̜R94U{M}t9䗮Jⴴ4^d}Ea9;咥4hp|F-}'gٹHL)W}wQ~~_'de#sp %Q;-_~IMMտyO(~yc\ȠzӼe 7wBgg lۼΞ_և~ݣόd^3(Qdj_7DвU} ?Ca=SSٺ)\[O"ȡCA"6ny@` io}4TPH(OD@\ěͿUOǮ}iL*MH|]۵-amV:tQorraՊet ińqoŢowآryy9t)Zͫ^غ͸}&!-̬ѡuS>x.{*Ү=BۭmBaC|0w4tǍ8u`WY{:n4qّm[xSA%}s966xfO`@PGbL}^2sI;r8[ȳn3̘3祈!ʷn.fSUa!\rɵEB,0Lʥ`6mYk{#( D}T"c2c:!B!BaDE:d !B!Bay{.2giаQw:"=B!B!Ȍ B!B!“OpG%d?'Dkׄ=GN;e!\rɵEB,0L4YH?u0(݌xWeP!B!B%a` 3({;*&B!BQzddlvc)dw!B!BRK5|.|B!B!eJot_#dhE)!P*i臧Y_껹)kS\zH+rssNcTqr4y6[e(]I~e"3eƀ ʛ W^RMdժ fqn4Fʹ}j}i:@tΟDTvtkoҗv6OR}Q!ʻ.:"󏜯jD<3UhY.Kc)7C Hoo7LF0œԭt_B$?AY V!JkWoЦuQnxyycRZ60 SBb:+r%!ä5+[0$-kN%B00j#$ !(ɳSزk#L%uE!}Ɂ + ,{X$Bp$(3 A( ]kٳ'jJJBPSNשT*hݺ5*T@VV`޼yO^2B<0{9h۶-Νӯ5k...T\7|4}bRׯ/.Pj߮.$''}6tH͚ԫСwժUpwwݕZjЮ]v4~edc?F~}ouyrCl? 4~NcԨQGGG&N__=_~wW֖\˯\Bhh(666p'兗=_ܹCΝiԨs/݅ hݺ54lؐEEE퍍 :t֭[F!O*u+'E+;4 TIOO̙3TXt9|0[lѿQ{տ`ٲeܿa̙æM9BLj#Ջ_;vd:˗9y$K,1wK%)gӬ]N\mnSzu6nܤoggǶm[1b8 ݻO:t֙D~<իq\pc1lܹcs++_WVAt:f̘^dyҀhQC}beeEV"""GIXXO>$$$`^yy4hݺu#!!#G2|ٺu+'N&559s>%%P|||tC s{׌3x饗HKK#11h"a̘1&BTT6*?jȻJ::J$͝Q?5j @v8}4?#G;;;}֭[gNREc֬Ox 0ʕqvvfʔZ%׭[7~.g6ZjDGGe[9oߞ˗sm4 K.2h /_'xdLbb"g\t={ҿ '''RRR3 /^wެXB3WP5֤%[lO>K~4hPWurURSSTdǍ#[nէq^ȑoP6l@Ν>,\!C0l0fΜi0zaoҤ ,[ N… iҤ 4lؐ(6mqܹS?1srrUV̝;4V^̓hٲ%;vl۶2c z̻ !Di4}c^{Hu@ПɦsgK;v4흝Y`!*;ѳX| ֭ X[[aܳ[jj5Z777j5nݢk׮TZ777јAF!DIqݞ–\a*+B!mDp%Lլl6VŚ'QtwT(t$ I@H!J*7? oosg\8nMJ+FFaBQżVTlg_ER}7wY#l1Bu< h1&m#FIVY/ !DyWE !D)t5Z;gmw8bRZ60 SBIr|IkUQFA^=oBQJIge-FJBs[[Ɂ |[RIN+ JOOGPpZ3ϟOϞ=PըT*T* B?:u2NRD֭PjZ'11C憓,X8NU\vڅB̙3yM6jժGGGӢE x爌|ƹ-ׯ__\]]puuj*]]]HNN`mtґ5]WϋC YU+jՠ]vi3+65~>~q>}̇(?~<h4rNɓQL8Q"88{{{ի/W^-Ṗ_rPlllȑG&N^^^ <{;wܹ352zp[ښ ~(Cܺu1<\j7[ӡz0%0dA'==3gPbEIOOlٲEFݻWe˖q}߿φ 3g6m`( Ξ=F!""Yfyfs(}HHH`+6#,,{.ϺAѭ[79r$ <<[r oRSS3gNSRR K7d:wμw͘1^z48p -"!!ƌcBi !O%Ka#㈼d=@lȂcLJ}vN>MQF:t`3Tef͢G89fȑ|Gg̙ 8BAƍ8ץә5{o< reG2C&OBZZZ*=^V-qMСh4w]~#88zX }m۶چ ox"߷h.ٳgKx睷5j]tcv\vZUՃ:vlGt|!JiӦ1mڴ|6RO'99SNҽ{< sjZT1@JJ /ʵLӱx"RRR̖yciYݻZg믛;w6ܾ}ѣGx7w6m0}T*Km+4P| FN>}ٷ s|CIK{h04[?RʊϣRx:-k6oAN8Aݺu1bjբm۶Ohh(;wݻ<|͛7Ӿ}<˫Kw9j׮Tn]Ξ=˹s[~=\r !kxyuΎȏmc}dMYfTVM:ujCqQ֮]K׮];v,| ;we˖}،5 PbO nqF*U'|ҥKQ*(ǥII3mX>7oW6fȪPk֬fYegb͚TP؏ݕ3[yyyamm͝;ٵk'~~ԯuZ- &MP~-Zy֭Ǎq\~ 3`@|}RZ52s׭ڷo˹}6K"ˠAX|y1߿p%zI&((WWWHIIҽ{PչjBOY3!Kv耉?-E Q#hk˖-T^]o5x>|8>_߽{w}}1|p*T|P$"ۊ+>cĉ8993[yv{Ocٲe 80{P(XXXЦMJLLL_l?3{xڴiٸq#QQQ?NFZj޽h^yT*۷A߿\)L!%<<3S^x'udv(L4rvv&<<^jMFɕ$...bch9s] =R,,,9s&3g>|Ez͊+ *===sd˖-Gxׯ *Vn]^Jjj**Uƍ#[nէq<(}!(==:7"ld5(r,r|[ȑ";Ndah;trSLa1bcc uΞ("""s7o͛ԫW={Э[74~Spvv͛8;;3rH cǎ8ny&\4&MW_}ɷ~FA0cGF 7sg$22xzz;;ThNÝ-$-\xcL-|t,W}hcGΐWE1vkE}*Bkews1R}; (|@<ի6ʵUUBQޕй7h]W7!xn͚*g23B!B! ٦3V/V E+guBBWv+ [rm!01qw4}nZUTy޾X$N~slbB!G-7.^R.\J-ؖk# 0uK!( ._WAOILT\C dQ*,,ws1R5#\xUZ#.\Ghk6rm)nBw%9\MH ?V- aRMHَ_껹)g]շGp"ݷȭvɤrm [}Q!ʻ.ŦX[=ĄB!B!ijwo6Œ$s !B!BM2B!B!DiVV=2B!B!D9b{YB!B!`|B!B!D)VرB!B!D9"-B!B!J@V$/q`2ڢ؝FY( ,/Keis5w)]QWOC89\a֭t_B$?pHAW^CQN&j8R}7wY#\>5wN澴iIt:8QҭI_SF~O8BA8v(ׯ_cmL! 7ܹsL2+Vh̏_\t\Dž K.1bpNw-ŋOtB!% F_B!ʌY>3`@*Wvٙ)S>d)IRj#fsYUR%uΕ+~eAjՂ=s9^}u o^T|7ic|B}+Ch".:vFppy`۶m%4 AA Џ[nx"߷h.ٳgKx睷5j]tcv\v .ЫWرчGNX[[p~j6ܪJȢEi9J%ݺu'66-[6s5/PbEl [_eѢ ,;!BFZ !D9̩S'޽Gu 9mZ-*UYŋr-t,^?tׯ{b!˘1obcc3h"nݺ;cܸy鈊.]yciYݻZg믛;w6ܾ}ѣGx7w6m0} Rm۶W0iaa$**?&*j+>>M1>}oAÇ`>r^zW\<wk+UD|||} ##,Mjܹ4oL޽{5O>wf}&'N@͇Ng |2zoN*NܼyCu6[=zteJ*h4kX^[B!Rɨ@BQ>XYYKxx￟{9s>zR2`P9;;A^j&䊃RmvTZC8;;q~TRSS8_:s !X tqqښ#Gb{{IDAT7Pt!;;;O#jYN$!!֭PR%FOΝ;įQ#HII֖ *[/YX<]PB! "Ą4i _}%~ FÌ5̝gӓ(8{q`=^A D9{U~e@lll$99P*U&'6{MҖh,[11ǘ;v4:;;`B^{Uywѣga+[.bmmm4ri|}Ѿ}[^x'miѢYڶm믏W[דe˾eﱰ@Prj꫃]&/ЍضmŋQ,n !BAB &!\Ru$tm= ѣs^ N:#4aa?>s\u9wБ:~ذ 6ܤu!"SժUYdʔ ؼy:u6B!DeQ@0H!!! 3f,ҟCƅn9kք;+B!D#))jQJ󛖌$T1, (lYkŠAiJGCSN!OFZ5O34Bͽ:_Y)Ο{uҖk[o; R~]ϊZaBQjzQӣ|M$RXJ%wpk! 'n"Jَ_껹)g4$::s.I˂bsOCk#L$u,+|ȧeP cժ dhE;!P*ig㗥n4Fٸ*Nt֞?"::H-rssNnhRz6T[e(]I~=~TD˹=9;#^UyB!B!OoIX~~m MA tyBB!B!gC˄B!B!D)"S !B!B*!B!Bb'-B!B!  !B!B#B!B!eS`ГΞ9Ϟj&WBT*iH^f9~Y.Kc v綆c|ZWVÍf88\a֭t_B$? ؋ʕbwB?DY껹)gI@K?ZgHtt:{Hzfҗv6OR}Q!ʻ.ʇ"3Hʃxf*W3믢e,r6ZQ] H:k#L$u,+|P@BQ\tVFY۝V(-!8\pGIJL2)=YVMAlbBQJIge-FJBs;|Ɂ $:VyůH BQ2ח={vCVR_wyؾ}>SNRZbԮ]tjԨJ PPSN#4Ϋ,Y j|}s,p "EΜ9M/sҤ~Bn܈cڴQj:-<:ٳ?`u˜;w6wӨQc>|>u %%Yfiӯh4ҥ+'OښI>͝7|XU!0ĄDƎ}ͤ/o#J/ EVs^B!JkÉwQQ]ǿ HU1(]1(\D4%FS0jcJ6VLֻD|ĄҚDPnZ"7Z/ De,!2d2A}:k9gg`֞O<}߸H^2w<Νc'pss'*O=?Jꫯ`TUUUrE\\\YO2;]Wii);wf{³>ѴL``͚Nі̓QgQQqu꿑YG/[B! !'jkuT6ihh/ƍ7dY[[w[ָmݺ!^H<=G9;#G`3{8sNg/gGeee2eo= ggq h>|, _c7E<^GPO?82r(/s?NAAAmW__//l1))xz7\ N-?m\._; W[B!? !РA0)pRiQJƆl"#' @f8_fMW=5^ѣG~/h46mJ%..g˖{oƍx{5W `H??/4u%5u3L8Μ)j*x8xeDGt;';wfGTTo7JҥozɓÙ>}aax@x$^~9HO߉ ]>o%TRR[B!撜ABG={PBBBMM&3mM67ZMQ9z{;zZPIN~^1O/]b_)S"2% ,df8:t({|j`:KYx}$%%lr?@n~"#n7!BG  !}ҥ b޽ˎݛӡ!jࠁT;ux&h!蝺)?0m[sct(N&.EݻWB_~8:0=?5&Z=$@BFIi9n=JPRZpl{doz:GR[SϺZgB]qsw0C% J%պ8֡T*{{-#>?/O\,F4>~^f#FAV_(]o..8R*X}t[Gڹ}*bfEQTxܢ%ÈJ=Ĭro:۷E!zp?(r R̂v\B!B!w7Sǘ&f0I!B!B]3H!B!B<d0H!B!1@Za||kjPB!B!{ R.'B!B!z6sm$MIENDB`onedrive-2.5.10/docs/images/kubuntu_integration.png000066400000000000000000011757751513710110600224370ustar00rootroot00000000000000PNG  IHDR/ IDATx[8&hf)=##"+kg}܇ݳ>3ӝqDf($(R.dE)``D$"BKDe)9GD"cIjwzEBPsX,fHjaZ753>jU 0EuU*0jrj fg.蜳,h޻3ODEzu51I-" aTU U]:/"{f"c%nl6Kk-WU}8"1v望Dy1f7P#O~{_O_IS+K9%]%n"* eUZ2Zk-mx8 PDZ{5ObtSHTr*Dhy}^x4ڕ`*T:7?{ ԧU19=ǍU>M72n: w|SN9THʑ0we(p8_3N.LKkDD4,̟ՊcE|f"K,A>DBctpN܅fCD" $QΩXHEtG3 A iZsssK\D?Z7ׯ#\s.2fU,SXv]C][o+hRcUEt!_^`0ề}Xrpc4MWsk0Nl6[.6Y/ƞal|:cB ! Daf qc!dc nl& b ,E{g9h-iX,l6KcLkǏ?,s۟t~b*OVlpdY= | y[ 'X8+9Uvzya +Zc&L`߉(I^ͯlc8؍ql[%[?O?pD3 nĸ#yޭmj4J"YZs.J'D (86Bƪ#!@b@|{ S_2syuPrij^!_E>[nZ.,t$IX̖gYټޙme ts)OyL1m E:#^\>$ÞX(3a{{7F01˳5(`WD$ Jب6ovS@Dг}:}XJz܇>R:(wڛ4*kyCޒAT"5kFUQ{@eb,`J/r1E^XUUg\<<-$j|Fk',g]̯AZ8 }Q1{Ř*Z=S s$v2qm{„ `"*l1vo]>ɵq ߽]0x5aܱL@m{ܐP ~nb?nC# R/}M~hrHVA ?cfYDsfR"Hs\Gi{RTU@TQyZ($$$ ^%d֓ݎһ&yZc4UPsi@;cɶ<1 S;?q„ z–[NN>@ ktBάD) 4TM4gwߨ Cg?Θ=!Z%Tu4YyU B "PM-@!$FDR!@j*Sk% T? B)Md6rUyD?OߖFu:&M::<`b P,[\o_yc2a'N =2CnM%UJphUqenߡuTҊׁEIATA.TU)(dvUr7TZC&׈]NyM1}O 5 ǰY º^fc^;?dh@2rOJvK~6 -XOп~BJvʣFس2Nl-|4V]Ull| 2cןMŴh\n%":?d0Ao̚.KX/(Qo|#kμh BY)Qd$!<ϙ9l"}ݏ}+mphu6L%Ib},tj%:."nnmB\5LprDlVKk\9Ս6Q'{Mcetv =1U FAuAױÞ4M̮ @Wo'._|zT0*6oKm  gmWS*B70s6Ⴐۃ}S]Fr{?*p|,Fǀr(s**fqΉhpg@%>`Rgb6d9;vyۭt(ۭ#*>>>&OoT9q m8!=???>&IR#Mp"֍;4o^<(6rdn$T2jn$W:N]ۉi S]?__N;p }X QaKz ;`¹@eTuk `;6֚$-Iys1+"(! #[,z6"aW^]]EEϻE9ieQUkzjߏwʩ9ԜA.ӵg Y&cG'TK&L sXkTArM2`%ffƫ&C6 0wE %R"i.Y: ,2{aUUMF5H%BD\~~[Y(>====-rnl^%w?NܜjdQk@:< FoW?.M/n„SP Pcfa\8"QnR[Uu ~!UѰXEZk9yVHA16jA(wvl̬OW^qsב aA*M'8J]G"%6b8."0JKm„- yމttY@"m,[`} vxYIjh'"寷".A&0'$IafsX(74Wmu(x;3 8oL@)- a+jRݣ$aXoLS{zAB+^ \e}"GEBFp MÑpɺM8g!􆵖D93>7ʄ1Xd /]r8=N"0ug@<[,zT $"ۇ(4(5tF Wo_]s$pcPohā1fU5DTLqv2amCZ&2* *CViAftȶf@H6@Pk\A@ΫRkHayĂ 6#G~=h{'O+I#"67S^:߻n/]I}W}Cl޻{|i^tKR^Z gK{&t޾V8sL un\4IbY!x51hPuk:6)ivkh( TTAfjl0s̼Za"2:oFcgq7#"3rߓ$)'6yGfN$ ;M߇j) J#ktLfϖ!^,4T˪J8žȦqq';멅A.UѺ;\ic &qQʔs)vM-*b08P~@{!"{u1vCCs樀5M43UXV!pj$ǂ " L u}-۷[qbGHϫ_m :nՈ6mrU˂Rw6;tR$2jnܑN8. gg~(SHآP+[TFh,qE S0aBXY,y@sgȐX@Bz/A`vix@jujA±Mg5&0"bgDH`RO튠`{{ sɈ5evm{3Ŗyg:Jb$+ww_޽ԕˎ ^Jx;[-!\ڜn2IUoj:>ޓ/hȅmiLwJ~4((1h <[P>v J̬_X7[QW-yQL0baQԒsD@[a0<]Ⱒ h,JBT: GDcӻz|>U!PYrXUKAc|ĄWԗ1I*'Fع%PD qJ$TrE `(}`aOO޹~K}nWP2×GիAH}?Dhs ^ʋk[ӰI liڣ\{Z{nGOJQgH|Y|7gգKAiI@uY{K,w98a,j&777"x\u۾Ffwz}ok )_~H4 CjzZe"-Qf;:k|f3fYe3c ,`l1n .1>o^PSz@{swWkU@s Y7SU@QvIJa68,TĂ{ ٮvTUg4X}Hii},Q8&LFgLg1 r}o"uf|ae$9D} ,XwWLKPqY:(듎:LE4*bXV,"cDx $IU(dtO{Z[Q]C[mIzM+Tt~1mkb[M֭rQ4Mu<;kXx胣l5jpm{zC]R/Ռ9 ^$rKϽ*0Xzm$.J ~Nx[&. xFDk I.5BITZ`Uur &6ӋY "&3˗:/riP[V DXoP@Dp Џ/#"ařsN04Զ.![aMez^ҙ yjI< ~~~~m$c-i/c[FW57(m {bZkkchQwo1e_;oy3w-po辤uxV֯"JMCD]N?}aKӹk2ᔰaՔ"[ky?>9w"DA` !r ^މFҶ]ȏ9g%<y !fR5Ϭg6D@dII(lm;qTWKUD l\ VefDX4([Wr)4( Q >>>y*@_0sJI|x noo1j1 \wT{]4N'amK#[)K-E5پ-m0gAQ<ؒ<^c!}Ka&raj=PUDyrB z>R>|/O~g[+ B~|v.li`^D,+)sbf{2&g"B$%Ͷ( {' `?FZ/:To-y L91s<>>*,fIIq4¦h}_,WWWw_فCVaY߉)p+A!0:yO6Hj|vρǣ12f[? 40`!;{'N4Crv᜛77=Ync9p ߅J "j̬ `0ʅfQAI4w7ü6ΕX1ǚT>}ADQTW=?\>HT fZ>(  (d ZJs>ϸPk @ Cn@i7G@'wӗ̹[k݂G>(\Q̝2(S staX؉?υY>}öCBP1&1  ([H0žqhҁ[:cDЪY* *]\ͬ5^Wι?oh]/9wnpg;̈("_|k;C )e{tߠmwCTijg*y\9f.>S&Uo߾޾zkU5 ր!x||connV$jg[%~n9;1fXC:X~:4NW\\ppNBhLƒ#n&}bKZ &L13pH00b1OSkNމs ڱMȆi$IM"WcHUYUPmwT$IZDdV|昙K'}XPz~~~||onAXUE*R-׋ލ"12ڱsCd[ήno|$[$93!R9_hYbB^(aTUEE41," *"ʊD/H8u¼r k].ûw̛("˲?_~yÚ+ Aaxѐz`d@oJF{9Ql"J/gGR[W[+\fa*HQp/V,X2=% 6Aݩ0vQ!Cw1Ƶ'dD>U1 0}hhĘ|n_:ֈQh(M߻\= Ү'{ł5Ӈ>w60vMmz"Db<-L1 =" NN Ҝy;H?Xظ=4)]`19MBb劵KoPC sPްCkc S / v h XL1\X,ei3#(oyz= rhm2<7)$63F3U[N8aoW4kz.[$Ij姯Ϗa-v>K+7-K0C)/݈}7Lg~`;cZ;ncnVbIY7,z_~*gQ}cZs|Nt6OTT@C&<!9A"2]YUTS U$ib0Ec^tm"l>k-1IeͿ2"gl6#,ILiXhF"{̻wIZ6 ه7 Ѭr'SSf*Eluۅ^iGѼ$fxx.Ҵq6]?I! 54MzxXlʏ=)!CWc/;_p<6iri卡N/rZdDŽ ۴¿"֚\=&8͒Z2@R0of~}z mVv!ADP`T,v0IXh\r 13VB|ԬM6>V޾5 RXDZq@jP`Qq9[ ᶁSUD7 ƪ1h sƦөjD΄=(>- RfUgiVdcO>ݮ:6!U'$<==#k*23WNI$w|ZR "ƨʗ;~z}j(@UDd’ \^YmPWcs%$ Lct}Wy@suuE)NtqMirCho~,cMVb 8WNP catۥ"3ΊΡ6Z?n;5vQp.#rVˁ,^ C\!AK/ñmӋZL8`5DyU U% W5!]ŧ$J_?>ݼfƘ#ec7K+ '<[Ʀ'A@Tס?|z D] 4¡Ite9"B, JIg{۷w_?[KNeS@BUTU5a T0>1̎uOT 쌪$TM(DEׯ$Y[9`7GN:Hֲȫ~9sK1m?CR+~~56w{r>Vq`91!25HP4PKPB{¹H~8)sx=z % -WUhQLkuѺ|us z"/o~/?DwH24q ,3ૹ%Rddނ[%8Gh;/Z-釖$b^U W>}cu>>ۢTڨk@E"_}Z>+`6"a_0c ,}z~ Ue纂VCd2:V?Lp)L` >#p؈*F I9b*vWCa"kJjk!BT>pc>C03*u^@&oO>}^:J"0j%Trb*aٯV+7Ko4 z ;&/oV?-_ctH [r@ED?H׉uw7UX!fڱs>\ʏmls%C~ڗШGG~ke~1v-mؼj?"p疧. b? 2{O되6%'z{u?v?fPFxc8CTN"1#bw ޠں>TMߚ{L&k&RG#40*~{%J$"lScNϋڝݎv݌1>}gTfeU5d+g%D(m \=vzCk9O7z*Gkd_2K&\.m2g[+Dp_Kx€&;r@3DrkFV\j뚶ꌰU1hAzBr뿳h5 KI{ 4gML-0;1UU;mdo"~/]B3>.59[m.c<̊k#?ve,H,y!68gQcmJt\'gG7a۪mDv\ǹM&KUsjSQ^Y EĘ$Xׇo^B"{Vb&fc IDATc~un%iNQ%CZNB2"Ze_==&h6+ocy~^$IP9wssc_7o_}elToۤ F{Ĉ᧑0 ǫ{E nhzcc"N ,֒B`W=r1Qrh2>hqDyBy?V;{%1\#hutkLrN!3@n7gYv5Kw΍u lB8ȒiMwnC.R"YOb+0m{^ 1WK<ͮ3k-<<=o7Y\VY>]bePMt;Cl _-ˀQKzNFyEf]aUBW,Z ͟"P:tmiU[V{|'h l5CfGW "cɎ bٶ {f+گ% Je0,/:E,9Z^h*'& %8/'1I1r'zC叅Dr~a͆d77iNOjʡOnp @pdyŻw>yfM$s:?&an`1y:>KC;l5 PUg5_GPeUUKwߞs" Xi!fq*?E$S$ijcOI AB:՛$7iH- A4a͍a8[mTyFghMhmL4>"} ;2D SXvALO}O~\-YD\\8늰k2JzDcI<_``Ż3X;ƙ?P>6qBlȡ򫿌"x``lSmnk }ޱ4}C ')bp1!#iWwoo-˫X$2|^5fURN-j߉Hkj`\!z=;({-* cQNxSN-A|[iBښK,h%}0gUP'ӱns˵~c5ߑKE=3c>o/QX6t0bQ7CY_AcJ)v 8913Vuf>}yM!IjAvi [U)4-Su\8D PxXE2hTim:{=XDZVX2q34jS+UϚvE# E"B452MrbVB\dҋC)T5\kws)iu߽}ӭUIX( sLGRfr]Ж~T!1Iڇ??,sWl;bFh5jnGM /4,hk-=@fDgz]YPRx+2Th{&o~:y /3Q- ̏ڷޏ\#I[A,l%+)[a >A V9f3Dcr"h:_Be0Vܴޥ͋&ঞL5*g.Փ7P{#xۂ~?6Gš} }1ab: _E;Vcن.=#+a+ҵrC`W,,Ry5 9񤝰~)ӏ_ǿZ=/^1 "i({/JDH$5xaAf(ȧnpr"|+l%8Zoɥ>Jpl0!qZelTkUhӟq^ڔoIj~y epCWaO"z߿޿}P6v; q/6*NNn1.ےn]dVL[]TVƒ3vr^6=7k#O{vh{hM)$DoP^JSc)*W4Cev"!*'>%b?!vĶ`O+vfاnLÇam0Nz; X7:no(~߷龴Yn; Olw31_77b6cTS@H,v@ P{8scqJm [}5ܤ_Yn^SAW@T> towO\ f.TA;O (7" }E+Brr'Q]Y]q9*@UmU߿O_nZA:RxKgC;,'\I5M^UGVܭطnc-Ъ@9=C9poX(aA:%-^IuY[gno㶜h;ONp g<0= ^ 8K~vrd#}or ?cIX{s#~UW"8v@m>C=ȴqn!sӶ:cpU_� kM41‰Qu9g<g}[aun2{5YLfwF;daJ&4*?>>?=АEzܼT^uyk4lBԟ߽/?/Vd؇XMBu^!N0E٥"Du_vZQcZsno}1^ 6բ&b[ R/r+gD8sm|%y&@%8G6Vˑ?*`w7<$jGOJpQgRK;>E'O!Pe1c1 1Zƥ^ڡBdK}n.F߿o~vvX+}HRfAm`YڲpQ85QۯۇIU$1VR+"ʁI,h Jh%w _Aj,B|´7F}2wp}tFO_\@5ztf1dѐ.jy DDiīܮWNX_gm.*bj1{jU8I96!?GS宻UD@dT`C_V-BUY}F?Xo"^]#*T1lo\aUUe<+ArwI:,ߵmkiذ~Wxmxbs[4;{!@ rwj(}1xS7zfl8JchpO`U@uKu؛|gh7uSXA33C1i5K {5P.tBIHN7?aM|RՋmRkq\ϯ_-޽{gXK  x'Cgͣ%;;f|.$ HB2mܞn06nsLfLH6nvs1c}d4c12hm-"o|ūwU:2onܸq#ŷ)%cYJB si/*>GX@MWtͅg&lA8+vʲ Zbny},wAU_^Z:vh Yk4ӎB 3zO/O 2 *CNw8T@F8QM?_Wđ86ֿ,OxrabNY XfAL$.Ͼ |>mw󝾳enjqn̉X2] (c;η<|{j`5u #깲GA2g$A"!8F@8<o}}AvI6{_=d47 }/mfjP;Li1Md,?ZiAe5-"ZD+̓F Q(%0,q9v8>[`TAb%s e&#vn~B|o"i f]"7J  r֪LLSe6IS3%#J+`uvRM9ng.onH)teԩS2&3;mG쀆MMHghiISmuhQDUL&lXKp@(*_{MԽe'^:2$8궃wYW1'cl̻IiRao%#}|}T].q6=[O=y0OF9a'8Ypy; zd%fw C{]w_cױ/ڵ3.B}Sj $my1^癔ą}4sW,/طHd+++8wv}u9%.$;"ah,)P"XE\w6>T'֧›f5ef;+ ( RJfKD{]Ѭ#;jXtVS!TENDJh-Vwa79R|IODD!D^T[[[έ{ҕFRJAfGrj> v`rϰhr:H)bEcg0+θk=Q|oaVwc' Rו4Kd15EAt&FC{I=R7((XO/Gk[$SĊo!V|5;. 7 H0F_u{_l{r70K.7fuWt] _fP&;Foa2]Y׼-cױeaWk9H{k5 bPID%JX q D"E\ue!A@DnGD4|;B! YkRʱ0ӧՠ~Sֿ`>&or( A<5 S†`P&,X oɉmR!XmH Bnf[ZY:txzJ)MZm3O,Sh$h'byl-3KG#\T bf3NuDpa~\-6ϽݤnV٨] ob+y~6D |E2b#+ =/ APcbv< `y@Rwc{]fFNJ13^i d̴\\3R>\ؼzu1E0:v,}C'.#Yx]S|C`5 " ܪJ* k nmMP 0L $KDHXioGQD!UZ+ +++GnlQ 8iSs^b7c+\ RJ]TgO DLAIJ.-̧湣w7n |dk>ty`-طmu4ف*^FW5r'/4vݺWER]G:ɄۗyIR{p1W]^[!rnA_ XvQVW|7!8zM]bƙo_GݷɽoI*Ճye4OY*N0^ė'_FcF؎ w8.DbDdO~gtܙGJHTL5=U++J9ٺVE*DdJg@?4)PxGr*?Qff7xdxذ/[ s7sx  Ƣ,jg9YQA i4hBw1;&#E  QJuz]D$SUͥJ.uQׂ"S@MF3nmΜ>h,B2h*0}=8Q ۷9LS18dHT*xbp 2l 438Ǫ1[gѣ@k Gp\11ytsj8_N=AXճCX>u^#VkO#IyL2}awP5M(Zkl'˳,#L8خ6ͰS`ff D`Nt|REQXn4*$1yqN-? S)cM J,N>Kf3""c !&+89pp;xG'ÿ=b<{6]պniAfK \< z.}Qsz.^늇߳s/>WJGq1S)o@ptPO> Gc>YvW |it.Nfφ?]EzTt o| ǜ Ip2}TDŽ,+_yBdϥ.0>f+ZkW^y%cd! FdDa $ơ0\ Â.ւ1i(Z2 A"Ç@Uy@k/572Mv$8 O3< ' :~j`fBd*eVVF`DmvcLMI;Qvf֚*!PF%LbH[lɄR5l5)[cS.N\BƘ8lh Ϟ;wJ.%^iy([;ݣ_Ҏͭ2uGbgR>$>xLT? hT>x^lw_=;޼񾻘OI0-R=6r>;fӞaܼeuӽz]c>1zg +3 ?!5.!g~I̼"8۠{Khʎn`,&f6鏙iKi>a1- ef~]Ʒ1UJc1̒$'aE(PeTA@Zkk-3:aʁV*˶ȵ5DA0 D!(Kun$W(" 58\8 IDATrp:qQ #k;H޹G~ ƘRyq3ųvy>'}ƒ6ȁ@eU*yBDD؊;Gґ mU`A e'O![K )H)Ef̼37Alpo3FˌG'EO4"ìX@#k0_="HRo<;^۷!mNg\OU|.'8<\x.}brv@=u-bNsN +</~q~̴.?%.<Zvlx,w&,it3گG`?"& 6bZ[RJRJE!FUeQTZ!BTY8=4u_}41*k-0 N;;:O 2J?1';ێ*%0<Ϟ=fWZJE!yvg pL.1&gw80ȨF/#njkɿVZ}&0Gjɘe~+9Ibyv1;q^Rcq\O]Z織˲V{ԙ4M@ к濾u  6ԺU4ʹ@+l}m[GI<+VTZ;b&0Q`b#8-8F8G-#v{^cbpEbp OO=,sصF}m/5Y'"̦ "yQ={QX`Oa;4`uUAFCpEY8Ov66UKĖsaޖbلX<'8<ő1F&ڑ A8D`&@&"zПwEi~/ێyYO٭i`ȭ7.86๬oxNGݘ}sK3iiGGgs=6xh|;Cc~Gz-qT3.5Ş kx磚Za_d5=ՇlOYU?~Q?ϋq`~Dؒe#hC|X}SOy2P֔*+cGlqN<y۶ {%Gꥥ=vT#mao{[Q;wiO},D`w? N/Z@RD$X0,!"@$ʚa=mX,/Kʅ Rki?g,tv8[T33:#]VA +53'sձs4A[glZDyϬn2`3_vv='vJvoSv8sj}k>E*> q1Aw!ߋ SSw>)K.|;͋0Wd y{݅O|/(kå!uz*|34Cؼ.opTvZKo0=ɼWfhKyZ)P1!qyоCb TT\b).0\ b /n/܀ł.*F)%! E>D@,˶6; b@ ba|=Ou$<z$ndYHQjm0z[ %C_ڼg%1ap1qi,8ZkkҎKAAtA_owUX3A`T'mfG[z#c6|4`ކ}/@Db/LqȪ Li-'ͥ,3o9ԝ#f~ Gk'jNS-;jWss[ZhWvN_w1^jk>ȚSBjo;?g}Ј+ȨoJ<< q4M+K .EaL(GmF.@cXr\ BD9&Xשּׂm*r]Qkka҄l) Ce)%fRMfR2P*@$7YIiֵs1z|`I319,1bUUן^x-f1ۖ#RDS. >#(Q -h. _v'f<ۀ;zӑ^&JT{C뺀O3|&Lڷ Ȑg>{Z7ҤUjvf3h𶿌7,3d=~pYT1q*[?yD̈BAd;|-l\Ĩ̲p@@cѣOYA,KAXUL(rsNb=cei >t@^iO{OjVe.TJM Q03 H L48eݯ5!3?G~}5b+s@C:&.R.2RCoIQUU<{H rO^bb>U^Gf'Gڭ6իiJ>[<OL̋pԍ1/ȅe\ፁR=[b^U7/Oj,;+,f*BxnQYE*M{~ɵCF6ؘ)32P0.]/ͱcQٙEn0(TVK@F^[o76,["RJ!ПRXTEQ1!+:jZxyԂȘ~[fwȎ@BFd"n{8X!eEڢ*dB@ `ft V}(c?H7T#ߗoc32'BP(v EpDkHRH|oWqRȣ^4>Ox 6qEo4zR4t>t>q;VjϰDVc#V<{oW߷^7 7o>=͟|yo>7>Ԟu-w|9?NZzPM>4mVǟ|GxJ-hvmS+8ƫ4v"zn|}~Zpc8J1O R SP* 9ulc)RJ 40{=>3[@˧NQZڪڔ]dA::gk8g=5Js "B 32Ϙ-3@KWA" ɔ, X".ԨtfU v_9i?ƻ,\=+H*%Jf0HDJl.{i.s_ް5}Bԭ|;Oazwpp]k7pOoɥnYy*^r^{LܽIj[px{91jޣK͂nmVyyOuc zˈB6,㸨23y$KZx>וBwГ`aq)b f(sk Q2R b# dPٳId) zKF )TJ-n BѣGZ#IvL4l hP K XdB%RՖj7.3p'|(^u]<ȍop]r`ǝFv%ނk'L|hxAa﵇z>s%f|6Ibrg.|899aշRXyӐ{ !&v}q]-( Bm)kӥc̨PڸQ41L\) Fp!EZ8N򲌔$,Qd 왵F#m H|Y-//kCƘItWS)%Rn*;|dׁ4$ R 8iw3Z@UFR2xauՇ10(J~J% ~߆avP5g?=D \aZkk[\jZ*Ed6(@!GT5ԍ6?˒vdӰw`w+ۼLyk='8QŲ'6偽ևS+E#^|uJM Kls9(fiJx\N &0|+` 8QZjatŘyq`..9,A2HvtuxmOeAi4T2`P x<ؙPؘ($ih-\X lƭ!ඦC$uf"Z^^]uxiuu5L2PAYҟS2 ,EDF(e` H%,˲l!bUURJ( SӔ03 im 2%Z%Cl jK>gSIب0 XDZM?z 2)VbKb4x:!OWݰf!؝ӏs?~=KMJy= dǘ Z^'z_CeEe<$Wi&ܥګH *P:Qۆ{NsJfYEQXNrDlAD)6J)WkTU"9|fOw ' $"wEc iJ)]Ӆ2Ƅahq;)@H)]a0 ̜iUq{YIXOo[Pe2\<.v9qˬcu-OEBDZDdMa4ݮR=D6} k-JZ'ItL9LvU ˼&Ib!@uB: ,˔13y%6Mn)@Ji-e- ,JP@Hmi!ZõtX`" s$$$*EVG?~Gng , <1psSp#$)riiiѐRE$ eh4ne 9<1Nj8Zt!njEm%I*lkmQVa;΄DJf[q^/cGݑXq4uw4M(z, Ce ,CfUO:O:z/?C?TZFxqGr7l:;k{0̮tTFqM*%Upl{jC? l;.htFw:4MQJzJӷ_D*[ME-5q` !hBL q'qrٵvUR""RJchmc!@(d% 3\pCK-7A({NYYm<E`+vp}.nH@+mD!D;wʪQq0UIDCulu1319(3yAIwu@E#tDE²BܰDvl[R.ysX`=`f$*;7,1Iff4i:amXZ)UeI:UUcBcJIvzrƒ6Uz:uv:#2Ws7i:V*Mozp ip& #wLsȑ7q6s܇?/3Y^^vΌ%(< ,OVkss3-G[>̧?|/};rm8'"˲fY !D[ZZ)Xz9R2R1&CuQBFt( ؗeY}_k& ò,Ie8|$IYA8"hגQeיQ]3i`AZv-pc !tU %"!'qEI79yB*\)#?+Rl@2e(Ŏfp5`,ˎ=|%3 ղi兂DPJ1fԹN0Ik]UcX18⎣4.*l-JmV0L7_=u21Z-)hc "PM W6X`O8$Ing=Yox,HJ׽u{~qL0RR,Z,AH eJ)KFH,˚f5۶%@eU$IU=4Mx+D$5\W/}3X]]mێH42ҒsIDe.8.LH矲QQq_s5}kKۍCc ijj, ?GpA\s5'N>ϼnUI,(*kkknJ)L9$=w\KKK,k_KDya"b灇Pvw}wp $t:a>w߻.%KvK0&BA v\Hč)0i&V$2F*Hf^T?r&KF}gscA2VU``T"Fјy+9ͣ;b 6C+ ! #!"w8]qrM„ȁƘ05fgks+C,0ZWYYJR>A#3۴%J˄)Pb̊ou{2 FK[|uќF`omMgI5Fxd_č7 ,ЂEQ82%a$avP +q(UczKxowq;kj}=y?OB,//5 ku?+v]8Bob,Sώk+ O./=a!RB$qZSέmCg+&I ϞYK8 P[s_WS }UܶR٪;t1!Y s;@@ 3ug,*.;]ȫزQTbLCgQ3ʲ2bH x ?u(njTvXY_osܷmA^ G!+++J>G}[WlZk~O^g߿?~3~:uO|򯌭/_?ӏ>O*Mhq;nffa~ӟ}Cy뭷EQU1&MSc }ƛnOow_F?яo?WW6"J)O<~hoFn8u- hѵFa}gSԻe ֍F'oᆷm'NҗΩo뮻Ka]#PJ pw>gE/:qwO}E!MEZq&nkn޺/33;yP?}pb17c4ǐ?BJCj}g A &Dk b@d4{}&Z6:P&!P5 y1+;11+@c*r l,5 Rr3o]d )X^d`PTVdS*"+*@hkle+Kʔ*SjST:/ҙYI"]Q^TsVV@ !QE@U:/@VRXYYi<4ZAqdfӵ ,ϰCλ?/^cWU???7K~c{K^ru 覛nz ^},MS&׿+++B׾Zx MS;E+Ga)W?^k}M~衇 h,i@"7Q$I/|##"(sX,\T0 ,οٟׯѻyϵϺZRZ2a%d,n9~w|σ)>J)`LTW^<;w=;cJt㎻/YkQ@^d*𦛝ؙAp7boo<#sp1؀5I0!Y$FV DĆ 3̊R$ŘX 5ʳ,_8"I#h Ie;GP&huR2vkMyU)4C k$67։ʫEAk\dmLd(IVUffQpr/.sK[i "[˖P2@"c 0V2Q-%`& 6V%[H i|17 ,)$/{~_-EPmy]wY]{3.quر5&y;8[VQJ+}CGő#Ν;4}zyy%svnrtSsEn~"풹  ('OVUtVWWjW\qYDtRa6RZn]Օ8l;wNk}W:SǢ(WVV67ۍ3PZQ3x ,~Ak$IQdE~[ny _Bs>x#o~{wwĉ{\TѼ( Z_Ww_ˁDZ[n;w]^{K3pj{wu3mo_g>0 !VJI) "zW?VѸ!6O4./v!Lnleya(d.tdH 8g{v F02*mG rd+!KEu%VWbфͅHbqvKDI4 ef% 5-#2No785*a% K Ei+@$$1t,cl!H%2- ,3<0Cbl,_qN{ieY"CeY$IN:Xs9֪4*UU9oVBZ+~k7Zk ]r)dǏg>2 4謦˲l6\ ]1pA~_O4 ^ܹsW_}uUUAZRae.1J^+,u1EƆaF#Z-[$no, \.vyӞ|㌈J)5|DX=8qĿiogϦieH]_X 7k|Yꌙ,{ ){kfl|liH *DJŕRR.l!l.L&LF Ppɴ ,$,˪E!B9% b?nxOehh0β¥hu1fIc^WXn7ݮ,u%D q:5Z&cH0f$aD-g(Qzccww7 Gv?c?;;'O#H7x;7"@ijgO ӿ< ڤK(MX d4M[(˲ԕm6^O)6ͱϏsX`Bc\!G_jg$*ɉhkcSki&Ǐ;~f@kmfGD<~ 7஫j4[[[QMnx֖СC>9Dpw|>׿o;}<ϵi#q16ߘJ388*jv΢kEmdJAAt{7~X$ilu7(Kq?/ܢX{f"kGa2 AZ.{Le u 'e( @궏9"2[v1GYQ !* X"@"yoo=zַ@nWVV,sƘFUUZ$IzP9uϻ;ov%x+)k5\sw/Rʵf Ǐ7СC~_UU hdYQbssn'$I(bMҴYej)e . J)uQLh0dYa dT2SNrVD)w /{h. aJ) O\*aFB(. Ç[W]y,[Ue܋("q^CY^y!$:ppeu jSJL|- J (9}RʫZ)EyQmuzEQ%@)aR K7ÿ!2b"2jñ4UoCRɁLb!Zm!ETeU[Zl#+ ,ĠTziQEE*ul5eY:ώ4M+p1nvmQ3;58mY0r#0 ,XQEEv;Iw:pF"Qu:[qK)ew18>h^>?_4m:,K!@]4 CUev).l QUEeY2A2ѵIX`Kz݌J/|Tp2gPp-,㪴A\D r89m>8zŅOry$^OJ!XUiOCI$1R  B!1AM~~9Acmb#z2 U\Sgl2 MFV:x+*c V{Y5 (R8<PiZyQJ9theҤvݸ:zQ7dYҘPEq'mb}704ufі Y! P*aˌJ)[)[#MeUPu舢Uem.g$;sKnUjIH2y 1`$Hdcxdf*&ۂ0fތecall`% VUrs[]]jUkO~>wwd2Y%1?7ޫ@J)gMc^\\D4kK)cRZXrsq~?!Tz؅mΈ!p8aq?ZDbwo۶%XB91ml'}LuSכ^[1m+Qf!2Rm2#Rs, g8L:UjΪkTiaZ{ORB= l8=8<9WUݻʎ&nmcvrZ7}8k!JJc (PIFÚ )gfɍh~LkpS7vdCkm9K_׸D"HDE{R5uRYo*&{i(eQjK,"f",5ؒ0Dw1"ƤR!D\8LT+_Iy,˔Ru]+eؘxsNEXRU3:Κu6z=lĉNFE!%::^ܫBۍf\F"j 3H9^)peĐ!s>6"RF [n>&+콏HH4ҒRfDK`3UX~{JQL|5iii)/CL&F(BTQ>m13:㐺d%*;ZBNjԁй@v/`fɤRBFzoy`dFaj+CƇqU7uDbZ0+Iz @ ~0?6N{gL׶D"H$D_p,B&{qhPRY-~bv!$\ dU'#Cv#߫:Αm;c]9Pv{K5ڭ5z,YZk0X!rVUemSGJ'B{u=Ykcڴl+KH B!@BUEMgΨi3NQ !pNHc!3ܴMr&D"H$; SGs3q`wvDg0"Zsns.}ÛoSҒ"߳HPRdʶ 11mB[;xޠJ6BM4M4nR2!sK,$#"NC)Ḏ 3 ĎI RQU0, 7R|"H$D"Vr8Te1چ,p z#MMۑ8VDczo󼰞~{f= V1SU+QseELI&MALHjڲw딹snۭ>G9CUU9:y9upVR+ DxK L^D!0 'U; `mT\-8D"H$D"qˬ f&2}>yȱ 4y1U7J)Fl=_\MfY!L?Zsc8p]-|BBg-2Bav.Zse͞WR1q*fZOY㣵rH2A dFZobւW͘p 3PĮDuh'$D"H$ xX'd >Gu2lq$n%EP#BI%$oW7^Iy^Za!rW zZs`; _ IDAT+++Bߟ̴ۘfۼ述UU%0LifTlLmֹAiRJ`X8;KP UQX!K>3H$D"HE1L>kRn R47n{,pLGRRK΅᤾q1J#$sV"E7T@D`,wP)=͑A!]^G0YĮEHm72sSDlT/Qd)e3{;瘈ـYff\ X2mzmgiM&ej!1rR7.-/ ] q}RYTBmW۔Xumݽk\HA쑁=Qlt#オReL#313 RjcSއ\XDe=H)T($02PX@&dʴD@lL$D"H$'GF=਽#6GIٲ 4"/$к@8YYic-B`2\2t !.$!Ue x\/f;('={dA =_ 5 O-\;7GH)e9|KDm`bB3RBdYwAFMq-Qccm{@w{G!&I׋^m,CDV-`BժyHɉD"H$ĉ3@*ff +{ qD E\sz5zךidyl:_یgpp0Jj% QʦVq$̎bs8iYʭ{oޯjۦSO>Y)u{gm&DT53c\f"B@"8Bh)P`(X2MW֫6ov!~ӼRJ眔22k-3c1 c0`؏j{VH$D"H$U3VАInUwmȖAIk# asރUpmSw> EpLAw)'Inio}q?a&0( >gf(21{ H 5sȫ1T`rcjBCGaZk@D sB159`eD"H$Dxy5pF.sXƱ6wR,pHҸԻ1i2 <}@f6+;u[>ig]o`5qc&@F>B I($!t7ppD#L|p8vƘ_J(yHoa"#QaIF"H$D"që}HG?Ly"BÔ$gܕز%fJ; + Gu@ `DJX V9z2k5 ӑm^߶j4je(ojDDX`ڶcbt:f mD/Re2BLA9D !\wu??RJ Zl׹ ,k)M۶Ƙh!ٖ'D"H$[(ußL8 [}IòeC&[^]s G291tᙗ[BGS~)RsȲ,=ac"*.G"x*yhAYD 1͞wmf/UQBp85Zk"-͊NYRԍD"H$Dr':8 <#9!m̮aK8>2*n ġ fڈRƘm Zmci(Bd8QeG_Q`2HX/3B&iYw]X#T%y:"mc~ByķpH$D"H -QÙ7?:edòuPUX^/ϕeY G!afkM4c %AlQO\5Y)BR9%oY0PZoX zRpdZ:X`dEa]X.$m(pXk˼pΆáZnZ|[;7I3w@H}]D"H$ȇM LۭY$g~Y-| Qܲc !@`ћܶ q?8"RPIJ|q{) { gf%Cǰó-l4-Wm@)1B8Y|Ӻ@ (1@B-[6; @ ZQl:K3/, !l!rt@sĮ07!~(N o%ǂk2%P,s4q!x&38!,G$ȴPIsR)bx++7OD&2 IĂA0i?C>{g>^[49rD `,pFn%,,YɌ!֙V>q_Jig"eڽ07/神DTUUt(a1Zixg" []y48uDQҫm6`=}O{OD-Wg׹1f<EyUU1;Ri"ۦmda\2:nRylRʊsu]}"j6% ùXZu:{r =z6~xĦyC:=( cp8<D"H$wmZeYex? smv:"L&Ǒ17L8"˲XH4֚8l(˒q[ Nh;܅cg_\!D۶qd@䝋 yC )\>6޻iirTHB@Y ;\!ovaX^OŒCcW<%7BXYYvQ&RF#!\B(8QZ)BzB5E{,%;Oc1&nqgmyenZk-!8B8˲TJy^u9&IKlD"H$"'vcu]ǹF\]x߶-N@#n뺎骪A4Bx((Eeq:Wow7ٲeYUUZSN9:h% -NR*!DmV3cc)(Pwܱid@۬mՒ!qL#*,;&B  F"ӹ1J j]py{fauP4x͉D"H$/]--~tbiG>~!N?.я~4Sm#tuyyF#%7JBt{å^qm̌x[>Ζ8w:}\qjB){xQl 1rZ4a)bnS@AB"wјU9LB<ω1 C 2,y if8vgX!s=WJ鷻z+H$D߹}۶.89^cg>G?u{]jx[lM a1qXaqәAuBH`3FyjD7Gz7t>aJ[/fO- 8TB ÓN:(xDA 3,,,{[ġ>f 4MAI C`!`ZZ1S]0H)'?⬳Ίa,"˲bs٘_^^޷o_Ӂ z՝? u]Q0Fh\xXeQd‡Bv7yNsћɤiN#ZO&OB>˲x\msq6$MƘEa>F@YmFq*~mJCyD"H$[E牦rB^=A_|FĹ={K./GRcLm8G<a[\^s"n/}i[p08b-d[Fi#>cأ= d*x&$Bbf}DGTMcu@ ev,H( ܦVÍg5u]G{'QP12FؿB3dY\k 6|>~ 䥠yR2AY 6qD04M) _/U~dYǹ 4-w|/N ?j}p x38Ȳ¹{2Hȅ nmXz!v`M[׆Q;#yBHNΈue%"Fw%3ѰbSdkkmwB18PڶAzOy<m O]YVeٶNM<=RG;QX'B:D,/rV  h(,eqFw3+\2eK!J{Uk+HJV klF[ K04LBk)Q}HpD"=@/3SyhY [F.U%IE@@J]IaMVXJ/FlP 59O~UgK"7X ž6at]T>ɏk.H(ZXȋ/>ɫzxℴsNI EM'AK~$r 0+ADH=$3#!d:5Xj6d>amزε1 7LQokvظavṳmӹ<餓^{ u|,U3g[NGG/~k(+^>BnعsGԁ;G]|16rw23n`8 zYsu:7_Wo::Ňj[Ǒ1= ',.ڷoz0gNev35MyFEm}QQVJiiFa,jo,;Pe#9JfJƕGOMAJ(}N[PX.ؚKk-:ʆ3At0QQ^^^wRʏ|#y? M[#\'FoZs"_Fѓ?ӷo} _h*6o۶(W yo&]3[~W%Wv7b4n*8R'bB1&,kC3'$-\;v,wp }рϬ"1s3!QT"H$[$xg>LID.xg?Pz2z@ϵmc( 3CFi ?wpMXŏ?~ia~L=7_ț%6-=s-3e`VڶR6qX^я~ןk1zO !9->W\qc-)h4ZXXh۶-_MԉwsYZgX׭>zoͱ6H5$l[P4J={u^?uFgn@ a5|T̎TE } {wff!,ǘDĦ1a4յQ(%qB8W oxÞNv!8 _Wuo1gqu]EƮq똁2,Ed2t:Ik 'z4@hhK]Q!u핈Z>|+xʹ='<~ں4+blZ Mm!pJ@m=ɷѝ)e,?ڷ-nzc!D ɪ+ej06;j#SJ(a%̩V;VL#؞ ܼ'/8S+?sEӶJY-Dd/Io6κ;NfeQII>pzD"H$uf}h+ՄnqB?B Qf.A (ٍ/o_|e~npݰC,VFHS N9C5(d=g?q(>/ =@mmմ dGvSDA7p}s(b.^]n:9@&߆ٸ@~G.v"ƌ ۾9#x:W'7l#P 7F D ,+v+sB)%|xB o{Oyዞ~5x=?ݧϚo/Wy^O&a|a07&zmhn\e !c.[=>MӔe >2˫jP5vN9LLF C./esrG> fBF7o03a͞! &n$ۗ8H`қ/Lq='?&R(Ѻ8 Z?X[\Kc_Ll5KY4J$L&"j(C[Ya2Hu!a>mW/{KDu*3&$̰3p10v?ennϞSb0vMVǫyU?DiQ[VǏ˴Dc $lyZ"H$mB\^^^yd4VF[[e_}QFal,yO Y2g-,;+{s]+0oqʯ ֟}E?y޵OWK|ozSc4Z6ZgFRM&` ӲM7Je~aP׵X7tb yXkM2 cMY\RFT76M3"/<7dL&1z睝.b8KlxbJ`hN#o?kGz8T~Sy͟]?7ao_SP獸o{c{?y/K_Πz\/]su=g_c~pD> RD"Hl d2ZYۄJFAH*: j^j̵?濾Y_zџ^yNP=7'^R҄o,ιg>J )`dfǤyϻgmk(B}(ӊnmktK)m/8H27Uں*:DiY׵:˴mR(P9"JbpSU͎;nE =esmԧR擟4lEVk4M׋qxu{]0s8, !E-|O%߸?E+hoS| ݱ ߹qx}==n)RkVn-ћ;Mfrcmw$3{lP$P2p4H$AӶ6 n !@#<י>B3L4vRyX}_uM|dKS쑕as+B$w$+w"Z_4_]vrjC / ssE}o} ^m8Vyڶ}ԣce%rM>M< k~4R+++y^z#u&^WR|JTm810(]8-,̛ؿokstrB`ZERCR)@Dh5*g1"He.ٺD AA%(Z[۞u}/첗5"ul('!F@Tt\s;|5),Xk7M7Nj %E tP{D9剶Rmڵܩ׿5y>r9F~!}}߸Ozc(0Y޶(Q+U;J0y@ BĈ&p&CqJX m[o\\X8)- ކC੕R u e$YtdS9gZN#(=-O㡵Yh5McDdT4@nWWJiB@:П:ĵNDLaϳTSBI&hD`}@DV׼uK9gb^bȚ!R"^+cͪ!bNtŞ21sLFQ?L).@!1,"> AHmUm<ϲl4z,Ę<;<@mfJKh+kɓV%#Bb=Iy^EBP+<&ύsn\HcfNӶJ+3.KU*.֗_~ye A@齏ꛔ2^٤PcgsKmI{JK)z-ؓ?1'{o_G_hYOx ğď4W4%3cG#eُ}}>w_돟9oڃ3=D"H$n{\D $ $$fd" =C^9PƂR1ޛ<ʍN:Xg27ޯ]7}E?b?;mY 1֫Myڜgye~7H@=mf➭7w.,7|3W\?7y~{}ԅ^xWկ~ի^>m(:\XXzI2,:@{Bxԁm6H„(VQ@<Qpa,8M2yg6fV gn_&m/ɮ]B31hs-dT"3kezR|'fj$؄#u[ӗdIRtA#jyC^Wk_{gy6G`0FQMX rq_F'6僃`nnAJi׺VU BV da4ZR1k> !{\@c<&lVZ \)pEۋ1fghG߿?&/Lea1̜y]Om@wyn7έJn`04Mw O||۶vݳ>絯}^K/|pUUDŝ;;Pff6s.~ZƎ Rj|_&<'"6n~?<ޛ,$ᨚ4YQ|ӾѤ3Rk]ENKt ADbb698e:D$PDɴRM7N;4sю1]m*h 3Ax`DІлoɩ~3~uK+c׼<쳳,::닢-"ƑkeWUq*@nxx<.|nnAkCb!wAHBģdvgMI0|{WIA@!O'wpu eY* OxҕW^ٶmYt 9V3!D"Hz6+˓,`1TAinkm\/J#ꖅRJ2e6|Z./=X 1F3go[oMoRe)[rz76k@Z̄UV΁U?aYVPU@1Md4_XGW,Wpg`0WpB~m9B*є3Mg`0`/Ս`p] 1D}/SNsUm;1 zִkkyk91y}:A!:IiQcNzJя~ti8m"5-RBv(mۆ f/W{NR5i'fcl &L+N+&?t{>1hnz+RN5۳ eż׭ѺtBhR04=VFKP( 'D$Uwx7 B8uh4jv0(*A%FQ%CF35]5Z۞TiY-ff;u:*.^esv6HPyjCfm[ifM{A[dv[ #hq֧7xWjLݣ>_c|0dul?v]3h|Hu]RJֽ*qk rKT> [ϟwifމZY˚XNA[2zYm` F.\O,:E^JT,$c5$jԪ%*!\="f1{wa0t}Yț#9RvyvcXUp8Ͳ\UU6\s_DT\0LTu4e:)!:u!_nJ'Nh۶"RCV!OlTblJUdƨ'"bԩSY pzm7(Q^C|1/'4m.6lՈw|Vu39cڄmkJst='N+'cY sKCC|z. Oj4jwc(k5kfr2AoB BPx4~ ͼch-Kb2j\۶ֲUK(9TL#j.h q`nX,q }zx6|z.e1F!|HwrF9ly 64 !pU.^7{^97Lu{Ycx|m[ƫrŴ,Qyvy6c\~v8,jR(Q_[/Qϑi{c|>ϑ)%f^_T1?s[k<C)0$+$.%:<6;8rF栽oSߦu67'SKdH`g}]EV޹4S\j8e˫j5dWYɺs0/_1!d]Y IDAT!"yplN}CHu=LIa۶bkkkm~eIz\>Rm[UZ/[$<({J1ָlFDȺ>/mI%xfv1>K7\tyg5LHEuSWK>UCGi4M=ٚ]3аOeb3߮&t:%2i-uuYΫZUÃBP( ڵͭ.D+7]!h(yF-c$dd@ɲ˞fUk;7J[SݠAWk\$Nf1j>`.D'g;"F4 C !_FM)~yMy͗w"s뺵\]UU<8#s9DhDDĸs9'{۶s:q~ 7~pWlnn4M05m3I B߅'NT@}O*@t zR\L)(DEև-?!/\51UU7M7|>G뻾롇LI1exTPchiaw~/SO}W|EUUy!v*ҋ_F5kEUt[AP(1$k"*lXTؘ 1%bq733s6۫*D`^٘ 1 [Ư,Ս96{2UPbbCs H*Sүw2{@[),@֫v R @ `"E6pdȠT3ah©p©"Q">iRʵA{?BP( @{G]~'/kUR*@VU J$Bym":NX{TQ%&$5>`$0dHMugz&1)ts^9|/CˑrPzl Ǿ$޷|]Tɧٞ(8|ޫSRBW~ 3@Dy9WU3,G{lxN$Y؟s3;DAX !x<~k_W_?|MozSNj : -oys=w;@JBYGk@ 3Bpƭ3G99)P/BP( Bs2*RAǫI]HbDԶm1fwI{sYq ??8sJģ8aS{1kmCVb}KFۉYqDpBDgP( Bpz2N=9ѱlnpp9Wdw#[ y$|{6 {m>mv]֚Qպf|T7G'r`Y#9ܙ mL}n&r$mJ"ȶ#t BP( Bpc**+<'g]ʔE+Ch嶸GU-fN)ymmm6kCBN&ʅ]nf94Wޮ}%vcc+02h kzΗP( BP(&^>Ee4 -px~r,MVBA08Ez3Ms IUUճV|> Ƙms_,`Kst]x{@%J>ļ:'wfg/P( BP(?T4λ;]v\&e|>'gkD$i#Αٻqcf)! xRk}✣HƘpՉ!QLkr'BP( B^C_ݖU*F8Ϻ5ⓡrvp[V.{"UOUNI u=!" $L7ڽK']NV%Q%%1^JĜ4*21$@ PvF^.(/X ܁L&?DrVAB"B=rG!Ő*I+xkvd؈˭$^`+yK^CBP(3I4a9~qkֵM\{? pO<$"Qf+$v!G0<`  V+'fn%UUܯQMR5[DDWW(Z&k Cmsn~z`G$UVEc@P( Bpذ2Yniwf7議W^Lթ]jJ- BP()gFOL mU+Aܬp57`U⨼0BH4Tk5l^k۫4Xkrak=jp!F~}j~^RwPSP( B#-]b5𭰟W%p/x5ェF޿tuJ G 2I0\]UWRjTDP@TBz;6@Wm[rJRfN)(ڔTB{Au֜JSصkͭ-m% q7z> BP( @DA`'%{3SEV. q4SٴPU1"l+8J3RJUUsV%ғ[k#FUm{k^4؝qћ|`єR۶1Fッ9fikl;1v8qyݗO_]qs BP( BP#(GLss>h%M7\J׆6]ιĘ@K~7>^wN_l\|Y!VBP( BP(n?$De!"")%c^9ukp~ƕB_29{$ts v4ZJyAM i"B.Da176`-AU1Ij3^ߘ~Mv7/=)Q'5]?PSno@qM\i\|rI "C >&01n\򔄰}(L72n) a`n80\cQ#VZ_fb!%H lQnĽQҀ(GNDm $ 0||)J`k/C!U1A'fKTI/[J4ԭYnuuj J=IŗͽgH1(UA|%lv\鍷k޴vy"DdU- CCYٳg761]#&{)R~4*?c`&eBJP|(1ؐ5. +Pj Wc*#cmf*aX[R7~O tJ!E;^IF;خ\͹Sɧ|_z\?즗OlKoZ 'g>ĿSט qcvv)7ƣS(nECqeA WKʹoEq"^\QA5YY<&7IjpP atA@R"ǀJH/O!$}XJ)QQ7MqZ3P +-SD$hg SxA2т 34y;,t ݎaѭv\@`V]BDC[Y:zb` Hň/{kة*Hj̝`8b!zw~"e8$"$|,&("$?nVED`H;o36v-uvj:KxwfZkdkuG~'_O ;ۻ`_}|p ?iϾSƜ{C4zTAieD|1桫K(8ܯ+%fWݶ p-%l-NF;;5[*@`VbYM f`+ &H n]e1Ia].i $t(pK o+!=5Zfݑ>8,F[KVVsnWYW$UpjkY[ʊiR "(*Pߚ.6ϴϨjR= C.qs1ƾs3j6KV\_+f!CD,pHL)%U1LU!P !>j9^ܯT`y[܆3i;8{RDvzzӥK~ƿәO?'NKo3/ ~O?⻿/~z;z=/9Fl_4.r^jaHB# #}\k {؛]+^.Anl'T'uW0[t5YK3 CW RZMdRc$Q[ @ c\l̜Ū1D1 H6u~!2R(Yp=wͣAY"b%xXio;I"YN XGi0J)e@ f.E hj[GdMh5PSwD%hDz!0QXj̜L$(^a"edND1W("*Dd<=WNJVU߷}'O~[~/'g;es_l4}r~i_7pLDbU \l3;L8um4mk8rύoOДyO|×5 F kVt½L"T$} ^h ָѫW=djIeF@[j 5 ZVWFmR*=%5)Z@R6,) -CG`Xya08 2d$DLVC)h)M8G+rIbU'wz|Pd$ZI`֊x}5hkaz[څ±km _?p3 (3YKZ=TA|>IZ9DUuBP!Q%Qb Qk|5QamtNf 8.da?~g_>%ֿ߽Q*JU-6|道%d_֚܅y}|/_z#?᏿fQ!u\%D`MQBPD#KC,DP"GDz%ʳ7Zq#uEl#ߵ'C\#UU"bsFU2]U#")ލWNP1, Ք<;_YĀ &If0]>N~ 2 %s@?Ҫ^^PKZlhHD>lpIaPr` 6v{{{4u Ĕ((^+iY6j] F}cY$^(D0-&UR60)CE~""܆Y`Tj9: 굁cC==k g൧^|8o}gƣ7|ŗ۟?󎇷ggώG>zsrz+l٩0nMwq/nAK3=^{ "-$!BD^a<~1k r! ОIIB}x߉SOo_'+R4pm,~/J˩L&7TU%)w+X;RU3gNFkNO_\7xm<:>}/֏:G¯o{_|o~yY3K IDAT-o{7 >}|ֺ=0o?wj̋6cS(f:&/b}25q[p7Y *H HP@VRZ(-,2ڌ)xz@/{Q4<(T(k X ѱqHP%8Wj4 ;kzӦ u\c])0^ ;}+t-!sG4eKOq[ЏCHĞЭگrjq.=/>^cz x r$XqDn@w1b˛C$aӳ1z$z~kǟlmz&5GvE&wHB쭵[De 69e]M&}7UvďSGt:,ޛ`b^L-Bsextw3sʹνx׾p8͈ERͫ|nPɊ_PAJ7/`u/ ;:׸ٛ/Z/=7];2~? R5i tEGLHLlѨ1]O'$w/% 4q{h_<|T_n`-E2L MRC.T`0nO۟0t#r \F=vN2TT̤oTr.ًǟC"/cG|GGhwNaFz~AK/tloo_tk9{lA$e2337hu_}>զP(I Yq̪eeuelQ\Q1hD Q>aN6#^Zo͗׳%T|9]iB3xa?~60G$qNit j:6n{}P%s1'?z:QJ\[ͺ/* g,3[;͇~S?C٣I۰=0'` STЯ j2{Q~vQo͸c:XiU.nHeaSo?s$Dvа)?ߺdK{Ug>k~d8>>RikkJ$*I%ȱ-^b( g(ʬ\x2wW={T) )_w" \Y.3=rz)v4$Rjh?9m$Qi'唚V}fgAYi9sO°IZ9(EIffg[uHeN.`1~99'oA" R.oDHbԈ]=wE%zx@Yc"<"@Hhm,~&=y PL w4Ȭo~?ӧo~gܳ; ٔ&/Bq,q ۆf¯U`JEYEZGn CU`! ^7HT9gWՒFlE]hӍi#ԜXO` @+C1o>*7m W8Q{'i5`vRj[ v:){iLUA1sQXW)vd>LXୀ  $bFBAqQ:"(E%烊;>%VH 1`UDhh'T>g K8f5/zMӜ:36Mwٶi._>sS'NVc FwW2>'P(|%/285)M"DW"6@Bu K mA# l 0]oyRw~bzBwB;0jT%kNqXcHI!j! 0L)ie1 qHNF5!Ho0Ko'Um;0;g*" Cy 59 TCߓ7#Y݊q "b w}3ݾXih݅1l[k!CEDH"tD"uF8#JhBL4Q ftoDJ q}YbR:3QGfȦ7 q\ǂLu޷ܹs5<|K/5ӧáOZ BpYn{/\][pGEv!3KԊl6QY)w7Zc8&]ujzб̚ݵT1ZM90Dɰlll!FaUxHDR&{DYI"5tby+0) :ca6o9l;D@835ʎ8";!hkNlcE@h!c|u^*J:2U=dM7}޷vg;qSP%d&UYl~2c%C%jHZHWiW)U(?ǫ쇬@'RQcL0~ ӎ)nRWs0cYKǦgZ5Flb ۴>G#VB9T R(3MsD SAUH)MaRU(M b"M*]3F/Wgڿ3??nb&#DU@A-$$w @U!EvD#+2G5v)6^MB{nu|O\o:}+ј"KS W_ZFvzx MQm\y,?(@W)߽V]EoȨIa[Sd]ǑR䇣/z?^V_wt;]}~tgn6F'םs̜b̯Wվ[|9d@V:z]"t`PGC|<___)fq=%% >r1jUpiԻ xp% n61]q~8T}|nm˼΀HXL&ҙ`rh Dy8K+ޤ:M饗G7zm '!XrţFaʱ‘)uɬCmsb}}y_~Ц]:J+cDޚhZt֡QU L/ZMV,306sT3Ⓓqi^AOK.hQW}̬"ҀE;#ax0$؃aU'{2"~}Ḻfl*:QDH|>Wanaj ~g#=,q5GN/E+HkB I&"T[z`,T("D)R>,Ϟ=eV90& !pشA5n]iNb1֮-c*/>D`Iyb$QYP%{zt 7Y@K!k($]Xdb@@YaGF !M=Vsش$:I%U ]5P (r&Z|{2qmtjwxZR9J鉀 D1xp !uP챋;*+}W2a$ATe˓hmB9kW ~ @} ^Rh7) d0"*"j*w69Ƶx*4Գtx .PA|ȇo v%3D糦,T1%?R,A@5[m2u=sd#@yn{n>̋HQH4"i4h\裏s}{{{Omn.n'0O-˲Dzt3T<G,-| Myn^ѻ1&{c&n">t w6㾉HK/~vI$ObdQB #B$`A4QFFHElaKOF;";0K4K3$ޗJ1* &R@vc<'p4E_ҝjF:0 ied^A&ԖYr5:Qmӑt)IҶi#[;һ61UER}/|wZOzguEq | hXԸic4a͹_|l,, D>'Ϟ"H q >-H$T+b?95!FB! Bg&>W#]lZ&b0G!"q`4͍b/.E(=JJWn}z<ʹ.'wܬAk=Mhw7WVb3{dcg+W~w@=$"TB2qw^}PDD@HDSxϙS|{goxG@ 9* @m CMo}wqШ$V~wo!:eq& "¿o}F j M2YϷ*!}󖇠\mۢ9ڑ0(fb>V V[|w$rU;K 0=FN1! "F/V$R]^d,S@L4wo|wCY$Fȑ@Pe'Ѐ"DHPBA+7蹃̑pVE*꭭HWWW;SkkQ81Lvmv˝3P}cL]׃@D|] JoHlں Tx8\gH (v K0tU ƍ}Gw r !D`*f\UmK?n[I$(0)01J#B@B!amQ,q+Nm[o@@'O:Sd 4ck 3m 5!`6Zk qtQ !!~ @.r:=[iPѿ,5 uB ! Q%;v`{ˡa  @%lojYeݽjQu]?K[Νd$1F)O;e^ku㘹mX_~;~c~^g"` E;\7;\%*"Ɓrcbbb rdA$2';izCLfLYX$(5GQ!GK6C8B!5bVhۣ-;8X2|)$}-EH!hHA d ,11m@JcM]};g"A-r; ٩dHՉ08r:sB֦9aS/ !`$9}1J4!Tj:H$DP҇?k&H$p[OZh4ک瓛Qn)47~-x~~ ]2&}֪8zz'k}kx ]fGĈGDLA+ֽG$IZVRԚKbf)X(|{ TQlgV3fZ7iRʫAe>`Lg \ng6&HB땀#̝xs=Q Vq0F;͜n޳ Аm¶m~Dh։-Jmh<2p*5XFQ"զ0/#(g*@4N5bd,L3(=t[Gq-D۝=kRa@H"@.+,i@l*˲N RC@"bئiv{eYÇǟ7qWVy" r$DI,O(YPssOKmFf@"R QxѤ7nSYdo:VFiUdeځqȁUr k Dif3KOOsܩb;-Ycc̾" 1(!:ÅJScLj/nml>}|?5XɊ̧E ;>K/Olfdfk}0Yƺwm>7~7|IC^/'^/Me[oҢa0k|tL"t`>_Bl4먞YԞg 0W~ޛTWA\JǓ SܶzE6Z$Qn 'N?ǭICyz~, ,O߽4 c.^h4v67666WV&k'Դ10sq|7\_"fFV׫H1l'#ڛgI%4Q6x J)'Sos/Ք*U5hлw?x͏D8˾_{W/w0>ty2ṗٟoݻ?Cz+?O o/jhKdOMR$Ą]'w _5 ZõEMM&^f Wyir>.byLIx.rDq/n],O BLrb \jl8'c3`vcʬ{t8@H B>JJᤣ;qa='oik+( aZct8Q1P`%NS8zzzcDg4un,0 vGb`geZl+TZgYe뺮/^ٳ=|>ښL&@WJ)pWd_C?CЭ$Zj[eȰ!4m kMk^Xk1v{+N{~~5/ƫ,{8h/04;U}'.0ad;IhVWSm^$xwX^>67cؤk/TFy.o&y6Hdp U&T8  EW4,>dls&z`,/k؉=?֑3!%(Ъxl(qjl,FVz t x>}2 ;d&R^Oϵa}aơV5*AW>.=N  #vZeQNOOs!_JMp$ːQ Ecdf"PY9@kK].(}x≋/9s{/j:y> $k;H[P: ɴa \ 4_{^d1Tm$Ießoy{}Y*)lk$~ۂup(sw!^i=+.A7B t(B @, @AY[-e ,+T[b1fs\IA &mg P:lRӢ>䩧>T;OEzNk!1q1j$F}s{zznLhsՏ>v)úZ)` Ȭ"FADD (u]l(DaJ 1Ibq…p2iWr7K`Py!"F.tO-@ז3)1+I$"EhҬ.iU٬5VZk58`MÈu֊H۶ZaNJ.J0I Zab}?:ٟs>êtKT9qꛩfᣱk3\([v|:טw>n) iËB"ѧ a[K7~|-﬍`G00HgH $ lN,@@ ,AxY!#_DsG̎'䫈|K1.8K4D sZ*G!E 5L=JvNq괪Am z &uRVfZq45Px~W6?_Jx]&AM|+ !':Bm5q` |%LXxCfIESRϖfr`+?.zi3lslqffmT NN>cl$E .@ /\F?݆CĢ(4m۶i,VJ>{&sm;yMt7<@@Glb1(Sٙr$yC Z/{MJ)4AKFgfJP(Er۾yrIw՟=^x.p.ZHOj {W=Ty{MX]o&OoULJ> NO9X>7WOsA= q,8l2T@i{NU+k~H6_`}IBS=HUiEd׷ZuiZ6u8}2lq݅N*86"C0S\MfZsά'w?;e@&躷╽Tf/j\)tt(1Q׵sGFx8{۶ݛ#.&IfV)QX)EJ-L.h{Z}:"H>.FMVj"DQ$6c=]8 (]ݝ ]?ۥ+ٕ޳_؛5tC̚E>ɾc 4?7E ;}?~ƶrϗ}[jΧm$$ssXz Hƅi Apqik`GTZih*n2 5HIɌ`](tѿO}G퀦`QrtO<ٿR-H;?7;VCDŽJ*Gf"@hಕew,Ӿp`@ErӍ4MBl.\`W3;5Εʲ4/RcLV,Jz`yv;D2FMq.es2nv- GThZ jlɊ8ZizK>j=! '<&jr&4gz6s P%p±ePa uE8!0[p.Z\t+Qea7Gv5aDBF Y*Ŀp𞏯ԳAܦFD&b2l.43rXa9x~́SznNBp:3JG4ɠZ{q3 4o'_\|ʉ$_|RAj_OϵV[p=h[hcnr<\tp:f|pNno!Vk#oHzXȡ{U ""a=(4K uՖeE11z}ݶe]k4"uFطr+p)ԧΝkp2nܷ}WmH0$3+D2~W~^Jճ°a9k[i>5f$;M1 Wkލ/z!AJ* 2`֧[]Z "4^l 9vϬw.Mb\f P׾ 4) (Q8:6+z|Dyq lБ2DrE #,8WfDGֳ`k0AeZT:8#|`3' 4Ƭu>R[Q4xERC$akSϸI=wwXfFCMTƘ&!:_eXD`mtX.9nL\{em^,Dibqis#˲p8AivrZk$tn|߳;aNߛ$Y84F" "}$эcW0dg@CЍnR &'jMO @kKE&pbN8'*ݝK1h Ж*R ls D ]rE%e0*gO]8q鉽c*HHI quN !b\j_lrM!AoWey`TY=9UuThS^~^{\:%F궲;D 1vtF17M(DP *dp'Pc@  >$*@ CLjIDb"6Q1ƨI!ucٵDr>i:Hdlth(w dBTIDqFFԎ5$@J  9YCc!mba 0Q ƚ_U pAۼp ɤM6ڲ T'kjCd2)jFEĐPj22yBW>Zf5[͗/ i!:F v.iwq]ڞ[AX3@4Mb~_\^5Xs*dK$+b4jc`qǔIVO|p)ш{sM۶"={zoob􀚀@uq|CtxE$*3"/3514I۶ڢ,+,;u9wwJAFeXO]㸓 FiW{%Q, cgk 6! -lO8&A3'Lx q9h¶QD*I8MӆAZx8akME~LpeD[Ly]V[pHuN@;V~ksOfn11uE;ܩߥCLMF. ;_pEs=-Aú5h[25ɋ;ߦ޻9{CHV g E'-t*u$]J%.1VyYB-Scn̕JA >g*t`c‚jhS@v kYZ*Ub9[mov%8*OTKֲ?'O`| ϨUԋǓݛ3beme^WMcb>m,Ymit`W.9^]i&xg E9?MNaOR ;0^ӏEDR1FctHpЃvpM 1umrx!⌧DBJ~։(ف4p2vYvX˻4UWee"ϑ' TVGd!s}l؞gLˍw 1YIZ5gڴQ7&7Ǜk78z#(uMh4'du]LE0 sO!r>w8dnXS*]=F7ѣGSj6lh2Oe~]́5dcyjˢuY#l @"#0cqwzzn wrXCϳ9wf  SQ,Ōv B8 VD!m*ټޛ<Y jR @$e Q\DD줍6 |3|HxnyEij>aRcq4aN xĶi"eix Eu,a> vU,D!#  UqC@YpU0K`ۆ^/xO} :l UpvkCVXOB+V #6C7^omv IDATc0p!6Y)TDIB %R(A/Bb+F/R0>C/p\W"5RYz=:Wa&yYbbUq(S@4Ki>;LƇ蔬Btqrפ'b[Clɢ]2ƋŢf 0(=:s>IJlwHp *"" BLܮu${97-*Lis/m,AAt"ꮰo^2e ?#dRcsM]mmh<ъ1&&[ 3pgȓR#@>q_}gU߀+Jp(TڧRr6 sk]ڲ(=wequuPUUzc\8{}XhE6>{n^VL" `r|s5+"1ri *h^z䮍5 " GbyaWR38ůuaNwOirXEG\૤ IRNaXEqNq`c^AĪ*6EƇ?頻8kci7zUn+jfWF"Q;@HQ j DE 3ZhUp2,ځt3znB$1Y}ֻMMmtM7Bc4S6r$33ESյX"",L^y9Vx62?p}#+J$ P2ZGo/"DDR $("M@}.tXtx4֦i:J*,Q*J)|Rl߽Q*]BrUȑ"W9, 7ud׋ urҲBǤ *a$F|>wMmm&˲B?m^EBM D0.OdT';q .}.)=w."00J(.0E0j`ï9тÖBiPXeѼ6oy9VF1eU>k+ $"UUuw  tX@)kT^ :I,45Ʈ1FA$"a9 :bṕ`WiW˵rY48\>P'a @L7OmjyazNJY+n"E=MTdIѶTޔ==Lg"~ W9PHX׶?c*!U\dI )-NċD)DRȭZVo?Q֩N[v;vF y_>YcQkrZy &Ҏ?Хa+ FS`3q͍^ۊTʹu~%X #`XJH )F$8"â$\:ݽ#Ѕ[EjE(p3// JzئNh&bj  T HI +0ZEEjȨo鷧Ћ3 .D.!}N`'lf^d!ޱH9]ZF@*W!@b$D00Cs1RB`#!}jB"BMryhk-4˲,:39c}(=곩3#HֹF10(UJHu>&V4t8_'Sda$s&dyg}Pmw q:*ֳ۷876 bO!uq: cmX1Xc| H*""JPf0@ EQxk]o޷P(9PCY䉠Hg26f.OTU7ylabQT JVm:v$~綞&EQse΅뮅(*iC `U2ںO!d 5W\X̘AHFj %Rjͼw3VquW0$Wۺa"=ؔ˩@4%'@JC״de|xY~ߠ VxۋXa-SrRt;^A x@nPS)Qf21R_f/=֊:fKϼZ׺<*2>?NqulKlqMS2s$$oQ:Ue!GhD *Ćο6eb*g\]EiʢR^ne?ݳReߛ1w^Uil@ȤDD ʪ̐ 87 )lZ7$ CY~@RbX Y$Q%2g9(UGZke\Q[kLaNǶ861״Iy@Γ'$iMʆC B50U `B$" 04&֔TiX$C(UUXue^,b:1FkU7)w>&93YA;U‰8WaVk{zjje4w~LѮ*6.Ξ|5Zf~]qY8Q6m` 3SȒ2yd5>D]af++3BQ}4\WWTU's}\IۀV"W~ jm\?:[~ KN"&7xe`PIb+!!^4iAE!ja5^RM1 ׏?t L*5";8R""IޕIWl8Xd~5Ua{qp0uS?~YAGaY-Tr1SucL)/s كRq23" smLFE+RcoS.Y&C0;VB#օCL() xʐ3pPYPRG0- c"4*T17.i{HA$"^NۥM .MX޼ ~lE7n_r kg^UX\\<0+iu*c8|ZX2t6]C[r\P%QP+=lXmP7xT >j10sDdpŀH$mnh:}i׭K&/ Y&CH!69ĦibuclDs6M)^N:_ C{GpTbq*)B'FGq8.[ݵ[K2`ol&܂=(_SE=ٍݨLF] vYp`ǫ[&MS);6$40^SsSN'fl$FXD jMmP$fRf(RX9 f*"(qx4 btNV &+̴M2eʔ)SLٹld,9E$7;;{aZY]J)U$"BlUXe#td~)5[,m%slzl"VƘVk5]7PUP !K0IGPg.aYszc+|`i28r"c90"1֋I &Yl"%zrDYNBvvWsTvdKw!6c-+cW.Q=q|ij]6?s5;8XVhuOd\*?ֆ(ܨ햴IJ얻Şa%٬,t&ϰ퓃MSy$49@t=ܑͳ!FUZkq!9҉ןB03)**5cD50,f㗎gs fERfst.!u}IqDFs8eʔ)SL2ecKfSud|}se 5)׬@l2UPDaAřJǹyK84 &.60 6;'m97-TEC z>Չ[m lccDIG;b搜M3:fVY](Etsr.;dW_Ήys|pj#BztUKU`=1Jqlul.Y?pTUX!ɣfX6i[IQR6 FK;z:'JܬtlVNiU%V)%,IT8!?} oڵ?}w}ϿZ\OO-ܙ9̠kb!72̽'"ά,U/;n|J+sJ^`QZ,E:_c\,I\/P^׻&OT)Md9Nܿ"Gkn6qyF&ސ\[Y4"J)rPY; O/_険[,$3Drqovf4[6EQQuƃ&^2eʔ)SL2e簵 )z+pj<QFt ;JCJk97?q(A|D4IpO}!a${nDmU@Ɇ&ggWɛoOټM\$ H9Ȇe2T[af댵W|B2vLԧ|z`o3WK^{G t]O̒.Fw.Ͽ{ ~xw򛟳؇oc':{n|wW>}K>os~we_DW6*Y 0S);P7W@uJõAჇBURukB'U"³IIei@UlF=e0<ֿt3D$AuJF.Lcc]j5^6 Z+n; 5fmcBHrl QL @I;Ć`P%*WCZ{&b;7> |ߛ=foz㧾5g}kGe/Ǘ폾j=. LyŬ?G[Q+/7k7u7o_ˋ?h?ݿz'^{H>ǯ?o~ojqX'U0)S.F)TկyڜGQ"*Ui#c&ю7a]kɵY-ІٰhQflq5YQLSW2ڦd}Y;q?;߿P g"x)SL2eʔ)S.ʖ+xۼ!X[KF"7) <=-? ""X>(O@JYD$ 2 ,xۉb!ΠP"5ek! 1aH iGk23ɒ@hJY!!V6bL*0C0wP~h{(V>ozQ&/w|fx- o}|I#)4?_x3f͞k؍,S宿̓󅏤[S_⧝sr{Vn*o;zcy (}p\:k$Sucʎ,G mNCz hR Aט0)l6g'Dl#Wm5%;&'Ls[»\Qi% RU]߿ؽ~2NJM=}L2eʔ)SLzj8 g""y_>ޛ[FUlTX!!%RZa=m 656LK/-NMXqx}LJ%GO&gْl5[rjF9܆ `ņC @L]a!Pˤ R1Ģ %2 ΢Y41CE$cu= y 0Zq4MBt:FQg2*Ȓ11(,;l_89r(j_бSw,:F ?sjS|~vb ^OXKd?g?wJfEwIJ. iru紼k(|N]Z<|s=+j\2Y %3#20Y,vKոhR@N,AA;-M: =ݡjH ۨ"[ ^ɫ=;3x#z)Vzv_pRDXLhUgWXaUW ezFj\ʹʸN6*׫\QߵɈDBZz;d-DwziguCp{ʵA/ `gvծCNO@P2^qh;,W<޶ cF7"RARkoȌ{m^"ud4'L_횝A6 'W"rhm`gwM?9%sz> ]xKEoa@]=2uV/W b59g猂_'iDJmvM+`#~rɜl=:RƃeUm ݫ*2佯JU˲R*2ƨEQyj[a0ك!DʑYM_{ē{][ =3/[O/ۿá_/(zpe÷~_ŧݾ\?U7ǕtB8p?׽ptp;}\@*`B\vϤXmvK? '>??쳞eo_̜<ŧ?o--av=G>߼ou+?4;qϻ?U? o>޷=~sLǚSʧ?~/>o 5iǁm.X|)SL  o,RTMb(NzB.oMT:{E1<&!̛1];Є.I[^}=B`H0 F;%5r^` ): ~g4\68.?Ǘ9aD趇WLjAO*"hA]z^fꬷg3\qьV;r#") xW#'?ˈDY5 =(Cdvl?rq) u VcV`R!eQzvk|YTTp%zM\{N^>yh9㺳I$SN9:NkJǣZ;휓=~vWzn >cOo<[^:qx7~͏si?o6zr!>Y?cptn,KoW%~˞So/O/[+7~Wo/WLg1u_Oyo.S> f~)U wُ)E1)%k-o6R;,.E;vCT̺GYu3 Fdɲ3k8,u j79Fl5>~0VQH Gg&AF~05JeID)t΢rqPm edYgp>{Ke:eS"!۝s@MzeR;ύZdY ` b/RK\@Yu&jWm Ƙ,9Rb0XLQK.iDxoLIY:Ylkٽ['[kN8Nr_3EчX,]i=1f4u:wݛ=V޷'Ի B2Aw|jg}[ :b ;9l@׻A:1'^xL?~gWF^_O4ptX.<){帨G۷v }x9: RUS$ۺ~5CU7Z|5@/.),1 e^"",LdڝMmuP ,Ҳ(0׶[0PmHsq @dnmIcRPĔͬGAۅBb|`hjʹz^KO)6빢ji2lۍsrްi"L-9BEKǚ D^=\ΠFB^wy!Fl` c#CeV5\N @RfNPnV(:1g[Z;|[z6!<{mC*dEve;ɪIjQkD>n>)ki DΙ.D;nR ;̏djqضH13dUUM 8%.LRRlL\*Džcs<{^{ ۊц3|ӞJ"ҺUann.BhUU5;;Zs aGi83S6}C3v8П?,qUŃݱ lV)rDEɸ`3+:prfb>aȤ^抽lF+uBy; ,;۟7tBQ#k >g"WMfr"vlwnHVD10s Z*F'ݥh> 2y{d_ڝ3J PtS׆`P=4`6jֹs=,+V-6La,N- ,. 1b^qfHú1:]EC̘5qB7إS"ETb;b薰ɈLhE[\S q W'9G}[sd_ZZZ"3 !hX441b#yU=;XBv9umiEyԮ-"҆u΍Fv;XtP&`OFg{\ٟO:3 Ni8{U!t*dgL-cڄ<;Sᐛ6Bx4?dT5=_[yaحgum08م60b׮LhpۿomV"Z Vr ["8wD`27@6kc׈ppo{W 1wPD5؏9/I !1Y1 Ȉ ծ,`гRE9aZ4 Y5Jâwvqq9t]ۿeqg7CdY,z;P4fw(DSy18Ee⨒9Y qvM7u8<aWU$P@93$IVnij1/jIqfqƼ]DgIsn߫Ц}N+7KP //|-)֋;gds!n;]&o͇bR[jk* t1`m9[J[vrZOuIiwsΩjJyTT2`*z0͚T6P`"'3W Ұ{kH XvB8Kh3 MՍ);@ArMӶ)V7DЦ2!u:e8wASD@C z%lin@ݵL%TKz~j1"B9e6m+D0[JHlC9%>##>Bƨ.trns-y9肷=y'EK;W.Д@ 6$Džfr#-! ؒ 0|t\QGgiMDMxTZs-[v?9% (dA6(+0}f0J80{:I}5L@+ľș!@E}[!լEFp dgC& ltR(A""Θe0'͉UX[[{d3:@I@$`("i3b- 0ж[ꆜ}eYg͞ªzɣͩ*.y=ܩȦ{'#I#"R, [Ye9[n.e(18Z)>N0 HA0pI$}vsM%~`%(}prV.DZa.0ld3 &CRBc#w?_[8ۦ6-m j v' S~ '8K1u!!xz5;]j"!l J"0b4lJp hl9 A2AT`5++*a3`.rM?M5"cr!g*m22ǺVI9-lҳ/Ws n!<*6eʔ]Cagl* đ}`m wCQ TblRJ"1^ KHR܉#qQUw]+JI $C?N 0rJlʶAj˜#@ʤdDyr3ȥ4Be8 9M Ƙ[Edr !Mf8e1k62dgE6>i2)0{RjB5'A@~T; &(@ 1,Qc:(% ~R.qԤ5$=@%գ4uA˓z!DT22_Ƞ0AECNY1" Iru逛 MX ,sX&p䜭^h*!K$"UQUETsȺn'!4V3"_33zjTIDE ,/TUUQlEfI4%(AJvsi_,B61qSiȣ^0 :s͜cWBRSdT40hL)Xl> k vkKBɈ}1kc $Y"TdiC)X Y$+v $491k( v Pd4}kɩn嚘_QUoMw9v6$ƙeDZ.jlL6օnrl75qM2S?̒QH* *Na5NW cN`Ms^uPj&? ";,E$Op( Jn"\r1sJ6Fsi)Q/ &םv@`0ȪOL>Q;5Q#'vks @ KbQA x@*d,Zm,G(;Y7⭋Hkcr,T@d1hhk  8G0&F}cb!0Q4%E@"hCL9M( ;6Qַ M P020$HsDljS@ By\:Uv;yxVvlU/1Fg>qql LCM)cL!tP>R,s_9볗Kh8o|:7ǔ)S9:}h6%?QSX%gn=L\M # F!΃6Y .%5CQW#c-jFJXܰkA`\@rQs}ozs74"C]%4<⚙O.$)Sakw~KRtSM rVuIX nQ  ej~$3m kkChhQU](zkF_Ut+ )fQ3UR>1)%xμ$ ҏ󰶦`G;6L8n=H,@#u6@2HSnq@T@#MXٔB Pg wM_q6OyLgv60RpVQͪvTM7\-hM3P(6=_J}.>u?eʮ"}GO7=1O xvVWoݵ (X0~Sy?O[W ]?|>3c}+ [vaݽ1 AbQ>w>9/_N(rzOREEz+ xz'}K~OsU0HB 1yW0]ke:{(\>M RY9l >?Qs;HĢ$B"?TGVpT T 18We6BDc?@ bژtY)fI@Bē瓗g)JG"WX&p|>m96m_"mboߍ0Eh#"I:J9V 9lI T*m٧$6+7 [P LSXFPeԷ.!7MF0ȥt0;Q 2̢NcLyx^_?|ǿg|W8r Ej-1c#!!QљҎSZc{Fc7h `DDPH!u y*+3k~W>o^Ej 5d-*c4c "7:MR:+0JBV0T Fh@ 14#:Bd kOҷ'@ZFX1f8Fy.6 2`qsw~=W}aW|k F$fGi`@{y+6h`ABnNbAՠ1q^An*TG5$CbnK@j!D"prv<c5P!"AqN<+Rbh"'f3:kpFY Hf8g +?]zs7׌;}k\!8Pi;0AlA-O IDATCtPRYOh{d@A#5;~54>$2BoAoT}i|7;֭??m|˶CE㗋::EQJ-jۮe2QoR)kz}m/xEði:zݣG.]t޽sSNRRJ9izGɿNT'3Z&6IgbcsG2@!3)Yed2$2Dj&88A \E@mKByi2|CMՙ6$A)`s#,rl)P <0 kV<] 5ʜ363x@$i^(^ළk3Ŭoh&CSo箟6vΔzP}] ;sX"((M;z~5x$9Q]ܢq|尺&<ňe9m`Ntqo UMpЁݻu}_yߘyOz?ׄ$?qmw,zcثǀ9/_4z~=w=y l Gt~܄7֚aK`O2W[O@Pբ۞h%R Oء; 9d_yu vЙ @MS#-7J?q= fȈc|#HCqd 4'yL=)lhpXJ}y ٻsNNyf=7/_O}G^p"Ф\{1ڣ]z<َc(vP Daz:cd\sD{u:㢿/Y٣GNC=!@B.{wr䏓2kd]e}s@Pk[k!_> =g^mߗْz(tѤ|fJQp=! Z \_W@a`Hi_d\cӯdE(,ڽeLGG:khy%'w5 -#`j1|5ozt=F9DJ抨ʖCT@WytL>K0VrtϷv,*=ES߽~;aL_%B N<>]>9` _$`uF\F qG=Cvg㻞mǎ>Ta5cy][b#U} wp ;"]JaMӬiQXQJe !B;F~ccFVqBpqFȼy]%̙3gΜ9 ,?>{'3m۞癦Gr=LYe6FQS~&kYH# i1H-,'1Vx.lЈ N VnD+#Ts?%,42&ܦl$!@Tja1`RjCHc adx cF(RH4f1g1;7m2E|¸Ҁ$AaL%?c<  usPBHMp&_+9q;w_loxgG˔LkZμ??8>batOt޴qͼU\v[gLoO>5ZR^Ь={qA) DJ绡(0\8hzo:FZbku^{떓.;|#Otuk&U+_N/z>~窾_^{/K+cfΒ}gپ7M}]6!W__w9{s171yɢ nki$ lzڳ䜹׶/]p̍~$WXiO[3kF~QǿϜ1PΣSi/ws>}cq/v !x fqE kPئA Ӝar8j:p)ؐKҴY^!gz94 ё/iң>{YS/5@(:TD&O2iC4M,kߓXQbC$D rs”1L9!bjJaeMԙʍ1}׃jV;u9$XecufPZ\ݺ, tn]c^}̭;-@>xQKڟ{Jrk>~%/V0ʐGz.'j0<!]~] F(d}"jA7'.=hΰ$5Xx.[3&4w7C1 ˍ~Q)ՠHaXt1 S֯mgn(uZR~YLo<_T*!gbuvUFSlG]:∽V/IQ=L,ݶyd#3_$wQ J%w svg4~F;M ɪ-Ѣ|kE[mCvX %ad[1U1d|eiDKodqc|0!eJ5t?y\2ˆ|1$bYIXӦ:y߶>yZN}Ԩ^a*ٵWݻgy}?]K~^atr#GaY:|c7Ka YA" `NgE\1 ajb&(uQZ}[RaaN.I$G/:3}JʴX]Vm i/m">?ִ -oJ6@` ! vhLI3U*"2W>/ۈ>ua+Skj 0* ))]tE?0ץTՋ2 kL@!m) >uԊWo܆ 5d@ߓ~2Y9[Fy:m|* }. XzV-c"! "MffI#{N+7㢮iACn^iX.c1gTmB%+6xR6hJ 3"? zVSwP+rf1fl۷ BPed͛F}.]}ݜqeY8n޼xGb;{,EYTHsm [a0u8&)8l5nGtc=7b!ܨXie8r$37 }dit}?p96mMEJ#dQ7LB?؉Ȍ-Ck|iD1XfN48iv f~i8զCq]%f@DpHCVݏx.t?x GYk[yNnjlG. )IL+dG+[W&* fRI/ ӟXdBqʔC 72$GAsgE#51|gm׭UES٘9  Ԣ$REԲ.I,eF|jSZ+ji{K?TH0:ɔ\, oEcs*YJhׂPu nvӇf#Taga\H֔ox~ƛh#p$Q"6} H~]uqÌo}j"C4͘5 /qt$j|y`bE6PiQ#j#֭e8P W4EirǪRhfVU:! k孜v?fc2kw6{}#HXb ĖRQ9An˽X(^&  IxxuYx 3&ъh)􀘆'q(,jK!RKrӇb$3頝X*R rfyEn%}au[0hT'#+Qt}fQXa% 7Zjv WA[:*K)'Œ3;Gc 4@R#"D0PP9>9!]jI먄So%nFAAk29'+^xsuƘ7|ub7\WyQ:SÞ ` A€&0@lCA(t$yq5LDo*8rCH 빿t L(JA$6XA53+ l1\v`,8(zzTnC4-} 0LO@U*./lޅةkch)Mnܲ W1WQM(R߄r|?b}gw~7yV~)cNNeE"l6 4CЃ>8uH$JmzuV Ͽx[8e|={%7H  AS%IBxQ4P*s,,s822mX"x YF0)Bui)2-"q|jCQO"饣A~±(7Jzf2vHeX"hQXֿ;6lFVF#^Lfg=F1O~A.P'0-@Pzkz{Vre9 {WCUջhZ*(5nocF'9UP. ?saI*{̕ s UF~%$xgv0Xru OYR޽{0qMz!KP6-+ϻi֞ǝ~.T :~fCǦVFȠjAeOuϒB >]д/|dS1-F ò%Ot3,I`ee6eYhЮ:|o gז Qh0+Gv5"r!{͚7W%6cGS" Ԁ`W7w72xZxtaw+e[_R2|>tRlٽV<,ٶvVXn(I45$ql>Y=u<~-ӓ.s1rvoW oNHodgsO]cP%6U7$qJauT(ZcH ZY )j 3(Q٢O\0qmF-mHq  ͌,Ml*^w3[ M冭ܤÖ=Ҏir0x󴝂At0F"2lqk-?j4 ́@ @ۢV_TR^G(ykʤI IDAT_$>&l{yzY{ Bؑ8)f.ʝF@i*I {ur5pa 7$hc>\ @Q{OB,Rvu,P^S9W#k]B]/ ZeNk Ƅ_4lBS`FsY]{W֮|s\_! & PU_GdC4ĔMYiO7hĖYGƦysc/NƬO>3wpg35mףS^xU)]}@oqG/=5%ϝq/qSg&||ŗtȔnmC]ϿTx&/A7c;쿉&qaݗgMxzg]Bk޿G# >8@4\}1fq/ԩǩCgMtWMw򔈶w](QT˲w;tvh}yYFa$ ML!%6wEA‰]LCufOg80OϝT[+97Tn{tg{(Ռ߿eVk- 뀔8X d}T!A7Mp3K״It$EeĊ,9C3b lRs1Ϟ?Kg=}xs#nL{^&8g$mǑ/m3W7}ڍANPk?":J'WpF29w}[#!i_vOIiu 7,~>QVh*H+Pc5}ՄͥkGsGTtب5tQQj޺}A<(!u-ewtivo|o4ڧBkАetD线}u]#n#M;G\}cj[H)(lF>6NG:ɣ_GK%82..ǃ:yA} Ĉɲ !4P їBj0԰J!>GUMzvE yV}PT8ϽJZT8U{ m_^)ٓ}"6Uaw\?/j;Ens޵Zvq(( H#4(@~OmtQw?oG^UHъnG8Ŏ&Jrd Z)_M;Naxcu[qNW6^ӵe5FN#L)'*2 bvz)c@ >w7w 7nسR;GRnk-yy%R 9,h*@ӧR R* RJ!R )-Rqs)>h^R;}?xZ2K.u]RڥKE !gԳgϭ*r斌9>zL&U?ބ'>{ ~SqScOgv3o;wIMNI3z|ܟ#Z4抜W8K b[~P^}S}Ey֥Su&;I{c_ɑO^~ Y9O'}ݐ?p_^KF ;~9w `vM{SlvBwmZ"4 @v#wUc Kʐ}j;,:WWcg=qe o)d'/Po|j)@"ۆq! F`a J A(\(L Ӥ̚cbIO;$J#)o%~/h4Ee_U A(<!d&csT.JgZ/Hbe6K44TN&Z$>]SN-I&Q"BEJ!2l1y)9X8%t%ZyQ$ڤ/}#ʈ\&Q-aƃݒ{fB|ZjZP gٍL(BȻ/=x;0}bpB-z,֚v 0Eá:B/!AaU&6 kd(PA)I0 $/qδDY`hhC#],F@x.5)[/OõҶӮ 8d`> (3k q!L\4uKVn0a(c U A!n`@c}Sl围i|7j P`k%!ضypZ3n(A䷃ !3WcmssMx/߹&2^]i貨E7%=jϒ_SVҔi,es?؀Jb k7_d;AEb.M$F+LJd) iѧ aN bMTEH͉D|KʪoҊU'x OzuQnt P8_@k@" bW EƐ:,6c-ld7FvjT5@H *^| | S8Oa%%&j{)ǎ *J6!D !Pw 4_=EيcPJeUE<6RB[SO@Q9)3 ;)|[ϕB&)..VJ!8J\JIaQJ !k&,ìs2^mkeв~Vi^nuPN[ڣ/KW%>C)i[ts7-ؚF@6f:|┣*G5~UOwbagLK$Dwp hEמjwvqhkܐɧ6\\e|JrHj:ڇ\xmI6ԨmU\)*Ϥx82A JѢ' qOwSÍ'^_c.  ?p'iT+r$,\ϯڴCCw=qPVD+j,ޫ*GMv JJ4"A\Hbڔ+ Ҡ4 d&k5 @Hh TE3jR@BOW_! !u׬qR5cL6ETBXEU`m@ʖvN {_\oSEں_UQB_Jf#H.[h2n0:uxlӖ&aSX\iˌ4B".-Y\79f %F:iC:N͂8W5 e0&[ 8MIk촥f[Φ Sqdzb] 1c!S%(l8D\ʹ`jMU/ mDK<3 +7cD}2mGeM[tUTT bZaK >~60#`f# `  h T& D @bV*eۖ\J) 82Kxlԇ Ji$**q:B Ӱ49`D5EYu+k2!AX) lӖB[Fc8Vq|ߏcWq-5M7p'P޽ֆap-)8_pF<n hRHBG3$(;wi#s L(NƬt}؅nʎfPKJx8bg(63 J(֚"D<;C(r4 `YT\n!?r:W&$Rn5Dp&\&ei2"$Fi$׉Ě$R`t *@" IGx@F;_! 3h 0԰* ؉@+5֑p4 T*AB|^>e[A`VhYA0d(KD`2T@BOW_ "4#iȇoh&ޭ2#-h8&D)9!bH )6W4R`١cO|c- Z#Pm_o4 $hՠB#zl+~o,H1@+ؓ,j¢4@~TJ)(zѹsnݺuر[n]vԩS׮]*,L !|[/͜tq- x( kDAdmG0)JQh2B>fPȈr2cȸ: X e@e.0,Z*KaQzu®@`꫘DJ΄20 w9~A F hF;A`@`#72e`FA(Pwh2 *KcĪ@#H%A H+dƀ\JD Hc 2>@RJ!@@p2̀H(J nqUo'AeCH-<ȂC6@ F@0krDM0LPaD't ! 3;~xn)$@2 b\ tSwcѕjT}_rѷmzvJ1}ڦmKuMXQYu !5bMpOkm0Kb湵՛n`k]KQfEEEdҶmܹs)!DDʎr (Pt1 \E1q_Kt 4@qIJb>S|3`落=[ڊHE;ORaf`HJ**0"kN]V kWE("H:UMO83=L xtwU=V {sbTeQkHtytp Ek4(V5Xa#wPP|R]{o;x]Nz9kVXh$+#X˜K bߵۢ鋼&S*FnduRU|kPXIImm^!llmJ$7MT[zAbyHi!}_+m[(RlYSTP3y^ =Ծ*X# 1l}fգGiZUUhEERJ1>>^Է\5 __s?|Aw\,.N=S[Ny!^]U--ҊrBNV`?景 `dHX%҂|J _]/ywN87sO=粵ǫ_ő؅>{G1g[}`QsaOvVhUdYV"1O?gC#='{A}TtͫNAUrg?<$l}*Un$=kO(XqnB䔃P_:y?VsˎȮΝM[l&t6ٔ Ս*EQ(D4::K,bllLkDZ-AA<X‘`y]3 '5v beHw~ ~%+w+U#~u:wDN>N]kKvQmI_%Wiڭw^=2h-KlӾ :gl ց}}7Y68# ҍǝHٙqg.}ߚ;t/ pr}v(RDu?һgr+s\oIsxy5+<Ռy6t+ێmx-<[Y*QbE:ygwupT{=,`c2MэLIh4UG7Y4ec=ITUUehQ̜eY/#^*"RJy݌  :YhJ3 aRprPjCԲNo[PI*>/ޟzU7߲m}Gm~2v'Y,v~\Ǟ1ʴsﮌ:eŽ˪T:MceZI'>/_yJ)}u؋' ) ^PaFiRӐ< 3pFO9CJ/~Zru򝮪~qwg^Oz){c@;/v]5 f `-w|f!?eS5$l:oa]X yn=حʪXy,zd7Iy a̜{ z:z6zэn$IeifYE^$"ID(\Q6:*싟at<n)յez Q(Vb!b]A}AƮ!1,\_Cq[euAAU&d~@C^w}c8+On%c_7Zz{߻ϡGˆvL+6/^Rǃvwyog9{a3Tt6w}럮;=wvqwk\S#Kݳ着J{߃˗-t,&$dhCJ+@H""BD !{ _kݕ]7<1mTSSDD amSK{(zW*Rɔt&5SQ ?_>wq؊AkxDPyHA@~?DieL^閪Fh %|܍:-n1qgɄ쳑amLW1o?~닏Hz;3$M@T2BlQ* plS hXU@͎Y,*QȀHGofp}2a=Jl'Hk*Jb`ehk N!c[A* RZx;E=di))B H )ZHa>ğIs8qp9q`bT 1A0yYYG"x.z~C6ls:cC[]$)eU֔ jo~+):95`"R9m04ӯT^Ӛ\ (}:Kߘ^ݛg2b9w衇cRB,˚W_]׋<(k=U,Hm U5#D4O&..[+˼RK,\%9^Y7 H!, q@XRoO#.lTiC>&o˴)keQ`Y.nf9ДBU0%|;W&;<]`ˋ= YZ!Ñ Zw#Y\)T:^شbmeP2)vܬ0@TjsC|i(Eنq TA3 I@uF Pp7+t4E sp9tHY Db VHttt$m$i?m;Znd"!H09ODRk4yƞӆ9֍tlJhc) Z=YЋe7|q!DQtQYk'HxZX9nԐ9f.3:V./J+eD2nefK|Mwq]z  x|iM6,)u#seLTsB$ j%1WUj658u ̠;ow^{>wCW\;Xb++@S䔓qƘ'H"e3DX7 vѭ/#Tm)i۩&%V[O*"Aa#+z5RPqqCMHT!ˉ`@]id (v (Mٛ*Qj{厼RJd* ! 8UYo {nJ cs)q3*`5M*Zw]ueV3E7V:ei߅DBrTַ4uZ}Q^Ͷ>޺rC~?DʌUB# x#"A##J!MPN b'R2p pXsR(Ϋ" L *_~o(ʣ nVFu(@^}NXUENU1ɺRFf/I [\Y1d8r($jyҷ8E+3K 8R@4 ##Ԁ5Fy#KbMһTșĐ$g,NA If'ApK -]qo>E`{21 fX贕Gn6d! l%-q:/3kM ackmyEQժJ)$FD-u9TD)jM[6^X]v9}\=2^UݨءB*PNl-n8]Qԭ$]XҮ9D.~qCgUeEWk?7k `+8Z4 u(@XT( B Tԁ1$"J$4L8I B(@"bP܀@b((%% &V Po B !$D:R$ (h5@44A& $@@@)AA(-hhDo*T{P $`k#xs%|# {k Axyep{LvmgT/h4ƚfӹRZcLEW_}uZ}Q38r8z¸tKx^'|~?_>/y竟=(ǛOy|O~yvWX.,Cy5%o: }V;Ϗ?yv_wϚǝ׽`]MjS^#p.v>W>w'v]?s_mW,=~o޼|wwQ*^$ɇ?뮿͐;?i<_j6[V   6V1&[;/Jȗ1REy{;`ADL`2&6eF&\i4/Z}8|ࣟJ]~7?|.FPV6Y /e_{7v,3?rc]o^qw%fn篮 W;?oFuڜr[AAA6RUF\#H5X\qrHe;+Vy{'ĜI   L I^ァ+^zs&X:}Uf1u=gjy.[0288+/zǞs9cL$s_[ .SNHQr#e6<toU:~veyxjeYk=Կ| Ǜ W߮}q_{V\)"p2"˻#.ZΗm҂:zbӡW ۤK?W7ʢ%|a!+K?_泞}Iŝ]>AAA[m&" {\4pp֕ƔP1M8 AIbn0(N;>sϽ;,BzwN8AnggEܴ%2[Wi_D\gyUٰx(i5gʿkoXpБԿ_sOq>uʨbbQE+Q*Fַ_$\;7-um+߽?ѷ>ӎf|`˕eQֿCIs/K:T,9_} >qumQ8TG   l3I{OL 4'4t0;Le^)<658+{bll(egqƹ{z뭯9?R,L =SW[T+x' Y;ᙻ_}woh-w;T١o~iyX}W6ti ^|ܻ!~OA'MT'#wq޸rbp5\AAA-?-V?|rVk(I(dLZHbYJf6RS:n6%"3MzatiafnWy~JT' 3;眷{윳r3Λ l WLUUZ[k|8 kֺW^4"kg(K1]`n fG*j?oë6 `Ց,1z߲5O PB~$!hW!D*"D$zHwT8qrx8>';}ND}{fs̓??|?Gt~ Sȣ}Ie+Vz0$EJh]UU$ acV64vaڢ9q/YEQj5k>?qKrAA߆KlA|&V-**ffSy/H/11ԟ׍hf歬7eׇ2S-Z[ex EQ4Ey<^GAAA!&ql1HypHy/ŋ[j`Ŋ3D<Ś<SHw6RRRxhyKDWfb !~1{vzfD[Qkm${cL$EQq\9g$I###fsAAAAS\$_f04FUv+; LsLfتy{凜+WLѻV1($IAAA}_Ok),CpÒ$wNhi,61=J J/~W,7H;$``#}|0FI "6pU<= XF%n5y926G\+IKѩ,?bXSO TND g5 ɚ2/;鰗w[x2h5+ %H'C `3SW@D ^ lڡnAUu ^6a窻v (:%ՂyqX5eS"x85 6.BcG*f*˲V m!sn#azA,ˢ(j4EQx޹GA̎d&zn'=US 7dR3*u]VKzn!A3VYb^h9DZVukg"=!%ؑ gh .q%>qV<,ˤ~1qkݮlmcA$={ª# 6~|!ױp^JRL <$,Ahʘ+D}iM|hdcWw`tQd~|2pR9X4r "9W*3zٲ# WBPkKZS>+o_vqe YA>Rz$$J%s!Axm!' "(0!tlh-GNjd6N6P115A <ܼ ǜs1֚ǥJ8@k=6eCBnahhhddh!>D7`KγPĚ<3{I?O@4i 㨲>4 ( o,gZ}6qQUUMqorK6S<5nRyQ6VlW.g9qWet|<,rcTlgK㚱<e]Y#UPLԁ 0Pk 8 x4ci pxv+zpα'R*Һ OF+`^^G:qmÖxX[%^%c7thO?]޷$I "$ YOLDڬ640ZdkIÕ6&#ّH](/(8̨>5Zf J*#3RD,>5ȈOgJmcgE'5G R7S*/[Iݱf#BɁFٗ  ..1ZT8.I,{17ۅJ{'` 6A̙pem<ӎ#6m;ݧ,k'v3o߳582v,+,H'nLIDRJADD~S n3]TR$ι^8^P)eRJuZ~ʴVts/V ?9)}yҍ4b_/y{?=QFe[jl#Һ}U7/vmU [Ez?ċ.1W-KzTp[MCEql:J#`obX`Ma$ӊY_TO?lE>Uߡt|5ys2F c(} L{'B򬝤*M0P)ҾEܬϴF];5\l% @C2bvsR+TH U̩&ZdҚ,jl RJ%/)J)V"^Y4m8Ƕyd ;7yTY'7ՅAQLdiLt#tSe񆍳$%<=,VG1oe/0Y2˲4M{*NFZˆН_߾hCcx_6~W}wJ`h嗧}Gu=5w'~5~摲瞇>^ Ukp2d^x+U!hnc B1ȎcYW,.!$Ado6ҪrM/ܴ -=tT?d:B]w\t9}+F J<%QD+yU6e+Ǣ^WUKvC4eN̲K̫)g\naQ}K_,`+C `b&b DtLYPJv4/vw4W=uyɝ9i(t  1kY3A0A}emku?}xsk::vGu=ͤƟ/:m_YZRel 666d$Pk%"%U_VN^uEVq/H!Híh6f"1oVV#իQR^큁<{VJ霋8reGn}#%W<|ACDo}gSN+s]Ɗ9K/ܩ?/Nݎ;xdܟ1vǍ{Vcσz{ߺd9}Fܘ] !%H wZH`"۰]k,m55$#eLRʻ]&rF'X(z5 O@!^*Ј箪374*J9t޵ogQZq2@@Ϊɍv5cY'ǥI=F~?w- p Y!0KE s} " Ojp㑡;ү%6cǹyCD$?e4u:<'Qq1p8eU6«_,twS|J>vYN!1{^F~|֤AG>տqowcƎCǣƉ<$ tW 犰̡;ADι}>񴧷OٞS5rklhI:-=*̻<Vk#$`( *>ynmgW&RLOz@"Hŝ4wUnIW4amEB 罎?jI3hL6;Oꊧ;o8/b'fĿ^_]tk +EUJL Fx^􉭉8֠G) "1HL6+ɊMp 2Q|эÛ#<$k-cLJYUUUUQ^eR*۵kgur)y`v?t٭SW6o0mC]Vc⽹$nٳ/~˵sw݇~U(n:kXl5JCY&nl 3^^q,D%rO?+.?79,AփS 6L,Sq'/vɦ,{H3G<]W1@7n_2y}P}Y1(VeUU(hR!]vEr]ϹA8R-czL*(ԵMʞg+ZHҖg+)<=ɧ=)H($'p#:cO,^o>^mAVL]8qC\ӂjyl V560^Iۇvu5VT#)glme~Wm^S]3*SvcDuG`+or1^B@3 .r`(Be- +R9.GcB d1Ε|_ne;"#1p1HOtT㚾.m!٩(Dbcj]-;{eRT[I)9[Щɽ@@WVE6L&5FqY h!#@Ni4BF@[޴4F;r: (xDPĄfC@0$|xС;I A !N~`P~Ъcmp0BN W{"@^GКRr MZ 0"!B&"ay՗f/d.ozz[(ЧB%pMNiq)ڪD1\PJ.Oݺkw"*5YqCS@ɽ6(* K?0xFq FBpEЊqPױk @ b,c1fv('qwrC棖bLQUI5 % OGK "" 1x=eg+t0.Cb͞J%x*"g,:$܁`HlRs^" 1 s 0 V6=bpJFfjty;qr낒yiNi⫀ù ETc*1RJᨬmQT6>X9\H ؇{_kV_IYx;n(n5c,s%j  ._^J?=2!ĤzRJ&(`W|?OkKncfLz3|ߞMiqzko߳+޺%?@gƥ_KoyÖ7 ƭHN1Fx ̘F#rq_f{EPh( qܯ %Q0Ȧ[(Um[ܔ4^u[tdm9!@  ֮pBc1A}ՒA"X푭-g<Ԏ㜡SaB, IDAT%<@LQXbl̨h='lM# p<6DB"")eWV\s#lqۡObD tզHbXI̍c32u HY&T̪e/OaqIdIB!jVS^u6ՅL'`SK_Ȥh:EU,hG!(O GU,LҖkSAZ#y]U51Q05Fo,:i- B\:ȬǍFxp0]$@nG>견+>0`0=Jd_#3(Oig ҧS9罟4ݴi{&IR$ɒesU}㷕c1a(pS A:M9jc-kӸNKP(,)̘ui{LFD.@m0佈AJ:",qK-ٸtӊkg\te ]vwTdb!2R1y^Ա{!,,y{Exrd6]IIzۙLGӾ.0ys!ȇ$ii#+Rk[Te xno>2e v\M* ŠJ p ʫXtp=tM9B3mH-y*@ mKF=q"g^c$ *YR!q mEdyψc%, =4DZFq4 &Džfc@טeDDsb @Hn+S:GiEny!}hŤmʤcL)58&K)1f2s.zuzD&wrn.Ѯv:홣,op*_iw FAsݺA|8.RǹeH]qkxkvo)d$ KhZTe(< >L,KUsmO&4C߻7QOi&'!Ķ 0bP r GWݨBٝ~[q§XUE=wnܸ\TlփJf{yh4eUc@Dtm98ށBj҂%q!uB#'#B(C8Tbcr$?s>}Lfy(ކLXҊJS(yʄݞ˺$\gQejհ&[벝z؎^L#o^:h4Ux  LN8p.% DleZ ⑎GS۪2.S4k: !u=RZ;1 m8&}&y+;c,ULedg<Utx4 -YoP|k&De3.*Y7ȾY-SWAKKr)e0%hU[%=dfV!k4N!|+Nbzώ| }ӫإgp-b"*)G9s-[*0۷CmܰMm;!M]~Sܵk7c==PŠs7儶r|n~GhlQJ&$w\D!\:zS?uih4VvFS /q4j}h*{&s D (A%DSWZ 8">x@ PvW)L)p0B4y!5=ZsIC}U&5&]R8 s&!Ē$&֕ hJRZf.e`,%ȔN@T ` 2`E  |̤3PK@X1Ik[}և7;i`'峜G2|>C9+Խs]:׭G[|3yr$Ʈ8YSONW}Sjy}x:bHG[vm %yL}wݼۛפ49 W zn?XB–9U*h@ZߗV7х8r>T*ve0$BhW 4AG+ pgwlّ,ӭpg.4SWc~"XSD햊"`$IPzQ@  "gLʔ[Z,Bx<EQUդ`"sDF(`:F}vh/b/'MXsޚS6C͖xŃ̎MKfEQ*0,^?Ϝnt8Q Tl6&v6`m _ hL9@n2TBe`ܒ&ܠqK>|u] Kvҕ%F;Z?Ǧx<.9#XvK[vR0w.x?F D/8' w?ι((z=\R*M4MYѤ}Ձs7ntv&(3Qmʶw|4NZ±7+7E"1y[n:uK%jڻsUSG{;NZK;2K/ ƶ/sLe(vZ2h"$%K~ޫ~- [!8u _횊\FX҄< jz4#H .Ry+uU]C6Pȡ8i$LQ̝z3:NYEQ0ƊZ |,&74t:9Ƙ1fh4$bh=͝~P6DK\MV*rLa_T }go>@ o|˶sf;߾qfg]ӭfZGs/q-8ȇMհ .ט@^D 멠%aYĄD}GxЍFw$ |&q5WGGA@! 1.IpTR{Γ1459D{"%pX%2EYyRUUq<)2Rv]UUQIL*qi:ih4$-!o߸pxBhJ1Yt NOƧ;W_^mv=__9UU`+M(frܑ`De-g?K.'Ȋ_lo@n(x>1-{eЊI $ǧ,+b`E99_.Zu')3ͧ8* #rDTZ;ݖebB5v#6[c t 7ĺwl jJR1r(Zp)"_4Wˡ&" +ғ;..Gie]ʝPIs@M. 8nǁT:u$FBi^"WXFS3r Tl6&v6mo}??繍gIj0) q`[ܔ[u 897 +RY9kc;rJ(N\H>XTK{UCe,,^jo fI({ait䧬2TJt {˾YYwۂo P Cmm n=!JP9S7) ƒ%n?.[_\tCUdWLSm4.C,wS.?6Qp`$3CsH1)1a\]_wtl]4%O_}~)fk[aJylkH>9cǽ.y޳#%Nj~jHո]&Jxݖ(˴OJxAm*{M/0z6嶠N 9#$f5%/2J|'W,D+W@rq͊G5sEf]R+nSf2ޒ5C']|$EbĠDCBmTEޡM :S%LNC*I`h ֦5U!;jpҲ͵ uaolvfӹLܯ<7(R=^i]TѨ6{ʺt]X#<?ўTCS@hoʚbDe-g?K.k{n:Q@C q7"g[ƚ2IP&17 0P,$KObژ1ODHV5FXe{ pg# @ 0 "QBq;.O|!wcD̰G~/oܝO/?sg_ ӟkMQuS{')O_xk~˷~_>'Ľ{/s|W?Wۤ3g<ϫ1(\5֠);FMoI_ui~?[RBPQ>N?G~ĂkY`5pG^7ļCD|`ƒJHiW(:\:]{sBUP,`;Cru/DM{Alѳ9jϐ*r^ZD9fBX]D%B(9EۼzyC2 $yȎh4Ǻ&q9h@f O`1s2q8N>,9_ W1>| mPEInMs7\xJYkۧm7S?-}΢Qvgqo&y}{O\IE4Ǘ}/ZϜ5ZjsN2"nLa'S{Tg;I~x]*\`]b±"!eO~3Ν6$}QZYEL!(+%1~#]R2O.@cY^6V^΢Ki 81;FqkD óT4% @`hъv]R9mDFuJ{>88ٟ<}/W>a?Wҳa:8T1SʳE/t%Fb%m]y"*K^9댒w[ٞgl]z^-۷wgs/='"Gz 勑4ǡ f3/YIѼꫤSW}~ws'_򢧟1- ƺ m+#hbß#+E:-Z FZneiPU׿y)<#<3QMavA|!(@`aJߴǵjW-wܖQG9}t P:!* uugݣkTe++o-Wޯn,#XV@9]Mh׋ɥ[,aăC'+ XO.+US @} WrYu'<ϣ(;o|=?UUp Ї>]7ok֚&:sQN#9r!]=(HeϸaO8i0DhTXZutuzf>"ZA+=} Svzwi ~736,]߼ҍckBTbBe7O}~ӛ{'0'$w>B o6֒YƩ Ufj h~j?iF ~h \@Yh}O;5 a[fOM%Z :@Ɨ8(8&Lmr#څIۍ7?'ql/ɉGq&&h4֮c9Z9^4NPIэ-rW\!g>wn;^Wڢ(꺎^oщrR`48iXz<]߸/nOݷ~qo%wι=7'ıQ*tDه% >4`_c?C[9.}~(x$qĕi4qHlE/q%Ka^Um*=27WU"4Z>bk T`hDr}ֻs'yr Er{;gK$boގ YeGף`qĉ)z+=h4ƱqZk-xk_{w$Ivmozӛ&417kL\9DQ2 ܈. ["8 R2^`;/w GN^?]w{+g_֏sgkksz~ygݵGStr#g9ӿwKz@^gnghWzM-!5rEc[.ړ ׉Qj⪚վkb\8CQ=S䍯B ֋D둀 l)U$!U,3Q@*bhscWCqYUA@ DPg1a8jEǨh4ikw?gIk= vm|vڞ={^W[k1I"Ze✇T9N(3.+;O>{ k6\7/T) FOю(V~۟4+rC<-w5nrxA8؂3{B 7sXkGjWv@FnjJ x XM#1Bq4`m \8R*Np\` ]BڐAc 9kI20fJL@u02+;.ռh45gkᡍû [s$- [[QFXe{y aʽV>%' ;H/^D^ERP*"(trA Wz'@i̚U(!s>9s=ٳyֳ5sR*3ZT*EE\֢*c+י-gfX/71|؛_L.#k\,Bn 0 ]DXcurΝss((.!YQBx"̩vl(P<дHF!@0ʐ PIiՁeL굢$F !$ F0JkW*o=,E{YM1N?t'b0K~0E6lm3'AR p ^%K tHam)S`c̑{˦_U1LŜ%m/j6Ē,PzȲ%#JO T}Wwa "mkK9#Cyo--OȽ-旴<sibPK{=#멝9\UV xbbI@D1ED?|Cڅů Q*I=o%gI|.]"U+Jmb9N2Eبc1y'e6 \yoײRJ2Y%bpW^Tw/CZ%,[`lH}i;VS Z*GcHZy`'"T-#wo8bfHG0dA㨪T* pSUT* d8.RVZu|yo olY:os]` pS,`d(3[ [epPB2Xpr.Dm1䰒h-"jLS \@+VJD}0 (jV*ʪ@.mMURT9)ҔPP;`V K9R7z!kk(>ǎi7ހeBqBG3p#j,sU3h jƵx&-f[8ZUT*FQT*oU Sw Ajj ,k+m*)h޴eԓERS@wT= ܕq-긢q[I^a%c-JDίUbν1#4h[_ 8 B؊z1QaExJ4T*? pŪa)JeIs.K!H!'T8,ylԷ~`%7* @8jY0XG\xX%sheȁB-p:TdiKh/-C࢈s`WsW*ʪbU^T*ĭLI 8Lq&Am[ 18( c]9I%0"҆G LqCBsj@@$ +ګl %R `.+bg3cOMSTVM%LG Ҏ(X]i@5oJ9,"`K4yXər,$ZRl qcR@W!*TdG XI4K+I,-qيIs`/urYM_QND4J ι8qGd Pk-3Z-nJ-tS^ExA-p#U|} qP*8XY.!+IQiY ?C!B1: V10tG UэJe@Rx h+2!ZO֡-y܈mHf]`LIEK̓^bNj o-/=UwsRT*JR+@eGw*]p}kRZ9(RJƘj]q F/(aZ[geRT*JRVh J))e$ЇFFFz{{! }w`N;B9 6bнβ}LoL k'r%eF{XїC=cD^#EQReabNT*JRT*.:cZqȲlҤEQyZwn8纕8FADsKTPg3m\.L%,M}8+ $?˭HAke2yFCa-SMM%SQ.T*JRT*.n݀EU1!cRʲ,#VJ)Xӱvy>a„, P8.yC$֗w;p_&&lb4n}d<zKc5EiQ;^b3qUWA@% dZ4U+JRT*JeZB W(b]r%cݢsN'I8,󼯯wRaLt3vz~O Iw=p޵մ#g3>ȣeǝߏfI9^adp%fCҭ!Jegn'f7NU-T*JRT*+H Z\_c#| _&F"MV}]R?vmoV[m;lv{[m6λOm?t<;sA2;6yn1͠Qֻ=wY'xv՟˛wKOcw2~gH#x]we}TƝOMk5|v> 3NaF$@DspVMRY9yW8&rxO< 9,9={~AGuZL!xp@9Jh %4 iZ `]@-ޙr x62hBz-*m7 x@ÃvͧK^@ ր'7>ʙz#w>E ʢ EWakEN^MMJh'.o!$pmC3{޸oӃ%p7>5u1hgw-gfKͼ֗>}7Gww`֜4x 9kfc $!8OpQ5Je% y7Xova}Տg9x# kh: V%#^ |<:A!rk<ɑ6HeAlU3u}Z0us/-;;$jCڰvyӊt=yŻ7ol<[| C(, ^L6+=Thr t7.Ka|T/@3W@QPSc'*JlW5MgΗQApeEQcE{j,#0 wqK/4Ů'Ӧ]_!O=u?w,RaaV4kdkLNV_3嗎Յfh7[OOEXgvt uFz669/|f|5;ԱGq#_=|r 8|aS̻ތ}(bNИ@5;' :\Њ!Fknu#hcb_)e>e>E!J82\5x"n'|_ï>1 IDAT5H:|I!Tgag`@d!_p+]-= 8c6mf#AQ Bo3 Afy˅_۱\MnhPzhg卞L# %=($p&P%`諅68B#Br]A23OݧH٫%&> a{' uHOCGhݮozm {vo xW?cݽOt"zPe`:!;0Gak"f;$M(W>J9C• @1b8XkoJH22ƺi݅9X=8Gv[ZN:1l6Y''0\>ӖZڋ<|!;>Ex<]yKj͛S-ji;?n|ǧ6;'`>^Ϫ33_/5&p+ 3|O]3V{),UR9u>"ecm͸W^~]`gKrK۾Fo?w>÷~aeiW}qVNkTy{޹ƺ|g"֯c&@.AT(`(SJ;/xNG[{Wnxᖓz]gעlT^vcV]Ó 1_]jZ90۰^~v/92F{u6P}^빶l=Ͽ=6ʹ]O?! #B^t+ w{T* -}\8D1"rR|FO4aber|r@Qi:sPY7,8-k[O]?_=Sc;QXϘnk9f׫?k M͟Mz܃n M W5˻V^*/[nDo\X^䀳|*nƒv_ofTAld{)my@}=^8c'(sg0;X-K8NW??s'P6x/9ǝyݖۻoW|[׽ &_wū}C?g~~v(dGacY; <7xW#X0 7gSO}hʧy?~q?:pK>_x\x\v3 Z`c\1]Y/>rʝ׿Ł6CSVN,n>&_>s_kʈU\py7o)}}k`}g_׾y+xyx;{S?щL8lΓcJCiO{hW[mR__sn9g4cRpaO7-QJc.i%m(S^{kwB-kk^O;+Z{{Y#F {νvnzaAZGũ/}i~zǦ7T̻Sv}'eqaszp%_}絓>I%z!~;^i AL|Ğ9F[lA磦NᡜN[n8˂qg S?<ՉLvي#;qͷ06h턜Mbpgn/S8v%:O~^-hy7\G^m[eԵ`MsΊmg2Aoxiw]6S$㇆R-lᛇtȺ'DPr߷wA>~~}WoL#6|旷]'zoeKB5) RXR+`<8o*倆uʖbND-6\{:k^C` -fwv 3!$&<>C}g?9胏 _o6;Ϝv!P҉cȎM?;}ݍ8uq1.qU~Lf;zϞ?!3\77p4Ti<~ihԎ2esp\mdzoĖJ7}B*Ik!0AT*]SJuHrΉ(sιR[atL+Um9R,KK/MZ nd7 sw"pi`rM.x3*Lk6&ïzļI-̬Ԇj]ʊxB'$܄WTWfIxu&m3]TÂA#Yb\4/,E d$ 'zxL_n%tXXȢ3c0Qe`=l )32$ 0#-V\M`!H0eƾ_~rG>oSTD zJ䘛a B 6zG;D #%: D9m?/E=Z'f^}b1Z^|o ζ 54jwmƒ+T sQ>&-v}7Db/.zʨ[IҳAJsJaY7(Ud8ꗇZG 7ԑ9+.;wr͊/!VG}ka-RT?S:9X Bs':ėn>qb;r υ45ZL();g~q. 󃻮 MPg48I/񽤟|% >Uh]vIQzGq"x)uPO4<,ߩ~G>wW\ $#!THwT**kYt';J[caQXw:SH~xw:n4[b1%|\Q1O_/oyEq'8QeRpޝc\+VJnN(CdBysռ))鼐"+L6 jE^I]I;ʋzr3r&JdVtX8w9'F$Wʪ̂ ;k,XM%srSvb3?=&s?y ?9:ٴP*;.=Bt`{go?B^> zsfZjz^c[dZ:ۉ&3YUd/ـw?C:䪈7n06Ҝs~궻@,SJf'€_x =s#!ՃUss13Ag/H:ύXBl!3zne&Z2ZRÔ> J VjacṖ;2vVtӷF&g=o~qmv"X-vkv8s~3qc֟x}gO(^z9NvuHYnV1o+EpyDߴv|~9g=ל'VZҭgm민Kw]y_Sk/G)ݬG} t^pk^3K/ƻ?6)wS0fHc*N[TE.YvO%omO > ZE % 9`yCg ޝETJ% [z?j׸DWPYGZ$IY`b7n\BpεRJ R8_ss4:H<23jCiӮ<喇;_~u\}/]yͻ굏 _~?k>v⹇ɼq䌵~U4K;;eDwD6|O|+vbݵ:"{ᮋ}G&& Agn+N Hjz6nsGoI0N4}Y/|Ӈɍ8b C _Nym.0>_o|~ i1 ٬ _yC;vzؙW|~ x46ɰM~rJfg|󬯞<ٲ[ vxq[<d/NSZȁZPV0bӵΡ&}wնq^ ݿF=Zgygz&vι[{_|:[W]|xh~nI;a~ij>f6$Ne4 c,ՐCjB~Q{%Z}0eW=bjkow[ZD{#[SvMM.?6+fLxc }1i>k2 Z0 c+v##Jc,{!2 $RFXa|hMXp1Wo7,3[o7}E.˻7DXk=9"'!7Zpy8>昣88=Rp%rwúA "Ry xJ9FX  ?݇UpAaF0*G `q@StB(eV HedAiPI14۝5+C0(c .!Q{Lk To@3A >ʇUqk<vQԢtZ!i~G@ x1#VMj@Pp!YN|590GYw\3m>Aljr& QlXXh#P๥9O`LÇC3/;O}]4^sZ_HvRԆ" iCfCKaPRE@BQ9RJwDxKFPcUL eXj`ނKF*]غFA^ D0%Ig%Bpld6Hp 8y RY`Ar^a˾q哯3 !=d {tgQ`dnt|r`AE&ڿ㽤Đ_L:pI6;OvamkR* 0 R Ahabc ,\lVW* n=QT$ݑ)݀bu-Q9犢eRH0uC8!AnA ۆ. bB vIWPf @63j"hY n@yDD j A[pfE T,Ѱ$@b AFZkʺ=J"!ڰ &FZH ܊B4 `lń3"CLCd-/ac<$JrB4$HnABeܢ:^L .O>NE8ʠH 'BVr GhC$-AA3h6 p(Cs B m&*2ԔZѢoao,sCpv3Ћ$UPTDNq Èތ$&Ժ`1@A!R cC"Jcu0@0e$ Bp "63*"9ä IDATyɲӾqqBAН 9W+\Wo |%֖e¨쌅@ެ;;Je(WRyK0#s\jPpB OBA;x [”0l7¢a|F&e^( L{)%1|5:I!XS%vPV3BK@ƥc5B6Cu+-Jб-8R[H|&Kg (.DjWu `nw?r JSH308&0P!(a|$pqxD *KpciBbETpHkedae<,:KEL'a9 3ҷKZ"AGm(4Xpxpf64&h4-J}TTPeh ABXR3h@| d(k8@xJ/t$$?'8`9#cՉR=K{/L^iaARJ0[X)RLUweaMӴsuv.c()laJ/32 nِs!D r&SPHG DdD-P2%Ӡa$<@&42-FH3JhUOPg9ClgN ^j g0"m Y:4`@ڰ<wgY(y˯6}f{$I- hԫrخr/EcR. &H(B( $nN;?ޙe6;|?e朙y99OZdS@`ar@aѹ[ 4PJ%Q R;,Aת@$4Ǵ5Vh%lUpX΂J\]z*Q t xiL66ib8^ 2m"Zl"?I@Hd4GJ *t H(AxdBx)0N,"%՞< J . d18N$Iuhz;:¨ @߁!}s|R1ESWis:?2nXk8Rc(J*ʲ(a*<9pR()RF~ d 1[~)ӳ! & :6IB -! A"P ! @4\@A @uZoHAs|_4cnD @ hT L!$5@A;DPSI j ^~\ %\a (\@ PpUe꺑a,<_"{  c7dHh  nR D )f,@Ec^ (iKbr,LF!i*$/ h3" /!h@p c[ 8:#U@-#Ba$G҃QND}Iw'~ي['N$CUBI""0֑24_D!qU sHݩωn v:0,6 )eR06;*Tsh۳E^B/g,[EC"y`1cu L ׆dEajWʬToD7vꝈH)y^n1+q?X5V)1r#:.+sã=S&і9g1cmzqCDI*XqHk-8.aˍcAEaJۭƘG<i,8B{H )IbUwRnlԋŠ\D+֛jc5DEQ^Kf1cm:*ޟ}\9,t<ґR %$ɞAϲIc4`g,2ZaGFF."オVkm'zJDY&YkU6WVt)jDF(xtc1cO7Q @ERJ)hz \xgpl]'>j5k-"^z$IZ? O ,/'^\%!`Y$P'a[BS:1c1YSEV7b>cC)BBzUIRYgslDZkc̾}Gp iz &M0Vk 'n@?ԛsIɸ6ݭ9WeGy{?Ͼ獏[~d|bDc1c0e2ŇA0h&E B艀zè~h#\'H ]~(p4&?Q1'UX쏖YJ69<:q$@c@Z$I BDD$aA/~A7ޏm> =]P$-qψᢞb(Jp^'mkv6jSVm9g-RG=J{/!@/ާJ#jW3w}xKzOzƓ_zw* ׿7)OxO9/{fZifyK_xœߚx$I͗:c1cq\!!6č5MF8,K4I<υZ!4,s,Գ8ARҺ*B6N}#z;>X$E?k}̞'xtkwold,ӿ~}O0z)zc1cD_,NQ@)zp,Uz('[TYQQQDt:Z8˲KG+l%֥‘n_i}6KGиnk§D;n;ݿ+sP?rx`2##yop{>rw ) Pc1cJZkCc5ډ>4- E*5TVfvgt=wO\#=ַ?|ybG7"KM,-x (HN"Oxc1V{G%8O Z[freJPyQiD03V1ཇN'e:R5*F &ƕ MNvιFܞ7Pܶ_ꑎ+{IM:CѨv)BHyaI뤁 c1cmbvNBMJ*.wYp2u3b'x򕯄>UD(t5JIi*+^ٕjIO{ҹ|>\Fq#E.I3.H!9KtK F c1cڐ!5B↔{E5I⸏ōqz~`Sq։[SBV@g؋$I  c\ZSTeª'?? ӹ_/ƒ~g0zӎ;_*kX(@b N8- c1c[]@"@} ђRJR;Zݓ{DD ;D$ɞ印n)PjRJ'jJ "S w\W&%*[TE06%tl:§eY*D$Z1c1NbsBB  AO u$u$:9;'%*[Th^x:NDZ>D4UUyﭵk^c1w#ޱB_X\u2*EEZFzp(nPb0`919c1c,XhB:- YXVjƻ-9$I爘$IQeY*nZ^2c1cq獛qSn DJ*J g܃cZw:Z&ȲLQ Is4E):2c1zq':B"#y:I(VJ &0\r}ep,u+nQeYIz=!1&*29ZVxhc1cl}w)PJ): 7|~f)kw[TUUBRQ.K)eMDJqLPc1DR(4MM |ei_+/9ş -[Ozvvzn Uy'IRUneYqH)xB-w=a1clH?A $hKp&wn(YXQOjx\% o!"m#7Xc$NyLa =3Ϭ]zy5(˲80usNJSEADRJT׋hσ1c1ɅљQ!w:n1LjqR6$]ttJ<phcHӴn| ֺ,Kc2I,ʲZqE|9RJcLm6z>c1lV*Y>SVXkQ Yד$"1\ (s{p,*[%N'5BmUaTsZkk,n["Z-\Hc1ckcv7+qFD" P9:5ZF)"rycSVbgqhj?;}Q%It1sPJQYiaR,yZZze>tk}1c1fVx,/8 ݮRjըjqwB Ur]hXre}DZR*TW]uNc=tHBt$!#2c1ƶ%$ǵ\WVYk-!jIY57gx9RʍıT8Q=kOʖDZoc1SSS~W^yɡ0TjfggfYp+4]Sa1c5^/8P,\h6JJ-0u4&[1&F#_W)u5\s507$,I)/6]]vc1cc$IFDB"/H)ADS($"kF_;spq7Io+MlE "┹k_=@ 7O< R 眵VkMDQ*ѰN| rNz^]jX2p A3D2"*eАGN  *+Qۅ&fj(ۘi\5^7w+5\jUFtaS-H(]8Y %+Ca1c/Qi~r\J8!D!hg @x'=;HiRw{OH 6>R?.r_Q GoeAF­ARZ//}_dw뮡_O֯Y{K/G{xݯ;|;tݻ }+7!#TT"WD VAi~w$ETStfzlWُܗݿ?Ou#|[ i=OβCsaM%`f: 6cH3q::sOGDB'Ic vnV3c16x!=/4T2FUUS]!qld^'h56AӍ)C)%8(,_QJ,/Avoy3w@YyyS_x+vn{uKG^=.۾x~S_aQ<~DN{4W]_{_^'_OU磿}ȵ/[.C;]][s_+?Nz3^׿a|8!HoTJUQ1c {hR5>*c@erF@D8MRRn"9熇/}i߾}/}K 8=ؑ ];zW\4ߦ@7~kWOΡ_W_7ɏ)k-mY}PCdW_|뛙/C{~O?*ҙ g=Uvz^j/|uG/~o~o?m\G쁋HJB!c18H~ " !9!ݻwY =1  0 sb9mG8p*ZJ$$,cp K>3ڹc+ d>2'fsXtO| |F+ۣ"QOxc ZmgڹGf`P+΍6 n>}_rٞr1'`]EϺ/|~ӴuٗSυWzUt/Cnڽ9mH@\B1c1ʄ@-(* Aw:yeI   X\' m<}De939z /qhQEQdYni1uw52[3:/q-[fkxvHjX*LFʹ|_S GxLލ") Y)cDf皓xs!^뿶oxx{m腏r{.fSz]'6:TiAqCy` [ۋͺ pZBwf˲la2/?t#\/ ʸ+/}껳~9zSăPtfǷoo=SK'r\=*'?ދ5C$ʺ]xarxo~~_z~G]7^8jL52}l%c1< Dʢʲ1Ԛ2WJ RQBE'q!6Vlj‰` 8VD?v{7\vr'=Ս:QR RJ6 IDATuӉؘ/UR^kXkHJC$L~kXVɶ?q|B31 M䕅fѳ ';WuS}'o#|=9>S0%wKgwpݵg3=Ety;M,g}hPEeYL$MzKMtvv6cD,B)BN/w^-?w_[ƞx틟GA˱:+s)q Ov 9exͿvl}o^/W܃+]=uSDՐ Y7J"[dƏ==z#)?v/>ܳY~OlDmgY7SםQq^wc1:GD$pf!"R%,Wq {9bxx$K΅جSpq6~;wjNjMY<2gxY0sO | HZ0!BPW7!;Z x4{Iׯ⋿ow])RKļGtMUUYk큁B>p@$&XAS #7JTcѭCt(j {PCP,ɜ%݉}I3וvCZ{G)պӳQ+E13 l]s;@o0(:YuN;JkQ똢T#X3iM9-,_3c1v@@ pOj]{{灘T!B%B!|u).BrqM*pl@XT%x.{ϛ8 G= P",hxp&J)8潯g+>]1+O?BԚMQY08*3 @ 2(3r޴1.VLk6uq1ah15QщL*:HURDl6V$k,AH)s|1cAX<§Dƺ#GjisDig+GOa,Jآ17|3"zQR3555::w"vT=ճ 9<#SM Zxkyv|lZTjCt]9! h" 9#t5m1hԐ<Н&;r;;)>{oMщxz$-^͊ƝN`mWsLzXG{+ c1 g88D!w05=j6FkILztw4,/d Ua!_#IE\K. qz=Ht׉U%ԞX6lժriӹ4T5V(4PܗZ"i{2>D:õZ]=ڪAԝFIf(U֐ݞ*<)`r=ٵbYODȝͅJlH1c{0qmQ^tBu^z 6!{f=8J4s2scL^~1eYVU*YzQE`j$mT#t\ݛ *Q@f[A=wQ9ZM(F09k K.ucUz&2WHAYWVONQI{?# !%hUM73UHm*\/zy)P%6c1cca T,矋*SqBଵRJXxc + {;Yqʊ ZNWYCWq"(?寪*M#LN ZzB>u΁" " HBʨ 9TQ(bp ^ y=x H) L1iȜ*/@9躳+k,LJ^zʩ,$ rW *a#1c1VJHfZz OOrcw@CZk眳Vk-p^zPv{QK=g@5RHY+>+,8@@@HO1c1c; %"Ʊ^B Eq=#wt!VĆhMrV.[qoc1cl)RJ@ 9(Ue'͢UھHDWyg8uV)q6C'+tLt1c1c Q9kJIy)]vjjjcz<;=}ݿm?XwSTc1c{/TJ9窪Rj{ev{X+t-{8؃V c1c1sZ$IɋF=ng6I#cz׻l!q)+C1c1)H![k"bc=v#(LYwY_ծUYZc1c =hٲ4c;FG@ $QuRqZ<ֶ*Q\%qWzQSPT9E ;=Ȧi 2zCAR c(;4}IQeRcB[$IrI)wM11c1v\E " "GD6&G-Z’Gra}.T伬muXD@H#pZ^Vf|"DZؿt~>\MF7P0XkR !R1::j)I+mc/=8ɅL7:"_DD("BP#, zS0c11_ѯ;Rl;C۶m&wHz<ũ@Keg\ZuH֚BD%@)E(/yP+Ƙ/m<c1cl;fB* D'QQV111>1jM$Z ιM6ڥ7ʲއH$󼰞@qSbqW+@D)|N`1cmb9_Unzzvpp`tl8*ϺUUUmi8!>z]]Zk!ȥdPz2$7JFyV,JkmͲtq1c1-W%B -9|Qn'h9DYWMϥEN)>=cQi#)ڳ_o-j]~-ެPnXJYUc1c[' P&ˊ^ Lsq^JiD=8[< v5wK܎T4(X|)7_&\?D"c|aJh t-˯}n/]\ge٨4J22uOQM25Htы4jJ W$zu>z׻`4T'KG@ :ʔtq}.)F^5c1 ̄yEn}tӚw\7vy.O[n2T§Oc;}\=YAoO'<=|yLFSWg7wщs;ASb( 1c1֑dtpVHRON͖esƽE7XUq1*QVgnʾ~=WtxOz61 o jd"u;ىyz&7mÅۦuvL;}un^[xdwuݬ9wCPzΝō͝hN1c luFZ 9{E۾}1U_T gpl~9UUTƏ<'E{ݟvʩqh=߉%s2sʻ:I+WXCT5TUT~2(ژi&U9]sCM_lBN͉=2~L7:F 1c1vg8Oaq} ,*T!)n#;wڹc{$Ii#In8,rS2(,˺+Пz[K||7pvGQuԭA.RsLUi(ʂJI:(9R"9mWɠIvy=UzX{5es{YUdӁ\"c1Y܍o2J{?ڳѱmWUZ!;i)=|dm`SVnr$IH,m RȸndO;Зo5k>s`ŕߛ.=5=f+IW”YG<V}(77~}K$Jm؍q)<zi&uYi|]{c1ciN@D\כm8ڳg>/ZJU=9ir&GA#UZxRRQ:(EC{ ~m=YOi|+TEeO]jgq N+5]5MNU&zg@?G./o߽z6zv&.|%??{'z#~M?Qcm1cӵ>Bs{8vR{C䬵I,3Q[Z/y]X2wZ3g]dRgu)K]gN*w ǍE{>$k-cUU!6v1clc! ^uOLBH)P?B@JE~_`_@&j^(6'B\3>5l)VD Os9c1c`c{,D:k{WiU8`1c1N)zk Ti3s{vmh%gsy[ٺkeyKW c1c[rSB<8A;ڽ{HezLG*38c1cm`6kN;B;wZ[T#urٺX)[dc1cmY'66 TJٳH+3KX|.8c1c\?p:y"Knz֕¼w%61c1ֱr8p׃ mD@(]aNgYH_tDt\ %nSǵJsByõ H)UUU [2c1ؒ[7H8]('@w(A")%.K8p={u)$Kv"ǥ;<@!zpJ)!3-h@ hk8K%q/s*PJ !1sZgY600`qqe1cB))4Qf& ba?eS %'@ dƘ',^kΚ³ 70 8Ʊ^#>/ʲt5 "2Ƥiek^c1[1j%MU" 5^] !qk >r&]# '"jȲTeYYuY''@hb 6NFfeBF ZJJybc1[N k.VU΃@;w<9Xh_ADBNQD\e+ZDBJ- vf;Nh 91ƕJ)8w3׉M/^ej,;>ܿE}cg~Σ1c1@sCpKBu1k3EK((ЀvrQR5\ySШAQJo9DOŦ p8NIk6z;~e/{s={Xk>|u׽5+Ћ1c16(R:U\p"xOdkS=-y!@"j%$Bdytoszpppt|(ý,n@D ;gb7HLq爥z,ַ߿CK^>q ݻu{n-oyK^2c1z἗Ry~;OJ"EBD$R 8NḝolQJs31G~pyj#;ZoL{6B=3׻i0FL˻-? DQ  9mk Q<ϯ tt]vTJ]_*!Du+BI׍ 0&eSq$)zM>N\EPALުDҢL )Bpix]VJJeYME2/zVXQj=S;1R:;ɍ1c1I7g B!DDD̡ᖔXVN:Rq*'NTDD vW@Q!bnMozk_Eꫯ?}mC$էgvp]c#5Ro~//|N9yzd:;m:dvH\CXE2E3@2ٻp˲@k9;cΐ C& $ʌRV ]Vwkeݖإ2( h)B+$ @2'9g /|3ת?{7^̈)#_~w{#oFʬ o-VĖV:e"xbQu۴7QD8D% IDATCūYGE\nVt|wAAýU {AAyWVV&͹9-"H[{M aDmtHt2h8jԒFZk;=ggF8|hBYaKR:2q3lQZ~K~kmQ.3[k,֦i:==W#Rc@DRA}e흟)Lx~8G"}/YܕL-O 3k}[Z XJ9sEs.ubECe&W}C"2d<=ڕ=V#4ZuRmx]Kmt;  q~0 چ/l#Jk5vPgQVHQ;Z\Z 1/lY:k=DJ7U'ŃwqG$.YZ[^钉u{k-iM|y yZ[-cVWo{nh4Bg>gQk]E7sEW|'J\@OeK4-~?/ٷzooM|[_z 5sr}iÄ?'sF[~'VSP⒙ї9MqZW^   εaTH8坵 !gJc̙8Q]g #Қ cKK=㢰–EatrfTĻw:hQywY^Ϭ#eHi={]yܧ?h#GGTyo|_'Ir 7 CuVF$ys"q$qwG~ٓK]Ո|?{o}qik=g]Oop_nj⛟yOĭ/~kW?Yk>} |㢯H?;_To@_7w`Lj`f|wAAJD$ER Gy44xoRe,tU" WkQL R/7ܒ29_.+p{fFNdvjrj;&&MdGV;")dA":>V"}cֺ*-cfԔn5T Բ.;PZr[>G$bZ-}^}ݬٯ~h9z͍\腕oZ~O]͛?7}'>v׿YTgvcup_?f[co O}#[nX$}GAAN{$,  ߫2f6&v֞<S@VJEJGB/7Ƨok4ҽsU[12Sjs1p߮鞥|sѤ \:.|σ  w6NWvzjH+3R Xzp)hH+"a. ^< ya-xAA;RIGA%iFYdwy#ۻaED{n*w#M^;D|_Wj4y."gz/\Pաe9q/||#nk\7;?}?ɿ/?ݞjVVR֮}7>}WggYZkc "zo tD񾨮saVed"V02^MLLw:CV:KkvrN&8 _w<*#x}/~?{*QZeY5ڨjUq>|//_u]ֺ*9&_z-2/OϻS=_qJ O8o޳1]Re D+_wc~}{I="?؇?1RŸ?v (/m\c?؊2yZf VǾ_EhfMB   xܺT[mbYD$K+~/{{4)ȱ#M|:XA-Ul9RĈ>NP\Q"/mxHZB_Vԡc`aƼpg*F!aqY"Қ"홝h8|Ctb~~3y`eyc8*E#hT[sBAج9&78.Dr9u%i޽)OyEQ#4=ɲ^y39??)U]d@^쮂|rɟ}ÿ74%iXާpg?O~}W_?olׯ{`kuuFo F`4{v?VWff=կRb eιշ{9'[k<3&I׼ojeY/177*?qw \}׫*5v8f-ݍ9HۺCt61V.E6b0YlDs"jdj4X޷<õaF~?Uh?%ף"K.ReĶ]kq6DƜj jX5YnSfF3.T8(F0rwԃ  \Ї9q;sX"MDJ)TBT7Vd&㋵[JH`P4λiaW^<[<3L@8 (wlmNjVҬEzHׇyp;>n2ojJ)#Sǵ4N"IVSz:rh4/YSic"0ޟxMpw !L8R;.E/z{;Z]wַ|跿U~GI qrzm3)A:yɁ.$ JyØh]e.k/ũF؈$XvTX\ 3ڪn+V17"pTv5/L]+W'O>PCI4*<BnLˮ'nAAAPr/[6^Uk=r/( JxIwPshuoakyUGimQ<+K= qQ[nVsCFˮ⻷޶VXHX(j@nev|Sg9j\hi%W~euuUk=11?mo{۾}$rlR9gjVI kF%Z۞`qK:n?7jv1ipFbxQs"/IkIi3leD t)ש]TZ&՚V:P7tTlIfYM:^3tYfG(I^y]   .;-"Ao߾z-&[*8'f(1J)b^FױrM\Rq@U"P1D @ՊQEEz}uc=on//rcc;N5V&5+TJauoL MRrQZ2sW\qś&E"Zk(7.? ɇ]4)"{ IX5'Gf&q\BmVӉz e}\ <.a8BZ(jn$㠗"ht߭N-ސ8f}W0WQAAA #H<4111;;(gVW Wh֨Q%qy޺KbI*T-(D0*f]f;jQ q3RSV}!8n"*J:iFI[u~J\Fq3 Q=AAA\Hoc߽{R AZ|LҚQ( B^ZJ&%cuB{ϳ2/ʶ׳0KEq\f9K fi[DNjK,Iޘ wdyme[ZQZ b^س0gs!y8I8$!zZ3sִڈ82cV۞ͅJ@ K&kRibPV\V`V,QG95)s,jŌ6)X;jҺB&2a(N .Ƀnrn# YeL'Ӆfۓǣ7I*>+AAd;IhEι(ʲ bhY1}ppE'vF53EDa9kmm%9_ X)afo {cLlZz,;?̦fgw Gf(엨ɝrɾ[Ǵ~ٶF<9nǝI9pQ4%"\,˴{@TZ jc|vvM )and@g>QK%@U8Xr5 EMa4P(\`(8 xJ1ܮ#}4jQzX0$02.k R   n+V"H*̺ihnn"TITGxD8Tzq "虢#+QVZ|t]adzT8Vے E8"DFq@){g"rP\-HyX\\v33Ss={rќ޺(ReYj:˸N6]$.ӃC'#  ࢧZ04e|E00NxV:"go"RAnW{DZ0ZkOcZeeYnjܞqLm8M<~틋Kľ}[o:$yaE콰\6Noއ*4^܇Z/   &$k}$٨tiZF*]DflNGD$ZSimXzJ T\ !⽓B1 BD=Zۆ?cRy7 ֺ\5Ԛڑv+I5Ҵ^w:Z*FfSLxgp}"AAAA[=)lZmmmݳwA)U%tl;/')"JhZBBP݇WMT*wCf "+K(uᘔjM( ^{O@4,>t#rkj9 ka^&"^ď%|B$  (ڴȊ=.,5i28RZsqs "76U?}. T*ΗKv̀yY Vwީh4Z&v-r{݇V׺΋gQA\ՁCd\}sJr%*PAAApQLD G{h4ͫPBU1|y|pYM" Ͻa[ZjeD!"`t3 38@ؚYDU݊ gk̜%"NOONe-߻uaBޱo4FZ#4P"r pAAAv"h`7+L\YVJT0=nYEUcH8Y]96FsNH)DEH.z?Ufwb=HՄh H61,Jl{mk8v/ݷhnzsssq D\SAAACË+i2s$nfasys3VU1m8!s>\_^YJ7gFi@af2(>!"^+ 1Ru7G^1>RJyf=G""OMM1sV[[[Ʒk׮TQWZdrބ$2U ?œzpIntɺ(B(G*Ds91j1B(Rx9!mPi+g0Nٰz3 }/p{{g?+  d$wB"`ugggH΍ًqly'EiEFEJgm_DBLm㎾q?Q}"@BPaCmq?lKPˆ8p8F[[Yλ{홙vp(ҟ&8.rױb@D6d(2mDSmS{rۊ6=SG   8=U" 0"" {nI+֖Z/rj|xDH3,v|3p^ȟdPxuPV""EPD.G{n=w=[e/CV3P*2fV pqםzk߾=3ss+K߻]vF#kqTvy^9q(#8.rq;~0E@k-H~+$guD*ZkMn   "=A)w]f^.)3x!"hE5j)β߿{P(DB"ー;fX#DlPf|͸1<BfDHJM LnkZyb\l#B4qXO^"W4tz]="m NAAAiD,A> I֊]6ׂ<<+{,< IDAT#GP;QQ{Rg0}cG>l-W,"+y?Tݙ:'xf$z-z-*eY[ﭮHE^8P dp\䢤mID,A-N"]"% 9 7@dt+AAWmllDhaa{R" d !; z_LLLub" ""01[_].Ω 1&8ASqy0XIUR]R11&YV(<SSvl6V,,ݽPm^䬵\EƘHQ}75- kk}ܕW^sO[֣(Nv;s0/:  !" e9v_+MӲvU #! D{cL\KWP5sɥWv:ۿ[Y @Qd@(dp\ƲEV+%y6ih˯w |s+no>[qVî^;ڢ}|{ԥ~*N"?B 2'}k;:՘:a$>\cLH-..6dvf~m}e0M 2V/!qs6*aR"$#|u; _K|w³>\u];~oͼkwn^0}'/!˗2XCMzGw|' _\AAUnF驩6kiŸ?A { sD٪E98護Zɉ`={$vhͳA@A}YJ5 3Q# I.fF18D,^lՍs5Ѣ[ LF0֖3*iqӿ|?;^ɜoM3=qsyI=,׻MZ5?2K/S*iwt:%W=deZ6'?&ܨzF71vc\ܠ^AAAp2U䜫I  ԙg<8eNvd&0(v֗w뵲,[s_ ?3s,\^ya<:fs#+AA""J),iڞlAυsDa B"]8G<}kaoQX[&rL׏Ǡ<%b`|YZ[+%Z ֋V'pL_Oi9W , Zc,˲*WIӔ[16 hELM<ü?,=\'MqJÿHkMmJnkl `}Fxk4auI$MU"Ut65rh AAǍ:Q g*B窭;4VfFG=k7Y%wpU g2 @[!̥yID)R@"T혷G7ۂ pLfp(KMb*ckm$"JT.rr$Qs[E*NZ{0?9W.}[3nzV>e L,vu=zݟ7fsr{;_ҷjѠrKZ@x؈hw7P˝k7ߑ4ȧ,7   8o䂢(6f911U}gAJ$[F.{l_GvgY[ "YQs΍zLCc X@D=c8^,/ZVUF 0B/!m%7E /_oǟ̿<%W>O~١'E .tQ?3/zQ|7ڑ#/o]Y/tDlZ[Q\D~{v>߿r{I   xN Qd|YٸSz"*#:!" c jCq]7vl,D%" x RTt8YFhfsi 4M_$"Z1O{?}d,'N:8blo2y{`jMPV1Z"*s_{{ sN xfvM5yXAب5x"bKS ًo'woaA 0]w>̉[.& )iT@=8iRFWLF><ʊ'gT{^%E(en1Ѯ_ovLZ   ࢲ"l$u+r]ιzfL;XNSh}#4Zt,{A"E "[kI)rYk DI]+afXK"^J4{/Izn7Ӻv'<΃   yADBu|6BPmͼWY?uw J֍z旼g,xELg,KD BE(8JUKǖ-hEZi{J@U|M'AAAE7zD%H`am{!"TQ>{sblSqE{D" 3y^9H!}xP @k T5d9WȎ$jJ1THi@"lI?wspAAA/@Uke}}=IvmS`8}coiL( RKbTԭwa!^>V6-hK_hkV6e "4%J2[ "`H^N\zAAAŇ@ xD<:ؘ* *qഏ|Q"x&$ֵ$2յ0<7p?ssts>/ ?[;;$E:I"530x"(,ۣ'Gu   .*" D"ADDD(@*u pɢ'nŪ( RQp~8X@NB$TVr"QEFi@Ȥ D<{NgHAAA[Ǹ>˲zDZR vG:8EI73 3xJ)"pvF{avsp3tA1,]^:kߪ9"b-I"c7fAf'ss%(C@' . S9c_2mq`I;>c>ŨIE;?gfDDkyEZpXʲʲZW᜻ Cg-{-  Su d1SL/"i +;EK8NX)#" JUٚr"U e{QkdDR9Y ay` HjsVA[JZ+"'""\"xۆ° "| 9ϣ(bHWPgB$dȨ86JQu.7D@6 ^սO$sDHD1NgbbSE$̬:   !ft:ZERjG}^f>n8Ym9jFқ1*VV%@KN!i"F#*`fцH D!{EQITheY2t$*gnAA */< Ƙj;=3 ^$IRs d*,c1f4Ua8C#  tjWXO[U[fVAjep4wl$DEf3IY <"jZ1Z^ OOwAAAv:qQvD3P^x,q6HŞ2VFЊ򅅹FѸi)kZ']\O} ,,[s͵̜<\< \>1tofnf ۺHcLQf*Fud1f[p+~OG#MӪ(VK)eYn5 ^#Wy$umc-g~~:8ϻNr?u_{ǝ~_6֜u/}q{e|.w^~/}SNS 選X% Q?sO<y۾)k{3{vqǼ88Zp~Eۧdh\"" ;1jyE9|[λ)Y?g\ /x19(}W?<3OoMO'9:3^8j[}o3z||Lh2cgG6[ SUB$7c8#sNl4MYɛ&~m藜xN9q9g|//<;88},cV!xd-N&\p j$[]ئuYD~gQ=ॗlqpcjjs9>0 3< _IOO\t*dƛˮy? Ӛ 7vD4>;9IT2J4oyxLR$Ùj`r_xb0`{Vwc<qBD"fC,“n\FdnP:(u}1Fce֚QJkTg}(Fq!?^} ox`0+;`~;K|.>[qtȶU-ƒE`MP7EyOB&gҙk)"sn6E =a Y _gOq4yK//矿X3H"쒊&`6>qi?4.Bes6e~')2GVc}2Y+Ecu0Ծ,)CdFd\ӈAΫRd:T(e\ɡP@ ՍfYN{nD88:bH4g $"2hITbOkCwZ2ɩA?k&|?V+]4 C1 ֹyGc#Is)ODnk= 88??O\uUsNQ~?鉉' L߆a m={K/X̭2Fb=ayӼ'yn}-aҌ4T.MTK@opȻA9qC]M5L+i0e]=LPV4:sdTz?4 A6oFA)&9yU#\ƄPi3A7 6ga9881cXjIxgm28߶4b ETFsnѤiqƌ1B !YհfYkmMB6Gu; pꢘ믿> úc=蠃."D omptMYъZ1RM^$`"gik 0zB./d6 Mx8L52ՠ*."mR^LKUF˒Y=@*BE + |WZ~#^zùЏUasɊ ^G6_ m36mS?gK888:'aC֦LɒVxg}滓 :s8 Mδaes$QPeY*nXRFhJE Wck DeE1&I"u,ZNMv0֠+xF3BrHskQF eG32Y>SZcX>3qdB%EVVڄ~"O f3Pi8Ң&l4EYbECgQkavm VC)^TE|| 88<T8Z]תdYLqLDsk3(( deo9o4cPUdI!pg>[l 1$n-2ƶ:h.J44M֍F,:~]Ruvӂa99QTO0?*F|%QOUV2_2JJc#NrVq$NL^FaXeSZDqbfTjDed?kL(/LUCYt";GU:(~[|Pf` zlڑ888Lm38 J))Bcs*-F&uGe6MAǡ1eJ F+ǩlkUUDhtuu;0Ww`exMkFD׋lc)e=1fR.fvcRcu+Q Uy h(xaXv"냵#SI JggIA> JP]n#R 5C|΃RF~%U-JV >JPJCѼ.88D$%Z3&zY,qYk֌1F۳✔rG߀sk1nyXkH\b?20pΕRJB0ƀYk5Nd(=/cPwr4f#!I: }m(cZd`zhvFN\J)yyuZUUcL٬zH^888΃!*;{-:Q'7[E>gff|<8\c|Ȇ1{" COHKCD3їNYFr+]cU,+2ƘRnE*˒1EQ.g888RW 0e(˲0} pV,8cCdn`1y>$GRE!/Šc.Gk6,cuh b]gߑ{8%qqqvHj˲LHJg7$@,Yq"mι֚ꏴ~ob,c,0߫]@\hnb$h&bN~28JJ<=ϳzl6yeY֩JEQlNdrqq ,8+UEDAqWb:dӳ1K<`@$"q/I"ZGcMqᾡ8Pa6,ˊZ,AcR{`aqqqvА 8ݚg+e&g*eF}m]K[|1 ky+Vh@ܶbζޤ-DB$ `8CXϗ6Jz'gxq.b`s^O=1‚sx}{gKʪSU RB` +B#[Z2 X-<eLHC EG2-Tb"yʂDH.i*Xb%8X Kdh$mJ60~Q䱸4!=A6 H%Uԏ06& daa/!(ac:3|Uބȴ+fӑesa[ T] $Kt&Mzo1 YY2o"ޣ .{:O~llj^a@Ti;덚Ɇ&cege++]$1^d7fD~ 888nXkRXcj+B\zsagEA'a8 YQpdBxhd%-V#9#zv ]n1s$MSXOJBԑ )g3zxBtFZΝ{FQ0h0!Ȃ'}v3ʙ`8d Mړ?|='zʛ?J7jє:%VҙlL xXd̎GSjo{RT:dyN8TYI춭Ec yK06sL3>yU^᯺f6LpF]xB tQY1U>z˙(+U3oPd;, m0 6ݰC=jFw(&`u/äkfeڡʇy-UXۋZnnW c=Y+v,;wqq?eYc(Z{pঘ@fzhio~B(8ʯr>w4X~ԓ;]/?&f{߻o|RIg3mX'_mw=EƳ]5ff~竾zY})O{?7[WM+L&ϧM;LXr(~~wn? ✃ؤ7~9{W?lڄȟ鋯=z^~o;sZwW/6e_͛J}_sK:ohpnOz_6fO|sI+㒧qqg;֖}aǾ9.n1`gLA? "d,cDAU( "'y@׆cŸcSy~^:,KDCn7I֡P0c,scl5jÀJoW2So_[|.>S|'~3{kJ!HNo漫W^\"LL_wŗΖ/>>Y:W]s9Zͭ l1A[, h0V_y?W_vᆏo>_,|g}W ,xOq͙~#_soxx@WRMˋo=^vWi|2to9?)ť|SW~h??u^D:oqqՓJRY=%"FlmV[,gzc !' W*qFFۋyG#u^au"<_n%\rǞx{瞟gu# N6ܿ~QO{ɳN}O;h9wϯ/l~o{nng5܈5˙=4yȺ=;bW=7gx{l4 .Z?묳>ϯ^.K,>kVʮ&Xz.̖*}[aTe/ә6/\gvJ>KW4cY\};4XlɄX{M|k? 'zXJLjlUcQIz% IDAT_oyCH͹;C4,FK*jj6GaVKG?x//O봅u88I mD`󌵜oik-bФaYvX\UrD(T%ȫ*ØAŇ cmԪ̮PT0 8#~,lօGX p0󜈒$r˲Bp?я%/yk^sax/yKc{0 9uι[ex6O9/Oh_H6˴xs&j9꽟}/Uyf:+4,ȍBլ0e`}ޡzH-}rQLT0x+~IW{WO|͇ƿ88<` Mʮ~q \48稴 q{ -,a>чA,ƀ #i9"Z~{F7+QvV1<"ʲ,MS!{3nO<1ZkO<ěolee|+Ge=SQHm*zoK~r?ߺ~=zsF:i\qmYA^/uG叽u{FnZ^S1D?K=TjT)ģ˻1(5GseYBDʛSݾ5o<onb__![&ޟ|{HDP[85lw 3>Ug7Zȡ|0nVG&!z/ޯn}J%edG> 888CVU~[g{Ia,/ڀ%ƘB*1FSEfl? }-W8Bf+l6#g Zeb%u2Izp4iy"el~ZkyUU19Xkێ"OX/{?nkxS_W 7L":¿g՚N zy+__n S |9A7ēFKy7x/x{}b,,ߟ?yW?|/87~.5h?9w~Q/x>2?얿yx9Ͻst ɑg 淽9o{*skZoOO8?^ #~^Btt1#>yO5S?ǸOqqq@k Ð $0 &mN sXkވe2uPCk]UUUU`L O)͊|fnn8XkR aKQ}:шV3%c|l>`{=^DDXn=lf'[,ka!h!]x.cT]Zw10N0(֤RXku 83pC9[nM>1uc.>ӅZW^x1cLFD~C'Jߧf폵d>0?(=%ca\˜ V9Ve˂xVBxi{ *}_zv3&+ƱA#>6Qcr(VweQ2@ qtX&2%R=߄MSzys@ x;!b 0lDf?>niƫtpLYfqTsM>zoV ĉb2e{7֮ $z)On_tϲ8848yL3^} RSSS{訵VJ GIQbr :1E.=`s`i4;زY[wdE`gfeŘ0dEd\b1 [I!mՌ B 6aksK]w+;,c,(<ϫ#)UUcW^yUWmڴizzk=0 1UUYk=ϫo"j6EÁ/ a0fFm۹!d!^V7UJ-#hqף=/苑^Պ!8戳1Yd\f:ReBӞQM9nfE Q) Ʋ"HXhr$0VDt7@o$jT}/) oы ka5+U&|aFF=E|]ځj uqq=AWBlݞhu4:Gΐs`X(dewURik“B:%VэŴ5z1ZҬ,Kk0&JDjyVUQo~Jsl6J9'" s).r4-nfyJD%իw_xc11%r0z*(l2~G(&&xSP4NQT KYV% 5}OF)kEX-^։Ao,L*zJ4>T,&k.V^֧"Ք #sqS3 xN?}@V@[q[i9"MsQY튬etsf8Bv6 cww6-W-"HLxruc60+X|CyAnXYZ֬|Oy3bg;-888=DN5B8J6MNׁ g !kcZJ_Ji-YYbckwxBx/ PW]2mζkޜ=fihA[1ε1uZHY_eBhca-^+g<4 4S  *OBJs$Ti"E,\+ [j@T`@?Z(Mad9gˣX$0J e J*C@0,`gECY @ ! 9kP1x^aˢ0CE Xuqq ,YD pKAa@Fs! cK;?aa㶕훵 E" KϒkZkrd1 =1h4YUT*+* "+4Fn@$ j r%1Zk.*ꭵA*On& <"F_؞8qqq]Ҏu]F= 5`LEr#]̕DHZkcc$"i."gLH@!pT:ͳ,˕+Q<)jii4a @)%F ZC~`.888NGPJYw|sN[E$"`dr@bP%Ȫ*B$=>?QUizv#E Lփ59AUU?_|@0S,Hs'rqqqg(@Dk-ldYlDzl~`  EH2)E5Tk-rn**U,b uhc[# smTiQE&|[a;>gksqqqg1`S`IN|c'P,,| 0@@  1֓0& kIk*Z ZmZKJHJYEC-,͡&2 np'EG8qqqIG`+);w ꕠ9r T~Yi-""KNpQ #RJ18# Yk6D%*(!R* CTN[7Yzҫvb8qqqb V)jLb/ ϟ Dd(,2k@ k]?,˲, 8DEO"KZ9zq^'`ݎo\AeYUUDKƱ>#ZLQỴYzN=P\qqqٝ,NQx%D#gȻqqqgPw<+9A#7Z 1 Ĺ؞yō4d 3,Y @<ƕ4z̫4ͫB@zҗI䅁p'E<7,Wj#9@Kq8nH)Ֆ2Zd5IƘ5*|xxl_vvqqqg7cZVD`dE[kP^o4 cLp4B2QzEjJ=EJY_8GKScv}.888vatqfJ}}x5Pps=SLaKƸf 1ƐȚG6~ ``q!0c4c9XҮS)LڣF.qqq]Zk]ψ؂)"K6$8J)` d~Ql.DqA 8"Xr@v?N?{%U~PQ$Jd#0`A#py~6.<\  $2$(MT 眽_wMOkF5ݣٿUkVwuWg|Ga:c jb-Ē$qJX2 " !B!ǚU{FvZ)8wk1FJ5S] WW*Ttlmdyu]ZklO7)QB!Bqr ɏNp3+DFA+br*@xrZk04y؊{L{]3xC k5"2ǕkKT$N,B!BqAD"6߮z8ɾ_ mʲ& U) 261ZX/ݺ#3L:3G IRJk̨==vӑ!B!'I,)X8H Dt-x&1 :WWa4jUoZu*m0软|kۑI'-6+lVwJ7aǩ@kV&3T:j19Zygآ-E՚-o4E iŲ^USu+c3ڢs1ԪbRAћbE{7٬*+R:U VURHT:ة{Lǔ*6%کHDx!B!)o9Հ!BjMZĤEw}׏|Z#*h%2`uj[/os]BQP Hd5ģ"V Z b3ax 5&fZ21#+Zk4<1VGisvR y^nricrWI} \im!.ߋ`FvϖiE,8^HcIb|wYTݺZv̶j2=UKҴ^ I% &٘yshv.vU198r4E(3* ^M!Bq='/71DcTex\{PFS4Y5Sf(<.~#&k'yZd"jֆ"&7dֽBqC7I k,@D\WXDq&0֚c-WU} AI=O786{B#fY\xԐ{L{)=3q}emoC[s|^~ozgn|ǝ~!7~_=]yëKK~O;]>S~[wp,1B1*c)V}B!ݤd&9cT"&XVZZk`klxNJS#9!hQBKCGp-,M1(,oghPnu.QAQp|G? nyCg~c)ǵ~ F}3$IWczzg[OLZ_]5Ι>7 5# ߝ.2u̶,QҬyB!L'DU*l+KQ͚e]ׁ՚1ΉO29!:f Vϕ5 8_oVej[vNMr|~oytsg>x+_3>+uS=OUq0s?`hƶv}w?us0НwK?wycNUU=D}B!'M[„ R3k-*fEDu]g@߹{1)bZkMDXmH#I wtj3':L_ڂ֡TMpF׫};aO=83{9yNߵq.aKI|Lu9;)|ʒ5V㤄[&㇝#}CM؟Oζ>/_'z mثB!bڄA(<33QWjcFdR`BZcB1&%3B2ݙ' @G r6ÁWk+J95@fme{?T><+?zZ=8QW|{VZijuC΍~()mGyo}^vv/.:7riП*nO[ ٣C3V%H+'B!\RJk1$TG%Vkwp|>zr-3ׄcbxǶVcThjOq}dfh;EH Q5\HNR Pr$dHZ$v8bDD C &by,W'Ǒ 4+"<'W]}} IDATaˎλ):܎AY ֬Z:s!IRQ h 5z3{,]j?'?SWzbʳ|waUiøI!B!811N+Rbl?ʲԘZ'zD$\z,td [9I,s1FnT1I>C]>Pډ~s_sqJ7c=]0Ԕ(oQYvi/{sjqOU/8'iM ShxǽO#B4MӤS/:bk З&M!nB!B f-Q96gmW>. #+CLjUH:V`Mt>ܫǦ-UUh16 !%*?1Ѡ,kMO9R*j;r*$[k΂W,<)Nf.~4QMC/m<1َl;m L MvQ|th֨F!B!@Ȕieib9B$P 4:fF\_3\`'bp@eY@^'Ǒ}\5Luǣ%bSqyc%6N#WZ 8*PfTfBsfюUUkʴ]lsn}񨪊9e(b]&,| U}c\j4F'!B!IdL`< UYU}dfoQrV=0~f!EDkְ./! +=c&߮KbUUG㒬PZIVGbg*'SF7ۢzk'WLzkT"(X,fB!BȌ!jy*P Cmk6'8cz0YB-Q9k[M6'2(@ZE:MSۆ9n'~rY1TU>tESiЬr=*ʚ5Z1+WpD5F(.@e"+L `0^iHРO4GZf2RvNf 'U\Y!BͯdYFDw 3t8Rgp牑`PjK$SȌcPz<0(Gr4l OVcTKDdiRJS}Uk L 6.B28NQs.MӪQƃ9Wu$i !B!Ik9Z$V(F*_EzZʑϭ7s&Sc19WEDh['ZI(:RJk]UԔ,FDd5loB!Bp#4 0GDڴˊb8@^)&u꜎7G4.Zkh<ޓӪ1D28NQD4yWUjpUUUz<kFT!B!m)+ YN]+K0 Bd"񶡍 f1DJsn H)6FE(1&MST<ϛbqsn<{4 !B!Nij1[nfxP̬^;q qu > lOsu XkWB6}@6v8Eyi3g8˲Iy>??B!Bl"D !nme31*|tIS+K>҄u$}Ӄcr}Ĭ$qj*I?,ˆTsʲlJWzFW!B!NV @@DD;N cP>8q4jx'?&Dcf6x5MF7ns{+Ru$B!wI 3!sФ` C4K۔0+Pj2hviW.G26́hyRr|L9^sHXSHؚ R*I__+կ^s5_/}~4hjU<Ͽ\9 J4iV"sMm#5O{G!I1U!Fz1lt֋Z[_ڣ/1Ŷ7`0A-Taۄ%у1eHAۻ6CD[B]UXtPee2'U73*yBęh<KjnGJ!B!9#Jo;md:0siol4AD"" !6W!D$ J126) *Eʹmf 8aQkHD4UAiAiP+Bj.D\Bc`эV<ĒnWSx9UUWe/{ٶmۚ_Tᬳzы^ D`eKkz~*M kA@]tfxΒ2əޔ_d~_/D]^>Ri*ZܣZZ vfCc0%S}˔^pmɸ ;dbDK"-J3r]Oz/}.|>/ Ek=W>ꢧ?Iyݟ~~.8 Tdg3z_~m;X8B!bci+[#{R6nBD$Ie`V eYU`FDZ) (k>2g b |qSv"< .j ,˒$yj{W?_(<袋1xQL\,w*Omod0>-^ӇuYuTU-vv05qi Q8IU&uYִ#0Π .{N_tF5=BZQ 0iڏ}55!LUJ?o|?[>SYӗwTMeu/fx>w\gjhw[􃯼ߘکa2_/Nm=B!bYΤXIldC&_|^ddk=B!٨]OC!,ONd &cZke !>D G U<$ *nV8ӓrS@D&>R@֟|/~7sٷo򌘪\;?zݵPmQڗgp  !BqJ:yu];b1*f="R , "#52X|Ig#.V!#-EDG{|ȽOߢS%9mqhG{_߲ߝT.z?]XYۗ]?'g>7/>+sǺ?3?Zbe?_>Qk&}^qwi1Yk˲nB!X3hc"0"AꄎIĽf<rj2IUlڞ~>̈#7CU\*hꦯG `딭kRIi&1<P=&'eH1*4JCpq >^ӻjJBhRw ^WWU'=2}sKKKNr[|:;ҟs _zoM)x3~~tϽ~z;>ooۋKO}/]}CS)oq;U=*+L?%{{_ҧ<7-y U_ےmO~ޟb6jX _~ֽS?L{qYmun;}*9nw6K?3g񬷼KS=uձ A6sF LǍl,`R|kYKI!>oSivZkcP)\E(4?[J 6RpM|mSrQj;K$ku]Zb\n5zN4X-~[QDG~ &?ZXS5$ıWJ5sLBb1拦'G⺮C1e%1oi#?#}k_WiZ%Z,8~/O0AĽkNP݊npI;®t 狄Z6V &Au~icB܍mY$ 6ncJnTj6]ʇSÙ0_U}L\2[ꌆ{ 3sXmw/pf-y:q㑵VGvR)`XS'Q-in'0?L=]7{TW-W 7TScqQ#FdX9=/3?KQB!'@W'k?qЪ (heJ)cRjhe DDtPfr=Rhcl L$F*++DxzJ) + ;lWY3k6ш " prf|ܹQ)s&q=L+N 5WU_e45dZVM sږޛ[NJ,w1)LoKyp04[YJ ),!c޾]K@@Ui4=m*XxfJt[+!\+|m ^vez׻z^F1x;ǁzC9$vڞiK`FZSkXwݭS1l_>&d1SQjBVc؎S f`һa}φ2UT-/s=hO>cL2tŌL\ #GSaimi+_rAGܖ%(@ wgRŪe`\:+T61B1o$B!NF)s4VƬJw4qMB_[p7rBv/FZ1-2 G&$&@ )2LMM-..^s5Ͷ'y~W'/.|oa;ur0*u1 ptUrL (h.оٺ-M?BcMLLgoMLddn$t0:Z3,m;F_H*T(v^xН|@crgжu Z-hapalh7My=lr<:/XcVk$ݻ1*3B!ݴjP+lx15 'M4uYp6#fa%F2fp;[c9ƙR:ְz?_ur5wdtH̝N'877j.<χaι(.O3~s볨B9]g\\ IDATcqvy!1~ LpNl>c2j [~G;'Um[x0C;U{su}%¡֒ٝS3<%!`hg[J j;7.Ζ!XZ % /ʭL-NʥuKyar'Gk욑Wu]7iG !BI8&X)QjcMsM H+*vLƻJ׹#P ʲܲe7ݼk$5X 5#"#0J)Z㪌jx4;ɷC(D,Rko~\e$M&a:MӦ+1si}ٚ:0[Nz 4n ,HYQnT.Gu$W fwL61o_tgBd޾ki~N \/ih1NJ4=3gOj™7glϫV~eGч+{l8΍f5"F]YG(m dJsyl3Bh4Z͘ w8)oZIie"ҦL\B! Hd[0#*W(tԞ,7+=q9 yyҊRᮅu12Ծ" V;=xG=šk29B& e8;{ܻJ$Cyэ|y+`P|D 6S&!I-j _uYZ$S~ Z4W@vۗ`+xn` $;WwN[}ՙ{k=Pl&/8B!b@b{ZDnVڈjk~{{}#ZJtcUj<@ v79s~}NuC*UMLU 7kIבhQ*'Fcܝo#rB!B!N>w橆M^%f83sdmQ7~&CA(#!B!'&__ b7?"VU5ݛuKK UU94\rI@5wB!BJNFlvEhR6v^րNXo='5gy`"2ZF4 ȓ܍=\W1r "K!!B!lF\UUsn27Dk1"-y+ʠѪFIrcBhuz/!B!'fv*ٱDBӇb Z) 1.Kը 6A 3a41()QB!Bq@аZ$:!jҦ9E!3woSw`shP;g1']㙜 U!Bב-.!!B!ݤ+RI4=8VL28`.BVE3#hBeFi ɜ("B"PU~9ƱN$!B!b8 6T@(V"BM/O;M)5뺮glj|X)ei{U_GJk4*_!F pb/vuz !B!"!:ItÑʲޣ((@xϬmm^!@)E AX. j."" b@q#udL H#),C\u홗03":T:*2`B!B!6nvu(7w(2Vu~궘cۋ#3;RqED}Mf\eU1[MYιynaСh'ߚZB!Bqo@8`cgT)UֺZnztQ6Se$WuUS媺&ΔuXy3WW!O1FkMDeYF1zj"b@!( ʢUP) X?8?dygύi0!B!䆈ιxc\s׵&O6ch.J8\V-;5U4u/yT&u""#"#U(ƋV^}k[yoޱcGֽN9sZ28B!Bd<'(&)pjSDd eqyMjTes&2`"gMX\ѤkVe4eG%Dphn[8o|wVIw i28B!Blzڋ6cp4aՍj8 k sTY֭i2s$"uⰸФ>4M[5fX=H$C!B!ɂđ)"E+B%qg(Zu6ɾ/jc *&v/PK#FoZu ݩ,mj8GBbU5XmlN998N/#sw V @+B!OjJTE!Z"@>DePۻ]V0hb`QV쟫JoqF;AN)@ц3 *der{kÕƢ+]+^޽""gӱ[T#DT(2 ^gGn+>IxR!BqjQY`a׵Y+dc@Vw6Cl*@DM7`Q[3&\Q3y^=pu:T9ӴY@q<vk^k p!B!8)1s<&l6$B̒} # "P#<ԟ7Y㜳6 VIֺjMOwBYVMX{.&B!2fNTk=%> 69M{2bsޔR!0*[gYVUFLMHu'4GFD"jڈn:LVb4O;mLW98B!BbƘ,7qL21FЀgmmowAY뚟*D4 "@mx b9cL/1De$31f۶- Ub]x3)N.H!ٻȶ5A߰ޱcs:yn]UW%$@B BxF+ H%P[gٙLg'2cǎ^_|1c̝5td2ùsT(w.Ɠ? QID$DG !"rRE4vB$c23>uQŸ"J3QzVA}Vq! p| Vc1+!n RCDs>k _k眪DB@Bd"Qjn˷ @@3ys7Y dp"6NxRx::.ۏ8=c1c~RARժ|Djoew/޼򶪀c&DuI"=$+Zd`97$b1HY֣r\>Lzhܙm"7c1ƘM}bPUƘ9vUٌ'y-{OzѐvKD1+$p9tpf_';EDTYTQ9]/_r߻va r"HtBngz|KjqlYtdQ̱-8sQYevutz|pRcT^~:-a1c1J6z^,K9+c" HxZD݃g"FF[lwx=ADFdDP' i5rJ?]x pc1cR}UB}P IrnGov'q*(rsy:#Un|tOcRWy7!N@Yk4OVzޣHPy i,r1c1Ƙ6_:Gn1)R}JjesrǗoV[Ζ| e7W/^E %ny&4cdcϗl4<,YΞٓ~!Єi"0c1s/If!x[ "Sov^ٍBLWCo\6(E3Giݽ"!CTX_]_[a&:Y 1c1Ƙ*4Mwy< T')rG~n!@1 ͻ&@ygX%9ߧCU&(P/n8si~-tyc1c%DAD\՚N䶏kK9,"H>N poУJIqEDf? wvwD2,K1M$-Q2VE*}*hT4JT1c1|sHDD9 ,>9GDDOU۷y[^ A9jb%)u0m}ibY{Uey"f(|y~~hkK%6i,W^ "!o!`(2 Dg+@rOVv"=!hDPTEUi'L]v5zҗU ,@Yq.{Iݎ8{6+:3@̯\\0SVM 51uY }S6Ȯ~:)߿`scuU3q0i)7%*  Ĕ3L]0(p튧.0˨Hy'[~vGOn'=9c1c̯̎0zu]O&,"Ft2ӷ"vA^6ri)u"c$&u|78"TDU(rS,ԩyenZ;7VEQ bo /ٽ8>ԗċ7O6Swtc7q>,XPB.%q LmFg}VNCQO2)/ pnYlrAGU%^]DNSTJ-ED A*É?c1ce"U팎VKG3>gŠ)w9B?Rf'm9"{&0ѓS;BMr:T$K%D*ȅE(HBP(*Q B>c1c,$<!8vǏO?zvD#,b2y},+5.KBaGP@Tb~bFMÈY"*;1?y1z<5*7QةcNGoǢSpk@)d0 >51l5;*("!AT=9PtD@G b܊Ȥ)d@V &7a) b%5ZT\tR+H#?k1c1;Y#5 yO&Z]]!FNs%-.&8*t{Q]M}ʟz7 \`Xe .ivmED};Mvvz,Cf\#ڍ8x$dHo JI *(1 p;X3r҈q_\l\j1c1ߤSi)q4lmmϻ˩sQ&0cnPFfw4auF"ȋ`{?heQIU7l wۭlcT榏H2rfІFTQK#'-pTyŬ勹,8`a2JT1c1߬3블ha:Xyuem5 H2G B\3d6N'{M~p{Ea 8cUU<{]$G IDAT]dVIە=zb1 5ͥrXCYC$@=2R\ ~{쀓n&n1c1ISʹ)w&+'7]lOKg6F7ef )u"i=}{dnD'%<+<ՠ!nM!;@ Uee]Vq4Uu")4\~|}lj3dT.F3c1ƘobLXX*g;::@w9ҤzAU@2s΄Gǟ^: RNjr7΀[,1P;ɛ7{!p\㭥"g z'N 4UDb#^jTir9eΜނebW"ac1m8$y^o8&~B^!"gFjLǯwwM,C{b)TكhM]T?Vq\_~=y.OVT ؎bu&U9.&(rȞȑDTHX v2pe/l`U*c1ƘoX&{ ".|~-191꛷/߾W̼o5ugC]g D$p+Wp5MCD޳H;u:<[9 !;%E7n0HUϜ>*<RGҙ"bDj{8͆\3ӱN8󢞉e mzb'#TDEATPUjL*c1c4_!8TUqb̹l2F˫K9DUL\%!|\2Soδq.BS;(ZENqwwow0T5U@"8έHG؃c3G6{ӏ}֨*UPH|' 9mp16t|G ]QDل1/s>xxw-a1c1Rԣ(~hE%kUA ) k2@Ƚ9F Pc5>cy{aހHHޑ*0rwkzrDH :8"Q RVʹ euSֱ Q@ d ~Rc1c9|nt޾}[5"'xS >?__@TS '0o/ z^WL)\!bMk{y]/l`IꇡQ P8øjFȁڙܯ$:~c1cen}x8xp8M-P]}:u]R6؝}fA@(!p1c9̜za+p\%4e?nx1"Btk%*AJHAHL4ḩ(Be 6>5c1c> : ^go˖+`ee%˲43TDDA&U GUine,!41է$a\+87[ۛ}XWsCti271h4ȑs DR?4PQg.S=9wͨlc1c7)};O;O?XeyJӋ8кRT#֦igߑm&JB))-rRl(tIF©sMӤ$FXm/oom;!*0c1c>F@]D# !"*ĺox "17)pcsm# 2#b4pT󮫩EU9D1>X{mS,oc1c7/UR@< YuڽwGGc}JU@0Mz"MS?x@cF[[nPT@)]Y,b묂E$78.˘`V7Ws0Vk01c1|qMFڭiMUQܝ[/N*`5MS53=Phn;=IDTuqG.xHbc\_~TbEԋ/?\>c1cw P ( 3-w;ⲽ,<϶6=k]7חYD 8>qэtKQ7֖6mRs/͢9c1m/щE$ĚzpyO^| 㶏yUeo=@mus}yWxπ:,XHm83n "27o%*c1cUI@#f$ Et:ڪfg}X2ED:EDN'n?|T%;YZZPD81yeJv[k^# 9.w.Re1c1|4 DUC# " `0*_~}1ΓPD4V9/v9Znmm@J0quc<[;EC#"&/1ܽ鰐MwU]N?>ȇ8u*zO@QT`^trn8(c1c~MNJ S3QX|/QS-;̛}h UqTCUVgj];k-*2D)fKA_OQ"@)Ío3^B?湜Z^5D/281c1*A677'ɻwO܋Gn#jl? u5!<+*Ӻj1t:EQ&3ùR9 v҃Nq'Xc)B׭1c1ܺ!"k++L0gf $[xNe~hv&1CSQδ={=GmʼɠȈ poވc1sŅSZ!"0}hMG _EiEw<) |sG5|c1s+E?J U{;Na:l?(~ʋV]]|jY~L&vkyyQAes}yà2\u惕'6K,_-Xszjg2#O'~S%'7^ˠc1cnȬ#]'v~啭!r挨eʟY}pKBUU̴w>Gեn99WD%T%c]We_|Y{c3Η\lɏN-2c1Ƙo1/ο13ڪ͛WO>+˗vi>Zt:%V jJKK*U DyDOn?ũ5|O ^\=|Dyuz_5c1Ƙ_BIJXLO ey޽o;<ބJZRxfu9bAc]MTP1M]64~{S;t]W\4 khэ|lgc1c>ey+ԌI4|w Ƹzp8|2s.{*w(piBd".Y{/ǣbYEk8ʷ.8川b1c1*,C{ٳ_~~nywpp4aIGDfi&,"5MU EbB4uMmq1@}y[ʆ1c1\f1Nn!y{Ӻ_~= f֚qm֞5I&!(|]@McŒ.c P@yʙ4P@ .h!@Q5*^>&$ذw91.܂]?ϴUI'E1Z/"*3(洷RUP0GAT9N6"Ƙ#~#6 ^o=k1sOa{ C؏Z8~-ز0Q_l3B0-6D=;Juӿ|u++KtLypGYUbvֺq\%MCDU!FcVݨ0;r~m/u3t@ATҪ>brĉg?@`TUa cQ<,Xk%aUAxѽ5c1\!\AUvplk%UӞM{_YYKK뫯vv'Oӏ?yeG!H>h5@6{pKSUgm@Q :)>~͛7Yo$zJEgnh:} !3:&"E=S]SM*DUДe]sf]Wzp3MHJy/WӛּY91cƸ_|R3ǠMdYVu.>{0LEwyiu8O? 7g6θ&0[!y}^igYfF>5ᘿOء h[Sвz0rHE;y |чzpC [y]#Glrxj@{Mj朓(MB54Qg/O~pkE݄N(\RP"UATrԈ-k@d2blZ>g Ij@!@E2 DN$ "i:h4ic%fq>Q7o[~)#? Y *L'Ꙧ:f' "9Dlb@DDN97,ovv߼y#駟\VH"B[ʷ{̐ \f+K~/I'Mۤ 88:}ЋD"ru8TY/@D=MܳRULUU#"itĘ5X:ǣh<=*^Z[^rD$F`GȐΤn!;Zq<< ̜eY"0h!<ϛzԡaTŞc1Fes1ss sc>L=cMuS=Z^9˗6|9}7CRTLX*Xǐ@f L̎QThztt4:8,3Ãn[˗k+7|_?RE@e@MS\do0>ڭBU&xZ/u{No2F$d| cY 8 sc1ƘeY3ODR8#eԦ?SƘϷXgp>/jl奞Fi]~Z!>{s1ҧ…) "L&2NO<~˃|1{de GGx*̞n(ۍ~~ccQ (3̪8md0U[EV4eYG{tWCiYNp{@16)릮ZTRz1cA̜D77!*KD杞O2cOPN.fwm?zׯ_g>.1I8:M;k2zaƥo ' F`FL9{vt~opxTU`6je UcڻoB=ݵ3GnIQt%qs.ϋ hR6u xИes.Nf:v]y G "fI@TbQEb62cB'wO{E} |!kqǙ?>1RU[VTD7?e>ƃw;?"˲"N IDAT͔|ks<~U= E]7u~H)Ti7M˻㉰|ᙙ=".Mu ꙽]>~x^%䃃íkՀqJTp6gY Gɻλ9WNaYFQAR"hZιh:ߏ1Eu:d< "*32BdDc4c1ז2D$էkRҕy#BHƘs1 :^/E Q{~?p8㕯-Mݝ>^`Ǭҙ*e5VdLc"cba{GW\'Br:~9: pT;X___]Y<_]^/12\hV?aUGr:ƣ$4qN+TDF(,ci ̞ىH%gKKKĹl4: A}Ej˝ݽI2c!ob: Qf163+38K]ιVժj<CmZL벜JlB&c17lefc|}}Çy[ØwEˌ@H""EX?~?BdG+>y?WK>y(FIY3l$_NI"BDRveS"j0'*|+E]ӫWq]Zб1 @DrvLU0A13r Ҭmؼ|-ACUQEgseaM;'&w4oߏvw'ƶo!"sHQQIQR.Ϩ]^7rr|8tY닂/l̯fIaY2TQ./G 2T=uD"@Y>U<]uٵ1$T^rTLr9n0J#W⾛v*ve+fxܓ.8Р!;Y{̏YǞ]F]nb_.v]nr~ZTQbmI]Ge 2QG >cVP]NRK u#GQvt(:@Ubw̭hH6tKupD_֫+9Oa e Vv4_nm?o??w?G#&EDv Q}cffT]*V]gbb@^.;伪j )(EumZ@͚QpC(`Py*ʬX=G{}Oa'SF qB\clq, 0Y9E SL;ܑ9wwB5v8ͼ9K.0 Z7 U-*Qϰ((Eƹ4euuB[loh,qڐYHLUD*"ImŎy&l3BA!yNj0`.E 8o0yH/^٢fmǗ.p3:0;\rChps!Ew8?O|4WԱ#Ƞy"l_I ݸt.cuMFZbXk"-AhwUNVx"T+tVDUĥH[n ˀz=( uTEdR!bmA0I7!"3tԞ} t$`^APUp2rmumeey088+jyDfJM .\?]5?,\}Shb?{/Y]Ӧmn]: WX# 1#X0VbFg@tP.oqlAمy{̜=e9yZh<֭[kvDjKzL2OPF-܀9n$|szv p,E B脕WBeIۙglV U7?k0?X D8Us|\YT1@~]L#Xy(hap5*E ǐ!ҨދUʁ % iB*Y{n4\C^Y2ʻ}1 ZPoub/Yt T%­H5(^?t AS^t1MJU#JFk۞deI4>!wAsIU+qȐ!XK)KG <Y즑UiʑNj|#b"z}ALJDA+c8(V!TDӟf:A؎=Zx$!KXFy.1ϋ<#`CN,R[ +h/; +3]d<166R.WW ,|ߧ&Ie-WE+WkmzܲuL\8\f T<hV:FJT)Poι.1ZAܛUx-Ff !4^#C#$+tAi<&MQx;~rZ("ϫ˪Գ%Ut-Шnc՟HC%.6`BC]c"JR1Pm14Z"ET <4'tg1,=)fQd@.t", d*A!1 ;8=b RcfJ@%rv0dA$N%'pl=L A\8pmS퀘',KTp4[BՋL1]9nȨ2;טkY`s_!XUkmdBagr?!/1h X*U J!* ܛ,o,hL8`1jvhi&\1e֚!$c42%!?8AJ^2X`LR*S:1aO!CvB}__{s( \s?y}3~q-:؛~ڙ0c=́~N?0ʥ\ԩȜN_Ӗc\n>hʙ$lH"VLV(!-%"kԂr?kx iʂFSG`xj2d@噡Iy'N~y~u\-B3<-k}D'{h Fo\I:4~@{E(@J)0.ߋ"c_hz~$g~%۝4IS3B6Xi*vﺪ|0fm tWp!R&)Am"Q۷~|1WV}b"5 ! )̏chRe̳J&a_Y wPgR8,vTtD^;5{|֤W/}BqܓN;OZiQZ~Sss:rHiɶuTd12 >%!wgp׾ <___ MO~?d}Ɛ29+?k򺼞'>Kgغ6d 䒕 ,ݱGH̡-#G ,ysOYحXu C2bt:6ZSeK$Ql~7oIlÆ$!k{IcM[Z!pȐ)L{衇^{rQy^%j-3+rVUU8죕̢,Ь̅c_vO[Yݭ35.*JqL{RZVT\ug|[y{17|g|?~vHN=ם#ޖba2NVM|b~럞;htCCjej{9K_/ZicZJT{nTG&/`J=ϼUc*:rlмuǎ=7c$۶4{?)Ԝn/XP˾r MT)-Z̫La.Q?9򹢁K)Z].zq-DkBZX~FcnNӔ.<,e@Z0 *qW\ $"ABvv[cL$#/`UJ,K6[hUJj;lzܾ-|DGpGW^ŵOo{VIeAO!C-4R08f8{7N|R&c޿ċk㬮w_{҉OXVm?WvOЧ3O-?׿᭷Pwmϻ'gI'MM%g>x>*Rj#Ż̏W|iA>[Sx"߭蚟vUBBF\u A0 `!zZ{I^}]pq<33$cRcH| ߹~XY ]E CGK撾esz;&Oj>! @k$rff&UV2Yx%6i/ ~pLOǽ'i27>؏}B~ !iTܹ_y߳$ eh27o\b{M߸j>v/LsjRU)drЉ䐃[Z7aݺuqcom KRƘbHv\b~–^[farNEm`@4Cz%*c,+J^ N%p.V7Qqtf%'V/2-)Y+Zc@kVJA>ZkيKӳeȐH1?jM1(k2͇MV+){km&w>s&)@%Q 4І~'{_zi:׵KU-$*o?<}_Wӫ;&"_[ϻ}./:5 _x?w`O.~}ωGݸFzoȐ!C+ [TK{+wΙW};NM(+?]}..Y}ֶ_~Cv[s7qyOߝZ(h)QG/ӧ} / ķsӋra?xȪG)9E$IBY+ә7j)z2{EnR5Ʀ XC./ǡ,y2R[V4:i>DZ8Zu])eey(˨_ЊzbhH c;}jMwxUfAl:Kď`i4eU*i1,eKa  "-3GR`sחұ|!,mjsKcV=jW%̸ Nu񅗪!ģ>.髿G=YK3PBZ>cmQ%-Ax7.k_u󀣲>X IDATka㇟q/ΓV8>~ъ?o\S}'~]Zu/vy?y|-H0&]9=?bzB3Ν4MLh EA ㎍0G/lt]L)h{bk>YkeP4ZtzM Ҙ(2%1 AP"Yzm+OZ@ I~6=Dʴ5܉R*nglJ",4܊m1`bW_B XbB5A8П雷\bW!FP[Ѐ@BHE,YZ#( Hs-"ZK1 PJ-A@Dww| y$^XJӪSVBwmfeMgvtAg(2mZW^ǝg=#^_s^|Jp%W5BBEI,W<.5 N~:EJ芴=InZOޡֵ^r7|Ňz 2侂&rmCTSox^0b/_yXMW?s_"}/?n@V+>q;݅g>3UvбG=Uf #9H.ܕ41s^x%aV"f4"Eix (,L)B+^Hi-pkҒ1"e7y "jᮺrH""X@ !}W mmCpM[cH39t# T[(ANN]^ĘE|+{@% kIvb;$N%g=O=9'o4GZp1dϼcxʛJ+WÑC V)-s'VR $6ȒU/}N@]^|<+Kzooʯiq Fxu9rX4$Т%1 8/s b .EbA HCvy0c`>e[kjBtVV#Ak|I9AItɕjݛ7t^D(da.ޚ؇L1 0K= c,ԚsZ*d[m}ƅ8Y($KCBl{:dly^ozJcA7Jov<""XT2&V@4`첉ny*RJk EԈܒ!CW[`cF{״d?ʽX72b$c4rt'~|YgJ [Dd+:a!V ]Gݮl/|uԨSo,lX( %MŪďvӴmi6xǝڏ8j#`q bl$lmQJN33tȺqA6O_3&][ʵ Z5 MV6ݎT/mY&E.iHzUnH$jt~NFԬ 1mg0Qz<6V.,eBzq[]*<`$ؼ%en"䨵R Aanz=uR|(|!:Q2FE+Gj3Y=nbnoR8$IIA8u1-,Xsiuc$5s?xGN+jYqų۴z%!!I7% ['^ IXr>TP1ITVb]Bǽ~=^k|bYeiFR~ƕ+F86OoUJ)rb" {SB 󲛁B S=sfkm߷ATt;qZ*ˁ(k{t ce@#;ߕX}Zmh B,3^hvT CJRh,weL&`\A%lVc,"R KMrlȸV^'La5Ǭsb=餩DlX5dU/k 5a^tU/hп=oݸvtjrnL>3J^PuPkoQsfV|sx33ŃC3z 2>hof;[B3o|G>{b@ELۜ㧂RO?_c50w(s3wUu'*v]PQSY7!MW2{B?jxXf #Du\u%OLM ^Go shݕ$dI0wyR&6cclh)bq||Zrγ,˲1`F: Ǭʵ[7i2ic*>͛mdtbbu]kmjVZ%&o}N=oC,zQ~^ Gz YY~g7KoyT)kJBK0‚> _1-T0È`2.>.A#eK"Zs/J JT*NgX~j[xC7bwl/#$R?/@Cz wxuB `QQSj cO2!8wݮR r<%9,?栤-4[q cZBt.^l܁Se!"f(A\b 4<+] 22ʨb+v-4y1'|_qQg'|w<\%MƭqK;~J=?}.9>齫96U\ZΚǾrowF6lCkO??qajp 5-7FQO6Ҽ ;X^WҒiv!C}`B\/|od|μU[>$]Z]iGif|Wǝv q톣m?찗=L||>p&}PuUwX+Ƽg[3a„Ϫ']En73n`@D9!M ]~ yeپ&Yk8&ߖ{ZiR4s/zT)n[3w}c1%]oqO7I) d=(]W|#}YihʞbE!m.D\o.?~"6sN]たࡪ;쪄`2:WO{կ|JHNpUpFmyjS:w~zɆݛp;G_M03m QYm͂$_<i&^FWYq;E'}̋r:&[ k7=eRmn?9A.>F,n솑eRAfHn;*UϪ-=S,A >Z%R"͔ZICH~Ymg~#=7^&]fUFF7Ve:1V0)[ZlTiDdd4@͢HZbwߟdȐG 6 T[F|=_JI0wsSKr[ *̀ڝ\a?FNG_/~۟n@7L{em{,U ³N7w|] Gu3Acct>w]NA>ta<:e!7CoxYY}S~Q?'}j{Ȑ! F$@o~KBޣ^^0RJ󑟞z싿/x75oG<#gzk.|^^yk{I^ϏZg$v~(3:wnZ1VwontVqNdV⭮⵰DR$ơ]6i}b%晍wbų^L1Z+e)[`ddPv?^w1A5c,oŞ˪$Nfsm^bc-"<+H+TXk ! RC2w$Nf\<ѣo8る^}c<ڧ6at7&mu8y<ЦX0ZEz4cZu3.<ҏ~cyp]%٨WKnZJTǏ8{Փ iPOf }h313w>ܨpoؓsڡ| > ΛHmx[r"cLpE m D;;GCBݸwϓŖ` ZQr?Z\8q"REBR*]t׻8p@Yk5T%hƁ;!?ZR (4UW]DŽ~zit8,qB0BU=%p2ܕSJnwf5kVM`lQ >xq  751D*ItRtOE, 55hFڥN(1jkQkmc ʐ1&8ayqZKZ+e h2֢UZ8śp4>CƑ*JgzKY%Yy!*FXĊxJz%U =aɨןE5Kb P+Nt 8RxQCh5%i !aW㎫A@u8gւ֚s i*Ưrjj4xs +"RJ?Yg:|m|eA˔A"* )R0sܡ:zh-^DZtBLIʼnOuz#ˉL }'wD u;[~w.dHsV4Jg 13!$%5WC}AP";4q4j' U}-nʩDϋ5I㱾cZu +Zz5);C*hD% ]y`57FafQ f}.ZkJ}}Q ׯbiP SmvUWX9vZu,3K\BM1ȨXK(+j3_f\']V=n cA8V~Jub) z2Vk; .vr%fPB`)9$ħc{Kn 3i=Vs>""IDz.%4IvUUw,_XLPdSBZCuuoxEݗgTB8Q6hk%Ql_(408cfCk5:Rc:=oVCn0(R AȻ.Z~$yإ.0˄L|m1jJt6-@WXkǐ!;G 5^${XŖ; #D֭relj:!k_` RHLH@1 P0!IjH@2tx[ C:j!Y"}]o*3eR[&) giM9 [G.Rߛ!C<Ii*ȏv ,aIn 7E,OڞJȹ﵉h+(u +ekƬ^#NSHݤ Ϛ.]Pb'.,n2ScK.uY3B\jI:!pHbď>RXx~)M[nꪫupVAB,8O8N~:Ϙ qLrبRHgBԩ6Xn(f7(h[,̡-MK.ҎyI[b5Q]C5d5VӋN87GQYaԭ˙btBE:~,"#ĐjUV\!ŊN&*%=חժ.֍YRnX*8te̱-@HKCUic蔔\CtXS鐛fJ:@~w5L94KY.\ Y&j pmn +F2y X,8s-:`l%s66bq-7u)Em!{ %*,[WNώ uFqIi40(b|X> ˰x`{6n<`5k&콷~^L4{ b]J^85),Qfӹ@NpcZlQUFEdžS`W^~>2dÞ}=ÆYv[ltiu(r^RDp;7@ibfHf;t-'tQ ȶէ,#dh۩K>@D d~53҆ u, cc$4.0,+&"c`9RJk-,unRc ׄ]Z7c\|X"u}&R0uY:.u&rknoVڇv pBk|\N2 K?xĂ 3-d4jS+ZYM$A8R@t~b ; m˧2dȐ!C  `,SJBcR9cL}~lx3do "zi3Zk!RJE+4PJb?ZSZS[c IDAT>q$$͛WWjwW BBIy Rcuxr.3G5EBHE"(Pk32 2vڇjO8NXlY @?WۼJYØ_K`vJ$3=3`}RePH(q,:`~@bW恵ʐbWǐ!C 2d)Tnnw` 2O!C8.RRJJ"Qj|4S}-W8cmYj)ej0n)l[k-3N{^w Ji\I82}Gj8BXxe 3J1cxz<\j `QH@" Ka:!C 2(e]p;:?v5n|$8w;rQ[p"-J*͖kSo;}kww:Y47:RMd'zoDHkvI YXRGFj+))}lYf8J%2ܟ)'Ʒ$SP4-t;rI53$}KFfv-}f̽+*X$$N.D)2Na%-4rpt[N'etpD"֚[vUQMXK 'oi T)DDa F_x.L=7~7*B)M5wtU(<@/ou;mGvmZ.J ?I&lfѕ{%`GQ[^`EɁvy:ǀ7c]>W_>|շSE$OOQ#d2 ~FD P1 ֯r s.p/ 6Zev:I`cO?M&{AqT>MdA:NF3\R4Gmmk}|y7~^:7o>]9"3{"=߼Ypw$y&YāIӔAmv&x^#EDB!La |>֟.0U,fȞZ|a7NO|~{7o_>Zfu㣩&ǫuvv<*LSyq|ΑSBݟ!5O~6ר@D,[V!23,|11< h{ !G tqNgUZ f0:Y[!Âl""s $;@!Dav)IsD[_-$9=; nll=彈xvxN!'"[)dM狢u~l2dao zxKbGNPWI@<ĿJ1>+NG3alrx>9j8}1t]:}6E.(:/vP fa4Od_"I=@[Gmlt@߲EDP̷:p:M*x@`Zǁ+Bt[0QBH(} Rv9lo B՚/B hⰽ@d{{vswz&SvBi022"DԜ}}uy4۷g?ܮ'JRʼnZY^x~pč.fV'jƾ FDcTey-13sQyuPJyW)cNN' P ţͭpv u{){_)Kwx57T9Y'ahQx'Lltjmx||컈HkϣX}$">޿MD"mi\rMb\N&kmhB`J fc Hp B8T4D8p,,O! O|%9~u=iуGClYP#:vurgpޱHzh -I( L,JII٫(zPag@7~VwT)&})nƙi!Ϣz%>7?Dkkmdz~4u0sa S9???_Vyrt?77Ώ^zuz b)$(k<;a$"$n~( Dj3j#S,;ivBJҦAF8cٙHƐYiOE,U~7.㒄P# # *.dl!;bL @(%^R zeh.>p@[51A$# G~s=EMRRhBêV8_^DqcbVm0X~@*ρ8sOsGC:~-D|^ $bXM?SFSyܧh;T q"CEC?l}flMݟ[O˛T؂?3-ZylCT< ! Zw0;)iWd2akbCMn kLb,#j3 sh㥍ϡ?L{%"a5\CW7"lƤ[iLlTsa$Mo" ˍQgI*pǁa@^} [G!ٶOiO8UPHkv+Qh) 4`[yѭt*Cŷ&Ow_˵Cַw" @y9e.NOϋbƘ/>}rz6X+zﭵd4VsȇDRfiq50s(1Ts\d|br|ʍǡ&e$#f.Uj(qQ[d_oЛD8?0p\ 18KziO&nJ9`4`1T&=Ѭioi0'X'F>/}>厵Z+7nâ8*888n*caDc+A,RZya@ݛ;kZ)fVR*3jbba&Uç[3NOڻ"sߵLE%XO(,˼ V-|6-9zZڌpz6$IbSH3֚޿5D~xx}Ʋ"tZ+US=ޜQRPЀ-B4#W(@nͺ,7XI>^ȲR ^ D0HULMT@Gcm+]}6FPO݇H*I$9==_gYx} D̗Ap6 lcX8"QE7> zF}pn`qulx; l'h PC(1ߗudd L C4rFf|.lIF[B3ٖ7 ~+bbEVx_ $M|Zޯ߿/wOoӓcb*%",+VˆewbEfUk;iv!5$ YkF58X)̲tf"[ +ETZa8Bxǟt<~}^8#g|ת= ι V 2,02v+hi: 2* Ϳ$BoQz̕RFt 4=Z-th wZKF^Æš?u|&"ej_"2I!D}ю4lakC|+  5JcOG8HEިWOI=Ѷey4:<+;V{RtG8:fbLan U+,A¡"jgj|j/"E4g_4#ؓv60Cǡ7"p/Q:#сfcf8b48 CӏzB ީS2`s}]z-b?u D0zPO-8:F,G7O|do1{>H!kϧg]k,?T:n&32 DD$Zm \]]~_nn~gl6M8I6vI0̈Ԥizw, ;6Tƽ"a&4Q,y|BE*#/xs<==Ͳ eYvs{uvvCI:FHelP_*ԑ-]MCuј2hޞ hDX0!  fjkze@*u^Xiܯ)IP4MdEQ5  &c(yM}8 H˳n8^ T}.':)Ώ?܆ 1 :rdN-σ>pRK1ɿ%fP%_linSR HHyJi"*6<P+l] g_ $ SF202x1b%"+f:foiO~_ϦG1*&I4DzBDF/okq IDATC;`@kL<&[$`iePXeR(x E*PJ]__VLS5\# ia+V=ok2h߇LHÐ~567#ia(`M^9Gd $RN4Eҟ(TY FT k n2iġb(nϭd )E&kCvhBu/Riv7^#ѡ=TdPj>܏x9߽5VHyaQL$Q\ :׷~h>>FC< &SDCgn8i*4?JN} pV Xjo:%͡~؊}ْº`GgO#zhsz[OI`xbPPɡB *ĸbfa(RZ+"GGGÇWwϿ~JVc17c{1;3"{8&'r6`Up*Ihw pGFT(p',^֓i̬t6.oI?z4KD2Q*oJO; faO&BU36US; EYz'k>tQI 8@HP)큏O˻:ѥMIB8t.ϭR|%R蜳TJ)f/h>[kiX,_}߯noo1Gt:MFM(>¥id4% 8ZY' HxaB̚0ˆxb(9JWy cu{W̧8Eja_%щv\iHjmQt1;D~A-7yhZvN=Lº@|P"`1 $>s(5Z@\.$]-~;^j"Љg&Zk GM 酭r{d=&I2p}qv:]NQaWZiʈLTF`4Sc!~>l:VNlrFY"v\~b]Mcل(fj1j.T^6wvLUc^jDn/PĆp vUE;k!_p|?^'I%kD7_Mhǡi%b,#16[+IƃK_{  ܜb q8>%il:X?^G1 ֈGp3 㕧 #?" p"{Qz@5[T £o@Sl5YpKW{8oh\Ԫ<;(H~Q\yׯ ~uN)ي!f!&g8`*e4'%"EƘ4u]]]}|>?9999;efj)+(˒$M-"-Cp²gYEt[%!(V'.Z5qMc&sW5У 8ԏHK%}JYccy4Ѐm|'&W8$cC=i^t 8^Aɴ0f zMQi0Gu-uQ$G7->zkƊ3b\Hy6P8%.$$4QyF@EjmDѷj2fo\^V7׷ƨteY@ٱI$siLlQywDd@GGG̼\.KQ{[41d6s+ }HqiQ: "R̜VRd5#doJ+gִD" V {b6!țB='fM1[oDTJ" D;FA 'Q۷fH3+@ j; b:4@0>4CX姵T6lLs/:xC}I(Di,ix-b{Ǝ7ʍC)t1KK_k֤q||El~-c9q3T3qnyza51^Ϳ+b[ l= uƵlU+PYT9[8Zry`fLR}}vZ7wdTJA U?I`J/TD"K- i|;w<_.//v^.~U$k$1hJV;7g-`> 0t:UJE0{1IR΋xu1DH8؊Z6IrM&YYk{Q @2( MÍZtYvZ JkˎЇ.K" @$Q@@q8j `~d p?ʖ=)?;;dOgeTJ# 20VFXR ۷A|Dw#PAeǢw ŝg&:{ Oyq1#X-꭯ ?~S0\ Jz܉g̓-a 'MqaP|}^q>Fp@] yQY ,`#l86bHA7za-45vNEᬵ]\\Lh29[9*DdImpU]Ǧ>2Q)V1Y+Ӥ5T-N\j+DD(T9j7 4"1֥iO@Fݣ;އa#VИU>(DԚȤGWvܶXi&mj){1:h"XLE]5 D͛7|xjO%$Iۙ}SWG3wˀ{1f\NSMώd "\UtC@P `,ةNyk\A*dNd]/f?~i>S9kU~ww'"'GH!"acVkvDQ!viuX,>~O'3 Ha4q,b&ދpsyJ)BYVvZ'ywx& `撺5x+H V)Yk}v}ſ.,!gN]Lջwi.LcqHz^kY"G]]%32 Bm;\^jsCd`,^||r "$xCt4HUD%4ӗڎaB`V>,,""ad$_Mx4W < 0( <&5aQGm5,!)6is " "zqJ)3O9/v4 |7K; Anh"%C=,=8mRD`z~ڰ|H=,0D(niq Dch7[yb\_&ñ;.ǜFN b!1W?!}1'ԪЃ'YՖX$p``!m P#*Qټs;O`i` ^cs 6@mjG?)O&wJdT.FB( :XUPCH#P{@ =` a}jY_zNL,vv|q{a[IhU6^P a,]8K_!"+:j|67vc%(Xksz"QJTJMSgcP;P"$طj쉡6<7 ($IR3\?XPz^~F)BRa TBbDZ{qHa6|--P]Mbulb;:ҚXŕ(2`f\[㦹>z+(: ,;::ނ"v@J'*|12t yNqz$ݡ ckc:޵hP>iڻf>"|UĽtpҷwO\Z֍Nk}@L㠳nR̶ êq;z[B{4Ż =ɗFG?ۘOѸl.E'|cTݖKAӤNQ ݀oiDfͭzڕ~172/?$\!%:ц ZTh$!DDIpyޯmamMl1izt9sXrKDb; ""2 3BhZ$}X?0D,˒DEy:nEuf Ml9_MҤȭRj2*iPHe&*P feiӪ~uQJ`m 0%VmgD 97f_*M3M Q8P px:xjc4-` cCh |D%cq߬a{ϵΧsf74yZ]i^ϥ"QjtǗ֭:c } gC:eo߮Sw!yQ߬Dr?h =0GJˠY[5QӼ.t4{ֹ"MS KN3Y JK%@/NjZ-\#u6_x2FSމOcg9wZ_ϒt6f,˲iڻR [Z+c1S%"[EJSJA#ʵ1f6.xaD m?J,Ifӌs[!bҨ?h9 IDATIspJ5"C`ڇv՝] &ў(G4$&[/?~M'pwo$Hx++:3G!Mn1 >[-I("`rH Tk(FSCo;4 1Kpsrr2Lnnn2L)q~yi|~ǎZz7ٕ(,za0PCD}x{>uNILxX؃~fbAE\As}$i7PgFĆIBz'pM Q. tDyT5 hQӷCl@d ^:z2iM-sq4^:klX%*"N'\EuD,UpmY\ź#tinPUJ{9o~4? îR,vXGm' B"OGZ@'=mw{OH($^0I'AfRʓRgCw<pd02{_x"KAbpq I2eYIc(N'"ޭZl3c!ܜN3TE$QJ;Wڐ/%i꽳pZG $8_hv-a""" cVvlJZ`|'"cm{}Ebuڸ+ͲXkֺR_-fo޼_׹[5IViq4}m4/LMji&CĠ0R%ꦀ4""$=4?~yxS,JnybH@p3!J)ѭU7;`m#>5/ݻdhݭo@cF9Va>WpO472 d84q"'l{{K˄nV 6`(+AtЍ2J7q^~ޟscL'GW./+SM(!5 VIAۆQu !  DV,$dTc`& {Q2RSX> ey8_*zr"E.]DG`U!*%Md1}u,*֓4mH(MOH1.&Sk/A}hxmMEM4M`:ljr.7vEYA /؅WH"E2,E$EDT@ׄd4Il\ so27)7U u%PZ`DK "䐞 ( :MF)s||3tZޯENt>%...O+@PuH$"`ҬZz߼TT[`&B{SŒbcp>qr(CGL>?PCxF*n >vRx}0FTdI$ڻ (&'=ߣuĵ`d_Ad 5Em 4ArM,yttlQpc{`-- Um}Ms?3kF+'|/.nPN& щgvE)"BHABJ#(R)0R0؊z M0c R ru8 X  *GF.M:kEsv%tʟB̈$dZU%R]7hxo4! U1qt5 0  _>~Td޼f2[x?|y/¨ΦFk&Rj6^:9=c@ 9K3fC9ֳ,-"sBBLD(AZh@:(⾃ oiZSn 8?-N,́tfX>SGSQ#˧X磡mO'1?F(+ᣗp.ɁK|X(jy=rۃ!Ǩ,N5= mc] `lh3oA얘֓'},Ic\ ̈DEChl2O3'"R{_y]T+AݣXI;[Wc 6y)>&ߋZ 2"DM},{'ZP8PRVǾgKygb&J f:zf棣E4J6К݉;[ouF'$"TF+D5"fYFDr~>I=ޛCA+b"!"cf_^Eeÿ4_T@4UZD%Ay/I(?WUg_| 8Or>"xWM"ŏ(\Jc_H"V`48ۡ9(f?L m~@j Who;hp>)bip =ث3~[?ԏpf^<cUU@y $5g,U+RR_F*٪s|@ uD>[*{(0(չ Ҳ7wl;5*0 ̛w~|'aw88c,ʢruU$<)ț̦Tn7_{{n˻(Vf䌈 cUUKW%%>Kdٔ._ϟrݮVJ1%i}y?MQ0Ex20@8Fs[N> g#Rr"Z#œbMOw #QCkbω! #S^v?25qw<[:='+351bj(xinU cRUH.)莿S 1 = MqXD}W41v- %6i|fok` 8|:U2u:KRG mJ-|[Vop6j6I^veuA ̲HI%D֜).{c[kSfvYfi3{_ils>nnnm+&fvUV~bL^0tj}jM?7itzChZD418&{dL5 RxQGY=;4l%r&@wiN< Q'Ӿw|b~L>ֹ?j2&s*31 ISBհԐ4=gu b y LDS]aQ<`ށP  ?T# l,ʭ+sd盳7^C^*}H& *`ODP"LR7Oh<,:G]yDGz1<}18e9fݻw777uapdU$kmy^);BUϩk1\SUC N 9p0v[KYjח#C~O@d~z < ˝wj uv{1Mwla X*xB# 7MrjSD#̇GU3L.oM; ?kBidZ}ZFgo@Q_λw՞_̯Eělbzl9)#\$I$MS眖UQ俼IRh30f2"\_w>d<~1:"tm>͉A߿~yNMUP',ٞe"\pN˲tXٲ?cLWfT|)`a[C)@MNsS$i_̡03|9eJr[7ι_y~_j~}$ٛg),, :8py;aɲl^V$Ir9_%b<%)a]O (9ekׯw~'(3'Iи`'L{\Mț7oϛ(5dȇ*7;؊`N1UBSK6q8Oo=#F;sCLhQ,i2ǝa$,?YS]tCVȞz,hGa:o߾}~Y{̞2EeɝZjcAL.5&l!p?>6x}s#kuqܲrXp$U5Z)˒,[|&/#5ƿ?U}KA#|f!<3Mn<e-Ȍ D|czUe^03tVMRJ?]T[z1;<)z$ e&ICT)p Qe܍`EMݎ ׎@sƲe1Yf\ۛͦ~x},ٙgNFtef%ιmͧOmye$l>c,KWl,y U&꼃C$%TUELe׷7_}ݻ>O(dY)Sw£:{R~93#RKj/>[y<:a<`)S)@1bbF(=k\z2e#vt"V+ڿ*I0#Ft-\R\>(Kg#Kt'HݩpM.hcvYF'Gw8Gg-A~X7T"r4ܗQ=3L/ˡl){~}Gb%t3RUQ l-/$1M"jj{f p:y aA/x(уER͋mrYlnVb %\M^=RvƬ4M3k@8Ap!BmEbD䔌W } $TTpR%TϛjX]8n ;\_Wy3P7aBX66dw.6???RJ 0IꌭD5^~noӧpuu%bVg/Nt6V$fi`F̜\'Z1@ I T`%$f|駟_Ӣn j^6?r:М)DE/?}|Š+0!'5P/]jR r;3PSE >rk7v}n3'x.7 u0@Oՙv{@YgZ<>#(npҪR=n|c h9ѳ@ =pv H?3Q IDATEh2@>3 @\GKh?{l"p<OSX&/-@*<.kdZů&p&(FQDU$<DB sh_ݏ<̴']1KOh V^v1bXgUwU0imΒ#JM( BBpjzr_~0B3cLJ$ ±ي0Qu"H-ϋ lx73?1V>7<;s%4%ѕLN󎨐1&MSU-"I'TZ w^zuf [@$LU!JQUt1;5H)Jw.0no4@eoFJu9$jPˏye,)9eLǁۈoeYZkm{TpB^B;:L$~itz7F|ZZjg?b @3&>H4GHu"e\M$g7#OO}3Ȉ=@a}ȸb[o22lF)KsC?8ǂF-8b;wU(NQ{WZOoS@\"nUija8.7BSa /Fp\sZ|D ,M͛7Wu^We8 o(ykhAH)L82ӎ9dv|py{{{T0}x2#4VwSIXUU_.`G; )W+G@$!DZԒvhUZgEЂWgϟëinjsVdP)>|9d4I_Cć^}> 7t[ ̉ssgggcZN<Uz}sU*KUidO1dPD ҝOMxO4]~`9"e?%>O3l.AjT{-K.Dϗ}" t;l*3lUi$sP;;Oųَngלm ,5)1{]@GmE|1;+k)@a&PHwĩIbGczveLF9<4#={SltcAc6 1) ūW1  ""RVgHv*N3&NZ Woͦ91777D;;9([~ke^?lvG?34M111 j@GQU"0˖ŷ?V(WnTa 5/ifM z]9+8ݖ_/}F@HDlo Çw~(5I볋4] 2AY#S-H왊;o$IQJrl{ [ggg( 3iT*C(&aLY5;BXJXZ,S!x.X,e)z394F4QKOOKaQOxڐn}hMS@D;6gF~Ȃ0n4fA`{t)b:;41<}b>Pݙ<2CP}m?f2}k j3,˜+7n_[+Qn?%aq1TCtcxΣyh͍*IbÃa]A#S x=WrFEh,b,cT,9*?ű6D$U?kRa2@3se~0pLtuu?q:+noK|uoQecIٙ5ͯh)@ RNl̄u j󓩣uv&W_f}qi+GPl"ޣXM?m[ ?xT75cK2ؼ7ү@~C7x`Ktf'P97L8$f5R/>6y/p[&p5 կei(htN>Sg';L1#8&'K F ahVX<%-sf4r46mGL'dϓ0688Z5tYp.[mzfK6#v>J- (1N`Y3|4Q1 Š8<9`f@Uly^exF-ӘP7r@5Rc@!*,˲T1ADY;vVƹ$6)˲,KZ*/4͋¦O|W&y&@n\Li 1O&fK>jTW@ΝWճ|7߿ׯ_d?}ѪOį$*?n_nnu֠ L +Wթ4]xXGT*%.jFj fq3k-e;@4y$tߏa;^|t4U-kޛty,Rjot 9\4|"=n1DX=Ujr;LN8vA'1{ ԛ(&de'W1Þ`c6 cevZb?rj|#?v(IM^܊ɷ7oVvRձ(8v! PvܨK#WڞSڙAFn^-"spx5Ņ7W*Y'G<) Gyc_D`X &DEl*Y 2>έG{}I:^CoF àڛ$ae" Vme>Ye۫[eN=w(T62k-|뒔_ 3cED25_hֈjU_xO?o|/>*{~0T|bZEV;E*v䣷ah|}# GdyXeXFE ITלX:,%Js|N@ߜY\wL_z*'Ѽr̞!@cϬ'uKԱ~*6MK>x,{cb Q͟(4"x1ۃ$:-0ME[b)J/:dTEIZG]*9f2L@$I7eTovQY@R|޴86 (Z&B"muN0wc5Vu]!˲r[:Ms֤}o>,T$IjKkʤ)(JkSkSխ1FV?KBlh+Ii>T^llUϟ?|7_:0VJ^42w%S*ZU٥ DKRvT fc¼5hʝi8IP=85ʝY6t{wf^QIHU$!_?%4*u T稜8*CRMcqh==Ja#seYT ٧O >'ky_i7E@1w*6=HC"c1SM5ߤh혈W+ `cD>I&˷P8DPF )D6"wY?W1(̍4l9DZVr1KŗezTZ3fNov "ի7NDaU-K61ƔXkF8E!Vv+v YRuzO/]HXIg|F18R66 NBd/=RN1%5ȆD-U~"'O`6ƿ+Ҟvf".`:i үYzFwMoOSchc˙wD%x&3@^[PM7J `?Fx#0ԇBZ#m}2XI8#k5=(>Dk8tr{Nt;yu#3C9 J/LXBg,q 6NlStӨGJ Q~S1l!NTC{~OfB,ixw,ڟad' l|Ca@Wԝok>¢io"0w~ˢ1 >8 I[< _?7Jb:vM#o Po؇k e,C&˲lQ%₈pjz}JZ>,kӴ[̒Q3>C^rz1ykS7|>]UuQ< WCV-cTl,> N]9֓y%.~o<',s~t4h$ng7O $(ƭk:A#D~+gu_u9,bĊEY J%AS;)3Y+bYU!srYXtVA**dRak-ATتAN)j`U=S2F` SkX͠T+L`4MUW?=;g'D`mRE,'^e~y> *KlT)X!bĈ5vWgo1y X,zpLo_ ՜JK-}nG Qwly1Mw;lL-bEw'8 #J9Θ\hqgE}#җ/_W9 SfcT#VemLD*̍G2B~>rR)cLNZ4˲PW:0Sy\4uyÛI I1$eIyDVPByw56)q8`6P=8D*+15\!%SڪGAe4TTLөPjJPEe!"U5"E6ϟ]߾MZ1VF3@P;K}AjY:!JfǛM0|23 GJ jC;e}S0ՇZ/o#%y*ꏔacz>?t N;rpGk)>페h't!qp9fB)Holn@4Q&Yϲ/Ͼz2nLN,Kc*oB̐:M! w tÆ7ONڛct/?|YsD1ЎqiPo'>mPZceCY:D$R%޽ P5 0|:f!v2 j a3oI |D+՛_~Ǐ߼yt߲R=nF ƚ,ِs˗/@ 3jJ6]SHoB18B!l1> whwr'S+pK-" 5'6dϦ65=nrçT>HӑьSOϤONn;-Yrg%6(>c"ft9EASiXc(zFerRW1x|sss?-KfV޼7Gcb(17^0|ZQ,{5b*{AT>_^@""g5Ęƃ[9}5x\C7(ʻUiw )huev%efc "eUP//q-@5\i1VBvgtX vlA{THb8ZgU<0sf<$laf׷gggחW_߽:)|ZXuNjuS[ӄ=T_xO8DķiuEU >$D upO?)khx?p)`b-:5ǴrǓo~0eyꙢۡ]znYL{ejOT(cRw's2ќAaŎfDip9m']oΨS}-۱?-Am 41r~w$ej#spe\ SEZU3k7V9p`{jK}۞GxYI\^}^ Y]"8fñ1EQXk,[V9㟙T s9BFPG#Pщx,pDLR1G*n`ĎtjQPA23܏X+sś{"Bvځ;+esxjt0w57J#֣жм 1cvچ)詀KcԣpbyL{Y8>ζΎe?GlY;1eYjV͛W{y5"JD*"^T;!H*MWJD`5XIctEr&!E i^^^fPcLoEdJ՘FZ{ͦdm:qΉ* S e":}n#"*RˎX;s7bP~ Q!Bqpz;RlseYQ/_xss繵bS?bvD]nX m6^4\_d٦( 1" eQe$ȳ!%!RC(A^Hdzm#$}#J4SXy;i}zl?8!h~Y{$&>/Blb*.6E)g'Fׇ^˝e2Cʩ6xX>j){(.Ha`l-k<~0h?'m##^q 7UXkꦸ~PUڏW~/|ycr٨9u9u~Atʲ1$-Չ5\•*|wgh0 "\EB\X2v[@۳ꮬ*'|& r0{7 @S+Lʂ@t+200X_ ,kUXL i3^a{s @UDʲ\HV۷o(dbt I:iEq>` IDAT0*׫W7bq! d4Dp b  Rtwc=ot|tm#ȎV$FtLΨa14d <y7v{A 66hWէIâ R&#5OQP[=5=Gp1fN~AL=zP՛l;K L%̻VyMx*(3G|be{oZQ"{^C9l=?ȧ-gQQ8avkҖwcy/:\O:ıyS@KmݼD}iԣFˊrl`_X3(VמĚ2AН`I {b C ex?~ly"ndO_&ΰX8|sO?W"8$Zsj,C8?̎ gsog2Q}WuqW)>`@zMRsW(4P }ZJF=PXMyZKTuJ<ܙxw0",Bav@\UTY+E/y8Gqt,<֤JMۛۿ~/HK0 V&"f[BU0zEQ0^9@>vjN˴&,%Z]}G'uFY,=M?,X"5LiQOX uDݏ~18z5 fY+NHu"}uPYc?D;hSk_Z_j,ً‚:DbgF١3vG6|x^/+ p;/btM!'"1)"N9 d텰ˀU8$"hSuJUvCr vuث[Ac̬F~^Ib/^?󗟿櫲,T 9f9*]\\M Ƙ1J*P2x;p"ZX=; {SG|PT~G|$&Q/h5z G<|0sOdf#GVlaEX݅0ӻ!lґI.6k%ltsj>kl:<ϜvnFq)m']֎4ZOx>ԛ>jo[fbfcHd9x K7p#=, Y4tOp-08"a(0H70&w=uJڶ@6D/sƈognR,HcB;aVsV\4#S;Os;UMsx]=}aPу\=bhڡOzݿa?ŇI("' B~v̍1#*}Hu#b)brc ܠӌ(PƼ5`yX'kmڻOz2r59MlCb<Lj!0 PNCwO5.Uacđ!J "j@k?F<' Y$&*/)Ch4pn'׹tN բȭM9ioA,=">b&l6뫛K=Љv-ۨ'L㧳 s6oCkR+KnfW%<:gei.|]u*] =(ggȿzMW{sb>Bc~ 2g@ U:[%*:nJt՚3QݘM M(9RTly 1_}nѰNMq}"8~zc-w pYԗ]Cz!V[NDc95EQ LS?O1A !V&"12C!R AģȓMϪ0*Hzkbff"T< c!&ϗ_NĻxQ cvޘٿsqqϿn[\Vc4{XJ| HS\^Tsf~Mڹg*wb8čp  cURV>'P8N4Dj-.ѤP') BinT!"%[tR@>GAEqw=mA[#x7A䘍>OxkMG(<:lpxWD4WBlZ+P›ېL x~S汙QGSB3ׄ:X8Y9FR<ϋB&8HL */T&YxqI(#ˆ RQ2Pf%DgRR@?ȼLB2TmN#bDX %*!6e1<x~h,Dbcjk6oBe$6О(4XϲlO_5}X( 0{kWB̀8[bg8gmݣ`!-\h<]ŒO(S/!p?#;ӭE%zh+ȁn,ȶ! < 㺫yl?`  LSv'V2x|  bhbSvУiOǭJ7|YWDjQ|i{Xs >ే/vԃ)lw.'Q]C=e/㝙C>M4]ѳbcyN1;|F z8#fC)KzIYlŏ?-nl)%b@"TAd,x#cDμXb0XǛ{JDLUfԢm6?3[csJӜ_qG9)D=dAu_ _.,BU)՟ja~DPA֠JM~ݙ*^UOpdfc 3[c6a>}7_\!_wXg@cpx-x"bUղ,& 2C|<l`@1)h pZajzg)ڏrpH!?[Jvek\Gg* p4z~L658m:Ÿ3<3Fwq~dh{ S_OZϵt!ƿ[ מp@m\:_cpG4$IDs1n}`.D\e"<=DD T+&"b-%lD<05+@@2a89R>t90J-oW/Yb/3C Ё`$#:N:̰m9˲(!V&3i#"r%!f|LGBmQ x & MAy8їF]GE-#薘g헇p{Hd`9jMU#>f#E%OYg?+t`Ra. hBr^j5+`x?l6R)e?|L"Bbl\Gwb[ط1^j֑4hEaPP`@Ob'vh幺71MXFx ShaR{;rž,h583u< !i߼yI6L`BY1JFi^`^>DwrF }mG灘wޝYktZoŢO"|)f}Q 8@11răN\G`kުa@G+-U"&Wvd/8&AKDW[l6ggg0ak=EXQg܍dY,Km 5f"R% Qx` E#ڹWu$x> ґ{Bvh_D1;jp̸XPO0׃ R<fas2*1:f"&V*"N] YZ+LT`>֥JrD dZۍmhzABi;Y VעgYz}{Sbk :0w΅6cJB1`e#ZL}hP id+Ggǖl3qg }p p׃KAu@/D됤;?F H[j=ը {Kd{)W;WC:lPmu .Dh7ccS^JO£g1wosWf˜1]N$($-ڽyVW./ԚTiQ[cwWG"&&!6u"qX..r%AWyO:afcRGv f|DZc>|2t+X"C6w&ؑ#pB %db# `TةR1 6d5B<'8cL$g֦ij8]+ c1eeəHLPa2ܡ%CT٘jnڇaOD ғD;?Ҽ G9_ =̎.=@ixf]oȚC$"H҇ l0>~w||7tUılU&|@:a3d1 awCL HYsJpJwtNXwFQ 5@TXD*`r 'ԟ `*%^%JL"  AIZ^gjm:Wmө>djZ$);N>{8BLR鄉dQ6ؗ@~{'i<uNf%u"mrux/\yw$VK'L^wB 5 3B@g4$t0ho1&9R0=>|i,x׀&%b.*ª9BO D$‰bU. V8*PIAćpuM ʫ4=جVib!)afcLmx$"YJyY`"MM}{B"D`~ttqp6RZ(y({Ǖ 7v3Ebf9<6G}"Z5H=q很I Ծ~~GvooS[C6H;;H s?#rW 6Y" ;-1R*!ΈM8eIЮJBq`,,*,I^j,!9| uMbeR"deY]URUE|,T92"*BU]CD{wPu*(_'zj/ݼDEtg IDAT=Nw\%O  <:.zuBE$I9MkUejeŦ^TKGZ:mZ2MSf>̄*43P)P- 5ٰP]NB~(<ԻTcNQR8=\):A1)}i h _%gŐR%U|~&TL9=!;.c ϺyF@-=o6RYBt< |Xt|YyU1&C. lC sxuADZ0`}!fΪ(/Z"Z%盳UegZ:% nRD%aw$旞A~UIJ+ܴsO~DODOЗSp쓇OO}1s"}3;U6zn/e? Ё'"e2RFi-1L4`BhJ QGpC/ίa/deXgiY23DD9uuJfD`&U;Uf"($aRt ñ*,S MBD rFL^e.6fÆnP//;d15q&/oUc2P0jb\ᔥ%\*ğSF;834 "(n85uMöo.?+ώڞ bm~>HZm7%9TݭhFcaIBBB1 3 70 F?̇ 31! R huw߻VUfF3DUVVUFʪ[Yuެ'Nl8qpE`9Kh,f^\ yL_B$*Z(E=5J]#qi" 0?Q{ UFGWA>ZTm.,[\e<2}?ŷB[|."d(&rN?Ό˓d2_l7|<|u߀va>ms'Nڣ)888/^jW>}N}nl+\vhD2%?-ù թ 0;T:ڜQխ ѹoRBDZ ΀}S1b!ZEE0̄4#eny49&4S\.pL\ n~ݢ879]n CH;οRH A2"ـ!^rŃnAX5fzX$G1^7 l8Ң""QkA-v;q>c**Rjjq}Ndy` d1 LHsv?_zS҇ڭ([ݯef(KE~>cOtJtRE[$1F!$"bqsa'r9撧|;1^Fm][c}6e}9@ PrwxFlo9`5\k7Ձ3c%@MHP˘TVM"Ԙr/C# {ɇAA L<&ERnةp;Vd&*Gŋiieìj971Z[k0hSΨ7GCE_+`BhԈ ZAqtwvw8V c//']J1L`^hFDF_A&*ײ"s9([ De6-b9=jK|x]_4[rS荠gP6AM! *uvQeldvbg DG?&IU̜y pa~7$>a{37rEv4E|1;J9shٍP:쓕@)F-{`Z7^#*0Hxo,0F'!3+5`J!H1VKq>Xj ah{[+[TZԅ9@f\Z 19QŞi,3Y+HJB@^w'ݍM(t^ QPа7.H~ <,a9[%[ABP*ܶ uiqlAhu,07_o5AQo\Zh`;֢ `Mwwv{OLLz0#-*PXqS31ѮS/VRJk&c0 1hks$h36!!RQu0 B CD@èȂ c7z--b>R]`@gM=7mbiYkjO o`~1X"wVOCҺf[ڱvZàw;X<Ï=ϔ0 pp"bpzp٢2%"k`&Z ֹG-hR=5ӯ: uUqk"T5V;pW+`jQk;҈DDXX4"=Yq] ~EZ'k[>/^F]v\:e殎sH c,#>-^t*v2aO.8)Ti5|VԼ($Q@1(H3RX Ґ݉HQDAġB5iLx5Ê-N1i=Hf Um6 $lAa% e(Yȅb9?5ǹ}m|ADPȈ=M@ ""ĝ[S ڰ^;b>7=~@)s{Qo;]}\v& ,)G<A,oҼ(>ޕ*0xIy|]_T17:C]aOyfre`s[$ɟ$/# NV /7bS-'ר!/헩XHLޞ:dfe׈%davLPP?r3\QtA**ߩ=QtIܸ?y;3UV "Z@""BˀL(uS\Ff&ANA ]4:@H@FҨ"0$" RJrs`j "Tj2g \QYv]X##D\`SmѢŊ2mlw^EԲ96[Bel9(cɦnA-6J0 ie&"k{d.hBB[DDTD`ڮ*ݱM3Ae0d)vQc DcM*j5`t_E|LhW ?}h0R lHqnJkHncG;V[TKDI ߄ݢajRrx!6 ~H͡EpDȃ( I*e86n8&6  BZQ;hѢFl~Czhڶ捚}ZڱQ߄&6FaYѕ EUk\ ~b. 7xBDAwpCld>!#2 į$GH$Ev<:Fx~d&ojҶ-Sظ]۱UrAĺI@~7 5Vhn( #?"ȋܳcyPH=/x:D4 >O bC<2\hZ #Zk"BQk# L֨i!voNŔPqgXH+ lr>ZX Jؠ[ݺ7Q%KZiN"Ķp,%'#P! dɀyЉ+X133[e3 V|L"=>Qm.4S#"J =ػJ mGܕ@A.r "Aϡ4E!dc@cpx>"Z,'Dp̖8/O+fjʏ &뼀E e h%D84,oCܒq" bzO3vrZcŗ/=s1[gt&^8j^N؉8IFg"8@"9ayrY ].tCK3 "HQ#ϸey鬂)g%RKH@@FW`C!GKoJQ>Y%͎`ԟ*raɷhkGZdH;P|f 3??xN9F \JjDl+Tf`S(ŽRe9A'όڔW1rNv/vcN:+gM"d5j-"qJ!X Љ>:N2kH*6B%AgFX!#S,p L ~QE O(-CuE}y0*1M#0RD28cr漵,QSQMF' , $[rlM|{qrr Yk M˿ ,`XxD 2ËaŷNN)00`"" UJ)(?~HpjTҽXkxZ_xEEFŤ ["BP#9R#e&G4{DZݩd(@iʈ(,,bP|a YE3C]+z8Zu;Yh]ϫ&}8ch_M6 /&++eT!.QlYM5$`w']#A7_Epccq0LNurN}} Xb*R(eV$^8@bm&&YD[TB)#ߊ)˧Z`_ZkrfAPOh 4i|6NZ]}"J*V2kT.ո ظej*)Ʌdٖrng4Jf 4D,Mo+r:7ƄZGQD(inNLĘfW`fAu+Ng qJ [ԂE=n;v.Ab"P$RPpfǍÒZmTrT:("dEX @E!ZhάCk]x˶Y4yZX%;n[ZVkΝS[۾Vgm413+BP.I 3[!jDBp3Ē>\G{jXkd+E0B"@tA׹nb ox[b }9FBԸg4y@ wb4VEV·~&( 29ղMc`o-`rix6\JP"*Z;)$bX,3tEm)3Wfv.9J0r"r63)ed?ODJ)jtζ4VWQ|g-r2Ï"#7Ϲ֎Y  !R,YOgbD8KwOMu9'_Tq4' $й!S(](mŅ^,Ay2*icg`cC4rN'ԵshE_٩/:RΑʃ~mM|4?+Wd!zHR#({@SON5 }k0G^H8zU21.u2LR20»b՜yS`b_;gkr[cwFnTS]Xm X'Df~AAy؉h-@1@¹j/<꿊ʯ'_,s K9"@DjJҠ$MV@V :h"9yht 3u49,Ѣ.DDfYevTJ,TnoW H-hl)stbiw;qь:9XS]XEqkU{ ְB}EDAqӍIJWdErI#&#SXJyZ3NY1s'2ҖX< lXiEkp-6X myڭ]/]3|`Cj3]VsP/\=;SNB RpAiDE*T`.^$MVR;*3/@!0Gv#%d($WHM5(˵/o ku#®g\Z=Ԏ]hK*2G7ݠ!b,$oBhnX礜O6+P2X yt8T y"bp"t%ж5`+LJ ssjjRv$RB,#"1kvZ dj(y@sp+Q۾U &FƖW.XިD5Q2lnݹl g=VL}A\(Q9P k~Po DE"VZsfZ`(P 2ssփcc6-v +dB/J0J19 SHDаXkņlZUHаQ´R3_uzj6U ټs˥ل$OYVAHkEEcj31?0GKplMf-VDp92p|?Z D Z+VZͱ6%քSgY*gߪ)ӭG-h w(]x؊XI-H, q37d IDAT! ) 0 [ZDfLp?GkXkha%b:&AHF'@mAF-6YGMIr2[-1o @I ˩9)pE֝$v6@(QK~SH ک goHӱ|Gk BPP(nx"R̘20+M:q1SZ逭獗)RP=|GfKS=_)DJqd&H!JU3eކVDo h9ԂH4V9y¦5q BJE:Pa,"ʽn%;c ":òIY4P(&FDBc/E8.3.is:3ń6h Lx/Q ]ͬ7mup^Ub!b(֢vń&ϔt(`Zu$Zc )`k\?.$yKᢍQx a{%?8M.uvթEqxX"aZ, VijiZ3B-*]<-jgogUFaF 0 )R 33>}(Ly55oun0nlNat ψկk-3; 7`QRlE)^ϛdxxZx ؛&wcѨdQaGπMp>A;)hgP#S\ mqԎ3V)z՞f]8'hq& Q'6N|&8y?\f '8j:f wmXiǦpМNn/hlsڋ)L5 MOC&U9W,ԅVg-"(G cS&$jRZPX|w̾y6Zd)f㾜WDLJ<c}\[~D2V؅Gc74,-2-u{qǹApʖmQ}KQJk4!_A`򄹡+%4V ς-n6OpBz8*b6QJa!O 92687j-kMi,sA3Fc9ؔJ e|VBsSQfB @y^=fCkݟ]RH{^3c kϓ,ϗ|_eb" F(. N,ʿTH mi8^8GPS.y'3`,˂82N*ccL`al(2ĩr02e6[R44RbiäGz}SUXv|I%mT=k۫n_7ԍzbիĜF9QN(cųv>ak]Wlf]'RsRW!,ފop5'RhTȩ^i~Ud]}ƏO(&Oń'Byy)vcUǙ'mB:0iWcl*a\ )X'-|/ Еqy32C:a-biMar1X%b"O,PXӷf?7"ypXkFr$ ͬa>?eOT "pn1[E OՕeO{X=SnAf߭WV K+g >}W3luv}Y!m×ZLYI }bh!_E=bue.CXb*ﻵ_uUfcEH,(+SD߀s: XYjQNtԋyޟH5fO5l4n gE L0P.`gvm~ʃ$("jx℆~gf?0_3#I-v`s3K XD((!+Ƙh.EgE:GOczR*"RcCzb"4gTvl*'鏸Hk%`[39ډ-C;jԒYq[4*R5_S_o:4>u¿gJSPyUieeiuV`/Qœ/~ )|ݲS* ]ι7sA.9 0ιU͌h*+5uEҙaqhDDs'4J ~PxrEJ2d0 .6lHK"!2Rfg3~"’@L"0sL̬,RmoD=uqX0S 2s[T|JSեjuGlm+,u^8gr'N$>Wգal+"p}f%8lt|mMD21APy( .fl+"KxbmUUY.v`شnmVfF徢>YQ&70^-A/W{`b^,a3)sNS-LxWUPnө{"!G|:}Q"RJ"c'Qpݛ'Klݽ ''}Y"cOlb2\%3~@"C2ktɄɒeV4A4+7cxK&*\%/-\D_\[;|JCTq5eڟPǫc⛘PE[k٢:qy.SQ HʷR=F{ WVK/%עv"b䋈@}FwĄTHTZ^ۙ%q8YV Y軫:ϬZjso7ES)Ɓ*&H E˞IjTN(z BX7Ȅq~{Oz>RTGKKg_Cu1gHN79}k-!Rpu U}W9Rz(Y"|HÚɂ~aFH @Y1KU sW2$*v!'BAF bXmi|;T*s/aU{.'r293[\\㣪ѿMT÷:Qv-.X#rhJ`*Nv,ʜ2gb_.5n y.xvhRMHj$NN:HIW9yP-!i|v#J|IU)K|䴅Q1/)TMpE-JzQif&BtghP a:Tff"a5E;tETy|EHb2'''2rkx:ՋirYC#8gH$aEº^XJNX;Y0Wj7UxxWM|WX/1@_Pھ[u[$4ȓc:<8FT#8\i^=+މ.$ny^X3.> ־fXff x z LʄR>3NAOYޭn~Gpx֞.jcsҮΈ]Ճ¢*'òv0Y@vi4E1 $vx%" H1ӮYǦSQOҊ n7$$Ɏnn<9 : (:a:#5W,Wnx Yuwgu'[ffmGp̌߆ ʂ3䟧AAĖvfy sU~R9sn} K|pCpoVRTCv>ѲKn Y))9K_-/{.*D/$PU cd,l۷ cCLmۘew5K:zrҦ(]bqO,K}CN"NDő)ŋ ˬlɻ.0'b4Mp'ZZc͛a榎-]-ql"-&EPw{n9S4aËkoL}[=n¹=[rPIYEȶQKPVPh1U nzoooIwŭ(+ƝzWTp"6h!c*LL.vYg,lWbص@R,h, 22 w("Rx̀Ln.vwwׅ]ADd Z[Jpӡvc}ON*D- F>YOn{w(<9m~ 9Wjy &?= u&*N >f-L; Opb=f4Fogg 2!c"%R>Ggv.O}4.ƚbZ=8 R \ܜ64IRHV!5E%8%*sj;+"p;c{wۨMG9XكXwj烛ŬoQ\!m v13#X X>. :q'ϓ$.3hJl!KƉ=zy`{W v.ѵb(0CY, XBb1KWyF}yy09bk2ݒvf+u{> \~2*h_/qLՃiX}M 6=GE ư i0FwF&f"hbc#K&PAJHbgFP+@pRsy&LLdTDze=j  <:h>sH{p}jbp8-U 5c9MxD_8KbZ4t-Vf~[5Tl{LiaO6fቑ_|DF;<W=!93q5A1ij;x >s^O>S7o<~~z.ڌ"M4t:IE_erSbfvpxMXrsk`0G?Y㒭Z,fLSLR5)+K 뢞\S-|с pp_G7>“49RqG`D0ɀ09"Hœ)f1 HJ("07XD=p]O>N()KA:A`5b/ qr=?kH85BB"yȲ, Cfv> w8Y}cLv3 ^;,\'Jܿqѩ(HDIA"L:˲"=[֦i}[wy-\̘ wIbi3eZ߄| qP$W,BT2d(pß7Tycܿndh% 4  *"jTD,+cD Y&IZ CT>FQpC$бh +qCz1"eafKQ?I;0gY; ,t:Zk-v~c0 $N+*i>d(`oйXpܑdoOEu ڤ&Aw7;>z{Iݸfw.d= ޔdСwaG4GrtԹ?R~vK\: d Tߥ7';#mAyXgoZ=8::Rz^vZk3< ~W}j8o+# s雾e2s'U($ٵkOow?$I:p0i8>99;Ee}O{nNYD.?8f+aHP)0zR[ha.wތ罪wqސCg?|A"F2s&)-0PYk=QU|4](R DcltM]W.uo^ONNv0̟)έ3ލ+bfT5P[Ȉb(cV֤+Y9;Zw:w]?3oc"Nai/n/"^on{aLQ4NŵǠ(0s{sefKn`SJD$}N8 u1^$8ՋT7!cҶ(*hΙ96T^i(].nAR@)xIq x/,˦3oZD(cLƘ XnZj7^Kf}-'bR8,rZ ɏI;;,4UJNcqF3 ܬZ @sYpaGuCp/ n;OɃ>?'C{ۓ8.c ,|t{ y2D(/s#V=˗qLڽ>c\>?õ(.a$ p$=.r͸#xסI)SdGDI~: H)a霜IVqZ IDATI8+1^?M(DDcRMx}w}|AI03q`w/I +=?c?cAݸq… iz=T'''AT4 GmcLN#ga-EeY@/\re P53 %YtMˎ~k/u+S(gn?&;0H,!@J&?EzGf][ 4BXY(nOࣇ'= TDIs$ z:<׀w>;7ahqjdS ieLk.l@,]"eQ3̈́h~Ӳh;R^q3[hѢE-EEλ< Y N>\!{:cLZk7TvJq( Y pIiJD(|F2lg XfaV%#:99A cK>Yy(d Gd( EQMԱ}C} 1O˿{/[C?~SY߹;prܷ߿ ]aG?_D&Dȿxw5uS}7O|G~V}w f٩Ȝ,g>;yzwwnݺA@jt,+& ˲NOQptt*TJx衇(Zkgz~ oxOz뇝NZA,˂ ҒopܡoFA89c*{*dBJ5a^NGk.[.]al< o>_z[oAֻ#0@ꦙFNU  MUܽGQtzgkҎ Mp9Hw{PaUWM"bafa "BDow\Z5eYj3R\JnÂs8$Iݮqpp`qPpn LEǝNǹ>I2Z(-T.N poyj5QBn˯67o^|9IK.bY]xznk Cu\ܦ~/~ ⓽tq$Qpݽcui&CO>q? u${hgsn8t^xo}?Brqgo ѷOM1}ë?C/Un y 택azu0~ܻ8:Q̱NlUd [kݦ-"q@DZyygGGGV_ 3_p!5qOQ˿׮=gg^77UӉ_c?w~E1ƘӉRSAѕ+p0PN|8h %MA}V>SČPՐ)V Wzy@;嗢z㻮WO`/{IM (: Sf(70֞ab^ К`=dWD,hIo/> qLdfw9x*NDl!g7 [_|0 (G#ȣhg뺂 0"il}ݣK~ﺍ$I\.1ko´L-mB$Fznی?| IBJΏyoYt|f}׽'/+kR}`w@[{w+|ȉ Okmr‚AIe~߉%8Awu_=¦'t"?'=ĵwş?99|?y{?ӟ{,o>:v"vo;V|KGM;soC*#P2d tOyQ'O{?y9TGJx5{I?Ÿ7G!:Z8ROI3XrxȔB Qpi昙ѱ0|wŭ@EVy73N랬$E EX+"'''{;(db1#΃]Z6N975yZ(2bZX j-mSӢ!׮/ۍD"V)"4#Ύ 0 9MR^28ft"ffCO|絢@liWDGbo  E[nGc43'89IY7dI'^H[ل&iZkwvv{1b@;;Ӻ1]9MK>C`$'{7R|+] ߼/A* ata?+{n_R)# (I#~ ;kZƗ? uwɗ]>//T8 0ɎnSudƘn{tt3 ,4yCekڙM("⺿ఙ}mtv_}ŋ_EztaH{מxz]5w=}޽xW,Qd Qa?Gyuկ~|{ы^Eb; {;H%ߐ^N" ;]e/w`00McMicE_b&ݸuTYY}K€S:6 .}v;?=F_{w,;x/#_?_rU>!k{N)eHHB"N/~.}ǒԅKO_οMۣý|ԪPjtZIiyJ$s[~Ta-h IQDe𲗽CwG?g ^[owxgnex3&k׮=5i0R'g/"vafsV 'zEFEnkCTDZ-0fJviBvB_GB zswuiĤ7>ѿ}0F$QEQn9B^vO""8rѤD .<9y矽߼ysww7!a8a,CT]ZhѢE-Zl0P˗/+^#?yD{_Wo?;;;r}NNN.\$1搝N铳Veꗽy8?ŷ/}Ba~cɽOua8>>o<~-?agֽ^o+b`zދ^R'g;<|Z|;~???ٹ_mط>1:DY Hu;s^yH'2oݼݣ|߼W}^k}K pkECK1Z{m7|ѿ'w[s>0Ma?Swˏ8_r[Yh GnOnz1B =գO7vMxRf~QEEA2@=xOA85.;osnOT쐠mlI!0߯h9f>wNoﴷ&!.>="!z? !'g^t؃(fwPǒ%%e3SNi5;aZ'>o?~3g6lbK^BlcLYg_ "/!vT+v+Q*2HQPZgQJ^W4I8EWZy$\nݲ#Wp!Bo~7irmvRdȞ19Z&aE! YfJd7wm%wƻzdu\:g?|~~k_=Ƅ {I,RQEGGUjAhY?[TGӮ{^vwyG𝻬IrZkxX99;)dd..9Ƀf(qB,3.%2|$338o?EՊSO64g_| {⽏:(D|7nݺw~7*hppZmElhãk4D[XK/ˢqmp" GFb.z;טegus|4?ew)j |*S#^ӆP82A9ji8x`nig<:"@=NZ8+*A51Db8`%<8ڹ}S[qI›Or2%B".t" Vf]曊!2JS.y90 MJM1?kMrM.;zQK.k:NZt:(Ȳ,30uE]tBW͡.x>=Ls1qE0qǽ)o~;R|(V'ֿXvmn$\0α(2!DC}Wk}9,{bu:Z>S9g;G^}UTBy䑫9Ea  oX~zaBJK)x+`bsV!0yN j ʢU|.\#s|2TFs9Ka]7ZƘi՚1ZfY Yk+|&ƅe0-*Ta r0Z5>d֋~N%HH` âD '7̘8Cc 1s~85E1A8!@Kq҉'_>M$`޼y)1xz=NϨ.2jd[{n5uу`Zd=PbS}?/<7ITVJYkldeS[bt+#ل+d/.Z:ͫq8i ` ҡHm|& 1c5 F*P[}tJce$8$VRzs*D@ {$:y2j7](N/3&=xJOJ ZڵkWX׾[n)aBsέ]gKT颋. ;u ;tI=FGG$y߽7I$PS,-f944vO?3`Z- 3%8~J| , 1& *[%CWpmћ9~974>6EEֶYȆӱ dw?g1*Qf[w CXd6 R!9ﭵRC9|q_yUG|đV:MT {ޒR !HxAE·,f#rR#BIG7:T8Q.d;s (=w. 9R .UIA2~4F]cE BkJ6tK%Ohn6i*d.2DDըMGxFD伯rL^Xk p 2 0) (P!2b%by{Zk_LQ9&de=A%YΩLuRdu:u-[xŝwޙ$ iJUcڳ%qtE]<#b.yzEAt3ƒ$9aLU+_|qGsϪU:N(gRjW-J("9Miy+I\xEɿ Z&8kʕ+,+V:qN .]nT*+W5v%EsM;$d7k]@;޼m[… :&0;mghEAphɒ.ERk6^;sι/~lbnLǰk 0+AHѩB-pβ|}{IcdIX59-x`*wkj 5_a]z[x7r3wl{b ܌jd1Pd.Q6 E58#7l'[;*a<4xAI0+tWv酰DЍjŻVTe §d16m툊iZ!cLrx^S;Th".[:<U\5m6%5bm1 _aaZcƌi#޹{E ^+.[;Ḭ*B@[_˾y~-HgNs㝤#aBdYgGov[r L4"HWL \cʚe,:{+[Ϲ.qR!sY*$ӎq\@+W|EmMĉYPc>YJfgJ”V8iR15@8y[ztdh{XJ: \Ja 9c,|gΑ=#P~lXH{w1Skx&0ƔӨ8jC=|M ZND0aM>Wxf{=hhN лLbϬ <w[@#f9?TwlO<-=}N=%S<1GGS9>A$ɑ~'w.û~y?ch)*$8/Br<8m>iM! fVst՜s"|%c(ʣDD %h9H9RJm0k aݕG$QX.9ˏB_᜕H9䊼S8W~?W4&=xnYO^";CU` !(KZFCkRJsIYOD$У0 =_}UWwnrq[ιk ?sN;f)լi#)ھxףWE3)gY}ds hN U >Or/C7( sg }=);:kF RyĚ:hmT ژ@0EU 3ms@ hfm[׈iFpέr !g֚s5Θx_/vZkF/w_.֭[⪣VApP8.(袋x0ւ͛jQz?$!9?X$ihWؓ_v`m:<ժ} oۧq׉!b'7oޜeY2Y̮A0a 8ަ[ VIs+O$w K#m^ecC/TcEA\Fr 8a6φP&+ʄ(cJO0)?c QG3۹c,B vw]r%dh?.# 7vE]t )T[񫮺λkG%g\8s%X] tlE~zyj[FQM`3 7Fc#u%ˮaclŊW_}clժU?UZGBHG( D K*9j$IjZ)`1VGQa ӟ  +K7|RʣN8_ |{/{n F |%vYQHd<RNjJ)1QKK>x@k]yf͚ 64'!6f>.4zS% i9.'J G!֦S) K>X)22ܝV=xAHi,_ЇcGIͩcxwqͣ7ޓ'sBidFwH"rl1TbAvJ& *LLOrt5`LLx9k caji \$\͍<"U3|ߢEF]Zhlu-[Xm-[v[BD䒵Zƍ J\T[E #v:$/3Sc쬳κ{em*߁dP&,*U{CˠmpQz#өq&zh|g[ld%w>׷>*# $n;Oyҿ37Tx FJ/zͧms5Ӵghn6ْǕ͍?+zqD|.E<џl?zk/Xs>r­k+?/E  aK3.e&( "⌕.ir~Y#pKtJ#g k֬=G!ܹޏ|8p@EwӋ~ "GH)`tx IWtR(% ʄѬKބ|A+K#NZ%7i,o+_9KYVp\ӳO9 cH̲9  @!2caM3-Antlzǹ"+Ay*zHz؅vncHD8aG 'kC%)0IQi9@!ovgw 1kmB \R+VJ~enb0H)4uEQd)SgYVSvI,Ղ"k#rŽ[qm^s`B>OoYtީн#/> >v6)&p{~-Mu06vqwixUW<^Zʽ xs6{u1aiډeGi'HsaEa)pEn 7'Wy)VX^M56::")/}A[Gjyfr^)X^֭6ދvbrwr qq,oYR^֭9("km) Zbzv,ߚ2]MNdF#9hȣ~{8l`J[X\@7T$[*ZG Ы8g,,tMCYむ#V"˲JTuiMA(Fk$10Tv;T1k X9K8'0ϝ1q;VJ Exⵠ1_og~;NDs?2uLƃTDŽL͠j)W%uK/=.¾@h)%p+VTaDDژRA/s~\GQ9/B "VI)˞r>h1XT%܄ *#{E_CFF.6ǣh[t.$tTk1&51qݻ9/}}u>8;7<hΜ.8뭿/Gm1#o:WS eVL)![ r#siQI9Jή=3~+vTg3_:\x%t=!RM[Df}`4;whhioذ0:6ppp~Tviq{ VOV!H "s*[-aXْObI$ds#"G'p;( 0X>56.!j*aSN[r1Լ`gj<id7*7&#8.$:Tqd{}<AݣADI)[cn9]N[2}$v\뢋g|E]tEZR7ps~inOZgF@c#?)WB`mzǝU^:IpRZTfLrr_{!n8Ԇ6chdd_C `1:Kr{cLRslw7ƷZs ϗ| 5mq蠃Aic?!!DJ9+S~}&al<7ퟪ|h.q8"|Q~J5nSwT '^a%Zmd'}Q3jXq~uwL#nѺ@40_; Sg;bvLpgFdCLcLqQ #bV+Kv.`袋.袋.x>IJrҠqT-62U--?/6Um*1[{j#U߹Dqő2.KHˀ:1.w=.+(sZt:ӓeYK)yqlɲZMJBY]J!Tu..sbps0$2mq4Li}fvLpιL(hxtL sOTJYF3e7?WO]ֺ&/eKk2w3+Z)YIz^AǴre{Gnso9kw*pB9"уf1OOBuT6of~?9uǫe ZTgsxsDOc9"/Cd` "Oa伹_|Ϟ35PU͙!R4I}3q>::z__pc\ QYYr XNpc#(,5lr@!nw%H9CD\0g=20(a`-71";-gY@e<=xX(.YiUAy4[:mV!"Ic󒸗eQpv&|hK"@@~ %"d>F!x V*Y3\A{ `L~'8RvSΘ@Ƶq3ι7KvKNe'OIRI W2N9pPA@%*َ, GDhleϴ9LUiEZ?P8 JƸ~ٙ{98Ӳ9 C᧨Ӭ7պx`j1N=߾VBÍdU{)uF`KQAޗCQ 67*0&#D.k\Lr.q e8XOPhGV{!e:\zK΁xz fo@u\١^@ (*%,vefVoɧ,R3g^,EЩ,Cߩ8ȣL1&Oln}ӛrEeGݧZ;46p ;[mh(V \ qpر˒Ců8joçg)ښZ3:R]3ba9ӫND-a(t"|y=`.l@ y(8CI*!"i5qyfkxfQI J .潑(e~y,%NDsޓAo4#WN))s5RJLe~&Hl5c <@$dJ).EjfJpL9<itָ2(3Sy=?v.>y;1u ݻo&0v zVyߜw.=r\U?[~Mxl!#b)BB" 6,P6K`,X v$ ȂOX>?>}?ƅ^?}W,S}wi:yƿ?؋6n7:wZFW}̰? iE!PKt~>ƍnRFvmA=U `&Ƀ߃ԛBf:N9c>-߳tX)N|kQ"P:vQןs q$9x~2[!'$ P2@b dR%%i(g\UU%|F@vMQZXu*RBA"cL G?^ 81 y3V=I"t!1´&ӆ'vBEn_C43U:U$}P)$˗$7j^oK鳔ͅL-8uu5<=)0ΖE!l ek~"Nž @BfK j.Q;bgTUY z<+' iZU6/,FrL*jY* uEgвk6yDj/|܁K&w(wQD!hFn]ܮFn7ѐcܬ.m1ܹtϻ;ٷ&v&ܐ'>ݨ =8aTJ ޞLDYܚ@ZeXTq:8o6'qիG W 'Yb{y3/{A8[Ub#*$\2DšME,>kydB$pNȁU C=E Bq7!ADRfHDTƖZkߠTE1ߘ'o>n㊈N&QV/[\vm!oD$~ *?}`jY>$gY'W'*p0v@`E(+H,D*"$K]hH9*YQnǙHDr`րVV۲qѸSԋum]>ܻSFW_ކ[Zn+Q6٦mp7.4p4MDqz(y>Qč1Ɖ`a-9βFYD4 9^[@n;E:Wx D8zYJ)^)'*P- 5[EO3;O6qdEU@CdWTyC-Sou?=. kme,uD%UU"bZl,~5sVڪ(kkk9pP&k2R1mBGb&T#62gX|.P{ ܒE%[F󁤝e7DǶewû`F#"*t##SQQ 4rpYvGQ$ƘZpN}4} 94'sKxdDb ђ*jϐ(Ә1c'aC3E.udpEˆ w.$ H )P(~p?ԻKL.:uD@@wBpɥz$Zfk< Rҟ8pDS"jce"x fyj?DJ)oOl~k߮+t.]PQk]wǴ_Vu)P0+7{~e6/N_ή']倠FSpPP3TO1[Y"Em(1͢x<WgT.%JQ&¯g*|*vwլ*޻qpG7PIuBZEyxl_QEJUSUE~VX |C6~gH{d*zx3hhԿ2_ JrK>U)ץCg<7S_[t_%^ΕOXJ>S)wvğJ}OJ)q$]i$`ЂpK=?5S痳v N RjQKzE ii VJSmQt]""l@m\I`m tU)m v3/T >`U:kj_CmmEh\RvM Ail6u{¿]H(>s"yWɞ}gsAԼͫT=mKx-SmA>(m A}xqO>lM쪝.vFSݠRzՃnQѧ p?c-( z`_GݒnNinq櫖]|@WS;]nvO04懾)|vod.K{4:N:K .JuSq*/c?0Z|;|PA Cn6M=?5S痳A@7@^@7%5 m @76@ngݒ}O<>oii?m:pu[L=vUC.)?f;W?#)=B?JiqDVͻ4*d#(c@[buuҖ ZPr\o.||qrv@7 jS5z_%Ar|iWc& %||TD+r]nYUuNxf[Tzdc~Yq$y5_y6OV6˦~Ti1D)d~ NIEƺgDJg(u>O} R vU zq%68F &Ӳ̌U@-9kvtU`/>"Nr1@[Hi?yدdϏ']㘨;2qҖ ZPtQ4.||qqFKh j)^q|OntQ|@7tlmRIH5@߄#UXMIA~hRS'^-o!<.BJ>uK1{4/+&`gJ[B~0hAuxEi\>lM*nPj j)>{r,m.`6ڤ5X rQ]T)AwW`ׁvQBhۤ2a6tU-32;+afL>MgJ^ĺ`3ٔ(T;٣%61մ}{kyX1I.Ȼ|PA SS<(2֔/N_ήFKݠTܞ:6lfTR2P)bZL[>+97 (?U"6!ƕM(y|s@@71fxz5f)OХ|DX tk+mLɟAn* QW\3{IAIiI^ney/8ܖbɤ趘`ЂTqGP>lM*nPj j.9[J.AakI%.J/*ZƁz -|.(\)7ַ1eYo7O-~dZE=T @Ib[hmZ [z3΄Ƕ袖]?LxW\[ϵ]t[ܸ8&p>)?\${}dZp颼 le")948kA!pwJ[B~0hAu:E'[C5S痳AƕM4iJ`7Rnr#ЍAn57jmW~X-DI`ES tiz-v{A)Š֧$p&ͥ463&!5oykcxyofv t#M.wm@~fܔJ?HX]ú1\#4|BZqKRKWRia^]R$۽lѢRee=:XJބt_ܞs\s‹偖ΤMHE7 I` *T1mm XS_qkHB<ؘ@vmB*.7mB$"d.R-Хr sJ Ή9H6PnJ{sn=*dfQl򝛋6}cI9`Mqe倹1$Tt_ Qy\>&_`0 _)kz41gIΖ-%HJt?W,=~KޥH41xM͢Ϸ[ߋ6iqS{7lѢA7-}-A[tZ\tQfMnLwMJ0Pm_ss"zej!*vx)؍zAM+<(_ʀS_Q|˧sk cV%o^͹fuNmRt#ZwȁS/AIҭs]SOlPW⬲Y?c eC)=>)9tc@,%?HAn"&s\h>nj] {:B(>IhL6/O@ KsWݠfWܞ"Fo퍾fɀbieXy lԿ5 tU9Nquۻ*ި+sQQ=voLz [uMFJ}(~M^N^-P%lZZ)A5\fH{ )qK+_Q~M\I~a*yzN稷Yj>m9n_mdŽ<[[tZ@r3@w?}<Ҟlѭ6@7l) *t.bZBoqjr)]Sllr@NO\Jjs!6 tSoM6q1)櫽Q/" H!%A)5>'}OjB~UE.PqtNfPAhJ붝_|AkW%ZϙZsЫ0l3)_J>}t;B~RaocBW^&%{JiåۡZ?$%Ymd}PIlMuFmJ( M;ޛR^Am h GqȍnG]IAURp! Nt)^qLB#g㟩ݘAZ.֊uZxGT#un*똴 b۰wTYTMI7|ͥz >YJ}-]-s$~n;)5*zoE3 /|U? ~[JM4E n_[/n<,26_x>˳ZE\;iT qULqkP/15Hѹ']'x5Jo/'%*u'MRYRYkZZ2>G@7n>+tJes<y ͩ]ץy.HE{k9+ nMwOrpv[%l+.Quo)݄|7jp˝7:`}z-?ՒG#?ys)#_kKC5o8fM.*ռe/rU:qTjVR:FŵζRUۏv?m۟|؞䋳_Vd_ѳ@w jWp!躖xi ):pEqT*wq58YNvݛE[Jtr[tQvwKtm\lF>E Z=Q`}r t߭Ǧd)M,xc0/=7%ˀFdpjJJ[\4LZq;wpώw?\OJIǥ[OI `k=UR29-yvɞ/]Gfetk#cT `Ue@{RݠRG]Ms\+o#-Aͨ=CnL T{jO(:lZT9Fίhj1M]Ҡb〺KJEq3F4,]캖nՄ|kuJ+ڕsл4̬m65U?'#ƕn.КT+oz9)5 3nӰBJϓnt;}\[Z)qE)s|T(%|Zn|YojԤ|?_U@ۘ4yI6UXwUԙWLl ^2$8v6š#*R8g%*'q%w]ƷB9uP*u1(ޮf>ij*UmL.IV S БJulT|ٳ@P{)7P@v[P{+,}[RIPrmcuwq;'pVE|}|[RsΖqtQ6 HAg]7x򬼤aw'EtX.\J)͎ebLhuWLTwU}k.j<)gy5&9qPe{/1[wۣ2@*U' U Zq>RRD-6YK|[L|f>ĩ⭿9֡2@3|68nI6h-Dyl.%[K:JX{][V|ڝMk1W=z\iThMz}@A#gXn=Gܵg,| -*Al.jm}+Dn[w=#555RYY)۶mrٲeVo.eeͫ;vkmk9\ jI8w$|$7BwlH;ʶxX"_fsw͸+U[[L5]0UVS˟&fs*ydQ m/ϪeRUH6Vo-3mߺC+9ܮֶM%ۚZx\\[5<-7klrlٺ^YyZ W{tpː rtQU3n}7T n1cu]7=d=|^v։B&]5RQQfbm߾YEE\vgҤط7/m53~3ړ|qoGzݓWʴ׆*/lTMjZ;v2 3lN3/|(ʝ_Q-vL,ZYUl1UjrۈTWj4*JH]U+0xɸ+DgaU6'|mV%6ljk޸q*Q-;*vÏ$Etk?Lhr#e wN=[sc*+hӦ-&32ކo:%G8;3ۓ|qKZݓGyT{lӜ]3GMwN\T)⼋J^W4xQ{ڙfsgNelGmVeIk[YmJi1hKr-- %%ǍZswWfϚoeLB9|kj45XvoG S½ۗ|=zJb&k_ro掣J~/IzݓWl~q/[ }Pts mD튈 m~L{ɽ`sϹΞFM)"ɭSs˖-ӛK08&r n:={ 24t`_a O# #&K~#}d?~L2I6oޘb?M<ю% f.BDFe}MÆ IDn,I?qp?^|yO?ja7NNj//\PQ>gAACZό:g6eL(?_ YfXMM WN4\iZ]c/]#[Oϕ_,OX|jj2Vs0W#AӖe+F腨@)"Kq Z+|0dg%q [[EOڵĺqb]ϥ[al}҂LƥK/vAd0:uWk j;q}au/p݋< XΉ iʉdz5-/#hupucEFKs/N\,|E8E[Pa0oekFۮQ%"V ]AʴVQV.jwFb[l6%gPz#o[! IQy8mlBY.> VT!uc&Zy?^q̼:-֮oLb69fN1ċkh}Xe(*['!\XIXϥ{\5V.Vl<~^?eǧ=8ݮ uuvB8n[wߔ8{H$[uY5mt] $m^΄XI\4cYx̜5e̙ }<9\sO?ȹ9\?.n-̻%*9g%88&ϋ ?AAAAAmAY嶫sL)^/pu.=\yQt5^ԉ7Dt.)T?]zqL |!|t1ۤRVWZMm[jd X^&qL(ʪeE-J+5A9sI%X>cVD[t,_^mT^Pduċ 嗢cfmE\C}qcXrdqc֛7sq0e݁ 3;s tg/wy1c}V sΜ9znq=CLiSq!8cYg+as</,9߁qk5gecsK3saą_ݠ'&SZn5PnS۪bҺV~}>I|loׄ_6|t*v{Ted;e e[e3s쨩2uFyoI9rt ( 2~. 9.X{YLufpV,S 3 {':0uPͽwP~w>~r9\ׅ#Ǐ&sI[Cntn2eRz?qfI8,]*r-:]s~t-fΞ!9z ͋e9lRWfv}>Oˮ~<Gx@%\s/ĕcs8}˳W'Jg(. 4dxӕ@w-|Bgͺղ|Pkd*2,^u̵P/ #%ݘS⒬[ZS[qX2>ñ˩jgr˭^e2:~sa6BViąz"bVYiP7[C=- eQ>_KxLt)A[5le/+iXb'67ttYj<5f3h<a؃~{?q80ܦ+TN~sy2{49{L6zix墅se<=wt[5sj:^Z~Yw-fO2mT5G7յruI <,]淹V[@:H/?9NA/ۭ҅ot{~H(y\?jKQ~S/-Wwb^ϒˮ\pWS>+~\y2q=&zOFoZ^2c⥋,cߊZhyXǏ} Sr e=, @6qN|yv<I7 Sni@>smg?\V3C3sVȟxU.}dYGgߞ\(x`\N_;S.yTln3(g`߁n1. qFUbf87cc|ܹXs] @2u:}-c=f~(hXgdX>.ixs}.l*I1*^Qz0qP7w^9G%909Woe5W`]y}q]1o8 ™_ɲ,Ln%K=E&뮍V!`\.^dn=,**bpr 6c\ws#w{w?\"'bquPr!L;mdr_'N|^L} rGA*{|_gR vk?Qg 첿ڵsɈuă8q.\ ukk&A=+ t3{Ǐuˆ AAAAOuOW?;/Q5f|gHcÎ%={%Gw|Z zJхTJ5]: 'KUZwjFgKԮ\XǏ}x4G݃KG*|l_f,^-ј_G" Mruc5keSݴtmӊ\6;k\p+W#w\߹rwOgkɸd{E^pu7JBc°y`\Z+kA9v1Y@ŵR:Eg8+>9fx?Crm߯qXi~?  /)P?;n8#>c}tmKVAT,5 OΗ^+S}urſ{pd D/\;ůDs=voXl)@ [hz뎃i$gɱdgx`/b- >os3񊃱k6Soi:߳c)ŋu~o&n~΋|&uԨQV繎ofݠ8򻾜O^1},ho-oq'ȯ~}qdo9ʴy[(VD/ͳJZP6t$ӓ>g;\?XZ߁XV_ݗGc*0~xRuTo9w/9rG-X} p~!>?ͥKG;vj9/Yk#EF.2eGK2\wv[3-_.zǵ-l"e[w,>q>j t,ޥA/u-7Ѕ=hė"X_@-N+`o.X0@rb9o}GfϏ%>#ƌӿE+}1kյR~gD_/%,%Zkn*HcIץOk8$A%/W +oݞ'k8֝ jK}ǕxB9愓׿X֬hCyjĖm UX;E./ ~|b,r/Y?Ȑ^$ŏ%uE˖ˡZ ~ 'ʧ9T\!5zB={XǏ}IQog{ >P7I5BAz|X;?߼8 ;XjgX8&PfX)nZ U۪euߐ_߻T.QȽw'ɵϒ+~S~vɏnxK&Z/;oԀ o ty3ƄacS'3g|gˑG-_9[-T&w.\@D܁Xy'|RzyG4V]#udSsȑ#宻oIt]Z/ZLl"W[3X25{k׳1K.5h ~%g`<*/_!WE7Wh_R_2~=[oMN__t3F?',gyw} P?g?{|u]crE.vhm z}|( o.Esl^S>yAZЁI&%\"_Sby׬E{w|ߖs[L65[b>|?#̎~YZ׿2O~lqey=e}?ɏߴ?'zȫbǹ.ZC>Ѝ̺u)3Ln &4s;' jrFݓGC=2z_?&j݈9?VxeKͥ mGh:Wz8zszڢ% e"zQ@>-zZ~ .>?MZwZ*klY^]#;*kdTTV[/ŧ&W(nN= \VQ.?OZQVY+|<;{?0@e* w6qux]+h,97))GO[_޿o*?~|2fKg43(g`cYodzSSq<0aiLbL sbr&` OfK- .'oZ=ҥY_:ƁlڰQ9bsia9EqO/0u0vI2k|9_€/Khf9V+/()^c xnGL/~LgOIӦ[ ~+kQ+ [|Gn.{bi}"^9rҵlb>_|y9옣Й3lϿW]-f{}~(Wj}3`& iǿe0;w"{o~+j=uy',qō8ҽ'؛ ~ Yg~G[NMr7h )5Lk/̛^s\z_0Ƈ ͷI'~3n8TLLӫ{k IkZ õ uYzlش1zR/ȃϒ 7nPPPP/%QYƉ\˂eQ"4,_ʤcN:ɾIh]JTF3bqQOG@ Zu4V/.`B:/ xO~W,.>5BABO}>Pzs7]ֹߵzW:MY 2M2mEEPnnis>2n߱٦;e|wL>S~t׽#]7Aq[+_/ ;y&Ѿ0r 7aM+ߴ4}_LxseTlWɌdH"2=8\@ 0}imdS̸V\#=]=`@'MM lieV{:nuFQ1佈Ҍs+V\@Lu⨋l,mcli>gosxz:º19-`(N\#TtaL+(]|,<.ݪi]W^+?A|}`ϡ#GocE˦ _f~ʝMζ]Xdv({䑇P7v6]f19a#[75Pe-o4sλ /k ȝ9w<;o˜dTqgQ{=磅;ew:SOYgLt:_ y8>_.\fΟ/3ٽtNbϮ\^N:_x--5 ~Í7[bGn3w]a9]^L̲zF p;ܤ;|À]Uw je+#)-[`/aկ؋!FECQ/A9zǧ}PB_J=*V#k?l a?/+jƐQO@8Xq AFlGZj/3^9]:Q .>5[tr{-۶Z/YR}Ï4`^ S5;e6AKqm&Э.Z93q|qk_W,^|OoY7#\| 2zb;oL30 ty+Ѻ1]ZhZݎ:D9_i˺uЊ2prI*~6DtUXvr)0ݹsc*trrM7[M7jRRVKZ [ڌdZftMFv葇q T,Y&'|PC+=8x)A]umTVWɖeRgi-oZ7zɟ.5*oa2o/XofLeƙ/o@LO:d OibžPAvнsrf?>.ݞImK5;hM=|@@ꩧ Hi@!6 D׍~q5g  .0>z tяfiG?|I/P9 rC[(Kp9A^GʐaC#;p|vH"~V^K^X[ljX7usv/ - ϑ9 Fq70tڟ5N}9 LוWI#B `BK w3+R.f euIWgzq[I"Z`ISȤ4,/f JQWtQH!={SԷu^Z70j"~QN֦[m9&.Ü@46eS]]auEGt t7oY'[7o ˷o$<0W.2Ygo/=0]~"=3圛ʸ)+ƶQw tݾaI +KẄ́o|+_OAJm<8ƕ HR%hR*&ٮZ&O>|wEBZ llċ He.|4Ku3f'M_&=B@Hfu䱌9J̛iܬs53I27-ndbX$ɰݻ4 m|'\..yG .~su-]0Fwshſu1#Gc$qÛQ0IqlLζ]`usKgo9+_1؜;o_ȺLi9<ܳ2y4rTߠ<̳ 8tα?I3Wc?MvE=-tq~b̋O>?JgݾKj^Řՙ]K,JZ..,4p3b? Ȅy^ wtlRt|dk_' AAAAOIPswT/2,w&ɉ'b.22Oa7^2Bk L[^ɇ+ސ3U~9royC. cǷ#?~|[^r7.gPSkǘr@DFƒ+sg~fuh΀C_:u倗\Zu{ G1ttTk 3BAf&@g)]: 8Ήu]e\.!I[ o=Wԕƅˢwҕҳױr)YWaם\2kF/*ٵȰ)ljB2E=-͏.F<ٻ]Z%L7Ⱥ"1>;M A'V,\lI 3;[iLEtYv)``72i3d^N:پk]}L:PƷϱ6+ p;]n!,AAGGM 7iXױ^ ܳf̔G'?fҬy f+OSc?3'˄ޒ^':<[b~q'ȏsC_ ~8;n؟{)BAGn}= ܸ]q8_e`mT7bs@;&FL j>N1уI'^ 7j00_-/Вj.nԋ\u1^t3QdOLVb?%T \חjqh1j1[nޗlj*~nTǏ^dLFuxOz'+nU[ϷC)?6oo:6UE7uuQ)?&W?>U_=Y.i|[dKOI9r}??, hl|:uY$V>WCFҭ\@M,:˭.O<񔆷0i r`wNS"A-;fx]Ή+q'ZF]^fU cdޒ%/IdN9If)`qM9O>d~( {"S_Zow'3ge4_r7ζ15]+g*ҕeACkXsmDf _..GtEqU+NaGwEX:[iLس8{8} ߴ.Ɵ=srO._Yr1)"P=cmr)YA-Z^{uǤa'9?r7U\-/"LF‹,o-9أegwUG?e >̴Vp2~;:_GO7~ -LL^nƸ /P #J/h%ױYuyyᬻN>Х</xرc9wAAAAOMw/m/=\+ x)>/ȟ/L6m؝<]EQ}3.k/ʼn eE6ŏ2̠Z_R;3,sSG}$Uh(QS`x1Zo};WVQNx9Hbr=_˹uuui%n_f|^:\-֫.ovk36wozG~Tu'׎_5H~tHC7i-߼v2ybE3(g`߁n1߼ 0ZlCDŕ%d4w:A:]ԃ²ʵ.C<0jRęɨhy ry1UCEe^\.3;G>j' =zA.6;'.pܽpiB*Ch1!Gi++:C^c-{G>Nzsa0 V\=Γ߮˶@>#Z; zocM*o{u1&9|nf=B{JjZvX ^+ h9]|{b0j!&@ׁm|ܱLҿ2k=>q;v<t(gХ2;Yt鮌4p?nxDz jԬ+)KB͙һ Fl&|\d|{?x&Hfp>|#~Ïz8j*e{6/ 0,u=Gst6yZo~H<) ~ORMůP85 n'$kJt t;W.?mw']3Z!w|qk^\}6--TN. V&,{6_  (Nf3g|{ةr|rdE5)M%u~M?A+Z1ޤF-:< b;^Rr}=6n1ec5Zdf >dX~rg;B:ˬCG1 ?^QULҙᖈ{ȄC,4@c*׵gl] Ufێek]Zzm|njKؐu9pqy#mJd.v6sh"QWfZyYKnT7 -.ӥLzNd^Thw"+g_`KqMryǵg_$sxR1s {Ƙ~VTo%-teҖT34i@Z>& 5T؜lx>\ É㒠kkm]؄n7F:?nPPPP3WסeM95bKh+l{-ly63 .LDu7epH QPj,~Mŏɥ <m/kGQGLE5be .>?vgEE]VA:1 @eU+t8CWwK]x3Q-\Ï+n3n> +D\.}a[ߔ|7L>"Z󅙔3(g`cYox $xX -H|y< ! D} M랔 lÅ̿2`0"+\2t| Ɣ Hf"Z#.xG=c߼YpYo뺋Gc*4~ 5"^ϝ́賊S-. +" 9 idrXߕ] FTX)߰fRΠ9n]YD68<E[AK@%GDzYKZHGAn{_gK$ j[qbu'y eڔhB kilkuи`Lzmܺ%]4&r7_XWנ^(b LbXoqA\gHuz [X, q5hE@+|ƴUVe~ݱZZtvٿҺ@7GЭZI ۫F*6 ZAjl:8cufR;sqBT,3@< ߭y>{Y@^҉xڹm!]zN-;H#n'nPPP#徫Du529ĵ'\:1ucWw+5趖`[Ӡ[\|.O?Т3n,['o;6fZCWJ-UXߦP>w6ZyEׁX΀wUm[؝1q*~AAAA Pq_ru)S߱/CPfgUU!~ٕk:]&JIh?)n]EmQc\.[ˤlVٱiT*tVm0e?q n\7̤vt,O8hŷ1#1,FKWiDfgƌ4u~25'}iO.~7Lm j谁*8yVnmʔIVϜ5\: tܨk:"(l-niCKWO*@7WPNFT [[&5 כ jV=V19+6yL*_echyX Qap~P|ϧmXH6%֠;m$˸Oo$ 'Or_tv_ ::SMrNlonq ZC_~ԉa}ƕK:PSV^ !)]`@7GЭڲUrٰelTZx36F0r2EB!0ug=n=4Fiv.MݺK[`c~X T!+@7(((h`B S64\݉:/)"I]y˖|^Uh[QVYEnD@Rzh.]\':e. l۶n&[`ZfOFF#B- .c܈#Ab% 9i"KwNUzy(ZR6m mPn2rݺ52j(KKCcq눰}GÆ 2(yOEڑ^}d 'P'춽|i>bᄑ{&e}͚52rHdPPPPP*jD^̦Ky_ޜ:K (ۓ&cCWSuugϷζqrg Vx?AAAAARVp'L|Cx51xV?*/e/{LgC[^u*KɁ]~B,E=t)`* )rQL[)o-f݌`'v[-oҥfl%o`~*7n8;Lwy;nko v-pYGyȺͰe5NZ 'u@LKOc -% P x| ^t喛A~xrwʋ/>o7׸v➸g;EKs vcPO*y{ZWx9rpyys{R?Gr_v5?ʮ+V\it{V6zn@}^-BmC**hnqqgT.n nG k5?=EsNkwѺK B`IkjM Э8HҀOx:q/M:Go09뮳"7lXg/A ?]a)9Zړx~xƳ|#҅Iwf3z"gIȧn/כKԫkR`򂗠#/+)kY'.ήlnڦuEԃn t)zJqaҺjp2AwV*iT.Q'Eƅ9s`:m8L C[)FUVܾoin{I7E=HtDc?a&aǯ+"Ho҄nŊ?]"9EFZFrԭ5m/x& =lk$ j: ꨎ/כKVlת XCqqt;;hb2- AHA׾˄TYkn# vRk32r/7ݢf+/<)$@ޖf֓~n}N<]p6C?52 6bwg|ݝg0"Bĵ5\]o9YbWTDi;'}ྸqܺ{vU0A/ݓĶ|D%< j]3T<PJ?nm tKdS[ԣZvcv.t}vPځ@5JEv61R]CvvPPMkbij[e!R]S.;Z . . S"5;tQ>C)]$!҂ݽn̴]hNza 65]JTݴy&b"rߔAAEqay>Կ_ٹVs(3. . .ⴊS"^e?ۢKqW@t`LNEˮ*Al.jE7 Э]M@FuѢ VV)O )NGVtiU-zumu!.P"\薔!nnvٲuSmW+ 1,(#{FT|!CهCnp\p\pըvV»{=O tSqOGV tUW=^{ -9\@]iQz1־y~uTmA/9-Ν;:tWcGUtUE%Kq)l;-{g[ҭ燒Z|ekߡ;jd֍}L9(# [vˊ oGAp\p\pu"W[jU{(wU[]>[l{PU-eQ^1@m. 6W5] 7R]벵E< h + ct[^|i)^КrРA $] . .:Q׺.3rLFեȍZHg^Vd⩮Xhäpkewo٥׾]\@oA˗ \p\pn ]nq^RQRl -x*X>x ]4T . .v W0tYrMvS[J>6#5<=6E]>#E>Ut۱||i\p\p9A7ť ]S׺0;%9u[LPe-qE>Ut۱||i\p\p@5SCz0]&:AD)~w upmseuf2d\y?s-MϓkJ/Օv-\w9.ı8A7o \]<.9\l&đm8wp.;Ɲz<>1A._fC tkUu-K-UuVjaY'5Z; Imm쬫ih I{i ůn娠! m>{iF?w!:^dunS*> պyngUF1[%v֦֗~ .S)l2*]zZwm/*TphhXb. ]. Etkj ˸| ] @c<`!/?׾"_կ)gy׿*_|Y~_Ȓ%:t Ҙ6n\o0I<6m`6# %8uq*;p~dsӆ e?wnv-(w4S+ ˎ 3]Y*Emu]5mv+˔ǂUpQLsU,Vt}Ŷs \ {^gy/]ZҗvHy*Vbuf, قf.{ϒ΀]"/&N˂tuYP۽ul|zkOL=U5е1nl*tIDց9 5=[-@K)L񍳬wv.1z)..z}O~…N8\ܖ?#E`uX8@/aXq 9%_>x ]4͔G,;ԹQEBKJv`[\gv ]?lRת.\VapKg=jf Fj ӥ^ *urpH^M %_kD*{\{ΜHK.3/?AĒ o**9B9NeWAo\U` ( {֭/^v_e/ t/^dkͦ޽2 +c99vQ⃀L&C`"~~govߥA>~ C[Pi#knzV[K!UlF"K-ufEl@Ls .GyȃLs*~L;1{K+?]#l&&&FwKpfG- &ZwiuҲ{s}LG5|.mN>UNFD:Fiݒi$(;%^+ Ç͹Es;'xL8wM:qۜ^!DG8;%{66z{mX̮~/_ t8߻EhY=9 ֭T=`1bAg~Iӯ v]Ip O4TG]ẔBn'cԢ2cjQ3VZ֘ä=+uF-twWgl-=j!ۚOz1.JʽT6CjI{WSȤ-ԆZ|nr v9&}aݒҽOE-=k\*q" hf+6'7| v˘]&Ÿ0PF|:믵9|%OԞ|}x={&,,9Ȟ2c4Yj<3yws55k|go4g?Fƍc]:krѽ6˟, nT܂/M3Ž-LRɊ\ZY5mՂ)PUZϴ ]ûMhFmvn]l95j5S~sEKwv[ z*tI^UmV["y`wbj ̴\CeCd {Wtʢ*jgѩ,sǙ?u_lbZv (n/??KpKZ1@ĉoˏC[:0 ]|4?Vw{zJ {xaZY97@&|oŏ(9s[f ߻=ݻZ 6.o~l=л8>[J[P~i Q)+hU;ݰfLzm ~!4!~11HٲvFCBtVpD*ukȰxm..M塑C'=&)7EqOpfuabygP!2v6Ϧw^-Wk<^TȆU}eHC㵹|6ר5qYa${X\VҢ]XMPQRh)z R٘9.\@{e(@ȥ2< ӵ̾\@u]^hqmd ٘:^{ؒ?ٵnje#ʹEHL]ȧ?) &=rp;8]Z cs5ή$'_fA7fTZN=^y[ 1nWºUE^p{9IٱaƣF*+j-~6J `hv nWKNeB;.ZIgb=W-5Ug؜5P!uhcy16.^m4ps>qٲqEb,zȋG$ƦqtFG~hס]湯# q}nNo3ͩ" ~X*6TQhڊL! NAN )mrR!&t}gwhZuSm1}\P6dH6_qh*ݪkjj~utgυ"ի^U wfSda9V{L{eRyƤNaѥ/EYS*^vVF;}oW[E_5+yA*oLo8e* ѝݑ}noy-Ӳ͡ɘ!OHUڞ:L:jj)s}u;+thݥU=2֍YaǾۦ JZKi7pr -eB_ptaa' j X\AcāpLs Nlq!/˖-C[ar]oZxNw>.3$S%O||i)wXvɨ]aiAf6P+1Z2鵁RWelM(h;㹠ŔWX6fSލ~1XCC6HшEbr}DN^A^{YT>iN.0d{1/Ku v)-(2ls( nC_YƼt+n򣗢p- }20i}ř:(: pSЖgl٘h=&UKn̩]( , v,0 ,  /|tkk3Z> н喛l|3]lс~R&Mz8axS %y޼9g\3y8_ZiuJe>DX u6ӝ1óg4\1ߓ)._fn; t @dsVe^t֊׵WQ *7N볕8h2VzKw7i-.8BjKu_o1 Gƾxu!F{7͡RYɢ!fu60`wv?{ t]?U&B+Zңz WG#Ht!eZx)vCҦ[]1we- z6Wآ,8p˗yk]i{2a?ci}Y~?A% 3,puv,qÏIMH_|C{ァ|#| =1x= f`|9>D~+ZL+sf_Ə"g 9-;Rڂ/M3},U@q}n/ߤ~F|oiZ2W3ZA UVE4NvR@؄^[cQ/^jhݽO9XRڥWYͷ.g V8C-O}ϻ t_-j#^Ex&P ^(Sȭ*i ᝁ%^t]rwK^|L}s\kŊZZra7کieUSbV]@6mu (8pp]A>sᅿ2Уg|f"m3;10 zN\]@xdcN&ZY5څsw:vas[#,heW܂/M3=qÁ {\kMе.Z}nUM ; vyLA>ɂ6Y#p:K?goLFq W 6 vW2ڛ [4~ȞƵײzpi]=:5LsoGF=wfj#WM+HϹ1 ]t<,jнW^C^e727p67F̑o^-)ҒGS}gmqPc8B l25\e@SXWa?|dsqk;BR}r-*]9}f&\q&\8c[G Wڂ/M3uE׍m ЍZruNkY"`ֽ/%K漦q+Ҭ\Gv P=sC.=xa\sK7>Y4k&='4ڳܰ\tE;Das-]Fx6{‹/^+R|oxK>㻿uhg/ctk&*kA1ڵ-WV|XhFxebsC)5w&jC C 1~x fJc\5c8kr#ǰmA,KXw}.鷗U4iTcqҢgcݬvw̝Tmg8.OKmmuhvy8Ƭˣ\e-cG& ƈO]!Y4 .l}z(2F{-Oc_:nd\kw,O5{l޲^cn{FhZ۽AOF\ZwU)en]]?BhA-)._fnTlE[E |fcfKWKI W@X}.l^ygCi쫹 v*Yהsыw=6ӜۚO/9|6lZ3=_#n}pM8m N{F*/<6Ӝ\\ l'JSR lU{,7< WN6+N]FOs 4 Rվj9zѫ鳙|䳩|4\\ lͧ%Eo.&>&/Gl^5+zUӤo-U1QU47nނr/M3YAW8C49Pmr_kkVFh|s3Vtr@?*]Jk]Jۯ$ՕY e3tsrՃ.@g)=oMћ&M^/~& T}o:j[֕չ&nN)DkዾLm%4qZ~wHG=@&}]z,._f.ҍ.Y20Sk%}hWEil-_I=qcuNBbp98zZJo_%.M巩Uc^M<{\jz#u;#x i@w6 /~ UeowN~]'P8& dI<{TW^BW@Igt|4~mf{|zkK-2a]2{ftYY~Aȵ1Y>x ]4TgaOGt#0E5oOޠX)5Z@ ɐ'm&eT>zSӪSiu6?N}IpHq%cR(+I~G6W |WXs{+Zhև%V9$NCMi5峉T>°3|]v`fIN]n s'vZ-(w4S tp>̔ G[V:Ƽݢ9~1Ut״m]֘iSh7F[[C TהDr;k,J}gLoS(Ӧ*:hx^75Vvc]t_z,@]o'?+igsqݪeMoq/EЧ NZ>x ]4TgݡO]'tnp@nJk3嶨4 # }VYzr\. 6K7|6ӜWSjNU56cVKe3tsrH>%_k߾rߦQC{Tc_8+!O^iWMGe]brn΍2%^l!=6|66W}|akB;esת=cI=%n;Mݢޮ`sUv,._f3( _לr@Ә(Иno*_)|j-RW['<vׄǮl>iNl&򷿦]-}rDu$e3 4vE;-C~0`;'.l 4u/|o'{Kpٜ݁\g]sǽHw}c3(y:h52dj x&msI@7n;ނr/M3@I'+I$ 1Qi-+f6 ~V+% Ijj˥Z0F7g]fvu|aOJqcg6賙F 7.M#>ܒQk] i]z>G^Gzgsy0)vl_'WЭJl|xmteuLؗ/]lAjNY峉bKӈV{NZ'e7ʠǮ N=.s`sT. FgJm >x U>TGݝZzjM2R+ZV|4B &ׅjSW#.CqsצEiȰge6~K!z:?3h_i.G;KZ^ D]ݨ &2/ҪٸF|U)*Lf2y>l9ۢT>TqU6>gFђkiZ)!V#B/*LxNEß5_NoaO]T\G4˦ *Uts.4/h-ڌrv]|2c-{Gh9H|\\^i7drǰ$6wyV;z XJSL٠)wo.`$p]ژڄl y峩L˺hßVMh'Uȹv⺖ՓW$ ])O>wMrEwpm%,ҪngW{4F<&;4 @;fSG^z*MMTIY[f]ɑV)g=YhIC7~gWGU _2/ܖ.\C%Qt?v6hl*ыvWY 8awhУ\^T>7KZ߇/e/>T^9'@ſؾZYU T:2&R}VT!*@]Zr_~҃J,u^~(^|8^x٥lz^M/wy?[nJsTVה4%㞽lT>`E?fgsql..屹|6K\!=QCSϻT1dRSSm^|ew1GO@yϦrZb^$|j?;'峹^x屹|6cw_UJMVg!kY^)cG]>ʦ$}ߺ}}*uV^ᵹ|67Ogsqyl.=wm?OWKMvKDtӠ N8nݠ/Me3.o{<)eaJuRĿ}˵w,xk,8^VL{]VxӴrzcZ5-VLy-OU˦ͪȊCeatXY8cTnhvsF1?e37@#Ӟ^`܉1W>gsql..峹,2^M+e[WYrp Х'њ)W5!g j{gsql.d[\ ES&㤪lm:ߣu.ewt%A^m|a 2+SPS<)揕uszm..5׳j屹ⶶt[:œɲoSd՚QwyֵvZib 峩Lu6XaYn &Կ xHV-(e\TiH9UjwOut'm%yշCTK&|Dtr5&巹z-:0<6MX'/ub$5h90iiqfA^>T]Əjz2Mr[j߇./wZ6Y+U-2 AY|rvJc6P.D+哆˚ceėeٴ2oMGׄ$J.G!T8}*6賩|Z*hD7PkvM>gsql9lHed2<ՕR[HIId˗fQlj{oO{&lvb_5d٤z(Y5t^;' T\+˪<-sb teVK;+eȓ'or0 m%5ێܫqo~>Z3{,80F峹|6\6%쵚Ѻ;oh52̅坦qA^>TgݑZth ^h;@+}Lvyr7L ; H+ZbUSeՊ)C hɤe1 #dԗe>2G\L}^ȁ'Lڣ6*lA]izI].W5YY;s޻٢T>T>ZW˧ 0ߞΥg4YkF sfz9E=t+#(ߚ2ٱmTBC\Suul޼1 ,}4^rϦ2eG];W]W ry/Er@f5]./g${wA.cnog;hY5B[yGiZV^"g!j[}ʞ#HG鵵6FQcҰ^哛EjY+& ӄg3FSye/QO(W%y_)/?7yt4aX3|c4Z=PRX>Y}rԅԞg`CSv05OdFBTP_WG!G3co`k>c {cg/E'T^_;$^-xg&%.J"&zեkd"-`ܦOOT6#2Uמ nBTݪ ٴilݺY*+e˖MGKPPT:.V[!l1b}\j^/Z^)OyuЕe팠It t6Ň-}xߤ{m-oWȓw^O}J .~_hJ5% guf|ZxA>WW(8ksq5f/?p"x]*}oM҉:@7ӑvRVWZYY߿{/^sczl..gkup^mXw99 VO]+|)n;MkuҽK f{$E=t]Uz2qtZ{ulBI^(.]'.%T.--˹n T:*QUV&Io~/WKdJ?{M'K5~+3=inNZ`]ve JlpLj79]6u?nN|RRy L.ͿbvM.s.,Oekf0z.IEt]vm,-QTF-RUr+s_ߥ <2դ^|/<SG?fP zt-.^ݶq$5)k.]?,{)u}f/)w)}|wi:J=YեK.~)G* t| V{i(*Me 6RR*Gḙ7@ъ=ry yhP]N\Mtco1tsr55tRظ}c\"q׶ݓwȭ7MVUݻZp+WB¥]%l..oDw2[֢ - tuVW?%˝r K*6Ϳ[\qؚnXɣZv7;ҭfsU2 =@rpMH-G,=Qj8Lp-HZMiݒIɞKJ=>/ؔheu˄iau=9GYlQ]gy-4T5n;+bN0`nL2䪊QV/zxZE 1lGdxޢ[L]ŋʊ˼4^rϦ2QA(l5KߐU3˪cd팡 /ɪZHjARLV6,]E C3TTVՊb=nBV.|SVxEO.+fDn\5cϦvh9[f/T\u{t sf3kEYmmr_{x]7S~ͲbE+v(@Z8uxݤK%RiUo 5F˒ofTٕO|&ٛs_6%^Y~:YeUm`wmCg/rniwfZEztH57T/Si^#.]h)'T_ ]uWv3-~7s/AAgSꨠ͉]LJV7LS}EY7{u&*>.r}+ &TESYE&nnvYjeX;c,Z?]zm1 i p] ~v$9R[2y&j\)d4ͯo`Gˢ)/5'%󽴟 47KdM;}07tY!s&3ȊɚM"맍4`S4=qd@g/ t n eQkg) v&]<9ZVvW. %.ݖ*)!\'뺌ҟ9Bj(SQi”uZS6CmԚ[Rt#(P򲦿 8/iSK_ydɶ?ÌE\f\WO~\G>!'&cq  p\]]]ufr,>Z*v u@oFr֬]dٲ%v-+ nAɗ߿yScvRoiq\ Y5.B2T"3 1vm=cVhqWK'iu9*ʼlY2s>jyV ۔[8q~QtONJڛWgvWo 봻;M^;YY`R5j{M(ݓI4i }Vrj6!KփkQgit.K)]Tnq%n=M%757jm.%:]@RRAIp\`[n2(6wwN_qw޹(ʘ1䗿_sT gR,m_?u8+9 qoE.źmt|i)e#oSB].-it3⠋ͮy@qi.t=ٝK ۶ҸqpZsɧoqu-ͧ$ZoRmL榾 ro|gʷ ϐ@'ph}ڹt&L/mu-bcMsYr \^O|7g,M.2o;7|i)wYvTе#L+|v'eA[-(nN u;-gL{;ɗ&qmcgi@Yz>@n]_]k׀kŒZb}i9S=ZQ]-]6DZ 25?eޭqMZt_yewoĈal ֒ܵkuoKK?iqX\~]hvct`VP>x ]4TG݅SF7][5))n!NM%]l,ŕeeӆ͢"OzUl/i4ݝUѺiNI\|p鴁 &ۊ8n&K׿UK+.]ݟ| X 0,a0yخ?stTO>>=v^{a}dϱ|*~KzK+3$T\l'_>x ]4{2n瑯p+ntM@7!@0.7S}ZdQƝA]/M3,6K2 lkz?vL\A$FmdI+crxY;$ \ L<űLd5t`^V\n?֮ T; u)!s>={m^|i)l\t SMbܩ],Xr鶷 [=m-kioqZ믰v7Y+Tu{›N\\fw 1Y7gWÿಸeFF-}T p5Mew撲|aPStZ]?^6pi씪豴3z3.=ٝK4DLwkufw _QbעҸnQW4^MtK'NF\RO@ÍY~,9pUw}}717xgy晧EZG񱌿+2`<_L0jL2J|h<7qΙqqqc\v1GY 2P{YWg@npv-(w4St;2 ք46.ŕe6O]@osImܥAW# {wOv'Ҥ趭4nǠk%% %l 8~?-`?_jΥɣhmv;km& ma@DY<}z)a h~S*M8|h}%Yر회2d] @ZcfjV]ICoю-ݳi-;w1ʔނr/M3AwWӭ uٺ EkB@6Ngsq-9 )%@q@0Ҥ趭4n["Rڎ[t98Օ1"~@Pާz@A!uxe hcg6e k/~!YwM~ĵ_0]VZadqawdW܂/M3leΣգ8Ri6e5X4kAZL-3FA.۾{;gsI9]1Mq]t"g\{;ɗ& @m]ʮ5TUv Nujaup 8cFn2*w 1npJ8g=.,ǹK6 'K*nhgMϸ|dw/MZem# %][s:N\':0Rj;e?E` @!88:q߭n?Xwy Xe?dzu^nx,Ń0pMل]Ip O4͔_,;*覻MW&@D峷[V@7|6ig3pIY2g7=ݓI4ˁkփٞyp-Rv^Ah-X)dp<  `x+FT@G\pܱIK-88ܺnńb?g?:~˱xs8vy.~}M+ nAɗ⾸Aw׵h|jWNI%Awwf#@q-8 峹|tҹz3.=ٝK趱Ku{] xdS=i\]c)@ rk Z$뀇sq%0xAwass Š_uYxs.a;c+mA˗^pY<ItwHm\>{+nanq&͐⢜۸n4f7n.I\IЍ:n][~Dxi\]?||6 Qt-KG(D85*fYwV' %S,MC9S8dbƔaSF*& j/M#˧s'C`|9uޖjNrAKQ@wѤAfD}"8voW<DzžU_!-3SN*-}i^ ŜqknVOF*){O*E:A+)u8ZsKqpujl2St i#e⩖tsq A ?̓Jd>kЇ:Fn·d>ëg0R|@7C.rMŜqہnI5\]Nn w+2˲3UQRҭ@7(+Mf32 lZ ʮ8,G$@TtS/[ShiOAwPE;AeFK,CdbƇЍ;u"AA4 ]ryx%}趢4n1 zIQ}Nf[o*yLut]؈@Hڤ,AkL4 SН?l4VL;"JWOˁ Ⱥ%[ȭNzKS6zMt;/MrW6vmz\G٬E>UU@nqcu?3/C.tdJӠ[y9:  @w(MhR@wև:2ߴ7SF^Ldˌ|^hM&@7s@e@וoVtmE]q]y {O uW@7(l2St몵95)6rǨpi@7(+Mf3]`-7:=KPVXz]@7?@05"]t(n6G:m9mcg݂k@ۭw>%~{NgvO.3rj|kAn d]{+m=:˧]7V-q-'"nXtNta״fstm̠[tKeZr8\&% -mBtr&3QAת";]񡚗@>@whԑ^nc*x9;)#+c<@73 b @DA- {+{dNwz] ]R(tr&3Y@wUݼ].nN-]t;j8. [,na n5k [趱3n9eBtKBnɻNwfEKk.- 9$ jT>TGuf*|̸#2T7&];O g*nPW>TTt tt Ѳit q ZtiH-m̠[tYN'vme몜6讌-n۶ࡲ\6mڐ TQQmyq0[7;l?w.~Xޖ-l[V> j=IlՑEifaYL;}RX[9etAV#GlW,4|esTHZY^h:Nià  M) 6\`Y^5/+ )e4 yPRޢ)CN;YS4I,jd>7}j͔Ahٰr%Anp,(6z hߓ tKXٕ`=Jȧv Օix24_~)Љ l_UU|a<Οp.raF*]A/=TUt qt D*mX>@TG@7 ޴ jR.^6rnʌewrٕ@h5(7[*Y%@KXf~@}Vdx>K8m¨N_8adXͯ$x|$S؄ +f Ln覻@7_.݅twQ1ݴrQ:(Um9ݸjAݶpԅ!%{y=Ҳ{B Rg Ok-7O2ށڵ *he(u_qqrݝY\}9ȵ򶬒ԺݓLuTеJfV.]Ƭ5;b(lS@0qKxNfutkwGEAwݪMF@%u!-̲~{**zpX=ں,a7O[ukUxY:xO?O\jFMx\۝>UZ_{)lbgUSIQ؁Rs AI!MHEI]9c4eF]MߠZ;upt]~@%uˤQ,SUyʟ@ёR*٦Ԯ.2KbցӧL~ۋd[Z^PZx]7l\2_ZC&s, ҅_A'=TG]Z!RsK [P [4l>u-5lSk4RKzmyAwg_Hw_WȢE \εhd }? \xX-#||$StwO-u--Ltv53@)A~9ݴz&jVw2]Qӣ=&R8n2pH-R Dďi1Eo|;ȗE9oӀ1zH7϶o}MXG8t ɵ^qcr?OZe ESie큲e"o.%nۛ/QlBm,g峸wT=i3osfsZ;f[V/|G*,)Ug쟬]m\vr U?_ǵLa].T>ٜVO/ & iV7Z֑YA3 V,ESE[l3,+2&d)ewh|')i. t 0wuq fbc,=BLSXtS͸u; 5&.QIIf53KmQE%,))%b2*p|ڵD^ye{ş ~?O7К51cFɔ) zka\胯SC{iLow;]h}xe2wPY3m<^6L7_Z6[+Yb욥dZ3m:>iCe;eʨr(hvժ k(l^hy՜R~+4㢫 ϛ4^ ѭtݺe2K+{tG_tQ4wϜ\>G0SGW*ظr(@HrpJtyZ܅ b=ͬ7)i2IwRҞ/7ǵn0Y8 -/D)NZY"gC t~F1R}vNq'Nn'Z t:DK-@7au-e|.q @0K;0d[8r#iff5k{Cvr$_.|.33CL13^j4-'yT]]jluKʰ>?7T*$nm=4}z\؞|W1=LDӆ|0n"r𬣏>2;uS/7u^xOmݍ9<\`s_0m~\%~ܔYESOvQo=w!߻Gp_[/yVK<;%N:mks:לS{ O|nc%]/xa?v,T%>OtyiJJ4~Qy;==~" oa"aL{mzt;Fl:.WLKݒK:UMt@EH$dYp)2bkK-_Xe>KYIDK4- mm3g;qD1ems{=z;?I=YA)Dnj${wٶB[My|.4M+|%Y=}s7=t/݃{'n؍kw&N:mVkN῞ꡛ~׵4+Eo]{ۯꟹ+>tbY%y/-c.Go%mVkNswroܓ\ǾMvzWv/>p?w^#ߏO[_~g~=~z}HJ :)mO)=W{?sOwZu$Zƭ|wץ?q}ȍ\?C8{~sO4{NltbT%ՙNMk'֫~xvf'ѭ }n۱m\]Ǹݒ1>#?=roSjn|d8G)^zJN_u7pߺ~kw/~.ݟ~^s~k/zMtz͹Yoks:6soO?w%vRʋs+S7^\stfwߟ9ǝFwibY:<~-c.?槽&tbmN'ӹ?w?w5kݫ+J1}~sx"O}~ߝyL/%zUsρ%tbmN'v̥s?r =a'%rm/2ʰ Qe]R4̣~k8aeK]Mixoy6>>xt-hJO/ʌ3d/٧;؏v̥KR9¾25t% l>wbM+=ǎ=fg{R/f5}Uz5$֫àmJrOnmAjC/.;ʋfi .ri% (0Rr6P>Y015fڤ&clʳ}Y[mmmurz&I]1RjqSf]^.KU=;|AuM^19u ܧcw?c/=+qXD)̈ͽ:rnHDތ.CCA"*#DehU7=b׺U᧝N<5jprcDt +- }idܖ!3Jo-$.u[+u0mmPYn6zEQ?X].=>mʓ|)K) 'f]Q9/xgwUW/n.ʼyMۀ ۣ [oͷ8plj?VW9=ގޖ8_u.ݎys쎡7Qe6KN%^]D7!Jt|)K=)O=EKJOҞYr:03 m1l6φb5J^n7XFt6m^_C.Y{l eHF%Zzk;SC\6=H5"|gկ~Us>5OO6,-f<}\OC0gwpbh+B >o2:7C֦¹'vCV'f;xۍ{sIL>%JHL%^[7-}m QzYN4m\6nf]cvAX*̷2& ~=aח{[?]']wzbu0ߓz_IQ?Jר^xZvi!.C!Ç/ arCM>!KY?0n+<^{UmK5zF2Xߌ# sH{^±uGfm V>&D7c~|~vGѥ5D77)$E7,pb.<]j0ʥa6K,􇘕Mϳr-lRbuX4I˯Q!6guVmKk[iJ٨1_2Ew(f Ӌѡ4H%XGt7W^_\pA^CzLD93! j%sDt!ۣ;յe)}DwɗRޓKte&&M&iLN֋Wz>aظ #G/H!u3/-z`O'Mz^{̟ /Pֶt]|o^֣ v{ݔ2O}/ᩧ }+Jהn?j'xb'JE/nkg^黆b3};Em?6N;K]bIy%tXa@1L˙A=aE[tv.ka8lذл`'}2vLOhRkz," }mG)V[i3fK mM_bȼg}eY3τynX]6lFؾ CF/Qz|RqOC K ޒ;"̟dL/v'婗?dҽHWCJ/MOJ#@ZVҘ;6\^ǼX=AGmCKHiZI&ز|a{[ӯkb8jԨУ8I?rG-YZn[57:xŋK-~F^{3?#эVDw1=v=DW 9gV%E7n.Opm%NL%^<=z;9n8wG'|^9s港|+1ɄkJmxD@ZtM~p^j=#F w96?}lgE\ZV[`fm殿52F۷:8~+C'~iHts{h@WZJt;s<S$MRb<] ٠G@"`@뮻η ^Q)c2a %2!H<czmi^ƁmK/i.aiG򗿄i@pi26qE_^|Ű>j>g]zMtiev39Gy>׿~h̿ti{^f~^<'gὋ=VC4G:ݛ?ޏVDA_Q =yԋO]CTts榹LxOLZ)}Rz]kRh#h{[ʙS{Ǻ|ARoE|H9`˗~ז!rW_]hmBt"vXQǙ3,|,G usI0=@YD뙈##Ͷ?lpc˺a[;.^`9mc=״)kgKwM6Or2_{Y=_x]_t/nJWXwc+CF r^G=oG4 *mzsduHLZ)}Rzn)_`EHK7YEy5LL //#?O _.(3}½@o+|'tɇ>C mR~=جo<.N?M8QIC}Ak b6 ;_HtDwh$&>)O=E3gNdy^D#hc p%K RȺ#J+cb1wͥ I1OC6p8KGs R"T"y$[Lט'LC0٥3Cz,r?*=\rGo0n ?DoQ2: gv.E59gHa{L?.)%"7l "o" I13S 3m*)F]H,eRXG. Y{Mxmn\Z)L,^3l&)ҽ<@JJF_I\o|wg}v7OlM_~Ox9B;U?$NHt#r"Z]D8>;y,/+G=˶◖R^6i!l$bvg4u[PжO&lCG~fk5ȸI2Q/۠^0 J3}nFM_.D=B4/ЙW*XNtL'"ooKKeN93Q'$]8xbwow. y E-^Đug~24)4"H!C^ DĆ2mP5uQKv)|1emd vk7b0&n.,oTe;DY>>>_+˰{twk^{DW!B!ѭe2rĤ#],\}:zSYd纟SO=m{G;67q ޞv)npˍ'߇e=mAۯA> N? 1:~Xӟ$\Rvt4rO<瞻w__uSp5}n B>:hӔ2;{晧w鮼~_+%~ܔ=ÞDW(B!ns{>O DL^~slګC*=3fLs_SO=_o喿.F~iKuweG;_ozѡWi^+IW]uEM/|s)Ԍv+C//eQFi?=ӈ2do5i࢝,qSB!h $!,{fO)7o;iDY~zGw믿6\4.C)$#CA y1ONfܤulUr"C=8<{ \bCӧWnn ҋC{Mz\y/1#.Ʋ_Q?Lx )GYdˋ8SK_bxLh/Ó{`,ER"B!-D9DKuD^WzeyHa,E=VNg{aE$B$OK+?[S]x22Bӏ?m7vrY)DS?Ev饥חzhӳ>>ð'p.='\[=wp22mӞj[rg$>.c&;JtB!ĐEk"H%ҳjw!em32Db:,~q.?6djۦM.r̐m:k+.iS6NoqkďҰl?JtB!ĐE[e=$e<`.>%J6dDOHJů' !bt[ QDz{Y {'3{ːy\{7lYXJ%_+%O#B!Pa\dW_D .'UiL$z)cR?J.eYi}J_+%O#B!P֮O$! HtwnS^>S8R{LD_+%O#B!Pa5]+ܚ5DW"ѭ"r˸ I,qb9嵞]ڽ@VJlG+BK\}}Ht#bVYCncyG6^URb<]!B Ƃ&H#ѭèڴH02i]ƌ2]Z.)VKlM+BB"""Ht'"Le2&,Gӿ $1kIy$B!Jt :#D nFEUbdy$B!%6]E&vLG+B!ZDW  !B@+UBbdy$B!%Jt1YB!h $]e($vLG+B!ZDW  !B@+UBbdy$B!%Jt1Y[] tu0BQE|JtfO,DWpt-wtBQ5$]e($vLG+t/j̚5|IG!DՐJt1YV套cQ!]2;&#1z .>]WɄB1P$]e($vLG+b BԞ.$7.B!@Jt1YQ$Q5Ǝ^]B*!ѕ*C!c<]uY.ܯ+D3իAB*!ѭKnŊenٲ4/^槓y NW_˗grQ~Web}YLncmMې8CS?Sڜk<^x9__˨\ܗ+VK)M=-'͋~Qk?X?BQ-!͋E ކ]b[7>:NALRD2lo iieHYDq12L[N=Vχ, iڱzP?uS0R>ӥ㔣N[rm<.%{JtE']!D:kbIen;C]nm.˸l͟ŪIDAT?sQL"!Y0{z5_+%~ܔ}(eHtE= ! $]ddDWx1SRN{ݿuӟ: W^yyخI `"'ma2,30x-cZ,GNmQF /aB]j7P+ HtE= ! $]2DUVKO:餲fݧ>ɢy]z>]x3g:uk=zoMDgv#F s;gߍ7}r06\}a? {'?pYĉݢE󶂘mz sσ"Ҭ7i^]|m&ryO~a>R"Q$HtB .!;EҳLBb0H)~[wI|[ ‹~_v[lYp~.?uם m fk*.^m6YBf/<[oC=t^Z!zpѣ/KaDWvZ>OuG`KȲ>}azp7v7xp)2oB]\:<=H3e"*9f̨Mzhڰ Ed.90~9^;/ӛKyDuè`z Lx=qk/=P+-_ƅ5 jyB?T$U]DGtqwNcdKiJ_LZ)4/]QDWBAHt p%4dz1{nzcz @qI4"ؚ"ӓS)ȌSmD|yHԏ~w\zuUF4c;QcM'p\x?{Ƕy"<)^^W/䛇bCz~F-f|{s9ILZ)KO]QO$B!"ѭ"]K*O(~Ė's>z{y1r("VrYntG1ǖ!?r0M6hzegZ/\Jӌlml3N IY!=8azOiZܻ˶)O2v/qI6㔧m1eq:h3ueh#rj|Y:buC[d䯕R|o]aHtE= !D xq/'T"&&c\Ҙ8243 4c6nz6m[- 6:LSކ}vMFMLMB]&V&]^Kg]kqkCغqkďҰlJt!D+bP**n\>V;e#BԘɱq!DWiĎHtEz!B1DWiĎHtEz!B1DWiĎHtEz!B1DWiĎHtEz!B1DWiĎHtEz!B1DWiĎHtE֭JD+JDWiĎHtE B1(DWiĎHtE=BԖpʱ!Ht%J'vLG+b$DWBAHt%J'vLG+b$DWBAHt%J'vLG+b$DWBAHt%J'vLG+b$DWBAHt%J'vLG+b$DWBj#ѕ*C!c<]C+DW!DJt1Y!uG+ эmid'/VOL%G+bەLQK1=B!AhYD79[t;vl2l%w3wsU!7k$ |)K=)DWĐ芺"B1.G7%׋%覄6;|{?LJ{ -ͰĖ ݆ML%G+bKtEǜDW!D*]K][vc/y![%>&AfM饷(~YHE۰ɗRޓHtE qᘓ !>]nݮ &.B-I]||߫Mq:N~jD۰ɗRޓHtE +]!AP)GRs f>Ls߮ [$柾-MǶʼn@$ |)K=)DW芺9B*>T9;,( R;O}NX3byDa/v']Q71'BQeGKBs}uۻ ]v.!q|p{&Ng7h;-OTfEye>/}e^x_O/w+Ve^.} #˖1+/:|AnѢ}a/^9d;aCt Iiviȹo)<ֆw6wwYP?h/^}ezʰ[g?iuYu_jEkeIJKmʏXe(ݬN #%BԖ-:!WmkLً.;ˬOf2e>i?$Ӗ Z&%HLL+0dɁAdpA|"/aK/*NnذwGMY5j m[@/\Sk#RkC^)χ˙1c Bi[i64]G+DW!DInvqG೵ˌf3zGdhpq{j*8Ƀ$|zoY ~zu]eyZFbk=ܙg:;5\D>= IdqKyq,~{-i6If ӌS?Q8._J?nJc"CF+DW!D*&OMp U>ܣO ,}~9Ӆx1&0u]D9@V#Ҁ@yw߽Z15Id=ӣKo/R!) 2/w]6k?э=s]5;=\tK/w͛֡n'xӟzhH_ua=w-X0M8>\vM/v78]Qo$B!LJts\c3Bm6ʎFl}B"}*Kg'cUS75A0I@=y%̣CC0Fe%\[.%,\ԧ>=뮻Po>O~ҿ6w]wGy(_wo}nM7os{{Gvo>~XwM7N>DvۄKI?ӡkaqRjqS#F+ʔn{V.;|sQp$ ҙ-Mrs(S]tK.E H.·fͪ0͐OBo'"Rb",O.e=v =qӝsΏr/O<_C[a;gXkwUѽ[v//\}嗆RQ'KM詓nmďHtE7]!U&|$?/T]ԋm'?+EfFҝQMDA #ҋ=3kvg^w䑇pi2"#]vIX~Ǻwmajtx=zugϞ>OiRe"/m|M4mb&Mp}ﻃRe^ѣ{%ˢMd[^zt!41n$HtBTRtݣ;ltGlJWܞdkʸx׆fy2=ܛ=A~E\BУ8_n=ww#G"2ڃ.|7bİ0enDu Y/v7}r$x L !t]y.7Nmvs\vĖBwّ;Sz?-V?,9$;grH.̛ x^t_-/\~$p/IaM/~0?aYe]ns, (!3-ܣ6[ϲ ۥ\l^zq(K񍯹 6X$zb W&OXhǸqc¥ܻeܭ#嵱(gRm˗RďҤ0ֺU}#/BԐGQk8t 1tHά^oÿݯvv^fyҲ~8r;r;7eMW#&GOMtR]dQ #}-Ҋ"CtE,7lzi{=u9DXX!ѳkMS To {zof,+. B>{}晧B]\OHRRjc&('/᭗ڢ3']!. 㧅f~O ۛ Az{JL^+He?=nѝE*.EcOgO~|{X}/O9Fӟ¥iewtߟLycRM?hy͚0a\ G?D6s.YBcƌrnC ]}az3zMwcǎv;찝[viCwc.L,]G+8sO!BbAt׬g׵{s7O [eHI䦓u͈&Hg2h<"~zBy@=H#bK/0SiS⑖bJp /`> e!ˬ͔avcu23)͌^ݘ|)K) DW#Cg!UDu]YD8K}Sy 'zjoT 7x}g0R!uN EG: =tS7ee}12,ӻlBL32g37._J?fJ1"HtEG!DUh6ѵn" GMjZO( H =-rS(C}϶Yq1f YfvO[hbjrkZstghm`K]Mix$3?B!>B|JtF]>ƑqD^Mg. EYFL>:&ӶBʺʹ"24Q]vY.KfY3QɎɗR3HtEn BԒG! !Lܣ}]0/% &H!RLADO [f24Bi{ ۤNM`:lM̸֓ѶM=iyelɵe>&N\%~ܔ&KtE7]Q?gB3|2M&ޣ|)K=)DWFW@pyGB Mt=Ƥ6n/v'{/ꁎ;Qot 1DO٧hLjc81Rj{RW:!XgMtؒJ'7 nXˌhLjc81Rj{R.ޯ C!EB4mpy]fʁGcRDƉɗRޓHtEDryDWB3&8;~/>>P1E[K]bIy$"N!DUh4MFn4crɋ\\n1E[K]bIy$"NWo:!0(6e^v..7fW$\e'}4&Htk|)K=)DWɋ.)V#b4ZR*#HnǸ]v#]v.3~_ј"ѭ01yR'<]!DryGBT*÷rۆ$w$[XزKZq{^zG\fAr3^~%<)͓{ZQѹG!Ā+u2"I${!Zb4Obiy$BFsf ?q%B &ԵsI=^rGr/Dw'y{O#B4W/#y$B!֙F]e=v۩ӕyTfn^pw//IiHt !Dnx/\$Ы.WevM̜Dw'y{O#B4PaTB!֙FݔɝNYzr3ܽCnmsCD;hɓ< ! t9} BQ1ҧ-%ГzN^2wuّ;z|y%&OJ$G+hD'W!L=D7-yaJd7/tPΆe^/ .}%W_ӡ|(/+C93/y,啗 2nۤ̊B931&=qyR'cOcDw{FMڢTB Yj.̰~s2;q?1Ы˃"aex_?/Ɩ5DJ L ah2H7aHXm֭\^1fG"~|>.;m84y=~>ɬf}__zOÊn"t*='CH'CXXΐԅ"L%,~ a۵ظ&<)͓qYk]!D#\CMm~B Ij,A\Z/3I~+w^.3ҋ/<|*ys䲬D Cq}{?Px"dɁwA0\奬 +%ڥψ~߾6ޞ dܖ[n~˟/~ܗ-[ۤ,\ mIĻTJ1Dw/yèCZwryTnQ\FQ/WTA7"#A=`w=|A=Tx4j|_wn{C=N~rw]w~M6]|ag=C~#;昣 7&OJX-ݡV43:ԇ5_1ԨN]:f:2v쮮cϨ]\vI&"M%{{r"22m6zVZo70R6gy[FeD:zr(uLr&̳mG}lrg=zeRiB9iM=RqS*K1So]!B1d֭t^svn7ngD舅~:nt~kSO=. KܙgYaRty1InDwt'?Q(3vhw嗆ܯwm7i>{Wo.{2莎\h_h 4">z wFp?hu#F sf>}]8c? &^9&oJS|B! XtwtّI^zes)gSG.W CItVDSO"4dgvgqw߽SaLmO,.Duo6n.6]{aviAE.{SX'x,eєD[{:;CĘD˧7lO}2ԋS' Ϲn]qea=ː[t\ޔ)kS]!B1dFl5HiKB2=y͎rR˔rNK/8"o~SNr7|S @w'ѥyfYzp/K5\~mS7Kʏ}ARbKA@-,"= _{[_wC/1eXzm7)>fz Z+B!<_~yԔ W"y]$w.ң˓y 2K^zWe#CzP$ItΝXzYv=\RèJZ BxZ9y drYi7nFa۔fDvX^dLs4u^ߘ1B2z,l6Q˛3=/B!C^H&=W^yyזoPI-.\LUDg{ܓq<䓏u7ɓ'ǻmt AP_b>ʴo͛t;Cx`bJ;emzg^7cƴЛS6"{g`mDb7)?&ca_KtB!ĐZn[nkkktl2#_/#v#wّ;0/^B'g}O(~'7L9J.Q)M"z;8"{l˙M)""}ԁ "\* 14Z(KO2!Vb;l{T)CYP}`CS,V~ZyL۲|f;\Vu(vYNɛďҰ%B!bӗ߼ЫrcN۵OYH}]fn-Nn+.Bg4Z%ːWND̄z194ԁTRRz)geYF=,gX e>Cۆ>^ QC=,mIouRYei}f(B!CDwؖ^n휶&2(H|ZItY!&&"ʲd!2hF3|zrÄ!m֧ Кdr˄+(6(rg34 -ic}^ lec)OS=a(B!C>{t}ܑ^rvž'7H}J1jI%AҒZ2:&&lq%4Gl7Y>+o2յ:3:m>孍.k8RK.)G;oz~1˛ďҤB!%r(/J.Wˌ3<]97ja*iɍI뺤IDzYMd!rWkU6Xrg=BHAPQI2LRz|^ap-8=vpo-eXF[麭mL[{#eX%)[*nJe޷}P+B!,}.O[.Hgn>c*=ɥwvKDtYaK)2HXƐygR4% aC[dPYQu1muXmt XN(ϼ)O[]!B1CtSxᜰN;q/k͍ː].] EPŵ4"1._FZ9D V ZVcQLSl!e}g̷R곲Ð2iֵg#:Ltӱ^_/ҦT[=e(B!CDw̎nؤ=]ǔ}1N}B9|0)`/#}r)sV&ݸ|(J;&#B!M _Q}ֺnɼ"nڵulEuK/ ]fI'8懅RIOEHt%1YB!hJ I.ˌe{ˌC2,-KL>V !BdDwMDtgKtOnvBK(_0.U:&vLG+B!u]JuuX/|F2| M$WJL>V !Bd{r\ nnv$+11PZ%vLG+B!uk͍0 n2ö,n]n|oDr%1PZ%vLG+B!u5n[G3w\}.ꉎ?Qs8|$];&#V^Uٮ;YDžbZs[ItKD7$eόT&˗'e.}ŭZ½A(V\^y奐e^eL6(K/+P晔P?u2q,ccu^gX6z oC|B9^ͷٶ)kc~ݽ'&oJۧI]!;'_ZvM?L%U]CHZ&MǴC#&H"LY4bk4ApO](/|Reӡ-什]!':Oz!M?L%U]ĎAd.540ɇ$8RCN8.SzJYw=wwo}a{ =֛˲{˿6r:i lumd9c=a-Mb?\sϸYs\rQlqeOMb6l&0PֶoNY)DYI^/Tܔۧ 1p$<-DW40VAtӢu{ݢE;WwWᇺ@ Yd<`>}m^L BiI&4fēv}.isw߿ tn ːi> ^{ F6Fb" MH}۽o 6N;PY6]yapoznܸ1nΜY}C='ss:u>}v\.D yG]wb3O|,C eN9$7y-zٶpI5O_w6)OlG+Duz]TT[Eb38-~Rezq]z_XlWD}[='w_|aO.S,˲׿ƶ*8um@,gK;:rꫯ, zw/w֧m!b$.;1yS>-DW#DiQ/$D =.{ ܚ3NY򨣎(,;l>Oy-DW DiQ/$D `(DA5%&̣Ǘa_M\* ("䓏zNY=.2~uׄ\..=W\z_i"-M6Rk9sDr&_LŞ^Z7p,Ht8]QOtB+ Jt zrHdLzk_zA鵇P1==Asi/rB;c\b] =SL O]>$zwikL~^.}~mæh3ѓ˶'2 ܳSg̘Fdӟz~;6xÂt[~˛iy$BT':Oz!M?L%U]z8Dz1R]EjY erIǿio."O~ c |2MYo=3"~ҽ= =ܣ3N^˙g~zZ1{ėuK.'5a]k {}1yS>-DW DiQ/$D ЭY ԁ!y&~,g>HeK #\BL=ں&.L[y%i!v,Q?2߄qG .֣-öOk;iiS*OlʎDWE芦*n\>Vk*_kL@+Ӣʏ pjYV5kWn_*J?;&#Q:]zDWE#  FDWR(|WɿzDWE#  Fb+]E&vLG+bVDWE#  FDWR(|(+kC ':OF@+N|Jt1Y>HtE=yZ4 GB%>]e$vLG+bw2$<-h885Ht%ʐJ,DW(]}o]QOtDW4}XtErbdy$"F]eEC+Ӣ芆SDW ĎHtE nHtE=yZ4]ppjJt!1Y!ѭ':OF@+.וݵkDW ĎHtE nHtE=yZ4]xHt*C)c<]C[9]QOtDW4]DW ĎHtE nHtE=yZ4]xtnWME4sbdy$"Dr$<-h<$Ht1Y!ѭ':OF@+!{r:%k6'-iٕ* .8/J0 T둼|azDWE# Gè!)-RAr)( o֤_F(UDWIqn%HtE=yZ4]xDDw*jmkXಣL$w>[͍^ah.]Joi-[zaYzL\DWIqn%HtE=yZ4]ppjAt׬]|{͌6neh++^z!W_}9,6ԍhJiHtEVDWE#  F I-/\]]jE22:+qR#]&y% DiHtEG[eezs_yc8e3χX͕@)HJzh$#ѭқrne2eHX͕@)HJzh$#ѭr_.'3nK^Ė^Y*DWIqn%HtE=yZ4]ppjK"[ .]tSaזi5-^z;ԓ29LXY9ryc@)H#ѭ':OF@+N> EYDW^;Ѓ"v2K-+Ar^ƙgeHsQel ~t>{G>nGy=a>jfͪK,MPf9ۢ $3=?rGL)϶b4O$"Dr$<-h885Ht+]=dzG4",c$aGIebe&ҥK]wݵ=:)o8RnLDTYF=6Yѽ Cy~umx':1yR']F[9]QOtDW4}$."ZcK/-" MG)PڥŴ$jIX2_}<ʲ3]rEnspyϻܬYLmg?;'l܆۳nSdFmvۭo7 oLDWVDWE#  F:<bCJCD$qs)3beLǹ'1##Y/$-'}} ˺GMNzKwEK)3l+_ }mswCn-ʎ7Ɲqi'xp1byLDWVDWE#  F:\lZ'ilBPܗuM_L:$}H&eGg>KO;}'̣W1 ⊸0ui!fM7ܰa[^>1d,ӟ׿U7~BٮADWVDWE#  F/mdf4i3ٽ|s }H& DvCdq!G1<i XDRfs3e] gڀ]w5˗'N_k[%رYg l15N\hc4O$"M翰]QOtDW4}$U]Dݥ)#,CdYƥ"CcrRQ%,c].fO1Lz|=أ˨Zz{ o=S^]zte~; d-Mo܄ B~× 4;.ѭ':OF@+N>.Iz6!=ȫ-{r\^.!ƈR!eI"2d>`k=:Lȹ+<3q!RH=n-!g̙3 ~_$qnȁɓ<4;.ѭ':OF@+N>nOD֞@ңK?42~Kז#2)eu0D,u?O=- OQ/_{_}gYs~}o[MGm0u!kD#iw\[ ]QOtDW4}$]dIDJT륵ˌB"CHD̙zPg}dzyKXF} ztty!zg_~ ^ݫ"{&O_[I"LeL-O\] wSL hK4G$"MKt+A+Ӣ芆SDw`"}v1N";2zsfu*<^PN~裏 #"< {xN8Νwޟ 2pR#L##uhs0ӌ{ 㴁IiHtE)YAvEHtE=yZ4]ppjVedaD\IOSuLx)ФɦIt](9"Ht+C+Ӣ芆SDW;JiHtE)ʐzh$#ѕ0qR#]QD2$<-h885Ht%L\DW"ѭ ':OF@+N>mܲ/y~vά4c ~F!?/P0EHtE=yZ4]ppj"HeݲK}׃(JzMdo!_p/PDR$<-h885HtfEեח=`oxAxe?4K(02<‡}PS+#ѭ':_F@+N>ݶ>}fz]^5e˖DAQ1i /2VDWE#  F..]rYO =o,!rK_ =.b(͚%6._ՊHt+E+DW4 n^t/]E]`5f7צMtWnHtE=F@+n^tfL lnZݥ?Gwk\ʜ\(͚e̯R^tEVF[)]QOtDW4}Z^t}|&ǟx={q?{{}z!w*Jw]҂!|8!E=1q(]F+UZ.]#]~ߊUуDC>#ѕ*-·E {HtECiG+UZ0]#m[&EHtE=ѱ'ǞDW4$}Xt7)›\ RBdf>ސ*X#B!-AޕnmˮytzˎeFnDnE>M`w-Xߣ܂Z*IL>kX#B!-J۵vEAt;Fl2ötm6u=ّ9݋p|ۻfHt%&LM !B ݣ:Y[Fn峍yner0>aw:F\H鲊6ne|JE lٲ4(JwJų։<]!Bm:F/.nw$\Rz.gNߏ[= {t'X.U1YTB!h WZ.]$^Z|yQHf]]fn>{tgܞ%{֖ݠ;/Ą2̔)*%&LM !B vwٱ;y\2N+$;iߐ]';rPHnڒ^L9(mm]iߴ$t'E8d|dBzxY#1ebm*DW!Br.3|}7|.w'㳟k($e67@>O?UM[c ןulVʹo!]e`g-kSy$B!%֭*v;f'e2vO2~\f^uIdQ|o/[y5^ލtxm_?\zTk+|^en4b2/eW_E_R+/2Q䓏2gRFLѣG?:iGWj υrgCʰmcz͚UAY0.$ᆱ'>mk`] nJ˨M&mY[C?t1ڵkkf6Yegmey\>kqY^DW1TXjU~lY67oqYteaE {T!E|;1τ YD)CAFJ3gV~e=ݽ]l#;#C:;;۽؜P?a#u1Nyznކ2iMy^'AtFº&fJg=^?u0Mr^e)<ֳ}zaa[:)OV!l:X'dmcrm1g-S|,kb(B '.ۦzQil姌=Wt!IӁ.vK&b&e&WV,͛oC*+D*7lX{gBrw߽C='w~x C.= hOk6^mf(B V+LŠ+c !h\EtIC"ӈ"c4r&3M2Rc=[yr%B򫯾2p2eȹSN9]w5nd;ꨣݝwrK|ƿ&z;$a}e]?ays晧puawn^Zʞ|nmrv{٧ݯ~ eȷׂ#>u5 3>áSL uvD1~1eGp6q+/6<.LSb(B j}2M B}g뛆]MM7=E"ǑD.]!{9^[EH$"u]wl=SK)Z纟a.s4eaTȲ= =Lӳ1_}ݽKzBf#6va;6oq0ҋC{;o3;ĝ}e]oiOB.pZkgZmP^ڍvA|)Cl^˶_;ȮG(ǶYtP+J< ._B}gƿt9|9;~nfB2k!,&6D01.FrcTme_M/'Bѣ? oC%p/"jm:_dҖS_ L/4u< )3z,3AY74̼VL9^+z02ey&G>aEbyH6Yu~#2NO"Zf]]6('\!h<ص^moՎuv.;j̨mn?`RĦ Қ_|n$1eٸѻ!H+ܶnEl>r0qiAԘ]D@sSH/ro*Q"-rԋk#~~d;#71oKY}+6m"[oeis2= :YEd2gzi EMtcik R?#ƴk,g-S~ YtS!DH#k}ɴBީ薊lah=_6?̄}]f^r]nQ+ht.UH]w9<{ey"1=HOUH3s-I^x~7Dڊ(&=H/S1B^VbI~2YiutқCvs\zTy2eMo:0+ڋ bbE9!i)ԃڽ֣K]rEo0o+lSw;nĽobڐ]{Yď𺆒 !DKuɠB4n--3ɝLZ7;`1pױޑ}Ѯ}1+&247T֩$ԉ|O/r7 "]<r_~>X QG.H%D>NRœ/myyeYK Ei,WgĔ:DiӦKbduyB3},-sWxu?(3B\fk"zb`-~we +Myg-?nJ3TDJz@O!DQ[qPG^r'&=i˔s:ܒܬ75"dғu?eĄzLe>mq#j2geXN2D Y$SLy32cr,6i0ʙ ˦ ˙GQk(G;nuJ^-YN̳60G=z,eYď^.L!05M!DQ/ѵ{tS'ԃ\#\vQ.;X]cE BLLEԛ7=h2gܰa[&a>C+r_.hCi#֣]&kqS^;a3nKzUB+E}.]&<ʇaT>S8f&(}\/& -"&iՁ#[0fCY7cd¸)Q&m(C<۱6Q<.G֡nY=9e:.mrk3m=̳gӔV/֖|24A_2upO !DcRSѥזr\f^r˓ulG/]6J' %Ĩ|~ѢndD {RgRƺHȩcu.vǺHie%V.azmCY+v,YYeI/}L=yFs6(xL[<Ӕcӆvywz~㥧fwCAt֤qM&E-E2Ћ%w"Ƀs6 '|Oэ+J'&LM !BJE;rk?]^tr[\/ARłk^\zp[Inǹ)uTG'<*].c>I4jbYTB!T"1;$D7߻;KG72v]<}k_0E d6U{kOXNq]ǂ$J&&LM !BJec]I ovlKo҃c2M?M9zx-Lgg%۾cCҰg-kSy$B!bRѥˣv*J m\1m]?N\f.;Dr) ˕m:-I??5.* |26G+B!*ݒk"~<npLKC.KyYM%-{q%8>=6<68 I.;Ҩg-kSy$B!b.=}=xpyzKkؔI.[${tfc3]n~͎* |26G+B!*n=} qxpn3@=XzfD71I']pmxjxYuDWi䳖<]!B1TDts܎!h<5qu8$7/VcBome~BOr Nqys m`эɇ*c<]!BL /εr#sHޑ~|䶉A^psStz%udGb.a^tMvš8/wr7.i}^pDWQ !B!0{#rEw6^te{ɝg}^n'[t+w N{Jқ+U$vLG+BQ=V^5!YU e%w.3%T97=yTLO!˙D;Y/'~B(rezy%ҟĎHtB!dQɋ fLe2ɦ$'+Gwt4e] ]EObdy$B!GߟUaTr;qwM.; ؆ʧ_;'=]ƻ/c))z)+U~%vLG+BQ=trn]\fǝAKK!G$Ktg#t"^pYw( sYLwBz%ҏĎHtB!DztGozq3SNAtr4zv-J?DtonnΉr'K.ؗ =]EGbdy$B!A= h~1fs>i?vb/.Jdѝ }.a^wrs{r"sZ$ׯ?HzU~&vLG+B!ZzrUx Ne'ڧxe7ߣ$7rrz{vKdprdD[pk \l==G(H,DW!BtWM$\v>OV>|OnSF(H,DW!BýaJr}]/3yqAl܎ e ܦ#U~$vLG+B!Z|DwsN r~J{s9|=eb[#c<]!B Xtg#> k]pr)CO.a8*Ht !BV`PDwR'wSfB~.mm:ݒ+U;&#B!@UDwO]N"Or n-ݛ;G(UJ,DW!BG7p t ݿ?K-Ҋ3_Xj(AވJBqb(͑7Ep([B!hDԵn4Wݎ^p2Ã]C\C; uEF$ NbZI$RHtB!DQMEr^r{ \p_.Cэk%AQB$B!٨"E6%er ?]9*D(UDW!B4!]/˔C::wv,8);ЩE(UDW!B4]._Fr ˥H.o=㻟~OT\+DWQB!h6KtѝeO{X(B!h&!Ez!s .#yZ!ʑJtE+)HFa D"7:O !D9]HtEk%/\X BQDW(]Q ?x D`.OyZ!ʑJtE+m B JDWQ$ջ.E?֮cy}B#ѕ*DWQ$|QC8/$|-YF7DWQ$a\Z8v/tBrMt5Ee%RHtE'yZ!ʑJtE+z"ѭDWQ$'yZ!ʑJtE+z"ѭDWQ$'yZ!ʑJtE+z"ѭDWQ$'yZ!ʑJtE+H@o [vMX}B̢K$RHtE:;nyZ!ʑJtE+Hq#57*DWiHtE:; :O !D9]HtE;.u$wB#ѕ*DW]QGq'/:O !D9]HtE;.u$wB#ѕ*DW]QGq'/:O !D9]HtE]yH"DYn8C>yZ!Iy"ѕ*-H#E[):O !D9]HtE]Q_$B>AVϓnDWb$"DWn<-Ht%"EHtE}VBQDW(]QDWn<-Ht%"EHtE}VBQDW(]QDWn<-Ht%"E$x^r:+/_<-Ht%"E$DWne<-Ht%"E$DWne<-Ht%"E$DWne<-Ht%"E$DWne<-Ht%"E$DWԑk±OyZ!ʑJtE+y!~Q$B#ѕ*DW!uG[:O !D9]HtEk ]!j =:o]tK#U*D+J芺)GtBJtDW"uSD<-}#ѕ*-(E+nyZ!F+UZ0]QDW N9>BDW`$r|$Gi!DWiHtE)]Q78HtB7]҂R$npo$]#ńXQF do$]#HtEVB7]҂b$~Ht+Gi!DWiHtE1]Q?$BDW`$yZ!F+UZ0]QDWn<-}#ѕ*-(F+DrtBJtDW#C[9:O !DHt%J F+$*n8E !Dk)_ne]҂4ZDW_EVDJtHtEkA5# UJtHtEm_z#B!̈́DW(}F+B! DWQDW!B4C^t[XzDp}:tl2I2sܫ^q-{-}u[ƫ^һ׾aIf :AK=Dx&=ȮDWiHt/5k&B 墻LeL] ArsXwoz$SH7\OJvzx]KݼeWR$B$W=B!zOKЋ r{p>^pgzEdgsޔd}?8O=| Җl$öd;,nKoݐC2~ח$U|$B4^!bp(Ix].Oy}b;hvٹ^P}rr NO XpZHnӾ齦c3ҖE3bd#tgB6,M\&;WL$B.[^:8׾/'Hm::?RQ4Y̨\<;H!&Ɍ;b,Cdw],C/K{*-GkB!УA 3q%ˉfgs\Bnv^Izv;}sEiˌv"i2/y-˖Jt!˖&B ND7}.ǧrnx^ѝޣk*J=-D'} DWiHt/oM!<§lWaT]x9!~B(\/3 קcΛzMczmXn=Hݯ}2ikܣƋ5/o,_ꖾ񒗂eYPfDWzB1xo֣;vSyLϵOᧅpvnv֑!&1MS)N%RHt's?e9o*J4q-DW!B-}ǶLt\";tЋnMS"/EiHtB!D+0[ܴBϮDWQB!h#^jKӛ%]E@$B!&bRK%K%2HtB!D+0[zn-ؾƒ撓%2HtB!D+Ps-=95S|yDwމ}]EH$B!"6n\t $]!B ]݉[̌\fbL̋E[YGT[67&;)'.9rŵo $]!B %I.ۓ%7/InE >Ar78õok ›n:wvam+XʽS^x_q˼We'sbRDW!Bq=|2-̣Lt%_-Lulxf^xׯ]Kۖ mav𲻾{7^^{KAAzBѸZ7HJωIm,]!B O ^pz͋nron^nS٠uӕyTǂ\F^t78eR Yzavrm-|c6u+Vu[˽^lN55RbmVzNLjc !BV_yUAn{9'Klr;l3vnp-89YVMt[H?ܵr[U5/[okRY4pbHY9}DW!BvkHfE[rSAt&ۓGtFH.=Ar}r$7[5͍յul27s÷t#WxݭX[p soY!+7m*래"B!@\tKo.^Rm{R!=!XpIO.ATy\- [ayʵeg~'+n5եz믭h,}uYj&tbmVzIDjc !BVߢ;7wE׏=6~˭wjv̩F- kG~j(9״e\iuv9fncӝ];6^i+%O)zqιI/ k2N[nkkCFa}zt}#fzB9oOg ˘g4nh9;g+{\vBچq bF{bd3aac?/)aΌ`oӬúO[=mVQ$On?+Fd m2c6dGnFm$;jSˎen۰ywFoh^uNfVIFo$Nse#6zƳc7.$7:T?/8동tu.7;x?>ΗecC}?GmYQ~5N4:!o$=NgBr#Ne'2Sri{;`C]v6['-C ,$˒&I6<|j)}3\ L$w)ݗ5R5m,# wwq >U_oܸ? A4 *5L3I#H)}Jt22|q?hFtVF^NnFspK:eGnq1me˴a,t/$=/C+W ym_ל_$W3cnh^_z|چ^}.,0Ŵ|/хleru{OtL#BBb*4.G_eu_CXf1ы幑aD};x.8岆ɍ߮qnafO\貓vvɻ$/鰬Zi똼SK}(Ɍ]C2cx ~G֩$FNƷ13 ֔ݽtQT6&L8?$$IGI'&ZX 4ɞ!SNf|//}*zq=* yex\n %9/niRK- ?<,IR/I\n?*@)I pu'ٝX+}Jd;f.~?zslmGldAhjC9Asv br#{Olf&J{R-NM-,Oki$uSLb;eLB[R;H.= $wMُ;u{i!E*n/>LpQe{cГfᒨ&IlRb$mK'=!Khb=.s}J)_ ÖJe ^sR3IK`$͊¾L>3n !A^ iIz#+,BOd/PKxvǩP}!͔V:}T5P1+N]r^rg,2i^9~:m =NGt84>2e$7x=4\uDH]ܘIn&n:},|Dw ImI_fKltIiac \VՌ%^Ԑ?J%&7ʟOcPLT?7;fNALl$\L]K`QBĒVB;)۶k Ҟ ab4/2.eM'Y&Bd='Vg#%tb뤒CcH72Vf5uR)z&pt BnT9XtPt ]/$7rwrsD& AtcOJpS[v_]٠|O..KNݏT_tԥz#6T/I={D۬4L6˱`"Y.1R#y 7ZbǞҔInL)1zd{$'3ηk.7~%a%}$ZV/ld JATRnAJ='^g}dmI:^ؒ*Y7[6߿69$|>ے/ cR6{DֱnRl >9֋0a|<8yr86Ct 񲕞#{A$"zPM2ma8/穤%'.Zl]k޹QaXٱ$D98GK @ \HDk]﮽۳;S3{ F|gm(fbQA0T$MŲ+'!13"1Bd dH.KnJ.M4'wȱ- =ۚ~qؾJ2wI7m7יq˽~h< [FHnsDv|À?`ucVJm\V2Y`,š{jE{RtA/ݑeL j538cHt=Yr{4E|1m CfVf!Yr]cPtWَ1cr[`+sMaО}6+kggKPQF ׀F~*ruMt`װ: D{Lz.%w <&5-"pcm,0&D MnV͆'/Uр8DU;`raǬJ 0Atح;ɡ D.Ÿ%՝9x# WҲfu{rElumOi#,8r=B\rgVQIENDB`onedrive-2.5.10/docs/images/linux_view_shared_file_link.png000066400000000000000000003044241513710110600240520ustar00rootroot00000000000000PNG  IHDRq sRGBgAMA a pHYsodIDATx^`׵-l}e alJI@ӦiҴI_64 :쐙1J2[3[dٳ;ZVZI+=˰w9\nY!mnݎjGfVѱа=2 nYh;t@> |8dxǢIt_2> 8EcR#֡+1FW'9{CoENSn);%+i puYI8;M4L}9qds~a?px'"g8ck |!ڿX/滿,YH5zW碄i隃P. 2zg|qe|2\s$J)}CWHu?ōOn|o 7uN~)1eΑT[/ң=@{RxRѦH&IHeqde}ʥK@$%!u0zGV!L¶'!bi3$~M4!DFD޲>?¯c&mA*yA#]_!(+TL& aYv>'jh|7$?c~%~$9mtd$;AW$ݺ_IG@ׯbPBhxRfhTƈeH4 g1!YY[SdX妙`6ѐD>M e[JCc3 wː HjVSbL*%)hG% ȥ3&A4w6,%A%G2 d;R T‡ ;ҏD24B~Whw{/wŹDz|WK@rϥ1uqgNw n>'9Y1"CTF(DLJhRnAfMV=Tz9J'pJ)$"2BU,~5dpTqLLJC}bzᰓ;6{ ;rIJ>8: gs݌![ `4k-0"1d<}$Qly~th\D/mw}>%1\y#dfdw ؁b=ܘ L}sb0Ư Q&a:(B B$2ғʎF6 [[W'mHeb D,?h%hE+dYQH.A uÐr㤲SZ Ͱ8I)|@f}$$$&ђ4b*\6&rvMH3PSK`!= &$// JJcBBLu gy.}Kz|;ߑ?uW wCOKOI $S&f 5q+[_4ɤ!HAӁ""atnB Lh"KZpuD="d' A> G)#\߮6H60!0hGf-; O#zioYBTDTp c*pd|hrZNk XkCX`4O|8‘8qPHoKLzGGCS Rifm 8=בX9foI'|ǕDwrG i^.93nLұBEDwr1ރ1飱>-qBP;bٻt) R٣;oڱ)=z0{KdfG#OETx6&=vH^v: D7y+Aa- Y9+=?z~u8Y<%Ҁx>tƑdݎp$HG G98U>9"ȓػ}xǩ%sݧ9{;9|P?4Ǔ²w=z)n,n?(~qdwLw@3E* N \ *OƵ{uL58:'C ܜNo o TU׊+Fj]ݫE)'_(dtߑJf2KzgT)ݳW_yӍ""v޽{ʙ;PFo$~uG"xx t(VDU.ET!kZ ֙D5cw[jG&!MÈJ~g-=;Z:U0ۼm wlx;zUڽf|:FOT4PUSv٦훤F_6#?w,ud#X:vfTw \+;wcʎdkpkWb݇4~GaN bC;wTr!rL!*MzSan@Ttg[bmQzJӉ` cFA߳koNkػxak@]wܽRy9 %V3ݳg޽{;UU54~GfA64Yh&1F=ˆJFTDTAE["H7=U)f`ˣ{8 ]%#*Mnw]A5R!6bD:{!UU+"lZcCd4s^d#۔L:{wާ~q=󰓜,_*+[lru0jfU{=hTJ|4֖'љ*z(OQiQuJM.KQyIB": *϶B2;uMˆJlKDYƮ){UGrmٱS%;ck_kl.}Gm:%7o HΝ:ufWn$KHϞ| "^Jg|6f&H%7펱Fa@EMBhCD Dh>eE$G{"@yx5) %uτ=Ut{oCڳ3}^ %/mQm֞6O 9Ty@Tm ^G_صT\7]ڽՙA^{:}/ :KYW;g4Ӱ_1Ld4XuoVٴydi3#z*#%Q1ǐυ*:`<@M#fg1 `2m=zd1f(>|7FF.FPde[=(Idz2M>]Fȅ q#cƎP5'Q2a8a谁yǏaÆh:t{t,g70}qϤː!Cdԩxbwwfٱ{xxxx?طe5=/^z'ςgy[BA93}TykjY I|R5ޱfG ]'%;JV3X#Q2D2CTEx@.BtilPk38Q)S&[3 ,Iwm88aTTK]P@i'nkǼ7(k֓#=dI3K`ȍGǀkµa} }/{0E3! \<=<<<<hr3-0 m + b:14RՏg.nLO*#qJ:#Ja}*w6KI$茔e7oTر]]:dD4b?mq}mC&N 1m.doxhdy4%^@Z/- 16KqzRd7=!d.XRk5JxvѾ` *q]jQ:.13mV/& |R<7qʝ=Bc4I'$6U_X6 FLnCjm{*1ʷy%[r#\H6h>KPn]1f,xt zm "{k`oK%r<<<<<|ʁݔ e30ޖ,\3} `/5 ӓHz?M$)yIYJtNLeA7nOư63|ZB`!VR'>n+A(JLTB*óffժU:R ^id6J9^ 0ݔY6lb)tn}/#z)wר+s /lCye2G9!DCv^6@: ^6N7ᷘ>C4+o7~ꄎ>IR"V.c{ɷ͖JKΎ~+v^FDXgvЀXGJ]RW[-l)dU2rN_,#foV[ߖ!VȼRsr?Fv;,*(ŰnT;K*й8n 3F[z#. A^tHbqiy\RI\BlA&әb=nܸQo a?yT&a]Z(mߤk#UQQ+6Hنi2[ \J,5 NzMS\nPܴ 0x+ HpmycRRN F )2(i ߴySC^ovh J u2Re yIb)XⲥZ.KIqwA$ikܔI|Kuql |u߁`_8(Iv 6m&KSKYEbyry`Dys<>;5l ELJ: %ؕP8To::6rBp43Jm14ҩht>V@i4 [V:*H}UM1So^%߸j<}lܼI۶ ]G ӷ{. >+V[Hir^3 <%ebp`J} W^4 x gם;Nq3S $-qH]\jzhTq̀I#f(LJrG&/7EZq @Gޘs6f!蔳r•UAJbyl%@3a!guĤ}hzCv'aQڙEމv FP&-o`6F*_>FvbTZ:L'bãs1HQX70= xsӭE\*|+򍫾%Mp"}DF\h0CT Zo>eIf'-+!|me5.WeKvWږZ;ѧ_l%,W#Q$2v=H%A}^%Gkķ03ãs1Bb:!2g9#Gg)g%;D9OO9U/C\z@cMS0`&R7 d2]]J1t0üG!_Y)?z)p '(A|,JRL+?,=(>JmgT&a„ l|kƠ, )O?C ?oEṉ9y-X/:t/ #k֭Ӂ?<ԓ.@Nɐ#u R %>l0% p)?|1--2/)6l%.e'OqR"TH Cq[#ϗo~j%y_?\+\>EN??xHhP?HJV)afF̈́:Bzz G?䗿VuS`ӻJ 㳖a,#yfgɧ!.io~l 9i8<'f#:} Xָ*^^-AI*FL~w#k7O?>J~ .{dr]SeAٶ=kOtQ/vSҔ}:J*pR P.Z3;(ߺjG) 5Tp%.%^[MfxsLw2څoܱ˕YWgϜ!?qnꔪp[GA 0|9_7u #GܸA&L(_ʅJ4m4xK[R%K G^G?ǞzZ\cfD!/~+T 05d 2+\[1!(L)FTX}`ݚx Đ]ahG!w>1RiĒf %ǝt^wċ%L_=,^XɢES9#QVa]h>K.RLrӑS2.3/[HnPB4Wqy8;߆I]A oi, y©3qm|LL.~+eoN;L%>.u#Ŗfs%Y,HUͿ@tnTIIGIf3]咿t\y5䒯So:nР5ut+J8JK/$=⋪P8 w#`YCJ;]#[mm|#ָ;Agˏ =G~vɸ6,O|*]~ah%,?ϕT2ScO>:K.?w!_9 ̞3OKys޹J7ϓ?OJW|]/O>Q/_U䎻!OPTԃ##G UR Jڊ\k0X,f͑SC~Wr9bڃ257O֗&#oGWG=rWo|ms \W.X~?y5/f !}㛲(/_ >Lg1i\Ǚ.-w.?O]*=tvo}*7v86@N? YDO|A~_klIҶ,5H}xrͨ㞧 THE*x,;$GӦMӱ{3SOTzxxxt>036c7RdD;txި#! җQ/SǖKٽp]/tM!):5U?]L{>أJ*!7_=5߻NMT8GҁBY^UD*9S3q$<+0S!$>-u!W%lCu_a{#߸:˶q6]z&W;r@gQًb^~ +3oX?EbG6/"TbTB #FRRA-^! 7WI'}u?f~7fxysS_|ک(7MA/"{c%Ͽ XImɼ>.}?+Wia߷*7&9=~_(~`sҬMAr#{$/3n˂,a/ThT܃wWQϜ9S&xYܞTzxxxtNؘ3b:! {Σ@*yt| I'.k giS|g2)j~#3R =ՑƓ:ߑss_d5{v_lٱ[쭭qzٞ෹tʐI (5ä~̒bYU1D/ R8׸mR(\fT9Ri$At-.J9[^+߼ՅvR¶xQyT2c5yA|օrCG͗ݙ+W޽H}|g;Kf-(]u^GB..dR 2nܘz%VY3,W^]}+ÛH |(Jr- -뤬nL%@Ɲ;-{r#/Ï>YN<;eIiS{}zPvĒc-c[*6I7VN;]u3 BS9e܀_N9 Xx p?p"z,guKMSu&导TXrs&uׯX*+dr.k ~z 7lF 7>I)uY-c'Nr,pdl)ب3Dڤ\?K>"Irdq%̴~Y|T>X_%[jqvKSy/ҾO^F|a}a2bFmUkH؂tf /nđBY2_^|%r5ˋ8?/xzz+WK_:CQ1jt)w©r{~%2 H%y!òq{qn%ƊD[6mɓJ`f<y` I A??eY4]H甩s?/_:ȡ<5?;웕Qq>򨳀RSW5MJG:oC1^LVb&?ߚ =LPtKڱ͖Jte~݈%^oIp\ʥ*ٳ+:tpPez~|ruIݻfw*?g\w\w|{ɥ̑o= 0SJ>`JGS\tNB6 ̨M,őXQYrѣl:gsRwͺ7o 6)7^K~(t:ҧ"u6 %-^%#({dOnd'jؓN n/|lLmSN(%sWR[FV,`?<‹.v%DK.tĨryݧɟw{i)=W c~2z}U,Ud"0!~?oeO/?D{YT![nRewsH%ĔFDs㔔W評gy=tEQD! 8!K?!4@3̒J?)/ƕK["-_ 93,%Hmsʯ`X@gNp7 ;&;O9x%d dx(,)mufcg>JN}'IacK2/2hH]"1ed)e#_u"u41Ē]h귿Ѳ!1<0X9q6kκA; Ծu).=56F*PR_ԓ*={}ŋ/CN{ z?]ˆ|oigOٗ c)':LI)&'B8<]ʱ{ktkoX2,'/obʂ2+?'ԲVͷto*˙vۿow 1 ~AܷOڏWbadY}q'"}3JצkSHE*m !!}~T_Ls}2y4%j{IGCx,6RL/95_+W)gpOOg4}Y3  3,@l&:5U?#L˜ϜfLW>i%u| D%]0~+_G;@%<: :Xp rO*#t ?oT6[B* H#Q^^ׯJzy\ŗ]ԥߩQ]!3rk"cχwo͗_=+?ؑ2{alSm{W7*Ie", t: &N뻛 eq\ԓO;Sg.X1@|Y>QL:g:3 BKHp2Sɬ[b`GMLJN~eiSugonWf,i lߢ8`易pdlQ!\ rqt 48u.}g4= q!̋zJ,ZP<7ikպL^r {~*_Ǐ嚧~XR}f3ۣ W7 3Siok3?_~_)qg u?"I)`:AxMd Гȣdkcr#\q]W" ::=N٥-f̜e/C8ᎇкvvB*`&ogΜ/}u~#~ҴzX;]J|VƖڃ(xɰZ̴!nw՚r--| ӈc*"G[l߇GxHA6cMݧ-q3iȓJΈXg韀~6J&{zPgX+oz 'Sc2Rduk~N1 1ugW(=WwV "?N>>կxfd*)N@(!xg̚J2Ɍ M͓fNXёR:Ӊ! /ɽ//kl6v0EܩH]Ͱ[5TR.ف=&( j@b uē+wTC R 4`?$N巰χ\\}͵: o8|ӓ8CO#~ȍ'ŅIl6gio(_29S?,[IBP965apgf})®v‰'>K̆BN%#./ڃo䃟qh[-#liT6$] %B*xL2MeC}IGgi|63LC`U챼;{O9M?X{|=N=Cq7u+@ҙ#eH[cO8=t}T3+<^t%/ ç8RɋaR?ζ`f,nзy҆$X_IM݀R?L˃K:UH=}(G,yF 64kOGc(\Û2tr ֘w:K=9眳-KCcV6Czb/=񸾭Ÿ H%Y`q /PzRX:vr!$,e8seJbyh0{野y9D$= J`2bά`b=[W]-gu.ՅJ%C^"_ I[BD O9N?ʪe/\?Q>/Ð=S]zQ-;x%!tԕps+J\pL<<ߞaeƾ ǤC$@L^gul 䙍n t@OFkEǮ_MTrJԜr,޽Dsygwo"߹c\}Ly2wQlݵWv,vD.]\Q2pԎAM(܍ &߸@}xkƾs.c -71˜j1si1`_ T: o)JM#s[od/9YXkwp(K2`Nlx;73K;sV< [aO:ȮuDKA%.?3)ÀНA=׮+4,dmݹC={ۡZ't\=/6lp`Lޚ?,d߰2h/73rӕKᶈRF(YJ O٠id*7fR_%JhJyq›ΥȠC +ݧw,Æ,tܥK}%yuPgijn}Wߺ`oJ\yaERF]le˴myiO&|յ!cG̿)"@r=/[jWGf`BB駞TzxxxtNX~`lPM0yVOfx3xf9$==wx!L|lHqO.'9(yKnN!C<7~'Ƴwk Ŭߥ{*5+㤞:Ygul $>dU7&t&54N`k;w~P]{*e"93͗?O~zf{Ȃ soZ:2(pnT(Hp76/wTZnսUz20@.Pp-:uN|+s 7Aβ7~k[رԔߧMά!{&R(MXr˗SrtmU5R =5dz- 8  ``A| ql.85#\Z&2f4IϵAȹXC C<[F mԏ{ Q1!(p1)KCunpXSĈߙd98mrvbԑKG\تA }"G5$Ruu,"~ԅJ.]ib,׉x3 ] f/-pekI]@)joבm[uT{p:ӀE٤ ֖k {xΚ}0ʪ;dj~#n='8KIe2 ux2vX3g,]Q,X8W;%e9sg)e抸2)l߾-#쵵R^>~Z öӦM4a ]4[n:`{eÆ 0a\dy4s͔j?+XR )eĭdӣà򮉝7v-zm#txW\\,su^,Μ9]_6E=蝜0}d-e'/ߪ*5fO?Ot"$R$Sҭg[c'J7f-{:qdu;FCTBa  ۷O6m$'NgyF{_FCcG{<ӏɛoSb9rȌbذ!2~X}2t`1pY#Oؾa}d!0(kĈanܸ1j;v?<'xL 5Ƥ =/O{G3`ذa.Q2uT}3apVƱ*ƍ[dҤ ~QĽ%=urψɲe&V]ׯ 4U?L#pG':0SFrXq]ۭ82de@LJ3^[lQ;J][ۭ$ ބd 55(w^3~$Y3~#n`;3!0Aoc n呧]DG ڙkB6BO/?9nK`cJ2O?h2<<<<<c2htQ G? óN7ovψ@kͩ_Pֻު IewG(s>ʬ^'Kb!&J3.oȈatH(`.:X9)?Ӱ6|[.u0/ i =*?μD}1_xt qmfvXKsYYVc϶{IXyԃ gv Im>_&TcaK:3/T8R }sdRy:Y{xxxx/=A2gFP6f=;8T)dCR=ݏ'`OH2lH,NrUdƍRQQ`r#x_[2uX~"\.L2W_ƍڃV/LA0KFe%kYI:5l33ܿ1|}=\65buϤxY9xxxxx?sйL2];TT;L( 8qY~b|:++JdmOIeNg/~v&\Ha+zvd˖JN+VuM8 pf%?l|ϯ= תo bǴzd of̵ki}3*=mW-i+P&u 2v̎\Ghq]B>QL:"Lܔmzxxxx/LY <[]|j\)0ׯ14U?{rmfgq8bq%F*3=N2%}Y b'!HC}8C}ǟ+w}<#}GtGM{xxxxxxxxx0xq:|LN{wDe,q9XǑg=I]yxؽgTU >DsL>IH~e:qVkG8B#>)=s2Sʬ^Hg(=JqbY][,{Cn8/^xŋ/^-Z8[w;|4F*!4؆={+~Y3#hqh)qɁfŋ/^xP#={}Xz.IH%8A.=,#*كOL8Qɤ'^xŋ/^M~>Iu3?gBiPvwabYNKwkGA=<@&uf3fjTzŋ/^x94VCS:S VϊplT*t$3˴Ň=<MdrzyRŋ/^xP[LԓC>){#9=?H$1L*+`jTFpq(zl۾Ij*5jZ^xŋ/^JR2;13'E>tHqqb#XTC*e;@͎onGզ oѣG/^xŋ/לtĐT~ƑO);G`Ws'ܹs{0#TGa 7kj_r~]a>4O*xŋ/^t-i%4{{J#GLLH 'P̮d4'^xŋ/^TvW46%~۶- m߾Uq"$զ xRŋ/^xkIH%'fJX&L5801wVN{cR?Z}ߧQ6 .r Ey9ź~w%z:\XL#,`r( }RFgA $:&1ZxҹsK.E!tWiӦ J֬Y%^{z6lSVXV*]]%`1KVC(#Mz.}C!v,y7u&.~ԏ2HK}q gu$>y& u$mWiȋ0#&H#MhCTb$jYө> ?,S=8 ڀ炗:_0J| 9R:@H3M[e>QnR$syuuA?@hg)PJ|{Pq鄤@0mL3NSW_}Y>u)++ե{{|ΆZ\ڰBG?ay;ֽ˗/B5|[j5-%#<\gY;9찞r l).vMMՋw_-&H#M8IetAv)%%%U~̋h2Yƽ5Zm߾])6b#%P^I}FUBX^mQuwJu ծo=SЮ,ء?WaR吖صW :. 5F*LDF[KS I%d{)!UFCfΜKSj:EaV=6sHȱDC谳Ri ҥyrꩽ82#Hܯ|+rW"/{;Cg9[UݵkKg#!zgB^,ַJ^Ql0AHQmN*o׭c_su {;=g@@.9U{>Hl?Aqr6N`u,rS3jWNx2:o@*Ϟ&/Ժ>u{t}^'*ǜGә<7pX[ۙ Y~cpua?$ JCC9G0ATZ8djѢJ1y=T2) f&+%J^Af9B1uXrRUFQBo69]UI7wl7uΤNɒrU`I]w9EwϞ=!C{En6[J;e`}vF2IHQmN*#Y,y-((wf侪uyĒj782D$=l?cHjY_TM&>+c>.3G(?*LDJL'6QV=ˡ+;t̟1Df}Y {JxR }!O>FA RQxwCbЗR~̟9\|V&}R&yY?>|QxA_co9rY'jU#X/҉g*A$1A,/_n#> 5SaY2J:4?ʁ42Sݨizާ3E1b Wdee9ys1! 'OV"j$z/14Gegi V)?~֑:# 7E&'v#eQCj9h4@*ykC@ 1D3gLۼX7JCy{0?>5~9.1Va)1uT0!;}lX7]@ܵݳC-#)S)G? 3-٧AT c[ȒyCef^b#]@ˢ#eě}d>2gYFƶCceʠ>gԣ2upٶUrkK*3a2v-:KLAidI403BiRy]w't.},#Gé3(QI&H^=4_#xF2f̘3ȃ(I#-u6m6o})Vfj9h4>Iʵk*)TL $2L0L^άRZHj0j~n҆Ã2PfV3No}ӦMJKJqzKm1o%sԴ*E!ʼ1˄!}d~RRK{T}j_,ؙ - Cj NB+^R.}ur#w3s" 3cJy&1ot_]7j&=ƕ/,Q Kit]p_j &W9#Av?qs&bW zT  N 3 J? #].vÑL DCSH8t1Ϭ/dxX鄤fP p;v|K_ЙGA)Dy%fPd1!{,efs䉪CI$O'>%8ܳuO%qp9\I$0A$NLi]z.5k։4V>}5Ȳ*#GuN3̴6ϒ26ڸR$#=Di]T&H`bFI{n F'vL>0Z F@)$B.Yڋὖ{%=⚹#Iad7ܬUۙ\r;1:WL"WZr=1wIizѤrd3|.iuzSs^,zKgV&S^UFS;T2fzFfN.@ Y*D>؄{nQұ IBh0[K%pŒ0Ap1C dfsQb>NfS>i©yyK%D[JWPVVu 4O'//C CFf%Wx9Kq?|JJJdŊe/dqǣjCW#v#MiK*3a76\bHe8{0kY_.K/m D}?V&]Bv(Lp̞%TJΜ]0}%=^:T:!Dc v^I3k5L xKkD4EӖRDϓăf )4d}c#wcXN˒YH/uHwjOV_#L-42G 32S҄<,hb?Kg$n O}\Қ a$_~B,gI,+t$6‘ g=Q9~tD9PVW5>Jo,48>e4.JR @җ0,xG#Fg *KH%n( # ?$V7!ʠS3EzeGdڰ`Rٻs֏^r y/'-I Ir_ihR9yȽ2{#2G:?G* {XxN-#u5N_:}k_Დe/#I嬑 y@zX L_&X t}ܱJ6>Ӗ~}ʍ/-T9@#kwCL 4Ҙt3Y>Hk$/ح6rj#'v [o$Hkd򀥵|HcuIoe'5rDi_H%)}̒mYN3fV3//O-[&+WTeժU.buҥK]pB ;w,Y$4͛K.lY| H*ň*~J09 ۷;Xj S:Tt.{="L† f fˁ|YjWW}^$`4їfzѤrT7I?x1u=2{2iR,_vm]wWZw}pf&A[=ٹ-yK#I1ˬw #qUskoƞg5V{yH'$stA6hďX![2b?S-m8ˆG>a΃4Ǵ0[ȋ:Qg ؍@Za'\2y2fc2j2`ٸ~qTxt!nr~wOlGk>dvGtаυ9vЃ2~`0Xʵ\pNJ*=2d4@*<d1 2ܯ L^v@ 4f Qy ˟2Y?~屄U˓rC-_ZQQ\,SCPtf9e{B";)vuwC-a%X;#s<̀TT:S ꚷ' isF>^o<2Nh7X[GD5LSOs6L~Nq~ȽtxRL¤rGdk [O* IGzj:dv RƒuԚ3g̜9].͓cu*Kg͚%W'ɓeԩܔ,=7n̛7O$-,Gd%vҰr„ h"y5/vʙ6m.|B2R?)6زY[Nz*"߼)N@auJ2͵G}{{2GđJ}t=+]͐01=Qgޫ "ͻ2Tm ocb7onc㴑`w~Qנ+,~T& cYx_=!}OOұIeD2IHQm@WS&&II[d#GIL$Nf kd=c${Ljy "q?ei.ipCO^NYF(M6R饍%T221sSPZ~ck4 oQT6-J*]zn%=>+"<4ط Qi@*rw{RØG;O 쫤q0Zt5LttTJ=K']$#=Di]T 0H&nL(e٩)}%;y[8H$(O{Q}*D=`oSS!|;VWJ={ԓʶ#zcr6gHޝ 諤=F*ē.d4N*!~L#1k HB!s?ғ$p#n0$0f7B HIE3&Si!5b륍%D*G~΂Lv NV JQ1Y0q;#3zPo][*YJWbrw9.1S`Vէا°:OxL'hOw'm ټH͇+S<'Q}*]wg) Cr HVdxh "$y6MJbؓxO?Vƌ0k g=|R}3fO9c O2E?;2bݓLdG?σP~${(g 3L4I,XF!a@AJ/m,IrUaE)Xb 0PAΌѯ%jkTzR< ʩY~}w0[էAS`u[wķ\c)Gr'n,צ̢ϴAKs_ΈS 8wlZ}VxRē.d4N*!dTƧ8ϒvaaYCfH>6h g)v'.i(e>;쟤ny%v;8 TW@e@ SQā|0cwg*=L_H唁wByS`޸3n]J&!,}ҭ~LlwoL7& G&]iwQ_Έqt}d̀۵M~nSHd%=]4TQujOD)D|Di]u+$ rRm?#qo ~enQ?NZ:X87@, ~7q WHTw5~N Na)E7V mk^Q䱯Salb̫1ֵO2xqMɝ纬kKV?/vSo寓ܩ}>[Q4$wߝ2՛mNa3?qީէm)1]at-jjLzs}6%٘޸A,KLGBx}ox7mz 'yLZTJQ}.>FT c|\s>2ʘ~=u6LvmXaLnٮn/O*[:'h>4N*!WFtWNKv*'24nذAßJ[(Wh/t7CTs LNv}HgWc nr|Sۜ32>;dˆga {x_Î^1=oku51iM:xИ2q_b#l}eQ*_IFr=I3m/R"?euucvѼU=mrjk=wҎ!RǿvO*[:'h>4?SFB hm仒[d$#$ߏď$WXWG+IzImJIKII#G) g%{1JUΞ=[f%n^K@YzA4!(CVO*ABrث8^]IJ)o& -2)o,r QA/-%>=sS0+>H?Ejw f&uԁJ-%Sߺ5Pr)Q}* ̒RYNS5OA35"T:=vJ>曏(R*:\Շ,tÌv;d˄`}M[B91ݪ/2{H-2ջy[dJ}.>0AO,=o7nd돈n_Uo4 iS{"N *O#MS N!!/a8mb2U"3I|V­>ql+ᤃ%SIRtNJ/*yRxɨ(X0PJgɚjWe\a_L yI!D!-B 9JyT CX Q_]_x"/{y^eeYRlzJD0DT #υA+0{i5 seSRٳ;f tz/#S]`d\;e TchNuL.-ƌ MS υˆsa&^)uq˗9䎐C% Ybl,Εm\+!\vbS_/O*[:'h>4H*9҅r13f~DxF(q#Fī%JLJ%S#w\Fa)?R."+rX'{nnU5CTzfM25N6E es" VGCT{ȳ(c-%H-~N1.͝Q}.>FDiKl^ZY27Vo28Q{6/ }^SF馷W|WmͅQ/"^I|2{e#ytSbѧũgEcvX()[\V-r4tp?f|t& ı&% 1IIe]>#{=WnQ/WaS@J{Pp z_iU).Z2^/NeM<))1 DX:F:*o]4fu=ܟ;]2艙#^950/4zoCu 8%HAT #υwˆJSA?Aär$Yxݘ s_dSr ]>'+R*25VJw=2 T&z|@'-v_sn̊l}28t'υ1} }qȍNUֽ=zwyc^˃,#X2\.Y ]]x?ܗ|Z~O)ß~BͧGGd|fܸƷO3WL|dƽʥ\σ b^4N{39 ^l{iqnݭ#Bx󱿹C' Yd+JufϑJ#AܑnmIrO{RٞvG[c'KvY9xxN#Ns8#n+|wل\F+B3Öf!k;D! mj/Pd{:>4ks(}T%JbB ;vJz$D}ciXn q<! F=M|ғn&N۶mSa=6𻘭7zRYA3w39)/[yțO8?DG _yɄ7UeB PFP:r!T:k}|Ec ZFW3 = $PԆܘ7ʫrGy?-󂄥63 ޓԂ+xI&/>r<{o>Y^{<>M/<'y[iRkCLb?^jxRٱʏK^92a'pR@,dyY1C`wCO YkG,9b BɌ$ҖlT0ȨI^A,¢Ԟ0"i6шףj4T%J bI0?H7ˆ݄t|΃m$b$OXoDbC]4ZfOTfVl%Rr.c#VMNLNqicf~)S@(qhP)4d%`')% ӱR渥 p Rmٰv[8RX/+E:`D ^ +ֵ3e˪)fΠOCg(zd#M_y^fyPÓ`ku<=n=0!#gTz3ʀXF+JfPޙ,)) *?G~#Po ?#i ,n@&Ԉףj*4bf9s~FOt};aӦMS̚5KKX^GΘ1CL0AD?eY,{ 'M$'O'j,}eS%ԑ2{ԩג|҄$n&'R(8(Hy4I6-.k8|7WHw} (RKf0%2{r0ʔMro/p'VKy)r{a}g=QIRsצ`>[_T?Ό\R '͑󀔯˓ Gx),}܍W $Gt3>Lb)4?G(ya}kGLPdB|󤲝%⠞ LqlG,{IPv?Q8ɶ#(B X?ok%a? aRin ̈bQujO@lm@hk@zwz4Qm'̠Jw} Bl#7a$>#qCވ=:ҰO ;qF͗tccg3IDKO*3+ ԟ=8G % ] ']Ed~|;.vZEx0RI`YDĖ oBpHHAHOD"ڰN KIVV7YvKRG:j:K|g6KFLȗt7njy 0L[k寸=̬!RŒey#dR)=(Cw"PSp+#F(Tڀ>}'1O%K-&K1_2K!/Ҿ[2gsPE v١wI)m%oLʱ0wc?'F9%f*>}?+?!_ew@4wj][]m#,^Xxr^iR\\Σq GjߙP'v+$ 1"@ F̈́āb2IL#lO\Ǭ%q#Y<(7\`~5;y VO*3+auGf bB>H_AL-)EfN\ V]]\w)u{eL bce6h>_ Swr4R mv/A{gkIjuR_D$Gz k&7ho/!f*)t$3f(sz !%6-Di7Rsu&Yʯ|KJ,.a!>vL1eH'8ÔPNL!IG^,4>n:+3-noW>9Ȉ$đ0LbRPfgwuN XZ[F y6M~ЕIeh=G#Fȑ#>eرcu${CɞI=:݇t_$--=q?K}~I;{.m%g?~f%3),U7Ko!bٓJL( T6O*J;Ѧ͇¥x IeBL*u1==҃'-THfPv]HJ1(_ryPG?c()8ƍ7>&x)_`y,er>JϞSz?MIeBhO*3O*;Z:) EtL6 Dxe v%!}BCMǤ+gɏ@HH 7E I|'W!e:)B0YRke߰aCM>Dc$s}}N׭+,1cIxJ'/L0AHQmס+J|3hɫ>p>73vJ+vz$eOx; .eة6koIef8wIeax,UyRYO\xR9p1KH%c9NO*B{'xRpmIeGJ'$*9n#O+@B,P>nL Z>L 1#o3b6f(/w(ݻyF%x,e-# yN2Iя~XB&ORq3K O董~!aV!{:uR 9-(XyX8P=Z6MJ3>1cG-DھFI~ȥKj\UGZ\VbF\M9|p t%{!)4%iȏ=+W=۷.)Ͼ[I]K}pwM2b2H3PxRB\DJ_nSHer{Rو IԞi"=½dT:J$;d m)"J;\B~_ %mBH~7 #~A ٣Ɍ%f*i82*ܸQ"HO8^ˣAtBKZYv-fVO!f7 H&I!M ČeFа#@ml#nҚi\#- d2<̬䍏JN}2}xRB\xR9xR=ĵG$T,^:SԓʎNH*!^F4,L'?TB$m+`YwsG'=D4F(-͌#DŒlTR.qO?)'t7 ٛ7ovXO;v6ғ'a,%D~+9iӦ,[$2$~-LO*3+ySJ,G,=LT6.TfT6)TfTvr߾ZʈtRac?o)0n^|@↨RFƃiK`1Ig2?O@dž< p&//n!a,w%/`'zG2IHQm׈kgF*Yܶo$@Z'T$jKp92>,ÚO*Tru )tf & B*v[j$$զ pʤH>1GJHn'e3) TO*NiO*VΌlO4IeIeIeGAH*!P' 7vÍiqPx΍YoDxćf͏< 1bgzזf2p&#!F0|!F,-Os70AHQm]wsw5R&aBnn3 ;]f̘!'O+W'Bi8fϞ<3#&Mtso\>ux|C &?[gHȏaܹMI0wUwAJ=̬T̓c<,*yNI]2FJrH܈G0jݢѲaUT&6t.%#(}b{}O/1/Jeb)ZWkAҖ TzxD2 ?S˪*V0K6ofO1T|lݺUA,roذA$q' yVWW?aR.i٣qwduBTqF(Ief%5 +Q2Tzדƥt(D86yTvxR&0:ll?#%.ș,lL,Jpt߾Iefr!R9\I%K9KyR  =l(QRőʲ5m *##}Oxcwm2s m܋//œJ4ѐHᗿH3&8#aH&vaB'&ǏFV--@M|ҙ?Bzf+VP43rH?~$))GiȟH' *xRo*t'$ɤ ϵRǺ6䀨(DGQ Ry&IGhH$3n1Y 4đ8"4mfgG #|2- 8Qv%Iefœ“TB;xR9xRZD*IeG'i! Ó/P&bi,I1r?iC4I87W<̬(\21XjIe Ie*TuzRٶ2͓LʎO*=Cb[ Y!,ie -Keٓ2W'Zg&'M=l w cah-%4c ߽dJZG*z Y=Nl_R 3č"lh$|6c7H! L#QztǣuMbF*412fbn0?L_?YO8v*]X,ēղRdTM2xR٤cAY( 12J=loi%u+ B6B. I -[6i|hn2L2!aq0r1& tuRb$LsDݔӒ! Óʖk"Iz.s*Gi Rʆ8צInarKyA|O"}6VyRJls}/F*M1v! 'mڐY_ԓʎVNkRYWWߔ~"K7Q2h䐮%v҇I#n"sYr]wh|ܐHfD //\t IG"$Ie}5b7Z+X< 2Ie+#Ie'ݧQЮ-Tfcb8'dϔ;]+ē4Sާ> y~uj_$E5I0kXT0 ӕ#TfVTTzR}\ww/J&L}6m|{jws7F$a(fF4Qiq TJd$ǣ}uM2,a%%.JRUt i{RY 'E"y{䢋.ҏٳtӿ#<\gP,Y$?wCc=+c~G{UBIEmdƣcаφqJȔYt۶mҸ$$}{Z)\}] Q.4퉨:>,}@)cS?Prt,Mʞ9ByߣOyAےJr#*{?Ot$+_AlKNjT^v%o^!/4_k曤)|0}KEE|W_}9NtO R_Z%q)M*ϐ RGlӥlFQ7CU0jDtfmDYd,}uUAnB3XS $ ŋu*_6S].^2E Mlo/t듌7DoN0ol\^MN_Wu J% h'}L,Er& D]0D{"NaDjhRW7޾: %#RTf8Qa{):]'CN\Ox@?Uo|=>{2UNp% =R//so(AT"&Ɋ!ՒM&OKcISOhg- R&|ݺ&&M|?RI~f[G!uR&suOT:H2D3,cejY`_@ʖNs)yԿ5([>CUtg+&S`tPV lҁwu)eq75~x`TV:t.m~(EqRr|ж$$_FTATal.kekq1hؽzd@*9[MlX%EKnp/ wG NArzM[l~ ^2(MJG&{$_!{KgI#9rx#u%G 9R I QG@?W!A}>kC{ .~77?%+ߓ2?L+nI1b9lp8FZ HMt<}pJf껊t˖-J/F$1nK b-,ې?T/"% GȆsbi@D)%дJQdeҺWgi(R_/ENQ'ycz,ץ<).,zވS:sal"R_S[ٵT}=ig8ƻF{[\ވSKnʷɶr7Ukص~/Tf<16Kydwwp33PfWPfuH%$͈>aTAYڊ;ɲX}bĔ|$b7??L*[!G:fA=M8^LN^aR^O>d4=TRʡCTnX@82mh~hgðeCq;3q.Tcƍn ^$%KHKr_b_52Y5} )3ߒhN(;Fo p[)QkbK;M\T=Q\󮾫C~̨sl+zkno%%o;ӵ5Ɉ~SQ}. M(˥X߃Dpvu e_mX? KV܉i3awdX͙l(]5/2/M^'9q)Hλ Ydyd~fےJXAP!u1ܐJ @HcQ#9ʢ\‰ˬoB8udu`rx>1y٧5=3T 7xuRVŒ$KdYRףG3gN~:7u&:~k8I XUUv5]e%_L¤BNVQ&9##q/Ȓ /OɢO7'<PD)D0~Z JL yc﨤d9=cu0RiXƾ7y{S'd'\?37iu6#ꚅ'Qu #7)CJYZh ]^6E/\%kp>&mε!O'Foj aRZBi{Rl/Ԥ_TrPOSgKw3Yp8t:?)cF† jٲVRX[ 2фAlfRj\`D9Cv.ӻIxB%#H|og92vh 9͕YGu9krI'?2c4 #il5x0ښP#obb :ucI7.e˖i0/͓I#lyqdldLeWeeĀ'eT~)1`T oO2DnAdh$=x.6ℕ=]]q޿mlO)cFʘo?7^oa4u:m:v,7]Hw4wVx  *$\7M30h瑱6zkGz퉨:D;ol7$o]}8|lIM*u%~duʣRg(_mJ*Q9 :#u0X,%X^&XZvKң"C=p̏|iZ!S#}{ٽLV\P_Ǐ;3ԉ xK_9AN'>&>ouFCt512 @J3xغuka,{e*Nh012/Yrag6|o, frYj)(vX'k Wة *$?I5RRZ!l5N VU=E4C$tvnMvJ YfY[J =υaש=kQhߒt*{J]kg:33r{Zۄ%»fSraZmKSֶF]mGWd=URDsf@/&Heαmʬ|}n0Cӑ͖d%==wѓ]$}6PO\țKZTGC"FW aI& >y&Q0 ex۾} =/cK8H>`/:nذAݬ`%L̎I|^X`{k.2+++&[;en,`|m@ڝvMn 6O OCͼ\f65GjiCXB;^6BTwEp?ʩ#Y=?HCct3Pflq:ҹ{vҡ)C* (BQm38ŏãO"AʤK)m;~$l7i A0D?~(P* TF%-n8_pa[\Zo2‚r #G[a|;~[}TZy# e5 CYڵm]#}~]Uhp[`hH˨{rƭ,ͽdF8 NIe)ݏ f(>+Qg3JG(;cH%bQmb@[bo=ãhH$jڇ~'?w- P(cǏ03@ S>ŸbcǏ0n?ųZ gC*IXfb<,X 30Io!ḇNm#5hCwa/M{QmQ܇HXya1$ttd}=YkԒ&ަTG,^y^RV,*r%/u}W\j\FzէP.g*QO&C^g*!A"Yat}RKKd:J!>zL~^6m&Dϳ>L=v<ʛ@C,Rlve݄ǎ{~kXYV&.kt[cgv[>c||;g2gqY Z'jk(: >7T w]Ws ,8He}-!񳔈&K@*a݆rn\ 2dڰXz+Yrқ],XKd:JљI ;bQ0a{\7uNJre=zaۨaAM77n}'ô^.\Azsg |{>b-r-nԩZN-k/IC]ך~E춲5JI4Kw-_첋۷[o>qgq{gZ* 3l?;2FzO``1`?D|nkoFh־3f[o5[ͼ] P5.6c?bv 1ߣG򵋷v\-Oyeo=i}w`mS+|߸4mo; q_xzKk1}u]]n_#.oܿ0k㫯ݛoy!|mõKߑ̧0n0vmƟ'nAԆ׽z +*wyeY%& XX2îece?#=Ph{Ş.=Vu\a}IT%S_կꫯ^0_yfMb|sØ_/yUn2m>ޯ:n.nHzVW\GcʤZ[Jr/+^ ovBܶX( ڹP.>>Rɵ늷/.7+VrLYkܬ>ے>2,ƶ1Ye3e[V[VTwIn:8nW]uU{T fs=WIĊ}VM/u1z7H#@HSZ׾ҧ/^|fbL ;M֓M:w6N" +yA\CR(';UJna榉y[ׯ_&bM~l9'--I!M_޽˽mM]\/u՟n>nc({w: ^s!>N|>?`Űto %Hsqgv n]'׀uqiuXAk~g?uYbv}gKxz7Jk*u{^3M`ΡO>Xv^|6BY],rӧ,iXο 8 Lӽ(,+"wǻ;, ndJ%u=?"׋ .L$@"e8g*%T%S׿0qD C^PP7twt+/~%Ucv 7 e~1 4=yUWݻe]֝~饭.= ٳ|C\>M.첰6Pm9dp~ Agzxtn(U,7ԱrcX">&=?l3@"~##U"K/|XaX$dq%*+KM6$|=KB*c:pGy$wSN ׁ|Ol!C??qAa_= ;ı/c묳N*3, 90fm֬GuT.Fk_~yux<|39scws<n|G9|s`k~|*gwervqG㏇m@yR|\ X ЧvZXFrdЄŦ\CϽٵC\C> h 7 [/*RɹB|C8;&/%[朾kC" :sCH!`ׄA`aLy^ /0#?wvp8rg\;ys/8\Wo[lE|>{?ck?aA~g7M8Ok?o|}.__җ8~ Ϯz=ac}w_5?p<;k՜gG*Gկ>|!DRYDRٸkWlXOR(-';UJn;NleFz*mh'77I|dY%X7tSzCLS@(ϱas4`ۿaI9^&ztؗr~H,;rau Ȝ]?M>ql Xvaʳ1]@TjeDׄmqOr(Fz[wG?,s iӦ?'M171i ڵs$={ (صA` >L;f gf?|ڵ}?4g?Ҁ[VK@n3gr~s9a<Śh?؟1D8^|iGBRA@Ie%z -A*EKgd]JTrh7 k#:1^FăyzdavhSq |7!>Ao e77Hm38.rzn|P?Y9|8F8W, IL*F#&@8&[o5\C[ƃ>8ԇgfuHRd \pA詴!F[|Yon } y<3eib˄e¤҈m EΟiۮA{ؗ! '/\'&H"Fo|c`m11ex7!r|@{kdKT?ڟ9}`בK Tr>sc2uTvT$KBRY [\CKqe/ky\#IJ%+YIuM*iT2op-7L7(s=BFEa_? o0 z#m=C%[3fLyX2$ƛX B,vmumb'2#1҆pv=*L(˶xY|}TlAZЀxi.nLl0\yaj@`.9PĐ `q|Η1Fy .)o~8lذkNy' 4ϾÆ}Og sۮFT4SẶxg2?%p&HrtGS}V-)Y5jTfHH*Ie>#H*Hgd]JC*& *gE=6Dg" vCi7@OecD#p!@Dy'-[/_Af;7&J?s`uٱy^ny7R7H!7V?ϟq ӮW>Ώs;6l5~a CbdC9]ɞR/|7χdsK|q>-̡; eE<òa 8$D`>#nׅafT _|.@(/z2k͐h1wg|= Y7Sd3dWnKi쭝1./aaWE7&K'i7!t?7<0Ǐ~@H$vM/Iᆙ:5ΏHAo϶nd!sd7, oxlgh.۹ YAי/Hb%빮u71vp m: [&7vLSO-$n9&yGԾ?i7Oޱ!|^ s-F5ErlڳBpt^bZkE;L GMzDiCyueʟ!L:L{kw ^&wLwl5?ōɅ}΀ sO&a΋]Eāk:lvS<zdsLd*<|Oh+6H}_hyv i9c٦vlIbLc61oqhSg(>F\=@]6vq}cgK"n;̰a`k7]3v :XgkGek1zf>nu붶Z+nͧxz^gbLjG9eŵkѱvFRH*;6Je!)Yפ詴[g72vŔTnF2&4f#ޟl{&k-I'>_z7s8}@`e%(kiS\6f j9^[ [5K&p nM[w1}]X0XgƼXo,h`Nj5⺁}})y,.khgKSň3`P>9 }Q62d8}CtH*IeFR,D><%TҞTr3D6[gF l7 ݜR&}cudoegrYma=zǤoǎo!ޞun뉏>IW, -K[q&p`ּ]#ǦmQxs-g}2w3]'׵zl}zgcqYgK{ Sş+Pƶu\dub϶1l`G7J}xΈrTvlR*?mig3>֬C3? {'2G (~o|2rlV3gVvϤ-a#oe[.6qml-hV'u;<33lge}&JsL\dyq=S)DG@Bz$y.@\Ǝ<)þV#|ԏD-OIi7=HVcٵ"̳yp,5e*?ׁ63Oy~C;)c2ܛu6zE?\;e(F΋kbs^L^t^Ms#Kld}^pK_8'/b aR8Xd[Jg퉜GRٱK/~vm;vnvpt{=ݸqc=w&UȒe79EMNY/D',eLMM*XN$ &cJ]6iH"uP$DGG}äe֛ocY=l6}>|Z$p,y!e,I1ːX&5Yro2kSdg%9>X܀ml>>.2G}vLy۱1:lu1_?gK=@vޠ%HYbQhlgN^^K9r;D"o ;8n]vrcǎ7&VL$C"tV[mɔ+/~`7}á2G9NyBM&(cH V2}R)ۉ /I&q 1ϔkAd3爨[r)\%?i.p%"Bb Fz;^<QNʙ褏 _i_\mq=Lm[u6ןn|,f՗UY!Ȣ.DA"H/GmsoLn7u'k曯_|xA*^"Go"usLdK6u䘈+bzB|~Y:!PR瞻y4CָyG؆T'NEIO%E114D:b3w)'!c;SrAnM6 eA$Pc.>2aez G>ʱ<^ &G9z@)29{t:Lۭˮߎ+"eIL& ZXRLNr,R&iHQ,n3ekgَ m0ugׁ[;ӂ[<q{y-66c%>W!%R*72";z1c0^D2C9'&³moOeFydu=ztswuGd'?[q]߾}³=6,^H}#2sB3X,a-Mb;߸VX7{=w#< |2d;о Ŝ:z]ٟU(Tr]Ϳ/nW _nSO i璟T2+Jgr<#0CvbaX2~6v*ίԥI9enmꂸ!noXq cNV3B!bR*X"9&d ABX^D'6vtӍ>aÆK/wv_vkq X:$!o޻[oF!b'x,ԏ^|nW-Wk_j?1袿^zѝ}Yk׆0<EyƔew5V3׈wܴiS݌/뭷N]{&95'w&zg63WKd:vmYR):3IyXrxވ尥6ϱҲZ)kTw\_VܮN+Ǻu:bM;}!¨K'Dސ"AC%-06F^B hz"gl;Shѻw-SvAmC=cPI%=lC:;k6S[Fw͓BXwa_rwX-ݻgxɱx{-qB8Ƣ?~\2Ͽ4ywܱ+C=ꤍaE*?3W*nٲR!BtfR*}DM=~H #d?;z^coUe;7"K# =Qa:!싘1[o8Kt(PUG Ʌ^RvS 76a/m8zy#=˱Tsfm6qn,-*SLDŽ6SΤ73WE2R!B䅺J8oYC>yubDYcCXfTRE#rvmӂ!rτye7HƾT>ḬJD8&Ǚ|Z$H*B!DK7[H!DM"CL))g=y(u!#:<36$W^3A9$ eO?:c)[Xs&$qcTғ<0e+2erI#vRH/>u͡}Lr=FxvxAIRgT2+|>\G[T !BL]J% y2BZ!%76b=Ȟ )L%3 =!uԇ ݲ H~d /.~)䍪8gv]wMxoze?0V^C)T{ H]uwBoI)Խ{ O6:?#F,3׿y~~Ke.IHI*B!D^KD(zГdn(C9ɰN#B ?6ʚln6i.DZvQPPގC]V7=31؇zZY;똲8,s F9YYizI$_i.ueIB!Wd)t?O&ճسȓT[M?Ⅰ!_&k&]H'O9,#m[GbbЙ,[92OLfu[uLi~D[l"[o+̊},B!{/oE&HdJ/&3sTf_YT&J5DR)B!D]J!q4>Y[,l?|%T"B!y.!ܴ3,ӆPr3zYf},&sOI%J!B'R*iG M<"'ʹ&v,l?|%T"B!y.08I%oUe+r yF_Yd.I53I%9m/IoHh8usK%~B!CP=| P[JYH2e,i7ʢ&sOI%I*9^9sJFi7ELD1Eqߜ6k"ى7E6!B%O]JI$=dd}LV~_Q?)6iy/Yפ$ ;!Mb7ǯKaeh†b:C̞=7IIB!DGN{*eIZ$t&]3y=ˤ2Y3fH*B!:JE9"s 0 v'~:;<~X"ay%nņ.L?["M=S)BT*Jͩ8I*17_}wh7mn繩7\stns)2azM*INʽ˾ 7wsóe !B%RQjNHTR9C]cݘ+tx{ןnlw?oem7irYaquӦv|ol7~3g)B!H*Td\u?߹ue)\cԙq?|?45&Z//+k޹(IWNfiyѓ B!:?JE9"GRvqww|wBx2k=sŚ\hI 퍶4B!H*TdIe^{w]SXYlkˋ9w{8ca89d*$) BT*Jͩ8ʶ˴kvw gcso7[$}%wl1UƙߞM^L !"/H*TdIeqwS>~]cu==zxߪmsܬ3$/sf{6} !Bt~$RsE2r߹[o8vݟݣ榍ys\/r- {4²l4<)BѹT*Jͩ8ʶ Bysܝcntw?;ƞ&^w;7kv~r7; ??BŕY a_4$/ !BIԜj#lL\w|ѿuwv_PX~r6T=^6E uzMKNnҍ~i> P!#TS-q:T„Osѻ፬2Z?tL{&榎]#B!JE9"IN RDjaD3ǡ5;F~'B!DnT*Jͩ8M*o7o9u鞻ʻnd(_ݔQgѾ?z? oB!H*Td(w_߻icr^ 9Δr_;/v7 w^ MG!"ԥT~~”C=|n̙ᆞuaN>SgmvOY>>཰a2gkB[ٱ{7gά0O9Yfʾ.u OY+OV}΍61oPff+uk)vlH-^L*B0ۮ?{%jqv ]{ RII !"/ԥTrÎ%q?C%2z" A2cSDzw3~[o+pB!w߽cMwv(GGٗe S[ay@y)uvrرC}v\ߎЄO۹r )~~՟I\"tڳT2wn5,K~%jq1;pL*on g$}Yn_B!u)&b&w?*g7HoY".D~ĉeD ` '͘{ܜN_IDATܡZ;qlԱ/ǡ>壌 %ey C;l>sbʱ,bJ;>|Z$t&lb4^nnʍuS:݁yѼ-RD-Й3+rzneH*BR*!.$^>~~N؆Tqc!Cȣ $H!OM6ȝz)y䫱{X1cr+0`i瞻/mpB7^s} rL<\4ODv=_j;n+'Rp\ñ:.~0Gnذ!.\~h "saZh+?/vkkh(!C:3(vL@f3I%DMa[r֫ٻdžfmC']M&\z|ũngc"k/"ee9L7fҥǻI{L7KOp|/LL7whl/L3TB!Dg_ԃp!BI'~$G)zČ)Bd~LRO3V[wA@(%"1bYw%uvؗܺ.曯~+AM~_ݰ7z\ 7rv-Hy6lІ޽{}[_|^An)ǹ \_?muO=x.s59쳽 7z)|ǟS[݃~gH}y9 "N65]Zg.IsLkԙKw_spokNsӮ<|oݴΪYL1+|N ̓q9ٍn%'IuokF՜z. O= ^4Ov]|Sܼ?W/鮜I2/!P/Ao~e=m7d EHr<„Q~M7v'tBP!H}f =LA:Ȋ+.?ܲL&b~} Lzz3tM<1m%aaz nj[&T˹-pw 3z%9[{{]׮]óoSӜp./X"\Z$_i.prKvkxvTww=r2Z:rzܨ䮿$7?)ڋ~Hz~|_1^,Dw~>s_xw_m R&)B!Dg.r]wvᆱ_ :sqϡN;d aD7dC:z*8㴲H`UWv_|aQDfI]{[KkIA[o =\sU؏!ȝI%=qnCYE=&M0/"~9qO21xe m[Bg_u7k׆꣗^O΃uwZe}&J}h)|uJ;TNOR9īOsS.xdM47_ Ry2W^yt{n]V꣓Z+'^fI~7Goνq3_E_Mz.B!ꟺc=:H%PMDG(N!}07Ib6H%"~,#TlGCLD2x'Acx*vkd#Ǧ]} -"RZ"\rlDp,yVIٍIn?wWs7߹WD"cNfpCՒ曱I>$R9ʽ##yL^4?2=}7gz9\iHB!DS=ܴ#I,!;䐃W]Ez!Gz,YnV'E&Iy9/3oadzʳ\^± uP6R}#)'5k)\W-wd[zi_!x{ĺy3ݥF wE?qkwtqv7'c/>эxwt7^+7/מ /'{{щ{K%Bc$B/3N 6ktNB!D.Q א9#8>|fk庑ʦyn<~?,ul̝۟+w9?q{!_| ǭ /1(w_~_zZ/z)g?:P2`^R)BQԥT"Ffcȑ7gm&evzMl;bel?6&eud}YϔmM𨗩c,v;68ۨu&;aFBVv\Q+3WE2Ͼ3CKexa ,D;Ͽ.g].:Ggz>]t!̟B&Go "iey[H*BR*eɦZ$ԗTbMA.C(~{s/=v{qnq{ |ez{ˏo2~nq|e0;_x`ly+^JTOB!D} TS-qI*JRz)_f<2ٽǦ)|d/$V䥇&S~'n >/V2 c dfY^Ó%B!H*Td9nn ' Mqc'1&~O/aH{ ېJ띴*d3TJ*B$RsE2N}  XqO3ν ƻro<% e8tVCðY䊟` _gyt_IdT=IB!RQjNHƩᯄ^nvDDIYp _~[\o!B΂RQjNH,Rz3DIYH*B$RsE2R 3=\SIB!:+JE9"GRX$B!JE9"3Hs"lk(B!DgGR(5Z$tͥ,xZJB! H*TdIRʗ#\SIB!:+JE9"GR#B!DT*Jͩ8&MMsߊ4vӰ2S)!/۱aas*Z V5?[tKgR ߋsT7J!B&77:].%rU/k.k&RYŲ>kbu]c\C$ fJ 72{mH߻͞=3,!lC.7%H"9ۙ7d;ec/s.(Sk{IKҾL*T*IB!=" kz*JoiwD&122d̳y Xfyc<"Jl[aބIz9F,lk-|^؏i;Sڲ &IKҾL* R!IGR)B|0;4t4$2 }m\ڝx\O7د$evrɍSYdeQS9Cф:nJ;Tw*=J!B7C]Jedk3iSYXCIoes=LEC!cS$u 953YDoֳPoӛM9Z;NKa[o}ݲ蒬}'Tb[RHΜDxX4۽CnC7,B\K|}M(!BN@Smdk]na^,{춖ڥg)7p=6 eҮR!ur\2Fʲ7CHfRj@='ȧ$uZbh-eDX]FY2L*{x/FT !"Dox )~!%ҸvsR]7 iJĎxh*'"j^|c"~6G(>6k`cH=o-GY{ԎU:iQ7YI%}eIe~5|5-/T !$o-v[>ړ! u]/{ ?º }xrS_~f!Si^{]v.n}d}rsa,n!Rzڂq>HH2|M]=(leXdOac,X(K&YI%|E*_{DYH*B({=qmn.ko \Om]#.!]VI rQ +Kf|nMLڬWu$nA(A lc҆˔^F$[>}zwߵIY\g'x,nSj^?#ʔn z.9.gjow˖Q*!I墇*~pM%B!wZًm\c]a$#K1a.S[H6J YcRŲ=I9qDeb޶S/7I׿~[jۦM6sQkw)3A[vkuRm.ھleɼɍdRRDeJ!B9^+kW赶k軩n =7ޛ%鳹Iz ٶ<ߦRI) [d7c!L֬gB6#a>nMb<7uvۄwԨB/O>ϡ{GSO={lz(C]]w_( /pkkh(W_՝t a=ӷo7mPw/? <0Nd;H*˫Nr8=\SH*Bz*\5BJT!A4yҧ>m>r ʲY#JG9K3,vw,kv,nv(˧}(OO&VZyiT~t;창K]}J"|H#<$i|'qz'lP~ n W $ %2f~ZeY*i䷅ޞ{)M-3OtxƉPk$$B!/^Kw}ݿZ7.eCoVL{06P&IǶW!Aw:wG^Hz*M{vG ?1rd~ZO?5>[pTz/iӛoϡKφy^C[?׭J,C\96\#ջw&ҁz8cg~Ʃ{$lH*B愷H'E+/ yCOzm$mSvHqǴ~CO w ׅ6"\z><3kfXϱ[M4!~5\zE vEGiTY,Rt^6-KʂER)B|08WD*!^P{*K2Yzkg*]*MC9G~񋟅aPˍ;rRX!U\,a)cr|`xwʰ} Y? ;R'%Rqg}ؗq7a,Yg:dg<v đdxXk,#(DZiO(l>+IB$B!x+7vsP[xdl֫Gș"Lه 2ov!֓q TR,Ah'˔3ezz鍤n΅mc;eNk-:J%{k|NrG@oL,_y޽ȸLQR<\^~.pY`OХy!BJ%"qs!{&n<{hqzʱ226Y:cQ7YF Ya NYs\M6)d_@~ُzXd~ZlYRRIR!:de@z5v[g=gJ$ER)B| ä%Gid}&teT !"H*0iQ7YI%$M9^)8~żxqcZM>홬6ڧy3y[GpMfl 2)BِTaҒo>JM*JJsr{ݫ^{s[y[+o]jSsjkR 7ssfV [B!Ie&-9J&3L<5͚>|i7 ǻמP˖W${I$Mt/>2!\KJJzdA!TaҒo>JK*zAng+MAFC嵇o aVm5Ա$զM|m,Owo+f1#B T.%Ed}ԓTGR6Kb4Ͻ/s/u{+Cq夗=u) +v +O׶ RO=B!,H*@ҒW>JD*9aE_|ŧݭvM{` 郓.m)Lh&MqΩp}YMڽ2I7wyMH5OB!Dg@RVRWRY6z_z==nW^]}{k. a~l[%6Ւuh~}fM--g5LzB !B;%(ϴzJz&<˟|:˽[g_|=3galy:Y'.vm^x97c ^t󎿖B_k?WB! H*@ҒW>JI*h9k,?ռ|PN|}>p-1ߺD!s \IKR_L+7L sq3gt}JoKzB5={R!IHZRJgZIK% AztexIR!IHZRJgZI=MK&BZd]R!&{H"7,ٳg'jeRmnzbbhbge 8.elQQ'8],6jP!BE} l̳aCr6m&wH۹Gdmvo7&C]!kJ]v>\,mL}N5NgJ"jGM!(&FL)Q A>w|W^rÇs'O ۭ~-ɤ{7sHf㙖H*jz,^BŽD#OZd}<>0oPB!'P*Fn &m1vm^{N;r]vr;CcB؎\2O%bDR7GH!uZ.n/Keذ!A8RzB9sqdž6n%[TIg,L@F[NFl}4u8BKy#ΎaB!Yt@T&2T;T;J%B#9 /e=Go "_a塰'XO#RG9 qT.rwn y{tSo@g>mp;vtyH~H%IYO]k~|ݽzr{٧(k_jˇz oNˡs[h+L2NZڒuM+3cy'|r-Ut„ a:u>yI S[qt9Kz9ޟmSLi<B!;*Td C&D"鵼ºI&CzK$#?Ƿ1yQOcc1gSnz򲞆{C!{I$uB멤.V_}P7Tˍ=,v~;3oO;;^ىI=Y״>IPs9tB!ygѤFw;TZ#sE&m/az+yqbI!1͎2a>d_BOc~ 7#'-J8y+-1]O,[O$fL2 ۷OR_%I-Y״Ie>T͆>C+"B'M*=/Ay /Aq;ox. WdzMܹV^y +! "8rc9}á #JyK-_' eSk7.zR!H]W5d4'g.XړuM+T3B!D>Yg*l KmQ*VO;#X}x{~QR.OBOkA 4aueߩdC9mg뮻& se}!%26$x"H>#nGmcvX$O^n7u'tBXF Iݻg*)h!ؼOChۋ/>n7`aI]$d]J$R!drna~ de@^HCckA&jwlŴ7iIRjK5DRH*BOZb\z! 6H{nrW?ՆRMI2ԓ!dyAK}$)%Vw/oR;?٢H*BOS3, IM\֮a]ɢOϷTҫT",,#CPʋpao-Vr20x9߉I=Y״ykʺXL,HJɺH*;n$:~~K_ZJgB!yul轱+Jz(la.[_noҦRirH$SdFny>2k8cR>c=ԕO$d]J$B!"_,zʾ[A;,>'FeM]cͼ+T"=&<>i7J]q|&$d]J$B!"_Jz) w/J6"H[e*= 2<2ɍ:rOIbΝ$)%V"B!b>=Km uS"K!!xyO/}XToR-q$B!"W̛溦 z=qB]a2}{m\*yIBToR-q$B!"_4y>].#kg+/^˥J/N"A,Tn)Tj#B!bǏuiXup#]a˾Njc2I"!J%8J!B+L*sb]ץq;[x|zn eTzT*KHƑT !B\1)+!6s]lq;Dne57)M(S6"GR)B!rIeU\VA*o =ɺ^$7S"A*3"Trj#B!z쳚+x䍯ť6qn>=r^፯7eϦTR+"GR)B!rE<7OTn dWO{m =D J%8J!B/ᯅ.WsYz"Pذ$qo%=zReE2R!B IԘj#B!BR(5Z$H*B!DT*J8J!B/$RcE2R!B IԘj#B!BR(5Z$H*B!DX"RY}#gG}PrN> ):vzgϞ>>gwg}{`ͳG؏c>>>Dzu~V/uP)sdY>듺%lg.B!D*{춚+^z{,(&Z&{&]s7&p-ef c|^YYfIcDѶ#~s S?ֳ嬝V?ۚ愶PrC6,lgHb(oǶRc[T !BMJ3)cz@rlGXf$})7zGZ74mm&&vq<ʰݎ<NJͼO\Yfw}|l$mLi/O(>K[T !BMJz 67{睷"iv$u֣~g8uQqCֶvkw2$m#Gn{_Rپ&&o_7~$\jaz)O,ú'|56SO=Q>udڀTcMv'٢__sL>dYR)B!:7P*MrŔKկ~% 1SJyP>edj2H#lZO!r~;MgX,8fϞݭ䏡%7`ҡk_?.g Ae9樰R믿~܈˺v=M?q[c]ŭ SN%Gido-J!B/:TrCx1o=w7{{8Ēv;};%eX&H"NH6?V^y ]wM}{t'p~n s{{S]+9r;w衇3^pO<[{5 ':T"_nq߰757p2A6_xP95, zm|Ғo_ӑT !B|sZE+_9,H=C$YD"LYgV 3eَ<zEY,7kd"H(S߽{W7m H?ϱKgC]Ȣ0,RDzv?G ۩{-:J%,[J%B!(ܔ#yܘ#Y֓6zE+Ȕu"W]uEx)=ÞgGBqD7Qd*Xҋ7*GE~;nkֶ.?a]VylQ/8|nJ!B:T"\2Ex*@y,"<2uG$%H&yGy!Ye=pԍ6 >,8"~khj-B%m 9&o<<k#x , d;? ˅~΄g=M٢_;qI*B!D~RΛ77Ȝ=oH/!EXoCC=hGo$I$G/&?-_2#yP`"x]Oz0dmm=zt bHLz$*˰\~v?> 6$ꫯ?pl~aߥD2VnVnǔ!'OmGi4#B!>S!eDBXrc,2Ɣ>mD?Jbb:{:iCP~MMsgu>z\&VNֳq,u! bQ?8|v|f,B!(&(K&S#mM=a|%#&yC8>tr<Hk3?iu"ې`[R7f~ZseIB!,Lߤ+J=Z$H*B!DT*J8J!B/$RcE2R!B IԘj#B!BR(5Z$H*B!DT*J8J!B/$RcE2R!B IԘj#B!BR(5Z$H*B!DT*J8J!B/$RcE2R!B IԘj#B!BR(5Z$H*B!DT*J8J!B/$RcE2R!B IԘj#B!JJiI* A*okf}' 7f}>ð3݇)zn)UIKҾL*T !B|QR #7}Ai7LJL7XpOgRR!B:9sf)2ɼV>xD87}T"B!14Dy[%Xlc)T&YI%J!B/P*m+C`g,Sz&nH!Ϥ%Gid}&H*B!DCDiGYIyRLdugҒo>J$B!"_ԡT;oD,y,7&Y/&IXUg}%-9J&3DR)B!EJ)ݗ|qǑnp{챛{=N;wugwG n 7J,%B!"?t@DƘ!|ܤ3dPeD-zYopϾ=,,3toi8v!VvR4I6帴rT3*>V?(훬ϤIB!P*G i=XRzGBjeK:z )d_ayNf?u~rS6hףG7; 4ݍ˂PR^V_}0vVpgqZ8ۗZwx>uh9(ퟬϤIB!P*D9gyʹsg!D/!SxYJ|uǔ^MLdSOqmM}h=cǎ.vSRosx gC\xʍuCXǶ .8 LzbQ?YI%J!B/:T"{&Z&bHRi:$S`?zPdV/3o[cZ(ʐI&n~vJW wq[dn}ݱn^N:o>ͮEvbQ?YI%H*B!DJ%7Hݘ̔aL"j% EʐMD!:IѷZ eN9SgD2G ]=oX(t ]Rr_~9r Frn0E9ڋTfV'T)B!J#g,W!rP9A26ϊV[u8?63 LyJ)ǐ[o%,[7.t/bioE)oV%;(ퟬϤ;C$B!sCƜt7z$y~)c=oOَt";82,IpSiAHI׮ nʔɡ{UW,yk+/я~ϱ[ݫ쮾J曯~u뭷Nm^{uJF*YU[ L*T !B|As!dW{++-6\֦ [=Bϥ _Z /vۭ[dMHd*eh'IKv6;dȠd]Ҋ@nFAH}J2TOe=$3ϓؖ%B!sӁrcFL"HMF$J{N|Ŏ[[i.lz uQy+k=e L*-K*B!DJ%…`1x~+H^ðW ,# Wk&̧I)e@k"H,SRPk#u}(c=v|a}lj(훬ϤmYR)B!:7",#\c9<[H"#r:MpӸǰp\1@g= "hSc0ˎ~'Xq[}T"B!JrcACfyD Q'cنrG蘲Lʘ1%2v[\ڐ\ zdɥĂ>J$B!"_t@T旴(훬ϤIB!:LZrMgRR!B Ie&-9J&3DR)B!򅤲}T"B!BRYIKҾL*T !B|!ä%Gid}&H*B!DTaҒo>J$B!"_H*0iQ7YI%J!B/$Ob9~Gm޼ya*B!DBR(m> VZS)B!:7JEiSi&MMMB!% q/t|A&g:aMɟ5!B!:%K@*yLQ:{L0Ǎ͙3'D!B΅z*TN8>&B!Dd Hs=(6<{g /<^y%wuׄ)B!GQ< e+zR!Btn$ҦA$J[O!B΍RQ4J!B/$ҦT !B|!T6R!B Ii$B!"_H*M#B!BR(mIB!JEiH*B!DXRY ^$ ^$\2OEId}'3YmDR)B!E.]zg}W챩+ZF^ 쳕+,'Lz*/t.J-hdIB!JRٸmU{fRkf=Ioe;IJiq+2D*mk&T+yJw=զJ$B!"Wx'n.Ws]x챙ʵ]&kBKk㐆ޛ4J-],WʢʂRYd}'3YmDR)B!r<)KRs /Bw/=6r_qs<&,kNgTR!B B]q)/=馉4g(K黵϶o$.]f) eae_`%?Cv&T+yJw=զJ$B!"Wxkz9uk跃kXfSWc9 w )ޭ*]4ᚥa5UJa~5W(z,.o7鵦F^S홬6U"B!K?)]om K%r30`ȝ\㠝K5xlGHס{{tu-g)0 rzH+ +F;}^ko<%;ўjS%J!B+v$.e \a~*d{Wq2Ե6^6 vӝ HL*x2lo7鵅vn̙>胰? 빡'O7,3oه}Y,e?߸-ǭ:{睷>de{Ə>P7u2e;eำf}SuSvǺmʝrIeRܹu2o왡vVL?p=Ʊg:8Q~ lv\: ˴)XϱY2aj(;ѾdVs%J!BѹssKye=}'b-B K-)ZJKys˒ ^{c7=ʷz#HۑlcJnY6 cu]]r?3<.R[|W{P 56رQvYLL8&'ReiB;h˩Rj@k= 6Xs]믺8p7hwGav0vnurzBp7B=[nyzJ؇s?>ƭrGnAaCڰ.;'x,1+"?='۵km]±8? m?OqF=Ca5bZkMΝ/t+eZkє8I}ߋKE "B!vD)| G4'•l%YoX"He>iRi2cunmZ~Zt;=3nGm:lNډtsgPVD 8q|N{n0ծc?#=}aWr>|XorAAt{lz~q6ӎ>߷<'?qh;2Zr˔p\Da;>_nȐA:FBf9ƫgV鵥LCCo Cop;g ,g}'7"GR)B!EEpHs_^~mCos("ES[裏Drl?ahe'lO xԃ n bϡWmV?ۨcu֙A<CG/1q\XYfg*O>P' ZH{h#n)obz^:J ҅P BLqNzsG?}6=PW]uEʱy֒J/_2ܓ!NN4!pB}x3N+-Q1Vd㳍6$erMAڈz-KRɵ@L[*1NR?Cqm6ZQ븎H*OsX>DDcmeIB!iO%A6a&7&b" cY}B}jRm%Kia}m&A,9!mbH)"JL6휐. E=3:K_0gCZa_r.?h؇zWcX*pWD^ălSb_ 3![۞O>x;[~!)e\/EI^U fbM9Vw=H*B!DCddpKyx fS qA 줓N$"K?Hq, pAuW eŤn )1e'qoCd^QR:^˳˴BT9R!eL-[~.AMExS+/bXFm~sBh?2sd_ވ@/tpeʾo|-/WSy ˣFDYL=:/Vnr~ڹs|uY߉MbmeIB!ԡT"O\$w&,KgZ e)y.uH!C؇&a=/XG[m_A8}&SV?>ĘKvX[!vaǴ:Y~gꢼekeHiK8.261>k 孝LQwOw}KKݴՖ%B!sSRX#VKo!79B"$mۙ7 , c=S51"&a?0ώ6(S'v&*cjlͳp< 1i"1~+jK(CXO~n,Se;:`RXfJQsHi}h4>CIB!ԩTpl &NI # DjyʳLLg2cj؇2[~Q:MJXǼΓm7ekŲKPr\g=eLBZ8e橏)p a; /f l}Tt%B!sSR &ir|S}cv`m&C@nu񂟸)1c:cbXYc;噧 e9>9SuG(:bǴر]&ԍ1%C>˖ٟhysC]>e;:~;knCyYgd}'7ͿOeIB!ԡTrnb7&L|KA7D!B\Ll.1L,6֫Q.D(km'?e3m>lsXkBKY3 *mˎ6`ݮ͎OWue|,E9v^3dC͖%B!sSR9Y߉LV*T !B|1dgӒPn/imB$J;&;ўjS%J!B/#,/OV>KĒH*vLw=զJ$B!"_̯^D*Hdd8lHdRid}'3YmDR)B!łHe" ^()oRRg홬6U"B!b~R4&/A"aB DT*훬D{&MH*B!DTHe?zm vrH*Lw=զJ$B!"_,TcILdr]q.8toWRid}'3YmDR)B!rToz' GloT%j#B! lbϕXn.!}|tC^&E&HRR,"GR)B!r9~R쵢 ]CKx6p~[B]a]qЮq^(Tj#B!KMSE2R!B䊹 ^"W<5xXHq$ +Tn2J/ݽL _Nߤ+J=D#B!"5.k^&v\_q/WJHUpŕp |KeύcCW칾˵\ze5$J'HHƑT !B\I%=vva'N/pW/d/ʐIIe/=uJ\hoR-q$B!"W&0hg*$<[_le9<؋=ScS/Rr=I҉R-q$B!"Wsny4ҋ~k+ E=e'DF;0ɈRO^TvgzǺ؃o7RO8J!B+TRaJr7H"E $J%G8J!B+$RkE2R!B IԚj#B!BR(Z$H*B!DT*J8J!B+$RkE2R!B IԚj#B!bHeύ||BŲ$F\Q:K$B!"W@A^"IJⅲ"I4R!B Im$B!"WH*m#B!BR(mIB!JEiH*B!DT*JFR)B!rRQ6J!B+J*6i)HTLr5\+>|ɇ5YldYq>Ə597gv:B΋o%khd5O3fB]a6]Ð]нTerR܁P`yc ߧiV~fϞ>#7qfjZ̙:Y EiW`}s֟No1}:JƟbeZK))Y(d^8S+u+ \~?WHJ/4>h5|bM1;RڬO g$L7nhl;oVsM9CotdWdՐy9EN_1`W\/~۹n+]eHe2g*c\;O"Ȩ}jٖ:f6+?|Ə͝;;b23Y EQEQZܜgjzel- `Z辞:xOmY^* F6lr/&A*Tx2%n>(6oOܜY??}RQEQE!YP,x7}kan0x'W\f? \7JJBTO妮ث4YA'ജO>}|w[s'Jv裷'{pU6ɋzb(v'!k%鞵2&=4of28Lݻ5 ukr/eJͥr/"ͤ7|j>a"$kHjce>Vf~g77y͎aϝ$@[&= AW60eɥ-3Im63SUc<)Oɺ%x~),+ F r YsVX:8YmR'>]b]J~~t9mU/?CJPI*Lߕ~Ǫ!Ş^0_EJC5擵擬}Iﵛ:RV)yzmjz/k\4 %Qzű0hW/TzL2K2HeJKx҂TY߇r',k,tb[zc&똵%.YK 皮g zq IN5̗tJݧ{]M^^IgR7sf-ߦ7K{VRh)uKo -rථ̖IXGl٧8`//a͖IaK)7uPY盺Uڧv3e|mCwJ;#mM]d~6$!yd_$7<[$/ɲTXf߬]Ғ<]z K.Ymj()?Fvtz,UWBIenTG2cJN@Y4Yg^2"Y컁+m\%im,,gͳג cߴFBNZ ()i),1ˋe)f!1d/ܺ R#Aa|23R×q eȒH2dG?" eE*y1OKeXX2\J\[&C$dITz+w<㦭=Sii)ϦqSX(\%Mg{̔ er--~˄?Ca+4-f=mX0*nDrsװ42Ǎ{ Β#>D,mTDx{^u>2V R(>^"C;Ǥ˧'IH$2[&CvKb=i, {m#LeRIj&tBldgI%}J?xIixISĠş{)f}0uI,|L"3vDmHbYƚV&L oͿ_FXji0a|UggJڴ5k$jk8#J³eeuYu)ȬrL6J/A* eߥ$񳔭J5 VĂY%-ZjJ(Y#3YǬ)P:fffJ^P?bҍZ kxAVkoz>T֕o{[nd3IA|O,DneKVJz"JKbL;'ZKr} ή8`dپr3Xz qJ=1uu,siу!?Cp,I_V*/)]p@<7ia=$" >K^/Ѵ`.\..4;׬dIDpPϝϿF7 I Z;ZJ$+JLWzЖ5ؿ=l.LFYBiT贖ն 7kHFg?5VkIDT%CZEo,xK"ISD|2EIY ž[!L6 5j>3]$!ődR%f'bC,7^ ZX 8f:c]x<'ڴmMM{Tow04}a6&N)ƿ4ޛ/VX*7)/ndR2,T:L}^ɺb- 4s -iLRXrUdeG΀*כ拒X- " *R0ؖrz]o|Iz})Kn7~[8v$ YŤ-KeaSZ8BYИr{&YJq\Vo+4Y8lI+iB墌($ +Kg)KLҦR9TT[$-K:YmT!PTn2A[ivӘXT)K i,oKz2EoI$*%;t4JbcT*i.-\I~.KbZe!sM}/vUggJ9ג $J/Hm ^HTW* %iM(T/XKO-dQ$ێ"64Rq۞1 i)Iäg>ۭ\C?/H~i]qή!-X2;|}qЮ!5g HI 7ܠ"GImi*Ddm|݄#rd׉bס&-Ns{Y 7<}?̔1:KKڧ2JʲT~K^#l&&_v +T΄䱥L@.@2֗|mKV2i)Ke_;lʽJ@u痖f/PJ*5hm@f$>$ "^jJrQ%ͶdoPROdn[J1H:T1yO_d'rRcL)~Y$AϾ_ON%-̒^" 9 JrEH*n-dh[&\ˬ6+'ʞOdކ}3 &{IY}X&CXc_ƍpJwR8.I֛X"QN",K,"2@!R{$RY-Y /Q^Dq HDiק-p8N+I  /y) xFL:BqʴuucX (4&EGUJ?ii&!4J>K RIj멜_=NjK|-dH) oσ)˚ݼuИ(4ˤ>X@Z_N]S:^i)|~+)+}eD;"SeR+\z虌$rM2tf2ca9N,L|;ұhn7KVJ9iIGYLm2|J)}6d"QZ1$c] RI/eKO|.1YmV:nJ[I*⿄2+iYQ:v.|vिJJdeYD9{lBz&yLA/N$靬re&[) iaquDRIE\0|Je&22ITI*˜Ku$90N{IK φ,T,0 M Y8Y禴cZϦ#HK'6RUx)[K/ņ|6.Srz+L١z&R,X"yiIpB寧Y P-6,іC* F$&*,ص^ؤEuH=+ya1Z֯i&+fRΒ'ȌZ-G/T/u5uR_KA(7d(K>uv ֛S:l%2?;X.IR򳑥mU׀/bZKNg瓬z12@OŰrkL3l)v Iñ[ֲdltkq&KZJI -+}g>dTFۢuʲR4eװҗJRɺD6-}+|A핐{;IENDB`onedrive-2.5.10/docs/images/microsoft-auth-display-message.png000066400000000000000000002103121513710110600243400ustar00rootroot00000000000000PNG  IHDRIZsRGBgAMA a pHYsodIDATx^u/x߽wwٽ7z&7I\رqܻM+.ƸaTE!$#&* P{ /I0a'3gΜ9sfs WTTTTTTTTTTTTTTIOz ^ggzm: ظqc=֩TTTTTTTTTTTTTqc_җpo|݆G/[<Ӷ'[?ǫJ7m$Tn[֭[W\CiyslXxn'ЗSeO}Sԧ>O}C37n\'q׌o|k-iNoV%\ްadC 3<0Gydeܝ-X~**ndkmfيWRԧ>O}S)=3fD2IK ?,qŊ-J~ &F#Qv**^YMdyn4է>O}Sԧ>ϭņ֯_@p8i`w-Y4g[h_~RhH}֭Iī8|v3<()t>/4KM͏nA^4{}/O}Sԧ>sy&yFi[6߰uv7pW<8LDIx'NԕZ}gyfaIK"iY&(~DvMhɢ3iC>O}Sԧ>g T7_AoX/ݲi[7l,{h 7zx wEZȮ܋cM?C3 B/^ k**9x "[1sYty_Sԧ>O}S Zy 6mܰiæuoKν[`…%K<#Wo',o~O $C,A Y$xXDȵt OcωGb 3tXO 5m=ܢԧ>O}S fs**~znh&wӖͷ[%۶Ͼge[zp뭷qw}~a!DĸvBw%?#(`Sn FOs84X(TT< mErÆ vf6y_Sԧ>O}S`6~'}Alܸ^-޼y<ٳ.sk./+&L0u3f,ZG(/)tE%ôo8dhHSH oU 'cѥMa**MHI2_DO2O}Sԧ>sdm=_'s#pǶk[ TK%=l{wo }ťFsι $7tӜ9sV\Iqs ;⋂f濕!WBJ6 ;$7~kZ4KEų{̞W>O}Sԧ>yN<&mhӸa"d˫Wjyt7 OFtNǍz1{0tБ#G?믿Χ`3̓ߴIz鸻M@:4$c%J 6xv &pd88΅Rԧ>O}S $Bhzz|R =:~[<묳 6v뮻{陵6Ax@ mݾU;(bj -J t%z**Eغ$ؓ{ՋMԧ>O}Sԧ>υ9HU()!lWѫSM,ZG!.ijrC Edg}\ {M|zhɲe֮]~c Z "TjEųs[ў;iÓޚԧ>O}Sgzŷ28yMzodΥ &$ Th[Bga2;cԨQ:sN?}ϙ3'WVUc,X@LԾM^AnINR[ATPvYNFRh{NӞ'j;O~e׽8O}Sԧ>Ϟ@dmy@8i6BN7[BG[.X .{3 {ƶOK\4j乧vĉ#8W(' .4ShYC=tJN5DA׭[?k7z=D8-D*]X$n ;-ZT2hD{0T@*2eժGO喛oC;h;~E:B`B8 f͚ok4fGt!o+2 t,C7EƢI߆S2Oٶ7t11,e@etֺiG}T6Q Z@l@Lo]67ρțUԧ>O}SF[j ژy%/%{l"IDb=ְύ,nVn!7Vʗ۔|5 bc 0ᇛ9|u)xB7t9zt'~ZS'Y|_ФKV^//_tR^Y4 ܽx=㖤I& 0@.I2}q4! m5F5q$t!taRMR)A6e@X#:t%Oq7SkoV*uW_و>z|%sλGC"t!6o޼OO}SOH '>ˁNeR/DWHC{ZۀfXB+GI]vcFȖ[Jkm $ 7W={g=:{% eiӦO4suKG^{BuҤ&O,g5k?a&N@w1dtқ^N;'.^ʕ̫!EdrzXءz^>Y0ըF_3d4ae73`!x`΀9It /5z9V 0`̙3 KcQu)͍zՂ03$7-[D' ~N:ԓbXp᭷ZE~֭[ Oi_/\xŊGL/UB>OrTBx-O}Sԧ>y¹TxD6n]nO舓2IVhC^=O"ؔ7^|UDK.vV=/5r-@bA4>nf|W͎>? <w|ycZL:Urb@v]LÆ oUIʚ,}e4\7Otٳ5k ̚uC-% z,Xp7\{V{A'e3g޽`B7pvZO6%{o$B¹l2juW ft:ɘmFfʔ)d1iLm$MΫڠswy'1̙F}ig\p[o83UvM_o;w!0[x`Μ9Vj"SO뮻^~}< Xh孷2aXTXq]w{&cTϖᄋy&׎ju8qwah\lmdf2 yQۡ;pի1s`}𫯾U{ z=^`Xlە: 2w pĉi '.X}Sԧ>O}$K'?^,-V G'H)L+BqiTH>ygiLJB'f ?ȟiӦ_8uQwq2(oFyB[b%yFs=͝;ΜygA<\b즔~ 2dH6'IM`Sh#!s9gÇ?.\4r䨁9jc4h!?$0'N"#i3ϔESeY{^O0AuȑСC(I.L/ѣMgĈg5 0+Ɍ?Al7o>yyW\y晿5j^@o9?яA'^w5s|^d&]}ɘb^zq|.!C,L2l3f cE鲕rO>e̘/ =3리{>|Сƌ@y饗[O>^{g#x79sŤEvQG;xLӰaä]tyGꫯv$e7 K.d?ēcO~I'rŗHv=ݮhed9~*`Vz=M:oY}Sԧ>O}$l&\xgq}5_ L"OhOxH^5H@b~.9{ϧLA8-#t1RrD:6Sg'u]fRI4Lb4~Aw=/Y_l磗.]vYC.`\]ֱc/.Z̙#/Za3'OҪf:'Om/ݖ.&ٓ= JL|s12d>Ie$׬YsYgM2%g&CǤyoӗ'?Km)ju.Bܹ8qkB3@\7s-7zɧ7N:jR$yaq\ZөvhhtFrkcnfzȐ%m|r)!yN=|R0eʍ2SoM6l3Ϲ+ZIVgϞ#S㎻x:]|Xw ?y1&Nhk֬Co,Z9 =7p_vȁ]}5F @`WR b3>`/5JTԧ>O}S="CSX("^p'tXGVsy{,+^4 ZM{v'_> %%s%}Otԏg^~UV>{$ fr+ʤe˖I&MV^+q0aW^urѤ[{ĕҽgܽ)trZ]k0D~RJ;=́2O// IZ3$~=Y5rmr;f:t;y;p\uUG3m4v(m?M0#w '_eO&}M.=){补?3f̴Y|xԨѩR9}-) =% ww9*{Ms.G>pOڑ#Gރ>4`RYLI'O2xP޺u-cK>? kv$;zwRΘg ǥ ˺[9s>w<| |W򗃶l6k:[)9%K3m0-bh=p1c} _4k$2B<7>>㖒o/+/sĜ~UI窫&̚uo+Vԧ>O}S=56r1cdѧ}w-ZبQ&%$&m}OWX!VZ$#~~ @}*2US ́G='NɛOz,?)D8qܒ;vQcк)ԩSb!Z1%;`Р!f#qG(OiaP/'1,ip 77 a2jZÚ gذW_=v_`I'?B&0a„#Gj+uYӧOL\nAx P'|2Ù?O@xsmٲw11js%]cV?"}Y9)7g̸[ Z}yйqÖQ#λ¦WAKo].h2e3rw_'fҥZCgwu'syc/\qU35K~ .'vn4NiW≧H SxigXsکgzl NXV:>CFJnop>ܢiΜ9lz_ t h%И)Gm5K/QpYm0[񨣎>~AC 6lpôkeէ>O}Sg{PWɄAsO?}ԩ9ss#@XVIP[Y~tBCҗg5\uՄc?pV|De˖o:q+O}Sԧ>{ڔ?oܸ ?GXSl"9B1<}R\-^IӓDÎ@`SiӦo?brO595k9zg䡇ok@BR MrР!_m߀~[hw̙36tЫy'xbRh\3шҤ7O}< I!۠i@Y:Z.&5 H#>򓟈i}tKdkENRGq{3 ˦74ib{:s;~„7wOpoԨQ2UI! )ܹ8o;F:f1\:W9p`\0Nfx|!fv\s|8pP'nii Xh1z֒LyҰc9&BurIoٲuuW\q eףF#1~>RY^ö 63zyKIJr9*|,+h6)LMi|qFi:cƌ38F|֮]+8ѣ vŗ_#7W\{u٬?u'un7xәg\ЁGs#GۧMvGc,4i]1rHr^nc5sРbjƍ7٨=ϗ6a… ;s'vla{ =iE5bJCϝ;7?O^H@rwS]t?3ec,_O}Sԧ>Þ݀x40M;p$kMm+dMJ=uK^q7x[U`,FNudӢy]ohtB73s?w'?: fD YsX ۨ`w%ƴ'U^{QnO+˗AiŊSL>C-rͷ .Y4ZDt-ZNm~NjOElY[n _?U2Uc=nu@F6FNvҥM,شӦMk~ʒ%u굌ʫvlӈ+_ۥ-]wuUWk׮㎻.J̙k*|_PϜ9kGΝw]3{,XHx9F;-k6Go|oY*yOkڴkY͇zHrk} r#G]}Փ'O:|ꪫoh4Ijyf͚E^*~4{]i|f'l4e8eBE#`Bs)L0%Q٪O}Sԧ>ϞډTAx?kgavl Hl٬ YP-Nlb6m٦' M|I@|?яǍǟȸv5s8<[`ShxEn3f|64?Æ ?1Vu~ XuqKSI*)t䱡ejX'a i8!, iki{`,AchejNvM vsi2TKhȠ"hdL M + ="﶐ P~;'<\rW="*ܻYBD&1v;B cƌۢqУW>O}Sԧ>{ҳnhrO) ESeOa 8rrcU,[L)kSG .:~4k]xE?ٱ?1'pqO~Gp SLz >ɖ`'3gj|ι;t!Cw}GLh~F.o*455ܖWRCDa2;Jډ6Y*"ݜ0 *F,f(Yjƅ$J#~K ~2m<\5tCڎIG7bkQ6@(|5Mim gܹHҜK٨k;B:)4= .Lw٪O}Sԧ>Ϟ6J,/@ ~kglf! %+y?$NR'K1IWt{I4? =kܘ>91M>>k3q~kfĉf͒xǫ;C{ShlA4 @⣊Xh7|K:@U1-*M bhRE$>lԢIzȸJ8BIpB%e܈a];3 :e%ch֦)+,"٨kAX+"II>E "j/=:| B/"FBxJ֬YUUԧ>O}S= čJE?t,?bpUIի98-X@I8Nh׃ve \T:d,vBikZ$zmbkr18lv$Ǫ Ղpt)Zdp UES.L4&d08 [RNIp WF 67z ] (#@Rܪꦕd(aB:"R0m||{!:)tޅT[tޯԧ>O}San gOȗԩ{6vǺeE$JE]@KM\Gխ)c?I̼Ix8DA'I%}OJHW2h&I:&Dh=Fmm4D,D4ZU Bws@Qݓ.()ЍbL)UD+D"  Bk *A5.2iM5h;=1_#|d:*ASa*#~84rO:2(D4}z~4,4~BImH ͮSPRQQQQQQQQǢIoha^h3Ǯ]6|d˰tE4t'}jJB_xo{ [ܔzjY4 !H"TT<6F''ٮmF^u뒠IJU5kOǝLeH k׮헂 iNEӅl1Ho:5xAmEEEEEEEEEo1!ɥNKlֲ[j @rEq=zȨ-Ir(LEWT<]ւ*";͛h+Z*ZS芊zʷMaFrrM$^x12XЏ=X%tE [ˮCdxx#M[QQQQQQQQQ[^Y0)I~YFR-*\}e򜊊_u6ҥKmH Ȩm7qo 7SN5~fd I]мr**Vlk͝J4`~ǣqٮٷ(yYɖ{d;FMXMIHT, z'9M(y/~٫rTTTTTTTTTT< NׯXɢy"[|ҊdX[nݎONlڼu-7mݾI6s+&)؎6mr@'{pE?PQQQQQۄ6}nއ\z a>t넨ټys߄ ;)m[6o7ݾuc9nV7s~]W~;x7( HZD9_L cAR-[Ԝ7)X)zJx֭߶m[}mmܶ}c;&n~XQ +챠s?o\jU)y@F-N%isBvN=b*Qƍk ]s)nmnڲ^6~ung۷ln,yUTe)tN`'WBίoYoذaʕR+******~Љ;_&0T ̷REna'vO7;)1mǶmd'??V2Ltm޼7͛7sC  &?xD%ԡڵkF'Ċ,&M4ydԩSMvM7|ͷz~wy3gμٳg?bܹ_pŋ,Y,GBdV Ղ')to {p ؼ7=ugoZg+h#4fۮ[ݪm6o4۶mi.3b mݲeKafhejvw zATFO4!$cŒ670;L ߍds;KtHF}!_ַVzqia;%(I t|7nr ӿ|ѹz5Uk׬Yr*5ӭ4UÄ"^].1nܸ[8^xa;m?@=K" 5͈v+J=\DrS6º9眃9~xD@SۯAh3"aqҥ ʁC=z4* Ì<?Qd2* Dz"雎pE))2J^hFӷX&̶&C#t/dq4Eh(24&">m:.Jue7#QqL u\Ch"A(C ePL(U(!"_!1hhHS!E[h̢ 2M3AW̽{|:[UF)-*"oQ-e=uZ, 11;3%5z"TdcVQ #PF,bERڑQ;I]Z1#"c15Ehɸ8hfĊ2ZՌ2Rk+9~#,4N(f{ vd@RO+HU0U#F>~!8hՈK "cA,4F=sW^B^}p 7xzvZF+^`D|衇.]*Xr7<$&OrʕG]zJWB4ۓp`'3gCG|kA:/vr\CӦMO=a WB1ⓟw][HMj%M]^ح0w=CW#bVL_(#9n&U@pNFTКb$1EUHTAͦ.h'0Ui%U3bC{[ݝVmh9؃ hQF[z(U(:j-4hMfTIk"2fS`2}faz$]A  2"Z_&jDtq/":ҏFuL/uk2]К@S+i@I6 dݣ|hT(T*ZMhΠTZ4(JX ^P҄3g1VHOU@TYf;sy.tBh'B(@urZ"*DFL50#~28&5a„\s-d| wyn Eϰlٲ+V E`2 ~c *b%ޠa /*1dݩDҨo]x>zЗO|S|wI(LvlbF ɀ`ӦMc}ӟ>;o$*v҅BD;f{P `B){>~{߻9`>og'7ḵ=~g>6sfK}M[oě6?olW^ګM2@4uX Miy Yzزek>5n^{?C u!_G6l!_ڿk_@2)J*v͝BU.җ{z3fzG.]>ip׃[]ޮ|"=q3c/|N<ŕr*}Rtיrmذ<۪BɁq$x+V<}YŠ@d/! N6;9seN)Pp;Mʹ:skRΞ6mБOyDPv}7` X'0RUW]5gΜ{7Q"D'~4#%158:#vdj$7whc>}ŋ7~4 *}d2eX\3f̛+0 cҖ2@+ ^@M䕒TYa*g͚t뮻RIm֪V \BF)+ݭ&in֮(&r+fL]8$04Q5oXnsId#j5VYT-{BZxU;Դ!訅(`T;h^R;уC|΍Բ{ {Lӈ7Qj4J}m-'MAuƐR^aLX\0ڻK]定`K^8+&>APleCa,DH ^uY[n˙ʷl?*%^d^Z͋ @ULCC~v+_"LG*Um5+qHMwWjco2{Ŝlr;ܻ7墋.!ISw=|+_9#-5>lH,»t@0a) '/ꗾe??8þ~pw~#~N{OѱeܒoY⑍7nڴego{_◿^hҥ ]9K|w;s?O$Gq }6U7n3g_<rWBwe_il~fAyYf~K_v9!/=Q/l< @7ڵ5/_6|HQG4t,$$jLuyhnc7٭($6R4I$PP(K=w| )0:Rŗit щP@4 tdX !>Z.h-:0h@M`BdpNmƌ)be3DP4 䄷 ;[4IZb&,D3բˤ;Kx2#I-gl 25/f8vyT,ŋEtIŧB2&qP Xna722S.4{'.Ɠױh65gf͚hUnaא6d^ 3G5`Ԙa69B{,ԅٴLzijitHsuQI NF#@pm2:m͔)SnKlBq^)4@&!D`.J|hI ~ J E^0mH?o]%a|_x|W'['ᮻfGqn"y,{ѽ^|sg~StQF"[=o|g}D)?~Cǔ m;=,W/ٿ߾䪫3nժ?c=7O dmB2Ц y%:t!|y|&ׯ]l鷿O<ٚ$R|2628),Ԥ2(_4h#螦N(U]{Lbtf4WFlnɅ^MH*tJ CѤ0%1cRHExrXOC|4"T4֦|TњlP&P&ZQN,5H/Ję.;t,@c*S+qȄc zuQ$c"bRt"` ]8z_k8l "o0P@tƪ(L A&bŋ#J5fwa%Q4nF) M%Vα"-KPKn`=/[>reF/V.F)ddA9,Zɇ"LU]2MёD9,+_㋨ 5=(eQr~Aa#'g^Ԃ!z`^vbF$iaC[ЏRLaUI{IN[ ƻ}ZtƏ6CˣEVW3gΤo'F~v%3NF׎mBCƂy7:ާONaЁ/+ GF>&z݀Ng쨢9%;- 6 \MN* Q,(Ʋ:I}n}LufS m"\ŞCH2,8I~=/5ԫj:FgRVZBX/%ה26K7jle՘dH? iYG/ &Mʯv2ոCh*4BsI -׬^V̛@}?ĥwhGsXvozӛ;89CD_~o2Xнh!rZ9VXQv z^6TEQzYgoxK_W/jR觰 +ogw)w~n>DW5]3Lb }Aq>{ؗŋZ~c[o}6n>I t9rAĆ}s'Vx gΜuG{zcM8I,GƼl'4Y8zCm 2N0(8w8'M nwۋtȞ*(iȟ"`mKcKC__¿lٲq3M[=3j*[6l6AhӦ riŝ cw zw8P0Ӻ`!6淎8(gThD#=Ο`yf]+; ݥ̱nwc8NXJ"o $wM~n7a#>/,Zкs%-Z<NҚUMɠDˆZ!k;jH3k .ͭ6?3\Y|UE0K t6Lٕ/p}utchڨnnfxtEXNOZ+"_\Ԋ\fiPA袚P©&?bm1 9H? &Fw1<\3Cz8,[bMsqѐD`VG_A[50ϛc1Kw4= EC>@;y@Xf֌g& yUDis:embiFebj- QJؔY|@*XGL,o`KzK V5GCZ902B<)24v͌ ʽ! YSbTvxB%Pi7_k{spxX b$6L5&n7qMN~~ay &ް(45jj^ vfbKQ/X:r 3'-@FI=6BUK]8^6uB}c \kxnda/Pūd [й..|^XtT&eZw{m'|DۖBC¡$\ɦSnClC0a)7s}2 8 &p!|cф.Vw>++vXgf[o|/~10U!1WWU/xAK,'Lo}綂iG5UF~]FNz׻_DZR~#- W"BMNwE^ojo^e^׿mfjSѺik̎gbٲ5s0z_ַ3:z\uÇs)M~wg H':+v)ƙ,te0A}t~dZn4~LOh՜%x!-g?YVx@8zUP$qt 6m'CKF{߁Ƀ>>ɏ~w]>]`asӹҔ\@^5Å$kq𱃾tWfbI?ܩ.K<ӕ)bXDAo&0i$%#O^v}q1WO8蠃xc)ixQYiw|e#!J.`Y7--[6I=7_˿o|1.3f?r 'w IE~|C~@`_oΖ$b;kvK_~CQ}{^{uQGu;I_8k֭۬[ni2C?nYwߣIju1xkٶ?Ȫ}E/Wo7u{^׿}^׼?ӽA݂SJRu+]> ɪ?{晿ܰJT#t_?s|;Gq':e -mڴe֬Æ2sx8c671U_:k'?scR@I l)q9rwno;ٮ3g͟؆P) _Xl6] ZT0bS ujkA:$MЁ&by.~c% A%&j)qnM$a MHBxA@T[Ql;4L*ўp~Uzh3}.2.pfj!` Tr  E4'*I M'6#$!oR|Y]>VG ZM̎UhNqqY93k٣q\8*JHiO[;+rgR[ 6`Ze}bF±جnܫ#XSc% ğȟb{θǺSo̳u誔3M6BGJbbMV]:Ъ/͔JNy+B6w%rU3Q28&eI4Gy0,fS1og-ؠc6XMb, l| A9~RhhOf^L>5÷FܞQrخz6SDxéB[l\J];5 %q2AYRK,Yh+2ǸJ64(rn&?l&x3ҋW_ | J@I!p2t2%Se~ ڤc .bwE?яn3;شIv,M'Ya Z݀kOsΑs5GٻرCM[̙s]xB˿x?/zы88ɜ =A*NUc„oz޳&OywsΛ3gqR8mzYVn!; r|xSE&2s²9 C~sԦ4eͺaÆ>8tW<p]nRoe"<͛pôĵ; ISlcM̅6MJۃ~DˇX> ACOQ NZ26:l3 ͚~|ӅcYh$$Iruq4մr#fA[5ן 9Wl1kHbVbϘ1iJ' /I;N5 h@2YLƘ>UJp K&hZJ A'[4%J^jsX$8OQMN&h:e׋8@N$EӚڻnh>W=[a2OZ Qv^aߘ3_Q-9vS*e..я~P8iUVXyi> 2LTG/|mD'͙&tʩ=['t ɕ+Z RwL|{?ꨣ7|uM>?tAO}Smn5SZM]&m2ZYPEJq;qD 䉹ѓB'(-N *"@B 7 @ޠ aJb)j" a l?D($iS&1_!N-^7. }G.<5nb"]s!l"6sYi5/^V( Y $E,T@crS߆ Mp/=L[v&M̪/X5ybAeD|"L"(dvlYEEgmOnd)_%y#cљk6-O7 '6q31QBpIcZL%|&Ү +aT+C8ƫƼL0Uq>v!89Z31MjIZ;2 'bI;k'EyrF0o:vY%:F. FRJSV~f} Ƥt@ 0/3YGs1wRE { 8dQ&h}LrK'AiMvmRc*ڢ[L߉$IiUL dFi#F ClZZUи6 cIv~v cٖ*kJs Z '2qoN,/'UxtR r t+p\acv|c֗, կ~mC{g=Ї}{/Ogӹ[6)!4gN_/| ES42͛xⱤQ#}ktOk  oĉ^7~_ƪ mӦ6FSm݆ͨB8"~ 6moA}G?vFEdFGX3^ : t;K 4(|_\/Nzg?.{HeU`Çӟvovb׭kR_jR~H^Ȉ/]uՄA|_6J.Q.)X-h R"4#Uz m܈*\]%9B ![ NLI31'Ec3^4LJx=#v 62&1|$y\'|hz#rc t!Aq (L%.H D,%#UNx'+,g!{lRcZVB*.I2@07)m0,ż8fܛoVe 4-hMcxLD!Tr:#CR*6"]͟ !s!hyN:j]5$,ѝr=`FёpB\ʽrFLX$c~bI$Ɂ40/[:2g, s(aؑ~%sްO 8&e82/COŬ3rHBK/(3?ܘZJEICll@O32BTSkFrVn4;pPhbͫAE{0yh#oV2gx2|9$ɥh jz6Zw#o.4f`AȆ>!D^fp6w!Tɘ&daZGf#U D ږTU5?e=%~C4aS6(050a3t4/2F&@L+U, mha&lP9bQ z2_ c1q;^0A'10d6L{ߢ*g{gG lVe-xĵ2b竲khTeuT̅ .KN6͌D\Sot9ۃ&b05v%dAUm&ntSEB)BSc*bĈ3 rp=1NXGs"h jf'3yNJrRɶ0@~s,ڈzuejc-aiafڍQ#]doX8fi2E=g S <Ȫ7qg_Q\V|yVkB4ȧĴ ~qW<?/G?-peڲN]Fs4Teίy}c@2#}]nR9Mw Wս<~wwRw]8?)a;ŞB/k/;bĨC xC 931`/ :>7[;=w q9XeϿf 7}3񆷂 zPzaZkQE6(.!@ꏶ5}}?1˖=Jɴ]nĈˠA5F J*80gw)+}glM$$me>3CE2F5jxtÆk֬3u=*7)SO=$&UEs7Jf SOu~ _+Vh[)H*aGye&LEgbq%"iݥB NP WP*bpI f? Dy P,bf&y=8(B ;DFdAuțSiQC1@{yLegD)7e.ɐXF')%̟:2M94=q`䓸M:~xf[Hry);99DDYF>+[٢Çg\W\ .mʴq> de$I᩵ӛ;mZU V m՚KFwOIڀ ,qزx0EO6ؐZY4ԊsJFf 19>OaV6o] 5s9Cl? M9. g _Y cfӋmV21Kc8Ⱥs&OlK=Ir 3V=l%.KgFBI^dƛ&1j8^7 9|Zw26mi\[L]s%/+͂AɋqY$~`d8Yq[% N+>"}'I/2o^VG:(YnMH`k!hqaaD.ychu,%l<`oЈ|bD+]NgF44O1m}o^eb*wy[aErŏ a0wǘfw"X"fMȷ G1ѣG0(_9yԌBL&[Պ/ϳܕl otzrٽTr!uG[&Р m^saY -648޶l0xe'Ni\Tg^h:hNsq٠B/ӷIzY&3|~n~[o]l>/~_W]~ԩ7wݜnXh5Y>eug?SvO~_5W~7kNwk&λM2ܗ}+\E-'ŵ9s{!޸yڦ 2nΰ3gWUz7Abj<^{F>AXoʡӶlwZ!'8:I,<:-.O; ~v P'^s͵^#;W^yg?%NNVbWN )s+$x'̟?8k_ڏc 1w@ ZOGO|j޼rٱ"Zvmܸ!Bx$s'QBvUrc^XZT]Oթ$D.Z0mBRG&GpAtڕORO.rt"n$tHd욗y&#Y/ H7keJ (zT9"'RAg|Emi2J Jb ~BCq(0įi%kL" SGA w1Xi\CC{E)$hb|`C$xs24.b e5%b@"ZUq밐L6"hED9 YXf:IipDW>sWՑ a pSd*[GYXt.5pʚ&øB, 3fa0,?#'V%4Krc4KS|B)JZ%K#I.C ܋hy4K\Df(=8%GA CLw6Txbt[ݢY_K&,6|F,q{=l=BZEr=4.ւ=ZMlȤ\Uvc:y fc$1L)?؟Fd˭rh(uv;39vF1*LPf5.X_Fhbtd'>QꮌAb, {lml>w.1: M&޶|ṵc H4d[@q-`ݍK-vA)C2t򶡕6aCguά5YAmN[X\dY~rb a݅IbĈɱ<JU6F($>D'dLU`? [սԤ  ߭ "u;SɡߵMhDOh43iR 0̸|I 8Ub6Рԗ=j%)Z1@fI>‰I8Pwtb&tBR16:%,!ZYd*{0ͅBJt ͞Й/A؆IЩҙibFNJ2JU1Ii-nъ0)MYnmlyZcVšP>N&RTi_2HcA^41tdJ 5B현CɌE3h@ЌO'% u' TtQ&IU4ӡvJkOB$ġJG@-=Z@f6 D-$ )QD?QtӧrӮ~jt7M4yڴ駟~k_ڛn0bS@/S7bR^\л_508)EHR_]l7@f3nN*Ⱥ2GXZ"e˖d)+1G)s+@nW^qƙ} dkO׀.\4kTur~}#gEw}>tn 6z*&E,Ě5l.ҚEU,|\]ѯps2U net. ׹;xʕ[0:_ko?QBÓV% !BSB GwahT|G3A\#hH]0@Ie;k11RY̸ᄩ{&e.1:L$pLPLeVJ+Z5D%NYfBDVbE'>+RSU֜f^hMV9i!TEd@.p} UGPUX;Le8X2;ӥa*KG -dEE*eI[ъȸE݅"L% `F2e^̬ gj֔AFÂHSzU5=%LSfFTCklA(-SeGXE!"TN~\ CI%aMJ)~NoR*uG_CCL*C(C@D#b3*t# ^!0#& q ~x]sZ酈 `\2Ӡl]!{(MS^!CBH+NQИ"hNšfL'L%rslJ{|w]{oyT=7_IrlS<ЫcD5M|S^9˗iw2#HkIdes +CbyLM*k4/QAB Lt3ѽ;!Bpz}[R&J/S 3~/z1A S-@X@5{8!J].DBC@3RR-e7QЋ-YP8DwA!zqR-n_Wk_jEp QhU@ޟՅ"#nf~9AP!/pz!rRvsЋ_ R „B]K U-(Vv|讆 v!V{^U^B˄ #RI&IL/O~[Z -aEsq|/,Z%fhM0U Χ v= A5dVBtr˛O7nhq.]jD`X=geYmz{/3d|M+*v [l 'Noͯ:=CkG7W ˱|ԝK/"5?kWY]zi|^H٩ܲ@Xwt T[4r#ErEӄҞyݺuf5xQS芊'Yt`xW򍱉3}$H6Wnϥ۶wéأ˺:m$:#qyƍ;ˬud555Jtћ6m${Jk9n~i"֩ՔY>HbAl:=p*hذa9WĚQQt_ t](oN^:qQQQQQQ'\aVEonٶeڤx^x-tEEEEEEEEEEEEEœzCyTEEEEEEEEEEEEE4vK?p>)t;̶ O- Hc7mڸ~ׯkn2/<)-[6o޼XVQQQQQQQQQQQQQA.YK,[GV?;n`/Ǐ}~ȝA犊dv˖M[mٲ_7K {FR芊8Km>grQiOEtaUTTTTTTTTTTTTT|e붭[jE{.zFS芊"L:s股OBM+*************v 5%bPS芊]R5%BϹw|B$5z3ds: tM+*************zz=ΓBo+*************zo = BWTTTTTTTTTTTTTFzlM+*************CM+*************v 5%bO =}Ф۶oK={.8wؚBWTTTTTTTTTTTTTAsSS芊xr =1 `N]S芊bPS芊]B[BWTTTTTTTTTTTTTBeǖN7>|Sݜ;ALNt+ (he˖-4_Z{5?CKhv}#~_tKүoE ݹ TdG2wn^:U{qL_BRUB*FI<\7Iӎ-WE/э~2˱ߢU+Nߦ^];_maHF_%AQՋ~.v+N7o]< n^]vckTe[^C2;͛{uW=#NP`G~`/WQ^ְ#5@P|@aݭ(ޑ@*hP!EwoE1[lGu [O_1& rﷵup% nRew- v$+5Lײɞ! HBEFTuD/+V|о؉|R-]ww]CBTD&Let)"J㖨 3}"2ߑ h^@̙3… qt۫IГ&v+ )0BWNL6FusB+D,UHkcA9s8m Q1qDb$QLoR-%dh{toś&BnݺiӦٙ]t5=^xg2ew+ 7x駟U%KhF`fD/hRV3k3(UݣұfAmd,\SSZÄFQ;tw",N4Z84h"Vnø]XR_N&8 "Aӿ.jf|SVh:x>Fu&e. 'c8fdRB.~B ?^vB@i z8 &DP8 Q2 /SҦqܶwPoD,Qo zWWF D -(M2nA`E MPzWa6r Ze혝I!"Ypu=/|PZ0K@8]|1t%/yLSVkGUqu'LJw_WuFjqꩧ)Cw0 lgehUV1($>ts~JDOӭEi-Ҋ4diJj J!^{]"OUHI*E-=:]ǼT4)Gf' QMk*F*tAGIezAm;fvC4E 2!shuiEp$!NS4A(IY܊?ɽL3D7ךrHQp_|#rFoV_%Ȥoӫ[l2J/¥{jyDVe4 DSi=|E J4A&t1"ue咕EzjGV@>8S1k׮z}Mo7 7iU Ai*ՀҊ ̨MT#@RUFh@S 3%*+]z'bO}jŊ^A7]aM`ʶ,%=@п;kٲe|0‹#td/mƾVUHD#&倈BG SLtiJݽA4#h(|~W6vt4[l[[{bk2 a,%>V~T"&"Mv}츽pL 7hHNEgJG%ƞbjpLʸIX8! ɇM4ۖN/ |b-_{84C1 ]"t/pz 1lU]".+29VNq9nܸ/ˑ!|e,@NZ'*#F:6Sz(a:]! q:FJ%=C[+ ^B?2RPĔaaf͚.qDI_II[fiUcE0SMS>& m| ]"ZLkhҤ,6"wɒ%sȑ#c… ;[xG'hК[ivU0nEXUIowL8QS#٨3!cymэƶk{"![4!hHSlUW]6^򒗄$1Ыǰ( ҪLL.@7h{w Lp. C S^n"$VYc[dNUӊn{_CDÒ%K{x+sNIع~h,۩@ؕ^C^ElԟN2;7#-҂~_nߝۏ| T);>3F*K/2[&/ .>X^׼v>րNHD5`kVB84?di(2eJ~^+"bq:R/Ppv(vk.T?s.g8ʨ* ?f :mty_MO^& LpG z';1# GF_fbhz!,){{Tc-Q>>蠃zbW"PpGgPq26, r=N4u݉䮀*K%e2w 0k~N[ ~3—4uyGg$`!";~pIT?a>>^m1|i&>!u-G٭Gwl"yomW:? {r5n ve HKEO`'K Zon1wFRs`%8nwewpzRK//IIQALb޹(t/e'J"Ȯ#C7??z2NAUtܹ~%??O Իaf+_`EoOOլ,)~Em4Uz xDi-mڤ۶w3o}6QɟL͊-*L%l馛4@gt ^x!~ӟvi]tQ,W_\;餓hpE?S1Qw}7y/"˳l2CR1cƐ!CzkE^iӦwyv1ǜ|ɣF"VX`lm=vΙ3pgu&N83gرcO˛K$smg?cdoYkd3Yǩщ~>@ac H{N5njc:-yAg4u6FITF,l|]n_ϱZbIFD"T=.VqNe??f<-|B yG9p3\^Ǐ89rTzvSܿzի(+jv>{1#׾6 p=3n8|KsbV'x \,̋-:\veyqr1NʬjZ. ͫD2w(r`Ĕmt?#_?,EG}tX!{m.&2}8`l]6g^@*M01@GM&](=wƌO}Slo*̘:,|:0(pyr˝r֝ *\TDm™ݡّiRt2vO~PwڇV!D*,:ǟ;uyKqRynLR9=Qm]=֋Bbf#%jUW]"l'0,'P?Y>uj9qNa0@GsXv7McQ}yP(7(7l60LUDӹ p,U -#WKSl06oqT{|oʞ"2իg-LDSc ]@5b^9wW8 οo(C!ϸں#pB_ cN6!SԦKuۆNe?vAMʻMVzs>fh^3hśOT¼:(Б5o ^ַ6 ѼbsfoMl})'F&M F۞7mg0"&Yu'%+ŏ>*kl'^{;;vRI*28,O5(^ܚ1h2#)?qЗNb<x^yկ~={w(WxjO$~Յm #oы_o}[6B+n/G {n(_җrz.Nkt$8o~%l?˿oAi,x-`vr&Ye/&m$NjL 3H5q7d~<wx3N7y|l*(&NlRQH-PeG9n7Q9딙ϙ -g̨S^؁L:#K6 ~G\s^ׄ 5#pP2ӷtqD&n]v[h^koH$"^8\tLcBhрd{8M䥎@-DGuTD/!`tWykl /ì ds cvwR8A>7z;VRۻ x5_4NA8RsdI,q,}Z/+_[hoh`r(̲l̟ɟرU{CF$r8-eя~D˶̙ 2ݻ]p߇30bY8C'mfզ -.??.6E'Xv޸~{LO|&UPݕۊtGޚN2VB#і^#p/Ϫ|~kZs%>~ZO&5e.e֋J6!03Y!^^+>OL_~P)SOCg7HXfWNLV!vY&^&((jc m6 9r6VcG7%yS??G%w=O>lNi9(lZX0Y Ώ bl!|IRXx{yY)m^pα᳥U/ #,*O:BGs$o"ۨuPbIę2t[%܀^g,zxl9((1 .olMPn;%R![7ۆsoW&B!O̬YQ#);rJ_ Z};n0qrć fiu@>}$HlrukK ^uPo?\W8s-d.bIKۡ^ _"$\:n\mf$tϧ Xɗ$7Tb!N R/yH ] *Zɓ'cfvtDKkKrCKۼؔ- 0#FYD/_^VryJ vpq{rf,/ M;Vd _^WDJ׆sE27S2cۋ\ b@\T9/fWv!#<`ELHNoci3,|ovΈa(η4@$]3 ]Z?6MIGdv|e7_GСC }:oT!Ju$)vt䋸җrT^)X rd[#9E$'pBۻ=e6ɮR/! iqSnlQZ29n ꞻR"-Gn$n`L҈0NpW4xuR" SH`^SN޼Sf+2ع Fڊ[06W"L48ga| #`".O K >\v Yf=oZ^yva> iauv_3dLG'֑9m0Û ̷s|׌hÿ;m?LD%hx{ki(I0àЈ-LLIK8;Ǹiu:1U¶Æ K.& $8'M!yRviFSؖ¸&}ߠf(C@XNzիrI}tMe^U31LD{%u,cԼ{.qZ1]Z8*'M2rEAMI>t%JqyA[g~ 8|a12\a%trh)M\ӧO6qۙv`̼moh}[c^E.t1fg b;, ⺲LS:Kcdp Bۄ^,(CӜ١^I=oJuV'W?O='6I cJ)`יЇ>fʲƶTN/7BG1&hKۤ mSa׾u B[m4ȹʅ/`=vØ$\YIȁh9=mɱ5.7kXTky'µ0F #nTB$q% 7w8/0EDi IM x;: 9*7ֽN9Rm}2%}ӟjFұ"$Q}q D,WjFҚx≘݀rMSRfGfWRhVN *$xo~sԶ<_" 2ttP=8<]1rŌ[h&^=FZ[oã$[\.t83c*|#aXH9=]wf }ieκ@IsRtbbĒil3fQ>GЧoi*)\IOCf$Eu I6Fg@8h 2҉,:Mn.K$P(Km̱V.Ep^[o%@}sãFpwLK:0ő9a}-牉[[mFJJ HAw&+U.rit4 >qA@@1$Q@>Mhdzo%7K-B K84ё݉LTݙI!AeN jx=]g{wYQ MqS4A#DP#E qbe&E%Q#* "AlQ /eӋn:ϸ?v^jUժ5yQ3miT&W3~-ӛH*]؁g:#`-'΅0KɒB$/+.Pv(oXKh`j&WWjCJX}1@aY . 𨖬8 4|-iKm&_E;5S֩kS8#b)M83>h{d0QsCz,CaU3_6gRǤ3)q(jgm  !bn&ntY$Z<آ@noߚ+4ǐHox*$B翭Sx Lqһ[ NmlA^x_ƫ˙J8zJWBDt$}M Z}Ir;Z ̥YV{_enAeC'g=(F}+-('^ eJԢDY19T ?b}*҅ txquuqD,l퍙 +_ͅksN=<1^!_zjt%Ogד``,"8& ?lN40v|C^J@?6T[xy8A$ ezY1`q, ,@P)3'a ЂPoY’08H_ 5wny|~4BS+@CdgrQzCqk\Y'1>HCPkqzy\Ѳ;z h? Wߣ >K E k vm*+jf/bL,M xXG\$[g4qǤr(walTyo,R"M{-Z;+ʛScMbm??h !]~tp&PyxN;M Ct>N5>(x㫈s=^ri4/gNvrYck$I 8H-5iFzLSw]6K~ @zP҂#GGYљPCN}"6$`9諴?m% e):X[0J |k8% i+z+LUr\3_qmixr ]ھ)LWʥE0V?% \!0A09XHfDgP)… _H+ga36wGԛI*?r"i2 ֤T=/cyx899 }_oMѫC;/~Pl8FOޕ2+vU5NU0.'s"0F=h`=ĤduJ YB / C 7/?*feD\i뭷kS}ϤpR_oBlA$ X(ʼ(Rxm=( VsIm|qX}^,(_=4S;βL i'] r$('zԣ6C(z;ATตu]H?y -{Wfs g.uXx;;)`:DcC0 \wudΑ_k Kڎw>Y@Z ox#,e Xe':|N`vٵ+B_ ~ߋY0S0lU̇fb.Ooo o#2dJ{,-z e3Ϧ TW\/0 y3kN}ht3.bz./Kc Q:&r-GYQ,7 "./6DDʙDȔZk<*T&_w8e]Ԇc,2!j\p#%b)RvwYT4ԈXWS xJ#@SȲ <(r-8RK[D>E-2[Y߈b,iC1th ݴ;CvjGRhp){vqDҼЁKl +C)y-'Y ,̙B;A4'x7с T瓙q wAV,`M6htqHbmb iٜ) Zgh^x`VX=YnꫯA`#(vNXeuC O}9)( WXef"U27ߜa'QretrNrM_ 4ϛX ̮` me3>a(X=/塩t 5(yZQZzY0"E;S$<SL\>*T=I}dKuwd9(Um ZJz&"6r.vyKuj6jTuC8CT_R BrWqET׽.1S~*OX6pUz ]s꜂cASh.gpERh3<mY{ Be`ZVo)LRhLё'_B9bzH`~]uaѺC:+bZj# M"Ά9'z[D]v̕ePdw9-mb*3<3(guV=XX!͝6ʯ|+i<eA-; ]`Y 5 `UTY<9S Z~ _N?|Z%kժxY2:UrRa$j=H4?DjW@=*gM$⡤7|F+fũs' PJq7 9I\!UlkKZ>J[@gj\7̮Z8V , A,83 T=bKjs_0XNGٴN~OiYt` Mr&tO3a6lG ::p1HwfW,ϬzT1_8>Eo$"8KRLЪ|s} M Θ;|'E@Xpn#~kh^' wGhHiN:ö馛](kh\#:J̉4cShsz]v|rDʫb-VZt-+Shl "XyQ%Rk6˙ݹ5b}?>}g|濅eU~*`G/ Yyu;aIfD˧RwqXz2elRo$0?yCgRּTYxAkr:5v0!ȕW^iS&lۥyd!1q ąH~lk>47UԲ|3 CorXأq mGT˦1Ibz9rL֚.NM`^bBXCJ \) 0ϟ? Z$@%w2ܱ&^.UZmb/LxwT B\ze])ƁE9jbje8yy Wx<0YPZׂ*vT)'U9Cqg!SD-1x E0`5~Mg9n mgquBWR3hTe!wo g'*`9<Ϯ@EV,-Ǥأqpv绳ԎW}mjV*E*(QtV{we.\9l P^8)4PAӳ9䌺RC{G-#d%aUO4S Izz3zeRchV]-+1T/&A"G M:&}-B_V/r0kvKVV̨-4 R! ǵLUj'oΞn# L <B=s, e peX" Ti,TuMB;64)ysqUB,l}8 c!3LZ?vbƤxzc:[h^4!L29>DINfD* qr/x JmcBӯs&AZn>83_"3G>B߻uBŅv~ENԧ>U#I#I\"@=Ca<&BGyg6lk-07i??kܲsܩ'HLEAǠ'ޢ^t,3'`*ⷝJx*l6ةg>6/bH;CeQ+T^m;+gB,\z饕`=.֣hB"TCn!IqsW/| Jjs)QV'L:{mVhǦn\NRhY/0Z̳n`HEY+6>٣ wCZnM>\r$I1aH6PRhӯYjɂ`.͡ ED6__Pr/52:>%BfJyRUBҁq"0(Jo}5q^7ɖ1Ѳӫzk/ES,!kHa깛E?e )N+D!J9ۅ'" :ʗW^e UڼbiG?Ѩ6PN/Z5L?V;/4q/rbDz.͏<-te/SP&"p'IAdDPq?o2C'{1,iuGY թP\AC~|@B\ ٗkV 䧲5NbFzU> DxG/;L$ RhmIX]f_B^(j&) %aە3!dB%?Nf%1C[n+erV>`VP?u]s y6 Vrgv͔ݚ`8c O3Rh;Rha &sb2A3I$pΚ8PQRJg}vYb(IyaA m vbn",@˙}eR@馛&mSun:)I, JjK0)2EedA9פSJ]:+!AJN*%0@G]) DB1bLPȗ̅UUfP*X.3YC  BO8gж+5eEyeQMލH}Vb;V{A$̰z߿" yR^[;"˿Kv#AEQ9фM. DB&B|k_r3a7 룪:h_s1L uBy>9}"q!c^Zx3N뭷^=iN\UZgpglDزq-BOZ !}`%й?X8Ylb< QXEՏ" V8.PJDK1+T*r4/B>Y߅3p&Jyы^ lx+n"kD3DU,v)&a4y+gc)l'[r*v 6ؠrf8#-NN/_U)M٩2 KvCԖM[I[^OBEeMtY,1Iv+F`6!XKb +_m6 pedGd!Byn)HoZ ވؓN?h`aJlk l%Ӗ4 VKL8$Kԕ./Ӝ|Bgh.#Pzd}Gx"~-YF!]z"t,DNvN9##`P"m x$$y(.e]9vb&*Qٱ !u2ޠ*esI=ҹщݤ 頌TdfyWDx)&^ iQO`*/SeX%,猐 UTad_GSeʏ騹Co[wS>I1J,_Vp, 'CrXv.|d6TST=`1T-)ph%88L)}Wn0Yu+PV7#fpF>Xկ~usO+w$M҅H, gf,*t9ggʦ@'yPec%}^eRG+<.d.C1Vv*:4'q2H&AsMT zMI CЎX=x1t-n eHTc:fjBz !jWNqv>Q;~ʡ;}oۧZTSZK۔s;C?8#*t*/b^ro;DC45S\' Pmxy,Z}dg1E4$[swClUW~>3o%-A&g̑9\5öt[Ħ?BYYixQG1&Y[O;hѥKbG"2 FR'NT #5DP$EYr 6@ (k)' o/5_Sqݵ"-6W*2MK?lQh?Nד$_IΏ欰ɀ&86T=tG`LyF-xߝHk~ĺ^wjlšB${Xۜ:5p.2"#\&MH-[XG+k*ٲ9V#bP-QX d=B":;d\Lϛ72ج#6m(/~5CW ,me* fb]wGxjn%ޒ6"PvҡyAejqXfv<f!~>]u1Cu[aZtCs Y[SC-2=Hcz`X99 > KaqK4/f1eo{I"NChlƦaȕp˂-<}_0_␽;DʃG+'a̎*,0YLRa"BF}{y"m#mI'eCTσa\9kYjmS(iE_I 1D+_ KBWsu|dGbiMooˊ9,2G%j+衲0ScyKz,aD@Y_?HPTuX 0>\9-xc1;Q7w_LQ'}s:t^ 5#R&V≴?}ȿ˿dUO!%BZ1SN+K$)U "hb]9(QzE/ $ϊx.C'1!~7IWhjPPigy&֓K7;q2j8wz &Uw3k߁iѨ2/<"پI1qӤtnysqufY*N$ƓzAOq.\RfQX:jI'sgW[hv&Ed.īehxבӕ~b `m"I d./)i#/Ą1U08@@ä}JWʑ)sN,[>2(ӳNz:80s 9ֶd\ h(`qb)Ɣה$1SaC-7,5׿N^ӊtݱԖqP^`noF&) 1dF*T{gA=>ϊUncoRg iL`v`8ĚraG%Q!&Fqv-_ZI81{7΂ygK$'%p 1QA]T-ukO#Gs6CDD&Cqj=1 ''EK@ohȖI)Ku%g޲< ` Mh@ښ dV*M[*W2[))gRG6l#ڶ&֊[r)*RDBbO&Hx26m iڔ4IJ{ruš bDL?ysZQHX9C֑O+hR%Spwi'$l=?8\[UC f3́8>aJb4ysl1%+eQ;In+. hȑEZ$آ6#ӐgF5 w\m5wyO/dTd 0 ,5L}Rz-I:E*0t0Rط@XyXYI% դp@(L c,~<[%÷]N,xwXiN0)u,Z sve}Ssf6:2Ǎx'"B:8/}k] 7<ҭ*Κ)ؖI^JV'}&XOh; ,4"Ⱦ8̣[|,zH Rrn>LRUW~gHW/r3IKd-, ە> M"cpꩧڹ=ÕՈӅbrA~ӟΓεY(clN©{h%()o-و -6H*R/BB:ju@JUErך 4iތ(,Aߕ9L^{ߤ1<=t4Je=ܬFfvIKpgcN+`%"O&>->)[`s8U䷿`{,)w"#* Qt˥s=hI2c;fUhJZ !JC]~V,ѣJl֏]fȲ,͋)U"EC !tP0X dc q%INS<{-n+P glA>3Ypb;g-ϳ@CLo.2_y:'kna3e"diasZi7M22wjuO?]I,Xd9/&:Ƶg);bF_,kN*+̮H8k_HiCrG"Sůn`:/$<=?&SZZ8f`RHb@ "Ѳ)3Eф觝v/z`X“͊DAh\@T_eAH`:耞#7Q~-@]mYv\$7G鿉[&}iX袋x+ˢzґT!rf&α) gxwR& JW0O@\ꍙRӺI9fj֓fgT`&~NDU_WTv%}&3AT9V&k.%FquAH`|`@"٨7pFٌ.\ej5T+s>!VI+</kEXxq?DaY0?Ny8U.͘]#|ΉcYQ NG0RV!OTWH-HV<ҡ` JL9]`vxp]%c撜6NNCf ZdrKT-iMaecIpLE ʊڗ/6@ D!=[-϶$z:Z[ T0oym5q ۄǸižnt5'fN- ``+O:n%jl. D A*ͭ%mUktq3H!2)K$Ű)0K3s:Qa02(6 SW":ÅsX5c+TL 8 pbԉ `XRZNW`I*g9]A2UR)wI^Yr *8r: t "j1+9SMI#WS\sLj e SX΀sκa9]-kazeu2Ij5J:g>o]egcP* m gd NV 9f0,n>aZ=+=lҫмղ8aαr$Q gN<{a[=,P^{m^h,/o sB`z? 1PN ԢbQ`DF,+mYG_NBΉZ,Pxp.[Pl&vQmlwvk,0qAHL!9B(ih 0pπ9D*-0MssՕ9N9y|ȝiK! =XƘLzYTU+(f1 zEQoRC? Iq,*qUuhqUzNr %5quy-+`rqJ 㤕5'z2Ę-ن1Gq-Jx0B*Ӽ( iܪhSO0&j2 {!K~f\YVa!D\JX7p|0S{\k:|Ƞ+*U?6C COvrмl\UuPa4JV;sø* ܚlJ!@Zg3D&-0g:(3Mԑ`6׌>X )Wk(W!8m2"ms\%6纅Xom(=%?$6n5>EclnBz8C C]athV'z1l.zi6I_2Dsݦr!ݦ\zK03 9k:jsM۠dMGLWI2[j3Jn6PCT+&Z)92`(IŠB-~Ы 0}t(+,BT0t !ruX Sn U :qřΕ )#NgĔs9^ڍe0CIϡk (Q@TZ~\ 6ewy|s Mω,Bun3t*ZBj'.cf nST2ftDRtPNWm]PĨ>sR} U_?mTNB(.AI\ImbgrrX TU&ݍ()gq5P(mrIKI%p-] 02t*@qO'xb5 b0pֵ 9 *̾暠k+b&J!–kv9t;Tށz Okrj??9y姞W]u#<2C$G!khڰDDpB1(Lhk,`|'a5G!mPSd>8*`~ӟV'*}˿p/}C8!}@Ua u:2SsU͆!7k5B8UNT8QR ]CO?( i;B6fV!UV9ULU:yRqx\j^0+皂 5w#J{BCpK5Ԇp(Uk |ٳ ?6 a"\3b (4lT 'BU嚶)5 \2U*J@OݦZ5\S4w [RF*c )oJ͵j[ PRI*P+6eZLU^R[`~~Mt lbPj!Wjnc\)bmJmsCRP0Ӵ[<1z)!A8COU WxCìjI%쪇vCQ+P!¨.j~kv7{I?5V[mW_ˌ~9AD(MaNj2?X5)+Ԧ&!)\w2IaFaK\CX&@mU٦TU}QP*LP3RE|ؕA`z(3" 6*Kn9휝a铁C(3v|11+%r P P_ sĢP^1-Y5VU;"b4Zr 3sIDATnSB>(88∣:ʱqd ĘB [;?pr!|3S\2@&^/1`\.lsUBqΪ1Så<&0n^`\IvF=MƝ`z?bQMc+?^U1fƷ*s=WX} _),i>{h1 D5DH5N8FMBtM!v\S 3 A0.Cݦ0a]bvk6[0gc9o><0*3ng <naeL,̦kJfc\UJyvmg 5(G1椄8w[3D\:C=#:  fP ƅ`LqrkAjYg6X>%}fP}v՜AaFa6.-'7W^Wn h4Fh4 &B_~w?Ϟ`@w h4Fh4B_vO{gN?M;n4Fh4Fc;RE wgN<~@w h4Fh4FA\ }勎?CFh4Fh4z'Ϟ?'h4Fh4,,Bch4Fh490N/yGq +t*)On ,sԎPqʍFh4Fh̉q¢E<+*Oq zkĜUjz3~(v\Ckh4Fh4+"EB/w=~i'2NFh4Fq×]v}hbk>Y Xcva]w^uU'ӻ w"N ?K_1[ne"Sh4Fh4ƌ8N2~S//?| z7˨sn-鮬O|&׽]w/\+p7N_~nvByS:,^Xo2~h4Fh4; tЁ;o@+[od~+?k|Cʨ[o}3*ˮ_򗿬|W7ꫯ~Cڪ~T 3Fh4Fh4ƨzѢEzqǭp?MfWkA?'%ûFo1)4:Bl=qs=%MzЃB+^qM7!Jŋh4Fh4e2*\veO|b-tpEym&=i?V[M =snOzZ?y{^r%(y,~-2)x&;Fh4Fh4!qӷ+Co{NfW2)t‚ V_}~`BzJokflO~t%?Te/曇SI~׼n4Fh4F.t? o5N/JU 'y{o<^җDT|e#aW]urRh0\ǘ5Fh4F4.WJ /Iv{w_ևܫꓟg=Yk*"O-Z)ŋC9Sh0_b/gFh4F}ƥ^*w1z%]t-4akrB?u]7h>isr\;n4Fh4FAl$tбV/rgogП'}{ :9~]vٟɟG?6t…x°Uh4Fh4!#>C;v%V2zrϟ?W_·/x 0}PVYeC9$?Fƿ=;ƶx .Fh4Fh$ɇ|+'-ꫯFHꪫ~c:NeI%ɏ~C|c{嗇9)Bo}fm)th4Fh4V^zRr-ll\xᅩ,zWEeMB馛*~{ޡKy~pj|^G?2H%߽;~_zFXh4Fh4~ +Dr…tJJÇrj&]eUvik& p)zֳg|3W_}w}-Z49gpoxT^׺Ker΢Fh4FzB|AǮ7x;,_J\ԧ/ӛ޴>Aznʗ+o{Xcя~K.Ovy䑫zϛ7O^}mw 믿g}y7O}S/~6,yc/^ sg΍Fh4F)8oJO[o 믿Ovmc=io~󛥸+=[oxʙ_W]{x$nkc{SrgUVAqUVG>Qz$Y~rKs#54z_,h4Fh4~o0-B뫆ŋ/2r\|W]u 7ܐ oQ%\r饗.Z(oۘ+,+I?E]?o}[7/B(c:DۻELrxFh4FqJZi B7Fh4F1?|?ݟBon[nWFh4Fh@V?i}Zj}Qz7tFh4Fh4~g)th4Fh4+NFh4FX!REU }Gh4Fh48BK{WO.s9S,Xph4Fh48\W+뮻+;N; '`Fh4Fh4~!Ju%^]Mo喟W_}=3>sh4Fh4Jr^iW _umtM^{W^yE]pszh4Fh4Hn+ɕJx_)DxnO~`W5Fh4F\Wڛ4o喛oKFh4Fh4~g1Mn^+J~?ÝАwѷvۭުFh4Fh4@+]`RhQFh4Fh4`Y +B7Fh4F{NFh4FX5dlIENDB`onedrive-2.5.10/docs/images/nginx_verify_install.png000066400000000000000000006505501513710110600225600ustar00rootroot00000000000000PNG  IHDRV><sBIT|dtEXtSoftwaregnome-screenshot>&tEXtCreation TimeMon 26 Aug 2024 19:34:55hf. IDATxy| dMDHWs(uT)Jh HQG)/JDBD$H6͎=fnvGDgggf?= Z!Af:#5Z9ЍXﻸ[kF˻`to-/ٺ_S,P`dDMh-d/zG۳ۉ釔\|ӨP)_i% QsKmZ RO`:dIZVMjTTds|> Pg8iՋsHowú@X {JS *YBjܮo5ڎqb`hsӯ A-C Qb̸/X.x5.Z|қ; g:@ޭ|/Vsc=ve.Td(;|p[Ϡ\SȜRzE2%}G8-h4!HZ (2ת`yru]'iZup&+Kx[3-f97{Z$)r;L5^y1ȉԭA%vpAVepZ ̓5 3Ӡk#L&V&u=^ g|0vIh4Zh4Z8qҊAS"S|-{@ Og@B>w:ro˖hղ0!TP0? zy3A/%ILO<7 _pR8tZh{%|Z [hEDz j)YЈ#CE\:R[F? SHG,8M~iR9D uMRL6 jjӷK/!** qqqx>f͚,Wti,_>}ׯcVo#F;wd~ׯ -#Gıcp=<~Ǐǫ*ΨQVaMDTؚHnTI;ry_מmA+QF]v!66HOOǭ[{nh(QB)cA/EJ;wD%U\o*UdkҍAdd$Lh#|e f2j- r;~=Ͷp{!7^+Y51W_F?tR%?4(gϞmhٲ%_VW^yBPP\pp0~7{HMMŮ]3ԬYӪt+VZ@elقɓ'#!!'ODp Ԯ][ry///DFF"00gΜѺukݻ3Y\r/7DDd/φ.Yb.j̓F}{;3BWO>\2+bŊ!88{7,GLL OB!S4FK ֮];!<_FPqyUW_a(]2K1o<J69;v %%?)))ؽ{lס+~IFʤϽP|y>R7F󤂠֖m@`4oX0U^7Ɗ+=ziۻ>F*USNX":%JGrfBJ0~xkBCC (Q=իÇK.S~}tOFЧOL6 ŋDŽ ={аaCԭ[}EHH.] RN:l#<<YYYv)"V!!g|lȥrNL놷L28pΝҥKɓ;v 4eˢlٲhР>Ǝ'OtҘ;w~)SlZvT?[&ӏtg9 R8xⲽV- <кukxx෇6m b@)*{ӧ z6Fv0uTL::tk>3ER†HacW?`p3nqUn܂z5D1+KsUK69̀QQQ8x ʔ)mۊ˔)ZSN"""Vŀ?VZw|駒\nCVRرc@n k׮aŊj4)55.֭?PrO?$N[bT*u[.oߎݻw#88p r܋+W w ̙3-֗,4̆G${>=Fԩ߿.]:}Xb%\?ǏqʟXb%ڷo.]xWqOG2uw܁Vɓ%͛߇V\rq?\dnWtAӧOF}01… vuyZhhӦ 7onxpaf2oweda.j|m۶\rVsN1}5j ''/"<<<?Ν֭> ?ƎkرZooo,]ׯٳgDD[!%7cm{UnY[cO 8233qy4m?BTbp<}O>ٳgT*M̔(Qu馮X+V\FԥOMLLx7]Ѫ*mG V &w G~u9OU.]dhBn.-͛7lj'Ww#up&nXOqTt6!qn$!TR4J 6DmZSBnJ7ݤp8BZШQ#l޼9998tj5z'J&*{GVc"22Ҫ:4nC\\~޽zB6mp!4m @%3g !!Ȃ'M۠A'jNNPti`ڴ(_<>|p@DT0䵑jd:qOƱq~T{ȵ盫kvډ/Woi֬5k=zݻ:+ʟrAU}Gr5!7+VL~tf!>WYjusFxEȀA FZrK40s0IjA(W)O^2šzyS?ǥ ҥ Ů]vZdffB hٲUeԩSm gggyTM6&LZ}>x6>|z>y f+'OCv]QT5|u;r+AUcQQQhڴ)bbb0|p^z1b8bccѼysDEEɬ;|tK~fhnv.œ_:$;b.mnN.ǢIn0&15/\,D5b| FVv@R f=JLuu5xr=0{^zC{mS`J%ӧ6m;wDڵ⼄@RRϞ=ùse˖i[r.^:TRh֬>U͛___;w'O999qFOW^'͛DF.Zs2jF琺rT6Zɗ%QyLzyyҥKhժ6߀k׮իX~ZjK.^{۷o5_}U˗ŋrȯlfz,>'O?y)jIII ?~HOOO?$6r*p\esΖ5#Wy}*?:ʵ {JM7>N^ASp1w(kSˇN:hРOOOZj^thZ]v[zvލo5yqx饗u5kgϞ֭[ޱ&>s(JYPjU4nZB 다$j?+V\)|w@~Zr%^ꐺl|֛ˑiMz$5yVK{սM"44>kxǣkYfzk&3\ l@؟7wa{2yʱ_QFX`t%J8I8x p233q Tu 99&M̝;۷oo>4lϐc 4mڴ{`ٲex >#( \~q4i ܹsXv-ʕ+:t(T*PZ5\t W^_2eʠEP(0o|zԮ]oΝ;qYy"4sՑC>ƽdڮyndJ^6 UVRJ+W!88Xoyeq~! b&<} V\ jԨf~2Fϻ7oƛoRJ?J\"**C)菲vtgRAf99t F}},FU^0Vk/846 Z}wq9TV ŋDŽ  7w^q39ڶm =8p !Cصkk׮wDXXXKڴiѣG_~ =Z|lRpyԬYo&__Jٶmv~i_Ct!!!8<~{I@,V0Z3/ {ג ʵ_ss}ڪAۑlٲhӦ Nٴ^?y$=z^x U Hn\EkaأFroqڝj$m5I !4W7|a {xyy!;;[gϞ̳G-9T[˚=w'cи36;jU*/9rJ8`p}{֭0aN:e-[X=KcUM2kFܩ*{:HkÙy]*V% = ^Q ގXusǝ=#FٳgQ^=oGA.]\]5""*p6sUWPt Z$cUp{wDRbWsM+sIW_}!CL2&%%a˖->}23cUkd rS 0a.0n^6~/`r#7:j(U ȳ~a٨^:~̞=O>uuՈ@e(gr=lY-`ˉ&׸vԱaWCoRikea?#|a : RVU|q*QZ9749 AhgW^.ZV%X] TZ"""r!GW%/R~^I`zxf֐YDw{>ǵ,ܶEVsU<]TX:_ A P8ow煩PAGBk[kXL+tk-ou-TկLDDDM@2ߍ6R,{ EǶ׬8mn-l>ڵo5t?Zނ@\c`R@Q<ȭ,ZLzpm -Rnx!K [&F*FU^3DDDޡL9G48h̸~ؑP[= ./QfG?x a/Ym+Б;php4`*KG7֚arM֕녪W)~oW Ý Rc5h C!"""X YFj^^ZU47TL ؀*62HK ÿZ!ǪEQA󡈞l f-w[?_3;R:cR!s:$>_WX_1kH !ܥT3}w>f̖;ٰ!`7IXbU1ݩj%o=L(_=Vu @/")ncuȭ/-:5`ibx`r4~]$t"""eMJj|@/^DhhnG&o"""""""?9h4*QQ=<< ~U"""""""Xh4ɁZZF  b0B QQU j* YYYPTFNNAoV".* T* R OOOW+՜T*ddd իW7?[nJ(r׭[;w?wHy ĉ'Ə#G &M$ݵkW̛7Og}֭[#%%{ſ/,_52Ch"̘1Cvv6o+l裏PF 7nzjMGV#;; """"""r{DQX1={ ǎCnncQ^>=Kɥ/.LK,jzGŒ%K58B0̙3}Ett4CHHʖ-//^+VLr}3f bbbwߙVߏ7|/8B zEy7{lL2b䘘L:1|1a,==ӧOzUWD؇3`~11R]eX}~mڴue$&&A:u**U8s V\X)S;vĸq0yd\x.]Bxx8>3:uݻƲepI<|˗ k׮!""7n@Ŋtq}vv6/_#G ++ ڵäILzΝ;QQQ~ժU͛hi&߿hذ!N_|兤$?~o{=M6aݺu@n>޽{cڴiwbԩPxq >ܠw+Wxb?>_hԨMjǛ]7)) ˖-˗={_rS .\r(U hHKKA޽{HKKJ,ҥKChZh4( @j!WAUG """"""cԩ4i-ZdY,-- 'OGȅ 0fB؇3!n@|nWesa]VYfML:6mz}aú-ZPL6 O*# AAAѽ{w|b.)) cƌAǎsN7G5(+""Xn6l؀wbҥ&1x`8}46o Xz59yaƍP*;v7^eзo_rÇSN8}Tv¨Q0|{>q >3f{d[FF={f_Cu޽{1cΜ9#h4 'N{L=zͯYfh׮{Xv-.^5kbǎhܸ1^z% !gQQQ8wz%Y^=$=Tp9۷&t *`,Y/^[n!++ 兜ԫWO\_PxxxZj}6q=P(HMMV͛7T*oAXXk0ɹ_T`ڝ;wxb[6KDDDDDDD+ `ڴi4irrrPLUx3/TMsQ: 2X';ĉe/]ߏӧiӦ&!K!#бcG j+{~+XJ{0zx< T*Lէ3nƜ *` _|Yf/zZjٳgѬY3ܹs5j1ZNxyyY,'&&$s5?~~~&jԨ/^֭[#"""""""y~~~ꫯePUއ?˗l>ƪeKl.X^:N@jk| o&[n`` |}}q)u{@!Nh4zZ}իW/bz~~~VUBP@Pzꈏǝ;wl*bŊBrr2Q\9^ | ժUW_}+WʈȝaŊXbܸyj%_[RKF5q3&Ʈ2|`wÇsNdee!==]|Pjj*ߏ 33+RJ'N ==6olٲHKKݻCw}Xz5qeܵ:t(-[sA 11W^jѣϟ??… -ZX:ʗ/ógϬZO>HOOܹslɇ?{X`^{5xzz^zhܸ1̙h4ܺu IIIfUVŹs@-rTX HKKVENNl ]լYw^ """""""roO¦o[VVRM߮uZtX*QFXhV\o>>>h۶-5k4=z˖-CZZ*WsBTי5kz職~tj*,_͚531ZB,^زe j֬*U>|8|||D`ذa[Uu Ò%K0}tj4o_AYKvӧOchܸ4|@!j׮u늁날jժƚ5k@t C 3gVZ3gBRr9r$ʔ)cjժ!::+U///ܽ{ERJ @DDDDDDDTIjHKKLÇZ[VǪ?tRdeeaÆX|9sin.,, aaabdS1x@VA`tA"""""""*X%"#"""""""G zxx@P@պ*DEVBDDDDDDDTB\]"#++ ^^^ RDBB{V(J(  """""""@V===l 33V"'jDLL OOOxxKxXE7o";;999jNU1RAU"""""""@V=<<)~J%4 4 D zxx盧A~UW(+U]GK "w2O45>{e6 ^u 2Jo"""""""Lf$|7X%"""""""""DDDDDDDDDD6*"*lrrrRV]]"""""" R Bë\,''*`*"STY{7"2*q?c`F وU""""""""""1JDDDDDDDDDd#V J(1#F@TTPIDDDDD$Cĉ8y$ZCTx˪jDGGᅦBohЫW/t yyfܽ{dZlw}y3EEE!** ЫW/ˮr\3"ۨj޽.\@ll,߿ *J*hڴ)z퐘O 4[nDDD{=6l@n /8xeff">>jm,_ܮ%VǏcٲejʕ+cĉhݺSuL4 =BVP^=TRn¥K/RJXp!ʗ/Ժk۶-"""мys/2e ~|+8%h"l߾>>>x7 %$$?DVV4hoQF6k׮Xx1,Youc8<^y 8J2T*ѷo_t۷oҥKqYL:m&%%j9'-Z0( sEY+VČ3>q}Uoܸ ,pj`5..FBV???q^6m)))/1rH^N1J%Vm0`[lpp0v:< 6킪Pzudff| &$$`Ř4i $Lrr2N>Pc֬Yhذe0flsŝ;wPR%… ضmz-ֻy&֮]k׮dɒ>s4jSL'كYfaժU ‚ L.ҧN֭[Ѹqcm޼{ɓ /`۶m8q"V\ҥKKcL0͚5Hdffbذa&˫T*ݻ[nEpp0233m'DDDDDHKKCZZM6K???x⮮2O?;XcرNJĉѤIrG?ϛ7/^Dhh(f̘ra?~<°qhPdI۷S| Z֑) X7ΑE;TzhpM 7oFe푨Ŝy+IG whV/"ݻ'}!@hh(fϞk"--MpB^ݵj?9sAAA(SIy'O4H/==0k,>k,طo~m:FEE^)S jԨFK_~&w?_~+:CLXz5222ixwſ{聏>~8GLFE۾}бcG10G{Nݻ!Dn~e˖A̞=}ő#GЩS'iٲeӧڷoUk׮ S6n(GGGcɒ%NG_6aU]PunTS#z >2_~%KՁ +hԨUiCпkW\sbSe( .]ْ߸qW^G}$9̙3F ѱcG?~\6z1O n/H?^ѩR @jj#"""""8vZhN:x~`_^՚ѣ ~v’%KO>Qx| ;v ݺuC%i׮]3XFˣC8~* ۷ի ٳ)p5V/_۷tիZsM\rT*qMxzznݺNϓ'O> /!..jLL ?=}9r={M6KLLDŊ (VŃL]ooo/_<smׯ/_|Qv9B%JDz*.\#Fk]} g/X|F˗C`رCxx84MGq(:u=Vukڴ)6n:/^cǎ:w'}o:jtt4p͚5VVJ%4_zsMR*xW.FLL W:u֡jժSSRRpQ|W?~X2gR% JeB 55jZr%K"%%CDDDDDѾ}{(J̙3#FX%رcXnƌު$*]44K.(W,Y"HJJ}v#<{O>1ɱ/00>tZ6o,ܺu+fΜHmϒc522FZ3{mr8q88KV-)T`P&䍩j\t Gη9ɓ'-{޿?ͦ(Q/A$9CתU+)SCjj*z%\TTۇ?5jz /"W}xzzU_~AzVRJʕ+ ʮc*UiuP~0==gvڶ'\R%Z 0j(ڸ+jvvaV-V'R9sⲧNB:m;z*͛ɓ'K>KVc޽ӧrʕ+jwA%Q(([CtLLL]\VZhذI{^߭[РAUD^pAܽ{W닍7o5޽{\:1 IDATٳSfMm-Z0i۶-""".\@ZVw… pveSpXƂ\ȷ*r<ܺu ۷o͛~9NTaȐ!غu-edd? ٮ_3gbԨQxW$9y$-iٲ%233 Zǎ3n۶m?uMB@ӦMz]DDDDD?Oի+Wk`h۶-ׯ &>=zǣ^zh۶/СCx jժeiHGVVZx-+[ocb„ '|mYcf8lI 5 Fš5kܮWW~Ulٲ1c T*[&z֮]M6aܹ(WEKΝqDFF",,$%@vv6/^ڵkW_uY=6m^{5n=-[V={Э[7(O믿.7sLa̙}"::oD,Zy,Z}4mqxvLL /^ A0~xԨQÓ'Op]qH3W_}'b5j:t耒%K8qVXҥK}#t7n1w\O?5Q[B|' ŤI]:NoФIm:ǪJ*aŊ=z4N:v=/߿VoAU=z޽{oB x!.^G"==ln:ALVVA@,^˗/ǔ)SP|y;ѣZJBNNC/&&e˖E2ewaΝ>C߾}VDɒ%flذ;w.hp( :g䕗"##1rH|g2e jGFFN7noBpj܉r Z+ӧO $;;^^^.Ǐe\v >}eˢwӧAo<*>}jXp!bbb0x``֭S&O زe .Wre 47vvʕ+3gʔ)t uի:vhq{?:Dd[O?a˖-CE۶m!SHDDDDDTМ>]vŋ\GG|~82e V\i2]wMUTy-|8~l޼v† 0uTlܸrwa3ќs;wn:>}6l^cOHU_>}`?o)SR {irdaa S_:u}5k3g" @vOilذAL$i ***˗#>>W1---ѣG@Uhu2}6Ν=z`֬YpttD\\ݻSS.Fn?_> d/RC\c-BnPRR(,Y4iRG}ɪh/^k׮aڴixQVV{I>4$_~nnn;.9bbccWWWcŊuIIIeVz<+++l߾]*-[ٳgռ<\~^ hѢJ3g΄/>s[nnn>|8`ȑ8r~7|3g͛m۶AKKvGg>7s011A&M#F`Ϟ=/#YA`j2:466?~[~&SSS,X!wEpp0?~˗/evjCNxb?>{ijjZ^/R}꾱UTT/ 0j(rGGGtڵQTi?^g\c{s^#9s6v1cϞ=066,jW:::8q"-Z@VT.)ƍKW\?8xzzbҥ벾5AUubHMMΝ *?ѣ(,,Dnݤy<6n܈4m.:tx"~'t j*]ϟGZZ1ydOnǎ۷cܸq/mu6n8,YDkװe@,C7oΩvV\ ,ȜA&M0m4Iz쉵k/^Į]ЬY3;w%%%ӧ>̜9bpss޽{ uoMSט`I}1"99Y3۷e֋i3Rt}մqF[ϰ,ʞ'N`={> Ν6m(|{q^9%D"BCCUzX7k,L6 666;#-ұ 1zh49sFRNN|Mt o~zΛ7 Bhh(kwߡM67od {8<~X Y0lذ| /̟?_q0i$aaa/xw1qD矘|_}~'>>Xj&7xn{֭[طoF h6YY!1T"y r>o-eՊ___S]|2ϟC}K݋O:駟Ơ*u ;;wFdd$`p %;w;@MÇǍ7$0wƠA8p5jЫW/L8?Pݺu)<<<Iobr}ggg_o߾}G@@ ѫW/n/_ڵ 'ND@@1|z{Zn T[prr&mbb"Sm۶ŭ[sٳT=a0227.  8d [h޼9acc͛7nj3vPVSlݺcǎEaii4mڴ勰~AS9߽{7^uӧOGbb"QZZ}ᣏ>m6?ɓѱcG۷O9,Y֭[Kz >\^O0NNNs8q"+}vL0A*g֭[[[tcƌ7%%%JϩW^󃭭-BBB"ٿ+W [v! 8p $)k#^RNȅqQQQx!,X{{{O?ѣG%nڴi8p <==a``~III_~@} eڔڏ2Em_AA>Svvv6mԏx-B@@<<< S6U#ڵC׮]aaa#F7oɓ'̬>XXX`ذa)j sJ&6m>#3,ڳCT3FcVMY)11J?7,--1addd~M{{1,uJP_ajj_۷oܹs?66VN:aƍh֬1zh^Cǎ*K>}pI7.]܉fz聝;wbذaJj7n`Ȑ!eْ=YIatRA/yÊknh'ObAB>|(U5/)) @!|}}eMcǎHKK,رcRUzsuј={uqqqؽ{ ZZZ$&&B,[} "۷/͛'s}iiƂ,,,0`tgΜspB-Z ҥK8rگebb'''2חJ RRRX ô/ìYoc077;wHzmR<--z_(J{6LV3֚`֬Y2? r@N=* aʔ)իL̚5KN4 }1~x_8{b֬Y{xb*.\"L<M6Ν;$Y_\\e˖᭷R;j}WFk#]?Wlذ044Tz^P~TB^255ENNBBWW"HnW="e֭ :=zrEuGLUyuZgiӦݻ76o,IQg3?vKUVVV|r/oG"""W7YׯGff&RRRzjlذkuLKKK <G4me7oޔ"ؾ}{,\7nĹs琖&Y!~~~8}4.\ IX/^}U|w5kٓk ׯ_WBii)ѱcGdgg}kӦ йsgN)<==c95 IDATp5W79O,ݻ2V;<0d888iF|ڵK2*eqvv۷SuY_EO0%)(zHcEU=2[MJsuAy޽{pww >}*2Zۉ'0|pR0^u*yT^^gwށLMM-fÆ 0111cT.,ڈ]}8777DGG#//O,!!EEEa)_YabbrPj܏){//5p Hdd$A Ym-۷/tuu~z> +eׅZCޛ4i„  Ϯ3F]}^JYUmرعsTmWQy%"":VMm۶ k]vIoݺU)S`ڵr06 wMlܸQEhh(P\\az9$򄄄`ӦMpwwݻ . //999sܴDJJdСCQXXK"''eeetdȑ#g8q8~$m]GE^^ڵk߂m.\Hm"++ GSo t .Ǐ!-,`Сu6n܈,ܺu 'Nodd㫯;wo o <<ׯ_Gzz:6mڤ9?~>^uY_EiQzvq+>^Մ'رcؿ?JJJPPP jdd`ٲe}6eF޽{qIGXXdYHAuKbŊRϚ?z(/ttt`nn}!==QQQ޽{طo>z mˮm\.]`oo?x /^#G*YZQjrmȐ!(,,h"447o*qn:\rb{e011G}P|ᇸr RSSqu޽EEEu46m˸urrrpAu#''aaar EwCߛ4ؼy3gRJS(k]_3-Z ~">>GgmWe^;v %%% PTx8;;cȑ%C`]\\$㑙00Y9ڷo/w֮]v킋 >UC)O:5k֠nnnXtdoO> „ +WʝZvv6mۆG~~~裏dnۯ_?\xG?VXSSSlٲ+V!퍖-[CNN֭[e˖K.PeرcK,Y{ѥK6[nū |駰C~z_5VZ3f //M49s\VݻѼys ̙5k`޼y(//GΝ+5p@DDD`Μ9011+4m666ᅬ 62bcҥ̄3}hkk+.#>-2on”XR Cf~mÆ n:{\|~!;̙3:::8p'+((( _?t{aƍX~=:uVDQoFT1~x8::bwd}s+T}BU*˗ch޼9zTΝ;QVV&Wرc*6B]j?GGG_ *_YիW믿Ƹq`ffW_}U꽭MYjUC]{l޼WƜ9sP\\ ooo| ݓ'M}}}X¸qвeKؽ{wڵ 6l_T_.пDGGcCppžʸbʔ)Xp!LLL?nWS~+ue„ :u*nݺ__z?cԅg Y(/___|K^sW/|°b 8pB1cN:]].iPSȲw^M^gggݻGDDp]xzzYfС $7G%5>y=UU\kbI5չ9۷o [ƍkb?DEEmۆaÆ1JDDDDD?H=Vܺu +VÇagg_Gnb?Dtt4̞=$"""""*DDDDDDDDDD4 U""""""""""51JDDDDDDDDD&VԤe """""""""G lB0X%"""""""""RDDDDDDDDDDjb`HM U""""""""""51JDDDDDDDDD&V*X%"""""""""RDDDDDDDDDDjiQp1O ߶Hj2Qx:aem DžV&""""u Ճ!}֫[xi9-iХ`EQ(w->sɲk1k _k+;|=`لe09]`9c՗6;\wQ{? c# #NIDDDN ѿdjPkt}-AUhi sc=/ ҿ܀_n9*C}[=_ġA_70*+J Nw-B`#./5,cCL-am!""X%""ҰEHL?rqd+,õyU7KؚLϠ%gفנ6 ss 1Jr1ƒwQYDDD*uymvuE=ܝLaardt;t[nVFaR$bX%!УZZTJd֣,w?"fk%Iz,>g# m`ga/Ab.Amjgg#8AGK IH(DDL~ GYEԧ#U?ڶb IzjTdlDKWsx8AOW i$]0GSx8v-,EZv1f,$yi| ,aeqe%sJp7>[- A;#qZvpFp;Gx֣,|MZ}]mɶ.<Ʒn=>|m-d;+pQF/kBa OC.v4-gCm^ f0F^AR~?/ɼk26.hf+C8X@y%+yvE܍d敼sVn ǯ=OOW mVFp2ĕH,Brf!*aP&nwG3 wx\KXOj9=&ꔈT*KCSrsc=9aq|bݩ70돟%-ѷ3~9Hry:a_6ZgcnYqwnGBWGXNw'SzSW\$&ʭJЩ^m=`aQiiг0["u 7mv&RT6g3E"`HLu"惁](.PJ\!XL=m*8$ ]Z."#WqowJǂ9⯿|A]]]|Lovr˯HZv1Ҳ{@p5=D?ɑۣ_g:?z19uW:凁]TN@Ki/-z^.~y7y++FnP6=]- vG{/ kMg qW4WDDDN^EDDN*VP\׻u"Vj.l1Vp xJwgl'̠jQI9n=½ {<icdhw^"j@2 q^B/'RXuup\[w%=T{/kX<{m:a^{=kMQOr$kW"6)Q2{UsBwtw4Űnm`׉X:x;?dIXx`x>L%JJhlTYpsQ-bapi>v|~}xUPtѪjmjƶݿsp5: Sڧ%eia5?O> ^zX8Ҡ:4UDDD>X%""jdZ"f m%=L՗Sh5o,$+r Xu L u1{vpVZC}IXa(?՘@oVinf^ /~Fc036 z89n)pd0@kG^z>UH;'}F`H?I=]-tmeSUCDZXd/vEJR3hk0'&4VH{H.ƤK 76|`ނɺ K1kRHd ]}pxH$5~(8|1sFJmf&K^&  O|>ebt!"Z"|(yna.yB4D6R:b3~4v+. W\ +S}8Y sc+9=hkͥ;O09ee(:Oy=·uoݗ5/-OzN1J*lkRM)U""" cz)™Y4@;/wE kc=t|7F=B/'X`Y~Q&hY#WemNfRǻx++,)(gۮch<piV^)/='uꁸpucIOr&Vs Jq=&m$jNF%B'#PXR+6j;Oki4UdbpA/ q%>>jm޶83ֵ&ђٻ?~(mH{aʄ-ȜTz1^;w{'Ƕ#12 OZzՇHv2pRJW_6p1Z^V. zS9J~ b3eT)kP_]Z pa&tA}֓4iAX>mؚ-+{_gV[GȬJ`oiOme/1ӆ_3+\,5JH{'mP+)yg,S"""RDDDJ IYOSK^N9Ԯ㲇++d,/\ͥW!ϧaJuuRnGv̠j5Y֦02Ё"ɺd͞3ɂjɨ:x VeEUf`k+[jL]Jf @zr'T}2VXEUڇ7Spw~D&#:!R(9_汛ICha;Z F7n9 z OH}3~dv\6bι6*т ˢsU:F-sJj.M0*E@Aq9Sq=&"!|vq$/T-u**̍p*o0I8,}j sc=D2TtMrZ$ Rh| ˨:%"""1JDDȬjz=  6)WOdcn vO:dz>FMw]S7UF[nF`_pڞmp,< RP^,@tV*+*% uЩ-n?Jp&JUS.OnlQv?q)h`"YgfσϮדp\$Mt}ߪIb䢬B,/>V͍'%AG[$ ܾZC_"(fTam=:׺)ilnhf!8~-KDI>?/b :aPWWƆ}aL?OҤ{&*=&딈*=.Bb/ę5fR]gꞜ5'|BzzK( MjRAM)(Eă 7kS [JHOF$I_j͡mQX\KiUMջV`X8|Og3x:aH77L"2JԚM +6)Sy)&1wgU!惺ĵ$h ȧWX&%P^T|U;=GnZD"ognߘK+#$wLܲN~O^](4YDDD>V4d;|Wf gF.:%pHU5<MA\:'=AӲgvw4ŭ,7s>cT.'8H_APaR 1Or͏ӑɂ6f me?ZәdA`=J˅畖],[QS.T0*j]?Ixm.nf0ГsFא%]/wE'9 {:z .6RDLm+ 64y?TVo"]\}+п :"ˠ&XŕTO ] r9ZS~Qra+c4@1~:E%_mS"""RO<DxtoCdAHz3ɫK[\Z"LB[da16ԁ IDATpR"*6STA'Q) 0"LT6o g~#Q;zgpdžH͇uu5:[+.#4DaܒS# TaLsRթɂ"0}H |5%*C *sH5 %";;7I_T.Y^3ߩ-:K 2-8=)\?DAtoJ}]m=K3SP*wrmab +CߚV\Zt^7_{YTmdw =fkc ?_c!6M)$HDD?IZ"d&> yeu`ȸm g#2LKGtB<Ŀ Cw$1>ryWMʕ:^w? ?ޓLbjGV3)@L {:kjk._L= EdഌwydJ|+RsXKK1$Umfn ?8{#ERϕz&eKvlo#+R&%Y'NJ_n Z"L| #z4Ì՗(?J*ו'<_;W1P^Oc'{>"h+#I:w5&,ҿ9ZYཡpQ&2 U2ؘ@[N^•@\j>ZJEm<D~6]/(*ǂMQZRd)Y3pMeKz9+#1j{KٓXKuJDDDa`%׻X?;@('sK&wLa kL48$",=<&uٳtnhkLgUaI96ޫ{URט!PTR{05+1Ia:,7WҽQDX)=OT?/ ä<LVv-IAsc=7 _TL$g!%b8XogwgK?z~\wGGo[~YŰ4:bڷaxs/ [Rv9d_K$r/3xf[cIKW ImzZ ~$'6)Wk,UT Q#r{+,;;\̠%)Z~QuXiM)^ 9X0ssc=tie\0$}skQ8<&1;=:xXAUĊ}elmf)T-)[kx鯵fv1w;W`g07D s4Ź<,wݹ;"]]m-x71sAS8"{Tp3Iꢛ=5{CZbpvLUV!ƶ1 K1ǫ)(yZ㕎hi-BocniUÖ5qj Zfn .Le)Cy^#5UK+O76y_i[bc,9^Nx+[BKKt20gF!&TX%""zI O5$]zxrmebl3m> նc R/rS[zW)V-GMٹ]uj+P13DfRIP꽶D+\Z&啕@Yjg೭R(%k[өd,J۪׋2~)Aaߗ LLʟ21v{Gh-Ybr1c%ܭՎm$MIӰ3mؤ\^RbӟшMʕn3rKp~:>Tr &ꔈTDDD/LYv@7_{4>[P\N$y3e9iZ )G&֣,PY̓\EwFhjK}++W[pzn? WMC1PTZ|abr{^M#&9J)ƍ{*J,3W~&M{M#Z+d =mf!"&}9F7N?D7gp2!- Q\ZEH,…8q=Inivf, m<`gac]!-c2pZ+Źd &?WVK/[RJf> <Ы#xXzW"O p~:\MDzI>r -]-`ka[ ؙB_OeH,BtBF <:]n;%g1(][Vx޾(<=l&v!%gRD,&‘17փ}G@K$ǮNťHɐ[:%"""gjv 57&kӱCgP uSWa+/DDD$ { :xd⻜RacfEZ₈^<V^!n01ԕZ.krn>y9ыɫ^=]-٬N>I/[՚4DDDDDD/X\Gc[>8/HˁW@ZZ"qB6p2, `cn 1p4<]d"""9V^ 2 BDDDTDDDDDDDDDDjb`HM U""""""""""51JDDDDDDDDD&V*X%"""""""""RDDDDDDDDDDjb`HM U""""""""""51JDDDDDDDDD&V*X%"""""""""RDDDDDDDDDDjb`HM U""""""""""51JDDDDDDDDD&V*X%"""""""""RDDDDDDDDDDjb`HM U""""""""""51JDDDDDDDDD&V*X%"""""""""RDDDDDDDDDDjb`HM U""""""""""51JDDDDDDDDD&V_S [l*} C5v%17Bic9Xbg)ÿU=- s. Uon@3.ڴD8 We%kfvoulbe/z=E@o0z V6YXLDT_ 8:7{,{shG$~9%VNr7A疶=HC}mjk6Z0ӁH!ꌞ0C= uucY@ʰE$³@ŶlTS==miC[o{gc3Q}".J`83>)],mc&ebDZ=d(K,o:g<̰tjؚ7j9R"Kv`S_՗_SM]ާjV!@V^FLc;뜉ꋁU"15EFn (D2UV6v 7}$ %RUc]+yADD;V J>G/>BoƐ@7 [x%e2Fo$wGS /3Zar"b2 ӷ3>{9ҿWۜ*.~D >vt6@Lb.(a; n0b\ޗ*s|ٻﰨ:C{PT`%)$F6l6ٸMdSh6n(^2: ̥h~y]ҭ]uV좚^3Mtu)p) _LFz7w *]Tި9O񆯳;6=_/#F f{μ $80_ WK{(Fc`{x:e8_Qhmx9>teNeظ-ImA&X??l`j:D])3 Ϻzkpᥭqjbm*+/miB~n}1zb2 q&;s$Db0ylLYy=$<{2vw?ٴ65 -x?uu֎ _+_=GHϯHj7nKBva VC56HVǢ 8\C}TXBbdȪ:_ڿIM1#s ^=|MuԕX$Œp7; ĐJfv 㽳qMǬk&V"JX0CJԃ{>@EXၽʇxj`\ͮĞ3(7 "<0m3^9Ax(ۛaol.JafQvC# |q0 c 3*Fx9O0*+7EE=@9 oq$bD: o\ޅX>G p2 6;+cl~lL t6=RA&7o _#9f/GQ#*z< ֆݟظf8jZp\rkdc.0z,$2 J!-uϏdz^@n=;Uv,%U 670_<,(ІzbAPG=]901Ø {lZ_Iϟn' q+PRՈC -;W&`GTr7db!HECsXcC16%y+Hc\=˃n,䅑X,Z3?+E~I=mMl NJԂBB{g0ħx ҒZZcQ|13Fc"m;c3淉(Wnjp',.$0x@ C}n~ |],ޞ?C1>}z{"Sr2ǃ|q5Vz š~c?Q-?H\XJ o k # ,05CTRQ2aVǩB|?mºy: }v bֆ ?BVa Ljx TFM9xc0ؚj I0:|z^YηV905GD>v<>}UǮNnxy\J/O'WGWBQvxoHD_.{֦gcͻ1:]ڿ=Zq~O!ב&ӼtDBw{3H-;S4O׺xoMDt'1JD3*jPQӄqhmmǵܪn/7tR!NPk #xuӋ,l=2rv'F°nKN#|znIl-h}R, . [$|b1=AXA_I²Pt ҉^XY. X$wU=7VÆbզh#[v%nqxkpƆzx*e>_\C}Sk'kS5Qq\ft_ Crukge k%}=gr`[]-~~ 6HRgq"AO4W刻zwlcAXn98~I_^@QEVnV{4?6kfa/w\Z^mD<:/~>jQ5v҆kU[n!f:]/!9R%x*Exni~<^<97jw=+8xhHʬaRJpCHɅ%mhaN{F57s _ad-&9ݧf"J,_' ʭQ'd8p.>=~N6SGRƭ.aL46jW-IBWwʵ(95HH(HOlu[bQPh|Oē #>Lm/-;r. ] !{M1&B"NĶ%q:ڳR7uK$FDD ogs Q۶tN$PQ1 9˃ijϟnC意^82SYŐVU;eʪ!tڔc~<b[\=1jAUWKD:)j#xd2ƴpgG Tn3VCl)Ϋ~jno|񴴵Sr4A75ևh0X*nN T ru;")Ycholbl?$gWrΨfDJPӮUjTE/WM3KЋUH_/~u\!JH}} Ф+ji@0JDԍkUS%=U^sPk8|-篖j#V n }f M9kWzb$&*0HC W6 n71S}ې)Q)S Rr[v>~,.ȐUA[{K5O-j}Zc#=(L+3^L\y1Ep5Dd6iRySԧpY"F-1 8Z@S(uSg:Ey+S;}9n*Z\zҗ~@*:^ζZ:1#{E먊  [>Exc0苑QPSI8 vNM.lљ7nR&Fzk5thh 1VY~ݾ^9¦54]k64LYqE",pO8ۘ<R5LrjG%X;7C|amn>~]ֆVXMɵ*apgl? Lp$@l-pgpc igRr}fIUZZ|7K!Jqr!N&*K5O' x~=wk4 8p>O7uGwݚ'+"SYhlnŬ1hkWrf9N$Bk+!}z=z {]ziq[OѮX;7u8{ qZr@>>P&"O tR!XEduXbp-QOsK;p>hdcHr tVPVK!Lu rmM헑/W hUо`U4 s^9*B<u#ÉL$U7*?߼^o](MieO+Da>6٣]r/<H_8mLP@<Z՘< bHk..S[QQӄ]9՞ﴞΣk7ǽ|7{?'bj)joǥE\.C;Ӆ2_OAz~5JT[m!zڟuh|`LX[!|gڼcgS,N6&j;[@_Oc=-;S9C1fN‡;bWLN] ^=5}3vJ/V}R[ ^ĽA7SpUh_syIHV|u(_JxB p\)_VѭTS]=1w3O=QYۄ.#Sl=-Ӕܭ`mnbp~ièt*cZ"0.ؾ}%&3_JGbF(CCNiyr!.愯ZLhݦTX7//-% j'I^(CpCԯc{aN=6 2St1Su'zvֹ_?TmM]9noW@^׌+;HΪ..]&oD|Zf`F ǩnKYf 2T=hs9i͍摮oVpjgt6&uD W.Zթ]ӱl{X&yzi񇅚Q_]Bz!syq~O]#MD" [sobnzsEN`*""q,^ BBW(GE5 Q&o9Fx /mS ȶ=Wו?őԷ #< < H2~3^=1H˓CbQv8Q Gvn \ΪHXһ%Nľ\!f{ƹRHAXwD/p8~:Ց'{+vnW؊lkۗ#Y)rdc#]`aj_NecF]L-CK[;Z8;s`gi jAzix8Hp$5(l!ft1W_fTo^Ğ3HVH09 %ru [!SV' K/NPGݖ--Ow_ `2U4VP8#VBc$/s swN=}RP<~oN%X9Ws*1vpϣ{v&-E~iꃪf@ѱ7oLW*]T ӐST sSL7KT֨9>RÜ0; +1&_JB02B/㹥!05dž/,؞ث^6 dTd$/? q5#_#m1w9e@v xp"z߱+:x(L!> 5-v2QhjiN231OAYu#N&"f8٘bO".TwDoz] ݛM1&BFacQe-Ek[;\-I8vI6FyUN``HG;1o՚lϙ\\ΪiX< F.yhcd(7a _<<.rf΁ʚf<9K&za|=uHrMN'zaQ'7ŕ HgjmJ]UT7aX,q9 WT -œÚY~xc0'GLr1bS>RzVnó1} \$iB"|{vӹux<2ֆLބ?+_ax `XٕX,2eMx5Jh'wG]c+nTc8:7u 'd8 1\$6# 05j\Q}1;mLWZ<96nKBqh8}1zF9Ӆ>6i7uCCsRUh5XK`]W3܆S ͻۓ6<' s#dJVw)뛑]T _Ւ۵)76iiW(q[N$0;VNjO#=.4v6ͱw;|q8wQRՈؔbt*K%OwDoz] ݛM1&B./ޜW; ZZ!+WұlUOu#zr ]GIUfrE%y.\,|7^-՜JBb`A? I8toL]-}H=DD+K+}SacaLY Gi҆g>L wƤ0'IPЂzluc}9ѻ+X%"""""""""9Vb`H Vb`H Vb`ydN=]#B筩o;墾oͅ}X,B̿bQǀ}G_݉z;KhEGb疆`ߦ?gbc`caxcߦNrxǰo!"3]"""@O C}Ew(? &pn%‌jU4X R. %;ۏe"CQ]C1 GNJ* Gp1-pK$G1:nEyX>ntꈃө,I.Ƨ׎AZRwHDDD )wDDt'"HSTq; DDDL@DDfضa"n>q<4ލFFm$o,{+vV*Ar|4m*dNpƒ)ޘ9mxtsleq[kSYz W'Fc;.(X,BԖ9ظ- W*vnFBb:D])3ڮ"0{p .Rv1_xϵnYE=K#P/k뉐QP3)%vէ]Rb357 5 @ay^eX3BaajZ\ɪ7oE X1#dTC騨iz=ḻ|i>{,@SKvx`4<\ukfv3]0{Ʋ:Z`S8ZExvIr{̿*S((W M|mz/]-!]\sp"Q!`/+x8A%,Ħ?L,$(h@HQm>yz,u`g 4F3*`*4W׾a)1,/, /mI?mfhWLW 7"=ۏg Ǥ0'忧wV5b'M%bVdWcYs!^|7,ab<9_DZKm, dBj)~86k/oip7CmC nT˃H=偞X%0..QP19\I^l_g 6 CVs4?mC#;O5:Cj}ok,g X'dd 0?<:TKjiSp*VB'4 9p)9$""[X%"?Z1}̑#\,Um.8W .Sjv%ENXiÝ8E"ƪamc p-rOWaL|y(Mcuy[o@}S+BaL? ӟW@_׏B5]Khlj\8#m!4e߄xr`N*翦 !n^ws^Dmj ?4m8p.ŵp1Ōpg|r$J*T+)]0eud6+l=0e3^[38oa q&`×HΪTX>G p2 ͭeϙ\?Ýq\vX+8b+7/G?BI6X:TT {`|^r[IUN1eNoqb ň uAo K(j@"ʁ&s¦x+*u8*Ex56̒`y7= 31{FHbsQRw Lv<>}cr9Of塨i;M-m7Hs`bсvش6J*7db!HECsXcC16%oiIvE砤N$/L>Au1k BZ #/g?`!_? fRcT|4CYgI{Bblvדc,|wisi?n~ 2|* UMp7Qԧ~Ar<6;ՋDV?1JDD(G pT|JVV.ρT{W; :/^Ŀ!%VTR!~9/Gs\0o~2D ??\Տb kKhh+AJN%JVîs}sxxggC,a;*_ፕðᾡX)Z-tpǑpeFN* ^d0븫#*[XcrcC{1hm\ኚ&T4a\Z[ua哽Xd9)^X}q|a$Cm|f8'+uO$eToTsRT2]û?%\ m<4[v(_!^:fGzb`;j~G x'\8ie!#g]c+u͂ϩ!frC ﶼ)GD'f͑X??w`Yr38 çόC\+~01_ùk%sxZ)?Ϗc.caExOL.xa3rCZR/峓5?'#8lDl_NAե! AAUHΪT v: Cay=z[+_3cD/p۟Tt4 ȜkCrvJPST_NeY>>ؑ]*ft{u븥?ʆ9,L =6WKL s{iLsө,ejaNk*NRMh)޸YTsIBtח 9AV⠵^rG""]c`P*jV]c3]p8.5͸x3]TOwYR[&YmKʬ豜+gϋ|sXx+YڿCZR7{>^=ץUk-0)&YsNmW m' jU4hV$fk KNkΔU^>7 46!SV Rr;1SѼrp5 K&zb>q:GϺ]wǚ%AaE. IDAT:4ͮLn΀à[bKC1Ɔz˗]T[R 7;3kq1DW*4a>nilý-*I)rd%ok- 8Zfr@_gQ(l #-nP(ؔ ͪ}cS QkBۜ"QG7>M{ګ=ԗ =~=nTDDs$./ )hniG Y+sv1//vkLnh 1 +_.j[F\v~~ +Yd6HH=hr.Zaif5/Af5),(_Zpֱ~\lMUop[AYY=orzx{zѴPIn9F;_WT֒U!haPGzvLH0ehŪPm0W]TV􅏳ʴkMeT[1k+>|| Y 8}PBe]uM%qV*__Х͸u|զю mL[R ;Kcճ\w{ Tծ#MM3A24- ة34>bk y]s}!dm\pۜPb1 C1j֗ =6:ԫ NLr1^S(G"邘"5tV/B@x{FwI(nTֳy)R=b+ |;ryͱ=W\;} zC6:qfjKjz4 s >x % VuΓ^Y>958رbuibBUrwvr`ڈ[iY) Ř; "<+&GmA9ۘ| -EeM3OV{ {*jaef/ۻs@_=48k:F T 뚵SiW(t,Qvjc$/VT7!Jm+ Jg`R<|CpCK$Ez,*U09sGr"=_Ixj`-U3;_SIxrAƅuϯRt* ٕh?n)O\,,5 \$,Bui^-ZǺcdL|0+ "?rT5Ńq|Z0+%E xfq0'fTWԢI(7 #<܆ 7iX??ٕ8ӇڔrS4h0^_ N+p$.: {6>4'd^6 dȪ~ mxk[|r$~=+EnqlL0#+s̑BT6 {@,/vVHkKk;>s]9 X+@M} |],0'S֎YCp$K'zөi6X>ժ~3|U7dB!rk!k)LDnq-`gSJ0yuGaE=C=f[p2Q2ԷGd*uxj &9a@ĥbː*~Խ{brKs&*ct&9sRt+'ǻቅAʼnD*j+AD|͑UXLPԊے֚D?+ENQ- kÜɾ>/;SQ <9$&hCxr-ݷ;&8YwevVLŚY~x@嶔J tTwɹYQ݄cd'cHW+_v_ï礂ݓ٘7 {ѧi&eF<9<:/@X>1K2ʛj/Sc}d`ӏWp9Bc`5Gcpɛ]h-œÚY~xc0'GLr1bSzk pmC {ǻ#s%UM)O[o\ <2FzH,X_~6mI8 qX9Cdʪq0pԉ?W |b$".0o->|b4V&eLܻV Fc;Q-Uv,C%Eo a/Ʈ7菌9VXEjK@O!+#D"`L?Ħk A  ;S!P=8Tun?|SySOp`(WL+EȐUC^[SgSKjfIcC=|7K<Y". M3~M5߽2 QPzYc| wG2'"" 8Xo7,1a#M +Gz|]@\Z  #djg424$ m3D]e`Ѹ7X0Q&oB^I< X%"""""""""9Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H Vb`H ]""""""qxdNPi8p.na`~px{Օ>p; "]Ak$4Mݔͦn_M/n6齛1M{WH/a`eQ<ܙ{}=:aVYX[?&S9EOּv -U?e֜.Ҁkm?8XH&D}c3G2+X#T4Ѳ6ĕ-d jۙ4V<|]Vj_=~_Bq.bPLXv%ws͏api#=gB5lVq!)eh9k碱iuKZ?7eƊ7JyE;_w{.mOM: ܝ 8;P]~l Ù'B!ę U!Y'ω맇)udhCꉪA-z Xy?/U1 8,WVGc#Yywp6l:XDNz#1ድM~/qv$|5[B!{XBuFynmbk6p6PmJ5EB\l4{9G聣<.BqV[IYfrb;+6KioNd\ O8 ZIɲgLVGfA ~KVuDF{~wxrqzN*Lf  r`zTŚtʫY0#p8$[/ʈpw<^jCd3k2 k8UҩkygB3^8YSP^OvQ-_x^3M{ݸ;i;aQA.k9]wHΩDrA-}"j*uK-nǤX>[#E|q$QAZ]ɺ`|7 g5+Zm9w]13yCpQ'-  eN|WN &ߙ!ގW4QP.^7]ٴ+&0%lC&E',;)ևkƊZV:'Lf "]q#j\A^i]KWG 7]Al;a~T4_kCAݞ1}}>w(#<uJ_JqdoâYąBcv+[kv0r0A.=Ll?G/WΓѸPwyh`zy=p$]ҝ]'x{jyzɧX3O.g :vklĤX_=pAGAY=;|KV&NcWF`6+i$ZYaF8FLC>[edԋ?6.o~.8 9?`m.&+^3}Y03@B}(j$_v`OJ)֛:֚y6_{\4Uk)h`/J M yDf'>>ɃH1{MN"B & !x1fF{_;Gi>mNpfKWN 5rjJ[s3¹(4V31և+&/;?N]]v Cx$u~p݇&g ȳ7'(GxA.t\iz3+Sr]F}bl}@5`ԑ3F3e [Dy֏,ۘi~,a61և>9k6pۜ(T&InCƸh/`_ۺhVD7{&2{LK>=@}cnKwGWlmx8%x&׉_'f&3:DemSaZ w66!ƛ foN\;cX4V<`$ 0>l+Ær@_\XZFhgM#c}9U弧{L=jg̖uOǟ٩녉}xbH<\l':fý;!~e!LU2U6kMHWy4*X]5%S`&ՊЇhxcpw֘MXjG|WM ]GNܢu_u<>t.5^doyGa@NU/_Vg&w ~NĄaoE{+? 8VUosV+ &Ǒ Gv/uˮ+zSxÓ%@B'X!>ңӱ p&<^ZUD!l|F!z+f+0^vf7A.Ćmҳj .}c`$Vʠ;do3۰+D)C^i{RJ)U޷XqXkJ V`Mz6,=yT}etnKWGwc 6Iϯ6$8܇'w׶hVBSGMo~T5a_j+w -Zyo~ yr~<{SYPjhlԌ8oSo7;%k @mrF+*-cBMzbxQf?6O {d,i#t1?.sakR޴jlQЌ5^L(˙1ʟޜ o7;ë3PoՎo6d55VÞHv+f>8ĶEÕՍەlho\5;/8z7ΎK5zA?n^77?F}c3 ؛Z_Zho^k,6V-G`a,ېؒƶOW۶X:?22܃('#446cVˣY8%K|b $-lNc(Ӟxuܕ/eŚtMzoƪ57#GZ-d0y}4 >7*[0eWw]6 G{key,;{0[ύcWZ_$97' ܔ\ rP6 #{iԵ|yIJj OW_ZGe]fÀӑ *.oC-mPK6$r߼;kRq`>]JՒ--٪} ?|*Ù'vcRx8^;=[kyS#unU51UL?S_Z꺿gia6*DVq(^\/;sddd5|;1sT߬Ta]C3;Jpa&_MUʽh|7qVj7^}y(}IOꘌFYY"ڻfd)|c1X~b6xU,N"B 6XB5YQ>J,(K;n8;PS붬㣽zj!N٣;]wJRy` -!ͮ0{4*im_۝_ݩuvq-qa-Ne֘,׼:Sw;du#EJ#\v=ۑq4,Ck3J eBB>S|_eZe6RjiyMc79eW:F p1|] 2G;u6?mّJKɱl=Rd\ePϸ:jvZ( w'[M}Hε:NW{`$a6,kbRl_2 ٗZ 3Zg$պ fYpqa fDvKO똖u+uFGy*]T8qwvR7;B1$*8,ߜ_nhC`q/ZM&]8U$kqAڴ51)Jŋwabl{&hTz6SKWSS2bұ9K\NhVFkv2qfQyOe~Wݧ,-$SF쨯ғTOA4nSCGU2 .Go]zz%?4ܼt0q F#f=V_:k+]'mʪl:Xd"^55U:wG$:zIÇN1 p FFT*IꊥH[`u6/ 1Jwnv}O>iQؚ7'w}Gwh׻iy WO U7i)#|2—OWѯ{S}/B 6 !+ks8;ho G(Ë+~XqѲ]58YPcfhUZpiIB7]4ʨJPYo>˾2%hbgYW d F#J7gOɽ*)k5w]6LyѯY1S d;/3S]owi,H #ϻ;kΧ~KGwU)͒QeT58|P *eYaMk*߱ %:or0Dz+1TzIC:wOS5 F%12|KXşQJ=i\GFe(X1lHįUy⃽b4ҩX׹՝{/Pe_ FϧZB|6ĕf)K,P-&fW?]X:L_5ĕgkf|:x{B1ФU!yEۤgɠڛ-,([eQfOk^NI <\35Z릇19ηW7hVr%hwhovN#8f#w^ib X@ب胡?{ L Ô.6nca_8Ɋ9(gGpC,Ί0?g4VLǽI)F.:_`3^vJzJr/1m=e8ZnϧM#&x;_ڣeK|KO8lZrne~O:ZC[G;khX zfb^Crn%Ærɏ}VnI:ѹ+ t旷X쒢7olfDZb.o=ݟFI1lf^6qüXd&OT7wQ`N̎n{Z}e4yqj QR?Z[4Օjhq92Ѕe̠QXv-;rNB!DoHƪStGͦݟo)so@%u<~%OW5fcVڲzPIi/x?ܒ=WFbש <~egx:0>ڛP?'%Ig8eH{+SÆGxt9`myj'w~nֶcҴ֚aC\͂A{RJyηN1, vŖK' ]'L=7' < vSIs7~/nMY$TRLay=ێ9S|$(1Ǵ>گGT*¸a^&ߖ{YOa' Mڦ]M5ӴU lثU* FxvUuM7jpU{kc&>G;ks9 .ǟf=S}ɹfBCҟ#驜7&}@ r`l̟¼Jkmg?M>vS&&Y^;33!;Y_7 !%\S^/3xE3É r!יF$|s>>[αJ͊ {iլޛOFA5<2We'̟% vN#-g2sQP^ϟ1LGW4UXîRV<%m"f댕jϧ^ s9[nw{sE~D3:=lH,9ۢmYWL &߉@/Ge+9nK肫fW`Sky#Cs"׉:m5S72˒&CRja&&]0Ht_j7릇22܃P?'ܜ4ԑYXï8atS9 E7<͊s`B_#}g&s@B|?Qŗ2 ughGkSS㮥۸HG{nOqE'x3 skL+~FCV[\G^i]hj JkhVtӽd;|;c|) Y03@BRUXCFA l6uL~Y=䂿juW4/[s̚w;;/"!7{ZBۤ?f!TS4BC[ö goNPIL+ !G'0u/:nic2Y7=Ź%ۑzUuMZ_oGB! U!y>7j<\ln(a9C泵 : k 9 8XUq\Gl59+}_W5Ƭ.B!XBY0#+lteOW[b!0@MN6wJݑA(/#=;ʸcxCԷ)B!XOXd !Yog[mW,b0!8]5M- hhcVR+m51x;U5mΚچfyCeB!!} !B!B!D/B!B!BqB!B!BVB!B!$*B!B!dj . nPZoq,r%B!_"U!ĠX%۶܂z{7nvDD3:=il8PȚ}f*6R@g\AH/]yjm▋#KZnsI9=t[(+嘽oa   N)elڳkn(3)n䥯B!y8rՔ tŎ*-eu3͇wPOOah ζdհPɹ]ߓ_kb}lM:[qEDbokERN%fK6>ڛ3É rJ"5a[ε tݞuN.5ih]wӡB$Qy֚y6_{\4Uk)h`gR kP۠+ t0[WDӨӣ7IСÙ'y=zPFSmQ3w\b}Á8V-Yf] tQ$~f`"[]1ZsÅas'k55VŃ^<{s!N_sB!MXB ?͏!"l=c}xL ~Hc5y( u"׉jC< Q^<`$~m!,;] ކ~eB5cVMr ˁL*T*x8M AjN\;=jH?ϊڪ}!0q~Nn$lCƸh/`_yr gi桁. tQ~6O]zCv3@ i\35m}6 J`Ք->8IgŖOv+]!ۨh @'x3^W㣽y||HO"=!Xs+3#& yv]ɥ_!B_=B &2 5gL+cdmAբ )BjfG2ci-ÞncT-l0֚ޔV~B8qR "8Ur&&0r{P`0S\KieˀQ2$UM4Z3-oT8X>?.JP2Ҩ-/׏Puf'ӎ\v&Pm`0ݦ^O)cSOV7W@NOz~5{S(jÞGLS)OmYPc`S uqPO;|B!8S,ۘܒ(/;r9_y;^/1V >tm[Ѭ[ZY_?Mdwk&@q>[FemeZ6.bH?tzN-B-ͼS2z Ty\3.dCkp+eG-`J/eYFhwVǨol撱<(e!ʪ;bcղ~lnv;ٚAlɹ=[OǺx_ WpW ͜(~Bqn!8,܋ Ɩtƪ4_(w\ulR[.[e:.!cD;o7l𨶖jlr6dس{v]ٌ57Lms oV)fhe_>]GUhhj6bև`D7AT=7=;jg,Y!XB "=fyJw' ~YY7F<]l5#ɔÆx)':M3^lU c06ʫS櫿5fiAg6ȊBJtb^'kZ2D'ᵻu'mkc7fg& 4__S-ڬ7T>8QAD8̔X_[/k 淔ej`k*Azh/9ŵ-Yk_caI;c]٩.X吏ܟ2XlKz} !&} !>\֬BӚb4̓9%WN &>U'{aζ=Z-5{ s恫+)[`QIoŘh $=5/ZBn/b>[! vT?qR Lcq*a$A^˙VET+c}1ɹu7Hw(R+?pUiR'e.!V RvuMz!֭Rdveg{z?rXKf3xXx^!B$cUqVpϊJKvv䐖_^Xր5"&=6V̔1hgͿ:tz!>NJV ??F'.;'5vּq i iM-Ix?hmx%CY'X !De*?-ZEIe3.<:[WB`_trkXu9ˣ7̋5WSp*U*-E-dѨ+A%$SId 7EL;E?NýWĐ|aA\35yRkꆏ=o^0<:{[kl}->ث3#p`xS|Y@m!d !]ieK-QAfA)KWeo`v`4 v'e0?+o6dQAy=|hP`Tmhl/R\Щ]t }ު-\ͳ7%0g\ɹ]ηbklJ"Y js]c[[Wx82>ڛB7)X*6yDeF=R5sho˦dK]VX83nYT5ew) И`7<]lthB}DJ[3k- :^Yv#,NzaB!8Iƪb}!&O !ߙFj(`N70oR0 $ N*\A\;C],-E26ʋ`GJI/濛:W{RKYf\ΈpwqRVl!:_ʢ4ƊcR!_SɝKqC vICVQ l~X2|׾;†̟BD3ζײ3OY-\4& =~+wr:5_)oGlԑWڳf5:6n(üuU2e7?ɹ1'.:i(h0wr˛Y0#a-uRNTn]Tub;|zB!8Z}rT*(.FMC pu*FcKzߞͷOIء^5gRJX(Sb}yV$.juoݒh4+lcX/-Gv+b qGc9K2ŕ ڗһ&pK̖1~77Ό]x޺o"ISOonA e꣫2ypFExV(j-U4E 9jxϓ|83[罗Ǡ7yu(n]Uݚuc٣xd՜1QZ΍+/іZ>]fqew!sYY{*SO7P_'tp7Oץa0{j|>זm]s1< [+Wɚ4gIçOŖץh|b}:W梱VDE ޟϲ͙JvZɡHŕ l9Z6eD {5w{;s<rCruWv3"h'YXQ;iHέ͟,Q=w͉bD^.(l8ThVG>Þ^-;6č cX+5 :6*ٖ9c̶\f0y}i4ʔNt+_~`^KFA >nvLцC'y}mqJkRz:pQĆcZ;uSG1-֏GazNT6462\:nL ŎF~ܙϻrV'gMԛdsY4a~<^|Thouw֚?ƤjyUc2ni{51j  ;Orj7; kOITVN8mylӓw9zjvo7aZ#ܹzk0B|olf۱b>^}N=TTO7}OI/=7]] s0vɮທ6(ٮ2~ؑûO͂WO m9>ɝ ct'OH^YRkˏШᶥ[)ҞnI|VV*<5ćymc+#-% sH./([>Δ* VQhN,ާOm*~8rkmju 乛FR'ɚ4|uМ1A܃g'CH/֊?^wh~47t,{OMwƲ͙H*;ƱMfzqs۩ţxfߵMˤtBȟɟ ]Ouoۓ75Oǘヵ TpH>[޴2`͙rAwen9ZĄholՠ;nc|nt'r*6{N?VÀČr8ݗEePMG@Zߑ~_;>@nY8[w;?)}I!ų"xw s ifdߏ]~ݗh$UHQ֧ŠzR0Ohoͤ>=oq}}L\5\3%O^ygO7b>fGi˴wIʭe0*l7S*8QŚZiP1;)aiGҫL<fT q(dRgU׶q"zld2B}L*i<9QB&enW]lֲikp<;G=9ɫ5Ρ?;ύ [ `ORVm"J+o~mS%8ai R17WR@gV ӽv#G[MmJ>ٖ0w]x۳F!&z.9pw&2Ogkl~ro]<18ٻ(ieQg(FHF rhjm|͇L{WRp_5}0zb]FsJ׌Vo'_JKPQNja|\ ȹjP"-Ӄ ;*͑]h2V53R|(h6;O7v4*Ƕ%׵19%ƛK4+GE8s$ăXfyd;^'wXhvH˫ 5x-^\ϙZ4Z-Nv IH !{+K @ӏT=u#qHp IDAT]l?cYaFvrbdTm꠶o9 Q!l:o0<x3ǮDARhP1Ӟ¶qϢK-翁WĜ8?R rkSCc)_7;_9M ÂJqi!l;q9C0p؟nS+Pyhy, $1v0#/{sgv u_Ǖc<'jqXʅz$unVyF f6оfiVfi4CݑHta-XCRT]( K,X\uCw@UC;Nք;abošJ۔Fud]ڟ>1+CL>h  @ aiTꝃܳ(/L*!w~HwOx^:ΤR \ +K&!w 5iNf6uppjUɧ3-k2+7 ykJWd0)͖ܦ$!%jOe|R0/4g;+ lW6 XTwMwOf)=osǂb]v%}g8Q\wkLcl<,Zwvf3>ƒގT6D _1_5F@R͡J>9}ی} UpY5_γ9N*`=(jaY93aδv{c vÂ\. ~o s^A]sӫ~$]o`,yѸ;YSCl9\hnR 024vPIYmk^ßH$2Kxv)>w!]mSwMEQ<'v'kx$!Oyz xd'u` ni<=7ck5K붿ZoʩX5?9fx^X:X9uCw,F{7mh/rֹ||eY)j Iʵ,yњ `JU8o)7Gk>}`2׼Jy! ]//J.O(O®2v@֮G!rG50~\y] .$b cU .A|TilQfi4, $\o<|E,. VRc¨;b@p!@ U@  %ɨ2kEQ;ZL*,@ HHࣟә냯r)=SƆ}[z;^lqv;&5#|\WR#yX\5c$y`i4WMzŸ9 .`7̈`*@ b oRb*,돭)5%ӥ:=8\X+dtn;ݎ~8Rȧ7eGyJ)lCy]umJ۸{)8?z1C\ilQr&$}" 7ܵ0Ci״0-k+|s:yMF'UQ~|==gqeFh oe3&6ؕ[#ǁ6(a\4&FzrP|hPq:aX~x&Dx~o qm'JX' cJ֤T6`o#LɆN2JX#S +[򳷖ST'2Iʫ5uLJl+WsI>kW3"؍e.O{?2%à绲sct;$Ψdi43PL!{;PQΖ#Uo Þ1avDqa"ijSLn/]/-J.Or4j@U q0 |T*a?D˃Cxxy,U#}0ڭiU4% r˛9W+ҊyTr˛ y9j^Ç`gkMǸ.jf_2eVLa`(nep(G['1-?w;Tj 9eMۙS 뽃F30}z/`gH1 t)|+NEeh4ZdR sY4.@/{ldW~ԿG^FCk'ʊi!SZʧ3ٟ\nK3øl5wb4x7֩bra4k>>9`@,gj:|`y~hBݱKAS[>PoGV_Pj 3tZU&eD7gz67TR x>>ҋgs~lw!Iz j~AvHH3iW뒉CKsA$*5vd-͎{E1| -*eVTI:Og< W$H)Ҩ7?|zW'2I+W<K&al6rR yoketh~:^M3 r^wȤVL ahT5v🝙N7}^GzqpE>;ԕyyͳqUh9[?SXCھgN cק`bpSp4w~H?7;5gjd{}h nˣh|sP_'v$7u@#> #iT'}lؗˉjõ<"%D߿8:v.x[tOgr2[}`2vr:UەJ#o0*tCka$r-Ě1h]ڈqLSnH{PZpSpa,VT"a0O^i,7Z׌br7mJR pwapo r8Jk[뽃4+9ԝ'Wg/aþ\^tڥg~T"am,e14)pUTz.fL+kW#HP4t(5\7=d<>1P]oʝ "hiWb?i|po(dFẶ=˼ˆ{spoc:U w{&K)m PZeyGyV{y;ڟFc"ωooƺ7S` vw^x{W8s:L~.#|Q4d40ۑ3ˆ qz+c<$X93 _W[ڰs+bI$l>|O^;P!><hx  (dR_=p'4Z-uMr˜pmcԟJUgQT7 cbO?Equ vx:L$K&!2nIϮF.r`޸}&uB&!KDְx^u׽v[+C<x')kJcWŲj^oWsIL[DZ╽lY;?Sֈ-/8ƶNMȿ eΨ%D8m[X_m`dOů8S;Dm҅;u۳xSFs{/]ټ1 0o?;[:`+ٮ,-B*0-`u!yl=Zڟ|l ;O]sER9]psMg)i!ӞǯMϬ5KcqhjS!HL#G2x`i4Ndu pו+,>ʑ|#W=Bƚ>BkQn$ݢ{;ck%E8qz[>/f:gQNa}h'2xkL=H$ =0׽oN|Nv .6%Z-έ( 9Sf%XN9#I{ÑB.vONJΫ>5Zxn)=V_T"!%d ;:>1]md97%,zf_Aj)Jۇ{)D[EuǘOm}3~hMbZ%ΪwhhD!2-x cS)jA!2coe7\.8>g\3Fتd5ʬ~RkyXm/ /Nja'[1mvmHCyWN&߉6%7/r2Ԋ?;j{1>ftŮ_ZQ8I8[ 3lWDzju!86˥?'{shWQk|q\OioN_eL˲[+9nQ^3شVgxZdt}`Kwpܜ̉j4Z--*ڜBeQ۝맇T)TiP4xd3Bs\:Gq3L򵷑dm 4-{ΔUx9[ÖÅ7.`G_Krx:W)э O tx21ғ7&Ԧ J63FM };>Փ_ ީfþ\:.hgR)S+Pkvז⣼tfd ЩҠRkٝT ׵RXn4{9^8Y2%d{fwhO.gB' `?0;ot;)+w-JܜLsVlw׍aN=[nU l2}j^ ɋ_'1'{;&~[䈓uo~ɯhfיR@}k'ydy,Q.4t5M|K+: l9R-shML+%ݶ}}|@ wB!-2߸}Qt7%s:O'B\ ,EQ8[nGraMD;Mc8[PGFq;Obn>‘*4hϪ慕cRH{>ɯ3G_m nV㎥Clء)H6\ڕ i H'BjttG&N yȯg=uZ*1fir[V{(FH"t+gr G;ᅨgU-xT}<7Ƅ<ڔ*K8SXݶ$I;ڟ>x:^^|lMu7iy3|< [ l~bI!.l?};2Fqac%;'veѡRY@bz%K'kdol?YB~e3H ?61Er< ޺}!W$DAe}]mKyM;q<4o ϑaNelu#_׾؍ZUف>,F\; bT*Z.Faso_ZCFiQsc2͕a&'8+hlU넍:r)>:cgjQC\HH0գ7bqPz%y3Ow8F\oPSW"ҋ ۫ +MML}`?eU[&2Jt^Hs9M9r2\K [+9o1l T*1xڟhiW넭:~#b.fr0&c܂>\`jPQ܉-eD^°^w>7mz˅uU,jԢ^eiWIʫe\i\ dVfI4r:U?uwG2룙U<{} <<6NdWeѣmc%Ֆ5BFSa@| - q/umF.R-CZI/BKFڜLe^['DwR׽NQlN5Xc8WMʬGzb˽}іa&Wt*.'[sSCXݷ5vZ'JШI]> hZPxEw=Kn[RL |TƂT*ʲ6f-mv_tڔ9XpG2LcmnL4vW۽ݞ/f3 L1IZTτOz z)y:`c%cŴ#ªf[f#JJ%<ػqٳ̳e0sf}b W6/7kYk.o2q/qՖcL2TzB7`HyząWKBj x8ِZaR~:ك|ĴJm-۟Q\ɯEd R+p"$k_e _X绳9R޷Yl W뷎'&QV*a0^e{;hmGm}rA-FlK|,eP7gWY`0x9みѵ.2|N N/nt^M:nH$0a0zSG#LO4ZTo>]ؔ'rKo-֧?#M剏"S99"qaPGȫh6]t{9#< XQV2}n!>dOg$i1kifqF2t y1.ܓ6ChK{rͬ"6Og,an?^Ψ4|XthFq<(l68$oϰ]< 9Tj-KY:1Y# t[ˆ O9.'R-)Cdž{3y.:kNsaLejOu&鱾ܿ8맇Kv Sc=tgQF=2ʆ68j03-ևcPȥy95zvj-i!Xqu";K3[C|yhZf <#׉JmscPqM uEIʫLsGs[:y,韖+@SRZۊ_=jjŕcxqcY9ZEٕTj8'Y4+ە#}WGhJڕjZ;4zK3z~o=0 ㇣F1ь'(Y3w}떮.UkJF+;Og, (K;k5Kbv5ԝ7sSZJZQ=jN:j:Tۺ/v*Ɇ6뷎]EbZVrK'p@ Vê@ hd5r2#|iTs"~NPXMoyh Mz6kK 3ˑf,}9某Z]ku0|qUp6䞗Q0=և@{2Jk[vc9έs˰ST_&)o`NS83 _7;ZX7g.odŴ<h-t\cygaU + sC޳e@L+zϽT eu\1){|WoT"1a)ŞlR GdKs,Đ-)ȤBQ5&Je}7;E;og[r˛ؗ\f64Ձ\ܝl9—#|9[Py\=V[)F@R͡J>%}@/u,OeRͼ5GXNOƙaL=uml;Y§;t,S'ha]Y}rdٕEuc;0w'kj:|-Ϫf#iP')kd{(xh2&1WzN԰a{MmJ[|sO\3ʐS[Rxh4Zr$o`ཻQȥd6g,sXZ%|s׏FŎSSqu8V#>fm*]we8w̋Jrܽ6{EqpZ:TȮ᥍IFdžN\k3Ð ~?ѬYbo;wLVR!7OHOg[,&B/ļVo%|~=hhǣ}:ݡ[:ydy,ޮ4(}SƱ=k`!ܹ +giH%sM&j^o>ռMwXϔem[ͳ v@Յt{Y~41ҺVY;Nfrar -*6?-*b ~{.LBMc_5UڅL*)!<™v^E]  @ @ @ Ԃ4@ @ @ d @ @ Ǫ@ @ @  aX@ yQ>7gk߿G1멫`\.@ .°*@ ӳHϘ{e8)?C.[ ,Cpq2"؍vlNv ^Ũ7R)9卼sU-%r<8F㋗ yMc*etVr(/ % cJOaj˹fPx:mc">gj;| uJ.elMmJn}#yv8w=ht].3XAj; rehPZwdҮTd7IF9?Nu; ōI\3y(A\ulQ q LpQDqE"z96XwFZgwkp9Xc3x#U7@ aU @pɰt)o`dXCeC;sFVgcSbyclw[!JJ`H?VL ṯNQXՂkDsׂH9 5KbQȸC4) rqH$Wu^͖εjl7FZ?8Ams#ʱ״UHOyz/fld,DKW}j$[V/cp$n~; rUiՖnOim+SX57Q!<$E-x:phΠ(Ix{D~9QϢhɛM{O,al9RQ5,0Wou]F"nGAU3@sQCyX)9 T“=k{43^<-+Glç;2yrILBd l:cÙܿ8g2J1$~8^&S95Z˸s^$2>>o1/aþ\^v:{yYo]86]9G3|W6/~Z7ڟWO▷P 5Kbxgk*9eʱ4u|:Kbz<5oil@  B@ .%*ڨi 2pm(S{#Hę*F5yj4Z-3V͍0UZ;yqcsFao#ٖmMmJ+yqc6`y7g ަIyt>f{;ZTO~e3j6ϥChy5l9RRAҰH;NpP{%~u נOy][1&{+M /Ny[9f6&RkjHf_)C袠rhWQk|m鍭7OMV rkbo6V_l2md)!<뢤֟dy|0wYdt}`<Ἱ%hZZUC2V2.򶨜$Vl۵'Oeϙ2?T@JCJQWONAc0_'l2 PȤ8r48V G2 p!!¢r8_.|;zW5vpF%ύ0TkpZq|K`@b @ \8$ɽy4fe%̉dn sF붲w%Zoy̏ `QzsgI{͛}{Yܮdor9 Ձ\O bӡ|SbLcg-Se\O~۠Wߣ^;jQ[:Fcڧ{eQ9@ @@ \j4)-obDFL)⎧ vVU4]ZUl:$r?wS}V }n)Ϋhw2B^Zx{7K Ǒ=w'>t/2Kt[G%c&9Fu5Fs B6W䰔& Dңdž{茐Avy#^.\v$K=]; A8)8̋ITk-ob|Qz&{V⭨o$.-l_OeRZ'_ aU @p)t 7 fݶ_Z*r$'5ToS 4ɔ>Ȥl䬘= @tݮL^a N9ZqL#eYm+S HnLFSkvA~sGzh\ L_ an?X<-+]l9CmswgMc9 [+9μph꺅8_KnyO^3`x vû/3k䰔t(<$.hi/KhlU1!Cޠj׍aSb> ZwxT[{J JRDĮ`*^v~vz- b`A@Q^C{/Ͷ l Dw~ϓ33ygΜ6V:(WDU'Ldkr{3o0!;/VǾLcSux9+T*Ai%u3Z;secKu?72;`tI `F/_<=psPk lgmOtx@4D cU @_Ǿ Yǫkw,two /Zg;k޺u Vhzҋym]*9v9#̌Ϭ>Sy18ZQQyv$7*O'9,`?= H$Kxf ޿c܀϶PƳQAmu Xt=]ͪТؗ-o5kzs8WӫNp(HDֲ/>=b{jgG{n4EM'KX4s{kP,W:CaJ8qñ;O}K1t֮͟x$z+7exqs_>6`ڄM {H&ky@  |~$$z7/,29[c0-_W[ڙWd0o62??G"="@ @ uP 6-K~J62RZOl+{#CKqf٥Cb @ "@ @ |7%y18YӮՓr?=VgTtb IDATdw')ƒ_76-vZXG$"@ ^G>YbVcJņ&ߘf=a+H>S?MlY<ӻ'rX6g(>6+9Sx+>,:gjxc&g;ora0o^^{ +: r+qe |5N[GVTM"臵\]ǎSe|5Wc\͗D2q7v 9E|%3H}`*v֌ wgٜ̮dTSsczb(nv5t{;NGIM+G""kPa8Uƪ=ycvּ}Xnxc2k&23;F5m`QJ.1*[z5V^37W MjۛǖR3ޚoz?W[/M5ͭF.rŸ`4e+zo3+xi(Y|8 KkSzXߘK?qa<|Y,1bG[*m,sg[F5+ǧrxûwv?Z#7v6-ҍȯlbf% KyxPuao#y1K:xu#iT3=wE^T6pt-jmz0,-#Su,~e;K(K{ys3i&'%}QֶrhnW&V<}u"3+; ]Oc]iQ۬&>ؕnIqM 9=clNLz\x:P٠23̌Sc}ؖR }cPZɸkT=yD$ *Mi(5o\:ܟwc[knK;q?jcKeP/^Z2WgqJ8l~4:=yQ\NvLv|ǟ O{[5vᕥIֵ;ZٓVΥ#LY'%<8!FqK'9cq7맄`NϪ=y61&beVhUky4D. ZfQ\^o@o0<]lM}ݤ0&PVG 9CZ.u44 $RTӂVg`́3hzڵzݘA|+J뾗YXY)r!NŇ[2̧냽I/Le3m:VCa:*>۞cڴ:鍁Q}ٙZNS^UCk4֊SiRi0d~ קrלޫ%H%5)6H>S/Gkr)ux_VCiy<Η-'KtaL/I6H6 p(tB,Ia&9=^9]@dH_'dT ZzW.m: iV`\6oInJOzQ=ꦼ^ņEsP9k1AHx^G h^9c Zڴs* +x @ cU q&f5MD8rgYoy;%qf}\li`flZXgEGZ%-W !kۗLBNCK;C|Ge*I07֞.oa,nÃ,j6m(0vG=Fb x:p0eVrbϵZIo Dwt5]KycyT5!Wt3zx=]Ϳ\JVgzK8]hߙ7@ ூ0 ?}, Ъ}zq^HZ{م]3 Nw>w7fbS(#t^$KW&VUkT#]jKՒ4Սm> kcc-cWZ9lkY)EuQ0R?8sGp([pOϾʹP!ֳKE-:(dԴҤҰT},oNv[磃W:άؔh/+)myɳߞdٜG7Gtξ>к(? bj|{`C\p`eW1%ƛԷc%Z4 W[vm^@  @ 8]H= .քz9S3dwR j͖ L68%rt:5 )*;e406c"EY]+nwq{ r1A0zNz|(lNrÔ^wOO/gtm#9Slh)d }gNIM+La{FYMjۯ (OJz]닣(k#G/m<Y"_@V%sgF8<,mԭ%<BDɨJG+_G]l|lHɫh-/H2:c+Ulh@ ொ0 ?* ׎EŖg\ݕo SQZɐI%[: W5  >uնↃ RtKDשWZ1ݖ׏ ੫0<07 0QLݹH$pPS jhtu+vi}Ae3oγ Va"K} u=_aަ !n,1:X2` ?nH$>z2aNd~R R[Gf<@ ூ t|=6f8n jԬ;TÅ6n{owʗNF&_[ͮy4^]^o`,6/jfShQkyc .]iUkycs02)M* dY͝+KtZ-j-rkxd:".uj YQX˥5zvP ^-w+aJ8;SX>uzT۬f=1M>ޚM^yS?Qn$$=th IMucu*4]Ɩr.6,!>ؕZ9]ܿ oB]Vn"!36@_'jxz nœڵ˨ώ%ڵ<[4EM%?\Ч@ @W@2 @ &pի;{C6@ ]C @_-Z7Ю_@ 8"@ Avs0eW͞?Z$@ Odc"@ @ @  ˷@ @ ê@ @ @  aX@ ,)W-@ 9U@ 8BX%8Za28Z^7wd6'f|X'bʒ$Xý_+~+~L/>1<E(@ .hLim++6gҨj(]16FR jhn5Սm\ k'/(}r>z(kЗUƑ͕BH@bC‹P(4ؐWHסU_yXR97;f'?L>@ \8Ǫ@ )\79 CpFѱP普w0N5do^^{:B<X6g(!htzf>=+@3pL ImT5CBNU϶g msPB\ˤ7 /ZN֬~` s aLfWZ9WM!ݞ5naGj)_b@״zoqAT5|J%|{Tm38]RM{9фz;xvLJ㱯ݗFfȯh⣭ddz˘=OG%ŵ-|5y5&/Qx8*1*ywc͗DjGMeV42wDI6Kf:`0Uʩa\YqxVld~&ac-磭YcJ+~zt:V7H^Ywʢ~?&GsTZXu|z s v_q{ihns0>3W`AR #ݱSI/_3(kpی(hQk9]ɊM\16O=>Xگlrn!^Ȥr˛x _KkS̮ds} rep"} d6l:t%:OCk;/=Œ)$v/^fI8%/R *v}bjhW7Feʰ@^|G/G!pH ݍW6`c͗D2:wGU-xNj0Y\9.'%Y% ,_ ;wBv.d՞\y` FGaU 1ebpVs'Lk: ^}mJSʹiZzᨤ>ݞCvi.Ibt_͙\7);f a_fyMLΚz%&SYmFQ~N448UىBl'ixBoB?:_6]__KK߶%1qL*NTT}p2pwk`BKqqnUI~/єS /9Lp`9-T8}w"ɩafJb4\w`Ӷftzeب9QE896SY8z",e:H\tE%)1k2=C 8a/ÌS!$RF1"! Hfᴷ[Pi񬡶ށɑAo-2OYLPauOfxBlt'R"i&yFdxn |xxz3#W`e̍-G_ݭo,Zĭ#]=>J+o#X8:5Θ7o+6e0g!ݞ[f!ۑgkJ)33?7[kZy4Ҋs+۲9Yw`xsCZ!Jc<No )܃n짺 `WdR O:Nm`W^n$ŵ-tnEBO>NQu J9wAtYo0xv2YlN.,W +̏_-oņIN%];spThoz}r`NqghiӒxdF!#Þ'=Ny k9,Q&dRZk9WJ5B(JZMe6թH!VG3T /8k_IFD,EAU36 n<{p23v_2%1< kZspRlVcV/0k^iY4:=+0ˤ LZ.ΚVQ=M* Um8Z['!nJ/Pkt#=T5]V1gM/Ě nEim+w|6 n<8צp,GVݏoI)͛GѶΗ)1T61#Η9xܲ~nsߢ`s1 Ɛ{ K.esr ^3ߝ֚GQku}x6-Mmx+ҷwSo9z7rkWʹsPƗNuoIzuIM^4 ubpT>$Η'"@JL(OFGzG8i4pkG 7B*_DsGB5'%#=L1oT lI)!îJk#=LeE:r>\6?W[U*uøe 1cx+J\vJ9wB]Njr\w_F'+alI_ LEs:L-YMb/Ra4q. IDAT؅]KL 6DFG-sA_cxcұ֒֝#k;*GnbgfѼ=T ao鵿zT$(1ij7Fr 7Fc JE;:v+|kmRL-ƫʅyT͵VJ7}x׳a+iaLxau 1FiI;~>ĩdrC CA/Jܰ&C9FG{!}bxs?]yDF!Cxe(ࠞ!."@ ׳zoM* *6+bDu *>ۑc2]?9wpt5jOmy`O{ҋ9S @[U{Pktx:0&ƒL6qHK"KAe3G3`0*ݗUݧ)6H>S/NJmzpf _uXƿ?rp dR۔iW^íYLR=;7GOz;RLhyTTrYS*w@K~ˠN]7{fYCxu)V7Pkd{6ŵvMw,թޝKFNo`jD80. k2ާ'kri~d6V\5>W%<8 X[K..ȕ25gu?-ԓ_;Fg:X,_y:uN)gl'[K剣Y=̯aϩ5{tAEM!~Nusߟ`P/BN#)s;e^\^oZ2}4 _DZzo7jB4Z=u ؒ\u,.Ɨ#}Qu)|뽿~5a7rW:EcG{gϩλsf}S J&1H$澰/nf -5G*p4;3z3*T35,y{7w}x/o_iUkt2hdR `s/me㿠j7z=&> nR~2->{s'm:yȎu (z+j,^+^Ω:rܹ֠r?k^y^K%aѯq,y{7Mim ӟ'VGo0$!e"HH-cK[쥭뫣%d{(OJ=P*=w/}cx<%H O+7[W;WIqsm$h\_0gJE;^< <~0P*:r<ǟ7V,@|ѻtꄓ6_/;^+\E{'{8PXU[մYD‹j Ҫ$a ˣU7坏.㙗PZFP@ ]<_=rϾr)xy^T'.潏鷱?rxy8NR]Lcx|UTҪ$%=ۋLc^|Z^{o1_}?{;\Ч^ש~>w_Bg ᵟzv!ac-gLꋬ~:RHR/K16,@c?o>=!~Nxt/#ܩhPKs?1'~N5[ڴ!Q^z @Dœ sǵAIf%'DaD8rIf >ζD4Xfq!^\?)}j2- rF!̽8$@Rp/G;-c̮WZfUiӘ[XL|qH^Ew6y=sYFg&JQuKq0[ڴ7X~=^Dfqkr(29Uٖ`@w0+ogF7IhpXƧHNi#s*Mf.K b\'Jb\p&Fn_"h re׳8?lO?Vͨ {6% ([SJ r&=qr#B)kdgZY؉b0@^e{*#)-me1;($W; %ж/zbq(!Oڙ\cC1\pǤ0Ӳl9Iٶ;٩pqnF2uIBpW!tv&$!ƣR]DsH4v~myH4%edd1vT:n s3{3+0 c3ߝ27wD!* -?߫17ڸ}>kcc-cWz9l΢`[ٞZvxl3ޫNg0}I Ȥ{?d[bThu&tO2;en|-5ѝ&>,iXSj]ƶ>v?7ؙVa>lܚEu9~cv=ѣQ XFz26ғS#XS9}<+Lf VXucY&Ký67޹4#){ $2~265u$?67w#~cV㹼v둶窞Jaʄdbu<´I'H%"|˵hkU)~q\ k̗f0vd:!z021ZG^{ ɡsR[govȉ(fO;g-Qa$Ğ`pX4zT U8Mk_Z7eq!s ,3|Eӛst|,h1䏫P/=dgaI?3^ ."@ $ۉZX%ۅfqz:p +s1qV ;T.k$Vu3_Ҧe3ܹr?^NE{c"=zFSX݂F'.ȕ.m0Vg Cz}v<`Qtg:՝Fr#t`O{\͗>Y` `fh=8Qx?@Hqc3&*crK`0z.Ĩ0T&}zq}Ιf'My}+~ݼ lw5?֕&&\$Ηm^pↇ'[kӒ%c''w'8_flgDz;tr4:=yFOľT-! Vu%6ȥGXU6>:,T"A&pp+QQ2Ks~LBAU3~zAjKш`xChRiޱ%:6foΔש؛Q*9]eG ;6VlI.a;{&h|c,H_GF#JnRXelKlڨg0yZ*+Bc(E㈭BBqTRK&ņz{|6Xr$E%(; "pJ㹤\p~`_A]idý@3SҌFToZ=kQ&#jltJe;*%v`XuWLZf0vmVQ-ıP*:+E%dz*<-"4ny UKfvlaUQ3DNY#v\5>:-$$R)6p&fH%hLQ~NfFZKpbL-:UUB9.ȕb`wz9.Ib_fu+x`~ sN>]c~s``Ԓ11H-#L-E}xK~c<)if cNgf7r-''Abs!׵\TQ6nl#>ؕ&$1ԕ-/ ?_4Zc''pf'#HS ~`;IN(nw% +M* g:^wS۬6Q~=^delIZ u|G2;џhg>Z6lPZpA]Y6{(WD]`^ZQ]FCU4dkkKGzeR ޘyM5:U5M#.hv|rD]Yѓy97Fg5Ubd0sJ&ư"%D1oBJJǮqk,穇DN9=>hF$dW?GZ`oʆcL[TAm.2ꌆPiA:ΕWgǧp=Lkk-v*J=x{B3/r| QW4"wSULm=NXYPTT9skwGyH7#"OzkpwkD*S`GFvP2*̝> %90ƧkPm彽]{ek9_cIؗ 3^ .°*.:_y1|sTrK L֮qל|ydd2ou-j QX˥5zv~mӣx4ʩ2-'Zc庉a+H+oOέcLc^b+_֔ҋosr m,N#jSu|-۬OYB~ENDBuwz9lϡ#֧Fg"nY$ҐI%$QZ h/]njZڝۧr W{A{SƏ n4gǜD:QΆL5yZɤ=\aۡ(keӮV` Vp[arNL-cv?1.6uDc<l 7w0JjZ@3u_{^Ū4|~$$-ύBϏ`sp+xhgᆪd{/ CM +o]ZvU@PqUdEEQ:JB/ %'i? d sΜ̼w}s}^Uv$wLpvwD eש2r&Ans_6r)C+yu VH$)4Ε4X ¯*pmYjG!tb( ik17! W8OY]3$U=as 7s˛{/wH&eXrkhiv7`~Nd/]B/V)~D&x:tz=H%dW9 ->ƿ\7}_?<%e#̹$R&UA <NAAFGZA-+1 2;[=ߔ=zVG)/L*Ia<ԕVx拴ˠxo6 IDATOх1)dZ59]e;UFgW:{܊F<)jb͎ ÃX?157lmW6LYy{om`Mmrqx8ڒUi%&X @AAAAAAAAA_1*    `%1*    `%1*p:gADݕhIR(/4,+ѰG2{ABeٴ%TZ-T"a?_~I eb`U"+mfs([/wT~nL aD!ẙ2y9˜A ?&fOpV.p8 8=۠iW Wh#k|B׳z{J.Ƅ{xЋ~kGDu烇X`ыݯ^m B E֪_!<׃Z@ա)vL2"}-qyф:8]ͪPjGW,I %~;Z=X3a^2%?T>9M 䶩 rB!Ymg(VAQ?1/o(}̅#↪UÑj ˒15ڏs,I r6ކ\*%\ɻ?S[R 6ˎ~?4Fyry:RlcEE*9(#9Yߞ n;ώ$ˉ6 ULZZi:hzbX1?kmI9SƆˮߓއL*a0&h+JG{39Ye*Wtz=*X3vQdT$)w{r*ytX>7a^x:ے_jHA,3oW;z8Y;?֑~.<0!U6vg& !,aQT||b ύ]3Gwkgښ=3;{je+kvfp(l^wγKqsPIhuz䇓~7O #ӑ:Ub2pˈ\26 [9t _}jngKWWfKM_bH&F H(m A0!o;*[h![c G xQƖ|s~\]0^h]5sŒ9yqpvoh1Cqsdn#Sy鋓d+l&Grs!>N<2?0_g:=N,t}` W1*%턲Y͊hlQfkΖcZ_)SPku,3>[kr@,Áǫ_r4TʍI!~x~?/fͩ9*xQ<4_W{^*jQqU7q:$db(/4y@c.AF_6`^u 5*ʔ_YFl>ϻXĪ&r~No뮯<$.]y_R+C vX 4ɋ7B!??˚vcpo^tjAOɥU (oha"Fy(VZ5Zz=_)!n&ýmZeq$=ؐKmS+"kGZ sСVƚ]̊PT +m#L3nw,-^=SrswQat>FnSl9ZZCŽ ±t;{^*f ߁<4:=zPvSiR(H ߅OA;[n3KyQkiUCOS}wUߴ3#cRixȘk2~y$ͱB kA;O2+߰>OEt8U={TCYϯj/Swp x~\_z [Rȥ([гT)E5*4Z=hxt=TmݞNyC HE 8tebt%LY>˫%I38Y[ت&3ߟ(H-tQC>˄ۖ4jUm(ELۖ_*#H:cBvppuΒ6ȒtEe2̕+di[5lr!n/N ϏSwשxdN`Mxz1k;>/kٍǹ~B~D]?-k|-&9^Os7;CRrruTp^q|iI\ّ C7I^NR.6)C[~<6uiyp);_u:/bGZ)O0v )UE|y8ms۟~?3O6}`=jF^1^!5N}I۝ɬtaQ><8w|IÄLNg KGT(z8{ ? xx^4C<9S]3L|kOL5gniu81u#Os|-3%eȢ+Qy~%ᅄo)KR&||-=hѳ}kSkiQkG|l׀dir7س?ojUL9 G \C+ FGI[Of-2[@Gn{ރu̐&5mx8ZcR/YeJ򫛰t4>8]v*CԪ'~WihnFYfHFqށ-XDn)?XZ>ZZ]_pwAKmp X`d'?,1 ^?Ov܆ۏ{kkhPu=:fVfu2 xVGnE"~Ύf0wDavJj rcF?;~WH!O"Je\{ͩ&0гZ5l>ST4|Kˁ%B d|WB{u_4(#ɺ4PFs=SkϷ2s%0W2J?IeT^Ҏf+ v2ץX]wݱQAs$1U,/$|k=OKgSHs8z8jձz8WRqs3~@FW8=lIrCw|y8kboÄa>\/ F]ÞeLcza]6/ @}Sy AF>kjgF?_-$lj O (n"?7{~L+aΈjmq߻REM,}KJp/ס2ÀZZ&|گ2 •B pU62-+O|n?[OmOEq D"H'3,З۫2 ~nnO牫bz|am6{KwwTtb( k7򲪱Og[w>0[>.8ΕT*A.p0"9L)euLC*k8_Od!|Mӟs&1Skb\ ̕ Z~(';$F( U߁o2`k=OKgCFq pwFRc)Kc:F1%TBβIaȬUq8 HHÇg)k&1g{}Y02zUȥ,fь.>5}KG::~n*ܿ \)R \rÓԩ(Rfg#C<.(v-Nfh4dR yA{Omx-E.آfCrN h> Uc95U*/MzwL୻'boCE} %RԆT*AզGbF?}z:L[OGryTIUV,&>@/4-Mi]3;tgEW"-3*X}KfmSV[PwD?^3~sh/Pjuh}hM _1z=)@L9WÆV?05f5mO[4:=n ޾{6:󯭧^y8tz=kvddqBmK+c3Sq03L嵩wk}j{ϖ-%(#/oN嚱ܼ" G[9,?:U{x}婥q1Wfʐ^+{gGH$2xa ޻a͢J KGlKeC++taje+/ymS[BT]B@2^;LJ-qWPX},Ll2%0FX{ӣ=}Vm=cw49ltTm9J\q^O@9u)j`>/4l=IFIu WiUk(?}Y|Tjke <yQ*6pAb?EZXDtUVN0&p1ӑϓsɯjٖ~8|;'qa{жm:~%IkܞbwA_厀 •4;pY5j9-3&̋9ZxQk#="6g/~q9U%^y7N!TIZaὁ ANg Ε6 hەWdzf9-j{^yz扗Lmg/y\5  8UXw ]Zˏ%V@T V-nw&^h} rG٬&[qH=[6mD~_tXe3Ole$ ,WapUA. wML6 Gٞ?n;ϊ$ˉv ULZ;gvMcj),I ͞F۞N~uD1: O'[R jy3T7h+)LAAK-G 7_KIm3ϮPd˴|\ȫlmg.Whuz,}Ytz1C r-Fpv-2?{fE21DBFYo}J Lr6$"JX6)#qSG{39Ueq,H q!xQ7 zDwMX?灥ymmZn[GbGqu39Wcn<׌ʘ0/-??SV eS'GX>7v l<!0>/g;jrh5xTnJ %~;K܃7n_i!(RƄ{آU?s qBq4U;ϡj5=kx۰|N4#C=KT(yw{:ժ~.υG0F$hsPz:QjýY9c 9 {f gJrjX;Ԃ3(Moz/J9("9U[OY$P'[X_a6Ly}=,`syQ;s8AT)[D̵#I$pKD!Үeϙ2@^}w; #ˉ69ZWG ПS#tM't ]Fs)ִgkݙQnBGGXb*/m>Ivlvmk 9(X}$:=d^eJ"xPl)UyJ.#zPl5\uquPcY/<SK)|Юc꭯=b78]t~0&ȍY@DQlݭñWY;𞓝 a6K1<5ڏ޼^׸0w /XswT꾉|78 F%{܍U*'j(^m,}t*1^?9LSYֱU5Q{;#S%LJvB٬fhlQfkS"h!MAձxPqXny{Aw+EX:=сn>EqYr*cP|Z vX o~ZՌ ťPe;74||8ld4 vH$Ȭ(6üyq Uy8 #)j2̮eR8健ymmZB8UXǓBժ!1ԓɫ[R9SmzwpUV7:Umr[ _a><5*= x;۱nOXyusyS&y?8׌JT&Ͱ_>Wr4TʍBx<6's$u,NͿC~L1v.}Yl=^T*aZw !Ȥxڦ6=xekUdoKim3MUMB'0Wq,z3WoL$%|(LJXvL0O}~ck &ʱgG2*ԋ#ݖ2dS}o~[x15P/.|poNQ\b#O]@aA cyhNvÒ;k۳pݸ^׍=_I. Xnà{tV$#=yfqjT`/' ^!F?,z1υgw|ЯcM gGZ ~xf9[\->T6tሳ sVgTar/.28_D_u<% ~X}ZJyFcT2gD6ʷ.Mﴤ^Zւ U \rNgR)@ѡXa/̏_ߝXn5:U7?I} )R45:iըhl>Z]${`0<[\)4vή(oa"FyjϡUEjڈ r3} ߟ(F94}gȤ9JC<ߝZb4D~ ).ކWJ3 3a7nI5i~U/ʽ3iboҤPx0+VCknY*WZ浵yki#uz=ry}ie>Zh[#['q형rN 7%ctYIm38׏1z@=gL&[s=6%8S^j ɹ62aXa1qT5yhzz8]Ɣm鶝 7gV˕iFըRצRl͞& F16 '[<8WZ~?IWj{Ž ?wȯ<0;OVXk|XFYC[Fqv tPv:FɭB`*0+5}WyTڱaiBAuMBҼXʮ2>pN/,IF.E9@VedUrᆼ-9~W4[j#a.ͭ*iEuP,#]`tn o %, Bto=hW';}MCNE#+E+i0mPk6`9;s8M1IΨկӈ r3YOVכFҮ#~h-“ۍZE\;6U;p`:\cF&%ԻrlocmG9WS^±jV)(kV;>99s7{V^kw;.Vl=%ַgZNxP|=͵W~.V6JV5}^d+S1.›CUȤK5uLZazS%K5¹nO+ z\VXZ[#}`2fhK )ny$uz}rP 張}JtEHUl=QdUii;>}GHv--j-am˞Ɔ{YKҞm9ZL䣽;g\3eȤX1UP>׏Xbz'kWc#uLSrw)Q<W(mEͮesOd2+c*^ØUT]ciݞe}`2nOgf~L+aN| jhXBwԪ@ NkA+X @K.a>ޟ=VGne#o# _!Zbqw;[m8tŃ.EE} v֌Gx9& tw ám̥yvo']Tǔ(_ld_֨Z5l>u)n*ZxlA%i,ut= "Qic<[Jʩ:fs͘|s𣚥y\n;'VG~US帋5Hwi\.^$O :mPld+Kx8Lne#z\I=ӣnS@ڳ25cʀcN_SYw7˝lr/Ζ1?7{:?;J@ 6ƌvw>˒k:X<2:2Oyi-jr+vX7PVB=vAA^eaӒziiZ RUA.Os5cb#b#tX˨PO$k:=06䌊 G^e#Ӣ k 亱nw`0:(zjZ$-NjCJ$ȸwp<{|Q.96/Ig:>9ϧ]ˇ2y s/ݐȎu̥Eץ Oww{'7ݪtwpmx8:VI dx-]hCzP>=ͺʙ/-FY8fCH{؟[R:|8%C;"N޷4-v9߅emt*Ψ?qU:ִ#]$na066֢t-j!@^Z:ΎtωbJ2{e ZSwmڞ}y8LJ0oD []kJY}3SJ$1Mj>)/CB 9u(Tmz_\&5b]gRf3.hiSf$Mmw>̒k:ocj#C:Ά'šHɨOg[`g#Q1>m6vZxvw^(s}ziiZ RAjX.GEs״a4˭-<ca5<όiiאY>=b-tO^gLNFA53=kI$Tm~$.vh:[gGZ?ʒhiOIMcO=違Y|d$ e ;pvpu<([>Sjђ4h_UV^qζT*[X!9r.V^[W $K74:=n ޾s6:N AN,JrFɇXOra$lըx˓\CH~g<^\2-+gSZ#PN`#r<`%y|lmIȤd+7i}HN5/oI;Ple[j1e Dtj`E;ҥ # c tݞLr+-:G ՞Ԃ&(kC to Uf(*FGja-֦XZwm[۵jώT8N.֤oOlO$pƣ?Rrhhw'~fAB mfn?M3zb]V[PwܟQ[OmoM OrmzJV~qR+Z۵ u:52vx@}ZrF2q^?=I%44\iI$A~)$*VA񅱔6`^ۭx*/}y>nTR-HOo_qrG粚O=#tZF.I\.vkIuyɖuN榷eJA   \$6r)Q,JMSo~P ~?²>[17ƇֹƭB.+d%-62)O,bPUAK  ElǓWdKVWYׯߺ=4/w46i}\ktֲ#htov rw baI.  ڈAAAAA$AAAAA(    &f     XI bY2>tP q'gj0`dƌA9ίSuwS[6-ڏWnmv}3" fٷxT"aã=H1~Z慁ua;j`۟nѨ!箤K'A_;厀 uͬyek; 9O.U?SЂrGq2˔Zot,Tm+x=5U>tz=wepWx9qˤ0e^p7 "݁o^#|]xlhuzZZZҴ\(5ΡlQ[}T+[/ B1*phUk1𿗳--תPku1vW wjot,s=^m*{ϖ R_a>Xe^p7;vV ?BɢvDNE/i9%җV[(oX ] E3ύ& VjV'@7d2 NfWarZSdwNF69VWG ML*a0VNer0lz+,vnN ciR(lLE5*kĺCtwbNJ9qG)T4t\HtƳ-Y!½mr8?h23bk0mj,UmB.%L?FEL+FF᭹o{Ζ!|9(]I>{RQ0/J^aG;9O]@Pwl8S?W:9k IDAT1 p U6vw&d+1?!;kUۛC bxءdVt~=ӇHMS{ΔSdQx̰H_-M?Y̦yzBM5:Q8ώmSӆM0<S,t||A,%l:gL۰|v4#C<ˤT(yw{:lDYa><{HZsW溶|8~T^$J\|ω&N϶|/(}-+aIjMHiÙ7"\JK=gX'WU£b pEӓY]v twÉ⎽BF53tfgp_dR 9#߿I#B Vֿ,SW'q|Cv=}ds(y>ؖj4Jn+LOb/H+埒M rwRЂL\3nnT;^V_gG;^4U2xnV'5O玏`0pP^j/+ e 'Or{[~\4v(Q)޾cJ:[5O6}źy,Etuu62one6}@Rp#γyQ|8GOݛpÿwPk%۹ϵ-s"J]4og38J u;29]bU ޓMuc [tI]4,=G.=d7ZT{ihn}*k# I'`0i5y4ْRJ Սz>ؚ(?><J}{eC=Uˤ^\$+%q^[䆿V6.̛ft\=-mK!1ɌdlJ.Nw3EV4B{/eVTbllqsbƞ:k^l _`2ls}Sh!30-4ycq&E)uyIE#Y-Ll5yZ -T)6/ ;ҤuͭFڝ0/)Gʱ`sgPXmeNTknwMNJ(IfI[Rm?dxIV)Il8R(|Nl y|/قOV.&N1+TN%SFv}@ѪYmVq|5Yѧ޶g_se{Z4WԷ@WD;N%:* -^`UHNnk~9Z'URP`ETxeC2,H+ )x9k:W>ٜRzp6'9?ꎼJ_΢`d`Uzb<WW7X^U\g6s9#Oq'mcV۷'=̲ äy?:QƶԒ-,\kR5I}~:zZkHcNo)hT 8nqP)YNeL_t;ۦr!Zw *ݟ.U 9l}~@٣yV <6+`ZQq!Cn[wfs@0Ū@ 80ߕ6_Ǟr Ϭ9GM'OYe20o<^0\8Qd}x &3pi[!;h w>ݑ%ܾrn3O5ٝ^NneH#N % NQRE}Ϭb%s 'R1$ bѨ!9 Ш8kT.q,g_h{ p.9v9h^5\VE}yqvf_+Q~ܾjdY}FF .ډs%:ȝ^?溳-lJZ%/=mǻW>%s`2KT餏?|bv%.C9Vk^0-]b}'ˉ tcwFN%'&)B|u @7" 6u|7 >]F*b]sEj<'Rxt4WHU_'$fwzX~ϾzU 9~.*-[,ֹ(:ȝ]v8nzt(){g왧m쩋G pP>fݹlBk>겯3gftݓYΊVeg_kWh18a}@0t53J]l6.yh0x8RZ /^{TR$!a^RXdjg4>(;\7-e؄`K~ͭTv,WzÛj{\ٓY.Ⱥ ߾OA6UqtPvec ͒`l Z?Jyo%_7NMid޹R=TX`Z& Y=qlJ)d w ⦅!ܱ `/'+p[d9]Kw!<}Ye<yɒ\Y,P0t(r)DsVҩs>X؞V̘6- aozقZ/g yIMnlAQ6:yGojekjI=哶{$υ.#_'vo27z[yi &̝lF.RzC {OY2&[FRG Zcc'fR8ٌZ6BvZ#}{n眾jk{t8dVJ2'TrC,ndqѸƞ6ns6耣F%Fײ[,W=$g]Fv8nWٻyƞ!1wVLx8k:gu9;u< =s_kuقB.{;@ +@pI)f#U+ybh^{yU6[Fx"iFV$2 'mN}].k|NyAy8vwo!CP>]-&f-P^ߌ=QRҹ?]lBAֲoN)N%oJ.b^l :lIkj wfx'[,m A@7`.K^JY]3,I>]ýɯa0IbN%%uu;%FzEv8#6@ pm{=)y#Cbv|~\ Bo0=%XBMims6zn$N,@Ja K_³r+r:#|(Zb́\I wZZՑ`Տ=ӉN{ž(k&Q\46Zw+!̳@}r/%~ZdY=!NۮT =5~@ Xgo0̋kER˘<ܗ7:lq,RKHʫ)ʩh`f=/BC'&ض pcXG]7+[ &>#/pW<5<,ARx80e\O eA\H׿ܕ6J!G$!q|껭hf V.)h,~'boқhl1j4SZی1VN%-Eiѿpiko ev$Ս^*m|<\6)Tj4QRcqX7|$ qf-SPo;ܳp$ pqPȃKpժl{{Sϋbz? Zɕøs~>3KqwRs0i+Bxv˯&Ǘa.bjEG~9Z(ĞU&s1XA?J磢/g ]qP)pv!):jZL=ZrLf/dmΏhmrNEd(2.Fdǁ Jjx1x;K~m3>fʇ|;yq]朄/;Br[ ~*dmݿ8;goߘTȔ~\;-O=ݗsJJwGt,kJ8QcmC hlx{S-el7r 5m~*ٜE#3*KN%.Eo4Id/%M$xYZ)k=v:r= }=ao]=˥0>;t]v\M3"d |BFNy- 뭧Lf^{׮HFi_ű|u,jUאO^\syxkjX`V.Iw|yxu"+f 烛VRPw?}b&GvɎL*Zx1xhnCb;P~6В8<4TlI:WksH_:OV^#U<̎e 4ٝQƃ_:"1ĜJV5 c"Ưk1pPvI1@<}M;Eͫ o=UgޜƣlO+ =_z,?&0~WN QDqw|GjZ}lY1sZdI B R_k@ 8Ȧ=,¸ Рo/ Z2[qAE#)n9g$Fa0Y=/Q;?Vc<~}<sp @ @ D@ @ ~"@ @ @Ou@ @ ? a*Clyt;? >:+U}>ʧ8+y/ƒ`ud{ 4OY4jk:o였s?3yᲱ\&c?0,ʽ獴YYyb*!vDB?YyLΤ9y w./_1O' kKO[ Ey3 @@bN% -v?adsKGr;)kFR,bXxok:'JuVT!!ċގB.xd7gs:Sq͆A7ƅzȏk'v^1)Z}7GVr⚦@ ؃X@ f!khjƖ\_d{Z uM:*ܴ$Wjŀl9Y=v >~P p$:н?Cg^ܵȮlPkU IDAT\Dt }!,VYef?]:ZjtL'ϕWICy w[YZO & _, ߳0BٚZ“kXr%5Mx;brzucuollx8E=Yng+f`b.tMc^z"üIʯaXxxIؖNi]sˀF ᢱ! v`2s 7~=NC[iev$hUT4\/vVWwʷux~X~K.bljR|\s^4#x 4;ˉW1!܇ksgzâQCd0|\(k|@xt0 Ձ=?ʳlyjY*ؘTh+ͫ6wGML;:ٕ\c>fphULW'Qe\99qA8iT4dGK٧Gt0@V=r y'όHd|b(Z4r+}^cy!)=.Ye2…c؛Yۛhj4¸ Pd|slܝԌ Y*_RMiqHBiٕQGdAIa\6)O' =O 3"ٝQ8Q٨rVH4J p{I>u/{`2[ؖZUSˆsEb=YrjU>7!(rygsU:&Grn0Jo-ծI\ޖc~BapBp>h5('qӪ/ӹ17WLf  dG4 f pQ϶Yc?gtӪO2zݗͦ>۠1üix8Q†^ڴ3^:a^r&Gb`;풵mzJ8ZK;;yQL k}]|k~ a.=H?#$g:2s1{: rp{J'.NI{+b2[XG+csFÙem>#6-yՆ뤯9/9HFr/g 3us 7Kّ`LFgYcn$?F]sʟ@ .B**{3Dﮥogɟ؜bu@~=VȤ_Ƈy3=ҏIe2XOJAĸPoJ/#̎dNL8/YCPOUQ21‡Vf*n4J>yA7Ȯh$2G/g3lNGUS(nbIB0Ywµ"pRRیF`+B&aiS`pco6l XB.l޿8VFPnP/'^Xl\+bNbA\"|Tw6rQ,KDžPfA\b?>ej! ׅw:H]s+;KY<*eK}\Mk}!lI_oka|8IiX0}8#|xft tGWHrA O`R/O=Ba Gp>.#cz8yw>#6#f]8[V"B$E8(^Z qɥ d2fXG/oHFTrH:?Ѐ֟#! Cbd^|<9 (ߛw!]cxQ~jCybaJkѪ<$[fGonڶ~.k+O-K`Of"yPO\?&q$ ZsǕ}׾},+sۥa.Z)uG)n%}4qGil10*ċ/͋?PN%ϯOIͳe iy$ tD((2޼v ydLf }xgUpy#Jf)ky8cY7Fq֙n\7=lHZ' ^.X=dyTwq7\hX<4*WN/#)=mwΏh2s[0-D`WT60>̛G/%Q9e %*Н~>5+k=)7hXOy} lF`M]o=ܑ\99L ݴjV.msxgsZeNyq|+ ɘl&omeyn*:mn _1fnx7-FFx8tomޙCc{s{nZs'{0\8f(/_1C_rAM:زї,`ȟ@  @ UZfv(`v0ve'mJOg sc1[,lM-aSJM!x=R0y5L2vb6}R.CV299m̈G-Vȱj.xu}WLUKu4+RRS K^lg?~"u~g;׿Һf2Z~E/SgLfxQ-^+m/ӋGKN;U+kA |u7á<\*V%LtT}z.zm3YTd枅18t5S9X̚\<.O]<6`Xzj8RKPG ؔR̵"z7\*., un jpժ|RE5MzyLjQ-LޛhUˤp^)I@έhI4V&6/fwF&V#oz}Qe[t  R)a4YXs0Lۛ56ߛ:w6QZkjn5lƆz sׂ^5C9-tz#oLAR0uߠ%芫V ?*_Rhh1`UmvSJ%Q[ә;27~=NA[?QRCyL69#ɫl9, ٗB1[,KcpƇ`nǮ2j uGqZ߾?q!iZw 򭴶3+!bύ R_hn5?W~I*vkGuW6'6꧍-^%~.%#k=V^LU7) ]w~Vʱ~Xr{2;RRjȈ IcMO_Q墑RfՂLj<K{cC4έvH!}ͱɹ=UrO-&u Π/ΖlHC :#F@p|E0;&{72 d9#|OzIZVQŽ̛q)lj_\{wFyowslb(JyJ/5ԓ&()rh2ߙ5s}'˹xl)55y,Z)Ycc5;lp|n9/g Qd7ؤ3}ի&tGt[kC=.oF_6`3v`:8Ny;YZONτpgURYtgfpNs?W* atQosZ'~$aQݗiof9º?Dq>.\35V4Hy uAV5m,2.ENoW-%M[e荶j-F -iɫ*BX4j24JUiBN l` ٕQcxs@wgUtJt,jVㅵ6o)$s%:Н^7溳FE}۶ G X},ޜNo$jrX7I/Zi\jԓ]@ b@`2鰞*4rB9uw#@H̩/s"bwm*ОiV.#k=a{rsc9QR*NjjI/ct's'Jm!W:ky.aT }]:ttz#Y <8_ 8Q\{ݵy گu؟uH_slorn)]"wG{C=qd7F@B*:ٕZtgf?C<8W˜ r6 !{2˙fFb0I|{l&evLNSME rgvtNV /vgͬhƆzSQҭFjZD:O >.q@wK+\)iռ|xɭAlRط?JeK-FtdR/i:*oImcYL8YV0g=E;N=;pRBfֹ&.,BNEA]\6 ͞7s뛥_Rt$1:i[靊mn0ɮhb+&VԵ ,ŵL MnEc%~}*&r4J&E):g f p0_=vf eLj;#{7 3N-H+oM93A.܊@ Ygkh1]@PO 1üquQMNECxEr>y_1_\sW r6F?ѻJzժ5ׅ/S$j{t= `}Xr/zp.Xxd ca<{6q O_2oW F23ʟZ\+b%ca<7}d04jo~V#]l ktU^BcQ)-G QJZޗ{EcRQ),If~l > 2h5ٟUE#qP+P(bH nҬo1[>`/ sb=Nݿte\ v(1{ <]4ͼVTΩl`\7^.;GGO!C 2xgs+dL289(wQ,zݙe:7ed9-??g FxrXޒ4zC+&ǗƳM|]xwTodYVO#ij5?gU/N dȳǰ.1ցSp_RgHUȃUڷ'e2rr4֚Pk*.loMű6tXJsQX:}a"n1Vjl@v]8Nj{.{-i>7Q(2%WNﻝ{8lR(nNjADmsȬgD#s7{cqѪe [UI⅋VJ%-{۰Kλ gcI.?=('~'~ϟp  k(m]2/Ԧ"mX;j4#EChhHSk'5J@xü=zAGU:G^bN%U:*Zȫjlp{fJ#DeC Gbw*gQ#v0E, K]!3e/{*]8r]'M y\W{z|~WF}3F炋ٟ- h>HW~I& %ۙs*yZ &t\N2;!88^T˚9ey#*' vZ/w:[?͝vj2zOظ xcܽ oMKyUqc>ٙIEC O/~:/Y~3ʆi_ݨCyoSTvkSx8<4Tl^T Ӈk5r(~Le ݆pPnZ)Go4=umṂϏMK}`Vz_8 G8̲1pM"7{mWkK+I̩d2ۻ_[cn4%ulI->@ YbU uf3&Ɍl>Ӱ(>ZɎAUΊcpsT?Nj t"&ȝׯȶ^5ڦAKW0X_D@ sP ddn,x:iX׹.|c3- lM+ɵPe<5J.zc3 -&pp"|]ij5r4SZl_:/tz#+xw kw,==ԋV~;Vė{iY{*yU f,[ r晑 UĜJ?˝sѨΔ5[r_dt)o;M;2!\4&aLfdWo%wrˬH=qqPSs%-`@ 9ͯ٨7NԝV:KF3ύKw: yNEq+"B.c!gQMȽ_;1 l_6!'wf(ON%b\?.E\#ovs%@ U@p֩ll ]@Nϡ*Ƈz3}"ɘ_T Z &ƅzfWF - aX,zU, bR/7|)݅qA-:paP=YNf!Uq,ł\&cB/^6߁dfA\SGQ^B]s+C4LF^U#N%w(Jkxhx 񠲱g~ u<(\9K'݁}ǣvDξD )E5ڑ vjZJj( sq(d2ŁVC㰴)0 RRȱ$>' m}XZfB}\mNCxgv#7:kK6C )$!@#br6Dz+yyw*v]D^!${-?vdMz|>|f=9 Ax8'uuݻ'Q[IB'~5ty -7k0# 0q [X=_騔 nuցU[G_}})oeM V؍J瞷|]|͍m`oB!EB3=i] 1:܇q;V0/]pS1>ʏ-%4[7QଡM^U#vxp=t":L~u#brm|'YkݢICjD(z=B$q˄H #Z^\{ m '|9S2wYqy:h{p?vy\ FQFi]3V4)m࿷okQ驋 CydeDV)Y}8/vK{wOFۊj-1wNŞ@n!To: MmVm㱕c{m%!j(sY_!DM=:܇ FUI\Gy<4{(UZ?nva}*^-5,zg;6^u b{Fiܛ)|rnA1ZIFIol>I3a.!x8ie65*>o|nvDr$LOqL Ҏrݑ{p׻;kj,ÿ֧b_FPC3@.u<>>l 77SK7V WH3 A,}+vB^U#wL^ݻ't͡oΥ =x}m(U_e`xhPhMm\}3KuTz$/9F#mS}H v2^;Iуؒ^c+ %*B$*$h[u2Z`:1=.g{5ҮӋ8]z4Y?ɸ? :Bj6?:ܦ.]M;/8;~8Zث,hx\?z0L2=.gq]d~YUˤTjov3> MeVkqQCl;Nb0Ѷ/DUbKێšJK!\72J F# -x:۟ c<8[EەYFLZJ)1ܵs*-^$o`z8⠦q~(*^gSvڨmj#G;v*xFW*,[تSnة7o}+xzpMuhA\Og̀^!VM'鱸9cj!Mml(cnb̏w,Rj sߥ7I^͡Jό9Tk2ȍ拰}ge2?CuN7)ͽb.w&DUZOsGAޜ h~53zՖ5s;P;{<έhdP%՘.0E F#}И{ozPJK>1Ȯ@۪c|ޓ%ݦogZ n)c^~nL `Kz UIlJ+f"0&—Ɔs8*/E5Ve}}ץ#o (nwtybqse3 T*:j<6u>&[ Un(eg6:*ϭ:Y#|H+ `W526wG-`vB U C*MYg>vP;QT>;p뺤o7msuJ!NBK2:e œ(2;^۔C 0͏:!>| ԦŞ^̸(_V1̡\9"mG>-#:9?_3js׎h4v+%1ؓտŴ>k[mg{5Ms|w$FkGRhzyJQR^ݐ;'1,ī[^>ݓMa22r7j2NDP05֟i<8+5)4QQQh itx9[͓QZ ̏۩FtcV:zKoԮ'F${ܦELڔ5jFy[zx9c4%8^T" Z8i4H+ၙqx8imjcnBPgcv| )T'KX:=g{5M:&dȼaM:%b(#%?- s ur a0ww4%9~> _1An*GPhN䊤֤3?ESkjaɫb\`@'FG-B\(j)T l,e^b0 -ɯ̭Fۆ'K2;ʸwnO&j+vپl*ә]70{RJo9I`5]cዃ<8+(?74S:M@Vz |u0>3I+aվU1 JPotz,dbr =lh!wNy?SINEΈegV>CsICk;.@RkR X+ nO\+?RZkC3^sRe|$ȭl?Nx2n݊]C+y?^ħ{{.MVJ;?TNײ`D(a>.4s n8NNO~;=ScHZ:ƴ&G`2QaMFI6?RykDut#!j)}J\=L~U#|{6^ݘK7hvOUckXo[@[2xct9ù^5 ;/= Xag umGK nǎR=Xy4Zhhl?NMQFץ>v]?[kvZکh4V kڗ͛wND۪#Gl&&NZVI]3άڗMnU#ޮW7>ؙŲYC4hhnѹ ;jШ7c*g_6ZoIhJ #ϡ)hǝSSz%[z#<:7fҦ3G˷:e%:H<!B\ IϭBJd)6{pyhJ[_zm !~^6;؝B!%C!įɒ:l?|5dSJ#S8_}*7B!%GB+w0Mc#=hJ[9^XCS7\ !B!o2B!B!B bg@!B!B!~i$*B!B!$U!B!B! !B!B!Q\,!B!B!/XB!B!BB!B!B VB!B!b$*B!B!$U!B!B! !B!B!I`U!B!B!HB!B!B1@XB!B!BRYB!B!B_*B!B!$U!B!B! !B!.^\=" /gsU'punYB!"U!į&35gOw~ReϞng G񖿟?Ĝt6Y+<8wGMog탳X~D¼] }us!0&X~n3w]\V5(?-t=wB!B}3 ߴr4< ~ʹ/JJ*Z.v6NC۪״׏Lfi= B6|I.X1:ܗ歭 ۺʥxf2Jl.c G e`=.%bgY6s(7=2'Jɗr9]^sAm,eN|{N,9طCc0_#=;{O)z+Y94jy ׍H~Po͈cɊ]Ɵ-OklbyxNDu͔5_lXI- A7si/KKNj.XтjlTk G %É_u@Uck1y A8jl,V_ۜkt 'WS^y[u,{N^v#ükr4T4XAi~;;&8sR4sШ4rvfjt<4Ò)1.{,aD7&!ۅڦVKyt\=`+Xj]~Do=ɱj>v^5Z:y`/!ȓ%SbvMά2ۙiœy}?=(?7#R `WV ẑa:PʷG,^=ahTJGwt>*ٞ19SNpS eY,pUpNdx8ixIoiyl&ȫj1OgS3%ڟ cBۿr\j%@awwdr8e`K'G䉣ʆڞ 4-u/mY$:fG>U;r7[}cIŞsC IG,9w F#Nֶ K kZ}XtzߙeUG >?#pV|IKOώuؕUl,el"I/偏`/E SfLMyDxq]*wLhA5De QV*(kfxdN -\fĶKڮn">珗'ao\<6SـE IDAT'E36{|}8u 0vY7epèp|](8qXbݩon۔|V=moKUC pU'Jsr[=%;&Dq0GV|z,yf~J/^͝09_Wj(]Yd c{O֓2.{ŲT ̈ ICzq- =X2%wZr/{.K,7my͏khjqqL&'YKU$1k!|?Ïǭeͬڟóy3FrZG՟3ٞaOj"`O\؟S7(<0#@O H+՛P/g^q, lp_nCqܩwMkR>y0^: <߷Q]n,h7';u4_cͼ< F2jjN6|zk;;jt4n^vߞ6Nj؞YzR#Scyi]*Nj'U!%if\ 7/!ZGsX^brFy7)%3=_~4ŵM.[I +8[i ܗm9;\`/γWd{}Ђ=y$Ine#v*fSGP/aJqԨDLMi6?z"H^NjNadr*lsYb0Sq;ihiՁ) Fg`r6uڵllw QT k2vqN1K/2pԨX:5/C\ĹثydvwwkGQƗsm. QVԭ?^o`x(X֭n|x7zW 奅[[=DFmS/p?]9%+vҦ+pϩ^e} ޲CoʵɃI-UжSڣTR72Jyi]*:=I!^J_O\Ř @4c0(`MFavK GT*ȩh!~nDqX|]kyʤƴ"B<{Abl%hwV^ۋ&D}K;ٕˇ1r$ea,}"v*TJ}bѶ.FlP2JS)`sÙ4d-!xk[NJQ5шR y/0[Fs O^u?xr~kR-&|sSƎR.ªgn:0ύtH6쓽VAk!)QϮ#K_Եڣ̎AԷ(5MSTijkRL/72/g|nv8 RP+8*cKF -:=(ݝb# w'M7ׅ%V5ZtzVϦU6M[)o4t_6Ƀ{\cʫĀv8RT4\mbk([wG ϮIlZ-O}{kF)^Ұ:}9Ԫ m:8v*&dQf7 \7V0&}m||4-:=zoQmehGUW5GfsØm:+3(LZA!M6mk?#*yeq;2!Yha5NjjP}`FxW΋?㽧T75j%/?Ny=7SPEg0\ ^ےNRe^g{59* ihm۩)~o6uB+vgq  VϦZ¸H3ϯ;FI]Ӏ\:3oX0vj%_P." OKZR`n%nNp_TJ)Uvd׼|vfU#BAvj%MJ^51ŵq&ԢnI ]&Mc#swo_`4`GUc+ o76['54X9};;^cX):-_bʽvrz^ً1yF|] zJE5,&~m`ǭ0!*6FΜ`ڮ#鿋xElݟzOW_^Gm3 Ӡ&'Vs&dm|TjAkP`>G}}*ϊA9 #FmsCj!N7ijMiCRnɖMɣ```ͱ6(Q}l9wXswyC3U[;{h~уP*MqWfcWh%oSx[G|z'\wW 0T^ki;_>|~ƏXB\44˫o=ɦby|nbyTDV*ȩl6v^3wx/[od4j%m:Su2ÉGF.>,#Ǖ[ET9 ޵ͼ`P*ثUٜN$ժ7ؗSVDJ9WiC/]ƖҺnTk[ɮl וU=;Pv*%=Avqvi0m/??/JIK^pbq7y3j{OusH-m2 fPPM ( 2q}4]uZ7fj0?eGͺ F2?Ѩ=P=hש(*!=;OyXu2'ʾ]GH;5_8^TJ^a :M'L;6jsnmڦ6|])kbh+vwf`rsVΝg7(bf\ 'KqqNEZq-u p^ b[fI猶^t9'FQ UVO1ˮNdn|wyAR^* !.W~yhn/0~| [όeV[ږto=i ~|}~Yw1?)gm-[ e 7`$ Fn֡se@/#n;iT}.2{ܰ:e p˾ںyHb3IQAP[϶>(-Ξ<[{R?t}ڞ1ku:WJo6]J56\L ycƘK}\I]uP{Ƽ`jXv+8ZXMR'32=H3OŽǢV[=!_36t'ټN7 uO4L|{GK "1ؓ/OO<ݑnu,u/nA?~}™H?Gh^pR&ouP)FgV9 mpkHd8lןYNGKiX0cDcQ*{͙0.,vfɊV:?=g3{ۅr>d 1׷3#.'L=ק1{h=4׶⶞6_q|ϗrv`eW0-ƟjjLC؏!(1BZӣ=8]@+^V{93ZƆv5؇FKoծ=.׼ϮIqQz<R}0f;Ny9jyHi}A]z;j(+/zٕ =Azq1Ty=}\-O' >d]q5w+ǎk=17MiWi-U[ CV@?_NcKOuGLT0j4:^XVV߽QNFoNjsK]`Ѱh *'DQ;^ӡZ ߮ǬW~d;h p"|L)`x}r8#¼ihigP#8ȼ?*ơ53}z/_O&v'Xc=385&fܓ5zT(el$v*K'wwdr M?{91!~n8i4&ғu 0Aݾ/S7&\nvQh=w1qUZeǹviQm?¯,740-ortNvEÂO^+ꍯNr*-3[錏#tojmٖQ?7v`KB%!ږt! 5jna&ߛ*m+O_9i^=oYN؞QʕI!$rw%vП%Gf[og'Ъӟc-|~ Ǫn;|u(x–LX r1VW ٞOfש2KX:5A+BWwu6lmæ?ruu9 8۫Q~|n"˷ywʠۺU60{h JR#nkM_r)p`su\$\YbJގG$-i0́T(pSqhKj⍫^hJ>;ÈPon RH?u$){Y)|qWNKBW`UoY_L `PTJTJ av| =@ oiF3){ 9w:<Cknh]o`NO^~ 1>ҏI!tL eN|;=ۢ3Ys$V)^wBPBKRVY=}xTNXyg{&kqwԐ_Ȋݧ<1jY ' ;&QSP5)>4xC<<3JICK;+wtj V%KίbӼyDZکon-؝Eec Y0o{|{$^Uak,š&hY˃[cTU^K?S7Nl8ElW)UiaLilmg_vQ Y7;<5'a0}ǾoIM8CgJ Ul8Q<ކs+9[{mׇ8]Qϒx`F5y\wj6(EsUo vfZ#ҋwgx7RۙEve6V?kS*TFí㢘&J1z8T(8[cP4xy)>bAu+6]M=G7I]2ꉗ^e !݉6vׇ$*6H`U!mY^B#TdW4L^U#omPv*m'Oj%l(ae/ 4Pio2m:;"Ctk@W_Ǯ I:e q vY`?>BPB!B!B1@ !B!B!7΀B!B!BH`U!B!B!HB1>|sL5;+ +Lcl/ڊSs(?7V,￝yy IDATh&.s b8wOhKj/>٥xLWࣻ2=&bg眸;jX_ù$35/war850_JBH`U!zD쬾+kb7]|+9bg/M#, ᪤^1=u?CTWdEɓYګ R+'Gg'},`r+/v.sKvVݷ9B CBуCaVY}Үg}ZƋsQ1>bgWANx9֌LTSjȮh(y=o{u&zK |\)oFK@ck%p.sTu+P_ !7:8ZIs-%/aф!,hjϖNgɇrgٌx:r*xgg&I^0:/'{X:GGARc"34g{5 |;V/pX"}(oh9lJ/溑D5Mgsiŵ.ɈPo4*%|hhig6]x ϮITy=1^( *[`6Oɒ1z;mձ7N3MB0/t]Q;r7[}bIٞsc-Vyᇣ,L'1ȖڞArAV;V<1F@Uc+ߦ|ٞ1:S?Ty}Ǣ׫jmo ?~Xzߕc=~gGF1< Jz^ߚN~ֲw':VD5#¸"1_W k+yU;jt4n~k -If"g\hnA?gzL& HJAol;#{OQMXx ]#䅫s+O'KN<0T~MmzV >k-5:_xo{oU+O#Džv,~m,&ZQK-YcW#B{<6(׾M'F䉣ڞ 3' dr {yene5ZN4:cmGi*P/g^Y8onZƘp_nCBANjjO#!ŵSU?ۅg %׵Dz+]ϥ\3B\F`r^ےNS[?lU7Ea51`Og*ZX8OvùvaZLG.%B !~vw9s@fn|o젶tQ̕#x{g)8۫wj,//òO`frZ5<2+{tK7d"K]swMd\8*gd;H-aᛛY,~N0[BP)<0VxQj*3]-o^}j-.<<+0oKɷ=?ICK;L<<3yGY%^H!RHH:(XQlXOO='!Ꝟz H @ ,d݄|y˼<̼̌A~дzZ;YuDV8b S{Rk*9ryόJ_CP76D*<2=׷fPTJ3+f|'Zoکbf///-0zeRYH n}ODpӪ5Z"}\t1ym\^NJMi)Z΃S#Y<6&6ų|SGjUȸra 9htCoҩbF\?fݝ{HӢxzn,O|}H^=;X) ;/.Hkri׵̫7?#1ē~8JI}+~.v}n,6|7ǐp؏Ra~l ^?[?i8WşfW/=ꝶoޒ^rF`^i|)Xy>w8jH9#>{a|5<m]*]yfn+6\PÞS̍ <=6 tbTiFҥՏ{ORPۂhT X~u,_c-#[mǏGhL ,+Ŏnˊi IaP^q} l`-Ѽ$Mx;4ut$7Z%jnؕSS&6 Gq{nUyxVұ`\ﯯhl2k,QK9꫼>;pu57&&`-Ѽtұl2]xT*۱U1,M _OdvoR8 n<>PO^C{~9aZ,ic,IWNv 9O'!ȝLVkZ҇Y2ܐ0fXWb)@pѹm\(;YZRacz1[O$1p&VKs¼XnhYY)YQ[vT'Oh!VFemrvHJ?Oi%u^aM \\3U[:OǰW}+Ӊ4Y;XZ.⃌_0R ` ]tF?x9B_ߖBNٚ\D(R%&},Z˺j ]* o$+iy[OrVK]k'fF/oz6B, I듓7 G(]SƳRY0H k[P.J5jRIi\ŔLSQihCլM1nʶ2#{cZGδv*y}k-I-嵭<0%u,B힅qAVgT/o[R?C8Y@Am Ů9GJm-}+Qkuxc Ƈx"ru{b([NX!]* *Yl*7j{_ܞH.A (ΣĐ+ 6}KUY;jhlL&J7ZRfbv0:2JK-0g,QK9əVt4?ZNU+wv_VۜNX:;CkwvfRѨLnRah~q~ْ^zZU^2\fx;džޒ{3woumlvw&‚C}9XѬk2ݙTnczqEL7~}DĪ@ D@iTv>Uk6{ꯋvHa >ζ<9;WZ6V2B=H/0{?;nL= B&Z>㧫zEյ\ É^J5GjL7̎#E5T7:tMJ<(E4V76/&ZoB=UM㌎K$T{S5T;h[ɭnKu:`狔K C)k%h1_ {OW{:ÊZnn7:֩RSҁ-zgi=U5V&^H<(mXZ;ɯnf)vQju{j0aND-F8X656m/U1߇{EGί㱒I9UD}k'c=8_LU#ӽ}i[P?Y;r{b(NWQP<{NmRޅ-mDxE1AgoM$_6_}E#ýktَaG} 6}KP5Fmw?v\FKP~uu`s`½ N 7CXc@lpgsԓʫm2WV\{aX;n̉D k̵͜PGkMuveߛk5]Np)Kln޿c.pA5ߙ?53 3@ \ $zO#w_sV+^Ğit ߭y{g&+wgc=0L߶.U/Z-R$jIdy;!y#J8 m]l<^̺Z̩`H4E A;Z`H籯rI{R k`o.g.ZytA娿SF^Fc T >W}ܝE0/5qly9N?}{%ƿݦT.NMi|Z5YjlY~z&0J}'n-tݟ7w=UL?\~;ev% PA5Sý9V\GC{Wk[R?5> Ņ ZؕSƎXOOPHTY; i^6nT=ء#}GVc}MTb"=eX^ 5T5w|saçeę|9;h h9YlM=Xɤmp{Lb5[Vh[ݏa& ~2d[fsߪO?M=?7'ytT wk$`r*Y Nk4;e^nh8>ϑUMlgtڊQ}QV?sݻOXFnwG Xl<;mT.+SΣӣtvsɯi?;.g^FeWNO}µʺ m{ZC^M3cv7HG/怫!v B]ӫT6bxϥ㌲zy}4AvEi{aXk=zNam!{WN9üveQP#~xO6{?K#t0 FDYSLL+2ܧ_\6n2J~~O}Kƾ\ 6ץ@ZebXcOܗTGqSZfr/諼yi[tb0c֐ShXq3hr qwU׮ք{9yTk(m1]NffbX\ƃJfc]jxSavSJݫr8@p9 š\E 6++y1̊C )F\#YѨZ駒3D4TB1!<<5W4`mEBn-{k9Ǒ6Ix6&y#HrN%8+FBN3\@}[͎#oaERMZ7̫ne^)ita..`7{ky:ac%NARsXp<@ܼx& b-(R mhc5 yݕXgx{g&ǑfT;RG+Bxgg&ABN<63Nڠ{%_ qXZp=W8^V cJ$Xɸgpܺ%uU78Ëk#+ohù̌5#pCX[x|f4ֺ :n<9+"dU-ӋR9;-L 1.5-*TC$xpx8b[3lkmJ>n,I JL*a|'o^;/aIffE"HK%<:Ͱp_S-k i?eJáj1 gS{>S^ u@^^4f@ mӉkn苼lyqa_4whQ]ܸ~76+'fE3 Kp%9axDi=#]qӍGhn#E̊-`CvpV .Gᩑ,I C"e <~.\?Q4=gƢjٟ[ş=lXTU0N#P5'|~[e#K4w(YKۻ2ձ,I cgN9mt$QlKnu38͜~}:Z;s09G|/f5ߦ^&JV[7'hkRdyo]ӡT' ch'%|w.2;/'[:l*3x.YsӨ`4l>)5ְީvxzfH$vXvM6w&7!:V\˳?tR8ˮSɡjGkyǣ,M ywؗ[_%z-'NQ p ِVt^7WhRu<2=©mdKf) rGboޜM|gXFrav8RXKx~H>6roݜ e ms1R{mX!Kxꧾ#?)\JJlݦ1 BSɽeiR8i*5)59-^{9r1x_3]?]S$4V?}@?X7%jn^9'gEiԷur0-="9 XL>Y: e,W~IiQ]:ZvC$G:,o_[(-s:1б^jQ-ksYuD;4u(ywW&̍P^>ؓ͢,_8 g[Eu->p}ӡTm5,ߔIQr* ;4Masc؁<+h!)XuD~>QG nOc ՠO/cxH"h_ό ؖUƚy/ɤW7^@`Ne[[.(UOd^K2ܛkbd ,W|x$n~GQο5{$1?9pE~@ %R@pxxj$' 5LRȥ>.[+ٝz{팕LDOi{+g;쭱Iy|;Ztj祅v6Lqw䡩Y@pq@ ~"6%?㭛qUХ֐^RǓ&-o czhT&9 &M\ӌʯùZ BI}+2xxj$~.Ȥj[;*9{?@ K@ @ K@ @ #"@ @ X@ EA.03—`K-@ p F*ީ@/ $+y1\$ۅO7KsߤAq%;'yq{l`#[z7&~ oM 楅.W^LV6 7޼)y1Z4\z aW`p!w<7/]?nZ3'ڟuO系0-܇& 㙹q@ _j෎Fel*/(IRji0`ícCxk>9:ӌ=%8)o iv. E@p IDAT1C=pw"JhR\Z.hFrَҋ .bٕ}|Y1'yb]HI}+J/8 a ,N!ܵzXeֶ`o-\DX/@ )"fhlۋB~c8r -5tt_j.9B>ζuYvRd?;"])\Ų+}=_RܟÁ*>>89ve?Z'+I\+r&ٕIQ]o{b3w 57C_}d7$ %Gk+V4u8ǩDڥ"->#(o=\N=]?nt|Pnʣk%qSONj{gNm<:-W 5-|}$eF Jüٗ[ɍ}5y9Н_?5y)1K kY6jDY=۲,~F|wF m^G NN '՞.X; Fkt>́.{OW:jۖa:Uͣ @}['8Ŏl KIs?+׍aӉbvT>BIÙL"!wve8^%7lxp&=+!?]~H+귿.@wr)wONR7rZ`_i%u,m=+7q`bp;җܐg_ѽOy|7s=g8 mϪ&l'J L-cBw拾 ml(L`_n%yLe̊~fõ#|\XN3Jvdjo#P.dª&0?Q5r)+~N~ r]E|v(Va,Nc{d7̎c8ۻs\>qP/my&u\J+f|ךV p eೃYw͍੫F ?=pu篊c=09Lmյ̊F3>-ôv׍wp=}u,L`mԷu@S:@so'[uX}alH+5Q5ȫpG; cYs)5eRnHk7/jYp4bb S{hzuqAׇhR3sXsɅ:33́#H8We^l2]xvc*ZU1,ΛMMqu?yqg{iPh0oƜUJ*ye`y49pnxֿ9*(V2L3T›7'9׶G26؃o_7;5ߍ]*xuq:Ujb]Y`wc W^rkg௳c Gb`mx)xTW&#yꪑ2geL;Mi-N!pI.<,0W'ODp;PkDzdy}”ތB.兟>Ԙ{%v;[2KkXGSqC=؛[ uCrN|:gFoN3Y\^`0sigζ HNU@pW mcCّ] RiRiX*gίO+D֠Tkxe,fHJYٕVء%%-'K)kaJjِVdxB,嶱*%feMl<^̨@wt Zp.J5jRI>.O\XV?jMru$x`o-Vˎr )Z-N]Sjym[Lі`VfOAm 7qKkwveH+U|Ǩ@;s* rT7whr^Rr>ؗ4ZEyKam _GѢW6%GߴaSF1OUЩҽxԑQV}$e/FK[7~=OR ~[fQ1hPS-yVz6X28RTFS&ZN/N<ؔQZɔY`4'+^ڜnpZ\sv'OU0nV2PJF on?H_u n(kCζ ^afI}+pp2֑}x[rN:K:: FgSe`m%cb!+/N].:3yŲL F.-iP2pTz꘥9Ƈxdck[3hzXן<<5Zsm'Ѿ{'%lN,2|\t5NUKEul0qDH%ϾK:3e?jp!.@7zhJ$RznS$ve# ~5A"@?zc4w1.؃NN!#}:-l@9v63җ_ʮCD N~]0cf̯މgwU5T;[ɭiKu蘩A*{J$̉gL; Y=gJo';PG{:1#踏<ٟ[Enu3OΊaSF1YFzMq(נpA56+PGlrs8k$@#RlhQK$P.udtuʳY\KBw:jJ3ԝUL b_n%y|l+ǓeR<#<8C]k'y5̈́z8-1r9r0}q1Dn1XTBvpAM/ϫiY_#DžCսlJa ? \j_͵XF"dzrrAM:`)]* 3JhEA|v6 G9=~vS\? W]J$ tg{r+9Q@i#ꗅٔQء3n_Yp4.v r*Y;dZ\~`0K;*ʏgB8V%܋%/>*uJ14i'1-܇l؛c -sIEq}z&0O'qmO;Lnuj?;{x5n)t@^ʼO NjYZ`dv刅erV1RhRi͍u6SGϗ|??(Y$ bAl ̍TU#_PnM8,y%v'[N2+ҏǓ僽9hZ$i;ˉs- m?|׸ |gn42s2q::fie }M,[-5V2y y |?!քy:_a\m:?u\ٞIu3}xRi7nrKmFB.W-l; rs@Pp]@ )'J?;Y^%f'{6o:s cq4׍$ $u~>YJUKἧmt-w2]*+5T6茨>N 0ߙߘֶhȯm!v֐SՈZ=[V܎~í(_2(-\W^t%ˆqHNsuR?,1KQVO0/kƺct)̀u4t ,x9=NUK;.v l>uJPPۢ`uԉ-NU}g+Re0(]0ozV7'<lȭٮ-̎c|'Р@3CF] qw$yPz1J^`}13}'tpIa^:I1Cp6:VۆgIufstdE{')mK1ԉ%md&eN=ʷFy 6ҋAA;SY}Z3}2]]3 ;k9 1D++};'fFhCsu">b߶g 9` Fˁ**_ dz+pl,5-,n/O~w|x{g&ÖfT;RG+5ٕ3Fc3Tٗ[i6p6^6 Wr&xH<9,nXfG򶤿*ol#> G+\Q{ȫSɟg`mDiϟgF6z,QKD@pCP3LB~(olc0oI|}ߝ'hRjGK呫xxJy[J&mj^wvi}?2=\~` uGNEU >KNc{'G ~ Dd\n15<VUQ,BFVE#oX[ù<1#/J}k'u7e_ٝSI%4֎4Z\luS"6V(N67oR󱱒֍;P?>fw ih/br]2ÔFsZ\˚\V:N%MJݕ3sN=oW<25&SɖR6յura uu@ 4w(p_y5iI~,f6 s2 K򏟎rǸ0޼1'[+*29:sdKZ^鿼%'gFiԷur0-e3G]['~?NhRq6s*3SK:LbPI-' $ְ|sK'lGuKOSHD"ڥb8<mP571`NمؒY۷_Ҍo*c* ,}Ɋ6(ᩫF@c{?7t+ٍ,βqt*9_W)y-tb8^O{}y Rml(7'k+NƣD8ߦ`mnLʩ&^roW)5ְvxzr{oS{0޿M1Pq}+/n>FZIu@m,es:0"ǦGss6BL~U,Kƅ3#\پ(ke'Y2.δuؙS#re(y:W̻{2RixkI6{$Nxi=- mgȮh:@0P$ Y-K 07㴉@p91=_g;>GR v 9?>83* |$]nX3ۅo9~K@pe#"V@ ue}ZC  T?O)]bgDdp~3̎Y1<13v4-.vH% k~NUa ෉p @p^ +F˧Nd\(LJFk9upRt%d1y7>vX˥Զ35g-&b)@ @ @  ߆S @ @ ~Ǫ@ @ @  9K-@ @ @ \YU@ HǦ`3Yx"AZ cGpcBpH%=qC=.\cƟt-ˉߊ.n~x66sJ#ۅO$ͽӹob]iu.@  @ ~oA~TB{сCzѥo@y8 )5Z:Ujڕjn`EiiZV&qr3a8em.%INnJNUuN/ĺ_;?C#ɮl^ץPqId8] wn[;O4/6|gN+=@  X-iuu \r,&潻s t)}*FJAGCIz頒5ɕXWZ@/ZJ1y]ES;MY˓b_Yy9V}l9WhhuJl@ B8VEFӢwE*PGؚ vsɑ;TkH)a,Z;u)ü;JnLf YhY7Y!<;';?ۃ&E\*%wveRTj%Ie}2&Eޥb^OÝpBrwwgQ \ -O/4Ds8/@72)=iPRj86:ȝ%7N֏w9`L ͑O6%Im}2.>6!(Rr*xk -P/5-*6(|4ZywLa޸;ڐ_̛;Nrp;&cn2'Qi kс,*^5âUǏOѫ|c2t#䎽BɊ+6rnʤP/m+լO+#yg ..1YSRWGJuKߤ3QjL1e7WEG-3sZR '){>ؗCZiQ>.<<90z{NdGN9kRΖ4%wŮS<*@W:)v</IPRG, IDAT$aN5Z6(ᓃ z#Sp 4b\iT0v|stXwVdR G0;{N>9j;.?>CUȨiཽ*6jk%ILD*]ț;O3x8HF A" +vb|x\|t{j황`I ‘AO/}aN<:5G9xNWȥ|}tj?ez{p/F1,YuX-BhRSF1\j@ U@pyxj$*>܁Z%OG;^[4[H)A.rCP^[4op`B&(olَ'сCd;V\*|~=ZeP^aolg-)QڗEVEi.<}U,KKAm 6V2 Uø0=yԷb߯lc* F+[ :v I^lԅ[JIa(dRm4dž9ܮ1|/lyq^w~va*3}Y<:6gI;C&5G0?&W֏wҡwu?=IMkM]hf4Z-7~築g^ -kuWWDzxo\<;?M}[An4+yx;x;R,N6R\ߊ 6 W~8s[߹Ttԡ4+9]赖+ Pkҡ$ߍesXK:GjpіvsmgX6hXWdR ~LX?W^Z0VNU5a 6r[N[݄-/MSG9pV,ꃧؘQT"a0oTj _c^%\74JessH$ȫ"ύ]*xuq:Ujb]Y>w}${KK7^&Lg~mZ7:B9Y`2Rs'+(mCfMJ*5N6V<*g~ڪgLeQPRfʩ*ژӆϊcKq2+tkZ٦tbӘዽw/sPQk|VHm['Q>.&OOzR k\^rD,RAְ>6& |u$fŌ t}uA<CquK| {zDϔE9;rZs?>'+^5%Z}kO`[v3_JCm73—Yg6r/nM+㧌b&氵rohˊvߟT}[fompliZvsoǭ-ؒfЁ=D1OW2zF`BV2r;Z\gO=̻ml(;rY^hύNjٚUƒaKsK`qI|$7['jģͧ׈^6' dS 2Ia^9k5;|(>}B@ڟgFɼs1/ّ~A:׎ΐּ*%ڢp V2)2U'6S;L@*)=y<= FjDjg兣y։x?Zp 2:(@R/K`3A^gnqJ$$E Wwxo_5X?W+fhIS#SXx"Np a2ަ@ Xɹ;2Ӊ_y4? 5JȹpǸ0T9Q.C&ÉHo޺1+h9YЧY9rPVQPku-ԶOk$aNX\NJxjHlhP23җ_NRΟgF¼x!>!(d:B&ZnpG+>ζ<93 6V2BݝOe(k;j{OO%yvg~w'R9#䎫1`C~<ȫi5Ch2T@k {}H)FKْYss ѩSy7I%̌9x;"HNW7.o18s,A"P\׊-*rkyrf 2ɪl47E#Vrs8nD r68Ӄ{og\XQ.>tU;1lyX:z{esxgw&eƍI|qX? CѲ_QkF/xiQcm%O"͑%7x9rg{IIy_6ar/c|pǧQ58/I^)x1<>?Nuܔl1CxtJZYM kK's/sbgbq-}7{kmLE*}3XwvۛScYH?WGWDz!2I9#~ ) }C 6$2w-<@ Ǫ@ ܓER Fqj<Vخ䛣~)Z:{Oe>\PcFH^M3 cxjC 7]ٞ]k ֞+U:#jZ:>E ZuU{AII$}VSL;<*{j&^ j zwEŶU՟H1@ T{od2LLX=rι{|ϝϺ#$yr# 9x:Q܅ZN.Wڶ<؞oQӣ{ՎV)۔uG''ֶt;ku`4sIR('O,Kϋ̮Ȥ: 8[x6-rGKe#BFu{7Z~)+Sy'ֳU<ŖcV3Ƣ/u_fYlȾ&YHUBzlUe4tٖc˓9O^51n1ʏs!ۇKe/1ȓ׷Y]40:`rۊ0htzJmoeWXu˫jScs Wث!9RO3۪Ӧ`4Ջm=}RPì:/;dPe]Xw4{)^czɭi%1Ѓ# p&T vEu}|uOA*[bw<79\ʔ//aӹ5̉E!;^m{7YoOv%I7vᄇyId?w%Σ. 62ЈF:a0mC^5bXzs@7ӒM5`16˒hVFuֶt\ '5gmG,8[^Aer?';%]x|4Z?̾9Zƌ0!q!^5wѧ3_%ܹ=}TudP_ZCeܶ:Kʠ盂{F@>(H^INR'_*2i`-jvm93̇ڑg6a_k">drܲz'7cԠ*Tˆ_8)ʡ>3BWm ktֳ% pSߘ6-'\7IAIVJ1f9$haCC;lm  dh!^%^u^)]t&`)AJ!C&˗ͰT":̲=N[ھbg$;(O`DT HL3t th|~?>79 _*ork;I^J$Pԁ+D7SC*oivOJ K%m91̉C&`bjwǂ )+ERF?##7x[_ݤ IspmK ἄ`r) '$6O t>үI\@Wyᢩ$y`_O?=x8^cø*mKE 8H$N=(׶YTXL&}}^fGҭmkͦ:):(Ab YQ݋|]P)d@N{ y)Lq x8ĹɤEHs'cJ%eA;KVQ#ǘυ!y^B0choziiIs'&[{8ZqR*L|.BLCA-gsQ-6V'#JPȥx 9m x9մ0?$jOmA7|zw{ydI"Jrn~_XvogqnշϿ[%^%^%^%^'A8$˓vR`4ҫճjNGק#J(m-Gm*KeGI=C=hSr(^t&. ;zt_ -r[ !ܒR&E3oMN*IdGZ÷9.h_y*X}<}:~?ǚL7԰<.˥YZCkwݖe}:[{MB.٫ecDٮf͉ dWXry8qEr8;[kkꋃ<}n "j:]cus<ڹ , bH2۹LKO|z{:sX= h⍝5:=}:R=g$oN4:=˓?„xh'hmޖGmGM<.KvRQͭ)\_ܴɢUL*aŔ⨔إBv5Zwqι[ĆMgW6Y \&̛ٛđV6F On1P'z4|o1ߟ?fLY@o0rlϧ[ý'QKy=QʤL WMn/Ce|v|L 9.kŌ\˾ <,7%o^5; 9ʲOzWM ͑n .bsQ[j7̜-kvZQ.ٍYz'-ݚ!mH  ruQˏG*m941/']=\+F_0X9ggseJ8 t'0LFku7 l+0V?  JVA8]x7fp[bEӹ]Cc]c=0JǦ,g >?PjIDQAAV" ݵӣ M%t23rcy\Z25K,=Tw+ h)gc~5L8.*W`Umjn]5#ϖqgf7o̶*k !u"LdSA [Cn{l۱:fyn*_7^rE1R=9RFNoS_b=!ڎ/?P\UJ<8ZFYKZ=XOy5I% 9hvu ?dnpތe\jU%a|y IDAT]61oM͹l`4ҥRF.\T _u{7xKpWئM5,Go0ݧGH A.5=yil.gks+٘_iQ6OG;֙gF6Rh Hm 8lh|Gle?%1; wsԞy-h:{x?h`ংN<~E_` jjL 31Ye|v+S-+R>Śf{;]8VZzqQBճP/F c   ČUANH/g&z0:j,m`4χx9ִmNrv5 ٖYM3't^. ~#ϫ4{w  DBd [#{z[Efi#|YROVY#͟BNVǢˌ<[}ȌN"ɯk'әkE1aHX_KqS%ӯ@Ìl9o?b pQ)J.vYB&%ә=@aQQ.tѬJ;¾&;(Ӈ= ?v5psj=6\cM<0T_nI=Rw C>ˈt!c٪}p>CPhΧ9q;tjKo͝90b a wTx;,K7U$&pv5XD%@+˧=rX濙\Vn^/g.,2[r;-l9o\49a>l*v?@YsCg Kf%3AAIe8Z68˫klK5:.2 ;{;=#_Ƽϭ-h^J!6dߑl1{"usDm4O^hmGuid[ʜH_KJȤ{Ym{s45n1ELwQʼn|u   g p}v`OVNB%!JH K/C}`Aw̦tj@)=oI.~,hю >%nJzz]ȳOa v<<4s?wE1\by$y7z] <$_ vRqYRef} Ьزd́@W9/oicr&^}z4:WMr'v <Pʥ6dvt37D͟4uc˒TP3{"1*o~<A18;w An3NCexNOcDq6)1|زX}䊔pK>>m{0'TBΊ)1'1 d7r߼I1g:{<>ʘNm{%m2[mc}^fEӢf95-4wز$K0>ә7mWnFIAdh2Fm6FXw{a'qt@PtAAL3 'Wg՚1'KG&Pɫ[sAZ~>KϠd7f4&S"qPȯo3iрdFu/O [An]WM`4UuN9m=}<0_{:zd֐Yhp9'fN@ݧcE3mɌvPPkZoSa cohlHL3Uœ qwW$^ L(eR4:[k&ܺlb_EoOǣksc캌d@]-=G'rz[ky1#?yevOKsG&ݐͪY:˺U6b5ΚԽ<}itk6W7I]-|($Y}I[o:7{%^:gѺ6K;x=ܖ &Ȯn_ێ9&{aSw͍ӫsiV籠/xddLc lR>'oW-;eذ#1aK&u/u=h ;Jyxdqت~>uӢxҙwSdԺܝǟ&b4,mob>c]^# q>/lnM(QAA6מl 噟Q^0O"eH sE\*ŵtq߼xz n#^?VEoob!G'b'p̉\k(mNM3'2#/';*Z|]κ7wpEr8N* yqa:+hW:4}|S=_!9hUšR6郛S~z*,V-'8}s"vRGAC;eQ?/ΌPo>w7wsHnΒzJ;Y01w{%ym(%McMscլh}\h\Tb, TvF\inwᇝaВUœZ !-0^8;@NqBLj`C$M(͹&/JwdR^ .|y.YGb-XAJtr7Ϝʏ2;fs9FS@Nͩݦˤ4s"s"pTʩl]dWX[줮DzM!qr㐶a^VWzn6wB,GqUJAnvkx/h:'.KCrRѬmN9VXry2Ye˫Wn~.978?7}:7z};oMx:ؑ叏N^r*h}I\ķ:W辰wh];X65.@6uy|i2nJ޼r6zwv=-H/[ l?ecUkw{-->F҂#Gr UdX3]AdpbO,KFtj($RR}CeOy*Ϟ79X;W~4R ͝tiLv!әícvR1#۲`$ƂjGJ!cFX}\`Ovr"@W:z4w#';,uuU)yxaFs{ƕQe(dRbhѰ.+¹knZv2)X_%} eIitikQEZ/o*?ώev/D”`/yth+=ZvY*RހFg)`H!q1:ev9m jFŖCl͞( ^F{3;:X0|a+du nB| Rdc}̈#)joarT)F=yq8H2 0mSku#&pFnw+L- p4jڻti$z$ߔʦ!o=ϟ{X{DBz:RN|}zq?-HU@WYwv\,w{%o\9x, O&&E n"!i\zuz`>U@Z%+"Pʥ:(i ÉNFuu,)õm>AeIofompm+w7/w:ׇx4*D7X_W9v,IA)8'}s"p& 6,1rjZl[A8b|X}vS٪`}A5u=4t pq,n}i*OI5lϟ7_0?̜0vۚnD76SJ$Lv%tjLy"wsd%k+e>w ʐqu&ط67L@kǶrlݯˑ#ä3坝isW+l\n1?.L͹FVy^`_eN(e'뢺ODZN@;a)nUUvYByKא<-J;rBuqc0Gi|^څOUᄋtZjW(:9l)v_Vy{* pO9e\299ql.W?cIo0r^UA8 N*nO%um-w2 pwQoRsx6;)Rzs#YZIl;V%6;@2)ǚ:x}G_,GS[O]?7{%SX^ܜkզQsO-IOOlև pbrjZˡ9V:f$ <Ƈ09(/Q n<8'6`/0 mkvM k yo'`#@91 xc>\j wWMj cIp'1ЃƲ|z yy2gs#kqyR8 'Cj7LsGy6(__ThgpT#hfƤ<}t:`'J?]{/Aeh2ǑYBbJs AknW@H׀hD&**y׻Yi;wRe/Oo0yn+g02nQλb=hSȖ:ңYw O^zB=vv,DZ 'rF{q BgϝXlEL3VA8\UJ޼b695-\p -y?TnaŇ[[W^i)A)qU7ߝyz!V(A.%3)md[ )祋fN`gi=n;g b!3.l=% J;-fL@* JnZ =/\*{b?shtz]m Z,) O:5Z2Km|Y/vn:oF$DVdz4viu6{e=SΗ"H,7k7>2 /37 dd߃N/eoD{L ;sz#$< 2 F#w}kF1'җ WGԽn}Fv6`GaN4{:w ݿÝsbJkOkT`Be֨B*̋#;2GElcH&zҭձeA[ ћr% $"_V=*:Kai{?.LqӰ6s&itB4{4W.<.䂴LcںhA)qX$3e'zryR8VPp?qPʩlŬCdWO2 }Y* qMLW/6^fhSDhGKosʭ 9$`Geܽ[m_drgZ,7̘Of͓ۘ˒Uҧ jXduiVkh2t$䔣7ץx:Qͳ_yhvȢDVNbKq0p(!5̇q{cIl'I{erHߗ" O-yrsj4Jɚ VG4:GovHit2)A'͑65RnZ{*y=gZ9~)˜O6׍.KE!r׻9P|9.NjzzP*l,IE]rOL4A\FIs'AnvVfS QRϛ̍;.׎:l LdzՎy6T |5 : M2R"xǕ^ݣA=A8#TܑK;ym(M!K3J_۞G9xR`uӢX0!>_–ZnsRp;܅B>l=MDj+>byǼ(n9o AAA$UXA8;.{JAAA~g  普ĒAAAA9VANTU<̕^X/rO   o*p F~.}/ۿ$LWIAJ$n3BOq#x)#9S}0A|u>&Qg:'Ud-9%eEx:M qU)OIygsN!={yb8OI<3}6] %"*  'hjć F#oflrYb:)Ϊф;ѭձw lvn[qeR8!Nhx/ŵ<< O2)Shiv==-p'*x#39ɖ?W (nUs,nK zuyUqVr'N$ LJacn;Be~_:74c"ܱWhR֮J$|v|L bhv7!}ٱLwGkywyy9\fosʫ#");~eGWOWcG>{TXݘ}ȋ2ʘ͵S#ܛ>|Iɭm&o'ώ%0Σum->aNܙG}5V]UJ\7omiLEr(<)/{ qA|N*FUk;,m$œC`RnvvE O0c"An4v!ܛ>n)uKw%ɸ+y F**>~\AmI%H`IL J9]Sa=^nCVc׉܏2^ƺA"*  $z$ߔf6+)|@X̳9XՌB-bӸݖt$[wn [̳Xi3l=~~Z3C}xT tuEx;x'5K,-C>:Ή fvo']xlǨV$GM0K}g?-؋G%ZA)hR[94i0mk[ "nb']V{Ч7Qe.:5Zs\= &3*C>+6|{8kԼGaoͪN8^D=V7aX0[,|t@<[dȞt|[*z{7fj il)d]v)cl<^cFN: 7O 9kTsOn8uS#N5Y%\϶kϱry^5mĠIώm2m2h)6hTJ^5|Z&#U㬍6LޔҸ`\ wyeW.U-==; F?XDZq#?O#<맿92[͛lNm]^ܚM{2B ap?~m&W4zc&̚4dZ59NNUOao9|.Az !BF$ǝ} [ -%>Ե a(kj#yc}ܙI6ۃ]k&h÷d<=@g tHB\Ѫ{_hUJܴ.']lm198O\z>Ev;/?pUM_JڨoEq}+c-4vt13܏hTJMt(+aCW#h=RyiTy8ujѾ۴OMRIMkH/םAڡI/#{t*-:e=;k5lQQ>(A_0-T7YdV4y>BT!B2Eoc~`plAPٮV'+|N³ {?20c9h1ۆ݇Z_˻ryuw; }kOl_-MUo3 >=4Ҥ﵆ O'{6§Y%\75e, HEMn4*]ii1. }ukk|fOZ9Pn.OtMtLb~x^]#Ga} ޹{rkX{yQ)==ٛg{nwSO?c_w,xSN/BqB!E`2ST0?+Ya~ueq=l?B<]ؔ_amTuժqd`Iב @JkXUt6ؓ&9M 0q_u-Dxd}(w%*y)[# W4M @y͘zwP Zq]ʿdmt l@}`JxQJ>-{ʉbR-.B!E]>R3Ә @ O/OcMVɐshX9'V*mIne<0'G2sSNkíueBX1ápFSF/徹YJYf(?hx LǵQ/ݙ8v8nd<`_Bm~)E6`z۞( oTL/W ɿlCrbO~mD: /;1BEXB!#yCKSh6ֺSìǓKi0Gqdܾn# -x̏[Q׷ҎeZ_g P+vpFؓ#=?lE|tb;SR7+lIf1O]ʺ/MlsL{?=-r F/v$o?A].OՉ.eyva}~ۧ,g7gS&OۏY%7N[u(єĉ>;0dV4𗝃C'p!0.-zKS纩" O6_m-Q|v Xwץz<'gbJxGmDB;U{_s?]x޺wH?VJ{q!.C} p;*v(jb~򯭨 : F;\HYcxG`uԅP;_աuԵuYѢ7Iiz몣V-gOi-f|FC:qR(mhP]W9B g!ݜ79%⻷F[;BxGnA+pc4"hT̉?0V~0S|Yl'ңwQʟwPPb=E懳&1/2BAa}+d)<%X99#{?e]TY.:MgO7o^}k3)ybXU\Go0 GpGZ >Nu2$dcXP*\?.]tzz9zSt׷|rkF 5ϭz:pRʔ(. U#C9xV*)o]5:hUJҪ7p;]j~$ i5+96?7Ho7 f3xuwXRѓgtZrxމ)jI2{a9ypA"/̡@wg~|:-n>*;댆.>*3=R}x~m&O9ͻ HK۞Qq=2JEr7[>휨mxh? hJxʖ˯=;ZʵVM W_27ulmlw oMfwA,v+[Ć6{H_dS;!.8\Dqm*6U+y~knؘ_Ays;F5Y%LfMf^ޕKr7:Cj5j^ݓGa}5m8Sgt̼p^bl<0/ey <%,3ϫmIb^2Ө,W |[HM?}EeKQ~{ry6LDSwsnKKMv)#{# ͳ+6gؙ..ٿ.Ɍdf}N9+=-=x9k61ǿ:Hy=ֶyfjռ89M-DӢ47bHU!ĸX>y" losb8tz{-F:YVw3 CHo=TNI3eW5 VF g'z,om-_Т7Nlay6 *٧ӨpEIҩUDxUOBZ'}ڻַHz_敓Wl] &gzDQWͲ9^2T( >msf"Gk$ۻ4ssh_w&y$6 bk(9'iٗR`ŻUG^uT1>6 5Ҥ y5Dzs[j4Jj(ihuxґo0u-o˛کmhMO3C,6d09oqv{[ζcKR3yLo2^P2`YSvgup Z3zk/Gޛ˳-#}ua󀽺Mf6䪄0^{­?hNH1R]7uv㡳{ ǝVis.fJɲ~A6% na~8+H{zP:`đhⰃ41 ^.<B%iXBwJDV L  =]iy=f1Ho4f3Z[3ޮK gUG2XuLtLCRy?(od_c=?7P/W|N5P,,$ǝG%4)oj yn;ϡk5E-wZ9@oYVmsKj( Y~( wRFܳ 6f wV0߃l?VT*x'OQ>0;̟MvJ`z_NNSej70h6m4{ JiQ*<0( ܝ4ywe:*V^M*䡅";(mj{g.ɷ]o/Kʼn6=)gğw31[,}qjJΎCRe4g񐋉=u7MdWqu0qnojVO\B[e7jfO.FȮj]̆eoiV nZ vu-<(Z>l_{Ѿ7G2ՑLWhx9P^$r~sN9^嗗$s{j [*ya[g]ߑzxwMei;SӮXU#|h{纤V/OSpRnOVows]<0'[?7bP. wڌQ3&La}+o(`za4ͿZ5qu1i'EXO ݕ6ޔ+e2%ʡ !BxG@!BETp+uqp9G%͵oodj_CX~r˩u-i1mgqf1fŝX !B4 !BJ -JC/r8|ӢX|!}yʖ\4jNOdD_: F>.bk*/ߺmssV03ԏ̟BDA]5,J[<)^4tta4[Ȫlʼn^3[ߊP*|z%݃YP?{[f zݝ%8UhJ9XJVN)tuSI{zΓNER@zT "Lyx?7 ;30[,~s5M<9pLgjVj.|{6B!XU!BqQybI %Yf>8\ryoe:w|Ldp;b2[p~MF: ϱۜIGfa^l$ׇȪliѤ">/g- goY@CG%pT= ^ԵXU[ eMmLiSӦ/7pժyl)$bOӢ3 ύgoy o( !WjFM68k>m_|O7o^`pS4uvsPSuB!Ĺ" B!UOMtC`}x%#So.<ϏuR&{T(pEGьȪl`gI5WN `' 0[,w9\QorʹbDgAD NT 7J5h*V=suB:Ed/6*&߳g'{cM4tt`4[VT +g~dO|uh4Ax9kyCoCB!xU!BqQ6omfs 2!׃ç:`x1-<,f3f8=hķO޲Z~2o 5C}yavow ŀ4onN.F.Y>y"'۩l$&ySrJ5G*zl~o8A`sΩl䎴nJ"1pMmmu-bQ+E+kK)nhez/fű *6N6SXZɓ5Y0TrՔ0~: O`2UH}{,J)(հ6.fG%,n"%hTJvT[m1ܔI;ztXKPpXzt@ޛSXu\uI07ŸX_Ovpmb8wϘP_pS*m.4Yύֿ*. ⥫gsg7UcK[ؗ{9kuZ4/]=Yk مRB!CVb.ed'ai18mܓ|U3$p5GKxLeլ8lkX)Dc2[ؐwe [ps&=*%LnRt^Z^~&7cшvDza09P^ǫ{lzpILt]僆uPO UG}GKwK'JmфyU)ɯkᥝj2ؐw`n ۳I daT Jqj$ۋyxF}P)LI!jԶw|VqXFUS?si<ؗē8U5JF.m;͛od: Fcw3 IDATھv:y9#k悞ʱ3&0gv={e( ;pPw͘IJ*%[ +y}q6W[SNKĺc6?h>.NG念?̡Oo]mУ}i|EUcB!B|Hê7#ԗe&RסCv{VTbLA[ʔ(xvASgOrѪ)'{6cFrۊxnQ&Y}yw}vii]>y" ';i2cadFU n W̤æ1>?Vk30\5%箘-oY͎*isawB!3YJqQK+g,.[E3:'hwpЪqEf}7dil0Z~(Ga} UcqE9|N:pbTsWe<q[j o<:,lE4tfOL`IL b}_VG;l{%Ze;i.:(o%׃'`t tᆤHB\Ѫz~Ԫ9jV*:8:M+kpf8#<-grvQ*L boY/G¦{)NO`2[ȩnr(lRI +SpR+ۓrPUj858?OY\}bGyzNhzUpf^ Әcjc,%ԴY9KSFHɞ.o">{gA{^ ~5sᮈeZqˮlA'}z#[Vˢ@jpB!b%S!.jeQ3d6g㥍m<%禳ny5M6Cza]QޅӲX3t6flWl+k![ Z9Q2h!.l:QamTuժqajNo|77n-YTiThYJ5ɩnbVJ=>9'ƱjYύFzs#Ome(?^vU#ؒŵoӛp{Z ^ 㧬N!1 + ݙ"~@!BFҰ*u<~k׷k{Qsʹ:!f7g2 "Q)8kԬL⁹CUpJ5xzcaT J^2}Y̴`nOAVR*ϟ:3osy(= .Lh2qf1,Kc+%zYk 97ޞ}Z5-LD=Fg&z74b}=vqK1?"z{7ux$=w' J`o޼ynCɃ*dqLW'Q*(e`=TpcU6yf*nhe` j9lʱ׻lR Mn&L(*nh%=*F &8F9*eR*Z:gh73r%ܞ֢J^ؖ=.8Mo0]<0/wWR*(nh>a/cG z6$3'kԲT|\hbݱR>?V6; F ?[Z 4smv)Mn]D3-]6TQZc=/p׌X^~.Z5m, {֬5x`n<Š {ڌ1]9y, d{Q՘恳Y:U3˧15Ltz}I.Ńg{rֿߠJG.f嶽:˙뎽BFF˫r9VVT"ۮq쉖>yNQРIsD5-Mm{7oZc_yDz`4ٝS[i}ճT+,{IJy;=Z'L",c+jlBݝx`~ C`j'M LJ^gRޢ:_]7m)y+j{ݔP]r8ӲM!K:{FNj㍛oRiqK|8LQ)^<{Jy8a3y᠔]VwX硄?SʗYe,DAO;㤢-(hPY pyфy87H+o`kr.è[u;w͞H]FJ務H/8WG@qcMqaxKxchpSph=K6y9)̋& MUx-W HPȤ, 7e45ypϭ'R2/ė]Y EeBuɖ>2) Dbٶm}d޽eZgK[g]{6;>6?^5*u'*/AAzUA^BܝPkQtzYT;8XTæ='X3)(o7q弿-JRi݈qPT2x!5ZֿhS`;i<fXֵs!Z:Nvr]K(lTls+gu>ͫdidU`uل@Z=9\R =uUxJr&ykSX}ȶL cywX?%gO㎏Y:wdpclhBx|w6:|- a~(eR\UJK=݉6v-[4\fSNԵw,O#  Q @>:UdoWɮry]~)`Q &43}X:-|YhBo2+}U>-rB֣96vgִuڱ\f{vӡˈqcLN7-Г̚K D!rؖGv] &E9;X-4u&TjZ /j;2ڗWwݯ G ͫɞ9!lޟnS%<ίfMjXY=_fu?7/2ؗ_ɭ"tᛜ +u-PTc=Xβu>9*弞KVmK.v n cӞZѪGȨnNpq*ZWvĞ89Ꙗhxd!ZggJi66-ZހЛL|x-sB/2ÿxE&M=x;8*x:ڱ;zo PϒJٞ^d3>>Ŭ0yW{F_e2HUņs؜xVm 5{"RL=s_X 9sۯt?ͣ cjHΔN.h2[2"J,_eg ᎙yX.&=^nٿj^z[5]*k!`2WsN\aj .Y[IϹ?ZAn"*ˍC*Ÿd@ϋKklb:=لƏJZ}h )ٛWɲ $ԱtBd6sa/f;;\?&e59ǒW2Ky}]R#Å~d (aQ?sʙɿ{qPuюv4]Z:(oX\@ܳgfR0]O~}+,"ܶ ŪS09C3^So6dF:UCfd2lYr/Y11F3͑^OɳzkvXPݧ$mJgѨuzw/F+^cs:[? V~ewcc]n,{}GrE  \Q @OͭzɎKP_f@6Dt'}Y)LsIz޼JK\lkEWYJ9gX߮%% ˬAl9YޤU4X{{/Ȟ6],mn%d6CQ &kǎR^>jQY5 Ԅz8ٓ~~^필{8{ggj:rHM&ۘ5:CT&' Xe`GF Lb;ԶwPBe,rtgjYk)џܺm?~J #s)w:X1  Fd RƢp?W/ex;N. 'k//G5m}k77,ok2.Ȳ ܹPh2sǗYmȭoQźɡb5آF݉R@ONT6⨔X# v8SqW=6AJɆpKz/\&y35gWLoP`ǃc>j1 OVnjcON3_5H9T\KELS.W;XǧKvTQiXٞ^s锷hwq7)35wh%q(vUbٰۧEb&y!.G8YDSOۦL1c<.+y.1]3uDrqSnJ7ŅYjW_\UJBܝ:v){b,]jAB[\ꋎ${tUTA#I. 'ܰ?=dpX߬q<,Wrc&3 tFR(dWF6kKgOwޗA[w f`B8. 'P* 0Aa Y9u C'pX?%GQ39QC.N.!߁b܉5/&7{%/KؑQ2ÁQ *d}^ʬѨsjk UA'Qc cp#^c=$A.x0!BF&*i fR5kX̽s|Q3X /D{ުnX5WGw񨡂C+ Ȉ UO0A%˒A&3< MmPFmH?,™f*[;.Y`.4[ufrѮ:9  t   y1(dzQzAUW[zHK"\8[I R_Hi;/f*{uzny#Iy`^%|F3kb?2  \*  {:3/gcj|>\s+᪒QłP_"/ک7Xff1}=^AcDch FNTj8QMg> F+_;D5UG-r 8 ( ЏLbͩ޶ȥ0#ȋ*&Wsɩk+q|]1[4WsPc=A7Юa*u[sPkFtSypE鏟ԴkO錴8aev3͌ Gv =ON7\ky`5|V}4jyj42 z^*{9/Fo4#HQU }+< ~YKb.hu9܂{kAADƪ B?9ZZh- r):6VjcJ`GGKkz(cbA/vr GNzJk0'׽{17dB7!LtW@.6փ&MWJWj\7Lr'ӎz-osu B$p?Tn壍<8ϗ_ڽx J^[ƇD$_'Nazc:gnyF-Y# Vr ^9  #2VA3ߝ'N^`4ٖGp?Բ~JjTƱvr^*;t|~*(llI0?\T ҫ8)wn41nȤϯ\&S=|S=QʤEN/HYᇗ6΢Am9w(hPRPB H%4:/Oߑ^.<8?q 6^O#zCH<h2Mv.d6[AA_'{ J G.=5>TJa)k~x{?LsG"̚^Nʦj>ve>{.swQ7LJɤn 8*ktg}<}:˜έ'/aП ;70gu5qM*1>n,㻏ʼsqWںq껳=z<~u*A\ƊA8hհ-%RѭYm3on4~dնp&M:o禸0<%<1[_Gu|qgiݔP]?K?m:= M ~ v$\CQW3j:(i (W, f\=ˇNiFA)XY;-Z#ϯ˱W"\omn;YAm~L@OI%Qޝq;/ `i UꠠQGsl{ 6[Y~3KT=O)KXA.XA8OFu3M;Gt(܏I(eR~1#9><$]8TlKɳlO/ןF7/J.c9<$nJ]1>c۴k&?>I/IM& U3dc4qǩC7i.G*(CONR֢Ugn/'e[ڸ%>}y(ؐ>bCx|wzVހ\*e]\(/^;v&Yg=|m..D¦='hsfPѪ!Yr-k;f`4Ϳ=;hhy.;i<fXֵsY~tM^ۣ bQeQtzBݝxrT$ GK,mnQ,,2M-#!̗yH0?2)*%DNO}z%fƼsٜK#h_; (mnnJ(5<14]zץlNL'at{͉ǟ'ѩ"JjfrlsGF 7Ɔ ^?SQX=_!NtEs}ńk).p@%/ވl_QҬ#Uɯfz(ܙj2 ֿ~8˴mv]ݻ'yֻ>9~/"=ߦ c4Iecߦ ]6DбD=zx[u{~ջԑDߦ$ 'ڻhC15Ugt=͑D_G1?g̦[wﶽ7BwSw6V$r ު{.gzNg୺W7^^Tq QG={zO麫eBߟ]}P~*{Q7:g IW6U8Դƌ?էC_X_gϞ,cc_PExB׏żX}% Ѹǝ>YHB{(I Vȿ|M1~ww5^8NsBm`4M<8!?UTw5V*,㗉Pc <ꗣ׏ ]zh:]烡_G1v3v7B׃:nSǟ naߦ c]:tvB*lڃPc|cPּX>9k·`K([wTz|pM`yNԝ#_|ֻZVsm%vCOgM6BQuhL~-O<64x ON?tc秾`:39b~JXB׏5]]hUhP^6U`Imb4Y1 _oS1 vMoG>__yƛ.Y2>z*t=9a6Uz} nqߦ c~L*h2V,˻OEaB׃M*y0 MiL9\!d)UC>oS1?-o\y|/k)wj|C;Uaj#iSڥ S>qg0.7˜;@wP WS uXz{W֫` P( !46U>7vU`uWC,1_]ݣxö|KϷc?iUXs\7M5 cl#?"9tIºKSkR|<{߄ ]g脺M n~{^}Ϗ:2w*L]qrȗ[Suk(o<|I~EϘH]}cW3U7Z.z;uق3mIP7'x[u6Tw]|]>^VݫT75fuGwօ=FQ/ZѬ5>?Tսz3t5^;zAU;>¦zWMn}\n˻'739Ї=G oz>nzÿL9zcyՊikVU~(Wj߿~ȥoG.bqooxw~݊R<zK/Wx;/eE{d;/gwog~^o0z>*e1ߴo8џ0\zҟ*+{ԿD]3Z.~to)R| ]6ϑDߦ =C {g|+_l)M|%&޻=S|5Mq߬ O~Y~l<9Am`4Ժx0ºM| *,Pc LCV"t}zL|z鏞??~*z"}^y?}~a_+fo ^A~yeۇ+vaݗҫޥx%j.=h 8~\D;/0S?`[,d|b71%[Do5k9П̅?jڟgjx&9T9dLCr'V+ S%Hj˜䐮0Ucwk c|IS]ߦ ]gMte/hTj0nP( M}OEnSPã:mC.N?_vӺOwqpǝzZ-;,_M}&˺}&Ng_ݧ;$ξ/S>'}yg>t)ڝ}VW}m¾?+̳RMR<C+Ue9:gnj٧oξ;tw ~w>ٗuE/tIww٧p;2Jww<>'}ҟ2Owe_.fitʗns؜e}96Uzyfw{.uz8k yWc\y?%u$ѷB׏wOۮ6_ƯCI~T2wꐏF~zm޴AvZ,?; .9`X~MrBOF{hoϫ}[.dMs{{esB}5GCK~z?6m]{W󺻏7e_SxoS/ctGg9V?)asVت_ _4IY jq_Fu?}%>S֏ijGVtOodC~-Vj|5\9\u[vVt:k٧ξNw_ۗ'}ξKU̬U>>ݗwu>MOgvi:}*ڰaX"%3曧t•㦣qϏ;5|PH˜C*m0⏹`u!\Ehя}O>Ov׸k ctt}k5Uugh͚53h]2(O啷a9hr֋*,y~A yv`>?]ЛTa'NX۷LeNM4 p~7:خ ]_8p-i.ug c>뭟~N2[_XcFdVa]2V~fCOaxhӡ-;荧̫z޾,+v9}Vg_>o[vgoYy }vg3tqg}YgSuetyv:<|z6>=ȡ_oS1?-a{C'-F;|ί ~Sq!w5 e<'!9m厹8Nk7qɧ7/^Huk^tqBsG߶sz25АXy~w~1x4 ^~;OlǾeDZ05t[M/{ׅ2b=… p[kΝ3P\Puپܮ޿CP(:e¦ç?ǎ c 9 ߶BOZsPu;갏;twtYe}9:1ξO3a5gۧ>3a_'}yا;:}vgݧ}Ygtqg_W[yjO?0{k5VW:5gt=G}* Х *y//$_Qo^3?߁S yA{@|y>Q䃡y~ۮ^ ?6&2E[+K߼M_}*0V{1v lX/f?۲|ېӍէ2vĈ*hn}YփӇr|PaY6GJLC*t=N@:B)Vï9$3sٝ}٧/5o_/ }vg_w+rg:}Yיw)}>Nwwe}/}&{d>'s >+s?0Km` rWla୺=?~RHoSep}?}l}uɯ~Cj紗@TBwiέ[7W V|*t狞|sz_˽-j[vp@/;>.z;uׂ3mޭ_>Nr=g" s>^Vݫ /ezy}}y\O~_n.oս`}syNBƬUѺuԳǨ=E]_~~z߿R/{Q7p=v:PKou>M S?V9Wbw^잧MwwvЯ{:y;~Ӛ3gS{Wݗu٧ξμ}/+v)Z}7sٝ}f޾>7g_LoQn6(mehx Tãs$T=" V~y}*tÿ8< &d\veowS'7 ۏ Ƿc5}݉>?pyWBcM’B^WJhNp}*tc{ ejӕWO<O%զVpg ~ c _ cLg|&v>wQãa'B/dܯe/=_Dy>Chuɭ<>/OwY'>O?3o_٧ٷ8ogwY}VYw_uu gYűL]ߦ c~R?߸Э]5V;|>Qu'W?yT؀ x1ߐ ]? ɡ]/\Ze~㧓%C}{cAWܸ=;X~䉼Sux>`yaӁ}^} 6˜o/lގ@ξx*썦zWOQo/C&HOujNM}حL7]֭cw*TL'ΏP*9O{=a8<ם{Mg_1A:>>:>{ξWetٝ}}vg_}/}gۗuu:}>+νkV%Qaj=s\WD_ByR^`)n}d=_q4pR^R+P~20擨~y}: cN9b\s÷5Vkho=.u>&U'WZxU/o;;0oB'L(dK7."vd nUݑc5ch96kz;ZE;}& :^>3%iKiGLU/X}j JGu%ZWǷIguV_~9=nw@_xFhYm{l?!?TXփSMhE}>;gJwwe}EOwsirgξ٧L}2o_g> .jJP+t}96U` LK2Vz}u ~ ƭu |,ߩoit ?c?sW,6SIGUCЁG޿{Tv|.yz5q:5yȯ\~O=r%*Amg ]vl[Pk9}^SxjLvݯ9 |A1yf{?jqy^ {&~6愸]yٍl9 ϡ={(uǟ˛ ^!?v@~Ye>T8Yajק~|?h9t4x uC WC翱2*tte~{.ГN*94yO;O3gOwuw<}O:m<;:^cwIwvIw_>ݗN:G7wT< -O\K*t=[O3Aw9G.:, fwg#޷'H[?}}?_g˽$ziw.d=ֺ~B{!G?.T9 Ђ 9 Y'V~%6UF:po &#my_v{(=ôkx/_ڻ<<\;a9hrU8ٯ޺y{@/w*t}俺}SK_&/c-}B_m m* yC?#/c-ݷ/u}_םF\B"w W˘eu19?3tȚǼwٗ1H*A>U?Ae=8y:<؛egRϧPãaW wLϹB^:tw LgtYg1=[+V'}>D ,/:4ξ[v=uK6w_t> |};twʳ޼}>^|ϲ"~>ߦ ]?-o\y|/k)wjt͡q 6߱oz\0C=-/Y`OƝQǏ֒?Vvૃ ]?!^=u:Ezz\O?3k?uk~U}.Wǜ3=rY[lΖKܻ߽+3?6?6xbwF}F#%|~ݢol9?x/{ чؓ{aӷ>&o'3-g8)=DǾMǾ|@zGMWǝ~rWtwS9ꭁϧlմ:nVn^6Xw9pӳ /ӧ?w;>Ё4| =~N: |^nE/}JơT(w5VBUACT8^;cM=vU1= s/{T)ǟJecO.;?羮= .=髕' ~Қï}:zξNwgwqg_6o oݴh=T:83}>+˂>ݗu?ξ<>g}o0}>+;;$3zaOG~{o;yo-D_ó/O(Sǿzm<6atwЏWA+'kf ܺa/7Oޯ|_&/j!>/Of,ijn.Cיp*΅STh~xexY_-D_o?6 ο~~ &߲8,;t!}۔}/q+Kϼh^ڿWCʻ2%CgڧngU\:^78Zn3?~}J}n|+Jn]q{O9NY{' }t6~gULܢ;vtW(}٧LgS>'>s6vG0=D{8}y']~2o'ӷO;twteξ7Hg3oٗ~!WӿK#jܦz/Ml>SúG/kU =xM/n]E@ӝ=Um`|oWN<7\=' ?H_f:;h.<ns+7/ATxBz@0HKN_}ԥ@qмksXi{:v߫fG?'wDZeGg#8z;7}|>}8&l.{ϘOU?'zz<_u0czUﲻޥC'fu9gnY/ӏzߪG#]~}?A/ x^Aþ'?ݓ|4qt{2 \zu2jrBs]z3ml~A?捴{C+~{4e8t#>{?z([yGfWߋźKf}ڗ]˫}@lWFvgW/L|C/QWZ23? e3^_Ϊ\MS/U/T}4ۡ/Gwc_b/=wtNsyޞ9avTmuOI}']~Է岌wSҔ/uGzeg3@ l}|Wouma (?|%Un`}zXXھW#l_*:׫ Qu+Q/i]w| ~ruC'H;іckB] S/{K 3~, E ~#n,YD W;-VݰX?s@%9zӭc*~8>MOgOwgVK;h!^/U/ܳtf~:f =6tQy=ōCtC/襗ٻ亮g}7Fh${N;Ϻ~Fy-OY8q^`/ ~=Eo͗e1qXN0{~+`5=CS͡oC@0Q|`Nv^:Zr2G/:~GGǽszgӂS_hŗn4e*㇧e!0k3WeWzoi`|,zϘFGl{ U˃{4_n;h~/YxXH;v>IW|h:3Gfߖ,jm_nL7@i׎=ǝechN=5kb3g9zF9Bj~9(A_;N ߼nXc#ћysBZo:[޹gO7yΩ'>Wޯk< ss?H?{b~1ں?cQ^l{o?'Oke5q0~u~|>l>QwRVݻiy)}5RG:=+u|/}5L$c~]t/[Pg>˸>PՎd/ Zҩ>C 5t)Gv~{ʍvٮ/2xxl޾VWg٧պᮾ^z:\0ovݯ^~j ݲH9Nj=4x{^}\me9T^z^)0uK9wk^}/tWf&?5뎿OH$]~ 9x z߂5 }3y^Y?̵7c;?O$6:pUswUeƅ>oz3h/^سGjuoY r gV5= .=Z|#ޡo1yݼf ^BǪ }%?_9z]=Otsu?.gms=w|sR2>OXC E3vώN?  _]rrSe)?U)k|<vmLm?|ZޯM-_|o/f1Rvgᅣ>/\En|!41o:_0ʗ/n!z?'yϒ?w{Ee~3; AǺ.Pik?rŕSrɫ|XZ硪Bosm.T.1t6Tz)<)4~aZ XB et}T܂Y"%M^\3浉e/#ޖ :[Sb_`:83czd~*gO2;^> ry-~{2_0OwPOwɘvSoGٗu;V6:{Gy^{Izټ}Ku} ipKZ}Y4gi֯4S=~|UcOXobUaZqߚ| uKyΜ|\B a[|vAµ'm?g8 [YfJ^gQ >o7Ʋ>yme:} yǗ҇ b_gYO%h$t9sI6sNމ%>gGGL-|zڏWc#OGٵtʸIT!m'{2fc;nzv7_o_~_6`ަxV~r7Hgptp:d0aQqy^֝nU\k7J})UB*7n$rK3yνaݸ_$ mc:ms;sqȧEj,p x\zަk?/3᧶ٙĝsWR;cL91rfzsiNji>`/m,@(wϓ:vHFSS?giuֹ9u?:s0ݘw'<:b*g{Sq~ﺕ; yۦMsVϋ_3TsYgGյ]Ysh7>~? o]r?2w:.?YV Cm: -ᗿ;0=@:Lu\,b~>fπ^ٴ|~J~JYu=ͱϧɠ²tъ~3gOn}٧L[ȝ}/-<z AOSl}R}gx~Ww;̜}p3n&÷Jg 6?ygxMdna! (SG~v7t/m%6+ O~ת^rT9.ޞ|$xeOfg.s}eT߱VY:8~|~Nи^G8S~w?_'e=cw-n'#?ZM:6ZI-{VYA]8u7u;Y_˺LG_9\ۯVn“ߧ_>[noiޯ2=ߪb.g6f-&N{[>2;?_ayϻ|q?b>oi>o3TemUB3%'[hhۋt73ct];LJb-q8ӧwqqtpv ܹ1k~PM+%оj;c~@n73wp5Ï9aO?P~ O:F6?[T6>Hswyg/r:9tϧ{ۦvś}<1B7VwhaL]ac'Cg;!5sF󮽓~b=ignB:%L\uLv7]|Ӿۍ"26Hm'iTy*~~15aky??Hn2\`njdϷ\áo陾^_M`\mD'B~"Tb:qO}jOe՜4 d?!`˙ï+cLY] y=ϊg)eϏ./s#_tӬtI^}]|臯a߯}*}^Wjv:Lw_wg;7|oo|B>gtϘ2c[h_Ds1O!8A}ߢ׼[tJsͧ`:4a⛲ kuw}7Jw.vGu}gO>;V:)ǎNhҠM+S*vұWEߥwT_V׷)>˜)u'^BKti= /Ϡ/<_/HLvv,g|qaۿȷ+Xyjt^ _̶W#.G؇{^nsj^{gIש)~<Ɣ OvmUAsS]s=tFKΖ勓ʖQF;wSҡ{C*4|otsfƑ=2zB/~{|>[x +Z>}'+*o iq?~N3^~3O{vXu[Nf-$37}l+m޸-&etWwگ(8{nW߇t4~,塃w/]9[Ï'U},NF >3ikz88G>Sk?Vw$Tz^D3o+@:mIl>BCo/{ixKV]g,뢓yv+jg7՟ʻLx8~,ϰeq”BdO?g+gawi_e?M^zKz}:cVm˥|PߣKx#‡z/W/M3 zXh2r˜nr>c9t=ρ]-nˮwX2~ҽơ\W~]y=;ό%ߝ{W~~g?~޺z;YaYWgiK5 <.YM{EګLK3s~nXz?{~?>7/?~3 џߥk'Kn2VʒiOY'1+py*MjtZ?tȧ:ߦ c~ZC߸Э:nK(wn|ί./{ҁ'H i: sitlʟvR \rXS~2wBYIZAi̖S4skWw޹4e/A,ےZs|s3_(wsɡ]#~@b$wuܶhS3t#.I=rXY6M[_~Kz6m;9~_s2Ynvq ͽb=f]qڑ_9S?<ڽkіOҽW̧AoO:=*! ]/XPfw 6zKOş;9ޡz~~;>7e;sɼ_@7M7ϗOv QfSxw |~̜˽ <3>yyVe3ͭmy>sԱ͡GEk=_N[}<)[}\S^cg!; A뵙afBߐzʿht7:~ݴi_ !jî csu LK+GCꩮLg_RUgOCSzUjZ)]աА~J/ߌ O /ox=B׻tgBiç~Y :L N43f©kةG7+]k1u+˗׷7{_~v鸓Nt1m~O-[h=fXsօ7=<ݽS>g>ͣOξ'tΡ%Ƿk¾W| yеgo\L{綾號?L7-=yCݶFL.H{n "<[D|qwߜKфOx;NY^~pU>өݴBxt/gB¸箸*h{t4PVO/tgxܕ]t:_9-VY1k}>:/~>ݹ Gg;]HAozi{t߶|Y f;e#:Ǚ"a\F z#i΂5~@G͠>Y\^3y3ӭzهr[>ЯcatOL7 //݂|}OgrP? 鹷ӡ?.Z Jse~[wZt5}T?a9g{nFO?_OQ<6ަxV_;}:ۼ#gNXu ]q|GgxMu2?!ӛ;?~|>ݒ=wg|~ݢfe}=w>~{n=`6~r myfQfSJ6~s},0 \λk=@݉~ꓐo?cӭlVl3'CwЙ/s~1e>lj!?x>{k3 -ݞ˞~M2]&;Fc÷ѩ?Yn>NA݁ߞNd?״6Y./!9!=yOW|exY_Ox}Υý_֏5?^:mLP}:Se] q*L<ò_Q1NƎB~ſ>W f.hs%+]tY8m09rW+θb.^kesݨoȷTcz;O:L}Oϧj.xX;:s%tv^BO{N:û,t|[9Aw9zn?l9-zϦzHKYK}z#iZOUʳޣr;7}ޗ_q|nWD2zdi?d`?~UﲻuŘo &#my_9*w5Rz^ZNǻ}mM?~mz-'{?_勞1nmo{N>vuw:z!ցK:m~= yN>o;e>Nؾ95|o3:aS_]X߫ucxޥӨs+[G9۱Z8lZ9Y#s7Qw$ԋ}F^5U,/D'AB}x: LGw}_] o.P/{Q7Z:v+弢=wܪg*?>uaj=c.];?S7t5fw1V,+~:PIPwn>}fuq{v=~gOۗu^}gmw_jKLg_Ы^LNſ74)݅+Ǽ~ݧþW Og2Ϧ?KSτp)s5Ucu)meh\yB׃s$ѷB+rh!~vn~Va8 :{2u=T)kd/}X]qWpKKD_OξW"w9}VYw'_Owg?{t3te}>E}Ygߟξbxkn1i[V$98!=*wfή|syf~޺UG^R뻸n=;fC8WUumt >7@L\srvwҚ5ktǓ>W>߄~گx//ЋѷƼOk9[e_lx*}^L&~K h/c'C'aϏ7Owi5;tw}:>ξBwSO}g¾|>tawqЧɝ}>E}g8|CO:}Yw Atߥ]UQaj9]rXt4k(o<<9t鴯R򸫲jPQ}::k^G|˹Xkr!_ꗝ׷\Zd}iI_*7nx M]U7B׏7[oڟZ/:4CMMS֋}m)Q6X m0C\׫O_y^W,/g ¦_ zz<6*t=gU*t=fzE*t0y?Xw]ל}/?}yw_Wg_yξ٧>Ng컈^Ô>>{>}2g_F}&{d>'s9Ya\9R?x hKC8oSho]bx಻kM\+>}3]qבoReD8 Tcv}Y^wYoSZ͓CSA Kis?_ryAMہx ڼiKjϻcKg},t@SF3s ]5'¤}ǔݤqsBTK䘇v+c򮚟o.0u>}RoWUys}/sϥzSߩ]Ӊxix 量BzϏ]5.tTKO^3g˺<}yξߴξ¼}vg;Ow;}ξBw٧þ>3oO:KwE鄋 Ѹǝ>B׃9Ta{ȡGgPJm0/$s+O\Ф:g*=t;ćUnus޺<ϗWކ.AEp=5kշ/mCC  7˜/nB߼-_)ʸoR/Cj?)ueꓑQoS147g?eb4|ToW4}/>*A ~_ ]SC1?L|=kRLRE=ONg}>+;OO?3o_٧>OSξ?t[yf}٧λq)f 6UzPhsd{ZʝZ)N?uU#^k]P9KUU; ~J?}|yξòxk'8savロ:K_W/\*yOE/,e)*mjXδn3t)u Ps_A<սu*?=n.t^ lMZ>`;d_,mN K<*>;_MMէO=?atϷcuTJkяů۲>T :qg}>;>nue}ξVٝ}Yw}z 톺OwIg_qg;:esu>>w޾"M'^ߤ ]&y=6Ͽ\Yxze0t@ܤ ]_-;s4M<W>-&o÷Tc\~VaY XUQ1/SCL=qϯbauTz06Tza9l?e+9y:}yw>}}٧<}vwwe}˺vgξ٧/#ۧξO?7ksg߆wY;Km` rXla୺=?SDG~qhgNn4\LPЩ_|ir= w[qS>lUU7'm.9,ԻtF"?nݫ usA)_ lT?o;vv^on:kE^py}ﷳ|a9B-A\dCuWcum]D]]/W}uW񨇎O8FkC{x']wϔ\zH=t~\ۭkZuCz[.cO,5S,tiJg_vOtiz:x޾yٗNg{ngO}}Kk)mz>l+MGwk cϑOC1R|?oQoS1_f8ʵg?PLWvw Oӷ|~ڵsrM9wzy?R% m""v;[>?pyWBcmOͷLqo&iw3ϯ_K?sMpǷ ÷\m0$w=j? S/Mvͯ_K?v>ϯ{[`_²AAe=8qL=lCl|&t7*t=i_^ܫ4_nv>3oe>p+OEso)}>ɼ}Vg_~+bg ;[y\N7Q(fߦ c~R?߸Э]5LŷܙUCugWƩ 8o0'!9K[й_zWg$?'߶_~Muȯ-pQںev|z>.y?R  ]9R6gq>D~Ω}ط@D1UwL~ p0Y?uMzW;sk?|A/~h5Vj>_]ߦQay]r)h'hPVO/yy|*t}r҄g|/7oS1&|*t=p*t=gIߤ ]?g̢d[uO N"L3jCu_xޥK|୺W_^TRu!-C\ǸXbUQN⺦Uv']Q~bKM9ͪݙ|cx`愰۷B׃i.t6U3b"U d~Pch*t=X6Tz0 ks ]ȡXTXW")M$q[oshsT4k)wb;|0^$z*t$ tM S-ZOV(TnʁTã݌й'~Mne//ڋZ n|j.Yi<<jk[O}>0߭eqoǓѻ[x`:CMEk=&IU}(+>ߦ% SaZqߚ| uS|GHoSO .M~VaWemӮ*`T0{[E1v3tؤ c,oS'pO cAle ]CLJB׃:kC ]hB9dm Ь O*,.ŷB׃s43宰2^qW֐w5VϕMSRGMqp}P ߘ_^_Cy[)B׃]-oR){P9w5V愱]yhj.t_OFW}rzs.]EzMwn}ixhڞ4M< O_wX=W' ~B׏5]]iU|k:{(/*y>GMƼz~Va]_QoS1 cpn}|3s|ymrS 'wY:mRiN}*t=XMoS1?n?*yApz2T1x a*t=fOg?{!Yg|#TaOKrprC'-n{(wn|E՝` ɫBO}ĩֺլ.񐟄.O_1Ϗ;5|PO>ߤ ]vSh]ߤ cf=+qsNjzXoSSB:\-戮rwR mR?tjxhx O _*t=f ~h=q7l˷|:Vq]qUјh^zy|* & z//$ߦ ]&|*t=?ut0nN**y<oS'pO cAle c8C3tֆ ]фsm0+C*, 6U` L+ŇMg\PyϏqz:TK*h_T2B׃`T'?_tWWu9zBt|icN9ak^M_x;.E?^n.Zu6TEzMNB-6P716*-{uԅ2X w4wNẦUv)_p'8FKcz=O{~nxUkzss|OU,Uw0b~)meh\yTãs$T=# F~x}*J4sMw5V9|I55ݾ]'Nn̻:!vӜu&Uz<nߦ cl ˜A&XPaY&T`u/P0_zs ]!b)UX7B S|:yoU3+Twv5W Uڥ S6qg0.7B׃ݔY7B׃qNTۧ 0 $ao4֫aSsAL]AMx(kӟ/A~B'gi.]֭c <3v^hRo~{L RNR|:[Saj9]rXt4k(o<9|;ՅWN9\ FUB׏훧t•㦣qϏ;5|Ps$GGhݴsNzAAAAAAb9\Ƽ~VaW"~)M$ Ѣˌ;R|E՝` ^}t_^~e~kO7l˷coUZ=wUF]j%/n)`w_* ~oSo~Va{9TM宺=zx[uaaX@ gDSxtD{^糯$b7U/tX̻ۧt)@Ϗ;=|eϑTG91!Y*F!Ϸ˜`7.tzq u|-κܭ}~ao|: 5`K([ ]&?9T+C*U^rT9Z%gw{*uz8k yWMTTW]X>3.M9˦ cO~ ]!d)UX7B|I$q[/9z|=Twy|ERų"1_N\z5zmo.<Ν[G}4o?ll׿NޒLW? nRu,' {KFcޣ$酮DQy?^WL{˿o> C*5M<SKa`W,k-@uT_oJԧN4- lpLt{jۖӬ3h Y:x>4 ~=Ot֛%g}^oL9H1;f7@m:D06/Y3hgWdA1|,E*~1 \͛ix@#~P;ich{2?~S?6Uzy%gw{.빚zO{T睊Och]|ۈ鬟Om1м[6e59^<ޢBZ^ٗ>lᕋivv}D"oѝ,|g.[ێ}Xp[rЊ2h{!?\:;9Kn9sɵY",Tݹ(dz=>?^wu~@hs$1opÃxY7%ܸ<͠yKj7Yg FnM-=1}uv~--O=.Q1|7@3~S~Pubt*-}` Ig 9g峷XoM址Bh`(bڟ1gϠKi0}v^v~o_Ͽ};{iN<'ګ~@(5cknn6:8-[W_Cf͢??/,j c~Zhse{Z;|En)d;>oaC'geߺˏP#hP60NuryBqyQ=Ӱ{n3g=H/0m?-.Y4ù0f1iw{h`:ս{*k^ pnhBfs~/Źz>_ -ZD˖-_Wو} _|0Z8ZP[9Sch)amӅΦ}Y\:us CJ`ƍOnݚtwӗ%ڻ0]yCtκz߻y;ﳮywN!ow ~!?wBO[oL?v' S箸&_cu,| m] xYDM$nxFhMKh#óG(^^`CP!m f3h5_y}g|0a~iŗvy^8޻8:Ӿsq }lBr^|ef?By+tEtV;Hff *QA*$G? |c00|]t,f?Gh&Lw?H<0Qj?~I~uUzy|@.Ňu^0^V]k9??};&56Y>sYM+=~``l/Г&-^่ظT;=Ď3-YyC .Cv/%_, 7C4x`Opc`sm >M6%ShE9M^?Q:\?nʁ[ʵ*>˜34g_@]2z΅ϳh#4ҙj꺓`:; 沯-UKU|z&>9K wҲ},8,Xr5 ]Mgσ7sݾZۛGKo.hޞ͙wYZ_\hsD#r=uul iphwz=Ӣ^DǟWpc^O?]RiH7 aߴD(y<=6=B7Π#6fN΢ЏA}#At8+tGn|f s)t^}fЬS='݄[LipG'z'DߤOII|BޖwՐC-{3ߨJ'+*w*:-?u_u[|Wм}t:/tH?uI뮟Gxx4i;^GY<3~EdmK{-9 yZZrlV s 7\D6r8-􁓗`%x.Rڷ">ftsܾ$}9r1ҵ}_^Fnwo"$[d tM:kؔCz^z30>G{\}o??wC"z9ߋhV*8{'i۶ |ܺ}m4 w>@gݛo]=3 ?<xnY~~gM^;gq.t'X򺥼`mN&߁HGu u:`(t01(F<S9ǓzZz"  zػmymD? 0!&987ҿ|_ . TJg'L9yKUzyFC36q>4{n6;}>Z;Aw}xC)yu-[wg6E7.tT:\_Q{)?~Gg䣙"zK.yW=u|zD C7ؙO8ւ ]6ޞ>{^GՑ48oGGoxo{!BWJ__od|sOcfhξ Sx"wKd}(?~BO|egB>u'7};`$M$q[osh>f>Ӑ9R|E05uΥFw 'c?a*lޛ+[DCyZl:~o|#}ѝn,4UIPTã9rW\s0˸׫I^kȻE7s x{뭷?'2R*}N7{(/*y>1:n6Oz)rH&~RaY_|*t$q[/9JPs}E҄)?~7lʻ'*,)M IRј(G)zzã#ï ]_5Iecߤ cl)wUr+6@u$7.:U/tX̻ۧt)<>o)R| ]6ϒs'L㐬'ȡ`oS`pN7c~Tؼ.ߚ| u{zãTGs ]_U˜Cߦ ]ho]px಻kMu~lms}-UU~i2V/O+[SvR|eS|PSr{nAAAAA+w0cC*,!~m0%98lsE_Kc.+j=WѩGa mՏ_{̏w1wl}~,{dsG .Kǟ*s@c-:~.ݴ5@# sKoS& 㞻x1D_Cy[=`mN/(:{_S¶"/4֛h..L*:_sa~@ժ~RaYX˜s4]r)>{ZS= zIA~|p̔,5彖FtViǃET9.9C|}SKQRu c~,]S:b~”)>˜}1)'K}=Lcv>kc뇔oS}k*L7K+ޘ| m˜S:2"kv{.׫/qH|ssÃBPN + 'tz84)~7׬/Y_3ʮUX{!ϷB׃s43.ޞ|<ɫ^+/C\V8 *~99i¶-;Ku}ujw9tƇt7YOcNöX=N+M9؉x~;*t=<\}!߷_`)woIt~:沀Lπwi]pߦ c~ZqZՇ y~P4 Juŵ{?]{ٜ}7]s e~eLgCpKO{}U|䮴?a[ʵTã307_"rf?Hg6]];pWG |%rT98 z9ϡU4z-9'j2"s@k :zw9 ѵ'RYt۝DoS}ߪ0{KFcUO}4k(o|*y.@u~c)^Qƽ#^wOt Sr|RdlT?94K˜DS|*t 9CU9'.C@u9 4V'`Ա06K.ŷ_Byݞ^`}J~˜@R|?0.ŷB׃9s=9ǻխ{zZSyTϊ𫫊B׏5])pe}kANkU|P3Ա9\O*+C?oR1?-a~92}-:⢾kZ@ux]ߦQas\o4=:k(oۣt~PnHcߦ cр(w ުkm|@uL~U/tX̻ۧt)7eS|P1g#iEPL?XO JP0ŷBO r08qC){<[UC갳D(?~-))>ߦ%TZos=Vy1 1t|@Srpwn%^s4}{%0hfrhքH^rm` L˭2Ok˦xN[/ߡU%K.m۶e# Ь38>Z~ Zث.tXet);Ϗ;5|GgɎ:?ݼy3]|хZGï9$K{ N<9:!'\@n|#TaOKrp؜3}^K<׷ rwхL@}x7͟?Ni}n944ROV\|M Uaj=%ׄkt4K([gt=ACBg}6iôcth3g,vŚ _?P[S,zeΊ V y<$C3suJ:3i]nUrBxܚ/!x[W~5竿xzg4[kf\FCdv1XoSs4g]oU|Xe^kE/ 7mҡ߆ abhg3ȬhL+N-_Vv8s;Lwښy vPk8i/=B|40~A^C3θ n*CO#?3m ԍ*Z~OΦ׬7B]ҡ?X3{ML3ժQ:qSjϏ;5|P1t|K/ w^/$[id~O+03\(;L!SpVցߩЁYe}Q?u~Iuܝ3LPq2zOCC{mƅn-!Rxg*Q8W^vEWmlӠ;lsoa疘ff7']< tA]rnT(G苃2/MS{NK=[Y[O˲Dzz+۷:Ϟ7ގe(z]YFC:oR1hz{.qW֐w5VϕM>EWixfY 8+oY+)·"(t={.[uZf-1wyw|;=Vcַrѧ/ tIN0E;+z{xc>;s\<~h5V7MQx~:@Tg:>z:s?fky.=NZNsz=kgcr]s?C:ȡ_*0{KFcUO}4k(ou1ݠ?ggge9_v+z|usy{@v~~5Ҫc^/tDz]r/8bbTy݋T Q3?knП21>+=7GM-a_[z,1?-~$ k? 3wxx\хu#*t^+owӭ וm{ȷ;Ɇ~}_'~ ~6w^?たzɰ eJNJg B9@R|kp12w_|96U`}=wݞx]ƽ^=NZCpkUOW '^\^xao?_b "umu R="!r}= 1xs[w>E˞GwYg^}qpW{ᗴ}q:ghw6R7p?ͻi]GEw aZw:krô|ZsD+̷fAZ$o :p0zZ޸s !YmB?-UH{`{>t |"1Cw7G^op \_{{??y׫U}~'UK{9zX7˜k7O鄋qSr|)>˜S:b%E_yỰ//@ +]oYE]g2=XEss^s<lt]H'Eø~pYᘦN:7ܫ紻n0 ۲n^,WձoS1?V׻듻R|k:{(/*t=Xq-t ubGMcym+1le*~!?cĻ$,}Kϲ`Й%dU|?D|M~Zc:IYфercy']vXsά~r:L;N:z=k/S*cz~ %jU|?rlT`}|@-Ňu^0^V]kaS~P7eܫn=ⅮyzN0-ZOV;׷BGљÏC3y c9LmS NV5xs}?*?~|:=wcEр^`yJg^WT~P9-ǡZgƼ¥6Uz>G>Sb9ǓzZ)"hn?W* ]?ִwtƕhkU|PS:\ߦ GQzHȡ_*iIEϡkiU:b~"Tgw5VOT\R|:Fq]rU_cu=}F׃-P:\:s*9b~"UXk|*y>E:Ru#u/\N>rziϞɗb/tX̻ۧt)5>CyTã)u1ߦ ];G4VaȧU?|FʏҎ +i箢^/ȡ`oS`p<BF5p5Q~T~P:t5yWѥOǟ1Ӽ;h~Nߚ%c/_Ao1qҖ%TZos=Vy1 1t|EEa:o}=jlS%۽{7     ;Ï<4>wsCYtBwq|twt},u;]Ss)pehx T؉WK? /So2}t]q!{__-vQaOIrPrC$iZuuD~"TO#gҜ9ӫ^ѥ~R@EL_8:+t]9#:#jُGrh/б1},|Yl%c_nN0=r:ǟN7?㼽o/z;fkᗽ*L瞻~Օ| u{16@s}EEZ_*?t郇@A…?!;9t'NGpl;+/]IO ҥ'rg:32l3S4h*s1ߏ92p=LW_@{_I'[sn"Ruhw,?~tܩqwy,8]a'!Y=g0KoC[u1=Q-xgyY'w(U^K' +h/n)/t=XґT{turhGO]O*ޭgz7ԭt5ÿY?ɺ:=&V{-Gi/?AQ{y,Jkf@}OgޫNlyw?6Uz>G>sp{z䵆zl:c]E_?tOǻ˽0HqXXUxμCLGg]kiHǯ8VϽqھevƠپ^tyޠZ~{;w+?&噛e_g,L鄋 рk)>YS:\ߦ =TGsmU"=czϿK:k齞+ϣM7ٜyGv~-=2s]zJ@g::s:vuEg޲ К[sn3!4#OW;ӂƅn)g*ӊfo]>QcE|oqGˍ_Nݽ]QkC>yk9dz7N η<:=. mm?􏘐A?qoyywo~|W\߽Ifc喞~ms]r)h̻PVO/y<3/+*?9J7L|*zn@;GaJ:KW{v~|9Odl;˜r,ѷB׃~~>SbkT1{ryϏqz)?sݴ;_:rz|t<ˋ*˜砤J[]ߚr03^'`}JGT=D񊓿&O*VȡϷBOJrf=8PLCfmQP\Y?q*#xEW^[AKoS~TZO&J{:{(/[˃;|!E +7GU˜O"r>ߦ cѢ.5{s0˸׫^5ջ](?:QUcm)p1?a:W^6U`yJG]̷B+No -:JixlK``:804Y1_6UiA}B^sE߭z:ܺ|EGN߷_CK\L۶mF@whN^̷|:Vs\7 :5 c,Ő:?ݼy3]|хZ/+C*y/}*t=SbKaݣ-UڼzEYþ.Q}琢uceS:b~t4qg`{:7˜_u%{g0L>6@_Fg ̢e]Eթ Ayp2%5V2mxm^Ƃl2mw?^`_SCr˲,=gլej 5Y2:o @`F₇7N}޸iz?q>E~˜o˜`7.tzq>SjT]Gw͛6oÆ H0A`` @,ڜPNNŁ& ,^zy+0bLz=Aڝ-Џho,Tȁ'wqрl0򔎺oSWDW~8=&AUZpي V;u_?9 o2Z-5VR/[@^>vh1ybﺭn{)Ot˜DR|*t$q[/9ѢYG[WT阋~T~ZCbC7+X@Mr3x:pޮ6꠱BB۶U \?ko}a\;i`a+4x:xޤze-:~\T|>Ef5UXmd@#} a;TMcFxd.ݔAs.^EC \ dY(l)y^_/uѢ (LK45AKapP?dk"@@9}OUㅮ+ǟo)R| ]֧tйMz]?]?tJu0]u`έz]ue9΅3g<~̽eٞ}.U ~*(L;?G>yk:n6 !sjdtþ;}jl[_^Adjմd^g_:x4"SXtd`TTQ^oۦB+ٴ䑽Y% Vv^ݨ;+|)CusU{ ,s;x'Fcw}\d.{_@~˜o|*II'sd|uuD_vW0]. 8]Vokt9BuGuU :;{h]?ӽ?ŋ[iՃg#|>ȟgVlP@aƋ#ch`Z%zi-;a 48BÏ,Y3oU+Њ~hl_K#;yqHsJ@A, l[U>p<0f]wn;L3O;y#Y7p0RA;w0|w\W_.nUա{b!uk~><. {9z~50;*+)I SaR|k:%1'w|K? EϘ} p=/mG|a)|>R3ȗ"Wyq\t3/>FAn:s⟍wr3ba0^+QxCa  Q ->-4Cx,Zs~ mK_7zU;(ww]~ |54\} ~cߦ c~wקt|k:{(/*t=XQ6UzWg.x U|qU]mw]҈] s9=- bg}gT_?vne] ~~Y F j1~F9sʜyv|ϙhP {RZetL'PviS(&=BFwK z~_I։ y<v{~=5t²96UiIEϡkiU:b~່\˘6#n0| `t_Tbx.Y ^JyNu;p_~~\(gR~֣ wY,<!\PK;acy7+WtA4㨳Ρa9Ln_BgPn/ZByhŗVywbZ=4H"AS_KWb:_x9<;M] _wXwy1*Qל̹:9'z&|667Ǎ710:w:.]w߿gO]g=Goymʣ5}zi k_ԕwKw\3%߭iW~h#<3s:Wp^|shДOhK1B9uB[ƞ/wr 9~}!iq^uIRj_5jϠ<^TbKẨz]]*~Ac>Poꀺ ,k}>~e;^.L"~w^-旬ު2(2t>(k/:BQ[[ ʿVe)yKLm a7S7{D[ǻ_s52~NR'T%_, SS5xj! Keo^kV鈋FuOt c:?Y>k~9?~SǿtZOCR]~Z~m^} 85=P۞Wt۪פֿ~*s5zG%v)~J7~6~m ? դ~ԝ}A}?.y꭯{Z֩?k']~ٶ׼_>ݩxyRm]@j^IUed;>h5r=^/t5{ .I>{v*!*t UU6!Ze2<S,\ eQf{zۋw{w;v:.6[?;s0Cw}Nu'^NuG?>^uϷU>nol{՞>>gw.;.S_wQk~ݦ.l?p:Kd[\}nz~-ds]+cRuN:\urtGln}̸Qujz4LGF1t̬؛t.`'!e8A{K=JP7'}3_G룷K^}zλv^^Km6gd馫k-<˽%X]oґ>p}XX y%x9F~~?!:^|Zg- ?W$8KE-}u|ZtE}b5rm?Ogj%kl<\Q;mԏQ M95ud_mexw ~g0#z_oݫdjkM3=p͹eDtjx $˻Pºry.ָ u]rK1q:VG5J*]l)>\^k^^׽/ztG^o+f#=kXYS*:W ʬ{:_4U̒5_lq tG]x#׏+kiٝzJ/Ӓ@NWk>t.fTz-ʾ)>Xb阋!3"~5~Y4PIUn+;G]V,Ʒ@7 yY*;J_tݙ}tyɤOozf55kY5վ_i`pޭ$O|Ql5߱jT~IPuwۗ {ԧ>V|Js8Hŷn:}<3ϼD]b+pMkUxcM_1>s[ԝz#:ڀE5 |̟KVxouST{u y*!*@w_>y餗רw~ uI}9.;]\?ۻe:Q)M/I!Q{DН~\۫߫>gN5j;IB>ݽNIOUO#nZ?;'0Ik1PcU?d{5J/t56Qrl/IT 3~i~Q[8FGkKWj/^..;ӯWCoz Jx2nm(*c]|E5~ZtE}b5pmV'Nz_*Ylj~j:KW\/;QoQVhzIY2OНI_[I/e5{%Y\(UԚv^'y]Cޭq⇨~ݙ~ ?OU35~ܷwtµ3jz4L'뇬F15cUE(W$8m7ry |Qm]kC])O<B!B!B\'0Ik1PcUgVK\W׻56UjF1K:R@?~O]rHB?('!|QK/Lqur~*@w_ïR3yo㘟L۴~:{y=>V#ףe:\?d5rG}sQ[ߋ$4!뗥$m7r"%_ԐkQmZt(u~Ik[%x!8VR}hx:J Uʣ$v>g5x?L:bЬըOt>g5y4FU/]h`2>n{}uMn-=Q 3~fjhh߿L'\/YUe,Q̣2s1?d5r}&Z/Vb$KCV#ׯ Ipn䎷Bz7Ԣ;V˱t.i-[%!8^R|^cޭQOQeFo󨽤.Y2OНɼKnIżWD?dEiE.zur!*@wkfj5xe:Q>M/9>Qg~xu5A$Y\,%Ao;ޯ.!^kѱj:F'No=zzI'zzͻ>9/7M̪QxT8Qoo+oz4燬FOН| Iި64ֿS=z:^GWoR7lگjIP燬F1k ^T˚7Zk{<Ϣt'oǏO;>&k{b>_.gVGPeF1tAݻ?NG-f̤OB~jU>VnW^wS>78k, R>}I/-޴]odEFkۊFx;/׏Zt|j:b~9]',\;$×#G[ci>u9|DmZؠ -86^XU :\ZJkGrKRzo]#Us>0>Wt%jog|nIߪOQhw% uSTM/!QWk']W؇~X]u0nd|.S~G Vyߓy4Pͼ}yo[t:}skߦ.9\V3kۻkW\רJZEoe{[u=X C 鎾͡X`7ƚ)9˽ԆLDu }'}~I_ǻuwMBY|Kn)ϓתscƕktZu~t|z\Cm^^^O7jz4L뇬F[5 &ַUlɣ< Wt@89&ּeuXs? 8qӿXq #t+, P{G՞]{,uIU,רw<_󄼑yS0y]9tIWyvum6&ᣞCBbPߦZw6^lϜ3}hw-5ǖJh_/$m7r:C~Zt|b5o1?(u~q{!=Ŗ~u5~<:P=W(4t}_%u]6(5j +uG(,~m+Gt/|AWyˏKw$T]neVN< 2?.K8ܳ;ꊀMoBS|ڷ]zLYo2v둮|sQrlT#ף%u>?d5r}&z>+=!=a2y}cs"w|t,OFG[P>/uցy_W'!,/5$!ZU:޴]= Յ/{z{wCjax~VW]髁kYHv3~V'k|tO?{\tY݀u֨K%,׫;kuUMKQ 9?y-u|\U-Aϑ B;5zkH}C_Wnד!S_}!'Cz8}Յ\Zԍ=USP׾{wO}[dcqN:;2/~os7!θc+sժ'KskeN gw|C}S|.ǞΕ]&k5U 'zu˼گ? JyꧪEZw#.c]T3^$ɾrL.+M j[ 5XA]$\>GCWl vT8vn\֯Q<\ ٣&gwk<[5ulܙm_oܧN~]oLG_ T~2[l[6^7Ն{?r){߲\׿wߋ'C'k,K#[!.b ;{{Btܙt`屚._g1Xeg/wC7r?1hcϗk;[_/U;q5yyO%)\t|Wzӿ9o$9&ū ȫ<>ad"\$sϱySs& V/;6fj}ޭkD:{5vNI_@O8уjûR;b?=&8{K]N_yצv8k=$nL]r[}VoD7KP@ o{%Y\(UR|.}++׵/a?D]遟/Kp_> PH덍~nj@?_WoH;cꎯ>.~zo;d}Q;P?DnGh~KMt-Vߋkf*?9Mb;ϸ>v:-_O{#3>Q[?zeW]L[/YŽlohzN9Y<>F_țJW Cw@"7(*>友H8/H]4ȿk-n4wVw#9*e95ourS=`c~^cW|]=]PoPo}yH}' %=y?P_m[|u:d S>9稗^t:jM <|7j45;ב3xckƍ-`oy~=gݺɵߔ ~mjk]9zyj$YGz:ަU!_I/{ejqFfE|hN.xN{>Q/KI0t^B'{{ZO-~5~:|\oׯ?#+wկ_v=f£xC4`hɨl07q7Ѹo~M ~MpX[vDnV~+)^=O~m+&@w[+οCܻh1ɿ}Ni<׫׫+>{5jwWG~ڰvAһOuA-:u^fn ${Gc_`loߤ^Fm/zZXԧI'/Un3F寋!kLwi682߰`_}wMkk(/Z~`SJ9_>G s3ru:B>w ׶J⇬〟Y5K\EcQ̣N?d5r}?KoTwwՏ+cϿoC??ܠTܼݸ+\9FHq=aܛ+_ư;BjƥO0oF?V%Vw}ꎑekHϯ_Yx qץ/V k߯UBnrYGz 칏ސmun?uqK05ڿN~y{Y拝_Fr f=۲w]ߍ7;m7vWle/{}=%{3#o "y ? R?d5r=^f/]hܞ^kWo_?uS~V~[ww|I]o t7W2D>dLЀ{STDN:jH:9wk_Qo/ k~MJGyGwjMmͯlP٦ 2sb-(!Aw=4 jͱus!@*'*so5O.d$?9G(Jo>O|s?N>O7:}ײH|(Ce:b~fu UMjz4L뇬F(j ^_U{zީ6_}o~/ʾ)y*ohXtZ_{9KURWʣ?׾[COwJuE=]~YT.{uPz2%E~ow=6ڿc߼|[ߕ"=GBf7\KwBy{g6;ܧ4f9ogx+Ij^b$K}V#ׯJIpأURf?U-:֢c5q1j lI?3߻Geo}2f,%fIfC~̾S \"7.oz@Ymվ9[nuվa[|-|}:C'-m8 ^޽~umѿߧʂZU?܇?-Qu}ԧ< ޿vA-Anol RuRGSPokCpevF!!~;d!{RCWlk |5}(x`lTn>6ecq\3ߤvx>SC.5 j{ :lZJCqjK\k{(OQeFoz4nj)1/Kyzz_ t 762ib4Qėu]& kb>}3.3.Mn7>=߫PNg7vMN3|kM7`舺|ݡeDnoDK}9otMy/Uϑ mazns\3%߭/< [|m\Gvfs~Õ5sVgJ.Kչo. 9Ce3Ecݶ ߰oP~o7=ǝkaU|fjs-> g>>OcASI{qquuXKz-U\X ]r'y $TK\bޫqYbMQtp]z{y]n!j d#GG76wg\!X}R˘r qQ47rL[/YUe,'W#ףe:\?d5r}}Ƈj R%gTvGeſ:k"k_:1-Y+HP۬Q" }~jR .֢ck5o1?ը_߳5IIa?Awi? ``={r0~V VR|uKV%btҥ!3w[į |ɳ>.= #G~yF1p)~jz4F_TBk\ۓ|uUMKQWzbo9geQ[ =l<.Y0ʿ6+`{/Dvxݞr;W!/̐ Q̏t`uhz9YbޣК~F~1h۱7 ]pM~OB:ςeP'^sM ~m?tI6oը$ |~jU) {P*짪EZ'V/J~pYᘖN:7紻7ӊmE7^#;[u}36i-[%!8m5jk.5=u觨2Wr=AYCV#_ߥ>|Mʜ}R :技mO/G2DsB΄S?ҳk$Zj{5>Q̣%@.z_׵/CztG^o+f#=kXYS*:W ʬ{:_4U̒r qQ47rbtQ[UR|?d5x?$JB.~Q[5!Q̣%JWZz_׵/CT?k:U^6w^-旬UMjLg\Y[P%~T(;IB?d5rn%}j|PtV;eߴU~ɪQ^mU_VG?EQ̣N:#?$'Zj^I⇬h8҅%,{}:nUMKQ (zW2qm`uz} ?FGK:|~j3"ΤOBFNF1*%aw/S/jSբcx/ǺR'x!B!B!NatU?dFq/]s]Ƴ: Um  !3Н5\I/e5k~jF^]}.}׵/~JНr qQ}&[7r8]Ƈ|Q7T7Q̣2q1g5rG5U?GzF1I !W$wk. _T㧪EGZ'Vo5j SvM[Օg/R'F妃Ÿo:NGTWN(+}_ܢ^{Ejס||{]v׎7j9%gor: )\tt'y ? ՚C* ^qٛMݡ.>cZXX)Q>EԑO׬Wk֮W;p>NB)j%D4ۍ\(UКv^'y]Cޭq◢t'7`-:κR4oH-,Qw2/|~ܷwUv7p]ŜތVGq/'[`5r=^CVZ/ 3mZt}zHG9E-E=֫>7=7_|yuRwcW6f^qSIuo!E~#ն7?sDuv#qoޢxQ۾x~~{,9W=}teU:丣#@6ۮ: /;{|F7s$Rsz9[MeߴC&w>'?~@:vD}򷲱uwgsd58joV,䓀cdrծC<DzJ*|b5j%w?~ uvv'-/=R#U[wWgj>ڬv-z1uՎCTgg^c([T9rM!KCV#g"΀kRWTfu.{ڲqNv̫P'<lSwf ]'V}L: wwZxu#7gsu=ԝ9#ש7gs}Cuۍ*|Lgsw_=}8~\lξT9Xtοl?sJWnSywHߡsxG!_EC5j҅fo+5SKk^^ۍϦt\o\TWj&v5/ytg~l;1ejt}Q[P}Q|6Y jgz̿Jڅ7OS]z$?Mj93j#̛C[g_u?S u‰Hmٓ=kԩ85ЊxjGԑCO'Ք/;5u#CݻՕ"_o}ۭ6$3dٹ;R=[m{u#Qβ|\&;;v\NႛԱl<ɓ_rrW/vDߢʱN:żG~ ?뱖'F&~ݢxr˅瞢yNAY~lz{Dݼiz<"taz+Xoqu.P~yMy=jTT/Ymy)DoQWsߧl?Q~jL;mOIDAT-&YOϪf]_ܢ=7yW;˴#벱b-bQUΪ^$kȻ5<.c]RT?;?U4nqUl<. 7կ_N-=_}X: xXFGK:|~jzBkj n۽[m?kZ}b&XL:$d[jw|>?d5y}H7ukg%Ao;KjtUXZM[[|Q}|~nz'  ȑ#ŖYOmZؠrTm]ԆU6g7+Ɩ[ @&0)~:j:nR[ߑj¦l *=旲^I(CV#ף5 JZ_V 2*ڿvc㳩~1JlO:\o\ƎL7r8]tkgVGu/'ۧjz4Lg뇬F(u;P%k} o[|e핰U(Mȃ0}2gy|oߤٞ]l mP\g Ӝca}xXNbM'sQUwym{v9E?턛U5j;IBg5rFP>*JE jёj:ڦKWR=_{>tH~>`p ?+p2A^%ªvz?a$< P+>;,l & ynW.¹IXΟeߟo%(+WsXU~@mx]/3w3eߴU8VRǻ< x:J UM/żG~/]}#W{є0()k ?-J|_Ǿ>q1!<ޏ}uݎ=+I,8Xs=Xc?s}%5$D^I(CV#ף5 JYK07۽>{u yꗢGszCj:]}Je$~2tҹ kJ꟝=W~<k~W-Y(Lg}zH=Q0뵃/SӸ}{W+YUe,'W#ףN?d5r}К}?z  <,ƎvDכ#ew? ;sÿ~{)ؐaux䟊ɒVE(W$8m7ry |QoQXM[/jT_T3^$ɾrL $a.y 2t!9Kp,څR y*KwC >e0gújڄuz~ٖ!8vnγqgŇ\Ok[x=|6c-` ߣmB¾=x=ƞm?%Nqw{[|b>{H[o,Ctkq*L^ޭ񬎦2W7y^I⇬ ZO^r MaSfgט̥~B>y{,ȃLyS4tpXS^3?7l'8C[hQY}wkFfX"Vsj6+7ۆ CzrC| j|8hՉiO `ۓ| tfH>ۀpj 7i5\IS5yƉ~jz4F_TB*=Sex]n|}|)J|^oDŽ? `)7FsN߬k6l&7ey7}7}9F!tl %~_m3&WC7q̻/Ϭ^^OOhzI'Ybޣ5Bϯt7tM&|u V!ZM2瑗$scZos:tc{ڰwCה1{mjwX$.tgwt绢Wwjg1 ~ؚ7Z<70tV;9D/>Ic_Àa_gobw&|o@:{~+[Q9V3t{O( U>T-SƲm|3?g0t ?i}'I(F_ϷKho2n|QC~ZtE}iUto>^ןׯ|MPYU^p sӫv*Tn 8{#ʋ;a:μ Y{ɺVyg;\ ={׵yK[{ϟߌo߈c9sZyxz+T߇S74êg/'s\'ʟ=a.*m[K`~ϧv>ZHk4&sR~ϻTygK;uJ3t'Qxw\!\GʾSyԟs燬F1j vzHޟݥ~7o~;zϕw1{_Q١|'an^5ݼ774cjxnB$#ps+#ה>] `F#`@_;~;B՛. j]"|y}c_ښ= /jfMֿ߁;^OY||ߕw7}%{T_=ge\ޏFeXIs~+ Op ? ѺFz$!Ut^k5ջxWu5~p=T_s1{Vuܓt7 uprEf{Ρ мk}m)T 0/ߝw8C`vw\R8|^,_}z{{$$_X> 97!,k_q#׏bqN~fuVF1K:RBkj\տUwjzPm=_‘xC0_LnɍifR͢Imo8"VV-7P 0wQ|nBߕnX^ﱏު|sj|&kP~g8`hf_|/燬F1"%o;K56PXM[/jT_Mߚ 7ǟTW~Au{l[A}cCC??%dV熛Ԫ \}y 6/NM"fױM:YQ4}'m ufrt{4ٿ;a'p 4 7a;2'ߺn}ϟQ9j{{QKaPcw!D¥Xw%=h.1ܱk U]j[+ C~T|f5V>s3̨ZJ〟j:^zzzG?EQ̣Ng5rG)1/Kyzz_ t&}c*0^|کo ,fT=_F톓ܔ [m7fWWoVd7ߑj>膹ow/qc}s4<}޹N&|F<[U_u@]ѻ+~sϠa ka}25gԾU&;Ɍߕ;Aݱ{@͵k_ٿzMqs;G"tMݿ[9RlJB.~Q{5NCV#ף5 JZEoe{[uRz}Gom~)θxCL|p`2Vo_u@]wQ fM| JwQ̏cUl|zNi`uz} FGK:|j]ϭ-K/Q١ ʪ=jkM@_ifKZ9,n*@ `E25$`~YJ?v#w_/!]BʸE jёj:F~~ZYo$9&;  *Pγsr(>ngG@ "!/` U`(u{zOPWzbo9\GB`HwÕeM~yPf_`_QEPS .hŞ'Wq+aY׏7P^j#u3A@3/ ~VΝY_ïLMF]2p1duVF1K:RA5b~b?"]h2J?`/|V^7g񳰽s˼wa[}6UX P0,`~jHB>~UHCv#wPGU_Zt|j:b~V8_ I3  }ǻU.iC0JW[_ڝ+9ꟋF+(7A>:˵8]&Y?(u%n~*s5zG%t)jzVkw'|p#2gn"cJB8+ 2yquə\crWP9~\!>"+ R/VLxdX & u @lִ4q5u~oٹߞmϸ?k,`WC7q^mZ?XŽloᓫN8|isj :Z_Yʃ<3JB'{Vutŏ7Ԃ*EYE`ʽz{=Z!Ynܶ 7!]5ssr?d5y3YOB3zըOt>g5y^f/]f2>n{}uMn-=t'_|'/ KVGoUKj󨽤.YZ/Y`zf_|/燬F_зo%QZXM[/jT'r-NW%z&.uoTثTu>^<3K*ۼ*3~/?U*dvʸ7+fW:yR'x!B!B!tkq:^TnXvAꢫv>CmS՚u{vc~?רuY]nI/۩lXJy$ԃ;/:jԝ;5n'Ցzuk '-=jˎ5ޯ#ȡ.RWη{h(]Ͻ#5o{uUdmCu.tɥ|BUjF1K:|~jzd $KnVuz<"sazSkNT}!'7S'Ju];~~?uzc0:dۭO;y˰r]=\_7dVt=T;l_<[]=N~UNc{: yf"@6vU{zcSW|ƊӨJZEoe{[u=엢t_cj<oޢ^PW~X9nq^ӭYŽlo𝫑Q{IY<>&_[~o j" }~je) }ۍ~v ZO-{?~m->?d'QxT8Qoo+oz4s燬FO@w&kIhf^O㗲InjF^u/Ae}x^{>\e?;5d3>оN_:W7Q̣Ng5rG5\~ݙ~j$_~UHCv#wPGU?U-:Ңc5o1|Q};s0>?dVK\k'QOQeFoz4燬F;5bP-s5yƉ~ȊӨJZEoe{[u=엢t_cjF1?t3ד sEI:|~j5P%L3j{>g5e) }ۍ~v ZO-{?t_O~f(uA~ݙ'!y=_j'IBQ̣5{2׽>{]}ʾ)~+@wk cg|}.?: *`5y^ F(fC;3]/Vb$KCV#ׯ Ipn䎷JyꧪEGZw-o5A7s9G Ծ†9Ԇ'\m}%~n燬〟j:^zKy: )\t|(=ZQOQOGrIw d $TK\bޫqQs.zur{/E]g~.+\,o> @} ƚոb~tkgVGq/'|tCk?Oפ翪wԡl|}?rԦy7[˅ j|o_%bpz3 Ê`ltUmAddru}<>N_^w3mx,xs_Χ*I-9sm/>?Xt ?Ih}V_`зKdoAkёVtVtO{_|R~G=Q7TS?xNq>0a L8U *Z-r5瘣_$,ӝo>VI_gcvV9odbj 9>Ιy\`} ? Z|~:Ut/]r~q{oQ?FGK:|~jo_C竧|zߘJLJ *Zy5ϱnfS]K4֏k-]gGz?/rmb] X`2YOB4󺍟j'IBQ̣5{2׽>{]}ʾ)~Jgyjo, *:ᖄaIg2t!'rC;q_>*뫆zШߋ:z3nkMwPoB}go~E+1rܙU;Q߾IZY|C}S|3 ~z.smbg߻N=kiSIС_1}$_~UHCv#wPGU?U-:Ңc5o1|Q}|~wz_q p㛬` B9*:J梃F|'bmys =jjD[-CpXhgl6::{m,2m[ @8Gۆ5V} ?Jw/ ׼[@Go']wݥna2uoݭ3SRK/]r)>1PG?EN:żG+>LϬV,5ϣ-}}GUJV9nڴOø\̷v?=Wy`sxڸ~i\{wV}_Z l._dުoOo<ڹ } Cz@{3<8|V'!|߯N5O{ڽ_d $dkHN_xEkqFu ' Zr /H}M[B4]MQtp]VW5k^^~)_Wxe&/5QZ+i70N>iÆ<.s/](D_A]_Aoj,o2P_ïf :||މx&]VviW_}*5錛UŽlo+OCV#uw{zjoեyPb4țgvZCo<̍iVQ=m`;Gkh {X6|uU2<@TkϿS;qP{ּIyy۷i|qvpgS:c Bm bv$uI'rKOIe_Syp\%o;ޯ֢#hF~~{^~[J\s`5`nׂ.rnNǝbϙ %4=d^+gC0_G0_5'ݧqYoc{oQ?FGK:|~j+/UO}A=ғ|nr1am߼Nl`0iy1rMfg;X廥wW°yU \r8Aɯ!/%_[GdXyLͼnM~W~pmL/zgW\?~vt֍TIXF^u/e^q^kkWoǺ'gz* Mg}ZnNgk277>t`1BQ\SA=#N;C0g[mn{$sMK?}'@^WU?gz_s'H@暼}GBXy@~?u?~7zύR ;.T]&/OcD5J:U-ꮸ: *`5y^ FȬ[~U}TQ0?Lntu-(hI򜕐`q|!\ZpVyJtG<]ٛ^\J~GaE;/Qw]rwk:<\nзo%QOUXM[/jT_^ :{%bVͺYo^7\rzмrX ᚎ[ތzcj&, Nw2fMv'M?!\5ȳix ߑ>u#|9`} ??~*s5z#ף%t>g5yV|w/>Iр}c_nd|.nƋ;BUunv{Æp7^;}}0LL;!wTCvSf ~==S ,hzy y:묄xʾZa_L5O8Suͻ?i?Cpl%~hJ>P -Ň޷q]KQW|_TOݘiF!!aB%@} ƚ)0iWY=g{;߯3u`~e睩7s1߹$o>?d5К|1ZWz]VG_r#\^_Q[ouk/9<i*ɠkyWNo׼5El$o;ޯ֢#hF~~^ŸTOϼ8k?S4bVRvk̃.5Oy=S}-8|q8:3iE]C0_t_O7~m\oYz~Uk|*ǦI5r=^9CV#'h~˙e9y~U#'!yƛ{TXbt¥>=2k|/pBp̕Qz|BsX9 }7[?+ByjPWgEok ]mz^#sqf臬Fo.& }ۍv^B)UTHtFqrI3  }ǻU.iC0JW[_ڝ+9ꟋF+(7A>sܩ~^2td:F㥗.טO\hzI'Yb#5u{d+P_AP`۸s\K΄` sp !H϶5bP-%Q/KI0n%tHj:b~~Qx'N5$h!8gVRӽtɥʼnפֿEcSM/!DН~mI ]bרK%,׫;kuUMX S_oL; tQ7T7Q̣Ng5rGf-U?t X5N/Y\*$o;K(iQ߱_ը>NНkU~nQxK.5(২2W7r=^I}V;5bP-s5yƉjz4F҅uQ[^ָ{y]n~ݩX3wQ̏c~2nm(d{\Q7y|hMO~ݙ~Fm}/F1,%o;ޯ֢#hF;燬〟Y5JO%': UMjz4s燬FO@w&kIf^T$IH7t5y^f/]f>^|g׵W7c%N} A;2~O4_ҥgVGPeF1K:R|b>T 35b(;IB?d5rFx;/׏~ZtE}j:b~VJ x B!B!Bh꾆[%!8^R|^c>~*s5z#ף%t>g5yd $TK\bޫqQs.zur{/E%N} ƚa|c/?K}:z#ǎnJ6W1DL[[?:{y=;Wԟ燬FZU?K_UR)c|WJBCFx^BE{P^_T{EGZ'V[R=@w'A;uбz9]?j:@+/N4R_ڲe:-jcSO=M/h~mMݼb=APT:1hzIY\ ?Lͼ呜𮋎wuu.uC&SE}mQ'IBQ'S7\}..|N;4vZu 'Tqf5{2׽>{p}SBy}Qi5XMG[o5JO~龆-?3NTiwPOԳ~']wݥN>do~&@hjIY\ ?LPͼCwł~gnPNzEzW֍7z$45F^uxYFz]S}ʾ)~+@wk|z-_oʻ~A=zŧc~^}BMkmnY y+c96yڧ69Vwg{û.:_DiO{N;4ve]VF&{y]B(/֢#hF/+ꟾ6zCoh_PG*_ҕ[7^"3^Am?2+>+ī~vwd`+} n'K5$h薯r~T7\Lpeu ?ug0~Us¯7_)W~}F[|輢~9m=^Czf69j}{ӟ3Z[/\t(=ZS߾H=C竧xCPOX_Lx؁6)NA]Oٸ *]Րw<jejuW?嫺;O)Rv+a=jdcaL:$j9_nYIg5yGwuw*Ƶۼsxt^xYFz]S}ʾ)~?K=MKޱ=yWﱜߦM'/0j_OU35O4_#'~(^eF1K:R|}T}S ï!`K q9 l_JokQbICV#ׯ Ipn䎷Jy{EZw-o5Oj%xT;} nesnƊ}=jjD[-CpXhgl6::{m,2m[ /tUgVK\k̻3> )bt;ta}_HP'̬{&(B@/' jg,5;N;ڻbJ`gz~[5+_dުV;Y`pa(@sF d $TK\bޫqMQUR|.}++׵/ǗWez*,b; t'2mP9^j] `+k5*5w{hF1?tMד-|r5r=^ 7t5К|m}o+f*X"yPwmP8m`;Gkh {X6|u]wGw˚9*)95unN1R~Fm}/燬F_ зKhoj|H@5mmTtrqXB |톼8L}ǝbϙ !4=פu 9g;,W{lu; {yW>Fמ'6>E׶JCq<&_c2ϧuv; w(߫7F`f4~)Ѵ+ |jF^u/Ae|lZk{Rbps%*FGK:|~jV=sϴ٣QV[^k?&;=1V$'HOuKY^jF^u/Ae|lZk{V5j`f~i㾽x\.旬ު2(Q{I'\>Ө7u~??f_|/燬F_зo%JoEZw-o5'EM.&̃c1k v{ksyN}~NCP9\?;s0Ctkq:^T+꡷V?_?[IydhVK\k̻3> )btҥ>="_*~n$ t5u? .ٿ ]z9O('!|Q -Ň޷q]n|}|)*R $1-tn)iw n0 ۊnGvkfD| Jx]tw^;QqbtMtMoP7d~AJuZFGK:|j]ϭ~K-k+>  :NH϶`F~uҋDkd3$LV7ܰKp.umT7nTzz ^?N;=iO\O>9/]xE=%cuwM$Ab.!TeTH@5mmTtO7Y[' Ț?=W鮾ZPf=Swx u`~m/W?{vu߾@Oruu-qm뾽y$:ug@O7DC͒tgף$s>?d5yY4PIUn+;G]V,Ʒ@g'Qx>JU}9޹}*ǶFGK:|jt5j{%!Y\(*]gU/d|lu5.~)*@w~〟fj7ro*6鄛VGoUhzIgY\Qh 'ΤOBFm}'ICV_зo%JE-}u|Zt|b5omFq?&0)~:eS^([T9rM!KCV#g"NkRVޫqYbרKL_,{y]n7>6>JНr qQ;2y#4zWe:b~fuV.>Xb錋>=J]/T vͪ$`~YH?v#w|(\J'OUOíjtJ}q_jԿ.9{[՗Qrl+oz4F1@wz_oQ{%!\MQt5{ .^N򺆼[2/E%NoSLMF1?ֻe:Q)M/!Qg ~ݙtIhZI ]b~UJ^B$_WǧEZ'V6_;'Ikq*L~T.>Ƴ: Um utҥ!3t'y ?WuKYZ6nܨ6)|OxFTz.$8^B(/jSբcx/ǺRO}w@t{,hi : 8 ஫?oҁlp h=OW/x *:g~^*^veoP:m|5Cp  !3T}S ï!`K q9 l_J~$l/*ƪt*4zֳU ]~ķ'_奔]}I[aIgQ/tuẨz]~a?D]遟)Kƻ^v7!5/=l{f[uplײuojF7̶Tǫm>Vs2)z;Ѷ~k j7QqG>WC !ye:b~jL5wN4 䑙podY?3Am?E:tX89 Rqxڸ~i\{wV}7kޭcl4=vnlYߡ5O_y?~uy<#=S:bܹWowe:y\5KI\ߵPtV~~w*+gV`7e&{S۷~#_w텺h X_ߨ՘o2SvMY}gGϿQ]}bk57OT'x!oЃhtM+K}V#{}`7nt;2scZw7p)`on7 7BV a+w;'s+߯b;5oҵxo`ouqvpgS:c BI^O¶& l|T_QӿQl 3< tE5 JZ_lu׵W7/E]kyzL8,!-r/{q8taj7yv=\Jh~3՛sHvw=<-^~{ϟcM |XNwЂ3OsW}2~O4w:/T㏫_jў5y :?U'rCW(ъK3I qXzMn_0&7aZojOJxX߄|c' v;ՎbE_ jW5tsq 'oJ~kk>h{+IjT_pgg6=^﨟hm]OٚTXj:XW|%3 Mg}ZnNgk277 ?8߶z_Oge_{[X`p3pmyWP|dw)r`৏5,_k \9HH~+ mq lQ}խ3!;JR~IgY<~~jϬ0c.׵fzi?X%dH=GAϳﰅ^}kߋz  E97 ¥gyDG<ْxQ?GY~(Ek׮U]!a(tp]z{y]f /`ػln ܨ+DgM74 y9N7-LXjA]w2fMv'M?!\5ȳix ߑ>u#|9`Qg:b>P}]W)~(E 錋!33>TW|w/i`7FvƾoyS/Ty&7ݹx8hc|Mر{'ggz y*پЌCowO!9K9o}wCއ:+!^5zЏ uҵ஫X! M`,!UPtV~~Eԍ y!!aB%@7ew]ÿ{XFԫFmΤ?L`x7k 5҅%-'Շ◢o_?)Wgy|V*Pγsry)gϢY>G8mȣk ??vߨ.?CL4_S.DPeFoܥ;E9xN># ?>Q{Zh~˙e9y~U#tI6m}#ݝ'uHc% o$Y\*%a7oה?d'FtͥƼUjh8I JH t8gwY8W(VUgIV`X!x9rܜ-ߕmټVa5+C@"y $TK\bޫqYbMQtp]z{y]n!*R $Ht`TKnh\* 4!s\H-/{Ε~vEuՎ Gz_r qQ47rL[/YUe,'W#ףe:\?d5r}}Ƈ*R ph( r|(pm9.%gB0sɁ_A98scxg HP۬Q" }~jR .֢ck5o1?ը'_j!WSי&HMB/ 0ޭihk:XA]5,? |!9s=bqX.kY|QvM[%XICRWtɥ([T9\e;~xh߿Lg\Ϭʾ)>X\s3"ΤOByF1I>W$8K(_TXtr~9AMZV `D?ըטQ\hzIY<;k$Zj^~jz4FҥuQ[^ָ{y]n!*@wkf~^-旬^^O7jz4L뇬F[5C?36jHBáQ/KI0t^B'{{ZO-;U?d̪Q^R`u-'hzIgY\;kI|$!Q̣5{B׽zu=>{]}ʾ)~)*@w;kd{#׏KR((Q{ι#Ij^b$KCU- }ۍv^B)UTXtr~9AMZSzõ;]={+ZIco|> lqj:^zKy: )\t(~;̻䦑}?uYNJ2 dYVjFGk\K-Ň޷q]n|}|R'x!B!B!Pu2IENDB`onedrive-2.5.10/docs/images/online_shared_file_link.png000066400000000000000000001016511513710110600231420ustar00rootroot00000000000000PNG  IHDR-HۅsRGBgAMA a pHYsod>IDATx^ y^۬miIkH1J vu/Zi,`"e 6ɪmFJqubpjeT6^@FŠg癙3Ws>yޕ| ^s.9ғ!({ኹOr/zʳ̕+%L֓,Zծ~x.ubE:ubEƧ'*1hY+Tf袺Gu_$E:/V~H܈ %#b^\U;y$uN]6yF e{{E.uQ(l͗tQ(l#JE:'6̏TdyCo[oI8V88nCx܏#W= ?׋#-j${mUCvQU{,]3j-۸(QQ@S%w"Q}ɂ}Hg4{% \AYT|]^QXAtΨ%U .j޾%/fz>4 洴#⬇rCGUuQzZ1{=TP^Fc<7ވloOȥ. emr.ekܧtFeO\|O|]xլ]]e]gqW=^},Esv{Vz;U=1jܧBlJJ6JO2(XU]Hg=r.՗ r.I|PFSՑLx=kͺ(T7#$*;Bylp;1ɉg9ronWʱezv*y)}bE::keUro+)nmE 7_E:lc͗y2K.Y׳]=ko[/w{S%v( UG஋R';k_:^w/y^x+W=|}#-WKr. elcJNmܧBy.#畵ΡX%wIz-kۃ/wPFa%bE:,]hvEvQ۬#4d}?epQ݌GeCpQ(/r#-snGrCG5"O}Urm.eyeM] R;kOǍ.rcȕr 55YC岍7_E:/x ԣw~Q6z.;UXI}U~˥;퉎<;'в|U;''\v^S=ƴR=RuumL=;Y{z!t|EW9:-;-,oPa\-}HgCvQ܋ћt΍̕X.]W9}KJ<[U'AZ^.CӕċO2j$gPF#좶!45}?/B-ίfP9-8:WxD]8. C#鼀*yq[Hgm"QXַtFeOTvQ(wru]_?.ωWHIz}ٳPǗūnΉ9YmsZ"6ErQ(WRz,]3(Xu.]3 Hv(,9؇rSmDZ@؋ϾϜ4Y6-FȧEN,?hכN}'i)Ւ{׹E:/l#JGoP'[R2*6|K²5_E˞4wvz]$˳g,/{޶ܓpWIS<=Tzq^v>E/Gzힷ|)ųl֞zsih55iZOmZS\s*y.j6dotFe?ܥtFa/w"QXr>;tQ(ST evQیА-y\T7QY(]H#J;qZ.w1Y'#->sWg~{(S:'Zs]wnn$rin2~dNK%O$u.uQz_Y+T6*,sT궱s٩'rúHT.YnOdԽQ]>A哬_a=9iϖS)kTG.>#dz=Qݻz=Ώsa|̽<+} i}5]g],ϙkҦe2-o9O~|ļɮ+2Sǵk|LS25ww7d^̓;?9n.ki~9Ys֯e9({QU}()CqY{>s*rnBܯ&.ɶS-kmLtQ(JNy.-B!REpQ(*ttQ(Z9-zbniԿ7' C{_6׽EߎojTyiyf/fO_|u}\󫯏~үy>A;ټWֹ\7_kT_ǷWtQ(/lIGoP'k. eTmUm\ʨ(X.]ʨ쉈/wP^'[_?-ωe,:I=TLJmǻ\pn/Cj[o'FZFt{F>(M˨)xtqbn9.eǮ'^2ene8e2ͶKz7ey uR=>QFmdѲevuE:u1wPF한4s. e4<%MyH.jB+5-f4U=BoԹ#d=29"?\YX2Y~, eTm˫#et]Q6ܺU.Dn?Yyg_=QqSzGuXOyzr%{}FuȐ5z#uZQvԓfՠs{*ԇ}NσkʎAA9oY/;ٌ\U#-,ddWeyٜ?~|9}3Oo^/;ݮesv{Vz}lNVZun&;7e,l㨋]3jImyE>좶!D]_$Eu3E:[HܜlGrU򺭹7^dΌ/Z{Hn^U杻mLv;->V>9-+)ќ+rٺ(=*y.;QU}({Qh$+wvNE_1u[sI.Zծn?ܥBùK+9->]hxJϢ^v~]N=uy?#-WK,]GS%Eus'6JOr#%s)?kgvNE_mȗuQ0l@ղb]$uw+9؆s.Wr[}(G!nF!4폇ࢺOU'pu"#C뢪ybz^E*ynBޞ,+(QA]Hgm"QXDJE:w/Lu닗'9Y(˺Փpݎ#'kux|ArN1'*"f9jIE@qT%EmWцX)PF%# 6|Be?ܥtFa/wPF?)-}(\TCrQ(#вO\T7|n.ҹoe=|Ni.wnZ1I.޲V^1Y%RvVY(nr.ekUߓCu,rn\Y=T×tD7=9 >ȋrѬ˙َ#%]'k>|z=_HՊO6fCvQ(whYHHDWWs;/wIzE˖Bl3ȗtΨ`]Hg^Ij1PFWrtQ݌Bh>jBOU'pQ(#Zx<"B^\Uf%u (x"̣77Oqn\PFƛ/w"QXַtFa* j())K޶^Ie8UG^Eo]3pB!Euࢺ Gewp}+i)sWv] RUBdGoJǚEƛ/w"OG<E2m\vꉫ\.$˥;íKzGuVOyzrR-ekPGUQh=[fGNTV:u \E|źsp_XA&Qݻz5s.di!({Q1y,]s%%s%KvN*KNܭ'NmUu{]ʕ\O+9 ->]h:e. eB˩ǃ!Hg4?U=E:kG6{}UgѼs.rg񼹅Ǫ'.doܥtFEF/=;n]簴s,G7w{ѷ'wIi1#%E/fN.g;ZlYm<ԫ3y1?ϫΏvHՒܧB#۸좶RE܋B#u}^s*r}ۚ[OvѢevu.]3*\}O+9,>]hJ.zy. eBTa. e4;U=E:ku>e(/%/7UGfec\U}~ysZj>] dIU]6{mr.m r.%*BeUr22thJ.jy. eBݨW\h~*;?tnlNeKRsTvlPW+>]Թ6*;plBղ򲌊S_E:JN"O2^UGEBuɳpQ݌S.\dNx]mp]A^-ɱrC6yF e{{E.uQ(l͗tΨ(x.]3 ˞r.ҹ'ex62 zCYƇEaHnGguqϼEO|q|v.bn/b*և1jIE:7mUCvQUU}(GȪ"_nPFIǗtΨ({tΨ'OWrQtQ(#ZKf4;_E:i(wNHO>e} 4iY24,84e2%i=aiKhCgsZ?Ж✖:َ%-$@s&sZj*dw{!HKpb8tAqNs\ڿFZN4-+&sZsTN>i ]ɜ4-+sZ#(Y;sZ@4iɜ:Mˌ#o5.Yo֯W_?e0e  ۸d#K5gmNn$yFS6Ra9ɩӴ7-gָ<`}YdsŧWeniZsm 0OdۍcYv_wrRh#qd·MϞ׶>rW.j>P |0cF]ݻ)DҜ^>?grS=l>7Yu6sԺ³}o3d]9껒]-lNhsϮ6'9oN(=iZ eMӸtNO=Ϛi6<eG6Wֻl.n.>dsΊgGGW玚ݛωftZK3#ݮҦegw{9''_{itHodG_;{tͻuMKs~"v ;m̦sM˶!7G\k{e漵盭+z 沟lmY7Qن9[v씲eOzIbio+CmZ>k.8Ki:u9c ;.3kϺ\1QS@'7AtJMi I\yۦ9\vfך~(ɔn宏0&#-a9-7-Y 꽟1!ݴ\5oœS~|sN;7_l^iG-5G\e߼s^reg'_{ٗO'iXn?ذ|n\~|ҍ{6hK?#_m߲ά=@Z(8lW{s[֩4߼>PHoX Mў0%zmy1sM;1߽s8żuvG^é2UQsq.c'ė?rIt~,:b+}KGORmW߿vfmW['W^pSfvxi n_&mn2'1@x$Ss`NsEt%r¤ѳgٔN5`vOIU\;:/&퇲"#nO2J?ueGtζo ɇ~15am T6(ޏ L,-mڱ՜e; V M9-SѴiy yyts\$$c媭ffuf%G>K$}o7Wۯu9ңםϒS9Q03;='΃qmҞ ?nvlH~OGqR *۸-!' rQQ>~g{6[#8z>=Kڴ5|˖tI^|GBľ.~v},ꧯwh\͛S@t.wAv7D%:_;f]Wfy=<}É={怳]$M˓?>w\k֥JѶ۴EѾ1w{7޻xx[w'`3[m{[m:qtyol5w?|wh;9jEmuW}וvgq?x|M^;u9jswr9-;eQ4W؋x~rp(=ȍH$3[N0/ɯ/O#GғiiɖWmRҰXժlxX?QdÒ{Qe?͝}w}^~kLP }l]ϙ?1Gz}T|ȚҰlH.sZ޽󶟌C< hnͫQ6mFi7ܶ_N~=ivpc}%0lKGn6Wvڢwy~2:NFJ2~ w.C{~}[yQ]o9bzL9yrK5oG_W_:%~sZv5-6Jȷws/;Ϝ0H`Pvx}䛖MIKhX,U|i?#N:8>L~fs)٬ի<_EfѰlH\"!~x$KzuQQuI5m!]_MxNO -l_7\ṃuWfsfjaIh,{湼۴tq%}g['n"mEk21FooBimC¤!:&@`<;24?Ӵi-Zv%v0 گ 'e:o7+K\z 4-->,b;4C΋}ɧFT'j)#OK>>sN~sus+վ`<_ ?t2ږtд{DUy1Ke=Wun[H.ϹiN (6~~?HD9sI [JY?ϟ+ږgiY\RitGzFoG :XzxϷNF+}L߲& 7-ۘ3b;n(y0\#-,q‚5--'CIwoN潹fu2MӦeTGto1h*t״EO8J=q0]!#Q̾~Yצttwf[wWx>1#ݮF1֝}9Yv)9Q׹mhtmKo+ڶ4lx %m@k䅦̇J}Ƥߞ̍<ݷm2[=_EsonL9cMܜ4CM˺ZMC;}o3Wq*7=ts#`;弫Ԝ*;mm精dsߖ&| fw_K?h_9X< sZ6q6-#4Ns/n2;wLt6Դ'_njkbu; MK_'盭ٷ_\Nn_srEf;7K7D'ǹǨ\7~+ӓv6&6W K s}է+_?7W|Wy]&9{?;;5}9or K;1PӲV2"ޞQ`ޓnS欇"S8"ݵ\vvM?KG0\nm|ۧ|`ki ]0(Ԝzj%tE2ҲiZ@Wl4-+R{6eԹiZ@W0% <|0B!B!B2òNf%tE~NˆNbŎ-%tE9-ee*jNrL"?d2i ]1i雫Ӵh6MK 55eL"?eCi ]bGK Nڜ2$ӴPsZei b27WeUc}}{z/QmNK-ijM˧?RoL>=`jN#j.,|NlZz{Jc+ؾ_=Y*=ٹsg%ٳ' l13_)o9+̱GH?Y*]tYYYTk֬1֭ .07nu #֬6>Ʀo_ˤ^&*swc嗽2eiD~y^giZK%p/6|.Fд+4-1}=NӁLw={dѲcs={w&IQ>vN5gM)'aNˆ"/?cS;SW<3-W3kn'ޞϛm6M*̾vfdm_. DבǗ^mG2[p_賯7z]E>du'8?cMNjG_:Uږ #?״-\e_J'_r/dcܯ;#S΅ʨ|49gP/pr_:K_rAr8Or(bҰPw?{tr_HM}HqFs0[n'4-d-_b6~rotP-٦ٮ,;.Ƅi/^׳mso{ٲe8Sߖcx=v>iOX~ijMD_NL~7,r{/oQےerOzzHLh`7*sMBCN7>ݝN_<6PhI30yYs0}6sϛ?yP?Q4,ǮJrr9B"=w/ғy@.F.h~{]@8f'!}]Rv^P%}>ѽvy&c 9^״<дFӴT?(dt%y{Y)M6Gt{aۤ asύZl[7:ۡ{l^-v؆פϡ1Tngx[v?M=k`QsZY>ʦbݿ0]-ʵ/2׾|̃Dϝi~DN2ۻojEFNpZ!nyK~nbx_Zu|Ë/Kz^k)m_ {R_P?;ŅH/& uq^PLMB3>sј*LJ#"կ~Dnݫ)/~9U̚5k!FѴ#)kX|Uiv9uO4;w,hϞ=bcc OCR--p= -6m6˽9ێg>ɺX֓-M=.߆׷:rޙzv){T\e~~ >lm0sjk_o=|0J{soZfM7 7r-6u3,mqðn?2~,yms>twPp(HINE}rW{}- 汏m\s&tg*5^"QeWb^sz:6?7n]L?i>Efo<|*g FZOi(n3f;gj %]1Yq6<=U^޴f׍Wc|ķl uM},?9-e$Όpfs4|ji/K߾svgֿ|ũA2"n]W69EXcוҴ55qx'?Zv&H #(^Hҋ{1턾ߦe(q_ko ~P|ЯI~P;ϩ֟Y_pyewqW\zmBSxP_ݠHޟeo;*,0\?<o>w0^kP >bx`/>  ~D_P$gxa\E\O/Xy3z7nQϩ^z /<3%7=׾¼6o9ms_7|3_:RC5"{pܰC4-Z@Ӳ\gyf4| iл.yXx;?WcӴ2rF|Ҝ?]3MKд\1{w4?$;<#o>=馛Cȏiෟ2glSoKhZaLM˺#'N;>_~yڹs9tP皗4-ɜ2r2}NӲ9n#mcSiJGi Pۄ͸ FZY&BlO<ќuYom9Uɭޚ.Üs(ʌ`NK"wDei ]Ӳ}NӴ`NKԹiZ@W<œ0Si)di "0e5i ]HKi "?RY}M?6 DpN*s\ig_mRه7' ={;wolܸ1֥^j֭[Ӛ5kJevi^pǶei)Q6-=izwc9#Kࡇ/ۈ K㎸ix3߅`W=hI߾}+sR͛sܦnrVӾ̱Gi_n&\tE ;^%O1PPUTu}8o=hJaN&>Ʀ{9 g 5-6̼ ͛l(B4-e׍ym/-NwiįU60@wдӴ|ؐ7l/{Pqpzt{|ٰ~KD󑖢(rW:S5n'۰ :.i /bmڅԴ,4>4g>f/{alsmͥ~gٲm$tQX6Ӳ!`jBM2y.2ʦ}[#4-g:&e~t[MK(mIID~QYGٴ23oBM2I__'#|_Ŕe+m hs&Db|_ y9ceI=w31ؔޞn+q.v{:cgcEaNP(_~S,z߹ hZNH{vwT\w\8/z4&9m}u}#_:A7U;??]z 8Ef͋O1\ iul41FǡyhiA_?(羹$cHq.kAx܈Hܶm'7f㦹]>>HHlZ>/Ҍ CkZ$g46ַ_齏Ow\8":Vٿtn5ӭޚŚH^lyK.[}<6-/vqgmBw}ݯ:S ˺=#-_v?>>{)kN0?ez}G)?QMʈ'~4-䎃wlqcº.@0eCsv^Mx__ܺw?0eG sI/}i2 3r=H5(}Z0? Ŕ{'J/fL.5-ƀ|~} JiV/Ǩ79+_J:}jMKLڴ,kDɇFGaǀE8P6Svl_^ 9n =zlZ~霙 UFZ?fN8}9۰'LWwqG~vdkMl!`V^&$47-&{}>>%3A;~^Q3xZsʋטTMK5J/}Lg4hZN?ʦݯMr|=^Pدj `_M/rrj}O2j"d/ Ǜ޴gCh+2+47tw=e;6~`>*Դ GKce00lBqY2rˍrVrܜҴmC9-<ʦHb>>s4-}K :*%@3^9_wL]%[;sFbr1/o/\I}Kt=fNH./82 ]Brj_xXo"}H؇MgeHMK `HoZʶi]ܸEmkqOӲ!TMiY&i 0V|0hZ[[rET\yC.ESN/N;4Pe_32ғ<ʑ^`=){n MKXDFٴo #:p4mRGѴ2ۆ`4-`HԘRṬlZ~DzϹ)4-`~!d}S.bu܋1#z|[ϥsE54i< aeWдFѴ}M=?Y?x!3 w}U6R94-#zSFCD5)#ru\ZT춐;3߱]{^ }RgFٴ"nf/)"N^`y/\p5jZ&d @|e4864-Q7-2ajӲ%jU}R?r`Bq[˲ƢNۡ}{6ܺ60Ҳ!\G2={ҟҋ@DteDp/G7~&nN;4o/{yk^/:D`~Qw?5믽м,d_,=jſ_HQ hд`[aAoyMI\7qPmÅmc̑sZ:>ʦݯEOԛsa_7_7/=o{/2YX./֦_x[ 9iG5MoZFϳ| ShBі'.:O677?xw>/y9K/oN?5>c 5-jfQrҦeXY džP\rc74-et!e9fp&vZWOXXdѴX.^9_wL]%[;sFbr1/o/\I}Kt=fNH./82 m+ؚ}H؇MgeHMK `HoZʶi]ܸEmkqOsZzd i%x1GfMj|MKsZyMϽjbGG`,i9_Ѵ.h>(ʣlZ+%4-z"n+0KhZW4- 9v3vMKXfhZq[.k5z8e(GbNKcMXkv͏<>k7дe6ͤfygyر5\cqfΝٳ' FZbnYt뭷? n)>v oz'x7$YЀ?i 8GzKpFZFTziZ@WTR4-+EqNK#1% FZ>vQiZ@W0EqNH9,i)*QYi ]Q}NK'Ӵ`Nˊ>|!B!B!4ybNKAQ}NK(Ӵ`% xehJYጴ,ӴٲJTRs$P_ VdsZ8I$i9E9И0Lih0Lie{l7􉏯mW̿  UÄW̑#ZHq[VzѴDE xehʲ,N2mbQiZ3RT6R׳L2Sۦu۰6.Y1_}qI0Nz!sX7tٸqc6ogϞg/Ϲi&o{I`2ML]4-qoש$O㒦%* `yF4%fܥ^j֭[g֬YcVVVZ㏏ .46Iismk o_t'z_g_z ^0y/|/RSXmz>oK<_T?ݹb>+hI<\tE& FVڵ"?p[:6E˷/gMk]|A(=a,0֯7[KT7;677l<]6>߾qW64--۴\y-w-DdJޟnjvD(-Tۃ-E|`vbGK欔\clZ4KΚVetZe nZ0Eۖ M5A4--۴\іX _ {s?K@8pFZ16-}M*۸i_i9]4-fZv/ M:7'9[Zv9;'nvi;n߁y{̅^묳2yk[sI'?ջ:WheEk"2l31nQDk1U?cKz{{-;fqGoyr#טi&W/? 뒚ﱴj>6R5ܦeS+ו7su&ulvYW$/=oݼ;?oإ*M˨{N|O |H/y|a.k x/?sMk۵=%F~m_!םuYJ_&g RMxYMtl{=#k;7Ӓn{ڶ}d;HH+oK}9.EcoZ{+ۊ7WwX1I]+,q9gnm"`4ܬ~ne}J[4g~׊9sJFZW'e{,!H>-_c`+iy}1s`ѹ~ץ֍yB~_S}m#(E麅Pu0V&bM4":\lE"^ۋhG7]&\_,.:# Dbs+^?Dc4-G4-->~K_S[=g~_&kTw@?d>|Ǐ2}-˛qέsZFyM >b^1}|G+Vh?~~]ci?imPlm6!MmZzG VlvԑG@Jl4-a<4 "-Gzqw_Nm]e ܥ FDiחA}ݟwQk.&׫я]&qsx;hZ.hZZǮ͠B3*^)uu{tھ÷7-m÷-HmC?Ů9FZ6ۈ<b~v\V%i\>dRs-۸œSi_:nm CoQ>mv~PQ˭٦'Uϥoen9-\3}L[iZ(J|)۔ x}xu=3Xf̿ZsZǿYñп$EKn)k{)kN05uPr/mt뭷kKouߎ\c)הGSLolev?&Wu2ܘ*wlz{dŎ Y)޴z䯮Xt.ys+斛Ẇ~/[LΑ:MKqge"JuulϽai% TnxLו=GSGZLIM5y\-U&{MkߓkM֢e4-avQ?6D bð"Q?^9\9L{R+\0f܅Yuݿ=H!\5G=GJGIvs=78o馸avϝfNKV\py_7^r2/kwsJ( _jhQmZH"L;}B>W8Qj*0q9-d~[nV̚wP_o@C≦eߤsFQe!i9Ees\ش#+Gߜ.\1ﻵ8e?xżʤq)hZq MMK #-;VݿkDhҰ^hhZ.hZ@].d6-9eÊHiZ"≦%ԅMo36/3[F!<]7-ݿ7!~:K U+vdhJeN2M7#G5F>bvn8ܦi)<;w6 o馸Vz(}3L^146iZ@]e/~1mYU7x<\u캾B-q66l3m^y啓F,dԩ[oM:ji)#͵c{5WZ1GB-i~7}e@VO=b>(Jonysic 9.E8h!! .|Y]]MƃфPWQ>Hen<!B!B!T>v TuCrQܧtFA6.y:\۸H1PIǬ%K(]݊tSE,jZL>˩{սEsl5r^Eurђիc9uwhe珡*uQ.Gϡɺ,E܉_7Pnf6|[U&.ɶ U-k*./cm6r]ʨ[KtF*"WǷr^Tye/;«zxM@xP*eW}Hg)Y&x.}̲'_n"(ېE:Q`ڵtbnPn]U6ҤKEoHg#xӜwQuǗozu=sv{Ym!t"Ǭ.%ØrbWuB*36,onfQ(@Qm\eudnP]qY{^1]18Vz_ҫ|BڽT1Oe-~-m\3ݻHgT_ACrQܵBE:*_"Ǭs.yT~~/?dmϷ9-T7Ems#EToE:Ezb_Y{^휌mS*-kMf/qcmFu"({lPbn"(|*. 1*4"tF2⪘6|EuagJB6.y*;t"Ǭ.\HKQjIm֞E,PEͣ %E:PQm\dsUr<Ɯ/Wd`iQPmΗ'r{]zx.ZobFFvBRȞ6. eTmU}(Q< UE:/ʏ^voE:w}ezOCu:ٜ!@$EmW7wPFAƓ/qcm@Um|̲,_,{06.yJNjtbn"Ǩ'ݸMn3닓7'#K*Ǘ٫EU닚*;>t"Ǥ.\eׇ1Ւܧܒ:WvQY+T:nLv{USܮ[+y]g_̽%'rźHivda.S\/9mέKzź1.|H u{w뒽^.$GRhuGTڭKzźHO-a]FDĊ WdD^zGRQ/EurIݩ{]fQ|``wivf}2ߥY%zJ(-E:M3rQ_Ez>׿^_9g.e*;>u"$}~:"]HKQZ1{=T/q (xц֚ReuE:QQm\ew]He[};{;qڧEY=16n?}q{^=۾+=lOG岍*O2Z,E:LzڏqγW_d9oɲ(_{xlNKQMAxP*eW}Hg)Y&x6.y]eVm]c=xruǭ'*{}Uɉ9=wG.y*;?j"ǦaiZ;Hn^UZz{FeܙG7p{ZY#mr<\dnP=ӢdzF/wvX6|':EUd{"f9ecxйKsE:lǗgPFU9 錪lօt9t"ǧRg,ҹv9-Cy.;QK>]s/>X+kիї۸mJYvѢeuیE:Am\eE:QIL1qcT'm\U6tF2tm*/ONrXYm_?p(SUE:YeW]HEW Ւ{۬=dyYl㱋ܛGJ(ۓ5rtFqΗ۸H16|KlΗy2BP/e#)EnuNDkJl]TONNݑms&ˊ [e#wt6}>]3ZlE:Le.\<@MH=T6q}~: y Sy.+)E *Y]eYE:Q`ڵtn]w"Ǩ&.Zn.J%k3OFNsn5x~_"i}9/}|(Ozqftpc=_:2ΥsT}eP1Enц5޷V-y߅S걜WQݻ\u}~Wק?=5\T7w}HJJZ,їx~]T>|$&T|L%_,{P.}̒OHun"ǨO۸H1ldI2%#Bi٦oHt`zCϙ'P=*{v",}| H1| rFZՊzt^c<36 ov֚ReuE:Qq׵tlΗ۸Hegۨ%k^O>,1=16n?}1zrms"ElorYgP[F8BGIE:qlE:Le.\s{].;?r3IveٜT%EuW/RE:BrMƓ/qcmDu" ۠6.yO_n"Ǡ$۸H1(96.y #LHe/}E>1U5k^$'#~꿿EŜݞG U <&u"]ÞӲKMrI]B&36,oH66>fF/WdnP=ӢdzF/q;bЗQ׵':EUd{"xW9ecS6;fQȨ,w"g/-խ>O12qYr9=ĬVe.\󘥏OX<&yX1RTZcou,/m<63hC e{{|J"G(ۘeuܥYQܓz(I)Z=T/w۸Nȗ۸ԹJֻIt1g#g{;˙t} i"ms.[eG.e*vU/dݝio[_1?eB+v_XIENDB`onedrive-2.5.10/docs/images/personal-files-on-demand.png000066400000000000000000000424061513710110600231010ustar00rootroot00000000000000PNG  IHDR܈sRGBgAMA a pHYsttfxDIDATx^ݫOv{fDB"bH0߅٘z1`҄F a`8h@MH4d53І8'7?k˪UUye]{>gZ֪zOgǾBhh4m|h4ڔ h)MhS6FѦl7FMِoF!46eCi4mʆ|h4ڔ h)=c?K ;i??rChk)'ƛm~}0Fb sj C!s=G~{?jҶ͗>o]_g0IMpv s8{\g﯆[[Dт@o+C+mwgo;E?Ħ%)o|Kh[,3@=n.?Gi3jLOCQ۴:Oh^[8^~mֶ,"Ð8{ |&r=h:v|ȯ~oǨ?ڟԿ?_H t*1b!&~y?m|gk9E^CeR/iQ"3QQeK-̐:w"vܦmv^?'~~p*x+1ȐjShQ"oV9f*e d,xZ~5$yjQX+ZԱ_[災E"%,4F;zKm%;/Ǐ?o?'Z sEUbZ2F-+TKMUci仮fov]rEfLDюގ#?g~O۶[C*:jl e+FNLz݂YR6N!=)̗oMȷ+h㶤]m/O>'ۿwc+?{!l| i;6+cփw着K/G/uk]LD4툭(v?ʟ~o~?!+5_˷/ KRzp$q K[Ck vBw!D4X{+.o_ΟݵcmW'Ft v}NhTINfQ`ᛣ-6ʷ6M XЈi%O/ib;\Vq'hGi+2}?IC_4zݡ|n!`eIz-x2`2hb;4s9uv]Fh[;Iӿnhci4v h)MhS6FѦl7FMِoF!46eCi4mʆ|h4ڔ h)MhS6FѦl7FMٲ|L 0%7 S|L 0%7 S&߿>-Η-ф p |@"?p}Ny=Yt>S[g[ {|S^t-t3ݭ@)/rg|:V^[o7 vzn?&SS^t-t3ݭ|}U͚B-S'X?|r<-v>_<=h7ndgͽS Й!>vT)ƫWݦ_|_8}d'sa!w7Z =b"[TQfw^k?βWN}{*۵$ؚeJi^c U@b}G[LdK%J{Bz>pkk+|DJ ER.=8g-UqѮGVr]<ҙM\Ύ9 se*Kv2Kj x57+Vh4Y[?x& om`K!HlK vU);!&H?+M:ޑmil{-΢VVgREU4A> faIǽ#[湉G?_܇?z5o2ǧ(e\ʌ ˊSZ]$,P;:9jdJr«/:?%K͝fܬ,MC' 6鳰kHt#b9˳u,΁GFsQJڞ3|R648G6p}3cf'vVgs+:qǥƹ>px=;%>%t͎E͘zgM׎$^Zஆll鳰|NDl}dgq%pKUΪ"B&Vh;;Y"ŌN/\T0Y9\ChxTΆW NKTu2mm!+>[-~@;],Ӳg˄mxҖ jveoMhJ=YttLqdH9Lw+a/pE"Og[ {|S^t-t3ݭ@)/rg|:V^|Y=P`Jo)A`Jo)A`Jo)A=E&q|~K+ST$9|x/ihUEݣnyꃯ(FLU8չVnbo'ǖ$boL,S"+l -Vl#=2 Afdv1i˷.w:NX=ѡ68mNZUT%6ن; TEd.8Bb)C} I1| 0%7 S|L 0%7 S|L 0%7 S2|rOr2|gko8{o)Aa n7Ϯ=Q{P.Dé2ߌQ[{}?mV8za'Ŗw =J廖xऻ1,߬[&UNtdjx8 r#ؾGm1>j=;brWxD!|HY}=>vݛ}J'Sۊ3SLL ǮRYMT1&:b\ۜ:]3W3n*5O kJZр7o[F*K8׸ZAB!4)&4vP'OJ݌:Gvl^UU܆ {^}~^;S4-S+\۷=k{ i![` +j%1 t8PjeUsZ+R9e^ox͆bn,DJЉi/%Yd3 2E;SL$O:Ntdcj`IZkA)1Uk"Ӱ5#7Ŗ  k\|hv@NYA``-c6t*n@VvHZ!6:Y eՖSY]1 vps[XpSo@-)a᳎h-Od4% RcVt6qLU:8;[C)ڱL]߄[%&w%he~YDZZv^e`%H VFRV?$D)vlYR˂lJ5ڱ&pn9B i0oWŖ+vUSc#!!āV.N2GLpmu&YR!^dϒ+ձkX[Gd4+ŷ֍xg M1Čl2 xA K<#iD`9ENv ɮ#5,tr^@f[`Cl7-L+zjqe?W7Yq썫^d/2?7@"ɶO7[UKLujWIiDXwT1'ǎӽg޵2XaKxPOpO l*;ɱ:}LЭJt6xXls5Me;)e {acs7"JlBm.dRdd 19ˤجskgNd"єLs7E1)%7+"hND@aZUPox3^48_yO`Y,'ڍ*;Ѷ.^p%7Sr~}2N|[>#MOv,be3j:Ɏ9'lH)f.v__h\50XGkVUU;`We4tNmenl 0WZYR-j|M{Thqy:̟,5 5KkvX̌KMXdW7uKJQ?f&ӝ Lonn?ݻ ;loI6`7kTVrW u^2[VU/[hw*ǔZy4@ IE6,] J 6eXRaD -OêJ5.lZBSđ,;MmC]HqOL&www/^Pw;ɷl%oj6N; c /RFbvilH&E ]UUmrp?}HN-bu/a)@m f_ D(eHį`),,VG(Q*h`,/`Ip6!nRt &E#; KW|MۨݲmlPYjsl5Ey]&vX>s(؅nCc=B[8}ɽ)E6,e_7Ws9%e -[NKɵ8Yf> *ŹZ Vlp$:!UkjRN6aJC,6`>$_@#aO-Սw@|;p-&+NHҟ&Lb_YD\JtV}^i8)nfUՎ"Ůc"iWWT}Kg+L2ÿR3 K@ѹdݓ ݗ\jtbL[fS6#)52^<VkLw~B@P7o΀ {,.7)zV$g]6lU&ocf>>wWft%FU/'.Q{;̾I5NlLxkWHv!__&̉av.7R2[M%AzK5 HhSx vh":U+xN@Ǿ9Gde Ƀ@d؟|`V8$c&ދvI F|L 0%7 S|L 0%7 S|L 0%7 S2|43e& p S|>N0 OUu`Nj`x{v¾Sh$a|}UzpJq\ÐbYU-"VJj\ЉnSPZpX;Eꗹݲ%g_kMgIpe4Sei)V6mYVu5 K1TܫsKNnW+?޽K݁^.6[3[;nh+CY)2 ^eL/^`dƔZy4@ 1Zp\ٰv1+54۔aIa0;ECq+4춼:lHpa XPl&rk@im|^Q3 ͤC ]IL^x jwocK|jwob)zj:,k^ Ɩ،n[ХhZZՖ,X! Ӈ R!V"6`ːJOĈr_iD Bfv8ϊT4B@C?ր#N6>cvK|S6@ L&U/_h;߅v펫mqg e[l5Ey]&vX>s(؅nCc=B[8}ɽ)E6,e_7Ws9%e -[NKɵYG;6wk/`B pc obY2w )vmAnXy{gƈR8ko. =&Lb_YD\JtV}^)*NJ[YUvHHՕ;|Jp6 T1uL;PFt.hdBee_];)`X~U|)@}mEĴ [D둈ՃWkOn33|y&wluKe(B+cNO]6lU&ocf9P-wWft%FU/'.Q{;̾I5NlLxkWHv!__&̋3T*tv̞6=V(f=G-޶m ngV^g9Sa;Ibe s!ߨ73|EN;S̵|i,7 S|L 0%7 S|L 0%7 Sr O. S|L 0%7 S|L 0%7 S|L 0%7 S|L 0%7/o_}L+߷FwCwE"ޛι#nA98|MCч. s|~ul|%R^kmH.HqM`LWz(8~>$.f=ZuFo_mxB SS09@<|wߒT4çȟ 52VEs%j|&l9,- FZ몸Jܶ\m:Q,ͦjhCj{NU]Ekrn2xeD恪V#5VP;ʡoq0)nZu {!ԯG`"NrYI̅F$'H&zšBTZO,f: 8| 0%7 S|L 0%7 S|L 0%7 S|L 0%7 ߻syvu}l? Qwl;YI]ډtS.AÞVo ׇ7vE\r!;֥v'.*nC߈ ﲧ|{} Gz&Մ]˸]Mtqa"k,`NLj uS__3囕eWta6:GEڪhAJٖX-E*ҢdKTxX*Xi.6-)VmK#%rVY,n,ub,1`q͎bSsJ`+B.O^ǭ/n +vu"+qg L1mڮS כvf;u15^X9:I|U:m YLf ]n_M7=X+u f\d+ᚽm.y[HblL`j[X^-h舳ݢ;%3YR9G֊V22|rOrޱM⋳:jÔ.7RCՎ:HrD69bnA/ Yn2юNIuή`Svt4<k[j.ʶ]VU}ڱZ܂SsG]{LZgT{\ԁIwez)&3ٲ-v9bzn*qrշehCrB4kSW,-d68:&f(ujd i IvԖ]m᳥_US8FvV e-Ak4,_ԁWhǖjq 6'VsGh.1@:&޳"vT`ISg6rLC_-,u\GlNa:kUuO7b-*馫ӭcX?!j22Kmd`\i[* V޺Yv-X3M=-bF,+£N:g%777wwwbIlmLl6KwlncBHB.v!.+NbX^k-B-E*&K-]Nթ]nv2W{[K] ]uC^AycbgYc./##~FkީUp><ػh*m9r;<0N }Dv{FGo>~}2NGz?7,rd}ssw%g`ԙL^x jwg2| g|H ݁^˿ 2_e(͔ ͛h,|*R#07/{!o}T}s@8EfiBԝ|W+yXe1>DF|/Ƶ#sIs>[j?:'o5\|s5A]>a'%7|L 0%7 S|L 0%7 S|L 0%7 S|L 0%7L#LN8Sfl g 0%n/4>_|iE<8wRG\ z`G"؛`YX?pvTmmr{-'0:"T4E Z%69Vh 0&XQg02M7bs[ot5jꨵ^޽KWSΤ2THc7kz K$9wY!]VNlQ]\ו-YglL^x jwo9w(鑴^i|n?`!>kY XȊ>{R,04`bkYm4c;Q:z>$\+1|/iw`Q3.bY-h+$f9- Pon!DBjqUg=jb۪핬D o8^; {b̼ZZ]5NdjtbJ[ZJ4R[7r|"+Xˀ#sV}sssww E05GW:ɻ?WSvʇv-OvapukpdG_~b nΪtM˹'нlȓn-X=Γ^/3g6;؛pxwJ3zғ/vswR׉׽),BФX.>y2So1د$uh(Ρ`^MkoK`gV_w^Ab̖o#5 F:){iyaZ'C;jTKm8ǽ]I`rLnV֕IhUX.~ǘds@g%ƥjwU봥aҵ-"z ]jƘ,CZ nsdM՚1uf&&f2yw30jwPn i9tS>b7ggvl}aR5tskq6xYj+p FBYL,ŷm-ʖ6&f2{*݁Nq 4vCbϖAmgHTƻPIJK즆yH)xY6%_^˹m᳥_t>['\]^SIyL/_t;w:ŷw %>簣ˊ~lc~.6ƳIRջRD/Op܂&X;Kmnf[p\_rNh7ElL|H ݁Aʼn.0n7X PN:-f f~ܬ~,gjaIG;+fыXlL15@YJYvsp &Bv%7Q (%ҸJ[j\$L)߁o޼ɝQ9ľ>U6lSnPb) c; Y]`[m̂DZա E$:R꜅3] jnm%9&Kk Wa>fu  prهz,3|EN ѿo e 0%7 S|L 0%7 S|L 0%7 S|L4C;Δ;[;|ك|L 7 wgNn `kajx}9}x^%ׯCLP`}(掞yJq|7N3g}}{}ߟV)/byR6jP;S\or4Җ/CXs)PBڵ̽}rf6'Ҭ9Ol$&kqb*9uظl㪹68߽{Q|˧ER:Z5HvxE$qVa5Hey: -;q[D.-uNud}ww UpW|3m:}W&4w;|4J!釤kz&1-#pd  2fir]o`mHcKlFrM7Q:p8&*˗/],w47@}G:sq)ng'ln+JkOVҼ"KJ9,w]'LgHYMn/OI;(3w.& qiF,@7ǁ! ]U]F i +!} v2g 9S4n( Hf}:g69tt{ ARA߼y;>lԀ Ϧ&gF؅j!o&۽RbR̨x"& 31fCd`ZywM7g Y{GW3 .-*b ?I|å0|EN{/ggqi7\ 7Xo)A`Jo)A`Jo)A$A\)@`Jo)A`Jo)A`Jo)A`Jo)9e<ܹ<.` ǕP-W*[կ>eS=hÂ|Gz~EV9ާ::" ʷ:h3]7dk|˾ʹ ct)&Dq KH)QSY:I[^sQO"U]Ve:anaZsU&}KKfS*F#HXcD;u+ z2NQ즾 Λ/pΖCPu#|d3~ռLl2φ8RA%xs@] l'`pUG)ۖ֯e`, "߾8 qo_mļ0>F ]@c!фłŶIm7Kk$\"!.d,\ތʺx-Xͦ8G%r >7 SrZ{h4ډ±Ai4~-?plo_ˏ+F h±9i^8*< [0tkRa:N5-m n@h/!!EMŰ{FVNmzCeZ c\O)qn ToQXfAn»wbd=mZzH,k)+M[nۀ>gks^jϱ`[8.Fc@тf HjVJgv,)_a[Vʃ G޾(ӫSĢT9Ŏ@96.t,!V:qz:k۝ίcfm#-n 5reWU]Hڞ7rūغ`uu1XO$TWj2RZu]L-t΃2[6oSp oSg6s^@Ɵ0yx ә༴:!,Vj/ LJtֽDW w=m|xK8){c}Sopܩ+S& 6kJڕ}sAӪ\AϚWL9(a~z ?g?Ac㧲`FX`&7l4A` < [~ToKUtǔmTrdOr7p@k^9#ӼPa۽2{nDxop=*PuϣV'KlIلj{ïUlCANwFTiXSs@Nf6nnwq8i)߁(B#3`H*{Eӟ.w YǍ'G|4=7I|@F '7т|w;oD p y#<-7I|@F 'AKny#<-7IiA.-7 S|L 0%7 S|L 0%7dh4dǾ:]"IENDB`onedrive-2.5.10/docs/images/shared_folder_added.png000066400000000000000000000755041513710110600222450ustar00rootroot00000000000000PNG  IHDRUA&sRGBgAMA a pHYsodzIDATx^}%}SV)/uʤ$cE%6S,֬-`a k yYKJX.nĸj,$he!93% Ybb"@/C.^y`FL>s9z|<ӷ<[?w̠C([ȼ. (1]3ryǶ׷#s2hdE:z֓th|C(zƱ,]oqwQ!Q1\3jc7|0lmgNmot"{}wm` ~mpΨ&t>]3j.s8?Uэڻnc1yH62(G"3ާS:_S?tS;_TvdE:'>]ʃ(yD!]ʃLUa|ۓ},zElh%:N۞<(؊SvQTfs1]3,ۘ]\ʨ.{}Hg\A̐.좦tQ(#ufdsQl=6#$j:~]c[YznS9_.9R=vuY'[kPJ.՝S]fEVSwo]+Tw̤5u̥zzSoSfr=4_k[CoW<3k#.rdi>)(QfC([)[sY{>5;crMܯ&d{k?.oeV6!]3^EK=PFؙd좮)[&iF.yjngnyΜ/wr;0&tbDb vdvzP^Fh2Olo/w^2 6]O²?WE:沃'WE]c[YznS9_^ɥz*GER_dUV{ouA+TwzOu_/ל{{좤^ɥWTf%1gUOk]Dz~z5Sfꥬ{w~_ƨ7=JIݹz=CWE=4~mOE:;$ͩPAyHJZ~4ܮ}zrq][_M>I+.kER/oC˕ "yH2"tQ(SۙZSvQ׌ھ7EW. ubme3A(tHOg$'=H5mzr0pZLn"QP18tFa.u, P_'~]_\sY{ 8i5y뛞8){>OpTMZ];ufmOE:mdPRq1]3r(1mTr.eOhCHg :ByHGézQcHgyʚF:hP _]W_5hsEoM<9w;qy>V^w]z۬zg"30;vd{X=EfϷ3)!]Ȟl,ke}<9x8s.d1Be1Z>M"jvкg]~<'EE8cgER'}Sp_ǎp;ޟLGEf۰Lth]|\oO[SoybeshvRS[;dIm]ʃ(y3D!](j:sUyk|9lo]iY+Tʞ\O錚+T PFݕ]$.ά5=]OM+WE}G=ٞpF O2"th;Sj. eKM?ExMtQ(OI5Us^0t喞X\3UnWiyfqoe>jRS5㣿54ח?:7]_>ߎ_\I?3Hp]4w]3USw}os% ^[fc/گ;͜[&\ۿj~*}I}[jIvzP^Fh2Olo/7. eTm .. eTmr. e\v0}(WI_M럫rܗw8>gMPwfC[}E\ބյMwTFyz}o7\n&D3DwT?#Vvyڜlg~@9ܳjuݮg>jn>>]~O!['fcg󼞦tcgPl4&"*/q{NY(mr.elBwb.ȇ2>g<μR'"gMC_?y*YUxx_m}3Um26:ʛ'mLUMc?Xk^iwTM^SUO}XXzs[~*}Fr=ˢMZ95tFaezE+. e4=eMyJ.B/=f4ŎpQ(R5Uz3]9KZV_6O_T-)Ug]f'RZy5Uٰk=#4ͬfm3^6SvQ(;Y. eYQ}HgT=a.. e 2tE:A틬5ޡ]uNYFUz^"ӮY?S=zEz)SI׵Mgm{u=>^N=uZk=TV3U,liWeoMԟɗ a^/gju^S5s9`/F}߾ܙo}\皟IXmkyמ8#iDCHVKWWvΘܧۦ+jQOMvYvlP}Hg] tQ()k\4#Ц*x.MG1\CjL(Og$٦]4. o{r:"P1&OƓ73brtFAƠ+"Q]tΨ`ǕtQ(r/WylޭIS8=k*t8>'o~u>}9S81kuwjMN.ݾv/dcxVy. VJ,VL^HgTm r.eڝff]nG<'ꡌ٠=W顙1zfh:ٕY͢z_wsU}Uxx}qjMըij?*u]i|&. elc)&OEMs/Jv]3j.;q8OEzIg]~]c[YznS9F`.9R=vuRuj%{G=u;8*%;|.YkNݽA=+Tw@lK{fL"UzӺ&PϚ6Y;3^ʉ|uz'[Oՠ.כ%齿Jz5ZίuIݹzKܙ۞5=]OM,WEi䣞lTqY{.zy*;s.uW6Ȯ!]h|@<%5!Ƒx<5huO"ֱ3=v;ð3#t][o#CH6FcGoC]'N=g:ffbMU=yHr VLf7CTEf6\BeSܧtFa+PFU4. e4yJ. e5=If4scHU*~M<9w;qy>VΜzw{6y#|;2Ee`Y+T.8Ƀyr0K޷S2JܧtFu_Lv{vg.E>n?<'⡌٠;ؙ+墱ꛙBlgɛE}߿듵]ǞW >󙩺tΉl㨏뒝S]>і틬5ޠ \;{JTEԇ4B=k*jNNݵ]|JuQw^ԫS]{;׶Po*ԝ۩gްoL<YSy. A=m9r.꫾|4϶Ivy;+;.5W6H!]h|YB!f*|0V.ҹ(-=zGH5mWɛٙKnk19E:lcЕtΨ.t>]ʨ.;X}H%tԴ~:̋UVwDg|]ʭyHfm\rE것WE:!]3Zp^B!P?jz<錦#p ɹٍ|,.۝9Sez1y#}ۓmE6NȽywn+&/\36]O겍@Wv{vgӺHjٌ=Tov3'ڡ٠LutXE}lg#kfjw9fQg:Y{yx` |sgn{. elc)&OE]s+%;sTE]c[YrnUnYIz=u;)ozȺ|b-YkNݽA=4%^;{fITEԻKꡞ]쬹jNI]$z5nyEv *EǟR^Ku@j{GzN=͙CHgl(&OE]s/Jv^gEJZCqܮ}mj.&̶i?.oeT=r.5W6ȭ!]ʨάYB!CM?pQӌSxrYiS:S1 t]CCBy e1yeYC^l. eTm r.eܧtFa+"|퓮_B9bfEջL_ƧEkNngq/uO|}7OuQ=1k5hۓt-d.ꚝJvV^w]w3u{\oҷ#.ZdO]BӘ<'o};eQ(P1(Q]1qtktg޵w;q>]>e}/Jo~<{9rySO=B!B!BegaVgvp;0&tFcDϚϦ}{楗^2'O4m5U>{4 Н5UvvhL8-mR=u U/rmT* U~ m.f6u!sKLcW CQk?J0$5UsAcQ9̩7v+C13U=r|{˿-aز<3I; չYq^z)acf_/ЄT͕]Z6]f:r˳C>3Ug0iSu1342C4[u]NS`cT cXSLo^ǢݙQ9u_֞iLUTU)eƨ-ݾ6:MՂ1;/\|һ>h[{@XSux|;͟~' ݶzU4V:XS\.lИc*uɩ74U<ݝɶOU4VZ>3U;MUaySnqe'mav8\6ᠹnsg3*U5e9xiY%nK</|3m귽6}.{<|C/whz>W\}OhmDi*)St>q(K 6mx9~wfO~d%' ݎC0wN|jsOqqsfOT$]2CTHJ.*eVX- OUy)7U_45yPnR8.Om>=zb%#>`n<3)9f>mNtuvo0OwiD3*o^_|ڵwVOkVtO47i9{g=DSFRrHq_u}sMծ!7']a{e=#ؾFsٯ\aʾ˨lC knX?1A%b+_LMy^.wīxO;8owqe(ͨظa~7U'rKz^4z*l&rm!f^sَ̍2{޲ÜY9}_`,T=۹1g4'9ج=TM:MŠgmnOjm~ s!rظ5w]e\~ǒ{(W{wevyy HO]od?d^W%KOwǭh.^sK1 vz L ^oo_ s/r =2=y.qͻ۔Wz5.K0w_Ϣt~ G/Mӏ%glŋ?RU.B s3W/Qc9/ٱYy?e _xv6}LWKoE#꾻uR"}ۍ7"wkq v|s[%b}(SY_3\}As]"JJfQZ'ۖEwݾ=/WZ mmh T}29-qy2z\De'btrsmfϥv@& 'KNT'y9=`OPDrAwv/#]מ|#i{mC7vf?X,Pn(̍rў#as=V}fϗ%_wXS遛O48du~uf]j[5muѹx׸O:웳KHtk8\|vި+,^J陼NZڶLg,Mrs /$%ޮyo-fUq2Wߑ7KݽekW2vz2]Ü'ɾwTM}Iɱ1Y9l|.s^ypy[o4g) '!?=4cn3Oo>dy`njy2,_V^G=}~;;Ϛ:t;4&.MՄ#w+ES;rOtӡ3{7^m)LgХuLK징>I}vJ!9Uב~MmEg t7$狠hHC33ݯsz_<,.6\e-gԚҟ ny6 N37ܗ妪mħX_6.13_6%A^O4{>p~6M[djGq2S!Oyc{yI]Jrkr_7/X̄utؗ+]XkXSuXݒ _ hqBzi<se~%5DXd;ECz]զj[fRk@x;t'kC}*ذlJ1IL/~Uidd/R^ZCd4Oh[W}!]_-xI/6_o1ͬWw9y#>VañT-ߧt,q"l>i+Z٠HzMdfdf oRD_P޿%75UlengdˌJ.Soi TM0vڥTNHٯY\bnٶ9QdqZTg˽J/-ɢWXu_:AgɌtKهG̉q(18\tyvrTǶ#ky}hڎth.=gX^|cf~gYj YlI/Yqx>g'Y_̚`Wߩ>W })M&MljylvuX,T"9FZm{kQpS!=v+͸8ZFsо/<֓Tqš5U-gRaIrB:+[w4ۋ56Uz:#6_Ǽ$* U: N+ůl؁}ͮlS;'Ws8o:q`(sȓН_|023ݯF O2dy֛6ɯUB$U 'V/~dJGO>|e'[;N 5Ue=7?xUjھ{y'_gas3י=`w{KJekRʚ塦jӱQS5Pʮ|o3Wii#8Ɠ6ksj| +՚ >g2?쿎}]+4s;^M 56o~оγɹ?PY,_SUfҘi kTM8qiv;Ջ$zkOCMU{Puk_pCS`~8W|<@ӓKڷ=X<QݮMgRM__N "|023ݯFBќ!50U5Wϝo/o8Wzl$y,5g_c75W\x^~ 5U- >GrFs}o&f~OR2Y\l _ϣ0\𧻓\|kkTOO'5UH9Son4UC0Rc*BS^SUH_6Inslomc {_21F%3Usͱz2q_KiMC≊,3Ne{.Kl:ol'_7Ir `soY-_/_9׉miFuG1wuW/ڿ{MUg6C'9#[Ʊ,^Bnzt?nvUѻnszugWSO]4[[[+^ sYg-t9瘫j뮻nyg&X5Uef3z>Qװ6gxǖyUCOlKvlmܑϸۯ6_lvߛu^9ES`pܔ\ݴ;"fb??4UǓm΃;JMҴycܜ?ț&j¾9]zey L䃉henf<磟25s|[{JFkT=x} UMUA.ɠꇦxOSNc-Xʉ̡_zf_#뒯 57㥳WK+?GS5) Ǻ--`/<3Niq6hF;,/:_UyM_o5.}mUK^o3,|!:S@Sul>lO>|KU:|fqnmr^3؇uu}^}깨ފm8qEOR:X<^{6Ǯ~M6ykeS?ZK-sͥ|ǖgMIn-s_]'M>iay2ɋj򵋆dhmRǾr2}l[4+/;}ҍdi W_6WK}}{lgqA_,H酋K/dJXY\ +wEafW~mfpɅl__U륯{^MuKsk.g?hWO}frl #ɋ_wzX.sMQD QͮU VżVϖ\p5W6=yǩ*Q?v [uk`ޔT 8-mR=]lgT3Iܛ_en--mwo~54U66JMZӯTsG5!fYzmSu}}}\3o6mꟗU嵕+`Xf@bǍ^Ycdi/E`\pgr,?o}7"5# E/_l5˦}/{~t,cHfzo.󥥿֯8%qu{[%{{^l|^Zps}n[,ߧJM?T׵ 0oVjO>˦=—/nSrMB 4'ZWn چc,J;2-qtfTlL7}}!eSU?oR|ϥ"cU֟BfZrqX.^ꏑ_,.|ʼn@*.Rfp.ϕ=~R([z=ҦlBYO>F9ߟVSW5UO=ٲX*j|a.#O}a_Ԯ/5wTϲɧbyI9y=גnF{xY}Jߋ^y\\wuqwu~&[SU{h8lgC=x햹lo}q|:~ߖyTM妠m0_=Zn`fnPfzpTMK^[Bk^[ `."j "%".`'6a9s͋>w>pkg0VorV_F?Nј^p~xT]lSSkňR}x99+;GS\C9ҏ~]fkLTɻKJ\[o<ްe[;~TwjTM6myd\4C}?~]LTi\&keR=%9kYU9n֏ۖ\RُM?,;~)WΫ~6w \6-;s&^CUtf#u{\gTrjws#_pF_yyj>\**=gܖ(W-j]ϲQirLH[/l_SU>˦ \,ͮ-~jw9ʺ-]T6P?X-zT6 0 /~q'/?Ip};qY6lMdfi>˦̍2?2/~lƪ6*nfc.TY:e院֮i B/KfL MU鮩%3SuLտ;?d_M9=UE|ߡe6k `D&jרjj mtꩧ:~n? lYյS}.3NK+TOlo۫yM;Q2?ެ*l) bUW]7\. #5Tz*r Cg s9gшu56W)ٚjϗ-U}I7J-vnd* 9Y";[Wc[o_ @{< eTmrn]e6.egy.D]j)67&j{oyպUr*0_ƛpiSVSu}ؼKycc^Kje&j{,yڞ}{˓{0i.`LgMՐ:?,N?2w|cWWr0_,Z>.W3MUX_\M˩ `7SUf@NS6WCs /ٚjϗ-U8MUfX/YSUfi,m#ز]4U` *kϦy NS`ukʌS[:MU%krY{Q4U` _SU灜*AeMՐP^T1XݚZ2THcS}C^&ޞtaɚz.T=l%Ck/K2ST!]ȳl:C6's?V`'{^sYgofhLU;MU^ϙ_0'Mc49;gg}6m]2zqL4U`([SUfrKcSw+GiN$_EoOn,w=qq}f;>v. T:$r7ɨbrYc:5Ud1T CWSohy+_GG_w4??0gyf7̎7kw.VkZr.-kgoikq9`v_>n{Gq| >rʫY6U`TAc_ڴ!l޻l-YUSE]mZ8DS| 3Qi0ޚ! T#}MկmyEb6bFC6r1ܧ|q7.%okv6Yt|g|㥿|p4Fsg1K 4UK5p}=uɀ!3t}ǨV#rX~novv,_{k*й 4U`]q]fdv fEΛ ׄkJ_^J3 MMCz*}mgM.:qkI|ʌG}!On*jsq]U?SUf.9,3'M4*+bRfd/ {(8>TUz궸OF/4zjq}lT!x O:h~+v_+RV;ύ_k wVEeMUИY6ULrzhRo,d{LQ~prAت5.'>\].i@4UKhmҦjX#>t7ח?Q1`]3V4>ˍhr\s0 >˦WUm b2Фt69M GdyS5kr;5$=Av4Q5>.c>,?fh._q<ɠ*ꢹ<>9 &{M|hw{ߘgTsRp 4U`]_L.o  MuGS5(C_f>Nl/! /pqa?gm~ٜy7}#?ߛ9WҼxڴqDzXBMմx}yC}&W#o֟NVw^:ɟTox_WSN93;vX歝 㭩%3Nunl~g Y=P0r`!X\ESL),3 րt=ċK Th@7SUfܓϲ˥CepCSuz_otglWű;~k:{e @_*3EuE<Ǧ*Lyh }jM>f4U`jd5~՛tkYwuB'm_~k\973[%~MU[:MU;=Тk׮EC6MWTd__F|/, /bM.K4UڳERܠm뮻"u#~ yHMUVkE:MUկړT1Tg|fڛm*A5UuE:' cfk*TչT1T}>Hmj|6NSƠ}( ct\TT1nMU;ԕ94U=B!B!Z5UК܇3SƠ:"T1ZSu};MUTՒ:4U` 5Uf|f3RbzT1T:"G~LSt]TT1nMU;ԕr0ٚC2s4p03UefCHgh8T]LӮNS`5URWiXS}igLPtΉ d05UzcS}C^&ޞt5Uј<ϱzDŇ0JhK5U.3HCyeS8]5;̜<K?VyC=Yw}Va*3CuEMU^ϙ_}9oˏ#VAW]uU7欳JWlmmSN9eV\p5vڵhH)Ynz뭋uEU^}Ĺ*fv96UO~T&wo>|9;LM3TCm#ym8 ?Fߺ~o9SiԖwvu=O0$eg@>˦/LS@f~K/DMfnJz(z`ZWB`=>֩Z'k4!45smZwǿ`FA\}9QTFUr,a#sS~{o繢:Ucڞ=v]?6*oMU;c4&$ϲ2@SMUuA]U/􊦃\(_5.9oV/\+Wm{)j@ӔZƯezF5U3jLJU"c\ruӯDF /+BTԪϻ±PpAC,U]Z*z`/&eFLbrYL(MUEnYnB4U?:)ffu}lT!x O:h~+v_+RV;ύ_k wVyHClˉѼ 4U TXꍅb|)/Q.[5UE T| < X MkMUMXTkDه.F2cRz<*? `F}_ۊg1cU4W+xn皪igTOt 4U TX&Ynb8 ˛Y܌(| ' _/U__3^xsg:h|myW򳸏 9?ˏ- F`2}Jh&>}qߚZv+lRR.lRS^=|[e0}`BSTMF59-o&ϳ?[ gh#<lsuAkfnjq`1*TMI[G{cD0mB}[6CuM_켹>.Lǚ]lseS؜D#yna u3Mҋүf*."}i@굆Eљ5^fRߝ\YP]V/-\:wim} 7ǠwILMUٗt>;?-vE}o-9b >]C,_^x>Y癫4U`=p]T8o8TyM/bggT8o1C(ɳlϔӃ> 0z;1Mom?WSN̹^SW~ƼU2gqF7_^k8TˌѦyeS׍?k?T}ސ6B7W.lۭśk] >u@կ~9s̮]j0Rt};៩*3BuE5U9v[ͷ?|kyu0g퇡x+ҦݿldˌASuzP皪c,T]gnJ>YC9C7k{9qDm Tmm?oyTչO#Ϛ_|1DZjlo%CSO'O@TE(/?Q}t;%oEuwNXiC(}hk@8TZ35WvUǫys /zrQB!B!Њ^SU!}ڮjzyy!B!B!FiSu*3K(nz׬=dmS[h8ۋ r=tzrO^b=]dzʓt~E:#-}~+ҹCwa߮ۯCH6yJ.jJvgE1W"(s..y6W"({w.. 9*"r.. eTSm:d UdڻddƧnUkw|E CH9+4V5Ug{.^_KߎC'/\[*ki'ognke3m$"OJJ_m*'uH3We]$B*{G=>mu;ò\\`]rꥺ#O5^/Q uNd"zM3 Q%Nd"zMkl#cdTEVּ *9k5Qd+tkSOU;ԝEVB6TI5<^_SuH94Dm*]5RtQzޱ,]*kՇmO)uQl}|ԓm,.k>]sm~reO}H9It9wq?ӢBg"Qf\4kꛮ?upΨ?CHgT7~E:YѹrmON]\6F}βCWӇIv3}y]>Ay 깋1y^))Z3 ևoؐ.!9ppw̼kȸo؇ƿcz5U=yH!#E]SY+1mrV>l]y.ncZW>\3*o"Q!;T \Ȟl,kemrkOv};e3m$r)/Wb좤/ͳ]BVE:#6G.y~?ΟKr"kwиxoֶ'Pn!SvQ(G)9yH26\Ol̕96\O>&wqsT6.. &wӑ_Fmdۋ\ץ뛒Wf: Cg:ortSnCȑ%SrQ܋ԨT^5?crOlyֹByͬӑ_E}Hg]LzE]3Z/E:;"Q!= H97~ϛdzF][o=9u[('(#Ϋ GHg6vsm$"(HE:/铮Õ3eպ|b=sng=Svr]oBZZ:ӫt!$/pcϯo\Eo|هCzۑyH!k䢦9JCHY*AV1ַtlcoθILIΫuQl h %3ZBtFa. et~EpSx'ۻd}Y{^_SU!]CPE3PD>T횠>Fr=zESZYE<f+wqQ(Qd޷tA\.y ͜3,ڸHg9ԧtFUW1]h_. e^{.opsVh\6U7gȑ#s]X1W%uQ(Pq}eܧYqqͨ K8\OןٳA^=wq;kW09bfKloobgv"BH;^"'Q_}6Ys"kWek=Blc,&OET3D!]3 6\tl̕H96\tޕ9+s e)ܧtFD^׷oJ޵^x6S5@Y{'y _}뚫W~nP|>\סqxkvݟҷ=yHNu(>Tn.Hɽy;s4ByDW"me-[\ʑuRu;3=m$뒝Y3.%?5뒝YOe{zu]4zIu;Kvz˺H^͠.3XD\;=.틬5QO.N.틬5QwoQwoQwo5޿mzRݩ.Yw ?SN%uvц}ڸQA]TI74~n_:tN$ͭPBy%QOJZ~Py5n]Ǘqt^}_˾o]sEEƛ}}xۑyH!SvQ(R38s. Y*A+s.. 96\tl̕H9ʞ]tAZ=wqQ(QEG=ȯЌ>|uMvQ:Ο3+k_^]477ϙ¹=Ŭ+}|ǛHgTHOB&.ycݱy#|ۓtce1y0Ov}cE:P]\eڠzdm#ѕast; q>=~][&gzvUXE:lc•tQ(#6W./pΛ/7>6Ys"kkܧB!ۘSvQ(?יtΣH\U횠cd.׳,ZWecE:Q9]\eOޮE:Q HgQE:#L>]3 :c("5BwE:YN.93MESs鼆Ҙ2OvdByDW"(Ht..yͰELTѺdÕ|2=sng LE~rvQ̕.r!]w+T,fj "e}}z_MG.ϿKğû_ơM7>T!]-dc1y. e!*"QP1ַtlo} ͌3(ڸHgԧfҍ"BޯtQ(#!ti"Q!<'}T=5:W'-]myؾ$vm$r?q"g?knG>]s XLBap,(mr]gqQ(/4pm539rEEve;[B_YUd~{Alex5252 2020:06:24 08:21:222020:06:24 08:21:22Alex http://ns.adobe.com/xap/1.0/ 2020-06-24T08:21:22.523Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************G" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? (0(((((((((((((V=3_M꟭YZ:f?Z 5GC|U'8Q; )ԕ7x'N5/4x4xO4UF_U9W&W&Z(n}Vo_CG?`?_CG?`hUAZ=37  h7  kVhk4x4x>[U9W&t_ My5f3xy ТX,F8>hI>7~}oTj:+rOM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?ZzG٦O֣$4ީiS >7~}oTj:(OM꟭f?Zw٦O֊E1+:Αme"W^Isg-E nV$6m İ_3*%Pv,FXzE.?̲oMdoM~@;`y5cu%ޑ}K$O4fepCcˑF늋;}^mG{K{d{ xvdE;[zSZgڣ֡^a߷y$ g} hVg.-̕m\8'*][UDNm݇I#{}+FNK{cHP41 {pA3y.5HURt RwLGj/tNcJ6ww`u߹c>zSZ6G+Oim"fD;Xg$A88&];I-.Mv|T"a?1R7Iј5t{㩼Guz8M1/_{i3v-[Nԥ-en&S"9*GQQciڛLm@e,3<_J4OVVڀ&[rbFea|u<Dž-E kkHbh^hP4D@,KvI 訢((((((( u6?kb ()Iu{-_˞aI6piIjr]֥VA4%aA#>mFK-{by>1-pvF0=-io-֙\ >c+J,Ӯ/H30BPp6dZlk9Z丞WYTð)"1OuWk[] aM:s2[O4O^}FHvG+ּ1mk,-mr 魶4lrc\Ɂ1irX\M\,+ycq>~U/0{}6]J]>-Ba][,dA%s9eYyFg@nsM[?SFV.ˋ;I o<2 s[(N qH_è\ح弶gIUnqZ-.!-l<>zσMkW"kuyT$*G\8^ mܪsrwTʅ<д!&Dbnz4m cjоմ2HSR-m·,fC t; [CjI0vX&A@}~-Flwc&jr1TiHH ~la-d Xۤd8'nsAZ /5-V(l0]&66UI)(C y ɮpjQʐ^52Vg6T'̒72c7ukm.n6\HJ$0 Pă e>lu f}EKZΛe<] ]*Np8Mua\mФ{yWyef=6zxm'.-..Eo:'HOzm4WvwY.H; ]j _x-i$j;),wtp5sMnhD"e{~l\o?.8s*׿2\[z%#ȋP/\p{vt-ԭ$"IԴ u,3k=Q%9 ٳ [wBF*=c[^rPoR 9p͒|oǧ7SqE+ibMfG$EoMEjْl/:N9vm:e ,@/%ƸH5.FD^IcFFhrte-=i_Ď;9㸂A%+PGZUsIe$ VF s;='5%W w%V|fqYxjml*ͻr.p~懸t:+-JQ7:} J`]AFA+"S}ŵw2F߇A:L.sdɄ+Ѱx< s^?Iy,Ksk%ȹR#g+ԑ6-;ZGe]+ApDa[;$(+mpqBΆ(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTo97#aNGcӷTl>9$QFCWaӿ'yCJyP<`C;g;p-G~A5h_6ǔIp?O|v=O~FM/P(QE!Q@Q@ASAk w|0]qS@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@cVAN~LAEP)?7jP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P *BEP@(P t*(PzeC! Vlqu"VO#R]W6Y")7B sԏjEiԌjZl8VzX wM#VEIoq`O#8${H> m.$Y[i#i^==~O 2DcxOcO+?=?1tEt ][Hq>``G-\ z+j>&"C{gfC j8,A>#𭴭sa{owqM#86rw`mlL +Okغ_M|E.[y92ݭeh H919AioD]NP](r Hb˕(ZVW5|7O\D,EcB;Qaz Erמ(t%. w5J M :sa5e- V[F2:`pQ-Wi3q-;Cgx4?4hj+ hN~o4Es+}&vκyTE;QZ( ( ( ( ( ( ( (: oJ=bp*(|;3 2ڠ{VĶK4kxb~ 4-vOEQ@Q@VV+M#XtۘiY^(5T;AQ@v^g56u HjmodCsd;Y<'"-0kEg*<9k^((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((~co[jgp$ rF&j9aOJ2y{I>xOy5.c-ϑU> m.m .d Q1#x|RѢh!I6 K7ې.zg4{W!utMM-xr;JV[~քײ/?<Dɬj^l0nVs`OլƵ_PבCdY[;XsqPxZ-u{Yfq.t OK~d_1jω>s:3or-C(V =i-Y/+5?ƫM/TKa#pǐ'ׁ_ޯ!;'P{3sb?=@1Q<>x}Gϖ]9,/ .JL8; jhվk^+ N}(Zi??/0]x/^B+8 {Plu$v^xTֵ [E>`FQ":u G~fC4_gyݞ14O[k[|-JϠ$)_N#foL+^83`^[ :ʭxG4GWWp;]%Eʨe#8=}u!in<h/ZRԀI{V}{2jpv rX'qbekGCEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPGأoΏGߝXM4v$QF݀U$E([QY00M3c*GkBQԢi,neFO(pêc/أoΏGߝX+?V~Պ(أoΏGߝX+?V~Պ(أoΏGߝX+?V~Պ(أoΏGߝX+?V~Պ(أoΏGߝX+?V~Պ(أoΏGߝX+?V~Պ(@,(@S_SQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEBYl^""EFS!FrHJ#TB)sZgCwo1@f_nB30: iƵ\]ܞdV5AM(Q2O]kKse>}v]&EtE(b\NhSX.}Yd_-P  d tГB|l WR Xx޿/N_+~?<7}Yi>IglGQ . 9l8!@UG\dz=b.4tw[G@EEu~cߏz|1i3G%?*IEf!: 5fF͹5٢ ry$m]h P}WA5IWtS5~+[Dv榩QEQEQEQEQEQEv?kl)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP) ((((((((((((( u6?kb ( ( ( ( (/.|ʡ%(@}hz+6XkH|۝688+y=_he*rEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEB^!PijtR䂣bi:g_nK]ki[uW)x;y9'd g+g:ޕswa/?nEa+/R݆?cuG34dq |ی[ ?tCRy7}񌎻q?9gWvkvr/W+,rp:ZsO 2ZJdabIBOQ_x!S0=֭c1989ߡydRՄV4lEܱn$g'$;$( uFb//mM`HۇD䌶$Nj9<[o5[^<|AXh|7z` ۚ7$Q!vK2qgoM7jxl^s׷Kj˷oKx{oK4g6Lw`gRǃqWm_e}mw|"y.`UYF- A9Pqޱ&gl˧a<Xu 5nRE`:`Q=qZ3ִuk q"9"Cc=o|fvՉ/:(aEPEPEPEPEPEPկS_SQEQEQEQEU c<!ѫWꦥo-͗o$v 㧥& $r9jc(I=I?Kgmt."[yCˀ* w҅QE9A]i,Ԯ'I4ָDg3Db짱5]|_6QIo՞g-P&P 9˺g ⺉49R$2 \N$B~(ϓ,=AQ*-Ԫǹmr`O OE|UOtZ萲Muqio$wI 8%C eq5Ay`kMyƓI$mSOʜnZE- E GĒ.ztm*t_*l8h)9Z6y$R{ T25|2-Jxۭ\euotZfiQp2{Nf((((((((((((((ҭEѵxo乻+&q!1 Fw ?.:dSomIkIqgtbQ- H  OBGStD..a1 (qҙo eXd),/nRK]R'@B/p8s:k0ͣK4cKƶ[V&p0$FqڴuvmKEv"K@#ᘷxgM[nS4*/S(Oa{qJSѬoѦswRĒ:㎌hB0rR+@js[ .t?3 G mAsQZYK遞c&Iv\U0}r|ѝ৞n68rz:U+?1Ȑ[DHɚYHDmʠ@}jbo{͓Wqk,xq* %[Ե-cC-y,wO% -+jmmXjD\Et60]IF 0g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy g|_FSy Q"7iPEP #zwKwQ&*WY\W?Qk?)ƏH jYkSQ^GD# "m'Lw J61}Y/FFzu5u ?h6һ{o.VtL 330A@Eqljum?Pm>Zڤu:\/O>^_tz7co2ue+4ǻCV O|GMEpx9ͷ.љCk~$d3Mfu!GZ)\Ҍ h$ b\xx͆y _*uFl.CU@  lu_&ihrm>TFCy?(ٴ\|%m^5OobB5}~n<֖R&`p3ØU=@QA!jV͵*Rs1bRDEpwNH5Q`(((((()կS((((+#V׿~w$zJ׬r8< c72Vʔ3 ʥݵŲ.Y?v P-A8#o=oR$.Ѳ*sW_VQSmF،mA{ſt[wZ܉d8 :oTeGmlEgWx6sǘ.U#:VG|[kWOdkxbxٮ"5|E}#[MF$W@+ݔCwWs<3&C2G=QEQEQEQEdoOws!P[ - B#OcZu·hП|n|m>V:s:6j7la6eh.P S ЊԮ 7o+`y^S ) ((Xm|Rdl5-qwv +{u.7XNS >߸X9F m9֥ۋ{be%jÅ琧X uB9빛3.p/g6m$RQWTb+\ʎw c%_Pz't;:+#bJq?t>31͝ m5`[}4-(q 9M. Š|\/ tBn-0)XY[I1j}n%k$6{D ȹt3sеߦC*nСW3ka{kA"ϩ:Ǩ!eG_lFA8a3 muyTYIui } 2nmoc,sb\+%NpAPk/1jWԡ! {p6s׌sYSYYMofڔFSt;XScxɍwz:_bX5ݿFsE4R`Avbٛ岂=Ug`^+1(>tGsEpK5ꏭnK䵡J.sf3uM_U>䧟c~u.Y(QEQEQEQEW_~~nl5f{yZ&e`$d|^6K:5Q >|ݝCT)L;w18hF/urq>P=Ue;|3~N8t5 7Eֶ?(r%d_ ]*w+x-~r>٠ yRqtPٺ#h/, 7?knnUf8J+z(3'uzo4a@Nk2FAwJqTa:fT'K{> -FI@a5QEQEQEQEQEQEQEq_~' nuk+Am*TsZj  X?cLZ>/.j  X*(j  X/.R>/.j  X*(j  X/.R>/.ti6VbuGKp'#ifۜn1뽎sQ=1ElVd\B<rnF{˘ KxgBP,)N)M][YE,SQo/vj: jPfYoHw.j ү#r.˼cgT$T%2Vi5a+RʹxAeLh}MYX!i9U!}qpå/=Κqܕ2p@9隺-/Rk;P.5=pzV{_swXg"YM 2 Eq+tbXB'i"i,#Ԭ?YLM~%Ri-_@s:x$e1vD|qGݳ՛e^EfhO)H(s8fYNZ7Mט L,Y~]ܶ6[~q?/)1nrwm|cn=9; QE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@+"~/W6nxIP2?GtO @y.Ϳ4RP?2 H>-4cceolXa1*gVh&:mɅb b!4W# 9\3>]uO2j۸F[`lZ4P#(kL6rs2-Ԫc9d6c<&'֜|=iSW&hF],@:( <-j lR+]J1H\noYZhCl v0zxPLҧ8)42]}aO 1} N)mL&aR#h\t (.Oi^\s(@Z6\ lIԢ(((((( u6?kb ( ( ( ( ( ( (> ~ Ao^׬\H͵A$O⌻xV#c}E| 7g?ܰ5R.]~֠eӥ^=yZ?9fo}-{|L~ZH+[{"?"_ZwE^SFscc=g{gp?(+gφ?,/09#2PtWÿxjO7Ck0CH1-O^֢zo#€?<诶?utOSĶ2mLEcG0x$ ϫHH ri7V wSX Dhnƾ Eg!As2{օQEQEQEQE6ڜ?=eJl[98:tP^[irf{zt8t( ( ( ( ( ( ( ( ( ( }èƩp}HOQ?CVⴶ5(*"( ( ( ( ( (1YY=GB⾄Ҡg9+Ƣ>3xRuHS׾@ o_E>WQ@q'hMQ=CXG ڊcMCֳ75A*/ބ碊(((((((qAkio8xݞ/&R,9\o3G?0z>!bKMPSk>F9a`?,: (d0WL df\HÊEQEQEQEQEQEQEQEQEQEQEQEQEQEBuvx23bPX G`kJ_+ZQE\U݃>??ih~(e*XGPGJD:w䶲9cO0 ^QFo +5jL*XYAbz>iƕNXIY_x"}Z8?$GOQOZaqYxPyd*%`c\hi> xm{Ke{l \F60'?Bz}cMROQ[ٗ|v:y.rG4rMɧCI}ڬeAS9Gn$Z i&JOݡOhT.u" ˽V [y3pdmbpx犩OIukXa[+/X66%'j&Esmo.fݨkxu 0= 4d;qp$˹U>Vm@QlQEQEQEQEQEQEv?kl)QE&}IziPvVFE7`oѰziPvVFQMwong&# ;ΦRU4vCVFtz2NjCvVFE0zh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(FտNzh=[4(F`ѥ ((WKE{_봬EKKIcXYA;NV$U6\tg՝F.ߺB O_JVan?VF7|-CJOϨxf<䄄LO\}Vk<&%XKN@vbռYkZVyM|)o-X$lǾ{i6^$Aaky:ndY~Upx5Q\B!md6,G;nYGz'k;A/ڵ0Tǚ -=qE G z]b7vq[#mEFUVoI$;V' 5>3Dc!tΧ'pik>o{ky 1ƒLYRUBv|.*ޡjr&*Zd{+y#p>@5ϭ_]kzJͬńUh PG5C&0[ϋ&[qcXCrzFrOOEQEQEQEQEQEQE]Z: u1Q@Q@Q@Q@s PF" >Rs]Ra#4d.G>ybh{8ta*u9="($vEnW6=3GE4<[/(b~f_[ӣg,G>V*d:p+<1!^H3`~u992ZɏNDYϓpH$y&.ƈ7@ (%۰ʆM5w`M`$eQ' dҰX`K.cWjT1 cz+tt,EV% # #0fgi5ӯ|5c\slo mYF}D @NR0 [:~k٭ՌH;VV0At oMtsXKwF8 7ɍkJ@s}Fkf]iA,tl22pr'~s0xK%`>bb 0o63ھw eqi,4fEʺycv333zX[,6(luTqN*HKաDk][ 'yn9y;=j!־0$nw߭U}H]$q#2汸A$\v@ӵ;523d"H 6 $dgsZ|\KqgP1 !0xhA2\r E3n%c/~3ҺapT-K;o+o$0gbAv {Wq4&᥇KD\퍲Nsh|7 *\Iд ^M(F f;x*kP0TxrAq$.q܌ҶSL-K=*+ؕ!mOa<YH9 >mWPu^:\YY2Z,L$96㓷:ck iW\ShDw2Pp<['&e-2BZIa$cl9;[y<Mn__^oz",MU9CЂ/cxmm²[;9YlVF aI?I`:`;)ض'Rs$6ZClcpq PrvŨϖsԬEt֍c{ br6drq/oR[ory1;Jp3WJ=Ag ۏ.?gRJzTšD `[%M67"c|cRmZ,V֟L{Tk;YZFX4R$@M9oJ:sRk: pXOp/-3URU~<kzB.U0dG$.l zTSOhZT1BAu(wÕٳh8ډBiO"q+,|2CmoG鎲ckHY oqֻ{k kM6; hZx\cҪtC$1@]h$jy9>_$Zoخ'[qkm(Y3ǯ뺦h9 (2JQ0`׏úb[]@aUPJf,'֍Gún3{dʔGq$k*s=AhS3BU&o˳uXٞfpnCtsfڵ`񸐏qx$cYk1jn.txH1,32yZ4})mV敐aK8TTՓCF(B(( _ScVAN ((((/5(/Q,,~X'W.+-?i$֕'V\nXv[ƲKݕ+R퐙6lmsFC`o X+(Kvp/4 H8R5f 2F3Mk-!K~ yF9 UKNek4g0ܻmP0y<⤼O{]/ }f̂]X sjբ6{efQҡoh~ł"7H#+ghUSUkﭞFZfS W9MWmh'-bCP('P*֕wjvqJqp7<8=Q펕fun%hH!yZ}8\=hEa%L7i#G iہr:fgkjWVJmb  qqr9h/Ye@l3*U.p2ON5梶7Ϊ\n_8679@˴Vmguh {ayU@1>ߊKH|5KFQ:۹K;a @kUF`o/mGkBIJV#?ns{+*6Vz{Z’k$8-ym qp| zSuM#D9':P?bF[&.HV M^u,=Oio5H򴂊(D9H57þ"Ss,"I"mWlUdsUoa<[Ho$mirIyT8&. 2G9PO+;Y-p[\m>l巺),a_$XGIy%7cmU|9+0yxmujMR}Z4+֍f,CtogM?mJOSiգ,AoE1q q85VVqڬ<ΪI<+NOğà8+jQE!Q@Q@Q@Q@Q@Q@Q@5I#t`AQF`h%݅ŧECڵؓ2sӄܓCy240b^vИ'@m01޺Z)ekt%Ww$-p#.H /SIҵ;85i 3 MPV޺)t̍fRDriOI_L7=-渟LCqpBlyHAisx$3I C9Ⱦ4; `+…! \k (nJERQEQEQEQEQEQEQEQEVncsqY\ZDC$ܩ ˀrF:gV>—{=7 E \8*|T7˞@9KM?VN bXɴ쬤arxLnQUv+jwWO B<R܀oQwQ]h-+Kڋp;*> sI騤3qi׌H;xE|`HǿP$rzR[;X,>-lCkonܱ,oϖ0X룠CƩywo"eʝ<o㎘"*)[5sj>&Yckh.DcF$ 'y$t[K9-,,4M9`H*6ִ(ܥag%֡,J Si<^}XQ$VsIm$l5EsjR>Ǩ KuD*2l%]=3UXۧYI܎Wjm?(G%Ajޢ9R(Y7H.)V/!0n8n.t9nL$HTi\E CjOu͑avvm?ƣ.yTjwd3Lkdy@ʲKs.G]QEQEQEQEQEQEQEQEQEQEQEQEP) ((((((((((((( u6?kb (z?:O1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ώ1?:o_Ηz?:Z((QHaEPEPEPEPEPEPEPEPEPEPEPEPEPկS((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((onedrive-2.5.10/docs/images/ubuntu_integration.png000066400000000000000000010101621513710110600222360ustar00rootroot00000000000000PNG  IHDR/ IDATxylE}Zw+< jD$hĈ:fM4h4h2N$1#hcK@ BP,=޻{w~Gu۷ow{}9uj;uTo D?1Dq"*7"b1ƈHkm+9WJ1lUm݈&ޒz:p8|D +JGl>1R.gV5t8p8ñUVq@ZB ZkT4sι1Va8 LkCp8p8*(x! 0 C)VP#Mz^׭snUž~ǖp8p8惻v2*nsRillRxg=_X[RQ!-1fjV):p8pTaQBٳGJiU61fV9[=k&eY+B'p8p8㄂aM+>hll, C! 5'-bBxgU9lU=ϳ(yCp8p8au r<99i\Z-@ɲ 4&i7qabp88q`Vp˲1{QZR!cL)eME,aHf@l6)e,RVVeZldֺRٳR p8 NB'$k chQ{cXgl"ba"5/4c"ecTh2 ) \GPX^ҙDcIJDh)T 9$%L%I΂:>bKnA\x!W1k@PZ(Ё%"$(9ñ[ew(yomMLDRZ&$U;(RJ+@j)lvo.lζ +m8S*g "Kf!%z0qԣObfBxʓ_.ecTqFQ1Myv& >*W5RF!k87 yh\+FF03(TDionb0vHIދ~0"x1*d# zbFvz=`,MD5aB'p86!sGyG?y z~",3LNN&IbED˿r*CmR* Cι2I"x,xi\VJق$ؕ[4M7y9<}uo}[0Z$CXf0hzro<.)تV*+dz,DE@SF`+0"mhmaV"˲SN95yͳlkQEUTPVΏ?U}aa58htt4s+XIVA$hЎp8ñvD|?ŵ|zm/LDRZfYY'隷^ɓJ?k7%9X5{xOGÙTcm{?Zo^9u1)@DLe1gמx˞9wͯ΁ʦ3n8j<}ƯOy_k^ӳ;N^po_ ?sj;:[B/xff&4M4푿O~.,ckb(G+K_nu+aZ{+R"XO?KlJRid111g<㪫ڷo]jUe\.wyWsMGllp8[HftDԤǕ7O㯘A}eu__'\[|/~m苷|S"ԊUHfQ4z5DQ=q^_5_#\0F1.<@4f~{~3<3rz͍ c%yE|/7}?O~kb!ƛ_ 0JsqXy>;z9,=gx!ݗݶyp8ւcVE/zݻ_'IȰn/9I}ߟ{^w}=zo?p@RJoܽ{~W~WZ=_}5G?JӔsnkuxW_~ry'cQ(DJG!}xER)VasAB)e^^YV9sI'aXTN;.hID Iq8ñ Sk Lm?O;sO_m{t_y^_Uqw8 'Me6rwK~ǸTwM׽_nj %:OU !a JP)UӘxы^BDž…u/~|yԧٲ0dYvtMZeԣZ~+_ysSՆq2 (*Vy<<ֳUKd%b:22ԧ>:DT*qy{&&&lYz`U6cUp860?$O=W =ȣ0'?lAݻ}יg<_\नMcT"DUul_pӞ{ٻ,hc֚ .uPi$!4h,Z#H ].x^O곿cWQ%9ϛ(ܟϸ~?yU['pl VpW:tx"?:tmocUr#+`%g}Mou돃>_tEओN+"6e9߻wߟ (jya(wgRIW7M^Ml=Hw%pTO.\zKv ;3X)Ʉ*np8Mh?N?O?SN98 )OyEGN- _vm}dذ&vmwYA`Z +薹R^|=-wG kJ MQMկ~պ䰵݋}zdTO~_ܧ_̣pK\Il , D]R:Q>T8f hx\l@y:~t5Ȟ{&Ӳܯ( K e 8>LkKEiX+IB8Vep864M}߷3N)ÊlSkP{p=S.ժp)" FGGwN}EJկ~.*BXmxq_r%wu fe1MAöv[\\ŷW=kl[ c z(˲rKU^>h/8XaPPb&c2Jt84߿='OTyu|n5gH_~Gc.nVnD|[nR?q\A𖷼}{_/}Kq0V[O~7~7$ɲ  B7}{=4Aֿ(u־jADsƯVF2;;{7?r5d8R.,,|'>q}VwGYBP48*)Յ:@,7lIW/gv x̫7As%i_WVQ3? }@2Js)Sn瞇/.w?g{Շc(Q GfûrE?ƃq׾CobU.;Psyu*Hkwzp86>ք$MӃZZkֻ=48%I211я~3ؽ{^[ZoO?+Ї>جְ[Yq_>ёk~_W~#prrҶAJy'[W> {[tXU—[!fŠRytֶrM.&8cԣ5?CFTZڣc#NCIMV$x`d,cYP:cF`r đ82Lp8韞'[{=~7p1;˺)XZͪcX—_|5לzv;묳x+Ȳ N$z(X/—|3GGGgggoͭ MgVd~)MRٵkV jOؖX=MV=T\6^u8jGnj[ K Z ?lC T p84J+ pc Qc:N2X5RpR#萘yAHV;}j]IӜUOa"a6q,MƊ |V}uoa,ͧB^Z/ VTR$Y/#8U^ g'8.31A`4Dp@9Rq8QxBX} $iH" )e$qjz^O}9j#J)mT,|ϲCkmqA`mDl̓Ç}u1nZ1&"J=maR%к!$$MJbBy6+kcGQdo%FW<Ǭgp8VIGЃ,K 2{,J@1,yIE3G}Ka>scMr8/׽@ASqR'6 i(+Ch0YyZ$,Ǥ6(x+2U-<KLq]ԡyFU3'3o/*/0̳H+"x %42$̐N&p8Nd cϨj{gr΋Ȭ6G|(z{[EU*AZ z{|6 t61Ɔݒz:p8|xT*($(/!Vـ:*ٺzQy Sp8p8Bq z=2ι0)b v]u,y>==m- hhْz:p8|xTBkaV3}X"VұRJkPTV;vQ+($/E[rp8p8Npjjլ `ADQ.lME,qgYf]X`Np8p8 (kR} Zzd*=[amUڬQ:ip8p{\:rVR6(*8?p8p8?Z&b7Y͎u8p8q" jp@l=.WXi-KL%Ha 2fP U&YĤ[?t,L2\f84`51Av=b5;U\v<\jm}j-K/rh}4Z3{gՑ>6m1ZgUm~X9}e IDATv6Zr]j>J"Uo0@\Mj ?s)>mma ne^s;!.i˓C)>ba+X9@i t;ȿEZ,eZY0C"x($D^K'5%CD|kL/n|$cb4]Kʐ;%eixAWtX=c+୻nlЦe=}NgH7'[ A28 Y{o]:5P.sLob,Z+B/Q(?Ddַ#GH'1c۝uq;g;4ֳ㲬VqÉ֍6$[KGQwԢ(яvW"2"@[eꇀ8QYfKz "rΐqƀ D*W*t/9hM@Ш*Cf8zcp8ie#Z{e[!*%B[K|:ݍQɊB164뻌E]w1S`-YG1FJhu-ǚj@e2(LZr@0f2\!CHMuea_a"* [%7N8p`clOfݲa[GwNeXĎn`DxۡXМ6}.0vmjEod+mw\;?%wGiW>]{y>DMzg>RK%=h޻cv1=[SZ|}mۆ[ll-J( _2nZWp[0{mEVIOVqt+%C}lseMA#;B}8\Ŏtm{oaw( ֑Yár@4EAK{V(M ȚX42J0Nż&ґ [ZfQ9%/NO+c$Ey]9/q[SJ)B͸RFʍ<H#C u+s6u/` sci`r5I"딃V;FT,g$7>c *^T.32*W*'I` WNRd9d_t꾃( E$tF]|oΧ-콝%؞upW2YHwn_Viu"y۷y(j}m8Zi"2X[_BZFVi?=A+ Dsxa1y>;nL tA6h\eǢ=]w}ye>nLĹy Wa 9b h@6~pޓ'2@}cU3 4 C1 餑qM4z挀A-v>G]]KK;jvmm}=PlDLzdCkEgҡ}v̳wTlc$z[Qk|> k;hkyum.SbE d}sٮ wk/w|u˧{-.L"B(6ҿtZ#ׁ_A"w[FDb!yah2sHDb $5Z2saTcU}(B;ޗ^ ~\gI\/kg1Z5G%Һ9l?=aYRNEWlBWi頶^H4; DzU `Af2f {P-L3Y"%]tmS ,).GDrQPK@` fY ƬF 2sIʰi2kB 1ֈ6tQa_"GJ:]gOlr6a"7י+=|8^h}58vKjԌMDY9I$L ԈHEe55).}ڟ hz>Y?L"Ќe v51ĘBv6 ᗹ'Gp`ĀDS"$DYF*Dbァ`1. %>'qH>g'xḏ* y.cs3\+0̰n/ `-MG?Z}_OOAKc'Ak s%I4C]zЏRsc{ܯA]{eraL\F~4yeFiQnhG4GK|b M;wwkVSe[O1lhZFxkUhdضjl_ٸ#mb;S!!CL&216PH45i{9햲sOsڮ\3̆ۄ=CKhmSzVͱX`G5z"B,gB4IrU37?V™|idWRMFKbEk_c:nbseS"+,I!=n#02@FdXWkY02“&NB2x5 ? d-j#G(ЄZF-Y>+Gcs(D 1DFBdAN2}[17d2c{^%J#,izi`]= #nC$^l b ޏc]mG6B1\+O q].Y|<ݝv& 8z\;8K(֒8K$Xi(* SgecHU̳N4MZ+p$ڒ5MkmJfmWۧu3DP[pE"!J+rs 9'"28 ,[[HwGWm "Be#|j {==]UT&iF~\a4ղTZ 9 50Թd"xV>L/(}nSb0("28Ck Akܮ((O8g caSI 4 CKdHqN\i@=N\sy u]A+  ANf9Ly^A&35%O 9``T3OT_' 8z,]qvU6$Jk/mt}8P=WкBG/Y mq̤ l6^.oܲl 8v3Kod 6;B1ĴُcIpX!u FĎ==YoGK2ax 7ju!l@X6ls̱H]^6EZ4dCYfL6Ȭ1 CФ3IG DȰe``˟񶳛/蚻p+}'p NgabɴKc^=g-ZLՓ`'.ŅiF$~Kcm<:AL=7AG? PA rb`&"5[[׳V8#҈ [Ġy+Bd9א#'N92O=J֣DD$,V%V'ҙS3 o|p C?P1(zUoV7y+Ac&Fox6niK:בMomc7l иZU Qs:emy mz3H%S[ִ EE7 M" ;|)m%_yC>#B6<-gcR*fyR14 Z܎, vPIoaG?Op5 22d@ېh *T#Y 1/ a{PΎS=eև(",콇=hf "bvms -ufEk|3M溺aLĐ-snQd8ghLZyy ߗR2h;T՝Ȓʃ 쪷Ҽ'G0 xs2L㜗,J<ح Kj`l|"2yA`us)~OKCyXd4a 2 %ʑrL s!%L<g9i~q aC̀ r4@-Rm%><:10Hԋ/:uBg)i7E-Vx#m޶AۓT9ovJ{wJ=WR|oc8Dkč}L:ނVgiY2$+hZ^ "qU۾1],EKJ\)cAs )Mɐb1z0WX)eiNw,ZXpswY"/ y4_|{Ho7荮|>]h[w;Ȗ qɾkj8v(u8͔u񖕲^}\)c J8)6Z!"Rbj98&-ۘ1PV:=c D`u(C\f|⒩w_y/M5{ƣ{.3T#V\Pg1>IKb֩1&#LdTAtfI>?m߽]߿M`>Nq.Q? :wvk`oV s/c#DZ,d]I}zPnXk 4^٪FsmGD <6t N%1I6<usBoЙ Kŝk6kN, \e[WE~LjI0|B}ҧg12+"ZyV chZ۵mzVtvw ;V-|]P7މK˻>y[q~n&r-SӲYXa1(I>--ޥYVc{^5w>׵eJk9vk=:݄nJ1˵i5q 4p)RI6tks7q" / "ui#3-~"O TnY/hXX)cL 9Pb IDAT0FD؈*!2iwd,F9c0 E3VbJ7m< xm~xYKa*՚~ȯuF퓶nעc(cd^' y8[TG3S*pd"b+~؟d+8_%.ԟ=.CN' ܃~?b|6xr<.xz]??~Ƴ_pYy&^}=vq$J劧G/ed}CֺRdY&ZZA2tl})ʟrvffQtw.;}?RVڔR14b2/zUc^olqFyևnFL= L2곽(T)h` 㟖$IreiQiAЭګ.ێh. c-upñۼ61pu5DvH6Z1Q?bFV ]h\t_"Kq%ʲzתj [}^$qZ2FBhm̗^Ukd2uQ_=:jxVׁͧ вSֳEa٤bֵ ljddri\Eh+~sMt&O{{_{I:Kǧr$}9q~{\H%)4EQ+tH)R 8HK@3#qb!m$#$rB(@+hHQK$ⒻK~Ϋ5ӯy޹~;SuTuթ_2!a'e\:tp/?ab>X)!D_aJO:ѡ.?<"Eu:L#:'c8ɝ,(辭C ƶRgt64Q6Lh/R;=w؇vcÆ*CsXV$?9B"a/U!"S~M-3%BU>b @ӛP(:j-QX1"HO Ɗa\4i - <8\wW^VV43mbZ݇VCGt]+<_o/)S wnݸv:^F7{4{0&`F*`6sOW}R~a1 -*h(yQ)JyFT[Cfvawozӛ򕯸0g'_ |CO)m |XӠoÃc@V*Fb?SBɛ.s e3'_A+XMB#ؚ-j6LV6M ϖ*S!mʿ4) D U~pkE,(R0o dy@)9쾪dG|l}H~FDpS6d!T9e: la犽h~]T=/ Ki#7ҿE5EA-*F<N(_e }׏<wzWWE.O_{5A;5}>A"!Qˎ}8Zp!^ =uբ) ^XX̫*%hQJx[T/SED! ~3-/L뛃Y+IƔfXX9p89QYt B֙,FwڲEk_s5k(hgBi5~Cp,Hfrcll4.";tagZIi!.F¹ꐨRL q0f*DDc 5QcQD"Ǩ:Qa0/k`|XR{48W(!8z~ĤPG_}GᲡG<)ZBvKml_ :!aABf"eQ6i/ LjVӑ_D}ʢӨL) I45>J}f i!T HJie?QILMURW,oyϫX&W&S37S]FTT*~]M&̗ *ݤ0pJVt1N.ubf}SOOH rn l sM h lȻJH&V`6NBq Ssz>ӉzB%+$`!=Ń&a&'e*[ CDw&Y "[NY2$ raYDi]$H eXЎOAӀ," AABw@*#"(*o_ՠ \bt8lgOb 9{3s2gDFwHa25T9&4'.`U*=߼p>@E-`zv `kwO~7N10{OEX`nA| W 6@l<Kk ̈4cXV_SO=Jz꥗^(ȝB_Obayy52\LA:R:cnFʩCI]2䉈H·;c`TDDDP񈚔[̾AsxF[`%h;؂ PRԗEكB=V~*VeOqzlZ  7FEΑ=d0ΒƔ "*Y+fuDbATjN萩 846l[F$ 3&Ș}VA R=0#s5n4<3W0fNoft2g?zyP?hv;^c26"$Do}[гa*dC؏8X9%u~˸B”8yx;NNNO$cZ`0t:giZz׻>|_%7yF#osIg-6뻱)ᛰ'홼iOŲlF\3CX kf Ӽ>X O{C("2v)?nY 1qkP&@q!ov{8v]c||tG1Fkq'''_ַ}G>}E Fr|z6 OC1X߿5q0yZ1}oǜ}霞Z-wHhq _xò] i{&xg"M֧3a76h}!@@4C +@)(A`)<͑N*Fqs4Zc]&~r`0!;D~$>*lXDXQ2ǃSj4hG,+C`#%2.^=o!Ɲ0 k\Yu2Ʒ{P sѥǿ(ۅA=m%Y 83hj>"jw O}S_1xGDyZx3?Y^ +O|%Q;d|apÀJ)}ip [Q>ͯBOAD"Jsk-wTG&EBX ?(6F 4x19#o ^pptvfJ%ep#" s'(Z-oyk^__ta</"q+\.vD"r|w0}?"wqs I+6+ U҂>EE` `iy2$e ,~ͿV5`ȽDL!yeV{oϳ VB>pz5W?yz-\%Յa^dD0Q]*uʤƺi[b*bYeao*9'4tj:}/v(ݲk՜’+͎בޟijJeHO0?D CܔTk ve{V$찉%n>I+a` ,Xͱ#oыWk<Q4)OOu|7?C3D{7%<>)^(t0/0ƶ!%XJ"|w~᡻&YXwOyZksTv2"fvw@o}[{^AXkE>zVإCfyxzt'-lVc?v(k~jcqH.N/)ɐ\qXkef劈l OsS,sǃhx:V%XHfk.iT!4HPX4oQ$lFݹ1Pp|EH!b0eSq%~Vp;x@Gwy54{7z_y噷~a!F`Bwu4{>G0/<>|~/3Cbf8(8p<0Z;׌h{vEG^¯5nlOyVjoCTSջa7Lj6NC5~xrڠ qh!KH wF&@a!&fkml'^QMnAD"kQx:?O؄۱B$D<#5 emtq~ VY@}4+T>JQ40)"` w/O/яs{ m ayW7rܲ~ "rt۾{_R_nhYyHL|z::FjA B}p~@ucO3_B7lpzX*Ѹo4xX=;2CDPNP2e `q2y$|DٹWشir=@w)Z;K(}gpYC`'E{qYYxG<ͭ+kࡵ J h}Qh?km:!:#uܙ'''Zp("n=v$EлnZ{e۟H6=`6R@7`8잠>MgؒYZmPu~[^"9u+#>PqVfjNpWDt>VDZۄNu0EQteDF+quQg)o<6avߨj3W-5t؍Z <֑) s*%ؽz Ս$ϻ)XIsۮEݟX u-vڍ0(]/"dGx0M#ZM6g23$p"#][(|QJzH4Vs(t ֱO,.É $T cH8( 5_\> =b@ ._9We3Y*;D!D.PkGX8z煑YÝyӹ3;ƣm `9RiVT;/g3~^2cSFrf5d>|UnpD`ܖ}::wÏC{^o]r 7Z`c0 #ϰ\9S"3= )βi .:2|wo@L / 2g菈sǎX̘wf1X+=2[dɰ9|AsR#ݺ'Ou}`|{ptUWZwFı Y#{(h2~u[-ҁ~Own_jOR"_p~Pu#LB((Z-j8vW۴3cܭ+̾qpPJfs vgvcإ&0N+ąTlnx7hp~_h9˯N YRDžS/!g\ e/ܐ4) r ;)%K,kD6tn`>[_\# uOh(R䉍U)ԟ)%_|ޭ7 v0hTr2J)ᶫlwf^5|XSF*5fiŚ`Df59No [7^b7Xo*Vx]jNa"ɖ 2ӻ"nemrI牏4iB92DDp1#Sefl"NoM9nb6BDPamct/鎯֊eDT7*h` DmOY|g~ A;DűC-DZ d-Ӿ}ee_O}\ߣX`"=Gv[TJ(a70 )h5ƸnCJw[W)UDEQe2ܛS&Z=܄تYyEzK mcp{eneKcD 5<+tvŨVVgs>4}СAm(*R[NPt#Ik>ny. "0)V !mHX4Odd:0X+"L=&ftJNbDnEߋ t)"`a)ҠA`6x?[{ tpp0alNhyA""l21ԥ#H1/z'xGG/F)D"u t}54 b͑V@+Wx#?#٢. q|ڵ~0Dvj^$<>fǎ lFlc.m#}{`gyHƎ=:%!WUlDn"nUTI] %3e` #zaL0]K2^0o3iJOBZfk-2I^|@gGLט700Qi_k`PCpT KN=}?3_KɿV/5?b?fCEš;0g??=y9'}?#䉶֘{G{ɞ;wʯ a +w:ovJꝈGL}""[+ e*)g;=89Qr.5hpޱ>ell/yg:&^PEI d@uʈ̝ā'yzBPd6 c;6c-?)ċs'J&8aHG~d,|WךKO ?V"@H@4oxo=ua?F h'DXib!1@D׸qyðDGQa:Wh*]-N yZXj%vcI쏐.pJl}f8s2d?GA(㒅e#t.&_<9>czye ǑͰ$NL$/(E W2"B׼$"= Y̢ @h8>m{AZ{U?;rczUhs3r%j~~@hF1h*ٔI?Pƾ'5 SZk Xq!;s h1hz2R(|I3OT(.7BRuټdl)^wQgIR:?uKJB.,p Ps3&QT]EDpIaL [>;\WJ |%HNY|ưR63UL[cHK^|bKsAm(o^l~tk-lJ+_c>bEx>g? >#D>ڲt3p_MJ9=c!W "biOndƣTN;oN3DqKEb2~pIVS! ĮEDBda;GYPm\ ca oO(C9Y"'K/k HXV0,;IG E<$pЋLLD;64u #HZ ci4a$%xΆށyݔXaRئBKqc:CF4X{, א SYK%!oj%#D %EwP̈x|r F_BvW*zXf -6Fpx4 $Ă&FCi1JgY;5|<($D8lf,uB:p;S<(AlM4|c-YR\&,mK,m`e]XĽcM̫b]b#%&g"DBfA qvgyFU2>3P$*1P[ |2*#Z?qsJ? =֘v֚P LCx(;BohB  fjc Y dABl1 8* m9 (?~ʫ#mu:GOd }?d#"N=39C!!2 Q[=,L|aRfLPh4 VhÄyeRMm)Q1Vޔ:l=6hР !~p_fݹ259(`O5P>9 a"QBS$ڪ0s2rO(b[~;|_ɉ8p#W "nl~ Am:mD$De(#Z3x,*f1! KzoF6vh!@%gRiczۆRPgj-X#2pI >)A5=cH 9s*{5`M[I!Z(=6hԯDFWH>|! V+?(y_)ת0-S32‧*lDAEP :LB>"BEb#2Q4궺 ć40;Ԍ%2WXic,[6FpAP2-)P%e M|6ys_zpUDkoxIJ='>r){ipr蓀Jk$DКHF`O|vp ne{g.% n\$]2 y;N}/XOpQ=4%֠c\aa Yjfd.6QuT~ K }l!^!n"rt(\KV9!XaCL(EV䶁X8R"nz,I `im+Zm(bA,S/߼qW=rU=Gp$r4/eұ1ɭXCCdQ<OnܼyGE"vW!3Xm{MZkYgGp}g3?t1puiqT+R R DTJ",d3Z$ܙ9q@jP 13[ʥDqlpl3t}GT0WyA>~HƉ"vNn 4sb}z,WcjsT΅u u.`1EbAe&/&3C.ѳxPJ6+(mZ焋PIΒkҲbk4NV<62$Qr y˪WGɅ _R=2[D,Lo+*NygXc׌Uw|فcKE]|{/c˪Wj3(ueZqzZ.)eMgpe=ma \2b:A'E&2gfȳBQmo(%8֎`fkZ)U2 1O&T*Y1e.;o1Fl{Ud\v@m$Xar.6^9 yg쥐TŲM]`[ϵAnGa˼.r^T6Տk7lj>$m' uSsa2+`K— 8 J,pSNM(;k⌒Tj34"olO&PYȄh ;ID壤;{R@h6 "49hwH2ˋa'1[cW+wL\Εn𰠔hc (E8=ܖDZ֝Hyٟ9{{(M.3++(w), s&UGfNB+ib:{0l4F}DzO6Wޞ up^z^0fֺ # sh z"r~?j3326Ԗ.¤q_M}c[^.Xn% . \7J͢:m&5ĶQI 8]@@1 N/:w# \eF@"E8GƷ-? F!da;mAX;I4^7 R.]zH̆@8#˾X!MZ{֭{j& /0!0kIym=9 urrҽk:apG2BCpZ_1U>]E\JD5S̅-#v)Qx WLy#3o qzZ֝4dmާW[$>n"Զq_f\*n3Ro9W=q?|A" LtyVڞDEU코tIN/-V/^%]»dp Y^-t#G*V&,2eˡbι?ҵCG0s%>+RX 3pJiδ ;RYapd&fB{fV_?n<")ϋz`+gʠzw[R*"/_|ULٟR I)RtQ}Tq;E19@_HG`De$Lef%&N6"m&n(:יOUҭ(bKXeThѥU/da:ҪjT:rt6RJejҖPl_FdWW^ueX@$,*lJ&)G.R-ԡfjbK1flMDb Y%'Kŵka(6N7ˉeRXUGN'Ck'R:ST}.dJ9ø|eM@D9Bkwf- *Bu2BDE4Qo, PQ=͒̏k2j?[VG;=4˗/_rZcy4B(X~D@@xr@D:NQEQʵ W_Qt ilo\}TE/K'殱P Lzy0g-jQOLtT 8*fqn`k$P?=zfBdzjVEm^LԷ1x=\_3/ _VH')yd*u&42`{im[ V.0D ӡVEȄHKRܤ0O>P&ҽ$kXkA7UqVN ;)Dwc2y@IJ| XcF&pnG,]j/5eyI[ƺI5ǎ_fvqL`cE(@T-,8==;::houF~>B{.ot;G2fT&hO(juy[*ӳ 3;ް,c^`XSeVNeV`,unPR_B: eVr,2 ZNmO % y'PmD QUVj-1?) )Z1V̇j /˿lNP%_˶ެhR,-l9oQ9FJ㎑O&\pA)[Pj+L'*؉+0MD@ d\=U>*Ĭct4Df,#T< ,3[drd~b ,FDw\~鈈1Fk=k)3aJP""# n!(R^]r&C51M|]Ï[GR>A#KLFzoltRHL=c Ζ(u0ZY WQgUzIjrj>y>SP3XfnBQ&d#5m_fܚ%u"]}4#5u[Mx}>R~_ jԮV jgq5UZs:!ɟM3AYn3YL&!V*#""eE |t(>S/[y#SZ d%_??/ de &IT&HRj]'>&skU|b faebH( Gr h8RXnWI\ }#a!"@rDGZ"vDt}᫡j{<णu!DM5J^KhwZ^ d4֯Z AZZaq휈dg;e@RAQ"(4mPU<cz&gp6u>cw 磿3_Tq$@͕'g'>Q_݅A0C-d&T1UX(P-`fr~®w'jCˮW:O+?r7Vj֓}IY26ke%hVDV-ym5*~rMkKOoTܞR.נ6Dks *nVTY'E cL%<~qCgpd&gsd!:K+a7zvݘc]"b$<$9 AZYlQ=8 ^f} Wº3o%l^mZkDZۮ̠YY666LX( "G_V9#1J)Dj;Ν;wΊP,kYso~Vtbֲ|3:$&/PD NȃiyR~smk5eAԡp9h}B gqC!-2w5g|-岱K\f)l9j)Lk9*LﮠWd̐ea /:בM8ob@$a \j,gvcJw|"O70#)!D*oNdaDJ)$aFV7O%S AhcB"cDjп7 3]LcKԿ|>h;bd"S,Sh1u^? i+?Fb: #p &XeZl%Kxd;w=@D |{yKt[{x'~۟@AкO؛ ?w~%uO}ok=?Sǃ>?__uE4}5b;Qi+,ouwŵXvFZ/pyy"v\7[yӰsXˇm-]&+;p#=ZMlEbK͖Vhͬ#4)һ]dFTINj\$dkaBk>B(PO Q[nɱ(uW8 DBaDt(oE,VRKݠy"Ly295i域\yNxvTu׬bVqHlSu5oҫ|('/ͥ,HSDe+R [?r|}hIsvM:Nɶ:A̒d*vNwIs Yn7dIi4ʼnEo<X*H PhI , UM!10>v<巴灞 *I:9,ɔpec2t ŒԿ%F,ӲN);Ѱ j` } ( [`|77yw_]y?觾|r~_}׏zpo^_~εoӿ_m׊N}R]j.@gg%PHW' Zg$R*T* fW$4@R>lI[j\YHu:uxa-d,_e?Uye77X]<__:їM<@VwGΣoPESG/`xUued{]]zi"y\&F~YZs@\Жv:j=ӛ>T`2;|F8-t4"@ǦTR6^^ B Sfӡ-+~-ޖgAe6KscWf_Rk"UE|Zh*鲫*Ħ`[ZypY.unvIg䩖R_VHEՑ_ZAQJ! UR]09BBD Xq?J!Eu^n6jY oBTJoPGc2<贻[DAwFZ?{o/IQ叞Y]@# 47 P3oPAuQQ\玃P7 n008ŧ ,oqUvlkUTZnUݪ{/POsʊ8{t|;nAs0 `Pщa g(xqǟP;wG~h~}5|2MM讗{۬[tNUv a>f.C>=z|'W򉼪0WP{ND|cN 4-=`X.I!WE9JO+xt#_ XITkF?t#R$eemܑL *uy.`uv.ig7FQ\rus;kVE%MqY$WLgx`轆.ѱ.+i:|Y-dpnQdɞ^.K65&E4]Yq?SZ*vU \M\;~}$VZ} ô몼+IUim1ֳi[[~5.f ,} ؝IYM_YYL[ ev ]53`-BDc%uXNd,("ZedBFiED1J1<0*'k+F͐zD/*x! v.=~M: 6eET8nOE>*="+׾= k^Wwr3`c5 ,HR{֧{]!{K?^yhfɏ0<5IPҕ2N1Ϊsc{JH[=I af* ='[]./wCstFߺqQX1# $UZ͏g]8X̵]ފ֠( 3L}HږwUW]5{թ:Z]m1նm-we: :zdůZ+xMrU u\fe3ڡ|ZWXqS&M^"zj$~[APmԡImחn:50v)? miQЎ]ݮhZJ/Ntˎt1u Z)-i}!c%in"VX;apȫLq8$71jm0 F)DZsd<fg&'fZ?N  A9L! x$`0z<-{(y9~a{dlxaMla>W8To_o?[oˮ ك¼( ꉪ`xޓ:)LJrPo?ȗ6?ws|I,VA(XNt*f3;Z-\ZJ>XvhOV ڐY~rW;bHzӖR=U렐WCMLڤ]ԡnйnZ5Ѥ%ksZФ9wr l"^]U:=UՖ!PܬoK3vwY0fl?};~94;ecl8JD.ԹZN=X1F)%cq0 ACU0hL CT0թT*@>zN#> E`6UD!y21 rm,?GfA0``1ԆT'6,414FTpTG!%C!,Ħjz,hߤWg_LJAt4#( Srdr\cU3qPFzh| 4+z+m* *cJf.˹\4CSUfag)9O4 `0}? #eT1W0$ mȢm;Me3up{J7V@uEgjk=MQ|eAmle~OC]ɌKYo$/[ׅS-;ئ5,L{Oe2}c ʽT~Ǹծ(o}_c=r}GgߗnkM믝 hXT[A/fh7}ЦrР@M֮zH4$x[A~I !\ҏFE=qMPϽ{e"mBc'3,9`{\>ch3õkOa4%՚#¥ ,#˲}:rN~ "Y׼2x]'"3J45P~Aq|KNDw:0,}MƐ~X,|pTmO7˴ \*8Rk9cATRN>=GBG?hm'\{l}O=.$@쪾GԖF]-&l%M шZ@H}dmXٕ[K8Ne%FW`?4? Oc7zE[^([9WGsĐ|XQb2㼉ar\:.@l^UVahZڗZwbԅE7{5dEDt@Iu{E2"^c^R wK '[a\˳gGrV7d?yx4@vƫ~vT_ϱ%:?cē4W) M?#L;'f. 0]$H) @)so鰾XA)p5"tf98\h~"m i1sM$0$1;wEd0G;㺎uq1A>BYkߎ:uXSuV3p4LVbc#}^;^#s/"64Mō11θ6:U)` @i8j %qݻ7 fa9ֺkqKYd[ ʄ4IU\sa-% 0:=H0؍V ۽mf̤ p~$0Zeܫ0ܶE[m.UYD|zNއ.~2SS]fbQD&2RuIp.Z >c&ƫi,TÜ !ch4RJbTT9YUxgi gG3vcRJιv7@t05j_bپnj?Zl3U:IYIٳ\(f.˭̵2WoI?_hm}6m둀h_&/k{ " 5w`NCexXYA8='uA 9u:^kt/.QqWȳ빰dKPbk&&WQxպ=\'P4Ҟ61b@Nv[>'Zi"r yRpεy^gH ȷ39ӁX3.#%N(Ӥ8UI!('<( ɏƀAevFZZNCK3x~0*Nj3ih sM=_Fۯ%(׍ԛIǧq>$HCϲc5o aLxB L)/@i JDR8>gb;+ ]<%NjgivP+,ش-qش4N M\.(4Zz岻؉yقT;rEv>|nZogoĒLy˼4vӞgޮ7 ra,+ @,o>^;>tyF8cz4i{ܕk6q!`& ?. 5 \!Eh8"htX˂yтسp#]"]9T< EiӘfVTgI)Aj$ϕs^yZ*դ4WK yh(8qsuŝm.M=Qs Kq$IŠPy@TDȘ[m-(#<0lʹ3W,caZ͋9 -oV&1x)P #Lg)=}o&ͷEozE[5Mvu4?;38W(*J#F^qI'E/eJTjs=$7t%]vuygCvr0 7n9Tb^٣Aщ 7\9#$9FT~+0%=:~ nuգYûGW?&QqΫI4^%h Y3fJr Q+!Z)e p`̨Fs4^eM%M"ΜG>/TDI|z1rGQrTA>H oڍ?V7ZMOgdh9MFTI?3?5I1xƘh9OJw3y =6hzz1$t5uܯTFk] _58Ӕ0lxAvCwhxwxfz]Tj> \aQ#^#^OswpyW9Q,qi1_ Й.e]eIQFc3 #8hy.&Z ߊsu4aGhS?!#Z)mt|FG(e焷07'D2S/|F=X(+ k90I1|u(A:stFOВ%]^h:J-X&\V?w޹Gm;>G!"BH9g\JܡݾgDpwdi%] UzG~)z|(.ԮZz\IFtCCӣZVvz5Z+jzK-OK*y6gw4Mp` ׾?_E,W0 \mFD!cl*qZkDMA#\(1)xm=2OXbKy|*P5 b e\+<ȃ:H)r>(y;+Tj PjVZ{R3`={߁la#M%ݗh;QZB&k#ChTHR{zo=HH~*ڠm4 rVycד=#Wr;WMb zӅ . CT$> mJ4DZ`b l>Vª/І&J4MI^{@z7X> p%[-Ơy,YJzs?G8oKF+E j+^GЊ`PwPރsmMq0>֦:$RU}u<kuuVq r @k}[nm/1b&1F)133vdkl1 (SgȎuj0h%LUS D6JGGb]L\e(㾚*# Ah&4z5anQ7kQ)UہsXAD)ƍ7mtz[?c7V芵# ~& 3!Ӕ4py{ q@{OpveEŬF ʀ/pUsoqG=*O'.1Zk07۶|{^VΧ@@jkrMB> r˞C8"G{lP:w>$i9|S5ؘgQkFcMc 6+&w8^0 @3tRbZ0q0ZJ$9+,c,,:Y@4""!ĺuКGHXRB )xlL׊E,7oH[YL:c7콩fFi$|O9t(k,uP y z"~8g V }Rsnq,LT;3 $FϠ. (m q57qgeAa$JZC |߇L>鞼Dv'J)%݅jJ@DJ 81X>XO۩2lذ<)RJXdOa*R,nȗV`dxĿyK=tNANJn#Ypέ< V&WJ[1U5*$#X+*1J`_&=\Virh-JR`ykbڶ A+hTh5aH2fs a9J JF*|c\"7^0_NzOi(8cR40d43$IB3N@O=" !* Bg0.0W.|!ࡑ)7Jq 7cIh0hF:#d|i4MV[(ZZ/W"\ !`G5`?{r Ԫ΃S (1T }q?Ժ[RNSFKV5dփ7KvFT`4qh yLx:?03We$>j#< PML)h m[CPFiP\0Z(T ]s8. 4WJ)iR^,B&Ϭ7i ͷ亩䄧D[GJQd'@cL)#0*nG=T-uuڷV vXJuehU1k{ rK)'1D{&9T* ="}$dD~(>[STCOI`ici9Q0K6Ue[`vHDdx<#HRAB|.x9j5@`lZFUtG/CC[WV4M=hN2n4mUHS%6Ud anP,r.3jXs!xEQTh[l"Rf֟F#RY @6F`ZAa !V (ԟ֚ )%1d2HX.BmD](MSd"AA +AFd]Th1s5tL6#ӈqZDڗ1E.Y0 ~QJYaƏKVSjEDE[:#Yt 2ڞbԏܰfЧaMavv6@bRZ JP(!l%# 1("&Fag!34y.!VƉC)eZ~60 }`yRXWn"1 5)MSs:cLv"MZ2hK qVc `iD56!jc8\*0ZJ$IrAR 1Oߎ]o-K 98ѮtƈؖXu^6c#}TaC+JJe3" QFZ$TzrP(A -٬٤Ny\xfwצ,6zk`u#0³Mz#\0d>$ŧ4iJ)h&9E]ϱu)oJtC$KZ)(:c"> <`Z/M'FQD"6ю"YlzWqd8:[E6v=o UkSm> H1ƀY ˔QI%qǥb1|b"Ȍ}&w Rhۖl:UȻ[/`|b>VG?䓅Ba3"1sss$)JۖVccc~qiL;ZNiZXA0knR{GrzGagD yXF= `{`P$I8&;KjP3j+ {_ؒ ΦXPk9H0 l3lSJ]6p\;550k/c9GFS9=h-Йi IDAT 83J'2jM&8㈬W4a0]M5,Y ML Yem8 vmaaG?~;vc{,;vشiٖ PwUdrѷ-EQ>'yT*q|wwyCROd)JF9e_$*ɂI|@բ@ͣJ<:RmtRʾPP]ktFv;'Z4B̳Gk1TG>PK;O<Z+4M=ϳͰ):*߲׶B ~@{ȶ!IJB rLSIah2F~OD|=elt PٞT*J.3H ظ]cg,Xg.MS"讶ViwZ+ 1=aIU ({|!8c ,#< 4-d sіxSc /ӑ0<?qw]osվﯵ%ˑ$ "EX.i7YV?Vb877W,I aI+IED)mˇaH9qPv)PD$CƍI\AkiӦwߝ.ړ صk8讻?~T*qvږ-[ W~et0mAPs~l-rƘbH,^\FDҎF;0MNEQDaA@K*1sNLLМ_J$Ih#`A3:(_fUt*C3Abm/I7Dg@㶤]BJ;' t]Jrz+12`3\RR9rL2 e9}kZš)& 2F)1nM-C|*# @@8^GN P Xpt Ae)EOMMBZΒ˹IXqn>s>O<6^ŗ_~n}v=E1~;OJ{T 8. $nGTZ j.65$kb$֭[;J FBc/c333UbR!dڛH沩yc#0'?yg|S;.򫮺Z(5|z;v89͋/k9O:$hJ%D~aaabb""ʖ099I$l~~~bb\.yXa pI'1ƾoҜ?i6KOvۧ?ik`/}K{%,7o~!(mnB,'u k%YE=)hqn=Hi&]*McBm0(0ĮeFxiEF<㞈 87Z&2xZM h%1rrZZ֣p Q5>ZzԾ3u7{O5נXvYΣַ765ԛ+|߸!m {ׯ_fgg: oRTV'''ir -B^!'&^CJIl*NHB@Ƙ=RLD2$Pv7׍`|PP䣏>JQ9&\.GI }OOG6oLavg~ӟЇ>7u =wrXǢ$IH",qoZE,%mH6$IhѾYwFX 4-<8GU$I B\r%4;%Igff^x*F :oDQD['WUGuuW+b]:?l Y,rxO NV|k^H IW_m%yBW6P(PH>Ͼ/>믿k=9t}qP#0^YNzt<c!kÀi8M@5-B[d("#Y]Fd@Ղa82D4J+0HߟZk$dCh4KdIS#tֿ7E*m@$qMLNiB:4uf&% 1b pn5?g S@.O>wEE{c~_veO>䡇׿Vk+N[;$I(+ ])*Ƙى K Y3ş޸q+Šo9眏rt0 Ã:O?O;4 l7o sA=qL>T*?ӟܹs}=:((7Ƙ-[xƶmo|cu%2 r-oZL=#f Vb&g6V%'Oc4N?w.A|߿+I2ϖ!z1:\"6 9)J/yK.__iz~K_:Sn{޷e ^gZP#"2@ )GX]:]<]Iy3r_3R-6^EoD -#ˆ2⛣(JUj@^=.a}ldWq$`oPm}#ZP(cs^{EQ9#-k{T䷅_HӔ kvMGVF%&G)566FP/| ǶlB dڲe˧>|3կ* шװmQ%I`ۣG裏^p_=7x?|կ.(=Й~oh]yc?Cn0Ye[kM4W pw҈>{G袋=m۶]qw;۷_r%B|>?==ݽ70@^:^ɏdT&^D}x/KRm Ro>ShVMd({tYu9chPc(ƺd/ s ct;MozE]tUWx_N=ԭ[AOMUd$HOOAgAKAh Ѥv]y4r1٫u@Mluv!^(1i Qh2or-tx\XZ,Zjhq$S>gLH)ipEsm;ZeJ) TP` #< RmpΝ;xgy&裏>3׾Gy>(hCV儞+^WA$7tE bX,n$4ŕ8e];">guVE9ÐRzE7o />pam>38B}ߧ1$&Is9֭?я^~wmRV:,?}o[ֽ{W*R铟d>_~g'?9蠃V Galbo|ƾկAypd?@=__uhݶm_rK^򒉉4+ /˗Zc=zroDDJC#m^sDRyի^e򕯜uYѓĽsOb6\Yd=8)L9}]Z%5Y󖯏 n:11qDQO|E/z-^!1Fۼ3\%] K+2@IIa)DMd Zd)ZQ#@q3 3`!jr0aJ%D9/9p 0n|er|+jCԩJ>6Ș Yo&ò/`2I8+vB1_jj^>|*Z\'''wqaI)_.)޻C|ZMm r:=ׯ_OV Z&)CM)s$I}7Xܱc~wGu]o|m7333BrL!7pm!bR.ˏ qCAXeÞO:6?駟}Gž{Is=yσ>x1@I4w}u֑2?R;v`x{챇1y{nOϏQ Rz6mtW87oެ~}QﮑBήn0Y "ЁzrGZ71DU*.䒷֭s;Yw{{K_ZVi!Tch OvH4U*u.[XX O[SϺڇ1o)/Q뮭e6uZOtqFX#887TG>o͘!3 j@DɌT*M*P{V1;\q5No0 sH<@A4`Mi ӂI߾dz3 -:55U-W?˷i⠱fSh@Wu+bq6r=6ٚB$zNޡ*!$rQB ؼyP֫\.Gl߾ꫯ+/k+_Jstr+ ɲ+)F!-R\.EP XnSO=iӦ~%-=؆ )Wm۶e3""w!qGqJGtKv}pE]F2y!RR kqیw'LjVFafrEe]F -sJ}tu.~ ^@Gy\@eV=To,n[tי!91 ."as;)"nʋmYioyXZ@=ϓB[6'v^mfL=j.Ś,V5X҆An)t/qg$$IoۋED|_d;&Yfbk`-b1&Q)"z p`Fyh L %"e;cXFd`1M }\ @ 2aj}Ƨh*QJ=ÿ %snv-!zw|ZpOO{_ܹs˖-֭}(* $c8pk2r*w_!w}k?G z)42(Zd$ZJ(14PGVJ$&:f/{i ݮPq ۷o?묳`e^'9<7a{~zzzbbM9&''殺*Oti\ng)7+g9 ۥظb[MY_0o m۶T~JN8aaa KGg_k~R0-{LLJmjф {._Sja T3-V:*JyBx1izr5װY#oB8Ir Gyk ھ6sSm9qh,K4pZV;w_N0rMzW+5ta tESr9|G^var+ٯ}k@G)H)i[uZ1lotLMM=c?[?x[ߺe˖  /0 ~쳏wrjjju oa]^))M7TV'E)EDP3!הv$+3IުT*֭#԰+$)sD$ڮ[naa1F.cc#~p9Ri۶mW_}G>84ߑFO)]hb/J[nnٲT*۷o'wFa-8 }K/M)4I8㎣>ں?`ywr!HkZHk=XcQGv?_o>8\.}sP$rV=NtÆ q;ߡy&c Yl%eLX>?-N(I-uכȆdӲ""%Ľkwlݺmݺo֭[bfғ,Xdg cMi:uu&hh(M>0%iM{_2%[̖TrV3hD%*|ȁ|"r޿5nڎdABRGWAACw?e@1ǑಗKs$q,ZĊ"ȑGTmfTZ1??f+ĎWQ*eCmjW 8.'A Ԧ3RgZ'lK-S8Embַ|il\p7pÿ˿?묳/G?Rzk=1AG&6~a{_~AiRQJrROIvGGNTx\kt MIb1PvOSqk3"SO=U(<ϓUm=BZZ|>VRJ~邏Nν//^WӦhE̅|>ODccc~]*nᆝ;wq^{nF q#bB=]s֭}O-sMWb,CzڶFLwm[{&/ 2[hkSvX!3Ok-Rڵkzz ܀@2.MG5wJz2ȋ3u#}0(Hǻ9m!0F6RJ>fGG^W ?Zi1z'r⠅9ˑ%Lr'I,J%voq0n޼vA`zz:ϓ Z(*}i ]v-YR׽/Ϛ^Ѡ|Cһ|>O!B[#tP}ߎU &kB<T*PdJǴP(aAD;C0+R/U%ætbu$keaok^sGOLL/?;C=o .>O/\ P&/IDԀ lo~K_ Mf}/:vj ðZ@ &_?K*r\bq~~ܤrL1xkn!*vۥE=\ksdɻ6TՅU*<F e%ͦ"v#ڳvN rD#4['(_^Q* /yqՏX?hl aVq= Q?byZ{F@mЀ@q?r gE cIgW;Ip=]LBV䍖)͆ɖboo .&Ry.k"V|((ĤaRz2l7󼹹B""-Г%SNټyGmvy$ FQVׯ_?77WThՔs>99IYƬz){kEb@,Ya_W$I299I9bN&tP0pF[-))Ģ nݪ8dνZ2ɓ'3yݺZ{#Νks?~Tn%XmdTwYE_k*[3$u8>6Ϟ=a֪8T:扦!ښg&2Meɟ8鄉8M荏4 o{Nh뚡ޣ97GgSc45M щcqɱu|ci77!4e6 k?ctv8N- UR"q1 iBΣcRcroG7Xl7Va!4zs|IbrE&34tr(.ǩM$QiM~h]bbX"UT8*:P ~jߏBDoMSGifuNm}Pn&e| &PjSN%ZTrMx6FÚ|Bȝvnsהx2sl ㋰:uQ'S˧ݚsm9뭭 G?q ".Za"5C+r$I 6;Gsedlwj6Z"q s'G9 mO)8&a62wEGڸkyaZ$ &zlE/;(:rۢΌu *< Y,&ؔ}ԩSFd]99i#O$64/t.g4;"}3i6vozJ㈡Qkhf4`O>$~jf(OH6~̤@t2gpu ·:&@#{E$8fwҫ)cњ R`Tb BUJ_PlnxXĞ:-mkǏϞ=[#Gbdt0ȜĢ`*&DS!6OGN( qID|L˚oMSsV⮟s>83{TÉ.mMD09b|2D"qBc4Fc{>ND1ӳ D7Zm`{ςdFT1:gvub JC̙)*rܤfY3ZjLz藅1&I b"ssFQ>M4fVɜXj/f22jV^MA7Ɗ01$ȹ;f`/_9goǮDDsϒp:Nݎ Tu:D|dbYp0eYU_{ G90hi68843э.0_N%41`dcWix3y:e4l1շOMoRڢCwyN->L;ԀfS{h?Fc 2ƛcԠXXu3g֎q }+kw\;DD|8tb採c``0-i\ uSQS `2c.Sg-ւMM$H̤U(xKWn"8lDhL!ɂdBc؏e]?k3ndj9W>#|ƱE$Ca,sdƥVb(sm#:h±35swB^ZIJ1 M/'ULɹ5 ᰹6_TW9λtZEDTGt%8na݇N9{KF݈-J$&"h&oME/>[~҄'zv%S5)|4[<?&`jS;t\M,L-N[#f?BѴp_cZt0XaPsc2c-:WHG,+z̾Fh}Jd٧#u0>{ !$i.᡹]dY0st:SD"SqN?vg.M';ߑ5d|Nu| )-6> 5E-`%21yjO$&E& 3rd 2T9[Yֲl UŜLsr-gDoFjٛ\aW3msEN;˅q?kx"H$D"7vy/SMvؾID DdȂ٨2d{m\圾R;Vh/QQQ%Rf&&U@t(|Pr-g9p%\,(+4ZClN)`sQHR1NtKu9USD8ŮHF"H$D";LZ'-&34N "")& q.O٪qaJDlA+Ծ61py8tBMeՠ֐T6BvNdWʤ&0Ų (t62`4!8"Ʃ檺7~Fom-&>+GoW0Ħe%F.``jxD"H$DPF#2Z0^ NL ̱?t_(EvČv[4I@PJ`qlp#iQQM7ں{%޶^M0uU6`e_H~LUIFHUE ntFb1T߻j ! @ 4rT#af ~rh^T'7/fffLbRFhjb|U !k`ܵ6L̐"$b:2dnS1@4>;3ב;[ˇL\G "bro%nxU-=#JY[ipkӕmx:CyJiE RV-g嗾r)iGu={'RJ5sĶ;:Z$D"H$0ALj1Q`o=lF|-!@(& 3%,^qB:x/!@PT 6(=Z1Fhw3+\De1?*TLTgF/lK]'MՙoqTze]׎ekZP`ˎMeXrƵLӺ2zWe2'f.]םD"H$ |7b "Ve XP&v`)cy\2`Y;5us|.YaS7}+ C RVץsy'o,["fs HNf 4?aZKT9OCGŹkv1F=V<9W[9v|ʫJEQ"F\ (c-IjI`Ud0g e&s;JN$D"H$Ig9C0nLے}CGfl7[ fa92_gizW"S"C8 –r:w/kFmGN "^zRKke&#"0M<G}tuLY7qHe`_ O~=;5kΗp**]L_!XMm-9$ٶ=,3H$D"xC c*{Ӝ{cʏc+HBuUElp6[;vPmt-a5"P"0e EY ׋A]c&QR7.&ӝGE``̰ɕM3:}3 )<'cQJ *;W̲۟~# _q۷-aj$pњ;}(* Sw$[$D"H$eF8G;й{fS[vmhx/_54?GoTu[yv)"j@J- IDATB%^ѯzu{BI]KuykZ$RruޮL\y䔻E/wՑavHQ1gH KǮ[ڇA bHBV2ӶjD$)y;6ItHZF"H$D"qPLpM{{`Ʊ8$?qȸjȌs%cA}T&c!-rc_q Q "4%DtpEKd$grJ5[z}Ϟn-[Nj6s~b1aҵ/yylZ]ZDai|*YSazb$_P5y7Jahwr̶\&_ A(z~YT$##ld@e $k}!WSyn*FThET;͌z px_`Xs QeQUUՠ$ﲗR2/f fԉ1̜7qqv~lֶq!6qOYe(@'ѻ|mp3;s^92+rfHo9N>W!^Aii'蹟{̯\ؽhPUkev^SU`0w:(|x1QpYN'^YYkD9GD(pu]#GB~j+BD1IH$D"x0OMXAmqo?:^DFV+oNbجB^gKZVUo1ب|d!8'2 CDysv;rXmyPfpM\ɿyxÿ+'ʯ˺:꯸VD?ޏQ2) :Q#"9ⷈv^in kҁh^ .{j(X8Z>:b шyv[D1pn766z^ՊـDZVk0y^uQ9km]rs.Fu:cLYy{D"H$g6bnq* >*Jb%[ll=W-T iK~gPB; 136wLrcn'7βk1c`wttlk7>ۏ?j2|+.-w"@}Xbejr۾drͼMSOt "k-3EvTH9fEG{eQCZzr*ZuQUUl{_6Dt60H$D"q1]XDZ3xv?'\">om @L79ƟZAl5AàT]9:3::no/Z]JJvd RľiU}O\_;˅~wF2ܰZ5r5Z|r6B",Gs!mNqpj "a}ʊ{뮻N:UUU^{mvM7E/ `05!ut:`00hpx oZlv8D"H$ sm7v!. dDޏZuGeyS9[AHUDEoHYgañ&9w$q8vh6ws 69!!C3zWMҕwZ|uCwe-[O/I`pb,(,Z3QeD;'}}ּ',}LE"z7io/j_Շ>9Gs.^9f ѭk7pyyG uaf3Ǯ+@O$D"Hr6.z؃Ѵ|-v)~3s-HPU!)8Tui2SPl-#g.v_QQ@0vA꺒p9,w&3D$gDrhYD4enZ⛌Y1u!(%Y>ek_*,[['~Z;;~YyWWWzNsP'D"H$.R.caoq8@UUgfb""FI?Ǐą[5m'+3b[? SCQ 몬l;ȑ;"iX ]@ S92ȃW.A*g! @qG)3+;@앿~oXq"* g#( zOG0h2tU amNN[ۣ}g4A@lkH;H#2I0ɒ6X%T׵1̙37tӟo1nDE?>?9ω~V5B"t:n?Y؈*}{wygUzғ`8]˿ˇzرc˿|{??9uԳ׿Gt:;pM7b͛XMozӳs.H\(@{Hǎ1R ` UA^D"HN Fcf3B'iV8enp0iPlkgcDvw9.3H'ҁNL>gUU o!Aec H'A%V˨9PN&{6u~xG*Jދq E~PlKl!DQG}ؔ{<%(:\;z,PF cr;wjSks+TwտM Z1!/^Mw}Q;yaNSD$$a33vp!twإUCp<ы^lEQGYB,o~sTbYVfQS>zƆFW,oouWW7SU^oy}}}uuuii?oFy;7o}+3{wqwQo|sp꽏IOɐ8"!DTuYb42QeFbH@Dd''Hb9D"H?hgv΂O㝱F4T@-Z 5U!v ksCP cLZck6B HidէЅeU&8ߜLg.gAkbB,!!ZԨʢnv*ef !98yCT 8 ];&ޒ1MP\,E$,{CbX=B =#<[n+P}noWկ~woxn喕+鬭+W _‰'z^߿ꪫ,[ZZ'N<ιVѣ1iY|lR7.:eD";{xalpj})1 P(5Gf^ - Ӭ0iMi {b6-%euư7J0b22-3eFx1߃ aZvU&; 15τD଩;^UDud"u.w`!)t`<]1h^'QEQt:`nF,9.TժrU޷(vjȑ#EQ|;YeUU/˿(ӧOw:;-iccCO~򓗖666:p8k;vl8`zu{^{mTH~?Jɱcb K~|#H]w]ew}w׋F]V/~Μ9s]}ι/QUU K Y-eYz4TU;c|p=?Pc*k:^}I!@J_x?P-V냉gEtv:A"#֥TT^^R# 54y@ @R q`[_QF1 BPi AJbBŧTH*U %WPPTWBH^ z (Cpim==~tXVԊ  =/8A<@EOPB0 %^JB HR_ץR*{@=P%P#!%<:>|zfGYcC5u@ c{csm`igU[>WBDkؔhKg{A0˼gl&xKRzX1\/U!Vf׃bg^(zp(@n 29MV,gVkQmd 熡n~5 |?dmDѯ%T/9L " C}}vLrV?$1sn?g>3AȔ,O}S}saLӉ*eY={k"H|Ӟv嗿/_3}m0x^/뮻ɓu]_wuwq//ǫj2VWWO>繪cW_x:VED1=jYp'vb!9D>d_~Wg?B^DHþ"2˟o~KӬ4ڗ-ƨ/p`m-7:8qZ*q$ɿٵX ]$rȴY܂ X[*82o^l7B LHYY$ vQ!u-rq|z0sQΤAQfB\f<'S뚫K&+ű`g6ʅȀ@%,WZbaJ AL ڥƼv/ms>;wl:@U0!2M9}7* M'ؾ-_˼GYB'tQP0"ATX;;&p0Qf1vQ!" 23-plWtBh/ݾ6W{Եy7{r Gfࠊpn|td5|1B]l=bת[n宻g>g=ZeV7tsNU?O<) !^nnsu]Zwy{W~ʯ%/Pe?3?sԩGO9r//9sѣ/~jD7nz<_O+_ʕ~ы^CTaZ&sL^3eO=x 5o;~}-j<ٳ|0)#YV~/'~r8AUʡz/׷nC.jF:>ϺNAkX^Y>y(|'Ni!ShiXW(,"2`9ԯ_iX?T̙.Ƅ_"2@t{A%+ 9w6]#whave f@&7FHpu/,:;[``loN_k#~.,pUUg Y_/O?=麇kgfk<ѕ(q2 0IsI>f2Q B)+`Ȁg^:QdXb9.vMJw3FY *zt򖱆"˨$u|CW^>xh.j4Ň |3wB,wv{grh)Wѵ٥;6l˯+Zg?O+FJ-{+C>^X( 8̓}i4A2 9st#sZUVz5hVGXZVLQC _§?+++1%|׾˱:l).%TٳOyS(=J3_OcʲVO^O@ &|:V0:IB, =u ki-[OkRg GnB{OjّAkYF,aYBڽ7`u4| 5Т-bfeE$(8?l7]JJPO,;2M "d  Fe [qǟ|CYc׵J4\rUPgȚ ހ;(!VՒ 0b/>6"xV zFjoF sɐ`۰GUUf*H +o}?DZ%cbp.u~E鰓6vgnWBTޠmwi505j.kg:cR 1HeP-,N-Jr,r:缳HUQ" ,?m]Yq[k%z0h-I-L`: 5{nyٚO~^-j~TQmurZΈ4@&bd!}r-B04I"^W>z@8l >{6VFʃ+Z9 2,; __s#1ngy+CGF樑Zo25ԧ󓟲PH[C 5p C5$OiD{er}0 3y_2 `IlQPYfZ8Zݯ~㏜/ι:GDal@,'kԂ3]Bqvv 9/x|&1e,~_2?^9T{U]ԡZqG<1Jڙ*CZVV bxϧ>_k>IDpMZ VZ $+aweWdn:ohLDq (f &@|b1"[ P !J?w/\JV"⡁)'O|c-WB}( T0Pb0lHũ:c3n[7UXV* LE.iH|{ʂ%+M)8f F&fUh:2η,3FmJ̲@A*U;Yt^K<ۅu2!Pv48q^lCkt)kax0[~JbL/9{clխo0r* PK~Q6}F#D8~ԎajZ2y QU1kk_}K_G?/vWz뭷vEa +++1g* ;V > Lp{w},P$V0AP0)*,ࣣ B̄eDD0j0P"5/9} 0̡ *`aj?{?XHML @AU JERdPCh_*%Vg(DcA`Fi_qU={V;f usOEYO[AA1JNh\V"-w֧6c./ 1,Bj,@C j`"s GW|o?/{-džpN` 1XTR'>W+3=Xce/吚4IY"뒨#G(E 4qDCX>=UU6ð1@bۤqZPOx"e2b0)b1*`XTD+,oP-UO45ktx_| #@0 I,z_, yNZYXAĀƋR___1F!-KT @-B &(Z@ hNUWRwtpB2e>i@cĈZKl RIILqr7#/b !h7|E c(X@>d3%RBdF^lr5u;3u]wj= `2DYTY(@*)M;5ƒ:Ή|GUuuO4Eΐ3CIC-Ig%R"(Ҧ-^RȒ`@? ?G`H-k-/DaRK8=WwWW}efDǭ&qoVfddȓq9?y[?h[tKc;vx\vSƿ;Jp <˜tyw q$캄y/]cLdGkSL<-t5>]z,iKZA5֨ɝ .Mni5˝&J#o Qz«*8B3#j;?t- 9OU(} 7:?ύzCe"[rIֽl ]QO|c$K$hX<R[F!Cn&by>g%"h4֪veYnooe齿psollt:~4[x ǸU@0;v 'oulI3T$mh01 "6<D SZR Ez2@U0C)Z  `5OdP|*%4p2 #%NzO QDYTVKuv1QpNAJ!,JD^=!mgӌneU/GH#g׍[6~IɭUHl&|V,ƅ~1ftaA gIXD$4%U8"a YlBBLCY%~N"TT2*K(Z5M֦< uƆDYSê2L]MLZB7PL)ĜJbHnY^ycԸ8Ϭs8BC1ƿ:ycn^וԆЉ9rg!#";-j58n業|}Wc JΚpN6dT]pP<~Ҩte0E Ѳ(:!:HjnLnx9?vG{֚ړq@۱+bݰhj}/8}!W)3Ǿ!=TD0$,ZUMSo?zs4\PĈya%U$ "TI4Xf㜃 gZ`B*8l2m+.{ͰOdoaVVb=ؚ\awߎCKcga8 {&Zv&\(BHteyn(Uq#DI r )iPUUnWDBN'0{^'BZuc,#Ʀ Px稖 (+Ĩ**bHITAJVU'eT*%RҔC EJP(Z-"'ƱrXJh~*)" oqKE2KMCY S}$E8ԝIG=x:83i@]GY0~;?;"aI(A|אscw3V UQ묈/1dYbfKӣNY`mWTXDW.td||Hj"![ޡ VO`B`˜l,q'k8v2GDথ ~p96uYEWtQՔ=ZiKƘ(cOÀZL-*b5 GR{@EIKJJbj`BLBVIXH4%"Ci# +`r.'x͛mŭvΒHsQ66>JHebjC @131Q+JO<'/vksQkܐ4.O;߅dqm{+o{?z* +|{#k`#BhBbFFՓmwуJ@-  X>f ko+L /!de%K= g2O/ht My<덷 s&T%[^80: utccv""J+ƘּDR:b\SX>fR< 'Qk@ -" $ 2_BS>!VBH#EqqMT]񵠒=K.Y 4_hGr#@Ԙ!PLF B!Ԉʙ{~jՌ^Qq,D'&REL`h]״9gZdzOlǭI-a1bz^` !SʙF*wؐ 5PMIUMLJonm=]?&")PZEt<fP ``݅|kWnxIս /%00@|g 3hbw, w&7ؙzwgȗCV#Q(ךzןn]`ܻy~M0 p@JP69+z:^7DE0$4i* ST4wL>VZ5M PQdaAkUf%"9gk{_^cl}pln/oR}'3;a_og:"o5 3x(T$<:0'3]0|"bkU%D_{bYgl 'YYub7 i+hVđu~3;]NNx}j{~Կ뾑iV~ZWVdaI6bP7f̴V}">򗞽Oߵ_ÎPq3<^k1k9RL6r)tI~L> X}KVh|pvџ I=QlzWwXkSפԘU{@+}0Ƥ3}1qCNH^[61TR60Bo9D DL D*2P-x(X#q(a? -ܟ@R-˵C21|1A|`ȻWΜ=%w!7;L;lQ*n@:%sībdI2GRU( >\b t rdj+S_8)Ͼ랓YJPZ]כUt8?Pj+4OV-A} {)Qćv3j9]}ڬ_ښ ׊GmOxͼy?WN5 Sۜxb2mmW C8-Zn:Q7cA* H@)C R!MI T!izL8J IC7Y4HZ3{(0Cz"lw]})^w=Lݕv0JIqu o2]\ۥb70]y{+[2ِZ{Z]*o g.j`n?QUG 5x3?ɈJ4XprZ}>0Ͱ%Rt+m$#q'RFS$;}Ŷ׃Fz9_@}$!ˀ=17\s㋛;=#gVP'nA4 <đ#Jl,3E{y8 Leg=(`tK@6]ovۛ: 4UhBz4 hjV1T. Axc;vE\)ft cW;ثhPUjgtDD`FL\=DÌ+.蓌=4y631"%(t;8D44ȺPnRN(Vz,7z{G;*2l g$Z_nIGkͅki9)'(欋k(b Cտ^.B?8ƒcKeyX IDAT>-4V3'k4im֧T贰 )XH}b8ѧ"ڿR:4{?-׀ Ñwbd`OPd3gsUW. &uм(o$cۅAt7(b>!HEm] 5WV&+f&+54P)b,qo>Fo _4I}*9ƌޤ!8@bzoJNf5v%JUzloIiV'DPZz6M2B6 `/+&kk?صW1C#nQ<):@- D3c){^F'KcR؈+bPmVddí L7Ύ\Ⱥ+s40@v*p'!wugR CW7bgfHbX Y)e^ϼ``њ.܈PR y!xo|:,"*h*Le8 Z=`cDǹ3Ed5;&jP!/;d[)h.@-JM9Q<=fJ'2U)8"mD6uǸPEl $ Q*@o AB!H,ڸT; }bmK X65Rb eDQڥg%֌\y I۱㨓nUOIO\}x5 q(5Lswvg I 2<]n[PVUP*E`1f"cL|WtZ% GgU >ؼɄ+ Ŭ%!:v~f5ճËoKpZƩP32LyVkWzCD!wA\NWGiQ:M9(x7j9cB?)\| 83GariP6Gf vf7Jڰ@IK`cD%Jp4`}WPGrLD4:E.!xE'zR9XIXIvfKPb*Ԯ"V%jpPv;.Lb3M4dgʎ9r~4zQRv`ہzzyl͟lv<֐1ѳ6 ,j{e4{9I*lMBQ:r(iL[)8ށUeC]WeY=kw3Xp eGd+%SaBg?o96ͤjݧvF&!rm XPQ 47Y9) G1 %DkqsEߞ/}xs:meG3[јM]z:* PID u;sj;6JU+Rצ C۱a~ qw|aWo חصU\^f!8= Ҏ"rSe:b4۾g(N{p~e{3+"҄22,n`=ߵe!bX38"{m_ʊǾ]?яJ1&1zy ށ@2v̈́gluyxGIדVͿ{I'uݱgmwB$&؍+`G:q1~rD |CDCi*MK0C62eF -A$NJ"/4zDqn L܊7`F*9"/Z2sZlK4N'FJueYƓphɪsiM6bPT „jR۰h;ieAo@*[]8y3s˕?fNIDk0"heUU< [`4 e  $_'2 v ݩ 26v0QY1F66kDž닫DlGA>Q'F7_~oG.2ҏM ~qUeDxW7("30"Q\eaU'z1.D_ygcT&uV)l,S02GTb4޹|!mMI)ճ'"e}t91D 7M& M\[x;ג0vDDa g٠,%?0v슸"[h][)8e? c%aǍhs!UţT`8(: ,* qk N8OQ('O*_P(<3)DVa8vQ^s5aqH^H%A$*~;K+#'_n8]{7jySݶ˽f9ɘH?_B]烦XY}@DRl qOz[pV1q06e]F'sҌ+U;Cr1S )>hCT$@(2ct yHEdmmm<XYy> ,SUkh4<9MEQaV`wԪhw>{n]Zkoo& G1kb^ h][T{Y%/4PUUa溮E$hR}ڤT&}SeiJkӮhwo^jcrEhꗛny4j& "ΜNqI{WFQq_O6&~lN.M([_4AёMH];yn~1֡3-˩W?5?+ De$G&8 01q =>f*HFbRU I+ҋn%ʊVT\J>]B{ "YXkՙd }Le<|GϜ9SeRv9_ŹsbN'6Ӝx%H[m̜Xٌ--c5 w˭ybl{]n( }UUy'>}z}}}ee̙3u]sFYja3VRbLck_x3U/VZg`m04A BVJ S!% b1$jƨ г*e?Rt t;#ƘW,xJvFgYV~?q"Rd2XUUEQjeI>Ϝ>}_{Wukq\)Z1g^@D4gn9װLJD) !ڦ* $;Y'˲[㸡!_dyR6ڀm.c6ډ_gTwՅql!lÓ#mh"0N c{Iʽ@LϿ7xj_2:X !I]@̝{NYgmI]t1r9Ϋ8h"D7 cq@p u M 4RD &w'H8;DT,K%3!%3ц^Wڼ(@l 5HT Q6,t)FX˝J}^iKQ7({goҥKɯHkwD~:$vݴP e02?AKgnh?f1ZBpu]s\9yaI% ;1K?-7MA??}ww:Rs1˲Ug7Xˆ4$Uo|'8[ `mmVGA XEQT]˲S]]5 h 5Nshn#T?:OVȣQ]Bv~\%w}Ieٳg}ѷIH4hƘdVVVRx]ᥗ^K/Ffdj*^i4%WewT/jg8Z%^p(a.ӏ,:GQ?tnʛ0[*ܷ[ ^ls_Wa! Ѩ(tN:M-j fNEWEHEE䮻Z[[ާY@.]~`4a6G`j;$`{ΞU" DA5(6ADDΙ=ۡ56`85(; MYvAX,jhUMaM}W_WQ4MCD~8G^?|ZZY7Nn誛O =Yh}lm"D(}@о\>8 0?}CDUBȲf&zY8W[-%1d)E_e4Hhr-@Q"b uxRG%17 ^NJ7u, mK}wJ+h%F H((mRa$)8\2.e2|eYzS{)`mmm2xq]wx~K4MOBEpH;cd,I=ٳg?LɔPPV""/1,ryb+vyw/Q+~DEP{Jscc5EDmu6F`n 3Ň&)HMDD,F@W(lQCd IF2818T#Vi8e+ `f2aq*2Z- 2]cIEtF[?e(%HX4&)҂~HF#ksy-c>s~REJ*=ˉ)\e0ؔA3q\&,-ߌ:nmRZoF9 iPeL3]v[MId8_҆MV&άy'@MyDHDHAED%x\> Dhb2pQkU,Vw>][AsMa0eeYh2t]kmUU1 .+eY>S)TZyvcS^WɎhoĩSΝ;SO=kkk_җ^xG֔,Ǝ-Ӥ7bCiکѹ{1c~ZD~^d[f3U3[ 2`EFSc5x 9xfw oi偈$+]N*v9UJ$#Ƙ\]+;n Zoaҽ㈁:qx3 G}xX(FDƨQ! y5j*m&klMFAUp< %T62I+`y[u;.5T]̯vΆ]M\mbJ飏>j׿~K.}K_׾ʲL̎-X??{?O|ꩧұu];g\ֱc7y<?L;>)Ojy(c_\15-݂SeH, +@$JP:2眳p2BBmkhTG&8G Lce mݗ UFf&F" $FxQ2d 9D!WvYp$ziG1q0hH4+2˯1v ڸ~3w@Y;&,˔8@4)"}Y x<~g^}o~eY~;L&(_Rc {UU!U5 ]YFk]  R"  fD@$.YqF Mqo"Pqdc{"UkD/lѰk/TD2ƘZ%w%# %YVW{Oz={7@[)ARQJy4`R"2P"bjL DT=,I5#fY__̲,YξE[y&}?e9SS"|'>=3gOg?diQUYZ7p/vu,%HPv[[[Ħ-Cf wK~sX Vc]Xbd{׉qזDT#GEUDQB4tsFhP"z%U&,DlC]66Z/z-Bq,|RRH`J| UG?>?y-Yt|̝oRsO{WDz'xbvSe"=OvFtli/v5`fȴ )3Ȱ)`Z!}_[UĨDʀ@5GB1J.ə8I=* 8W^ߣ0(G; .aޡ-2fJ4@jH eS40rD鿹?'Ρ?M@\;p 괆b]T3qZ9N$I vKK(9!gg5fI}zsfBv9`e o鼄͕PTϕՔjZD:Ua!#!tL)o2&D"Q()" DjHW M}g>\T Uev05,K!?$cQS h oXRU8QL:c#u2ED4 D%(AAYltdqU$:BQH")$0) G&VYlWDnw>?*@Jc;w!^=#<ŋWVVb)gG*2%,H>|G׿'g?{7.Key~o7= E^ }h[~/dw˞pN!V wމE+dOm:y[KH#nVbtáYq:e/s4NLegޚ.KftfHU|Ǿdy7+r)R0D DKQZν/~=<ttU,pP!Mx9]_4'L­>9qc)6Et=#Gck#-8.^vWǸ+'Ͽ,Xb5&))E*`5HK.!H/3B(@žԧfEUVWWN+ۿy:c6oE˖3N6n7,˾/|Sz'766:ɓ'|??:ؙG }ۿu^ ɤ笠'U]]]M,Kc榈$9P"Ԗ c;w~ΘTLTH j*"QI%T D}3QxmzGB*P**g+ AYS0DrQ1Z:(DZRsѴ{hcLʾ$')?؍a7s>lI"y2tIͱM";y=ɲ駟{?vmO<'?n/… [v? f_nQs ^EC-71PRi>[Ý}݅k_zj4ujf ѠDdUsgnUG1>7b<]/kr# 1Y|s笵wq"|F%kmJriUv?{ooWU݁$$a`ZP@-C >ЪX[m*bjJH !@9yӽ {cݳsޝr{wo}yst^{^CRaofV!HGwPT*졇:c9明?K#|Y'W1+G??YK+JbyJ et‘m8F3m?1JIdM0\]~{wApꩧ_sX'f 8dSml^T?;wcFGG B\^d9cMC?L= fo;6l޹-8nP@#H2 0XDdFN8Dh 5@1 C `K6(j8Q,.("u[N`!8ð祗^|BS)Ru~uđJUcV*6}nڴiJs=w֭o<7w_},|,MQNvDll0ѰDGj^V{#RZU{DD [OhA1RFXd=\?xRAIElfN,q-\~27.i.~DžoۛYX 322'eF=~_va .,t|fҬ<裙Lfy"Qo'HAUt!DPaIop X\`rElA?4PlI9a D Fo1_yr 5Ux2RjK)ŢyR֯_dɒe˖y700rFƉ`,'o -Z .6Gqr!B2eXK(AŎ;mfx칂#GhB %(MZ2ȸ#|wq&TXHhBCE0_"بB oaɮ5؃d2+/j^lIRdm6ͦ˝0 s9SE|wL&sGOZ=Ԭy-ڸ k"6n#L3n'&rHH!>J@ vuGst6`r$N1ukv`q U;^3NFmkFmA|m|eh 6њ5kl9^+z͛R˖-KV^]*nkv޼y,cen #)\Rgo$bgR 4BUۏrǤVcv`Iv?x‹2[o8rqR1n/@֮wJ)gcg?ٹ+{ڬY ,f#BC}lvbqbQkmsyj+ zfzV_#}2Āh .˗^̡/۳o8/LkᑃFc@`Bk5im@ࡀC!ۆ1Ds ":Ɗ( LfA3e КDgBZM!PtaL&+  Gܶm[PM(@LfΝR 9h3e&nkk[T|wDz,˿{_O~Wj?PtXAauuVClY%z'lഈXkcҥo-~N+f[VْӢ9 `(Uъvu8qDd0i`n/nunNgRa@ x#lqmqrqz)%y'Yz6M"A Ї>7=sWc+ iWv.6,:;g®.\"rd{-|UcbB"J$ 0j4 B@Y9Ea5I~U(c%eѪLՇd0φOS6BN e˖8ycl2.0m zql)?=޽gݰaLi?;+A4 k2t'@X"p#67$>*ٽ{ ϯ_^k=<Q j "F&Q+ڀ+Ь HNHڌB\&^|b;|;#!;LB e;y #/]A ^zlqwcl_iljz=bBиKA<,qqR#̛7[hяcHI˼Ĩ^h La[W&Գ7^K7H+m6,%5M}7 6xE]M!|u֭Z51ԝw??~_Wo;3[oC9hcRUcP"h»@jB`DdVS9hc5QAq5Ďlvܹ/Ҿ}XO?n?0@Ɂ* +l6}:g Lb N/* óL&cxm ݫfP SL^Q?Y\ (od2Gy?iƘB|^(`C?h4Vltן=FuqO} $J&"Ge9(U"]$"2BV1"CJj#B]C@@ ˔F:JlVĂTJH`2{VQy-g ;}?]>#h-*/k:?(mZP3LgƷ #˙Nd"_PA$hhzw) H!JmVD@d"B &# (]) !DK nq WӭT2I)\H H h@+ F0.CRH"@ 4h2S \6@P< G5,B-&};Rb i˫6@ٞRI)u!y|f{M38%8s[V,JbO~_{y]xƘbq1$ɸ˨tXbɒ%6mZdR*C=ql6~.aq _BkYvƍ/_=8W\V'Y8)GDHʸgEQB@#(BA@ B)(hlH(T#wrDI I 2R2zZVQb¹.퀒,bj9u/RK\.Jx?.@D8ҧ㍈WcFk`Z}S{zzvW.3ִ tJ.X,ٳGf۵ZAڝ~mkR,3$N=+< XM<LjۮcMC@DiI$̪&U#)5׫$OXĘf2^14 4.! f(~m6zMuYr!\H |45&Stbp y}:h]L+۫jK5jhmFKi𴺷jdj,ibe$=l!c]ZkUg4c&ۄa!KjcaR^@jBI㖶}#! +@!2(,fDqT574!DGБDh6˩;)%-h7q"z_pFD< b(KO8RĞ_au SO׿_;n7MJ%.e2~q Jt(r lT{<7f˖-{\Xۺukǧz}"vZ  0| UI ݖDQpztNl)Ut L;P0FD$^`2CC}9ZyI#0w}Ϟ=DObݖ8hg@f˩BV`rvvX(ǺP.ZMJɉ`O9&?>+9)emdLrcQXb} xY](^)%y޵*Ob=(8͓?fwߞ>UJARȂeVbR%0T:FMROd8;J@yRFGųgNYWݢp$PT:_@K>4Ր˰6R~6nHqٌ<Ҷ5^>V`Gb!odM]ƫ:v4f4|^U=o;ƀDXy]߯x_6)MhLTƍ]9BJ́;+Q!Ugg8HH2qXH0W]T9Ae\pH3ʸd@AWFh`>a˄P ./-5$k?foo?Er B`5|>oas+Vwq?O>~󽽽`v}o~cU IDATߌ_=a>ޒdcs6<Yў%A&ד}%$A@lhFi44)8(SRE: 0|$ DC+tlȑ y^>ݰ| G=`ɘs(6,B0gRV*6?(pCA3e>@Drjp-ZaX(l?V QkHˤ+B -]*Paly>Y,Ckn):օ4`*ʙaж. I`HJ 8ۈA*aP;Lb' @4PD2^uݜ̤6Mj:cFFh&$ ! ~* 9ңQ ØP!]:r IG*B;4;;nK=:2a[ DHT|~ݛ}߶mͯRpr qhùsJ%>Q9ㆆ8QRRh|Tڼyy>l6+㸯ohh(NLqXd vUJq2Ku{O<ў:l2s=b >_eN,M H#{1bRFH h(!ٵD  hd _$"ql(0& $DʰK¬$Fd "goe1-M^J)zj3:*a]y̔vy- 3= 8EP`az ɘ^rVc!\nhhaZ0LD,"I`;sC$rDޟda1AE|VFz5oXr/ ‘"&1BR\x@V B eK  r(HǗٹ@%K  Ҥ ?ӃњXfPӌ]*x$th AbvD$35৚A-Cc B(ZԒ]ji4u!kNPOҳIչDөrv* osԿGS~tRw2Bի;tm*n5fSm;ai1D!U2F=`[ZD$]HI-:83 F7 F(* |A"Ѿ:ڨ+H8RAftŎܫNYhnz45N8 sW+f1}ӦM̝;_&-[l9y!ͲݻNݺuŋ8s?<䓟{9.\888Og3 Hla=K?OtMGW]uէ?뮻SNٻwuܝ& v٩n3h42  3AM 0`@&>I_~f$͈ pP 4G-e0wYp%;E]8 l߾i^ IazgzuU4ALYOP9=3NVd2#b)X]g֚P0~>qHFVY)WB6a=աfZ(0bRw\"keN~i/vJS1W3V89*0DHX"8ZkI&#a&*((IA7KH}l"*m4O;[5﷧5d8Ď▘X(•4^>t8\?huÈМT=5 ׭*jQMr߯qQ6c 9di$@2:6ؠǰu:vY7WPD, $A1űAHقƴ:h@H2 @4 Dc[ c]J”؅yP𱙢6eqLɔ/FIk"l.Bj9j~7Ys4{^.?8u㌗ɸ+=S;&I@lh@8(Rcp'Ι?+f3 R*۶lzz/n2/.Q;@Z]wRrkIG)LOJW^ye…V:GGG}߿ ?zhΝϷS&.JQp G}4Æ[`>9vra>{l}Xbw'`}Fr-IscLe]veq&\׭T*^h݁^;dБxS8ly/FG*+,F-Q;HJ  qWP$DWUs@h% 54tv^9's] @{1#FLGqĒ%K~q"9$*Pc;#;U6o޼c9&1b:ogU(/^hѢ͛7g2e3%^oJؽO\8f򞞞+VFB ,_|֭d[WѠ5ƆطoВ%K>9sLmoyLf?~ѥ!f(pҥG}4 D*a}C" sX'{.]c vccNDWoN WgVѺ4k%HH#Hʴ)Gh4ٳ޵S4XFKeBŹhW:(,l4xh!z@F (RxYų߿ℓYzl #Q ":s伬ȹvͿz(~yS0!b^JA,OljiӃn`41VbE}Mub%1G^~ uHq.c Fރ|={ gY˶c@pZkP2sH6ly^"'ԑ(bSse{ΆnMQGی"ӈhVzg6/Ɗ(c ƹ  I ZaJ D qI$8"B!"J 1^t3#KNu?|ɀNYp/(}G}t֭۷ogaԺU7|˭Q8a,ŒhGDϝ;w޼yva6 &nURyꩧx͛7޽yBC?GPZ%8DDy8\:=^ue*Adƍ=ئM8l1P UP((-_SNYbEPSz ,􄏢( 6ss/DaYɏDYzn=)Wb y'p/6GnHlmTaZ3PJ]''{*(c(AĨh1A?d2JQB٤F,O@y"Fɞ]$L<>@@EN%fi.=cY$;ܼYIn2Dڷog&)7I ͛7/l6eY!k׮}q>5כ31\9s̟??ϳ7Hҋtq1$VT^~塡! qU_sD1u.cƾx9s[@tw6ދ+Ν;wiH|ul1L 3͟?%%9Ɛ6:8 pr0>,ŞxxlFe5W 5)ǾŵY5MEUZ4(dvfd$𷨫[HE)*AjʚPsAoOMj6[+5Eft<8SɠN!;PB4͂iLhs/68|"I̙u  8bFTp$kgH^0OB#҈, 7sPF~dP$i@"2,\.8ZZٰ8#S pe:rRĚ!豑#ǕkFHG:dԟ͞c~fq/F8zPJ'2X1#PvLBqaSNa76;(mL'S]_u]>гe]8t!"V*DdRCm+]Gc5{>lgZwqp4%Ɨ hLxW뺼)st񼚥 DQRL=Mjbhi< -;Z&QsN9L68G! ) (.Fܢ ~Ʋp/=GHq=s#@N7 NWm hâ<GS9M P%pbp\.řbT ,U}ox>!Gw8JrL␈hsNC4IRJ)F)d%6Š`#񝅗7gt0]q Ý4i^9a˫S0X.x;0:49y9 (鳩[ j,"0^hb> Ĉ/lPGRCHo*3Ab;QV`}>M1- u*P~OX1q1cgfWQԆ%B0f=!mTfXUkީJ;K|%Q$>GtSe){vA#4Jc 6 x M~Q9㴳'@ X=p1TG@ Pӫ{'GSC M, (tHGƉ`4{l[OgXN'?lr:LVxd-a_^dNH Ob.kINǸU /0 va!:=U[!"P4 }mXvT63 vQ$,p)t62rp.AD,Eօd)ӡ ֔ꯧ/azBڔ-BmVUI@g/ifO4K!"nUcbG 71&PT =q2[BVi2ljd #B&OMy#AŤ].h U9Գ|yWKߺmxt 7l1QFjceL$Da$P@Tr6P)Uκڔag}[>ܿndfs1dި䬥ۅ[4bdd$x_. R ( P(DQ6 = |@D\:$&q<%DVr9;'&0=l 3~՚lkl7B49LWl$*u6򪿳GXPC`HR'],uYibF }ӵsfJ7lg<#`PnsL S"9E{fоzcNHBIV %ԻtĈc24.%B4B&61:ւJP! J _6`)h RkBᡪeO97<4 Xe^8Ra6tV,!R(| CaPQ@{G˞r :޷om+"9I#Cdf[v oF],T@E5Lm3j8SqYsT3Pn0D}k""b ך2Ϙ5mzn >Ɏ<][NZ՚CgɆK^ƃrk^u<츥}%ebJ4`d|vӠO!qxc@k0(sNgd{7nD D)@m"(}+e54f&Ojp#" qY>o۷b4dtY/285* sK g=٣$/£3*ACX{5ɫDA1Qo+N _ܕ !hj;4Fj,5ƒg54K^mSF.g7#;n x#TsQo781CDV3gOh'\AMP!$i5^g<9LP IDAT -hҸyW:숅dysi07yi8a3;l@TMC)I> R !MC(h)ՅNz_wPh c  2ڰ.a?5O3mDJ($]6HNJIt(]t ^ѥ(3C]+8#f(-]O }'{*scIx*1eM<]>~^P  "i#c ML9z[}v\YSBjڧi曳4K3BX<\0q,mx7R !0]bd8E6mT{Ɔ4kК%[Okl3ԛċ$3NWŽT&<5`~#<25@6#8ҧ8r6w5Yj/2Yg¤Jom2/bqۘ{c "͖ 㲆hp0v˜O8\ӯf+ -J)ZPŭne&8FT:KRjj!PD: \ :! " 4*fXf Ԯ -g_ש O@#ꪐ]:qzq3"h%Bֺ#"Å24 Jk *A=QĜOؼv\rTPYԳyg{Ƕ'Fc X_TЏkO {~3\WQ+W$ID#"ʷGĆZ:Y)b LJiþc @TVdu\o -xOT5@afI:mHPpSm]&%)l!ڭ SCr6bmu,q;93$Q!9O#8S;ʝ8EŪ[qTZC7 qYjHDYf|@cea}`:3BvT+DZeexFvu P%<6 M?.By"+ywJ8!R^3Z눹r3x: QZ S@b56FNqSncBЈyr]Z6*z/"6A < CU}T׿lo|16}&nX'+3d 4K&0Y Z,a4^Ss [-0v$·qxue x`*L,Y3~R,sА;q'<2øt0f5DX2]UxruDISGӰ Jk q]Pe1#Q` :^.PbߥsBF\d6@fpmҰ:+XC$񇿿$QĎD1# G;( eX0>I!]ؼhlx"!%A,1mȘ -hܱ6*jmt1.uZv Bp~SgUA< H_jb+ VoWk_Z.=ϳ Ukns뭷E$7E:ba YOc$qJ~ S:d  2' |!bX0 ǩv1ư{ 8vn&nsE/ &.|"y:.&!;l2kjҦT*ekVJtR6X;83###Ͱ5BäҗW_MDG}tg"`B'Q7o?LDo!P"5uUR =ᆋ Ep ]]5ɿA#iYIcShc6nzh?}a [(LL:m6g` !ib*:1@& 5gנ[͖dtRy=meD@@\2KI Ts(~4HʡlQ6soF#tCn<Ѩ 1 PxnQ@ i1ps_$xL 3ݨYz͑R@ǜLy$"6TFDT֗+驧 ЦHcݻעZo:eEGzKZxFs}8Lzn`bo* @DH@[<NJM4HnݻYY.w= '/֭[;.'cg|r^ql߳Ԃ(k7^ ~1 ߾} 7Gy䥗^Ʋ{n۶mvVɩb ;xyޜ9sV^}{zս*֐ҖYPc][o`Fd6`W"L&)9Ip(}{w(Z/]SO+{{{yFB?C MFy17rv`ZT~p7_~}CAM P'.hmMQ`5Tcn޽{G۶m3gI'tUW-[ 运H 7d׾x/^ oxڵkٶ>І+ad8(mVSo:\%pw|g䢷wժUz׻+$Mm@_ɟ,Xz*WPz&HL- rà]BҗCA0::bŊ+W=)Pr\qTLinƅnLiK:KQU*0 9,ZQ(([6೸s9~w~߽qF"Qh0MEd6IHؾR6)3 V$(\Jdz+xkF)wgGO)K.3ϼ^~e>w{׭[z+bƍJҺu>" ӟU> 6o/^z>'|[7+rs'>70i9 9s 'x_ve'mo|W\qg}7nڴ R2/|ժU{6oެ+//­["~e^z͚5W]wݚ5k?o}[իWtM6mb%* Ï|#gyyO~wڵ%\ϳf2I{@ zP,<oqڵ7pI6ou]i&3 u?x$_ys=WkOO֭{[޲f͚~[n?6IyGx׮]{W*{R~ /|v7رצ8s; 6̠y]rS]-+WcjX`A={xO_[sٶmyw.䒋.hڵ6l ofUJ)u]w]z饫V꫟yk4S#КN!WՓN:wѢE/38λk^|E6u]]vg|`Ϟ=A}_Jy˯ /Sۣ};YnݪU9 65\裏 !>O_?|+׿~ݱc$};3BrYJ '77O=Ԗ-[1_}[ߺK//^guYgOGQtu=3֙ __/UV^GenK.9묳>m۶+8묳.i0KFIc |&9o͛7?pUW=㼈k֬ٹs'ڵk;ׯgq={pd!ğ?#Dyww.+{\jNFBUYhhm;8dC8j/"U#_e:R1/ 2:rГv1@R992@B(wIޟM~8 aT΢ӳ{D{T$$1)I !!mLNà7'F{g쨪Ϲ^{: a aIdd`P`1!0 8*l&aa@  ( 8 &K6uw~{]~W7կh}?|Znݺu={ijW; ڵ!)-@ ~kb%a ɀSŅajpȆ5;K7( ܑhcwaPd:vu7-ց\ːn[T܎fۗϢ@FmH0c 1Ʋ3;?zqWzxҗ˗>cywy]}Gn'?tA_VD.\xꩧ~D馛MFKUB˗K-=z>{UW-[lZUV-XSOf/e]2<D4K&_&5We˖Zjƌ+W|W'׿~Ç{O<37tӄ 6n8~xl.A߈[o}g}vKKˍ7C?4iG}tWuQlٲwymk|A˲~s9NB\nXt) k7|1C۶m{衇ɓ'oݺՄͅn$$i9oii17f/+WZj/~WAK]vŋ va=cn2ܴio|_c9segqF.{ᇯ˗9S|˲:ꨕ+Wڵkӧ)+VxWo)Sw}7nݺ{9ClْH$Qt3ODcȞ={&M4a„_=hyknmmeeYIL2~ŋӟ?~ƍ#GZi,Y /|ǏOLΫҏlmf Jַ iYg>y} _H&K.~C_uuu?W_Mۍ7A>x;oŊK>ghP!13g\d ^f?lҥK?C.@kM|8"r>gQ`&I$?~-\pĉdrРAkӟ48NKKKkk+%&]v?gAԣ>>?x 6,^ﯯ߼ysUUc,?9/0溮q.Nr!W\q";w|'jAz"g}gva[l8qPC%`W L mGei3VeFCS)0bf JV>T -S @Y#uy(It1VlHWBc•G =?,hWH8 "߶z5b-to;l^iXȎB:#Ti'(D)8 #LxYu.n*-RJk`DD%6JuqXBsGqnYG@ ,)YtVV*gL;j(=As980 Ѳx̭(WϾC ":AS*q$2mڴ[󫯾K/]f[[[-˚0ar&yM6w\#Iy1bŊ N4qswq=~TVVڶH$͛wqǭXb5555&ĄO: WXqWz衶mϙ3gƌO<(x믿~J)S@3 !F  Z`mSLz3fذaCVWW֭K&1tD"Q]]}lذ \ץ ={X5l0ѣ@DZU5,+@t]@ 2a„M61~_]veg}̙3y˲miiQJSLپ};UfݺuGux<8Nuu_m۶۷H$rYJy䑓&M+)kvڴi~S3f =& ٘0aRj̘1uuuRJf!uBؽ{weeܹsWZyfD|׆ rԐ*E{(r4b!Ą (ͨzOx㍓&Mb&L ~'V}oii9#!1jcǎmllt]WJ9zhD4hз톆|>O|#GӸ6 IDATd}_nJ@n:>xP]]M}cݼysss3u'tR6}'/\tE6mڴiY/Xqcƌ9蠃(I)Eizꩅ y555#F P+_]]M=#Lfi bv,YlUW]5x/??˲;vluuu?OI5L&C-Z4rI&k&{<|=Ǝ;f̘38O&1 B;裏^}3f̈Ǐ7Ewsc7*ӓ(%sK.w =\Z5 ;SGe |6MgrټinY@s6r 7oٰ@-D;i.$8ZAIDJ vm6f50aak:+]?t-@!@jV5 &fM_ =|+I'SJL[0 D!pޏ\t˽n9ߺuk6ַELvϞ=Gq'|YgwyguV<'j555_җIJ[>#ԁ2ߌ3~ޖ-jԨ#GR)@Yn]o##cX65 o#" _Jɓ'0IDWyd2yQG娟9 PrU&zp8-w:H)5(Ř5wayCa[.% ,rg !w\q\! *hgL;q-`qTas3B fy~U'?U:odQ!AQq%kP8V7g$j,Pg!H:AE*0 RcAѸyG?h,{50a~4%}׮]\+++UOrW\qٳW\9{nbSN}W{s9d@.#i'HRA] i}#w0U)J.#KV7n$ )wRДqW̙3G]dwq!OymbEt!rw'شi9At9so}7߼?ϾǏ2dСCRw/ttD1MBJcǎ|;wqcwi9J;(P.쬳Zr ~_v,RJڵ/| ,8#;x|B|>H$S"#;Μ9s3x`>ro~3]4]*3ǔXUgzBI k2,:| oJ,A.3EcEh}\:Nә|:yrdi֝W˯tigqGe3,2o0ꪫO̎oܝU*s YYq9Cs1o3ppP6M{إ7%k:ʠI;ͺd͓HۏRd&y0N:䕤S(>FcRF=ց~Dx c,8}9ʰ Әݣ {J)r]vu~krwyU2Lss3KR)RO7n5R-t [u݉'^y۶m Z ,Zhڵ?+riQ'ZZjÆ =o}g0RrlV)L&ivѢE˗/_h0[o?liiy?̚5V͛w 7|i׮]e͜9sŊ1)c EKKԪgϾ;|t:L&7nHu8T>^۽{MsܦM---[nIy=ak! 8&%Ijks=/Zܹso馆L&OO:h5jԤIc9?իW⋧r =  \v-+ܸq7n|뭷(T͛wm^ZB{ck׮d۷ob .''ھ`ٳg|878V\yf!Dcc#Qfvڴiy'mٲ$5Tٳo[ou͚5wd2|}}'=0L*?;%ߴs9n[f })v!_6lf{졆vy^2|G͞=C@47qyͻ馛z-شi- Lt{rSVv||Dua&""gPZ %BpXqZ+$^)qf`JJ "LK2ْi _"(p(ˇ؎=D '˄TJK42QvF( Ԣ{L&Ǎ78T\I+ #"sRr<OZId6xbIԍ !S> n4)3ݸl0a‹/CUTT >OK7 EvYUU5o޼;?[$c#K&|~_o uYÆ O8s=uӧOnjCr\sMCCGq׏1Xnԁ_r%K)S>O-_|РAR-X _}խSN;FM6\H$nm۶1K/9syZZZ.rǎ[SSCqv}VbwqGCCØ1cN9p UUUy/;sFy9[oGuA]ytY2&K9 *,Æ {-[8ΨQ:G}tȐ!mկ~5H\pX__wדU;묳zg>󙦦&4dUTT* { /G}'+\sͽ޻uVu t9琡ub;c۶mUUUF#Zj…dvܸq]w]?j%fg˲H65Ϗ5K. 4a r9444|k_X,6f̘QF{7pÞ={jjj&O|UWiXo|uݛniƍ~^OO}cfy;cǎmϜ9scƌ1MA?***h.ʛor[|+_3fL"6lc=v'#Fwq˖-#$ sdD PAmFYpZu7766>38ƂGoREE}ha<***(4/_tEx{yw3t ~fͪG1gΜ?Z{̙4!rRfDB\vexnڽ{wMMѣGLAl5b10̌sn߾K/SNAӧ?<? :&Kwޭ:iҤ?Iòsro喆_zUUUF{\̇;i6#{XNֶ$w ZKړ-81 i+Q$UhڧwPm{.B:N MjPYb.G /CIt*=~7vtT>3P`g[i ̮d^vh9moL˦ ~v[0*ÒviC+,BN1DӴeZhNYۮP2Xh^KjK(t)P4):%bTpZ(˩\\\!XBJryTVBh@&NH^DOФ an>hRG;J@V6 9I DΖgAI:eT[[A4ֺ(nfkf /Aw,ZR"2e.C9&@pΜEW/~N r?i-4T(^GI/u Ά^|DLpMQ4F{GQid%$/TMX~&U' VhPPT> 2B'sihK[0=T+N6bAXAࢎmt(loS Տ1z5^p $BpR0g1Z1|>L|H?1i` ߎ2/ !s_!Q[Gߎup.aHVfGF,atO[Kaˢ3yi_Į**YԾ)N)L1%2ۻJp6QRT1qι9y 3b NKO8mzlgZ(\k%Ҭvb?W*g1ΘTY1urU(d-(#ZOrlA5J<+Q Jr+|Is%Ds=uMqe@)d9NZP-+u)cWk@*wKJv媪LPDjEW}dDQ[2w#]4-s Vri1455M&s3fL<'r8dXMHÑ9RJD&!ÐdyffƃÐ#hKN"˽|8 :$!Yx{N~ue!HC{jiHkiqw4K~MS;?\f8$|U\oiJ&F5Ba~ۍPOaFnX ZUAI҄ S=c ]t: tD[L,z!Dtj KMgVeS]!h^6 Ԥ& 0Ƙ4?PRzY[9nS:a ơq x ^  7${ AO GMMf*Y觰Lha ?fa f4e4fW͐5p޻r06'"I}h4PcJ", MD6^rbIɐ:2eIƅz,܌<͖Á( 4V\C>Fo. ]87|{o_@V-wrl%*Yfi]k B[\jDhbgi`_^6TZQ5TP8Tjv mh q ]& voD`ݷyJ,秽\ˍ9AK4C ˽- {W{ǹm{ kwPz~䱈|B|Oc%oO-?KN+W,_'/~Lt8C/XvGUoB]Rud2s{SO;ws=}fQi9nHwd2Dtx |EF'9O&MMM/ϟ?nܸqƝqկv/^}Ն L&C9D"hhh馛.]Z[[3o\LvApf(}zi<3kt:0o3Ō{O;4ց\yRJ͚-͹ɄVD1͂0Bc Xc2l6 T$ )R޴/ 0٫4s122^ iO:G>OxxQO 82@PCתtޞʧEWv\q]O8ZJ "2fWDgZLvSvo J tڱz,ɜp!ܪ֭{6|vJӫk\v.__$hwܹbŊ3$XW:֚Dn l6ɐAZP"AX#p &z`W*B +OO*@~[3j|f6]wsN^=tWȂ!,Ȓ,W>ևX,FRLt">7Črdo'4IBv ,A1~ji!7=6xud+݄@ oPD"cLazI[_"&H .Tzi(>cHU2:aCTy6CMTYYif@,3y dSP 8daw`WG&؇6>S*: ;1D5(3A]1XG{;.5tN;p엾{Ƽ-F}CB%80c&J֚;3H( +&ԥ+J95Cd'sL.sy-0PK”H\9ewHOb%"6}?:fJrbΜ9z*i[O T׿Nq1f6B΀3;^z7cDOqBsw!Y:Vwd7Ml$X|DY@cqbƩC+J _051<25>1i@́FD^зB t48OCzF|A@WΎZ(ah iѰ(kjؿI I?!+ғ6]ag U#DN""uu D4հT }Fmnv@Ha|.K%%,iݕ&Y~AQe-tEaKtpb{;NDp j%+I@\!J%%hܶ,`4?aV%d9 `d ;misJZRjg14sY>?XL)n QAD!.s|A$g z*!D@Kc Q#e \7'3m#|ϖ~TF.QwEG, `]؆ |y7Θ Ǐ9rٿ/֯_A/MGG(MəBFqҸ>ӯ^bŊ;n…;wO_9s 8^pX`ƷrM-(x* 1]l[+*/ib|([z4OJ%#Ϧ~: :8RC3Sԃ>lٲ\.H$(jBkEkO?'7QYYIxw'n۶mԨQSL9#6n8e{EE}K_ڶmۘ1ch᫿6ܙeeD!Bz {H :եޟ{lUh/ hVJ)n"2X`}G11A{]$csl$e  3ʵdU~ZU]mVZjVp*e ۭ\?n4S18ݔa=qȤ[־?\(:t6&dz;NMʁtDkkA%KTVVR({,۱cvΝA|oll0ayv&1A]tѬYv N)ƍc&Mt1c+Ae :4J <dž (زeK.$ !ɤm|~.Eh(r7!B"Izh<'k |JkM~ð zGtoT!heN*_h78c `e R3;UXMuo^x K28,hwI"D!B_ADC6HthBJIl@,z{xo>h)2J9C-D(f]K^ܮ<qCeJcІ!2貦PGK?\.{e͍EѭBv@B !& lL֬pzQC=. 8ȥ"w\q,DQPVe'ܒ1@4Zy*ߒܴf< 4*&4xL G*[{̷8$Zj$)7 23ʲ Ϯh"R21jH{d3%,1w^!heVcwbC7gcM "*++[ZZc$I^FXTA(x|D@i2 %$m0E-JR555ѣG['PL&Y~ɓIq1F,UUU$A ;VJ 9߸q#!2L,knnv]W'B"D!g%vcrdGo'+н}k-h6ʈpFBO { .P#!z؂G=/ͦd.K J[X~EQDh@׃vKoZaEB6W류!j`C_[?6?힃UAZEq|*weJY"?bwzTضȗ)_;L?}W8I⛔D\.G-Ny0@AR|dG3 3 8،s>gΜ룏>JR/kvgR8$BV#<3իWkSڵk<ϫV!B"D^s!1ѻvgd Hqk"IafD$OL>ʵ&tN=m"22Ԁ疃*;>Y-ǜ)LRn"=y+ky~+c 5JL,dؚ*+,ʪJuXT2cPnnPɟŷK2΄s(48f&JXd}7RP0]B]1i;i۶yB5`m;ym.,+VVVҟ|^JI^fr]wѢEw>#Ԑ&H6%t:H$L8 8s:477>㏯'+B"D!G4X }gy3wR%hJLI- mWmV/8٭]n @sNʣ,hgjp%BhV*FkF蠜_n h+|Oz ;s\9R%8bZyJk)8s\r_WgYqkKr^$tf HC*ʧ=ỶXv,*> p$w5Pk:W<z cf'F%ӎye֎ ֚w0@cڗ,ڱ\'n(Uw7x'TF,׭.5D/|@z~y.\Xr;E?' ʨbX"D!B[trJ0_yd 3HAJŀ1#cNA۳n{ @(Ky%8lSJ _b1W׆R _rl C^Y KIƬ<ޥ h`Ri?)S6tfZ]in$n eU|^6}36Gۊ;_:sh9rr6̣A0>^=I=ۿL$%QnB>L=]y5-sJ!AZkhQ %%Qn@.)ֵP*C9si[#ʒ#4p)\|R+fe13KW"}ѥBQ0Us۶RRJg9e9c6W_Pr{~)Qx?V#8G \jK3 Z@ז:rs IDATۮH8Y*k_6*0^˳rيAF"D01&ҏC%c 5jW;t?[e _q LoSPJ&ZQXPe)$`%fi 4@0VrPݰ,+/=֚-"J29XbWBQ"5w^ .4{Te9 5i{ӎ -0ƥRJu]ΐRRnނ8|۲,˲_@AAB -DN67YB)!<%}mD-4g C? 8@Ѕw M,÷^$<2РQ`7dKhtޱAyyK_@Y( ǒ>H.Uw9y,@) *ȟnf q)C1Ԡ9,zqNT6] r_{  ~9pώI4'ƌ7Y5hڊTȃ#olm{TF!? Xm{c}Пl`âTZ0顿41L9e=r|YI'/>8vFIԿ۱* fjyn7"]A2*"'@ Ɣ3)DۨZH)f61ƘRJ+ cH;ZK&-Y#-}wZGzX uK4/mzuS_vs]hq]Wh[e/|"u Hʯ.v\돈"^<;V%|R~ua40EOoȓ;n-l@(%fPCm#XLsjƌW~l;8Dݟ}(LA l]K@nZIyL~=ݵSTJJTa'FU }εd 9<_#{I! 2Iݗ]@`k@Z+"2p( 5D&y^EBr^˟<75-q@к0ULITduu읷R仛}ǂsư F94Ž3HW|7 1J@XtS}"D]tiytFY8\O7 gڊj`J@,]ݓkp ; /$$U۾x傸hk%<8C4N۵rԳWJʁ05Od^ƚEFuFԀZ65_X 1)@"f$L#o_r҉911T ա @ޛvTkej̒̑@5ac9y1aXax~X0 @ V t/ KL!?"0׾#mـeMh<:Cw׸~U'wΝ;kk}s$1(*a$E # ׍??hC F(<a U`[O}g흳 ZBhR ,$( 'ג @ hyl@b( $d-zǏ)x?; .yJ6?AJ HД!@b#@6 $Y9IΑ#Gºm zo.|}a7&AkYψ%tUr^QYZqZLH݌y_dD#RaAqz{ͤDʈVJsbxcLEZk0,|ʱ`ɓ9 _q^hȰ@G3 no-y XPDD@"hƄ?Qa%: cLR$" R`P 0BH By"|=ʳ_.-0VzSw_D@%=? g H$lOK5(a%,*Y_O~I֋mh iI $)@i~l%y_:BC*A0* а??~pL7% Pkum|f3"(߻杁<_xJ0]VF@b"fv,g7`9rlF}NDjw#@Hcuve~5mrUfR`z$ ^hSDf+]IKɖL k{?T' iKђ@FPlӘR!"~\EuB+O}4!jxVPJ.b\E,cDב {#d@s'1" (j@ d"c%ʂ4PKGd%ZO !@ w4%P =bq7%H"AQa9rqbY #&}Ts |Rn"`0cLbChe*|wI0:l[)=8qk*,b鬹SK LQ)ݻw#"K9M0)EFzd}ID`m/F Q<裇nZI)ܪaȗlpm8 @`+,H!A*AFۡv@*Kj˧˺Q7jg AXk%b(AX+ 6AKdPh؃KKs*(Rrn^@&OU9]RF T?1Шa0$B~T:BEHJhB2,瘐ֲ gQC*A(j֌X:rƙ3g`l̼E 1jiґk|-BHID$B,MPZ#@(A!!Z$"$xvE曺 5Ig}~Y,A Ud ʑ#G#&>v lC7`?eC!6r*'JEk=<!J%zWC`Eq9Ddg?7\ȑǁvFAZkξADkF,F39vD$E(4d9ĉzAb(I@rd~R#ȶD,':okǏ<l=P8G HҢDHPRV $H[8Kԋ{Zs ` CŁT?{:nFPH`ЎA3’!Jky>Hk xRj{B=)%FVP %q=4J"kjBc%i"]8`gAKjDX kQrdi$1Zph I0S(j6g`&@X!H`  D21@A@V5[X e҇[?^+2@P9VS5i9rȱ%b4Ƿ2&}[t#drݷ|nHdeJ4RJN`).Gǹ;7Srl/!@ !&[k:e!b MPBBDOݢx${T00hg||2P gW7}X#_Uw!)&6 a&V& $Z6B2`@@hRTCU"ZBi,RIǞ~::6I%iNXXJ@y ;'>@QhՔef͑#GM^Uh@ ,\ $NZ\vv}o_Y؞6?a# 뽯~O]{tI t sؑȚ^=j. V #;OE{U3R:(D'`gWخtBX-Ԙ{Vg}&BLWz^5 xt}~:u2bncH ERJNaB}uֈP(_5"&hDT_(C3O~Aa`͠t?W;?ė58ǃUւi3 (6Iԓy&B)Q! E m-z.(Iכٽ85Ih.#:ED N~ok-Q?A2d~07ZJ`%Ihm=Y$F2 Vʅ{N{s-BM(RO`@j.RrKlj48RݯŸ,;" V lȑ#G^xv2}>x#0kv5Rf;D@A^#™0r|LH1uF`Dn+kHQRȱh$-Pʹlُ…;T%ԞH قPtDg#1Le.F&!Zu#"j֒himĹ&ўrZ5Hv+Q8 |DBX߯.zL)u`|e .(,$L$XВ$) PRQ/=6|pϮ3-RB =ߴ^`'kIR`E4 4h_cZzjV @dZ O{gh!=stPJ(ZMy^S x0hau灶jC NA :L@"BzgFdP0b g7S#"j@C4XJ{F7 @I['u=e^?nB Uou )MED-YC!Y16=E $9{6Ah(@7$rȑV񼙾q"_ctq=+XH8Gaz doȒAjP(!!p?h[)ż5Z$8$ \LF5#X0AF_(n6QHOaQa$ߵ]/ƖbD=m "( qĭDY!QITD%Q@BDSbXP*mJ ؾMe)# m (Si,Ps=81IDQď>:`b`LnzkP`F8]Lm8lȑ#Gл8ю&;CM SK8X' AXᱡK!OmfAOl~T"_yy̚ւRk+|EP2b:֨(^~?:ݬcuq`UX@#`a`HֺX,_,矙1uvݼc IDAT Zu]Ƙ;P(lm@V׾կ~uqqRڵ /|+_sNVqh4xW,YQ((byf78zh[`j4iZL bܹsSar+EQ!"Vjz뭗\rɅ^h4@QT}CZ(aB9!(Rqbg %JZ)A/ |q%#R!6ATb5S͖&IJ60Z> Dh 6CH #"IBԚ0 ˻vZZZ VeJ) "o%~f0b%D%! @as?%Ӭs+W`7&O9w%fsй 1Lw:ǀpH9G9r "JͯEB~)u| .W_C,؋,kGKd畎\a:AiI/;ɀAf3\َrǶY1VU@(%}DKZPeci]3ӓWj_idG Cm$8`܊ڊYgZ݃[}/Z/y#O*)zNrl-?RODfsvvviiT*q }OlIp39ѽ׽.RJ~饗x㍧v"r`Kz q ~d\. ,HDI@8L&"&; a5)̧0g.X,ⶰ&fy;7(Vq$(TzS ~ڊ:Yvm\rG_w} ȱQ e&Scw_Ǐ[~7~c޽=#wu ye~h:hpB)Cĺ;_Y~q]T |s!~d;vs $qf`}?G9rLݽX!&uMҘZo0b[@J$:d|rIi'8+?0ưhVa@ QQ(H"&VLZ95pDZe{'}1q8Zseؾls>``iiy vX͡*˅Bc7;s/^_۾oZN;mo{۹4Jټ;z>??|`Ϟ=]v{s9󼥥K.n/+_>P_رcyy77_җ+˷vwZVV\q~Vk6\χ?>_ojcǎ뮻n߾}J%I3;yёOd ص%}s:ڮ.2!{Ƙΰ '[VW\q"viǍ1^{-t('V"Kum!Ch/_(ww^~Ǯ)e^g*\\^g>sUJ!Plyˑ#Gi: k$cr.נ8tK>Vgߍ8M]?q\Q'k'$"*kqpT(72혻; jdb@UB8IL.&>n7IHO !VDb*)aռL&BI498x}NZUT +5:^ n4̚(* EZc7q;w{߿ɟ|ؿټ۾i#޽{ffB e^>E/7ިzw78x࣏>zW?%??o{/Z_?WWR0 /yo/~;wMfؓfaYڄmD$KDdRJj1Xi2:a>d@)>!BZS>(e3Ǒ-EzJ|0"?~gk8FD,//)%wcǎݻBDT<묳^\vezի^WJ%Ng{ SG1Yvպ^6}|K|3C&"I4]}SEߠ@ylN ԉNȸr1A W^e$ Wfއ!W]u\J PR9r.c.0D5ی4!0|'N7zqjd: (Da" YVrRO!o BTg/Z }G+%R|ɏ?Q;mv#Z-vW8%gR,zKKKNWΙSN c-,,pFDl6rWM"Y8r:q.̿p .Ȣ&8rrY>h$Az333^̓\\\gfip@"ZZZOꫯ~+_}~뷮E&[SnkSڦW>7p@}5|檫[o &M1?kVbyǙ|__\qȾz^,9P ;9r1}w5 5^2R 9;dUnCf.VJHvF 7N2dʗ Z5I"1^&]YȃQ>V`톬P؊cf3G?6amQ-/+TRkeayycy\buPt4GP`6X/yaa1?OgoӟO֞tIJ{9t萔1=؋_bk- 'WWi4.bXQtID:tH)a877ǙA݉ՇaȊ}f7:̩o׮]vy睇||- 3l):uDn0m 9'_ΥX8wfoP>kFfIeffx;ID 伤Ad(G9rl&(^DZn9 in<~6l'iZ[+H@B*`z@JbOۈQNVJk\͙%q +'KVeX!lQݿ籧R:Vo X$ be"ˊ|}GZNqmVe#D$m9HD鍅 >k?/Bxfq`g+jiii ;p5^$F|ws=7x# 1^Wp 7pÎ;_8墋.Ї>tuם|ɇ γ:QDI5_rDžBk: 7sN^{nZ<< 38;γGjSN9'<~ '1Ã:7u}#24}u=1C>O]}ՎsCks2pH)q#y{{饗B'; ?*9I6n/C֜yG̑#G%)Se-NNa hAwz/Ar8!d-n);7w5  ~Yhp]3\0Ș8ۙqhxTLt};M)3'X#+;* LuS[c4X)‡ɇ [[kc ZL6HoJ݀ksO7dAJYJ)vѣ333}ճCzb)%dGX^i0 |׻Ŕ?F.="Z-HgkK丕?;??33gϞ%x;v;JJqꩧ2Y7J)hqqqϞ=oy[^կ~'wc:TTV1UFT*]q 7tӣ>{׼5v⼡$E]OMozRꪫڹs'>'xR~W\qK_cĮ؍6Y y)L~~Wr>(2G^:L M ;ӯ[8D֖JVEѻ|3#*ʑ#Gc"[ c]1 -+^Pl;M~@%]Sܻ߱'Dp@TeZW"j5 Cyzѯ_!8/ 1Mp4de29E$Zn\!" ")RFA0?JW/{{]4spR6gH%n1R(n+ jjݷo1[n9 2?Oo}̑#GivȧY[Iك#+/6 <.(A!HXoHh@}!k-G{BJYT*.<9xꩧ\lDeL3A0V̉XvcHc:3<>l.Rv"!\/'?;b,qpTK\gT*qB;YdEL0!Ƿ7Mn$"VYcRy5cNI΅Qxݕӎr J `^:Cu$#3ɪ--'ܛ}uXurw_B#ݿ?]vekcǎI3edߏ V,-lr)]v08edE x3;. ǥpQ3 [rZ(}KrL@ )>)`f0GCnYknݷoʕm8A7#1V((b"OkxsP]jΝ7pYZ}ᇥv&ҖG,tLoE֕1tGofEHN쥥0 "glԧ>U,ZsVLnƺ^zsȑ#c}+i)_fxYҡw9!}.:iۘX͆R>e2rk'# ʧf V(dPj"-E/G-J?CJevv<^qrj-_ye@Bd?ؓ׭.Rf@ט됽Jpg;suum ]5AtJy$$K]9rl(n6QH"a5Y͈KfD}?Is]ػ^ZZg? I,(?я8=0qg9h\oTk5WZkk-K`G iK)Llqs cb. : c6ȑ#T"gM$+mhHEO:+ŝ]EۜHW/Sw'pU S z!20:õ/u'[uilVrMѿ%:IWrP!ЬQ;f(=.&ZJ@`'D("ZbfQA`Y9R׃Bj7T6)oAE x9L(Q,!B$z+^sOVFꚳ c &rM'=Ž1Ah4&B( X p "JN͝Kd4Sƚpq_pi#z;<{l@*I"]RTUN$I(C)j2:8-1cX9iOw.C4OW9rl;Y Wp1|Ռ%\1CJ XN+F2`ҡ._.n@s7Dl:A Bh$mbX,Y~<33Y4 IDATigggР¤ f`"͑cK^:qL72n/{*0"ri^winv(k.]duꪰWE vl+nAa'.0 4.Jr^q̫k9:=9rؾXyv&tIF;&~V}4]kh]tK_tqןc'"UcVˋ3 %^ 6ւ=2V X C#-jE.q|vE=}pL\d8dvVkRBIHՎ_N=BY9[ՒǤ+N9ko)>ߵ\})% `%!"m!1" W$K_o."x4 PÓ=2r|}?p .е?z`ұ*ɄTLx3N,!B-wJnya.\᯸8.p s@f2CJTHE333KKKR X'LNّdN9rsM0K2!ON>{9aHki2FÍǐ$DRvO7dNfMj^^R^3 +uQ'OF1X,hZJlu9|ŴZk)rR%uzp 191t9mWsb׷&2uu_6.K˟9+Ʉ4O]9rl d{MQ~&1&~{^,:p;h׮]OS JZ15d9Ct'oq 䪢ܬ<-RJuRT:)G9N` ÀĚQVkM|`:tDI44=% b K\3˱K&=mJc7ўGgs "]r%!">qxVc8,EJyq^GmZc`b387lj xw)tx.#Bt.,,S:IFyRbq߾}]ae{2G} mqHdSKm8 bg}v\f1EբMן0`j.]Y 0Hɔ8<_ˑ#G*H)o}9s p^:Aͨ=!ᄫn͆mDk 4[VMYQƹwўbqcx³Av`Δw#YMo!oc#$aywa 2^Ϯ{GȭDRъpP}㕘%L5o4:6;w/&) ™gyg?|߇NVﵴRAĮu0]ni=r/)6<>3Ys{ +%pL(XNg`匤nҖ8L.kxp9rȑcM @uwi JJomw$C *ÃpʠD+k=.(4Cm:5Oh9v^gFqIR6Fd^+kYeMd7B݅=;p%@hZmDP(҆vF(^Src;ՓA)z?qe3{l$wy`ft n#T!۷ SO=O,--$Z6>d6n뎈 p8pL'D8餓^<Ç)8Zw}NSBBǬJp`vSN񸮦Dя~t>|-LWz/] ITBYzO>sp4sȑ#xӵƞzS8nǶkiĶ AD["TmD3Lt#A/| =I/'6Xs󹎋?W`oS6JCܹsqqqqqUDĪ Y&ig%DB077{nvNσ axq6ʁsϊa{ ˁx7;;;33gt>$k;ww:uf9} YQ(`Oi!;[ؙ8-0O9r( &r-0-$Ne=ᨓEda5wʵٍ9rȱq0:$^ w:ĕK3jP3 lFf'KؙvBO(GG=5ǸJ8݀! Vd{7>DA؞%C6c@t2wxS<.5CXn' pD$ۧԭ?lcTplUXjYxjzs1c|:p9\|JZ]$j I>)(cc w "1qpNgZi]3,|aNtL øtsȑ#G^[:kqqF3n7b$~:Khiŀ֒`IbYlDp9 H0%0KklG>x}[)eZ * _Bz- وX,2ADc}{L^0Ql6RB}<>%dž¥?]TNBq5j$qkz[k Bȑ#Gi8-dxyydRHڱTaE*Zk[&IޛUoUיd$$a  %%%Q\6~ DDDpϧPuVX+9t1AŸ}fmmmeO}˲D"4'ʒ<*;PwlԬ/W(AQfQ:[1PTsX㸮}N(!Piϑ2!`=+|Nv%giI4* k7"R4wp5?QcU(]>âXծF?bÞB)P۟*-81d(!7h8vLsjY[7 w`~<wy 7\7t9'0jY(-QZ NQ>NJ8f6lض[%؊ {y lM0/i<}ڰ`>Z%1H~EG,sTUE1#Z~}$Pm( Zxph\p?'WY7Ek@rL`_O6D" 2e7 TQht-)eFUWRnRM^D=q,q}!hA]?G+8ޠmϢx-eQVr;vּWk'$ݨ󒠃c4M jpeD˰Kў_Ʈ>S[nů^ M:$olX@>~*U:`>dž==̲ZF!),p}l6 (5}BWUUࢧS9Tڸn "cxܶmcѮ.UUGp㎙G ?y)<Ȋ+L<֭[8!Du۶߲,۶1]+ gYl׶mA b |hYV*B'˲G *M6۵m۲QFXv؁dzq a87t:ꨣ>#<#:ꨳ:R!&麎yt]ʄМ;x >jrUW]u뭷_S+w'N9}BjLĐ8՚)H3!QЌ1$LLJ$H"JqPdH:PdA@ݫ:b(N{ث~R*|߷="=<"cp0F8*(oNQǏo=J5vmݢ +.J p,{G۷m=~R.#(6pR># +Bz 8$d¾[&0//MPS\ pCQ`W! B)d2;6ɠOcL4/PJɤyU2s]7Nc"X,w}o &\w}>m3gμ袋fΜ(%\f˗/_>|BȦM]WSO=~|eٜsRjǞ:::Z[[;C>sUhvw?裮ルLǕx_W&L<'SRh\Œ<~bd /-\IP 7VڸqW_M ,H>k2 4 x:ɇcYh€ma( &3h}|wqz\Vihy /̟?q|f2ao۶ix bBy^?4X_䜣B6H*8$dŮ7:)J^wuٳًEG/1 ؖjrC{E a>D[ehD]RLT ohy /U:^uţFPD<ߨ&ryI99'2J) ! P(/y;mر1B$܂Bs*vY֗8]`}[l-(dm( ~ո(,8B^i&ޅN%ض}){ッf͚'|?رc .=z9s~y:޴i;~c/ҩz1(rw~wyg.C BHnjg9]{ォj}1cisn>?o=ܳ= 2JqG]zc+Vzwu3 !K.=3]{n9s.)Ssfzꩧ~,[3 MnkF}{teYhqt]w馛ƒ%K,X {]veY3gtюPJ|5kdYf]uUcǎEƚ5k^Eܻk IDAT!̙3/䒙3gڵk۶=iҤkvh/=GID8mɬXK UUQT;cR2;8>qp)&#lQlP$ d@'2ι|ꨣ֭[m:umɒ%GuFL&kgJ[[[<ϲ{;N2]tQ{{{wdt]OR0iҤѣGcdDȯ" |'>h?dɒ ~ܹsgΜ e~;ߙ2eJ,;m۶qF~^~Ǐ7 N;]ӣ:cc{l$dS՟DC"_}\^I>K$_Wԇ &9纮q_PBif޿+*EđQS xnѓ}AVU.P;.֧Џ {ܹ  SOٶ}ay $(}he˗/7MͶm!$kgwŊ=K/4yd]QpZ0 !$Fտ~k/7o(+WijYֆ#R˗/^x͚5s5\3gΜMnK8XtK.=8㌓N:) BQQ'Mꫯyݶmwvvr6$4m޼ym9T~sM6]z饹\.XuuuxhnT*uVt ;g2׿rx<$Tuoի;::<jW^yeBt_W>N6-J}xgf̘qQGBTU)͡ĕt /ضmĉΝ=ľH{9y3g}w}乌l ~drҥ .\z>￿i"(l߾K/馛͛ʕ+"X$}5ba4`E)Eu]_z5zH$t]GMeYl]3!ah,+ 4,r'G]wurˬYTUK002r3^M _… xO?G?Ѵi'WLrSq '<'x>xAT@р!GK1q{©[b… ׮]{gtMgZıKE"Hh6|ÁmK%Ў >Bpრ~PQ4@Qu]]3JQB)(lW1(PFTh)n4J.Ip3!mmm'po~z;c:M`y`đH$Lċ7Gy.C`ٲevomYփ>r FR:u3nc9ƲyO`T$ 4B}j7[ASTvgΜyUW|?O ȐL |6lx뭷zSN96}{)s="D YɑH$ 4QepwD0݋"cQ+W}bTC8y\kﻮA2EQ5'|O\<=XFC')^@?Mx<(xiwqsεm5c,NiYi lpoN;O}ƍXOO։%~ 6` zO X _5\/ٹa:37*)"tmܸkڵ/§?i,H$6l9{7mꫯm~^cأ>8͛7o:~/~!dY0Ms˖-C5jXr)r-0:x<8bZLJcV NQU=a>چض(JQ]yR T*6R-[djtsV9aQtvvRЪqn#mۚjy9N {pPy1E]裏i`my \aY ao(:JB.'C4A]gIwt^`CK :ZRopp 0ISx}뭠L&L&EUbh?4:H$`EG 8 n D!d.zJWVVRpPVW[-U[]by@yԽ(PTpTXgERZ^./EW.8T-bDzfu#/ 2;Ј-VmJܠ4cadٖl6R ‹{zz(t)N+р>QNm6j(۶QPru1c& WdI4?rt:bL&\.ɤiA|,UG.$J) #;r'1P|l-xBA& Á@GΧHݘ > ]  ~3Lj.0By*$S S'AVԊb R 6A@h1P31\R#XnH$ȣ]b mV4нtqZG¨|Zd wvk S8XeLt#QkfEc0Bti˲Dm%,:1J\h=ϳ,KQEQ\ŋ0@8r\.J4-uQVN&l6H$r(f2T*)2%(ۄH}1{p D9hTsu2H>.X,u!yH(cょ&0f d@v]?JA;00Ƀmz6QVLJA#@35NlЪ4WRo3ԛ#ԕQ)_+еI$dQxѓ8l D zv DQ2ZEI.QbuQAE%dCyʒ܂B8NHÂOM V0;RPj CHUKpab, f5* Oik m H$#E%2PEt!)Wy_~vA* Aз*]*2.*?DyoJTI.055(8(8GC2iNG8Aaq ?@U Mh&J .u %LDE^kvO2.@%`7, ?%?-йH$D{*8*,P+*(.ePaнWp:*8檥4c;rq+LSuF"`L-B:ndY[Ęy6\!haJ c4Mb\4‘'9chĄJ"Ak#l!OڃvQ(DAA lSAB¡X<[qҽ #C"H$M`uhw 5b`÷p Dوu>k#H  ҦZg@ȇzJi"$!샀x{bA&!8 *`4ԡùiDE`4V XgO3cD"4!CwpVUC8mc {#6E (X@{ =n?eh(XnMB+M %췷$|ǎN"(6'+"j# A +d WR۲,N|XHË35ӣ?J''M=ǒ]E @xw-T_)IШ4ˁ;2BSFcZ B RIML)X"H$D"#QAJzmv+R#Řh~0DA~d=b@)ns$(nW[ hkM*lIl$D"H$&rO+xP1pYzU5&_iBefZp YjM.VD"H$f17h1uW&!Gc5xZPFHQCV"H$D"HΐXv&kۦ%:L%8X4MMQc<=ϛ8ya1ömJӕ0@)Bx'ڲe #4{C}WB(UUp8x ('U6fD/sG̮B B!C/DntG:-iDZ*'3%S9q Rhm_Sɰ8v .6,.!z3E}UU9T''|G1mڴD*04Msa(N履~ahBe9lO&URrosш:Vm&H$D"T0]%U>}d\3yc֝r18CA)mkkK̙.M\s]W=c<(J"L|傯쿺ڻ4Eum0֖s4W1VD"H$D-P \ܶe1 ~d#ch>T:1 !>GylNgwW,uݴ-uLu S((1y&6Mv:fE1 clۮ~z7VV%x պԱuD"H$d7*Í~#3ک0F%,Ya}4_ QQ_AjۍVL1q !LQÎ<a$J8֭1ui5U9N[9sewut~b'}ߟ0a{s6snq]`2 bb h6cMUUu9犢PJ]ץjY!00-uqxk4<{C騪jFj|ga|7 ua=D"H$Qt*!ED :Y T~F}Ty gj|HYB L9omm4qUUQJiJU8j\.L s_p 38@z`ymPA)<ϲ,B(4 UU$m9|QwBcbĉ6lu)eY5z LU8Uy@%MP]JRJ=ۡpϏJ)g>1_Ps^/5?aU _Q1s"f!F @^cih3(>꺞H$_ޠbv<'uuݮ.4_+H$D"4?dHcjR^h*\d:Vi7G!R!DaV;PJ5M&XnXH$6n(/~qW@;} S#AL>XeYTɇ2KD"H$nH{`.W^ 5PlQ~G+S͓PrVF 1\"-8]< cwυ1Gō?jcH45<Ɓ~ƌzeh߁)XT~OOꫯ_1V!O<Ę1c֭[Q/|'ꩧ~ᇎ@^"r_F5^(_-/0իmAWJ)}PXqkĉԧ-[/|a̘1[ZZ: Ji&Bx3Bya`' T`Xvء#)"F^Ȣ2-L52Z"^;l{zn[ ƄםL=0ȩª*(<\u=c/_}&9S_{5!m{KRX:uD"H$nK3yCrYK4Z[okkemrP$(3A<"Ccwvt-u{ݱLJqsj6K͍lsjj Wx RYtBtwwSJ[[[1G qG}3>cs` ^===h>UV]~e%IM0VaT>8}߷m2 &X3gδiƍ|y[Ə/ X<J$D"HvOHn a%mҥJ8ihbOwS PAlߊM2>Xg۹T[߲m4AOX>h. ~4BH˸vW_}uԩm@m۶>B$(ns4njd>9]׏}_4˲>'|4͍7ƿ|Î`Q0P!9ƿm۱Xs92e矏#&O<> f̘Nlrum۶mܸqӦM7j.Þhv2Ʈڎ)S{'NĨc$D"H$!CuUbٕ؃7Hofpx.չ@stͻܟI~hSm'ۭxg_}Ŕ3>=!<%'T)Y҄V{ft]g=ĺ;eʔ>^HR p]uu !RMӺ Xf \uOyl2l\xᅗ]v&(tzՌ1m[U՟'sUUu]w˖-O1 4H҈YH$D"HB}7%k _lhn%+tǾ+Nq5 (*.0tڐ l65{ ǡ2!dN?ot$Ns^ӆ8yis5Ўa\d2xbLںpBJ8 !>O߾K>cJiAlQbN䳱|RƘeYD"1r\&1 bmcsh'b:hH$P!@MD"H$D҄4pa?P^(@( O0\3=VoeOi>oߏK2O5LHFLQ$RBDQ](sNQyi)Is%.P=YH`Q2^j7'C{ KVz lRGh"=]1S(1uszرcMDox\>܏ 彊XUj ama4VYo]4ijrlne>v(ޙ9fȥ-TP[O !Z\792 (8PBH,r`0(::;;Q[AAiӬ&"h}4u]r0M3cj1:V҂C"H$di7;Q)?%K5JTQ !D[wؘIwK}oG |}Wh\5}suhgZ7T5#ݒ/]뢰CuFxVzd28F I*OMTUtb"P="4M0G0(z` nKK M0 *(E-qH$D" ;CFCǰ{iyn4ϸ=sjZssw^tS e nk[if%fPf,*{(oNIh fN䬮*qP X 1LoӣiVDUU% @O<۶N3 9PQ2$)H$D"dyX[k #*W@tZWFӯK<> /Sz}Ϸ~TRhUu6[| 9XgT'<澝{mnljo>gYT`RA)WhArPQ0XBHZ=S0jE0yhFӣ`t$AG\ VLD ]ױi<1=/E]X&A `vC"H$dw`*cV䥩KCÈj!|(.ݮ5Ty {L%!widCd=YgbTH'>(qؑc;}m[%dR*^ B [ ӝJ`A}G:ZnA#> 2c ?&Q\3'ܱjGT>}CMZpqJX,oڱx#dޮ9i'M֩N)% =[3z D"H$D2aCT~q7aX5|R3AFR@aC~{%˟<$6XW11M:hг}g2/NKθxo8\>p%JknRU[` 3ƸsAv= 'O pj>ϵG!op {JÓ2\MD,_Co#* W`/D"H$I * S 8"@qp* { 2 ڰS|e$"b1+_BB 8BDc(@)l7:hɪ )T9?DW +-zPϠ }r2V,,27yUʿAN L 2ZM2G*88;^GVFؾ!~j7a 41笹mz?=161צL,&M[5-PP5)Ϣ!Ui"sU6-#f D"H$IR]7!dX$O,kPOԅ:;TCEXUoZҺ3*͢$I8h[x5GYMVq -v㊧ XrmQMQ *y02 TD"H$D2 ߃LZkͺ373y.avrG8]gYa8A"nPA㹎cSJuMیRŮA0HsʒoD"H$i Mu'e P*;KO]KɟG(8vMT[ePPM5S>@߅ 8 J!s)򋊅@x~Bp1R5D"H$0 "@ Dߓc@8 CQ^JR<ψs~?DII,]fJ!b7T%槼TX\BDɒ£>T&96-6*vF=x8EȮG(ӧp7[ Jy (\.'}M+o۶P ̆&? 0!۶m67mڔ0X,ͪZABZZ+ 4Dn$D"H$IP`K؁!̺0_ 0j` !lzg\M$T \E=۵>^cirA6biQb۶ggg)pPJ0tGuEQprZڶ 14aIJjjD(a뺮8Eb݀)"9cl}  j8c2AM{kHfA8HKOAҏ ^eHEF9|aH)MsnNE#@誡)( U~X⏦TrpA`633S))y^8Rz(rrLVұ٨+ sh4LTUZ*yDN)@iu]Ӵ;viiijB<,z]QZfYA]!;<0lVu]E1MsAvu!q  ÀAw!AA ɌXEz :̒J524}.hxUYȹmJ]$})Ԍ)i|9TuB\ UP* =W8Mۙ.h3Ԉ 4ٶLDgyѻՄUoN('D`5c U'7_K ">۶!Gc||-oy*`3dB.T/ա,< oRJX{ڍ. 뫚DCV y,H/]KT;Eg9 ~iDLONV {ڑ*D)!$( Ѵud^vIȎI_eNIIwA5xczݶRh4oMMMuY!oQqz/| |;gff LmPEzV3M\.XE)=ꨣ^E5)i2@CUU؃>{>Q$ LD,VddXe Èc!RDUըn  (#5r)XR#GPid$ݒ{m L>w\}~# ?Rm۶  )R9?ݸqٟկW&&&ZA B=/~qzzڶ;SO& D;sO r1w\.Ci c JW|w]ײ,B{X8ԤB8p[ܐ!AAd(]$яF] Xm mh MeJeئWۼՏEQ@:* W|u݇z1*n8ȕ0?__6m}{B Q.!sj`e8rV X^r y ^!C.DoAA$}+af<l,ڐf6͆ʥ0;[C[L}_4hתiC5*9]7l>۶! i}^[LJĆ 6o_eRy&0Ƃ )!tg> /w999if;F166>B c R?(O:c9jt]?ӟh\馛kf۶m7x^{++B8a AAd8Vڣ=ifi3uӾۓ8ZFeOi$r\|Ww[I<ݹg)1۟ș]H|$Q^;_Qw;M<"@{ιm۵Z1 BXȏ0MlٲvڵkBQ }rK/%/yk֬m{nnl `||4J-˂]4Mh~Tm;L;uw]7nܹs'X(iBaAAdQGk~T(Zbۓ2B0#M;{\j 4{#gQ<5iyBFy^р'wpz뭚=}k !@+5`]Q4?vmq衇^uUзBo^VO2Ms׮]RT*o6J瀀(sssT*v!z)!YgEpa;v87nxiMoz^8AA!>Qp&2\Nn&8>sn\JSBsg8~ -fhh^$n%JH9.AJJ"BBBM!TEA4M4)yd׮]w À0 o/>I\&aX*!wJT0T*HKQ;۶!>2S  c~m&NG0N_[3%LS29!MdSƻ=vd`8Uh5&lݎ&H(3r[KTgT!$w J9(+ B d@{ZBUaDB d[z}ll 1Z)ur)r0 x=F l,OsV B)eq q x pdGLC=fpKQڄ߆]o( $YضW1uhmruֽP,~DXB 6Y^%g VmO9R@N ;;rh@AYDэ.jA%=5%Kѓ@ӓ]$5 p JQd[ 0 _navt Q4AAAVyoO:l."X4>].}6UdjpH&5qpEN)u]7 C۶eI  m(b6h"  Hw|8G%(ԚMf!CF $$BNSݑLV 1`K/n@2nv'1JiZQ"n[H%"NPJ9"4tJN@1(Jvh|Г5"-+   Ɋ)&  OB0AH£2KؙBdy-u`q-fԒT*$5팿ۤQJ0(YhPB9Ihoc)`q=#r/v #W].4ҰOJHP8]802MTׁ'!$bfgus1AAAzR=k/E7bv=l!E.,85+!b߽UtA&4'F|߇“č5M#Ng aMBAAA9%KIkhda(dY9Ji.Ǩ|BSVw]en@UUU5MG[}R( toBAAV KރzQo&$$3zG@Xզ ]4y(D)mO pbTt=DmS:n֦,RAi4@7VEaա4,Ph#  Ht&KLy9@n0QBۣAviE IN_Q^Eݍ.PR \ 16#   n]SeGH =C2L" p ~䶍Va   x&°mu~%E[K1AA-z̞w)ǔ2#IlQ$2@Xp("Q"QWSjߣ-vAR2IBh {|eA Q}T aeAAYD}wm7ƟmZ6m + T '%}s*-ayӥ:Ht %TC֛bJTVmn5)  ~ N-$YD6#LA9Y%AAdՒjp$W{V T0<JCfzgdQϼ#A  j&~/fj2ȧG'[<Ct Jd>w4 &mR Tv rux2D   2I CHÜUc8i"!MC~s<oQ ptEAA)K?Us˰2dR:ʏ sr ipΛQVQ   ): $=6t E%$߬tG"U:0}n4BBFJX0.D˲@KڤۓaҲ{iMd1:"  !(!.DWʩ E!  F0% e!PA O !d !%ǓR=/%d⑉67208r{:clUB"BVS!hy0O*J\ھy㣥aLJH? ٬#1:ǰkc8&AAS72 r =(ǪntѝCAAGu!=%}Bz4~{@E.3TpDAAz!҉Ɨ<9s\Gտ~$&"q.F8r3Y iR?+~AAAV*q̪x\ IDATobT:mT\01'Y*jjpd, r6#n2Kʷ_ QJEKVI;^[tQFA)_F#TB Ԗ0 p!@)oڴibb /MӢZ\|}{!x8Jh4 rYsΡ͙Y.ӟ}w}wT:#'''0䜃 mj1vA1q4M !aheY3y뺔R9 1AAQr&{^LbF?|`ɏT&I+$R[hH´hɯK!$*!?"mDX,dBD]28Z* +\YL|} &$1?gf"/KkBFj cc4hphh4ca㪫 uƘo~oĄya~_k^STTU-˄j %Piڮ]4M3 òz՛@5 |@n۶ 9aB|'ܹ3( h  H(`8t KY)Z)JJ{:ZX ! ~Sk^9BRAi9jRi||B6mm۲,1T*me[(϶mhLNNNOOA),km?8Cr\я~_y![n;)/| y mێlٲ_̡zgミqw _~K^rgtAmsο/~ju=8ӏO>y7^}_?|Pe"?5AAܟ:?L^ן=  ;eFs(GN&ڏޞB8 j"E"DJ%^ 'uu]]A+bO)uAAT3TUmc]vA=srUUZ w}y睷~^V/mڴi=:3~_m۶m~~n;oc=e/{WU0>99955UTtsAAdD М5l޾'.~`b$>miiݍߺ,P2({!5u| / L{RAVT*낐\p%\xP"4 4,"7o i+GE E/z__wC=t駃ҧ2TUݺuk?tW8 ml߾h=(z;wA!s_җ~&xGuԙgy'y䑻8ey   r^Z`/;/@>%ȞeIYz_ XJw~CnsTj{ (`A7IJZv*Y.#|C"@p=04 Vwy7o6MV.㎻{O8|pݺu{'BoWUU* !$ Ch uM,tug֭(` DËig}^-[|͗^zaV !1q  H( 9Y)2{j~f3af?!ZR}_UU4 !Fn޼q!lAky? t]oc13==;<餓4Mh46erruG}0jeYLNNY桇 4MvZ˲~_9}m~϶mPn1 +^OAAɋ{a<)y(~~D/~Q`? 'B TN |% 3J,'qـBBEYZMj-qO tw&H"ψA M# PUZ%v~~r<j8ι 9mVqƏ~FUU4 S8'?ٵkWq"=?Og?Vw裏~ ^`i655uVu]}{キ?>Onݺubbbݺus,huBAAih!gD7aD)6$^<"2 z*6b߲d/؋$YP  L"agVӉ:c+ddM_=fLH!~ޖ?, c\TpĉAS0 AeR]2M0;H7h4*h({WYƘ8ǤT*9snY̌mۚA<*e ҧ0>A`&<lۦB&!%0iqA(ZN233sF .AAV$QNg\*D0qůg?,KAY{]A{PW%-~bZ7! ;e lMM@ ΗlᴻnTwgDv ʦջ&; !c n߾\.CǕW^977W.# BB./" 2y !DTr]WUi095&&&9H܀KZ ]c`JIBXIJ,ðZ͕J%JiZw  ISY0KR~/2gp: _Γdp6/yttJӊ#kG2#n¿} &#%|>44G!^O>Xa=aw!iA@t}〶)B|0`LXDRHDh 0Wf`I 10AABkGLSGqo=|c}~<3kR8$cvy=ouH(e$:]]Qgw܁@S?yD)`pDS V*  > QWU(c;*z7Ȟ)D7HQ,  5 d}J,BD/Io h7̗l鎎+#KT:ЋFtʸLAAIC݇7ٖڂI(I9B (oʌm(1  R|b*R s(M6!tt$ ,Xv&R|ȵ6PJ)'TFO/Аip^y2RF1|F!7یI!t   QJ )!D(PAآuxEA//FS hbFwnYiO똉gCh@)m#Ӽn!2i/XυS8q\"d^8BrY2jJF1   IRrfK{׋]ok!ڙ(8F^HFb߆8uY  2PJWr[IhK6SJӋ\[jY~Ѣh:"Dvh殻  Hiq<"i̞Guks?u:ΒLʀրHr%:`?  i!EȥmJ~,TLb0еoP=p6Dzr: pkI)u8)X  R(_ʄDg96YgM,ewfG6h|L,EJe`Y!~X   J%o_jENJ" uIt$QCHID=n34%=l~hXDAAW<}e/UtybR|$^3fE͹0]l|ReaMSPȲ~Q(+ޯ8>L$& M)q;ܮx,oKd3AAA%JQ,O~7b!VuA^We#.]6rBFGb#\v+~}b;:MJQa"Nh AAi0:Z$2*qVmQY4ݐתbQ6:-DAAE;0,UH·Y^ y?U*T 9^+?_  2,~ž@ג,U>km_o(S0gO>Z92/NX/  Ag/+)}T}sVhL41KL5Q!=/'04M}J)\U0 0T.trFUUq4Mcq.  21Q(J /Fx9۟2ܐ*U$ۇ)uWV“MlD]BE7KXzs]WU!F7 #xg6!$ 3W#  +~74#öIŊ9S=8گBA֨4-n,c.@FRR(yCGu s"   !JzbGdP)h!.T-fkBB{D AYA-24DA&Dd%ɺ 7YrBPJ9B*rB@DaB#a`SJu]B@A@N  2R;+J5 G6wCvK-Wb~ LG#LT3f@ܣ$[^e뼋Swi=lѼ/40,Hj,b%8rDĈv}GȺ{y EQUնzN!8eyy^^ƨeAA"Oґ&<JiSx"ޙn_t&Lb w!A(iaAh4Lރ mS\Æb  69) z:S՞vfWN(2xII? @Q˲g>sMOOYfrrSO=P S*fgg'&&TU  ]_LrYҲ&YIIkI3is0%dp,f"cpD+BiE  !Jk7uw4,Ѻc~~^{ wk1{_޲,b;,AAj~LtC.Gׁ4J3llߴg kiQ!Ѵ}ת}Rh)PU}dxG~B>O@com;착R>F@gYM(@$u0FTBu9H~<=d[Fd},  ҆H^4"?gȋ d L3MigYGEH/lD JiTޣmB\ׅ$QV?Oﺮm ~/iY֏K.dnnβ (ڶ !_RcJ^[l1 5kl߾]UUUU !FCӴ0 mۮj /B'yV^v*a0jZTBx  HȟGCsahXQ(1z+D')1CZ\.k6333>>h4zn۶Baͩj//l%u'''ժIyfB;կ~uA뺦i !v PUui4r CGT*F> #J@AA s3acc0ί "ַ9rqD8mɞ^wl. ) [/,b`xkqm.rcccp'&&fff4M .첋.J)MT*۷CkH0 ^P L RxM7t?쳜.lÆ <^;77qh487oF1>>~yr!vmW_}u|in:Ba낵0u.  *CBXA/"Bs~g 'd@_%VKAYw-ډfɻD7$eѰ$ě(\H>%H>ez%m'yҝEUI)!۞ނDJ͋}, QV+i+S'\tE凜\~hfY!DuBD@8;v(J # 8NZ,G?k_{;?S_|7>|#y'M|g?O\}_Wuօa{ի^};w}:<*e?GAAU ~mL3#V1'2J:RP,K9wj@ j*w= CMӄij! yFòY˨jAj](0 0Ʀ* x_233(䤢(k׮%iz/ 2PDAAd5q}%=ϓ>swtX 븊jQHm(  PŶ 8jqfffTU j!sFQTE8jf&JJAt]^̈́?O_׆asι˞ySO=G}߶FAiDЖAAYmğ8|wlQ/L~#4 F񟅕l yfwcR~ =AW.D+u}ιas,@.v@CA (BB\t EZ>q3є”"wMbH#MsiF&}" H^X|aFzܹӲ,hJ)-JGъOw]Ei' Bf{+_ʩzNtp Qm۞k r^oY=nj   Jxܥ D~+D,%7~ bIvՑΖr= \h7n(<65fɞKE[_j`e8!,@dE[E`.OGHF- !(Y,lO(J)-Aöeh@^F\}bYV5(|Q!Z!}'&& atE  k9WEӴZӁ!DQH܀xch@ ;TU!  E@a)ytaՊğtexٴ9Az l.hR,Jo4 ]) qJ)4vn(~7рxL}DqUUA,֧4ن  Or[."c@M| du\ e|?銒WBGMt1~%02\ ]ս)3`   iM=In蠦g+9<ʳ>)]GR6k str   H1?Ϗܓ|o2 9X12EމS׷_,*\Vq¡4%QЁ?f=ŷ%d*eSX}F֦S1_TAAdKQ)'PB h(!Dpk-XPP<0:%*}С   B)yEw;=bmL4)J7ZၑjDU1D@CBr_KsWMYO3!  h2&f@bX(u =̼&'i_3)b#>;`ӑAAA^(2)$F|wW rY0vӦm㜇aAHJUUU`! BAAѠOEw9^m3V`,1 ~HBhy=nyruM6a롵V-ɾPoz7a|›6R\sT\?qxƒBm @0X aE(1@AduS/:*5}GwK^*b*$/ Bs  JWSPVP{I뤿R5>Y*[~ `dy5&Ծ! I&p cɗwAAV6aJ?}ϋtOxd%C<赌]FVE#]Lǁ7RLQkEDAYaPJy~.ҤyZ!2`d^Oil6M~+I|(Ǘѫǒ{{87O)?F "1(^AAd`S` ޒZAJޥ&nҕ!8jxe   &^3mlhE\##Zz#>Ύi F7AAdT%ҥK>zG=6u!74#33м4\"HL|4 4`+Nw1   Hax7}X1pd,#   HVF=j:R-^/І[FaAAAF'y|6uas"~epĮ6Dz>1fI6ϬCbO   t++~[f [%e^hHٟUt@1y@ׇXUU48s7}Ѱij^OMM@5 |' JiaVxq@a&D:`_0imCƮ] 4a4EQt] Y^C !hK_??bU*3aڶ qLӄBiD2  Haa\;#TAQ%{\FB ?ʼ#!F̪(sa/ٞ.h@,$]>A#`Ҵu|l܀\?2Sy!!d\g&-t08d$Cv= 1ښif!hή_0 0QUղ~J)}LMM/u@ D !B0jڭ}w N<ĵko6@,2ja 166"A v|)2998ST8˲N98 P܀\REI IJ,B08  tG?!&L8HRP H_tcD,rg~~~ll, CUPJ5M{G<>$aܹG{CV@~߾}JrgtAz_;뮻r]sy^Tr]瞛 ժA0u֣>mo{뺏=C=ti]{SSSrY4UUAl~/0@/A2o0 M4?OرcnnNa۶yk֬ٴiVU4!k_aAQ~=qWض gq;3r7}ꩧ 8:ߟ1VVo֯v:Cw<7 lذacccsw7o|ce]q/x >p |+?ax9瘦8΃>|.j7nu׮]{OMMŻ62  gtedM]~ ?|YH;8ɌɆ;)zd: !\4My|!n0gs5d ">b,&|K_:A}|x뭷?8#~Mo:ꨣ\ݲeˇ>`r-?W_].oK.эk^/oxn}{x+~O<񨣎$qH ? &??cJw}mnR IsAA^I)#Ws1r7-yGāv "A;L A%ˠ[8d"oY"@hꡇ:66 m@7kB BQqE6ZV֭[m\{?3k(˶mmo{ꩧv-[;JwO,X511avT}>86lغu;F\wGax7n޼y=(˧~mq˲EF=;  HGV^Ҟ~JğNJa}涺dg.}]Yעߧ9j8]Fy" I!4hJ%D,/aX.+(Bt]W5+tW@R>!aSJu]u\.?sz]Qwݐ_ au]jiB(u'&&@0 --:#>O<dATQ]םuT*j5q  FUBVvz=yv|Yh2s  @V{SF?*q M@EkkkǙu 1___I+ Xa2 kVm"s=O}S;E6#8\E3gpV7po;ܼ{X{t(:88bk}G}VydY&$b! XQ"\Oqet{;P~<džlOf5`r4bOn%`f:n?zlݰ}TN?ucgk6'%;ϋlk)$"Dd-Rjw]NJ8ha$kkklﰷgњۂ IDATZAk=^|_Μ9o};;7"}nΜ9n^wK_R7;m.)D7wsܛ~a!Q5&\u]w7_y]th=׾?я_UDf   5~(P| JϜbU^k :& `_G rX; ̙30 نm:`08oO~o\|W\q~%8,e9sfss~˿˛y䑭믿IOzR_|>ᄏn_pOo'>vZkEI^XΞ={kӟ+^ IZ o;ĉ/zы.r뱵Ł=luh7*0֋pP/x N<}?MP8ș3g666R^xϮ ke0z=Yt݃NhRJ)SG<&lBFwvv:N(ȉW8ia} DtrONO{YVp6;aNAAVgd])*_޶՚^TC:jYP9O?Vc|YXcdxʆ?r$WTk{P\_ D\׼| -` 20 >ez %M'UqOY$;}fOrSnaÊ?qYAAa@8{qt54v_,@ Z#I"isSRRGC:=R   )\=ʳ'Y䲼Cj1kl9ӻ^OGQ E}pm"hAAR_!ڍ x =\江H: "ARCzreh'9эq` lU+RC Fa!6)8Or|Sgͬ$d$}d_]2Gq1,V6 4 (jXL^AAApT_d$$ =u "rrp"#/"۸OufI|TΡ+ *$;r-k3]2%an Vu2 Ζj6Tt!'1?ҡg^q,2   J*,nf&̱X/Jcd5ND(su  p`d%=R WWu\[,,s kPfRp4VPJTD#^@KAA;Y?mhnZ~Jh\R%RRQGA[6 "TJiTZQ!";lD`bMAAh p, JJO&-PȲ,M\M9$;لn,0 # `R*0J#P29; &!  ؼӨbNo8|]&hrTleP2C4j&cJ@DZB Qc1uD߰}0]á|  Yݕr7> ,beaǵGUCg+SD )DL"*qcwv  P3ӌZXq$ OҽcBjO!LDMB4""ҁx!bI9td;aZ褳cL26TR!(FՉPAA) (H#?A"e%!k?Љr4soӲkN4dUp}Ɏ )[YLɂ9Y?5YC!%p'l" y5 ӥ,dtUЀ"c(#gX !  3`1{$/&Ha`8d8J@fHZQmaBWV;AAA(p>V*gɔwFŤ_k/,I\(@DFD Z\zTlIAAArT?H ++ҍ"X4۲S3[MhT* "4 1>ss5].W  pX)̟Ud5l= ۺxV",/ku̡?Nh'fJqP@DfnK 'Υ{͡lRjS-7IRBUª^R<(ZvAA|˩Q,0K +K Wl1]9l LJ~4 ;HF! 0f  HJ%9d ,+Gbu}sN:qXFDƘ s|]^7Zt7|ӣ(b;DZ+ĂCAGsva14Rj1l@Va/edbsrY0{3-vP`%$?"a@fn z]v_AA@0 -IF)CZC'U j'WqeѯX]1({"Lrv=A"mF\E w !K=9vxs}I~=U+) 6no9‡ -D4 +0D&=ꉔ\iIJz@w^; "1DQ)rAA8—lmguhV8?uGQ.(PZ Md-`BWfWpqz6AFHsfSM0v:0+A\T7~?T" at{gI=|ImrC6@m""l9 @IޮZРpVdnaȷ  G{%(}d7ѷ?&'u}ȹlfeʓ5]""cw;HC0N ֚H+P H9 bӎ]  /lUY #Yb56Mq0]'."ZZG@Dªf%  . yFJuy5NVrUWr.[?%,-௶w{"%g~c?5#]"ZQ^Dy%QǢuݣBSy9kGë09ȿe]X[[SJmoooll(b7z?!k+x$[onn0 {iz8ψ1foo[pv[;vl{{{}}}8z_AhB, R-cbK{b#+Lw"&%"e];kX[SյF n5n-wDs̪byv͉>-1P""d.hW[nG{tZ@KJikWG5%"ը((ǔ"5bÙɃ'N8`'0 8x90ƘgvJÉV ^skk%HAF)uԩv~AAAX+ 1Z&*8VtJi+(XGSaDg*8lw}#w)7_:v}N1dmGRl)jOO(bkƘ^9{k%q AA9WLY<"fYD'Pdέ7Q< 4RZFT@Hc3>kե(Xqĉ7Wŵ^Um-Sn{o<m4Rq7جΞ=ˎ0Qu:jxZ'=IAA `'uԬ1qUڙ.s&XTߒﯫsQpc)N,<ʡ"Н9TVKѩSb 'Ξ=O|nxwvmwXo?}{jZlnCBD|{czl~>(~.U  P%AKsR:hMx{&wRh@ES?Pp? nR2NgJl/ӭ)뫟#DdG2:4[[p81fgg??tM'ns9~闾կ ac|lE+YZpc51=k֭VMH8+/+?-T8&quAE0 `mm-!jx8 nʉ[g]O NAA,^+-/:hhBRT,5zdNPc"VL,憎v{{{رc,Aao۬`wwv:VEwܡ V4p wSG7M[[[ԧax]wr-zֳ^W_zZ뽽~_yg=Y7xy7?O}}G666n+s,h811ɓg|x_Vuwp8x׻u饗{キ~9/|!{A7acc# [n媫z_W9y5O䓟?<畯|sCu:./r8yw no~3LRApa' >Z.S: F %[w73 @➥\s.6dԯv8qb{{hZn&J}6@Ȱ}`0?__cyp"w/}Rz׻g# Cs믿~8~||{}~#_+//}K_9sĉ+'؜=(>-oy˅^777t>s=n?wO~|?Q=ϸ;n+|SW_t?|6B{}w_Ս7x?IOZ_~~'O[>=ۿ;;\rɃ>V  P&{徵y9Ykg`kC[AжT'^NE(Df2=ll*鴽' A!"DlC-ԛ$-|*L; hpTABe3?x;-1VŮ"o}[YqvaV(ZG}too X)ǎKz~?Sz^B+bmm59yӧ;Χ?}C^z_뮻.bVZ=qǎhkk 9^tww3.LkN_ZC=t+ 'N:un=~1 hXjٹ袋ָ37A9|g<^{^뮻k=vX  4*D' )MtdGɔTD[uΆ"0Z)PD0$CD)R0z~X&g69(րe{1 'NX__;<j^x!"Q?088X__ ÐsdcvDQ~￿nV=PXN1:{pm0n8qs}ya?OnZ^zi7:}4kF .ફ$,[[[\3\=up8a2gE?򕯰/>ZV_[[cv!Z⊛n뮻{tAAVx]F]'S?/Y[nB,_1[Z^#61ܜV*КuyJĥb|(fWJeƘoO>~cЇ>%^w饗~{']&/| 1G$Vdp?1,8,za]z׿axw_0^{-o}L}{j2"NI{e}_>5J^oppp/?3?~={jcw}Q=Ngyw^Aa備r xdIË^[Mvr~-B}W`YZu6V8Y(`c/5ҡ1@@DeD; ÐU U0XV3/G~7?<íV}mve)/}K/x^w m1敯|e׻[~ /~.袍 N/Єp8?Pܼ[_s3g<~;qE~:{\rk_ڟ?>CA< O侽/xkk뵯}N!'pzޯ?O{{nQ?۾nmm]y啯{uAA f7 l򇛔Ŗβdb~o5#4"|p~B뀒0A!$DM"߳ЌZ[l5S1#>bq??! V058PE. 0pNQ!GkZx""q4$Oa 'EDvWDWًpA:l*rppt:nE\3aE1ollpl2NgggvWvz aPN^[[ى#ӧ򔧀=  B@U'40DEPiFD׃Us$4ל4j]laˏeʻ&7E gLDyO %eQ9ɞ:ΑA֦@1|kNh| "ƾ*0kNkDZcvvvR`'XڏspTQ%kkk|<_Ǎ1~#Yp({{{{h;Nqۛ~OtX^^-J!PJqX]NvcX Nb-w G=NAAb1'2q|de>^  bB-eV*qqB h?LuZ̰@M0lW3%}plޔeP5'8s +#XO~4,(nb30 9 PgMEGv;;;^GM*A :sYu6z;eDE@kJpzNZnˆ :'d|]D0IVmGgΜĺ\ g琫AA8y2d .F  Ą<`4Bޗ2܏KY58[w- ɞ1X뺕 IfJי%+H[*!ɕǗa %gīOk:bp4Yv#[n|Si"24zxdLizX{j8Vk `D,srVX[[cmewD<{,G匳p@V@(c8r8Gc=c&5ăSDdDdPQ hpO: _kR3rz`0gMR]c瞻Vǎ Ð\*9AA$&K8jېuWi&,¿JV^DوɖU*T4Buq:3gΰQk=Kb izv0pX6c0;pXV4mibY'^q2Qc'XzvA`G{Ζ#kÉrO>C?vŰgmmmkkz=tӧOa  EuCq6K'b1 h8l7Q[şVꢕH((<85㔥!1lz5ʿ1`{l}}U N58*kd#6`#VpQHF-Du|k1JYu[mɾ- N8vQbt:ဩ^o{{{ccspp` lKW  J0s_& lOnfՙ٣ڔpԥ)Ȩ мU>lFC ;tIRc'0X$]C464\&rP n4V|5w5ϤSˮ+qyVN\3V*ZAȒ/"VqFD9-7ǹO18ڭ S*8Xs7"&DQE^@  P=,K*,a2!ڣ>2-82]xq|%K (ɼ84ԄBAA&R4`U--Em]dTLLKඪ65c7-vL^o\K$näʱ\?!'lIî&% 4Tp,{M2O=M>;(Ϲ-*_R%`șMBh (|0W""PEAA  HRR߰; X4-tEZ|@| k<(ʟKBjw-Bj"C6I g>!s۔ ])Qy< Y{=#860sLfr "eG%3r7Sh $;D RJiTh#rAA&2c7j"_H@ceѫbon*+8Ccr  J᪭(/ygE,PA-Uv@~LF-*]$fg,;G$8ڍ"HbɒŔRH )""23 Q[  pp{|viNěPXM,SOuF^,dW+ޥ$9q湅u[J1R@Z+ c=Uy˷(  $LU69WqN Kj2Tɳ|i7f*SCS[ "'Xq[y2.CDtpq=$)9 &ZSL)(b;3t 6DAAb,b&P %9iNO!Qpdl4V&"qD F $"BC8m"  3=l PFءֆF7,CʥyADI@`#$"RD8  ˜eeiu\K6ce5Ԋ&^3n!4C1Q$Rq(8jS+YgFmɄ6JHId HĎ#<AAax \ӠZhPrON rl 6&VSB|*0,[ BO_r0-j>VD(W5BGs!1AA1_$)7,A@gIpN#_luZ7Gn8T хFe{ƔR` h d8NJ(8AA!I[kdjU$Fbp,Pe}GskH?xrP!Z)5B*  BUV152^UT$-CdG߳ @)({$Jj(b"R,7 @P4ADR BPhE   X2[N>)X/C3pza!)上 bޓ!9B"tB)L|AI_UNtIJYq7~$qe*UFfPA4FwS#a"Kr6׭V2? jr*}-8VQ5>i9:DAAb|epmǞK쇙 !j(i1We- } 8()s4[AAAX/ PzGHϪ4YAPзPr%+*ª*8fU̥ř#Y)"  e(ؔ-iKKn4s-_2dSrҟ,'ā 0*1/|l*NTp,^xДSr?<  Hy+q[p<,~M rA[IGegYs%5&ٜ)1AAAhu^"}5ϥO|)}&) $(ja5A|8i?<%O<)ڂ4[<\PAA@q?)ٴ&[q9^T1|\52@0r- ?O\ܬC nx   n\%m7Y'hH:&b MsF+rSp$#b+C ƹ%/6)<5،ܒ8IQED7TĹGHNmHRJf  BE7ٌdEDh{KwE !Y05L;pZɏ` \fČnIw/*ez-Y)*77^Muaƫ͛*s+vl|Ѧ?sCR"ԑ$+`\s?72'fR#ۇy $K&=   xLd.k2obBPpyNwUUX  pb9wvcj)_朅ӛ ,B7]Q޻dزhM_5pXrU  p8HexA^,Y4pSO.N.]*yE}]%+JXlN"ej‰U͏r%3u"CAA`eTdϦm$TiL]Z.ɂVp$)|ys5ǭnA   0wH;F*aU = wm:MN~4\3l;H   ,պY]' ^\_5Jûwh8Z18Q̭`XM   qt4^}cYsjWp">byHƸCmkMկθۃ)( Jvd\ $\AAV Lx "U / "L FC z,5LNei'ԶkMQV>;oT?m1ӈm[GqvvekfS06ye7Hn E 9  biA;bjHRkWXܳ%E6B*h7fm5m:  BmYp9qۘ:E():Aasri”5YzzUD#7JA(~%ϒW  pȵ&.mȯk 7Wudթi(VHf(f O)]ӜL\r  Bkl.._.VpP*kotV83YiEt* <՞vU_=   0ƎY#䲬('3Ϫ5ũo*@jft.F3M^#Qښcsf5e+e0N^~{:4 @ Oa+n IDATm(C7MVG 0-o   4>vd@k hxD- 9RQQb? !Lʼnrh"ȗl,خ*>%)wt~HU?)Lk3F~oD-Y]i&'N-nZd([mFS a,wXpaXI>#QsZg}u8R$ AAa%(Dho߾_MKe"|m`jغ ޱe/ĔXG^ro^[{N,giR/ĉc߽ B vnAAA&@cw}m8*߷  c?![@b\&/uviiF]U7OrLx&m] lM)QFT0}o{o&@F+P|.*<6g^j> {,pbsx~G~W> :k0t("0F)5+Y5jkz-Vb.qFhu(RDxA[EŁ|UىKAVZ+gzuK ~%vcrwgڒX)oSifz /{s?m:BOFBe(S28o5=jla۸CN_רKOt?aYv;_j/T4@BEQZ "]L[0ȸ@0"dsbIq ]7Jp'=`+A|XMIݶ5b+#4c?oknH&*ռT h%C[>:Ƕlo{*QŁ6dGn+eJ4DUOKDט1j+91#J0n31/)ǖt']"/m8ϔbjyz gW[:lb8XeXk%;{;Poy۳-[#H@!Z`XsQ@`2GE9 L{4m4؍Cxh^aԓ|l;+|svPѴ, ͲղlOco"  4_;+7 iᰧF#RKpp3 ߜ4xKf럇\|쒚()T!NՂcz)MmG}Qʂ#XpF}Qh z5?h[[[Ji^%[݂4 wqooRNh% _1N⋺wYuA۾j*[7uud?|oկJkI!!bL 10a4Yc&Yp$α@lQdMJk2g byv_~>Zp؈-8K*8fKTp ϭ'xTpd/vVUG*8`< p0`1a1H0aE:-D;8h5\!"cLuEZҸ>n,QWQɗgYea7<{_lLyCfsCOb17u-|cy@|>MݳC6uE|Xd{kTe9i7\]lXitZmT40j+ nuah:aAV3WpdY1{Y vͽ Lr'GL~\3\Ƚ=^*8lc{Vp+KQҭv>7^*)_ǐ l7[ >CLmHolmQNGtB Q' آU{-81,<)/8jv-[bӝ-!%"T.?TSd\յ?TʢtMaaSO4 ݴOm[ ھ-E.R}k,M|QO~AUU w^Exȕzo6y MbPڪxBˆD~Ytq7Fݣɸ*Y>@-pJLf:Xñ^ KjĪd嚝]9o<[d7!+jo;D^5P40h[a؇n.*Jʌ!CVcdBܲr5U4U,Ꞡ j ($ž) D~:k]qa9i:)lܾzۃB͚^v8u6ѭ%5itd+h~_Yhykib}.񥰶mc:v_ ˉ=oŮwp QD!  t 060kq>dÍj(嘄/ɭ%gh3~I~*^ne8{#KgWJvޱ~ 777Ph0ր($BTQBmB@QiR@D"O;UM<5Z|SJcƘxm5طSCjW}m!7[Tmm!bd]qqvٰY4کKY, rj$*+%]}} _ c=]ﲰPvhs||Y=6zmcn:fm!*ԨRjEV {3 OǣV C,|gsn tcUvOnDN_mt{nPp4m9XLš^RiWɗ* an=v;:]B"zH0Rv)#"((8cvmz<&(imHd[HPhAEvy8v8g%zmb?|eѪ y"ƤZ@ ޒ۵ɬ'-dK4Wr6ֽw<6*8\/D,9SF~cr#ome㍢\mZfs},ǃ P@鈣P: &7ۍkF \x6OrlJp)]qgQ1*F¬ *O&6[Iytmys%"B7&vG NcNڊ+YhcQ8B 14CSwlwuZ֬vu2F1g^4ꑇWQ' ~7N<D7JUi0=mbx&V&3rݛ D=?8;=oCA&KHeaB.KU,+vC_ȗ}sL5=~!cքVxd5*W-8{U6lEzM'o1-+2LoN1E_LK|UGY7oɯes$'eC36unC*O$ΪbԦ[^Ժcc9yUx]VCi-gLR7)~7^kjb7n+8q%n>Ləv%KjFTtz،$fVTG_z"Dd tc<>ɛɱ?Ƣ!5O m1i- ZOEI˩~.WQySV.oipj#.ES)d멵FgcsM2uVӗ:.fn:󾌷Wh1NFD$0K?I= \X3Yd}-oߓꕞfxuN5,`Ĝ%{+ %?JsĤɋmAŕ ͅAū)M]ӱT -:>s W^2jK>\61uOϜv4i_ep?s $q+E,@XgIkPص%aTlk8mg,_|Am:V7F˹Zk߶ް rY&̑9צmmc&SkhRԱjwDOΗQ46[?߿[n*>N)8 y˥6۰ȏqgu΅h@"%Dz뺀(K "7J( GR?d34_R eBLFd|.@)}cGzE.f-Y.-b 4f 9Nr"Vu}eZQn4?U-R 6FD;@(d/~Z#VBRw*[_W5U[~FȎU-^ YLl 8Ojm-ѐ0khO #/UBea{g6bP#/ժI1f)'+MWPp3㝰ILFoqi\YG=۱Oݶ J6fUGT3%d׶JuuBD?= Zc!9URgan7c~uؚwo1gͽ]tr[rlQnޚ˻Zfdn{Nmum?%)$M>Z \R#QA1_o2(.OC$ |UatrFڰ[=3ɭ9ԚX)dK*0t~sdQ:EYJ 3٭)~VUw +߃ x UuiI~|uf){*2>qjQ']ye.JhqK7+X&n_kBs(wGR֚yV_PlFC P!6 U" v֘3'%ne<+"")it*73UAۄNFGdT?>XjGPmԄE1Zj1vRܷ`'^,eSg @ĈINf{k35妖M14sLlSK=6xd>zSp'][v%$g흐@` 3e۱Xc\$s[܆;4yq]RMTI>;dըiKĩsk<"3^KկMfYNO=,(_΅nnOXݖw,ϵ15wFs ,6XBع.чBpQDd9Cc,; WbW䫳XcB6 #w-S_XԥURQB4mobVx03^S7(7KT̩,5K5ʔ{Nzs1JV<)G2}^]{c ТVy-@<ĕyJ lbh|R'jcBg7CJJb@j-Kf7grjyQŹ˻;SZ7=輌f)yVJW>~2{5OAPP?beVkJo Ғ$o}~;}Cq'~I|y:!e+!_XmXsg$btN?kS~l ݒʵ'J<$*-*LzX'3vlnҕ/5 9u<P'Hd,LH[?2#_ʜMv#+3ͅA/t|ѵ\k%;Pӈ"R`% IDAT/{1>p-0 &CӯI0|h?,]Crxf"9aLƧ#Pyx; %[eW&Zcۡ'OF_z7x;(dDzZviD DNj䔏LSIV ?5!T&f3ԍsz.@RK%4C_|/Yn\ߑnڷ@wh$"9|~[d9$@zS/l0ݕ j,qY-#b\$8bӳ¹Z0;ho G>t#\sr.{"X.P'`Hs$5;;\-QrE{qmP*].B gzB Ӗ f38|7K`Jcĝ9Luo iuFR{)qO 8*_܁Q{'{[6b* ]9Pg25ͿTl+3uᓙsP!m5mBɈX/-' Îe jŅ;;Fok3+44ܭCjQY'9+].KL=JRx x]7͇3N@|7vC FD;hǝ9'E}Ztw՟EɣB" MB֡cxFe^3{gȖ kn84:k yϦ&qZ._ g(T2R9yc?"M%2@=I+\vr@63QǕz-b0RYqԏBJN1ז#܂݈DjZȵZ/f݊y};SnT Ɔ]}6aafB:c&*Bm 6'Gr!~}_4ˇx5[#\HV+r穏8uY2lK]#֧~'Zh=c|0V\di2Qf%xĴ3ڽxo.먟J Q:re~hm#5!;OJQƬ/_ *s {g&;~xh8^?T`^_Sd}6mHdȈ\UF~$UsZ$ɥ1  +WH=̲ h$bb\ۿ!NLih(}33;>8L,RVK"'H3qR6 5?`9jqA!L iL;p0Cx'{h5\v}N)SCs4CL_&}:GnZU֜KL%eݑ A3cfyH'"Bc#QU88K-'+ةC1Zmf v8IΎSi1J˿ D[Wbswb#EHȝcƇHxՆ~SjRɸ"' q=JB2_;p{EA_K^y>`IƗㇳ"@sV w-*gG1ސE|)tk3| ;d#k*O{ QW-fôhۻsFv7Qok4g1gm\51R,>hw\P9ޞH>cV*xd< э@MGv@8G;&+sjU;r5rD70kcLQIi!d#BgHIo\9vy@zhNiSOzrΙ\LڏxL,ٍ ۫d[O!8 .D lKmsl&vWV3Bdʨ'!}$%Y]UpEAhY9^R.k؝ zf|'wH-6YaW.eކ i'Ł%>ϋ$:/cXjpa،Z E5VYD@,DF UI54w[er k?#2חv3G9-g9vsO}ew? Pg}u*+fu_DIܑ_^zq"(Yх FH 2]u^2i^hz$?箛!>wm/{QIW&wܧm5mL%GgH)izc1 aW2?Ώ 8r{P pw|F>*ګ̺M%3b{{хK"^=_RZ̫4ub=+uhVǟ2͢,*tql/5 #d 7z--$*4qSE=b6ZH4W!\e|1U&>$f%pҪH ĐҼ'Ji:> bfU+qQx>Oa$j"Ƚw/]bQihZjQ10X]G)!ˁ՚#U!\^DcUe|Ha7"qNuKK'p{,GjHCQ+o p1+fhõ;˶~0= 2*HCC ϔR}zyC@=Z߱u^tw|QH?jgVIX/iF=i!J8Dkgh C7gfHᚱ$PSC!FqA # hҲSúr./s/8D&k Vo[gԡ,žZ[ ; kuBn:d r-P6%,@puڸ%2wu3} F$vސ]&ihb7 T ,D 0Ƙ< ^eCBs0PT4jL4èީݾjs8q&??ܷ#)F/ǧjqYN3kt0S)a%Vch$wq094hHu*Lf,L#Ӟv05P㿡q jٍjkh\D"/Jw-8eG.c_0rf .i} 63 }׷@'lIqȋґ=88c|eRC6˨ maKB"DDD1.ӑN5o񖎥(q;"hx&j{3)N_k82YkekkN.2iUuVW_'%8>9EU%\~rtސXYvF#$$0)|r]⾳ nV `#o鴸SS)cRs9~q:Pf?K`Ϟ~U_*ƾuw q>KݫlDD`dB!pƮNwJ׌=O$|gj̺Y#9#lZm;Di5 ᒀpx1ag7ޕQʽ  M-r z/^*ivBJm`3a3jtF`c %a8%ipqtei:[*2<?PmHx9pKSoosw11$^Oő$%.O`G/ ׅlh3T3`ѹm2آv5ދ2As} ^OҮ4f!w௿9)6hN ,HM$f2e'#3MZƎ?eϝ狠"eo*/t4~i7|(%I k;Dkj16 k.qB`'t_P Unmv"@`,U*ς,_[.1߀B3OB$sC7;L<ۉ㜉QJs<ȰYP2($ GJiDLCCýpvPIdQ#~%d?[r H#B={Lh0\ :(m7>Z8nLqHF'1v<;\4 P9*^ S{,( X?Ԇ [6?ԪvOwO~0= INס_zżi6Zov]9dUkrVҤߢ>%"!- "4@BLd=qU0L$2Q К#ci^WK8қ\Xng Rjc*%ڟ$)] -뽣O4@G@LD{x%,4bR=gdYзx驟",JN^ºhP3w]..Dď3%|HI˴ÀGq;)(۪'; |R;ݴћjDxDX&~Rwܜy%{)PIԮLslc\iu ݻArߢ_&#,p3c$cS97TCp,a8AD&G }"nNٍ:;0`|103LF1d3 ę#JAb7.jq>N`7L9%+}Ng˽J9;sUWࣤQMވ51up(KUJ4yt{+ W8* %Lo9trĘH=@R>Fi""/ 2DD`)YEιfѳ[:4MfoWT;u-&b1x2UTzY-C"^PF.ޮ.*;?tqw1:~bӷo0fn H5d'RFӋ ?v:xRX vDQJbק O Erla&ˤSJN>Ϭ erQIOq cǴH|*UCp \xF=FYkWC2Zy9IJHx @j 667Y8kn=HPiv^BrTdJ珲9P_weАϷhodUc]2T]쬎6v6Zu61KHOcg 9L DC$T(e^\!K!Dx+cIDP"̤KX!jhhȈcz [^'.j8-{Rn̅2a^瑙cWmraبszp0˞-*q]QK8N ɖ.HV+D3Ʋ#f@D 1FƻW]q3hhh nS,l] omU]^FY@ MXTH5+^or ^%%g'&=yo%BxRY~5`6a;׋+X ϷnI\cO+?.)ۉ>F )BB*sU:ujhhh(|=ʛvTN]Bߵu+eKZwS^;^soXGPl/< q" |Gs|#1E+n6}Y\{Dd\ &&m3}<>/n&7<7~Dȴx!Z]]>F?ܜ&ߦc@P $_HX&/u%+=xwMRHi>ߚ ePq q]##w&y!9-yo 3{ba@Uٞ,0ʙ(35=8rAkMDp@Cc)drtw}ر3 KmKIWA?F| k.lRH"Wι6$yWPjni*}"^_p:B.T%-o5 Y+מ2,Dž߆0ƸqRׯ]dor!#ӗV^**YPqWpDNS:h9 !ogp㧢rckhh8RvUnh_8P䬊f?X>yZcS}^Q-,qc4; ')C" f0@ED؍ϋ鈴B|Jxa&Ckֻ=1B$F(-P}Frgv EʢK&ZݵMTN IDATP*e9+ޢ=bkW:|Jgl̓4ٌwe !8H,wb^_6?{0 LlUOYXg"LP8Y-rI>QВh^GS9H # 0+UG+:Dpež4/9F"6N;KcԂ$+s&tw\8oG얓ߌJކa$W^ˏo(tܱF!![!6kb3FQBȲ ,Z:f&C@\T\V*ᓰ鲑1Oz„I@QtuL=z+w@^Fw_ۧ@jvN&H1٘1&eDϯK$=cȈ<#x-0/~(bԨ+V[\VOJKJ.nfZ @LlH@bͅ`lǠYCý"YJ6} !%u y=\Щ7t1^q(>IQǰEE @/-/1бzJ=X)0$W]Un+-k;j8^bD#xABbwipDc7>.V4av/@BW4pv[]A #.a7FzmWEqHm7=2Lp$Saay@akBl`AD_:0s3"oU@DƞdJD! }^wd1YUi0Glm?|fΡX;-:tosDQ'c?(dt@ )L@-L6F6BDL`RV_;VzK𞐽,J̟e75Δu8P-m]А ɵ\vg?C$Qй!,1XhXr*(τ^,C+Ȧe4),'mHNo4F,ڷ5ެRDY!^4-@S} ◓WHI1&ͨdTZcpJ.pb|`o2(0 ɐPQ=|#Rjo ؃c)7Tg:ԣc"z+AȈ1p=m|1JTԂ۽ :أG8h^|G 7ǴT,U}Ady??g)*e~~cb2YK'-W1F+ Xc;a'xpK)@"EDk0DDBb.bqm2v۟nQuv85#43:bpB[3hMN->>wVa۸Hk&50`sYS^H/~,.؎Auֿ0 L롘=XP &b E]tvѱB>ׯ}؍0"ILKcRgaUcŕ!:B8jiUjb *' >W?`%BKnnJ;ؽ823./1b%DBbH'ݓU=PJ)1조)z_,wLoj_e&;3%>` +,$֓Ðs iթudٓ~j Vj}8x$D!ܟ)_(R?qSHQѴwUB|F쒀?VSֻl9i-!v'>~"2l_fσ;RY1@"b EE[JPzK|a1@P0}hS%raTN *ĸ744F ӌxiaPJwMrD톆(Oj!+ j1h6~oXfOeJ$AVz<՟z;R`D䜁"3kezq~:V̬ص㚼sJ6hu}Q9qB,q/vؼ(Lz( ǟggN=6Q?wI3 E!:03+t',#aHȐłi D zM"\<ϲƍn6ukRZ Narp3/!Cbs{.XOiDcC$AOv{J>3e&q6n[4OxPy-L*t?x~pe3I~r?\+ƅZ0b[Y߆mb8Џ,[L] C(,:JKp%oftL"zqəi6`E>ޮWP~uqXN>]u}GTylKNm GL!Klm<0D98ƴR-h4׶"!W*f(vo#wyprA?N1?X):>QݬffķMQj3@""c?'WsC Ro#2>j%8/]R``{KБry.9^ RhQ85#6Oydߏ XDON-↴G (m_,nm(klEp^Ŭ"5Lv3ܡ@%2ֿ-44Jn\;v#iq#Uiv J;%"Fehn(=X)t` @p#ҲDU݈::[{ba!3CqHPQ|744ĠVk ߍkqpv['|RR#8٬i3Ў*Qڵgw{I\axɋvӯwJ+B)BZDςERo~ ڃgoWc1BFD䘣jC7DmpzƄOs \,ӾO.iE>P]1bR=jwİ;ph^(NƘ't:fVJu ^v)|/6h% ]Kfݱ( VQ IBoh?8׎"]N1~s$vم{y[! O##| z,؍~: V 6Xzi3@#B𫟖xtR^"vqUmh8@:sYP ̸xCFa+⧂Ir\Z_jHN< i[t J"Sɜ/'rp9"=0 {c01ϧ~><wꢔU3$keA u 0>793ͽvD 您AQn^G*<5z Oi 'K$8B@_ mMT(]PVZȓ- @hҿ_C=:0, HUC-^yOe{'_ǬE,7v,ho?89_0x<;ں#g@$oPE,P\Zdd@^:F-\' ?=硖p͗X:""j}%`nr2z,'؟1[/bF8JTzhq<7-R9i0{޾39A,?m!y+^!tx5şͫY+$4]mnYh9oϷv`|e93x!a;Z뗽C~@nBlH`,&8EQO v|xڟy1y7!kr|2wf:&yp\dQ?J)VL:LXD)kJDLV1Q=3_B744A!'[iP|72E 3^4ݙIskƁtZ#.ljmJ+EJh1DޣߞA"yA6:FGc;( "Bj6mB{76x%e#{-`bb-^$j;Mn\NCQ||sWڋ4\-T|:>R%J{ֆuuO[Y,|Y϶ȥf胩kp'}gdɈ&Ѣ_/ @TbfX1b0)"z4r;d!J`m^$`dBx{ aZS%FCÍ*i}׼n\hDJBD=:FQ׀r9h]A# |kMq1ovQD񹈼Dk@)QR׈xWзK|i)Nrq2_e\Fj㏴$BPկa8|}&7hׁH|p σe < _GmHg36V\/&` L" a~_"#"ߗFJ)HwWvvo\3&ЛcVʑ} t̀ ^Js #*T~ 5䓱/-礨pIy]'9xmL}{^dL0L-蟍4ʛ"kE""OmIDG1Pݏ ȼ];@ DGr];_ynf^oCV*$w2QY`sƺ1Å$czQ4SX:}-j]P{+E#R'U)«g gqTw_FpDm&"cEcV1󋟖X`/2vɅ.KMP[џT("Hȼi""DwJ7+b`*f"]E |3d̓hߍ4ny~QIn̞FKAf6q2XɕÙ~bh"--uul^B{ VbWD"3Y:Mwc544vY|(:7.$N,ɧ@BH\.n6 E?*_3W Ay17*gk H Zz1s&XȐkM26N޲>pAtj i2#W!2q %p* A0F(9S}1?* >ƫ?lo'E1NMgoW[ƣя``{"4?O͂)a7j@6 Бb"MJ|p_4kXχoΥ+܋DOS#h(1 ghnKx9p(DM#Fp|Dĵku(4>!Y)P]=l@{ovl9/gLΔov:fCb-v[56Vy Ȟ3Ta_-Qi!Uxmn|G/0-HN/\42>|ƌ^cO@H^)D?[T"򔗅z=9}q/mO@C$߬1.8Ze_Q_؏%%v{U1ų!*n\mcs!c5S0ǸtDZh}oٽ4a!1D5DV2z7!XHӟ/3?TNJ $0!Vߋƞ+)Q=fPjl==mDum`iQ+j{߳=bye8 E?4ظ9(pŻmOR=$ovLù/SQxףeԕ}%.|k[ʓ;p7v yM皐ol %k%O c[Kݯ74]peߥJԖyeLJkY$.N]m콌J/raUu<٘xx*I@_2fK= j dXv#l^èP9{4>^qc[l{ćڷ[{5̢yIzllȗo0-W88;z>KR̬Q 1b f("Ozd䍌䦘 ;DĞ19;A+0>kq pszv.Lݸ [r>&Bz1 q y_ApT#p/e<&(@=V]=TG,s!'؟6=W}nbR/ -3 ^bm"$4e^AD#/mn׉pwY]*\[㠍]h1gx(ĩq>%Bz^uN@HxGi$nJ&'V5>ਡ[Am걱!`TLF|yARv0e:zs i|{dvZ[I]H01F!{JV8u0ONjd~ympz p:Q<ԫV LB*<0MdI@ՅQ<p'5ԙۡ_Qw &"=C-'?SJul̤Kw[3/[7i;n @b5 KsL mS-Z]hZB;snݷsD(¼iG$Tx$a[Ά-X yr>,ѰHAl%$$"B$(˼:kV~+]w̾p֗%?gY7!u0UR@Mz^y}Xn}-ƒk̏!3߰+r IDAT0cU9;ip";2??7C.iF|pw¿Zs* GbJ^C^M@ PnɐO0CuVS`~eJzV`l1m ;ӋE]-s~\1\%r{v%WO"44|E`6Ȉ"V({(\QoQV]8sVKͨ(;Ȧ̖6ß?uJknt;ei֣xC] dfKq$ .QfDaqzSQ3=7."9ç36ZLZ}NXxlp@VP xMďen#8>ΚIDmӈ;r6 T-*zZ>f*g|5A$Оx G!_z!}Bq}b ; Ir.0qF4ݩefҰLj E`F/sf veTC2kw*453#-cc{X50mhha>PGV.%\?{/CѸb_\%ց *(ļ E"Rb^i}IǬzN)ezH1yZ Ŧb։n "ZHH}Vh nX|$4Eu+1K_l0mU{ ۙ:|-7ők_Fp4$ zGiUuNddOaqJk ?3bcy͜[3h%o$iVg#^4߶giPR`9jTvj2HXユS2#cS$(Z "xoo m;#h˼_܁Ru1F "2$l`dgYzHJ+P"Ʈ6 0nJ6@^,774Csjp"'xST2XЖR|+QHbKLwJ!;%\G=ttư,88$Uj2R=PY>Mْ͓HAA^XqaPa)~Ȗ5 ^ʄ /4MZܚݨ k3 ~(:\np_e)cIvI@찓zGZ%,X&գQ*ȫy+ E0n. 2?Zwux"v]G)Da=N2wɻLKYD:"{)Nt4|/θ㭌ܨ-ݍ,.)2F:\jn'+G;K\zW:E#]y+P<l}$ p d|uwZPF aB0sOKr\iCC!l6m?aɱy\4Ҽ:쓶"['vO Ey0W^ v\Cn>%F^'$o-0˓k'Kyv y'm y>ĵKW]d~s#@w9 /hpGuR H&k"DDCXo3$N%ѽw )c smMN5Gw;| 'TEְFwFL-Ü3 Ż,}]$j؃yz|05eNelyh}ȈeYϢx_־;^Zy59ی?<9Ӌ"=܏võr\ɇr?Weyl̄kƃ}i aәn|&|G;ӱR۬X5Qӧi9.am)^X|'1:Ĉx 83TYCj zI3f5.Xv5~=x;05"O?8AS;Ɏ'T̓j )c :0+\Dchk:fUOe98,! !/zn *b!1 ;:ohhA׸Q=<*Ό7$.YFz\UٕȹߙYs %IZ 5j)?>Fp4T PG -IX@D^Y)eU`omq 1- b&58Gsi6rС3=,̩n`6*)ӆ{fpi,^\;DA|EGZtr3> Y!ʻ-wZ'A pAvHrܑ??h?Z"5/ԣR x(1 ;5:GRU)]oKD|8y=ǽ@D~tkhh@5̿wv M G2Z[v z(Rgg+8 ‡϶9\8.6!hr w{ wCW[Wz:Dla/!.ccWxT|#twf)E`a$1b3˷LCCCUW򳢵Qg\=ոΊO.猐e`\T>;rviT/ ~:6w#O`"c^l_YxPHjhuVσ ߢKhNÙ$~2[r ž;ݚD0'nd7jhkJ"އkZn~= gL; l6Cwe͊p(o6E ɴ߉Qy`%vU?]O`#8{֠,1ESHD`He^̢:aKhHk}&eyo @ъm,А{*uUUτ%F%Sxi:J3^EQfљ5#o"**<h;،bgDd(}/PLo[ ¾hvm;, GJ[0SJa5wӵR3Q o~ >_3)qr&11w~TPPbܯID39w 6SBzܳcb9F4ۿD3Z*3fFW ;#;>!_C3Y1נgMUi!$%P,V5L=6776{voew9FZnbJ+ijyY`qTz HrO>dJ2Y-n%$6ܺ+0Sm̆v7(f=#v.uG{Nkw0d4G4fm{tnr5t#~ GMQs:4FZwm~/16/G n5?3G>.݃FcL2by4X)Ձ:Fd$53ہܭR͐pZvMrX""#"NX۩P~C0KXªsɌDn(n[BIn ϸڢ\_Lp3:0΃EV.8ն ^WƂH_bHzN)LiD,mjNs0d Li&06rd.h*Tnog;gZa%U3&óLpn]G4%Ab.}Xxw!{@_Mp4|Nhp2K1bHT_z(03+@$F;ϵf`HD@d`_d.Y O ߰7Q'LZbVaeI0x]֋ROJGztBPBRt%<:㎽]q~b6,! "Q$"ژe2/ff__tLs<ffy$λ%'|4Hr_i5ErMjS K%ϋFC7,&g[&|ƶ鍻kb'Z4 5QFD+^9"zxt}ԅ0ZkUPbXu"ZZDڳkg >D4W8]lrÄן!,.M!EZX]iحH mT"EA_ f'aB{VaqycI恁Nh|8ΈX< ,b?b2&|#^,\lϧ|&7 W@K> ,(n*y`RoC6۽3ؿS;lҶ8+ ߈q2~9nxq|=I+︑y~ɡZLZ| vgB6GM+Ywܗm&{! 7L-#-0>:9CyL˯<]]IiX&f@u8ɽKx4﷓y? L@paɡы?ykffZ6O1:`1~h/Zcp4XDСK^;V iC_bYJ!;Q]WWck#)*`Q,NyFZ{!;MtVɮ(;&ePE͑[1(qmROLCDփD^4B 0ΈH~bH|KV~Slfc Å{vq;mOfSiVH@ ,t[yOIML|1{! T+eGFpV6а?E4Lذu#^ NjE 0++͘ ,Fj՛wD$2d`8@B mnll ''UӒ!F >oY|7A{23~3%]s0Dwފr bN\KUx8@+ޛABf{Alũ }.wXFhfF7$bn1khh7RkP5%,m-t |vMaNWd=rAչ%#%q&!+kƻH݅$f1a,ѐ=iK쑐^4:wU7 Πxc"1YTDC>5kaf~)f vj2F'[N)ᜈ6t(_d 5[qPn"uv-ٍlӷ䤒׶34>8cvGBRZ0vuB0ZDX?wĦ ' tG-RnhPjHi%20K#y[e7ḃr|DjTpY:3XcdzWmL^C ~4/e/C~׵D(ǘZf(yy'2-Wf|]Z$"p󨐐L7X} سA8w* o1q_CB;>rwY7xY\o7f&|b e^eSi/سVp Ù9<.$6BÐ؊)A\3qؿ1hVCg*o_˝r{z2$nqV^,b}5B̶_R+kgNe%5\hiIvgsL>6׽%Z+HYWȠf*̪롰 -CWI$zםĿ09<;,[H,rh,oic4QZ+PD@za`C~V8XX+ BCA"V#1<TD 33UD0e:T_e{[Ɵ[ӻO#}$-"F-ܭD{5/j23s^'LH~0Q7xFôNocw d.mXБ,+J "4$΋ir)gFJ?vSPbXD01Gn6;Yrfkq,9K &<6kǑi *y`4JtFw{Zq%!*vW+G8,կq}n[q9͗68OöE2[B:qh1``;a&w> pBWf#K !zQ!*8p#\w{z%:J[];-`?4j'Eezy8CG^ilm)[lg ƗȘAL(5"*@" &rB6r{>%m m(qՐn6z(viʝUn~7D%U/o׺Q}p[ ߕ R5 e$3Y78F Mň 1&\XTJ(:))$A FF5zK!7b!D !"2 #Ar;G[> =gbWO?cy[$R'6TlKOj 1C`*JFLjA8ƭd1e1 m0 FXK!)RRJNH=("(t_'T8w]9ND `d1b+bIGA( m(+[%]`T[dP1eEOa-˾ҝCDW$L .N@ t(՟WqeG=Nk ~0  2^H&Ð,5j"RJyJj@Ysj쿕XJv5"%"FFQٝoY!, nmNJ;k(7'4v^)+įT9BRНIGs #DrD($@`!U<'J+<)$sVwqj.ѤD "b<Q1b=YsC͑ݨl>]= ӡ7e7oL[P[Bugћ0hY#vCPUR+ M"&d @# {g!g׷1b舭]nßP íu xByK]J.-vn2ugʮ\Oeu7=[ PD"Ol{wR`af<0qQ]IT.6kmڷ̤l4!)j4g8 4z-Lwcː +}sf|(02'bg[=H J\_ߠ!Hh `GjBA|er"M'?Qu46ܪzC H)f0T{EX0` ek2M%k\8V=GMD96uݎ\L3ձc]c}\$u2\\9蒟Hl>R a/vWMOj~)" h!YyoP%{ؐugovL sՑ)ܶ*]MȰT9r@7N3 OV q2$7ӬtMQT&Vޒ]>K0ɎkAsi`ǫNc'Pr_cPt:ʛ*Z߁#߇jz +}B+.K@q_52a0@/N;w聍&(]4v1@R2&؉uLM&ГO_i* W k0A8Zk}yy9=>" DO_◼%/xw}k_K~׿'گ/쟿s1_??_.PAKE_o$xTlhSI kS%ktU-ڬ{'rOV~yXϽ yK")L6>Sז|G8 yʳw* 25Q!TR0a ngH@ Vc.߼f8;$5w|fXO&h_ lhD0*yyVCau7UjncB"3̷RvR4KXrbޘ2(SoFSivJUVtjHȆaL wIKL,Vl^y;fA[{+%伥)kQ=nt4js<,2\*Q,y䎗e>?]F+R%frT "{ ٵk2dM26F qV7D%jC4.z3}z YRB= Ŧ|^ݱA!ҭgSod^_o]el6gFE׮][ܾ8Əut4Y~BZa ='|r\3ϸlfo/OC?_Ώ<_җRM=Fpaq \d"Å,R(@P|B%E  $lgxěFXyxS"*EBDB6P}3w1|줟6*UG!++Ϋ{sarPͤbb(^>vnj)]>n6ƍ~͋[_yw?pt2]>7{(3e/{޹sGy:0aGGG7/nl&|f3/=A?+8PH)E$` ;/ 0DBx%\ڒ{iֱnX XsjfnN[Ej1j؂4L+V?JZlМ_?L7/-ED  KNNN/.. MC}ǟ/ x_ͻo܅" H< 6`еܯ DR+D4A(Ep 2"#BD`&& 4 ~̖;R1q|4z(${[p0pf)0EZɥ]7zGM3JأӾ;n,{ynR1LA@ɩ\㓓bHtq{;q`l R }|OPb?Oox?so~L=kQ \>~jwb%kQr,;/ͥ 񻕽k症T-_cq~ǧuk!XUzurU."(ƪZEH@ (1"#0H<3˅22SX@*FiH:ז|QRvHM q0jk H' 8a%ogkd'3' yˉ\nY@,*ʻ# O%ESY;Z *#!D.U^#j0S.L|ɭ͌M4:%>moLqL6VzvwQu 3)6VeYoH:u})bK 1[}@,Iw[rm\ ^Uqs2r%΢q0g┧PWk_wUܮ%e4$,I-J*Iz 9R!Ѧ%nC#fЛNZ{oo|Ν;B @k̾/%*zK_=ׯ__.;v~~M=ۏ>~<Ec.h![^NQ(b@^rFg :\5p'0h\*3pseLy`7,ɡSeMSDP4Hx&HJ`"i.Y&-]g{ 3372]BVpӡ&].O~kX7o|9/o8V.bRTPOf g$rI*+O?xӟ~ttO|>^興nݺu5? >>BH\.|7/>瀧~ַa" `hЪaĈ>02 : Cd#*"Q&Hx3MIqDݞXQ`1;zŞ6J X#go@ a IDAT1CB=<4a;I_!*.vක'";olV- =:nl8 HIap<=fk^W^7X,Hk>ַn:??~~nt> ),w߸Oo./O> u6(#~jq "Ҥ<J՚6"!x!o_{^J)("t3Qk'=Mw|ߟ/x+mYnp`Hǒ;#F5R T0r!пwwl,90Ć8;fo+lWUBSiԈ|Exrv] >k`Sۢ:[ZyPChB&"oj^y\[ Xӈjw=kLS⟜h go{իB0TOӛ7o3)y^lcz21Aܾ3['Gӳkׂ @ą/^pAKIJa1bD[Hi[P #*?П˙\/bAcj5THOa>KJ(o.Op TVg"CD@3B=ꕨz818bL&Z뙿9y4UbN1Ƙ&fAErI)9::0$"c͗ɑwvv&"քay^ًF1舃b@=OC&a%b tt#x^`7a1/doE^_D@$ ȫݱ¨LFtѺ.AU`+L=i~㰅CVUMiވ4$>#r(Fr2*t|$0!LScB p6yZ.ID0~p={m,j`"b31K8L0 C%yQ^$GRB|Irx<rúԛ*VbUogHA-2&몺JR<\1ٕV.%28HKke]uR9V'ta8RJ EuL 2*=yJkE@Vwg @A8V+Ub=K:GfVK4 *ff,B@`1k8TVkO$&9lv?RZEs⼮knȕC `5VtuRW(`\ּG]'VZU咣"%i(T6oV* l)sAqmuZ+EQBǭp4qCͬ+=#Oχ79憄4]6N\bgKWr]6tudm3_/"{W ͹\+fs!^̧VR1nv8qx\pgԺf]]=JYTHeZkD\,wf'zꩧ=^? &G;w&8?={;a}V[u5|<>g#J)11vbI<!VcHh *D<&Hu@"9y6Dĺ# b"rtV@DA##ϝ>nE;jWVsRɚ;er8\ٔŷMSŤ@W _ynq@QQ}1f7 Ƙs1g>GyZ1leC)5LөXeL///>r_Bn-& 6e*tVfvU!y(@E$`p.g|vg1AICcXF!e? EB+X?(HODRJ%? +J 1-ěBfdn:owTca"F~Tzuz%4(յѪ;[%Y-aaz\.=ϻ~~Wg?gggO!4_|O=QLD!3{\)OOOC=$"K4}3QD&!0 #J6 flǁhbAdaVH"*"D$`afaMr n5:0H( ,, "T|HƯ{3.Gz<-93enkI @.ȖR=ĉs [fZe8:3VRkv M-#Hl mѿip:#$Ƙ;W}Ƿ?|j>+TA Q|J3UYE]\\O 1LO#,<?=99爈J[F{g}71ggg__<'c/ׯߺuk>߸o~t:fGAfZ21bD=4 mĊRW _ 鈈RUiՠzϾ=>?= ?w%ŭ7n,N ??^" \ܼ~5y?zs9{7Y{Ȫ3nʹɒ$־[yr0>MBk3Mr´Ni+VqV%gu]Kd)wZ׃ "*$FDM$#-[9F%SΫf ךD5OFXP(Dpz(4A'Y9F)TK_gyry `9i\muHDV@E>ݣH>o*drmaRrm3`y0z1%rՒ'hgqSBD[ƯnrJbSBUhzs_'Y]?9rZO~S{'0Fk}r|oO|O|t\Ƙg7ojR"_s?sw})&D)WWn>'}{k~5m,RDDخ,<$jRF )e"{PlLjNӢ!JR#Rl\lEs{"۽uJڵNn3Ƅ& Lȼ1  0 X/ "FS{T?$G aI_vVh>"[惒z2'2zv~Mʻ)3uڞx-9L=^?~Tc&S@*Ȯ"\ uǸ4pT]Tfےx ;jz/$T.!5bs!]Q ]y(ZBR\,_wrsCl>it&;N5lcDZK_yq[[q\o~+g'? f|AhOOMoZd:]."bPi}rz_җ~!x 65p ihUo\r5\OX;Ykhŧ]'2luJڃ-2Ƅa04YވPV4"D) @$%~zac\e2o13 ;;ٹ g*2kࠍׇepeх:ھ@j vb(C+ٱh˙z廚wFYj3px\=9p[Չ~8ʰy&U ӯl BfN&x]:5*M&/}~菔RJ+cw]cd2!#}=zzm8Zdf6oqvްzkJӅ_4p)Ł8\7 1!!,@DD(S"3!"uOIĝ]Jg0+୽+7peh@ɻu 3plNʇn(9e^f遢PK[ Ayʒ#~c*Օ#Z:Z@e@*X0W/dIS3\(loec\ vWZR+{pRJ[>l>{_~rt>*;=?}_O>3"BA@..L'#c?9=`v2z9"t-%J"w5?HZ w>P7t*:j9psV("B#" Mp00`A8 pF.El=*8P~UkO&ZDD~Db漻m,GTݑLɻ;T["Ng=8z\- 9cejt-_mHq254]7Qadnen~Z) N߳C@rLCթf\UiR6JӬxXNpʖܫ+U\G]*OK}Zaxz|)}~~Ρ7}w?Q L8?ȝ;w̋h2e4)6ݏ*/MNl.a882wd;,ɾl U`Uf,T&a+a%_… <w t[>sH;6v;m[5ލ ]كCi!~`ÿO~GEքx_{|~C/zHk=L+_?=iX_[7ԃ#{zn]ܢR?ko* ?TW}Y!$`6gRžA(+$a`*qV9ՖZ!*,1bdASƮQ:dc+eED=>yp]xazptg^ScQUIj|jeG=:nlxpߛ{pȍ=Q{C?gJ,Ym<8 ݃RqVĕ|&,Ww-i)(.HӬl@FD;efEڄGO~&\еnLػ}}rtdo}?xg04 . jQ E m^y݂ D?mM嗯\jWz^W/YhW%-╒>jʃEZ/{\YE >)8;e>{-Rr[ɺ:1%V9 ˱]Xa(s  2&@A@ږZZLtAedhaWbe~e^zFKe"J{'5*,$*6OVe>M_Csj#1^UӐ*fny˴RL?'Jzr+ 19#0OU^T2[Xee;YMb.qHV,Y1@Te3m(QaU$"jwGil-^lEDJ)M*j{$u XY@!,""xxV_3p4?xҐN]uuƝ#̦ճYW@JJ{N('}BۑRԪΊ 1 ;S>W֯? E`e۷19YMSc.&lKnXK["2Dt#C6ԟʕB,jPk:e4StRD7Th]l(.)'mǚ;̩UfJ񖟸 ` T8}| %oQq%"K'G'''}ϣЇn.'1ZkO_Rl6NbiDax[Gq-b_ˆ  a1xIDAT @DJ)Oi"RHDlPPXr ]Ɓ 2y3b^!weL aNSK:X&jv&BCP3p2YL:Zb粴++phUZyDBBD<8r,d" HvA.|(h߂2o]ۭur!4h}H{=BVe;ߧu-XK1R .ev g˸Cj7\b,"j blH"B١P@Yc J@0 aV_zE1¢Fҏkwsn#ϻ_%v[w{]7~lw讟)K?.j`1z"|kb/;)+9r +YO7*UF^ HXllhL0MowecPo2L Cځ,6{pgѫ{kȒ6wo{Mq=:g<wY+yFPmieG~ 8%n;tH\9Gw{4ɂ8nS햏:*?t%ʼn? `]s1 M&~ޢ#"@TDED RH1U-{C,CȮ*Ifҫ[An;i^Z;vchW;+68'KQ oܖyř&/*bxhB"섁hػ%ذ$#.TBD\FBaf#l6"MT`=;4)H( ыZ)Bd|Q5L#[RķD**ҽϔ{4O$~(KU3د`}*ǜYU A C[VcDMԞHh1.Ubrb1qw" #G c0DD)))I"ZE@D5ax-دti2A׽H|'֍R="]x$5jngʺјHd]7I3s!tT3H{,430Ihn$_kg*nkj=lz{w&kc[U73I69Z6G\%o f !~+舊RuJ)AFϫWKglMPxz CmZ&;{NeI.Ʋ[ _}?u]vt'@y!:j#{a=z_uU{, O](,. Yo":S""@("ĢA4!f9&ȂfcԯM 6^DVi8I+EVWRd`挚<ȾFGWU&ɔI4Gb].+D3lF(;\8hǑX |F\Ħۢ+Mw0jբEpu]tݜk??/B!Ң!.a"GPNwJNm|p F&l&lr&H#_r%i\/v1bJ> ?_DP2EEV ]RDi*!Q*6M6dM6'&m6m$oߤ;/I~Ul-A yRE$ xDZy[)*[:zu:v|s}G_~BNaeOT1aCUM6dM6.bԩ&O\|y#3mڴ7|pIʍr RФѣGoٲeʕz[ş3gL֭[iqݺuѩ$1`k.XI S;vD'!.۴i1^z:thOzAG믿^եK.Eý{=z4G++5lذSNi۶- $O"##9H=ȘNj/xҥ˟W^y׿5 yl&lHlm$!pRIRKIIy嗥-ܹs+U7;&MO_58I|C 馛I&W6n}LUNi[sxg=~|W_}hFN*U6oyB`7lPBIIIIM60k&l&l*u: қo>7ߐϟ?̷z޽{K]wݵe˖%KjJvq?~|ʕ>|82)$⠳~_|ќW~asQ[&w`OK&29ԥinڴڵk9ftR\\裏8p ##C?G9:G;355ԩSҭ[7@dM6d=}Mn߿ؾ}{=URRA<rt֭s̹GF<u/Zn YFNIo]e۶mwO?}ر>SDY! Ƌa|yB5I _jʘ İaGEq/^xܹ HLLbM6dM6_M_|?aÆ0"ӧtӦM_{5.?cǎ[ڴi%)) G7R=Zǃ(v뮻c KQo>W#4o^o~oF_'qCqT=zUG ~rYzu՚={6W֭EAJ*2ܹs:wlcM6dMiڵl:1.9bĈ J =zwt>{ N8nݺ@*!Ő{D!|A87e&M>O>ii۶m{BV'Fc?Ǐoo2d޽{jM6dM'JQL^7^xRJ۷o_y۷sN7nGjb/֯l:tJ~x ֯__UʞQC!dh_?p@$AG($.mڴQiN梢z5o޼3ftٜl&lɦbh*LϞ=U/np ѣO?׮]  g&`6elfΜ믿Gt* M6N-{Ph"ͣtM7>}Ig=sΥrՕYfUç/Ii)..N$ZҢE ]fиtM6dM6>ҤIIhR wA_IP4dԨQo,n;_|RaÆQСC1b""Atɓ'QC!J[ouر*Otr >ъ} wvSRRBl&ly0 cǎnx衇?z[rOKÇd>~rM2G;OJh뮻{i׮~ڰa//x}vd $$$8pR_Ƥ I?(b\yg۷o_Z}ΖBMMoM6dM614v[]ro_ =ǏmۖsqX裏5uPC/_V]gzGT±Fos^Zm>Ȃ 8HɻQA! *Ŗ+VcU(mڴi˗/t%qs {I\r70l&l9-[hw3zeŕv5Pvub7%={w!]tSN@XM-vUIJݻ_W_ZFbvm("66_㻥@0h P \xIgr-pH&l&R]N֭ f*&t=h"զM#Fp*2οjj۷/WJzܡCKCC SAA7xuסh.EWPaÆٳg͚5'[0"##0yf OMMӧOg%L°Çc~;=x!'a.m&lZ{>tIz ]!jW%OPY5jOfRSJٝǎ_̙3>]~izA˛RQ!j^a ̥00RI_DkV'5AҥĤIñ&l&lAvpsQ2zN XA):J.j IV)MK?M6dM6ݻ?O>ew}bRpII%OxR|IEC1iV\cǎ:$/}?U 7вex@1 .̘1hW2@0hbILwJt$s |dM6dMdvL^ SL%m"JXK$1믿J5|I42j4m$aO& asɴ"/(tr*b6,=m&lg֬Y#$}RRQ-8;;;**^|IuE4jԨgϞ}ܹsnn)B$))L?B4DIfs#QX _lM6dM6٤TƍҜ*Jw9O!)- *E8(Q7@] P%za#gKkM6dM)==w SΝCBBe/9Kt,-6mIv\%*XW'K*-= GdM6dM6dM6dM6{@0hM6dM6dM6dM6Qd!6dM6dM6dM6dx DA dM6dM6dM6dM))L6bM6dM6dM6dM6@0hM6dM6dM6dM6Qd!6dM6dM6dM6dx DA S!1q5+UqWPS;2+ݞQᶴ *ݞXZ|Xx|Tt\\l|B\|b\|lO8 c#BC*VrK*z[dѷV*[Da~m q[*EV):c _ [P'к(TfTUX9&w LѐtoVm"ڑFj"%qS/[z2=n@XXXXXXXXXXXXXXXTpn'##!JMόOΌfTU-[-%EdAŠ0 JCDTu."EDFU/;GET\@0)R-YHdaэBj\.ONz7NNMIJNJHH?p HwUQ5Z;4,ZjZhF5!!384EdoC½2"2DFWDA S!^qC"F5+HNrpIqII1 1IqvbRZR ɐ |/+8?dzs3##SVI  ͬZ|4ȷ&08pFxf GtP(_4$=gX\az3IIqIII !11>>~JL!x-,,,,,,,,,,,,,,p!b"#B|{lZZMKˌtW]ZF@(,ѐP\4(_ED72!AȈb!)n!M"b%&祧HKs3ĄĴ('1ʊF'@wCINJMMJJIIz冇VKwFC"\"AgD*P7{=$E߂"=!1 =5\.O|\||LBJbzR;1ꛀ$ "WOſh.SSS39wՐ!> "Dd9pUD"X,2Kv|"# *&7)Le:$4JIHNOMOKNLd}ḂK^qq CF+K by||"cǿXXXXXA> +Rӽެ*2zgLDC Mc1-bA vPБQ٥#EC2ڤ)τħ$%R8@&NœД@^IN355]S鱰(#6m؄)e!K⓳+#,.7ADFFEDEiv&1-(hdEBG4EhFJ%I"$ >KN" *(:#UJXz KD)Sꨒp$&B *Pb聃\JrC:"" . %ԨQ1)mR"{ȡM>L$.@3Z\**@SD.UR)aSjaaaaaQ*؆kHW6D'QbD_lRo\_#vgeGWZ%4ZxfH#Ec"AA  GEwEeFrU+ |DDGб+6wg槹Ғ\Ii0Ug| 9IE`!W, ?`A=zNDj!O-.E-6#JaB:a֩SkC 9ra#uR ]} ,ZruÆѩFe4d޽{'>1aG0h qTwJ*EtREE,ҬZ ė (TNU7jtY@ ;v|NN@͚:uܹkc4T! ViS+Vd)RjA:uD@uմ8Bӥh 2M˷hreW ƤI4`F76>jɕCUóEd*Ug8|h# BB}P?3҇S / D*H#4K揆gz4:hDR ҡ[PD˴kaݺ -ͭFrAߕ"p p\{5BT-Y m`ժ5-ӧǓ)a*rq9s >fREjH@}4<ԬY .yfO]*!1Pa1 jHdO-P c%Jʣce$|jAVB2҆9( +w]^}#>B3cƌ>}.U&C8+$cBRUPa#8KhI jZ&- RTþ7&=Xv+s ;Û#$Po0d& a&U J8E{+ālŠ0bRGbj Lѐ5ed?1&q}35-!ƚYZ%:LT(A'0'b""ȹTiVm,YvdgW0F,229 0@[޼yڶm_Pаv:e&LZrС] Z e˶nz0f餭tvC#)B{fڵi2NXXu!A7%@d?ѣV :@Fh(Ԓc!E0S YSK¡uL2#IqJE`VjAT"ZB)n߾^tPz rۓ᥊  -.`R(!1ARJ"9TJ1ۨ*UELf]"FY¢72~:9!>%1!5%ٕNKsq !oO` am\#frg#"UCUB2!!b>( DCLt4QtD_ &\!22 "NxTNxt DT1qQThH: \Ib 05t%L͙EI` 6cƌC&zEv6j fqF#WԮήN-.iQhVºH .F@Ĥ-[8p0ҷou0 ٳ7}Qt (E SL)lNݷv:s۸q33BH7R{ի׀ä3Ү]3(GSc 32FO]@L@c3Mcf -ZBժUʡ.A3\j r)fX1bj+H¢0;rrRZj;=Jz239ɽl';ÝvylOQKmRR"H'2ij!j!{BB*t։x8ڂFX yQ.~Ɵ XKXƊ&MigΜ10>}Qzʠ#8O-r(:t8}ܼy+ XFaH;v5kESL; hъC33 a Nkɒe(?~"AG 22l}=0vRq;_yDPBErTfTG>ӷmێ={.F-,,,,,JC! PHzǓY dmsW)?sϓ32bb=B!aKPݐ=!GDFdE! v( ] }$ڏGq8"bs㒾׻!  Illq _8UX2a 甩ӃA,,,,,,Ok#F»z:a$|fZO6wo[O&UNqqmQoi8mڴO4i xrw܍wb豸߸8길[lÓ[7ziy.ԩGuZoݺmZygEhbР!8犆iC;>?amTp3f̂OE:عsG6jԄǍU3&nM0`Pu؂1M"Iyl:IC묢-Z1xRl  Utyhc.0Zs)UEVEQ''+H7:2 2AvF}@Q[D'+.S-勆{#2 )z <2H|?` y(q5J#sYbW? C!1DdGFg؜ZI)uQThHÂɉi iI"Cx!('!v93s  6q$HE.Һu[gk[!x#=mt6oڨQ5kH_{Р!+VbbobµFxÇ ~e;vرaڥh֬9OT;wSgXEsxժb=ܾ}'66cC~~Axx$z&Nu=zqA!buQ؉wȣ"44iҌny^^]J7ndA "G-f$.] tf` BE޽'#9} + z h1g`b3οb99u7n@ <ՇagPPKҨ^ʠXNdйe˶Z0w4 &cyy]k֬[pZh Uh^,:!)1LDk ðҬVPUt  hժ dGT0aF@L( )۷pJi )15=SJ4\(dOef!۪|JJ~||73+>[5$j; !& ru4$' 1 h},Q91Ջ"26'23c}9k$% LѐAI_?1 \.9]q`ww{Bs.x!h3g,HJEIۉ{&Osih ]\;~ذx5l;ؕp\qӔΘ1 癓?YsL4GAF&MAư3nȐa hܸi}qy׮=84c1 >#ëh"yœ޽ܹ[0zXECpNb7nƆ-[uݛ6mfIڵkK(  ֯H֬Y=U1\j z#NJJKL(Ą87J4+poX'$4u_Qz}#*;$BbDU0MYZ̽HpbB!BlLrk LQ?XI2C9xqr!Mv[8X1$xmaaaaaQ !㔲t _i֬.wޅ/S$aaHxĦ CNԚ>}5^t58P {fN8Y!Jq9i㊇7a۶;v*hw{m6l /ZxkW߱cWM33nؤI3BԩpљBƍIܴi Bv:}摦I)p6m:ݗ` @ 80 ssk@ѹt8ѿUpf|r`9QJѓ .#=6եAJ9ر9="!C*/mA4TApi wVvV D<YYC"hꞌ+$XIJ+!o=E!!!DC/!ahߺϚGdnT6_'kAQ|PB!AA S="R};=g>XUK9Sg8Bq8)-,,,,,ϙawu7V&Me֭OĉgהZC hzcȐaTee#íӞ:uZffACPիWn|c|ヌq őKǣ.]Q ݻԩ  g[g'NF3"(vCrPMNz͘1 1`WV~8f͚Ƅç.{n6詶rvglASԅ@= х &ayET<Pz Zg -[AinnM7n&СSnX`E\2>L(ʩE_nEyyu.\aa1Ff͚uhFŋg%dy̞=W( `F ::K 넦kpNhKzU 3Ѓzmy0 ̅98Q?Vp 2xůdޱcZ+۷ӧ_ժ! عs7_lllSIJ;=-z{{'/=S{ek[zڛsikggpg)JMqi>WE+$W/[ OV~u4ļb~@+l DEk\ a^F@PdH( ~h9pLI(-@9V; V''T Vh«l)w̘q.Wn92u:j׮ήIgT>|c.m=l+ާO?l#"T(#L]j5_BYwȓ_ Z#`r*\L˩ (ѥsQ#5(h ҽZ?nrm͛# INJNDy1$&HtNDL4%pIPXbBIѐܫqU(br ))4O, 9p_N(eBs6eRA8а49A"qqI~~A-qqM6l ʾå&pӴis8]a!ܡCt74ر3;M8DUAACZHKsS Z(!#&:>&uTaLff6JD sU͚1yJةS9Nѩ q;ToԨ xh'eyڳĉT<\bܰahji#`tA&w"\.ѻz+[?ԩwqJٰaSx|AzdwIѐ7+hB!h/O1P(h@?) 8H!ņ?#GC`ӓr2VZm;vW^~ݻ}7nL)G I  @'rÖ6@Ka.EkrŴgkdPPPg, fTW*RhZ G$!mq)KD$V0LSdUn8jZEj4beIpjd`0>/yP2jW3;0eP&  H%IHJ0͈QAZTEҥK*FץVȌmaaaaQ9KSZwTRDժ!ȡAU e=ӻ0(5j޽{{W҇Tx!9GPEOfm.󝠧7'ڵo-[hѪX4k֢ujk%33YvB2׬Yg!eƕ9{fw2-~ 8׶Eۧ#cǮ7iwӯjOMhvLECvKAN%@,z7$' ;fⶭ;FSV^jZz~~i칯kIIi^إەYMLz2B\aYLѐprWTC;WA?/#(W~1$Hق @qI4D(?1.Wkn0Y%PԲefZ_tKrժ5 -?r \[`SD]L9KLU\e~رk͚uk׮_~m;uQ}ۺuuڵwaaxmڴ8qرnjWF;iҔFDGRm>˛Ϊvef?ѨaΝegp tص^A LO$% IL!aYE!@(DB8!EŠ0b>"~ )H|Ag#?r4D3ρ);,YUJjU_aꝢZXHWT-,,,,ʀovvtҞ.:p%`}fa[XXXX(Nem۱~FJs>}~z7dÁ[wy5();ER=Fy≧OuǟٳIT"in;ەD ە<-5#9)N!B;z}UsWJL uGd"H GtdNLUѐb"&'Qg($1V||MB# eBjr@0hYLQF9scG-$"hr0kĆW6-n ؼ-~0ػe^ !^LE fa[XXXXڶ#"uu]oڴe歝;wZ5DQgǎ]v9]Kッ.]NmՒмy6m'=uKoT2Eqx Lz'Y wVvV ECánJ+!ѐhH @&E=GCD]Ԡ8(&{GR}ABPDP4$>&P4$(Q&b#GC&˫;y,={Sln߯A-[3x oE`QM]4xLL6D3y 5 ڶ(ذ+EGfff7o޲iɌiڴ fZ q,Cmj#1yQ+쪪"Th`쑰rZjèz1p } zw4TXNjbH<{}MHz3 G=qFC򘜈'[4aP@0hHP (9DZ$hHxtNxLN2/b"AqE=̥q5 WۏZECAGRR ~7$)BE(!!CX-,,,,,,~J87th qwСSm9bG ؒعT.ٰ%02 R( @%c;!!!9!>))1x223LovVfs! ~&]S=+:۷MMIOJJ}<5U(j/1H ,BDkpU$Ƈb~S aHJ#)IyAHMKq!ߊҗ-a6똘ڵ뤧kԨž[>O6kI)ii.dfffezA p{].,  IJ 1Տ"1QR!1WG@A GIPԣ$ [lυ@?(b~ `GfNKsn}7A\4OJ_]&^4 DDF^c/D} W~Sl(J4[ BPCHI3y(Ғ@0hСJ;{jj^_/] fe/;99=9ɕNM!%ٕ}޺$ .pFC""G(y%r>@4HPU) GQhElzDx &9YXXXXXX` څ٠=_,HFp%-%7>tPH Ao>}AQ &<i2~+t"OT'{N~bbRBb77W x7311+Lh4Ą9HPHl|8_ qB !-NzJ]? A A$&&&8oJ0-,,,,,,~2:eo-, E!Gd(WB _ Q($z3"8B!WBjq0rU4ĕZGH(<`q`RȃKz89U r $1DU}%DC ?LqPHѐ¯.PĠh4ĄB~h9#Ju!I"*MI}APGtllK3*J)>4u Q! _!PZ*:TU@R:aJ?lCRr8Ֆ*UݢԐd$; Qi@W-UZW,Zg+jUݘ\ AbpsiԊ05@uNA 6$ L"S1FR%2BCK^mBs$%Z#yi)!ABSWz @8+c,!1!.r)!h @@Lr `'E#-,,,,,,vxC+L4PWp 8%1muX4DIhKOwrdH9j&Ws-2jTT]JXVq\ R[,T[Ș/4|xL H20)bJSĤP@/$㬋ihY̦hcRG4U\T-Q% -H3$1DC2Z *RBiQz@942Ri䋅dDK?P- Sjd"u1H@ ABIB䪮&SruV$(FKh)ATK9XRUaJhc`u _L#4H@jZIP-4hTP4|V&mBR V)Hbr.ZLQ98Re T aȈoA!:R(.5ܰ0:<cTsDUȹPVQKE!1 hN’XFX2K9G|'8ŔX$)F-cK /1%cl[XXXXXXX0f&EzQ19ok~ S zDBjh/ |8!ɉyhHr^WmV+TS|E@ү<(Ha*k4v6h9h(TVsA֜E.9@9K$aG4LnڂɥU8GC%Lt!87×5\+ ,%HJP*=4piZYJEΥ,r5j8"ajfM\UdDHꬩ%FFLh**4sGE ȓKFA]05VtQr TKb"BJр0iEL.%)%*EiIhiS[(#R/J%OojUJ-h 35$Gꔪ_@2@Q"ÀiW"ЬjW|] h#yIQ%6. E`MsIuaj&"gMuz$FvAHN*')`jd0c*/1c3|)WF2HHF\0qDjNb"=1.Ԃ)jrVAsֲ'MLFDUɍ A1:h4 GCj'hH^GC3⌆8 5B@W0h Z'=-Bf@z=FCts'428r K%u"T]B(0!(hrr锤rR@42yTuTʥ%@JH06`2vҩ"!%.%ȋFiC$e *UݒvP8hMh(*Y FH2FX49)pT.>4@2bP7N E*%X !&@`tJ&22@/$\jRmJEK)d#L dhAHJ\2K |rUW -F M.hXHXV]"@j!(uk I >"LĨFiDGǪ]h*aKr %U0))y.t`;HD2Rӌ׈q)%E TE1RgsHb&%>!/"h8\JZz1M] iтS 'ZЦwj ɱM2h@LՑawPJ0KO'31)+49La4$pTGq!%NS&#44ēWn2EC 8XYp3PssBh)Gա NQULU rAC 00EP.hU(AbMDZ$L$,ծNR%۸ U]d (’')ZJTW+*-j|$$UAetC<ՂcS "Z%HL:iP2\JQQ @Em ȑ!W/dL4H BQ*t ߨ51'4@fJZR#*\b20F[*U8*K | 'dTpvG #I].$@G|AP -cdJjU$w2ȑ MRB)| pebBuE"2F9h*JR d(6HLr\Q%&0m9=r(jRh`6ETQ)L遆ɥ4L8f$CÇIGfᛦ՜qDP1ZtPJіF9%5'1$K*BH-Pry?=YI1CM-?ŘP! B ΗAR8 IIZaTJ ?aQ#gDg{ Lѐ:qrnIN(,wӡp1t A҈(wCcG 9.-뜊~J#jEgMJuHON]̠dԋ ̥L 臖S(E-|0IщڥF[&FA+ uSZa984 (``dpZ(H.&pQBCFp(-mԂ@V@J!(p$,3(2  >zI〰4#SE%jiBbf.MZD\< PZDK) TDphKM#5Z0|Kj!#>2\ R|$QZ\4JHG5' j=@" PڢSC hڥj@ЮİA!!.ePi%@%h mZ R Ouڒ~rl& VB4Kz[-H8T*E@iIqZ )5>r hlUF("H`8!1 "jK&ڰIi .1I,Z)DĸԀ#GـJ" A \e51ݨPuZ5T~hB&JT 5_*/I(ȠIS' 799;""3**7&Fl+![ |8bP! y)A|IuRhHPDԺ)~MA|EC (7  ? ^=*$$jΎժv}kѢ'={kf*8 :e֜t:t"#FjmwQ# TRarλp98`;r*ոqS &*Vs1h ULNEq&qFsƌY99zF crڵp)w勇0cذt$ 4hР!5oM7tڽufЀB3:uB-.Q2|Hz''(A#IpV\):5a$q N8Ө?033[ʗ/_Ig"Ѓzݺ˒G9PﰹmR"fF0\[:ջw&M1Au$87wȷiӮo*Uf4eH@9P]5kFI]q0v[%7k]@Ǔɤh1'߉DʵN@sIYY9hrf0ܰac uרQW*X°0' "֪(o}aܐG9Fl:ȄVP~i>ݤ(C?w P_w QcM4Ā( bhRV.1zmMe4h|D C8eY4b̠bvv)Sv aLbk1_ isV^*hѴisZ#AF:aR AǎOGh1LeG,Loe*I`U=ȣgł_!fhG(0łqB,t28*B Oͮ 0nzO-f.XBkPuˬn&(Mq+Ef攧٢EKM&T1j#k26.M^F"V(dpx CM"Ljp;&Aձcgn ni!Dp#pIuJEr-_r@ӌ")dxi9bfH `] 3XE(d~fՋ~Y~DRs)-,,,,,,,~&{#"QQ1oLL?@ @g4$0 8! ~:8 I+ !iz!}Uq; h0)dnHvvg5N8ApB3qh;n܄u6is"|'8m3qvR"Ұkp=v09pC?Hjc Oo}.Ytޓ^0TIGCʫ{?]~g|-' GGӺyVjaaPqnEa“UC)9 Jg&3"$hѢd}b3'O%jW>ȠImS"r|>x2Tav.J̦˸gL:ƠIt5Qm֬&1yyuYdǏXlXZ/oSN{C8rL4ԌPx8p" ` e4XJ0Os٦M_}gpYYBKn]rQ_hEErLOhR(ƍ1BC ]#&?# Ԃ֯H[K,C ຫu')3=gՇD9#<Ѧiƙ կ`+t߃& $/]0=U!0eTc33#xXb;ZM%2Sm g&則%<BGZGɆ x2zUشi O Yk׮C-D1@h AhqJ9eXh`}$!g1߱25p]neX o` Iw(&-nZZ_Of ]iGF}_$]?j?2iu=:i TNf{geԪDA S!8%?*::c'p8<|Gxp8"yl\(B`bb2ۢEKITJ˗.}љ-gMrp& sG&maJMM}fΜE fN11q: S ?S)](,KAVnnM6\b)4ȱ!CAX_ cc mQ2N[?DZar56h<7nJ uY* 6fLcs˴'DB855mڜ)*i^M3V=􈖄gv/:m\b! n4>[~ᅗF6|Q4c̥j1&Fch]KUءC'<"V2cuu77"[2&^%g^`2[Q?IGd'nP*Ҳh⥊Ci*腝={B.QصkwuV;kEVZn߿k p* ̣޽i`<Hs'95?fB>;itTyp/Ӣb PեK7`^hR0;.y6m)B#>$np$ִ gE!5`\O=4'xqpz9_?/͙3(D:4sѣ9s*=zG} YZt.K>怋8x.K9 8mu߸oqx83[} 1Қ5k >*C*\"Qڵ! }B8ѩSnPg (bp,3Ed!TZłvFѶm{\A>}q>}Ơgɒe88xo-"WBڢktDV.;T_ c MJJwQln-{O!#_]_߼y+.:y}9ssԢ C.F;:S jҤ)N;v<V^{5]fq߱V0k֜~-]f#`Xc "rG0,~j 2͸l#sPha)j֬OWJ-S9 T b1!ϣd@C)m̀3SNc ylt0!K0B ts͚utGb鷰) W#!uFCLAq:A)6 ;]/ÝJvd \^OVH:ڵ4jخaAhM-LOKѹ_xꉣ(Ha*S4Vڜ9d)|9~$LNq97+ۧ.]qI\J>s0Eq _xX@.Q΋D91#q.jp[[>W^ٷnݺcǎ͝M )C3s!RZ94;OYw]`8`\J!N s dT#C9:CYb'ӧOɧ {g PqΦo#-d<9 /{F JB1uֿ[j?BӦU DZ9};{}-=`|k(b?ɓoQZ|fFyZGFsQt2c;Kj>6'zf]>)ܹ+M59b" z m1:q E+ @Т݁c9`L[11q #=I]&:Fvq×C7m͞=Z ~8}<ӈ 4As(#1c/v{{ku֝8f Uu8mt~#c+8U*ɸq.ACh{{ǩ WlTUr.:uǞф`C׮A\b6u.so} 1YԪ2BVL%byd@rRnffc 9 )6~8H 2JJqps~S.4pꥧ})&S?NMnݽU-Ztoټg=䵭ݨvVVێ>nMⅳo~˗QTX3xٗs!4hq} Ɖu붔R$yÆG\v!e8&L:t>|Dvvuh)KuWЪUjQD[z9a6I&X`bkGFBȍD M-ZQD$ E! :|Ĉ]t,U4Aԩ28~1k5z4Jh z6n1 蝆1ƭ_w7}d@%#%MmP ~$I*2\֙ 2EZR[̈f?wq~fx`t. 643 #4 G݄ mhZ*HjM2\wn1EaZlڸszm5h=5K<^ݷ>:♣~CF R q9EƏG=NRk T'Q%E!&S&o%7t VtD?ErH0p?/^Tc^|K.TN HΠN+0ɋuPʕIBCQ* ުBtMJQH&1%:[R"IsZ(ʞ@Uʾr 7Q|tk.P9t ՜z!&Cf$1I}0Y7TeCjE45دE l6*q.:@!Ç:~iP5L\\:T qf,BLE uP22*Svcfhm@H:QjѠ"Ui1a6m| СC^o&U T4` UYH:i0A=TۄK蒚0T;(ZKQU҃63[ K)N!E&h,i4(:bt_:(4/ 5<fo'-FYs$ð_6S _0RWH'hcAFLuM%"CJ_G"LpR3("EKͯу*SEV~./ єiɐip Ѓb *9#UA) . TI-h"m(65 =ҼGXXhbRrbBfLLNl\ؚq 5}Aѐq(.RϏ8HP4ABx\0B u}%7#?S^֭[ЮOt߹}NkӳE.Mkת1vntg}G轣xK]8sSљ@0}?pst(`*Q0Tנ yD94@@4rSH-7|wΞ=dɒXyrG"չ(..AڐAë,!tSETvKڒ9h-U4W-.9tT7|A 41).eVPj)f>4STեYz(_ɹ D@ @ 2-BhJnONxcԨ1*j!sFL!1࠙\Bkk%&䪋$PugOUZҩZaHK-11yŊUw7N^pȑ#}*R*Ea@Fc%;M-c*0zdT"Gj( `P(yrh6] HAL2" a4d2RRF=h@F|ӨdUaFiG OE8Vȡ%%UXr(P1Ih='aJ@ eI$f #1CaJmUWJ0Иu"y8"#(tJK5 U쇩R%BEⓣDd ra-,,,,,,,~z&%$&!j'EC2BP DCJ A|HA23|aWj^FzZMtlٴkwܱ}Nvj׷umZtkޤm^̙={s.}ҹ.=ޙp{|`!Ic9`-L@S*UQGX5%/>r(|i 7E:M4:t1cv횒*Ҁtꪨ\9d=Ҡ1W4`V҆!aUI?Q]8 e) ]U1BJDS\S%Ep<\ E3PE*6JKA]F!\U؜j۶}VV"*4l`UCFSQ%kUE#"rՂ/IK@D8h:1@ZdvRӛ#G5i!!>U@L+A4nr(WZz$FNI* &Z¦!Y2j]I]WK;TRT¢ A ĤkZU*IA9z/!T)".%,&E\"JE"Ԋd$O"7-R@)0͉MV4ETb*i)"twJrsSPE-,,,,,,,~bhHllu߻!E!%q )6 ) Ә:W-5ҶUm}ܱw1-{tnׯUMvmUk^~Ntx^|]8 ?u#=v_x*)LeԬY[GCDs3D'B `|=@zDSKE 謉D:P"_9[+TΣ6Rȥ*B(f5p_,DTE#_Fq(u^ b:4(ٮ.M7MK4UEPCg}Kͯ8Rc@@4-  Ƣ #\jAB *.%_ XZ Q"UDƩ00}D3л<I(A_ͅ3Zf TjKFrk:7~S9"m1j̗Z.x:& jE2#RU\u#F^R >P]/1\EA P"I]Ӕ´b! -y`^.KL-5S% ZFhdȡ!toBH`j!)UPoh#H 1cO:# 2u317ߏk=|NկmԠ^vmzv6[nۦw떽۷߶Uڷkq+,y'ο}o\:w™N|}轷 _w>f)/"3RF-7~t6qC'A%bc庨(ЩdѬcYI@RlPE`sp?TIWޣ1:s+IJ\BUQkɑfA vpYҺ!&K"S"(r8ErCICu͑цRU:Р~Y"jQIe 䒇] aHZ 32L=H_h֠:1zpAYSVM@9ּYieFXk1QH.\$ChCKݳc!0UQ)4AqGUBĠSeB!~B W w]Wz^zZmWZOZ=4JHz+6oߪ[~#M1|cF?t=v4k޹׸ѣ_wϟ9ޙcOv gHIѐ_ʐ :!K*CnNB*hPiQ.*dS*|76@);d!P,hA?0Itk!4 kR٦:bBkXݧA*BX BFZ`z<RBDLeP_%:!Iȗޯ 3 P`Z1]!pNX M#!ҊL5qp(B&wgDP/d9R^1U&).BC#mZ@J 1F9 {(&&BE0M+ 5ѐھhHb-|u($WB|ѐ8(&NzZ]YL}Z㪗Yаm>:kk׬6mڰ#ܷǠwgh3s/=y]9Lp@@4QThHZyD hJgXBEP\3 aZBªQLf E:qGUCXB@’C'TG3 Hh!Zd4S,֛fu"ɟ)4ݡ8F չ2A0¬Ɛ50iҔ{[7># Si%Ɛ u)4A^B%n}'U63_HSIE4)_%AUMCUU+ܿX3eKC -r`0*Cp +Jcj#&ȁC-bfYT(]:KCterZAC0;ѻƛѬCn P:HpX"ub5an._U`bt0*Ԃ`*YXXXXXXDCj$NLKH |6Ub 1/f@S3-v8`̝g-luw͙5kY ?3f?o=py٣Np玼ЅS;ZP#?B4fca<Ӈ:~_{ĉNKڶml?Х4[`&͠d P@+ɩ-6l.q)BܖFɨQc?w7λu~Dh9XszVZ}QVʕ`1A0Yr˗Dҥ\ ?#k׮ozʘJ̣"DRf-.]ުUR"TA'x꥗^QPMv+VB-RIن0b߹s^;8y<"B ڵIue1[Ã5jڸqѣ7u]>w ~vveVtԅuE(BN2q0xuxG>yּz Կzp,hAF\2pXfL9X:tȑg}~ĈQj1Ht0>Ta=_N9t…yq8G[ a5anIܚv>|ܯFCʍݶdxInX2xQ߼;v|߾SӃgfPe~w&vF]@Dz_b!I|~?A!PHa0O1>t54%Rj4kְOhKmXe޷gVZz͖ ߵg>{'O~r玽3G/}b72A 4?p|g8M4s̚5#i˖uj ̓)[J*ihÃ"gǯ{g䁩\+G y (}BɪUk89JAI: R)b _ƍJF3edJQ) DSP29%'0hEǏ8w\ŊYG)^`;_h 7&P J1 AIE* oڴkkHfL E)2Uz[P$ڨˆqUw+w+)2Mzm~7 n 495FYx~Ot-S$o wu7:՗oWP(OMM:t̙}gy@Zkǎ]gϾt+V9snӦ-xe8r{ɷ_vӧRsrkxwInz0Xa4+PJJ)?Y#_z_/Ϟ=)HIIy4(VgImf)8 8a¤_gV<A^ܠA#$mKi 6jtv۶8w]-oomKKۍwu֣Ooٲt('&M]kS4B:ł~9wߛO/mۧOf:SN㩋jѢՊ+رZAG:"-,,,,,,mQl4$1)/TgPH}_/c8cn' 5U^]9eꤙ,\lŚU/]`EXx%<+ϟ:y osgG?w0rc:|탗|&㌃?s6Q^~Yf-9VtU] sw6l8%%KQ!˷4R4p^E7/"Ɂ c+.t2Eh~ـ/re+s̓ zWP*M)˝V2"2x IMr* y|rdȝ%[̀/\h\ΟɓaLQnnͧz{Hp pțd|ͩ" UJ"h釠> @ug[7pS͚yO?,/yƊ"&KXiAmdļ;wzБbpܶO'qqGسgoc0L%؃t<~(Qw߄Wɽ9z_◲~QB'0 K,$zmvy"""oM|'siؑ#G֩Qgp-Z|u G?gƎATsi5~G@0&1dʐh]FXfj gg-BS 1-JmdQ@W> !ʕkCC34ZFCԴ_m fKJ5@S\sС:|/]ۇoVTQTJCNvժ5mժmO 7 2[: Ok?У2>1b#&;"EUQ5  8b5PAfia@PW^=w]ڵP~nn|s9n;vW2F]rFˍ746țV,,,,,,,mጆ$%%ILEC EC>HhǕ_v.NpגE7۰a۷l޸~Ų3;a)\xO>q]r-SZ(1yf6o("OJJ2eC1~Ӧ-t3JCB,Xovmh󩥹nǟ;w߀ B&ifmذ n.;wJV98pgտjFz-Z8a¤v?~|myyyF+kB'\SP-[' ǀE#lٚ9 zJ#GXLdQbת6܏%Ǐ0` lpv߀Iѝ 16B\&Ɯ"*ee)+={XR*U333,YaC"?ȣ?-,O?ٳ+|Ç?#,*FÆY ;B졳L, ͯ M#s/ Ϫ'Nn#))ixnii.|Y )ZqZ}ʍɰh oڴ+c+f p0YS<|ӻ'pӧO9s޽O8YBB"cH]z4-:5f̸hv{E0A,Q,.Va|xڳy(4|fmO?t秖%FY}AzYXfgϾä[ܿЯ8ܼ 1{[ a/_u T A]_8 MLHJNJl*yRb5(\'9+]_HS H#oF 2Rgԩբg!wO?kW><<\j7[<qɏ;G}9;oK\:wY_(ğBN(?! ֕#0܌>,??|[2N:%sڵۆ rDQRRӧN:qD|7kC0Ɩ-[?sԉ9>͙7;wo78hNrP|$d#Ϝ9zYf)O,<} n~˶m;t΅4Pr|?yd>8vb<]Q<. v≩-t?w۾}ҥ9rGZt ppM؀*g:v^c!O \Etyڴ-^x /#)^t'ok\5~'LOūOLLF>2Sqg.p3vY\k|? %K͛7OͭI]]EsŊ|pp/ԩ 4Ckc|њ5kqi|r'|ʨrjBdـW_=egVv^x=j[⩧V#hSwBA /ffpVX/bxk]lC+ήݰaÅ K'IgY6W pC`?FC-xk,,g `\W>L%QD[(dfe˖3;xkou[n*Ur13fΜdɒ'޸q2 [K'|Gnpߒ`k<;v^paާf̘?Lgi1 s_*]Q|\pquVamoߑZ4ʍ|`65k1}=<ŋvuŒ^صk%BEEϿRa4֯@xTj~ᗞ3O~tS^:ww_;c}g2|Ӿ!y_}'qcV {8`?s rKݺu}ɓ's̒QAFh`r:ܶmgk˷RU9GɬLj۶#FQWpЉ 9#١C' 0GΞ (A㯻sZ l,ѣOskӦ;KE/AߺuÇ:3Ew9sܿᆛ8q>pINތ Hْc66 =o_+++k]`*VثWz8Zӄ"[p/]zKnAs&xpʧi.#p>9?qJY<6lXK˯:5Z&,PtdgϲΛ7 XK8K0Lٸ(nGO0| ;cƈoᖶmۜ={zetͷN0wBcRX{8!b;1xPLs08L(~=<:[˸5hИ{u<֭L <3f(W|j;ܹGFIi ;uꂳ~m9sy(ֆs !G-9V{z[ɷ5@I Vfǎ_xM3gasGGnsޥůX]vgx/ĉϝ;!馛,Yr-Z28M` ]C77mڂJ_nf4j՚>}V_кM2RF x}!(g.xL:*aæ~^{5UTih vVuv0c"?d=}ٳ PELe|r6 3eT$} .Deaaaaaaog4 8_ яbR릦4Ԕ|;=?=nzj]Aݻ856ڹٽ}'{O<#/_x|z\'>{w;# E T1!yyu~ڵkҥ/pa"Ir駗Zu'IIIᬶ|򨨨ʕ+ŽT )LӦ?30ƙ3>Z8:sdr^ntN ,u\ho}cN,o~[TxYN~8-$G`ovv?+Vb%9DR4e6:m;O:3|HqL'֭%b\Cİ yF,''1ǗϞ}==a_oܸnrėc41p^,a||QFeeeTp+K  Zݺ?eʔoTv‡yS?1QEѡCG&OqS s^yGF_A],gZj'O>ͬ<3)K.G?tf6OL 줮f=帚1fK68 ~(xqM/y 711c;.:uT) 54&=vxST],9s3_ǏF.\Çvy(q#?ĶȘrʏ?~߾}[Ƽ[ ꫯ뗿5!x0׿53u˽I7Yw}lٲ<^ma$DÊ~1?{eՕvwBp!8E^CQw Z^.I}/윜*t:n6c=^kk՜SHx8axx$IK( 'RqHŷhKZ:ݺ}X-y-\ã5 ${i99886XlSx!{Q+OvI8L8۶mQRuYYnyff&9ϝܢ;@D|'hw%KI%M@6m3gu?~vʝ;ƍ9ؕPCq/poRR2?zk)qf~R7Y…Ϟ=Q,D|7Pqa @ O<6eb^2d&17ܞ~K.FZZ:sn=g$S8С_7'owrСFǎ&1@ O(GqL0L0w ކXCşUC k2ΕWqjVŹC#'0oɳg.]jϝ=uN^pO?~xKgD$'&3NJ /A -oC(ToߞʈʉH5*Z*&MVbŊ4~˗//SL%*T5kʉY_iApcim4<ԗZϤ]r矗̙stȢ1ܧj\h E-ͤ}ғ rhEIN <Ok԰|ʼyhs+FOW)Xa(")UD)i llFP}Rh&Z/ kӦ%ÓpеA.@t5I;wXr8p0mg.\` ;wpΝK-3f9F߅4}AcOl! dO hCL@>Ø1c9 Ν`1Cɷcǎ۷/O<Y۶mw*_W'AYC+V~ _+oة-`7"K={3d7q,>Xu6d lСmڴpoYù&$`Xѝ7oC޸qGX,PŋO>ռyK&rH!cNpBxE~ΜoݺtR$r?d)!!g K%cE#чDX~ eV8q*W<8dY5С#$G9ɹaÆ#Gԭ[^kڵǏ[~&w|Jdq\^v Zy/dY~v֫Rȑc.kl򑑑ƍ/Vi*`b5?n{c[׭[dž?̙zˏWXAng/8 ?HNYob##Z OΠ8v,@ BU &` &qR\B9TԷ*ٱ Щ2űcS'N]ի>x赫6oq/{ݻvʅ;Ο>zhϭ"Cc3ӣeDe'%1IIQ>^ [ކPSo߾߫c&}6p<zRhzUVQiNP 5((u,@71Ρ:u:-MfO0IT ||"bEMc;H]anP%>"ڶm_ۭ^;vpQ#G_@":tua3\ 4xBx0uԅf%ם4EP9ל9svK_ -Z(_> [h >ٳ'}r"EIo?v1e{`Ngx~AId&Ν{?nA}8vXbѩS2i$hM)_4h0 QVaݿ@.3`=zĉ؋pgQ뷢?b 6~Q.رkׁ[=|ĉoUɺ} Qm(Xnf[|p8"pjc,&|?w(j̙kʔ)n"%hs=rH^ҥ1sxڵ>}Way/^vw@=TB"(@aZ[T@sAB|ۗ_~yU%͛oϟoҤ):+.SNߛCg͚$0j\zGLN۷kK6 $4__2Bx'˩Sg8Xv'9uٹsj`>c4Kvڞ=?H!,ޏz8Az88hx݇e,ynC6M-[~ɫu<J(]iiüDm Yv-%3g(1x9PgxxXčyoIJE/Ѡr5UήT{^JO_|ѓ.4uy𤻈O\l>>ڵspp?IIIgo]Т WD~˧yӦHIIc 5N)Y5kvrr 6$!]n&h8)7o޺f:8#=!!i0vwT0 HLL7n A)]46IIIt e˖'pS>Bp6m~ @qD!))M Q ؖ-p4d^vo<&*'VL4%33E}V֭UVQ3PH:I:^:OZemr $yv]-ءC[ېEJ_s.w=z@.xOTH 8݆ExG^[?Օ-ںu;wnlrdawiʕ[` Oc$?y?+;'X%6m&Q@sLa/CQQQݻwϛ7 aGGDze˒uH<שSx}|vJjjȑ#˔)VID6ڂt@URCx _xd#:xAyzPL0Lx6CE˅HJK݆dtbU]Vsm^b.M:hw|+_w/2/:76/67*'vl،䰴Ġ䠌x($G0|mDW!m/:vHGP, NNN6..׷W>T]v4ޛ6m*U=--֕+lB]@E[TbIK{NqF+Ҟ3CeJOALHeFJUJ *<e1ytDn5EJA/@hhz_8hf!bbRRC 4$[֯_W+Ȫ *ϡC;y!w̘qV5"p#/[Byޝ0~b_sxG ̡Y K.WyL"u@1LKJJ'O8t[cĈQη?1"E6 \h 7p/GtQa-E@yor.~Ge0@ĨQؕ4D3gӤ: *ںuׯ?o uMڔ)Sbbb<{|֖/ dZZzppM+Qm 0ZW_m|EbbΝqR?!@tt,F-CKgɑQ11w4h}XL'@ o9P$)3f"3IQ y_dwΝw޼wkk+tzMZjs&YHoa>́Mx!.*L^h\@AǧOO/\ҥK_ުaFKZdʓ3ʕkw$DۇFWתvk#qLiPPIv4DZrX??ЁpprjҖ;iDY< *mܸ|.[HD`B[n%R׆U\4AեK7d-[|,vрhПS~1GYsz, ,biǎl0 T}vv+?8g֮]ؚi\A0AM4mF[R \JBDe &` &oC~v 4uujԸU/^vȩW޼qzxWL_jrXFJDr|pzRQDO IM JK NO I L LOMoBtcT }_bT9 (tZ_899ϯZYMȑ(0|/VR>oҽ~pvwo+̈jA5*jDUTm޼%N}X>^= CJO_^)O TP%%C߂߲e:uIeMS.nԩ{8 dB(VѐN ]SmSqj hРvDKWO(^%kӦdK!1lؗ#F NСdnm۶^-:\-͚ r@:q&H=h Lb;Qh!OlZ(ƤhK:l!5kI8`*[P &SvbMdaE$ʣpKK'(r:=cKX*iӶjay8sJʋ*UL,Fݭ[w%!M/^NKRUVbL"8pX |$pN]8gaE79L6mm1if6%TmA/LYeʔm߾+,!]ɨo9`'OiӦ?O]v,Ut)OV'*TtTBW4pthXSNM\ZũY5ש1x۾thߔ̌bdF?{(3AFԐ!iIі]i|kBTmn2[mnC4(/X}Na_9R![1-%E R0PqPQh0m-L̓cP Cx ,;w^b&RlتQDl`uIK(i,.Qc0Y^XEK"y!"~scz}ٲqq ͛|Ky < d*7o|~0aHhnnu6m2utnٲ-""[1uS`"k+cC[ ?605ixlh 70o!Ƽ-Iyhü}.]-(qs1Dk -$ rC ^ %* PU4dQe $|m44'K(՚B,_AB߮FVB%[GI H74Dif^v|G)rmV䳭8[G٩a(1[j5c;Ѷ`B lm@Va˼Y9d up+p6LƇFοle<璘sY_-k}t21K#*q șPr[V1PJکg` &` . qY!֫M*5v١Ke˷?r3³Upם~wbG<̌z0O|ӄG>N|0=<394#!(5?)m>݀*5l^-oC~W@WV{,Yn<gvaS8if`w(+Vt5kHHXxx$O0W7BҮ]g^^B73gر33{Mx/ &b/L0L0w hʕ yumB:7ű[ػknF?Ȍ~ 飸'cRBʕ,W!Vhj0>RŹY*Mo7z&O| CC^Rf` &` ,XnC*T\V u9;6ކT۫́j.k7wҋ.ܻ0#٣B2Y:x0-~jh6_xcbކ4մ Pxb%ʼ-; 4KZoU3z5xqKe4:L0L0wtX͡b=ʖHSW!\Zn[;bC~ޞ1I3bzռT]}ր_v/u[Ui9ϷA`OB<0&,1LxvY(0 Qq~]L`'Zz*'Yu 3|~+Lx3pԘ` &` .6rbw*ĵE8hmz޽왑q̓ƽxID?{I“؇iQ-!a)qA J|in@0[߆/PTTo ?Y,}98 *~pԉH4V }` BajqP'Ț9+c05eȫ~oW$3!KPL$rƚ [S +Q@!c&[RWƀ1,i.PTp aC#XD1@݄,}e%LHSc@V0'_!ϫl1!]uЂ3iP? Ċ3k ')’6NGahE&kJEG+qc 2 (n `CX"Kƌa -,] 3< %ҙgF:HC@*|!ӧϸvZ޽SPӧ_~g[?PZAqd)fA1ʃfc*Lq@gOQCǎnnu!8$vN]֯تUk]0 O-0xyy_rmʔi %P@&Ka XRjJ!C]|k֬Z:X5a d#O''޴i3ʖ-/%Y"a{ې'bGf&O}''Gz'Dowdޛ;Z BjDU HI0/A h)+hԩ3ӧϼ{sɪ0̳*0^ HmD:<,E[}} s Ukz̙~OS./XE^XfpJ a/VA$f O A:Oa rB)YZ"DdcM@ 4AfVZ]dǤW|pc4D LAIa9G}ڍ{(>!Oww|Q–_R:ID2*1#a%l pb8IG(OnGʕ+ɘF={˗'N̓'/4BV3AJRP%c%^)CJ 9 4LfyV! X-Tp޽F&p'g< rZǎ? zfxR6G"/_ڠA#14)@҇#Rb2k׮?z8i|׮g̘pܡ$=YA0SL;qۊ™CLJdੁ|n7oZjϞ=Ϟ=:i$.b"C E7C4$.Ѝf͚C((X1dȰU4lظb۶qP ƍ(zW mĮ۷^C |&n5{'Oc)~aAݾ}u6 y5~`x"**SRCV+QvH$y:Hq.^tΜy_DIDws 8@lذd 4Nf 1ydKƎO81 %]pDc/KԨP35kAu{Q-ӦHbJL0L0}nCX9YfkTmYյi[/N;p7"'-5afgې_$|Qu3cGf'&'%D$F ۺo`] .WUJL9Ng!̑#} j2 i@jMI 9&%ott,U>0EPP M%zΈ(+V?~ן4Q,)͙3z;堞dyK.;qdBRddtVuCxǎϟ+g:? &7:* iIА&?11ypn<+i@'zM…ccui[hz 1>W ,Ӡ=Ƈ7e]O?XE,+NITbJΝw܅9gETEONc2GE7ػw>AL}ҊM'PP&$_}Ǣ<$7) ]E=z`LKd/;zJ. (,t]p;cYZ޽d9xeC8̌OT …-}u붨{Cu_DDcQ%ڀ C(Ym3WiP[4"fIV;~$Mu9.½cȑcm0T'9sVDD2Y1a>Wz2 &5kaM $B"x񒀀@jedkn0ߣ BO!ęR 7}PJFmؽ{B8Yp} _(4ˢɟ7o-ݻd{er_9r1j'(0w@ݏ%$v}HT:̇{U4'SN?xɓF+Kr*X*..a*T4x|H={ʕ 5萟>}N|𔔴q&d6G<ݸqS25@x ;XT7߶k׮"܎ a&1~0`addTjj#?'!<l7}o׹s7]9!BC=$2C遷q9"_E9Y?ؿ]Ä|&J*MSPHT 9mVm۶mڴo9xY3bq8xϞ,0Qh0ws83cbEآ{Pv oHy@:i~*uKq) p~& V''r4mڢP!L0L0ὀ!@UUUwuQe*븵7}ɓgΜйs֪UkUذͣݥ{Пf@.RJ}ƈrEnv%-7rInszzzit$L||"LFi?CsgÆQR 3 s,1Ovq,tdXh ٫D?|pݻPV؉O ȽȑcaѢ7nܷo?N>yN_A'Nܽ{/0d[^q& "_t3Pd82Oĸz: _SN3gαмc0-۶Y>{P` - ;wE!pr|قAqqN-hL!>!(ʩV9r:s762޽VC݆/ uӦ- &x`̄!ŁxM.^DIÇ}{Y8|(G `PP0Tϴ_W\F:O ʣխ[whZGvfV57n04@ 7jmrT~bbbu$𳏏1?_ضm{FѴiw&M3FC ِ3D"mZv%!Op{5f0 ip  3}L+iBIC(}t8dm0a~9M)]%j`)` /~~'hE"B#@dzExCNuԳo=ov|-}pA{ x'<ƨ RopC4Q-[C|Bn!DҚoߑO4D=9\.^`I#ǰVرR4Ɯ_j8;WC1e42%b/#Ma{“y /&L l޼%#7hKϝ;aæe˟={&q000oX'%UL69q]3Fry7n*&wży ܅c9{92ʽHjۤI3p¥QDd.S0ǥmڴ#:!{L:u-Q]yMBx@=\* =ѐtG'IWLCS#L]>W۱dAN)W}Ѥжm_@jaWtemrG ;L[>/;8?ݻcp&a*Tp0oCL0L0,!e-!.ېj.]]XDjp̑ǂ|b"ReF"m峸[~kx4部G)!鉁i A@J\@BoB?zr YM$"$!/];88;wJ|U4B4u^95&--֎Be̘q,Y{(]CB¨ә պunJj–މJk֬cʛ%xa J+-->LR‡_7/իפ Q4645qvv9IIIS !R:eȁ -nnuҞ=\\` *XQvsMII]"R!%EKiP^1'x變)!zܸ j&Lj'p(mӲe+hhc="hhq ZzmjjISh /4&11VJd)>A#vrf" zi8r}a% :vLt@:8x0:+W(І k1ڸqSLL,% *[gz06 % (qi3\Dtp<ʐH4'NT2K5А5HKUVq/u6h艔ݻ~?CC2msxx$B4J2At%=NV(Kp9KIBR#~_IX(iӖW'wl.7$wp 5LAEb8cЮr>@ Cln,/g-xtr/_9x 9P}c#'&Ӝg ?!c%c{~FoH&:uҁ~0CRaѣTDn>̮a %L8+VYD56]DD'IfrX џ-*+WȒx>+{$PgI-;k˖m~@걊> Q扱.y[ڕ 6":::V_ϱ $| $:88/O &` &`glccL5\Z:5uuiVjF.ƕ^AGͩϟĽ|ח b>iܳ'O2gDOMK܆&GX®7e#=S2GBUlE'Wg֬9tx>>u6`aUt\))A,عsWϑ,x7^aCDGDDbB5krA!!(sΧTӧԩ]*h ~= `W}ʥߢd6"ugϞKje JN₟#"fW!F` q{ ȑAm[HHVl+Qi34 ld"?###WVm!ǶoHlh /K#FBVtKIPTsKII%22p8OE zxOOc#3ϓ p>`"p22qd117oFuÇ0[rpV6DcW>|mHnNNdOv…8oEoݺյe ْ]vG7x"Lj۶= 2O| G;|Vp_ h(mȨK.s #|ȖW,imذ Y/2p@naO-Y PFzP1|[L|J O]`,/HHH$ 1c=Cƍ9`W|qZ?7ŷxO<-&P2G;N'QfU>qhO  0L0Lx6QUfmoTiVfz}cwXWjRhfZGq}Y³DZېb;1jCX-Bn6Wp :A@e7u!5e虩y]-Z".19PNWgiaT+:@BW@mJ+Bݷoh (_7nJeOGGR**uҰaÑsIaݽ!CO߿@p4oڴyUV^чxx0 l*)C : ᏽMЦM6jRPrKشjB]G"<ս..U!ೊtbYjOXA| BE\Dˁ 85kA?7XDheB8ct3}oP 4ĨS8p Yjê`|KP>i޼%6Z!B(abCH49d#7*4BHcj۷ހm׮*[?6C?cb5KzcVb׮]yUC ,r (Ɲbb!dز&8B hS8,dG %b T!P9 B7Y>|D>}IB6Z.]+؂@ PE_$xE0P GCH^N]#l|Ȫt6 `qDx +t'@ ! BAmɼؒޜ$bcᬰ 0x-3̓$6hQq{Y±I( L%aOU~0=23%,#)_ކą{&>݆Ԯ]z" ɫGFE@(Z*KB!Ojb`1ODT1XA$BSs࡞֏/Z &5ʀW[[` nj9 dTbҿNzwܛ?!K 7L4/j1F!K3@@ [ x1W4R%/7KC 4c`2fI%9Ub:Qe B\h220l1%WcM$Q.,8 4SLQ G *[4$y0AzPq99c W #)4`0Ym۶d) KPX10x‡тPly}>_ y=<}l˖8b _c Ҥɫ<<fl9 OAyh #ЁW dɒ\8LMҫ 83X *Y O !BӒ`@c$4ajIȶ ZAD+* by%ƆhD@3"x 1&MT @  G 5$M` 5c&3DEC1H%^ Baj5)W 7X|V $W4o9>k`P'2V5W d4+[zXip-7gI ѤgVP ccg!OL0L0^߆4ҼkUZԨҲCz׻=o L | =O!-OZnC23-!Ríj K{;2ۋ Z, ^;oCU  Agl` h'3fRƌlZe p 0KB< *jo0>Qj+QB֌gie0gR>&ye,fD΀IcSKi $ڂF,xY28h `l&yOv1i&glv#|4@1VE0bd3KM HyXcU#4G&0!1/y5DP"49[S[aI lEhy-1i ȥƪ$d=3gl cW@$|^BXeRV8<,#Вk`kOyfJפy%+%= f c/y%%nƎ(YҲ#-gY> ĘsZ[Xd &` &~A!Ύu87^*j˚Uݫtujڳۗw+8vJB #Qfя2?EGQOF?y~TfZ0 -!$960)/17ԷL*Dƶ$XK6nԇPTYlyAx{njJ\yݘcrւժEC98 "jxe@@"WE (&]Su9 ?%O7!&Ϋ 뛀U0A!UD<$e? O80CY .Vy Qa0y%xY0\'4r/Ox2#^ " T!>hK4a0s bgKЌs7 W HlA<QHRKy0t@Z@ȵ4sl@ byRNlW&` &`]tRեioCYUfmZܱ}wWdWb\`ZbԈ#>{$'퇔OKw>}r?%AjDZBHRL@rlPr/ 1.5&rWЖVv Q3B:(d*(0CgSi0(4Uo 'aB'r= ƫ-:1Oϫ-Ĭ[~WL=ףOxƄy:>k|˪~[_]#v P6QNQiQ]Qf-[~7oqcyR_0eVMяiv eʔɼ~iӦJs eT vVqVs. .},LxS*G:tQ&RM`%гreeVv}_|EPqEyyy`H-e]Y}.ڲe[&͙dͭѣǙaL{РA[ӧo$IS;@Τ4d Vk]~Qc@Ӽ-?TS%7nܹ+@U |˹aW` &` 7xmeSMúm|w 1.2&/&'%1X}0x,"'ceF'&%3|ub5WޯLB!? PZ = QmJ5FQEF7Y7믿 3WQ 20h-K(!&LzQ.ݨ1%Dg]xR⢘kϟwܫWa[0d &τ HyhaEt ؒk 5,^,99B+{ 4Pvقp`2dB'OBb%'';88|e.]bŪ _r oԨQFիFDD\z.]~K 5oM4ˑ#gmLF$N Lr7nmÆiWGAҸqӫW#@Kd 2Dy-("(OKFƌ)+n Z[,ZAfgAÇ,T>؞ !Ӎh_g"H³izG6x۶AVAC =c3h?PҀB$' B+XV '=='N7o~[@ o[[%`;vx ՛lVm;8޽\ Ʀ{H{yt]Ya oW0Ib 5= ЩS ΀1b?0bHV ;Ȗ/Yz/&M^x_СrkKv妭' 9[pg> D,YUFMp/׫JL0L}BېZ[h]GjjWoSűќ }cSB>~v>y,?|jfzDzRhj3&6Dv!z5nCI;*ۥ$܆Dݶ ~mHu(#yRW3g-&ɓ?XB%mas&S5F 21odKu ζK[X*[|ÆMʗEP0@Ѣ_V jMd1pX Hoٲ GAئM;@\Ǫ @=uԻvԩ+Vt utt_V'aXOPAFN'ɫLQUji&P0ɗȑc*Wvg@y2t4={eVN+WRǍ'OfZƳG!TZ,;آxVϭIۚ5ݎ=l $elx52e5Ν7Bi`*LYeAGqM#G.UT6Z>H/*|ثW۷۟-) '$x^K(/+fϞ;WZsmkh |H\ Z4.][jœUFG {eno#rhsҕѣ+qևxy[7AT0$:*Y&*dO^Ɗy 5y z;v +lUeϐ%vժ vHs-oիə>ȁ\#8VC꧟ZÏFE¸{aK0`,1<}G^Tu0d9s]v=00̙sTxCE?}LzQd:u%T2VXy^^^rq"| G5kM6}Æ A'Oҥ TPU?hj-+WІ CN[[~R*6uۿ9qTv0e)jQ?С#,z 1p> )v[jC8VX6o2x ޽ܹ,źܽ{oǎ jٲ'7o?Pӊ.]J/_qEwzƾ}P7˼ZeS3KG֨Q_|%Kูqvv7ݺ}Ak )-[&݃$;v|SϜ9{uZ?l (Ҋk/o8؈G4{"+P nDO:ߞ>}.\D WZuB! A իs,Yswhذr-L0`CNF*?8C;w+FYʔ);tЛ7okgbIaÆ_~W>5<XE cbb^|w-QU4u"aH' ! a+@m5$<},Vaq:Ck"rV ?8H065:xmڴ9 :ܼy֬YÍ4npcs.67YZUVPh $'Qsg;3ci׮,/  r3gsΐlr ;Py{{ !=z$^!+". /^L 10j/o޼?v&xBxS#P1jɒefaS͛_|bzǎt/&qq Mp xEzp&ȼ!?Ȑ;QM^Pxvs%~N#(QbȐ!gϞE7nNR%,'6u  &!I6)2RfPS0$^s5~ryyyx288_?G%8 QB07?.BBy%1ʔ)'(3L0~'._skYL jUͽN6ujSUMFmMx ߑy ={x?GcGeFOHO M|B$!Q 5|bC0 ½cüb6{CG֙6'U%e۷?T@ ȄY 4#Lpȟ`V隐E=oGj!%{Æahg)@%8' qGGza2oL$! 3ϟr|HZ7>}~&j,Z={>}&::Q{y:::刵kTj1HaJIr$dѾܹMR挌L? r PM/k ^СΝg>>>4/[_XVlí[R?lo Pk9k׮X'(;w~8%CB% vg~0%E YӦM[hQxx0Wv:Gغuc8lɩS<""YjpɻwQ;v|*Vt 'N2e*'TQ\лusfϞy(b >K͚5!K3fܼyk\\[Æ ;&Mn:?~v6>%xIB om۞۽{/x2D5N|+W7[V*Zȑ# 4i*‡f"0a3"q/ 2 Zn}ݻwcG҄ CK%d &` &>A!Uլ­G׷!@Zm;75y'#?z4y" ɃљiQ)3B/i хȯ e!mی:'a+͆%"m۶X"-V?.X`߾}I<#=7!&&|Q.^;@j/lgjjz}6$:;I?N;hҤr oHPpO&M%Q+#PVaHr]9sO>2/:Cfͺ۷oÜsB #,hLX;vLy%G2dDNzD3!LoҤٳgg̘+W4D tҕM7g 0>$c۷3g/"((h%K,Rlݺ yh[Vo azM#_1BOe[nɽ"vZ,MnC'jd>qg &Q& at A*p`bJ#Q޽ t7o敠iGKDxݴi KĈWT% /zrKN!64E͟رc322z  Q _~X߱j3g.ZptΔb}Vz wv0XդDv=NN.,P+~j58D@Ds{Sn"wᄆTgmР }xܹgm۶KKK_!$L2SJ5 ϟƠKW-ZVCEcPO/h&Rł &7oY…K/xOX`)K3̘1K&ԭ[̙s4ی̼wsÆ Ѿ@A+R!<9;dъ68<D+O+W+V.P$[hhXz}r +? m۶},hC1 st(-[z9 BX8ZS\Ty._`!pF Q۴i\8asl}._A_~b2:W~bDӈ&LIƜ9ܹիć z`LFх>},00p3&&?EFk`?N0._EGQH3]I+`N8*܅Vy۷禧qiD0q)V̙3WFۙ3g222vLE9p &` &;ې=ܪ]dhf2Эm{GJOLI܋?H,,k5gC,)c 5>g{bఽװA[oCo [nCf[7|rURUT̙+V(W} H*}iPRWPS"SD b;*WÇRO>]fK1pihw%҇[j9H;w>r&|׮シ|H-[t"rT٦Mb,j<ܹٓ-I[ 7o޴ކX>D-?tB԰^ɤfQouzuҕ1c!֎ݻk7Rt3jrp}Q3f'҂lg@Ž&H68$ivpLjGGg""]#{9j׮1+]n9dxe?^xQ~ PqzWZF@ W>NN.ZJk֬P^WLbii-1*Qݻ/~,b P8c3O<zC@L*3%JqƍɼL` *OIc}yKW9_cw .xiҤɘ\Re|JC%/_~M,PD!W\ƍ #-al+dZTTԗ_?8|wp׮]ŊY2ã͇~oUH^~|ׯ_߷oߜ9s&Nx3gԪ*ೣ9] 8-pμD2`#3|t6|HؤIas~ݹs1i&:t舫;w˗/׭[-Q z 4:u?PƏф%Jb &` &Nͷ!mԭ٦[F7z#ޏ|Q̳DZ YӇq=̰\O2 Q~~:$W" c*%!oo wr"ESGy]|yjիWSόE {_چ *1jFaz3+`#mPPJRTA1'H^TxP,mwwM7~침$ڰa7oS#-J[bj o@/_}&$$BQ' C,88bEƎ/5>4maM` E%DSyi+Wn֬q͕+5xPդI3=L60Jmȑ_A]1&XgEg.]Wu# +LHpQV#?~M aiYwz 6^rdɏ?̟??K*XJsK3b^]8͛oرmآ$~&[XH1&#lC CD# OhAC%i? ہ(ى"'4W<7x|gΜ؁ ۽{4m۶GV\&O|V0\d^ebZF.8@0̷8(؆0]ϛDF^!s2j䩄cӇ,lي%d .{JKTVUVgϞôU-KyB]u6v4:(9W :pq4(OtAb+g؂!W kN,-[%ϯXI7)Rhcƌ}~]K+C'22b̘8Dh'OQM8.^_ٵk׉'V,T(svvsǎo/\аaC d>}oc jԨ>ʅ塒Њc4w)GlٲQzuƍ-l_2q>zͭ6 ]>hŊ'^7BN{0峄O>݄I3,wF -m79?)O!/D~vz |Uȿ6˫B fRJdGGGح_jO5+ h7mBoLO7jԘ f(3+=Ijj:e%Kӭ4l,Q|jF7&'N4%0׭Wk֬ j4Zh4E 7--BT:YtibŊ|IU~RTt,4zm0&ɓkNMM/S͚5(O1ڵ a+[ JУG/ooÇS #)M>O-~4Xȑ#mRU ;w6ANa";c0e}bb+cO@KzȻw=9FEKI7]xWWԩhi<<л"dGJH;54reIz]".y 3A(s@FI&q;wy"N|&v\=?_޽P!ŔPVOPx4H5w튎!9r⋞pC14NJJ0`>`*Q۹sQF8 6uEx/AFro }A%K~OK*T/ :u:<) F8^&cg5gΜJ*ŸD"(#F={6"Zjm׌1qƀvYٲe۵k…5- 9tcV^&QOK X5TI6C 8m! 5jdٲ*9Ra׮IQ%I!ܨ+@5lPaFp+$ĄS ҆C 1L09 [j:5Z׮^GݚmV֮Ѻ[džn }ֳ' X7'ޏx8o?XnCg=HHH^^߆&F%'D_b.84*7ކ{Ɔt/ ?a``` apTxT{Νݲe+(*y2򦡍 ݸq35E%&& !jNB?.Zg_WZ xnݖ+%%i!-aI f?@UHsW ~Cª &hcbbh-:] ABxRc/$ȂIhΝ[$x-`2UW_mGLLM!D/hWfO85Oh̙椺~ ;wFa2WZl^Fzoj8wDA"m0Md?k98XS7;LJERJs\HorNzʓ =L'իWv(hu/_ԨQR6nܘilm=<CyQ@29: ()) 9QL+V 8*22ĉS:Plr+V` ԩ3-Z逺u>}:55GܹԬS.R(?3e۶q#źI,5nȑc^Q!!_jӦ,QI͛8W+\X&M9ʒSP0LJ =>> N+W~˖-hI3gs#l &` &!ېzYKսA7ۥ~VM=N;(3~ZG1ϟĽ|Y~|InCC 0>6r nCp_ropBJOʻkliun-1AR7nDw(<Gi;tD:¦8GebE5K=!m 30gFM ` "$%M{ \]2 `Bf-֭{~rE}o&jժL zs" [>"([)id 0 \j@E)S5-LB$r{Uǎ+X& FOwJ'C dJ?K>}?GNN%f xDD}eZ7B+dVGBB `KNÀ@WR ݤgV?k/|tȹs>ܖ\]k8 ~ѠACh\ V+maA]twtt)YR4o޷ 6r|E=* T6mg,Q⓪U{JVWV "bJ:88uź1礨%R,-[m,5k֒޸q3QYyV+VV<ϑw D B[^P)SDBV}muV5JYYf`Ϟ}j׮gu8sIl%֨W]%86;wFFa B [OA=zp jѢf.O8@:uJ8PCKIx#kڵX\EBt8ݯ~FVLkժK 1L^qO䮒٭[+0 }%4+wbݲNnݺQVl=6մ^lOИ]e59Kϛ7߾3NPVO`\f`*]ϼy P̎@T(̠6;>00=o+X7N`Pp(Tp1| d*׭?7[_YUmN  { W$n)b]711W&(3B%YP)Rl]bZCV+i+TŊa'58ɲzòjPi ײ,JE-*e!j?O mr2TP/*^hȁo[ψ4(ï#4Ȳ&kr'!RB2Ȃ-;o=9V aM0e`w]#7^݆Ti`mHk7kP]Z oRKZXCh(_,6wJߔtt bwn݆ąye lAmo@FM2ãM2Ra`»[v4]X̓Dg6"y](/bR@ d]h 0_cRڛLxn/]#7LqwW6򵩯nC껵fxHb iRm۾=-),3=уb25I쓇 \dDO|mHB=g7 #}t*ļ K̙3w\yg֫Rֿb\|f몖_r!Y1 &m9@DT#݃A am &o`.ؑ` &8`Gn +ކԫٶ^6@} XA 5߹yNwjRb#?Nx$_$׏)?{(CUȃ) ! A)q?e,/A 0oCx^^'c;Lx_ 2Y̘'c-*U?!Lle $Ы8@IK^&`v{ &`¿ 쎣 v&B! jwhXhϳQN-vmZSz8f8{^>My,y~HEDZOY>oQMK~*`{񳏇^|d ކćzf!Э}f[6/ {  j̰xDV nYA Ȋ$l%^^ώlL0wL0_v;rLx_M!iTc7Ҭ^-.mz8x$#9(H2O?YԄ!;_S w6dc7o7uBO^N-ULμk *u%l ɯ Uu|և(Iu<3*Bf`0.A/@0XX5GM0e`w]#7 i: uoٰ[]y|q[t_$<{A/%|Yҳ2"ӓҒ2R"RBR!)qɱA1ېp [>۞ަT-Zx -RTtS1o*|@y| ?EJΊ3(GdS,ЄgbŊ-,DccPj/QHX}16Z-ZPaH'Z8Vܠb <7lGCD’pD Rex\FZ3ROx  @ȸ`„-HOgb% D+e ^0 nJ3WM 8lW!Ad^ǀ'|M$7+~q߾Io|{?i a7673Ɔ؜H+#3Œc=a ->4-BmG'"iJ? ԩJ3gލΝ0a$TQ$~Un:Бf]\RS!Ő(Č6.`:5?/{z7dAk׮^~=<:ŗ);ts7|K&`Ymi ս{{RUPK.!!!""Jpڴ)+֭j:V!}(D89NOR> 1`H?۴icǮ(ooI^EmTȭ[}m˗fAYܼ͛ykHH8|h߾d4s+r0{9N]N8}%&:J0QdHzX+W>z3+fR %"+G} "n ׮]mC O CEP_%lĊ ,).!J޳ѣ_۰u֗-[!C'rH+"`jpʚ/_K?\2L0{' n„ cpx$Mgqԡώ{vأ݆ _qFO}{z suρKAnB˃o $-yqyٱ9(QHzlvjtfrNC2Íc!=>&'|iHǎUPPPs>hKpbbQhi*SDǨUdm*DBHA7ޘ5JĪUk4oǎÁkլQʿS.7o޺]O{Ԫe=G߿?YΦHśYfq$t~dɲ,Oρ6"K"}aB(RZ *}чQY*]ieQZqB3 сt~~_z}֬y9fl#<@Ą p&L0?OA܄VMiH{uԫَBlo 1nHױn=y w/Rbrs-EqE y9YַfǤ'GdDf>!_Z~u2G!?~u xRL䷞tҕF'j658r+@CNTP~3ޠA# u6pIyUܹ;00ڵ} ؜9O<5 :"vy` h3l u1b6lܷoӧ"BCN:MEV~[\\Ŀ蘠ys"Ҷm;}w{HHE8&T>K@ɓ'OnӦ͡Cܹ9*R!ސ:ִisr*dآD!A2w5eTޟ}ōvzMHƍnNHH(ё!l5kEDDOwg2e8I*_Gر w'QQQQ4 !eTԈ? < ,zp)"HqCz$`FL6Hchh9u4s.`pX܉;v.[<Ȳe+8g:7:{ܳ>/7hщ8&Xi]tcyÀ"W/~9Iavjwщ!,j8>M0O{' n„ cpx$Mgis=4d!OC_ 5ңר~F9Wx{geǤeEfY_gk2Yi1)Qd`bXBJ/> KNCDi*@IT5'u뻭ZQڒZJKJ Q5iҌrb3gS(-8'׭[}suflh@iWU!5dȰB* 6ݿ 3gI6p` Cu p^'N^|퐐 \V[rUWZsڍJ; X\8p`QQѮ]6nح[;w7nR#X~Cܠ,,, BgN}wʕ)bIRI|ʵOy(SL}ׯ]~-`i2jŋ O)[wNd\d2庇'po7f!$7kbԨ1_}9!!IY0&Ʋf:˖-?|WJJˏ!ٶ=Kcl0)xȒCPR9Vθq_e?HlٚZbwС"0r066nݺ -Z1Լy?Y^|ڵY3OH ,ln۷I氵z?3./3_zP'+9S@y_a"-Zܼjݺ-Ru:u{bbbY?fɄR }aRFY;,G&L0a„ &Lx"iHztt<ع^v}knkd?iȨ~#:~3%ZRSR#ҒóҢs2bsc3S 6Nɱz Xr KOCsNCo= 16bjʓR*ʓBaFddduޓBRS9  %Y { { .LX<;t3x*VBOF9GNlPʍuSiSwQ?S"?:5}IQJۯ%"54hRԽ xZSSg()=SdӐ˗:uO>6lr*dCAPc(tݻwSczڴ0#ҥK7?QP4J?A4hHdd4jŊIݹsH/'9cǎo۶= 裝B gb_R6l q97oA/P;{4|0rX, 1qd =/\wť7޾ U7v-8dH/^#FdmĨہl 3/hh8[^ݼyO=0Xm޼%`KRY99swǐ!Þ~Y/QW‰¹s3Oӟڼyw: qD'Z,ff!D#_>}^TIdټ:u;xϴ 0OSNu!-r8iҫIQ%k&L0a„ &L"ÒS2Sbt rRc!  %)4$[NCDB ӐNoQcj^\(vr(]PkQ6nܔb/#NJHNa%UKW6mUh;vL= 椃Q>PVjc+W<^nÇطҥT 0(3z4# JA( ~{mSW({~M'A\eӧOYzիWUBq豸/@&ݻôwߥK7r"K@l$<""jڴ}gΜ# /4PV>Pn\m(N&w܍Z"D;vba 菄l$njr99~)ELD8v>gAAaBB?Iͭ/ l޼Hlb_l7 >Jt Kck ? %K<)b&Y6Dܽ{bpM@)%pаz]aætr8w-[&d H!3 j0úuwܕ^xͷB=^(Kř~vwY$aϞO:6n=Bĉo z:9 o֭wɳgϑp|(gqXngddd͞=%5xmf4iFGQG#C6s sÆ щ'ң|*eNulݣG/BjO?Ͼķ:/YzGju\RO!'7OC 9r} ~*aF'gR{c)*CggװSs K u.w֝*w2 +cT_2e*)B9 Ϟ=!Sѣǒ;w|bb,~ s']:!EQf!{|"œN8qja4* !C5N޽I)ѹx^x)C\ۏ[h3<7hRlS]bDq's<BuM :|A Vܓ3,YӠA#Bc`f{#&3#GFm4ڵg֬K,[`ɯT }"DM-j׭ƊYLҥ%h/o pc40X",S9a: kn.ru;7oނ9sݷ˿M08 :t7"'N}[oMKض=һlيs硧cx8&^@ϗ.NII;o|d]Q-x&L0a„ &L2.]"N{wiXQHOC;tӯ׈Σ|4225o'c6|1/ºb@ݻMQQQ,! G팏Oql0\5آE+7~5P\mΌ.pycܹ'!B sje>BI] ,Xr6S qq 999YYjNjl_d խ[߅mqiKuAyyy]t[pqzzuL6a׮yyd2##300HW/˗rJJ!o5S<aLFJ_D^qNlBXQ#b-k(3JJ) K!CtZ%4zlhS>>~˖^|EO*EYL9\ ]x)@A66mڬ#*Rt}҈N$($"ܹ :?ܾ}?2!!޽d>--Q3vu 8p0*j95- 7Rqcݺ :C!b |4(Pe9URRMMMxkggWåK'99%>>1((# P8ڔ@B ?~͍4۷?faZ,c[<%^{ʖ-mv___ؾs4=z bH2I؟d$~5E!G!qBW7:R2BP>uԅ:mР!-[FRC}Eia&J&M[-h(ٳ3uW([>܋bs`$B)!0#]ХťQcF};f̸#G7oRI+FR((֭;u.j>}mڴ9t@G&;F٢E+n.aFPգB~a( '%CNMhnn}6lӤkCGIh2d E~#)F޽'SC:-FB'9ر3D(3P\"݃4BL?eW޲rJ T=< }9xYiZ!(40D%SC@UqsFM`;9uO"a B\@thz2~q!tجY `tuu#@ |@jFQ9dFH9Ԣ Py(|Y#YD` s7A<@3C*pU78 `KK!QЀ :`AzQxCH1dqĂJSdKu8C0ADqxN,£Q`*o?~"i0B(h0L(+r3DP(H!Ŧ7t3-^AAÄ |}'N<#&UhF=qM"K9"]:&'UPyG &L0a„ &!"lР4ݬG!ׅXn#d/ peݷ簑_d>}}|CCƒ"CÂ, : HX&;: IO iH_pb|i9zҥKW@I!&*+F)Pmvff_@A(%J D*(k-Ti)մ%%oHf{)]}F . (D?(B:F%3'\j^tRIPR_D#BԨ/9%̈ˁҐN U# "ϕ@D%:ЁCЧ#,^q4SDE0xGaBCPdӧ%\nԐ:聮hT-g13DaH"E/_qܸ AA!SN/[pK\i/%]|?ƐWtpPX"L#k„ &L0a„0~pSxl}m˘yg@1^-7}}t h {xӐHٵ; IO؟.NCbbF :G\\z4{*$"¨RbїZCĀaBJCrF!8b r: ҀGa'P`t_FuI+2Z3da:9je] ѫ=dJL PAKC}W52I}FM2:jqBfcY I u H 4d0 EЇ<<@շlЍQ:>#gUFi =j!肂" F#5D PRbQ9AZ{85$UbP>ePQ1Ü!+F5Ku`04R+iufQͅ앨OK~8鈙>[NGbAKԊLj@t(%$eD|Y gFУtc < ^ 0a„ &L0ajիߨS{g!^j= q9^t5m|Qtu Qo<}S~}7/778?$,(4:,4`LRxZBNCᇇ ?g:ί< رv):l.)u*)(]~fb!(GlYQ*~dK(.Qy~#PЏE !p$CK^AwiUp1' a/6 DRKJ+2*-c\bA@C}th+i7- 50{Y{ ;=f„ &L0a„0oӐ!n݇^: gGуt{[ f/=}O?ww___PpXphLX4$"9.*5!&-1639&;!۷BpbӐΝRèTcBӡ~)ЦBNeFѬ IT\P:6xfx:"]rЌۀ~*D4:p"%0nNU Ae4`ѐҨTf[-upVZG/+p 䢪%,X.I!bCJB.ecB* IGtP%_&L0a„ &LAҠAwCܜp}H?{{>b˸}& =vPѯG\~KAQaaaa!aa1QIQI۷B-)Y))ƁHdfޢ> ԩ=3TeRFVn} 6WꡖxӪCD63_ }ﳠ)y$ l3JbU !9rh- v:[LV`>bNC{YV XlpIE!sKDC\t0AtHOnOC<ݼ {0<]9bhQ}n)K*O(OMIJNNNN2+173!/#>7->'5V_J)93!)% 'TY(*UҠAݻ?X,q7oޞ={ux~X&X ā'_rmР!/"p'ŋj:tE83#T̙o^tͭ/H\6n֬|LEEE?~\<?>l<(A0Q`n} M:S.}:6D7p Ӏ1Z0͛תґ#Gc֭;nݺS\.C3g^JU *>jذX-[hooo+3(G3C+OKn.|g'*?pk˖-o?{Bׄ &L0a„ @P7hиs݇ٝuHQF 7f>7rͽ{E [=?=i7w3ܥM[VoݼEɶNOCvu&M?q۶mʗضm7oSR+:jMC5㐤a[5^ Ro` lݺիׯH t@=|)a? ?- Öᆤ \6hɩ*䇩EK}\HNN!(*ūT+3!Ӈ9..U6 m2D`Kf|ǎ/?c@9m#~O<+T,?(}Z5 |ppz*V teϜ9?KngΜ vs8pb08+g :w*TҐ !տ 6Ar.]<|9'p*({)>D2}IQ]ϝqs1d>O>Dv⥕+W?FOp| 0a„ &L0a 6ѵwa}zXOC{ysyhc9tl.DXM߾M~=?=w_ W`m-L..H(ʏ/K,ʳ~=87nN!i1٩%|~_<(7De!jҤم _/TbŊu/Q&+Vz.\xmח_}u RlTk{-?q豨R-/\8 HRM()}DDeCjH+W5R"n݆;wJ -[B;vo޼GFFC_bեKW֯߈N~zlڴy۶۵pC W[&MzU1mf->d_XX'[h%eKobpܹw:uj*UڶmcUVݻ/**C _w~ R=Zu(ɼoF6mڞ=o z2y{1<݆\l˽¤o_.drnʃ{)&&-H[R\PmωI,IF$31?-1/5!75>'5:'%2;9<+),31TȰx`{16 A G!_إULGF܅w}_,WKo%jN_~3goٲyΜy*)k@qdɲÇ2ԯ_*W^BB¨6|s6' ?1Gy9hwy2[PZhujHAYt9׮]?s曇}BOρHկpݺ )PqSg( F˖-ߩS AQBW5pcŊUfSe:Gkמ" ~((JÆon}|gYk׮PB׮]cbb^}ꫯNB6mΝOO:Lh\|b 1DuݣG.Z:{$~M?ŋ?2,,Bg )TX Xh :K'D!];t7yyQQ\?~Rj˗p…:͘1mРHJJalnݺZje͛_\\[/Kᄏ,Drȑe˖9sfӦM,c7|fZ Ny\z[xbcaۦM;V"1}ZG$ʆ\|%k'/^[2lيe˖c+ )SD?~r۶meʔYb%3hfRZjM` ]r ;v yyg[hh⬐ɓ_k߾S>&L0a„ &La}butګ#<\Ƹ9 ww=}R?oX+' ?{߿\o-/̏/M(K*M*̎/̶efeg&'$[,9֣G'OC5jB Ee@خ]e+4iҥ}Q:u{dF/ԯߐS.rԷghO?l(kC*@r99ݻH0SF&'`|ܸ Y=zm(߲l֍Pe]w~4 j)V7oy(}眆/(nK/_ 'r&TGȰϿ+L@@Ў#F$%%XB ]tssVᙘ}˕cǎ+֭;nڴ!0tP gXXĥKWfϞ=snzTnJz虐BR*Tׯ``oo!.0~Ĉ3$sEFF߆gϓCFU)B BCg̘Y\ZnEHH(wC8?lVZCo 4?/Ç{gDCjRJڷn:rWtt R\EaN /$49ݻ]r5 jͣ&L0a„ &L<k 5ԮgC=s}xqn#v;n$E&O__3mͽ>HAZQQ|~Nl^%?;dX rY&>?3 3>?=./Ւ/<4v 4 {4__vŋ`XJCCC$b~ajfZP/^%~ 9bc2(8)## ?sJ*:jժS亸JM@QڳsJJ*56Ν))۷aUH9J[XXw~Tkg+l۔ӨB*І''W\[~[_jT|CX_eJ^^PkRI}۱c[nXRJ]v~… k֬*WXEV~C۷CB324dhLC+Vrww2e _n)3k;uBye(!gzrpk <,DݡC3g}rWUfʕ^j!Vdcp/,AdfzPoذ0,6=oo_裝gϞpd[n7nx_~9h rN:?#Fd%$$GĤ5kᒧ[Lcٸ]~sxZD{.QS!C! eqqֲe+N8p0Y%-RE۸qSvt&%((h=$P9$'ݻw.00+55=++g޼HjTۏ !0s8]YfMvW\Vht,<sbߵkOz tGMOhٲ5D.IKo*)SPJծ]^reŊUTqrr^jU͚L̵k7 Bz6m[Q6tTdR%rj\Ihgggŋ8H8nÇ{ܹ?0!!(?(WW7oS?4mѦ{'Oy*Wڵ_UʕqͷޚSb8 #FF gOg}g_=(شi,ݻ?f=T@gӦMW^m6OO{?l__eq^xiDD6 hݺ A NO-KJ*ȵ<(J۾o'~{?EEO).J*ȵ%%%͋$gZbc 2b 2b3#؟d$S"Ks/RV곝\^~ej`pJhj-Zh˖-oT}S5mۗ*R򘚖beԴ QʢjA1JӐ](pF8h5kvbb2:؂H9ቈlQbv:P)[DgTΥ< aӸW~C:5i߾#~؂iN{ >d_bb[{c^~aRF}C *̞=oرc]]]>S!?-[vF``PϞ,͛zxx>|"))K{a w ..Xf2QLwL~.]}QQ1z/_7/]ҩS=z,**ޢz~z͚9r4f]vk֬|G6YT 'g9VTZg„ &L0a„?6(jԯWߩKon]6qޡF[CӒsb)N(iS -L*ȍ+ʋ/*HϱfY r˷/p􈜴Pv! %g"iViH0; I}!.]ޱcGz*W1ఝ;wSSkѣiiiԍHQR}qʌLoUec'RSӓScc>x/jz m{/555//gcbbƌ'0W~'N>m S=(>O<6)W_@nn>=Cm``EKTBlѣbSRҨƍR6mڜB I8mP.\s9`7o62CΝW\hq\\MPӧϖ+Wpj)SfҤİ{q$}3Y6b*GСo#gΜϘ13,,",Z5j (Y pbOgә9MV,8w<3<ӰaãGqjԨ9z(???VNZZ:uцB`f-xF;bʕͿk„ &L0a„ GPB4jШs^\F9eŧq'4WPTP//ⴂ,05.'#egfZ?OW(~A{yYCܔH+T~%OCJDuGzBoTthyɩ{ Qu:cZIU߬Y j֭4"ݣQ&B4TӦͩ30ѣG/T >bÇ{ 6%*UommI!F%EPÆl׮NmڴӐ4<?#ah#9Ҹѯ_ QB=L85bא!ZhB I_}ܩƿr +0+uNKDjTyg^Z6j:w*7W?"0F, FİX5jlҤ)z4hXn=ٶm;radaaܮ]޽(8 #'Ĉ6[֓ L@g鲒uh'ItC^й+GP6u*dY -VCdÄ &L0a„ &K/ծS޽-XᓽG]` N NN)K_nꃢS%XBr2,6Xr2s2r2cbrbϷ<(/s//nnLQvT~FxNjhfRPVrmfR A HH5-zϨ/EӐ/9@RВS~i:m>J*T*TT|Ŋ+۾PBwR!{)4C4 q wp4A?ud+ҁɖ~ D[6mުUwٖsPr5⅓̣O bB˜LR[!33~yNd=<<-3gQs D~n"C,vCZ`%G AtudHDYgfg ٲeʩ(n/%`PH nxEsKK9Ig„ &L0a„ vxzj\w>=}k7ގ LNK(K_Ӑ}[z (?0/>?;.74$e^(7^kE~̽|QHqNLaVt~F4$vOC2[2~i݁9 Q> c*TU1ISnTB-aWЩ1'\ڋjGGM@1"&L0a jժhѲ+{߹g IML.K$R\p8^Q{E9Xāxp//~~{wFDeEgnvrXNJ1z`}U#_ ؾHb==ifğb3OC@WQW\Ux.=l^ٹbjn/c/ہ-G9q`WɃ.6&~p|0a zȓG:<nyY#zK9., Fۏ &L0a⏈5k֩Sgׯ^}jDwRBHzrdNfLnvlnVl~NlqA\QA|QnlqnLavLAVDOC=ȋk= "s" "2BSmJ.9 Ӑ/R}"!9)O4D8?E?$?ȁ_ |vt5j2~>}u:P8#RE],֖Kutl~ 4I9w`F%EN ~'_ L;XU Ú?~\.~_Gg $e~{_!K8'G-?CƨHiAQf% ah)6/uWmo_!V.~Z4j?U^xu2HpRR?DŽ &L0mu իED&%fDgF?4^~Nݜ軹Ggfd%dX`; 0NCNC(NFl? Rr : I/жL50jժv]쮴QRfG\=TCDCR%6!V<!.iӁ-(C)ĦVlp!xD/ VJ>}#"F):\@3$?e/M q^t(j-qo+ԃ)CDy([/N P :%Jp)6"Fc:bb`AZBҖICF;hV8@ʴ4np RGGL/~JXZTLXZC \ aҀ .)ԇ!؋RQZVlF wSΌ^zɺ ?%eF%e4ӊ.'eJ~@̯(ALFT5jRukT' ʺ :K%9I>K)\j舁U֖k`0#69B!^`u! b% JʦdK pq\9Z%GvmCaժ3tOP`KH͗mȺh2a„ &LVkY24/)>,;=&+#nQrqar~n|Q~|a^LAnTQ^-שfZ'SUYu?7~y!٩Y)ֳ̤a;1"| Bs tR4D":q8 I#Ӑ.]vG&6Umڴ Xbbbb/_Q?hEGtvW֫`AFMشAfKBiShkѢΝ,X(H%&&N|ƭGvur@jhݺ:pJ-!3l˖HHHjܸ)DBlŔfϞÐr ~؈>X,Ν'30lƍoK3Cd@ڴ!Q!Eq0QJ- QtCBlPЀ5Y6EG^e0jy:@bAJ רdi''i֭I3fhxЈCH[E 1%-}0FqR cϞOfΜYr5^QvJ ̽5R+J.|' K:HC{۷@^.&UVI;) [(ha+_knZO>;d01$o -V@&5v#sETY8B ->:{ίU˪kW'O/S.y%/MVJ 2c={:+6V(E(WPRC t3gι֏`KtQ0F4'&L_}u + G.IJ:qN۶G3NP%} U DG ƏǓڵfY!Ӧ 掋O ݻ$'EͤZ. nvĈ]@axx$<g9rCyo~3j9lK,cAY/L<7gd8q2..!44|⥬d`x:q19IGA|u(8ٿÇa@@y4<{ܬY}}Y$Zp\Oƍp%VBH!b5yrX2.]PPPڵ4if8!:Do X`@JC\jC^4&L0a„5T֪˂-!)iy9BM(ʷXdEeDgF48)͉.-9 }/7(+"/ѧ!BJ~#!.I!:1BivK_gףGOXo:i_}u  JFnKG?pqŬ}[jCI6][Uj 'b Nx0jW <@G{;.K)g⸴sn Q*06o*: +i 4sGm> L(d`8t\>CS 0 TD3$=\tC+YFW8O< 1)1cu)4ȊABj͈N% B.Q%OBonvrk֨r+V=zLPP˕?i= :?ZTH˗d^u-2x` "-!"CPlBYjݻL8GPJd!ѩ=vʵ֭EA:@ j]Au:rz$yy_Իwt=z?gϞs wбJjiٲͫUk !upsȶoׯ_G|p-[bġGŦCF ^l+Wmڴy!E/dHJ n/)㹔cү)yR(}VŧN˅5BnGEloܹsnݺĀub KOws0tXn-ZÓԙY\dw5kb!^$пrϞ,+VGn޼N0qʔם])2̲ y뭹0$%,^Tݽӧ  ,yFr' L…wړ~n".n}׭[ϭSS61b$5k裏gY mذ T'kL\#G&9>}q 9pR>Ӂī]D補K}ƚ5kʕ+WRkWd?m'|AHlap OiPB;>44|޼*_3)\ICfjYFVQhy6~>suTユ )CEHvhB-tdY.0l8 й|PKs/lvjj; ,z2REYs /:uZPP˗RzUa͋/ݻ ͢!dƃr=<̌"Z5 #.4C+m @/SKW\\z3wL51СCV@4t00iYE+k Ej10CBB,Y%&g;9dMY,q[9"2Te~nmׯ?k3|ecǮ;w|=gϞPN]`C /ݾ}W=Phђ/BX +KR1j9ӧ5zX.D:l0HD!vgϷog/W"C޺u{:R9~$^1ĸifn۶})DpСPHȄi֭6oR:Iad@.::O{`JfҤ!!!p"M1iD?PF)xp =M\yyy^cnj{խ[~<AH0 e}T>nBYfID *2̅Abb,,-ggW|#?n7xPxRn%Rnj@>܋RQg$%<S%kݺu9#Z(dU>x/u ܣYAeAp)Sf:5ظqk׮ _ 6;W5KGD$yqo~מyY $v-[!F|6m?'?Mhx(C@[|իI#lO?G$L(1c&odʤ7Y`aaao5GᄏX'NbDwQ$+$C(oٲuDD+X-:Boot iť?I'W'6-B )6GIӦbZYɤbH@"wn2..]gP^@glN]3CblQ7xHHF>& =D J>z4h~O;w|$W%ŭoCQ6!?<2 v Y oq!NҮ\&0D'hL0 |gD8+C?$.rm?J x뭹,D5qo0a„ &~o3f۷mHONL*ȍ˱dX/c͊͊ϲ~+('4$?3J(4 3 ?> {vڡ]Q͵}7]gu;5ЩSQ$$$aA-`Gx9sN%"ug_'eK(c=0DEŬ]-EK;0|-. =bFL)uvԷ]tc?6mff6E/uu`VVBc`-g+X->PBpM455 1C2 .uWK$(JtbtIIE9 ٠PYh1i7ITmq888t3gB!0׫@>웩If6L f,eNORS"BqIKqE#)!jw399Rm4G$.hժ5E~~©b@j.\wZ6Ă3fBR2_:R ,*+6߄C6 ; p)з~_HT,L0z*);tlPg'2k#7nb-QX*''o7n޼l<҄R.3QQ'O2e ;0x%իT0?bl0{r={<`qIᾣ&|Vא!H>ȺxҨQc^{gϲHj)))uRԵkge,pQq 3Hg}m&elzyB]P r3[rH>˃K:4nPjXL{9-H ̹-5!2+mw<l޼%44t+W{v5j׭[{{9I NApyd eggoMOO=v$"RA-JlSLw[)B#L%'=z,+ DHS'o\zY; D"aY1U6cNHMM=xP*sFCbb,hvap;N<pqrb!Ci摑Wyg`fRX'6m&XnveV*OiH+>|`Ar"bɃԑdBUϼ! r3 ˉ':!|=SEE>F5ZBh`}:8S'cm۶=++{_>>~v5} qiΌ t2ܛSNGC(a}DŽ7,^jG?OQ&g%֟F I"!: ? 1Dq2p~wC=eC^Tl錯Bѧ&aG1"=()Lؗd3.Nըّ!c{d.ٳ2D1f:vo) Ѧ:=rrr(q ?13 bc-lHŎ/"`;dTa> b&--7ǥ;~СٲdM( c 7(ܼ(D("R %6uk}/S; 4f׮N"S0ۗC9o Qܲ <"R3˸ b?M >o~xm[s磜"O=ٻScFaV*l۶=qjj!(kѢ%@)_ IfT&TA&0SD͂A'/]3wHl0)BP$.QݼyESg`SYf4Mjf!իW?̳U֨UNŊU)b"7mzTU*bd1 K$I^%GVSR1YlOzdrPMfa5yk(Ǎ)S^,y)H>={(0aRvv.K{I PϞ=srIzi _>r L)]> ˂qkh,0;W\cU f@+k!11<,o&Vo2C'NB?lҸi/5ksKަM:ӄOMMML83g @H\b$Q~9FZ*V>y`Cg:RATQ&e&ɵ#}&L0a^]F۷&'XB3%&ؐWk)΋--nHQN,(x^ՂX@$/5$+% #/gt3m+@Dp8ixi1j$'#!FWb6:ݻ,,,ھ}9s`qgKƨyQQ1lX#CeW([(ḻ3БX`V 5lժ P Y߲r) +6Y$`c3~6Hѧ^<22lCr-p>৐`;HP^.q NN=%S VJ!`̞5==HH\\|^^Fӱ7$("Q K'c+xkGDD%&&QP!(ϕvTl4cZseGN9FĢb*7D|iɩE”DOBҥ[ߥc.Hرbﮃ~پ}b?KԊf$--<ӷxplqsbbrnnuPB܎`̙sXO3efLA6pq#F... sO=%K$9L% F QAs!`ʕTe˖]5^XHooS@!:|_i3g(޽O8C;B8/P "!p)'B222Nbֈ@!Q*nnn}Y<6t7:P@Vnj{ƍ_̱x&t1N2ۓ)De l|J  Gȕ( eX Ŷ4C)Em{r!|쁣GbtEP7A*LGzo.dٲ<xq=zݻD>|"&?gӊl^cO%t$ 1cx,ipjrN%&L0amӐ8[T P&7767+.?+ '(?8/n48pd%'iXvsQH =[OC(M67ֲQ=Ԇ/?fF2k3fN8_CFM̱cO%tnHQQ&ئD39d[CA~]6ܸ-N0m۞m+E_2ߖ?AdN('T Q Lj$Dܹ󒒒0l|fL% .~-kcbݾo# ).SPQ`C&))-/or2}OQ*9EΝ {ŋ3ž2G{ !G% vm^J/WW78i̝;Nbd=Pa?66m8ýRE_~` `Uzm#:Nz{@?ąG3$5kQHUz>x/%F4ɧ(6Na&q-Z|1b[4brU-V#QȲaJͥAX`,N觃̑NCɓ_SRۿJ;..[ӦS0 HW_6fQhD Ɂh撐A=ݻܼyK덅(RD̞=X6-Z#ըe u"Gq"NCZ¸R%cnxCz _g'O?,Z:@ZE$QcCQ:[K}sD|4Ue3,9.1$A5֘@!iK[r5 =P6DH2:%h,NLB!W, ܒq ز=y̼o޼gF;8Ӂ9t*|AqʁfϾwƲN$Bϛ֖ivyW̽Bς{uV#)7;wzǍ7T [ #đ &)2@G~GFᄏ!:{<>|7xoG;6l Nf$X6< y? 3 vr0a„ &~W`WےmM϶0'n^y Eٱ_ wGd奇gddfd|7$903?#Q(9Ѱ?x 8v2beJ(Vzj/H}1!ƱHBԝS~i|if>77s.qYZD-%'*cWu Cj`j!lA2.QH}T07kւ 9 !.>;;?W޲ekvr Q?aO(%l[F6aa: bq(LsOvE+a@!qQVU}* v-& uB!;dL` t؅EV/}B :Q؂4`h;~:qeV`Uڭ<5Z1e=RȆH񇐩"#ca[H!1"b`Gξ(CCé1D*6xȴR9šlqj!Y GGDzr'C!8};v<q^Q8+@WX-0CD*CP(w*C4^fR')"QLj/8L\ʧ2oK4c@%?CT~~0Ҍ3翐d4il̘q:D{Gzỵ5SO=*(lp+ Xlg%}駟E!RieϏ "8aP>ܓ, /W\Y h2~z SS Evؙp""奁޽\~ KyV4n뤋 ̗WE6$2)Ƭi*1gX6df]$d2'8@nis\|e߾\<7 ;xHƘe9p`l[:w <0O?[p"}EN]ІN1J^b^#ɀ0Opkݺ-v'N1Sg?`<y&0 XcL1 y~\ӧ&L!PZ*Ux0a+6m֨K]֭SGnJÎK谛KCr3SBs¬O - - O:$$z~hq` o<(D~K ~; !8 aǶF6:z{|lg1$5Ǝ2(ZhΒCzU-[ck.j폼PR-]<;;W)ݴisᄏ4S a,?=3m8^xIRlRüD͟zNMmjju'4*v/l`vm2dRfdd#QD؅'$$Qy.Aq$lԭ[ЯJL3Q(v̔l=)qJ&++ UEs`B NÏWɼ'ژY ilp7c s#Qq@(ضm{zz{kدR˱rج'&&æpw7ovYt5[|ln$''dlCCիgQ&K:D2 K#b`}|#($QrS"HCd /[rUHHl7n!_P I.ɪxDSZjJb:Cw̘qbޙP4V24u+|AAA_[_:},=z8?آ\9$Qg~ƽO>هԓ0P R7AS/_I8D\9" xYܘdJ e%f…CXxXܹܡ4PY s'$9$]$p˖wcL cLΏ7' >{)|*G(_]xXl2\ %Rd;0 d'}T!b.\CbZVlaaqHHV!}z0܉KFY3qq t77/~_yx0u6>x1+J+~xfw՗ňGE!6 u!LʹsXL"O s)},^ᄏ6ХKWX8),,du(Dz@5Cbg"qn;w$|1ʧ )jDIDAT nɧag>"<>XRII)<C<վ}G9Oⳉ'O؄ pxp0a=zhw'yai)! '5~^zp^Fp~zp~ZPnjPvG!Iנf<|QqR4$-^ N Y4D"48iH; aUu}Phm26j[hf}QF@0dP6yȪrh޼%[Oʆ޽WcʾY36?L餒:t<<8lذ107vݺuǨD "/BM3ݿl@!K86mQaKq;O\ٴ?U5մi~Q;xPcfF1ۃ ۷{S%U(V>"i+b0A?.Vsvv% )o a H2MV!R1ATM/%W>%D+!dL*|,'vY} %Љ8ܾ}ٴB@'qOV@_^(TFB'.C`~7Ą?&8XG!97XӐڵg߾nذ)===S@-';CO '}{4DcEJ %봨Ub%ÃBKR6$NiRqBK r(E(")P2崿GlT޾/KH =?5yD-D3%Cq'/" p*?0nMs!W #?℮ @'&7:8P A!-zPPR%C(XAL8uAY'JWFc"+|92fP$kAt A!B!H-Rؒ6ZdA9R_30b @Q[0%@G 45Z aHn Or._p¬ / c)D0 Ey$zyQ uG-G]S3@ t{ovJZv`!F"ҧ-@S9E;*k7fOtJ ?[Lr[;ܹk@ϞΆ 4b N :0/ "Fq(3H~HD$"QKy`erLt:( b( l޼FGCRHq#y?-}Ձ r"A # Q4l\J-j* !4I3,!y(@YY(]$С#\ 5=Q&IcT1A  `NiV_ piRkPF++Q`pJ$ Y+D/ F3# J` I C"Jl(qJKQh%H(42$DȐ|X )d؀ӐxDQd衅 l2EQtB: 0-/YfpI lE7.՗,PG/mCѥO\iҌC Z{ uI_7?Q#=]x$`Qb&XEZRr =(DDDxi7Xlnh6:F mC@h6,ҡ5iC'Q 2' j$Ru#@Z]:3ХfVlժյY}}ѭJ, `/""]` i - !ЌL:RĘ,ўKL`p1ӱgg0a)] ʌ#Hr W=5\җa€W3![fN+@NOn֨Q/?4&8ѣWʶDۉFRp̐AL؝.is8d_RhoZ b4$10#'/ R|, 1NbL_uҭ[:uev'_c~|kQ[4nQ>AQC%-6ڤȞ.-}:xnvtɊY EAKXx&y}χ_D @F@1_q0\fUuq=!: jUh]i@AaxqJ1Q:n]0XWx#I0DP08fб@3/q5w@f8|irLdb NFмD"ʡ]9cM2$Cr[<'<GЧ- Fũs PP"+hAÏCQb% AקGkHvCƛ+]<& -?Vֿ (kH &0OCL@!^JN"ӓӓR 2 2 CrR ̤22HO? 9mB78멇2xg= IIXOCG!!!;v6VXU>k7sbAGc@H;ڝ",*]j ȶ\OG<էt7¡U ʞl/s`~#(2l?q`NJ3 6vX:Zr lEC-o3A!AqC{AtЁrf@Q߾S=KCD` ". pIQ(EE8FD>.iF'ӡnQ1@\>+.B@mžǁq#d4hfC&ͰY@Wu)%V:Q@DաRZuW [ m(W>Y+a1--QHb`OF4_qh!&Lq`= bwݟD$&&e$\h}j`VJQHf46A}=@$:ƁqBo= JŕC4$5 tEu&ۀ6L\;\ig !lyYRZHCڬ(th7W@Ё'6i0E:4iyA,@KHK\?0A?}A3`ͳ6. ao`¨20XH~Rv:i l)dAK7ˆKPcHVă 76x3J/}l=,^}Z} *!ʕpRI&=J,}2ty]7m:Ii@"y>4dCTCEGHOj9t.]C@J^?.uWVE0%q + AvM8ȕѲX`̋A.ɭ n 4Ą?NC2/5z蟝ӐTxtbPhub; /eHթGRi_B@2> /@z&o|7$9;) ֗4D>J]ՋEUh|ΡpWvOϡ)5C=Bg.fKc#un""贆Z.Q({Jūp Q)":FEҐ9x~BPT&vOYOG KL@t &E"bN˟'PZ(txhT`TֹcaI\pt7nzWo<  {Q7oŊeʔ[d  r(4_Y߮]˗̜9J+'94Ҁ Wi/"]OZ}V()>77@.D -Vy$ɟXD'@WѼL)w!zč:r#@C: -I Gy9OC\]n7 L@-*$DxB<< &&O*pӫ_ 3~yrGw'eVMSNsFFv?3Av"Ȏϴ*i[/"pLz"< IK2"Dh귮2Y?1#8m坑Lvvҵkw9hٳ$$$11q˗`Tr?Ñ̞=7<8d0/ɃџG5ٰahٳGPÆ>SÑY?\ U[o=~n0aLhpo4Ƅv:\tH'N&A; |qB*zs"LKNv|;b:ŃƟyp%"ՙٳg?͛&%,\1U d0䆆R#4P;Ì#GKu2Z C~Q+ıEV$(G !m7ڵ'%%zL>dC =|ȟgF)4VMnzL/N8iʔ"11q B!! h!95$>db$ÁL0tp#G;O?>y7LD} 83TV;jL"Mf6+Tqи CN2h@~?Ʉ(+СӥKWp.X`!!tڍ-[K AirtjCUV=]ٺx*Ug@LcNYΝuNm9$*1w3ͬJtv 'p~̤ݮ]WoPNL:}Р!͚մis|A9 d4Yg+L.|Riڐ6*Q_7xqۼy+c5+Vm۶ 3>|Q&̗#ܪW,3̲'â:_7Qyرә@t/544ro`%|WcK\@D9vj֬| yA+Wtݻ;a+QԦAo'_q7nrUo5GÊ6G_x}]„!tLhk Tb??~9q&+?~1%M')mڴut <C|Ri9*=EQÆQ~4 |CHϞ=رil/9-qtNCZENC<+'txg Ԯvt cd zBvRW1ϸ,bΉ:J=;}|OFUBSd)!tkN-?]?dٕOdFo Q_(T'zDşě&0R)L){UMC3h)H_NCt)ʕ_SP-$TڣWBG/mSk{iDU!%I_aHK5*=DCՁu3?>USgw]wծ]7oSW 'ESS?DTV>=z _d0H~Fb)9$=TT u&16R &x|HjޥKW"@r)Җ[-"Ae5b(*yRϞQPӓDZ])(Gn|1t?TMAK)iȧȉ'ˑ@+-Җ[-<AZXcڞF!:kAz 2iѢ%̵F"u.D+O|q;v>xsU`e( 7lfZ-Ql!MT'|E0gHH҆EQiCPV͛wC@=ƒ-u6,E3f 3XoYGתUGײeU Bv-Z4 &q 2 L^UXѹo7<;u‚B"$CFa% {9Wo54mzsηm۞hDan<%ѣϜ9צM; dNh!㑱}ΦM=jc`2I^@=W Ş\/RӐxcj~H*Jì|TG9aI*+QC$#ɔ< *fZC*OoV^]ܸq1YQfOn:`@'ɋ/t7SliiiwRtIӚz/"#g``H-Bc {X n C(x9 %SMؿ@JJJPP@`R'N|{Y +P^D)l-0u끙ϴaHBym۶c5j޼Ŷmbcc+W>p`ýȺu?trȑ5k9rS֫˨ [bŋ)P~~-Iٳߥpذ 'WF  'lzǎtC! jN̗<ʕ}zܸUVC3.\ ]>d,3_t ^5k?޽ÕTUJJJIHHPJ\DLc*{#HFʭ'o ǛL& &bO| 8?_qYtpC,›X}g&qwǥ>5jtZСC*JNNƟ=z]vjƍw+W]vѓ'Og`2rh6ܼ?ݻ?_0hлw7nܤM7r子@߾}gO? Sc{wQ.ژ/`i~Tgbbݻ:vTV_zjj`5kvŊPIdFhp;y+Vf֭7`s _}`][%K[޸\ԩSZ-{#;J}Y׳gϥټy+$D4b\BY6lڻw?oxLFj׮0 MK= ]>&M1 }sYf3_gϞ'#Fb!][|H9vRDD( sd7ئ0CNB ;3`JH^衁g͚ShڴHݱc͛F~|:o n< IfgɣGjV*Eqf64&Mެ]V˯ ?ϒ?\@>Am۾_TT4vZ·"[z V kXb- f̘E 3D><9s6P-X`BChi3L%A0y͚5 Y6$I dq>Ӧn6zf]4k+Xxi0*G^0H#/_5@i?aЌT]Ӑ'dӓY)ΈTSV9iϔHe*oώxq?۞asYm;}@Fť} ʗ}NO6+G$Vg} |^Jӂ!#r&B;WFw p?3} Rh!s܈G{ӦMIHI'+jҤ]ʚ@MP *hI&3rȖ>JVA.y9"%">q[jl9Oq LF*LIȳqoLLLZ!96eo"ÀwÐY+Ni?߱Bb#9r$\RRr~"qAm_v=icE)cuӦ1" 966+$Iy0ur̻!_fRE9"Eωr.?K0yT"tf}G3g̗54G?~6E{͚Ci4qD*'OSݻFdd$+W~ulvCKф /_BG*rv{ԢE'M{vN G!ӧ8"),j\XDC+@9DPc,\}8$*W:tpBYF*U;T4@'D2e ޹sD ԩ3Ɏ%K͟i%^vo?L j}K~+V8p`hh˗ >w\VV:iҤ<|XM8FLڶm?jh*1}QB1u8& ,:B`lƍ3fD ?|TXY )%`\I?nwXvO>Yp_oTcnjGҥrMuӇЏv:3T~~]CBBf͚| 6(XUPqѢE8̙3tÆ ݹsgz -좌:A={&&<׮]G`3;Cf'++ȑcԴlqݟ;w. ԯЫg6~aeJj"x/^bg #F𳲲v1cƌ[!OWP>tЕ+W:th_Z5'Xmڴ\crss?#F=!aٳem{2GSO13f\nfM&1BJd 0eIHHXpԩ~{T O89))i}si3*fR^}U jҥr孧-g-ޟESg\c҅\<6!4$S9 r'rP^QN:eE˲gY-y.KnFVHVY=@ Q@NC2R,i)9q&̮_Ly=D}Dn >,$diT/.RTPx6i$0.aFi䅤WQT3D=IO2GfLFQqurdߺu!0۷xݽ{ OӧJL~F>rh'Tdψ>CNjtjD;$Ex뭶q >ݻ$1"d@Ǵ5kA('C4BiȷhPX9C7i 8̥~ŋ с+2$R `HȄ=*WJn !S JwjHdjy@FKI%5kѣjݵk[JIRZ>B)PN-!!97ZtLJLw]n6(7Pjmٲ  ŷ2A']NJJw^\\,AH #F4 jժY!CϟO%O;**Ĕҝ[TcRQc;y<޼̙QIwCaԥ|H`@4T2(O zCdN@ͤG !Ȣ MKKOMuRfIhu:pNF+eª!y9>i4R)!U֭njӹs5jPP-YcѬbbb!TsV\eY|;w_@+3K7V:tΝtr+&*zU*3gx%젭8V,F• qUVRSJ:xǩS?A{;@\-1bQDEͪ0aBJk֬jjIJ{~E3gć}z-#F%YMl $X#W|0p:¤E3_W%FNٲ~eԨ 8hczbd [OC)je-ݻ6(V@1*aM C(yR`$ذb*qӦ͐',^u60E!9Rݡ[fޣ=6t4dv0idǎt4͡Vl~{JLr[3aod!!5FǤO``ۖ-[ի ^S/%&&.[  nK~3lH1ǒի<dR4oZ,ցkV^Lx5"xر'Od^=gϞm۶-Gd2uڕM>|g4j:uHfB_$0M|EVLw#qg~&Mܾ} gμ̛7ooܸG^f( E#jP1b^޽/X1rdo7nPdh!N)5M&ӂ ~CRϝ;4t ͞=8=]RZ w5~RǍ@Lfee%&&e?ӂ_0i-ʧQҟpEٳR7RFΛ7dH,@,a#!aB `;x:ZڴiSۤIj;vܿ 88dƌU*ĵ{サw*T*XqxC$ $҆g߸qS`` & J]:^QŊXYBbŊ+V`?f2=F8Y6+>2dhbazv_u7b&ˇ[#T۶_V 7xc#ed_t:Ν;ɍ+-!0·oA|.-AȼLA JMMcߋK>WF`0Y,Vb)QmM(@vT 'h"1 r+4Ӹ&VZMl۷o_5ko߾ڵlZK"tX/loQe;fA{eUڣNP_=))i[Wy!կCO8aÆ!;*"W8$hUV}Ӧ,.]Xi͑#G5k sNLnӦ-fL fZ0:vD?i% 7l$sAX%dcEdD ,\A~3o߾#Fc5Gv޽{G~@d9Wz|Zc._^ޒpS'ROP9cB!7 y^D U,sWG0.Q0p~eBihK4*Tx]-oH>1VzA?>ʟ#ӗzHN1Mq=R t(Tq%2/F-8^QqY2SuO oQ$]= @NCҒ"r2>54VcӐ?_e7nVy(qӦM_uV$ toݺxRz&M:tQO>~Ht !}l߾cBBұcǩШOA%pxߧO/p.HȦM[( ( + $ AyLС֮͛%)V2;8?!܎b2[r#1#p +P %%LII!B"uv``0hܒ~Р-(DxJdmԭ[ʏK?p>g͚5yiӦOA׮eAd퐧SF5OtRrPd*:RJ5&wyuTS/EE K>|$ E.SY&?|qHL$f:fEW+UG3&44!_|Q9 ho`T\ #1cr۝;wuV2^P+,[`0 2 (ݻCc}Q^jN<ņϞ=AC+nܸ??0/;wݺuϯC=WFhV;=,.N2 D[1w<q3ñQZLرc' /D:R#9rʐHcWWtxH-?6mf},XM(>B-I.J7j;G?dvhpe{zdޙ4XiLL_FCA]v_xϏ]ζm),Z ȽA r,p޵k{=st]}@./^L}ODq N-%K}dگۢ<1BO5F8t-[QwXlڄwh|zjժ7n8/9jÇ=[k֬Q.\B=l!UQjx}INvC'A+CPPi_vAڛD)ҴTGߥiihK|sǻSgV)OUetRXO?PyN4NGq/x+@NCdKz-#ٞjR614P_0g;͹YQo q{H^zdYFi)z""iHiHe|"ߢڼyڵT7 oܸ)%uSu6nL'I6i= C$ QL2~3gΆRMmڴ6Czア4 AR||"I3D g,=i4$H${ˣxLq&!$߰aC:tXl+W~ѵkwz oP:OOϠ>A9 ܂T0Q ˖-w:Opf)idN\L~eoHLLfRr֘O?nzBHh1 Tqq sԄ={Yne5%ڵkTFOMBUCFRثWK 3EKERЖev(bƎG\R,Vb&։j]ԇvWj" >s1Zj*Uқ5ks=7|pLZjԨ1b0gϞCJM)Í$IQo0qC$L0 C>B|+0 +@3Z@Fr@& 1&SÆ /^LTΞ=fj H1B~!>?~SO=5gΜhڸ駟9sfTTԄ ~˻!&| Ay 'Njҥː2 ѣo޼-SFQ`ĈQ҂U\N - dc`+#ʕ uܸjTҋgyƍG̞=rJ (PXy *B8WCYc2>D-׽{ϊ+-[,00pС!nO`0 >V=W}h~gXL'܀Wp~W;X5$^˯`V"W'IPqkM-G_iԨQǎ/]LUF ->> 3Y]vk)SbxϨQ>L{l1eQPY*M٨d 05jݾS.nlVh(Ѧ@sEh \'Է oĆLؽ{ŋvVIWm}a’%p 7p_>{;{pB.~uj/Z0))i%p`@Uٓy@m-w7-ZiJaz??eG{]g^oժU1w}עE MlG=uTV1KWNe \Jl{ RBxܹTJ{B`_XCڵX]tad~cǚ6m2ǥl0^|ӧOcc˖-ԩ]'OT?Uy9 "E+ԣU (|0{)9c}=QBa)O@2 jO  [#֭[9*&&,&LAkK `]CHHp8~t/A({Ejj BEr GICVF C9<&v#alB͸7SjC ztowĞ4kf-=ɞ|sjpJE yvTFzrb~Xiܯ|wKEP>J|,E'ѤI)rr,}d $ :3oOp&@lRݺumȹsuwQ+$$((~"Uԣ'PM:*<Ķ0zRa4 U/mvhPz^]ѐhVx­(ko1:,66ĉwdE|-[?˗/ !B?"oĈ3, )NX7`?_EU2ac Hbѳ>ڽ{/S)j3ϱՏ]a }Q^^x矯HQ.YYf!!na@( 4` 2̈T}T%'Y`2JPeff8p~'7oI[,-[Bήvgg3fD C~ok2e4`!f)|Ν;uĖ׻۵H[~I0ۗge_cP@?NNKK_l9&c;t ыV0ٻۋ;wS~M[nr!jL:Y=z􈌌8p !|z޽?<޹k,Seff[gϞp8xFj 3;vy r#G  Ja ̦lb@|  gȕ"PM 4GO) nqWz# oL>MB ٗ^X:t $rsQ nNP_hb $ Ex~l/!۶m' VbgYNl'|2ϣ-e'N`u'FG:}CWtuXl$6,< JWܖC9<<RV8T4\EzXއvO4_Qb[+H?}YiHY`% 9f|)!ݕ_ݭ|i=3%"#g; LDՒGdZ2"dEɁ=@322 !W2Y_h$bHեh!Iw@ԾU}\BroIM4WomѢŕ+W@\Ad'o%c'}d מ"`(#z6G~ ewPSrJI|GzJʎ!+%]c۷#vߋ'MG:vo޼ܧv$$(OAMnwu/h$:o ͢.N*L|؉7nqK 4CࣱBI8}̿bc&L(C8Y0e: $H.pŪU!'bm,7\uN8Cuoe 47n~@ xRЏQ+uqY$L+#F #Mα#)f$DmxSU NCa%r54 /SHA=Vߏ?d2_1i#޸|ѣGCCC'NXjƍYX~I&L3Pxω'UVx5k?^yU _z f͚GM%_R2((n/PuE!R{PKjQRuTbXU f؈n޼9bps /P0_Ǐ9fՕ1hO"={ o9R~5ԟ=RoQB%={ 9sŋgʢN6lTJ5ʧ[WD (XAС#24XTXx 23¦*{)[RR2>z}{{OCؾؑ0*''_ {ߴl~M A9;CBBJRsbBl]q7y.PUVbʔvqC`m 0h)ʀ~B5OK_0ظq={(PX`a ( gܹu'N|ۢE+CÝ_9wrr~U*W7waB|?k׳jN)#_Nbr%* DLOX-/} RW<)yӔ'+)BApN dz$2d("ːgqP1ԷMԯZ0` iCC娖'( (C`[EVm*kp, 2\l9D7ЏBZ# n0B8% F"^kHb$L hN[O B=0?b&CLDxΒs3$IAŤ0D. 2V^CCñ76!J9T 2)]vGTtb,F1_7EA%: QHE8Qxy|Qpt@'8ݻ7B0LAV;vԴi ^v?Qb> 2GAk-8"lq2UYj߾[)$hDsOip8ޣ(%&NLʖ/_1ut+L037TB0w86jÐ( G[jaE$7lDٯ^Tc"\q,&3eF )֤ɛ;wKV[)x{׈(ĒA!hc][hLƢ'TD @BE(rBMghPݾ}9@ ĘG eX/ C"!!M3!!/VS ,1 {c0!2"gydd4DL`.ۗLxCC﹐H[!%_zI_nUk ([P04z]ǎ]Й!IzSm2{^:=mvP6T&ܡC^{~a>0>B lѢ50x04D+!G\6mȌ?0el&Pa7|jKPkQrVSӼy+$a#h H-*t!!oܸi>|=}TJ _&s箄0TW;k_aAX`]g~w! 2Q&L ~PCEP ݎB&+Tj`a$.4$hŽ d0u0hşأG B_sDj芣"ϯ;: :(CDi¹9 y8MUa( - m)5AE ~oW+$NCJCxdXiH^n|3r> yd޽ݷGwg8YNzÚlrrԣt o:w7ҕ(_胬#ds]'k 2#eD@ k˚jpX2찦;̮cjɑlIM8S $[St&J9-"g%r\LP7A9Q@qS9 22ljY _S!0eGYԇJO5 H4L7{;r:yM[23a{|T|x-4(jcR6c,X'ޠŠbHO'8ڐ3m44tYӭLPJ̈́!$# *ѭxqɨ<'ŏ& %4Ϩŭۚz^DhЃXMyyС>P}ĹhA+CK?~llk*U JKJzz^!Ц K> P4j7aݺx[nK.GPÐ!SҔTm'& :uV# F =1uE琀l}yzBII,!W4dVxՆg|w BU*x|ôưvm1SdϻG4C:}aH'`ʡ4<߽*C͇?#o, RwZRj::ěቜQ@vg@ƔpSUӐSV>ؖ 8$(.JgȣBޕdLٳdkf5[n<WkN%3RT9 QN՚vg.U1zb%etS (?(l-zHٙhTD$}$ FgoTQq%Ȏu=iȯ Ȯ^y1c޿q˕Njq€ڣW>~uSZu 9KT9BCCǕ+_Lpv'oyK=,_q(dмyKz (9z9rA7 >@?~k5E$%r(rxA!W!ݻ;vp#.<#ŒIHe8,YׅY5aMO8iFiv?Ӧnd۔wCt4ĕlr%+G$ } 8h(np&S q15Δ~&|/qEU_IWR5ر3Сûv.ܪIJ쒏4Sl ?P; Q:Kv3'7:(miȣғ9gT#"ás<-/͞eZM΄dcC9s)3#gEˌRN@>>>=t:3ԕ+ C |wʔiFyԨwDY2`4$AD!)8PY#GDpD4+liO) 4l؈0maa9Tr!VV*+Q[D{Cصk88G<{}ķ3gf)҆!mڴc\t5jԢAs[3B?'jc2[n`1\ӧP5۵pÉ&Ν4h:u9zxjj:yT^}ZVAnU:dȐsI|jxxDyʭ( QD疶MA8!h EpAmaEaUΈnݺoݺ=p`h釿?{ZQ@zSni)S - t8yըQAE3g:~؀r\4t"HA/^&fw%%i넹hHppvm1mj_ 8kfr՜I?b?v:4jԄ~dFDz[Js8q=>|`p&e歨!ЉwQOcXկ~}Vk59sndd$Qڷ(_P_4R9A7%ʡ OCʡ~=н{v’MiHZ93Œfq)uR0envYsFrjKKQo57M|=KuO9 ߝ˴L` [9y.W'xS xCJ\xr)9 $mOU]|6k~Ǎ7?uޓl_rif$%7Nn!$ڗӐtVx24utRwyO$ 4CRHFZe4wEg͚a8l0B.@B$LHB6mhH'@>M \E Ť !D4PHJJCT,Ydr+4D@́4n?|ULLo-TQ O!V1JdELuժՠaV^K/s7j]վlr9D[OASLz:Qj.]ܽ{w۶mHVkáz\i h@(eqAxwqq oѱ~ `V``dСʷnĉo##?hܹV*U9/[JJj^}*U4n8:slTTEI2_:(QR,DU[) ITԭP.Ƅ~洡EhKCL+Bh KU[Yt ց`E54~aÆlZTr`*1GАZC#NeqFi޼y*Un^iTZ%Kͦ#F2XM[E @KjU|ȱƍ߄? ÄYՊQb+V8V]Ν@K A)E% C=mڴc曃oLH[ mMG p{-f`m8c#Sv˒7o~TTǚ7oQNڶ];~xǎ`*)0renKy9C9C9z{vn4'DqVDKF%iKψv*niH^FD˦$RK")6G1-!<+ŔQzRHUՈYȊcfĽL{~MjUZQ`5# ;_I6X3ʫ"# 4TNCbiv)H_i?)#RS 8nz[LGQԥKWp\5Y BzDD&M۷I-$R^~Sk͚pӉuɦM[ OIBEs UKCp!=I TbTU^D!9Rɭ LOķqtBۦMSKP1 E(USGt(  $̙p8:! dFp?h]@ -$Sƍ"#S@۶mX+/^i \MO\꧟~f::dF(8',Aôq&DDD>xo{~~~ZZZ~}K,y֭_2Jv] ibg +W˯06j&6;ݡC'a;xkn0#;{, TXy2 矯˙QLgpի\(&>Ӥ?^;s'$$uRcSQ,Yl„"7l XKQ&9pÓ QFdtRoTP5PO?sr*St.xrttEKj޼% 3}TAf͡n'/^&Mj9s6ٹs GA C2i"B[.]atP2STS޸~&DIΞ7DWCM0]olZ9b!=Ponݑt Svc<8<܀3KC@ժ!{AA!0xア-ZB"QՇ!toߥ%ؐ۱c .a2D&D&1u?"j*P+GX,fuԤI3RB޽j)Fex1jtnwGUL=  ph߾#>:{/ ĐϿtZ8X={.aӧ<#Fjٲ5j`9 `&u2K̙s?~{:22 ӧ̙3Ȭiit =y/ܖwޱc9ߪXʼyد.\8cO?<##8.\G͆ij̗̲&b8k0eׄ }W0_ǎ`M>#%%eobX쁁LĉXLkUbe6f?+ 5% Y_ݻ?<1@Ts{z!ILL9r4 =t1н{O 'ZDGd p3}BB`Ȳo6˝={.0.y_~ ^jѢeRRҢEDAgUfKt:r(r(3(? )r@c7FX=<1S@$=ْl5=ٜe &O2TKÞ 3ѐL0 A, Y t${"l?d@o(/|jCN௴FH !y'+I [j~~F))IzrZ.66J[HȤ8={D,<8\ɛ[n 70${w KQ&1e˗ 6BL۵khmڴ|M &CDDԦM[@E1aHN"NAInܺuzSDQit@Z,6aE_}N'W^nGaReӧ7o @ !BbKf-aqThx" #u3褖4 9T} cǎKII҆y߾o7b U.yBBNHH3g.2r/[JO0--'fzʳ;0f\Üݽ{/zꩧBCÇq.C `취sX?8dp}!A`Z DTP@bāc>&-wZ_YYn3݄_cKLӀٽM|'ۡ/d=/v]C I:ԩO?aƍ3g΢ԡ 1Lrbj|RlCSR7Kٸ${ PXO#Ed]hIŷo9|H:(߹x]Hډ*[ڴiG)Ǖʂ}TPIֲek*^uM0CNdk׮G:!.ݻڀ;88TB/QЉ(|h3?{\ <)9 ܨPR<Ə ##KR  &JACIԩ333)E  { ŋGnB(T( \7qdQG^T`<#,q#ooO?d$LTt¿_7L1&cWr31Io_۲ekddJM5jvҥ۶mc"ЁNshfINNB%`R6l Ѿ}[y9x0FY;yXJhRq/&S^~}ɒ%oߞ3gjaI+Q* @WZ3"xܔKp/ϲs T[6ijfhQLNj-Z)fH=Pޡ~h&LY Ⱥy6?"׿=--=..e6)QCGߟaFP >sG+zիWW_i ֩]ucѢ+VAsQ@OOA^0S/_"覻DБC9CAiH9ï+ߢi16cl)!eH3%ғ)F[T/X\ʏf9|0bq&@gLK4g/w8-YSv4(gr +p? !k^)iqBeL!5!<>)+!R3גIē<6@JJb*b{d|jڵ$͚y}rpȧQӆJ"jc*TtXABUN H!5 }vbbHAQ?n(ӹCư%wo۶=lW^+f'nZ~=Y.\F4)~C(A DŽ]S'ϝ!1/SAҭ[J H(qe(O{cq8!Lڴi ڿ)bo%~!DCM%k JͩP[DÖ[J&/;hի`Zx)2)@hB ΡCC;{\j#Gy&xؠZ2ݶm;3ex2)g"'"BZ`1=|:G0L:(@۱cgwCQĉᆞpff)>Z>V!'XO?  ? *FTz7Y6[Drcٲ/] SI퍆ϐ۷(jNNC1!B{ΜyU\`)+V|NL 3f?yŋPWoذ *:Up|ılY,GII)8 %~7[8{BÁ-g6YLSO=| bwl0Ț0ბ# y-T,=BJrҷ0?>t[t 0 Fb-()(k)פISN (ZzKVm۶Ͽ!JtF*CjɲzZڤT`ce@XX4P> _Xxaf:It |L*ΝOl*rL ޽: 48T0iԨ 5+ao6O0VP?[:B(B(ZZZЉA &,vՇ:Z LZq~Z rB2>[b(CB)xbTrbBUs(`>Bm4أC+!6X!pvzDW;t%̚5|+9xVS=zX_+22 0v,d QK,{g*!DP(}w >9s6$ /s'1Op !щaN$P #6СCɓRQOp]6[İa#p/%k37ǎGu=gg&M>*UF%`cb NV%, 3P"+]tE[T j@?PV7yGgT%Jҏ2d[(qg/^ /ٳP~&h*4)ѓ R܅C'Z1t]DOo~+`RX8Њ:@y " ?q?öF az$l]iLPgLU^`LPXXɓ" 5~ÓN Q+ ٻwe+h;Fkc;pc1Sp4D(NcF>?n`Lvrd߾oPj.9Bm}b"!dTЊ.qNAG^"tJyN\N/t:22rЁ]TSVZԮ]m7,}ǡ5p yLߢU1K tvί,Ɛȇ!a1@ldxB!)֘kHM0e8iH\6Z,#G\[ӖbIK4;xժI&zRyw_jVnF9ISF^Kf1eROI,w_8|mjj.gH5f<ַRkI?wT?e~$)(Hz{7hTl9*La*6m5iI1CaCEBLCE m۶# yUPg#e64UY5Uܱc'ս{Oaqfg6m۶3|0׭[ʔihNFCm@zTI'Uq^}P5;;wԨw( 0oRSPQ|WY IrķhHI ŋN>{ytZl˕A-ހ*--}Pqm۶쳕TYRӏjK|(/|* -dQ@RQQ}fÇ+O$3~-4`7nEEŠuG1yѢ%F1Ga&wxR@D3j ÿ4_7l(|7:u[k1dpYsp1¸ڵpC֡ dE(0`@Μ9@gd UB%*F3ӧ*j&fLBhw&@ >|šC*<&3[L L{'6A 6HyHaT!gV̦D6%%u"_aR#9 bxFMXPiXϞ= +d\ =]ddرd^d.X)HAV>}N<%d՗6W'; 0APqggg[Ey4:qd?'ЩW"KyN\#/sЉ+sЉŃAG^WWQv͊+P'm!W |K:z4eTboZ hC= 9Jͨ?C(4dgj?4: رqOCukgWVCH%<6c_Q^ O K68,),-/-"?=z&r/&߄|ť|iӖbNO4._gB+ɐ0|r䑗nVK9N䥫_|Y k!`t걾7ܧ!Rv哯~i-_ˆ K?KZ``p&҉nL 8#FB1< Cd-^{)33l=rb2TL B۷HuރXKl$3,?2H;C4YH\㄄$<EԠĽHp  0 !rN`ff6!Q?njy3fRL?Tk,:OCIdaC5lr!CSyR!o9Ȋ9s5hR" C8s*UAE?O2J h#T!!3gΆ N|ҳg/td]b54| &cHFՍ Vdo!Nt0Y(J\Ey,r=!>zVip OtXpJH4$T688q>) "!i: Ny@lPADh 2eB=V12DY9e:A|)܊ܟ_ h-5&)PA#4:U4uD>bZi:\Y8=TX*<[8sm)P1Po38 e"TEn(Co6F Џ\1 &'0+>ac)ӵkwB+$L Jʊ~daO@#8p&Rd! (Qb١Q y,Z4?+ЩW"KyN\#/sЉ+sЉŃAG^WkשRjZ5k׮s>۶}w.>K> VӐ(i?%:\CW/? yޭ;"̡ʩG!Z>&ih[3QVck5GbOͤ(?){3"gF>ȊgD"y3RX' =r?ě|+6ʯi#n#ޘc}R$UNCSIU*XRQSSTр z@U>k54T&wr$[xR aQr+ =CL'C 4t[R 6ԯ5CPaHFK'Q*8QCE?OFo |1P6&\!-$QuFUw(#``í(Fx#GQqQ>|4552 @ &Z_s.8 B@7P Ca58V+)4D"c5$2܊eNzhp][nZ@̇'pЃ X|J(=9m5 E%U}8("@> +1!ng(8ҏ "*U8ql Q@^)wpOCwCvo0GBBac5<i3D)! D,1vSLr 7eG.[ּ4[nH{{Qrґd;h'#JaJw\ɦk iIg١|Q(_>)+iBKRe*C4$MvLK`\V$X!&~r!WYڀdt-QM "FuyVZEBpY\0E`h#Ecb/ p^W?,b0G -C"h  h>#Ȉ4%l?0,N+77h4O6*FAD |%t B#hZ?@:࠿cF$#CJDh.B_r+ʣ H8P2Z!K?W`42o0UϨ WA? A\T_$rS5zi 2@? 5iZ?WVaΕ 8VLM?‡~NniU#iCEQA:a.&qK[b {|"]j OB+ bHEĤh' "W@(hd 2Wmo BC Ƀ4Ԑ#GdHh&vi:0U} VSDБ:2AG^W%A'A'_֭ccO' rXs<p?Q7}(S=w)^诠bQT{'8]}TPox|b.|s/|[J: )V%4WN1:PӨ%<'N"WuQqʹ|U(Ja2=ņnȮmHsP%FP%4j#- DY̑VSaH6%ғ-[ÖbH1*ٕߝIk#yꗃˌ벫ߜ|dCKzũ|)-,!)q8#>2!Y "(\%eTU:A|!eAr~zhH^ H:.ңqn!RiC"]*ϕm@ Bؾ}f͚1IPA[)rN%Q@[O I?lԪ!&]ȥA AHh 9 a%2mڴφoQaȿpAW? ik +B+kӊ<h(8 pX)C ȂI%J X$m:a !bB"="ZtrB^ #E0FFv:ȧ<4VBa(Š/:|`L p4iyQ! 4Lz&)W0\P|![!mpULv !B+h=Ȃ󅉐0 BikrմCtB"|ZhhIB΢rAqhȨAp|)tʐ8p[@^#/te:q%A'A':KyN\Nܿ ^(.]|"w.[<Bs7Gbkxp-DA[%7¯xHyS*Z]/E(0o~0VXq4'1,\5BU{@7@' h<<4ʐQA#{Sڞh:Ku~n/}< {+޼:Ksܠ$PԨSq /C*lK{K;"PpbT-B%ZSӐRp+i.oL| OZ yQl=.(+kMkupzjk5!s8`5ٌfC%Y ȁЌ|i|Fi+$w3]G!)aL{ ُ=x76zgАQ*gȅ0 WyTs)K?i h(4dth@[_'QE 8B0sȂ 4YA1 6S,- ze :qn@%4BW&m\AHp;r&>{PK߇VԿ 1]_9z+R-L[r9H!zJb;PJ@*qrKyR:nW*Z)_!nȧ|~OO^]P+ !ACÍ'wҭ[;YoG[[f]1j B1fGcQ(c]]ޘȰ0g!=ɨL5#EȌ Yʏ'YғY1''ͦ|&iHU>2#lt&qsHl} RWӐNȣNQN 㰬@@9` +=Yqe.[h"i4P< . vq)v=Q@KkDJL@XHy;/ 2}aam4BZ_B oip'F/ ZAMCz2?#i -\qT_k/0=K: DC{jh@W ԓ0hJ sb␢S֓87,S)..[RA+[ =:Pko%ƴPVmi{Ch[+MaF:hļ /K,kЉ{jҋb sEs:1k͚jԨYr7}<(]> 绌//rԣV{J^NC U x9,NC|ɋn(ޙE^"jUG ~HHX:U $@|i02}ozv~jCÂ!8 o| +oD  M O1Gq8#ޜdU?@f͕lMK)qDd8)W4əbv$U3%ńFFEDEGڃiS>ߢV=x`d<<{ k%r+9ӣ94'?c ې@8t$*¢߂H@w, Ohvvc@7I|+844L:h4t?s2EڕQqF|=,{>4=n`kذɀR ռyӧϞ>}<cO?kSزqΝnݺmv>.O7b͘1Z똗5Hs^p?I1Wf`0-_BvNmۣ|7H~"ϯm=u$PT3W0Qe! 6ׯ׻6mN1ÊW:tVcۢ2A' b, 10b(-bڴyTۿ5!:LWeR4iÝN˕k`,O NOrЙ_@™-'5y;wkwilQF#Z=ЉSz-qn٠uMs%K?(|o;n(')bT)u Pۺ}|ݩwoJ|"!?A+=Kǭ$|4E.T}x^DžnڵdCm S c5SU%kQHcb1QHUf6` <<l 25ܹc  fR h3Ífljp5,n̡a[MFe%n_ QCGY qQS~oO!-1R97 u)c b6[?S1ɢ !asFA8xO@1UE46f`eNSVh) Ko6baa7oz ࣿQ,a?V1̣ٞ'OFC!: *͞=2`Ҥ)/r Q Sg(^ʐOb@C8-Yh4X9ڼy+W;w ,=|BSC/f筨[o*Hs(*:J_144|iDBQ%!TVz 00x?<%fpTm۶}pp{!Ah,3/* [ڢEh>!DJ[G)X7h7v6*Cj])b+mopAч{3ի2)zcбc'.]|}J,2bpdJA[u2*'eN <9@K|: 5`&Tqs~м jPFf{HbbԩA`{2SPC8ijذѭ[wx扣)zOMM#Cx1=zbeDCD-CB ԍC¬kn$_5k &r o hӦ͈O|Dls RՐz8|))s5v:;ֵjΝػ*U\fZ_(-.|owQU?/Λ;*/txNR&$E(( G_xK㢢 uAxӐJ“Kovmg@觯9>Js+JDJDŽn޵hWD !Ɛ+ +ۖ`cxj1 !VH!`ݻwA;ww @#pvح[o߾rVA!0SXh0BC 3VA_"mr a !Uҵ_v+<-4izƭd'dqeϕN!B!o5<*aH@ChiD $Cժ֏<"-=PHq)$2*C44&-I_@ UeKI^WdS@!vWjvy i Kç,@IACUd={.%TTJP\[CC~4?g]~bh\oݺ i/T E 4DC3fƏ@{7D!a"zJC=d>m4I-(O%TBN'HqHIL7"4Y Of>=4*:ǓNS74Y& C_aS_KCӁÐ&QzUn8ן?)e5d;CnI8yVIIɟ~BPdDC*`.עu4 y4Lޠ_zFzC*.{'U"69 _o͐0乌EbT0d\n}PP,Q;rge4*QsRdHTrCy*z̓'OkVXD 7@&\if4ҥ+ȠQM p c8 74#­{_lYj`N?Jxf;5jԤ@7(MNix2 01@ DtrEiPC @2*Ch ЍI_qq CG5벲rHlA #@enA}PLEzm{i s1u3UnӦ͏?y%J*WZ ^he?_x$pW?G*R?nUbzWos$wjʝ|frNR(լ[B:)PI"\g+xK㢇>YP YۅI'P+F+o8SV277+0*n=S"WP sP!nes"J~ݺ۳{1h W#!Aw,a׬a-AA,AMAW 7 !CC)Œa`cpkh!,SP]㭻ہ `ӝ ӭ 7o+B/_s7 t+Νaa!fj5X!fsf&"%AOxqdQ!!aÆ'С0o3i'S.p?JdWAA99FR)S1#Ivؑwo ;wa𑸢~u|rjj*.^4lzu׬Qg~{r//_ɷn:tCZfA١2 "/؅cǎѣSSC> hNQp8F>u Ο?w0$#Gdh/^dn:ʷa8B̙矯h"Oo߾O2@}O:xS? cǎ}64!&l5&b#@HٳoU{\GPfV?w:q]0ĉ)Əj_zm4*W"&Ws&7Ձw܉Ǝ}rj 0k͚ B_|_]λ{ V=<4hCݻ P 2 3FlY؅7o WR]tҤ) #7 C/ivwyzu``Ϟ',5 `6bА w܅d;2nd2tjhOܵeK6ݻm„P1S?x*? 0s!W5k*#*˝Ʒ/4^.~ -[:Ou\?ip޳ `r.KJZT&fo^Ie \'+,^㊛d"y Ak; n F8˜N._VIi$Z5g=q~:91T'y^&*s*lbX<F`0ָPӔE>}kza+s| bh4+ Ţx,^b%X<P,C@0PP9=^ X,.pzvuy FcEp(h(8H&{Gz*۞󱗰ŋWȎȦuٳ? v$Vc+"+[>{%%'aۖ]MM&b ͛#7?,YraÆ;wؿ{LRAjG C4?u ]KlGLCdk{턡CېmM8p=5TY]T'!fkPpH23ۂL5|QFL&fW"uQxJJJ =v P5J⧧iӦѣ_eжm[9>`D+Ի'N#%ճ_^}Ng,n:8S*erWRP2O/ lٚ ?CZR~ǽp@WlJɄS x :{-5`@Oгg޽D֬Y+5|0r]VۣGfaBM()%$vnn>9}!Kov } q#h5ȥRY|&ѯd8pDzY\iڴ)K7nx=m錫ᄃyFn :bR Oq,Y0J'O~0qOCx2$2L]tRG;.޽WIe1Yl=~{uAhg_P9b)L< l9)"!STfj)Sa!"ʇTu`h̔ݻhg6'V\KI"hEiM$ wʀtAXr5vAa9b.[ҥ/XX`YiY<ZhVcwڳgO^^O>˖sl}B~5`)Sd)#tEa;7yUŊʲ&.K= y˗xP7ЧbJcf(ޛPa+\\ q2߳g/CyvN?~l ˖-cƌVEw(Hc{ӦVN:M_A_:EeDC:1&K0zt"9e;w.Y1 3)wII1/Y@=tccF4U53G].0~k۶Xjz2M.`2sB4g>z_Py`(6q?/  +bY[ O"k„Iw~w 2wGEnctf 8aON_W܎,\-CI&Gy4d=8y(¡u/,t嫯[o/\ԩSÆ [nY6aUÇ2wlLL7rYɘyLoB& 3C=E ( {"(/ p~cN_9ǎ?TL1:HHR*Ms|Șڵ[F4㏑<L?; kTyLref6Yty$gF#p$. X"6F\t[ne{]A? }/DHsH<BH(EBDi >e-V L6m @0Nt;|>W4+%=%WNAi99:}vH;ȾuݍĠJPM  ߞxhzE#Gλ" Y۴iCWVv>/''FdlD0g%?!>f?2aެY`0'<0A~'AO"-[el[w!:ٜd uO( 9?%;1NB\ n P| sn1Y,ŊC4k֌ V0Kk֬A!D[⃢b<RժVc!MǏ'ĥD(@ AD@$GzPB8Eԫ@=q%z0H<a#h"g#h"@߿Iv"TH'7ϯ\2<G=WqQ ={M>bŊb<O<쳭[xhΝ/4ߖ}̚~2eT ߿-+1.7o>*!FJp}K0Bmzp@=3} adM[ja{1cF {{(4h޽Ӧ1k**UjȑcƼQUt sR˗`9ЊN$Qٵk"@oDwCNBF*Μ9СCn1M0,U lAAK/zeK ֭&N_=i䢢"JC2% _&Ed-'841zԩo(XXT)WՀu`tSF f 3䅅e}Gʗد {!i޼eN]XSٱcdrʖ-7mt0V{01'$0.`c !5bpѐu Z'0zK7QCBx%X @ *иEP|L_ N8T q⒎;4YgR }/^SҥBo9 c29?6Q&8&LUӊ+%AOxR`:t~#`]tpXdwrA1&@U) 6FY[`rZY.\ށFG:w\|Ueee".]vժUPCY`u 6ֲ$5d^dASdziӦuO2.F [d'qꘁet`ز}!; Vx4$$~e7FhQh46lpK%+֭H ]μ(rhiht}vSNDC[VB1l9b#M,Pg2ȷA``1QgϞgꢑ#_Y@u̅<ŊPvz0k)SćIf;wfɒ#!*ƘP/G C. Rʕ3.駟n0rdٳDŽBӧDiHD:*55]4?w K/P,R4x4V ?` DX4(F=ޠ=4[&ds]Ad >jv"X$ػHAԿ? ZĚF$jlBD dOŲ'l76=/d6I hb_rK3g7o).Qܹs a®pb8Ɛ@Bb^6mĉ.]t0Yp [#sHЯZdѣGΞ={ɓ߀VYl6-YȆ1F gϞ LJ#"jՈƪnzɒ%;z9c_woK\4&KZA=z;Xj>}"z4֭;%)+Y("`B"QKo^4rC r˕ٖ\t߾R93F=<$K.d=דz뭷K*UիUV+W&D")) 8,/26F6lkk_̤>cb.<7 ka;vbԁ\6*7_EϊMQrҥKϜ932PQ()SA˗j5ׯ5kYdd;ܹ:;2ʕ+?wG,h&2|ְl jPRx%3,ĉ ^|dtI{EOb% ~agpKq,Q&IϯW&KT>o{/퐦*Ug7P逸! yyt [}q˗`"tqp&NL jGEҿ4؊Ç^ y+=~FSc/l)E9` ޛڂX (/'''//^"'Ĝ`0s(0| +Ra' E%4/\]8%ĉibeFqל9sY6mZ2EʤISȖe!Q0hJ1Sԣ .>q)bEtE~!#aN⍶:iI/3< c PϰYd5r]X؃XW DP3fz&`rk6[ ,)pN6Sq:C$p?-[@|e׮=tpeg=asd?%z4QpT^LFkzMv%[_ Bzix 2:5jb G !qT0A1{+Ce}5j(}AyaۼyKd]! 4ɓ5o4QΪU^|qHe D4 /d5~8TM_sT `̘7Y SL^N0sl pF~wI+=QJ~Mh!T [ "Nj_}u6Dw,W^yΞ:tСz-([61%O>YH+e <$я*Ȩ(/WjԨQ4{ƩS\p1u626FCz ϼ0^|}C% ٯ/]] yn"sz\JnFz UwAVZC:,#.[3 FA@/^do̙;fCӌCY 3kWɊʜ&CO.|&y\X0 ҕW\Ւ%Xq/-gjf9hbN$P&r4$''~}5"s3GC:0b(`!Əg|v@f ABFeLXt!>Z׭+ (b*nQbmJ|qfirN`5wUq5 Vڲe [F X*q0'[K qtErr19Cc8 ?Y! icĈ4 y9ΦMR#ʪH;/ngc'T2T 3[8G(¤ýba0д`B *D0ge|2:t$;H$i?w<ۜDtaMY3YN9֭ٯф iBavӭ(l4Y*K !ܮ]Z5;J45+d_1\?0l3gβ(O_ '>+#J?ӐӐܹ[կ_CB.E̵ . A 9 pJ4)8Je3"&iڴYB医\2Z5L?qG`߾||h2-™@۶M5/kg*+GQJaIV>i$Ay" ?[Ϝ/KUPQ$\p czyG_̈́:)ۡma>2즠 bWq_ .hԛl3ȁWNAitO7B*H$շ9-C?߇ȏ<œ(OrEDocƼ֮]zZN$!w_m߾b <=^{mܯ}رcɤ4' ***0a"gw(ЍGG%bTHD.jAhEJ&$c.˔)3eʔ0)#΁)d ->qQK/SЭToݻљ"7~4FW_}Dg T[o~Üb.CPAr ,wW!ӧ1/ݻwW7Nj=#5|jծ]C)$#a`!+Q '.]/Ks}Dlݺu("ŧ%aEwZvHhȚ*J =ծ]GQrL[`;?xT={>/EJackedd-[vٲex˂xW%}?~^z͝?Vsu>lA1U'J#K EO̦pٳ߿R2b8`Zu 73E 8GTW-k) M)ӺxR)R0SuvG֭(B+_6mv:-ZHj,VxnޜH̄& ^,d&g#d)Fgj4E鸜K4`H%`GN}%E(OTG4mӦMBN&>H 6B?kw"O`)],7nO8 70G-YI)L [آj^^!$ը(~.(PNl[ CnnPܹs~fddBmr+1̹lǐP T0/ 50Ff0`hHdoڴ&D? ԰@E=fIwп.\Ky * 8;W ͛+?j}A7VHV`2kV]Y) C kM& G1Թ~7́ ,ڵֶmgϳg"b,)َsdڨlgϞeCg|3fhoGVC΅ 3A `Q30}|ZY凙,UV(OL_;uz:myǐ!۴iRNDڢEz,U=[ݻhѢB*ӧ!iH/23,]"!ʋNq=ް(߾ aaȱj65\ڍ>Öe[Ț3]b>k<`9,Vf5;w{|NtN~îtZi&#y[_d+!6bXng.K/eL%(1_W6ToS˲Ξސ!à{3G#!_ȉ(d #s 1(o0֭;;+ŋ-ZDTפI?}DZ7~ ;';w5jmذ/X>ӄ/%e&!Rt̙sGvQO܀ ̙Ĕ}j d#Dr$tөSɤIS<r*S^O2}_!ӧ3g=z<שSgւ}0xx)ł]veJݻ73(/>_h 2vÆʷuZݮ]?J]hKq%,V$]'ksYeڷ@b駟8^'E_100Zf_ݳgGf1 Agbu  ir_G˂`.hتUݻ0(.cu2<+аovދgзoP(tKW4iݮ-nؠ#'"<`@3o -j'-$>Ν; QB۷" g (~[zkL"L`?2`VŬGHt4vҥ˒Ӳno Wg1vo !4h# u!Cw0/pEg߸eaPlbYMOtرWyu0={=R`D g=x>6^b 7nܪU&H_(dmA+zTG}|%8q"? oۥK3 K`ByQG[dI֭\y)pȑǏ_x1̰a#lL2؛$iXD4?jL?qoNeĸiǎ]7gфX, 8h͚0ß,ԨX_{m,l-FСÏ;κ hNeժUnh4M6\C=i&NK (e)$,J"\zzyiﱀL0Z˱Ѷm%%;-Z7n33v8:qaXB-8q2;UIU L\H}w:v1 .6Gnq2w.]fA1x#.C3Q#&lJVfLI T}4 cǎ%`#&@"$c먁\!ۍNC0V A 2HCqR!Wx)# ?Ш|y1p / ׯ?qDXɊ Yز5MWMta:ѡ i+ 6mT\bMeo ?c7p۶mִSWUU3jժo̙3G熞ehZ6Ǿ}2ehNҧ!iH/,YGX8T #P(/Ciq"IDAT౛tFmMey KϒA{nĭ nƪw;.e3v j5f=NLd2MAZ\vG3j V3q#Áű+ Wn4M؂[͌`ÆMC] aS$Swl.D O0'܁"g dqvS"aQfC%$VعsU^yXԩ|+HCjΞM,B KΤͧ $Ν#ePXBr]K2IY o1`a'@I7+P&7/jŋ$Tm(ӧϠ<9$9rhHB=_! (D?(OɳfO$*vRDhѐW^%#"1:!'l"A.ngCFt֮] 'NB a[j[<صo~bG_ХK͆D.ރ؃Dd.\`0믍-]\{BjUʨPXJ ύBh cEaW0\z ^v /P%N/^bh> qu!DOdK W'{OO|{2m۶#8v1՘1x2L lAS#eѧgϞ|K>d"T_5իծ]C%%Yx _#-ZoԨve]wr&O3}lّHG^tRٰaC&#a=2tgyHi6(ߢV^H! Pdi⍧Q!߫)c~<Gh$r9fi3{)kdLnusȞsG\.6&i9,ZUq]vը3j5fa96l6HUf YacjuzhǭCaM:V:!_I,7tBĊJ'K\ԩ+!;+{ఌQS@j׮#T-[< @VÆ h$[v▸_a:JsԀ PXgȌh$̉QLYV[KDȑ CH,"M ĖddCx™Nr8R -ޠZ!(FOԂ!dHrEO*1nt%ސaC(- >=t إ2%7nҾb2 զ A kNQha#niРrÏ?^aT"c4LVZ Ș${AWq/r M)zIg#pH Fkc1S.0|C=Y@HڤISy2gn0_&8! ]r4LJ$>D:v4dF$-ݍK9g iM2`IA@4ja(A*@*"7 V 98Y=fZ>r6W5b"M,5!M *) DY&(TCZR!QF %TÀ&M(# j2 U -{z=ҭBBYO<)b"R3D9bD ɪz*xOd!OLL )2q`+‡+@E/0$M4QP4ѕ/*1DY 5`(j@$@ZЦ JF)8&L6HJJl0rrpl,^DO:D7`JR걋o A=%. +0C&ޓ ,Z4 M,ܸ8G6BETN4@[TEPd@vϋhAX3+A* 3%YX @ƍ+Wa(!ejTYȨ c VuԵփhYOz8!1ɭ K7d5k?+8J  2JWҊ'`{Jq>n\+伣sM>UW+g$^Lr+jHWv,A2۴iKo ƒ*i&Tdx3duU7iHˁ˖, "~_Eng91'P8{<6a:䴛Vբ < q[sl>b,&CŢǠtzAo6g0-hZdoV`oZ5 Fh4fj]ŷސY&=2#/a4QS)guQNõTMrh!I(*XmR,Ób-[Aj,Zd6]56nB+?84%jPjȥU5HQ;!E ܋ԨLE']"vM0K<,KyV4Mx&>d5npP5W5P!âѢ_|t? -#Fŕ/)S\F5 4%kOTMdq MWJH!NlABUj*UJV܈U*eTZJu,&$7oR[$׫[om HByXQju&e]%TJY"HZ >MLRܛB"@%&WÒ%\.8c>d2$JQ%Vzܤ^Z &e@{30yᤚ|sr 2gTYr{o` .!W*7tLT`ޜ$;Mkp})몁TJ ~J%@eT5kUIF%WYUz`?UPPB L۫WϧH<߹QڀwTPJUV*[\R+-Ce]v'O۷BAs+^aظOCҐ_df6^|y4">o+rWܮD=ޘ$B?rVb-vjd[L.zMg4b6Mzh+U5ٔ7nVPP`6!Fd;G~РיWf:֨7Fl[ o{ɝ; ; :8ѥK7?xSڵG_ ԰2 iAdAPD~(Đ~4KxJ.;dȰp8J?A%^sU吆4%Zzb?Xl<Ӟ1dd WƍǏ\bUdž@No^iOAjʡyrɇ+u@;֮}_J~£T*T+-)~C4$ i@ffU˗E`4( GsO|?UuڼfݨVi5;fFo7.,BAo%X.n &vNhfpQHl7h٬NVgQkZ.v|h;Jn-?'omBF/WW~k`78 D L/ 6~"&<*52h5kZ5x4AZ24' P˨\~zg 2ٿ(`#:tP7|s|f=@@$ ?4032*&>*C?pV }Wi 4n\JWJ[- 2CvOCҐ_$NC#h4Rܞwnw !4$ ǤuVrv겘]V3NvK^>?`0LfnXZl)_q2M0 aw`ijdY-vcR~ cx\h[ ȕS5t[*UUN QA/;z9 if4 3+vDcX$ ǃnW-r{="On4RvٝVjqi ͅFb6,N]Pr.j5[mVkqk4:hZmf4Zrr :S2vWh4]N鶘%HSy" ҥ?96i+Iuo|ɧhUi%"KrEp\[FͱUMP0+W\ p&-WI ML*UAHXQ[p ZŊqªUk-Z"M !eHTK< ga^Ma0\p!$J: 7T>}v}UH(|بQSΜ;wr|04hiӖ3griY:POxS)h2MRڵPX7n(o)`2~(@+4ܶ-LBX\ieZn*smgX8\ހNg@BB+)P Tr+e9uQA\AW)senl",_>z`Q6Hӹs׮]WlyD+O(oQh 2 ۶mg2Y0#J|.M, iHC#&ȨR[} ֧į?-?C^~V^~V;䫴UVK2;iHkW^ǂ1!?r{=/ !>t6 zׅٔé"jqXn'8>fÞ[۰%;;'_3Vr8 ZYShhtdm/l:T$áSyB\4iFUn}(RAJԮ]gAFJ )A24@R WP#dC4$Qk(K:Gf$ВdR+'* 25Fh&T0n"%S%.FR_)Iz Z}NN#`"V(HFMHX `HÆF-[*WfWTVPASwթSj?* eeo׮mv1|,M;vǏECP+E("h[ϹR PF *vֽxoO35"V@4$;tԿ@No>a&RhdhE"W0۷h;.\, `\jTΝ4tEr(O'5-b\EIP4V 4Qɭ?D-L>|D([J0֪$j 2, 9HJ4 iA P.R]={>pǯ߻w_\J!iHCҐY'~~}dUZ9Wxu]r!PJ{-, AH|?HMVXQ EÁh$_(G|ްx]br>Bt=Vns;^ΦXSyvi+XLzh4*oXmlt:l ɬ<4&ٚՙuZVc4dLBVqlVr r)C<`/֭[tN\2%F 6G{LZUOԨQSSXcr B͚)QzA'^(S 7T [jk׮C!Ȱ^%cUhљ+L& QXT0'hL*QhBLB|BA,!RO¨M6=  :u6mڜ[°c ݌9tnE4:tHX*a+h \/K=}h(Zu2M9gD=>lيw$RDH&lr<tfsX EX(S E k׮"gP&'WDaHYhBGQ8hFJkrOys/[<@X ֭t4Pue*œ+e"uAo=̚~0ի7\r! iHCWx_ŊI_\*w>iHIy7(H ڕdL&Q_V}=,8Jo5fߜk/ͿoNC"rHξ~ժeW5njs̕1N!-}q4!3ʥcP4Eh,Q/ܞ";pD] nWfuv{AoX6ff`ЙLnS3}\iVsF9@3)/\2yy|M:h Vɪ]Vՠ:qݹC/\O;oΝ;~3%C#3}PTT2u;WT[oL.Y@CᥗFCBVn+W߯PرkڴH$dOKX@e:u ϝ;_W98]΂ >zY2aF9%_FMrr/^qO8p7" D-hH%M#F"*NtkEÇ37$QOq hM6+@Vnncc"DPÆ].^_?ƒɏMQ>;)z\iС'|iCeU 3gB70\g͚}a0qMܹ}WڷȘý 7dhn(5p`!GG#"9[nޜuxB5` <_b;wӧwIG kӦ-'NkFy}vȐa6l"^F5 &G}L}HAH-GM>R.]1y<^9K ZQcذ7+Ysk`oy!,"k]h t>H5k֬pONɊ)?sB;b8GsRqiB;w]ȑc"EDv}v˖'j1c^ vo>{iРI)&acwQU*mRb *  eIiJ=Honu8\)']ո;/Wu/t^U n`s{! ieh$Ģp(};pE*¡"{ݮh2&dg@\6d0fZ-Wft-&h5+'f9.Δ)(Й<͆[ZӶl2_I6M)?1z ߹I]/^H6OvD%@"GҾn@*?BjɒelK6a&6mڞ?̍S䫯>no$E kԨ٥K7$52hdkHv欭[V4'(ҥ˫Wݶ3Hl܏4xrMIkrфLrEKBi.ʈ#q% G9s>}Bk׮Cʍ&HV2E.y;dsZ4!mn?8vx`DLhk׮ZUyi։xgΜiԨyD۶Ės' Y?|BdsIGjpOGԩ/%–$ǮkמzC4hȱc=z{oT00M>))!eB=GU@9s6TԠ0&[ -[J8A}C ̇30tpkڴRg7n/XQE៩SAҥ>rǎ]&L{zgϾ7ߜ s0f g<-ncʀ-qM}>?A4#L,m[Ve@@Us+Ia8TpYɄ=z ]N /p`bE^p(! iHCXfٯB}ۗV+<䫴Ud(կV<~ eI/i-|D6hVNCR$D o'>RFh7TC[: E}n4!q$ ģ;cE`8y.W:Eo #`UbXFASꁈhkn.á kE!s&f9.u{d q[N YyyM7mڒ)i5:=4&崄C+ Wi_{ɧƍ@zL!Y4)޽ׯcH$]LLUr3Xb\[fmr IJٲe+X KIި곲iV50j֬;#nPY&[!& &իJHLޛHϝpG~*?ˋ/H$FVr (ӨQ T\M+#G>}aƪ+Pq0߽{/n?˗{o4g~С0Q'Ϝ7DQxw,T@+:h\U1ľ}HȱΝSI.xcG;}ܙ3fnMyOܹ[eTW_ć$.\>}(vMΘD1^xaBuБӧ JĜ5kFr2/4ջw_8 Kn~35FϞ/8|ZЦ3LbKN:=zAS5rrɎO5!ҥ˪+WrFN=zp;vyC~(nh8].^3t:QS fj5Shfl0tFQRa:-&^o]`1-~olinښim94Y[rl޶-W5mZ5+/k֭Y[,feF}3o/eH؆ v մ[A7P ֭<`Ю]{Rtjj>4&L"U&oY0kvd`0 $J&&ԓyfg$I5T-Zyy5khtr(C+ )M4#裏ІaXqf`޽{ĉѓ[ k֬}&k@IڡC'eVAr{̄CVptu6d܊ E:"֯X%1x)Q/>}~ ɍ7#?~"z;virB1ʢ$] s FEZvzh.q-ž}FO22*u5[e˖'ӆ/``)ظp]v-$G} 2jFj0]fs7e;vY  ?_J@)pXzM$E R!/4ʘֵ>_`ݯ>ѣG/zE\q&#t{<ѣ@`]v+rXVVs}A4: ~yy{^ [2,?p]Lw3U ԐqBu4,ر#}*EbՕH( iHC~ B| _9'Ur$;ƒ=2468 Izi߷1މ{hۿ:!UCn4]Ӑ[ƫ/}Hh{<(=E@ \a;E,'NC&܇?RPj bh Qy=h岛F^k1S3Ũ3 vɡ('ndj ӐM_r敫6mڴMSh,mߜ%+'''@ck&]r r<r9o$$')׬Y{M3n@Ŋ>dԐ;={ܕSO=Uoܸ d5jԄgz x5 D7IgGbVVv^^M4#7o>)+i0)h2y mӦ#Br؂]4aEcV`d[Z GAϪU Bßw-[ "?&4d֬!D=j5jԇM4ZVPqOƇxر޽M{eʔ)ץK rp 9sѣp)eIa O4cƬO?=.ʈA@4 :uv8\LS cii{_}#G]>|7޺Rt+*Q߉4n;wE2jݻ@+~2&O~2O>TX\lmv6cH.8S8p=^}u"k̘ڵd9HT֬Y+!܂?0dĢӯxoNo~v?h}pj*Uf?8b(K.;l<܊ǶlNA:2 dgoz}r6@VF/V3ؼ9 )!L4@,WD+Fx߾/M`&p&JCҐ82OtP_!_{fd([*^C? _@]Ҥ|%Ap@NEug 5Cφ׬Z"ayoȎh< #~@$`$, @p[vc; cyAht: PhzAo(O5vY- Pmfq؜zasxV/ٖ%+wMK[jӚ57mܺmkNܬ윬۶ P)0ESWz=/#qdSd$`RI>hђ3gM8Mg;vDgܹuԝ2MyoH5H NwϞϷlي鳓&M!%#G9$m$qEdnhH?0`k5jZOO >CN .:w MRDX5j$ڵ_&$3psRYHH׭p1nI.]GCQcK uև 7ltgA>kp4hz̶` ڧdɲ}ݷUL%A1c_Or[fmgFS.$+W4xƥK_LF-э&*UyŗKR-ƇWP%?oE+ՠA#ŶAн{[:u5e0))rueٳzb LW32Vu6;v… Y`!5 ~)BT;v|4Q&ڷHJy䩳gϓBEf(Wу(@ e*Qfs^|ɓ;]VVgxsIrC(7mplٲ%'gTdD!gΜ#2Mi+ʠti!&~ً/Ϙ1 H>["L>t]$v ѣ&LDGfy?oǥKwӧO?`I8/@V/O7 _|_:xcd4A痏9+"zt '?yڨJJs,.+?8X:tL()A=T!X 7lܷOD 5fJ4Ddx. !,*kK8MA,u^Lؾ}!$ }vSg.\4sܹ+MLs.!Hp v)>aEO~FDZimrKֿ@G6o2''/Ǖ7zЄƼë\z 8`TBE49x]{nk\AZLr:˳! ! iHO_ٻ}_*- (9͕^ TCҐ !+Y||LOcR nD &pIbr*f{ҹP,a3[F5V[P1)sk.qحfb6tzpVڒ%wƭW8gofgoڜi,Fͬ:;7e( 5lؘi I+9{6y#[l+@B+-[jժ5̭q㦴RC̚5k‡+jԨ)S@I1 m䩧ꉶ Ԯ]5ZlҤ$ 1\QURe!G"P#B <ya"X۶hzZT0`(&` PV! SIS(5pDJ @@ptC  %nbE+HEC/E<]m<ӬY {}I+CNZ*1J4_ 2 5~ zAz&4j+HJ|EJ|SwAK**?p i--hH4edT&HRs-WHmB*OApCiHCcbU+W|$J?Cgw+PWiC^q]wy#Ji? N.r_+1D>yry J_NGuٷ"% ߀əZeې\} }nܞ>g{p !`(QT=^TF#`(<ވp(xjnwuFTN4F֠+(,i 4d2+Tv+W涭FlO[hش!+/P[۰q󆍛 ^ofk,FAD|ߺ莞P+) $ 4HG )Bɕr POzJ[!lPs 0qԋT$TYRM —M{<3gVv+\pAj- UʈtU5PO0)p?LoP/?0ȥI- H8 (PCUDRznLߨQ >߲eׂ)V@+DB. H=Wanb_РzpJOU 5RU)M B[i2)Tr̶mY/Ü9G4܊JD$^ &!rhMf! iHÿ ؝+^SG,]F(eOJ C*mǎ~U~"Wxq4gӐP(M<+DA C^_Xyu/"φia7L`k4y9ZMɨFlcl6y\Xv9Op;y9y r 7oڲ~B-fCӦ[6sPh3j4n)*)wDd0pDԀ@+CH42BRDUsUȅHԖz4¿ _^d] `rq6p JP)+xrE7ɢz ;Ǿ}WxWiTQNRZUa^UĉX>iHCnҧ!iH/φ,Q)h(_$NC"@  A6^[ɨ3Wj b8m^5s= 'd^\*l7\V|GBrBФ+pZ~0ƈ؊ugStҴis2B+*JF,E&mnx]&pG2rMF)tvaPr+=[HW]r#j5* 3YTJkg1H|-c >$BK4Q/I*v@-V@TR1$Xu@GʉRåߥ#(};Ih2TdP L+@ @VHC'X$G t"XU0o4AP]%џ& ԫT }($㨀8Vmt@PL↞,Ѫg]rnRВ7T}9cG<伣G6Teʔe1ZUy4NH$ iHiHˁiȲHQ$TEp {!/ar yut<^i5h i8-AWxWiG > _-W\ *Uʫ͓AӒ5o4B4$ i@ff㵫p0 w z}|P .vX:T?٢sssrsV.ufEﲛNm ]Aʀ6m[tœܭ9Yڼl.kE}Gp|NKm3wiHOKTJHAXNO>c)WFMbVX㒛TR#qr%]!lXa-+e-8%¦UR5rT@(e$RSB7`^Fڵ{Vn)hX0N(JM4ɓqh6[*URLC?<+UҥK7{]v6p%_|e(iid&[uże˧ /:v\Pyw%ݤkRovh4[~Gbd`89>s(zj 3H!J*n|qfoy OhB ޽ɠNj̘׎=zS01CN?i80Ch .]AR - _}j'N^xksc#6 iHÝiHˁ6WZzo(bqlC`0i٬ 6^-T 1ss^v횵y:Ml2j zjrA;z}NKcnìuYj(I46e]!5u]Dő@I,td+ Wqlg_LeVI Wj(G8pO~ FEU27Uz] %@'+ $j*VہQ@tB2hzJAoU[1 V+VnԨ i՚5.4*Ic3fQ CEO BArnQ + $y>מCBr*FMBe/ dS(L:vSlAeTdUzz䨤;v~zb5̹.X05mPa F>}nL9  3Ͳsﻯ4v׬>ӧ,U ܠE՗_~dNj/LZE*ݔL(EYPHR4>\Sdq%g^g^|`>DlVOOOY&gr& 6Q&vK}ͩ}_`Y*N @:u]B"@aڴ?;bv͔|!FrZ#VB"&cf!OyH@NȺqX\?gϾ'/\NO8'6l-[eVJ=E&M;NP7)VZQlŊUv}+ܒK j[;̶J(\-)>\i-R{oF8m׮^r@YKJF# T5M&sSx7ۻwv횼Z?*m:Wi*) M!Ŝ4! w ҧ!iH/23/]amk,`3[\.(D̕gCgbL.j6XVu֍7Zzú yzd0贅zMdtZ->vuY>G؍Nnfd5̅m7yVYnWÔ$U]߻=p>Ɲbe"`A.\$'Rp@^+?) RO M\k֬]nfZC4Dh|)pQc; "*M7i޼e^^^oDyy,_Mhڵ |U֍*0<]Ph ZBU Hڶmg4sWWC}2dna>ȂDQ$&JĽO><daHPNyΜ/ Ct*T*Mp Wr{-YYM'jNJFH&ۑhذQMqHWZFR NR"\`^zE ?DG CzMDpH}PɀdH`,6 ҋ/vqP4I*()SsDbӦw=ћt%U v8A-ej,3za+KQ(тtTq X֭'/̷ߞ0λX / n1Cz &a cn1 CKTC3kժki|[|9yY <nۖhodlYr5K+hQGɞY/(6&.@ 6r2}9|bUϻuN߂>-I9|aj0!Ŝ4! w ҧ!iH/23/^ck,VdtNolv܈=tZ#,Fբ mڰ9;k@>naAV3 .rxp2[: xc!O5f]Ӣac7:,ZU붛Nl6MN;p cq"Ͼ힃</e$(AC/^X^}b Z򩧞ə3gYavCK5c,Huss.]NxGHJbŪ3g:t[4srX8&M 5jWpBy$jڙ3g$ pDs jРZ]pΝ;v8 s5X|ѣΞ=^~oUߩSryvMZw2d!3OϞ=OFJ^2:tBaF$TC-[]jǎ}zyB1c^M5G]\-V#&AzV^KZr$P I C0"Q\i!?ǏH SVs~orB%Ȣlvm}vd D thO#SgΜs:ݤKSnݩvP%b+Jɒ;v$^RZAѣ9K%gB!0,x`0Z_bmiڴ9T|iRGhE@@In*SƍLƮ?n?3eʔ)U[K~~A͚&ݻЕo5BL9s6ӟ!ZRqq TVVhȂ9eʛKDrʰŲ OD&ަ &WicMƮ 3s*V~h̘1p\%+1z+.[L/YIĮ٢Ejg8}"L6++CPLC=VElܸaƍ 6Gk? Uĉl?d`9ڲ%ҭl z >,'j!>>y$T?Ν7oRvP}$u]r!P!Q*Ϗe-@ yҐ;Ӑ4G:d0<>e6ZVg6mvH^_r#GQX6NWhܼ|!fެY:QrX|^euX60/: ZcaìyA}F1ڭaڜv{}ѐ(+v}{K|J|w_9w;!UP&h#5PfM , Xf-RX ڴy|W^VĂ[2卯Vpԓу=L{Wy-b2U1'2+W~ErGD tX^[, zlҚzU4zMAShV d#w&٢@.o ,fM&0_o[v8퉟x^O4-Jޝq"+!19Q~ӐZj|^m8VI2K@&;x0:MGA 8ԃ@u6ҥA5m{ϡm۶޽{_ Q  DXuk~x{-M$ڵg㜷zHI: Zٔh[rÇC>-Z\\dT@J4!%dH!5j"&d^S#&Lسgĉ\w[ F#huGߟVgcBm,2Q c8'8R{r"zx`„``A(\Lq&\ty…>zuK=*'}Df\ѡw}JJvEI‰򐣡tD VF_0b RBƤIXL; !&T ^V[HoHSA&S[`jHQ!$[V/G-޿q|2Y0DpKʕ>}AFǎ'$q"v"lW_}ܒrck!{%~۶ܜ< !sk߾g|'O_\t9(/11vqH jVG~8ƶi& |"TP ! YY͚G$+VB[TSV'<%L7~@ҷ xIVFryȂJ*CI~pb W_y@zвe+O=␉'B%K.+)ٮ>!z#+H謺7#Y+' ed ].I`jQɓG;wSgy]8C.Pí\r2vp8fϞM) AcƼFjڣGʕq8PZՐ 6 ? u#F/ >/=G TL؊8[*˗[oٳg˗/gkWf޼~zҥKć/5,,8 W_$d7҄Ww͚un$塢BTJ<7|7/_̙G9z˗wI*C|cǎS2Lk׮e˖S5W\\hbG}pb4gMh"66t&nTȕzP KV|.[gm۶/=ubOp8Juҥ&yH?k,6;1X FnanzcVV6FUPiժF (GU=e0sl׮]ziEgh<`xO ڵk& ޻ਟ4B4! iH/| w~ގs{в#dq.rDƐ؊0x;!a[3f,fNq|PPy<$w=֐ 9&d6u&f58fAk[:s#[4x>1D|qew;6i$^YⲘ6붅}gw_Ip_Q`W̻3գ[NC|IF8+'N0N"Թs?"&:|(=L$V@ֱcgJ"BbVI*RFMb'|F޽7ނ-b:uOȥ,jH@ ۺu`*.s%ؾ}رc\J:u or&IKH/:B?m{h۪U&?YXפI3Vj4 ΁6rK/y',3@HKLP3"h k׎)O^Ӷm;9Iס!+!')bRk/@n~FTu>=ۇ۹s$NԐ33CzB.D¹o߁A T! 7kh4Av0}={gA䓅i$6hj @h4&B۷GW' Ja&buH]Xtə3g=\ ̮]#&}>0ݺu'9sfŊW^?>zQQ1d*U222aϘ1 |Ők&h{}w:тÆ`@@z*`Ç`/j< + }Hr\q;bi4w!hlȐ!EKc.@>:`)3WSOy܊2ɧ!رuo4DN+'B޽TO }._twh!ݻo>{'kNٲ嘏^ac4D/ԎHt0ŢrO6tСVZEEE+WTQ~Qat`ѣS﷿wLFiX!ܹ+=Y"Zv͚u̵[x@EClܳg/[QXdܸ+g?o  fr 9 "HP3b".7VιrID1t3{׻eJ;tC}ϹٞϪύhٖ֬-vȑ#Y|Ieei/iJVmkv3k@ֶm;, lڴ?FB!?(6l7mBPPLyD#Aa:&.a> ۶m6OʴlEe /_K~F"`ӧRÃc(ر|P0>|t7gb4DR?aæcǎ?;v<5JX?~"٠x&{{ef/xW4(H?2D}}* 0G@-Ž=ΰYWdG>X W%RD=11[E tС#x8oS`ENq gyvر9(Mzk!=45ڇ`=7YvZv=ΜZuu-st}_y=ҋ 褔% -ZUG,={.qxƌM%wq'C{ 7yowi̙3@ W4ʋ$ %n0yy6gt(K,Jy.W^ظ{iJH,TTk֬=xK/M+J *Mvh匃3> 'oOL4qX9ɥT6nIђO..]&N_rݺu,^zysfun?jX‘w ~F.|;==SXP~\*b$"֭Ys᚜%wإq/YDЃۤt۶ =\ob܉H)1F7l~駛6mvwg=r2r-%L.w E}g n@ `@zXaC FNN핏a䐍_;rV?"|5j}עE$7x;'ʩIc B^o/!.N.a@oH6x: xHEfy͊!j_ V?y4tdTڶ29#Y"jZImn 11n;b#&DmGێs*b.*TsBjg[k o[낎m-+PVW>{Nr8<~u=v:Ln3X-zIo5_ZZb4hqX(tZ#1l =Uʪ`mUS_=P}t6}ݻ cǎO^ iaI(df NBfB# 4x<>lBLw]WWꫯs=-[zjf͚t`f'wy74! 4xذ$}XQcƌcmPE;Wg|oe jI,@ x)S?Ӑ[hɼ $fbyDCPؚ:u$Jh@dM*o~bҥ'O&}裏ȑE#҆F2?cÇr" &?DFa:??NzB)M2'3weӦM\ K7Ν{ܹd2OzY`gΜ|-\6 5X6L%k'y\\3 VuJZ߾:=c C #{<67A<>}lFck wOCخ!ӣGo޽Vݱc'sx *;Q6slL׬YbmRvxW_}?-ٳ2DqK%mS6]nb6ٶm[ IkvW KƫW={ϖ#inn.˗)A)o ~B>)CL,K,rC!gL tb YcL90 XJӧ?t @\N!WO8S8ΥK#E҆~zٲT!|o?_% |d޼&O=V'bCOY'"R1_$Q3g v*OJ*pI] ll8Za$-7%<Ō .]#랎* I+;;&QTԮ.]!To@EV拎,'޶SN֞=T8'cƌu\.]xᒟ$ +PNλg|m\e=̚5O0idH<J=R%#Q3#\B?)#~e>a$`@ 8cƌ-Z4o~/ v_}u>gXoMGȘcq7$ %3A{ &//0E1g/^ԩ$ɓ-!u< 7L7S/ D$t㏹+-[s=k֬aL<q{yaiM1S@h#{yBc%gLe%z/vD558B9ÇAnXxXx,,5-"?+R %YL D$A\˗/?V/Rc }3\~[n$M6_v=qĸyN7r֭_]fY~m%7o=zxpRZ Jb?~Ahm1ٶ.U1$R 7 #yOtW dM%sT<v9ln+btYVp:67'0T[ZӖMZ`6Lzlr٬>g/z o]gOgO4OC\}Uν55}5Ѩ626 ~׵SNCݺ۷?A6 `,e߳g:O~|QLʋ*T57;)XaEG (L F@.Tqk3eĈ_Sp_;|ʐ򷉾,cEfB *TPqѮ=V2`kһ%~:`Y zc7&rSl!dop4V+m{*{*, !SnS 54F_o~SS->Tmv rie_裏| !^b(ᄊT8xB$ V"H *b7"ҁx&p+:A!Qd Ox#~ ̅L\yu8 ʔ,7 ږ *TPBmYYUR3nHg+J9|8~=\U8*!{EZWWx+|AOynf5Y,Fɤ))jtڲ‚"mIXS굌h :hn x _JdBκr;9Ct>h/4,=As]Xt~mW[np4r\y:wtBG3dǦ\clY.+C'G`f ~1QE ~D(61oh:_ M[(ژle_j<ýB!nh [*Ir#4 n慢QFh,BA\Vtd%pN1C1qݸ⏯yh#ձcg&0q+S ϭm F)/Bw{D`%1MĊ *TPB_ kW/.VMU^KkB>CMg >.TmA{m^_a ٹ*W\Agc[ vY-&`Y2]Y+---LN).,(+.*hJ:Loff:n{S=VM5kmF+rZKm\7LuAS}X>mWS-{ ss= =FWW^Y|x[: 4h{;nqe>srKnq{DӺuZ0ye<_J9xvΥ SNy! bQ B=*vx}'<DK P%:u"o08lO($zҥ+ DЀ,E!`8JRx#R zխ[LbTDF/=z$9t}"X!bKb%AK6B%"."R`Z؄d=0adB?DYN7R@̡@/tDJ2b9lXfr)/ =E\Đ(iD8eTEpq3' +bNʥUظbQ2*:{_ц?()9VS pϞeʐ̋r_Xd:¥PTEDe(DZnF2r)HaP #6"".t j уErO>}UVVmڴEV0 '&t.U8)ɉBGӴv':q+t "CGafHp)0X6.3DB0c=Ca}{9_X ږ *TPBmFwx U̕^}Nm\r!ݺyOX㪭tZvn1l6a,nuAk4K99Y%2ŤwXVj[:ച&LRv󴰉Ї~S (22ۗ_~Y__h`T\R*@W(tЏj0J!iE~q qa+//[W^=)D#FT9:I,.%:@ $C enڴ pQRXIˍ͛6lFĽ<9o(^ Sf\`iN!-E \ ]xC#<&JDzpoʔ@9y6mjuX ⃴Ehst"$@: V.iE!@N< ffL A PDt#,7M͚0g< W\p"p;fa@LJ]JL0 E:-CG:P` ᬍŋ5kqǝ00*듎hb:F~ݳgٳ_:uf<+ /,, Qъ{JP0$z9|HbbR-D%Rѳ(G >?/]\sHъ ,+=3̝#3)nH?2Z""kK؄Nq6,;'*-6ԊEIVy8~Y|[ǵ !Ɯ *TPB;z`e֚6` y n{ϥ ~sk~cm1Zw]>nn33 {6Ak5hMFciDњ :]6`rی4r5VA,5Ӑ RVzJkuOOF'|ߝוlpd:9U*{N#7dϫ7iȀb7es撝z߾ӏ̙/.tܕ(l@gI e' ؞~ljꫳ)<6(@]ԢlAK_ӧ#g[TTP\\eVmڶiϞ'R~l޼U آ/ʉ7CP#[ =H6dȰI&: |i~ MD "Rr3$R?9s'Ec1s1bGӻwHC:}46l\>#GɬbCb%Wd(Y;wl^I䙎`F0JiGv;ᄏ cikXh1 hM9vaBLK,Y3\c@:1 CЅ6L=K3ĉ(;T=Xݻfk^O %V1:-m0+1NFdeDJ+&M-\vee37_F@ݻt8&k V^SOO:<yWqK PM"2D+lQ%$,S_<|HzzƝwލʣ C%".%Af.]wŋ?~ѫV9y41E!SߥK7ޘ=NA΋-ظ/..{rS 't"1DG#:qƎuHaCY޲e~j&|jaN4ӧ#Њo܃EPh7Dd敐TrEآ#Ay睟|IUUc~:ӿb̩PB *TNx׺nꐹo X꠵gjCʹ}P Zn3 : Z*= /*^cP5Tx!6.pW9ompd72DA5*[NȚ->S^sǜ_Y!(~Sgj]Aǎ}eǎe3Jݭ[={SB5 Tߴ(DDdO~ԽQ .CR\4J0G c Ae(hfLӰaË 5'۽{Νoܸ:C{zd頊jW.%(E'vޣk0C܏͸K(P*E*2 w*pA(d)˗7FF_ jڴ9AuG_NQJ%9"EKD+ 9g$Q6A|fo1 sB@`8y۝ֹs"N"¤ nKҊ37BS넄D| RRlWUռ{\^L8-e!@_\Ⓘ0K dY(Ch`HfKH<$={Bѣz6lCoyȱ/ݻYs}3lee:G/]D>hx-[F'8eg~qQ2gi釆+WuzkQȾYq[쒹ΘrYʕ+?]t3˖D!ggR;w<uNN.AoRaj(3SUU5翉d„I67ΟT&A&O?q%u<! 1 OZBVV8:s)e2\/gG/C$D}Ӎ,;eL L={!Q˖cS'|F,њ:$s;w *׬Y('OILLa,~t#SO+V9L4yܸ} @a}uES={NRS̯^pKi$R* E3y xKы@+.}ԩӊ$C ·)YO8!A׮)/O:C G) *)SR?zر~˗wCp Ct$=4rR??Xt+A1k0l۶3={Fqϖ-8@'&H)$?W$F 'ib%HO?`UUUfܸqcǎ"uW=<^Q88d0$c<ՔTcN Ihf9QLRr|:uu ,TPȑ^V5k~c>nU"Ctp'jYf宩ݻ/e pCC#WgRWWWC>ĕ+Wv' ,TV!O|__~;|>ޤܭt)^{gbmcE~9Y9 aF620oLKPx2wy`aȹ8dUxX۴i 3sAR,KlS}}OXCKBf۽;O>۟;6gm`{g,B.^Ih"bgv#Ɯ *TPBDӐVZkj%{eA. [T_n[ RWk?>XXm[6ˬw[;A zEj=m,CnCKr+|O[)+wi4DDBҠ8`/4^g)Y=QH=ƖUi =l>Ǧ͵嚯tyڢ ?4mlI,_gzҥO?]v{)()-؀R9@LJJa;.GE\cJI){t /ra vo0Cd޻wCrJ6˖`O~ݽ;ls:S<^V*ӧ(pSy9w yaa1R(7ky"ߥK9D'(#H1z$ Aj)r- J Q.;x\ThBn˖m$RlSe$1(ٳgQC;qOWo OQ ߦ >idRH)?ɓYbA3:pmÇ tƎKs!VCC#(vB@!>`@Ѹ}f͚Gjqg-Eə2e*Lz{@3HVm6(D*4bdu_ԫ ,<|(w/56&yRksjk?3CQN:PЉd(|F'J_z*C`yU!|ͅ,Sąo]xńFm*7쒺'2),q)~p:lSYY, hqy d4mUOyDTlܸ[_???A^c'`/ȢEYJ,6pxB[e* u:PÐ%NP,-V>#O\4X{eU|A00a`%2lxgpk"Ɯ *TPBĵwC. Y|[w]X i}XW8P:T9P<:Ph0ﭲ-.[a 8t!g9 n. Rmx~Cuȥ(^{תK bئ/ <)'`ɪeT+-irCJ@̚lCIfYaVIaNqA#|UYYA[FQ~NSp[0ٙ6,_|%Te)(zEJ zN]KaOCnnFw "(rݴbŪ_,@!œ>: fPBJG]@NCՎ;%ɗmLH\a޼7$ڙ3_C9fϞ[QQE '0+^(q9D!٠7nY"@:ݺ`h< rKq! +rIV5 Gnwjzd[>qcE8nu=o$#FC^2kl挐)ïKwj2Y\ma fdfgdgF#7')t2hvl"i5RK >ŋ'99y|vl:)*;fj L=g;+uх *O>K+臟*ʕ+0\ i(=zb%;W(a#WCݻq\R̠);; fvH">aӏ]5璲 x%j/Ô 4(Ν *ŋ?hlON:CF:)*2d$CDqIPVV6u2} y+=pC05|'N1\"<~" ,XɓNC(F׭pq\BpڷS(u2/D'E90ӐW3R:NIJ!r9id'aT{t :OɄQxTXK2O,n>JEG6p`CXfL6a1c޽z_n^zoٍ֬P!3/!D^{m\>E&iǎm Af-vY]]<ܹ6Q9rlט9yaR0_E>Q´9*"@QH!!3<%.2O?]:$2pq.˿5Pԓ^lPpKCǓ yn % ɭc p12_ ,_| oS@Zn2OGG][k׮߳gi!Ӑ &5mz/J䙩yyY8b*Clq X Or+,BDRcpH1b`ۿjUC/"O!,͈yV<魭"DČWG2$R\J\)5g}.:: {gisycZ>rh6[s,Y*f'Ȟ<'\^?PB *TFR&nTzMKRt+<&h-7Շ,{*{kXm+Tx. :LW9C6^굗U㵔:g\09 ENc}Р-k ͚<{YO]aήfVҫl̀1íMfs 2 r33is3r332ӣQT[: !!(HsS0b@`1RSltGe!܈Q03m'>(OYEs=|!2L& ̙Q U22DA7\UUCTl=,uX)r:];}+7J5*XPRXV\lӲ6V^o8~8'w. $Dܹwɚ۝ gO:3gmnpUB@,{#6]<8 D8eJ+O$xsanx&DSHՏ;nqg vzx||%4d->>ҥW~~/d nzPn޼A^7n[@.\be׻m6bQ67>}+VmLʕ.aԔz?8F'{kvTh Xة:̲SpI6l؄l)`s%xdmg !4luRRJiTRx-T"C mD$۫V8y=M{]"KҲi*--Gb*TPB h_ӚܥX5~g B r~1}LR1ZCӖ!-cpKGvsT4 vCPbbTVh,nq(|a-piˍ5*[_,KuEYYٙYiiifh{[ސ藺}d~1e %wboֹcT)ٕ2*" ((St۷?~Z`s箌fdI,} ̝:u>|xccUP+;fE@=(yAb~ ADgzD鹔KgNND :gO!22tSp^b :b %dCB$ Ba߾7DH1JKđ%%Qp hb,!Hh: ""-@!%@`H3xtG`kt(00^LDѩh%Rt`=<*" "Bf"q@¹!C`8&~*BٳנACH/QZq!E766m:Wޢ'1-%4(p"IFs'}ӿ x- W4(2@'VH2$yyc0!"C"JZl=u괆F*O0*'(G P:XD'Q+\B7D* dVrϊ"(4"FQ+789]sb=8afIӊcs"¨x%#n^сdIU2N:LK]B-h%%R{dH<NZ᧣PTqB+Do9"cǎBU3"Pm@\q/YEtN QHG s%DJq&TVV_t>yDQé\TZ-E\gHfQ:S K tD, ](źfFeDJq>Bb 6ɀ"ZG6FEKK|3gw٧O?EPZds2< Dtx3K8EUVF_)v4V*u!kpxm:M9Ѻ-e.i 6} PjAE e|MQ^IAnQA^Q~^ANVQnV40îI3-鵖sjȘѥ4ŶԬ̌ĔGFbBZxewC̎I}\*tR#1*hAMPb*%w۷߾u#T/."l7 @1!{h%@:A˥(΍!8|BQÍp)FsɐS(bK!&I. P"BP,A2PGMkՇlrR3T5õӐ*[ce{*!di!ole~g7xmWB" 㵣` }iNSeffdfedjsiNmF5ƜZmL6%L.m8];)9>))|};ew\2 H| '{J_le do-C׷ FS8r Ȑ Dn%f'!b(D1PNKtr2*".RU D:Xt bbZŨt(nCOP gl i~\'!VD EHos4pR )b6F#C'("MJAYHtऽ X.CKz&r(b(Zsn8 BQXkY %C+Ѡ/jG@X$-.a/q2_tP.g!Hɿ\8% 3G"+mC@ )AI r)qUؠϒ+!JD!P%1H Q8 ;r)!Ȁ$"<2q2tgSDPBO"F\ DTy cTWD?(y7[!!K]V=]!?u2Ƅ_ 1G>gk sKsssrr ss ssUa/KwjӼ9#K*7Mnm0 31#5>91!1!%)1]NCv%}$ v%ڕ}wC &5~_:ZE|v?R8aNJL"[J'1H` 9s@2%"u@V) "Į"xS#%%,+C!='".v\7 %2ŒqV8i=I 8I) P$$G]8%vcE2.W.!RK>E>C A:R2A`P-[ӁFe!1A]325 EigY(l:,32(b^&O~?ٳ7~ʴF) LD˥_ .^aVv zSB ?1ӟD *6PNC*U^}4$` YjM5ڠ j~c൅B"iDB4}IWh /iJ rr^b-MuZ<ɕjkz9#h̶䤧%'%N+e]׏9vH$&f];VOCD6lO֭o?T `M<-umܹcuaR(3P$.t?aKJ'R٫{ I-%=RI"%D|ԩK}/Wn':?rz C3Ic>ӒbLuJ 3 ,xacNt w`xa&vtDKda\):o;p $8)XQo,*gQaEK8eUAG^/- sp) U(@V[v‘#Z\YbT й)mm1M_rݪa0/*TPg qWBڳn~NCQH\P`[| к-8HGkחYJRLS)-*)...,**(*+).,,L/LO)HMNINKNNMNJKINJܚ4{aO\iJWS?[XVYݤ;sc(" l?~ٻb*F`COH ({'N | 4==3%%1uځleVPQQ4!X YO?]r1XE3*̜3g]x; G3;J7=W+^|%&J\`!؆YR  4obN{ƌ3d s֭:mEE)/ⰸ* f%^s2699̐0a񣟔j6mz˖=C5ر6|l@1Jbo#Ĵb5j sČU?>*TP38IĈPo46d<*:Y*k~s/NZf7L%6c̺ͨRcYqYiqqIQ0 ($8?( 7+;3=+3=;#-'-5'%)'9)3)15>!%1!55%3/=Ki/K 5M I޲$kĴiH۶%mߞ!!~RFJt6cdɲ'O/Zxoyř3_Gr)}AWDjc;3kl* &W6BEJ&Bōj:wZR~֭RƠ@M[B`2€߬;v}vΜyjH`@)La ȑOԥ?+V:z8h~Q+:P#/qщ6-}  }xwI++ A I3(bM4SD +h۷Ng`^O^4,λYNM6ϱG my'Z PFD;-QNw7;u\7 ^2L,Q:8|Сc?s>mN]8⼴P``)N4V);!L`K%QG|b쳥<5k=lޥK$LJ$K&ĄpS[(d֮]'eT:*~[*TPqky$bUPAؔ_泚rsGWWz >=Bn]GFCMDc5Z&mAS/-.+.(-+)g 3E,kq$\/H-M)M-NJMIKHLNLOL۵;)>>%5%+?#[n-N铫i{ܙu:kr)9Kv'd'd'ǧJܹ#emRm :ֻ!Th<(äeݹsWYTTž^23)aҥK"xN0lǎc{ѣT6Gٳ7Cݺ@ݥCO~ BhO|^o,+aq,R<@/i"*"p|8pv]@QKh4:\KeEEƍ P(MD6Z\^5C00ЍnP#D۵kC,k[xP?RQQI,Cр"DQŤKL u2/lλ_}uVee[oDD+A!9\8d|B! ~lDKA!:>f͛@ t:bE:ZݗF# a%&0h pZťʱRaQq;b_~y. yeIP@sLe@G `Tq2f(ɚdLIȡ Tcǎ-_ÅhILL>qŋ}G`.##'OYR>La/J;`S\kŊUd)]4x;Cj"l&$$4hHNNj.\ڷn/={i/\MަM?~jNMIܗ.]1c8I/I;pӧO6?ء#mۄ+P(nS̥Y 8>K$mh' .ac3b>Jhn_†i@l:ŋϟw:SЪU+x h;ٷzgϞN< g6f9DC+Z_Ĥ@ 0{-ZbKi'Y)'L-z!Z1غ:vxh6{ͮє'e0{\nAk޼C??y0a(lmV'|8lF!<*TG_9֖;uA>=Ksx%:zQk4FY_f)+ ~sܺ Gi$^;tv]$^5d͙>Sǐԥ:Rm%$m~r^]i٩r}b5š(4$XC.^OLKLOڱ+uΔ-[lߴ%~M[- [cx܆Uv۴njGo4njӹs y)!{ΝqT ݺ6l_RR39 T8&Wrr*|8eʔD[KBH@* <(2vرVыԩ/;#Q|ْWP떕ia > y֭p5RJh)KVfG"_FKgժ5,э7?s̵T^=5< {`]qXnWnnO?=i$̲ 3f!H~~ afU%V5٠'?yaؘJGqϞ=eV8d[yII)C;ΤsXx.'8(d dNe N|qǝąch7#x}wzty&Ery<S-3gKJ}88z8 !c2) Y$vu0_B˒`t:3< Cλ-ŋ%%%/O:֭9TرcĈӧOg>xG!K76#ݻX?މ!lҬ'UÁ .f_g(Hd TB٨BBB?*4dO*,(;>wYk<6Ǫq۴.aڌef]EW~CNȒ[eKKe+4dj259iY I)9%IE EYYI Ca4[[K*7+m|)Β&KvhuIDATsӓvHڶ#ym[6mI9 l}DlۖwDwK!T l "СC7oEZ%(¤ҥK^_>Va=IMڡCM/q}G IK/Mt UлvNr|5:t8D"0R#3<$o &#'#(؋Ia\|Zfip0aRee]g[T+׬YӺuk2 ㄄$4o~СC>uI*Qf ʠC\%dٶm׮]O6 !XCC+HNjk( ̢D-'E~֭;P3'>Odɲ.]ELEhҤĉfs.rXBFY5j-NoԐ( _ɓ?p`߲e˛so&Ν;f&a 8ر )_gϞݦM:<ֶ=pjj@dg$L 0wٳ_"@6Wge+d@ 7:vO 0k׮<}K]PJa{)e}"%-$F?S+`LxKxm۶b+䤑o84{\V2^q9sɺ""|3$ _ʕqq OI8"(2e*P0t` @[x$0d;t:XQ,!Ӷ#9ۤI8;w=Myб4iڭ[~_~ݻwwfܸ>tɗ_~n,iZ6l _~yKلۯ%y8L4{"))f1\]; *TD{G*T(bn*Q9 ypOB^ߡ9P*P=zx;vuTZah)N dPg4[VZ˗nٲ =ƒ_|…K S?r0Z)VR*L.o, \Hn+V!"aBK,cc ԩ3gΜlڴQ-]CZhL΋#FTWW^>IFeguE0%iO85y tt̘q/Ǐ/\rjIX:(svyyrM@:%'(?~V/?ϖ-8]xqӦMtdJbB* %]'N mk߬iˉ'UWW{g#Gۯ/xw[m#|$D%Kܘ8qb˖-5kgK嵩{i“dTmll?~2]l6H};?,wZc>/~#fs^jU |R&8xO *g *~1 hwj'Ak+XJn-K2̪+iKm6k,7g!ˣͲ Sy%9s̬oǤd&%ܱ+kΌ;vmݑeKMw숋ߝ;!+)8-R֥5)NM15:cR9oLk2ty vdӦ v`x4Mv+g"]ү\|*{q J9HQ~^SsTGlF]:9 AE.]vݻozB%#g.RlP=BUj(}s;wQPzqp[ ڳgE=7H+6)Yݻq|r@0\bC=Բe+u׿vzBP^t!Dޒ+W['OLN]F]03BÆ6C.GBZF\nu$"c?Z5bS@ʕ+Ih@pȑTqm Ɇ8CaxnOW I.E/yoL:4iB RY!(DŽgAm}rrz#B.tC=9|5QB`ثXhQv"(3$;w>;;E|iZv]w6:@Zh{ュ_|qZEEhw/f|gGXa·(| Uu=2 DpC3+0~]7l͘1R;$ @_5jԺu͛״i3ks+{AJE3G|!RrO0[կ?S'6kv/sλ4Vn",[?Ծ}m$"dŊU< [Y]7TFC8"!NC￿hԨ1>]JF/<sh'F鈡紨 :DF(r[n'DG}ƏӬd{k֬u Ԛ5k#gĉ_^[[=uԧ~:))'AXKݵk7O f%cǓd!C!r!*T - F\11Pv)\[ﶔLS\b5 Ԣt}ې5 >C[i/2fY%9Y)IIY2vN߹+m;RoMtlIܲ5e[7mٵs4}A$ZK0YAmZ,٧M$ RJRRv'Hڶ-yMoJ> voihܙv[: :tTVlzF>>C-Z|vj(!N(P3qqqHQtn߾C 2hOʼP*+Ç A>no$m;x`'eB# ġH{yyyF <϶m(4iBMB(?.\Q DSGcRP9s>|GJhN"1RR9x:\v=:I,φ S4RS4RR&ԦM[rޙ8y9^^|yfxʕᯫC֭6lX(Zd y#3 C?u4 gIv1,1Sx9@UzZ|g*)ĈQ"#'2 )f0y C, *@;裏˧M֬Yӻgٲ~pҤ)[l?~{gŽmI[$nؘ~cº 61!6mذkƸ3yBUNPy:zEN~/RV_N[l]x۶O:4o޼gϞn+99Yt-(b>'|r~=BaLc.o`@ʶtReɷ?NlQE'ʹ2oذ㔈&LPI c:<вeˡCczh)~(g;v<un= Hsύ^v'"j, %{h)PegRS{o!CaWNF0(_b~ɩg~A[䐚6k{ܸqK.=vΝq"QZ~g+**Vo 9P .2|_3fv__\o'Xp#6gq#>>)&%{c7z]X*t0Bj4Zb))ioݺq))?6߰a#VNg?~"S9rlܸ ̽nս zoVSPS[kݮyVӧOohdaFi#=t߹f6mO?xҢEbeHqYLq /I#(:EBf^ZϟY6klD2ML)%^7qP?Ɗ*0(+s᯾;sܹscE> RLIINxiN\Ç*_oQVIN={IڸEĉSx_߅B$ 'M"!iy4B̙7dQ*}z~gpXf$/YXarecǎ5j4:'xw\* M4<";|ʤѣGϚ5e|E~EE>/ΰ;#eҤY6̣VӧˆԱf+7ޘo߾1c,m$kTPB *T/G?K?rٵ6CU_b֕tFmPkfzMY[n9gv̚\MAV^vvs!H||iqqvJ۹3mǎ`-)[$mޜqs-$۸{;SR  Ԥ]7H3~n Yvn oP9 QD;v!NC(}q9bJj$77ɓ.]:p|gxbζ{~bknfӦMΝ.^x_~RGQnܸOWV[nU `߾/_a+6m'#Nҏ'0M.]9} C},ի۵kw}O`[xʕW\9|K/,XlgφzHm,iĢ`4Zl=`\2䃁I>gK%RmrIsEQ6蕕U_oٰaE![7bBOQ"8 /];jlK9* s=zñc))«bpR}GI5 0QrBY Q3;wg|-q].})Ei)S^^uK/Moݺm{[Sl ns_{]osNZwɸ`>ڳiiW~UW@I. S"OpϟT8LTt7 Iu\6mzC=LG J͞=Up Q¡Es9jNCf~Pꫯl_֪$ mnWH!*vR®]#I?d0u U7qCݒM||"w q?qdeE!!ϟ'qo% "a_z~)IcӦ͓Sj7I,s&壏>nll|l6qƵhѢy{{oN0I>uΜ9T y8vlo"oq-|gX`$;l>(l1D|'GQs; nj$PB *TPѮlbUcFmA[הꋋ YvmjZeK6gt)of r2232Rï'f%dOcgI |=i˶[S6mIݸ9mfZ)786ްyM7&l{G|frbI΢݉ v ;a۷mus͉6%lX~Cߝ[{ᣐyBqKn3~챎={ݻUT2DyPZZܹ+َN:3ԡC-rمK(G]vC,P}p Rc΀ʁ" ׳g/y9=9D\o@x=b {%a.W'C:"` cZG-CHk<i$6xJ"bQ%=zTAH cz\A(xm*T*k㇀; C? aVr#x#(yNi e~Wh#\r.ۘlCIp= n@D R@с~Ŋ@ Ml!*L4(D@925bcK4F3JRȊh@D!y1* i%d9θ mByH)Qׯߓ55u<h h@ܓK[H` LB"[AŁhD' [f7J!gO *TPB ж-[G/b(їK b]i~]U+,>cCn*dedfe$g&&LJI~$uǎ}{m7A6oIڴ%iDa sQذ1aĸ̴ݻoۙ{gҶ_ټ9ͩaD^Y.ak!8l}fW- E蔍٩M'N쳥R|#C! QAh aki'>~ 8scD̅ D0Vux(7dCïT5( [WTB¯FDŽ.R,hn$XŐ  ړ2tSR1<1C\FΘK:DFaŨ dߺ1![2q݈[[1 UF$Q(!hB?pS(h{㽑o ;Qq>b. 3&يQu|O *TPBr|dg%mqEylciː4%R4WY4 (7#/3=3-#̄qvAoO e۶TP̦k #rݛmLܸa]3S3ҒSRSo07m9nmua [nݮ|r#S9ڵܹv{=1̷'GR >R7:uҥ+UsHBęS$ xB?..y" <=v.ǻ" rW_>*TPB * "]I0$?8/[WfiAc_)˰fi 3SrRS3SRoħťJٹ3|"_uk[B"| (shDDW޶~wLە;۶&n g ֮ٽzm굻5%ׇlDl ;iʀ? ;wٳcoH('׃RPnWw>}6|gHEҡ<*Tlp6w|㾓-D1^?*TPB Ѿ]x7GeEEyEY9%y4>-dN ݚ$Gi$(7#;5-=1=9!-1];SvP~/&I9/ȑ kօO1CA\c]c՚n_v농6o߶%yƄA䚔ZnYkqڵNC3 vO "ÏJ!!5^P*$_7`uG],Sy\oCu93]w9K!]K"_kHUHݕ_ )AAw"Y6$ZxuiRliskc7` (l`B{T'U5A ~\0<5.d.c^fU)V I۳jF 6WWpYTҧ@3p3\YZ# @F]= 0,;YT(} kP{pJaA jPԠse_z]r[{̽'<0v=}}x70#ǎ>v18h\~0uuA ^ֳϰa{-ҵЮ=yv)>'ҵ@GY@Iې= )DnCP:y}N04FvΑ9:kP f| w#t!͵\d=ɒFzz嚵E^A<D3@|4/dK5aaS Dq<,V@'^EW 4[؆KKԠ5A j nm6~ 7{o{~z7tƌ3baF 2rQ[1ʿڻ'BҏA_3^ú,]sn:*n@*k.u6vA]z ZɵH^K]wd-m:k]C\%\ W/+c >BK8GBk!|ɮ`;|eW}q8(kG2KU 9qp’Q;X#~D \x^{]0=qj>,դH*ѵ ޲DыX|*5y.P.R/Vʊ%oYw )>M86٤ nZsΕ.Bd g1(z))/2 "AHXa:ϘQ=+i FxԈ-KlxA2"vӠzA[g\s˜Z Z~A\XhǣtLחIoËR/`RJ#ٶo`ސWkPI/!^{m傀|K\(h|+ kUUʩX-"Ju1 v8˖,CV:j 3 "a2`qxK NT X,S5:]~׌doU +WpUU6QUt-iF@w\ VB%o,R` (4𕺼.4UW;5A LK[|_?涛oa|16[Gy㘛Ǝ3r̈# 6dȰA8#;FګwOTNj!z sHC>QHên@]t6G}*N=t6sH|Eҹ܆Э@% nC*/D~m^6߼;뮍rT*oW'ZOmt(~|v)nss^(a,"p H |5r-hh1qyI!P ܳP֝NQHIQ|wI¯tBNhB.&'||tG$f;iX"GRv.2^jm6Sd0 ]}D-td@+9AE%$PZkD2d^#04(ͫ'Q@a aI/|Do yF;ċB'!D1O8HŞj}I%2E#$3 {>3 R5 : UڑXEZ5`Prv]W&z O^M&,eMwa]vٹqݭ*z E@&2I< A`أ: \h$BPj{Bnmݖ[n)haToٶwF(eZɇjh)Y@5ڍ0!iX`҈y W(AIh@l)CnM"Bx @0W;KG >K"ڸ[i7ɏ^cg JRq%2*>`ԛf?htWJHO,e?Rq R Ct_*.A-*B Fv}Qw qfd9?3g믿ѹsW q-ĞGX,O^1z͢2F/ᅱ+^OsxQ=2-XXG6s;a^zٜ9s=xHb=jYX{2"!j, hd~@Pb%aFLJ|k{OvQdZn ~ӦMCYkwEB2XiˁDX'# =$@vE ijJTxXtErƆT: "-'8zuAb%yѯ… _{Oo^O(EElː*PH bd֫> }k8åD._Ry-y9&I]IJI5fGcڐac9n9;w|WBQU#e@ꪫ7o~_̝;oڴ7Zj;c6zj;k>S5J'y)Ԇ)^5-O:7xj5֨M}y-Xॗ^>SL+)6}֯{s:E沀jO[}w&O?X*O6O1 ^hSj##}晧N=4ٲѯu{#t!"@ ٤^:mܸRD޴C8hPTJd…ĉ/u1Ef23^{Ϙ֨QcΥDCLzmX0Yy!X٦ͥ~;Jă4nE¬Y!Fo̦Qɏ˒B/h[nUwthRi#% 7{?9s!aDîƛn& EKΜUW]ME!eK|\رzBM%le"kl+"a1oo9dzaÆÆ ϟ?b(6pk61o|;Kx1} uـw>^H)D:蜐cC$_SHoOg&VW!$mnb&fI"^Q~Rq?02Ѱ[Ϛ5] c{sT c'oIi}` 9^Y[I+0!D~̘q}a8"nvKGǏo4|رכALh/]Ȕ>;@9/EqG},Y 4nb/mێp4Lٳg2BM3;A6](Oz#PkA H;vХ N?i($Nk8dBNa,G'3 PjFA. jԮ=7k劄1=UN$r0NЈEIxG@` wT;]]wmAT k tE,.3ر{|j@zB&1 47|6$B^ IbF%D)Hm/Gy]_~iƍ<'?yKv@x>9˚G:;GdXW*  /W>HƓF&gђוVZs[LSl޺Z, 'Q!줥""MLȗ<:efL zɷLy:N6]@]Ğ{fƣ>8vD; (% ♙rĂ`_|UϞL$OWZhw?*L^rTPt-Ȳ,2^%R;z5Ȍ%`呍x$[p8KzI*%{OJY`љg`͚5FR"l&S"<װΫ0/=z;HD93{:!,5»>̋v)]*7gfy Z^|qʶΝ~wPj&ca̋(EՃ@6` '*O'Zڊ1$X$xͽd_lBqĢ <3#R.]KF3W^ycqǝ@.qCȑ9 ЅvlX"ࢌ/UKqu~Z's?wza]to+? vIHcdG?'z뭷f;Zi 6RGqС__$ Y$bMӲ%},!+ϸqX8|Hv_~qwƛC2;t r)>~Gfb7m!* ETSѼYN֐O?ԢK/{ F, E,B믿e.2SO=2E@نO48Bg8替(Dz1Y}w!&|ȴiӆ f5lZB\'*N>{X^^K/mpBN1(^#.4h[o 1@)ts̛9s=?@+ _N8>#ӧ` 4_Ѷk #%SO>IJW{LDQ 75v̈1׏wo7sĀݶgUVYMK/w)PI#($ 6Z6w}N'OL|iV|:ƐD)㕔2] /h'p +1!$*҂1#&!;eRA8v6u<5j̙3'Lpe9i=zd_pi=y¤!C+hGRAʫ<3jm 14e 啧Zd$W.{"j_x xv_uU_ҦM[c.l֐\ (P)+C Q,X$ReA*Z٬#i \` Q$jGvX*ړѢ&%p rV7"c'LRZ|JW/7l^Gȭ~}x59沲Ba Ie^WjJbgx¢+2xBxeA vI<##G4bk*]sM{f_ERKB t+) 9iҋF1xy9ɴyҁR/ =djCHK#$X"4g'bLDx!2:C4uTB,)^?ޱRC$[1SL.Yc3t۱c.޾+m,Q|$zc֫WϾO?ef 57 6޴%m{ӨcG;bC^?jMGY 1l̰!c =\R+?nIV1%,)ކ,NFz_w|S"0^/2.;b( j-W[]gnv\`ŎY |GN=t'fǵ:v]yX/ H -Z?O .O;tHE֩tUQXd|믿{7oß5s?_u՝\~ Ym'|FԩفDIg\H`9R^X-ѱՆp ;/9"ب5wnß/<5pq@fϞ׼X8_ 3gŭ(b4gN -/SKLSO=$m 7?:M9{\Phh0M '|ʆi7m숧~^nhϟ] Ϛ:9C@9>.60 ?l@6m.M\%g",d4ؠǟ2QK?D1tnhժ 3baeMP}]Ji!7dmHP^}x=u4'?ѣǚ>X IDΧ|)2ג'@/" 0h~ 'NW]L<$'9.F9XXt\SL9SXc Mb0 E]Ll1fG7g>Wzܸ)r}_xar % A1ZbW1dLAO<9z;sq^ P8e;^l~7I/2|W\ي*HS\vӧa r˭Rx9IG;,(a2id 2m 1j3g~/|Fraq _|iI]C֢yo{@&tqR]le{,ńm9JmF|=r*zwDְGs} 7ǭִ+ `[yUHQ㎆y5o6k;ą%AteM^xaKDj&iI J/YVJLSۃ MϿ$0W-;[-}ɠA#S 0cg5'V <:i'ReY,mKӔ)pmVAN^yUdeWS/gl1FD! ]$MoIQ>7@2SlFh}qm]GÞQF=GyԾxhe6DS/uٸ,IHN 66'(g + ,ܛ>ƛ_06d%4 z.L60 bFyZBm,{1OVzm2?P\p;",VQ\*Nӂ3`/]N gϦ.,ڶu^k뭷}y<7Qdr"YeClswnOdS=܀M'+vzAOq1+- cD/>2pZW6:%uBg'(\LrZ#PFQrv p,{Z0Mn顇Zmu '"-oGyVZsq⣕ؑF> @êλS XNWJ["s=o֬Y13Xh,;Rf˰!<^Ykm&D-f}oҤ|/O+m(- +D9\'P`GDkn8(!<;sRG `z4m-kZA\{^{-l|jÇ2dc}mߑ Wc$dXdHn@ǰn݇w]#%b:sׁ?% dkeɰT& "n9[T5N`V." UE뮻Km_t (AUVB]pE ۀ^H2ɦeˆtz+xԩ~}^4 {%[@邷|]c%rҘM0:a+`j`6 OY.͚;b{(8CsD&7;.rV8N?yYuruOpA6c[<2IvP]|a]˶-X8q$i复ᾱȉJ%/_7uHx-s bI{)9#ƙlW%*t8>#{g}9Ȍ"*ah۶(n suBÓO>UĖF4r/OzQHZJo:!ЄONE_ JS^ TS𸌎E2eiXe1s'e [uGôO}L0qJ_zr^ziUE3Q_z%-b \V;~7-\:J (G}7T;,ѫ@5.B'8L _IJK5=Mޯk׮o9sbמnޠIԵkw-_f=\ EfQEK6 gR@ea҄]]w]?!1 \I tXr%.`? ^֡CG#.\0~+ bapa0N5$DN*mlD|a_xMP>Cm1) tI"#jv޼ F@"&QJe\"n5`jSuWi 2\jFj1G:xk]d=&y&!h ʫU@C裏;v-K&C?ϪO?\(& Qe( iLIB `11݌])]/ҥŐ<@g(%଒vg}v\NPC2QX/\C!nﶵq۫EO/ F 1aP|l  >K?Cp|:ӛ6[ 4YX,6)GT,qv\.%ئaa5-Z`BK&@.;蝗$$BmX 'o|c-ի衇MR-jBj&[mV\qeeSC>TBZj=kV̳Z 34|2x?"3rCG2zРѥO /Bz)]W!% (C ;oC*`ό dy-6df,It|`bY[,v;+YS=dckci6=zhPnٵ㢎L*040VIQBRlJ.irw8V 0Zm' .TY"!ɴP޶k uOlR#f1XHaQ< &M쌅_:~l*0ߺu[%* l]0I g:P<:gŃ/ń;Ή"b4v 9eXn$n~W/JYxZ=ܬ<0BMzWyANW}-Gk}"v͸nq( /Vj&8TPN6Y_cef<ՎP&y6l O; Ő OxPLx)Vqq9cO 8_N6M!&_`G1K/19(L<.gkzMf*vK$v=Q8 !k߾ɣbƗ~&Jv>SN9׳"2e}pܴQd:#5yѣǬWce$UW] cJ 3s96TA!WZ:%ߪkᦶ^ˢE_m2ㄢOWN0?#c n$4+hXZ/k\ɤVe/*}$0F yNmA;dw>)̺n`˩@4TZ3 O0E>2볘{wJ f k-V]qY͛va0?w|cd%{⦅L +BXEJ>‘!1bD2ɌX>#F}ˋP2u-Zh:wu>SB,gbg9L 0ʟ {Gm{iauݿot͝;elћGXh!!aq-p!INaz8{\K/,g3δKԷ~7gf\zi/O>C !Yhѻ4y]v9yA[ޯ⊵.'~d""+LҀ1[F?t^MO4>v Kd$ F'-\֡CGqjPXs/g0LztP[ɤeC,A 3;.͘7 +՘@ 3|G :j萑8pu}G.1[uW!{:2SKu,N]wүBކ-"erYe,X$렃WhCkڟ_>c{5QM)~o`&ukw:`0 CMP/Reб _HSM#x>ȣXh?vYΚNiVƪl5j^xYgz 7xM6'0Ui-̬'9D./4eĈkc5يa-U:X%H.s*0Ŵ)9ӧO7|K'9_ea!dy&[$IOBiKBdRh7eJlcTEe+W` uI0!&P kx&QP뵵$cr/;);l"]^PXXL,)}kvNNV{S8{vaF(Xho" `yk[dgSIݳ$rXa>6f̘mFF}=ӦX&#.!`|,iX[B&Ari`zU^kgkp+`6I$gdz8p`:;xF E;B$V6eCfDlLdaA'A`Blњӗh`Hcۢe͞Ű܆P, @bW,;3<;`e9cO6(\HN$PQ9}ǹ!C^.y6m.cIx4hM2j\UGM8"o0lԩ˻׺uOz9 WxO]Ԃ`kw庘$!$g)9¡6{҂GKbd.]} 0ve72!Cӆ=^te~ŞJ # <4EbBP]`7XLU$Q8;Hq#e_|@Vybձ'|.(G5腋#N:0 d]F]aUU@ ዃB\c D5voƮj;I,eE#5gېoC^&P~ɸe9̖ a.guCU6ón/(C,ಳ>gu,+?(fD[x_JN䌘pܔ X)*?,&AUOs6`#_HڪU2O94sB64s̄a!;W\W49f|wė&cT8tO<G߬YsX5)ENeRU3e#FDT(l2jJΩΊj(i Tq 4+\!/n%DF//2Fu&CqԨ1N܌yJl6mp\AuPnXe$5I1 ^^=Ҟ6\LBRSw~&\#IwTڕ"m Hŷ!-'PR5OR]FB첂B-HPJ 5"oe()V g]=,b={2KbKp^>G.2P]qD.{WdN8Izx6|[% #5r̒<1"hU~nbwamx כFGiN#\Ȭ~j啿BHL]  vGV+$YЛ @h3L`ۜyD D{  V+ fu! )FU VcCi׳Tt?-f" ]"O ,sϛ7oe3Ğr̆NӐ;`N]ƘI`BMFy0@1(SzmxZnCD`cWH˦^I8Ӎ%&c㖓% " ``:jҥ$_yGt+3Lλ@<̋x<>h#KvΜL@!?؅7`[ˬY6p`.K܌. uUWS*')M|G܆S6ϵ6m~'mWQ̋˞qSXĖv¥ד$;g&,0a:i)QIiOV&hXeǗ>m(TmR5wieoj䨛 ~8p!G 6tЈ嫐?= {hkuUn=v7HjTހt2ŷ^mtE Ȝh.np5qFA6NT$&hUqIsHpgɯ|S/6oOf}-kI0Ŝh1s| xꜹ/"( Ws/VHN?N<+Rwe_IA\%.&A"6Pʗ:?g@ItrWzR +'3T&Έ'S$ cb7e=EFp7=bbhq,l.(hygk\~׮ݵ X׈yͶxWF_3dUـKDYIn^ld^+Ä 疪Jr1-a"sJLL8|*UdQ2d^,,[&P}SBc%"?!FAvY"f*%׌Q$9`MnŢ+qb*ߔ̆40&M؞$RW%و[B%9;<;y ?T-T&9bӠ3.8|)c.EXXU4.>(׬lh ` {}OH,L#&bFHE;qe7*R@hU4 aO"cO5/&lR!n!6a%nxzsUB1bՏJay+E [n- nPxdС-MR YpG3$VqHtc^o f.{ز/zn&]\f _I%$td|^p!wv7ߪ!h4S[ Ӕ~:KL F]1:KBYKnfO&(.G.SBDR34ȁ΍ڬ}áH"%4.-kP+mnCn,Gf3bبaC 8lЀwd=G˷!嫐˹ U |ې҇>: i՝r Z&,@YD,CVFCRihD>B1#.ۭ=ȶmIu9; dgreolhw@eCXʶvk`Ѣ/jSѰDg:cNkR۳ tܴQ.;;28#5Le-\l#am^2Z vH4o~C_~`EW,N0ā-xOHۀu⑽ )3Ξ=% yO94O?rȡQHvbc%6u#H$GJO9с6/7hD)mtqq;vRwt6NoB1N,gdNV~UT$D͛Xlm_t;JW]vVg2t.hqawg!XUYj]Q# &uta;1PWEORisi*ƄPrىUb 啩si#cS5J|i6wb|p=B*ŹcA2yK?q FQFKnK0%3.‰9H"$D:yucOb/~|6 gkg5'$^dcĉr˺vsS4#Sϋ/NȫD^&3<DYp5+삨+˿/$<㑡UxMLΚ=T;#l t- S6SaT%"wSa뭃x.G*.:v[HMϣ>1=tuoJ(ý8Xr~>^T-P.XD_}bfUAB$&scKj`\DU( IXL>͌fG6pm %U{wǍϸ/ <7%􌴔))M(ҤbjNԱ_ir|]SFYޢϝ;_e +- dRǟ٫pVZ Z.DA o,FD`!5lrY4d0a[qfA\lyp]|q+Ȍ֭;tV1Q^w]?]t١./i6c& H," P"x=H,bp߾#z0VJESRNoફ%i-kߝ)}SӋ*ׄ2 9b9N0te^hQ2H(Gې "9(pV_>k(o믿 2FЈ،bd_BG&ᆛ,v*B)?V`f)ӛemBd@%e2͛II9z!G3ZlI~&CF@ (2 ~SO=;OB, R$<26? *V@Z$^ƳA%iY fϞcL;]0 NdRBKn;#b@q[nPr2@I]&.5Xl+RG?tSi%cƌe@LUlRX܉.暥kI^ C@ 38e{=Swy16Z8Ϭz0b$h1,_8 g̓%ۖ+ ",#HX:rV>cIQbpjr,YpDجʮD ٙgm/vf..Z|)[mfxH22A d.͘76f#F3z# >hFnĵ}_T܃ ڣ@%H=HL_W!ېr{ҽս-3+KM>tlT3Ϸ6_s׀Ei`9Z^l];޲ertgHE]je~VmJ}-bml[`W_}pBZIBl=uW2(|,J(8Ӆ˱@W+]dH@@Nd,/޳:M򊳠U>Iwosv>±SG8ǐW,X}sru`6èS?pCJ(bn*'L#Ґ٨`sT1qR"0ea)(,^U9iL%@0oDQ܇) #xqqhI,qܔoseJI!I$rh\2l4 )7uʫ:lI.Lڼ#0 ]1n6at 2|)HOF&X/5;jx""WLS?ēNt1Sa~λeW\gf'Ml.W`޼yJb9&xP~(3CF9ix,K8]bE#Ĝbbe?sOP _}_|asc Ѩ#N諄WCRd+b3b?Q@`eP-$$dg̘a4 Ƞ0 QZ'J5,okS.,iƨmSֹTe  SI . 3/`I=`@cF"SSS;Qht`aa^{.\̐`M5OipFRJ2-&8bMfM祎#X[ِ% IA0Us2C//n&k0^{m_I0&zKgu1@|ͬYN@8hY̞=G^yT0U@<ņwJ?i2CkًFމF ]o͔O>D6FmN,3g~0txD {5.v" >8U%<@^SIVˌn۶@vx&^' hY"WBi 8X%7q4Ek \/Fˈ ]bDI ̵4_y:z1R/ b9%Z%xG ;v+-"k߶eAB,u"sɥ?DéL Su*0yz o&|fDq<(?ʖC>LeSkPG`{ƭZGaG5ba 9`Ⱦ}+BJ/f=үB?U [*ti@W$zпkq īUh϶nUCH]@m޾++2^VF'x^ۍ,͸46cQڀ@hc 0cmeݗF] & qEL9>-6o%#aHa/NUxJ;C\ˊENV ƈ$x%'Pa'o 牑"3H24H1q,q'\ՅE/I]Q]1ĆeHxMHҦ /c3ɑva'_J=##0fD.0O*B4p`^\³+(\@Ob@&QKĕ#O39Օ#\fP`H(X(*pe97J+f8%}1"mJ5X'&^ c˓ @L.R7xvqiDfY*x 1, A0r퉑J Y+zx!  .3O b6DW#0\EHԅ qH[1]A\q:16!)b9˓WzEJCo@!0Pq⩗ bv!-[< ;M^Nz4GĆ46XM7޴M7oCF7baÆdâJK5AToG͇P B*qSo Q(Ab<^CFWkO("ԈȬ]8`BJW)6DoU]Y#^{; ƚ(*z I@p~ \]ad38 b@=@||9UVHW&QԋE; 2 тx9tZ"_0CxcWO41d<K(k pxP (Xyfچ2hDZt E l|׎:OEPDl`ig6zς`IE = Q,O'dbdXF'Z*)ccR "D/ir@)la`cuh3d/  WAѻ|S=YtdQJH %L1+Eq-%^Z+\1Y+hĢ*Txt*Q O;,p7^h2)Y} K^A~(RXOuK-*b© r];49{"R!HCL lKT vz )O$@GQb'|{BWO"z "D1^pi$d!'OJ7!CgᵉF@&"0iH0x{p\ޓ|x 26)!.F*Fg#(CvW$ca dzaǯpIf1 4AF#A0Q&7W< ^&ǒ{b!2B^`J4<5 LA -aÍ7۴%o0t(0dAF0򺊫 ϟCmȰ2|{-Ru Щ_N+n1v4,0U/*mȞ{6XVhgkPZa_Y=ad*YvWxvJ,ghÎ3 hTh0O@шHڕ6~'>'ygCTiHF5W d gᅧPGHƸEKGRo,y.]Eo *3r Ap,y1 7t!O<1.B_ظ!iM<I2d]L q0H-\ӕa".5"= QXW,ЄvO+hDE!.f_A_x 'ezaҮģEl^cW z]m cd$k>ccm4.\@zC@HdI }.,,Y҅&Bx$f$!+`'!<9ڑ ?da Wba2[ eCf cļI<;=ꐺ< W$*Ta&b 0iѢuIKR/ 0`Ll#To^/8FŵLW^=#WQTH] GG F cgI(<R/L‡%@TE$xFBaj-nXg 2CFW"Gۤ.^= iʼRYI& Knia|]`!vȢ(OhԮћL#bh#H1"Г.q O <@CgzP-wK00( ( &JI0|Q_9 }Bwx̣y hGZ$s*2,c'<3 1F;/0vdj!ٙ`BF4zaMa[&xdR`"F6L`9aр9/*jPG$d6lt1`~;׵z~6uxkF/7SsRwRu.> %(CB]qK(!:bYɺrYY(V"kJ^ Mz < `D*\B'=QPzx D$o4a 7̺$*( 2˯,4dgLڳЮgBx .N񑴂rI+Ϙ1 L)i h %$HoL[DEL;xY1: BY6##PUM`ؔ 2#$,!3d u0^!C ]V)7fve!a^ޤnǤ%2O\jK6r@W"T`&B>bv1tV(N:!@:i8 ?x` i@B?VCg %U%Q7BjlVeb$0 4T׳_Ҹ\@%, r)dd(%Dad"OF%:='IPklN{I1a|Z8(]l+M00ayQ=PDj ̵x{)h,;ՠ5A jPP ٤^|]={/]|ҭn=VD S4fv Ur~D \ ČJߗlyZdgKBV$IQ)͸e Y]DkraHG8$3BoYRDFa)j* nf5G@pAδ)z@zURԠ5A js >k VHC! YmH0W!U. ]]~y'}͛tӛz,Ygvi*HHyzu+m۶>li* -" hx[o=+wƌ.ʘQ ̛7ѣǪ| W hwO>;c,G|^w}{=E&bv8/X׿uYE Zk=S͟oygaD'Kf17q ZAS%3c=~Ҥ[$}! :ua̖dDlTru=/aís׫~[s͵sM9rBNa@im6>;AU¢:'t/u1(AFgQPzTج'vf1WQzh}O>%tWvi7nǔ)\MӺu[GK)Qba$k%Pi_pE?0@ⵈ@ZiFA($xV_ٻT񺪬ZU4`w߽"ȐaҒe;wkraMٰ4X 5buve8{6mJ+Bh_a>ةS_k۶ ]R`@fX~:毾:eK`a%uit֭`LLM^{yFi1b?) ++@\. 4l.+xbE@.fV,DS)pI]D,U]}x`93ꂫªJ. [n 74jQ@k jѡJ] jPԠ5 NlYg]]mh۠eYʯ,yoT.A X6$쨄v- Uˇ]݂,oCwm>cO|d t1O9 2(ո.ig{IlتUyS:?_Ġ H*0.G(ׅ|D/^(„rnU_E unDxٌ=C0Q%9]UXQpAF20EG|H4"-Ƒ5VG#<:bĨW^^5Ŗm),~xP_  k5 c8^mS7޸nP$a$9%>l=q"aU]*qXR1CQzu\h4F~6JҥWz4]f}Uī?G*u5A jPԠ?.8o~֙fHn;u-ܣN]N$=!uߋYC ȕ} h~Pu!{09S(#-O!O|]7u'N|AEpT>CfxkР!J+$Yg=5ȑ.\4o޼'*TZvM{~:kt35`~O>)Z% HPlxw/2]J84n d*uyDdyWw45馛>Å N6cΛmyY`g}g^^{=>}zWa!{kw>;᭷nժMWutw7jcY#sϧ;7ov!;,Xkkw9GPR ) M{Wx%-G͙3gܹSNKʟ(]O=L?矟d9\\@vΝ;__yK.i~O?ر?#x͖-[zk_gO2w_`;{ŭXy0eErwN8q„_بQ Kw(>(igu8PHW_}m1OxaOڢEnĈQ/8MKIe)0iҋ;rpI\Sly v\z:)2zpyxɯ]O>Ԙ1r1vrc޼b^ޚ~䫯N/o~˵8Sp)[ha#'Lp)Ⱥ_j#?'N|~G9@HbWfriy7"#!"zhym][n ?|5oQ),r*7÷UjPԠ5A ~LphM8 }PnCtҩN]K*(>e`.P)Zj? /oTz_+/WS!M|@Mu^w]{`V$IQG:ǫh"CwvG0l؈?T۷R$ߔIUu׊:J5k wܹgk̙wGɪO>LUF.\0pM6$ ~RݲM m]d{7x3AoqQGnTpt!(4؜W^y夓NRw?<ʡvM=s5(t\sF=c"\{_uRm-Nͯڤ(ۮ6f viwMzO'ha榛ny婊=lz}g͚NVQrMyw͚5a ;{8`1b<_}chA.8a{}G5s{*t48qow}I&[lӎ6o~ /pw`d V|甅w5khqt5j=믟xGuW=Lt+zoC%HK~Ew}履RNZƍ;UԌޮbb\JeCӢyhS_}_?4yW>VZmx饗&LxGG/1c2vNkn`KhITAzk\rs̹7nO4ihvAvrM꧟~'x23mt.N8ɘno2=_ze9{}RX2o};#cŐGqi}{>+]jN~ŗ 7ؠt#W\_6lvo-ܲ馛̴Y9KooC݆֬UjPԠ5A ~L(߆lzƙufpm.]t2S!PyR@[uRyېoC.8JoC݂,}oC*+m¡cΛoP0dp xEJ8< KݫoJIBP¨«Q̟P}˓@5 7ܤQov.ݰ(dTyTJoF~p3er|ZT}o楗^5и[T]?܄1clf*]oWwBM^{nJ ՠiԨSO=էZkvYJâɓ_i]C <yUO gr˭a:w3Tx\qNdưa#RLoƨ^_yeA]WE@\w]?7dS%{m:)BS<_22C&{_Pf7?(_`62so}篳nZmdO5a[3B'_KܢŹ&=vi'qUWM>3X+د__|ZazaNz6RWԠ5A jc&6h~=znCJwK܆TBm⫐ې{e}01)ҾRuQ ˸ isRWvs) ,XԦM[KAPZHaO >R٣SiKPf8H&Y#.\~LR ,?d*Y|I5]m݄  6(ٙ FFx۴YpM+o{nB^6H)ק~Vek_駟~g'av4iRϞ=Yg^[6|L>л `?»TJʤSN9my8VwΜZZ̼nx?!3|SF&\T&M-S1_ 6p馛yYf矣\qAʺw)|ڡ6[ 8̛`֬9ݺP)$Z%7/e]u7^{$C=4t0Q?K;7 NyդI{%z/uOOy>?~R˄5G5uT+gE.rC!z1ǽ˭ZyI7aNh|e]A)9Q Ԅk-/y7= /$d箻nc2UZʫ^o{} @ҥ^&6rhf^OQ#'>߾}W\iu7Xw_z;fx S^@Zn3u+vp'#]ؤ|r͛77/a!uRSO7dᦛ6gk dיg=iҋ?koƌVZs-ZhΜ`8|a駟rȡ-z]3{)S }P`t8fDF1O?t޽U?뮻nӦMzvK]{0WީFt2^{{o6{ッOE9s{wɐ%KI//ԵkWN1x]vС\sKQI'lRtxu  Pe^2 UUW]l5:f/8C:Zo E2dhnXXڀ H4m>0.*Y{~JX;3?b!rK!DPڼYo'>qVm~9?˯Lx<`n]ה|akS##ڊ.8!TM5O=y=yht5;@MYsvjs.ń|za/ܯ6{サtb=\JaNjH֥zxny)*QΝ4ɪ;A^o~Wtᦫ~WQmȤI/6%%[oHO?LÛVw駳tIҋ|ĝw% UW]ꫯ^}f6䨣O~ې&M܆[ osՠ5A jP6d<碞}JMSס )> ېʫ'Ak]\7!R诨 JxP98#8JO;U6l7q cƌSTӧ@` "<ߩQ)J"A͠nQTϛ@z ~vz  V~O )[Uߔ)j-Lq B奲ACNPIB_FvZn5#Fl馪wYըQ#Y޽/S̙3g]{>k#n*7 8͛/hxly̙7୷ުWTk^{(E@|՝|$,4>ѣGo >TTFݩS'x'(;w}+ ]tc'Q\}A޽`W^y1'2;vֵT&M+_oÍ7j}/vM7v'd,f<= {#FjoFݨf͎1.]ZV1 ֮XbС#|M6 I'2c[m۶K)}YQ__w _v[^"dI$4Oo.PtW6~G\p+>}0:t=Vz„ U^Y^WH׹XyW[mv /@2 Xc1bT25A jPԠ5a 7d:e>ûک]uRoC*AAB^L6$7 mH{1K rٿRۍ@*?6i}~)NTAN܉\Mrm`QuAC.i^1k֬9 xː!_8r:TpWqQɎ;R:+??".vȑ#̙ݿ_QŅTBHUѵ[>W3fG}LQ^ziʀ=lJlI={vÏ8uY7zmtI]v9sСC_1yK}> O-`D]sM?/1۰V\դF7o Xl f;sY͟O8ԓW{k~ͷOe˖gq?ǟ~I=U'Nd)r-| 3_8Ho(L* HpMgQx_o{G9EaY?^{}[wM7iZo֣G~Q#΍ ),_ϨpÍ7f"CnYgIB{)1Xr^rIki&:ԥUhq^g=sS![*? /l)w}YYKOڶm;aDC$Ff'D"OO?替nLB.<x'P^sOm$ywᆪ:3 |rܹwzm(++oyLǨqKC9,)=x>)UZ[Л/]v]^d& ת{3OOgu[(zK}˖[hZh$ İ un޼~7&L_QVm|gYr0RM^|̙W]vL_v駟^`y뮻AlPLC=ҡCGf4T_cƌR/XW^BɘFf|# aѣKѺuH6Fq3ġ$j}81cy?z3wq/"t3\pz/2yBmݺZkzmQ6gcɯE],1]9jyz4Ӥɞ~b;o)Tg͒gyz|'˓sR{gbQ.\8u*V3<["fI5 O4&#K@֭۔u 7xiva?\ʳgϹ{:^sN{N\k$IX}zZ]b^<2Ye,-[pȷc)eQWH1gƬYo}ُ_X~G?>@SEP|GyLԯ6.-[^gϞ'Ehժ1s 3dL.\k;7Zqŕ۶m~BQ^=lpQ+I,Mo|)S~65A jPԠ?ڤtzmX.C;wұKݭGq(? )>nCk?+WB%~cIX܆B߆rOA|-L;j|h*X<جKaKطfۭ޶aíZ ,X~۶N}3̏hJ^JBZ 1v%U]tYeFo8EoRIWO>u9&#?VXƎ^W-s᝻}H6dɳmw>6$X?WTnCJzTvаV?ͨ~#~)XyBz\&N0kPNR7XTQsSiAqǝjL8E qj/ VjPԠ5A ~tpx͛uQC;wک۰]t>sDb(U]xyeY u?UHE`9VRa)7# ܆c^k2)rT{j\H(*0Rʤ s"6+HdRw\5?!HeI񯝴M.riY73srP}dA jPԠ5t :cݐK@UHL-?KP|* Y=H%n4mݮߒҾKK^W ; YgCT F.u? hԅT@|W;Qe 'Քy{~v@3: _ 8)܃$q9oVFJ jPCW5?vuQC:u-߆tԱS]V݃*Bn  Yyvo@t_߆|}ģݷ7.i{]H7 묳fmΒiC U!\o LBdJp` Szՠ$-WיY OӀe}uUj9Ԡ5?1T-_kPc`_mɦ[4?mHBc6cvL%H]5]/_nC.rgCئp/>*6d߆^{VvxuY/ExOF(rGTG 3鍨\ kZkWU’\9G'L<"ۓ<Ґiٺ`c',qǝUGo8LTGN!]1l; .T6g# c,%8Ph` MTkF)76Urӷ馛nMctSHFT q Au0TKjD bXB X ɞfS% 9 x DK u`wuB08,kOxFB{bjslvegSi}hgQ( (F]EFdN[hpdFTJF`4sH0BT-2xvwnX@{0'SM,&f0!Ў` !jg!_{ M6EK)FcކOl﫯>3rz+zcZk0x'_yԻ:?S rx_mBm\:oނOo 1-Η9G愪s. 2 Hں¨9yݟ}6{ӧϸ F$r{? j߾sF xEA7y|ͼy?G -z1`H}6޽'8Hh3$j2dKB䄫gkf͚sG ^/dzk*}a-h"'*а$6B]xk!Q@0f^Yf/q1s9e LL7=ܧz $hzGH$@c]tů fϞ{pAkcOxkQ`XU[nձ ~@|ȂAYɣ>x"(q„ 7sΙ;wP ՌQMJ@@_[67?sV 1MFb. RT3 +8vDII5A jnkPc`ې;ernC߃Kކ!6trmO7݆T@YǼ N<3p`G~пsvYRL+r?c!f͚H/^C h3{sG۴\p̙wk0\9WT}=$+Ϝ1«ц)a\SG ֭>Mx U.9r`5׆힌WoMOB .@W|读W4=)1j/N;`k4w߽*,(Q0;٠"*@#ѳӓuu.@`zL{X^54؂ߘIӛSD#6S`[l7֯KVF̉(a5[=wߝy뭷ޛ)LVXO~ESZWQ,,4/māW^uࡶ Jq i6-}Iv޹Q.z$,[oEX/X/Ye#-Y$Ul.2>p+ХɌD k]·RԠPY5bA je݆\i` 4^, Wt迴ې܆\q]UH56/[ ,Uȏ{{1k֬o„Tw9ώ gynȐa yNNO>.>,>쫠u ȸN"s}H$ip5n6lv;de H=87%O5|}ӛ)^ƍKCFQFbCt.m'^ve??BИEi"-ⵈ!& `] Ϙ# 4vuv.iz6"$ 4O?)V,Nt>C@~%\FE2kZ>XJ+r0zjXA"9N1S=2dh"tf<ÄK}=He_$K t^* XRDOI.dKkʔW8W\׭[y~>A1)Η?W_毉zgS!!SM zd~˯tlue]랛oZqT9-/|a^$>m?Ww%q-} 2򪫮օ劜{U#\ΎhN>[oݦͥ9&{wߝ_::JB}w9USA?fƴi)Bk$䡇7ޘh ^h_~?Ο?f^rIk,VHٳ.\HɤR"Mtg ]'|*uadΝ`7xSjqv智TVéSx"02FpAj9`"vg&gXT{mv:嗧 @L) T7xΙ3Oj'N:%g ax|{޼fxٯÏ4\? /L>3x^zgis9W{',b .UI/<.t5^@8曇~d JW&NnrC(N95ʟΜIg݂S WQaieP.iӦ &&/裏%P/lHzZ~b@#U=|!؟:t81, 0:uA|E[hښQx[8"_[YcժHP[AtuԽ(obըQk#Ffկ )sYn(vUW^{C(#/Uڵu^V*q)K*z^xfݻOEtzqa;U+렸BEY:zZ%rZt: /?Upն2B$lDY҉;p-[5D %J%A,Pw[o| P*+E%\jQfuA#G־rK=]yzvZMĉ%0[,|Z]<%j)&J^[eΜ~_|Nm+JWdHF #L zW] H'd Vx_5 +Y_ݚ JkԨ5c[6KtrT͚uOjjq0%M!$0kopmusγ`ЦX(L v!FG8@Z;[l *キ"zHLH5oY7oڨ=̐coUkUzk}q?3{U3Aa-[!e)E?BHf2~˖-キxҤVsEZ%/(:u"zQdqǝ`ws_bJB|ݍ={lb5q)S~ʕvY/UrHW~I{9Ul2eЉifxu6ۣG2;>3I޽{njyVc!l0񒜵j`UO?WW72DKzb<>vO .κݻw7iTMv{wqZ ",?v{ezXWe3DT@xJ _9A Y'9B܆q׃zFL6dpC6$B$0_^|6]NJ&uy /A_\$$*dk|آ,hu[#}E&yܹ=ztWhJ|="5txMWͧATju?T* :tHbU{ŗU!PeܫWX L۠_h6J`ee`4o]vamwܥ!٨s_U8ұcgrY`Qh_jqvҍ1V37|f@aJ~$p_ӧPf0Ո[Xq`?G؆}b I*uKٴi4&O|gX \,` beΝBl2?ut0+P5jrT^zyÆ8"'|j-7mlf1JQ6ke)O8E,`' FzEɣF͟?o„ Qq1p-FVmh!_Ν<Ј?2LfaNrRqh t9Ϳ>M|yfn??^,5k=9'p4C&,bB)cO94ּy (Y!Ph< ᾌ0U0i n5ь1rɒ,{]R`$'EA|5ɗ~¸iӦ}9ӧ#Od{bN[ߢCs pT#.[Bw v+{+3LLCrjK,\:A拕]h'Ж6 I~ `?prY~vޓZH- &cСOuXYưʚz2w4x0.g8(b:p`iZx q{D<;wNE ] Μ9I09)7n?%3͘ňX@HHО} 1!)Vcƌu'ƕ !K:̋xFC]׿5C=L6mƵVܹ$XŇmX6)fs[k7^%թq`͇IroY'9nCtwq!~*N]v2S! cm:mqHU8|տ۪6mj%HmX Qml׮]*U V=(fp Fn\EB(dE(2CjSUmdrȐa$( TSTt 0` Jd&VbJT g(C@e ^~0dƤISԲLR2IORXa2ܲeۮ]{ۿ}NƓկc"MfB_{g* \`ƍٳgĥ}ڸq]w5{ 5bcOOΝܹOdo^ئMڵ[CEH*iy≧TLHmvرk7oѣu6[.h__6͡u3{ݺ @g?"O 4RJwȐ!1K`Fl^lX- [n.@`x%j>x5 <ԯ;q{@Rj֬=gλv'*4uނ=̖\gڡz޿?HV!5kY_mvE)7ߟ|K3/:gŋ2@{bhPXw7B#ēĐ.vk޼y:u<ө6[jũ#Q_-+_Gx ڈO:-4#>}뭙2Wh̄X/ bոӺu[2!up^PM1?{v{VVEp$ p+H`&ǟx`"SQסC''?s/,]XS'x q8DnF, &f9&.;0o^NrdqgFL3f={٭ {)1&˚@GyB.Gz؀^Em#tY4u$8حǐ݆d‘ېaIA!}0u|~QזctbX58|ss $~jag,_UV4X bL<:g]܆t;}L>`%$$%J4fҔ)ӌ%c [TdڼlgFVC!ks5dB{rcߔ9/ݐ9u>k[B+9SOCס muH.tԶK<ߑڪЇ&H[wҺ퇴j78fe m A܌dB!cO鯦T]xaQ(kժa(n߾SXT*ܟy90T?S$_؏>Z=(CR+ץR(Q*Zݠ_vСCYc6PkRe4?2C; qdQ(gt!Odx\uu9ոK.P7Uo3gλ=}VSSJWhn=#n;vR(*f*z$\cf׮=" &@۶mۡW\j ^XT5ɏ]z-fc Kif;w'Ff[w!‚XoC@y IZ|hӦ]ToR# &:1p{7kJcQ b5}[\b uW^Vp7|kӦKk$h lݺWBlيp\XDwq׺ujYY?$wؙp]wQ_O]c#H=zi/Y+z:I ^{ꣽ(zH ]&&ٳ 1 >bɒ% G'$36meguv^6lX߸=^Ѣx&Jl.].J'L{Ո߼yKդI3کSUO'eRU|~ ; ԡ EwܕLS¢Am߾li5 ܵkwG!aqŅ8O w\`~JXaOʈC2tͦ;%,Sit)}uVZp72eTw%G1uwǍ_d3|z㍉}\'|*K,Ƿ-82W$7X_#Z2.G$-X>PW\wCTw80rj4+LvY!8O>4w|7_hy-$dW DeƌE V\rɥxs/L2s91Õ7,YŞ!+s+$!{ }H6$}}9rCZu*ݐUHr @r H_p|/W{IUcf'R:^YŪ ^UUE~/~.' >ȣƎ}Ccƌ:^˧1{oK*|]2%Wew}5;v={fZG UWrҥRkes_Uի(߲eVJ9ݺuI^ uȐae޽*ITvB!bV f9H\w ! Y7Zu}Oŷ8s{wPo^Vֆؼ@ZbcrZO:N"^XGy^|K/WرMvwy׸q/nܸFZrZVw~_ 7wZ۳,)>a+3ՑdppG6o*Y{|GxYfq;lǯGO4A!ud)!HȑM%e#/Aڵ'nhŋ̙+4#vԩ ̈ak!bk'7}.8$>B}7, 9Ar|!m: >Őoq\mdBۍ@q^>oCR(%˖-V/&۟:uzjbE4}SKX7dT8bk`W9z߾}?IMz~: ^ӧ/] ӢE/ m߾S߷o9s 2$nCF#X* FekBEQ} 4Tp?!T踔ɯ/)SΝ%v[#lRZ_Q4Mv*iqk׮'iҁ:p!k}YpK zrXG.xc"7XSdNLY`ϤdQ[bѾ[`Z3߉mhJu"lǽ*W^S̀ñ{}zOo~21$/!V{81 ~+VBϤ#F8>ZM$QrFH#/D匁xjP.].E.\dSh׭h9AӧeJwޙ^Zi qfg,b ˒=8 i;!V~;ZxWa|oq'a]EV7oǘ[nG ,駟lx ØS6,_b9UGT5kǍ{/s^8 uSbH /8X\g]v?Գ>={RuY%/4>[kO<PZh4ZS9C;_hIbNlF,ZGN0u䢉ҥۺuDJYM`/n^'F`f0 9r!r~sj6}? ɺ 9t2Xݠ i_uu,ȤI]v+THN;KT*wԬA̪^xaQLf/DSѢ!1HEsEv%zkvڵ=z P b*y) b-< 3AXPD&Ē,}D؄ Kx˜PVх z(Ma<c a9 /(b'4L^ч`4`7 h'?,702/LDIDATyĤ8ČǬgD3W8haL LX(͐dKg-õ]- {,u9ArmHC;w!v mhW!_ކ I߆ V܆d^Ud]y$pxihKHi3U~2,G97Ie. 8(4V}J:ҿ9By LrMeq©qJJyzz^4(Q^Xx}=аa &_J*!64͞1`-@,Յ_XiLBȬk=>:Ohk ^d"1|HЎWr=5*DK^ A"83…271 وL|1 xS^5L\K u11HfnȇlySa@@{>d c10"#A*T,^HSX >LM<5%ž(Tg| xRZXUM ꫯ׭{kVm>_/@#7/Th@"`K;@s؆^c6 B)6@C2bL!aXerX`E D%ɔ]f6R@S "I CKpF=, } u K &^ A2YC Аf%p@6 aFG=H,$ǬkҒȘ ! Q*q!!OȀp$ &ag_p%g[AYr 9 6$ _~7+!_ l#3FOCfI2bJpXJ@0Iy!<23ƈAcb+An"C` &8CfvȐ` 2A >80#m 5f=fd,%&[AYr 9 =7qҩ7 鐾 iyP_ ې#W!6$$d\dކ|+!W]uuT6Q)z 󪘎=i|>) k1 J $ApS}*cM |LjIRQDۆ _!"6IHϐdAOp ސ LB YCA@煇)_2P(Z D؞+|LkчP5!x34 bH b }Ĭgp1|Ї q('\$#KMЇҐ`f2؃ЈEM%q &ļAl!< z"31¨zccB8qkDxa>,;5X&&}5|BqʆL NCqL$DgZ1, 54F oaR.d0q+.,a "'E! q. ? hJck g`T ȌA`( ѳl50d Ar 2<ȾB-.q1u^P^c,11 9Arοw1SAېntԹ̫б;2j!m: MNC2B-!Bd\| _|!wIr7QTTHQ/&0 LuR&DeRMB*8 ЪW$0r~,Z1^<_aQg0/ 65A`?^,D xfQ}GO8,"^,@2Wc u ^xd baafQpLB d*f=.$q0DAB0A`FLy@E&sE-%p n@C kƞLfLq^&dAاaA2BdXh+Fh,f؟~֘ 9A~PnC q~myhtv!Y_ ~!*TTEN:I%NGQ_H,05We x+dzLoX1,HZc^dk VrR22rA4hX`T:h AE@IBB A@*t-z19U'L OrbMqIdïcQxCH$'= ƉaJir@üx5!! qp Л`<km $CW8L8򔷄C8 D?"I)<l`@Xd1k>X ,JkVC5) l$ | 8 B^,& >R1 sB@E !!D0V-V DjyĊ/ =Mi,6q}as$9RXGȺxJQShг!q0- \c caZ/ .*m5̀.dWR믿.G`d cX M",uUiPe]̚*Y2YD;'$UJעg'K20{05̎lnv[8|pnw6i$?;>@Q%\LqrG8 w|B q]}u%#6I\cg~2c]~&dBdO@;KxrxOv꥗^:Zrk֬Sn A9omҿ&G#F_1Gar7 6u!; {\{Ҽm")*UG?8{Gy4裚4iv'{TNGГv:8p讻b, eLqY}q^xh̤Z`05O'|J}wPMefe۶6l-A$y@/mÏxI6}=`gߵkϔ)ӯrldO֞={A~-z1L%qUYd K 2_aa[왌Y 4r ?:8m`mH\LqҺWnCeR)h0d]m̏FpU>͚(UbJ]T,$!uq瞫B:GNR* (zgծ'ʡzz+^ Z}9tp4V!ɕ9EvHХ^Nx`˜Kd;Sx6u ~;6?ğLFMqf$S0ˮPj¸k. 5ė_^W__}ghē|ϲ0|, c֢$\SH>%3aLmpꩧsG6;dc%2'Oλ?pm5! #-[-[ OTN`.]\d/~0@L@Y ]w MnNxNiժ3 #F yJw*_`Umݺ}>6le˶'| .2MB@") &0j֫WꫯNk19pȐҮSn2xfĦ*9P*y3 =ifX7o }^vܸNa]w08KHE4bAEwKU8^=X`E$jd9Aro6$ epL\/$!GknCZtܢÏ6Di|Ňz}'z( F 7T |:K.TU]yE-WJ,W]U1J(#0Rp+VRmyÆ(]Ɔ$/Fu[pU L"y {lb*H.Pw%%ХbA\f(XBc | QRdNq#J1ljbMfD8SR^ŷz\rp ٰ%<|+]Cو-SEK P  '^~Uau K`DSϑA^FI Y@Aa=FǮ ewLbqL)Yh*_*a*l#*~"9ˬg vΊ]"%HXTie1$iX,4Ylų>E^l6\Rw$gቱjj=Y`+V|@{xd+2Qd5kdɲ{PI4^&M:uE ]iz?\.W|fji]׋~ r6l„ygri-[UwH3;{'Vaիrgh)5{'djn?k׮Kub$xkf.X&N+EKĂS p8G,Y2g?MJ{h`z@z(F+h'D`fH:F˱;N]%J\~b㘥7L/)z&نA 1J.d ^/cN\J:鮆駿/Qp{4YpYTqΙ3_~WXcǮCxh&gϞ~F}ZL_}]o;w޽{0 4İ>dL^KM $ Drj ,5j b1/6)ƍp† *T.W d<7oAÆ#702eN;T0Zg-ZKa0e?%/#_&+3|]y[n ,xyl(I}=N8$0hɒe>2]sY ])׿*r 9 ~s~w xkq HcuH0}p$ u# UȐ̿)܆d~=eA &RR$hv@6׬kcCնw$ȵhkU-(4KJ1eXb 6ԬYK/իnݺImk^\j,BTTxڿ[nWlyA;dŋ_ܰcd*׏9J{PF-t eA͚JUuє^/3OkמFi@6-_ŋ'pUYtYEYq߬Y a|bջSн{| /,7;2]לk\-1 W\rJveŌkʕ^zkHtJ[p%s޽^z *UJK<3;vT:u6CcuuTզp]Vp:G72oj%G}`aG^`T"?ږe ^5VDxcW_}]-P2iQE^Fծ]μ۶ma-sUɒWkׯc6.ĸzkv zZe>eٲ:I,Vgy^X*UDe˵(bu]|% 6ZtرcKL}!/5u7|B+*hxN94)v^L4l D>zm}ʂ e- ZY[n ( ̙fbū"s}u/lذsw d8q7{Z:1J쁌 !3fZe/ p"XtʕH<ల^g)s~{t,o׮]#G,Ydr,X;&E6 )N<šzɧj?6[lժ/<᷿=yߎˁSTPFm5vdTҥKzm$m"|f*[҇?_ϡC:č 8_~k׮]`ÓbznTKc'-,\xDʨh"4Z>6XpqԩҼyKK IBo~q/Lr*&I=+ D={ =G駟vYw裏J{:}թSwOM2r  1$'|a ,5jԲ/eOklrȋ S~~x?8~Y-Zje6mJ*%m6l9cDH ܹsW'g,@,K$%)/|t9>_Hhւ~$9Ard~*}܆$}Ǒې9mHgfw6D=}s'.D TVF`QϚ5륗^o-QĊ+_PKrpj>R8TH2Z9QLtfOI8]?ceV[;h\LO_L?SN95?f,gDI=FXK@ǻ|z YRU#õvG*ﺫ.Qk'1%yE !A8{܊+^xᅿMS0w~B-[2VrU߿/~qgRd+y[lԶ"&:u6t9wC҇f-F!nltݚj^μcgvi::s|h5hpvQVJw'J"܊cŐ[=ē`7n͛@٫w7]ze.]O?jذњ55W[{ݍ>P]Mvɯ[}/d-8XD]l͚yȪU>kGyD_;u$. );v\|yww Nȣ@N8$y1W8tF)j E'q8ŋq/VSa$ <#>@$<㌂}ZnsYߔ"JG?v[,\x8ӭ5} fXS HGl՘ V2!w“YFe S { ̳>tih#/4yNUi=SGx*Uq 0aԩS˗)Cu/4յZ;MC+P$ݰc*$եK4i .zM_yהx8pOlŮryӦ-,2V:z-{ɒ|󭺋 6u)%JD~!*ݽ{, … w 8xSzZ6.SJ|y'&7nҜhQ.שsgڱc7ыm\dyb5׬Y_ߤĆ˴Ɍ3 TpW]t뮆ZnkuA& 6Iǃ?ټyؿ`oNSŋZj_ k.]"UD^~<.۷hÕ)Agjv矋4łFV6{le_"m?/6Ž۷mB۴isͰI-^KmnҤYA lyWp{ lhfɒ 6<ڴi׿U3m۶͛w@><@~l.h|夓NTWY7T7SO5h}w#};m? | k"0j,]J;zL6#MӟYP-Zi\G9eʔooPᯨx8%T,_L@N:__|wǝ@m߾zY[oO/ LtJܹyn&[PB͚5?~Æ~򓟎5ơ䤒!/^ GL% ?!Q1't=S5jԂ[3޽n9OHժYh11]Xb(pFWXqwT̟?IzӦp<# qM7riK.:tVK*c^GB (2c| M.2G5{\L}ŗ .Ww(2DrK>b$i}#ZO:ѣG˓+:3ƌ3mڴ寤7'5t*WJZɓVX:cԉլY}šb!^?͛7w"2 MϏb\LKhOsc޽^>n6_e9Gl8meb4,:Ou*f.d[9Ar6$㗧~6$KC2B0Uރ%HY2ȄmLG[t*E v__2a)QĬY ]!_#2sQF]pEQcR[z͚PWLr.ruСՅh.OG)*zg.\g*T8w<$!@}-Z x6mj-[^uUW^MtKO4xO=t5-lȌ@&XzĿ[Tk)#^K6j'I7lФ^l^SE"ٰryL>_?/BaҜqƙ wI; #}jܸYeeE3>| r_KIk>{i䄅R wEp4'?c Xt8 <N5>;%3tr's6rKO<N`Vڐl5(OHOr:td+#Z\";slE2dc"}X z~3$LIInF'|J\JG>}=NZPp[c$kyڗ^Peק~ˁ# _eV;R#ͺX,^,8(Ux2fSΕW2#uq9\KWw ر?w)<ćԍ7d< ECq9&\`'-9Ar 6}W!Y!m ɺ y(*݆ -BuyoQUxw*7P-~E K7)Re] Q`AP N}K%o~*E_I98rVWz~\ 3f)4:/ %x饗-`|4` zpD(Z\je-яBLD>UUa-+V|˔<[oK`m*M[̸4jqmʺ^z[lSI$sCu=ٳT2YYhѢݻs9:41:(%~j]GIK,Ҝ{EQ{pB9u,$]J𨡭fi͚N(EXw1cƌ\څ|Kֽ.?oڴow^V^Ï0O Ƶk=oZ=̂g<7߲l֭_v= 禸=ȣV0uXZ-SKMe>6`&V9뮻wj 8X\uӦ]v=㌂ JO"hq _ܹƍA!ʌ@&Ij„WmctGb' A׮6mԨQN8Yf֭v5jԒfiidIgϞ}ꩧ2rpܪڵ,^#C}rء_q Vۿ@M4ƹHt-eAr ?L߆<65GѠE|ېmH*U_5FA;{oGyeW(Qb…cǎEKO=TޣGoS̪?֭jfy/QL8T>%Z ~۳gzu\3hы!<@CH(4b aΝ|_ڵk h+w%K H'!@Slݺ]^{c-<5۷"fL8T\:tYxM[Qy-Z#F)M.XiӦwy{1dJqF z ,w~_i٦ӧ/]ƍ{q۶w^~.`8"nT{C5ku6ԩSW+h ;v"Dv痾Nnc{i2B:k7#F]/3Ujz-Ν9@YmxcZ(\~/o߮g[" 4X#k.+ftqb>GWZCkZ -Z'j.\dРA ,U6OV͜l2#G(Ap1%J\~eFYаl+ޱc7opG,+Ef@ѤI*i|ɧ{2RG^`|@\epyX+VLy5{;7PUt;vg eO4:uԊK )b^xa< }|B;B8=9a+6.fabh>4[GO k'Hbl05}[cI&D|ǂn!laX+XĿoBf(_s 96}6vX7숫||ېG}o!9UV)=7.G Ea#vڽw^m-[X+F?|yZ߳//ۗpnOqݻ6mڤeVgj{Ub6m2wVuQj_vzm[OK#/z{-G~ҥK( =3= 8_-[~*`A۱c_b vȬZOQ.fsN5nk5j̖-Q+aTr`D`ʔik!nٲe+ /^ҼyːLcԢH*vʔ)s9S?F4y6m Pz@)v:T/,/,h>6hc1xubEׯΝ;VJPiq+TjxGD<1ӌ{K&D42j۶%~gSYj|S}nBgxSLH+ 4 "< .7 6臱L>]o?A"gU^wW/:a+ŭ_5?.Z_߇6 {ANx;ShkqǝR&Md9/1 ԟz≱v{-Q# -7|… emݺWӦ׭[Oګnz1Ť,H,cqwIWRHl/C"_:{ |~9u2Ƴ0 1F̰͹)h1Kky뭷9} ^Ր446֭[-J ѭ[7Gʐ!C}WN.\83O,?oOXJٶHHѺWWB%KGC o^ܝ(:x"%iY{ٸqɓ'wg'LPrwv` v(6hÇRhO8kTp:~{VÆ Mـ(xՌk\:2_+.~_|f1gl|cAv8r%S8!IPlzu88#<*T H"B{}/^.; o~۷og$d`< t q\cc #&ڳg/\D^s˗/ON|&b">zwIy%zwșʕ8I#e֭)o!de_[9ArG 锾 I_|ېw"mCXކ$|! I!&0uO_64N 2Y2_EX a#V>3(ߤPʄȤL^5{4 &\Y&Sɕ]x]@Hc]NL|9|7h|sܹ6lܲeޚbJAG@"<.$yA&h`*V4ut6s}͚x- |0| ȗ )w'…,L̩c!-L ƚѢCz1xMfUd&b3d(:,WTީ,iG |j*h̼6e!z쭷?#bg5+{ؐḟ>Ku&dJb@"6 Y }&ѸB^OlKf3Ȕ%{43Y!!\(KW!Ar ?@oCt 8h!ɅHhnCv!Ϻ Zҥ˾;v> . o<= *jn8q-v;iҔ5jAfQrfGmoNj,oN&~{ ,b܉dR_  jٲoLŤ~%Fz+9Arz+_݆B$wA EƟ7v}tk?VM@_pE?"_ >_qsQro_r 9 rҡ۰]v]ҿ:mHNCtJ]_ 9څHr6d@6WIw=_o܈GqQUP !VP8hraQ,G,M܏d ?rSr 9Ar|ېT~Һt w" ZdIL5q3xs?4ޞCk`HnQroG* 9Ar/⯃mȅ6$em᫐mLoo@*k/Dې/D ݆2hfbEɿW/~qNXd5C |m:$ilas'9 Yr 9@g?6SB$$ F#O Z[h_.|VE *b?5hgU~&M265 > d&&ST@pH A 4-Hm !#Jߤ31aFA ::ˁ HhXh eOckKeLz4&Ҍ}/% 0Lp%4k !L5bû10 2X Tj̄* &-A&d2k8 &5L aaI$_+!2%6>%B]&шĞ" #ɚJMhkb3*`%y y!= H%<ՙ5"`^h Br< H^ @bC1BSG E/fɌ !/b[xwuS INHU\_ju!l$*믯ZڍhLa*f0 c&h1x !T2s 9A~sw܆t:S!}XnC]!kex\d\ 9|婙{!ReBy"k&$Yвm7o׿Eeu;߆DQ-VSѭ[/ܷoߞ=^|e ?LDԐ(AR"H*TO@gc6dOk4A@`H&!(d;wCz#c&y "03 rYTډ'Zn /K]ZX8h@@ٰA[\Af V|ܸ7n x;w^1 A`@SYqI$zaFhBjn\hqC,`kbgqf7(=a eCc"/*Y'|J`Įݚ5k}> ~X-gݵk,[EU@5kg/$`BZ/Z)RlÆ6^KnݮكAgƚs۷o?*`#0H +zqBLjq?B,/ F4^'cDB(8K @p!y fMiS? fGB]H C2YO?MvK,㎻ hm۶ ߿ߊKoK"x}P bavn w~I'.\x„ N۟|)Ȉul.]|yŋ_b' e0^c!|!7M1 `1K9{޺uN2k*Ƿ0l-[ 66fIb@^#ҥۺu8贙4iMl$@؃>E'yڡx'6{-뮆X" @d>)__u>3k.P>* RL 9Ar૷!}hp^e~!ǀ# 6EUHC~ېjʨ  G%n͚5իW+Qt۶ Se3hձxUbGUO{"*YeiҬQǂ$EPHW,Gԓ@P swL/&jMשXm_c$2_lԨ1sλz6kfͺuo!Mrꉘdczǂmԡ ձ%bgED>9Ar GnC:ީǼ IAې#"C[woCZ̗܆ܢ×?,s GO$W!e,?| rotrTJF%` ~z腡dɒvƿ̋/.dDRRJG]w.ꫯYj nՔZ6*T@LZj;L\~y)S]w·LK/իh*(pՓc  X^LRʨ z,*Zn|TyLԇ Qf[ҡC'<1.]Vj֬xHe)z֨Q%#ERkQBEFƏpٞ^lٲ1Q*WbūxcͲeSqyR!ժ*|oaEf}kbMqPxZ|^%dp,赺vif!Үt˗߽{SO=+4NSN\jM-]܀hQt)Z+>ذ{kzY-[M`ؓ<t~Vk+j+ɧ*Um/2* ^ \"=bXkdD,% =YxFl=芤~ZT R!x%Y_ !?҃/H H!~-38%^Ј%/twy6\,bqŋZg!#euX͌`ҥ8 @]zeq(Fȫ8k @/,$a<gE\ d,JƖRx2QKq٧%.8'|JÆ -[v ~F^cGXŒ|x~ߢZ`ulyS &V`e4lALfG?>c۴kuc<<, $0h"Oxb D4 a1sywAr 9}yҥې÷!=g^|y! IACqېLdvg\!P-; nC4N>"w_0(!O?tq/,հZY}[3x&M}?xVSeiJU+m۶cϞ}7n"D!N[>~K|VG%֬b]yk׮=Xv}+u)6mbzF*'MuvSأyRhыڒC>QҮ[cEfͦ7ܻw/}e ,B mV}&6 xYZ\sޱcgrI|8xֽk"H̛7&$پ} dy'Տ<ҏS<LmifZݻ8phu`palذe+vBi۶…ϪQւ3,pD#x YnEt ;ׇlӦЇ= R&D0rs.7oa /BFM5jtϚ5nk={XxɐӦ[+InV֪Uvn$q=ͳhѢ- n^t1o߾?qJsXNE W0UOFKTap{w#>xHh ku~%vuݺ .olؿ…s},up:tȢ̛J,ej{pv훖,Yeʔl93#/nzvZ4"'Ba˖m\~7fc2= ``sҥ 2R)U4my?yWkq}jWB֭{ ELF˛7o9VH!k駯MΞ=>ܹg2G⋑#Gq6i޼%3DR9Yfm(PPC#gĉ&YҶmRJc-$ ڵ{Ѣ%/4u붢m+p2\yeoܸ}>h-駿ab ,+J'!:uqVԫwǟ8p`ǗU~)2fD3CN,t_$s*4 6j-ZK.lc4d,Q)YD/˕B PӨ3|o*Zӹsߵ6SO=k)SN!gϞ[tY K&0Ϻh|~Y'$\ؙaMa Q-@Yt3RF;o40Jr!OVҔU`6BzاOSO=]je,8b Vsٲ\VaToo]npV%8r[lMQݮ]yDr,H?*r#~d^6ɿٳg .aƚf;wxYA5ÆxR4q⤅ > 4xyw}gϞ^@(QҞv[Iɼ_R9/2f (=9CwY?(8"c]}u%A#mmwxES'դxV޸7xqY]_|q@'&O_GgE:xS frx{S.s.wB?ϖ!C~E>e}#Y4l 76,Fڏ-#k]z sDr!W!yoCHnCeo2Y!)dK/A8r\|o~UcjJ-G{ .V"RxUw2~.ZX']Q)aJ^թ:|"UIرO*ICfJӢբu#ƽKWO(M)XjD_LBTi @ ?x#Ǫs8){x]o~'ԡi炗,+Bxj4e32)^uZ/ ?fZe&DwDC1URE)]T{2` TmHKWo;1rXGcIzؾ}GyM1Ւih-[Zdi۶Kk튞RČ". &.TAOQf-"C@c$^2y}?x-j5K)뮆z; IH~;ēKѦMf|f^;tD =-uªPkZ01ʕ3]M{y=>UWUԩ6kO-['z뭙\ϏU77橜7"8R׻w}ɧB`f[W =g?;ΓIM /F^I'Ү]1lӦջÖU6r㞢x?%J"{t鶿VӢx R6 q'|'a{qEE40^.<#+V!K&+$WV[+>Sҽ۰/39`sdG Jĉ^{ &sѓ&M8qbϞ=gN(y`Y5j&hBV@>sK鄋w:j׾k45q(Vlq:6l 5q`ڿHK.t2=z:tXtY!-Bl+1mzpҤ)7D^ǯa!i= (?DvqÆR9| xdѣ_1ur'#b߉U}D>8K*q&rX,ڼykVy„W-P^}U=}rvVU 9Arcې.݇wqې] iyXNÿmH)܆ą?{CR7'U*VhVV| wU/5kرO=ԑ(4+5uJLT:=!!JEy]e[lÎm?V*gZYN-[/FSXOKC ʚap`߸A&2Z)&I e1Qvل%Qx &| DPo߾O>Tt8ZVdwBBЭ[S ɓj$ g˖-< E42ғG:;wY0OuDoчL0ԨQKcǛw'/~A 𪫮~Y^ƁIIWsoݺZ >f#¸"JI+;wٸcYs]w5J%JjUmiIKw,fϘv|7$TS38¶a~)Q!]V=$37BJ-[ݻoݺ9yd3)Sӻ`3{c9iO>TmPFթS![L.WJĦZjt;ۘ"{^0rd" ;<.ټyŋ׫W?Eq*"@c9쁱;:c߼bݻ qW_}/R)*?Sm#\/ 9Ar $!]{#6mH\|_!oQM.DL/wU*i͹ºXw@jxT@ey%ϧQz"8-_yݾ /߸q| a'FfǴsQID8pp\qEiCU+V"u(m0*k|z?fpӦX=͹zk}qy?dmȨQcX+8-)B~'LgӦ͈!!0]v_3תUgcn,yY.Ju+V|еkwVD ѭ[23g9+!]f-j=FBa&GH=$hGfkԹs͛@\xaQ2^m-ӄm^^f]@!QBSLuꫝ6=ɆKgO>c„W.rG. ]|LŰFZ" Cx)ǗEd<-V{Do~4iӣG/҄gKB%V^ )E&<eN1um 0hƙrUF2VN'xI~+&/2pTI(-l |sS"7b(B*UX#1Ov.XzMPFMk=E^Lxc"  OrzQ8(,9Ar ?>ߞ{æ韔ޭǰ.=u9S }D#An#wM]|y!eX[}ąHr'\|mH|!?Z3nC5e-:hq`j?cQoAMRJˣEtMlSQFeRST#H+~\bUj%Kz՚_^JSϠQ(kԝ:tQGdJA\DISzӰacJ+Ox˖m*STX)ҍRY/n}f']ډҪ| Y=qN1X8p2:س@ʨn׮Ch"0E<zՓԪUgÆy" hP">p?bP_2iQZ&2 ;w_B#<2xOc1Hv;qwI}fҢ[5k?e'd- x;},H֯; ð|ƹ0z=`Mp^dժ()aڶmo)Kd?ᄓA녋 o' is ,P%K^_UU 9ArhWߞߠaGv1[ϯ܆|y!mHr!D}mZS˧Ld"RO|@V#*+/Ru1c㟬)WU]{:+Ў n ֭ی֭*."̓^M[lѫ/[MvzWb?xZ 7a:\ޤI30J8^~v24!o1]dɲzem;z ÏD L*UV˭׊0fe-Z\|ŗ8$2𫮺>RK9m-[jS@ߪUޚ)ja gm58p n^tQ5j? E^qEiE^]Ტ%2.fU-믿g[ܓO>UlluaE4C5x|eu5{WG"XwB&Vߣ}Z~ *6oy9(u2tѨ]z- [j3gL4Hp6!$bua#ĦKc,|2eA 4+5f_\Bsŀlr /_^ X /.^"/}FA)Պ ~vqyz<1$Q^Dˌ!m͚uR7oނ+lo=KFj۶hbJC%~4h-Xpmv E%(_&oyc &ޘѣKF:A͂Xw(i >n= A9f֢G8 e=eI&#OYwC'"RJVJ}q*T` VPTklWuy¥۷w=:+-uJs\vܭŌhz_zi_Ӯgx25PرKKQfO6,"P̀Ԣ ƢG$2"X{e׮=SLS.ivb}2Lrͯؠ' /Ҙ0)E%JEq92Sh,+VHpM;Ae5̐r'NBsvC 3Kڭַиw^ BDw\'<¨ LdԎkfǍ{Sa9#T>ƚhm &O"C (Q}wҤI%K^KOmeǎ$kP#dJ<A`MdJZz9`S`Ã6}׵l)~֮ӵu6 yO?̨Qv:+:vlQO1Ev; ˯&NVڜx`={l߾˂ J.+mA;Rn3V*s䡇ZSmiX@͜sR ׺uۅ ߳9Z [n,^z(,%3ԅ pXީS4Y@ .oscuCMN=%e<.ƏNBYo׮_jMY&#qh>Z)3Xy8(.JBw^vpQ{/7o⤽Z 9Ar'nCwC6DIhx*.=՗jDbQXC1LgԔ/GL HC@jp^ZkT5hqbm BPP0fN0ҿ@KjLB(чX@hTE)t ,R#DOUW]=B]DW !JxzEiE0F@bX=C1WJ,7vc=O(t! p=dHT4d{#AЛBb=#ƀTH#PA@ *+A qD  cBEhG} ACFT( |83ca!I(< kC"F0 P ’Oq = \qpl$^x Fr`2U} El+P3Qv`&hZz2!邁^!1|{&b!4$Po6bYqy !|!9}XQ^ԡOhBxMyYxH6X0Ѕ1EA`6,GcS ɐS01CB`>Ar 9]pGsd^ûޥרG~RȅH*$nCʝH;݆s6$#0aF60Ke6_91@I0xאf xk""L ^M\LQP $L@9Ar 48r {D!zcw ɄmH 2WiU LL)AcQ_K@T!k,zO`8jT`l60 0fǿ^BzE&db:Af676|iӖޚYN @/$*qʤɂ (1XB2k2^}mۣ є-[_)IA`0!$^cYTy%PP08%qh k(a.hPzC4!- ƞȼ1$*c c`c c{!! B$T"L%*<õXGȘPdSq`AACN, b^p(MĚ LLxzgs84a@@ƘB&A  o^@¼0&s &HW ;8D4+l FHH N,A)\lx !b“j ,A kh A]Zz"ȓ 9 3BQv/)p<#h!0YD,{P$Ll{<#z:rC2$4 ?9Arې;wLޣ{yې o}#/ƕG^܆\^T FDS z'2ATQ,M be2j3QcHSAcOS0!?DdV1 AAf1 Pqxcϰ=k P/dIǔWP rL_M']bX@eu0 EKcx  Ä^XXn\A 0YOfx 7ĔטyRc .`؀F!'hk`Vd`ʘ/aC" SDHD|=C2HtX&XP/dlS0x)M| as ãX PBI `+!b* Ѐ |1aBװ8܏iA 2 | NN'F?5C&ī'41@О.C&*2%B@f HĪX0,_HXL'4SdĤ@#d8x&\!!^>0!0 5s{Mѕ@ 9Ar;}L̈쫐ې+W!Wy!=5|6d{CTT*(Ѣ.LɤrA<ܩ_Nx/AYY C800aч8LyY `{GHZIlV'H^Dgc@-%JcPAC'0 )1`O A4d9'AXX# <3黭^$'Ib8uNȰ6, 9f{, /QaHl%͕Ş@H d97[ 9weo~w] 3[Q{D^Rd7SېSW!omhÒv]Zt MJ~r2 D "tSUb*Ͽr$Dee7H8XQĖmWu .{kƄ` x= 2H`7FF,FD𽆐0G ]$vGDd} Uq@f%Sh"%y4 :ƅ 93#DfA0I)c@^P⍵36d"C#BH,ux*rO1O6T \/cB7ؐ' ɱ)4 )0+z.8I!'0H_n {nU;P첐2ysoY뛃 9ׂⷿ;F-z><[_{Ҿ۰ 9r2mmȑW!K6YWBZɺɄoCh6wv6|+>S)KTe*TQ O 01P5Fi~}_@`X_E74idLFрlS1M0B9Ⱦm 09a[Ʀ8 0X` S8ƐB}0Fofgv96D|L(\q5.22m^xaъ+Ur}ժkԨUTx RcψRLa< , t5k֮^]*T~#H zh HY\HdA L+ȍo?!- 4 z{ S m"B7CBD/^|ȣn64(gd@ֲFcs 9H@6ĠKeR[7}!ұ_!܆nBu*$јW!m̸ ɼ84m ih&_mg߆d\|?!e˖O3* .|iK@, "EΎ*@ExRD Xb|n! ̋:P"qgE%s4*G?ِf}gQdfP_8 (ȋ1Bff"Wa3bLa%%@#{cJ#\huOxR3x~ I 5)!֢A;lٶw7m߾gާz:A&l U *K5$ƘKn~rznBOC{ (sEXJ+kd-I@^Ac"ӎG,ɀ@WT؃8kIxB 4!G.Ҥ駟AX%s1Ŗ)HH› b p,497eAr#'eٵUa>C:]! M߃ s14Uÿ"$u!r\Z˾<SHBR!m47kh֏mHfmKyuIC߂}`E٧]v 7Tƚ5k֮Vƒ%/S" %Jk.oL*fK.zbU|>5hD£'jJQ*GrPΒbŊcbDYDXfFҥrY,;SEC\uSد4L_^*Vk28Nא/U_!Ā:*U,9hq>a\pQrWzgQ~-Y@$O dUtLd@4N+p.^eVRb%WKe[DhB,G`/.IIc3 en=-Z|w,w`RKf M^  `A2(rIt$ɨ 9H̲.i#L{]vaхOSOwU33{*8ݰ95_6e0>J` JduHm5jd=)V[4{SS fب2MJteY>Teln9%J ]T6`bP2%zel& 6H)`m&l)DHU^]|0mm; iT mv;m `{_K}}#˩Ó݃8IMZjҼ.D4 ^9W{_;7wֺuۣG8{ѣu7w&U6(K5xĹd\9L O6c푑|etM-=bUr([p+IYell\XXķ1b!9rl歄FmٲΝg>{ %ft,Kf3r \ǿ'rFWbFtUÛ` 2A;%,wQa2OΛG^s&r~5j1F'w#Eyf4UV/X ipP##fUXt뭿{70i`^b0j5B<ɺݶmG/R.4?ponLxWI7 ii#oEeV`jؐ^=ժ` mY.Y 6}| iI&i)YcѴ[,o 4lHk˯cbbϟ~Мm{ʼnNI,毾ZILs??aN],XXB%A, 3fbIF?_Jti 6ݨ)`m&l)dw6m:n6]Kn yAh5E+>bnC}&l7_KLr8djѳq󞍛Ѕ > nz@-YUNV03T$ýX"|cRuB9HU?w { *L^V+!j Ǻt2 a&Z2I=T2e%Wz-QwmI *S釕'VBC"Τrg\(OʻAg0i$SӦoܹ ";B&#|h%(J&4>c8F(RDCg*5u?!ӖQ&۶ȟCxmŊ۷/< k~5P[lyBv:Ы՚5_~x*T|ٟDLD !3hb>h)Zx O}ɧX{ 64XP}"`Ԭ2et?#X% D3^j50)&}!y<ޛ^/X>t0,@†BB Ywj!vzy܉.H͚H4[o]БZ c7mŋBfZV9"4jԘ>ʁ|昗_pW?P ʹXfXkDgCxVVoo㏗|/k-[w+JL(\Za()028oO<EL YA|׿4俳xxXoДw_ATngsgx%&ƾM&:b.(OWUorĴؐez5,Y ziZ}AZZ!}!Jݡ<: (QŜ2 Z> Q*Q=׬YKd%aӐS}i\]W<`fZYow*v7[!5yOwz{S{e ͺѬC705nԸY{4MNm9ɩjֽ| ~d6? _VxVm/^ eqpGL'/_3gׯaƓ'OT8d8y|0rÆMwŵ7"G%r&'%K-0Uھ}'Һu+@H3iҔ7 4?OU-'NVT 0H@ o$H?/7sl>7sn.D{gDzԪ Sp򈻌'P7יrQrӦ-}ӪU+'򗿔*ׯ_sUVn_~G}t޼ymڴ緿O֭[ƍ?tʕ_~14ˠcFi&T*U͛ׯE3gСCeʔA-[ر/xPC NؖYVoҤM (z6a„;uEl\JU&j՗ k6mF.~뛈XZGYh}Wl 4i'_xI>|J"?8V ;x`tt޽{/_^Nn #TTջuVx [5kaÆavfV_Q%AwC!CL&Pf͚K,ٽ{mxU$i%uäp۶,x@7̋V8bĈO?t׮]Lʳ>?/4aTvmY~Ν˼ y|wgϞܹ͊ [ ["οW_mq?, H A[(ChM^mɭ[O:\vW\&Mz'yА  YjSO=qFhbŊdeSb$PޱcgAX5?[n5QՉLl:e9tЁX|Iɒ%QC}z4Ćޮ]!o92eJҥ'痧5kns0..nn0bJPYKk.%bFBÖ-[Yq1ˣGfu~/n:K'']aМ-}˖m,[nm&&I[8F{97oވ5 t;>|Ax*v>56l؀ŋ;vf;AN+&CQ}K|fȐa U6bֶ&r3_f -|10&lɦ;kح6oyxZυ%y~ZUz>&n7EjR&o;;=ä7zn!Spkͻ%Fn΅HPz04n֭ٻ}u b݃jxcx۸b۷w wᄌ5jԂ]7nY6}!h| B<ߠk8ZW̓Zh/w_|h@s- Ԣ u }R04BЄ0 ޛ%x晊 #FWP{aN]hhD+V+ \>ЧO? t2ƅc۶7nX\9"w֬Y=X q͉Չ} .wDShQ&jȑx=T{/`+o~(ĉNq]*Y<|L>TRi֮] Q;L%`-߸qӯhHD(Qpe"WVRLv#hļMO?]nڴڵ:t(&^M6%B ыW ɝwMά# {!v½{.X r<;v,% °E*U"m޼9?L-. Q,?{] u]:w(+VĞe˖exB 0aB^oȐ! .$hdZQ殻DCÞ={˗[/_+>gΧ@xF+4d>(B mH54qjˆ ('Hf35Z2#Rc(@@o_*Vt_C+ÀL^ d D C%_ ;D9#s1~%J`Uƴix0hD-kPss5̟/x+_ ww o妛nb*W\ d̘1(歷b5Ar /,go6|e˖[n˕PPa?J*Ν;"E2yd +vG+ҥ_XèB]bň#XXO>a3uƸ)5jԿoś_;'Lz!lwE8< #3DSKy;uq ͐2_uE￟TVB'MңG/‰֮]$@$JCzSly4!|={C$>ݻ/ K.G 0}!&p>t]w݃_%QR6lD -%xgh.\[CE,XRo%_m۞GBۀD/,(A>1<!4A)̙uB,QEVA> 5j R"! j""K\žq?G)_LDn$ѡOZu2FIqի)I $~eѡCҥK#N: ~N_(Ls`IA Ӎ%Nq6lDo\y$f1cue1OP>q;~>TYͫFT9{2eY˟7޵hΊX'Qnŋ+2:hW_nVo?cx5Zpaf~,_O6 ?hіajb!oK$T"VPH0}D}D5} a0k(CJ[f$yQ9"dzꩧ~/oAMׯb\4 H, #OR pra4os3c'O @4$[n^;w.,ЄZjYȤS(W=o+V-x׉d/LUc f͚p8˒!x 5n&M$oذ1gb۴i:gy3'R 6ӦMΚ5 #)9ݻ7'aW^b/Z8fDCgd?dSSz)Rx7yA4XXE<~_fϙ3!/5giң +;u];ac(~a(#<0`k'K.سgO^%Jjy {Y?qK=rYɛ`cWla4h0G;4o[.ݦNc߿l~19 1c,R(B ȁȱE_!!X " Ǟ&IΚ2e =2Mαw҇zc`0aˆ# .9Ɏ^=tͷQL>|Ę1Tq9FE4G~Ĥx)dT2UTi.B):}Z )ȟ|tPRM6dMy(.xrkvQC~8xȸF0 oRԫF)u5sd#L݆w6̤݆f:uM\:vԡːn>vrS K! 8pxrj5kg9h|!"(j('k?=z \A(_FwF:c$C 1aZ/(TTnFYf0"A#АN8yhcj6&UN>\k v:{qHW9{_Ʋd,*VhnݺݻyYi__}B~,Z@Io1oJ]?h?iQ݉ ֭\Nx3JO?mo` 5U;3r'"XT]HϷqǿW^<̿/zh^~e"L^ݙ>}ڵXep_mڴA%K9;u%Jd\t,+5߹}H[_;W0#pذC +P b[Y޼cƌ0j0"gD[L|Ϟ=()uK/ո߹rwm^}s"tؑaӠ/ag!@X,;w.:Ǝ{c7!p`%J;P5j =v֬O9C7mڼr+Vm߾޽{)A'3}?@ҟc U<:p#ǎ=~x))) ԔSr,,,,,,~pFQ>(A)#t bې+HB'̸[_p ITӉ6l0|2"m)r)SӠk‰GM?D>t4:N:*PJ??{kD7{56i&~.\X ~wy#Dk mذ!:!!:!75 *4zhPp-D&^j ޭ[7B#"E"i?0 Qt8wu%;FM1)g?S ~_fi/>iҤZjA?Su瞁UR['ԨQeԴiS;hРz$H4qM7\3fj[o\eȐ!o&#EnJ*s}݇1j0hDLˬ޽te:ͼu+ bR^0 A[Z f^Fru%6e3c^ziK6+ v„YXNj[)4)FlFD׼ޛa5~b8(+myGnP"lĺ؇%wwy5Xr K+vB6%r {ՠ yĈ;F+5jά(V4D%ֶFp_n#o׮dc^fѼ&`ޱ^R@:t@Cv-' ]>|8*i*5k6t|]upشٲniu A;լYwGkQ=zݻwC8Қ6}kX~}Ůq1O?}ؖ)}3o/+/X^j5!%y,Z ;n1 mYXirʈq`2Yٛ=o_6 j''A/_7ԩS2e*UĪ[~M8u y-w-~B0)L@;o'v׮={ۿ@ddG<xȑc'uv"!,,,,,,B~_J!$(E7^6$\mHj bRJC.]橧 N>'.SI}RgA(.OUTI%PT~Y3SN \w |~+AG͚xWL<듟Tb3fu=)GK/ӹ;vDJrjZA3@ vޓ/ufϞӹsW$)0Gf!Nuoݺ-yT*U'NܳgoCO<+)T.]gϞݹsgb =7oK@H6};*U [| /@ 33%"6.UEJn?_;0FF]e<޶m[z7fHC2UPu֯#4uY'&R r(֭ے%K ]7xD8</NCf8BÜ5kU 9s&O@[nԩh"=oH`iӦъ b)de¬}H@ a\(O\ʜbmJ@wDs%!2ɓ &M pѐF"B޲eK)#z=.i1Vo!>}@2dCN3M8 ݘj)?\a2 ^-Y=t !o;;klSJ t`DSp4.#Uƍ?JjJ>p6m͟Q&E>!/ҪU+&%4e$ZbE" s}wM0*SI( ,oshr`yJߔnݺmڴZ*L e`իi34xm ?5j<,E"~ӼSLWQG a+W;.&¾TN=3k8L :G ._^eԩSQ>XVc~!iѢoT}Y&F>}8Dj׮ިd̞=Q-r؉Th u!K[XXXXIp IgES! ]d6$%%ii'III)NH>u %tT?[jj:cXp ,==])^^x0{kΣENA,`5ߚam~8{ ̨yIxaw[XXXXd*/ۯT\^R # z$ر|qǎo;K m0_х %Jpe>p ZXXXXd+*} b:ŏpnA&!IM9aУ.aȝIꡧR5c,dmаygcQw2$` h!&U (ftAbҹ^2W&6ϊnf i\u0B }e@WjA`U .΄c C䲧!x61*nHIr;63 /^ܺuiQQQ1߆F1Ge:̈́!={6)7Ȩ\Ō>Ṣ)ɤm.:G#+ځNMGrW/(J 24 ګ.U*0lWLJnԣ)T 0y\9r2ihSC04mZ~XN~UB>U9t۝ ~![?mHjjzb"A쉔4"#GRTG %Y $JxK*S5 !8LwZخ6V?O)) HW84 V!kQ9~9F D.hԊq#58¤;B 42$@!bxF>KQyV`t! ,&6 Adsԣ<#1kZi *=BVz.$_K ) hғwGZ!W_ջ[y5@&&&3u $ZfC6|&q"ITr8q#M?W:A ) N- QBR.٨*ZD0߼y޿?,22o8yg Յ:|P9%оR&*zHz1 La&?󝯻yhr vAjhCCã_ ȁ A+Zh!~8L~h \dT^:bFdLJD!Y3rqB_P@ZZ8arA! )CS ,"X8%%0"d 5Q%Z0,BPUEZW%M*K%B%! }$@7`B q@ZA4!w 5 {cF@ N\||bZvzTajn@P%BB'9:jE*[?mq!=MЧGsM Uxp(7'%%MU䒖{khPc\o eU܆0HwI\Ī/9<?9Bt0TΪ }Tn+hqSJ<QIn<< *!!L,d&4dYWF@8fv(dh P'l3@ ̪m%H,}]vaB:fEC e#bϋ/?U@!zJtcW\[!SSDFh6g/WQ#Z3ďk+xS, OIIӥ4uOI$'Gʕܐ4]g6G"B&qASw(%`Z15aJYs܋kH,\;(_qxbjDM,YV)JmgMDž}ȵ,Q 0P( 9(Q,´LLR&44ź8cjQ%.eDYd22!INve'NdJ8qt2P!ŕ !(Ip>SCAbuC dݺug?P;k%sA9G^++x† lٶ̞=؋c"",1p`l"P.[:uܹsiN!  PU%E3iAAPiii_~5kkɲAOkDA;RDI#Py4MȡM[GPY9CcA J$Dj\XC~ *@U#UŒj!94_u0]Ks2k(8fE4rCx %ǩ2HE+*=5^>*f\bPDUb !`z4&] \^ דDbMhfpϞ=02|$k،}{8VX#ƌ7vaOcO lٺ y۶;Ç2dȑ:q_+xr2ZnM H=JxLO? r{q&&:ߝIpVV HJ`"66vʔ)&LXrZAMrArȩPz iXNVm$ ~h^;v&WꫯXƢYغ0KIIʕwY =ibe!CXG+F 3k6mipL4K-+PʓJ59#G7n… 酶]w ,BZ a^nݘ1cG5q⤨HNYO mv92L4ei`-'N6mƞ=pIl$-9BzV>vďUȨϪ666<%%D-@9(ƫ^둜Q9KBfE9[HlvEnɡ0s9t+F>1114P$P2^}m,r}^JK0#=.o6`(T&OZZzTT́a.aaa N1UQ; ߿/P,aυL:AZ(r\y(9ή/ yFVw赢 rfŌ8[lۻwXXDxxnC)Hq|=J%>}1cVXѯBxbZ$ ;Q (&:+e,Cq藜]pSÉ̱={eI"f  bCUG{U,BajWRϰi U"#Ha333o4_|-[X-RrnLUֈ9A\]f<\dԨQ B^{&6ˡ-BysGG֭[9\x,{) kfA3 #~ t;Ō޽𰰈={QA& 4ٳGl2Axr F1pj۝Wی r' G:b"ꫯ31ʱڵk٢M޿1,9L 6mbse; 111˗/Ĩj)D8@%iiN8eBlTxr 2a#=PNQn޼եBft&VVk)LrzDUcah0KɁQhX(r/.3c$qqPdc55ԊBB ꡼-ejDriN\XD #=UoֆӅ%7WK#~-d8OM ӑ2`@ rFCSLWcvoF,Qr4ч }D. 4!ky);pMnC +YT||*\h|-[wᆬJ4pp||B6Jx'8G8OI@%9:Ƃd[^X:״BcdƩSvuԨQK,6mZϞ=}ڪ9bD%l6mСo%켔㩴mv) ;4E0JT(ڔ@x /L+tCI^Tuh{{U@gė_~ gtt4LtCCvx6n܈[]Z^atr!$hB!݊+tegQ̂Gg~/#޹s'C(  :J~&Jj™G$&hE.s^%ƤGY4bn&t޽TAa@:eTmܼE !"   8.1zsv߿_P3A#e -uPx!`F>9m\ YL.3pu*2;ĉGx?+ ѣG/\0y/ZH-)Xi8zqqYК'fڜDH,]lذᱱq0zy4 Fx% INM9wO#%K?pCo6mѶM֭ڿn={cw~]KL8ޱCׇ}IiO͚aJEoի*ؓwȐa.\ޗ2Бzdرsw@W 9tY$Wrs(?~<1 ͝;o߾lv` }-],Moq„O8( ˗С3.`f(C{tP)P(#l@2U.QJ (3m{n^W6#9Ԫ;iWmݺAF+5U9z?_C99&*87jFTIHhjqQBsz!:u*F .R[t zqtB8Ď^؁F錋tZ A?25*AzUa!ܔ)SXDUCmҥL9rtn=8gt @8 20u~rؠi2h ~{_- #%} cDq9mR՚,2qd}_ɉ3ҸߦN~⥕ RRXGЎwDLۭn&"k۵k_+sbCeLgۚ3G{8gAFv~y׮ݛ7o[~|;{O{-PxI6(E4AM8mE˿Xz{ "DG)|5׮YNuynz(h[ yUy)(DUQ'>F!6xZ,c wBM;ݺuۑ#f&3(ڵk>AC^" r|Y(Pga?B3/,,B+!Up>0 X|k QStDO6>e'YXe3}@)L>0/K0/ Fǔ L-JjՑb" DYmən YGdFEE\8Q_FGGSH-C9U؄*A*a4lrbFȋ q!V B* ʙɤewWpɒ%/OF&&1b&+wbŊ> N"8egC_|c 8~c+DkX)8v9ٜ۠DH 8MAlٲ!C"/{gCROHҥ-c'Vv7m=w(6Sn%I'ҎK8e lvޣ'H)zM۩!е2 1"#)1(!!{$HA\$~2VzẀFIٸ QcU%x*ed z>H+h: o3j]lw`H/(Ot׫W/iV+6e%^}/XGȑL݆tЉx] x+Vԩ32y83+암#_xx8:x]9Tw;/lRFBO\5L)dPla*;B*$HKٶm9sا8i2!Da5juXiB' cƌ6l<8{c舒6YМ\&e1 qG{[9{1k,t F0^+}'$8*ya5`.bI *ӌ\4J`/bڴiHB 1rb)SӮ]awM9zj㲠'9z!LRNهA &hXɥJn @I “9s&B)d\%Yl>yԲO?e"#Ͼf#s4k["l 9h|$,23+sHyVT CUQ pqcdƎete=!4fT!sQ 1.d2јV: ä ѝ%ݡęѸ(P(4f$fGtü3h9QGz!K1`5eY!!#\7 x\t2ZZҝz\!sKe4g=uy)@>JbV+p6qЁULj5ZO!kA3PθxD|H*8+P }649/]y3gθqدǑ#Gb g :XdF Qtvׁٱ k~8a̘˔ûL(fs!dɒZg meձ*Yn@nAf!"K/U'ouwg:βny{D~ֵlzK:tɊƍޢaKjM4-P"wءO=Sأ*[׮ pJ!erːS.H !tz/3/ӧX$"l(EWB!d6*&۝}P 9Kx⩢E;PsP 5=[?/%>lw{,X*7y}OYly,>`РAlHdې'k7JKK_z-Q3fal4i;|pS?ve(켔1"DӧO91{.g b<:2ejOHPK[ ߚ=!r3EO+tfkݻ7Uؐm*@5JCOtvFD1pFYEcd5k&l@Zx1٧ΌB΁üy !|͂5ettD-[f5c;ڶm`Qx04oXp!ĒWA&g,ڹsg*r])כX4YƙבSoA >P聇)/_;G{?&M†ټ۷g{Xa+kkE<\Tz^))G.u}x?D6mqFjHm1 \y[x32L-oki.PtЧ@LLlŊ>pq[]rn(t=r"*2:<,p|w`]F& {"ȉRq;C%p^S_+ \y m-ZB*TU^@ƍqCش"*oC43nΜr-i%,kf''*Wbb0g9 B0HDr(G9M\|pqG$n.5*/&2/)g#-ې@$J6|#;! z 6u Aa*MpWmHH[Dmݺ!S2 䠹I_a jp@04ɐљę*\epxъ}ӦM k24f@a:j` <4M|u;{cg Yt\0'tG_8bؘwR:τ 2@``NWQBFҋx0V\g0cvzÿD;ГZF(`:<4sX&%U؊b=!ajWfna c2|^7H.?'Qu80BՁ&NYphK(@_<08`ܗƍ92fEC-jaaK8a]q$#0N/1+>Pp@~5lȣie瞭Hmt J=Z泹'&оKpǭ[/_BϞAp6%s2%T0)!sPmܰ58}DUTݍ'׽gCEDte˖/]  5hp"1DT]0 0_8MvJɤm*rJؾ;vHH%B!;v]@aN,Ž{-XKn'OHpռ`lllo:tWhڴiD;w.{knƏYȉE[)SRد_EX` 'U']`FfMyF- .+VinYUL0!w}؍CݡgϞ ?CЊB +V gcǎelDKbj_"hKxpŬK ڷo?n8N,G%JB=Je8eRt2g$s3;G=3cz5h fRW 0eF2ڧB qrҖub,ds/`8qq3gn߾#nz-H;w9ͮ'4o g4X8vo$}u,Th͚`0Iv۟&Mrvb*WT{ۿ| =VfѢӬY;㭷Mɛo6{ɧ'MpX,*1#}0u*/,h~83bLg'o27wWޫ0""J5שS/_'<:A6DZ+Z-T+waKw?g}1#;y$G&MbկZ#jW^zuDn9xe充M㭷(Nr-ZQ&;wCci0߆0ٽ rq>:uZbUSK%[pYL%D2ĜU^r9dza# 6[ aG,k/ GM)X!s3 0Q4iݺ+?4s6!j8\]4&4!hLFD!9k׮dP4gX, :HƙA=Js@bog`nɾ}oذS¢gSe3_L%(YP1?Tw^4iYqZ 5Pd)HJINs.\\$PºBsJ,1P2Xi}X< &L1CF ov"Pt4ƥK V+qJp 18<Ӈ7Ȫ—ƉeTpfxCxYVZo׀Y0B|}O?tSE0sFvJDZ6g/L #pqON\ƌӻ؂KkuwOXG@}&M%0ԹKb%4<>He.IDAT)Yz!qQ5k]e_о \wn`[߾m׎.]ơY9'\4ޯQҵ3ufvwy;}op|yw}'" !0${"fK)RbBiݺ[0겢rnaren,8'U"葳]cǎo0}-mkYss6oHnCw'vխ[7Q`hΝ?y肽͝^8x/Nm QūHکS'%,Æ CR1c`ŋwڕOHH[Wpٯ~ !$ECn6%"ҶmO>%y;t0vظ86/{M،! *-gĉX#+bZɱ3'gٹ8՘q$$8by x' j0e81;v~2F8s14KUHO^ );Lr_ Uz,swA: ?ŨqeZ_E.Y~^kt_ѻw&qƷEF pʯ"#B:0&)׀M7x# (#X,& ^^6ĽxH܏c_:}an g >|8X|ב#GuT#[@8 92K.Z2>.2?܅/q u=!7hJxAhcy><wSV(ܺunÜ9 +car,{Č@rEGY?XC+oǜ}C!h( Dm< /z B Οlي1c͚)ji.~UihKݸ!!ĹNLnC(a {&{x ΁YHlG4QrrN2L8y+n݆`߶m;,6[Di'ik\C&q@ K\BXRI MhڐMbi&p9.  A+ Ȕ! 6F љs|#bWZ8XYCagFM[rAӗQX;Tb1v&jkҰRH[ /FVH֒e% JD ePм),*s!03.4F1 rVB[UnEŐYhL ?߸q#ä ,u<|&hb  ,,*PV5Utͪ@Oل Z!1L^q&N3"=61_t͂:u*;!Q[]d700YX /p4S梶c7rjc6g/ OLy= @Xi E8FfN`8W m^{~ɢEJTx湚5V}ԩY}zɚ渢Y;+݆ؑtmȐvf"tq]v"ڵ+j 7n ڴi?ܹs6>:O?K pbRBkvSK9c dZ+Vj׮9s'w֭24 8:2c*ƈhž3mڴ &5=z7e`ip)@aӧc@de\zfH^0 _vCss'X1?8v?g=z-S)pwXB@ ƧxՑc~YJ̠^PEe0 [i3;vzZ`5dgp;SMݻpB!:Hw͚`cǎE. ,QF1@m@&NA@˼ysP2*[|峕^(Wa-1eΜ9V?ڨQ| Oy1n. 9I mժՃ:SK|[1[{N*ww/.>N1,\FE<̄5fu$ˠF*/}W{d7{mUQz:שSfڵjt)ƎqPW4NEUx/׮߱cWx|2nY&@!\+h֬Z՚P<[2.Љi';[1Ϯbd8h*LO?jf@<4$Ძ%[00)E#k7^vq~H59=%%M1h:wa㏶mӱÏ[ܹcuV,_qS&Z'OڥKjzK/8xN3/D_x4= 7%dpJM9E-M01JJ+1g6IbD)_F * ʡs2P΂ؚuX2.twkmHX,\6D-}tޝBvm;I@6DN9<'Det5w\˷`ӧ{%o gdNL/lTq?6rs`mۖXӎÆg2Y3L xjPa0-c5\ڴi`Ϛ5 MؒP QO!DX;Ӝv;ѣ6?mĈDט~i/J"2Co-pFh楯{L0CIA=65A0V  6W1~8{~;#GG~NqfׁNCD!6DgFA ӄR%RBቋ;φ*0K`[lɑ|#᧟~ڭ[7h>c L 1G e@c"ݕHi(MA-?t`\i Vck~UR'p>IʖؼԳgCO>}s|_r;޽iz ^[/X>jضmW\@7ow苁H%)ǁM߶m5hڜ9a4C]6U~Rj֨{}3X|KծU3zGMa"}7!Qq4nd^!A@(izƧg#?ܥK|RV]v˄D2{勠Iajx/x.@5|XGʗl*Gߟ W[YUE,WL!N҅U nx50Pmݮ| b09e莳lzx8}l @cjF6gL 7nd7r& ĜؓBGM"MG" ÏY8J8n8Q73 R6-teã@fG 9Ԗ j޽@(J%JpTENsd(S a3];Bȑj0t`fQjaP#@ hdEEE1(LfaB#O[&9sQ% 8ؐIPyց-J,$&ļZ5GX0,mv=}`Lܘvuч[X`G)sC&w/Cr7}/Ο=s1D:K:v o&mU$UEFlڤyFC]+P3^lf ]x7XJM9'7IMs#_׮ uI+{yxsrX7;aO&r2QżRr֭Θ1tEֹsI&δjjI@,ڳgϥK''"{:~W6Y8iBw%'Z13fQf5($[\l!5k|VSL-1bfd/ԩӄ p0ca!A8h"`ի׺u s8 yh k2o\bdO3 (0w\1Qҽ{w&ELB9U %K2cƌcaR4SVL!u݆t&eq4W@kcG9sVVmV^iB qTnzgQ>.#Md(a: 2;,?^ V a*U!R~-Kh@ :H1rѸ(vS˸瞭Rly!]/4m_ra7V*/qԨ1:tZjcICxPk2ќD0 w b7HJw&1VҊPѸ9OgϯQ=w~ 0"Z4ENq^L,WhJ*+Ըћ11qt˗yP B2!bm pTXȹ 6DTQ)qrp ˮl%M h?hs9Hgj1,9=b=vQwz˚5o^z5ۜ%$b*yBBP.f1L9ҙVh@+UrDq2< b GW\DP" GS4@JX^i#(z 38AeHvÝ 9jrK$i"Z <JTr)< UߒtMC1d&E ԀV|C)P[ W dJUNCܼMm0LEQEUi,je![ 9h524V-Y+SQnjKǾ`0n@PٜDHp@Z]EzYl>%}1/HF{ma_p"6l҅~2rǹq'O)Zx8tƍ*Yre+֪Y%+Uz~ƌYqq|DGʔyQ+Vz~]1SׯDMO E7|F6nLÖ-$LF:j,F|eE9ZPBNl%!0)ERlVmvtڽO~!x-;v1c۽+'W]qL%e˖ gĜǼ{}M۴i¿w}W6ND^K^Bbi^K4m~r}`XIR)#(bA>=, .]#Òу|g{F%7ytl Tȑ#ɇ f2MىHxLܩS'Mh62eʁjVZSEcEeA !ǪO=Tҥ>NR6F77D={s:-Zl_Q7|賕*WZDRUZ|%[ev|!b7hT|K6j7:`phhd֘wAal?eԬU@ÜzQ+LB:yZ՚,Tpl{9BZ48WTGݻww;G\B6D2BZZ*{qU( 4d7f}"-9:o޽{xǙ&UVu9x0N3}^Ey5Z \gCB l5<Ґ<+ Pkh @~@N03(:%*[nkVdS_kҪUkD`C& c.ܟ,UdՊa_0. GS4.& #CǑ29W@x1q2#""854G?`,</mB{L c9y$^:M[ 6U1;ڊ+̙3w\'1o:lלtA]|931 I\xpnCLtcb"irj*cYOO?ܣG:_ҹDZ{v ~7Q;o\tҒSi>iҔMz*p'{}*D.! Y޹s={2JԒ-[ 4*S!4bc1J\%CC_hY_T!&Ւ'xK^Ev:6owP!gCЄ7mȡAرPs"YPBūū2vؙ3gtorL$xbx3f {Ot/ΦvZ"pbW4=wfə_$򣀉N\^oYf5g}"Zӧc+׏!?=h!3… g j؄* M #9!@ƥ߼ָPt (lڴIat+<6%1v,0qC|L.4 FchNδf$Uhlӟ~)UMm^FrTf&vСVZK(y5Svb"0UR 0Ff@H̜҄Pɼ3ݻw !whFN׈E7a O0 WI&{[ݯSq:էL'.\|6nzϏ! ޽ԭ[fZ[eѶ]׮]W^lq_Fl{Xb fd"G4ed gdh٪3z=ϡp+Vw۸qzL*UV#4NÈCWP"%-'|~/_s]w(PmtJ=#R9Jl#a^dg`mV,c`JxȵmR w'1굻 414È" !(g3!,`sl޼e[l3i;v|aDB;|H07޸Xi,]9Á0q}L fEX6(EcLLL믈ʘ>`\ sٺ Ʉ[E,xKW5 !w=g^UnǏqҟ>q<5P+̉I'RSO/d͏D3x)Zh']i(Q\P-GKBI DIXXҥKa$GUYӓ/eC\4`t'p@m)ZM$*bиݻdɒ[fw\@<U@N{p'<DPH[!('V`h쪬:]:G2 _0!xGr@0@ <&"$jΣ5rjViCꂨ{9{:d.#~PL?L΋SMnw8dm{u1h*a.{[ [ly6^]3 6^{u-[.]L ✯Wc_}z^ݻ/.'WC :6Dg8bDdB 9K5L!@*OPƸv!@l44c }D*V1~|HPY Ig$~dN-B 9.-E#u inqݨ`^4GєghjobyTC/(mV2/8h]=\P #oC佶MM<_q8$PHyi. jx򎂤Q[$8QR43 Nخ6Ĭ`>E @THx[(; y{X}qc̘1cǎ7n9+Snw$4gLJn'Nk ~ᄇB5wu<"L-M )ކ&S,BEżh#n`0XFf@ >NFkʣ gVcM#Pu 3(*t-rgsXfAΰQVP9 gG;6>^1V %.BT.U {G9]IqD U%%䣌\G)Q"M3"/72w q+]zt֠ S+FoC8:k )Ђ`Ph9ՄryP% HM9ؐF.Z6J&rࡄrН$@K GD0D@mO-3Zk@N KT)pZZQTbCNW1.uD\#DI1^JdyUA0 G)&f)C9<!!=LEPH~Y+_ty6V*Am6ސn0`P%ޘH% r}J~0Lޭ^( P~K3C?5IQwnl0G`8p-(N(h֋KY%FďkrJiNC@AxHxTB+lqy%~}/:kr鬁(<=!)sYUrׇ*G'B4T{ٲ ^l.;f*FXDl̊(W (V*R`ZT"rr՚!v;TZ@y"ϒZƨG3|r]0xSHQŠ*=B*!Q@Ҋǔ5HM`NxB[j/x.`Su)Qy0(w$Ћ!JvE*T90l@44-iq~0^Y&&40א΅+رHd 'lnN G T}=ކ 8ӯ>fB@tMNj pƍnzTCߑSmTh. WSmyXg+;i=-Wezd2W=8]H2U\LsV``rEeՆ<^JBr?Ж2n@̔AbZey̗pZ>ȵ! ϹRԖm&Q:P M8q̞@j9D1d-6B>ߞdhq / uAVV MW#CS&3pEdĖC qeU #C>^1pLT_G/( `PP(&zT[=%d6}]n53D@AJ%٭ U1ju(9<~!Te  ]Q~g+I 4D&3r4.^rhN[J7)#4+aANs8!%P96*!W @h*4 %!)_6X J*" W!<يBxx4U*85ݔHn鑒BI0 8=@SZ n,,LJ{ >-N+q^C=#_=RN]Fbv8*K=l2h_]Pk#@#j7Yɚ2r+IG LpnC`0 9)#gPC>ə݆\`Xxk-,,,,rlf4opކdoC` cuy "-{|&5& jpUކd`NZ@'O{| ~ې\mw|r\%PEK̆,"ǑseS`oC. F;V; 9 vW݃?| ~ې\m`F Ê.]oaaaa=hS UlX{uhlaaaa`_ [?mH.J6D;#_ M.B<ߗB}Gؤ$\@y߳! / { -,,,,ކdoC \O쇱qRSSqA,Y @ o"p y@ }ف .dj 9Pܳ?\| ~ې\m`F7oaaaqL\biv/.pYېCg oou+IކdoCC6}k_baaacû_k[XS6 -6$%{baaaaaaS!^nA!( w ⇽ EކXXXXXXXm[?mH.J6"`oC,,,,,,݂aoCrQ!9{baaaaa{ ) /| ~ې\mENކXXXXXXxކdoC,,,,,,,r 6 -6$%{baaaaaaS!^nA!( w ⇽ EކXXXXXXXm[?mH.J6"`oC,,,,,,݂aoCrQ!9{baaaaa{ ) /| ~ې\mENކXXXXXXxކdoC,,,,,,,r 6 -6$%{baaaaaaS!^nA!( w ⇽ EކXXXXXXXm[?mH.J6"`oC,,,,,,݂aoCrQ!9{baaaaa{ ) /| ~ې\mENކXXXXXXx#K!)iO#9sdԔ'RKJJJ$MII;u g+< T]HII)G׵M${baaaaaaSoC~r=r,,,,, -Y TVkԯEFLM97K*=dȰkUZƍ.ZkTRNaKO;shimPK-k#G;v"^ o&{baaaaaaS AXXXXX݂ېvm;֯/V1?)&&'oڴGk߾cDDԾ}^yg8gg /Zԓ?_$%k^R}q;wjժMZubR\ doC,,,,,,,r 7mHn\a -Y )_9 NL?w_Zl/_aɒ/S GUZXbC=Q΢_Zfc~XX Zq=z{Ǔ ) ?|]!* -Y ̳7mOM9~xi~-[=TuIMM?t(~L0ň1r[|r5׮UNHk9j&c )!? haaaa#K!VI)'I|<3D}Ƨ.vW))iGިQg"cƘJl^wi qȱ DGONN1ކXXXXXXXm _u,,,,nAmȋU0$&:d}{ѴUvǎ&m޼bgWZézȱa>h52gFǿcFpG>b=z|ٲ|P<KuMә3IAzzZR҉$tt]"w GnCSy{]k֬MIIKIIݾ}glٲ Çg̘գGظ11={={>W^_G'%9p#Ӎqڬ$x?d 7m'ϝ=}T:?fro`D%%huSx̵K(5%)ppR|Ԕd>F yS;fq=݃āCIG/? eL[?z¡+4}܃]K IRcqV]%.ͶކdoCr6 8ݤ?&r͡)"O݆趂k j Wm$&DE :`lGϹ3r-,,,n$nA!(ېMoC"DEƃ=|⻋Й\`aaaaaq"~6*4'Ī/r݉2 !9"Z⧁{ ٔmG<"bN]uoaaaaaq#O݆螂ıW":xN D!7s#c#]MF'8z}㱰ކ䢔nCYV%/D[%h|ېx݆x|c"Hx*b#Tb$%p baaaaq#O݆HNIjJҡؘp0{+q)2bxؓLLLsL:q laaaqw ⇽ E)O݆胬)'H8.P& TtQAS"#D$]pᅮWRB ܌BD~!rfS[XXXx݂aoCrQʳu}|2VTY]% !Qކ8ek)mJR8Ľ!$9GSiǏI8w؃#I4YXXXX\{nA!( _w!ZDF҅gPr$1>`pbRLtxOfRS.^\G3baaaaǑ> ܀G=ߥ͑QuAANQc&4lg<r5ď,݆$'rnډؕ+7%b0jͣ)$LII!?| ~d!D캤 Pѣ{/(ԣ;dJH))iMNNUxy*1vgnCݿa7Dw鲞hOHLGqJ 󑖚d)8D:y2G,,,,,,r9mN|]{W$*/%p15ď,݆؏9vԽIJJzՊ_@8UEN%A2EIJy6dzJ1$St8^h~Hϝw }emJRRR y6_HMq|zH:Żwdܻp #K!tIAn>#G.ģDRR(*<(r]@Z5c#!$݆@X@_mȩgϝ=yan.T*S{ ))iG>3xTaa˖ә5"\ !?2| ~d6dگ/^|ʨbRvܵhђ nذI>b/ɾ}tWrꘘX ΝjIoݺmŊN6c'N$241y$ې0 c_D yW!a"#%"tz)99$QC!y6D7:)wAsgH:I|J3-d!?2| ~d6aƵk׫]nmbFTVԠk~8>>>>}իתS~ǎ]vޗt"e͚J*ݻw-ީY /TI\!C+CQSF4S)O݆IZlE]u-_nhۦcе7;w>a|C)d|Gϖ5m<77?oy]UICLKm}o.0ɫ_/-5Ւ5JߢKz$O'5.-)M~ 7=)*?/IcL(" JAlJC=ác?:rط9;wiܨ??"&¸xu'߾}hV9Q#ǽN'%/_kԨɑ#tYΝ4hti/7iiq+r>)#|9R4 Ln]UijTMǪ!xE754Wi"H0/qto()lwiIjSa]" JAlJCکcΝ5/[ݡ}gkY5ʊʬ7kM{tӵKO״_Ay/]oذɥKWܰaFVZӡC'˭MijTFP=!a45ŕ]4+b;y!TJCt6iHy4K M_E%?ɛFߛzngCղR[Ґ2.+ursn48/)5 ?Zr,.rjU蹳4htek5{agҐ) S' IMIAN^n7/^̎Wqj4oφG:k>rRmJ2J|80lRD8ZidV bU[\%޳<ن رN>;k֜w=n܄޺syIA7vs0,xM)j̚9ok'O޺U/V1̛}N/\>}7 77?]pkÇ^|VlۦV EΞ_ziǫtVr!=zY-8~GI 8P* )ꯨԕ5M?%cKJlC6~Ke>@]R 1iG#P_+)Y2MG7u*xɬV4d% 2xĎow@4{7m2`.^TX̫tvs8dm_*Pŭ?3Nas矟d豗.] B_n}~4̇eUˑGi2,*]%$´_tiO3ڈZjrgLPO^!*]H"GmM_tiwfשYMǖ*-" Ub UD$,.z5/JLICtxyj'U!Y)ViH0Fwe5ou^*5ƺvSU]egYSmxqUc__h" Uҥښ]\%Eu2\N$Ґ?0idV bUbݨqNOkh$T$??/ӍYϵJQPuT5SExMշ4FᾢCRGѬ"GICղRiHU}KC re5}G}RGcO _^a~? *J-JLMICA4^2+dPի4DW^OiURh5{UҒPLGU8U$ ۳!Y[M5^ICp Rɳ!Y)4$^}o.VϲL#ʹ ~U5Д^G- 1'h$d~S<j}]?yVĢUxoQWJAl!T0 qA@Zԫ4MhURLC^W9JN"& IXEK~b~V&Pkā+b:HC%RiHU=`Qa~~,5~%&9֮s)&T~PICzcE՜5}UMďt`o& JAl!T* O <|hj{'s+bë2*Y)4$^!Ѱ2 M8d+(_vr]{=%OGU8U$ UAԎ2$H/s6jD#!e:њ" JAl!T[TM[ӧՕjJڗ٩ƴ*k~!p9!З^Y󿚺KK̡+g 6Ґ ʠ2n!?bZ]:5_KHCXgPUR8+a5rSo%KcidV b# ɠWi.P$UKiR/R;2U0j\4Wiצʣ2URT\iٗYڻE2#L4^2+dPի O rZ?bKNbK;UTPICzhV:J| 2SˮJCHбG<HC2UILӼ;uE4PԷgCREQۜ55K.s`<{7 RV b# ɠWiHT嗻82jV*4^2+dPի Fߢ U5TR~Aev:5U@Sߞ Qک>L>x%WrhuU3OTD+uIT5L/HC2UM]R Hn?̋,kGAV]Zq*u^G' 1?>X+x" VMtIxFAUҐh))u?RD0iܥރi.Wφm=Gy$ ¡@7e^MkI!MHCղRMCt^UEULiUe\d=Ț:S5RExMի4\H'q<R<*).r!*Y)VinCnPy~hv{u Mښj@>fJ=UԴMk'iJ,H"uH^\iwfr[44:Wiy0DWpId+)+1i"VS!Y)φQs$n7 H1ԯ-x|Ĭekjkjy[Ip( UTEyt~ˣ NWiJ:kkZKKTԏ˼J~.5H!t!Y)ViH(ѹ2 ^GMu253t3x3LcTjKYh#:OGICղR[Ґb4uL~jxtD o2'TYcَf#%%K|󟐆H&_Ґ‚ǏgUô_h96{RuT5SN!"O2Hj[^]$qA/jTVV CgO>ǫBH0zԯF Ұp8jz4ZWRƤ"Tcɒ:wZTTmbzR* I\xVM/S8 tT5SN먾=UpyWRTy4lgCR[Ґ 6;vB`{ܾ}?DCgٳg{S~?t˻v~Vԭgv޽|-=ΟbΝ\nDIt|5婩Ƌ2q4:oiFB%ŅB_]=yqѡUxV4ss-Sg Ԯ];wiѢ%`x͚u 6=zl^},L1cƵo߱o]v߷ްaҥ6xУGCΞ=ߧOmi>|\\" Lᷥ!04ԩƋ+.U8BSZJxի4MhURd>Qu")MXE_ UuUi 1עt*D"!]vdujdg茙uC ۿtfmڴΝ߹Mhβb M>|ȑc\%` y\P8~w>}6h]lʔi;w-,,6_Z^!ѐ]\*tHͷ^R[Ґ7oUw{7jF;v[~rlOZB̏7a„Io޼eg\y>o_X*>|Zkd~m'LzM_hر/^i۶Zjc>tS#,UQT͑/"ɽ'zR~먮!:fl.$yߝ3qF#!5ToQ% JAlJCƏ8s쒒's0`ЬYsN; X Y)ViH0QB^_ Ac*u'DTfVS3^S3X hoUL5^y^47^QQW$)cX$geg?zD\.52IlNNGD,HE]PLCRW5fa۬V b# ɠ3iH.fd;wnݺu;ݻ=+--Ţ?ZLBLC̱8L>x6,RiHUHCUE~EXҵyp4c1_{D׈0 5R'1G(y6ERiHULCj+J#@PW~+dPՇ4!8Y)4$4 iNV b# ɠi{]9!8Y)4$gC@d 6Ґ *.!8Y)4$!zսn JAl!Tu{Cte^^w{Q[kU!lQsi8gSmfSKS]u6 3+5fk0SлjƯ5>^ZʯnSV ϬFAUW1JKS]+_=yԮMVߝqMfE gzUx4lʴЦzSbzLHSjYK BfHW#նǘYnSS#MZjY#5-6kzoR;MxTS#cYìh_Y*_HC2d:kj5Rgesڢm̦M3koFb%QrhEmL)hf^ԩSpXf/fj15=ZY 6[H1iI _Q/qniNj !:2E/ܹsEEE0'O9sFRk_WfVxٻwɓ'chڝfi +dP 1Rf_XԥgL{I5/R^/+~φ՟>6aNrwyD=f&θsvz_P`3Pl,2;g=fkUbbsΗj*if9{S45iΝ"3k6jhp꥙m1́4mСC!CҥǏTavih? Na:^ͬ6wKb 6Ґ :\RihZ A]p.FH'zyiVF/5kּĜ|v͛IhyOfGfk֬ʼnRFJqqqƍϜ9c;>Rk?j߾Ù3gy{ڵXšg{->x<_K_CzJAl!Tu[Tdt|^^^/_޽{W\Qۼaof:6Ѭ1^Ȯx ^ɳ!9v}\z╦M?*,,N.7Ϝ9w{N3gjސ$׷bJmaڴG[wǏ۷͛w{ٿjgs}ٳ֭ZW=ZS.vܽ{<_k«W?Nyy;YYwf>ZXx2%hS ic& ~|!xrUU5w 1U` 6Ґ !c24ѣݻoذ,UPhƌz2̴?]ܹsƍ:0e1SS]'ݺuK#k<╤!:>{8M4c}0a37ؤ!o֬={0`P>fΜ~Aŋ>RK…K]z>xڒo=xB/dʕ~ھW>G7oA&͎1E=~ӣG?-Z|kp8v͚Ӏ'O7mwG}4mڴސܮ]nC"\jvʔ)Ç߾}^֭[׭[ѣA'NԺz/]Wگ޽nuݢÆЋҥtX\#4h+R!ôs4Don5j6{Ϳ?pO\zUu]WrJAl|eieeuJa'eR _[FWisյ5V2eѣv5RX|ر'Oxݼ4D%K>k۶7":t褻w۫nذW>w99}9sv7t۟Wݻ?پ}i ͛d oذիWuǏkܸ?)+ <~3rF;vŒ+5tqլYp82nĉ'ӧ߲e+!EӦM3z7e޸?޷5kֽ~۷b1q\fSfv\3Nooݩw}_GۼykӦviG?u0z}Zc7o.\裖6mјg~YnCN]Ԗ{?TmwإC JAlJChܱ!s߮g:E_zZU~3 Uf]Gڣz̰dWWҐxEvyW_E;z޽{!әLC5v={޻w߼hڵk1#utN\Nܹsg}{(aS]O޾}q&N6k,XԿ@ԍrX M4Y^eҤI9 ]i4ijuWvnn^ǎRNcƌ8pP02/Z[nݺS׋huI,H:'WUUf͗;v6R<;wϝ;?e->ǫԩ3z}[ղek]o¢.]'N"]z}FoofY :P7X)φUjb/((4iM7&0+^M5>Ys/5 Km֬RJ/S/MCRGkf tԩGncnj2iF}Exow?x}<̙sF/m׮òe+ ԥK^>|Tt%׻wߕ+W-%%aÆO:Um];vkݺ4pش3{5jh-J]b[o3}L]u]pIW67&.ײu0s/..oM<ڵkz-FѦ4k^!.iӦGK4kB:7ڡC!CVС7o^,yf-޽kV~ifu\7nfyyfѓ'O7n|_~~xEnqS'ϚI4rss>SRG/|ڴimْxХ?~܌1oYצveeUwZ߻wܹU&M l۶i-ĉ 2v˿x0ylIE?yy1iv%+Ϙ1㴊:u @pΜySN׬.WZեKs۷ooӦ]biiǎl R[Ґ`0t|M*_|w߿~:C`7ܪNۛpDգ5F#5_MơhLӧOU:m,y֒RN=*k:Y{":`s藿'5lm۶P(?cwmjsu7ϲb .j߾_l/~6lؤ5]6͘1uOՏ.֭[U=q$]BNy5k־3f$DWQ 0aapt%Wz}֝U?8dPXh1rtf.=X$ 1֭[;?{ࡏ>jr|O?mgϾY'-~V@;w6o޼ݤI|i͜y^Θ1cf͚iqNG-Z; 1ZlijdvvvqƥrǏ'fXG[jk7tKof5=zXÆn޽ݿ`muyz/y={ӧ4ZбcGgUtxzٵk'Nֺ,̸q/^bZq֬9Ӧ%'|.]8p@roܹskfjʳ??p$/  4s7xs޼ wv{u;aG/_=r5~۷0֙3\hQVm6oުuʾ}t&RU73չYXE{d}ⓝ;wϖ#?xey~8k3{W;twA^뽚:uܹ'HMOuetctHr!N6s$/mٲ)6cҤ)fL^Ib IwݤISۣ=,?`ՎeÇ5oƜ9sԩC{~ta99y 4ou:u5hڵkz 7n>|-ÑeV6j<խj?ye˖w' SN=zuuVoB3LE-{tÆ͛Zd& Q}]'c/_}Q&5O}r'?zj뚹E_5ƼRV={35]wl}TGBj*gGwo߾-J]LR4Oѱc]{tC79rS.:v`"oz]Ǎ`0|eeRgq]t/))ftzu1JgCGka֯ڸΣo53D3!:ZsM3z|r.'8;۷F#ӦhCi?ȑ|dt ,U/7JE~sӤ?h]7g̘5ujJ>޿:u_]$; ӭФԫ 4Dׯw}С}ق  [o<=|ԢGCR: <OIIɀ.\Iç̂udꫯ:uz iy zJAlJCF 3fWĪOxZ]?Q&:W\'nhf-,,;;{͚5GV;Zرx矗/_fkzQk׮;vڵ޹׺ugkx֬YmMz7oxz`0;v8a=?j{ݳ'v+W{ǧL7|˖-%%O V bU;̚9m; 뷴nծ}.%Ş.7hPD.\jڴٕ>xܶMuk7jdnΓ3/4l፟jϗau+t?~5@v:L0I{5QH UU̳פq3gN?L[7|޻ mK|7֭;~z/ܠF4Z>?l?-+7nǭ>4f!CBa]8G4՟'ɋg g͚EH뺂Q[ SL:tyk;ңG/-^t@e8u#kKlzp$ ۈّ5c~Y_n't7=8ڸq97XcZj"a;iNW7VAo?߽.'Im9>u0jȯ^_E)@V4ga} {!#.Xq?aW^m|8=|N]VZsas~]kw)-oԨ֭__U:+~GO4e.[& O?"OLՍ41ݞ$ݜpnHwE=z^x9vM|KfH7o0+fΜݾ}իh}aq&\zʔM693 `huu7oƏԪUYhQvvv6m&L.nO֟j.7ܺuۯڦEԩV+ue7߶lz/ݻ0Q,U=71jKM^RLޡhiYK C:x~a=&NSK{t3wjԈT)Hj׮1Doi6u4<^9Ffkl_#ЬyEfEm352u`7JRTr?vmR[ҐF ?vF, F"W,tF\tEgp8Z\mC]hgٹ /^`C,\+?iٲnbƇBmw߿|1bڑ@ E}Բ{ ,~3y<>~a7cqM46lX?~U+W]v]{/])wL4Yo>|t׮0yԉ':(*Zw~_`g;]{?pqY㏧Ν7u4n, mܸi/^:w_2O:bJ@PæN:.!d&< 1̦Ĵ4u/'u-{\jҤ)S&O߻׺_?׫ IƤ6%΃1mMUZf0/^x YQ;ô JAlJC:v}v֬9C 1cօ L`gϏ;^O\.u-Zv{cxIIҥ$o~M 6bǎ%Գuכ7o^aaj/w'MAձ" mǪ 85^'L0iҤUV1x?iNV bU 畕xU4Kj?{:=nCl,^)R]L4̦4yYTaf6EڬNfuHC~EMR5uޯ! JAlJCI4<n5y|ou35k M 05LkmӬifIuHC~KSCz\թӴH@Gj/RnU_t[z\hn_T=&PHC4UʬҊMX'˼:Ґ)KSCU[=&H]ՙNIePd Z!:iCSݴP]W[S-zfl -5ZjH ,03ش55 mVmn,&O7M#X?!V/Ur\ѣN09>{gOiWw^_V<3(.!8Y)Viȶmwr͛7o޺bݻ28({7v.|ۿy\(L1rĸG~ܴ/m:{|0xH$84 iNV bU2dȰcݻW>{oqY9 "۷>G>{ڥ1r &OQVwP˖mڶҥ+7 >~y..!8Y)ViHvvnU_}m޼ܹcOA~s[n;yԒR˄QIiHV4$IS7X\7/^#+W~ܹUݹcχMZ|bsҤ)M8p_zo]H}ѷ9nǷ܉ JJJ*E).!8Y)Vinѫ=xMOGuq뭛BH4yr-n()L8mI.ƸK-Zҽ{ϒp8 kHC@d Z!@Hʛ7olذ|[}7vyakr Oo޸{|Rf E`ϖgCBזLHC@d Z~R&].S;v}n6ezZTi)s!# JAlJC#L6an5M>paڦJ+̽3ty V^{Ij}K~rGG1ufe=޸qÇYf5{mO7wإ_|*u݂rC^^|:Ok6/YڵV<^޽e׷oݲjս^?37owcN,[bŻv֮M4irjHC@d Z!/޽uѾ}oݩ;`0\RR:O?m߿qfϟ={Oz鳺Gݹ;׿fͺz{gիO>>|i3F-Ϙ1ˤo[˗={5lx۶{0kٲO+4`8ݿP;7m{رֽ{O 0߽sgǷhђ^޿U]K֣2]po3cƬ?j՚oUG^޽Ӻ۷twիe]҇L+.!8Y)VicufZlܸxܸ  B:jYVw.]iذsp(yQFM^ZZ[\4hȌ<N7njР+h޼En=>V-_C.oܜg/7jWee͛cNQmvZTThђVlڴ̙s.[u酨HC@d Z!K,uܡP${j >< bp88w4<y6$+qFM̳!֭EE%: 4dΜyڂN׮.\m׮ècnj/ً >h|eLIAFՎLO7hsп#Gްaǎ߿@bq-zw˗6hpGݷӊ-[ҺxU^^!L-\]xY'>jiLyL+?ѹ7rZ Fc:A#Gi4izdꡣ޵qj HR! ]HCpR[-7=td 42Uٵk4Trrh%%93s좢/^׿s!׿q֭n_'!C͝;7n5jڬYs:wzu˝x֭"]Жo:Ϟ==sڲvWviӖ?/׮LHC@Fj̘1w#Fয়_~:Ғgjf6m>]z…7pASL3fݻjeV_w: k&M*`ʕk_LACz3|Hرɓ7.\dsgmcÇY={Сʕ -ZC5jMٳc# "s4 iNV bURR޷ԩ/^?=z~ݺl۶}K|E:S ?mڌ 6ݹ_n駛?w].PRRkÇjVU:[7vڂ|y~u:WF W\}W_|Zn…gΜ}~ V44 iNV bU?gO> U0VJK*ө{ӯTTki`Fjz4јV ZnWMS&dPD:͚D'qMU=%YmY:kfwZQ[v4@kGU! ]HCpR[Ґp8b@ d҄n',^)ͦMO(ѬJ=JڎFiG B5ZjT[hN*l_c*0K2t`:~d Z!oFݤ&0=;yjj2Ȥ̊4LC-͚55ʬNhfG5MzbV7fͺj PĴ3ߏ4'+* ñX\멄:$O*5̬`z*5iڵ:0k]h2v4M-JhY]`6Qe4~!8Y)φYֽ6=(.!8Y)Ŧ!HC@d 6Ґ *.!8Y)4$4 iNV b# ɠ" BHC2HC@d 6Ґ *.!8Y)4$4 iNV b# ɠ" BHC2HC@d 6Ґ *.!8Y)4$4 iNV b# ɠ" BHC2HC@d 6Ґ *.!8Y)텤!>*ן@jt! JAl/իt{x| "" B^Գ!^? kEy0E҅4'+4<F(qp&tRHC@d !Waׯy0D=aԿiHu!ZW"(.!8Y)E}ngadE҅4'+4ݹnܸAgC" BjP(uM^ `0z!OAuGӓ?m? @n?$?55OE҅4'+* -9ob@Gs^f*!7X<۳28ynأyxiW[6Us45Bz[! ]HCpR[m?) <{^ Enߑ#v|U-K]];N6{EzGs6ߒ[¡rÌ>lٕ+״A" BjQ=jԘAF]'P;gμOv()_XӹSnj9M۾O<7>{b0y#v>|Ȟ={wСúUE҅4'+* IrO2mjѢ%K>٣ԟW԰ ,U}oܷ{_8I׮,u[Gϝoܸ5iҔ-[nTt! JAl}6D'O=zlaaq(}KP\.uԥs 뷜l,"H՛O JZ~泥+"P(uJzUu&HC@d >v{'O:|bNo_hI}D7oܝ1}A:jӧ 4nYr5lL E*]$4 iNV b!^„IC B:{}֬9{/| EPy{v{@K|d>ز+؟?7zi?|5x.]_ս{cN"enHC@d >H~ŋWZ˿Kݻ4}-Y#Gyn5=}"Pެb"--RZ T! ]HCpR[m4Mޑ /0mpGl* EKMof)S! ]HCpR[Ґ@ 5MwӯWGLN P44`Mf)󎑆ߏ4'+* "PT7*ݱaݺH=Ej>LzYm$5(Y ! iNV b!!7^4"5<~BTBL?" B~cB" BHC2HC@d 6Ґ *.!8Y)4$4 iNV b# ɠ" BHC2HC@d 6Ґ *.!8Y)4$4 iNV b# ɠ" BHC2HC@d 6Ґ *.!8Y)4$4 iNV b# ɠ" BHC2HC@d 6Ґ *.!8Y)!{in^T4 iNV b]i7iRHC@d lO *PHC@d ߛx<*aןzTmE҅4'+4|WnM4$ FղHC@d ߞ]eU"z<#ZiH3=uʕ].^0V9et! JAl4$%O++hHݑ 65mڼ,NWW?Ӱ}> W`قkl*hD͎4^:_! ]HCpR[Ґp(TT;wqѢ&N]|޹S寣F=|U֞>} ֭ێ>q=||3g/Zt+LJ,.!8Y)ViH0W9|C.7vR~xܕvܩ_5{Ozۢ'˗ˢxA~I[˗5j丅 ?:֩C#N8MCsȞ= 6zƌ]tӧNe/j Lt! JAlJCBRK/ ]t} 'E42qv~v7áXA~q.Y.]_ߟ>mvnΓhpRӿߺsV-]_r݇MZdgUW?yڵ_4F|PNJ4 iNV bݳ!Kѱ'*,-,)|oiۦfOLp(VTXڻWys-4lS+"S'Ͻ6u֌sLth.;xpFw{?}<`0\ZiNV bmrةF ^v+P)=h$.44^4;+Ӷ׬^XuW[U.]-\p5y?:޻ G7oٳO:k[|Sv;zAϖa/U% BjI赫7?xG+U`{Y9Oܥ5ڶ+z߶Muk7}!txw٥6@T[z;op >qiÚ}5k}A;v@ TV-V4 3G>7~*?vO 3eV7K(1+֟2iHCpR[Ґ]N&}?ljLᨹWi/g謪PPɏϨQYm>S䛺7O_m~śY4 iNV bUr5oǎ?iҔcN5f/i]'O:n܄͛gd͛_8~Ĺs`0l۶]3f{q-29;%Τ>iHV4䫯,XMOG3sAjfʔi^YOO8Iu1~'Hڵ4SN:txǎ< Eܹt6k֜ɓj 6iݮg?8޻ 9*L<}Nwzt=zl]4kb칕{Ti||{H}+.!8Y)ViȞ=^ƍ6lp8v{t1sܒb [Ç8aSG3?zӺUU+h$q=y;wemg:tZ uzx(|UPP|`w٭?7orEYyEo:^ʦ~taW}o@IIivvΐ!öo ƌ׼Gl4{CHCDj|7n7ڵmvuիϸq:u6zxw?}^;w޵K:Ϙ>+PySߣG;>˺/,,={n]w{/zz*.!8Y)Vih x|_ܼymoܸ}쥳g.êh$~ⵍn'r'"9O>۷{^(Ѧpq־jٳq-r>5P! ]HCpR[Ґh<{u:?g+W<+G쳧Z` UZTVUgX6MP('0q`+ԓ" Bj=joea/( y=~M[ T*1mB 2Twېd Z!@]B 7iHĖ4E҅4'+dPt! JAl!T! ]HCpRiHiHFAE҅4'+dPt! JAl!T! ]HCpRiHiHFAE҅4'+dPt! JAl!T! ]HCpRiHiHFAE҅4'+dPt! JAl!T! ]HCpRiHiHFAE҅4'+dPt! JAl!T! ]HCpRiHiHFAE҅4'+dPt! JAlJCBH0zcWCS{W6^*kV 3 xtLpZ[V5m׊jmfkbq͡4Xm-U?գs/S:NiHCpR[ݢi ۫ #<WM,zW۬ ELgjj -5[0YbV4թ}Côԩ[\nsNYKSs$Z"U:<-iHCpR[ݨGp8j"@zg.̝zLN SfկA~<{_gY\h-shǴ.4M~rM:ul99yݻ0ah6ڻic39H%C4 iNV bU3ΕjU4zpT=7bbqͪagZKjYuHΝФIӋ/ @Z*MaPD>:3^:kZ/Ń 5kIC4LQiڣvRY0ʜҁ%ߏ4'+* ߰aSnjWtǮ:zYst߮iQQ/_xiq+̙3ԩ3j,[ȑc+V1bSO8 %j4n+ׂp8I/Viȑ2 $̙sڠAC&MV޵Գrj2eʴ={=v: } :uv-ڸ~%4 iNV bU2v={Ϙ1kڴm|`"ݱ8qOzpo_NhL/\WФIv:h˿۷N]nݺ1ZڠAs.hu ѱc3gO>mv,nv-9rƜ?Q'bה)>2gμlJ@ 3}^} lي1cik:T۫i곿xF E҅4'+* O>nM[{K?ܹ_x|ǏجY۪֭?_E.eV y0Kgދ/kv歺WI.\٠Aӧjb7vO[|}r/?zߵkou`رgΜӑ wu]4iHV4d„I>_T*ݨjf͚uEE%/8ppnn_L>s˖t{EuP(ŋ]{]xf/\԰aosCB:5k/YYkt;xЗ_nir5^gN̜9[}n۶j/:k6M~ 4-v@Ej,^h4{.X>|iW\ovg>.]ҼG4:tZnuҷo%K>ӦΟk]mpASL+***X<''Kn})ۿ޽7iE /ر9 Ν߱cgOrCV?Z|R%%&M޽پ9Eoߑ(wCxj˗[ؿߐ9痔׬Y^*mOZϚ5ԣ;жmٳuLe" "s4 iNV bUҠA7ܽ{o͚yN%%'NnժMϞMлwߏ?dǫiƍuGJtn޾}^u Nm߾Ə7A+Θ1K;qȑuZԮ]#F]r-y?/˨L"2HC@d Z!^˛6mٽ{իP8ݻnur=|i|x%|}x8rȹs޽[\\D>}D<2&ߤ! :`:(++ p8UUU=<ȯ!A˳gϪT&={V# Lud +4! i)IENDB`onedrive-2.5.10/docs/images/windows_view_shared_file_link.png000066400000000000000000006762721513710110600244220ustar00rootroot00000000000000PNG  IHDR[lsRGBgAMA a pHYsodIDATx^Ug;sg νssΎb," D d$dQDE9ghMۧ}i<~sTg= E4[6{P;} {S"Ო ?u))Kk(]dgAQO-lW$m('ӶT3mצNaGJ ߕ%Im7$a]% ($ɲID:;oփui(a IxkKxl>~ՔlEA6"c76 Oy#_(x}cj^KWWTpe)+^وe_^/ʾ{qXB4 q/H;兵uy~ r-{Nҥ3MG>6OאԪP!JM}rE<yBybY8 -CޣSԙ+I}H>D K䵗v#K,il!AI/?P4-4S"Ah'ܿHt/EOE}",H[/CNmEk]'y}-䶨M[d7F:%-$GUJP\Z-5/Iٮ $s}\ ug̾eyMrS_ v]v" Ͼ-MnennɺsIs}GprnJ-"fqܶlx Sking!Y!76J3.Ⱥ~㛚g "@53- #94d_M$.ktm YW]+0ϼrZ2vyɲ^yWM gaa*{i0.L^]WFOJ6˦x\>lg]!a0I#ysX/u~ eJ]}'5H3.RZi I&#뒣#3or y$vȸhᄛ-L)i0j-5"ł {PQS=eNDMf:) w24R[t͖$A¦|ifUn=tt#EASħ^$m;y0#!B67 aHSѣ4X<_`LAKcpۊoE_}H+\(_L1fKsLfs\\YSɲ:g4gHT c!lɥB)iBC%I-D 4Q%h!/C.͖GL!0'W1Z-ܦ9B,KlmN5#E3[|Åq9.JIv=fK1Z$~AmL\I۶6 4>3Z um$?!Nk`rZ}"EmrZ|cn>FnRӬyb}%i8)Y)a.-w~;?GY;h۲^oEs Yw˜*9wXf˝s{29͓I[3%i 1Ɖs!fo"zA#BAm-N$Vb"G)ْay #BAhw(@Ewp sa!,zygz)xCcGzH݄Fȱ`̐(T-B)sǛl7'RAd^txmczƘBptgJ3Dg؆1E,j?&f8ɗp- da&4XjQwFJnIgɪ?ڐA\kf @.yaF{\IJP!7- K1Gy<@j& 2|G<388"E}ȺΑpG\j% s,I\$N!FHO2mc$9EN+)#$_o<3KǦT7ŧf r eemE{ +Vݲ}f(;%=cg#ۘ) 9r8SEl!I$bLOO˜Ɗ-9,Kr6ISQ9$pI]ba,jAH)dBĊYA#`x3Nf#Yɾ@^%2nMRsGònLJ  Ml#x񶉚-0sƛ_7.-6K~l 9WK;g ڶ¯ZEi\-ǀXY_^j]9WLCl^+%r,wF:h~4"?v6a6~\2/7L-r8do KeOP 3Si(x凧1zr.KkȖ]Iދ${i80X Cȶ tB60z'L hpV܅.Q4 "`ȇ<,5#{o }c' z84.hPgxy$ 2W٤ eێ+am#ER^ѻǛm(Qx'2?ꡫEX|S^W ]jSxtnab"RiSZwAV \3@ (|Cز,@(n ٟzHi;]0~| X #I#)xq]m^!.9#:5ISD=DxKI'up).5JMJ~YvXܧ'/qI)4?!/;!}l1r]{6I(!Lym>9m#&_#R$><ٖvE#;-#yG3X4Vr%%5IN/l Ͼ|egȑ{-'&n)+f=l>T&ϝRRfHli9Ⱦc6oٷɺoYqsOuk 9)!S8c ?̢bA#^Rgr6IM/FhLd(kYfT2xI y@3.d1Feْ} }< %labG|m L뤍Bd! #摡%W`ȕ0uc$3^Ø)RnH Y47hx$ X1ftvIoPm5X2..taFeVd^*Ȓ ϹR>/5LxhĠe2L6iSA#9cD1LIb" Iof?oY#~3Cuje,!bL)ΰ &!BF͖$1F$C0i.1 RO8o#Bc4[􍖤RbfvNc$G 8iP#9;G" 1F fox2L8fAwd4A$oMl 43`JhvڔcY5)exG~(xCx[wq eB2|CGutۄGkҮWS:"2,^ISu #kjx侸:I y'M[!$+69ta!uY&BMSYZ/9O-xRCfyLZ̒ tA"<04[Hg,qo$ h  3IҦ&Mg` lr_ v7V4ekdɒ4Z2dA.ӷ$ KGxr(rl!0Ϭ3LóI,Wh9rHnԘ*4\|4̘1w˶O]$jW 7XjfHig#Y>\Y4M[?EƭY2/-R͞YFҀiRl͓::2oZ`!302H",cX$deaOYB1&u3Ḥ<4@0%])R(go#7X$   JWzp;i,1{&AQq3&^oC;.)ȸ\ L1>wd:^//Ú 7BN4^䕲vYMbfh'"\4GkF̣9ZbőH:K 02_8YN0o;a귌c4[efKmăKDž|%iY#̌'/IscGw f Oi5 tݶX4al9Jht,K!V0IHZt2O%o๱tAQKh̔bHo IX|7yRG֫Kv {MxuMj^zě4NH_/KdU*侸ixa%_8L^/sddzjm'&YIΤ WY4hJ%ii yj9rZv,n'! Y>a]"H#ȂR4yxECqAEg6OH]OLӎ|0aIaն;^Z\nEJrZh#ln!i G%5dfv熜{RL1[>7]uqw x Ϻ|v wJx*tJ1Yn rldрl  3f4@<F$i4g0_xjg-אO̒IŘ/Sy^9 WOA͹Z貞} mSQS!̔8qN_+r2 g \f\f#hvF Mc1ʸ|:ò<~KMEq" iG$Jr;Jl4fd6 8fN$K%>%,wκh,κpY7za![2ɓy7!RlQ.hZb=:G͖bA7Xl%9c{803G0$5] -sl- M`\x{)ctkwU>l0 ,GgiaFJ:俽qt"4\$_*ޔtlz(|C46hQd^#ke}uF]T4Yt cp&2Ql#%Nu҄fb@MED iWG޳ˍɢl{F4aJ̖R_)7O'ȓKaquXG,69텇 Wi(^x}=lZ)'up'I%lA2Y7 vHyJ0@chQ0\-4Sh#OhM%d5Fgƍ`̌&LKmL'Kjp~MkLκh<κ0 2h.c0YXUG4J<.l3ÛZFCxFؐ@yfI͖0EQ2ZcAhڼ >=zt2H= )(xWQ>V֠ hc)xe=i#/FKo g^ c#_ ׇ1?Rf/ԦYr4$Ml3~.&,<` ID>+20fJ2I=yOʲ ^2B3EҦ hwcl 4arAC%hTpFKs{Ƚ)sk}ȺGa-zrLduvxgF͔p1YyNYi0YJEM63Z.anf2#I-vgE )'1GnR"iɍ>y ˓c￸dȰ7;$NcvXq}#e,d^/,DBM4.'S̼V̲vv2\깆&'ȹf*rhp1'$ϕGܶaM2Θ)elehH>h1)pl|  @3u gٹnZ~ZC~>!"m2t}/I'L'pg|k~+άŚLe4:&& "q$-E16$Y$'9DX, amЙ1Ơ1gxS7< (aaesXd21f ̖6Y|hї=,=wX64VoxWلn2>yG']e4 >ΰゔ2 }’dj(ƅ#R_o֦0L4+Z@$2NA2xGkWl$ (xe5 _Le9K$mka%,> 41x/, hXԩGcr4fHZHn ͏&a^=-K{.v$O'5 S'j{p= 4J=$х·)y|#aY><ߐ{h9&yP!'v'_r|A{ޗln< n'Ӷ9AZ6!*es ĵ"%9ͅf?㽀v.rKRQG,̣@ Γ~%A^C]% k1ÐuW wJulиl3#ŃfIͣ<59w~Z}{@έR}4d*[2ݐ}l{q7>MiY0sS 6fGzd 6G֍^>Y7\OdLAq-#@r A`e Ar }2u L)3zp ˸ZWLg]%WIY R^U `̔+'ZG[$Iȑ0,>s;RF*X8F+ ~Zi|~xqy")͖Kd8#8d;r/-Jk~*X9ME#<^,c&&eL> Ҟ i2KBK4E5d YKZ"'h 2.!"δYy9hp./\xI3g]0{LT{܇ei!0 H|ò O&1F:̖,Y-4XJָ%A"y19(DѴVzɾE "in2Y{7ɠ %~KXM2F g:I짿n 97I00 7H!xq~L A3v\-$<ʵɸf|'OV~uAR1Rk dJyWKdx5Ae Y~x㮒t1C"aWDp ϸR>䊺dI+d/c YCMr˥mM@ReRn r.&5o:ب@ !i.!^|$N"g}sUٲͰH7ϛ̋sX)ȺcCh42,]E!g](] mSAv?<|)ט Lcge2.`;<2YL '&Η YRve̎@f?2%/Js fog$%wY]"}!uJzt)'es߉`祱 OVӑ f! Jnu$21:Î ZcŴarߐZ.0 ;ucD^kuɦkd?#JXZM;_~Kd2Gt}L!",>GS/R< 9>V/S\d?Pv#ܟ>Y҂F}dr|a[q#5&eiZȠ ֕2xo9.Ru >//3/.@#uO³.tBlR.IM%2B# (0K\q~[dIM!YIh\ e\ϖ?% 3fE= aA.]0<%v 'H0M4geKEe=yMřj͸,OdzV~4&g)OȒgz,( $,OMkcC}Qԋ2De E؀n|(aY#F^UoЙo2P=Hǎ7Aq Rs_E4M mL[_hS n`!X8&^NMK2`=^|#xNu>+L"y A/yF%E|0?-tx@˰x%Ni(L!7 . 2^sSQ(s0\3 zn?"G\ }T- 2rK䴗cMKR-HZ.:6>0#ٵi>JM["i ldVjzVqBNIhG1:tCfsG o%d7 '06%Y#i m2ۆ%E^O$^ש䆹s2I8뎉i\^C2':UL2oHLfk]`|gH$5qY7fdP] ?<$.(k$ R^He0dxuH#z.qmqMfƇ1< Ghp5YcJ")#!yl$ix4M)YWRȸjT(Wˠ'*u +ˇL.4W)[ e 3/i8r)=~we#vYBu 0 %K̋?™ v2 A,3.Rp%Rũ/RtDžqօCjsqR 4g^({_>Gl Bf]( $_ S6I 8`i 6LXrL_8S#!rgy?ɸ ɓmr&J>L+C|)P$NgQ?2]v0'=eaml񍖢~B>d7M(W,yn[Qywh0Ag>tb`-ӘWdTLә~cy^ͩx@'~gePgҠ 蟖e*"DAX!&㑹f44lH,S!&XC;"d2LI &^ӑ& Z=dl)T 6-m&O IM]2 Sqg1>MhnN 7ɀT q ʯx 2oF#ȼF jIc t˪kN+F5g !R9t. K\>?l~pG5p[ϼ"$.KhvH"I{aqAm,a7ʠN &M}h@8_doLsLX? q` / 6~w>\0Ɲi~/e.5g g5gv~MfpFKl) E=wlE;KpNh6m;UX kڽA*򓔲4I$4(w kG|%ቄuʾ~1EIn9MĚrnRʚm'M)owMٙR6MEږay PHMABKǑª0MX޺nZvfvtVZEH0.=@l2%Mƥnu XL[Ss$cłۚuJFM`}$zޯ }8 ړ7[G6މnۑm5 w#dD #,$a7a8RT)\NNm> ,7r8"KRi&r8mi7HX)B}v <|Q\j$am]"C'\LA}<I$HQi(r{ =,Mc J' 6aMM {"h(i>Q{[Qm 6Mxp~ĢqģraCmm'% as4ydhpL}9Aqe ߯ڄ #,D>7?O  ;KX1mzvI:i]n:w}}'v lg-4Z<3Z DB( V[pvM8筍h?xTDN>NƓt F:,4Ϳ㤁щD 4ތ ;RV< "kMXMX;kaұVG㉞0ʕ"[a|gD 7 s5i#/ &,ϩC𜬟ڄ^dqt]h̖EfF.ׇzJxC(֠8xx\!KlJ B"8i3M88'M)=n' T:80SEҧ"zaawMX[ݱTti FHPBHGah*IYaG:4V̫> ,p: s⠦Sq]/_a;"Mhט-^;QسD؇>*w_kv.TGR-WriEit;~aHnaMVV@!y<1mJik*IgD; ۧ _V~=wN6R;AlJ 9N^!O~v8ЅPѐa&A l98;=-Ecpٳ j8Q~h7mUHD$7.=4ݰ^K0M9H8;p|c3rZ|Ǜv4ONj?NX ^#'x_X'v Q;g/,x] !Z Fu#H~;N̿{I}U3i>O͔b3>o$ㄚݗ(|eIdh52u>ӾX>JDZ Uf_$b?^^15:+RGBMo5lhHn1K/*mjd­c5)k~k=Z>|AiYv1klO6_`Yr]FStume9F&D5s8$wڴncj}?`cQW^7y219^q:\jX(xgoUjm''N oJxk<߆iN#;NCaɂ)3B-̖!fl)|-I,V 6 Ju^7OI i% A47& UID5"2تR"CFId"(Ee.TOAq3%$8R< KFldTR)#.OOcPXqcBq Sxe2= S1ۚfz]2,&(1(Saae}qA%⩧СChѢd (muJ0>776 ?^x!Ta;wwǎBi]NNNNNNNNNNNNo3[j̖]^;P@f c20R|}nU6͓2 Z&(1ƾÕD*R@KTJfC"Vi m wۓtDe=z>S̚5+6m:Nig`)6#x4f|֭߆H!Li042*~k[t}8Ei5mط9l+A7V(Gg{0Kcc `ⲪJ># ۵k9̧Pbmuv8]g:;4N嘼>aZekYaJeǯkOŸgr-xgs%M5D4GOh ]z饦M4hZw|NVٲ5[zBA(xo%itYK1lလZB9J$Z⨒qߩ[rnڇ)K࣯`%d.uGPQEuDKIJ=$'ƛ}At`3gbԨQqJ`˖͘2e1Ԩ!OClCtCd0AHMotiifw\j9U-:^=&6O3X4 V=NvX&? U0璨umEeoOj1Jkjfi0Uc͖@?0hŋG Xz S8'''''''''''BMQ=fK󾖼""feD:/@FnHPu#h&?yl&rBN+YN~7x?gXco.+>3uFJ rA_ӧ; W6m 㨬p ME+0w8Jxr)IHxr,%A684e#Q2Åa#aG@ċ{zw7/N#^.%)ZZ^U0\ eoTf̘u}5=Q%eRcvZ֥4zL42( c0={c(cBgTH;HIQhBxH"3̣d0X@~ba"J)@ʠ"AW-TAx5+(g0fiBh,..\͛?)~/ >:tȤZ4\a*n3b8#5oꫯ63x.ei>oذ?J4:u{;VUp7q8V٢$M4̖~4[4[-S|Ōe@*73X(uVIDJx kD1hA Y+S_>A^qi1#$dï7&JٴYd.e0`ߴBK.W_}UkZ̖ǚ ,{WUUJ [uވeٟcJ85)ض"4[d]r;ը%-jĞ|"Q_x_ }d7{"Krس.ī,)^KA0{ 4ݶ J̛7O;mp81]fO>۷/nF 2$eqB1hx'|+/ݻwǞ={(-f/=.++3Q]Z/ti3[3[k5lᒮۛRs zlA|9z俽y /lL䠕S {LV%8Ze{>g?g?5?A^)h> & dYh1|-UCˠ^"G@us_ O%w?~\d%g*@$#(?{lJC9qTǼwppI3]xf6J5~Fb $J=<7Zz#^]=eiF:j92?m1 }ٶtGt]mRZ5-ڣ14\gضm}kؾ㢋.2/b|N-ۚeR5 vXhf?? p]+BB͖}x~g-]!SfKOr gsT*=V {r!r[,+P(ᅏC^` @Q_ބ6Sb}X7207gjk|E# 9Lj(+qG)Y۱X pDc9 Q9.|/]i&A84VރD >64<:('˾ވpxػ!)?-e8ǣ֡}&<~}XqI:%K6MNKn/ưaPRRLuV\{3f 8`O^v͙3;w4uMbi+<+//7?/Ç7Q3h:VXɓ'%>òe̱~>Elӏ;ִr 5(?ݦ,P#2]P׽@D(>Jd|A-]"#ٲl~LC|OCˑr>e(xn~q5~ o;;oϺ.GoKp j9Hׁ.as5+ &A PZ CUu=%(&ryNA8Z-RwpePΖf:cRBEYh{Fy|hg/YwQ_qX\91i 'f:8yYyy(PQh@豥]?r1/~ߛw](*s{5ɦM)O<ϸN  vs !ҙ-,3[(jڵkѱcGw_WS6W_56k#G4Ql7Z6F .S7{M*S1p0#!WBn拓Sc1=؍>7|c(i-€8"Rz͖ V%㷾" @*ڙ>K5r\3` Z&,E+k ,+?;yo+en7d/ O=G]6ǝ7YWʍfw(f ZZ֯[1TPQAKl@n8Qٷ*7Œի1pZ #=Rgp~s _fwdR ޻ZH$ɲ]Tmyh!3jyyX (=qH6 `z[z̘&J˴irؿO8ɩ1؍B9X++++ 3[ ^3Zb2.E Qr^[l??Q܅!lO/߂؀fiv j hk=(=p*k1HF鸷q`pTn]Tv| Z}떡K׭@A;[iC\ 6[' 4Zl;#;b:bã(Ո9kF꣣c-ǜJ-lŎE @Sjnh|pvg\ve&-ǁ}Q<~sYK/dfp -_bGLb '|1-2|f˺uL:ㅳhXN2ehL0&կ~eʴ _ΔO~GWSr_Ù-NNNNNNNNNNNG+uq׹ܵkIrB91f; -!F30# XEY{yn|^7\܃_-߆nyvmOoTo~} TcA##s#HYiOhoDGϣ⫩??>TnkKZ6(0{_ %3!4 /4?aCqp @a:>Ù$qBiY|$l s9Kk1pV>*YI| ~YfӇq =a-n:_TV_ ۅ_ p ??-ڍ?)Ţ|,gexD$Ƶ1fTG*px :ށWbs7c\-B X|%z+A2Me, r5Z͖wnHkA7lI{ao3c|oPzr1Acoo_1+)q8{ep3GhX,4(x0[6>6DύFc=܄1g7ZgY—Ta؂ вeKt"loaBY&4[V}/GF-L^Δa8\lPm?NXl9~8ɩ1tQܶv8-[Q=r-qzugQ)n^jnDŽ0_/6Ge.}gcv7Q[kE;dGA^1rfKV"-GeuJ7gơwڠ||.4zG*Kš%kЯg$4CD}VK>=?;lha]gBq}h6 FqsެӀKE_)5kW`ȰAU(*Gu+PTZ5*HYGKq(R,]~?=R>X9.lıjT,=ctEbGlY| maK9Ik*%նm[s Ncq=Euœb<M rw_4Aq gĠq2׻wodO,sFLVAr4ǃXꪫ̋u\)F2/q:i4}&%l+W0Ù1#}Ya}> B Gm2** ''''''''''=ӱr\ ؐ:1fK4N3/8CB$)GU<"aS:0KXQLrLy.B88ʥdKz=\l,6$[~3>7^P*DJ Ge^UCҎriF\PQ^U+֠4#^-d'R-w!FFKwC-egg$vm(]JbK-CH<4_O$1qsgp'4FPgӲ}Q%vb>-CkYaⶾeh><;PquQUf8!B? 2p@s͛7Јk(Sqᘒy6'lYky)Bffp6iDG2V"Sm .iׅIY4ᶔ@U U3 ?K`qTkWGCuH)WEP-VⰬ40ʥ-W,Dw{#a**{ e2[-h&XF-;ȊػnTxf_ء-]-1Nw,EQ'xM'y0j[k=DONqL:˰ĥǥ֥z$QPZ6-?<*|j*1.^t̘0CTfʟ'ƛß'z\Dc8{xExfsJ$xb2h\i .)q%6qΊ&e3^c3'#;R:ӸtDg9dbՕGQ&WD#@"ZP-+8aѪxgog|ej-ffKZFK-],:{816Dl3x H5N4fvMgZ=&6u%f$54[/+1fKR4[zDQ5lyo YwV mͅh7u#>]-' 8aMK")%ILAnqظL> uJNeaU0t9r=#EPg-,pIe3m@;+'''''''''''''^gpX5FdPeH~8Tr~Ts9pًi%2HlI-#Fg89999999999999: Qs"x͖-ùƹ99.cq^|gFlq3[tz+l9{K /C-j ܋s~qNbw'zo7U뼲;['''''''''''''LR?̖$|A2,- ڇs8w~PmEa5 yo.rf3[N[afC5?lSc1ZzmPQ~1BQ8罭(֠R<8cg׈hB徏f&. ݗƤeŘhr˳⡉sq~qj;?ۀz|߶MY-G -MQm> ٭F$dv1l1'8-hdRlYp ’6l_: {423 ʬ񸤕&DRAlVKD_e{ƫX>]M'K`s1X*yxZ$/ǃ|¸|rcg-gwY,y81FIe04eX͖:FKb~z~ ؃QؿBa(g؂kPm- ,Ã37%ZM܊wa̤xt7xxB~g~L+sp^ovQ_GF"X䵜6vrEV˱ȖSv3YqViҎZ4ْPVFhƖoZa}(x⛱rGx迹@cH:& c&=岾ՉJ(GdB4h$xBȬ ٦I"eB%Q!O#Q)GՒ&FӍi_BM/NCyi_b|>}~Ob1sz*߆5_ 3܇`OKfQ"xW#fA5JDd~MAAmL\ʉHٴNb;=ȅHD l!ϱhy(ŮI!&/ڎ%O1sq_b6~:&.(Ɓ`EDUtXqzcU'<c"A,P}h!f }"x1X=w;9͙?ȏGbgla9e90cP1 /MGFeb'̘3'bgْbT*$j,0cFLjYJR!gPIuH#Z~=n!gY:`3KŽgcUy%Շɘ1:e&&/ۆJw/VǦyt2, :r.Ċ_c]r.|F<%NKtz8-;P{^u5^ט-4B Fv ZA0nt?9~'ō÷bغh$s|پF~>t[q7cXz==gЌcjr[LDvˉE-x T0cȰضx(^=xq L+_(,cG/{=wH5입Iݞãߍ{j6>g'JlļgA.ŝO_F'nŭ-ݯ~2XB MwG{ƭm__ez1I!1vK%P)mDT1c.RԕCR]F|3CUY2vUHbXP<ѡhPZu9b%%JQ] s}[UNxeمDlO7k^wG-liފ|oX]qT1g'Dž4딆xx"49bwD/Fu *wk7w kbGnC8u " wivoǺR|v<Ye[xx{~*;ЯwWѷ)q6 ?98vt-z?m%ݴM6rVȻo6s#Q/@IA_c pӈb\O4z.ڹF|kt\׿<#g/sKدp! ䷞6ӐzlBF=dr27elÖϯ K?7oi>[˱:ÞKs#QG>넋Kף8?| O\O\=Fⱛ#ݧcʯ0gh7?ǪpXԫz caxws ; &)4OTJ+腠\֚n&"d@>e8qf'享X0+܉u3?'\ݽuc17XU(ލ%{{b|2u:.oap4bVXawꃱۤ(#^_wܘ]8⌒e;w1|U)KwЬn+͇o`"74x0v5N}<˱Gq߫1lZnZÞ_[?-eX65t Gi|6-Y=tzI͖RmC™-Q!9h=u>^/>tOqv1k=ZqܖoG1?=_jjͧ i1i9OFv 4d&4[ 1ﺐ>Xt,g}>Z[@ރ8w ^>Yx-B*K>Y6ˁ=/a#(OCCl,/,>ZȷhϿ-.˯peݜ}zH cVf q:. : M8EI >\z BUi ۗ]n~ v'6bŲ˱< /c]5Ո/mo/-~ qUў%>CZX_j:+'~oW>*,"Q-&,tAT~3 ?O_ҝ0KXW-gCfo`*/G/v???_y3^"}f/ǐj駘t1mZbR.L}*pƛ-l9-|%g%t4 -'oˆSn<2[H=-G"T1l>^Wg_6_}7z1.~s\w5fm? />/?4mfm!ah=3QBQaȊy1^vcے1x-­(^BOχZb Z?oƜ}|!T6GQb*6aAx1p[5FbmJ0x,X V-džTUqM}|t3[dM;@dv(C{#ADƕ3ևi67^ D0gGۮ{QPy]: LÈ^ }#PV=ok>}1bX3 =S̞K/;B{?-s( 56.]ۼ[c_>KQ_>ݏ7:_-%˱hZl;$6 y5ß.EV0AxS7`VU򳉡yϊ^g&LjNGa~9@zf5%nfK9q ds|& [ퟞ`~9'9mf-4}Cߑ_GVbԦC.~n 2[TBI?p\)H:P*:L|t97oy%`j쩊,´`>^v/WxxyC@U+{xoL,}==f/jw%H1NH _+0%VW)-g_oG~ uZ1|hwt xaDVbH|Qޣ? $xK>~=n^=.BmA|ط#1ڀR8" ?EZpi30jDfK?}Anْe:-1[1*fM݌6}"Ig-cv.nm/O@^ooA%l?7Xb^Tqݫ6j FvK)ddL)aiBi8K"GQhо0f(`i 8gv=/](v/Aトg^x{FC>2^E;aC>7ߏX6y ^! Cq> o9vTʀ<^-($-1Ljd~9"$3UBI,QfLD$Xl^>E}зtx)5kmχKǀ UWzu+u{px<;;-th6ljTo׽GG[]i/iOfP<*>#ۜq"ڪiHh@^3 S>{n@9͹ 9vŐ^x1fK`ɨ׺> èc#+lKΏߌ[_@&tSZY(g5r\NjMw;99999999999b:-Pd#kqVeF^ْ̖e̖ID4-)3 \<`x ~t2Z@RG)c=1lCݾMF3|m v`ܢhmj; yRGn>3ohBF )C&NA}LƜy-?ghAuc h9$߇⥟c܋cDV,d(z=i<Kfw`D|q5v?|%֕Eaa?*ϡx'X[_UTK8k7LhcH_uG`ЩxЮx9DER7|7|L˦Řc1_>xvx읮x}$>_X6L~{&~ 9+OaTO{?gy>}GhkXpDNjFϟz~#<CƸcgS0(%ORL6^y<qVő2#W[9s+7_|ȉ"?kP0899999999999oqGe --|ARl)FQ](E|An yo-G[- Hj5Y-ǝƌGFnji6ǚ涛U B9$wrrrrrrrrrrrrrr:u9CPnFRRk' mC{PfX_i(k(ZL23N2ڌ9}i-Z~GhVj468 >jp8p8㔦_#c|@J E|gK{{FAO6`=i1Ye%Si1YzZLLIxqX]RjY3NNNNNNNNNNNNNNB,6Y<0[Ԙ-5/݉>P{{DAk Zvvb֚}o;m"M&i6O2Ym%/cDx`qrrrrrrrrrrrrrr:U׈,RccY-Ae; {mDA(o.i0{U [Dnl1iM d sYvA[l-NNNNNNNNNNNNNNhf^ly?hjeZ7ʹMb7r6|i,gi Rhə- r3ZDAX*NNNNNNNNNNNNNNN0/ aClQ(䬖w "^c h5u &ڇ{'#Y-٭&|hdf"Td9ac> V +Tp8p8ǩEAe' h@{+p;kQ*侱-'mU{wOĹ9Ɵ< <6>:>4S{*}xlVX$Xp8p4kD .-:ezm9=6W nJ?sn%+`:|tiF[sƢeb,_߮YOv6ٲ6mr8p8q Sl1`b=Bd̖AQ49m$!ځ^Pf]W!ruZv6!DYY5+PYY)TTTFP^Q GPYUU1Y/G!ޱQ^.@w8p/iF}i0Kgp8ByOrt͖^P@fuY!,C[Kpԭ[<lө`_k_h4j`9NGZ/a^trr:rfw&fr7<'''''''SSڷe펶,.ƔE6[lSSș-N'Tn Oqrrrrrrrr:>a};]+9SU}y^vqrrrjj9JIm[ s8p_};;hyV4EϨtļh=vT8鄊'踮 srrrrrrrr:ľ\ؗh1'2U0MMYNNNNș-N߉x ބ''''''''SS lXDיf``,'''t={`عs've6;v0p8'?vnغu+lb‹T0žmے{5fI0iHL[]],sjє8鄊75ti8p77L.ɾ} p88о͛ K7d>n/Is1š5kLYZfNh*lI2˃(t7\ {P~ ,v܂6!*u]NKΘ-qZrKߑV4`\}鎇j*4SS.nM ;#7H4"H9RJ Ȓ&\XgUl!^> 1h /|`^u*XeVvjWǥqկ✜Nfw_e0^աBت/bˠRRR8eڵfY_;pSmlgéǘT>k;ґ !,- k_}yU4 ?ڲj+U=A鹮vPv<Vח6LvʲnNM,8d.ݲEKP~qқ[t]wV"h7f|Xxr@_׋U+}hZž趶Y^~)ƌ/}Yr-lӟdT,#H.]0{lSW*/^l]˾r=xh:*;Nܶ˵a]{_(R-Z:^[.}`>t5J˱3?\f>{t݇L[,?Z&nקLBiKg[v*&--/6RIA4nsնhM,%GMO1 5k[r9c L>l3g}Ow}Slœ>t=( !6X_CiH<*`nn;Q5XOCڸs߇DBBE$J)P\x l/7%X{K{|yT6$xe#/vhgPx=cYYY]Lu{a~140]j$ˮ]cAi~˥m 'Z+-K *2)k>UVވ͔z"/pg}NNNNNN'^+YNq/ŵ㔖I齛v=\{>1b,m}%:Ķh;:|}0/۬,v^A85-ͫh>J˱q&_j>WTGø~JGk9} |6q)Mq\p Eeb4b,W㺝댳6mڔ4HƎkKM0X\_{HOZ+*Z@Ax(Xu]Ҧ+òIE 4hO< VG0c4p-.}K3?Õ]a~O5*cT%"'=-W}$r׾ si#>h^HjqRNq4z˰nSZkux <$L v^ݶÙGˠt)m3f$1J=??Co :t2H\}vl桴%* +/dyvt~O:f?~8k>;?a> ].vv iyzPq1 ׮Oˡ4bckS_N麶'B.Kuxi8.);eh <~:e=9pB|f*>N'I4A4_}yStXhya'=7^׭[#F^CΝ1uT͂etyݷhҶD͖JTƪ1m~6p%~~6MFn)n5Y-g 9xdX0ʣބqQR~8P}$G#۾l2xI6mкukT^}v\gXv,s/o{Gжm[Sy9ny/Z۵~zo9tgOiݚ&(i^n"i)4xuQ !|p7@''''Aڗ/촜B4}cҤI˼ &%HCee:U:f o~1tPwad`57p[)nui^]׸~7b]v9Lgs}xĉ1rH 63?4n]Oρs8-[KM˥o4 :'X-Jvh+v^cot]a\:שc0!<:EgϞ޽;,YjMd uNQ4jiy۔H:E^;vh=1\< ovLmH;wMrY [KK;q렕sP'ȿgM@ni59-f!lƔMvf8)B<o}rr~qvoV.}4*//75ow}7Zj|@f^Uq;oV?яp73s=x0wd9\j!v*Ulq ,>0^D؅4 {P\ \״& ~ ;u_||i4dZ`O-hIJ5[؟CCF„_h2} )]p?8gcg֭[o/hNhQm c~F͡!C35j"L*y4qܦ4PZ۸|r8p><q#[^\>4vtd(%k0?bE5/а\noW^yG9z-L6|[i9Ai܎;o^DI㧻] W(|b3P,!D䴜fpvO+KHDhT )73DxVE3.l'\kf} , 5)B3oȷ+a6H̙nn蜥G+4]Z2bD!ƫu0m}x.Y3[/t(Pi:'l0B_O}֭AMEg 3%љ-vY}Tf d}3~ׯ_O}A33}{MҲ8]r9`ߓf=+nE3w1xr6nhfpepZn4}_1MweW_}ed|Z& SNKeA4/,K`ߊ9}X1|\i).Xjy\uxYLpq뮻xOcD6]J^yD^ZU+X gp tѴKśb^4(>ab<26nXrovj~A7@>2 )gBi'-}a{Pb^[xcK {z5YdI݄s_r [OA}''@I{!|U\R+&zyLx,h^p>u4⍙3Nhxе:o^+WςǏ 6l`:X3 mIS6lv88 yr:Мc|KKTӝ)W d c*3دƱ~ q2}MP~-Kϴ1}q]7*ui=35~K1-]qbq\cƱFX~6<^c43g_Q+٧ md?c#;d=;`۫m2.}elgAռ>(lѾ&g8psϖul{\aZPiJr&zX!>lXG\2q~NvɿG=c)5ExT ,{gfp|$M-ɲU ㅍZNEG՘6E:c_~%"? !`=z(1޽{Mlxip //|ȸq]߷X>zr<g?%ˑa -m}f-}nח77څsh3n#3_[-7KqYW7/ܼhFUJ/ɋ)/F_c9o cȎ 7܀-ZaG  fʔ)~s ]n7›:r_{YW~|.3o&袋 |~< x aVΌLaNNo{.cnnK ~̖ oYYY8s8 5g89999 b}X}( w`s0QE).9YdK1.p͙fWfc`:/p>3VCA~=߱5:t0q+x̛1þ(bc]*ǃ& )yؗcf_.?fF =<.\gߒ }Ge910&Bǘh'|Ҵ_q_,1cvΤg/nr d<?d9l#Nz豠lp}cWzf ě-^8˂Z^^zhpnsM-"/bpGސh\0ۼ4Pq_(.uRI/"\FCf>Ë/tx/RTlnk*^y!}饗7K iBD7"{{!T%"l>5ϭEѓ>yϮDqkOgvgwzoO݂wۂ؍uY_^@?w2T~`Y› MCGsܹo7QLjF~uȹk~ 73^ع_4ف7!ϔey[nyuOe%q3[4o rrrrrr/Wa}RK9쟫¾(/q9g4{|Y73q#!EۦeӰ`,w?cm4#ؿg?>s|t40L_H8^eߍ qzhj1?M]Y:k{ 0_?묇}=%rF5;/y0˖.3MDŽc*~Vld^—ϘǏy?e:~|$?w=)ϝ8aLKtuݦxr:!G:wgbNjUIiD8c/ :oొeƋ,]^Xxmb /z<61- ^x1@/hxҋ.nᅛ ^hR0 /<<,eMc7]^@W6b=Hy?' r~<,ٯ,{n?ہh7~1(/? ܎ ?? z>T J"*uE#lK7} o/%OKG1. GAAkDQ| +Oq~k*X+Ӳƾl7+4 f}dy\xc_}h-qǏeOhPuoGÉ_1=\gfQM/% g[tnǕ~6rǖςNg}L hp,id8X侰q el>P~ϛ{eh8XdC-gy MgDG;-pc)c/~ty 0M^Tx//FPlu›J,I^/R\gCgc5^x)p,h 6ā_ij v"~ !4_]=Nt䜜N/hp65 c>\~ "𳟤)n հ >92[m!&쇱 |fNL`4.V//ip/ž4WxX'ujߎǖ&oPi.?q4Xa^~~b?DtfXKAE9na_P2 gp?e~Lza21Ͷta?Ǐϙ: QDV|(^sM3>hvŧ) 3<1`~o>aZ=Cp4-~x>0 _͛;3<=)ulajϴ4i8^0L Ӱ_:+bh&t}{دaglٯ@} }a?0Фa&:v.YjbƂOiF,!E6Ӱ]j$8ncm:P1=4M h*8L]la<ӳ_cvxlh*0yilOǾgz@13_ьpf 0F' #~F%0~ voL p&-l?G;4Lj_C_2N u؟5>0.cDC]cDCu?>^BLw?JMKGn_Ueub8/}UMO"]1J5e4AۦeH7T^0v:m#Sh$e1[-6ףW◃̕_ %yw#vZ2?>_)v PTv &76M#7oH~f@ x%4FhЩgv7BN#D4Axf& in?7LFCӅJZnmQalj^~rs7駟6ra),8H6aoa?Yq79''''M#Cs}>ue\Oh_c})u8g>J|3ipw~#1㘁fxEOڻgٶ9`h\݄P~Y'/mWw0-M al _?2}P|sd~x:Y=<\(~yϗx03qFs#~%ڧgx9~('NGO$z:P?.q͙8;=GM-EiX" ;/p0n[cļZ*(ŘUjMU#8]io;;2Q% g’* (o?.FGo?7$~č؍ߍcǛq҄!%#fO~.yvqob~CI_A.ޘXo xG3[DKhx5r\_Wx3v|tBxbx+ѱ|FW_mf0b{\a}ΥOy R.֎nrNNNNN'P8@)aK$qbߍMn7F- Ѵ!9C}:NƳ=ox3Pb9Ӆgp 7cqqbZ$g1sF kX~>̶qg9ӰBcY 阆&gþ*/l cH+Al/f Mcώ9^GcDuRI&>P<9; ge%$["~37?KlzK9^͹Ү];So~S71;?|߭ȟ早Z^X}=v/u1‹zj:Gx]œ.-/.htŲ5=,CԶvZu免0E i*i>7*ƞHxuqiwe,2ɔVaבrW`wYŤxC[B/֎nrNNNNN'x~9싰񺤘~ᨲa߃l~AEp>ȲO/ke]_1[(ž_0r?z Ƴ1gیg>Xi_uiyL<,1ƳO&uǂ0ǃgiFN7A%M8+à1^Xs:6rf?*@4t`׃hJ('ߎ68,)]?׵N eQƥFeU6Zvfm S4\+τK mҾ?0]v>.⺽\aXD*;^׉}4T%늦SRR\6Dy@$TS͎n>]o^+6*Ta:E?v^;i5\999999Jޯ.]?.)/p3=/W)|Ol5o{&mR-Zk!vW1 s](L DuiCiۨ`6Vi`ipJӫtNo4m|l ;omEyTZ^peHuGÜ1[r-TOkoj4Tg}GWL\?&t{]pO&*ِMR?RY0Rn3]Ղܐ%iOoR틊z Oj2(~+6& /Jm%e>? |=#Hpo h}Ɏz0]-a eiNvi 4=8B]ps~hEFN}fB]l掶,f boLYN_䗁Qp'̖lqJK9ss~N=gؿ>8#v%2hPm_j/t/G99jrT8ovf+5[k+ GcPvP#ٟz?Y-wJlIVAu'tu1RlF3[Pכ%ovt\2p8S}kך$fߏ>oӴ#۸qy,=]EEI euq~зo_z#HrdQh;[yfKa3[;[NNr!r~7Go99}7Ju~{8JuT%%%9JupA1-̖fKkDjf Tҋ}1ՙ-N'tF˄ xꩧ_m0-׎ \)(=_n뒰S{nԴ;e{oСC&黔}KBCvΝTG 7aũi>$/ _;[ήΖΖ"r\l齭y1rzwb:95.F_p:Y!?:t9s4Е+W^ç~BB:4N牞+NGzu7;9}9i6;ũ:o޵k'quo߿߬:ڿFd 7kD;Q{ zfK벤.''c}QqZ{]7[nhSA.p#cEUr<$/ղ-EHUPŁUܿoU'*#ˑrr$e>iAUI)9W9g'A5C0/" 5!x L:,>- P$Yf)H}[~>~"[Cl7/A/7Ha; OGտXs1qe/ޡ֒ėMwlzZf l_GYEߧJWV}H QvČw oTj a?PAc3xH.O6 wN Nג-62 LFR`M6Ղ`)-v@Jֈg/oy/Sd+|0 H)53˴a(k%a|EzĎFEB5`TT`4R& AČ3&Xt-ZeWT;h&d(țd׌O$E~ _G8 ,^8y?;oRɷ"!*ғ(ϊ Q cc>x[q0ynlFe 11 :kս[\.%9ۇ|, Y~z殬@1?D3<4#N%OҐhScF0e\{b1krF"͜2DyI94BlG^e Wqm,#]ayrdB55G#C]X;k%~b?ozz ڜ=48X?+{Ջ>)-O!ɕTS [<2dM?]-ίآ#TJ&dH¬aIF1JA FzP9;vIOz. "RATN5Z'OF,F^ (LELMar:tj$v #*JG NOibcM6ZJoӔv,j ®v۔ˑ[S/T-5l6ܙtz#AԢ{4C#(A#qDqGCWȿb[0ŷ8ɐ}kz5c?ǮGV[`,PYNB`\踄.s(Eyid?%cCI'||MдRSǔ5~ʗP[|'+p2r^keXʩL/pyv`㛑QrQrSuKWݮʑ)뤮B[:)ԯxLՑnhhbܳ> g&0w[_45I/%aa`Lj(o[Fad8n UmĐ%æ׏oy VCJhͮy{yͥʗ#(a;^4v`}@r/>¸hwTy7?aJ~7:ػ&sybd-[l&^ ZL1%_ 1G#cl\;-JHN;b0䤆H1;N7TeEGfHG FB@\1%#*XAH3RL&lIK}S APGZOCV$DJ1{_p\ #4MޘԬq _%!a)FݕKxv<NvCWG1NZE :cd&@ixtE9iM%4r ۟܁U9%Ge1*j/W߅G_h[ʛponW4kpv4M^ⓥ8_] XWgV[`7d\2dTƝh-{6!ޅ@F|ȁK](AsUXI!|h\6a֢XEE2ťWz%X 3$ c .\B`;.VՠDSx;0p[#ؙ(iCSFiP9q,JqilEׄ&yz K.TuJNb][Ӌ8X߅gaWaqjk:t1<&td ;؂J9s #BOK]=3X;cvw϶Q}P&jA\ITFڛG_h~!r1L]Ch 5 ^nĢ8;O;h(|17z؜g`X e 1c < uN݋3=k_¬HpbL`9$='av^ٕmvmOĖȺt;Ư~wZ.\g.Ub4dDR};X혽`=YxCNBn5!7 f?nƚb,xp vw[,+?Lc\@+I*0tIWEヨ=s ى(۸ k Pb7֎c6ڃX*Rr^;3vU o0`#dم0wZ|2J֛}WV[|l#o80 I!9{1uC8'۷@Yk?xdf1}\v;*"o3 6b3- θǘqQ6c~ntlr5G ݎk-/gM6 ZL1%_EѓG-H_]Up`"?\wls"4f {`n+FބNO5>w?#ՃptHnP"aﶝ$.cH;S#hk,+A*2N;16dӍMRʬiDb3PS[4= B<9-څ^.G4чUi؛~5nyF#Z"'LI3#d+Z>@Ke,p-2 %Q p﮳Ƚ22UM-]g[BfM-##4ĥ<6'M2nڪ0:arڊ]n {P'[ʷYӂe۱1e}N8{[Pu ta@jb:p\,(~/۱ wN }㘳jFOi_sfa9iՅ8<.0,^͹ը0:?s Rڇ1n@I>n;NuX_F_Sc;pB6RMɞ0\*/یme(bgchXA-;w'cMI'e AgiQd o7\T})5[h* v-;ES.]BA}/W~m8IQqxf<:#s0 4X9bۙ.:pkVŞ'Fx4`sa+7h: K~eG7S`yB40Ν'asuhb{i} *"GS+Qc][j#>Z*署! 2 \rX: O~StÀ-HCMu\ݛ|u^<ܸi$*E-}l`-f" l9?6dIW )($/ЪL$JWщ ZP︂m# D4b.ӳ7'w-SO}MAjI7'TP\}Kf"w [q@6űAG;?4?|b;LoÈFK#HЊ$N4p^\\dM7:]K)3`訹ֺ ]˃"@"i%BAxF[ppf=;*6КHIB1ҜVݻF<2fz4BGl{z]FPUP-qωP1=*BA3ZÌu0]Lilh#[ k1P>>1kY$ƞ5+xY܂_޿?1n}p-v0jؚTS:!$`>2=,x( ?ցnwv5 q6 )M# D^#oHāؖUtpuaӺ jUg;)5l3XJGv!zZ.`}[pG 'wf")Nu؀=86=Kضxs3+'V[ϢO/SR҉|F,)r OozulH}[^ .g3q$iƮU-m@|-UرW(XI;JQ:BcX>4 K-(J}wOYM{{~{+Ǚ@6t~<_^fKv~Ofjh[Kh흀dxj.fiO#n fa֓^AQǪPD=ls=ɂN%|04Y F%[``1[lUSlI$Z4BD _ś|(G_}r.6lkrrz .=U.DWP|~|724-(8sdx @&vV5k׼>*rጲ>thQy#z0L&ސt-̬2:B,0J]̌Hj;`'YK9Zݙ;3;0U#".i8_iH=[+Qq ۶QGށԒV4]n=CF̶\<~ Fxz[P]zaS(&o%~ k`PN#HFfA8Oc=[pٍM kCKY)>e(F|87;3KQ҄3ʱm:d70B9S]'QG3X6<-hh~4 AcGRǘJ-M Is`$GGad9j?U-P 9`ǾwA48uacQ .t]AёZxY kGSs707"ΓM]L-ڎ~ưF˒/ڸamu"ow ߌ[P׎G4Fcv)]&? FgMu*gi@}K;:` _c劼b)ϴэNג-70C5L'z6\^-{=6bM]-ίآصA"~vbrn%8CXez`3Vdh8=< oga(qwaIym8':.a[pkD?NEscsXu ֢vk,q?"<VF^k0mcMoDRfyX[?6&Ю\}$r]zګy HoÀgGVgaw/Ulp.699J-ͧO s#~{3 rmdcgKp!wNؚvM<6ڃ=}hu̱# i00g>Y֠QmlG7S`K47Ʀ2HE5QG!tS84`z<ن+8 Q23ҍH)D_l}m%XXw!j#vΓpk3c][oZZ[:E dFW )͓W#cNlϺ )|Jw+ R0UxzL-م8t]pzcu :TXQWҐ76X?N=kx‰p g3lߟ8r<1)f^$lzҵ2˳e\[mG#ñ8}Yyqša8C8z6(i Bda <'FǨ-XMwi1+vGfa6VK3KOc:6ԄEe=BNӘrXu̽UlQ.8j7'ht\c~ )BV~1\T0ۇ8B~++81bYl[yUnDюX|i9eH?|;c6=:P/8 p1J9YV'(JE-nXwVd^G?Ѡ?w,š=/EmaVmMâ]엹8tP{nۍÑ#?)pFPp2M10oR}%x?GКO>;n4 "[2-ـGqH)vޅ%ϣkݍسs7ߘlr&?fn^7V[f/~a11E=:S%Ƞl9o69'.1 y[P{gma+vq9‹(ksc~4@eMea |Fwt-b{`M6ft bJ:z-T8[tmKEK)j{rTw̞ݒRN`B^B/G@yFcoCNJ1.9ǂGp<.6H#D$Њ X ץ`yr.֞;|DF|ES_dM/FRʦi+N)-a_bQL~;tUHv~\Ck0PuT:ݕ#q`:oڊ4;P  `1lOƂ6!w| ˶)C1fՠA 6oc+bCؓw T ndYGV"؈lI|hž t]V!j= e ]/)nW=~ Poݘ=(֮݇ewc,<فQLјfl+@ٰnIZjQx5.He^\Dh4vCx~ x g ܆TQ*l܋9y`GqA>k6ec[U27硬յhә@Kr$Q}7hmlC{NzLKZFJ>l>5d<Ҭ]ݶkVnĪX&\ð;žrre2*qm|#&k)%q}Q萇I"X XeNje[ vҼa8=.cC\R5A]ZW`Ɋ]1[ {nl>,\ O G}7eM!L0=#Z f{ljA0Ŕt~Ul!KQ" ;R%X-JڱC GiM#=Z@!#TZN rmRd4 Ja(D_40ka2-t)pƭCyWIUL lɦ7]K)3ӈFF #` Y5*o4]/E^1QpBs0)Q{?`c1TaB!M6uab1* 7i0>Y`xo*{ҵ^`~+6PFx6.DDKab#_k{BM܌ڲAiڌ#MSl_#2yo]<(axV>|'dT.\TRl~ kyD,+^sE=۝yH)l>cd9Yg Oe.~LY$7*{'e1hi-֙W甬U 'ɗ* d3SM/lQ}YZEg7Bݤ0SO8 v b@2ER,MV*͉uK Yw %e Hݠd<ս`(e#u[2E|m!s10#M߲ yA'  x4y͆wt-b-6bM]-ί آtFؙEhyQ6-MQ!0zH`O0l)͊a(uS$1˓[&G lSEhꄃFK1qŤxZ*M6F$)BZ Wv'}Y|A9"yF'2djk$1̗}|7N#(.CWF e [y2 (y6ҰKKLÌB2|B3~ahzf^ת)- Zna q+2F -+Y:d{>O!pDãp (6ێiă>Q,"p%<+J(n8вjFb"RjG3G"*Y= 0^ERy0}@:,[ B!5 H>Xefo>u(7}-b-6bM]-ίB+"H!!AjJO ?NaꬭVTz QH032LJiR3X; rL%(,ځqExqIzGa~Jej&lzѵTTLcWOi3w]A-~dM/i ZL`1J73". )}ȫ [gLWIˊkսXX!Eе'S44(KXI1> Tq 1q2lΤ6M:c s2k `m#Fv3K(][4$LQ8s-ʦbƃƔX~U㻚5!0%#'̺q4y׀.U3|jz({0/&& ї2_"$o8q#c/բoNy0JV{~cnFk(iD;ӐNP?FPyn;SK٦׆S`E'"@d"dY|Z>S2+aǦ ݩ{V9Kx2.rhSߏIJC10=S' +o6d_}L_,;2̻GSǀ/F6Yˤ]YK#& n)R@KoK$ٰr뚮w"clX`z :=C[E W]),3 9(G$izR;$F"o-^A\qjæם~300@n^Ӿ|?ֺau;3ᡶ/%G?wL{c=3?nhcT{< l`ˤWK[WWZ~nզ+xu]`P8c$C)zQpwEP?FW8DGUM;jlA(ьhNZExQ G5{|Y $eBTFC2-&PL0a"OĴ0cr)~w b!/9|(fy( Y^ 1j fD ) ֛w9 `=IaXW܂OciE52ʟ}}j$^M1dM6]g$~7u< g= l1mzei{S pxA46\AG<5(<ϙK8C8Cpb5Df֩ k_ n|ָ`DrU(a#ƽF^w..'2zP%:(􂊓,EˢnTSqZ} &C̷~jF멳 dMo:^L鵦N镤)3_6<<<}ئ7/.Fl啧bߥ9_/^`M{'-79D4Hcqc.o 8G9fG('^"pЇ5ğ[?]ϯyA ?|/#lD /3# єu<-ۦ:X{i~yqG;F#x?}QM/xx͊(c"p8)1̱ jaSSTlz9t5#[lɦ7]NFo{ʤzZ!{)ögMGgMפ7Phr͖<镥)Y2ES=[nT%* -Ɇuq׏qlit`1|@;5_Hi:H PZ_ߺ?wtw`CCȝe|瑧e3&P"0bv> s'OLpAcxm%F5SE/ʷ?1F%GG vPQ +ߓ#qgd>L/k Q2 b.p"p f0mz3>˦֖!aMֆby: NW3"]Om&lz3 yoyJٍLS}BHl^xf3lz!-r# A]u 5E^"hiJ叠…!U U?Ҟ41!Vw'am]0^.13-Hk\`Ogwyx0;ޞm (u,ohD ስ6e 8I$&x 龠 Y`F=x/>eci,KY^(82a:J?l"͢>DTG^/ \ %&=XV^1ME2+fӐ7飐gL ̑ C4-$ 1>xF^564Aҝp"XeGC=(F[.<_ c*u#[N7@%J3 :<x b !wxqa ㅫ"N,x=V-AEoyX;OQ9 #^wɍO3أ0!F0RO?;yN{ ~/Yuf'iǦcT5p5~ocڣ؜S ˦EW3)F dMo}M,XOݻ&^Oza_|6bdׇ^XW;)MDqmf3?Vgc1|ЏgzT>օjBJy7FYkИk:P A'GޟKO&c]q/^>ZDS4&AyXnfGM&_’{%r#~k</`~rQ6ԇMx ;5'Cݸ?G~;PG06 yzjOo=QPC ~ OD`/N%-}>1GcGV"nd/}/d5!|D}Iؙ{ m'P`EȪø7lpΤ>x>F1Җ.%1l&lHj^xo^=za]nJ6~uk7`42K-la n`"pFp8|ʼn?Gţ.|279{RٝUXw}>],E&W$QĢ#H_>ϝhD@勅XN~鋦yXz%h`}32HJwô߁+܅X[lh@ƅG 1iZREf#h+ߋ;>V|4]e[:y5RߨHm=|32.rId?=w}kv̬E[?JG\Gu e{'}}?ၤ|,Ǐ>w =W1&g1~OGb#\Bf\^M1kL}ȿ9M6dAW+aS|ѦW^Xvt}6d׏nT`7G:>^^'޾goOSG#xۮA-eG?ޖ#  ޺o][z4+HT/AˏCA/é1|? MſO[V /#vQj#BQ $w/37Rp|!7a-/A_ᖏ5Z5A%݂O~mlzY>-fm#0z+m?nzi5m3wymBdM6dM6dM6[O%fY`#/-cŢp}Ò{F7>wKu{n|PՌ# #ֻ̯Ÿ\=V!xb>H@??|3Sx4xpyĜ*E&0Zx*G"a>8c1?~y2P:܁0˟Z#ւZvOٗtޭxd&4<.'ELymHŲsQi+~/baZ%jFp:uǘ7h< F;P|kɞ6 {YC5Ǘ(nNE#vW E ՚6>B(yYnQ:Qn+eOM+-NyAދwyKm~bM@ږ߄ɬdM6dM6dM6M]IDAT/ .xV>;Ttj 4: GMX?1qZtEh>-s1_{ v~[nC| h3Z}_ ߿_#5_v,[3#^L ՠ<}n7px" :q67a/eapϽOaAY s>QKggO|G>W("j&\9͏'M?LcӸ8kggpn혛|c<+> r~_5p=~G!ukEяn-f&|-K5آ6J, 8}$nݙl{.PʲM6dM6dM6d~/{ѫМ2:H2 Ұ㱂F|hy|w3V6'8Qwo綝Gn Z2Z'df³<ţpwUX8w-~ -Ăi˱ug.;5|)b ME㌵f{6ΞiF/xe^8+,Ē Qu^@ʽ(@k!Oލ=Ga㱰Y6qtW!{B,ZKS";y/J{ !Е3ȜXO֢eLB&쿄xXhRVu :1[K|<>[! Ue`?…8RъVt|[p6-܋n8o[/Է_[E* OYP?B6:7GNCˣE-ƣ|?&"l&l&lɦ7߃-_EFBR-r;{un r1@8+q+`-p(ׂ 4.49#5uMxϬ_e"aD|cp Fo^FF~kfZ0@j(!ߡ֑5k+(D~gDA<a8CL@Z7fa+&$"+ o.|ijXXvYQy !8qx (| Ȉ0=M 2A2w"̼dM)?L 2my13 N &hÜ)z/E<7;8i^+<` G̩uRc剕mk F6 m놜E?p HCb4 ]H &!1;xF?-.yM6dM6dM6d,l|p[޾{[~4LcXELD$D܇(&!4@%Kht"D6(5;w@ N`MxX^iJQx,`S>}2>Vy7LLy5\|=X7{2њ0Dq(Ç[ )4=ȐWg.^ ?+ozh7uOe` Q&&B7/1uL93Ӝf&1w1k!6iҳilaĈɛ)7}HD̵4iFb(dĆ5(H nFm.UX}cdYg} $}C֚P`ʯO^G<yOo©^ g2YcpaÈ]¹ << dyLPGE2>\mbq0)~C-o6a 5m` -9eAUnMT+ve\f[pU&|$@&` d?jGtgf =sjg< Ek  (nD_ fA<P1<ن~2#hjGy~zf#PN:\&?gELdgEAk*(ߏ8|zı5l̢|}h9cg1J~/qA֍cٍ|ddd H?<BB5I̖\ꇼ3gK2Ϡ|]ZS8Cpes5̈#aIFtY#qŵd_3q|ƂFBG kxĜ{Nق$ݲ2cMO%0| 7*0GV@C6)ш ŵ)tښ"Zpn"bygYCP^Via%"ČA8 )A%(kj--5⥴"TRTfhY6qOS3_M4b)Bj>wc"l#GPXt-QFPC~ 3Q\Dfapfwʊ8O\^?\{r!YSq?d\̻%Ɍc VmZ]7#"HeB6GуV1r,'}}=ĘG @ Q8ͼebM9 DKg/U6`:hD؀ξB<`ZMHbRS,o<| qö0iu\#+nCw =2؆Kȝf|YDE*:gW;3r 1[jTƇXmB_^1(Y8TAUHC6dӛ$$ӡ^jJb,&-BR$XC9ae^=As;j*8qxEjd\@wH>%8uyAe4ð̤ڃj~4 F^yn^8##_ê=D2ͭTgL*$LJqNEmRXx4h]H쟛սiH߶mgr kaJ`i#\ܸ~c`HơrԻ:аulEӄ 9c9r:f-yZz2k?'oɺ> Gh [KQS\Zou;DŽ/BfWbmmM6b9n2 dN%آ5c[.`ߏ=w[2)|eY :0:҅l܈ɳ4 9PǨPIFxђ9nBɱdU?[ő TǓ?)WpӇy8T?L%8Dž{[;inOWkzK"Db<}=VĹZ44ta4k<_ٞ2s/YSn/ܬQGf/wkl-BY߅Ǹiա/Tm?%# 'pbvk؝O`yF9*. >_J4OPJuPe<R-܍_~~$h&>8g.+a5 }q'*s3qt%Z$4E$(؂B?% O~M2u0';֌˱*=c ,mA-(@c1#T'X{Fh]nNW ͕Eذ}~LV,%F(w¡ d,{cUx|4 Ӱb\Bi83"MΡf\,؉+6`k?aCӨw/Aֱbq%T}}ZTw Eر|J=Jހf4;BEzz 6FD=ކt4 "_KϤrKƺcyX߀-K[=O/_˗`M8|ف1ݗiQrD惛P0."; N]E[/ld\7xЇB/Z}٧Pd.xp|l$Cec;Qrd%Bh݁I<^+A ^9CcÙn4u , ׬¦\Tw9YK-]m<ʊHf\DؒSU-F a?fgՓM6tmzq%g;u`M6]Z-$l|ݣw?(}kp}޸։R\6'åOPkPGvF9j[cZZBz-@Vn6[ !0с֒XNMߡ ,;\|Fae v(B58t N_ՋRN> рB".埸'p 6T:ۇec;ځN7A y0~*h,ErzJ`,3x+}Ge7^_;`w]U'`JƢ;bmxeKS=pȚ8ZPW]-&%4 ՍJ Xs lٵ/jM_Eqa9./j 8Q7q<7gVm߃]H桼yqւ<5^ 9',u`?':F0Rr&#ڄ]Rg7+]c\u5T Iشq5l݄UZ\Ae>Z+~{v؇lӷ26bM3]lt1lɦ^KEFXT0_:n;])c٫' p?i R$)ĩPfJ_mT^bh؁Gtv =8f1$whJ+r!yi Pfؘ{\k$&ӋxR9Y˖-](:CSw]+ގo6]@Pά^9>;>'}7s?Ax4|̳݁hB߼@ uiFujڍȫ#فmLQ\.49y8]ߊ";[K97#ދ+:;U%8Sը0̃`tl,@ oێEKQVCaӜf 0-Pa*G} j4-U`݄A֋`Yx2x_мCÀ{Sc 2^WzZs}6I=c8|0l\FA]?\!t]<=h>O;2p$N+A-߂#k6#ТVD!?!.rJ`K[d٭)X|6D;ΤCޓ`| Wf8 VlGZ1Cva!֢{`xRi| 8EPk#̾P1,gٗ=H,rTdnCn8<}Wh9[* ,Q)QrP12WGVZ8t I6u/ ZE}:we̦IdMפlyb-6tk (~*Zլ/bv]_}?y^ØyQs?O.+O,QY8UGS9 uLT\T2i@w"呃gV,^JhZ*qן߂ufU.\,iݡ݇|pœw`gu,-#8FگD ?V)J6IO}ٯ̱x_gqyJm-x䦯ac0'OaƒBTSa?]<هVO52gLWE_[Ċ8;m3rO8bίy$`7Kӷ~2.Jf(xfw'Ѷ .L,|]ĚZz Ga7Ng(.!ϖ!a p,[k JM6i#&+0S]Ȩog07yO6\)@nN6NvmAT^pI<%LhwJjlA8epܰg1V:aN^ŽQ9肋I&mx0{}.GI>}cs ]SN䂔(ߙԴTڍ-ub,s.7>+1ʼ %@8rM̳EuZ"=g{"u^TYSWc>?e^MM zPo r_BV1FV!wZl!m^Nڍds,%? očSE+3(hFZ%QNH]آ;7:" ח[Rp8.a/эgK vL_SCp7^lI:aMd#oñҀR`CͧtvM`Lr?@8'75!gv:Qֱ.\,uyvy(/tv}g\BғQp>e߉ #{F䟾NK䁦]Y'jg/[&l_x rزq-Jt7}VI-,$F m WVyŔ%)ac3ғVLV2/]b`Ͽd]XOֿ1d.U뽩p2Ҭ(b*s5uooB(?&/^̦׌&ߴoW˳Ej|<{~KXt \t"{>1|b7rd ̟雦c{nس)xn3菆bm\Ŭ|DFXz~~_!{ط(XӾ8:cRYH `3q˗']#!oƍ(ӡe7V$|N=}\ʺj݀K#M0}_rT;}ʩqL<b:$U'Ocb]#a_?.|!>4uI7/[,Eάxsi;]< =RQ|pñ^y{<Oa?J¶Z=&ocQ Nd%~~/棨E:v@቟.Bu-,b-1lO6dӛ+5o/Dnܩvth@Ϊ(:^^ф*.}q?j43*w:tyt ׬ڋ-hi>RϭƤ<k@٢ظj1ooc.CAi#:}d$_,p}Ib7vSdkB뷀; lyG;ML.=́RqӮl P2dF) }1(Ba/* eAgLyG; sEHLjCr3^2% , 3B!(5@K$w y @~AeSLK`RCdZNTHt3S:$hLzq4fÌϼQv)eD !}'Z7ִ]KUok ܌_Andg2u/ᎍb"6[|o_bƌ= ^[Gn߅aQ1O9. ;Jq{uc }?z/>>{+@|>{ ,SѶla|mjy'b43jk][jI#E9RUi}UXq?| g]DouEOyD0~i~+_ן{3,a0X{?-8v(>5r.vRa4Տ 󩭪3&޴d Vp|?1 R>'/c0s#x{&UGM:a84z#iNBm"Mس|36uAEw#=h;Z}L2=Hc8{OӟxO 3V@ ۹w#x≇ %-!#; kf='iMǃO>бjB)RaV`gJ6JI3ߒ\ %9 2at4 9L08Fy^ )_=p(Ox>0UzZ(&<.T݊#P6L^L )';/Ǝ(][ w4Bzb` TD-\aAIًcԼ}Ǻyi/26Hy]8g无:QZ|,0cYiH::lG^AxfSxއ0硇7 Q>dHKIéuQw=y<6cyjGCSuڴ!4@т`]l߲ӎaDV;#m,=u[2.]A8[z RT/̇{&M7r r#-b$@ 4+|xE1Ȳs X~ᕧUe":WWƼi((byk.n/pC9%yd̚Li/8 qϗ8ACgQrX&]\LL+DdZMh$۴↘aՇPzZ|UkDL:Vc_y:g!)*Sd 4=XU: pdžuL]~6n-n}_>9|9T9~A/x[Ż*)t4ލX!9 ?Zʫ c]Pq7M`)ZZX?6\a爛AŮbyYgdMyoߗ roo::Mu >b1R cnř׍A`s=A^xG1CT~qL 2|tuM^8C~#mG[S3z1paCa}(o/4B~{u14v*R{0@Zى!1&1ZbXkϴ;Z71F{d566t6q?^'|n,+=-dMofߒfU y[$08F{06:w#Q wCh0yQ ;6 >F{Lt-@>/9Ckݽpw`1i M1i8~,'xl;^f-.0u˜ӽIKSb7ܽ^xȧu6{̻cl#cNꁃzo>V1C1bOES:ǍNס5256]p?zL] %[zP;8ܔa`q|u>sd'Έꐇ_SW<&o| cc#l!8. o܉Ojǀ#x0>ɼQJXu91ohp|N/)= : :aM6]^1L#[޾ko9HQ,R`QL8Ωv:Fx y$ ɣxmoc(or%<|L͸L$Oxbgo|7o~㻸c^t(o=>}T?R59+ 5%1Rq/\`\*?+=4>ʈmB#]SdR ~QcK]VJDl6?iBJ A_%6~~·u  ~(RiK?ӰO ̟{,[Y3 ̨o}),/kt!EQ*WCe"9aQ![i_. __W0*?RYLW|̷6ay-"w(UkU h$%Uy +,g|Ȳ=Pa 3n-p)92_).)AuTlIAS:M-F^iD_|I#Z9LC1BOexC")h#c\0d_H2&Ȳ\LC[8냲&`75V\:!&9$0JX|{=2ZHT%_ݸII*J0mҙR晵Xxy-Ivkꏒc+'8ɝ'} "r@Ys7gJD_c9{;.܏۱r3hpg7DP}mJ!ÎhF=gWYS~ h@'0;0m^:r*"BɎض9_[m%hEL~7P˯ITʼ|>*..!*l;)0eP}2@RYQv DҨTu&qAZk6cXf!0fF̗2KiW`yzw,8-El|Ӵ5 "EP qTr"R46vQ}~nM6gGH!K W4|/![|xYk x X(cާ,  IWI=>_cFfA(&}JrS`f=(?OUj -0:KNY)zOev<*Qg~TǦ)hƒA󀊩ɶ>726NeM B}**Zy? `%x%Wm ˾PfUG-ro0Ya{IT|AUPSY}D͔'տ}''> 2mS;eݘ>0*,w(I$5pDy6ySP~ڜwlɦkpӋ-o=|/K$XAm Ӑb.cY|h:Ň2c(>c1|?ӣxZa;x/7wGiQYLpn;"p5Ё pϭ7JGD!5"7Uy0&.G 2tyXB9HZ.XY( kʰwc(P)al2DIjD)Bf/n!/F,&OasTV4->mˣ/Jr 'PVY){)9 9GQU{NӼb 'u[^>c{t﹣^\3|>5O,ƚe8V6r&BgF8[Ѵ#M0і8~8cytxW_ոb7R֎8Gz lB#T:<*S5ʤ8bB#xLOQPAV;fa)ܬ{)02חg)BRtT>oSJ>B91t4VYQ(5dR1FFEB[TG R# 38ڭNJѪOXF-M^\;g8-&4q0M_e,drך/ʋtjtʀL"o6dӛ,L< 7Xx9/ŻZ oߓ !PUaLΠ˕.ߥޤ<)=I<"|xZ cx-.i%7tjW%H67Ϫ@ّ|*[AY򓜞q0;f^ˋ"`25  y +JIf#BZ}\KwTW( ${<Fz㔖bKC1iY޶0oSM*_jg&l6"`ˍ3 aJ1$_bޗ\!%Gbp`z ߤ~+5wo}xρ0> xH" Ŭh2:Qsp5f~XD@%_5ih^@qq160mը)?(?_Zgqm4cxZQw WPWӿUOa]E\5Zt'Ple-Z2X ar#:Q|mn8Tp$%mzRFńNjʪjH7KFa466>ࢳߌD2$ DP%F+, sB JIӷm/(P;`蛰< B/]O,%5VkHǐfX|($:1էU~@!+w^-%^_ F xX?L3n7ٓY[q+G#>ʡ:P;ZJ BSvOI1<3^m!fP2Uٕ_'^P2~%bx +ӌJ)aړ4_(exUXj^E?/Z^h c=O\t^8*Y-cOGhGuϢ3#dQyW&lz$ W,` CU2lɅ'^ K߉YU Ť'.4rl$8)#`4 <3I 7•i&,)K9ҕlS|cd"JNHF@9a@K2,MCO%QF)XOUR3<\CO(apɧ5ߚtX&呁wxCo 4=ԯLKtL^P[+䷦[0ۗxcX_io4*ñoSGUAԼ~Qo<7QzYq+ndZ ie&l6`˞[[0:^3w0!@Cʥ!mA%Hx|<>a.=o4m("x?w1=œ"[#[Y72s>~=Oǽo[p+Lۅex+~wưF3'}g^DB4LmzehJ#gU(㧰--w=ؾ{v`ՙ}~V FDckF^Ta 3@c˾?a=Mv1iR0(墭4P݋i4S 3Rh83vb0'RV]̗8֕oJ%3VȇAc%\<hpbÌ׬ccd+rH2JrFehY8bF! (% F'x(NFh\|(*o>3yfViP Ƨ)+GT=!))m2) IeP _q٥aF)a ll#OH lnC2KL*֡p<6СK\)E;;Zsܟ,T5hPRa}.O}x`_SϚQOƣtx_oE0JTO'S`O1eBM[VsC@,[d@ ;EWM6tmzUjw}z(iƘ(@iUx3{؁0>G33"޳GG51cV όk0=ɘ6dkOɠE,ڊoǪ(&hI#K0ggKizKwctͽh)Xނǘev>'r_NJIز~xΉQ\DZÏnqx]1g?kQ4弓$ۉݖdq8v8nKlY,RT%)N$$W{ zXD;l'c{Xmc5Zg \ʕ:ی[nc1Pwߎ[tM `~gwǧѾFSlQHbh.RRq9;Mw&f`l?;݆!+\LS@|H ֬["_+,e '2i}_ j: >X晟@3(Adrb\1IG <'g\ 3=!b7y;ύI@FpޘVN07AF߬J*KY2fOiiqXyX^|<:G@GdQzUw)1 I &.-g-1mjOPAzcb2W"SvFi%% N3V7 N7_EtybZz soΔ*&nHO3U`)Q뮨Ea Vɟ&M>NA0)PC/b#k@9x1(-ʁM^}/7Mgd[,IJ1L[iZMXKu{A˲,U7CC}=aHuc֔1no6aRb/&-^[iح>YȰr7oʥR<7jTw^nUnw=JW{Y@ 3Q ƚJz?7dG͗gޱiV},xxu,QۼWWK#~ad#rj+tLuHZE>2BZaVdM-oKND]^˲hn-b dL\ Y02- xKT/ޡqޞğeid/x&D|gRdy ޥp`̷4I0(m`kMiFќ{Ur3GwGw~#߃c+x {Gg)0rt=[n}Y-W|*՛Xp_2t`]8Ҿy6*E_eh/O1FӤ{~M}8/%˩T9hŚC[q@k,N|&1+7Mߓht<5 M38?33=G#~Г,ffW, FJ݆ p8ՈS^ ܦOcpa *-19bȩaKq̝82PZ&n2TnG#Uβb Ŕ8ʈe-*୲Z@q]T+0af$)չ>6Zmc^3T &n ʇl͆z?Ѭdm_5p+ P ??L~U.LdM7.'3 YI7}?.o3&Ro)*<3x+K-~bv(>7?5CIU/'g'6U<͎A&^*j5#ȏ6ݠurWޕg߫{ /f2Vi7LgxxY(.+AZufʟ%&PǮ4&y,*2ʔK]6mϊϕOHA*b_jo*FA QVSuL[k0I*?eTIƌ59s1!NiF߼'/V;wF?a=;}$%4 e`Qzja&-ݐbi}GG4iIWX>Q[W6d[`[?Om{M٢;Uw!HLYz)#(L ~wk q΃L݇"#?IZ'ǼӴ<#gW/ׇe!өI:;1@t-a qt+>k"xi's8{iNGew;_ wqy e7͏A.| cWUFąbPSk8/ƦGNbQ`Aҿx*Uc'¦_ĸVĜ)/=܌Y8CRXXY3(cN-onD曕@Y{S͂bရ߶Jkd1dK3aɃu,Z1Y+F;3 o< I H!O\W1k3=s /激‘7Ot?J\Bu\N-eF̏,\bl/' 8*f Qe@?-&3gʥg&"9lF$JSaf`- gf9ԯ$>vS5Bf]) ~|Q) 䁚njbp)YVyEk40Q aOB7 O9bq= L7d l5a%|Kc}7}x,(&4NY J)!?FP,JGFx3SuiPZ4a2 n({ⷬXGgTcF`5 ) x;S{V[2lR !\+p.ERSֻQ%S1&VԴֽҵچ{2 _ڴރJwhW3+`otXy_e'lɦ_ޔr݈oKXg)[J'zu"VF%1Ū4}6 $y~ H/Sf?K ΅ZinDaYx ޙsqs>܇g {ف) | 2֌x/!?Id>7`4o-~q P42-\& ++eh)Uʏ$`ƚFyazRA"KBД~USK|$jQv?0,* Kr~IjcݱX|OڡOeWSɷީ(3(Aַ YzGjUDmFN5dwg?۩$15;c=+d1mQx̏kޣT?jy0 ٛÂdM׌e˿l ,[˕-.c'gFC,Fte\{V~ ?xpv@#8|D4DqſU`g"2ӏޏA, Ll0K1I2G9  C𵶶6d -H:4 m)S0׆3e2z}n:}?;#8zqtxG~7ojM6dӯ-/aI(NoZ ] hF%8(斄J)' yF-dK("~d^OIA\r> E%ϘʼHAw=†Rh3')띘ZEdXr3_3ջ[¼R(n)QJaR@i:8ּC,K; 3Y\GuZR0T5:RzUn&,%ڬ^ .87*VG&,3M֢uƸƚR-^0atϊCOyU{aX~%E?R$ү,m)M6t-Y '~~e鹬\SRNGk Ŵy`'#C96ނ;/xgcSx+tǦq3'f'|v 3x_ 2υ>?-U15łZs 2Ʋ߅w~Ep_>VDfE 8w~z{[M/b+M~7ן?޳&q=Q9L?};h#.~¹x|S]ću;􍗑6O~:~x{z׻pӇ>`xYL"6rtr% )Gn7Z[[:]XZwJp>X\X\:%Ԝ^<,NjF)D^:' 2Y^8xDfN3 C7b&lזȈJ@%+YAP02A ?")dњTdkiNͳ_#܈|)4$o"3bƲްFT{RR$<{tXEEei8E"ǃvUb1 ULN1^߆brNRhtzdh ̕u@.+#ˊv1|3Uȼ!?=2>x>EɄ$lC%ȫRKʹLQ=3/*#ҼK»S%Fg>FVRDlD;Z ت6c KbdNJֱ>T;lgl+Ư{6Ox1UO,`]Fk1=4)bPPEJ(DfڇھL0/IyԵ&lF,+l SQ/d:/LLkTb{;ߺg?Wyo_݋؍߽wWG؆t:>xL6tsZŖ pѭ en @$s4 _jmaSp${Yg\UG.QIF x:b$ˆļ%<ӟTlwC<3pyw 0̮hYL~qS4qnERR:j4Msn}j il\+e!{AsKGtBYp/Ep)ţ-|Ftf?ciM6dMDdK*b --@"=CǤh Ÿ5HJkdh 38E(EFRSR<d#l&v%2dh/J a,Acڵ%!AWHFb]7*rQ k81[ۘ 09ɻubAbX)vәwFI)k̺3~ЋpeHdb0M)܃y,$-X(X|}z_UJB(ddiC(3HӺL11Y<{TuYc ѯjgs+MNh7Ҧ3k0ok>mEEޓd/ۮ1( HGJ&lvt -ڑWͲ1TUr=Hnf~)_R=UyyD"(Ex@dug!> uKW(࣠J䭖ŋ,AU gi\Yx#bƂebt}ʓgT:N_'% <,oxd]LL-%b ~' 1:oК9G浞3Q !ҮgXt֞(:$;XdRhHAur.6AjuF%yTf"c3(nӾ+l#֩rĦÚ0;$c&ghKʏr0J/ߙ\mɦkIo4 eϚFdoQcǨf]cٟG|_ąE.ca Pc1 ,xp %(y,*fP< UvYVQ?; Ͳ kA9_v5/Y _.v %j;Yub~#?2D6  @FQ-G@z{GeMyΝ S!28xmbM6kOnB)K N$Ll#XXDWs `WRЂIa"ekRI8 +݋#Tz SFxќu'O'Qъ9n"& j*.B?.un ÕH>#GtN5.) ע4,=c(dy_8l1}H:ҎeEE%]iK+FR^$O7k˜Kk"19 GDrn-Yg>YFmv\Ds.܆{tUV|.8F;єCȱC(•U/|b:xN΅^taRG\ ::ӄ#Gq`Ӵ!/x?W )y(ԇ)/uLlkK)b P_)8Gw#H\/K Q]݈a:\(<64/pRMl ]W,\El_ƅ,%v*鑗_m.dvɒ&Cu4 c#EOy,]AO} Jj1*[lZ[@k Ɣ-,eoIJH˜UڞY+(vVR 8AmOb)DaiPRN~bW`V/b⚗i:DX<_ày4Y}_ϘVWmFl4%(7#1ZN4yO\fZ-^Y#dAe^y `>}e"D O|.V`ģ\,'U+62)BL=^b 3P'cǷL٢$^lKEX" .'")DxpGh0³qg),u?iEhM6dӯ-@d' A/ae娪(F~i2 |Nbq`B?2ta} E(/.GeY:O! c~_7r9'g.,OdT{%* P> |+QYQ yHJGjn=>`)gyHFbJ֝]WAA6eƑ2tqb{Xqbx8may-yU(PH?]q, MGhvbOv#v<ZB@vU8gSƪOؐsh;<G3зΈcR4XD'p`2/U^VXXG :0t9׎EAwݔ Tg) Z;8 Pe0k=|l[G_юQրfEcn&sѺh[dӵ7E3~u˿S+[h0 Ë,ǰFY"R;]vRUg[ϴ[ L[u)…(yTG+6º0<ŵL Yײā,pd*e e/1Tf#x̱U GP=2Zc6kAt0yHuaC'y)ӂ*wŀ{,-օL5^w EgLYSĞX9]嗇W)v/v;./Ĵ3b) :iD[8IwCDxn|=?[2>>*oܱ&l$%ī,₡ao !. 5+> P]Pݘ]^gR@'gБܔ|94lj\UWґz!b"7'A :X7WxZ]hw!\y735(;y80e3/nGjN=z`&2Lx\2յdY?'܎ܽG]م~PeZSGfH,@ê bM6]+O([x۹-g^SX[?KloJ2ɤkHX2r-IIS3MM㑚!,߈v??9bN{tv-J5LH2%0SVRjEQtt薬SmZikOkeTV'̣措Ӷ*s3Z+d̝lbDj#ghdd#/;c 4x?DRr?()[6nv-ҽkla2f)pl!Zq94?X؋~fKtnG9SX~ڔ47'lٲnFcmj[{9(fpi?͍:&lɦ_A2`Bb[>ZD>5 QS>px)ʚP۳ ?Q$~Q*ʜ h]w1~G g ^4"toOףM3fb`}V9׌…1{O<Ɔ;4Yx|&׈y̏ oNJ)9,=pbabbyh?tM 5CȬB{ :1=܎av:9[SaBk(Ƈ`fn,,ؖlɦMt7~!RW9:ޖMBK kݖYN4~$~0~~`~{_'('=2 ]S@{[z*gZ@KvlH)[8AQ/|l+7 qǽ>k'q|ޅ=N&"23^< ڱ,HDxvCr_OŽ/SZzō_#B7?﷭jl&,[^2[Z// "DQZsMXqѿ"^ WBiC'Ƃ BM ;(v.20E<" {]Xp9WW3mdZ7c>/튰,8那,A~80[ 7$b~(,7vzx` )Ah{ԟ sݕؿ;.m5M$&}="[F0؏ŕNm2]Ir2\ysUF̴pRrZPܴ@ρU'\]Pyx "aQ!AY/Ul.ꗜ"iO.]Zo' ?Wڐz 5]fHb3m8w >-I:SHBL!+6Uu<t,bsm=Oݦ"L :WW\nACϢw B Ch-Hij<Ǟ| ?}ӘdZ^@_׺p܃ч‹Σg 8lzGxǰX zfY4ڈW܅!)܌)z/ )SOgS?W|`G[W1;uљDD kSP0gY8#nVQ_~iyMXxgN|K/]Xey0*АsՍgX;ߏǓUTh+I:[!v78^)EC(;M>݌7?nFJ =:r.±TO?Y̸]\Ũ۹Wo.ҫ{ѮA(,dzs!g.5gvT?N^s h:eҚ6Fc{ub ɉ++nL7޽؛Xu,{QA^:'P%ϽSih|lklZ϶K-lV)6k3,@R`ZȆ =t!i1~- lZ*[aHxQ4 mY U5 _. >|'N? pj7,~ 8p7P'B8)GRRRjWTTd*r_ VdM6 D>@@URD GCAi琘S~MpOQ RF9S>MN9=/Tb,VWguSck+Ea9̪BC^h ϷoxN=ۈ" h<\hYg^" PE]")ƏP9g!;/aaM}rgB=jt\lg@L!n3'Q4B юNt\CIu1*g15Uok=ŨM`O]D W9 1T Ǩ+@ܪi+)r\,.BV AB*95u53ւ'OlpP[zM;DS^dT,bݍSW~EO-< ! $Dm$EHLEa1$vEùT']D˵H~x7 1փ#Sزsv==WvpGbv$ڇ=_уQe$0"l}0ENLU() (8v/ c⎖탛rJՉɉ8{Zfְ>Y?݊bؙӄv"Cf$bIIֈ'RBdMoL )Pc6G fH0{pʏF&kd(]xm,ZfVҵTxcKUOO񩂿]o7k@hvX.VbD@ Qgyu lɦ< Oɲ¥/(ԛ]X$(<.,O/ehĜk8J0/,/?[0Fc9(E]u0  fWsț#_PNG1Jet棬{`z'K^<3尬:YJ'bR1ʋP1y$1bh-'a6 'lJ'0oy`>N`rY[/i%hҬǴǪPUW`N~ u([7~51dVai|pxv<( O"%?^r󐗛S8%daй8>tc)E){qe>w ~EI'Xr ^8ۃ i ڙ34ǑUUۛ,ãt.gX|勈K(r7.9)5+.)s ˲JV^…9$W,anGxa{cXT.qaI\4) 5ȾӨ^$n@I|<';['_Fڥ^w;w-DȬĐMHryR2iz6dϦ_Nٲ, @DJ`OnYʄYO`@Ԕ"uHd[FR6 CぼhG`ǽ((FX. 3Q4Q~~n=ܙx ?Nھg{b艶44ۤ,n kleM6d(\fN4/e ^SPڎ&twpWfƱԕ`ng 諌C Pߌvc3pԣM輄gn< gf ^6M,a4zk"?jtvt0A>R2Iub {]ȲxX~D֗[CGRPpbYCU\gi_.KD q9(ikE[w6RaSW&ׂvtw (ǬG8V?G)X8##~xpqde棬 qn,p9 v=N't#Iğ@nNFrIjljfQ)EX'gQ tێFǥs8Su8pĴݗ3qLFOg62y߿g(ڐNq7 *:0K=SjQ؉ֶBe -Xepᕣl]^w TsSr:Ywu݃k'v\TU }#\b#e>d\SZmG@[[Mހ6d/l l0MQD f74f}m#j4(ڽMo-]Se8lqwcpm Î^|.@ֲS߇Ϝ cZ؇~G>{G,(4]kg+[l&$Q5a+ऀBoIlyr/[=`ױsȬȅx\ b&!Ek1Vla^x)e+vFfk\8%&< KBӤN&2wsB.F\d!cx=xyvsxeid^Z%"^lzE?1Yx1Y#`ʳ`-xiv쬾% й:L9`- L܄g6=Rpu XB:,u`8v| .Mc`8sCMطy ؾzE?:"}ħװWJN rO$]DQ~/waqvDkCxPYP>#2sPT، ^Xf)avwXf.7MX h>* \C (oA8“xE\%4 ضPy" u }q]H^ĩ{̋/b֭8^y5t5 PQ; m5^x^~G3rr 3FhDαc<-rJQGiS/f̏䟐!+5X6dϦlX"Y ebvcbkOȠVX:2]ُVLiOVB&h4$scٷgGމ;s;2߉Rn ax_Dhn+V;54VX QYYE߹x{oz]e[leM6dӛ@ZCf΅ؒM\68(8р5"u_!a-sL 0V(|cn3eF("NES>^$̚^uSok,:<#kK*EdSjkiD̃{o¼kMbB"niDw:\0%3HЁ AJ,eD~iګOg ^BXȺ,,Xg45hfY]xNӵ'9O INu0̸ >}%vp2K`0Y*tz]ol;׬H׬º! yN{hc(3ષ=ZmM{`m6Yg|=CeK085N_l,+@]HW+h+hPmE:Ntvƙvmw,+~ êm+_dU&lzczCe--f햴_we GqhF-J|>ރo, Ũc7i.FUgMo!]KebpL,fq >uӸ5Dқqޗ01cD!8k}1tߌ% +@^ć޵󿿮rrRhעD6dM6IQb%s#DIϞB B萝NR\_X'U$AmP ╵O4(\:G!U+kC~-9J!CQɯ/y,W9OkVlaAI?aR*FM'k0a!L:_~s4uW _,*oЏdZqq#3.JTkO P%FJ55q^}4>? -ʼTaAUIA5=(\ϤvzB咢BJ~۫,ϗF}kUCrM)e))slz(5Ϭ>zUjS}|as~jR}7gCSoMQ i ,#8[9SvQQ6d([7 ٪3NDqy"nW|KC7ꧭ'EF&C3bdέb]pUl ahuK wԇT]ȭW|κ{|VK_⥻r/F:g ?vv(ƃi[r`ڙ`nn۶{]s7|3/-=tU@l&Dbm;oyv֓{0~x4ݾ.N6؝P%n<_q=nnb(6 JcB!B3tz0T&FEͺcrjYCyLʿ&gR13RVT^R|4IW7=7B[g4<' s*/'_I*&'Wc˜(60&lyʖj-ڑT5T] sŽPΆ茂h+"y j'IogS `/dKR8 tdwEIQ8Fqi}ƏYBf0{*CD h@D#aȄO[L˜0O}@ A}%ʀa3ap~8,Ji$>ŷFW*Q)R(ҟFJ$j'e̛F82Fj=!_c*r<qwy1@HqƤ5ҵ,}=y}RY~ZrEo&+O9D[ߎ'S%]:762ҏl6kT.L`ⵏ]2E>̔&l&l&l߰vz_ke 2$+)^\ě)DYD4;vS K>{|m{xMF!HT| \ىoLec_yO_ cMG  j)J!$!Bt[!eZYC,e3k*rpaĩ~ي ~+ @kl/C-x]Amkc}AYGȟJA|yCVa=ND}OySLb%+tÉ 8_T)xR݆8t/6Vcp&4I A^Jai杳j2BP4\ A6u#[e[%RۑFj}Vl&l&l&U5Riœ&@TYnhjP@9JQ 5LmpW<g,߭{Tր%zHAz'Ѭ"a#. L- I8ę/_6odY"TRy0 )ʪDmH覠FIAT^ʊ PR*Y}i)hLKDc7æBs˸4G8?kڑByڴQ̹jܓŵj.xO?m'Ѽf\G/Ӗ,a#AFW*j8GPSbhb?.˪1>5EʉIR4CoFJFf'圬PweO,}W 8g@_޾ۄsEa> ofm&l&l&j1-JQ >ʅFk IzMڥL,nہ;Vp~b9("KAӊjt?걄Icq"83ቷGXE5Q3?|EDj6YHY}އ!m+vh 1NY,j' Gfmo&zj@S{(47@=x޻XzY  0/Z^V fC:Y- ey-Ҕ*?"գu5`C.uau&%KH:5oz#e6jqGRzNXR $C΅" oRݫYJ"N#Rv(aֈjSҳohL~-KY{YEBJ TaˑM=5.bL1&l&l&lzS"CTX0,Q=~)]= `>~cr;R&<_O_ [.e} }޻p'mw|zб(Gw#$RhU:;<ڦ6)ѤN8c$$fX‹dz-WO/zsq\Eߐ~l۲F<el(et> */*-)mdϠ4vyQ|<&l&l&lNTh,JObv1K%&P %GpZ7;gq9“ك%jڠ$]`.! LKXђW8j-ZbmYw<(7ȿ=G_<#g? iCKނ_َMC`i=ÿ+C՘&;GQ7 O }s+rgZ(F28c{懿{KD3PzqG?߶NQ!loQ>߁ IB#;sj-cpO+Bb׋.,Bz~!2ؙ J<'D9>,..+:*9)[5[ݐm, ax&;וp_Q; xpLýO}kU%㳟"l&l&lɦ_iA-œ~ "'Eݓ8V݇)$O"nOdt{qܑ0;pYo89~.!5L!z yM]a$Ú]y|Z!AS^|`Dk^utgƮ"ks³MߖE?ByL9ЋKIxqnIn^Fh)ߗ1@}<~vNc8| ѳA5xs !8|:P}wm“}xۗӃ\7'Q69s)ҭ<|ΞZ9Jucdđ5i+[l&l&lɦnHe!-@DDཾuogM{_j‡5mew't7_'qG n?z84[+/Щ˨2 hJH偔-p;}!{K(ֻxG{$T`@4(:g{p{'Z]ӻNR˓o_ۇ8sz< s.Dxh^4FI\1e=34GpcZC%T}N=1̏ ځ}_p>z;n~b+q Z'2<:wVkp|>V1¯}\C_Y)Ub C!L,,#GΤaB2&xr&R pefj}C #%KJe4fAi\L BAtgXJB.{,sG\:g1]/0:MS\tź m([B#HGLu0dqE~cύYϼzܔ/smlLzsgɊr:V8Cl&~)Ri:{ՙպgz?+[_S _Oӏ[Yk܊_'Iqz|;2Vqˉ57[yO.923mg3>ӄ KY R h؁84Rk pR6?o~a/k͜ă^>V5Hɬ-N9~^<:{ЋH9,ܳ\ш Q.^~DZ@ CFg1Ҙo?}5ZOݳӘ=QL1RCJXfH¼l?-/>3`&Vb °ʇ(&vџ^'o o:@|MS'Qa1/)+|8vQU}ps]^TSΚ|W0۔mPBu!|*).cWɫ'`嫱5ڡUQ0# u2m1zöP5mIZLd\ئ*i_QN6*V,5 fM6ݘvLI /{Q,:x.ێmqS0>?XGgc3ܶ:^5̶wɡ$ı#CuKm{9|jÂ[0'f/ n˿a|o⥼+t^)Ap.,S]:_g|{r͡8vn;^ڂh^'/H^h,1fPЈ+.a2cلwƾKYaNx]lǮWvT%\#I~_;x c_.LG>{e>ҁeH 7TăxDFQ"el)d~^z Fz<$Re gv]e? .,9ĺ *:S? ^zH+F:\$ B]DM&m߆g^؆Cţ[?.ݎW^z /,N@~OՅ Aw-{ZOBxxneY6cOV/ď5B;fx1'# /e ߛ;Ŋ) A/iVv}vZ(X9]h j;rwF4"NE|l *iXC5:2Q1 ߀&j7#60*Ρn.m" ?ɥDg[RK1$L8dbaY+Iae,"Lv',40Y9K#cM6]eˉ_-e:cg: #fɘQ"Ul-gt#{p[(npE|d0ӂ`v3cdW&PTJXi0ـNŹ du n;E/ٌ=κR䧤#\.\ƠCfNo}ͨ*kưMٗ9'[wC:8KXW0.`po`#M-hi?_@SaӑN\qK1&+QB֠\CCo,Adbc+hAfZ:3qKdLҰGQ$y)]bnyyϟZC04qߑiG,P(lHs+!4r< fPd8"Y8>Dg 2!r3dlzF/Q=] AFve*,ˬ\`H߭^ÀRn4*HPzMYgaCl o,1kI1* y0&lţB7' 0 6֣<߁u!oD0<W8\͸TӎԷ##% 9ѷ~w5hmiAkMrc$j⁼eP64bjډ13Ӊ*v .%|y9ZKQB|=U[،&֡G0L#QV0]3;ᑽ%!P+jNVՑqj*(mG~9dg֢ J(hꕦn!;^ LI{P<4g;Z܆f.'P2\ tNF'hO!Nߍ;N~b ĒA/^HN l#cX>C~ro/4*ŶGj3{=t ORHA,(DBs(N/Ža4\b9"b`"+h*@IQ#=Nxׯ`x.珥qށ\ ŕix*jQ}rW[+nY.`2Cd4.tמxnO]5|cױ>]/%3C(>sL_fZWCB` UXҠAtm,iE,|,SK]:rmb]GCXă .t^L"T'BJ,FC$< ;<]Zr!bہOt __$jsF 6#50'Qvr*1F?_9Ե Mkv.ģ/}wvA%ﶾ zK~t#s^Y N6XZ%AJ|~ދ't+-#9_Qfc˲&0Di9}sA=gyd&l+[^o7")[([z\عk)IB>LZ \vͮv|x n3vnTͰd FaF&~h:)>7&xdF9Թɜyh)Ris ̪4N'a\ )Hd;8̜P)'#LBHCba:ӡҟ|i/e adŹĘ데R@i^pBfs -2 )\#nZ$h BVS |ZG)HtsMHkXX;U-"R~T u[cd6<01c^9Dgg ,w=mFjZd6{%ouNSo6dM7,/GIHcgo$/ #n( :CNb bYFWقKA 0jGўsJ0 $ydͅHOkXiƻBR}㵨xmJmjH(^@U9к _S^@ c^92G۝QKp{w\€ /尦e /ֱ6y{|e+!Fk Pq,j,"t3Xb8ETVxB;1ZwN_eև)C-H?>,둕a`"r2{y3Gp83nbC*2Zyl¾sA޿:DF¶8dաӡrdƑE8ZxK@#/}ĶdYzݘ|8pQ1yM;@CE464+. ׀&FZqbvO@i&WeE_S;tm_(JZٶ$ó>˗r m8: NirIoh ýhiiD}#y$tbo=/)Eվ]oԚM6S]Hۯ*[%24&^,Vv)>8螞IU /ft㶗[q׎V<܉y t݈!5'VSTB)5 ֜`Gی?:uY2vϪ>FY# dL3Yj+Y(JMFKaô%/E_oO LeV DA9y)X5itc"pd&Hѯ;I")[ng:7J EK//ǎot/4FR|-7 ߧ| .~CCrL!.CdS{|+}OqhF]@Ek?}uד-6d O {HS dAዺzydbV ʋڰL iɏS(kCϊ0юiZĿގʴ m(EO:)u棴v!s;1y<6C›nM"$Rcm8ce.{ n Qg}xX.(zPt5юz_h!^_5*'eguM'bPF̻h]%hP1**ԶjUlp2r;p`&pMK8 W0XI.D˾@3 0~b7qvYuahQa\'^:d?Kt_ N hX| O:BU1$AQG&0>1exxϝE|4b}'يܾyzpMu4܎m۶aGQ=),~/Gwos/w&5*0n~MهS}Ftv7t]p?]įݱhH k~cl&l_# kl*6^Hf0@VraFMQl;a, Qi& 5a<֋w`уYoO"(8ye[0kJs_^!3UKBZ),XF=8pWئjysȬ@ V:WW{ېs'N$ihNb?#HzwBĥʳM6([fɝ&J*[9S{#e.D@-F"WkPPs6" ymhg@:d;|ᩔ8Ř:sau<1 E#R(/F+KJ5kdHC8\bR)P~X+<7B:T&2: 7IG`XM #|/VY N`T4zhbݣ.G ,vcPLIs?(ʱdO1Cw-a7NwowKO6|T ˹kb/"{݋`p_VZűЖFY`Ldu_Wq=9[bM6$,Ğ,L^Aj") 56/WEN&f`Hk΁$ZEp<G͔0Ba"VX8I,@ 2>#]+<Μ#<xi%? /8~q #rHFnb}*p.bdzx^,Zqp,52Kصr9α,.yCDY87֡ sPI#s i!6ˉUux$TOu#;(VpwTq9dLˬDU*"a'q(ZX9G~fѐ BՉTd֣gMט5yTa(',f[Գ^CrZ!F jSz +>k‘Gws (O?m?g~6?g9V9#@HmFS܍as_|W1v>u=X.Cm^2TxvDNy+G0T59XSO#x.ض\%ػy|<<+؞3Dބ̞FU45Ȃmlɦ7_BRT'v.lY.n([,eK ~'~srcܘ|uW,gVȺbkTL1- 37YGs`C&V ]3ds56'bq)=)aL0ʂNm=kƓ V SVjHGy=d˔%#ER<鎉Gg:pcYױߍD6d۸ϨV@T[w]ܧ;ۊ <|/.`Nܜ^sL$ :]p<G˷!t=lvCEF-þ5[^Wq=9[bM6$ȣQɬ )S+XwQ%OGsdqAaO;5WWp\.sz>)( X2.e"'#.t9~ 8<j= Yq9'-ֻ#,Ww;3;p";'itT3X\0mNܴ/|{mŮ^O>/ahɴ5UY]=-x p. X+c TRf8Ǒ\xN$ _ƚc)5Z"g.[ʖyLcÉ[^CE(Jg@Jvqlp=sl,ٸz̩m1orvH)<)Uu<0~ `|alA](Đ[[M[eQk,ikؒlɦ7_LUUg-)EV-##Fòze/D\,rGJhMLɦkIv;e 0 ~ ^>*/BlzNު/#ICt"{ wpvXj׀ Ѳ| K򏷾zr&lIcOAM!LKJ k=: +/Fl/: g 2V&/!Hz8d /itTp|>kt_[ R28l$CG7yxrQzև+x1:ƖֿF4zѱرzgYTW%OFa2KkѺّj$> ţ.,X*EՙC,u1AT8ܬZt_ӈ҄2cMYd[VZs=kv 6%igev#:WP3g's(w"6BæO cN䔵aA,\p%v? EЯouE(OBͲ h+.r J1ߒP9ºB$B4̻]lǟCbu'Y- D _ՍavS JQ'u8l_H6cQ$X 煵ɦ7b0v;5ӈNPGFqޓxG@Wqv0 piR{yGߍ[?fv#ze\cnjmZNy8q? lF'' kb,XCI<*pb9/VR 1vyX^%߉#p$DqYVSYQvO߀܋Aey:2ӑs ptAzϵ0YiģRvU娪,ťFt_YE=<_BNe-:j>]q8qUU.CiC Hb)yLu_Ğ=1fó$vauORW"++hܟy\mLrU&sQ11V"b JPYsyhŴjjVkMH9wf{D2r^T$g"gcUHxj+GVO! :"zo2Ƥu[$laZQbK߇DʭݤL(Ғ~+g>zV1Qc؟pՅd[iԒ([d e,C3Hٽ9e_%n'[Z\<tc6vIܚ!]?j*&ƭy; 7pmChZʖXo!ھiji AY" h`0}Nߍ|McٯjmQk+B !!ɮ2|b>ĀfGbvf-Fy0/x빵>_c.bx '.xQ Q8MǾFų̈́؂xA1PiE(I(%ِҽQ'0E{re"Q)qG DȻ`S>Vւt.MR^}dtP0UGϼA6m$,J I*ֺ/ħ'z./P̻}Qg,NUʰ@T,!+YC8SU]dka)/ӈFWվ4}vL[[giܚ{!Kհ0 9۸.%HB9ðzl'O-&pBX4~39_4-Kyż[ Gj"T9r1-6 b;f'O܁(dn┲EWfG/mɦMlP\le/O~UȦƮE꧃8r O[ܖ.Qۋ~ޗ^c,.:"z,ڧSk"\xy˺w7DY35B+Ʋ8C/[VTZG߄+E?ޭQKQ !! k g4MS4j;v  ,I S_aǺk&ވ^SVKBpLɦ,pgǎoeba'7I;O+gnނ:!|-x!\<۾bL73.}5_Ż\w)Yޔ_ec d>JKӁΔWr|⇂&SXsckX~B 5 E*O׼j2N[mLsްT%jܬ d4SPZf3@@ @PHE26 Y8Ѽp)[^OSJkd`lr>Hq0N5_Ng3$ DB8&`\.:͹33K>&lQRU$PSR$hR61hMϐuVkW,DY/랦uey9y;nv"AsdbJ56aXHc0~ _ʄ1,g _S\⋖jxQH!4L$C|M%J">c8e|̉yR%0mUQ`)c1 m3,a[uJzMpťxavВew( DzKqjm3z& C]<޴sUy}*7ޱbjoN[mv0z dJc=i8 XŢQ>ygZE8ǤWSTJLUcX0zRR`sgbZ`+(bTN}'aI]Ieae!eP+ۑǴmeM6bʖצ*lҒTW_DuU*Q^YJUٙ8{.ĺ*VbZrݚu_~I/gmt\FH橄Y#;GCSWi6(O3S3Oz0y3Ϻ2?Q>J_Gy z(N="xM)h"'uTq3>x|+-]-G ̘/ h>-*(PbR˜Q8w2tZ-(4@Q ̟ <4¤OID0Lth@̳ͅn5? u[V;x^ͷ˸*'bF |K|T,j|LU'փkKJMDh`ujM6t L0;$IuZ%jMGʼn?-.;(%4CR[D/7Z^FbmiX %X<:H )oPoMROqˢ3 q7 raBɧdbD8ᬵdxmYH?ʾa oȿH/qxQ1?%yCրIJ1]Hބj Na Xf 臭l"r3.KWzL*e5bӋbݫ~SӟՔw MJ3Uʼn/c;𳝘)[S`s#'I)ymh+6E HSaFT/U74]>\7liJx`X(5uCtij/_O_cdy8Mo\qb՞T߃@ tW+[ޖ*lQ037~aj.0:z:QTZNdB@?vFȴ'jcӉ& ;6t P`sF@&^68gS2h-! n7:s <ҎSQ'(FmO^Q L_bLwA@\vsUma7L`7#/ȼ 11W[ #:: +A92D] i" P0ړt~ɇj8+;{ }3Bh[REXw]LaMMy5]% šIOm0v16SS6IʯodcE}I֗Ջ̛ӄQݘr_c7V!DB<*+AlɦN\:-k$zOFwO6~0^UȤX`+"8ɓ40$Xlb]^K(&J4SWMUHKQ+CRų58W|r̃ה`<8ls%`DM3Q\W[RΥawgYurCNlLL-. V\Sy\Iǟ1Vï"5)ʳޟ4e${/Oe}HI]H1 ߦ=Kժiȋl#N% 'fr6uZ*WcԿʯb+[^(\~-[l9Yx(T.-勓(YâmmnDei)ggQөi5KnXDYj)^IF Ϸ υu252C/!f1h Ly#׼]2mSu4/@`-on '}t u -2Se>1pjHxmk,)o4p GTŨg3^gތ>.& `)H1&* ]ޮ?O ޭǦw-R:Z(;  ̳Z`z-I[UƬ$J̼$_ҼlɦkA5As<Ӻ[c1'b@O<Z B>0>-fP8j{M3sVA"_^a.Û| mhY~{?ylPu~YI˙Agqz(چ&-Lѽo~3H&תyl-¿n?1h7{L Q%(e7l7)[U߃aQt ,3luԚ9^YK]s3 ~CӖ,F5i7YWg~[B`M6tmHr⏐"n0; -T=)ci:}ka:tFgpmkp<#BOiH e!OJLNiWi%ħq 1n)$\fAy0;鉉1]#zQgʲW-MkY(3lȷj0YU#ό_0t" AfPʬ Gf1a 5dpރކ,"Y T4)+~y(KR=Twr2u# WN f]Ec~~H%|̺/|jmj[NFţnqu]dAM eCZ0-hjlŎN QΞMQ{oCX|,NNƙT|޻xeXQ vɗVlyB .M(Py9AvP#_4V* asީн⾀s^كNP1aU(kԗUP`emO("/,gن5BH:aQL}c,gΧXx㡎 hN:GyqLBC904q4 Xb3ʟOA҉l1Th$>IkV2*9\6zכIl*PV(v10=d [p7ut4 `1΋ڠ]tW?qO׭34tB)U.-xWKT~߳`=%E;&I~+;*hi,>B29 "peQj ,yQb {e^"#ar[8}3'ɞܷ}8<'BX± A5w"/Fd +U-!aBJ3F0  C]AtP~UcS=f )n:q]T;&-4HqZalVGaqMAu|(HT2ebFdl-ࢆĄ~]x <0 "O `aӀ%lAˆE/_/Hi* ^6{]| YRʇ?r # (&Bayr+^2{򝰮:@":GYM`'i0Am%H!/R{Jǹ\VNz82$To^XNS=Yz&PڧӢUJ z2$AT54#")) 1 WE/\\H:vԌz v4e9p246 b^Ϳ6$#n[O ߏ9(`> GB (L#hƹ _@£PSS#3.e&[ea1!hvmqbi(43n/sq[vܖWJ\U'[b0;{FѢM=WvqRgˤ|H(|-Gh[,d{kb?G;Hv0Jy )SфOf!+}`!^!J/ ,t%!!qY{+G8N/O,uW1R?~qx:g!En_wf_$x/@rHwrNB`RNNGd.+^W:OJM)s(>qE|!f#Euf[&ʏMc ;Ob\fNo ]"Bp޼Rϳ^̕cHN)q aL`Ndebe 8Wf N~f| nѶܸ &%Ppj޷dT#.5n˸]1)_~²Z4$BgߍK:SEAƹf^OlXO-=΅8Ytg_HGV-.ECP)6sHn7#c tpŌt m#(˜Cî/e΂(ނE7N6 fx<_ɇyr"XW)ƴ>'VFlwǼ!.0均L'pnwM_|3"hۋxp'/.Xu&”> X~)]i´sS^ y <:,xsuw~_!Va)0~Cx{?⛸m\ uܤ57!iN:H88Lѧ&A{<ECdp\1ܜ;;qg0nͭm9͸-?Ϭ-9yQ ~Q~w$Max0 !L퓿$QnQfEBa6faB[!}zH,I \>lHpfϿTް#E^-ѓ~LN9_!u8)^Zs5yΆ_)lq^&E]~>[BOFt{#9_n :qV|wO%˭14vvRcKvI+:56O۵DČ`G D"VDgĂ|'sc沓k'ь̍x_ηڂ3A 5z Z$n_OCdz<&?܁>4ČN*탣$̻yx3 V=xxse2ܝh.9ϱ&%h܏`^t5LW/@dI'\\.~2h7vE҆kѝ|+g*1>b72GvFFpp( a;X4vfa=r ;G4)s'n`8MN|nLϳ[ eB n+/,<\'\AL݈KKms 6J?B x3us`f `U ãԾ>vW†3>w cتFu|'Ra} B/â"g}_tmh/Ɔ0J  17UGau10a[, 42 Ɇ1 fy)}1%= 0_43cwB $3)_i8h :XENz VzJˢ1= , uabǻ?Wӥ*R^-GDkI!';q'\.aEF-`6m#fz'`S[*ntIz.pk@3nǣO=mn;6 㾋uiLN}>dd Ga Վޅ:Yߢlqژpl._|%02u80:cԦcxLøYи NvA;)V; g75JDŽc8thnPϾQ(Zy:,BQM3>⎏AV*I<s57*~h+?iR=C$)w $$$._7,pIr^55~;F{r`,m@@9ԶĴ."?YRsGf"̚ V.9;{206/"38YK?Zڕ`eX{,H$C5Ė;dRl;3%= K?{v¢%e$Q,f~y[O1 c *iv*L ݊% ǢhXp%,Y%yG1J̫Ÿؔ4,p7G1Q`8Z#| Y1ioNb 1Q۰'.j~L:Wʈ|;II:3@e`k>ՅDZsvDDE #'°oA\꘨a3a"@4n$E '77i2ebw2Y#DTXq."+_ŋb(2c\G3F -jIgEF Y/tWS%<^_O84[~~;0DPߕ=[=:Q~۱iZ|`>/[ ڀiL?z.i|X&"[&,i5&| ׄqu \ՁlɖKl @Ow[LՋV2FT8l(ݷM@XadG3x9dVݞFFoÒ_f'FHIcݵ 3gpvY.K՘Y39}1Rj< :CH( Hb% ϿFrO 0Ay@Aƞ Xt^^SޠPؐ %(̻ªj ty쌪GD$O=J`obof% {. DZ7Sډb? ,ۋ/p1A#]| mS-ĉx;'I`s9 2}۾|ӈLIp=kG%sS {G sWJZp?>\J|:wxi+^kYis,4(8L<#wy?BqYzI ¦ދ^'.#UMq>IC:w(XpH}gs+ .\|7h/q [TXg% U9Is%EPAyMj.8<* /t0?&"Dy͈sࡐ\&Ȗ&[,d 80At]dKPqtcpxmBOo/.7"/c:FD&n;@J}#T?!!/uRQʫ].6!R!EX,+ =~[,^~PEKQ f|..hA qapěh ._rꬨwW`/'qfmEx?!X5Hݳs.&hX*cټc8Վx_~i'kP;@C)`bIEaI;jQgoQnxn(kX2iC2))l% XmicO RMA|ީ4D$$#$4XX4 *awѰ̓/x2mS'OZ ׭o7q÷PǭGHT~W%gpoi~WOխKm1s61SOe6}=Ƿaɮȥ'd QMa[p# ; Gkٟ *LXdagͨEƾL;fr*Em OU:FMA@8¥c,4T,p4f:$&[ٔ}bNNeK2jؼMu3!p6OuF4ϛ岲g!'IE.:Uܻ^=UeAXGgBIu;)&Y8|ҔXBB§ oDD,gKFņ! tVV =8aY΅9 5aS5M~3$%d"C+9?CVJs14C5D5/l *5gSQՏ8=qF[DUAYʧh+OG=a({zsPx.Da, Ry`_U0"?Ƴ)8!Bܧ*chnCNA2BD|+.9qW(f+D(/KM: .RY]N \ށ 9R*> aᄑmC(*X9G)wGXj lB|'> .D>כֿnnUL30|܋ l).*3(3Ēag6 :ϫjGaM+Y7a'LIOlÂ2T7"5G-$òlϛspr&$! iI;_zG5m+Τ} [sId ρlT-[ }khCSc;[sp`񃘵{3_j2KaU,طwZ۸nS: UoC^.rݯ p:l\ Ǝ`nSaX`E(Z mlܸ {Vo@T^ GЛ~g>m5n<@FSa}؝߅n; < 8g=3'T ,Ê9HHY0y}_6nĺa8QRhL;TI1Z$:u W0WPgZ]cMX> ,|6 $g !dtjjPTUө8N(V"|~dxs)+gLfK9YoǷn7wn?#;qwb Ίå{xfl;;8X&ra'W7FpR i`A~T?{{^p6D>Jqp#o6bӖ-E19&kM7&1'oq#mK< ޼ N *e H:7n*C4Hu:# ":2 ;wB cφXq?vB2'i5 `0ܼi¶˰8E c?T gFvj',598sx36FV -9OAvbX[ D,%$$$$x\1bEdu܊7 IQgpt,<6R|imMřj7[ŗy8I"3) 0(%ٜ7Ј&e r15IIHBM_`I|ZML*Daz,)(_^̠( gk:)**8;P]$áC0ʾHNJ%[,x#S)rIIoŨs )BF`CZB+iCkmwM7^/JxK$l58|6X>A"l_P6JMqWfrZ'Χcﺽ>W=;#RN#(I/BSs3SVFԥFcИ}Qb܌ 8O]FR>j:0^TT8$#6գeVCm%I8WZ+w:цHK9Q\Q~k?τc{4Ũ pO1 @e8J^\_~O.$D"?ꑕDm(995跸).u8.)q fڠj7jPZ iHK=ǰe2NVtA1>ԎLğKFfi7c@g+J IOнvSU=jY ~ <ؼ4 [(?EO.kz@K3FPY(h \)aҰ^  =1IvF nG 4[1XcPmb,ٓ-AA4%(**GyyܪcX|DFB8\fݻ-m )o+PB})šӯRxE AYcbi$ ۗ`3g۳vL/OY2|^hGu1|9T|m-Z`ܞT>+"L3OgiG*)qAs mo)=g^5e++W؉^+SB]^> yy$lA}S3ZnlA|۹PϏlat<>֟m??;q~t엸=iXU[CWrBxd-,O⭆mW4nxn~ Z[_%Yw#h .;/|/<*f<HVY7n1nBN{ӏD#҄AV~{-I `{?]FRSMwc٘xp84`Q,xxGAzׅ^o|w~$ws=/?+.?v Rd}$xit:<:^k!B$x;  <8{q,fص1 7Gbx1kxl&-Ǻ vw&zꑹf^X^؄x*!!!A='@$¸B Ӽ4_r&LUQq vÌ`5$,&l1X㐜YfcAuQW?MQL*{H,Dh+3vbKr(} 2+b꒿3ablԡ|tQw1/B^i)KRq@:zt+G%:2MrE[6䶍cPIOJFVW Fr2$ Ga'Vb UKıFTic=nRϞABb,#p"|k8MU5{q ~'Zނ;'Ƅ2D>jSihOϓwޭK,,ْZNB&mc8p8ĦEf.Ef v4dD<}IHC c",݇Gp4Ź((;#˶s8pvF:]J ӄ l 7> 2Qlv |+DマoADON`%Gqo# n&J՘8AB8^=fU. pp6 n1Ojw {ϔcSLbO~Nc?~ k zܮ1 t*Ygv/݃ hQ}Mk~ +#FHª{Ō9p<H[qI繿bsFa7~aqc(6(~uz'=&]L6 j J욵)u&P_BA e.35Y) 8nzAx\Jm=4\M,þRP߫9);PnbXi9A![JOC݇J&BbRN>)HKÙFmfo>k>1Wlur* LhW ژ}&j"I: uq-wԓ 2-Eq\R69)#a*ȥ#r9鬷"KZM㰐0NO FqY^6D4 JTRsL{5F".v9G/;9LH&xp/ y-unf m_7ά_ᜟ7i?yx/m:nLK]' Cйtn KS0MB.C¢sk~=RNͯޏ=&:/3l^$rv#??/'Ԏ5jtO8[# $`btuJrJykv"d?t!󣙈:U_Oa: 1ih&-$ ]u"'`5ekE4~lŞI{*QMKAu.F"v@jBg6/Aq^f`Tr"}R3XhI3gTTUX$zcG+a#҄ qH9[,{i4fZU׫z8ݼ@CfݘXe=0ʢ <7C )}Y:ft5<:~MHĔ Y.sl%1,_ueR&Tg"d_8,kCήC01k,]sGj/C̼-HÐdBj E8>C#6 /$bB͂sؽ=̟ ybFW B6nzt@ڈh cgy8݇vŇ"d,\PdEA\rꆚQ eQXw( ٧‘B˷|~;c ڈAojU(:Yh$sfxR bF"g?<9q!g0jyFV| k):q.́4PM]1%P]4 ؿ%P?m+8e'3 $]131;D: rv\u W^R-*=8ma6`6nmL#45[nDSsh+ϥrU"+0+Q 5NRw. e'3"uĠ+Kde;I/Htzc ʀm1E D,F|Vʊ!v)t) Cunp ՗=Jyp9l}-Yh`AIUL_@q, zls`w4ZxZb{oL#&ȃ ƯCě%bmT~]*} 8ڴFsX\W⅂9Y<;7|8êVjg ,x.0Շ ;Ǐct[~}h;vv븀wc;p yqW^Τt67CgGvis4P0Pq#>Kב@Z#܊> FBVgԈՉX c( XP6GH(t1(޺Q*"1{^GrK1ʲ`N*|zqb{.PBXVT75-61u_I}./߷ Ȧ!h~xbGDy> -KlGmy6MYY,H{F/~ak~#` * ? #V'gQ/dvy~$7QFёDmUD-HF?cHgx,gOQ$6؅( FanDV!$5d#d UXq`{GEX %AH-EmTvp4!lZlXbtbE!fyL8£CR 22=$c&,}rr:UP<2)S:v 8ʢ"<-Ž$K8je.d؍~bڵXl, "FZ*Ī2 1(D*)1 Fpj?$[D!ٴͲ"=`~,XsdKRJ(FHo٭=Amzv g-ȋqjfA}uA0Rۻ:`p C1l#Ƒŋq=Nj͞~$!la7i;-m( GF1֚Wلz0z(@ >=ྊeCCECY%Q~sCxδ}@%Q26M8nӊI./@(BKsi-)Fѱs&Z*U@+z4yŧ &G|2_L/_|ӆmgCpgbfr{64-8by2r?? >1DI(oD:T#&)]H./UυSXc_& ;zytnOn{G`'T,ޟ1-,4*De!aZ٪ګc Az{ v*ǚ#$َqo|]%%#.߃hDEXr[aսY^=D))\]z$l݇cGSP<Ё#x[bmƜ0bqffĢM ՝l=h??x;{5V5308?D)[yv7c08݉Qꗨ>[ycwOJh?6' m$ė&D 2< ٤Zph6l4VKKG ދVtZ2n-T4wT$4JĆlS>~̬ذ.E]#ǛєSCql MFNKX!C}fEwe *PUS$da8d5 cͮ}U! (# N\6kp\!ڇl.r]q#\*wRM򖃧w3KPg%E[Apl2kJQU[*kmu!"F24<Aڐ RG+[F \\$KF1N-cL1!$!oAБK,9%3 ;`3Z0/Z;*2 |w, hT#bnɮ&y 3qb*˩G-Hqԥa5W#x+DIm-%pg=h#2GSQ`c4.DP2;w&EWY~Wl؍&gWUn3.I{l@ )NJuyGcgL zQ1oHһq~?$atqdVu1.(=CRۨn2D؃Smhr?3k$ ,n.ԝ Cc导tBWP!™hS#a0Q <N "`$zW#bħ [@?=hHéPC'| z dJ՘1jB8D#"Lkqng3hwQ= Sc:vUd/t] rW4vVUWҲb(.*EaI1_+B^A2_ XLS@L`Rk/arNAi&*hPF_=3ocO0&daee~;mC4_~bV25&=Myn\wH`"/_E|ҤlY biYiJdt/]/! VFe/Rd ;6zOilF hߏ׾{A5ipˎ $y>ޚ:-ƂMlh{3#Çn#sWa^TzFQ)yxI4Қ1uz-"!VaŘ;*kfcPe+~ev&cx噗1cbY0~nl@K`skK}CAxXH/߈E1eŊpLz;|n̜gFX ̈́ ~s1w pl,6 Vxgme'px%]]<s,C@v9RbۼX<:J0eG$2ZIPh,}$hb\#Bs ) I@Lt0B %m, 4-zAvŮڈ-S݁!d&&3,+ Cv 2BuhI8Ajl\ NEEtuv:G!2*aM@\vG1 qdbchĥGF8T4b &=$g+!㤀6!qIo@/ulɩTps'oW%SRλ<꩏[Z\8_t\ao&eF${Bݝ~Ȩ/#>r)q2> .DjGUc5( A YգUԞHH@+-,wyeE&[z2¥ 4Ji?quLL#2TeBȾ(\b9wyt$)y(mnd3ع/!!v:7R;ZՏ~Vw8 NI8sLQ<nW!jላFbR6jI v?e(iî 7 p5>GHtOöf\H GD@<ވ=GR F$~zda֝_y n'iBʖ8Vz*Dž0rGtrjz0`sږHngB ?Q7M HݱBr}(iCyfP;lH's]Yr>֫1s!PNmY|"198qj^ @@4ё 3Ev1yi lD/|Dl Q\b-A>_-*V\yW^z"܅MDH*X~Ejx ̈́ t13-:aAjpcōs|Q>Lf|qzy>](SLNpIC9s|4'&4XAśPELq 5 t7@]Oa!NddC;%5("{$pt䢺 "]F ߱ɖo|#[8vl`[~<[} H~Ml ƃq඄Τ'A˟3ͧw)ho"mlnׂo S11/3ܞ̒*vvL4ɪa meM1؆FlT?N}\ U)$dr+0sQGljDžBejQ50EН:R8'砰Ns ;C/IDau;ZF&zN(N(@= *t)-BI^%],~"|$$> |d+ Rj1+r6 N}ܝcܓ| n{OOƵߎ^[#q`S> #qGBBBB G*&VgᴓNC9eg~ߜ܂~_K|}mgg[OMc$ M±Orʄ!!!!!uGsӶ&0~LĴk+HEB ϓl-hl:`XEB{:&íwށ+WՋr~|0B4A!}98\ q'KHHHHH|d>ӷL,[H<7Ŝz WҘ1{\TvM/;A6Dr0⡫t*'{;G}񾄄S+E;tgbfe8"ceb̸8|IcK8HHHHHH|VdB$aӷlQK:xpq!{^(K9 Z_y*qzWe/|ucBL {K|ӽXqJBBBBB3$[$$ mgԥr.-&U8n T~]tw)qW~t$$$$$`ak\NAkٗ'OJHHHHH|d,d~nd sp(܆ )/v^MJ<ߞ[T),L>Yt#@}1|$[$$$$.h[C~<x6 D{∈%/|Ov$$$$$$>HEB ϛl j+Id(.:©C>YY t/IװJqUD:+;%3Y;"!!!!ŇN*3d-<6*ǻo08S(\`GBBBBBeI\|1 ޭFMWI#mBxk7)n垫)2; (}cAľ-D|C,J%<fVpI8\AÊ-2M/:BEpQ4urZ ~ G}ӯR@đkkg8vqT,x%53"̩?3 G :QX~7D&N1LĒl hq$ekƒ)oא>dee… FNN.rs dgұ d|^6R/ι FFv&ꡰU" OРn҅uRLpn_o4&4(4AlTF~ŒtU e{qKuZQ))\_*Ay᠔/㫃#*pRAt &L.:wFn>1!&NqU5U;qqe%$$$$$$$$$$$$>{\ӈ.VRҶ6:u 55C}T~֡5Bee9סUCaer.xEȲXl/YEKwDr!Ɯp+0dHŰYHr `_S sP0x0t :yT7]iT /yvJI*hTe.O?󔾦 qxX;?/ |m,؜2ڄFM}:0fcK)sDmxHOBBBBBBBBBBBBsmr~ގd(V45(hPЬ>kՃnVBN Dqq!J9V! %Z6}6^r:avaiKƆk[ށ>)*+ljP9(,.FQaGg*c넛 pKà˃ XL:nR VaJ 7iҔ t'bOOۦHhqhL(~ 7]GIT}+]؅Bl c…9`hLʐBOm^t` J{(#BO;:K(m@e}3bѓMNC}s+I =r/g<ؕ¶l -2%SŪ3|+ FX +NX(**JQQR* } Q/bkDr`&Q <(#}0G,nAԨ3Lf Ms:`U#uz};]91'8w&|@:>6 Mա`lie;aȰ&,:6a,ڠ94A(a"&[Ϣh,v'p4$G#q80/]ŋg˒l)T@y-[RSSI5fGfo4Pl2p@XyvD(2[#YCp .8DLa)愇dg ӯ/Ry0Mu:5DEsq,?qW㺫6n5|~x7!blgH,isT@ Q{10o Lnz3 zõ|>( \9y wc<1S]ħAP[)@&(jPV[Ԭ< 0 Pa2bp)Dϖ ҅oΝmaX푡8rIGݨeztTQ6ʢ"o SCyi%JK+NAyZQs ^؍UXO]u76V<6-$2r4Ԥw Obq\.k1hűsHU)O<9X㗄FdXgxlK*Jm)ejMGι$d왎(:{Ǒ nPT?w*nwlAqgxH4-A+.CWO?"h83-n{"e eOeo6olXW]bM"e.v;PmC݀M*.e(*/~R,Na+;0ZP wixw`ʃC7a?Ӯ [*PY+޳pyn*3ҮC 8B :eX6u7 $b`4|޽QHC[2?NY#O?ط|:~j-:eǻ<|;ѕs\,,X?}'8b FYL8DtlqQ:tmq%\b [Fpu0DR˿ iDtෳ^m=;yzO,~olZe):c"iKAdf9r:Q=SAqY B$2$aRBcgF#"6ͯߊ/y0?"30`8C `Ŏ ՝Fx=pRqU^1Uuln6`啅<O݆!.8܈>Qdj@usˋhR1yÃ?-X%c*׉ U"?0v\{w`=H+P(E|ڊI~2/ph48s2AeoN_zҲEBBBBBBBBBBBǗs/ pqx.1^k#)XpM !C&xHXLfŧ^컅l9{,l|{&nye+⾩ogy3ںExo6,?!GZy-v=`&/(&GƂb_ :?ҏA5`:E_["Qۖ51A7xif'%Zxq]ǘJǫ6o*>m*)p(n@nFW> 1=t@< =#.aCɁWqϿtF>n_!^Sx1?#FDd.rܾ|r:g˒laRbԧ2|9\*[vC39~xu19Ŷ+DdFJkqmȪljK?/{pS~(üž6rVb/Q`ƘbԌ*jV{ޮX엊ӱ/8]*e" 1+KJQ\X-nEw XsmY圃‘_\e fd!$2fRA-4".T^~uhCۀ-6wČQ Ga7cjň݉Q &cNXqeeBo?[0gG[q3Q)"~$[$$$$$$$$$$$$&.iD,attըA}Mj*Q_]Z 55Ut 5ըF-D%@5$g:dPu:hD 5d [p`E[CJ5) ]Wa%S 7ԉ2 _/SJNm=PB9QܔCәر.;kfYlLе/+TS]-@q8O01Td) .[<[5le2T14 WZ+cehPLx&SPE6SmNת._G&xg6#NhGo1x|l)-c-#l929}0";CBe%k“~x`Ru&_Q-YxJAt_ck2OsѶKlb%u8TJ6,I?" [6T:q6T+Hyѥ31A(:qY(HOwVv. E|xz+lbFy)ՖH- vȿlMM~G1޷d/]µ"|\drMM-D3 d5a&\%[-Zq\qW`VFWqj$鬂DTV0qbӻ?{O|/&6'="_ />޺(geSc^xOBK  Ƀ/yOl  %K\}M-W2r![VPuLq>yH% Wĕ{B-O#dDd"*TOa )Wf'/+?$"!!!!!!!!!!!1y ɖ 2ēXa:S8Ui_-l<^d n'ZvZӾA'&bKH  -Y *'밆Z^ǀ %V7$$ΐdwß%\.CtW^奓=0S"C-YHp eU+ǪM'#-[$& $"!!!!!!!!!!!1y>[r:wy-N +y4oХc^oH%$d>"X.2rձV\yW vA;Q5]>k qz.vk"lОN7p))|WwWQ8->Źug~e؉/wH8 CG:V;*kQILnHEBBBBBBBBBBBb`l QD`ȖV\vǚ e,$W EVnŷx=KABJC`׹KbEfm]O-'{->e^"d LT +N 5'Te ;5;G( *T]xe#/{]ue(NHQv{t T zM62(} ?<dh*nݣR S94sr킮aBkqz-N(.ce&XGG)8®{tƫKL^HEBBBBBBBBBBBb#[>&[f%hW }\uWnj/x6:7qMF8-pT-HɵmXP*1}~f,̟3N#{ RD.ޏ!( ݌4DmysǜdB%UيGwGFHLfHEBBBBBBBBBBBbo&[-Q&"][K^Ynhۡ:umRЅwG37to`*n[)::1Q s {G;*c҉Ƽ Lp6bZbSrid4(~/kߤc)GJDw`ǴwYcÑBS8ؑ֊F8+{!;ߛ{A%htC!]TVZҝ$[$$$$$$$$$$$$&v%>AO-mQc .CET\6 tky8;ЁN;3u^t1ͧ 1;1qYAbW$EVJ<=# X{KX (ۅߛ fCXJD6b$}U8ь!/B׆7|vm[c3AN+û̴qQ9U*j]*]:ȝd-^E.YpU@q;x Wr:61tCkAh(NםlCBT5ah*pB:Doı 'hf9TZ(?ԊS1`[(.JQKbKyȲ`աw AxĦ47FZ5^'i) >01S$$[$$$$$$$$$$$$&G?"V$X(dDliǕG[q %W- NcrM:+[o[6q51Qqā͸n7]5A#WH\&[4*ԚQ5kp@7uëy M53҂؃ݧet:?]Ft;c Z0Xw8ӄ֦8:c1fR#\4O)I$[$$$$$$$$$$$$&7r' Y&?C|$&[<:OxpÎz^w[Qf7x=ǁf^S²g⸨ /ӬU,z` 5U ?_>.4aPڞDlyܚlƇnŪ,CÔV]8V2yz N:Qy6Zk1AHmBg-ay\P~:mST"v:94Kl<+ȖO-ʫ[3paV|X³yngWDD8,N';P&K;T8 (=&` {0q͎1Հ>X`[aݯq1`n@_/WOţw7ێ~gļצ^{+ -'Wf4t6BЦwo^oN_á hp -2Ta(K:Ƚ  Ƀ/]_ג-g F4VWMT-:dp{7}u㛁 94qX*رxcvX٬*B *;5*A̮`GUx^(ąr2Ӛ 0:wC@q4XV/NJGoorP38 [Y"6_W\6 f*BCi ;4+V`٪~C*2S̔7YX" IHHHHHHHHHHHHL|x H70-AdK%GQ w%;q]k\w ϖ!7谪:1h 7O% :pA~Q4#XWZxD%`eP&^TQzLn1US4űS: ЯCU g1 H)C.蔖N WsPl6Rt(/+:a5l<(iC떿lD>ֆ+K?_dbxWO~!TpׅVݭo@V)KgŗI H0a@m7K^CWV~(yPXY)Shۣi8b 7Mvli?])ML(|\^(.¥ Dyӡs`[brC-jD> _dE*uۡ: ⛡v\߂_D Cjb,NRnU栺QE3A ã KD!it-r8p`BDTNťPzf`\NAlBFp2:8EWQn)5+Je}C-?F`Vzkla}u :'bjn!<}jy.؝<Ճ݀ˣi>LP:2Ph) 81 am괯U miGۀpRBbV, ]$ +.zc·A _"ft-[&Z+$1! Ƀn L04]+*ƐiFR)T pm i8.aiy+9JOgbud:{׋*H?JLm%0T'ta+*29.tLw0٣1#pFʸ"!>/)Ol}cs._DW^sR:LHLvHEBBBBBBBBBBBboXA\:khᕈ/mūʫ-@>^Uؕ,)\:1Zu^ޤꮸT37>(n ;e*· 49Os;!Ed"Ozϸ0AĽM bqm OoD UQ$&7$"!!!!!!!!!!!1yF$A.l6|KL-W_dĥIHHHHHHHHHHHHLȖ WBR$[$$$$$$$$$$$$&>YHBR$[$$$$$$$$$$$$&$"!$[$$$$$$$$$$$$&>S~\}WoÕG[qIHH|dD{ɖ#l,  ɃR+ OlNÃ0 t:~hfŘ7Ąb,7E|oqDjq'? ?*XlM=TbrC)IHHHHHHHHHHHHL d5h1\D˨hp [>Z誀V\І+q-} R)^Zٌ?Ɵ|?M7~7x3~ß?!nэMaҹXbr2Uje]XqA;.)nn::14YhNJE[RonNiNJQ}A((o; ǰQ~' yCwA1pz03WqJILjHEBBBBBBBBBBBb#[?&[.Ft-֯GGS+^{")鳅[.Qe͚5;> n~ZXwrB<zd!zp} }VþQ]wSlb!KCs" 0;ݣړĔ(|kCּ!":c(NAȰ5!qn8Pax@u|pSc*<Հء{(w[l1ˬѳ;(AHLjHEBBBBBBBBBBBbS$[KlYv-2ϥgWӘ4^0 s7c՜)X3N|0v, f-_nqhA£b qPW** ɭ]5tEJGXdΥڄ| B^ FA4'y502@-*rDt]aBiasru=hh+: JJtVi +.;[*QQ ȬFר1NA҃x߾ \%t9[L-܃n!n~uK­V kp/b}qx^1J,1! ILd˪իiVopdc*>Yŏ߿߾Z|w޻Ws;~bl޴^BX" ;5tX2c =܂;^Îq ݏ ըܮY{+XЇa*_O,  Xǰ&]=cx mQ{#MExk)} \~*0׋$IIHHHHHHHHHHHHLHe$[֯_nŔū߉' ?[oo~;nOoJ.Сø_$<`W§b@ @T#~ؽ{yYh0ÎjvCxoA* X۷0kytT:j wyF䱷S{؟ׂf7!({?Vf0R>*7y)j*ǷFbB-ϖ?G\y/"[z'S޾XAӈ֯GbL$~1-+g{^y/}&|z8vlێ܂(T?ţ@0un܃證ǂ;p?saA;tGcR\[𫯼5 ::N"d IAp&āX},ݰ q- #ɵL~|M~%"!!!!!!!!!!!%[t]ʩ/\vwwՈOO>;^؄^ pܷ N9o>w݁G~|Q :,{vE~~>40BA'% (8\N+u#uo'p~8Ҍ1^Yc%s슨@]obv,W6 ʫ1V?N" [o<εↇ1(hnVuL>ލX;UTpS4$l{SqzVY7ߙ{L7ziB$B$xBw׊{yUJu׻~BLi\ʪ۶+*ݏ&:h?f1w??؇-Ͼ7-W߂O?]>5k#P g0~Bs"oW)B)Ƚ|s@FRGPn@$"υ]G9R|D1(#BOB%*,%0RWco(yiI*R6a<_աD~([!B!$u8oETR5 XUlر#֯ۄkfo}㖠Өxr|ԯ>m#?;ގFkoe1w]J\ݤ6"iWO B_} %p<85()D/SجI|N<"Pӽ_P[솼P@t*YH*m3 @t͸&UPl!B!lfV>;v :uS5qc u/DwěAn+ 5W߀IfݱfF^"x2PEB&JȽ-IfD̒0hJfRX,P0e"T1q=.\)oq2=rZO"'Y/6%PUE|vbF!.EKmi\YE7<-B!:Pl) LW%77ӧOIxxUk{h^h^G-mھmjvoƸS1y8;~U.Spe;HWC%f䛴'=HO7̀qlK`OACWu6e\J卯 9P>X!ďZiH>~,RV'fHF%跄unI&3Z_w?mV3VtPmOD&&_TQ__"峴$TUOM!%ǯA#4F^b !B![Pl!B!ԁb !-B!:Pl!@B!BR-T(B!BH@ B!BI(RB!B!B*[!B!$uBHb !B![Pl!B!J|(B!BI.4׌b !pPl!B!ԁb !-B!:Pl!@B!BR-T(B!BH@ B!BI(RB!B!B*[!B!$uBHb !B!Pl6G#?Xqƈ%Kh0A֒ lZV4z|ߴ#RE;NB eAm_UZI^%/ ")[^myoZg-8<8]ѦƓ-g~WWD C3iR&&|-9$>7KZNKZѿa|{ܛ0f٧Z:>ٞ(,dێ?I'){'fKuB#I:ؿ'B!BI *ؒm :\] w0︔Ut }u|xB먆<֊(Gi3 sdXGqɠ('?>HQK |7L(}I^B M)yW&+H7z)>I;[L~k$+R|W2΁dOon(>Tte #⓴.RN߬p UF>_)A+_^K?#Jڎxad}2չz2RN3;2 ̇{ot>__&^tNdLX$2#GU("s)c m{2goFw iݷ<ʃ#cĴO̹̐A%wQ #K-B!:T8E$UEBf н"$Xw%֘^bg| o^qCyX{v}L> \}vQ/Yx_$l -o5bE c5UX\Cy(cB+h}/q6EkG0< ˂y"P_ yUK)XO*uL#M"q3ɱI{MR̝+]$a,ZiiiXi`ɢH[%i~,oӖbEb H/ ~[l.]"\l̕煋b"yx=_1-#nRS6yT:T:\W:\pUT իWGQ^kX5вEsm:vh/ѡ}{t ./^K!M+ct1\,]*cۺuoAB!BR'hf hq2!T‡$xMTn׵]z_M+ fhKZӬ' 3Q xҧb !#K1Ƹqsqm7+` NDb"Ar8#&?(cHY$p|DjQ|qnv=h1:RF3W"W /c L\]3-2?Il]QE"O|C׊La>!l\5 N:g*hm5j(CB!BR (]GlfKkB&H %pAqmŸ<%W_Ŀ:6{?_/E^IBZla$-q4gDsL\`tVx6xH3D}XnI3Rׄp/9m7t~F3aJHRnz?Z mcĈ6 W{/}0Kv;RRf#oFt]i7pB .Q* u. Th1X!~;]"*jծwV1FB!B*oϖ0@L $wwfl8Y\L4q n 9YyWt3/Os\MX3S{4E,K)=#=FQ k֯@+7O)aoEvtZ_BWF8LIڰ{1]+%R! =ҟ}x%Y.Bn.z/q;7u= T\D !sjfO{-J$̀ѽd\|~z$>ڽSe>̯:VŖ(B!BHŢ- tH7'PY1CCś֛QE&o ^y:4\f%:Nۃy%(quTtJLI.5*YuG`Ro7DUQ&(\/bYŧN`)عk-ϝI&bX Qر& s s0{.dJD֓uݡX(ҷ"HFs黱v"4fgl]33{D(AAnkf!s\a1X3&Ib=8)sK4G3ht)Uz[B!B! (Dfx Ad7ww> n,Em"\z%~z.yc ~"\d9z:+`|M.Av Q$%u8<-yK.3"t3;~GOxjkTysJ$HNDE\7 yw^u :S'PFۃ0/KՓ{QxV4`sg~Z?uĝUBcExt!F?Ge!l즻Ξ%E[\d*h\Mz5|x087/BfĤ|=@nB!B!'$)E,N }O7[$`QhxKs ?>-nį/tٯq韮/̕d]~w(g:V=Q(6C`YlItT̄ƴ6m30hJ?%m`H(ȁ9: /^'ĥ=~e%oĉ8|ܮ-^z+ʫ*, g^,}^+KpCxΛpͥ{A{_7T /6niGmбxபVw>7G۟DO>3wVǽOFCz5q?WxWU*>W//CB!BR *pa\l9[[!L(;\"[|ؒa hV ,x)<nʻvq˨P; 4Z4nG2wha7#%^ cpl\7>^yp::YT)@!zci\}#[⽁pTޙ00syc|4vlot;R<ڏMa *5z!w(A·+( ?^yy>\+Y͞G`l%#եU1u+ć{Đ-nW4.>6 sOAS1pL'JPhVRDY6B!B! 'h{V^ߨ `7u'ky?^\ ^XQGbұ1xom2ϳmluMǵQLT}7 >cq ױFړ||u]]td~MC0/ ^;K ;G?UgˎP,ahrK= =?9m^6kowŀ1p( Zz'CuЬG_ zwFگ߬ؓ7DZu4Aw1m+|Ų Ѷ p|=eh'f}um>cqJ-8|+h5Ŗl[!B!bQĖ@}iW^)*C$h)) sGb񥨵>*>&\ګ.nkGU q\TL8Ǧ@%ȌaG?{(dҏXi=[]q_{ؚS(bdnqۏ"3!0ato1{rWaTKGpg ip'p0-~V{ƽ5E88"s#gc1x \_|;Co=Zeێh\==)nVQ.X=<{=ҋ];~c{B)+sSlB!BXT<ŕpH 1$ДnB?kQQdd#;wNϾUVF7pǬxlf>n^[“==&i&Ȋ-5m69<~-R'&^AuůJ$vd "M]xJh9ڮ/#cB~$HP!4.b*K/=9 p}NJ'{QH.:#}q]%\OiHIJ 1ۮ<ߊ-|cQl!B!E[<&tܤ8҇ƚ[7O զVFQYW꒫qʸkC躲!J2y "G7h0cUqUIHƸҡIEk@,9\ܘU_}=YPQ&y 5$9RϏLN,||G'sw>')[m~ۣcǎֆ[!B!$uxbě*~fHeF,H a\lމ/S^DwvF݈G'5C=:tlg$C?mM˩*2 :؎DŽb !B![a*_2M̊-e˔xRl\'}%˳b?آ(VP%z KlegR,O}ZQ—:ZfX BLj~Kp(.K7"Usoڂ'78+~iZO}RQEu%E @Z'.& ZQ dICz]‹|yYS2B;F}FBE"%G2neEhY"Aݶ`P?q?iS:K룘nAXDRTW┶*n򫂘GґwڴZ>D7յӿRCJ_Υm:gyka|qJdu1r:^i6SJ@-#dWvB!B![ϬpI .qTRVl.bfbˏ~ilT\I5i"%tSܰ,%\AB!BR-߁vi"7MZ5s}=G]MPHCȹb !B![ ]2]v)veQ٧UB![!B!$u&AݗC}<Ƈ'tZE&\BB!BR-߁o:]2J@&ɫ֣fvcYB[!B!$uhݦ*I325 zmKٱ˶(!-B!:PloY+N!vO\ Q*ߊFsB!BI(|+T+a^ S,V$s^."}.!-B!:Pl"t(2vCюz(VۓVJ4w/"{^-DA(cMJȹb !B!T*$}%)Ÿxr!.XJNx\.dQha\8~1x~o;`d16QG.}|VQX/9>HdvwLx7kZnFiKfJ~M"\W#Ug 5ꔴFٮ:carD1iC jⷶԉK9mOh\:h= D$\MHI#_5e$ ܥ+4:6=)DLZj]$_O>Tl*22~t_u=I'$y EC#|y_)PO9 ֦&D%%uΒ>X\hZl]|l(Ws 6Yо(-B!:\PiFgM/8*MSE"\<Т6\lE_~%b2eHPҟ&XeHHx4 .a G?Q !(gF0k<M/9YT$TЀ=]Ճ Po<)+q ՠ^| <+rHcf#C4>\mԓw2 ^Ca& t#_1D1)!]'WŤ-2t>1IuG7d\K][ta"axsmGWbt 1җ,%]\cbҮ+:Ew'rd2ViCfK ;#ZώU#:*(أ7W*+Qi-B!:bU(AAfth!QN0oxd=&/,*™d _c<;X %ЏT"~J*9R6 xV!%J qHRTl1AHH܋⯄,Ɋ:*ț [mOkykpԇ]Ge27̜O=0ny3>T`?]@dtIt seed|ڨn3u Tr} US1G3so-f?Iݟ-B!:bWi $>LGAŻ 8 QDC5 Q`D媦f|#9ai3)9,|GE%<7@BTłPe!~ :CRG\q6l6E2A:82ߑo*XTq~ُzuwB͢")Iz-SVW!4.*b[RG)k4%%:Dh/]$Øׯ^^:tV Yvo$ӑT4s#Lqp"fX1p\ EҎ%[nl9uW' wchZ P"U"Oܐ5_|bҦJ[R;Q?u\߭)yU؉җ‘.wҜi!o:2k&,3 S*R"]}F)ig>9|}5J9 nBX-#M u5]U{/|VRK|1b ǸFS~!"_I1 H21iX3{fŨmE7ڽ5-f9}b !B!Km^J4DIՍW} Rcp79)LeO@"s,N QF0ݐy$ H' QxHؽTTq2 Î71`Dԯv'^usarpՕUpŵWfc遣> l a4E3Kv g,Fxt*TѽX2o×[q͕7ƫok}bችX>cubԾVT*lƬNoc_[[4#;25'i7?X}^6No7]u#.Z=R;04^s-z :#ߺ3w$W_՛vŐu9[xqWW㙖c`.^>OyJN`xBƣEUzDKޅo&d>o\=m>XfL9-Xy-B!:-d]v̌F΁3.&3%74^Q &oȮqjWwd"9^3"cc8kڇ. ϢZt6z"&tm?5G0~HL vw+tO~[L$1=Ӏ?l)=PNQ#}: Zu@V3\ȢwZfv?[!B!$u8oB4$=SlэQKRك>K/C)IUPṷx|l tú9a}rhe tZi^4I%w^kN\lP ? ]7unh}a}:, O?3[#N >|L<]2${='u3Wd!^CǑی/7#}VÍD_]BjSݳj5KCB!BRTl)8[DTL4p1Y;}wM,.-/~Uފcҍ8k1&|{ 1jeH{ڏgOҾ n+'~z=(pcRf Zq1q^Z?%rkl| >ܝ{{K1mr%sto?㌓)9 SWz;|$o9C%tghYPHh6i?njEY-^dz ੺aB@Zuj^zNtnlZ|0l-ȄVP9آe%Pl!B!ܳņI'srZUGqqϸ;ꚇkq+Њ1d/͸}e'<tG|mA1wlߖfc1zTr${eGxϣq#&L~{3er#v1z:kInko]n&~85,DA\z#]~[}㱛G;ǔrhZ> pJOFho5GŽ0lQA> c"gKƧ#cGd6O^R#K3ldNCO}8'jTirp Wag-QֆtTO'*ar_]%~Dn4YSۦ~'.ls8l}l[zO>Kj/=+T'N<-^i!}e?<gvp=:vd.Z\Z Y''5B!B!"a.IhJK\_A5wϯ C +]WV>gPV<Ǡb0Gs lܴ(D[l=ay?(BɉR7˟aC=]mƭQsA ёXqCKqɯ);q-v{fdO4t0-z;0;x__^_Uy wWyoc[: _ >U( ;u[guA_'W> 'lGB?][|=dzRPr}G[\qeU1` b*6a!:^> [s|8{aQ/~u9=6{`~i.ҷ~:7^?]r1~᏷Fϗ#V:- 4'uB!B!ygKrWRZ Tǂqpߚ;⧑v|!=#Gqq?| G>ħ_'Ű o|AP`lƆ8}WDnkbBdߍ};dBE]Va߱ldJ'wcvPj:zHD:&݄Ǝ#Ƴwh!m|-8SҨY}f/J"svu@|=Qۗa5Xf+o؆ +VVoÑS(v|A.EXt߂Nj]&%KbNlݹ6Dz. E2W*M|앾8~qe-bCI_Q߉C'QPtt3,KW`ؽv#m?n*@r",+bS#9(c{R-B!:bKYrc"͘]zjPz%⛖|/'}7[u1j( [=6BQbMz0i#H?Ja{1˾q8A2HU}bfq%rL\L*I?"yGbҎ/tߛg}K[ρTHU,c )R?_lwC_EFZx9؁\AR~Ulҥ_+!-Җ̣7z XW~#U| LfҖ }NGa 1|~tYBB!BRvoI.y#$ wOk^ʓM*3~*G\Ɠ?īuG?]uyY4rwo`a2L\eJ*FƱV Ӑ$VőPɳ _ =) d\%PZlɆ28K mo4o-F-f2mF")gT@ jMpx!ҷ V.MJ `'ceY;'#loLW>tKb[T̐c8U[VZifhFsl!:}4\ۯfy*zOCrKt#`;R6b|JM)+/XPy&̿Kz(ϓzPl!B!<[oMm]k $7@Ú[zf<5x3jLL׍ wϏ '`0C[ !}89x_lgJ3 W]>"ϱ{xfӒb'_$܇yM!._̓PVIF/mTs!(Q_2'g21[LBU6Ƈn.#-j'|]Y=HE1+);a B B!BISEhy[|ҥ5q EG̍M8p5Dӄ%'IB] cIj2>i+I U_0V)+2(LS1rbK{: (PF*I(HGLԬQ]%]d>4*Fw=G!Vd'om-U&t@ҷVMoX%vCs-k*H~fd"CNH9 L7Ẻ #Ѻb5&_@ƣ"9 OK'!*v~0l)\*[!B!$u*ؒDRT뿯~?)HKlEUK0`T.X4WqBd.1wxPdyl';JPQ ^M~Ē-ȍ?:d%{WB,Yf[|[>iNL4%ֱS{}lڻr+m?&G#WZ>3I>!YO~O^n[:V(H~ݙ_R -B!:b InuQ36[F*Dأ$~B9b !B!iD?Y5~M'g5H.gJ3e(s B!BI(|Vf*""]䢛ro%rB!B!Ŗ|2{jk\Q@z|$&St\}O9b !B!T்bKHѣwTht'\=Xhkwg&s B!BI.doŖkO$#KFE;'c_B[!B!$uf[Bc0m@Ld1Fr?D>t7B%[!B!$u.#*#d}b|?2XC(ɜ vX;0~dcrB!B!Ylst,)RV7$h8v5Bzo!~ ޤho"W5An:w6r//}$GD72̀6oƞ'-f}нb:[!B!$uY.f3՜_Z,JSJa IUP%ʣBa`Ŗ; QXDy#ar2/œArdG֦p6۶(ŋ=:!W&Lx!pL7O|UkXWu(B!BHp^-2E5(5U0ĎW Q5Qh9CLl+!sK_[GȉPj\u\׾q$B^d{?y NI%-i+I-,Pl!B![*裘+%wWѫ뗠h]9#(wpN Gkj 76'1IJOF9Qp+D9b{o>ܠbFiDZcWڳB" $(.Gd7Riu~ JnH}-lPl!B!<]F$hd<ʢ&~y;;&s10Ee?5h2{}آ#&tړ~Q"G مs}hۡ xYNT^EQ{Xtl޽9B!B!y+Hhju[|p1"?TU&(Aю3>0{Ls!7w0}eI ϟUl9t(fbb1wyq .o[ztpȱAnl{64-/[!B!$u̖--g[&S%2&8T&Be?C>{ mj.];f^ZKc=>NZ"Jd/x?@榧P nk7s1߃:>@cŖ-B!:rer1.\'}ؒ[…2[D8%2]: >0.*ձ:wh 0k{,=ln03|;j;> D,$KmSl!-B!:=[Jl=[e`ز[0yW\EIjx`迧/朘 0$Y |%LWS64]mU?F4 ~Cm-^s ^~9qn 8A4p>,YKZ>|8:vxڦMV6BrAB!BRg-_۳Eo[N/#J:Uu =y!ܫ8d8x9Gע6|pkQuwM'{ L 8/~ ;J!EZZwl:c1"]v7!:0a L`KLG  JN҄ B!BIZl6;Ŗ¤r r6=2{hϡ:Ll v:V<<2J\1 <oȌqh81gc-I$2?@pg$OAt7#}x9+Fp[n~ F &#K.!Dc?H+FJ->:g<)C_CB!BRIlTR.|OfKrQ*-ɌрTو%X oM{Շހ+ނ? UF݌W'܃) w]m| E+kdu/ Juϖȷm:*Nj\+xFދ;~O,s”eDR'4chp&[!B!$ubڷ-SJĖ=[Ml rSh+Xq-pŏ@7ɵKxJ3 wOgcE=y93Q5yg΁+Kᗜ/}hf40 ?Xn)XgBH߾Jqr !&lB!BI_lQ;b-l!8c=y) Hߑ .rcT`UŌrAÓ/6DPh=1+FjTbkSRȕ7FUiӪڭȻf.ҿC֏B=J$h}W[LM(B!BHgL4]J=[-bL\8Rl9_ ރ؁&OZBs6R{h5@d\KR8ߚbB![!B!$ul9/Ė3L~iɷf*jYyˇlF\uy!-B!:Mb=<[r1]'i8)a yW2&AB!BR-Kδj-D-_?[l{MǡD;KB8#=u( _8sB!BIZl9rAHTJgl[.\\!1ʷ].kʗ B&I3!B%[!B!$uAb/վGltR-g| D^Tk 1͑#HdE 9Pl!B!{+|Slvv -Jl4 Le{De\܅H bbsB!BIbjI-)L`bKd (sJwl[z_,o ~!\BB!BR[N -b~mb?jfKY`M"@Pyx^ Vl/dKidny9߁wj4.߷Aps7_[-,m|ͯ-u/-B!:rZp94eˈ4tom F TkA㱁%lBU~ e~HY .clqF۴mk{җV0"B!BIOEQMmѣսU< V5,Mn{^F apO 1&k ¬ؒ[27b_K?v’%yFDOdb5DE!<;/V@p\v)WիGС}{Ǩ_bEشi=Е6QiHiXqzkoRѥG#co6{F|SōvR"W|_!Ŗb !B!"id4$ɢ"]1SfQM(k Lq &#(c0œ>b}{? &27زQ(˚)['@FNݺ_[+ 5=ۢC5w.-[IgEC(! cp8qW?|K$$T˚4FE]$ML+K-m"wzpMžA3[d~ɣ?eDE6--B!:|rݙ-jˈtY1kZB=wV܋GٚzË; 39OCe|Dox:#c#pt@dC(Aa"Vu>vVA"ŖsB!BIUldVRhb+,e _4@ `l9*\v;Ǭ1rO̜GWc/ǣKo{܂[^GdWG"kM/ >a+?̙H0x*HRVFwgO2aPl!B!,~rھOlQIlX4T%FjFf=.ܿv2 \l'][^.mCѲ 8 WđI„t!F<'`\mk}V!uc6b !B!g[b[4[B DLl #?Mmco=s 3_ģ1W♑wcHduOI%_{b[#?k䪙-+txVquàB!B!,\g"H-F!U㱡Ƅ*iize: >ϸ}\eTx~'~DO'!~-V>86v#q'Ϛ= cڷok+W>pŖB!BI.d[~iDbA-A  A~hp$ .7Lת2z<<^E;[tHl}-͑1h /4c2(_0]_ŖPQ%|1-ouktV|7-? -B!:M%RJSN .lvK^2e\-*_[cWfޝ/hZmn=#Cv(9[ZԞ3$r" tHYa' Ť(TGLw\ԩWbn[~[!B!$u8bXR[T|K=#fxYcSWEnr|{Qk\+HARmOql_&GȭԊTPn qݵQ㮻PQzuFK$Kv >%Voeug(B!BHŖ2eF"i*LbK.u<_ {&FP>DpP< vpqHqZ@a~ >'ޖc2O,k&dH1o('R(6q_|&W^ϗRҗ:&S*RƕkLFkiOK _#/5\elbĤl$sXb !B!PlXQ#>Tg xgi[Qw{sy1Z.+FhVFKpq/[Pgxjz(zvg#qUEbܱ⇱"IRa#EpLR7ckV "J3Ma\xQLIHp#$"O-#e#iXƭO`57IfDW!E8+eTr2OVGe;Ia(B!BHP3[@~i=-Fo3:l5hݍo7h֠W{aSC<( }<4wt]M2TB86 |M<}>$4=h:61=c]n n[$ `nN4'\e .QBOd8{@tx&~i<`Ct[K<R&!uyƦxx8Pp _|bۯ RD~\(B!BHP]c;Hʸҗ| ק|Ç[]g*9vVIjCB!BR)Fbޫ^l4n lvic7&ŖwhG>^]٥!C << ăs}<4m]*e,1:񤫸y+xZl͍K)DV<GnQ$ҦjƎKI$B!B!C[DoJ(]ȯ0R~@A}xA-7h)@Mh:+ K 5yoԘ%(KoR%#}h=薳ف}>[Dߣ*(5iT :4/ºiXd19D8Cؾx9{7`%H[k6|E#;ڇC>B^Aϣ 01Fh瘝KKql/\7L& NXx7* IjCB!BR (T0dO gɀ?q/n f{r}w[r\5xaB<0}bqp|懨6'D  &cgfAء3B1t=Xug 8zЧn}|%^}WW,,W򁟢iqԃS ^{+\_'zOXA)=\KvFb1Ё_^~_6Q]'F| JSvto |Im(B!BHP1{ʏf~PPgġ͇,+Sm7h{>@!.q,qϬ5d.Zž[B>D P{9?=BTڬpǜf>!7Ҭ*:JW՝ȃ\SC"O9(fb-4~C^%٣wTi 0p_PzU<LQ܋StRX`6xO*rOQXY.7\vGfϡ\~"=_eDzaO'HCB!BR--$b Gb.ӈ<=o{ų6㹑QĨmgTw܆;n[pM:TUM}KPX'RE@b!vau.h}wB7Uc%n֍`N/[ ^-aC"_EtNW7bك5?76C!P e~J.l)xꕷ]y*D\z^lxR "dc2NZPl!B!ᇉ-2S[Tt̖&?J|IDATTbK MВt9v3Y0f>=[_.F/]˽g[ݗ YbsJo f@^\@7JF gvcE.hugK :".e#ŀڍI|x\ezjVN$s ͝IӦbA6hЋ[AG8úM0@Fjƍ=Q_[“M:m?e M ӆ`Qqdxpd, $tNR-B!:|R&[Ԓ-fQ[lIŖ(hƇQP~8I~(@n~>r ĊcQ݂u 9E%;UDB3XiiSZe(Y!XaG{qvZckMtZ}₄%m{F8yƆ0`1P瑪pOVqXpJUq`aSG3D1JBQyS_͛.BkouV 7=[_[O x{ܔʸty^JDR-B!:|آ˙vƷreffPi7bDJn+^<1{\|N$٥1 7 ݇OC'Lj=z6z_F sm4l.ӈ-63D)ƕ7ma_SĹ0Ilʂ?; +Yg.ǔy1q* e۰ m B" ݳETPE`-A⏭qtڞj$qiK(mxp#u9G$GO7Pē*)S&ڨY=_`Jṁ.Urd}bQ>0.ҽ[TAtؒPl!B!bܳ+[BT)-e @O]z# VnIJu0oZق[k6c߉vcѺz+ڊkwaQzj/IDwt("V8rat^y m{QqClK )f¨$[+uu*>t)2RtMABn#~i9O)eO|q/*he+b !B!^*tb\ʾ/#NLpeD?#) Tljdֲg$m2'kW7\KkZd4F.ȱ?z]#?mSu ]cOTP[y^k Lܖcwp%>mPW2!t^i1THQ?m3J|IYJ=^fvs_Db !B!g[ʭ[m{L+jߖo-_fB[FbB!B!B*[!B!$uH-\b !Pl!B!O#B?[!B!$uBHb !B![Pl!B!bKB((B!BHp%s}-CB!BR-T(B!BHpŖ1*JlM-Aҋ;ڷrjVZD\ByPe 6B~Z(B!BH[\δElJlPeO+HXR+D~YM~]JJY0 8ZLe-B!:ĖeDCbœ(S)%)|e<&k껦ZPl!B!܋-_fآ|@Hs]M-eKi=BKBO B!BIS@_JʿYY[ \#߄L(Uz$Pl!B![SS&/˂V ?#%-<7Pl!B!-bcp裸p[T T1^mZ.XEVEE*j5B~j(B!BHpnŖ *dآhjʊ\58ՕAb1)\"[PyVV'䧆b !B!آ=k jRkIœ`]ÑB,;tNdHA +*$CB!BR[[ebK鷊-eDٸhL2܋-{}%RhK>'$P͉'p0Ob偓xr|:gm;9%({R^Mŗ . []f$ 3wjڧozol=}gi>k91hMz [-l_hRSiXk۰@j_RȦh6+B!Br+3ߝ]ĖYRTb˸l\b˘2eй[tG5n $\ #D*/RQ!td%ؖu'%3Krf4x.ۄ{ұDrN7Үk0P%w1LJxRFL q& ܫArRֵ^k=i@KӑwmGD  ^}jRO !}zr y3C]+. uG-Xv#lC(ƥ4Lk"AQL]rc#fƗg↴B g.˂VU1FRWO bzgC{+϶#)I[fHmS>=?ui6LrH CB!BR 'ӊ䢽h< jK;cȦLܒVSwq;԰Ux k\vaSXy<aQBC\8X^&#u,v') B!BI*7 fa ʽ+#?^a_K6c辡o-Mdzw;ԈUx_9/ s7`}F ӷAn•vbW•v D'ZOW{D $Q,Š:&03]CS&h󢋋=o^x zMڊ=ENw?9:9HA@1iʋ :+5V.21Q mIړG&U>FСv7L9axBM@1%B!B!Cl1Su4C-) lwsƼxxVgqf.4O ^,}3q'Qh<`߉hnar鐘^a(VAg >yڿ v>´R֓`_uu!\]X1a"ƍ`m؛ 5?=j7]mիpxRdP} W`#c:E!$S`#m="'.Fy<kǚ 0jrlJðFoS^@AA5m% B!BI*-p"f}Sӻ΃TYxt7\_G0C845[ w|nq4h뉎7\~w#nhmۿk͌S2w>d-4{ sDOpr6ϡڵ*㎫](bȏQU/;aѨ :Uw7F`ܒb !B!OlрHOx 8}=o &vm> .Zo1h>D.r/-/xav:5: zyמHʕ~?K`7s0=n.`eqZ2]"#}Cf=15$Nn<}v(Aɦј0+]hT&>OI0}hT<z٬t߂]3_+1ѓxVNG^qkNmov"YZ:T e"1Q7 hb0V82Ҡ3ZWAaS09Z\SP0ڨ1^x|ϥ.*$0[!B!$upbn:~-*QlCq7;h/[ U!- Qkqx`^{yEGxh:0ËB1[(.}y.Bk჎,/!l4yf|:q ޫ:4YЌqzmLƸ% p",YODv8^d'w0|T= \Ô0ӡc[6upx|[xq">2'pj8|*fߏC@ oAnˆFs\?XVd"N77|E~:(B!BHP'ɭG A7īSf7h%4_o`K< @!^m]wX0L:0)H-*Me{]t4 %5.!lR=[/ZbjIX>/uؖG5D\3m!t; Jm&76œ-'#mQl1;}Gڀ.y[y4Szo1y #Oq>(V 酦C߃>b0Z1ФK/4{U|$Y2NS{6o-gIB!B!C[G"2pJ7>w%yq=+B^.{ǔ[ uƃO@_w=f*&m>œmP*4oc`\Onƺ/Kु۰%E{`GPh8p{~T^}:a ahtm?\ʼFnni+ k:M;ዱx.\’.)*SVRn'b !B!oQ'Ҿ. $$m2x.L܃7ׅhΠ+ ^<8 pۜ1n4yx4{ѥD>aL1j|*,E(GNOᬹkoM9XQ"B$M/<|?~ ޘ nAyk?釡ih|SژXQu<@ȅ[ŃkG#Wg!="!X4=^33 xszn8Sy1V?,rDO-s[$ɡB!B!C[FjF(}\x{}4xfN1jL.D)EsJ1nurV>kMwM“x .F|7XTbAT*E&`B܈}I9)IH{!bFn s$$XN1ӓ'r%{ #:>G`Zږ ;}О$5G;r_,}hq)BWұHچ$@zO֗ W|6K +#?:[!B!$5bSݴ ]=\%o wꏻZýza0j$h3w+;ZtǤ[Jꭶ*.+h*+J/bI+j qGG+ iXKO%9Пa䧃b !B!Pl1V}B#YAD@4$T\6`4|9}1/\E+aV0Ef*\pHJR fΪJz{t!#qY,AJyiOI $E-+hw+'1T1:H\Q8TPoB]IDrIo G1""_Sl-B!:T r#>Bѡ.]H"$$LJi.lضkNl۽ +x׊5xhrUq|O8tɎ#5Ck@w|)M RFŕ !>ĤB  U:~uϖ0P=fhV5*hfxo#̞1ptڶIHҧa ;:4{4FwQuI~G_-gCߗB!B!C۳E1l:GbTG˓|׫-ĤW"*MB-B!:b%jSpɔ\2b !/(B!BHp%s=+o&k 8*̲̖͊eˈ4E֥Dg-#Tlٍ+)cBB!BR .|/iߴ߰9͎ҬT[.Z_{&E}t ~x=ޯu=s(J$AP $<3H0 (((9Oꞹ^ga7s?ϏZ^z3Zɰpa*[  a [h la -?a la Zb-[-AC۪[-@Cא*-?x-"-?-J-5[ [ п!n+@F@[ @@#a .a#hA@ރ|3-? l,U[–kT*E lI8e85SVS*ved -A[ @@#a [h la -? l-4@F<–Hb-+2-Ga Y"} ZtE9(Ӆ-x9*{b~CMa [#DY-3cp@C"cDaVp3AC/m&d[^ /ȍ!lঀװEq5 o#eeGr6L r a˲dRb2lwʎQn[ hlm&t-Aa(KSTLV-eǩŦ$a끋[R*aK Tn[ XUa!lGe l惰&bJТpU_m-D-%QΖ2ygtB@NAkR֡,ZزZ [ԷyAa *Ljp{-4@F@[ ha [h la -? l-4@F4@F@[ @@#a MIS-^ la -?4I VD@^-4@F@[ @@#a [h la -?܂,cp@[来TTvbAMa [h la -? l-4@F@[ @@#a  [*tU9N%˯R22,D%/PsT'(60N>@ka !l ' l!ܠzز {J^xY*^(-sNPl-[![ G"l @C l _@@e]ZOD@^&f"Z[!-?ha,Fֶ& \7 lIu`%Fࢇ.[@5Xq[@P+[+@PEg˪r:[.Ps[ la -?~Q:aza r,wC-a Zbf [V--l@ФtmD췆-mDΰ"n1[ 0[mزZR*aˊBpACÖ5[@FTi,שt5*]vJ^d*^x知ǩh ͐u~J- rL-$lJKPK*l)Yx睥TTvbI6--? l-4@F@[ @@#a [h lI2DӰ>NEp@C`- QT4wbO@F@[ @@#a [h la -? l-4@Фٺ8>a/ViK3 [VWPr*]yJ_f˯RT",@ŋS3T4>N釨pk A lIˆD&H f˩٪lu*.D.Rɒ T</8KEQќ-jeTl=li-Ke9*w枠جr|e+nJDq+[V^G,anebSlrec ha \Jj)]-AE"a ZΛ;[1)6ٺ/  lɿo!Zk;Ö5TJW] rK_"A9*^ rg WgKmC@1"%*]#DtJV^|ѡb?aˤY[-? _zТ^[mj)Y!aU*YzDKk+Z$hYpIrʎi_l [[[ hl]5e,zвJWY–eΰEVQaK?(Vvb~شp~1"--?4)$UJ X1zز25l+[}-sNSl֯y DNN&C@@Cdr|됮,+Ջq]6Ök2[–#N9H ӗ+[h0[  [#Cj-%[ hb)^ [G7]Ծr\K2'Na 9a م-+t7|6Tm؂S@H%lo"r- ro#J a a [["aTTvb!l&?FFwO-꫟pAC^x}n:[ [b \g-t@P-wdxhbSY[j%l4#`"mDB.pkhcD%w W-ɯ~6–.[ [d-[֑wXWcD Ljde n\G|;[[":ٲ,#AE[R U䫞ڭa˪r*]yJ{[Rix^[9 L%lLXQ[V\R[rJ l,҇-%]R-EQl-hd-ll)';l1-ۈ^v[#lVc/[O`MEg [W?li;[E5*Kd }${Jݲj|稑BXf$OO5j5VYWg鯭RC~"&i iv\/ˠ.8Caۊ[a-gx*kyApz-O$<:]OTSMMH*v8=v\*Jop9qME:|={V&&*TPem5U6^SM25 TS< 9O5%?DT]F醄1|]UkF>'_g*>/U|n /U|_ 8@~yeK-3HAլ 'Q :jTyҋw2X}UT]s_?V҇eTQ}qJPSɓ'x8UUUJ*S*qL|k<3`+yT-%*,:!ODW%mmwj.25TYQŵ GVĩRVTIhRCq;.1 k+[rsW6=T]㹪{@~d  +JD$)^j^?+_>04Z/tUh!D|T[s}z=}q:N+ Zr&QSEk$orIT5#CqյUx-UpUJnE'!M<$z6Q^ X⼕`y\5oU}m #/MʎPlo [eg"NIJ)?E?NǭM;RKictRq*UtYF57ЮҝmGO;ޞ==}NV'Si:_'[Z~\箢1QOpD b*ISQ+>#u[Vu[朦ج#-%l9Y%UTU(qWЩ;iy4h!*?:ZI?EdHBթRT!i fnD|{Ө=td*>|$u8>4}} m=<ҏEzCD]JOGGz7gC'깣~RzQ4pD3b&M}^U1j*k_U;[@3h2l}Q"AU3W^8F[./F/ݧ.PKsStF [*j2MF\>E\C=H3әZ~M^L@3ыcӒ}i㼙ƒ}[PU*:ޜE㿻BtUY@G#SjT%JF#~ZٗKGx=u [~aKaVU&Ts %䫓߸ƌCB'Υ,I׮S~7\zEfϢޯgj)./ԭOS}NHTSyh䲟駋5K'wߠӋ ]gkqbKRݪTUWrdZ#andE9{J_Wd*Y|]xY*'f" [fJSti RϐEվVy>F?~G?lZDOuOV/ߠD%{*kwӨiФo髋gi>4d.T2%'K#o JPM)'T~4T9ūw&7LRU]IۼCcV}t#JzgZ9Tv6{.kT%F7Y YA p{Pe%lYf-g [fJr '踽 [OdECQ}rYw_B˾;F+)^uW6W%.iݙ+t|Vzy7tjf4x=r_sw u6̙KouLsNWS羱f7XIUPm|+}PolAڲ|޻?'õ+kUꫢaK<ya p[DcD{kI)wP奲<7[(~j/kOϩU-*M?bD8}b'}7:v9I7-af?]ḀSiԪchڽõD qv~FUWWQm:pNyB'̠Ҥѻ[>y:.+tnPM _c OՋr, lnnbr;[NY^k~azxH-լXq\2UsCEV$暼an$ר竩 I$x\ R__e->oյHHI+dMʕjS7^#ZۨZ<WZ{U|Ng؂iR,< WPL [_,:p[䑛<"d|rpc"ATqKh"TM5唈WR|2cHUmHOH#Mzfi iT'<*/.]C"^˵R**^C| U$G=6Tsǩ%`E$l)*;JYǴei)o#2G2 [Q$tpBgS;rHOZQंL0Wx5ծ2JHʚj> +^KյtӍ) s j$Cᚚ5\g+yr熼 :5ϒTVAȝ$A^ܢfشCT8qAJeP)4 \TآVHJFqsjaq Ȏ2TA<|TYsI=%q*j+y ˲y\)gH@'{Zuzq6NFS~jQTURPj/@#tl#[DKࢅ-Wd*Y.%pH SsT2"ιL~yScT40u~R!VV8U? u sȩ۸rN]篯nt쳐<=Y{9Iqƨύrm=~?r||R[G/z{2[/m3c~{/,fp\~_Wʵ'SڪcLKFnex΍Qr~wn9ríthznu7"_K]$8/r]TuϹuI?,,dɉ%RR,`m-QmXw%ﯦ>ޖYE%Wg%׬2T[̵E}Vdy OKL-r],~e.OU+~}7ťkE=<]sZJzg]M;-z0yXbbbE]ąu,<:y9b-ʱM9 ;.mEk"1svHZǪhӹ{m,-l?h2/Ͳk8<[} _r,fR9qF-lnjvEJL35FdT*|r\z&)#OLl2dݍ>&rݣ7[GtH40e̫ci3([eqd~v} ¢㨸1P7 S(lm?hR}c^Kg{EoQN]ck/v|Zn–Ryh%*^x'h *zJfRߨh^MJ&L/~?PtMQ߳Qt.ÿMe_ڣCЯk: ! idvsNߥFmuTڪmF!gv?[&f|)dnJi [?i/?_7G3_?npBp|{p=Esd_Wz_F ٠4ڌck2gFS F ] n5}VS=oc.] ǹ,}[&{֞r%z5%,bWn<_W7|XUI;$v;.RmÎR }mm:, mo+nIZ<؎}iUrj5-mN_YXO/,|?܂m*aCi>y)v}3sSC>Or_9צv6Z%} XO>s;wR4EȻ[끋-SΗø6k^(Pޯv>zʭax6 /sPx@=(c=aӭlfv) 7 #92,1tc5iH& 1[nJY_)6{{8\k([ 2Pm8KCy: c7ڤ&Zڷrg8\R\K)C\EF6|: v3\m+2\)%Sq(b}CkPr*r A%ܦ;CUbmy`K 3{qASCiu/Hs<*pQڕmݜk a 6>ϸS?ZUS6S?%j}OykmAY޶r ic3l<:]c#qMGg8=xIJ}j;'sfE;%׶By?M9;q丠_+kDw;ӂ{'/ g;^qݼ8mzx;$fSM5||g^&.m: wsS[?>?Ƴoo"g񎿎AزZ2pY.zR";O ҿ'h1R/˝{fJ~CT8'*z ‰?Rt^/x_Vݣ)#cpϿ[ױJIq?͓96C=Eg_:ϑ|]FR>G=dTjS%ߗӑ^gecv8+Svz;6aY9Tz5~id0vP9oPjAY ̑Sd~ihI<Dܦ8x>9~FM_wypn Kr24dN1{yVPU]1c6;,_^T%k"\x\FycKbW/Ei9 Bo^v,kqѫTfjNf ڰsd9OevmeNf ئ\o!<>ju̹qU/~PB}ގ׃n,k}FrXn{ȨSsdѹ12zE>8Jܝt:638_Nqx]J@0CӨ2ve<90:\3֥]%gTj>:n:)Vi%^\e3uO-YIo}B'XmTu\j>E3|<Σ+hV]>0Q?'>--:t-}rdB`!培5l+4] e/1 mu0ZO'=L ,oYR#8C\O7O}~!E~.hW+cј:j[Ьshvő"訽T8^x"9p^ !a{8?$c[!{Cq>Qm cXZ3i-sw?MS ]'Sj35᏿#cUNRj_|i(?kxُHoc \v5;l~gۼz|s^[(=)#:=LZ uߪ ʾ] }Y춙e%Mff1%Pg`gpšԄ:eF V_]ƪ6AV8|eMzeMj]Ua[MVŕI_Xڞmge5gyFf%o8Sٸ$yr1,^f[mU7}XI\SV8 8 X-}n~B&-*LZΦe6M5泴 K$qQ=3)p, &}~q+ PtU\k:ܙTx{&? 5:MZN \R5baz_k!#*~3X}FS95Iq?EG[qNHaQ%_}F]i ݧc|rMK>6qodE :On^Jn=tpMneǫ-?cy}k{)a6jQ#>4"J($O,p_[}7>T߫w+E>sM- ڡ 놤MjS칝brg;(؝Si7|c!vF(UVlP7])}l@W꜆^< ~4Z/;s[()i@k6%z] 16`:_@/ۯZ;q2ummk) P ϭ@lڬtj?JJS+rvr7}Z'ޚxߩܾ|^>K) >fv}Lx|Fe>򾟷xN6eTZdY߬3{v Z.P[q |g|X+oҧ9_mͪZ/SѼǡѮGBM?p\޲|,{y{xy^F.6&-|3-zR,/Q3T4O*=MEsNi ]cw4&)Cy| jNgg(dž_r4>gJ(חo r7)vCSDT8E˪N{- "׻i>~Jp@9܃{93O~W뤬Qy9<Py>/SFx<_FW{)2 Fadϧk9e1@ڳPܦBqؘMQ•<U~?s#}+]4 ]H zK|5Ą_+AJ/*|Pۃo4]#X1Mv `zr{EkƐ _$L<^Tz7,J8k7΀u-q*vB.EW05]k+5fU cFB`,}E%d/yk a2|[#dcl|tXيGx^%0*KӨA-є&]ht}."؏}%6N~C ]Q߂m.ZnI"A_ڕqd^>=sMUHc럧-a-) [,.Ua(aE{"?YRO:MqvP侴0+[׷` c:jN*J_(5Nm|U3)f(MYK@6xxa;0eHcSM>[O5CϮ3k2j{J_-cij56< Oy鴄-FxbMȪjL+O,l%tIxZK|\*l <%0ƮAFMAJآ{ ޿UQfEi󙁋tEBQr o}&Ztձ~$PVplͶ{^B=L. +Za ^v}H}uE{HKf"GT"/͕GU.E*xd&t\gqYRGt 3;9E/qBV3MǦɊ-oX|\82Ak]&:8tQ*bep$u=i/bc1?k:ڣeg.!׎<,?o|h {gյ2Tu qϡo r}`62f]Rcc=|qpB]ُ|QBcAPFfॐMUݏ#K{(ߡrQ+]vS=ڱp_ ]rl]FzoqC\qDxOWt lFm=kBfBoos[.S96ȵ^{=uU EzFԕ}VްT4܍,Ǯv젠.vM4CqnTc5PWfV vPW4l|y3{h/LҠ3Tz%FnY dEoCom5xFP&UaEE aҩd pt/)rFb~!=E]X9]+hP-ݠU}>Y[YMcUcY YTrbe^kx/Ƚmo|+-p#pC큋@ \* ]^NeZZP *Ξ⹩j+6 NZNPlfn,RLiLcx|Y4MS;]k2)5ιݴQm.N{r&lu;7ɍR2?ڜ+_2:氧֦9^ku}vH>뼵e'HB &Pg%1vN-K&UpVO(AFH6 ,7+e_l c< IbU]Ķ0hz dc[1&!ŧב6}.6 fOk]!`iݧVRVF(ጻD ]`.Kh _4/!?k)bul*m- [d߯&%Thɾ>-Wm߬Տ`EK(Ȇ/Uʱ ^HMfQ]kbtY/L#TRV#Xj;VJQ[X*[L>gS0'\7?\8 L.phv.qrk-r|,Clsy9ϵ~~$+Xnssm2ׯsKR:F8Jv!p_mtǔsR9gpHKad{@ \\pũ-~\'%qVx_{gLN췗}q5gԸ{7Esz_CȖ#|\e-.{J9iF<Rg6[ [ uz%`1Ƶ] .a!sR'!`g c;I(ck_f/[)6o;|IAWx[/L6)6+ʱџy >/AfM)jzm79 \,>A3דC >!S~|LBGu͑Y#+]=݀v,WOjx2 XJKԴb-)~y}|rhs6m>m?؂6Kn&V>J7d%F.@ŹF.JY҈od2{ Ɋ3#E/n!t6?,uNL9| O UPVPUA\)፷EM3-x>/'cT8> U%1+msݱ<_C48ঁj̯Ŏf#fT~XsE&}–"_o\/uyA 3~ aKO$x IX #r}Kʼž=Oa>vr,FMnN\p(+%q7M}M-/UCzc՜O afN Nf(K *Jԭi);qc /ll%yߩ)m%-}^1.Җ/nNo}nXw۲*l9tpi]OoS.^OgpƯVͤ*5A7ZO!'R:oFh50Њ>cuOeq S7U]v[],|jv$ O-ptv,s`Lyq)䓞M=g&ǩp]-qMcT{?Op,oU2c5eߢ樣ufț_-!;kJa( q0"_(:58<*= <Vz7Y"aKK `Z [DkآfYrJ J"[b*hfԸ,Q[*F#hJ"vy_p)yY"Fn/+njU.<=Vcܯ/Ksyo,e6߇Ӣ,TfY::#y9rmJ@#7ATYr54}nካRkgQc֟_N_HX'(68dԩz}uhLkG-C%s{p\0 ^xVTcc(AƤ[cDǍjYc: UY)ckC?"Dȟ(ȇ\kWb?]kGZKє6 pVl{?߳ciD|ݧ.~b!{)*am+a{ƨ@ƺɞrFB5% jYo|穬Q+eA3t v*lqڱ/cWyہWvRЩrqkw2+ݪ-J|Mmʗu2◦ |. Sۦ ]XnSǺ*lynY>36-<* w7%Fjn)\a@.tiPVHߡi2:F] uT:=V@P25lє}|nу$O[q=o֐U[3}96EmMSW}4\be.\#agnaU%r*Yy=T*.4":0S#Tnܖ,KT$i6XuTa^Ʃ%ɬڂ xW:S,U'meǜh^ʼxT[mc?<Ȗ>6Q|o#fª6.r/Ck=0CNJTd%$걣#T`mk{<)2%1U2KpG|5cS-!۔:>Ha™% ZxsHbg-y|^Jp{-q b!=x]F-YIþ)+a$Z˱ czerz=aa;׹CSj"|;Ekh#JH|þB&JZb7,vh ^Nŵmh>hgm6+OEǰ(^x^Ӎb#@'$hcF8c-jҎϺj򈲊Fi-A|-ɐ%~ Ox_hYmJiz\z袎-_{k T[iSĴW lFIENDB`onedrive-2.5.10/docs/images/windows_view_shared_folders.png000066400000000000000000007034771513710110600241220ustar00rootroot00000000000000PNG  IHDR*\psRGBgAMA a pHYsodIDATx^Gno.h䙽[ٝ1[-[dffYe13333333KMGfdEegw,{<PYe壈̿8Rs"%U˒*]ȱ 1T%WQTdƟQUߣctG*&]r i;W 6`iDk}(ےee.Ӡ-m?%ɏQ{OQ;7˼fG4ܒd~9-v_Hk\/4 jL>>sԁiŧ&lCǥɹ@?"[K+)PpkjRad6'Ցw7! 9e:Wol֥$ ~t{c-_G 0|^݀g,HX#F,$IZd" 4!y,j&} *DBVeDJE D@VцD4@6iʡʗ>.OARԭ']+tԩLʅK!K<ҡZQ疩duTlW) yq"EIH֐r!Vyn:]/QD^| -e6k̗l9َBy"u%}VڥA<-μDn? JZ~ty,䘞rJȒvFY<9[zOdG=>'f!*e YgZ Sa?@2 /GszAyxGe'? ?4 %f}UTU1(?r$mS"*#B|mLI`%}TmImn.So BMVx&#t$UQɋr,Wig=,K2'iyq/ci+J.]"(Knce{ݲewODD/*}>u,u¬_>RGm39is[\5; K ҎO3?̺mLXmd>΃iݏS/o:hDn'R %Tu BRW׻MU"ii7M1 *;W-c[xMnu<"2T} B7 Ww)?'.HT*9ʴ9*pyz"HU2Q"EICQ{m!GnmIB?mS uڒmX/=rrÏ  e*X/5#,+?CS&*AE-rw΋`xDuq,v|>R7%AϷ#mLeCi$)I|H E䖔|X"PR,)|OJ:$Jw6 9oG[JK#)a9&MO+O{lBQiy~.P7yhs|n{$Y>&ۘ$ʇ $^fۇ)(f} tRrpZFa 0%v> 2շʿWGW5O++6.d(轔ue%{B`ڟ'UpHrds|A Ċ/').|;g$d긒ɸQ&kƑk\t{c3J 4В/KTR~eGVIBTf7(SV*QteJ4eƕYW!xGQrIMч'%=Vpl‘IrD\L.sd2d+(,%-8Br'㗔ڋe(5"mJT,+!^\''kPJ9"%d y.(*"Rc;WpD%N%<%$|-))Dz98RIȑ҆Ҕa F-Iٶ76(LQ'g&E<+)NUA~b#*%?m?yb'?º>| Gzl,5MsMWRODRB-xTШt)+WR6F\GW㠤#e92ыwO@JX:D#K(79NIGY>ptBR_JJ8ȸ} 2n-Ag>~$!EAX9$y"&([个,z(T%_K?HÓzc(1MmPNJ”[]i QipeeRe !YgEAx#!5AL+GUvQ%IIu(/) Ee{'MG\FK*yg#yTi7TNVR?S=nEwsNY<%.+B( dg2-.2 Sc JWxmi5-^H)Z,M)IN)5br3#+5̧TPʟ'X5QIEz+*#$IIA\d=I){֑J0z#)*ˇS#M()sS( rqFL필 FI''f$ G$J#!Z2j=cZRvFT:mBaE%('ˇ1@YicSJFM1R 0`&nsta5-b()z\ f]5ΨI?Iki$=sģ@umLe gZF+[VLA5ih֍,s9C(G-)2S#xW91E<^R{mB$"ܥnGmi)#@ir+ OIYQȸu42e]m2I2&yZjn/ٟ ׃媎ێ3ї#2oi$*UdeHfԣ)t1`ҟG"?Jmyus4E[#t4O%&Ee(@yYgR9~y(!(-&PӞaDdC *wpqSEON(<(vFJXJ]Fd*I9JN;]D%,P(Si:X̸i"&G L\d Bu:n_nRqŤ•~ai/ITjILt\ee:RqLs iLMLYFiY$$aUIWUPh@ybsT_ȾԴ݇*n/p?΃\>I䣒{GVKp$RR{A]ܒtܥʼtH#oqPHI7dGN_oM櫭rK913ن]4GLP(R"4ŤfJY,_J(ϗw7 @ JY_ Ql,2(/ I60$e)Q2%_ZkhLLYILW4&Ǖ~eR2$eK)*_^&K ()dJTXheBLhIDe4\/aZ=Cr"RD%cv,MB^jQq˲<ѩ걎QSݑ|QeVE@&ɼqE'+}iJTsPbQsc@^:_Tyl?Ig'D%'+ e$?-&j:O:"2*sz$)=tje % BO@I7⹐ԇC82n:+Γ$iȴG;DW"2tD}CF LCST*i|i%+ݲ$)ʼDm覓a jQGwEۇjۗ-Wu'J0BG,4t+'&jJu@,vI#.CA iS\dĕZ8&5+Q)(+KJ]ǭWJTA)Y.Z*jmr^Z"PNy\49g+HT12YVʹ'De(I- C>T8/"J}JL+a7RPl웇&` H(^LԾ"`?|D'( %}Ujw9 +rAe )$ A {CŊ"!)I~*1))pŤ 1']QIYVr1>-[T5/υ>JYy&?X6 ˀ6KR/|B(WRϐ4墉') ӐIϓ 5ddyDe ~ŤST@QYjTRô1a{HW*RG)6YJ\D%9JH~H2$>)i5Bm]۹3'7qєZ)ɪCYY>Q$hX^YZ2R K6n7~~"1f#Jt3/}f",py} J#*63R.JBrtd66^_ʽL;fوrBDI}1Edl`9y[r'0~C &*FIHw`hQ%#*?G8:q@aڥ^KI[ ? vmnJ]JHA/IWTzyAo~pGA.e Ǵ١X4k%(3;H(V[_N:lVp5c K%#i+)X##MMV)E\RLnH=QY> !HT:#(e}~')#.DRd2]%%JJ%59Ik'KHHʕi51!)Jʬd7K dYe)!*HʆRH*#u$_24LOR.AVd=10*؇h]YHJJʅdY$Zx4qFI)*kC8%t$#*CAY<~f&R2iY/3 EN9JHF5Ds,~|f^7*%b<5[/DIGL?f)}8rB1<\%{<1UcSlԒRd8,Np()CLRCfZR:Y:BPKIܔZzR1)ef6KugZ0jXZ*~BW0oE\>ٖ1`$=yXd-nG+${U}yuh!K%%/Jd[\jaELEYš?1H#&::m9q뺂V]3e8ewB,CR$cuIDڑPJ<&)hǰ)K:z@-jpoqM"QןU6θyu~q(y7&KnR(_ Kݖe;a6t};uwi)' OV*QyLbGnD_$JL3)Mޝv9夬WtP8}pjq)(4|]J} yM Ee:ܖHYmvE"/ sɩ.?NƟf @,v,R)2mJ AӖMX&ӔUΑ_k$]A/.oM϶"$M>W-d+#KD+ sH4eIzڶZOHGM[z|6a;wݓI @pYw+ߑvgdZ6$|fd4mNNJaEټ*W}pڵ9?,s1R3zhtYW8䛨z.Z2fd7IEtY>"HO# Q"Ltv,FV}z<#ZWHAV]in [-)ؤ2Ys%Y)p#$m(%/)R'I"JJ2BXG:FFgT6QɋJۨCOR6e}/ }8 '*1k?%>4Y~BOHBTM)wy9 2)!I-*Ab)?24|ȺE~P}PpTe(A,)m? jNST>(a]^NIeO#i0s/^?ћ,ugKry|v,c[%Z]6I^W:C8H$/tXC}DwDW2?BlsJu.繌)%K}ُNZg)pqlC&#LCSgtbY1.}|wV(yh)RQ)’*߭m(uyZR6aKr7GSMQr(o,tQiJeY:NaDXq3:,D^$+&I(tHܾUH;o]ᔳ_n%P> q"5CIT|kQga"rMs$FJQy q525IU~*]d CRVr8AgrH8w/C>:\ve`.^Y0ݦ"`LWw#]wYV@HU~BV%]8, }qn|Ls$yFS&Knmib,]IP}|ܢ_1]ȶcWQ R;0M>ۚ \cf>d21]>ތM|{NcөӪPuG q)dvrVR DKrxwm,Y/V{8ԨHd`GP[?Y-G֫Rbb #dBN*'ͤ .ux9A%4Ya~yD | We#.,B Mt]Y: YY(dՕ*-lӬk/DvӵJTpGIzv )3PJ8FkAV͹ 3?"HG_2`䫲҇"ҁNYӹK<'}?'}qEe@i<3eJN>+딞H,S BQ3LIF!Iy Hi@ in;ӷlGC tcOAj~,& %@)ܖ+(Lwz&{8ɣDF%*)tlپ;-yNt#(B> E #jR_˳'(%yJ™#-BH\+IbSzfo$H1dyKn_ORRRGqKKayisEHH9t<կ[ 3 ˃QSy(Hj#qۖQ##MoR=_OF H)web}A>Q MwH=$=1!ְ?C<)#n%M.y{2J$$]h%;PT|5٩BitsT"ZV(IѓF?F ȼe8BR/I'2 ,cS>Iʸy©[e7 5pYN1P-Ks23?tX&HGDfH9qFsLε'F`1R7;'!-+VTM cJʂbE(*cIeHJ5z䀰ϕ{HK|/ F%@d$ZDRID.NSbY -sQ\ 6'i4C * iKZ^9n=Zl9g(+ؖ%%.M~-}8B!RY|&r_oI^*o3?,5ٟmB,5^=QTY9OR dCΟ{d()i:YeyE{fݜE "H$f *-(⹳LopxS# D_zD=?Amyu,ME8r,\IICR2ґh䗅S75QGUY#(W.:2.0Yp$,# ')+"iuQ,Py^~m vUky"BX1W3OGjJ#šƗ%f;Ⱥɑ3BE)YC.|Me$dgT%%dS]>a GN F}\td>5M3~ jV+Ǹ>Yi¼G'"CK%(hGw]IJG.הHEz6lǘ~M̴l2]9Ǔ C{@nw`:DAGS%]!=ڝFQRS>t@mbe7MhC5=ڝ)Ӝzg>FOrӖy7ѕOr]OZj+}P;8Qdy9SeC*mԺ>-uz:AدR=JsW>!NZOyبJJȼXL`JBcJFG.ʱiޕ:|#f;GP2OJUnӔhH&䠁]?8_v]Qe%5fTLF$|2şuqP'eћՆR59r LOg|I/ԕjt-SiA/LDT9lJ%):PN&Mv%'(8ъI"p'w96Pyf_]}M4paSqŋABT#o+ % \ -=Z{|i爖BI)R$K"F br(> eܮΗu'_oy mHͧ]rU|u4>ZV Eki>Yުf"uߓzT]_}ͻ)*ޖ}!oFUyso A^*^Y+Kʅp46[jP^_R⑔n=dQ#A 6L2%U_j䣓t~}<~Rٽd 2.31vTRQ潣|3/|cYJF!mGt 4tq-X=7`Z=D7󔈤84ecLs)-~d#qpd>\+d=H^\6B gzleZTj\$((;ҍZ4L)XZL&ev .Qyd"St؇~Z:r҃ !xF,JTx.1'Pv&qGڎ%t.a^RLZO{Y|Ցl s#)σ 9n>?Zsi;1 *)KJA J-9(+ R*ҕJs*it}Ru|T1PT*IXQd _R]V+A~We:AbOZ;o*vQ/7W8ѓ( =G)R,K+KIl d՜Rp=t*k򲤓Xh$Y.Kٸ05"Ehi?x#!fF&*)&~_brZa^mvtTW#)5"jd MI)sّ遄jLHdT1aD 3Uc,` ?'FFF<35 FBi݉iKF @ NYz'MqHt>ɓ~T>4^?Bxk\I1蓔N=1!OУ~l mdZ#؜NF<9Q䢴d2QRzXtɤ HYBTFY֕tqN/>F GJJM9QíOI$$e')M\aIdT$#4ud)(8:Ru 0/5!JGȾa}](2GI)m(y|d62oNI&|bDtpFZ<I9<ןJBD82y,nKwH%mU}e $#o4\ދv'yQYaR @-:$(.ȤARE!)Tn={w2mwKnw % r撜_IVRVodw1"s٬H9iNK\iD4QlJ4z!%_z \Q/ K\ 2\=Qa >^ κ϶'N=W^J H8&$O8&0Ebٰn"/Zd#ş'{,ߑ:RJDO`,)~kߔe༐&R"R/3"_DS+SmNԧd|%**_P,Fv&4,T h~D zi8_ߣԗ|!4X5YI/=ѐu`.v)*-} N1eKedX1aJI I'ZRFjFV9z!IDjLGũԘya "OKGF:1-"LJ4utHZLM?Q#).yF]>9#=M%'z~|(l+%R<.gJ?9Kn8e;QWJJewG*B:L{W$%eazXn6et˗zKb~'p!Gov)5QcJ whчBYw(0a} A%ы;Q(圊ͩ]IE`;)zvyJn*y)d[ҕhaHD\&K#,T[_8 GHۆ#=MTb;Uu,%ץ$˵!sOM$t=*&'r.4_ZIǏ`ά *W(wҀRA٦G5)׫RĴ|%JA÷Vz0ϩ/ޖ*4|sY7$[%Y;pݟW.՘RaqJ,JJ¬flPu6Ѧz|/G>˄,G#2Ou4Y Sq2`. 6Sz]d?>X.HY ՞h-SF֋֐#6Pӷ5,3 4~ 4i3dE$_?'i,FB:P4&_'MO"TD~Ɉ>55%&"$$E)vB"]>QIK.y$D]a색.!Eq\%c\xd"a2e#r(mط,XߐzHn6e="m#:_2) RB$Dcєtdɻo GeS!}}9o&|Le'n:F;n2N#3K#9zP{tF݂,K"1کf?lT.Qqw G*:w G BBNK\A;!;Xרg>놕}s#ҷ.DȠ0nwz3E~4m.aieaӏt&"wДo-Q:|%,[6L6NZWrGOPL8vD]c2Ni6BTMyPnHeNyrB3GƍTGznop5YAH3om \'aH^܏|$ėKk ޓc'#AX!K|.8d]o/O"m [:L`{R--%u9 !u}>#¢rPX&6'I.4_Hhsf]!4AeYsM4IMVDAQ0^2..Mو4uDA`"RFt,>4uDHp`".Q+jiϚ$(/J_5*4E)`ZIIJ K?LE+E?g"NpxfBό`ZEj䢴!J nZg( Mt]+#OO4+A.~\Izb BH'tU{!SKGyl3-ԇ}tQ/DAC2,aLJ|Hn]2! uGH?rSlKIH!2Z'BJ˒ȍEɲDȍ ם!K+IG./CP >X\ed{x .:Kw9XE2Q? ]6Yf 'ˬ$ AAD_MMUٗW$\d W/H3dA؅둗S~y6"MJn< (}g̴,p}EIA(QO ֋3&;5AיRYDkyHp j6pMg5J8: "c0O4A֙r',D%Ǥo!/7LʲRNA(PfJJ:BJq헋Ƈ9QzDn( &ϣ,|p82 2FAt =D%~x"Fh'( a#!7?^K"y@t2\t=OHiwBv4{Q@{d$?|2%K ߕ]CAeR1 *Oʼu;2 ’o6$|Em҇E*K5)S vr?6 %Tu2n/%ungt6CT, zn]W?Qҟ÷\v$ud_Ka4-tNyIe汞s~:>p]>#YVy}u JCG:{J^ $]ɀ̛z+2torAME ( )\8D H@Ty]wYpU6f?T#.g\ov5p%*GxgYbRM%#/+NT8..Qz+I)t܏*6o}|;-ipa=[svWNޅȲBvy|,|iIu*nOPْS'A|r'~hydb'üd?={*z(g"oMgTi++7#*dE $sU2ӗ7a)f+3'/K^eT"|GTj.mSm."d> "D.Fe9h2EփDFRפdO4 R!Rlu&SojeB4Ų+IXZ˦ y4e})dҊ SOfIc1,g i!.Izf iY'Ò,= R}rT?.HvFO($ A1W.R!) ?&7Nɶi=%q33B +BY6RF9teafH9F(H=% )=YX"Y  $ zd? }½P%^seɼ+a`Tg"^>\?UG(z2?M ҝ}PAL]/2eyd;wB\D}Ce:npɔt9R7|~n63Otܚn-r/[>A'#HejrJ|Rp]+2MӅiRu zl+Hȸ25R_e)t%ͼY˄y I4%$?t:vՒed~ J "2Ar+( =1RG$` ݥOOtڡ݄.Fݯj/u z{컐^OӵDVɃiBʮ`(2377BA{qfqSTRRjIDRv;YtС#9+q*w/mNV;Q\f P)QGQr+~HdԼS0y775;sy{vj"RR[y]xxUCEl%*ezn:rdjz4&R\"xJJ$h&6ehrjLB~ԛNLHMm"uSQG-A# M/G(5!Ƙx~TjKgG & IT wD^ 2* II1<2 " dR Ml)| ݾJ=?W7$821to: wIW/,( ~ C^Aܖ&Amϗϋ[=B) )$)T|[{'sA[&7oꞀi?Aj{\qPM֫> DzJn FT|$"H nHg+~]ATRȱ!R2P뒚k;GP[WH\#}]ui?ղ~|?L*~5峛 >ZOՈҕm7@j c:3QyJ*J=~; \z%jN܍GX6-#~KF-C-- j@ t@?}eQZ:OAZ_)ҭw1)k8w<Z!HWi| +s_ѿAu߁ADyMrfx'x-a";.ox,&/Bb8+< )Ek"Ȭ6e0|n%%I<Ҋ$QNDoM߹mw"^TnU~؆Eq,xPj 5L$?AmTm˟?1rTi),_s'I ~/JJ* 9oJ6.H "$hjYw(A]D1?KZ,nepJ.hG~^\Oq\^(01&cqdA` W=q}qCdVUe; ')9%܊R!* QEJ;owr zTb !Y+)PTRiTA'\6_l, cE>o,% RsSS.D"v6>}?wiA.RfN B <|my]\(j?_a"W'5\07ڟR]K`&0"R|xgc}qvƯ+wFU*QyGU:2I/ҙmEeܟ)*rT9?CN~LڇB gY2ֳGt/e!feB]m&q97N_E}~?kɏߏv.7*2x܂P(H/A ,/YAm/&A`&: +;Rmύkb~Y.V}_(~DAmnRU;9™3:#.t[\qSd(QY錬YR$JbE+*v9)RVqGS*Qei9߭WSs_w!^XoUAױyt'Wlz_2^Y~^𿟩jw ڏ%ˀυKȹ jo9OPs'?v;Jy?̂˅WX_(/*Ej{ ڏE/<+8b1c_Ѝ}yC_%+9r0Xeʛ,-*Bδo>{P.TnM؀ܖR-֡񄽈q~~@ {M *hx}ɵxK~ :l릢5O*~'-OgI " h_L\T䟠?A_]?5Ay9p \8'{NE1w)(*/҉c,.¿>WuBn}PjxƍY9#R}('*3n"ΨPT E/(/WkPo4Ӿwr۝f+r[ovFT\Wp۸\*crsB)+̓:LEWLϘK~/.j{>pzRw~!AQW9_${ .`;OH(櫢:]8$0ޘf{Jt]דO/%K}\ /RPƹ+.q뺪_Z}2X_oGϥn2؎up axX|jFY[w2j#]' G۟^q?D:}+'O6Fbc,sיoRFL'xL,篶CV6l #MY7a6~1E:BArL߫57lr]Q`-߳Sz}3=rݥY_9~:託ʒ'VSPo\qud^#.}Iiy#_<#*o-Q1\TRQ+UǗD *9rJRz2N݆V[Zd\쯗9BJÊ+% ErїJ ElrK41n8NCA>ou9}>||u;3zˠ|0uݎ|FPCߖ˲y,\fK^Q,g1}eYv4,3ia}0l0 c˗6lذaÆ 6lذa|C߇^'͟u12;3Y]GF3((~?~uUd\k#ȼB7rx?s*"Aȸq0* 7S(iiLjcfl~69K҇ڣym7d^}GTFƍCJTzPXR /+De-*rCEe}mmw ;d/fӉI8ء^(VTv!JuGoqr;'*ʹ/Eԏ._D?œ.SgB: dه쓟ݞK3~=t] n1C_3:t}jiji<\yDQ|JqSO>P|0ydpxbufmt;.˘Ӻ_.'G(o߾XQiÆ 6lذaÆ ^6mڄ͛7{pVۆ TƍUZ:uJ1=gΜ֭[ 2K>އݻTi]f:s ٖ wVʾUmQӿ邌(+9'*ov~79SgTyqDO@K2Deaz>e+24]>'|r!AeEVRGIi%)w {,߿6Y "ZWǡj }.d{jȦw.>^\pZ`&Mt] mۂQFEV^^+,E8+ cll"ٳ6b ғP[(Ylj8JDɁBG尿Pxo ?"c?+pZtV({^,0_9JOKJ36a .T:s-|dRf] v:>y,g;/z]7MP2GET^,(@"[nS2ϧin̘1xdvǏ6lذaÆ 6lذQ1{3ޏ?_)/Tٲe˼{>}w9Ƹqט7oehMsдiSu<\s 9'bEӿ+](%+J-+vB$*gT2szF%~+Q-V"˄ǥ>0 Dv,a\EE(Ϡ,m' Pdӫ#]o,u&!\{2kFDdן߿9-ƭŞ"HOWIO(L/ל9s.Q[`ĈaN^XXg'aI٭u^:`H8˩݂#d?QW#.VTڰaÆ 6lذaFq4nXwCj*urJŊ++B},{/HQ1cpqkx+x1uM!iyT?ZTƯjJWG&E5]'*C|QNVjcbECxU@LCTv̗PT\QR\9ߜ+r):ybl8CQ{6q&]{G#$dHIn8|3lU/))<.}SQe;rRx6|L/#GW#'\/((Te9y>XmƬi0goGH >[ (*e]Z*A뜋BPO(9U"띅%ڡd,uBph H_ =|Nwd,5KgBuΝΧƔL'֫Y&^~etQN:Ǿ}b^} ґẓ(kM4Qұ_~Oqu8t׎(p1?cu4zv`;fTq9ܱ҆ 6lذaÆ 6*&xOO>Qehߡaۑ$*cعs'{<8p 9.S9wQ==Nܢ҃!* OlJWE5 Q^s#*7*oBtGEEJMWTvpFTۅ6;#_9߮Fv'?x9ssqK"d U\/@Ӑh__+IQ 􏧮uڵ ]wÇ<_qwvz?uf|u؇^u]ͼYQ+*mذaÆ 6lذaO>qE5%W)*=,OjALh"ԩSG ndb܎S(%*{WW\tDk(YIQq]/d^(*#*QO]Wv? E 1x!OD՞!+DϨM6QEwӢQ]Q\tY*oD;kRdY-5,_Ɠd2rOF>X;lC cl<\3|N1<'"%Øt/:-*9m(|1+q> 슼ñr|faI P"9!19/|쭜&I|ck_De%zwSӽKwe'YvD|_k=pjG8W@&y/6q Gի{VP&M+.zC旙a%|&KxwA/P6l;`?^M kƌGF`p#Ծٳgg\0`9lRno4eXpfΜ=} +e*>\GZ24C<>5HYXQiÆ 6lذaÆ TJ}ٵ1|$Y Ա[xԽ=>.y\:ջDҎWTqpEeOVJvF;D%GSVH2GTI Y⎨Q&|>e~#rZp7E҄K=2iq&B5_'ڄjT~ rYwW!uz5ϖ}&[?li~5_|O婷]w="/@ٳg[l!C`/t|0Cqv88]=z Qr:eLM?/d)od)D/đuAyR());RM^m#|KHJ0./: 9" i^{-{96 7?\~emӧO+w7gZُ:XK/m۔7xC~~H(y))9[7GLrڷQɾ8wߍ.]7}Wϫ)!9>SA1[%)Yvmms{oچ}~Ps.'''PY4k ݻwW͆ 6lذaÆ 6.fͼ=GP,Xg=^Scdy}r?Cխ[W$ϭ%Fp\@$WTrgQT#*)*(QYntEeXMvD~>34G.:ы&*/xݎ7[܏*eʭ~rZW2ŮQX1e.5,oV"Rr Mmw_t߅67m߶܊ ;DnfchydʴXM1hH gฐWPʳ>y ZXӛߩ1ƊѽG_PLÖxe(.e-5gSRPƵγ)IQmS[gM)]$p{9`p]jLo>gKGQ};zTx4l yْGr"_>I8E9>mzFTRr7GA2;v]wݥ^}|V9Brй=/῰p)/[hFf__0zho8vIyF__oo|@a%CllذaÆ 6lذaRw}!@p8_ J8E\GQGTzߙYTopCVV{x\J<4өC9)sV8OuïW\+3*3o'$4eeቩ߁2O JMo7 `QI9Wє%QϳO݃l@{+RTb5wǿڇ#Ŀۋf [peu8J(jLS_:nİ|9 %goql$WYۍHȦU8S֠S<"هǣ/_T>2Nt()MQ%{[dOkk-z(9Eq֔\9/_:/*,3ӥ𷡠l b]iqҐ 9{Quꫯ7lE*UpW?V#2Nofaq)IBr߹|f&EMT=NMo(MREr?>u#4^IR/?8i9sdÆ 6lذaÆ *x}yu.&iT$|/Cv5ρdUf9QAtt m۶__q@>\ǬσߛҖ})*۫gT#*Sj|/IyTғ{I~\|QɏSDNK#^}&TbAv?¿ډyݛ'SzE%R/H ۶`8áɽpǑ͟PС1mX&| f* EŅ("Kv I)sڣd+)=-qv8.N,3[z pJE#zoW[nE5>7Ä\G9 \(l`HG <4n>?C):n(DJΝ;S*a tq> S?`9G*Ljomi\8ڑbKZlCq9rHԛ,M}JR7>O6McbԨQ#PYXQiÆ 6lذaÆKN{`F.c;}_se:8Gƿu݁ދOcÿ2}_Nbb< L_d 2s iuf <Ey8{n_=܏?3_C8uΞ9|[:t/샜N{WI%*e:KKm]Q %{[ԆWppы89-j]Xٷ|ATK/(__߯ed}j<<\>E>>rSlJ;NToJe!?7J^{ c=PtlJO T^QT7^|j_(IqJJ+oڵk aO1j?J>^}? 揽҆ 6lذaÆ :{:޻16t30,W3*>~.~18hxW^yE TkpJ7GޟNqf0O׭L6lذaÆ 6lظ}-o&>\u}s_Ssv#iM y \nN|#>]?~N`AOMʷ:TӟyR'*mo>2PTV;Q>gAsW&u U<1茶Lɘa)p듐pAr[JQOd]."9/EPP'sk9&3Oԣh0N?F3O)L?Nٴ58q5gaȊH]thBCm]'e::^ıaCg "v6Ê 8n.N31.<Eg_ +7sמrC/mq$?ZJTy~J]Kk8r;%)$(#*4šE5Qsr7NoSTS֡ )Rr7eۧ0忾Mz"ט}YQ+*mذaÆ 6lذq)ün:7 }|]Os9{x?uZ?:M7|Y_xβdp_11ӟ+9syFey2D`rEe{WjAUhKW`z.{4dfq2].TT*_TqNEϚ# 8zPrcER, Ep`RHLJ/QTrgiIw#vJ"}8'05ϑq:,9J#%yJHݎKK?]cG } `Z}vffC )%6lذaÆ 6lظԡ)} 4ޘu/0WC :y?:ʥpݬ#fB`eJC2|`ef5AJt('Q70ĥ7ҕ|E܈+(*9R>,~xqș%űX|JPb@%%2ʮ c JΠ@<(:}EivN!M7ۄ>}l8UPBXY䝒c8x2B)}Yf):%jTWT2`HJ-*w5qxY G=;Գ)e{KE9̥d/C/^yvZP[`:0K=.tpIt}p׃Mu}C|4^}0y{j[~xlذaÆ 6lذaRy/`ڼyya]n?L,z]GP/z݌tMYa_#U_Aj;v|9e&Ų`}O=T|(?K,/<׏ 6lذaÆ 6l\a޳t9FyAM|O/z\QIc%/*3JuEuݐq}$QɗPTF;SrB+P4(HI))wJPu'STEN'yUz8T%u<+{LHIWD*hQP'*RTʎlGQYY)*7ʘ?Eʗ/|y3fPe| ӄ|˔ȕ@,LQy|ċ$7>8A? NԶ8C;F WNy8*B8۰aÆ 6lذaÆ 6lبJYWߕnk:;2JR t"2%3(ʾy,%+۩> yDeBR^鎨^BIw͓Ld"_ ֣QgGӝjpڰyԔҖӌ< ιK~2E%(7Jb(,d)vξذaÆ 6lذaÆ 6lب蠣)=|F%~+*()#\})*(HR#U1G]:` ij/#!+%MIHSHg_zeIQi~Deesw_xQk1HuD/JTSR R,JeS"9Ew|hϢx, V|V(taÆ 6lذaÆ 6lذqLP階DQ)%*JOTє yQ q,3MYK%+MQJs%I7ZݦqEe Lt|ϨT/3:(͗p$-6ԝqIߜ5Dȗ,bzPɑ3Qj+RWaÆ 6lذaÆ 6lذq1&@T>[;tʴD *藆6pz).Kg9OJ7r2\Xꕅ;uiI?~Qi KNĥ'/oi~G$tsiJOTp^gZ&IJ[)*tn- XZTiJX,XFQ =N]ȾĊ$mm~۰aÆ 6lذaÆ 6l\'JYg%*ۢ[}MgTe Q=|F,*9t夒KyȤt>ԋwΖa *s4%9**+Qy{Qn\rZFؙL]S/)b}j\GOY6B^#9ǨE\²ʢb%9C#%SrP$Zdr& L$6lذaÆ 6lذaÆ 6OK\mTʳu]NʙqM'gDݐq}τr 2 RhHQ2F~_8ʄLG^$m95HqNnyz>椒IS]z=QY^Ti;ʶPa ^bCȬ3 uG#!r s#"NmذaÆ 6lذaÆ 6l\()P(d8ŐH3_ Z 8U HBRKJFyί]Iym'3"tnLrCe:#|HDF->$1m),]Yi}ZQ)rwTz lǑ(*J-aVTڰaÆ 6lذaÆ 6l\QqDdq!S ?_gQ/PbS_T둋%SXJYXHTyNO%*92tC?o()otD%}8훢шV+qZTԔ|4HZTj(,igEAJX ~YiRrrpDeDO҆ 6lذaÆ 6lذa㲏>HjI1)iX!1%PpSV:)bl,<Q)뱂"5;NjݕЍ}JRՔ!MIiߎ<2R4ҕԣ+ffi'+JJ^|1e:oʽޙFT#*˘]'~XQiÆ 6lذaÆ 6lذq=b(*,DIg$s>k5ZW[ @/zvAh7p"f,ZR" Q_z3*]QMVDeT$E:CvE~#*GIh]gTVAR \QH~gUGPU PVrde{muG[QiE 6lذaÆ 6lذae+.Bq,;zgS]? |l=ӗř|+{ǕݏJJwTޞϨJ;ҊJ6lذaÆ 6lذaÆ5JPR\G帺Ak\|{Tm29/BW>X|!Oⷒx&"uF^船w4GVo{/ӡt3E_Qtn!#ՈPLt#L{ WvGTjQ0zWv>+;GN{Q.Tm ?Cv˵ϨҊJ6lذaÆ 6lذaÆ$zX1[;z DOEW[#0,;. NwoAt_*Oœ -+*R(^"Y燻+Qd^9-Q~ST*F|Fe}N2IBRG` |~,9W8t'npe~Til@w2+*aÆ 6lذaÆ 6lظϨܼs/>< 6ן+iL4 #7u'1k9\>Okf3;koC&ƑGQ+V#*c1#N]ٛ}oV_Q)-/W.ё}Lɴȓ6&>N$$eGQa9Je?tއ*vʶ;QFڀܖ+펨[)p(":^ucVǸe0R,MǍgٸ| &-x\|cL|Wd;`Q( 9 ܡ;mjiP͛4GEX(v'q&&ueK 7sIkn[%gx@fY ȏϓl)K[)s>K<"ÿY˰PL:|(_Kƀ'ceQR"r>C.sd!^-b)[pN#{%ϑ9gMgBJ䜔fٰaÆ 6lذaÆ O=5:3gdZ4녅j$cA0zjqD_fiX~Xƃ]~0iI,U}w7 RorM@mXibt/bٗXhmyU[i4Qa B!Qɷ~W-T؈4PT!}&20$$%qDeGQ!Tt;]r}y/t܍mvJ m['h28d4uGĔ0lJ ^z?2t:i39 9ޣ>xe"5#8dH1pH^V 5,ۑ !GERG؏$*XTr2aQH#uuk/۱vZ|u˛,4|J|JQY:xAaI>( %H+/U,OYH^X茐%'E?)/*I?#!? 1ߏʅ"~ӡ)S)dby۰at|uѮzun=`wv6wjNx쟜xYj>{,֬YݻwӞmNJ>(*u_n$*;E|FvTn?K $Dd՘#7cȲ5hHjDf=H᪦Q奵8F֋w3RufIԛhPITt$|P/k}/vo>@G1Qߏu^Aq%Gk8ᳰix+9}Wc1;g썱vc97Iꏙ)ʶNv,IId?xL ?m.9C4+Qq#<'SXA O,~?ӟc J/P5^gBsoP :g.ê]\A^!l1 È1v,S/ً gcɔј0s.f؏wEA pkSb[Zmˆ1vQlXwݘ()2#T{8@VNADx|]EG7LƤpd0cZW^On'QPs{ukw_AsoD>A7Sg pL(Ʃ]1xAS<4:Cl'^,5d?[e_)+(qyr85YmlC~dsŧbgb!6+I]*-ޏ 3;]FͦQQzZ(9³0uc|Ф֪[>phJuvzhQG8xĎ-ySx/ؗG9'1r3+ئ<=E+1}4-Da8#n>lļZ|9>_#I, ^q -=3;~fWqm|(9˻sQr)q%?~8RkÆ 6lذaÆ 6lZLjdgTo\y V;W|wґ?QI_TlUZmENNh 'n^SѢ2^?d7'DZh&[Y'ǠMf㛽~|w.@DJ݆S7 Qw{BMϊӃ ISo3*t)-*t%EeV[E%GT֭ GE1&lU[SwOo_!<5x#Flڌ>Y{9)&L(*ę'q@!ΞcDkŕubk4|x&IJճ|aqlv,~}VĎpq;/jap`=6~h4Ow}c8|'m.Vق:'CM1.Z^BկwGvmh<vx| ˾cf^|3~ '|>Gw5?A1tL.8uŬ-+1we &p> "^s@96׆ 6lذaÆ 6lHz$%CJ.՛\h’S"r"'=&h4mB_][܌ֳN_.C"xB rµ#ds-0| _5ﰐ};&*3n$*o\_b2_)H[T<#tʋ *'!Zk>݆Kף[#"PmNAȮ=߂㽏'"tq,ǝoݝcej6nl1mIȭ?YϬ? #G@GCTʊzƟk0||c\K`լx:.' V_w!qD ;1-o#cͱ ݫ )8yk>نc{G?B]8[^/ǧE/-YK֭ƖQ/?-(34|BNqAQCY -՛9H~afC|{4߅s⽻B(Cd ?6n%a&1Ob38S8=g`qǞ ÷CcX|l݃g)bsRNCZ˞峉-Su+Y9?:5>ݧ;}? ͧQBJ/.Š_ݷ mѦ2= s[ޝ--8kT3Q"׮elذaÆ 6lذaÆ\o֣ u8[efVlK o^? Y sP|Tv5}Rlɹی9}?°y(8{+>x~Z?]Tٞ\-_j:9qb;xqml=םDIik:V.y6lذaÆ 6lذgJuݠuNpԾfL~{dHyjdN+ tX(č_CFSU{&"Zw:r끫DŽEpqאc=E̫; tGT߾gTR_<'PEM.-*p4!*+݊#ZpD$GTNpɸ*6t|u2kD%FR6ڬV"Rs^M[Edwv. ]#GV3CnٲZr!4O G>Y[$Kk0Y Ga3E+ej$a 2=qx|&o=qZQ0.t C/#w6|!1 ~9 _팑b٣غl.zQgX }ӦofOa㙣.(B!G;r  oYw~O*$%#*%:g7`լhUܬ 7oJؿz6| ߏUcXX(I~B߬1^{|c7 h=ӏp~fƤ4-<+M-iB;&x.EV: )NJqF. %}c~8 jP(mbVb\oMzOWNb1|:y%kۯ?ėa!Pg_*RuS6lذaÆ 6lذ F GONhYn?u;QZ=;Y|`)Bj-:Nۀ/&?}Mf!\g "5G#n-E}S#^8+-*]^DyDe')JQI( MIi] +/-,STe:;܏*J=—tނ7#f1PT;,J;J>`F"XD)kCpRcni`R,6lذaÆ 6lذaÆ ?Ex^1&ډ'>}HQכFQ bD,D,d4U^#uOə1XQ P7pUQ Qy]/d!t@JTS Ea(Y$c2?, PGT-*+ߋVvݎ6r>M\Y ~Ȯ=Ft̬/'J=0d郜FQdHȮ;[DkoX,bX,bp時"ʼn"_/kDW<5"w|4K};r_u ^x֓C:LL7GTvHQY_CQ-!*/ًw![ܖ&~' G`42ɭ&Dj@hc?Aʬzðy?~ P6lذaÆ 6lذaÆ 6~()$c:c'q![lyk0jJLYK6lŶ}pL_͠qoD)*S=2gT?**QTvN9 AYT)r7*ߊ܎Qz|ZXFwaںȩ=Yu NES{B!T/39e)[J6lذaÆ 6lذaÆ.E P"K<@Qq1)/Œ vKb)|>e _cSvEeE=7@JN~/չi$2K-*+-=Sq#*;_T w#zTn rYm^|غ#PJF󚃐Y#*Ǩdz ` µ/ӱaÆ 6lذaÆ 6lɢ8%%c\, KvJb1@M.AH;BHb,TC1)*}ROVNJTf^S0Ee5GTo, T/!7J;)]3*Tk[ya5>F|MrggϮ¹vXc'bŊ+VXbŊ+VXQ yQ#D#!CVb!D8 #NҐ&ȝ. ɵH2N/8$ΰkS/FCT. QykTݯ~wC$eWdeDmS*ىeY27:-rp -v qx!/OTa38r #pl֞mFuUlY%Ν;gŊ+VXbŊ+VXb*HqYrTסl)*pDAAi!NUVdq JJQ!RY*"aΕ%P^^s%(*%A5 c!)͆:c}6Qi[HT}rN+nHMTvL­S*pR279FM֟C,F8C0 ]F =^CAxB19/~(NY\K׭XbŊ+V}-jϩ[Ig~鮧Hw݊+V\ O@(_^#g6CE||lC$L%mWWЇ"·gwp}i; 3s6n3JCT޻ [nL \A_Sr}Jґ)$+ͺF:%*oR[HTN,MEN঑ĺrg>'۝[pϐED-.3zq@ӥ0?-,,,,w;mGat֨~;s;$Y;f&ʹiJnD@CTs-QiJD]EvnmyX( 'ǩyھh{=HDg_bvtM|MI$؛bJ^B^baaaaaaaaѿ@NItvObQO,,Q m#*R;G Q)$*?';S~ejר̺`'*^D,QiBu[ݬXbŊ+VO]ۭ'v_j3owƣӰbŊ+VMvCz{$*Y'Uٱ< ;ߖt%*-z ) r>@_G0猳H >'zŵl탺7 *2Da=XҢ~\¢nv=!q1Ó"5|jzŵlH=>}a؋7|u5rJ%t[?oH:r7TVV555-UUUFRݭXbŊ+V}qwuuu(//GYYq/&q68oll4t7w95^+VXb¶*/mSUe-p>Q5* w;Lrb2U,Qi|iliiAss16KNs+VXbŊ+O+--5B7ڊ %IB!={ĥqiŊ+Vh;>/!o47Qɯ$*H瞅tϢ+QIqx?tboJL9-IQͬm.)ernt79ƜM Q<,cTOS3z3W]K?qOWxaXEu /y$ i3vX|F\5#yú,$s'+\JI<; 2r?ΞzM>v;/DjZM._OY\]Cp_u}Miaaaaaї]$tz5;t7:s'xqX__t8vnqC~DTB5݁IFg!_"=]: HӕEt&5n\,TXESN+ҹw7:ˍkaq-@{w`.oB⒳ 8D% *}tgDݙt| ;De< \GWmrMV#{SHTU S;n^qW// Yܩa* 2&xp^(Ecs#\Hƛ",јȹOD0,j˳8k"(79090ħIô) bc;^5)k6,GT30nv{ME)xx ^czi+G+3ۍ~NLY~vc8Uԟcwǯ~nRӏ[ATMN_u\%]~RկnD:wuӰzgB9sڡ u`_uw*4FT&}H ߙO|eʇDerr8;4rT@Ě6 ;1ǽ̓tS|)ҹuQQXTI4F4GB52{W=ehkmDHM6?JL/G( /qCD XHr&I$iR0o*&ylŜN/Ӑa)n)nKPw]IM编 ;}}Տ;LjZú=p<4c=_ʩS:HGa9s!I">#l|\5a,,,,,,"m+Sil՝$%G(~;^͝a#*5>ijnh?=&xHq8X#qWuU\P?pǯ0r? - bE%qɃ$,'y) 6$QM?]zw@{f~ûkue0tWMM5NnZ6q㎃zswY;E`xK?J6r\|gau;LkxE_j;n 1sn㞪B$txvJSy)=vL$Rin'RaXj87gxnQ Ǽn%5^WQhu1`;xwi_O?~{2??yj\n4 3^n<{S#3|d>-y9bP{CCBwgsK^#*S-QyI҇~kE HT04UWi)f:c(B0n ;%Rq:?ƥnܹsX|9V^m hlm#'X^B" y#Xo?ރ;܄{mYGQF0AH^$u)Wc3"}|c{${V ]N 5D~Sn5^qH='Rk~T^Ww CIO/4(:jQ?ٳg_0㣏>A6Rxܓ/׊X¢/B>V#Gq,jwBc 73`|pn[}E]ùSv3NCSqݢƗN:Q}*g4Bq-ũv'XLk{u%Ei\'uo)GV6m2߇~#??M+%L¢?CB*T(ԏ ҅OEoM>on]~]oZQ$9ya,[̬S`!TF*J: Qub`8- /ݱIBq-K BdggwŨQn:E[_wPZ݀Ʀ:ģ>D%oD 06dzO݂~F zh#nyd#ϋܬ8S?QRb2Xn"w-7,Er R?8qL iCž}qnCŵ(:*zc4(|2,E`0x`Zrӏ]Q4LSGۊ-Zd%~g%ysNUwnjO^knj6v73-w<.6|EErssxbdeeaÆ fʼCp!ȸ?`,۷3՟s׮]25[U_ 3>_"eCvŵ>P]Dx|!8d%GP?PY]#/uՀ/@Qc+cjh)+pۓkq/_§݈O= fxo9TsxH^h6rRIĥ~qTew^E}YcSO=e%Dnpk^YGhɟ ~7¯/v5>+|N_7x2Hw=\n̯%*{_//v1s =P_ 6v\^06ᅬ~|pݿ_7y40H# G[IN?z̿Txm񺆧{yy9{=1Ğڋ 3?$I.X%K̈>%y pezsB)<s)$x̲PM?!|AMҒD"wt+P-/#F(??bǎ_e{46xLt(^W\uΠk+'PkH5F1Ǵ١S7 A#XhO͛7ƍ33wHV,4ն <#*'ӣ͸k.әUՌm~?74.޳{0 /}ڞ$*cSh G"DرcOIIʾޏ_4BirmGvI8v޽{MdN$4tSOKᎃaԸԯXZu[Wٳǐ)S 33&M2ԩSM_>5\:\:Q)ZQDz02eJ3;-qQu<[(r$% 76BبiHmzt ȬJn)z/c|2 yFL 1O6B"pC::87,IKnZ+49͙FGUTޓٽнf3?*xoԥW/MM79|qc𩇖GşU`6 $Rt#tY&, S{H__yL_YςG9sB3Ӳ^zfh`q8pYH?'McʫҚc!2a8_qgJ\G'c} K(hgЮP{KVBۃp5\ikrf;k'?2sMf C>S=#*XC¢/mXdHtq Dtc%*/*vikn=~P&YI{dGR@{;^x\Ì J>(Nv1;]N;ӡ_}Us2d$hr;Raw Ɨ_~ل-G{Nio&f$#B-w i[?0sLc?>NmGڲiɎ8&H7 c<˘H*rPK/deq1-3yN>C|9s2˲eeϓ3v,g:F۲`jjYgqZˊ#ܸ¢?:%8+S/uwW }CRt"7~ JCHJ.쐏$X>X6l9 ~7K!ɊFw^o%+)(4xLÂI?3QF;|HFpKGF rJ<x"5nk Shyw Ǎ1Fw4bŁ˝q/k҆P"% Q!|Sͣܰ|aF:ߌj|aj%||t\pbd|ejقKJƳ!H'Y4X>$XzRg~sώ`qۿaҥ,hTu]ƨH?|V4R9m?1VXa;QFRwoσi1 ַ}q~f%; _WI_i*h2fM!sYfcMOa0YN_;ʉ%*-,,,, mj*JG#F\J$)i7u%EҊ%ij{$Q;'m myԼiҦE{m8vjYHѾL2a??8"-kڋ$g-m7Nffxvi2 f-25u>L}I)gXs~T?)N?a11˄}*>+U|2gGܹ=9g(2L~5}})޻X s>3KTv-w^$D[Rw?ξ-y+JTr:Q]ʹ;w _w{`=Y"gnHQ9PdG>;)Q#*P`C]Ą䙮 _ vt1(wu`\4PE2O=(9n4ї'y_ 64;'Gp G?4VX,O8iԤJCt5^=(ACs"6IN3CNGşN._ͨͯKbV-ϼ*|av%>?:>4jR~ QQꀨ &\'x4tMQ,7ʈaIFQF0~7a ~#SWyF;G?RTDsh<9挃\"bo~cpu{wґ8;:Nšce=% {8]'qJCiT燀'&mG-Qy} $iC&`[$H.!F#h.=K}y$ԮE{&Q~\G$'K;5bD%c*_vm3ڎ7'Q$Qe{'{L2G[64Jx6ldu~-0.l)lK-Ȋ% 08z'#NF$~FA _9slI ?^12=^Wq}UZjto?z-)_N=][Ѐ_$AV~kY ŅE) ::1br4wDN{r|{ TXVd3, ƸA95 @;1Y4?ϛ$(4tiಮ~*Q_NJ,snA#J89u_I3AaLww:aQ zEinj6_95B#uϘߧ5x\X¢/&?XTXM?ƢAQD)y"NRig!IJNvihRWDگ )hgQ9$h;?B"h c^i?-Eۍ6:7cȲb|,O^c˖l紷9qˁH"_D0,m=ci'r 8iB{釣=ysd!2%Ed&Ct15ϙwY~_,;t+K‘~Y$"8eB?$7I2--c嬤t6O-2u"z:JmEETp/IJ"9xU#*#+'}~hBBTBh8mԽ76Ýli }'y45 Fe`3;5+:;WzO4(HtԢyan7uc8ǯףOo7e5ubVGQKjlJ5(ǔ/Tsxq} b33;" NhQp! ]1ϋ2x' 9GYt@T\C:jD%׬)5$$ +a>iHdc0fM\LD%eb4d=GB7k+3P')Jҕ}nZ&tT_g?YZcʥ5-,,,,h#]C{G RHfѮ!IE0iw@7 ND$hVrJM~{QmRB[?Xb޴څ0 Au$dY}%*yili˛D%ZGBn KR6m5O.Dw~&G3JmH;F'V>#cyk:G[y}0 |6&Hb^8RJϑu*ñ8DPk:p?kmTs-yvs2|E_[`[DH}:lذ_r .QAPQ=QҤe * V62zLaEA~cb4/ A\0 N ӨA mh Q^cTI͛I_ipÝz]zD#qbq6*=K%^ܞՊȬ5#&U#R/-?dWƐԃ,O7`^qBfG$)nzqg\T:Lc$ _}nMC#G~n4hRH*bAÚpTH~o4`iܓd9G)84#݇zȤzwCJL5ihd{_ys;s$Yj9s$bKf*YXXXXX5Fv %EILQԖ`x`IhKQh@J#5Ƨ#* 0]n,#qHB$I8NUHw"iδy&G;uk@N]Fv#G=~h4ȸXf3ȣNצƲGnN)olh42g> 捤Madh+KB`Ehl84#*|uI!捣IY<\ *$Hj<j+0"N%H@ўX^;~Fw/!*h ZB6/Ƽufh8cEvjYne~ˈi_4g8 5Wc'Qg-wCɏ$w>+AH%Li2@{`8_ˀyR|v܍归$!ϟOd,3>;^t?+ I1 ]ay i:@ϵL9Gw?yZJbV 7G.iAwu k[s1XR7>DT+ +G*A'Fˆ_՟a ڕ|1=惆+2_y0V<*5=-85 (H/~r1h8Kkj܆DD%X>1CQG-됚t{hp>+"/}$W^Cfg>|TX4e_wahlҀG1uѨhϕf0niHuǼ3,Ӡ0(O c,藿GL0}YO SBh'AckE{B shK~WArHt$8#hv=pL'-ޝLy%۴ (z>cڀNp^S[ii|03>TRO1ú8x?LKdxø ͛<1˜q0oLnڻƧyxLy̼Нnaejax{i_ͬt.nPA=@ď^8!Up돮`KkԊhlIL/+'8u<NHC]ǩx$S;$?5bD%t¼ knzDjSQwW^#:E5Z2.^S!XTw7a4u;[n =篦;mussuSQOϭsvE_|g:2 9 D?(xr1\M)?$*'*Qx~kFpRV0]M[ SES[n۝Pw"5~1ڜn}-hxw~*\//iQyI9dbTD(q * p H  kڼ (1g=?u;$ y6N̎%rn{gq1RPa!^w_S w)S$Ennl׺?x+-Q]3u/:aJ khq]0݄'D% iGҞq=4/Qɵ0uu /6S~ۿViI«%$VyCZXX8Pj[C7m$+IDߝ_anqDE/ EEE旆">_QVXbŊ+VІK (Fݧ׻S G񕔔Q,%)]`d<M~4m+Vp*E,T7aDۿMK2^L R„ &tybzԶLcTQQla.QZߞ\L$ҬOI~@TJW$dwDeCTrKTZ\k_1VXbŊ+Vn}pG}>dTF&ڞRcŊ+VOamۢJ3`$Y˕n(QQ,Qiq>RJ=Ou̞[#"ݢn݁;N8}B^el#B~KTZR_tX迠=zvWmD6#wxbaaaaa Fj;GWDK$*?QQW˙}1DE//eAhC k u߱srv:ZORt kN}LMS{蜨';;{BT6I7tH$rtzCCTζDE_p[ڀy $"êS{,,,,,mHmL mC:%*a@7 v&I5gYHr$\MIGTkmZq[f n,҈f̪íuf\['yL!*\"*{|-,,. BƷE_Ej䱻w7nw zBtWrײD"}֛Բ'Qd6.2шk;rWgpW!*fmJ3;ITuE~\KW&*WIeuDy#* kaѫp7lmcn_!c%#i6ZXt{:y }+:RFmhv$ynaѿ 8-Q9CY"s0૙p| 7ܷH]=klmsDNQIrFurDe9nv귅pkWh'TczZw6Lj鱊ՅWw걅E_[?PH[Xt[oXڎhܶRYoS/|g6>7ʁw-0D tܿ2IVZ!*3ے$%רlrʌz:g}IrCT5*-,>hCNFܢ/%#iŸoii#G;Huu-,[?c`P[X\MU7x -,R֛+2M=3 Έ95*IT޽ {,q{uL$*ܿ McoI ؛4);6irFSf;ӾSEWڀ;JYX>*Iihhƍ1|p8p2i1X-,кp$˚g=kǓ<:X=e{6ɶ/n\p-z[o.V>3 Q&**QyҤ,78eSHR2Q,oH:r7%-QQyJT&*aJ ނ6%*-t$U3 ##/2cH 7)IE*P\)7ޅ w]f,,&uKnjj۾X\ - -cw/ipqrWg`]Ef;$p@R^L'-x)\Md\FeY6NZq>Q9(PQ1R-kI؝W- ^Λ7*mf:u .n1PҒ`n;DqŕX9J I%"vzC&WZc=fsla"*yD0p ;S~r= 1"DAjKTvl۽NǮոejn$*ǝMGT:rnFF>W4,g͚qXG9СC>}:֬YcubJ&W,w-k]MiJt:v-, J.2`+{$mH Rw/FTtYdaNȊ$*4$%*sqۜFCV&*gDe%*-,zTvƵQca)۷o7#hkcf'.<]] X/R;Z,Qye~Z|oI%nhbGTZtQyeUnGTZ/H"u+r@rD倻31"[,ԑC71D僫RJ.[|IKtĢJKQy"KTZX\!P٥$*Qٛ;,vC"?r@q<% qg0G1,c "5y<dL}mDEcyqD{HT.{0$Q[HTrIky"D-KtGMTr귙mJ M6<_4z7$FW,4CpԢ |qCT,ӗw\DQΒOv 1c1ʤ8HH(wq20X+\X-i$ 9C\iIgd/Y<TŒ(] QQ(Μ! \kDE3b]dK Y¢H2qa~hT$^~1iP,,zOҖ$GOr:na7Uٛ5*AzlK)J9OP$}XA}Ke?$~n0).~6!|ҖHфyV/*>N !!&&O;N_SʝsмɧCF.48c$a9#i@J2ʴHJēV8LG:dr!IO/ ){`NI]1uδ,E'R K?lY\}@(]]bB:6.kV7C$ bfݒΧXBR\|ō#,?tz-z!HAvM,[|Dt7AFGɳKj("K\cy.6_?_X'F%^QE>/|^tqi"/ F ( KTZ/H]B/@Ors1yt / QyʯĠ ʓ\ Deo%*-,4F6DhX$ӱCvߜ# o18f;b0!,ƔLA1H7hWthm'nNG(pv%c9o#(3$mr7FD,q!hr qG%rK* k]uḧʆzMNG2$âd" MRI*DBEKb'$ء$y)n^$D$1r]t`"$*D=rW~e%%lM~_XO_]]!*[Z~ GzLKYK~ &HF6z;$"^85#@t&ٖ,F6"D%]|ȑ~SPB&(}Lvi`*[;(׽D&;t&dYb94ĤO񙁖iqD Jg ,D%?G1gr -I4r!bF+I򱰰UY^#I!a$QP&rM'(}(z)(rC:B"$Ipt G>EF;"!&Q,*0uVh1QlqD4#׌"$IbPN(*{CTr'"(gB!ܛtͥ!a_!͐#-Ga&-R6C Q6P/ہPm!%% i7^D0#Y%¸C.;PlBTuD9ivL6~$$!v,pI@J[ˠD N&|rd t$=f$(OڥV 9{䚜I~r5dܗCS,(XH/+OZiIS%N5Q9#(&4FHϒOʟ(YY RITkJ":g .:o;?Z@ $6â7b]bUCWcD%GF{-O""u"P+Gjyǩ'!]vqGDEʃ]wJ+u%J! jG$RĘe6X~ =%,QiѿwUt4_MnD 1>]!*r}:Q$/G*Ek"HT<~<(cMZXX\6F6D% #;2l1oY żj\ 4xC:;5b$!a* DX 5Hc9SX8}oA~),CC+Jw8>X f I!k, k ]uh "AH<ЂH1,><zy*[DoCQÌO=ix;G{Ey~cg6!1&JN3W"Gc˩Ո[{H$}ro{앨$L_8#jKOb̫#ţoo^'&¼SYugp".HڙhQ+ ռ<MsIDAT(  Iy?hՀ!*#K[BIGfьVzXwJJ>$$r+iyD3$<8o&TĪEK1m6nx<툟ۉ7O.­{m6`5`ˑv2qGqE\G?.+5RarT|32 ",M2xNJTWcH]P(]vaĈx7^>3 ,, ~t%8Ie32p GUrthaH@Ӓ!I^sd?\tCWF 6_/-f6mYyl^ ֜hC&fVcgmXp5fݍ5,I7rL2LKO53ZڦP]DO-+)vec*,Qiѿ /,uTcJ%*f:\Z"*;JCnnⱧDJTJ#laaqpQڠJ=":4GLǫόŻ[1#rKʱqr̘ނO3ʊQXVP;ڛNbٻ0ln,WFԩSըQ1 JZ\2[r) ܠ(pH -'!{Yz$lWM>Yق%ᵧ30~Yl=x'J[:>ob$GǒD\TnPb:RşYR+s_y'z(Q"Z|\‚m (!wFLZ p-ҾZ5|񶢼UNTlSH\+<1C"L]'S-+ } 4$=OŴ+~۳Ҍw%ʻrPCr!*of:/KK%*[⣀ۈ(+@TJ̢j#GN"{nEe0(VC֬L<=bIJx$^)َ(|^20>XG;#NyЭo)| )iey$Ĥ2Ph,JSş+ː\:d*zDe-Ch\0nB.G5خ8Dk@gmgMe'DX&^R^ ĹFQTT'bN]ea*,Qiѿ@e~pD wƀr= 1EtbD_| ~G Y"z-0K%*XJmDin"*",=l@f.̘uҍ'v2L ;ĐPurڇ[bbjc/6\-<"8`|m,69u[`J4p dfcV;pGX5F.t2^D`jXL't-,,5PKQYN铮̐! Eb>LW:Q[0)xmRLV}~sYS(zm>Qi_>U40ٱxgz2wƉjU|6Nd8шb>VvՉJ6m[r uOL]CTJy: xXt8;$d-.܅QMD6Ta=j1XWCc4ֲbskDt>_Nl&!s0nl,;-#wl[/;lL[@0'FQM1݈P҆ƺZ=p|$?BQx[eO jHnEkQ^p{6vvvĘfcή2ٰj2^zu [+6v^L|6/; m:Y8};GT&gmXXX\SS u fŮhBsĢd /Na9m2BAY9}!gj4<3Ȅ8#OK~>Uaᗆ٩}8*aCL+Cqe%ؽ.3Fac*o 2gLbEX[NZU+XOvϹ>^~87pKˡY~M.؎Šb*y&#&kF/]5a&^:_\X/>; ?l H[ Psff!30drn)I[拵" F>: rqk 1naY /7Ͻ1OO؉5[gi@xx}>F^w9m!obL Knj7G?}u-:=*qx6x)+D; f,{Wƪtz'VM__c&a-xɘ27S cbD!"Et t]؎, 1fMT>k*Fը}(j(I\Loe7s``m5gb6x:/~&m;RO>O_EWFJ<#~l"D˻B[Ǯ(@/׹MbüL; P1Ϗ'GL/_3 E,>|^yg2S3w`G{dٌLL[Hk'mDEΉJpÝ.Nc9ԃDrE Qe!ӑ"\.Q)w#3;JJ Q9kuE6A7 J^,HYga8ڈC.jCk,ǜy;p=HPr$oK'ftΦnAn-#Xym%ص2ߔkQAh'Ol¡x;j[0Iq'ZC۶⽭gQ#_v;a/̜Bc96)iaaѿA/|VэJ#sJ/bf͸c+s1楷̐٘k!&*~&gv#yG$͏r_G,3s4dn*DS>((9ᏏvԆi`jL Z?ލUg .W=#gUٛQ2k?QpD:-;cYE- p';x 6~*Qtzf f:\r1sz쒎YSaBlAKE!nKPͩ1VJ *Wc诇{¦*/ˎ wDU>xWv#ger9jV4ݍ/IXMD,%_OFFqؚsnƾcܯG#P*\Τ'/GkYTF[ ޛwbW(ٽ@ikVL7 ,Gas8-w\-/wÑ'>E' Z31X*ykNV*wY6OǢ Šs31|U>jvW`R65=r>整^VLZWB,}eqUQk cfuG"6'8u;/߳#~?~a,&hGcrl\ Ӧo渼aӴXsg ؅aykQ\y vZi($PB+WX?+j>SXҢm-m ʏ}yrr醨s.$*u~wy\qJCR\?lv(,\ ytT!Yy1I%/?G[~?'IӐ^v|f~K2 Qt%QycxbCTJ?  QWd2>QXb\rVfrAN6Ee[ۿ/>?z |7C _n}:s5*Z9:Y$`!v/ZwcmM#We~i?>&iuV9J'IKJPeZuTsAg+9r/ IQN P՗bƁ(Zl|ddāVgfDH1A/VN >d?7Ñ6m()ُO¼6EqpL͕-n{/'foĚR9<,u[}gìm8V\mK3o|yyCafIvˇGMQ)?GsyB9ӶpۖR=O>22k-K1k&n[^ b=EAkQur9k<1?yl0|~9&&^井kmDE꒴D$3~{H3{Y"n3 #֐C 0x%E k2)JT=#*oDۈ(+82(2 ㎈6tۋW`Z1E9t *3s7cKsl,8X B#lŨ SMgv,Zak]cκ#YPp|UJnRNH^K9ұ&A/fʆzp0m6Ӊwܘ DaWtg+ayeH[?{Febcud)1p,2^[ q'N e{0>A7͘r4G Gi1k3֕n}5.YUw#Gƌ^Nx;h2iGmS[`6 ~evxƎ=0X߆zigvf.왛#[lځޞqK`әř*G(敼H{QO&݁Of ̏&WbO:L|-66J|$>3a_}lkņڤ۱zY!޸Fmz"RQzn??h a<}+8&=4sգ/u4VS{7b31·֚=BLUgpL)NI;Zs6"{c!|+01og! JgX-Q_fYd vڵX51y(YWÚmGoF ^W Q"g"X=|O"7LXgqe^ KKp$N)ÙZ{Z!i}IT> )HC %.9oJgz-y){,Qiaч6A7 %',L]r5.FYۖaxI[kkpnf5^׀Vo%/Y뱵tW`\x JĄITUؾp2>ȓ8joڃUp됓q?"";erVKf:Ycaq-:O_*b rm="]7A[u%JkDGTˋ`eV=X9j),} "B5˱XZ{rbX_,:ޘmg.Ȉu1a}ЃtF`MR\zAT&8}f6yUq4(ގa䘥Ț5J ]RUfaĔ<nҲ_y*Q^kWw21-IsK&~p3z(Q;&R բLږvUOä́qxzqמŦY6i6EcۄugZF5h+pQ>o>ό{t2ُUbJy7K *o toݗA/9rr xl3\ Qu3$%EnJ > QWI #5 ӖƁVv:GȴbMt7%5u9fۈً3c e\I#31l~;Al1jz,ێ}PX ˏ\6j:Cc/݂i#aC]HjMᨴm#`8(SWw g虫Y+c-Xa\8CgXr-fgAva 8w Qَ#)X| ~qf&a |!/[dblaڍ>҈&_5_)S`aZ>n<2Yoi =⺧Q1K q:De<^mVW5nظf%wഔ9G Gc5ț:C٫d6^1ۇ D[Pvj/͚'aԻ]w'ZM~(Q6cµ'#ma[Pm"[ږEY׆`&z q<̜[P}{l$Y9;t!}mDzܝX6JG0H\ 9{wtնXҢAG%*S;_gcKq!*\aJgd"5*uRJ ~ :܈JaӪظ풎Ǎk?c|G45`Ǽ <dl9됷0r*hBt&TGNn J'C^! J=D$Pl;f`UqGo:|:%lH:4:H Gc't"9e.5dž7f?g}բ5dw [:oހ9 `,82Vbʂٴ#l_i3NV:݄3kޔx{L5aZ[zZ<ME /uAnK G6&Br=[0y<5v6ޚr2V[wbӚ8rǗƫ&` ;b6ޞ[  {+Y$$=Ӷ] CK=`tنp|FufҌJrJɻ]¢OmDi+F3K8Fp5;4ʨp͸1BΝqI&]h=7's]@"d fGRp-(s9g'oLCb ep1'qs^ӄe'̌1w`aaq]_/:"(A3lQT1ћYh]1B"_haRGq}2q7 kJQ~cv9m!E rXL:Y1EMZ~m~$> :'Q&er_cx$ҘKR^뜚`\ۑd&D'5dF O%NӎI[vŴ_i$0$NX>/F~Ϡ e/zvǏ~QnT#+.͚8H% ϐZwq/)%3 @YOIt_V™{:-,ļd[,yfOǝ=RO'+'ZQ6aB=3p!zBTR\#oDl-+b;ǍTXROgrXt{F!0CH]sv2|LߕߝQtUo]7m~(*R.2*w逎R,i;EbRTHҾ@5r&faZ.k0R?|h"9ͪO/+qy]Q9fLW ]%*~Q#K-19;z.%䚸m,?䯤=&|//~Hhˎ0qw6' rT%f9j[,Qiѿ /'uIZr2>y4 |r!ܛ7,\@JIn#Jt^K-""ast xH.p4<49"%Up2>#g̷?-׌!TXHh/U1#Ay` qQ W5gaaq-C_*t3~LfF/?p4/2Čj.Q'$HSqKX$l<.aH@r=э$ 9<&G Ba :daFGm%IcȐ*{%*MنYTY"&KÝD7Mwؖ y<}NO/A: -N҈Myƣ-_Fgl`<7S9ҍ[1InXVϑɣsC ޓ3xJg r.#%0%ݘ8*ijK'^hE곳)Glr&;AsoB]Ι)/Hr(ϯuF8AÇp}6͚ߙvbg]3";F:L39`8*P9f Ka2$.+~|W⪡z1RtUTt gS9E \g[amXy1͏ 2l[탄tf_i8h AmvFTrw3SܛQyR ӿ2ogJGLT.y莜OB'pQڠN7;$9]ӰCb,ŐngL $2ʹG1B&MT&䟝zKPOFٹŽt`ϝ%I\4q&' ofBv7RU$$3> K[]vm~%S$lH 9Đ3i2ø#2'jNun2|& !GL, >7:BnuOl(gE<>RP74N6$GҬSBЅ+;4*hL: h'/cPʡTD ͕11:GxqaL+mIqi!rÄvC/J $qdҕ{3;Zuj59Ҿ)~Ql +Ţ4_? /t<64H _6#;'9W!i,z :܈JguuFVk;|VWaiH#Vݜ0NEX9$$=S&劈7 k |ݢnԋ5׉%@@=!"Ź&aEҴt_/򟺌vՕ.5?ƻiu=:qu'NkT9;Ij)]$g3!\wpvFi`TƝeE!TI;–)'>G>;˖I F/Yf"=:"߸$TLzg'FDCߒdg* wRI&@_1)%}%qɉs& c ?&+u͉׉0&<ȓZG)z:D% ']55mVs"ё6v%`?t%nsnSr!|& /bqqzS]]-jݼ÷ϚN%s?OK<α"gRLNxj{1;ǹfN5UMXҢy_ Q)XIT~;L iADFCT:$1ҙ=Ssy%tq]I MIOT&GSf8DMY3ҐոuznV[& pؓD% M~qG V =lmRY=!l LgPڂ8L!0lHPQJbPύ>8Z"*ɵ-rqr3ΑY8S 鄤2Gc >N'!iJ#E?a C)"4np!YKgH/5uNG4 8NdsNGYR4ĤܸΎ@#q)RNlEMqz$oYս F"+qrɢІ[} w*v޸[.UMCQiaqZ? k Qiq;!*IZ&쵼 j[ҢA0r$Q9529D> z0IIRרtH?!*%ޒ Htr! 隨LQJ#pb5!i TSÊSdofĊ3p4p},g @>IH hۊ`؛_ږvDVn11ƒ,,,N Hb'}8n4݌[?GO~:CAC6" $\(F8H.x3?K1 $iT\;#(޼O|0pQwN$]/9Ԍ4#roqpx\7# $8zԌK޴ΐ1./sKHHbzM+#Q&<90#1$M*~ OeI=ZzèW,gwgR˞I;Ң/!UGPQi%՛P(\k mKz`vDEa$QzLo5ˬQ;↯N-2% x96 B;r!N.NpQrǾ ?2N7cF8ф/*?./}XyL` FՁrtjH{W⍣1oϟOĎU pt_D 90gA8XF4z8i#j'|R5 ׵!W]Ą]ͨ:lDEԼH;s`=!rci3m2ӳ%@Oe(ID"a&A#h/ig,fvWW|IB1nZ"a,WRsq%*-,,'B=Jۡvkg#_,, N,,RaՁ9̢@0n#*ֈJ=%@.$!#=%*oYHVQҬ H] :߄hGPZxp^>rNJ~C מh]3S9% ѓx9Xsm!/=nsq*_m1gb4 O"pDNH qѝ=yHԡp<<{1egj}3d"Ga2я8(0I%}RFs9P"9r2)AI[r4BQRrҠpDfP’K)rr$b}RqDtB}tUƩڸw~ʏ[o*{]!Qla?w8){o^"*?rt:umfm&*Ե㍼Sxrc+Ԉ6UѵR|e~̉g[ 2<[JĚ(oNZ(p#n90?`4C%"h54f@b'11v!Z#aX}~Ja/aQpE^QQb'<s`WUvWL߄JO!Νޝ22*D8b^#9X0q‹ҽX7LΣh;UsZl-QiaaqNu܎x2`^Waj=:"77WeܖEU4D'1𮙖쩤'* YyQ9f0a4f/~ db bf >_ʬq o6'T# G#⮉"ͦ7fa,nkG}~x\\b֐ rx0oW`_s-sx'S<{cþb>u VgSLƴ]'4x'WcܳËO1k<8Kƿg}<-iL=^4Ʀ /K㙧³ϼPu= a˿/z? xeT&GY}=;<̳p+.@Qw O=,~ܳEn%*-,,Pߩ#,z]Wu1ݹE:zsuZw[XtFTr^'*?JI%/U.$!#QґH͡0K qF<ҏ]ø}m wo{#?^vP#,qpknXSu$ڌ?cTE9ӡ ǾWDzoE2m$1. ޏo ;k+q2o"^~2"gqphw1kj$~?x4~?uN.zC@%aCꆫbW?|P)ui3DC.t[\9-w #,.\=˚ RkT߽FgӐy"]TOT߮$}>.&߮殉I]Q i<ZqXqwa%kp 8w:Q㚐!'MB"X6B }RZsQ#Ά|ԜS+ %^8rf% ԾC^b/U̞aEn< RĒ &$mGx?cr=x.{?Nl_om6=g-jfb7ºCx[GH; Ean_ŸɟO/gz MC_%z6V9&44hP wCcˡSij72X j,~tD򟅅ՀC]z"m[U릭݅7W]ߐ+uVJ_]9SiE8`**æJwJG0J4WܨgB[pۼfܖل9uv nͨ­3EWiEeY<$nsX.K w\eFp͏e KݥE V4/9Vmv0ZȤ3;*8ų /Mx јu;^k3y }oU֢"+o?@@NN znĐoXEu| bݷ%Idp<} ~Ĭ-g0}#QEӰ%\O>ϻ1i^: ^{)@O tǼoK؊ n^.C;Mͨ  7j7v= | AWW퟿4'Q)YQ|fsty1¼ G^Ny'~`=:A-`uATfwt%Q|D%:!Hb1DD|(>463 ߀ۂ?T,fz'DKC h$i$hlCnO1qb'/፬hp 8QA8^ nʯ1؇z՟GO_\P0"an~]rP+ ]~6=s7Kh8Ęxw7p2\ )_=p羅xnq | 0| -ɜQxŏ2 'y[oN? <1ddkx|5`׬cvQja˄⩱1@ .X??왊I6*|'NHR;ArSc2 ,Q٥ʮJWQIMe{[+) P_[x{|!4?[TG'f⎹XyQtToux~dFsL^0״a?}_0d!mmCCMz?CDxwvv|?? ޜʚzn765[ϏkQn~?o|ѱy??u#%k .A$nJ0IIpd% M' GTNJNJW]WWFsq̚S g0j[{m8= u)A'* IIQM5 G^M7[C_!KǔY8Tׂv5lEeX8s> 9 j"hF\,5Cǰ%X>s>)GU0h gw`C0d!X 8-U;- 22VQ)P9] -6L]`6ޒSdXխ(ݹoX e٫u%*9JR7JB(\;5NyϹGRrDIi5 ~kaS%%\g$/*nR䒉}W&t91F3w~(VAS{Ќ 8܈_.;-9]gD̚tᚏ iapQxCx1Cr/QO$CXDK~MpMӽL]<%!ɯ^Z(7dSL$tKPI~!UDG)90!fYHѸM"+"pK7!fonJ /n~yiO|ZGGT8d#קd KnZ@xe#lމ`6Z غ 5{NZX2N k ET:$E.$!%ґ'*?3!QAT6+IV^RI' (E% zq%Դ0rA7Eˆrk$dHx,(XA^_T #k1Q" I :GMF# Vd "D&wg=G!9Ť'Q8ZyJrJD$|0㗈L7H8oDu!F┄i Ao ј!L""ypA!|q:<Ňy$\c(WH3^\Hx܂,{#ςS >JMrL}g^ x!OS?'a|-9!4y'E=orm'R k$p.$I 7>p= fTenpՉt`EP@I,/@H* C pc#|r-7[Q K|Q9$k1x!q2 Y27!YHJ;(qH`2~I&c"B$%ϐ\2юL(Z"AHhLH$ %^ޛ)3i[\m$G~y# 9io#q.y5+BKqdyRIX/[ \Xo_$9VU o\$2 x D#Z7 H̔߱גZXXXXXXXXXXXXX\kD!+iJoN%*ӂ)2HUS#yf^`5Dg:Yw2%FRmP8˹\/,ν3G#2>Xt7ns#`$G.2nKS ?s$*9yE'>u:ypwD(M ޫ gsN<7$ŋMY;rnGg3g1aEA@!S < He"Ԙp$jg"0:ND$$j&!P&ZNY8u8GfIW^xf8n0ōL=_ $Ѿ\KIz7yo#G3x2+F_/q/\y|=;kwBg~%HăDl>RL&k]nM򥉇=='^I'rb*jmA|,Cma,x}** sy&9NY`8y\Ö*QF?8zLTVY[ Y5Q?u;B x%,% d,[6JGĴ8}$v4oC[K%̚=qN9gtp cX~1/5[hq^|5-DXySc\,Gwc펓h}BT7B#-e;l,^$qd-<,eeiNHvŤVңHb oBϱE}Z9KwU\7jژ\&qkpz,=Vaf☛,hEK\e*4-܏Y;E:[r`ǩrT Ц]a~ҏar#X<_wc\,Z˖̗ NJ6U̮88A|ػl=T$^yX TCr4;w yn1Rz߲ Pr,}M6M(шcpbO>*9mL.&py3@@]5hK):#Τ.eUzK}y2>y4 k&r{21toݗA$*H`!()+qrq?JU"*;DeǮi귅5Lpx5?D}b-uHH,j#T?HTsTdqoh:{ӁK>IqY0;=bӍ>ш&ȑQ1cr=đb)шisz1%,=SoD88r:õfIfTr1ɻH`114c6KBRfr qGLs|?*AvRXl7|Ẽ$H:"o <8Ƽ~H9H+FaϿu<7~/JHTHqѧM89GּՠYH;l굛(*CEXd -Gc09 $-4Xk!XNar0K̹j^D}8" sEVvY: \۞eYXd22Pg{!AXl,#&, g|yެCrhwػ< Kf@ 놴lť笨Ӵlc*&tX\"81r,,,,,aIOTN'A.eaRܘD?}HT~JKTZX5|D HfӤڵ| $3h)SHx <qoP/肀߆H#%ƺtL99&Jܬ*87wq#'$ȏ<Ea8hͰYgVvqNrM:`c(IQx+xOû3vD A1%G |d5劄bƼߌK? /.\C,} tV" t 9Ig@856/c ǥstA鰳#vHBkO~cʽJ*R"N'E:QD*ˆ0KY$"_EV#|̷t<B8O}[x? 侂oa\x_yWDʔe"acLJ,,,O=6h_t?GP_"mIćXi%{P$z|X"9(Ƕ5Xε N=- Uf.lݍU>C WĺPҀ@q,} K ؿ|1gv`ܰ8XQX_֊p!𣩍t*P?KG8%y֙ǻx4ĢfYr988i@cԳ&X5N>2igOuq^ Qbǡk5{J%*sbm>clӥ-Q)oC8m)&LYiX|M^ZlQxl<3GQQ<_fL&<62YQlI0ٗKnM~9vtܳ~,e9ɳ`*añV4nǂg>TIIF[ aiVJ"$ŮKCw`>]`Cz\~AQ3% X=bCTKbS1/f4Şl̟b00,i~$dbI$;[!,SJRXZLѽ~sD%Jgo%*4#*\S#*uW_Dg)dȂ6KTZX|D%g (>Oz~UcPY3å9hdĪ'"Z> ʑ7@)ƻD' &G<oCkIZQT TUբ!F5%(*Eumsdt0kG(㟤(!&b'~i! XBPBSm]xϾӷbgq*+qMv&Ino@cM%$oU(hmEģhkDUY_shIՒN JϡM:)q᭭FeIkqr9 i{x6nEƓ7 BM:1yV/UrʊPVY2; c$iEKi%*ϡ0vMS6l@t\HR5Je-J^"U5R5f4Jg*{eH̐'*JNr\F"i0d :%@09Xb?*1E aɦCv $HA$"g+w#ڏ¸l@+b۱*{qÿ?[j @!RZPĎ5[nKVeU˒lr-*,ٖU;0@xz杹}3ϽeGzgdP0Nڎ[wrTj%Fe~-83+Y}U(HHAg#AY{[ '!)ח`(pp}rlr~o d[5D<0/E|\ը8PE9XS)lEq  d~na.]h}vg g7`& kCI_tջBl}ԣς) OīpBdni(YĂϺuɾ*OOTn@=ht-Cq#N0\;EH?ւfpP/{p `ddCNxl;աwA3/<=%CM^?1G8N cht#.x=iAmt0>PhC##Ǩ4fmEZb!8.p;ߠͶN8G#q J|T^b-zR,FoԸk5"*ϿFe:HT^~k>.r^D9&*m#o%QiYpjt">{Soķ;AKTt׼9pDhxb+ ?bgBnEW"nUv8%_O|Opއ/y7>~$<_G^GE0{CwpAo..,,m¥⃟?_ . w/ſx ;/vSﯹ?Е m<̽v|KpťƧ8 Q'Yf_;/?iϒe_iqqpڑU&ڹ"=m/+>eܿC+_߅^r).2|#27h5rf<=ݬ *@ZLk%y3=êCntz@ֽC|KK>3z]8M??xU!aC1YKq2Yb)RO,^L֔€M^rnفMز: {ՠǃh(ٽqbpw9tpjI+ґw8 6" kdCH;Fvy]BStC}uݝsMah$ҍƊش2'hʎbصW+k@!YK45@=Դeyl e`ʬb4Ao}QPC= 2a#('v jBl)A~U 'YkPfӋș#4{&?{<>oEq4_H F:4Lh?y &Ll^u8?vZx V[K7` ߏQOfge]ȺSBֶb-oX叉O/eQ7ӱo6DtDTw1ri l[V],!a0V%)?]÷ooK^Dm8Y+2?] 4G8:A+}d#zWg8)S{p]\ TĤ?G] n}@0x8߃߬CSqŦ,M(bLXWRp mq5*'}#Mu7N>t:lAcA=Yև~5#__1Yuu lڟ3f!iW*ga-A?MdOS*4!! 'ao_^-g޻+{أ30Wt#g~rW#xާ݃E<69 E8e~=XWFҦ4$lGT8rgE #0yU17²|cw { wBbèOh8ӌXިV& ]d<5z'EMn:JU~tb*ϽZƞaֲ.CAm'D`M!e'4ɕQ"MeH/G6څҥ~g JˑU|CBDtl{\[&4  AX"FuZlV65Q) 1 r K3x3,rދ 0eB̝?KDαA yO@J22KQp=XGW=n+Gv|&v@sYY6ÑA'QC%H2Rw}:B?޴y6n+l-^8AωeaXa/Vl_ e8z l#H3cgIq ɪR'[l[^H[OTޔCTjnͣxD-]&*c(l<ܘ~ ]t=|gpW5xwp_ѷq{E]HHH"+n7>+g`-eQe~f:;07O!no= ⻗7#{:c ~q4dpڂ_53փtzbhȐw%geqX{0_CmA^Ț/Ɂ_ \wp=7MWށval[{]N04N#}P7U!iJ_W]8ԁc-NF3 @5(VXD| y W* kӐ0*ڴO8oIMe8pcxZuN͎ǫbMHNHBܪWRR7u"ڼ.\%k[vҥjގua{K?|9{ڈE+]^#8]Y%[Q/؞6ry~*/_|W,5+$by =;lf]jm&*m[^)Qy!*2rlTg|EGTdMTbMJR/\afoϷTp[gpOw#sfNU_{g~xjB$mJFŶpAdlw =p 5Pɔ 1Ե@E"8YO]~7VHz/ <M7>=y(؆uxjV8T_)AGr!EWx̛7+Rx;1? jGd7҆]F[cڣac vwu[&w@gS<&=K7F]lޑ,<#qh`6A5Ն5C}q2l$Tk'ןerP4~rzj?c*|k&y|9ȨhưQ7uEg|Oq 3&cx>(ʑ1qLJi.=¾ޘ?b-6zG쏴!Y"f兦dCENa$f`wwa7 @7NiS0^ [s5f 8ZCؿCۏ (8Ԍ!ǒ0aGYԟUg+:'bNVZ؋uAݎ,)m[QQը>̃˧aT؆­H]!}_-]^ۢ!bhzԷ@׵6QX7(,-F.w? )هy/+GRyf"q< nؘRzX:zp*{ ֭XIy(.GN^VW P/ڎcӌu9u;Q {C\Tk[ ێSSg ? \Ry!*Դyk,<؛euax qbWM7Q !%.)AZwk >]k1:d.^]Yl;^6 8RF"! 5GEZ7 #n@+ئpb'!nuF""UvT %9p` !5eζxsdo-Z=lQ=qa3,li8[lŖ!ԍBT~?uhQy-U}9kTocr6Qi-o'yKJ6Gy*9ܑu 6;C7"} ` Ɨm&FZZ&*Kؙ 5V(R'=CV'7aMY9,Yb-ײBPF_~}&r aN#?7e-NN"{]<*O I}J}`HED"lWu.ہ#ݣ2@J

N4/E:|$VRDS+C :6n:B BX ݸ>L؀^AjzRWq;D"0Xr0GL=!d!0ԕ !*#'ajv\{aKYۋ&ٌsPvbI7}hw:-ˏMc}mډO.FI(h?\M3JԈ܅u{=N mXQ޲ y80䀧c'OZm[[9&$Q/zd^='amG#κ0kˊ42Iue-b됿5*_#* QymJ{+-*^#*'*7 ^@DsB"gQ [@KLoK2FQQC$:=kcd%cҩ_l ĺk^bĜXE@aE99qkc_i<;#oe2V湾QX͞;3ocqty]o_AA!\I|-j\nL,ڏ3/@ زa,7V?i,Xa݈/R>^2T~'Nڀ_X].h=-~O2) c}x m¤碬?͸f:ٌU?1NkAe]57/NJ90).__M#z;qbg<ƉʵxЬdbOݗ}vAR'< ?-]n q݁d f$Gꎣ}>lwȯiqz<ߵ 曭-"~E 1ӰiX96>mXWc؝O9[l"DKHI- 'zOΞhDCؙ܃8ߍS;$8du6^v䯛}K}`vb68a}g@-h9w]-7? EZ { sX=Ü9(;T3mc:ΜA*EK6x_3t>tȔ./ymTrcJ֞)tЁ4<4Mݽ6жmH\}] 8s0o@N]+Zgиo2墲][ Q© zs!Za2/!j!`tt.$m=NxB<4a9-Fzԟ7b5+iqt3 YMYV'R*k,ڂqރ=lҒ#8b3SQ|ԕ ~l,:i@Oא^b ]5pxB/ 8b;>eEOF,r#f סՋb$.^%GNI}H{uV/a7<=+wagM3Zc`R6ḁض8Z=|4N+O(ے(_؏[l- ?$Rkt[DmJr9] ۋ{{3xoWdxf'dר|o{SFA'yW$ኄsʷ%Q)uK5f&D% t߾HN]*0AueSL lT&Rz$L/ZL5/ҋyN1WUϖ7&jwMC?xO̹.9 [SuZ%]&!x8H .f|!KU/ `4ҋ{S>k?ogٷp[q#k3/a 1 ;YoK L ~u/~!Yux&_q*K۟AiWmEsb{&ղ. 1pl^ ٓʧ?w\ស%*DYi37v<8Cĺ!Q8gΕ 2Neu>qi@e$DMsbBfהZ.†(:R"Y'OU" p`SfFyϺxy^<e6۔raD{s-(u8+YEh`dk_X=r@՞-x~scxqU.7g e2hHO10 v<L<>l)DWcضZQZ5}X VoAfrGgq "՘DgaSob-rҧ-f:x'Y]d]r|Hw}1$+K]_ *5 >r~\\pZN |f(i|J1 |1AHeE1kn6PAFԘuW4>?ޘ%_K:> Nba@01xoɣÔ}-wu#RRS4Гs}JY ܘv]S^|7nn+eu|93R'pӿ[~%@{rDMoP;ŨOmρڶCm=qwEߙ&xY~/C=##PSp63F2 hڼFಣ Z[|! Ds(|N`wk zjr흃3~}p| R/4oÉD#/~ uFsc;3@S'zx^w(6ohE({jGp=onCFC̳w VPk]Ŵ[NLgz18!q=p '[V;yFO"C8sE2摕yA:wv`Cd̴zGtZ괨oV w04z[c?; wyYS_co:"tP,k$QI=".6Ui0a>FCx~x}wo;W- u]F>i3Q=~(\zbQ}a |ٗ0H|j#}>xq9'uϒqqwzjLr-g0F]|V:XTZo4zT\Q!Y罃G+HHuH%Ԯ|dt04gދXޕY ɩ#F=r}p0۷{{Bd2 4xp+5(^d~v <ƚF7d}֗eA]"S.HYT_K_Ɠ6o{ou'~|ld9nWчC~Ǭ/eJ\ZMu-눘4R=`=;-}P^/=d$bCl6DJqiWC[.Nb?8Qi,oo%YLGH3W/Cv K=>^Z # }f ];^v'GU/QViocL{ԇ6t.Rk]M ΰ]=qW3+S7tG3$t9g}S9>VqJ/ec/?Vެ_HP-g7_A>3/W˟$fIz!3,XKxԚߦ(tS?/х X!VeP43a S癵YxYJwßGUjW'һ(ۤf:TS HgYݰpDuhSn Q'2DFL᪴>%WeD0>7_I!?1'?{4FP p()Tl]}ZxXd yeX ~kA{Ԭ3JB"0Ebxar1}^&v ȉ [P0;fjXM_s7ELA^G;C[ސAژ;躱eK뽃HܒM8\ۀa˺{fpo(z"|C۶wLoW_y|yp[ ~3@y$t~Ïgxehno%0f{bQښ/G6Dc`fE00m6~FDLxrF*r+z8;F߆ v٫Xt%j,]qk+^k1GqTfITa]y'<z/buec1泟 ٌz 4x+k2 p4 cUXl ,^5KqT/g6VKkzcydj0G.B+"̷9~EIHej5uH(1 Ў*')AOHP)\rb)M !D"Ctך3} iSW@> ?c{J OIoOdOofOѢ:S/T0կJ/я!dՇcIÄ́QnNATVO:CE$ G1`Vq1!5L=Gc7ec9W0A*zaIyRU.yb,枩ձw53X:RsʔW%#M-=;xFW!/d1zv* !⩰fnhۣC}ڡ_zUYOlcdc֬A V6$2^$ T8q6x f_xD٦~kzf'7 Џ kn0 15ۚW(&ozt3[l[^dM#*oɥ;kkTCT-dy ;/Q!*ߓLN_,ŅF H;>ŋOfɌJ StWGi$I テ`2'a?9.>g $`!9x~ G3Wc'~ !8݂}[fw=HO;˾ɊY5qX 쨩AMُ7/®QWhW+~LJ`D/LKVe"P@Wh Jǖ7&g=yEGY֮ãWYU2.E='0u*{DGdaes8Y{31ut2Cq: *W"'# +0rj1q%FcqJsr34@6wQJNdڪ /aQ<YL֓F{KYƀUq!|q!n+.c&V}6rd-c'䏃pTwhtf3""Uv5. ne &03[l"6'oYaN}9 T߭ f"","QF"5CPL~ԗ+]1$4opB k,y4rT_Q GhSQY& YroժU VqBV%Uojw"TD򙏛k>C)W{6z\qĤ㕬*Y' |oڮҷڽ_mA Wq .8R|,񚝥PAV&M'k-Gna=|C7?[l[^e~UA}OTjc\\zk>}.Q9FV^q֝cw^B Qiv>KT^~`<#Xe9yUHN 3iCV~"5+7ޗ`JHCiA|4˛t^#BbUE 0ZQ>1C0>t gxa 'Zc׮](*?Cgv! 6WfwmCը /ŢÌ={öͨ۷n?sXZpGL"Sf!w`݁Z"PދcpMPvcw>Bf\ Z[޸9Pk r1rj~S&ɥ2=+Ǐ?8YkoR8Wz]4Y%z~eT4ѻ3[/Qz',˻s;2LKC@q9SduuCMmΰ)XJ[`k^b0A=˸D6̆Y" <DT9TzGe))gzƚ:`@!LyUvWSbZ߯A52~נW %tyҟ3Bub깨dY O|꺛̔ՒڊEt.a@U喱#KW-#aGuϢ3^>:ƣ>ò-rxɎJVcssO u B U" Os03IH;Et˜F1n$8g4&6ò~[٧eW!`;UN1$Sև+,Y>\N Ĭ>\)sc,1=lJeRِ\,vRYTserQuve ==\ = =k)Ja#`U)m.JlҷϣWwM0 |}c7(%lEoVlO[L:_$ڜydnl[ly=o5Qy+^w^rtʮ-QIo@`Y(pA^{V%>1֔Ht>9$kwJ i!|ovʔ >ÄOmSF@8ڄyxc0F?{Ɵbl¡ʫI3?ϿnM"qr{?+x/<ч>YE"G0ɿŗ?xʰTB/~lysdLwjk(rKwbmr:V%nMX IC]]谀%f$eP},}0O;K~=*"YfiG 8W֣5զ^]zO3:}p*T+W '=>e'Q:fJIr'\A|:]֕a|"=MrA|hs?ߟH>g3"FL(h`ڦȘ+P*gXx&Q oƋ}va٭̗SQ GA4&OwWu䶗17(F1rƣ|,N,-~gK`dtG)}xHi=#3>1}^=@pw;ihU SW`֝^?QK7 s5ݒyi066soΔ*[l8E:͐;~2Τ>-9ah83gӟad~lb>T ]t,-$ur`FWߨKM4KCy<ui+M+ PS^,-׍nAPP_r>R6҇;MAn4(eʤu+lu]QTįY<2crTʃvտZ0U?*⻐\ Y"oqv h>^Usϴ1) uݪש*YǚP}w}%!iVLV:AJ)i 8?!2sWg[ٌE5  ļL[p8}9~{կ-Q5 5CUrzgXyoF|?WFU~9LEc?><9tl6s{%qQ'u>k@H,AKѺu٦8|q(ה7Y6>rӴ2kp:^:fH,ffJ,M[$QfAx3p>O0)H*Q""ti`'K3ӯDE>Eۊʇ!U7ڌ!ge[>teh掃K#\I0wGtvTzBqTiA0N[}YSyA2FFH`Aud}*BXVkZgK`ր[GVkc N,Y+*)jDk?o,ՠIϥ:S;_ezb+I #aEV?j,Lcn3~{,F³5ӛIWX+>H鸊 bf nP%'ڐѳP9&^?UԖ׌hi\uֹʩ_yW&1gϩ7Y:PD"bNY+?KR\2oO uO2I¾7DXDoSV|*FLO*bn_b=r)XAUze~ ,&<+QqxNÜd'%#yK66GJ~6fL{'Z<|˭W=_&V2@V{?=oǫhΚQ7KPtX_c3s@I!?28+Ay+DԹ@u!;V!.m+ǧ`ebӲQsG`b<.?w|w6H7+g0h & xnϼo@@,Zb.cf}13`:\g,/X;37wXl\[ϫ*;2˖Y9c~EL1+LGkꏭGP,BЯ!tT]izHax]wf9Fp!晉M5{,֤= VTc3ϚvT]虩=-9l"Սەd~̆z m}USֳQZi1&V֢QlwGyoIM9Vې!y]mC T1)cu?e-bT~׹!*M;~}ßݘn:E1kJǢv^ט{ˉʳ~wERH[GVTt]_[X+y~W𩴠Lci|xKڔ.vcF;!\sv]Ո' T""b0zG3a'~u \;А ~OM+BK hwK[P6$6zf$am7[M(|Xx xOǣ ^FvDݱP2q=1 <6u3o@Ç'v$a]wcIX{s &}vej^8[ސʺQ Rlj{ 9XY8xE 5~8ћ-XL_j;Ά;4xz2ɂg+=puۿG>},F[l[Y),l'ok0b,DB7FDiI0%/Ac\Df2O"r.&oƣ ca>XD4MVn C"Q4h ML/$"PhY*zZ"g 55W"Vd^aGET>~?xu Ȱһ"zE@ԚZ~E~,RQcАƊ doXU" үj`y`/?ӟ2Yޔ~F~Uw]bpEYw,0S[eWS6ԳUBo}gUY䲉ԍj8llM A<3ֳ)O&62sf~0]E=2O|Glzg b-b[,_%*)"*?5NT^De7,\~JkJˍZdZvDZT D\ Wx m:҃wϬdz4[$eN A/)o [BHZO3A|!=1'/>M(8LKnLFE <{ĺ,$e!3m Lx /L]F'?s)OӘJ"3ӐNvTct)[1% 'Os@pjVxǏ6 )$5 0 _ $|AIxp 0\8'p6F\Hh>㛢0z0_=ջHaa^h[JJ"!TZ/Gey%Lı桨k̳,RotƊ4$,{5<{Ւڀ5ԡc4xիXu6ajzs1l<:2ahmpǘYjoaepDy10N׉8WM>[B_#~eM!l[lyoLe7ZDMYcVSfJM6y=~oM:JszkE [kx;H'K->|jvUg:_kuІn|>2^d{B6?-혱* 8c~}|K P>A02_5;ؿq=W s/mGkKx~_;a+%j]GұcgG3}_ab}=k`^7qgW>s~9H#X Ě>o~3 >bb~7Y.[gsqrqXx<8z(ҳXF\n :G~v8]4 X\t758@D6H1F[Fl0xD :ۈXf6"ҿy9h,V[l[iE$`Le}G/q$Z7j-,Rb,̂6!vE<#GP6XVu}ioiE<&f]XS 7>6Qb1\5fN3^)b9A ')Mz4֡ft.JVn!dr ;RL^ i)2_8 փf9*Cuh@H0Y%1x\f2yQOP 0_" 1!O\DlD;[ݨ6DdԄENI'ul=ۊkꞵ)P X?X PnѴְg; ݡCb[頴 jjijZdy1cQb-o!*ϱ'*>f:I)J_LmOT <Iůi.m.8\^|~b"exO//yp1>|t:päu(oË;NaZ16CuZ`Bրp70b>!Ojz6!`.6`W0,YC-cUzݺNĸA%PA6p)&0#DT+zy%ًu=)OnB%0-|2>-4ly"@i@嘜kU)Ӄ$ǁ8Ɛ."*ܣN\#0{Ć  OfXX]?{|9*ĺ4 ϛl[l'%HWkh0;? .^38DzL$exl#E}+ 5͇݈C^6:PzAxJA8LI$U YҗnnEID3  d+ rÝW6pƊMeW*_hHu۹13&R1q\@'>0 `!MUt8aE*z! 306(7"::g0':ʰjaƛLjB҂"4-ڪ ST`g*,S" |'6덲-^U֫]i`5^3z' e8=DZڡoB08bH|='i|l рqURb-""]ˮOe7l2DLg|ocQi~7JTj﷛E%#"CEJ|z^\1l>5!L}bc6BwJ!kj1?XU(זV cVq=AπD%Y,X h"3-] LQU X"I0(E=]Ӡb1>ʹ).^Qkak"+Q h#0xx%S/k$ĢNnЂm DԖc|0vMbET*)ʀm7X#֓`:=mB/ލoF7 u2ַ1Xb-44kGd)MO.ApX0kIt$-='>Nk}ڥ?4NXzP$ִG`}ĕcqy/Bfid\- rϲRa7䉉$;`EŌ"E'N<s1֫7[e!>NxY EK׏ STaV" !.1I,a V5Qi֖aX[MtDd ɢR۴/ۈuf- .RTSeDkY~2]7}P|zcg&c[l[z+!ߘr~\~n+N}JA mJAMy˨YM(l6"渭qۚQc GAl(95tM#'1'bnh@QB`YV Pj&<7]Bak ) nሮ`/v8-.kPL{-ԗ 2a5 d:!G}FVfJ-oXIs)5(ӵ֠MϘ??ÈJJOm7_#"k#ܟߚX_"C{{E /YTb-B&2@O"6~bJERr,[EG!Bd憘jT9:rqį^NIPÐE^o&#.n V߀̝Gq{BZ>ب 'h<~7w% es7-uL嫱zJ83#> us"k]ql4cdmI?qa(Hw%v^z8NS}ovh#:}ė-BL'e5񷢢קbպlXV#Q}v>fflې6Ԋap"&Lz*"nDB"ףpVKچ]N?ͅ ->\AO#vo-DUu3"E3 lg0*tZFdj-b[+Du[sǦ}gm?$*ϻNk+-?DT8GCET Lߛ5I\U_?1USi՟8]6S="D-N& k=ן(Y [aeq)uh Зrkd-f='kv=]zq@+=& klK,60YP!TW^"WYYj*E:Q=WVrUVly#'M=ƉG #-ǯ˩ƯaD8;d,1D{6"6@LUqW$ U5D@H>9B4ࣲDu?:"lFTa9sݺ$BZ\CaXEb*\ G}QSX7GȰ[֝jZ_Iϰe85q#{ o9YiPzdf!Q!UYdN?Qeה+W. AHxHD ƉqBrycu9~y8+ǏRkܥ7Ĵ3v8?Xw }Ɉ' GGў@dV{9 5D,  xW||#&*m[^1OiZ;cG{'/i1^Dݍ]T{34PDQ'EQpj: ~ԫޚh 1?1_7ى pPգk^Gwb\s#:󰧱 'kdk]#vFhi:WVk.f@-Xh9-*A$˷` יJ{~%*}غ9 ZYcL=]۱qszD.T'FJCȃV壨:,(n%շ;ЀݹX! ~ Dw!,X>iqzHp$11(wcÊ9|$m=c ۢIMU8Y8^q[MFmܽX{ kx3d(5( FDžYوm#- HM'<1xA5u MnI4Mfg"3FT[l[Z"!a_t.]6ӹܐ-k~fQ6}ֽeDWl9QDEe3ss>i\9$:̂^svV[R,,wvڒid gEtzMѢXhi(QT~7pB< ]U$6V%( #VvQYG#cT[ùr߲$Pek2y3j"5ّ3ax]y4Q22֑(X¬+d7EHZIqr"k/Kt"*82fY}=p/PU?Yh:9CK]pbCNz#ֳ𝜂M9LsjrVJڰ4cX>9ؙkRɏkDl[lMVtz{c\S14bd #gEDGmۑ ^S8UR]98p3~G g89qTmGZr5N OX,UݻaWe^.$D=hٗĭ89 z:GVj4nIJN<29:(]Bp^tۋQW hΈ>ׅFj߇ P4FN.Ŏ<{NKܺ{gc^hsŨ/ge"2JoxS}G{N Ԏ˜ŒM8}M=ksNӉpMߋ*ҷŠ8gfۋ=˰(? gEN;YyyG|pxرaΥX4At qOVOpZOhio0xC_[)f,Dbj4b> 'r |f !俺Y;>jfTd CEow;N {IZu {wtmIoڙ-b-M>,Q~,QZ\1}c$ET^5*o/4] sr7ߥqEsQ'E : =x.;^uOuRI% ^'t 1{HO ]bbl6dBd g[zPT%܍/*޷ /)w`ˁױňu$ zeĺW!20R;,2/% Dcxao{3JYyj˚+b-H-Iw/Z<6F SQbN'QV-vӿ>F}h޽ա?d,ע<{ш`=d8caꨈύ~ #QV`2S}{,ԴfЅZPWB4S2@c=4LIOl v/dHk7`޽ܵlQ}fcMA S  طd6JF@BvZ5:F8+aK,TQTO9GPR9` ߉ p/W 1D  :Ѽ6bЅh6$-ށg0 N?g|#v=.Fp T!{\iރ-˓YF*DRz FU&;X4J␝^ :pϴv4n*E0\CGtE0p)-JS0kr*4$6ÖY0)6 lލMf`O'bLeb(y%pJVfa_ܴMX4iE?0Ẋe̜ļ<36nCN;k V.[9cKn HMۜ'b-5aI=lJ*ET^ݍ/Ŀ~u .Q9fQ~FT;ҳS߮Qt7ޛv.YOT 4Cӻseau+1o~!7x!!0u%3ʹg)%GÉ xbtZ] $ WaT#=Q/ l9f>AlzfvuP*>c}sp#m{ kB$dn݅ U4:S!v78^.Oƴ|4܄bix~L{jRucӀ][ZC#pƪgH=/م%8k}5gcuUW^EJ4 n],[K>o|wn}5z?v?Io[pbDW"|z5чj^a?7 Ol[lh8JA}qE =!pd$Di˺BBT6 kQ_aa \.Te$ p'1W@|۱-k ⶖK]9HK)kPO<7ӯfٜ~_\jsW>`ZZ(GqzG6^Wb+3 `#tuwVV`_ \3+E; .5v 붡uݟ%DӃm(l5S~";죽, nT6ԁg"oZAVM5fe<4aOI1F $7MXS [zL]uA88نB@i Ded%ؚW&E.LJ@R%RZsz$$bV477Yգ{Er!#i 5)ݣ ػu5>33WƲwrGK0hW`gZX`/NcSm@qz7QجsZ d֠* nM<~x8N '%H(X3i^>-E/cXS"0N5b%'Y#7tėZ[lŖ#$\~F_"*5")mҸnfC P]!5F~E\@FocIiD-Xy+JoPkjr3ܷNB-عnҳwA¶v|D"P9IqxdΡLEo'`DdVT#8o*wwt )L$2CaiZG.ۊWބCW0q8cOh(b:4Bce)&B}X$*RW}bؔW}g>=R.D}Ȝ [i7U`3?3Af[lJQ/_Y5FMTM5rJҐ>jX̫Y>H k֨"ˣKkіD-3q]|oPҽO[7#x?nIbg^E{- <(5<`MwFYXh3yI D-rԒ,(J-I$JE]ncPlYGNwc(G(GۍX. 5=p4?2BP=^:,612N>y+QN+{k¦A{^}hf,*w zP0=҉SU۰zi2v WuBi|w%.Dgb*nn3:v!A8NX)+ұh jj*Q(lǙ6 +3wS/d MhܵO3̡*BZo@kO7<'*ۏY9(I+CCMy/:A۴Ot{(_ 8ZW 38 ץ {jvagQr7桦XEQW[XC}A+ՃXt?Nyj@1"\8ȼ*Wj3.݁"Qh:rPZ}H]_C<ӎ#Pch.ELmBW84cִ\$!iU51֬hAAl݃~B@5%kUbЁ ) z3*Z #=(߈ܝ5wadnڎ!Cȭ@Wz5vG>9e ]k?{v֢ͣY~ 6`粙O݇pze"=0^= &#k. Ҽ i`XCd}HiX0EL1/2 wSsĈ_7z˰rt: R}LgZY8/NYR0M[vc%8ekѼw=ΙY _]81J=SX:wϘM": _#)Crng|&q Qp:a+qbzv?vQkjQY9(Va ^%Xf7wavgXUhc]>MvNQ_rtxiEޜЍN!oZaK1g6NٶC1tb׆$8ԈnۅP>P.gcܹؐQ>Q{7n}'$tMԗü9&3`[T9&j76Jܳ9jܚz^*-B획p\=y"]a"LG&L(Sg<3^J[lZOgfԒR "j;~)Q>08"frbF'ieAuQf,M:ƒHXQ|yaEq vxKv6K܈[! 2c.%5, EF=DoL_2S 9d=ЌifO~fs,٨10uȲ|bZscvi7b_?^dzf4O]AymU0<90. DVe45p1[d0YȲtzAk k֚g֣dS"<Xu7g ؍6j[ nړ nO1bn6&CS% h~Ddgj3)Yӳ M|zjL;631֡reK?3Yc-b)"*ggxl8VHT*ىJ揀LR OexhAx߈7+ʰp?@w @Mѐ$`ŖDb { |s. =˸yIѼ uCg/ u !cà3҉hd _$ۿ,YbU-b&GX+i]oGC"=D aCQD #k>UJӯkca\+"K8,"Xd @qʯ̀xFG14WOkET2Ҥw+19& ^o@}d#?B?s~Ed`FW̲XrK?⃤ ĸu>J 1OA]qY!eVɗE^?鳼5H|>G?OX L#YEE5 e)rAE%O"?[UmuC e KU9զyͼjf{hSyXfʺi>za8Ԧbgc"O|&D};g^Sߨ^3DX=Å(o8+9Sv]QQb-a>#*E(?&߸;'??].h|"X܄h"B?@ơ61o7^߂[W5խyu;n^x2kzHlx,kJBTJQ-ƭ7S}ޤOFCse,J.pZJ!P!|&)@0 h 4 tYG@&\ ZCI ao ko Vt m*`aO(ךԝ@IPal1:Sq1ES%+%(RNV*S#b)~Vܺ+/ۉ_[[S \hqqD l7llo<,6WX׌UT(qrܩ<_A5"ȯٌ9UȬM@Us z;;S[mˀ# Ϥݑljl|| D1~L>Ɖ+,٨$,Ϻ&-b-b-b-9`8!GTD\r&\zC .5R7CTޚo冨&*/xRԡDƉ|Ӣ:4M!UuWpk\7}sc'Ѝۖczv=(,!W:Zģ9v4MDoQ&& as2!!!Qd85#Ob"#t̏,65*&DЯ+5Stwe,23pg MV^5ph_ :p11LPiHTc ӟ0S=̫O,r[P4!EpiJI87q'? //N'_9i]ם@03/R DL[?ښf;jLHtZ_h ~dS;f'r 4hy,SCLɁ?Xw~.8::jb-b-b-bp,_ */zHTޔYyvH<\~8Q|s!$L\DȒ1'"IYnfwP1WvWk͍uM;^ߎֵ0i)Dx3jGkAuƩlQ/"؟zko2SL˸0%~NttCѢCވBHSr!Y2*nhCDb4LL3̗!RF̊8gM6J&uBuH|qLy`. V~okπ7b)Hbf%cĵ6u76VtQl<aC82"rMz]*"&%+[SՆ.d"xNugsе Л+[T0VJӴ&Ͷ*߬ŖQt-I5D/ےڎKQz#rb-b-b-b˅#"W^#*5=뭩ߗjʛ[q9ݸ51Q6LJÄĎ(}@"xd1вʡvyyCv~ܚЇq>]Sh)u$CZQ<EfԍH)6Hz<#. W@guopߙLENQYZ.@<Nwa,[;v,I)b\o6IΈPTgk5;۲~34ipk_K ¼c^b-b-b-b[#ؾFTjlD~_vc.a.Q֔ ֭ttAi),]6QO@Tʄ+,E("[ĒȊZP;xoӑ\$ aܴ7uᦥx ,|R\UVe1EKG56d.s+Z|pFGn߆MS_wҘCхnck7>~ƩÌSIb ļ,#QY aɹVt($X@OgYE|hɀ,'yюr*e%|ĴjeK1#u8:dB,i]N^%\gCh8݆KNڤTN؂b477RݫY񊨔{S~+"&1˺VlkY"oHJe2Ö#Zĸf ei-b-b-b-plJT4{=.>ߔoԎ4Vg~]DOTi]GT3ܟ!Qd饓ef5+9pnXp }~E;nMNŬdcA?+~t֤WazId.O N0! j޴x 1.$~rM[?W*BEp2w222Qr2Hd2$hiG}U&f' jE/ qtLnF_ɜN:E* gCKB, G:f?t?}˷pMODrC^J(ӟÔnm=iH,z+ywlr~17i8Ѹg#^}V|ǭ0-"Xt F4xi쫬Ɩ"IJŪ6q V%!%-555ƪrܼ7Ƹ^|=~_]z O1K mBb!+"`HP3rG2^S1QuQu>^ĢÌ|w)<:V}~m|586o<ܞ^KG`+vdL{cvwD{ې22a Vm†- '000`I:*9onX߈|WGMGYo:xZ}fzn`n%~ˣz;Gк? so% /==soÙ`u=xo᥍QЋW_( "MV4"qrQqrQu%<>X5iHʣpS%ǏGd+>ۭڳbۭo D6""{#bZZ"|Eg Poye14{i T^cڵ^poEDe)*3>ۼ٤\Tـojŕ31lv#oNקe9%(;)dY1<"6je}Tpĩ"q aGh-⫸O A$r֎ðy=RUhЁMzqyѐr?89QqoS_O0uvs:To~5Dl'Rn4Q7p뻱A2*J'^S9Աesw{_Fs,S{%nio!ZGၩ8,D!:]f#\?e w"bӋƗ3'1uSU9YZUرg?q$H:tqwG$+g8֔w#hq:: 8t-߶@LD# jh7¹_^:U^ X|8+Tp2,ι|r`׏ *zݒ. I!G޺($+s yQf{F݋ȺymPEQ{]*ߜ~PN%>X{|Sp&ϒulǙ%e7#Ja&M]|OS\ KI|{_DŽK\ $MX OLPϋi{D$yqH>q@vSNIY6I+QIHgYqsMx ,/.>l0_sȒ/XrB9z!G.GNœȥ=pM)K }6O[Eя"\c6/xRo$!y|G[ ~怞D=a܀~b*߲91?*?MQEyKu)_\H G.ŐYNgXbٚ+?$TʃH<@L<sy{0j|Z\3Q㛳[p\=WL;k-aW}"<ĥ_wGD~6澈8?+ڗ >> 9R>;ƒk>%|߿F/.;!q"Q[މ_|.LF8$Us{& ^\Z_x Œ (߯Eykb–c]GF8djT7W}KQTNq>̽/ \7Iymdz/ _ F.! ߄hYjjknñ&7b-Xy9bS&Nsc~~Ok>Z*JEбVy[c|?S?PPSV˜WŜBg--{-hd9dzOϣabltCb˼8U}m ,݂&yP"[zRuJwl¼u YH(^z SSrp;:AU#sds=;-#2Rk,Zc/bE,tsRha/Xg"L5/rmFpbN} /<&ec}e7܁+yfZ?yGʫ_ZT6uX_k/>^xs6WP\g8g&$דׂ"رZ*s\r>,yf4THkLD+xeZEvd#{,dFu<.keJolUhZJR 819Y8<xuXPԅRrPr;NBtыp=ZΎ) dZ9%EONF5*FxuJ6Tˑ$Œ}J7ӗ:a8d<+>{tST"-% [RIww|wِ⫉%LEQ-D3FLMr F:2/!T@~ʤ!f} O$TXB%+Jas(y̖W,C&*;j|o~\6 Y+63pV\z5F/Swc=$JqإG,+~1vߎK,d/YmCJjۺ+d"7m)*AeOTMVtMM8zp' v:AܒBGQvVh\`B4`o8܂0Bؒ-QԔ,ێڋ˰"3+yE(%~(Da^2Ɗu(ݸz\ůq;phZ2\l*ǶN=Djv6M:닋_l?𥭯%ˤcشy3pFcܧzړi$N. ;ܥ[x֠Nυ9tgoeo qpIqgĒl&SK}P Q Hp=6bXlb/~- %w#>G;cQXP$ybמ=(!gWfdo{A[8r?rw?fMG]س{oAQ ]Mh#CiۆizfK}Sxr_< Q/bJw#B 2aknT^䎟 {QfOOҧHq4yX:wQ`_`&c/)T31#O&Kz|)j*(o wywKrs0 *cTrDEB#Twv Ycɰ'ß,ﭬZg25N$8!%,/͎ao}^]yW'ƕ񍩍0r^< EMMO?%mhWmEEX-g#Hڏ󑚺mntd݅ GZ,>9Ұp7Nȵ\cjS jޏ}21ul7Kv6v/5Řw+39޶Uma%>oEk-1S]cJ嘨fRfǚq(= qK*^_aBm0Ocݞ&r8AVnI|{+irdO5e8xt<Ľn'_-y{{`>;~/*CR癗qX`[^-Ƕ!f;Iؼ93JpYgq),'(w(X߮Pt1* `NîtN->",of}⿑4߁P߬*y [&ieIэnrx ^ۃo݃oNhq̈́?Ĺ Gqy[y1x9nMi=EV鄘_n<!)[)-U4t]g3T8@q Y').2=o͚aᒹdx(M"9q'f rHK%e'K\3IJJFR nƔK ┳+QbzhQ\ #%t8·D5ֻu'\[[dd%'L.߭[RǎׯB[z?hxXM3%m"5G0ElAǍSo|z?.u ^+4QEQ΀%yFQ/{ L|y8wj ]9Xr kA/Se\kD#Oua'VEM؞%GѰwCyCD|C9+ Xb&mzDxyw6:>ożWf"/g+𮜿q(Tҏ*@ 9r7`HjkN-ރPv,x%یfm$0mŽ;sG;ˆ_3`ס,_~gaݮٗ{=(ݶKKG)`gDʵlt%u.݈vEEbwN,_isSK 1 {QVv=?x=lWʃU{G[ -&?^5EQM n:0Nxa@G[\LB㔳u$ؓ ݒ$"V#t~4FlMF q.9N%[[J8" ak88[ A IQɛjtp?`iDYIf^ىJz]<_KOcwR\̅8H<#42o6")pqؾutkx%=:Ga$ʾu1yF)a变 r2Nr=|7GW:'e:½p}Ub_}?\Lt;^{lL8 މT>K` ~\yߓϞ9v3#? TTEyCg}+99l"f|p@8M9k~n3u P tGo'2?qF{ 3V"gԊoX|l'Po֭ǪgX$%Qc'v7";#!ɳ4S+6.ݝrTArf*}-fh@ݱ*ݺ )kvM|8OH<Cf>QуxfNY5tZ\SEÕHy=KG zaً x1_-98΂M?7=OvTh ,LÚu9#G'"pJRhJ:ݾs|K61C>XǼW^yc<Gq"3'ў8BM!.[y/#3o zLkny ,ǭhLCP)~^1'9X0sWb՜E(TFٖGP2,3͈DZѕ?P[}JjlǃYJzܒgmCj-L8d/ջU8fExnEfXy1f{>IƆ8ݝK0iV>Ҍ}˰ibd8j|EXeˑ։C83O=r?"'aKTʳ֖()Xhob۬\tG:8?zk 1OOcs]fakۆuj:*c4D>FSogE.7]0Μ}?qdz`ɖ.}AV]]n+A^*aۚ4,0({"ez$}|BC>Z䎙8H<>;ZP 5 1{to߀U/Nƺ=CŮ%XRн/c|twHڌ;CՁ{qpV/c`(jk/̻ ߇W+~)ˬ(5'-+PٷPݛ-*EeBIFam gVzކPyPkB%tNRRQ蹙 #NK e1&NqgOl2iHB1op&d B#ǢJ/~ rI:Bʚ(S8ӛ7"b4*e'YP[ soѹ-aD##[bZ̗떣92riP-qu13UCL`x.f qa:u`OقU&Q@XB*%\I1ig)y, vH`5E1,r|)Fn,Fn7mW ǫ7::~x?Hɭu=ZFõ9N;ȷ ҍ"% ;阕( pm>ȆbiAܗ0%3m-9p*"oQ `ftI2-K #jDӮ|Lym91Wqe/܁#1mRk@kk,Ǫ4m7<;+bdl2;XyۑW&!twtk*̙0 w~6lC6"{ QH Ɨ'aFv!uBhچ9ϏAAU;cyr(>}kHьXf#/{tc=^1 ؼ`$nE3NHm:օH- asf:S Gbڟ`oًSO?'x UM (K.N,}iQ#Zм?cnt:Q`sdVJ,Vpեdz1=5ؑTVv-&<}I</Ww/Ŋ_ em mf\L$i(Ys>[Lb 1*Sd:Y t(P&}v}i <%R&0.IᒴPنKRZ{ʦP9=N*1*u3XV$W1.^RT=xr=NKS8\7~t !B3tL&Re-iq)1e?#WbS0 dsɴ3Dn|H,;%>hmSf7&ŃmǤ5ØxzZ_z7aJyĪܰx|oq͚O+>?1\.}a,DO:u$)s*/^ A \Я08Ѝ((ܐxk˳Ɍg_3]@S!lO_e8ta:UbXQڌc=qyť6lƮ hOj 릌 c^)/c/GY[Pu"$ysH(T4/@mG+v 20m^c}éێ-kWaΆ#fh1 7aá($ؑ5KaW'p*aCq%saҟ_Ń'a”)1e2.<,+*G[ЅdCh G4DXʐ_y LU|WH_`,d-݌=rkP%ՃPk j‰=X3 TƁ}qX="Q?*X}Oͨ?1Vsh;Tm9ۅcf`rhľ2sXl_KbRYI%E[Qr Bii,җbu>TE\׋NcrȪD[(rcB8{ߧ**?Py30yf|A5e,S1w23Έ<1 )Pr"1hJ ZyYg;;B֔f%g+T5e >6*P g+QOc+X(%z\O.RKྼ'122Pq64%?w0l\+\y [O|" nĪE#.' /W6` gb_!p ( a_`d 3vŎġ|̛C={|%iӎ[9m A#)1X=h[sWpk3[q8XS *%8[;8\yiX4 9)+ &a=]ހ 򱷮ʹx1t [W]~;N/DEXc됚 ֡âo9VTDشE˰,}.~~,6FC7':sܭj 25UbեXZur:{m LYz^/u۰FΩr[z (Θ՛9?״ǜyXQQTYʹ'!cfhGcF+ȯ նвOSR0q~ĂY`if])rӋ?'PBv!7(b˛%󑑒oZTr^êhT̙uuU9ऒ̇''dxG5z vG|! Յ+XSqMQ oE5X5w!XK]:T ^&q cjDLۛÈP˺Ip`E-`Zȕg$[*(oy4wJ EORM=%T^*)R;)TRPicSX! GQR-֌0~rtw㠋BX(aB#}jnc}=k7v&df#s}>JpR=:(ĊM(ZW¢L-Æy޲;}X+7p<ץ#5{5Es]=2tF٪E>iɳۋQ)9P:>{ Dž7G-u7Wv9kע(c!2S֠#P[R hv|-D(.RVmQ#T6`ɸq+؉#]lBO[9֧NŢX/: kbūS.VK2^چ[iB,4s6zl͘)sӑ|96gnlkFsh/m㓙t)̚rmEQ#TP9芹BU-*{~+T%})Wr 3ݴs)Tf~ʷL!2MK }+ʻA%דwEW8|]'Ŕ)cVZX=+c!= ҋGfb4u:&i`~lhAFΘc)ÈwTbظ=G̓g܌0if> Scn]iiۍ-i<=h)Ĥis1gB,^KsWxF?+^KaԱ>e=_ 3w_ZCK?b*}ĵ0~Q-EQļ؛ )*{[T:]#TwPy >Z_1FaȌۺ2))ʻI.&דwG4?˗,?7e݄Qc䪯3/jgU_İ%_w_kn4~j_Cvv݆ѧаD&xl@5Y 7ԯ8MJEQ^\l#%Zdó,l݇a \G('@oc{|~)$+O'v=IWKO'BOc9VL܄Bg&&.$'$%ZL< 7/#F`q)yfA,AJO~o?#iX>?*&v-!{ԄBvH˳P#e21ٙgpF GIx̎Z8R&N(WEMpmٖsKwdOk5sATEA)KrE;o1kC)BI=0:'QےzgYqS5dG]k#8ebr-IOj$.q9pɳlDlr/(*Ⱥh 'w?뗔=1-;{R%CN $u3sRܰc9GҖv&Jnq%}\*(oؙB}s*>G3aY<[\ywa{JEYbR & _M;5ʼ3~#Si4{"o[8z6Nc^p+[җVq[Ŷrr_^8_Ap (>8s|W]b(. ',q=C8-GDLJ%bP2ډذ%[܀L@)Qd?Ot<٦Eo!/*e墸i*7$~ȶTbA5<HzOJa[R8ۏ–sdiD/3A3G3ݥ,wqNv™2EG)g(Q /喇wB`ȉQ|1IG[d²~ ϶xd$^%ȆmBvCܖSXi;yY?9ǝFnhe {,?"1גs' ːE/גT Ȓ2^w1O>'pȱ} *):zi$M)+Rnr>& %W_az,???([y6Be߮ߜLg5bYb9X_29F@L' g kR8Rw ֱċQb=|WZT2/I ɋYP RoW'_̹_ |wx>o86ͻM7&M[~⟡e/о&qfkűN:[pyzto؀~d*T*"o'~Ho!?"{bl)Qpd=*)xIgAH |ų>ӧ%mLQCK9;I`Z|AXw D^ 8LwpyKxLX |'֡@&;#9E1yq?xQ=Iߘgj{j$ېlr[[tTQ "ҳܖn|GXn c6 `)K B(."v7"͗&ZAJPĵ O΍-feN'naw(%]LFKfx$9/['ut|dd9M9ցěܸ=i09}I‹XEQEyCj)xc|<(PcwSnw(Zz )Ptgښ3]MALXlq]q&(ybȳJ:/93E8gKK4" OQ%M79FBX@Iq&dbM\cZ|.&3&TaeY)3E!a%= bU$s.o\kD% ̼ /sK9&?^{1$><4 u7/uǤi>R%3;i|+#Fd<9NrۓƛoDZ-s*ȄUTEy;ߝb}(SB`#T*_1*3CNs Jl)lOf'O*OuOc|N^N&֭]7acQ  `m؀lzݿt܉@&ibtb;%c}#0* #:q8 t&짳mIH" ef1˂q=$) p-OF'3:Բd>:Loa&'~j,YJI?r^sr|WJ'r)BF%[VJ1ݜ_v a9fK-md$Uo"M~F俩b2g|2`&]Də7:s0&KCm^#̥fU9dlodSʜhYbd%ABck Y禢(yc)ߝj_bb'a8~gx_le(<_YL'S ۜyȂ~@юaYx_l'L:1>AmF58}<4z# gUƷ1&iN%`DD#ŘKc.10&[<1yz2/pcl3Mʫl%gd=m6̊bu4)`KT3Ve >B%^)BIE9qhYe{!wy>Pw8(qy֋sgiH8~w8g4/r,-wYg8!/bDzԜ92&" _eSjDgCM 5?:Zq-K\W]7rҗּHf@J+$`%).)_k㎔ҡ~$ :b/%g<@)of0/GߠpDy_}3i^%'*EQEQEQEy ̻|B\:\siQ9,۴L<9N%[UW~Pٟ!TޢB T75;chkK \;Pn46ޭXچFPRdW@N:sliDBϊ!#oG4Fs ,%I+Iڀ]p(NJb'Rv1-9'ߘ@|9E7K/<%Iw㉮Ef.YT#{%=ˆ{ጏl9'l˱)Z:A=f\)8JX-Lx)zDU2D~t)~+0r͒(FFBtⓔ/= (n5Ec (((wv*ގPI3be_ .Vd.DZz#5b Wv!nlĆ(vۅfc;eN aQ;ᘮ$zp;MoR.ŧ?W9Ӷ#AMHB!v`fd 2rSu9IϨbF$hSJ!t\))Nry`ZjbQ NreҤl[<`>-9)1ϱR>yhq3%#ypAoVdsʄ($L(CA&l^.$M>p_߉EQEQEQEy0*TF0F<oBnEqN?0vDQǏGuTةQS[YrFēD=0&0vLXb5Vwߎ1<ёQ97|$B2[ёP6#$K:݀m>HM%GL܂FW0B&{%鰛8Q+w3h]FHJЛA{Oa%c ,5]C1ؒ_Ԥ7q{HZT&Ĥ~_MS [r6^9)شc7Z!3a}I o((((U\ʳ*)L&dk~o )iKp1vܷKm@E}d} 1QwNΎ(AV;uDk;k 0㰍;8kƏn}~L@aR*1QF̋FtrK'e#Hb"O1nQ+1L̸%H a ;,IYp3g# qV 聙=LBlDkN~)t&ʈ\p=}n16tHz7Y-8C4o%Tcr((scM߸EY*KؼmOI\ \QEQEQEQs%T)U4_!*ӗdQ:Aξ(6alIGZ{ {:0q_ŠfD- DݑjlD"&3SLG/9ZpnO~EvUb%X4}"O2XN6B{h>YS1uL̞6>Ԅd6Tvp܈[(z"a4Whf.vځ̙4髊QVs'c 9 Ǿ8\N qi2_xN ^]ŅH̩ӱ sV$ -xtjY+\+`̩>c2cw7*c,C[GQy8oE阾` f,\)saIV.O})UTEQEQEQ* bW{#TUR'[S> BEKQW_mXWׁuXuu]Xs55fb6*Ku{ qX4Qƨ}_B^J<{yq㳱X#2q۠{OK/Qg#Z ԧ+~$^핋/G~#m Upa")RZJo߁%Z3e`4L3ePYYiɾ'ӠcT*(((*X*ga IK&7Fe ԟ“Y3v3*3ҩG 5׉{[.̛Gp۫j ؙ9w^z=s`0C(Ϝ-^QT휋[x.w7v<ɘ:o"ڏ ;c⯧"cQď,G3_|q)~p3T: ZlDzx=昘r ę-*Be$Œ,\S0ua:dc4L98\s1Kg<[Z2MeuEQEQEQEQCT|B#T&P0#G* E#졵EO8c#C.#qfu(Q|PtpbrZȘ[/ڰ|ή݆ys1;0+9pcAJ:='` ăY< ~w2l9)q#=Fލr}0㧷?.Ī-[\⨔a95L/̃c~_"Ϗ .q: ^J?q8n9v-/ y|>uM۞1||l>kIQLϖkQ^{rW`|%8ҲpX|ǣLW?c~*(((ʀBʷi'[Maoe2B$,%i8݈/n Py9Pxq:N?ʪjlTMm,Y1{S7BmOJ6笡B JVpeYgnU1۞[v3Obe#ޏmq.#e(b!ĸ;@= ҧpUucԆqݍxX}/8arN| {Dp2ۆ) O>8zuxqy[}~T4AW}.<2Pg8?̉gn" 0GดӶ ݥX?^G}Ť`\q%eG沽IsS0uAY_W\?4]EQEQEQ}ୄ˦c姏Qyd:Bᧄ!#Qk0ڵ[>@B1#VF1+3{t ]BXR\+T;oE ĉhnmGMQ=z ' &ԒVﳱ2N+)SF*!E9?cJkPY?s;fW9hw*l^<Fqclnô_݁PU<?qۂrh8G'Ac\Tp(]2w_z#XhK07ѧSPY)f-᚝]{>$EKn} R }jK07- vE$7qK ˊ(((ǜPyso=*G% U|'Bڢ3px-74P-*ס a;WM=^bJjY݅IOBmM-5[ETځpZl|  ??gzc𘄗{s^⟟#>;Ltݨ6S#x饗1u=0>sۋxG/<K[rёPr #Vap߰?`1sK1w{`u};ڏŒۿxK/is7ZNdAWa TذlM/#zK no X\\i ^{e<~MxiH=6NR\LZr%Ŗmފ(W kE>e(l Tdɥ (((>qBeE"Ӛ/J#+UL;*1*m,Z4GՠQl۹;vݻ`91O|/3p%N먮 #S]>w>_?_A[\]qyAFywn-zv3,~osm?cr˱ŁP??~'c]/"}ZliCvß[݀6B4alicg }N>[݄3^+JѶ~rE}HmA<̺in #QFs~TJ:'ހ_:`\J j؇C@R\2ii===زu+XUD`jm)AOu|iJEQEQEQEpPy\ z)*9>'96 }C&Tr\9gF$jlkGs[:*]h +Ǝnuu'ԉ3ϊHʆ9QFwa.,9;. uD*slȎ-K1ϒ4v2$wL|Xr $ai)~A@=4WҐr;qGOrłlQxy?.$@h=8XT]6I30Lk [QRhLZkk+.]CKcʵ8r {UTEQEQEQy=Oh"g#TB(*>t-*̟cP{/r-U˰bRZs 2XL7oq1e$TTJ[FoPRA'cF (8E(Me Gr^N#& ߉ GDTV@`HxWd⒀dH|S:7WrԈ B|Lt((l/a؀E7=9'X9WG1Nc:[BEMXa")(rzM<)@RvxľP((((zBcPy:\4?ZT:5{ꎜ@4n!  #Agg¡n{e;N^Be!DY=9rܗ})>F&δe|7xߴ4:'#焘i|m9_e>[S՟K-yPkpi89낄aYO?𼓢br2QtL㒂ceb4\O.UTEQEQEQ z.bo.TrJ 'Oq0g<-Y\dge###Ӭgf#3;Yd}d”HMM˯JD| KYhq K· #%Z+ZJi4aa1mX.8(R/%ہ% IڒH|6i6A GdKXvy.r I)~)϶R._0]!=6e q)=?[J:ZS(,$+NrϏMr[VL\}xzrB(((Osy_{t{x6d:"#Tfsho*4yP>UlW)v@ؾm;JwaRdfc[c"l-َm[&[9Z\D:g$1v`(:bVRIT8>#R*7EBv w,ڎYw%VIVizQXA qOIY$ux,YVV%}I3%>[tR $~L%P5$sLvQx&y.stlb QKh SH! )$rid 6ް8Ir_r=TRQEQEQEQ'빼PyspU *ec<$g>ZT'8/vR.T.%i8-!T.J Fͨǧ&6SE5α":MfLN}liH1!:&F:lhAS=e#eBFcxNK>ޘ#M%X檱H!6%P&14ib#[OʆIeIiD0'Uݶ#2z֗ccf{3QddVfC"Qe HFpu IrnvC},Pٻp (((20l$&|#Tef\AF\"òrTzR̉⯶\Z*#.PكK2qIz*/Ik%)xq3.^Ԅ6'pj||v >6(l0EQRQEQEQEQ'J6Tc#As?J?\6l*]H,N`&S,o TPB (TTEQEQEQy= x}JQ*ߤX9\/Ad`< ~Xvzo*UT (((2y+Tvc?LʑgQٟv?8B XTTEQEQEQFR<"}ZT*{ǨdoCI;)T#'krNӯx.MJEP((((PyZoqicTz1\!Ö`0NsCFeV`Uzm *T*DJEQEQEQE`SPL )gbI2 C-a2'גq^`"ppTFI Q ,ddKI@[ٌFV$EIG{4$'A\d@ X#yM% Ţ8^])ll .K_q=eۖ,Q%Fy;$ٛ&XߠfכuV$ozm ͻ(((({ysZʟ#OfS~: ^A;9ؠ^K=x Y_hQ9r*8re)V~ZT&ɤuЀ7b˖-(,܄\  Qd-FaMRuSٲś7pS:٨(, s%_ .$oGT*ko0Q_R pp(Px%HQI+,eOhzL@ lK֩SӋ~cA5' RVϖ:r| R8KA6>wSXτC|:l̒O]]V^ qǖC.V:Vb['۲pm5Vz͇(>C66P ۱cN#,5%[]i/ ?a p~3bjQtZ]z9!,١P&£ Oy=܏<0<_yr^Mb>w> 오%}QIb*SiƌhHDM{N>])TRnFZV5d+$]EQEQEQ}l+zk(T.IB%gN CG YB<)VZ IQIjjjl2XT{q2=<94xk;ey"ϷGY7x^ZwNnje l1ɘ.9fsвEhq\y޽h\[Gi."1:X)83c]CJt~fKKEQEQEQEQށPwo#T\vj"#V&ƨ2rXBr*y?ᆗF݌ Cf(ӿnCiU{`Vx.N&^s+ƥ4\qWF/y[M/4>q^=v.| ~SK.?~9PjӳR9'R"muv@e%v@ƭ$aŘ մLY]v}agoTEQEQEQ=otB%*iJ Q+XҒGu`9FE 1&#׬Ī={vջuÞF{=j֦:c.vEY#L:^SDA vf} f8Dѱea "v5x1g*:{pp<~w(,ބ 7b*ǂGounƆho[㿟eFó_ Zcu||,/(R}yz۳VpS6XS'MC(ܲF|I[/HtVw}6Jv] yX鹘LK9`k.;р&-Y)RZ՛((((oS|1*?8B%͈~qkQ(ВfEO}^3I

>vŽݥf\HNRñ"9$NJje~vxmOOCʞzmnLmA2,{)0eKM7+iwbfdd%x mrs>AOk'ʿN+ ]Be;.Ni%P$\goQE܀o}\{~>| nzQ<6w ^Z30a ]S(8ǛQkvVE3y6=+eѯa@F>41x^ Zq/=X<[~:1)Ù}ƽ羌z/fVq o=u4=|^ ;d+ĜJnX6^nxOxq#Rص;JgbӏbXma3b[V ;h ffy< f/AuhhiC7JLO[T*(((DRAW+I^r271FeXٯPt]{.JO朲*Z3beDOduv|bI.Ni%[Lʁ,T&cUrBڵkF[W~k|_#o]߅wOf )YXTX`GYv!y0\x+Ubw`^}]P.f!W7Bפ`a'!#b%YO Vt..N,{׸{sqz5I()BuA`l{HKn(:Fc1?T<\ 7cnZ6椤cwA,K1)3nrB(((OPMMWW-GNWbPC2#R VbČ*T_/I2)UWW#//QO_ÈGp#) { <<%K8K7b}-ڎ ;ҝe(ݾRVȅōy؜= uHD÷GNa)rvvP3?7Go1X~,#%S/(.aJߝ|" ]Îؼ<Ga'Na#XO  X,5__|jO<HU7ֻHXiWСCX%ՍN@JF6Z;Lķ)qP((((w TE`ӢP9xXnB%EJ*Mi,Iq~|iAMS7jd [;QމƎ4wv#1tDhDwڍ]e<}8g?(ǾmhioƉJ޽tw\״qئ5}I IkiiAFFiمԛKXKGn/7~Ki1I˥ (((>a^X(R.lM-}fʡV:SL w+BPגF(";;6mBblݸ 7mDqFl+T6`Cl"7oFM%%(*V\˖t훱m81 ʒcUZp}r5\#+FTN֘b#(lJZԨ|8,:88$/H<~8$IZ7e"$[K,ׅoG# ")m:Zf@`>q`K 4h.U{ⰎT7o.PRQEQEQEQWwtj(o(T^nKL!ó0tDb2NcdkPyHB;@uZGGߏr,߃C{qp^+/߇߳oq@۷{b]7l &QIr2 >)V>7J*? B%[}q$)QGȕ# Dxv (V$˜Agq-8[#2[7}Lq8p$-qCOio("@\<&+!x(`+NPP%/[KKgfLf4&lGlʰl)i'gZܫ (,)u4):rG[wK.UTEQEQEQ zBgDrʩBGJW/k8NE%E G-X+T*g7niBewYsJbD$f8D(R9!ŢM8d Jv6Jt_]:f4e=nDB6]Nn8QI݊>vN٢딢ztqɗ1~5Ǩl~!mOR r4nl!$gf!²Ǥ.2$MJ1W%9[١x}\,[Ҟ1 1~r=TRQEQEQEQ' 97EʄP=tR|tr|`kJ )Xj5P%EǷkuV'1?|3y*/ n\މK:PyIZ.II/lJskỸؔrSXOEni7p eH)#e癢XbWJrV_ZcdJSk}$BS/tb;y4AB:sOS *EQEQEQe+)T~'LgiQ9芹ES & #‘1OwW|-)Jgco%T.;C\*/[kʏSzlmH͇-#=-""pC~B((( 0D7*9NB(?Be?ުP4]=NҜL'qXG*RQgTTEQEQEQ9*9FFۚ\Xy S/؜͛)Jr217f&qd[Je B((( 0B|Eb7*H .fv4fNpv{CJEQEQEQE`Py< 0 ;:P ؂җrR-T*Ε#"iJeB((( 0޶PBe2P E `Id߁l)wX+l(TTEQEQEQ*\sP9dx- q#fogoZ%T@[T**EQEQEQeq 92K<δ&yƾӎ}ʘZ9w’qoYD`EyQRQEQEQEQPI\Yy%ɾޙPy||v >6 >6Pj2\L۰eY1s.c< m97)Ӥ}Lqu%8rx1alƒ20-bn3 $4i$c6y02[:<ʸ,3;CP(((( =&՞ N*?r b.]_1*)R.Őe{%ZmDʡ׮=WB3 sj9}(r `|T9m#!{I4mlj|Cxș}_HuPh `!w᳥%1*0>9Fe:br,*~\R8W9ǵaۮH:r̈R.&|@Pt\V zEK߂čycqR, $%EPRQEQEQEQ|=PiSB~+T^6\>P/ GQ\A{ʑ=j%ZcD^.B__ΥPILrA}EeRdDGs.<zp|Xa'!"cK4 jD>q q3'Ox^B58vkp+[t||{Nt}I?0aDM @*BGSg[u]'$, %%EV[^XԈ]|p_FL`EJEQEQEQE`PybӚr0B gZTR4>>6y#TtKKy-P5qf\'=\3vw!'ʖ.E`!ؒ ^[r!˅oGYkG/G#A1ݰm80{SmEI'Rd]IaKpt !ۙ<,یQ9W`)rhTPyPPyqj֔qaf9qO4W,]&nb [=:F4qو{pZl_^5|;?8cn۶߈O_kP4rr c&;$5jl%p Gk4-I☔>)ٱŧ>|̄"9$2QRQEQEQEQB޿P9d#RF~iJ#Tޢ|v^M7 c9ENyM092QR#f;J!G*OP,8ҭŎ EW㷿o2k'vHA??u7wHMDKqxTvaG6]?_129.e ^ 8%ǵ|[> Ksͨ쏲u%q8qR6*T*(((,Jvߧ~g̮ۢ}JӢ_!|s%TtfJ d:Fm}v&ON9 pƧRqڣ݈-D 7ˉK+~/\_Y=ݒ}.s7cV`Sa{ \ՊIEߍ%<~4!t ^wnq=ċa4V.pp{W!gŸpw߅vقˇdzaB܋q+ (((28B%gNg_iZT}HXكOd!T|m*p`#;89xR=aVwլ|rJx72H홮ٕ(/sll<5>vwq36f<ܙŸǭDIgrO_9\t;%zxO#{ rHy=ǫি&Fmalxa<;Dq lxA\Hy9Sv;RvLgB((( 0ΡP9tgHGո[Qa27J͎ {po"T'J#VlUi&әW3d:`ya OmAZUnbwo jqKԢmw}s؈-άW܌.? P?/.FYW./%-5([:b<[TqI _"RU>7cxk;Cs"wWը:w?nXRP>MG)su|[>GlBR0*T*(((*e/)TxSCGH'[T .xoʤ;VBwSݿPYϮg TQ lҒ ֑ffa%SN "Q<|{\/giʟ:*]t+k,o7`ҡ8:#xW^,!o3^v<7z9۫'gן`BuO*d=zH?݋ ݁Y.LF4cWVrf0aIC'0prDn6)*T*(((üz?BG. WÐkRN faYbbb}g=jk=*{ַef^-ʓBe+ +Bpo ]H?{(ipcqCm$a Eݾ-Ӣrζ^z^ñѼa:[ns#Krzux֎go lt*iU,37sXQ+Vm3ϿVU: 7÷06]X;aᗷn})ǥK߫Ŷ06nLJ׼wa #Br} ?ӯ䢸-B?|[7_ހ>|+_টA^E#z6.ވo oqSv0িcTPKooxgmAUŠSQ)#:y (((28KrpP9䚄P9B]*'&S[qϴSco`ouMmZ*{ KmRy1\DC\h-H;܃.<]ڂBƳ:5PVv (lAH~'PW O=Ǟy O2`/[ݛev֤ lTTEQEQEQ W/kRX9Bp ''9%R cTR-si Xy-˳*5 P(7wzu LE6>9_|-X\%,8`Yp~Fra)k|VNcƁK蒥 ήנHMԝ>+sl'Q-ӽl7*a""iزt<A> md78XlLzzVE`yXr&]d̥8(Јr~lFYR .[C%u%b~[΢ k+,c86tQLdEcKܖL[I)CnjHŤ,gXJ@JJNĸ_Iy8dB@GJEQEQEQE`c2-S-*d:yBVg9* '-B%Hx\2O9;?YڎG\@9#.])>:);բ-00?bD ɶ71et-!& QGQ"P()rhnd>_υm4II咥#=7ǎlvJQ p,s@(@FJEQEQEQE`R4etG2!N&J+)+{PI\頠vbUMkj jMKC {qMIuڗJ($=^blH_*mKv$1[m?cQzcǛt$}"1W>/nCԥit;! _STq#Fʒ3"<ơʓwc%OeB((( 0ކP9 : I#XɖCG-b֘{ʤHWſT"e=vxFsb}V\B3~/<ʄ拖[rl%iY\d7C&VJbLTWOT$1\Nq$X4,x3 H`9)`H\v3 g dzᘚn D} FJEQEQEQE`*/8)TrH?B#1*Xos3wR{af&/~K^;Naߑ)+RĒX+T^*|AJEQEQEQE`ݏPA×-Ǡ0dd*ObcMKPYOEJE9GP((((*_1/ƨ<{x)L3bػ,T,-!T&:7ifR*T*9FJEQEQEQE`mR ‘ K C(T;NN̔OYUT (((28 o-*;lQ9B77-/ɾZ1{ZY*/*/I#T.:Ǩֆֶv;~uuH-jꎠV֏HX6 X,QMQ<+*0p}jՄO7yƔLjcA> fH Ldֻ/Nbb(21uJJEQEQEQE8*ϘLgǨmQi}ǨzbJ3iQNC;=\ueމY[?B%F ᒌn\N#!R]lʦ~_4S8MP@EnIqgϽ?w)>Os_4~s,_}>|φ터iIXpn\D$`Kh%^TɇSN[tr-%SI+e B((( 0 lQ9%2,Cgc\#R&ʤ hQ9tԚPyN'+ÝWBcTUy*T>sHpuc?w܉޳?xd;~z\?z?4 ' 0}LzoY0[B:.nu{c1ym\ "5td≌_?Gp" n91#fգVb+6-ے?>b z 七s㰂@rغ3B&,+Fth hTTEQEQEQ}ƨ|ߧ2B%g>~NB176O*L<*Qn ~ W+'7⾗{s^'nSy>aJ7oG9۴۲-;`kwh'6ŌqJtח m"l=،X`ǰCJJ%xǷGb}Sw(<|_m#:|lKv%liCC!3&+q#^:TRϒ4H i%>YFJEQEQEQE`Pyr)Tb5t1dxe21* ƌQ uSr@X?B'" d:o(Tέ3y T><6o݈WG1su ^IKm/¸/b Wb/ }g1+0aOcY^!GTvlq_*+g]˦>7amӞ”ǟ* f#(d`Wp;؊t7yd!6Pt\m != H)lJ4W!D|dž[R& %drσ%w):>[j6DJEQEQEQE`hQg2=,˴<<׈~jQ1*\#VPi>I',+>~̈́J=Py |gi qn}ǯe{ga̘?cK_Cq=sx_02vlD-xVsJ]>Rlg AOXlw!?><ۂ<궖)Mq]Mwk1lEx?NAQ ۵ C()ތ-;QQw]jFΝ\ 6o@= W<س}3 h~U?|wU,nkN`ƀ9G0(( 䜆!$0sH?snO0 Eig]]]u_yd?*#v'vDT   Bq2-f^ ΦHJHQUZJbցxꦫ /Å^z!l0u?FuMy.2rǓbR~29XmDT   Bq~+Q2RLרWվWJr}RSET^7ߠ-1ƦN7ቷ[ڷOMwo뮿=?}7G$Hq`B8X29C 8>,7 Q?oQ?| ozc/y:{ð.?m4$ghLN/`O`&޺"twf8}9f}7"]>&8?\Her1JAAAA1NBTFרdTNUU9PjSF$elu\1g/HK/_kO֖c_ <{_<vqښ6*NB#RAAAbuUk6-fEDe8BkHE|+PVK<XT#^DPs(UkTHT^<,3jJޮ.w/3pCmq/_cߠ3_GO⃧{[D ܌)c@ظe 4>֠,*AAz*p/bixO1h 8CtžYrA |?#??|4Y|U|Qva״pCx` >FƘ˱t&d "Ƨk*3sDL z,ѐ' +$`°/'o>aBcz&#ԨLG_ET   <^/BQi;Ѩ.wrrrT⁇ڡ_D6[Ъ.x|#д1^4y>pu5u͛7KJ €f"D$SCyn,%}A~e(/󢄎 -$8a3} kQ6[?׻N җ~{. =~!`6cQnv }W_b,YsbDF<]^DC%{ 0-g܊AAA QY;QI֙,ta^}}R! <3w|xs/zL<ݸm&ΝD%OWYbao "h`LhFpz!}j XzAc*{ |*V08[Ӧ}A:Gh;H}B(ׂ@eBy x x J xu,hA )8"*AAA!?OJT&)*[TU!ZD%9QAɰb:? ݅NKUOF7C;'o@koyzd Hi:,=HQa.AY6Xαa3J+°4g#DDžxMaWн|E}irwKY~1݂A4+>mS4ؠQlVԷ$,"*AAA!?OBT5MD,)!OxJS, k; 5_dXD =,*{m[w駞E`ȴlZt~=>|? _^>c趸Xn= -h#Hϥuu^+YYikeCemҸB%4T6& FapZ4n*Ual}Yrqگ,, fVIchMm$KSb   c'!*9ʨV-rD/2l_ԩNeVV>3,^<>r/zq<#<w+g޸/=s3:~-f̚C7n={*AIht&'(=Aa"YrFitΚϾ>u]?BzÏ;‡=?]{o{1m\̞= n:A[?CDDdTTrfU1_Mg, Y7*4Bu>qy*7}ƙ!=ijԷfӦmaT|nHgiXl^c,M.89}Q)   g\WfYY7gTZETֈ_(,t'*{5D΀dӯ,~#\;pl2%u[͟C^eDjpf#o1Y i\G,yKFu&äp{{q=վȋN|=U ڲU-{>wU͗j;/z7ۖj{Ŧ`@5뀺6;Ә5jWG~S`:fJ/R8%DT   B@TrFeݦ۝\sn wىE{p Rrvmlf!va2bڀ--[aFUи ѹa Ӥv8#Qcɓ顅J?vƫEniq|m`wcۯn>n͍&m Θh,jU=aiIcܻs~OŚ=0LCuzBȹa%H / N8y>y%|2p.VzJ6mjεLh&<[7UAMaM,*90Cx 舏OĉC0~Te( 0cQ0|6`<&6,v }K^;3L~y;}DETtNcLey{ڿHTQ)   1FTTFF1QQy~*)*۬EQ^g7!*uMSe,?TjP\ƤqB&Nnnz㢎qpa!.xy>.xs 9 ea !j4Y ¬ʈ 0`m˜g}FbFXW}4nİŧa]e)J`9HK߂Kc֌Xj#eр`>R7l%X,:Cj㰢 o= #oM…ݷpA]g .$ u݄ _] _Y چي?~HÀC Ea^FoӣæYCe ;m> u6# ?{s3sc6n{Z+[[>RQfG NBFku״@0';2}F<">: TW7`[j#tb48ص[ށzl=wQ߀ݜG:.l9{]}΍?*t?h]gt=x v)_FC 4&>{ش| ,-!T =nK2ˠsУ"+Ԡ$;s61%+0qjf* .?}/Z @I z"!͋ſ;Z>a|r/޲z||;h9viglsfoޅ\ǂiu™CD    '-*#*#GqVZeo@TMiGudIc`땨-12}E=hB?K'>ЃFIwb1n_Fo=.mxM͂sjI#ӱ.TaUϠ}t,%+bsJB!v]iCD    ut%nqnQ818Ql -"<%)I#רYQ-ǘ}ٕDegl bS?cݸzI(E b8~*Ť\8knO)uL&ZN΃wOHȱ -c~ :Dϑ1j`>|[\ (B^Z"^]S[A͹zTotj8gaIxNxk1&L赹(\Ó.aȡ>7=&/r3=h$iN 80nx0%_DQ8_"u|<|F%Bz? >F`icʃ\|GСjG8sAAAXĢn﨤YP8BLV CQuLm+66JzLz Mr*ź<;'7* 3p\7=MŵUMٸfAڷOB<8?=PPIaS&BR;>kdVYyFmвU ;wAbe,Fo`ZJ& 1 7R 1gw<~4kIm}w~}[0xysiw5o;{ B0l~ cbzff@ v dLݶQ; ;UIwܳ㺽B@˖pߐm+ UήJ!RAAAbFeTTGHJkTk\ʳ@TVƣƱW$*m9gQI۴ΤSk^YPV rn>Z-@yj U^i%?EڥmsXZt,$-.+kwZtgr&Iilld0"8YF%G4F>B9];"*AAA!֠uv(uxZT_2*)NQ#eXyEe|J Wo~ W"*Ub<[cHF#g(~1Qpx?وjqaڶuGnךXZehcOQ>:'YZ,I+zXqF$ %Jۊ =N6EP)]I;3^#\e:Z&u%;4V~ Te+V!Y: ʔv:4RaIӀ|j< BZ%t"*AAA!`Bl¢rJu*PCQrZ-Vu*cNTF%aYYqǍY`IY}< %*dʈ]f*Qy˨&-yFDUEu sls T[MбLcE#ruGM!F!@ S5,-l0\9y?o4AjZ#rѨ:'"^zUYZ'kU5EW Vڤc#yg%}E4F9ppQ)   }+Q.N7qUI8Hh4>uLHDݦSPEek^%*)Z~fTz+dVFde%)R%*sfeTTrV[DD    ͉i|J֕\kM  8I"k2uNCf3|6\ķSZ/B6K(6+TQ)1JAAAA1+*E& 8cʪ*Y)2"*!fQ)   1qD9FۣS#Nt7QYm귈BD ,"*AAA!8)8Hi<uQl263#2FHED    GN1d6eQٔUEMQ9JTrVBk͢rDTXCD    ')*Ȩl6Jj2R{Z/?ri?A}DD    5D]ST6CSkQl&jYQjOT*:MQ#DT B"RAAAbDjh1âDU#q)Qj "*!Q)   1qDF 8I1D|S "R"%Y?/ţ"r,)i%e.Sfe3l>\6N-¥ q|\:1Kp'.Nkr`A8].,pXAAADJK%)QiJT8i4 uo:Pd5JElUٔV zKO]:]L S9XDy,*YRrpKJQQYKP$FEJT&Ӛl苲'O&*(2+JMAAAB)y6LܲhdDT6S_l9u!bQy~\<·8ptZDiqATL)6sɌ֨K"kT^<Yrm.*+*Eet>uEm<8N|Xh nqЫ^:c||N:G*J}(^?\tSWڥ}.j~\9<TJ}:q.:Q.8Z>^onI}-TYpӘ:<VF$vnugɯ|,]PRcv:]ugt]'oӽqyA>'p:}o^t{OvT mc6] O7^_G]4'=gӣwC47ōt<d9l:/C+ozu}˺48\;<'2],94<:hɠ@Dѱn]`aS[_ GIt[zƛ g&Ņ7>R"ЩY^"Isq[.3q~\t .BϯD'K5nfn7]?R_+I.?3]z~{|Y44g.|tkzrbrL1eB"'a”DL0 Sb򔉘:i $LAbb|ĩ>1'ұS89D:o훚0uqO%N)aqt$LL>0m4jڥ}'c*N8@O'#OȟM&"atLNNΛDG1eRΧ'Lq鼉t- 82^g`)5!z?1qSzkdQoMԶ     JTZ(XT~(񐨬h,ks$Ɠq^l|h5*DeTqҢR;Q~QvqF_ dQdQ?t FÏLx9Hwwcm|'&IU۰!Շ49ы 3 .dr ra[Z2b Ϯ$JƏɛ5i=vq^_*5 |p!=3 Gv:I>dgS7|N/r\(LIFnfSҰ;i vlö])ؒL$SLSb5%'پywޭUIZAAAcɇ֨)*6泪D<,*YRm}=JTq89!RS;mQ~QpKϓ,w&SE+ݩXl?Y :a5u5Dž/EؒG'tE+דӇtGK } tk8{Utn<ı_'ëǸEf#gyKC' ~^S櫬D7 xH? =|~73 5=tHE+b5ؠ2 y G?Ypu8<4ҐF}?\Yniٮ$3\pҘ2i _KS磶hn_I*]CVMBD    %PTTN4u:߂EQQITE]^2:[E,+OJjvO dY֌߂v 焓12uF4|"'-/]Wŝח c c).j?w|w5]َy?/Nfag' ._NŪ ^#GctHi^/K.O Rtp6']W;鞆|~|ip8aGi7E9jӡ i>+ڛyʅcHWקDo;ISJf>ds'd2Euպ,&>.C{R};uUIZAAAMXT)k>-f^#EeDRΩz7J^6Yx&Fv17 *sSTL>^\Diݸ$\u#n\f\J\y)/GVKqW1j]Hd ÝLOnާw 2pw">~@GΆsWz?"|ғ޵>s'D߯1G3J-1Ч[/_ <${&;ě\eK»}"k i[wcǪY[k`:l*_9zc$O*.d^ '1˰Rz?uҼ9t}Ht,u'=ŒG6+͎"*OGAAAʆPHԽ}4EewmLFmR ʜ,}%&JbuZB\s.d.|. {LEq{kqA5m&4n':aVEdԮ/[Ф@:/7{?\ؽ=sƾ8 ܌틾“op'kp?カoY/ EPfNXT&#ghvvp5mdyH[B9jAftcoKF=`bԛC` G?=> +wQ_O{}a2i px6GlH_.ҝ;s!+{RWիl25/Xp{ZśĩJAAAA8K8EQ-Q)   11DSTi: q͎񭹀N4lUk?)ihqDXT:ҵ߭ x^8pxqGzzcܷF4^~%ڬ*u CxD+集_AN1ӹL[>k1xH?#x^p>-\Ya֏ۑ은OhN qoܞ]ر~<^n(9KphLJmE6q7:;?DSJ݀]3G໯⛏Fo^xnCEXl.\?UdUQ)   #DuHTNo;RTƱlʢraQ$%â+Qy'%*kHȓITz]>8 7wwu!;̦,}ICbis@ O[ǡO։ẙ{q]uSqD?nSrfri7bgS]^;ot_E׾0on}A7ὄXϳz{  7.<.7&mwvXk `w.~4^t θ nspͬa4=>pcv8Ԯ,BS|Nduy^?|}=yQ;~1lIB3ƹIGŰe;-͏{VNoN$2u>uO?(yEG}:wog{FF`d #A<xyز;ÃnOnO">DDOGygx!RAAAbSM&Q$nU'8D? Gn^473#5ns5Z(sSw=Zο./OW}ƓqwaZWg[ O NJDۋ"dfdHA? *t&#秱cW w&ڝpd#𻓐L7Í NBNZ2r89p{-It܎ nq#3%H%A8/ ylx}(U[~$'#tP{~w9tpAuHsR},&{t{8[3޳5*jAAA *7i>FKTF(8|+ No6Lm3 p3d7Rn$e!rH"KrȗLN™Nۮ<'~$Rkl=ؙÇlZ~dPN\<,E>+Nm;t_2S@:S WNdp/͡;st/3Yf!td#5',wtUtݜQoBD    M&**S֭->y,xp8cWZ9lddk^hp/θ͖_܈;]Ɖס贠+֤ýtx>3t~OHKdw&d2p#y~ڦB'wߗ W~/xAǜ͢ =S9pfD ,OZ/V~<[F7c )^Xs)L8|^,9('\ډ̌n=HzEF`72y,pt<:ÝL.8(nBdHw+AN:=-ӏ,^NLӕB,n'=pѵz3Ґw#Õ/gYR;n_dw:gG\UK3B^:6)Zt/֚)nt:ti_ S6NcoH]=FmJp9Hx 7/ K%bJ^wR3pv#E1h,n$SΦ6kHWחF}{5=G0p+[.R8Iɰt1CS۴m'O=w;ōD̘< S'cHL4}]:wAo#v鈶mۢah 6@x.Z`,JAAAA8[9uQl[@|٨WlsXTƷ^|vGmSEfdq2 K7{JzY@2r!Em9=IpӐAgt\:>?،7Ƙɟ__Z2NE,ԧ ~>7gWg8eLO"ҩ OLbdMl'RRIc~].kv9^d!HFj%끋pwDzE$QIE%g )w*A}fXil^%D龲TJҹOy"FK&ܪvSh4.WAזnn3,Nu`D=tAΝq}mѨAC\u5_2NVT}u(RAAA4GJXt$ncDe4r1EQy:JVή?ĢrrDT^:1cxD*:WSR`V3XRVC^>ܝ /23Y(W{gO,[ >CΝ^{ 48aqG[[ 6ֱ+DT   BPMTҏM۵ʦ >%#~h1߇D2'/* p<\%d <{D%g"xt=\;nw2u#"Dv9B7J2QQi^.   /ɈtӉT>,*Qyꢒ~'҄ %*Òiudxz)+}N$~!Er}pЫ׎f́ϓGIV,&N'ΧJNrAAAĢcPJT:FOdBqUҴóΡx° l :iGnvH$ 3'tAAALqUkϨQyrr.I%|JT^2΍KFGӉ5*[-Y[_rgT^2_-2RKJɂ%DUQ,ugtQZvڡzcgP,yO)mtE7D;9ՠ}m5+N| a|rr#IDATaVKaOeܟFP bm:&A٦yv-c;<^1AAAA~i"آr4>uO@]݄*YTN;$*<5 hDDe6KDT٥lv .u,QY<{|UF4tJ%SΌT}[,)!QkE]Wb9aOg"` hzCh,kX#qLp@rJdّͽBGۀ$ L㬈bMɥz0gGR6kcySvʩ_%Qm+1iXFPR{C% ?v9pڣ\Jr>XLbccQcz26Â̾ecDlr6'Yˠk-N؍|w^`*c!XgVw!McQj~ڦg밳=}_E{Ϗ%b2Ǥ>ZS}jz3JAAAA5t{r 6xHTm2uFE%W>-Cf1"*GUʵgXTrZK'ˢGW$QwEkZ%:^3va *`Q<Fo` @G*١$>Xq&%5)12m> TIJYNc-qC㱲\szlCؑ,G0djG`=)[t5pP Q3,5* Qcjaq:!}E7gn*Qi4o' &gr"KGS&JzYta$ax!QI}s j"[> =4v1 qڵ4;" ΛOk/G='*9T17c+aa!ddZ; XJ0]np)O=t*h _   k٫(P;BTNVnNuQyXVV[ZYYxEVsNNsSӼ1F*{m珄c,}FUQIR"Ҵ" TekZ,+2^Xa !GdMHy,,JM1LBYbf#dy<g.& rsc>ch*J 4 pI /a[A%TYURTX8GͿL4n jI:fHA:2aR?d%=9ҤXj<@ ?c}iVDJڛ0K޳2#HOF=cYA??ǣ`>."xaTRԆ숮/ ,>O;y4P?,nClxuY 3 _PrT4d#p_JtҔ(-sPGrtoa{{*`N ]{39mj.݃}Ey-GX0/h-6xH^יTR/ixv{ֺJQNZ6EsQWB*,+7kڢϐUزT>-wn:Lz8 4zhܡRd"K;҄UYr=(*ڏB7ʥp<'mAAAXN?%Q-#TQMT_T)SQ%+Kqٜâ>O.*TU;RhChRNXuuf9o|x,=S.i&Ιp Sa-O!x`5Fmуg:m\% by?o \qx`=o.>eNvL/:>^-5%F8i(>C1¬C#b8sq z7\t ѯ`a '}Wݍ ?S< dѽ0PY'n>m(+__<Mo{/u]4{ӆ?.-rR2m/ <ոK'ƣtՄs*@{*:իK7u "&E:Q?ˆ}tkǷVc~%>?5\sEh]9Ǻw_bÚe2y4i>i`om(f!'vW}6Cūnth<ݜŠѰ`l޸ ۶+sU)S<}#0kFitz;y-~o^{t6oxC? .<}Eú4[ =7PX>7]-Ĵe۰jx4j/Ι63pE.[4AcLd,Bx9lZ1{/KVk+@v-wߍC`m75<٬y{PٟsѳE|>t.[Fƒ^og_H?@D    ''*tXT7fHE\y*MJc9eUjcJ.KkTr枒j(p!R;Sw <45Zl ټh:yI(ݎlB$mu I ?kDjHpR^_zu+5ÁgF?݃.+wFx= J*DX/? ]ni`s.>78K܍q .Â϶jE(܊5-K+TaӋu'J5腋Koׇc^,c z:^xAyC <@O$Dt˭96fU`wqqO^K4C>+c!՘ڻ#|:B:}a٪nҵD+ga̲ -_# ._WŗK{jlɡ{6/ 46dNWO?cnFr7]ƭ݅wZp|xs ɉ}T)\`'".9ԳtQ)   l6ͦ!*Q9Kʺn˹U CFmlj7QY#Rԩ&*qg^TRƣAC0i,xyJ~?mG<;5BU΍u7M̆Gq[|`-X 1aH,JhÚQP26W=z0iaӁM3D+Ő, BݘToL1\1{54zq)F=:>ڶ]_gcȍ}UcVU"Yf`hn1 wq_؀0l莝vekxѱ;xG=15 /m~7!u `OVq Dwе{wNG?½n8 ہ5{cB6,V9]weDk{)z^z[-Bc>.[|ZԿl0&|m Xi/V,^x~*\t݁7|L,;wi&F[|4` ݍpB|V3~3 pGd]UDT   BQCTDp>ZFeuQ9+RLz#~QY]E2*W<}ʨH,% Fe.E#Si}r~Y_bCpU0mې# >ߌfn';`^X>.): ye;,NxvAJZ. ma薦 povaOcXaX.~|^վ4U'XFY6.ƄOGa07ԦNpњe?E)KPiK?GW1˕/c_oCx1F~$e!_sbwb{+㝿ދ \HǮ_[:>WISK=l;oxv@yjO:FfPUҹe!l/@+ç6`vJH]\F"O !..ob r`yBmb=o1DU ^~?/.=J0;9kv@r`)JTt%Hv8HKǺϟ{bfFlI2*Q:ڈo|O9Ȟmcm;Ǣk/v •Ko锵VQ_9oͺOü[@&2P蜂j1fnH_ݧ M( E2MawkZ:p)ʻńY 3: \e[vc׏1)dW7^sz \> o|;^M1nm_s  /w>_÷h'?23:]}mǮ\=vQ)   J}vJ6QviҼEC2̱7½!;9E1,56*jyf͸|-2 }?`70;ؾs-*!,vK,.c= E6zk@(o}re6 _4ÆD^Ŋ: B*ڬ{0rUX)#6w<-ЯFq91kc2/ڌoWs}hrcHB|i ,U7(TVߦ!hsх8k, ,63\}E={+5 JU)6:t.*a[7c~֒_uߣA^{{xx%݁z$SsŸsx`KP73Qx ?_*sI(?/1JAAAA5DTN,)JUHQYjkTƨdaHJ7h &xI:cEwniZb} cl84 ,7Oq=ѵחݭ#&z䥰8L݂nbfȂ4|,Te0r /{tol> W}<+u`QK)qϕUҦ0+ە)ǛBA "+Ãet&Y J*PE+#$TFT<))CeRU/{I˓w7\L1.ˇ'/Y؛,) `{Rȡ~Uܰk3=|~=.ˁB[PG"RfJ6LkqN1jt}O{7'V ƸQ)   >j5D媘W.EjtPpS-llS^moE7^@-q㖩W}oo}O|)b͌yawL=,7yy<ҡI\44ZơYjWa 080Ps^m؝J@}xx)C|6CgYLâd{[Կ^ɂˆfi 4 m8mӤ1И5O:|cB<51aTv94Nk\R`ijQo F>^xn;;:>D߷NM#Dat.eAu=:etC""*AAA!`#ZD8N *Wc]T2ܿ M -Ed`h=N̻7Ͻ͹'noܜp3>^6 cٌo(9z`팷1el/lټZJΦYJ rl=2\%,zopCkBݾsz>^ Ǿ=+ԅW7w4o0LYF&Fj3& jEfhl,.YUt> *,hܚN.& CX^dj9]t0ۃ5" <ڢK,+}~_}19Gt톺_,|̪شd%h^i/ ͌H>1Jt>ASxJ:4R]>_qܦUF_F8HQF$K0ŗR=g)254i'JvhuO #Nפ,>7OfAi}RcSX>눶Ԙ<&.z %AAAXHQɰ`k8 un:M&༦PdUrѢEe (Q,F|Eo ʓ=mGE!Y+' !kˠ$),8fS)T |AAAXQDTWCT5A1b6ZpE] Uj*IyDeLoTT k *s_ޫ.Ym(xN AAAXNs&ͦLm>*N9ےelq-UDo'5/XLDo^Zѐ+c;0BV8Q)   ˣʪ5*m<6I@Ee\=*fu4IY'F/QQYc5ZVê*cG`+^ ψJAAAA5jJ;=ZLAgUFEyQQU~G3*ywuQQODoGTF?lTm .vsi5+HsY?    k)*QQYU %9 ˝ ,͆ipYRyQ)   F-R;RTm<q92"*4UtZF|KU-#kT_:*XT֯!*/_Y%*j{cZTV%C K1j/ˢǬDI~Pf/2>F(Н^?EKn@A(󽇢7> Àpɝ>-4%A= ꡥcmz5s2&kS;<.jBDD    '+JGP ?YTF"c*+0m`ڥUWʕ8u%x{aKC `B-AAAXĢר<Ʉ*~s)*OP;E%HzHB=.= +'Mha`DX%.h=á).|LQn1LXfid\ ֮Ɗ5?`Xj ֬Y`Xz֬\kW`X>_k賕kb_.ÄAT4tf^T#lY 3Dv! %Q)   ƉEemUFEeY)N9rʬ< De8"O&j=8D%Ǥ̸賶?Zk{߈^k']s6˯=ncnng/ G/J2GƇQ^A(o>5i6)/͂2 ð_NcXKqU`d6tzAJAAAA5N^T$5MD<{Ѣ5e|ί`g;چ:6 YvsI}hܾz,ÊJKAj6gG3ʥ)tA}kJzu#Dc P-%+2U DD    &*7%eTTƵ\@tDTzD'qۤFtA+؞~؄-ڍ]wpoGp6oA.zʹ r4DQwmy=J@ !ιK 0y=K݂j-MSԎ#.J@D    ?MT5?RTƫB:sU︖8x1'sLmQ >g!łTr~ϯG̽l\:Nͩ߼&%1i5&D|lTG5c"m:=pa:_4z-ch?Se%ɺ]a>Υ镻~ tE ՘Գ"RAAAb%ߊJU[eTQyF~Uڎ#sN|gUVE}%,+qymc>%*/YQyrOC23z,ȃHHs!RAAAb$*ωJQ,)^LtCD# * lޯPeRRHngFD    JfQ}EeMx!?GljhTMV ωJAAAA5NөbZLQ5dY;+t"tiBO~NDT   BqDe`Y9q-Nw1CDϑ9&YɢTD \AAAX ETD% a3'5(URU+)*`[a\ ωJAAAA5N>[V@<Qyre@3uu%! ~Li; c)RyQ)   ?CDόmB/FCy:A`^:]aM~E ?/"*AAA!9Do7BHԟ<5Q9)DeD+W;h\<63Rk(M{eWP2J_x%8H<+3w8t/*X0U @}fGz9h36#eKѝJyw[j_=Bl#RAAAb9l8vQ٬u)SeTƷZ|~-De\'+* q \ǺbBT1aðM|עѾJH-w(}`{Xi;"o}c)F,x8(5uX0իr(`ZAu4qHƥi387gl ſtLЏR6ӃKNuҦtMm1qC4ڶQ|oXFD    w:^CTpN8Hs8x"m2 5:Mn|[A=%')QɯXTr6̨<[W(*>`:e*%ǂ3*){TX&3  m/Ѱ*!*- a#lr]IAڄi~zhC{y9ԄfaԤAp{\tmX(t¤jLCAkGh@%*F> JڦM#l+GD    _TQ)W *YpLa9Іng}?Q*Ga,ʂ"tMK}, )LfHmae L?aуH0Bi| [f?ԾI*I-+iuYl3ZYVjVHe,A 6ΫTgV% eᄈAAAX#j pn8Ik:MPL;l)SuҦ`ÏQIoBva x2ӡ]F.N1,*wF{gU{; ̼wŞwztLw;*CvfD@#YL-HUE9 "DrN>(K_xjZk~be3b5+>ǔ1qF)LSairLS`ʌ(Nԩ0m$L>3Mzrd9?}tVυL1u L6eI]r~5}?Cb|rҦf`4]!5_7/_.N (* !B!qrQyanĢRL#sT槊J NPC4*l[Z1=3B{zOD"̤ v} ' QĔ>c(*upjm(((зM(* !B!q Q8\[ӹ0GEt#*u1GEehɾn)*ssTja6ro5:Y3-J\0}?~X>l{.vv3v-RUZ >?V] oJB!B!$j.*"*u~GVXdFwWTNJu˖fطE t-]Q }!=`wt®E ~hw]I%]V] oJB!B!$j@TXQsTT窨v}ʱQfCCeP/mxa\:\#-=ƇEWܝ]`GgJU`ti?%7*+AQAQI!B!DIQ; D%WnJ&aK;tط9x|:<#Xw)_1MѴO>Z+7NK 3*W -7U}WۃB!B'j5R)ʟ~VQidDRVLTE#a㨊J߅Y'"g.͸v ~[^'f6GnKGqTR;mol}+l_xl<ǁ !]ґ=*KAQAQI!B!DcE;8Q1C}ʌ> NJʱDfIDEGDHJϳSq߇R:ΜaŹxreoSs:^w kįq|\6;>5^~',\%⻧umX^ !pU}ۃB!BMz =먨3UV"*8> NfUhV ˓gTxxE>,9q50qxvͳDɶOf)Ʋ0ioz9W-ϧhIs>@c_΅e-9(O ~{plm|1.V~W^ykE߾}M9B!BH8 Qy$(*s#=U30QSGm};GDF(+UT6(FQuQ)C:q#mQbq뙃gfa޾uFlۋ]otدpӌKo5Dg-{l~{_gkXTm /pmP Mwk*̎6B!BH89*eŅ**áG,42#qdT&&kFmP9)璲 Р *P= ϑi|WOU=5 g#Vg=E_"1v~`n~ e3w( bl.\sZE[6{B0*xJ{fGFJB!B!$j|=Q\;#XQ+Q0in%0YgkJiD8ckSy؇>e"OUbI?F*tj'Ky~Utp:]N<ԣHrܒcpm)υ#{.&"m]džkIxc$PTB!B!QDQ;\b)L-S.Z%}7NJ(*zu{q8& QťBُq}wS_Goopشػ=\5j}g_> o&sޞ+k:Uj8t}We-[ f:qi%̈́=I97ǵr@ &}GNkjdB<:ik}rH3pʌaFV.Lɦ,2QYr\IX9瓟)* 4B!BH8רɪiUS2*LdTPR֥JT *k^W|3E%!B!B'*52u̜;By#H#)뾨NMD瓟)* 4B!BHz2#g2sH 3? yaL .+CDB:~sg[TRQ騨Oa(z̗DfPTB!B!QXQiNWQyk\аkBT]L'C}a<ͨW:+dcIW2.Y]v/׻⎴6.mL?@9/ǒ{,9>lǓ}èG q ͑I݁k+P-mM-‘QmJOm#|yg E"E%!B!5=**@>HĪ߹CdU&VN̂ȼB26Og:p\7GK ~$I],xfh5s<:ţ;cs|%n W9vF\Uhd[rvҐ)QBe}* 5sR_6l,pW;T ejEm\64S]fW-Iհ*Kʵ*k\cvF_ڲoބ"B!B(*yiQ醢RMUk2*[^7WxxsI"n6K|^-h>}qTH:ōYG`CpT&B2&,7%?^ 63wxty!h^6a5˲,T˓UJǶ<*^eǓ ~wnK~s;Ze7Y%k :@+K]FcCi&owYe* '(Gu(* !B!qR~YL'wWE+IC TTZRp}>G[[,4Xxah=AyZHy;q$-EncDpT.*[ҁQ.^~n7u:t&.4 -;c̞X(mm gwceX83lS)VqlȐichת'wP.V7Мj#W-9꜔rf< */1׻x}N+;f 0Eq˰`mò˱|.Z5 6B!BH8 Qٸ.lt1R3*uwFZD%3*뎨46JC3=F>9ZWxe>n-ē}<_fk&{ak&;(䣠Õ+pipfnzcd6jԬ/07lS1T{h;;u6 Pn쭨 +0t1V`yu~)&A1fL%uԫ]Ŭ^ofto6?8=w۾{6wYWy0}W=}*]cqw-_S렪>B!BH8gDerIEeJ;g+j NJ]4XQge xpZC;mxvIBRn:yޫK\=.+&:ț!Cr\R!VVeB||tm~#niz).o<.L8to`c%~-/}}a흀<_.i|cUhDqy5N3/<~=fur}TB!Bg *s 3xQQ YyIg#jLJ/ ?75ڀtp6]^y9)] ~XWsp=gTIR/L%jvFZ]躺_ދ<{nX4z 3܉="*%8Pn p1y]a\?RgLP~hCQI!B!D(*52oQQW,JQ02ʢPH;=&kfg{GV~dLq$Opqy=dks5CV ~\@yPU\W%՘[x*) 2*_F?ߋz}7QHN\G\Wl]0m%k<ai>3gK t7CDZKCuxa4SGΐߋQqtl9Ta}TaIvXq`f\N+2C}0~%eO3?zC+0ǛxQKR&`dԵ3|Yaxqv`Q_bV叡W8zqܙWVbkoݏ>'^;wENSO1uV-aIyouⰽkh(H$B!B4YNJ̜L I\H'7EeEeCR3+ !\\:f :+icؼ}'ڱv/cŘx6ڇMc(6Yfjʎ/׹4t6ߓ2[qw`a*TN S톾]J0,.V",Cf/bȄ%PG'>-w3݉koZR%vڅ`ͽ=X:q$>zfD:G\T>/>?^+ntK3> URӯ2yuuՒBQI!B!DYkFTTEȼB%8ԿR2ڢҬ-jJnTT[UVcP|:=CgT)~c{4,7m1C-)ʍ' 1ғNgsnLɾk#|TUy^xُ *3RYFnZP37aK 9fĨԣr1!zܫSR\/!}U P-Q')#=~3jDJB!B!$jybQ3t(*SP b8AnuYJC]\F6qs >HReFʥxALjUZzW󈘴K[[_ԥj i%׫TՅr`AmJ[rܒ6]-7I=RfX|h3ے*R!j/B<*ZuBRLH6N?$PTB!B!QCN׿O"*ӛDZVSJ]DXQ96 QmQD#UB7,;UcW{jX+jXR[r|VZ/Vkr&ۺ wJ JM T/꜑Rv:uFn:\b& lXIu+eT!. /5US% =&O!Q8-_+fs\lx.1URB^2ҼuϷ[W)1oy}ͼԯIH$B!BBTPL-#;ꨬ4THDj9';QE+ŪQqZXZM%0xafR2UBO1d쏚c`_2SE(*+LGt4Kǫ}, ťkR.լGOũxT1F Y*K+=r>.j9:d=S P-urvCȃkw5eRW=_{~O VkFJa9I$B!B=%*3 #gR#rGIN"w(+QtfUptkzLbƭXl/[Vcgx:]>_#VkP_Wlļ1W_K?߀@ee)L=pl:dԫ1v4[ 6=rwّ*W%R lغ9-@3=džU~iYG7R.0$o{1خ-krԥsXDwIy#vISL $B!BLTf'*YaFe8?8F}JñUl$3.a G58*2: ڈFFe0;RJuLRfXJE^ktOR奛rf i}rIfPHYN~N,/ QnѫuI2/B[`洔Ky^3>9iΒݰ3"RTB!B! uBzRT Qy[?\ب5^̨Q3s!*S33OwΣ.JBPTB!B!Q#ET:7v19*SEtɦ,N 9*x j5yPTR$B!B]XWT Hޓeՠ$NAQI!B!Do *sGH"3oh&*uA.*SϥuV:E%!B!5N-*DZ2wJQ=**S~oQyܹ坵$NAQI!B!D=ִ2/UTSIp1.*/Vx0׆2y숨)VPTR$B!BͨqRQ_|DDԑ';_[gIQIHd$B!BƙʡGD稌Lnk^S[gRQTY(* !B!qRy*3TVJ<ʉrm2Rnk+L#YG1JB" E%!B!5nVЕO *TVL$Rd ;2YdRl0.J _Cz =-lzm#%C/&BQI!B!D ;]^WQ)**o vEFݏʴ5ك"*y% ͦ,(' wujoHT +!D?c&%C~xzӭI% )*It$B!BF5De#r@BT9.2GDJdFST֐4PT6H#UTEkʾ|.{GucaRͥt! Ҷ5avEB!BCڢ29;gH=v*Q9, #*AG}{:Os)U넪?CWQY4RΫԎYHJKB3B!BH)EeG~3GeRT挤2!+k7Kl E**w&fQ%y&|vjRI)?_/T <B B!BHԐ-sCQy$jʋ%TVVAQ D~x^xhJ$^RD89 J| ک o;CB!BΞ̧<')R穌<"bRť1T>S;J'J2gGv6B7B!BHPtTC)*SJT&EuF<#"**hVRڣMܪurA%n26|IB!B)*[tTR&Eeʂ:.*R˱ʋ5FQpJٗx➏C1 ;c(]܆uqLjzhfK=@B!Bg**R%e^lkʂ)*6.&5Nt}J1j4[%ʢoͨyTQOEj<1܉J-UgջH֤Ash󰳪Š1]xd6^/a}˰"G:TK2Tzzf(Uq=K9ʝ*<2CٛY=Z욶J:t̹a r^meSuMr8,SRmS(_/pCTuJB!B!$jqAGE/k]$֌Jm[cu1>FmNUQZƸ*4[šha\4\rQQ7{gقic(!]%uctNB'bgUۏKO'MB b >ۺ嫬:xUZzը8AoÕl#?nazm}G{d_ťҳOGmK嚄'9Rx\'gv5|l=7nK}G HAIUhY']]\Jvm1)V)K{:m(* !B!qQy[_\بlxQ2Gef~8GeErXb,2겨K: JUtK;@sCr1 2i[lFfWn}mc:AɃ4" ťIWVVVȳr`I\ ֲ>mnVg=WʊC(;Tj+RF@4*Sj\ oPL"[$ZkQߤb&͚ԡ,V6}y[#r|ٷl6 ,uUɩeG*t>vmƳ0ko\J մDJB!B!$jIDezHkY}UGu@TFyuDT/`K'P ś9*#t @:4\XoCWlEϥq~<;s+UOXfmُC ۫ʥé`ThwOJT9(g|LE -A] Qq&"<8~gljOxtpСەAX#\n0Icr5:O3.js0#x(٬&Tȳ/\C"?JB!B!$JMQY[F8S^] 4і=DY:|Lq2ЃX{8&-dzB%̝ iJo.n:u*şヱ hW5F-{cZ491GP!߃o ~\bt;3_[m(sZR˅I)*X%b؍m{5B˱-k9/u 9ü}[TKyh:["T\}WYٕr--3,Ofb1-dxZՒCQI!B!DiYj/SPF~߹ZLFuuDTyaҚ)ai>[A3aЬe6s _A~3z<0`>n67}47tk+; uzCiBGe`mĽjRw=hxk7l?K:;=vOB~k>鄎v;9Xyg\Um~mzOEq89 ]-lX1f3lWC}}5 ow^%‘v/栴@ ƻ1wD|ڼ5^m E+qsLxCt=vN\U(* !B!qzJ3GQQY?wD!2F"3w(2][y5#ym]yUPU}O>zSm =]&Oⶏ&Sp[CNSpI8\qEN~#y׶y7?k70߯4l;t>~FN.ȷ{UfES=Pt0Wcix;pͷΫVm‡lnumw_S9pw?܍t 1`یWp]",j=NNO_u;nvuS#Ptan7q4=Ow1+OfeXZȽ w> 6 -,B!BH8Nzvr1dT^J Jks<RQ^h1f%\< }]y,T; \DY>=엺1q=vj -7l3;ۣ<'C6 cOwcNm;Ł2bkcKt6h=E&^.,B!BH8Q9C2=9GbZI-̵uDTZj*U!ju=}\7FT+|ml<2Ńs|9Lh\o 152 8~D.㖣*w^o7swKl/GbRx鉁z6>F~w݂+NGRcfau !7Ze(}d`4{ھZ+'u}g+**3I GlͬLmb 2r%")*53ʫ-:"*u][WVAiVb)[:xuƻZ]Do.P^^uuqDs5 ,NEg} 쁒MeSaƺXf5~%6Zݻ2|0l)V]0~=dL<{k(2>苏۽zk:b29oZ?; 1}1xzN߁/߸{W!fWoI~̯ѯKw;w}C$B!BFfŭ}˻^PV&3*C;LBW֌Eet3*5j o_GD%|mIH: lxd[॥^\ᙅ.Z-<wMsq$OpW~"r{^xb]R-H'3BTÔgqT3ڿWc9YcqxpE V]0zNl /Ьl|.x{8O!%%Waʉfv _m^ 7VMF^Ð 6|0=Eh]xw ,;s{uFKGl[B j(Z]|)^|n=Vl!o4CM娲5x5o6wĐkpD0m\5AxMK]4I(y+Mf J'p51e%GNeF cFjrav߬>` ,rae(EgD#>_;ޜVY> /<xw0 W;^Cъ[_KK׻cAyNOlcOŘaw-ϰkߋ=0e_9,ۗ{Œ0xძ0x큘zi'XG.A;B!BH8QiY}?~g+*u廊 )F_P,@QeQ /4`G)-؎eDe˞pwYxp67v'T  ۉ+DMex.47`5sg[TEv6|NXefq3zJL;, /.6&TK[uls,R+;J=|Lv/*JS725.R'Q-WZ-m˃f",C٢r[qM N }B!BH8tғib:9**3ߡGʔLH:_=)_qH}/_߿ny/n|?~/|iyem}e0F㶃qߺhFJkz*]DGϫbfqW%o˔tfS)mRN̜>ǫ$l]HoR\t5M*5*9ow-ZܠBTtNN}fy*i!1cZVR] R>W娐Î*\uU`9)8LPTB!B!QDezaf QYCR1QJ&.CC³Tǰ{*e[QU%Er.쩈cOy81tPzT(5P{逞*F͂`, )Y-ѩmθ\+f1r_\|FO嫫B2&[qy6ˎʶ-1Ӟ@c`'jϓ;4Ӗ<9sgRHJ'Js)4[Y*R#AQI!B!D3ɌoaEQ\<QJ'IhVKf+[K]ضL1SfI[8Jx ̜A?BNMqBRJJ)ەlUAr x\:hJb)sg0p7'-մKGʌk֤TkPqmiÑP-gT !, K-@, 9C}yx_E< (š zW"+%V߄n3UIه+UZT&Q3#W3-Fo-3?VA35cRvrBPe=:S\)W{X&KRفs-ff2kNtta!9rO(-JQn5R}Mr9{F5$B!BHk礢RQQ+~R"H⼈JGym QYјR D)_7:xsE%!B!5N&*=d5(CQ)~ArҺN^"RGDJ+!+cx\..ѬEECCG6RTr$B!BFv1 7鉴H sTfAz0#)=(?(PEeRDFޣR6QyNȃ| PTB!B!Q#ET?wz-2]Ee#*ub::Geznw=2ED~0R$R'EFVRTr$B!BԌʌQipʤ/:Hd>ʹ#U: ǖaHJ]QG~7H]LGsT%E%!gJB!B!$j.*u[_\а+4Q"*&~G,UH##"**ucDJƯOԗ#fo3? ׬NRT#wG9c(* !B!qjQSgCFr 2*JH-BZ^1ցJ9f5 E%!B!5jQy42SEenb!(Qy+2Yc|$B!BFLY/6솴=Pi5b:**3UT"3o+*CuwEFԠ$E%!B!5N *oq'&ƽQI_5鏴Haf2*Q$E%!B!5N&*;˻BMjLQ3iy͐s**L< Qkٓj-(* !B!qrQfT@ڑ=ȬmfU&D8WrRkGͲYcʧ$$jPTB!B!QRԡfb:Y.2\PG(kbdDUTJ*VnJBE%!B!5A [!IMPORTANT] > **Do NOT install the OneDrive client from your distribution’s default repositories.** These packaged versions are **outdated, unsupported, and contain known defects.** > > Instead, install the **fully supported and actively maintained version** from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) ### Which Installation Method Should I Use? | Distribution & Version | Distribution Package Name & Link | Distribution Package Version | Correct Installation Method | |----------------------------------------|----------------------------------------------------------------------------------------------------------|:----------------------------------------------------:|-----------------------------| | Alpine Linux | [onedrive](https://pkgs.alpinelinux.org/packages?name=onedrive&branch=edge) |Alpine Linux Edge package | Alpine **Stable** may ship older versions. If your version is outdated, you need to build from source | | Arch Linux

Manjaro Linux | [onedrive-abraunegg](https://aur.archlinux.org/packages/onedrive-abraunegg/) |AUR package| Install via: `pamac build onedrive-abraunegg` from the Arch Linux User Repository (AUR)

**Note:** You must first install 'base-devel' as this is a pre-requisite for using the AUR

**Note:** If asked regarding a provider for 'd-runtime' and 'd-compiler', select 'liblphobos' and 'ldc'

**Note:** System must have at least 1GB of memory & 1GB swap space

AUR package `onedrive-abraunegg` follows the release versions
AUR package `onedrive-abraunegg-git` follows the 'master' branch | | CentOS Stream 8 | [onedrive](https://koji.fedoraproject.org/koji/packageinfo?packageID=26044) |EPEL 8 package| **Note:** You must install and enable the EPEL Repository first.

Install via: `sudo dnf install onedrive` | | CentOS Stream 9 | [onedrive](https://koji.fedoraproject.org/koji/packageinfo?packageID=26044) |EPEL 9 package| **Note:** You must install and enable the EPEL Repository first.

Install via: `sudo dnf install onedrive` | | CentOS Stream 10 | [onedrive](https://koji.fedoraproject.org/koji/packageinfo?packageID=26044) |EPEL 10 package| **Note:** You must install and enable the EPEL Repository first.

Install via: `sudo dnf install onedrive` | | Debian 11 | [onedrive](https://packages.debian.org/bullseye/source/onedrive) |Debian 11 package| Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | Debian 12 | [onedrive](https://packages.debian.org/bookworm/source/onedrive) |Debian 12 package| Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | Debian 13 | [onedrive](https://packages.debian.org/trixie/source/onedrive) |Debian 13 package| Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | Debian Sid | [onedrive](https://packages.debian.org/sid/onedrive) |Debian Sid package| Install via: `sudo apt install --no-install-recommends --no-install-suggests onedrive` | | Fedora | [onedrive](https://koji.fedoraproject.org/koji/packageinfo?packageID=26044) |Fedora Rawhide package| Install via: `sudo dnf install onedrive` | | FreeBSD | [onedrive](https://www.freshports.org/net/onedrive) |FreeBSD package| Install via: `pkg install onedrive` | | Gentoo | [onedrive](https://packages.gentoo.org/packages/net-misc/onedrive) |Gentoo package| Install via: `sudo emerge net-misc/onedrive` | | Homebrew | [onedrive-cli](https://formulae.brew.sh/formula/onedrive-cli) |Homebrew package | Install via: `brew install onedrive-cli` | | Linux Mint 21.x | [onedrive](https://community.linuxmint.com/software/view/onedrive) |Ubuntu 22.04 package | Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | Linux Mint 22.x | [onedrive](https://community.linuxmint.com/software/view/onedrive) |Ubuntu 24.04 package | Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | Linux Mint Debian Edition 6 | [onedrive](https://community.linuxmint.com/software/view/onedrive) |Debian 12 package| Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | Linux Mint Debian Edition 7 | [onedrive](https://community.linuxmint.com/software/view/onedrive) |Debian 13 package| Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | NixOS | [onedrive](https://search.nixos.org/packages?channel=25.05&query=onedrive) |nixpkgs unstable package| Install via: `nix-env -iA nixpkgs.onedrive` **or** `services.onedrive.enable = true` in `configuration.nix` | | MX Linux 25 | [onedrive](https://mxrepo.com/mx/repo/pool/main/o/onedrive/) |MX Linux package| Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | OpenSUSE | [onedrive](https://software.opensuse.org/package/onedrive) |openSUSE Tumbleweed package| Install via: `sudo zypper install onedrive` | | OpenSUSE Build Service | [onedrive](https://build.opensuse.org/package/show/home:npreining:debian-ubuntu-onedrive/onedrive) | No API available for version information | | | Raspbian | [onedrive](https://archive.raspbian.org/raspbian/pool/main/o/onedrive/) |Raspbian Stable package | Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | RedHat Enterprise Linux 8 | [onedrive](https://koji.fedoraproject.org/koji/packageinfo?packageID=26044) |EPEL 8 package| **Note:** You must install and enable the EPEL Repository first.

Install via: `sudo dnf install onedrive` | | RedHat Enterprise Linux 9 | [onedrive](https://koji.fedoraproject.org/koji/packageinfo?packageID=26044) |EPEL 9 package| **Note:** You must install and enable the EPEL Repository first.

Install via: `sudo dnf install onedrive` | | RedHat Enterprise Linux 10 | [onedrive](https://koji.fedoraproject.org/koji/packageinfo?packageID=26044) |EPEL 10 package| **Note:** You must install and enable the EPEL Repository first.

Install via: `sudo dnf install onedrive` | | Slackware | [onedrive](https://slackbuilds.org/result/?search=onedrive&sv=) |SlackBuilds package| Install via SlackBuilds: https://slackbuilds.org/result/?search=onedrive | | Solus | [onedrive](https://packages.getsol.us/shannon/o/onedrive/?sort=time&order=desc) |Solus package| Install via: `sudo eopkg install onedrive` | | Ubuntu 22.04 LTS | [onedrive](https://packages.ubuntu.com/jammy/onedrive) |Ubuntu 22.04 package | Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | | Ubuntu 24.04 LTS | [onedrive](https://packages.ubuntu.com/noble/onedrive) |Ubuntu 24.04 package | Install from the openSUSE Build Service (OBS) repository by following the [Ubuntu / Debian Package Installation Guide](ubuntu-package-install.md) | > [!IMPORTANT] > Distribution versions that are considered **End-of-Life (EOL)** are **no longer supported** or tested with current client releases. > [!IMPORTANT] > Distribution package maintainers are volunteers who generously contribute their time to make software available for your system. New releases of the client may take some time to appear in your distribution’s repositories. > > If you believe a new release is significantly delayed, please contact your distribution’s package maintainer directly to request an update. > > **Do not open a bug report or discussion about this here**, as we have no control over the packaging process for your distribution. ### When Should You Build From Source? You should only build from source in the following circumstances: 1. You are packaging for a custom or minimal distribution. 2. Your distribution does not have a package for your to install. Refer to [repology](https://repology.org/project/onedrive/versions) as a source of all 'onedrive' client versions available across tracked distributions. 3. You require code newer than the latest release or are building a Pull Request to validate a bugfix. Outside of these 3 reasons, you should not be building the client yourself. You should endeavour where possible to use a pre-built package. > [!IMPORTANT] > If your distribution does not currently offer a packaged version of the client, you should **request that your distribution maintainers package and support it** as part of their official repositories. ## Building from Source If you need to build the client from source, follow this high-level process: 1. Ensure your system meets the [minimum build requirements](#minimum-build-requirements). 2. Install the necessary build dependencies and a supported D compiler. 3. Clone the repository, configure the build options, compile, and install the client. ### Minimum Build Requirements * For successful compilation of this application, it's crucial that the build environment is equipped with a minimum of 1GB of memory and an additional 1GB of swap space. * Install the required distribution package dependencies covering the required development tools and development libraries for curl, sqlite and dbus where required. * Install the [Digital Mars D Compiler (DMD)](https://dlang.org/download.html), [LDC – the LLVM-based D Compiler](https://github.com/ldc-developers/ldc), or, at least version 15 of the [GNU D Compiler (GDC)](https://www.gdcproject.org/) > [!IMPORTANT] > To compile this application successfully, the minimum supported versions of each compiler are: DMD **2.091.1**, LDC **1.20.1**, and, GDC **15**. Ensuring compatibility and optimal performance necessitates the use of these specific versions or their more recent updates. > > You only need 1 compiler installed. You do not need to install DMD, LDC and GDC. Please *pick* the most applicable compiler for your distribution. #### Installing DMD Compiler To install the DMD Compiler, this can be achieved in the following manner: ```text curl -fsS https://dlang.org/install.sh | bash -s dmd ``` > [!NOTE] > Note the `source ~/dlang/dmd-X.XXX.X/activate` string as this will be needed later when building the client. #### Installing LDC Compiler To install the LDC Compiler, this can be achieved in the following manner: ```text curl -fsS https://dlang.org/install.sh | bash -s ldc ``` > [!NOTE] > Note the `source ~/dlang/ldc-X.XX.X/activate` string as this will be needed later when building the client. #### Installing GDC Compiler You will need at least GDC version 15. If your distribution's repositories include a suitable version, you can install it from there. Common names for the GDC package are listed on the [GDC website](https://www.gdcproject.org/downloads#linux-distribution-packages). If the package is unavailable or its version is too old, you can try building it from source following [these instructions](https://wiki.dlang.org/GDC/Installation). ### Install Build Dependencies (By Distribution) #### Arch Linux | Manjaro Linux ```text sudo pacman -S git make pkg-config curl sqlite dbus ldc ``` For GUI notifications the following is also necessary: ```text sudo pacman -S libnotify ``` #### CentOS 6.x | RHEL 6.x CentOS 6.x and RHEL 6.x reached End of Life status on November 30th 2020 and is no longer supported or tested against. #### CentOS 7.x | RHEL 7.x CentOS 7.x and RHEL 7.x reached End of Life status on June 30th 2024 and is no longer supported or tested against. #### CentOS Stream 8 | CentOS Stream 9 | CentOS Stream 10 ```text sudo dnf groupinstall 'Development Tools' sudo dnf install libcurl-devel sqlite-devel dbus-devel curl -fsS https://dlang.org/install.sh | bash -s dmd ``` For GUI notifications the following is also necessary: ```text sudo dnf install libnotify-devel ``` #### Debian 9 Debian 9 reached the end of its five-year LTS window on July 18th 2020 and is no longer supported or tested against. #### Debian 10 Debian 10 reached the end of its five-year LTS window on September 10th 2022 and is no longer supported or tested against. #### Debian 11 | Debian 12 | Debian 13 | Linux Mint Debian Edition 6 | Linux Mint Debian Edition 7 - x86_64 ```text sudo apt install build-essential sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl systemd-dev libdbus-1-dev curl -fsS https://dlang.org/install.sh | bash -s dmd ``` For GUI notifications the following is also necessary: ```text sudo apt install libnotify-dev ``` #### Debian 11 | Debian 12 | Debian 13 - ARMHF and ARM64 > [!NOTE] > For Debian ARM platforms it is advisable to use the distribution provided 'ldc' package to ensure compiler consistency. ```text sudo apt install build-essential sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl ldc systemd-dev libdbus-1-dev ``` For GUI notifications the following is also necessary: ```text sudo apt install libnotify-dev ``` #### Fedora > [!NOTE] > Fedora 41 and above uses **dnf5** which removes some deprecated aliases, specifically 'groupinstall' in this instance. ```text sudo dnf group install development-tools sudo dnf install libcurl-devel sqlite-devel dbus-devel ``` Before running the dmd install you need to check for the option 'use-keyboxd' in your gnupg common.conf file and comment it out while running the install. ```text curl -fsS https://dlang.org/install.sh | bash -s dmd ``` Or you may get the following error: ```text myuser@fedora:~$ curl -fsS https://dlang.org/install.sh | bash -s dmd Downloading https://dlang.org/d-keyring.gpg ######################################################################## 100.0% gpg: Note: Specified keyrings are ignored due to option "use-keyboxd" gpg: Signature made Thu 06 Mar 2025 10:45:29 GMT gpg: using RSA key F3F896F3274BBD9BBBA59058710592E7FB7AF6CA gpg: Can't check signature: No public key Invalid signature https://dlang.org/d-keyring.gpg.sig ``` For GUI notifications the following is also necessary: ```text sudo dnf install libnotify-devel ``` #### FreeBSD > [!NOTE] > Install the required FreeBSD packages as 'root' unless you have installed 'sudo' > > For FreeBSD it is advisable to use the distribution provided 'ldc' package to ensure compiler consistency. ```text pkg install bash bash-completion gmake pkgconf autoconf automake logrotate libinotify git sqlite3 ldc ``` For GUI notifications the following is also necessary: ```text pkg install libnotify ``` #### Gentoo ```text sudo emerge --onlydeps net-misc/onedrive ``` #### MX Linux 25 ```text sudo apt install build-essential sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl systemd-dev libdbus-1-dev curl -fsS https://dlang.org/install.sh | bash -s dmd ``` For GUI notifications the following is also necessary: ```text sudo apt install libnotify-dev ``` #### OpenSUSE Leap | OpenSUSE Tumbleweed ```text sudo zypper refresh sudo zypper install gcc git libcurl-devel sqlite3-devel dmd phobos-devel phobos-devel-static dbus-1-devel ``` For GUI notifications the following is also necessary: ```text sudo zypper install libnotify-devel ``` #### Raspbian - ARMHF and ARM64 > [!CAUTION] > The minimum LDC compiler version required to compile this application is 1.20.1, which is not available for Debian Buster or distributions based on Debian Buster. You are advised to first upgrade your platform distribution to one that is based on Debian Bullseye (Debian 11) or later. > [!NOTE] > These dependencies were validated using: > * `Linux raspberrypi 5.10.92-v8+ #1514 SMP PREEMPT Mon Jan 17 17:39:38 GMT 2022 aarch64` (2022-01-28-raspios-bullseye-armhf-lite) using Raspberry Pi 3B (revision 1.2) > * `Linux raspberrypi 5.10.92-v8+ #1514 SMP PREEMPT Mon Jan 17 17:39:38 GMT 2022 aarch64` (2022-01-28-raspios-bullseye-arm64-lite) using Raspberry Pi 3B (revision 1.2) > * `Linux ubuntu 5.15.0-1005-raspi #5-Ubuntu SMP PREEMPT Mon Apr 4 12:21:48 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux` (ubuntu-22.04-preinstalled-server-arm64+raspi) using Raspberry Pi 3B (revision 1.2) ```text sudo apt install build-essential sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl ldc systemd-dev libdbus-1-dev ``` For GUI notifications the following is also necessary: ```text sudo apt install libnotify-dev ``` #### RedHat Enterprise Linux (RHEL) 8 | RedHat Enterprise Linux (RHEL) 9 | RedHat Enterprise Linux (RHEL) 10 ```text sudo dnf groupinstall 'Development Tools' sudo dnf install libcurl-devel sqlite-devel dbus-devel curl -fsS https://dlang.org/install.sh | bash -s dmd ``` For GUI notifications the following is also necessary: ```text sudo dnf install libnotify-devel ``` > [!NOTE] > **Make sure repos are enabled/subscribed**. Minimal images/containers sometimes don’t have group metadata; on those, the group may appear “not available” until you enable the right repos (or use a full image). #### Ubuntu 16.x Ubuntu 16.x LTS reached the end of its five-year LTS window on April 30th 2021 and is no longer supported or tested against. #### Ubuntu 18.x Ubuntu 18.x LTS reached the end of its five-year LTS window on May 31th 2023 and is no longer supported or tested against. #### Ubuntu 20.x Ubuntu 20.x LTS reached the end of its five-year LTS window on May 31th 2025 and is no longer supported or tested against. #### Ubuntu 22.x | Ubuntu 24.x > [!NOTE] > These dependency requirements also apply to any distribution derived from Ubuntu, including but not limited to: > * Lubuntu > * Linux Mint > * Pop!_OS > * Peppermint OS > * Zorin OS ```text sudo apt install build-essential sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl systemd-dev libdbus-1-dev curl -fsS https://dlang.org/install.sh | bash -s dmd ``` For GUI notifications the following is also necessary: ```text sudo apt install libnotify-dev ``` ## Clone, Configure, Build, Install ### High Level Steps to building the OneDrive Client for Linux The overall process is as follows: 1. Install the required platform dependencies (see above) 2. If necessary, enable your DMD or LDC compiler environment 3. Clone the GitHub repository 4. Run the configure script adding any applicable build options (see below), then build the application 5. Either run the built binary directly from the build directory, or install it system-wide 6. If applicable, deactivate the DMD or LDC compiler environment when finished ### Building the Application Using Default configure Settings #### Building on Linux using DMD, LDC or GDC You must first **activate** the compiler environment before building. For example: ```text source ~/dlang/dmd-2.091.1/activate # or source ~/dlang/ldc-1.20.1/activate ``` This command updates your environment (`PATH`, `LIBRARY_PATH`, `LD_LIBRARY_PATH`, etc.) so that the correct compiler is available. If you skip this step, the build will fail because the compiler will not be found. > [!NOTE] > Replace the `source` string with the compiler environment activation string displayed when you installed the relevant compiler. Once the compiler is activated, clone, build and install the client: ```text git clone https://github.com/abraunegg/onedrive.git cd onedrive ./configure make clean; make; sudo make install deactivate ``` > [!NOTE] > If using GDC ≥ 15, specify it explicitly when configuring the application: > ```text > ./configure DC=gdc > ``` #### Building on FreeBSD using gmake ```text git clone https://github.com/abraunegg/onedrive.git cd onedrive ./configure gmake clean; gmake; gmake install ``` > [!NOTE] > Build and install the application as 'root' unless you have installed 'sudo' #### Building on ARM | Raspberry Pi > [!CAUTION] > The minimum LDC compiler version required to compile this application is 1.20.1, which is not available for Debian Buster or distributions based on Debian Buster. You are advised to first upgrade your platform distribution to one that is based on Debian Bullseye (Debian 11) or later. > [!IMPORTANT] > For successful compilation of this application, it's crucial that the build environment is equipped with a minimum of 1GB of memory and an additional 1GB of swap space. To verify your system's swap space availability, you can use the `swapon` command. Ensuring these requirements are met is vital for the application's compilation process. > [!NOTE] > The `configure` step will detect the correct version of LDC to be used when compiling the client under ARMHF and ARM64 CPU architectures. ```text git clone https://github.com/abraunegg/onedrive.git cd onedrive ./configure; make clean; make; sudo make install ``` ### Build Options for Customising the Application The `configure` script provides several options that allow you to tailor the build to your needs. These options can be used to enable or adjust specific features in the client, including: * Enabling GUI desktop notifications * Enabling shell completion support * Enabling internal debugging to assist with troubleshooting and performance analysis * Specifying a custom systemd service installation directory #### Build Option: Enable GUI Desktop Notifications To enable GUI notification support, include the `--enable-notifications` option when running `configure`, for example: ```text ./configure --enable-notifications ``` Enabling this option allows the client to send GUI notifications through the Display Manager via the DBus interface. > [!TIP] > Package maintainers are encouraged to enable this option. > > When this option is enabled, the client automatically checks at runtime whether GUI notifications can be delivered via the Display Manager through the DBus interface. If this option is **not** enabled, GUI notifications are **disabled**. #### Build Option: Enable Shell Completion Support To enable command-line shell completions, include the `--enable-completions` option when running `configure`, for example: ```text ./configure --enable-completions ``` When enabled, completion scripts will be installed for **bash**, **zsh**, and **fish** shells. By default, the installation directories are detected automatically. If needed, you can manually specify the installation paths using the following options: ```text --with-bash-completion-dir=

--with-zsh-completion-dir= --with-fish-completion-dir= ``` > [!TIP] > Package maintainers are encouraged to enable this option. #### Build Option: Enabling internal debugging To enable internal debugging support, include the `--enable-debug` option when running `configure`, for example: ```text ./configure --enable-debug ``` Enabling this option builds the client with additional debug symbols outside of creating a separate debug package build. This is particularly useful when investigating performance issues (e.g. with `perf`) or diagnosing application crashes. **What difference does this make?** Without this option, if the application encounters a crash, the stack trace may contain unresolved symbols, often shown as `??:??`, which makes identifying the cause very difficult. With `--enable-debug` enabled, the resulting crash stack trace includes full source file and line information. This allows the issue to be located and isolated quickly and accurately. > [!TIP] > Package maintainers are encouraged to enable this option. #### Build Option: Customising the Systemd Service Installation Directory By default, systemd service files are installed into the directories detected via `pkg-config --variable=systemdsystemunitdir systemd` and related settings. If you need to override these locations, specify one or both of the following options when running `configure`: ```text --with-systemdsystemunitdir= # System-wide service unit directory --with-systemduserunitdir= # User-level service unit directory ``` To **disable** installation of a service file entirely, pass `no` as the directory value. For example: ```text ./configure --with-systemduserunitdir=no ``` This prevents the corresponding service unit from being installed. ## Upgrading the Client > [!CAUTION] > Before starting any upgrade, **stop any running systemd service for the client**. This ensures the service is restarted using the updated binary. How you upgrade depends on how the client was originally installed: ### If installed from a distribution package When the package maintainer publishes an updated version, the client will be upgraded automatically as part of your normal system package updates (e.g., `apt upgrade`, `dnf upgrade`, `zypper up`, etc.). ### If installed from source To upgrade a source-built installation, the recommended approach is: 1. Uninstall the existing client (see instructions below). 2. Re-clone the repository. 3. Re-compile and re-install the new version. > [!NOTE] > The uninstall process removes all components, including systemd service files. > If you created custom systemd unit files (e.g., for SharePoint library access), you will need to recreate or restore them after re-installation. You **may** choose to skip the uninstall step and simply re-compile and re-install over the top. However, this risks leaving **multiple** `onedrive` **binaries** on your system. Depending on your system `PATH`, the wrong binary may be executed. After installation, verify the version in use: ```text onedrive --version ``` This confirms that the upgrade was successful. ## Uninstalling the client How to uninstall depends on how the client was installed. ### If installed from a distribution package Uninstall the client using your distribution’s package management tools. Refer to your distribution’s documentation for the correct removal command (e.g. `apt remove`, `dnf remove`, `zypper remove`, etc.). ### If installed from source If you built and installed the client from a GitHub clone, run the following command from within the cloned repository directory: ```text sudo make uninstall ``` This removes the installed `onedrive` binary and associated system files. #### Optional: Remove client configuration and state If you do not plan to upgrade or reinstall and wish to remove all client data, run: ```text rm -rf ~/.config/onedrive ``` > [!IMPORTANT] > If you used the `--confdir` option, replace `~/.config/onedrive` with the custom configuration directory you specified. #### Optional: Remove only the application key If you want to retain your items database but remove the stored authentication token, run: ```text rm -f ~/.config/onedrive/refresh_token ``` This preserves sync state while requiring re-authentication on next run.onedrive-2.5.10/docs/known-issues.md000066400000000000000000000150211513710110600173230ustar00rootroot00000000000000# List of Identified Known Issues The following points detail known issues associated with this client: ## Renaming or Moving Files in Standalone Mode causes online deletion and re-upload to occur **Issue Tracker:** [#876](https://github.com/abraunegg/onedrive/issues/876), [#2579](https://github.com/abraunegg/onedrive/issues/2579) **Summary:** Renaming or moving files and/or folders while using the standalone sync option `--sync` this results in unnecessary data deletion online and subsequent re-upload. **Detailed Description:** In standalone mode (`--sync`), the renaming or moving folders locally that have already been synchronized leads to the data being deleted online and then re-uploaded in the next synchronization process. **Technical Explanation:** This behavior is expected from the client under these specific conditions. Renaming or moving files is interpreted as deleting them from their original location and creating them in a new location. In standalone sync mode, the client lacks the capability to track file system changes (including renames and moves) that occur when it is not running. This limitation is the root cause of the observed 'deletion and re-upload' cycle. **Recommended Workaround:** For effective tracking of file and folder renames or moves to new local directories, it is recommended to run the client in service mode (`--monitor`) rather than in standalone mode. This approach allows the client to immediately process these changes, enabling the data to be updated (renamed or moved) in the new location on OneDrive without undergoing deletion and re-upload. ## Application 'stops' running without any visible reason **Issue Tracker:** [#494](https://github.com/abraunegg/onedrive/issues/494), [#753](https://github.com/abraunegg/onedrive/issues/753), [#792](https://github.com/abraunegg/onedrive/issues/792), [#884](https://github.com/abraunegg/onedrive/issues/884), [#1162](https://github.com/abraunegg/onedrive/issues/1162), [#1408](https://github.com/abraunegg/onedrive/issues/1408), [#1520](https://github.com/abraunegg/onedrive/issues/1520), [#1526](https://github.com/abraunegg/onedrive/issues/1526) **Summary:** Users experience sudden shutdowns in a client application during file transfers with Microsoft's Europe Data Centers, likely due to unstable internet or HTTPS inspection issues. This problem, often signaled by an error code of 141, is related to the application's reliance on Curl and OpenSSL. Resolution steps include system updates, seeking support from OS vendors, ISPs, OpenSSL/Curl teams, and providing detailed debug logs to Microsoft for analysis. **Detailed Description:** The application unexpectedly stops functioning during upload or download operations when using the client. This issue occurs without any apparent reason. Running `echo $?` after the unexpected exit may return an error code of 141. This problem predominantly arises when the client interacts with Microsoft's Europe Data Centers. **Technical Explanation:** The client heavily relies on Curl and OpenSSL for operations with the Microsoft OneDrive service. A common observation during this error is an entry in the HTTPS Debug Log stating: ``` OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 ``` To confirm this as the root cause, a detailed HTTPS debug log can be generated with these commands: ``` --verbose --verbose --debug-https ``` This error typically suggests one of the following issues: * An unstable internet connection between the user and the OneDrive service. * An issue with HTTPS transparent inspection services that monitor the traffic en route to the OneDrive service. **Recommended Resolution Steps:** Recommended steps to address this issue include: * Updating your operating system to the latest version. * Configure the application to only use HTTP/1.1 * Configure the application to use IPv4 only. * Upgrade your 'curl' application to the latest available from the curl developers. * Seeking assistance from your OS vendor. * Contacting your Internet Service Provider (ISP) or your IT Help Desk. * Reporting the issue to the OpenSSL and/or Curl teams for improved handling of such connection failures. * Creating a HTTPS Debug Log during the issue and submitting a support request to Microsoft with the log for their analysis. For more in-depth SSL troubleshooting, please read: https://maulwuff.de/research/ssl-debugging.html ## AADSTS70000 returned during initial authorisation or re-authentication **Summary:** During initial authentication or when running `onedrive --reauth`, the client fails with: ``` AADSTS70000: The provided value for the 'code' parameter is not valid ``` This issue is **not a client bug** and is caused by the authorisation code being invalid at the time it is redeemed. **Detailed Description:** When authenticating, the user is redirected to a Microsoft login page in their web browser. After successful consent, the browser is redirected to a URL of the form: ``` https://login.microsoftonline.com/common/oauth2/nativeclient?code= ``` The user must copy this URL and paste it back into the CLI when prompted. Microsoft authorisation codes are single-use and short-lived. If the code is altered, reused, expired, or otherwise invalidated before the client redeems it, Microsoft Entra ID returns AADSTS70000. **Technical Explanation:** The most common cause is **browser-side interference** with the redirect URL before the user copies it. Privacy and security tooling (such as ad-blockers, URL sanitisation, or “remove tracking parameters” features) can modify or invalidate the `code` query parameter. Other contributing factors include: * Copying the wrong URL (for example, not copying directly from the browser address bar immediately after consent) * Refreshing the page or attempting to reuse the same redirect URI * Waiting too long before pasting the redirect URI back into the CLI Once an authorisation code is invalid, it **cannot** be reused or recovered. **Recommended Resolution Steps:** 1. Re-run authentication using: ``` onedrive --reauth ``` 2. Use a private/incognito browser session or a clean browser profile 3. Temporarily disable browser extensions or privacy features that modify URLs for the Microsoft login pages (for example: uBlock Origin, ClearURLs, Brave Shields) 4. Complete the browser consent flow and immediately copy the redirect URI from the address bar and paste it into the CLI **Additional Notes:** For security reasons, users should **never post full redirect URIs** (they contain sensitive authorisation codes). Any such URLs must be redacted when shared in logs, issues, or support requests.onedrive-2.5.10/docs/national-cloud-deployments.md000066400000000000000000000170551513710110600221410ustar00rootroot00000000000000# How to configure access to specific Microsoft Azure deployments > [!CAUTION] > Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. ## Process Overview In some cases it is a requirement to utilise specific Microsoft Azure cloud deployments to conform with data and security requirements that requires data to reside within the geographic borders of that country. Current national clouds that are supported are: * Microsoft Cloud for US Government * Microsoft Cloud Germany * Azure and Office365 operated by VNET in China In order to successfully use these specific Microsoft Azure deployments, the following steps are required: 1. Register an application with the Microsoft identity platform using the Azure portal 2. Configure the new application with the appropriate authentication scopes 3. Validate that the authentication / redirect URI is correct for your application registration 4. Configure the onedrive client to use the new application id as provided during application registration 5. Configure the onedrive client to use the right Microsoft Azure deployment region that your application was registered with 6. Authenticate the client ## Step 1: Register a new application with Microsoft Azure 1. Log into your applicable Microsoft Azure Portal with your applicable Office365 identity: | National Cloud Environment | Microsoft Azure Portal | |---|---| | Microsoft Cloud for US Government | https://portal.azure.com/ | | Microsoft Cloud Germany | https://portal.azure.com/ | | Azure and Office365 operated by VNET | https://portal.azure.cn/ | 2. Select 'Azure Active Directory' as the service you wish to configure 3. Under 'Manage', select 'App registrations' to register a new application 4. Click 'New registration' 5. Type in the appropriate details required as per below: ![application_registration](./images/application_registration.jpg) 6. To save the application registration, click 'Register' and something similar to the following will be displayed: ![application_registration_done](./images/application_registration_done.jpg) > [!NOTE] > The Application (client) ID UUID as displayed after client registration, is what is required as the 'application_id' for Step 4 below. ## Step 2: Configure application authentication scopes Configure the API permissions as per the following: | API / Permissions name | Type | Description | Admin consent required | |---|---|---|---| | Files.ReadWrite | Delegated | Have full access to user files | No | | Files.ReadWrite.All | Delegated | Have full access to all files user can access | No | | Sites.ReadWrite.All | Delegated | Have full access to all items in all site collections | No | | offline_access | Delegated | Maintain access to data you have given it access to | No | ![authentication_scopes](./images/authentication_scopes.jpg) ## Step 3: Validate that the authentication / redirect URI is correct Add the appropriate redirect URI for your Azure deployment: ![authentication_response_uri](./images/authentication_response_uri.jpg) A valid entry for the response URI should be one of: * https://login.microsoftonline.us/common/oauth2/nativeclient (Microsoft Cloud for US Government) * https://login.microsoftonline.de/common/oauth2/nativeclient (Microsoft Cloud Germany) * https://login.chinacloudapi.cn/common/oauth2/nativeclient (Azure and Office365 operated by VNET in China) For a single-tenant application, it may be necessary to use your specific tenant id instead of "common": * https://login.microsoftonline.us/example.onmicrosoft.us/oauth2/nativeclient (Microsoft Cloud for US Government) * https://login.microsoftonline.de/example.onmicrosoft.de/oauth2/nativeclient (Microsoft Cloud Germany) * https://login.chinacloudapi.cn/example.onmicrosoft.cn/oauth2/nativeclient (Azure and Office365 operated by VNET in China) ## Step 4: Configure the onedrive client to use new application registration Update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following: ```text application_id = "insert valid entry here" ``` This will reconfigure the client to use the new application registration you have created. **Example:** ```text application_id = "22c49a0d-d21c-4792-aed1-8f163c982546" ``` ## Step 5: Configure the onedrive client to use the specific Microsoft Azure deployment Update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following: ```text azure_ad_endpoint = "insert valid entry here" ``` Valid entries are: * USL4 (Microsoft Cloud for US Government) * USL5 (Microsoft Cloud for US Government - DOD) * DE (Microsoft Cloud Germany) * CN (Azure and Office365 operated by VNET in China) This will configure your client to use the correct Azure AD and Graph endpoints as per [https://docs.microsoft.com/en-us/graph/deployments](https://docs.microsoft.com/en-us/graph/deployments) **Example:** ```text azure_ad_endpoint = "USL4" ``` If the Microsoft Azure deployment does not support multi-tenant applications, update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following: ```text azure_tenant_id = "insert valid entry here" ``` This will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common". The tenant id may be the GUID Directory ID (formatted "00000000-0000-0000-0000-000000000000"), or the fully qualified tenant name (e.g. "example.onmicrosoft.us"). The GUID Directory ID may be located in the Azure administration page as per [https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id](https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id). Note that you may need to go to your national-deployment-specific administration page, rather than following the links within that document. The tenant name may be obtained by following the PowerShell instructions on [https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id](https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id); it is shown as the "TenantDomain" upon completion of the "Connect-AzureAD" command. **Example:** ```text azure_tenant_id = "example.onmicrosoft.us" # or azure_tenant_id = "0c4be462-a1ab-499b-99e0-da08ce52a2cc" ``` ## Step 6: Authenticate the client Run the application without any additional command switches. You will be asked to open a specific URL by using your web browser where you will have to login into your Microsoft Account and give the application the permission to access your files. After giving permission to the application, you will be redirected to a blank page. Copy the URI of the blank page into the application. ```text [user@hostname ~]$ onedrive Authorize this app visiting: https://..... Enter the response uri: ``` **Example:** ``` [user@hostname ~]$ onedrive Authorize this app visiting: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=22c49a0d-d21c-4792-aed1-8f163c982546&scope=Files.ReadWrite%20Files.ReadWrite.all%20Sites.ReadWrite.All%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient Enter the response uri: https://login.microsoftonline.com/common/oauth2/nativeclient?code= Application has been successfully authorised, however no additional command switches were provided. Please use --help for further assistance in regards to running this application. ``` onedrive-2.5.10/docs/podman.md000066400000000000000000000502471513710110600161450ustar00rootroot00000000000000# Run the OneDrive Client for Linux under Podman This client can be run as a Podman container, with 3 available container base options for you to choose from: | Container Base | Docker Tag | Description | i686 | x86_64 | ARMHF | AARCH64 | |----------------|-------------|----------------------------------------------------------------|:------:|:------:|:-----:|:-------:| | Alpine Linux | edge-alpine | Podman container based on Alpine 3.23 using 'master' |❌|✔|❌|✔| | Alpine Linux | alpine | Podman container based on Alpine 3.23 using latest release |❌|✔|❌|✔| | Debian | debian | Podman container based on Debian 13 using latest release |✔|✔|✔|✔| | Debian | edge | Podman container based on Debian 13 using 'master' |✔|✔|✔|✔| | Debian | edge-debian | Podman container based on Debian 13 using 'master' |✔|✔|✔|✔| | Debian | latest | Podman container based on Debian 13 using latest release |✔|✔|✔|✔| | Fedora | edge-fedora | Podman container based on Fedora 43 using 'master' |❌|✔|❌|✔| | Fedora | fedora | Podman container based on Fedora 43 using latest release |❌|✔|❌|✔| These containers offer a simple monitoring-mode service for the OneDrive Client for Linux. The instructions below have been validated on: * Fedora 40 The instructions below will utilise the 'edge' tag, however this can be substituted for any of the other docker tags such as 'latest' from the table above if desired. The 'edge' Docker Container will align closer to all documentation and features, where as 'latest' is the release version from a static point in time. The 'latest' tag however may contain bugs and/or issues that will have been fixed, and those fixes are contained in 'edge'. Additionally there are specific version release tags for each release. Refer to https://hub.docker.com/r/driveone/onedrive/tags for any other Docker tags you may be interested in. > [!NOTE] > The below instructions for podman has been tested and validated when logging into the system as an unprivileged user (non 'root' user). ## High Level Configuration Steps 1. Install 'podman' as per your distribution platform's instructions if not already installed. 2. Disable 'SELinux' as per your distribution platform's instructions 3. Test 'podman' by running a test container 4. Prepare the required podman volumes to store the configuration and data 5. Run the 'onedrive' container and perform authorisation 6. Running the 'onedrive' container under 'podman' ## Configuration Steps ### 1. Install 'podman' on your platform Install 'podman' as per your distribution platform's instructions if not already installed. ### 2. Disable SELinux on your platform In order to run the Docker container under 'podman', SELinux must be disabled. Without doing this, when the application is authenticated in the steps below, the following error will be presented: ```text ERROR: The local file system returned an error with the following message: Error Message: /onedrive/conf/refresh_token: Permission denied The database cannot be opened. Please check the permissions of ~/.config/onedrive/items.sqlite3 ``` The only known work-around for the above problem at present is to disable SELinux. Please refer to your distribution platform's instructions on how to perform this step. * Fedora: https://docs.fedoraproject.org/en-US/quick-docs/selinux-changing-states-and-modes/#_disabling_selinux * Red Hat Enterprise Linux: https://access.redhat.com/solutions/3176 Post disabling SELinux and reboot your system, confirm that `getenforce` returns `Disabled`: ```text $ getenforce Disabled ``` If you are still experiencing permission issues despite disabling SELinux, please read https://www.redhat.com/sysadmin/container-permission-denied-errors ### 3. Test 'podman' on your platform Test that 'podman' is operational for your 'non-root' user, as per below: ```bash [alex@fedora40-podman ~]$ podman pull fedora Resolved "fedora" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf) Trying to pull registry.fedoraproject.org/fedora:latest... Getting image source signatures Copying blob b30887322388 done | Copying config a1cd3cbf8a done | Writing manifest to image destination a1cd3cbf8adaa422629f2fcdc629fd9297138910a467b11c66e5ddb2c2753dff [alex@fedora40-podman ~]$ podman run fedora /bin/echo "Welcome to the Podman World" Welcome to the Podman World [alex@fedora40-podman ~]$ ``` ### 4. Configure the required podman volumes The 'onedrive' Docker container requires 2 podman volumes to operate: * Config Volume * Data Volume The first volume is the configuration volume that stores all the applicable application configuration + current runtime state. In a non-containerised environment, this normally resides in `~/.config/onedrive` - in a containerised environment this is stored in the volume tagged as `/onedrive/conf` The second volume is the data volume, where all your data from Microsoft OneDrive is stored locally. This volume is mapped to an actual directory point on your local filesystem and this is stored in the volume tagged as `/onedrive/data` #### 4.1 Prepare the 'config' volume Create the 'config' volume with the following command: ```bash podman volume create onedrive_conf ``` This will create a podman volume labeled `onedrive_conf`, where all configuration of your onedrive account will be stored. You can add a custom config file in this location at a later point in time if required. #### 4.2 Prepare the 'data' volume Create the 'data' volume with the following command: ```bash podman volume create onedrive_data ``` This will create a podman volume labeled `onedrive_data` and will map to a path on your local filesystem. This is where your data from Microsoft OneDrive will be stored. Keep in mind that: * The owner of this specified folder must not be root * Podman will attempt to change the permissions of the volume to the user the container is configured to run as > [!IMPORTANT] > Issues occur when this target folder is a mounted folder of an external system (NAS, SMB mount, USB Drive etc) as the 'mount' itself is owed by 'root'. If this is your use case, you *must* ensure your normal user can mount your desired target without having the target mounted by 'root'. If you do not fix this, your Podman container will fail to start with the following error message: > ```bash > ROOT level privileges prohibited! > ``` ### 5. First run of Docker container under podman and performing authorisation The 'onedrive' client within the container first needs to be authorised with your Microsoft account. This is achieved by initially running podman in interactive mode. Run the podman image with the commands below and make sure to change the value of `ONEDRIVE_DATA_DIR` to the actual onedrive data directory on your filesystem that you wish to use (e.g. `export ONEDRIVE_DATA_DIR="/home/abraunegg/OneDrive"`). > [!IMPORTANT] > The 'target' folder of `ONEDRIVE_DATA_DIR` must exist before running the podman container. The script below will create 'ONEDRIVE_DATA_DIR' so that it exists locally for the podman volume mapping to occur. It is also a requirement that the container be run using a non-root uid and gid, you must insert a non-root UID and GID (e.g.` export ONEDRIVE_UID=1000` and export `ONEDRIVE_GID=1000`). The script below will use `id` to evaluate your system environment to use the correct values. ```bash export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" export ONEDRIVE_UID=`id -u` export ONEDRIVE_GID=`id -g` mkdir -p ${ONEDRIVE_DATA_DIR} podman run -it --name onedrive --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \ -v onedrive_conf:/onedrive/conf:U,Z \ -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" \ driveone/onedrive:edge ``` > [!IMPORTANT] > In some scenarios, 'podman' sets the configuration and data directories to a different UID & GID as specified. To resolve this situation, you must run 'podman' with the `--userns=keep-id` flag to ensure 'podman' uses the UID and GID as specified. The updated script example when using `--userns=keep-id` is below: ```bash export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" export ONEDRIVE_UID=`id -u` export ONEDRIVE_GID=`id -g` mkdir -p ${ONEDRIVE_DATA_DIR} podman run -it --name onedrive --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \ --userns=keep-id \ -v onedrive_conf:/onedrive/conf:U,Z \ -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" \ driveone/onedrive:edge ``` > [!IMPORTANT] > If you plan to use the 'podman' built in auto-updating of container images described in 'Systemd Service & Auto Updating' below, you must pass an additional argument to set a label during the first run. The updated script example to support auto-updating of container images is below: ```bash export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" export ONEDRIVE_UID=`id -u` export ONEDRIVE_GID=`id -g` mkdir -p ${ONEDRIVE_DATA_DIR} podman run -it --name onedrive --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \ --userns=keep-id \ -v onedrive_conf:/onedrive/conf:U,Z \ -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" \ -e PODMAN=1 \ --label "io.containers.autoupdate=image" \ driveone/onedrive:edge ``` When the Podman container successfully starts: * You will be asked to open a specific link using your web browser * Login to your Microsoft Account and give the application the permission * After giving the permission, you will be redirected to a blank page * Copy the URI of the blank page into the application prompt to authorise the application Once the 'onedrive' application is authorised, the client will automatically start monitoring your `ONEDRIVE_DATA_DIR` for data changes to be uploaded to OneDrive. Files stored on OneDrive will be downloaded to this location. If the client is working as expected, you can detach from the container with Ctrl+p, Ctrl+q. ### 6. Running the 'onedrive' container under 'podman' #### 6.1 Check if the monitor service is running ```bash podman ps -f name=onedrive ``` #### 6.2 Show 'onedrive' runtime logs ```bash podman logs onedrive ``` #### 6.3 Stop running 'onedrive' container ```bash podman stop onedrive ``` #### 6.4 Start 'onedrive' container ```bash podman start onedrive ``` #### 6.5 Remove 'onedrive' container ```bash podman rm -f onedrive ``` ## Advanced Usage ### Systemd Service & Auto Updating Podman supports running containers as a systemd service and also auto updating of the container images. Using the existing running container you can generate a systemd unit file to be installed by the **root** user. To have your container image auto-update with podman, it must first be created with the label `"io.containers.autoupdate=image"` mentioned in step 5 above. ``` cd /tmp podman generate systemd --new --restart-policy on-failure --name -f onedrive /tmp/container-onedrive.service # copy the generated systemd unit file to the systemd path and reload the daemon cp -Z ~/container-onedrive.service /usr/lib/systemd/system systemctl daemon-reload #optionally enable it to startup on boot systemctl enable container-onedrive.service #check status systemctl status container-onedrive #start/stop/restart container as a systemd service systemctl stop container-onedrive systemctl start container-onedrive ``` To update the image using podman (Ad-hoc) ``` podman auto-update ``` To update the image using systemd (Automatic/Scheduled) ``` # Enable the podman-auto-update.timer service at system start: systemctl enable podman-auto-update.timer # Start the service systemctl start podman-auto-update.timer # Containers with the autoupdate label will be updated on the next scheduled timer systemctl list-timers --all ``` ### Editing the running configuration and using a 'config' file The 'onedrive' client should run in default configuration, however you can change this default configuration by placing a custom config file in the `onedrive_conf` podman volume. First download the default config from [here](https://raw.githubusercontent.com/abraunegg/onedrive/master/config) Then put it into your onedrive_conf volume path, which can be found with: ```bash podman volume inspect onedrive_conf ``` Or you can map your own config folder to the config volume. Make sure to copy all files from the volume into your mapped folder first. The detailed document for the config can be found here: [Application Configuration Options for the OneDrive Client for Linux](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md) ### Syncing multiple accounts There are many ways to do this, the easiest is probably to do the following: 1. Create a second podman config volume (replace `work` with your desired name): `podman volume create onedrive_conf_work` 2. And start a second podman monitor container (again replace `work` with your desired name): ```bash export ONEDRIVE_DATA_DIR_WORK="/home/abraunegg/OneDriveWork" export ONEDRIVE_UID=`id -u` export ONEDRIVE_GID=`id -g` mkdir -p ${ONEDRIVE_DATA_DIR_WORK} podman run -it --name onedrive_work --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \ --userns=keep-id \ -v onedrive_conf_work:/onedrive/conf:U,Z \ -v "${ONEDRIVE_DATA_DIR_WORK}:/onedrive/data:U,Z" \ -e PODMAN=1 \ --label "io.containers.autoupdate=image" \ driveone/onedrive:edge ``` ## Supported Podman Environment Variables | Variable | Purpose | Sample Value | | ---------------- | --------------------------------------------------- |:-------------:| | ONEDRIVE_UID | UserID (UID) to run as | 1000 | | ONEDRIVE_GID | GroupID (GID) to run as | 1000 | | ONEDRIVE_VERBOSE | Controls "--verbose" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DEBUG | Controls "--verbose --verbose" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DEBUG_HTTPS | Controls "--debug-https" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_RESYNC | Controls "--resync" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DOWNLOADONLY | Controls "--download-only" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_CLEANUPLOCAL | Controls "--cleanup-local-files" to cleanup local files and folders if they are removed online. Default is 0 | 1 | | ONEDRIVE_UPLOADONLY | Controls "--upload-only" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_NOREMOTEDELETE | Controls "--no-remote-delete" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_LOGOUT | Controls "--logout" switch. Default is 0 | 1 | | ONEDRIVE_REAUTH | Controls "--reauth" switch. Default is 0 | 1 | | ONEDRIVE_AUTHFILES | Controls "--auth-files" option. Default is "" | Please read [CLI Option: --auth-files](./application-config-options.md#cli-option---auth-files) | | ONEDRIVE_AUTHRESPONSE | Controls "--auth-response" option. Default is "" | Please read [CLI Option: --auth-response](./application-config-options.md#cli-option---auth-response) | | ONEDRIVE_DISPLAY_CONFIG | Controls "--display-running-config" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_SINGLE_DIRECTORY | Controls "--single-directory" option. Default = "" | "mydir" | | ONEDRIVE_DRYRUN | Controls "--dry-run" option. Default is 0 | 1 | | ONEDRIVE_DISABLE_DOWNLOAD_VALIDATION | Controls "--disable-download-validation" option. Default is 0 | 1 | | ONEDRIVE_DISABLE_UPLOAD_VALIDATION | Controls "--disable-upload-validation" option. Default is 0 | 1 | | ONEDRIVE_SYNC_SHARED_FILES | Controls "--sync-shared-files" option. Default is 0 | 1 | | ONEDRIVE_RUNAS_ROOT | Controls if the Docker container should be run as the 'root' user instead of 'onedrive' user. Default is 0 | 1 | | ONEDRIVE_SYNC_ONCE | Controls if the Docker container should be run in Standalone Mode. It will use Monitor Mode otherwise. Default is 0 | 1 | | ONEDRIVE_FILE_FRAGMENT_SIZE | Controls the fragment size when uploading large files to Microsoft OneDrive. The value specified is in MB. Default is 10, Limit is 60 | 25 | | ONEDRIVE_THREADS | Controls the value for the number of worker threads used for parallel upload and download operations. Default is 8, Limit is 16 | 4 | ### Environment Variables Usage Examples **Verbose Output:** ```bash podman run -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge ``` **Debug Output:** ```bash podman run -e ONEDRIVE_DEBUG=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge ``` **Perform a --resync:** ```bash podman run -e ONEDRIVE_RESYNC=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge ``` **Perform a --resync and --verbose:** ```bash podman run -e ONEDRIVE_RESYNC=1 -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge ``` **Perform a --logout:** ```bash podman run -it -e ONEDRIVE_LOGOUT=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge ``` **Perform a --logout and re-authenticate:** ```bash podman run -it -e ONEDRIVE_REAUTH=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge ``` **Perform a sync using ONEDRIVE_SINGLE_DIRECTORY:** ```bash podman run -e ONEDRIVE_SINGLE_DIRECTORY="path/which/needs/to/be/synced" -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge ``` > [!IMPORTANT] > Is using a Podman Environment Variable that requires you to specify a 'path' (ONEDRIVE_AUTHFILES, ONEDRIVE_AUTHRESPONSE, ONEDRIVE_SINGLE_DIRECTORY), the placement of quotes around the path is critically important. > > Please ensure you are formatting the option correctly: >``` > -e OPTION="path/which/needs/to/be/synced" >``` > Please also ensure that the path specified complies with the actual application usage argument. Please read the relevant config option advice in the [CLI Option Documentation](./application-config-options.md) ## Building a custom Podman image You can also build your own image instead of pulling the one from [hub.docker.com](https://hub.docker.com/r/driveone/onedrive): ```bash git clone https://github.com/abraunegg/onedrive cd onedrive podman build . -t local-onedrive -f contrib/docker/Dockerfile ``` There are alternate, smaller images available by building Dockerfile-debian or Dockerfile-alpine. These [multi-stage builder pattern](https://docs.docker.com/develop/develop-images/multistage-build/) Dockerfiles require Docker version at least 17.05. ### How to build and run a custom Podman image based on Debian ``` bash podman build . -t local-onedrive-debian -f contrib/docker/Dockerfile-debian podman run -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" --userns=keep-id local-onedrive-debian:latest ``` ### How to build and run a custom Podman image based on Alpine Linux ``` bash podman build . -t local-onedrive-alpine -f contrib/docker/Dockerfile-alpine podman run -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" --userns=keep-id local-onedrive-alpine:latest ``` ### How to build and run a custom Podman image for ARMHF (Raspberry Pi) Compatible with: * Raspberry Pi * Raspberry Pi 2 * Raspberry Pi Zero * Raspberry Pi 3 * Raspberry Pi 4 ``` bash podman build . -t local-onedrive-armhf -f contrib/docker/Dockerfile-debian podman run -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" --userns=keep-id local-onedrive-armhf:latest ``` ### How to build and run a custom Podman image for AARCH64 Platforms ``` bash podman build . -t local-onedrive-aarch64 -f contrib/docker/Dockerfile-debian podman run -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" --userns=keep-id local-onedrive-aarch64:latest ``` onedrive-2.5.10/docs/privacy-policy.md000066400000000000000000000114451513710110600176360ustar00rootroot00000000000000# Privacy Policy Effective Date: May 16 2018 ## Introduction This Privacy Policy outlines how OneDrive Client for Linux ("we," "our," or "us") collects, uses, and protects information when you use our software ("OneDrive Client for Linux"). We respect your privacy and are committed to ensuring the confidentiality and security of any information you provide while using the Software. ## Information We Do Not Collect We want to be transparent about the fact that we do not collect any personal data, usage data, or tracking data through the Software. This means: 1. **No Personal Data**: We do not collect any information that can be used to personally identify you, such as your name, email address, phone number, or physical address. 2. **No Usage Data**: We do not collect data about how you use the Software, such as the features you use, the duration of your sessions, or any interactions within the Software. 3. **No Tracking Data**: We do not use cookies or similar tracking technologies to monitor your online behavior or track your activities across websites or apps. ## How We Use Your Information Since we do not collect any personal, usage, or tracking data, there is no information for us to use for any purpose. ## Third-Party Services The Software may include links to third-party websites or services, but we do not have control over the privacy practices or content of these third-party services. We encourage you to review the privacy policies of any third-party services you access through the Software. ## Children's Privacy Since we do not collect any personal, usage, or tracking data, there is no restriction on the use of this application by anyone under the age of 18. ## Information You Choose to Share While we do not collect personal data, usage data, or tracking data through the Software, there may be instances where you voluntarily choose to share information with us, particularly when submitting bug reports. These bug reports may contain sensitive information such as account details, file names, and directory names. It's important to note that these details are included in the logs and debug logs solely for the purpose of diagnosing and resolving technical issues with the Software. We want to emphasize that, even in these cases, we do not have access to your actual data. The logs and debug logs provided in bug reports are used exclusively for technical troubleshooting and debugging purposes. We take measures to treat this information with the utmost care, and it is only accessible to our technical support and development teams. We do not use this information for any other purpose, and we have strict security measures in place to protect it. ## Protecting Your Sensitive Data We are committed to safeguarding your sensitive data and maintaining its confidentiality. To ensure its protection: 1. **Limited Access**: Only authorized personnel within our technical support and development teams have access to the logs and debug logs containing sensitive data, and they are trained in handling this information securely. 2. **Data Encryption**: We use industry-standard encryption protocols to protect the transmission and storage of sensitive data. 3. **Data Retention**: We retain bug report data for a limited time necessary for resolving the reported issue. Once the issue is resolved, we promptly delete or anonymize the data. 4. **Security Measures**: We employ robust security measures to prevent unauthorized access, disclosure, or alteration of sensitive data. By submitting a bug report, you acknowledge and consent to the inclusion of sensitive information in logs and debug logs for the sole purpose of addressing technical issues with the Software. ## Your Responsibilities While we take measures to protect your sensitive data, it is essential for you to exercise caution when submitting bug reports. Please refrain from including any sensitive or personally identifiable information that is not directly related to the technical issue you are reporting. You have the option to redact or obfuscate sensitive details in bug reports to further protect your data. ## Changes to this Privacy Policy We may update this Privacy Policy from time to time to reflect changes in our practices or for other operational, legal, or regulatory reasons. We will notify you of any material changes by posting the updated Privacy Policy on our website or through the Software. We encourage you to review this Privacy Policy periodically. ## Contact Us If you have any questions or concerns about this Privacy Policy or our privacy practices, please contact us at support@mynas.com.au or via GitHub (https://github.com/abraunegg/onedrive) ## Conclusion By using the Software, you agree to the terms outlined in this Privacy Policy. If you do not agree with any part of this policy, please discontinue the use of the Software. onedrive-2.5.10/docs/puml/000077500000000000000000000000001513710110600153125ustar00rootroot00000000000000onedrive-2.5.10/docs/puml/applyPotentiallyChangedItem.png000066400000000000000000002250431513710110600234710ustar00rootroot00000000000000PNG  IHDR*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxT]O0}}i/P+!Z4NY4M@M{ߏsr]K 衂th4A͸@{bٸTA%( B\:%uiQ9 SbC S]BiWƣt˄px&lSe@`z't1\6kmR5]7-ו"4m ׺nMOsȕCcE`b9h=TN⌭ch x-&_4;[6w  $rk5s3:*#jdW|>TnD>]{rF>q)G9{t&% $⏖xhe: 9mȵ+Y]4v)n2JZ7-ah'ч}q@L +<:g n+J.dErV% `7]boHфV&`^p/pv gWivz 1 >NqFS:jIffwC3+)eNo6*R`&т)9:P),#*_؄Y㒀acK،>ѻˏIDATx^y|že.@"e""" ">x*K$(ǃ,*j@6E"pIؔE ,! R65S$^?򨩮T$EEz l | | | | | | | |֮];v؞={k׮I&]tyg͚7!Efe˖֭[O2ٳz7"d6ŋ'&&Aσ>xq32ي+7n3}!@rrrZj'Ǝp0d=yiڴ]@ѐÇ[vFECf>C=SN>(2@i,h҇E@f G}pl AfH 3Hd6 |?d6VZ,c"#X"ߐӧ?pxD=y?w@fe˖OOinzʔ)gϞջ!]vر={l׮]&MtϚ5+??_o B0sWUؐfl$2 Df!Pl3d6J `@I"̐(Id62%0Cf$ydaO?4i|(6*P4Ǐ9M:_d6 a유2?’|s- 0lz(I& .-*_ @yfl)9{M0+!N)??_?PR  2!nhdlr饗w} ap̙3sb߾}3[3_d6!uC se3gnK.Q<`ݑf_|Eǎ+T0ydmGFرƬzѩS'xFϛ7lٲ?g}^z˗oڴ3Ϫפ[ȑ#Ϟ=ճ|\s\cm`(Y-=zX ͢xO˙3g\VJ*u]gϾȖfI&|Ȑ!XdP} .[]vMҡCrPfeeYة"%@ڐeŊRsUWެqiii{>}g;}I[vh!mԡE]|ŧOk׮8G}$o~=ztf>3y:g!,222nzw5P <3ZfsңGuIRapc.YD߾/:ԩSGMԩS%Y8cU}eB%ɩJlSofR: 2!nhC.\Xre\aÚ7oU7裏ZmڷoFxrs/Ǐ/_^YRN:#={v͚5UY_rz8wr/!7ge?3ZfJ%H3ugh]|>L݇~hJJJR`%\b~ښ5|y_m=Ӷ~(g: 2!nh3bV^}7׮]J*+VC'NݻdQ? 樺OW7|SWm*%l߾s!'ذn:kE]ɓ'RCeU3<3Jlg>7S'`֮]{ӄ k3//4hZj~@!B^74MVCgee{ͺgGՍ/">HKKTSU߱cѣGqL3j/?_[?7wsf3g ػ>~qTf)z"eaGS,UPl Mf[f~=%%EYbu>|ۏZ7#F馛[6 ~nu__dY8ydŊg͚eib C{ΌfJoԢy.J̙/8u(,ߍCu|. 0P!@{d-[Vw޽pxfI&/oݹnwYLr}Wƿ?^NO?TF1Aw^>|;f̘5kJ۳gϏ?(eر,8sf3feeծ]ofȑnoa'`{g}gD3gΔaY4h_./̉Ls9Xa l@"B^74MH܊u7]vwARd^{M$Q{馛$Ywjc_y智u>}?/',"O:UV\rIʕ:,ZN>8fߝTH.W$qNQ޽7nܨ8`N@r̙'|RBTJKE~wY矟z.,&&gϞnӌ6y?$@{ݐe67 &Q͚5KNNkQX] /pW:2!䙹+>|7ވ>?0ZÕnڴ>رcݻO^r nl@8 B+24U̙3Q'T2[%+WqG8-&lg Mf d6B3sydO?TPzM` W3ۤI. d6B!ZJPzlп<.4d6B3sflg"̐!Efx͵?2v\d6t=IS𐟟ߴiS+Ymɒ%͛76<3 w *̶xz 4Ho Lxf.2FFlllÆ %IfVnݸL)0ᙹl\uU5j$_%կ_nCʫw9;w6m\d6@Pָqc>}\d6@z۵^˧VFFQ[6mB3s'#g" ꫒B3sx8|ٳ ѣ%W.<&{W Ef*##cԨQYx^ նmf̘! Ϟ=/" xf.2'O=z 4p9bĈ g"egg'%%W z\d69q<^ bŊS+ g"8Ϙ1c HKK3s)##aPt/ұc%3siԨQǏoPNNNJJxf.2?>|xʔ)ʄ N>/4?fa*k֬Ytxf.2?$''\P'NEf^zI ˖-ךaƍժUS1cT^RJC5k֬^>x!UݧOVD>ku߾+F=TTY*UtM7\nӦM5j믥m۶.lɒ%8q .+PO!RSSUKkܱcGݥe&Mm\aWZxֳԮ]^z˗/ONN<G~֭[JoաW_}UEoo9]ܹGd4u]u]"k]v9ME{޽;Z<U3:7O[Ko9L]~hl EfMnse5صkV/RO;vL}۷w߽vmVطomjuo*5JUt?5kۭ['xgDn/buG+#i~^v[o{eZ:u[;sdzU2dy$':t*_V_E5!.wڵ>|:h" 6GgT/Zzٻwo5r^ʾ0ls{dmێ1j\ q2[}38Ήe'2 7\d66m$z۸{JyժUUTl\r[nUm⋄_*)S~ M1c )rsܲeK\}A$^r%oZ;T{fӮQE&z yvg$#ey UZjlQ7oެΛ7aÆ7\f͚>;u][lQe 3[llܬ;wjs& <-o6'nl8n@}#@0<3 g6Q`ZvKn=%Ij]c5o~K*/ɓ'kǛW;S̙#GAno:u_Zר]KFFFng,Z٢&z(^reU+[**V_*v]bz]۹s:7un*n#xNfo9qko8n:V/od6g"C+{6+XoGۿ2eWWS·~h?do`/hܞN8p~ݳgi#G7.>>^6lCuFYúheT2  KYdeW/JG~$#6nat]viss6Dnx 8-ݾm'od6g"gfOk֬9sL˗/>7~׻woIJR޾}{ZZ;.[bFꫯj׮-j`.=w}z!y^m裏>,wʕW^+#7YͷگGCfsVG>u{Ǜcuݷo_T^{a|I}zz\U/JGvӬ;wvQ*W|.n`|_Y֮]$.PU/tlsfp$YOY<23s3Kj\1;nqr;8``Ҳq/{Ϳ2BzY# tZ.\*V{K͞=ځ4h0}tk͛7_wuUTi۶zGU6k,_cVVVnݤ{ӦM'NXR%Uow]zٺ=ͱjl}$Rz)9%BǏ:_d߹@Tץ}n}.m-|./G}ѣ]O2Z}38ΉeOA<23s!7sQ`V2 G 3*o23sfjڵ֭–-[ZnO-MIv#`$yRRR3s!99YB@˖-KHHQFsssŦ$oRf0Up♹l4o޼ M:uǎp♹lt#F7_`"++Oyf.2_jPh6lӧ3sOb F H`KJJ՗;Ef`ڴi-oݏ?8l0\d6.\/epGN:u„ J$g"pf '?~Ν g"p̙Km W\q^ -?"\d6lz(,Ef!B0Cf <3 `@yf.2 \d62!䙹l3d6B3srsșF<3 !555==zhlR/Gg"<7mԊmVfKKKk޼)0䙹lo}􉏏WMe6 l4h\d6؆ Jl&nݺqqqzS`3sA%Il4hp 7!EfeҤIqqqW#mڴiz#`3sAϏW-66I&|E癹l`Ge:#g" M6|!ᙹlHB3s&M$O T<3 "F~~ȑ#_*UG&_%KN@\d6 ؆ +m/֫JСC}6@\d6 <3  <3 -m߾}իW9rdׯ_om۶ݺu;x(i &M4)ϙ3kUϟ/{wyf.2)[cd+={j׮-rR޼ysBB %3s L6V.?a'@`۱cGǎ}e̘1aCO?ܹseToɓ'4[J޽{[55kִ5 yj1^Fկ_?U @i\d6/jժ鵆Қ5kOǏժUZj%#t%++Kj{w*9^Xreƍ۴i##l><3 …g`2sni<}t }y/~(%d6Z>f#B*TP^(v*)E#GYX3ۡC*Vذam۶˗7j(>>^ݷoQʃ R$m=fҾ~I˱c;v-ZHMMޫ*% ^ves=j|.W+H5BRRgf#J /`l0 < 4P{YfuZc&:wM=z4&&FF>쳱۷gT۷ߖjӦ|?g(/S͛ǫ+V$ٶml6@8 @mpC` 2D? >lpAۂF`2\(|Ķ -  #  .8>b lB#((cǎPdҫJܸqlEf&} ^陹l3F 3sf!.@F{g" & 8Psssԩs))9ro߾Zjٲe^rrrT&M\}R/}q&d6@iCyyy_~ɓ'>כp#Jڊ+bccOd233\lRЬYFhB! l:v7d6@5j@ܮ(кuiӦ P*T` 6GpDf={֤I>}7d6@XbQ[˖-ܐF=>@d6@QD§ ߙ3g.]2acرW@ON:#,??_Hrr5k|aizUXvĉǏsN}N(Yd6Z .|rrrD=zޚ0aӧ :M:uѢEz qذaP"lOb =|:Dl 2Du͘1C(mÆ $%QٳIIIz@(dee3@1#@T7o^FF6"o֎;I8 =ZG>Pl=K▒ (Id63gܶm2Rk׮MKKӧbCf葜' >Pl=^z%=^D7VVM5Q7a}(6d63˖-FL2$ z|%rd6@I"@(Df۽{wYj՚5k80//Oر{*UjҤɤI*Tp~?FCk׮W˓'eqcq8=أ>j5lZde˖fAdcRUVx!q(Id6l={{rss%mvĈ[o{~׮]:urH2رcIIIv_j8?~)K//g6駟CSCs>g;pm6x` J ifɹ7oެΝ;aÆV֭[U 3,{rzz*WZ>\[oIO>_͞԰VR5g+W_$$$6O>02$ zfoV0##rʎ2*[ jp+t] <СCU/`caӦMT;GX56' Pl=L3y-pq\ܹbŊ2u֩^K*ٰa5thlDfLf;dm;77WrTv풒T=zfݝ;wO2EݻvzW[d6رC+ ?;;[۷oOKK7VeǓ(Id6-YD^JK/G=zjխ[MN8RJTq\L:UN`ܸqV|y䑪UVVmՒ Pvʕ+7n_|d6@I"@ mΜ9 4kKO Pl=B֮]l˖-[~'%+'%%Ez Grr/ kٲe 1115j߿nnޢdL8Qz ǬY{=a ӗ.]O=ņSLCBj„ O֧bCf2jԨǏ9!J JFFƂ y饗;O:ʼnf̘1꿐Fh-\Pn ͉'́"XrԩS eggKlmv}(d6N'O=zG}1b I5j믿fd۶m3f̐;g @ "@;|~/'''fdҫJUr?''GGJ P!.@F{g"C\JEf1ڇ핞0cp2+=3 `hdWzf.2>h\d6} ^陹l>d6@JMMMOO!C; P7on6kZf?2u]WMCq)<2v۬Y3mI`+233\lR A͛7}~:u7d6@=z@M4@۶mM7d6@ϯ[ laÆ|lѫW/ؚ6mʧ()>ȧ(5͚5}O 2ԨO"G;#g%Pۘ1cdy4 I>|}aizUy}6@ @4w` g6@ @؊d6N>[(QG` bt lFl"2Dxt`ۺuk͚5ڀ$LرcǎP bT JlBe6RZ56hE^ qJ6@#@4V\ٸq6mb lB/CZn?*O>]"˕+w^U/{g6Y̙#w}Wr^RSSoF{,i:>}c9:uj.\(T•\*8"J "^RRñ#$??_k׮UMGٲe:'?~SNݺu?~_|s ]RXjժʳgϖ$yLRb:uܺkT^cZYcbb+zW4-[\9}Q/EfR bذaJݻ?egg/_z_O4K.s ]Z377WRӪUn:U-i9Ҷm[۬iZd "WҗŨg"@ۚ7o*$+ uu@|g͚5R8ps?[|y%_UP!//'ATcw_FSs{8x~̺uF |EGU PhFb3sm+VhԨQ۶mleݻww}͚5KLLǏ۷_n6m|Ǿ_;lРgqgyҿ3HQxγf͒ɓ;v(y-9G`Q\d6(M b ("e1噹lP|ĶA`Q\d6(}>b[!a,F<3 ‚:6@/Q/Efp# BFb3s mEC`Q\d6/>b[a!g,F<3 Žf(Fb3s I3fKaI!* 59e1噹l3FpQ/Ef1ڇhzyf.2>@D+ܮg3sf!"Zv=^0c߇&L0p@UͭSΩS|ȑ}jժe˖zQm4irWK </Q/EfCyyy_~ɓ'4`)S/YYYGe˖m}~z葒nd,F<3 `Fۇ;d ,0j˗/i{3Ebƍ|nݺ=aŒQ\d6}k׮[hUӽ{QFIB3g6m$'O۷O5XfMÆ ']/F<3 `JMMMHH_G߿EZ)))Ry:$&&Jev-[%]/F<3 `0`@rrV @a3sf;wO?ٚ%җŨg"<jvhb,F<3 !55}H(c,F<3 !??I&_zhCNM.Fb3s_n]>4mڴz 4Ho @1J_^𖙙 M! l0..NDe1噹liFv mU[-t7 /Q/Efeʔ)*)r˴iFDe1噹l[->>iӦ| /Q/Ef*uޝO\җŨg"٠Aهڷoϧ.Fb3s'# Q\d6)S\QYQ\d6_>oȑ/QF>$_P0J_^aJO? 3/֫JLѐ!Cm`,F<3 ‘/\[x"Q\d6( & 8Psssԩs))9ro߾Zjٲe^$T6M4ꫥ^Zlrׯ_/T|M۶muv;.tFb3sH$$\~'Oqo%KrjjĶ [r;vL[;6lIyΜ9^{6|)>>++Ul\]@nG)))@" $UXQSv "_Uʛ7oNHHw(}Yzyf.2w}'lTM~~~O>}~Ķ7ݺu{|Ppmw#e]; (}Yzyf.2@׮]իh"{F&3glڴI 'OYaÆV{-tccfw#?c)կ_?=/Q/EfHMMMHHP?Q=ڿ-ZjJH:t !A*۵kl20رcǎ(2fpX#ٺuk͚5s]j#Y̝;W Qvל9sJvZ Hje{Bjj7;I\rnz2;;\rV*8^u6@Q/Q/EfCĻd۷oC&QlٲWX@Xǥ?TTIrZKU:ܳgħ|)]lgn߾}-$թS؇W[KN:um_|۲e>@7?%po@^̆gŠĉ\=d1egg/_5=VǑ[ݻ?əĬZJ֭Sg6ǖ_O4K.s$ 6L (E{\d6D<n|A6+ٳB yyyk׮ÇW?R;rȚ5kU9TW𻑩V ' AT$l-H5>}Z8p`?W[|y}.WN½zyf.2"[C>fT _޽k֬Ybb|?~8mŊ5j۶>lllly~ s۷ߖmڴ}.WN½zyf.2"[O>S6Dv: h3s@B(N½zyf.2"[g>b[(}RT7Q/EfC3zKaGl+;P 4噹lxFo mE`CbJQހF<3 -D Q(E{\d6D?Q Bm&l2t@0J_^̆ȓn=%^Z#Ne1噹l<763-ohBpCƍ7ed/kڴŋCkgJQ\d6D={ǫئÆ KHH4hũئv:)KM'e1噹lH+WwBÆ %IA[lllݺu333D $&QMv:*eaJQ\d6Df͚ɛQFWѣG.]FD;mNJYjFQ\d6DQFӦMd_kӦI(yW/Q/EfCϏSX׮]5kdk 62递g,F<3 gϞjΧ?ޤI+> e1噹l`+WT?jܹ3 >lRv:N e1噹llH@رt|PZҗŨg"!O"oJ8v:/Q/Efx饗^|lU?䥑wݻw@1v;Del>jNMM=tCT0J_^vAXzs=7yu/^WEm۶͘1cȑ;{r@(~,5ȲD'ѷEŒ-yCo6D8e1噹lQĉ,X/-IIIׯ_W(Ç";FnFuI]e,F<3-޽{Сr2@aM:UV}"r땔$_"Q\d%K<}!AZbc12eʗ_~2BJn$8qB"/Q/EfZ#G'l$--m… &,X' b acƌ߄@Fb3s٢ի蓜|1+ bG?Ge1噹l;~r ߿?%%E 8WFnFiҗŨg"E K^dx饗5@1{7>!QҗŨg"E?*6 >ҥK^>UVk b&dgߐ(Fb3s٢Ћ//?ĉL0A_PyoHDe1噹lQ^W _lٲz 6nXZ5U3fL+UtAU|#L` 8q^~e}A)Aoq/bgzŽ3/q|5k֨()> b,F<3- ٖ-[ֵkWYd=kf̘QH ~ia9Mv @!$''u r}=858ow)ELyoHDe1噹lQ3}駗^z;sȑ>(b?ƍ ~hs#(2[ts j qR2dHg,F<3- yf֭[kZZ&MTVe˖>C5k֬^>x!UݧOVD>ku߾+F=TTTM7@ ]UV9uµk׮WeMGdi#)j ƍw[ }{mg>;wѣ\f&M^}U @!.޽;Z,_S;v޽Zdt\7^y {[>rαeϰT믿^n*Uo;rmf6g9E.0@/w/VNN^fc۷ .S'e^*+%={;77W:l pM֨{G(Y۶m;bU뭷{R/IN.q=t\{ `mkE$S=zTƗ;r>rαeNJ47DknZcϰmpMM8(syOm4msyEܐ"Q\d(8mڴIVFܪw^)ZJ*I*W֭[U/"!!Weʔl3&111++~^86p; .e9+UZjlK.y7d(n nR;wnf|.383n زe7o yfPV Z֚`m}s[^[gnʕ5kִw.sX˾cv>Hc +ej6cn3l6iSscS>tq8o9HdHg,F<3- lk{nq'#YFR?%]vɓC§qlv'-Ʋ@x2NNd=k~??p==r3v Z㌌ 3GfPlkTʕ.6niՖY ¾ͽ**VROL]۰˾cS/:66cn65|:>J~gU$Gs"Λw+-/Q/EfB3?\9꣓ϯ_L5իԩ ~Æ Vsp>^i5ͭ^, w<Ǚq_ϟl MɒSUos6k}s[-׾8 ڻ{n\dEU:vw(a::.JEҥKHsGa2Q 4P ;Θ ۹ ss.0p/0ygѾFҗŨg"E!駟֬Ys̙s#/_}n}Uݻw/o߾=--MqwuYyyy+VP_}UڵeW-- ƪ߱c|Y7vŽ[X裏>,+rWj-4sHLLC%nMMΝ;;vl !vF6Yi׮]RRjܣG_}Ν.q=t\{{b2LOO* N8v,GR;#'y=XFNRYq^;l0Uog6mjv9EnWJe՞md7dHg,F<3- yf6_?_B\l<º 0@2lܸR׿UF^z~T/kY1kժpBPq\< ^ZիW; ;n V͛7_wuĴm?Zh &o7xC=t;O5yMz#2B&]t%KM.K⥗^裏Mjխ[7vɢd^0k,ľ>SWnǏoUw|lE k;V0>>^^{>HϰmpE4]:h]y"nl(}Yzyf.2[ &l"KѯC2Bl6g7`ʞJXljEIz"E:e1噹lQVLxO-Y'N (Yvu|ԭ[~'N)fp@C"/Q/EfB{1cf *ꫧN_r"KGh ovNNDD1J_^F|yyy/b@pƏo}!1vXHc,F<3-:͝;7##C_6Oc[o+ bGoEDe1噹lٳsW^yEĄ @xgL"/Q/EfZ֭ڢÇ%>}Z,#Æ ;t萾w}wÆ (}Yzyf.2[4>}+%F۳>`N$bP~LFb3s٢ܴi-Z/$v풻+%eذa?%KL>]!b/Q/Ef~|ɋ/~}EAx˓ĉJ$%%%eڴi|$BJNN[/-Hf,F<3킐/&L駟N81 qI& ;w_KYdW_}uÆ 'OdwLɻF;NZvmJJnMNC3J_^v9sҥK'FyKUnѢEJ,8+ItGnFKw!*/Q/EfC3zKqRT7Q/EfC3zKqRT7Q/EfC3zKqRT7Q/EfC3zKqRT7Q/EfC3zKqRT7Q/EfC3zKqRT7Q/EfC3zKqRT7Q/EfC͵?Q";>җŨg"!򤦦[o C";>җŨg"!7n̬ɓ[h!Gl @iӦ-RNj(IFb3szbzKDV2hr\d6D19?SRRdHtؑeeeɕNJDV2hr\d6D7u'>U:t+w"E+}Z9f.2 UrJDV2hr\d6 J1Bk}"\$4|> g͚jw!1cݻ җAc"\$}|_XH^/#@ebŊCN4iӦM(+Wn:mڴÇGO3J_V*C` mPyȧa͛gFf*%ej嘹loܸqW?y:tW^W]uU˖-ov NNNNfͮJ)F?6m޽IIIÇk5jdU7ߴi&++K.EEE7h۵k|X?QL+c=@壕 Z3-9r.;~=z[nYpZ͕vwVZD+6Abd6G ,ٳgkNKZ;w 667:z|Ujҥ@?%zIV2hr\dзo߷z{Æ o~GG.«Ϲ9sSNݺu?~|^^2@6lժUSwWٲ,-o޼9--k|u,X駟Z9Ų mu+lJ_V׿J$7o1URZZzE:u?ض~~K.?Y[pMl~饗%/_EcXl91Jn,lJ_V/:wܠA%]v1b$4Y駟6n(+ǏP*\2##èfΖl'|"+r y>@СC=jDF4GTvQ'FcV2hr\dxQ>ܻw̫JU۷,!m۶]xQ?H`۱c 7+5jr0zl:uXKϱĶ@{'5eg1LBl'Dd681۴җAc"ŋ}XKC$IU4l>83gΌ-Zd=!#.DfdC=Yisׯ7'} Z;`(&BlFH{q^Y۶9^^ALh=Xf;VBo zu~ls7j嘹l:*Qی,{/?;w3@=ڸL8A ^{ TaAAߟ$~aK^zz2$?ɓSSS{1:fv;k֬)ח7ި[\/^';|A77|_>U!2ss;v*55k&Ϫfe#/DG=p[-fYek[͚5.4rz~KkԨ޲eo6|.o=E&ՓjJ¢ =۟׵ի'j?id6N$0$$T -Y&Oyɶv'MML:OIl~h[hic匭ާOO U ͚5/;NڲRڤɣ:mSJw}-UsM+t5YK7cyig2[evmO^9r7j嘹l:*4C=Ըqciryս=1cX*ٶm&Lu nw}W.1_MũyZ1b/K6iҤM6[xlgBl~r-ýz2~uG{JjZd 0rP d$yxΝr5Sa s.7=kwBĶy17}WKfQ߷]п]z(=F:{u-P˜O#%\|UĕeĈ}PU=tGI;}mr q|ZlَV+EfQRrӧK/d-xqǙsl2UFBEz ˖-S'*U|wgU5jTVV snl7oV}QFFZ7nB _ ̙π,_<11QLj߹W͛يVjW_kwպս{?\4dL_ᇳ߼zrÆ_c,K}PLh=hv?jhU/\%ɣJn4Zwߛ*Z'gmKÅ_N[~3}dgvʝv̮ZB?zZlHD/_Ķ[fffp r>W'3@%ٌg3R{7%%Q78'sM"=Hᥗ^:i$smf37_jU5&,F@[ lDD7mܸs!YԬYv&Lw}ɌqㆾZqC>۶/m;. KüUʊ5s[_rIRZrT:?=Ğ/8BĶyFmW:ܹ46OA -fC%%TdjԗfHo۾Z2KR_o䍲-bm -i拞qә2 =~-))WcRp£GʄG%WRKQ=X~H2GRh"Ν۸qs&,߳_ƪɶuiUMURw7>]}6{y߳Y~nP}CSq~\ta۳=[N֮o$P5&}d cNF|Kk;ݚ{첺FEūyHLML#կ߃Z7Dz)َV+EfQv>b[ٙ =I0`@6m|e -<իL㎻K.sGYt{Փ#NLL>}4ٳ9Ioڵk7h խ&D>6VL>w!;msѭ[zk;v쨛ل޽{ kZ/©I|э2WOvXӺu_ykUP϶cH_.!%,oګT`dF۷Vu~"7oUS?m=ƍϮ_@>?IsfٜZCq3eU52wի'$x@Y8@[eq:~n1sټuTb';TNsLuM7=ٞ{1cDƽ[fͤ$ciD"Pݺu?SYy,׎;Bf V2hr\d6rss"0>U`;˙RzWmiii kݻwqqN8Bf V2hr\d6JKK6mjL^2iҤLyN>jG=!^kM`;˙R9s;׈R-אX\,lqooذsϥ 0Z!*)SXsO:e=!#XlB92y&''[13@%4tУGZ}$Y2G 5y̭zM7Y+13@eb gurrrJJJGTBf##GTsV:us8TBÇWQd~Xj"Xlq455UM[trWp|ѣG_|#GXc*K;o„1,, -~jOr|Ю]$m[TVzG+}Z9f.2[y["Gcǎ܃3@tرaÆm\5׮]k=x@ Z3~ ܃3@b In&MU[n6m?ӧO[PYi/V+Ef`@PΚ52D3Euf̘{nA*=ej嘹*6gep#F"Z'z"5fTr*..6? @˳h [UQmŊCI/E1'?oO3?zsPZ?唛g<4@)gAh [}fԯYzVc@hMSiiiffی(%R7=vGEܢ81f@3##C65e====o5l3eoS PѼFkƌ%QM۸qc) i [ef>|8ߐě |S <FkN8! {iժ ;Z5l3gmR|;vlII'c@8iMx__e=3С7˳6tУGZ?~'c@8iMxbʕ*)M6 #ְu\d)SX2;ufLk+*]s5}D˛6sLV<_hfLk+cƌQꫯ#ְu\dW_}:#@<9qĄ E80+fZ?^Qw"uEk:f.o2+bڵk/bkתUZr6z0;vXy?JLw]ö~.BKay;fܨQW^TTd^?eE}c@iMxH݉D#ְu\lO\}ޥr6Iq0wb~<wl߾}uY+qP~LkCN$ZwQc"Q1I1 /ȿ2oSϟ/sÇK2 E``5j۶m2)kA~ׁQFJ%KWZ}Q5m p -c$ٮ;Fmvʶ/;lo%1nݺU†d U(D oyvm|پRKO<U RͲ ; ?/=ggg/믿hHy,0Ӛ1sE&۷O7oV̙a|޼y=Ug˖-G}UZhW_ʾU=e~r&@{˗'&&e˖թSļE9vk`fj~߾曾ݻ+|RJ68|_cDB3ѭQʁޱ@ﰅ/ӧOӧ5\#ʛ,w[jޱVڱ@3RKBfssf;Jyyy.Q׬YSUo꿙m:th 6uOl'@v… =zT Uh<Ћ1Y]e骸8))IfիWWjTbPg l5 ~2կ-Zg7qƪaw,;l!nkٲ/{7--M>j|MؾQjݿO۷,Ў:zWj93Cfپv-Ag3oZ3W2ݻXҶmlU[n=ԑXǎmgVΒ:a޽km۶m"3?2{}e$KMTҏ˓z mvEvkfTUۚ}JޢN:;.&9rdҥ08T+eۭmC__xӧNH2۵k7h Un; _F*Ԯ][gD7}}-lw,4}^N(Ռ=743ٲDy,0Ӛ1s)]p ʜG2KK'FUy]tIHHh޼L)W~~g?Qvo@U|W:۷^z2lڴk&7odCRM6_*?5k֬U|`;c3}礭Lnjc7ݕE`T5 բEL2E= ԕ^yIII<* | ,O+?@x8f @Vv_|ȑ#9bҥKyyPѼFk[V+efvi7ߖăieg@p",К1syıcdž &ŰkZ8UZ?r7Z9f.3b yO43n:mڴÇGOrOq1 BiMxj嘹**)fz+1M(#8cƌݻw[qE'z"5fToZ3WfuTa-AV+EfQbg>@Z3ZG|njr\d6oh fp@a D1sټuTa-AV+EfQbg>@Z3ZG|njr\d6oh zZ|˳O0"j嘹l:*@3|)g0"j嘹l:*@*--4bqK˳TxiAV+EfQZϞ=322TlSg0Z@Z3ZGj/rJJJVVD59ƍKI~~* L3r7Z9f.27 N<) nժ;vxiAV+EfQ]=0`e:t0uTk%Gfnjr\d6oh ڭZJ5iӦ}* @V Ā-[ֶm[>iAV+EfQb/2W_GB1"j嘹l:*@ Pw"3@EcD1sټuTؠDG1"j嘹l:*ɓ'ϟ?!=sr'͢E~'AJiAV+EfQA<۹s_}ݺuǏE/ZUH~?~7~ rbD1sټuTN:%w9|5:(..ϬG"iAV+EfQA<0hР~P|@D1"j嘹l:*7ز8`޳E@Z3ZGqԩS "E3f[z,5M /Xk߾}iAV+EfQA\7nۭСCO>m=:&LsN^6haD1sټuT?v?њ ?cAfc]Oz- Zfnjr\d6ohď1cpK/Y2"M%A @V 8qqYs{W)5vQ :fnjr\d6ohĉ^ښ=n:k,q v12bB4 wPc"yC N%[ h=!#.v؆0"j嘹l:*5xmڵ^x4FTz˗}[~}Z^3cV\z+ϻ$z\C̶fgq)K}SP3o>QKf;ClCfnjr\d6ohĉk8d _ԨQSNRbTyHEIϺu|![BdCy6!z\l߾O>K8BMhWiAV+EfQA%YСCO?5\s~I#ao!V y D(i3nܫ|m{{g*&%c,iKE:v؆fnjr\d6oh &k''NؠAkvÆ OJJj?{/==}msp⋍'ONMMMLL|$%:fv;k֬YN9rw7xnݺ)))/˓Ûo /cG5&U;vtUj6kLU/G^ã>zsl3VH,2@5wݭf^Z{F9v|SO=T5jToٲ7>·ӢEII5UaQ~Zjo42'G7&$T -Y&Oyɶv'MML:OIl!A -ݾ;mlz6ߟ9YFEZ|֩S[P8T4yWgT㮯eݶv)be&ۿ~8X~,/M2[w~94 wPc"yC Nhe6 np>ܫWnݺe+iɒ%$4idӦMn͙MƲ;wmv&mֳgOi(M6C ^()):Uh޴d?PŭȞ:td6_ތBy?v}F[[*'Y@귿 MEūTvԮ`JYò=+deϔiأoܥ F]ed;}RIDAT;f^Ml_$%ՒYgʾJ@wқE0x_,%nd~)",#F<-Z};JJ7ߩ}oco O˄ c% @V 8JfUz_-[VN_ojUR3?ȨQ$W usfۼy*裏222ԺvR_h8gPugY_|ybb* lĿs'l?Ʋt ΄&]`;f^&^UO~}֗\T եOo e;fބ[UN:wn/oͲSBKYPEII5";Yŧ<~۶̒ԗrf3yl˃X!9Bf-@Z3ZGqB+~-))WcRp£GTdUT1RT+V_~ [-Zd=ܹs7n|݄{6 :X<2nݺ MԺ߳Jʿ&>["(:m9}fA ՟>Ou%KsmӅml:Yn@̛Փ*E:9K/XhtkY"252I?SQ[!C~'\zBO,o ԏuDž[L3r7Z9f.27 D(sLuM7=ٞ{1cDƽ[fͤGyD`@uOe}RaÆ4e7O>iل֣Giu%O2/l'VZ|sf۾}{.]i޼ }Sٷo_ɷ5jhڴ=!Yƍ\M~3e;֬YN?bf߱۫nKoݶ9ի#%]c. tHN\~np[?}@,HmUlݶD&$TkӦ1HBn}#kԨ#woh~G}oQ_˝%k5922[y2`4 wPc"yC N7Κ"'62ŋj׮ݻwbk Aאʳ3@Z3ZGq/\|5 zlڴOb! @V 8qԩcZso}Aq Bf-@Z3ZG#''g޽(hp#FX2[L3r7Z9f.27 GII/lMq~~ Xl4 wPc"yC ̛7>TnFKMd6 fnjr\d6ohězkɒ%Xȑ#ǎHM&7 2z&L3r7Z9f.27 ;3m4k8@SPP MB@Z3ZG)??5%Ҙ7oȑ#?n=xQL3r7Z9f.27 ?pӦMۺu51 B6m4i$9.yyyc @V 8w̙ݻwO>2D39ECcǎ8`=NPi0"j嘹l:*@0 wPc"yC13€[ @V  |>lr7Z9f.27 38 "j嘹l:*@0 wPc"yCC>/;;[>0 wPc"yC+^|~)|njr\d6ohxB}ma-AV+EfQABl|>lr7Z9f.27 ?"3€[ @V b[q@a D1sټuT/h`Smęa-AV+EfQR\\[ZZj}"_Mэm'?'3€[ @V C^^^ffիW[;/dusg>@Z3ZGfofZZZjjM74uTۯ|M d+o1%%%==g>@Z3ZGC INN͛[v llS_eddkNb&Mla-AV+EfQ?m{oQ}VPP:)*I?ꋵ+UVj[0 wPc"yCeTߚ4Z;w5>lr7Z9f.2*ƍ1 55533sر;v|&m bŊ{G56OjՊ @V̆36Uwqʕ+g::;l^+RmG6@5-wPc"!$25h 99Y}f{Hw6lؠvfdd @V̆HԴiSktc[fP_̴ٓ&njr\d6DLqqqnnkBm63TZ?r7Z9f.2I(M7PiMxj嘹l2c {&njr\d6D@IZ?r7Z9f.2l#b @V̆hem6@ Ӛ1sTl۲e ô&njr\d6D7m2$l5-wPc"!i W: @V̆5$:\r7Z9f.2֐ p"j嘹lzZCÕ wPc"!i W: @V̆5$f@8q"j嘹lzZC@yHT4hжmۈm@8q"j嘹lzZCk*۷OVm@p"j嘹lzZC;ۀJD1s 't@Z3 QOkH()6 njr\d6D=!@/h`Sm@EJD1sϊsssKKKO !)MAD;\r7Z9f.2֐\^^^ffիW[;/dusJD1s9s4l055n:un>mVNRRRҖ/_n 0t@Z3 QOkH^rru]ףG͛[v llS_5mT[ƍ l \r7Z9f.2֐&çE={nbXkݺt~yW: @V̆[s3gZ;P>֋pq7Z9f.2ģ͛7h@M5k6t]v=Mھ 6mzҌg.] h/V+Ef[jj\QRRRudْױM6٦Oޮ];d.Zˠ1s HdJOOkbb`3ڵK}햜AlD ej嘹lG7lz5[-H`3>}mgD ej嘹l/sssmXzl 1ddOdOPh/V+EfJl lDej嘹l`6 i/V+Ef8l Z3 ?@+}Z9f.2 $F` ej嘹lPضe Nh/V+Efh&! Nh/V+EfѺ]Z9f.2@u1szCD5wW=VУu ir\d6QUOc"h]jzZ3 G:@Tswj嘹l懖YbV2hr\d6ܼ<:$ Z3 ࠴433ӈmuHJ\*E+}Z9f.2ٽޛbzzzSO=e @ J_Vpg%''lR\f͚II~~*1D+}Z9f.2 $ڵʒPSSS塵E+}Z9f.2 $+P.] Hl:uE+}Z9f.2 $LNNFq@J_VUΝU`kذa~OsҗAc"Bgּys>Zˠ1s222:Gq"U\\l~hiey1sԝH Nrss_1Ṷ\5s\d6;wu(VZZzWh_fffkc"B 4k֬lY> @ 1]6jH6j޼y 60`3 '+EEE6@<=͙3'99EۤTǻv9f.29)6@<=ƍ7m433SZI`k۶M7d1s '2~;2P嘹l`6mZM.*5k֬y>8f.2 _1L+oQe;#c"Blnl+-- F t3ۜ9sTfk߾GEfؔcիgff(nf;[v'iGEfX4$N:SN)))iii˗/RrԝHB☹l\6?/֚6m*q6@tqj(B☹l_ k[OQEf;1sek4sL֋eZ9f.2%%%?|yg/¦M4ץK,n=d6@*OlSg}ӧkN6Y! P6fصk-999##md6@ӍmAo6> zl 1JKKsssOl0 %6b >c d6@Xm6llBfD9 ۶lB` 2 b$u@d6@$i]CZJEfѺУu i]+3 G:@ҺV:f.2@u8ut\d6qHZ阹l=Z!ֵ1s-!˳ܼ<:$%¬433ӈmuHJ\* {PM]d===V g%''lR\f͚II~~*qveeeuy橩Z 1p@uEmРĶSZ+2 "<|95#""s*5lذ_~֧@2 2>3ٚ7oG q "F݉ bɓ'ϟ?!JKrz嗭OTV-駟o:1bΝ~&NnݺǏ_|a-;&j~~q$qK@ؐ :ujSN=|5j;> * [qqwa ` ,7a@f(&mȐ! Ųe˦Mf=*xԩS&E{キn:;d6V&La7dȐӧO[!@Tڱc;cMUV͝;z +]"+#GZ!@9y 3mڴ{Z^ @Y`5kuz 㭡c=Nxчk׮ ;z ϸq㬉|$$$ȧZJNtCK 0dݗOfT2D̦H⋭e9b-ZB"*!2DwMI&5lذsΣGѣl~z)㡐+5wuw֬YN:OeO>R?))G=pQ7ި[nJJŋU'6h !!kݰafz?999.d]݄dɩ=ءCS[4\  d6>3|?lm6+$|׿4nٳgqq;ڴi3dSݟY^z}/,,޽j/BII{uשϗXxaiխ[7?/5%8jWl7a:ewٶmlhv?!* Oy2䷿o)+s̹+r`_jjKEEEUVï*--ͨgY_|ybbiٲeuԱ˓u ^fM_MN=裏ܼEKf d6@!@q,{x㍲ҳgϑ#G_Æ ٌVZUF bƍ_IYk׶T3GISeUhfR9О;nv끐ǫV\\$1z7Qu*KDolЮ]p…G*i^ 6wƍlm=2 xD޽:ud);vm'w~}}~u~en۶m ,T3Pm4юǓVTTآEM6Y!al999l}-ZrJkh@H / :uf)S8pz ҸqkG>z RIIɫjMyY!@Oϟo #GZ !@dk@9rdǎCf65LH`۳g)2D5kdgg[S*̼y~qkd6O3giӦmݺ՚0M6M4iذat6d6)w1cرc_rUV[t* IZ!ֵ1szC!kc"h]CZJEfѺУu i]+3 G:@ҺV:f.2@u8ut\d67\gXag<4_\5d6@fff͸I˳Td6@s=7VM]d===V '''lR\ߦMJI~~*q&Mm6++KC͚5KII묕 =\n&WW\1uTk%@fDġC/?q}[d6@d|*5lذ_~֧@2 2>sٮ >@ d6@4iDC} lQw"#Af=zxW^z%3Dhdu[l$2 4h߾}> kQȊ}6@L#\; l7| )6@l#@7n\zqqqO2R~̙N:umyyy֎*k`Slcdjժݻw׫WlYhC7oޜfn@Bf׿U"ټy$ҋ.ԩSWĶ׿]tyO*q`ScHcK/=KfD2ąΝ;7h`FI׮]G! M駍7%ب +W0*}`S,6-O>DVMxGT! BnnnZZfI9|p޽333*wRXXXؾ}{3Rضmŋʾ_Nkixc[=Hтqo߾999BlRV@H(Ef;8q\|e˖5mڴu>ljժ3\s5=zx'T~^z#GuܛI6m,X`nn d6ql˖-}^z%klXZ鎙 fi}\0wm֭7pCQQ98c fh};f.2qŶF`lbe̫l3bGc"YZ6-XZ鎙 vZ>.-ƧlXUd6g<4\JڨQ#5 V.%Rn TwqGFFMOO0`* z UV%''hB&q)ʺH*P e5JIIϷVD2ӪU&Mdffǥ+RbޝGU DYI$@TAaDPA ggCըH]%qe0nY U~ ,a  ?z9>tG͹z|yÉ'ڴisu(+-33o߾z?@B!@$?|֭;u$R^eYZN@q7XӟԪB 45̳P]"++  ";,뫁zK.jՋ`ʕ6y#Ufy xzI_f ̞y)<}B=?NjT&L R^ Ep~A[r?G}G:G]ׯvlbbO?ԩS׬Ys@[`ޔ^|2扂#V̤IJJJ;߉ث+v{g _@Mxĉ^{ }Nd}~ Qk{gݫ_PYYKdj_=2/mݺUġZ`LZ(,,,../tپ}ȑ#&`329)ځ7)3fo'jD%KK<Olqĉ<[z7֮]TXZz$9$ Af-[5$'|~+&WO‰~Yl۶mԩD[n6m>SCB)--={~k>`ʕeE_]~! xJ7N?sG,/ږ5d2 kM4Qˑo_--ZHu7&#萻p @MV3?T;vTTTJQݮ{ŋ7)L;tagMm۶NSJٚ4-Yu W:|{ݷoߠA~a~~.1,`Y;ΐ{Wvذa9ŗ/2!j&&GU{c-^z!ǤF܅[ jj$K6oᄈ}Ƥӽnnu6d6)2$}RJJJ<n&;VVV.Y/e˖gv67|3gi)ԩS322w'oO4$9s攖Q[|y_ /UBdxCf}>SC(++;v~SaiԨQP?7o~Q#̴i/^PUVV9ѣ%yyyr=KĖ.]kW `KӧOgm$ɫ~/Q#;wƷmʌj5X"Xii#U={1c;EѣGz$6?5kGf5j7oެo6lx饗\RyȊ+$uN&G5kO?_@?s7xcĉ&>)zS{8p@a򢢢'P#VN7lr #|ê3 oYK V%ݘl|˪\qLj߰*Ef[V;F,UI7f.2߲*@1b7J1sU aUҍ%wX n\d6Q^^Q+Z Wd6].]:?#UUU8`\J_@b F,$42u}kNMUeiv+P\۷wX lCջ ZrejjjNd,R^eYZ] 2>tF֭[]t-33sR.UE?C6m?tUFlvڷo߷o_ [Ζr),-z'޸[dw}I`+,,; "JKKS_!<ٿ/gfgg3b ё;t&nݺze2\2==]ʥ*]|<}|f >DҪuDfR.yz O NjL2_&L R^ nJ I8 X#xcO?ԩSW^ Mpر҂1AMB EN8!Ӭ^{B!q߿???>opRbTC4d6R^^uV}څmN22ȑ#8϶ȤVϘ1CIQ]$P @ 8qbLm}7Xv~˓Iڡnd65TPPe}x'~'JΡnd65uiӦs+Hiiٳk) "hljb„ Ũϒj(@02k|<^ߧ\ EFf`mҤI|*֬YӰaC rB?3SɽoOlT~[iӦzka(@dd6ԩή"ɫewZnn !kqTr=zFnJ8 EqvDUVVMy;of:Xp3Q67dcxPlg6SSҗ^z)--sϵm6%%gϞׯWf͚5m{qިΘ1###CZNnQ^~6m4nCԪ]Hs-)**7>-ZhݺEܛ rp;vxM4i޼C={˖-6>^9| Nϖ-[ʪ?\,˻dY+.(G-[f0ꐙ|Ķm .ܲ lA?!`4-!M2EKcjjĉO}GT9Ǎw 78_%P/X3n&ռX&2{Sݮ{n.^XQMje١C 68TԖ%镗DK.1bZ $[;|f^{-"yq9xNڵݻo߾A=N}<9l09rHL>\-_ve]!w>o]]K/8C_wcN}]>}/m!`4-dĞvi*}e%%%[E_KeVDF%2k٭&TfYtieaϞ= 4ɟ{ˎ;K.[lqr:Ȗ7nܨ~5kVO.3c]ve7n~Kr2uv݅ӫv߿QF|/HOOwE8)8=e-rHjI&PGi&.8eozɓUcMwg΍={vwT;h8TVVvg+*\3"G}Ԯ]@a(2k٭&(i_|Qf{uYҲ~zɹ(wK/RTǕ+Ws9j9xЖg!;h.rOe|jc<nG|ʚ(Gun S\pg M[ >@u@ׯlO>N}y'6u=3|@ HwKlg6Ԧ;v?#GHqP=۠A+˗/?{=*? ڵkSҐSG z-i'.own!Bt/ۅ\S$D85SV߳O;hn!qСǧQ"T$C9_gWVCCX3nmMy[)%%%uzp 7tL*++,Y~_~ٲeK:QTg6وwyyy0ضm4it#\A9s%92pݴrZ7g_!O!dOm9.G~JwIqTGwc;%xw8p@_|-h';BlΜ9"AnԩڻE 0ݺusZBH6lg6 >#)))2k0aSvv[&M5kvjoעEy9q:8ύF< oڴrz7Y_/o~B;[^|jQoN\C y9deen_{9.'c(ر#s35)e˖J])S [pw0[|H7nի ]i޽g}%]^;-!O$Pd6֌:r2 O$DF￯.j y"#z;rS1իVRٵiӦ.oIl"ŎkTFESRR==ڧ~l2}Jٰa̙3S,"#vĉ:ݴi<~bTgI5  @ML4i >rȑ1c7SEАÇy}n;wnii~}Q]?%P @ ͙3磏>ҧWq< 0뛤FfPsӦM[x>B9rѣGGEpJaaVYY̒UɄQ]0AfP[V1bDii>B={1c;è/"x|G5}͛7/o6lxGrJ&1Fuc(@Hd6^ڹso1qg}GʥޔNϜ9?~A EQ*@1b7J1sU aUҍ%wX n\d6eU.coXtc"-r #|ê3 oYK V%ݘl|˪\qLj߰*Ef[V{$I1sU^QQQII{Ju~$I1sU^UUUNNۜb iv$I1sU??ڷob˗/OOO:t8&!Ef[V)SvEbX l[.--ջ$Ęl|˪\q??mڴ꫻v*#V[$I1sU[ozwvW jb\d6eU.xY~Jk"555;;@3 oYK .BzG&!Ef[V)Sֽ{w>>`5 1f.2߲*@'Ȉ#Vc"-r ėz O3 oYK X 7n:1l0&LWxjb\d6eU.D{lϞ=`)f80r bjb\d6eU.@Glر3 oYKH F&!Ef[VPIbĂ$Ęl|˪\$_`Sm9I1sUIbxjb\d6eU.Ibxjb\d6eU.Ibxjb\d6eU.۶mz- aرZp\{w}wVV 7loiڴ/ 6$Ęl|˪\"9"6X۱cGJJÇݍ9ZbԞ$Ęl|˪\" lN4hеkK.D~n.]ty,/X ܖŸq:t蠶6~S;yHNNNKKKݫ+oQ&otxCd5 1f.2߲*HB6mڤSLA+믿.YHw}Wy睔>@z-ܜ 5jh׮]Yp8-EEE;u)hCі-[Z%}|@-XUc"-r$TQQ裏F=;[6l.T:ȑ#_}٪,hxAߧOj„ _|M̜9gϞ999;w>󵵑3[CLޕH(eUU%1@7c~O7opw__?W\q,[LW^y;GP#H ׬1sUDҊۜs3oYUc"-r ĝ{ݺuvyDr[VUŘl|˪\qo;&ǏU5\'墢"mPUUըQÇvgѣ\UU1f.2߲*@i#vȐ!?ei  6nդ۷'O\RRD-b\d6eU.Fodgϖ0ZN?'N)֭[7mڴO& ޲*Ef[Vۿm;- =z$4Y+Y8vݻU+Vo(_| b\d6eU. EEETTT <8'' /ɓ'K}..]H%\hѢ_7_| b\d6eU. C  jê3 oYK #v޽]t˿{W 1sU^yyGmjkS ޲*Ef[V{EEEGGZG1sU^UUUǎ> ''G1F-b\d6eU.k222TlS#W_MKK:tD-b\d6eU.X` Tm,H`KMMmӦMiiD-b\d6eU.xСC۶m%Ɉv_qz'1sUG֪-RXXwBQ.x˪3 oYK ^***RSSU`;uG1sU誫R-771sUH=DӇ1sUC2byHP.x˪3 oYK ԓHxHP.x˪3 oYKƮ]|ѣGˈ3fё7iҤ3g5j7o@,X@o 6m-r[VUŘl|˪\իG)3c} s;vc1sU_}4OqyՇo( ޲*Ef[Vћ6mŋ 2PTVVJl;z>P.x˪3 oYKDiΜ9v=n8}KyyG\hk$Ęl|˪\"~gI1P͝;7$EEE%%%Ώr!jjb\d6eU.I&޽[ۑ#Gƌ 檪N:}G\H_=I1sUщ'0Mw׿iF6U.dYZ] &!Ef[VF~e06l0sLmHITr!,-lYMB% 08dc_.R)Ϋ$Ęl|˪\hҤI,86֬YӰaCFZn]ӦMV0^d+<521/999Nei;=I1sUQ4&{NIIiܸq.]{=K~ު]^x57~Iffd$Ęl|˪\Ș:Բeɓ'WTT>|xҥ .;k :E[s ~~IFF y#b5 1f.2߲*02f+͛7o֬}wi$Ϯ~{־cǎoI&އzRqMs=k۶mJJJϞ=ׯ_moQQz>;e#,nZC2etN8QۅZ;_nӦMƍ?J$Vsh{ wƝB]Cm/Wl-dS-rT yl!2m!xnG82[iiiN4啧$Ęl|˪\Ș***dJ}׿۶msͽݻo߾A=Á0Jkkor`q~}ݻwŪXnڦFw0ϻaÆ>|xȑr"ÇW˗]v,N;4yxJJJ]Xݩܷo~%1٠%ܵrws_y{L6%zr:;B[7jQ-\@A'3 oYK3?133SbL޽5oԨ7||遠0p#ٸqjڷo4h_t͛ݨ]vɲ.Y&MŸEYYg+HxPܛո,Tg͚ͽp͸S0wovٲe7v ?otߑ[t w;" \3 oYKE[n[W"_}|4=Ilv|2wW\y9;^|E uY0p7'|gj"P'-}m-`:Hkfit!|:[7: nnG82[UU >CVc"-r #JD}{gst֮]9]޽{4h+;vw}'G/-9ÝСCǏOKK ぅݚSg333ղýp͸ӐK+npw$d7!B5b\d6eU.adl[n;v}UnK,T&|8ឣ4HNȑ#U 7pM7ɔrɒ%JJJ<Frȳ̙3Gv*9gԩSwa<[S٤w}.//Oqh0ܵrwP_pu yl!|GBv %b\d6eU.adlw[RSSSRR=믿~ӦMjLև Ҳes9'++<@&M6m|rg;9Le;7o~BLn6k{USݧBNup)8SZ9; S|m-䱅|s;" KVUŘl|˪\Ș!wP'lUU1f.2߲*02~<'X. ޲*Ef[VFdDf @]*Ef[VFūV'@"ؼy;CioYUc"-r Ǐsa ̘1cϞ=v\UU1f.2߲*Ƅ FƍG(eUU%uiӦa~+--={>OE-b\d6eU.I&mٲEO|֭[92Po|Dž r[VUŘl|˪\։'&M'Iٷoĉ?#}ԆG-b\d6eU.Q3۷o0a”)SsۈG\rҤI2 1sUDm?~xrԔX QcO… }Fr[VUŘl|˪\qLj#.>oYUc"-r #6eUU%w8UU1f.2߲*@1b㈋[VUŘl|˪\qLj#.>oYUc"-r #6eUU%w8UU1f.2߲*@+//wXm-br[VUŘl|˪\u=b]:?"(eUU%P:v6gΜ93''G1F-b\d6eU.k222TlS#^HKK:tD-b\d6eU.OefggKl lmڴ)--ջ"(eUU%/YYY:v(#V[߾} br[VUŘl|˪\2|pm۶mUn+,,;!(eUU%/*ѣSN<}Q.x˪3 oYK j> ޲*Ef[VO?T}֧O> ޲*Ef[V,<}$^(eUU%_I$<}$^(eUU%_۶m[VV@\UU1f.2߲*@UVV>oV^^^ W#(eUU%/*ٳGҚr[VUŘl|˪\ql -.(eUU%P-^(eUU%P6V(eUU%P"6V(eUU%Pg lml****//Wr[VUŘl|˪\u#Df͚um䔔oYUc"-r Dm>`vRSS۷oO`1oYUc"-r Zf͚U/k׮ڠ\UU1f.2߲*@L&)*mݺU}Қ lG-b\d6eU.z6mڤ0K9@-XUc"-r Ĕ$.m|ȑeeezرcZZ m2߳@b5 1f.2߲*@jT` ~mժU<@v$iӆ$Ęl|˪\u PUUUkԌ bVc"-r ԍelVZ׿$Ęl|˪\u&ul29] @ݲ3 oYK.m PXMB%Pc $Ęl|˪\u/& YMB%>`5 1f.2߲*@c jb\d6eU.8Ro%?XMB%_d&!Ef[V;F,UI7f.2߲*@1b7J1sU aUҍ%wX n\d6eU.coXtc"-r(UUUxX`oXtc"-rhH`6lئMNl#|ê3 oYKgIkJl#|ê3 oYKDl sX n\d6eU.Ap`##|ê3 oYK.)61b7J1sUDHBl #|ê3 oYdP^^^TT$1L_F4Mme99}ErcoXtc"-r$JJJ:vxmN}`Sm-srrHuI aUҍe򐰔ڵk{.nM>%$Ĉ߰*Ef[V2HdС\IPm۶վvY`ScۢEjّ.'' . È߰*Ef[V28MIKKS_ܹƁMQm׮]kjݻw'Eƈ߰*Ef[N zKa~m}>ɪ3 ܹs[nݪG۷GZXXXVV6||϶o߾#Fvdk{ U i߾=߳ P+*eee_^?sժUZ]5m*\&[~333/"ɇ6@2 jn޼ym۶̦X @b[p`s^ntblԹsg틵-B`sS_FfDyyyQQQ/B Dۢ l999}@fԑ@6{d6@ Dm6u*&k@8d6@c lPm6" F|'!g1sv>HBVEfر Y}V3 `s$dYi\d6!g1sv>HBVEfر Y}V3 `P^^Q2N8??]:?_l:VUUձcG'9Cܹ+ ^nnnZZmshܹm۶:tGfԵLm9$u5i׻l8֭|o^^%uСo߾z'@f / QI+,,;2 .T`KMM#DfGnnl}#CfGiiizz|uޝ 7I$<}lys 7;wϡ2}8aÆ[ÇjP#iM^mCf5w`SmCfԩFl 2 l `d6@b2.D&[.***//W d6@Eؔ(cۢEnƜ}~AfĖm`S"ĶÇeeefffFfP-ZtWKTO .=2 Vjv|֪Z l$AfĊM69orIK Ϙl_I>|xmg۷o߈# {}dggO=c"NElS-}UV=]tQjj* 1s@b[p`sTUUZnNla\d6@!l8-ul29$c" Dlp3f.2 @F`0m6jϘlF`EfDlxŘlhضyf^1f.2DVZ1sv$MCfCEf!!c"1svlxȘl;d6}ѣg͚O?73f.2xرcfϞo#G\z~G%c"d/z @^MČ1s3GVYY$%Kk 63f ߰Ν`bl+W;l~2qÇ3 1jԨ#G$ݻwO߇/L2Exʘl'(YaÆz ֭[״iSdgy_iĚ1sdE_=zL>%-ٳGz]V_RRRS@- SDef+((o62f.2x>7?:TUU駟s=-oaݺuQt2L Q kEf3E] /h*<-ZhݺET͛7k;pj/++;iӦ-3fȐ:8ߘ]y 6=\۶mek={\~jܶmۀdr:!P>]nhTe/!SCfĚ1s3}.QD{Çk^T{nn7߼w} 4VW۽{weeŋTfҡCgW:"|nwPxǎ.?ÝwY^^.اOY(<]nkۥK/4qjlX3f.2x rfꫯN;4dٵk,/[qƁ5j7ߨ>_|Ezzz4h_6Ilر]tٲe{{AnwJpfs,]ys0{හ;wsvg;#ӦM}֬Y5c""g6 RKwءs$I'5isϕ?y4wy/J1fpS3ۋ/ؾ}:@Ё\28 ;EȞ5c""g@ICFGy=k w lܸݨ|?srwp/hN2N'9rD> }[wջB"dp wFl~aq#b͘lcf㏛7ooF~s#oG[j ؽ{)?ܔ)S?lzgݫgWZAA$Pnj1QUU5yI&իNOo߾]Ğ1s ~ᇅ N2er_hժޔȭ)..gȘl;&PSEf!!c"1svlxȘl;d6O${EM駟~A}E5-,[, K![l3ÝȮ]l3۾}F{6HEf|m1bđ#GdСC+VpVimݒn*CuOvv̙3eaԨQ!Ce]$r!{1܉tYCJIb!ύKT6lO0)ر㮻R &8mO>ڳg'x?}Ywn_ 0cǎ]v=zt$p=C1܉,YCl~Ee 3_ b[-~k=ueLb6HEf|_b̙ӵk׬=z[N_oT6lO0@,c[B# @20f.2l-@l B`KT6lO0ͅ$l1s`f ĶjAe $rF[ $}l# @2f.2JJJ3iΏ@6Q$!c"cǎƙȜ&''G#eܸqg6SmҥGIS1sـv5dddئf6=\ZZСC |6mڨئ*,K]$ ʄ&;;[b,H`KMMMiiT0)eiiiդɫ,K _3 HlYYY[رcj+NP.R)h՜Wi;_3 Hlyyy2iӦl~{aa Ա.]&dnj$ÇnZMkz٩S'~G@:d6Y1c" ojZsfddHeW>ߌ$ ̦O>>jֹsglJeoEf ++Kf6<}'g\d6ԓH}~"5 3 ~sȑѣGOL2cƌ+|Mn;?~DYܕ-@d,B+U =uuD"x@Q#EwB"P"@@k)`{sL'w;g?r&sΝ;w&d̆ O_ cd5a„3fl߾]d\d6Y7owыr\hĶL駟fΜ# V/I1|/&O裏.^X a\d68"eZEEEaaayy>fϞ=z={OF ݌̆A`-b[L6^GbHG ̆àdĈjSNٻwlرcСgyfN.RY:&Lh׮]׮]\۱b.8mڴI&?OI }̆@zcǎ{TE]RmQ]]]~ݻwr{F`$s쭷ޒ3gSKZ{ek7ޘ3g>Kcƌ@3 -sO-[\z3#!]kH=<eeeZ;6bdc9FmoذO>X?+W;wݻw7N_7|c\d6DٳgKS%GuԾ}jW_ۖ-[6eʔ .ছn lx6o#O< -?..Ęd=zĘl8l?-Z̝;. }QIh?XB6#GUaѢEj;8]O>V"_Nr ֶm.n믿nܸ^/'p^Z39gm`Ϳ|7eCfu]g׏}M0AV)S!C̆æ4??_ѡܹnرg)_x )ܲeK޽ey-g}ySRPr֯_{ngazvB> -e6>{キ`}L 3fM ̆[n0a^BfGK/^z]t'~ ez  ʅguV֭zO%R;Wgh3f駟Z;vlָq  モ]TdGMg]ոZ5jH\Tm۶[nw};%kwzj5Z cn1bzUBtLg~ ! @ꌙ̆@,___3 ,G߿믿M&y@Ցyꫯ+7k,~饗d*+++ׯqFUno;:[Ϯj܇P2sLٞ>}&UA/,#Gt$_{ 2D|-[[r婧k.u]j{YhmyL%Kg?K$e#vܽ몓! 0`Cd6ɓ7oްaoQ.nݺ4hР]vO=`m yyy=zX|E; j,X`֭ÇݤI믿~۶m_I7p bĉ͚5¦M?^RVV&;YOj^O?',=ǎ\,ٖȶ~q@^<IZl) 4ׯ5j$M1B=nI'$7o>zxU!CH9ӻw~=;cWpjU{4O*Oҍ{V;ʶ;v;e˖V>{ȝ`50C|8r:~'eo߈9OI{~gɯ˿oEwroXH\?=wq 8<pgswq߉ !C̆ItmېT`;dcfj2+oe?֭UZUU%sԨQj/kQLҧO`o~YYe/UvZ)oJUߝkܳ)xVvx )O>٪U+c=WN~zV\Z>g>XiՈgm.No(yϹjw=z^ ݵmr<|N< b\d6DNhoIM&mܸQV9'|ۢE ݻw[VT >T:Y]xyyy۷w~h۽+-.. oF5nx…ƺ[Աڶm_~'ݸB)+\W^RMʻw>{5v?_}Uwef(܇x6;5'Y8PvΝ;-W;N~}Gya<#⮾jM4Qm_m.7(5W !u7>Vݹy\gZ>'̆ 1f.2"'eEld'[n x.ܞ<,Q[]AfC3 _UU[m"O-]-ap=EyXܷBCHc"+---++u.\^5mqh`;ɖJJJap=EyXܷBCHc"𫮮n߾շ2ZJ\^o:f̘Ā\h+v0ݓ-'͝;B_@ZW^@:3 p7o\2ZD@jl[[m^|͛7M ̆H(//oڴi˖-e,h*R"zU 5L6bʘ1c%&EfCT[вzJ^ H&[5kL2E_@Ϟ=[\ib\d6DԩS;w|!-%z% lF%%%W,W=g%&EfCTTWWi^F6 a۷oȑ۶mӗ-?ӧO_tǘloUV| 2fTUUUXXHls~G$VEfCwA@F16jԨ5kK~{ڴiH7c"!ZԇC&[+))y$Ie˖ϙ3G,`\d6DԩSeB l['u ={L8?uF3-%6l>}xѣe-_ &̘1c μ(#lٻwܹse-rE@L$c"%㧟~9s#< /ZJ R;EH_|1yG}t΀rD|e$M/c\dUTT+.={ѣ٣I,\5 ll6m /:H;G2$W ,280f.2[L+)ڵk׃>?<5#D @3-7xcΜ9 *++njOpdAگqd6q`\dPv=n8}qof;iIU ?i&}qѣIU fo߾ && 'L2%{$rՀ: f{-X@_49/1c>=eij@@fEf3+))WL@Oqd_W llf?\ʌe˖5nX/%Kg?K}8yǚ4iҠA[֮:yG XZZIKۉ.3\ =֤x_5N c"PGVl2J6lجYWTTR܂rͲ\tV2KKgrGOZNtwOP{DR#\~BRlX!Rj@@fEf3Kh=aÆƍ׮e˖y#S\_&י`)vIXZZIKۉ?{.IhĂOH+dBW llfIGA[>NhҤ_m6U^YY9d)wZYn݀4hЮ]z^PfSw ?TX`/FI#Fصk}}ً/XU((( jYf .T{O:$)7oU=r-ZIcЯc6ɓ7oްaoqǎ%'N(¦M?^x_}O$;&\#v6.Sҍ+u,i' d6q`\d6$֣СCn˖-fU>ƦMd[۹K\UU%+޽{ Jlv#^)Z誫]{>xvsBWZ%UYBYJᒚG޽[rM1w\?;w]ٳc6u8ƪg]XX^r7(G<#>Cٖ"WsUx_}O$gfF~#}KtN]YU280f.2Yŋ{Vׯ_>(??ߪcz}νvUY}W^S J֜FܽR@+WTΚ5Uku&`_i~ÇuYrg}V֡ƍe{ 6Tl6N8:ݠ h裏ʺ~ot<X!5GlkfqpwɜnY/Y>kRj@@fEf3Kb=j϶b Ƈ4j㎓˗˒ѹhG{UZPd7,wHEM'ww!Cƍnڴiw}_aÆOjݹj;qgyF ks1ni9|VjΓ۷-1stwutAp~I}oG-[V^=gIyyy^^ܣ0SdNI7W<+[^,L5_5N c"ףtt]wgS(_N/M_]-(ZsqJYt]@@gu%\ҩSZʯ|EON륂$^椳9-iӦӠmǎcǎmٲ?aw:Y!|=wxlڴIYԵF~#9ڬdNI7Y<+L_5N c"ף%ƍ?7j3p 7߼[.+dk׮O>Dk/kԟ^f3fk5>v}-[v+;aÆw|v6L2۷o:tŴ"u۞={5iP7ސYa?䓭ZR誎t<ɳB>{ տj~L&\ϻu>5|FsYwɜkܳ)xVdV>;~Հ: ff\[C?W_xbUYr-'|Ęm,Τ&M\wu{- /0//}kfl[o6nx…`8p㏿vܩLz0L!s]m{ g_{t@v:fS-7|p \W^RMʻw~cnA#Y d6q`\d6{6e/͛I ,KU280f.2[(Şucƌѧ{RG)]W >280f.2[(k֬2enٳg=)#YƫD @3-իW'.{衇߯dqdGzqd6q`\d7rm۶ (n>}ҥK,HU" ̖BrkOHFeQFfEfK,IGf}1oiɝ&#ѫD @3-a+))y<9[l?~9siV#镝D @3-I֭+..~'?3}D̞={%GM8Z͙=rՀ!c"d޽sΕH !k?>3/Hd'j@tā1s9F0ـ&EfCYd"@3 Ohd 8nRq`\d6D?5L6 Iā1s9F0ـ&EfC: ;w5jeY d"@3 ODI`+b[l@qc"!r 6o,iMd"@3 OM!%D7)80f.2"!-QL6 Iā1s9/)Ķl@qc"!r mb[L6 Iā1s9q ]UUUZZZ]]#L`SmG!wmu7)80f.2"'?ڶm;tЊ 6%dl>}A:v(=_i1l@M ̆ȉO hѢiӦ]v_[M m6l馛q l:ـ:@3 ۟Zj%߬Y-[jo%wl>}zϞ=Oqt%`'PWpc"!rڎmJ~~zmݺuI6EŶ/RfbȐ! l=ـ:@3 c 8KzK+7 @qc"2a$:tpUWs9:ujee}!0i$l|YCf8pbܸqW\q9#MʶH҇pԘ4iҊ+n:|*R^:n Mlo;vl͛ J)@lnniϞ=k.RGjJ}biGfx;vİLjJ}K-\?pΜ9 СCAAAN TQQ e/ "j9pö+O/3θ{^/$ @TTT׿v 4HKkN::+˾o d6@-ƍ^d6@-߳]wuzJWwmH/2s#,Yҹsg=Ҿ}>}d Pg+**֭j%\裏:+^d6@-8py?guV=TZ;3$Wjהd_i.)"t .߿?,\d=ӧOldO"ԗd_g!H aر7t=`RS^ 5d6`7|İ={诹H)g< Mرc67yUHM@fYpojL4iŊ[nB*R^o2ƍ+>DDH2Ef"@t l]d6.2D SJ"#IENDB`onedrive-2.5.10/docs/puml/applyPotentiallyChangedItem.puml000066400000000000000000000024541513710110600236610ustar00rootroot00000000000000@startuml start partition "applyPotentiallyChangedItem" { :Check if existing item path differs from changed item path; if (itemWasMoved) then (yes) :Log moving item; if (destination exists) then (yes) if (item in database) then (yes) :Check if item is synced; if (item is synced) then (yes) :Log destination is in sync; else (no) :Log destination occupied with a different item; :Backup conflicting file; note right: Local data loss prevention endif else (no) :Log destination occupied by an un-synced file; :Backup conflicting file; note right: Local data loss prevention endif endif :Try to rename path; if (dry run) then (yes) :Track as faked id item; :Track path not renamed; else (no) :Rename item; :Flag item as moved; if (item is a file) then (yes) :Set local timestamp to match online; endif endif else (no) endif :Check if eTag changed; if (eTag changed) then (yes) if (item is a file and not moved) then (yes) :Decide if to download based on hash; else (no) :Update database; endif else (no) :Update database if timestamp differs or in specific operational mode; endif } stop @enduml onedrive-2.5.10/docs/puml/applyPotentiallyNewLocalItem.png000066400000000000000000004326401513710110600236470ustar00rootroot00000000000000PNG  IHDR _Q<*tEXtcopyleftGenerated by https://plantuml.comv iTXtplantumlxVo6_qbqt鰹NZNDIZ:ۜ)R%)°}GR$4{`"y}eG\I<僲(-gBŬG 5̮qc[:m`W(_1)z^ )7k`B#KJK?95`lO@p>@sPVt$8'kGrٕӝZ8^[YH%nŨ$)>riȋeY[N. QT-?ȩjL9{"ovqD#o͛Ouc oRLznʱywPLNstxBϹƍUZN9:ZDTۤҪGU[ޛ qzo2bY{/R'KĴL`;M;\q|~9ͺ }tQ!țLJo.2[iqLiER(XTi 2JݫhLLӴ6%B)xl4V0hYncz(lS{MT&鵱v5X)TCRmxkIDu6=ϭ DFT xG+nƕ^Zps|.Foi x?gqkhzDw۶m⋣a4}YpadFÇGcYcɒ%)hJD_ƍs:d6P~^zEӋqD4ԣn![C=jjjs46P_>Gs46P_6nM,뮋N@ @}YbE4.,:Mh#E:mԁh#O>q-[,:J}$+d$!@Fd$!@Fd$!@Fd$!@F1ڧH<#SL ~F;$@m۶hfs1fPJJJM4ӟm ^Aq"RRRm 2eJ9·#?@TRRm &hcxM6E;|V:&Em`EH64M6cBz\PSS&<6e?\~'|zwi~fts=f u =-EBi ^9m|Wׯ__QQѧO>;:(Muu*VZ͛7/{(bzZh#@frDXq̙'xx!1"V =zj˖-uvwD&ݻiӦq' >0 Zzueee/VJN*Փr<`HW-$g}/e˖ԗ1jԨ+r h#@ m=GY^^jժɼZ8*ybz0wo裏JKK/XM6D"yV^y<9yɳRuK?89>K==}O&=N1ǏׯSO=Ζ{/>蠃^{vܹs̘1]vu]͑ x٢u oDˤ+"h~FKi c`6>ReeeLW_}uONMخ3<%\H$rrg}YʷoުUٳg'[REK*u|IO}ǝww衇G8[-Z9|k=z|_0aB8 3A:l}//sG64Ma 0Ƶk6ozw͛׵kHgϞ .{Zj5cƌIr&sloߢEgy&lIߏ8Gy$9e˖{o{g7I;v:w{w|x`ܸqaW*S%>ߧÿΖcA*יÙ/s<ѣG t-_|̙1HٌO/ǽDB2GQh#@ m s=Z:묳fΜɴ=c jٲe׮]_E&ݛ[<3{|i1I}Ν;pz>}zj7,xNO6N:N8:SN9%yJ*]Ts?_(N/nL]F0˗/_~mڴ×۷o?n騣j޼y0 ui{mk%41Ed"r;c'NmmΝF(jMSl4aEkjj֭[oܸ1׸4;?rPDhbÊ6?3gF;sDF)6Xh#Mr864MĘh#<m= èQqmhh)SA#h#@ӴFHCt(NM{m=Fi&6o64MDF F)6(^aÆԗhc*6(^2k֬hc&_ЈFEKjkk{hѢe2X^^ޫWChb=Fҥ… ?שS[o5:+6(^U[[ۣGdk׮AKtWl4QmԨQ'|rm<4jDF~_XQQQ&6 2㏏vFEMVRRr뭷F;hb5k~N8"1f̘g}WSS}|DF"s|n1cʕ+Ee…ѦoŊwyg+**o&6˗_{oܹcƌپ}{] Nl4Q(ݳK4p^TUUu5? 9FEԩS,YڱmٲkyFE?`hȎ}jر7 bd֭7|s4^>5w܊[@DFbRVVV]]ֱOm۶nUdMm(;v4iR4XGpwD02&6ŋ?T +fϞ}$6(P4&O`L81Il4QhEtY|yͣ_D /bvcǶo߾M6ׯ}T]^ I]ga|7 LbEcҤI<]&>gѮ]6mڜtI3ft`3TWW#?G;='mSl4Qhm|G={wӦMG'P3yA&6|'x~Hc؛2eީSG}4l_~ȑ#;tо}/xƍa{UUÃvڍ1"9C{=yAK2(//oݺufڴisg;;wܶm6m n.]'8^ ZJJJIfʸTo_>C}xʕvآERoduKKKo]tiDMm(ƪf͚ۑ˗?϶nC _z|dpVxaqP>i+**:o޽{]ZjN]pSe<_6gΜO?=?x'x"қq@y&6hcOL2nCkɯW 3GyC3gܴiSmm?>bĈl;K. x ַoWWWoٲeɒ%Y Guݠ& ׶z1*ۍ\|{np0r)?CEm_#L~݌rmSl4Qhm ,^83tЀl 6\ve;v F[n ۫3o. Jΰdɒ?|޼yP>Ơ;ܹs۶mGiӦ?i֭< &$ X@vfϞq2}ݗu}ӧOO.W_=S߿c=NC=q@6y&6< Sc!hh#@(++銇h#hh#@ml&N}$6(P4,Xlٲh`ʕ3gΌadMm(|AQqc#6cƌ@&DFbr7n޼9c_3fL hh#@1YzԩS:9sD*&6UVEu;^{Ν;YFE̎;FqhŽ}aƌ˗/IdMm(>6lk%KL>=Sl4Q(mذaof4m2iӦEFEՎ;&M4u͛7Gcwԧni޼yѷ痕M*%%%Ѧ,x'O^x~}|DFhM@l4Q}Ci&6o64MDF F)6(!4FE7Dhh#h#@Mm`/ٰaCH1 @cMm`/5kVyyyej1hz/hb%{^`A2m,//իW4^DFQFu%L7]><:F*6(SYY٩SΝ;/X{ѡ4RDF!C}ѝ;w.))޽{o߾A4^DFiӦ 2s:u2eJtWl4QgϞak׮AKtWl4QmԨQ ÇvШFE*++WRRҭ[h7Zl4Q}`Ȑ!%%%}vFEMVRR2eʔh]l4Q$1c\ςK ]ћ`߉&6wD⪫NԿ FAp/W^yt#@Mm3kܛhh#_Cҍ Gl4QL4?qxaÆ#8>7mtp w9S]]8qbϞ=&IJ4\c(wq͚5۷xQG=a_gСׯ$"6(P|l/}i㯸⊰-ZϚ5s jkk[huְ=yhPt5k5k`8>}<1"&6(P.첻>ڵU>ݕPl޼K' 2dذaeeeyM&ʖn\fMVw}cǎh?_}nݺ@FEwܹÆ [jkk8;v>O^|_CK&k eL7:y|a}*P?b3ҥ-_oO>$8_~`k֬ <ݻw9s{;6<Ni׮uzSO=5ںKE-Y䤓N:z`h.ƌOwA~88E]@FEլYu~`h͗\rɗN8!YVV4[nРA}  裏~kLSk׮ӧ׾IkL,{aˬYN?ȰYf<@p椓N Sy>`x<}aÆSN8pyz-9sUUU-R/<쳝:uz'×H7}DF"VP'k_wsΊ+o_#8"mlժUx+~O͛>${/֭[?3۶m)SN;.(Hoвrʃ>89 ꫮ*8>&,h\l4Q9u#ݘm\foǣF n˖-l9%c1pg޶m[bW]z饕;wM3l }&LgϞܸqcp|wz[lIo;ӯ_~8rьW&iQsDF"f D\kL`FE3M2( =Mm(bvK4t\#h\l4Q9h2FF`)hh#@s %ҍr@A(hh#@s (ѨӍr@(hh#@1ٰaC9 E%iQ 4Mm(&f*//OL9Ao%@$]QC 4Mm(&zJn; ;PJ$ǏX7N 4Mm(2ÇڵkywK.Fh +6(Pd***JKKwlsmܹsN*++C(Š&6}{` G}!C(&6)StԩsyڴiA @FEOmmm׮]msiiiϞ= GbEiyРAFvPh 4Mm(Jݺu vvPh 4Mm(V} vC vP?h "6(PL윧M~(Dl4Qwk֬9sĉoƌ윃LYjjjehJx2RHyb@}ٹs9sn3f\2A=XpaBXbŝwyWTTD?Ш)RHyBb@X|^[YY@Q;w1co@cÞS^Mm oƌsOtũk ~F?и(P(+@hh#P`SN]dItl˖-ߏ~P⡰Wb@!= ,n\UUU;6FAMm f֭7|stܹs+**{(rJ< hh#P0eee 4۶m룟{(rJ< hh#P;v4iRtw]SS@R⡾)FEXx?ݩ@bŊٳgG?Pxo+@FDF0&Oݦ@c4q{ .6(FYYYtҰ-_yB(Liٲep/k.|JWrK.r~|O?}RI .[$z~u .6(ƤI{voΖ ҦM֭[ҥvI]Caד33UI|JWrs{#OT4&u(RK<yI)W&6Q}ђoݺ+ׯ_]RP*L*]ƳliB\paeTOT4&u(K< GɑR{%+@hh#Puy>;t8[z׿6msʔ)H-ug} n.]nz/RRRR~c`֬Y)~xN}є?qyr3޾}vڍ1"lL_pƇx뭷 >0y`mT^1{=yA}&ƒ;k׮gqFв~#G_ql$,x7?я/C/r!\[hQO}.]> Ƥ%_UR2 R'XH\"S] Ux;Ssm۶iӦ+c'RSȸ^ H%G$Y]wo|#н{{.<%cǎ='N ii)b@aa8쳿lذakۃM%'?ON:xt~UN~u)2g2./ԫd!]֬Y,' s/8U0yL[o 4(~{婽cYbn3c]ۿ[MMM} Ɯ{k׮]n]=+MȲ7x#WUU%vqVg 'e~:/O}Ƥ%)@JJbAي/kp=Ç/=`:XljoUeSלZ b&Ȳڵ]re.]:u6o>hLYI(` \sM0UW]+_I .6(FVW_ _޽{_ΝO1GK]pdSOu! NyKm6DŞJW^I=+U'Ӿk9sD6뮻 gwر}YjU=wlׯoѢE=z'uٟINm:oOz8{~&U>;.D~g?{o|J<*Lm۶鵛Bz%%[ Et?\O^\: ^I)d[U{L=1c'c%9,w$-/ }{wȑ'tRpz>Lƕd6u q >8 .6(F>^ vɗNoOGO~.Z _"}bOL6C=)ҧMO6aopavw$ύȱJ^~b:CMm]_jp|g̘11W <AoOqO?{o:xR#ulłE%~H/k2V*=FkX]4xl >ſN>'?mvx CWmڌkg&6Q}o?ENвhѢm۶ gqKqǕmy'&daڵ=qH>`6m?~|׮]=Gq ^@d` 8I6lо}6mDH"U֭;ꨣ.w}7g?{o:xulłԪJ@R%eݿ1G^I)d[U{XʸEW̶Į3;v;wS, }%}]r%UUU ,6I"˂C$}2dH%Uƫ.s=789rd$qg?{oyaW:NjM!eU1c*㚳_rM2^1ey_|J89䐶mnݺ5MJN[绎g&6Ͼ-Zlo[C=?͛V:th֭{5y6m>YTdO`'LP?8۵k7{쌻Tmۖ: `+~7XI/袰1}+k{=|>zkd𫯾z) K ,Y7o^ʔ_$_ve;v 6=z[MȲŋ]wݕlI*w_׭[l˧O)oC=q@hL)Dj@JJbAEe $;;w 9rM®ludM˸llElW̸З#F ~+)u:uq6+@hh#P:{RFk?j`{И_Hf6XEW4ɟ .6(FYYYt-[ /$vmN<ğ'4_~\mmhL [i(XtE)b@av裏v֭uևr%\aÆ۶mۻw+VD'F?P [i"XE)b@a,X`ٲem 4.+W9sfEKdMm >hf̘QUU@R⡾)FE7oݬ@#2f̘Jy(6(իNݬ@cQQQ1gΜGy&6(RYY٪U[hڝ;wF?Px'+@6DFv1z7Fw-P˗G?((PWb@mذk1YdӣuhDx(, hh#PxwoftEhӦM~QPWXDF^رcҤISNݼyst+Ebڵ7tӼyohxC+@b@=z뭷&L_rٲem 4`?-RVVV[[X@cC(_Hl4Qw|vDAD3tɋ/ehJxQP^ 6(PĂs @bE`/SsDF"f )hh#@sh\l4Q9e 4{.6(P2=Mm(bv{ &6 6#9&6Yf'_7P(hh#@1իWr9ϛ7wA߇P 4Mm(2~׮]ss]t5jTt(@PXDF"SYYYZZzG`l;GP 4Mm(>} ݻw~{`Ȑ!A @FEmlK>wiM6-:Q(hh#@񩭭ڵkm.--ٳg@(Pl4Q(SO5jTBS(hh#@Q֭[s߿ph %6(P윇 ~(Dl4QXvmyڴi @AFE믿`̘19e$w꣬SO&6|+N4 .6#3ꪫ@Pe((MMl4Q _nl:J-@MmK1n>[n`+޲R tFExb/(MDl4QwUTAHD0 !\%p+H)m(>VT! J UD@ !@A[H$a>>UyW3e޳=2?x&k^{Yk̏ n_=cDxc\Xr::yi\Xr::>^K’8*:AASOB^^^=k Kn< 6޽{޽ŗO~!Njj򩍞A?πxL$h"FkX.QF'OT˵ q'Zn} /0qD51Z|~y[oKk%Vڵ'pԨQjMc_~3gT#4W+//Olb4hЌ3o۶-&&fZ/,jXGDj*u{ũjOm yd|cXF6\#==zZJŋLII>}~(U3ݛ+TTTif߾}JukM6g}-[T+4jH]v*+dcqq^RRrM7S۔X'$$,[L{mee֮]WTTȽ@p{p#:$SnW%VSj'e%MzkK:m۶9s ch"FKʩSήZ.NMbnplm7zS'XF6sIlm75E5z'XF6sIlm75E5z'XF6sIlm75E5z'XF6~={'[/Gݳgnݺ=NRdggq=zZ;X8F,D\L?/]$M3ϨÇ߰aFUVV?NFhQh"FO<mȑ#DQoΫzT~wߝSPPo 'vvP#\4Pèwe4h#Is=zOMMUK7n|e}5շ~w g?wb؎njjN&mp1zȐ!V2lذoVlW~ظtRiiZaǎ;v꣞3tA*--mذ7pz뭳g4H"##aܫB:Uėv5<2HŌ+ܸoF+p¸qvڳgOoNN(sLw DgM$bƔO<-K'@y+P~Gݳgnݺ=Nҿ@"[if*"Zjxh)f[ƩmT'OܧOo޼Y+/_5jO?}Ic5a߾}III)))eee_8qصkW v-|Ʌ {YF6>vi14h?O]x Fv?H}Yh7lؠn>Z#cdyٲe_ߥn<}]`ɓ'~odM>I&_~W̒IfG֭[A֭yyybԫree!C?&KǪUƤIƌ#6=/6^zۥKb_e4h#K)&'mlg+\1$Ć(7xQMJVn(-[Q,6]bArZᦛn[m14in7nܸyv֭Om4&Q^^خ/]$M3h/b:uJ6KѴiSĉumŊZ}c5q}hԨ7|#8VСC׿6]vq/h"F7-((оҥDث} ҟt ,XUUոq˗/6jrH?ŸVsEbtM׿vW dY'?hm۶G S/q] >:\P(Lj1}Q%L/ O tJuxZlg?Ո{YF6X<'$$hF-cQ.~WE]FaذaYYY~ꫯ>SK+ho+\h#???55U+"}ˈZ?qCPL~_?sjWk֬b1vXn׮Ŷx~ƍF\2Heܷ}jQCرm۶/"6^paܸq]vٳ7''Gm裏vq;|]w͙3GݮhҤv4&!Cƾ{Bn>;zСCŐsѣG_x񊏸0##{5Vۗ$LII)++S O>ݠA+WwyGl9sF}i#.eM$2b_PP bޮ]B*h#`;nԪU yIII=z9r]]ˢ}ݗ Z1c(IKKԩS~%ܸ8OTp N&mp:Co>&&fr%x 'vv<^ 'x";;[.zD3e1{;%%%-ZHb؎n'Փ}Apzr=h"FjӦk:v(JJ(NxC]82Hx5إK_nx 'vv< .\O`M$Jb#Љnx 'vv< .\O`M$Vb=p@y<`;n`'N&mp)S9E4N@_Jݤ܂ .\Oe4h#p/wߝ]mV:uC^'uNNƍ+C@rss /Dث} EXF6:vشi^~]v)jrQرcGvvvNNNUU9!Dp]|W7n|ZL>=**jڴi'/ [tZZ m1!Fn 0`xxDfϞ-={xr޽{#""%Z_R#̜9SCBu*''g֬Y;w/q~z+?cS oXhqIAЮqpqsqIP-~뉩 D,A&$jk&M_QxxxXXXRRTSgjz5jyh#`w}^:}|r… \|Y>p?qZXh:b...!<~#fXF6FgyW^ m D/1FQEufѢE|uьrL U\|> = !_E-Djm<~~͛hbĉjyqqa9ssr¶mnf+ƆO>%QQQ; %-[lڴI|ETtt̙3o[6mڈ# Ǐ0aZj%ŶxVk֦Mf͚?=ڂS.NIIɨQ"###""ƌ#?+}K.m׮ݞjDm@]Yd֭[opgwQ8ℊ*i/qyy?!$642H@ȑ#̩8))I̢{G-srZO?trrRڎ?~…ѣGꫩbVVVk?n5YXZZZPP TKϴÇ(Շݲeˏ>H=233cbb{9u{rG%~8ǎݻwFF.?LcNQQMx͛7KLV9sti6ch#={,]TO8{lzzzMd$!qũ$׈yq{B aM3,D "xԩnNǎCDŌ(Z֭[[hV'O۷oo֬%jrIIM74o޼ӧOKuСCΝTʵG% -~v͵ mʕi) 6ԚFƗԽ/bbb#GmF _IGɑOq Ԅԋ ܷ2u8Ͱ&m.PhASƏ?.J6lpE1_R[VhӦMk۶P^###ł$<<\9:*}Pb=ӡCO<}tÆ FƗZnzŊBm.\1c|(W_[sfXF60xV{ˏ;ֻwLrjjc=&?~|РA~‚*c bTPPpܹѣG-B54i*W\xCv秅q%&&}ꗾJ6w??o߾ji@͉ = !_pZ h"FZS' # m)CR9q`={ʖ>Q[M d+j̉Kk%쁼c LϚ){JwTc:vF/_[D6nXPP O3_|܇|ZLQ(++KKKogϞie,3,W|uaÆ}Rc5Yjj۶m ᣿o:<X]5JXDD4ORȁ(%Qjڴi#FЎm&L05_6&M{ioTZo46.KyҥڵSXSq Ghp{ڴiӬYϟW+|7%1^+vU|Hg?ie4h#pSNɳ!Z/^ʒ{mgT:tXp޽{5jtQˏ;ֿ큷rqG)'%%wiQUUUTTFFFB 4xg+++ſS=$6{.\=ztjjVLQ?O>s}3ԴO6{#<"?[1jDe\M?s>i>RVM2GT+--ؼyZ(ᰰ0q^qlٲG}`hch޴F%!)16.3Z9stij*>3=7QFׄ޽{gdd}}S/_Fm'p h"Fb ;w{m,nڴI&b;11^N D\ռy[n~El,7[ɓ'Eg;~T.>i>iӮ[a\4f05zƣZt]w%6F9e.KDC_>7ˍCRwކ K ^l^}U%5S뙀07 oJxh۾xjraM$d…[nD@Ggff~rpCyyy[WlР;0[jW7AjkΝ{wСC?c{WǏ6lpſ?ϋ7j wU2sF_Y-' wyezқꓦG1>}tÆ rlzj}arI48 Ν;Yj׽ꍁ IIiixy:(>FZNJ+ƚRL@O?*Om5}1=?ߔeyTOXN3,D,&OJJJ233ſrw"pҥKojO=u}=#ǎ0`WAZ*B{̼꘶{曵5kVYYxl/4m Ν;7zY_u.\ iٲe#Gj/o=nܸM?mTYfP?mML鑫LarI4/n׽א_?\lի~;Ǩ ?VZ2JgzҨT mOuQ\7oo߾._ct:_ߔX]aog'p h"F>bʓ#իWO2ҥKrG(pСC 7lݺuEEEqqaºt+hϿ}?o޼yDD|ر#F4k[o?~ ھo}̘1v^mB_m׿Ю]ӧU^l۶mvvVX^^OjoܹYjQ@ a_ȑ#)))j|ïmƍ1rEݻeˌI_}thׁ˗T2KJJz!b(;V-4RdU~ayI4Tq͛'["wrqƩ#"666##OP_e˖-[]ִ{+5 HR1 7M6OVV|w}_~ב4˗bu.u+z42H2O5kVvv%y]v5qWXq9CpLg0uݣ999r' ڵkJuX;|n|G$luCRn6ie4h#r At8*;;[~. \h/,8q ¦Mnqƕ5ʚ5k~y_e_a6!i:܈6b9Ͱ&mp1Rn!G-_vΎ;6n(8qg9q}!N daM$bB':wYf]|Ypq(Ps/.rC=42HH N:6y/-gϖ=C>q Ԅԋ ܷ2u8Ͱ&mp1Rn!ܹ3??_~F oy饗*++sOD5!./- ~9N3,D\[L2D~L Xnݚ5k'QJyq{B D.F-qP⋌ a5o˖- .O9IJqBs XwqzK!42HH N:FIIIFF1K'nSLiw3!$642HH N:̥Kpݻw˧'N8g0tqaw!42HH N:XAAɓ_}ϱQ-YD+W~مW+N8t.[0 o(//) mi/,D@Q%33̙3W_^.rSN+ o-((оmQ.j_@0Upe4h#rC1@,q Ν;o۶MRK.MHH{ 5T D $(݀tc X8iiimڴQӍ^`AllSO=%W1Upe4h#>\{n (,,۶m ,_Ĉr*,D)݆t,q ^zA'֭JPL`M$L!N`؎n̟?_5RSS-Z$W`h"FY F7# 'vvJ6.]S'XF6oR5FS,q 𘴴458|zJ 5T DroFrrr {nF:tP-R#""R3ZȻ o<-[~n:wn:.=ҍF,q :ݧO-bh"F5J`'''_n޼yVJ(0-m߾]^:>>^KBQ իڃw@1Upe4h#%\жm۷˥2cƌ]&%%*Wcy$..j_Ws$&&&$$j5c֭[;w,VO?iqԩ:uR[VWw=zUVddd۷o/7G5 &LrOgϞȑ#ZMpÇNjO4I-TΝ{|ɪ*=z|עҍz,q 狡h"yS'XF6O>я'N4iD.vIu#77{QcybF\ZKUŋƖ?Ob3FKJJ5jPl#oݺ|&N\=˗~;,,woV޽ bRF?`׮]w5jZmׯ̙3m`T?.uxAf̘|۶m1117oJ|9x`WȽon@QQQ1iҤAC[+塀ɓ'+|ژ*82HxR;uꔜh>}t5!!uJu,iӦ>e˖׼BƍՏ!o}7v*Zز8F/ܵk1xŁL>?T ^yoӦ;}G(*+GԎVTпQllbxwU,))馛۩mJM\0,,L|˖-^[YY)kj%o[qv=@m7o~c'@߶ 8g}V!0 N&m^nl۶,zjPb@W())iܸs箭bɓ'Gtm̙3xcNJķ~;%%E:6Fl4o<--Қ***i7/ر nF{nBS'XF6RH7}=|֭[7lPZZڸqGzFaȐ!g(?~ǎbôeR抍LcgΜ|AAĬXB꓅bR86oO+Z+|GMW?Hm<PLƏ@X긧~x,xŎeO-p RiiiddɓӾ}͛7KJJJLLLII)++EרϹFF 1Upe4h#&%t%Kr{ Ç߳g(|矯]>h||XO[lҩS'q<ÇZ4իW5k֨/U?pQ}Rp„ CW۷oٳhG7%9lذ.]UVVZ <ڨtС OCfkbDz'HA֭yyy}UWZ%6&M4fKQEYL`M$DjZy궥LOm4KN&mp1Ю) n!t-SUQ/|q0hР+V U.\߳g؞4ihcyyynnF?,D\9ʂonp]oСC 6޽{Ϟ=GuVmm\xqll'cbb60@{/KN&mp1Ю) n!t-?M:U.uFKx D.CFFFN۷߼yZo߾Ĕ2>=@m78\k׮ (++9\c ,D\L6ۺuv^^^߾}UVI&3F"eO-p kYRK7^DП`M$bRiӦ'Zj%6***5j7߈iq] n!t@(J7k ^Bve4h#IHmnB ~| $vCZR\n$X#x D.fmR׬Y#6Ǝu'Hеt#ƚKN&mp@KJJJLLLII)++~| $v]_J]K RӍA1Upe4h#1vOY-p v-((оw-Q.j_”R/ӍD1Upe4h#1vOY-p vܹm/t҄AQiӦ\!?<,D܄Ow=@m7(--M6jKZ ,}ꩧ䪀UL`M$&| nFqqq۶m]k˘Q.W<bh"F7ҥnk֬]!eO-p իTqqqnݺ -_ `竹.UjjEJGIL`M$2'wС@̡W^SOw=@m7ثJv.]g:$ N&mp=zsĿ111:uJ_ `455|pB T D3w6mڨkB{"eO-p +,,T?O>%?,Dܧm۶j1::;"eO-p NիZw!ah"FW=zm뮻$ ~|ZuIDAT $vϟ/v ah"FW*,,s褤$>E_ j,77w̙/ %Wыx'N|rWs }v]N(ch"FѣC}c/{on*((4iҫ~X~\%KL<9//_lEKS'XF6ܹs$ ~| $vtҥɓ'>w0GTL`M$ꋒ7|s&6e1;Cvvsɝ nw9M8`ɒ%/{apNh*82H\g_ʕ+'O,fEEE~I5^{M;w}N n_dddTTT[l޼_bmч:;ch"Fp=޽;33Pwʺt)'HGVVu{YFBFHq@,Du<JIIIFFWN ~| $v󥠠 ??_ ԉ^zR5DFe@T DXp-[6P***233 :&eO-p͗ɓ'_xQ ԉٳg˝AH*82H\k֬Yn<)S}1/{onΞ=;o<*Pf͚uek>؁S'XF6VYY9sLy~ \?;w{3_ L߿_ ԡ;vlܸQ#d9v`T D͞=T_ŋ'O,Tg nΖou.''G#3v`T DN]|y֬Yϟ9: eO-p͔Ӟ={4i"6!FxLa`*82Hԩ7رCY/_.W n $iӦ!CDDD'''/YDQQx̬k "z/$&!/de#03 0:XHD)Bxq[ Aj U! "$)E!!p Bn.U_mi:ysn}G~yN<ݸ$)9[o?蠃N9]vq7ndFI4qn喰j6~nǥ%00f̘7n\wwy睷qpd۶mѡWgܰ- jV_{J EȌ&6#jaFK=Kݪ <{oرc``O:Aq8`͚5}-q7cMUMmܸ}/8dɒs&vϟ??1 /~駃˗wwwG'+U>8t!ʕ+ӿHp#W_}5\p'^~guWx֭;w683}CvL>vyoٲeٕIf^zi׮]?҅$_4o޼6o| '\y啕7;vltfs;y䑤X?YfEEW]O~}7^^댟?/??>'xE*z~:ijᪧꅎɟɟGˣ:'gѡիWy񪦪MJ lZoT%cSOnɓ'?酵ST5xuNlVwPhh#0{1.|``+?ФQs Y+Eȕmeح_z׻¥oql}O&)O:a„wva7mۢcxꩧުĨ9~_c郉׿u~I&ۤˏ|7o3mڴdyS_|e}#yW%gu֝wޙަ~7͗_~9YX?z_$8/O[muUijSWB˓_gժUt,|tPjSğ_|1裏7iIvWzꩧ(~+'<Ԫ`:~_~y/+'tPzgjr] ҂]y+hzi'˰[Uca?>,-ݶm[cojg֭իW޽?y<_"ٷ֎i$pw_}#/pɬi`ӪU0衇_ qe _$:===ч+YZGHjgկÕօן0PY^zV]UW=m6eW'֭?}{^UST5xUOl՛ͼUwPhh#0m 9'ԿwljUkaL_ 3᧿7<]ZgǸiT */wrfCU4N:a">ao{ǎ?O>OWwy^xa<1c\pAmuSO=5oS/x|p6a?+Vb ۳aÆިӧwuu]6h:oqWZ*`ٰaâE:L+!Phh#ٳg…Jw=lڴ)vgΜ9]]]===Q 3f8cNn ˰:c=vUW~O>d8 3}W_} ]KôwT(Bf4Q?JFkF]viݞ+VrF^uUF {3m߾}ʕ7tӍ7xuEU+\ľZ{z뭰F˽4Mm >sa F߿bŊ^lݞI&Hwww$aA}LEȌ&6Ӟ={n喻kΝa /x?Y<ݞK.dq WÕgPd?D}.Bf4Qlrz뭏?xAy{{{oe˖)t{6lkڵj` ALEȌ&6śoy/_| "jjך5k_5|#(ggΜ9Q SN W9ZT-:O;QMm(1myVXpUW+rA-LEȌ&66tdQ mЮrA-LEȌ&66tdK(E'Si's2% ]:/Ya7 jډ\hh#@iCNK `؍Zt2v>!3(PbХ/v LEȌ&66tdK(E'Si's2% ]:/Ya7 jډ\hh#@iCNK `؍Zt2v>!3(PbХ/vU?U+X mFi*!3(PbХ/vUV\ۛZhm#6Phh#@iCNK `؍V1cFJV$Z}gSh;?mLSDF21/v9眞8W/pSh;?JSDF21/v֮]5}ިjEtwwoذ!ڎOT(Bf4QL_v=KhSs13f̈VOOOWWל9sM%M"dFEJsϭĉ7e_0Fk]uUQ:c?0_bE)Phh#@<]]]Q0ʔ)3BnOa7Zk``;uE&MKtPhh#@L<N9sfԆ>cYw{ rguV;w;3EnOa70uԨj͙3'\@h*!3(PJvZk0aՌnO:Nr(UW]U-]3M"dFEJӦM3hrt'ZM~la6o˖-eXdITɲ!k֬z*ci*!3(PV'Oгf W0 ̘1#I7&ݞhI|oq3Vj[l/_qQ.{챥K.[lԴh2 :B2eue}Le0'Ƹ}9sM-gحs-y;w GԵm۶nG?QxN)z6GESDF xC97pEzS/ذaCWWה)Sz{{K{FK|p8@v+ >saڈ&PamquM"dFE۲e_뭷nڴ_gxr-˗/oEf>cn̙3O8ɓ'5F Zΰ[/^W^ piڵk><CmWNPhh#0{Ylي+LO'o{M7? 2}sꩧF^veFq3V.{Yp|X}ݏ?xxi5ڞB2@-Zy|@OOյsp8@v+e˖=X-9,^x޽ቦ۶>jo EȌ&6+2H{n'LGO;put ͛p|֯_Qo;i*!3(4aϞ=-kJsϦM{&eÆ ӦM>`a:NrJ߹sg8DKn^{mxiCژB2@/_n|+YfEݞɓ'+-gح,|e˖wqZA6Phh#(SC}ׯ;'eŊQ. W4C Zΰ[Y<7n gigyvxisژB2@nSC}_4000u{(\ 'h9neaB-]4<㴂zQGJSDF!oö9^ ݞ%neq-ò??r!馛3N+mڴ.--QT(Bf4Qh<㏇ms`_'̟?/>l߾.:=|3JM,FjN2ۣ>Zuxn#'?ҥK[}|pT%\RܪҗtVzG o3lm}d˖-gyf1_/Ǐ|dɒ%sMv~}!.ja+]?z}YGTPhh#АNWe?1Xc~i #ӗhvwYe~5' @[YdbΝsy֭\pg-կ~5vؗ_~9k~E >ODߞuY_W ;nz_}ŋû+'tRo,(cؼyN+S?ګW>#U??NoY6æަ}g;/f˖-gN2ї~s{WJ&Mfd<y䑠`$ӉY`AtѿfڧtQB2@C2;]<Ғ.Gy[-4jcN.GA2 RuNQ˚ۓ `ح,2Z?_UOOϻ9sݥ=ÇvXN;?>~駟7O:a„wd9=\kMC_|1}޶m[7N 6~_?&MΦC*ׯ_Aū:dHGQy*Ƿ6Mo:G7n{Fh*!3(4$UԚp~gqFo;̓wLod:'x׻ޕJVicuf6æ&?*I2A}{N9üyxaH.U´uQISDF!F` Oϣ?'\مԚ?nmO>dzᦡGudzٟx≋-C- jI_$ԵvLboʊg{+gKK=U<ȡvfw6x}UfcQ]~ϖϝf͚bPhh#АNWeքdfUVUv!*U?ү}k3g|g-#4Z;Y1N_GV_ui}}}~oD 2ZץVEzp~xJT=iڠ^5~5' @[Yd׾)]tEO1cz{{_} . =}g|#?,9.?G;>ɪX2ȼyOUwL`SVD,(J& 8/^/x|p< AzՎ;/p oW]mMwm'm3gΜ b":3g'RΝ;Ǎo}+:cͫ,hB2@C2;] +Wv!H}iTo= 9xm<9:˃[9>Fj -pӪ~iʷ V{Ae9ʃC??~O>?i/u^5~5' @[Yd⥗^7o^WWرcΝ;7_W'Nwuט1c,Y,#8⠃2e7ߜǖ?|rȺuXu :.p˖-ѯ0nܸ}_|Ν;7 <0ڦU_Kd߽CǷ66z( ygDԩS'I4f͚77,UrwzǏ_tieU}D#4Mm9ԚpK᏿4#xmr$qg#9:qF;ٱ3Q *˩:vbc j^uU*_> VKգq=K"Q|aSoxꩧƎ[Q}Ԯ4Mm` Ԛp3ԧ>muSO=N`.Vk$#qVJ/r\pAt?> _^'6a';|&:2{U_PH~ٽ{:qdUZ|u]k?s]֮]/LTRzո]ݞ%nelٲpL֩?Ͱy\z.GJSDF!Dkյ&gO?x˗Wd9Pkt.mڵ~~ vwy1\tE;v\8-ɿVT-~_Ϛ5+:6'p??%:s284deEz}}}'3衇_e0QKգJ/Lh@.knOaX|y8&K,]4<㴂z;<۷o7nӟ|p(>jW EȌ&6 Ɍ6-5)v( ZEJǰ[YY7|~>jc EȌ&6 iT7n|opVa<v( ZEJǰ[Yٳ:߽>jc EȌ&6 iT=Є K_xP+Xky96PJ /v+e˖u{k&<״z GMSDF!k֬y: /v+^{n ggժUׯ5vQ{T(Bf4QhȞ={n氅+E=KG?<2\}}}_³L}4Mmu-Ka;xݻWnOaҹ뮻֮]Ҽ]v-^_O1Poەh*!3(4^æ:UVwξw{ =CZ׷xR:B2@~a^{=S!' @[Imڴ+ܰaC8bKVZu׾i`m;quM"dFEy?f;t]v-Z /v+{w}\sw3τTx'mذ!<GHSDFiw Щ-Zw{ ^z;!7Q ?љjxOFgmQU[}Ա4Mm_xaժU\sM/_0FAT-:O;QMmi޽?jSӁ|o=QWnOa7 jډ\hh#׋/onE,~wW^y%ۓ `؍Zt2v>!3(PbХ/v LEȌ&66tdK(E'Si's2% ]:/Ya7 jG/ W0Rډ\hh#@iCNK `؍ZW\O/ZHqQi's2% ]:/Ya7 jqq۶mч_~YqQi's2% ]:/Ya7 jt1&ݸDFӆ., @QFXeQq?Ri's2% ]:/Ya7 jZƘtSi's2% ]:/Ya7 jƘtSi's2% ]:/Ya7 j Oʕ+5 6k5n!:x4@EȌ&66tdK(5lӧOqpݾ5L7F~ƌёhO;QMm(1m QU+5kyݧz+N8d1V'}K]Ї&L טO;QMm(1m QU+8xQG͚5k$5*Ӎ4G}ԩSL"טO;QMm(1m QU+8!qO7\c,N7F4N:uѷ5O;QMm(1m Q8GAq&E%R->!3(PbХ/vQ裏Nr===?{/<6F.\믟>}zwwwӦM1cY4M"dFEJLt_%n0:%O03ƍwv15F֭[7wד'On4Mm(1m ({QGuuu4 [ 7XkLDO}G-4Mm(1m h;u`ƪM75[B2% ]:/Ya7UW\YuƪO76kLDIt< h*!3(PbХ/vk$l Phh#@iCNK ` @t\#B2e hC{!藿ۓ ` Ct\#B2ert:ZM~dt_0m2(䧩Phh#@ ̘1#I7&mhI=KݠƧzJh M"dFEJf]]]{loooԆ2eJdÆ ᦌ>=Kݠ޽;T(Bf4Q|Lrq͜93jCǹٳg1*/vZDFY`Az>餓g̘bŊp#Fݞ%nЖ@x!3(P>;wzzzw{ A[rkyRhh#@)~qqĉW3Z/vZDFRZzu6U W0 /vZDFQmݺuv믿^iӦ|+'|IN9s$A}Woz!AnOa7hKnmUCɒ{^uU'xY& 9c?|\sMzfhhߨd AnOa7hKnmU0ϸ??򗿜lhۓ ` ڒ[hϓ"dFEF9s'?0㾦L2{dhߨGFݞ%nЖ@x!3(0zM>8eʔ0XaڴiѾQ ɏ=Kݠ-V<)Bf4Q` fm1cFd}(ެPnOa7hKnmU'x"cXdӿ/%GF%$?2/vZDFn;W^=y0Ϙrqmڴ)>7*! ' @%6*'EȌ&6^7n?yyƷ͘1c…鍣}Kw{ A[rkyRhh#[o͝;Jۿg]9wiӾ/ݻ72+7*!Yhۓ ` ڒ[hϓ"dFEFu֝vizzÏ~ӦM'k'>~^Ѿ酌=Kݠ-V<)Bf4Q`[dg?E[FG{+w{ A[rkyRhh#hw}sgxp]hhhƣݞ%nЖ@x!3(P{]diCR6іrVnOa7hKnmUSL9fΜ\ٳÍhS:Nr݀xh@q!3(P> ,Z'tRoww3VXnDq34C:DFٹsgWW300nDq34C:DFR:\ĉϟ}8@v]_hh#@)^:qڴi6lWӾt MЀN/Bf4QLgϞ8@v]_hh#@Y-X jCX"\A[q34C:DFںukԆ Wt MЀN/Bf4Q.\/>i_:Nr݀xh@q!3(P>qq۶mч۷K7v'h9n@S<4Ӹ닐Mm(t1&Qt MЀN/Bf4QL*sҍF Zΰ 4"dFEJV1&!t MЀN/Bf4Qcҍ@ Zΰ 4"dFEJ`\ctʕ+V:Nr݀xh@q!3(0 6k5nܸq3ft MЀN/Bf4Q`Tl2nXb)=a„{,܂M Zΰ 4"dFEFacxɓ'Ϛ5먣:H Zΰ 4"dFEFXn닧i?xq}`\cy8@v]_hh#(p§z*+6,#$+@>݀xh@q!3(0Jk_~yY},Xs}_Iq't̙3{{{ïH @}Fh? EȌ&6^yҍq1jժSO=+jywqҍ1y+W~hDˣɏ@[T(Bf4Q`T^2ט'qnW1cFW-GkhG EȌ&6vͦVZgg~8@gW2͛7/3"~hD'N/|!h; EȌ&6@s+W+:i]]]{loooЈ2eJdÆ @T(Bf4QI76kW3eʔ;n̙C#5Ξ=;hG EȌ&6Ft\#+X`A8餓g̘bŊp#i*!3(P&ҍr&4bΝ]]]x[OO@Ў4Mm(t\#@ @N?88q燫6Phh#@Ӎr9+ Zzu*Cl4Q Z+POTꦛno~3vXY Z!6(P|HN0׸z꠱n:Fh=|Tȇhh#@ 9V Vf1$ Mm(`>C$ ԭvQZ!6(P|HNC\cHZ!6(P|HN%Ug1$- Mm(`>C$ DUUkjj;rH#jh1XC`=@B>FE ɩBQQQ1`~?|tR5n =XC>Q!bghZUyGzYRRr'gTs:ҍYsy{=Q!bghZϒ;SO=蠃"?jT1T;L8dȐ={rPp|Tȇhh#@ 9Vhtc?>}zG}t#5tc0O3~A G|&60 #G_Ѹb7N &60_~7z1`;c_}_m {~}M碎9昁.U&60F sa3x{7otck f̘q '4ht#@(6(PDwݻw&:ڹƴG[Fhh#@m>83Y54XG1ӌ30@hbLOgƴ` JDwDF&?I764Mm(`yUwQqbL r-6(PDvFF$b*n$ @SL75$Mm($ӧOH͌6]Vn|뭷&6Ӎhc{1V]]ݽ{-[DwDFs97L7ƠݧO::ghhh#@5kVqqZQQ|sn,\0:&\l4QoРA 9ơCFFE 7|g>cےGFE ϦMo߾555Ah#@rDF4bĈ0اO|;h#@rDF4k֬pnC hh#@ׯ_yСh#@rDFBu 7ߜˣ;Fb@ۺuOpӟ4mڴk D&6d۶mcƌk_-bҲ[mfwk׾}k6$Mm Iii ƍO/(+sߖlv^wݷv/Fb@Xt}g,X#D_7 !hk[i^nؽD&6;شiS4n!Dm|+-Ap+{6$Mm ֭[ʢA6ٴiVZ}ԛhoaqt#n%\l4Q( 3g|A6ْ%K~_G_=&hk[:ڸ]`mH.6(h 4iRSofeFK7&FEP(ŋw)3?ܹs׭[u@ӪyWOh~ߡCv]-{{a//u=?v;eބ[o߾cǎ%%%?=#l^:Xދ/fݥw}& s:Oo_Úv O[wyHzX=_1lnN:tȣ{1y2/nxIky]%jzX6m,|37nu$[hvF]N hh#PmLVXqmui…;ICѮ|Zxqk[DYƻtwx_.]ܹ(h>|;߹88C綾}W?MM hh#Pm5kV=^xgYfڵvu]W\cCW\qņ ֯_޽7o쳹f;c`ܹs3"6&2FIp{zo:u[_/v]nau)[R>x_=kGg=rذ+WW)ڂmĈc~>zPxC5e~ٹsQfOd˼ u?/\vI»CH/{РCƌ*= Jn_'y \l4Q( 6.XC?{a9sz91ǡe˖ݕ+W튊ǧVEEEsf7o^ǎ8K\ŴrL +++kSY&2&TÌ5W)Sz n۶oylƎ/1jEOzqY:w.Jo7[o?QQL{6l|M6KޙޝAc?_y"t\sfǮY xlyz"b弰`pw=30doǰ?ꪋ'[RGfL=~0'Uʵ|衇 ^|z$+f̭z.;$Ȳ)ݻwK=y7F]C hh#PmLj+|}7rH}D;Κ;LuLYgȔu@.#N+_ 9̙kȜ33فn~_Asι[j/i&쬏ڸwxwuw~λԎg"u s'8$+OSFS}/vYo,3C;vl챃ȵ¬wmꊳ:w`y'y^\k{gX.YuppWxk[&k6$Mm C#^{瞛 3CrL5{ٮ;,ΐ)g]pgܸq zٙʱȬsfVUUչs o7Lm͚5m۶ Gw( enSN9sN-.o/&몞: _ iamыOd4לY moz[Sԝ{ZW7zr-ׯ6unݺ<=7K >42C方\Kc#~~sֽ6FEРhʕ+'NXTTTQQF ̙3ҥK:?uL$5{َe=K3dJ7tY)=8GݰaÖ-[&OܧO\#s͟ق8pذa\yguիy晰3lƈ%k't݀>,*34ޟVV>L۹sQ0'=vpf{A#7똳^'%K2uwsiٸUΚ-\vCg~L_:}X[#=QC[ߺ`̘ SO=ܒ2yiв#W8#M/K_: L^M`mH.6(D-۷رcIIy睷`ު+[n:tׯ]w.**ԩs=uL$_+{nf%S2e7hY)=72dHp%۵k7x?F?S͞=;x֦N5[eeesΗ^ziؙK=H:}͵ba¬C#s^T7 M{r`W^ v|ǎ> t{''f۫}vC~45\?PǜtBn;s9EkF u=OQw.}wEw7N^<`McڬW)ڂr# NzatʭI^yuV_ptٷf+"K4tٙW8ص(xjUcw۵ l6$Mm ClB[ok׮N(+v\̖|}=woַ.HLW|dɭM`mH.6(hw^tEdDv-mB[6F]C hh#Pʢ6 ٺu:vx!}L4)7|lݻ=1.[nh#@rDF0̞={_zm&k6$Mm ömh vlÆ WO6 zm5D&6^jU4ٲe-}4h7F]C hh#P06o3cƌ D_7 !h+M`mH.6({l̙DRzk@Dv Fb@3Dsmncƌ/*+`;i@ hh#PxMZUVV3&P@ hh#P^xᅱc.\0s1c?K ?D&6O?}oiӦ-Y$yE{ٯ2I hh#PV\_&27hWK<˓&Mz֯_})h#@rDF3.h&60ߜv1@\l4Q b7g]?$Mm(`9b hh#@`4FE oH.6(PH2F9GD&6ӧWTTf~sh#@rDFBRSS3`t19  @6$Mm(0sN߾}tc9hꫯ6$Mm(0g...1xA… ChjFE O~;C=4@6$Mm(<7xc裏n= @ hh#@ᩮ.))}DFE 'sWGwFE ٳo·r… Fb_~7CFw7FE Ս7|s.// oD&64X*0aB!|mEwZ2 F-h#@rDFIRcǎ]vmx']իo馔t#:6$MmhTs56ҍ@!\l4QRrI7h#@rDFe暰]UU~mݺ5hoܸ /4hСz駯^:3iҤ:cԝn\jUΝo/ܹs^zi1bĺuv>mH.6(L_?à=a„뮻.?Sf͚O~=sak:ҍV >XΜ93h?G}t?pGy$h|͗\rI!͐h#@rDFź+}'zzw#{wo>lذ#GVTTDI56DtUgbŊnݺmGu=_|޽{g 6$MmZ^{1cȑ#Þ}s۶mym߾}>bĈM.k16H hh#В >gϞOh3FB'\l4Qh֬Y3pN8ᣏ>G1sTG?сC0aBa~z۶m;찣:*{!#G 3#gΜ}/h'̜6sqM7 <8#+ \q{[nUUUy7O9|9|?<}7+FmH.6(ژHw ndaee{rʰ?݈ jI'#ȑ<߶k ڿ@d̙|_#+V~a|?5\=ϐ!CasIIܹsûux뭷h)V@U hhc"ޫEJR7xի[l9Fqm͙3'װhc0{qgg} oѾ}p|ڵ33GYGf]_G/R*<{W0nQ?xfgV#kjjW(| #@*\l4Q1URň*nٲ=s'^zYe>aÆ̑.]ne9=rԩanOe[aEEߎ1"2a}r!{Up /K=N:;{}9 r6$Mml)Sޫ۠DD~;;|+_)//hD&66FMMM^} h=A-ѫtA #@"\l4Q.t?hGw\ "ѣZ4Fbp޽{UmЎh&OF06FE/}6E_ңGݻ6,mH.6(xSL ޫ޽{yyyt@K'\l4F?ٳg6cv[^Fw4'5|'nPEa$ F]?~{']ϢE~~˖-^n`W)G}Da$ PFW;V^1ئMKKKm@)z4s*'@6$MlFw]LZtرcWEBrԇh#@rm,//;wnL_=E%\l4YD_xiӦE ǎ+@)z"nFwO>;vlL-],dMGѣpumH.6> c_tiGAS9rmH.6۷o?~|r.Q]]=qS4EBr"\l4q7GWX1mڴh]e[n>+@b- h#@rm/dɒh٘]e3gΌ>+@b- h#@rm8qbf.GE 1E@J hn6qњq[xqN|@"MB(tFuqѢE{Gق۽;}7bDi =vr$$\l4Q(n{^ !Fbm\|7񍢢.]\s5aҥKO>tAsOt*~<;̛7oݺu_~y0yΝ/קv֭gϞO?IvIIIẓv|ꩧ"#CeeevyAτ 8􀫮;N*++/`:uKRi Zpѣvu"#gLRl*'@s#\l4_9眪K5k֬]N1u7o쳹f;c`ܹs3zȇZZȺ1?lTNfH hbEW^ݦM7|3Cp~;1cF֭s=̙3w:\2hWTTa()ЇG͛7cǎ^{M:u͚5_WL1[m۾6=CK-zdNd]yR9 h#@r6mڴI]`A7+gwȘE(ȗ_b w~|+;9s愝/?q9z gެYm۶  -VyL*'@mH.6XjjjN;?jٲeGuرc#G⋃1˗/?ꮆ2K. c_GUYYy睙3gf:*SpG}tÆ [l}һe 8pذa\yguիy晰 Zv#ld]yi*'@mH.6ܣYf-[3ر?jӦMw}wĈڵ;(zN:=sUUUW^yen:tЯ_+2U\Gez7 <`5{!O:5k;/XΝ/Ұ Zv#lZyÞ@6$MlF{-4oVvj@o*'"\l4q7G'N-7? /vԵ8otDk/ho =M]D&hSO=ջwvᆪF(֭ر!G5>HA#TNK hn6w :,\pgHLѣP9mH.6֭:ujl̮RZZm۶$Y6$M7߼e˖h[fMiiiGAS9rmH.6ϟ1cFxLM4ih"ME h6Ə_YYOO>?}&&QTN:6$MlT*uM7UWWGGw}ѧhj)ErM hb6V\yM7];D ?= K hbs6>[neƌъ2Md…ƍ{'Erԓh#@rfm UTT|{믿-0(K,6myO?4z]BѣyR9J hb6֯_UѮ׿U QQr4h#@rfm,ޫVKahTE&6& hFIU hhc"ޫVKahTE&6& hFIU hhc"ޫVKahTE&6& hFIU hhc"ޫVKahTE&66LUUU{Ud/@K0ZU!6(0ӧOH| -DBl4Qajjj .߫?-Ks=0FE."~^?:e98ȼyz=zPJ hhc-\ޫ۠ѡ-O~0XRR0FEcРAz߿^':Ozy'vaݻwݻw~ r6$Mml)Scޫ۠>vIDATDD\pA:; ><:mH.6(555z DDoF*RRRrA)h#@rDF袋E rqaUN=ztt7@&\l4Q.\اO* -O~0xG*h#@rD4hP^Fwh|IϞ=w>lذ>N hhcM2%x n;Z .{-h#@rF?ٳgL0!x n; _|OjA-Z4yo}ٲe'vVRj(,-0R@p`mH.6h?~w^:Zgmڴt۶mgv h#@rĦ6w}U ҥKnjSUU} ϔp`mH.6sFKׯ2 &\l4)/´iӢTZ׏;_5`PjQmH.6dO>d̘12*-{WVV})5@j8?F,.X ZC%.]}@Rjp OD&6MqǏVOi'N}@Qjp OD&6MqŊӦMVOi&OuR4 5FbMm/dɒh锖k3gΌ(5@P|mH.64Ɖ'F릴h}QYYYuMDh#@rĦ6qѺiZh{-/ԩS)o}OK آEcho4T-FpY'عsϟ??Iik/M;[}@>6$M5F_{\,YRRRR ;s N<۷رcp?>+СCaÆ=;8Sw!SO >SN#}zz=a{ڵkIISO=+++ (..;άӆ3{スz>|xd%W>KM[n#}'M%s=#F}O#)?uGqOho*|o|EEEk& ~׮@Qr 2e~κ@ee\|+O4s=ܛiŊ{oݑ+\>uL>Q*G("bJN:+Vϋ@O^s[:[}{ rU5hrFw1 .ZlQG5f̘p׾??:th:O,_|ӦM^xȑ#I2>5k֬]N.]o͛7C :.]ڦMjժ: g+6lذ~ڏ4yإs^Ǝ[RRr7c9&}lǒudڬYzի۴i[okA?O]tI| N;?yzRYNW{q͙3i3g}v}kU3=2_m nOݥ+Wߩ/_]OHG}Y5ۋr(RqT/҇Za?-mvŊO?xɒ%˕QdkL>QDwsQg>:*ݮ֮\M h#@r]m\jU6m2zo߾QGy$AX]|{1k֬-[k ;_|t-880h{ /QDmܸq„ zJ6s+ɔVZUy,agdm^{[{׳>۹sAY8#L^s}kN(Pd-DDG)}HYm۶P}z?X]]}'tAF c/WGQGF(]8JO9l"g>.ףH:[2{0rU75hrFwE1}zk/}iܸq` /*{GtM!v7͠ٲe{lX}w6l ;.]t@?jԨp̙3Ó'Pw9G ߲eɓGe6sTgYWiX2eXrĉ+ٵqѣGO=tuOSyT_=K>}z+6'~\<1=25 Gc#!gĿ]ws|[e.]jk8PtK&hڵknjs1~ᕕ7xS_ƽ{?#8bر[l6Yjհaڶm{'ۿ[إKSwaŵƍ^뤓N;B3gƨs/_~g ҿ_WQfܓtcf]͹W崆KWޤi׮]xk;wַ/VEkZo4K >aZ=pgq\pA~_+nݚ?kN/Gr^Ⱦ}5 ?S&90Xn]ӱc.,jl̫G}0l_tEo***fΜ'{ۜ{q yFN/7CNeGy]w){|[e.]jk8PtK&hc>ٗԛßxx+pYK M.Ph#@ʼn6vm񋦍z뭵VjΝ.||i \ PhbD)?.||i\TApD~z+~USSƏ((\ Phbq6m{N)]3gܵkW8"q5hK&'L8qǎ񫧔7Μ93~@Qr h#@E6.Yd޼y ӧo߾=~@Qr h#@E6'O^n]*e/{h.5@GpbF?o۶-~%Rٳg<\jq h#@Ō6k׮?~T(I?+'R+p6.1XhcsI&͛7/~UV?kc@s5?D M,~1R]]=qYf[񋬴+Vx'Om(hh㾩ٳg"~*/]JK #-ra(K&61ct%}W]J߭[ #/RUU5\ PD Mmg555:u:䓫wUx ˡ%ǻᄏSN{.DΝ;0F%FE_~rJ a9;ݻwWVV}٧zjEEEUUUPD MmlYfUVVVUUEWrhw(EFۿۊ 2{x'%PhhcSEHX-NN_9wPVD MmlѣG/jտj&Phhct%|Wǰ_ P(8`Fr#Phhc/|W {WJh#@M7k֬]+JݨQ***fϞ_PD Mm7{Yti.ACKhke#Jz3+**L_QŸ5qo\6.1(ڸ/^{͚57ܴiӯCK*oT*5~ 6Ƃ M%*Y7%%Phhc޽{ʔ)C Ypa|]6 =C:t/Xn4F%FE޽;_s,OK7@H5F "Phhc)S\~协**͘1ꫯkkk=O>$,oٲeԨQ}իȑ#7l>}zöqRrt;v8iҤO?k׮/B߿wCݴiSGpD/2dꫯ^wu ֭[x ˡ%C f6_m۶wq0eʔ0ڇ3Ds9rdXkӦۣBZJ4n\~0?%I5"טʓ[hQ{^reԸ|Çr)a&NZM6`Э555<92ā;D 7xck׮,Xm /ףG#FMꍻW6={v>WzN7fDz?oL̝;O>-٤܈6.1(ؐد6/dFU@z㹶,9È={ϰp 7\r%QgqGk׮M?s9sRyFľp+|D!1(ؐo|oF1cI,O6~ @pQ$R믿 ڸf͚6mՅKVVVuz۶m裏~={ѣDZ5Z13waر#,h׮]!,}ѩ?.x{s ;1șl߾/=m@$)PLIPhhcCMv=+=z3O6~ @pQTn#eGkkk۶mhѢ+uQ\3c|9`̶u'xbԨQUUUcǎMi OOg*;*șX},rK&66dҥ7r5t=i+öaʄ%,nFٳ9s7o;j4hPH~C9 Ok֬җ" =ܰѯnٲeɒ%Q{cVVV^|ŏ=֭[|7{챿oSyo̎e>1gLELjkk]j\#@3 '"@ ٳg\ptݻfCKhk=Va0B@iK5n|w<Ο;sBE۳g\2sذa'|򩧞:y:u:6m F}'8pb||??r){SN3=Cb{5}m1;ITcZ3όsk(&wP(\b4Q1ŋ /^zu-<В![(.jTFJ\#@0 '"@ɦLrg"cB?l_@pQ˕\#@0 '"@v|/߹sg|]' P&RҍGBpDFٽ{)S p amz595GJ5;rR(.1(ڸ/^{͚57ܴiSh a9DBf5JJ<5!;rR(.1(ڸoٳtiӦ]xguVncX-=o@y|[ @II7:F2ar@c6.1(E0gΜ̋=M?TK\#@01D Mm"ٳgXFh a_PRɓo?\#@01D Mm3fL.]`EZB{+-D Mm⨩ԩ'\]]]QQrh T&w$m(\b4Q_~rJEEEx ˡ% 6.1(E3k֬ʪCK- m(\b4Q. ˡ% 6.1(4zݯ_ @k`r@D MmbҥKEEEx &w4@pDF(~UTT Z;m(\b4Ql֬Y1|D MmR[nejʔ)1b >gP0?Zn0h [l5jT߾}{5r 6D}O޽{>}mzL)7ؒ4pkj;v4i駟޵k^x!j߻wCnڴF@yIvDD Mm`ڶmqsΰ|3<-ϙ3gȑaM6۷o Rn5N[Sׯ5ܹsD{~'ĉ/M2*?DD Mm`7n}?NXrg{|>gоgϞ}k#F9sfuuu| 7Q[Sׯ?â5ks1MisX^|yUUU&@HvSH"K&6ӧϼyFr!vٳgϲeC^~噫Rn[SH^DR]-{ @DpDF{neeO?n6lɓ?7|3,ܹsQ%Kt-?[SnM6~?~ꩧB\veQ#P>R]dM!6.1(`Μ9UUUяFn:f̘={7<Μ934nܸ_j޽C.\uN5xwСCpAza0\ /{RV:3IGuTsanxkNы/8`^ztIϏΐyk*__߿܆iӦ(iW4ѣGTWW{,qVٿiwsǦM!6.1(`ܸqӧO6Nl[A ,ܹ… ҵ Gsޅʔء -ZbŊOr)5j+ 崯}OxS@r66)$@!D Mm`{}gkT Thcp~_lIe?~|rjůN:NkiӦ 0gϞaÚ2r'LCZwçV nֿ={1eʔj7#F7̝;O>-95dK˴+x;u-眪Do0ڵkj}aڵ`hEE??x+WfU9GΔ?6kG¶aٳÔ6s3T,_|᧜rJxщ'rsL D MmhvoR_Oe˖-C;wܰC 0 3ѣn!m\vm0gΜs9'9;zS{\n]6m!Cx≨1bDK;w_og[re(p7~ڕo-眪DӟGy$,IP۶m{챰_"-={LO.hYUΑ3e~đ;v,\+ҥ˅^k7oɞr3θۣh=9ZsGSH(7>M Phh#@SѶm۾7Co-[2%Ua58K֬YӦMttG={٣Gc=69;dޫ;v8묳:u>{Eo߾/=mXg)?94Ӯ;u>R*T+LmR{ZڵIObSh~97r|_1#g ;9o޼]6;|_֭;CÇ3{&=Z(ʍ@9.1(Եŕx-OV}wyebڵkm۶]hQX~W̡uȾŕgjo^DvO4jԨ^ΩJVz9g0s|#gk3rd֭O+6l''ON >GSH(7fCE Phh#@S4nRsh<Ӯ2g %lT MmhvZ6>qS 39#Ӯe lT MmhvZf6[#)Q2*CP̆IpDFfhnn%rS M}M`UVL!T *@N] 72iLʄ)$0!"rR(\b4Qjkk3ZmܔP@v=l !PDNK&64On1"؏BMJz|5@m۶wq;w SLÇ?39sFܦMvϞ/@9.1(ЌjjjzN:=s~jPgоgϞ}k#F9sfuuul/@9.1(м ݻW]C} \XӧϼyIK]]!k׮={,[:t__ eh2'U%FEٳC]{M7W]C} \rޱ>s+++~t˰a&OgϞ駟aaΝׯ:,Y[n_4IpDFQ>g};9s Ŕ)SB]{뭷WР{=ӟ|IpBJWf%T>Uz|Ei 0} 0}9s?[n:f̘={7<иqƯ~{\p_"<4NK&6 fΜywTWWh ěhKu]SN]zuBʭPt+^$.L„.Lxqrޱ7n-^sM Phh#А_vۇ~E֭[̘1c׮]c U(BʭxF 0 4Bubݻg?1U("'U%FEfϞOo?~|mmmH`߅*WĊW]0 Sqd]}ݱvm hդpIpDF x_ /G}4aW  PV*^oQ/LGPߜ9sO3X6Ց("'U%FE^}՟`|GǏ?S4Y(BA%XD/LO~;֡% H*@@ݻo0h1V\9s @R*T{a?, W]u;a9xWVE T Mm_~9~ Z'V$ ET($L¤/~djjj:uTYY/VTTǰZB{+@"PDNK&6q7|s0[nя~?vHPJū+Lŏ AUTTp H*@@=֭{79s'|?/OU0 Sd={v޽+>CK@k#PDNK&6?_bE"*^WQ~¤/LOLGrhwhmpIpDFӧzAK5s @~~0@}W]uU׮]+**cXhpIpDFo=~˫5{W>xk*u-tر]vK,СC*Ϝ-[mUZm'mYƷz5{a?>jjjzQQQr|5@+$PDNK&64myɢ㗾xsÆ ^lٳ4u]G}ڶm[|u{ ߮]#8s_|q_aWa߾=h،3G0)^QWܪ*^ f-E1 TQQ+Z')"rR(\b4Q˖-nٳN.tг>[WWoxš5kNڡCzEfڲe˿˿ 0 ޘ{)F}$ڸ?ZN6@c̞="(sTwygΝØ:u}ѡ… /qwyQnݺ7- /^o%f͚u '{&ik֬9CyX{Bk7ْ{<}T4L`4-ژ&ofcEEE -Z@9c ?sӧOˡ 9G.sثi`iE,Eh5k͛jI*@@=Lٷւ?kkkWZտn)j׿o;guV⭵}֯_m۶^x!j|?[5jĈnٲeʔ)'pBfc*뵢j%?W^ [VUUU8 o3ial۶mذaݻw3fL[//73[Ry];_6&D䭢kSNgִmCwZH9-@> /怽mvM7}h%pIpDFD?PWWwy]|ŵW8p #F=zt}7bi 7lذm۶_|1|U]]yQF5Ngrfcx1cƬ[.w;<wq]wu%_h9!{e˖~'xbj-#<#ؾ}{[|iCKP[l>}zXڵkoۇ^<3]Zf v5K`42ȚV tfMXfv.bBiFrz'+B5u뭷("'U%FEz3Ϭ^ .8#/_y[n:\rСm۶=v,n_nݷw.ҥԩSs3s9vܸqs~I'qm#˗/?3߿~|=^㎻KN;mذaU9}FE]Ȟ9sff!|/QΝ'/g2]ZWEkZoL`4&UW\qEC/N,3k|mEG-ц-m ۧM΀,O=TMMMZ)"rR(\b4Qhc͝;7%B("F}ml2#@;c Ȳcǎo9~@9.1(ShҥK_y啰ok̜93~_׻ oDٵk_߿yaxR8E Phh#PO`.\m۶Gy1cjkk=0wyg P>+([0^hQ x뭷}axR8E Phh#P#<[oůTA˳dɒg}6~_(B(?a~6cƌ4(3hpIpDF͛7w}T̘1c׮]#B$@&}IbF[lY|#OᘉF@'PDNK&6q&MڱcGJ$6l9sf I(B)('a&}#7}wF}omh/})zzk׮m۶}o~ߠak4 3hpIpDF _7o^J$~.IBJxuE9 ӽ0/< ^WWw 7'A14-4yVg۶mPڤpIpDF [neݺuU2̟?4N(BA(a{cmoo꫷mZjذaڵ޽\hchѢ0`iӦcdž;v}Qsc|·Ν;hÜ;VQQ6d^%{՘ W#wygӶmN:eG}tp¨=>{w^ԡ[nÆ/ηUf:=\F(mR8E Phh#~l߾=|un msbo!ac*-=`ؽ<0>_:gC38#jϹ:tPWWbŊʰQcǎCcwy|gD5("'U%FE֭[7aHӟPV*^oQS{5!ڸaÆ;S]v~}F7n1sᇟtIwqGsa+ڷoߡCŋD;K/4Z>ӆ ^s+F(+fCE Phh#@S@ˡ>l&;wn#Fh̆IpDFfC}ٲK.}Woݯ_k6ރ/3h̆IpDFfC}f̘O`…UUUm۶=#njS[[AaxfCE Phh#@S@ˡ>lO?ҥK5cŊ?p0Z?HiOaÆaxfCE Phh#@S@ˡ>Nux r[ *@N] -rzx ̛7/~@9.1(Եr 3f\2d~޽;~@9.1(Եr ]vp }Q<{衇^{fCE Phh#@S@ˡ>N0A~?4@a6PDNK&64;u-shXmm{x~ Ъ *@N] -ڵkƌ?OnQ~6mtW@Z!"rR(\b4Q٩kP@#^zԩwu+QvYSS3cƌ;S.~|@9.1(Եr`|'O?w9,!TgOj *@N] -h<PJIpDFfC}4(%iE Phh#@S@ˡ>O4"rR(\b4Q٩kPrJs@9.1(ԵrS99 T MmhvZh9@RPDNK&64;u-sT@)qN("'U%FE6ih2wRPDNK&6ߜ9sO3֦M}4;@)qN("'U%FEGs΍%Kt=KW <P]}4k8*@k|G?]dIhK]fPGƨ>zh u{+@wRPDNK&64Ν;wG u%KtxW:WYY9k֬x'`xyCP;@)qN("'U%FEK]]]ݏ?iUUUhwP<*Cju9k8*@k&N} (wRPDNK&6-ݻ{I&=+VH ěZzk֬YT]]PZBw 7lذ!^fT?~Fh>X9 T MmZW^ye„ 555uT͛ [l5jT߾}{5r 6D}O޽{>}mz\ckpq;v4i駟޵k0_{С6m=zӍ;֡% H*@쩧?~ʺune۶mwΝ;)S}߿SN5X` HNNfsmѢdkĎ9Ҳeˎ;~BQLvY>j.]{NMM͛Ce"իWߺuk5c R*͝4im'qqqڵp8;;_*R8F*tFm?|JO_>_+AG^kh"4@իy5E?Hj*Vմi|*O>}ܸqqzbbbԚ· ߺubccClKKK VjMBQ3b*Gֆv\XY*uVV^vmHH+w֍Y6C,?m@\\i3:uZWWÇ 5n0Drrr-/f)#Mp:6DFF=t yJI` BiAalmm]]] vIniذ+B5.m6T?7c!҉'N< [dIqq۹sXcKKKjFezuwwg-7nإK???__ߦMRMYYYϞ=ϟ!,qBQ3;6`bz*rss鱿SjMv矧tU,%oРkyGGGV.))CsNRk׮uԉ v#Mp:6m j>++kijܹ3~xN"FW Sܔ)S ggqI3gθrRRLLLPPXST։T>uꔐJ,++KHHXti޽CCCeknݒFe{ol1 =dgg[YYfٱv&M֫@5Uj*737U&"&ShcAAAXXXƍ{۷oS%=; t=|pj`oo?zhޖ.]z[,YnmmݥKϫ%niAs܂O&wC:zSdYlG߾} E0;$33sРAvvv~ܸqVi!!!>>>tLmfZt#mիi&旔cccu5>$@v#Mp:6m[SQQQjwZZZ :tӓ5‹W\ynݺ|jhkk+H3Ga *m+V=@['N4lؐv899ocm222KM=Ts]zܼysՒ>Yk׮[lAU;j]F-Ν+B5mv՟k|Rcjڗkn`DNg4F0}P yG;;Fqϟ?s=س ,M|w͛7hР7WiԚ_>}gϞkF͑bJ${(JqRܧqm0j~T]tcJJ_``x)K ka\jP!hFn;T*% !MDLr\Izq^^𭄌L*۷nmܹsg޼yg*uQ?ipm6IPpڸe[>ڸuVA `\F9Lk|b 9n8VVTM6}ܹ3r۷if kӮ];e~Đk4;Zҍ9993gҥKf>ϝ;D.5TlllRRRN4Wx 7C 3h#L墍dذacƌΦ7vMt_ [o۹DOpȑ%׿6۷Reee~tAx{nݺpB;;;Z)7Ν;O$ܡ  **##s}LilĈY``qm0.CF<0Dc*^w͛_۷cccHRKK˒V/Đk4SJƜz޽qqq]ve[nŒ3F-^j,$$$s?Ksl 7C 3h#L*jرNNN 6lٲŋYG}dgggooرwy^:88+m$_~eիݺue~W邬FY`mll+m'Yln޽FXPhM"CA222|M_㏋r}jjɒ%҃ALFsc\ӍUcǮ\HMM}׿~jA导JHHHTT{55tcNNN X9++&kiiPիE&3fK7k׺M"ftFmmh#qR5ҍ'&P .]j׮ݶmBBBXMiiÇm_gϞ>,ki PnҤDYrr ] ܾvZzJ|S`8DDd7!` J%~ɽCͭjj́r5j@%}׮]BMppY˩ѣ .P޽{999Ǜ7o.גk~E۶m۴iӪU-[-mRƍڧh/̙UV!^*===00:wԉB˖-w~K7Fh~zǎTq*,tؑ===鯋_޽FPA6Ng4F0Dk4@EƊQ)\eP#X*U(W{zz/cƌ׾}{EݻwΝ;8p5֒kTkrk.oog盀hx WRRWUv[JB۷nݚ-"N7*Eϝ;@!((Y%+Vxxx8?տ5km0h"`2w>u.~?P>>>BbLxtÆ ~~~4ϦՅ͛5)rO4cUVb/J5To 2vJOsgy111]vee?d崴4'''J':u %=$''ʹshтZ5bGiٲeǎ?s!(yk&;w,@LvYg}F5K.MLLd ޽{JWq͡C իoݺ5͚1cx)QN4ӓƸvډkL =l$xb0 D 3h#̃l[N}"OOOnd.\j&駟t#T@M߫W3ר UX}VVVӦM<}qƱՋĉ ߺubccClKKK VjMBQ3b*Gֆv\XY*uVV^v-=rn-ZʴeiLѩS'֒$$$>|XQt#@-6fm|W_Fh#tFmSZ`AQQٳg'*-[LJJ… ]\\ܒ&EcCh_*S *J5vг!҉'N< [dIqq1=ޜ;w5fT>y$kZnܸK.~~~M6={͟?ݑ,D=sCi1 J+++VɭWh "77~mPk?<zf) X+W8::rII ;w:ݸq?UP)ۛ>(H`8DDW^Ϳfĉ[nO0T+eׯw|#G,Hoեz>[---[I3gг +'%% A=JemmHSN IJKQhhl֭[hl m &Bl++BR``QR씔;;;V)//Pnl3VӱcG_ƂG&"&ʿfԩ?.T =\9;;h׬Y7hdmۖ TBeUVuhcDDD^TM65Kɓ'WɱJKKrxx8 Sc5k&ae/yʔ)ٞ^x)m &. F~vo߾4w9~8ѣKW!_)ڨRXK-*X>< i 3h#Ç'O|m40ׯ?}4jJJJ\c=Zn]ZZ7hd6o\6RcUׯ[XX_[ x0wڵKYc{{O>߿SNBTq...]t6m ݸqN4ر;5Z-Z|BO35jwΝd76&&&oߞ6w-^EffKy ?>kCjՊݬYKW!_)ژZTgIUЍ>< i 3h#J:u*ҍfȑ#֭O*&$$e5Ƨ~McR ը?[՞nԂoΝ+B5mN՜k|Rc7U&"5JPEEEL2GzD1Nl` FѺukgggOOO77_~oPȤI*X4zFPi `8DDk\XFTTÇFo̗FL00n}7͚5sҥ˚5kF5LlKoU VnMD?|e>/2_zD1N⁁t#͍H-oPȤ)U VnMD… DiXK㖟 U VnMDł D! )֛/={vpp0y~Ax٫W/B:tn߾=P&a+Bm۶]6l_fI `kk:lذ'OD{$*>]!JTzn!6i@ߴi\3g3THރ{Jȶԟ!^`_&ŵYYoΞӰͿ^Ϊ$;0nC9;;s ?QJcF,?>0"T 3h#@s- +A.O믿ٕPƍM6^/_ܠA-ZO⮨PZZ:qvڱJ ''4Rmm@lRgϞdzYG&++k϶q$䫞*>G6L^ 7$$Cmگ;wh***ȑ:{lEwB Äv%{|d[Qj;~9U]PuFEh6#o׬YahXO+7U&"P\ B{J69h ;;ƍ7Nإ,]Tdwܱ>z(7l0z_~Yx-,8mڴ̘1^wʉ1Bg}W_hlj*VևȄ:,YN{ץKS =oy$b˗ھte˖yxxWp.uQ{l-ÇJ{{{:܂ʮm hGGGWWb!!!lH.sCѲt\\\-Z*GaK)m-*oŋt"BRRׯZyJM-UJǃ_봆P)@-QjmPm+;>B}Fz?O}ǪZyE빖E>JVw4M6_///Gx###kD@3gMP5hl J2jS`pS0h"Uϵ`.G"2DRL:տk#F7oSX^.\Hc._|„ PիϞ=kii)|"۰/*_䔟宴4ʢΝ;׸qcRzdʻv,**9rdHHiͯ]>fFFFΝ'O,ᇅ,%{.u*G<`/տC܂Zhc뒒ۭ[7X6lۋݻsz{UtrKhJVΩҺ:GZnr[ Fv3B;2rRTNu!vv 4i>FݽwOF5mڤaC6mZ;*W~?׷-_ܼml۶mf Fi'ePZMW̕m/^^|dKԹKQ&KJ۵yy†U~iV/껗>ƍRPet'q7 G,۞uu YڤN/^Y~]9 9PZZhѢcǎT{UPN<5o<6]_`V0"|Z`DNg4F*Z0ڣWQnns=wUr͛7_mۦOlʔ)_Ԛ/M, {y.Ҟuu+M/KJ;O&C6zPп'N,((/>0"T 3h#@s- +i5**jܹ b5ڵB;;;_Ǐo͛7ŕ ꫯ\fVf-oȌ?~СT̤Y+++f9sFh/@߁uVoooV/^ҹPYe?yyy²xAa]Jkdҽ1Bmdܹ3o<y@vSi*Đ닓H]|tV1&۹x`k55uǎ/}džUh;*ݿ^&F / Ӷ+w6ǩz\iQNdW!,"] I߾i#ܨV98ر6AFGGơ14}ţR{#(z-;+^%>r1 wSxۓ'OV"1/`S 7ޠ'X~T>0"T 3h#@s- + -RZZ:`aÆTΝ;O25 5jիnݺ999-^裏%^_QFW^M}gϞ\_~3fW߿AKQ܀lֻܸm۶~Au… 쒒7?\XX8rHOzz:Ul1Yto޼ٵkI&z.%{."`̘1jͪwz뭷~;778>>[P.ٵpI2^5 1-ȝZ }^^^jQMmhFگ9s0myXX+V>⳯&۹Zn<kK܉R3*P aNfIF:+nŽP/la$Kǩnn/m۾24?~W{{H"w@tR?OC:uԺu'q}c0a6 ӍpS0h"Uϵ`.GXbIl߾}o/ƩAAA֭Zy3y_~%u^nذ^e/_}?[k4m499Ym'*v%(nl޼K. 6ٳgll,?{,vdh8;va.// 裏쨫cǎ6\|ƾ$OR:uTc:99ѮlRHfggfS3Pn_~EXZ$t/Ԛdpp0K,NիWuFR_-%=8ݔ݆ 1$l2d m^F _0teWtrƃx񎎎;w2Im<<<""" 1qo#J- j^\Pghϩ?ȲneklzT8tnرĉcY!C^۷;⥦},=7[}tmz޽#ḳTr=f݋[rR¬S?mN>C{{H"w@tR?r5ǏP20/s_-#ڈIv^T|t#>0"T 3h#@s- ѫJ"-I6bHبJz!9deFT lgװqFƅoII}ر#_iӦ {rQ$'Tӵkg9iM9ǃml۶mfJP=X4Wv/Rn޽#UZ[7h~{ZRu6 }+T(V]2]u#5{m%(> :wVK?OryfqUVL2GzD1NQ}\1<݈O+7U&"P\ ˆѫ'O:u ׮]Сη֠9{!a##^_5Yz94JLcݙ rl֬Y5juQQ7|_0~m$; i `8DDOR_rϵ\c…GsuOOOӺcƌG V j5#X ƚ/;;{ݺu5QQQp}/O=d'Fp7U&"`|7nd/cǎ?$YYYn%K,1 xp}/O=*1K1""`@$**lˬrm$;I)+nD pS0h"U"<<=&&cǎQMhh((//5k .䯙e ?ϡ1a9KqѢE5[{{{O~ԕꙖ_>_\D؆ /3gMAA?OGČ؛RW9~8cJ-dȩh>_TJOLgiKgUh}D)#Mp:6TdWWWz=v옗z)@My'Nyk׮MOO/ e ?Cc¤}FA֛/={vpp0y~Ax٫W/B:Wu aaaB"a/0۶mڵkÆ _~常8aÆ ;y$HĸGRJ ;aJJ!&o~}~-001 $M6-ͥm>s ?CAE=7ٮdlKUԧر52rAd  ӳh>MUwJM7"`DNg4FһwVZsСy)SoZ*ח1ʩW&-R\_+))7<<<6m*W^JJ [ 4hѢO?$ 'Nl׮prrJKKc/F$..q˖-{?~<%K|dϟoool?H5GW=UuUzA}vE)mRnHIȷ __wܡUTTD#ȑ#=uيlKރ{Jȶԟ>^2.^<'2rknKE(\~=ײhG)JNUwH4͘o ,//p7U&"PU֬YF5ϩS֭[:PWN2ÇR)̈N}TlL*:hcffA7ntPV^d;].]Ο?O54Hh X˗/wss}X ˖-۷Z\p*(( ۷ZNtccc] :ю`222BBBؐ]N˄" E~@RJe@ }mJ__/^.|wN~+P:hjIR:ćw^^^5JjY@RmZnk]13B=gI)*}j;M4 #޻'6mҰM6-ϝC+/Hsn^Rp66m۶whҲ +6Wi/]2%Z*n׮[E&,l[hf?oE{iܸm!5 5[|N~Bo7yʲY[MHΝ5St"~)@ pS0h"UݝE===oP#]6>>),,6mJ/2 Uqj+iC +=== `ԩ^1b߼ygϞzpB*;v&L^ ͼW^}YKKK نԏPyu''|.wAVVVz诰Fs5nܘ}]233F"m/m vZkÇѹsɓ' ~!X0K\pU <8//vy_|S#''Çe|%%%[n-8l0ݻwNs, {y.Ҟuu+M/KJ;O&DL7U&"P;wLϵ͚52?f۹s… >0Ŋ׮]e+U3UéMG".(dӤI,ggg&D/-,,.]ڄU={= ڨ3ĝ(5B &dϚ4iRVK/9 Nܼ$nq~Ҷ+CCwW$rD*íNh#I `8DD֚5kv ѣGkDA5'I vz Tq}X5թGX0Hii R222:w?{~F]z5={s٦~͘1C\Ie-FqqFZmJJJh/֭[ .KJJ7nܨW GIOOJm Ƃb4͛7v:i$V%dυx]3&;;[YݻY[oos %.I& f#FA+ھ};oKpp9 J) "oӓ+--mΜ9,G[++@v=ʮ*B2D 9r -9'Y֭¿}MsꃂpS;8q,k?dk}vgQԴ#gF=cTu+O4Bݻwd:y W/Lܿx{q󷃇~~(iQS6mT)vĈ7ݿzǭMo&*tFmdƌ ٳ鹖3جYj5`V) UI{%ۗoھqQQkdmmݪUhg;_R _WW_ AӦM٦8߯*v%(nl޼K. 6ٳgll,?{,vdh8;va.// 裏쨫cǎ6\|ƾ$OR:uTc:99ѮlRHfggfS3Pn_~EXZ$t/Ԛdpp0K,NիWuFR_-%=8ݔ݆ 'ߦD3dڼFA`R *@頩:WˍwIexxxDDDh?AbdGZnr[+JѢ^H:FFNRk,&6zrMnР`;77.}K"M껗ƎM6-_K"&995]ۯ~~=AA66m۶wYcN~yyZq{+)7wޑ*a=-[)vE^^n ڄ}nul*S_QV.H>ek$Νҏ&*tFm:d„ ݻz_FswH\`MڣW'EZГlr L6A]_5Mm&}&iL6nMD SMFswH\`MuSNQڵk:t3SQQQe7#^_5YmzD+=!ڨ<nMD:kdn0kx*@dՁ<==O3FR-@?5(fFoFj:b 96VzBQxn0"T 3h#,ƍceJմiPΝ;#Gl߾}6mDDDk׎~-Ɯ3gvҥYffΝ  *((xv!>x*@/\|'4_6ze <6bĄh#I `8DDf)..~饗ݻGy}c؁RҲ :kdҍ999t߽{7vnJ3f=ZT'Cjt'N>0V•+WoCFddÇFo̗FLm0 T 3h#8cǎ]rᑚJ5j~jA导JHHHTTTRRr"Ɯ rVVM?իW===ŋ@u;ڵkgc0*@5k֬2m:////**`*ח92#ڈ&*tFmҥKڵ۶m[HH)--_]Ϟ=}Y5rFBI&OmIAl Xoν0S!̑FLm0 T 3h#D}uwwߵkP6> ;hPV ?n4.Ulܹ ٳsNR\_(FLm0 T 3h#D1coߞ޽?UvcK)!hքHLLLII[nͷm\KzaF >0 x@cݻ7gΜ;vY!99yڴigΜ cUU0:<nMDs{]ƿ$GKAeeeTr劍 k@eGGG}_i={͟?СCBόRYYYT>yhƍt۴iSeIIΝ;KRRRcWW@͆1JK ihKh{u*0ɳg^b˗-@m~z۶m{1I:O=pS0h"\]{RՓ&MK-FXPζ*,,|.]ڻwP,nݺ%6ڲϟg*:11ʧN i);;;V֩`ʔ)j?`8IIIZz7,sƸ8Zm ?nXM6EFF.^8ݍ*25bbb)Rz7U&"P'*~JGI߾}'O̾Ν;ǏB~~>a <جY3V. ull,LVQTTdccsi*Ϙ1UXYYQ9<<\mda\:y9TRR'z7o8V4hI7#L...5JaX0\}F*tFmZt!w}uwTy kTٱc;v٥H|||- a_]]]v:m4r...R遁E5>5nnncr4׳gOg zhyeaX0\}F*tFmZtcM#NOVk|R/0_xQ"N7*/q̬taƴ45ҫW/X p7s `*7U&"P'*:XsOfJՁ~'Q~gS?|n cTpnMDOTjsK7V6qqq͛ݺuݻ5k OLPozj߾}@@yyy;vo}X0\}F*tFmDFƧp9,ءC_N<)U'goѢE=<<wq};3q! T>}BT=h"F qE6*@XxqӦMmKJJ-O?WβuGnfH7_}\}۷oW(7U 9F6Q+*[6_g >񤧧nh?rV7q1Hl|BӹFu-!I7*PY@qRDhS\\5\QV) ڌ:[u &ζM%oY #'.רn -U 9F6&;;[Rm f٪`T5 3 jGHxMFtcqO'Up1H6%%%m۶}լvE%5R N6mڬ*@^&ߴ *7HM=MQ!*@e!Is&m7ߜҍJFM}\# ۪K^FtcHpO'Up1HBIII)))o\Q_76g55gggoF%tAFdDZ T>}BT=h"F :u-111%%ELKٵtŋ6Wn$Jjxnᆼ<㲟kTL7ve2|8VçB*M$D:$!RclT}IMMU_`n8bT%| @7oz 7iK^oӍ*(Zo1cd+-ҍ 9F6"gggϘ1aԩSJ\?YXXhuԥKD) %TE;n,3n$ !!Nc4h#*}VXl2Srss瞍7"HP(*3*F^t#FQ @qRDQirrrHn!j̜9o1~Ҏi\6R(JJ0{gהn$ :!!Nc4h#*ͽ[ZZ}7DΚ5xرc<GGsBmܐ\>^QV췧v^B҉ ؼ( hU?2RYEM|hJ¬zsyg kwلuOoOcb>n8ҍD 5!Is&mD8t  ͚5ԩSc=HSL~D+WtXvsGw<_vZu0ϧ6ї`@ W=8ƮA ?s{s?!,C**Ϋ^znkŲóBr6u֊EUk &ܬk.vYvt#{gt5kB*M$ڈsmݺ"Ynn[oe<փn:ҎA}>u䶇W/~[j%PUd(k`+iO6nz۵,mܡ] &ܬk.vYvG8@^\9x5kB*M$ڈC1@;qٳz0xJ;"ڡC\>2wkF w&&&fοɛZn0=ɘ1Cׯ_{!'Nn3 @[\'+DZRn]~+22Zt^۷:uغm&,2..V61x凊rUc%94NJj2kdCv+ِa0*>U|x[v wv8"yꞜ3ڙ؟=s۴i_sZ=˱ IkM4Կ1u p`@^ݦ y[>oUEOHMMdWo߳}{N85S~^erlhH9v|8q9y >޼ ( p9ڕIoׯ3@rM8@qRDQ9-ڸiӦ:uk#A~~~56j,0ó]n]r8~hcQQOiGsXvsuZJ+/_ذa=ߙTЈ)F ֭Vo6[J꾃]V=ɥ c0-\W5>|,=zHjju f/&,ƊEŇ7&T?w7`+زС݊~6dYd/?~bkQq^i'AD޽k vPLϞ+?5oNk޳ݐc]1k Xn]6~hMf\[yure7?VY9T俒_HhiӦNS-}6N_,wQZ/&A(MW9}k^b87W,@t{g8DiBT=h"FTӧ1:!Ly&;<=-&&Fm5- ]@/g_gՁrƍJ˖z?7A#ҹ|,9r>~bҳ~i}g?*t%_>Z> dWQ Mꋹ7Uoa[~XfhjMg(}!&L<^Ks_RZ`nf.ڊnHCEoٗ^HD%s3v5oK+= 2(]jVÁawٽM[ˆmmi̼ kO?3Ի%>L O*{SNdH{ubRk>M5Z|\Ұo~C-Rm"q:7W,@t{g8DiBT=h"FTJ6j$*plT/ójӦMJ˖zǏ7Ap)P.n66] q%}ͫ5Z6xVD t,n@t{g8DiBT=h"FTrD7pڵkׯ_o>z߳gO>}bcc۴iOg4ڢ~5j;̜9SdZ5.**=z #>>~ԨQVgϖf1113f:WEï~͛7K\U;swɏ>pذa:u\wun6l(]^ZQ}gRSSk,U'KNNW_;R{{k̇n٫W/hU?pqh-0pN DzRڵk9# ~>dNٵ,*Ϋe߸\߉ݺv۲ ދ/=RlúR?u4w6dX]M^^]3Y I߭ݘ:Է1ZMkE.U7ZUؤIC[QGf۷o;;{ӿ;:E |/6M2Zm]Pݵoފ~Zd͹| Ǖh9 B*M$ڈQhc~ R\\gϞN:M2-Pӵk߹瞫mwm֬_̟?Zz=]~j-mWHs9g۶mn?裸8R_r׮]ի-jŒ%K{a!Ni=y{@riѪ 7A`?n6vQ0aXwײ}t꣏N6o~=zt[UW޺m'@v-eԻ妛7lXOo۶cuoyz-y63fNhԨߵkO=w~&3cڵbbjva@jlȲ*8l~ ~w1۷}rT{հuY˱lnrvkܴݻl8Fkjb3RSkՊ9rЉ۴/]ƍ#+W=#kd[v|ub8i_M8VA=IFF+} r+ڴq%s5m+фs'Up1H#͛Wͮ_VZ$o7amԧߴ6tAA|(Qvu6K,KG8,̙Ӳe˸j֬iXbn-IAs*^]D[]{/@)mEsc˷[i 3MP >[{w-ubx ۷j GL5-+ح6!MSbτc2>_}tM݅BbTr| Ǖh9 B*M$ڈlp?N В!cѷѦ\ -}WӦMkڴޱ}IUVGOUnܸQ[s-4n^RvȮ>wm|WZh@)mErX74Fkz&(kngyE<ӳ:1?r-[ԩSdΝ)))EU/vkM;ȑ#lF{]wk3X} 2R(X6Vbu\ g ;5h9 B*M$ڈHNIII߾}-3i$/1bٷo߯ksR~yBqg}oĎ;^}#G>cƱgJ>nG:>|ܳgTj 4G}w'X4jhҥTU|k׮&Lwn7$wJmO+-_oPPk<1EjTLj~ȳhAbRR҇~}ѝ;wϟ߯_??kM}Okv OYF % ƪ\\*;;[./YR/KY~M8@qRDQ9S\~nժU{߿\\\z?|ת]zӶmٳg3k.7tSFjժպuGyD*? /P'#ԩok;SSS|Aj׮]N¡Cl||ȑ#ݾڍ4^Æ -[yEvQG|TEmH~EۼVMߕ00h-_oP?Wc-mP5!y&64yVe'~V6loqѢEv_#F:Gz^}9[CP(J)nX5rȔnT;?R3n8cSPg X@d!!Is&mD J^^ކ db\pmfl 0eԱc(nչgnթis:[qӦMjRyAy-u֍oe~E}e?ݲ7SPIMU+S;̋"."Cxݬk.~z{h0ail.>fڊeq9r\ DԜ^fTmGb-TC B*M$ڈ0zf͚ԭ[/..6@HYƹԉ'~.Ois7 /su~YvYI&]wرc>}Ek_Q?ݲ7%OAIG-UYFvig}qVTWzܼi첄pB1{JU(t$$$UMLLK/Ty%%%ZQZj^)DR8BT=h"FT;w4&bHiӦ7xxܢǾ[*G\FK:>dCh;?]/n56nz\oe bA5.*PqüyRRRݻwVVO?5y*ݨ~izcS(p 8{D_|O?mL?yXXQWhc.>k_ *.΋)jJ7sz$'7IIMf6%,xVqqPQ\\it]jb+22Zt~'o.{}ameN2n[Vd̘ו=mAO>ɺʓsna+KˑE;RhͫgkEo׮]A]껝ͱ[7x 1zk IZ}i~ڝ~Vh7Oyٖed3RSmz^ܜVRRҬY3kLIIiӦ w]֯_xAʴH)DR8BT=h"FT7ec(XG}ᇍz0xJ;46V[vFCˮ>w|GIMMEuQ\}uA.>zw_~֢⼮];n#),5jpn"tn]Iu6qTo~Nw^0GH|-[g˷s Vcͫ~ ^[7Uo-z5V6t(W64~XÆ(UܜH7rHmٳq㌋h߾}VAʴ@!!Is&mDYx덹 2-ZhϞ=ƣ<<Qc]FZ_F/)-073־SS&,W i/?h8f=Ljcw~Fկz ֓CEoKnmZ6a(k dg= ޲++z9 d|\Ұ8Y_o>BlR?[cլ~62gԤ&s_Uv۲W% FTe͛7OHHҥLO$%%kNLKDR8BT=h"FTI&s1@ڳgc=f<ăS.2={fvi^47ՋS'NɊ?'Ah2E+e">*25+qǛWH[U{6aE3xˮ̯z2:Ԙڴ68զoeKwau#bͫ4i;o*eW:!Jd./ظ@iӦ~B" )!Nc4h#*ӆ r!9rdҤIN2A)t'ژq>eFԎSܠA]CKu_zRۍ&VcBs og}QK-/JmkYP& m(U67o^BBBVVq 6L6ʴq1D R8BT=h"FTE{ƀ !9r=ryyJ;"Dz6~Um~;>w껝e?~t֤ƍZ|?jsi+ZVVk?_ӽ{'Ճ]<;`@#|}tt.M6y}OV|xCffG^`>kEnݵWԱcwߤ rX۵{F1Fbs@8-e} 1^Gl///o ֭[BBizYj\য়֯_n(eڸ")!Nc4h#*_VVˍ ݻwҤI5~aĉ`2~2}#Cr/ffgk23;֮]+&fN K1sBFbvU.rEJ)jѢill,ZO0[rM6'ch۶c%~wmm3UV{-_al7x=T;p`فוx}uzsJ͘ #܊e@0qڽ߮~:L~#2oᚲwm˲^uɵjŎ9mQ"?c%''Ν[PPPTTvZ+RIj?Ծ}k\'Up1Haaٲe?a ,=ztѢEfrjҎHt<mP(Pb-DQuM6W^W6.ӑFZJ{2P= ׸")!Nc4h#EIIɬYy?~€6mzǧOw^A"YYYk֬1nWcى6R(Y6F_!ڈ*lرcƌx2i#-=FWXX  2 9F6"|wof!XrQOsuRe@%ڰac=CD) z>Wj~iժU˟k۶ge-i)=h5 r Fсߌ 8{D@*iOi5k֣pG>*C=NBPN!ڈwWkh5j.}cYWz*Ŝk$ j'Up1Hr\Q>ah#BBQofWXa_矟umT)vFt#HǗBT=h"F qEh89 rv FDn޼Y۷1siiiƍ˺҃6 \B@DKr!Nc4h#帢4|) rV FDݻk0I׮]*@Q 6XRR>—BT=h"F qEh8Tiii6ۺukcѤ]vZ{YWzf@U 8רn˻[=qT$ 9F6Q+*@*0ܵ}$ϵi&33Sk]jA?ƒ/8))iӦT$ 9F6Q+*@*8p͛믿f+n˺҃6 \FŜnTilӦͥ^ڮ]իW/ 8{D@ q O>oUA^^ޕW^{:wlL5lqUWM2EX֕5 ZM8qǎƸb}S!8{D@㊪y &P|oTVVv}uҥGZqȐ!]tє)SdR֒uD8pW +=ݻ;lժj׮]zz1nт_=h"F qEUs۷o?~k+Iz0vaB PD uIIIr,ӿկ.\XXX8qă;p]w%deeѣ}*;kXBs&mg*טزeo1//O[z˝nTFzoP.]I7_` Ep1Hx}γG115ԉ!מ2q_Wyr֢6.뭸-Y(GoPD榥umbb[oe\ $s8u֙1s·v{C9@lF9bv; F[q[4PG*nkXBs&m)׵[6.9VeUjվ>PRq;z-!=ɘ1Cׯ_[Oܦ?hܸAZ?޼Bֽo115eZ5iP3e+K秥:wOT;q~ NQ?iEm42CwmٍrAٳg0/ą"M$O>hРnݺui0@0Gl͍7k/7lӦ-2rR>sϭanbbji(Wr/[oѮ/yeA? רo`-=ڬ?xh}5λn[b6mwHJ׮~ffwK||m:T'kcPh#"c4h#XNNU͝;hڵWF-6`mʗ<]v|grlOlU9żVd \({D͛wfiժ՛oumhェLKk_{=}\Ӿ}'LU8><INnS3)ɬٓKJ dZ֪+e'c _lt!'NnQhՆ==#55Y,1_0C4=Qƾ/>4--. pWedw~'o.{}\z)cҬ`*iM}e|ySΝ)ݪ6ǎoG4n@&x l䏾=;>ɣ&M_h#"c4h#wWk&Na41tP}cYWzر6b=.G޽|[v`}ĻkR- ^}uA.cFoz?ՏVuu56r;tH?~VZyf'+.֯+?G ~o>Ԏѣ&_w@mH'5jTz/{}C>1b7%QwI=t-rLڽva|6{RV=05X6 p9F6[>WjvBZ2d,ZZamԗ־SS&VVoKl]O6p?7hPW7.;m6//ӤICmiN笁Lεua~>Hmi Zj_>sYUwmT֊䏾=gܳ͞g+am,))IKKҍ/R#MPmD 4Ǝ;f̘ǏHi)Bdmܳjժ?d]rI38̎^ I}P{vI5ܩvY7n ]}Y=Yʀ}FM9<-lgQ'J3m邧}РA=zhٲizYj\ 0 ''71ׇIYdnBBoO0/ qV 4k,)))!!Aʴ #9F6@pmM4|yp(7HHh,,7p.am,))i֬Y2-5Fˆ6{D1\F)-amG֢2m\ h#M$h#%ZKEsss[h eڸUFp1H"FJp6;&$$_TyD=h"FD)Z0ڸ`k\*h#M$c(,HHHlڴi^N6{D ?޳kʕƪWTT4i$/F0Fs&m᫲rt#@#9F60Us FpFs&mҍah#M$N5*Fp1Hrҍah#M$޽IU/ ki@t H6*|%]/JݠUEQnƕX1o,[6BAtqT:r*eʉMsgu=9}zx 5ƨF^b(mN׾֯_=k[ >|… Oͼw}[na㥗^:c?>}L6-> FL6&JLhkGe-.f͚`O~_+ni#@zi(tMhcԨQs!2mڴa~~^8`~ :4r-vX4>v#/裏4n{ma; ƍ͌׿># GR7d 4QX+&Q`aءC{,l?裝:uz/c=6|i=~CK^K,yE ##G6Y]]}ꩧfJEEŋ/i %FĮwy'Bڸ>444zsф}˗_€-x8d~ /i>hsi9mկ~uq߿_~_Wb3׭[ףG~:z˵c@)X&J[n]_m,淗.]{ZCjhhxWSN9K.)QK,i6.XK.фyEuuu:u5kV~ךFᨮ]FۉVX1jԨ #,KKL@鵲n12dȨQ_v\zr0'r!v^ѣѣXfMΝΝohpٲe{|暦ic]]]tDk Di# Ӥ/wկ~u[omwoa裏~ꩧyE ^z;l]w]%7ؽ{*«]pA!2ò 4QdEkƬ)'w]cDCde @ziȐwuڨkaY^b(m]GXHCde @ziuc %%F yݨklJCde @ziȨv[7aY^b(m֍h,H/1M6֮F]c 4@FX&J[nݘ1ch[\.>r-h,H/1M6uD,H/1M6uD,H/1M6uD,H/1M6uD,H/1M6c}]w}{ߋ|ga{Ç?#?o|˗/?o߾GqDaY^b(m("vzڵaÆ=v뮻.?3OmWWW{׺uih,H/1M6UW]ӟ{=/E߼y'#k֬G &+Wx {̙3Uh{%%F"ޱꪫƏMDڞe @zi+V 0_~Z8NaY^bؗ0IDAT(m\]]]^ڞDi#窫kjjO X7aY^b(m\}}}UUs==߱#a<:RaY^b(m#FTTTDuct:l0JaY^b(mڊ=z>g̘1\.C31(CK.=ztxˋaY^b(mrӟ_bP֮];zǿMh,H/1M6@٘:u3<Oà-]___&4@FX&J<[nGa[x'kkk_mi,H/1M6@y?~eEƌoKCde @ziƍxx`ժU~ %%F(9k֬x W h,H/1M6@뮻!vZ&Ν{GK'̔W_- WDi#+mV/:[>MEN:tmcs,\.ľN-WDi#Ҧ4\?׎uװvKݕe @zi/>vz|{Gi .<3:wܷo{ipVEk4zh#砃ٳ?6lWTTh|嗇o.O>$8qb֩Sݻq5wEᄏ0&^m.,q7o޼̢o W8sh?i/,]vxݺu0Y]]/E&MԫW!C4?]#Ny(i#P,KKLPv,mYTS5}ObFb/m7EP?]яqOzF,X&J @)S_mlZnW r,jcǎիWlcOD/??:tg 3f̈/^N2}􆆆MK܊+c_iKBwStE?$u֓6e 4Qei'>aÆ-Zc=zt4yС,^_z+Np]vҥK{7mڴ>䓫VjhhO~һwhr]|[4hPBk֬ҥ/~po}[`8C555apMƢcso?i^ї _|ڵk_z0p03jL _K4w=yME?]я8]'o=i#P,KKLPZ6v-Ztvq͚5OԩSUUĉ;wɊK6]uUtоۧO;3 'pBp%o~M.T-]g;Bw~׫W?3{}뭷6Mypv^so?i/,].ڵkK.$Hn{}'i}OW#l[IDi#Ĵq׿>Cehz_}uuu|}H餍@Y,H/1M6@*N1gΜ^{-l;Gu>dO~ %%F(wuWKa̙|pN..>d+#YӅy_@Cde @zi>;gΜx <~ %%F(}FȚ˗/ h,H/1M6@y[׬Y`wq-ĿaY^b(mp`[}'_mi,H/1M6@ٸ뮻xoܴiS- %%F(7n>x~_&4@FX&JՍ=Zn~ǿh,H/1M6@>x#f?_fh,H/1M6@ٸq |5kc1(uuuǏg_i,H/1M6@Zhmvw6lc1[g͙3g„ 'N[!2² 4Q>{g'r;Ì3?ƿǭ!2² 4QP;Y2² 4QP;Y2² 4QP;Y2² 4QP;Y2² 4QP;Y2² 4QP;Y2² 4QP;Y2² 4Q𹺺§;ֱ= %%FUWWޱao)%!2² 4QiӦEOwH{N4@FX&JbĈQݱa$ǧ4@FX&JGӦMr1l0JaY^b(mjQݘ墮1'Q  #,KKL[MKjڴi|CFxػu*@6&Jd7|kM6駟%5bĈnFx|*@[6&Jf͚:ujcwtw[. (ڊ=zL6-˅ǰFx|*@[6&J7xcCCCm a$> IKL@KnxnO?8qb{PR#Fr1lw-i#@zihɸqN5w/ot->33lYKkkk c؎h[FDi#Вƹs瞱J[Y`AEEEo3'NuKwСs]t aÆ͙3'+w}O>0Ed-m c|@6&JKx^ve]֮]x NKGzknjkkcV^}s1qɹ\./o.O>䋗mǏv37^̻k.¦~ߵr>c|@6&JI;tonѢE{Q9sΰaâO<16>쳋/^fÇa .Xbʕ+>뮻.pa0 ~ׯ[.

䓦4 -G?QѣGWTT92>餓FZ~/EgM>G]]?gY8 aY^b(mZ2m|)STVV˗wwɏ7Rp@kw}7z /|iN9ѫ/Y$lϚ5K.acҥ_җ+VD66 -ƛxk.jjjvkD]v&^{WwhW8aAfˤ-,H/1M6-i9m|7c‘N:5n:vv͋{キOޛo]Ѯkn+_x/j-%婧/8/ZhРAQ{555V GE . a.첥KFMh޽ -d8CCO~QEOcW֚K-zUK K,ۻv]Wkq͒6 4Q$1m\de]vA={5jԺu=zt/_zut… 8N:UUU}V?Aݻޚ꫻vڭ[ٳg]uUk; &L-o '.&D666n{%iZby-BsT;wo⢋.zWcrJ"-,H/1M6-IL4 E<'x">J FX&Jd?m[KZ`Y^b(mZr۷iO?6 4QG?~<cU[[;cƌ 4@FX&J\o&Lq 4@FX&J7xcCCCcw| &Ŀ٠!2² 4Q$={ԩSǯ[.  %%F 7߼txeڴiO?t %%F YCCȑ#׮]]K>` %%FU/^WWWW4v:!2² 4QꚚ;aW__߿|ݘcFxػu*!2² 4Q^z顇ՍFx|*mNCde @zi/jjjwޯ_c#jJECde @zi`TUU?˅ǰF( %%F&Nؽ{}k\.<0D)h,H/1M6lU__߳gvO4@FX&JqEưMh,H/1M6l&) %%FrAh,H/1M6M81˅JGCde @zis7o3gθq?N:)˅ǰFx?!2² 4Qٳg-&Mo~/rx a$ i,H/1M6ڦMƎ{i͜93@愙a~|mBCde @zih6mtW^q6lk" 3|ucIh,H/1M6رc֧af`aY^b(mکٳgviׯ/;wu]771l a~8*[8HaY^b(mڣ͛7{3g̏lڴi̘1 =H/epT86!?BaY^b(mڣ9s|,3fgѷom0Ndž3i,H/1M6Ѹqӹs񱨱P[dž34@FX&JΛ7o^^{QG{ao g? h,H/1M6ѠAO9xD g? h,H/1M6Q~?7^26cOi #,KKL@{Ɩoԑ0'?߯6= %%F=:͛|'^26cOi #,KKL@{4nܸ/W_nj0'??ΐJaY^b(mڣ9s|,w{aœ-x[89P8®!2² 4QG7o>sgΜٴiÛ֍a$pl8C~6!2² 4QSg>֯__8O2$SǰF 'pl m@Cde @zihƎ{W"c0?!2² 4Q_6m+ 65愙a~SHv" %%F]۴iرcO;3g{Ü0SX* #,KKL={bҤIoc#Ѯ0'~mHCde @zis7o3gθq?WVVǰFx?!2² 4Q@aY^b(m h,H/1M6P4@FX&J( #,KKL %%FʀDi#e@Cde @zi2!2² 4Q@aY^b(m h,H/1M6P4@FX&J( #,KKL %%FʀDi#e@Cde @zi2!2² 4Q@aY^b(m h,H/1M6P4@FX&J( #,KKL %%FʀDi#e@Cde @zi2!2² 4Q@aY^b(m h,H/1M6@{#`Y^b(m(c ܠH/1M61rhcn&Jʘ917hKLe̿ژ4%F2_@jll=ztx67hKLe̿2u 7ܠnʋ4%F2_@9ƺ|ru#P^ܠH/1M61rNaQ7 Di#@/g4Ս@q 4QP(#uu#P.ܠH/1M61rEc]cD7hKLe̿hFc+֍•3w2n&Jʘ9RSSӿ#F̙3'o[#W$`Wr 4QP(W^y8'O\GkP7W u)ѣW^?x|. @zi3PZQاO!C؏86PiZ7F?XUUu <{<@~/@q 4QP(n <~c~qҥ;5F1'A]|Gydx-]#PBn&JX }x~_O {6l4Q0`Yg׫WK.˗sV ?\h 7ЧOݻ_UU^7~)4QƓN:)9x`qڵך1cFc=ԍ+1M6#jjj*++wL|ucӮ1oݺuя8r޽{Qb(m`s)Ƣnlk,4cƌ3J@:{QUU pI'UVV'ЎIhS'O۷o^rYg$1i#mC}{VO6֮={Fi) @&mVUUEiSO= @&m?\.WYY@'mw*ao:~(7H@ G lDD@@+Si&лT#{qW >ގh#d8zvh4Qzt h#ߡ!V(F$IժjN'ˈnd{h#Jl|ɘn(3F jGc2c+4D(Jۭjooob???_[[T*db>b7[L:鬒%@!ɿz{{;ݸ!=Pnܤ~_Vaƌt>v@y6P^W׳pnv8vlmpoo餕$I'''Jess=؍ !@QnV{{{wvv>?811zww؊lm@Vl&Io7( F $Q 11QHD(V$VVu:|/#1r%'wv?~~~~yyb<=*ɯP>|pvX]]T*D=JI!mFh#0BD"F`6#D!-F4"IENDB`onedrive-2.5.10/docs/puml/applyPotentiallyNewLocalItem.puml000066400000000000000000000051431513710110600240320ustar00rootroot00000000000000@startuml start partition "applyPotentiallyNewLocalItem" { :Check if path exists; if (Path exists?) then (yes) :Log "Path on local disk already exists"; if (Is symbolic link?) then (yes) :Log "Path is a symbolic link"; if (Can read symbolic link?) then (no) :Log "Reading symbolic link failed"; :Log "Skipping item - invalid symbolic link"; stop endif endif :Determine if item is in-sync; note right: Execute 'isItemSynced()' function if (Is item in-sync?) then (yes) :Log "Item in-sync"; :Update/Insert item in DB; stop else (no) :Log "Item not in-sync"; :Compare local & remote modification times; if (Local time > Remote time?) then (yes) if (ID in database?) then (yes) :Log "Local file is newer & ID in DB"; :Fetch latest DB record; if (Times equal?) then (yes) :Log "Times match, keeping local file"; else (no) :Log "Local time newer, keeping file"; note right: Online item has an 'older' modified timestamp wise than the local file\nIt is assumed that the local file is the file to keep endif stop else (no) :Log "Local item not in DB"; if (Bypass data protection?) then (yes) :Log "WARNING: Data protection disabled"; else (no) :Safe backup local file; note right: Local data loss prevention endif stop endif else (no) if (Remote time > Local time?) then (yes) :Log "Remote item is newer"; if (Bypass data protection?) then (yes) :Log "WARNING: Data protection disabled"; else (no) :Safe backup local file; note right: Local data loss prevention endif endif if (Times equal?) then (yes) note left: Specific handling if timestamp was\nadjusted by isItemSynced() :Log "Times equal, no action required"; :Update/Insert item in DB; stop endif endif endif else (no) :Handle as potentially new item; switch (Item type) case (File) :Add to download queue; case (Directory) :Log "Creating local directory"; if (Dry run?) then (no) :Create directory & set attributes; :Save item to DB; else :Log "Dry run, faking directory creation"; :Save item to dry-run DB; endif case (Unknown) :Log "Unknown type, no action"; endswitch endif } stop @enduml onedrive-2.5.10/docs/puml/client_side_filtering_processing_order.png000066400000000000000000001366741513710110600260150ustar00rootroot00000000000000PNG  IHDRpT+*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxMO0sLUâ%JVJI&aTglRWBHw̝uҸR-Ō,iA|:D^5sR q Tt^=T@`۲ξ^!rX$9 b AO*A(붹v)_0-(D!:<RĻ!g_'av<is.q-x;;*E<y#=wս_{}ɂ֠)Agj BdYbglcrN8>8Ɍ;m$dZMNWף$ZKZhj*@"k3\t,r/w͎*L+"nd4WޟX<>wx')Vgd:x/nRrYҳŽ\sHk?Id7 IDATx^wTT7p"z 1*VjAkEc$=QƛH%,K bl(c\)V$ MADT` iُ;=33=Sٮ9 Ij%VDb0Q`D!B$H & L"1(Db0QMݻ!!!k׮pw?&)$&&oٲ%%%Eh1n޼|!7P8|EZK.-]499Y5DFET? TTTP.--c@ vܹ/R4)DƲb \Ct#GhcH(a0\!!!eee 7˗9@燅kHŐ`PBCC+++7qA$nx111a0tIIIO?[N6l?H^RR"/46;Q*kAH}m@ r "q EuW\8qӨQΞ=óU1cgڴi… BأqG/TjC#C;4Ǧc->EMvFt@$HtG[[[/Z(===55522ĉlBmѶJtt>fJiii7o/'VӃ=x_wTHp“Owtxl%- Aދ: Fė/_nժս{pssI&͞=}͜9s̘1o߾͚-Yo}wL C[nk׮5x L-[L<9 |w}G?~|DD 9mK9vX:EsXp9Ͳw~l7+?E%wCCCcbb8o{/Y}*:e޼yB%'$ׯS㢢"%IV}EEE23Y{d/dsswJOOO/uG2fVǦm "~)л;vR=zJzDb+ }6BM6yyyNWPP=]O+Db0z HP:z(%cDz!,^j(Ws)/j ZAN $Ƀnݚw޽zc-i_koerh߾}Y`` :sV3YR{#RcӶY Xxtnnn[o-G}kQaoاX#xxe-"q33{졬wܹdqRRBPI̙3|_XӸGuvt)*'OfRp3Hm "~ә'L$fsssuO%aiӆyƌ,k[Qc$>}̙oKo "1=D↧;gddİoRa\]]i+?2 _WV4Fb*rlmmPgWfe!I.͛RzIYYcҶGݻ:uJ}m۶eRp3z$*X[[GbI=q֧ٓ0\\\}t>)HmE/yTٵkWiwW"q)GYXX׏.ٵkem۶;VPۗ {JBtٲeڵNNN۷EI3%1jFciiZj Q}:tcǎ?iwGRp3Mfk7w4|ɓ'YrtxdGzrJR[Jطo?Fm(NHmE8qFߝn`H\zUC9ʙ7okVZZO?edd 4JII6j|_"\l?T75iQQ"j(EjM,mذApD↷n:1[ ]p$Z Db0z ؘlܸqŊw... C$nx111Ą`PN>-~ "q+..V@a ?Q,_\ "??SH(؏2c `tˊ+rssŨ?~ȑ#!7?PXΝ/O3B$nD999q E90^č˗/tҥKO0QC$n [lCr˗0DGG'&&HL"1RS1TCA$ꫯ:88T"1mmm̙#6"1(KKKJ鯓\tIl Db0$vuuHܣGB)6"1zq/a~wǃxyyGDDUzϺ<==y򤯯/1cJeUUՏ6)l 8YŅ?^/ڸq#E/ is׊*aBVuOjjA(.ZH\y$~O.D8::/00-MRwPYUUWRR^JzaZZZZAA{bmff&mMh^ZZ*T-9VyMFFmv!v$_TVV ڶ&?7oJllffFHRNZ1o&3itxJ;1 yx޽ݻw>|%U |ugf111NNN/u+ԩSxpӸ-[ЦJ{pB~~|||^|Eooojjժz5}vNmM]v9;;iKP$)=5;vKvBftt4~.]Hjmm6x ++RmP]lWt [nQ9**%66v=Ԙ+Wڶ]^pMlNXh**ЂrŋŴWIB%L#۴iCe 666=վ}Wj[mBiS/Q*߾{KK)SDDD_{rJ:~`dZ5t.\( :``@3B$$=R(>>{=jFy+wj[w#FEhV"q޽{NJ]>s̠A9BԷȐ!C_.V<\ЌA+T|- Wgހ̌.][ܹ#\wɒ%?)6VS߾ӹaZҒGYWWW77۷-oMI-ꐇ"1"ՔYYY :)'8p5b ///ո-[X[[<… {챷-6mj׮hhܚJ/^u j ՔJ7 Q\LOOΖW깮>ap{u᧕gϞ-ѦV<\ЌfRM1&U~nrrr~mB&.zfH z<Q]DDHoEEEGa7n@ %5y*nᐇ&4#Db )ᆂ Ș#qQQ0$bØ#qtttbb")yS=-/V$N -1GbR'|M5TOKj D?$-_y>000HL͛gkk&lMe'M5k1y$tB Lny_KKP)4 .0d׊իЀ4&#ƆR1ͼ]]]njceeUYY)&Dc>}h`ήo߾b#Ff8""ӳJ`` ]nժU4Hmllm&6hdJիWFдh`ZYYQٽ{w}zOhpBqA FNx$IW? L+.h4=oLU]"R MJJzAEEdĪN)X:ti'BӠއ~XPP ~"S¥KJ5⪪sEGGkEll)u$>zڵkxlT .$FJbRsfO*^xѣCBB?~,.Siݺ/"]$8v8GN`b( UVV-***++[˴V^^kd2yѝyzz&''XRRB#1-͕W>ZZD;v;wNZBSO] JqZ2dǏuVRٱcG֌6V>rHϞ=G٣G%#Xft bɰ(..fey$&۷{?,)u5335(--卥ZለfΝJRԓ(//?qĎ;]=v״Y\z*ɓrƌB$èz&B@ Ts$sWh999b?iXf {|ƍ)Q~;w.V||=9OOOV)2ڗPC*TLw/ʕ+ݻw:ڥ:;;4EO GG 8kB$>p~"Z#ݻo޼)PwPF1eE*//iii<#qii)-++jh Rݻwoݺ%UOOO///g/i/mvAql_|HLiuvೳٿ`it-ԯ3oB=CvA/9X5Gk׊3Ghn!!!b?A#0_f,S|:uj@@Sy.ӦMڸq#ߔ\XX-63gx˖-ݻw:tӅ > toy߾}iIy!&&V|饗<(i9xf׮]uR1#~*NFh2==]U9[Mqq6=/ȯ]V' jFy.66v/RL M9sٲeFT}vN?ƴΝ;gggK"1UZXXQQQ...1-W})_xHL̤7nPަ4<9~ݵkx6t) `P _reĉNNNF:{,ҥsmllص[l;++3g.67NkPd0)ןR\pa~~xiii9eʔ~=B͛y3!m?Jcǎeej"qttK/*)ҿ=վ}Wj0t߷^hQzzzjjjdd'"69yKBgSFFmS"v;vpFr׊>޽{NjggǾLw#F1X[$9r*iEb6Ĕ)~%s]I!C\~A>0tė/_ٰƧH\\\tI*S!-- K,;k֬W_}ºexxIfϞM^nٲeϟi4u~wh`*_?[bE`` I~w?6CYf̈́ h)))KHHxGM wŗرCҾ}^^{W^ye֭k׮ɼFrזTˆ dI}>ɔ-Y"_|AΝ;8McA`_Uضm;t 322h^;wHZ^Rm?''5B>0tm۶x7ȿ'=4C7oۡii>}( (={ו qǎCCC)a޸qݻwlOi n߾M67lpa[[۝;wV۴$ JZ_~{`?rHEhgZ($wԉgϞY> 0Z~,kԩS===}.y aR^:R1 F{{{e4X%4///ZQZÆ cuY[[S3fEvttw;888;;Ēk྾0`%Q<\g}`ə3ghF3ϴkn̙Z@R]hnjtuiSWRe_dc-X7*r׍TL׈朜vYBaHj?T[".G=xCzQgggAʁ?y䑘'oCfHLuִ޽{Ϗ &&&+sΟ@˵mۖv_ ftlYlٔ)SKIuͽ׭[Ǟm۶ÇK+/f-5n.o[2K,u0)3VZ,~8:[[zC`ٳg?VBddpS<;vU&$$6H|*WkTӼ(7)7v*NNNKYx IuҒ3go_rruueא,,,(oSTNMMem4n믿J/VH,Iy}4H*}:W[CWHCjIuihƌ>>>lˁ/_fޑG &L8Q+%I{TD_awHr"iVZ_jwf̮]>|";9sl-Iw/_KZOO#eem0)IyA`o$NOOwww777wvvׯߕ+W"';;;#HL1W^ RJ<ڵʊB){2<0tLAAիWRbnn.jqRRR4c255U[F-))/<o@1%KT_G⢢"KaR.,=N*F>025Gk׊3ʆ p,Ξ=w^~JKKׯ_gtBV uO$:::11OʩP+ LE5kܾ}[5p%%%}Ν;CHHO3I9P=-)OˑL͑x޽)))b&C%2e=I9mmmy)4ӧ>;;3gMZ#qaamX͇ݻb?SNYZZӇ4)={K.MA}w4صb6zM5IIIbSHLN`uuC&ɩ...4)ի5@#qGR1>KUl`/^~ uw}'IZx1M}}}oK40KKK777 .60zEb|\1AӢ.TDSvvvx@ӠfmmG F(}#1%KPS4:'ž1aÇg3rƳf@yWx$2e@ɝ;w(ZqN'@E3r'''4ӧOIhh$^Z5 w8]Kx[#XO7n?oK.{)l*8]{jJUUUΝb- DbЅ&v؁ CBB=*Y0NTxѣG0|LuֿX &***fVV8Z:qĎ; &°YeeN/_YeeeT?xKycL>3S1UOOd~zKJJ m䑘 CH Ѭ=((XB?>22R<`(jjȐ!?r``֭[JeǎY3J\Xȑ#={9rd=ږ<,#/X߿?U NїaV:t"} "1hPYYISLᆵk׮+WH8&&5F{u޽999666'%a5:R1k׮2wzӦMYEGN4հKDb`Æ ogPoAAAcѣG1S0]Tnݺ0R<ō7uԨQEb bڴiQQQGk 0 0cq !))&Db^OR+?|Exoeh_EBIc*8551++ Çg wG:c}FDk׮ʕ+3F¢员o>// `k׮DXe$iΝJRmL|wh?@F=H|I___V9c !ӱUUU=QhB`LG}g4Nddd~~xxYŅ=^Khƍ(͝;?^+>>ޞj K$r?#׽{vhRSS D1uѢEb!HL 8kB$>p~"}F9~? 1ܼys޽yST*)1 UUUyyy%%%쥤wHKKcc!QVV&EEE:oyy9_$l֭[&==oGb}ff&GV#i9ZIv4v$U6633ۨSV̰o c Gy`| 6+ՏV ru@aFPM4yO[9N0`jLŹWҒr#K4(F"s_|AΝ;8AV}v޲"Th5@TTT߀@V"1TSc$.((h۶-%oa&>>>cY#ii>}( мyϞ=ugРAs̉+,,x4O???Jڻw޼x| ^عs'9bʽNZxqx$9r$m"Eff&mcǎ7nh;Qi;Seem+Нi@gݝ>,yˋ(<^kذaVVVGM6kNĒh53>吇5h899sf< ͌gΜyVOՃRl#֭[Yexx8.ˍ=P=_~f|"zj4ܹ3bsrr98"˗۴ie̘1AAAڍt̂ |MVXtbʖɔ,x Ϟ=[^x4`4H  Guvv;v,ϛ7OLyo;t o&iILauִ޽{ﯕUڶmK[f}E,߿_ .˖-2eTH`,Y2uԧ XN_T?TԔ~m)K - M: C5GbfϞ=gT)-ǎc vvv 13g=899QJgSNъ|ɓY$>}%3g-ZEbo~H Xm$_Q]DD_#GܺuKo uh1gdd(JIueiƌ>>>l.˗ٓ{x„ *'N?јBy޽{iӦZ޽۩SxIm۶eIH233vzaI z_|StLcccYYDb}` h  @DbHnnnlaaѯ_+WE?}`y$ܫW/GGAegg˶4Pyŋ...NNNSKKp.Cˋ)Tj#+++%%ESHb9C~RYE-SSSk̮5&((hɒ%՛hHQQQ0`yX;&!C56l' _CnTgϞݻwXT.]ZXX(֪YnxɓDR>`r*F @P Esφf͚۷o&iy'OJ3K5TOKj 2/_w-!k?DbMp-הĈTf͚egglR_Na4 6Db244TqpË*.]իi+ZTs)tY;}ᣉF(6DbWU< ӷo_;;޽{Ӏټ+F={pqqD{=:v'P_qA v_U<u%IիY5h㡣!CꖕE7^r*!!Aj>|ҥKaaaP_?\}⧭Nj4ݽ{wҥRMܹsѕ2?Sh&`г|BZDDŹ-4u=zT 0: KTxѣG<~X\Һu_~Eh&`гQ6Y۷)-4;v]F°YeeN/_teeeOT`-eZ+//5Fjyѝzzz&''7^RRRXX(o#Ĵ(77W %H =}ѽ{,4ܹS0 [j5d__ǏS900{֭Jcǎ:|ȑ={9G mKFjyё,Xs֬YEaÆcV:t"}@B$TVVҬy޽ʕ+b033W2)İHL{{999666WA%ÌTLyڵk޴ieVfѣ&Mb5쒲>g !C nݺ%N`9,[L~,!?z5Fb С Rֆ *3R<ō7uԨQEb bڴiQQQO8K zV_~8ufrҥÇFAļe9V~!"dyјy$NMMuttʢrBBY]b:W pppxHg><_EYjI`,,,YYIp v횙R-pDDPsNR)T)22m<==y򤯯/1ciwUUUOT?ڤP(u%ƃH ==z(,,LB/v5k899kmܸ2skS,`R-0} 5Y BXAFRSS DIuѢERNH<ӿH>}8߯_@HYhT`гǿ{q ͛QQQbWS**JJJKIk۶m'S*吇q!Cr5F₂mRoWy>>>cpԠO>cbb Ş={ kLcǎKoܸA(@޽zߟ}6mPLݰaÇmmmw)l >%%SN4G?{,Mi_ʥ1Ņv}~4կ_?:ڽ{ZXXE5"B9$$A$tbh4i(JYWXE+ 6lښ͘1CHL~6r5B  z13g }X>,6[:{>5"`7|S^tӑ)8hlNNzCaa0y0.Z Db0xYNHPL=z3V!~޼y6B$oC1Slݺ5w޽zT[KLLdm^y2?s|]mNYYTN>ۛ&{LmۆNS.^g/#1_+88]HRݿJ;*P#XҤ4J]guq!CrGbfϞ=$Uދ"cX9!!Ύ7c4F3gjTUEaIauܸq{ɉСCAAA*[XXPlE7`ePf~5AOqqq򗹹oT'z|=! @ H =322bbbJ4c i|5{<'LP2qDîޘb*U޻w֖Z T/M6mժULoD:|Y̙ӽ{wvg/꧈?66TT4 B$jr$ˁ?`!S իAe[_]vm6zyE'''ڗexx8ZaU.>>ˋ;tWŵkX?ЪU+賗Fb)yfNԟ-@$T<\-"1<,'}E1AJIIHl&mmm̙#603f̰P"1<,WYYYm߾X*#EŅf40鯓\tIl `2h (ݻ7T ЌgBCCoA+//N2jvvv>>>40{P(<<Gg #%:p3/^x4?~,.{uֿX `Jg,Y)ΚMfcEa̬zzX(++[˴V^^k0Sc*7陜@IIIaa<Ӣ\1s "1޽{|TDFFg ҥK[j5d__ǏS900{֭Jcǎ%: ~|ȑ={9G mKF2աC; #`ftbƍ:j(Eb bڴiQQQO8WF z([t/B&III 8!zuXÇ,{xx|+C*aF[*f8551++jΖc C%t><_Z+V 8 bVGbҾ}<*8pE®]fffT<!ܹST :8qbǎt|]UgqSS1'Oe53f"1 Evvs`dgU= 'Š]dd$5k899kmܸskS `R-0} 5Y B ,xW\YTTץ\TggAQR]h)T"1s1p@ooo//ӧ  d4+H =kЭ8v/ΈA7oٳG<`J%%L*//iii<߲2V+1ϳHLJOOg"ŤիSO {PP0]+s`gU\j"G0ay8??>>>/7dSN L+OtڴiVVV7nfϞmnn޷oߙ3gJ$ 111NNN/ڵY^N[*u`гF ݪ׋a9==]u'rTXi2AC).66v/RI!yٲeFT}vN]/i-kkLqj~vvv׮]{}oM`gUD+WL8iԨQgϞ.]$%% -mll.\ T{Y(Hdee gڵy4( KT.\0??_P(2eJDDLmͼ6i۷7tDb 4{}W^e- @oD;/zwz0V`гF ݪ#-Zy IK$Qm䑸 E=Cn 'ӧz޽SNc_;#F-98::W2we- ru FB$5JV}/_LSsH\\\tI*S!-- K,P:k֬W_}º j6vؐsH,ȷ~N2ERx̖-[&Opy֘Tk+[nT'M4{l%%%k֬0aLII}WwرTH t\K%KQgeeuܹ7Ngdd wG߹sſp0V`гF ݪ#qAAA۶mpY$ϼytLKCa8&&FPٳȍ1S/^ܡCi#nnnN>L/) Q޽{7u.KSNK~)P}ǎCCCƍ#G+V`_6Nڵ+ F:R1 {{{'U'NӇˋVTְaìRHL8p|-!7*>cH =kЭ13g VTbdD+RG-ZruJ+CqYyW^]V-fb֬Y-ZpӧOJ˒]F 9zf͒ׯ6gىéijgvaÆ(0aBn|,JB2qb_)d"lE%HJ+oHVL퇢mvjavvv||tR[n XOZ|^Yb:S-[,۷߯w+-kז^f-[8#Ji ,p[PPp222T}82}0ZXqJm۶3ge_}sξrÆ 4P;p %zէO.ρ֭pB_8>sBW6js5gPl,ꫯԃ-Z9J";Q?_^=k>J+- 6LKKs/ JSV1ax$k%b )+qnnnVj֬Rv֭[oܸ窔y|| /;J NNNNLLl߾}_e7o^:uڴiڣGЕWYeRRCLLĉeUM62eJO0aɒ%-[0`7JviԍJpҊÑlE%HJSVbe߾}|︄ gAA4j}Ç?Пeٱc͛yyy!TRRe#Ylijc\%.,,tM m-*Qbט}@5A%HJ0+qY߃feRRR{9}] cƌ1eee8ߺ,ηt܊ *1GV"pR%9rѪhȐ!'OV]y;˝!Kd9k2Ç}Hk>x$k%b ҥKW^w>y3fޗ!7n?A@Y&sM}2>}SƢx$k%b ǎ>7a„֮],ej͛˒w}W@zd{jL%2+MJ 㑬5L<̞={@JJJ!.F5kLVZ5mTlR>2J 㑬5LG5j^ݟcW_}aÆ 25:t _Go≠K.D&&&L8qQa<o-NVPP k3GqqX> k2'3XJ 㑬L^}Օ+W-'9rdРAǎ({vޔ_}j>jx$k%b-L ݻwCfk6nXD{ァn䃵Pa<Qٳfffؼy/<|ps?O+W_}B>X C`-JTbdD?ڵkԩ$/1cdeeRuŋ?[aO? |W~|>SO=_啪g_*/Ǩ0ZXMGʎ;F_c;e/*;97Y{9C?YYYǏוz7KN.AݻW+[̾7x`,*1GV"VӑԀO4ި!疑!6p=z3וQƿ/}i"Շ#&V|5TP Y+y۷oF|)Q0?СChmܕXV8Oٳe@|a唭XO?~"UѣG4SRzx$k%b5]uNPޘ:(&g;dZ1*#<_m۶w|{e+UVR}6w%\~iii]toVӦMwޤIln|a%t+NOO?Ӻvze}wO>:u?~|:u6~e00ZXMWm<~[5+rR0 jTß~z/(mY=VxѢE7|Z?uذaCgvƦ>nŧ~32RgΜ)+qC TgTbdD >{[C|Ǐ_P.J`믿cǎ-ZBUq3f8v4F?VZrYRjЇXVp0ZXMW=ܾ}{FF( eT-[$&&6֭]biݻwBBٳ/.|kը+ZVIi걌 . =0ZXMW=5jT4t8~ieTwy.S .?Ѧصk֫W/??_ms@Ó'OK#90ϧ$77W׮]СCSy睷gy0gUbHD%HJjj~sof 4~xC@E8X./SN;v;J,-11kiݺu>}~*ٸqc٬C\rC_>,Y'K}@IKKs-[RRRڷo/u'o V66.ׯZB%HJjjoa֭[xb?ٳ?;w8KEEEߩ8zzp__˶m۶nZ\J,?Nd{ytTB7;|O?]ڿ<_i7򒝧h[q0r9mpPa<&a5n8UFD^zCvu+ԩӓO>?Iھ}{ݺu }Av2} v֭UVgv朆zoYv+Kԁ)S@oʄJ 㑬t0o`óuV@ qѣG)IJ3/BL2YYY? |͞={2qv)ۨvOjNmVN>LmlriX;|=-bo駟$Z= *1GV"VUé7nիWBBBRRW_rJY(?#m˸_[?񏘘6mdffXQV 'HEH|Gtgu] /zkFFnmĉ%%%Ksrrf;|W: FڵV^@BL4J 㑬t0SVÇ7h`[ld_J,m9/+j㎑#G'RV5 N+vWbgg>}.p۷뭷䫳NW}~]vݴi{?p90&*1GV"VUOY7l oߝ;СCC}w\>L4J 㑬t0SV}s9}E*oܹC==o͛72\nL4J 㑬t0SVb|.]q޵kܹs7Rįz>L ]/_.;e0PV 'HV\XX[o}S)((dF@8&D%HJjj)+mfΜ)op}Ν;N. 4hkJ| 7իW>}Ng+5jl~S=Jj8A*]%(DL4J 㑬t0SVVZլY3%%vڭ[޸qӟy|| /R۷osN^OJ,֬Y$8q܀^ bpea!LTbdD +OkHj)رc͛>C%to Ek`|0ZXMW  s9bĕ.+++''=AduEYԊDCPa<&;vL[F}v}ƍ#Y+HpLoQFpULǎeZ:u$B80ZXMG~3gΈ#2332Z|fϞ/edd\kSB80ZXMGnv:u1cFW \|~G\ȿe˖=[=<Ӓ#Zx~G=SSj :T_Q1rrpTbdD#A7.sܸqk׮okE6:vq~ԨQ;vJ2x}Px18;U+}ݬǏJDwx$k%b5 zIJ]hرc wÇ322Ə! ]s5U87};c̘1}T5KQE0ZXMGi`'M=D۷K),,ԯD7)ç~GѣG*gKcy֞={BZϴ>n2:tX~3EEEwoIJ:T"*1GV"VӑGɓ'ZJjC Eiֵk.モ}ԩ+R\\\NT8iz[oմiݻ7i$;;}JV#׿n۶}'^Y+hժT_K./OKKҥZСrQa<=bnܸqԩLTҊf9ӝRgΜqÆ ؽ{w\\ O}X ъ/eXUE|jСQa<=b۾Co-Q?Ł(UbSVbiz5BZK3+Z/Xرc-jPUb)wqnj3;SC/Pa<=bΟ?ڵJT?Jr)rRoFU ^r%]d-}X ؊Je˖DqݺuS8K,8o޼޽{'$$|wx$k%b5 zĂ}'w>Y4l?}˖-)))۷:`}֊J,W_ܩS;yZ%3gNbb5\Ӻu>}Ux$k%b5 z1cF^^^~m*<-STTׇm۶uV.9rD=8z{<%7^RRrEUke\;w~Z~c 5c9ݽP:xJ 㑬t$gEz?~~F0޽{۵k׹s+SNjć{l5wqe]V~޵ܧzYڝ_j޼yj̙IIIΝgʔ))))ηkňrTbdD#A>[n7mʴq9:t(o'>LtJa8]?ٛoٳgOع,WaÆ9[+ĉ֭ܧteرҙږ4h ??_~Rս~;>>O?uʣ~݀J t$VzOq^z%$$$%%]}+WT/>m}qqq0gcyc}u^ЗJ)ӫs&OI{-a.]Zظq>޽"-4&&[op'KmٲK/]}ʿfro Ow%޽Wڟ" w'|"۵k'.CQrIx$k%b5 z ]>ܠAyCe˖%KU+?lו϶mdO)ɔyi¡OI{-/v~N5*q%irM>oW,ꪫuVݻWb_}:O5ji&eVV߿8p@w&?EERU0ZXMG1}`CW 6\_S:4twyG˃[ʃAIn&yS=WQO8f͚7|>(w}/r-{^jXvf͚x뮛={vQQ3<|?ާOXsϞ=?Fv2rnAyf_mUdܯ.ݲ?CY޻ϝ;wʔ) L4|WUdnoW^q+N%vNwD"WݻG%DCV\PP|Q-T.\KUA\_{5ycǎ?S=/(m?5HڵK=1c}'.*A%HJj:۷sΑn:J,n;wCNU͛725jH]zryn֭eoӧO]\sM@ҟey~~ɸ_]:`׭[W޵˛ &nRGMMMU خn:i5ٳG Zx3ƽ+TJdĿ!Zƍ|lժLLi8;vTO>^+_Oλrd4.vکe1dEyTbdD#A>+X|y.]87w}sFޒΝ;Wz4(gcwitmN8y#lM6}Οoyꩧԛf١sYm?c=漫v;ݿ,]Q=~mT={^{СC}~?l~u;t[lYBBBAA{T_VX!wgy;w'Zy{׽CV,MUf3SNIݻw;7u%%%!fƠ>9IQa<=b+Q-Zruש%=܇zȽ4:elյjroRkԨ!j֬Yrrr|;QxNOu;sÇWp2lذ[oF:ܯnR0Κ5kvIFX}( u+MwriJJ+7gcpr5rK_+wOk.8՛?ф_eܜ }ᇝ x7lPVJ^_m7t/G%DP)؇2" *1GV"VӑGLЕ877UV5kLII]v֭7nܨV9]?W]''''&&o>/:O2~RJ'L ߮Y&555))I3qD_+… ;vbɒ%-[IN-J,GU :r?N;gijժU2tM6Zo%xDխ[7燻Q+>ڊ ?yD#Y+H#lJ۷O>q>X+Hׅgǎ7o.VJJJ:m3l˖-lPTTwe˖IG>;)`# :tРAR?T(,,tZƵbר0ZXMG1}`yeep*+W>}9rD:%%EJzz~Ə_%[VVVNNY.koAج>E0ZXMG1}`=#Gܾ}+**2dɓT⊐&Y"e/F=9Çz#FӇ"#Y+H#oyf?l2*AYx qFoOS||v4nn70ZXMG1}`:> <eĤJɑkbbbllڵkMQ] Irrs4o\XBߴx$k%b5 zĂ}Ǣy{ᳵ*֭[-߇$Ý:uҷC֦M J+$55.jҤQ5F%HJj:v ѣ=_(KekLLL֭322P"KСC1*1GV"VӑG'x@oHN/^pB@l߾B>3 $5j\$\$nTbdD#A1ǎKOO?rޓP=\^/ T@vTiҤ 瞘u髫7*1GV"VӑG؂i+233'M__]UT>X ɅpaOZ*1GV"VӑGlد?ޙ`)yG>x*L}Ȗk!6m\XjJ 㑬t$6''gĈ/2Vyyyٳ{ @%Qk!W_}B>X+*1GV"VӑGl؃Μ9s̘1Q_d)tԩv#:-[u &O?0%)zo]x~VʋD$;=Pa<=ځDqqo7nڵkcǎw /2_GOHޱcǨQ?Xm"qH^7nKzB%HJj:krE3[i`߾}G\+ǥuO4O7Ç322Ə/1G%HJj:kr0:K,;4/◥ wءl+iŃ '0ZXMGa`@? 2D Ip۾}wX/?~*1GV"VӑGX;cd̟?>#|ܹsHI]:d2*1GV"VӑGX;cd<c.ѣGÇ~i=Qa<=ځ#`Ϟ=cBݵkzؾ{N),5~xI\\0ZXMGa`@0mڴ<1l!N:UO=loZn$_.TbdD#A0v ;vv=zz؞}ٯZ#C0ZXMGa`@0fMqxnzamannnQQ0GS<{8tW_}/={w Vcǎ{ C,UuS#fw)}ƍ_.TbdD#A0v 8e%޸qc9;gIDAT^+W\pTŽ`Ĵi&33yb /KO(&Nc}iUB+.]/3j(=I%w;"{ҥ\<@?ne]n_׿U_zgyF\0ZXMGa`@>|A ݲe_dZKa޷o03#GT''l۶-66fL磑=&!ŋ;u/u%NII߿;'/_e%2dk̙R:{LHJe]nkӑ J\V$k%b5 z9F@JaÆN; W%>tСC cyuVy0h y}tMYYYsŋ/?_~DwO())yo޽{Zzgggѣh߾}߾}9[?g+oҤlO:U.5k֜ K/#{zL*R2ja9 6!WK/tРA/E>;3w^JshֺukU?_N=vv1\u_f͚P˥S~lEV"VӑGX;c+n{ѢE@:DC7sիkժL XҷkԨ!Gl֬YrrrO dҟz;NƎ|u̘1Cv oF4{lY5l0S90p@٧tr귲ezf͒r]wչsgJ)! 4xBw7%z|[z<8x`F [CwqǓO>+=OZ~{G=V{'ʵ4w\\v׫WObjnVZ%[*6mi_d0Wg}*0!ζm۶ozLTB 6T{[͚5mӃxǁ=DjprrrbbbT灯3RSS111'Nt{;jպ!O#FQFz cSL_ &ȷK,mٲÀ͂-ws())dK9Cy Ϳ?[nr˰ag''灻EI%ynӿv:пկ<_mڴ=z+/9HkiӦ҄ ??X:Y `F!`k޼yuԑrt*qϏHJj:krЕXٷo'||V8TU(((P[;vؼys?>,]B*$EEERp곯bd[lӓ/ m۶'ukg;tPQRy]*?$Wl8l2)dz#1\uɷ}g}D%ZXMGa`@N%.gYr7n\\s5;[zz !=ZO=l^Tb[IRRR{9}]-T[t$cǎW#Gn߾]_Sټy?O:СCrGFQQѐ!C&O\S!ly؊dD#A0v 9sF%n???"Y+H# 1:)GƄ 86/*֭[+g}=^T[t$#FDTX]T'رC_\~ϼR/94ۄJ3c+=ځ##''5k"JpPgV$k%b5 z9F?^PP;$#FI)+ĉk֬y7?}25rnA5u ,n馬,_[zjժ?=zx6m4w)S8ke&M ??gϞ?\\\,nW^y뮻n̘1;0ZXMGa`@sرK$J'蔕x͚5u7n4/B\s5ݻwwڵkkOJܼys)3gΌUVWJiZZk.=;e%6l8묳٣k˦қڵ۴ig]XX>SRVyBe˖%$$hקT_UWX!\z,6xɃ>3ܹs`]~}͚58K;0ZXMGa`@_1+67|cǎKY+ٳSRRUÆ [oWUܹskԨ!Ol֬YrrrN~w)eSNcǎ-**~vn|w2{<3g} vYfh٬O>Tb#Y+H# ȱJH"/EPD' K"*yZVe˖8{;*RY/^ggg/_\vrFA߿޼yRYڵkKed@_mdY~b7'A.]|{-PTbdD#A0v *$e#++k̘1#וpU?L8X ̙3c9iꇙիC 7PRW^}9x`F^z%|iӦ۶m?*ݰaC]倕X)E9W_}֭pB_P>s*1GV"VӑGX;#up*)Sׯ/w„ %Kbcc[lYv[VVɉ۷W߻f͚Ԥ֭[L8Q{tZj]T*%%O?U?N;m֬YΖ+XjiӦ;w ~yթSM6GTb#Y+H# ^ _8_IIɖ-[ЊITbdD#A0v GxJmVVVqq"_}X)k+s3=+eER0ZXMGa`@MUNNNJJJ~֭[;/>يrt99}lH*#Y+H# ^캒.ڰaK/4###Mc_QX]v_~\\ܔ)S- gERY0ZXMGa`@}ו℄i_||gok֬bL+V0ZXMGa`@)"Qo߮oQV߇񅥷i#Y+H# M]믿}[8 _[q>n7i҄V\Pa<=ځ !|a0CADG_Pa<=ځ x$k%b5 z9Ӈ#Y+H# /H+#4*1GV"VӑGX;#VL)Qa<=ځ[1}x$k%b5 z9Rx֭aJ 㑬t$xMZL40A%HJj:kr"0Qa<=ځ`!LTbdD#A0v G h#Y+H# &D%HJj:kr"0Qa<=ځ嫾Q0Qa<=ځ"MxРAyyy0Qa<=ځ }ia!LTbdD#A0v GSB+6 ax$k%b5 z9ӊDC0ZXMGa`@/XVhF`!LTbdD#A0v ( هZqc!LTbdD#A0v H*,,*..W +emrr&r> x0Qa<=ځ#,'''%%_~֭םvVlr\9a!LTbdD#A0v [dI\\\lll׮]3224+!ZEեK9}ժU ax$k%b5 z9V H5MMMMKKkҤvW>bu[8))IxBB}J0&*1GV"VӑGX;cUQXƿQFR/buӸ}XQXn nݺSNW&D%HJj:kՔUM2>}ST5}Pa<=ܨQ#՗bbb4i2dȐ]v޽z 8xi,XҊD%HJj: ?ܽ{wmڊCa ћ5kF+#Y+H# ,PVYYYo ~+;dr&r> UJ 㑬t$pZqY0E%HJj: DFVLlB%HJj: DLVL,C%HJj: D+x$k%b5 z"݊À0ZXMGa`Sx֭aJTbdD#A0@V,> XJ 㑬t$*>VTbdD#A0@Uax$k%b5 z #Y+H# ,PU}0ZXMGa`lE%HJj:k.ϗ._0#Y+H# <8//OҊ lE%HJj:k"Շ'+P>VTbdD#A0qaVl(f`+*1GV"VӑGXaZ}0ZXMGa` +b0[Qa<=+b0[Qa<=V¬b}E0RV, g"磯}0ZXMGa`JNNNJJJ~֭[;/>يrt99}"؊J 㑬t$ X"...66k׮o؇X"ǒ#qrf`+*1GV"VӑGتAM6+ƾraſr9Q+Gw"}0ZXMGa`j|۶mn+~maW\>\}0ZXMGQlڴiz-#كSD}B#Y+HRԤG}tΝ߻w^s&ϕ=~doOgM6m֬x$k%b5 Js嗿;ڒrbՇeޖ.]zWQX b#Y+HF/U>|Ey[vQMc9V J 㑬t$Hm֬Yݷ*k+чݖ.]*G^1T:*1GV"Vӑ lRXX~+;L|x$k%b5 @%HJj:Bb0D *1GV"Vӑ SVLA%HJj:VLB%HJj:VLhC%HJj:T+޺u+} #Y+HHyAhC%HJj:1/ Qa< BTbdD#A#Y+HǼ(D%HJj:1/ Qa<KOO TD!*1GV"Vӑ`4&Њ#Y+H AJY[eļ(D%HJj:999)))[ndf+Lu(;D!*1GV"Vӑ`eYxq\\\lll׮]3224+!ZEեK9>з@0/ Qa<+󥚶h}&MƾraſIII҇7nܰaCp%b^@x$k%b5 V.ՊeTw~ÊjŲu[.СÅÕyQJ 㑬tS!M2>}SxF*F%HJ 4m4..Nժ&M 6l׮]]by׸qcm۶y|zTbdDC ȼMKK[rܭXaw͛׹sgՊSSSiQa<4FɌP~tZv111V #Y++SiNNNݷ*k+ч͛'Go֬`+*1GV"V0+++moaaYDG_0ZXr`7*1GV"V|Bb0*1GV"V܂b00ZXoax$k%b*݊C%HJ Tj[n #Y++P)l #Y++PYM@%HJ Tf!Pa<@TbdD@ea6#Y++PYM@%HJ|>_zz:eM@%HJ <8//OҊ 0ZXVM@%HJ}XG9f!Pa<F'>L+~&Bx$k%bBB+Z&Bx$k%b6}XG'f!Pa<z0++X_/>9ș+PyM@%HJ굜~[N_w2_}X qrr&:T*f!Pa<F?񏸸خ]fddi+cVBb9K(ǕXB@TbdDt'''w֭I&Mc_ߊmᤤ+BՠA˗;kf!Pa<Fj2QmV4.(((wVT+mڴ˜cч#@Tbdt!i[F} 'Pa<*"''YfM4qSRRR+w^M+{رcǣ>_ǧj(A%H(7Շ7n,(&&+\lܭXaك/\"ǒL+рJ ,P>H㥣Gѷ(o+Î"uX+GE%H(u{nٿh Qa<ʪ0+++"(Vfv9ș+"J ,a*G%HЭ> LD%H`> E%H$VLx$ DӇѨ0Z֭[hTbd*!MXf}J ,PU}tTbdx$ Tf0#Y00ULG%H\>/==]+`f0#YCI`:*1G ևZq}tTbdM هZY}tTbdDaaaVVVqq"_}X)k+s3W{>`:*1GU%'''%%_~֭םvVlr\9x$[bccv횑𦱯}X ъ(r.]q"LG%Hj[RM7o֤I\}XopRR4DpcQa])>!B%PQ999#4i$==}׮]߻w^s&ϕ=/IHHpjo͛Z *1 Q}8..NXllUW]|rgmqqq[%%%.\إKrf͚ъPATb'TV~tZvL+UJ  hLL{wSUpR..>0$AH[?-*-eY3VC-*jKCyMJtӦup="M1s}w{Ϲ^{rι{$Fa*_`*iWuE} =e y&I`s)))fͪ]w+~V+d%>?G$19rd||#"fT$F*I$Io"Hb}G#,$FX"ID;a$w$1I HbVZk{$1ƒrƷ$D#<\x1%%Ũb#el?C#l%&&*VI,G=sLPIQ^^*%,I,_njp8> ~ N233$[ Ip2c l*=Q\\!NΟ?/%D>X @3=| fUZ$FIHH$惵I>dG$qrJUU-GH;p=۽{__@!裏jkk/]AرC\|Hژ@#ի!~iGG)@Н;wtVVVW*5H imm;wnSS%@⯲H`~BKJJ$q]zuܹ0Bkkkkt$q-_ĉz!f޼y~$'O]V TWWoٲEFVaa!/pQPP_@D#ʕ+˗/׳U%%%---u D.8jjjBUcccYY~$"9жtR:"I@˖-Ӄ9Mj f5aG_{ݐeܐA NSE?I/f;6|ͷ~[ٳ'''gѩ2VGwߙիݎ9O۷c?ݲ-i/Ldxcmv^qf[v·~_@"ȟ$NII/`˲-]. WX /]F8I={pXvWGGLj#fϞpђ۷{g\őgd6^qfY|~.f$1 I@~&qqqqܹ?Ì3yVٕt:g͚ill$ycggz`AWWʕ+L/8pxW4hг>ٳ8RĴ7zLxlm7cV,G:tHN3}ʹsxeEEE6m/]DyyyYYm17o:ujNNɓ'770rmٲYkK{{{aaɓeW]]:*$qK,;sĉaþkuc=&k׮9svmZ߿_ԩS_b޹sL$-߫#g]Ç8ܺucJ _cI&=YsSS*$q#_Nӝ17nTH S ty=33S/b-fZorpkk+%%[㗓|C:ujrc:exsFV=&ɺn|c9;$~㺺qMM͐!C,_sNbgiD|gΜQ?} UH3U2ԅ +_?~qӵN۱cGLLr-[nEfONN7n\|||vv:rvIȼ2`nn4}n\7F2߈6'ʚӍ_}U$~ļyyy[oM6Mm3g,RVn^=2eI _o&..8x'M>|;8w:@FV=e 0^zIdz,x5Ϝ9^؜$1 I@76ϟ?o۶MK> <ػ$Fm<[dz%q[[b WcǏi&]lgg\VV4}nX&ymv#(G'Hzk3+O;V}+#,77liiidzB "rdKSS]wݥj} UH3cLe̖-[~JA=Sޝ&i`C'%%95k֨]Z{?IƑ&Nzju})j*Kihh4hȰad#GxmWen杝Ir%8x=#g裏N2E^U㹊Ȍeۮ\y/&L xC IOOc$%}_@ FzbѢE/_/V :AK466E]]ʕ+.\i ʑԩSNC \./I Z$1 J(EI R$1 J(EI RAJ`IENDB`onedrive-2.5.10/docs/puml/client_side_filtering_processing_order.puml000066400000000000000000000015211513710110600261640ustar00rootroot00000000000000@startuml |Decision Tree| :Start Client Side Filtering Evaluation; if (check_nosync?) then (true) :Skip item (no sync); else (false) if (skip_dotfiles?) then (true) :Skip file (dotfile); else (false) if (skip_symlinks?) then (true) :Skip item (symlink); else (false) if (skip_dir?) then (true) :Skip directory; else (false) if (skip_file?) then (true) :Skip file; else (false) if (in sync_list?) then (false) :Skip item (not in sync list); else (true) if (skip_size?) then (true) :Skip file (size too large); else (false) :File or Directory flagged\nto be synced; endif endif endif endif endif endif endif :End Client Side Filtering Evaluation; @enduml onedrive-2.5.10/docs/puml/client_side_filtering_rules.png000066400000000000000000002711071513710110600235670ustar00rootroot00000000000000PNG  IHDR 6k*tEXtcopyleftGenerated by https://plantuml.comvGiTXtplantumlxo0W֍B $DI.vزi!$@M&w~:n\X ]pB+-->\(zRrq C#Tz?@ ]O$xhaM6ºMp TPI rˌKd^U,:P6WQ&G['46:S w 0)p9Qt.b,)KMMl+)"R9@*m'Jh,IIǼ'=|3Ut3+t;Ab'^7ߐi>\_ al44',`]7<Լ]fW?ǘ)/zh9>QV8dNI}blztbecɕAmMc`shA}i;M{ෛ8ՙ:#晿o8L2 o agՊnq<ڊvZBsI8<&<\#d2~dž\O TG7397m^O@t;IDATx^{\eJK1eZ@<HMҲLukRRQD;4L< ).Su}+50s32/gX`or773 }}}}}}}}}7n|Ww̍&&ͤEC}Y׮]|E}~mƌ|hezAAo >誙O.(#_=G_.x >~6nO#?@ࡏѣGSȏx#G|;ci޼9_>eX>~GkgZG~}ZG~,}SU7}3  >a `r#E:uYB,G0}A,G0}A,G0}A,G0 /[ ? %ݔR&!G0hԨHovll,-sU#`>}DDDD>5*22rȑCH_~%e1**Il~Uݡ`h:n{NHHW02e +#3Ϥ+}9fq|t̀I`>}>>xg}}aaa.]0LKwfTG0. ޙSA!PΟ?lٲn"G_Pmɒ%N@k#h/##^;ww}TlÆ ,rrr-Z4y>ڵkh}-Q&Mzj>i=~={4sɱc En>6.]Dq,..륋۷/X&uGɓ?sKOO_v-Y* ݾnj3JJJ(/4k5+ݝ={v֬Yj?~޼y| B}M(Zti~17oo"@J|7M(JNN+e˗//ԩSHHHժUVXA3[B~Uߔ>VGP/^XvYfرcβ+_}>~7tSaa!7N:4[FFٳ֭Km۶=pF@ΝѵkWn}n49>ZHaaa}]renn4;\nɓ'iAՋ@A6l珠?Gk nN:OUNYFO8ZZAA-a%ǏڷooUխrʞ+?RGQZ5طo;7^t/T#CA+#忏t8eʔCt^^СC>ͥ#GѣGi:++pРA^(_?>Zx̙q}=|0[ӹd333_~eZ^zӦMGn}|ZAA-}ZAA-S_BA-} +7BA-}\+40i$3|¹s !4iJIIsG>}mPƎ[\\wK۷o_`Mꠏ'OR"?\o j#h˓&M{Ǐ߻w/Z@A{Tɹs"srrqɫVvA!PΟ?lٲn ԩS偍dɒSN5̂0f>٠`# f>٠`# f>٠`# f>p8eMׯ3g/St}; #? K>|7(?/ϲ&:^pXkG?ЊmȎ_&#f>΄}Ӧl/ EѼ!$z>.9~ h.:+o#[yO=Taa!Ri.a! z _/PƓ3g<zkڵ={E;pZjUPᮻJHH>r#zJQ3FrY ahz7KСCk׮z_4Ǐ`^zvr-S~}Wyyy0aB>}wsu֥ݞ}_ews(%f._̭)a_YM}4=J[o͜9aÆt:uTj}Y֭omHӤIKxxɓ?4??cZ*((UV)/B^z;gJ? [F74>=z4:URG.tm ={6Yz^zI5y8iwz!lK4qIG{l_wٲe7B1>zoM7vq6mDRS^w}4=JiW_}jWXA-{"WQ:x9ұcǮ]Eztt4}9%֭[ׯ?qD%+8tޝ.ߜN'\n7L Kn߾m֬:k֬=zl(JKW̋/H)t>}߿{ȷRn̘1ԩS+}=7֤شVmm!m@JJ3/#s}`*nL蹅.iٲ%L\hϑ ?/= hzҦTJ*-Y_j;v`7?裊+O?deeIk5kt).l۴iCtA-b_O_k~Uy`v&tl>e8(&?~.o ?<H[ .oOW4{Zx>My!tG-{}+v}`>~8]JF'{fӬMtn:qi]Y3<7|}BHyn4Yzj6l6mZ=腘3g/=++_##sy'{9i}vsLƍ 7 6p<lq\u{w>裞+0廾Bpwn{$/^kcw}d+f4 W> =l{W&N%{ Ν;of͒vk...kT3f|'ӲeKGEʕ+q&Lgqo;:]>6gϞKx}8?/VyΧ~*}X]_/[LZmرlX_S>zn},ݤmKs\հW>,*&ҙ2e eҥNJF»rlxx8{8Ot/|7|3yd?#B* 4hК5khztʎty= 4ȢEhanL蹅.{9ϮK ^_HW(ӧOXP 6m|5_Ud-Zo} .,hǏ-{CCC/_Et|S})9qMpcԨQtUR/ :czÇw֍$CK=7!:l0iTsy8_/b7 8<"66Nik4h@E/L]HHr?1c =gWy]5W>'99^z\(_h6q(aDzX:ͥh:%sWr1y}u > $m۶c.l5jDG{W3=_z҄}C,LGO &or%/>8hi_#:`?1c!թ#A7:į*(?V,G:aG0 t&f>΄}C0\ }ä4J7A7 p84i"%RUbccd ¾`=zԫW%q#GWКo#iEvIl~U >6lXnh#űs J {Wu ʯ¾`":mdqlٲ%HЇo#[n ;3aG0{Ѝo#BÆ xg$ޥ;3'aǠSPP|򔔔fH}|ơ]9s߃`¾A$++ksa~rrr-ZD^zk '\Be(=q}{L7N>=nܸ<2Zx_,aG|򫯾Z\\P.tDM$ }D9jkÆ k׮w4Xo裝ܹs ~w>٤I.]ܠg͚naGۺp¼y#4B}"h[˖-39Cvv͛"h[ӧOiΏ?o;,E7Ѷt޽{+T-C߿zNjS1\>Zom%''ǴիWkotyʕ2 k~9HC}Uu^WE{HHHV2225>Zom H5U֪U֯__IWA|/ySBIIѣ[lɯ>9aG1..]paС5k֬QƳ>[PP@3ԩ#e9y#bo^~/;v t f▲ ?*ݽCYYY7w'4MgUV+}Cm=)*UDݼ; 5w׮]–/y)U*WV@9ϥeT?9v >ږ>T:ݣRпo>8eeWZ ]ҽ6nx%2cY@9ϥ6^N $h[>~ᇵk^zuIIXx2៣GDnn.}1HyYzM?qD6mƏGo߾F+ANyw'Fc }-aomۖc|||ZZO>|8Փ5jh̙l?ϾM) "/ eo߾t{w EEEl>֨Qcl/R^iӦ^7=){F˗/Gom)#>Zomue}CmK߿N6 h[K,k"h[NZhXFz뭟~`)¾uD-O>`5¾vr]v7p\~w>ٯ:n8u?wfA7كBj`d.{ }TOlj'I71(,XO?w(q!v",֮]n@#D)));wٳ筷?q ~o >Wn޼7ߤVa&ugvumL7̂$aG0 t&f>΄}C,GЙo#: }@Ag¾`#L7 G&o#&---++K)#ͧM@ }8&MHbŊXZ FٳgzX"Yy睈#GhM7i&bƍ)4Aq WКo#QFDЦ>Rト~% }3Hu{T~% }i#cV C7׽{wǧ~̀n}Cx6mbxgt#ШQ##ޙ= >)wi I719fBC}|ơM;aǠC<^7l2"QN$Ҿ}CӬq4'$ބ}Cq,;$Ƅ}Cq,/$Ү}CqT%aGs"Z@"G7月vH }389r[ni֬Y-m6~%vN2MӶU^ԩ?M۷ooݺuӦM5j^z? v"h[Nqtz4hÆ aaa[l+hG?Ck֬. i¾A{4ł+ccc;f=lՋF`NڰaC6?))dأ⋴Τ$''MUV4O>|M6^*-z6ucKiz„  p~ܦTyʕ͛7nzB"A7ц i*ҥKibرO<٭[?M/\Dyyy+V<}4/M0(%l2{rlM#݋:EK,r^7,Xm۶k׮d=7s'|TXH }q>|?=xXn]8uupݻL*B F/]߽{iӦmݺU>(C?*Fロ)cʕ4 ֪UMK|m O|W4r;Jsl 9>teZw}wN}[oP~C]s̡yc~~>.izϞ=5kdkz#Mlŋ骜$]G6 999ժUnAvS#hZ¾TH. 6mx}&ѕ/MO>fvڕnRb ܹ&Ο?wg4T?s 4=rH?rJٽccȋ/seggә 0i4M?n) }41aGry{v!-ɓ'zhZTyQvL3[l'H8o^{-448qD)t]ܠAi}1˗/4=wN:QѼnN? $)S]裉 >ڙSHpgVW8G }9щSGhb¾4:P8G } N$Rrх>ocp"&.Ą}C,;qt&&\HdY }41aǠD"$.Ą}Cgl0?Pх>o#];be¾`v] >Yص#v}^6 f!ș3gjԨ1ym֯_۶ml7|ӪUݻ_pAZG }H_x4rvڱTƏ?&&M3HhZ¾`\+W̦O:Uvm(..XoFӇ73Ѵ}C,<˅>ք}C,}t?HLLo#i…M6DRG(u W,Ѵ}CHׯ_Ŗ-[QG(ʄ~=+CMK7 6tP*HΝwjj*%X K6i60i >ڵkسgO;3à%[p!c۶m >o#KC;3 hZ¾` ]3à%>O~)06aԩSbe֬Y7oz*}4-aG"777)):{n^6l ;wrѴ}C1">*sܹӧ924>o#… cƌ9~8[[n]@>o#8nܸA`ǎ-FG }e59g߾}~hZ¾3g;voF0aµk]hZ¾2Ο?EٵkիhZ¾JJJ w2e wTCMK71Otqw"X-Zٳ>R}4-a`駟C&tR~>oc#vAMK71ؙSLQF*U.\/s:[B~ c } v)))|!J)$$E%!yΞ=K۷_pH;Gꠏ%p;y2eUqq1?XGT} ¾NyIFFFj4]:f͚tϲ߽M&ݑT4ܹs#""vnΙ3VZaaa[la3YYYt͙֭={vݺuif۶m8 7iZ:c 6v>a`t/w҅4hPϝ;w޽{=ZG6lXaa!3fLII ۾}{;=\nɓ'{%_!77oi̙3Vv<}C>@oV: ;t}RVb#GunVV'NHӧӪU;v8e+vmͣJN?!ο;MTR~`o+ӿu۷OZo//͛izƍ.]LzĤ獷=1x>2tmҤI41p!CU-M=z4==& }٢":[xqaaL}GhAq҃YQ=zz{yN?!e˖O>|xڵoFI?ge,]fff;5jԠS9z}$/rHHoڴi܀j߾=Vhժg}k;}Aoc"gocC9c } vo_F;Gꠏ%6oޜG"X}+V:i >;|'{WXX#uG }/Ϝ9ç"\t T}CURR"|'Q }4-aGaݺu|0 AO:/Z@MK7{m۶Fp(..8q˗Ѵ}COx9RQ^\` aG(eϞ=&L+bS|ɔ)S\Ҳ>|Z*c >ڵkVJLLsɜ(w͛7_2I&9)|Z`(aG.Yج.4,/ޙ1!aG0 1;;;66wfLH7~}tߥwfI7–}LMMwfI7–}t8Ό9 >Yز.>/ }kGl@7®aG0 vĮ}C,>/ }kGl@7®aG0L|N hZ¾` Ѵ}C0qR",^8666s>o#dd6m9r$e%Fںu+QFH8鯁%Klj"%[ }4-aG0ĉ aaaO>hZ¾`0!1>>>::60i >z׿N0i >nJܹޙaG }Shܸ1uf0i >)wil >o#wNNN~GiCi)kBMK7s݋_`i >~233ҥK&M6m:hР{W^^$hZ¾ׯW=GAe@0aE;i >NvK7x>7ifɲ{4|U%:INN~woڵk'ЦM AMK7t#8p@IX<0j(i}/ ݴѴ}CA':u$aÆ "֢E >W~BG }/M>.t_M AMK7t?#o#c>}"P¾댌 ?w_BB޿ }p?H066OcTT||O<(_? }x̵kƍwlْ]vC G#~M7"zѝ:u>vܙנaG~o# C7&!ϟ= >a_/>hZ¾>o#@`%Xi >hZ¾>o#@`%Xi >hZ¾>o#@`%Xi >hZ¾>o#@`%Xi >hZ¾>o#@`%Xi >hZ¾`u`¾`L7} >Y3aG0 t&f>΄}C,GЙo#: }or}hN7 %ݔR&@ >aGƍDJ}\xqll,-sU }#=,ӦM9#GWКo#i֭FQ"iͯ 5aG0]bS)P{ J 8q"e1,,'LMMWaG0wf@¾`^z>;3aG0֭[CCC;w;3aG0ƍS I7LKwf@O¾***4itCG_)S8N~M >;+rY6lW_}ՉDaǠf8<}C $}C }Ci{¾AqT7a8ic¾AD%KnݺYf=zسgϑ#GWίʻ6mڴQFH } 8vs۶m6lP8w |׬YC%eH[ } 87ЪUH$~xbbbzEٳ'M4Icaaa_z%! .(=-ZMHH8v9uԆ Nr6l[tڵk<6\yMH }?%q}4Mt%99QK.c>4WbE@w}k6b?r&배0:_f7@"mF7(.rl￯Uӝ *4!mV\\,{HH-^X&Q ݻ֭K.]޽iӶn2tٳgㆇ7pB:5 yN6g8G>DZ]O:х>jD718mȜ:s .˴`8G>8挣 }Ԉoc0r" 6.Q#¾AʉDe8G>/'B5"ԜHх>jD719HKх>jD7~OԩSgy~GaG0 a_iB7ǼrW }1&}C,o1b6wO4}AhѢiӦ}9{,['%%q͛7t_iB5!f!?拋+WtRRѣ={nܸMQ"ipTX͗&l }Ԅo#w>w_#"";r^B{ohF_~}k֬YYYYA }Ԅo#w?^y⭷?Wc(?~ݟ{9~ }YxÇOIIf۾r }Ν.]㏲U&}C01-9Q¾`4ȏyOKA5!q8111R"c~֭U4Q¾`=z4hЀ%#GWQ¾`e˖"%ycxxxXXXvv6*Ƞ }իWشiS:){oBB>jB7 6|p:[lYǭO>JP aG0ؙ3gXIÆ 4iwfGM>:u%GM>-[ؾ}{3 aG0z1wfB5!ޥ;3  }Wnڴ7ޘ9sfektO2_`%O aG s8tXN>=##i}6lgYݻg͚t  aGZfʹiΞ=`{N'~&GM>Z׮]`&ǏWWGM>Zl۶?| &LD }]v-Z?(t6 aG+_ƍ`nǎ{7RQ¾Vb :?0\T}Ԅoeo'O_;\xŋǦMySANqq1?|>)}4aG{׿d9sjժF'l>]:f͚t yyyO<ͤPʫ4[׫W氛$+++$$H茵[n4ɓS = v>Z>N?ͧC3m߾=?hР;w{=z4̙3![R(1 6nꡇ0`@~~~nnnV&L֡6lXaaT74m-&=J]]tR+_z>S9G_;l}C-S9}CF72zR*UrcJ+W.]ҽh]wEW"Fv۹u|񺩾$ViPl߹sgS_ݩlXOk>oeGv$YϿKbtV%1l̻{ŊE4wG G_J.^nex5(UTa:g*翏v>ZׯYoν-Ձ 8pȐ![uGMOOg裏ґ_\\}vv/6W_}UvիW5%\zMSjM6Ǐ\+_u@]fMaaKzzI󊋋L{>oeH6o.9"Rxb_u >zGk6jh̙l>?8@gafFԪU\b}Zw /y#?}-Tҩ_ifHHHV>v޼yP^|r>ځ~f#hJͲ^~Ƅ}C-zk4 >Z~Ѕ ;&&4 cB¾hi&$hօnN¾Vϟ(|9 >Z >Њ%h1kk_o{oL8~|%T }Ԅo%͟?%0Ǐәc B5"hUk֬6m~Kw7Z>jB7̙3O`ݻwϚ5+))ĉ)Q¾wM6 2gY|z >S Q¾`8þ҄o#y尯4!fc^9+M>YWJ¾`8þ҄o#y尯4!fc^9+M>a߽f= }äeeeI7<ͧMࠏ }8)1g?WGM>zѠAHv̯]6""bȑ >jB7"%yc[vv6*Ƞ }կ_?::IY%GM>>C:%GM>)ԯ_y3 aG0. ޙQ}Ԅo#t:LJM4y2L}Ԅo#J1vX>3vÆ 'KOiD }?8 HQ¾;gƑ\"GM>BǑV"GM>;'x>jB719ҬHQ¾ˉ8zcD } RNK駟nԨQ~*9rf͚\7'}Ԅoc0rZ*'O )))㧏N'}Ԅocq%իꫭZLOOg322Zhp16sԩ 6Ir6l[tڵkСC={O4$Νnf͚рNodK@;vSі-[5ON$ a,Kʕ+izɒ%[f)OK.uG{'h"//bŊOf+ĩS^{mĈ~l߾3 F?GDN'}ԄocpÇ*Sre6תU&(|BAӻw[.M\t)>>{ӦMۺu+СCgϞ]\\7zmjl>G?]GBN/L\ >g=5RNw"9sЕiNVV]//[g@}ɩZ*[ki6L?ocq%^+t_䦥ĸq|IhZ-ׯϦtb v׀;vT~}=tQQQ*UKӓ&MG}8oc0r۩S'xIrѶm:alٲ'|\p!S66iGM4i֬Ybb")-?Opv&N迏۷ooذaVFK\ >)(Z:tԩS8ocr8999tG.\XҢnGADZqtiQ7#KA`D"o'.-~p)HtK\ >H=ҢnGg&R8o#|?.-~p)8 kBw_#"";rQ Ϳ~}׫WYfeee1'uS? }?իWS:O[gj %r޽s=/6uS? }---22~ 2$66}]Pw!..fif˖-aJϴԏ.}C,<Çp3m󙖕o#&??_~S~̟;wNt?V uS? }f1OitfMR7 p8$QJtܹ?WrϹc)($Fׯ_TTK$;)#GWr1hϵJ7oAN<ű~aaa6R>v@ >~޽{7k֌yc >~={)G]zP¾`q8+K%oX 7b%c<СC0\-<(aG0]9e˖pX>v@ >ؕ#;!Q s }S`WArvP¾t͛76 ^y:M/0W׭[>1εJ7n3gʺ|:6l2+ڱ={vrr'@DM]AvP¾vӧ;w?!0.\H!y澨#{̨'h ,>S+#*bp)ht}vN8Qa"MR7ٳh"}Q",RɅ\ >Z޵kV0Bnn[oſBMR7>]vG*d…TIE*M}ԏ.}C뉉1 )..>}::nGv)|lfϞGMR7ږ,Y`/\ >Z]G'|7JF}ԏ.}C-99?:g޽*U˗GK }6}0UP;5})h>W%>Z=X\\ϺLO8_*r%>Z[9xGyZj5k1bԅ=zTRqsZٳg׭[7$$m۶pxZVZaaa[lak8qW^l4hs΍ڵ+͹pСCijԨL }VqKKK\n_#/[Mth ¾V>>C ϧ jj„ l>O~!>>޳hdݺuעAQ1cƔп۷gkң 8FPvs4vaÆИ?w{=zhY=n;}l%>Z[YxٛoСCG}%?rzjϢرΧ7siȨZhf+Zs4vG'Ih+V6`֭l5%}=r}s|_h ¾V>E1Kk׮o|Ϣ~zZխrNMQ2m7wq#k@E쾾6?}C}N#]Yh7nt}axIj w{m݅nҿU~o>io/^Hӛ7o>u|_h ¾֦2ww۴i#^z=ӴuK.e9z(}1dee43Oѣfңts4vV 2$//~t]#zP":o]x1m<7鵏zcC-A7ڄ}4:`ۗBpw cǺwҤI:TRz߽˴BzM'yػl4?_PL^vmoԨ̙3j633wީQFDDDJJp7)p6xa~ hmXn+WlР?C-A74ݻwٳ&>|5_r h ¾֦alIWwqǐ!C袒_ߧ aGk[tw}`͛7/\ >Zۅ ͛`(aoM4ҥK1 9wJS_7#KAG\z5ARRRJJJ4uS? }ɓ'^c_~ڵA}ԏ.}C퀎W_}Uۿ`ecǎ 7~p)hND,( \ݸJ }˗/O4 ߋYvv ˿2iiiYYYMyh>-n*>jB7nvI;w.~.2rrr-Zjժk׮/Ci#::ZJTXZʠ }'dn-y~);//ѣ~,n˗/9r$&}C,}̯Y ; chhhxx8]*`}aG0 QQQ 4g־}~%el!fac.96nܸ[~RSS҇o#fqkr3~_C7"yf}0`@ޙaa_@7"y. رcޙaa_@7"H(z~g }h¾`Ar̳wi $*Є}C,/((gZwf W&f<Ǽg~p)f<Ǽg~p)f<Ǽg~p)f<Ǽg~p)f<Ǽg~p)f<Ǽg~p)f<Ǽg~p)SYB}ԏ.}C0*Uo#FOe uS? }#i,VnG`$m?*MR7 ᧲X\ >4TP_7#KAG0b~p)SYB}ԏ.}CxZ}*Uo#&b~p)ɧX\ >a_{G}CiͧB}ԏ.}Cq;w/\ci[DwuS? }]v-))[n[lRZ֤enG+ݰaÞ{+W<:&oDo#)y{Gkt/~o#'33./_,m۶7o<**UV/޽{+t/;}/R}ԏ.}CA'ׯ_۷{tn7j(J&&&u։sL6ho#d?|%O^F￟)_K#X\ >NyfZZ:v(ЦMKS_7#KAG#N7m԰aC>74mڴsx#KAGЉ?:4M45~\ >N̋/#c.]:vߟOR7"zذamڴ8vak!#KAG~K\ >]ZMR7nG` ϟԏ.}C0/J\ >M}ԏ.}CnGzS_7#KAGo#MR7@o~p)7uS? }Л\ >M}ԏ.}CnGzS_7#KAGo#MR7@o~p)7uS? }Л\ >M}ԏ.}CnGzS_7#KAGo#MR7̢N0|\ >YWJ¾`8þ҄o#y尯4!fc^9+M>YWJ¾`8þ҄o#y尯4!ϗyn)ȡ }äeeeI7<ͧMࠏ }8h)1KK\JC5!FѣGY"1|򈈈#G aG0Қ5kPgg4Aq WQ¾` 1־}~%( }Ԅo#.hoܸq~+Ai&}C`tMKxgF}Ԅo#.Y wf@5!cҐ;%GM>)DEE1wfB5!ޥ;3  }S8vyyy}Ԅo#|0n8/&}C`,gϞ2;wT}Ԅo#IGT}Ԅo#3HB&}C  }#D>jB7$LYp8҂GM>ǑQ;v 4(66V 6>jB7S82~I''OnҤIhhh $.Q#¾őL$0;,,JqO]F}CAjȰDI'u:ulqt }=3|hٲeP}Ԃo#ҥK*/\0~x:|w[lY~}ƍ#hB7t&,Nw=xȈ^H$o#|pPs }]5~(G?X"srrGГo#%N:#I7st&f>΄}C,GЙo#: }@Ag¾`#L7} >a?D M7 &s>|Z*aG0ሎ)1===66*@>z!}n #""Fɯ 5aG0Қ5k(,&(Z }EEEh>o>!!_ }C`t)Melܸq~+o#YcccZ̀>}CxtA8`3 }wiHǎ F7L!**wf@O¾` ]3z }/JJJgh__HSN'3aGQϤdž Yvܹq9`%G L7lqdȠ%82Hdp }s$2 >$2>;Q *¾AlҾ}Mҿ|G f͚hL"|5jԯ_?<7Ch[BCo@"ocNj/Rg7Ϝ9sAg>ɓ!!!VP(###''&֬Y/A"ocGr+RR K/:ta^|Ÿ8:S/ٱclrԨQR\-ZMHH8vӧ-ҬY3ZN]tRR>==(٫W/qNڰaC6f+W6o\ }C0ѣVڭ[7jƍL&g.]9lZ-[Fcǎ8pl?P.]t (|'uZ>?f .DD^^͗&배m۶~ '<:b?^YBd @!B"*\"={Y#Ѱx%*APpA8G.@@d I $AaJNTtg#TOOf&L8x W>|?|BBBN*9DwK2Jg)h:'NP`~2Y-NTYZj _pGIII3gܼy3N/ M6]z5BϾx͆G71!whY?*H HN1թSgԨQ>hii)GvniXF gijqt>bϧPTT4eɖG~" LϞ=bcǎ}KJJ΢hʢ4ݙ;eZx\Ҽ8*DH]vIC7ވܴiS%I I?/I*8p`dd$ݮnz?TYL}|f˖--[ԩ|Fr~EqqqB??~'_]t6)cǎ_|H6~4 ǠƳ"tb9:G ~ vLTd/MB7H_MB7\#9:G ~̊/9:G ~7 NEI?J"Q$~O(OMB79}BsϪbؗ' v0V v0V v0V v0V rϙ3gܸq,]\\ܨQ˗/Sd۷o۶ XvQ>Օ TGS ~vA9KKK7n|%J~_H(//^zYY˗ h B.ps>%%eѢEGxx#G(GjժuA;'_QQѫWs( TGS ~v?#/;;rhXF+W(1H{}wF8GS ~vA=֬Y#7--lHW߿t~iV`Νr@E=V ~]P?S9ȑ#cbb1 5ev-6626nxE=V ~]P .8\G39Zo"/GS ~>nsi 8GS ~>"9cʧ7 | mH6m1~x(P?o#%ofHHHll,)>x&Nxb h B8phڴ)dFh BtؑdF )?o2?vOf?o#=) [?+GS ~= \zuÆ ͛;w2qD AXf -;?ocR^^N:عsd֭[gݻw꯿ʏmMA71YzY x7?n%ו~{/}\qɓ'sfGS ~ .hM79{/h7E D|wK,D"Lbm~?n/̛7S?ocjժ]vh&33ѣ~4~=k~'NG68h BAetw޵k GS ~ Ɛ@?M ̚5ؽ{wj\=[YݺuYzիUVQQQR7o6>=r;wdv/^ Ǡ@7nܘH!tyɒ%FTBAAܳg2B?*M]r H?B?~WwuҥKKJJ˿맞zʠJ$=2M]r H?B?v72J,XРAPZ`|5jT駟>{,?u԰a(Wo֬M+SfM4ZGY_iWTTe??~SdܸqI`DnSKNc !x#ycǸ|R O0vڕ>|Ȑ!gΜ),,߿jj*Ӥ*_޲H-[駟n.1`{D٭[7ُ?tP?zhNN*UneZD<?BAg?߿[nsoɓ޾}{ڵ%皫zbe6o!9[gEh鱱GQRP&8Y槟~8?Hɍi9D<?BAg?**dJހnoN߷oZT2 rjmqpڵuCwH>r݉x~ $~~?[\K?֥TZ? :kaǎ5Zrr2?3GZW={NT儻 H?B?~WM6qϯe?=ȑ#O:EÇ]<&㔖nٲb-| 6f%eRӿؽ{w//7eٳ%'1 ~ ~$6lлwoͤUҥKBZ={6'-+<݉x~ $~-~Z Ǡm .] Ǡ~4|?E!,_\l 6 GS ~ y~GS ~ Mv~a)? ;wTh'##V?oc> nݺիW;GS ~ ".^8i$=`@;4 /^̏OMA718y$)HG_?ocqҥ_~E }Ï MA71H!K.\_d+B/!׮] Ԝ={vŊ|P|ᇧOGf v0V v0V v0V v0V v0V v0V v0V |Fqqr^~4G3rrrM圧|+o~(//)m۶Q>YT~4GK ~1~x(P?o#%ovHHH۶mI4Iᡡ|Q~4GK]֣GXrlݺuBB_T~4Gcx tIRRݾۆ |L~~>3#ѴiӨ(<?o#=:ub~ݻ7h~4G{~mǸ8<h B44dF#)?[ɌFGS ~#IҌ3ɓiΧ;C]} ,GS ~^B4iRAA^n:>+K1) ?o#l9K+~4Grd"GS ~AV$h B@ȑMA7hE792R)?MH)GF)~4G Fg92L)?H[.R~}>tӧ˛O>dV|ݻK^Q ,E ]?CG I" #En۶mt#9?ӢE8?ODGGA/ڳ|a݌?MHisl%Gv3ph""&Gv3pht "m(Gv3ph!")Gv3pht#"m+Gv3phA",Gv3phD"m.Gv3phIМ糼dg9:̰CG`g?S-.Ϝ7~[ ~]9oL?%%%## g-.(3gh=o)f7b&7繽qo84 ~>#++Kq圧|+of7(Ybbbh͢v ڵv"|IrrrDDS$3~xhv]?_i&ZIN cHHHӦMsss~ ڵv"| MPI>}B~tZJ ~>fʔ)4ȈÆ [x1_(Ώ֮R~)++x}EGGݢw~tZJ ~_~l92cG{Αni3cG` =c-zGG𭵫G` ؝c-c8++u'iii4_y~`:uwm#Uoc3mڴ O_n:>/Yg]v 1ǠZkW)Bŋ_~l~*nrN{nzǠʨ<1ocpĉI&?}%*n0G-Ocii)?klݺ㯍+x oc @X9ځjQan[ ~;w=GQVV_CGgڴi.\)gΜav3ph;>xR)0n7-G}ws xrss7l_*f7ѿy |o6o$22R?tVM֭[i=%Pɓ')}ڵkK7Z;x +駟[cɞlhիW;y戈VLv\Gڏʺu3_ #]vq.F#z-im'~)ZZ~7;3+X\;.(qנzcGF#촯ΚZ[~ (0z­?3uk\ߨ m_EٳG.?P4PzÆ p.l}w ?7ZxVAyyywL '''?T<6Ç)rrrΝ;7|p>w3(ݻwWv7jȑ싈Xk׮OLϟuҥKCUwtGe\]Kn:/ ~o~ kРA$kر$Vȑ#III5klݺ5MZjUn:/h̙֬3zR= gyx~!4lؐn[j5{l3]-ر߮W^xxxFFܦK?JWXAݾcGƳfժU-ZsfG@7ѿ1яyyy}%<ءC/qE/ ~oL7FDDw9rHKm)Gfٲe>e޽k׮/v3phߜ8qbɒ%>7޸|2CG"--wkuqo84 ~{VZk.~yQ"UƸ݌?=׮]? | n+¸݌?}ޅ9Ν*Ͽ0n7-mٲ*H/bqq1aph B{キf~₪_eeețJQ>75?oc@z^{̙3 UCii)܅?x]^^ަMYh~ޛE?ocAٳi6^x h`3Yf⑿HNNnѢS$E5?oc`r 6s2O9g6k֬!pZfmۖIgJr j~4G`{WTTjcǎt$GreBB_N=V!BQF9ٳ^x1_H?V Bcǎ13lݺOf?V B0{w_~=aXYo# 0333tݓF0? s=3 #~]9Ϟxd$cU?$s= #Hƪ ~v!x35phBygj7؅x o# 3獟CG`g?S-.Ϝ7~[ ~]9oL?a f7 _0n7-g,qo84 ~_ex o#%*`n[ ~/1WYv3ph|/CGcLU݌?c֯ f7~_0n7-,qo84 ~_ex o#l˛5k?ނ(M9O{ qo84 ~aǎ:YpnJ)M9lf7X͵kqF~Ke$9f7X n̘1GtOT>in[ ~zwTS-~?cn[ ~uرn/^ܽ{wJJJ\\\dddnRSS)GYS@z/Ҹ݌?4h=GZ7M6 zݽ{4jQ݀ymn[ ~EoSoժR|,Luebn[ ~E̚5ߖ7krd+o. o5f7XC=o>y3))be|^.Ouyӯ1n7-"wI¨(ވ#US]_cn[ ~Ei7yhD.Ou~qo84 ~=ҥ ֏0ph,{gϞ+3h -"}ow}x~-"ԟM^7HHH=`7XyGZl4ctttΝ31ph_oڴ{H:uzgB?K8̰CG`)Gv3phnn[ ~oP eg4b7 #22 `71n7-Xqo84 ~jx o'oIDAT#Vcn[ ~v3phCGƸ݌?`5f71n7-Xqo84 ~jx o#Vcn[ ~v3phCGƸ݌?`5f71n7-Xqo84 ~jx o#Vcn[ ~v3phB`?yo84 ~vs^;+S ~vs^;+S ~vs^;+S ~vs^;+S ~vs^;+S ~vs^;+S ~vs^;+S ~>Xyn/P?o#YYY999rS>7h BgiFV<)bbbh͢2)?_ܢE H67o1~x(P?o#%!!!m۶%EҜ'9E~/bǎccciΓɕ |9P~5j={6qBw܋/ |̱cǘ ZKnOf |Ͻد_?<h Bdff2?vOf?o#=) y<h B4x2~-hΟ:u\?o#=.\GM2E$~7P?o#1LdƢ"(R )?_#h BgEj~4GɑEz~4G<ˑEz~4G`5ZЫ򬬬`a~h#C"(!MA7X^92<(-رcHHH̓D$~Ex'GZ`|#""Ɍ߱ GS ~V`D SNc-8iٲe?o# &رč%[n'3~{'32~d~ҥ  ~=!? G` S<V"BӧSN%?Θ1a t D7\0i$P[Ϻu,ӗ C7B> B~ rl?5X(2 ~ ^$Pd H{ A71 GPd0 tH"9nܸk׮mڴi۶-)СCuU;zhݕ9UχVwU͖-[:wL'تUk@ocp!XRRR~}lI-ŶoߞO?<::}(2 ~ "$'OV^9wܐ!C{gE.1cƌ-[RZ;3f /4lذ3ydjy洬׿E鈈q\NSNT]-//: wlժUڵ7@oc i##55v}yׯ_2tȞf͒sXd唞8qc=h:N"R]I'N4jԨ6_zqI7Yb5k~'8V@GBeH^eW`m۶~7lPd",кwÇJ/BHHԩS%tHXZt)+هh St .#))i̙7ofF?~iiiӦM{N)?תUt XU(++C^mz}? 4'Le$"9SNڣ>JRc9(9 E $$$1rrrrn։-VFnׯϥ]Q]EUU4: G~^"iPdqqqvvJϞ=&"ˌ;,))QJ$++ҴJ6l}oJnڴy,Mt{rJRvʴZ.tϞ x$R$Yckݺ~RSS})% ݭw%&& t/`d Oɍi]VQwNAb@~ !tA3fsm([QQ@~ L@2U$(_?Ӑ@D"o9#0 ܊T dW^yuAgY8 0DW ?+p( ~vAWd]Q$삮%H7edϙ3gܸq,]\\ܨQ˗/Sd۷o۶ XvQ>Օed6nҥKNOOOMMe[~=Kgee")Q^^^z2/'@?씔EGq8?TZ7h+**zꕜ>~S@b&^?!++KqedS>7VZɊ#wߍ7  gd=iҤE[R@GFF")Ar iڴinn._ nٲe' |!?"--O.^/6GP29&&&rOf 0`1cd~֭[2>>OfG4x2 ?=`K.}fG48zVVٳg6~^￯\_^dI~~d3֭[g~i…4b~ްk׮ɓ'Φ-0`gG{֌z8uԔ)S/?N@-oSZZJx"?6@tc_x OΏ2 #JYY٫Oq`?b-#JFFӧ q…4~=&\{9~ā &۷3O?#l41g~ZGhbݻUA޽{֭ӧOW^Z*23ʃq`G ~Nbƍ$2TΝ,YjPPP@%0XLq`G -~ꫯ뮥KO=^S4XL~'#Є?v72),XРAPZ`|5jTv駟>{,?u԰a(Wo֬M+SfM 0ZGY7o  ;g{۰aðM6щSRZRtKp'(3hOG ktq;(„ eeek׮,C 9sLaaaSSSY 'O.--e(Բe˟~FvѣGo&8jLJÇ.ے_n~-o)Sw'NdOru,'(3hOG Osoɓ޾}{ڵ%zbe6o!9@[gEf鱱GQRP&8H?;[oEO>$::Z[(K,]NV~'#ЄЏ$Ǐ΢m&9eJހswR}ԒZyw/\P;Kͧ~ڻwo:P=H,|{IC+*c"3hOG %l9ĥ>؃f4SB;Z?8p@ZرcGFV\ܥ,L$===<vZ?x~YZZeV6l0;;q*%t#矟;w… oFf]իt[(3hOG -~$6lnc㎸Kԇ\;dVϟ1}QjVv#F`Ș 4Xz5dTZvڵv5kԩ_yubwaz:Ი=&48x IS}o1=&B's-_hOG~"nӦÉ藺'#Ě5ki ???M\|96/((Ghe̙ϟ'70̌3~Z9z~rc~X{?-&y饗]4#+W&M$0ȲeÏ2 #Gqq)SHDxv~!E*_~g<3336~@7s]x1h녖_~%?~{~W_}u{tŋyIa|r^^̛7J`KG`k֬g3(,_aÆWl ] KtEo# ""G`tE6.EB.l\+~]DW ?+p( ~vAWd]Q$|Fqqrln/ZA#o*#i FG jJV ./A0ppH/BDDh~tdd$)$ǐMEh&NxڀA@+032zŋrfrLJJ$A1p@gyOfGhPRd 0OfAG4x2 ?sܹiӦ24l0iW$@?_Br׿UPPa֭[g9qD G3NUT7Pd?rd@AȀ"XJ`ȑE<#@# lG`xСuU|Gvޝ}"X9JMdE.#r%%%K Gt2j ?H)]t%aǎ e1w{333'.eL貊2355/..fe:]~[$4Ϙ1ϵ /e:]~'$Oݻ,rtNFW-G @2[>r#tNFW-G F EB.%4!"!GCdt ~ZV?t2j ?H~HOe:]~>$R$2ZB@7yfCg}e:]~] .t ~vAWdǻxUK7] AW-G`=gΜqƱtqqqF._L钒Ço߾m۶,((`e222ڵkGTWn/L'o# .--mܸK(~z"ERzeee,_NFdt ~v씔EGq8WV 9^z%''ϝ;7''G_tNFW-G`I$>C5j\rEYAܻwロ4zh~7CtNFW-G`ԑf9o߾iiidCJ_zuӧO;wEZUK7udgeeEDDrGӾ}{K7ԔYXXح[Xʌ۸q&ߢ-%:SRR222L$A j ?3gz0>>~SA.%삮w񠫖o# "<ŃZB.lxj ?+A]<%b ƻxUK7GfZB<PEx7u ~YMn|ke:]~K_KWX.%x[abbbdEm6ʧ7Bdt ~N###"҉GDD?/ ]UK7:- i۶-)Ɨ:<<<44477/ ]UK7:' }G/re:]~⩧ׯ_'ŋBe:]~̌DXXXTTCtNFW-Ǜtܙ111Of-L'oM-Z'3]UK7&) /stNFW-J4x2e:]~/\0}9vb4B$>NjƌcАF2ZB̏$ &H6cݺu|)..2eA/C3i$CCJ+2ZBƏm 0EJcUe:]~!GEJce:]~ڏ@hH]UK7K9ǯ)A׊e:]~ΏY"%"uNFW-,#h.>W$u ++KKSE2ZBYGȱ*"srrڴiyyyHGE2ZBUqٲe;w{w%}5k;l:=}v69`+cEFDD4mڔ.bdd$DrTc=X.iR.%[Qp|o>&&&!!ȑ#ҍȠ ܩS'RyŻ[i홞 ͛7lْ& /r͘1 R f͚E~nn.P1cX_~aÆ#up{^;wnȐ!=܁XRa:4m*YjUv9."8ѣkNQRMxُ ;vGaÛmݴ)=uԡCr-se,lb7\ k|Nͩ_ 9GNlg0~H]UK*#̉'n6> ʹ>'N6l t㖜es@nݺuVV%^z%uLԭ^ɓ'&KțTwޒ{5*,,7]]^+JǓh4{1MxZM9P~P^5)Q}>}|g,Id{K.WL&eewmrC}D2lX+V4]qO(MCDf~TGN CNUo XPK*ciiow~|9Hkaaa32nvVV 4`@WV1Mk[Z$%%͜9V,? F^U75j\wWWFzE\t)+$p4j# '' Bg3m۶3gC ͻロ%ԗZV=7u"}'i[)%uذƩlVZ:=GN"Y-%cA-ߪЏm;vpi]я3%wt>bcw*4i >Mwu|{Wuԡ 裏ҀH'4|h-6#MNfFI|QӧOרQ ۬Y3Iue!RaQ&%%%tJݐWE6.E,Ieʴ.R9`|"GNgXPK跪C".\x"ܺu%5HX9hxdo#HηYg Gri\Z0{~-T$9.ZTWV"4Vl!FsNώ=Jf@nA}Q؍Ksaq9*,SN:%cA-ߪ܏ \d 5oݒ3:Hj瞣0e2cv+M/;v/$[E4)_TNLZ+ޫUjj߿o>P? HkСK$"i@zM#k9~O^}(c]>?YvƻXыo, j f+?iVh]w^~6i]@EEE>3Ώ>wH~HTa ѡY2:?:,Wd@rdH~H?rtt~ԏ(~-GEZM, j fPYGΒo>Oȑ!AU, j ?:H=Y5MΒo>éȗ_~uAgM\?tRiiiKhH-%cA-|G{k|A΂ZB< n,%ȣk|A΂ZB< n,%ȣ9s75jteJ >}m۶8p`AA+ծ];}6r; @`x.gXPK7G97tSSSY~~֯_YYY4(Q^^^z2/'@`]Βo#7)))-?Ï9p~*Zjn WTT+99yܹ¯~kt9KƂZB<,5jԸr劲f޽{}ݤѣG?]Βo#z|֬Y#7--W^ݿ?%nӬΝ;### @`xz`A-GfeeEDDrGþ([nqƛM5ӂ~y㛒e`5ӂ~y{zُE@0]Βo#k: j ?_< 0ƻo#k: j ?_< 0ƻo#k: j ?_< 0ƻo#k: j ?^~*&7^< 0Bd,%xĔߪ_ʧ&*fY2 ~+Lw111fQL 0Bd,%x}6oޜ6~ixx @`.gXPK7:!!!mڴ@KM6勂`a %cA-ǿhѢE˖-龉Ɨ@.]B @`Gd,%=,84hŋB @`Gd,%t'@k'x8fY2 ~I||<=ހ2 r~o駟iЭ[7d, j ?VE4xp 0Y2 ~{3ot9KƂZBUϝ;rٳgg8yL6W^w 64˗//((ǽ*kj `ztr~*?ڵ+--駟$bݺu|O}52^SS0Kd,%~tҀ ܗ^ziϞ=0\ `tr~3ُN2e X²e˖.]_cѥY2L?^xqɥ ec\SĻ, j f ;~իW+pMѥY24?)0{첲2"Dotr~3͏ӦMp?G͝;H:5.]%cA-cqq;Ï")ͻr 4k <+t9KƂZB˗gL^^ކ K\S]ѥY2?_sez/fpMtE.gXPK7sk|ͥKG\S]ѥY2?Κ5?{n \.^=xwMiUA޽{֭ӧOW^Z*#zؚbF1(ڣKd,%xzN:7nG۷/G,Xh Yf.]'8oРAhh(kX_599Fԭ . lרQWtO={2iij9ʒOGv.׎ȨbryF{|M:\wSN 62iJz[`{f͚Qd999l . #J}(sƌώ;]Jcq n;ߟ###i4cʹr(- BHHsڣKd,%8`C;u4uT<ر=zFYÇ'ICP?'LPVVFvJQ{1jD٭[7uk1cΝ;š2dș3g )SSSY1q}M<=x53]#.݉ 'O7߰;Zl\e\|eD?Lv(M'ظqcg+Q@ ~ZIg,Li.Gr˦M(M^~u, j ?8pOP?tVM֭[uR'Ok׮-h~nU${MZT^]͛#""X1laiv\G WWݾyF{|MOc9qw t뭷t uӧO=rr25QF+~}?ė_~ټys}J}v9PsKm۶-]V;w*$-JB/x?CM1kA{tr~F9vuwWx뭷vrKhf=o}ʝwsy,ekPu1h`5)Ml|].\2nv1Cp&5F~7KzjĉWˁ;1l04?233{'_}UI5Qhѻwo?ݷ啻\=t9KƂZBƏ ]G/\@SI6ng[_EٳG.F34&%%%ްaܦ%.w1h`5|e(KΧ*lѢ"U)Z^ӊˣЙ~4"Akf͚ݡ=t9KƂZBYWz7h wuرcI #Gj֬ٺukjժu^x*@p̙j=)%{ZZCBqCQتUٳggyn=h@/ovz56##CnS%r+Vn_r1h`5)쎌DuB+ jwĈAWf 1.,(z(i%l_.JxƍgDǎ>QhٵkWHЩSrywh.]ΒoVkVZ^'5UtMA`+t9KƂZBGW7//s:<| ]!k ]ѥY2?ҍU~~>?^qƈZy#G;ƞ={֮]_*͘xMA+t9KƂZBǏ/YBSx˗/J3Kd,%9~x!t_'=w.]ΒoXr]>bG/NpMKF.gXPK7O<H ~{"t9KƂZBG"77XgϒԴvgpMKd,%~${=&'PN:05 Kd,%~$?jgҤI^\S`$t9KƂZBG/xW=>0*oΜ9zo|k.]ΒoUG|ٯ:ZcPE͛7o̙+ 40+t9KƂZBUW^ݰa'_>˖Q]f隂?^SS0sKd,%[5 x@`xwCgA-G] x7t ~5 x@`xwCgA-G] x7t ~5 x@`xwCgA-G] x7t ~5 x@`xwCgA-G/SzU @`.gXPK7ё#o*Ǘi Yr~\tt<]n]LL Y , j ?^o߾͛7g3>~x(&Y2 ~NvvvHHH6mh& mڴinn._ S, j ?E-"##i&{B @`Gd,%tD#ۺu&Nxb>, j ?Eqq1I9@h 3, j ?ޤW^l 2oAt9KƂZB7f@a]Βoc%ZhA7%cA-J7<@`Ad,%訨˛5k?ܭ[7vEiʡ|W"I+Oy)0| :: ?:.ghe~ v?رA' .ܿQQ֭[/)2|5`d'we׭[gY  䇊h:ok׮gƍ>PI*Ud9?UFqhU^^7yoAGݘ1cF}%~ *C%<i% TFqh5xHSYfc ~ )O$ZP5H{NMD{Xoy桡c ~ܱc2_xQIg:tv QNƍ{ne*O^HRv)^ʕ+M68p=CH-Zի_NoANJA)saZj &&siii5&բx]H6HMDW!CPykXB)s؛.ILL$E* S]jALD/e:]Ƞ'3 ߂Ώfz͏?e˖o@w﮼ѦԂ LD(CztզMZ%Pu7CL>=J~}ܔ.DKP.صkWoALJzh߾}f||}Kgff¸'Od޽{s{7n\ZZJ9s1pپ~Yj*J/[,- )r!3~Gs4 &iΊk:S-OfBcTToPhbXL֨Q#n2M\r%%:t_>Φr膒:f031!7aQQ;NߨqHqNRi*iJ'x ) 07>ʲ7Y{~?gu]fjcv|ꫯOukԨAaܹѿۿ ׯxQ`VM Fwi3#}>J? 8? *Zt*j?.^qtog%N]ƍYt;铗װaÓ'Ozϯ糏U~q篏H cBSІQl"˖- 5t~x:<ÇH^tK.t*rVRRn:޽.>\btUW觥x=诏y'?T9.[NN]0`! Xn21FMh(oG4hDҩ7K>:$++K0q߾}>`ƍ̗K/I; tJNƍ"A:HԿ?#Ћmۦm9wQl1bĝwI9} ޟ7D6&cڄ6bq}g1--}3vpoDZdbPІQl"~5D?Z8k׎wm?iF0Xn21FMh(or )&cڄ6b}t3 ^M& m-BXn$ҿƱdbPІQl"F|xH_r1BmBF}>W:$$$nA"+!&cڄ6b>yȋc6 ؾvT'Ns-"ŋo6gх?TbPІQlGC>^}o&PZZZz?ty۶mqqqTbPІQlGCϯ7xc9ڄ6b>/ <h1#&a7#}3>Mh(o#!^HP^k1x[77Kk(2# N}EZ ޖ }͒L%5nX{εQK.MIIk/ؾтe\׮]k|"S1 4Ϲ>\Uno#_{NHH/5k_Tb0>annnTTT&M9Q蘘|yW?V~嚚*#X5J&lذ!?I詾:w,䟩b>oկ_-B ☔ԩS'yb*1Fizly'L7 xܽ+k.]L-Pd*1FųMG76^S }䧟~k^^FL-Pd*1F޷o_?5u[lGF-rرL%'}fkؾbjr Ec„ 6QޙL7!ޥc„]-o#OK\C0aqq1RQb>Ξ=|W^ye/{^ff|SJOE~Wy7TbPІQlGZn',]Tb6mzWc*1FMh(o#g…'O>t萼!8?MC:sTbPІQlG;_+oϞ=??f*1FMh(o#؁bky]=:n84#&a7nƍs̑,؋9f#'ڦcڄ6b>Bpotr'/Vpݻ_y;TbPІQlG_^^ٳgٳG&Uf*1FMh(o#3225 )--2e}TbPІQlG'nꫯqS1BmBF}C!{by6o޼xb[c*1FMh(o#ɫ/~TbPІQlGɓ'˫}6mtUW[שSGAjժ[mW>Z,'Q`>BGKKKMzXGA}s=jժSΰaô.ٳ'==f͚59sϢ͘1~5jhӦ͖-[<o[ntt+Ğ?s=l4{61p֬Y]t-GB)W^+.. lrرb]w5`ھw:x,ZzR<7A/QF8q۶m['Ji6 evg r1Qo߾EEEٳ#nfyKHHcc7l:tem۶M|駟&$$hw!zMot<幘5k\{m߾]`@ѪW݁+Wʼn݌Q~X` } 2G:)ri__kݻh^^[ꫯi٤uVZ]D_ے񹏞 cݱGAd#?~3kmٲe'O׭wHǏ}l}!_~Z,%%%tyw@gJc}> lG"#}MGI{~;(}C!Q6l(oGAd῿ްaƍ3{1OFo#}\bE\\_ Jy0B } Gy/_.tL% m } :ro!/Ppqئcڄ6b>Bp?ɓ>|(*3#&a7kݺu2dee8qB&Uf*1FMh(o#]FFepҥK.\({Jj0AwԩѣG[ ,ZS1BmBF}CD()V+뿔#]T46b>MN>=a,fƍNNNN^^>1վTcYF}CVƏ?k,^dP̙3'##t9PYYYYrrH-146%%S08zG}55t“7=|ݿxHÇ˻gYF}C 1BΒ%KH@qsyWԞ:F}C 1BQbb"06nܘ)űC;wwR0`FIβUׯb=u6b>bjᅢ:lqlѢHVAa7S /DuUq3#=u6b>bj(. IKKAa7S /t%&&#Aa7S /twizgFP{l }0 ]%%%HzgFP{l }0 i?R m }0 i?R m }0 i?R m }0 i?R m }0 i?R m }0 i?R m }0 i?R m }-؟Zcڄ6b>Oeq-S1BmBF}C| 6 ؾ~SY\TbPІQlG,e*1FMh(o#@ T2#&a7 }*kJj0H>ŵL% m }`SY\TbPІQlGF>ŵL% m }SY\TbPІQlG^0>ŵL% m }6l\Bǃ<㽣=i%_L% m }ڵkԩS-իWӦM7oNG6m@ӨpY6 ؾ?O>9={cbbbNRRR-&L?ƤQ46l6#&a7 6P [w/^222;XA%tJj0pɓ_u9sQ]vmK3h_4S1BmBF}C.{l٢}&޽{?34fо icڄ6b>\@A$cGo-[!4VeH3#&a7&MC/)))4D۟ icڄ6b>\ ?6jH.bewq RІQlG ?xZ4h~hڄ6b>\ rʤ$9z;vMh(o#޿8tPgٷr˽ދ4NmBF}C.3Ν3T@211W^gSІQlGt߷v1--mĈfMh(o#%=&cڄ6b>\Xn21FMh(o#@%cڄ6b>3?FmBF}C|~a*>Pڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>@%cڄ6b>R/j&a7S Ԟ:F}C 1@Oa7S Ԟ:F}C 1@Oa7S Ԟ:F}C 1@Oa7S Ԟ:F}C|+..)-/ֹXxٱÇwʪԙ*(o#_K,&𨨨|yWOiLb>HG=7G+C;ww_ԙ*(o#@ #G%G*׏*>uJ15HII ޢE :2T3U:QlGF׮]"0`jOiLb>0[ $-- P^T4F}CxLSgtSؾ[zeCS{= }0ʆz05na aO`j7+ž(o#W6=׃QlGp Sl{jSؾK>•iLb>c,WJ15SJ \*(o#8RT4F}CIUWJ15⧔@2U:QlGpX?•iLb>ê)%LNcj7WO)petSؾ༪|J +SӘ }WPWJ15)%LNcj7\a.,,HetSؾg}>=z㑯dtSؾ0CQHLNcj7D`tSؾ8"1U:QlGp8 H$*(o#8 p$2™*(o#H,++3SӘ }[`0K.߿JJ *(o#l,))_8SӘ }QN$0vEavڥ"aT4F}CU w^qXt1,*(o#aԨQ۷og҇~e"22(o#ɓȪ?3wiݺuRRRLL -ƍBRU)qÆ ?81!!A| #.DzQSVV&'4hD!l"Q'x #ڌ'`53>B3Hq(G!<N$jG82‡w"G Š>#TF$rΝ#TaIl}d W7+'S"o#W6O^ElGp SlLؾ^>z}C-L|2*b>[zedU }HLzeϔDNN_ٴվ0}0QVV%R{e榤еv0}𑞞/)^ٱÇw0}dzAH@qϗw0}(>^:tY ȑ#5Mg*׏"A!ac-@̀2M׮]E wf*G7]wf*GC;3PE#!. ޙ*B! ޽^مfnJKK}>`. Š뢢"$}𡏣DBU&DBQ@"A !/p$ڌQ0Ȳ|0C$C!`0K.߿JJ QȒQQQ #(x't"0ZvRSSG(G!U%H޽{cGРzF}vy&}Z_|}C'ODVx̘1N֭bbbh17nǏ6J"E=?nذ8&$$B",o#G-qԔɨ  ` 7le6GO<~La>݌'`53` 7`$f`78#؀H }'y'q۰}CaD"`'o#8O$rΝ#؉@Wvb>[U }@flGp l }@flGp l }@flGp l }HL#L7s>vV ؾd-ZsssSRRK7/);|pyW}CIK,,H@qϗw7(>HqСCΝ9r$βUׯE;7VRRB"-ZI3`>v*8`3a>Ļ4$-- ̀mؾ G3vb>+wi ؉x<Ρ[>v;O4lGGCtRyӓA"# 71yG7@"# 71yʐȈ }\$2r}C#qlHA9Hd$`>Fh ؾqŊm۶mҤIӦM|mܱcu]mϞ=iii-F<UR`9{>jiG;caa!Uرc!BAA=.y/q#h ocHdqqqnn( 9sؚ'O>ӟJJJWHNN]Tq",OØ1c Sq~M;`t҅&xjݺub;=^q-Eؾ%zѻw:MNNի?ܚ#Fy[lg(3VJLLlٲ%5G}|ƍӝKb_3raG}C#KYr"lLj4aGƱ}71y,MdXrsG}C#q,G- }\$DZ}71yB"Eؾ΃D^*q,G- }$c9ho#\@]4iˎ5/o=Pc9ho#ּqx, }7ϕ%ؾXṲ7B_~aÆ7|JKJJؼyMСCbF5k֌Xmp>Zn_󥥥N>M333G!w}ٲerNN%.U^ĉbv!`>[Hk~Сook׮7٫Ufh;uԣGӧ' W%ؾҚMͥ-txW9sF@ܼy[oխ[{L:젏`>[x.]ԯ_ѢEږ !]>{֭[Z{Ghwڵ^ly' }7{nQFqwfX%ؾ֭[>v >Z{E۴iwf@- }wihGK}CĻ4xg lG_ӧ?Ok~ҤIᅾ+,_ٳ0lG7ڳgOff& 6x"ҥKMkݺuKY>Z.gΜe[o?~\^RvLBg 뀃>Z"Gyv-/#k/6WlG8>GWDիWϙ3G~M>Z tZ=j(1}}7Mk.y@7nܹs/%ؾΣ2[Zȓ+>|A- }t^ff&ޭaĉlG/J R_%^GK}C_F/C`͓_%^GK}C6m4y@d*>Z0>nڴZjV3@_uUta]w|&NXv5k[N܄;YE 7g>چ谬,y}bŊ.]:vjjΜ9 +YbvAr!?}~;YE6ߜO_%^GK}CfK,Ν[RRRVVJ6;C>ʛ8:?fd|s>a>:H[hC(V̙3֭Mb#G\N:Q}GSXXF:j3k}x"=zF͘1CQ(.̚5+66o{jժEwfذaըQ^lt[]vnBg֭_~xo\l's]^yzFEEM:U3CN>چ0[w^i;:>jԨ'N۶m+8o߾EEEٳ#>ϧk@R|9~hwA3wЁCOho>z*~jU'Vڵұvh#֮]{7'>3G`L^}tA ڿ'sB~z嗔˗KQ홙!F2*lG%Kԩ+k߿?UΝ;/^,}{/UVQbo榛n{siiiucƌM>>h߾}y<'Ǐsx~3?}27pÓO>)G!l=4=|a#H6lp9yi;$HdUؾ!؆0$mؾ7 $WlG-_|ڵHO?}' h oΜ9c-ocWlGM6Bs_|Q~}>Z'NLȜ ҁpGGBh o裻lܸq̘10_L8K! lG9w܂ 222X@^O~7x_4}7ѽ>ʚh˛}CM'=GGK}C-se o#ּqx, }7ϕ%ؾXṲ7k8[`lGp y\Y)..)yZC- }i_Z)++kҤHm-%%+T>ZNѣGÆ E"Ś_re\\]A}7մiSJ$ycjC@- }'?>66UV)tfݹsgy? }76h ZzwNNPh o#8lϞ=% }7צMt3ch o#8NE)xglGpx^O!lGp. ޙ1}71ZB.!D`>!&}71 vr*%ؾaq#D- } SO$h oc@es"GK}CA8ر/墎;{Gc:y/g:u~mY衇JJJٓ&_}ѪUZjմiSyٙHlǐ uXo*QƉ'+Y.|7ֱ-%ؾ-p=~iӦ~.;_~bmۺwN HMM?~6V?nWC[og6ݻ4iңG?qO= 51*33sȐ!bݻwtMŕygOEΚ7o.]<'=zt˖-8[?+W&&&}9rt?ϟ߬Y3o$}71qx_4HlwڴipBj6C۶mN*.8p#%f޼yt6v>gϞM Wڇ~(v߿?]ؿ7|a / 6L_*vCQFm߾]^W䡇oF|YXXxWj;#ūzeeetyÆ b#ZjZS+YP~}}3f̠{W>K7$ɯj5׭[Wl~ƍIt'KΝ;#SQzlF>&-3Xϻ5؂kVlܲey'&+;M"Y_t\٭[J*xg}>3PV-qE'?r71ǧzϧâDؾ}{ǏYMTN']t:й֭ fG)؁bcǎtb'\[GϞkmxRQF1]0av?Ŝ,q,B71N?$G}DeGf͚&hd-##C_nmܸqZ5VZHǡ#F6۷o_z;kmIgϦ@qLMh_!Hc*UȜ@c> u4i5hի򕁘cy2<ؾa",YPP@tvP4))c7o,_B˫9偠 } aȐ*dNy }C i?8W!sAnH;U%UȜ@c>!$Ucy2<ؾ DZ SzlǰD%q,B71Q"322Z&)?)gNy }C-"p+?d偠 }57"׼CVzlGp\Yy }C-k_6l\\\|7td͛7oڴi޽:$jԨQfh;q9)=o#~͗8}4]1b޽{e˖999HPVVVz'NSΜ@c>[Hk~Сook.xUfh;uԣGӧ'q9)=o#Srss)|b '^qgΜ&P"7o[ouv+)=o#ҥK-ZmIOOȠgnݺ.i֭KHHw9l@c>[x?ږǏ4(%%E|PÇk.556nzŊp7l@c>[xCfeeIÉC6Hy }C-k;v/v 7ʙSzlGpLqqKiK׆%)=o#8&''G85OZp9偠 }ǔ%%%ioB^5LNٳg\\HXƍ-Çw Gc``>VZEK=119]8FEE˻#}ıv0}Ca"*t޽sNax#X;ؾ &2 >`vvS2?o#8 EȱqƑsh} lGp9G٢>Fv0}CytH;vQgf }Wgvh| lGpqig }c``>#GL:uʔ)CAFFy|SJOy7Iz lpvϚ5􄔥Kʛ\`Μ9tػ`sc } N2KNrnji&aZh ޙ:ocؿѣ x] Ah}RKKKU 6Zz;#oRΜ@c> & /^pBr71]?st'N$?3<ؾ!o'O)8H|ʙSzlv7xC^(3go/ʙSzl6o޼=ǰ|r[r71M2E^_~W^U(gNy }CCɓ>6mꪫԩScH`>}0UVMj`>!£~C0߄F>ochS}ZjթSgذaZٓ^fF͜9gf̘Q~5jif˖-7A׭[7::zŊbϟGb6=8k֬.]Ж#G I1Kr\sE# W_}OS&ݷ[+믗vy[<>7Ub;ؾlG:3~Hg4۲eNoch3ǣ:eee={~2غu1cƈ{C>;zeΝb;v݊i&JZZl{5h /^x׈nTt:w\җ>Ps~;ؾ(X}p O>$EAk׮nݺըQ#99w͚5+Ovȑ#i^z;Owl޿o:nSiӦO<ҹڵk_ڵkfeeyK}&裏= } lϟ߰aCy+>och6lظq#]ؾ}{-yy00T}CCbŊqqqtF|4N*=}P } m^AA@Qŋo/ʙSzlж9s 5cƌ_UV9偠 } y甖N2E&9偠 } y~e ={={oʙSzlǐw9wY?󫯾*SΜ@c>7⧐;v's ʙSzl0AuV,؅ /ߘʤ̱5%ؾ#;;{ѢE…j:r4R[DΚ/,,e$ ߙ" *o#EDۋ>;3BD=W }5?o<ǶmۚzgF*xؾ!}gF*HؾŻ4fߙ" o#Ey.wfH{nk^!+=o#Ey凬<ؾ|omIDAT@c>[DW~Ank^!+=o#Ey凬<ؾ@c>c0Х9偠 }Xa,K9sAXBr7dɇ.)=o#8ɒc ]ʙSzlGpX?%t)gNy }CaU0Х9偠 }UXBr7Wc ]ʙSzlGp^?%t)gNy }Ca,K9sAPc ]ʙSzlGp7l0y{wάiͷoߞ.NŽr7v?U5k֭[9zj/]-*G^3<ؾ`seffvuŊu:t-C{uB9sA 2;}|ڇ5ʙSzlGRi|EXPΜ@c>}֮]ĶNoܰaã>ڲe˄ngٴi~ڟF"3<ؾ`G3G:66mڴm6##CIhl9偠 }qG|011QG!))鮻Dw4~KPΜ@c>M&Ok_~>(Ae'4fо ʙSzlG=ܳe.]Qy7l<Í5җYfmڴ Ly }C>>5k мysc֭RzlG~r7l9偠 }k3<ؾ ϟ7:$$$F(=o#c3<ؾQΜ@c>8F9sA)=o#c3<ؾQΜ@c>8F9sA)=o#c3<ؾQΜ@c>8F9sA)=o#c3<ؾQΜ@c>8F9sA)=o#c3<ؾQΜ@c>8F9sA)=o#c3<ؾ",<ؾXṲ7k8[`lGp y\Yn5o+K}C-se o#ּqx, }뿔ּt-衏`>crrr/kӵڗ A- }ǔ5iDKW\B^*C- }'7lP$RK>\tGK}CI͋EJ$ycLLLttt~~+蠏`>V5Oql޼yΝ坠2lGpؐ!Chjժ^^zegg;Ae%ؾBQFwfX%ؾۋ>>ZΛ7oc۶mΌ%ؾ ΌA%ؾ ]3ch o#¶mhW/%ؾ༓'O>3f㑯/%ؾ0CQ>D>ZNQ@"@- }x4}7/h o#8 p$2lG8 fYVV ̀>Z2G`"7l0h w$h o#lƙ3g6k,**J;}7lG;tؿGGG7j(rlGCU(DƸz6miq,G- };5jrLEho#ءǏEEE?<?N:cbbD&ZjEv`>MHG֭E%{!`7죖H8'5X2qԣɇ~8ߨ`>݌'`5glGpD#YlGpFD"`o#8_"G7Hl }8ؾ<;v `'o#%^z#؉n6c>[`3o#6c>[`3o#6c>[`3o#6c>c?D& 9[}i;]}  lGpLYYY&MDj}\reJJ ]{iW `>ӵύ}\till] }'͛7/**J|n / `5o#8,>>^|@+ؼyΝ;;76d*cVUիWvv@}Ca$!!!99̀=ؾۋ>̀mؾy>m̀mؾ G3vb>+wi ؉%GӨtRy->F49ؾ ql ;v_֩SGwhvϞ=iiiaN8Q\^jUV6mx;^DFoc$ GO1>k֬)(( yƍ+Wؾ'p=^qҤIM4d޽wңGYF!Cv}M7=zt˖-#m۶uޝBFǏiҋ{-/[Zn ?~fʹ/}B"71qcaaa8 ]vĖٳgS"/|͔^6lVF͢۶m;uTmG[>okF0 },Fھ}܀ʼx7jkuK/\SsjժrQjm= xGt ݅ j[۹sk"kD|鳏}fϯo诺*999'ĝq,G- }Dl"lrw4n#JOif6mh#z_|mܷo߃>(?)4QV֯__rzzzrr2gddz}y=PÆ 3~Hϵq,G- }Pl"m&MX>ZJdAAܑ#Gq,G- }hN%R k ƍw2DZ}71҅V"-$X>ZHB%EؾpBq,G- }Er"C+EؾpId&2X>ZP"kBk^d kn%ؾXṲ7k8[`lGp y\Yn_/ao_%%%l޼yӦM{}!OVVVF5kFi6OB- }Я?O˙#Fۻwl2q9''Y^{O8!kh o#oov-Zj-.jV?SN=z>}z^^~p>Zn!ߔ\ BljW\qř3g ͛7[ݺu{h o#ҥK-ZmIOOȠgnݺ.i֭KHHW(`>[x?ږǏ4(%%y_:n׮]jj*mlݺ+.M+P }^Cʒ6B }C1/k;v/vߡ`>cYv~vV$%ؾ2:HyBKBe%ؾ{7!!A$Ry?|pyWA- }'M2%***55Hk۠A|yWA- }'/հO>r R;u$`>ZOZ۰a(wfX%ؾTn >ZΛ2e㭷ފwf@- }wihGK}CĻ4xg lG7:{_$#G5M"|-ZH|hlGw)++>}i֯_SNy"ҥKMaݼy3&O?˯h o裋|SL)**ٳgϿh o[dgg z 2!1c?h o+ĪUEرc/D`>:oƍs̑ DJ$E9F- }tعshI "՞={^}UU}7a~UlTIRh o222tʔ) 2lG'߿?yo3f%ؾNz o͋/_.:%ؾN(yex<+"\tGK}C4ydyeiӦjժ[ͨ .]wuڀ$#}\bE.]hM֬YUVsQXՒ` wn 7sա6`>:%Knᆹs疔|ᇫ>% )U>ڀ$-Z?!mz̙u֍Lȑ#SNڵ}ѣG텅<mPʫ6wߍ-K OFQQQSN-}vx'z)wFiwCoZ@/š֬YC޺u_傂oqٲe_wW]u}g{۷{U݁aÆj;x?!S>ڀ}LO޽{iQN8Am۶>p}>|gϞ#FT8x -௿Z 9-ܿ۳ge]W_eGvI˛wh7zΓ'I!k7...֭O?-6z%; .>wW^[=[l9vXsG}CtDJzq8p.Ե^8^;>+W '/'ڵK@+x 鏭y睔駟R<~'믏@jڴ)=cǎy%; .>34!}wm& v~B|Nho裓=t'm)uIc-[xGFF:5ktfwqӡCJH'~;]_|Qo>}! ϧkE=~;= O;#M~kF`G}C?j+\s mV:ns1ڵkoO>D$33366V|I璵kצԬYSQo>$oGv  ~?@sQ|r-jhCGʟvh3lG'}\dI:u}W_}%_"ܹsbw}z.--eRo馛rssŞ:iɓj||vvI|xߨ7>={ЋP;}Ѿ}҅vǏsMӡx>ٓ?nݺ;L>S>ڀ$q^Foi \CRhϤiӦ픏￟fCGyDfRԭ[w…KڶmKɨQF˖-iWo!wgoԛwO}hn'J;hOϩCm }t>i< 6`>:)O?[ROFm }tRhȑ#tؤIߗd o= Oao裓͛{˗/_.:%ؾN:|Ff? }7aǏ?y> QJe%ؾ[vB$:qB }7y&L x //%ؾΣU1zhױ ^wޑ_`>)8dV_~`>ũSƏEFcnڴI~M>Z.֭JΚ5  ̙3a„ ;wN~)>ZFGə:uHBk^8p@>Zn5o+K}C-se o#ּqx, }7ϕ%ؾXṲ7k8[`lGpLqqKiKׂh o#8&'''//ORi;]} lGpLYYYJJHmN^*C- }'} "bÇ˻h o#8)+++***55Hk۠A|yWA- }'9s&&&w޷r ycÆ ;u$`>KW☝-`>þ;QF!)) ̰GK}Cy"m۶;3F`>󲲲DoV3ch o#8OKS⇏u h o#x>Z&<ϤI_z%БI%ؾဖs=w!BҥKM!رccƌؒHlǐ 8>Z<ؓHlA]wQwTDђ@p΂`F,P /ZЖ&*r"B ܂-QArxZ9`, z y~U56ٙ;sfL6dCH1(ؾnE>7ѕUk"Ǡ`>qtK$lG"RMD&^84^kQg9XBIYl߾nYe˖=cP}Cgڵ+::z߾}t{ҤI߷o_mڴ2e~'m۶N:t0vXmqCVGMkCw Ll5}#GG*mV(5k&nz&bǏرcllvf'}?G@z3Ν;kZ*11QOp>7(\e+__6L,tvZjVخ]Κ5K>y:HȴW^|򉸽dJ` RXB x'7|s=9sn+G:uT͚5驊t&b,|r/}↞Qpϖ-[ 7R#*c }tϿU8Zvo.[nT`-F%Rx</ғQ6 ֣4iD,>|oIϪq[i… =zݻ36o,7vmb-57l52#JGіEg^G75D#mH4s=c/m ֭+ٳGԍNɣԪU.>cnn.+)I6EkONN~g6wkdcU^= 8Oe ؾnbH}~7bĈ<:9x[<뒒:uڵnO2E}E7&N-LII0aE[Q;v hzJ[D~Ooh{-mⳏ^+nh|D:5[\@q,Wk`}C]$+|@gXΝ .޽4O>-Za,XsOJ_XgG:t}'ޟ1I Mq,Wk`}C$n7|^{M^j LX>1b>R%tٳ:?I(U-jS,o[_"C߅ 'OYS8Oe ؾ.D:8Oe ؾD:8Oe ؾD:8Oe ؾtı\}*c } )Sf4EꫯZcZTN9/1b>S` *Ae ؾqP,o#8漠rTNs=z]TTt=\|m!Ck׮u/,,c2227oHi[m?n>1b>S|ii~K.ӧ}ݸqEf͚eeebvåTڧ2XlGp iΏ5w޹zjLLÇ+>FoH@˯_޳g~JTN!󟔿իWS:OU֕+WJW_}{ĈjWQi`}C)s>%%I&֭Ӗ'==jH{ oŀ;vixTNaYYY?dذa ڵ?邚9s[nmڴ;wi.d<F*c }0QFeddH Þ87B?O>MIII}nHDPi`}C6EEEҜF7lqVQTڧ2XlGiٲHm gp]ؾ`>}{"b/[,&&f̘1Ј᳏8׮lGӺuhHAqjܸq^^<4b#ε7lK<ű{Hⳏ8׮lGYZZQAeffʃ">\;ؾ`b"4#j_qllG_JJSO=E>\;ؾ`?qHW&}Ĺvp}Cʑ<MXsb>#+G\-s}Ĺv}C]\2,7:u*W_}U^<>&Xsa>\j͢EklذA^`K.^ڵk`Gk 71|\t)==<:Eɓw-U.h ޙ&N<9a„SNBbٲeT r1b>/RKKKY !D%(׼*S,oc8j9: ֮]+<Ri`}C]/77stٳg/R Tڧ2XlGכ2eʅ i 69sT*Si`}Cٳo}ԩSyY7|I&kҥ˞={77l0:::;;[|8=?ΝXBVVh͕h;M̡ }t*G$B٭[7Ć#G,..š}4gΜIMMMKK2Kڏ磑v"mkܿ3>7caaM7ݴ~q>Ӗ[}b*vwΝ~ƢzzZmIm޽7;|,i?>ۡq3>7tHgvteM{۸q /1OZSO>ĸ7&t ݻwkM6tg;O lGwS9Ǔ}gs'N7tPCLJJ2СC!77xȐ!<{D"Iҽ{wތg5l0֯_x׈T[-[FO`' Gm}牙C]nlOetG0`஻z) bÇ{]v-ZSN /@6m:c c=_B15jwMg˟{9kۜEկ_?&&&##>>q^O lGw3cZ2ؾ>t۷;v<\x}to裻_gggw9l0Gk`> ꫯ֯_/TTڧ2XlGwo.]*OPռy._,TTڧ2XlGw~ԩS )))y)*S,oZjΝ4dff=zT~>1b>իW'L OSÑ#G3#Oe ؾ ??߅ݹs*+%Oe ؾa.l"OYIF>D>{>LP=Jg>C"+++77Wo-] lǰv?g^{<-Zrrrh9i cP}C M9sdddرC<_~y_cǎɯA')ڷ}1cC+A } OMf{М9uY!pɂ ڴiC '>7"իW4iܶm[:={ncDlGpO=6)!U}C)"|۷OЕu}3#D o#8|E3#X7s~:uΌclGp y. wf`>S`Ηx*(ؾ7ޥ1ygF o#8漠rTN9/1b>S` *Ae ؾqP,o#8漠rTN9/1b>S` *Ae ؾ`*|J$Pi`}C6UܕH>1b>m+@}*c };+@}*c };+@}*c };+@}*c }+@}*c }+@}*c }J$Pi`}C~ꟻ Tڧ2XlGD7AsW"JT~z~~̙3إK<ݦ%D7쑓 .ܻwٳgmFmZ"Vy>1b>B]vmzΖZC#i.Oe ؾR#G1ҥK:C#i|D%R}*c }AJzh$K}*c }ɡK/ڵuףG4Z@i^JT!rHƍKLLlժU\֭[?IIIsLڊwUڧ2XlGG}Td-[eԩ?Nmi%J}*c }9sEWyroڵkϞ=ڴ-ATڧ2XlG{lϞ=݇~XbeoƎmi0>1b>Bt]-ZXsDO17BUV?vWΡA֭imBH_/\P.be]v7B=(G*c }1O>r_y*c }W\ٻwo_ ۶m;|pky`}C!{X*S,o#~#K}*c }P7>1b>=?C 3jS,o#F=zB7YTڧ2XlGgQi`}CE}*c }p7YTڧ2XlGgQi`}CE}*c }p7YTڧ2XlGgQi`}CE}*c }p7YTڧ2XlGgQi`}CE}*c }p7YTڧ2XlGgQi`}CE}*c }p7YTڧ2XlGpFp|h TN9*(ؾpN9*(ؾpN9*(ؾpN9*(ؾ`"]iKkA} o#&+++77WjwA>7lxDjs>''ڟBecP}CNs~cƌlGӂ ڴiC9/'1(ؾ`W6i$99m۶4)={AecP}CfO=6)Ǡ`>'Hʺyxg>7׾}{Ǥ$3} o#o:u;3*Ǡ`>Ļ44Ό"1(ؾ]3} o#8B~~>SN+1(ؾ`?;nܸ+VL8n˫} o#Lın;wT>7줏D@1T>7/i} o#kG4>7BͫG!Dz 7B[8 D ?jժq-Z8A }PZ y)qزeK:aL4i$X> 7BxyZbE#A>8o#Bii/h?~C{921pmF#7BJ"E?\{"㽐H7Bj4Qsiq:}6"o#T4N>lG5D*Q96PIdq7aHBHBv2&qa>D!ؾ`? JlGpJdFG%o#8~7}c>SblGp BN>B}C)G1o#8! }HL#~MT7o#&++Kl}V Pؾ`ǣZsrrh9i(@5`>}ncccnj#6o#iQQQmڴDRE };]zI&Z={7lSOQبBJJJff<}Cfe$teݼys3 }o^1)) @Ȱ}C~ ,}ԩޙa>Ļ4G3 }G%ocDzx嗩ӧOW| N`>F. N>}6l /:,^$2}C#aqt$2B}C#q q$2}C#q ؾċ8 clHE WlLjEA"71y|N:m۶e˖}/>ѣGwUĜlݺ֭[ӓY~$2}CÜW-5@ݲeˆ ,|'NԮ]L|j}vYmW aμjq$111 i;v[?~oӦMVGۗCLŮxРA=IOtuH}=k֬Y31F#GB}Z*11Q 'lpF3gV$|ͭ*/T oW^|򉸽d ݵkYf'OIII3g5죿Gќ:uf͚qW{DJ3=zzzkϿt-߿ } g.\x饗 )^Io6q{߾} 65jS3ҦVrKii~s3e˖i kMQѣG޽g̘yf8wMI7^v?:h71)&srrR4h`Z輬P?}Wßx rmI=::?~rr3<#H}.MYPP@OU^j8}CßJ".\x:tHݶmƍ}Е;n?~ǎb<`a?/~ )V }͙3g_|q7:u*]YK5Ϣ,H#ű}TtҎ;҅']w׮]xĉ~ZC6O>-Z7OKKNw`>{ ռK. 4C~~s{]M`X>Z }*r2ocA"q,G-c>F$2 Nc9h71 r2oc$B"YΏc9h71B!&\r2ocB"}rKGؾ*>hˋ@q,G-c>S` G"o#8f{p,b>S` G"o#8f{p,b>Sg9sF-ns=/_ϟ2dHvZnݿB1&##y扉Gؾ^ZZҥKt{iiiby߾}7n(ngeeQ"YfYYX{ElGp i5w޹zjLLÇ+>NFoH@˯_޳g~7"o#84RV^MK}өt߻w/ݠoV رcG\\6>NaYYY?dذa ڵ?邚9s[nmڴ;wiax lGp l5jTFF4#a>Sgӧ|0)) JGؾ`"]iKk}8~rZGؾ`ӢE -l_reBBi(>Z };۷iӦ"b/X &&f̘1P0@-b>6mDyHAqjܸq^^< Gؾ`x "]hl8&W/ElGi7iҤQ'|233S}Cf";wnٲ%ޙQ>Z }G׿5ޙQ>Z }mڴ)**f{=Ό:"o#8B||Z }t%K9< N:Eџj h7}-[ܣtҤI/^_Z Gؾ.@h}:}vy}+W_*A-b>:ڜ9sG/JW h7fϞ--5vQ4*{6mZԩsYym;vq^5W_]Uw>RU~}h|NII)JԩҥKCaa! ؽ{B +Aq[zYWJGؾǿ/wuײeΟ?x>_׊:i2 )--9!`9(n>:7Tؾ}: FGG XNÇoР]>ΝO:SOB: j{kMq֮]nk^hɉ'{zG-j(vp˜:XTΝK_***j֬Y{#S熛oyĉ^v0&M|mzhI_1yc }to裣} tqi9XZ>nܸ2k׮b!C t3gΤ*|59O]h֬_}c&+=#.**:zhǎ'M$9rdqqT"$y?U =M7$ EϜ5<+aÆ wy; 5>UKt0)ŗ_~Y~|nb}to裣}ܻw/5B^zcJ:7>z+[oI }Ni8ѣ/:{?ԯGʖv}T}:cbbwK˩tuT٭<:Wꡏ }t4>/iРG_|!O>aʔn:thb/ˁR8JKKn*{vw^ZHKMMtΝś!USe5k/\0o޼Mz+WU>}[5>ǣG|ѮAh*}$6mtUKmZl)M5jFk?Nx'hgV 6\v+H,0nݺwu?_RRbSj׮]k׮ݱcǿ{vvzzWa'`H{9:tNblGGS# lGG3@/to裣S%~ `>:ںunVPPb "o裣]|a/,,_*A-b>:݌3{]ElG;rȻ+O2pիW˯qU}C].}hpɓ'_vM~ }W\y嗍 ew_] Gؾp & ESiҥj h75,ȑ#_d }&t=gΜŋm8s̬Y>3 "o;vlƌsŏ;ŋwIx0HGؾnuu{#\l 6m-GؾN(1ؾN(1ؾN(1ؾ)**ߕfGؾ`\~rZGؾ`Ӽys-l_bEBBB>Z };ׯiӦ"b111cƌh7씝M<>>٨_GEE5n8//O ElG]bGGGӟ*$''˃"o#l„ 4Q'̔/ElGYYY?8vڵe˖xgFh7׷o_g}̨C-b>h?xgFh7A?wf>Z }G}C]dʔ)tMz,GؾnEq| s 6ȋ\^{9ElGW 8$}>[Tw"Gؾ.8K&}&U_"Gؾ8W5%}UG"Gؾ.`ǃ|moXxѣGw.Vqʴ} 4hHF!~ȑlݺSN[_~} tH"oәkAUa/>V~۷Ѝ5kִlٲҸʂH"o裣kkK?㏷iӦUVUM^{Yfb?#4..>*9f׮]ۓ&Mx +~|]ٿq޹sgmVJLLD}Cp}MW9Oz'K,h{N:Uf͓'OtX⤤tqݧ{K.k׮i_`׮]g͚%ngos˩/,h x+j׮G?OM4ߩ[l/)XD-b>:׸q8 ϭʌ8i6֨QCkh Mȅ zѻw3fl޼Yxsω*43tP7qBv-jmo7|C)IE_Xэnt[N1n7l&BYYYƍsnFkcXlGYDd>RzjժEgaF:?~rr3<#H}d;vH[; 4ӹ^ץx_A71>Gziw͝;wnĉ^G7Ѽ\"UHRRR&L NM;voBΜ9sw{WԩSZJO1FG\>-묬,A93~]`R&… w.*CاO-ZCrd֭[5kFgiii"gƯKJފow}?!P˹74\^$rk }t /ZUc9W@b>t*DZ+Z`}C]ƋD8s4_ ,oxHrk }t%/xX|-ؾnE",(q, hXlGVr7vyk_$`3/Z`}C)0ۍ̏Z`}C)0ۍ̏Z`}C)0ۍ̏Z`}C)}Μ9G˗/2]v[߿aaѼyDZNjq;7B?KKK]tnO>=--M,۷ƍ,J$x<5k,++˵ak }fQy睫W>|5j!-~zϞ=owv4_ ,o#84RV^MKH1?󘘘1cC#T@q7?1**izl86n8::://O>;ؾ`Mm۶u4)He#θ6o~CoT!55533S}w}CfNe${o-p1g }uM;yu>;Xؾ`?fS<|g }GkFNc9θ q(Gq71<}9sf+B^W8>L|$Nrq71x<fھ}U6l /rsΘ1رck<&}ulǰflQRRxb:֙QKwf`>k׮g0T#G?:~=I˹b> -[ rܹI&=4_ ,oc8[ty)L5jԐ>K}B]nRy } &ۡʶGW`>[xĉ{^z 4=zօGӧN:͛7?ϢM4]v.]4aÆbc'F[&6\paLLLJJ -9{Yկ_g=w-:/GkGcܡo'f}to裻U<(;v4iXWǏѣhdݺuג!CPACƍWVVFvUGy'ionݺ&69rdqq(sРAO>sLjjjZZo_~=i[~9ؾh o}Q\\bիE۶mOyo$ɓt{uہ?ظ7!Sܥs5kjO`ͱbJ|>z>53>7#]S;w}.7[Ӻn6Mzn{iw@wy4cI9FĶ9ؾhG:S?+kƍ/\@1yҚ"?~'ƽIύ6{nm?xyi&~Ҷ>C]n*}7>쏂5` ]wSÇݻv-Z]N;^x4mtƌ<{$ {3yZb:jԨロ.gϞ-?stUK׶999-_~LLLFF Hw}ѫ| = ؾf*[j}'/53n }t /n8p}cǎGk`>۬YYUٱtE|w6.*+}CmŊ_S` [nCѬY3J$ݠ8FEE5nܘ.䥑8b}C)05-ZlTo߾ 1ؾ횩S2 O?ϟNٮx<"tزeKG"o#8f^jjo[;3ElGp v[FEE1IJJ23#Y }lwi|3#Y }lwi|3#Y }lx<:&>ߙp,b>S`b>S`b>S`b>S`b>S`b>S`b>S`b>m?MEZ hXlGM@ hXlGM@ hXlGgD&7Y+ɼk })~Jd2/Z`}Cf hXlGgD&7Y+ɼk }|Jd2/Z`}CZL4_ ,o#8Y+ɼk }\~=??̙|hӟtrZ+oy hXlGGNN/*,\p޽gϞݶmIiXEc"yvڵӧ+;;[^Cki a^@b>BHQF9bĈK. h H7B)y꽣4WD7B'''./^-͛׭[͛%$$`qT &1i+66/Z`}C!DGR|QСԩSu[Ӷye$0/Z`}C!DfΜh"nFFʺtk.m rk!7B 1 4_ ,o#~:7aZϟ|-ؾ`#..|-ؾe^@b>8y\4_ ,o#s|-ؾe^@b>8y\4_ ,o#s|-ؾe^@b>8y\4_ ,o#s|-ؾe^@b>8y\4_ ,o#s|-ؾe^@b>8y\4_ ,o#s|-ؾe^@b>S4_äcXlGp @Y }lElGp @Y }lElGp @Y }lElGp @Y }J]Z FElGMVVVnnvW?i9OElG㉏ŋ'$$ڟ/ElGSjjjllH'O%cƌh7uV͚5D cTTTƍ`>Z }hB$Q}&''˃"o#lԩO?)_Gؾ`3-Hg-[;3Gؾ`TxgFh7u֨(IIIxgFh7AKwf>Z }G}C=JԩS };/?i^W^ ~}Cf"TFT>Z };( Gؾ`cȀ}C( *Gؾ`8 H$ }G!Dz<`"o#zDB(,-  }PQ"?O8ԩS> ]\ihx/!8lGD8zuog\\\.]r*`>BxHc5GNFGG7m}C!&$zt2~,b>ByGM6*$28&q`>m~8Bh}CND"2lG>#7'yB@YlԨ }o[c>SblGp BN>B}C)G1o#8! }@!ؾ`I}į) }deejw7lxDj}\xqBBi(@5`>RSScccE"E'OLKƌ#6o#i֭ cTTTƍ }hB$Q}&''˃7l6uTQF駟̔To#DGG8ҙc˖- 7엚*@Ȱ}C~[n>&%%o#8x@(}CĻ4xgB]~oY|fVt#)*̚5>8w5Ca>ի~!-]@dayQ.\H_Ν;"7*˛0a)%L^W_t| }C'3 wN8q")wlGwyg˖-r<"Cii)%ŋA }>LF$iӦ7?Fؾnr!fڴiׯSٳgu^]jԨ!/| L}C#]FF\(@wTvv_ yNkUXXH;ܽ{↠?"Ab>F:>y<_~911QPJKKE_}zDc`>F:>۷׫WOܦÇ7hЀ.~}sFMmH;[-\0&&&%%Eܝ?~Æ x!77NZ{EK|&M.]ٳGۡ?w\ ޔdȐA>}̙3iiiZoȑ#)UqϮ]pݺu'N())Gׯ~ѣGo/nVi}lHG;pwԪU8)YŘ͛7Ɗ*}ңsssiC vHfZE7o^ӦMV> 1r}C#]}\bEF}EEEFox̟{9ٜEկ_NQ kצ͘1CvJE;v_*6F:|*Foc類SDoc[n]~~HUPPb Ab>F˗/R7g̘QRR"""kс }G.^XNE[f|t |}C_r0"+r5@b>¿\re c˗/߽{|\ }Cߊ&N|D ܱ}C'H:L> ؾñc?̛7oݗ.]f\|9//;w㑿xlG:nݺҨQ#yQٴi/aؾGy@ub>SblGp BN>B}C)G1o#8! }@!ؾ#7}c>Sblߔ8 Pͨ"De BB(/~U @HPEՏ*'!?Ӡ#8 N>Ӡ#8 N>Ӡ#8 )**ߕ(=lZ.-G㉏NHH'GScbbD"EǍ;fy(@ȡ`m۶Q(tոq㼼ҟtrZ+oZ##''.\w޳gn۶۴D1f!>B]vmzΖZC#i $G)ȑ#Gq%y4[Rt>HS񴕼:999t|Em /##kժՠAux ߋC!D_>`Ϟ=Ke3JsLڊ;b#>ݫWо})S.mJ>B̜9sѢEr+ܹ]-mB۳gv'zhرxږB{$l֬\imHg'_V_}G)pB \}P@ϟ)gpl=zџBp77777777?IENDB`onedrive-2.5.10/docs/puml/client_side_filtering_rules.puml000066400000000000000000000025771513710110600237630ustar00rootroot00000000000000@startuml start :Start; partition "checkPathAgainstClientSideFiltering" { :Get localFilePath; if (Does path exist?) then (no) :Return false; stop endif if (Check .nosync?) then (yes) :Check for .nosync file; if (.nosync found) then (yes) :Log and return true; stop endif endif if (Skip dotfiles?) then (yes) :Check if dotfile; if (Is dotfile) then (yes) :Log and return true; stop endif endif if (Skip symlinks?) then (yes) :Check if symlink; if (Is symlink) then (yes) if (Config says skip?) then (yes) :Log and return true; stop elseif (Unexisting symlink?) then (yes) :Check if relative link works; if (Relative link ok) then (no) :Log and return true; stop endif endif endif endif if (Skip dir or file?) then (yes) :Check dir or file exclusion; if (Excluded by config?) then (yes) :Log and return true; stop endif endif if (Use sync_list?) then (yes) :Check sync_list exclusions; if (Excluded by sync_list?) then (yes) :Log and return true; stop endif endif if (Check file size?) then (yes) :Check for file size limit; if (File size exceeds limit?) then (yes) :Log and return true; stop endif endif :Return false; } stop @enduml onedrive-2.5.10/docs/puml/client_use_of_libcurl.png000066400000000000000000001467671513710110600223770ustar00rootroot00000000000000PNG  IHDREO2*tEXtcopyleftGenerated by https://plantuml.comv]iTXtplantumlx}TKS0WpJPa:>0@2II\dyI4Ȓ)z8](>ثo7Rm])H応J g4Ƃ[4̸t΀PE.xΜ&Xז"/VW:$wsδ2ٽwZ$PלV.p/Jqi$hn.{Dݻ 'V6Z 'HT1VE[V6f9;y8F.X, Ԝ^&/'4 %vh,PeGR|Z5Cİc*H-Ł\d'X=U%SQ+p *O%6clp ~:oQ 5~c3gr/,[ZO9ɅV-L^(U5*K'js$1 zQHz>md?:s6/Qvi3*J 7ό&{.k of>;L //.9Zz^%9V\M%IoQN.]U<Кɀ zyV5J~<`R6.jx;|NXT.+Qst+@yۊ IDATx^ x @HB K0%B((Ak[-5[*UQD_(RD5 Ċ)Hm\"  ۜ_Ό3s޹7I2>Q֭R`M*(fCeCE*u̜޴5k֤J_%VX lذcР{6lvEfI#Fݽ9_&f"$$$*^yݻsJ۷W_8p,rrvgd.!!n*667dj!g_Ts7̆Ղ"ȼ2qyn?"gi&eRkb,Ͳ؀o-RFxfnڠAL.zk9[-` TJd۷DEhflv(R x۳ >>ᦛnWQl|Sd9y WR)LϞo1M_}i+G|X|S[vm۶Z׬$34tU I?OO|Sp-i=gx@ϝ;_9YY~nWF7%irvPOUL#9JllP-(bɳK"%?=4FY?~'NIJjAnFMƍ/G@u̘GiLi~WE{oA6ndҤgˮ99lEE՛7=Z1)BED Xˬ&A42Ŝ))mz K.2mSlW_剟.XfCe)*i>]Rg_ye԰g|Og|c]}F~c^ q v>Zj,Ib|2e((Ac5iS6}5xΜyT2iZ32I _h)kZx2mSum3,`mmQm|}Bf @ |<1OِN#;)h5Maaa4 Sşȳ^y7dž)^;bc8[osEFFS_Qꦤ/$U %ۯ1.,nFbwػ>~yv>D[u@ 2mRi3JC+V|?/ Ouz=e8s-bUI` _YoYYԭ[WR/ЗަLɤ#""shDK# [}Bf @x&7wGі,YMuuԮ]Rfgn_Of:DiZwu/W) cpU#c~!`6\FX.(݌~||ƍyRO`Ær!fu}yޣ{^}NQQh_;ge-f){KUՊ_TI` Fݳx'k~ce={'(,;<> _1 q@s]Nc|y ڴi',_|fD)S2Av mŋWP=>h߶dgHH'~50VASuƯf;{.?tϬYA_7BS;,NM_33==7yM<7k? ok^+ k6OL󗄅ljĈ2sEcciӟ|_)i v1MtkyVol\ȤIϘęvPs=gAt/0_̶U ~?ng<[aui|~F/;w>|W3~SO@MIxsqmbm[>qĿ4mz%]k߾11߹~ZԂ_$km#oPZ^YY$$$^mZSܷokMH%̛[FfU}BfWpLz=\vJgȾr-4=]&?=efNoݺWԪ[n> }O322b$)b) '0=詺hhmbnlZ U7Q&gCB!@8拕>*'?ѣ)`99^ӽ{HJ: oHcoU7bk1Ka mwIc~uW@A4/Τj׮s h{m͛;x5baP=Yn|}Bf+pp\h|xVWO7\Cw/a8eh. א8拡a0i~˅w3Al~4p5$y{bqL_rnL_= @p Iށ^`z\h|@<WO7\Cw/a8eh.#̜޴镖o YWO7zWWުeRϊ[ex#<1`]ʶ ˷kmۋSXPFc*<5Orm8|x?gm߯3gToq*Y@iTCRzoW@_>{!ٝ񻄄İ+bc~~KNgNWN:ɭduoz[ɜSPv|:s6Z{zmQ[zTv tOÆūG5eR7]{msfl>UeVT bb?IT6]qEki Dk>ak[W_l{n5Zî]кuuRW^ye;̐o7Ne`xS޻7z+_s2###իsD-fg]/=»AUqx_ZFwcǷf.̯n@5$UJXu/PeۥK?5j_gm&uѢDž 9Sgf\V={ :o \!-fڛ 3~UlW/_W=S^{vW11䁋aη^Ԯ]6d۷D<4={;EYT% l1yȞzؽꛔsʔ{o9ͤҜ1۩$mRi$3|ÁII-+_|XꦛnKKD o2c[ͼ˵S b*tA9Ҏ3^xY4͛oڔԹsR5>]$ضm{ښv\f\mwM?.Wv0s3\2̯n@5$???-Mg}'NIRFMV y}'w`սMF/o;y)S2i5i?=&g!ﱚ| ָqGyBS p׵vÿ_Aݺ(3P w4o(%sʷZ!V8%ҽ^ohJ8iҳ]^aj7r"?xcs0#G>,S *޼yQNs7!!!{3S&L$S?-w?̰eCDwJ^xx7jj|fPyK 5a.k!OӬ|ᗿM׮7KFlsJ?dD_#/A%M2'̒\Lt.RZ zhu-W=Ǘգ<=eXG7W"4vՋʰhzwN7kMwgQ}!66O!ϠxY"h6mڽ vHptqL "׬ONŎp(,^ ug˖3P~%_= ܀jH=\ܼU]76nGko1՘s5ߝ8~ǯ%M99iяO1yc0Zw!,jQ {_m+fګdP*iFKǔN{P(>ov~Tu= TۻPͽnw?CQx !<_ h.+>8^|q&tiC:)tg2F4?%0Öϰa#h(-3s:95U^j si˦#<+l.?:1vf͚fӛ,[ܿ;`*7_7ޕ᷹bz+Gs2j׮繞Ҁb%[׵\d_fW&s|w}Shki=peƝ A<Qҟ R@ '3XddY|]HgϥCDfIPXO{Cd~4p!ipi4%{Jq4G}'w`{WQ6KwGyyGԩx'2+~SC^Jr^e={ ֭ۋD_hT &r->_ l~:_QBwyW\QL0bŗrWX9zmut_ԳioAa]o_ڋ 1iiyDGEQ/˔wYL)rLФI^2g9zg{1[3*g.RT 94^ylgUTٛ״Pp~ p@U x9į| +=^pr/_*3;is h>[OK4 7ҥs9o O٬W 2端%LOoիst C3c;wСãzm@.T}-=^&Y+Qx !f+)e,EzZ:hEԮ]քߛ-[Vf[3g̗6~fK-0[ChSe' /ˡhsi4O4WLoh.}4M%&6F϶l1ժ#>~e7|F*἗Zgå=#4[n5SCo }CY27-.]`~2̯n@5$U.[z޼4^|q&mX{Wh­_Y? 3w`ս]Ull|_3-ck?t/lذcݺ-tSV?lذiyݫUɑ+{Ă322N) zAo"xMh*E~ dnmf>BC! -ltgO]444T?ixvޓVtNu$eiާy\N3zՐTy8&Ǧi)S2Y4'ӔD 7?PfXu/d4s}3@ n/Ec;y[nݺ:\kxrȓhXSg2$g?W@ z`nAS ZǮ]ot{PTF'RV^ThBjf<0FգMbbzxwNi+$!I+U6ݚ ׇ6HԩsM׬pKl;NߟyE4Yر㯹555'wo34e^oL(WH6L-V=s9*UMH3wrO@Uni>,?UWx2z׽| miw,dW?nkA:\d2<}4 b󫧁!;pp  7nbwaXlڶm_5غáZ UIV-G; 6z׽|1;j4  UIw3Al~4p5$y{bqL_rnL_= @p Iށ^`z\h|@<WO7\Cw/a8eh. א8拡a0i~˅w3Al~4p5$y{bqL_rnB̤IϘ/;tȯn ѽ|18 & /Csl;@̗v+[ŋ D04  Btg^xᥩS3~9XUڳf~'X/,04  B T( vKcFJ0=zD~kHTм@@<#RAjN= J `{8 30R*4/F~4#*\*|#RAjN= A<V3` 0R*4/F~4#*4iĘWpXU/x&F~4#*h*lڴF?Q[l())1 Bn,*O@@Ccʧ"ԩSyTzRN@ f_>jN=J֮]׿ɓ .|Ie{7Ťwݨ@jN=Jڵk3Sˠfذa111C={lMaOV;u}voV˖-kժO?͙3΍l 8zhaa!E"J5k43˖-Svch|w^ ͕_̙3#F_R/-/رc"ѣGв2@?x 0=zD ^:t63 e߿6}3flqԩ!Ct6wMΝ%Kݻ[Mlwq̦v²43gtгgODxB)tŜ߲X=z|ѹXU ,[DAqN:u.^h=4pҥK (Odd$>Jzx: )ܹs@ϘoNE9"]K ȏB6l@>>?UF|~,*@UxFW%mڴ1?rHhh+D駟7oެϦ*Mx@Z&~s}v:ĉ"G}dy ދ̯*V|?m6[@b~fg̕ P Uի###h={l-۷oFFhWrJ/%}z߿v%JӳtҚ5kRp? `.=eʔ .xRQQHJNN6mFܹ9s#GJU 9(Z0$R2j(:[hQn.]deeY^ϯ*Ӳ,/-/~EEEPS 0=zD ^=cW`}0=zD ^=cW`}0=zD ^=cW`}0=zD ^=cWNPiGT U?x*A<ʖ-[""";vU  ^_{KMM}9+ˈAD)T[neΝڍ^Jh𪠸~%%%/^x`ڵL Ο?oL pذaڵSn,*@UxFW۶mɓF@R=tгgzze˖j՚1cF)5kܿ>8s̈#5j*\92g/"44Tu^_|'F~4#*h ~|#GRzzz(ӧϘ1cewMΝk׮-BbҤI{D\1`=zc^S~駖-[7NJt#??. wjN= (Z4hP||jN=V1 p*O@@& 55u„ TgϞ U2=##ԩS%%%C [eU-zA ٳx}k4G˦PUƝX [U@Ο?f>b :ʪ_s缦xu4ªǏ֭[E%F34)Tq'!U` ߀ g4,Ux{>YhQ.]4hP^HJp/_?U QAnn.Klܸ/а5 =}.r֩SŋBN1\qÆ `hxꩧ-RsJs6UU-(GޅėFS5l %X [U / pQxFRos[vYf#GBCC}]O?Ti?H?g.\yfV>>|X|pK oV VZ ھ};~ >*$PUX_U~f۶mZ^& Q520^ ȫ0=zD Kհ}GNw߾}t|rJ?p@^;'RJݺusrrE{9w ݺu ܿ?ڵKC7##ɓXeʕROݻwzzxbCǏeK.Y&G㏩ fSL8 „Vg8p`ZZ3>6˦PUF|tcA«y`{8 3a[TT԰aC̤;w3g~76mXE;oڗo FUȑ#ŏfϞ-1|p(grriU$S(ׯ_TTTLL I,I!E D ]FE~a-]tʲXVɯ*Ӳ,//IJ)ʸ˱ U` ߀ @`0=zD ^<}4ɫy`{8 3Xv-~ v7#yNjiGT ~z  6.~,*o@^3 {[U@<~,*o@^3Xla~ɘc TkU`1cW-|* Pׯ޽{xxxzRSS}cPo喝;wΪ<6oܯ_غu&%%=ĉS/|UWɏ3f̠|xܹڵk/]Tf0,ѷ-WZZڎ;X*o@^ bpg4,gff\xk׮5fRpycR0o ֮];YĚ5k"##)(** &,_`JoV|hM6t]qʕW\qd>H[nmS" ^ ȫ0=zD Ku۶mӧ)T:tٳgeݷze˖j՚1cF)5kܿ~[|̙#F4j("""%%%77WU2!PYfΜi[9sjՊۀ=_F۶myc-oVdXp!]+<8r^JOO߿QQ53fos}k! 1iҤ޽{lb[L^g;rH:կ~hѢB $ yEɻw7l[f͚|LNᐪ( x @:4h%t@13s̙TakWa U` ߀ @`0=zD ^%:Կ,ز}-Q^:ul ˗\j.r u ꫯ(wh999$7n4icMuҥAT12]pA_5%xFu_xEE6l(B_@-3bWDnn's=T (쉉v"N6/7TnݺYkWaUST~,*o@^ bpg4xUnݺ5kAAAm%I}>RR9*nVψ'Lf|A:2m4w]\\|1*cȑ)))tA޽Ϟ=+?~HĻEC1P2ϟx/بQ#Tlr,Hx7  KAA?ȟQ ><...22299Yl-| %iFю_Cc,ew 6+x ;P_{Ze̤R:wfŀ4#*h* lR5춿P>}"C={V>|o[n۶mg̘A%OGJgʙ6mZbbbxxxBBK/Df͚%I̙ӪUH*gGgΜ1bDF謔\U5aU=v****66vϟo޼yӧ{5.\HIwԉN_7_iGT U?x7m}3Fݛ6;wg,ٿ?eXjm6yی%Kݻ[9P9wqHtgǣJ&zUeN0AmŊ/-k"2gdd:udȐ!]v@@<~,*o@KUl### ))B:qDHHH^^lٲ8:8z(ܽ{HxFUΑ#GBCCgΜYXX($y*ѳzp:8~8uVjWM,jh^y啄7 UU"}ݺuaaa80=zD ^=cW-|ZrS~%mN4IH PGP^:u\x177ҋE 6ʳhѢ4 uf}}D!(.]4h@… |YcMTCUBָqqsU5Q<10=zD ^=cW-|Z tVVm9B$ɯk$goN'N}HW#)))?ŋ/bFeOڵK\HϾ}HZ|98pW^RDx L&zUݻl:?ޫkCnzر.]*jr93pxFWpXU` ߀]NDDhqqqӦMy~8uSdY3(h* lW ܗ7٧N2 h* lW ˞׷jj=m U?x7 3nB֭[?s|]0=zD ^=cW-|*<$''7mڔ)11o߾ pQxFWpXU` ߀ -"i֬YR(a0=zD ^=cW-|=(Be˖W6j& \ vN=y[֮]{Wm۶ڵ^u ` vN=y$&&^wuW]uըQrrrxU6@ՃQxFWpXU` ߀ 3M6MHH!cw0^gxFWpXU` ߀ g_W U?x7 `IAAAvv2xUp&g4x^ ȫTx  ^=cW-|*w0^nO; 3 {[U*` 4#*h* lW *p=; 3 {[U*` vN=y ;ݳ@@<~,*o@^ƫmsQxFWpXU` ߀ @W U?x7 ^flڴF?Q` ygԩ̛7(T9>*>fw0^gxFWpXU` ߀pŤwݨU9>*>fw0^gxFWpXU` ߀ʰlٲ;wرC9sfĈ5"5%%%77WxaÆDGG:ٳiӦ%&&'$$ȷX& )Rf͚Eǎ0`@TTTllѣϟ?y<}͛O>ݫȼpVZQ:uS;ϝzD ^=cW-|*CL={ASѣG={<*1== )**pO>cƌSj*:&i۶mD=/^@hqqqAAAjj VXA7xbٲ&"sFFƩSJJJ ҵkWY>x iGT U?x7 8|pXXEtU~s)غu>e'BBBe˖#GBCCgΜYXX(3[&13Gwϟ/nSd{W6n(TUMDu-c;*p=; 3 {[UO=T|| ?Sܹs阂2իG\xEEFFvm͚5"e꯸aXdƍ7NL~'_WiGT U?x7 Z"PVebb L,((ÇL<9666ؼy3̂ m[hO UU3w0^ngQxFWpXU` ߀jҥKk֬I!2>c&eb߾}322N<-@V\Itpy^|Flv%Sz~cǎua^]rС֭[;ҥK^EMx <}4#*h* lW-?'nݺ5[ÇEFFf,dbrri(1//K.QQQ;v?-L40rHٳg{KÒ~)111$x?~)F ♀;3A<~,*o@^%N:]PP`x  ^=cW-|2g}uׯ7j`^;  ^=cW-|SNMf((,,t T"J5k%;vlQQQG>ۛ7o>}t&"… [jEwԉN_\fcW-|*w0^gxFW?x`:ٳ' 2=zFQgeeկ_ܹst|qnݪlxĉOSRR2yXDb3 ,)bJoѢœO>)TUMϸ ~,*o@^ƫm`4#*h%K.Y&Gi/8p`ZZ2}8y4Yr%)jz5jJ#ٵkLݻwzzٳg;֡C{u!ʡCZn=vK.y5A<6y ;ݳ@@<CbnF-}W"##SRRc3EEE2199yڴiץK;Y&9rٳaI~蔘JJJ?Q?NE#Y[U*` >wg4x8uTvvvAAQ lW *83q!CnzF f,xT` ߀ @W 0N6mZ۶m[h`Xëy ;3A `%3*Sh{1m8''aҤICqҼ|Ĉf4Nٝh'?yghڵkn (ڤK>}:,,,??͵ށ9XPQ~l t;b07L0_rE@Ĵk׮Iܹ9srٺu222:vHMEEEQW C9zfr>cx#,J!:rH_!A| j*۷o{Q6֬YCI[jа\xv~?i>ʔRRR(-~& .>P,X/׹s8 QޟF~@7#fϨ̢.\'O?~̌njs9Z֭[E &dee3|M>}yk׮±cǨ–-[?6l0ĉ*++ 4{l0+1۝ÇQɍ ><;;^nܹ Kô.&}EEEJԴYVVF卍MMM-JLLԹs2 QޟF~@7#fϨi:k֬g23iӦ%$$DEE;//OԡH)۷FΜ9O… ;uD 2dٲeb/bC;ftT򏀙kʧO.lҥr#o;R8#>a.W_}E;S.46KKK322ht4os2f,[N0= 3*>o4<Ǐ> `%3*>orcX ŬsXVB>> `%3*> X-|l t;bj|'ZWUϼA |A>=OA |'0= 3*>@ko l t;b0?p@eYYYhheҢbccǏ_QQnaш/)4ydѠYjqÇo߾_~H劈fK,k׮Rh%%%K?)ŋzDK߾}N*:::>>~̙-TX~=0:mXPQޟF~@7#fϨ ϟ[Ŭ⋔Qlܸ믿v7OG1zh2#y(0`s=ӉaÆ'?F*!T0Qɩnhh4im3Ѡ̊֏=Z^^N+tFTNRZEΛ7}Gy!%H)=c{W8 ñ-|l t;b,J)3szy)8C[/VB>2nٲ%!!oݶm[llK ֭[ѱcǘ(*z::QgϞ=!!!n]!˕+!fYbV?e2rAs`fg% Q+!QE)HII$77g?(T&O [j۷fu4Ysn]&4F|fڵdANJUU(ߴi02B3LgX(Ϩ ־}"QL֏;F+[l'NP54ݬhdĉuuu ={ܸ}K.Q6)7B?N+ *}饗(O+//״? &dee?S?3|lpܹn0| ~ VB>b_}MND/\SNQQQC Yl4ݰhDXdddnn..r!%!!!׮]+O>=ҥKtbÆ ݻwv222VX.\0mڴ:}TTT;6:::..Ad@,r f,[N0= 3*> WVZeC۽{wZZڌ3O ]`#t?`{3gT|g9"9s@K-[֥Kc6B1|FG}|f:v8exhIII я~ԫW/5X-?opG QQ`"R!5?o l t;b60`w;v츭-w@y_n€5|FGΝ;ov-[n\d >p,Gl|FGtҥk׮=?㝏JfRRRd4G @w> `#3*> v}O?((Gl|FG*((0@F |w@?(X p~,Q~l2GfϨ(sc6Bx` X3gT|9G[xQ3*> X-?@?(X p~,Q 6Bx` X3gT|9G @w> `#3*> X;p~,QP㝏8?((Gl|FG |۷M6/_w@?(X p~,0m۶}ߏСØ1c9a7?g`~Oǻ(X p~,E?䓨+W׿+;v믵ب-j dgO0.Q3*> X0׿KrurZp”)Sbcc'OLRaʕzj۶m~~f)G ?uPLH +e˖ѹPnFǏyyy)))ʛY#2͆555Nl„ nj-Y"=> 5|FG ѓ'OرcrܩS'7dgg7#F̚5K0qD*t&_4ٖőV 7n+UVVRѣimh69xlֈpC3;5nh O`z2ǻ0` QQǂa4 6WUUQRQy愄ѣG:u~3ZzjrrڵkلoĬƎ;"""haaa555JԓF 7/N 2NfxWQ3*> X0~74.++ ?㸸8D\dAĴk׮IS/h}} [%$h6ie u222:vHQQQT(QE%^jP;5n(6[wp~,E~%'NyWUUM6墕SN[uw!==w;v / MZl٬cժU rJ P {1$o~hvfvKww-ǻGl|FG fQf-\0&&ohFK/]z<33S3&''ܹs^QQuV.9-[ֿ[n嫯&-lXرcTa˖-~ĉaÆC-++ MMM-JLLd"3P|âN5..ex(Ϩ(scn۶{ ҥ 6t޽}+VPiӦ%$$P.Իw\-El|FG |T8pM׬Y ܄k׮T 6BsݻwgƌEEEr9x` X3gT|9G]p7ߧ]o&ϱnڵkGfϨ(scHbb"wÆ @ɶlْrw1W^3f|,k8?(x O`#t?) =ջv:|pZ?vfϨ(sc6RwqW^;vtocg QQo`#t?? (={={w=_5|FG |Hf(zRRRVV?(Ϩ(scd[n0O{> `%3*> X(IKK{7n(#|FG |*((=p~,Q 6B?k8?(x 6B?k8?(x O`#t?!sfϨ(sc6B?k8?(x O`#t?!sfϨ(scNȐ9 X3gT|9G @!|FG |PgT|9G @!|FG |۷M6/_|/lhhW^ژyx7 (3*> XࣆDr,&&fȑV.O\"m&A~4g3*> XࣆIyMM͔)Sﯭ]9_Q566jtA~4g3*> Xࣆ4]v) .P;yz&ȲeҢ|>jH;w{hvvqjkk)1bĬY4V 7n3{*=z4?~6ܶm&d"3999 &M:txIPFQWWr 0o<ĉi_.]/ySkJ>cnݺ OGG%wÃdg3*> Xࣆ$;666**VhB) )--/7oޜlBw ;v숈ӧO(QO3'N;w ԡ Z?r^Z\Qѣ&Jk9TN^ur:f wÃdg3*> XࣆYk/ЁD#Ĵk׮IĬmnݺ;RȔ^*ʳ$33S ӈBhR+WuhD={PʤcRyix:K@_/?k8?!${ŊN>}am+&f0V?^}vĝ,X@|/2o'$k֬?!g f~u{G>@> 8?!$׽z3gx9f̘sι[j61p1eZ?qİaĽ*466655-Z(11ً| ><;;rРAs1|gNG|<;PgT|9G i&ދr7kڴi QQQ{lbX,\SNT8dȐe˖{iiiFFFtt0_4kDq Ecǎ}M>]|bakCԲ3Kʭyw3 3Ϩ(scꂂ˥ C> 8?̢~k6a„>}޽[~'dg3*> XGSRRzd+MȐ9 X3gT|9D2ѣd[x À5|FG U> y'?@|aA>у+3~ҥKQK⁋u}9ֱn  ˱t O  Ϩ(sc˗/{߯_?ֳgO|>sNZ|kZfϨ(scA͘1GC IIIAJ<3*> XGkSSS"]Gl|FG LT|\ 1wwKQ!QQu7\SPPrc㝏8?(x Q3*> X-&d㝏0` QQo l2GfϨ(sc6Bx` X3gT|9G[xQ3*> X-|l2GfϨ(sc@|FgT|9G @w> `#3*>צM˗/k>_DFF644h+QBm<<Ï> Q!QQC" l;jԨGj+O\"mg:X |x6B>⣆sss5u5%va?_:*=zX-|l2GfϨ!w׮]Jʕ+{նm+WTVV?>:::>>~̙ŋO=Tbbbddd߾}… SL 5|FG ݳg2D)8qbmmKdĈ4s\ 7oh モ'OѣGi%;;{ܸq-eYmhB4+İqD +7~==m~f(4LNNNuuuCCäI#^^C <5JRSS{1+Z3< >c6Bx` X3gT|Ԑ6KLLIc6Bx` X3gT|ԐfkV^\\L/={tV(Q(r$Ӯ]& [.+++***33S/BHWUp7(##cǎTHjW^`QhM qnnؚnN/ڻŏ> d㝏0` QQC3f\6G z ,oЭ;ƕjf0V?^}v]>Fd3fpsf~u{G>^;F~ |,k0!Çή4hܹsE _̘1crrrΝ;noݺVhiѢEf26.W3p1eZ?qİa yϸM憭/NG|<;D㝏g f4;vlttt\\ӕ… ӦMKHH۷.MmmRػw\<*,--Ƞt2,İqapN:Q!C-[&&f`ֈkhakCԲ3Kʭyw3;%.K.X;4桇ӧݻ1ÌwKQP㝏4NKIDATJ=yiRSSzdB?d|w@?(X -((:tm͆ ֯_?$3yM; `A>d̀Ӵ8REp6Bx` X3gT޽,]:num-qC~ |,k˗/HKK֭πS`#t?8M0` QѢzR>}$''#'} l2ϧI` X3gTqMRRRjj*RV=g X1!wKQ!QQw5.KpD1~"Gl|FG _@)\^ `A>)\^ `A>O@O(X p,<@} l2~"GfϨ(cS`#t?!> 5|FG _@)\^ `A>AQqLIIɌ:h!..Eا\Y|6w?~5M64&&w'sn`qyt|۰a) T%|pyF~ !G믿|F| 73 @O@g,|,+ 1v8S_Bo%=a͐G}r!?OÓh+m E4Kn5 )\^0`3n8YjUII(N%aaaz+r &< GFFR;?ljjJII;w./]԰ hm۶*j_\|Wxxxrrٳ/]$B teݺuO>$ETyӦM1[/۩S?P_a޼y]v;Tr-ڵ/ ZgGyرcBifUUӧ#zZZRj*(/jnOS =o֟x =Cʟ]/H+ݻw:,"h[n:+V{Tcs˖- E**+ȟȭxѴ_@)\^0`K)SDV4OK>*ڙ>}:ڵK\~. 5z5P!)/}Qzo?~]ҥ a# &Й3ghۦgEHFӕ+Wk׮iꎷu֕m oKrdQM)!y[}'?4 ^{Mh^r-%zEExIق"%q{9P!ڈQ?\s֭۷o?xիW 9}]D{31ŧyd:7B_l0k+"tA6ּ:YK?4<"D+mtϘEE;|FNf^TqHb}>~Y&44K." kj߾}vڽ ~ 0@ğ`?|ԩSEHnfSSS4'ԲYuqx/^? g+g,oƖ-[Zd/DX|F|2yyy&Є^L׮][3d@G(^ZOhfffd455СC~N:uG/_~璓<))__iibZzubbbTTܹsE$*Trw_' Yl٠A/ +3Q /p=mv;w6Yd@GXUUU__M^F/ ./dD0`3ELI}&3n/86ҿ ÿ#HQ|4q{9P^_kc`cǎ)EO@O(XVpz>m̸1PLS`#t?!> n$6mچ Ldƍ `PQp#L0ԞS`#t?!> g^}U=s C1~"G,]>G?g(gT| !> `}|FG?g(gT|DQPϨ(8ԩS/^-5_DFF644hG˚ZMy~R> 6B?` XA Q1;6>>}3gάV!5auMCʕ+EDDiIk MPƎ5ѣݻws=T?&&f~;Fmi߅IZtĉZm3x./dDR,+33*haaaTT]1yl٢wC MΪ0%rSϟMOO:,\ZR~ӟ Җ>C~XԧpyF~ 3 |,+33*h~^ymiGGGϜ9Stڵiii.))RRR099:eMMǒ%KĶ+WիW۶mݫ(ŋO=Tbb"mطo?\cT7l|ڵ+44V  at.^ :rxzjтVy0ٹsgxx8,555kK)Q9sVDae}(V%0$&&Ě*--:ujnݨw}aAsvUUU!!!xy愄¾̮Y;\pIהJ۔6C=DYYYbP(M4}7HNN޻w/ݻwSI)N|2 07E(++b Չ{Y[7UulrBKjJdYʮ +!J ME7n\5mY()VLLLvh­oi>!Gׯ_R8vnV)M8fu,Ν;ϙ3G|3!>CA>2W_Ֆ5kn6$ ,w7r򲤤^*i&є|FBӔL?İ\ߔ;w4ۺ\6g̮Y; ˮ]֩S'3dK̘1^s7LNNQthxa5}ʻw_BDΗQj.G,PϨ̢.\'O?~nGvvv}}}eeAΝ6V\iѢEP4K-ƾKW^-//Tf&L驘Ԋh$[_bXoJ?A3f}I&}ݚ:mnj#~EJ.A\، q0lǓ 1uT!"u|giNMDoߗ>}<3tMΗ>x3 =G,PϨi:k֬gϺcǎl'..nV4VԜ*9==] -]T?߰aC۷oOۮXBRr5mڴ}M)-ub>s̙z())cǎtY߶V9޽{rʋh~}30lǓ .Jȿ%=rHJD'[anمF}0O#SN 1~ӟpv\pK> 6B?` XA QQLp۽{w޽~颢"m> 6B?` XA QQ ֵiӦfC]|'S`#t?!>  ҤP߿[PQPϨ(@0QRҳg>}0 > 6B?` XA Q3w;vtxg(gT| ]699Y$'߿ޫ|>Ï> Q33*> 4D22dȐ=z̘1C~,QP㝏XF QQ@ e2hc@|2 ?o`#t?w>  t. ~,Q~l2G>CA>> d㝏0`}|FG |'; ` 8?(x O`#t?w>  p~,Q 6Bx` XA QQ?(e p~,QP㝏XF QQ?(e p~,QP㝏XF QQo`#t?w>  p~,Q~l2G>CA>>/swUJG%bccGuQ߭3rC,fx O`#t?w>  p~,0Ѧԁs=J?>777==]SnXfʔ)+X [ޟF~ c` XA QQݼysddCBBBKQI v/7D/\@N\\\llɓESx=pMS%3奤DDD$''%T|^dQu l2n)  p~,0q?sLQ(gϞ C є+s=G=ٴZJHF1k,Q>|չ\.j|ưǏSm۶:_SS#BV>g]g(gT|9`կ~tUwW_ڵk;Srڵk{EJ^DbbbhMMMT^WW'ٳgڡ:֭ʢT*33P>@3{ |2 8? ڶmCSrM+(8}4\. )(>)))*Qi&Qn֎aJ   > `}|FG O>$44f}0oqRBJ?z5gr̘1999Νs71[nYYY"oFbcc_z饫WgffrvhrE%&&bGAg(gT|9` a„ BJ!f̘auY{)>f6mZBBBTTT޽D'O>\fTaÆݻS9%9+VP )--j_-]T.|l2ǻ\.WAAAuu6 XA QQ=m_7F~ |{'|H3+33*> XࣶC>9t?w> ޢk׮IIIw}=Vg(gT|9Gm|s~ |n4ݺu {wJ` 8?(x O`#t?w> 7FIiN q PϨ(scACA>> QJ2ӥKo||433*> X;oQ2C9 %325AL QQ?(xE3ל1}|FG |l2Gs. PϨ(sc`#t?w> _s> p~,Q&`#t?w> _s> p~,Q&`#t?w> _s> p~,Q&`#t?w> _s> p~,Q 6Bx 5AL QQ?(hg(gT|9G @w> _s> p~,QP㝏/ל1}|FG |x 5AL QQo `#t?w> _s> p~,Q/LOw}W)ٷoD65jѣG˗/rLLȑ#:$WD\;_9 b 8?()55usR(-ϟMOOהV2eJ J;_9 b 8?(c͑ /E&oٵkWhhܬrXXpe8qqq'Oyyy)))b&y뭷(JǏ9sfccRڵiiiKJJw!L(F~ |||433*> X࣌qO(SgR!ChrsqlEmm-#F5k?~6ٶmSJ;?p]]]EEŀ{9mH \.*7oR?''aҤIC5kH`B 6Bx 5AL QQ5sԩ>WXѡCK. )$A)7gfTTR"TUURZZ*^n޼9!!VN>_SSiȑ#իIQncX.8qBܹmҸّF~ |||433*> Xf~_%%%]z՗vڽ;nŬ\)v޽{_|E:pESS֭[E)PfffaaN]]vϞ=Jqqa`+Wgw> _s> p~,QCڶmp'[yYpŊ*>}].k,X@)[̚5kܺg\,r- |||433*> Xࣆ>W\駟㥤0oqRB(z5gr̘1999Νs7g&[n2ZilljѢEJ;'N4hٳE#ÇήsWg 7;??(hg(gT|9GIuuuAARJh~?a̜1ca֥f^dddUUӦMKHHݻw^^fddDGGGDDo&~ߌ6U~ҏcRӧ7443Mw> _s> p~,0Ѣ'|O>w>/ 6Bxw_9 b 8?7|JJJ֭'3n?g`#t?2> _s> p~,ѢSѣk׮wq'3n3ס?X|433*> X*&P %d->Ec5AL QQEuvwQ>tRѺ!auA_u[>ar;sfr~[[[oۑ p~,Pj={T#G; F~ k-ka 8?M0##) @`#}|FG q %6=z@Jw>CA>&iӦ~cg(gT|9GMAAw> `}|FG |w@?(XVg(gT|9G[9l2G>CA>> d㝏0`}|FG |'; ` 8?(x O`#t?w>  p~,Q 6Bx` XA QQ?(e p~,QP㝏XF QQ?(e p~,QP㝏XF QQCK,66vԨQGV4X-|l2G>CA>⣆D>seZ?|nnnzzNcc.s$G[M; ` k׮P|ʕzj۶+W*++Ǐ?sL%xSO=ٷob*p”)Sbcc'O\__/*奤DDD$''+}ڰP?۾[QQQTY9S׮]F <ĬqiG[a `t?w>  5$3gϞ2dR>qK.QɈ#(s\ 7oh モ'OѣGi%;;{ܸq-iYfQǩm۶:CA>⣆ >Ybb"Mi+ߥd^9rD\zי3glYUUUHHHiixy愄Z9}tXXX~~~MMRٰP9tD'N;wM7;X-?@?(XVg(gT|Ԑʋe]]xg e2r EDbbbڵkDueeeEEEeff ͑xոVfٗxyQ̑G[~'d㝏0`}|FG yh>Xf\.:uJ.544,X >>BHj\ vΝ3xG6?(e 5a>C]___YY9hРs &deei1c;wݜ Q33*>J \.Ri>v踸ӧ744 .L6-!!!**o߾4Ja޽򨰴4##ZHOOeX(獋mEFF*?Afx:fan#> Q33*&ZTTD>}޽[ ^\ ;>CA>G/_>tTG%3n3 2> ;F~ |,+33*9ZTTOw޽iɌy>R7F~ |,+33**ӧgϞTdő-'; ` ݻwRSS.]JE7:փ~` t?w>  EoWm'Nׯ>'ԧpyF~ kq-ka JC )͈#Ҁ > 6B$PϨQ㚤=z `(e }s0!wKQ33*>nh \.6>CA>AQ3qƽ, QT>-փ 6BI~V|xϔ.E~7~xm\^0Ms2Sg|x./dD0` QQԧpyF~ 'B|,k8AbQ3*> bD1~"Gl|FG?6rV>Ux#ŧpyF~@7#fg 6B1|ZS`#t?`{3g)> 6B1|_FOopG8:v̚5k^yv+7|o v8,,X( W .o?\~yy 7o~ccʐʹ`dǂEY0Zpxr5n*Y'ǁł˵-d8' 8,ʂՂśqS/X,ZH{KkH8' 8,ʂՂgxF` Iֹ`dǂEY0Zp7]L/^ip|sɂ;`8xr9po^5$Xœw epjrt 3xu kH8' 8,ʂՂgxN֐;p` Oq,Xˁ 5՝'!w:,,X( W .ky>fͦ6m8pLjEޑe;N Iʷw`s+Ϯ@9Λ_|qp]JGt[}/ޠOV?Z V?NY]r?8r[bo={|G;u~K׮O=̑#'ռZe%!!!1~u7rؙ#99B'o6v"$ߩhСxu ̆YofR7#׿~="""^JvzNS*mjm兿J­-[vrcw\uTTTiiRcG/E^}5o߾ӑye?SЇ f=B.{ ?/5j\\\|XXXǎq\V_톗=>\}ۻ=pΆ EToV,Ŭcc>T\2ō] ~zݠhoO?L9G}9?P߾ʞ/ⴷoKOڟw֭r]4KYY} /D'='1c?Qxxҕ˽fCҬBof?#B]Sr-:u剴pڶQ~[yg֭{v}5p7vYSL)|ə))]bx7Po(%|QI8f34Gaw!ý jeII#?xl[Һ_nl8Д75 v:@S?tΜÇ?lxŰaS1-?֯ڻw59d\7EX|5|?KNvS;}lR@A  )1ԣo?'o%W_zEWP]PwV+,\@JSP?(/tRʜIY&8g.BTYfCҬ?q]wM3ozWU?ϟ=4&&FJK1?:ٹH_b?뮌e%R? /3z5Rɗןfzyv߾!j\622RÉ{lQ{VM_|Ul,7vE˴{DIYY=ϟ}v^=qe RǓSnrL} K EGǼIs,e2}[f"Ӭo~ZLL, e` smT$QݻK4_WLN1r ,uOS[iG=-iшև4ˍ].f==<Mz2bMh|wJJW.NTX(gRڼ]_ʂf|NJs \;'{|I5M(;|LUDDҥ{TqRtG5"4\7ˊ 48,7b[޳o~{z-[=v{Û6`8TR6<p=uڊ.s"xfwA^37sI4>>A,=|iD#/C4//vS "Y{\,7pǕ.zk?/ n5}O԰*u<>foVܨK=47xjY+j8 epp+f/E3ZzE>&LA2ǩ,t4Cx^ATgv_n`8L&44T?8[r''roוf˥dOϻ|fc>X5Z?mtp45t\8O"D zsPiiEv>)[[:t놧MMJlxQQG=*I)#eo"(!%{6[Cܤ*RjӼg޴r7P{LSK]l޵GUeDh# <-Dy ̨A ȨDHWBa !"H(̵jCY/wٻO7OT9ZkW}֯a~bx \ThN:`d/<]Ig^bc[(>dXa55O,gaTuiu'2gyǏK=-/D>7畋Q9|xo58/oxaIl؉ԫ̭,r˖0T'r8m?Efee#h۶?1Ȏ;hK^0|sC*DoC Fc; g|#7e Ú_Y=2qupn:Mo?k9PgjkcWQvӬ^LZmuu~V…cτ;aƌჹENݠl͕?L/M"S'\Uu,,,,ЙOUbTM@fKӧ/w`5q·k~jAjDmHN),"%ߺuij\LVj-z}nC0X{c; \ hvaays!(D @fqǎٳWtTC2Nc;|Cy^/&&W5xaٮPUv2*s+f!eZ-kcЉlm)maR`> f懖vkT% 772.dkjÐ.^x bgn_.^+]>t$`ؼ&hРT2TXg8yf yns5%?a7@q~3u0%fn^ktj[t!fC1XpL"g`w+ Al_&DlO.ϔH[Ti6`۱L[[lg< vdȐ73<˗1hAjK'^qqXȔΚ#hQn'α1ٳg,ضm+7? ω26ԩSjD .p`n4+գX(]B0=}T uWY ̝td9OZ4s"G7dJ͕`y7JgzH4M覤}Ϲ$~Ç%׬ln>'Dj3qÆ|w Ξ=_=vIl`[Rg~~FknwղߑyWE&u2 ӸX3{ j٭TK>|bgS_;>ʕǎUq?=peel/|B./?%,~}m? ܺM .ĒRt87 f.XĮ^n0Kh|CO>[$Ν5lʇ'>sI"l78%׬E:RZz!<%EhwŴ7mw?*7I<>cRah:5[~j MI}Ͻ{'~وx]Åh'#ocGϔ)Ϝ\Tgn}N@f֍%f'hD WN "YIC H6۬i۶RT wSS?D`ݢјzfz,k矟յk7)I105#~_Wmn2:膯+/ulekOν{Kh|VEByHI/XD|Y@ٹ<6m 2T;<>͸vȑ) ժG`ݺ%D)jZM\X'4OO9tRmHjTWY+Vӹshb4!:dw  ͯ|X ?Gy99r4"7[PـucBl&38azՂm` dԩ3J˽CAO87r(de3(tf L㺚EMetv֣nRg8 3aSF~(%XYf[ن̧;2C 롴1X :Чlud>gKu_H,_^$. vdT6,KVZa3biB$]Sl ID"'MHj$R>sd@K4MkJ ]c!:!iHI\Dg y闦 wMIk,D'$4"+iVg\L4MkJ ]c!:!iHI\H%#MJa>?藦 &Aـ5W˗ߗڔtil4 ٛFBBWҬt .gΟC&WW_p[s͛?f_&DfJfvXNR_v%ֽC|3m ] .f>˲e+#GNlͅRA7$D 23ywh,D' (`ժW$cE㬫!)ǫ.GnGvq]"/# v<qtA3#c5?Ə֠ m1Rdz[0_dB$dVN-,gΜÿHރ~t .gNa%‘s_x:}yiUՕu6?ϟ?`U7Gֹii:l߾c}#k8T\(bXJJgK7ސ,**SM%x⍌Uwܑ -c!:7M@׮҃K}.knn^BB[?m\hU_OvGH m۶E3g.*p7#RkJ~ʶ?B'\$6|h^~e}tsh433?ѣj4GprN+D\ψzBh ,ZZrrXQUݴ4KKS6mmCK/-޽'2={ H4{CBdbϞ=8޽+w]+BtB'o/ }__ϝ&C7oȾ~G&U>0G"PXF$#{G=U^~U\Gv,Ǒ7!dеk7ڟkޢEK1./XDX94Sms|d23dt=^ttgX8 yV$N<kC Z F>!@ MP݇3H~bbbx?b#r]<p" 6lzՐψ?_N` O_Oٿx]\E?tsh|d_T6)ADx3j"VUoKKnݺ5bاn*o<7$a (>SYy}e!H-z4 ڋgC]XIO8DiovP%?fjX>Ȩ3iH>C } ~mɢ߳2++ r'OڋQIސ@ &KLI>~$=}a?]V}!ݒNq1~dʔ~|^r¥x)iK#:p @ gyoVz?=>ÇOq"8q7oر̙EE{{לci곘A!l4%?7_+*;t䓿-/?sgA|[Kbccbժ @HU|MKHGbY/voҭ''ywv9H$n3ߩS/P9ӉbzNYH,'g9 膦mENb7$a (Ĉ"Ep!|$oH PEBAIސ@ (# 3''GV @ PEBqL(oެQPP @  (!Ep!|ر/ԉJll|bEƝ;wd;A!N ee֮&617m|]YfP@!F)A3@ \|@ @ @ @ VOnqwIENDB`onedrive-2.5.10/docs/puml/client_use_of_libcurl.puml000066400000000000000000000020451513710110600225440ustar00rootroot00000000000000@startuml participant "OneDrive Client\nfor Linux" as od participant "libcurl" as lc participant "Client Web Browser" as browser participant "Microsoft Authentication Service\n(OAuth 2.0 Endpoint)" as oauth participant "GitHub API" as github participant "Microsoft Graph API" as graph activate od activate lc od->od: Generate Authentication\nService URL activate browser od->browser: Navigate to Authentication\nService URL via Client Web Browser browser->oauth: Request access token activate oauth oauth-->browser: Access token browser-->od: Access token deactivate oauth deactivate browser od->lc: Check application version\nvia api.github.com activate github lc->github: Query release status activate github github-->lc: Release information deactivate github lc-->od: Process release information deactivate lc loop API Communication od->lc: Construct HTTPS request (with token) activate lc lc->graph: API Request activate graph graph-->lc: API Response deactivate graph lc-->od: Process response deactivate lc end @enduml onedrive-2.5.10/docs/puml/code_functional_component_relationships.png000066400000000000000000003554071513710110600262200ustar00rootroot00000000000000PNG  IHDR*tEXtcopyleftGenerated by https://plantuml.comv,iTXtplantumlxT0WLD زU v mWPJ=U&1Rb:Nu=4oy3/3+*rx-d~7ѷkcrEpbAǁRl灹𑴒yw iR, IV'Oϖ`'̙YF,WT2TΔ>kyޞ_QdCJzy[+Jk=d'E5*Q+@qlI;,}+'4=9ݜJo%"pϩI2=í$>aU7d듮ib *i ڡ8 ':׵~sNk6=BioxҌ"؉ͻ;_~(Ϛn]vLcm}t+r+Wsz5%'t~pI78ɧp:7c`qdJ1clW,hM4HQ bk&/qCEE(stxTy %UTdZP~Ị4p/4<\ CPeG^9IDATx^y" (C "2 "(C  R/^\~u֢"ԃ2脆=zHJ={ݝ}  :7ndswB/}  :(C@;2 #eΠY(C@P(C0 M2y9 $(C!Pa@@tĿ Aƌ!@HP1/CpY M2ysC  :b^_S@e2 „2yeh!DGRMR(C@P(C0!DehP!C@tPveA9!DehP6)CDDD|7=bB24 ei2DAAAff۷oـ  C@tڤ !J(C@PhuN<:3f011122W{;vlQ )aaa|>~PWWOMMVUUorr2LJO?1i$znWQQtDc4z:t'ɽcǚԱޓ-[m۶:ǎCO{?_zž EP~A!44c___ʖ׬YC5K0R^zQݣG.7n,--+^nnn˗/iӦ?^GG2N:~M聢(Wܿd]N:NwQPP055eׅ n޼IE 帣!S𖒣GһzLyf*aeeŽFOyyudeeѣGׯer 2{B32H.MHH~7Zw>JJJvܙKw,X@V^MwpY.e䒒Z!¨ejjj@KI̙3.\H鶱q]8uH~˗/SH 67n\8)J3()u۰a% ~9Z۷i/_d(m̌ F=_f e'N )ѣ}}}qҸ \ܹKﶇyWwZJ޽ }4...>>>G\ZZ~-O2pi}Xv-W =!@(Y֭[qTؾ};vM8KY+8TASS)D.]J) 8i999#5-ʕ+AAA61BQQsKHH߳gRܹsuuuv5suQ۷oѬ)*r?533JNNt 񥥵W|]VV}j.y{{^;/CCCmmm &M .H*++w5%%-WU!;vo\ ;YpScՋ;agΜ9Ύ;1Z<؛7orR]]>)2rJ޽KeeyyyQƵtE ~jĞ4J5鶾>[XXPFIu ;^t)~.ouܹ~ZZZ;wVSSCO3,,,))@pTzV3f >?}uQ紴{/^t#==k'&e߿NЬY(WQQOiܹ>>>ǏqF OzKjK3G6l(Z/AQh\OX???ZwzKY0*++{(C{RdJ{BBB~axuuuJvJСCqԁ`qZ؋@MMÇ(spp055gۥKJfΜzꀀi:WZZJϙpBz]ݺu^\rL# w3s;w,eЧIڵk8;;[ZZrۗPgt̙To-G>ADGGw1vvvzkq:OYHoɓE#/)^fr^^^BVV٥|ʔv@yR>} R6NXfffUU{ߣt4,,q={+V JKK}eVe//Ç/]D5\NޯnUUU## ҇N}=z$Mzņ *wp'1Lw7E JZԃ2dxq}m$-RzЩSnݺ JMfQGoݺE `- ^~}UJxU5O>JJJǏwppؽ{ŋ|NYY^^^fRTTDtΜ9vqhq2ɹ~:}<==.]:a ;wر ڶm}w]&U9xӏ &Z7306A` lMvZnD*̚@ JKKi Ni htNw~Ĕ)Si{ݡ"ܹVVV[.?]'R~-))IMM rrr255x{Ա)?RS 4z^zѻ|6-QW^=tkkkZa|>ZZZ6.[ԩSwy{g;U+[&شih nD۷;mJ&S˗SY9BTVVƕÞ==='M4b $mCCC333 rGDGGsסlϞ=nnnٽ{w}}}JB.\#{ɓ'WZ׫W/Jl<<ٷoڵkgϞMVϞ=y<}yi KNN~5{gI"OxaTnbΉ'rg(++sgs5 nHwMwxb\ݕDDWh$!ݣ!ѣGO׭[7J]bpڴirsswtWSSzI&)))[~SNeffwhodeeg͚㓒"Vlj !e^xqƍ#Gз{޼y >|ܹxСׯ7_]'55;I-n]n>N ===W0.wn7SYdee沏„2QA+WhbccCcs|jYpӶmۨs縋S]b{UQQq֭={Q>Э[7z---/\PXXޡM]~=oL:ݻl?2D{͛䰰08xm(N8VZZZ[nnǏbbbhuV4d,++K^zxa /[L0'mdcp @@/JLMMhT4dȐSuvIQꟑ vqPOuu5eYAAA˗/{zzzvvv{MJJjyE R1cP@IDZ2DEoNJJ mm\]]-,,tuuuirJJw)O~*6mhM[xnn .wqL"bmLփy72Hr ^v-""܀r̙_]t.Qw^[rrrddd;9zݻ:fɭ2#۷oh <%:: CmTLL)ϧӶZKMM }j;uTpC Κ5\w7ϨQ&NHQ''' }̜9300PR_|}wܡLu۶msҥ)ť6<<<--MB/>yPgϞ(ӦM7n;t ##M![A;2n L,ewϞ=KLL 4o+fTTTJ'>J<](@AD4񐗗תUhөS'9Qr;ydTѰ)00ܹsyPsEq>>l.-޾} L_pk׮oAUUս{N:i&JMiڻwoCCÕ+W8p6eee}@<{+U=z&ȯ:{l\E99:(((p"͙3+U߿ɓt'OI jvرj*ss#FtԉcǎZn h]. ^wmaanmm(C݇Nb+;w=LWQQaooJċ/&>vؕ+W/6,,%KKKʎ q֘6K,֭wܨ/_w!777===...$$Q3f~ڵ/B7FiffF7Qg9*P&QHJJӧw4{Ok k׮oDDDrr2jO7oܱcedd dggGi3FZ>=(E|>ʔە{ ,OaÆ L{uЁmj T ϟ?~Kpp0b=<<ݥcv U]]MghhB)Sпᙙ*))yiBB™3gnjoooiiibbGzrW^f۹%o߾-=H!(aʺ|27_ 5&L0`.]x<ٳgSk׮ӧO )(v}iK__>ĈW^][[~~%?˖-4WVVNJJbrP6~6 sα1h#/^ڱc}4mӧ噫W>~8pG>~?:: ?:::)N>>>|-DhPh߿O}Xaܹ#Gx]t)%| |2MaR[nQ1y޽{aċٮB렠ҺtŪ*SտV"2y]]]STmȠAN#6m(66{Μ9BL8v `$4U^^ޝ;wh XjռyLLLhٳ'w+###sse˖СCϟOJJzic6& Ph/rÅ ֮]+(7tޝ)SS:tqx?HgM^r%E~ٳ4ĤG_`=4TMMPU(j5#R6mڄUB}6&&ș3g祪:{;wjB4 yi\\܉'C[qNX~/w5,!͔ "2zyBBÇ7nHWn033[|܀LNNΑ#G.\dɒPW^Mܘ1c:TRR:s? {T-2ć ̙C9C#\yyy |2MQϞ=hB$h&8q>zAk w٭[Ϗ44졵1P(CHwFFF҈pԩ]tرc7nq" UViiix<=y'd_޳gqǏ=wM0Rq 2ć#; ƾ… .((`c ƪRSS)v7***s̡=xի[KwY^^6D/޼yiD+g7M (CH޾}ĉgݭR^:k,ggg233EՀ8Aخ]hջwo۷OJ&i(##ceeu%U_>|ʕ+Esє!8۷\[a͑P999ᎎÆ ѤI1pl͘1PUUuĈB=rŋ޽vA L(CǏ{zz.\PQQv4³ܰa_ڡ3gI]]_~t#22z(,,ܱcwyy!}fxСC؀Ј A=J&iCgll 4H:F]pSFFF3f 걱eeelWLo޼yŦM޽7!ŦMhSkv)b(CLܹ֖ΝK#GܸqG,swƍקO05fay󦕕K.u/8p&!HDDRbb"={(**ư *++rʖ-[LLLhE[m۶ 'nx56++V`www;;Swޝb7n޽{l?D;G{zzO>}ذaݺu*-rssۿ ٥@=(CKvvvTT,Y2rH]QbsγgfffG?`ȑ#4Ra ?0ÇW\)''7{K.ahªݻ _!HBBǣ @ZX+**tppz;c֭K,4iV;f+++77dff^(C4GNNιs缼(cɣڵkigZ\\]\\hCll5MԩS#G8p 0}KQi2wϧ #hÇ+**ڵ ѐzz뵵UUU-[F.Ҫ֭[gΜa#x<m"""hH;@* u޽qF@@%FFF22246mڵk)sN۞ΝaǶmۚtMa+++۽{qdd$ҿzm.N<Dm$++b>}Jĉ?@J=~Ąs $5.^feeE@~v][[{vvv۷oOJJlb P PڰaÆ3g{ȑ%$$ YϜ9cmmMk^9/_A"i|Æ}NQP7ʊхGDߔaÆPvڵ=avP4˖->|x݇jmmk׮8qJKK---f8W[f lE/^cmAL֭[4>aS^^Nk~DFFr3g:u G|Νwrr1c w544&MdgguI&_h+(C@PUUuΝцX__{MII)++c,%%%4D633;|؞,(@Ѻ^zE~ )CDw6hv=wHH<ٯ]Oxƍǎ۶m 7SՂ 6nH_7obT"2HO?~iݻw4hmpw}m1H ZΞ=;w\ӧ154 , @ah0ڎX!>]VQQlў={6jԨ3gw<ܱciMUVVI_˗jhhݛeׯ {O@Gyy9nf͚ūC7<==ccc9'l2yyyOFt dѫWfmJ˴NIIaVYYIﳺzbb"v֭[vvv};wnKu?|… w撚ӵ飧gaaL_<$ hwggQFn>}:'' z222hL)Wnn.C̼CAA (@ ڦLbkkښ!UTTn8%%%>ojjrݻw_xQC$Ë/lmm555y<_jjA} 4噴[5kNZ*G!UUU،=״*7fd[n9reԩ***;Ν; :]=K˗/AV.\(##3wX#""~^Vٳg/[ %I)CHMM֚eƍZZZv11 z͕+Wlmm)ƫVڿJJJII {(Cq;411V޿4l0JNhw%ѩӧOOK*Aee33Mxlɓ'5J{ADDĦMf͚տAYZZܹ3&&Gɉ !@_nmm-;#ggg!]x K{***n߾_+ыVUUgJ%ݼy3hx+W㶫l$\QQQ||ߢE;c 773gPf[z~U\\k׮}?T+--]bz\\r ϧ[(//;thO󭬬p\hC%%%;wUԔFlXٳƸgϞe***tttـ29q}^LNN/]||<455568eee/_޼ymxxW~eK.3}hwyzzR`eeu]6,EJJJ͛Ň˔)S+Q 7nd[[,..62)))ls(sXbEuu5h Ѯpk֬)++cI#!CC=--3gΰ1Q)**ںuMVV.vvv=IHHPRRz@RS>46bQQQʒ~ LqqɓONڰ?Kbܸq7nܐr'VPPh_͛77npҥaZGK1RS 4>ưjjjyyyls/^lll *@{eXXmd 4|Q I¡ k׮L:ɓ'l @$ 7l //lٲ0Iee%Rmmm+nWUbISL0a޽lkk6lXii)ZV > "o7pӦM7nܨa;I !Nn556 /_\fCnn.Fs)))acЦ|۷oـĒ2yx Snn.LMM===߿W(CSQQQbg[;99al;-H$44tlk+y)}Ocbb:r6 |4 ;w> ſ*2DSVVfkkr666a-[@<̚5klbLB&Q[[;|SNVjк"##Pwq QFyzzPN|hմ4mmŋc&cǎڴio߾8q3[/^Ғk _v h/_G4t߳/VRRuҰ0ssscccoo|GBB:ر#%%iSTT geFFFs"Y-Je3pLJ q%i:jʔ)Bx'FHsa;wrZZh Ň0aى'***me)ݻwkXAAv0xhs7o7nٳgXpU%%C'ӧOg[%q=JWڵ-UQ"ʆ /4UDDl<{l۶mÇ_|y>2200{5>qƪz+33ܼo߾Gfɓ'bInj :tӧ~t#**s;v/&U͙3Ϗmm=>lCS?~F_vu[[ۑ#G( ҆v{4ⴰQVV}/!_d ߾brWPUUMOOg f6l epN_~QQQ133c;I;wMڱjii{ 4($$VG1P\\LQF-[ݻlXP*EEErrr4Ӝ9sF)}U^^IumU[[lALJ ogR^NNSNQ b I`kƌ?fcIMM i"@)fkkʶJnݺuӷoߡC=ERRR~zayyӧ߿RYiRPP驧S\\̆[#11QVV;vܹMNrgѢE\bȐ!fRĉlkJJJRQQAy{СRAC9M}xʕϞ=cíe)c%%%йڼy{-}B]tPk@__6l _~˸qhKuuu߾}}= ڙ2$,, |MmmլY@]ti̘1>GBdggxznnn;%$$ :ȈV66.wPKKk۶mlS׮]˶J AA m߾}ɒ%lkkҋ/TVVNfƍyS9sflDFF2U~v(;;6Al@e` q-ee3gΰlk# !2+C;;;oooU=QK/_622b[LEEݻl^~=`& (^jl(CH1cp7 YYY<|܍cǎOjjjoxbܸq,\۷ԇ`9;w*++ w}A ݻw̜9wAiϣG?<~K?>}rx<իWv >2 (C4RD-)C0HFF͛7l@8fϞͶ4Ń@橭]v󫫫 !JQhhc{nĽӧO7$??_YYy,M+%7n988p?~رc3p666~GRRR>κ Khh4 İ(..Xmm !%{!Ȍ3?ζ m4|>m%@SƪIbŊUV2i(C999'N>|1el+kP{zz:~ȑ:Կ#OCs̙7oݨԩӱcǸvoV0 3g~gI-Zҭ[%| CFDD0 YhJLLdM2D#|O2ľ}/^̶ YV&9rdEE(4:u={@=(CHerrrnnn )C0eQRRµ'$$|,Ѝ7k|Ύm44p(1҆%g ! f̘!8 ⫾Z`掆HLLgDUUu߾} gXܹshhiӸC*>|^T?⡩;X# mm"!{!(O]'w&@K}b+..fuPNMz(C+JJJK._-Cm]]Ǘx/[?~L7\?133SX٫W>!?l/4ӹ*Aʾ{ 4MҒ=Qvvv ںh'''GϜ 4 y<ޭ[qsssvvf[ !}QV4dc_Ә2cƌʪC"vpĿC 0h矩 IKSTTx J= yKɵcǎKM2D{ߖ!>lmmͶ =ܮ]VׯȮ $4.]BB*ݻwoСӦM{%=z8x RCC/nAz5`d6t(CLߧ*Lihh4b_~zSSSN k1PgϞ= ?ѣG;t 8MTTTL8֖ ĺt钞,(CLȼ~ ӨQΝ;Ƕ4]uu5D}:! ,!۷ogΜ9rȬ,6&fvɓl@(o;wy4ld d"2ȴ R.\`[)$$dl+@жHMM-66 H2(C ezO/~ 4~x\]|RVVK4*>>~:2(CL!D>{:tPSS BBdZ A@333UȬ˶4ז-[0IH1c0(C eIǝ1z蜜6_@jhhիW׮];tлwo!DUO<ׯ*d/^/ \cǎbٳg4fQhK|ͣG@BB&x.]RVV> ˶6N||\^:_͝-S!jjjzQ"@I#mO dsZ$qӈ2D[*((|mǑӧON"gbb lm~ Q xgϞjz k=z\^&z$SǎvuuuڃvŋFMq͛7~VԆZ AJqUh*lg߿NDC)eq2īWئIUTT,]tȐ!E B8UUU|߿g F1rHeeewwիW[̶;_Yׯ~Ǐg[,99yl+@8::ZZZe!]XXSSS)o/ 5^ԩ޽{{yy1 WQQӟDJLL}/Y|;vLMMP !qrss ͛WZZ(UdrҊSLa['006Zuzf ٹscǎԲrJyy}444[͛7k֬ѣmi_N 8XYY?駟 :x6i&1޾ukU~V[[Kؓ'O@ Vhذaubbe!Ec/)|[utt?#G޽}~ۻB n޼IK%q *))эώAG#6h˗/xח @޿OlԩS?Huc7y|||Q_޽{iQ>>>\W]ٳeǎ(C|v +Vӧϱc8q1[[ۏ Z A VwϏmh***b8(C4 q)ӿׯ_?{]w"ϸBN>o>wŧ'e4fܠu !A|}}|~\\Λ7ښ x⅜\YYxyyy;;L62DllP9w6쪪//rssᇝ;wrqws=:uti999sٻw`!K,i 駨(Ko˵V"))iȑl={vҤIl+@wɂ2Ds>'Oٳhq]CBB˗_ZKpKe,6##Cm-(CHJ^(?ac57oaw=H%____#lࣦ!hQjjjMMM/8mСCH<ЎÃk"&&p}.^۷>]sIOO,۹| }ϟ BU-**|eee}yhI&m߾ 1!ST 6^م|:kj⯠¢?BXXX H===a%25-88!+9r䧟~ڿj/-۹ܻwOرc 옾g j7oBUҥKt͛78J޾} c 28A!Cm,Դ`++"#"tQ9iii6668q]ݻwHH*’%K~GU(~~~QJKK544?ƍGQ9?G ɓ'(!(![|@ i[f??QFUUUGCC݆ p:9\N#8^=zŅḹ%&&VWWC4 oC@el2%D haaPj׆LDDN```qq+޿';\PΚǍWSSsDLPN:.V7x'(]]]{왕M48R o#G9ǎ6ą qٸ~ !Ȕ!xɥlwء.''g/ 544O4爘OgwZXX`T<|^ u@@ xNII I +A}Zx^%|ӦM;ydmm-zLۆ(,,QBdf֬Y B!S6Dccݻ|3/ ZjUn(ؽ{A҂ Fdeʔ) 8GĔruTSll=5͝;WWW떁X{ѣGkii_v?ӧ4QFQBd&..N%DYYYcǎRŋ8&:pӧ[⨂dȑɌOI Lĝ=<ĉY%55U__?441)) Go# 0]\\= 2DOO/88SRR&M6"p߾};"30o>u/^.~tB ڡCӚLilltss:u* $UD@u7w\Cp<< ~=^ZZ3yyy\.7??'r [[[Vϟ?_ny߾}Å'/ ?ٳG ;w>!ȝ!utt`,:thΜ98ӳg p`⢫aÆw4GSSL]]] Teeex>~̘1#))I OZYY7{l֭[nj ɓ'MLL&OsLa666^^^uuOAмy,Y"w*Նv횹˗/q6mo8]TTE???--֛455xҤIԃ`Deee~ 6`p8_}Z8.{Aڈ# p8(cccuuuKJJp p`O?xYy<"c00 !HCEPC-׷o3g년g09Qʕ+utt<=={֭]hQ߾}o޼s̱777Ҍܹcgggmmꕋ/nW^]޽[0n̙tSa0ZXXȨ J!P6ԷPu:tѣoܸgϞrU&L111Tik.SSӲ2 }ĉ8ALzz!CvC+Ù3gιs}0`LG'Or/&&&L}u1 `qvvNJJƳ~0%D.w܉"/Jن̴tss+..9%daaF ̤/_JѣG3g^lڔ3GX|}}qd`b ;OJJ {Njiiٺu+8Ǵ=f !2jst>ʘx,Y"}g_<&$$#x]/ӦMQBӧ: !DQ QWW|r>J_{ .JtPFDDR),,\t)f͚cV3.\ 8A$24D#Lllȑ#tttlž?bgg'棱qVV2;v앗ϟ?j]vIs>oQAA LMMͣÇ(!"Ԇ Sfz\tGPee%Lӕ+WpZ=ܻw޹s'w[!(m m=d>~&۷oCL˃8!O<?~<$^cg222555Ξ=+Ç={(!i8!Ȟr!ZZZbccs:?tqvkUUU^6!>~4_g)(a W PEq7olٲeĈs΅Bu9vԇ"UWWCjbb";2}QF1~ ѝ;wY#~G5550) E W".NL"{JІ# v:}_ddd਒;all:N{ss]vի똘[[[. ˗71}||كr=(}}}a9ijjӓI oݺ'䨡aӦMڡ>|NTTThiirrr-[ƌ(-`GzwDa&F!!Dކb&Uk֬Gv*))8{!!!ׯQpӧC]&) a#N)\~] FT۫W Ş+W8K樨(xIII8'c/_:t(L~~> ?xp$=x(MIfWdhhh8uĉ.\Oѥ3g9rG #G"cmC=((o߾ݣ}y~p.^Ct沋/Ԅ2C3ZC1 .]D%iӦ!CΟ?ի]t=zdjjr{{c{6싟ܺu 6C~qd|⑑8P[[ёk**D5774̙38A!6Dqqb/~-S]]ݫWP-ׯ5==Vxx8l̒K:3c Z[|rƍ666|>? ڵk/=pB'Np͛7T__%ʋR0a† pTm߿?<;vnSאG1mmlKHHQB…  `C?>؆y@ i:|{|[[[mg/ \\߻wO><+**pH0aΎx zzziiiǏW>|={vxӖ1cB//e288XGG'66">_Le07 Y!Yc8J!2ú6uuuդ0Gv֭[vvv۵k0;)N)b0ׯRm…ׯ_\SSӫW/y.֭[{ΚG||<ő#GsV[XXQ'N@Aill<}# ~bP{n>}DBǢ6L༽Urʸqp Unڵ8b0#:]l,(SaBϒ3d"##݇ŋ߸qCCK.Af>='UVᨢ}Eۛb>֭[m%ϟ? rNNN=vQO"liC@fmm=guk^paĉ8NCCL1߽{;pB)o.uuu0ݸq#NرcĈt2zٺu,--]eʕk׮QϷm( 8*G|>?33'&,, 8Сv}}}bb"n*\jO<%D`{/Fa V!>}jhh-d777ɓO:꤬lժU<oڴiwi65k 8AX,''gڵy&~lmm۟{/SG166'dҤIǏQ_y 6668-w3g\`0MCܹsW^"oC\vMWWW'Eyq#۷oQSSSc##ѣG+pE.lٲ&v^566:t޽8AX);;{ڵ ӧϒ%Kdz?ի'd8  'Ϙ1cٲe8 :::0P+m[NCC,99YY aׯau !r6ѣGaBp PǏk<}}}UWMMM'Oj|r@(==NDDɓq̓'O֬Y{ŋrCO fϘÒ>B"Yqqq}9rd˖-NNNFFF3KZ$Dm-X`ʕ8J!LSd"228NN81c D~=z--- S>{+))Wͽ{#fC?033344 }6~,Xbݺu8ʴƾt)ѣϝ; Ą ft>č7޿СeggGݙ3g\\\>}f͚D TXX]VV(Ŵ!ZZZ( RS3'ON,^xӦM8J>//㣥&{{{9Cꦾرc8A-++kզ} UԊ-Ç)uyyy666Zڰ :::Yo`` ӧݻw ئǏak_ WA:u;zTjҥ8J!R@e޼yvvvUUU8~~ŋG7˗/H8-c0urr{bŊ)S(QعLׯ|:9Gd0ľ}\.k%ټy3RqT*++ /_,`bbٳ-++={O'񣆆 -A䬤D[['!9nC^_>KT~~"\paر8ʐr77-\Zw ˗ vCϞ=ۗSQ'w6K=uMMMwλh"%ȵ 4sqJJJrwwM4 ~GI; >dzr~~bVIOLL "G 366611 ~BFFF(RSS{׮] 'Op&i8J!LGbƍVVV>| "qo~zP%"[TTϟydF0j  D :$ճgtuuqB 6DccѣE:ݻ7~ L)nD׮] 3f77jܹsĈPƠ8ĉiܐFKK.\(֯_z݇VgώQ9f{{7ozU kÆ &LQА{{{ݹsRKMMD:lyxxb$3!-[6yd:P.9s@=90aݵkW~ZOm}UN'r"---00POO=PTĞ񢢢$ڻw/ W~ƍÇN:˜vرpBeիWG9`'N܌H޽{J/!oC$8A:;(njiP>}毦{쁙}! 0b@ -)j6k׮@9dccqF%٤`YkX]]pz\.7??'d ol)S sKIIqrrQF8ԩS8Gȗ311G !DR !`>|s0 ;Mzz:~H%-8J:t2dӦM/.99yҤI8ڹ;w̛7O.oJ`8}GӞKEg$XZ.\:tA`'9B:[BlCn ҥ?xGE0gΜ۷(7o褦B 5~2rM}}* m455]r6?y +  v޷H>2ER'|w;w Axqkkk C1jY;|qϥKH?Ht6VѣG8Ϝ9Ja֭8!GQhjjZf 2$8 88vy 8N<9`v\ӄY///%1ӆ7oqfݺu8*k׮(aT``q9993:: V{~qFU? /^ލ?ѣ]̃oܸahhTWWsJ mmmusgϞtuu|2Qzz:lK,ڵk(فQرcwppuNC:::tm !Dz !222`&QVVD48*4jRrm@ z[dzf͂RaҥTI"gΜ177kboOII.ڧ2KTPPPߢ;ŋqN%lٲE;޽(гeggNjmm-zʕ+l7400pss{)N|%1Iۆ./ԫv+ٳg6f䑑8JYD?~'e˖ikkϜ9SN :롦o߾׮]kTΝ3g=z; ;;7n`^^ސ!C\\\޾}R*FvqơK "]|vݵkܹsJnw+((8 0՝={6]7Gz XҶ!(舣DݓŠ[n(aB||?J׆ qH'88RRRƌc``>ofVQQ5O<SaFHs߳gOii)~gϞ-955U__ˆiVT3%`/8p?}>3ٳ|>]=<<$ P> x<͛UoW". nC!$oC~ZCC˗8A'-M rڃ<==Zreߊ_~Ga9y$ Ź"묭=}0v}љ _dЙ{ 5#//F +ŋP/]5;x~qwjL֬Yzje\wwwAJ$QGEلiHކEpHdԨQR֜p0x~n߾Gի ---??l<]>>>Qq|ĉ8J$5|݆ tuu]\\گ?k,IKh0gm@%qttܿ,Π!` ;ΡCpNuA }["==@[ZZvM[lB ;o޽{mhh3ةCܹs<o޽(ɓ k]reذaNMM9֭[쵫"ab޼yVQ")qTPmdaa!+aoff6tФ`f(ZP^/jummcڻn۶ |Ԝ8qbM0Ai%%%vvvPXŀiiiPkllٳΝ;`r}>;5~B=ǧ kSNё92MMMZ"I{V%+11 G4o޼M6(pTZZZ` UI\\\mm-544`V*5; cgPC1MMM ,r"ۦ;6m4\pgϞsss9U"??С0>t֭gϞ_YKKKU* 7|>8=xW^ao]WY466޽gB& 6X%H҆Mܾ}{ذa8* %::dWn`c2e NjX~=LIa/PNukIO?ܹ?&L uB# ~111>3iҤCї?ڂ ` QfkCCʗvGQ\.wϞ=Apuum}*GGGv>#}v]]K. ]I\sժU>|i3Os'!D'nD|>_+"z-L4qT|fff_-9BLLԩSqT޽;Lͅ^z)~',===֮hUPP`ii)(w8Ç >9YU ԓZΜ9cooiӦ /駟#ıuVx޽{Cy,sM}}C9~(**!t׮]uu ̠A\%b!N>=p@%RRD燣D40 x _6X:ì 06%Dhhh@u%=;/zzzFFFw^-BF:z(}͛7orm=TV1cF UXzz:χ}p8'nݺ#Ͱ婸xȑ...Ret&L055_qT`%ȟmɓ'ڵ G`!}Y^^I׫KfʕR~&7oΜ9{JC=z~;&x ȀWzBu33X[D,cƌMk4*Dd͂HFĎ^lɓ''&&⨂+ m phUP'NymܸQGGvv:Ά-'!s!Fy%LȰQXYY]|GIJKK%ʕ+ܓpYݹsyUWWgP*//p8U1ɗGxxxݻU?MzѢE\.7::VT1III8J! E9d+zb,}M2GIBBB$;!HeڵkfAԴn:>smXXXdeeڳg*!$ Y"222,,q ÏPf縹ꕪ$11q„ 8J! wޙ3g(a˗/qT|*yLQϷsttt=zU|ΝQš6$kC@}"9>>}j^:h -0\WpB:!Fѣ8JXxRx\6m4{l!T ]jCH )0s`=QUPPêڶ!$kCoFF@ jUΝ[ZZD^G !!%xhÆ 8*j Nct%%Lm 9p@ǏO>GU͛ϟ mi0ckhذaԴy*utthҢԞ>}ԄQSoի#GQI988|癩Ά gW χO G !$$$xxxਤ|~nn.N`/ĚojCtmϞ=9䘚⨊sNq԰ ! qPOOGۀٳ_~s˗}=u{ ׄiԆRmРA8Jd8*H%8*>禄~"~Ԇ]jj@  '(Bzu( aBA6p88{۷oW^ ru7.;;+ 0 ##G !DjC禄sJs7!:T__AZZΉ)222<<GUQSSqԳ ! M.==Gہ m۶ bΝ<xWq͛ 0BԆX~=#ży\,\PMfb6l#w87%,'Hm/z䉥G%5Wbb"˗/Gj؆fp ޽{q#V"***`<҂ӄ5T{k$HO6 ۇD6N>=qD‹/\nuu5Nwq8io% Nѵ]jC 0>|'$eee&7e unCJӆضm[PPvJYfY[[yT vvvÆ cbD&M&cBDjC%''( ݻ'jҥKƍQI'QCԆhURRdkksjiiѣ:4Ra*.. vP64iCqj8ڥX==k׮9z@ -++9'OV/I6)oݺDfFR444drJ!!Μ9׬Ym QUtiqNy6iCH_vMOO0*44n۶Bikk6/_Q"3ׯ_lJgҤI"^eMvI!!jjjdѰz"8Am Hӆ{u7oX[[Ϛ5*)//ʕ+8Gj6lQBHm]]]:M233ҹ{!4xD AԼ 339sTUUݫÆp*ů9 1|pn|X[[mcc&_G9sdڴi^9 o߿?BoDjC|nzA^^NHg{Q;!ڶ!`ڴicܢ-[l8r:4eejCH@6o||}Ʌ pݚ5k܀ !*L6CDnݺeaaRsvv޵k'?㨤jC>}z9Y>W^hdw1lP6ɓ'y<ަMqiO>QRRR+Y؆ztb!e"%%e„ 8*AISLQۗ\^^@ `vbB ADZZZ |߿O>3PqqJJm{F733DaçjO*[_|.tLUUUś8'0Y^Ko((] Cm⫮>|xQQΩ57n@hС2w !!!8*59?C޽QIɢ !󒒒nݺ <… OÇ mEϞ=~;l0C|fiFj ~>}@ퟹ÷[1"..NCi͚5|>̙38'KP?GUˋ/ey!`07o˰~iӦTle@SC?[;~R!5]p߿'Tٳgf̘>'Gii&̻pw "YYY8*5WW۷:矙:(ۆ;w>~J-[jρ{'ON!^~ {_j~ϝ]]N_"F(__%%%][L ËO|۷8`c͛8Gdȑ#nnn8JQ{; Ԇ`"--- m?44GG/^ (L9Ҿ/]j?),,l}سg>L[n_l ((hÅ+}pjsZ#S6i0e L^WU!>411QV !&]]Nw޿/𳵵ɓ+40B‰'qTjͫW644-T]RRR>}̙SVVsD>|p*/BHw .SNݷoJDGGfo8.]iB8?sLkm/;+vFuxbv^L֟۾Bq+ Uto%$$|J! jI!!!W!6Dgl@S'DG;..ٳg_5_s!eii 9uS櫫CCC\]pav%jC˗a"LQp1_ !Ew؁Ygx999~~~8?Ӟccc[#|Z^L?>g𚅧DΝ.1E 0Alwj~NNNm%Q Z>8T G ѭ[7a)ҷ!jkk{!L=zddd8zÆ S^'?~|ҤI8JQo; Ԇ`SSSY\9\SSӧO;wx#7c$fD+".QpBxrH޽mll?ǿ/x<ɦM>/UgWWX)w̭+|SNெwRٳgvss+//9ZVU!ׯ_QYmCӧ<|0}0_}qѩ!:u믿i}L#oC###8f(s`gpN :tHWWwɒ%UWW`C:NBX!Xg֭gQ&pȑ8`bȗ!0tҟ~cn݂.7ro300j+=pp0>3;; rMMM?u͛7۷3gBEn)i߅^3}+ʼҀ?gС111_vZ8ST gxeqd>j,qㆹ9o޼9"5j:::(!D0P-Z$[\z_~0! Uw9!X.---66޽{>BBBm/ ؒ6@tRUgΜQ6iCݻGe͛0]r;c ttt`illi"ZMMMuG,! ; Ԇ`Bmm튊 `3#(WEEE8!&jC\ZZw}_khh0 !ꂃ _s,hѢ;vਪ1c{!$Hի4ETPP`mm˶ܼxJ=ϒ///!2վ@m Q&rbPuҟJmmǏ8ӳݺuMMM82;Jx-é րvܹ}Ο?ٳx'_Tbڴi Ç ` uظehZRJw"!DFw j2eGUڇ`bk!R!͛gll,eee 4GUΝ;gΜ,m6GG޽{7.&&&''5KkCH6h6l؀RZZ:b6իWNNNVVV9"tq8* jCZYY}N0<OU/ LpTdԆ oCܿG&ϟ4i;; .ਂ@ahlll``0o޼!6jCJ,P-OEDDՉ9SJv` JIIQBia6rpwwWaaaSLQxe˖RSS9WZZCcélw{xiZC(S$"C25hPTԣIs4(**FMBIȐJ"%so:bY=\?:7Yp]zAUUdeT{'CCBNNNpaA& I8{jjj~~~Ν ;XIC*'>>֭[< 9uVF3gvx---_xcd;'+ A˕466>v0o***yzxdĈ8,6n8dȐ~ 6Yo߾|CHlHt-[F5 >}UvZxF*:ʎ92uTckk&R{ŏDXfȑ#ka6m4p@~83AAA8 ֯_I|ٳϞ=U>o=q}EEE)))ܹS+PR',@2R ﷳӈ낂*pqƪP|ɘ->󤧧s| p^rh{l-ϭc---= 9sEHDD… yyZ cǎ3gb[R\J0pG0N #Xa e׉'߿D֭[mllp|E]]8ϟ]f4O8^i3yz*JKK]]]p@> ViΝ;w̰*,qqq3fp8&Lضm3v==<脎No8'66… ***bZ69sFUUut&V6nܸ~z6!Xa e: Mhmm r)0B =z4? """;t'3'N@;p-X9K.ݽ{7Vwٰa?|c7nܰꏘ`+]f``@T?%==}ҤIXxx<222pe*@`RojӧO䨳,iooݓ1A S4cǎikk{jkkgϞ IGpU:IpTUU8qbܹ͛7߻wOj)}:uOYprry&V~!rW^A UPYYinnGHIIg$-q@  )C qO͈344djZZZ?-,,z3'{NAA}p>1@ddd]jն?sb\r ;E7nFFNN `ff QVV{5qqqXM6E*ӣcׯ_OSS dܹ5558b._U+ AKĴMTmmfJJ 0wq\ |}}-[VRRť4@eaaAFvӧO=<<\ *mznݺښ̚5ѣzQ/>_zYfϞ=Xw 윚U70c"=Դn: 8Vv Xa e2eʔ7bUDdeenb39qĸq/![[[ϟ?okkA_ڵkoߎվdccCСC/-'>>~ڴiH;ŝ TTTF NFFK=<<6lj={\L++hJIfS, zͭs02]y?@nmm ={444.^ѽ!!!a֬YX;-KURqƱaVwuuMJJ]TTfkkp9r ֭[XÇC՟acc#6RaݽB?~c`7(++:tLꌉYp!V ;02v횎F{xxaTUU-]t3g,,,aB7]LSō76l:ӧOJO/^ Q__?888--~JFFFmMJJ;w.VF^^\z$̙U =%,izo666'Nߪ^hD@!R7Ǫ$ٳ8 JKK!Uزe {OkkСC?Bm^^^lMMMAAAZZZO o_9Ub޽[___FF/_#66ݐ 'G|EKNNVMCC\GGGG<Ѣ(++۷}J X`!Mcc1cķRQQ>j޼y6mo]Ν;177ƪ477O}41X6FEE9;;s8H*%O*)--L,>s}}}ȂJ=Ymjj:oߎ9mϞ=,\֭[X%,@@Lfff3+ y5[[QFuquuuɞR%K`YXX] Zׯ_ wބ J=MKK D]]ҥKcǎ+WvVNRÏ`w444hhh"Cק"ׯ_WVV&;#tIyy|8R說QFA~L˗/K,c$G.ZR%##c͚5G$a…III?]&V ?ׯ߻w~z4Ypq/^8..hժUl^*++NjaaQ\\c ,*@`:R`E"7͛7.\rm[[[0@BO<ŴbYY#A<ׇVTЗ]v[GΜ9 &l۶-//=!!!tقR$'' 7W\SS[ZZbbl߾7U]]9sȶq)p0,< QlF@"..T|D+"ALL<Ҽ9; GRRVEԘk,ܐ;wL{DDV%E[[ݻwCCCX.qܹsXpɠKj,ҥK8@% ;* inn3g\Z#|rڴicǎ]M J `!}}}*:x<\迧NuUغumwYlٲeÆ X=[ի8@C+**p,XɓX3Ր͛7ONNbƍB, iJrpp}6VBJJqu4X'W3f -vKOVQQ^#((h׮]X%F@L8 :N8SYYRSUU5::ZT7ئ3f|'Upf7oZg*=gʔ)_ܿÁo߾ ޽{JjƹclmmJ={&$**J]] /iӦsŹzɓJ `!ݝ;wp@t=ztMM H ___.؈СC8@W^aUܽ{rx!ֱ>}!PJt&&&BѺu233?T3͊TRh E;>*"˗/Ç*9<<8@ĩS,1uϟ?9R䆍@ P )C0!3͛7txаe0LjoRUU+W7$PJKKr䳳utt-[+}}%VMQQQXX-Ù6mZll_tiҤIX%իWc"V)[O!++ ӧO=13qDoUC D`!˞={Ə/օmll\QWW~ |Z)-%j+99YUUɓ'8@IZ[[lBjX=ӟm.\Xx>4P`s={ѣGJ葺:EEaaaX;wե;g###Ff%%%8@cǎ)++Én ʲ}"Xa e&3wEaUt˗/8&N---srrpLlMdoHHHPWWsRZZ kUU~yȐ!X#TٳёḸ8p@rrrFGvՔcbb*BÂUjtjj*V۷o"rz͛7Ǐg^nhh kkk ˡCJbccit[[|FKKK ,uLwٿrtt45 BR`III޽f###V @_X~رc)KƏ/MRzOKKڵk!I&K˗/O>)//lڴi6,,$m۷xbz$99[gϞ`UX!w^\2uT2Peee8@&L>>ǏǪYl|{xx=rԩfff[}%&&R)F֭[X%􈍍wUTTlUigiiU~ ǏA]vA;y  \.W|[)J!Xa e1;߿}̙3AHHȸq |U3$nnnZȑ#`cccq ߾}{qOOOcee`?S555f,'1Erj?ڄ;H455\!5%cb333qw^^^->!Xa edccn:5)))***½*--}q3 LNUUUNNS\vdӦM`#"aĈ]%d{477bܸqCYY8@芖Pw{{{+**YZZI~$*/,,*{544Do5ݖdSANN˅ݐk``M+Fhxb&"Xa eQVV. /۪ߡ*t?%662҇ˀ+JF58Fl߾Ɔ̘1#..StҤѣGc#fڿ?V^sss344ɊKH ttAAASpE+ F WQQ{.%K17oVTTt^uVMM\`4VVVoƪ())QUUzxAAܫ)Qׯ_C.pw)̈́HJ_ ::zXϟwpp8{9s>ZZZ<=="uxꕍͤI(I*@`R |koo\  AMKKSSS۸q#dNNNPGW\QQQaA,YUQXXr{ׯ_٣cl[nx B:$¢ Æ *偦211nxwp@$$$x{{cU@?֓'Op@O< '!b pvZ? "eJ `!O^^^X 5khhht~Oݻ!Kxbc˗/|||X&&&R޽{}ڞbҤIt\@$TVV=ztƌg„ ۷o>H@jrJmjjjY8`msUiӦ J±cb/_|ܸq>|1π{hܹ> !к@`R 'O 9h+]:QF-^R=hill\pI_W#X67oބt7??8Ν;EPP333EEEoo.Y xJmϟUB7u(cmmUPr*//*YnqUU~FSSSppFzz:IwwK.a@ 0 )C-QcteH<.\c "66VYYY{Q ClWx3ӛjR]]})///999 M6eggKSXXHUL0ƍX%tXB|՟VEѣG*q|2|p0hY;lܼySCCP.ֶ@ H )C~ĉYhkk[~V^^u$?cƌǼ-<;x'~F!ۗ"IIIjjj/^orssFe+++3gΜǏ}'~233Ja^|r)Xe& {MEEƍƍê4HH)tuuI%B8̝;Ȩ$NVVtIX% B@L}}MҧA---۶mSVVg477kiiݹsǘ¬Y(cǎikkwmmm;vxBoAjkk}||߹~LfW^:u*V))X-nժUX)k`Ut|\*RSScp?8p@GG k"""$6K.-02 >lmm &zAvvƖ-[Ҟ>}jkkkccSRRcLƍ)!$Rkb2߿___p9;;33pOK7*144>V ]QUU(#FǪصkעE*q(m9x𠎎8@);88Hw*@` R tM]]e_e;vst{{ÇCCC?Ìz֬Y,{9iF\rTrjcxjΟ?><8iGiP>b7gM0!''߈&ئZCk. Xa eB񲶶 MPTA}v…7={[)ДÇB"H"pc :4;;̓'Ovp\]]|U~J4:+ 1c /OU+ Aϟ?O8qѢE=rvv$򮫠͛7qxzz=IoPB޽ VuŊK.LԆWgYlYJJ ]>Txx JIDUce>S\t"7n|o,XŅ+t@>pܻw/ ;v*%IOO*+^xDmm- /kdd$u/^|18|0ФOrÆ ]}Bp˗/_s{a@g+ A9MMMg쐲\Ǒ.r޷o۠>mA/_Jm&z&..c`#>}Cݻ}E+++;hkkzƌ⫠x SSSW\ٗX7WdRO°*6$8p@˩Z*** f QSS3mڴq 벟+ 7nˉ'=ydȑdZIVH+ZZZ [>sp9INaׯgd1zwssI& vիW ;v[ĉdmg :(++>>=O;"_>|0.<<DOaz466m,ΣGx<$c)f={[lٶmV   CA 糳 HN'O| +9hhh 02Λ7f;22: q %o޼Yl Whkky͚5DI@롣mbb-(ֹ={Ǐ;d] )1H0dn 144n…III̘__SNazwuu*+<<<$7bU ٳb޽+V ïD1ӧcǎ1cFg]L9y$ZZZ7nζ.oSNŇ:#Xa eB+͗,Ybll,m~ 555Ԏ=JV===YYYȜ Y,bٳg;Z UV N@E[YY3=ccc}ٳ/\U1m4IKnn.$~G|rtF;Q^R8i:::5*̠GO;F]-%!4C QPP:u*Xuuu1118@g+ A:ѣG8& aR1+&>} ׬#F@bbb"##_C]]p]Lﷸ533;w g n'$$0%)))XЪIr}qvvUZ{yƪx;vlzz:V%B||<ODEEU"͛Ы@{Ç6L$2TRRp84VH +x >BJGF@;Ӝ[nA@jnn~y%%̞=$5)=8 @;TH[|2i$p|߿555۶mrSL;+1WZ+++qo߾ŒdSVV4h !999&66;***tttF.bvvMƍ'''uI6?~|nn.V) lHvgΜϾ5VC}}Tׯc;֮]kiig '|z[޽{PQ^^߉0@9R -'L9pu nܸrʕNJ);fbbbjj &a۶m䇆v7RLJgr\hIDUϴµη/ p8A^WKuuD{{{Ccff.++[8EEEXp'K ?G< y왁VҥK%i&M*566 |冡;E@L{{ٳXyyyǏ S^^k.333H5CBBrrrǏQQQzzzJJJoÇWPP=*@a̙przxݻw;::r8###EEŬ,|AXy8p V)x}Wxxx$''cUHxJHX%􃊊 0*gΜ)Ct)CA@Lpp}?gAvZkҢdcƌQUUOII穐wޝ?>Cw\v weÓ'O!ŭ|fɒ%`Ouuuhhh};}}}$++UjW\^^^gghJ???W%POJ=r8z\ } )C~ ""ĤNLm>0U C3ݹ'O1bРAgvL^RRw\kH"##?s;v055m@V%&&cЉ+WQdիWK~t=kІTUUx 4\X%L.[\\;Db$VHDԥKS3g΄>,,,//OU3 ]z}]!,XMСC]]]!ymm퀀W>%Ǐ@t\ Rwwwh J}}4;vJzsN*;Νf+ԇֆ;Db$"F@OVV-))~s1UUUxV#xƍUV)((̝;ѣ8JBkW FΟ2xC:99ݻӧdH``=3z"޽FNN)61m4J˗cU5J2%VDDTTt뵵8VhmF! Xa eQVV&JA~~ݻqTVV}8WK ۷o̙ڃVTT¢s֬YzGYYV)$w@о`UaU"DGGϛ7aX"voo$`?F! Xa e]/~~~8  g[n٫Wp)8prTUUUMMM5,((sZ Olnnχr*SSS֧kJfH6x򥞞V͋/x<.uGaa!l>}cmmUmp@=9h D NNN+WAk"7OVHlݺƦO X?pႆիWqq@Js%K 6lAAA}]455t4]Eg+ Jqٲe8@Ϟ=300088߰êO__Wc }ϐӧO_ٳX CwH02IMMxѣGoذ=o޽9g]]]99ɓ'^EEE.+++00~֮S:뭭׮]c###JfRn{aU444 6 PPPm ؀`!XJ[[Î;p@khhܽ{XFSS .rrrVVV/޻wիW_|+233eeeFFF& p7ϊ=9B[XX`UGIOb#GvY~ w">#V bŋZZZUUU8`gj$#Xa eyɓ'SaxmZZקiǏ;rȪU 2hWIMM6)##3`8` v6OYrssǏUrKKKq}eeoe,//Ǫx|}}=hJ'F566 `aq VHܺuKMMM⠢յf899y޽ZZZ5jӢEmv3g 2dYYqGUH=zJCC#!!]q}in%)))666X%|gX?IwDZcǰ*:jkkJ3>>>^^^Xe,7 !#A 0 )ChI!YJOOװ0MM[n{ZZZ?WѣAg_3tPOOϠ ܣ ɸO|m^3aJoo}KJJ$ ;88ܾ}իb-cHqNlee{n`: %1S02Xp˱J 3۴i-/SvZ2 |=d0ʸSe sEEE</-- ?r=m}^NN8z>.ό3.]U  ZII rMMMOee%<lkIK$f$F"Xa evq5]]/_eӼy޼ycI&q\ H|||.^vZܣ I, t";;:eSNM6 oVZ%E¢E:'7Xϟ?'۸H hx<^11RI yVHE֪gff8q℆ٳgq=>6`YYY]] 6yXB!##7޽kkkU)LZAIÇ8@= ߻w/V% pZZZp@Pp[Vkbb"UH) CwHH C@,gʕX*ϟ?6l4"))IAA򺘘22dwŋ/^Āy<^qq15qDJJyy&`7666t%,,,44^LKPmIWtROOO2! $;ׯ; y#A 0 )C4==0---!!!ԟ,]?~ psmpѣGwmII (Emm->T H=;wNMM8@Ν;vvvX-*9v؄ 貏rLLL`` V%ɓ'OUQUC2~0t;W )C4B@Ok׮HKKSWW߼yskk+zB\t ,«Wp@"H=8qBKK),:iYFFVMMM Ǔ}"11q޼yX8_|f7npuu*A@KENN0~R VHڵ UWW[ZZ>~CWǐaÆfaŊ|K,8p #GG>̙3ӟC.?&L8xDjbG[`7ovttĪᯨW`7ү]:Yŋ#""o=<{'N.{>@WWڽ{ !|~w:滖3gBsiw-Dtî]~}6FCYfݺuXe7W^oll  Vݻwnj~U4 usscvRйC@ѣg2߿ςavZNNX5550)))oo?2û4'"AF@;R`>sݼy3Vɛ7o\\\Ȱ!諫S ]xDD?FFFv(~~~-_} :tΕR^^3::#h"&!}w[s玽=V% $`v铦۷q<\__RH?-]lV Ҡr``}5 u?!ovZrǟ?ÇoH|Ÿc ̉\ǷGF@5R`8^E "zO_]ō7G!SRR~iP޽{Wx?.Y\\N&!`WeT)#==l\wɒ%X<555)`UJ@ߴtR;w_)QYY*buaY"55u/ (#PZZ[0U&@#A  )C0H{J"ƍGd OokDu"!Rv ɉ dggCUw^,uu:immUQQQ v\rEOOӧO8j~V/_?o7 A P )C0k׮3xѣGɰ^WWݤ =`&}I111ŋ3 ,yM:Xƽ{[hhh2F`+6C4P''tqqIJJj? |c0'''p/ˁ9t?)#**.\Pjg\ܰ ݅dbb"aܡ?|xyX|98Ȣ<oзF>u`?"1bؽ{_;y2|ttD;@`<R`,IIIY9\Ea!իu茡ذsΝ?҃ Q]]=o<(_---c)!koo1֐+*V $\.8hllTPP6ӦMr V ***8@s6l؀;џz`&~ӆ`?o0=8mMMgΜP Έ`Y֭[ ??ܸqXXe+[lqww*ݘ9sŋ*=*,&&&X%P_@.ԦÇǏC@`R`&Щw~ŋϟ?c,ed? ><$$=H ] (,,;v,V%yJJ VYI^^ǫѣG*= ̓TxDˋ/TTTJKKqb$$$𷎆~vސ6Cva}2>|rJhh3ן?~LLLQQ!Xa ei``fUHܨ $]E܃$y08t ŪDx1%|t̨؆pHغukPPV222d99x𠝝6&{s~WGGGȄ<==wힷaaG;vlcƌ9r͛oܸ `!ӏ9UiR%%;vrW n޼ydXׯ*+$1SBCC*UJKKER𪭭*J>|$ &.]&E^^^CCcƌ;wLMM=,7 !*#ի^9::>lŊIIIdi02xF`+o16rW!* &^|ŋX?_~k`7oބSOГC-[ X#ϟ?BTTT$<ݻw/_޼yiӔM>}۶mkXnCF5//o߾}Tuuu}}}v‡4G@L|ؖ-[z\=jc,wpɓ'</99ׯutt*~222 >JKKr///JÇϛ7}$;;kΜ9X)?~LII UMMMAA-44Kga  p`V}VUU6ȑ#O>4D@W"&аn:T)X*$Oaa!eRfX?~~~\b ҙTJHsdӧO*z477v[n޼1k,BBB.\+|`a  'NX`6xs:t8&VHQ$$$aЉǏO8*// ]Eff/#++;w&qݻaU4665/744?~@{U 2a)yH} B難PVVq7ZZZ :|ٲeqqqEEEmmm$ CwP *`b'N8bĈI&A;%(`!D +͛M [RR;UvP[[wq\H}}}Ԏ=JBΟ?g~eX'?i:sN;;;*9"> 57dcL6X%Pc….Çǎfaa1tP33EEGGS Cwt jR__Օ+W=Z^^366V|B Xa e栯Ov[[[S@cQSSnRuַ""X@{{{SSt|ʤɓ'555Akk*N?sL{x^99:J?ann^? -V QMMm˖-&L6l󣢢1,T3 THPJpqsr]Z{'-!IDAT}^kwkgwZgI TLNJGIR4Q!$JC**t rP6u3ό癹>}<3}]}nݺիRY}FR½{JCZUUE4`rrr04>m?i x;N۷o Eٳf͢۶XÇe:7ׯ$硌7:TeW^fdd)e;!)z}A%^xAxӧ7l0uTyyy <Jz=`Ao߾BB >"ķ iYEd !ݻw]TeeeMMMkkϓjgDHFH؂l6ZfC{RRRHB RE(F---JD0`B8z(={hʔ) 6D 3b稨(UU@nݿ¥K !|!i <==M&$dazl&;~O:EhR ;w⾘E*" ݿ?dÆ cX6666m:spˎ8!S#YYYvvvX!쉉zB9,CHIIIPħO;Ι3Ν;wwHRj!wmQ۷.^' bĈSn˗,YOR #UP^^rXppmHׯs8#G2dׯJ%E ))i pUc !I?+WtݽpCS`PqU[[9^bb"i޽?~/i`Ljg744 NNN\TJ3 1|WQf``4+FFF/$ƍt[ZZ455i1SXti\\"4SNZ`Ś?~ZZ(D+ X`<:::y3M⢡FpYmg7TiƳgTUU/ҥKfLRUUuYapppسgONN]=%TTT$z҄%L288<Ν;},P+ X`6666eeejjjv-+44TEN5k444bbbHTWW/\^26ﮧE{ll,RʭEAAzouH~XXXjgDFF\Te􀀀s窪…=o޼z52eʹsHiI7EEE})++&''| !MXX%#9W6ر.ϟ}o?~eii)ij&f`\<}_[[{ܸqGd !;Gg*++ %gΝDаb HHTTTؘ6qRZZ ͅ Hپ}]H"16?Sl.KIΈ Ç;va/88X˼CKF7o%T]]fIU4!K'U)I.^8}tR+aX,V Ӝ\AAaڴi)))="[#켋HgϞYFIIi˖-M !̨Q߿Ot 6}-iӧO,XF(ݻw0r8ݣj*+++f y<7HUZصkmЄ[n3Ti XR|Zpp0wŋlii㓐@mt'O*ƒ)#F$FuuΝ;qe\_a2+#TQSSﯮnggF .]daaA˗O.vyyy _~^7o'Ui҇X'H0&H42RRYf'no[:|rƎf͚'NRECDƍ&L Ummm ,0'O@0}$:B!,C06 )"KkkkBB$gIߊ?~TUU$ ǧO> cI:s挮Kuu5i8'''{{{q#(Yc:ՙ _"ҘFOkii=} \RR׆GTTTqq1B[}*"c|)==}ܹʫWfNp t1'dyÇwtt|i'BVCz R ''hRe8/^TWW}6i@q&=yDCCcӧO]]]Ǐ?}t N`߾}/ ۗT?0ԔT >~x!+;x ,C0)ꠠ H ll-[vAR>|عs2/I(---v7 FYHfIıdǫW a$ ΌZ~~>i@e̘1ʺ6Yffkjj.Z… +[7ؐ*t 0h>|Y~ { off'q.|3bv}UU IIIR\]]㩚U__oddB$ӧIDEE9;;*IKKSWWL>ږhhh8|PPޔ)SΝ; hCi[7$''/\TD?S~e=tCMMݻ fnnI۷ot{_U+ׯM"06lth2B_'''k/_~ULKr8R+mmmǎ1꺺:L) ...,SIظqIANHEСC)< `xzz9rT% ľl8쬯///?e+**֟kࢹ+k^xqԩd Dp hWXiZZiCz ~e=Nmmmhhn@@5ə0aқׯ_CR 6yC``ECR9|JJ i~~~C6mڴuVRe&{1bӧOI"0p1i$U1ʛ7o|ۢOz!͆ u0~놙3gfff*+WtuuWZ]~e==ǏxӦM0f*s!_fsˤC:99=z L^^|ڂ NΟ??k,R (뭬ϟOឬLJJʂ HU(2 .@=sLq'eeee#FHMM%m} dR88ޞf+++e痖&+Gס_~ɤ:0~ Qj#٪őD<=,C0)Dz666⻹eeeu.;w!Uаzj8 ܭgHs߿а4PpwO81##TiÇ.\;҆Px*HCBB  ֦MΜ9C=ۺj*ҀHuEyy"xxȑ#n݊p$2Bz/^DDDXZZxxx/ԤfٳϞ=K(0;v@ܣaqq1<4Л$55HҀ@SS9 C ߿m14a…0ߺ"?? REheeh"F/w! һTVVM4b-]4--Mk7ŋ*-L2ۤRjjjVX~a_~ĉb]d̘1n"/gR1חF$ p777ccc999 uro1bÇɧў'$$nr0~늌9s*WWWf{} a`O!4RHkkkp¤$ WJ>}ԄwIȑ#ϝ;Gں~q&nybmm-i+<011(GO⨨+Wə{yy6n8&)^UU舛H=uE\\ҥKIA=zD{X`0Shhh8qĬYX,ܹsccc_zE6!mBIa]@秬sNq,G:u \\\7=J伧IÁg*]QSS4 ]W]ii)85k֌;VNNdp~qꬭmNNқ ]]]xp!ҌHuw[ a Ǐgeee~e=H!tttdXӧO?z(ϙ3ɓ*TVV.^FAZź"w ђ%KHy-Z$֮]N]>r|@?Kݻ "?pXZZ<rߓԩSJo >Cǟ_,p7"%UG'\ǏSRR|}}jWPP),,ʕ+__+**TͲeˎ9B\9_,"7^xի:cDIq `qF^^ƍ===\qA,| &r###uBĺkjjv?ҒCÇyw($ !f;::=zW͛gjjQ<<--m۶mvvvٓ-[[޽T 8{q/\n0~6=d6}}Ҁ2BJEEž} 9qq넫ZiӦ=_~mnn+xӧccco;|⅒һwx v؁ ~KzzΝ;Ν gf޼y'uuudk_i&R1pa+++wL5Zlٟ Ro}lggg;@cҀ 2BNccc||%$d\~2dR !K̊9w3Ȉ$$''ף2::ٳg^reʔ)QQQ͛7W^ W'ok׮ḍG༙qۑ'wﶷRRRs痖&nkLꘄINN3gyy9wJDZpEaaa  \-9b`` Kv{X`0Sښnݺ#F˗C\Ç t˗ݻÇ:/սI8]Mɓ'***322z= dlan߾!<]xq^^ޟZpPbO@pe8 @7)((X[[HJcpxMMMqOBzLLL a Ç  CA$ƍM)a`O!RɣG>a„>}暙9< gѡ][Q"MMM=S!m}QJEEŜ9sSYY& tqA7|DMM :tܹ}WӧqG @hѢ,6=`6ȦNN7iH5 En޼Oֆ@>O6] *̿{Ʈ]"Gzzz7GgDVٳC*]ILL?>!>|H chh|y8X&Fxfw,S2Bdӧ?^^^n߾} ONoFڨӧOQQQꐎ644t2==l0Ӂ~j Ѐ}ߋ5ǏC8xJLܹvqA`bb^TT$஺͛7 JW<<<"""H2ûp8\'hiiA@#33SWWw2=,C0)Dրݪ*l^@YYy…G}џ#|=䓤"޾}{==_633f -0?'8tzG7s1`l1662eX+><11gҤIC o+MMMdk #&nw%Ϸ#q_A` O>!tcݺu... 2BdUVڵT?otRuuuWXYVmm-Nziii4RCCY5 rKN%99{knܸ̭A~ݳt ɓԍ7Z[[X,===GGK.uUb4p]u x9d\.qիW*"`)fffpf`h m477#"" DuuuZZ̙3e4.J?㝜H3ܭaN`ɤAݻwddc,{X`0Sls8H!3<9!!Ax]TUUWX3Ĺ:::/_ eXuuudnyɐ!CAǏ _ ^^^***pp>I3ȀO;o{,U\T2"f?~L0yK.*|hb6rDHF@@g^#_ɓo߂߾ui@2BdB ߏtvvYhQxxxIII[[ٔ444lٲEYYãG @dD\pZx ĵk׾|--ʕ+aaaNNN#FPPP:uӧzotRRҌ{u͛;] a:4d*%#%'0Ǐ[a`O!2{hh( Ç! YrQmmm!aT|{滺OaHK|||,Y[N߿p8/622SQQy&BMֲYQ2RZ!k' "vznn.D{2BdQF]zT)߻wK=QݻwÙ?~II iСCS K,!Gr"`ɥ2VXwKvv={ VTTyKUUm޾}+//OaҥG!.ˌ"=[<-MgwѣG… g֭[ӦM͛70‚B{\u u x׃όJofcc޽3믿駟`\v-} ħO`bbÆ AAAt2BH&UTT*++Ishnn}vtt4 ꖖ,KSSs֬YqqqŒ=뮮]$bϟ's ݿeA:dȐ@x尰0''Ç+((@ Q#pr|0;~G3Үϟ?oBBBxWFgϞ :m,7t.oq8;:C;qbN :^[ 8СCh)R_x"Dnt2BGDeeeFFƾ}-Zdjj ̎AAA@ a` 4Aޔn ݯ_Ďkjjnkhhpu%$$9h0UUI{n߾ vMUUo0A>&>:vU0p=1bDvvW?য়~﹣9c= +׏[t+L{:Wgի;^@PSS P55phӧO;|go}aÆ}wyVpp0|M>}m_^^o۷НNڊ2BB]]ߴO>ݽ{aۏ9r ,رc襥T-0/yoߒ.Cl_1455k^C\l2ǎv'Nyhoo'aH@м~zR \sDy& Bgo߆㻙e.6l_1`&>{\#FMb<ٵp #K333x52W2RRRܹ-!Ătߘ.QxϞ=}ݾ}yVqq_[RRO6^jɓ'!|JNN_=<<&.Bw:?vvv養 `ˌ3HUziiiFVHG=`{{M6ƍziq)-,ѣ>}5b!&"mm|o߾zzz9rBzNGf* |KNΝ;733TBG&3SU?7X#Fp?F궶ᶟ4i̙3suu5Н6RRU:U 6455;^2DBBW0"pرoܥ%xStX-[g/Zkjj~{H#""~k!BJ~ { A\paر*K@ t} g`*--}=شi]7 =pD4h iiiD8f̘A΅.RE 7^H%x+JFziV %;xW0ß!Q> x/''?#B{\+H/pn ׎W qɎ2DzzQ󼏎'eC2>>/_vzmm~6**{Cnϟw(Np!OOORE{X`0S¥]__ƍAɱc6mdoo?zhH555'OgϞb/>}4m4EEEەNZRR; ٭[ \Xhn~ vӧ89s^ \\\x ={6~3nK hYCaFڻvr7!n_N]x)DngC >}?Μ988%6:jժÇjo.ħa٤0oX`(7r׆8[rt^,׆.Q`x[>袣F?~ns¹7et@><tyywޑ*g! =T/q3g4556]]A,2qʕ)SjQ]]' UUU0o.C SSS?>wb>}wJIcN:wYkkooouj;byT? `REӻL P[[[VVƝJyleYѮ_|IyƟR {wĸ <4hA;dȐ%K0vqǮ~yN[1c ! B[[ȑ#HC[6lذw^---++ԏ?H&&&*)Y,VCCi7nXXX*(hZ6+zFJdDAN߽{+H~e= rĉޝ-0 ]ǏVVV!!!&UI1uTRq FCMֲY3Rwȗ[ZZl{H5~ { AUGG4 =A ,[byxxܹsׄH ޽2dJ+V>>="9rdׯ_Dq 777RE7YfSLdDA2ħOFA/ `G455ihhܽ{4 ZVVFLիW!TWWo۶MMMg]2 &ܼyTϰaķHAAرcIa4߶l>tRJyy9!O32]{:z5" `8pThii[%ŋɓ'/]DO4779r4&&W@Dg̙*fJJJFA!Cf̅[NNN\\FCCC)IVZCy ֭[e~$ ՞޽{fI"~ { Az ZZZn" `@6CޫN^~=ډ'\."ubgjjh! G LJ Fsb6g{FQq8q۷aTԲL!ud養(BWSS˃ 4u #а[[[(*!kZggi$/nnݺrFR b+UUnoߪ(b!k pmm-"D+WnذF =lC0Bcdd$'/566a #退*ʚ:u*MXXĮPVVQ:P]]p`!ʐVss3L!{؆`0)0qDqI HjZUU1?&$ȑ#zzz։wI]AA$o?e=c0@$钓`!ttt$%%:mÑBHd8qĄ@R"V\\fx+WXXX8qB27DԄQ񨩩QRRޣaŊQQQ0@T`!رFѰ=lC0BBJII122M ݹsfdݽ{YUULR?¨x?~\O뇉Td޼yxJD/]F! G !Qy5YE|&Y[[oݺ&pmMM͈4'ǃQ:{ߖ-[8zuLf`!iKOO'F@B{؆`0)DQvD%֚V__?~0Ǐ]\\<88@"sQ9sHQQQ+VQD=:UTThhh(BVWWGL@ X `8RYq״*mmmq1.ҥK]1 L` ݎ;CJBKK L_VV֔)S`QOܵr񮮮0TΝ;&=lC0BaaaAjYs87ne^|닧. )44tӦM0*:0*555l6F$PhaÆEH ҒYmÑBH:;;njC2L25-//OUUyf˖-\. ={v0*:NNNR,?3^8uԲ{."$=dbPQQHt! G !z&P*$VlvAALP~Ϟ=dxO4-;[IAAA8qb^^"IQ$BR:vx@"%X `8RX$G#ɚveuu/^f-ZTRR󲲲N "͛D)G69990p\///E&X `8RCaaBMM L 1pM=z7o`b>|8tvww';*L8;;¨ڵk0&ZGu(BRray#X `8Rڵk1x'LL9K~~>L_ԄQQhnnVPPC0&ZG?Fb=}{؆`0)O< $NRi6m& {^{{{xxǏa}O?(x<'''L4 FݤRhKV}0555mÑBH|"""MHRȴxŊ0=iw}'uvv^AAFݤRhPRR2zhEH\]]׮] Hl! G !244LLL $6ҪidFB>9 kǏϟ?/[ԟGYYFŤUĉb}z.Bta q=lC0Bb6f̘@!ŚF"f9 jxx8Yhѳg`ZB|'OͅQD1):<{,"$Y@YYY H! G !qsuuݻw/"nMkmm2e/L0 E8l2=T,--ݻ¡ ŋ(tkihh(BTSSH! G !qTQQdH566N0A6b\.3{씔=Wd{ٹs'"II9"$A햖AAA0OapΝ;FP `׭[<F@3;Z'yΝ[h"$A/ƝPZ! G ! {UJ%5RWW7** &ݻw~~~JJJ۶mi9}1%Wdd Jj-_0|x0:\ΝsuuQRRRz"ZQU$LKK FUU mÑBHbjkkY,ӧOam5-??f߼y&`ܹ:::111===0-sΜ9b Yf]zFBAC[cǎ5~2vz# =lC0BtQ[[^@"BaM۷aB&]~dKBBatXTTT:::`B<<

| Ç, H! G !iYv-Y(#jٳg=gϞ3ŋ04***޽ѡ={6R$??FQD%11Fϟ㟘Hap&MM;wSjɓ'uuu_~ 2*''j0BbkkKXϿr "*1։ˍQĠO> u #%''=O4!մH2dŋWvvvf1,,,NEEWnݺE =`Νy>]]]!!!gŝ;wE.**իW}>~̌|PRR6;n>|P[[.p#Z]|F}ayIEHh7n`GapMxxT9giӦNeff1ٳg> K jjj^xIIIP***TTT6Ouuu[[[Ǎgll Çd? , h?~̠KH:::"ۼyĉDu #mz{{a}FLL )e YYY믿.--2JPPرckjj`B1% ;;77ooo~Auƍ.Zt)ڵ nIBB`ǎ,TXH䗅QD]~}ԩ0{ɤbmÑBBdprssa}?Jj<{l5~uu5Lȟ(**[qqqd"ebbB^?7|3rȯsWdǎ#?ڵkweii$ IG~N) d~uEhzzz/_ncc`.mÑBNIIIzzzx۷jfkkߓF:zׯ_Ä\tss!/ovĈp;w ٯ444~رcFm~GEEI&}7S}}}q_B"*g˃QDٞuvv*++cJWWעE}+mÑBZk֬Q42g%+D&FFFp &}%Lȫ4wrr" f2?Wk׮`_uXXܢ///4uwwp"-55F2Cpvv7o^GG!F{؆`0)njjz)@quu Ξ= w1/^"ʠ eeofĈcƌ:b}dopE̙3p m۶-88Fed{reDYf=D1`6H!D2UU|@jkk*8Lq)---Ky,[ n-R/^w&L_311T***0M=1)3rBoebJ4$F[[ۥK|c`4xu #.\w_Y?ٻw/LȊhuu"u'_ }H2믣`l6y,--zϘ1Fe-󷤤$ZQ׷3 =lC0B[v… a U:!/^p8= QUUׯ\rڴiJJJ#F9rXoQQQ1jԨ/66l (//ՅQDf/+++#u0Lap_GGa!w],YC⑑OIIJJbٲimm]xiEE!9#X `8RɆ^(vH( Rmjii !&nC$%%999(l>L$_[[+ $ =lC0B2ZGG'66&244ܺu+LPb26ĝ;wlmmaQCoϞ=p8tIQmm3ƥ{؆`0)dӧO.%%&^d m]6 QPP`bb20[j( uuݻw{u #LzźwLH!63f455`BL݆x&"j0}VWWow>ݤ^ihhܺu HapU7op80!q؆MOOφ `NJ !&nC4775 F5>۽{5k`+r0qppx-!`6H!$xگ_QlٿquPd}tҿo_}Exx8Y|_?O'NɪU?F:p@w//455IRB6/46D}}ȑ#ɰ^n]Oq=A 15?jhhܻw")OOOjee |@ܹG";5kD 1iҤ(@[[? 8ydE򤷷Y,;AȊUKK hC3blH#$"ؘp`BچXh?肂`[ǓZrrrMMҜ9s_%ӟt!~dי#3m_>>KZFb{´Ç7 tN?wƍ\cS...cccɎw_hC 縸/1~E@6̙3i` "\YYF‚"`ɍj{{{kk늊 C޽Kv 윐>K.={,"dQ@@~R"˖-[9sFYUUE"^K,W}YQ6JSNJjm?O!!! m{`/|77r ǏWɎwѾobŊ/!CMMW_}"##׿}*dV4o<E(??? F^476͛7ɂ/ۿ Q[[?WJJ ?B>KȖV}YQ6/O%3!lC;y<~foW^w¾ov|XxSSSg69*;F}:::X, !K&|{m-{}Wɏ 1B6_tt4;uL/_/ `Zo˸/_}}}0mooǏ('O&LKLL433S!Pjjχ`A700=z>\.7<<FB+ h=;cHmE(EvuuujjjvvvW*n<(Fjb٧O jsedff߃6w9`_ >D_ tر-W\9PUU?ȑ#}AiCNśQ^~&Lknn&  >}+W`sm'O.YF} ^[[&B+88X___2RX`?Ϙ[-_?hǎǹs ɗޢr奐d dz l"o qg_zر|3fdA¸BHHG!K#!/^_}Y;=9ߴiSvrܾv߿ .>EEDCCNF# Ϗ9O!Y x؆`55,!n߾'O߿/HiC>|:0(0uT]i3n8|W\{,Fs Qww}`/!jkk***`͛عDH$%%„`B9%sۆ_$v>B$iC9rd0(Ƞg(9<2s QggΝ;a׾Ԇ 'M&aH{{v@ɴ\2{8{,LmjUxⅱ1%C q)o^|ღ{`ɐW^͚5k„ b=ɏ9shC/^ttt\ddBHcim2)Sœp !&´!Ν;HɤFik.OOOE+,,b8p|  ݫW,--`b ݆ BCCݻa'N L{+D;6,%ǏaN؆ad2Hv-̰JׯUTT`Ʉ\SSS{{{ 6DFHMM%;AAAL dڇg͚sÅmٓ`b !&¬W((6KLLQ*yxxsa\.WCCŋ0аtvvܹnHo A>}eee!BNݫW633a6L***3f̆ D!D6DrrܹsaIUGGǨQplNNVkk+L ;{,'OL<944hm_>N0NV#nnn8!D"!d#899Y[[ ߱6ӆHOOQ$Un"hOooOB4((( 0аtttڵWO>AZ ͛7aQ… &L>#$oRRRTUUϜ9CmFo߆6ӆȘ9s&" fL%&&&ʊ@ݻիW쨨(V$* 'N|xL "+Ç+++[br|r߿Nٳvvv DT33'Ob!4w\R߽{sm62w#{ixx8UXUUs@𯌄C^w´!Ұ A/_X,a’dE O&EEE0а:|rrp߆ ^xakkLUEDkk+9dffBHF.%Bb2`耿|!saLXs͚52ىx IJ\\0Yf( Rf&Θ1C[[ҥK0аTWW F|+{hh)SP$]UUU+V={'O`!$\DUU5::&,vr+ ?X(-Sߚ|||`Bo~9W7o="155ʂQٳga16FڳgO[[L#4t^Z~ŵk`N8¶!jkk/_ T(..vtt $'JJJ,Ys}RZZjllOY;qℹ9OqƜ9s`IӧOՇ4; ;u^\^ҥK`'Kӧ ̉h|SNݻw/ߘ";;LS<<< a!$sHqr0'd?Yj6H̝;wΝ0JdGGGER#Imm˗/a16ӦM͚5ٙaNtDنEQQQ'O>y$=rqq7o8I p႒R``ట%LMMMS1q~:9(V 9rF000HJJ9ԁI&´ 9eʔ&(޶tR;;D9t"$&L`=ɉ'VVVœYYYnnnn݂9D'NL2e7oī1dX0P?_w5klr k(S;k"YR`Ѥ#44C~~>L#4ֳgxp it 6XYY9rȱjƍx!B2uzb̛7OE.d2􉏏Q$Y/_Q:tvvZXXmKH9uꔆƴi޽ ߟ9sޞz-Bӆkmm={ݢE+11qidyup8+WBddr srqq1LP̯/_H^jjjJFzzzx<ޘ1c333a/9sɓJŋp :H ѧdӦM&M ;G0ȇΝkcc^]] @1Ѓ <==aOXGG򲣣&hr1oooE֦K֭[dFFFrE 'ON><4wPцtbbbV߿?uG^[ ̡7lؠ ---k׮ҒmӦM0JPBٶ{nwwwCMMzFFL >ٵk`(**ڷoMHH݇>!HSNuuut>N>={lb ,,,[ #33SWW4C_ Ekjj5`IDEE vuuڒE L $g}}}y&L#$3o޸qyΜ9ym>Biaadɒd[ Zx eggwwwÍBkmmݺu+>{,!Iss5k`NFeffjhh&sν{(9s(ȔlܹޱB޴EDDJ2{l?=ѯ̙3nnn+VHHHCuOAA_ڵkp D+2XɫV266eb!9oaa1mڴ2C蓌 :-b֭0J-[:tFE„ |ի 0$188f>y;''gǎ'NlC31 чLwM%&&,AAASL&<BV===***sh WE:u &(n:|~byE*TUU=zHtҥ0GꪧA>.}^xqa;;3f1Y<== /^L^Z ٙrsrr`O紈gϞeӧOaB?** F8Iad{y@D溾{$911qڵƍ:ujPPle6DӧOϙ3rYYY6yM6m„ :߸qÇp#M^j*j/GR'?Eվmsŋ(+++ EvN;vϟs\%%%??7o4cmmmd%khh}ڵ,b|O{{;lذ\\\ȴ{CJJԩSw]&v!&RoUUU=JQ̮WZ%ۧE̟?.`T._ HlȌf~&(b 21RJEvv6X={䈏nH 6mژ1c-[SUUuӆ诼̌g͚5q-[dddtttŪcccɁs3g B)))!P##[nBOLLL9Y{ڞxuEQ[[A 302e#ːc;vя3@"Avww?qℜ[6}RSS}}}\988===p;D/_FGG/]rŖBIHHsuuŋ]ܹsgܸqNNNt], 9}LEbmggk.>WHһwLUMMƍ0Ikk+ä8L6M[[{ǎ+..+oC+W̛7/<<nV^^~%K鬭m@@)}/BA&^;wķ}Ѐ:;;N̷ezinn.6ϬY(|+%%ۭD\.WAAaժUԔ[߿OLLܼyɓ')1 ߋ/-ZdhhH%GII ѭo|7AHȫrŚ0G@{`:;;(y~g`Zxx1ol2ccc{{[n Byyy ,ן i+))!/+WW^mٲEEE5'',?QCCc&7EmϪ"{ۚ5kfaaA/^$unVSSyfkkk]]]R58.co!D!;rYlO4 0a̙3?sE4dŧfSxAYYՕ8{l2l#+ ggg555\~=YVTTMѰ`bPȎgϞYfFHHHvvv[[Q,?~|˗;3<<<77!1inn޽{MyY3:LR?@$Ȁ I!E"__|&\[[;::&*++wI}ʔ)<IeBddҥKǍG^Mnnnaaa999LlC GQQQTTʕ+MMM1Rh IKKKVVÇ]]]hrǏ?z0۷o}||X,VPP^UUU͟?0@}~ׯ`˗/ܹs0!m%%%d;}4L !tww_vQYYyÆ [XXMr檪3gOLL$55lC͛NNN3fz*9PM޽{w}9;;蘚._<"""77ÇpkЕ/ZHMM-<<}Hkkk{zzVWWHd4~xEB{9?~&0 2а:wdӧOy<5"In "VUU}v{{{vؑ7fߧ߿EWWȈ̌233Aϟ?>6#ЀZ[[qSIIi߾}~ڑߙKN0SRRN999l6;)) &ܸqٙ Bbޢ8___[[[R LEp/@m*++;<6zy\znАh"###MMMh^r͎0r80/^ 5VWW1a91"55F}:s/>uy%wwwEum6M0!m|1LAkoopٳ׮]K&p De˖q$ 6={fww7D lCHSee%9ٳydr9E^TpkD+WߟL"5BVM'$$o`# +(([đE0lյr &]Tݻe@FLAW^%m2PQQ={6dw`lCPL–-[F-d;w\???R $^ Rss?N666dcjjIVYɯ__+..^p={D'Zd nʸ.ٙ\YyxdIάcoٲe0*8h޼ycmmsRu;x=== d@bեŹgCCC2R{!3dl6#͛7ɓ'khh`cի ,055UVV633ؿBBBqq1 #kΙ3g4Wdk.9~dW\Q48< 5g޽0'U'N`ٙ0euuu2=>vC,#c߿O 6L>]EE  'O3 !dMuuuJJ \ܜ'MLַEEEfk׮xyyYXXio!Bx<,br0wiF0ӧy~ݭ[` BTT*9„T ȔЯ޽@WW7 @/79䨽eGGG---EEEu;v,''gr͛7鑑ׯ'36R͛G!f2iiiG(3ڮ^:44K{8DJJٵkml#iyԩSqdijjOOOyyydEMpdQs蓲{.>xnĬɓ'۷o??Hʝ7N؆GdbdZommrʃ^zOb2yz l&LPPP S⢢kkk!LO>]n… sssaɥD"ߩWeI~~>\.UOm=|*ٽa}TQQL=6lɁ[ hll>an޼yܹ?ӤI,YrС$YN^?rVE!K}RIX,V||}u?##۷k:lC!&R%@v%ogooOVNLL,,,aTAAիW999ޑ#GKKKLxDXRyH [ yBLO9ۤxFGGÄ IQ˗/ƍ# .YDLg0 7kjj?-E~iRRRHHȪUY,@=!6 !Rׯ_hhhH%B # ݂fň>]]]eee7o9~8-U˭+VhkkœAɉsrr7nܷ~R|:e\ty֬Y";v=;:LqBGmffikk;m4yDz*++kP񪩩AơC&NXVV&]qnڶ-ʶ섄PDh Q388xÆ Ot4?~\QQ۶m"""Fտ={8p}YddΝ;?';r޽8;;; Çh…AAAW|PSP<T˥K4i p%(XT`#]~~ǎ>>>jkk4k,gϞ=˟[;`/^ףDD]m-6l(QL6m111 P(wݼy̙3) :u**v(uuuqZq6,YJOII24&evUVoذt PAtttG{𺪪G.\Q/ƍW\\,__ZZ?W޼y511AT=}vʌw Ɩ7|(--Usq#޲eҥK݇ګW~;v…7np.iF]t)>>][[yڵR2bccQ:t*u̼VX'C~~~UUktDiv"segg'''GFF}w+N=np]G?*++Co۶m4"J8 ,իW=|hd***%lA__TR'I"~7s3" Gjjj:cƌ.߱c?J=++KBL=z{BBFCC7ѠApid9p牨u ٨wFEE͛7Q@myڴi"E"SL+SPP}v1qhcdd$N ˜%K|WEEEW\&e0+p£Gv_Ix?55񬭭PSSٳ'^R k׮ a0<5<=?eJΦwܹ8fffxo߾8CSSJ[X2޸D1=n8aw...q򤴈6!ݻw?~\7~x TUX^^^ ۶m;pBZ6AypPݻ71cCCCEsRSӊsk׮XGQ^^X%#vء.#QT/R***FFF]aRPP0zӉ (MLL@+]yTTT$''`¾ϙ3gΝ׮]?^SSs1ܤ '''CCcٳ-L7u,!:ԽP9rD)/_.: XZZE. `777"Эb31ifffBBBXX8} R 7 44TL"[TT "ϝrz}ppǝ;wk=]xqfff۶m^^^SsΕсeeeIuf(>|xvv\x,ϟ?_WWwɒ%Jux\ +++?SyyyNNNRRҊ+|||P122-caa1aT{P/sI Pƌ%ƍF~ۋT  HY- Au8#^>-)! B].** 墾ױ޾}{/'```޽{٩Eٿ)S|wz~~>"^\6m\QL:u I>|tՎ#Mׯ `iiŋccc333ϝ;w&H1 AMݻwʕ+(7o矋 F9p@555UUUѤbĉXrJBnn.jׯ_͛7}wyyyiii8)yyy|?kL.tݻwۭ=~Bqeooo-[~jLk^ 7nܐ.޽`dd4k,mԴu!C>xL߿l2GGG\!FB'OHWUl*((HMM]fM`` ~xxxJJ ?tD91 ADLtp·~86!!ALJ*BOOOTlllDLR;kll?"ŅIS p;xʕ"OqĉrvmTΞ=kmm)S+OXEQYY߷o_kO>ѣ?cGEE!=,YweܹҷZɓiWs>>>ׯ_. ϟ_`N̙3ʤ FF<޽p$q&%%hn~ڢݻw0ɓ'[ZZjhhhjj+FaT\\Y;Dј V}vUU 55ՈE ʵ 8pܸq*D蛗'ռ{t>޽{w'NDZJ)lmmMLLz:t( \l={ P g_JqT qrgW]]7|`Hooo---I[[n=lߏEiO|XRR"FrijjKCN"22ž==3gIwׯ_{yy[)WZZ*]C ܾ};77AfϞu֋/Sk1 aӦM˗/1c9oʕ[l9tPYY;bEcc#7gϞ3&&&"]pa`` "^j똛[YYMDȨ!6+XiW 555W/TyqZRYx1ٹsgVV8AJ52@Q+xvƁƍb~'''7 [;={gϞ1cꫯ~G[bѣwޭT޽{\dd]AAA>T_|?YwޘO>OuY9rohhh|||ff&Jmo߾n1 ADo&==UV!vssC0g-ihhൃa???+ڵk߾}ÇҿA#~\tI4HHH/pM6j(MMMәΜ9sDxt?sε@֭8&{!HRQQݻw``xK!>"[RR"YF\  `cc ֭xQQQxYj1788ť!8xVϜ9ekbbbVVyO"t .ѣG۷!.jҟE;l0b@9rϟE#Ca ҆D:nڴI777WWW pUŐ!C-_Q'=b +}6.ŋ#}6lkG!֬Ya'CY̙3ߍݻ111mmm!Ո{ddAի5ݻw=== /t 999)))8b  5551ʻ[>|+s&"R !?Խnܸqio۶ +Vǰ@%q~&LD⫯ʐFP5)#3! qqRE?;;;sss޽{t >ot,_Y Ā/6lً_lقYKm<'O>Q{dd5)6w4ę3gTUU[)ywqN0!--c{7nts5܃jjjC wXn]NN| 1%-xIgҤI***x"5 wҥKt׸߫9:/!˳g-;v@ 5OfɈmll6OKѣȈ# )֯_/*z(`*=|P8qۖ-[pfϞ=yƖ>}5xcǺုXkdݻZ ]!~*((i(zl\WҵI3D#1cƴIk=<<_ȑ#8n'$g333''iӦ];VQQq(DD\)0 AQ E}!İyb&1x@eXzÆ "y;6X^^~SF11d:fBṯECmbb2P+gʔ) FD 1Hld |||p%.[lΝ/^vN3N>Yᴸ_ϟo``q7nfÇJȍ/Rc˥"SwܩS6,, G[B  1ˬHEEE[yQVMMMNN,kkkUUUjuV3ZOCܹgϞ^F=u]v566Jw=| D"`֬Y[n|r+gb ;ﯩ"Z֘9s5k]VWW#^ujLC"^ 7'{f43lycv%b~U3ޱ+`yͳ"(,,ۯǟmܹr۷8[,{4\YYYtkxB$rssw"׀FϞ=UdMLLNd4"4uer@?EbE7@"Z^hjj /;c:9ƺuю233E"Cީco?v u ̦_67`2exdzM-ı>}:bQ1-5}}}0ޡC***U)vAϟWUUа0b_ƸNϘ1ٳg]XMMM=2ݝ?. /e=Fݯ_?lW^:::h/EMMy֬Y7n,,,lQ$1 ADD;w׋Ñ#GD!))I$2-[&"O1tPF#fܲ@޸Aeo;| _lA|L5yP'#E0uܸqvڕF~?wĿA6'Bũu,&w 8_z%ˊ \`ӧO0`SPPPJJJyy_@ .Z`3f;7 nX+++kkkKKK}===q{ͽ|rkV!"649Y 4iHU&eͿE:;0j(ҥKŦSx@&C g+}/_R޻gϞY hkkc7bqľGEEajbN7ʩڐ}})S\xQXFw"_6ϔK,OS]]}֭{v_O:j*\!8===-[W_(Jpss1bqʈ; K+W^e3̞=;"""999??1l "RVLC)>&UUU"pIy!&&F!ϋ|̙"U"!~+ޔ1yJ@؜$rǎ8p@LrJsf+ϟ#R=rHJJ O#GᥙyL.\zxx`/_&&&bOSX4m4Ůan=vψ4s1#b삂:= e`` Hdq8vXjj*ې!Cppqd fggbZppp=z3p"k|Uf\Kyyy.\hn0 ADDԹzJD(--򼆘"֮]+)OXP@(_Y *YN={<vC~Z w 6,ZQdG]]]}||-[!krwhFZϟ//1 }2;gΜyh3~7GryBEE//۷oGX.VicNJ8rSN=p@ttg}6yd;;;쯺:]UUUejj-|@@"__ѣG6 k1ZDDDbb~#DD] DDD>|(OBqq<א&A n&ӝL@߾}[/1b#Vɦ}4ib1c b>>=zطo"DDDi"""֪MLLlll.hne۷h۶mE ,`DDDDicǎEee|Ѿ}΃Ģ+WH1 ADDJi""""Eh4DUU| ""e4"|tBt _#55Uh…LC2cH>: ?qʕM6ITQQٿ?%$$>u֭lu "64"& $366VZCCC``1b͛En՘ "64"|h\RUUUn0 ADDmi""""Eh4ӧ/_cҕZi""jCLC)B!ի=z$]u "64"SB "64"0 ADD+DDDD4ѯLC)DDD2 ADDDLC4b0 ADD+DDDD4ѯLC)FMCDGGKwc1 ADDDk֬知!ҫMJJ bH+[MMMHH˗/;CDD """RGu*^Q+0 ADDDDDDD 4)DDDDDDD LC?)IENDB`onedrive-2.5.10/docs/puml/code_functional_component_relationships.puml000066400000000000000000000022071513710110600263740ustar00rootroot00000000000000@startuml !define DATABASE_ENTITY(x) entity x component main { } component config { } component log { } component curlEngine { } component util { } component onedrive { } component syncEngine { } component itemdb { } component clientSideFiltering { } component monitor { } component sqlite { } component qxor { } DATABASE_ENTITY("Database") main --> config main --> log main --> curlEngine main --> util main --> onedrive main --> syncEngine main --> itemdb main --> clientSideFiltering main --> monitor config --> log config --> util clientSideFiltering --> config clientSideFiltering --> util clientSideFiltering --> log syncEngine --> config syncEngine --> log syncEngine --> util syncEngine --> onedrive syncEngine --> itemdb syncEngine --> clientSideFiltering util --> log util --> config util --> qxor util --> curlEngine sqlite --> log sqlite -> "Database" : uses onedrive --> config onedrive --> log onedrive --> util onedrive --> curlEngine monitor --> config monitor --> util monitor --> log monitor --> clientSideFiltering monitor .> syncEngine : inotify event itemdb --> sqlite itemdb --> util itemdb --> log curlEngine --> log @enduml onedrive-2.5.10/docs/puml/conflict_handling_default.png000066400000000000000000001534561513710110600232070ustar00rootroot00000000000000PNG  IHDRxQ*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxmTMs@ -!@;aKiLCJBƖk)<ÏGvIrJ'i}.4U"ːbNä-\s0`™x[*ѠkaA8Mڠ Jvd !䕦 1me<Z7g@Jx<7.1P hιT}ō-`apkM*[:{pUl|eJOJcq -QSF ~۾.6ҞC;MKb]H#L/6-+:wbMP7c҇ES})R@)!﵇%و} E m!ޱ)`+ç`nôh?c`pә(HA]ڸ ֲ.*%FO #IG'~cqNg˦Gim(Wcd''[NB*5($,쌬pxSLS qE%:L:Z G!/- q&rqB![嚺|Mĺ4I4a'0m> Lm\ZZ99y+9}wz>#VMƑ~]Ρ{D9Y7q'Fjwnqۓ>8Z6H& jnl\6~Tsyl$u)\+ u] IDATx \uqEMT(zd@[jV[els-TL$! Vb7%EARZw~;9\E|=1gw=393475 01a c1 cP!qqQ3ebc_rG_ ~q&k }mj80T̸wϖ|[yرc))){9u@-g- .|w?ß a c5RRRz{IOOcc@cXXo;.[O ahjРMZMݘc5VXm7c[ncPX' X iaz؉'+;|2'@ c9_=Xw4If|_Ѭ_vߏKd߿sES7dO%M0Vy,44ԻΝ mڸO>SGYKYX/]wXa˵Mƪ%,<TC{#"bd7G?hwVxQ[~dxOOwȟs ?ְaCyy?ģ-[6>s2*!yo[vZˌT ,]׭[f͜靝\~0:i~߾wKmn]GV||<>8R- 颢W^c,z^^/ߺKمjcdI۶d=-7Eݜ;/O-K{ʹj'i߾KYz;kGzxO3czӸ䓃cbdU?۶mSnw{Έ4:t)c1Ƕ/2>V>T.d&⽷q xvKr?~Z,:Ky? ǎ}Ws/et.[)Ç<YןK0T iz|H=r)3fsU'd=k7~ؘ3HH y/..z/mK-))QψO?a쫯#a P0֨Q#R/lӸq#up{o|N>>ʼOޑ4elfN?ءKsww3ce|nN Ȑ]/9ɱB/$!zeGF۳u1_ͩW^c,z^Y.I$YEI,^^2jԱc"$/@*GѡC;ܹzFj11S~C=3c)))| ڶme|eLj2T! OvťRLq57W^׾}s]A[XͩW^c,z^]c+W͓+>P[nURo6V}}=7m^,\.kWk}!kgڻo9LKL\v̙?alݺu| dl}s=0^ϑ1w6 ,;__eUkЕ1z1z7Rgϕ1rrVuBEi6Rrߖ{oo6VĿ./BCn~Sf$•s7|f\TLii[^c#a P0w$ukYOSG:t~ 垱4{NTPsnk/YeOd\~'xTm6j0_wPoz{Lyx@Wq[j'H^'hN5WLsEHauIZ9=y射۪W'tzݮ|?퐐{3gg.]qLL󲲲4ψ%ݻ: *dnӣ~{3d0+|GӼ::ˈYo2i鮻z[9NY׮M40IyG_8;2ڵk-̨_c_0u?Yo/2f'hN5c~:-QTSʗ zwrrݻ?&˓?TR3n/~$ɎTGa-s̈x'?_0 zحgjz2d@9łʏ~Ur\\HKK5={T48q aLIBt]ԧ4g"=BCC+Νˇ 0T&9T<=ݿݻ67*Guϋ_3/cPKa.OUcի\' 0T=aLkư>;; aØĉyll[||+Ƙj6$1 1107q~M1 01@ c01@a c01K/_6c@Xpa~~fLII0_aaa@@#G,Xzzz" 1rHOOO%)aL;Ca ԔTɤ1 c:v(3YYYt@Mv횿/cSIb?=1PG˖-[0jVaaƼxtpPc?\r9r$Ν; cQ8SMLO \jjj%u҅Gwa 1LL52͌{n̩@a0TaL~`!::Zc1& cJJJVZ갰0 ctE]ի @cbX-}Æ g>xemtBݗ>c  @cbYXK KKKc TO?466ڵk pX wZמjoص׳v-X 居 ~njuI&0rc@ cp.j(X~JrA]aŋn@ŒǸ>ƀ c ܐ+c,BfXXMtBw\WbggZ/ c՘ǒRRR"&//o̙ PWƪq@O#Յ~07M {}?V-++>}:c-Zy1ƄuܬS>s(/zyyl rG:x|q-p} fcuhxX[?,r5ﭷ^%ڵ޾knEm[~dxOOwȟs~:ݭaÆռi~Mߥ=Y>j Jon-lYѤ'g_UNި"F@-+++@n@6졂ep޴q}iQ}k>Ç< #"}O*$c39ei4OiԩoV6o\;^Q?Z],:˸^x6a^3GwVٿin1oA+t"B+//eX 3g111+?:99Zرy' wU{o|vWKsww95/fܹzMC;Pl[Q۠~~>yGҔⳙ:uPWbt&4'͝51`csbØfgVtJ[fMff&cbرcGZZC0v3ۿaذZrܴyuMy2/3]T ֨Q#-lUByi[Q2|7򛃃oSWLJwzМ4w=fA]ОM[ТU捱?U=uU c3f`@ @ !P˜2vc"76WK9__AZ4|k-p@]cf1F4FEٿ߮] ~Hxbz՚O]~ML;cU;Z4;[U+cݢf;;0V/[5-11d2Z3jaC7K ca )?^9,j#Av}edO\;v|O<.oUM4[e1GrTe~һᄀކNknEΞ./edڡC܊^1j'k&4'͝뱾}|oڸslj˜`g|6ٙbbb/&%%vmsժU6N5߮WeP.7nܾ}Çܹ;vܹsUXcuܲeKӚL7E1cC0ԭ0傞={uuu(uMuݤIcypvnafl6}?yn+1|vZ$3]s+o~~>͚9uWu4WLw_oXvW}j;/]wVf-zm3+:M9iiʊ߫=eddnZ2XQQիe T#ڵ*6k^sVVd?&%{)ie{ePcǎlRO4)$$$9 HMM={S^|EJZl<_S;JB 6损8qfw3XE cz[ͅO٣G=ڸB.+CV}%%%{9r$a 1&&F6'5mT+~Ybƺto>e>??cǎj\e^Jny/^lsj=2VeHds5*7nZ߰aÔ+-z裏qeKwﶧsl~d2Y/_d߯K"Zt.j>d;Øye_43U4,0V~9BiVץze$V)6:ƚWa 1&&&%^#{=w7ټBծ];0&F9884lP~Jg___Vv-nZIJ͛NfA`e^cII2/37Ң۷o rvvVv~O?T_pzQ/ c7zb|kގ1RKK Vرc>>>k֬!11{vP'"DcR=߯Sm3c__O[&gn*).nzLLXxWV1 U QGUrrrlf[y[ly WFDD 2ĸ#GFEEEFF>ƕΟ?߲ecǎWƾ[e~Ϟ=7v,O>9qą NQolݲ2Ib...RqUׯvΝ՛*WIɻ(PɊw쩚ℌKKK;}(E5jӫyPaU*l:uHEiVץze{=ٰAVRR"ǭa 7, ZXM:ՑΩ-Zqj^EB-cͧ5{W%˜Xr_FdGd^]{[yj\BBSbcct"ݻP~Ŋ&IlI&>}Ѭ mOiwnNN'VtY\n5sӧwvW{j^ZK[r~e/GFtwqi?[0wߵj￯aS:wu믿~`{{Cc@ c22d>S,z|H=Ƕ)3fs@lM.^;W^yڠ戈Hͧv)5eDԾ}5y[yfZϰa.ixOm1XK)#D'pe5lڳzN2_={W7Ύ52~4Z>j'@FnOY111&M6/?"66!@j5y{w=7e>;+esN5 jk,cbSǎ΋8Yb7%W(?:990fώ?29_ISfvx(^z޻ њk4/\GZ턱EX @-;x5kB1VØc^9ˌ^N]Tof30lCZ9znڼ8\0#kiV.{qڳcKcwkk=c-|kH0v̙3&ns疕1c@2&_ &%KΗѲ .34+Qn-IEnnmz{*Cs3{4iV2] ~H7ۿ{W^{Bot\xm1wi5Dxx8cbdƀcz;e P˵\'˟xQ0>Gۖ2zi O?y ۷ok<Ӿ}|oڸsl:Ae~z9ᲊoJڳzo^z޻ њ^eF cr-i٣p5*--bƀ cu ڵIfԯ{'O~M/ S7}ֵw&=h~̚5+::*a̶3g,^8..n&0777:..%%@cLL1 0Fcb"01ظnGa @1 c@1 0c@ a 8/_6c@Xpa~~fLII0_aaanݎ9bvս{rcF1ScJ$o9@5%55d2)yL˜$N:LVV1PS]'KTXpp0=1P|||ٲet @*,,RØ 0bɤ|MGwa ԒT c;w@D}UQQQxt=)))1}p 0yr_ P80mڴ{^%'' rDJpTc2I5AB380?\]]Mt £Gh׮]̓͟fmO7_h#m㏄10j*)3ƍ{U0vEEE֭ RgddnzժU|2k.u|u* @5Ƅ$f͚͛g26l(/KKKnjӮ]mʌTM0]~,x)S<<} :rRrNHHHu8q<<<_~YYYG=zP6}ɧ~zرr77/d޽#G4XhBU^({ݳgOʒ`I&q۷kvA>N:/\܄^3RSSϞ={ԩW_}UѬDa a ...>uynnZ333S߽{2-/-ҥ˾};*:t5O#z -Zh+%H>|dذa5+Ud{8Ɋ/djѢœO>&ɦM덎*[,,, c4H6mkcc܀0\ PRRˌ!̗]аaC,߱c]]]}||֬YcР%zW%^Ki޼dF@/3aLuرc+c%/zo^3oDkifCaޕ1IPף|}}srr(*))]v6jD DsȑQQQO>*~2g;Ø8}z'zM99uݳgʾ]l,ON8q…'O˕W,F@wyGU)(((44TY>u~}wwjHa +m6p@eA曒]nnn ZWyZֹ~zI_;wVo[e„  Pz@ 1u۷\u֫W.**;wZ… %jnBcKKK.M͠a a :$,kmrϟM&ٳg0ҥS޽W\,_|yea```jjBU^u^t:zHy]\\<==~~+..;Ԍ,/% I9tZL*kҤ\jnJcNͷFɒ*Zwwwi\-[,F@Źs$˿Fc0Vw5nܸG;vgO? V3g#0*l֬Y$ TΎ;8{&''*P9ӧOz*@oM:P=$&& JJHH&Z>も 0*ʕ+2W3Jny[nUKN2}m۶H2tvvk֬1hڵkEcÆ ;uH_7ʘfSy=XdI %1!);v ɓK%꺲nݺ%%%Uk#G\`Aii- 9j &H-[ִiS?sT+ټys+sӦM]t1dgZͦFp+**W?Ê+ûv׿U/zjI)vcR!%%%2syf{9zh̭[Nwmo0Tc0znegϞ*++ē0?ޢE k̟=hDY$9rĞPdΎ{z)&iժUN>m*j6s碣9ch2{XPPкuN:UXX8mڴnݺ)SRRSSSϜ9i&%Qy撚wa c/ҁΟ?e\]]ْƌS0Ta hUc%%%NNN냃4>={bO&M 4c̐!CNXX1'|IggN:-]*al޼y^^^QI[j%ɓ+4J  ysݻ7Hb1؛7nF"_Py $1 c$1 c _@#_0u  Fy}t҅{_;TFFq1@-Q#2,q1@-Q# jr9 @uŨ &h 22׬Y]AZVZZzꘘ[N>Rf̘e˖WܺIlԩŗSǏc57n={//jHzzzlllTTTAAa I 1;pİ4N:5O?9s@C$?s @m˛4iRII a I 7qkРA||M'N;BBBNH cHbyLXxxxyyyRRpȐ!aaaĉ ƉM)))_n3gp1 cW\_AY,\pŅsʦOΙZhy*OB%JLL4LV:Gz_fխ0&? cUTT@UVVBIus̩Re˖JjUzQaL3i!CL2 kV^^(@]0sL?FP)ӧO_kܹu0988\t&RPգ cyL3~;5kdff2Pر#--0Hbݻ+󹹹L^WhGm@˓ԴiSDڰaN:]:mڴK.)KJKK .ϻG͘1#660HbaP2/eEEEƍ88x|y{dʘf̛oyYQBNI,?O>Yc cxɺ~W5omk~˺)f#k @u |0ֲeKy)3'OtvvV5j,;vlϞ=G-&dDf.\`Pa$HϷPsl1Ҽu$vm捱)i0 l.]߳gnj"&&ƞQRRrO;5n0V-2%Ur7]uV̫ƪqwjl{̘10w٨2?ͿF F #GXW-{穧3JY\Ҭ0fsuvjs @Xa̼ǬØdZj$ӧO dɒիW2[Ν.//簯BhݺEEErXʼA&U [[ȾKu<թԩ0vcP"U9{̙ 6? 0~xKwO]wÇ{饗8p-[HD%*jc6W.P\\_~灁:B=2 )ZDqƙMuӦMRl̘1al}ݱcI0v՗qqq#Fu;$$$999}ݻwV;eggQFߠ3L 6>4ڿСClѢbyW|͚5ӫ_<==45)/'xvڶm+3HuS>'L.[W2%j W]7w} ?IzۢyUJޛnpn^=z۵nuJY޾}{騕+WFDDH:t%[1)M6x}NNN~5kf8'N<ܩSK* T@wttxh0I20׬0fsu<̙3J<j^hMߤI؂ Zj%ɓ']J?LC]c2:|blһ26x`9d&y>}rggg1BCCz#=_2|7ĉm=4_W?#(++ѣʣ#;-92⋒ ˜cN`u繝hOVtkdMK+**?;('2߫W/{0ֽ>FR$F?Ibƚ6m^dP?Z1*we߾}|~~~ǎ򹹹zWͪɀd2R/qӬSFʼTe3Iy-Jl=4_W??7,lgԵաCXn3ߐ^{ ip*={XWUt?'mמ0f'N(a/P'(X`I 71͗l]аaC=R@V+olT" 1cz5YԼZl<=4_W?I;g۱c]]]}||֬YS0f!S@5XŸgAM78Y,`N<a y 7u3a6ذa,>|2oq^ɩON8q…'OڌRRoUT"U1)#]+9ͳ)$V%%%k׮Ba̞-Ξ]SW XrU}lڸR^k{̨_ 3YiܟϟM&6R{dglw˗/޽, LMMtkrݱ*iIK2b瓊075$$d7n1b+̙3{F܂aLcaaa|_@mZ~e"4rMOOѣGPP%]WZZZXX~#W_a Ikt#n0Wyj3gf̘bga n$5}Y//$e… }||֮]K7 c={DDD|=hܿ|||tt_#=r_^xᅜz:sŋgΜ AU:6GJ\\\JJJyyy%>cpӌ\Gt,Yna XE=@ pUc…  08VAثGjSG遁J:Xa `}ݧ1e4_{xxL0\c1@M6mZ{%yLFe&++\c1@Mrd뮻$h@XϞ=yz pU5k2߿u=вe08VAԬL` p0 ݺuSyt jɴiӔ0ֳgO*cZ]!9sy2339_ @58~xtttTT֭[.Lrr2`tݺu$s08VAʐt\\eM@M:uǎG pUbΞ=z1r*mѢE7olb p0*..4i$N֬YvZ)*c`O?WQ]fΜYPPXa lۉFeeeY pUȡC-ZD~@/wXa tz.18VA] e pU@_|Ml@Mظq#g\c10c 2jNll,g\c1s+G '&&L&6TIIe pUa,99{ݺu[dIL 6eb,YXa *222ڴiXTT{Çƪe.]Jc` U0>aÆ͞=zyii1cڵk׶m[~ʔ)۷_\2""ťC7oV {zzO:wf*P^60,xe>??cǎ)%77*j͚d6,>>b+2M&ZѣGyIANNNU cvF١CÇS^4+!18VAczWKJJy"o\ IZhtCÆ fJ1Kof͛7?~KY} gggJos75_5rǎvuuYfq%z Ь0Xa ? 6lܹ2f3o|ʼԠ(ٳѣG}_*__ߜ =Bo^#GFEEEFF>i'|rĉ .}ZB׈#zWPPPhhalʊ}&O\\\=p@|֭eD۶m͔ۤZL%tYyLGbbbiiw}7tPa̢JR oJJJ$GɰƸhVBc p0Ƅ 3tRZdF=a,>>SN...GVoHww+KHH0E˖-3ۥK)ٻw+WL)zجҥKש_zLNNx֤IwwwYfhak} SSS+kf%1*cP#a^#f̘YXa 4X0YXa c .8VadԄ}[. h(++5k5Ar2*c-""B}!P}/*cPo:Urʬ,/*c`$!!a۶mT'OFGGsf18VAΝ{AR,,, ]]6cƌ/,8}I 8 @lڴi<:e18VAʸz꧟~{%''0`ӱc/^Xa s̉fd4@'1cg}VXX)Xa h*@F4 ! U0ic1pH  *cF8VAԢ˗/,~ 08VAT k233SRR"08VAT=zyL E` p0wǔ_1a: pU5eڴi۷ի1 Hsww,: pU5ʕ+&鮻<&Ib={|G08VAԬ8n=C˖-[Xa P233חGw. 6tM c` p0%ӦMSXϞ=yt j 08VA*1< pUιz-[f͚;y뭷d4׳n޼y pU&s訨[]뮕]622RRji*cP]r%..NF2_^^ԩSwXa cǎaEm޼#. $6qDIt֬YvZs*cPO|5~9sfAAG;\c1C>XEFFr38VAСC-" ˝;wr38VA:!<<?8Xa aqqqD[G|||yy9G>\c1l"ʭ###cƍ pU1cVˑXa nJ4hP`P-HLL4Lފ5RI pUcݻwwtt֭ے%Kj35q۷>|Ν;-~%nozuOO-[Ty櫫MØ pU&cmڴILL,**ڽ{$ZchٲezzźҰ^zYpҥJ7Osu @maÆ͞=[sПtwKNS_xqʔ)ΣF*..V ۵ko$bo޺=4hΜ9yUM!/KKKnj#[o۶KؼyL&SÆ V2W^αΝ{W\\\f͚Ec p1$IrӌɑD1y>}(ˣO-!{5^]NHHHu8qZFޑ#GWcz{jQy;Q]KBH׮]}]'"6jH>|]v(ӧF,TRRkNfԯU:APҗ_~YbKc p1'>1cG>\c1 XTuqJMd@&hZ21͵RP[Wiq!x'm)kE&Y*IR++J8a\]m?vvÜa~=gΜ9ށc#y9q,[`b  cZ7:u>i=;}vF>\ b YEEŪUHC^ng 0VA@㋋+//RZx<\ b јB6ma3 Xnݾ}hM;!!`_?y$R]reΜ9\ b e˖}GtKsE)B9\ b ]v%&&r$33s|&`ƍӟ.\e˖b:w;w!F5\ b 'O&'''ݴ%@{Rtҷzh42UcfC`0C`0`0cc  41M^UUـw&c9RSS 3228E` 0VAh4FDD= `28E` 0VAă>2\ b P}}}#=&)1Y .X1h(ׯ_d6 %& #F̀ .X1hXGyC=G}tÆ 0 رc~ƥ;`^WblԨQ\Lp*1$&&*1֧O.&cExlKw .X1p)2\Lp*1hL&SbbҦaƌ2o jժjF c %hѢ&c˖-MHΝ;'J .1-Ěz LpX110 M+WQVEFF~C p .X1%y={*+̙#}Wnjc 0Vb %F9$Ʈ_. ׿ܔW^+Wxyy1U@5橹2==]YKdj1&c Pb%6CdãO>۷ooR1{n% .11 oV0`Cj_מ=zR/Co^Ӄ С6ԋjxyyi]T|~:'11vXS&`4HVS&`c11%LpAc1 b 1J @c1 b 1J @z 10b \c-ZdlIBB%b vf1 i0b X1`6$C1h}Tq㆟_AAAyyyTTw|7##C׻;==b `}6+ׯꩧd'LKK6۵k`P}~!//O64 u ߿'^Yٹs6?k׮̙37u={pAUc ܹ'Px{{_x x~b `k6p?~\YMFQɓ'={C8 *1@}gRb?eEESO=yfeejjjHH^߶mX1l~xgN>͙1c TUU5hӦM8K b RSS 3228E b F`P{L Hz)1c bj))N11h(ӦM۷Ăe!''b @ŋ}}}'N(=&)_c1b а $3ftذa@4͛7w3ʥ;@1+*%ֿ.b @\dڴiJz.b @\Dt11p)2\@'>x`rr 瞓@bb"¶5kȠ1c`EUƯ/^gϞk׮U6[l$&k|| 2k@ؾ}{BB… 4.99955OɈ1 b 7nݺTk>}:66 vk׮ݷoW2s̡Lj1 b @땕[oh1 b @k$ุ81 b @M%''s}Eb `кO|,p}+V~$*1H^^ƍ4xr ")))EEEg}vAޒX1HLL$\re͚5%1 b @k:M6+-͡t'.m?k׮gcX1lٲvww뮻Қ~޽" ]i=ms-;v/[nȏ?`0ׯUppcd!//O]~~,9r$$$D=`cnk… GY[}{c=}b1c1[$Z$j2dHM=ЫN_x5ktaʲ lQ̙~kҤIJ9SN]pa„ ӧO"5c=5Ӓjs0`탔{WVVvqމjʔ)ɲj*_]Y~mּKNNNΝ-uE6'ƈ11[oU?le9+++((H+ʗ{/~ ;~It:u3gΨ S>Mݻww4ٳgeilٲ\vuV%]>cƌG}Tǎa;j=6frKOo6'ƈ11'ceeeʲ,f5,?x`OOOڵkno`2ow[۶m忎Ƙ{0R %iF"ezIHӖF.V4'c]t< jOc1b 1Vߌ)>g'cFz?كzGYXvmQQѕ+W.\"={<}G`A*$7oc<#СCeÇ[l\}b,...**淤`>1FUc1[WSڵE'xBY+5xYfcÆ S(L˿hKJJǕ+--ݷo?h9/rȑyYYԈ 쯑Kv1>>^/^,˖-ؾK.?***rrrkdLN`hħOccba+Θ^w02eJכdAC{blʕ=zBx?H۲eKϞ=۷o/AcW^yxxwӦMƘ{0R 7n(Hv(mi8qB>|X^Y>yd+tɡvL5B;Vٿߌ0@>1FUc1qֿ ck׈1b `Њ$&&ch"yKcc"%% @<[ yyy7n㫫yKcc⧟~иF#0FUcZ۷ݻ@#Rv7#10VAhuf͚{_eddl߾!10VAhJJJ͛G߿qFރX1:q~u#*1]IIɬY1@vv… KwX1}7銊dh{=1c ěP plSҚ5kdh"b  i @Ucf ~01 b l_cf1F;@ b l H;TUU؃w~4fhaԂ{ଂ1hMOF`PGϲd2qVA4 2s5g;wdf:=QAJ,((襗^│1hB2HKK 9NOm{=Ȩ=HN)1c&$%%E&UJL1sEVWWKIdA{9 @Jlw#F̠NO_yo>}俽{tOc M΄ d 6pZ|F߿Ϻw@1hrssi` c>=6l:{9N&1&J.1~x.݁0=ݶm[ݕHc1Mrѯ_?fhS2.b IS.!.݁3=U.;@4ueQVEFF~C p1c@=&1k26oܳgOeeTTԜ9s䎯1c@J N1ׯ¿/777eիWeʕ+^^^^b @%o.W^stN7_ncƘ#b ?H̷lF1.޽s>Ț=f5Ƣϟϙ3_S$b k 1rsscVco۸1c eyd6Ќ6))#Ƙ @ @1_f`8cc1 Mr6o߾^zʗ7n+(((//;"""fddzww޽{sAUc"##}eyO=,Ý;w>oo/ּcaaarr\'NvӐ!C6li1c /KٓKw1cWS? b Ef͚XDD1c .\Cf\@r.b @h@7nسgOrrrg/8PXb͚5@lٲs/_ޱcŋnܸA1u!+Wʌ)&:t1c h¢E>؃w1 [r%SF A~L&N.SSS !;;;## .1{ԩSL4CܹӹKh0S %&m\c14!K.e,[˨[1eRbAAA/\c14III;QkӦMܳsu:ŷl4j6k4_f=0.]m|}}1ك^& b hQ1֠emlİqA޽YSma1&2"ƪ%d _{LpA@cͭ%}bX}|2bL~4W^GۻwoN@-?˧NӵkWY/oW\Ym̨k֭[׫W/?++KYhUǎ ޽{z<=='NXRRb)k=ӊz9JlZm ;& yyym۶ϗ#G8?`0 ڴiS\\o׮]OȥK^x8((hժUHj=M5Ν;ߺ||yyGz&k{Vɡi+kRs{qqF9n?޽{.@/d6dȐzW_}UY?k֬Ç4tP{>А/GuiΝ;wz^YZZNƮillArrrΞ=W֌Zrʔ)ɲ +/#!ʎ=:n8G%T\\f͚:}>}>!g6__Y}ZOSko.xւ 5۶m1bţ[=;:CҡWƛVCO1& s=@"嬬 ue,SLwtu1{ S>Sݻw+g~J`Ul;j=ȭ[*sh3f<裲}ΧLe [cCs٣G[BBBNjnٲgϞi K>߽{z0,,ão߾6m1z/_W^mc'dÇCdɓdƍw}`0dff!ƴN4cZOSko.xߗA|tgֱg6,Z#);D%ƚb H$-Ɍ3f!gb @-̓;z饗Ξ={̙iӦ1G3߆iٲe@KJJtwyIj^hڴiV?gS&b ۸qS|hǎ۾};1c XQQQѪj*ۗ:$*1USfpŋ7b b ƀFc45pM6c1b -k׮ݻw/sGr…fRLpAȒ2꣢bٶZ [uuuRRRFFHQ\\,%VXX\R .1̄.vnv9|{>#*1_e˖&juܹ~{jv)@MW^lsIIIׯ741`610VA  b l 'b _8 @1`6b! /1b /1c i~1`6Vp.10VA 9RSS 쌌 b `0F:dd"*14wJ)IJGSNmɐ?~b Uc2e!'' PCCCd8It7րdH1Z̛7O,00PoMUcfhXFQd _fFؔ)Sq@2_fhE233{!I[Kwc/@aeYΝhmfi= _߮[ssv?dU\nѣ)xXrʹÆ=ppĉcf|^VSKb]%.5csZ+3fx7$6z6j}ZVۊ+o֯_dh11f+Ƃ/ӟ(ˡ=lRY7{]6fVֳ /eunս>guofzQKJ{ ?*.uWbuceʲg<t@/Noеk=عͬ>#gqc ٳgOvmcnM9u3 'tssS?XRdM?T퍵Kk3ڞ[Xbb"PW\qo*cc1 w]qxV\9U_%u(Uc9yrڙ[;k]V=r٭O曅~s€}i{c8|2F5KHHh Mf tNg->n=cx.x]p\rL$!*Z~͛7MCΟ?MY!C;o$]>ڶ?TU1ӥj:t(((HBYrawҥ^xAv%w_ji#;~'wq5Cc_6N՝|^Zг pVWc1b#Ƹ56?Ɗf͚u*_###O:u… &L>]~ԨQOܹs ~ɓ'Mn/5ktA,ӧfYݳo:tL wC=ꫯ*ccc sc]5AtCPY={Gf;vPΤ={ZQF̙cP-v5ź. k:;wCBs^YYѣGǍgc%1c ƈ1b[Si3fLfȌYYv1e{2Ue~~fNrKөK)Z3l900Prvvl,(YYYAAArppQUhi.1uLǎ3fi5h=Gu/RI;ۘo]պ9,-[k~/+11Fqָmm;O<5p;?j͏G9f;^t>q1#7nŋ-Z_d͑#GOO,c%WZNk'Kk3'7o7i+11clР2>zӞdrJcM֠x:cbɲ4d۷=`zzzyyW_}{WԿ6llg͚_`ApȞcN.]szjNw!IΞ`ZQfС,i9:f,XrKuvb6sY9?/++@=ԿQsȇvfc;ޮ^hOZyd0[_m۶s=ʕ-[ѷoM6ٞXoٲE}rG'Ƙ5}YOO=z$&&Cx)S$ o|]|N]\zlk.[tԩC5u7UڛeԋRq5E9ϲtoZݹ3rtXݡʗ^iyimгظqw-'`0dffXI1bLYtxl6sMc"IN^i}9cÇ%Є14Y@2O/Z<30˫sύf:nwڡǀ}OTYWz{{vtر,tLo,0ٳ^β=op7~饉ېOY?W]3dgNreAWhh~MZppΝ=MnfڧyݺEO^ Yo}wЍ髭>k~8jg 2b쥗^:{3g"##MƬ]F1˩OߓΕs {|+'&N3sc /Ld6U >ۛ|}2gg^xaȑ'';n~ʗm?\\y->lso=7 ) YÓ"e bL9NBc> bcz9l,XBdk=o-[O>eY[HVkР1III:;4iRii)kb uL1d-ce}^!y{=+RY6I+nR׺Ù$ru1=;M0R$ywey;>Nu(<}rv>Ou'G@:9Zս)q_}BGȉAclժU%%%LCV{!b ?tl^+ؼlÑۇI[looùʲ,!ƴ޾v: @' ;3?@?Y5ޡ3?N9l;vYݧQ7z-Nf}Nc;1;w3]oȉAcѣ[la& r)1ch1܊.|ޭ۝3 H{w:[qVh}pۯsPbLk!Ca+ߏ}^^=3_EʞG1]ɗdu~2Zh|RnN2HZc5r`h,XLh.]t&1 Řƍ{͵:9GtBmя؞C˄[o;Wzz#F Vn1gے??S^_-i髎ƘzCo>xf\3>__60 T77o7cC?Bdk=я?s%|}cZc5r`h֭;uQz7 11f}N翤W;'^B:tネ;ٞCg~Vxxp䎎Ƙ, ƛcZ{68[ڕҲ#|2'?]uԧ N:`@_٠ww7b}H3>>]& jZ'>'_2>z{z{x{g{19w04h]~]$Üub `Ofqk[/HhmJJJ̙㬿#*1n1VK.=y$sS(//7o^YYYS\c b1ֺb:99y߾}Pgvzcc7nX[.%%*RUTT;˗/7LMsrI1nZc ѸpիW9si+ВțZkʓKb @qJcLQQQehd6Ihٔ'1ƭU _cܸq#lC_+qV1f /x D @ b lC_b _cf /@ @1hZl, c1b Vg"c1b |FQ׫=vi0L&@4=bbb89 b $ ""BzLt:,pr@1@C ـG1c k„ 2vStt 8- b av`  b t11p2_~\@r pc1b Re1FVZZhѢ:XyyyBBB~~~lllhhhPP2 ((($1b SJd2)|1 @c%fh4*t:^O1b Qb*僲ѣG z 1c=%fh49@Ա-11b P1puQb@(1 @\cc J 1cW(1 @ ?~b b l cl_cf_f~0~4*1cHMM-((:1b |FQ׫=vi0L&1cѿǔ@ZZZ@@@LL '1c"1Ytb TWWJlw#F1b а&L n7EGGoذ1@3ƥ;1p>}(16~x.1(@r p @\Jb &˛7o^tiRR8-Zĩha +oe˖޽ƍ(1c̅ ^ɓUhlIh8|B~1M݉'$Dh***֯_/UV]]͏81ohy̙SVV:1IKKۻw/sV*--11iٺuG}lh-_x1b @SQQQd@k[oq=1Xxqqq1T5@L&˙b Ʒul@ٳ~1b @#[t)sSYl?b bڴipIOOtrgϞ|:רQΝi51c 4${&v[n;v_|b,00p8|󍷷w~~~ ;T;9{q;vPټys޽_ew_sXɋh4[|9zK @h1&|ɓ':utcnnnyI&OK궷~_.(((..޾}ҥ| ?CY>|zaÆ;v|ĉ51y @h61Zpȑ#StUKY|1僈m*&9r$$$DۺuzqgeeY<}ǏGGG{yyu1**PYҥ^xAZ4\zu2Y/))y"##322/?6 ׯ_od\200wcSRRt:I]iZϰ-9!N:tw`رL/WXOǒ>}Y|ϕsiӦ8yveaСCk>V}^PHشF֯Κ/g@Тb,''srLL̐!Cnz衇^}UY9eʔdYI3xi*nHIQacJi"HRgnu8heJ&IK=rN%MrDt^=߱gV?I|ޯZ{Yzg>߮*oR dx!CENѷo_rW}95͒ʦL2w\uve^c俯}YuuS^y͖X6Hy7PufIgDdذarϞ=kW@Å ԗg ڊ+gc%"--M"e}ݻww?777 @V222ikttyƌ'Q,ImEEEjUnnnvGѬӎLM&.l#(ɺc 嚚mwJJmqlǏk?wfUzUۮhtf@J3d:wꫯ'To)$Ԭ|˥0f0Vʱlץ%7oСj{ڦ.u&5~@a @ cyyyݺuSez]]]ˊ2ۖi䄪*wwwjwUKufY8rHDDԩ?YaLBo߾]v1/s{xxI(lf ?f;c"..wa`ϸP6w3'!cT[tw3G^lᜨ(YvrWlذ֭[eeejy~I^S=XpppAA DFFٳG}̞wMwzm0Uk`sf@4vڵN:)/g&Mds 9Ν3>kvsf>3֐LޥI)%4irfϞYQP̙3RouuF:ܡCO>}qƌ׬YS0vm0$$m;wtCfƍپ}{xxӿŢ4E???i̙3OU`V7P cuzJY߷o_dd$1j11,,LFIӟy:ܹ3h f6tRg c9!'^ޥVָq:ϑcZw"66Ve_͛7% :յ\Nŋ[55@a aO<ѯ_Gr6[ 99@a C&s2fƄ1@ۓu{a 1-Ųe˪@a @ZLU6lÆ yyy\cZK.%$$ǀȑ#\cZhg޽[n*@r,[ymƵkג2331iii|4z:ujժUfoc he*++SRRFlAh655533K@a l1 pcl1 ֮^ 1`64_[lY~~c |Iݻ/_&/@f@&1y \~0; $11`6<$F_0UVVZ,{5b_333eGN 0`6Gs7Vs)M>_~'Nt/cfxdwavڥy$Vg ?g?1{ȊwbƤӧXC߳gOppG:Mۧ2YF-lҥKŔ)Jۤf _T߾}{xxs-۪Y`d$Y|c=־}{{ ca H 1cNi!4OzOh]ge60xaqMf~-7=;a0F@>^Y/_|EF >Ͽ{G[J4Էo_rWL6Ms4//>ԩS4YҘ5Ø^:i\0hSaL".s_777qHHӧb___e_&'l=w,ǧFg̘eF:zk^ *YjUϞ=>9>/鎲.]sl*l ɤ9tuwJJʅ  РwgMoHa̙24.Fc0vI?о}vɿ;V]]m;wvĉR288{ärEKjV"dzcKknԫDIGpwwWZO:7tƃv{xxeddhӠwg͙!=PMb10@cʧT2/((мwg̙j tС^{ͱr74_PW9*ltÆ n*++sIuxv9NNoHɓ'Ǐ,M#1~֭:V#F-ׯ_?|رcQFZ:txw}q/ǚZhPYҥK-R?pz1J4$iǎ7nܐ&L0cƃ6nܸZ˜;;!]hkew)9zeiBb10@cfK.OSLII qss8pΝ;տ@>}ߊ+:tR?7LRc#kjj,X ?PfZh\ġүٳgx@VԿs)U٤={H21A۾}{xx B-;;!}_suӮzca Vƚ±c$͛w 3 w)**:w\dd9s\ի{.,,$0h/99@1o/LݻO6~*پ}{[5.a ƴyfh:{lFF 0@cLKKc Xvjrhdqqq̶ \(/77W}9;YYYBh˖-b p[ ЬjjjbbbV+3oֆ D1ХKcȑ#\M(&&W޽{ne LVkBBڵkə\ׯH9}իf3*x*++SSSSRRь$233kkkc%aA a 0a c1 ݻw ˜O186mT\\N8a 4p5aرc!h/<1Ib>>> ,`p0b1LAAA$I󓕼<cܿ?,,Lҗ1WIb @JLLTO>۶mcX0Vyyy@@dGwa 4_&I3E1L,K>}$ݛGwa 41<cY%&&J@M7oܵkWRRJ0F~_:t=!a Y,KYٳw"ٳAhrrrRRRKJJ1raYYY̧Z|Ijj1?f 4˜j0a +VZ/~I/~ivv6SgUUUr va,?StylϞ=_|f2ca-ޯ~j]beI<0XXZe(%&&VTT0Wj]|9s0XXZek}j6zԩSeev9֢E|||<==W^lo'LеkΝ;K%%%$uƍaaannnuŪ4ݾ}{ɒ%zrww:ujUUc!BCC7o\ZZOmW\+xtI޳gOΝ;.]*>pqnܸo^=zy[ndj׮] ^Oڣy 4{(oXvEY?ydPP]#o޼9k,id@@~fYzh0$U7xCoW@rvu0ƀFc[zޝ: 20࠲(NHӵkWVT s?M<ýKL5wW^Swo?d|ͭc>X9t>Y%3 "7׻|߱㓲Cy_|睩RZqu43,0y]Y6zu~Ww7˫g7YQoꍤP{ ĥ_J߲&))~ժII iik,Ν;g4mgذafϞ}YqqqÇ+**9so߾W^}7MNvǏ_PP sŋ2xfsddd~~~YYٔ)SΝXg}V]]}ԩW^yEH㕟~/f1ᤘL+**$J{$uĈ|0V\\iҤLj#L#vwFo$ cǏ= WnNgOc@#ʪz:*aaA~~ޮ1Wk0hrw>>^alヘSIw YկjAm=׮[ZV/CG՗zG/U]=#7 :h8ԣ_rІe:]S 荤P{ 䛤)Smѯ=iĈ9s8y˗/ϝ;wˎ;VWWە9rHDDr;7;$<<@۵k':p{xxIP6N81==Ν;B5IptG%+R-2Wӱ͞K]v-zr֮_jN6^AF0w+k^ ca h0R&(w5Z˓9k.,ؿ{A^&Y/tesLel7_rOÁ-`{?pAY11 ØQ ?zu캦It8&i/:uڲ.mټ4)iK'vZNuI2w6lPZZz֭2"#I(((pFv驼4hСC^{5bv;\Ø1:z=5KG^lȑ#zttf#OGyՏo9s y^[p=fjߟ~flȡK1Ihйz:|4 [l^v0o߾ȧzJ2 =Ⱦ L&3k֬Q6ٳ'88C>>>2wo0vm0$$m;wtaREK;bfK.uaLٳ{< +߶L1v=u&̙_ǎoF|^nƌ]vZ^YTlwI[VqF)IgΜiLKک}@#2w ?wFWØ35Zݽs顡:<ѫI}0˙xdzIY?g1-?}:?gs:j/xF$p KOS k 9 (u*):֩`ӳ,IH EC`6p?0WX yS4Р0ڿYRW'%-;xpQ cW^ݻwaa!=CcL?@c!E~}a|o^NjzJ{ HIIa a0_6oެ~&uٌ a KeeeZZd]j2ca01KABBs0XXc-77W1QVVց{10B+˖-b p[ Ɩcaai.7jPSScZ1MaÆ yyyL<c@IOO"0c111"ЈݻuV./a :Xք4ܵkג3331u}@=>}zfocGee-[RSSSxyy1-Z*33k@m1c01@Cc@1 0c@+w5cv?@شiSqqf;qDff&C1{E0#kkk" &1yd%)aLς  bXL&$I<cܿ?,,Lҗ1WIb#F`d0l}n۶ahZ偁j @a&IIb<cX,}J @D}hVfYhW~###% ӧO_~˗ wɓ'GEEIɑuK.egg'&&>sΟ?@a 4qʕ{5(m۶g}O>a0!͞={wޭpUUĉ? cA,Y2k,dN%mذ쨨(W zW\-PUU1 nj#yvKBBBppp_ n۶m!rrr&OleْHBOmcs=\k;xOVhhիW򉉉ׯg\}%嫯X٬/\n:ؤIƌ0 F•: 8P-_UUs1cӧϽ{ԗ>lalذaj˗/GGG3c}Yzm$-\P-3c?]lՀ 3ѱ9990 a @01XǟHIENDB`onedrive-2.5.10/docs/puml/conflict_handling_default.puml000066400000000000000000000021671513710110600233700ustar00rootroot00000000000000@startuml start note left: Operational Mode 'onedrive --sync' :Query OneDrive /delta API for online changes; note left: This data is considered the 'source-of-truth'\nLocal data should be a 'replica' of this data :Process received JSON data; if (JSON item is a file) then (yes) if (Does the file exist locally) then (yes) :Compute relevant file hashes; :Check DB for file record; if (DB record found) then (yes) :Compare file hash with DB hash; if (Is the hash different) then (yes) :Log that the local file was modified locally since last sync; :Renaming local file to avoid potential local data loss; note left: Local data loss prevention\nRenamed file will be uploaded as new file else (no) endif else (no) endif else (no) endif :Download file (as per online JSON item) as required; else (no) :Other handling for directories | root objects | deleted items; endif :Performing a database consistency and\nintegrity check on locally stored data; :Scan file system for any new data to upload; note left: The file that was renamed will be uploaded here stop @endumlonedrive-2.5.10/docs/puml/conflict_handling_default_resync.png000066400000000000000000002057241513710110600245660ustar00rootroot00000000000000PNG  IHDR,+u*tEXtcopyleftGenerated by https://plantuml.comvHiTXtplantumlxmTr6+&4$|IbrqN@RD.™||@I4"žvTH]POL봠6My0uz^vIG} / nl9^A>76QƿR軠yy ]j&lJ|l| mMjBcj^sX3x|lMj]Qm2д8rs,w6&rD}<ՈfQ|!3~i^@T"$K"ȢrkDfs/$ GwF+A2& ,ލh Y%ΪXgzuPumFiwC#H 2^,[/؁T+*@95DtP9'։нJb>*GH,YH4@i/|'pk׀y].6zR{o `,Mc#G& KK :W,s^e@||ЇJǪOl)[NkY <<6(+W>X8ʯX@p)yQ#5,5Vk'Q!++W=;E"mע)1c楤/,G>zDZ+>CKu#o fAD^)Iw+sh(z7/n8W;*7dӬ̪ 5N ve7̪+W)o֗?S6xiCol[A_%תs 7skGYKǷ'3&ɌIDATx \UqK\ (QdVi>Kc")Rf.- ZZn+"$ Ͻ3s ~ޯ5w8s̙{y5CPH[Ji @i"m(M-4&DPH[UȰّ(JVa-@i_APJ7b̘w\ m0IPJ̎p)`.wMLLܱcG\\܁nܸ4i -JUK[2\N:5z6mx_|1::lH[(*ݻSNP׷o߳g @i RuҖܺuW^Сm۶OҖXjԨQIԝi\{=ڷoyH[ m_i )L٧-x+_9i %mIL3]~(bx~Gbbe^:-˾^LˑRfӖ \޽ۭ[7;p-ڒI9!s2 XY%ӖvݸD^Æ/J)-۷*GO[I2<|FF|菓çvwwoo$,bYxyrpkذ~=.LEѱX/ WDnUmI[k-k~֩S[yhj-]C^<=~.WYzqMqΘxy%HWʝk6m$Iwmmm|}VFk|Uϗ+=SkԎ;iܜ 7y}ZڢV>װ^!^Ν[^Q:uuic=:i 埶kK1ϔ'AAgE,M~_Z9'G'22w!F*7(~饿/;n>!&F:lKsW劽d'Jn&MzWЯSgvI)ȉbw:rUbYATMqΘw^1V̌c> =7)NNM׭_x0%%u۠A}Ě?~%P0tҾԎhсŻb΁[!ܧ~Z}џwe=aSW_}=+"bЈ""&GFXfΝ$''aÆyXիPiKڵxͭ'ԩ-O2O$-'%&-x.-\o޼\=7WywI[݉ b+-J)V+\<=88H,SEnի{߾}@BE7]%2rf ?ϟo߾δeժUP9 R^iӷo_휥M6[n EwZ'Pcƌ :_N:`0̟??..֭[Y@B` @UR(2)I[ m@%@H[PT -*i m@BH[PT -*ƍ/MP)<-Y$==]~iGGG3DJ)++O\%&&߿!T:-(g={)mvuu;v,H[PbccZln0BBBH[Pܹi0Zl)~:;;~TR-(ǏgXaTR-(YYYRҬY3ooo H[@U$Gaa!g`gϞ-<@UȰ7B܏GKcnnnG mP(+#';  mP(֤-' L?`0|\i P(+Ӗ \n޼13ن ~wH[( Ar)SDFF:t*u1ܾ}j{jH[Bi \ W\'O5@-5j(݉h7X}:^=V޷;bl܏Eǎ{Y'\6i Qb~̇+BPERҹsUqz¨QbԪ)bgN>΋9,3C=&}{vsBzx"#sWգC=za߾AkWSk֊s C1bji1*=ҿka1FA(ܹs˖-c pJ-mSbiVI5WW eUk-OrbV]\ l3^^jCacW܋L=]Zι߼y3y3gU3:ϝ.jZra|gAgtZ{X;?mQL+JIҖK>}I/P.bbb㹄(E{.z~j}yva, ޽}CkVܣZ5^3j=/]q/oՎWύRV-y{VMY+Ν.wLQ,h7zK@&2kS%""/P^>3.!"mn[f04QDʿoFHJoG^?rnZգziƛ+VFg݋uojyfΫUSkָ ZvQLVmll,,-_9nQ< :{eŽ-âgYi̙3q~KX~rvv.n}Hu={6@etۅ)b6TAO?|~Q:,,J=k^&MXAb,vfۋ2aHQ ݻw8q+EΝ*^CsVMYb2tjWۅbQ~i i-DG}mmmZ#Jȼv_,*oV<֭<AdX+S!!#\\ NNMEg/E UԎ]q/oՎtzl۵{$&v^Ԫ5_:B(ڈ%&m!@4|EZOς^}A3믋 {7z&>|cӦMłx8\&QDdK=ǎ": mTRX|MQ_DOƍE#ZH[H[(XL[d2%%E~)7oL>k׮Ν{饗F%Wݻɓ'[o5i$i ~bKJJې:Xܯq 52\GfiMllc=ѸӧO7lʕ+b? LۓO>gp{wҥϋA{joo/80E(ś>W;ָƍS.c(,ŴXXhhhΝřMKK:tvjCV̘1O=ɿu4 }]nnCH-@BTbʳwib/h--[<|*WHNNE &|ͯ~mllvĤZZsf[[[5nYlRN.5ׯtZ.\طo_iEogp,~%;;|~ۭ[7i900p&w+!!Agnyq,eMObRjV#RlPmHC;t萴,l֬٬YB m :/)b};|ŽQ;mUV͚5OAW_5br[{j4kroKƍ$ʪ_~ĂxѸEI666ҲXIڵK.vvv7oϞ=.]*-/YDQH-t8R{&ڏQ;p#wÔ_ Z}Ѹ9{y<==ׯ_O-P=-cGK3%iG,ozoow{,.Usq[1c_uBBBQQm grJ&B,NwѶmm۶ <ؼ|SoXXX>}8pԩS_xeW\iذӧ{[<(-8p@'M"/Ϟ={sΙ%u1~x)V$mѸQEunbEbqOOO{[_ Z}{[;vk$i i i}2pXT\ixk1mٻwoƍ׬Y-fbyǎү:tʳЈ^tiΝWjs;vYz_dBRk7??_@XXh\X1ָLl׮sLz!=Dlpđ1 QQQyyyǏ6CqrM!C̘1$iG}$?K.cƌĊ &Mo$1D&mQlPmHC"ΩŎ[rss`0i ~rfR-dpy1I7^)n"|>>>k"?.ŋ1lٲU@@\}ժU΢~֭+~^= 0"7OjM]~og1b„ ܹs8w 6_[[ | 6olFlӦMIҖܷ~Ă%E&V-G^?%qhk76jűvvv͛71cPc+W/Vői TEVe޼Y+s=v|pJoAU~AH[tҖ¢`hX,7#y'-4t H+Oy^v ߿g-qrĈ!/:?@{_eZ5W[{իgۡC@bV#U jb%FF|El"{/=|hww{o1fAzԸWKpq1ԬYS}]OPjKxV9OnҖǏ7jԩS2<Wjj*sxTp#FHKKKNNڵȑ#Kٳgs -P iiu:On:L~сO8s`J_vDݺ}Q^6%-/,وZ5t SRR Gn_2Y4y:>Riځl%E,M~9!=z<+!C=|[=Gjܫ}/n_?GWs`5mQ<_r5ų\ﴊ"1&j2~.PaEDD8;;7i^3Y%?o<.!J!mpM>񓴜MZj.eX8bhY4eܲbW3.NkrsHmmmbڢ@JNRr>>'K97o=QW;R9G~־Z̏X'ZXE|r,m;wnNNi\ڵk\Bi BbciY,rPLϹ߲\Gg#jՌ#{Q#;oo[NOԎbڢv &[)6nkkcՕZjoHwtK}tuI|nyr,m9zub}iKm3[[o]y%ȝiWj;aQDn0UDA$e^uzS2]H\V|1-b؋xVgvkOѩ+։.{[LNŴE,; aLz7sLJ'm0aЍ;N8RZ?mOg2~¢T~^iKh訧"?:DH&Yq7M S<ɩ]H;uj;y7 22wځEӳK *ph|[=GvWD+UD[L[r2mYlYbb"S_}癙\?i Xy::6E,S!!#\\ b~Ţʸ_jQn77 ´1}}睗<<\E rF"5X͸DG}mmmZ#J{vI[;tWkHR;IԢ6|`ݽ.:)o9RlB}]NbQXLNŴE,;,ӖzV.Pm>}zܹ\<i XPO)yd@)Eزeˆ e#''?-@-ҖfJHH` ZBBBrssr mTΝ; ,صka~?&j mPE"Ydg}vef@ofϞ]PP5i R!++kʔ);q$(!Q;wɓSSSZ mPc"Ϗ`00@q-@BT``-@BPH[@i Q((Di P H[Ui *@@ P!mT-@H[Ui *@@ P<ݸqIb[*%K/ӖhP鐶.R#m@ ?+*;Tҳry>.#m\vڈ CxxxO~駢">@+MG@>t{~?fϞMdOi H[B5C7"""i c֬Yzg}611iii?ׯߵkXڵk}}}xS,oۮ]vb̙3i H |AǎoiKn}옘.]H׸qիWk֬ѣ7|C m"i]^=y k֬)^ >ѱiӦbAOرc]\\į̙#vĉ #߸qmV-[Ҥ=QkX=m۷Eׯ_ֈwwmraÆۋ>SE ŋ+_obGAZ79,7hРO>7.iW#mܗEC޽{c|#t>vI77Xn޼񶯽ڌ34n]tohGj-@L[$zJHH'''~EҲxif˖->,-J͚5]2Vи'j'RٿiM~N6l<i7tvvnР / GE>|[tǐ=M"j-@L[߲lllrsse geVV5k={;@USN%p;wꫯi ,.Ǐ+EжaÆ˗y蒟?uT Eׯ-( 1@8tPddi tůzٳ7Pߢ Pi P H[PT -*i m@BH[PT -*ƍ/MP)<-Y$==]~iGGG3DJ)++ur"-111}f4~x^6{?@j`ʔ)9997*uU̎>}:<<i @uQ i @@B(3-Ν;}||ݻ',**j֬Yzzz^^^>}ׯ#K󳱱"j)Fs1 ...7oV={k׮?p``sxi ʚZJZ^l/, mٲ_ݻTQ5ja_vO>Ǐێ7_~em׮][w_痜,V6jԨ]Ts?3|۷TEBpZjI+]&^joo;H[P׬YiӦ^Zp󚙙{'LԢ_TTs5W"p-/iI-(w~Gtrieee_z뭷Ĝ߾}9VHHHӧOƍׯߵkXŋ֭+~.Yx`B^?У[sww߶m[Iz(-b'Nᅬ?oi M.]}Ye~~/looߢEkJ+,YiccaQq#v*9;;oܸ… 6mb/'(ݴժU%y࢘9sk׮=O?W_MJJ*:@$ 4HNN6ЩS(ʕ+yۅ Tk2##gyv!ל8qSӦM^BBBkt[iժղeԎf͚͛7s"_wŮo-*~)j1fΜioo߳gQFmܸQ V;wN~)yk׮nzڵ&-Z~z???رcEWX/eooofEglrCfSs-[ԾƼ]%pLT.\(PΜ9jժVZ_RK[]fߵk-$W W^5^+(6;jԨG}tС1#KڢU J BJ?ma-77w̙W^q 4Ij*c!/П۟VX!mꅴTCYYYrҢE P= 0YZx>.7^H[@'y>.7^H[@$?+ @Bӧk!2@R̎ P(Ry @n޼1dZ(<dԐ!/GN2%22СC7}֭[ @}0޽{I[H[H[(qȹtPʕ+ (ᙙ-- %C81cƜ={ 2?{ 6P(-87o3FL{(\nJBBdggg3P^={P*kQPi i 3X&{ɓH[H[(21!m)PM8irwԩ>y{fY5k6hc7ܼC&*8:6?:괅Py9sfٲeLTӦM#m!m!m!m~ c&{/=?ֹs-.-JjŧOf"شiS||_8ż'PJjV%cG(_{ttl,K;$ڻ語ashJ\1W'hȐ~qB-je^}U*3f0PA\zUD-.m3ńy:ujk^QnQ^6%+Җ}/^F ㉌]W)CNNM׭_x0%%u۠A}Ě?~%RC_1VS l~zŜÇ6.ԶRڮF )>Qu0iһzmQܵFW smESj`hb~o8eƽݵkR&22Jd5M)fK(ggj>{U)b''(((ОPTEW[~㸋=Kԓ͛7]]/;xnB9Kfjx{\wZ'(<'~==-語ashJV(yn:w $m!m(Zv< ~eZeL[JeG۶muKMMldlR>:--X|2C1ݻwsZir[vmǚ7k_bm<[U=ը-_K+7,nݴA_mohLwZ'v6J&ǮU ^-Kv=ڊ#.y&L)LB m1o߾ƍ^:;;{͚5byU&m)B TT<--K[<=ݾ]y%ȝiWZVMZxj^Ĭ~S2k#⥿Ϙ1twwmoow{[wZ'v6Jj!=$uvU{؋uz*Ɂ+>W+BBViK̙c<z祙L-^ߤ׮]8qݐ!Crrr ,pvvl<Ŧ9looߠA>}dffj׿|aD-Z|o8?MA>|cӦMłxi`tx[;vػtϑqF1VZRVjMH?ǘơmd<aѨ`1vkam b>,,L߬Y-[%,,J=k^%O[ t"姂[7I :rt”MqD~e3-M00s[wZ'v6Jj'L)?{'4m&ZgWժ9V4U+z'( աCi i Ŝ\/rmy璒4,$$Cz]&&&;w^5j\w'OT)6wҥϿ[v?8000oO>vڢ˜1cz꩓޽7/1?7q,No6;wNHHHKK:t9=y+}+.77СC,Vb#hS퍪^,?^1OAk|XtVЮ_=izذaٟ}YzSZ~i iiKZ[a%O[Kx֫gۮ#1?,zQ_[[ֿ숒]w,THS/M5.RڮFI”w}ѱ(bA PsBXlJgWժ9V4Ur5k>p=qƎ}RA`~z'i i ܃>(& A`ccy|%[[[ie˖]]]jTŦv-ZK˿vڢ؂"Jˢ)ioG۪|KT_gլYYfpGOQD^J2VI謠]Mmz]={V`,t%ҖJ\j^e? J/-TX(ZjլYS+=D]vuN~@v}\iY,h-j-aq j5٣q2vz:ix6:gٳspp\~}GjoTM*xZ=j']â~٦q5e=DBR){_.ަMK@S(--L[gܖK& Q , NZh_={իΝk"m){[V'SLe09G:gI_vZGGG+ߍu?Fϡ+*rIqP;?,jL:VMm٦ŴE(T".PH[H[(n믿6nx͚5b$+J,37{DDD``yҥ;w>V-bw`Yرc{!?Ê壏>" s1t2f=I4iRΝ?gs׻woo qduڢ&)Gyxwnv-~X*tL~;MiQ"m!mP(--ꕶOݺuիW?5aÆk׮͚5e˖5Ӗuy{{6-? ͝;׊EL_u;;͛Ϙ1CZoobAֆx^r?tvv%s{ʕ+۴i#VYGmiJD:t**xZ=j'EIԪW:۴%ҖK7U5ozoo {i U/md3k`FT^ZNơb"m!m!m!m)ҹsUCiK3bĈ]9)î]CRܼyBO}S 8TA RI[H[(/3f`-""ٹI&ڥK*2i i sΜ&x*={l߾-b"d C͚5>u}7x I睴QnnCNVbcc `f'G`pyZzk1f֭ճ! 1i䩟 %oذ~=.Vܸ(b;5hõQ##_,j*)Zjl\t=LZ:ijxJ2--СC֭c"1cFQQi iK}/$sNHOddʿztȐ~GO6:0}s >XZ)fAA[&fX{R5yt SRR GO ѯSgvI)tVZˎ[O\0jԫÆdhGq&}Q6}ԓ(Zjl\t/+ƻӨ)Vƞ=6ƥS|p )#s=>j qyx{WSG5)+hO>رc &KERӖ/W϶]GbbKTHhw}ѱ(bAIE󲃃Vm}& /;fsBXL=6ժGݺuܜE&QkGg)-Z>|~Ӹ$&m!@TZ"R{|Td|Y0jKSV m!mTIwܙ7oΝ;(3Ψ- P,^xyyyLW|ٳ "m!mPH[H[&O޵rĤ<"'n1nW.:K܌CBi ~]J(5V~ھcүw4i9'bQ|:A+ 00i cڢ+"[W϶CĤJo)V6oSçvwwoo$i}3^3iһC[zX˖-N'$2Z?E_iR{ϯkf̓0SRi h-6Z5W xx6jd7r+E/Y:PfM(_78:6 T;iܜůD;ŕj-1M<D 3a6I[Z-iK~Oe-&ғ|ЩS[4f䜐=ܕ!F3t}޿]{ :O4^#^ M[رsUv)=6Z?E޽}6 :Kzٵk{]895]~”mQ|~QB}e_/ %~u~(ݺu4]iiۋ]90|`QJޓz+uCqx}~%Nߵ F:lKo=mpH[P91? n%ڔJڢئgrΥ͛i4uQ>kc󠇇GSեvڷ SS:uj 6?~iZ?E K0w4Aع_I>qtן9G&BU\I(vFqZ bݰb~{M0i *nRzb ԪUK:KOJמݻiFm?5M[0W>_5v߼kŚr$ll?WWf(vFqZ &P(TkAtw^]pS<_jQn77gшŷ6I[Z-@iK(WJ (-\ap-T菓{Τ-0i H[Jԭ[m6z%mpH[@BpH[@ڢyEqXOwj풞Jk趗Jwi Bi H[H[H[H[{wř}qx@KPl%D3G1oL:c\0^17kdIF x x:`bc4 q$(Cvywj{j}?|TUOU=t./4c(,nڢqH[H[ai H[H[H[H[ai =m9?/tzxj.+f{_-n+x?gʍ|eҜ }e-[ <[<3\Fj{m;/ۿտ~r) jXYؖ?G{voQl჻vu ^{YU 7 "m@_-%8xЗSo_͝;zUt_j_x|F_vsύ(p̌,eyy 7>XE,/dɻZm4 G|^)q ß.ȥʓsL\oV  TKo7Ϟ-qҲREVՀyH[Zյk,0L~ @@Sͩѣus%}us|.yV_m?UKk^).]֛UB,,j{zϤIsUdU (.ܜ7U%%%)0 CFFgN@߿-kԞں3|ht~.S,_qyN:Y{o*jyޖ5MT,,lK.V칼jK?ww_r~h"j@qA-,88X\`8sV-bOo*CLƌ K1o7'?o7ݗG{YU 7 "mim#G_{{{GEEq-i l@E'.5=Ot:W?GmF|H>hn]|rhM_#۵\]{ʿͳz߾1aUj{voE~ݽ8xjVYֿ~QQ9?|7>XP׮.Çp*nD"##=<<^TT$zR"&rss9mMI[O[^>|p 3f L@~H[}/<<|֭3i @~!miw<- mҖf ol mi ?4Wdd :-C\ҳrE-C2g|\@e)?Ѵ!>>~}3ga\Ύ+!!Ν;\i H[jhhX|yee5nUZZj*@ j mi -@ByNNk׮},//lifIIIXXX| mH[Z''ŋ7:--- @-V\pI @Q .NNN7o?4յ^LչY mh \̧EKi @8995aTuVT9"B*uX{[*++loF']|+W޽;;;;44T4.PEĻ[UUeV}}(THHg}&ٰaԩS}Ϟ=Q-i H[NakkkKpuuft:Ν;K3Νc͚5kZIT]]-&ꜝ-=mitu TTTdR5(֘)^/|A19lcW^ :y7rŊ 4{` @}HĿrvv9BVZO+ڟb|/bӖFWW\믿~>K:[1?"iq-;v쨮0?y"$$d;w jM-`K4tҞ={;vȊ ߋyg_y7Μ9sʕoGyyyrb-n@eeePP?6rGd|j$2Hegg̙c!mٿ^9rdNNQ 0hr m[ \t/@燄t%%%SNuuu޲e4311%(((55|=z0yƭbӖFW7_^裏߮X T<"P7+,,5j< /q޽{nТE,-ȑ#_x` @|kv ` @.h.7n$jM-@VG }H[D-Ɂ\@` @.D-Q mC_&eٲeð'jM-zpaMa 49%= 0&$&䀖D8rȠA޽+u떧gQQQMMMDDD=j0fddzT49pFXXضmۤiӦ^{mͷnڿpp[Nwر۷oFC_ H[q{G5` RH[q{sp7oL& s׮]0- }A\RRRQQb`0dddPE-\YY^@&,>lPPH=oo﨨(*49őKNN 1.&rssC_GΝ;>z1cP3o!>>>uV495Co !!!<49xꩧe̙<49+<<49+z<49Uq }AZi 4׍7>QQQw]]f͝;wh]@se˖UVV^6?C\\ 0hr m&Q /hri +ڵkE+;;[YRRֽ{RZ,0hr mh \/^А ͌.\pҤI4Z` @D-899ݼySLLWWz1QWWFM-@8995aTuմ.bai9mC_&%999((e7onġiMJݴE-pQL["""bcc_7/@i jԒ陕uҥ'N훶8;;_zJL[Ŵŋaaa=OM-`Q0r۷:u̔\o߾...;vlzÇ-$ȰdLLN{򴯕(S+DlBlHlNlrßM-QVZZ@9nnٲ߿{[2eƍkjjvڥ5#OhY=22|ƍӾ̙3]ޤBƎ+oj\/@i ذr-QK[z>Թsg9uuu΍f% t:XiĄW^֮eay ٳ9-_b` mMkkk1bǎ=<<|QNEEji77sYV7O[ڨbURUU@[2i H[Œ?>ݻNgΜCQ2M4TZ-=;wݻwNWQQa F1}tRX XqرC>}Z32KCg>O?tqNG5Zj6Pk0BCCǍ'6moZZ43))EgffR2M4TZ-=۷o ] }a i 8nCz͛@{ b&*`-s׮]0-maDKL3 /l"mK/ŨQ/nݺj /l"m|\@G2M4TZ-(zL0: /l"mG/-Æ 2e hH[QH= 8X X\ 8X XwYnի?͟?_0 DqJ'ήH[@CH[Gt51:ZlفjkkIOO`YMM8,_|՜i $##cŊ%%% u}-i lM w}i H[}'fm,\i H[n}W qW m۷,Y@ݴia- mH[{_ F}+EH[@vݻG mx@;ZbOo@qII =СC999 mD||<#=vÆ  mʕ+Aprrj2SSS=<^޳gOppp׮]ӧOO8Qسgψ .4oXwݺu7}*MѩSQڨ(///+Q!j`has6m4hhO=ԉ',/ޭ[K.//+'OWM m@*@8t"F 6<ӒRUdeN<)QhTcս-hUi֨qs4zTEEEn&m&ꧠ@ޖn-H[@?~O>۶mc91p^~Chhhdd 瞓V=zgyfѢEyyyƍQj*]1G9"4瘘#F!buuWL/Y$R1!@KvZooo7771.qĉzJ=6m2~i^ իŒÇ߾}_r%&&O766ht^|pJJآo>ŭ<^^^J6RoXgnTiL[~W+Mw$)-1m5n+)/ݻKӻw /~'~bbg $+ݱc]z'P<6h-H[@,-.PPtիW?vv\7n m@ m! mA;/~1tМ;;- mH[O@NH[@vbÆ ÇpB@ΝKIIaݹs2-Xl= mi @؛ݻw>|!v9 mi @؛ 0Ʋ$ -i `ccchK999 mw}xbp66oޜĹi H[UWW/\ȑ#b /g]- mH[Gw˗3,RJJJĉ߱ci hi >?p}DJ"N&o&N,] alÅ `H[vBK-@vpa}!%@]b0i .1\@_van.L/D0hK &]"m;w5 = ƃX X\RRRQQb`0dddPEv2M4TZ-`ʆ*.r㫯 nhh8e hH[9R\ƁEw6Pkwww6lXQQa8pKLR92M4TZ-`n޼O6L0Ę1c@b&*`-p/[5}/֭[@b&*`-p~m0`@`` tA,C_DCEBKi˄ x>. b&*`-pR2l0 X X\3e hH[H3e hH[:7n܈6͟?_0ltׯ_!- mZ.]ZYYyf_xqժU.@Z@ b-i hi 8xrȑAݽ{Wzy-OOϢ=z :`0H...AAAs m  m%,,l۶mtrriky[n߿?88XN;v۷ 4u m  mѣ{{z}AAٻwoܹ 9s:t--@X.;wܻwɓ9:-pBBBˆ#ONPhϨxF@ڢ%p9vСCCCCO>-͙~_MMMYYٳg?~:~Ni hi [iiUb7N~Y[[;m4777__ߴ4ifRR^̤i hi g"3Dll{>}RRR-Z*^ڵKZxرݻwÇK3ŒAAAb?pd9:uԸ-@LLN{ԶxtJLLՎ˜bĞ{e|\j gܾ}_ϧ1i @i @b!&QQQbݭ[vEL_tILH L2eƍ555vL77_|ԩSbp>;;;00P ,7nm3̙3-1Ǝ+Oi>h|h͛7ӘɁ:{ܪ/gbxZ t:_ƑfΝ;5kݻ>ZnK,++^zYؖ1mIEY8 c Si>hٳg-i K.MK[,/v9VZO+{xxرBmkt[is]]gjE1-i 4+pѣ0 +={V"oq̙+WH0 ͥr-5%m4u@ 3f>|a /P3A:i 8Pѷ?~BBBnJZpJi-2330`-H[QHjFq->%m4u@ p͓Җ!C|\@AI[ MЂ\A:i 8Y<CP5 IDAT8HS mܹs''''!!a [o%zTٰa01-M-:k׮}G+V8tիW_~ (==J?7nܨӟ$>k֬Ɂ@;Zreii)V]t)!!!))\49h7)))vb ؓŋ744p@@}Gah ؟h-M-ԉ'>3*++[x1_)@@ҥKv$xH[H[TX{ "-M-Zݽ{p.]Zf =-M-ZWaaaJJ PA-M-ZWbbbII CPA|99949hE?QWWaN}H[H[+Wv7XZjjɯ0;l۟Xҍ7xt &휶jBamܙ6H[|||R??oVL=p=ݎ/ԩSSLP-bK)-FkUIXkɒ%o333njc|NBBXn,M?+ pƫ-VZU%-M-l)m1 '|}}b*M4-bx)Mo׮]W)//ƫ(n])- iK``tÅPTT裏ZHxK. Gj|{zgX-bbO<)WZUlu1o~ƿݵk</aa늇-jհuvi @i [J[\\\i1!^ŗG uuuIѹsFU˷pFKnBҵk9;;wIkUby+Z 79psrr&LweZ*OQۺXL5֪[&{饗>3UUUƿ/}||*++&ĜKm]T7^]m1v]i &=miν-3>MD~iIII]]]ii>|'8x7_jGӿ/? T;|wSm1ţӸ. mhr m`Ki{9|-=GbZSSeĉ|ՍX!,Y$$$D` ZJlWBUUՑ#GƍM[%)*慏?suuuZZXWۺXLѣGhU>>w^{'WX!W^my늇T[L4K-H[H[tϣ;>1a-7x;>>0/MlW^D ^^^bl,RՍX!\rw_rMH[E ]v>|۵WQin8@SRR "J޷oj19|KH4 Yf5XK}m&f3g_>~,o]T᛼j)uvi @i 458<6nϟ?z-H[H[Raaao٢UӖqԳv7n m@@uǷ@nժU<̙3MF H[ZdggkRJHHɁ@+JLL,//g 8/2''S&0%%!( ܹéi @i Vt޽K2AYYm@@-dee>|(`4q@@-DFF0XFFFVV;-M-HeeeLL Q^=z4%%s&m̙3111؟?|ӦM49h<aٲe'OɁ@{ڽ{ҥKSRRD|y۶mg-M-:smذ>_ {$zTX^<Ɂ@`d-@ԁD0 mMhI-@ԁD0 mMhI-@ԁD0 mMhI-`]fa[C6./lZKJJ***Ra ߤ--\YYYpp= 744PE&mMhQ-`ƌ#.R`0DEEQ9A:i ؿyyyy >H0 ͥr-5%m4u@ 3f>|a /P3A:i 8Pѷ?~BBBnJZpJi-2330`-H[QHjFq->%m4u@ p͓Җ!C|\@AI[ MЂ\A:i 8Y<CP8HS mhhhXj[[oF||mvBB;whu@9jfmn/\j* mH[@D- p mi #G 4ݻ[nyzzDDDcСAmFF^wqq JMM%jiڵ啝-,)) ޽{xxxii) mM mcm۶IӦM͛oݺ`:رco.,, hxbfH3#""ź .4i mM m;z޽{=^_PP f:w,-`|Μ9"jE7o?4յ^LչsL~̵@sν{NF'''i9m@ AK0 -@@;6tӧOKsWSSSVV&ihϟ駟? jIMMprr2iKM).iKDDDllף&T\IEVN`q m@:n8emmi|}}ҤIII...z>33S{"}#IZ1!!A{sApq;qŴŋaaa=O9RN8п_ mi to~]Q]-R.PQQ{n__ߏ?Xc|& -YhCxwwaÆ8%&rss[|--1qyVZLr!CH!!!=W#FxoKqqرcw>ݕ+W#==x~N3339)))AAA...LNNFW7ٓXiӧXxѢE] ûtb\GGmzMOO'|rذa///11f̘X mi 8 k(++sqqǎ`O0i˔)S6nXSSk.^zTTTee-[U__(tssۿ˗O:%FWWܓ[vEL_tILX+g[NQAA-`KbQFI_WVZ mi 86L&-z/DiiiN33ՊWWW:gggifVV^ך;wc=6k֬ݻw[^]q\^+QKf-]ƍ.Mo#jym8[\ԾI$-&-nnnΝӸ]ycǎ Z駟~W,QݓFѴE3\ZMHKɄ ?ik-AA.Rpҥ={?%wر ,h7^ٳj1tbs̑ggΜr,QխJ[GyyytDDMI%m!jv4x)76l'6m-%H[9EM.]Lt~~~HHHnhRRR2uTWWWoo-[h\}ƍ{E3}}}]\\RSS-QխJ[*::GSrG(\q[QUOmZgKs Q  IOIM[ l p\@p7!驷>ik-AA Zp&Դhl p\\Zݠ %@A Q  mhr mA# ..D-n0%mi @ڂF$%%) CFFU\4uV(++ ;m9Ht|.bm'jv mi lҘ1cNt5(*`%05u@ yyyy >\t9HtDnn.n0m:i Guu3DM{v!h+6-H[𿄆uV`J%05u@ / 0g A[hAS#F=v!h6-H[`j޼yRmȐ!ؐ[n:t. >S-S i˵k>+VO}}ׯS vF|T\">+z՜tp.\V\y1Lε9nܸQWWgϞ 6ܺui h@J[Dk6`***@$F֭ךNhq_-[g4uC-)))v ؇؆N: Ѫ>G:i˧~z.̀=)--&pСq^6玴4uҖ'N|g\ \/^Wt QQQ|{mi͚5.\G:i-]1`򒒒8!hw~!_ B]b>ԁvH[RSS c%$$Wgr#-EffC'䷤- mZ8mw7vҥKk֬-Y2څcޒTTT85 - mZ1m),,LII ؽ8֮]S1˺ueeeAAAr"An܄ !mi `EڒXRR5{ӟrrr8-h)))yyy^?w^1bR" Acccl-pд%>> 06li@9}^?z_|yJwX1KuӖ+WɩLMMW#dhwڽqn^VZաΖWxh]Ҵ͙Jfwoooo}m9e JOO2d7ozm=9xtvhھl%E˞Xׯ_'mБӖ_ٛvi־psuԉjQ;f"b)-֭[I[@rGy$55ĉ/-W^5P6//N[-?-lޖVD5D#tOŋo /B```L%ӖI&_|~MM͜9sۧO1!^DqNԩΘ1RZ6**K('#T_M6 4k׮O=ԉ'jk@TX(Sm._[o[μCؓ7|S#Dc=b'qm߾}ҥOO[={=8p`rrVN>=qDQ`Ϟ=#"".\qbq pt:o-jP+|kC*چe,׉׹ޒExVpy|5j? [ҵ,-oN޽{˿rxY\\l|P6MDi.*#igkqI[@|".uř:<m4iܴ[B_kv~~yib?0wwJmjkν-je(ooОhE[IKK۷V}%%%uuu7*&GxoZ;شqvϤ? ->mQF+\4-ZگP&tBMN[VEÇx≃N>]boӄN}- =Fŋ%mi im۶ qٞmQF+\4-ZگP&tBMN[VE>쳢{*>N{ߦ (kZz--;%mi Вi zC qqq[lo}w'&J-W^صkÇo߾]~~;I[^;I&Rۨi9i2O CӞ=y7\]]x _(RRR{-f۷Oq+bD!V-k׮#jCViI[*چd^)NI+~@H[_beԮъgE-'i+)ݪPӖUq۶m5?"6MDYײc$m!mMi _mGkh%ׯ_'mБt(ׯ?=ч~4uo~%mAsܸq@{]60`I m!ma @SOZj#<2sL@k%$$pZ@ڂFk׮Zz5CPԁK[Xv/]q*F{9uTff&CPԁK[ Ek0`ܹi@{%`C֭[?~-ui˽{.]5oeee<@Zd_+ i"dee>|0`Ǥ'4qNЎ8!m۶-77 i h@[-Bdd$ث,Nƍ8>}-퓶TVVp=ѣGSRR8 ֯_wqrFۨ}xb i h@-™3gbbb'M88ܹdddpFk+//_p ܑg"TUUEFFr/` òeN#ٻ;oJSU@$Ī6k]Q#ڿ-je7^jvmA(mwUK8F`$J4>˶/γOf&s͕dr>Ι^g<þ?ӧO_|yCC8Y[o=ӦMLڂ+m .[璏1H'm?c+?+w}c oݺCoڂcCh?[0tq$/I[p  mPl޻Aڂ$m1wCIڂcxi :d  u&i A-M '555ynW?i *96{w,[b.O-t Nڂc䤺xbf]D'I[P@ Ucǎ.{ /0xપ*CI[P@ UW_}*++kkk{wCI[P@ UsNeeexz9r%64i;; [;si Av2mUgqrχǩ>[oر'Ծ; /^qW'+*3K߼檫K/LZ~<6j[j+Xwц WIdf501?go{Vwx'ns6iy%o~ooWojNT3Gmw޸Ϳn9䓏Kmniv<$mٸq%KTPfϞ?woi ApR^>po=^gC Moi94ryllI(V X3:UIllu-Zx[Vg;ꨡ|:nOdr| I5[-Jy;ÇyEI[ ogիgG~z=G~ L"͓-$%q{O 89fwmsT)IhsK-Y̜9sO?tcccӖUN}=3_{\,;.++{ꩧZЮvIjݡ]Jڲ c>! "mi!4ʷ 0x㕥EGfGOɃ#Ft' *΂Ӗ>om߾jλn6gK)ڊ?g?^zVVgyw 20W|5{g?Ն;ꨡWS_ڜ9UJҢ7RiK<6ؼS ̙5o޼×LҖh}UU__R#ikhnu9I7L[ږ0䐶D->Dd۶mիW4O:uРA{4iRCCC| sk֬W'NاOC9sټys|Nqqqy3fy ӟu"I[޹s_^UVVv]w/W\qEXG&¯sJKKßB#ms+?%Uwj!ͪ&j?!CO /j-w}K/ M}ݩ1tNho߾7KҬj-jטiDv}KHJvmO8)>:mIrXqƽiuرc7u)\wuӦM5jTMMͦM.69},: H]i_Hg?PfG3\2Tz'ΐjn!hc&'mtܮOu6jvmE8Zx;^~ . ͓P m1iţ—_/{#3oK$?#_yhvCM2~-LWPܹ3qST"ieeecX;扦׬Y3dȐh<~LR-ֹiKJZ60~y]B33?Լexmݻ_OOn0~MZIm^mX]2l$lڊիW}}:t裏>Ii t%/0yG/;¦og^esCJvݷ7Mm%2d}ݷe˖{o֭I+}K[rmK(G[_:g+сk[R\0{Yf}_K/n%6 ymK-jiv.U#-+lڊmz-[I|R*-8!mմeԨϯ2DH[CC{I[s=wab޼ycǎ E۟}ٳ:+}Kܹ7ޘ8qbӖk&~ߖO?=}fb^{mG-s+/^YDpʕÇ6lX.ZK!H=YRmc|N;-~ӐTآ/oX]R5bR֮0a¯~;v,[,yR*-8QiK>{„S9r_Ŀٵ-t`gL[{~~Gyd^*++yCAf1m ׾޽{Uw졇&JwWˉRe7v =;B?.p%mw̴xyRgT]ەjvmŒ%K=бVJT:H[p Ӗh]NvՉ'V\9%'Җ;S#^xaMt4w%}0䐶D-^zFY]VVڧϡ_6?o^yСB;įqIj9-ͿG?;]Æ n'{ [7mg_+*:~a"~MG}3,/<:|fؒ$)ʤGY Җ6]y啛6mZ~1c&Or^~ 9-8Q@iˮWN[Uu駟5ڤI}ۗ?qPbG6l|+_9'V'HIW&>`дeܹyP(Λ7袋o߮rϟ/mCi A*PFuЍo>M7l < >; /FX&ҢY?S-.񢆵~iKWĭ?ov-\jgiK63L EܟO`ֺ_O#!>`дeL(p/V^-mCi A~om}&\B#}4ˏvډ}O|"-~M=?Ǐ6DabҖT-|nР09Ut_Lx]iKzpӖmgh9RT?jYy;ÇeIW&>`д7\dR -ܲgi rH[p Җe믊>1bDy:LC˿޹=Re~Mo6j91v ?тSTSG7$?ix1qAIlږT"UgOZVӟzraPe>RL}qiK0c &~{?#T: m1K[ e7N;㌓C8ErCs_ڛZܴiWyK!mIryU΂azwͻ-?-T2Y'w)6 Jf|noi8u"UgOZֹkO OzӖT+few0th?3 N(X-`!m1K[[Be{QC>??}'Q~A4$iKŅ2۾}{އ%Uˉ^Ď/;^ ӯ׬jorwg20W|5@,}Yfg;[|'Q63 /I/uiof\hr "jBYlђ$m1r̤IJJJ裏nq˾E-bC9rРAÆ n `hI^gҤIE{_|qEEEtKcc>G-ݻY>;.ZwcuD .%i )A@.Zre֍ mCi (C^̙39jihh5kŋG/bʔ)mޝB.A-PLH[rLbRRRrg'?n(jinnڶmɓʢeM4Iz J_rnC&-$ 80%Dر<Z-[,ԥBb J_rnC&-9#%.iRq \YlAK uȄ 7;=PҋYG- fZxQSLdUKW'p権m۶M<, \&M$p Eҗ^|oK%ѲeˢK]JKK+**.dUKZK]ƍ'p Eҗ^yIҢB J_rbB{I[V&K{n%'* \D-ty%'* ϥ \D-t"VKN Th/i @kZ&Eҗ^Z>Eҗ^B.O%'*Յ3 Q ݧUK -΅Kgeo1ޘp.D^8.{Ƅs!t[7& -0b1\$mp] B%i 3 買oL8"/I[\SSS3N.b@ڤgXlŊ.,b@乺x?Èbf]@J_rbB{I[߸qKtʪt][*}ɉ %m'O.-- gXpŐ msQ J_ 9 :pŐ#m(/t(i @zQ J_ 9PRWW0D-(}1CI[a7& 9&i 3 Ƅ!$mpޘ0 -0dxcl8oLrMg CI皚Ҝa+(}1`I[\uuummm3X,b ]CK***K #盛uJ_ 9.i @7n\G- fZxQSL@N9-ye(jinnڶmɓʢeҤI I[|oK%ѲeˢK]JKK+**.@9-yK%.eܸq wI[yIҢB i C2 \4i C.H[<*pHB琶ց(L: $.`I[B.`I[RWW0D-@9-0 A6I[a8l8p.$mp\I ds!&i 3 BM<Ԕ _򛴅!msյI0b؊+tP8-ti @.3X,onnE@ᐶ9-oܸq%:ÈbeeeUUU:((: M<6ab0QSSs"msH[߶mۊ'MTYY0ƏgB#msH[ ¨Q¹Ŕ)S:餓-Z[B#msH[ ²eˊ 6q$msH[ EYYYp &i CP(&O-sIB琶^ q%msH[ Ht\ !m>㧟~zw3sꊼpX,8-@wy[ouΜ9/w4/_χ~Z*/\?vXi ˄{wsNU+ڙ3g^ -H[.cǎ뮻RB~Q-H[ΎZnᆆu){wi 477_wu>=ڼy#H[n"{gvi mܸTB|wi cM>Q - mAtƻK nnnvi ,YdڵO(?O>-@GPhnvG? m:ʼyIwt\;K.-))i.?srV箳>o,-ms_vm~ mAter^'?_9=S-fh7̃ <+]odӦM7ӿOcƌYre|e˖}3_a:k]`ƍa'}4&mi  Җs׮]3=_򗹕cĹs^tE}þvꩧ~[ߪG9H~~^x!O??A54iwږ-@ק-q7| ;w^q?#D5}r!s͛}K/4:,XPRRzES:NH:g&o~wZp'~՝w/~1ڰ0⛟ږ/}_狋C<#3f;h?O/9Z/kvhJnFiO%NO mr#m9â骪cnSN“_~~lϞ=D7>uօBo9rd$m38cVZ}~._ir'Ο3)I 9s3fڵ[n -ﭷފje{ŋw/_pI$anHa &$Sj'ΙI9[0hР 6 ӃN|m费s'ե^Z__pƒ>8hs\~xeMA-($mٟ- mAF*O~bhz͚5C >hT7nʔ)_+kCBk6m7իWKIf .)) CrGFD[6y׮]I'qe p' $/b|RCIJQmpD93x#a/8!/9 |S_n]ӳgF-GwQiWڒl-+q:IA~w&TjfO mr#mׯ_4;vDa"*C^VVлwPK'<3hР32is=7zfO|I߇W^ثGx`ږPM2W>;tG}4$ݺTo}ǙI~L:u?[W]uըQ2%6m??7mIWxk[g&Tjf}i H[̘1#Eȩ.83fΜ SO ƍ˰Lfl{mݺ5>x^_-i׭[ƌ|V&e˖?6lf|RC9͵-d!IWl۶m|p4}y絸o۷o:tɤRMoL-(ٳgBF>jo muXSSyWUk&~ѣG_{=Cn0={0}gj3ԺK.ݹso1q~;C:!0}g:묤Iww_S̄ Bر#;6񛭤Z4es%m޼N>я~T__z#Lǿ;mb$]Ttȑ7xcCCڵkm/mi -g+3 _~{g^{h>Lf˗>*-- sw]|})++{!myCGyd^*++y-lٲo߾M2K,9cC;VJD+|%ljҔͩ:jӖ6;//+W3&گ_'7^xQG^ ?&w>9szm^iK}a'nݺg&jR5kwm/mi -DnGYepO̹5oknsi @ڒ' m'?W7- mi D( m~~ mAt%K]V _~@ڂ(_ 佻ᄏ-H[4}7yoَ{ mAt[Ο?_ `ҥ555{ mAt}{YrM7 mo˗/ohhPBz뭷xiӦ׿vdi Oz饗s!O3 ¿˖-f mA3 Bi 3 BMg΅ -0 A6I[a8l8.ϟg]8"I[at ͳgްaüy.s!r@׋[ \B4i 3 .D.s!r@Wj\B:i 3 .*j΅ig]#}"p -0wYjD-WX^h΅*gٱjժ3g֦3]KMMMUUUXX,fw΅BgYsC<.Z \B-?~|X_x;p.Dג8Ȧ3g;3<[\oQK%eذaF*//΅&-0l̙E{UVV~_餓eZBt;B+Wl?wnB-X,6bĈDMqqqyy??3glll稥!sϝ} b"&Ll9-dSDQHt{,}\9j꣏> }Q$p5XlEEE,;vh=Ͼ.- .u ***.t9i ņzi%^̒T{4QK\tرc.t9i Y;hll|gϞ}wرq@5?ܹs~m8i۶msOuu\-Ydɒmx7N mws=̆Ȗ-[z `=Z.SN"i @br̙Jkhw#<Ր=[-s7!;Á@K,QQCfri @-[(!zjzjiHoΝ .tteҥ%%%p@ڊ|qi @Җ[߾}:묵k׶-++{ꩧgfby߄LVowd-m&6ohߟ:uAz=iҤ ,())9H+߿G&¯_Z...s>#3fӧπ~ӟX0quQz:׬Y_^UVVv]w%_}Չ'y9s9gͭyw/0ϐ!Cx;I_bc,"*[߾}o'8bĈx }'jll*-- =T{!ig&]z|?*Iblra{c׮]wTHg-NM[k[F:gΜ1cƬ]v֭^xUW]„ of&cǎݸ)ruץzI.\x_ve>ignݺPxukǍ^vZZcYj~.<_} I J3[0q 7h;vx/hڴiFٴi%\^HڙIms$]b1}诏=ؙgLT{V m褴%ҧO/| ?#_yhvׯ_ҘX,MYfȐ!^})Ν;?ON[BAMJW^?Kl/))i|XNNk,lf_|x?߰aC ?QyyyjLBLkC%[ڵkKKKw/z(ýjYi Ӗχ{ ?'ި%={ܱcG4&¯m$t J =ѣ{eIaCZbzm-i?g}v߾}裏T^HڙI_*v_>s|0N} f&H5B-N[Bѻnݺ6ږT/ٷ%k[-[{[nM5K/%>OFisa"lXx?_ݻw/[?СCumKbڢ;T3{YgY_s5e=k%,(~ߖO?=&ҥ;w|7&Nt Vzm~5|DN;-~TO0WՎ;-[VTTM>}ԨQw/$]zx'|2j@Еi#<4lHLn{'>OΙ3Cms;º/RͿdɒc=6sEEŪU]v]}%%%EEEam/$]z}f,XPRRr-[;͛7Gڵ+.q%JKKjN&~_ϛ7E+K80~M}ꫯN81!r9{&K3'x"ވ#x{3%T]^zaU rw' JR͓t3[aސH[r#m9׭[joqȑI53gΘ1c֮]u /𪫮kǍ^vZb&LO@.>}z4cy-VrڴiFٴi%\~SaFG{[OUUرc7u)\wu闞oS5t9UVm߾=sE%6;h;vx/{3%T]z'I3%L4qYD|673li @-ѝ;Banݺ׀%fy;WںC&,%鯩0U#7n,//5kV{mYg=5r駷O5jԓO>z%OoJSaF:>|ƌ+~ۑѣG_{j$*ҥ;w O81Mڒ&L_jǎ˖-+**Jn]. :zy!i''fXTI[-9̙3CMNPy䑽z|G׾ֻwϝ;jW?\RRov_-ZlڴiĈ7tSEˏ+L?Ӯ%U#IWiÇXZZ6$}ڒӖ,YrdžNXjUnpRuiQO I-0li @M[: /0x*SLiBui ;-W^yM֯_?f̘ɓ'oa6nܨi];pte޼y%%%~E]+rGwu_u;\H[2r+!zjlڴiɒ%iHc֬Y{qdoVNC*[lqi @<<[O i @TUUܹS] -,_sێ;ND<ŋ-_:u+\ w} cǎ*pb3fY1@+W曗,YR__plٲ% 3f,]=H[7\p᭷:w9t"Й C}atN@7"m H[F-i ݈< m-t#nD@Еm+i ]6kbVX9R]]]EEEg:ڵk@EuxϟDEc?"&p`DZj6V-Li!̒HDl"Q"GHDFM$+m}331sy޹9s͛C?&Ok׮g tFCCÆ H[@:e˖ݾ} m}QVV֑#GXUWWd mЇNI]IP;wtݻAII֭[Y],[i "%5@P,^k\r%KbKR m@BP.t]v" m@BP+mvQJj )))|- źҖ\Y `ժUܽH[P(K[,dddձ AaaѣG-H[w}^%~n//7:`gKJO4BwKvzjied@hnnNOO mbrҤ'>)ku* OiKϦ- \'mqqqSm1:Fknn}1mϘN.&{NkegV.tk[zebݴ?ӣ>w.Z񺹹ZmiK^ݙ[@ϥ- 8,:%m!m!m1X$pi7mQoVMMMCCC~~~PPPxx7oԵ]q #"m!m m;Rxb}@3V*ic^3 ]ۂBgW9""l?4sӥ9lş>LnF.ך(s'||Fdl0:uソUu+ ЬQhU#šG:Ym뼼O?WY<}7-;(ݕC 0wn8gY!SkSpTNN B*O]@L|-reѢ_~AILM]s_Ξ=dʕ+_䔖_Μ9ѱ_~?ŋUhVV֨Qzcǎ.S%FmqF||a 0{F.۷O>4hԇk׮.\ЫfxtÉ bG} ;dȐ(7zņx(Uۼyx1`dʍT?FOёzxx]]S{X_f̙j/> |6-rbju(φi(ķ;s۔*,_>OmŊgRn*:sQA@F۔*,[6WoKHsgRn*:3u_$/__)پcFvӖ/ _bŤI+8994773gδ`ڢhL"Vb}{ΰӧgMMMJ?ӢWcIfu8mYht1M[:0z#5%m;ӯ_իW$n:fcccN* EjVz,WMSfRW@@ҥKňtNmHHsI[iKҖՈQO>9&oi)--0_Cx{{<Џ smT?уM'+O(~c{{cKQNS'7@sG3r7~>pCaozW2,90VT}Go)Uιc [?r3)7:sO/N|W`5ͪW\Q~h7mٻwopp#<"bYQQ!… ]\\T*Ն ;?//zU*-ܸqC48rH{{c~G-dgg ~~~]v~YiKSSSLL ' LHzIDATMI[Fz?/. g믿&^Rrכgjzw,}L:vSO=٩,$>|9stJq~ H[\Pvb]wh:tHBL[z ?>cLICZJJ ?i BbeFMz沲#FQB)i i B%55;mSZZZ_Hm:m~ƍ-H[(J/O[222Xݠѣ|- -,njժwH[P(^,VWWM[i B+i˾}X ]j_>{i  'aͬ.{={H[ kRS(u|7hjjgI tÇܹO@ӧOs `Y[lH[@=\(--MHH8v-@}%&&fgg744`UWW'|rrrg m䵰J*IBO&==i lJbV zX@/@+BH[`EH[i i  m@OuCE -I^MMP7m)--c6=O \T}6S9-aSN3f6pѦ-Ç_p!E-aYYY555*tĈb"w:'WTڨeʔ) FEFFTɓ'=z;"m@ϫuvvV?www ]- Ǐ i- YYYڴˋli ^ Zhq=<---222((HR=3QQQLǔDDD괴۷WUU%%%M81**􀶶䠠|:;v0aόli [[[[LLLTTԭ[ڭȼli [|||ttt[[[ZZ333:M m@***R---;###'OTWW[q„ `H[}Štdff3&$$D7cƌѣGgdd>wǎQQQ!GDDYhѸq< 3&88877W6qD~`H[}m&=,))?nܸ˗/K.x VUUIg͚KKKe"#m@ս?ȑ#h~UUUXXr->z oll8q"r->>>>C__vZ-կ eVGVPXXrd~qqqdd$r-> ,Q]vyzz*-F4i .N WZt+r`H[}Z[[N8! oo+VI5#""C#m@ ׍Qw}w„ oEDD>`CH[c򂂂"##ssskkk[[[q/ڶm[DDDXXXQQ--I\`Z +..-"m$K"m$K"m$K"m$K"m"8 IENDB`onedrive-2.5.10/docs/puml/conflict_handling_default_resync.puml000066400000000000000000000026621513710110600247530ustar00rootroot00000000000000@startuml start note left: Operational Mode 'onedrive -sync --resync' :Query OneDrive /delta API for online changes; note left: This data is considered the 'source-of-truth'\nLocal data should be a 'replica' of this data :Process received JSON data; if (JSON item is a file) then (yes) if (Does the file exist locally) then (yes) note left: In a --resync scenario there are no DB\nrecords that can be used or referenced\nuntil the JSON item is processed and\nadded to the local database cache if (Can the file be read) then (yes) :Compute UTC timestamp data from local file and JSON data; if (timestamps are equal) then (yes) else (no) :Log that a local file time discrepancy was detected; if (Do file hashes match) then (yes) :Correct the offending timestamp as hashes match; else (no) :Local file is technically different; :Renaming local file to avoid potential local data loss; note left: Local data loss prevention\nRenamed file will be uploaded as new file endif endif else (no) endif else (no) endif :Download file (as per online JSON item) as required; else (no) :Other handling for directories | root objects | deleted items; endif :Performing a database consistency and\nintegrity check on locally stored data; :Scan file system for any new data to upload; note left: The file that was renamed will be uploaded here stop @endumlonedrive-2.5.10/docs/puml/conflict_handling_local-first_default.png000066400000000000000000002464311513710110600255020ustar00rootroot00000000000000PNG  IHDR.Z-*tEXtcopyleftGenerated by https://plantuml.comvpiTXtplantumlxUM7W(J`(6aYN{gz<Mˑ46SŏI3kTr-OmcUE&U\^GD[q% 桓+CŖ}|cdOJNI0!i)H739v\ɇڄK KNZ_UXOe#v-i4|rb "Zl+8b]ԴzM %L黐 #8XmPe,ϒд0C4lTܰD#QiB$<-{7VDn(Gu@7+Me]-:0(u2=XѥJMQQ`hgdu1LLեi54k@J,Jt$#4j$Sg,:k LIE~oӷ.:1:\ zXD{OOϺ)v#Xϝm ]HNjxF[mW$R˫7̣9,GseV<*3IU?QYin(~w`5{|Ku9 ھGJrֆgU*C?L6:W4J4^PlѢƱiP3:\dES{BH%i .|?-6`c.RDVbx sevP;LJk9-<3Yӑ}I_g~a a΅c^j00抩^z5ݘkz?!8د*2UE[fM$ܹ_@@DA!5a,"O߫-Z1汼T}WVVoB ^a,#s$3_els4뗅:)u̷oTTmS9^[Ӧw_}oƜǢ*nѢE&jrrwl0o҅C2͛26'K>ݸTrV*ƜǾ^S[Fƍ4P^ΤZcig*ZnL?EbZ'= oM*WJ r52/Kn]ª r^'8e*kU+fMP;;j?;rI pĉC %?@(ۣ] 50uV蔰Zיȕ1G&ɓgu(m㖔+VŽ17a)qqo%$|Gvfeeal2@6l(L%2㎆3(Y*fLU ڶm&o憮}e6{d|ednW7'dָ̗B[.\,fGdOe1l]f,:AsUWKx5Ɉ_(e*reih4I x \Ri%7أU }PVh0c.Gyqq_} R0/C1.aUWԨ&3ߩZ 4P[>!MzuhgƤ~w~˅׮gn*iB|֭:AsUW=~Xf֬]so6ouJeMBCn3d+\\?G㧜 :Ss]yޑ[,7=)iՅ ~JM6a Ka=cCRG_%zQBgcRJJxҗʭ82Y^~0|[;sʘ Y:W4W^ctYAؗ[*rI"ʖjVg N%d{eL a[Ngm۾zn̸Y;_~SRR*ƾK~ @u c'S[7Mi俿PG}D*=Xwv 6o@_7olذŋM&[ţFjժKURs֭ڵkMѦMm۶Y5If-[֮];77xr_͛9>vLӦM  QӶŋG)eϟ֣lB Hm_d+7o.|rTZZ:a,=)[T;G(hv}}׶ N-Z5;//yjoӧO;r46wd ca a'=5}lnYkݺ pĉC pڴy۹.3|%}̘?fincf׳烹v](84jPei4OiԩV6o¼I{?tK_ĸq# zU[c ǻԠ˜>jGZŲ1mz1X.]111=z8{>;f|~Nܶĉ-֣Ն Lttqyoo>ȑ#6KSLHOO1bݣٙ[W]m-1uTݍ7 #Kc@-c2bV˿rsklUǧK@߬gdn^)l;,f j^PJ]s+j]쓩|AaZ۶m֣۫W̑ntmBsY 6yl684;r ˜!<$$ѣ|nnZ>++Kš$뭒\ñ;mØוyl%L&Bkc:tHmڴ?qe^ r(hv=5~EfK3%%%2/\ G,a 0U6ouJ 7k'yQW<|dS^]=<)Ɔ jnQf*K}܊@ 4PWSVU[c Isg+cVy 낎lVlảԹkd\&OMb7nܸHyiwyR;ِ.޽;22]m`[ƪj=zZmȠf?߻wo===7l`zw(hv|wl=hР+Vy,&@\S&nIYR'ߥ̬- }aBI?^R]cf1F4FE9Ѐ3xbzZNV]~MLV;cʿR/;[4ĕ1nkY˜333wʘ* c\/]4//ҥKgϞ+saZFo]7ZiMn:///$BW ֍ߵꇊ*޹s}ݷcǎC:~46wd ca alРG}k'd޺u+͛|jy3Z0ylnkY˜۳gOڵo߾vǏWoԉ0&Rݻ.HrHJJ*..ꫯYf„ zsZFo-ZC|b2V۫W/-۷o_QQooo4uԈ򞱊ͭk=U4-v*˷lۄޑ%1NO߻nn;wϝI_ty)[W4jtiipwojf6ǟ=i+f imW_W dF޾knE}Wo%W߮]`&nig4WLw_oXF.]:K}*A%GV9x6;ؙO}˜JK ~W˗/LJuyڵv _~V7Ɍ=11^pwwo۶mlllFlۿ~`yl6ˎhS,X[7&&Yfv)OSI6oT_zuǎSRRRII믿n2$&I+w4nU?TTlXf,?z;10Ԫ0jy֡gDMr<9jH)C'iرeӄ10Ƙjq{Wrrrz1zhLMwܹl@cb ٬15ԲeÇ>|5LTVS f'6n8kd@sΓ ncU!zy"\6ݢӛT7^8mظrׯ{>erVԬ#R=Oc@ cU1%U0GDܟ{tӗVXa&7@jm?&2W۪Q5:UΩM}zvEB :**n0F#  c9;[L7B!S^Bae;؁5=-Xx+c2lٲvڹ=Tb/_}ڲ&L0^^^c4lBJ={nڶdF%jJfu;իDIǎ8pdӦM e:i7o慆._\hQҋ/9R?|WFs7m[1006ti^\2uÆ=F?\СCP&n]tܮ6?;c8??G?yL6\+ t }j'SO=.˛5ݓO>V|!A1):wָ}I |zwK/2^vjߙӼ*w#{j٪cfoԯ۽FΔ)c|}M3q4]cmZrgQvf0gҟߊgffP{ҤI]tѼR!ɰGgϞ}gnj,zGOԫW/j' .KSNU7nاOFN2%""BhNNΈ#BJ'|ҢE5k={fԽ{7xx}WfRRR ϝ;'=3|pͮi}QQQё#Gy4 uĉ-W czeq1@taq]K aO9ّ;6O̬(GrCU_կ۽ j^\X0f|6jei$9\RGÛ4hP~},oܸ%"կ\bAXBJ0\4H}iBJ$7N,גyiuͅzh6iݑU3{300pÆ 4;ˣHZtMeq1@tkժ1=-%mиj uG6ã[s[z,6?ģ͛mݶҸV푗ގXY#ȞZn_O/kUIvٶP(LaLkH%L+HzWvΝwߎ;j[ ͋Z/ZWIvvv@@3*ze0WfݥK]tٳ=wB2պu뼼4R)aeСCzW4U Pؐ!l:tXhhoR}>_ %nSzKurl' '[Rۍzpd(_}21ڊZFV`G9{W^{lN핱 5WƬݳQ(ߖ3z-ZieڳgOYRXXk׮}*Ǐ3ֻwV+veFN:UꫯloYH%oL6vӲ_-OQQQczh6ISRRRqq,8pA3~۷H˜f;wz]:a9R@U PX-<S}jy3eGl]oGy}St#{]k͊ygeӖUIzՁ{6jei94ki!!!nnn;w^v ^xݽm۶5Pb͚5&ImdII믿.JX`qz-4DPhhoiiٯ_~M2~BaL&_^tl1cz;J'hv{ץДkv^ݴj^1@t)?y]MdLJvϿ.Z<]&MӦϖi>d}= fl]Ш&D]0o{S,O߻nn;wϝIm˫L2~-#s{.eGڷpU}DQt#{wkӿ'Mzl#{W&uZV٨y]|0V8 kH}رe\nΜ9c@ cLuy{T+գGѣGWhsegg 4@@c"0&CLWh%L-[>~_lР_AX||<@c"193-_\_X4?~|Æ caəa… K,a XhQii)@cbbrfSLa 1c@cbbr~;t rV۷ 1&&&11cƌ݀3g 1&& c7`iٲec@uc n䄇n̜9<ݻrJ1\nnntt4W͛WZů0Μ9?f,: >>>99_a WKKK6m;3uիW_Ӆ V\0M'XM|$ @1 @ a 01@)++3cVc9sss5XZZZrr2]1|:tȰ cyXXXyy9]1P%~i___%)aLX6mƏOa Tɤ1 cf̤9@Uƍ۷%yL~Jl֫W/zcjt?UV-@U+??? @ c2ϣ;0\駟Vn @..a,44Gwa 1R111xtK}Zn-1, ,,$0$f.^\ Sbh߾=I a @ɓ۲[zG1P͞=ҥKNbf:ydLLLN"oRܾt2@<$r7n 2$44 0U\( $0sASsssd@}S0FN:GhJKK7n OcT W^$&#uJDm6N{@8qI)uNJ+0gOiӦ]~0m|MIt%Kp7||rI4k,>10lٲSNK͛7) 1nX2Iu%Hc111dQ^:SW^MHHS@cT0V?<==훑QgØwqG֭|_t]wEFF>|Fw}G#1oSfΜ93vخ]0&?KJJ?>mڴf͚ٳjO2{);E#1{SF&M/6LחţFjժKXii f5olذynnn35Zҫرchڴ$L4Ivgٲeڵ =mz~پu…ƍknczl^Zyő#G.ϟ?0FcԆ0\ҥ\ɓ'z}Sx e)S"""srrF,###ٳ>1c2裏92x`j KII),,lﬓ6tev{Lٚ^:%y⋒d]a Pj13a @mpUa p{ƒI겅 ) 1nI}) 1nG_XR7^~Oa pSN%A/^#@c6;s ?a p\vg*5xta pmݺ599RGFGGsa P-̙3pɓ8 ca jƍ-ڵkqv;1::$FcT;˖-[dIqq1t҇~P^^yNcTGӧO_p_wcjWq)4;;ӛ0JKKn[{йr8&1Qa 0t8` (0:Q 0tg@ (:3 j`l.@c9sss5iiitca 8_~~~222ΟyXXXyy9]@UgU2t$֦M &9 1PURRR$z)yLΒf̤9 1PUnܸѡC4KL&S޽Z111:uΝ;Zna @3ϴmVΡ<10\$%%{Ua Q;@cbbbḍ;@ctҌ3bT'N 7oލ7ca ĦNZPPPg[~=PN:%1ca @yڵ]vmڴ-..0`~N:)&''5nܸ}III10I |ѣǚ5k˗?s23dȐ>@ٶmÕw===?fggK@$T>޽C˯% 7o^?6l7nQFVO.a 1Hb@ c={Ol?QY~(Μ9p‡zhС10@Hbիں_NJL&[ڜf۳gON"##;,zSqqq~~ė^z)''租~ڿ5@Ie Е5n8,,l…V˅۽޻iӦjL*E9wUPV]۱cA*$W}YZZsyxx[NY7n$1\\~gɰxѢEV~-[ʘv6 \r7g~?OSLa Z,ǾWn߾}ƍCCC/_yQK2L8>};,,lΝ#;چ?0((Hsŋׯ={yjYYYwu5o_3";cɪ[\|YyXV<~f=ڴiSnݔqss2{1yJ͝Lȼm۶m7nܨlaU餙ǔGtHMdc$f9ضmŋ92x`S&L Kv TZ 6ڸ|"&M_]ZwJV_}UItZ27nǎ+jV%e4cwfXJΊ+w,YOc*ًMJd"d.\%()7U-ٙz6( ڶ ca q3f=3bĈ>̑ɌD ( ===- ^0^XVfΞ=k,Q֒UIVQ^Oxi%۪$kN2:tHݴ$>|X?O?˜qSšiۘM6v_ad+;;ۻ!1@]$#Yf:~3OFFF\\܃>38~兣'O:-ͯ)7777in O0fY0x9rSmU>O>d~ԨQd>44tȑGvyƻٙ1L~~c9ØJII$$1yԑ /|2ݱcmKw`0~ӧO8q[|.\ؼy<$ cے 3vX)FEEI*7n-,cvaLm۶um޽ŋqgϖXj{(hۙܺuLx+aT͓a cv:Aƍo>))ɶdtt `9Om?{wih.]߿nVvvv5ǰhҤ 10lݺu .<~xY&Ynۻwܹsg͚ua P$}I KMM-tŊnܸA#1o.N<]TTD#1>صk %c10@Uٰaç~J؀#ΝK#1t 8hŊuy10@9spyf"|ܹ THBBBc10%''.P!KMM%O@%ԩx7gr*Abz^z酱~IeLLL=222Ξ=ώ3FYRXXxܹ^zir~GEEEG}pe0^aOdWKP楀^R_=zT]&IoӦM||'ilK2/)x l%)cmlp@@e:GzF[=mɤ TH]{ŭݻHSQa vAI}]۶m#9(88XIb|<1[oUPP@ŜV\&1zRncu%%%'N,--%iҥK?NsЅ  z PGjSIb~~~&Lc0kΝ;K3AX@@̤sF1@CU)**jݺa$əpc=a U+22R΁czj*(0cZ7nTGwpF0'&z[ytgc Q:vx+a 3*@y (:bx;8@`茊Qqa 3nۙCg 0:0a 10j2ջ p\͡sZZZrr2]D#1|:uR:t$&˝@c 1e,Igرta0@UIII1L!!!d,I, @fa rƍP4KJ޽;=C#1Pf̘V[c10V~~eyA#1  Rl 1")))ʝc<10\D}a 1c ytca PoܸqMq&M$C3g5ܲeKBc3f̘7oޑ#GP[_N5/P a j3g&%%1j7g̙310d<7a„<@ RZZi&@HdTȶoNcgҤIϟgD \Kcd߾}}cY{뭷_NccɌbZ ''gɒ%10˗3j@ Nb )))iii10bcc˗Hc"&&+Pk'$$ֆzվQlܩڽ-OJJ2L#͵9i۽z*a jIߜ8Bunm>&ܖ3~~~;v~ݮ0[.a jO-#Ta-oР+W.85Lc˜cѴi9sFY^\\/r??yTb{˓'Ouww6lXAAZ^nkڵӦM۴im6yj{F%+jJff{`OOϿ//^4n#ŋL4t„ fYޒzyp77Ph.ԫA7rH=k#!GV.CQz-ɛze\ջҤ=zddd={g3fZLϟ_dI&Mdsk2\ٳgMݻw74WQLttq{YWO:SLHOO1bveG9rd j8qe34ޑܐ#+Zu(kK􃺰BN^|GN?@0=c26Lm02XW*BBB=kwy0&f(\E-s!^{YWgeemF@@Somڴ?qeaͅz5v-aqGVsCh]ƇRZnn,FsuB%˜#a jm3X{Hwww%5lPY޸qc{\EEE cnnn ojРA[}= =Rs2zqd]Yny;^3,퇽{300pÆ  jjfY 9a9HGY8J?TIv;ȃӏ0u1/]4//ҥKgϞ1~*Upppfff%FtÇ6eȺ^`c{ux֭[ePٮCivޑ5غ#+:x( i8J?mJ1GN?@0&񤤤⯾jǫ۸-Zcb׳gOYRXXk׮}V"Y)Qol4U)ӫW/ 8U1uԈCۯ_}IB&LV hvޑܐ#+V(u^ˍح&i;NDs#1@] cׯnԨlW`^pwwo۶mll0DЬY3IU!!!nnn;w^vm%˜UҞ_~M2c2`U_k#ZM%%%d z;z5X>R6فzGVsCX0Qz-7cvy:ȃӏ03ݺHJ_u.pU@ U4(|Wrrrz1zhW\Yp!a jy9od+!..d2lrᅅ1ݛJcׯg ׯ_'1@ /L:!,P Ź&D@ .]@y3g\LEU ,pY"0sl޼999,PCL8n1@TSg>~8Z&*6iҤ"W(c8͍7,XsN@ rԩ7x$Fckҥ .,..f Ts+W///w}"0O:u7D@` @1Cg 0Cpp&pF1@a La R V0Fc9sss5iiita0wIcY,///c10ĠA< %.:oR>P \ROZ2zr׶6KT(J  k>mFjz[qQ-73pΙ|ޯy:@OÌ!ӦMcp1b L1:KEDDBQQCc1ܥ166V&cRbfd1b {DGG[ 1Fp/bc[wc@O7nRbu1r,221cCԷ;@𨔔: b xTIIL c1%F1p}J1c=b @3͞=egb ttϯmvUVV44401%tQb@O%tQb@O%tQb@O%tQb@O%tUTTPb@OX`` %411@11 @11 1 1R__oc6 kdeejXaaann.Cp=ҷo_ c-ƍcRb!!!ӦMcpo2bbb$Ƥ"""db Kcccllԗ {DGG[ c,u2oq)%[w1<$??_yXdd$om2eJ@@@=dA>T6MHHZdIIIO>>k9C[PPbÆ ~~~={ܶm޹]p駟×.]jU'+wz{k:6{6اK3 ( fgyFf>|xرrݻw3fT#Fؿ0`~ԨQ%%%ʇR\Æ ;yg̘3gΠAN:5qDetС=ԩSׯ>x Vڜ%WX!8i$e;4>3gZo;y.라5E}ڽ4GCp0ϕD v_UUu9 &8>b@СcLCIV?nf6 }+>cbb:,(={\hщ'7\iseee33]v5>7Y^`靼1}ڽ4GCp0ݿ/sIc1@1֯VeA>l^s5^^^;w?G| Vꝡ#& Ƙ͑ۧKsjp \{!C*U/c11̧\$>3}1#JvW:X,ό8p@};yiB;b́yJJY>uh(;q1YXzuYY٥K1b 饗 2ds4ѣ֯Ȑe".]v9RY?jԨO?Z"00`SŢwn w"(cLyz!{iv@zCamfͪ,..3 $8K%m0vXט1b 쬗?ZKf͚U]]w(@n566.[lΝZӧOϜ91:իWgffPjkk׭[hѢ+b b$''/]X;vL=O<7#@fgg/f! 8Krrr CbAb c@b 1c@b 1b 1@1Ę1YYY1VXX1\bũ=޽{1GPzL1)^xb K~~d "1.R_cRbfdizab b1j2oGyD)P޺1!z;oT1޺1[444-HLLKIIa(ŋ cؼy*++-7ndϧb @b @b J u]vS>zjϞ=KKKkjjƌsM7۷Pܸ8oo޽{СC~meyڵ?,Wz7Ͷm'|ɓ?A(1h~޽oǏ[nne^x'?ɔ)SvjcJd妝L&rZ ]K[yms9ذa?mݺ??5ϟo3ٳw}k~btS/w\\̇V۷l]>>>wy͛xW-'Wkoƽg1cz7tСCm֬YեK3++sǎEv$5{O>۷!C>5555EI&:uoݳg?A:J˄/< Hϕ2;XM;wTVfgg[Rk׮58>O<9lذ]Z,w9,,zB ͳuڭc7ߌ˗lXSXM/MslvU\\ٚsbYԣG|ʇڌU9 YS4GFmVKf|ޫb5c7dM7{rrrrdM?]2IGGzo~cǎcEʲ_xᅊiӦ=ZY9~UVȼ_&J??m۶]p!4) ${l>|ALLR ֑kvMMHϝ0aL 4GfWeR[oI_~)`S)9(ig {UXz_,^h7 TxSnٲE@VʲQ?WFow.ֲfSޢ711@3{lr9VAr7ˇʄWYofhJ/q'N~e!4)+b2U74#4SKKK4h*bp96޽wղp%evY˫A5?EsőQ<{߫zbB͜!⋷~{Μ9cOӟ$"yQݑ@qqqcA b >DP*֩U=u&*3Q hN222_Ę>M&;#pyF01uEeeݧh4ec#`+Gbx:XV"!$ޗɑQ2"mlWƘK 6sT9sFn Կi{fʕǘݑ@|644Ecu}[l~ 7d /kdvx |#G\xq/Mb}3fڴiֿfSLiIi#n̘LΛ54GfW4/4n;11S"""|M|'&&:cyhܡkt^;/1 ) ysI5͛7oWAppp~~ܴr,kl>>hskI ZXb1=?ڵۻ;vlРAݺu~_aaa2WV._\Jۻw.tϓ'O[ڽFUcb9c7| :?#Fؿʕ+### ! hxZvGRs1b @h.^ꫯׯ%FcZo1..nǎĈ1cz Cc \#@1%FcpJ1:1b @cCc dF"e,X#@0Q@&1D1Dc1:DSNK,|lС? V^^θ13gNCCû3fLbbb}}3~a 17|# ?/_K.1n @>ƚ.1&c @x(ƌW_%&&k @x(ƾ⋡CG? <@` 1mD}}Dob kdeejN sss"c1\bǫ=Nd}CCCb [?ݻcDYJl6?s 1'=&e)1i3Y(**bp@pP1(Kߟ1cM&lrxxغuc1bH 441cx5&MĀ1 yyybu1Lyc1<*11Q&ʼu1QcccAAAff+&))I&iii aŊB~bc1hz`l߾qFjjjgĐ@iӦM/++c )˖-[fM %#@:(**JJJj?CGt8Vڹs'SI-T^^>sf1b бݻwڵL"ǒ1@&''3}BG"@`$;;#l+c w}7w\f\/&@ɓCjj#@:˗p>1tҥK+V @!--:N:u ڳ[NNd+uj^oKM_%h7ƕ+W}1b @yLݹ. Ęl޾}{(kmgN1Vc^^^uuu  Ѽ^#ƈ1cb̹)]MM͔)Sz! 3K,ik֬YӫW/۷OYcʮw>f̘gj~z3|夤P__'x6!!!88XJ5lݓ8t,Hڽ4Oɩ7K.٩ !b yذaN^3x3f(O~\3|pGАG}1Κ5ksM4i„ xfLsrC-...//ǦNj++3gΠAN:5qfʦ1f$'O) *ޯqׯ__]]}kTPEEŊ+u&,y2sLMHz.Soo) W?iӦ|#i{O󔜺!|4^󒝺b 1\XX,۷/<<\]/s;eY6p0d>,ǧHLfĘcbbDiiiHH4""B}@s61'{)shiӦ=C#IϞ=-Zt 1T],Xw0.Soo) F/^姞zjݺu69;Ѽ4Oɩҩ7K5/٩ !b VeA>T׫$&1w=d___nfLP&7\չsg`WWW9u1f$ef,RYY)X,~~~&44T48ѣGGFFJ9xV8.Soo ƍ{ꢣQ9z/<W^]VVvҥruͧ7c29ުγ f{2Aɩ9zرc6ތ=gdd˖UUUv9r%]ܹs $fsnF9r .޽e955U-Zd|&FOe .fĘހ$$$W\Y/8cz7|5p@֭[]s$Ƙ)9uC:5fѻl.٩ !b yg6M<5`KbO>oXXXzzz.]Mw7۝nܸ1::Z,a֟ތ=_|Yvӯ_ 6}ŋ/dYeˌϹ1I9rD߻w,ٳG?33ӧ3>>>??17 o)`]<5>o-.'#i<%nH,zw%;u!@\c# IVYӦM[諯"@{N:uC>LF;w.**ɓ\r 544c Ж‰WFFd&L=6SN^^^s\#2331chX|yEEoc PRR͔;̟?1d\c K^^Ν;8p ȟ1$$$0w*6mڼys3~c KUUURRG.'41b 9rDzY?1c*!!׏hyɟ-ADt\[ly嗳8L~bύwy7'@`ԩS222Vd U?|1cL=c2b 0Qb 0Q@&1&1D1z@*--՜(2D b bW{L(K@9rd޽S&RbaaaSLap@p81(KBQQb 466FEEJDYJd2u] 15{l 0,={J[a1c,Xd1c|A5&Ò1t,/\8o\.???,,L&'ob c,wӟorxD1c xxea2Q;@1}*~!1c <:ԩKqqyp$cRb3gάd t7o&b 1~db̵=А&+rY]lc6 c@1M]c8v(u1XFFtL))).{VVViif21c1fbL0e -׮]˔bW{L1)1Yb웫''o UCe̙jk%Gy䁚 |%=lu͝tb|,+һv޽s٭\rDD-> Qg1=88s?+MI}l÷W{鈺+Yӣ->|kGu3`@cj+f?䛨%߃sO9wJ)1&%6e&? ƀ6cR\#Fc9G;`)S0l]w}Yʔ_++{}3_~h%w冿61+닋ܞ={n766FEEJIIL1Ƙwׯ9,˂|t8ppnV~np|6Do3+һC<m`:6ܛf<ֿO奬χnxg,k^t׻Ryx>.\4Xh?{l 0,1ֳgO u11g$T>3&ƛ/nKGANb=S))koRݭz[g78'M?yc~0`@GoQ63cX+2є{ɑy_mwĮ9{Kc….Ob , ƀ6cg?iII+秽8l]~͘VsчclΜ>8D}啺Nn_M 4H*ƍ!97'z٭z<0uY֛-˜#snƎU\\˓onQ6aJ1>͛lǎ19R|ȑ#m <0#7۷o^;hkvg˶X3N4p准c'Ofb h31fCU7C_Ƿ5@ɕ^PĆqIG=!u,^2׷4C*r_u}|9+bxx;ZoJzg?9oWYL_ް^Dٌ+%\5YKfd9fƘ_$$$;hMZrVdT+vX0)11mT(˗/_NJJ }'*++׬YӫW/ٲS>|xر~~~ݻw3fٳge?AAA6lHNNmzm۶2i橧2K,1SLFIDATcCCefpp9=UgKojٳ'<<\BYaٻw]p駟]ɧ/]Toepd<|6".8u`4wUlٲ%>>^066V5Wz8Ɣ;@1ƃ6_mTM>?aZZСC{챩Sۏ=رc2՞5kրqqqUUUΝ4i҄ e"[QQbŊnݺ_)wygܳ_rÍg26lkU8{b. ;̩Y~}uuǏo1 ob ƈ1<6m^1fy_3&dF%3fe}LL̡CҐu{*2TI&e2%oܵkצag,sMexF.6}Õ刈6M6l A靪3\x#<|ᇕg{TXow6Wwbwͻgy͘_}:;iSWѳgE8q4Wz>,;@q>|IҒ֭[UTtի?3VWWg 80;;[Y/3ܹi<޽{!C|}} a4{Fo/kUWWecFX>l^9;xzezj e{M7FC鍌5=͝7iɽ/9͜ѣGGFF{+=cBb 1S{mvU1'7sձOxn37#e k>󀀀rtt,#z겲K.kNc.yfLfMqy%k8>w67ό\ͧ;u/yK7tz;.͜ %|]IclР徿ʑdrIc֛jaqeff*SaÆj׮]#G4X\0''ѣcǎuaKk>㹬lfȐ!ӧOWϝ;wРArn/rQQQfb$=`zרn3|pKz;"gOw^^ovbs]z9uFO| Vc1؏15*;jԽ;q<όusͰ,s۴iwܡ3ޢEbbb|||aƍ%t,O>.0 x=7.^/L&5.[sv-nfjM BQVQoooӧ))8f-ֿs+rt%O~No'6ץSWݧO|@Řp9sدŘgk1֯|5Бk[+PVuZp!1c 4_xqJ fsͿ+ |kGu3`@c*Kѣ>{7=5ۿ2Os\\tZ_]On|(y'dji2Y}ȞexEY늊 sڼ[n}# if}|sd`mʂBo0=~n/zQ94ZF<㯑 oŘL<;uLJ[DEc1bvpRwk޹d}}KGx^nȾ\r1s{-{{4Y}HoHiȂBNOT1 ̙*崕;w_ l+(^ۿּͫ4Ok›s]M&m6a„*&1Zc*@XY߫WɒreUaXXOu/++ ?>f?n}zw8D}،۳؜F‚nc,d9cy;g9mncT7u`dr_ ~;k›}1]\\4:yfb @ wߟ>Udrli^^^pݬ-|w8o_sBYfĘޞWWdoحk',kdS1f}r84n`38z_ l-?|-FG?ض<㯑 oXmm/Ȗ.]1SeަXll,#s7\|p?O^:.zNvyv1gǰawʯhʟoZ}}k{<I*G.Oό}-%w,!/$77|\{3)Drrx:T1?_zw3b=2N(rUj3bLo֏#mkrUY(kCTLƆ؇ zz6t:on,R̖ ޱr_u}|9ǘ|\{3/իwɔϟc ƀ6cZc"33>cb t(3gtň1c1ƃ#hll\pann.S8ٳg=zb @ ƈ1;y{ۺukRR#@Ę^?199yƍY֭o={x1s‘#G-[Lv/##c…b1c1ƃ10Q@({ ƀc_Y<~7?IDc1(c ({ epep` 1L1L=c7(-@pR͉raaann.Cb Y,xԉohh`@p#G)=Lfɓc1%///((o߾c2Qݻ,18 b KcccdddTTLBBB~12 b ׌3d+dX@p/Y;@#F16qD@O [w1!xD1c;@ 233/^ \gΜ92QNKKc(\H+V+-߼1ڪzݦرҥKp72.wEc徕G1ژM61Gue˖eeeugɈ1c1ׯIGMJJ1b dժU;wdv<11c1b 6c߾}k׮ecIII1c ~mrr2wW"b (''Y;ګ̎1ڀ~ܹю?~@кfk֬իOg|h^$gaÆd٦gϞ۶mS6;l< W2vOU#靼5mٲ%>>^166vڵW9Ԛ8t,\^YqE@жclw}dFuu)sUgw ([Rg/!CL>]Y/sG;%U Rrj׮]#G4.Cۍ19uz"C:h 9%׌9r[;ܨQ>SK;… w>|YNMME㊈1mŋ"""ϤZwS PP1 ~=76nݥK`[SO=%{3˖-s$._,{ׯ߆  AvcL@Nހ &IвOt;ykzӧ|b|||~~1w#G6ӭ{>WDm;ٿ ƀʕ+@кc2331Y|yEE3uoqAA1c"%%%LѾ͟?1Zd&hΝ;ס^0F۹s'SvW #15>}￿yMͨJJJbvO>1ڒ#GHڍu֭Yc~;c hcxںy߿~/c h^~l1-eeerow7'@Юo[bł j2Qf\k5囗1Dc1({ e{ ep` p` 1L1c7(-@pR͉raaann.Cb Y,xԉohh`@pѣG)=Lfs=1.yyyAAA}X޽e1c]###d,%ҿF@JLL4L2Q[nb {Y,  b x<ؤIc1QG \c%R(:t(Ϗ \c5Œ%  cΖc-1J 11J 1 J 1 &1 11 1C1 11 _ bopR+,,egXScLJL7440D@=zt\\cJI{b K^^^PPP߾}$Ƥz- EEE c]###ǤBBB1+11d2JK[ab b Ahh(ox@I&1 @O U;oD1޺1ڤƂŋҦ̙3Gb,--m+dectD)));vtR}qƶx.\1OMM񯮮V@Ёlڴieee~Ο?lٲ5k,b am9vѣIIISi1ڹUVܹjU1־}֮]KKJJcC~mrr2Ӛ_1++1@{SXXHf"b v￟;w._qܮ1ڏ'OfggS;_jj*@~,_UM裏 cctNpҥ+Vp h'\ :ujUqp999&y,6\ctkvsmŘ`6o޼Cknf_W_}E 3c^^^uuu.f̘g*eO?_tfʤ e={n۶z;W:Y˗/BCC}}}xJOUovL ذaN^# 6$$$ y1wPXFFl,UUUk׮#GT@@/JEDDx{{˟III7qD} ސ~e {Ё222ctXǎ<1vUV18jkk͟?_~2,,͛k6mActF?dk ?1pG0F'a 0c@ a c01a cƍV˜o1:,cUUUyL cd~CC]1&ƌ1%I{7 H0&I,88X& 0x`c$ 4hĈ @ۊtAAA%]nh[UUU<LJGwa g}V cSNC0C^^rYGwa 1xt@0ƣ;0n޼gϞEp0qqqƒ Gx+VqcDyy… ,X~p';;NpLW\KLLTvM'a H혚*Ed}}=U5p+Ξ=_PP `Cmmmtts(ֲf͚O? @Z={vMM 3кrrrrss91,hhh櫉@YhQyy90dȩ oN>zjeM}'p'.. !!@$R%@>k vkÆ %%%T@;(,,ܱc0JIIDڍ^_ɎSffft.]4yygxDzlIII778p`޽#""ڨ ۽{IQn}[c-v10#ʪsssۨ vrr~;xDi `o/]d>`0DGG{{{8P}$ѣGǎ֧OrH]jСC]\\Fq!*Veصkbcc}||\]]_~嚚&m߾=44Tvzꊊ~mr劼<b{;Y@{zzQoڴ)>>^k׮]֏~րdB^-_\ud w֑[`H#Gę3gagϞ/" /_~פK,Q;bYJOZ EIƪ믿.7Y@kZ:|@O<1mڴǏ̏ +...--2e23$$$??… SN}Wbw̘1'OZΜ9#G^@I&͘1| 6l/'L s sU~m۶{bd1)WX!1UL?C֏Hkdd&O>YeFLGjo#w<--M&$`8;;/[LOΞ=Cx{JI;ØLĘ,qvj>a  al:O>'NTc}g~˘YK-v%)RѺ47*j& 4| ^^^zW\i9kZ\̼|ڝ,VQQ\B1ٳ#+**ReN:e]ٙԤ1GuV%>3o/K?~|NNf@b1i=hI;ØÇ7nN{0haS;wnƌaaaKgg纺:e|[n֋cØnMv*?ͷPPP0fww_Wk֬~!C$h-f$Yl=Gd]2!/e+kng=KjjjdUUUnnn2|&ǥnk-fZ=igzo\ZOcf/^iI2WW\YQQqJ" I8y=45p@޽{~ݻwKV3eKkw-cViHs;SHu/ϟSO)qgyb# ZYƛbLVd$57wZوWƴکu10@+ܪ?OO<2ܹaaa'N0gLMfff}};vl+1ijddRd۷oԨQ[=zg}VWW')CcISwaeUݵ8;Eҥ3gδZЙ&GjO:Ҕ>},X@eZכo6::駟VR7x~Z̘*Z=ilȑs̩)))#2:3ܳqvj>a  a,///""W^RKW_{u:䙥K*3 ңGooo[1]vM62|M6o!##cذa@hhh~~:ƍNقŒksw-cM6LmR3MԞ0uǎe<(Ӆ2m~ɓ'0P7x~Za*ƫhC1By`UL+ 2e3-o\ZOcBJ~79R۟}cpϜ9Ñⶇ1^i )˜NNNߤH c10C())F#Grss91`Z >,Yi O3DN8a SUUF M6sc+Wݻrh# ,T --p ٳ[ `YcccrrrNN3Њ%scXVcǎX1wߥgggPOuܹ5k̝;S @َ=t<<<ǔzꪪ*!a t@ a ct a 0@ a ܸqJ3-0ZGzzzYY0VTTCa P5aLohh0ĨQ<1IbӧOs0J~~gHH1 cĂdh+<&LN{G J0%lڵt @۪/2ͣ;0s=iӦ!@!??W@Dy11Ю}] c<c͛{YtEpHƒ $ŋXS @ .X`߾}Xvv6._(͛aH*%c}}=54кΞ=_PP ojkkϝ;G 5k|駜pfϞ]SSC \N;a WvhѢrN>a %''D= DN>a Щ>}z@;O 91@"!!S@tR/^LM  3ڰaCII 51p[ر@tF)))m91@gL5>tr LNnh.GJJ '"0 i 뮻ۭ͛N5ޯLJQ.w9~?JkqタFRjq~~~wntvcD1Z/z˖-2m%̴4&=xW\9~x|||߾}8F͞3gcٳ|oc=feNNNׯ_wK11@gcǏOMMU_.^XX,v՗׮]quu}kjj/_vگ_?I|I /YjСC]\\Fq!5yFm$奄@5Ȅ@xw!/_~dkK,se=ztر>}DEEfW_㒨bL{wkO>} yiYYe>3 uhmPKcoٲZKjȑs̩)))5jZf###%HT۷oJ”'^L>Qh_P\\,IM6n}SyyyRj\]ż߸qNGYy~oIe<~xGkm>Moim\o7[t#o߾l ޲yܹx6lح1 ӦMD&oZ cv҂0f˒o%yoPKcyW]]]}}}%ʊ!/3CCC ca 1՘1c[,Io n$ɫ.NDa I!جĉ*e |J|87xԩSwzNDa @kW]tqrr2~Dఒu:ݽ+?0hJm8rHnn.'"0 צeɒ% W-) :4bmڴS@tj+WT3vPYY`N>a vqJd ٳgs@566P(mŋ91O~~~RRȎ;bcc&͛555T;wڵkΝ[XXI `ñcǖ.]W^]UUY C1@ a.1 c@1 7nX c&@HOO/++Ɗrrr" WUU15I t@5jTppǔ0&Iwt@[ <&aLXPPL9@mq>>>$It>(=1ж}] `~~~Ƽ$]nh[UUU>c\FFFQQ͵tR0@ s%W.^xb>Da ӧ322hDc%/__Cٳ@ͶpBZի+Vs@%%%(B.]:C3[ncMXqww5jTII Q[Pg78p`޽#""e.)>#menH ca US&|{^~,++ W2˖-2}Auݧ~/ a a Ƅ$[|rN׵kWyY__?}0@&䥲`_*3]/(ozj+3MZh7%MEׯ_WȄD#U._kZK,Ƥ/]dն)9^P=tP@@JjѣGǎ+%cc0\9r:gϞU^JΉ<'5k2?...,,tʔ)LiDDDIIIeeIf̘ذaC]]ݗ_~9a+3MZh7%Q?9yyy=UfϞmO<1mڴǏ, K5^W^QbqZ ϯpԩSe;7a a nnn/%̨O:.WTTL:t_69L 4HiDkI [fD(3Ə7nrJk9ddɓ't>}L8QM={T/**UXUUiFuu# p˜|+|B2C]]2-j0rqqɩk׮S_PP0fww[Zi%ZoVKӻwMdB@l_&1չsf̘f1i5Zؿxxa a  c/I25dȐ'OjQUVVmδ7%6'L0qD!Ç cŋx75稗ukkkXN:ueb3dʕ++**^ZYYWn3^b114;J3gTϝ;7,,ĉwj%''’$W۷oԨQѣGguuu<<<̴7%6$} P >|ӦMaÆ|+3Dkjׯ4Q ɓ'W^jƋ$|WbCC~n޼aJc~aoV3%Uf|}a a ch/_lJ7|Cc0渺wtjhh 1Z&--@ͶbŊjZf޽|hgfdd*2 ,hlls@K*00@ݻhz' 0Z.::tm۶-77666;8p 33Ǹ>򗿬Z n֬Y?-EEE  oAQQQ!a7oAc?und 2P #aN a 0Fa c1 ͍71cuY cEEE999t@뫪 U$cM3&88XcJ$;c :c{zzH0&I,((H& 8x`c$t#G3@m+..O˜L[nh[UUU>>>"<c=3o߮. 3%c {ڵ?++Y_S0a‡~X__/AKB@tt4x={K.!ClVk׮˗/嗲YÔvܹ300%;Zl*y a `:f|_oܸ1...((OVsww7^w˖-R$d TWO XܬD|pʔ)7͕u]?YluOf@L C q>}_SfA%ʜ>0&ٳ"DIIIrr>_|INyfv/^)Zl ,hhh`rc@50{…*YWx{{_tiΝ2-sL&G޽{KjRD"ӧ,ǎrݻOswwfK>}z ˜Ŧ1n)չ(yyyzH_b|A@@@=~h1DEEY:111ǔ'Ntuuo%-_988A#*ip~0gΜ1M%/c<]reٲeÇ>:80y{!!!{!J15$N @#/@@_T  J5`[c$1pa :,VEEE999tc$1pa BCCՂ@<(a͛O800J5p__h:80h+:nRH5 AdN JCCTRH @HHs=G_mkԨQR=ڣ/~-1@˽1@;W|{/cvG._J{/c฾ۅ ;3fH5+--Avv={,]Tt/ZݢEVXQTTDЩؼyjjjnt8*++ch7ϟ_pabb޽{  ~._+gIe7o$ <jXjjTH|g@CgW[[}9>n͚5k>S<֥KToo;w*3+**"""z))$6{l_NNζmcHb󘄱!C(3bbbdYf7,a3sLvYhQyy9a I wj0w?'''ekdիnnn|`(62 1$6$ikefft:u[)9"ؿ5yLV7VØ$jԂnO>?'DIKgg琐+-.~~~wnqniX,1a,***66ok(..p6/tkbJż<e˖9`srr~z[[j11a믿{x,xbJ@ 550S$1?''gذaS¤_}2?|^BBBݫvvv 2S#ˤt:σZܬ-2eG}v͚5xGdhΜ9#gϞ&k׮۶m3c;w v2^_eÆ %%%Aaa;c:E3 cUUU@iI/oVuuo9fe >C[n`tss۵k˗KY敱hi`e66W7_ʕ+yyy|-+c{L&?֚%YK ]JDDeΊ+&Nجc@Ppz0#Y߾3c}JtwwW/uM9cƌ|pʔ)mlBdիNNNV6kΟ?/YhСeee&xD6Øx\ wuqcLJr4L׃>l}<}:6=WHo*?F_EnN->gюӺ#f#8RRRcxϟo|)B~ٳ)))zGmg2eqv1[\6Qh#?yrm͒H/^h~,DXXغule߭ X=\Ʋ.)ZܝZeGrز]6[Vl@놱V<{V=DYrtۍϜ9S[o~MΟ?i{cǮ\"][#bYØO>_\S7h񈌏Bk=&Q74Ν;eӧ[) wOc=rVٲeL mcgΜy'{.O9sXzIb>,I Ə\x /pҳmdbժUCuqq1bġC׮]O/*'NueqSG;v[>}˭/^{M%K|P__?ydقq?ӧO8pdB^::[eSCCC,>Ui|+S~h&ͻlq?hV>,V0ovk`) |OOOM6ve/tcp4$F$noKպ26f̘'OJ6gΜ#G*󓒒"""JJJ*++'M4c uѣG[֦BBBe_paԩgϞyɓO>i=Y̙3y晳Mz)_Rq֬Y6֞F՟qqqaaaťsb#;/6lzz0f#Xi@:_&bbbt0fq ~~~RA*Ӳ)aL7ޣ4Hu3O||Sҟ-7ʇ/_{˜]WTT('i9uK11Hb1G2fnMv>LUкJkSwuu5yDBLXcZ[PZkGu4x]4ގVO<]AA1cnڬ0f#Xi@MJt+;lg;iI]a y $1,7n=cǏWMn3C 9yd)+WVTT\zf H X+^:Xi?5cb6N@t~a1 c:E7o{TuD$1a6JNNt{+R[[Ktr=,Y~ `C:###8rHnn.a \N1 c6Zdo0t!>_n X?_0t!]UUl2@צM c*} :T^޼y˫>**w<@QQۜggLV\w^jAKeeb1*׈7*ӫW~eⷿu$ڵ+44T3gt#:[iiiǏ" ٳyn0a u?O?:uJfׯ˿tMY~6}={Їa1%%%''@{x$r{T1*-[ر^P渻y|Eg --饗Ft0عs… y=!@4 cp'UxÏ=yI}}}UUĩSFt0n裏㳳kjj(sέ]V3nNP1*WIbFR_ _|?++Km69;`tlSJJJʚ5kZp^"T~NJc1h?Bnӧg͚UWW`0vYv޽{u555g.Xa l!Ez>Yc1`0,\ֵzr>_c1ДP]]Mx@?#11.Xa ,khh$E(p*c`֭[ h {SF 0VA RRR h;<ƃ`01 trLЬ&J۴d) Æ svv׭[a"S;1+۽{b1PU{̬>t c ''ׯJ?SF 0VAq-]|~}}8`jq)ڴiS||׮]RSS_˗/[L.F׮]555u:]׮]beAհ$=ztرrD}􉊊*//W7jժC1BRWWmF`q#1 \ ~Ӻ2\WWL˄1L1I ݚ899uU~ZL)ƷcinUUU{>D&ܿxx CYY?y_j5`̘1[nXa`0ƍlٲf]7 eZ(V.--UWR 2ɓz(*bZ L0!111!!aĉiʕ++**^ZYYoka/5p@(p*cap7nx񢄮^xA;嘆~Ϝ90O++>Sf#G3gNMMMIIɨQ﯆7In%mUŴ˓L2x`1'N;v0fxX S}ѣGguuuXa`0Ƅ oN6m@PyhOKMMuss2ezC$#F([j,kA^(K>|ӦM6S*6yu&%[VLoka/!l0444??F`q#1 \ I`01@ *@0V&z>ec1`ߘZǷnʧ`0\tiŊe˖ >ec1,..؀`0>l駟 5 555D>Yc1`0O"ZŪUdQUDn]AAڵkLQU^eee111|_bׯD 0VA1 [l!Tjkkz}NN# \ PQQQ||_VVFƀ|ͷ~{ر%K$%%W(p*c .]vŋ/&999 |d(p*c! *@! 0VAP i0VP i j i j`HUT`HUƍVc1@HOO/++X E Z_UUUppj` t(p*c6)yLbcc}}}PUmeÆ R(dBNb:c1@[ill&ỵsMPUm_:K c&MZ~= \ m}Wų>ȣ;@ 0VA{L c:.Xa N6l)#<£;@ 0VA1; PUGy.Xa O?T[[y{oaG-;ޡ[׿͛d \ I1,//oܹK.=~+;;݁RRRΟ?Ϩ ;rİ={@`0z}cc#Û`0jժU|9}Yc1p8k׮ݻw/={6(p*cXrrrH,^gSUQ U:>1O 0VAP]]MP$HLLdSUkhhcѢE1 \ ~[n-**"tسg#`0YJJ 1c1X.]n=Ft-ދۺmݥ3)p*cp%''Sggg6_n]{.Mw9~?W{ /W۽{wgT(p*ca{̬>t$vcʕ+Ǐ۷L֕=C;99]~ͳMgSUcƍ[tŢժUCuqq1b4ekbcc}||\]]_~嚚LMM5I<==c-͛7zh_]tU5>}}2!/Ŗ/_vjeu+cZGj7sl˗_{5777%K(p*@A˜$3gXcƌ9y$9s9RQRRRYY9iҤ3f(ŠKKKLbllҿ7ڼ#W/^cY_]Ndd&O>Ye$={aLHM`fu ={b1 \ t0ֳgOI̐Lֺ(ӁGQ Lw}3,^s߾}|NvԽ{w+WsOAAKKeN:esaLHM`fu Ƌ(p*@A˜+c_J*ɩk׮S\WWgow@WВ¬nP(hWf=i7ެα&(p*@Aظq-[f2dɓ'͗xeL}ݗ`O2UMMziW쉂aLHYcge$Ç(p*@AXaa6nxE/0&یxP[[o߾QF)Νv {Ξ=+)EV1 Ųg}f~eLvj= ;U3gμ0uVX:GGG?blx}駌y \ 8Jh 1 111ҁ3)p*cXJKKcUAAڵkc1pDeee111|_پ}c1p\!11q˖-V0)p*cp(**7o|PVV7i,544;vlɒ%IIIU1 \ a.]vMuDR tZ/999c1  4a 4Xa @50Xc@50*c! *@w +Հo \ uYrrr"PU*88Xcj5~Іc1@xǃ>v;wNb*y `1Iѐ@ *@.]JsNefEEEDDD^"##+++rc I󘄱!C(3bbbdYf7QG 0VI󘄱N&899)3]]]]&W^usscQU0$Fk<&a|Z c0F 0V$tcXTTTll7|)p*@@?sHHHZZ|C:T۽{wK+Y c_uDD=<(p0VXqż<e˖Ēu{Ɯ_na݃U0LGNNΰa{X)\䎗Pھ馀x)۾},?Q""x#MX+#IMu0/$"(jϷf`nc>Ù3g|>9c|AhhۮXǧ}ٳg_~;wT9ydLḼުn ߯ꦎ;vzzz ~%wiUǗE WWөS'(ߚ0a4y 6H)W5^So%6uԲ)SwnJ֙>}#kZ $+6h5H^x_ c`9s\p_̳1AYDS:(Wv淒k[V7չsgKڠWx_{ ` b >$9x Ib)r77:?aq)utbLN1 Jk)_b@2r֬Y1V}QbLOcS~[o9_g>B <ܱcGuAuI|I5<<>>^^^1V}QbLOc(=:QbLOc@Qb b c21c@Qb *1(1c1c@Qb *1(1c1b 1Pb h1pV,n6d6L$--1F;@x1`6$Cvf10VA3صkW>}~'7nTVVq/,,Tڷoߜ#1 b P@ttG},^駟zj͚5f۶mPgϞ~ɓX1l`wuO?#<AAAׯW quu ߸q#X1hl~xg92 b Ik֬ᰀ1c֙ X| b 1JJJ 8D b  CSg;w0L"c1b (د_?ǔ@^^BB@4Kz{{}c2񑅢"11h,555~~~c2{y 11h\Ǐy=㦑#GfggsX@1@:vXׯW^@8CDDc=1c NtR%"##9u11p42 b xpc1b d2mܸqMi5uT $''s(t@JOO߲e 8!b Xw ,]/mrss9ؿ -`1c L䜜mƍ2Ν;10VAhdZPZZJ'9F%K6mO10VAhL&L)8-?Ab `F͞=0@xˏ!10VAhs۷yfMh7n -s!дN>rJ~1 b @7߬^@KII !YYYgΜ $*1mEjj*ڵk"10VAhCRRR4&iɒ%Hccbi׮_kF݈6'ƈ1 b 1ZfM۷[$A1=en[Ǎ?[n:x`y10VA ewygNNNYYفdfcť!mЬ_ɿW\9zhbbb.]cqsyBΝ{=cLO11Ǝ|WVVN4˫{ _S9sx{{˷֭['%m6uKzzzw|rÇG-+w966ܹs+Vi߾rپ{\\\yy7V_s ʙ}qssBw>{:$ 'OGw)Y>x`HHǖ9.^T#b bLDBbbbN4x3fS_|lʕ:u8q#+7Yf)ׇ_to[M0A]_BB QEGG;vO>ɓSvٸQFK͞={;)?/?~FT/RFF,,[L7T_~e_Slu[.\H8p`S=|b1c1=z SR3eَz/B97uǏիn())ٳ1fN>,K{勞ozz'Ȇ t6lؔ)SF!ƍӏ:&-Rnm޽M1b @ ΘkEE, oY !zݻwGEE+СCu}ɜM...۷1{`NJҌ53$$DzIHӖ \#\V?UnݺY|KEA5'ƈ113cʯXQOPVZUZZzkHXXXqq{`N*$ׯ_e{,אKLL-@[XkOccbLlݻw裏.\ c)O6MWTTmzHDa3TVV~WG֊4_ɹK.ڵG7݂Z;9r}UTTHYhQΝ.\(ɲn~nO@o{Ƣ"*{Cф#*1Ęa+g,<<>P^~,yhK-]4 @ ^P?ֱcG??? v|W^nnn֭7݂Z;vZ9DAi|kȑ#r}AAҽ|gҥ]vL5B7Nپgdo  wڄ#*1Ę8o1b `@cp ~$1 b @[tRݻwǎHcc\jj7$*1myQhZiii<cceժUǎЄ~sHUcږ?:{I$*1mg}GgΜɧň1 b @onpGfϞ]QQ 10VAhjjj/_sN q̙3fPbX1wy'##T@1^zzd⇎  y-]S,dP-[,11ɓc1b 0k׮MOO_hQ"E7pA%C/b @ ɐ/1b `01 cl *1c/ b vf1 b 8uf! b e*)):(,,eMO b ZN^ـL[z!B˚ʐ߿!-3A4#111j)Zt̘1CZJgϞSLᐂ1hF}}}###e*d8=ի2Ă b +=&)ÇsdB555{JɿJ < b 2dzaA˝.X 00 b [V__Ps==5 1& ic1THH2m}~'7nTVVq/,,Tڷoߜ#1 b P@ttG},^駟zj͚5f۶mPgϞ~ɓX1l`wuO?#<AAAׯW quu ߸q#X1hl~xg92 b Ik֬ᰀ1c֙ X| b 1JJJ 8D b  ]wݥ:X~}DDd1cFW1e61c %33S&c %- EEEc1b Xjjjz/=&)Gy#b @o[iܸqc1b иΜ9j0`@^8u11pO8Nb @D9* b IxlSw1cRN;@1˟|IZZd6`hѢ۷߸q1cj˖-˗/?zh5r`aϞ=Ν#b 8rd؎;\hx⚚b @̢?0'O9sfEE1c ߹s'H W^^.=fcX1uyyy 8ŋc1b јc^yccЦ%''1qXFq…@`dJOOg1,^Xcr)قw1ڰaCaa!SFa޽;vp2++,// .1ZE1_x;4 j[(((ׯdb b b&ڵk[v^YZNNŷh4j66s<=0cbܸqJ)[:u*\c1iiiM[&n\g}b,00p-6Vo+pZh'!!!c)Y(**b b bck...UUU bX[1yq䲦wr[1W)31c@돱I&yyyu]K#00pҥoΌzMfff>}(>|xѲΝ;ƞ;wk׮͙3=..\!k=Rј'ߒGV.:w288СC7nO:%Ξ|gr@d"zj\[׺ue#۶m? /_~e堠e˖Y<"ǫ0HJKKv~ʕ+ٳgꑬsY%ϬK]ę1ϛC~ zLHvv6\c1yXLLɛdc`01&8u\c1yzBNYl1)2tss}zĘ-KyOISgSZ488X}:Y? 6(sh)S1BǍ''N9M˷zm15'xfuWUv HY~v=X~~~>}d ;u\c1k;c2ݴ%dV*--z-n^-DƇHe [}Gٲ?pRRСCeyȐ!}zz[n<[g'Ĝʯj7ǖ!˚.]ڵkף>y $f}Gٲ-ܹ… e999Ydȑ)G1u@Wl15'Hn.;Yޭ:Ǟ]k@hli3 z .1{ՏgXK2cʔ)<jk&[1cE+O>~xttʄ-Է~zIr-Z1cy/ϝw9a„ZvڹyȶHOO'b +V^!pGnذ1cxʕ+2h oh$b Ν˔@cX`AO)& b h2z6mh;vl۶1c$%%3w̷ň1 b ?F̙3_bժUEEE@PӧO/Xp{yw[JJ11c@Yfb-(1Y0 ,|ŋ-kY)@_|[o;tҥKSRR10VAŋ{ŋfd6AJ^",Yg2ZhJ11cl 'b `01 b l 'b p@x1`6b! ~^b /1c iclm^uup.10VA 1JJJ¼ېѵk2%ڬ˗;XE댱7NqW7Y/9=wd[o')W?OO.]7nxC:[éW^CBuigF>"G?͵oе9uج<]o偨g1ϯG˿T yj`GߛwazDݔ\ӽ{W6?^r]: ysGGju;\rYdI>y1ڲ .4eh1&/!C̛r}©11uIQ?;sUM/>-[VlY]ƍhfi= o'NnX+-6\d!qnjyBN֗~_=[Z+.nԩ/ȕ/i Rߘ>ehlsa#y6?iʃghHåIbĉk׮e2 qɎ10V:c,8,+<$_Y w+?:[Mo:unjV֣ 6+-6n[)ݫ֧OS;K ciŠMlSrWY6~i=Rpi[bU ;K1quoO(˲ _־^rС=<(AסC۷cFVšß;kWӹbV&3j&3gwfLӍ8)?;w#DRȝwz G(ƌyXroOHwy{w׹b>sY-Ϙ+w*lƒG~XVxx؛+uQGGJ9cS#|G9 3۷[`6Ihis8mKzs1c 5Ak=M. ?eWzHdܱ->1&O{z-hmd\jrh=O߹nnw+kM1(켄 WO%c}t_ߴ9SVS]\\Ok\Y+,Fk_nZ2?--6%Ɣo&!!x稪!۬ތj1j#ƈ1c\_\fX_)׮]3g{\\\yy~fff>}d=zGΝcccϝ;/Zn]bbm۶2Yree?/ \t\V4iWeAT#'ߒԹZ*ߪΘڂή RPhmM˗/⋲)e˴٠~;ή~Dv7Wl^:ˮGgEDDݻիu$b 1Fqi.mf{N>SFGG;vO>ɓGU\\,Sٳg0@><<Wk~:\:~h9{xw,\Yaʑښz3g4_A1¬Ywb#_SxO֡q#Z(d>VTT|Ǐ׹1c1ƥl5=;p?3&2cVիסC咒={ˤVYN9-u}˷zk@k*˅3rYYQ8,oYeƘ҉1]seJ=n8ʱc*hmMS|Ǩ_s3|fz[]]7==ĉ淲z%1c ƈ1.\}pmYd^ZܔywYTtƍ63VUUuс!Zfnrqqi߾?޽{wTT tjhmUe ,+˗Wٲ6҉ ]s wq&Y/uudcG7f2k:7]b޽F ٰaΕ@km1fd'&qf/{"t`,~_uY S% xAAAV*--zNcygLfemyeNwƴp ,x'l|J9xcTבΘ#wXܮ̧^imqifףP?"~z!Jb @4ycK29|i`o}5$Ę1c222d!---&&F栗.]ڵkף>?`NNNeeW_}5zhشiό=CsYYYMTTӕ͛7h 7ٲ62׭[7uNpR>Ǵfa$9zСC,im;f,nnXrSu6bVQ9r߾}]2ӹ1cuǘ]GbsX 3Rlƍnxzrss\n:77Wcǎ~~~rCƘ5{9wwT G!+Ko7\#]\|lk.[tҥ]5UUU7UښiԓR9gYMCn;f,nnXrSu6bVQ]_~r`#""u$b ĘM1,\rxFsNc-"ikY $ь1cVsssU䩁~]?o*V {]wv6`@ϕO|{.w7!u_^>y@W['Nn׿?z8lHlUN&-,f +44_S|]oemw?ͬMu7NqW7YPz.f}##'oе9˭>j?G X^yӧO?~<::W_ebM^&1cS+sovN:~_=xH\ةS_P;vعoDv~ҔO>"߾VU4y/ȑCJqmG?|n.1?~o 2d@{ԞkmYHoHiȂ܅,KIc~E{׏1TW;w\/y^.fC}y{w߮~X@3ϑCXjjj+Gy&Ltkb A17d-c>}BNڡ,_* U׿Xlq4KUW~~=/\d+W 2S۫y?oRr<W/a~GVY;cZυl׺/"/$3:ϑcCŘHLLd& eeee10VbL.U o{?(sqƒG~X-n_qݏ?>Ӻs'?HzĘ֖/o%z"Q3ޜ#m {cL߲|IS7=[V0#TWxWό :pΜW ِu_c<|Ȗ]?!1ȱQcl;wd> YoK1sӚ{ W;'>}B:ur/oڜ?n;#77ƴNf/{pp?\ڲ-ҡKYTqPcoSvuҤgrNJ?0 RV7%gSMuI^{˫\dABB`6kWާ}w_77Ȼgg13:ϑcCƘHHHPf6eƍ6mjVKb 1ƥe,.M{ix]tiΜ9JfϞ=999mrI1.X1qQ1ڎ?33N.1c1ƅk[1&***f̘ǀVpo\c b 6c-[̟?ڵ1)--IJJu"{b `…sӧO[iiio Փ~O.1c1ƅK101_c\p!lCcspҐ 1f O Df1 b lC01_cf  @Ucf ^~b jـwb @#++l0//Cb @`0DDD=z!1c "&&F1e6PPP1c %>>722RzLfJBQQ@4+=&)Çsd@1@2dza1c k֭=~ʩ;@13(16x`Nb @$>>^~qc1b $iS TUUq(@1L̴11pRWWW z @811pvc b iJ1c MSb11h_ɖdcc%fWM6-"" b `41`vvvLL$)1cc1%cEEEAAA>>>{@UcGyUUU)oIח10VA5kVYYYudfflFUcJ%%%zXyyyrr}ƌN"##KJJ8hnS& b Z|)%f2M]~=555<<\Xz X1ppYC)oz X1pL锘JylĈ1 b  ,!X1g[b10VAc11pvQb b =F1cg%b @c/%b @c2@10 `01_cf`@2h1`6cc i cl *1c/ MZg6`]1c*)):(,,1c3 j)1d2q@1@Q{L $$$pp@1@cـRbPTT1c h4z{{Jl@J,44tc1b и "󀸸7EEEeggsX@1@ںukrc1b !!!J >>{`8{Jy+,,,LJL&Ucf͚UVVV0=}c1MLJ,))h4ֻ˓7f___uYRRAb =dR6upbcc1 @c%fСCe"""b 1=Sb*卲#Fc@8l)1s!++KnAb =fo1c%1{b =F1b 1pvɿc 1 Pb@0^~b x1`60 b lx1`6 b Ԫufc URRbu6PXX!b  CDDcl@JL7L" @ELLcl !!1@cـRbPTTb FooX1 H>#1@2dzab qmݺ|}}CCC9uc 9uc NX~8uc NCf1cRN;1ٹqƎ;22258qRRR8ϒ%KV\YXX@œ;w.55u…w6hrss9Օ+W6o,?Re7ne @hdҶlٲz, /?޽{y}1c3g0Z{?U @h.]4sr@駟nڴ:1y1L j"к-Yܹs1HZZzF199W<18qĻ<h 6nܸ~^b faܹh;,X@$Ö.]h;Gd2c 4?رcLOc[l @hb-bn 51M,--۵kx8sؖ;vnF5{H|-Zī@bMrq? ܾ} v7|yԩV0AwȡV7r;7oެ~}e/|ɓ$ V_@zbLrѣGtgϞc...UUU &wK귵!Ck%%%eee6mR?ԭ[?XOd@C=۸o󸸸ŋΘc S͟?ȑreeIw. \|!午+&}X܋mÇ=ãsαΝS|/(-[4\vmΜ92Y///}/v>ֻwիW[=K. ~';+|||HZlJ@yiQ7ҩS/^aܸq'\dc=VKƃux\-dݺun۶ͺC־}zΝ;/\Pe9==TڦLsrr*++ѣG졇R?U 7Lw裏Z=o[K9r kRAgVucueM6 s|Az9ݺuOhȲG7++'jixIT<cuߴFfϞ]^^~1Yc1b @1?ƍSOPBK/&YPQȑ#re˲z:SAkaaa;vyI˗#Ʈ]&ի[ddujoSf;v~v"""Φ ; /Yցjxy@$nvey$d_&7ӧ%?tTUUw}ZJJJ.]ܽ:cL;cϟ}_ yBͿ7Qz_9[cfffϑ'b cP̚5KfǾ˗\ٳg1b @ӓ9զf w-޽<b bY8vHOO @hbk׮=vc8tЦMx1ch4?8Voٲe&W?1͛7O=V/99=1Y0 P`ݺuEEE1ŪUv<hΟ?pB^b eeƙ3gi11٩IKKc K]Բb` ,\]htn;mvSZDEf(D$YM-]w|1zY5?3qNy^~/^X@!ƀԭ[N}t̙QSN8x<ǰ•۷o_cvPcX~A @KLa1`7_cvkJLa1`7{ͭ[FFFĦc{zz7zS"bرcϞ=˫>|o߾{v`E`7_իEEEOƍ{{{'<(˷&ugϞH$X~c 7جYʪ.\8lj%O=9 +--...VbX~c f"$YyyyS.C(lѢE˗/ϼ ͛s9̿A1D"MgΜYZZzǏ?~S.T*uѧOΙ3'~yѫWZ*sː2=1-s4{1Sq%+Lf/^1u%6ܣ c(AY4u>1/͛ ~Ǿr% .ob `=o11% Bc@{L1=P{c@{lƌJ @b$1@1@1S1111  I߈q_@… Ϟ=0zzzL_2X6B>}2Eb )֭[xLeb,ܹswirܸqc̙BD">49b YFGGKKKB %6{+W1\X<ؼyBuvv1\d2،)..v1B}}}6ƶmfBP7n(..u $scn b!ܺ@ѣիWoii9{АcojjF!D+W Ԅ*{䉉c㵵]UUuE3 i(֖t:=T*xQ rС[$á:::L/ʽ888Ǜkjj^|; JUUU11LXCCC+-*"$Y$9{lvwwC@-H455^9p@uuuDVXqڵl ~[,>ϞMիWmmmlٲ`oXEEE{{{v|__1-Y$ .,̦MC544F@'ոZlYv|*1O$>\|1V]]?44TWWg1h4{;͛7Oc;vȎO$ͦcٳgO޽[^^?~=a1;w;ھ}{ii%VVV{hѣGc~Cw}}&wޱq WOOOcccnee.Y&dK.ݰa@t:*b `vž|(x%)-﨔Q.e`XSɕlL$\$kl$U 3Qܱ_k"9z*gjS6ؒY}!g)gZ y.Oy c^k⩫7>][k!Ԯ1%-5z) }̅x>]ˀP9yV{ѴWR Shۚ8kQtlFjOvU +]iEDY+Ex.&7&ሕ7Zy\ A *.RչԜ4:aOW42 i);HiҪI {`"heX#d( Ty]A tLۇ:gǩ/ťX/i:3a9v Z)pS kt;CX]rGz/ƿ ;*{po魯:PR#+'kBri ktm$QE>G2Ϗ NȌotpЮMhqm 8nXE9-{ǃs/Ȫ0 G :H9IUKz c0̤8vӦcW\9~xBB©Snܸwcb S1F@ݽ{w…?޽g}#-c0މc kv3c0މc111Zxxxlڴ o1X k3594lO4ʋc[l* c@E1VԅiX]]畭Z=5v=xo1@=cixۋ/ZQbھ#9?unWXݍuƨ%R)I+pcUǦO5+V- b,'`f6KBn"[t6:)ڷy51VXWcbJأGx cG16lXpx➰Ç`g"Zg[[ߩ5[{)ںkXV;? ƪiӗuYa C^,Ț4}fv`[4`֭--U~~i~e7>ԩ롩mqi77UcyI, 79˒svv֥w3gys[Q⹎%ok}s2ҥÖ+؀߻ʋ'9\\( tQ)WINh%!yԏ]D</ՔaI1Ƴ3ꭷEGS{߬?t軌sŅJdҥKx@7!qbUrn FIB쒐=^w*{RnSdッ >!`Ǘ0QH%Jdݻ,d wUs#&3Ap~IuC[M=W'*$AgyIxɼ?f g0g,>yɀ;V=.:0thٷ$(€#&ŋ(rYtja/uuIQ;c:_M?JIܓ~虋cH7_:Q\\dJ}]1wbaÆT{mԨ!2.}/3m//d]t+el pQvcZ3[.-}[P})eTF/\H޽ƭR:5lÕjKL:>(СC+-. ;1ּj԰xAhS'9/~B3;:Z[7c4r wWd9:6߲>fpu~6I364?::">~͛7?J;w]1wb<{Ɔ fuޥmJd\mJPw/7ƖjySv$c§5j>dg%!=c?K;cN&9Ûg_v+ wJx.6{1N/}|OPQ4FINh%!# Ʈs +|Mò6/|$%%UZ?1@cYvvKfOSٗ`u^]{znY<40G)闉TS~+WԇY3(G͞=qΜ'o~y1:%$H&9ÛM+i01sI=.$؜oz%ź;TB͚5 o1@=ck`Ub߲yC{Xoh"99٨=SN<<< c@AsEmۊ={V2|O?AD%L>(1b ?cc0 F}N.e(ӧ*?o1 U#***-Yޜb 1 1&p`I;拉m `c?bbb,Ye˖"!c0 VbAb 1 Atb,&6v! Z @1c1@@b b c1˃dĘO@jXvmnnKIIIHH@b UOAAA6muؑ#Gڶm[VVk4A bZ6mc.=Fb35RSS@uoooR__Au1T/QQQ^^^_޴ic^ Z-cxt@ pqzowcǎÇ#""6oތ0 n?|b jW\>}z~~>󔖖$&&'FJ6@zEo>c<5kVaa!o_ѣ; pȑ]v"IxxxEE1x̙3[?S5c`j]n:"P?> 105qqqW\A!ݻwo"`T!PϹ{.> DEE K4h󙬄owrr\ԸeVVVb j۶mѿ_Ɋ~rhԨj-Z͛oV}uj[tL5!@惎3!4́ Ux^L115N?~Ύ4Xaa7|Cm1S{ĉgJJJ.\޴i#GTTζd )//o;v{C߿bXr6115N 8pɒ%#_ ޻woΜ9...VVVÇ/**bV\dfffkkKD'D/^*_W6O\\JСɓ' +yܹ}wIxI"ՕUh4y$F!Y!Ν;dmmݤI,sΨQh}ήLz.p}?V{n ӓ=`ZI%itIg h0}?u۷o;.͛S^ $gy+yKv򜑉W?N,!yDkb @@mcTdffnٲ|Bsv---C 0a@*H(7?裰0?11wFۯ_tKBBB +955Kl+BEгk׮W_}Ufrz*¬?JvƘÒE[6mnݺu {''|/,ڥK9CCC;wL9R2v^2PNѣ/_N +Vcƌљ cRc֬Y3g ذauTeP!STL4jH%6R7`y/w.ڸq=c$C:99GꚒ"O<)9V<щ]I:pN܎;gϞ`)o~iBBδJ2 06Sh-Zȇ)#$3$- MX1&4=^^%;.*S22N,!y<__jKkb @@T4i'fff/ )%88xAͳɬ3fgg'0ॗ^'Ԡ2ի_|!׮]˶G]v(5ibM 9c3c%1%AkQQ-Mt,U2sai=z_~666nnn$E>L0xiQkbEP7Xzy23󼕼 v,jt8)Ҽ&!&1VPPXeWkkÆ ̶߫pO5xy[3rss5j$m^Rbu͚5w޽~Ɵ>}ϺTOt^<; DB vݩݳgOI%3siSRRؖo6?ydGuʼnEdVGq˖-NNN4^fƍӿ7y#o]KT 8P|Tw*|wzٶm[cIRjV4XQ h4˖-dԩj r6mj0J|?~.\|ndz.%Klْfbyf:ORRȄYEɯ'/Fޯ,}ǓFAy|||Hyzz1 `0űox1 `0XMc/X} **cb  1fb=V\\_/\p0!| ”u @1$Ę k׮e˖]p09۷oG GYhѼyPQ1@ TmXpxL[R}M\+)cժΞ=K2,99u9]6&&ɓ'+bҵiu5PDAe;Ovu*ƪIQ矣OQZ13R<:&!L)t:eZw4y" cQ(}1VzlÆ D jvƪ yb ضmP|CVVVLL 1qSl*??ߴ}:Ò׷Je9~f7e؁ٗ47mn9A'3Ag~{:g"Iާ{{;j ^쒫0x>=w^FmmtĈفkXV; M+)?o )ɘ$:1J%^֏]>-bg$}V̚&x6m#} @uy@P-bly׎Pq<7brNt9:6߾c̬Cן0vUxܲvѭ-[e)Is[B$O؈c< R|Z(cɬE,b,&&72,^?U/KճvC ZX|xQQrJ'''333[Go;v}ͩA/^̎4r֭-ZػwKԈRT:t8yO3tFYdd}ܹ ӤIsΝQFWWץKy$ Vf @^o666~!"?~>>>u/tƌj2I+΂d2%Wg1T?2:nڲl˫W*9%xgb 1 `0X^FEEu---C 0a߷ol}-G֟te̙CP&駟裏/뗞N}HHm={RM6IIInݺq-{Oyx,$3MKYfɏwppꫯϜ93x` ܹsjjjNNȑ# dJ"KErE})aaaO{lY1 `51kk>}P,jٳB;77ٙȐXh4I'Otuu//z]hS!RB 6h&OG|B:شNbyoѢELLLffx/bZ- Rr$):T/&!VKJJlذA-B1 ASCum?177733xMb-,,65C$ 43-$ÇvjeežPlޱ: oѣGgcccWr$)ŸTxOuAJT b )ƪr&{f]U-ěGףX3O\]OG-bjtS3FY&??ݻׯ_9}4bcx \lZrA%!۶mϿHFɜGc/I<خ] 6L-;c@PXuc5JΝ'|j 1|O[:oMnڵӫIB잱=zH@!>>/^ 3c :c%0ji][}=vXqq1  ܹ3&gس Ou`"6ѱcG߳g[wf!ZXZ7⋖dԸUb$ǨÛ4y"دEWs˖ONYZ?ؽ{bbbZjR|}}njPYQ>zB 9*c4oeeղe 4nX۷{xxЏj5"˖-ccxFEE5m0iLb}7~m۶<$%%_LIIԩSH&; T'^*n[lNM-;c@Pb,'`f6KBn"[t6N110ceR.\)c'Nyj?&O\b ʋaÂ?M>|+F7nmR盖6ȧ΋Ѩ1aYf7e؜ٗ47mn9+,Đc?|ZvLIwphfooG i DVEhζVǿC(OH^bZ`ff&3?~{:ʼn2CȻ$dbO(A(yM|%mVظqrrr222u6~x(΍7ݳ c1*sK*Y;`@ϼkGv1Sv2bLrd쒐=^wyxS```' nݏG/ݻ:a»F ,y|U33 _g9#CTs0s')OH^|B~~?EΟ]7N;̨sdTbevFɳl+.i:,(4''f͚{ =577g[ 1I5lؐWq՚5d(UBQJe!#$Gzyee' [)-[%6jq?>kb=bLI IM$QJ"/t-({ɛ~t-fT\RX1&5Je_i_e& 5l1+ƚ7gT1?enn LR{΀MٗH&vC >C/fQ+IH 7?**gLCɳl+Z7/ݷ=6vAt􂨨 6VTT{ >dfrS+jC1@С6,Ę6rRmΈ7[RzӜһYppaFdO:RC|٣ }Θd :1 \aFo~?ё3%cwtNQ,?+/7gybWc1^_oc@Pb,+;zi2U%Ɩ- D0ɘӉAAݕݶĎz5YW4ŏ2xT;:6y֦s;uj77bòy)yՅ7$QJ"I<55ZZ|ϘQ.;JD%ϲZ*!ƞW111uA^O%RsW rTo]q3m+Ցؤ{zj7nD%!VVM [·_y[mxy8]{{;2j@7nՏ]]iIF%R)ݯ] V;Ρ*/tNQ,JilBYvƨR:tpI! wޜ9s\\\^TT$iɒ%iW\dffƖOokk'/))W^;YZZ:c Zmoo 鰌IƑ#G3Fq;i޼95ؗV-oIΝ;DlҤIYf)Uݻw{֭<2щ/w5jtRI#l@1@ clu㫴`<_Ji+뗞NvHHN)nݺ]~}Ȑ!&LO޳g? O۷o_裏„vbbb޽u ܹ3ќ#G;7 7mٲE??$K.3gΔ_]2I$]jӦMRRҭ[nܸAy$Sg0i_}Uqq3g,y6e5^J?b7` b 1Sb$ЦWRIǭZ:{uvv~"6##CvT꒒j6lqRo=yț$66СC(Mʯ.[$.),,trrLh"&&&33SC2щ/4^|S2F2Lac@1)1TG?177733~ !b78mppi4E쥌 2e /?⣨A/WM"ÇvjeeŞK|Ҏ=گ_?77;vH))I, S~c@`/ƄTK vƔL{v8p`ذaԒ|7IVVV7o;coIk֬Ͽ{3I Mm6{{{ɴ+Ri})Θ^:A1XةL7jZ J{bΎBO=n:tЛo)O63֣Gc%:vعs={;F?x^3<|&4nyڵ+!xHD)>>$#ַocǎsppLx)1ckp ^:A1XcQQQM6?M1&&UV*w֭hU˖-,Xиqc%lD;YRR2uT)e˖P~CgY=zt?ĝQb7K۷o'eH TI͛۶mKIIJJLx)?BLo /Ly 1kKjJ1p-1`1S^-ƪ'N$3('O i&gѢE1b b11ƍ֭:ƍYYYHc1V^5i!|#Kƥr1Bdw— ϋѨ1aYzI9;;һӼ-fbZ`ff&"ߍb[vT;%g[ů V}>͙}APӦ/ KKc_:Z"?>|}[T)Q |'YHHE.l]&ɿ~ѱoOrBC'8gqI/} OkVӔ-i?''f͚{9c@P-bN7u6:BKyKl%ߒ=^wLIcƼ0z' ,݃z];B܈ɝ:W ʙYlSt7 Oѱ}|~<%*y'LxwԨ!K %FI㩶޾c̬CW?/vYHHȾ uGC9osmt^"O-ʡEƎfs3.6eĘx~!Sg[blݺu컰\paǎ1bLZ3KKB K * 5Yjo}w^K //dᐢ[)-[U..N=v\] (cT4 G*,6E'YpQv0($ti3 Ibeϋݨ&yeb Gjc4rbL|ypwoɶx.S_FW|V:U+n޼駟@+Vb jxqyЦ/IYQ=${Gm~jPe)uom+e늷:yW*q_ {ɛYl:ѱcOں)Pɵd'Mfs ikknb7j!0eH}4g*wIe@s8o*%bL< Z1F@yb c ׾f+ԦM\ӽ#џs_vK ??s)"|ɛYggRmacˍ%-{,F 6-e%7^0*I:84S?/vR$/hN?h~J1K^HI3ۏYtʠ|2]`HoSNtۇ1K͞=݊qΜB-Z I|EZheC*yxM9Ȧmƃ`Y3VOԵ2noݻ+KB%UW4Y7l^xッI>.$\؍ZHlӭd'g+V:?e`~T(4=] =qIߩS_;L(c /oVV#͛WTT}"##Q]1@51*'N|ގ[/iԨa3ԾU|RcIqyyYZڷy86/K,S. jbqC1c޶j?_ɎMnqF..N4 Y7Lx3L}f'RQ[Ub~^122oA--n݊IHH@Qc0tbL %%%<<|ժU(A}_~y.]ob 1 |Ę͛77l$IBBBYYj `Y1$  c1"16ql( WFx11@@ b b 1c11@m2bL bc`J>o#kJ c* M6zȐcm2=)1/++Cb 1mqE9AAA)1ggI&!91 V]b$%%9::jՊ1RbZH@1U$(1ZGwcKުkNx, Ν'|:V'X%))Cg 1*/H1Ԋ&M^,Ȫ1 {c<2bnn1dȑ^1o<cxt@P]bl֭--U~~it%ok}s2 Gd\^hBswo)sENhMG,-j0^/.bUeIr٪jw*~͖'9\\сbxym۶"ڴ8z XX@ffWdM>MbooG G>7Ɗ/UrF/0hP:iӗuY%ɐ 藫:~gKKKohѢhP !1T(7~_/^\QQ@P؀=rynN stl}ǪT_fBTSN_z/~I6$Bd܈]ңW=?|)SFE >!?'$ת,I;(M In<=ě}wVi1$ʪC.9@x<@^8v9$dXsT"$@2rwȨ>H>6:Oؒ[mܸ 6V\ Zc .D @~z<1j`gc/,,D @RZZJk(b 11//^Bb 1ؿHHHHIIA 8vXrr2   <1 `y[dß=gc-B} ɈA=c\P;OvurJ$YXtttͩS㝜t;u^.$#`m,Zce1V)A5i"{}3v˗/NN>PZZZb,''K/ԭ[]vUSAh8SԚAU:&L&7c@A]UYcjyXq*%1nmLTTHttrmDu}ĉ;wڵk5^;-ձdDcc1jINh'f`_;icooG A6nmR盖Od9EQ[[71bòt׷Je9~? ƪiӗuY%;yn? f7|sssY`ʔF.)ƨ(߾c̬CG/Q>a»F 9P1F !wdX !d;`NC rJn۷$nI /GU͔N:=… :;wNMM9r٦M[nݸq㣏>zXۯ_tCBB h}1խ[ׯ2d„ 3888|WgΜ 1_?jTt*=cx*^NC r ѡx9-:DX%\׿c|S&Mz-&ZR)t+vI mhU*bUV^ -Zd=1juII ) 6H/yѰ|a E~#h4+(olLFF`08#y $#ݱc S{9y>}P{ :R $ՈJb95L*cSNς~* b 1jxqyL'5d̫Ie?bnnncΞ=`@O[[+w{7<}fg@@Gk¢ 69PϠObL&qE2Q͛JRĝq'OsOreJ橽6-=7*j RSS+**z+W&Lйsg᥅EqqΘÇwʊX#Ob633g8zh~lllHNׯ0xI:$"qA/}e&S?R%D2R:dIQQ^PP`mmM=...ŦU}5iy7L!J6H#1ݘ#N&Q3>c>16?jkW4{xv+N@@9s˫flX Nly(N=e2RN'us<.$\$)oPN G@N>Ch޽; 1W>5ҽzuUiH^!X?[^I?bBz.bk׮;w,((N: aaa;wx16oߦ*c䪿?Td:t7ԟo߾ǎ+..&;vHٳGfe6mR:}tbԉTEhѢ&M̟?ڑԎџvƌ=z`waiy7L!L )**JKKĩcޒ߹'?9O^c@Pد] V;|u$ĉۑQ}bXY5?Mqp//7KKU/gc]+*oLnqF..N<}-cƼmcc:S 1WxCWWgZy~Rx mgߞcHTUٲW%خ]u/RMLeK#NDzfٲeB=<<7nVvB1v=UV*w֭3l޼m۶4'))oٲdEEE5mrcFO>&SW":*cHϟ}'NPp|`mmh2`3oTć2)ɓ:t4Ŗ-[#G?R~r!1X=Nn߲'~*ik)T%O<}mEb 1Ę{{m[I1FaoܸHsc111b 1f[F}Κgc֭c;ŷ9NjD 1WpŽ;P1 VwY?rJ˗ _E)=?CSU#̙*b1 L*L/:wnyEsc'N|2! INN޻w/ S֭ݟhEǸKZZ7⋖dԸYI꯾zŷ@& 1F̝;2b Z&ڷy5Řxi7rr6kf$f)%KgK|E=srϻvJV;w̜93ի/\J1j}ZT3"kҤQe_aР>66VM4p`w 4øqéeUJKͶO;ujz|mL {:ʼn&O~@v033Y1|}[Tɸ׀Æ, 8|M[[Z(}"h4jk#F &S}x6qul<4onK=%`'ƈyAP:th(N7 OQ#|$TSdݻ}|~<{S'LxwԨ!B? aBa1:xt|;1q{EgVcvEAhx%bL!k⢂ѻw׸Q: wlI|Wtvv\2zOJS(6lHNC Q@BQJe!ܲvѭ-[ˍ7 SL'9¶0QRR2w\<gp…b1 bIjXX3z$>3 uSy$9$+c%)rtle9>.(p?x+={VnP5on+3&ReO?Q6$dx֯WRco$bLɓ~i>hŋϟ?*5]({!okKɸ1j|1ܓ9wϳ&L/R;*3&|ʮQswbtΘIIZ16th{Ɔ cZrH3;g; 7ڝ;G~ Ę͛7׭[hѢhPppp@j PVV@P XNFL~X~5pPPXUgW.7D͞=1qΜB?ioהWd]zxР>{؄tk̆ 6%=F}w_$WgVibd=%`cb J1V'A1b b c1 1 b 1 1 b 1 b @c0 b @c01 `0111cȉ؅0,0c 1c11@@ b b `rY\\l3%:thCCM0F.1u`%)S"IbsΥqcUf`PL$O h1pƈ IJ3f -0Fe4'Æ ۾};0FeXBCC0£;cN(S1p??~~~={4iRii@y5k֨oܸq>>>#GqDXX^;f1zM'};ܹ3!!A( ''0cxg1zs=cW70ailK.=sgVGFF檪_1c~ϟW'NXTT$d…FҬ69sfzz,][n֭S뵃޾kVXo1E^}򌌌ݻK ca071{53;n|rÕ{P_~H0 rhh/)_, GšhV`SN'xbΜ9O=,?&I/)fYaLd2fr׮] ca071ݺuVeA~U7~f9K.;wC*aO6 846jV@ҚJb5AAASX}׬5+5fz˄10F˜;cz 8~+++vڥK48UWUbbرcey̘1O8(Vo5+wkn;a Ν~o*&&f޼yMy/yɉ'<8~xe}޽jjjɓ'%,Y$::ZV|gaLVٳe9))ISRR;5M6a paz̙nyb@]]p#FܹSY=p;00P6PKz[oe0dvaLNm+Y>z,>}AzYas\sx6Ys@#a އ0cVZc%L:~0F-mڴI/A>}za0@[ t(֭c1ŋ'ʲe8a wqQzacxe˖UVVT-0Fjkk'YŻmܸ  ϟ_ly̋nٲC <޽{oAcxڤ>5***RRRL&7@#y?ƍk׮5ba0@{RQQe˖շx#y~If28a 0%CLcyc)F`J<1#a 0%a #a xzS"a0ZGfffII(//d2Dc1,Kdddqq͔(77wС 4a ԩS>^^;)Sp1СCC FFF9sFVw}~r]w)[>Y8@<&]]tEY[WW' ׮]4c1\b}ye˗,--MOO//:IHh3kǤj10FUrss y񶚚Ţ~"_??pQIk'1É-40VZ}4f4iҢEnܸa $6~x^x/$$d׮]̰nݺEFF~N&171O=Zo]cao[ll~3c/tӉjرcGDDĹAmڴ~3hݻ`P/׿{$~zeSO-۷o^b ._wޭ;w߿Q>o1YX~숔WsIڵ.9s&::Zґ<{}uuuYyiwcx#:n$fIrrr\rɩS6yg,..N߶m[XXR^Jؐ$IɏjJ-dB#v>s=p5o޼7|S3͘1C2L87ިl )_J̙#[+!miӦ1$x8ٳxW^ye޽|LZ]֥Kec c.zY={HjٳbƔ:Ͻ{%֐*%6JJ.1 4HzYbEmmmTXX_gu;c֊ W5^ G}$|e ck0&?Ø[n'MG/_a0`"yL N:uK ߲Ggox~EiYa?$6k, )zSX>̙c1E].cDFF>裇&1~'/3_>$$[nYYY[KQ`a_BYYٴi|}}m6e]櫚}OɅ jn~xe.£;t41118eA#l6;Vdgg+ߛ>|8 n<ƃGwc`pp<0F($cR;c1hn޼[iٲe+Hjjjcc#*wd2ɩtEHb1i2q+++L\mmmJJʧ~JOwʯn ())4iR= d2EFFv-"""++$֡XN֬YןRfϱsѣ/] hhh7oL9V{x:LMx[nl&CyTTWܹsIC1 c/y]//?)S8rsN2ʡC ?9{qݺuAE߿/yL3M4I&7n܈chM61]\*))0N_kkk_x??]v)+333”d&5+˗/ݻWzݺuslt\tL3o~<2a\p)"'|:Q ;v숈87h N&iС}֯_o0:w,^x׿=#/T9wd]*dE~=sLttyYb5556,Mhݻ>oʷ/Θf-֬+eʕLWzR0.n?c֭.Jb/''ʕ+'O:u0fX$3fHP~B}]Lwt8qoQUUYD7||Μ9}{6oެ شiTR40'mm۶0͓K!aL|4Øf-FCXbE[g^Vhܸq#550wpb<+4g˜W~ꣲ{t^W׾?|uuuׯ_8~Jꕦ9kk׮uEYٳgOSW}Qa~3skWF:VZ E~ȹ<\Z 7˜ @\h46Z_* _<-~~~ƙ0&?5rsl֭IWR4I>dJaLf-8&aESXo~1X۬^09/t&wNz%mYQQgY?Cm/^o=J3g{!!/_~75?X(rrr"##}Ç;im۶xzSt\1I0}a,??2SRe}MM/,냃׬Yc_6SnѢEAAA/']Ʈ(oЦRskvuf͚ջw^zɂj;/lܸqR#G;vLMeeew'WW2~~۹sgN8~Hh}Jܹ3!!Av- @|G^;yQ7,\W_}Uyڵk c1}^dS/ׯGn""">ԵkWG\ud0m4_R.=w߭n,HkQQQttt$O69A,>2 rehz,>}A-&ØMz-oرc#GTqF)f뵿Bc1 c$1N:~s2Ip{j9s0zfoh`\+y $1N:XϜ9__L]0`sN=7SSS c:̒q-//d2y.Hbtp`ʕ.: 3f?{׶K.k֬a8ެKOO',СC mƵ*22[?&yL&)`2!ON:9I׎ZJrŋפ1Y ;v` x$g'OO:%1tVHfffJJJcc#T0)a hŕ1u,O?ǟÆ woϟߺOQc ͛7OjL#{n_5ޤR1)L `ӦM2 | RRRI9c@9w^@Ǒ Ͼ]r%R. 08h"& @R\\ORR佘mb. 0*++۴iiYrCCիe~'5eff^pݻ7// $#[nnԂ0/lիW)))BGj*. 0h[b^;uԾf^a 2 bmX}kgJkwlFqFjj*aQmG1@ZΟ?ݻGy:-hMMuh߿t; cw7k0&stg*=tnݺ 2d֭<=̥1ƀ1cƼ%%%{쉉[Z}.]_X ^ѣGgeesر~˜gs]V\ɥ1ܡgJja{'O׳gI&ʴ)$$D W_-Z(((^`pIDAT/ʕ+&%]heas^qqq{^fBMMMͬYd^zɂjw쑲իŋf`zz8gEEE 46%۴=JWs΄I@@@NN}8(dƍ9R&z3FhnWgÙp5 iVK}|]oyT8Ӟ.M2%--M%05}t={أ>:sӧO۬4UUU}믿>c Y4Q`޽ÇXxҥ{n`ѣGӜL0XUŋGGG?W^ќULϟoGK,Qƍszfi·dO<9uTmJTʲ_62qĢ"-\pԨQt[:s`4Yzu<< gBl+ <*ivd/m NWQm{@C ~o~CC c%%%/`ٳiԩ5WPM2EwZ-_~%>v̙3ze3[[>>t[:s`4Yzu<< gYhn{qzkδg crLtlڙ~1m\chE֭se!c1Յ fϞzС___5wuX,=zx,ȯR.w֥KΝ;O»uV]],˂QzeZ7ѱy/U-~l޼Yș/'+W1:h|'N ۽{waz˛Bfrth͕zu<< gBlYa5 gӛ93 8/arKa hĈJJLL$1qݻN{]vҥKuzԩIII˖-6mF& EEEKN8hrZWMY 3`lٗ_~C߿_tz^̷vջw&Xs0ds`J́Ѳ0Wgãɾp qbj<*iu5 }w_rj30ZUxxxxa bbbcXJKK?>zfee|7'OV{K/%''=Z1UUU?~q;3MN \dIttT:sUJ!{7o<#<"۷ U̦zg0a„#GTWW˴[Ơf1g0ds`J́Ѳ0Wgãɾp qbǎ~Go{ͣ™lOSիׇ~xeI`xa $\s=2]ٳg:}ԏ>>>#Fعs#^~e??ഴ&ze^z2 ra3{ZLagΜ6YP?c?ё)%|*fSֳ_رcСC(ܬ0̞6ƜlL90Zyx4^!5k/%]G3˜?c۶mkրdxնg.a 1ǎ+;0axja#Ҝ9shxv(gb֭3 fshh,xc<c ݩnCjj*a10<$.y, AV\ɜFo]tQ_`եB/t1JR7ZJwcQQQVYYhrss8І͛ \jAC lٲEMb6n0o/WJf @GbŊgŊ#[zzzmm-Zв˄~+a XBB3Co,Ynga ;a m/,,dtNiii>yyy<ԁrrrȂ0ȭ[x"q\x1--CƟ$ꭖ-[LA'0u$ xCjkk']e{b.`Rp2XMMo]]]QOIIIRRy̛n޼ +08qݺubx/.XӒwػwm۸I9c@mܸ1##5jkk?^cdRRL_V2L\L1,Kbbbzzٳg[횜iiiK.=w\y睒qF~~ڵkF#~'u:+++55u5k4W89زeW?wҥf2<+~'`\88#Ip~'`\8p0q 'y0q yD08@p=8#1k]}}x0q @,))>ٴi_!/0dw^\*!!֭[n5,ZW+..t/0lӦMDARRgx0q _.\ ' ݛI.^;a /+W$$=^' 1kZb;uXgJkwtQ8vƍTN:p c޽{#66=]l2*8%͜J)ƚ2nzjN:p cؘ1cx㍒={Ĵ0 ;a $u޽~}~~ɓz9iҤңG\~]@꫺EK]rW_ҤkתQA󵝬UFg}3h HZdƍGy1̚5w޽zUY_[[(Zfue4 iVH}_{5yk3=K/0- c>̙3O>m>22l6WUU}w3d< vyÇXxҥ{n`ѣGSkmrfe4Ø,|Auuɓ'N8M8H2… G`cI\?~ϟW3-d!6Sxk3=K/0- c%%%/`ٳiӊ)// d!55駟VVN2E_Ͼ^fYYY555|ɓY޽{e>`cɣGUUǏo.qqq?&4jpP &9rZB8Ν~KZl޼y%KDGGK3dmiBoرcǪ_r^ݜYx0q hap{=,_fgϞUgggKSRRY׃nSXWW'1bΝ"_~/888--i5{^ev1tP)-**l6V2s^ɂ W[ANR/'kL|ˬYRDzk3=K/0- cx0\@CI.^;a /+W$!=9ŋ~'`\%--7=p'x1kggg+Vu'x1kJHH 'jjj9 1ky I p 6rc׀s-xbZZx0q ' |[ \@hKII)(( 9տ*oWWWscmׯ?t  1k@6nܘqDmm֭[W^i.^ `\bXϞ={ r'6r,]ܹsM5jkkRo[ ;r6E9x8 1k8#1k'#0q 'y0Ip~'`\Ip0FzRSSoݺESpG c$XXXl2'y0q Kb.\ qG c$ qG c$F8@0my<NIb1N:;a VQQa6OM$1)d2 N:;a Z a,**꥗^ڷo_k%f'Ni2h|LAC'QF«zA-cJkhhPjll4ӧOxFA;a :n߿$1VD/mZl5Ţ( ?;a :V yAS7$~'@PQQe[awǜIb,KffN;a <$LAwHb~'ܝHb~'ܝHb~'ܝHb~'ܝHb~' $I9w 0~'$` NpA@\1;a DApAqիW4A $PXXDc wpAܗ*++/\@c wpAܚ10~'$I<@1M#1;a mc` N.H@***f[Z1,544L&y!@\!H:ts=_VkV_:eʔaÆ` a  +Q$,%%EFYsXy!!!$100"""X`3X(kYc_Ǎ׷o_yHApABc$M’rի-Nbyʕ+ʭ0% $100h$u>;a.Ņ0F_|(9f̘Gy8{ʕ+]$VUU|b8lذ۔ tPPPaa!0:t 7n܀^}ՃnqSXCCRTccl>}AzP86VD/mZl5Ţ( # %///<6m\X|9@}6nx&g}ǘp+V0 ĵk"@}F#pԩ d97oLMMeLcxJvɽ˛,͝aL}/maƍ10g1etΜ9<aZVa aLw]]~zйsgf֬Y{ի,ȯfqqq5k(+-ZK/UVVOP4hG͕65_{+W(5Ɋ7nqDXXfg5ke}߾}vܙ qH0p֢^?6Y^K  Yv-a ^ØrglԨQ &(@H=z{+/^]PPpW^yEY)oXxҥ{n>}|'O:u65TZWfRWlĉEEE].\hi6_}ƌØfᚕ9sfzz,H֭ۺuN~L>J\!1[,>ƷU͝ cnW^/Xz{@1SO=%J]u༼>>#Fعs~ǎCQQQfJ)O=*.{OԬ^^y=p;00P lYӫ̩SdJ=*˧OvPl QsƷy#6vر#G*OhܸqZ^Jx嗥`9ca vƼ   cm͛10XIOcx7fdd0SvڶmRSS8b$&&={ƍL5n޼)Gr;w jkkRo[ ӧj,Gۜa _$@1 h@ a 01@wl ֑YRRL&M1,ː!C m_|@a ij>1%I q0\l6KR1IbPPP@a Jcc!C$}I ?Na h6lX1b4 kY,05 wxg/IlРA<cMfÕ0ƣ;0D}p+(aGwa Uqq:cMn޼aÆ~pSpy cILApw#a M#a M#a MkYkhh0LBa IYy/ˤI ٻ|J , D7UD%Q:yKoٌr,oBTTrF$֘GQ.ц]Yk ߵ߽}^c JbV˗۷oB@pLc ҡCa$11G&1` a _ϟz'y?~<111**jV&^42ApdSXmmRT]]]nns=ץKaÆuԉ<01e %I?&&@#g͕1BI |a0[n2y<&J3 ecwzj*a0,,,L cܺa0\g )TDD@#ٳƸua zn0F.(S(n0F\9$`2JHH)l!Uvv?߿?>>~…Ivlk.9}ݝ;wr1Wx͚5DLVVuNc4S'O.))!jjjRRR իWy p_~ӦM\ h^O^^^NrJBa fdǎ999$ׯsU0FY5knK.a0@w+W>͛Dž a oŊ'O$}lܸ1//k1M\RR/IEc4}hޢEƞ44a0L~nuX-ի .a0@sc-X Js͛7l`ׁqYc  3귽˗RrS c0a ˜ԹzҤI~~~ڵQxɒ%e˖&OtRlll``/XQQ?pQ|||ڶm;rbe}MMMLLL@@%55U-Ŋ]tzwޭy}pp Ο?o;N]?]]Ыy{b^!`==Z^W_}Uև,Z0@ØĤԯ_iӦ>O 0tر'OVGFFVVV9s^{嗕g۷o~~'Ə?bĈÇK 9sf޽5X=6Y1cc8viٞ+Ø!Yx*kcl@u<}t ca x Swn|r:w~ecǎ۔ e944/)_,~///VmϞ=Y8f[So׶|g̸^c4Iz1i6W_ʲ10l c+===eYՍͿrM-[۷o߿d]u Yylٖ]4իaL,4^em cJp[^JY 1P0fL>l^|򒒒/%i3fKۻw,i1ޮM׫W=˜!39 [޼TYY,8qx h1*z={{wo?::j[`>7q… pa0FYHOO/(( ,[1µkךm<>}[w0Fyꫯ n3fm1c4;DϟJa0@SWWo߾`+..1cI ЬXbҥ$ŋ?쳅 r1G^zرcrəVXXEddd,=@P4-J.9ǸS($1 = a )z` 0@@OBLГS('!Gr劅)o0F^TT9ʢcʺuVPP`2o"##kkki"1pg}600PcJLL 0FΒ+Kc2$ 4a 8K]]]nd$yL$f0L s%&&v޽?kժU4 a 8WYYYXXBCCua ³>$Sn0F.۳gO%q1p6ܺa0\*11QPܺa0@Ss9s$ӧ*!!!ɍq.1#UTT\qcWɓ'%a 4$Xa f۶m]t___TTT]]=r6mt=//OmVVVddg׮]322HbnZh*3€JYYRR2`;sa0,\矗{O?liӦ(巾;v駟 e[1 cgϮ]n]xxR3ӦM=z4g;@#Foޭ[_~ƍGw}w۔-NzO4i˖-$1wcJ]vM~geKLJ p/ӟ_7Q={|ⴴ>} $1c̗0&a cǎݻʚn.++S?k8qǮ]$8Iqˌ `?g{ԩSՏ~g3f̰1EƬ֎$-*K:z<&%Kxzzv5##~ag LeÇ۷u7h0,G#nY~C˜ڑEe c@GؑX$10lQY1@#=@# [T0t $-*K:zSf6mR~cǎ~P6 <$͞=vݺuʑ#GΘ1C+cѣ|8'|uV:ꆐia ۷w_~qFdd#Gdwn6e˩S&Mڲe I Q?{xx(+/]\&>>>t>aݺuYYYty,%%0Fnӟ7__߳gϚoY\\֧O^x$1 cj cF:%:gG裏dC#εcǎݻʚn.++S?k8qǮ]$mo.ska0L~e4f9rdll?0c >̙S^^Nr s%$6l0Z{}||BBB֭[LOO 􌌌ζ=)wTټXw>=??_sO6m nbŊN:jJ7~Qf\x c7on+k4ӧ;gMII!A9{wua p~饗^:|pn=1ej{YUNTT̙3O:U^^a zIaƍt_~,_ c <˗/7|w-~S'%1mVV}ݧ,9ro߾wq{Qed'|;Tof͚]zzzFDD\R7cbboJjkL`42~{T޶m[ٻ,,,B4F(0V=O?T)JVN4I]izƬbȑSL1aLe2/PƬ$10Ʉ1YHMM .t„ ϟ7٠Z:U??vɂ?pQdtn۶tz)W_U̼h"NxŊ]tzwޭ~<66600_T~3-[Tl޽&o}` c1$4ܷo֭[ߌg1((>SV.YDrOOϮ]B5c t˚<1{FGY0`w)#֐!C٣nӪU+wٲe|n!eC R9sҸ47+Y݅ JYn@͝jLjC=˜ӆ$>406p›dAm bbb ם6m^3gμk/~u#F]ؽ{VK*# dcǎ 1{ 1 88X` ,oN8,KSsʛ`cǎ~zC C2eOIتU+{))PﶥfYmr#~Yal֬Y}h$+qqqjV}Zxx:wח}-h"? L6Q5a N+҄ 2UϟErIbŎzEcpիWwANx/[kƍ^9993gt݄1`o0>/_YQQAвɓ+W0WPח}ݛ6q#f?~zzzII^˜Hn̔, fbbbTKHH)L -'xݸqrڵi`A_|׮]l0x_p}x'W$UAӮ]ShΝ@/-^رcGrrSNыc rw}w͚5,h,9蚁b߾}ölB^555)))uuut1X};%%%t(p`,rvv61VXkhcǎM6N0F? IL#poڴp[|֭[4\EEy0F\6 p+W2=[ лcڱcGNN}*>>Ȁ[IJJX}Qqq1},a0fݍ7f͚Eg;~ҥK2g>jjjΝKK#YW\\rJz yQ[[B{=>C#YbŊ'Oe6nܘG %IvرyfzZa -x"TGrr261˜unxh tF=:A,z… ˜;삎=##`0tˮi|6KШO di c'N_6m .Zzlae\~ cp ;0ظc޼ysH6mbagMN'a00裏[EEE6l߿# c1wc0c/_nJoXf}yg91di c֭[;w|FӶmۑ#Gڵ+$$Dpe!88ᄏtRlll``/XQQa^_}U)MJXhډh>a7nyI㧬XK.>{n WWWO4ϯ]v ?*kjjbbbW6--Y]-##/ d/l7[^Y˜^w' ƍC:^̟hAu6o(ٖ^њSV244tPXXزeǏ޽{MLۡCڵkM6YnqJf}W ^#Y())_]pA~˗/+jL%N4ɮҮWŢya0FsEgϞmݺW˗//))xbiiz3fܹsyg5ra>|rR޽{7j+}5Fsfݺu~~~ cz9'= Y=Z[ZF[F-V?85l7[^Y;cz]^7kcVm\б[c!C t}dyС c,1jH]غu͛7 z/IKZ33SBWVd P˗/ޤVҥKAΝzvZ߆kw[|]wݥnw0 k֬\G1&N&YPpom0Ԕzx^!LjjjPP,"5͖W040frg6N^yoooX1/ͤfmQ- :va̖>.VVVwLhܹ1˜MnJRH Ҵ4:(OK#*::deemذpC˖-8PII oc5ka۶mk֬/֢E? QSS3m4-F#x /_pguuuʢĊW cz?Uyyyݻ酁Faƍ@̜9cΎ_f  PRR"'Bh\~˗effVTTСɓ+WF/J#9ƍ7 ,Y-r䄑@?ݻ755!}<ϟ??==0F}%qpcT¡1N5.*K}%qpPY`p,aS > Ƹhc.8`pn* cqKJe7l@}S*;j(`p\d۶mݻwʆuc ƍ FFF&$$uctUUU!!!sM61+.t=zagϞM61+.ܺ# @5 $oAq#۶m7HeW\)yLm<c\W0\8ndܸq$<֡Cws co4IcUUUXXČ++y,22ƃ0u뤧xʢf>iO7ЬlM1p]PeeewԱo˖-QQQ4'ΝPYuz!5)c_VVV```LL 0ilV%qR:tѣ1$)Iϧq&1p,uuu_t$< 0N57zuÆ [j0i$S :tPҥKΝu0N5\{J=z44켷0^v={rI#a j0ͺOcƌ7ǎC)񐱏[wL cT#C!ɹ=18rn0i$S0ƃ0&2fgg$''/@6eΝKS4U7_r&T0Ʃ ccsIMMݷo44Bsk׮EIL,aS 1< cNc2K` 4mr3 aHe cj1-Z8dg[˜L˦MVRR<hjjjRSS7lB:/aa|8GFF,KFzսzuڵӚV+U xoRu}GI[l)?KќS||\=|=\<%kڵ[֘o٪ݺujګw^l 5,0x/RCX@sVTTtR&$L cT#Y c y.y}zʕLFf.11 F8cXhh#G,:,,PY)+|BRqɚX-|3բc//-4Wv7jitNu.] oQ+*eA^`u'wCB:*OX)S⮲\//OaLz%a,==ɓDf.777//9 F8ci_;,˂h^}ݷaР}|R>Awm^mY#Z?qwզO,4)V4Yˍfx?OᡬkD>_Ϗ^[WSyܒ04K"F8cygL;cO?[x@'j.KG%uB/bYݗ])IP_l^+b#b}2,""O~,/-oLZÖwcmHO¤جYoA478𡓧gL˯]/ٓ+uBW@6Ӭ^-zjġ_;&CvVc3^ffNk<7{Ԩ!"#_/^2i 5%\ON3ga0L~6삗M炗ի1&1p5A7|^G~̙oᲹܯ>mW Ø_;4nWԙmn9jŲ=zyy[3,4bHHG9x w,4_t koY*$oՍBIkX)aᏄش-[8<נ?~Ƙ \0#޼yvCۛlK! 1i$S0ƃţ>GH/11v9g3[˜p阘}<<<._ܐ՛Qnƚ;c1&T0+a̾0&Ξ=~?66600_P_bE.]d|p5ǧm۶#G,..Vr:tvxӦM2i\]]=n8yVpppjjloF>poۿ3&sW:vn/ZeY;i$n u{y/~F`k*yyyg䲱l,޽;$$DY Ujdr1ʔ駟VV=ZyG4ux:ٳG-j;glΘ^z[j!U cǎ?Ks%aI#%q0ƃgmz{ ,HHL'_~w._|С~x͚5z1vG˖-_۷[s|2f+SVUUl,ۨˏU\†ޡZ=²6mڜIG 鵌^f;gr.k: ̮ZܹsĈaaaׯ0Ƥ8˜gw}><(,In1tf&51y]+_z+Ĥ^zU5kw}ҰQQQVƘ4RYl c fϞý]sM:"50W!S(aq$*\1WƘ4FӘ^SY9sߍZ{XU uԺW޽ ??o6O?X|8:Kɑ;'H ]~p]o(ņJ9jiF&Շ|蟕?| )Ȯ) 7Sƽh#2 ]/_i^?{dA}GHkz7}m^ɋ޵k55ky"iȁ'a̪7xĉG0`oĚ0{]|9--9 F8ckz@l=ߤ3u}NoxGO:^~ŧwD݄) șzV0땬>$oHҐم$RY$Ǯ06;v,_sセ%٘nWSomܻ0YAhhGQ7{-!;$o>Oh`5r0wLf@3d7NA#S3ˍ'߉N&9rrػoàAܥۛ;O~혲, cz% 4B_~Y5ޮ0f|r6r,Sq ^ lHkGn6}b{5kac& 4g ,`B¤0N5˜䵤U>Kf:,,^9P󉚋ޏzb׻Ccz%?|Z|DS"{q9gM*[.#=;,;cz^c6<$KvI`,F= |P\\̄I#a j191O.[>O2KNۛ=jshp“Ov7{~oaLd1~/]~\@@ cq>X?[G~n”Oo wYYo47-zِSO 9p˿_;&aCv19dpj=ɓ/f6¤0N5˜?z}dۥKX^<}C sܯ>mWyaLow2}}CC;~ln=˜^Əկn'˕U{eP~a?H (:i m{{%tU Mh^DzyȂBB1zbY]<{׭19dpj7nbV 47ӧObL cT#hFw!hbn 4͘1F8c<c Ƹhc.8`p,aS ʕ+>`H^TT9eeeDF8pݻyLvU[[KL cT)1eocbbhI#a j8KBBBz)yL>IbOL cTY]f0xc2Iѣ?NL cTF!^~4tUV,F8pέ;&1p ݺuSذaøu0N5\$!!A c=zF8p62qI#a jrn0i$S 7o^hQJJJ2}ͣ)%%Kq2i1p@#vԩĹsnݺ -33Fp9sH*~:2F*K4&׮][pҥKe^Taaa\\Ν;4RYq>y$y4+Wܴi5F*KiӦɿLd_>;;I#% իWh"{kI#% t"9sp3i1p];:zʕ+/q3i1̞=ףi1&T0+p;.\dM[jjjmm-;F*Ka ի i۵kח_~Τ@7LAJJ ;F*Ka Ȃ 1mѢ[J؊ha0L~I5JNNzgHe c @# c_b˜Xpp͛M6ha̱5SI#%01˜wq&ЀNaI#%0M*Bjjjpp Ο?oAuuIڵk' Fi۶ȑ#R«*CBB-Zl,Yb0Zl)?^t)66600_P7[bE.]|ݻw[޵l/tAvڵ񲍿M vd1[n4C5/_>ƍ#""4$^Sk444tPXX(ey޽aaaaI#% r8p`M0c $`oڴi3gμk/~Ç+x8`ұcN|~+1mcz;MNNn۶ydyܹƘ4RYq .H ccckjj#B7:cĉ$ '233[j q 7NJ ^x-aҥKRBΝzvZ AoVØގ:fF~  Rjct;xcz[f}'O͵=v]dСCΨaI#% wkb Srr2;F*Ka ܈P chRRRޙ4RYc@c`H4ok֬)((`m6lzgHe c Yhu4mrr3i1ǫwAyq3i1픕-Y:ks3i1Xb۶m%&&r3i1p]z5.x]xqƌ|[I#% Z]]]JJ_| Mٳg%su3i1p]@#iӦ$nv.77766Ę4RY1~G}fffVTT0G#r?vZfHe cСCiii nFp ,MNNʸx4RY8`p,aS > `C}%q]0FT]zuuuu4pPY%G.X<0\8T0uuILcO&}%q]piS> Ƹ:> Ƹܚ$F.*Kpky `p,a uΝͽ~XXmmmVV<`p,aS h$w} EEEJbvɓ'GEEr}%qHZZZ =z 4(7Yc}< !}%q7>&o/w1 @I.*KT{k< Ly… Nby[a^vJ.*Kk"gɹ0˗/'aOcи}7.(((22GK.-((3gNMMMXeey?o e/ٳ@>1M?I+l۶Msǔ$V[[UWW?o߾!c %hI`0H:R 2ߦ~y$+++S(޽;y @>1K^^^hh[acJylQQQ14>ͷlIb剼( %@=I %@CI @>1pu#'T0c$1y$ PY:={$ PY:IGOO,a `"= [T0t-*K:z,a  [T0t@sV[[x⺺:`آ1`T\̙SPPD,a %+WlŊuuu1lTb555W^ci)11l]bbSbbSbbSbbSbbSbbSbbSbbMhѢSXXc*66V5*++-[V[[ac=F1lcc=F1lcc=F1lcc=F1lcc=F1lcc=B1lMb c@11 1 11c @摚Z\\l4󳲲8E@jGcRbShaaaCUzL1)ϙ3h)999ccRb>>>PPPb :___F#=& /b hz.<==7nib ,VO̥;0a4 b HNNΐ!C$ƼtcFxp EGGKq ʃtt|:%NË@: .19l믿>~8/A1踢~=*xs dʕ+"99"tD[l),,dN }Bc(11 1Њx!1@Gl6:utFcð)Fbb"/D1 Lꩧ;vl8rѵkWWWɓ'?~ﹹ>>>cM>!Cx{{>p<~x#FӖK'"9 @1_k߿4XyyΝ;eL4i'gR~֭s-Yo߾ǎk^po[ǘt_Cdܹ/{ny@:zM<999YqʕdWΝ;/3712Ztwww9uؘڡSjj{y,l/#AvnWw@СC-#~@1dyEGY0cqqq!!!eee9s ._,˳f͊Vggg꫍߰".\p̘1W~n3|ZYgϞQFٹWWR?Kƍg1z9997n͘1~$rvv!we-#6it3s,1֨_ ^re̙whꔚ~?O/{饗,*]\\lRUUuSc1@c{^1wexРAϟWe t;W_Y_{{{u?2VeJ`~,7ڵ![7i$S;駟?W'OZsr,~\߸qO~eYhӦM T~&beyzz<WL/h5rYMRSCR1ZU%%%b hJC5p@1&.:w,+I/52}wowo-Zm޽ՓM8qʲcUU, d=zhppUrC}W e955U}TYWf&g[uX?eeeU\\ܵkW/}ɏqb\7iBY}Ŋc}[1+o҄xEtt $9E 3ftN塩ߩ0a *...@۷o6lX.]d*'O>U6lؠ$???ѣG71o۶Mf[nof*W4̌'O|S{zL\fѢE_rS/j*OU߾}333% $ a@@ȏ#Fxxԓfbʛ4!,ym?PƒlߡSjj{y,oTmݺUο !b ǘ*,,lɒ%,ɼyܹ5킷+)y"11"tD2lׯ_f~>>>.]b67͕+WΟ?bn$^b @TN/Y 駟1c?1ѶnZXXThgϞݽ{7/D1t:]JJ sbUȳ"tPK,QA[K@:.VvZŀm߾ th6l8rcfZm\\/>1YܹsL} @%%%}LUQQ!%VRR@8{b1tPǔIc).\uVM|r9c)֬Yÿ*&;tPnn.#b M֭[ @Q-SN0ݻrJG1?: I&A]yʕ8p`޽CBB٣nSOɟG=H<#%b T) %%%s}xc'?_\\\^^{`e}^^^w!w)'NPo/ ctS.eޣGuڵk5MΝٳg8p ?)pwwJNNVV޹sgŃvtt>}zee~޽CMKK37HdE^^^wUȂܼywurr[19ׯ_7`)3e'O;2Qٳ'N} fb ֌1坱1cƨ'LpeGKƍ *((r̙3r!!!eee9s...[l:}ԩSͬlpGbj:Q?3ʚ={5M>c3`>^|{ܹs 6ƻx,{xxvƌ5Wޅɹq?k,ُѝڌ@ 1prr~&1?g~~|I///eyȐ!c}9sFY...4h斔_#V68B#1F('OVL4IyM!1&7|w4M>}Md7oܣV5cFyyܵŏ)oF h3^fReAM*.:w,*sssœwef#1Fyz},( de|^:gΜ +SLjLѣG7zH6#c;cRPGG)Z\iHLQGsԩ˗/6mCoSNYcB&9[smoܸ!3z?/--}vYY^͍nF h1G_U ?>:::((VBBl, ]qȑ+'L7TUUIwYiHLQGsϞ=R_>>>L$""_V΀l`>޽[Ֆw{Hsry|qÇ*qh.Ltlzzzuu'.x31Ƙ{7,uև~hVZ^0))a۷oWoݺuĈ2000''J3Gbj:uw\O$H;NNNVYY٫W/BBBGi!i . ֭[7sǎFs=gWc0233*erz}11fqMiݻw1@]]v9rdnnn;{\@P*iV^ @[@>|877@F|֭[ 4M\\\]]#MtRMPQQc4޽{>LZOA1.22vTUU-^rssy hQQQ?6mڔS1@ݻwoŊmϢE$bccۤUV1~c%dɒʚ6)33_@ @{+@J@fuȑaÆ=zHnnn{9rd~~YYYXXN]\\߯,-- իWhhhYY1@%m۶)iiio,7n6;p@``ǎ{KdJ{Lb,**6##WY)`addI1ڨG>ѣG?C@@ee~:S.]-͛Ξ=СCX[1ܿ_)+ܹ# ovrrb hBCCwܹo߾)S(k+** ,))Yzرcz-JzFIece5Ob 1@vر#G={VYVjV~"q֬YW\'f}QPP޿޽{ٳGfÆ >>>ݺu?SSSo;qDlTXԌ{?~N{7222HV~u.\ڵkw;U4޽{+**'˲F[0cݻ zh6={1ںW***jmtZ}9/bzz֭[ezO?TGSG~{z%xauŋ0@EQ~ܵkÖ-Bf1vCH?0wƌ*׻@[[7PWG||+2gΜ{ʲ2GY5mܹ3|F}LqԩׯВQ7޼ysekfr0yӧe̿egxF@qAW^^ި/_IHl۶-**jСLŘmw)"c}/nPUU% o_V70[Igyf̙_rӷ{n9zJ1jŋ{A '#~zLLNk•0]֧OcRh4\Ϭ1 ˗/[Ep ?_nhv!iWQQaqWGkP͸qFlllmm-#_ftXppݻ{VlٲÇ+볲srrdoeY_%ͧN޽_ԓx¦o?֭[T??Y[JlM1J_cfxrppPҫW/I;uꔺg}ݭ[7sF3&<<|,X@zLtڴi6mz[vFTr… cF/ u֚5kFͿ(1 b lX׮]:DJQblc/1cx1`6z x1`6z/1mL-1z/ #55l ???++Sz/ OՎ9RǏ2wa-[,dz 4/e6?iXuԨQ2!ـLeﻹG? Ld* *gx1hY?e0n8z?6oi^~AZ֙3g\Ϗ/ 8 b `#+VPfF/1(#^~AlJ9^~A@u޽+V$/sΕ@lll;{\Vc1Cؒ%K*++kڝ׿&$$cWʬ:&&:/h ˖-*{1=?Od$%wZŋsss11tt0Wt`3_|Ł1ԩSrr!!!z -++Y3%&Pbx{Lb,**6##WY`̳'M^ϟGb %'$߿/ ?씕wܑ۷o;99\Q|:@+t111JI-4Vm6L1c'1.\\@:~81XzWn\iZxzz|XYuV{{C~ҩǸj45[3{hpont3g~~ Qc0zK.Iu޽Av#;;0weMuusY([l),,d -۷o1CXjR ʲ˼yΝ:u%v%atrr:p͛7O>-X|g,""BjӦMfvk5u 7uVHHȞ={|G}D3zd߿qF[Ik)eAII"*k֭[7mڴF?4Jbb"?mGRR1K4w1ַo_QD]tQVΙ3g9sŻ媪*Y}Zcontk׮I 6>"1fJQݻwK>SAIɁIݽ{ԩS/^tAբR8jG[{F3{DOψ#11Ļ~zLL/NNN/_6Iaa~2etVƘśĉOS?/?c1&ӵ;vHVTT>u!((hƍ;w ߭7nƚ=\m$222z)SMk;ҿP[+Ʀټ_mhkƇrʲ(c:J)޽{/k͟?_a޼y~Qڵk/^T?ouLD${ w7RfZconAeeL(?ʛu>"GacgLRjܹStvv޿l6{l3⋹11׿;vܹSO8nbYPyG6um*Zwc:P)޽{KCrӦMsttشirڵRq7w`)_6[c 7x7>o/__RF0zlFإKƍ׭[7uO .4^yJ m!&Or)S,lذaذa?ɓ'wYx8}t묲<4MΝ \Fwuى':99'<<7o|we{y^yޙCuu;#{`u@gg_r&St3O3_~wuu}%K8`Y"t,չ %Fnŋꏲaꝱ"-\p̘1²_}Μ9&L0IcS ɑϚ5kƌCCC/7n3?\綾^2.!w{`9Hۚ:QQQAAAW\Qk;[/[l2u&31Gqfn X9M>~f,Vn`~3SkfZ|ݺu=z'y3OOOA*˲+1&ߣkA2dipVz+S斔_ǘ:3iD])]=ly0K7dr󛙺_kb]*/aY"cx2PbX[~g6]uYl`Vvu`GGH5tP! c߃mpjZs5u>cLZyxwaaa޻vjTߑ1s&St3O+7AYV╺9Kz 1#&M;c'OV|T5v矗޾}bJ~Hb3`?HSf4Yyxw ɪ6*Ƭ9S qgCSOl`|6<[|ڠ/+i1Ƭ9Kz 1#ܹ\R|qdYؙ˽ʖ292~&ǘӫ'ZL_~YPb죏>R3&[e'+ 3#+n„ 20dH(mr:S<kv%ޗ^zgs>|L->YLmLmf~c֜%b =J Ęq۷o6lXn;vkgܹ0zh[c,33W]ijժ&Ę ~m劬+V6{7, 3`?H֭[~Fa#1;,n:bY3u<7x8J KS_egσ_' Lݯrc̚D@9'NP/Z8]vٳ:9Dnj1"##"[޴i/S>~׮]ֿFc$\;6rg*kުW]]jO$Κ5ʕ+818qŋ׮]˿ %'U1b u7trrPVz{{dggscLq 2V9 H^RjkkD4s}~" 1'1mKMM@NuqFUcfZ\\lt6)\ b Zm``cl@JL7#\ b `٫2􌈈 .X1h)|ѣd6 %6dY((( .X1h)UUUӧOz gLp*1@ yܹs]m޼&ceegg` 0VAlA;v,\ b `#|c#F` 0VAlDtUcR.;`C^z%wߕ+8u|a 0VA@3());v؝;wj'33w۷+U&Ӈ .X1M!锔Քʕ+K.y`Ʃz*]&ꫯ?lb 0VA@#JlSvvݻyN1 ڈ>rʒYLp*1 11O't˗b 0VA9/^/4x~1 hNG<\ b L KNN&RRRjkky1 [ h yyyY`#i$eLp*10"!!#BNZ5Mch!5IY`Xff#qvL613wyc` 0VA ?O?tzzzyyɓ''OL5]ݽ{qǘ 0eLp*1hbM4iժU뫫gϞ=pȂN/^*}%K8998p@ 99׿͛7Vc'=;w8}JvZFӹsg371OIP///5dAĉgϞ8q<>}ڰaðayVeΘNܻwo``l}zԩwbc 0VA@Xw|)??_Y>y򤗗:/--U:_7^~e/e1c,\pWM)#GȖ+MLmgic}ĉ-X>ƚ0M 曪*(֘߉0b .X1cBʿ3i&ހz~КKNNprr9s4)^L߆ /eѷo_ &%%ɖG޾}J1u{z333%Ϻu.7c kT4u[nߣ0000''NLѝcLp*1h{u/Lp*10N1&c chWx1 [ h OY`#t:e 4ZeLp*10.::Z!Ќ/_ .X1&iիWSh^۶m+((`s֯_aͥ466g\ b ,[jչs<>NɷŘUc`,Z\J\ b a߾}qqq\MwE\ b 6lYYYI`WEEE?~g\ b ?p̙W2$苏/x0 414X1`60X1`60*10*1! 0VA ! 0VAllLp*1@HMM-..6: .X1h~Z600P1u6 %&kkk9E` 0VAZDHHcl@J3""&c|nnnGـؐ!Cd&cTUUKl`HW^y3&ce<`.6oi\ b в]p0 |OL;Kw .X1>@#Fp0 6\Cf\Lp*1M)` 0VA@C^zʕ;e6z֭g 3 SRR/rر۷o״SqݻwOݻ766VL!`N&)))﫫k_t\6\ b ڮȫW0W_}?`6Zb ,$]ڥz݌s&c-|4}[reII .X1mHbb"Nlt:Lp*1h+.^_*Avvv^^c .X1mBttN#T:<\ b ZdXrr2q2UcʶnZXXHtyyyc3 %&&'MRR# .X1,!!sN:=~4NHOOh4M7ocnS*g 0VAc#F>|ƍmcuuǏoWgϞ~===<ӿzUc`{O<)Ed?oݺuܹ%Kرc n+5j(Ûݽ{ɇgOz/`' &Mj* 6 6矗NS߹sgŃvtt>}zeeGDD8PZX -.]:aÿ~wcuuٳ  ڵk5MΝ1SNwިc߼ywurrJII!ƘUNbLҥKF3#,,Hb…cƌQŅsQGEE\re̙aso۶L={yN`3b .X1$&Mfc׷p{oooI 2$&&ƚ[dIxx_UVVo51kR0L=R3ߨczJN"ƘUNb,//o۶m$2e}Jܸqȑ#ǏWGGG}w|Tt7|cΘi``裏Vϟ?1c#5c:9VpDD/l&cLp*@h'1&222g, `ӦMcΝ;III~~~G޾}֭[~F gTo%2tE"b.]V'O>qƌ#h{dAh_c#5c:9Vpuu;#)%ƘU~b 3\ b Zˉb Lp*1 ⒒Lp*1he[n-,,O:ӧOggg3Uct:]rr2q2Ucby&c ZvTJGm۶<\ b ڊ?ôJVZZhg 0VA@۲jժsQ,N\ b ڜ,)//,))a3 ɉb޽{-Z{bLp*1h߿aÆJb uմǏ3UcΜ9@|\⋲2F2\ b l`HUcf`HUcfCUfC`0`0cc ͫ13h\ b ` QF޽MŘms_zh ٳ'`Ic Pb󣢢bϞ=^^^k֬i%7>m*޽kz` *@@X1bamڴm׮]h:wk֫WÇ+\t)44{ϟ?ԳgO… FwUXX:;;/Z0:1C( qqq;TV/z LpX1hŋWTT4 Vkooo<=z0@3fH(?N:uջvSVY(6o޼sݕl3|F4H+MhEDDTVVJ^z{{[y_ ` b )$~bbbt:ĘX\\\PPM~ҥo߾eee5ʭd]GQcvh4ƪdvvvVޗ> K޻w1 .1c?oX999]|6fbL4NM1JkIq)1c{>(1Lph1hS{5u@1z׮]xԩSsm1WTT̛7 lc w8dȐM6I>-X|Y/J)\0b ǔOv̥njg1JKKM!!^cܸqݺuS7.** ѣmprr2uQ FwcF3p+V1E1=e F;@@10b 1J @zĘ2 @1(10=e F;@=F @qA1Imȑ,_1F;@x1`6$Cvf10VA ɐ/1Olȑ#Æ {܊{=r|o9 *1@g!!!۶mS|MYx76n(mv@o;K.Fcc鳁G>ѣG?C@@ee~:S.]-͛Ξ=СCCccqg;wܷoߔ)S57,))Yzرcz-N#1 b Xcǎ9288ٳʚUWWkZfͺr<5N#1 b )ǫ?t7|+##CYmooi10VAk6_WEEEc1b `ـr7rZ@1@313h1c #55l ???++Sb @V>|cl ###00Sb @Zďcǔի1c -eÆ 2 )1WWWY(((1cRWW7hРKl@J,$$W_̀1c_R.&OyfN 11hYW^U>(ƌǥ;@1-Kw1cQ.!ʸt1122 b xpc1b AmmmVVVBBB<,@LL Œz{'@?/[lʕOu2339 ˓%<׈11Z%oݺf@Kʊ)))yGUc:k׮EDD N'dgg#*1׽{{U7~\6p7E4/D1e'xoMٶ][>T ^ ĻndRjdy/0\trv390>׼|3gΜ1> s1qDSp[d_~%?X1JHH(,,$ P'V\{n~ 1 b @#͛7CIIIn⇑ 4-SN%P-]Fb `Є\xqŊٳy$*1Mϝ;G }999Hcc"%% @}p5~S 4!ɍoZa05kf}͗ZV7÷X,G ckÆ ݻw{WZUc,((h۶m6IbLklN:9믿}z;b ck޽sOFFFaaef_cã&mP^ɿW^=vXbbb֭mn.OizU>1FUc5bĈ Vt:th߾,ȗ|ԩ:uo[NJM6[nUW?~PPϋ/x#G >\Vnժհa.\dмysoog}B /Ue˗{yy=R;e˖HYk׮)6 9|,>}Zݙ3gd<G6[9bcc+˞u1b @ HH*T>>>>&&m>I) /PXXtҖ-[KʲP#""[՘1c%$P}-((=z Sr9ǏKM2w;)5k֔:thԨQQ7nѢE`ŋ+/)oMFc۶mmu%>}'ƈ11s]wz|.+''GY޿pp:W:^+71f6FrٽɡÇOccbL̰3Ga8nܸɂyi6l ;$Hb.]xyyEEE[sv _jڵkmGSW;V#[vώF(Ӕ#G*۷̘m޽NcX1sW-4>10VA ƈ1ۍ71b `Єc'-Zď$10VAh*,XPTTD޽{HccСC6lPRRRnݺŏ$10VAh*~ӧS[W\IMM 4-˗/ͥP{ .HUc7oJ2Swcc&*+++33*%$$i1b `t;v6;%%%ccbѢE;vϟAAAJC7䐂1G CTTd/ F8=ʒ!C@@eXd#=&FDD 2#:=J)CZ1b P :To8pի9,h䰰?`H1٣N[dyР&)$$D ic1k]b`zO 8u1+11Q={r4iVVVDDl!,,! b RN!N݁1=UO;@wi<8499! b 4Q7nHIIIk &L 6^hQEEÌ$[ b @S,cÆ ho RSS1Lph1h%cLOc@c *11=͚͟?_&:~~~_|re~~~߾}_@J .1iӦY,ׇ)W6,!!An8iҤ#F0t11\cc7oޔ~Cpڵ6m0z11pۭw+gdd z1هjɿ1c qAbf1u!((h۶m]K'+6lԩS~M1cK)Ęã;crٍ/?9' b 4kvӳk׮+VJ299CA[ϟկ~_"""bǎv7ogU/}||~mwƚim֒%Kdtֱ-s{Lph1X1֦M[^rСCFxG}\)zKKK7n(bw o~_|ѥKѹBziĉoF_Szgn cƌ_8= .1h%$$H8ku&Lٳ?yfG~MD]\㣾/ԢE [|M6Ig?ݝ{skZ2L :cvw[MSy]SNuD"*1Rb3f0͎)77755|̘{kgΜqSg?tTŘݶ~ؽųg϶X, Ԇ;$ @@zL{ѣW^ݶmG5n $yϟ:uʑ_tTt/Ə3UƘk)~MnlueDcLp @Uؒ%K===u떑Qÿ́) |SOy{{~G߶m[/)SwSN!V:76ۯru(Qb\c豪_n@cLpAz Kb `z1c % @1@1$ @=F1c@#Ƙz,))靆Cf4(101 b lC0É @Ν;G[n啖6ѣGNN̈OOnݺeddpAUc?YY^b3<# WZ%muH>>>ӧe#1 b P]_WDDĉ'ʶm6I-5x_Ǐ߾};X1l &&O>ϟx K.U -ZC70 5 dgg#::ȑ#5d2K/={޽{8 *1@MgRbCU4}(1/rc1b &k֬ԩ~Nb @D9r11p4@P[N x ̘1CD~Wn"b f͛Opcǎ׆ 8=gΜ3g?1cÒa۷ogr Yf9===--1c|{ %8uԤIJJJ11!+WܱcH5WTT4ydG#*1[~}ff&3H.|,--1c攔\>p1c h9sfaa!Ge6g͚E1Y,4fjܹsX5&Y-| .1ꯍ70ePoezzz^^-ȫYff&\c14 saƣKq-Hub01c1f͚-vn-##`0|F?voM`-=G)hC^d\>5jTPPcz-& b h0RSSLݸ. 7ĘL%m J%mc6og ڈ,i{d Rb`41#ƪؚGYYYczD}3bL^d\>֭VzLUJ_~LpAct:th߾,ȗcǎmӦ̐ϟ_ͬ,_<<<ؿr#G.jժհa.\`קN|XN>ݼy3gCCCud˖-r@vb \SN֭[(ݺur / +/Xi=^57X;qFe-?cp10H]رc}ݷm۶7ZO͑2SҩgVS1ƣڧ` b ƀco)'׫0`9tvylO&|mn^-C5w9tPHO#ȾYfFkc9sZj5{lY5k,Ill={JJJd .QFixyƕecLajm ϑ}GWwGKN HY`z }BO@ l&sqƵMI LII;+oM&O[rںaÆ0ق4)o^-_~]6إK//u}իW|M i\p>W#ɣG{cdڵݻwmFFFfeeU#ƴ48cZSkknx\v=U=Ԁta 6٩R'1f2d >u\c1Irxy5Tm @1+={ĉ}}WУo;w|i21c 'v%ug01cT> 4kã?gCvDZZ1c G\رc7n$b ;._tRjÒ%Kf31c 7m4j̙3J11c@9pݳi@M/11@̙3;pYf5b b ƀd6_\"==h4c1b @Ξ=;k,z @޽{ʕ %1%$$jb˖-Wn@)@l5k'|„233VJ11c@={}wL1hr $''U1b `˗/\rmslżdffJ5Дb b NX1`6b Ny f1 b lC01_cf  rd]b `0kN999X1`63L{onnpꫯ""", 10VA V<J)IJ7>>N$C0@% ')1???Y0X1`6RQQq@ Àj@2/@4=zիWccjd Uc,$$ /@iO?t`` ]Vx1`68-++W^JUx1`68M=GOA_f@u$''p;1 cl$éڧ /@C0É @0É?/cдl c1b yyyvg999"c1b z&Gj:22%Kb `hzSf_}U@@@||<@ԖN:KzLfRb~~~`498 b ܼyـ, 2#b @j?.G}m=ի9, b v>|O:wܥKNb @!""B8Nb bl\pѿy&&p%zũ;@`>υ KB«GriY)4˗c1b[_{С,ȗ8;mڄ|P<>c>>ޭ[=r+u|3{3un˳[k3\iYy!!mzo偨קױy?͜FP_6Q7,ǯk|)}rMm~z޽vnҫw_=U>RRei]|s~Y&''))d-\ЅW$*gIq ۽rׯP5\t`(WFF׎2 {:[NL-8>"GѩS SNo\iYe" I?K/͟2`C/zo\ϼn*坉{m1lɳ?}vFTk;\}7o^>G¹sc1bL/BBO{es@wWʿ먳eٔSF*fi= N$+m6nԭw>]Y.*  ?+*.+7M]e^^1HåNbɓk׮e2 4qfr'Lj1cw)eY׫6ߧMoеh-8>"GqȖ#m֕:WluN]M =<<>^" ^g믬]Zk=RI-^*`w&b ĘIT~gLyWG*~8kvTԕOu6|r""y֊Juf}^kא +'Jz:rs"h81Vb,%%i(ټtRb @iN~U3H:Uo~M6aȐhW:Z5tVS]:׹f粬W[hܩ'r~6|@[a$w\Y+lFW1&2j{k[߆{pԻйqFM^I1c6_u~סC;Ȃ+poSQrg)Wf}a׮!wyG@AbC?Ƥ^~قF͟ݪ&֣=yyyFE_;2t|6`y Q3ZÏyc-[zMJ 㫿re9U>Rb3.Z`f1 2ѣ 0# ڶm No֝ևl6.glc1b Ku.7,'l^>/9yZj,̑S.^oocwkeee5zfT=F1FUc̹.]R_>uԀoog}H]<~#G >M6Z6l؅ e;:uСúue__߭[V~KKKǎ+ ?\V?~WeAT?0#'ߒTZ*ߪΘڂήZ{ VP۷Okk]r^M,Xu}||^|EήV~DN7W^:˩Ge˖H9]v]bΕ@#ƈ1.'w}ʗrþ}=z„ qqqǏ)Sz\U\\߾KcƌQחlaaҥK[l)R{U9nYjРAgn߿\111o{G'M\?mڴGyh4={矯rr?h.w?v՚=ٳ•6oެIw:yd,$$$F3ZXzCFVsQ|n͚5%%%5jΕ@#Ƹp6lӊ'֧Oo?3&2cVҥÇ弼<u}*2TI&e0s뗖Z/u]d,eeYGY޿ppf>;cZK'ƴv=)ȑ#+Gۣ5N΁ԍTG>3R{O#ʍT^ͩG뛖v)[ٽ1c.\|`kKJM_ju08[_51/ZHRSScbbdZ\\sΡCOe.QZZ7 >܅1[o0`\VVV?r=qDӧ?#ordye]v^gWi͛|:w~xLkkF~L1_mcN%w>ZNk#6Kk5Ell={JJJdns%1c ƪ13*mzjp1֪/Կ;cM쳞={*gKKKҥWTTԺu'6l<;.1k>sށ)))r:BV7n\dAWApB:\6hݺujMknSO5'#s6E9βtoݸ#rvܩΧ^imqiԣXvmFFFfee\I1bLYrȴijp1:"DS)T1ְ۷OR~q1c S˿T1o7ڴiߏa9y۹eK޽r\o}||[{WݻȖ#"vd‚<=:Mn}W͆v*ϪO@g7^d'NEYӪʂ<Ν5?;#$Ŀm[W_춃^ywdw 7o~:vCv#\hj|5QQʓޭ[ >j?G. X^y啳gϞ8qo߾*kb *++[h1c <ԩۿI);7W1bЅ2Mߧ\_;2ˌ&F;S֟w|RAKLp۽}o- ) Yݓ"e bLOBbk޻~ݦ´izmLB`kWN7l|7OIo>j?G. cϯTp=351geggo߾1co&Z&ᡧlWs}/P-?f})+ϯnuwo1eiѣce{I E~:vtbL'vc6BBsu0kr߿%u~p0jS\h̚|zG~$:ujxisP1SΝ;pz5$@+ƾ˪_2B9L|C[6/ןCg}a׮!wyG@Anliݝ_~ޟUڲ︣EI!Y..9(njYߝ/:~o:rǿ;JV֭GٜM6$uuN.Jsu0kr+{up<ƴvF9r`[ldV 45EEE&Mrէň1Fc\֟RuwyرcM&Q6$@biXEEł v h"8i$10VAq!ƈjz-ZTZZThfʕ+̙cX1c\4ӧO?>XۨIDATm?}t}\c b &c ټv9qS~Z~1c\4x1ƅ b @1 P+1ȅ \101Ɛ/@ub l 'b 01_cf  @01Ɛ/1b `01 cPl c1b yyyvg999"c1b z&)22R1u6o>bp@1@V{L dggsp@1@mILL4 QQQc21c bHHl@J,""bȐ!c1b P*؎ 8pc1b P'aaa@Cxxc b Mٳ'1c nCf@rNb @j۶m2(++P1c7qFRRҲeRSS+**8 b M%VTTT^^^PP@1c1c .1z @Mc b nJ1c uSb1Œ)7  ,1zh4k999dccF%VeY,UV[fAAA1 b 1+w֍10VA\Yb=VVV`J X1/!!f-[p10VA[Jlƌf%V\\<{'O;6 @pFEEqQߦLpA4SJb(XjՃ>h0dC .1vE2Hz X1pM锘Jy,..10VA\c5ɔ.7  1gK *1@M{1c 1J @(1c1b @1{ҥK11pwl1c dHcl ^~A ɐ @Ucf`@2/@ @Եrـwb @\#===//l '''33Cb @\d2EFF='[,11j)x11-!**JzLfRb`498 b X,1 HEDD 2#b @jСCe^b @jמ={:$ ,,Sw1cwWbl@Ibbc={ b MxlSw1cRN;@1[m۶Mfeee c1b &7nHJJZlYjjjEE@Ċ 1c1b Sc b %F1c)1z @Mc b nJz=fX233dcc%T^{-222'' b `ԨĪ1Ųjժ޽{L"((10VA\SbZ=f4_y啀@nݺQb *1+K̺ʔ‚:L %$$̲e:n@@'%6c \+..={ɓ'ǎNccc8` 0VA\cJY,eSVz !bbb10 .1vE2Hz Lp*1kzLTeqqqUc#%fd2 9` 0VAcΖ`Դ(10 1J Lp*1{\ b `.]D .X1pwl\ b l`H cl`HUcfCUfC`0`0ccl 0 gw6!\ b z&)22R1u6o>bp`Ԋhǔ@vvv```||<Lp*1@mILL4 QQQc2\ b P[,XLL""" ‘\ b P*؎ 8p0 kϞ=Ʃ;`Cxxc` 0VA$11Q={r0 nCfLp*1[)` 0VAj۶m2(++P .X1p7n$%%-[,55&cM%VTTT^^^PP@ .X1pk)10 .1z Lp*1@ݔ=&cnJ\ b P7%VX,rC2UcjS=f4_{Ȝ2UcX=fXVZջwoIQb` 0VA\SbZ=f4_y啀@nݺQb` 0VA\Yb=VVV`J Lp*1} 5lٲ@>1:&%6c \+..={ɓ'ǎNvccc8@ǔX,ʦ***VZ Cc@lJŋ7ʤ"##1 @\c:%R(1pA9RbL&Szzܐ 1@5{c 51J 1cw%1{b =F1b t%1{Lfc _f^~A /10^~b x1`6Եrـw1kٝ dffr1p=:طo\oX8D@Ԋhǔ@vvv```||<1cڒh0d6 %/ F1@mX,c111c22dG1c5tPvmW1b P'aaa1cwWbl1c7ILLTbgϞ1c7QN!N1[)@Pܺuk۶m .LCc4a $''s(s.]4''119g͚c\FjÆ ƪtӦM3gΔ*u/k1b @}'yMfrLgFӉw @'Nx9@#bŊ[*c GEEE'Oƍ?3^b ƍ'NWmܹ.\ @GRSSD33g @/N ӟྐྵpϟ}ٹs1c 4S%%%*˥ǏСCeA+CBB>Ѽysݤ*[[|yxx<~{MqȑÇiӦUVÆ pr+W^x>88xͬ}SN zQQQзoLKٲeKdd<]mr yeA_d`#i)U^#DH˖-/_\y#G#U7oOΒlٳꦼl6m$`0(˲Ո.](o)u[|Uzg|}}Ҭ#{{i탬 :PUak:r@ԍ cǎ#ЪUzJ͆K}NyOʖOp9c:*??_/eW\;OoZԑ11QŘhl׮,뒒eYٶLeݦM& @udiwb׮]ѲM7ZhawjĘDH<<<7o.}gLZ;{8PR{bi탬_nʑܹs&LxG|gLL6??1c3V' 7QȓUc1b @D Zo 8pƌʇs'˃ rpMYXlY~~k 5U#Ž?aKQy:t'T>̪ua9r@إKZl,13c#GDΉ'59r>3V'ԑ}QPKYs111Ęl6I٣|뭷R?=qDjjٲ̪Tc̑,wi&t…|ᇕ8kO>),,!EzJY۪Z'QjD}{2eJQQQnn\s11ǘ[#G'(W~!jܸqo=*7Qܻw,'x2aÆ;Og_;v$bPP… cׯ_ v+**jݺu#3]Yvme;YYYZgS ~OUiάZ@<ƪ< /͛7Wd9y򤺚0<<\}:>g-99uU^1U'K}5._c1b @Î1(Ϭ'N\rEzO> n2eJ;`mΜ91uLdTVwѣGݻwl6a 9ͫ@@1 À1k29ÇoڴW?1 0=X,1u/11Q=Foټ1dZx13T)Xnhu @/-[sN@VPPb1b @xb2h|fsBB1cꝊ9s|YҥK'Opu1b @=_p{1ʚ:u*1ݭ[> 61sέ\211q޽1 ѣG-Z) p%3g·~h2x)1cf^~A / _f^~A /1:gX.\XQQ/1̙3sssSRR1 clp_)ܹsx1`6x1`61 cl/@nJ/1]|9++֭[.,l933Snȓ^~A IѣGbbb^^J̩3oCNNOx1`6&dAF`\\ܦMQlUcիWPbhJEDDټQV1孰`/!!!x1`6&cAAAoܹshhFlvYXYYVĞrGx1~N+{Èu&''s4000<<|Μ9'O={lv͘1̙3 ]v֭1I 9rΝwKJJcJY,eS7od~$Ʋ>裿o;v5kC=$UvIc5~wy'::zӦM:^8b@ظq{*W.**zǓ8n@:u /ڻ0?J3B4ABR B.&9m" AC487W==ox]9.x'LoO&noo@? *zs86󗗗x!a֩|q6?φ+zm}G@Qny|WXX(v1U1@J??Ixk迠1I1PT\4zפv*J(b@b`îMmd_ޡC aRm}Tޮ$\RR1=1PPXХtד *3y9}8m4:?~8eb@{b`;| Xo% oZ_TG;UC߾}L"N}A:q$q߷'#=b}̙b3+V7mڴEJtˍ о}{'OZ֭[dIΝucǎ {{޽{8p@ uO tmɎIWXTmŮ|8;;O0!..cǎo.%//H$EFFzyyd2VW^͚56lۧNjhh8rѣGqLMMsrrk61=1к]uE!R :t v;}ub 11;v %1 ,ܥK777~Jimb@{b_Lh뉈r2KMrI ]fڵ7o?m@ uO 8vG} mr;4iO~-[.*b-KWz&f&/ mW,?&ɓnݺv':t54o>v 1uO :rcioLٗիw3)711!Wɔ"GahhhaaajjJCCCY-P{bGw<پ+ff8[T`Ŧ^ ˓d酅⼺ RclTh<(v t:)3u4Wi/4x(b@b_C'}gH |W/S=RWŀTxxxw<KE' t:,裏?튟Wn {!j#7ݻ7b AP/tљ3g~:tx/S W| ]b@y8:(b@%@ Dذalܸb@Q+Cb@%@ b1@  t˗SrJqv={V EEEqj ӧOS'Ndgg ]d2.:H!CF%N}M&NՎaÆC rSL!`Ϟ=FFF9997i$00W>|Aϋ r ́ ;9<233Zj% ×D[1p9899 qxy1kyLYtHǎK9Q듑.Ϋ5@ e6m8!ChL.>ؘ-ɘ2eʰay agg*0֖SFdeeYZZivwõG73j:HĀ^(Hװ+0 ˋ:;;wIaԩx'^nnY:HWXή[n+W Kcw b722_jUEk-7oޜ2eqqb@)n*נA㭬x؝Ā=EEE$6ZnmnnN Dΐ:/A2U3:Hy@AAAAA,=77aÆ\ d2//|^Q4v'1PyDeffjJ$RcGijɬbh vLA~~>!I {QF dffjJ$R\y̾ǷϙSY:HĀp*qǎsrr{iccӦMw%ҥK777~J 11cRDf;{f)U 1qDKKK83qk-֭^:nAʬY?[UV ta(?agggvlggקO={d$##EUvgڵ7oƒpuu+ 88Ԍ4vvI~3;"I % Zݼys>!,,:weU+Wacȣ?.- ݱc8[#:H%Ei(illleeeffFuMMM*r# -,,: eY[Må;) Vta]8_wobcϝCWU\B :HĀfn޼a^d2Yzzz|č7ftOK?TY:HP{(..˕ٸ)tٲ+ A ^Z=qAzc^^^|Y\B12C2c%FDlx1STTkJrrV128[nQp85ddd(uXӧ)ĉBoN0/ |(ݳf:/*1^10~x???q*BG)111rAC.>ؘ-lʘ2e\hΝ;:IE͚5svv޸qΝ;q_ddL&%)ݾ}ԩS I<=NǍgjjJ14h"Eݻ?ƍ_~:vHRԵx&?Gϋݻw֭]v޽;к.Ȋ;:: `Ȑ![677 j̋LP/m?0&/;eS a4i >|РA=KpSN -,,֯_(@yX[Tׯw QN|]~jnTɃ|+Be&95j@ff& VZI7 S:;&T}^j&ƍO);v,EÞ;99ذtO?óF ŀ1d``)999={mڴ {׮]6 QǖRJ'N~aٵkGp^)U1t꟞>}*KJĀ0V(u`iɮ]Dvد <`ٱP hhK!a{;;;>}ٳG&Z022 g_]󜁨(уn۶ݻw*V {zޒ)U|[no2R~1pu}}-[6A6mݺg9::B'MĎ5x^ dddP701@AJJ ˥:- QkrzɊg+ *V;w7xeΉ: 'KG1tP\lڤ}IK A YAll,ˢ!++֭[R|aBCE{1@#L||OKKmŀB>j(vi& )kkklْ(XoҤI`` K'>h : I@@&*cwwתU+HPqI O>e;bz2{u`V1@b`ݦL{̘1<ѣ޽{)"@?11cRdccKj@eNb>U@NNĉ--- 5uF||܂^?Yubkk됐S Eb`ä]KsPk3E2 ::zm۶{0WC|bϗϚ垕}g,Z4'&核}A 8;;O4I׾}{77>@ޫ~t҆ lwQQkr $le!aurɓ'˖ٻ1acV1@- bk[nSիW)611Yl$)p:xbͧMƲJ1:4L$%%۷"##Vnn_.$I % HIIaY&Lv$0##^WC"bqء q[3>>rP1p]R_^=L_y\.,IaQ:tиqc}}={(J1Ԕ**sӇK7S߿-_TCb˝971NP1 Ǐ/J$1FΝ# !%d2Yzzp0PT ?~dI@ i}|J։5M@ZZҥK )eq1 %Z2Ǘ g:#.j[[-ZvfSA-rq3rOKf?|P\ebѢE⛠ =f* yGwCػwe|r*^6xU PTT ũ!##C\hn(--MxiUXXxĉltL١.@]ƌӲe˯:))I|OT+f_8umqQPTT rg=+憆 S;;;Vq4++Oÿ lذ[n;x6~OzهEEŀj[_ڐ^^^ٹSN%Mu O߿O>!IPܹ??[n+W Zt)ɡ|w0)҆4"<<(>>~ժU;qu )ʰ0z}||8\dff-H*>##C\T1e+V033>22D& HCjݻw֭]v޽;"5"k׮O>jԨQ,ptt'Ć!CZnmnnN3u bAWrƌ:uJII畋<'OV ްa(J^7i$00 >|РA"/)߹sA˖-cY7b4IJuEH"1Py7Fff^VD"!ukh5kֈ3KX؆kq=@C3Ub 11"cRDѡ4qwwٳ'lӦ vtMu~* 5 m=*8qA\\0!ukP d}+#q^p___D9,. m@ll,ﮮs HCj;;; #ɒc---+(4"=xm޽{WT@PF tɓ'4rAM~.'Q%+Kruh+_eQQH}SRR))rp,7߬"1@mY[[Sxԡ_BC}"q^yY~M!B=w+/C[1@ :j>i8))i߾}:??($$sss ƌӼy#GPG)z*ܕiNb.Y!&L 0UBBߕU95~bqFy9{̜93]zӬUlܸA\Ter|ĈPaiHM)VVVfffjq1p֭ɏ_|1}tUՄKokk+\TP( ̙3`Ǐ3Ka=c?; 2F^^L&KOOۥ7o&&&jW>&;@P17JRW^?nݶ\Jg9v쨸4eE||I';vlȐ!7& .rѣG gT y`͋/¬bJ3gKj|bw^NHщ3*Ɲ;/]>&=233ť@11jӧ;tP?}ڽRJgoڴQ\PBE8tJ<;0L$8zwݻwť@Y%TP _YEEE~~~|AnV\tRC6A FFFV_~rrԡR)bؿӧOǏ/#C)Jf+-jM0,/f3A ,[3f۷oݺunnn\iH?{nݺk׮ݻwY^^^5"@O>5jZzuz^ 6DbC iݺ9Gΐ:A*K 7]Z8'$t?g,X{qqjܼc@gV XXX̚5KRSpO!>sN HZƍs1 H*P"+Bzý1233Zj% C}QU,3*լY\oψ}kbX-AŊh+(F 9Ґ:''ݽgϞ666mڴp|׮]N\;wOE RP'N4003uJg}%N=z0x6Q|s3Y_|Y\FB#1@@gV ?~"xEiHmggקO={HJJ222 W<iii^A1aE$ܶmۻw H +>'TÏݻ-qޓY'W~Zd˖5JU7n߸q(# \BJJ ;:eb@.n޼eU$-kkɓ'+,!*#uT H ʼnS˗/z{ݾ, tΦDκwBM1ŀztm1x͛(B|##:urrcb3f :rŋ)R755b 22W^T!I % "d„ FJHH*:HcǎV%ܟ7;AK}SbV M({A ߟbƍJCjJbVVVfff"~.nݺW_Q_|1}tUՄK% .:A*] ܿuU!m۴j§lQijw%K?~X\Q'·0ϝ,8M% ,Q8Q y |z0Q]{|d̡kSXu ӻ<37jZKʒUb4wy^9i˧۶/D/温lWXwԨGI+%ek׮d+W3TqD DŽy)*] Ԫ'=۽TQӳfyЭ+P]}~ءCSGRhn#3O~ "P-h<=' /]>JGϚH |'֘KCOb^?{+&44 eǟ~c{VlظX%2m^H;haLRX{|k8Qt;t{N2R>sd?,ΦDw4+ꭺoW]]voxsS)3Ԍ8s挓?` *ѧOSNSMV[w-l*F Pj``uRa"EEb{}V)KW^1B1ǹ|Ж`Ť~DM4nlisU |_x-Q[ص?,imNն,fmTXl٬YĩHjjŊFfk#V^q%N<(fst -Ӏ#GܿF((< o]uMm߱¢QÆ bmB-ZC(}VsF_ɩY0]Y:>t"1@G+~@DTrޛw) HSssꌵ.ꭴn]PB>fG|};4ٳZgk{oZcCB}YbgxXH +<+fziXlP mhh;S9`ddȎ57W/TԨz˖!Ҭn>N ~{n)泊/fGz(F^/  1…tfͬ"vs5Ɲv.u?3执w+Sssꌵ{VnjAA` GUFu+WS+85dddP4Q:[#ĉBoN0/U$޽{S5k~bN*U%PÆWbq'A>on1:΅Aqܜ:cjl.]:H~`o$N%6D ۷#fhإLN;uTXX tQub =={όGz|}}ש<ԅ;*CgQ(eOf]H;Sb`[H<=`9jV_z>&MBanՁ4n7qscdtYzlbR?)y/KqrF^ p,6t9Z3gN΅UWl3f֭1H _j bwݺuK,ܹsnvQ\\`oo߻wbM6mѢŀR.]4+V #""tE]\\N<srrbbbPkDxxQ||Uׯ,U%A`^^8xO?D|nf;M\Ph#(o⧕EY\ /p5(Oyz M03=XVY!PKWh?|rnoXM6{tyJ B[zܼaǎmx|Y Qwl] .Ҹ9J~`oL (2^z5k֌۷O:pȑGqƙRN:vHAR( tvv0aB"##LLLd2\[+Jŀ=EEEC iݺ9IaB×*'Nܵk8F]S8dmbV1-m\O)θxH:03kWXes]ͰT֥NNݤA `7.BĀ=;...kvZXXhaa~zv*zLH$qBz&MY1|AI:eֆ;0:X[XvVhw/]6}-=esgo=Pʵ?ND^ v0fCǎm02b@ =PeT!++֭[СC)Fg}Add$9}VI؝Ā]E}k޼9fddtQb`ҥdu<~8h}%kt buƿ_8H$@:"odW`oŞ*[:fS =h3H)xzy%k*sh#oXh&5ȪD/jDCtܣ5.o'Nwc܉m"~q[)-XEN{?:n"a"uo|SбԄڥbt)7/J "2_iO-P0ĉCL. &E bA yyyӅJI;WZɍWgwn^\mVqP ^8ȫ\|B#Gh&Jw}+v%l%>B KDF/R~c2IY6ɲ(40͓edUFz9uƺq \~RaTsR9"+֦m bd ܵWؕ }pTSߚԧkEt;ht)v]V~UVVMTXMP)K~*T /D݊‡*-Pj찲tp>0 *PB5!C?~\Zٻwe~>+|N:%uN矨Em'OF_L_gs)}VrcCtKt@1J1iӦ^Zy |NGH)8X]Ã9nڌ#*$ *y: k)ٺm)%ZR2\%ŒdtfI #˜(77oQf l Sg 3_|WTЩ^ ”ŀΗov7=N"Q'n~"v,6\Megg5D;ޮ]K"_H"OӦAlގ3Ƴ\ST?^yL凎䴻8>E݋悈lwµ-P0ȑ1PI1vYqj)˗/ (**SCFFԹ(Ӕ^XXxĉlSNs:A5:JvH T<|yu$ wT/GUi؜G*{I>Y*/>):@ Tf1 0"A PlͶX6t|惆H[ ͩ3ȇ}V?OZj LRΗov:`Ĥ~6-ZxbtV]$w+4 V%رc[ 17Uʹoa曯7m%I;[lV劥[CE#@/ES:Cs*ag^EisADv _BUJ6 bҩb`~~~TbC 5j8U\.7}q5FldrN_>nw DvLԜ9jԅ;*# ,b_6MYSVyJ##CZ=5AJ1yRsa>X]7iIu#=;SP7)|!ꚋ^ubDӅvZrTW0ѐ6Wwŀ}'53i S)W9]K7j\#*}*dJ9r$K}...'ONu.]ڥKGGG?88iӦu:K. umʕB1C{IQkDxxQ||Uׯ,UNP bС\.5֮^w'*.GS㈹yu3kDt0Rd**7f!GTXq^ {|G[uD ̕diI V1PA /ܽ{,ݻu֮]vޝWi֬ƍwI)⛙QH///L ܶmۜ9s uؑR:jР H=b{'HXF֭% j G /))IZp!M]lzzɬbDj6ܩ[VlqLF?PB+hzg REa'2 V1PM X[[յe˖)b ِ9UeQ`ݤI@^x bT~^?0a;VPAAAAA,=77aÆ\ +Ps %;kժH$(8T8q}ĩuwƹTˆ(Kg/[ca w`Udӧ=Ur V b$M =ݻbbj主ƦM6k.VeܸqJbb"cǎɉ\*,b~ر:1p9r(\YV|΀}zuZZZ j G ЛqFqj]f7%3Ǘ./+pVL@ޭDhc..|xwyL}=ʖIA!>E<+|k܅?E]Pl[=TERN 5o{ВY[-n"2uo :tx4{WL浈^ȨQ ֭)N1@-\8_?zŨlb` n]Fvvv}ٳgL&KJJ222 gUxؒ)}s\Q &8;;cub !!^xg~0g **d@tt۶m{]aJu . qΞM3ǝ )bEܹ_;0XLĀh߆2D0%?]E .]:3BB}?KӦg\)?k7~y*^hܝ"Hizՙ/.?aЏ>jddHQ/JK2SԭPL+TZD/`̆J֔UX-@7mڴ^M tҥ 6+WMNUׯoٲ `ҤI<빹zzzwY-Z:1 ˭"b+ yxx tX'1zٳgS>>>i1$. #R>"[} jttY#>}_bkp,]ˆuƌ3]x:7@#[0uC=nMkWXj\ N (5Vz~ϦDҭ(=X1M.fb5mKݟdS[fLe+R*©9Wx, &RC' !%*Ӯ]KpL\ubL/JKBA FDagY#)d.5M_$t󞕚~btزespNrM DTJBfvիnܮݺt6kfeggC3 [~GNtEKRR1ҥvζFt7)C/דv3*Lw)>!pSSk7~X1uHM-JB~ZzwҤػC9gPe勜~Y䁅_}KWG:1SF?秢7 I JuMH?h?Om$SUv֮[(wDB|iِ]IJbZE 8qh4(8C7gϞ<ΦP̌Ꚛr|ĈT, b]v511W:5Y(3Z8sC8)Dh"q Ӵfr5RjjZ 欤-SLs"poYZ͌klyVjj'r'''x*lBEA; Bb{yyK>TꫯKS"b,SKq}ux_`,ӉVvM!!"Go,N :;gD w}@ƢѨB~IJ>e+lHj?\#t'п/i|jV#] KYV(֘0%,X?wsI5nËdgg%''+v3gΜ?^Ar>&gш?[0JP\4sD{\[fdzz$lҨEnӁQ\"?pM@@ȝ.I:w3M;ƒN:pz[P+REQ  6( HhR߾CiV#] K4[FbXbOF #.]OJS:ݻUõCy oF;>n.QߢO3M!QYHD3`?FMQj.]Ƣ{<"Ը&Vui{ oW_ ! hG{?Wb66<-Y6i"7y͚Wz%N~HDإQX0د]d낳FIJ*4:gDÕ'7"X;U撤Fa:ɩ6.NlG=iV#] KٱsuF nbMFzb ((hy/_޽4!%&?R{REkzVG|=t??E vgY7#ٗ.fanZ chTö5ufM>۶ "]*ČۑUqUb$50J 7nV7onTTԗ_~)۷7o'GNٳd^{:E+>=th?|͋/ʿtYHv7v(ڗ_}@gKrIиU c[$bJwQ. y﹂U+1`4ҟ#LR9 ^8Q?==mZZ-r ooS_0fwA?9s^С-TѰ@OO|ӧcy`oHZ5ŀN:Y8<.uEjQ*0P/<n޹oOyᅡ6|"/ySŏ#O hTGFs?p7|IjifF 'd[ 4{}sǕŀQS 1{yyISh7ݾ}N2xin~+}ߒ_]zNڨqo=}:ЍZ ߙӕ"ux$'3)Ccp» mRduG}-]nj H7UGFE|d?wc13y3j)ӨE#FCkîVb@73E) 1@R9b ??]vTHsss=%fa7&&… ㉬<۷Yqx?+YPPpرWĻwBDDD\~.˗._~o;@n6# a7 30W"gYj7#]kkkx_& _ܳO@/#kkkY@=ߗT!VQ>{ oWb@^LԷ:G L嘔ԯؿgEX):%7j;q+KEΊHsݻ !jVl-sČբ:|UYl9 ẔYW'3*M: }%-Զ-f!CP(88+77#/Zx+ :T8ӧD5XY.`KhOpفj#KB刁~Uj G!lmm333, h曼<~ FcnΝv?;vsZj_B.qNkJ^JJ7m-&v?tHtGT<ۑ`S5k$YE[u;vU"uO: Z0;(6X1P,j+W6l8k,عsRKPb@D*y=# wX:*G ƍKL!… ."uv ÇW\C_4MR*">u9y$+Y|qƟb %%eF$J6rۑ`S\ł-8xFĨl2iF(-8\ZQK+VͶqY096[sFI_kgg΢7\%2Dlݻw_f aBpm6^rɒ%< ^gܹ_~O>dDDhl1rM6H[[Ǐ]^-:"s]~=>l__QFɣm. :Dɓ'_v# ҥ ZY]̄7 y.o*̙viV@7oCfq){N,{zzb &&f͚<=++922f@)[!-o$(?}IGGV\?VʢI #NB}vį...GfY,XKdzmtmOo߾ 60 3g7o>iҤ Æ k׮DO4􆃃ŋwտz!ncYpؤI Qc 8p@-{FEEu֭GH}v '3f8wߴi!Clݺu޼yYG}ϗ/_fr䱻yb #;,)F$!;xzzBmBYal> - jb?Ÿ@.ܽd2s*AAϰoK^ׯ=ka|Cb=`9iDL^|{>YdԊ-&>~ûqWMlO~Xg}.NMjc'ԨjM27mуE^:[2o).HQ/\5ֆ=J/rss.]"]v<ԭ[wټC!ǻ)))bX 5b:ۅCDlѶ=pzPǎ޽{s7k֬[n](]<>t *W,߳g}vvիW1IIIbtO51BBB~?M9r?AMg(bx{{Ưگ_? dflU.Y[W\w2M>$30ɛ*z2A^]>ަML_bOvmܸaBk`yyTջwĸt>nuUIF^ƢƎTgb>ڤsj (HHt8ںDbܹs8-¯ uNj֬ɟ0a3YSFϲm8 Y%7qF A dff".xyܹ}͚5Co>_|Ou 8j#C{#;,&4i"N@+4oqÆ ,}P]C ܼys8 ~7IIQ B1YT T2yG[~rg\pe,rE|p54[GG%)@(gǽ]=yhŒ%P}r)[[Hi+V ĬUV-xuw扨GtT@/L̺}KmbSRRJ`0B-)((f p̡$J2jЧfkk3z`=\\5ύ]wo O:ȷ[xW%=aBby~Q zנ3whԋm~Q/Y!J(mþ)~ڏ/v ׁ|W̳8m7/ 0\f fWk$Bեahƈ0`使 mk5 ;:wDl&$/eFfWr1'c=!/_9 o7nܰܵkOqss?7xguI.^jee%b/18shNNBI&ϫFcxa??1cư4l={eaL p ڶm;e[ib@c8r@ӦM命NCZVNw$a=KbЯmȐgf U+WN/6.sr䈓IG0~˖-lwС:t`3[˗L' wBKPȅ+Ayާ2a41裏D?G$>|(;xgN{B8gsՎRKV:1S>p~N;|,ߣ}7RSZjMqUX1{?R2rd̙U3 ξ/z\i@PL9wŵ_:ר4YhFr0W @v11F돚lI?,D/f 6x4i$4qپCf#5A. C3,,aX]|_ތs=*xyl&i$jb@iU@Lb 55(BvcBmlljԨsωYp`w.@g֪ИnHXӍEŀd'FzJv)k\oqFA ~?SayxYqɀmCT~5ըȾ+F]fp0 `ΜլSO>94hI&ۿcFo$he̙3ϟ7AVbbRW\Aͧ/ )))p1{N_/IKb*M 4k֌Āhxg_{K'bw;j W+LQ hgo#Ş2Ch~[[lᄉݽmkt\C 3f4kmBC[5ɮuiyz{ŒDPPM8Iđ7 ;`^׮UTs#1PF+⁦@Wiy9y"f6UV <==kԨn:CKJI;lgggaK/yb7;088+77;;;k;2O?$M5*-!#+/{$V*U(wF ,^/^jÇ]H A9}lF*"\1+̵P`` ~V& H =(22H ;%!!!^^^]t9r$[(+WڵիyyD䈃}|||}}'O|ڵ} Yh["4ZRNeff›y.oHdd׮]koo/0rAeQjPC$Q|X˾/α-1h?7}Oͮas&_Z}y%z6o8/0OY;k7SDlSkg}.(ZLc>2=BtҨ MTlG|-2rG}v ߿cǎ3f;w`6m:dȐ[Λ7*::hѢ ݻ7**[n=z(>8pB 4l000pРAbM4y,X3ό5 A9KGb@%T4G,0lذv999b:C" 1P =!#d{ĀdH&_@K:uj9Ռɩv`Slf05Ԩ5w!Y͜:@k۴iW}ɮ7LW7kg˫Mg,Gҩ޽{ WLUX*4QƎk$b !!_JJ$qsǎ n޽Ǐ_H!A8޹s'x{X|1ckswwzں~V;v,vLѶ E[RN͚5Kccy.od64=aEPb"#{P:Ki_}$$FºgFDJĀb|8<Ƚ{˫ݲƢA bzΜ9huT+86xȹ-d}gf521=֬*$hґQcx/k֢yE>MX0(.9xp2 ״w|J_51#Q#)r77bʗ(6/֭sᒏ6/Fk|cY >DQjI{G>p>s%7ԩ'p`.sVfވ%N~)vKDDnmےX "cJ:5C3FO%ilz_~l 57rG0\bŀjժ<11 {v񁁁lۻO>{쉋;uꔭmdd$/7x-[D9=z@϶7n³V\ % h*y.oȁpE8x erIÊ3 mbK}=O=|og-aaØҏ;59h XJ.|P_~y$B7+WCξSmF-[y6rXA۳YYՊ5j8p[N8X}kq4TxuoO+Y`, r"ڵk2{:g^1_sDq"vJ#0:zq*4nn%"WquRm=5j4X4!|`>ΌWWթx=sl+(h4~wH ;%m۶2eA=nNKK}Y "jذU!Y:q֭X6"{kD02lg )>#Ŕ/Q?S 6mꂖ@ȝ`dPX3kcF?rdQ&>ј(kguP{"Kb%׭_wՆKmԨ`ETocKB6i}LJFͪJ:5C3,,a5FIlF_iH ;zݻwڳ҅._7n!#jԨcǎ␤$T9a4gY{챶fO;wI&ay-S ::s%cw4ۛpeϨe4566V&7o/HSp),D{^ԩ=d\ݷV,iT &g4x8 Fc_GrWܴ[XM٬j6=쓎mm[>Ab K mlU1f~ã Ȍ6)6LCSZq{g)FQ-Tq"vṢ>P#O`!8ùw0PXV믿]M1 $?vQjhgBpoG0k־wՆKmԨ`E:c!BTRةQuFujf j9s ?S=dli7~Ս5:@W 5lήiӦM BX%ʻ CGGG.(|}///"^_ׯg錅 ׮] c(N [RNn6}-\A < $Y Ğ!awj1;ׯpi5h!5kM:ѨWթ5 uQUo:אַ]TQ(wFJJ 謬,i ׯ_׸Hff&JMMܼy>5ZRN=ThܸhN9d-c1;@{E2uIn@&[#X>4߻o-rwoP/"ѧbK4jADY(ʪV "Itm㜴Ǥ!!JDtHv2QZ^| !{dhРM Ϟx周UܡC{7 auyN G-|Cg䁗FJnb=N}hRJ-Xs漂6Ol?;s~|Qӧc<rH#G)@Oh.w!.28\F81^40 {qJ:Mh~5od%fjRxF?rdbxX14mTj6(;}6-.-89RD1yBd6.M̛3|JeC2>=th?tGj}է(["-Q<RʪV @ԭ[Gyx "jt2ޱc{6u{nHo۶%IPKvcde _xa#B{b;[D9{ͭ9x%Q-GD{h ۓYыʼn2#VX ǀq1`49b{$Rtr?jå6:kTk0FK/~7Tgv?xLjRNyOh޼)FawYQb*x8WωH ;$B*G ͚5 Ꮁ~'O+(M>rd.FeA琐(,0ڊ偲ܡ2ˀ?pXwŵD|N(=U0oĂK&Bhx1KEX'@ZkaYv͘c[Y-K~*/?)~q=cF x|M#(Bȓhemy{p_b%XZX_RpH!Q*(*x< pFb!1@R9bয়~jݺ4lP w'-rr͞ 4-e!Z{j / aKw?T$F`9F1";g4Eo4kք#=h???B3$ +DgZw3X\hKߔ|=UVW1L%4Ȍ7yyz% ˪5O~ڴiaL+H ;$B*G zxxHSp\~!fMz; :句jDju̘`zGǟML(sq~ ^Fl Hufy ]ll4pvvv]883Ŗh³vYӦM KKK0H2ƭ٬Āh _G8wV$M<(ya$ʝA $%%Řpk"/^f4U7̙3T|4U ??5UZn9yF۱c222Do'N0:1-M5Ý3O9?/\JJ7n0wH TACKt5=|Fbܩb`ܸqlb>|M=C''++ڵk3F7 2W_F>)gذaG 84(.D啛vzTt=z =pFbr} g{yǚ5kvʕˇ4_1-Qd ܹs^^/P'#f;d ##nFb);w-[;j(}vD힞AAA| /aҥKݷmVPPxb^zWFۡCЄѸqc77` JtZZ믿nPj… Q)6а'~gfzC\f(233:$.&A1vE$22k׮竪1rɓ' $M5(!{Yu3N @Ϟ=4iiӦ;vLq|5ãg͚K"^yDcƌnXXt%Kpt®]_^=WLLLǎj";;[.J 8ޠll?gϞ~Q1wP:Y& ]\\(Zs??hXz]vNNN!bAšN*G |8f;d ##nFb)@_EZ~{1bСCYIݼu~ ,`Yuuu1cҨˠ"Ml5 еkW={lmm!TtV/]߸qv\ @<@EܺuQd*RRR,--%"P'# ^~ei@g( "edb ,,#T}Μ9A|@@+)>{ԩ|e-Zx5jԨg}mb@.2eJÆ f+V{'$$Y՝;W8+ c„ 9111bAšN*G @bHf*M AUEĀ9R6bݺu㯽:_bcc!11g!gۢШˠ"zk5PT \~~7nppp4讎ŋXv1 ni߾;w\E:1dɒe˖IS͆K4KKc b ++jB)---xߘ1c6BvvF]رcb`itРAV_>Sguh]x[ʼn-ZL4pf!HCѡN*G L>*M%  ҋY{ԩ}K0tP즥a{ݺu9²߼y@.hٳg[jBH}m1@4S|I:WL/CCBp1!خνO S, mnٲ% a˖-XE:10jԨCIS  *Lb ''gȑ666uutt+VKj ֈԩæq -,,e^WkYc 21׸qc~ ]PʝPPgb}vXx^^^uR9b駟*M%  5⒓JDJJ @*z!14#ɓӼǎ]%''i;*^ o޽{  ꨾b`ܸqT%ncc\V- ^zU*I 5Æ ^} ^z έx f{yyAzz: vw&*Z DFFT  Jbo߾U1 o5jTH iaŀ|0 W\iذ!_-00sΒ%T;vΝ;AADR10w/[wԨQ,q툉===7 PK.ݻw߶m[AAŋ}||z WFۡCЄѸqc77` @^sqqơCJɓ'_vE9ʕ+vֲty %@.\Xf h_6Xy!@dd׮]kooiIC *ܹ?J3  *bgϞM4 ܴiӎ; 8Fѳfrpp%~g򊍍 1c`7,,1dk׮׫W/++ 111;vDtl @yȑZƢEݻ7**[n=ze$}pM62d֭[͛gee2Jo5kքf@: }˗yI9!E  6ڵk. C *04  jJ&n]ģx#F :a(,˫[l0y@`]WW3f]! @СCx=fΜK2|#žh;GI׽{?~,Cm @Yfݻw_d {'33sڴi(c!V޹s';D싶sI_pٶ8w| gJ࿮0&Llmm#3%TXvرcAAD5db@9xwʔ)"""%u_o:t`Cbb"BD؝mF]cBoo>}ٳ'..ԩS,KlsI_Əȶ5ŋy.$Dŀb 8x`HHHܹ#) w(۷===SSSAAD5b ++jB)---xߘ1c6b'm *rZZgϲ]l`WQ h;b Eq tm׮]<ͭ@NNN-&Md?Ԋ#w("Āh1bĻ+    44a(ԩS퓗T`Сe[#GX[__7oeP oݺekk|r)4sE1`P($-4#((LJ-d &M%cw8>-uԲeK–-[ؿVr("ʕ+K3  A@NNȑ#mll֭舿+V(שSM+ċ%&&@$Z^Uˠ" ťFR5Āfzzz".wrrPg( i <ˋ8;PR1/M*ʦM0  P1Fvvv\\\rrd+;ux:/3gΜ?^Q/~?0RWiAAQ(1@<6ÇӧÇ 5v؁BI  jb̜9cǎUΝ+?>:obAAQ=!1@- Rn,%11'd?ڵkv:lذ#  7$BիWp1޽{۷߸qIڶm/AAHJJ1*\p%'OQyyyǎ]%''i;W+b(Ӄo͚5H{$  x b`ܸqT%ԦÆ ^+''>vvvlNK/VVV<x{{rssnzz31_֘h˖-&MAAW Wg\1 "_3[뗯عsgɜr. E_͛ݓfAA%s]~e|}}Goߎ3((o%7l؀]t޽m /^ӫW`Xz5:&$$ĈƍHMM5e( z{{5kֈb 33СCR\䱻Ǐ_vӧ%-L _'LLLAA%={lҤI``Mva05j5kC\\/H>{Wlll ƌݰ0GGG%Kûv߿z&2 Qf͚PHtqqbإ;< @lk DLgV[̙6P}VAA%| ."{#JD0@Hv֭LF/XeauƌlW|LH. rsspҥ,ƍkb*BccyE ÃڵԩS.,Z ?,ŀF]A ;węP @$4&Lpvvr4/ 1ڈ#`btB-[l֬?,=  1?r"o"""%u_:t` ℇDߟmb@. Ë/t0p2w.C00pĉl[.btILi\vzj@b ''Zi6D谂 1@Aa^ PSN۷O^RM Cb7-- ֭6"JMOOyfAAZ]HtppXjZ[[GFFLlW_5DGG7nBb O ={e?lbkkˏUtXA  0C$rrrFiccSn]GGG]bx'ԩæq -,,CQ CBBjժDpя?xzP?5j)lBaƒⳗ*: H AA!%jdgg%'' fxИS7NʹsėAAARbڒrJD,f  3a^^^nnnœsJSAAf,  0CH   0CJ/""">iŋYFIRRҙ3g]͟?ƍTcTpIɓ'wر [rr'$9aAARz10lذѣGKSe?ƍ f+Pא!Cjڔٱ?lc4ʊ'ooovlppWnn.MOOwvv~뭷xIEAAfH剁}ꌆĀNJ$Dh [6/vYTaAAR1PPPpBooݻYF"oߎp3((oL DDD4n-Djj*:Pw׮]cߨO 4w 6\k׮~~~A9rM^rcw0"##mmm?vZ{{ӧO'$  ̐5k"G܏Ņ5j@Yf988ű,&bbb:vld-Z޽{u֣GvZd0"M2d֭ͳB<3g4o|ҤI2,! qWy@k } *'$  b 77ҥK7j׮{#ʶu>&:S @]޽{YWC@hs1E<bii. AAf^1p9$?,,G֋/P{̙3f@+!233M=B;wt[XXyVNj֬ɞҏbdJ@&Lpvv *'$  b 66ŋy o&9)S`4Āw>}w)[[Hn1 %tݻ;::.YЃbƁ <Ҿ};w'$  bƍv)nnnL deeYYYm޼<ĉyzZZ$ٳg.6[^bY_|EZtNfPc0MKڢEI&,4c   3DAAA>>>W^%K 󡡡KçNڷo$  b !!!rJJ$'|RF LbyAAݻ!֭;{l(r-[Qxb(|L]"r  3D{n5k6eʔ}'wڅ؝ ^z;1 aaaDXyѣG/^cQ^c?33sڴi=B;w*TjуwRE^]]SAo"{ݼy3TSIJJj}_ׯ[rECC,((P) QQQg{˙ 3eeeccc) :N! Ge nZZZpp0M1 <}T PsI/ٿ??I0 IL/.-Rvrin!  JlWoJII1CPɆ7o[V6eŊ=(L+uqq:;;0`ړAPP=㏷lBaۄ Gn;ӵt:եy*40tttP'k_j՞={dT0Uݳ<___?FmooBPS~=O?7BP!kÀN . T0oB1*dmHOO͕ZattʌGIO)[JGFFܹ#ϱ ABP%k֭[8 o`p~a޶mFD׳:ŋl㼧 ! a`Z)~'~SSS͛.]:22;(N*M! te˖%$$O:uJ1zcǎׯ__~}pppdddMM k驨?%X[@޾}ŋc ! dyݻw믅)))7o޻w/mOOO;;*]23!H40@={" .899Uxee%_ x kw Q (//2<<,U$UB(,X{ib_ԾvعO\zUl$B0 RWoJII;(N*M6 ݼy݅OZZ$&77ӧOxCä6JKK׬Y-PXStjvVB !kZ>VqBTiaJysR=jnrrrd CBB3-Y6!ىhNIAHK' a@&J}}}088Hcį M- a@` ! B1*4-a ===77W:iUjkk=zd4=&tqYYYϟ FGGRM%ZwTWWwwwSa@% >K888225   onnƍ7n \zuVVk4-;;;?sIiNSO?~q;ƶ*MԓJLLܰa4^[@rrd ibΦnfX:$Y\$M|uf~t߾}p쪪AQp TVVRL5v?kkkOKK EUh֭[tH֮]*,C_>00TPP Y\$Җ-[”Q (//вdɒaY ~h4W^W烃׮]vIO>yyygZ@WWWS7~'999ݝ* @-**)  ??$՛S" ~ T[}JJJyLLLPPPgg'm_tJv(66ݻZo?~ՕJϟKJː橆_onz=22NMAE"tj lהbN(jӵ'Zmmm8Vqi0BV`ooLfggKn*vssc(xyy988g $[;;;:jժsα$eٳi;wxJǏ)EP]N'oz k!')t:L̄a@̡M,QGGQ|Ooo/b`MfFÇo5Ta AP!0B0a@% ['j\mm-{ ZFccu\VV孂Qv =z$ ȱ-TWWwwwݹsG֟cZ a@% ^?U۶mtuűGٓw}v(''J#GP~!.+}]8}4U?kVX>[9wܭ[_}F>^UU{Q~q2h3fP`ANxmll000sL(fPekwf"}G .̄VBPݻwz*awE0T⇇JBhnn>ԓJLLܰa4^C! e9s̟?ʕ&ÇZβxboܸk0SiԖ-[ض0P|Mh3!!!:þ}<==쪪v̄VBP~'999kZGQK (^#SVVF1<66vɒ%Q 0B4իW.a`ppڵkPXXΝ;iӧ4 item : parentId note "Indexes" as N1 note left of N1 name_idx ON item (name) remote_idx ON item (remoteDriveId, remoteId) item_children_idx ON item (driveId, parentId) selectByPath_idx ON item (name, driveId, parentId) end note @enduml onedrive-2.5.10/docs/puml/default_sync_flow.png000066400000000000000000001065021513710110600215330ustar00rootroot00000000000000PNG  IHDR1c*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxRn0+>(Ҥ|IZ\";wV9ņT#I葳enևF &dTˠ=K9cc lI056öi R2vLU' ӕH3TzϒR'Q+MƢ6"b97Uc/2{9VwhSJ#g 1š'438VWs/>bug8eA  ~ůGpKRi%2 <{󇑕;pq-O! -AƏ)[11%--NQj$j1[\_-&@Dgg:] /S13X)zS'^5bo؋S2p)bF%x%\ƻ1aNm1bo&.ovC޼IDATx^y|s}تjKiE{Jԥ JkZk( HD +R{PbOEqKk Z$%^973sf>dy̜9s=3z}߾}qqq˗/C[ b.Spػx s!bsEuNO03g|7wTU/WA{/UÇ/^*VXɒ%/p*.-O6Vu&fRq̙M /]TW8h/1|U}.… ԉ֭]: ~<2 +k1n8˗Δ<e|#kڶm[qX*j[[.]8vE댭"""(C=FwL 25j$fRѩS'# S)h(**:u*R賅ǎKׯСIg޾}{~ZhOkǎ8¥j=zh֬YV}&P֭[)ı<5?thZx! T~RDXti>k:_'.3 ޑT-BGӧҚ7o /Vuke:O||>K/tYp4Q6qOcƌqE/aܧi6(~e7tС_)`8zt҅PPKPcLA;vd:OJOr???Rk$tyZj2j(Je`Q=(X vX5>(mEc[nMJ]vitFC̘1K ,z(e˖ 4إ{N͛7Vه2YLJ:TSRRXzzz:ec5* -Sm:y m )c8^(b|B̺}emU.2׬Y3uh9--M^ߑ_^ՙZW^=#5;:iޑGpĝTi6(J)S x'X* % Jwu]`ZBT.: X9PK7VW^ ;pbbbحb"~m`}Z(qJ^q d"mٲҥK?W/&Juvك :_ +WU0SLBw믿VQvm1k׮Fyvޭ e:S눐ÇرCV\:Mt.ƪR|4u e$''йD)UUXgD˫Wfvԉun'm裏h:,|_ 飆Tjp5ڡ.4hP:u؁qMaaaZ~}jԁW_}mb[}wX;϶`ꥂIj*V&LhoL^f ۅsδ@ ++I|w(l6lKފߑIX׸6CJU]v#F`Nٽ6wu_yp46]Uij e~GX*Xc%KUd6Rѽ{;+~9QJӦM|l+V j=':uM6^O ֝\M6[YhXΗl S>/d[?*-^ %iu„ l4l2UB5:G;J=Tpѣmpw4xUVs=NA.^_;:Yp4DUS$6(ʠJUQ/1>> *^T;+?I~gZMHH`\U}Ag7]UpZ&O~HVz-8Kϗ?v%nܸ9ΫwgϞ}1yꩧhQ}vP:ʻX tğzšn gXU^2tX웾;όTM -ҸI#Ggt7a< Ӆ:{MTVa%PCcҚ5kE2e#j(v(?gpUQםjK&$_ݻ7^oƍǾe+V:7Ti۶#ӧOD㛔GݱzKC'B'.ӧ<>32Kg> y[nG;AGi\'n&} *h.^;HW>f:_8:i1JptqIUƧmP7wO)˗/)੪͛ ӯ_.n+ݡTP%)0Vu?z(O7ΗJ=(BOoδix qÝ;t(ǏO؃D VN8нjuKiw/g֭˿TUXr%}0RW񅚸CZjҤ }F UIa*U|'6@UR3lC PUPUPUPUPUP+VL27n̙3wiՋ1tz<s̱p&`UOTÆ EEcǎ8 T۷o$}{  o( $Pp8CNиqc~ 1Pp_]s]V, 3*o6OƸq0-it@U233E9MϞ=0(h 3HqqqF*UTpp9 ?>3zr/ 6<3bӧ8*99ҥKDRQݻaöl٢8={v>}|;v kٲeQA*\o߾={3gK\bŀvJ`۞={O+YD>ګU6c #̟?_{)HUBPTNӦMI,JY&5~-_M۶m]tԩe&QNbus*0h4c2*PSU[nQO˗/O}Y)8 ҥVCH?#6T$Ti:lYT%⼪4Tnh@|(3(訛P`s>2U9sf ! O uIqZzu?F ++hy ZԉP$.*PgU 뼜={FX$+_/dyùuJ rԂ@U2*)駟k׮ܤIJgyQN/RcTѻwGqLUF6#a-ڱc:G/rRUwիǞ{+en:p1PA'/SWӿSŋpmƩSU)WAO>$ٲ JT%TUiii͚5+S 5+h`S;wxO甁stt4۝*: 4hժ)رcT~ sdXԶI̪dIR/y@p^U1cQׯ_lٿ!bd^ DGBZlIm-GѨv2e[k>lưtM6KD yU)0+WZVUI1U?#{n@fffjj=̢hGU'K} Ka-哚M/z1S}ĉw@U2*)Nm.۷/YDL-|&L _ˀ;'0 Jƍl-+"pUIyfawP]#2",,L,AHHXA>P+}VZ%VATeO<)V+f„ o2֭[Ǐ/=pX ʜ젠 ?ϟ/V;P)VԷr78Æ bbb 4@U-y u։U UFfffhh'|¦ 1s\ P;ܼy3D >>>bp@&***11~k0C XT,Uˁ@Ur*`=P XT,UˁdggWU [p XeWժtWp X@nn<հaC><0bĈZjWyGѣׁ5$%%p@"U4hPz={Yp XFv5jD"U7n,f-*`111;vq@3f3P{VZV**`%#Fh߾=S $%%=䓬KB*`1ڵ#U: XLLL ˁ2/_^|95숈R7Y,^ܹs6U5̙*K"NBBTIOOzjTuqƔ)S֬Y#6pC0AAAM Te7gϞNF_9o-(L*[~:yڵkbEn޼y Te+SNEaƍ7UGRRڵk2999Te!!!yyybeE3gwPM\|/k:(DFF޺uKj*X|)@۷/11Qj*^ׯGEEX Te3fx'--ʕ+e8qիW{<&""" ^vyȑ;wshSԮ]^UJL'l SUm߾=..nԨQJ 3F ըDa?vO&QULL _]zubRRRj^^ٳoرCqʔ)ӻwaÆmٲE7K}ٳ9stw .44{I%3tW^yVĉi&˩HbSTi&mQ+V0`@׮]I,Qv .3[n_+`K/ 2ѣrq` TePM*jl /7,\gJ*Q \f (K.ҩRcS t>|,;LNNQs*u[ĖIԆ2uFUͩƩ[իԉ;te[\9~@R, =QT:E*pCU 6-ZdɒoԨQ͚5S4n}ЪLV\IUI&;\Uڜ< 8u"ƍGw^|E2 eiشiSH 4T% F: yY.} UTe8ŋa-oݺYQG7NmXHT$nE̖OI4,RԍMnEQ7J*.\` d[uޝTe z&M3@U6UلZn}mtR:u ʞR3CI"<̙3lA#ŋ-[F˧NVZ||<ۤ+U[)8uڱcS~Z^xgTV?H>R,~~?V]˗D*lU(Qۻlٲ-[>}zZݻwhтz є`SΝ+CMA4$=҄94 *V8vX+UHbSSnݺQ͛7~'رc>}hTHYvm ;{q!%*0U3dff[7OzzzZZ:Eرcb9q2NC9T3|EUm0 ;rP @U6aDFF3fƌ]tޢ%=&f͚p˗/-&*gUgG(i1 B]&{QUTe3^-Xy I ^Q͎C ݐ &쳺uo~ذa'O#p/h ghg P;=w5tPgJB *nݺ{\U 5*lCU-Ygo{U$`۶mS||9oooaJUVÇ_f IP;Hf P;=CժU6m:| x*$$͛77B \Uj'@U6Uل窢>}Jwk׮+Wرcׯׯ|֭[(u1+&t W$3pd35Hct2e\x%iӆJa{TePMTCX S-ՋF=\UIcB!jƳfz뭷h HC6d@ !d*!XI&<dj@U6UلΜ9{LRc:u*SlpZ˖-SRR-Z4`j48JV8C6lz;z<پJ~H4O>LUP!P @U6a*c +WfMw *VMR t;G6=l_%?$@vZlhT% U}P=&R59;I@^^~<͚5С[0P")\w538*E D*U#F;꺡j'@U6Uل'2E;Ih 7LH>! UinUTe*pwl >&*R@@;3g-Х.P @U6ቪȑ#KZ/*MwNg$[K%]*lUURO?egΜVZ%dP˅O;3T[ T U5|zΘ1cРA%Kdҝ@6>A6"@VGVZU%lvUTejɒ%ɴڴiSj\Uf `ͩH(Ƒh\rv`'P @U6Ṫ&OLسgOƍ)Jw6 Sם45\ TePMʙhHUfMJw6 t(0(Mn%lvUTeƪrrf{{{gdd(ҝ@6b*) JS[qɌBN*lXUpU$$$D*d3(fҝ45\ TePMX*5lUH(F@ u;l OTel3%lvUTe*pwl >&*SUg MOj}*lU? 00s#GߩPKtttff*GeT [*DU~~~AAA۷o#e*U*88X̤T5j0 *T ʃ7*PU111|uŊKIIQ$e@]2e{ذa[lͣͦ L٠[r̦&,T5EoJTRdd5k?G1MAJA{̦&UU۶mˣ;],zǙ?OW4-Vq c65P @U6a*әU5l044TwEe Yt83tl j*lXU3+U\xm۶ɦ+֐ePJ73)JX}0*0V1\UYYY֭~J׮]t 䈸8l ƪ-Vq#c65P @U6ᡪJ(]lٖ-[N>6@)X]7 hDVZsΦ`*ER}3*DUh'B0͠d6ml j*lbƌb P @U6UDEEX TeK.MOO8($''oܸQj*ꫯj>ԥyx@U1uT"իW; >㓒2111Teo߾?~ Nuۀl .<(\t?uxAUMllz&P!OeggwP]`6m?("dddP ~p6)(*\z5&&f̙Tu͍LJJq,=ד?䓏?833So`T[aU!UIxTU끪@Uz*`9P XTU끪@ULU9Pe˖ݻUE鴕P\???$*c=F[ [@UFQV Wyv}:P5jT^lE"OիWV'fu*`ڵ'=SI&b&/CYfp XFnnnÆ ԩTUvm !U_qà ՓK.5 8T2o^jUppplllzzM$$$IAjjٳ'O~e8TAAAIIIbƍb *ʁXpg~Wg@Y͛w߉ vڄ _.6rumܸQhx BBB 4@UDDDU eM̙9sEMlذTHٳgСJLL Khfgӧϛocͥ }ٳ9sX"jӦMBi+V0`u3GK= ƌӭ[7qqq_5K׍> K/ 2ѣ,A]2eݛ.˖-[ɅR/,eƋ:~3@U@U&8f͚-Z8X"ƍѧ=e0HVVڵk,Zs.]to XSG-ZXp%K(^;$#pX{/^{M6dOuK6mg۶mԞdsrr 2_6oGQ"2k+\rKRqܹBZR%EHP$J &S/~W{LpFUM(_KG/X:5Kz ]=|D큚(#99TRΝcN%Q,aH]ѣGe]UisRG<ҩA)2ާOV'*҈WR'СC2ݻ\rLU$&&֯_ٳ,Qz(Pj5唝K)tRvpgTE#:lq0|VZtjڵB jUQcǎ#}ܸq,rJ???J=N2iҤwy-J%KFլYz4,I-¦fLyD4BeTӦMY 1h *xh8(g~VBaDSenUU`*j-4^ =C)8 XuetuEI6y1ȡE*qXx,@*mέ[R dPvSJnE*U.\)Z~~twTez&Mh{IjU.vMd9lpjPUU`EթSGҳgOبSsУG BE裏 ŋ6BzU0P <Ù3g؂;vP"/^@UZj}B;Ҡ]=x~'>L9r_qqqlYv԰k"˩=eS㗗]|9KtSU=scƌQh'''4i/ 4n䡛.*%% xtPM;v,KZ-;*X׷E_fjsÆ dHݺu7oN 42P-O< {C/Aڵki :rr,X@CEr ɅRï,pƋc2TUfyٴ4gАvI wkLMM5zzzAO>$!C#GPN eS8eNU%׮]1cu>q}Jdd$L鬻tBK@U@U&xPOMk ꫯ5Pi֬Y!!! .|22U쳺uoߞ"}:S^^~f͚uЁ-ky-S6}WTv뤪XJ+t6ErΨJ쫎MZidA [ Te Te'2=~;իW>,̆$/x)L]+LʄSj*c**`P1P Pʄ{QPR @9jg_p" Te Te'zn…#FPm7L1QGſ#f)Pwfug_p" Te Te'*]4wg}VY3P)PGEf)Pϗ`ug_p* IUǏՋw7KUL޽{6B?J޽{!C+W`jҤI ! y>>bpo5 8TT%&P XTU끪@Uz*`9P XTU V Pe˖ݻUE鴕P\??ljݾxxTaĈjO䫊4/LT,#77aÆLUku`P#Ft֍ ԁ@UJZnMS Ŵkԁ@UbbbbHUx?… OvL" ݝe˖]xQ.rɓ'Ʀޤ &}RSSgϞ=iҤ={>P]&LHJJ[( Ǔ_.WP@Uv3|I)Ξ=;~_~EЀlŊ ׮]#[тxAUڵk7l VyPdUppxAUDNN89AUDddsĚ8yyy&Mo6(*;u֌3j Νm={u.]Tj*;+8o9fΜ)n"--ʕ+bɡMYYY*,@U6UAddX5[n'ORĉO8, {饗 rQLUEʕ8p?w]R%w͚5Dm^… }ZjƍIRqqq30ӧz!翎 xڴiCQ0aaa,qڴi_mHOhт^dIŊ7n pktҥSNTfHHe>uʱi;|p… <|A(+WtR͝;_j]*TU֭[/^|y/J }-;;R[6ƖIA}z- \vcǎ h;|7YO0RСCGlVڌ=ZA=RJRz@.K*E_|_T%<{,*;pFU j3ׯ֭RPUV*Y$mz5jTfM Mm׮]*T`jA^8\N*[,o,n 8p`„ IIIb EI&]~]0ʕ+'OL=, GjjٳIR{o'(|?/\pa>>>bRQNxxe.^(B`PRg@Uz*`9P XTU끪@Uz*`9P XT,@IPsU Xlz.(UmUE)N[ [@U^Nf+*Z_~޽ŬT!))z꾾d(R` P֭[רQ#U5iҤ]v3PIլYTս{w;h 1nUͭWsΉp Xɰahj<ĉ/_,_ cǎXr}ԟ`U Te%QQQb*Կ}XK[@UA?X[̾}Ŋӧ> 0e͛|XOOlllVVX]@UְqƔ%KTe QQQ7n)!V:P5zOv1u,)BN8qU1fΜ)P  ܹȑ#w)Ư ]35Œr<,jժS=\gT}QF*U*88XT5jј K'UWW^]X10>//o}y7w2PL2{6lؖ-[t޷oߞ={Ι3G؋gcp;+44{-55mb+V0`@׮]I2;~={ :W^Q_VȪU,X׬Yyn`M6 FHbp˜1cuI_5K׽ {饗 rQxq,PhlGj/7|pBݻwS"T"j$tZ6m(m RNQ)K.:u]BBB*Vx)mQliӦQ޶m5ƍ-ҢE {ɒ%qFBTV$ٲe@n`F+Lqr͛?#J]Xf&V\yҥ);w.oʖe@UUY{j۶-}rҥY"56j*ldy>}i.쥅!99Νc8qnQW8qСCTtUF5zh !0=bH /ieɊFy޽ʕ400JR'&&֯_ٳ,CS9BTe P5 pF@%K?xFj֬I,, (E]z/-+Wx")k[1n8*Z/Hm\2˗/o`*M|8F(5TR… lڰa̙3gv;^nJߤ 4e^uahk.rc /)zʢߪ޽;SR+g[WnҤ -: Te P5uч6 hҥKu/X6ZOjUj<ġK ŋ1שSU[Ԏ;('mŋ{yy R[ .裏befQZ>sq4cҽ?~_ɖe@UUY*Qwٲe[l~z%-Zh`PgruP3kР%P^,ہFFwugƎ˶j֭l޼9-^ THj- III!Р hSE~'xBg>}h2h/ڵk+TGBxnP58*S233SSS-˓&$C F[F[R:YʿE..Ey'-ZN.5Ž9B UYTe 3f̠SSDFF3ޥK j?,*JPPW_}jos4k֬ 4P%@UUP%@UpϪ*'''---++K=S Aܐn<8"P%@U߹sgV7m[o&C-[U&0P nG7R,OTC͘1.Xy I044-o߾lYW :@U@ Te jȐ!gjUi_OLL7oJ ꫯ)S9–}Yݺu۷o?lذ'ON8ĉlW|E2Gw1u]lw֩nݺQ~th]lKvj1vgи>}Ou=, Te P5*kʕt_񧅽{VPj2`*UhTۏ0Vn)=q01vgV:k*FC\G4UYTe Vy?V׾8Vگ_?Yf:t`ƪRʗM!ѝ;AqNUdw*UDFvյq*h] 0E Ȧ4-ͥL*KU?00PK#G85W5lZStR&P%@UT駟3gTVD?օE=}lZStU%+ 2A68tKgg;*kPUK,MNNզMRҝ@LB!VAwYiYiڒH<ڸqz=Fzz… j̙b$<<\"##1iiiW\S]b%3/ĉx_[W>}X}$*sU=s{1bjHڵw)?j(1ՊΗSj}wL1U ;vH?~l1s? 00s#G4z_[W TeҥKoٲ>쳪"WVJF5Xxq2e>3|w[&/((hqqqtkJ*,fr@yΟ?/ZT@㡪胚Zλ۫We˖D.Pݻ6,55bŊtڕ*}FFK|*[ntK͝={v߾}{9g{,]UNڴiСC_y啘YXϞ=.\3f ]mj_5%oرgNHHׯK/4dȐGtѥ"ݛΚEиZj3f)YYY<٪nHU3ZzubRRRG9vr^}UZ8q"W\h"ڵlwYǏNV T@㡪%7nܘ$E->Y"ҥKNޙGQwDt9* WJ8dAQTSU< P4aA nDY+1 GRTw\GꞪwzINNQ|z}9wy'F݆ F]zuwU9waHG8*q[ƚwɒ%)X)3N Nm„ HڵkWԅ111HqjժtRM͛'%xYfMeh$ƶE`UR%#<Mm:ʲ]C IHHE:-J_>/2[  LUD*9g~۶m ˄Vl[||n۶ ۲e֭[1_8z eʱ۷W\~?huYN286&/#F:f˫VI%N 3\Ua c#'''66"ݎ\:^5Qƌm{kMTթS'̧,_9rf]=5lpݺuHŹꪫ;R>C`TuWbF _ܹF7c̆ K YPȏM̛00f. cjٲҲʥ|-f sV.Wjjvjʅ".X `WCa'F5D ?baeGT{h!0^U2Խ*DUaG\B#q*?*BzHlժ.UUe~Vp ǪWZ94`+TUTE\ QqA#^~'$5]+{;567j"W#.BƒjHU@vRR:SDtSSi*mǒ/UTEYo߾^~^z3*SSi*mǒ/UTEY9s؆zXeE`R)V4{i궩d<(&\r2"T4u۱"A@UE5bFVrNX,sTKS%_1*DU YAXAᎱ .ME+<(Mwh"U%' ޢNs*)#U1ӧ7vU|z ҥKMDΝ; B*+**һo4?ߝuu8!SNM8QQU%%%ӦM{!켼R\\ />}ZU+>BoScƌ駟PU~lݺuرz!|~Ϝ9h9ʕ+K0ò?BHRXX8gΜ'>UeEM'' HII:v UEJO"$2*=TxUE<"CUϡPUs*=TxUE<"RT偖'PU-[ZUұW$$<*͛7B ұ׬UEaȐ!_P5jԫW/=+!CUoϯWCAUۢEu;zVBB"ѱcG*66oժLUE<###u1>:t耿Æ 3TR1`wq=!aAU/2dH&M xI~~~||Pot u-T񘌌P'^CU!gϞ]n]ZZ̙3gD 'O_f?xUU&۷綾^5k֭[I_^ORSS->K9Tǜ;w='OD6mUKƌw^k|b] UԸq;Y|'zG!aAUy}OSDczw!CUyCZZڞ={~Jea}yǐ<`޽z%͛W\w"TL:NCBgbMB23333SJoQ@;xu}gz@wT6Fnl*TUPUPU'OG |Pܹ6y^^=OâEPJ^dI*U}=͛98|0aRHPOA6,yH̡2m4P"% *UUV}Y!SN͙3_~?ƍe^x'-[kNt)`{T*/ƏwYgyW^2[oc{ÇWvtTJشiJx,9"۷ܹsE"_SLݻ7Oaa,)XJd)hZBH1AUEU)Հjժ 4?/))5k֜1cի[`vS  Yv-Z@RYYYJ,ٳgO~~믿 r,T5iҤ>m&Fխ[F{0_Qƻヒɓ'}9&QU(!!!7ζ wSNvFJrr2O8DZ)hZBH1AUEU)U>[oK/y?Zˍo+(**/106km۶b[t=z4f.n38 h jҥ"#Fm,i1p-[TP<%q+W~=7Źz)5]TU''N8p@lh9{]wa(G9=tS(xرO K;,J0W%$,*)((7n|.D'IIIgΜ {Ο?j*̐ ;s}ys2/NIIeIQ˗SeUEғ xUE<"CUϡPUs*=TxUE<"CUϡ/5Ui{ xeKUUH^𠪈6o\J )H_T!C\VBUnԨQϞ=UE!??^zp U7zVBB"ѱcGa+E-[3T񌌌ڵÇ xFiii\\Pĉz&B‚"^2dȐM UvmnB…"^/TC*1;vxCx UE<&###7ԉPUrYhfΜ9#k)S)Z~\ٯ6:ttepjpL|rRUUX4uMlw… cbbrssWVKb&2o<wa+2[xYf3fa}ȟFڟ0h?;ǫ ?QIj0`pYCUPU~Ğ={ofD+|^q>ԃ÷o^r~A0ETe۶mXmٲE$b8am#F`TMcƌPl7rRUN0|șuAU4lpݺuHAcǎ/QXi,uPQUˈrׄ )K_mפ*yR.PU*TAJaÆu~!F_>#GZe˖2`A5\DHQf_3Ǖٹs{, 4]۷+MYK@UPU~D*BRHŁRHŁRP*\]VQ rgUBUFqjt#-:A$D*湣}XT*?"TՏ?xWԫWϓT]*aKҀȋvܡ.*?"TՌ3v:~21ʕ+,X ^Z}N Gc{{4#77{b ,&NT1df{+5(8RpR.B޳x=rȑ#q%gee"ݱ=wJ#BUjjѢE~[:tH$ֶ@"_:uo,/U(]p !`ZfiUTJKKnРj9 IDATN$RSc(-1sz-,CQ57e[` 6L0/J]sRDU}Sm6:=:8 .k_;wƧNJJQ4*˿RS(-!0%wc]3UVM{뭷 U9T*?j|hO o}!jm|v}ڏ=Z$i` ! ao 0/236! Lk̪ >b1Tض_sX'&$$O U9T*?j>et;L'v3\POwBU.k&*ʏ2hѢ )Ё-`^Hbp:]0PhD*.! P 5ZA*`l-Ć(<;fGԵ^ꫯoc{L J#lUq#GTS҉)))o端0"BwB@ ZXJs ! $kVDZ@ X57eoF ÒVdT*?VUx`5A?]0(SO` QL(pײp~ҦM_cXQU*T妪T|Κ5KG.*f̘ 5nݺabPT*?MUt7nt%LfϞpǏ#R(7UJCK wkU4CUPU~>TY@{9P$ U UBU;SUHUBULoڴg8>mb*c'ԧM2ޢ"ңG!C1ԢF0%J#UOHH ɶ?md!؆ի'cJ_Ly睰φ F]zuU9C8Z,QUBU,ór\ ݻ)}G7kR0Ջ_Z֬Ycq f@&U!NAnXbKD9T UGت:ijrZ4[\\\!S] zWZUfD޽IU!e W`:(UU%J#lU |{!wBM8֋۷o)s8-\L[" T*?N>wmj0%w(:se~kL2`EcKRz$??_2;Xgee48w\Ǐ4t%,8))I USRRBʑ͛7]3XvCHpI&2ꡪy7R;zz*#}]2)x H*w Xzurr3g^H|PU8|vv6PfffB"a 4hMAN䧭HxPU$L0K}Wr"?wT \N>& >om׮f@~V$ *2K=S1%%%o߾Chܸq˖-Gμpw$T*2[l޽OqqqqSf͚ 6L͌cQBH@*2SN;w|U&SC閺@ӦM7o,X _ T ^zm۶MĤK.۷̏cQ|IH0PU$d?SnA?͛7q,J/ LfȗXf'X _ T mV%~&ΪHPU$dڶmɟ{G*T 7d~~H€"!c]ĉ]lC*T _?>!!ATƍyZDUE [jIlٲO>7nT3@6T FV UE„HyBUaPRnPU$RՑ[*رcll,?!T!""\PUr@UB.*BEUE!ot  IENDB`onedrive-2.5.10/docs/puml/default_sync_flow.puml000066400000000000000000000011631513710110600217210ustar00rootroot00000000000000@startuml title Default Sync Flow (Online is Source of Truth) start :Step 1 - Scan OneDrive (online); :Detect online changes: - New files or folders - Modified files - Deleted files; :Apply online changes to local: - Download new files or folders - Update modified files - Delete local files or folders; :Step 2 - Scan local files; :Detect local-only changes: - New files or folders - Modified files; :Upload local changes to OneDrive: - Upload new files or folders - Upload modified files; :Step 3 - Final reconciliation; :Rescan OneDrive to ensure: - Any last-minute online changes are applied locally; stop @enduml onedrive-2.5.10/docs/puml/downloadFile.png000066400000000000000000002451431513710110600204400ustar00rootroot00000000000000PNG  IHDROmk*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxUKs0WR8$ICS 1fB"A,y R }9w[ c%}K/ 1%z p% K J=&JgBCڭ om3ZkKp&"ׇ#2Ad $@ 2LbID&P1L$"D&B T "!* Dd@H2D;rӧW}˜D>8ɓ'zoL}p""o@@Fh$2! M>"u7W} '2F3"S%r>دdGBd '2Fb"S]\rIڵoSNި,|Q{LYy?{lvv9=߉Lp"-=$2{~O>i׮]f͎;VxRVEWd[xsɎDmw"6D&HDO%L{bZl?I]_^yF]z-ZHLLT5jԐ.;yg*]w]?}]vYǎwޭدU>ছnmԩӯ_?+#e^z骫VZ޽͛WDdz}\o1ȑ4l^;w\-/R[Ȅ 'RuS)O R^+V:thٗ_~ܹseٳ`0zʕ{OPgҙS"r/j.jyU>|X&ye˖EEEY:kYjաCdz<~uJbD"(ocD"رcϏ{#7N"S+Œ<>裬,`eD"$%%^9s~۽j*}(,޽;11Qz{Νӟ72H$2Qǎ+ `:f̘;vO c$([9rdFF7sΝ3g4@0F"2tԩ#F8qB/ 79HAD&رc&J`ժU˖-ӟOH$2QVRRR;LX|||^^@E3F"ꫯTR=|zM:5777//oƍjի?P7''G(jJ*Ɇ" DH$2Q&ٶmw}W-=`u֮]'y=ִիWˣ)%}'[YۏJhL`cD"eŸt"~ _~CDdc$(Dfq\{衯(KN"21Lɓ'32wѡC;vR~~> lHdLw֣(+V-T(c$(LLLԣ(iӦ>}ZnB#D8kGɓ'O,T4c$(+ ,غuݫ?PьHd/#GCzz:Hd (G9̙3 AD&VBB|=ztNNL@p0F"2{}gzL;rH  #DyXl٤I &$$L:ߒrH$2QN\.ה)Sl٢ضmۦM۷O #D:{lrrS[0˗/?}D@2F" T L}zH$2AdHd#* '2F" T "NdD"D&D&P1L81L/j1L$%%X)ֺ-c$@9q\-[/E+2eDeS`eD"(?>lÆ UgȔeq}*Hd'555222::ZR"Sʲȸ>JH$2rթS'KiK뫌`eD"(W Z,ˈ> VH$2rr4ibE,?pc$@y{g_#,H$2򖚚ڲeKLGYHd@}1F" TL>cD"Ž4ƍȔ'v||'|r1@0F" 9w… _{ݻwiժUs|3g;v,S nHdam6j(i{P,Y2~|q@2F" '={vbb:PGPdD"_^O'NHg:uJrHd.]|r=n4233'L?l9H$2yyy&MҳAfҥ|@3F" ԛAɓƍ<c$vgΜӃAi֬YD&ݚ5k6mڤ ҷ~;|!@1F"`7e=eBc$vz`+WGTMsZjA7_/!@1F"`d]k׮oժUk߾}bb>@qmڤE(vO*Bc$vDʕ+⊹s?~rY_~M&iڕN<D&?yM7QF;v݅)##]vZTjquk;_FشiSvv֭+}'=6X{gC5yՓ/ސ Ȳ}o7ߔq97xvK͜9sfÆ kԨSOIUEߨ$u W]uڵmH$2쌑)(+˗8p 77o߾={t233O8~zm,zBzÇ9rW^Æ V)|69r^z饼QFI >\-vmֶb޽\r*OE)))ٷo_FV}Ԇ/\|ԩOLfD"v풾G ۸qcݺuݶ|ʪTw}gfLEvvv*U~Guqݺu& Cɲt,a5kɊe];H-jWhѢMFُaӦM5j԰omH$2쌑)#+R5 TZm˧3MY+GR":uUkCǣ-[N6&&F2U[+o֭[WQ" #D3Fo2ANիW|RJOWmu;v,++K}φؓƷI槟~ڤI71Bd6c$vDʕ+֭O/O?ɳ7%%رc}~|Pĉ6l5j̝;W6yᇵMp޽2h룏>ڿ 5Ŋjb͟ }g~,Y"&8mڴƍ׺/FvNNo#FQ" #D'2?xT,Zz:H( /!5qDȔ{Gdڵk?jp̙r1**Js~ZvRV͛7K <^zr͚5Ws,7xwI Y]v}⮬O0`Eߨ?1Bd6c$v~F&f2Ed6c$v? D [d?!H$2RAdT#D[|yZZ2Jw7o #D;})SAP3gNVV #ȄL8177W &B1L8@zzYAIMM]x #Ȅ3ٳG1cƜ;wNZHdΜ93|Ge0w;vB1L8Fvvȑ# $'D@(2F" '>|xzz^98+WLHH*(c$p3gǿ|l;rogB1L8Ҿ}&No2vԩ[Jr!D&˗/:u_>roK[&''={V<HdC"S1Lbp"c$@ 2DH$2AdHd#* '2F" T "NdD"('999ZdjkdD"('III)))E{dʸ.AD&PN\.W˖-W2"ש@2F" g}aÆ"SeD@P2F" Ȩ(yMIdWYקAD&PnVh뫌`eD"(W [,ˈ> VH$2rr4ibE,?pc$@y{g7n,)_81LlR"S?pc$@PGqHd !!A"#Dscǎ}#7N"S+*Kr_w`cD"!N_rUVCM%t&|3F"P Zt&fD"!Ma "#DP2eʐ!CrNNW_}iY>~x߾}o6mw}?jN\\\omXfڵkk;vkׯ_]vm۶޽{vvv"Hd"(8qkϗaÆ{j9))I:S\.W*UԸ`qS+3%2崰b Y^`-ܢ%/?SYxWg!D&/QQQ{PЊ+W o={N:5%%Eۏ,%:S"jժjջPReᅬoaD"o\xԣq\^z3g O_ҙ;w5kVh)R3կZW^y" l#DڵkF/_ncر|]vB~~e˖Mew?֪UKwΝ; jră ڷoߦMf͚XB_]3F慂_]t,COXJHd"$%%EGG)oݺ7(_N*G[%idCk׮`*LwkHF^^>T`ӦMw%KlR_}֙"H$2Dm*LwZ0au]'9ԪUXJ*]ұrq}QSYGپ}kvŊ/,K*Zʾ[?'O4IF$RSSd᭷4h,lܸQ^ڔ?ov>s2>}toY` 7`x<D&Çt?L~VkUT9tiڏu駟ٳgK9ey޼y .?P?IJJ;V0͛¸q:u~Yfv\￯ƽW_5h`ֈWt&.DfGP$`ɓ'cbbw>qufLʕ+_QjNժUewUVM͗嫮x?ϟ߱c֭[jꫯV[YѨQ#( z]ʭ*bK/r}7i6ll2uhr]0@x3F"Y< B?#F'ꫯO~w<^gddH;v>]x,׭[sbi&Y޶moկ_?96mȲ,7nݻk֬z#n~f81VprљVt9rNj_\{^NzH$2ҬY3yբE y%on;CD_^~eyU@>}I*8_Hd%77722Rj׮]˖- !Dwo=|IxeD"_k֬Qç_yWH$2Yf~O&8OH$2A}~ LpXyя?8..0vXy5n8}Ƀfff":t>_Q!*NzFrV?cfIJ̔W_}uƌ~;ZJrݻw'&&ʛŋ;wNkd…j䵣BW(̙3ߠPc$~d073f̎;@m۶5J^)!jɒ%ǏogS1bDFFAoNٳ B|#=z|՟=c$fd:uJ ĉj8<|`7k֬/v&)cǎgNjժe˖-,Y|rEp9a@x3FbE-[;?@WIҥK 쌑Xjꫯ&s1}ݮ]iӦGz)Ks=/Ƴ" {?#U)oF2o ~饗^˓.djnSs/_.orss+qޑț9˵{nI\ \A}zc$zÇ9rDuذaWr}Q!xzuCnE^233}D83Fġ4/,'%کS'5YċZ*nU\yֲ7׺N :T\%\QO\qTʪUԩeΚ,j9}`90k¡Cd'ru>GGG/n?֫WOg; @q#b"3++Kޣ_[ .lڴ5.ŋ=],[5kj7nXn]u 䫯;wڷo/yyVh߬dggWR:u֩w-vE |͑}VTS㊟z=gܵk'M6ըQ]k׋zm۶ݳg}}Zu.ZvͭekסI`_verڔb=;v+~0~u|SO=դI+:w~Ez>@[n^۶y~v"0FbD9_{dM/wZ5 TZU8{z_uuERuԱ*nmWkL%D83FAفq'(?_V2(y6c mb WQ#"סj-Ztwژ)F5=#gݍ`ԲާOO~) iii5JIIz-vD&c$VLdj.WL?eys#V^}I9~5hJ2{mӦ\\#<"o;6g3O?U;5Õ*U4ş }LшL3cd PN&ڠצ͛jjԲsYעZ|WǏrޭK|4Țn=F-{=_6m~o oޫW_|XX~yru;t>B9{]tO?1;vo߾sի7i]֧N:5jg[E\ީdddMVXa_ T\*7sqzv޽rV]{#~=r'Nذa:"gDʕ+֭O/O|6=_z-^Xʹhg$RϳE;BϮu9,YDN'OkܸlӣGuRw`5'==}*e yGO?''G?gSL_;wo:tرc,SBX:޽[ ǒq+Vf l,_<--Ma \7y•1K'2<[cM6 yLX̙?KWH,<@'NLPLgE03f̘sO˜1K-2ŶmLG;zQΜ9?@XuT6Νc@x3FbiFHHHX~]N nj?@9r$;`bb ##S{}m޽No69r7(`2Lr[l٢Gpؾ}i^}J8qo|Nںuk||<-LEH,TΞ=,߰%8C$<(˗/?}(j3 Eq+z4(߰ۖŒXz>#,o+Df~ @X4H$2[ '=1F"Y<V81IhHdNz@cD" ''~Q{fD" )))%%źh%ֺ!(1LբE -~k[NfD"nܸz˥o[QQQCէqE0F"i,o7o.odAlEFF6l055U ID_5k&oZh!I*8_HdeĈNQF < $/H$2rĉ 7[:thٲ%~ q#W=~B'=1L%''GFF>@2F"Y ͚5[|0Ix2F"Y 0 adD"iii&Mzo6y%_eYFd\@IFپ}kvŊ/,GGGZʚ&k9ݮ#FkNv%U{Xn̗ u#,D_.MM65__; {ݺuOٳ =(UT9t萺( zر.];V]4S >cY7o^DD… e?С=GKv`Y~*՜-Z$%%+RtdLʋ1Bd=+ 뮻I&?9g|XǒK/رciӧqO*CZ3e+V`WnSgBQ [x)na^ 21L͛uv)۟{9f 6[BV}|qә~Xd_߬YܹS_]¼@dc$^8SʢL/[+77"#BqРAҍ:2Gf|7YR%. D&1F"clllnIIa(7Y|"#,͛/0cƌ]veggˠ|eQ;Lrә`a^ 21LϧM4Q#2"|,R3xa^ 21L n:ӤT  @`Hd@|0a”`"=Us/ D&1F" )${,$oD&챐Qc$BBFPnHd|ؔ)S srrӧO{7iRs7o~ 7ȸlkD&'{8qkϗaÆ{j9))I:S\.W*UԸ LaD"c/DEEٳB'V\n(p?{9uԔN* @ Hd|zo\xԣq\^z3g̝;wΚ5{WW"@#c]vmԨ˭=z;VRϞ=k.YTlҴiSk~QH$2>yXRRRttok$77[ԩSeȑ#zk۶meCk׮uF#cF#dÇm۶K.?mD&W999Zik H$2JJJ#qYk]t."@#rjL6nغukYT"21L@!w}w&MTg[vmTTСCDdc$B̙٦ML1)F5h 55ULD&0F" EGGxҙcRm۶;IEdc$n瞄}cD&@wAq-ZQLaD"ENTd3d>G!21LsQy-G(D&0F" .::Zz,>G!21LwB#"@#;}g}6eʔR5f &+ 9ug7D&8޽{ccc%e`ժUPiزeK\\v|h- @ Hd#9sF:m֬Yz9Ç'Og鷭D&8Ovv/w-_ H$2a92bĈGX6lHLLog!21Lp/r(2gΜ۷뷶lD&8I||={D G>w~ @ HdcH^Κ5KPuŋ뷹 D&8Flls?KǏos 21LpӧOYZ[^ڈLaD">KKKӳ,޽>oyi#21Lp1"7S奍 H$2Bdc$ qqqz}ʕ+N#7S奍 H$202O8QE_Fd䌑Hd3,28ԬYnݺC o޽=zVZͧO~egg0@6]O>yQk1cFTTT׮]n9" gD"dy>999Rڵ=z{~cbbFf߾}zÇ9rW^Æ s\|_4hбc$;n9" gD"u%|… 6mjj|Ş]Jkκu뢣sq߾}j\iE 2rH$2J_$uq֭իW:vj֬YNǵh=|!2rH$2J-ZO2eMjEGk<6_L1Lp?#իף>o߾:5JMٳ?.s8ХKa322d~Zb#=5zN #g'2Sիz]F+gUӽ{-ZժU+%8xzU^Yfn\G9" gD"A5^YX`A&M "7S奍 H$2J72Ҷm& ?M73* @3F" 0e=v興:u?''GQAf근D&8Crr͛& -}'|Fdc$ gΜ1~ӽǎoyi#21Lp)Sdffe*N<9~x6"@#˛rhbڵ2"שD&8^ffG}FӇ '9eʔO>?L!C4lPuLYק"#2ڠAՙrTaH(PbD"SDܹsdddFFWY}01F" )"3!!o,ˈ> #Jr6mjE,?1LO >뮓%_JD&6mȍ|%cD"SE慂GPbH$2>^d&$$ȍ#(1c$B/2].(>3F" )"B(ʍ1LO!c!y(7H$2>d#=7 rcD"SHXH(ʍ1LO!c!y(7H$2>d#*''~Q1mCD&WIII)))E{ɸ.: @ Hd~r7onucgnݺucD&^zEGGT=6vX:t>ՙLaD"PȆ $î:LYŒlذajj>ՙLaD"kѢef뮻}cD&@ꫯJIg۷oBB>ɱLaD"s\ 4P٥K-[G(D&0F" {Q9p H$2^lذAl.]B#"@#xעE P H$2ީ QLaD"ϧM4ۤ,ˈZ}"21Lټyf̘k׮7WYJ9 @ Hd.;w.66[nk׮Z#3e9LaD"A sdwngD&XFQf|J_D&0F" amݺu;u5ro7o޴i6m\R";mߒ2_c H$2 edd <)ed̗a H$2 I42Dٳ>?2GfGi!26LvfFFFnݬOy 8H$2aÆ_9s eP˶0LD"Pŋyyy'O߿q.2"x-YD&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" .D&F" uSR6L-z (Hdl@D"` m$[D&Ph#"2BD& H$2LF" (x7T(D"P,;;;''ǼiLMHdy&MiF[o"{D"PB>}4"sܸq2NGD&kJ[6jH:S60cccׯNGD&@,aٸq㛊u]iii$HdT/t R'D"zqqqFavܹiӦ\Hdݻ?D"ڵk.۹sg.LH$2%''Kdr`D"q.Hd/^PN>=~x= @F" Ҝ?^R*ٳ?SOH$2D˗_^1<_}Շ~SOH$2DLg|R}Hd4ӦMS/&LSN7nXvmuw9زeKժU2 p3PXX ۶mOޖ;D"@:u~ +Wڵԅ4R۶m̙(UAA֭[)J pE<Kޖ;D"@)Kd~g_owy˗?cRm۶`;y:H+}x H$2DD-k>WVu6(^}n!..nʕ999111cջufCƛ4i"\s5 ٶΜ93>>k׮2RXXO]שS'8vq㯼J !o/4g̘!sd066ָܮv뿂Iy|>us:|#<"wZvm3KYGyzLWZ%lÓms믿^~5k;cA'GyTW')' H$2DmdJȟl|x#ئMѣGrB?쳧N:t0hnGdN:!C?nt݀#G=zO>Ç71|$bɒ%B'Nz+jݟgFKrx |>us[Dl[f1X:呏5J3ovs$xvڍ9XQy"v\C2D"@Fۥ%Ѣ_2;w7?裤$oe{5k4#Xa׮] )EdVV7mTF }"G 'WUˤ:s!:OO"^{1(uw::ut;_ʺ?u 吀ױ x/Г<*MS҇dD m$"62}E) *Y eض$Yj+W0tv>eO>-h+#wow~+XYW+S8rH*UC eYZt֗I'|ҰaC͓<*i=+}HvL@F" Ҕ%2?쳺u/1.j*3}y5j&'AsW^,{YtuNudA#0OeD_oǯ}w};yڵkA:Gn}9I7~1bQy!!2CD&HS}h5jH9HʠTD߾}%>P{v=&&&99yƌիW7_:u_ 3tzCjܸiӬ{}~wjGI&;wСik)߀+X)_}衇%g7XrW}'ͫ?9ʣ2oڝ=$;D& bh#i`_Dy+fC H$2D+R^^͛e믿[~iuAG-w*ID&H_V\su 43PB?2mSOH$2D%K?gN }$$$iD1cd$==] 6L@ k׮lԨtlHa֯_?77W 6L*99̛3--M6LjرF^~_eee@TF" Py޸80Қ6m%AD& >}_K6L@k׮ܹ3&m$p`D"q.Hd@9} /07N"S;*<$H$2 HP,((e˖CN yBLB6L!!U th#PAa Dh#@ajљm$P(23tH$2QWri#Da:@gPHd@)0wUvmͺuZk(wQqEЙTm$P9J/L_%rdV :JD"*0}~hɓ'm6%%M6ĉ5jڬY #FȜKӾ|И֫W/pc`,5rHDYgmYvٲeu>0(Gzj/(L*6Lhe)L_QUReRhfq}Fvvw)V9.r>|;Hu'otfÍ | ~LLG}$nv F7?b̀099YK6#GgPᴑHd@E9ra)J$?l߾}JJ7(#RY:u޽IV^m̿k;v|EIVjU3\S:$W  KHd@ȑȘ$ԡ 'OEy%H$2")"\DH$2")"\DH$2")"\DH$2a9l0cxΝnZj޼=SPP`̙:uj&MZl)rNe!2p6L-k} =znKMMvڭ\xJ.m$[a6tЩS*a\H$2avȑΝ;)aH$2<fBd m$bqf2.{͛aH$2ż^of4lŊ)))xj!2p6L@ =zhذљF-X >>>==]VL\D"P¼ybcc3%̤0S +HdTM4III0l۶mZZ:)BD&@SOI5o"/IH$2X04i֗1BD& ;È//c 2p6L@3"n KL\D"XbbY\@d m$D% D&F" aޛ6mTW;Vl„ ȃ̜?(gD&F" … |̙{n_9Xl:;v̚5K"ۓH$2 ,mٲeijEM8ٳ"Wh#3gΜs ƌsa$Fd m$f|͵kתN:%yT]Ed m$N.\tR_AAAFFz"2p6LN2egbѢEz "Wh#Y8} sv +Hd@x8ԩS2,ofD&F" aŊ6lP,رc޼yꙻH$2 =//OmqF)dy]zO̔\ i#؊ȼTt9.@HdlELd+r.\i#؊zr.\i#؊ȼY@%F" IaI@%F" IaI@%F" IaI@%F" IaI@%F" IaI@%F" IaI@%F" (x70S"Wh#1oZLey3BD&MII1; 3q[<5BD&'%%il|԰Bd m$L*m)a&rssթaH$2%_۷o-$6l(٥Ku^!2p6L_~don*rwdee +HdTyyyF^7n֗1BD& T0op䏁H$2L2ň֭[% D&F" Y\@d m$D% D&F" (vżɓ'߿m۶f~lˈ^Ad m$ڰa/̜9s텅_||m1v0Ad m$K.\֭ʕ+}WL yD&F" NqȐ!>{Ϗ̑2?:H$2 eddH7=e̗H$2 mذ[ngΜnٲewqGRR|mNrTx~& +Hd@xb߾}y…1cƴinK*ҵkקz*--mܸqO;(967Kd m$^3<ӢE #/HgZ'˱u$BD&Dɓ'͍76mTz葖f{r` qD&F" ѫ_~_~yZ% 6駟6˱y3BD&D;z<frr%s=r9_ qD&F" ѫYf̛jSiѢbΗc7C +Hd@R>lԨ%lْO2rH$2 z)پ}{5+K֭ @F" KԩSլ,I*崑Hd@R .vmjY^ֺucZ i#už}\9~xLII9rT9Sces$BD&D 6t̙3戔/ܡC&MH^6kT>rk qD&F" .##cO)K'3emD&F" NqȐ!ҍgϞU92S=JC +Hd3322ufLW̰+KD&.F" 6̙3o^XX(]e^iEd m$b/^˛H$2%_۷o-$26l(٥KuJH$2~I^7wܑNQID&@g䥡q\HdHMM5 [o?D")Slݺ5&m$Hdr`D"q.Hd@|3_|QVUB}ySH$2}R5=\AA/-[L 7Ǐ5j%H$2eH)̈Ag"m$&LܢD"\0C +Hd;|fȣ36Lp t&AF" Qa H$2 (> 3 љ8D"ZvRJ-Zjڷo5k֨0pƍw}رk׮syy0a:҃1)}k׶m۶y,]TmAg6LpWjarhٲeqqq+WLqcbbN:e,ʉݝڍ_2Fw-~iӦM%љ8D" (x޽{ےCZJIIIKKۻw17<͚5ի`O8QFxFF1(9"#2ִ 8g˖-R;vѣG?++{1Iv,k8$YܹgϞ҄ / #'On۶LkӦMnnusCqȐ! W1nlҼiJi#'0k5YJm۶կ_ؖz|E#ݺuOzKzO6>\Zo77 {/1͚ 9۷ohѢƍEm`x:tx饗mcAs;:t7=zTaÆuI/'K4eD"y+$S"A@Bzg jUVmqYj?}tNw>iҤիW["nM 80&&oq\Qg-zW1صkW)+ 7ѣGw]EJ9<116>5vsz֯_x JkQ>|0ou|}R"St9..n޼y4q¼DdD"RJg'L soKi$ܳgwGeu .4!28>ǎ3gvQ\98p`Æ ?2G\7W;1cJ̷zKtP?b¼DdD"UJg='NTGKEa^"2AF" .3+ݻSRR:vXXXGaLcH$2tf0MD&1m$:3QVD&1m$&:34Q "6Lpj(LD&1m$>:3tPǴHd@|&9Iu(܌?GdF" ED*^YcH$2HH+ pLD&)xei#"E",1m$[6lxns]*рZjռy{3u&MlRXs"6L-kB+ @i#O섄~9qĠARRRZj%ߧO.GRSSe]v+W,^!HdlСCN "6L-k9r$55se  pLD&TRDًEdF" (mG)"׼FdF" (z6mjv"/NIISΈLcH$2%#11L#E}tu* pLD&EIgʆflllsssթ[D&1m$URRRbbbf$E0o4u pLD&@??!5HIgD&1m$cccLMMmڴ)0D&1m$N#2z!.yLcH$2;v?8D"XRRHD&1m$pɟDdF" ??wߝ:uK!lܸq"ǏWw yM6o޼ǏO1JEdF" … ۜ9sv y˖-SBW_}oH eW IDATGdF" dͣFR# .Yp Ξ=>CdF" aNѣG>|X}P pLD&7|s͚5j|=~xeD&1m$P^Ο??uT~PQ|ML;D&1m$P^VXa5}PQv1o|7寶vvMF<د_Zjc6l:3gΌڵu.$uOMׯ_g^z 4Xj<-όl[Gd!2i#LC3oQƍϞ:uJw0`ȑGgx"Rwk֬1V0*NڬQF_}?2?+$~:wwxJJJ2:02L>999-hlתU˘lȴCdF" ENgqkz5\+*Ru]'R*G3g* Y'z<k*wa v'PvLcH$2h#W;ӟYe\ȑ#UT1?H4+lذo7ouuud֩Sx^̏?$S>ʶ" pLD&Dg}Vnݿ/eWZ\]֚R?A>,{Yt1~}_ɓk׮52VDWނ &]|SLUVNNKUzzz6m._J@G9p@vF?ܵ~WdݳAd8D"KY"SX;ƫQomURqCh76NzHVS?ne y 7,ZȸiRɔ7mڤ2mw2۷Lߞ8quo~ykްaC{6`ǴHd@y)cdvLcH$24K*(BdF" ȬtD"6L(//Se pLD&seff郊2w܂UA"6L(GƥVQ&L8D"޽{gϞߦM,X8D"״i$5B93f̅ ǴHd@:>{15PnΝuV pLD&‘#Gҙ/3g$"6Lҙ=ܾ}$.]>CdF" ӦM={6כ-G2eŋǴHd@ڿFFN#7nzO7lǴHd@%8wŋ2330Iu(dS7Ȋ+~)FLcH$2HH+ pLD&)xei#"E",1m$[H8D"`TǴHdl"W6L-R$RF" (x7Q"|ǴHdegg7)"׼FdF" (z6mjv" .LIISΈLcH$2%#11L#E~tu* pLD&%KHgʆflllsssթ[D&1m$URRRBBtfǎIgD&1m$%B6lxS?++KpFdF" P?~<66(̖-[6mڔKD"6L@]v5"G?8D"qѱcG.yLcH$2%%%IpɟDdF" ̸HD&1m$B|>_ cǎ #CSD&1m$*$}ق_Xl:TIi'Gg8D"B/ 3Й."2i#0ˆt pLD&T2y%LWǴHd@eQW  pLD&T$"6L> 38tf0LcH$2J-]vUREZJMM۷5k]͛7ONNK9kVG&cK!g:auwvڶmi6nxҥ^ pLD&T4_e˖ŭ\Rٵdɒ L9/pw-~iӦM&:"6LP>]aEoѻwoe뭷Z9#FhӦMBB1ɓ۶m"㹹ĉ5jڬY cMƄ#GR2gm,1l{]vrsΝ={t}Jl:3 2i#+CaEmׯo2jMnx7 2G6wyGzo;S6>\Z5s\65>_Q|G tGuᥗ^2'r֭3:JǴHd@9r_٠Ae}dML_ќkޱco^Yf7x>}SNݻw4iիK9dL իW7K#ÖOnW:38Q[HWD-m$Pi|tS\HWD-m$P|t敋¼(=Rh#J3y/";;;''Ǽi]Aeyi#3ˆ48Lכlv‡~"{P*m$|tirgϞ7|љ Z|||zz:{H$2 TL{\|ؤILِŒ_~nn:{H$2 HDM8qZȐQ*<-YdƍKU&'' R]tIKKS'P*m$[csɱ 4C=NTH$2 ʕɓFam۶iӦ\pHdl9`^ˈ{KF" L̠,_0SN\6L-kשSgر۷OLL\f1M6ݻw/,,4.#+p3H$2Ȕ#,]Tϟ뭷㒗|l =9'4.%h#R"k5:T^KEVO?$;wLHH0 \6L-.kn?DdV #+6L-md^* .q=|1QKD&VY" T1QKD&)]_Hdy<M%E,'b+6L@윜5Ed\7QOWD-m$b^7%%L3E֭['!"D ~@F" (O>IIIFg)"/HHHHOOWZH$2%̚5+66yҙ"?\u**I D"PO?$UymJvӦMy<'b+6LٳME뮬,u*O D"ڳgAM4?!%D ~@F" m۶FdvڕK1QKD& Yfٮ];.jOWD-m$Hpɟ|" ji#f\K1QKD&0?XbzLmȑ"x.Yܹs{lOWD-m$’֧NqFͲe!d//x|" ji#~-Z$??ĉO~yn/D ~@F" O/VTGxԷ1QKD&pf't ;vle1QKD&>c,_|;@}'//oΜ9@9rd7ħeLS+"6L81}//kܸyʩ3G[,1ct);;;''ǼiMD2"2i#ȄD&_qڷ:s6mR$"NVVMII1;Luɸ-Z6D&1m$p+(μxرcƁHtĉ)S \Իw襤$3D/թe@dF" 'L~o ;СC6&/|9忂ٳg6o\:SQ 3>>>...77WYD&1m$p+ng;wV"Զmۖ.]WO?IUv!55UQ6mL+#"6L8AdKycؙSLQ "ٳg^8뮻n*ңG,uRǴHd‰[˛_2??,1_Y}~+cՙ'OV y[lk|EJծ]0aB:uWqFs뚕9SO ƟרQy35{Rfj֬^N-9han)+cZH~O_{z{L̵2AK^cbi;_y~_qq>ct)ʲoy˽?]7IīJw柃?TuevȴOs*U|sop' ސԶm? ўluSXv_FޞOϘ5 >ܸo|sW^8̃ׯVZu6l7ٻ𨪻-rGHP7@jVWTׇV}jBI/U@"  D@h&BH\[׬٬=+ dϞg͞5{f`edׯ_ZڶmK/i;;\ըQf͚}'+jɿ_|E50++f͚?+{ðO>c:thիwAܻ$))i2"Un.222<Q4lP|͚5j/BvS|駵kז#Gr`<ѣG=_}ոnݺ/葨ݻ%%%&L;vھ>N!Cd\jGưohۃI[N ._\hذaAn`ԣ3f{j瀬x.]ȶ]wu#G 8'T{ʴ?cǤܴg>ȑob|z-2sHLOaH7k׮ǏWWO Y(ܺu/>?NSdtBD&BQȔ]?V.zIFqؿOXMbZ5k8S՟qfn(L&_\zbuϦƥ[zWU}a+СFƿh޼/_M{P/#:s!&K̝7 7hdk.uoժ5g5.5mٖ[uL޽[LUjvܩmذAtcuQ;vWFXiAAAխ'jڵ֞RJ C ~$zrss/첹sJ.jW)SaXhFgL?!BdBfD"(gd~/2x/Ŭϖ9lH^ǭ%KqݕW֯WONk><3ldsº}G&ݻܼg{AigӎP=EU_r5j\~_媿~[|vݻrzi1)OT 6U_Y_>\2s3.YLW42o.Gn]ԏLNoO|rkBmf+H)SF _nnӣ ܱcf+_,ϑh>I[nEW^j0tv_wC 1>Xy t% f̘2sFQ9vɭw2/^\<|pjլٔoV]jՉ'dVlݺN( ʈzN~_5ktAdlAiէ֮]k?YOQv-_xsվsbb['`׏8i_f|nƌe9UVI 4HG}T۷o͚5۵k'j:rUkڧ7mi{n]y9>\ >S2dմiӬ}Gdzn`G}!@-RDF|]v6m.DZv%G+?VOv/No}ȑ#O|5ߣdgÆ -[&2j? p-c$dU/oJJ.YΌ͜9SGf-ZT\1cddd裸6 p-c$W4GfZZڼy~ 6^?UNN.w/~O{*;gLD{.X`ʔ)K,9}G<1QD&vر{/ \"¦ľ; ?ßHd" eD"q_gD-c$G;? j#8"E)%QD&)N.ZH$2Hw u @2F" pDSK31L9ZhעZH$2ddddeeY)"ruU(D @2F" 84!!L+E6n(r]QuOgD-c$ 0UV3Ulذ!>>~"'b31LyϟӡCLI)f͚fgg뻢ZH$29sL\\\RRRbblooC ?ßHdtÇӧO2KOOwB ?ßHdtWyl׮*'b31L@]vUٷo_>mOgD-c$ϟ"3))q1QD& ?"| ZH$2#\(D @2F" /կ@U ?ßHd8qO?;L0WJZH$2:UtۄZH$2BgM eD"paҙ.~"? j#Sa*t{ZH$20:%OgD-c$rR,--(,,ԯ@OgD-c$_J9;3''gԨQ YYYuO eD"ZE S ҙҥKLLL-( !D @2F" +T;3''硇j޼e||5\Ca^ 'b31LR:377WuٺuXL ?ßHd@3fݻpw} rVP31LR%%%ayd^[oUDg 1LjuaZ76[jEg 1Lv izCd 1L@:i)--(,,ԯ@"2!3F" tfE EdBfD";"2c$s:"2c$w&=D& dH$2:{gRDdBfD"={PDdBfD"tID& dH$2HD&)U#8"EW2c$GWBfD"*^Y@ȌHd"^+ 1L#Rīxe!3F" 8~QKZD."2c$s222qֺFdBfD"pNiiiBBՙVlܸQs"#gZRRdÆ GwE"2!3F" 8cbb:t ))"٬Yl}WD,"2c$9s&...)))11QRD۷o7!#.ҧO&e뗞HFdBfD"ۿKNfv!2!3F" k׮*2Gx 1L@WGx 1L@$EO"2!3F" L}ID& dH$2}"|D& dH$28q駟~w&LL@ȌHdt0%/ L!2!3F" 80:{L@ȌHd/L:ӓL@ȌHdé0:KL@ȌHd-xa*tg#0vfiiiFFFaa~ 1Lv/L3jԨ,:T5"2c$*ZJ,--?~.]bbbZhAa 1L^ߙ999=Pͥ-㯹 ӵL@ȌHd@ 0ՙ֭[JHdR.GdBfD"Ԙ1cvޭcM?1LR%%%ay(H$2tUEf߾}`1F" `*2`1F" @}D&쌑HdSG;c$P9~ᇏ>h֬Y3gLKdN:U"ɋ2իGfD"u \Rp7o 4H$2 tNby׊>|裏W#;vz BX8Hd@(0ǏQ=\Q6lذ`ΌHd@:uj̘17[n_cD&TXZZھ}XAzgN> c$P1LA$^dJ@Hd@ŤYޓ c$P?̙3@A{71F" G聂ȷwwyGc$Piiiz+_oD&T@ȑe˖K.D ʯ_~ll۶^zgg* 2(c$Pzf͚޽{KzժUK. ,3w(LeEfp%_oD&T@y"/˕W^[o?~~kg0P~噊 :# (Od z饗6lf5^PP0r ԯ_8z:t ֫WO՚A]o6o\FEž÷~{w֭[Wf~Njո_l֬Y͚5o߮Me_߿VZm۶[ȴ<{lyt2ULĽ3kVsiڴi:u|A)vs|ȑ#|'2yyy֭҇S3ZRmݺ_~yv/˻ᄏ;w8qV,_\HFRN2dL+٣G-2~'-we鰝n%Ot]?^>:!2(c$Pܱc$>z:$ۙuVz={}֮]/ժU۹smZrrrbb}Ww\a׮]joժnÆ 49Dv|Ee]6w\:Vv<]CR:ڀ ]O>>]֊L1dȐ#FW_}b 5~w ++رcÆ sFE{մ={v޳gҥKe)^xykVrTrZTTO=T͚5M<28Я_?ٹ]v.k׮ݻ˝;w;ȭO9rGsx\Nϭ"0F" ` T ʽ_oD&Tyq1L3gi J"S^\~Hd@^zӦMz ܹs… # 8uT9?eǎ_oD&TLZZZ^^(d'N2eJ@Hd@ŔL>]D?0;;[@ H$2¤I/_ "S^^ԩS80F" ?u^A)..8qw}1Lт2z rIa/-pfD"BO0!;;[އ~|IEA#>}>H$2IOOСtDffbcc]@1F" 8ϙ3gt钘()p7dD"1b䥄e2v[zzJH$2qqqڵ#bD"@RR~?bD"@zzLM>XHdPӤ73@3F" L}쌑Hd@9qDrrr[M0A"sԩ\HH$2jHa>>[r>&R>:D&T(̈@gp#¬\t&1Lp4s\m6n~Ǐ6SN:t%>m۶رmy( !Hgկ_gMJJjѢźu_|ѹsľ}ϿpdD"_}'O픔'|RvmVRҙQZZZz5nmQSgJd7+VEu%//^,&M7A#`F5o޼qqqɘK.gu,S?,yM7֬YYYYD3%2kԨ<بQA]7A#`KC.YDQ^z饧N:ܶmkַo߇z~yqwqYk H$2w͚5[|5ү_ɓ'KR?c8y4aͭZR{W>Zqw_6mzZ&UACHNNG/wҥCVX_}֙#eC^ÇA`dD" 222ջ^JQQш#:u$5k 9rG.2صk5k֨"oYfII]*hCw^Xt5\_mcL1L05jTjj>Z> g61n8)iZ띺SnZZ})))̓ >|XVڵ^v޵km&m&SM4~7|_ZE*5~jrhu[K|dK.jN1}t(e.fggA|dYhQǎ#nT c$HM:oX#S['~d#77zR;ˆd' ݽ{3fmm>},^Xmu>.q}]8v!CXW[nEmks8$O?]n5B0F" ZDݻws>{d֨QC ܹaÆ!ګW}N6mڵv9#S".+..V/kJ,v? xӬY3{wо}ƍ!M.[9JIQ5H$2W+IULzۧ~K/|Ç߻wo:uU۷o?2K/رcUj4qš5kfff?6C֭:8|}XHd9V3vfC|cccu3ϔ?2e_~ڵk'Olo/;iӦ e˖|W(Lo`w2F" X3=ި,NH$2W33*2)L/aw2F" X^myQdD"p5α<μp(Law2F" XCg^';#\s,O3+U,NH$2w),,_αkBaz Dc$ddddeeYX2.ZQD&. 6mRs,9j߾\{nWD>ɓ'@NJaz,qYi-$.aD"pѣGũTXrղeAB'˝Lb(K,*bD"p͛˩c0cbbV^ " ,wLYePDY]UD&F7pCӦMJαڶmۦM}'"YdѓO@Ye1%Q PuHdn޽{&eƍw/Z,$;1LJKK[nNDlllIIx,wY ,|1LFm~WwɢV?Ypc$KeggwQαF}, ?6H$2d2F" Wzzz>@TRG #Ȅ7㏫W5k2iiԩr_9ɗWᣏ> |JYdYeԯ8DJ?P@HdkJKKjRSS7o|+Wԇ"PNNٳSRRk!}̘1*Z92~x D&_f3#Ȅw/_\?߿ر \\ D&<7X~~NW:zљ@9s?aƍկL?~|ذa:uС.IMMm۶mǎe\nkcs}a*A:3//~>lRRR-֭[ƿΝ;'&&۷@2F" /زe˂ tرcY+..O<))))O>VZ3223*-իqk!8uDXB-Zԭ[75.yxb٘4io D-c$xO8q~۷oӻ".QF͛7g\\M,/_ձ9s榛n߿Y"0)YF }FT׿d{׮]@2F"|gI"8.ҐK,zT#^zi.ܶmkַo߇z~/ SLUW] Hd"M2E?}@(**zW׻wf͚-_ׯɓ%)*w!'OR;l޼UV>ܳgOjծN:%&&4hݺuNtҡC6mڬXB,3FOe?.ʆ<9ÇW匑Hd"ɩf͚>tŔޣSF e(2(%֣G -ڵ5k>Efz+Wvm$w^Xt5\_mcL1LD?Od*''G}iԨQh/2ܹs `]K. zoԨQaaVLb) 4v7nt4E:vhs#c$lr2 Ҩ7L\NLL{r (2mִiSuW۲}ƍK~mgȔ$&e[vn駟ƖtL(c$l3f.9INB\~ZjXۛ7o2%޻ p!޽[k|٬Y3uե^ZZZG/K~)2kԨwٰaC]RR".[L]4ڻw J/@3F"<2lr%U-??_j֭g@CdV:NhpH=}'s޼y*+++11w۷ﹽϲ,XN}vZ;Asݺuն*q7.\>w.**Ui=iҤYXX0q&{Hd"~wYn]9yNj''1m۶}饗.own6!4lgϖ5k֌Qf?ٖ9dk%wԽ{wkO>sssZ~}9 F)/;<GvЎJEfftsiڴi:u|Ǐ_|E9Go߮pl\h;s?aa*-2x Y^v~e֭3<<2e=ٳuC'&.dx1LD"w]XX(g!;w8q0`+|M^G3fLIIWZWvN\~aÇ9rdO>>>磕I믻v> C,_\⼨Hj }Y8E3oȑSNG/<  k2D&"[E#S*$vڥ.Z٣Ɨ,YbCA6kB]vܹsor0ժU۹s׮-((^uk׮W;38`=9|zr6lؠ+xNY8fgݻ7!!gϞt]`&.&dx1LDF%&}YڵLtU-Rn^zI_90,hرCV;K+Kh>9W^SF}ct:J .0;JPX=H$2*;֛u}'?,ǏOIIo7Hfի/ÇUfvm~<[:Eb?-翓x-[~U&YjՉ'dMP3U3X.;rHez)SZtڴis8J .>w&š 1F"<2Ch"QŞ>i{EF@ܙ&.&dx1LDTT"T999l޽O>f͚W\qň# =Ȍ\rf߾}{:k \`m3$99Ga"rZ7nܘ 0F"{}z rl޼y늊{Zhi l+8p`˖-kT˚&ݛ5aD"^ mŊ~Z" M6Ug3M%>|Zccc۶m˚ 0F" /&LP\\w jB"lwq:i޼9UgϞjMx1LxDnnt&gF7/!*Cffz3}|T?*2tš /1F" 8ydrr2f-vĉ[l_7PÚ 1F" o:v… R̈XI(˫;/RW^=k֬eҼeԩF_䕒죏>W@IJ/_{Oxg=&]/_βHd&ߙ!T#Jn޼YCV\yENNٳSRRkQdAJ1cƦM5wvY6mrT1F" Y-[6}|;$"MQQN:",= gȲϜ9e9J#\Ȭ,˗/׿+"߿ر ϟGdY7nr40F" Y)x =:~xNhn:/3B',{1LՈmٲeAxЌ;"BNN DzmH$2W#2t'-9sp_`x,˳gCHdFd>~8p@ɢEXGzz:˲#\ Ӕ)S{𢢢{Nƙ3g&OՅwɲ<}tD&jDf81k,Ap<Ȃm^xe2F" ?O{տrrrVX!o6 rٺu+˲W#\ Gjj6k,wx*c$1c/$[lKъy.r}4}76oQ"رc}ΉNt!V0I x`2֭[a?`UH$2W#2ar~,J9XRD&Z/F[ӟFLam?swGdz1LՈp/bfj֬}v{͛7.((9rd ׯ=z>_߿VZm۶o~wYn]?jmܹT;jJvP۱6mRK/5lPF֬Y; |fQ3ϙ3iӦuy?nqqq{9onnСCɩW߯ٳg˃^Ak'2yY'M4`5"9ꪫ̀N6jHֽO>$55Ue%mk~G2uHڸrg紺{,_=>}XbypDW#\ G,q˗˷aÆcmONߺu/R);u]>r䈜%9*c$0FoΒo6lhРS&'''&&۷O][PP A{Q׮]oVϗLڽ{oj|׮]joժږ3O?9rd.]Ν+g|!̬STiӁ٩&}Ԅj\QԸxjvܩ'-77.G*.#22F5kd!˓mYlbb_'d["]n]k+12;;5m]?ֆsUH$2W#2à|SF={UW]ꫯZرިrrW>L}S]:t7y7x≗_~{|~T`96N=oSݴq%ȓ&gv;;5m]Nm.sUH$2W#2Bd~Weee;vlذaw76jhɒ%j!C1"77WpŊc{={Zeݘ]N0Ao۶vG_qu)))}׎i΀H,TLn"|7ݺu7nמ+ˣ(..^~ ɩҥK^h޼`pD&Z#7ߔNziYz=zd!R?i9,&IʦMnƝ;;鶮ZD9*c$!2SO=UfMIiӦGXjذe|e}ԨQr~ЦM4qȑOtr"r=ԭ[~ÇW49޽ ӹs?i08"py뭷JRG?6nܸGe^z6mo\LmM'W#N˝䶮Zm`<8"ӫHdFd#xd"8t?"pyDfϞQ'#ܥ~QLZCEp-iU.Ww^eD"p,=2e\.¨q}.ϲ G#G,{1Lnf͚5o\"3!!M6m۶wB9H/]Tϙ1cFIIp,祦,{1LӻwޤDw„ N(d/GëVX/<2e r4XrebD"p֭[}w@x_uUJ ?$bD"pѣGwQEmݦ_͕{ϛe {[oŲ Hd."'OLNN3=CL8q˖-+ dAɷ@9;w.\[ڻw E\xӧ@9sX#ZLdaD"pt>B8v… RcE>y%{wW@ĒS +<&ϰ- 3F" ˙3grrrO>x믿^3e[Fd\o?6&{Hd.iӦUW_ݱcGAA 俲-#*Gp>Nh=X=H$2W8}tJJJ>}֬Y_g#>' 8`M#?Ccڿ(˭L k2D&PΜ93h a>}zݺule??w;Vr[>o8`M#RNNί~+f>}yik~w 'NhMX=H$24}9sXlңG=.mڵke/ k2D&P۷[x޽{ey[me"pB 1F" T={Z6mYyk`]Nh=X=H$2Ծ}kFoJ?[ E@܃5cD"J;!SW%d" Nh=X=H$2;ݺuӳ|~?8`M#j}}p˖-F$/;vx=dffwVr[ pB 1F" Tz.ep/үpB 1F" T=Ƈ~Xɓu~dS/"pB 1F" cJJJ>}쿟O}dO ApB 1F" ȦMWW_}uǎ2(mQW{0܃5cD"p3gL>}zjժWeD,Y'4P 5YDH$2kLBYYYE,ruPH$2kLB۷:Z:!!A=+HdPزeKՙjMްaC\\ѣ]dD"p˜LY05k D c$5D&T-Z$&&vA丸mtMN@d2F" ^Cd@{d5ڵk2}IOOw"1L"ܑ#GbbbTa6mڴm۶|<D&x nЫW/7t/1F" ^Cd,\PEf.]x1L"\EL #!2%?c$5D&|SNM2>CHdFcܸqrJ}䅖Ggz1L"0mH$2kL0aH$2kL.0UH$2kLn0Agz1L"@Q8c$5D&0q>:cHd/haٳZj^{mN n:}0GMnޠA}"M#={;wlذT;{IJ}IX6nOȔ(K=+u}Wf͍7`]vYqqP0`d|,][Sd^zj'Nիo߾ӦM[vڳiӦg F^&ޥ"c$5Q. y 8E饗:t+{kNsn aVXX(A)۟ɡCGdձcǴqqΝ;˪kQlN7?2][<D]Ȑ{j0===..|Px Ceg˓ۿl= ۫='L_kw2,,7oެ{19M)Jqk?{~:BR_~J%𴑢ZjmٲE.N4=r`kػ0)(&l30l ⒈qAq $B.Ѱdpݢ(7*.D0 (v)ׅyӳ0]u\էNWUw󡙞͝Ε ܚ L0%@9'L>wolذA/l7CSVbcᆲ]{n0[dI˖-;w띥A,)ڐHXRM00Xpo靨奥7=%سڐH2[l ʹi:䙭XȽX]7M L0 !>|ػQ%%%3gx<ުU+7g%'ϗu56$24L SOyB`ƌG٫Yf*g|}Iˈ#<= L0 !s0pZb;㙳˖-jѢL)0g&M== L0 !iӦyȑ#fN|)3ϩзo>}x;D `B&iSN.l>G?8Ci͚5 6}9jP5ua5r1_iӦx 4 ڐH2H2ewa@?*!/ON'zխ[cǎ*HPVԯF..F.&S^?M6U .h۶_hC"!LC"L-_{:I GСGdVVVmҩ *yjb9o[`,2_?6$24L Ҫ2y䑦M֭[k׮|G=3/^znٲekݺ2;tN;QFh޷ojOgڵ7e{Æ ~Ed{Ν_lذ7ߜ2|&Mԯ_]G"m6Y7h@3|p=YfMy_jەl,]TmOSLTܧN'S"5{BcGr~Hv*.Oۮ${9=4C?:t/g%ϹkDIva$'yx!빙)/ET_cW(ڐH2HӆdJEs '|O>̵k&F 4n3o<٫;r;ST?dK`g)tEɹz)Ľ{={ 0ӟt5\s'rBI=4q8={;馛|Aw%W61}ϿbBoZ!3K 6+mH$di@U9dn۶Mv-ZòĞO^{5Og Su͛2$++kҲ{N8IIvI\^-dc l*ǞrI&5k,#NիudxmFIx'ˑ9P}V~zirrrd$yڧ+p$D\ڋQ?LBx빙)/E,kC"!LcILU吹qFY߿)BmٲG΃ ~PpB՞(Y_W_}l :?j8pl*lɒ%)QEȔ~%[ncƌq*~RUHTy, veܸqHzsssiǏ$d撻ӮМ?z)-Oiƍׯ!'>]GuD |ňtM۫W/#n)2L0%0UC뮻֭+itS}{tnӦM*|ذagyVZ=C=Q`_~sϞ=fϞT>u]נAFr-).vYIem&GhذK/^+Rzz꩷~݃/)sTzJ$穞;wIrmwyGO=] |9$M9/ԩ]m>d'% <ҹM6Ow֬Y/#n)2L0%0UiJkĨQbF[N"wBk޼y3ې d `K*`SzWY ~xV$rUV9λ;=2/5kw&kC"!LcIL5m42̽{֯_sϼŋsrr֭۸q!Cz{dȑ#GiDB&ƒ jܹ VX;x'mKJ6$24T8T{M02kƌGN`mH$di,pƏa@F֟rkJ6$24T8`˖-?w Mv!t>KJ6$24T8l&LPe@,\7NTKJ6$24T8l3fLYYw -Yg `mH$di,po.93̚S;?kC"!LcIl_?2xܸqV,)ڐHXR{,[LO<j ̙3a„W^yoNȔ,)ڐHXRٳgܹS+LAt{ a?}v L%%X `K*DVֆDB&ƒ {U,y! @$lK^nmH$di,p '[Œ[ `K*DVֆDB&ƒ {U,y! @$lK^nmH$di,pN7=ɞ0%%X `K*S,+**ro&'Kuo<`mH$di,pNxɔ=ZW_}uvvTnI&I `B&ԚL0cyӧp҆DB& j9ӓ0ZJ}GDhC"!LCZVٜ"ad"l! !d@K?g0X,VZZd6$24LȈtrfe&BڐH2 SRL&̠ L0 !2(Y$aڐH2 9 hC"!LCK̙$LF `B&ʙ֭#a0ڐH2 $$g{2 цDB& {2̣ L0 ޓamH$diX@x hC"!LƒdG `4'<ڐHӰ=цDB& 06$24,h JKKozޓ={(҆DB& Ŋܛ.{ݛ@DiC"!LC ntߓEew]h҆DB& u5婜ޓe;77wĈޮ@iC"!LCzᇳ $[{lٲevvvqq+AڐH2 I&?ڷo/ɒ0^D6$24LȸAɻzNnݺz;Ѥ L0 !2nڵ*^*-[+` mH$di;vT I! !d@<*dvЁI! !d@dцDB& !a! !d q&M4bF|л&2d$xL `B&0\1f̘no27nC46$24L0imH$di2!a‡imH$di4cƌÇҳ:/ ӧOoݺu]'CD)r]5j4a„]6oWqΝ w  L0 !@>#GIF/EX,&9S6x:u:ݍD )%˙2%t,\P͛׭[7.^|͉wAiC"!LCaÆ=_uf6mT^Oۚ'etRR٨VP*u1\˶mVnCywf\t d_o۶w,"A `B&4޽W^H֭[Zs=w+.|ЪUN:ynTH>nӧϦM[UYjV_:\sΝsrrl?2e/rbx1E`DZl8iҤKJ̥%\"Mz?>%5xNi9_8驞j3,--U7ży:tLEڐH29'֭[ ߷]v".^{MmϞ=[ґ{_|Q6F.~n_/|I֭e xٖvZ9l%H?/e&vء6bE]/&٣ڹsg:uܳF`pMv l )-/m߾ڳglKL>|}% ށ)YmmH$di,x@DEz8p'rO< T Ex\W\biӦl%.Zo߾5kTOV}qэLG{嗻v*Sd*Ou1E`Dٳg~&O{9I2eee-ɮ KB:t#<"ФI?X5:tHnfjr͒~)\eڐHYtBN:iǻwϱkߒ<^@ 'zꕝn$sxS3 a1@ `; QfL93͐m۶oQ}əǏ?eNF `B&rÇUT5ae;//v>7pLXn޼mj(mH$di@geenZ2agAA̝;@ ۮ];w mVZdj{J `B&~ݻwΖ)}]tQnnjժU׮] d K9̥ L0 !v5iD&W_-?  F-Ӷo߾y-Zxg̥ L0 !x<.sڵ @Xegg777גQ! 9 Dw! SBѣw7pO~oVV׻hڐH2H(..>s""G}ߖ-[?6$24L *w."UV2E `B&?@d+mH$diW_}; |P&ĉ;g_~jBT&ɓe DjhmH$diY<ӌ3e u'~moS|4^G2eʖ-[O:PU~52! !dZo]U@%1a33Z `B&4{/5͛7;ic†Gf6$24LXhΜ9h.p۷{Ԫp1aæ3Z `B&lz{λhq&ұcVLpԌֆDB& |7{wZiӦYfy_ 9&l?! !d*_bwn޼I0aC. L0 !Vy$ԢN2I0aC. L0 !())3gw5k֬Uw؃  hmH$diNj/a kʕ .66ҙڐH2aӧ{GȄ3gz_  L0 !5G}t'ƚ5k6l]G?:Ҽ3fx_'le9+NxQFۻww_Te!<3Z `B&1m4(O~1c$guVYYYb]^iZWM5/II´KR\7akd&H +))#^Wk|m8p#|GVK8=j^i@nȈM&͑\)5rf͚4\kIX%.ڶl2`znZ.wy'Kz.]wޡCvi5/~o>uDm۶J\>|pSO=ueyyyAmggg/[L]>zgHŋ?c:AI~a)h@ndCwWTF~(M6)VTT$_xdo;OH;! !d׬B\C Qۏ=X dQxIh $aUViݻwwg)HW_{={uȑ.WK5\#ܹ=#~iÆ d)\(Ii˂mԨQ\p{ c:ADuKR\7aCf{饗p Ҿu֞={d#9𘡚bdo;ig6$24L#U,^X_eu5uTO>Nsm%%%?֭[zřN uY~{wQ\W^S۲{9I񩧞SqvYرC.]Z~}՘@rH KM$u2 ]NGiNPo8FtN秝ڐH2akVEj\v\V+|NТO>ř{+Vwr.Y>5,Kz|kw_z(T )?@HW_u?_ޮ]Ku]#4GNvR.Ir݄dC dFk%. Wo;O;! !d׬g}vI'egg eƍ)**ڿ-e]~k˖-=zP=yfitW 2dΝ;U DW/Pueܸq}͚5rJ-cƍׯ!GNv:^X %)PjK0`M7$}$+p&Ɏ)x_%{ўO;! !d׬.Y6jHhn]wUnɓ'XomڴIVFm֠A .[LsÆ ;3eڪUzHI+eu{ꩧ~trg|jSNrw]';fIva)h@n~T{-Zlnڴ_~jΚ5^z?J6 K<tdo;ig6$24L#F$ʏۄ7o5E;! !dӧO. %)P^vʕVu֝wywyA;! !d5fEu̜9>58a/^Snƍ2ՠڐH2a^z>P-[;x_  hmH$di~i 롇:z|ΌֆDB& L0Ujˮ]!ֆDB& Xbޅj˔)S:}U$!ֆDB& -X7@JLJFkC"!LCȄm⋱cǖyWL8gyb:LpԌֆDB& رC|@0a33Z `B&PZZŦM6u)&2S+<۷oo5Pm~52! !d„") L0(&,ivNamH$di,x@D1aHs kC"!Lcg" DSX `; QLX ڐHYbfֆDB&΂D4;6$24v< *JKKoz&g/jC"!Lcg"7'^&jC"!Lcg"9ӝ"BΚ L0Ç檜&l]{ޮΚ L0⬬VZI +? _vnv\mH$di,x@t=;;u2a۷o߫W͛{;=;k6$24v< Z $gʄ+ 쬹ڐHYh-Z8'ݻ5W `; 9orssUٳw7(jC"!Lcg"sU!"Κ L0ݻ˄+貳jC"!Lcg2;k6$24v< 8&MV>L߻#4ٓ8Κ L0t4nܸR'~moS3!gIYs! Nf$3쬹ڐHYD F3d쬹ڐHY]3f>|ږXxYg}嗲}wر]vW\qg[С}q:gڵQF&Lڵk}wܹ_~{Ys! !>#GIF/EX,&9S6x:u: Cd}3<ԩG?󜜜ĻfjC"!LcgC 9|I%tIG~%9s͚5_mwH"0g.n~LΚ L0Q׷oߦM.Xm߿ĉ%RW_}vZ8rdayyyj!a" ]7ސ y)o?` ;k6$24v<|pnnE|g 6͛7ÿN4$}=j;dɒ?]vZZpw1,d?05W `; nذaӧO%L?k׮ͷ~E5| RKnذA6^mzw' XΚ L0ѵ{^zqHbzUO0AmO2ܹsqq|ЪUN:yn+8ڷoߥKĻKrSgӦM%}srrwq<9r'Zl)==I&lݺkU- p̛7C@LΚ L0qNlܸ}vmeC2m݈c."'IȔ/ѣݐ⾞mɄݯzWXd矗ܨzTs{ 4HOs:uo_|kZfϞ-93j?~֭[}I2;4bӆDB&΂`3jԨoYtg}Сn/ܵkW #:,'(dn߾]X<+W!3}SܽiӦj'z<3ԶK:={ׯɓ{yN<T)YjҤɛon ʼ/L8~ڐHYalN9S+ҽ{^xA֭[WlZJGܱc?dov{!3NEV}>}r-;wtIaÆ x$acZv?mH$di,xȈ 6'CuO?pjٵkD_=bĈd!өﲱX̩P-'I=??_}ر7pgo)k0^?tϞ=w}y۷G}ݑ<˗/SeySO,8~ڐHYlN9s۶m?/++k׮{odɒ-[vyȑn WtM-ZHd!aOqFh7xT<om۶(?'Ox_'?Yq 9! !#B5؜4rf$P [,8m~ڐHYalA93!3 <|VsiC"!LcgCFp9̰ g,8=~ڐHYl98m,8%~ڐHYl9F9axv?mH$di,x7=ͳ7rf aŒ8쬹ڐHYP;bXQQ{3qIuoCά&CΚ L0#{wIﺆĤ'NAU?>l <jC"!LcgC>|xnnZ߫&yyy^{+p0v\mH$di,x5YYYZ5 6YPP -/+p0v\mH$di,xMݻwnݺ իyNq8DYs! 6^ەW^)?ovo'8c" 쬹ڐHYPx-I{no'8c" αjC"!LcgC-o~V={jggՆDB&΂ZV\\|=_La"쬹ڐHYPw.ZAf1Yv\mH$di,x}U+4!2Κ L0/wyg|AlwA,X_z_aSl5쬹ڐHYB%2nƌ Po GYz#<"1f˖-ޗ3lj65W `; ^x[ӦMۻwwe:x`aa̙3=}k 쬹ڐHYBb_K9acǎ---ưAm ;k6$24v03gM ٷo=Sq 2x l{Ys! eի{9 Ƒرck2l5;bgՆDB&΂Y|ͽ]P6m9swTRS6v\mH$di,x5+Vxl0׳>yf8$ ¦Fm쬹ڐHY2.`>qPI M lYs! ePIIɜ9s5n̙s S5쬹ڐHY2_ܰawӭ\r…ѐ6 ©Bv\mH$di,x4}t2 vη0lZjC"!Lcg GG?ƌ3!m6x≲f͚ zwWIvJy5jT^{z%½l;k 5W `; ^M6ͻFKP^{EIԤjd-^~A\ҳKr){;@u6+ZIIm>5{^wlԭ[cǎ6ȨgOHu쬹ڐHY2(i! =uDKo߾} 6,..:p~?߽c2Ysh[Hjk֬Ih韷ۤ<=C,5W `; ^U!-l۶jРi6|pwy׫Wu֏>hj~֬YuRNB l Ys! eP_~5הJ<ܹ=ܣ/nAڷnڳgOZ?ju׮]t,ŕbw޽gϞ.lȑNs6&~Y`Hܕ+K.cǎU}4hj޽p,X JQI<~H俞EIUo~K.$gks("όl:tV/}4xr5F%$?/yRοۭ޺~C%{L2wuW^T{AԹ~˃7ndѣGꎁF(,F3-dgՆDB&΂AM %%%>suW^sׯ_ϟO ;wSOŨp ru%kܻwo:u{999Ns6&u$꫉OºuvQ$_ϊ+N9KasgRZ63[oռys^SnT9߱cS aUIPo& Y3Tc㤓N Hmhg z%Qsns l Ys! ePeӂYe7ݜo杊UE]$ ֞={ʒ2ս .@(}$oSO>dF5k6}tw-+뮻Nr[R4zwذagy)ҪUzIrF_Td9Y#7mtرr-o:tRՓ]wu4JgҤIn) L)U{E^z%W,;8A Z\I2$ss{<${PہφϒsF=_u쬹ڐHY2(uZyA Fb(ZaBƦ5W `; ^M>ݻF+WZnywwz{ɰAhUg`[Κ L0/j0-,^8''nݺ72dHii)3g􎆴1lZjC"!Lcgˠ^z>.`˗;ѐ6 ©Bv\mH$di,x~ڻRz衣GzGC6jl Ys! eք >]\v1l652mcgՆDB&΂Y+V?wsM:СCqPI M lYs! e߯9`7x;am;k6$24v/Ǝ[VV],3<}aفm;k6$24v0عs>2؜9sfϞ}᫇a;v\mH$di,x!qȑ'v)..(j*K^6Ȕ:-agՆDB&΂*EEEǏ'CQaÆ9sL0a޼y_Q ԚƳjC"!Lcg X,6mڴm2v?ۿ[{0ljed`Κ L0`C0Av?mH$di,x€q siC"!LcgCF0CdO `; 20`"~ڐHY 6dӆDB&΂`U8ƍ !2 L0`07n8frfu0Av?mH$di,x[YZZ*%%%`"~ڐHY IL 9: ;6$24vM4i֬Y, dӆDB&΂`W͛ٳe˖6*%Lş3Gmڴ8p`ݳ~iw ;6$24vl:LJ)gs]xٹ$0s kC"!Lcg" ~>`VVV޽6mx>t0T]lٲ[nM6#aSX `; QLHyNΝ;|={Tlܹ SQ9S>PA vNamH$di,x@D8zΝ=(";- L0<7T4i$??ԩ[lIwѫWDhC"!LC+--b]J?g05ȕxw L0 !2"Yل 6$24LȔ9 3hC"!LC J3I06$24L,$a$ڐH2 s& цDB& aruH06$24L əL„a! !d@x hC"!LƒdG `4'<ڐHӰ=цDB& 06$24,h`qƍwr'<ڐHӰAI3fƍə006$24,hi*aFii)9Q{2̣ L0 DWbTș:ޓamH$diX  hC"!LÂQ,a*LD06$24,h9Nʄ3Q'<ڐHӰAfIbxܻ# 'T6g5ȕȽ;Z{2̣ L0 d\QQQ~~oە+Wz}vT̙r^9\\wPxOy! aA0x饗5k֤I>}~T2a*)rEջw윜e˖y{dG `4~:++?UW]զMNϙ˖-[SeI ޓamH$diX ~&2l{{t:˗/~BfYzigNP"!Z1L $ϟ߽{on}8gsz dB+FѧOǏ.fs6wP !Z?~T?x,kL5CRЊ'O\\\TG5cT9;T[( gw^3S.L5CRЊƓ̇63TdP(!Zx'۷L 3ռw2( h|]oʚt3S,2's[?JȄVf2Nwwwsf*[MTUJ!dB[`0|ŋOgs:@s*gE( -{{{-ϩf !dBd< Jb~t3I  Ѕx귣s:y{!:2&h4yi5TR-YV , , , , tB-= IENDB`onedrive-2.5.10/docs/puml/downloadFile.puml000066400000000000000000000030751513710110600206250ustar00rootroot00000000000000@startuml start partition "Download File" { :Get item specifics from JSON; :Calculate item's path; if (Is item malware?) then (yes) :Log malware detected; stop else (no) :Check for file size in JSON; if (File size missing) then (yes) :Log error; stop endif :Configure hashes for comparison; if (Hashes missing) then (yes) :Log error; stop endif if (Does file exist locally?) then (yes) :Check DB for item; if (DB hash match?) then (no) :Log modification; Perform safe backup; note left: Local data loss prevention endif endif :Check local disk space; if (Insufficient space?) then (yes) :Log insufficient space; stop else (no) if (Dry run?) then (yes) :Fake download process; else (no) :Attempt to download file; if (Download exception occurs?) then (yes) :Handle exceptions; Retry download or log error; endif if (File downloaded successfully?) then (yes) :Validate download; if (Validation passes?) then (yes) :Log success; Update DB; else (no) :Log validation failure; Remove file; endif else (no) :Log download failed; endif endif endif endif } stop @enduml onedrive-2.5.10/docs/puml/high_level_operational_process.png000066400000000000000000002413421513710110600242670ustar00rootroot00000000000000PNG  IHDR@~&!*tEXtcopyleftGenerated by https://plantuml.comviiTXtplantumlxUmoG~b/TvT%WI!_ws2{}f0`X= 1;/<3B\u(/}œJ`)~{7}Ν sw]]@љZ쀋Q8S ;ϑJj+W"nUwܡ-;- (OLM+Lds NiӨ[sa |Ÿ!ZSDĎ"ֈ e:-)zRB XH4<`'U &U, G>(1 ƋiJi;5y>yQ~z2|(4HVjVּ=T?P˯;< 0kc1ځ#&`4GozK(8 `As@p4 + `As@p4 + `As@p4/?4$$d({| /,c̘W,RDχW 7lᄄ2E+TH]kyt"BCCcbJ|s~~׮#ڔؿ?>t6±y.]MN.G/}=/_}\ڎQ~񐎎޽0]h?8^~3I׫f|/ԒĠuZ򇸸֭,Yo1{ڵtS_~9M7u͚Mt֭~k֬SR-[iӑhذaK||u꣏>ߴig{≧X{_ylr `p)`򗑑)=6\ ugmj. XiM~(M§|{VS^Vw"K/Rzz)[6iРgM%Ğ=UV޽`̏腅O@d3f<ɏ(Ԫ5uJȕ8ȖۦӨpr-J ¥OMm̖SH<,ByÇRIJO=5\.G~w84))NA{ ^GVL_|j}Z#(}]Na~ʦi/]Y>|r*p-.]*+4jԔ ye߼y׼yKi( Ko9A͚.Rd*=f-4"##'On^8S4 8̤p0el7/z2t+\  +aL:bJ ,~ƖǦM;?4K۴xKNDuo9RnܸIɨJ%{J_GO>YMב.bFO\4v9.nxx8}Xb4&LxdRֽtbHUu׽:tfSc5QFntD|@_Rhviiw :B"ͮ]GHWzkQ9߹3&ǿ+򑏦\k9IzQi-as}SlQ|Jck5KHTm}ŋ7-[])`^8:[ntD ؜9'%%Ӽf @C]Yl hdTxSΘ, 11%ȕgfLҋ}!`P +` `pG( 7h 슀 Q<5vIf`܅yz1||rT;gɒoڴs%uԓgƒ%Kv0i$^Z?PM]`9TVo'Ej/-ѯX~РguaM.!R`倀MVTLq =8. `'LR(q/zVַuPٲI,3FI J_S zߡ8k-U-cǾ#' qq_tt &j-HӮQA{Г@#{ڊJ 7? ` X0>? ` X0;_oң] 9 `Mz,FBeV:v@_d_8^.ָ%￿ɟgnl4Ë+LwuyͲҥW!00H&G.hxvk1DzJH(3dsl_눈23g(U "lϞܘ3f,lڴc W@{XXXv)mT0<&;ɑ2^Zc$`={1%A_Z좔`MN.w`y'>WCCCXavRގ>69ڢK+`{L=VBҕRYw{_0Wv[Ywzп^sQ}@l;pgCymQ0=F)R N^y>-hUNu뾗&m3@FZ … ɭ.22 )"h_t]Mvr,nذ姟F&m"`c4b+S +[ѪSjܮ]Ǒ#_+Q"Vw#>_0WegPFZ8j֬m|DP,Ǎ}ҿ+Vly'۷pmf-JI,ZEk(|-&~@_{Õʗ*jdL뀀vh>Fc~;F9s>&"lܸ9Mپpg4) {Q[ !`Zݬ񫯶8&G"$*0Wȁȇ X0>? ` X0>? ` X0>? ` XB^|q88r, /7 9^}uzw}F ؘ1oܙ<|8>%Kcf-ԎUuጌq&`gϞ}7_ye̿<^}ŭ @AG4z &`_8 ہYߐa;0`,<Nv `Xx@,8 ہYca;0  @@@$0{,#4lfx@,8 ہYcp"#4lf|x@$0  @@. Yn:0f=H:uF-r:Yzȓ4)F `0ɉbWhݻw)ve˖¢&C׭ԩS_~-*VxkӪ07yv `0&6n8X"; 9vٍ7&M Mfb'޽{ٲeXLlNt[ˋMBR^PNEkСNHH/L̹L=^zVV(Sp%KRʗ^z-|IS/nݺ%J(RHLLL&M>SN)7LS*zHNN~w(hksB.D 7p ]#FQ DUI&q޽{=FcǎQ^2֮]gϞd)|-믔N[jE۴iUٍz6~xOo߾}(@dX')Ov6s.v%))J=Œ[oN;w̧f"ѣG>}QTdd={lȐ!&֭+Gr\(w sT"SE+`_}˗ӌ⍞{ǎE'O٧LBPRrdJ@3 3fڵ>ug4ejr!NS|ʹX jԨk.$NR&%QaÆ xժU7o永Ē%KHO:ͱ3g30xQxy=6*M)D ݹPtY@F/psCٲeyQZi@o!@ /SsJE Bo~}LFpJS 8g|ʹ#F\moMaOE^><ɓ'W 430 7.seRR@6s첂@F/Dq.K*&>LYbO5yw!۶mIUnn.KbŊxJ9zhBĂ;W&=u]ݼr].9 ebbbȵyAG~rFa 0 O33)$N0AԞ73PnvY?!wP 8,Sx.s!%8iӦ {@^>'\XFzݺukڏ=F[n=z[iRuaRdI*wԉ5jgp/2228VZ`O_uY˥77YYJH+O/_o> 8q;FN?mР%p-Dǎ۷oYJ6p@%-z5kva ݻ7''Ȩ[ˁ1W0EOFFp׺tBK.u] ]"#,Xoڴ ,(Y DڵkiJ0|P`׮]r…Y[O:{n>K.-r":y$uV9VhT˱c&NHSCXhҵC}tm)%0r20yIϞ=Y€}ũJ*QDtt4ܿK+`[l-87|#y NcB)+f0Eq^Q5cbԭJnٲ%٨Q,Nkm5 0HGl߾< ?>/_f \M/Je/K4S]ɖe-Tȑ#]10K$  `Cʕ+7nXONvŊ>tP--;kt'Ny 4*0ܹSծ].]omVQQQtڡCI|5֒M˗/Ex72F10%=0+K1cl3fLBBBttt 233Miii%v%Sɓ΅})]4^zFF ƨsΉ7t5ֲ{nz񯅺F% `XGi"X 8 ہYcp"#4lfEGi"|5BErD[/kG7 00xm7f2@f3;v,11qٜ-[T?e>)ʟL2f`?Bt7iѢ?Ȩ+`8 L5Q FԊ ԩSgذar+W-[vɒ%X%&L@,=hfȑժUŚ5k"#fɈ>0HE.XJ$0aMxqKXMFNѼys^v GLdn\bgQ.J_Dd4s}ꩧD^]AioYDw,l2Bu:tHJJz٨Zǵ(0H3Ei%{Mkth>CyFʕ+1cZbt}M@~47@,b4u7!^zo֭}„pD'ťQw? N:E36ڸagQ]5hIKKԭ[gqH}?r]'|ʕ+\ #,Xd&:$Z;v4׿jԨAb&\ц#>)i B7n\hh(;zݍK{u] OY(gri^HEٓDQ%&i@,cϟϿw,صkwڵk0@M,ظqcʕJ*, ` H `{ѣ/NMw({Rx9: YFwE,\iK(Ѻuktބ͛7⎀Ux*Hu `9s&==vj" ?> Q>SA4=~XT$䫯 {,YDl)RL.a֬YժU ˡM 5FDPWFُ=ڪU+. u `o=zhܸCΝ;S .ݦo#K;3)G1&47J y @ioYD{,~U򞒒"Y?D.YTkKwk.#Ӗc#?.\| @47@DH•+W6m/rr.%lKMO0K78rcdb^Qz>(ڴii0a**&y#ӛԥFR9F1ͨ}zΜ9j@8\: )0+WL2cǎ7xƍhp9 `Ec۽{ *$%%URw倀h[n;UO7)Kѵk|P/ `YvЭAm2 `9}ԩS5jtM7UVD%99χEﱛ7oׯ_ʕofh@,E+bń4,%%: %0Eߧ8L".ǢO'@iOYcp<Nv ` H `XGi"X 8 ہYcp"#4lfEGi"5[N}mNSA ;FRF@M M40?<@@,)0XBg|-`vE|"@>k(@,ƫ&NFqժU)Bc5:@ϫf]n&7 `"{>}TXhѢ%Kۗ,Y&Ga|[;VT)őuz,P*WLͫY&_~af#['/rJz){ٲe˔)C7;;8СC[hquQ !!,ӧO=\OT+++,7tvΞ=qL6MW`ԩʯsB:e;trʗ/w(\\@( F 66VFDDT^/K@\c4#Kyw_N[JTɓ'II<}]&e8,i⋺uҠ-RHLLL&M>@øq(c||<ƈ(.S\4~ph0ƚk(~ˠ^XoZ;vXժU)\v={-믿\4)&< YҸoN333ENK.˖-O>v]4iҤwT r3ӵo߾CՊ\, mV6mű<s]kv7oj$%%8s{@C ! (GZfMw>!+ҠAΝ;s@b٭[7aQy"Y%5kV=hIcDFFٳj+^>(iA(@U({\1 -|, R;#,7xʔ)yF!NGZ|ծ];Q].۶mۼy3қѣGE祺xf@0%J2 Ӆd” <[o%%hl)@rRs}'ەd$4J3X0!['gZBHrK}̕iQo<`yW y}pU<8D3P.جY3 X"M+Ux7i&$AЋ7n\DHua. _м\N{EѬwժUS1G<#;v,9k~7&TO~˱W.&C70z \y[Q=[dY<X~آ$:E]I0GRR~`x6`kg`e*ԽڂFH>%bT~5\|Y5m۶+W|;%%onܸ0ʥu֭^z,5jkeˊrܹ8<#|"YU1q:ubI<(,_~_~8zhVjժ;S]nnndd3M4233_$̔8~?ر#44tlTzW_)RDkOÇ)߿_6~' ˖cǎ۷?{,Iw1p@sdpKrÇu]ZhrJ $K 4p:yy J}(*&Xh޼(믿Rjb @,=v֭I0d7|C3e ;u%ؽ{7iSti1zz)_%''/ZHD :Td?4O … ݩNWd֮]KS4텇pN6@ZlDQ-Nx"+b9BN9;;[6 ,..ΡqBX%J(Vu4/[ĀTJD ~mr˖-Yŋ*UGGGS,)e^~夤$9sʜ>}Ck`EioYh,֨Qcر[n;wv8V˦ ?SV\ F0p՛1cvA˖-iE{cǎ͟?ҥKtf.G7"""\fcv\@b4e `1 q޼y q̘14k)5x^z%4jH(Avho9³j*̬]vѢE#ۙ_x;uؑq BY݁(sN.dtb -Zhz]HRW/(in/ 1r20իW7i$&&|z'lٲʕ+GEEL6M(ٳgStiիgdd8 \s( )lL>{NKKӮBtY]ɓ')pBB%nР)VH;t [R'xBĘ8 ` EuVҀ?P+WΝ;Wpr.V/͝3gӧՈkqi4}]ma -[?Gi;v76nXZ|j@"11kٲejYrerrrRRRÆ NrB@V|yzˬQFJ0!50 aDŊoL|"<@z'NTE"e޼y,]r7ܬY3i"V/r5nܸjժO< Nv `XȐz+WLLp"@qnAr)i"zH ` Yca;0`E,#4lfEGi"ӰE0a;0Xw߅\xg7nYD:u|"ի6mSdvڵKޠA+WȖ?S'֜0?Hƌsҥ_~%Ϣ̙CtѣG*Uj߾}"{ҥgΜ)h"`/_VM@!`?~75QF^{Mtq⸚}ҤIʕ#mE8k֬jժEDDPsbccyKdddPQ4 LNN78{wB:JyH8qya||X9ETNmfT8~KX"wBBB۶m.]z1Ô`R&'|B.씷^z/ XΝϞ={tر}tJqw 8dW0E> ?^N~$`d%aDzӧOl{vQ́+B({^zUT, 6ܹs'lB$ro&44TΞEjg"`{SNQvO?sCΰ'9sF+-Xlٲ 1ӵsC}=j ﱲ 9Bڵk; dk׮&&jٺu+^DŊ)j-[nԨ+ThZMem Ú&@,b;9"Epn;vۭ[zqm}]wu&Mr)`tzQ9̥KF>2e843030]c=j A5LYXTͷx̙ݻ7lؐ,[&"Ucƌ)Y={rС43s)`DvtkFHVZEQ4z7EΝ;dĉu2dֱcGj۟ym]Bt %֜0fkc;3N<٩SRJφ+Wlܸ1IW۶mw!gjqلwRӇԎʬ^zFF.555&&&22^zO x4 Io>.. m]Bt wx kN˱x9suEDDC+~[p4@,b=vӦMݻw7n(믾}6o\60|րM222jժTreE~Ǩ  PM:uT|yիk^lf1PBY'z@ڵk+Uĺ0|4{o[.bЂE"eYnFh@ "ڱ(&d^X Y׮] c45 `q9u'@ť<Nv ` H `XGi"X 8 ہYcp"#4lfEGi" 8 ہ3F/[Nf[  _5j:0`kڴ0|F&M `0` <| 0"{, D O `)$+b!` ($VHF~H!0@5 `)$c"d,B@>րY|5EVTiРAǎS1'޽{t钐Sf#FĻwӧOŊ%KLKKOD,MQ27|)SDB"`i'0`Kkٲe߾};uTX1:رU]ӪU+:֭[իG㨟\rNv Nuڕdĉy.;g,Zh.].ҭZaUHԡ{ӧ˱rʕ+^tJF>e(y)S8|e߾}9 |rJPD 3fڵ&1Fv.Jh'|\p=p^O;#R8 f8LE5i҄"pfrf(k]4&ͽCy.;|(Lņ8#Gey 3|A9&8pرcmۦľ[Rʀ0R ϧf /E)dff9i B ۷Į d!rѣG7hЀc-ZD2eʄ\;۱c'Xx\_|AN: "ñtz!6QGY2[ƍȧ0sʷ~Z>(ݺ5a@/A׳pVby*@o|J i1,,CI)>77%bŊ_ J#?Sͱ|v֍BUp&l;g:p9yѩ.s &30)%ey'D|ae ɟtCA7CCCsB:X=5jԻw֭[1ѣ,l"=z[IX6J,٦MJL3֌ &FRRJz╁?3Eܹ]4yEQׯɅ+(ԩW~ZbŊo`4o`]n"`uYk9dG!q "d,+`Dfffݺuy9w'ٳI/N/*G}499QQQu0`M(1%OIIY]f Hц'x^zycbb7oN_~!a+_}PO 6 ۷yk#,[z^ ƍy  ` i@f_u'NF7 +b8 @ =%Feˆq޽&/yZ4[liԨQDDDddd5>CwӦM#P`ʕ"K8p|*b#GrwG`َٓ 3{:m۶\?YLBf\|Y5ف;WNSfM ?s3gŋC-W\xxxrr!C.\ bccM_Ü?~РAIIIjժ'OfG}RhbŊldK VBӧ;V1zRJ?Z[KuQxW\4i҄9._NiƧ\B%T]QI8+VH2rÇ/^vb oQ8201{20z[0o߾CS2rJX.k׮P(Lĉ"ׯOsp ũxU{&]w{ѿٳE|i(IOOX24;vHŋ}ڵ4333/sz N6-##cܹUеT\i8|wi\\?v]QK.'i_e.רTNg̘1a„.]8wvWX}#0ހEcdz)`+W0bAF>5rOa{ҥK9FCϯi-O'OR qTF zr8eHN9rD.Ӝ:u?@hh+ӧiT~}~Y/0aĈr2lk PC=4jԨoF~ܹgR **.5Fal=fO?I[E:-Z(r9t)|q>2e څer5+P{pF_hn$%K%6,#ŧ;w8O+V>,D"~inˊ>9sfiT_|k: +,u7jyٓ饀gϞE ( r56mڄ^?hԩӦM\}%{ҥ>v'|R.+Ǐ?o<˗6l̙3z)2'yGRR;C[2e8(@Ŋs"ƨ?ɓgϞݢE J!br!n^a9[Qc{̞L/'U9/8y,CQ|PT/_Z.^Hoaaa$T@N,sҥÇWT111s! y晔Qe E3fp{po"ؽ{wzY7o. e4!.u+r5[&&)fΝi$ E\a9[Qc{̞L/̤Z^gH:r9>lƍ#""ԩ~z)Wx^~ԩSϟW5k4k֌@]?jVCwoT ,'ӂ{ _=-RC?d,FE{СCjZ!3,'3."qڿo>5k:8<f;O>A^mQ/f,90q-`]ЌE0f;fꫯ8y <\TEc&`#`@pq<8lf@YF?/^ҥKj'(=:..,Yammf]芑{)Ydݺu uE5/n޼Y#7nlܸqddd%ԩ#zM%j׮ݮ] 4[B?y=® cWEL]_u=z$&&߿_M*a!~#Ә1ch/4}Ytt9sHΟ?ORJK.=sL@{¥[".LСCzΝKOO}Gȃ9s<.dҤIDfͪVZDDĦM>馛nm۶-]VZT`zv!rQ8hѢ5jP St,YDL2F~' oJjdK' +WN"`EȠԤdQ..xĉxf ko]%0ہYDwk#O wر}gϞ%͸;$YΝ~>%iˣ OJJJ׮]i&M9@RqiJн{nͤ: DOBBB۶mIP;&>|(O>g/ ؁(zj2RI5d2ʥ# ufu6lԵt"ہى۸qc"E(pԩݻw?eLȧb3 6ѣGixxH&L_~='0NS0ثWJ*8޹s'lB$ro gʢ9%4M874AtǏSme˖5tzNt=mݺbcRDbŊ'"9tOiU ȑ#4] ,;;[N8;Mh6t-^e˖э52Y4LQFv~%p]OױcLJ~\"M(iI9u)`Fx#`l 70vX9[nPξo߾뮻nҤIrm-.]9rd||,L?ԝ r8Xى(im۶Devt«]N-d3I@ZARN] à:Oo&ͷx̙ݻ7lؐ,[&Lӹ q̘1%KܳgS:ffrfr˗/ӥ~7:dmNKK j'֭3Ϙص7ELq߁|;{l>}/^zFFϿM<( |ꎀV'㑀|ɓ:uJJJ*U/lrƍS]$]m۶Ւ"(Z wJI{TԼNVQ޸8Ϣ Xa;0hmuEDDV,E ` W߾}7oF@lf̏?հaC{ @f;0@EtqXa;0?EYUEV&@ #2qFzͳ\=FH `7p~^CѣZU;#Lw96vdzu%n]@!{ `1Za.iii"o nw" n2z2,q"y]p! v'BB\&`Q2zTH d.|0ey6/ v'L @dF򩂑$SQr @pEth?wh&d݉(({m"*up@,+`80e˖"ojjp۝e&na\QC@lfEq)`&ӮBD.S7C Q2zȕS8 q 8X@=0(`@,bt"ہYh.nBOi6OFG)++Ks/Kpg 46>XFo;0 ?_2m۶vzmiB,dF憆n޼Yp %in;@lf>FĖ&Y(BkcA).F %(`Bf;0XrEFF&''Bt"1K{RRR)=YτrEjԨAo۶M%\?*uwlMFE\}X.à%^&33:EyvJqm'֩SGb߾}aaaƝ6mN&O%KYL]6*h(%(wPwlp &wV=FwSE޷oDj-[5áP͟Etq(.@ki]O?qݽH|?y~ZصHRҥӧ/]Խ{nM%GWX_ddYt\bt)-6˗/'yp8?e_r~-<|2fܬQnvYF.hvAI;͢S͚5#9޽{srr}(t&=mѢ?׍dv `vC%^vz;FFOsh/#4M[HR_^j+5*/hŨJF] pz}m֮]Kodzz)_ѻ9(]Җ,#r9ܫQֺ,`4~t$ӎ ;d1ɓ'ɾuV3F}(tF=*>#n#`f'ʳk_xq˖-5j뾌"Q pi.7mȡWIbj+v,0%QߍjTN.QK7LjjjRj>KMF!J@˖-KLL#-Y7ýﲌT]vO72FwSbSQf8 ]ݨJ{WbXSktȑ#{ɛ'm۶^9駟*\(i+(b7{a1F-Q7"5k*^z3f̸}YθY XזfX񣔠A6@]Di漣Ũ<?3FQnS! l=0;1z8=;;{ժU/_w7xެ9^$rFQ0vܙ^xӖ!C;K/D999 nFO"GWn22,}7Q95(߿NWXAChB.V왙k.Z={d;fQn6ckthJs rQJPn Y͢SC4btPE&=m޼?|q8 p"^ԯ__ikZjjjLL /?\ۋ|dW/\/֢*u&V-[rQQQT˴iAҭi*MF}XL.nKp̘1 Tu H0b'{9JFQ6ʸSd\F47,m  w;+ct7Yt{p^1QM7tPE&=M fhh+W8 q"m[xb>υȹϝ;W_cww̟?_9eH.B~^ cҝS`ϻi/vT8Pv)@lf?o"11dٲej |qFTRJHv `)@"0ہYDwEHقFm X@ ЁX@ ЁX@ ЁE v 8lf]F 2zہY@,xv `q)`O3gNnna0@,btSN7xƍ8p`@l}IIIIJJR  ДnEjz9 `>prt<@>@=0]VV6Pz"_ӧNZFJ*+Wz0Xa;0+b7oܷo_Ұo199ЂeĄ,)))%%"ZЄ_~>;0@EL8 `Zv `Pz 8X@=0(`f,xq". "0G@lǺm۶`W_!Z_Swx^.ԩSϟW@An 5,^( fUY abpق"2QdqDE(A #E@TŦFd]@ !Hd&eSNo^UN{>]+\!`uNK?dJP@ )Q/,طoXK#ց: 4.S^boTFVV^X@m` lPNM,PP^aG,6B+ǾM>= 9(/P`S}u=0 L90@n30@lM7lP \\g\<4_M7ŋŊj Ċa-["""*** o@T]D7뮻+)৖ 2! 9 LZ75yC0Yii;u$TVV %4I ]@o@lbCHd_~ezx ڶm۰aCJ?~)2AXzf ,h۶mÆ 7nZ^\B[ 5 My8S(--knNyxŊ޽{}ݚ!dž̞0`-\(ل xѣG{wwˮaN:Ek#FP[2 իW1CoP N!ˢ޴iӾ}.[رc\߄#I8HlƠǴ_pfِ!C&FdizxyC0pcY%{\p«ZVvZz83ff YyIIIhhݻ[]Ѻ\]C17hЀHׯOQZmd۶mdsY)Ȇ,:3jԨ-[MvvΝ;5]6EvbƋ-bS$Ap2Z33ۻw޹ŵ2dzizxyC0XdÕ+W~'PJX$ʗ,YҥKHj~%YcCfR?ϒd٨Q˗/Z+Z/- țcٳ'5֭ۺuxq~9pXat ,*oЪb%EFFT 60M5 j::cs>jkԉѧKqqqL%YA)>%%>ÇGX!{&-((`;׬Y#;v=2?n޼Y@QQ=z"sE!ŋ[w1iVwQéSiU{ e3'==}bY YhU˗zi:W,=q8^^PY\ e=p7G\g\<4O8SLѣGxxMXɞgZ:rAϰI>Lϭ@֐f`t17l0UxCNo֡CbǮ=&MZBQ0>s̄>`Si=**jgΜѪ6 d~'YEK/D}ӧG]999MJԙƠV1gY\ MrqNdK`zxMy8*f{;w{믿^B1cFӦM###`Z"٣8|hLRرcW7sժޖ=:>>,۵k!sED mTzǤI4ҡN:oeZ"=ӬN04tȲ4y'NXTT ֮] /oItJW'??Z]s5:uIͥɡ%KPwItFZ1{:?x*?NDc=ֵ6y晱c>C,ۥ Z4ýayy*5\xBCCҥKUѢEi5uT+V%Hɬ-Q~} o*~JR{`bQyxx89s&)N `ʱJ4k]kCh1r9sK8UG "ATZ=FV.;߿?ӿB2e-BzCjcccCfiժUM41?6 cFuiN@bG'SU_Z֨Q#jBqA{/X,ѿkWW7rX^ R-Mx֬Y!UKO>U=#et/>c2cZhbW\J[;Λ7oؘ1c4|>;4v ʏ&@lb^/`Aw}Bm^^^JJ -gώ3piii[nۓ4nxǏ,Xжmۆ =zO>wŒؾ};L+V` ޽{}Ր!C穤W^ԜVEEEYYY iڴi߾}-[v1n@]^?v%ƎPTq0@l⽀֫WO_KQ~ٳg>}8qjmsKk׮EVDӲN˪E>ݻw5e˖TsN*5 [mذ!44T|ݺu#2*?NM0 ,YҳgnݺP IQ]MU@'S&Ʋ@D7뮻+5TUXXؽ{̥KrիW|QQQM4ׯ߮]ͳ\/1&;v$''WVV &Z#H6m6nܨ/񾭯|\ YEEE6mzCH 3TeU~L90XÇԩ`S{ KxΝ#q1c=_|?sfGEFF.\_yy9=۷7z駅B6śk,r)1luۚPq1d~7F^vz{VTq0@lbC_~ezx ڶm۰aC)M\\y<{1ch uV*!U8o@T²@*hAaLһロH'Nm۶]%%%wf1ʏgϦ76-Ч*r;jԨ-[RIvvΝ;FtJIPjÆ uITV]th´F*vZZCh0-b y\I&?j$!o&)t0x`*ٳ'\ׯoР/`,<"*kOf=dve^"CUPǁxh~!@]_`LF dʆݺu#9azL;##C^8p@o XszؿMLXMz]tB]t̳ȍy7{}w*kk,gW2eСCi{wƒ_s5AAO#/l:!F{搝rzS7 `*1?rIӯB.Nbԩqqq  i/_|E}>tfftri "3g7HMM* ޯ=B6SeL-.7 U@ J(15mڴo߾˖-;v옾jŊӪww}7^s5,Q?|^qNN΀( =A v)Z1k׮2c:&oiXTT9ydfCrˑ#Gx޽$a瞳y{!$O>iaOOWc=z`SeL-.7 U@ bv=jԨ-[𳳳w)Zhڵk {o=\r .㒒Prl>AC7hj۟I`׮]wMLL'NPmۮjv5̀BxӻPTq .߀D?CwFF;]dI.]bbb###ir.]D+WtO?ѢqϟBʌdиjҨQ˗/ ƕ mhGa6lܪU9aj3K'fƀegϞTҭ[uiͧO3`j,>TeU~6q(fo3xzeAAAf蘲aJJ eÇ?#aQQ=zTLĞ {O_1daGdN6oެw"3V`pf,ASNӼOfXv!}8lW&S9{/r#Fdggi6hELJѣ>N2J7m]oذal?iêUxÞiUorrrˋ;v8i$f3h Z<^60sϴja2'eUf2d-wX'N?pUee%-qfΜ{O͗052TeU~L90 =<8))(&&OYՌ36mSg:vTaԤ]vyyyZF ;v,S3g ӰeFMh܅hʩwܹsef/ 1""֩| ݻI;itaaa:ub_!j^̧ [\ozw2*?NML PTq0@lq ʏ&@QTq .߀ԣ*@\<4GUPǁxh~fĺF '*@\<4In *C906zp82*?N  TeU~L90@@UP @  TeU~L90`8lP, *@\<4-N:p¢"B0pTeU~7 `rJ~~A:tPXX(V+ ʏqL{>|x͓Zn]{AQTq .߀لeKΝ;;HOOU `8lP&/_r1"F `8lW&ƍU'$TeU~L90нxԩyu---m۶$*]wV`8U@'S&{qӦMcǎmժ 7 @STq0@lb84,55U@'Mʁ-jp82*?CڢV' ʏq U@>o<иxh~v X8S[vῺE< 3+/2$)@  ?<S&0 L90'rܔgC950l;W,, 6,X'X u`_ @lM&@lm6z@lL9 M8pXr @- VL8Q,9IÕ!7 p,0  @@@lHʁ $ @l{Hʁ"'4 EO i(fr ` HB֭[7U5>Xrj/i|gb B"n oy2n r.Ai r `Ws?0+@܏m={XQ /UbuEmҥK۴iS^=W_ՠf%c@܏ލ%`ǟ{_Jyk愠x㳳MVTT$I5_UR5Җ-[w;vh$TzjjՊf''VB?~|j K;q}T1hР|{,,yE_Üsѷv :ԩÇES3|W{UaR~|jOX̌ `Ǟ͛7>lTAtN2٠A-Z̟? ?䓎;FGGDEEtM~!G-[_g$ O?}뭷6lذ]v֭cw1bDbb"7k,77ܛ!௾I&T2vXVbk&3 &̾K-[ֹsgRε^{rd 9>S=z-dްI6 Y>fvSµȑ#Ó)B}+Vdƙlv Vwvj:Q?Q +dsˎ1!oM6zT*; ,x3yW>$ U{7@vΜ9a.]z^z=3T`D=IUdgϞRyGDJJ U=bE>eaB6,))oF*?vX6m4##yXՏ?(tZjĉej5g+cfOgA[b>}_Ɩ`{%'!1ZZW"Ws-uoXd: r_ iq#\kۀӷ+&fFcBBtLdsˎv7i$*ԡC:g0 D"Ík쓀WNN;[EӉ'|@ 1)0ov#}׿UFSyxƌ!U4:~C>Z b êFY`f&=ڋĺ=1qڵG))))5L=4WAOƽa(,Y[}4^ktJ{:/k셙0[H@hNM'h\.[v,̌xJڵycǎM6Q-/= dX$7!x'1f_~A$?r^g#yRO+0 0 SDꑝ{A㏇-3mn݄+U )%VdмysVB~zݷoag &⋔AZ~0l!¢ӥZ1LXjv셙0[HU a:QFRObnٱ03z)V!Uijʔ)t@L} >DWfiac#*ZV?*ZhoD[H@ҟ Uj֗%[1G(4vG|GTH,O?T_+#ؿB ܈M-[ƞ7> vVЭ[zn{gu!Uv1ۚq믿>jbNNΨQzAϿ§, S:>z(K ÇGG#GM5UOC1-Zu]oc;0$w`(!׿<`cץTRkްtkM?fԨQbȩA)NzAP@$0 &_}Xr4K/$$ @l{Hʁ"'4 EO i(fr ` H `6 _uHHȅ  [Q薹xX# CAK& 'X"hܸ]wݵw^ѨNQz(tQK3,0M&@lbz/\ii;u$TVV %Dm"V덣- 8Ӥj&z m۶aÆO7~xjgϞ3fLBBҶnJgΜ͍Uȑ#˙q^^^JJJXXXrr2ǴЧ۷oI1PǏ xԘ]x1@:wcf, =GӧOxxxzzY8}4^4ϙ3LoJU5&܊j&>㏴C )++;<ݛݹs犊233'O>;V~ٳg2ڧ֮]K ,k>z05fn:Nׯ_ߠAM>zq-Z !p3t p{ MŘ& P `*eC|֭tJtÆ 򸾜 (э5|2U-YgϞݺu[n7-H|ArۥK ͥKLSc-;% q\& 8 3tYp!=0iJx{"*cؿ?Zr%:tGnLeIBqڈ^Vܹ B06]'N]ox L%n,տرcDzwjѣ###ˡ2^خ]<*ܽ{7eg֩S'%i}$>0cƌMRIVVV~~>Sc 3 #G6w!Ν+3c1]ÇMe›^ |IC90`G,'4 EO i(f܋@P&>Mj}lwOxt'O-[DDD-c1{ӦMN}"TBaC&o7(щGƛE fxWjçVkn-^QQQhhMr{"tGlSďG' |oQ7N|EOO(t%o|}L{P#)9d?YGȜ,C[lꫯNS,N[M"^?nk:i>esh-)7)-AsQ۷~=/a4rf/=|#aF!81OЅG4haf:v{ԉ&z `*1&qOQ{"2'̧~HyVѭ&&z3Nѧl{q8);j)_bSL;ر"䳧GR [ t>=Z3u"z `61}+|e?YGX8y虔 *UdFb4lYgp5GK.ќӪW"Dv)Qw+ V*OGk3M=q IML>ƟQ{"N5kO9Yn5f6l ;15㵚\Q 9Be_˺#hEh|򄄄~WqLcum1{z͍Mإ4F1614Bv*O/3Յ{OD3b4@M^~Cx?YGX8[j +0?"{9M~e&![t\Tpԩ?rl8]PlCR^}٩l>&^{2'8Ӥj&'K(= '?C{+W0cYFqޯlҌE6zСCϟ?_RRBFZ_{ї3d1 t>=onz)eWaڋit>=zcޓ9x0M&@l"8.=J~O =@ѭ&cbn9 (3~-&M)Cʘ,W^y%44$-;jUE> ;5b:.X#470E4B~j:1ӏ3u"!K60})((0~VZ;bH k.322Ə/ZxbѢE${lr `BZ?_Z@|rP;@$0 &u`r `60Mf!`u4\ &u{/B86iM^pmp%0XG& W H ` H `-N:p¢"B0gƍ#FСCaaX@lb|KK_~9===))UV^ Ę4@ D#\999^{-IWvjuŀp`r `6{/7oB:zi0r `67nB l `ʁلfΜv2Q+0@S&Xd2־}{h6q( .D0t >?9 h?qH `6XO i(fr `6 $ @l{Hʁ"'4 |IC90Im ؎;ƹӧ@.%`C_* ]jW;==z4bP3 HFP,_Fn:qxx $W^y?, ;b>ƾ9={XQ@@Ҁ6F<%&&R޽{nf@'oqI:u*;!G4ia[ vAUچ R믿NgϞ{Ĵ#bQ-c/N M}:A47 '|ұczEEEtM~!bه);s]_|8gyfر,ov;C6^!QZ S3g81*r(sK[[\xBCC=~,*} v :Jcc` 7 =w,gΜ9Nc[4C>`ӧ812aYZU {-gRl*`2'I4.]*\v,@ P'Y5jDMH<?w߱^{ziDi}* 'BE_ǎ͛7|9fۖc>f_!?,{gho-55N馷l3@fkݺ55iժUnnnvX1-Zu]}zDzP<ػwoFF-#&MƉbʔ)-[lРATTT.].\hR̶]\{l7 'ۓO>Lޒh&KZQw`Dz dI#xpZ믧GJ;ﰌc*`^XU^jwIJJJJ:PЅX%V^^d2A?dA4Xzi{oaطoX"GdI#x0=zrv^E i A>}zHOAs\ `6Qu/~4Q.\+|xXiӦM7o[QQaSdSkXfYGd˖-l& K|Ox]|6tF\ `61yiBM6 M67n4u" ) 6+:={֣0MAr]^4~k&D7|ce;vHNNr助OY`TVVEd9_#i|ţsz4I#P 05~y`oFjjjddȑ#IqqƏϳy~~~Uƍѣ} OOO5k1}aaaTѬY3ޗ3gƒsJOzG'$NOY`} ,h۶mÆ !={v̘1 {ZZ֭[ŋiN(Ν;_4( #G83i\0tN6=5xoӧO󻂘3g;" 4iu!1sQb|'&{=ɓ+V}ݬ2Yz 4''geee xN:}駂MFi_!Cr-:|06lةS***FѵkWfl:Q=z{)=ZǩGISȭtN6=5x=$-Ar]DHv}D}R5Sk+-2Y $44t?gLJjҤO?$8)LkH)9qUm۶M_)L7l@IA}njj@,YK.111ёdv%=G씣2JWC5jDђ1];zX6:1q ,0Y_BÚpW Ӽn:Q2{!΍7ZN,:rY+ڐ2de}y4`#XbL%ǎ ={jO^{IS-<kH>ׯ_PP6(Y}e씣|Ŧ D.@@^)))IIIXrP 0},SXXxuY/4& ` EO i(Mp/|IC.@l{Hufr]u(\ `r]c>\ `6X lQQQ!{󫞲ŋ 4 i(Ml܋,ET}m}dOQ2&6E}:}tnnnFFh. `4\r]ƽ(d/~̙3$i79rdyy9+KII KNNf2?oFjjjdd$s?~|ee%_xqOΝw!s#,Ym۶#M6ʒr4뱨t*ce]Rr,Z(+Dn[_~Æ ;yV%EVAee%=Ϝ93!!2d=wqĉI^rrrYIm\eհ0Z7g?81k6,ӗOe"$YFjڣtʕt|С=z洺嗃R\f[NZp!=!oNDDDIIVb񑑑ڵˣݻwS⋊b_!]|| %}llرcû,_:$H\B}|YG }7w\Y$.j}zh?5Q36cƌMMVVV~~>o~z0B{(Q 0XݴiӸq:tPXX(֩(c4^%׼ywLkZR/ @`bLr]D/Ғkر[ܹsJJu]W{AL `uf+==}III^\ `6={6-H <d(}v5dȐkߝ (XMxY:v47 4 (2,))u0У\ `a A߁@ \ `6GxLG.@l@P 0^r]"'4&>\ `6XO i(\ `r]u(M>ϨO8 2W/^+|DaH i(Md;b y|TElH$JK.Kn `; ""rqQ8hT2#dGf& !,,}ޮβ2<^}~^\MZ _SaҨQ8 0Mdc;z͛weVذa}e{իW3ŋ\ZZJG}w`&;5! }fݳg;\tiӦM@ NX>7mTvmC\63+ o"s>y$ڵfgޞ /#eɜXkٲe!է٧~M[dI.@|OX;tW\Ase_v-傟>FGGEr5Wޕ+W-Kфٳ'uڵk׍7ݺu+'*^PXoj P֯D WβdNed짠pO̟kq]^V-ڧ%KynD)cĈ<kX\\Lǎ3b_nP3gBgDy2'l9^k?s3Mps^bEΜ9ץK*8pf6[T>|p=bTӠAm۶PePjOaO&BEE}^5kV||0! ξ7o!׌y 2s~۵k.P g>{F:&lNi.D,s(tSBʼq\ `XYN.@4 ;b!`T=4q]ik@I&X@p\ ``-Iq]iX&u@ H `q]$0@.@ p\ `z, ÿI:.@40&Ŀk@ߤQp\ `]eee/...@6i=LZ5k֠Aڶme! `Qsp\ `درt+)))11ES/@bO5 uVYؖ+--~Q٧e@Ӈot<@ L 6p @q]SVV`ݻwpte˖Uq]ibm۶ &h"333)) 8&;b,111990cO5 ub- O8I.@4q}8ۤ8 0M^.V J2ydkA E$9r5zH )0 LHwIq ``-Iq ``-Iq ``-Iq `z,+4 H ` Iq `XW i8L`]7n|jg}f]N& ?$X"%>uu84L`]LniݻC'@4 L(O J ֤G `: `ǁ뀀~<: mΜ9Vs+C|=0!0MzB|8 8֭n>zܷo_nnnƍ"##۷oOX|y}A X& ?$X ٳ'ˡ˭N>zݻ7uԨQ#FeddlX``M~IE=[`eҺ.@f_nݺEDDԮ]Yf .ʏ?8===**VZ޽|yh2KiӦ{&M<Ț^SN#Ӎ7_67b>aܵV蚹=434i7|_|S 4 q:y$PNj8c ^wTO 7olnFAM*_0`A;d =տ ! ! : hyn'|-iM7jH~_߿i+⚄ӧS. wkV~רL!ӛ[oʴ3,\}'3fd WXqSmkdj[XX_y*8qJbU""dO@lFYtiفs=ܟzꅸ>Sj?i.s/Oeo{֊mY/ڵk5jr҇~He*!k('~:;$]Gk?_"<>]V¤pKJJI_=+D *_Xp{G;_}f[.}]T^PPZֵk￿O>-Zt.???55sM|1GA{ѣGɭaÆwujW4uּ fUVcǎe]}^RѣG|! Z$K+= RnSL q}KhT7qǁp+`f[aaazz: [2_WJ}۷]6wyD {MLL4hбclj' -2, #99y3%ĕFy %Kz/BLw!ʺ6В6a„hvKNAnT+TJaRцd5!!a޼yDSfUסŁh( ĉKWbLr+<IF̘16[4ڀڵ| ֤G `:wO@u|gP h]\ @@@4XW i8L $ ǁi $ ǁi $ ǁi $ ǁi@p H `& $ ǁi;b^80M꫐~jBmƌ , g&l-nٲ[n׏ر{gpgUD844t۶mJTAT=i"\?cÆ gΜI;+WP"ϭNNlEn9;Ht@#L2@4^):uj0Ϗ7.>>><<]v;w6mDDDDGG8ĉƵb 2NSNEEEh_RRBm###5j4qĊ mXjNԼI&|ܹX6r .III<11i͛GQ|aaa}̙3_bܹH/_NgנAΝ;D^:--"ddd|7G0isJ7)?~l"ێ=J}9r k֬TnDW^}5ܲ2r-P܇5+..&6mG\/={M4*:D֭2HYYӧq2gx1C>}&-99y{< 9޽{Gݼysʭ]tٽ{7U;w4G޺u+zr=rƺWޕ+WX/={]vݸq#F/M?ze<%7@0!yUqm?ľǒ%Kp,Ҿ{w;09j+..1xP/999)))IOO:u*0ׯ_nn.iO?PQQAYff,,,- 7߲30ƾ}e;ROp#¤*L>߷ i8L\x@$0 1߀W}Rܞ#10GTÓ銇l/F 0G(KEH+WRSOQPvBQQQIp )?>W'::vX޽4h6{l.`gL6-¤*LYҴl2:a>C 9{ŋͅR>Rd'Oϧ?b<< {>􄑑'X"g>!33 pSj,im `֢9G˞u|gn`&Td!(曔iBSeϞ=_{5`F-`^=1\PaÆ{~?e˘`1xȒl-Y'͊Rf=Rp=rذaW;Ibccϟ?_n]?Lы'i$mݞA},im `֢b#ŸubO)bҤI &ts%&&Z\L  | Lc}8ۤ x@4Zx@4Zx@4Zx@4XW i8 @@@$VTT4& /9r*6rrzUlTV1cЙN854$ 5 j~:yL7nh>}Hj^y@ICMu09s  Py4@|P?ggJ<iӦTo߾_̕ɷ+ `>A(`jؙ.YԩSjϟOϟ]EEE ◸Ev0 j0[`AFFF]TC<#YYYdMOO/LMfر͛S ǒ@!UO>hRRRڵ~/|h… a˖-͛/_| 7ԫWk׮;v`ӦM馛7n[o׺1cFLL U{yꩧhf(9/r6mHtnJÆ 35VJaܙ$**o\r%:4|nP ${W\V 4 tHSmeqHNٍʔKJJxGRɓ'[_ !?{栗;7ޠT5jy=?oڴa瓕f^*S 6k_XXHTte…q [rB]0d>|!S(..f i<_E7|͏pr]_R駟BJJ0> $tCeSUC?~\|6jybٲeqqq$;w]:CCCbW\ K8@'vT~嗙 tx 7Cš')꥾ˆaBא kH5ؕX^߰aCA!`lzK;ӧvmC$i< ңАwaTI=֨Q !tV/lH"Q|ͻ+&Cl}%` RqQ={_|衇XG+W_} e|d={vk'TPP&<1G3믿vZV#PVPP' H6U`Scj+S^=~ 즛nr[2ܭE6BuO?4eʔİrLyy9o7oNTdee-^.]1ud-r78}.d|dؽ{7s۾}6zٲe< M5۷g5. ee!u$`Daa!}fR +cu֭N:;vܴiiD wk… V%44l6:i.`Nғ/~Oz"a̠jAE4Rx^փ[m8pO_Q' 3fUwVC%`VP8,zR{B\yx8K Fg Mi@P)0MpG,+4hh LEW i&X@P)0M]_}MO?d5x ;v///~*]̥K,#]jd#)s mҨihh L۷߿QF 4HNN8qbii#oWσxX(bѫe˖nݺկ_?**cǎ\s0n=_lQ82mE@fƍ4-gϞÇO6mڵ]=g`8/w"?ذaÙ3gVʕ+[Lh_rVQQa)m js3fXk]WXѦMީS' ܹs#Gƍڵ۹s=O͛7oꫯ.kS!>ϝ;W _|9ŧJΝ)ի,(BFF7|c(,, PvXf '%%%o߾G{/ecyJo}f:D֭2 _CȔbfR Nqw}7}8~877! j$6|c0#~:v7ad6dxvdV )\ ڵvNVõÇMj׮Mн{>(.. 'O$ x-y)}5D&2͛7! ?dTaLWQ[Xo}fH̙Cܞ}Q@qFM;#wm)ڳgs^l"̰ נmT,2sOE! n>4 l Mi"Ӝ~7}o۶C=tU !E1*!TvZuw_=>lذ/R̬^6iYQQAg͚o\.b>/!n_s^͌b} v̙3yyy]t1E/hNNDR>u1Rx- ɋ> OnZüۗ@Y MiX)ސ1<<<99yҤI?"5={v̘1qqq̇/o׮ݮ]Ah1j(wMfdzd͛'E1*!g̙78܇4QGhh(WۤI)œ!7H~̝z;3+2x1͡1Rx- k>?%% pBK ["iCKS ``-YdIӦM ( Mivþ:tP&Nh ^ʃFCS `1l¾)ϷB hh  &Mu@hh ,  Mi0&ꏆ@40&ꏆ@4Zp7iT44" ÿI)0M!`M Mi0&ꏆ@|EYYŋ' M9϶mƎ۶m-[Xms r͟?s ͛7z0@С)0-רQSRRnz0@С)0M-WVHThUe@@p Mi2a7^@4XZZ#lْJ޽۷o_;0@S)0Mk?ٳgBBiX.]a;05ľE0{f44z,m p(04+|8 )0GCS `@4XW i&#Hj44 "+4hh LEW i&X@P) /ɓ'[@ȑ#VpRSJ(#S }/2cƌ8qk*ǀ!0ҀӁOgqFjB `* `jP[3gcICj*3ec#x ~ȭM6 }̅'ɱꑵkj8QsP*D} ؒ%Kp nSYϟOϟ 3 e91Oe6&°ͳz] K5jB߇4?NOOUVddd?fb))+.7ol==ZdC+͘W ~%$$Ԯ]e˖3;fo\rرcÓh?}tС ._<99nW^׮]w?5k,,,SR6B_NՅRVJY'f6s+V~ꩧڸq{ӜtؑX9#K5jB߇4lѢE$ZwFVV5_~{z7n;ٳ8@R/'O Zdc[|0`M~NNIxlK姟~ )))<>qA;3oذ^BJu`SSS򗿼빹Jfjek٣G?ϛ6m4h27o.:wa4sdIV UPݙVzǏ4o}gh9j2c<<֙63zhYZZz%^z*BCCܹsgϞB X=Abb"abСC}٭[**e#:[`,뚕?g52:>]4'txƅϑ%Z5V!Cug6j(̝;M,VyxhsTTT?fͰ.BLr-~Æ y[J}2eJVrղJ5XvgYvOs4SUCm>Tw!`գ&$'N?҄W,v믿~]{z>`LvZVþKOO_`… i1n8KCY _!u]>.._|Ňzvذa_ڣG,((UF(t`^cMC\;C\Sp jB߇4E!k62RSSY Xf>ˏ;k`T/Öԇ,?TӾ}{VS^^>}͛׮];222++kŖVOZnXti|||DDԩSy>}ժUeC MR6Bh50daeڇ=TIX 9jP[՝iا~JɈ);҄P,YBꯋR *^ƵVZZzi&^~=FGze1{V UPݙoKv=ek?d e׮])))!)&&fС%%%~ *,iԪ ; ,V [m 9p}6!K5jB|+`cƌy.{^"K4Ԫ  ު$ jB|%`/BQ=EW iUCm+S[\xZV!0UZV!0UZV!0UZV!0UZV!0MW_DOV8.]|̌3bcc,X@5Έ(z!%ZQUc6VoGΧN;5n_oGAV=N%E j&;boK2v CCCmfZl_ XteUSgmpuFB j&µhU!n;^* bAӫVِuTv^M vnaҨQuAmD:Nf7x#999""bȑܤd58q"OmڴVp Vر޽{7h --mXׯ_SNĹsccc)& +Wnݚ9FB j&µh{ױc)SXՋޙP\\LӦMcA֬Y50uɧo߾r ̴<77FB j&뱖wibϞ=~ҥM657!U:Xذa}ٲe‚3A"6mTvm*ݻGqqqL7ߤlB0x`ٳ4=*z!5lMlYb ;͜6[03w)t0\eeeDEEEDD˗!"C נգAӇ z;3Ell֭{nsd9=*zAA'vgd3 Ő͘!ydq~q27sG.k%:osa Yp:ޑe-~G j?~<а}Bw}]oMduHon}WVP*0z߿?*߿cǎ=q5dXRRzaWaԩ!vZ[=;dUG{SNßH ~Aɓ'S9//__ᴱ1$`/Kp  h,{Z$1>cWAOo/^$-ڵzf3Y "՛N'Ō0!9_СCf+ ZV!0qƔ5k㏛4bX%񋌌?~<̙3)`DDDfffaa!g7L>{1c(ljjjAAoէOWR?&o61Aa/oo~aC2 fY p9ޤ]vvR̘UPQNg㤷Chh(R8g׳ꑿ)))5 … y+yҝ\uHz3]!/.++uAmLZCYZ,YDxKN L [li۶ ?6ij]P[@4X_Wh={o:ԡC'Z=`:Af͚%%%~ ,oȼMZV!0M]}$g[n ,\|ʔ)S3lذTˆۤ|uAmk`4 ڇ=[o2$ .B `5 7o_ lCf#5 .B `z,Ζ-[Zh,11M6=4Ժ 3+))޼yթU 릛n"[.GG jTRVZa˥F jT 'Q* IC j&I+4Ժ i $ .B ``-IC j&X@P* IC j@ j@ j@ jp;v[=ymҥKV5.B `h\e),ETTT>}SpaQ,OsU70I#P* u̙:X 4FULhP_|EXX;w$-666::zȑ.\`IIIOLLd8oFrrrDD9%%%lԨĉ+**+ڴiCq:uTTT$ nGYre֭YmhgI9X\\LCm:Ν G֐ /_]v 4ܹ3\zuZZEȰos=ob>yVXXHgD8q5?vX޽ <{kf*,P4FULhSNw}ݺu֜={f^&MD&֭2k{)uqʔ),5LG$T?m4[VVV^^w-ȂFb>|lT~kԢٲ5$cnC=}4$!]>|8?޽/]xDѣy`k֬ٿAnllrdff\0aA4 .B `hE4}%ML{e}Q\\?NR1gngvtҦMRLX6m]! .Jo&ev:* <*{^qFbFV60K͛7!X:uᶉGw}6la{9-[" {.I#t>IDATP*X^_6j駟f]vU^+WHHvqF>׳[nlذիWy睔cccϟ?_nݻwrZrl`.> 4feeĐtre{{[A4 .B `U%C-\"m BL;< iq-h6iİ}zL냻 c ^~e:LKK{}v{׊},meSTw!ᇲ-c%K[ifXsLaXf Q*VuX&%֭[?#_~N2\R駟RTf͊q BKJJ~a$;;;''… ~ԩ~ye΀]90!>}]z~!|# }7o%%%==BԺ 9ߐ%''CZV!0a2 .B `w.B `z,+4Ժ itIC j&X@P* "+4Ժ i $ .B `z,+4Ժ  Ժ  Ժ ?cǎrAt6sԺ 9̖-[uV~;{V%JULaÆ3gΤŕ+W(W~V'PQQa "g9¤QP*دԩSVai&"""::z'N9s|j:tϝ;K#GpwcDhѢ֭[שSҥK&III)LLLdfmxd9^RRBËlԨĉ42+V)PN:ɂ:UD;ϟ7n\|||xxxvviH0i(Ժ i"\7n|w^fӚ5koRp^KӧO׭[e[駟f圜={Ā'Mt-ҿ`xȐ!sEYCr[nDs=eޱc)SԐr=SiӸnnnYYm.nYpHXYlHGPmvQ*۷ȑ#d!`_FB j&wѣG7oޜNK.wzƆ h{C=DW~hT.-- P磏>_DLɚʚV̙3{aK.e;'13ÇM6ծ]ېČEpgNJZV!0M|T a_(ij]P[@4X@GI#P*0?CBx(!;ֻw ͞= }gΜbܹB7㚀 "7tnԺ 9:3>^3J ZO&}kp>{E@pUIzЙ" ~O=QsP*$W^%}bɐ2x0QF'NL.C1nŊmڴ!N:v9s`0K(O&^UI&1fIi_~9prC6aG!yc֬Yկ!ZV!0'9rH szW^!^;v6m>K1.77M=K 0i(Ժ ib1zh~)˜#CӧN=E#̉, ;?e9UVp'`.#WovHqRښϔcT0`){s;SE4jj]P[@4EdX`+ߟǏc>K10''`0"P8TEGÝ \-`$N.DZfnڄ+?NC85|+#K5.B `("cBdj5立QCP* bаgߡC:t0qDNUL\ lْҠA|݆8ZV!0UZV!0MzU, .B `  puAmĿc!`M.B `XFu@ j&]0&ZV!0M!`M.B `w-B84j]P[@4q{=l 0I#Q*<۶m=zt۶mlb9 puAms r'$$4owe@ZV!0-}IW6m|^ uAmӇoRRR'lٲe j]P[@43g-az8Ժ iK/'hݺuBB[o}U^ j&浸~;#114,##S*}-7d)))0{ҨiuAmDiC6tP p(F A j&n?qI#Q**P*ķ6`WW^!Ep2 `F2_ ؑ#G^*.Ԛ"Wz,+4hh L $ 5kHj44 "+4hhJe(?p@kAP^He p*0(Yd7 0@$0 LH?x@4Zx@4Zx@4Zx@4XW i8 @@@$0 L\x@4qg@>@4Zk'ց g@4Z&`z4t$ ǁi!L(ǝ 0 i8L\XM HVVVEC\d̙3jG^~ zLƘ>\[^ ww 7ueƌV? Ȟ{cu#>x*854 ٓ|r6Lm7Qcƌӧfdd9r*Ba'NX*e*Iq ``-zZJ`6ɓuVNԍ72?8===**VZݻw,XLaÆT3~xV6MdG}Guefv޽{6mZv&M>~Ĉw߿תUѣ{MKKk߾=+?)>vM7yu 7q*;(t,5F ᾅ8yqMbb48I\1q//.A⸑1q *9*(Fp0.F\5\ouUw;]ݮj  ضm {zzg_bZ. VY@@@g͚%LXbժU^ad1Z;vhڴ)i-V܁,} 7 &yyyEDD]zUιqF\\\-BbY'Of|RQYYYO  T0`_ 8fJ `B?7p ~h%0gfo4 E+U `a80`.Z 28 ÁsJue p]h|!`0Np?JL8 Ásr@c-?)pJ `Np?`p @t 8 Ás`p "&4 ܏@8%0N  S@t0ND,&4 pss{a<Çkժu=9c%&&ߟ̔pNi8>0h۷w׷o߾yyyr ӤI{! #b}kR۷Okp@0M6y{{'%%Tܹsv~~~gΜ u?/N$`FD*lFEi@tv?y汱bȐRL **۷G_NÇ˗/oڴij,X%Q8w|'GK.˫uͳ:ԬYjpBJLL"a |?vfHk׎dULi*F͝;W,*--7 88B\BҎ6 `ܸqL|-RJژ4 j꫆ RGQv *3jNf$.\ //_>00ФxРA/))!sύ?'u?uɬѣGɋ srrMڵkɓ,|u N>$ȑ#y:xahh(ox󾾾׿ȍRv~.55՚ HFFmq@e^v@a <==yStY$''4bp3Oi6V[$Բe;f$/^$/VPP ߤyLڵkԨ#bܹD*ţ8_7GqԔt]C~~~ۛbIAyI]'}1,^ ZFPm$( 0i޼y||2tJo+}qFҥKb.W2"##.]گ_ɓ'᜞={fˤػ<(?zxxZ=cVټ1SiܸG}$Jg" ~)  vxӉXʕ+>G'N(ti?sLھvԉ>۷/mnܸa*u۶m3) 4qBYYٳg 77Olb*~GRiڢEw}WzZ'yYmvҤI4"RZvV ]&s„ rfPQs@70h<}.]TR~ǎQ"9/,))y뭷֭K׬Y2n߾MiH@Β%Kz?^p)DՍ3}h"H2HHAy9nY0 z*m(|MM4vԟ049ʔ6Y-)DmهKBb9I4L'ţGMII#W{XB(=T9LJEvvv-Ǝ|k N{٧-P@4hֽ{ŋ+7dV: `=0T\ "JOO#@Eի׭[6kLڐUpm `:XҰRڶmkuܙo4 6G@ӆhC!P6 ``jԨ(`ZO@ف1pWI׀rrrD8 ``^$Z$]r0~,3ho4 < `?qT0`.lNp `:\@t 8 Ác6a80N  S@8%0~,&4 ~"6&&߿VZrTyՇ)nF2(㰲.}Q^Ө( `:1UJ:uz}i9QESTT.F"@kxbٝ;wYfڵ#""l]v۷o^^=**_~C񡆟=1[*;Np@NtE%ݼysСRK!̡Cl`_ IѣGk.fӦMIIIܹC;??3gu]lX5>s̖2E/η:sQrI~m*Ux˛6mZZ5Z`W\0`]7/џ~iԨQAAAkٲ#G(#F]ɇ aaac 5IKK(mbppYeI Y 5k4oޜڵkwqV٦*O0jUKʔ&Hr;F7nܐSLTrll2'*}rd5ZHr˗/pBttW֭͛ړ4[i1UҥKzڦ=.E?eceyuځEEEܽ{B{9rLt_TT1eVv֍>} ԿKk2?Ϟ=Ken߾)ZHm?l6ybگ 6cǎ,lS/b+Ԫ?P44FC100O>֭y J/d2_v])/mMC>T9-߰aᑺS_xz=zx嗩yI1C4☚ eKˁR YTim `[uuJkmZr,x8FGINN WRѣGS\)׮]sww?y$yf:zxx,X֭[<@ $`Ο?>feeyzzԛ*&jUH(S5FB<5JV~hv.D D]v5=zDQk׮ٳwNbfE4ܓҏ(}\jMUzWU!98@Jcm/^pXAA@ځxxfGVAС5>|^ý{ZI"Vdju)ǗM\ԆG@+Wt٘"t(ҥKbȽ{O`1!6tL,jƍfF}Ԛ-&PBR5FBma/_WbСC_yӓϜ9Sz ͎ZiժUi;vHL&֬YceM"R!Yxe,TVvS b7-ڶm;i$>p@4f ۷!CbmF'u觟~(!6̙3qɏ, JM*d^lS/b+ԪP:8&HΝ3gGu֭aÆoߞIOOʕ+>{)1;K9qDڙ(GVte <|=sq_}ջw$A4I"V6vput||i[fq╱| 8;0\uj?f۷o[clْ5)))͚5KHH0ްJ%ԬY322}d6PBj yƍ{yyQ/Ҭ$ۛEixRMU&b+ԪP:8&HT)m^|zQWQį nڹsg*O>N5(GV夑TJLL4;(bz9I?ݝ.lX$bEjc 7[I IW+NhӉ'b<ܹZjr3j*5"Kbi[Dm.ٳآEl98>5jTg#//}{q)NsСC  }駡^NÇڷoϿt^h*F!=8@@t"rn:~1 3N÷\LѣGCfCIFFF&MHD d?L?ŋ/ҥKxxxDDj؁@93};}ׇ@93 ! mذ!4 L'cن h8 N,>4@t 8 Ás`p "&4 ܏@8%0N  S@t0ND,&4 EMiN ͛11OM3cF̮]YxPlۖ9my2V4e_8eOt͚pԒBVKJ-`vo;-99-[76;vqڹk*Q9LLVPp]v>H'z{s7m9vѿe^Xl !`(`t񗐐~{\XX}kiiSc]Vr=kמhc>f OR7[ZZDDdfx̸~.gBBgoD8uIÆ,[.X(%B={>46sLif=W5N"K,`ǎжzV :uFXXv׿nݶEuԕEM!e߷/ou4ƍ@%rO-&h*<5u)%BWU4{/_R$YEKkNfMM4 脿k+/b_e5p(, Mk}B/NzF թK;{s7n6?ߓi?Zs,i~tJF%PVZBsN"K:fW֯NH$SQx~ǽOsEQzzzҕɓkԨAqk|}رAq3UE5rS;)nfLpNQ_\0¢ѢgsO8y+}Hss i31w<)h: Ѣ[k煋N"[pj_ fyP9͢G[6dЁ]Q]DdҠ*=p+fejb{˯сvNlEXpNjˆ 8XR7Ҿv ĩӤ!8[bʥKS)̙+$mڴM<1q)L#=/\8 u*m5M )\g k_VaΝcV 4颃&]%'>j5rvj k 8M:u%m0jڒ%ÇU/mJ,W;eh.U^#ڵ576J`޼/e*s>PK <4:3 vuF 3[k tf:>~2h0PX#`tܠ]W|]0`3)( bcY\. +efo{sWH-Uی~4rr .=-ݵEIZ t=ҴiQi4jj ߲%&}^<(\ iө# 8V mnx$`B ֋ه8EA@iQٳ2h'33Ӻ8𕐐zLfKafq%+Fg144Qzv3^qƠEVUVjdn?BQ2 ])n(MW_}V ޽o޼KYTZڝ0ihGp(0eRhN22&NH}P*X<__:wMᑑEz^j 7+%}]e0X9 8s.n0P@\ `0 801e ACsi~I0p( `.c0Lݦ&TƾJ  ͛w^)?Nԩۯߋ?rRfʗXokr\fz1lذmڴ猌}b8s#Wmk֬9=.a `ajчM 59bQjK g .'LoݺZꉉK*a0P:US{Ԯ]{81Jr=<< ) `<oaH|MXR =jF_2-46mKCd0P͝Ehhعs7I0}b&m fRQh}(RN/)ߣ!`do9A$] 66z{ 8$`;va_7G=LtRe2ʩ fIRa (RN/)ߣ-`T;h*UyR3p(\F{xxp'C/gԢWDDΝ(q:f:Lm*L)TtUj֬I~g0PGZR޽, 2v>rXQ8A 3IyRFlɢ,|8ުk[w鱵k1">{ 8!`?pm9Z W{hQe0LB+6X,ݲe7snZ#`W);k6l[Ekat||quKN 7p(\Cj:uFOj8(2a0oQ@,VĉK'%}CEzٹswM4)KɀSLSnAC֫u{V ۣn)T4 `0 8!`B   fw2 `A`v7p( `.c0   fw2 `U 6-FyK `9W.bfˣk7*L*OVMZZ<$TV%/[0'.$$|.ݨ0+))?O򴘘ݻw@Esg'RXXLLg%onTe)pJ `~7}IENDB`onedrive-2.5.10/docs/puml/high_level_operational_process.puml000066400000000000000000000035761513710110600244650ustar00rootroot00000000000000@startuml participant "OneDrive Client\nfor Linux" as Client participant "Microsoft OneDrive\nAPI" as API == Access Token Validation == Client -> Client: Validate access and\nexisting access token\nRefresh if needed == Query Microsoft OneDrive /delta API == Client -> API: Query /delta API API -> Client: JSON responses == Process JSON Responses == loop for each JSON response Client -> Client: Determine if JSON is 'root'\nor 'deleted' item\nElse, push into temporary array for further processing alt if 'root' or 'deleted' Client -> Client: Process 'root' or 'deleted' items else Client -> Client: Evaluate against 'Client Side Filtering' rules alt if unwanted Client -> Client: Discard JSON else Client -> Client: Process JSON (create dir/download file) Client -> Client: Save in local database cache end end end == Local Cache Database Processing for Data Integrity == Client -> Client: Process local cache database\nto check local data integrity and for differences alt if difference found Client -> API: Upload file/folder change including deletion API -> Client: Response with item metadata Client -> Client: Save response to local cache database end == Local Filesystem Scanning == Client -> Client: Scan local filesystem\nfor new files/folders loop for each new item Client -> Client: Check item against 'Client Side Filtering' rules alt if item passes filtering Client -> API: Upload new file/folder change including deletion API -> Client: Response with item metadata Client -> Client: Save response in local\ncache database else Client -> Client: Discard item\n(Does not meet filtering criteria) end end == Final Data True-Up == Client -> API: Query /delta link for true-up API -> Client: Process further online JSON changes if required @enduml onedrive-2.5.10/docs/puml/is_item_in_sync.png000066400000000000000000003315011513710110600211760ustar00rootroot00000000000000PNG  IHDRi~q |1*tEXtcopyleftGenerated by https://plantuml.comvmiTXtplantumlxUMo1B"ABARZ5P^{6kصW7e&MS^ڬ=o޼ATed5A[S:`ڀo `xR :ZNHY`lHw; #qrQz#lM?ߢgC4J3*4AmB:dݤ.WJx RN6hrnKtp`] &/lS*ҿ7Zݭwu+ǁBAi(#j أ$l80?cXBFXj"$UY2Ԩ jSj=/“kbƽtC#1Rɷ˫k#<.6t<7^ _ (euOt{(?ZW\"ˢutoZ\s[͊a-lG;[[UU{Qmhdf(hX  &P՝^:6ҷ]~2WƔTLkY;JYW(]u.[܊FbnG5f9%i+n =ojtuZ$WͱuIQk 7,KGJŝN Ғ Ki%{RkSU>mmZ<+gp6q(cm.ܘb*ePj_'{Gxg0r|Ν^Ep/p.'׃m'8=kp5+n՟0:f5u>;'#bä!:|^#Xp5>`.2iC\y#Mvb)kn'=JIDATx^y(,hn*ш *фcI4fN̉"zlH .G(H0Wap4 * ۰9 _}ԵmzzO[o]gvD1S Oi'N>|J;v)H^{>餓N; /pҤIѩ@;b?OjУG#Gnٲ%z@Vi'@";LvsgZ*z2@h'@[h1$583Kdv4Z]}UD;ظqmJJJ dv4>㏏:~] !͛7/ZEG[l.ϴ!V:]`i'@C:th4٬Y3hH 4 А. i!W<4 А>?>F?At-lN6nܸhB٠ g~mVW_}ut,NhѢc9&ZHjpgVUUEH޽{G;n>UVEOH˗'?֒Ocȑ[lU ,Zqqg}I'vi^xI***Sv$W*3H.=H.=H.=H.=H.=H.=H.=H.ȽvRYY7gƌǏR@6lܸ1E>N?@RTt 'E>QvȆ~@ݥR?~|I-G3x~'@Ŷzl'֭7=Nm{N(N|ᇫW޾}ONNʪgL&vd]CLi'ɧNvrwo߾I&m۶7n.93J~׭[:[nٶm[湳fݻ!rI'-YO>noI|p/ 'p,^8zBu[oٳg~?Qѣ;w`@h'@օg{pȑ#ӧz.'x"~뭷VN2dH?/_|ٝ:u馛2=KJJ/^ܯ_޽{~饥g~g ,x7#}4id…uú~P^^,|$WvuY~WvRVV. 5ٽddͮ-[4k֬$=#i&ϙ3'ܝ:uj;wnӦM?RI{>(s~MƏ~p{} kZsӦMr"\o ԍvd]]}G}t'n/:u#srz;a=`dk֬\jÆ 7nL9"*z`_W0RPPp]w5p`cٲex-`yh'@օ_gg̘쳟9眳i;^22IiiiX9ww_-s<kZ!WG護޺ݬZ^ҥK9p/{ 'w ¯Nxl:餓.\yLw_x`zĉ;>۷=SM<BP׮]3GjY?:uԤIÇN`i'@օ_g4*ݻw5jTtt '/ bۇvRky͚5[fM؞N`i'@ŶK>#",S ;Ⱥ B;.}Ĵ3fuv5' uv2~ϰ Ⱥ}m'~w͛}Y}l'ȺɥY>  bۇv$HEEEnD 2eʔnf; ƃ]> A*++u'v2gΜݻG? Wbۇv$_ޮ]0dΜ9?ϢS\lNd)---((ԩSIII*3gNvڶmGӫWT*uQG۷o۶m~JlNĹ뮻:v '0iҤ$> q*++3IQQ> .0t],m DEEETgϞdQlN .@vŶH+JK<]C;Faڵ<ѣG5r?1dȐT*wH@+--O _Cw~6@m M6 4hÆ ɹ9s}Oh8C;OSCHlN ߔIvm|ABlN a„ -Z׭[7n\v+#T*\$0eʔj/>S/W_=Νl/^s3oj@ĶJdٲe{x$Er!U;CK0'Zly㯼&8+>wwDN2]`an~EEE-v:Cəg酄}hnjSNׯٳ#GP; }h'Wjo'U;wi+V.SV\y  W???2'dnD{쨣 6{`3oj@ĶJl; ̜93KSvX޽レCEEUW]uG3t2zpnB֭/ s9#|p7TvO0E]vٺuC/5kֱcÇꫯ.UV?p#njժ:{I_믿޷oJի_p>NvI>+ui'TSS' $AlN 5*~11cD?0 bۇvy%g; C;.^8= piӦE?0 bۇvyeŊ'O~mO;v˖- ȹ@:thk{>7? _Ӡ%KD?*!ĶͶmn4~] 9bۇvy{~OCXf_u4@~gO=mݶrԧ}ݣG bۇvyrرG.))~O-\xK.~@2Ķ?p̙cǎHRѡ iӦmٲ%I> RTt`ĶH.ȺɥY>  bۇv$vd]lNNm \ uC;"s7N"GBlN2eJIIIz7.މm ݺu{t;={v݃N+C;/o׮]Ov2{Ÿgѩ{.}h'@t^HRgn׮]۶mT=> qzJ:u JKKRw(}h'@Bwwx bۇv$]wݕJ%Ȯ@SUU5tБ7dȐT*'m 4 UI=3?i]QQ~˖-u.;c׿,5jT׮]=`<87bۇvJ8ɕZɆ ?caîp_3<nO2_zQYYٴi:.@Nr|rUW裏ڷoo4i䋟8v`|_җ 0vؒB>m *!ԔOc} TVVtA[nu}_~:3a`oŶVUIСC7|UVQ0M6\ɼ콶dɒSN9%:SהON?vM6-=|e۷o?W_}5ؼy /BQQQz>bۇv*Kj^=Խ~dʔ):t#ׯK>;.x;vl0jժN:gϞ`޽g͚m 䡪:={<p|ĈGݫW`_/|wY:L>}EwztrHymN{w};Np=z0`@nΝ;Æ C5]g^v U5 M6M_Fz#T~- y'NӧϓO>٥K L/Uղ~t>YreϞ=O= ȡ@4hŋ_7lڴieeepvڅ}>=z|gfC=4~׎8p;\6l'VXѤI/|Nƍwg >|ٻ^T~Mm ]x͚5{"_UM7HMAlN TUU 4hѯwUm;h֬ټy_|1,vL-[VvR^^~A]v7Ν;wv_y vF-ϻnݺ^zRR2\UMGX 6nȍ@C>ys2eJ} 7jt;l_s52q!lذ!yg;unjϼj7+(---,, !t_U-=N Wbۇv*.U`{wAAA>}nt :+TN̙ӹs^z]{+߽{ÇoVGÂ?OSz媚I/;My~`w͚5wq)lذ!t^UM(N Wbۇvy|!Ⱥ= ';ȕ@>9h'g/r%}h'j'ԇ ';ȕ@Orer%}h'(T'o_r%}h'XT'ir%}h'ЈT'cr%}h'иT'ٖpC;\m 4:UUUÆ ?HRѡ[=N Wbۇv$W @m \*'4 (}h'@r5Ш^,4ɕ/_޺u[nO>:u_իWϞ=8իWwȍi'OOl?'xb8޳g{,ظ/v> "C #<2ذaCӦM?`_СCz~G;܈m \ͮ> bۇv$Wl;ٱovO 6|wȍUv^m \*'4 (}h'@r5Ш^,4 RQQ yF;܈m SL)))If`<8? FlNѣG:sB0G?wȍ}SNa> sBݡC::5h'C;[nF* @nĶH={o߾{Ts'wȍS\\\PPЩSN]v4iRtRN 7bۇv$NeeevpԩS~%>@nĶH~a8i׮]%>@nĶH'ݺućȍ ճgTK|H;܈m PũT1%>@nĶ[l6mرcnj3z뭩T*xȶh̙~av>N.]:| VO?7/¨QƌSYY}9@nĶu1cL8qwVX1bĈ'|2.?r#}h'@m***;D#C^{ꩧ&N}/v>F7x5km_k'C;uց6pzov'42 ڶm[ FlNj,Ydĉђ,Xcݩ FlNj1bђ( <8r#}h'@Ԗ-[  jeeeцX-^G@;܈m U\\iӦhChF}v> jرz0CmݺuW^=VUUVV֤I>ۢQ=N 7bۇvDŶ ͛7o֬q!:#CKƊ+_zOd'C;N8QYYy{dlذ!:_~B;|> $0o޼-[۫WڴiӺuK.d͚5`* 2eJ`C9$wѾ}O?=?~GѶmYfC%%%͚5 ߿02nܸv}yW 󋋋E#G Zh'ObۇvDսlذᗿ婧_p{ʕ+WZuYg]{wN?׮]f͚pǾ}"?+6m{キ~ 9aɒ%p>l/_$<묅v$}h'@T]I?VZtAmڴy׫viӦof8g:t'ץ,]4=.[jZZhEIs=\LUƄ>;\rezZMY IlN0NZjկW_}5 *-[~ᙓw]`Ms2E~EEE-v:C#N/9~͞=묅v$}h'@TIW^i޼ᄏbŊ`0xunK/#/ƺu3g{;ygyfƍ_]0jMGV#k-Z֮]oԱG$x`񒒒` . `O jOC=J֯__QQqUWy䑇vX.]FN[l٪UO0u۷5jԾ/f͚uq_}h"ЫW/)5]gM'C;bIc@>m U\\ȑ#Q=N 7bۇvDo޼91IlN3g.X EM2%r#}h'@֭[$;\fM= FlNj;vʕьlܸ[n;C;܈m P>`ԨQђ<%%%w~h'C;O>јИ2$r#}h'@&N  6 4hӦM7h'C;jsw}Ѱ ѣG5RP=^Ky䑵kF_p=kڷo?q`sΉN$}h'@rKKK۶m[PP0qŖϏN$}h'@r}; vi'pBAAAb;w<s1I@ĶHN&Mtg292: ȞIeeenݺvvڹK<ԫɎwַw> I;)--=餓[XX.Pbۇv$W#i';v1>.C;I&K<FlNj<2x9> O;^,4ըrBzЀbۇv$W @m \*'4 (}h'@r5Ш^,4ըrBzЀbۇv$W @m 9gȍ 2eʔnfNƃ@nĶHnݺ͝;7M3ft=8Լ@nĶH+0'aN1cF0r5Dr#}h'@taܹT* 'm۶ ƣSv> qzJ:t<kSON; FlNę8qbQQQ}4iRtRN 7bۇv$NeeeNs}v> ʶmۦRc=6N 7bۇv$Qiii.]vwi'C;*c|cK|H;܈m P'NLR.!r#}h'@l߾}…#F8sN>T*<H0GȍI1w;^}իW?sc9v>m۶mذa5kVXh0'̏i'C;ضm~^q7oM0'Ͽ|@nĶh`Æ +Bv>!͟?6m5kYgգG>[ּy2'' FlN}o~8ٶmۅ^عs]u?ioSs#;r#}h'@Yp7̑K/4RMҺu_"srpnB~M;܈m `F1a„ܹsvm&9昲`N;܈m `W^I~;߉֒]uꫯN VHȍ SNH~ _֒ݜp v>wzK.Tnݺ+ww FlNh*M>} C;L~'W]uU?=ӧ/~|;BlN3bĈ &wjI߾}9 v>,\F7ܷoh3)*ܹWgN Vٯi'C;ۿoΚ5+=m۶[nO> I.]կ|Ƀgg+Gw FlN4oڴ)sk=Slg@0?8+87sp@nĶh`Æ +2SR`f0?8+z`?@nĶh`۶mxWl޼9zl7`f0e@nĶhx۶m6lX3}h0'dv> )ϟNwqǫz`0x P$v> Ao߾p#Fs9 l#xp4zBN 7bۇv FlNA;܈m @"h'C;Hr#}h'@nĶ ȍ$v>DN 7bۇv FlNA;܈m @"h'C;Hr#}h'@nĶ ȍ$v>DN 7bۇv FlNA;܈m @"h'C;Hr#}h'@nĶHT#}@=m \ruC;K;.}h'@ri'@ŶH.ȺɥY>  bۇv$vd]lN܍Q> ALRRRl'xp4 wbۇv$HeeenΝɌ3wt*^m ,W^yeaaaOv2cƌ`kNsC;CsMRa8i۶m0 bۇv$N޽STvڝzI{%}h'@L8(}N4): `ĶHN:IΝ%ȖItWm6J{dQlN$*--ҥKN%Ȣ 1]m P'NLRdWlN*//Ft[ 2$J iSLYfMm-}h'l۶mԩrɓ/^\`O?tt(I-Ztw|%%%wH@RVV6hРh`h|ӧG'}$m >`ȑѯ?[@ŶرcWXqƛo9>s[n3fL ~ӝwYQQ$dm 乙3g.X >iѢE=P!}h'犋7mvz6r'$ClN GׯC9$:'^~VZCmݺuW^묨̳_v[!}h'Ǝ^WeeeM4m;v+V/Rdv./`-H@KB;ywUR" B;Ċm =j'K.0`@ͻv:nܸt;Yze]֦M֭[_r%k֬I8~#8m۶f ST;M2%PRRҬYpÆ 7ɓWG?ޭʸ̥͛W5yڵ{gGllg.Y?6a„-Z\~֭ 'TN bۇvyn׾;bҥ'tR\p{ʕ+WZuYg]{> x۷odv[oլY`{Æ Gq?嬪ZWUp  j۶_n|sCv@޽op~^ +}h'NVXqԩSvzMٳ;taٲeyZhZvy晷~{?{PgJJJU-[ '^F믿Nށ $VlN ս+p@z|a;yWD˖-?pr]ɽƷ!CC՞GN`B8êj~Zh'XC;=rbU,Y$ODjj'`={~K_ 'g.U'N,Xe .ށw}O8p`xgv>s{N,Y|Yfݺu7n\:?TTT\uUGya֥KѣGGNlW_}u˖-[jNfΜ_; eNN/5=jIծ Vvj&L(,,lѢe]nݺP^ +}h'bIx75kG>D.cƳ״H@+..~?ϿGGs.r 4C;s[lo~v4ye˖E? bۇvoĈׯ~OhyԃAm۶->hnz 7Y&M?Y5y䲲$IlN馛3gΜ{' >hD***n%KDgM6mҤIwH@uֱcN4iѯ++W۞z{ $RlN1Ztqƕmڴ)Z}[`ѣǎ[YY}m 4^[l6mZNc)JE!|fΜFV bۇv$W*ɥY>  bۇv$vd]lNNm \ uC;K;.}h'@TTTdFI(^m ?J E@! 几T)-" ?.G^@/CHUhkPP<^CH^`$@Bz|Sd}>șgf?c;$WPP`>f'2_5@h<Q*==O>Q֭Q{'sy)3 ;] ۶m'$''{)5d}:}INNNKKڵKMM8pB}:/+ϻ,Y7xfd'NUUUǎK.%@m>NDI&$''ٓE hTXXإK=zpx3 ;K<}R/NNN.jgAvTUU͘1Z5k֬d?YO07 nxfd'UUUOgM󩧞2Ox}K'ug bpq3 ; N >yfd'BB|!@Fp3 ;('@\>NOpR\\<`&={tjC; ~xfd''8/[l Cw x'fqm5nꫯݻ<_ffffdd 6L~tqڵ_%iiiֳI&oӦMyyH'jˢ >gAvgpbXDrJ5k 6LoL/[,!!wޑ7|S%.V:tW=zTNM}tV&-;)((\lِ!Cm=z4++NQ 焠xfd'A 7W|b&K*++Aeee?19q͛մDP 80%%V]yyy2-=zh?N1 焠xfd'A ? 5{;u\r{[nsΜ9ZcШyI{+qnN 焠xfd'A IL0g1j+'CsBP<'^㓽{v}eee0@,l`9!( |Pp#F'(XqNgAv @l`9!( |Pp#pF''FsBP<FPON 焠xfd'A`16V}7B`T|Bph(XqNgAvaٹ@֓P>(be+ A>N &P>(bV>|/cǎ 8Tt2 c޼y\\P< nىj};nC#+*3 ; nʶ޽{?*;13 5SOy^233 RVV槱6ĉcƌѣUW]ummfΜ)m:waÆiӦtǎ7moq={ׯ(b*ۮꪕ+WIF/_dff;v9g|˻6LZYf_ezŊ*9Dߝ8 p| gAv1Aʶ&M_wg']tzJ{UZZa\x=ϻjӴi^:ԼysZnӦ9%ى[Wxfd'! _7~+Nʶ'ONK8$:ꢋ.:{o6-]1=33 ;+Yfڍ@)?V^-f 0;9WԫfΜ9nܸsC?1vܩqN9-K.?8 pd'A>NӧO7iDݴs_'@4PI vڧO)SX_QQ1~ݻK5(?sss6nى}b„ W^y'c'ǃQ͜1c(:vasL={vя=7|cov}W'O,EEE5ںuLŋ<hӦڶ6 1N5jvZ^|y߾}LiyA=nʕ+ebcǎwM&}̛7OӋ:B |N'@ ;`';iڴy!Ƨf&$$\uUofEB&7:CnD'>g' Js‘#GZh߿_?~jڜٲex{Qrl斝ﯾs5"'Nt$:yfd'?;9m< +9'h޼_~)̙?;G9r|slv&YzLqƩ˖-СC=$>L;B |xf' RW_}]vg<53++[nٿ9{ŋ#G4jhŊ2;ѣG ;B |% &P>(be+ A>N &P>(be+ A>N &P>(be+ A>N &P ޕ[j, e+ >N]^^^AAZp|y|zDsB8<xWUUս{w6 n#PN:[26yd)ꏔgRierRM !>NpnÆ m۶Ȑ:[ nUmMP<"M֋*ۤBN9)89!d ~^{RpwYPߤHRM 6)ۤxSU@?o~#W_\GK,I&T&@?JIIQwr͟pkA($EsEJ86 qNgAv[T-7wZRJӟg8'3 ;;'\TSqNgAvK]lRqGh `yfd'cNBw)SPGKn۶Mr fQAC8!Q  t4DiӦUWW& 0Q-NpyZ>NBT\\xb@Cٲeˊ+bQ'N}w]EE^!*͚5K~ Q ^<P|zihtҒ}+B? 'xZ>NBvڢ"4CڻwG}+B? 'xZ>NB8Ŝ}+B 'i3 ;Eȕm.B}n0<{ZlgϞԬY2Vj3W~ͪ[c޼yV1Q`VK.ĨE.꽸 !vy B` ӂgAvE4Hjʗ'K. Ri}v`Xᬀ ݋x#{q \F<УG?XoaQgwhgk0 pꚟӂgAv J]x'NTUUرcï > qY?E3 `jee>˯`H{q`rr*x駯EPg ;[֍[l0G+P<PxVgϞT /кu디׫eee&LhժURR}w15d2e˖A=wA樇jPPP~j-j׮]bb … ۷o//ӧώ;dNrrD9ɺn ,6U۶m`mLʛZw17~f(S80l0Yn׮]c/RjjA`>Ӄq-ZNދ+'!ljqtf'֣9*&{kU3eŬN#jG\8Vn~V~r<g?}³RzNꨯZ/ǟz꩓'O~cƌ;9rÇ?jtÆ UKyWڵ|}՞Ue,//wYYY5kH[QQ!#jl-Wd6... >C/((ZN˲ҖkGn#O bX]`[o뮻J^wuDVfҤIǏWvCCsAFjkڴi꫄٬FonO>1{ދ+'s'8p:~PQ`9?0մZ{ˊY~#0WGۻv| 8vO/~9-xfd'w)>|75hQ&MK棏>JKK3j_vƍ KAgϞo>S Zݻw+VܹocӦMZ2l}R^|/Z;sYVrw6b~)@LL޻ ={CYIAcՂxwhho_TmufwDWiﴞs:r36ӈcI}}y29.n+`{ }³R7jݶ+TfOqȑƍ£⊷~uBV\٩S'J>ԩSRu۾}co}'NNMM4\e-K{Gn#懟 ._H.j j oJEu_W˓lҬY3C;꽸yBN;v]믿viw9ZխD֭[ExnGҿۊYF;avTZ9kI;Sv9^sZ>NBYZ(EaUUՇ~8vXOu]ǏWZv9Rʍ7W>6mڬZJ4}5{̘1R}N2ŨY/((8~<֭Xf?w[y@/~?ߡC㲬eߑۈS4@V>|w߭n0`ىZߔQ {:uԿ333ӟj A۝<}teo)F -;q; r;8vqVo?*޵ VϙJ;g?}³RW֭[yRDJ9VIWqi٥K{N͗W4n8*[n慎˧9ѢEڵ"{„ wO< 9su{eZl[o9\ݻ'Koz4\eF̍ .˝C6 .NC80bY.졇07j6hF^~em^\=s> ^\~i3 ;ł ,vW}+Bo322vڥ?z/ `9-xfd'Xn͛ JJzKߊ Px <P={C^yǏ[ 0Ao8!ӂgAvڽȩSfΜo?(z/>qB D'O7o^!Zj˖-1 'yZ>NBzk5IIIٳ-b4{rZ>N²x7CeeԩSO>o6(`'h<-xfd'z^H,? b = O  @-ضm۴i dժUf:s挾@CA` FvTWW\r̙K.ݻw^!"vڵh"  8D7Vh>|7əY ƟǏ4t^&F˶Q!@yBy<[CsBP< m8'3 ; n@sBP< m8'3 ; n@sBP< m8'3 ; n@sBP<xW^^n}ڳ/m8'3 ;wyyyCk-Y!e+ >N]UUU͚,e̗gl CsB8<9rdNTͭ nNMMgUWWO4iĉgΜџ6Ryfd' 8 d'OVW\qŷ~+'N3fL=nM:Qmrrrvz5|yEuQ 'O|rᤤ3fӧcǎ6lP?^zeff2E@Ξ8qbY*}DApPyyyvLTUU5iɓj9bTWImsO>ܨQkgff\R&O>vXK8?xӧO[gn۶MN}]w]Ν8zGeWqgAvQI'<+355u߾}j /y55dӟtذazG b%` M6UӇjӦ͹0I&׿dziii֗L`#F㤺z̙߿u֣G9"Jxfd'c->kfժUÆ Ss.袳g6|a~2dĉ V%`%{|g9}嗟#;?Ι9s*33'6J9q3 ;6' j߾5k9CW;wY|3W 6o,_* v_ 'uOOs5kj 7N0wEmۦO[҃ @$Wٳg/e˖(..0`>7 ֥{ҥn;rOԯ(*Ǐ޽{=gnnG'Jff^^+=}-#D}A}ᇥO~"sݻիPvm7{^5ey6--mڵ>~}gJ?###;;ϧ~~UoܷotkӪB eZYW믿/Voذa1\^5p> 0NN3ٴiS.]{Le'Z_Zzx*ݻwg?֭<5}tׄnG1i$۴iS^^!>B ?zTb#gVz03 ;[SNRw-[̨]w|˻馛TK3ʫ/_.仫o24i͜09#ߐ?54zhj=;}䕯T~'oڴ/ZnMfSN]C 3gG}dofGWI"me_U+mD /֗K|Iy_<. bH}}lI-!R~4iAVZfN."[URRrWVV}Z߈[Mhv+&LpB]vn\ɚHlߝמOɯk9׈#D}9#;yyyyBB§~*[nվ ۧ@ /p77έُdqUWۜo֗Ap. bH=~ly'[9.o񟝘KqBN5aAAAffeˆ btSɹzӀ0͝;wѢEm۶]{zZbѥKM6҃ @$^ɗ5 //Ϩ?gGyČ4.6G;vLMt\]Z9^J4h,ԩS2}ĉ͛7$@\Đo MFFZSN ٥|PV 80%%߶δ\}i@8~[7ѣw}Yk8}D7>Q? o۶m>}HYl~U{;udރ]lW_ _{Wvl~5,KWMja2{GݡT~Ι3|I4!'>:pYƍ^z=K :4==ꫯ9s[kB[)۷7zNE1b9YYYr8kI.]Ə/Ϛ-UZ r v'A Dǖ[|B &<3\hNEǞ,??Oܶm㯹Ν;gffy|i/Zg3 ;(%>;'`qiCc1>No޽ݻw0`@YYyQ= YvvĉS⟴*}DpiCc1>A8'89M{I&M8̙3s6FZJ}$' DI-\i@hl<+m%#~'!8 1$>OjE'oOB/Ν;di'~xfd' >Bp. Yyy=[/O%Ii@Ⱦs9ܹi#Y>NA|$Ld'hWPP`>~l|y|XOB%ɹDgAvP+YE >Ϫ'3f 8  UUUuݼm~l/ش^I5"5^Է= @yfd'M r'ONMMUǖLwiȑzS i<{D”N:ǖh۶ƍ@yfd'M ~ h۶mNc{]vMOOacO>N ,YҳgW]u>}{gAv NJJ1cF>}:va5?իWff!C*d'WUUչsguE[pn4>Dkgff\R&O>vX= &L<+TW? 4V |hIӦMCڴi#M4׿%ӻwNKK3#bBaaJܻu= gAvZvdN_~Nb V 0@>w7{gAvɹٵzj9sq*d'XdɒdݍǞ}G d'Z߮Y&77w~Ζ-?Q{rk[a]!p:*3 ;.7lJ@80gΜ ugՁ͛7VUUﶶEri\$J3 ;.7lJ@Ξ=;W_}BJKKΝo4B]gAv˭ ڳ!d'ȧ)S߯_lX֬Yd͇-NF utT<xWPP`>^pS;vLmܸ^Ӈ q5z@]p}Ļ]竇z+##;N:{)SҥKnݪDHpPG%gAvsƍk߾O?O2Gћ"vo>BfC7uj},ԅ:*?<+,,l۶m󓓓?Ô7E ;x%8e˖+V=.Q }={LNNСl۶mnnFb (***Ka֬Yp)G  ~hѢ'w7/YDoBvܷ~_K.-))%`q>z@](BG%3 ;7Ne' . pDNN>(cQ x>No;vLNNݻ7woN?~2̛7O}g-[ֆyIII͚5ۼyv۶m^xEP~n=K.>ӱq]0Wv7eĄsT<H17 d'y^߶m[F5kУG?XoaQWkCp2z7u]J*--u۾}ufP+%`Fjc!5wہ9*O ~hѢd0~k[XuRea P8WiZvvR>3Qؑ[mf:6 +` vwہ9*O OyyyR?0k֬d? CGN`N ~ڢE 5]VV6a„VZ%%%w}ǎHEHgмZz{饗RSS  [NIIY~jowV5^u\1?¹J;v>UPP պ <ڿZƋ-j׮]bb sF6~oms@f#F0zUsTnjsw9rѣÇǭFM4ǎSz꩓'O~& #խ:jԨ^zM6MͿ[n__ח|POPO:5%%駟V7_^p*\9|TZKf͚VTTr =KXg:ZѣG8pwYYYj}pp卨\ꮻR+yu71k 1:6lvb.q|W %%%Fͩu֟|كpJgAv"̙33fXj^pWXX8uԭ[G;@ߨQ-[^tEZڽ{QM4/U>(--M5_(W|y75Ԓ更Nw[1?¹JiKKK/5wܹ9\s5RF:2-KTKJJ._~ȑ#ZM6t% Rkn؊+Ԉ9W߈uLm_z՞={TYIs{# 8ṷBƍjb}~ڿ_|Eզ[n@sT<Q$++K`-W.N ѣG OΝ;UhK/6O;^vlc֡)Z#iǎ\pp˖-͛7wo p.mdmbŊnI?#߆?x;wXiӦڳ[Мp[[+i8b>&q!YUs `x \q[֏b}}AQ^nA&F5k,S9*O ӧOgee3@ 6lꫯG@cǎf͚}ץ2S5jn:Kێףjum*mPhoA8wb%pjasvvvjjuQski:u?ߕ:Zms+WvpCFm9.F!+8o$AgqGiܸ9})//OJJڲe4=sT<9f/NYffCv\W<}t뮻ƏjjڵF]%5j7xF -;vֱe*mw̢j})z=uTxذa{9x1:J 㰛Ͽ/2§Nz;t蠵ef̘1~N[g:նA:Ww۷)S @ q 8k*uyՀ 8.+8Bo#GVVVnܸѰffOSmpJgAv"DJ|qԖg}ɓa-[&4<@6m7oޥK{N5x[hѲeE%%%د5k/z-⬽WM8WiF>1"11.{衇d0U} 2$!!!==}͚5Lg=;P;xUի7x':̙3OWiLǵRe[kNd„ ? :f'omL6}q6… ݆x5Ά 8В_W2fǍfZGq|5#/Q x>N@̘1ԩSz9 $?~";Uں˗Į={$$$3pJgAv"رc^ s=wY` ;.77W3\+**ںuQsŹgϞ=)>=ܣ @8G%3 ;[oڵKa֭6 @,Xę}PV~K/tz F%&&fdde0}HW/-77W?,N[n]AAI7v[o8=.yT< kHZlϭ u׳yʺ[DoY+٭?3זٳg'%%5kljSNٳuwӎ+?~\u!̣}Hd՛By.NW>uƃ;rqT׊R|֙Ktہ]< (!̹8u̙3R܎Pj>N@$žV,}Tuؑ[ָV|g=;";Ԣ'OUVmٲE uVJ?DoW!B- 8dl[GU^^^\\ܫWiӦrw-믿5k1f̘;ȑ#G>|?HO1{0ۏ=Zp޽|a㸩z)vٯ_?m/qTވ>V7z0EGvu/޸q@I#eӧQU\Pjxfd' NJKK/ݻwNΝ_~j*p5벲&M|Giii?|Qw2oLhB56\|/#G6v6mjժ6S={+VpN8Ӹq/BWom`7/6ݺu3+ُُ0qܬO?MLL4Źqa7U[=m? vNuN#ԩS'ԅ::*G `;v\p-[4oqj~ZܹShK/ژi+n&裏|_ܹsbMjϺ/Ǖ7_G־ 5M o5jԬYO5=1޹>n=_{vaͪ)\d':"XӦM+,,?{UVIs׆?z@]ӣ>N@$hg`5@8w}vs)ҏL)rM}ĉTL^>8uWXrm9Ҹqcs;'%%mٲYfZFM{k wI&|uːu֩wa]Gqsn8Qr{#n#lYm@Pwq̙K.ݻw!vڵh"ySU rxfd' NYTUU >ܼSE޽N6{68pƼT]\\,H%IDATWꫯԍ=/k&Nz;t蠵ef̘1_uy ./n#GVVVqǁ/̟|| Exo߾SLoQFwq6j;.ڃZ}MU{/MOd'8|oSc^-}V?RdF= P< 󼲓F>1"11.{衇***T} 2$!!!==}͚5LgThѢe˖<@6m7oޥKڵ ixUի7x':̙3ޕQ0 :T zf'o_W6ƍfZ߸7jC/7η_hQv &?2S*߅wj]qsm8-ڃZy#n#ljž)Yd'-D{3 ;?; XB]سgOBBBT u``Oxfd' j1;)**ںuQsegϞ=G{&f@ c @>N@$}C~K/tz ,111##c׮]s&d'-D{3 ;oݻW [n]v~YpiCBdP< ^t~@,X1-D{3 ;2k,/PUTT̝;W?|qiCBdP<!+Wܲe~@H/^\\\f4!|l!2( iӦo߾} ,Џ1. b[ 4gAv"g~@0;uY `Oxfd' .]i&b0;vlڴiK"= }H[dڵkKgee `Oxfd'{;z~m%KL\>iԏ ̟?̙3O֯qO۷/\w݁ 1-D{3 ;[n݂}R5k|. b[ 4gAv|l0ؔ"= }' 6% `Oxfd'M !|l!2( |}`Sb[ 4gAv|l0ؔ"= }' 6% `Oxfd'M !|l!2( |}`SYyy= = #>`),//|hؒ{G |p`SYUUUFFƛo[]vgl = #>`)QGi߾oqV~~~v>)4v |p`S\aaaJJJ۶mx OKK2_o = gAv\po0ؔw7fddmV>:t ?Z64>`)oɒ%CM>/55_acO>N SSS4ݍ@} 6% &<#VWw7{+>`)1wթS'ݍÞ3 ;.7lJ@w7{gAv\po0ؔXdݨkiL |p`S_TT4wܑ#G_>L//@U^^7o޼gެYdOu@Co@t>N Q㥗^ڹsgYY٦ML_`weD￯Ϫ3{]t3/_^]]3 ;wևwY@N]^^^AAz]˳C@4iĉϜ9?g#m'>i`曬=ah.]kxfd'񮪪*##ÌO R|yǦ)d'h=qi)UYOʪԃaÆW_}U3 ;QFuA'ꂻT۷Gd'?xӧO[g~駿/uֹs]tM˖-6*}`̚5+j͚5W@yfd'ZF۶mvZPP,_jjjJJJaa=#FXqR]]#w[-UZ%fďg}ɓ,?ꪫڵkھ}nAoBvEEE?ϭsz)&Fam,sf̘q)=I??>:"3 ;͛ٻ(+>p01{ybDB681 N稓O+#`PDqf 0s֦ih\%FTia8g{`Rr]} Dv>uud2]vw.Z(>E;p̘1cه {^bEv~6!h޽?X͞=ȑ#8ۇvjkk$ݻķt o޴iSaS+WmC!-ђ%KlojڵVG>>0z( 4][܇v[ gu]_k&J˳öaهDf͊VRR3(}h'|K.Q;qhɒ%eeeه$هp?$O>a۰CZ3gA!y;tЦM={UTTӣٕ>>4`L&.-Tmmm$N|G8b;?߷ox-i+hTTTs9mڴiݺW^//9>k׮Í7W?cvpv%Eww[oѣGOvNvꏰpvwp Zww}wv@b;Dmm JFMMM|W^y3$ή]vf}~L&~W|k .N:۷,|L[n;wG8f̘`ÊaÆ 80LN4hP {>%:vڵswwرCwIN%`ɒ% N.ϟNF=|'>OիWG#ᬩuGF]!Clڴ)hܹsNpҕ}Qyy ]C;(P˗/6mSO=u/[>>ٲe~] 0K.d2ݺu #luׯsGNo|+g^ ׹öa#8'Njjj|ÇGcƌ[v;p ƍ˝x9N9{g߾}{G?ڿyFb_+YbŎ;ó5*w¶m=ayΝeee&yy ]C;(D7n\^^+}ه~СC7Sᵮ]fk6κGtMWΎO: _·GdĈC 2eJX ۆ=dGh9Ӿ} .cǎj/sj^ݻw&L;پ}{v<<|m۶xVdY&L]΄??~{촦y ]C;(8O=oWi~v4/ V@'NM6i歷ڵkW ?έ۸qcv뿞s9nX^j鷓;v^x/wAx/[nalvgWbN ???SbRYY$pJKKtps=cǎ=?愙aɷ ɷ`ȑ=PXp_+W9m?߷o߭ޚ7uR; v^VVv8f̘Ó׿8ӟGVyy ]C;(oW"~u 0 ɸK<~#G̽Icamf 'nv g2UUU{綾^zgф]v۷/--]`Au6k֬o'>غu=z<#^{m۶mÄ?sIS ήS*8p`ԩwS1](Lv7o޼gϞ0~0ri!ή#G_Q'|r߾}SQ[[d%uϘ1cÆ իWHki'1%%%8ۇvPVZUVVXmٲgGL&8Kf͚?+n ]C;(s΍:UoS֭[|jÆ +WG>PRRi'O; Ν;/^?+Vs=|p=Π¿?ܡC6mٳ'Ϗ3g#NviӦRuu3pf% $pb֦M֭[_y<->#^2vvq>gNNve˖[.~W|-Zm۶YC;('N8Q[[;~Ag8QSSjW^i~'C;9} PP'O?+2oܹso p% |; ^~vE{;vءC|;{ L&Jdɒa'^xavo֭ۈ#O<ħ>Ν;^:)++kݺuÑ#Gk׮apȐ!6m0~ ; k;u4sh0q6C;9} Ph6nSOF88q#G p% |;y3[nٽ{;s 77.wrl; ysϾ}¯pG?h~Vk%+VرcGuuuxQFNضm۹6,ܹ,$q6C;9} P/^Mp=y䪪; C;('N‰Y/;uǿѪU^{-/v=|2d߮;mFYvf͚p0u9*++g?ݻӚ:fh'O; ӢE)~j۶m8qp#}h'dI'yQF? ˛7oJ]v\rI˹+ljNyիq]tQlҥK/6l؋/Xq6C;9} P{plgS]]hѢ JbN ɷ`ӦMmڴy뭷vφs6nܘw ˫V:vcǎ /8p .aqݺu Mg3ӧvܹ4<?#l:3fl߾=⁳-}h'I0rȇz(,vmwuWeeeX~W\YwoodUWWm?}nּIx󲲲1cv׿uXu=z{NNv{oժUsϔpĬX Sm'//~UUU{綾^zgф]v۷/--]`Au6k֬o'>غu=z<#^{m۶mÄ?sISi'1NHbN Bb;)6si Il @A())׃6k֬{)ri Il @AXrXmݺ駟G"b ÇIŋ+++ȥ'H@$}h'Gg4uési Il @ضm=Ϻu.]w8u. 8A"C;( sy71L4>p\qDۇvP@92~{{BXx  K1NHbN KUUĉ3w[hQri Il @ٳg|x[H{n…@$ >Btȑٳgmuuu<2ή]} b m۶M>d 3gΜ3gNmmms\qDۇvP>s͙3gٳ>y-9ǭZދ`>&. 8A"C;O Il }25|1NHbNhqDۇv@~L %@$ >dj(b Ѐ'SG  $>>J'H@$}h'4QTUU> #}h'4{j(,YRVV}{C$\pO %@mmm׬Y=̞ ]veaSb>p=5|ߵk(D'Heee=z[S>p=5|AyyyΝuf͚pTVVַoN:ƧE#}h'4{j("Çv\8Aׯ_Ν Ѐ ,ZhСt~Ξ=;> (&C;SG ݻwN]K<Ѐ Ⱥʨr-@Il >Jt]Ѐ 5|p.h >J\-ʸKJȕq߼y={֬Y~0r(NC;(vUUUcckiAhO>}ȑWֆ9af_ZbNݒ%Kʲs/6E;S}}=3vC5愙a|E%}h'Ů/0Ңh'@q>}رcOa~*Hp[oٳgO a{Si99wܫW~wys'a+>>7ԩSL&~;ǧrh'@9zM7ݔ{z賟l߾}{˾~7%l {Ȏ)>קOA 0 ɄN: :4>E;oܑ)S 2$d/wr6} ۇvƏd~vi-OENb3cƌ dVTT\uUfo߾/rv~6!H𾚚N:eNٳķt PlnM6e>ѣGgmKl W=z|ߍNbsuUUUe^{TȀöaه@%Dwd2wNbc?#.F铝 {>R,}h'|(9~ד Z (6w Plkגof G_~ƌG?dϰFxX߀B;M8]`AaEEŐ!C$G~rVm6!H?;n7o޳gϚ5kϰFUaN|3Z(6ׯsGN:lذx39_~?r'mrGJl @>}ȑ#W^_# s0?¦ѣ7tSm8:uUW]5pp2`q↭¶u E"}h'(x=;СCu9af/, PJKKGyꪫ0;![5ӧ;[H懭+(` PۇvPtƍwu _BXt P|H>o@?CW]uUG xÆ :uri'@ro?yC;(.ׯsG&M}.Ι._ԩSs'mrG(X PJKKo޼yϞ=a0 a$Z{PۇvP\f̘`ÊƳ rxW6!B=zt vÆ gX#a7h%|͛6m>;믿ۆ=dRȴۇvP\+"^KӧСCöaه2 Ga>}ⵤ.,;?l}H!NJl @q}/F|;iAۇvP\b;׿O% ?Av @^C;(.3fX`Ao~޽{ǃI+";?l}H!NJl @qY~7ޘ;o~3LN0` r'mrG(X @^C;(.G馛V^[.{̰U6!;B!NJl @)--9rs{??߿uo~U6wB>b4}c~yafi'y%s=cǎ=tP|]#aN|kh'y%HO>}ȑ>i, sLNJl @Q+--ϟy={3,h{P @^C;(vG]~3F=lذ^za96-vWbN ۇv餝>H' @:i'y%I;+}h'N @^C;tNJl vWbN ۇv餝>H' @:i'y%I;+}h'N @^C;tNJl vWbN ۇv餝>H' @:i'y%I;+}h'4!E.'>ptKl h'[bNh@; ۇv@ >NHЀv@%-}h'Ů*a@K>bdɒvCH/]O+ -ۇv;ƻK<)>Sp+V̝;$OdyT{ܪU{G @Hl Iپ}>ӟ.՞P&UUUM4Jl @۶m[pa:nݺe˖FC;cƌڴiH>|xܹ+ŋw@$ nʕ6l_Y'n_"Il @\III:a֬Y NbNⴓ /lw\٧مy91 @1Hl @ɴk_ZCiڵ7n^]޵kWXSdIN-[ֳgϺ;{ܯzd+$:;v^x0:N±5N:ݻwwyHާ $ .}̞=ѥ$LX`A.]ڶm{wќܝG#Ƿo~M7 ꯪsg y3x[nݣGGy${۶mx~ISSYY;tpwF󶓦^NSb>vr |rb>5D;9ôb>sƯ%6k֬R'}h'qVZvm:ie˖gy&Il @ܑ#Go*N6l4iRyyy;-˧NzСG@% Y}}ҥKLx[ƯӢlٲe,++ʧ~zfe2P̚5gٻwoh$2L|R$}h'4nC;tKl h'[bNh@; ۇv@ >NH܇v[ -]bNݒ%KʲsIk ۇvPjkk/l>ɶ0@˗>r-={INrݿŧ@ >ZSNѷO2Lٻw0R^^ -\bNx_>}8`L&ӻwsСI%M0!\}ՙhѢ$hۇv߹s(={txR)}h'|믏I=%Jl d.UbNP>}2@%EwwxR,}h'gG]]O~9&R&>}z|)c7N]bN΂ &ڵ<;L4N>%L+pR>C;8ꄓ pۇvp '|2gΜrUUէ?Çw}w̘1W^y?3k֬}4(m ۇvp 'IMM/СCayƍO^,Y=,ֶjjxvKl P'|'{O>֭ogOt\?zQF@%W'|A/_>jԨh .8rHѣG_y啿ۿ7mvuׅ^{}yMnUPKرc|/0hO,Yҽ{̎TWWu]_~W^~СCիWgnC;%;vnz"|bvd;kOYf5(CC;D%ݻwλ+O᭷79p0sԨQaU]4wæeF4rݻw_revvUW=M3„/xl;i<3z~aaUSzՍEd֭aÇ{ۇv0a5bIq;9reˢ?ǨQVZxv!6-Zζp_*,?`xMn_dɗhwƏm'gFO_2ymE'ںuk挈4C;D?l{'uFm?+Nx\湓80lذ/ˏ<ȋ/Դh9N.h>h ._!C.ӟ#o֪UhgI)rgv5O\3̇c @*$LO>^g%NR!}h'g|q9[v C;8sw1 ۇvpF'솓c @*$LO>Ni'>@>9UNi'>vʔ)3 O&iӦprL;HЀ< o@ $fxsR }h'4 4ÛC;yHl 恝;wvaʔ)C g>.? 8v^\C;yHl @bN]UUUX-r @ $-Y,076 ۇvPjkk'.ǧ7 ۇv dz~vܹw_㓊vC;}ҥK/}K-O*z @ $v- ':u۷7@bN1cv/|]NR }h'|{LfvC;C%) @ $͛7/ɸK|SHl ڷoϚ5kfzM6-Ʉ)OWVV?ݓ@bN[nʔ) ,زeK]=tٺuŋt, ۇvМCM:u |&MڰaCSovC;hReeĉEwRdqϾ @ $ N4&~y饗.\vC;oڴiqR}=+ٳg9r$"vC;{glNXvU rh')>YfůS4ΝC;H͜93~A z;tЦMk׶o>TTTy@8ƅ^MRRRC;H5N>0-{׮]ƍ)MXSgX]kv @ $ ,W^y?g5u`MЩN+}h'qرon׮]ǎg/o۶oӦM߾}xs/뗕n:}#G>Q3ٳҡC|;{m*++o0}k׮aC ٴiS݆݉ԧ>չsիW75X d2/Ob' ,ҥK۶m/wߍV%u6bĈf6i۷5*zۇv׾[oj۶mwyɘ1cnݻw;7pøqftΝ;kjj~E+VرcGuuuèQ6G?ڿy65X VDa'~{}zĉѪ㏶{e6im=СCƴKl @ܩ]v{jzע˗'^oٳUVݻw?“wycYk֬رc݉Jo_~m۶M 6h'K.Gn߾=zx2d_Qtoxc @% TɦM=u]|y/7N6oڟЮ]K.$wFO5o޼^z=.k\*6D/[ y&_QL|NR/}h'qNb_~cIaX?s7ٽ{y睗=Ȏ;†/ ^3$`S/pƍM,[gϞu'wMN&i'>i'{sp l\}Փ&M&5//œ;v >3ԕ۷o̘1dAm۶lʊIxF/\s̈́ Uk'uMl?3871 ۇvNi^ؾ}M7Զm??ho/u;wn6m,.TUU{w^z_ܧOٳggͪ?vu;|p=zxG$y^}}Haɂ t6}hU7n'Mm9_}? % vWtL;H}d6l >>? @ $ n֬Y իw޺uK.䮻Ϡh'>~z֭kׯ\2"vC;۹sŋ)s=|pD ۇvǴiIG}4O! ۇvҥK׭[N-\p۶m i')><'ONz%>@bN򫨨xꩧI{N0ȑ#h')>&-^^_h'];y䪪ǟvC;h΢EVXNZ&L8prL;H$x{ݻwǯӒUWW/\pΜ9'󧺲Hl @ڒٳgbWUU0bkvC;(vK,)++>a<>D;H~eI6,_aSvC;wѵk(Dy`ٲeaO-n @ $c:ug>SVVd-[0ZܴHl +3LϞ=Ν;_b|RNR }h'o޼y]tɜ0bĈE'= ۇvjkkuΝ;]NR }h'|;%>RUU0Nbkhۇv{d*w,Y,06"}h'|(cg/OdgZye2wuwt5'Q;YlYgZʧ~zq}¦Md[x-fzgSNg›lٲf-TbN T}}ҥKLx[֝)?||e˖ט{O)={;wӧ?kr%mذaҤIڐR˗/:uCoDa7o^.]2'1Ÿ5hۇvPp iWYY9q3vnݺEs}ux+}h'e…/R<,'B{,׭[w @txwhۇvP(̙sxI(>2eJ)d2% 9rdP|}ߣ6ɸK<@K>jժkBڲe3< @&$ ̝;7۬YQNR }h'$^ ?ܡC6mٳ'Ϗ3gߣ@bN œ9spb֦M֭[_y<->#^2vvq>gN$ L;Dmm JFMMM|W^y3 OHbNw'QT/ m$"(0D+:E@":̀PA" 0 d ! w{ʩ>?yO:uZىsP}̙ziӦ>ٳgER W_}1ŋ###(͚5غu/ $Z-ZԺukثWbl˖-d< ;TmAv}zذaO<񄹳uNįy?sΞ=+>ϟ?#lڴɓC5wȨSG}$SRR.tPM W$;5hРiӦG-*0G?sg۶mmڴ=N233vԩSEej %;1رCL!++몫zWrssnNtPM W$;ӧ:e}AH76wnfltc;tRaÆJkzb2߶m[< ;TmAv}BBBD?P4O'd'j>N6; 4d'j>NBBB6@5fd'^D^#/@v~@}x{B:vo^#/@v~@}x˗/'&&BZbEvvz mAv-ϟiΜ9d' Xl#u֩W;fd'^$!!j`fΜYRR^@v~@}xiӦ={Vk^Av~@}x3gf|cǎ+VWěfd'^'//o'NPiӦ˗ːfd'ި8!!aٲejwrssw}W އ6 ;^= /ŋ ,HHH(,,TO+fd'˛6mJLLL.Kmelߪ'NhC<6 ;@9npqhC<6 ;@9npqhC<6 ;@9npqhC<6 ;tyyyJ<<Nh@b<4][o%Z&Mv ld' lٲ]vwv\oVDѮv ld' ~p 7\vډQQQ P;<?Xxq֭]?4hN6 ; ۴i#VZEEE-Vd' eر2;0`o6 ;mrٓoEv~@}'x'd' ~xbŷ;!;?>N]ii={ϟ?bĈnrb[vC#;?>Nڮ]*x9sfǎ-)G-Pfd'dܹ ںuxV=ECv~@}~x„ .]R}DOџ6 ;DsΝ0aY)' mAvpv5hР/7nxmEGGwСK.{oZZ/ >!;?>NKiiwm#FPu]7ydgS^b_1hNhgϞ;2j(%51tyڴib_1%fd'eK,1~Ou===/# mAvXov5-)/::7}@Cv~@}~;w%{6}@Cv~@}Î;Qu]g6 ;,Nz5*)cǎ}5 k @`QdܸqjZRސ!C~ k @`?%K]vUuԩ_~_+F0 ٳ;4̜9GjlR5'wqٳ͝žbsK@!;?>NKiiw߽uV駟ٳg^dj}wYK+F0Z mAvpv5hР/ӟx~uᗿ6.A{}͍6 ;DsΝ0a3%K}"fd'0a¥K,DSNOfd'NhSd' ) mAvx6 ;NOfd'NhSd' ) mAvx6 ;NP iCvo吝6 ;@9d'>N]^^( @KJJJII1.5 @+,,ڽ{|hd'k֬ߧ>Npeر[Nz-2i$+>N}JZZZ˖-۵k{n[oEjW|6 ;nծ];3"""**jj'|6 ;/^ܺuk׏ |rO}mڴIVx_fd'cd|K<_iKZZZ۶m].WϞ=x_EQE'/ `>N|KIL+IQEQfM[ ~xbŷ(ʨħ.">@K}tԩ+W=*5g%~Og+jժgϪFvBQEI|6 ;dڵfZbűcNJP 6oެ6*>|xMIIQ쟁섢(2Jf''h3;cƌ4uM)ׯ={K[RN((줔 +ʨЀoʚ>}GvBQEeNJOp>N}vueӧOxzWP_Y^F(TWMJ ~wh\Me;JT OznMe_V[r^~;M:8_U)I)  v6lHNNVߗ5g Q`YAA C;O<ٓ>WՎf.ms Tsvn5YgԩS'mS^[U{v4s)#W߁U2;e}=!Bw~gn>~{6j8l!G?м{ݿ/0yOjOh줔;x?3/֯_a,Yn}y2'}<\N#ۮ:uv>v*Ѩ}+4%LUeє\V77K?!df"NOi$D_ݛ5kDnSq3mvRJ|6 ;^m…z3/.\0k,Jd'ֿ={v=򩢋Np_ӦCzh7Lٰ&_]׶m`1\]:1K^yzм=>׮[ҥKo^Liˮ!&#[31ÿ-G#|r=јwvȑCCC]sMI˕esܞ2d/4 azJN'Q3<}&i} /^dkRӶ/EOju?"ڄęQ{@o91*UW53e?3fN#{8]]p{[zͷLmkTn&c8ps}fѭcBٰ8/6 [jn;v(cwql[ىӬWoRZZ>N*..^` K;wN=Vd yM1{6bm]W㭣11ѣgҺw2aܔv72{WOĔzhT۶x/y(F9tYٻ;Nebp.Lq.ӧ?j\gػww azJN^>^e4}M7iDmYZ/z_v֞<)\nvQfnd7]]p{[z4u&ΩL|qml=79ì>9xxRR׋ͻࠬݲEyO?MjzŭEvA}.3(>>^=Vĺf*+,,aëK?aTJn/JR 8OŝŘ'pPNgg.aoşoO4}iN9skzvʫfsOnt Nr7Ovwed4[syxtcLݺQ[dvݺuuu_0q#bcRv?񗫯j+ ?~ŭEvA}pBu{ݨQ_o)pj*ȃ5I;[mb2999b37z:lsDl>d˓OIh۟)8&7K;G.' z>ߕ?__~9NDzӔlZkԨ_W]_h1xp{#\NX|. a=Ӆ*u8;sedU?N־Kയr9M۩/X'&h9W.JOn=lQr 8 n b=_dKcd7iƘFurG7v?gʯ)pGs)yyHH/a<5ny>f͚0ӬW";>N$;y5kvڂ2?v2qZ wj*aM igP[Wfu4X+IG6lXp3 >m]3ʼh<]yPthf͚wEOYGSqMn"mV7GdM۷ ۷W7c䟩ye\cYNiJUtSc.]:(ggHhhM9U:yYٻ':\}߿}zذaOUUï8 mAv6;9p@:u Ϝ9S~?\>m۶6mYў#Su)sΐ'gk׮uo;l4NA OAI*4RRRĶ8 -^٠%2S54;эćN(r5~kmOQ?^ppP>7K_q x/mvb܉ |Ĉ999۷o/*VrܹXk"b4‹ r_O/NQ_~e޽M&CBB%s5j쬽 J۫j; eIg8] cvN(w:;(e'5jϕv׽q.eۿ DXznMCj복^uY(*`6 ;˓줨0zըQ'%%'6o\<ձc GyD~-ʮ]A ♙w}wHHH&M}|ٞu}}Ǎ''OԶmyY3=+C ;uh"뚾u|ٸdɒVZx衇gM(&o WvʶN/qƶ휝FSj*ۣNl?E)Ff!nʶ <}P;w4Z.^:ܨQu5VgԩS'mφRNmo|sF >gZxR@P=zt>Q1k*y8V&-dDy'vnEk`fd'{y@a^܇O$;QQ…cZ6Vl7e笃WyvҩS={7ʖ?Lv_UxyO6Nm~7~ss4i~"/֞2軒n?~dddUYg*m۶4͓)8ɸq#bb(PEvA}1d'>ى!11κ:&jEG"$n?rgd jڠ&$Tkʯk۶FWsbTTj+ mt5'M//y:e~׺u~yoܔ!C~t~#Z( 5mXLXG Ns~eݣn'2"'RxᠸjWĥOЧNS1WC SWÿ-ҥ':|7lqvXʙ*|TsرEx^_XbԨ_ee͚51vh?G3t8Zϸq#-1+d/:[Hi* x{̀9vosN̵}Ǫb#tjz/yAkהx]FQϤv5f̝K3ڶmf"cgʎk.hԩs싏e.ڝˇ,?ṣGED\n+}S;ÿ un|wٳs'Ol4g'gϥ7[^^ۗϩyJʶRxO4gQ{nC}sȦ-Z\#feWNng;[o7úI N2tϯ큔ϝ^p;(E=;wr˖-^xZgS;E}`fd'͟????_]lȜ9s"loşoOF>g_sMceGl|5/_{m3XkV> uxV׮gq#g>̻;}Lb@|Ę.Zp=CM{D\TM]w3=sj87`<+?w4/,禳yXL [gϯm,q~󛻭Ϛ9NG1j ^wYדXv2n)6 ;^-##cٲeb3/RSS׭[addU?N־r;˿~+„-Z\(הK;G.'n^k<߽mԉS3g?q࠴=kطo91>|c/-ʔ3UjSU_SOk8L^^s1C~0a}bwlG3Zkխ[7}&-[$^XRT mAv]bb%g/̜9D+6;?y!!{w_yr#4QPPØ.Nqm۶j(xܸ\>bךOI!bM?8Y_.:w +w=xp M۬Y1Nڿ)Sepe]T 8p`_.ꕥsmWO(%2`~VLKnk{y^>)X7yԉgxhsbÇk_VS;E}`fd'O>ٳ3^{t rkߗfoESEQVd' yyy3g$>?ٱcNJ+{Nך]PEl`fd'7M>ĉ 4/_BvZj)y), ℄˗Kр͍{w6;(N0hc233{^x!==ŋ4.]`BN((6 ;>˛6mJLLL@Us\j~2[lo[g#;(<, \. ^섢(N0hCv[N((6 ;@9d'%11!11(<ET吝6 ;@9d'>NP iCvo吝6 ;@9d'>NP i@g~d'ʳ:mAv蒒RRRDgmAv ;ud'Fv-+O}ʘ1c"##e|"֭[O4I fd'ڲe:\VZEDD]q?֭С٪U0@fd'/р/_vi022R'-[[~I}_ƌ#}->N/mڴq\=z[J}'xfd'ɋ/rxfd'dgg\2>>>7g%~O[zsԛM %%%k׮={+;Vڼy>|xɒ%>LMMUQwfd'Ϝ93--M]j̙s%f6mAv|ފ+^{5umYYY3f?[P m˖-۾}h x3f\xQqG}aÆdu&YYY)11Q][||zj6 ;>)!!A]:W_}ZzqիsZ=P I/;IOOu]VpVqɓD.N:[njg^wfRUUJd'% Ig'Ν;CCC3gz衦M?gϞ홙C Zh\7b^13f!,,N#\.($Gx7o޺u>(>>^lGDDmvd9ŋ###fD1rPPP˖-dɓ'qD{L/ƹ^鸺IDATsq?8f͚oݺUv6G/ q:k(NS=6 ;>줠`7|l9rdnnӧ Oo}yyy}u]&;;[ F hF2!~ݚ2eg̘1uT}M7Ξ,yϝ;']222ԩ##18QFsbbbfΜ)t؞|Iq^g>}dgy"A̜N^/ۣ8Mp$OkLXXX 6mzѢ%ԯ_?}m֦MSN>L]6!sݺu9"%l9SN픔-Ɨ2,v̔vʺꪫ^y\c_yk֬СCQ7Csΐ`i3q:k(Su=l x mAv|'ى\?}СCL"<()44qƢu1MMMMdYr6o=y#eڵzh߿mۊ,#νQFEڞv(miDr:TSN $ϳ/2''G4v),Xn\?t]믿[lu5> 9lo>k`Xodd%;"hܹEO`]V܉E=PrۚGsĖr"gzvN< 7NKh* zѣǏ%daذaB~_ܹsF2V̇>bĈ۷F 7+G}ӌe̻[7iGWI"Xœl"hvDlϺ=Tmoi8!;/>NOf'!;/>NOJHHPWFv^B}Dvڠ>NOJNN޳g8 xcǎ\RA}te>zbŊ,>mAv|s=.Q^iΜ9 %e˖KԀIMM]vzj6 ;>,!!B5efΜYRR޾Z>N+..6mٳgյjkk =3f;m߾W_UZ@fd'M6ĉ5P6mڴ|r~6mAvAqq… -[.`5.77߸qz6 ;#33s޼y{Q{ $$$7(;ho._iӦ2 Qq.Kme˖oV)D}˥6G !;7mAvrNM}fd'(ߴ !;7mAvrNM}1w}7::ZNp%--e˖۷OIIq\7n(#ծ8mAvtruA P; ~K/EDD~t-,_\fd'Aaaadd NZlŷ6 ;_~|K<_iKZZZ6m\.WLL W?Ϸ6 ;O^z%ŷ6 ;p֬Yqsq\EEE Y)Szl޼YmBԩSOViKNOi3NOviP.\c-Z\|Ylױݻwҥwܑ#GEEuM}qNO'fիWv>c'tugΜ) z^{Kܹsx ~mr;));Rԯ_0#8qOobݻlڵuO?wT6 ;bĉK."##?.ZիwÏ :thBBBJJ: m|ݰaCW_5oJYY~^l=zM6]>N@Ou~Cʖ ]A(mvrovmذAl7Ѹqd# .IIImڴR^?~|Νw.~&$$ӧO۷k׮oܺu&8)$44K.gΜSRRuVх{ɓ'Ο?on2Tc yK`O+6 ;eĉjg'Ew)Ø[nѣvu]׵kק~Z̟?gϞ[LLLZZy!b wݼy5twѱc=zβ$77ܹs/^1aС)$e^k.99v6m6o,;; ;xEΙǻD}۵kכooQ68)*ݹs?bcԩcƌ}􉋋ۧN2~ IIIzke)|Ϟ=Cpu]~c vhѼpoP n:ꫯcmP{ڪUofoXfÇ,//S-r8v΁(OfhP \:}\W_կ_Plٳub#++몫*((0z^zu9::EA={\266vJ' 9993reRU ^pAl9r$88Xv͚5+r>Vղ=_CkK ;vL}3Xo'@iP ܯ?wbnN򂂂v)>o޼&MlذSbJ 48wl7%Y7obl;K%n29K8}Ӌ~{ mAvjvH;w$6O~ƛn74hp pҤINKó>{yѲqƌN)#+|׻wvJ}󱪐1ꫯ6*CkKIprŃ@K}ZoļxmEÐ!C:utϞ=[N@M3?Tg(">hpRUA}b<4vP>ɕ*}$mAvjBaaaN%`cwߍEEE>B̝;Bɕ~x})ƍ=i$+;P !iii-[l߾}JJڸqcDѮv`{6 ;5[n.CgDD0` BԜ^z)""[nej'w iPs ###o˖-kw iPbcco~kswhPڴirbbbkswhP^M@E*>N@M{饗\.t TܹsWNsq\Drʬ, jޮn5ީn7xmAv~:k֬%K>|m޼Ymjǎ[bٳ׮][RR0F խ;Ս&Z>Nt.]={N6stu7mAv@@ʚ1c.je {P ŋ3f(((P2ۗ-[^@}M5L}̙h*?99yÆ ꅀ {P *5550".. {Pc j֬Y.\P/@NNNBBz9Gu7mAv@ :wҥKՕˀpb/xo@jժÇ˖c[lQ/ B۾&>NDeILLT/ ?{wUu}M "!$5F VmEބ[]"Z^A $RI kC PhA oy! 6g]=32s|?dٳ>LΙg29!c874mAvXBnul=z4""Bm${$874mAv=/ڵ ߿-LDVZ zj*EAHۍxt5nou0;  vrUUܹs맶0qeeZW,?gCvhXIDMs@3fd'ؑk߾,N>C/bYYt8K*Bff1+{[fMLL̘1c÷zcǎQQQ;w *fdV7gCǶ?q.W^y ƍ'ø8qzǪ*DN:EGGڵ+%%E.rAسg&&&ʵI6HKK}u &n#""Lb,bDnk֮]ۥK'Ov#bEC 9v,\{rrO?-~ӟ+M@}`G~/WVV#G'N|gKJJ.]SO͞=سlK/t岲2^r9tPޠt,ٿdžՍPm}s\\`w /s΍13;z˃vΜ9?~TTܹseyذa?Gت^ٳ=MmѢ cN\ZF~\|}]60a\d[n=|EEX011hy{/ +,,t׾tl &f>N#DDDiӦC'Otz֭O:%޽;66V6>esvrY^3j'f (_{7څKOOw׾='M@}`G~/_t)11qΜ9|qH۷͍=˞eW3_z>%auc~6Tyl;֢E >~^Rsٟ#͝gee=Z,>bĈݻw{.%)kAHOOѣGxmƞu† qQx,Y>s@3fd'ؑǎk׮ݹs犋E z#G׿MŽ;s@3fd'Q.\( ?i \w}hAN1WTT/_~\9J?#q"TWW^k׮r>~ԨQFM874mAv3l<|GEE9sfN^z\R6x۷okFFFĤxN*f'nS6mR}=wa J{l;m߾ٳO?txxPϜ93vذ޽{kξy:e؂qɵtɡCm 'ȥ MԩS͋]6W.]DӧO_^}U].]6ڥ;v6j he;`~6T5ѱyf?Bg҈>0&f>N&_TEAHhcСCvN0"4iv|ҤIj6 ;RRR Ka~6T5ⱽsذڴi.KmB(;)-- ӧω'|  vqӧOsqС\EAHmu6 ;222iKHKK~ $ض:MC}`SK,Q-7P_Vǹ hl*++ [@}9Bl{l[&f>N ̙3܉:ض:MI}`_6lP0CWYYټynܸ9v;s@3fd'ZFFƞ={ԉPTVV`˥Q9s@fd'nݪNg/r޼yLڍm㏗/_^RRkZ_EEźuVZſ>s@i𵪪ԕ+W:NuӚ>z7xٳNBض:M>N7;vjJCjN@sp\,_N hNxhY!:@izm'G}ԧO7MFv >N@34iRLLOoNNNttYԦ| ;fd'uܹ{NpDjS>@i|p8w.~FEEsԨQj#@i|ӻtmׯWN}SUU#8 46 ;jҤI2;yǹK}^{5wSRbYуQ@v >N@;t}s /&eN h|˖-[vO>ƉـbYуN}رcjZr}?7ڋeECh8mAv].Pn>^,+z00@i^zQzh/=N h|NըN={|nj|N}ƧdjZr_F{wBv >N@[lڵk?7l0h/=N h|oIJJ߿'w/^ln,=kHd'p47o>;w4jjjj~_};0`LMzO>|YXJ,+z0jN hOHHz2??Æ ѣE^,%5W0@iTg̘aNIDK^,>6h8mAvJMMK/4cƌk׮ymDK!h8mAvPMMMrrrBB'ijhIpԍN}&f͚ǏJSE|{ ;fd'9ܼyСC˖-{gFѣGSEϪ N}Av >N ;fd'e@i2N @pSazfd'Ц>Np@hfd'vrDyfd'vt:DԋgmAv`wUUU{6#;裏#)֧>NpkҤI1112>INNNttYԦX6 ;Ν;wt:Z^m i|{gTTTϞ=G6 ޥKmG^~fd'ZUUULL NK< $iˤIdvsx@fd'X1p@Uߐw.>Nt]!L}ܺ||,Yp8O ٸqcaazO}[;xE֮]{ 7jm۶MӧOgdd#++F=t>NM]vm9999p>|X=֤>N&%%49CF-HX6 ;sդJuvӞ={֭[Ofd'v,Y7Npwrssl٢RKfd'^<=N˗/rz`C}{YhQuu:hժUmAvl:ʕ+oܸ^fd'F6mt u"رC=>N]IKKS/Eh`#+VPߪU+>==z4""B_vڕݚի']۠^fd'FNv9f̘v 4(##P\\,Z9rğzu׳.nfmf.K}f'oUUUӟL}{8zז^]ƞ  mv2`R*[oձcǨ;wӧw!22_,++&LSL1znذk׮F>d&F_ڵKHH0Ux7EC 9v올LKKmDeΝkqyc<7s8r_Ljwc-clyNSvJIIe(˥YK}7+,,#s)^r9tPY?qg}ҥKO=ٳeӵ*++?Sكz뭞={8qv51] s1ڋ[?B(j Zh!sN x]kKYڭvw|sw*̙#V1saRy";fd'FN?ޢE ŋEy߾}o*nԩSݻcccݵ7&iٲg}f_i믿S悢Ƙy {v]!s=ovIIvqcc.n晝ښibyNSH۷oouN /ze{u-qm۷Ec<|֬Y<%y!_cu/=zj۶=zgĈwcqf^E~m^;^Wa.: X6 ;6Rwv⮽IzzRu򽸸XTo0lɓJ|1?en`.( FƘy݋ϋ۷WWW'''Zs͋9rs_d+ZUZK}f';tq򪪪]vM2??mڴBQ/rsse~gyrϞ=r)ßN:Ȗ8Dlgc_c9˗/O8QV:u꣏>5իWڵ͌^7+((+#WkZ'.mAvlD;v NS]!;fd'F6nxiuC檇" u"ׯ" %K@}TTTmAv%;;t8u:  Μ9] 6NYYټynܸRKfd'222٣N-Xrj oݺU /͛GpA}㏗/_^RRΔUTT[.55!C}[JMM]rz:q;|իx㍳gϪ ʴ jǎiiiHMu8ja֭ׯ_WipUmAv;B6 ;NM}d'Ц>Np@hfd' i܁ڴ ݹ\.C%;Q eff:N9;Y!!@}]UUU޽N#)֧>NpkҤI2>IVV5kfd'׹snݺ9NÑUKԫM8mAvpt]իרQFX6 ;ӻtm̘1ׯW`}_ITTT\\w$mAv4iNF]J}_vp8 ]J}%´ p8K< ip݋/^d,Yp8OZp!74mAvn{ܹm6* 5g@fd'I">4mAvЬ'w( OVzWdr=ׯ_'?~|qqlׯ_?Q/51 N(22rѢEC ֭ۧ~* 80>>~رw.mAvSee巿k׮rrrٳeO>}vY?~(TUUnʕ+('H]sssEy͏> N2ż @]fΜ;9s̭UVnWK߼ysԨQNSMpx|'EEEm۶ .tVmֺu|X"fd'u֯_DYSUUզM7nk7oN4ƌuVfܸq/y(WǏk׮ѣ, NN:GlAAZb^uY<<ɭٵeQS>N4233ccciӦ۷gjjtc=/*s[ݰ!˚i>NW<L}h̜93%%E[og8p`lllnn_l٠A+d3>>O>ɾ5eYsǷlGϝ;H.({#8qf byfQ?h YEY=z(nڨ_sYdk ٲ.11Q ^WM6{7x`X. ^ X>}Zpԩmg}ֱcGY ҷo>},+ݵ[O<ԩS.kfn,뫙> ۴isecUx ~ˬx޼y=F8mAv`En?YBQQQ6mKQ5k}]vufFe.\pVVVe1c$%%8p {zˌ4F8mAv`Qn]|+Kݹs!CW_|WwlkYsYɓwn+^V<Iz!уtou{z@pX#6 ;k`f..>!8B#6 ;k`f47Ic#8B#6 ;k`f:7I!8B#6 ;k`fn@pF8mAv' CpF8mAv2'w=p2?TfgXN@}@t:ĈX>N@}@ݻ1`,dggGN xuܹ[nNpdeeEjS`fd'p8w.~FEEkԨQj#Kafd'ӻtm̘1ׯWX #6 ;VUU#⸇*:F8,mAvnҤIrfaȑCF8 mAv.//k׮cРACF8 mAv =T@(a@fd'`{P>Nܽ/nܸqEhJK,q88SRR6mTVV7+,7a2 zZhQFFӧh۶mS4N8fq;N X}`fC>NÇϟ^D!'''g׮]SOb`]@=dRUXX$~',0T(mAv_o٣^/2))ի)@00  H}˖-[rss+E ,Y`Pr +W,_\F$''@c`*X6 ;jժ"E͎Ypb`-ƍ7V\^;\|Y=ChF ̂C fd'4vq'NlڴI=ChF ̂C fd'4BRRR3f,1T mAv@#55U(lFZRkZ{׎=ޭ-XB=ChF)Ā{uGFFk׮\cɦaXg`ƪUԋ;5 S!{3.yEۭA0h܍l޼jU(G]V`f*Ţ#GrS𵧾u_3 V>Nh7pq_j4:j5F6no^5*XE`f*G5n.F2u_3 V>Nh%o߾Cq1\PP0nܸvŽ[ןʥ|(Zv1**jΝٛo6dȐcǎʴ4FTvY\ֱhЩS']RRRDY4es]C7o߾ &DFFFDDL2ܭ*<{px ek֬3fP4(-->}XD/Zy/233/זkquVk={ѮN6Xvm.]򓟔L_`fٳg"<`s:sY~X:('$$}|9:>Q7{cx➯/ B}иK}{=\`w /s΍1B{):Bڕ+WOq.nz' xw-yQQzcql0g` yܹ^CK/t岲2h 6g-))tSO=5{l_0Q_\z`_MRd &9{ ;0svO{Lϑ=F^Cfd'4X\{aԟ:uJh/ŋEy߾}J{v]{Ƴ (+uwYoٲg}fn]|gzaiii֭Wxݱn:ui{`_MS$Kݫ W5++KcBXE>sP|s$u|⹧f =֍Uhwq~1q]m<x7 ̼6:r0kX7 V>Nhy^fRUUSO {ϗ'O,ڈ+ؑ#Gj/G^~t^|yĉR\GF\^k׮7ՠuJc?3<#+++Sw^/={JEMVXX\Y ^r/^^7oӼ k^cG}t޼yV`fEjGYlxs$#^6:r:*X6 ;%O?o}?iEEl|̙cdž;--]vwvuꫯN%ҥKeɓ'*('ԱW%۷ؿ,FFFN:U.ۏ?G={= .k̙:uzrJYu^lڴ딇\^;_vߋvuڵkt":>}zyyl'&D؁67n\7T>b('#_恁уƞ# _UhKy${233Z/s P* T:taQ _Bm810 r B}hK;wƆӦMs\j 5<;IIIQ P* \͝>}S`PB ׯdddg͈Y0c`!޲e***ԫCf,Y4;fAhz֭S;9x`vvzn' ֢>N%55̙35"` ,QO Yb`-_nܸ1o޼22 6g,0TmAv_.k\nݛP zWIII_~z[_^= ̂Cfd'ƍBvBHII?c h00 >N܍gϾWW#+zW\ZUUf͉@hfd'׷nݚp8*4Z;vꫯfсF8 B6 ;kp8j1@@hf@afd'` ,>NYB}50B#6 ;k`fF8mAv=p2?Tfg,6 ; t:Q/5X#mAvA*..1y>}gi `p  ɓ'GGG9YfM,N}@ܹsn8p8>0**JԫM,N}@P0`֭O,K}@P[fMtt㶄׫,K}@P ]t  ɓ'˙'x{>N up 4{>NT*%p(,`͚5{P>N>۽xVd!~OX… \n@xƍWX~7fᬨiӦ2u`K@ss-..v[ܶm*K9sjjj-Zqi4ĉk֬t:h*Ih > 8>|xyyywYxk>N,7I!> dR?C]aaaRRmAv (ZW^e^~]'Nؿ~xŲMJJJ\\\~DX&8 Vu'EEE-2dHn>SYecǎ---s!p~ٳGʤW/ l@} ɳgϖO>e933sPUUպukcsMpONnn(o޼G٢p)Swg˖-3W%K l@}3g|wĜ9sVmҪU%o޼9jԨT[} NW|RTTԶm[YpBNnFk[?)'O5/^| m?999INXbڴi}߿**/]cNjܹ.8q=k'^+˹s*}KCOJ|+;^4;v8p@T'NlڴI}Ҵ 2s̔n]p3طo cx3gʓ'O>=P||… EͲe $ 80//O0~-[>#6BRR[n/E966v۶mrsG?ӧObbX~keSׯ/))QXyK>g Mko&~ A`]@P())9rw9أo߾]p„ rС+V/?ѣG}d'Js ?7m$~XX؇~( 6lY~(f;w|嗻v3ψ-|FI5za&53Sjjad^vڕϹZRk@ !M}Ɓ9}zpB֭DСCѢPXXx=TVV ҷo>}L\ܱcGwmZ -ֿzFlpNNNn_afͳk^Ѽ75@ZjI||q%(>/. &dȱđ#G'nk5؍6 ; 3".wϟoꛝ\}Ç;t`W`bmڴ'N>?ky]fԻf(..7o(]4VNd8!Lsׯ¤^I*^=zF؍6 ; 3#>1733S^xY9l0***jӦ͗_~)Κ5… {?`ƌ#6@~-[Oӵu6Фf 8 ko׾}{Y-18/bYY"K*b N@m͚5111b [;vڹsl/9ΰ0aBBy7pHT2رcF}ZZD<۹sgc,u;@v`7h4<[g+^47n\޽yŋ_"\\W#;&Oܽ{wg} ϟ4i;tRYorw205$HvRYYꫯ9RO8g-))tSO=5{lscϲʗ^zeeekvsСAZ֭[ТB]DhPPPТE]vrQQ锋x:؍6 ; 3'6'w0q%ѦM:`;؊ىpرvڝ;wN||Jζ#G׿KrQޱcGóϋ۫ݵWKNNq3ngNF}&> n'Aw0ze'BBB… E矟6mZaa(ڛF?***}˗/?s^ze'b-s):8qҡXG}$^zu׮]R^d'v>NFcPq+;J}_|RTTT\3gvիʕ+e_~}_vmdddLLLJJJóW_ ڵҥKO<9tp`|\vBv`7h4<7I!8 Zh!;mAv=e~<*" '$v~N heff:NyQԋg 7Ip 8 6(RRR!M}w*..Θ|4f7nطo_7MPz8999%~n`"ޣz{nx5w0mV:}{ァFihXș+VYfM g?ҥO;(Q6ׯ]eddB6 ;d׮]W^NSVXѹs.]M Ȉw*{n&~ `ٲej`KK,Q_:mAv4T\\\TT騕O ( 6L'K'FmE֭Sc9x`vv i,Xp8dv2a„׫ (GyD} ;GZZڙ3g0f`F}i PW\1aÆ=CcU=zى(qƍ25O 6端 l@} 11QN;N>gݻw`'wq\ ,g|wތ =hڵsEkW \/RBZnn.δ 8K<+6lOƍׯPCsҥ+V|;fd'@wXx p7xcW^U3vW\ͽ>N-ZR/^p8,Y>ċ,^jreff٨?ew%ˍ7.X׷nݚV+ ٱcW_}0lI} TWWϙ3XSm6*Y',\p͚5'NPi4ӧ322/^USSZ4=mAvbĢO`!W^]hQNNzA,//o Evfd'"'A|Kp¼y # @vfd'hLEEE-2dHn>SYecǎ---s!8 UV+r|ׯryyĉ?^t"ۤOԋe~&yUVV.`{]nzp푝  SQQ8`rssEy͏> N2żDppu']&ɳgϖO>e933sPUUպu+Wz4ĢE B? Fvfd'hLEEEm۶ .tV{֭ɓ'ccc͋"8 u'3g|wĜ9sVZj5~D͛7Gt:Վۿ?8AHII!T36 ;Ac(?t IPoׯ_NNNbbjӦ͍7l7o=z7رcg̘> … 15G9 B}1yNnϮ-[ŋNj?89uTڻٻ(㋈@$"ȑp "rx˱o|E x3_ + DWeaW !\&!W8‘ a8E6TwO$d'OOMuUuOw dDojJ9RL*>޽{W\{u:b/^/liӦFi͝7oz,))4xDv a}ϊw?8q(pE)'S=R' 4ߺukU&S:u$^kQپ}k s|]kgk֬QuVd' *Ɇ 7n|mZqFXߵk1bl/Xq݊?gϖAرc۶m۠AUV9M/ 'On׮{eddJr=zbbp:uƍ[Ŷ>m:,zzEqqqzzS'6m5Ô)Sԫs.]JNNVuVd' *1ch@||V裏&M'v7ۍ75w}]vkco±cFjjjnd]ѣu=u~W{9}o?ۋ/ Yd~۷o/uXLG˖- ,իܶ''OlѢ]wu%ʘe'۶m\Z["]رuɋo׶2qJoF]x4d'ىg =z/,,[lRY~}Xl>uw}޽111jժݻk׮-+´>o[1;1°af͚UPPP^J.?%[*뵮L5'*WŮcIL@}zM\l ,pXJcoǏRȑ#qM'gvtᮻhLwW:,ڽ{wFٳ6m=8ohl6m̞=[u89ү_ի[瞓r5|ܹ[#Anna.C 9}-''G▔ٌJE|9&̚5~!!!~{ffҕF?e7߬S䫯6m[ĶВE31nTTԩS!ġYMpAJJJzd=GmEr=zQj׮-z^v7=V/ݫW/QߤIq,2;Q^ľ}j<<>ňڎRKb h?*mAv oֶm۾KZ`/{=~E4W__ym\Q#חoQluXLȑ#?xfZh!N4I@p \g'999f?|q80//СC^?~x[1bę3gN><  4`q :uw-v񂂂Zve 6z98zV\)n|1qDC(kZv"dΝKHH3fܹllzhbb*UOzz2bb }Qq۷R7ˢgcǎZu(n#ștIK;/"$$D\NⷡԮ]o5F뮻䎦ىT] ; g@>NXp#> xÆ ӟVN~ e'YYY*URk?BCٳG>\dIFW׸e0771[Aޮݻwzj^ioz6lڽ>;9v옣/m1ܖ:na޼yæ:dؗ.]*]O?ylܸ1,,a}V:+9s8l֬&<`ۑ#G^ſy~\Avm[ٳ111kpۮ}ɲe6l(53ZNL EDDl޼944LQ;wC߲fco h?*mAv IE AmvzZj{gϞ-,,ꫯ䧯['$$8 +tСC^߿ժU߿' ֯_(W4>M0M%zKOO?s̠A+~^mzhO>D z3g:vbm+ND{qСرceF1=V/c=&wxq~ZhqwˇJ=zkaaa-'dSu4 6 ;cc^pk A6;qSժUk߾EDevvv߾}j֬O; '|N:ƍO>]W.]Dv .ى?),,lڴuC Q#ųiGbbbʘ8Ɏ@ N~ $SמcǎUV: ~6 ;3>lz1ClQ67H9z… յg͜9AI&iii򡖝|Gqqq ʇmAvg222ׯn:c*EW$8 &kπ*((2ez@k֬ɓ'ggg1*|J<ʟmQI^^^jjbSU'N?f(y{999]Yċ*p\fMr$xe*,W\ye\+%%w@>*;ٴik6w]v /*xɾ}.\8a„K׷Wqn*ϛ"22R 8-[L<YۢFԋg2`}x?;p믿|ru CǏ߶mz{7 Q@d'r@sfeenذA|ۢF>%ڨf}x9;9zرcsrr6SLK~,n T,@***JLLѣڵktijh\Plof'cر6lo}I9Y{S‘NQQш#~E9FOPvlof':Dz+V}p 0x@#;ÇK}kIZZۀ7mڴsΩWYHrSʈo=.\\ll֬YF뗞o ڋ| ʈm^;'O&%%WYHrSʂ۷3N~gQs뭷6VӦM_|E{S^A6Nv;o);iӦٳZȑ#^zZ{9'Νӽ{wh;l0KDDĐ!CN>-{yGEexx\ng-lܸQW_*@of:uׯW_M6MlGGGmɢYHHHTTԩS!гf}~{ff;))) Y9s(:]pڵZqCi>L1==]<=z{6$dggKԋ9%طo_m~g/=>ňڎR[t Y&EL`ڛ`ug5s3rS: ,(w2tP5-}/j<Ç'yyyj۶v#Μ9sih0hРmsrrnyVaÆZj9N6ҥKs}e7n ڮi33v0lM;+3_. {3gf͚imëT"NTy)Su4{X7=5oByQWauhx3'o:fuV: ț>PlҧO}+Ү]&W5o0aW6(رc#G(e͛7WVaX4Tfee?z5jpzB㊧߶Q٭[7Qsw[NM3gy XժUÉ 9wi31Aϴgwfglw޹;'Nosԩ^z=ZxZfo9氻57^WE۶:4G݌3Zublo%?)#NetwڵZMQQ믿޾}{5-5c'L Zľ<GG8߀S~ZUnePy(oqM0//'SqӧO999?"""b򩧞5iiiBWWP{#h#ZLfd'Ok+ /㏫e… Y&fG~z3MAv(iii;wnVVVnn_ŶO'(هw)Ski(5?]-g]vϕK.f_7| |8-[L<W-jDxV(هww}w߾}rvرj*p7 O)o ;ى0a)S7'Y`JSGa}x';,YyfuQ , ,8tz{+7| هײuQ  9sz{[7| هײa֭|ՙ3g\^%͂ݛÛى`׫ l;s+^V7* ه^r섄X#f*ىbŊ)S*;~5k$KEFFU(5y\]Y[*@9#;6(eu.n#2 xfd'~u.n#2 xfd'~u.n#2 xfd'~u.n#2 xfd'~u.n#2 xfd'~u.?vXá> x[ď;?ݻwp6 ;cs8qp'> ىcGp6 ;csU8cpB|;Apa}1ֹ*Up"T8n#2 xfd'~u :8O*7no4i׮]de˖' x[ďUDoC.qp"dǎ&C !8) Ge@>NyRSSNQ{5ne(  T Na; 5<_|6 ;G` xfd'װsܹ1c8 KmAvx +(#Ν=z޽{_~ea}^#ʂ NN8p8Wa}^#NH'(#|6 ;Gx18!>A; 5<‹^w0NaRSS ',H'bb&b>@0>NaVӛ6m|sr?8܌O>>}NjmAvx +p!==A"KLL4}">}gn喨 a}^#\KOOoҤIttTիקOPJH?;"vm-Z 8k|6 ;G'ؐoC9rHI'o4 wy' w0}:vصk;4;MHH֭[mV.ƦSmAvD'[4ioٲE{p8>Cy'gڹs瘘@c}@yXtiLLLtt|Iaaڢ18шQPĸ 4 >~u# ;2ĔEp'߆" T7rhL|'`b}qxlE Pb (E|BpmAvd}O''@fd'd|o>l#22(=CddZs +ld'Wfd'N>N?^a} ;6 ;@vxmAv>*//OPNg6 ;=g'^<=>|Taaa&MC-;裏iji m ׯ__'2;Yx9r{l]QQQiii/E{limڴ_6mڵkWfd'RRRׯyUϞ=ϟ66|Zaaa dpR~&M)@ifd',ݻ's B>6 ;_q-DFFoޯ?%>9yl BP>6 ;? ?1?%BP(AR_=I|,@JJJddJ< BP$%*>6 ;:z;u)eoĉM-ziKBP(ARdv$>|mAv)**Zd믿p}9g}V]v͝;^KOOWN( $EN'O>N[nMHHPӆ| &\xQ=%BvBP( )I|ܵ/q;vL=#;P(J%;q>6 ;`!87… IPg';[]Z迮 yZjO׻Yn7W0٢|d|֩;:Sn ("_~>`|ʣYT(\ى% OW\F $''gĉyUv)}w ֺu'ئ%7oKJ2|j|RIYw(}_y!ʴ8; 7R4;q>6 ;Ν2e&˗Mvը>u]藃[جeU\!-}vr}JYJЧޔα`J)MyƽX2;QΒ'͗%)U2a‹OyjV/(y.^u*7uѣGȧzw== CeCMb rˠVƽƪ xT ѷ= 1jBl]!'0~UnkE6~>㴘~JVDM>|fC ܹ2cooƺ;L^6b:}<3J1՜"Tr6m1&Mnۓ?QtctOI*/h).?[n۸qO zw606~O{x]A=htZ^HʡU}1 {4ӛεd\mzS(fd'ʚ5k6mڤfj׮]~zfoãR_ӱc{t^]ܳۢ9uƙ+U$vvbm}fgˠۦ{)eCBw%fӏDG߼l(|Wֆ֊қ͕+WF,մj2Vyf\msVJ3cgDDu; NFTP/ĩ \n\"8=t}Q,+/$дhgU_L/H^(f,^KCX롍9Q!;*mAv$''Bp6mzfh۪U3ʋvɧ7/TLGDT%<j"zbJ]U`ڹ2eҕrpFRBݺ7NLm5PNt_7όXMj+?T K/4\lMk`;פ=9vaaM69UYV߼y̬VƽDicԩ%j:th_&ɵQbуhٽ{'d1Z?14Dp ƈҩmLQ`ڹ2zj!!U۶m+i[}1՜UM8>Gڳ{zMP9!.x1ZjW_4UD9g.Bjٲ9Mӳ_ڬJ?=}1Kp\ g:y4tQ( PlpDظqcvnnajժ1dȐӧOIEHMMvxZos΍޽|o֮];::zڵ";ѣ5kVEߞu('''NijQQQSNt?aΘ1Oj Ÿ硆 cR?|%] Plp줠`ԨQwu4hЀN^N g}+d'dxxx*UjժgG9~AYn] dcwl^<u5i5:fd'JRRd'#Y>bQjvTJ`zaaÆ kpl]`@SBBD3QRII魢YnȑCrll<ѕط];B9.ND9g.!-[6=g\յ=,&Mnۯ>Ru(b;c˧aZ'Vozt pZ5'NOΆs$*˗Mk;-NOåRĩ'}bb+8ۢmN 'N{ʋeU/gܺ*\LӉ_wb+L/rlM ي2s֫,9)y4A?篅,;tZF6iq5/vo:NT\oQsp*4+aoK?1p+e5Gki}JPN g}+d'iӦm.;xpѵkǑ#J#uҮS[Ǎ=¶^ uron8&6V^p?ūisG߾w׏.61\n1ܸqOk xsÐ!:wn+Պm'tG\[LFCvbzZW\豍b[ޤ-}{o)eܰzx;v:.|/zh a|\c}Dc)U zwbbÆ yg{eN+D=h#vZXVV'pq2M'nL/rlM >hb[Y;?M/$COk׸jZ7ޠ% & /MP]kj[}uU0Wt\w'ٰ6r8V{z[ͤdp jժ[Bڷo￯#Ye''N_}_'/RF~|/e}<'2m~1mb#33ZYÐeTndh!7~,BܶYoײ~鲔\0!tz;;vFDT?|޽̞qC߉*U&j׮颽qIp灃$N2o7.%=4S)dXVV'pd:/](vblѹxaum(ES+W<7YڳV!{.kawњN^)>{y(6YN=?ѧ~\l\t :e)UlneA;=:O__έfRBvT8\|rrr! ?~\=GnN8**E^,ӷO鶚5#BE1x]jۛDߜegݻwSjոpq׍7ް{Ͽ E,c<:9겈(^_Z7a< nꔚjbtZ\!VV'\{h!INxJ߉8Is"7x*f+w$jti9/$COЊi.zŚwk׮O}XxlٺB<{׭{8qVոߝ16˪;=9]̤p ؘU.m۾Ҹ7ᔷ[-Zu"&ݯ/[>Ov"A<e˦}|xZbubby[~{߆V_87TjNL&f:O+ VV֣CZMxJ߉cvgk6f('NnᴾEBb|WEջy'o _i}ƞEi۶%wرO)E?Wj\NɘneՃzts%~}ݹJVN g}Cj|6o޼l2x4;wmW͐ew?=;B.c=XvzmGΫ[VuIv?(/ּ+jح['X&|7g%Oq\q_/g$%ԭ{B:]]z+eg񆆆dlT4=@ ୿LjժY*?ع^qfߝ6pLG`zժΫ[VO>9vaa͛7d괱u5:~/b{+Qɩ܌~^ZZ5D+VnY"ܽWH[l:*U!(巿nݛĎ8JJ'Vu"c6MΜ~c{Xpni1=3GmفQ_"PÆ1i|ʪG@vT8ܒ7~O6lذpBxĴk?|ӪU#F ~ wʒs##xNCN g}ƍw!5[hV?z.JĴlJ_ްaLhhH͚Ç?|.c(Q/sH[:+W7>G@vT8NG6mTOdŊqqq46|נAbbbd|"+Vԯ_ȑjS>NweddDEE5l0===22rŊD{liZlԨ-6nfd'fϞyU׮]ϟ66|ZaaaLL N4i§a}4hNt§d}hРAddd۶mxlxlgώSҳ>NG9-[L<;w_ŶYun>N=PlܹYYY6l_ŶO6nfd'[{vZ9h#Zsfd'CF1|/6hO|6 ;8|pR{O`}HKKѣDž _~5o޼QF-[4hжm D{}6 ;t:Az뭍/ߛ"Vl [lӧfРAJjiٲeBBW`6 ;0y䔔_~ٸqc53iӦw}ECVl GMKռy^xAk/=hX>N't%//O{%:tڋ}ECVl qqq?쒚5kfd'hBJu뭷vIkN7fd';y'ԴZݺu{| &|ɓSRR۶mk޼ouӆ b R63d HaB€쁗^,y(Y-G-RzӨ߀s`f8N&9x#pJ}h'Pl6kOVh4:&j^n<=~+>N0N.//'zf܊8%>("˲aX`pqq\.?b?n8%>l6?؏[ tHUU؉xkC;薪6Me>y/Nc'6+tQQ^vǧkɯ#ql @Gu]vN ^}LbHdNIdNIdNIdNIdNI<Ͽ<+|;?~E$ @h' 4vN @'i=@&QIENDB`onedrive-2.5.10/docs/puml/is_item_in_sync.puml000066400000000000000000000037071513710110600213730ustar00rootroot00000000000000@startuml start partition "Is item in sync" { :Check if path exists; if (path does not exist) then (no) :Return false; stop else (yes) endif :Identify item type; switch (item type) case (file) :Check if path is a file; if (path is not a file) then (no) :Log "item is a directory but should be a file"; :Return false; stop else (yes) endif :Attempt to read local file; if (file is unreadable) then (no) :Log "file cannot be read"; :Return false; stop else (yes) endif :Get local and input item modified time; note right: The 'input item' could be a database reference object, or the online JSON object\nas provided by the Microsoft OneDrive API :Reduce time resolution to seconds; if (localModifiedTime == itemModifiedTime) then (yes) :Return true; stop else (no) :Log time discrepancy; endif :Check if file hash is the same; if (hash is the same) then (yes) :Log "hash match, correcting timestamp"; if (local time > item time) then (yes) if (download only mode) then (no) :Correct timestamp online if not dryRun; else (yes) :Correct local timestamp if not dryRun; endif else (no) :Correct local timestamp if not dryRun; endif :Return false; note right: Specifically return false here as we performed a time correction\nApplication logic will then perform additional handling based on this very specific response. stop else (no) :Log "different hash"; :Return false; stop endif case (dir or remote) :Check if path is a directory; if (path is a directory) then (yes) :Return true; stop else (no) :Log "item is a file but should be a directory"; :Return false; stop endif case (unknown) :Return true but do not sync; stop endswitch } @enduml onedrive-2.5.10/docs/puml/local_first_sync_process.png000066400000000000000000000711431513710110600231210ustar00rootroot00000000000000PNG  IHDR:p :*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxRMo0 W\$ʥ^dq[,IEdʐxɰb<==>k+ذEXRla|`Xue U[ ѱkT]Tb #c'P Ex{yC MePh|h{S a[mc@6Z1B|0;9p|Yzxz鼋U݁: ]՗udb8GЧu-F#īUbD4)l26a|D^[(hc1/؛ȉ?KW3%4H7Fb|+ _G} c(Sⴓ,;JyFKH%]@Z  -wQpJIDATx^y|MS_"-įN\jTU5|ͪ11TcLEKPP_׽}zVZ$9gk~z>{~r~bA ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,ɕ ,r_:tQqG0bĈ;aoi.>V\jժ֭[br߿[n7n)i\aÆy9WӦM{⎬\_u??%J;r /H9#`45a8UV.\Spe˖r Os]$** x饗jr+1͛uɓ?8=i^4i/t}𜎍7b͛!xի֨QCܡ7@'x?4hP֭q.\h77z8Ś5k}jr+QGMMMe%$K*ݻw˳L߮]~aÆ1 ޝ;wvܹ^zw?EuСQFknڴQn߾;g ҩSs cbb^x7|ǎt^n^{ upÇWRf)Ɂ-:c3ӧq]4'6lxqvD7V04YIe-%|Dw`_N?7A~ԸGY>VZ/_>֭D]tv (PGs ><ڦLbW…ҧ͚5+TP`` :{pNsiΠ~XRJ15Xb@`lSy'?9䩧.=fD]Ŵ_{RlY)8XU+ \xUrV~iTcь6 ?O"q).z!тAn9$1Ʀ-rJW\a iϟ'ݢ^cZuc~gl{؃/W 'ME{&rMSRariS {f7-㗮)l!7Bђf!H[IU\.;vB̙3wۋ) &(8p {fv/^;$jĥKbds|uޮ];6k_,X98Ce-[D 4il\V04)ja6lHK 0z:<`^ܧ&S^hɂ\$ctt47);v̙3>צ܊KLLsԓමUYz8bw8CJnb/ew}WܑI̽CGAqUX?v+VZ ?cRqҰaڵk4ǂF111⎬Br dɒ \?"S\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\mŹs,X0jԨ?xСs9|pP oj۶m[YFӦMccc <|pرF ti~&\ &}_{h$Wk_4{ :\-ŋkԨ!*qqq!"\-̰aD-g Z֫WOԢk;wN4GXU9v온BQ?~!Z۷*tӧ+@r*֭U2cǎVjU~Q.3{laHVˢ ]oVja7o. j֬);!Z(Q.0h aH_ /  .] jm~@QjV^- |AAA. TR69a]Hv 11^g6j>|f͚Ν;WVM/-Z̙37auHvCӴ'O=z~f\ *ևjOHjOHjOHjOHjOHjOHjRRR { Br ˗/rE9/5{@r 5jG.}U^{JX}ׯ_@@S,+Z\_JX}HHH([lXZXb2eP.V% V<' B,V", VDDDԭ[?(믿+j+RSS+WZBzd'Hv_~ժUV1+L6j7jժbL6jCyzdGH6$""rLvҥŋO cƌ\WaY;SLYr7%|W_EFF>}Z[lObbٳe>&QS^e/˗߽{X%2eGFF+H+g p*כ7o+WnȐ!?~yf-[6[BjܸqC}}qWK6Fj*44t„ l+Wmi1ydO:wu}!B uСO>۶m_̚5cǎޮ]XaÆ!>zkz ={̔\^1RSSINڷo?{lVrʮ]lrΝcpo߾}۴itj۶-.911~.gΜYbEL+`_~5jɓ'VݲeKΝ|^zܠp*W)ңG~ -Vw%J`{ ^{o&**ߟ=m.UTZ +V`4^x޲UwiԨ3|=~իWرKW^=8tŋoڴIoG˨-Z9fT>{s7lذo߾8իɰUqx'-[xΜ9N\mS۷7m4o޼EŸqE-d{,%%}D"4AlHf):zhΟ?/v̟1|O==ۋ!nРAN6 ,_&ȉ0S2`ꫯضQVrҥK)$W[\ 6jJ(5kϟj֬YF CΞ={+-*FGG7r^aXb%MCޯ:eЅ{ѣwVZSO>Թ WibݥKD7n2V.W&r-\1czPg`ŅZ:Trp^}:W =J, 'XLj߿BF0(^,n:WjUk׮]6yq_FH©\Ϝ9'n#3w 6b+T##Ds۶m8h׮5 W85b{] {.d??ڵk̞aZt阘L+ r*.oYj+ԩSO?4f_/^^zFE0=CΙ3Gs<| Z**`HJUsDJ* 6. cb *4`pի4֭ -3+W9-,ԩSϬseAU׭[5E]vIFrNʸrʏ?瘐xMҥKPWƊكWONn)Hor\zVzرc8XQV(׬@o5ي}gx„ =#+++ a?0!_tvWz` ,vLYc N;VlCr={yĮ&,cbbζ)>$4_~Epʌ9ÇbOߒjF( .ʕ4a„ӧ >>7iӦ}\ A0FEVj\\./Ar'XDX=!=!=!=!=!=!MHII*%, &,_<>>?օjRSSkԨsNu޽իWٷl>/ )Z-W\Ū5!ڇeBP, *)SbUš\mEƍb!׊+oppX,$W[Q^=t*U_Br+Wrd2 ׯ_աUZ! ڍ ȵJ*f\mHƍ!!ڐȕ2ȥK/^>ٲ3r_quw} |<|p͚5~iddd6"زeXdAgϞ~|3a1K1eS}rԩ~M,:y%~kS}+b iڴi {nFFJJJK]@u`坞E\7UTՇpE#Gܹs+X`0e˺( Ձk)\'O,v@rUFDDk׮͓'ϑ#G4w fر{キk.1B*TC}ٶmHMMEaNڷo?{l00aB۶mQ-11+Wvڵe˖Ŝ;wh#=rݼys޽۴i/_j 6l߾}BW$W"kr^:fk֬ɟ??֬YF4z r]jLrZ|Tֆ 믿`f: R=zt5MieLԩJ@Ϟ=\ x.]hܸqxxϮ$W" r7o^LoߎUup,[(\+F2e}~RkJ,#XQõ@KU6[Xl3Jk׮]6 >5$W"SrMNN^~=B*TꫯX5|dEp+V: . zƮ]a,_X.]:&&Fjm׮]]^dJ5U61B+W/`*m3g~q8EGGm$WE˗ … O4֭[l޽{VZ^= &sEE0ǃ̙R &ՐhHH&k ONg/^|Ȑ!hΝ;ZBͺub\k2lJ+c~xggf:v숩;`lu+V6Ƭ&=jRAr:IIII>}ԩSWl?F9=Fk2.%S69_xDhǎq\SH>Dȕ2u[h,ː\}k΁sƌcƌqㆸ; $WCr!VoB.99иL]pH]ՁPs\}wڼys7o֭[*Y}iɟJz}H]ՇpG>(hѢufEp#0a޹s+W46r*.\sk\{_՘t7|2Xp!;vc6c̙+V|/5ɓZFmk4gذa{ݻXMRJJ Lj ׯOn;C)ץK9\I';vTEa `'oذa߾}cccq#NUI-i*ORԩ`}e鱚%4ļu֡C+V$FxRn;C/WD?~y.Wiɭ[)r 6nݺrΝ~2ugԾ*!Mʁl2TM:VKw v+lԨInՇp*W(?P䊍z 3@.Wi 1@afP1cFn03CLRI-T͡Հ}Prڵk =z0I2mW Nz….WB7Ut9x]"1Q9ʾNjh>]V7ƓvT&pjѱcr&`#>>:ٸ ,YLxb.W}UR Cʣɔ>]B\u4OĜ$FxRs]Cd\vdL:I;wfu~_~m UW%p;ru4$s)wlr@r!rTD.@r!HVC\ՇMf{f!5444$$iӦ͛70`֪B}m&eGԬf,=$W"9$1m4Mr+%JL:566ĉ:ZvdHZ+ GՇ^6iC4E FUA?q? GjVˎߪ$W©\3rV^FiS^:gHj[5C8yF^ʛ7;Ti.\9 zJ븟#5˱JT&p&''_U˖-5EStb ^h~ԬU)H>r͗/_ .|PKaÆ f.\xa#}+HII1b)ڵ+22RB_P,XSqײiӦ| `VuYrɓ'oذA6߃III}~A1d\޽{mt驩bo$$Woܸ!2Eb]!jO W>$W{Br%$W{Br%$W{Br%$W{Br%$W{Br%$W{Br%$W(UKXMX|y||<+ʱ$ &֨Qc˖-#_zuz\G} gϞbUš\CBBBٲeb!Wh|eʔAX&$W[ѤISO= 4+j+"""}YtV:|aYH"55J*\+VLvj7>裠 hXzd3Hv#!!N:kj! ڐ&MC&;Br!+=d^'׋/FEEM055u֬Y:uj߾ٳYʕ+vAv9)puͽ{nӦMDD+׸o>իWܪU+b}լcǎޮ]X!z;w~7{?BVhCm۶iF`_ti}?&''?aJruڵksagϞ=o#+UV-^_n;\eĉU駟F V0"X!BVZ$6iغu+M/i^c-Zx71c/^ٳ(|w5j|ĉ㡐;v@Zp-RJՋZt)N9$4uO>8UFNs޽{ьO>e0@͙3Gx2%J![S4é߯/ҥ ¶bj6d#aN: İr-,*D .}lܛ-zu_}+G cB TN9Q&Qɥ5:G-P3 ?ndrUA um)_Hb\# npGU\ҥKЈ~2,mjZtt4N/Çl+mk&M0j;k[+Vdo}qĉ}A[H_o߾ 6d?U&+VLU锃Yfc:t(۫D 1jƌf͚N_VUu8a4zݻk ʘ6ca%gϞLϟW֨QE0mܸ1B|U/Wi#^=#fѣdmV`k1v޶XbecWvH`  Inxbc˪ 5] P2l^P2ex9~!dp.Y$V#b>*=\s5!v*~U3\or=aڵR(Wi#cy nժUØ>5J+::o޼h4-M׶l,ds%eb?' *TЗoߞ"qyAvpGWj{ꩧTw\^ڵkfXaыUT .]P0K,ZN%W,U6qS+Wܗ_~9A&h=~:6QY& Xkժɓ' AדNϟ϶{;رcl̜9bŊ/"_X ůBj_3Ͷ.$p7[UV*?͐\]Ddy9fH3`^}U֭[ZX1\Kt*U]hѠ l_|@aÆ}zt2,om).TdXoҶe1eSNa]K)Y^,i45Zngr]IRa,q3=Lxb.W}lk2pcjl+ZƓ\]ܪUEb^Hdy97f2`p/Qà ĮrI!8wܙ}|_~e\¾lkUSMVR?'u7Cr];&BJ+Q,Fl[jgu~jϘ-n 0T{ t~A|5k<\学z iݺ5aľ K{ˇs…'Mk+K+wBfp,8Mmfh6ù?|Z3fRb8x <<\lT1Ν{ 1k\\޽{%#111::Z D:m49 "K D:uT- rԩ~M,$m^pA,uYsHY 'Çk׮rUVm޼9z+$j&y6lXB_~y۶mb 5RM65k֬|AAAÆ KIIkFhhhHHHӦMv-H2"}/RgO57Љ[nK 5X[PTr ###7oތef;\8o;g=c'N+Py,YPB3gY{z}XG{ʊ+X`0A̙34zf͍76nX,5@r"Nz!??ׯ 1";tЧO6$޹sg֬Y;v|vŪa8Bo`\xX*C#55tԩ}gf+Wڵk˖-!sαBo߾޽{i&""/KַOrrO<`Qz4\Xvm:n8l\v C>ZK.͖ǚy-3r5~m$,TNz *+^xz>Ea 3gx:* R= bTJ ~qJsC4 ֭ HEv0x`rʅ ~g1*å9/_> װ?Sus=A\cxq'Fb!f} Q7\kݥK9ψ#3%,O0@k:"CD.CnA5蟿 k5"נ ?.%rǥ[p"G Џn9F@?iEd;V9`$-FsNs̄E!-!-!-!-!-!-![DAV0Br ˗/׿+ʱ$ &rrWU²\C+VJ*uYJX}HHH(SL5Rȕ(ٽ{X&$W[3`8Y&ZV:u@b%²\mٳ˕+WZ5ȵaÆ;n8aYH"55OhX,$WѥK.7|SMXHHHX"~VMX yg Wzd?H6dɎS{\\t_>\W3bXX5555m4,߿=[l|?ԩS 6{0n+nذ!<<<%%EC'zɓbXu7o{y6m!5\.\k.w})\>%vA СCbX ÇF; 9"\cbbGWؿڵkرcn!cƌRX[X}B "##/_,u\.]J?IebYkuʔ)b)'O:X[boXSNo\ӝ&M$u\Gs+V 8`aaabn|f+W2AHޏ?]6O}m&RSSQةSϞ=[z 3 &mya׻w6mp'5jfRZOf͚E  kn޼hvʕ]vmٲ%nΝc*^:xVZM:wիWk+ݲeKΝ|^z(9q012+WӦMc^{oD)^ZNFP'ND@N-x 3fLϞ=Ճ٥K|ӦMb2,)uL@zj5-ttҷnbAAA˗/fǏرrU۷M*c[֭[?Mq<˖-dΜ9)$W6ivl6cl;DB89zhΟ? 9C0|2A2Em~ rjJcթ6?$ A\ ̂7obO?8_H~QM6\UWWrK.rÈcdAիWϟj֬YFµXz \WZG 5zݻkj 5aottt#~FklUf4(:t?OGu*^u%9J+c\NVz .]`ҸqcϴI#rŀ7o^ ޾};诪U'mB+2e}v)ݳ,&rZBMc… lJLuj5O ={@ ǏO7'˗pWdIHY9ٸq~wKnUu X^vmڵ]O z 嚜~zܡ1'd_^BdO)+V0l^ k׮!4KG, cbb.iȺ(Wcl:֟~ꩧ8&|]v`{ɒ%~~~&rY\/90䪺3gy~\ Pc"|aUp`t~%Q(((jժX>w\.Z3.7愪:*U`^ 0kL0>`!kȐ!\.US8& =ԚG0;e/5{ΝVZubK~gwxMq֭+VX]e&4z8+$%%%&&#sSNKT j1dL"uLON4n=) /ղjw/^?c` Br"WBfSLx矋rS<hP!z k!kȑ .Ԑ]`1cƘ1cnܸ!HJdZbՇ5Urr2Osq3% pH]ՁPh'H6oޜ͛u떱JaGFFǭ箹q_:R>c]!z w裏Eխ[7c,{qJeHs}P!u\{߹՘7|2 jرǎcی3gVX_ӧ/³j6=ܚ={[QAz5&jժɓS8^c)ץK5\) ;vTEa RR 7667dh\SQԩSgM)XMb޺uСC+fe=Eܧ+"ƍJ>rŋvP\Qg*Wq*ĕX-%́+`jc֩SrfH3Wtrq4EvGeoHZ1K&7!z 駟B'U \Y,#}IbbM ېլ%\=\]2 /1JX+l\kzنԬf,܄1bF `?=*bfmsJ[LdRke&$Wa.Ws\9eV*bf*n1GjmHj̒MH#[䪇?jfH3W4gr-*kzԬdrpGNf2W\5ѬdrQ1HDf!z +YH#7y0,oPNCr5444$$iӦ͛70`BWܹsR5߶1> &܄1ܑk``ȑ#wܹb Ȧ`aaab%NSlY R mCY8c)׈qڵy9r䈦t႑ZP:g۶mjY8B 9;FY8.Cr(W!iӦiL.^-QԩScccO8f#Oj~vq^6iC*Ӆ FW8Vs% GfԬFY814#GkձnTe0j*J\f5 $Wa.W9z:t(o޼;vPe0j*J\f9 $Wa.Ws\ׯ_e˖"FKj/NVXˍ\1ԬFY81ܔk| (Pp`"^•#ݫ9~ҥKϙ3GUi\5YqpGN1f11V,Br9*W–Lq"հ\P,D믿AcAl"Wp=v>a~)bC kb2ߏ5k}ˠG%ɕq+VOܫrK ,.6Axׯ9{Er=x`dd`QX^2+>|pĈbSpӧ! Ek֬ٿNDDD`)+Fm-r [ 7oN8Q\+믿Ҫr>sAr:}<M:thӦMb.^!ɓ'mC^ݻw=+:i$mrSNobp9dɓX;!$Me `/6AlΝ;)_ݻRfs~RܹsR5&h*kL6M2rxc=VlYw^^ϡfwܙ:{\jlll45H\Nk5o/6l>x뭷/_5k-Z ccc,X?200aB۶m铘 av߾}{nӦMDDajRSYfu۵k/礦BNڷo?{lVn޼Yrʮ]b1psq S_zuZB3Xbլ\n;w~7{?BB uͲm6MPzV^긩'N$?pEO?ŋcY!VZ$Bw}T0/g J.}-V4Eo7|3f̘ŋ={VsW^TTҥKQi&V8VՄ*pӁY߻wKwiԨ ÛEjmPݎ;и۷oT ƶn'FO>e0S3g!>(QЌh(=zJ+K/Yzuoy\NhѢׯ_W_r&ߠArh&Q”KqС ^|}=æ08ffRkb@&%%#"8zhΟ?/4w'ܒ8_H~ަM2J\KXdXPzxH+.Y]7(񀜇NY/A߾}6l_߿?F4b j(=M:n FGGy\r}W/ ۷oS!ELT/Tz9rq"(!12]xTTjU,1h`]9T\zuVhPVaݺu\?<3,:v숉(`gݺuX;u+&gѢE6ClXPhңosie%GM\&мtҩS\)׃Ž?P5<㳗DN>m9uurFcǎodTQH\Ru9֭[SL矋lԩS1CUhɝ0Y o8-g`9r… ]=l3f3&**ƍn5HeDnBr/ :K] l}XTrrrN'}w#u)M $?Ȳ\CCCCBB6mڼyЗr2EfORƇ޹q_:RԮ@r,500Н;wXT`OҰY̦dgܠ)>v#W}ڵksM7| .dcǎ=v옦HgчԬ4}$%%Zj5y~Ic۫W/T[j=SLax&K1KEÙ9sfŊ_|E\/ F#Kd葶<ܳg<D|\R5Un \ 9m)?vQR%E ˗ (ƐRt\f#*"l֭C-VT8]/_>oHt.ZN A6ʵI&}J?47E9~ Zn]re =Yʐ΢BeV3]R5UI6BrsBN_7ʵz8I?6Ә Gg̘ѭ[7 b 2hU5`z\vm^GRaO׾}{LP_|;1QX/7O04G7j7xиctTMrURs\\.\ W܉͋I4mcy[ocxb9ѝ/ס !hV>5| C:ȕM5\1keA.$G38ÑCX-%US\5T.لVuq|Q)VhMc;ߨ C)![ն!QxK7usjYĕ+?b?hbuEO1>;y9u-sg<:?9?sYN]C7/! \OqeMYvX6>B-̙3|C:bT^9]ӏ58s zTQK; ]ju .\h0}!*[HaiOOϖ-[̫W#3jTԲmkBt>tMMќZ DtMh ModUI Hؑ&{tMȬ믿noNkB]r#׽*i@kZ`q"571]2O4###z <6,r= \e;iU@ׄF*-æ7H p`#t76oWaR\a~_0i@c[vk NFYQ!Ә-[Ui25 6Rsiz0lÁ͎<zʪO8Wߗ-LƘÖaۘlFd tMh29RzCyќvJ);R\av_m[tkl%)OWlU}D@ׄD΢Eb~'7o֏۸er RFʎ*Ulam9lٵ/]֕-[Ui25!k fgt$oq 6R1xcÛoVblaҀڗ ʖm<"dkBX's.:m29lzAz0RFʎtuu<[hk]fTݗ-LAÖ{klºe#2M&d֕j,YB'TtblO6a?!R;.^6۶m۝fq:ز3,]cU eWi25!:8V9)v6Fj|%dGB#]تT Ie/]]UD@ׄue d)tMhertMhL]hPr5Jn8+HHaH uͰF5MUy*]F G5R=R RkBf];_#GXGV9Pr5Jh8RWꁮ%z]5rXljS84mt^&.TZ-k0Tg-+4P/]Uy|O666cOFZwkaKma66 ֩4]ꨫ^#G |G+ 4mBU0kaKUes2Xcjc@RjNe5ukHhb]m f6!*Uε9͔!5a N5tMH85r= 63Mku W(ZRUw` w*kBXFWg)M@R8f6!*Uε*)Ck~HSi<]jUZ# |(kbI J 5:몄wkaKDW%kc@ljNSn95!6r-RW u:ZkBt@ &@W5.޸q#pQ[R3+R%3{L٠]2jg_lTi(?g11;蚐YWUv֒*Oվ=bd tMȦ!]'&&ٳ}vN~_f099Y*㑑'Ň%NmcfVvoh`s6._|vI&'ĶTB=]zi~ztꫯN:O?^7/NG{Ljsϩ^dIWW*u…&KgY66lfE m7{h`s6O=f[*H tU~L{4/ SO]~ܹs۶mkooӧ7mڤN+̊;{aH{4H9%|~K8FkBt5K3:thppP?f/d&[o0)9fJ66^6 RF ߒGP/]WM4]ĥK@W۹s ~ǯ{iѹ3:66^6 RF ߒ'^kBf]b"_t;=N-J{RY t4>H j_2G(S\W8FkBf] ;]̌ uӞ-[Wdk YQBG A]as6Jr]PO@ׄ1+ %*YQiU &GMjΦzb&4ZWg} ]=~0Y0>>nBW擓m.Е|tz}w6\J:t(}v˿go~trsxñcw6J9r$wp-gϞuk+ȑ;x`?h>/^,Jdm9ҕ+c, 'ʸӴuKWbvvøejj> Rrի}ܼy/TWqcejXt Aɓ;sCu!]M ~k1ZHk1ZHk1ZHkAsyD t-|͕+WS[WN ^kA{ngg1J[h; ZkqZj6VJ}ݻwMA@055lٲիW+vZb$ ]y:vww@@BQ*JƒtLZ~k\PGk{.Y+VLE˗k]w b)}rJ|T0k#]%ST*x@ׂ077wڵ;vˤ+Ii mW Bktҿ|ӿŋOzL[KbÇ?͛7_p}͂^627]#zggg< 06^kђ \?jI+t-Jݳ7~ƍ}^%sss*9>K/?^X~~hw1]ڵk[nՆ}ԗF(Q2::zqx\M-^|E)%۷o駟wyubՃ=S 5J׾aЪ1/`XQnݺk׮uXfiO}itaN|5qt%ε0]Ǿ"]#Fp&:[2p@(e:::c7F tWM_n*WTj*5V wĘܹss&f8jk ]#y 7ct-h#TH:wɫձ+d[oeU+0fȪSȢ4}ͬNR)/f6EjW&aVUS13}bvUtu-Ko=Ka &~e0\Wn.O=)/{6C^<g1 @*˗w}MHI}cl^f\CjqQbsİ/HzjS+Cjs%L:PO۔n 0n[=+1h0h_quJ.ѶH>LQ'7 ֤EF_>~z#U<t VhP9_7Wm$Yz,Rurwr$a7ɟt/#0K !-sw~{rEG*ŒbIh o[U!IDATx{|U՝7~Rc(1 ;^KFE@iK :jm+[Z+A6"cb*\Q`@DB#`0 6-tP3_I$~W^ksg7o !5PHLBHPBHPBHPBHPBHPBHPBHPBHPBv1c|{nG}?S o61|[Zb*PSbΜ9۷os,'Nt!5BX̙ӦƍbT[~}U),mٲe@5 NJSKݏ9tT[vmpB:ؘ1cN,,4hPBS{މ7TbݻwosTb ?S NnĒkFa!)裏XXHa!)믟XX8o<:ا~o}x.]:tHa!bŊ ̙nT .L8IC=bT .|ƍbRM>a!@YlY+yN_ ˑ#G.\8hРo|ьkя~4o޼C5HX""PKqMX@5a!GXׄa!@\P{qMX@5a!GXׄa!@|9tP2aa@u ̙3sssaavv… ",/wرca9sRSSKJJ",;7pC6mya4,2eJV$,;-D"m۶ SL ƦM$,;Gmݺu4/ ^x]vݻP衇ҿ9s( 5KXvݲehRڡCef  7 便)5NX-Z_M',SGmݺu$ݻjP롇D"sQ j>g}v҉C D"#GTS.7n+ra@ ,oLdɒÇOw__=XxߤIs=nˋug}`d֭'MW8CR80lذVZ5nxk1iii-[l޼ĉ+uK&%%uq֬YtVe=E͘1SNW]u՚5k*/Qinx^~޽{|u/oFkۻwpmqU\B Nw`̵^xaFFF%+Ua!Po  3,;?nv?à}e-[0~vw y䑞={믿>? Q=zٵkםwy_gnݺmڴisO%Dy晢~tVe=oCk+/1zN:߿855.] gHcmַ}opmV2LKK+]!C7kl޼y$V}@!,s̰00pѣGGۣF{ˏONNn:;;;^fMiS3DuaÆ vnnE]TKOզMwU,-ZܺukvVe=m߾=.,,LJJzb;~7v_e X:+ +\[JJ`xEPAa&L W\y̕Ī7p;-[qhkֽ{ƍGO6j(|a9CTRR_86l-XS>uXgYjU~6mڶm^xΪ'VPDUYܹs;v4a^:+ c-XkYdᰔz*+Ua!Po  T%, 逸9sM7vnz;wOvU3‘֭׮][6lX۷߼ys+5U۶mVagg9x7o~*% u6u0`@g)2=ڪrgaտ5VrgߦMJV",=a!$*jjjW˗͛7;w޽{}W+ĸ={fh֬Y222•+Wӧ cM5|nݺWag7(**?~$*8*Qi_n߾'|R\\|嗿[pe{̵=3 EVxk .!|fa\ j8bĈW",=a!$*k)ݳ`۟y-[̬$,ܻw4i2y? w^{:tHJJܹ>[~yڿoH$Xgʺ˃e˖Uy\ũbJpݺu3gNt/ܫWV2=ڊ~7n/;vlpQ_2\ A.B4};>cDX{BH8U ![o]|PB@Rw۷lңG_ ",%a!$a!U|}݅ ",%a!$a! pj#,;wnrrr 9qPS'x'NUiӦ{~w*ꫯ@.SS'",Nh?LKK+ik޼={vû c/:$? aaoݺuksX-a!$ 7|)SFFFFϞ=׭[WXXr>}3,uH߾}x㍢G"ZI^zEA 8<#,[BH8'.Z+СCRRRΝ}cʺ˃e˖0JbݻwM4III}+dHd/tyΜ9@ģ7x#RJ6mJJJ%,S:u&;vLKKSj N1" 7mڤ 8a!@*))INND"zR j ~'̙3G) Bȑ#˗/2eʄxD"cժM=P D7nܸ__œ bO.]nڴiG@:rɓ|ɽ{}#G\j@%,TQQ#7_ B dffW\\>|.sa?O~Xgm\4uڈo.?GoqGqB⓰H U o։'&Lz* 6UV70`@AAA8`ԩ 6W߿?̩tK/}{M4iݺIr~{7tS2~9rĈ?O*L(>ꄅǛ#(3|bE5PJJ&MOnkp̧ƶl ^믿j޳ݹ /Me&|~\{m WD꿎n[JD_O*`7o43;_Ke͝ppXn os&\ziN (g+Ǭ[-=[ vݬYO =\')l}|aƑlM6n۶Փ]L>nN0y}[w߆ ҲY_eA㪫R Cʂ|q%aalݾB T%,lժ֭[ݠ}W#''g׮]wy۷mۂ~ÇG-ZԻw2ݱcy睷#/\U9Q+˖-[VXXG _޽{4i=WӦM ,k+,f:Xfk޼Y{H ?V;Cn{ گӗ\.{{7.#mjSV ]r^zʇc~PϞk`/~qWEo~l7pῊ_x ^xn}Wc[-JNQz}p|r`c1⁠CU^ לw{ウº}=8{|Иtf߾7TX¢u͚590ʷ1CX$guVEC6lsss/p-[휜-[FΞ=y|ɛo9nݺuvvvf͚I^~~~rrr?O7pCݳg+&M|;ٴiS|swX2駟[Ky:}>/nppUWF`iѢy߶Tg͠ѻw3+Lڵ8?OצE[3.Ok\ŰºqNJjt̺J /3:xj_GGolX(|m5|-.t8۲e|?vMu ?Vf=o}MX@= ,ȉYؼy¤ӿpi5l08x`8oo߾yvFQU^{{7~SO=mϜ931V(X; KJ>~mfd<2yW? +CE敇IIJePpg/Z=U /+'pGf%u+gaP /3xAc޳96)Jo=a~Ya2k^~7vmQ?2:xO٢uE{ @9g?oal־}͛73W[bE.]^}ջwy;v,\n]vڪaÆyOsO>d׮]s38t. ˔ؿ~[$)サarӱc_gHM4xOSRZOpq8w5'RۧTxgaUn ҲYaW; pn*_򰰊uJj*ĚO]v>w^ן ,|o-^)N0ϟm⷏~w_QVs0V((,N *aի5kϟ??hX"kvС999} c={[pʕbj]v֭K/TҥW^ye֫Ws~`ah޼ܹs߿z$ ;vl͆e@vl֬I}\6؂FӦߟ.#G=ג{o)׽?J%{ݢ菈V<ԠY+ *.={^ϯyfaxc湛o[_Z6+]/s~0H+%*S`7(f1KS޽VV}e量F3# B+a!@}N:~ 4a5kꪤ;Θ1#8١C_;w)͛7/999_{J?(qM4III#; ]l(,Z%,Hff橊4hpiM8P}7~~.))-׭_, HLB dee֬_~ѢE'f@)..4iHL8_ aMX'H,#FػwT=:&,LX$ݻwՆsnڴ:&,LX$ӧXBWv9f̘j4BN2a!LqF _M)..2dHuV5a l}K!,ѣG322.\(竾<+:GX$e˖Nؒ%KZ{ 8%@B;|3`_رc֬YÆ [zw@%,?|Æ &M;vlzD"qDƍ{ꩧvP Z$Qj =B&, ⚰#,kBj =B&, ˡCJ CX_fΜ .\Da!@|ٽ{wjjjaavvv_RRDa!@ݻwF씔4 ΨQZhѹsH$ݮ]i& ÇoΝ;G"vڵhѢW^*@ģ~E"D}Μ9@ģH)mڴ)))Qj N]zѤ.KKKSj N5*viӦM @ĩÇ'''G"^zAXD̙a!PW9rdSLP=HdرM pJ '//oܸq鯿k ,W׿xҥMvooIX%GwC/|ȑ#WZ}p :hȐ!;v쐫cg~WNa!P7=zo…/8 @PRR2d?=8x≼<|&,L>PnjPۄ@{gϞ-?K4/իjw#F(..%ѣG{*a!׊'M$6KL'N,)))=B eeeӛoK/a!233efl>GXĵ YFFO@q*aaѴi޽{;5V۷o߼y/=zXdI8f\rɗo.}W^YPkU ?0--ꫯ+\ 7_*777??ݻw׬Y{.[o۫W~:qa!׎+, ٳ')))>paZjոqDZlټy'V>87lݺ=A#%%孷ފuHk;?np &?sx5kڶmo߾J sԩ 6B.]cǎf \NӦMӟ'ڻw/~>\pAv3fԩS0UW],ɏk%BSBXĵ w9x.]Dw{葓k׮;?ݺu۴iG'+.]Yd׾Jpm]wݠA6nXf@Vn/w}رc+ m۶/$<3EEEׯc{ƣ>OKK !Cy悂C^{L~\+B 3 Hd:lذ!ͽ袋6mڄąb s&L[=rK^XT|qawYgEokԨQc3޽p˖-Ǽ-Zdff&fggGk׮mݺu ۷o Û8+V",8%@\ܸqc׮]IIINkذa7ߨQ2|_b'Rvqw֭wFo|* ßHdUVׯ_ӦM۶m /džaNYD, ܭpZqxY{5o|Ϟ=A}]m۶~cƌ=zwQ!+}eS Y[XXy˖-ª\H% ]n]]; +9uɏk%BSBXĵ 7|)SFFFFϞ=׭[WXXr>}D >[nngNdɒ۷k.|xaC*\[/^{7]w]7h֬??z5s;*aaU78WQQQpH$۫W oل?p`<,pZqE]qA:tHJJܹ>ɑHdX< o~:$TPPp9Yc=f͚ v3 >s^Wp.]T%,/}+gcΝcƌmBn2eƍhxȐ!Vp ѣ .oiiiyyy'K-[#T,Y2tP4B9|3`[=cǎYf=W8@oذaҤIcH$R/pܸqO=Ԯ]N>a!@\D"@-5a!GXׄa!@\P{qMX@5a!GXׄa!@|9tP2aa@u ̙3sssaavv… ",/wNMM 0,KJJ",;={ hX8 a!@5jTrrrΝsss#HvvvvƦM$,;NNNٳgΝ#HvZhѫW/f Q~"H߾}#_׿>gef Qvvv6mڔ( 5KX.hRxe)5NXF ;ui& Ç#H^T ,_D"sQ jc=jժ)SL0D"2rڴi'3:O3f_r(,X .sK\TTpr av:DgϞɓ'Ϙ1]'^xAZxw VRRP@>}ʕ+gf׮]<V f͚?񏒳 Hj_G9r,tƌ> DXįyegg ɓ|j_#FgϞ'x6 8m۶,Q1cxr!@mqjڴi;wX|U|(jSƍiӦP8a!Ǝ+$#4a ',1iӦ}ɉ|+X[}͛7ܣG%Kcϟ%|K_ ^y{~wkXOP8a!Fyyy>`׮]6,~_/^{7|Yf=\z+}}}7ϟD*p%y/^{7]w]?8Yf?|~~~0I^zu9swq̰0p7O2x/$W^x c.VXXǵa!I&,TMEEE A#]MNND"'Ov8p 33CIII;w~gYYY_~yЙlٲJ:CsNdɒ=z͚5߿{ NѩS3<3sUxҥKUE]q{!$'N⋛4ir=QUXaaJ'S پ}233vZ'V+v+B ,T 8㌯~Vֈ/&LqB N7-)SP8a!M/#|UVP8a!mۖ%'#0f̘GP8a!F)'c׮]XPK@ZdɊ+e .===P@\KKKۻw,a-\p>DXĵaÆʕ+| jwΰa_hfϞ=}tZ%,´4/L#G\vw>@muƒ%KF/Qv#F7oѣGNa!P|ӦM7nD24xYmp2 Z$Qj =B&, ⚰#,kBj =B&, ⚰s+x饗&OU H$TO0, nDxתN25{'('f5Vr<ď5'Y ;f',݅3BN؂ 1]X@=#,pX>j߾a׉B]K/@jrȑc8[ly^:v7Z:3=СCJOrWg\yרm۶C )))IzFX 08r;ӳgN>|x%8Ya~;s֭]q?Oo#;pΝ;Yl0]w5}c< ټys޽%]X@=#,VXG5oꫯ?wOy_~>C֯_~7q{z="ޥK>:u}R  ' /9rdѷzk C.]vݰaCGػwW^yJcxF}C=k][h[AܹsGrիWzc馛n;DZx H1BT~iQQ7?Gwy'+XbEs=wWFo,[_=zO%\Ynٲe[K*Ə=D p'ңGvС!k6mڌ9zDiڴiyyyYf ]qSkH~"`*^oVҋ.(ql5BRz;aay睗s]w>駟F;fdd:t(z7,rfͪcA6m׸qF CaGo{]Wq%E333c 4X4]Kp={ >_jdX!C=zt~v?!ҞdXlذ!Xm۶---=AT0ʡ^8Q=0Wh@&,Nא ׇHф),6m4A;̞={Ĉas̩=ꭷފ~@-r`/,4h]wݵo߾O>$z'"I~ i}_p<6m [2eʉ rCՏ-;.­#,XXxW\2zwŊ/4hг>[} a~֧{ /0M5  9\pY^n]{C Bh:ujuڵ4ڵ뢋.裏=տ4arⰰ ) 3>s:u ?pS /|G[l1bD}ffŋ?òk^}Ց ~__~c7ߌ ҥKxFyӭ[~f߾}̙?7M}k_ok׮cǎܹo#UTTr-ş}YO~65?8l2o~zr`Z_aa"$6a!v/Z999sN]paC˗/?'|2vtW_p_zHkUVmڴ>|ݻG;]vҸhѢ.]{\rI{;:4iiy뭷wyui/hԨQdyÆ 5kv饗N0!Ç:ر~G?Iރ6dɒpk2r0VcRR@Po'9,lp&M4v3x|_ܠϡ ')  t sss ޏ;6eʔC6s % a!au~k_۱cG~ggX() } 7a!)HR@ZPo'>y8;=ZR@ZPo'Ν;+pVԛOj^y6iEX@BMX@ 6a!&,h؄ԛ9zh*aaG a!@pذp$ h^ /__QQaH)((ѣG$//ԩӸq 4<˖-k׮]nnnqqqXXxqBQQ yBK.YYYڵk߾_~P'B;h׮]vvvDX Dž={v޽°P'Bj7n ղe˲ڵkweJXPUVVvҥ]vw ,hv=z饢bڴi3Sń ڵk7eʔx:g},8m@{8p4,[,e{7uTy!i#,EJ&G^p:  )PH}By!5)NR(/ a!$B)+qRdɒ09cZE_|yHHM~K.NUkX]hذamڴiٲeAAU<#\rɹn.\K`2ɼpӦM#G+,,t$IXd}qG9{׮][r#+VZzZ};tK/اᵞ={v޽۵k׹sgI!@ TLR֭[ pm۶Eי?~VVVFtߵk׵^ۢE_~9vaΝ;Gӻ۷4Ϗvaam۶ [^lYUVpW.Y$z'-Ѿػ5n?y\6sss6mڣGEE;s=ۼys1U5n3H&nڴﳳ۵kv6+)+a!RI i^{1cww:47߼k׮}G=yyy>|^޽{nwq7.c=fΜ|gѫWCKo8^z-]4AXj|.ak׮^Bرc(9iҤ=zg?3τ#9|p0y\F77?Ob(11܆x?Y  iSt̙_Xncx}322vQ1++駟hĿ_Xc]Zj'|2В%Khhk|.͛g͚}{^2aa]x{сN֟>}z>} o|#2ԩSظ:qB $Vұc߿̘1ߥ۵k׻F^x!ldԨQѾÆ ;| iaW\?{իW}:tXfCKC{2aaz?w]wFG)kH]tmָIaEEEU #p7kҥ BXd@k˖- h޼yݶm[a={FٺuΝ;?cƇ~. S;wW]uչmI#o֬YdyժU-Zȸk?~gNNNl qÆ K&,̟?k׮M6]dI=_~7oNr5nƽך*))|аCݺu }g?۷yx S*ARa~~~qqHgBO 9眼_|QXX0VII… CG?WC|!N RXK^()H+BB^()HB䅒B4!,PR5J R iӦN!ar2e̙B$,0 M LHSB?Ҕ 'abֳg?} #._vڵk#fff[O?ݾ}{X0 a!@N¬W^_|uxE}寚4iYs̘15jԋ/h R }' zgÇGZ233_ݻ͛wW?0)CXugofǕDqn۹sg}aÆL2i=8pwo馌].]4ҸpœMX0 a!@N>[l12IX01kҤŋ @&)a!iJX`@&)a!iJXʎ=`rUQҍ -\Uaa @:h^\ C΄)ꫯ慑UaaaΝǍgpҜ ͘1#++o߾arUXXح[PTTdpҜ }'ك ۷o\u-ܽk BwwaZ5dȐv7, Ro.FNNNEEa@X"Ia>}ƍg@RX&f̘ sss _ '|&W\s BX..LqC@H_ǎ{͛ܟƌ&WӧOOgq ,(,,t$ ,ݻgΜ9}u:thXlY<ӏ>?\jմi,Xp1=@uB ;vlΜ9կʎv1y;it, ۿ b tQZZ:a„WXZibzݮa!>>JP^^>eW@H}۷oGdDg| WHqO<͛cڰaի]B ͞=[6Fuw@X/m%Kdee hYf:@K&,qsNoW_}5.":)nK.sh۶m˖- VZ]gҥw^ ˱}/Z9'rFvjݬKa! ~oO< /\n Oƍ9r$_}wqGqq}V\9pOi駟H擅WϢG-Jf*++5jT/8,jld)aaQQE]Y>}zAA͛5vIڐ!Cv{뭷۷o͛7"˗]vYlС[l9pw=oW^yUVԩӻ;wo1cF2aa---}GUq 4hqW]uB/@ʫGXxs9'ܽ{7x#\\\ܱc$Xm֭;ڳgOq~oΝi֬Y/, [[Zj5rhP'I6m4od%%%ٳgώ cեKƍv횸]XPB mڴ,7k֬q7nԨQKb50Wrx;_X{=zI~04iְpCyg cմirXڅ ,R\=ɓ'6,|饗nٲzE[-^W0ގN0, ߼y__7 o*},mpcǎM^$CX$ I&aq 7kч><{ݻ7k֬o߾O=T}^xa4ߊI (-Z,Z mӦu]m۶ja={={7 C!,RXׯ7B/@",GX8a!Bx@;aa h )¹ E{=B%,R LXXVV6jԨm^|a!܍FkjԨQ>[322v:gΜhÇ'NةS֭[?Y }aLzɓ'egg]VXJ@K&,7nܠAwUW?> 2dǎ u]}9 6o޼wGպBN;Lp z},Xмyn-|e RHqɄ]t),,,oܸk׮l֭cFӸݻ;Vj]!j[01ٳ'?_XJ@K&,lڴiiiid9,ȑ#uM5kƍ7j(Vj]!j[0c,,HB ŝ' kV޴iSdC˥^e˖]>b7qXƅiBXdŸ8pرcƍo}+7l$e֬YM<fAx+i&&X-~In\X&@K&,,--/>.,D3l[nҥܹs]><{ݻ7k֬o߾O=Tm[a^xao0ɍ ҄HqɄYf:@Rpb:@={` a!@@[dɖ-[dczWX)|Μ91b=a!&O\VV&!#jʔ) /@:())?%K.i7MسgԩS]B ]̛7ߖB(a!.*++˗Ӿ}Ə{n@H/k֬>}͛giesT!,αc.\8ye˖8p@{EM4W_uT',כo9wܙ3gHar&4fZhQIIS a!iJX`@&)a!iJX`@ѣ &WU  R… k\._3a!@*+))ϏUaaah0DLXoE䪰sƍ38iNXᆲ}UaaanBQQHsBWYY=hР}Un:vo ,H}ÇӪ!C;k_?nX~]  -'wܸq/iEEE/i2;;;Lo "bar "DEEŬY??s\M>9sVVV:[a!WQQ1mڴ=,[:]v͜9S^p N6)<;  a!$)4 B }IϞ=?cǎegg 6e˖}),,<|򼼼M.Y J O]^>`v^4ٳE ڻwS@Z+((x'#ˋ-馛7޸xcǎ]6???hffu>۷oJRxJ04iRK^z饑aÆM0!?~_|+a!̤W^_|uxE}寚4iYs̘15jԋ/X};SO> _7nilݺÇ¡C222u%,ݠAy~ᑖW_sͻ+~ĶK OC^՗aaԃHw֭ӧ|H++++))~mݶs>lÆ )yZ=;6lĉ}ф | )@= 8pwo馌].]4ҸpœMX"ҘLRx1[NJhWFN$,QEWNЫz^XcX? .4h޽{u%,ݧ~x˖-ug  ~!'HkarҤIŋ׵c>͟??++QF֭[ pm۶E֩7Uew5͛뗙y=Dwu׶h"//_ҥU5~G I$,3yР߿w{׎3f߾}wyСC4xǎ:ѽ1.++{gCGP㎒eg@CaSN-//SXXRR{Fݻu kM]ZjY'F`&MCGPjuɓ'7p6LڅfW׼JHMm01Nex;vwB=BI!8&BP3_)/Escƌ-[ܼys&ZW2\l;n׮]#lGcjܑ@4IT|^X%$۲eˀ7onmۖq„ -[L+Lnȸ{ٳgȑ[ܹc=Vek5>{5P$ aMڅfB$ MڅffBI! HI%/Ԟ A @"BI! HIB^()@:i 9zhӻʣ4\BI!G N xz._ y@AXOIII~~~lޡ` lw(sssBQQRÚ5kB-|z6l`pl#,Ӫ2''K.ӧO8Cܱc PDP;,YHXۄ BܣGpzwڵcǎ>aR{왝 /]w΀UVu)¢"5k;>۷߰a΀ʜpzhZ§W^FZB83&LNG}Pj6mrͻL4)ޡr6= ,U8\b$pر_|Q=!" "G %ǔ)S~:t(IXlAH|/+c.7ؽ{̙3OrShYV:u ;o@rXbڴi{QqqJ۷oܹɓ'8y睅 ٳ}(\{?/iHXH==)άy敖}Qa8/_+#n_|_Bx% V&O\^^n2 !a!}'xB`ԩ~ }ϙ34Nx?  ٳG]ibɒ%[l1 SdÆ V  3f8K:thJ4q)5k,jҊ>}W p{}~ }̞=lxsI[o5##k׮s̉+T?xۉ,L~a޾}0&O=ɓÎ׮]',H[ 7lfG ]ty|뮻.LG[j5lذݻw'wk8Vc-á(#<ҳg0߿ƍM2xϝ;7P-A P=T~ֵV5ZtTVv^xGUԩa!QO~_2dǎƍ4h㮺G'M4`;w'?4l޼y޽Gi'o_}Ĉ j2=okt]w.h$BN61~߾} ,h޼mY M?Y77W,Z*2[f?y7ߜdXXkSX65vo;7СClr;Z8NԩS )5R_y啷~oou֩j}!⽲Tu*D 0##oo[n֥KƍvY֭[?]Fu7ވ,w1={w}7vj2=:A](7x W: aϞ=Q|zfa4F?믏~Iwdee%18M:_,y ;w,-]m۶6W:}־aM6E?DZWrVck aa0bĈSN2eȑyo~={:th޽գM7n8|x{LHPA ʕ+KJJv+ҷR=z8ɼ^dNx'dONE  Bo? 0wHÇgϞݽ{f͚?{k֬Ix"= Ņ^7[nҥKhxQ U8jx xaa/ 7 #t\{-[v饗{:t[lܸajڣGGy$cSX6 lݺuΝg̘VHeT5NhKM6{1 AQ%-((hѢE6mm۶U[Zaa= d^xl2kփS%,H7BְN>HX> Skֹsg!,H7BCX٣BX>*,Osέ[?ɿW5k?5iEXH}̘1Cuc޼yJ4qDw֬YYYY_Wo{e BcSq6x饗֯_HK,ٺui0"s=O @ZR;vx'Q MVYYHs5 S  ɓ'+8?Bt_dN)S#nӪU^~eugV3]id&p-YG  qA=ʕ+]iG )1D{:u?/iHXHSkqٳ']{ꩧ*++]qD;v__&Olٲ A 4 A 4 A 4 A 4 A 4 A 4 =z4]Qp Ypaqqqwaa N'a!>%%%Ѳ9zz9WTT"@NB8)#w(tӟaȑ={RtG?NUVo߾O>lw(sssBQQRÚ5kB-|z6l`pl#,Ӫ2''K.ӧO8Cܱc PDP;,YHXۄ BܣGpzwڵcǎ>aR{왝 /]w΀UVu)¢"5k;>۷߰a΀ʜpzhZ§W^FZB83&LNG}Pj1cjPQQ1sOI&;Tbͫ:E2N"a!P{8z-[WRR2k,4Pk)4eʔ^ 2Na!T-OORx: ZKS:B8Y_K @PJ p i¹Գg?} #._$,/iܸquև p@B =)L*s BA=3?#-ﯾݻ͛wW?^OR / fhnUbPj$ Be$CXHnݺ>} 87ߌาvm;w6lJ*Y5VÆ 8qG}4aT 5Ф0AT=/T@24l<l#wqz۷;N)4 7=XNNNh jժÇg̘ѤI3gȑ#^x{6Rew5;nHIV:۶mZj C]"{-//O>,,))޽ #wۺuֱzEmXʦ2336-|B>uԊ gkA{LRk)/,,-- jܸqgϞ6m V}饗 yhʕ΋\jHjwZj-tBGx:UhnɇUz% 322vQ}; %e&qƇ  ?яFճgϰܣG[o"eee=ӥO:B0N;Д($V)G#߁*1c~ iƖ-[Ft0אVHc!qvzwGi6l؝w5ZRZomj uca„ ss93g 3f/ /QF%HlRc[7% %`w^a)QI2/Rnٲe͛7۶mKJP&fkֿ{222ٳgȑ#[nݹsPGw𪫮:s%޵е % ~鬬mΘ1#qηq??)R%,oڴ)?|E?w}w/5;, Q(B)pyD)_xFidmMRZom@_PH 8=BSt͚5:uе ڀ(eBI!rWXhJ %e\)J 8BSTyе ڀt^()S4 MR\ 煒B2xkiyL9+,}¬(<0 EEETp-2v}F"I6@5 AXxɹeIDATK¬(<0رcZ3ȑ#۷6lX߾/{wWE?~<5o`.&*Y7M\R4oײ^$ Qr%L~ffn`%]M,@W$ߝ33g9|ޯy3ggپ|9ťk׮ݺu6l5,,fruu޽XqOOOYXq 2D\&NO֭Zw@Aݝp8ht_|]ܹ/64d:tM<}XʏR!ilBcwww韧gc 1c ٮW^\w G1g3 t钋 6w7#B d%5kXq~X 2D\֭[GU3ghH,JIIYl=ŊGEEYQcccE=B TVVFGG/9x,|rwh,߾ˍri#4ׯٳǺڗK,Vjj*94e,|;wﮨlUlb].++,j[yii)?~IIe[duDzNO^p!,!mK&.X@ܷ~wV׾48;"##ccc_QM& o.¸< pV"=l;Sh@#%4ׯ/]466{@4'OHII6}Ը;VYY1 d o 5Iܫ:u+/?/$M & W\w^.??̙4 q͛ׯw9'',$$M6z_pm6;;;??)l"Bq_t8ڵKԺu`q[BMEBS\\5MӶm9@ak^+4℅ԑ Z~/ &ǯ]_|E@@Ӿ}~׬,16|8퇇-yf___i`HHȬYĴo֣>ķ!_BCCy(ŋrB&¦7n܈ZnQ;Ǒf{w޼y۷ohBssϔ)S٣xE Ŏq5o5o\pEsGGG. %Xh> TTTDFFrB&¦񩩩\-MLLLii)m޴iSRRرc!NNNΝ3377Wlx駟6N iߴ_N$ P`9N83?߿?h l'Yx͹sr@Ν[d mطo_^ pai*+++((8:y7nI3 SopAt*& CBB®\2k,^C ķ^QQ;)daVVV||3՝P3M-Yh'j~!Zo 5 >KOO ߟl$ ,Xb]p!66ډEk׮>*'wsF{qrr3g<?p֭k4鷷P\qAٻo]=~]\Lrʲ[\[V$1sڴiF/O>b=EӾkIV!=ş~阦KƎ7Nm>ѐ({8[b%[ha4soFP\vIc;88'#)MAϱf,,--h޼阦k׮=z\xҥK`?x|Lˣ߾zPtƷz˘1c5|P`K$ }.gΜIKn%")))>>>6,ؽ{dee(5V,&i% iӦ׏d0p^{-''011qwaƍbMDi'TXa_Wt %q%'xBGGGӛߪPd3YĚ% ͎lZk׮Goљ,lL$ myyѣG#""ĉz߾}jd/߅x>ٳ_}UH6oҥK5Xĉ/^=8.89kBACZXյYfɮ)S8;;wQhnnn⫥KJ/^ .;wܚ@~=ERnf-8LG3fRرciGooӂc}ғ/{ȑ#wvttԘDz;s ğN>} -߶iFPdHF!Tq!!!𵟆YPb hǴ<)d!SVg#G}*F=z:mVsssCSN4Il2BM-VۗBm6JU:*F [jRR܄>}$%%iL~g<1+:$vժU=ziT }C-3}Uk͛ Dt,۷<|ȑ3=" Ӄ>[oIҲ_|EiX|ɩSJE?Rß[SVT=ER=E/ѣGFĉ'䏢k׮> ,e6_(K"|A_BBƮ%{Gs̑'7n~駟\YfiFGq) qW&?~\^PL.f"'$-[G3,d͒j+NCUV7-Ee YT7Y("}*Fb}ɓ'ˏ 3g4 AR' -}.:t8uQq*Dm5"%MnH-J11,XvڕkLEĈe˖{O嗥5*##C#Ϟ=p7ԪZїbFq$ M7 ."yxff;SSSSH֭[7?k.]Ν;/Z0RVT=ER^d( /ڶmqm&gOO"1VZ_鵊a_~ǯ?~񦧸jiL$ ؜& E[o5J1Ul P141a\E .Bm_j 9JU:jD zȐZbcX>GўVq;nݺUJ2dڴib7הfggᙽQ1 V,ԨϷlْd!hKExTZZ*9Z2.j޼yf_ixJJʨQE1d8ZB٩SN̤?A m||_'+WZ{lN , EJ1UlE>`T\f5V!#''Gqe*Dm5"=UdH-J11,ѣ{aicII.((pttCDJ?aTrbjUQtǓ Bj#"0P[?6olv`͊6\~zukܹs}Q׏3hZj̤džzBЖXHlNuۈůBPV}Q^^ޅ ~[v!:Pd/58((h˖-Gŕ2Pm"-*ҎRv/SUVm;>C͓~oȐ!+ntyUEu/%jY,4o0`3s B2o@]ߊiZZZDD6T1uvvNHH(++G, a_)}nѢ83bnٲW~nnn"UK bZ8P`0YXK s!srrX) Q-1jR\Oռ+s1;vko 5VMO d֬YϭJ&Klٳgw6das뭷+%%!ZYYI N#Q>~֭T,Nzzzd!]' BP+/BB" Jk>CLLL]>AY$_XBWVV__j_{Tlv;BT@ YHHdn޼9w\Q`\dIw?>aڿ$ʺ5XN/$Ld!!ʊ'2219oʅͼUf͚m|뭗J~}것]`Q׮gUkYY S!d!! XbE^^-?|MJJJm҄ޔ Qw% ?<{fLuoxg!"Lp5d!!%Z`mW.\.X!lIQQQ-ͫ,'>*v3nFS)p]?gaO-NV흞iQMU^qCNJ GqĐۋ!%7]i U٢N]E`^ Vhb"U_yNNڵ3fhǿW^(vw4^C6/3iғGDCZh' ; C$YH 9@=]yIY"B''#F|hzʹyxx޽{sw*ʕ+iDM=|7d7~iVGﬓ{Ԯ];Mev^^]2-g|.PT|PwiQu"k덪lk'~#>joة-ᇃ6l\!zoxo„5+F˰̊vPqPxA9:ֺEB9ȯ`5BT@KO ZXյYfcYYٔ)S;v(zGiP777ҥK/^ swwwpp8qbqq4|Νݻw_z@Cϟ4ie-E{ViQjժ=zBw}?i!5]iWb>[o%  LKK~bAAAO>ԩSb}g??1̙3 -Xm)G0bQFeddϞ=["CjW{*?99ٳ'O~gkRj4iRaaalllVᄏqo6lؑ#Gf Y4BݼEEE_~0*jFکߙ$Ϲ:i1=ŷTj#q2ΜW4_Xثj{+"ķfGV[Q Qo?(XN*.BHjKϷtzc 7 :l؀D'VBQoY,$L$ ,LᙙTL֭?,tEܹEN8a8@CbYjK?Gu#dggK%%%iժXC5HjTہeeev[' 3g΄mBW6pQsVBFG 5G\ZIh֬Y֭/4trI!n漷"GVキWUF",4k'^{g=;0$ Ֆ%Y 䯾^F l#gť+#k"BEhIm)ɻ>ݫe[]M] Y(V|yzvYlk$ S!+/BB"KTא 7LٕJG|4.o͛7kL5{֭ -Z.R`QmQX0`gj,S-j,Ν;''k5ާXjUmA ^Yɚn\=T[WVMqU]F`]Fk߾\ ӧf{PT+;HGWO]ڱ]]HBPW^D6B=Oy{{fdd-ҥK7ovvv6;P~СCR傩-ү0VB=' +V|G]p!??_@5[o,+>cƌ>}}kc5^U5{ez 8kHMqU]F3`ӂJ;wۇ 1+-h ;Hg9ݴi<2xBT@KU7ߔ 0c iܹs;f؀-F>tPIIرG! 9r?PZZyf5ES[:t g W[G=B_b:;;'$$G֙,4Z_fBCLT;6%_U[PcWV1{j3*j% MqU7nT0ݴ`nnn^XfƬnA#<һ?d,[֩cS$YH 9@}\yIYJK$z7db,_\~#Eufoo߻w 6H{)$''k 4TVV /8::zxxEwQq)fGuҮ];:It&ժ-[lMd7|ҥKGׯajY=/qUW[PcWV1{j3*j% ϭfS0I #|bGVIIŕSS[Vt[cYyVtؑ,$LpՃd!!%2jʕ+ Ǐwvv>w~W~6{edz 8V{F뙛ΪӳP=BłݻO>w~駵gAiCu2N},d!a*!u%YHHdHUVV6XPz,&&FT ?ybڂ뽲I2=T[WVqsYuz'YV~M=+-Xm-(wHjd!a*6qr} fdn&ndPbbbjV7Y}KT ?ybڂ뽲I2=T[WVqsYuz'YV׋"*P{V[WkȄS$ kP<N䪑,$L+...''G1HMMݶmU, ĭXlϷ~R]_Ѹ/_>m4z7%sH,$YH ` @!Gjj^YYI`!7$ -t4q'O'3$ шΞ=㓕Uzj$ ]?gG|ߨ*z}N/v3n;tp+t^ 1YyOV}NR6̮|H1b/BԮ]N2rnIZADD)ԓZ \4qm޼ҥKcy7daxԇ_pv;wkӃ9]Q)Svo¿s⥴S4I9GDCli8:g6K-[?ϵ'v1hRE'z"3Vf=oZ}k욪͇d!a*drv]Q9X>B 0رc޽{I >,\r~G7ݼ^^]2-g|.t~:cnn4,fe8gqt45R[.]\[_/éV[FW3y)h=zxg#vYz*[z:ӳ4<JδN|Hqww!G]]]~j'YhBhhhYY-[ybbb-wά,ޔ SwOk'~#>C?%ѱ-Z蟳<ΙFjkᝏ>:}{__]_h4[Ź7?%foog͛K~8hg&L=ZRPmښO0Ȝ9s\]]=<B 0JJJhGڷo_BBBw7–2R' }}=L,߮tIy߲+.Ql#?ϓQCfU戮Wwtفl咋>g8Z^gNk-z}HjI>d!BT=톻{T uOB7 $G BԉO>dժUus&&&\ g8ksDOΙx {U>?O7 ;u]%?pdaxaȿ'6;pSt)Z^f_BZaޅ:cǎޔ x7Wׯ__$ HHФTVVFFFsߖ-[N>pB'YH+ ػPgN<+#bߦ3)Iґ,$ S'YH+ ػmB:lh"|!nI .}Ed!'[,w}ףG7oJ_޹s眜6m+55Uv۶mvvv~~~ 3$S r-K.ۮ]yyyAAA[l웍H .}Bd!'[,SPPիWO0A?~ڵׯ_/o믿feeLgE/[yf___i`HHȬYĴo֣>ʩFVwۨ%KY^G-|wy͛7wL1}W-1O~=L2eϞ=!Sڵk~k޼4ŋ… }m$ i{ lY6mJJJ;v4ܹsc<O?p2|-b/' _;Y$ i{ lYի׀>, yOeeeG'O}ƍ;99ɓS[n!0V'U]۫sS*& CBB®\2k,^C EVw[6`#F+**&Lyfi`\\ۥz2?c2%tСM6AAA;vG^jO˖-_v3=z<ٲ:4H* gΜIFVw믿>3՝P3, ={ӧ   ߾}Ν;ϝ;$yZ77oZzda~,]6p6r--ZXvmu'Q9ggg׽{իW&>FEE9;;nٲEN=í[߻wda۶m333M߿BBQM  ?}Ш_tQ,n֭[WĴDE~ǥYYYvQVYf]v5̰Y紦lEfd!0`B5\zu7nܠ*ط-ux1@zJ/8O?㏛}H.44O?V\YVVuV= ]pXСCNsNy10??_(yڋ/y睛7o@hhݺuv/**ڳ54y?f6mڨQ^+))1JTѮ]u릑,9hNsX>BZa^I}8`qWQQ?Y8uԻ_4@WiipBͥNNNt-Z3gά_><<{ZPpM6_xBraִ9k׮@ yaE fuNk:Z-P\\~ 6 w5ׯ_OfBKFaNXȢ/Bg@(Y(<䓢dݻwѣG[ w5dc8p@{Lj FճgT66p.F ABzz8!rᒅ'N_ݺuWJwٌΝ;x'f ŝo#I}8`# SHl ''D7\Pd(ehh(/(E>hXLZ0))i...bY^^^d ٷ-F`t1_m _26s8M;vI4Yb )Yx= w5}^^^IEzаƙB|(D̟L!6p@x1M۶m/B9,[Lj; O4YXUU&7l0ZaݻPWvYˀ?8lOAAA@@z%_8 [Ed޼y 1|ky `c.euС"\3I& '|RoݺuhD_} ]v>|xǏ… 5EП}ƎkvB VѥvQBEjd ҃0d :T\F)A/:l2^zqBB YfI6ZaUTTfG *((QモS׷ir ^^^~BBy̞I6Za'_XL!Ⱥu&?J)--b)Shx}ׯkLK XV#_H@ @m̞=[.Q!3f֬Y#g n1-†C+ `d ԒruuaÆQ3Ɗ4n5B X/|!Ba*ubСbn:p4>B 0,aL!0WUUUJJJLLŋʽ+bEUX5q0ƊS 8y<ޛ}K)@c|ŋy睯2l–-[PVV{nqxTAs6pF9X>BZaTıL@ bˣd˗/_jU= ,2KX>V+Vnm,2KX+Wݻ^͜9n 9>BZap,5!Dy7ys׮]#WFaaauC%D>ttVZ,2\Ԛ6i::f͞:q/qFDD-:vX\\gfG"j::I c.m4m5\'C/OMMyj111 8"&YH+ իW/^| c.m$ Z[›7oΝ;]ڝ;wnɒ% 8"&YH+ 'SIc.m$ `F} O8O.`"##kKi 9"&YH+ 'SX\\,N"_ȱ 6ttME+VˣU{IIIlHDMGg5BZahB Be,NyY\~cYu/\`MmpBll,gG"j+M-&YH+ 3SHc.m$ Zӆٲ,MxWZJYu/IlSXȺ_wM^ZIl0#GlZ,)$_ȱ 6J_;9o-W{*8;wx1k;YǎЦIe& 멱Fqnm۶v=e:M;ӈ#-;;;rvvnӦMPPЎ;q6oE{֪o΍da.^ 8m YhcQQї_~dɻQQ3-6>ꪨZwhMV4~|!2\ڬ+Y(/?>_ش!-<0n܈ F[c/:;wXdV^.~߆a,l}[4$_'= N6_~8pkSXX8`i;tqF1|ӦMOl' I&Hr6H' -xёQQaY~4KD $ ǏYAКd!06qKNN~zf k/ܶm± Ot{{;?ÛO-NV흞9zpbELyZ{&{^Ow*;_S'%ѳ/y;::":z^tt%nڴ4L%VY}G) Yzz-ixxxx```ZZZvv/(  JOO'N* '>L履~z5*/ѣGFpww?qQwpg}vfVҖ={vb|eSШrՉYfiWQ *S&n322ٳ 7b( ;w4dÆ 3Z-V*?cƌ!CӠA䲩U̙3 P;YX}luyfKcM4066UVbRwmQOr6Ǝt*Slѳl2;;{O嗛X eFҷ{[ス~Ѵ|啉|+(WE{տju|\#Bk)BZaP|aΝŖ󋌌}l7$Sȱ FI\\:;7wPwfKug"oFWfK=\zig΢;SD'}"-=KӹI]Y'Fݵkg5Uճ?N5?s%*/*D_cQ3ryjEmШsE?.ECq>>]M[Ym&{Kvw$%x{oѣCJᙙhnK͗%?q"֭ӥK_0.ZȰ)_mb˯ /ڶmqɩnM~*Ez`pZ z^LWXX(lj_UVF%TL1Zvv_RRboo j԰V^^.EmYhZ-V*/䧟~EeS@CAaե'9}հ_ɍ,lP㳁jU,֭[!CM&v)O_6|<>HHw?vw'܈-$}ͿϚ5hB&X#E;p'FV0:Q >5BZa`AB???www;$$AÚe IIIvqq?Be5VP윽n|ٻG?SqA9:NZh!O%'DmfK=WuU[!רּ0jرO?RZ4\L=7;͛7Y h~fK4(j@n"W 4ۢQݚ`Lt-?#%%%FkPbrG,EV Fu9>ڕg۩7kH9Tl`cG)&(..-((pttCĶИSSŽ5;:z򘹻|V^q6FD_Os * wwWӫWC4h8p2dH<k;$pq"|t٠78VH/?}5ENOkDhMܹr|T Y@І{W~4_yӮVf~jִѩf[ܽ:c 7ɰa_R:AP.s^h s*TƠA^q܀"1b41D-.VV{M&k%[1^|l_h> PԳ<\çʛC`:Zdu[4OΏz#8~Q9?K+uDG"--^oR 1c4|ܹǎ3}h1CJJJ#FHG?n޼Y<5*D,711 77_߿4\LޡCM6_k7n8uvvNHH(+++2zhyeSШnРAOsU(rШL|jEUlvׯجIII cvFEȿY(*MV r݊3ڇu\l;kLr6P+-jU+۶mHѿh"-$6Z(ճώ5.Yz<1潹nn}KZD1ԿF$  W_aN]v>|Ǐ/\… 5˹;=p("eSd%$ z=KڷoV|>]fMɻ>ݫe[]L`g''qijyn򾯯ǍleϵsщM8Kvph+OQ={ohrGceĝ1C۴=0]_.%}50ySD /]6GL]_~y^^]>\i:Zdu[4Ozٳ_..E7R3?uL̻ &=PZZK/u_W^^o˥/^\hQn{aix|||Ϟ=@qC1PV\\ܺukǎAAAcF-1"zѲeKwƍkqҥ>}(-[|}}S\GlҥK /hM*]v*S)hrGׯT,tuZa.裨{ATׂ Ąڕ *^! 9>ڕgYcƎt媕ȑӁDEѣG95r+bQ[lDm29B9t-7GӒMRQ'5"&YXVPOFI&\V\k/2ҬDp6~xe/$ +Y(mŐ c,dEj5ZګJܫ_~eɒ{1|h--ׯek,_|ڴi[ȿ6ɕ+W5Yـ# v<QQ5bGw{uwwҥ(aii85e H?~ H,T~Ѫ=뽿mܵ6gR~_KE6[{ꕒB!={V\gee5_y̠W_}&,G:#55Bڭ[7G U7_)9Bjzx)Ѫow-DŽuرT3in S ,IBJۼyK6V]]]g}HLL gt89H,m***Zf⣄*((QBNѢGlllaa!M oSRR86p<Qё,$YT#_XL!Btt$ >V]̟?`#5B|!B@d!]-BDD+,,婀`9#5B|!B@d!]$ wرw^vp˵Dtt$ Id Btttu,BCCh:㑈d!BLL! Yhɖ,kBqF /`ۗPWq%6ttVZ,-_XTTD,:wѰ0('|j*lfd!PgJKKM4P~ ? |T7~%nU(BR֧X*HukۮYtm k@D [zVETB \4\Ji;f0 IN&~+s~:IJD"'N z7=1 @Xz޻dɒ{Zݻws„ ?Ϫ@G 'BYH1;vxM.F: d00p&=#}a! P`8C\ Mߐ0bi,,#pH7da! 3@! A=(`ňfTYY_]]+ gZC\h.&Mںu//4hoBP p1YD’C;BV,,#^ͤ0J^h8 ߐ0bD gZC\hJBy @+|CzPM&qR(/4hmoBP p1~+((Jrd/_'piߐ0bD\guք |RؠpA"pߐ0bD"˗/ #F\ 1/ c]zy{/{" g YX!@.F{葕ugׯ֍K [ {}9dffSRh8|oBP p1Ȗ/_͍hXQQ褰f^x譄?=pߐ0ňTjժCG硇ҍm4 gm"Hẅ́7y7|sҤIN KJJ&L}}{z =ENNkS'Bm(`TM 3331a~~ZZZ0VVVFU]]bŊ/8fgg Y'Bm(`Dz٭[譄eeeui\^X+)8zap &Bm(`/>歄jh^ )hxeuYBhɾB~ ۷oߢE꽕^$5/X EO 4d_X ? $64)o/,Іh煒BhU}a!60@[//@k !ڰyZd_X ? ж %:'Bm(`6/ݻWRs/,ІHA!)9Bh@(9pBP %WX _@4 A (`W^a!(| +,/Pr@^y0JH+:t(AQ@}a!60@[`zKH$|r]d/,Іh  c%G$ WVV"h%}a!60@vUW 0 FKH$ҳgnM@ !ڰnݺ 8((9"HBg/,Іhê훝=p߿ff=j/,Іh~fff%Gݳ-Z[UMPm[qqqvvv׿ +++u ɾB~ ͻ+ba-ܢCMPm^AAAϞ=#ZXXCMPm^uuu߾}czZd_X ? ƍ/ 'Bm(`u^n]~~ӧqƎSLG/xMΝ;7x}RC& !СCӦM0ao~󛊊C4e˖鄦R^^3L8qeee-G9Bh@ʊ+&M{nq)a޽f͚? 8ɾB~ h={1w VVV4n/,ІZ=؉{1c hd_X ? /… N={;#}a!60?Ǐ5 ,0Re(` tK,D"r&چ2a!P@>{GD{͘1@X10~{ɒ%&ڒI&υ !5޽[D[Ϯ[0O~ga!60ODs&,,І5eʔs1ZL^=|[Rc(` \G N:]uU[lIȭqqWChB5a ,~ W2aate׮]wqy睗dH&,“}a!60޽{O<x 33]vv[.]N;`%6[EEѣ͜93cǎС 7PRRݾzAedd… 6A 3t_kF6SC̟?Ov>s7lPwm7|sǎ{5k֬zk+۶m :ƍtxGOwڕmɴG/,&Bm(` \ pÆ &UѣG_tE>qyƍ wqM7E7':t-[s׏92=(?eeeu]`cMN0=X뮻j=xͨ͵r#f`6|[}ݱi̘15Bw}hrٳYfo~Μ9[o530pw};ηmK¿x=4d_X ? +Yرc/˅oflH$]߰aC^{{/]~z]޽i~;׻xZ+ܞVuV v]/--Ȩsж!>z*O^~wqG^{.1kٻwofff%x_oBj/,Іՠ?CZkc߶o߾,q'=v_׭[7|N:穧JxZo{fZpV10KbJKKsrrJJJ:tP\\ܱc`Kvvv532$8f4%qےi/,&Bm(` \G&s{_>}ޥuxg٥K#n<❅7n;Խ0^3ms_3&FAbM}Wxe]6a„K.$X⋃//r~`}IlٲN8!+++ږL7lpԿ !p1,lc9 [a!BHp[XC׶Ja!BHpw}icYym;, ̞=0O~ga!60sݻWE[sϭ[0O~ga!60۷/YDD[2yjd?P@Ə/^ػwX_*@[js='dm5BH`r&R݊+V\iDWa!P@kPZZ:vXQ)^Xt @#&Bm(`ؼyرc_HzGϟo иɾB~ h=ND&N|5hd_X ? 6k֬{,Yw^Aݻ.]:a„gF.G3Bh@ӎ;|i"AɡJя~TTTd$}a!60+,/Pr@^y0JH+@izP(9 MBP %WX _@4 A (`ءC~ 8Bh@U ,(**D"˗/EJ&Bm(`xРA0VrD"`{ee.V2Bh@aÇ0`@4/HgϞ#G9z&Bm(`6[n,** JH$ҿ`P@ !ڰ}fgg80(99x`=j/,Іhƍ׽{Vzxbj/,ІhۊM^YY[UMPmޕW^ ovm/,Іh z999:Zd_X ? UWW7(97NP`ܸqAɱxb]p/,ІhUUU>l~~;6(9LVO>wH$~]Bm(`f;L2eҤI=\EEš,[PW\tܹs60ُBh@43gΝ;5l߾}֭"d?JX ? JKKGsN`<[l5׬Y @N6@-*06qֿTnnN5!4y|ذC L?7,>MpCTⰰi©Smڴi.d_X>k0ТvXx_kР3Ѯ]Ogq睷raa?Vm;3{3_vƶ 17c_]yO` Vˣ釖yE<6cĈˎYH>>>;Cs6U^LX?[n^{K/raas=}\Hɾ|(`E% cw_oefv/VXoZzAl+[B k:A3v=w꩝f̼{_+2soGy~E}yB#nZ=?zX o\LX$yaaa>ؼyO9^x!8t gmZ2nn&ǪmkStDoA'ͷ~c3z<63xbkc_rNN9kREWil&mpb+qIWn=<|_VVv%hp[О3엑~u/|ѣrssڷTL'?Ķ{>ms &~LÞsFЪ.Yۏn韾2~r=ߍN=z> Ν;V?ri  ^z\ۈgތnG%*=x9Jw]nXo_7v?k77K50{6lXtnҥi{k+۶m ^۷o7nاOϟgdd{6luzxGѱcǓO>ꫯ޵kWt7{5k֬ºw8p`ر:tJJJ#, hQɇص멱x/~w}\|{noC`I'?l фk./z;bLD3X :w-,9|[{_`n3cݗ^wv=_ 7\t#|+} v6⢝kG:y1ⲝ<v/{(77˂o[`=R͓&|_+O jXn-{G=*H.]:ۂ%6:įZ3~ѱwKOnFFliju7:j>xc$q:R!8E7?WS+k ydѴ1gܓ7./o|^ބ3ϗ]ܛoYVV{wmDXXXX|&>z.h'.;3x-̞=;X5kV̙][G>|֭[KJJ:K 8wwo}+}̘15?pʔ)Cݲe˞={#G 0ُGX>k0Т ߟp޽{nڲWћuVÂFzj=,w+y%+>vzYk9x荬+7",<>۶?]/)Gbkp{6i^,O +2zܷoحW mX<0~OK57H&:>5|[\}z>Ìg3\##O2On&,4GXot|!77\HzvgYXc_ufl+V~Ĝo~sDOn^=j{䟅 C:Fc*~w{h kgO˻w׸; ;w]o߾}YYYt=X F999%%%:t(..رc%;;;Zhuzx 3֙4wfdd֮]૰x6@-A\t~l|}zż/dQSl`[oo}׍ ?_H,{FuۜS4,|k dEջ|WO_I|W]7;|}Ӛܯ}ؿKYy'⾒W>;:Iš=iИJwENׇ7m@x_3&Mzgbﮍ ǏW' .0a%\_|_^&v̛7o߳gOl`ƍ민ф[n=4a!< #573K,`5_.伱c5ݻw`}{M3H 1v=Xm;_̮bȻ{_[o&x+|20^&,=2y/ AW4+_,x*?k nKQzjXRkٶΝ;Μà=no?x=U' ^u1c[yrd$,?;Õ[|pNj0ރjwT|g6%K$#|oƟ<`^ބsg|XXQQd;v|?~C 5jTtԩSO>ɓ'&M ֧MdX]tYtiyyo1bĈK/фAoGظqciiڵk*a!& gmZT0Ю]O~v)-G|?]t`%G6m^sǕ ΜvԩC=FqQpOsY+WoPXϿ۳vvZ԰O8x*32ڟs{nib̻;t89^# ŗ<`!g;:xc$qS)ΰmÏ:p׫z,]d߾}] 3(ڗ_~9[nO+?iwet7oN2,we˖p YYYӦM_^^~7v1'''??hGׯ_FF9O 0ُGX>k0ТⅅK:,SUW]a ը?4C%ԩS]Hɾ|(`E -%ޒ?sCM:UhӦMs m'BY%,X,xKwWa7 (ab4GXdɒ-[^[r 4i; (ab4GXXQQ1k,_#VYY @N6@-JXhX,Ə_^^.kɓ':Γ}a! P@Z,K3s5ObĈ;|W_}]֯_߫WFwVrrr^~;6;;C7pCIIIh*X?駟qnذ!v[.]N;`%6bYYYfΜ RovѬYb{cj8⹂ҩSoYzA]ѿ F7&ӟ zwD$sva!LP@J&,pw};η`g?իWGwXjgL2eС[lٳg_?ra÷nZRRrw<8ΣG袋} /;Ǎwر㦛nJxa1cj9OI[]wݕxy^}뮻.1lPԻs'" e/,ІRT2aaQQэ7ޘy'k_۾}{}̘1knk^G;vDKKK322윓D6lիWtwޒXP5\>G322ıۮ]k9/}eee`%z'Ƀ$حݺuÇԩS>}zdA=Pd., ɾB~ HQ މ'n޼yw޿={bau]7iҤ'~k_nݺuk#7.,wga>}*,ܸqc>Ү]$;lXO>d.]@;{"9P&Bm(` E%2dʕŻv??K.K.-//7F VZ۷o?/ rEmܸtڵW]uUS?b0hQ . hXbї^zi wΝ;RK.x6_,++{'j'lPԻs'" e/,ІRT2aUOs#Fx뭷ۗ-[{ 'deeM6-&~fffP!'np(//;v옓!OL2SN9n̙3{n Βx%KyA 4 lPԻs'" e/,ІRTC )4ԩS 4Zf/,ІRԩSY4iӦhd_X ? (a!Bd_X ? %KlٲEE3yV\i2}a!60***f͚%ӢJ !5~raɆ-6Bh@xΜ9b-O묳"@k A (`4RPPн{`K_Zre764)ݻCRJU]y0@)((ׯ_OѣW^ +** <O8p`DBPr+,/ @MW>ttz!ԥ'B~aD" իW{ޚ2eJEEE’8۷onjӨ>}{@3Bj ?PD` ӽ{gya4)<|pPÇٳg=2E"nݺEo%,++OZIaM [^JX1ZX$1bD[ м0AR3ΐ@Bj ?o߾E{+a I k*..^`AhBH%64)Rc~BI!BBH兒Bh U %j !5@ J 5Bj ? +)LX1RNYYY0@k&,~&>@E̙L| Mva!3@B0g04-څ` `iZ vj]Ј]XÇ{of^^E̙HIѤСCv`4h93fR%/hD.,sfRLݤP^и]XxIE̙HBy!&>_` @Jطo_AAAUUU'6./\|yL| ݊va!3:k„ EEEL>)lP^XXXxw 4(x:04,څ` @.\\A暕+W{aC#慕/>KRm.,sfB {}߿֍K 充#GٳgNNN=  )ҹh93_?߿荆|Ašy+z`ER(څ֪UyF M^ѣGݻ3Ϝ3g֭['NXQQ褰t۷osrrb/}ٟgkSa!@*%{ٳ 7X4:/&CUWWg? wnBGX2^xݻgffFo%,++OZIaM uW^Ж RC$ݻw[ м0ARK_ҠAm ۷oѢEJXdš,X' M M hcmVPR-J ͫJ }5BI!1B {=I!1BtQRRWBb?Ҕ@@(HSBiJX M )a!4%,P?Ҕ ?IXҔҔҔҔҔҔҔҔҔT8a!MHQ @Є4 h4a!@jhB&,фMX@ RF6a!&,HmBMXڄ4 h ]'?? BҵkWh|XxO׮]uG Y@jBU|#,hՄ4a!@&, Z5a!GX)kIW]v 5k_um0@',vcHW]v WR@4,={󤟮]GF6 ??_X a!hX3owW] 7@@ c:owB\ZR@s|bŊ!pPHs&,LymR՚kCX 7@ @ 1O}*77wر}QCٻwׇS)hDDV*;f3$O*,pfBHuJUUզM.o}N8 V[oz3<3##㬳z{ /p׮]ѢEAc{?WN:r)^{MƚWnkw^ v>n>&srr궹n=xfffUUUPܹsEEE6gҥ_3,LxGaÆPW Ύ:hs=G{}uY&5_o7xYgܹr;j>AAI'> Z K13[+!uW^ =Hxq%ϖb-ڨeȑy_|E 7@k&,P7,>}3?s}c`=[ӟtqo`Kߪ~[:u:p@̓v۽{??zчS5oQ>x?=A_?^uc_jUk׮!CmpFFF?LZocaa'8/[sc^}q F1 b `nsh|5aDQ4x Ġh\P#N9ǭe[3==03tQ߷zͪ.vڵ6kVu;e sWr,Ab3ve2uWUw?[#:F믿>> τٿ4UvR'Q*{XFYjmXy$c'NܵkW]]ݾ}2ouOY^LdZ1"X[~ᆻz8StToMfipڂsOhw?XIec=?N.?:/KIbiw%zWm5raaz{ bя¨wG!sm۶o߾59^o,,RUtiwJr?,:ֹ6$7@>@wԩҥKw]]]OqiJ}_gϞ^>o&m(** V>| ?+7M݌u^YݻڵkkkkraaA;mڴL[nOֳgEKJJz}G&d*vYzfwݫWd{~ +裏;Lg*dذaԧtKaa7Z;ٳϊ+ZPP}S~wg'pWm۶LA=9^o,,RUtڤJr?kg+|Zڐ  9Z/ A?oaFR@sl}_| ?[nСsiI'|K$"c[tI't1 4h?F8c]fMDXaIR O  #8o'H3^{Ûa!D… N#)&,"DXBOsc&,"DX`1f!  9ƙ rLX`h9BsW CX`1V,YR^^M KKKKJJt  9Ν;aXXZZEn",07cƌ dXXZZZTTT\\s HX`1nnnݺ >yٲe мc4O> мOL&C )..!nf',0Ov[2,4hPYY0p4;a!D9xڷo_aaa"8묳%  9رcIJet%  xαnڵ~sέr+7@@4uWՌ3v!|{-\pɒ%27@@4iq%%%7oƔ)Sjkk ?9}Aa ;vL8Q^n!,qqݺuw<b VUUAn}Oх +${\֭ۜ9sziW ԆTv*,,6jlْ\,((I=-l ]n]]ʧ=a!Ќ7@@4א[wmvBPAAh۶m6mk׮;vlN#dYMjC'#GСC2 xTC fL{ms<,vWiOD.GX4 ?-T_߾}>f׿ 6d޽{W\٥KFWda6zwo߾>رcGXImR i g wE^z)|06S"ˑvWiOD.GX4 ?? oȑ&LH[Foٳ/Reee;/窪V\H$Lے&K.+V֏?>{XؤfTguVᶙp ')`# =3ßxT>ȥ f"ª+'-w0H,\0rϞ=s0`@AA|˗tIʡCY&ʴ-iRVZտ>{AcM!mLaaHU]]}饗vر(06Sf̘Ѿ}F իWPe]%{'"#,qB a!?7@@ AXN7@@ AXN7@@ AXN7@@OX4*i4c|+V6W6'ݗh   >,l&&a4Pfk&giUTTSOq߼6pa!D0az񐇅m۶ݻwo"ݗh   2,<"ErMuuUW]եKΝ; ۆ[w=(6ŋ4SO}3eʔ={v/^Irgڵٳ3CڙW_}u;v<Ǎm۶,{`LJv`}ez$a53SG}饗*** 6Ei&]j۷og>mۭ[62K=љ-Ŗ k|.W,rڋ-S%=СCx +',h' G~7poyĈeee[lzƎaÆɓ'vi3f5jwk^I>x,δ2d͚5W\q%d 'NZsX&J2zuf &s9?qgV{+| iж[n%裏3^#o6gL[3X񹜚+KbTI"/~QUU/_tEB0p  =,,***--M.⋽{nI>}‡RٲeKr <`W^y%\^^ޣG̛7k׮qeomv6ծ] AU5-h% e vZ:3a /rr9hsj7nׯ޽ݻK/g?Y͹[Lg^s95:޾K{i/LtmΜ9o! a!D@ڵJ. ۆTOOm۶M6p 6S;Vȑ#;t^ʠ1Yrz5er$SLaa.a흩M R/S\p}߿eeuZ3hX k|.Ѱ0SWbr]vر:u۷#<","z ˓}MP`ڷ߰aClڴO>ӦM;' Vw߽}>`ǎ³K/\^n]X&S%:0S&ԇY,̥gy _SO=o}+m?iLj]4fzʱX6Ŗ{\K.B0p  >,<&0Y#GN0&rˈ#x㍆?70P={vPaʠw^l޼SNdjgjtbŊ`㳇guV`aLLŚ֫3SfaVt?ް9vZHL[3%,̴FLXo_9 ߦ2Ur?sUUU+WL$B0p  >,1cF+`,v0H,\0{gϞ9s 0`>`.lٲe7tS)S;Vjժ}ݻw=,K;vXTTTITIaa:3apw;tЫWD;mRx 諠̱·-SX f 3Ѱ0SW·i/L,_N V:t͚5B0p  >, /ի[-\{yHX"@XsW_}-[6n8jԨkI۾۴in7}Ѽy 7@@4:8k,alمg/7 .mΟ?_={~oρ   s;v%}y׮]"9͛7/_\2}:7 ?9z;vB '9^g@$̘1#q" 9j1 乒_Wl`B+++L"||/_n}o>l=`h^Bs1t$??SO=uٲe мcW^I۷ommn0p4/a!D9x2dH2)>W\\C NX`1fΜ \VVC NX`1׭[D"qg 7@K@s . H,[LWZ"ck={p 7$3fCc.\XWW 0pa!D9VS[[üjժ@sl9– u߾}_m&WvaϞ=|бcG`Bs-DRByap6\௰0p a!D9ǖФ0zkVXQXX\|ȵPc2U6/L7nʔ)}ѤI| )`BsͮQYPTTSO5\>Z1Ydžyaڰw5jԱ;z;v7@>@sl^ mݻ!Bb/0p3a!D9f{R~O>SN7tS' }_> 3τ[-ZM6Y̘1K.AUV%Wnڴiџԧ65KmƍGq|͆_q5{É"c32e{w˳t_'Lk׮nא]t]wU]]# 2$,p%lݺ5{⊊￿o߾ɕcǎRʹfz08!\AU†{OYlذ!p0p1!,0،*++O^SShuܹ3Xv)|# $^*Xڶm\پ};v*`~J:t=,l=IEEԩS?cp!,0ؼr ,,ر͛_eaam aXضm> X!J Ìa!D9fK^{I_C}b֭oE]6,lLkHnkHCO>EEŤINq ,CX`α%4_OرM7ݔ{X}}k:tիߟ6,lLiӦO?裏פ6SXaÆ#Fs17|3*,,ҥ̙3Nq ,CX`αH X!,0r䅒B@|  9(ya!Bs-M^()H%,CX`α %!a!BsC^()H!,0j䅒B 8@slMz̼H$%ӧO1!,CX`1rֿ@s3a!@n BLX{a!D98Dk"DX`1 24h_w֭zܸq?ϕ&dȐ!ڵ##<2Yn8䓯ꪧ~Z̽ ބބѣ~_jrMN{fn۶oҗo}K7̽ Ƅބ>}nȑjrͷ>Q]]sG-[?ߩS'p0^7p@s#G<·5557;vػw+W&W.Yo߾ڵ2dȣ>kWBsqVow 6VØ"cNXGtRj^7px@s?0m z @K!,0+K,)//ߦNX"&,CX`1Vvy'ya8arʡC"&,CX`1nF1pd^^ti=u@+!,07=P"顇*,,L$Æ +++!FXć"c<%1c $,CX`1D"l2]К@|  Zzαd'fO&MH$M+JIYz+a!Bs|oyVZ?|pGGXć"%kkkM|rnm۶mTp8!,h9ǭ[o߾]fܹ>6@|  wαFO>yyfϛ7_ܷo߁}@|  wqɻv@֮]{йn߷zyyƫ ,/!,h9{nBh!SNݿ|H^^;]^B/f  @4ל^qӧTXռaB >5x=۲hQW.--=ϩ˫ @|  kq֬Yhiw>o"zyDXԼPXć"gΜHаgŊI{L[C\rEy?G;i3AW\=UySkk _txgIya!D@ SV fSTTSO+׮]ۯ_z5  !5y0sCurqJ/:aX{^(,CX۰m۶{==N/rIaam,L4^駟~7&2d͚5W\q%$O81|ڔ(uehgƌFZ~;_{ovw]L- djR?͛77l7h͠|oAaio(*ޱc>ݐٸ=PoWpMИ-$f?%=ѦM,{|w>Ăv[baAÖ[L/kn庋/0{fƆ6 y:|ZX>Xӹg5F_2b @IXXZZ\^n]޽(** aTv*,,L.R@X8`W^y%\^^ޣGwy4!S 2iGA7>}4|,(e˖reeeAAA.T>8_~94vf:i+1[ktw% x r҅65,<xw +Xz+pw|:nC3+7-\~דNd?aQbUW}+"m A /aafc׮W=r֦q da.'I]M$>{3ucm\jm,sYsgǴH[CP˵XPЮњӖ֦A w槓zuktҽM^vٻwd\Δ BV /o~K/>w߽}>`ǎϢ[oذ&wn߾o}`OmReMEYK4^v6)vUVV&lh{K~c2' Ν;6mɒ%3fL={g>ûk,,<ꅎV۶mL%sv>U/ ֤-˿:/v> Ӗf=ϲ1,3ٟ,L31퓅Ao=̰<   ,={vK/TYYty|N9唴5djaMJQo#F9/{2$Iaavi'OX~}P]wǒK'pB>r XXXw^\W)*f*o!ܟ, ?owͫuRka`}Xᆍ9' /j\=E2S9֜Og;f?_;' ߢyQGٰ߫u=oo?0zG75o}ݛf᷿Kz|s?SB\  Z-,ܽ{M7ԧOvLRSS$իWǎ/#प+`!:UV裏޽9sA ^ziP[QQ…  ,ܳgOP +֐6)펲FAO?(,,L$AU3L]|~:tNGpNï&[/zA\xq]wǒK3fh߾}ö5zLXXOS}n~Fz?8?31Tƌ(M7]jݙg~qʔkѻOtnf 3U?=5^=E2I9֜7 /p|뷵Xңo g;ajhdӆu=^pٯ{2N6m~:_pSО,o7wٻ7S7AS_[X%2 ES:5)a!@.yo߾=܇ /˱FzREwLkjoosN9s:x K۝ݣSW]5ìO޺trB /\}9z,ɢaAm}]ӳ*~䫻wOt9$"m kNmWώ6M=昂zqio,,3w} ~?"{:QWO{c=&x35>虩_ڦM;&hjqU/5Z[Zr̶mK5)a!@.B꫷lٲqQF]s5%̛7?s#y*{޽{臸IBs5k0{~\rIeec+{s*,l*ֽ}Yg}Ku0a!D@s9.XB-g}s*,lo=ѹgYǍ:DXJXć"_}UVrE͘1c9=KXp88uTYYḟTX%,hMBfs\d%:Bm۶̇TX%,hMBfs̙ܿ3%:nݺpƒ IXмsO~zaa #a!D!s|V^-@"VN~%KoSҒh @9)S͛7q?;w<ü0 W\9th @9۷{「#bh?#F8p`2/LK.ѣGqqqn&@9{ߖCW.--u x衇˃Kv5X(++ $BC;8k,{nD QWWWTTTXX8xD"ѵkaÆ3&r7@  ̙3FQ\'}Gs Dn8-[Iyui̘1BzKwe6_[1 !Vv& 0`@mmmn&@X\xw¼C5)bܹnA+#GL^xa0Eqha!D@T{WPP\޳gϔ)Sz١C/"{]t?~A?|޽ݛ\, 6׶Ei&^{챡C-8pn4/WNW]uUΝ; ۰ŋ sꩧY*o}yWM6߼ysK/7#RdoCp, Xߵk|Svر[nO>dʳNyWǏl{Ǐ7n۶mY˃%`sVXVZDbذaeeeQDXp&L|;cƌQF_~ǎ_ׯoyĈeee[l˲NVKYzaòlRm~2i˲I"/~QUU/_tEᶣG`aҤIO?o ˏ;vÆ 'O>ӲTh㯼o=XX`Av~$gҴmkH/|׮]wq1sW$ga g?ѡ!CYw *K'NVX1cDtha!D@T~0H$6lؐ\?`q=z5|-Sd3o޼|+5^xayLkƍKn̙[o۶4nݺ޽{'[lI.WVVOX?#dsι=`9脒aa6f9۷oO>RO}*m g?iڵ0vj*| T]w]0-[,7@  "d޽{_/~˗/O/((8m۶mӦM7]vUUU*T8YΝ;?OoDͲI_ek׎;SN}}Gmv A?u}L[y,**СCp;v 3=,l2md_n@^>rؓ!tP>m[e*cB UpM$DX,|7t{2Lշo߆Of*V~EM>}ڴi_ײo%-˾޽{W\?^J.da]׫<Ɵ}ٷvۙg,q9So1XXXoFOAR1A}۷ovnOʺuRק-cBD"݁I \pAfϞ=z^z28;/Y[n1bo ^ 0&Yږi?瞫Zre"=묳?wgM0ټ#GN0!{P\я~,O>=X3gNO80ܼ8<)A=LsVX#,CXG?,ٳgΜ9 (((>|>,{Db…ɕ ݻ'¯ʹIed'tRrСk֬ ?~^:vxeUWW~yWvD~+f.m4^ *y>X~U>cƌٷm4KXi/jժ}ݻwʇ냳p饗g(x-cBa!B< W$IOB >Ba!ʼy܂ @|  YӞ={nv !a!BC;` 1>nACB >vW_]j܈1c݂ @|  ԩSFMuuY @|  %K֯_/="Vm۶@< @9Ϝ9SzD|lݺu…n>[B >0O򗿔!'NkgB >y2_$qTɓy ΄@|  dα'?IyN8QR @՜ŋ-ZT]]-XpRSS|ܹ9a!D@9ܹ[o]po)d"6n\%i&w IXć" ?kjjVX1o޼sΡ$ BK78gTB > 'h{a!D98Dk"DX`1΄@s3a!@n BLX{a!D98Dk"DX`1΄@s?0m z @K!,0+K,)//ߦNX"&,CX`1Vv9dȐ0/ 'KJJZ[[Za!D9Ǹ5jyarzҥ={,..9@Xć"cܬZ*H <iȑɰ /,..!FXć"cj^:uO?-:"jjj,Y2gΜ:7"a!BC2x=?[ou7VUUA| @ҥKy)$UTTL8B ><#򗿔A ̙v1!,CXКs555f͒ ACs϶mܑ @|  Zsqv AC555 @Xć"kkkΝ+L̙~7%8 {U} @] UJe~#U[O튀}xVm]a{Ч>xjZ\ERQU"`_u=u-bP 7A"O'O{7d2wsνw>n$@  26XQQQYY)A*7o~g] 牅@  26X^^Az .tQ'C, s^f޺b.zb! C,؜… ,%UUU_W tꩧN%'$T-nj3&-^W| i6K:\{*B !@dg, -[l߾}gƌͻ;#Gڵ+[O9vؚ5k xm˕daCy{N>w;ÇoQTc4CҍS T{$8PMyMu-0+M^ھXF,XUpҤI֭ٻw . ~РAW0}DY~ȑ#G ,2eʶm>K.X)^z/XWWf͚X,x?߱G?Q⦛nJ='?pDJsܤMܹs'Nm?"j̓P{HqjϘ%ޔ`sS@1LJש{*B !@dU,\~ɓO9唁N>7ވ_vȑ#O:餡C'̱cNJ>G 65jTAA9㏷ S=G?~|tӦM.Z3߿5\S__5]w 2UKO;~R7ASm|ȑXlɒ%kb!D@9VWWr-~)[v!"C,9džyWOZpaEEb!D@9VVVvmXUU^{mѢEohhp <$C,Ȇ9C=C?P9 BĿ瞊F[b!?Bs#NXk@Xk@Xk@Xk@Xk@Xk@Xk@Ǜ?l1atb!D9Ǽ|֕@  9敚q%zabºt5b!D9|3yѣG{a|zʕEEEeee B ڵkcرc+W<8Xرcb!D9|T\\\XX8vX,6x|3SN52!C,0瘇nX,6dȐ؇.UV !@sC555R8f̘QF566 !@sO&M/}Keee cB ڵk cgc1b!?Bs8M:hdX"c޺bتU @&@  97|3;vPdX"c~:~mv}u]MMM cB P { 2I,X`14/qz!@&@  9֥P/0b!D9$C,0'җB cB A{JazacccEEED Nb!?Bs90T/\nWJ ~b!?Bs-l)l644|{6lX, U  !@sa+zuLй;aB sG){a}}}⣄q_|Rab!?Bs[n9pfٲe1:@  9檺;Så~oVYgu9甔b!C;  X`1}^/]555mڴ+>|__~p'@sm-Jas5552d̘1z!s^^&?hկ~T/ )"c>h/lO)lf 2-D{zaRiG^ йBsy%U/T tb!D9|Ӻ*~pt"cj B?X`1?{ammR7@  9歺X, EBs,?X`1~pt"c> :b!D9|& uBsL,눅X7@  93n#@sgb!]G,0B?X`1~pt" >dɒ%b1-l "  OX DXDXpر#_b1Eo0@ Y@ X@ X@ X@ X@ X@ X@ Ў=ƍ,Yk( X,fq1YE,B׏)X 9Nd- .]oF=;:  ,YD,Bb!Z<c9B7 t-=:qg)ߞ t3@h'z:%?b.=Љ'뮳:O>C1c~ @C B 쉅xVN|߼+|?O裏~wXa@C B e˖ >N ]|y/_ӟt޽Gzvi_}4OuФ, wg|Æ 7o^SSS|}uuO}Sr>M6޽ĉ~lhhhcw}Ǐ/((0aK/jժ#G/½{~9=;6l={v~&Mx)))ٲeKWځa<묳"8k_kϗ&8["Rg)B' \ @h팅7SO%>\pA|sڵkCM/| JΈ#˧zjŞ6f̘/'O޾}{[^[޽;{xد_;pW\q~^zR}Kuuu'6 7nܘ҆ BDb!d^a/444~ʾ}.O}S׫W4o' C={ѣG=|W~СC|3Y~}wI&߸ř9\hI&}EG 8k֬s=_0N5Vi6;w;h ^B_B \ @h / I+ה)Sn455OJU޽{7o{-(//1cFp‹/|'N,̝;׿u[Iõ2ä{qu0RmZ`7xc2 K,rl א[.𩧞J)S<O|>/o޼bap￿׵wN;-tgnٲ%xn~;h}X};+5rB(B W!b!Z;cO>YTTl6lHaȐ!o]v͘1#sYxW_}uر _e+W#o']}՝5 7nXRR /4667V # \ @hIca ?._N***>O>yر=X|s=ꯊΊl/O|6__/w_~޽{OyO9Ç'֤8x-%%%zJ1: l|eȐ!#G[?v0vV, ,[3<餓FCGW  \ @hy2ѳqo~x饗ƌ_J!tp @ aǏwtUWڵ/\ZZZ^^Bg t-'zWO|bӦM[r3f̘ŋ{S {HXf|:X눅@h7n>tVf͚B d'mɒ%ԔB\b!B$d!i@ d'D@&{HXf B=$]G,B3Ib!#RǏoE,lU|b!.|汰!,b!.USS3~D/L{!,b!6qq{a<>3gqFYYCЉB 4=]mŊXl„ 3<3t`aǎp @' Lt#FL0! :tԨQSN52{H:Xf obѣG>4eʔUV=$K,B3{S .\Ygώb͋7n ߓ=$@ LYnǎ[h+r<֮]e˖;ߟPdD͛zd'|2x{C%B 4=@vڻwٳۧe{gݺuc=$@,B3dٳg744qQ??t;D~8p@z^ !^b! w[~9p n$O~-?o`p @7 LYe+V";= !Fb! ܳgQ6lm !.b! }ݒ[t544Mn$]w%E=6tDU'Ʈի [|syb!@h&zf,W:hРSO=uׯn,,..~g[lХ0%?ocp @w LYXxEp XnݤI {yرL<p B 4=@Vi3СC744 :tРA-|צO޿}^ve{M4x`̘1w֭[t믿>駟,;vOH£GzEEEꪫjkk7lPZZѣWXo߾O~9r$xoج" X?x=v[ O{Hl&J .obO~'رk7nܦM>;|߾1lڴiv3g矟&M2e.ٳgw?:Ο?;wܿW^9k֬X,#ս+3f;wnO=ԩSn4R"ګIDATk=p>}/}b! @h&zf,9sfaaa߾}⊷z+~ذaI? pYVUU_>|pAAAW\\\YY_QRRұ#FzW3Έ/27L|O<_ww>cFyT8THzbb!@h&zX8x`>}Ço9e˖۷ۿ מ꓅퉅#GܵkW~ر5k 4(?~HY=5!B=$@D@h&zf,4iҺujjj .;wĉ?4  Zzu}}}~?я08M7я؞X`۶m;|ppK/_|n͚5X,}slܸ1f vxJC{H LYX~ɓ'r)>}o_ȑXlɒ%k׮9rI'4tº뮻 _=Q؞Xx`F*((8sG}tM6%c'<+f?mk~VJ\ /1/V,C JgϞǎ˶X:̙~/V,C JXf_AN?`!x{-,,ѣG=<cƌ)((8n_[o_~W]uUmmmrذaj{`WoVm۶Ç9֟,L JKK3=z+;?q»{߿dm(:p !b! +++2e]xᅳgNls饗^O6m׮]s9ϟ?y;w߿+5kV[tix޽{g?/ҜUXtX,#ս+3f̈ܳgivȑ7|6bXDUB֭[KJJۼ멞^UU_>|pAAA|yԨQ8`'g/~7x=X\QQ*&y`Ȑ!of]?߅z`M XYZZiӦ`w{3g߿qq%KZ^^C "+E#'={H,$ȤX,ftD@&{HXf B=$]G,B3Ib!#$p @ LdX눅@h&z2I,CuB 4=]- B,B3Х/_^]]x<VVVVTT"=$E,B3Хjjj&L腉Xϗ666"=$E,B3&N8nܸx/gy!Db!rX,|a3 :4XرcCЉB 4=]hĈ&LbC;vԩS %Ȁ3gbѣG>tZʰ!\b! x),**9rdccaCйB 4=~6²2Ӊ@h&z2cʕXXZZcӉ@h&z2(M:h! b!9sf,[jCB 4=@ill뮻do9͛7/ mѢEMMM&rIccwQ[[{<[]6;OlϞ=wy^4D3f9p ub! 7(z!DBp @N) ĉ@h&zHS B=$ b! җիW g1KzavTTTO !.b! Laqq>֍y^cǎ|;ƍ !Fb! G{yر|]z40xV\yb38C)t;D9)k&xO8Do{-,,ѣG{)7o`3<󩧞ٽ{)SN>?A=]6鹵ޠ׭[wĿTPP,kIa%_[|?sׯ_' % N&X,6l0C B 4=@?8p78mڴW_}u<µ0cƌ￿'7n\/=z7ͨQp n~ܲ ~Ç'=>bp} w]w>tP%Ҥ/!qUV|r`yȑ|apG cR!b!ZL2a'iVSS,߿_~ +[0`@Szz\nݸq`>[.XxzZocƌٶm[po=ĉ7 /'6H!tb!ZgB# dF]]: T߿[obeaa~&_xe]v75Ix~+X/fzΝ;c0^ ԴiӦ+bذagu^Q'M,=y۵kĉoYwW3|+O~oΜ9޽ /<餓~0nz'_o,o۶-oSO=50; [jjj4,,, !B\"@DaiJaB⃆&L !B\"@t^ Y|yDߙ-b!@. B ,)@tD,B B 7rb!@v B J!9 ;@hb!B䍜XB 4zRdFN,Nb!XP)2s#'d'M,rL]]ݼyd'6|XKB 4 \0ܸ.I,B 2ȍXB 4 \0ܸ.I,B 2ȍXB 4 ;f̘?'N2dHuuu}}e]vꩧN02Պq{رW6@W\2 @ BLj~|x޽ǍSOFKKӉ@hb!@&`c׮]FȒR&!tb!XI/W^+W4,@\2| @ BLrr$d'M,$L 7Kb!@v BLrr$d'M,$L 7Kb!@v BLrr$d'M,$L 7Kb!@v BLrr$d'M,RǏOslU rX&t˗WWW'`VVVVTT"{D,B TMMرc0q\reiiicc!XKB 4M$ @hb!D/OLz7gϞ]WWD rX&B??@Ξ= =b!@. Bk>䓚 t ]1b!@. B[_r޽H @hb!Dży8 @jhh;\%b!@. BƟ: d'N.3B\" " d͛7?쳮K  @hb!DByyBc…K  @hb!D… ;\5=tNPV['L:BrXKB 4"pڵǏݻYgrLٜ:vniKÒUUU_W tꩧNtv] .3B\" 퉅[lԧ>zlݺ_r|0>؞Xuf]t 7P]]tݺu&Mķ&Ն'}ݮK  @hb!DB{bᗾ%K$m$<1c ;M[=z[o-**ׯUW]U[[_PVV6tA-ZEhټy,XĴ,Z]Gyo2駟n^{ӧ.ۻwo|}}}̙3&j+lذ4X9z+V$}EISof@ZRСCi^{8,^sh3x9{キGy#R*þ}>iJ/>| Y؞ G3k֬'xJ:4رcmgMta߂XH> rX&B$og?k,9r]Zo?|,ܽ{a0wR%T,,))Ylپ}{'IT۷٨;f͚A%}E6=)聃ӧ' m_~<y#~޽{>|8\UU /B\" 퉅[l9{챃nݺ/Oc,X0eʔm۶>|8\r%sΝ8q9rmݖ& 80%T,4hի냳>}zbGl>>m6K/_[fMpeK:6m{SJsI&[f޽/-++ %7 yxFzg ?9sܹ38I}| M,HhO, Yf{7n?=z|ԨQs?_ȑ%KxVUUѣ 6?S8}7xsgΜٿl: ;vHζ'nݺ N F}$}BXKB 4"0KgyqfƂ \b!@. B0|;UUUɓX X&B$GMaa>; .t]"gD,B !|* ׮]D rX&B$:tH`ҥ K  @hb!DܹsE~+D,%b!XQQYY_Js=ӮH @hb!DȼyjkkFwqk9F,%b!Xp- 6--[c"rXKB 4; !6o {B\"9sH!֯_j*rXKB 4;-@W-//p!WD,B !*++Vts}/^<rXKB 4СC==S `wχ***]dyb!@. BLrr$d'M,$L 7Kb!@v BLrr$d'M,$L 7Kb!@v BLrr$d'M,$L 7Kb!@v BLrr$d'M,RǏOslU rX&t˗WWW'`VVVVTT"{D,B TMMرc0q\jUiiicc!XKB 4]tE#FsҥEEEeeevb!@. BSOQFUWW K.|888ء_N srr 8WۯtBaɓ,Y/Z!4j`ԨQ&Ll>lPPPdddnn2;;;::?>>~޽N ج3ꫯVQI/5 }]bbOѣGWTTha! a! xڟ^xeL^N:k-"u:BBO~ҹs>eJiO/^_ \dIhhh^vڕ(~ܳgj/^PfLgMy={E;w뮻իWrLLjϟ_UUoN0Wa_|EllcPPЁ]v _+iI'&] QϜ9ŋM7zcǎ'xB>jwY$/tj@TUUVpp]ΝVU,ܸq~Y.PmeeXCZg}{f͚o>ys+iɖJG-H ԩ{/_8-**b2j^6GX@5Bx-`ZWZeZ)}Ӱ`0|'aW\ٳ?~_XUJ ,l6Ն׮]3 LWpQ ,m",a!Iq'/3{Gr_qŢ"=ՆϿrǐbܹs^|ӧO_~ rit?,Tu͆Ǐ_`8~ٰ\|y8 @ FX`Ś LkѢEscyyO?cǎ/ 6lm޼{9%%Ejƍqit?,Tu͆O2d8z?)I!(09B;$h 7?m}t5?0I!(09B;$h%>ܹs||7|CR. G!mj& Z]/I!(09B;$h$ a!ha! LBBpQj& y!I!(݇j7o$"/$)BBCKKKNb2"y!I!(MPRYYy;L4x` )/|,䢐;\,c티jSKy4IL&SXXXrr2f鑑CEb^sa! a! 9f`0DDDIb2ďb(744T\ĵbDEEqQBBs􈈈J͋BBBCCCEAJ Fϴ;BB£V\),yGvIo2O?|Q0 7o[a! a! Qc744-K}rQBBӦN*),99_6}t /!Z@XzBX@5Bxl0`$tEaܸqc\4jƸ81IƏOoqQ6l'T#,\RL;w(. 7o+4j kkk?5k֬FpB1I/_NWtPk/?qTqQjZ fsjjoˣ:C]6--'n'TfXx鴴 56-;;;==S(|* LXzBX@5 ۶mxCв䚚΢M\30a! a!մرC4NNNn-dfū^>[~襓Ktsn͍a!ha!4ٳg޽t[[ȋW[|唔y TAOg6PM;afKOO?c.++k>a!}zCy!* ܚ9B&Bi',4UUUt,6---5<,z(/R[s#GXDX@5 YYYtDk׮uV yy",D^ȥ ;Fj M&ɓ'y:_ϟ6 TAg6PM#aaff&ך5kZOXSaa\3pkn @ wg4U;rrr U5i nQ7}[#mvg턅+4U_쉉:mzRk p hsT@aaw?x׈a4믿߿C -nCBOrzkgw^>z?9!ӿnr>iU^JҥKhhԩS[ȣ(֜[s#GXDX@5B%^:uoARRR^uxǟ,@ǫWK;ˍ'FH [P2yX8;>׽ݷn_p~_$}w7 ghM ~~~bCܿ`k =YVyׯ秦СC:}Սa!ha!_~ڵkjkkΝҫW/ ~֟:u*)))(({'Ot钴^0{l>22rݺuJOilݺuÇ?znɒ% 1cFuuXuIp??b|規H>rɃ>;ԠtrJG#Q`ƍACl䰰0;1{IʋKeQ;t8\実Sfwt,Z0.. 8 w4ߊt0==h/JaC ޷?[^{5E3JJp}Y)WWֺG;O3 KPX?oxٛ':j +..n۶m.ND.Nb7YN.*b}hhhݻSSSE}9paaCa!t=baѢE> f˯̙3 ./I SRRF!7gϞxg͛'VΙ3gÆ baݺuꫯ8̦юʅ=z\~ݡ(ҎD'JaK9d֬Y{Iϟ?ܸqw3v*+uXuNX`\,柆RռU:T׉_{_.v( v߾ػ}!!=ł_=:u|zQk룣{OY\aOs7kFH i,Yt^~Q84guXXo???{<z@wwѼ(h瞛Ok-͌O ۱3w lXbaAA=P4`k?Lu۩=l7NŚ^kvvԛ*qb{~%.j=qĴi\\*On^IcUUU6m֭ػ)Nj2TN+)S4A2JG#QܹsN(**gJJŁ8qBZ nJiJ-w)u]S:{-7 5yڰ~xԴ:XtX_yx=؈e~#OH?̛HSSIP*ΓJp?D|{8O?N,5M•=geZ}lNxՕ#+oUTt'.擅!!=Ec׈{O] iߐ̬cx?m7NϘԛoRQy7TW],_fo]h3,>]tqU>}222=8Uڟݼf9mFyy]wE8GX؆6GX@vE|QS׺v*iZeX㴀8QFJtiyo:N:#""ž*++Ě~UN+6oܴWfw$ (}!}UR+˟N;U~[VMrgCǢԙnP*dٲeC>?qA/,9rP *\lrW3aaeQ;a;6ٲ՘XxQ["-.?gw_7Ǿ}CݘZQ;s3,OwYj1iKD_(>(-WX(]8=Lpх3Dz22TFi}gϞ'Mg'"JSko9i(-4j(,:rÇ/wyqQ-, [l)//qFEECcrǎS6-/_|̘1bƍs]mvV~=zBGt.&v|^:y9}Ob?-3ݒfdaEwLdp lјfÆ̃?n喅]vqx*O:u$Ir%rl̘zJh8^9 ?E7oeO=5{cb"8ua7^udӞ tSjd )/wQ,n>z SSS'OW!!!.NDn*U] =w hsT@aŋycǎYVX^lرck3fLo{s5j!!!999gΜIJJ"7B0==]lrѽ&L֯]{V+WjB߿rZҁ7{JGmb1#G=~Ty@ nB-1bDJJJuuٳgEv]^E@Ϟ=,?ԭ~͑{""<|ܹbmZbqZ./7)z-xP.]:˟4,pd{oey;O:kM禸 .}wȝD.S]o]BSaf+((HMM o&N(VkYnn8yTur8s',$,=$Pׯ__xqTTwɒ%6M~2+++<<<((h֬Ygxpw7ψAbf,'%}g6Bŋ_o̘,y]Z߻}w˭.~w ,.v쇩: W=gUYhLyts6q=u:B=-/ ~,p߰TT,Jj_@Mo_4BO6񊏏ywcS^ 턅|2uT忣]v 4H&$$f'"7OYgw9Bu}5+ȑ#K~>;ܴiPǿmܣ=%>ڑi'Ⱦs>'`3Vo~BHHO r0..k.ݘ*5곢l^4J .Z/ZXX^N7Wڣ_7?Cr\^gxQ?i7zQf돥W -@ g??&JxWYݩS5JHXa! Qk%%%ΝKLL|9MYfM333Za.l/BzFj 333 Zzz`fΜYSSñ{",  peeetD~i yBX@5W^x֯_ڵ,,Ka… 'O̙M999ɤIRRR PM#aۂ@G$x[OXKOaw}\\\,^B.]BCCNj/כ}EDD|WŚ.h< .TYYIXpa!մZ,\rc9xln>a!/=W9sCt=z:t^N6SgΘ1ىGXGX@5턅ªUjjjH_y y+,LLL4LJ{8q\[[;wܐ^z񣴾nɒ% 1cFuu~ qqq۶msWmݺuÏ=bG?*цPݻSSSs׍tž~6Piƍ C=J}K/r 6-999,,Lt(bGoSD{w>yK.3f a!}TTXh/^,%:͛7?33xy뵢s՝gϞeeeJaaAA+-'''=> F111ٳ<̼yR['NL6i7iҤꔔ#FޑįfϞ]UUiӦnݺ+!C\7Ri}xaCO8_]ǍW|ǘ1c6oҥ#GCVRR2k֬fwԚvǛ暚˗/޶8#,j RH^h8o|ᇜE; truF#"",|Hi966ɓrPԷo_iO>EEE.RyGw:+//_뮻\7Ri}[.?wzĉҲ͋DYiGi* xڵ]GX@5s'/\x1G h޽{w)>' UœoZe ~:ѩS'???믿4iRppptt={\n?*HmgHm6s_E8m}ΎԶS܆5*00P,S!OZj-{͛?:lF1//HК+W]d2qq; /^Rjjɓ]?SXXT}}}nnnHHaҎkYXHj%/8lTұf,vd[N1([l)//qFEE}1a!ZFOvvvii{LRQUZZ͛/^~8uԺu NXz! 2AAA|~[*QF͟?_Z.?~F\'L 8qjˮAҎz)ҲPJK^pP~a; ǎ4,\lȑ#Ϝ9N+le;CBBrrrjkk싉锑AXpa!ZFOee?sG=&2p6lիWoߞy;$:.d2_7б_pANOS9rD.iZ̙ e]]]FFFlll@@СCw-ߵkנAʄ~X#أG9YaR#֫ݗడRjB /b```xxի~)z- n+le;bbbD3Ćz1t ,j-~g鑑C{Lo߾3f̠WT~%x;ah"F}G fDJIIqyvF6Po}L޽{[,(PPP@)Ba!:^{ܹsz>5kִ5j-~1!!!>>>44wRR8tPN233t#==`0w}3gά!,=$ ֚7zF/+44ߧKa!.''lД'Nٳ5jkʛ!,Zk詬8p`xx544Хp@Gg֯_O:M[37m$K,=$s 7zO>yd),1c %t -- !d+gСC5:..!,Z+1cǎ+,((?TVVnܸ k׮SN>0!!A__y BF=Cҙp>lݺU\:˗/_S(:t:_;dȐz(..6GX@5Bxܺuk֭˖-˫&ǂ甕m۶mɒ%j;>}bkl,&sjjC88B a!ha!|3,lhhXbŮ]H?&)55",p6PK.%''*Al6ڵkM&8DX ,m", ,lI~/8 B a!ha!|-,\xqUU1|Dvv6_a@ u0MToݿ?|ҥKo߾͹`8 @ SaҥKk}]u4PAXDX@5 +++?C#˗s):B&BNXm۶2r#{Z,NwPAXDX@5 jkk7nv`8 @ FX sm[hajYFO>}k!C]Jvد٭Z4PAXDX@5¦yw}y핱 ݱvZNwPAXDX@5By̕+W庺%K/00pƌz͖庰ÑqMڶqFb/OHH-۶mhWpp/|5{Ν+߫W/ ~oݺuÇ=zE6>**ɓb… brĎ64ۺ>44TݻSSSs.t/Msԩ$m'O|%iٳgbJ[uy%,Q`8 @ FX4,,//?>(h4Ϟ=[QQ3̛7OZtґ#G̚5uax`Қ} 2&m8qD lZO81m4yѣG_C,,ZHZ,G,X 4iRaaauuuJJʈ#\Tl̙an:w}WZ~W] 61.`UUU6m֭+"-Kдrׅ],>>l6\|YT2sLi… ;_J( u0MT#,l8Bi}lllPZZڷo_O)ž̩SJkz)yDMvܹfҧO"m-|رHi9""B^/D^/ʗH555N+o{쑒qƽO>X`2\NNXb˥G*..z2 Ҳmw}y7%,Q`8 @ FX>?ûvtSN~~~_ijuDTyee=s ~tC/u_=iҤ={ Mo^Vlkjj"""5 >m]f EYF.ТΗR*f: B a!ha! fBϟ rX2BrӦM[r+~iכH\oR__+/o{qibd];TN˗3F,?cbyܸqKزafMB84F-[oܸQQQ!o.˃r1N˻Y-a!PAXDX@5Bhʔ)җ=555&L Xlȑ#Ϝ9cJӿ 6q6M&N7X\1(cǎo̘1w5j:kv}ժUbyʕb9##á={ڰafMB84&$$$''V̓$ydyPD=znVKX ,p6PP)4ڻw< 222bcc{nz- Jr?VTimSd׮] +fmVVVxxxPPЬYjkkO3gN;ĂJAiӧE%Gˇ=zmv$,TڋCcbbbv&(KbD"""i( u0MT#,=w$a!M!,p6P ## ,p6PwtB&Ͷ~zNwPAXDX@5 7lP]]Mn$<v`8 @ ;aa~~~^^|ЪUn߾v`8 @ ;a|rr#իWs):B&BTXm۶gϒ{.]\@S u0MTGeee֭D@k u0MTP8p޽{ɐ ,X B a!ha!|-,y3gΐ$A_Uh"Y`8 @ aaccƍ:D H haj>J{ׯ,AOl6ۿ˿ddd444p~Y:B&BlX(TVV._|Æ EEE=9:sέ_>--… hajJl6[NNNc$Lsp6Pf6o. w:B&Bp;} a!ha! +VdΝt;} a!ha! O>YfjYp$˗//us ,m",avԝ<ԡC֮]VVV|j8 @ FXONKK;xMt@6-;;;== 9p6Pm۶> r芊kjj/ a!ha! ׎;Cuuurr2w0MT#,lG{ٻw/Ξ/LOOgnwB&B͖N?eeepAAXDX@5b4f1;}a!ha! ECCCVV^]֭[sAAXDX@5va2N|ѣG]Tf]촰Rl6[rrrXX8.&,AAXDX@5vNX|Μ9fsMM˗_y啙3g<2dX0gϞxg͛4B8qbqq&b?czĉiӦێ=baѢEdy>`I SRRFr7ftґ#G̚5Eo@+q砃 ,m",aap',,--}饗 Cݟ~i9ϳWUU% ̩SJ+z)ؓ'Oʵiv9GM铑QTT䰭b;)-GDD=*KJJ嚚x5;-Լ($6mBh%t0MT#,ly9RQ ֨QrGΝ{bA(VtSN~~~_.6'Mgy[*-iY,8]?:ƻJٯ9mBh%t0MT#,lBʕ+ݺu###lR^^~ƍ 96mʕ+WXOKkbbb ]zޤ>777$$DҲbqBv\UUJ͋ndRow>>MT#,lF*++/]?ϥ!!!999gΜIJJS}_ѣG?~F  68q7|cZssspێ;V1c_o_ (b#=jPy˖-9rU,TmBLJjp߾}w}wϞ=Ο?/ˋڵkXXXFFZCXѺ:Q 666 `Сwn6,Td׮] +fmVVVxxxPPЬYjkk3gN;ĂٞJU5^UXԼׯ[A׻mBLJjBǐjS/#,=MT#,l˸sp6P]/AAXDX@5va!ha! ۅw6|򯭪 ;}a!ha! ۅB7EXAAXDX@5vAXHX; a!ha! ۅ;afKNN ʒV:u*)))(({'Ot钋bdn:`Ç=zTZ_WWdɒ~Θ1ޯ]6{lu!Ďvy/؋OHH폋۶m',-AAXDX@5vNXtґ#G̚5KZo6kjj._+̜9Ea1&M*,,NII1bh4&&&={g7o^ӽ/\pxGP (&W+-Z亼Zj=qĴio?a!hw:B&B w¨(Y@ bdKJJ嚚i966ɓriii߾}ViXeQӏou(&W{1铑QTTd_q砃 ,m",aap',Z+H5*00PΝ;(?tSN~~~_{ J pؗbՊ._O4)888::zϞ=; a!ha! ۅ;aatttӇ###lR^^~ƍ 9sZX),),,twǏˏ*5ϝvZ"?YT^R__~ @˸sp6P].[lȑg̐Z>))I՜V G}1&Ltcǎ\PV={S@Ă\1c,Xĉ՚+',-AAXDX@5vNXxz`0]~2///&&k׮aaar洰RXXWW' :tݻ^ *5h4ѣbb!+++<<\/,..%$)hj8 @ FX }l-[Ѝ\5un{H@#,a!aÆPq2d??f̘ÇoڴVl-N ]&=Y(4hЈ#.d%66 @O FXHIabb>;{lq"kZ[JIaCCTUccl>}zLLȑ# xa! a! };ww(jmZeyCRhRz0,,la! a! M飄N ]$2AÄBmjWn߾飄Nګ2(a! a! C & @O :@`Uh|2"AU[~@)iuuUZVeXRTOX"+[mQE|@,=Ιdd&N͝;όsLB̩*@6 HXQzRd 9 V*@ HX{Rd9 # B ͉XL,h4v &L*b!@s")  hXB eb!@c2ac^ XL,hL&LyKb!@v Ʉ 4yI,Nb!2101/I,R&4&&<% ;@BdǼ$d'HXИL@B$)  hXB eb!@cdz @ډ@B=$i') hXL,ICvb!2&y @ډ@B=$i') hXL,ICvb!2&y @ډ@B=$i') hXL,ICvb!tB=dXB@c !H$C9b!2 =I, sB ezXx @戅@,4& YhLb!=$#)ИB{H2G,Rf1dXB@c !H$C9b!Bٳ_ "AݣXB eX@D"h6Bl#)ۿ4H$bf#x'4@V , sB&9b!@V  dXB2G,jb!#d5  I{gϞ<N$B"hB^8\D $/4X!$!4\Hs ͞=[,  КxJ<,#dX!xpLsL3.L@B*kտ+ ]/ nw'BN@cazCFb!$31#@$ ?bSO߿M6z5\gϞ6m4r1bG}Tm&mܹs-^tWN8k׮{Ç*O>[ngX951#@#uY??W_}UW]U>}/_׿ucǎ=ztXrepܲe%\2eʔ$ʃҥK0 $??m-%BNM@~ga[oŮk׮O>8psU[;Z;Sэ/x͚5|gq%K 4 !&F~Bz|>W۶mws)D+[m&mo[D7:tpZl٢E;^<}۷vƎ/7g_,d&F~BzD ǍcǎÇ駵\ƫ'Sg}ӪU?08Oܿ;c' of싅ԏX!X/}O>nX"]O޵kWo;`?ϓyws=>=V3EEEUn£b!$71#@1s9f:xoѳgt«ꫯ+++/_~Yg~׾}{lϞ=w~g\,\ݺu?~ AO_lY՛e)<*Br#P?b!@c[o}ϟ3gNb={SN9M6{ꩧ|_җڵk7dȐ,zɒ%XZZڧO֭[~>hk)<*Br#P?b!5f\ `bL  M w)<*2I,&~4A,lX&F$Bxr $@<sرcs !B,={1T X b!OV/ȳ/BBH Bx. #@Xeb! sBkL,#dX!`M<8p bXX`b4b!52o޼-[.իW"01@s{녱XӧE,&kzXXVV_\\lpi$@X5HW^[l 6򂍵k01@sÇt钟߫WH$׷oߡC01@zsИ1c"HAAAs_|  Bk9OSO +++  Bk⹩Xx%01@ډsӯ~N:E"}]րN,&>ܥKH$2tP&FBxD,X`( @xeeo~oڴiSswD&O?xSO= B\['OuTыٳgOCXm0^(@Z{M?iUt4\#KKKr2Y/KIII_{ SBB, -ZԳg?>'hK/q u_ {FȖMqbaXXXd/  -BJx;v,\0^reㄨ &|M ~d˖-߼c3R}}e˖(Y-Zt҉_Yw1f5iԤq>: b!X!pĈ3gΌ$Yƚo߾'mk0gΜ-Z|[n}]pc>s~`㣏>=ztvN?Yf%sGc|aÆsI']y啱=4sѣG֭?UVU9`Ŋ:u6mZۉݻwx;v7_{oS%%ssbF#@x,<b~B.S{s:3x-[N;6ln[sxr>ãۧ~ի۫VJK;vK2n޼9s֭[t)xwD BII/T?X;^{-vu†T׷=dV|R{n0>}z~yoڱci r$rJJ7db~* ]t㷮۷zC|'ؘtmB,Ž;ޜZn}Zl٢E79IDAT7|G}4SXXs*;lذVZڵ+l$sG5a$m6IDz|`\qLjOzGccԴGTI{9_x~u0,v [~ ӹs$XP~X2O^э=v]|~pûn?ݺ勅mBYX;  `ȷyXs*,,\~}k{s=UܳgO6mc,|cxK|`p;=жm> {ョ]Nj9,X8`ws'a.vw^|\W5s_x ~xg7}\쾆-~g%|E,l#@1W\qEٳgr-w_>@㪥\;Vlrb3ݻwsΤ:caE'ž}{hcMtS%3'm{Rj,\~Y~|{< Jb=ٖf{~rob6m$xO?}7RI2M, cy睓O>yӦMiIS|g{tፅ%%%~(~k!U,"@R-[9sDXo߾￿ޯ=P,B&>k֬ zXb?_מX(b!@^7/^{QSL9tP_{baib!@^~]w^jSNmkO, Bٯϛ7oݺu)ynڐX(b!@_OL~ٳg7'X! k}zee9b!X!kk۷og͚~ze&M{ ى2D,5{Θ1cH$=x@2^ L b!5\D  CBkL,#dX!`M<`b  2L9b!5\&2G,&B01@戅sX&FBxN9p@*oh(!Bk9e޼y[l]W.++3D`bt  ۷; cgӧOee!#X!`M<3 ,??H,&kJKK#H^llk׮58`b4  Çw%??W^H$//o߾C52`b  1cD" `&FH/Bxھ}{OvZXXXYYiX%@XM .؀N,&JKK;uDvZ&FH;Bxn:|p.]"СC Bk9k̘1HdL b!@+++w}ӦMJ?>L1Չ)WVVNK/gbj'@$&rʥK0 &M:t-#P'B 5' 07n~frI,sM|۶m<!щHX!P?\^^@,]tM@2B:ħN*@ٳ_"$C,sM?iIiii^^^0} n5]ԣh$/KII-s# B}]vٺu벭}Znݽ{Gy?=D0l\%۹s#?ժUg/8$,Ldj|V?`Ĉg!|;խ[>dU|aÆkN+nZp]N LT&`LF駟>k֬Dl틅M51  ~_~7n^,.. 7;#;8pڵk7o| 7DwN2eРA֭{;6?Wڵkך5kֲ3Qά%ğmîWTTL0!g[hEy)0`̘1ov?.]tu]{IԘj|Bs^y晝;w~?яo}Ȑ!?o}+v)`R+UDw4nܸ5Xؐ jb!@; ۵kw饗]6Æ _zUN?v׮]c93x-[N;Wӧ׬D; ϶a7onܹuֵg[5C1/t25>믿>//邏NU'pBÎOj*[޾}{Vر#8ڏFo͚5`c' &XT&yZS }&F b!@z i_תU]vEXӺuc?ײe-ZFKW\qEuߵG,?ڿ0v1yVx!T*//;vda?=5>9xm6ڛc-3:{$_ƉӚR,l틅M51  2 D]nݪpq-رc;IVv޼ysS%DYK˩哅 Z-'?9M|g#\7Y۰aCV蜃Cm۶?~|>YXL0Wf@^k_7k5¦d oؗ~wuy6mZp믿s //_޵kעE"H-;I~&LPQQnݺf5:L-*yrCcaட|۷oݺ d.\cǎ`<+WVy}{߫a&:;޽;8~ذau>`bYxEؓm$2NtGDص|5¦d w5f̘S?l={=///̞=;s߾}ӧO?3[n}9׿޽{;3Բ3љZ޽ܹs5)SiӦvDx:w|1QFm۶K.+3b=^0 h_}v GV޾XT# B᱐P裏O޿f^})fdb^dbapgKa 7t͛7l0hРoY,LHX!PԩS6ǴiN9뮻nΝbaw271  \5kVEEF!bŊHX!PoxbBdʔ)2enb!@Թ&R_ ,v=uT[F'F b!@2k[nnݺX!̚~:e _yyٳl01u  \gʔfƍm61  _~m= 'Lk.ZcN@-B> d_7nR#P B 5sΙ3g d{Ο?镕&X߾}w={ 6H5T֯_?k֬I&{&Bzݻtƌ H$bB*O/0$U#O,&"A#dX!`M<`b  2L9b!5\&2G,&B01@戅sX&FBx. #@Xeb! sBkL,#dX!`M<`b  kg~D TLb!4X!H$b H,ؿH$b `zh B2G,jb!#d5 X@戅YM, sB&9b!@v9p@*o!B2o޼-[.իW"E,.۷o?묳b0 -ZԧOJC@Ygݻwh,|N;b@Y'D"={ܲeKcu)Xv Bsႂ={F"N:}_:t BlϑH+_JsC Y`a Bl}h)ڵkaaaeea B,5`h,ˊ i'dN:E"}]րvb!@:|p.]"СC d1cD"  2A,:֭9s^;hРH$r%5(//78XE^{#G> Ґ!C6m8pcE]4s˗/H7)UGiӦK/0P?b!@Sڵku bWTT_MgϞ]ݻwo߾C _^^R"4.?C+?~|+V\{ ҭ޺pwݻwOT {ѧOw}7vFG,hJ˖-nz)ݻСCn:@MСCEEEk֬9xW_ݫWX&,,,K;93g9r$vO>9rHc@Ml0?IҡCzoV(**z &4oyȑQFM:b!@;xȑ#Ǐ_=z1c9j!d|Ç/_>x'*4XEʊڅ :tqӦM9r䥗^|r@ZСC˖-[ܳgϮ]{Ȑ!Ǐ_bFb!(rX9J,%@  GBQb! |ku%vIENDB`onedrive-2.5.10/docs/puml/main_activity_flows.puml000066400000000000000000000055341513710110600222720ustar00rootroot00000000000000@startuml start :Validate access and existing access token\nRefresh if needed; :Query /delta API; note right: Query Microsoft OneDrive /delta API :Receive JSON responses; :Process JSON Responses; partition "Process /delta JSON Responses" { while (for each JSON response) is (yes) :Determine if JSON is 'root'\nor 'deleted' item; if ('root' or 'deleted') then (yes) :Process 'root' or 'deleted' items; if ('root' object) then (yes) :Process 'root' JSON; else (no) if (Is 'deleted' object in sync) then (yes) :Process deletion of local item; else (no) :Rename local file as it is not in sync; note right: Deletion event conflict handling\nLocal data loss prevention endif endif else (no) :Evaluate against 'Client Side Filtering' rules; if (unwanted) then (yes) :Discard JSON; else (no) :Process JSON (create dir/download file); if (Is the 'JSON' item in the local cache) then (yes) :Process JSON as a potentially changed local item; note left: Run 'applyPotentiallyChangedItem' function else (no) :Process JSON as potentially new local item; note right: Run 'applyPotentiallyNewLocalItem' function endif :Process objects in download queue; :Download File; note left: Download file from Microsoft OneDrive (Multi Threaded Download) :Save in local database cache; endif endif endwhile } partition "Perform data integrity check based on local cache database" { :Process local cache database\nto check local data integrity and for differences; if (difference found) then (yes) :Upload file/folder change including deletion; note right: Upload local change to Microsoft OneDrive :Receive response with item metadata; :Save response to local cache database; else (no) endif } partition "Local Filesystem Scanning" { :Scan local filesystem\nfor new files/folders; while (for each new item) is (yes) :Check item against 'Client Side Filtering' rules; if (item passes filtering) then (yes) :Upload new file/folder change including deletion; note right: Upload to Microsoft OneDrive :Receive response with item metadata; :Save response in local\ncache database; else (no) :Discard item\n(Does not meet filtering criteria); endif endwhile } partition "Final True-Up" { :Query /delta link for true-up; note right: Final Data True-Up :Process further online JSON changes if required; } stop @endumlonedrive-2.5.10/docs/puml/onedrive_linux_authentication.png000066400000000000000000002703121513710110600241560ustar00rootroot00000000000000PNG  IHDRl]5*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxVKo0 W,`-aak] :ڌ#TW,$.sqk#L U<4~Hz栊 7p'H)u&TkQh%VQsL,Oage0<d&up"׊k04pYm gڈXv ^'.&ޣ ":IDATx^ \U\.*/Iw]TBWyilMۦ?SLQJ\J4ֻkBi bZxlRTT3JI / l~:si^bW}w!!mڬvU볇`Isc5k|„*pFg:tnS{y$<<ԩKҽ֭ی5VZA:|4٠Av49Ԣ} ܙK%Kd4o"3s{SS{ sﬓ}~Z)/)|?GEŖYwmvK69'KJzEIJ+HǁriR˗f5IX.^TEgB` jQȑx!L<$&x7X =K/Y懫#G^^ W HZHQͭ[Q;R^" JH('D?pW&T^^^}||֮'keE!GLpAeb 8qDEgB` jWed|{ I) uBNa5?{gLJIk.[JN@bsn$iҖjkB析:$=~}-IhЇJ;ǫ BNϾ+'[tAp- v?FE5/wTq- K.=z\PPۭ/mV\Jad͚-;v|/foVӦwRZAZBC vI@zyyefVZ49`,eee))sRg͘1{;wCj!0+h}? G(T2F+-m%mTwJp|D.ZÆ> }V~䩧Q >21q@r򜈈H&մ[tAc={#VyefYr%T9)u!WXXrŏ7Zo; ѣDž6^4jBuϘvv;v:Ln:,'0=)<cQkI?xmN]~@MY+>=BH2'uV8'_}m|^^^mڴ?y^GEg0iޒٳeg!0.r!G2oʔi͚5$ o), aN`Μ<+kOϞ- wuplRTT\^}~:si^b7 䋎nX$-/<51qv(c#wLm11m)J7/ 09)ڤGþ$ pٲUݗ@ ^.܆i:tܠwN]ro$iZ˫Axx /v%{izuS&Ӥ6iNsV&vہ 3uHSI^%1o/duɍ1Tg׮< |ѧ4UG m̷ Xڇѐ!904v-Pxd%tLzK35tl4|ڴYنX"؃O,(Zc5?ݐ$oszr3{woiihpD79dH2p j ?},al݆*"|i/}]>н{oumz[nC3={ҬYIIK֫{!((85wٰ!<Qf:*\j=:tNO= sxΜ4yEv-'琻ԩV?rо}G09ٱc?ͫo2;xR^S520RƮ6ٹ3J,h޼Efz\/G]yttFVߪs%R;t贇]BVxf'1SGp'6׿!:y|C$ B` 6Ѱ=zZ+nlU:=Ri%͢* ///4>>>k\F{iB:z,MJҭrKOϏg#G^^ h7̏b?B?6dz&l>/$0a>?%ĉ^S20RƯG"1q!T ï><@3ܺsiΑHmݺuϞR_% MRg!?[n鑢"=!]Y"DÆ>Tr9[^>lK^}CCHPhg?pٲUT"e~ Fm-[&ݗ>}l*3{NhDg_q3+mW20RƯ"""w>Ҡ7I yҸ^x~i9;w :txZ2Gyuܾ})KᠤB;inNӸGXtשS/'!LBm O>LNY`ZZ׿ĐL&=js/ҽֳ hJDV( gffjHJuDg͚-4!?jeշX,=ڵ}}LaGZё:4d(.Y^^^4v5_!C ,7=4~-PlGE5 yѸ^uتv(,,]4sqAAp~'6^/뿟kniih/Ѯ/OYHj<=4ajΟC̡};&$SMOf0ZrӦͬ?vK, ,U( ///QNsf):xv-_::%eӂ^z=8uؗ<-<@VhDnɛ{?yvzǑQE.]I~{g[c$4hݺMblA`N6mXxnӞc=j9Mz-9Ph5"ugx;;[}xx uBg)f!}1]tΝ{]ÆݝD#xf˖)QMmЇTSONӾGȝHMc]Cf73K %8Ljs ,~U|_o4/ٳ m~?5i매o׮}~~~]t3g[y۔)hJATWh/՗k^LJz\ψN 0ٷȑO}=4bᮻǎ}ͽfttnw~\Ak4diϱ OX1{PbFr!v偬=={X,TNBnBgɳ`T'sO;J&qRearC2L=1m,r06g^*ANծi'LnC'}BK4 5| 1s0ĴO@ȩ~-m9o֬7i9 s/PhW^!OGW=h[Mc5w;?_e:tfXYʹF|a3K/dkMFQVs1# EMYMtB50v :fihc19cO6nܔ㟗;I{@@`(=zV^[A}ogܳ/22*44gYl4(&}1f͚wqjK^A~B9R5ZN;edgVբNt|ִ&flr֭c4zOSUɿU6g <…,*;pŒ_ ѐ1)O?=W޴+*=N\1c ̡@iFLB^}U =NNNN}w!!aPSTk9'p!ˣT)މ"#K>Ռ 0NFK=X&b* VDP ՜U&!Y 験~f'XL'I,>v\f'Lx3DI4ԩkv^^999UIهGkN]%b_ҺuJ })es}LKJ|a٠AvRⲍni߄~9;U@Aj; d׮ٹ3vUI>ԩ-MTi镥q,gKpOOϦMçM 5W\EDۃưGOH2ԆnWkE>|]fD1>92ʉ<*ռitFͩ5qjn.b%VgYNDd%tD/8MF) pٲU4ɱʆn8MiKX``А!OO>$"E>Mgx7}yJM'68ˊQ?SbԺѐ1L8jhQ''̴OKB\Z}Vm9D5.Z|5IqFv-rc?4ҾI5k 6}>zа-3'9 (1"iCaRU\¾l#Jt]Oڴi#ܜyF1'=z.uD9;rtu6͝քI(2^BM*휭W{!((85wٰ!R;]h^}:U#TyPoU%4E>zvGR# 6\vX+r~-2')ρ<8ѐGM3;osjMk[/dyL=w"rհͰdɒ :љٹuw+ߧ +}ҖQh,jxȇn8S@%n ٢E+T<A yβZշ*Dnj]hHXk `G1t ?7m,rtUP 4pT^PPM4^^^}||2{-\app#x^T nwG.<X,'NhMIox-T8rJ  VieI*5ʏHUa_WO?=IEG I͙ is;(0vKxhѣgh ^'>*kgEs>Z]z3_q4c_X4nTsokΥI@^ǃGO{$SԆK_WkĂLv>QO!j=BTHMћ`X%9qRjgG-7 ;# aS 'fl=z߀* a($+OO=`5eÖ.OOuj1 U= k Ցwӡ67v ?7m,*rsOMlk,;tÆ>Tdyݻ8*݅2?{4!O/-hM/]9 {Fl**9y,+aTr );xxxPRsjŜ@7K ]i#&5!'OЮP3/|GݺBo8iu- n-4c`ܹ UaHj2 Wx^>s7b|JG@ZBCxGC )zL6ݴ=NShv!{',"". +m-SoIA1c2<==y41×:7|/foVӦn S hO^^^?f[VVj;WaYф zLaWG$DZQZNC*Uv^___Ҙ ΥK49 Q ]%q',UG<ʽiAҥG 0aG!/A`FOmT&5rW嫆gڵ[%}ߏNh"ܛ`ۜvӊ8O斛څl읈jcjq+{=+@* a('+kūǞ\wj /5횊CrogYG!/Lz3&ބW;Fi}5}:䄟6s 9KR5 }VSϨUJ8 9yNDD$;s-JwP!\mHn¥~!{V~1Ap%ߪxDM:/''^QСæO9R5bN`|缄GF_,Z7iėyO#7UIą{8PҮ/? yZA`FOmT&5rWӦ2^x|8E͸7KosM[qRjgǮ[fjw"HVXxqtʶm־}Gw\ a('+kp'Ԝ?4 /5횊CrogN0iHϘXk `F1 ~[͝:9g}tB.;{oF!>?kԩkjZ&bpp# C$)3 a_#h5R53s=I6mڎ<ѢԨ0Hük~@\cH2]th&FxLo/o7oɍ^툤:xv-_::%~"#h.} j@kW#G>MiaӦyh&EWY[RpV)Jk}bx_:^YjBݘ1o) vS/U%-xjF*YmU妝Os{MOώNi<*y]6ѴU'rS *\M(zO,NgJᭉBg"ۻ' oRэR8-[/[̝JNQAˤ':dpc4Z3>b:!G7)n(VHGE?L}@jrv4ҥ9 *>@B'@í.n?Zb'D޴+yCBjεa?5iWVXx1)镊{Cܕc4HzFg(ه VjF"uH5e4yV^*Q 4҈݂~z<]__~{d4SqbM)oPҼ_W_}CћUXbPy׮v}yߘӂ]6zXu2ZWU'5|_Z|}wL ˋnXG>ډ ixvwSY՛[nw"VֿC{/*xnBgbF .diz pm KNN{i\&kjeW/3yU  0J]tV''V{'X(`0K4j9Bl߾[Iڛgi￿u6YܴZ|t!bF{(sSr}BK49嗧\ölzvݵ+oΜ~~~ҿ ֡C紴ernD#>a: rZŌt( IVrf k69 3/PhnԩSWyyyhъ&FjoZ`̴ fH \ MD ͙̅ i`k b!`ihc9R5 rvM; >arC2L=1m,r06g^*ANծi'LnC'}BK4 5| 1s0ĴOԚ6-`̙2g^*ANբ'O`C'fDK Y9b? >dڵk. rn>A|C2L=1'XjM]|e֬Yӧ9jɳv!Fpe`ez &5 !Csք7|# 9 ҀC ``8rř?:9 ҀC ``8r2p4A0yA" 8p !g^ cH@ș 2p4A0rb@!.y+ cH@ș|d i!0`09p8Dp  Bμ A8Á3/w~1s@@p ^ 8Dp  B\ 9`^/~7n' <ÇJND֚9s&YlAMséFp9C*3\2f̘;]S^^ݹs={d(n޼): ̋+===֫W =zYsסC _UQ5QyEEEFFF;$i?!\h&eӦMbM_xQW^ݶm[ԭ[<˅  d|6mx{{޽B2ө0--<[,:LV\\,?"iW5U$D1c`84A0yQHTW\t驧>6lHoҤI<11ȵkJJJbcc 9E?N _|-Ӧ4_#GB>}HBGq7n5GlQNL>?+-++QFןʝ(>hT8Ō ҀC ``8rE1ܙl X,}9=??nڴ),,ѣGYU4T9gjj+W&yyymݺӃI_d{i "cfQfffxx8 Ҿ?~/ڍ; Q" 8p !g^Ý۷o޽;44tڴilӁ*4#00ǧ<77ʯ]ƪh&*WCu֬Y@2>>>;;[D`ƌnݲUG~.]j-GDS>_xb֭ϟVmרQ#:F&jNj=(f 8Á3/.ȆtRGϟ咒qԞBii)+߰a+WùqIC}>sݴ///CojI8+WJ)~޽{O0mU>`\b۷oCB磘10Dp  Bμ(* mڴyGq%[~۶m+OHH6l/\ǔ9 JNNuj DOaa!-""6w&M*_;rkHƍ=<oB(r( \z\BWBμP~1s@@p > 2p4A0ycJ"kgX4-F?r910Dp  Bμ{^^^dd͛7yɾ} TZZZ}b׃bb%}TY9vٳo```N>3(** )++7ZXi!0`09H#/ZXi!0`09J۷4im6^ҡCbJW3&$$$((hׯ_5W^ݶm[__nݺ]rE ]|y6mI)6J;w?SX_g'FIm!Cs?¼y󢢢Cddvr9x u%qO??N u{ͥ .PIIILв?hדlSܹs~ M%c`84A0aZI b@w7Bnذa.++#Я_I&#F|7FգGMGÇV~gJDbb"k׮r!X_g'ׯ?yBVG}TZԩS_P!ERyPUƍy?Mt{>s -8qN-Ps:u4e[eӏ?8W^y9Q=44eǎ'r2C[r9*oڴM}8;$$U@Bμ:vX#;;; 55իz̙SnٲE.hG>Az B5b!c]^SQȰaî_~…8֨Z} h}Eo߾>PXXHo޼Y^^>w&M*Ӥ؋pW\5jo[iСt LwueɶJÇv+饗CV!1`)9 10Dp  Bμ}GQQQߑ#%=iҤ/* qƅY,yd҅k$Z0aŋysvy5FmڏuvRZ-%%q$666--MrIvڕpqմʖ9?c=AmԨѠAJI{}9cTPSA4j%ȑ#)Yɭ9PQ " 8p !g^4}رx SC]Ebccߘ,1N!AJJ om۶:th=d<!r0裏L8Q#@ș `,^x" 8p !g^Vȵk#8d i!0`09pddd(>@8Á3/w~1s@@p d i!0`09WBA8ÁB\ 9p1 ŀ3/x%d i!0`09b߿ƍB޽{~W`/}C8yK`64A0yBAAA?'JQ591sLkٲer5} TZZ*VRj#6UTDp  BμT!ܥ9rd׮]:7oJLDyy9Ν;S&@!W壮Ndgg[,{VLyf UyPB ҀC ``8r .Ã/_M6$.\0dȐФ$sRSSIbqoSnϝ;׿??:,XˉW3&$$$((hׯ_~lڴbŋn-ZW^ݶm[ԭ[<G{n tӧO´4L_rẺFB[o(U{A *H@ș**$Fˇ^VV?SI~H-\vSNSLU ա^B>}HBE!GnGq7n5GlG-xcdee5j~'O*9|Gŧ*vC Ej>>gƌnݢ+WPKdrj^QW/^غuUb͚5qqq5[,L]UsPlgϞBi!Cͭ9!W);+WOHDEE9rawB%%%p9V̉wJhw 60퓋"FR;l͛{0aD?sŊO l߾]5*9[;rf mꧦ:#ru BVհaî_~….]Lڵ۵k P/" 8p !g^^ZZ/n:""UVPq|XDH3gRe˖7ח#!֫D`3H@șpJ+W3cǎb%'bWꔗGGGwܹgϞڃu_7܉ݣ<(f 8Á3/.Hӓoz*IѣG_~;w~~~:tX`0+Q3o޼(__H)I飭EjR6mD>~!^O??I&{U+B9r!w…!C&%%ݼyWcCעET*^m۶ԁnݺ.?5F` 4A0yQ wtSO=%}5lذׯߤIXybb"k׮r~N:E ZM{i<"?#G>}@ԟ޽{9sO8aZ wFP#|:u4e^n֭k׮e*17n5jT=jŌ ҀC ``8rEP, -DGG;wm*--uwwg6m byQVj*m!󞞞W\a^jBE*ӃgZhH++:BE!' Qff&6^m…wf[պ*;vбebpi!0`09 ۷o 6mDiVviRl` ͋"_ϝ;@ aZiLoiGI }! Gq7n5GlS~h}ڵN:M2>|xYY?,xcdee5j~'O*9|GlUQNrhLNAAPPtK$&&X.c FJHz4iDiE!\Ga]~l*jSh/Bje~|H3/L&?/ټ֭[i9===88MjBرBqq1=zgff'N.Ǐ ;/ڍ;)t025BUM6eE4Ԝ|9vIQGG@g',{zz^rEk.S^^.53H@șŏʟ͘1#""֭[LaKdi&rssiڵk<''fjŋ[n-5k5jhX2uU͉C r={ 5r J4Bis\r)zej:::;)]T!!!6ggg36G0aŋզ涊AH'.졊b}J >>>ӅbJJJƍ-KlllZZ>oT.lT$44:=iҤ/T*i<7ƍF=7oz]VvM+ 9E(+IA]^MQ#j+Spy?Zt/ 2ƂH@șWBǎ³>f3<˗/dhd 8ÁSk׮'ٳG իWGEEEFFkɒ%zn!.i9r͚5mժ9p cx@[ QQQoLLLVV^"8Á3/H+@ƍr#Zjծ]=z'r9 ҀC ``8rpסC-[>s;r9 ҀC ``8r`>@8Á3/w cH@ș ())P|'" 8p !.rb@!g^J(@?9 ҀC ``8ri8Dp  Bμ A8Á3/w~1s@@p\^^ĺ¬Yu5 " 9 ҀC `P}VTi 9?nj{O* Gyd+3n8:;vAAA7XO?4::A>>>:6mbر'l< ^^^[ʝ:uݥ&7Hi!0`r˗/'SO|I|?)ƏVW :2{ZycD0luʕ+߅ Jey֭[i}AA-hpRe$|M_uYYYtҨaÆ]v:W-Go)՚j*&0lի>>>,ÖUBʍ |I*N:E?}reɿ+-+Vd[*~)uB*++???i9[ܨ*Iu8_ s@@:8C=Q -ZL Seg :i$Zx:B}D/+L:UZ6)WBBBB*$_pp0/gu*pSr?  r+W&/HCup]HDo6Jߋݭ7woQq6EEEgϦ:B}bɒ%T2dȐ\ãYf컗RؾNԜ9sHLVw6u҅>vJ̍3\Vh-[3&&&)E!׼ysZ}Ycߑ*/WիlٲǻURR߰}9wrfff&M,ɓ:ӟ>vrƍSh+ ...##VϏ}v r$TڷoOR̔[b8OOOV~jP}g0:p:|66q] Qq6S2!:.Rqɓ'mN_ -(( nZ^HCu7n:þa3H+@?9 ҀC `P(\:lw# cHCupX͚5vHJJ6=;w{ A8ఐS8 ;@?9 ҀC `Puy+ cHCuPer`^uE]!EQA@}g7n7K_~Eܠ@M ^ G1cWKFڵ%?u W5gΜI[-[K۷oРA~~~III19 # 50` Bμ#hg &HH)l7oE"g=oY 3Z 9ET^^N¬s={UmXUVVFEEESLټy[E 4Ў40` Bμ c˗/oӦݻ\9sLbb_,XR+z1cBBBF}udfΜJz-BnӦMvww?t萸K+]zu۶m}}}uQ!?!Cy}AigF̅Ў40` Bμ Bneee?T' uq…=zʇ 6x`C_~&Mo?*7:u*<<_ӧ5kgBZ9r$-Ӈ@)Ν} 17n5j۴~'OG!q1B;@:(29pG;c( 'NHWIB~~>+O^j奥|ӦMaaa!/?1ckƻ*߿?ۋD֭[i9===88XЇāhߟ~I(U6ZTTVwAo|}}mJBNH1B;@:(29WBB?⫹p5V~rI{3uW``Oyy_ ߔ9tлȑ#Hz/""֭[|jeҥBgҾBMxhY&..QFyBԊ\附E ߾}[lܸqaaa%&&f޼yrR7i 9R>C$&N(* 4iŋFJJJƍ󱱱iiiB7;9RgF)))ȸ| PerYbExxX^p۵kWvHٳGVQercT8z#GhԩS;vW+j∥5k,**O>K,Q|@gTzp AQAș|2Ʈ]ZlרQ1c.5\t(ûwiFΨH .3/wٻ;@&!D @KtDL)mST"/j6U+e`P{)ÈWB24 $(ɹɚnYgsNZkί>Ee9!AnرtTB@Bae9O}Z=#裏 `Q 02{Qe:^~e! 4!\Fs/ ?h:ťG=#G!  4!\FMRT-8 ge9_ywz߂p\FfWZZZXX-8p'c.#{sAνx$b <4F1˜rŗW P0(PsAν(w㊁  c.#ȹ\1TB@Bae9+ƒJC@(hC( ^< \1TB@Bae9p/c.#{sAМ>ӘZ[,|WV_xDiYž 7)b%$$_탚O@AN ӧn|S`]RTTG>o1cL<֘3g[?JKK#""oz/W^wĘr#!?M4iРA1uuu䲲]H0 g ?w}}>芊 ?Q˜5 :O>J^)J͌F1˜rŗ_W [ؽ{wuڵk333$8?>...))iܹ*̬XBɓSӞ;wܹs~^~e.]4mڴĄSy5?/S-999/u͛cbb=*ȑ#ƤwmbtO<1tPm\۷O}ӦM 5֭uU/_5kVJJtꫯ;66V&YRRRYYg+WNbuS+ܹs[n킂.] j۷v0_ _Mo_pA6:}GAiWN>w%EmGb1܋r 򲺺ZܻwJ/o.J!c$vߩSz5LѓH0awgق%復^vM+++eZ}fܸqӧO437|-Wo\۸qcvv-"3YɽϞ:~>y,4(hC( ^< A\1|![9!O&MӟԶ;rq9n']t{t $**[H_vOZ1;99uGIΟ?ߡCzKi;vrNq1 rATnf 4!\F1G[SSSVV6p ꮧzܹ ~999zl9ƌwEOcPܶm{O>Dsڷo/ɖ-[d@Tի- 3f' '&L2zFĉJӧ天r)ϼ'7vbge9)TTTc2K;vl\\\bbٳ 7[={V҈VVUU͜93999666+++??_=W &" ܜqaެۗ.]W=//vUZ ꫯ!T2UOq19hی m%gϞ=>z\Fbw222HqR\Fs/ ?C݂ۇ ~w\ `Q 02{%'W } Hqh^ۄP0(PsAν(wS$mB@(hC( ^;O?0a5?ׯwЌ `Q 02{Quuu˖-ܘ1crhFۄP0(PsAνx$]ZZNC4b1-S7$wh 7R{p7c.#{sA˘r#A!  4!\Fs/b <4F1˜rEW P0(PsAν(w㊁  c.#ȹ\1TB@Bae9P㊁  c.#{sA? \z1^ڵ+22Rm[ѥ]RltEBl_pAv?tuײϟ?ߡC+VTVVF#[+))ǎS/׭['M{Wۧz}-s @4F1˜rD #))iɒ%KxJ|||NW0R{RSS]i|fOfOb-]7nɑ:lذ;wFo{ڵ3g 6LcJq-|A%(4ٲe S_2a„pFO<)uuu-[{#Gͭ)++8p… 0y_|E>}ϟ$ rbA  c.#ȵ),!|͘uj̙ɱYYYjٳo ZJ^{zܹsvvvAAAANҎ3kd8gO?W=gl4.X=h [F#K;v웘('VSo… 2%%9ee9p/c.#{sA˘r#A!  4!\Fs/b <4F1˜rtϘ1c5. 111_&y]_暳N;@@4F1˜r\;g r1Q||ѣ=j`TZZ~{G ]jm"::Z/U5gN>}ZjUU@4F1˜r\?O>5(ANŞiӦ:O>1@g@˸~o/Qb  c.#ȹW644l۶M꫽{MHH?~|II)lذA\TTƟ;wܹs~^~e d=wСtDD9ԩSkjjqӦMXn k׮̌{t7--Ma޼\YYsi}G2[Ϟ=oHW开e˖}/p JC@(hC( צ9sF~dt?ӘaF{H^^^EEEmmɓƏ9RNuuuii!CŋL2|pݛ;nܸ*IAryy略'N(î\kSNɰ۷˶t>|Xk\7 'w7`Ea[v]bl\l"OBge6EҎ._lhGEGG{ӧU]"##eDڏ;~m_ANJllldddX^^Q\\^n޼999ٺ5?~ywaŊKr#[uIl^y啴}^_r^={^!22\}GnƍٷrK||^׮]*%''G=l0]V^zߝD5=[n ,Z#fge6EU׮]3r[oU[[+/wءR49oAA$9)}=FjAa/EtRI} rw~z9iիŋUU9/ॗ^@Ȍ ^=:c 8q?COw}*u8!555eee1ɶfff{Ycƌ˻x18H|uI٨_lYJJ9O 8p…z_g=>V开|?%%+(* `Q 02{%NOO_/v566vȐ!uٳg%7ߌ)//4~+̙3YYY{y`ܫXd\\\ttABJOc;v̙8{lu: XӧOh\Μ9#Z)+(* `Q 02{]+** KKKm3fP=?{+.׽b͂JC@(hC( ^~}ٳgM4#* `Q 02{y{ii~={~8h TB@Bae9>~|;{#!rP0(PsA-8Ę1cHqØrGKG8p`˜rVQQzowum&n֬,7 c.#ȵO~ҳgOItd9&ae9~$TߠKMM м@K  c.#ȹ×߿֬Y9hFTB@Bae9nWTT;|{P0(PsAν(w㊁  c.#ȹ\1TB@Bae9P㊁  c.#{sA˘r^\F22{H(q@xPib1ܫmI맟~S[[kha/BbbzΝ>Qm@۾b=4F1˜re,?X~(1G}Q0RzO>˲liꫯ,ç4""bǕ+۷o.]3رc?25-Z$+k>'.gb͎JC@(hC( ^r~ڮ6mZӿwo@\]])X|^|X(Kyn?>]vСCSLIII9qmdsSh|B~+4F1˜re,wۧݻwwA^tI]bbbBBԩS%s;wׯ/m*RE,_秧GGG$Iv;+WTì>sU-999~YfIҐI{Aջv̨(_VV6~$PgےTqMjX+{{kK^#OڰaI\TTϛ1 M0u~SWXqw'Ol߾S<>b|Dꫯ% rJJJ?Ja 6+4F1˜re|$ŋSL>|7n\UU|5jԼyTȑ#xuuuii!CY9<"de[>2Q]Wݿ[}tY۽{Y>~3gTĉ@W\vY~  Xhǒ| K9Yt_ɞ%UTTNKf\Fkempo߾%K.B3ߩSz[,@1Glܸ1''G2aԷ>:|]&Lpw~gANΖlz<%9 3ȩ;r'O6ތݑͦ^~2/ܾ}LL:en[nEvWk׼2ӽc.#ȵ2O9Ưd.}NuGH6U￯}ͣ.]T2l8p;3(zK.sn#+Ҷzi{ ׯ7[uX뮻~_[[&Md};:o둏Xgff.X@3fL^^ŋ=yf۶m=''G>ԔeggO2IBB³>+̙3Æ ӟԍS.O>Q -Na> ˜re|$;111ZUU̙3%dee1gϞlcJOc\իK+((y$ɰA?={lk~VR-Ru-]tIo߾Wرc艉rDuג=^Kre֭Ç%I^1z975@U79w-RU7lDGyo~STGr>\ڵkW}Ȑ!^w2^1fG!  4!\FsVkf  c.#ȹW ;AhZPib1ܫʝ I-tl4F1˜rEW P0(PsAνx$b <4F1˜rҌ3/_nom28m1Z:k?/?7xxC4n%}\ rONLLw1ZG}'gdd}ÇX~~Js9Phc 444l۶ڸy昘GFDD9rD_|y֬Y2^z{A_.]6mZbbbBBԩSkjj iiiUc7 WVV6~s窛 WTTԳgO%6lݻ,`ٲewK 02{ =sPΝ;gm7nܤIdcĈt{ٳ}qWcnnLRUU%iԨQ͓SNɱo.ua_FANfWWW0`ѢEz[v}ӦMjqIjp^^^EEEmmɓ߲e>@  c.#ȹf'\|YH$]trl_pAF:tHX^^Q\\^n޼999Y6Ο?ߡC+VTVVF#[+))ǎS/׭['M{Wۧz}-I >}jߵkw-#y@  c.#ȹܽ=s׮]m W:uZflKZzscBxDš76lΝjћ-Q 02{QAzG.==;{^{5uGF1˜rEW +3f̰=#G@Bae9+ƒJz ΆF1˜r#AAQG b1B-8-r^\F221܋GB+ƒJC@(hC( ^|I+q@xPib1܋r?* `Q 02{QA!  4!\Fs/b <4F1˜˂rEEEsn&կ1{1{A!  4gΜFhe96W2P_u3gΔw:wmܸq˘B rsֽ{Nwi?2e%]A@qN^ްvVXap>p@xPibp朼 "ȩw*/^l}ieNj[t}~DFF>#==I='\uFxPibp朼Nn;h9Ꝿ[EEE&][C`=8r}Zy]]111;v|'֮]W]f'Oh{A!  4s2:}5V^=hРdC^Z;y,X-ܽ{efVho5_zURMzzzdddZZ?~w}7**J2OIIIMMTwZ:gIHHڵChjLy7ߔ'Je{ٲezSO=%K{q ~ZtѣGK\#۹s&뺥^m^x[nź~_ﷶvѢE=zС_f3fm0DxPibp朼Nn;h!˗vǍ7aِҨF:y$?QVVԌ~=;R+}Qiye{6m71tPY4N6MOGloܸQs%YN6zi=hW+oFgϞ zFCYgnw}Ok׮-[Yfyjc۶mj&P/_lk^o ??_vt{ӡ TB@9'/cӧ[ZAW^-U.sGl޽[|wTo3 .y|'xiple[Z%s=:ũvmƌzpyyW_}%ʚgj̶&'NKdwK.UUUFΝm럟߿llŋv*[eB9z}ޓΘn  "GxPibp朼Nn;h!Ho~dC}W/{<<.))Q/_{5\Nq]AG;vܺuuCo3Zg>CT"\hiYըcSʚ5k俿]7xC~{ur3-qN^^O6}t%UPRwrnWZC5q҃SRRwi^@f}kN$'[/H0 J]]]jj4FEE{6LةS'| P]f~ySZ|;ΘmBmӭq- nIxl|5ҹW#y@?#ףGf|F.ۯ^_"--C_vr@v}ꩧz]XXh(vmҥ ?BF|駯e'MsvMߞbt]vۭ[Vf~՗zN]>&9y{>wB rW_8p^Jِj'|rQQQ ]Cz4%͐@z=S4iBpoeutkA "5%]8ޗ[Gv -7; 8n7 P0(gָ\s8?/i ݉'-\1TB@9'/coAn̙ r?!P_,)PA!  4s2W8 \1TB@9'/coAN}?ܹsw F+ƒJC@(h3e >9"t< \1TB@9g+c/An$le%䜭9 7s2܋GB?cW;nO?4&&+{* `Q Μ ^/i "<oa&Ѳ$>Io֙PW|߷jy zKNH>}\70Њ@ 9[{ re,@M}}}FFw=|p{ߍ-@u5Vuuu&o_wT\\,?ۿ}(7hvTB@9g+c/Aνn"iiib111G8rn|YRRRo߾xҥiӦ%&&&$$L:F`<ћw+++?~|\\\RRܹsU(٢={._cIj z- ~3g|5$r(F7o4nl4r2t-nݺ{6mRKR***jkk'O$#K Qu$aJZZھ}T%OVv55&駟ֽK.̌۱cu 'W 6|o_;//4;* `Q Μ X)mܸ1'''66vذa;wx{k׮ɶN:YF%$:$G76zZw^CzXn,X$6!;rƸ5bݢZrzB_k~ֵ}ɓ%n6KkeHmmҥK,I&ݚDFF6T7lhl,--sYG76ZR7W^/Vb5z &H}U^z) Ө۽9ߑ;pUfVF''On۶NȲeRRRl#?KH(ieW}$9p1c]xH䠲a<;e9277l .~}?~CCǒB r>F8q=;y|Mȉo0;;ۺ6(i|$7'le%ȵ2:9K=h cD!8lذ9sxq̙ɱ}UtcVVV~~4nl4NYdƎ+&&&Ξ=[=-fI.\9O.)Ѹ$ z_wx2xҤIo49ٳg%2?/le%ȹp9 ={{Μ9Yp@xPibp札9KZo8\bշzkZZڈ#dx+ƒJC@(h3le%ȹ~VJMM۷<}+ƒJC@(h3le%ȹJeݻvmoYoq@xPibp札9+裏A!  4s2܋GBXn6nAW P0(gKV@M2K,@+✭9p;Iq驩[ppV^ڞ={NnІ9g+c/Aܫ[pmKs/ ?* `Q Μ ^|I+q@xPibp札9+ƒJC@(h3le%ȹ\1TB@9g+c/Aν(w㊁ 9[{ r#A!  4s2FrV^HRAhN[_ 4gΜF蘭-$4񕞜e_f3gΔw1wu#<&+ƒJC@(høqғs2l,ޓwsN b <4F18 z rNrZ * `Q )5Zb\1TB@S2ȅ-ŋ/xQÚܿ~vK.5z9^}`5p@!  49=Iڸ{zH^D >^wztq:{j !G'>@8 u$mAs "mٲe۷w._%7mY?Z~'x"===222--rmտ穩2;Xju3<еkՇԘ&2՛o)-'Neȧz*&&F{q ~ZnZ>`jɒ%$%І9 z>IwМ{rk׮6eOٲ{tt?}=͚5Kə>Q3~&Gy͑Z裏J˃>V+ӧO޴i7Cbqڴi8n89󹹹qF=x„ dgϞ֣(jٳ#""/AH6z! v6]6c 9=IڸD]oV 9wݟ~%]}Zr埼e :y|vT2=ztq֭uSYg>CT"\hiYըcSۊ 'SUVVhSN;hνAN:.JJJ?C}з>[DD|W3 %y|vuz׿k[.%%%::zǎҨ~qW.((fͲ}kNr&_ַ_W+ea_kW+!rP0(D'isoAo]z5mڴ,An6yyw'?igBLqĻի/:t萚*}K/tΝ;ڵٳgddd\\\vvvaamfX۵K?lIwМ{r۶m7)I@Nv>[o%)Nj,!=yfH{_nH[9?a8pS!W ܄4F18 z>IwМ{r7V8ޗࡸ!oomVAp%ܐ+nBTB@SN;hν+5W>>s{_j8qB%{`+܆JC@(hsz e̙3s=E͒W P0(Do…)@᜞m _JzΝ?W9=RAιn(^,|D/Aνx$b <4F18 z rŗW P0(|D/Aν(w㊁ %ȹ}?W;q@xPibpGAXLѣG=z>(2dHCC嫯P=2oa;s$8= P+4F18 z re|$ѿrڴi #(Y[7gdd}Ç8~SxP0(|D/A}߽{wtK$%&&&$$L:F;wܹs~^~e1lSYyӣ^z%I[O+WTìJf!6nܘvgd'd{\yf9ѣG#""9/_yRSS]i|bP&YfT跬84Wf}5z9D5=[n ,Z圏%ȹPۧy.--.}NuGH6U￯}ͣ.]T2l8p+R?s c+W!v!fΜ9oe~~_5}ITTT& 7ۯ>VX߬s[I{^/^z}- g+4F18 z re. ۧy3&//ŋm6՞[SSSVVL^v̙3Æ 8ɓ'eNԲeRRREEEiiiuuu(>>~Gॴ4""bDtt^kϜ8}$ժ*{v(^{z$G}'ն5TVVN6_m'Ò (t%+quP0(|D/Aν_Аm6{vݡC=ҥKNZSS#6m7ǺufXvmfffTT-^"???==]MKKSkSnذw>xࢢ"}t WVV6~sZ1w$SqU Xlw]hیW QibpGAXgΜ{9{.^8eʔÇƍ4jԨyy略'N(î\kSNɰ۷˶t>|XWQQQ[[;yCx9\\uuuii-Zڶnڽ{wjqU زe>hیW QibpGAX^|YTIFJllldddW^^Q\\^n޼999ٺ5?~ywaŊK{ir׮]JJJcuIl^y啴}^_r^={^m4;* `Q (^{=IIIK,Q]jטN:T/g:qƜIÆ Sui򲺺ZܻwD5=[n ,Z#4;* `Q (^{ ֵkW_H9)Y"CsK]t$F׾9[I{^/^z}yr@fb͎JC@(hs> ̘1C=NJ2a2331c]x6N<)uuu˖-KII7 'F[SSSVV6p a2_|ѧOKvX|A9Kk}>ʛoS^^iV3g&''fee1AθWqqqvvv\\\ttABJOc;v̙8{Z=Ly9%=W尀3gȴ'9Kkf̘&g>hmJKK +**UqGAswG?ڿ(^{H(eݷzkjjj/_nAA!  49Ks/&Y.##{iii=zAA!  49Ks/rmfAA!  49Ks/q o>#DxPibpGA܋r`/֧OܡC1bܑC8QibpGA܋GBh*}3fLVV֜9slq@xPibpGAV\٣Gt-8Њ8 z rj{ӧ-8Њ8 z r^܂sGAe9 z r#A!  49Ks/b <4F18 z rEW P0(|D/Aν(w㊁ %ȹ\1TB@Q9P㊁ %@rGA?\z9KkST0i?zG}]e 5!C-_}矗ix {Gة3/B5iWqGAk06mZ탾.,QWWgo2Q3'''w4oȸnq|A|F(^{H-޽CҥKNZSS#azhʕt Qk׮̌ڷoܰaC޽eY9X...))iܹ* [϶={._cIj9,+* `Q (^{9_ŋSLާ7n\UUQF͛7϶:M8QvrzWQQQ[[;yCY2hР%KXgX&Ӳ-J{<<m&2ɤIdcĈt{ٳ}3gj4ԩS۷˶t>|Wwե Xh&g{֭ݻwߴil\?7 @4F18 z rD q9U^^Q\\^n޼999YgcmWKڵ+22Rmkz;wvYⓞbĐ!C^u0.d?4kIޝWRltEBl_pAt!`c?^"+*++`c-ȕcǎ֭ئ+iiiS9,+* `Q (^{Q:;544H0HJJR„vOԩS}}1 r^z?~c=bdSO=#;=˗/w>N(Yf+ٸqHÆ ,N޻wD5=[n ,Z?7 @4F18 z rD>H8lJA8pKQQ,//W/})9TX|V\Zرc9s7/f5'QQQݚDFF6T7lhltXR[[tRm[I{^/^z}-ɟsYW TB@Q9 Pg}3&//ŋhm6Os_~원^v̙3Æ Si"CmO<iH*q=c=y>h߾ђ&[lWL0!''G!8Ѹ'OF]]e˖j4>!#Gͭ)++8p… 09E_|E>}ϟTqIŝbA %ȵ)7ߌQwتfΜ)i*666+++??_={-UV{W^;w.((Pi"Cmk׮zňѣGKFRFҚ fFIs4~񣞿o߾8cq%$U4HH;v웘('\Nх dӧKJ4.ɟswrGAZR{7qGAZ?a>}c2(^\kR^^q~;)hQ9>H~޽{vv7MR+"GxPibpGA륗^ҷ7=z4)7A!  49Ks9sSG8p?* `Q (^{IWTTksϝwޙ.222.HP0(|D/Aν3fH{A`?* `Q (^{y?oХٓ,@b-JC@(hs> *߿'? GhQVMQ9hY(^,|D/Aνx$b <4F18 z[6ȉ_~饗l6l}퀶xc;l߄zY_wB?kA!  49 ׮ŋ/|;2ۻᆱ[ $-۶mztҥKնqb <4F1DS0ѫ[oUTT$/jۅulo իec孷Z___c]e1G>\1TB@H )ZwЂfۯ^OGFF=W\ ~w_RRRSS<55UqV~gvٻ*;ㄤ@~c$`jP вZ*銲 -EEjaZk˲%Z-RZmA_@DX`D[ / $$@ $ٜ0rI^?x9̙7׿ևPccctRUU%?d dee}K_ ÇU80>>~…~۴ H(q@xPipF1a)Zw< 3<~/+iӦY'YFհa>s,((qqzj=y„ 夑m=r}PQQQccL'5yfy ˗/;w0J圏<"W W(hs>0J\|I+q@xPip%l1V 9y%E.@b <4`>$))nۻw}.ϟ>}]v͝?~yy}. G@~8#EW W5TUU 0>bբ߳gϔ)SJKKS-N} T s>0J\;q@xPip%PBζmۢӧ%ڥ$''O:F^lllx?Zaʕ999:uڱc^w\l٠A!<رcCoed&L{U{}MHHƏ_VViۼ@~8##A@cFN2eʈ#h~~q㪫%b=zٶ]ĉeڹs笣?Ν;޽[pQF9֬Yoq Yᮻ2e~*9y% TINNNHHFVVֱcPEEETTԾ}ڵkU^2[7e4{3g4ždb;v(7oK~8#99vѭ[ ={$%%uҥ7.s֭['!/ظq ;wpjYիW]uU{Qy(Aae 9EEE?.r7]vm3)̔45y|;a|My}ICN;::zժUlڴI&_pvYD眏<Vh$y&''gܹjsر&M:uꔴ6l C.|qqwerK\\Ν;u|źxCCCIIIAAAZZz୴TF׭['Ç*N8дms>0J\< x\1T\ T0^} iWWW&$$gɒ%j̙3/@ A.LtqWGN>hРyYO?ݽ{w}С˗/ zډ@~8#ŗW W(6Omqqqee}<" x\1T\`ڃ۷wر}̂bpGF rr<* P0dtItO<<" x\1T\`r_}^z葙o~vbpGF rGB+ƒJ+L\VVV&ts>0J@PnSټy8|a  T[lQZ)29#9!Q)N 6k}uK#9IٳgFF8##A =PG(|a V㊁ 敗s bpGF rr<* P0(|a (w㊁ bpGF rr<* P0(|a x$@b <4B@Q.|a 9y%@rGF rкQ\P㊁ bpGF r/i<* x+>@>F7IJJkt1!'صk痗]|a (w㊁']CpwXW߳gϔ)SJKKS-0J@"IkǏvyy tڮ]fEE~1yrw4䬢WZU[[+6mR+'4˒hQ"-;Iə;w;vIN:% 6HСC'|Ⱦ?я92| r  o2n:i>|[nQ+'дs>0J@ ꫯǫ;lՅ }Yd3sL/l[{+**Rɘ܂ r 7o=ݻw:t 4 s>0J\< x\1T\dTVV_k d1y(A.r%Aٹs۷o۷9C;ᜏ<" x\1T\/ʥK0 ==k!ŵ8#EW Ws{W^MrrrHq W|a (w㊁w5hBkz8##Ae˖IfS W|a RYYbŊaÆkU鳲mf i(AnΝw{=`!|a 07{ICᜏ<nGs>0J\< x\1T\dTVV\<|a V㊁ bpGF rr<* P0(|a (w㊁ bpGF rr<* P0(|a x$@b <4B@Q.|a 9y%@rGF r?0>>O… ~V(A.ryx$T%&7or\9}n]v͝?~yy}^ϟ+W(hs>0J\{>ɓ'<6㙇 έ~Ϟ=SLIKK+--O Ap< bpGF rCb϶m:vW\өS'^'N?~|bbbnf͚ݲe W;x~!ǎ[ng}VӧO$''O:F#ل ^^|y߾}d9y4@x@ <"r{;f f͚T~8 ]we8 +W(hs>0J\]Ş&iii:reee駟^{G}=̙3GYYYzwISx ***ۧ׮]=C͛7i<\14B@Q\Hhc߽{l={VmT{ݺu⋍7JT; gϞR$%%uҥAMSf#z꼼JvOHH{Qp< bpGF rm1nL K'Owc=ri;vL-??ǣWZMʻvheI 8#6FUSSsĉy r-qqq;wT=Gw9jر&M:uꔯ)(nذA/HCCCIIIAAAZZz୴TF׭['Ç :$O>D-h_D|a צ@Ĕ3gZg| 7GՅ }Ydݺ;rɃ h;rO?teC._\,~c^pD,|a w,..py9#H'Oܯ_?iKW QipF18#%/߿zzz޽Iq4+4B@Q\䲖dٳG},G`@"<4B@Q\r׷T "@"<4B@Q\zU~<"{WYY7xc^Q| d9 ✏<$Z \AQiǎ?+s>0JUVVD|a x$@b <4B@ rƍx5~x{A  h9✞\V;rȿ"4Ǐw@\1T\`Q ${pj✭gyp@xPipF18sVQ\P㊁ bp札9q s2  sj hm?  b?N=ȡ%A  c.#E.@b <4B@BaeEW W(hC( (w㊁ b1"{gb <4B@Bae9\\v 'Q6_ڴiӦM6mڴiӦζ 9\ ˘\{1 VʢETGo}&̞=ۺyEM:sCݾ}}Fh?@ }I`C* P0(PsuƼCUVMF6׬Y{l?X?GGGKϛ766\o'8Tr2f͒FNN}Fh+|uuu>3vR/||3…J+ 4!\fݰ1pqP}=zl5믷Qf555А) m޼y2 /ԾIII:t"111?s{iz5M"˩~9}{^jl\'''<… ^ܭ  b9Y7l;\*>+s=gښ 3ׯ[ZZ*<?ěQj/ʿҞ6mҷS*x i* dsܸqzj3f OL[n/~uVDxPipF1œˬ6.jӉ]tIJJujoh&M:>~СHO^SSJ cYIɓҖ;4ݸ7mԨg~y !!J:4jo]'#GԦQr@"<4B@Bae  9{li̙366_HPUڂ s5$GyD%7kr|^'N()S~etT%]UUe]9**J?P[ (PET\`Q 02농yC<|O~66_XBzƏ믿ޱcǞ={エuź1cƼKwqGZ K=ܺut9|ff},,,vnnaQQ,8c :YYYҖw)_TgZ@;ae Ad k~;ÇwhKˬeWӛy䑌zHى~,oݩY7i9Rڵ ,ΎILL+..5} ɀq뾿w﮾\( `{/02농y&'ۛ0g*yADs.nؘwh x{L9s.nw_qk?Z{WZZp0X9ƒJ+ 4!\:!lV㊁ b1" x\1T\`Q 02\+ƒJ+ 4!\F\;q@xPipF1˜rGB+ƒJ+ 4!\Fee9 >@8}c.#ȵ)*x7IJJkt0d'|R+N3"66VQ>Y1k𨪪*((0`}gZ';t ^zȑYe5v»wߗ]}s: xbPipF1˜rC۲DQQdǏK\ :m׮]]JJJdBmwSiĘRCN:],&&FfGcgjkk-Z$Vݑ{׭w䤿wޏ= tJ'@p< b1"GBmYBRDNN4vI&:u]6lk~O>QsdGG>|J#ƔZ~wQbYwyG0aȑ#Uҏ;}AiI\\xqZZZN#5jT~~~MM͉'rss͛7gΜF_S =Z+W(hC( צزxWԄ>},YD͙9s-^xA6z޽{yrv$Y{$|ŏd3vO{߾}rzVEi4?acw}웒"oHmm^ɓ'eiӦIJ4R0 1 rsA"1 rsA.rH(q@xPipF1˜r/i<* P0(PsA.ry.ӧ/]^~㔔x/$ ]KRo;+ W(hC( {IIIFFF]]}=cSMn{Z'GEEܹ>R0Kէ*f0>,I>+W(hC( <裏{=qr*TUU 0:1, BZ .oW -* P0(PsA.ryx$1--mÆ g}MHHHNN?~|YY92;dȐ5رczk\\܍7![ٶm[tt=}D9ԩSkjjs͚5W_VXreNNNNd}^bɒ%oFF'Nțح[Yfi}EZvv IY9ŋM <\14B@Bae6ȑ##0{~2ѣ._s4iReeemm?l05ԨQuΞ=[^^>tP wԩ)S1B7ZRn{ĉeڹsu!qFiG}5? 'W7pirnׯѣN5xV';Hӛ@茹 צHڑٙ3gM6okN#V[nFYY駪7$$$$H#++KƊ}͵kצZ;ue˖UUU!قսk{.##cǎj4Y9eA!22\GnyyyW]uURR^XݻwKٳ߷!dٷQbOn.\ӡ))r.]T9rw]:sicuzܹz@g|ܑ@32\"{9uSkժUi&:}$ȁ|M_M999EIb*^믿n#'{~hr>gyF_f!32\Hգ_T~֭5}9-ܢRC_SSsĉIW+}My5SRRfΜnTZ>>~ȡlbmAжT\`Q 02\2| ?&IIIv޽{HC=gΜӖ .X&OyyyTTΝ;}glܸk_Zbbb׮]ǎ駟gGRϗ3k9ގx7xZW(hC( n]UUUPP0`0rߪW^MA}g.~'$$˩?ꪫ8`3eʔR̖z A3^1G  c.#E.#O۶m֣Oh{o!٫G_|gϞ;w?M7tQi߿ȑ#jtĉrsI~ ?/)OwLdv귿mjjyG uafر[n .TC:4e<%))K. X"c Yzȑ#%C>\}ç=$Qj„ ]w'|lɶKPg:%A9uGN7lwluɜ/bƍ3(k*;r]uU2Nӣc.#]als}M_(C\II4***T~;hvѢE!k.̠S]v򗿬;ߊ6m/_7)9L.pOj,!00+4B@BaeeVꫯǫkՅBd5ѣmlZk+{~IwEEE߸$1;x`gΜ~^P=N[;}>\㿯$["GTq~#F)I;3F/MMPM5h WӛenP(VGKw.:tmoHiL+4B@BaeJn ڌVb6T\`Q 02\jr'mR+]1* P0(PsA.rR6 W(hC( x$@b <4B@Bae9\\F"M>}ҥ+TzӖ@32ܕ$##OW^v^bcc;4} b׬ÇSRR̘rWxG444dee 4hĈ+oUi 'or@cee|$1--mÆ εkݻ7**?gΜ1c̗޽;Pӧ RRRNZSSVXdIffflllFF!c? wĉ'&&vm֬Yꦢ5ȕdggߐ4oWN`Ȑ!^_&Ю@ b1"1#9rD~(ǎv7nҸ% ~IM7tѣG~7Pg~~,R]]-iѳgϖCɱ6n(m裏u9YY~Ο?_O ~=zYFM6_~s̑ pJAoOɡ tZW(hC( w裏233W>Jڑ`f0||ŏ W;ug>},Y"KLLBT^^^\\\YYi: wE>}:lxX{/h۷oׯ߃>sNfe9y={fddtM+Vz /$+;;_^ :sA.rH(q@xPiQYGCZoQ0(PsA.rk"$++K$(PsA.rQAf_}޽UKOOӧ… 9  c.#E.@b <4Xw5H3f͛(hC( (w㊁ҠIζ݂`Q 02\P㊁ҠH۷wigC@Bae9P^^^\\l5sA"1 rsA"1"W W(hC( V㊁ b1" x\1T\`Q 02\+ƒJ+ 4!\F\;q@xPipF1˜˼ۓz_롇w@\1T\`Q 8r=t5S.$t@˘B rwySm]aaYf+q9$/c. 5I{뭷nٲ@Ȝq wi99yG:4Yl} ] {ٻ * P0(g8J4ANRcY7 rZ.>~Eg\'|r=Ĥw}?}E5"_ bp朼Nn;h9ꕮZD6W5¾5lq)μek׮Ν;_rO~ykoh{HW(h3eutkA =ȭXbHC6F:s˓m۶Yvma[+}][:C{j233cbb222~s&ԩd}{2k}&''w׿>T4^}U8qΙ3Gڋ/3,X K~ ?.G\hm&*n߾]wfzKA5j?񏯺*zիWtt"1k?І?* P0(g8ָb[t;v8nܸ &HC6StUH;p/'N~C=d{M<~/+iӦY'YK_Ұad@:m$%i^ZOJ4GQMj巿miϜ93**FccYDcƌ`mr-/n;3|͵a5SX(gΜ׫N,Y"T/b{t󡀶DxPipF18sN^QO\޽-Ր.jyT#C۶mSoh |RR}Zqqq~k pԩݻKVA^}g1oAvbcc}^3/֙ZPWyIVXqү_@ bp札e,w٦!++kРA#F]>Aޒrb/w`}Ѿ}@~R@ЌW QipF18sVQ\25,Y$333666##8Y]6>>~޽QQQ?š3dwy邂SԨG7vr'N?~|bbbnf͚BŖdgg/]7|o߾rC ]J wqyտկԦ9rz5_ j_j\2''SN&;v뭷x>Ν;[{WZW(h3le%E.cq!ilܸQ:?#&ƍl^233@䜭9h۷oׯhÜq x$@yyyqqq0b <4B@9g+(A.r%A 9[G rr<* P0(g8J\;q@xPipF18sVQ\+ƒJ+ 4s2"W W(h3le%䜭9q s2V+))yxꩧBs{pj/8ZANO@@9[G[7yO] U̚5_/ۻ * P0(q9'lem 'Y+[o%b˖- ㊁ bpNOF סɲe JA <^A.lCS&{1릕}?jZ h"KQ;{+'* P0(a铴qyUVf_&{G}ƥ::{W!Go}Z8 bpNOF>IwМG=wy'777))cǎ_Wߩ!_%7նh9{Mϟ;w6mN PVVVSS}/==]_{/uݻ׿ևԜfԫ*='N9sH{z ﷮`m?rDus/й.\h]A/769=yu$mAsV\)mʔ)yyy{ll/r3fP#GľPw#zw//0un^S< =~/(J{ڴik֬җ4l09,((q;/իW&L,'lQ5GSgΜo|Q,l"1cXWo_[n>7]6}t 9=yu$mAsD-T/?]Jf+Q/ᡇ6G콦$9y_iKu/gΜQ_t'WTT\pAʚjΆfy믿^322dwӧOWWWK#..om[as;XV@@䜞<:}69zrӦMSm5xKqĿ_9AW^;w^~ujcx֕/ס*gV7T[ tn*RUUUmIDAT*a铴qyCҥ~o}.N'(|.ڿxNqĿ_u3fK/twth'kiii6mN+V(**3f̰kNN?җ|/3VʉYWo+΍_†T\`Q è'i WWK޽ >5\#]w߷3r8_|Gy$###:::==]hgyfqqq[n]`AvvvLLLbbb^^^qqmeXEg??,O?Νg>Wse9y_@(ZgW(hsz0Iڸ0J\|I+q@xPipF18#EW W(hs>0J\{&ϟq@xPipF18#e,w?IRRmݶw^0r"jhС֞ .\<1TO>,+N\Dll1 f8* P0(|a Z?WUU 0>)JMM/ii А5hР#F. _ûeb-J+ 49y%]almGO>-.%%%99yԩ555رczk\\܍7Ϫa[ʚ=dɒ،gyF?YNEpC^:''GP&J{ΝIII\vZ9޽{>c̙3fhwx&>?ȝ8qb񉉉ݺu5kV]]~%%%K.8%57۷!Cd>"s>0JX?:ujʔ);Qƍ$0zٳgQFI8{lyyСCUpru:$6n(m裏^{JjHB.\{QYY)6l羦_뮻.Z,2ydi|tޛnѣ޿#GubFANV?Ο?_Owo=zXfl<%5yҤI.ɜQF}ONNNHHFVVֱcPEEETTԾ}ڵkSSSQVV&3?So(Z㒲-[VUU^ANl'钇3_z%0o}K:?{g^Em &e@#°MEGGed$ ۰)j ,aQ!A IMj^tw9$}Wum]tz']v7 Jկ_ʕ+>s h޽beLhf& #dx9sDEEر Uf.ضm;K#GJaݸqaANcٳ/]Īm߾y =#OYWSԩ3q<())O]L};učf?yyyv93gFDDU6L1 &wQV|}}z)=dȐt*fOOOr*X~=~_~t435Gy]Vn%hӦĉy5:E?sfƍT`S@01R9)wjك└Kfbu~'2_UVR>4ÇZ`` m/5} p,*.G䑘!FM0!CLIvte?o޼9{5N3Ss$eӧ 3F~Wc̙3c=F.QsH0r@ӁҀ) B)}qah@L GJa싋#@E3 4` p ?P #g_\J(5(Ҁ) B)?P #E,UKF1{le^y啐O/:DY}V,B)\#'''**ڵkeǿ=z8p@@EAAGvv$FLˇJ(U`O#?~jqq#GJa+#G|XZ=ϟ>|xVnŷ~i94)eGVL)AAo@i @ rdFξhH7"""6n6端/\@.$$$88xذa/_+Vc 6d=,^8..nݺd4[f͊QQQll˛6mJڵ{W6rONJJ 3f֤I IQ0soPќ1p:P08Y(/rϧ{ )ڞg:sμrrrr߾}u}رV,=`vVǎj6m4۷4hPQQQIIɐ!C:v@ms2r.]*((hݺIx5ۆ 5jDU|ׯ'7h8( A,M{Eɜ ٕJpWXXqavڰ0h9"ouI//s?Ǐg۶m FԩSy!AW3gNTTԎ;XިʢR@ Fs@i @ rdFξh]܍7N:ݻNc0W6r˙V]v%ةS'[gn"={Kɪj 6?~bL6c)#x"tRN2J>/y65S@01RLj#de*'C&..?ݻAΞ=[Vn4ퟢVyyyvZii̙3#""mM9[nɗ/_>}t6m&NȫQ?sfƍG޵LgTJ?P #Wطo_tt7~aaaYϚ5Ց9VNLL m۶mZYVC}5Wc}9sc{dԭFUY(1Ϛ9DQPP^TT,@B,ʊ5jTvv ?P #g_J(jժr:w`t1{Ҁ) B)}8墣###bcc0cS@01R9DkTN|||t1{Ҁ) B)}a5#**Q۲e > {Ҁ) B)}"+V`΍hڴi˖-D( A, 0Gko=z9=@i @ rdFwq_# 0r`kߑS?@5B,})((HOO#8#GJaR9WBL GJa ~`=@i @ rdFξ@`J`b# 0rr3pP08Y(/;81{Ҁ) B)}+`J`b# 0rZB)?P #@sNM^,5 ?P #W`=z8p@Yf\%X:tq㆘o\Enyח_BYם|`+B)}Jh Ο??|VZ)+݌/q5e簰_q+--IHHܹ0xN>zX1L GJa싅iUˋ^p]HHHppa._LfO|v4oCt#CGASf׮]5DGG%D鴴ɤ3ghG{+kfɓd)Ν{y^Y3S;um:tmfddm̙cV7$#f,XJ`b# 0rłܹwqP( S1|||JKK5sXm$%%OC5'O)SR!96caP08Y(Q(ʏO{z=hРgϖ[7UşwQӧ_~=??SN-hPԙ0aBXX9rO?M!CS5kxzz=U ڵ+Cu8L͑QڵkdgΜt-99˧OnӦĉy5:E?sfƍT搌s`OB)\5(==(ć~Ϟ 5k3j(-UbccҘ[trSC{Cу<4֨ "vȘ)2y=y͛7gifjt*۶m˾Eӧ N~Wc̙3c=F.QsHF9'rdFZM+f͚eee)6C,U'ϟ٤I8rdFξfgg {Ҁ) B)}Q*>p3J`b# 0rՒ[>;rT B)\5(==@YrdF\Y("GJa ^ 3pP08Y(u#׿&o4H#4UgҦH´d@2k`J`b# 0rr3pP08Y(uS)SM&>SӶm[ٸqPK8iӦf5 ;81{Ҁ) 4BZh6X(effɒ%999O5aVY`?m:t67n\ZZzsśǠ7l^gPq0cS@01h#RlPgfW^0aBttwTT3rH֭N*+jcTf-4p,uȑ#)gϞ.K{Lb W;v2KMNNtff&ܯ_?rhҤ(--ƍT=+ڲe Bjj*5W^۶mY>VիSRRF!+jcTf-4p,u~PP9s/)GL.}/^d,CVW.,,(Qa*{KJ$&&%KDEE>X>T(}…b1_Q PG 2kـcT̨#Vcnzϝ;wc5rHVhHT_WT3~`=@i @ cTf-4p,23SXXxe1fCK #p)1{Ҁ) 4BZh6X(efN%f 4` p MıP* 8J/=zT̯WILĠ8Jj)J(81{Ҁ) B)?P #E,k# 0rZB)}+`J`b# 0r? 0f 4` f%%%`&"GJa 0f 4` =ܹJ7Ú\zUYzhׯߦMI&(L؞艡 GJa 0f 4` =&ÇoժH|ѵkהYNE;tЈ\eUɀk'zb=R9( BO0 W_yyy . 6l˗֩x7o<ŋ֭cޡ9eΝ;7!!"//رczE4-Y~}QNMMmڴi@@t)5xP{# 0r( BO05:{СC;wK[\\L{cǎU4 jW\K5;w^z{aͧNڭ[7D4܊+XzGӧ~XfڃjrdFfr(s VTXXqavZ4ܑ#GM*kN<#ƍč7heQ[2"++Salٲ׷LW?P # 79v:uTVw^AAA>>>FNל[Lگi&*rdw[}1'r 4̚^~]J/5?P #܊䤥}:y$ ?ڵKӹ)6NItt4?,SRde_8p %h^^^K,a`T~S X%R9VֈL\\f޽ tYJ:ujƍ8v59xffsɓt痝3%b祥999Ç`/Ru(}q94ŀw7#GJa ^ 3pP0`ϸ>CBJϚ55j%FN9?P-Z2i}9{BBĉſ#7cƌpjޡCTKP{# 0r? 0f 4` C6==HYb# 0rr3pP0SjڴiJJU5Y(/;81{Ҁ) Zy[o522C ,|@1R9( =mԨQ\\\&M ?P #g_J(81{Ҁ) ZrDƍщ ?P #\[ӃZΝw޹e8jrdFPYbcc۴i\-D,*wq3tPXBB):ȼEFF?P #g_J(81{Ҁ) ;rA rdFξGZLx Ӎ<B)}L GJa 0f 4` p ?P #g_ wq0cS@01R9WBL GJaR9p-rdF\Y("GJa ^ 3pP08Y(/Vq0cS@01R9( š`vIHrzqeaM^,4|0oӦͤI nu㩾XCMB,`=@i#>UVJ7c8]vM;tЈ\eU XCMB,`=@ipA_}/pYaÆ]|̞oxS67Xxq\\\ݺuwA˗/oڴ)Ю]#’GeTj@IJJ:uz<kP# 0r( š`Dt١Cvܙ&''۷]ǎhɍ܀+WAJJJ ұcG#ȭX",,W^}QJ>}kҬV&Y(6JĜ8qzxx>|m]*Mg9"?~mn۶ۛ9jKFdeeyzz9-[jV!GJa.ƍ;v :u*+ڻw/x RMgVcu `~f5^ jrdF JKK#vIJP@ٵk$''6 g}s`䒓H ג%KJJJhsͬx ]Y(6Bō?m{РAgϞS6nHcǎQ:688xׯ_ԩS\ii)YÇGDDrsstݺu>~x.]XUn@-@, 0f 4` )**JOOWY6C?ߟ=a+..NII 5k3j(}UbccҘqtnF;ryBBĉϘ1#<<ӡCTރb3@i @ rdFξXV ~衇9ifҤIz7Z]zUY 3Ҁ) B)} w;wnm۶UԹv"2;tЈ\eU9 baP08Y(/䮰=_}'_xq\\\ݺuz>}:)))00044t̘1͝;7!!G͏;&v{ĉϯe˖o7r.\>|xHHHppa._ahZ~=,ڴiӀvԩ֩x8oݦM'ɓ'w/;;ͻv&&&rջwA={(nܸw4''g셷\*]n?N`=;vdUnrdFSTT.)6a'էOQF~-Z9b~LW+SRRg͚ś#@Q3éyRSSy4HLLd^k׮rT#B)\u?Rj|п9rdFSTT^PP, ?P #g_J(81{Ҁ) Bk\߾}0cS@013rL`ݓRW#))I:`J`b`KRrJUFT7xC:`J`b#V0r( A[i@U"V0rPȽfieT F@;/9W3(@=@i @ F0 9j#`J`b Fξ@`J`b Fξ@`J`b Fξ@`J`b Fξ|,3pP08Cee0r`_4}c#GMiFiFiFiw-9<Bӗ}e\ L74iRZZJׯ_4TgL6w,ZMVVG6F׿u=C 6sc+Fΰ#Rp'_Y(3Ҁ) */7h7(gɒ%999|Xr%mX(3yW޹s* :,-f+v"lgF͞=;""6E/ޣ:Pf +PAՑ\&92I= 3J`b ھLP4ی޽;mvta/_h__߉'Ry"m?㘘[nǧSNw+ꩧ;9ҺukSE^:a*zg\ŠX/gPw}7]m^6rW^yA| Y}Hΰzb#fb"2Lqxe4@> {Ҁ) */7h7y16z-wҥ9s:,a 6PGͥDbb"PD-[hH/bzڶm+VVN}$''S:33{E锔#FEFI={|w_J?c5ҥ?m۶ܮr[Bކ6)mK꧈SmU&wzaP68*/pD&OcL($pP08Cee7/ }||(-áR;sرVZQ}r4ےLjbEuʿ:(VVi`2)yqq1gEp(̙3)M95ϿAr#W:<~YZo3M#J,(.1{zY( 2h2qCv|sر7n>AƉɓ'uHBs%P~}^A,[`>fh0ϟQYE[1e:N쫕֭ck֬#|LP{01ڼ~sXoTK%Luӫ `%r4` p ʠ  n^LǏ>`IJJZQҥK===7n~RDݖ ^{LގtJJ ۴iCMKK1bO$<<<ۄ ȩ9fOf&5m_&n(nPqB$#j!ھLPݠp֢  On=zTNrrsser0cS@01TM_fi3pP08Cee0rr3pP08Cee0rr3pP08Cee0rr3pP08Cee0r( 2h29/ F싦/#F̞=[[عs'ݏW^ݽ{IIf~M\UT9(tPI4}\WY5k֌\xv%ɉv횲8qpءbڵO>~~~111cƌ),,TV2d/r_ 27I|嗩tѢE {Ҁ) *//WB:rt~;1pP08Cee0rՒPe0r՘e`h2Fo߾P#bT-&\~~#))I:`J`b@ T@0$_h'ReFn˖Y~yBäI_vM),Pm02@1`jIΥʌԩ/?^>طȂ  * P40L- ڹT{ŗ@3g*-UDA B;9D5QMsjC>@u@3SԒ_h#[ |}" LSKB~ ;oj0' 6 P40L- v.0rjUڐ''B T@0$ڹ!qVsjC>@u@3SԒ_h#[ |}" LSKB~ n,]Y:uU97g3fn6OOOڗឣw\mYg]v8{C>V. ^g}!)iUlyTf{]m/N^N0v8jJa8/s۾}z{r1O<1СLHG``PBB;D9tguMg8cvA_TT4Thhg-HPwz;pฺ7|G>ki_ CO? [ɜ`8|ܲ%M>rB}:kDҐ'TρF.P/ Wa8 ܺV0ry'xk=;8 #b-ԗψI͚喺jfuʄFҋ ߧO={EW5`I)v.3r_|mHHhX|AfVm7o'Օ7K}EMLEδ_~'44qp͚G߭2:94"8-p\ޜ`5+gc#y8wQ߳o9:>sKc<٫xᅗڷV$a!. A=ZX왖wOODÂfñν՗ϡi}u\ Ҽ'Ǐܭ[OuJ ]wE\1>} kS \lg=tmwߝhQa ڲe-mݺ֭;yg~5|;+o~(8 1| dƌdxW}^=Am.nqlqu.9 unFS $c'DFFюhw>WV+YU Uіt7|Y _׭[/5ub,yW7'4JLr ~IL?!|*ӻВ=ɿZri_[1Ɵ5,gF]ٳߦ+}iN`ut+u+40uQ43.ZO#iS=)0] uW~54]slTsrS+{K=zZ]d* FJfN/sMt*)Q~n @eEt~~9|y9sޭ_Kk^WTnOGIϞdw)AwN/ [4{UY-y*|"gpXmϰZ]˧#FN1:-Uk+̀X/R?񶢦xcSOn]/=kE/C3POKFš`j$jB;{9{jGujz+MݧU~ŻCԫ0`pn=O-22]9wă[O;; Ir_]IYM_QЛJ5H,uSӧ࣢e˄޽M{5((Xs>b[9!ꓽ8ξ]#&ïpo+/lۼFN|ݻPrU=9l.^.اv˂#G+yBFn3c.ސ.ƍyhJS^%<'IG KyP/ wVSMQswx?ԢjK)EÚ`j$jB;[w6hX_t֭ۊFw]D_lddFRH^׌d>8^GG1hay4t.9 d{(M0Dن K _0s/ kKuA;"qﹹgBBBcVVcbbhF4]tn;p5zsKC'0'W//sJ5_"jժ/֭MݯߣE1pxȉ!OٳCwyه>a׻ВU=zHvsi_-sϽىDby$?{'/Úfapΰ+7щmwdBr/4;%'?J0ŀwˋHhU8;-ZJc9s.-/(*Q5W="aM05U5sJ~_#ݐVGGcſ(?ܬY[nצM^{KVVHUmCּO=*4:pPHdzڵ_wة^0q_""yzzW͖˘1ϖ߿'+Rw'$G$==o4t|/,ٲ5tO!I[ɜS(TF2&LGڲ%sP>iի m_C'R|>'4<{y~$z:_`g7Nu.˻Ad*RO"u]{)Z}:x_w> SQ5Cs<_}8zEݏS^}`x8qﺫ}`k|.)uH&Q>]#-Co͡:9 kc DM_hbG#@ w*`N@Tm賒o_ 7oޡ.m;S?TI% Z \`8yW9Q!O:߶ѲeBj"u>hJFa_h#[ |}"TI!l \`8yW9Q!OO:`jI/sCTp\ DՆ|>>f%!FQÝ p5540Z|b[}"0,kg_HJzDp>ƌ7Mn-_x ˂AT_h#[W k~A'4C^Kno=,}Æ Ў>lVCs5^*NPGDFFw_O?Du뾜>}Ɯ9k#/u}Bы,"~i/Rw Ob5A#qL0dN30Ԇp838*3rӦ"O a]`RXڢ?PhѲ{?5_f ܲe-mݺ֭;yodinNo[5|셍M<=&&h4~dVg֬[RoAAIIi4v2c쯸VG>N+Wn:YY9|aRBCy)E>￿)?|Ɏ5>p7ѽ6y_&Gx2$$׷gχyA fMG$Xn/:߅\Z~ڶݗ_MԄ6/V)gEh// Mw)Ϧ;f:*ّs_> 0X_djC8K?ߖ#s'_vM),Pm[Xٳߦe}l. +d#;Pw}a]^}D3[~Ӯ]NaE<w2%;-7m̘g셍' ?w{;v쳭tcu22VQekY~ v8tH:g^{-Z|<}~ZzjÓТE+0umnZDd~ ZΟהdGN  Y1|iiLww'${QZ|b|F%;M-ZF9G4ǩעEK'Lr=]i2mګi$=4 \<ȟJ_#XBsN#@ϋcA^ݞ$AIf͜cY^_2LHhԯFIM9ّsBG+dӁExɧԫrjiٲ5u#kzEܤ:?3s=F1~񜤕ý-5~@@@W_|mC#kqJg_u$@A;ڜ9Ҫۛ'×)5p.s{"ߪb>+NJ[A'!4{k1=M>.\1lXJpp=rX_}E ȎJ?,0r[yy7|i7nѢE+^;[H>}fYާwߝW筷r/XP2o;wT;WĻ~DZ: , ܭ[_6w 89#G+&R߼yFA$Xٳ=((V|BZQN6ӘdS53u 63ZPLG `,*LĴV$CTWLSc_<͙=,W=/=ٻ禧:RtKSE\7VNj0 5Փ<R^^׿ `pfl~mfn昘_|߾;ƍOM]ڳ)Sᶶ>滺n> ?33sBC?ɃVc r[ !X*MskVw=/mYUȑE^>R ƽQ=> `n9sQYZ_GmY]C3:gs@ ᅴb;kFxRgΝFkg10iҔ+ӯ\x8LԻ(76LX\dsZnfzyNZ*r/$'%X$ls}Jo˖B~mnx0Rq=+_6>ݑ2/$$ bۘ3KTy2&9r:a#E "Ӻɱ46H'j zUT쏍S<  09%-z hh50Ŝnh8SRRpv=T^^-sa#E FF.11f:rq^ #$LF` <\@X\0A:a#X@OWXcsI(=klxե | j==QaaILdmfI;+s%$$UTԈ\XcsQi&`:0rK [ ͟=xw늍'][={,\~k_`G=h-X\ds4lI=6l=g<9x#gA3V]_i.]9O#؃ 50ٜ [= I͸F;﬍bp-**aj_2}ܸ \Vw2́ZF%&&75umg̘9jT`r򜖖O)~^l-SLEdejcjj꒒fѡ*/gx1Qq<-[ (""r[i%.MBz,[\ FK^67pŋ7٣J0rK`h\=bhon 9.;p߾} [<@uA:T\s„0?=ǎY?}_pȢ)(<KΝcƄO>iڱ\?]`Y_Z[{hrr6Q@Y< s_gV9"ۑ̉#qc1132ְC:ɆmS=6m*C.N&[,F`0rK#=]-`Fz[,t#X9 Fo#yykkݾ}Fo#{{] @N瑣G/J,۶~ >EEF| 91`ǀi&1GqIENDB`onedrive-2.5.10/docs/puml/onedrive_linux_authentication.puml000066400000000000000000000044011513710110600243410ustar00rootroot00000000000000@startuml participant "OneDrive Client for Linux" participant "Microsoft OneDrive\nAuthentication Service\n(login.microsoftonline.com)" as AuthServer participant "User's Device (for MFA)" as UserDevice participant "Microsoft Graph API\n(graph.microsoft.com)" as GraphAPI participant "Microsoft OneDrive" "OneDrive Client for Linux" -> AuthServer: Request Authorization\n(Client Credentials, Scopes) AuthServer -> "OneDrive Client for Linux": Provide Authorization Code "OneDrive Client for Linux" -> AuthServer: Request Access Token\n(Authorization Code, Client Credentials) alt MFA Enabled AuthServer -> UserDevice: Trigger MFA Challenge UserDevice -> AuthServer: Provide MFA Verification AuthServer -> "OneDrive Client for Linux": Return Access Token\n(and Refresh Token) "OneDrive Client for Linux" -> GraphAPI: Request Microsoft OneDrive Data\n(Access Token) loop Token Expiry Check "OneDrive Client for Linux" -> AuthServer: Is Access Token Expired? alt Token Expired "OneDrive Client for Linux" -> AuthServer: Request New Access Token\n(Refresh Token) AuthServer -> "OneDrive Client for Linux": Return New Access Token else Token Valid GraphAPI -> "Microsoft OneDrive": Retrieve Data "Microsoft OneDrive" -> GraphAPI: Return Data GraphAPI -> "OneDrive Client for Linux": Provide Data end end else MFA Not Required AuthServer -> "OneDrive Client for Linux": Return Access Token\n(and Refresh Token) "OneDrive Client for Linux" -> GraphAPI: Request Microsoft OneDrive Data\n(Access Token) loop Token Expiry Check "OneDrive Client for Linux" -> AuthServer: Is Access Token Expired? alt Token Expired "OneDrive Client for Linux" -> AuthServer: Request New Access Token\n(Refresh Token) AuthServer -> "OneDrive Client for Linux": Return New Access Token else Token Valid GraphAPI -> "Microsoft OneDrive": Retrieve Data "Microsoft OneDrive" -> GraphAPI: Return Data GraphAPI -> "OneDrive Client for Linux": Provide Data end end else MFA Failed or Other Auth Error AuthServer -> "OneDrive Client for Linux": Error Message (e.g., Invalid Credentials, MFA Failure) end @endumlonedrive-2.5.10/docs/puml/onedrive_windows_ad_authentication.puml000066400000000000000000000063521513710110600253470ustar00rootroot00000000000000@startuml participant "Microsoft Windows OneDrive Client" participant "Azure Active Directory\n(Active Directory)\n(login.microsoftonline.com)" as AzureAD participant "Microsoft OneDrive\nAuthentication Service\n(login.microsoftonline.com)" as AuthServer participant "User's Device (for MFA)" as UserDevice participant "Microsoft Graph API\n(graph.microsoft.com)" as GraphAPI participant "Microsoft OneDrive" "Microsoft Windows OneDrive Client" -> AzureAD: Request Authorization\n(Client Credentials, Scopes) AzureAD -> AuthServer: Validate Credentials\n(Forward Request) AuthServer -> AzureAD: Provide Authorization Code AzureAD -> "Microsoft Windows OneDrive Client": Provide Authorization Code (via AzureAD) "Microsoft Windows OneDrive Client" -> AzureAD: Request Access Token\n(Authorization Code, Client Credentials) AzureAD -> AuthServer: Request Access Token\n(Authorization Code, Forwarded Credentials) AuthServer -> AzureAD: Return Access Token\n(and Refresh Token) AzureAD -> "Microsoft Windows OneDrive Client": Return Access Token\n(and Refresh Token) (via AzureAD) alt MFA Enabled AzureAD -> UserDevice: Trigger MFA Challenge UserDevice -> AzureAD: Provide MFA Verification AzureAD -> "Microsoft Windows OneDrive Client": Return Access Token\n(and Refresh Token) (Post MFA) "Microsoft Windows OneDrive Client" -> GraphAPI: Request Microsoft OneDrive Data\n(Access Token) loop Token Expiry Check "Microsoft Windows OneDrive Client" -> AzureAD: Is Access Token Expired? AzureAD -> AuthServer: Validate Token Expiry alt Token Expired "Microsoft Windows OneDrive Client" -> AzureAD: Request New Access Token\n(Refresh Token) AzureAD -> AuthServer: Request New Access Token\n(Refresh Token) AuthServer -> AzureAD: Return New Access Token AzureAD -> "Microsoft Windows OneDrive Client": Return New Access Token (via AzureAD) else Token Valid GraphAPI -> "Microsoft OneDrive": Retrieve Data "Microsoft OneDrive" -> GraphAPI: Return Data GraphAPI -> "Microsoft Windows OneDrive Client": Provide Data end end else MFA Not Required AzureAD -> "Microsoft Windows OneDrive Client": Return Access Token\n(and Refresh Token) (Direct) "Microsoft Windows OneDrive Client" -> GraphAPI: Request Microsoft OneDrive Data\n(Access Token) loop Token Expiry Check "Microsoft Windows OneDrive Client" -> AzureAD: Is Access Token Expired? AzureAD -> AuthServer: Validate Token Expiry alt Token Expired "Microsoft Windows OneDrive Client" -> AzureAD: Request New Access Token\n(Refresh Token) AzureAD -> AuthServer: Request New Access Token\n(Refresh Token) AuthServer -> AzureAD: Return New Access Token AzureAD -> "Microsoft Windows OneDrive Client": Return New Access Token (via AzureAD) else Token Valid GraphAPI -> "Microsoft OneDrive": Retrieve Data "Microsoft OneDrive" -> GraphAPI: Return Data GraphAPI -> "Microsoft Windows OneDrive Client": Provide Data end end else MFA Failed or Other Auth Error AzureAD -> "Microsoft Windows OneDrive Client": Error Message (e.g., Invalid Credentials, MFA Failure) end @enduml onedrive-2.5.10/docs/puml/onedrive_windows_authentication.png000066400000000000000000002717731513710110600245250ustar00rootroot00000000000000PNG  IHDRlB*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxVMO1WriV TU9$P QzN6;f6!"Dzl>W%-sh~ F,:Rr]OuVy; ,DBM3Z*D+)=-81h>XOͩ61Vvuax>%|^#`l32m kڈA*tť=as[l{oBXNߪNF}`H zILSgn^FFdBgƥDaY{mVX14br/@%]a&aRL Y{*Zۻ q/3Dj{̅y"m0(hF̋UN߷iey#bE6}Ay{6qViQZ\Rp)ĪFm&?7%y-~"n үZ>_O9tnb3FG]MR-s/ FWuJ?.3uut5^tWɩ|pbNk0t*R E/8 ࿚8aZy!Vs]M k7̵ ΟN K1&14=T gvUV6 :نEfr(IDATx^ |Ws4WW`cٯ ` uUVZ/`C>O Js̘1KfbP5F@VPhUA4h9 akn- uFXD#[ F@VPhUA4h9jh\rǾ}ՇffoڴD}&[M=P$b?33wys`!?_^Tw}7$gΜ{j٬yzsܨQz3vӇRgsXgPPpN]_xoɭ{ϸA4h9Q4FEEϛ|21:CU&D7Pc8S?:44fͧ99{ouS#gԙw۶?lOrڵؼԙfCUD#[ F@E3ϼۃ5zI\)`y''Ĵ׸qOVy;uJ.M'4a‹Q{Y+}7Hz{{7i1e̊zu{z{|sif=vY/}Nv%+k7Ϝ4@-9q₲~[ԲeaF)3(5k>u,wEֿc}>(ѝPFg{۾=R,YެYuZ񩧞 i;_şOߋ/xwz~KѣEin- u˗sz|IniƵkFNA=?waL)scΑ0ԩkPP0ɧ4;LI~*DcnQCҮeF(oNlhT yw7z y4F:GƓ'nwhjJ. .M1bLHH~r_-)Jc?O%B穼!k՛*G]٫h䦟*3(StH-/\U֊s׫ѝL'+if&%M>YRR"P^H7o.Ow\,>|JmR))iTo1#c#rF>~} R>ե>|^!efGFF1Y(ѝ%##%￿c.?'埥s$sI'+|$ɍ? rCBJz:֭ێ4#ѝ̥Z4XM6L2t ujY`E2]-IRN4ifޤ^|=?_ݴ2#1)'"11-~K,}99?hOlDnɶm;I6m>"""y'.8,%&ONm8U, S=y 8q8s^&HRkYɍLgǎ04S{?t~zMz,||]Orzڴ9ܡim;w4C 0F@͟h9E7pvlE~==_~p3uW,ivw;s/lٚ8vKӦ_pXJR kSO= 9_;wZ>?m3JO_KV}1h`M=={^}vr99y?4a'kׁLNoN/^生"S 9`..il8Ј_o\JYdyfȐ e֛ vȣ1S)y ̃^~ִNQځ'h JS7Xoc97]mF5fz )EǎS2nd@4./{IfX+e*a?O%C)?ߚ5 ӠACy)y-ԪÇ?XyTm;%ShʹyܹrQ(mmtt׮txcuzѡg0-m(\Q]ii+iz====N}tGZQ=<_JN_^)04>/(22jCROV!( HPu5((xР))iyeD=Gh~%I)g 'oiMrlC3^ǎ]>lD# Th9s6 㖒_qSqyiO=,Խ+*^thժO’EO})w)[Q^VJ;yI)-)by?YothdNh GgT'Q0]ZP+땜"Szڵ&'/V:h6;#c"7ƇwttӸ{QO#!vSAAAҥ#F iЯC uN$RH<)vǦtf9$ ^jݺs/PTl L7#3Thܺ5K=a0؞=/k1 7j嗧nْí]7f>++9)i_OddlmZ(?t~  )YYHz3onf;%;{f4;22K>/JKK}v"Mꂰi˗-4aa?TOCFcX@6pKIIR~[$ϯ+4'"?B%9)@5mBDiCr$S`.&L^ɶo߷K, 0Xj#I#hڴMqǏ6`w[,#&_OmZ~{Ab_yYz e)ʌܒ7g-v>=v;d-]4ΙPvrM>9-[5 iݺ- OtxL1z.999h2151P<)I}yZ_ ԛ ֮6mڜhd H/4D&.]~Kx]YiBŸ<==Irdc9[hIm]Lkۄډ$I.Ù\M4t`0fs 0Xj=bGGح"-zE"D8Gxyyyh Ϛ5;իй]g/0RJ^ -'MBkZ0_ayhaDhmtҺиÂ/+|H!VW{:V~C=Fn-fԨ"N`FgqW7"SL>ݴnjsjѨ7d~]=zX,N4<nH0;h>yx࡟|ҧzI39LJ_o&ԍ&9$7y`5&D{1 foO3e.˶5L16F&Dc%zM~G|Ԇ.hd_hshjA4V)_ªy'Lm2FXM66F&Dc%zM~G|Ԇ9e:b m.0XM4*KX6 1s0u\ ahU 5m Sb!`/ܒ&|֬M6|es4\͵rR*E~|ᅿ 8ۮU#&qk߾#&X9UfYŌUm^GfUYi!Tup9*cBK+-K~Yˣ&_Do(LgΜ{jՑf{7l6ڴi3dg+Vu 0rr<؟5jرO+kOxzzwԕnr͵ҳ]eC]J ^)*Er;aee}v+?W>fVSfsֲ-V~׋Ou4V-savh&^ba e3Jy≱< S]w "fp9Hp!ds(`D-z9jU~ͥFZϛ|21:hXAyu1)`=ttMl7#c#lzXʬYo?zH]֠`}סa5k>9{;t|9lXmI+9_ulvE{Ao kD'EWvC|?{3x ov]^bgCZ4`[mۼ^|{ĮPM(5nx1JQv3"rذQ%/-ĕ"f0n.ONRՙ4u8\* #U娕W m.5T4>K=XJAA1-}v0&ONiSq矟L.M4a‹Q{Y+}7hxx{{7i1e̊zu{܌f`ƶ>~]))i,aʳc4#o߉Dfǎ]vl<4}p=*G˖exe6{:]^﹧?HtӦƍ{JL4D |e)=oZlM7WeEf͚O]YD^褸DƧs._CRnU~Il]YQOدC 5_IC0|}wsTv_[XCI{HO LaS\kD4xPuVGy"MY{CJz$&m%3`s+0 gQVѝnQcƪ I6ЪXpp[|Lr"Ĵisx4Hl/ʚ.kT6J*2'֪ g#\k娕W m.5T4X_ߏ ,YY< i@~Cgayڵj'99(g/(y/<<'{X# jFm=6Cr8~dbz]ad;D؃SՁ% ?jyqLF*2'*3~ ]-|e&RsEEFFy ]f`]vmXg#l2gZ*J!GѩSנ`l4P΍+ٗ_ ‘Zg?`b۹Gh O5 oSO=۫WԳ]W9[1#tZbby?Y)yx㍷Ef 4yN.Ջ 7UVG<,)5HEFZë0zvg]՗V._/\H[ `uX_$ c_J nd+H!=~ٳc2dDXX#oEpS?$i9{I-a}!͛^h﹧7ml-X*8,exxzKJƕFy}/$ spE:j,TUl;دh-7?4~kƏҹMNSha͝xS޿@8y?hʻ*bF Ghy@hǎ< h[hI3wn2%-%äOt`q6α&\х6-`P4i ͹4Q'fj?_<>23wѓM/n'q///OQ!B#3엢}o$yH3`Mz_(ʿbF 3R4I}$fSxRdR &4sJ ņzWY/L= mkÊIV._\jh`V*Frܿn]۶T2n/*MV7lZ6/OA3e ٪(f]d^oU0[\ ahU~ :]b6}1۷ؑ7{ʰ:hwJIIS3 3h. 굪eW2YA4B&DhRL_:c.ivZo{`jMOX-0bƔ Y&DhRpUoO30 SGL~X~ ^0!f`NB D# V JV&#>ajC2L16F&Dc%zM~G|Ԇ9e:b m.&L>s FvT DcUoO30 SGL~ͥD̙sO}Aƚ5k1VT< {?9O JO`S#BKƋ/͜99u  -)ifvv8`lݚ5utu`UjII͙zII7qC2L1DM4ŗ_~)&1{@@t A0f i)0`0F`C `= ҀS ``:81{@@t  -q0cHN@4;x]`= ҀS ``:th D#] uaq0cHN@4;0181{@@t  -q0cHN@4;Z`8Ӂhv0" 8p uaq0cHN@4_ٽ{?,0޽{KKK`L`:*b&7bDM>򤥥Tތ87j@4JIsҥ#GvAFJN:C}o߾۷_`y_4K̛7/::?**_'JEX6%6lC}&LI\r[nE'NP[6ڿ?/%y.G~Jz"L2dŋKKK ֽ{wvZϨcǎ&ML駟4ٰۖa}u;f+WGN4vJ*l$nCo\i)0`0F`Goh1bXh#&&Pqqg~~>ݰaCxx8m={r>|ZJ(]ϙ3g/]RzyfNMMmРi9\4lfSQzzzDDQeqeێ9BBZpHLTRu#p'z3HN@4;zCk7nܹ3,,lʔ)о}<$#88ϯ,77ү\²HۤMozzL8+W*ivZϞ=Ǎ*X9m۶T " 8p .,H'[~>:dȐ .ʵ-[Xz޽^zܹXjIHHHRR׭Vk\\W;~ hs6nVCXEJ>///`g+شie&ŨWMuyĉzСC|A̓qq:qF.,,{x " 8p dxS1cƄ[,6m̛79u 메v-ZP:)T'??w҅<7n!ŋY A)Vz1ƄRP3?ۥ ???3fPY5jDح[m0^)D#: AU- D#Z hU D#4^3p4A0D#Dp  LؑQF)H&{ dY'-@@t ˋvOٳgObbb+zЬWd EF 8cǎ=zw>sВHf L8Ӂhv$Ck/ʲX,o&S(&MqFGA^eSE+W4h0k֬Ҳ2r矋<@=/:dDi)0`0F`Gu7n4nx˖-<}O puI/_9rdhhhHHȈ#^sfddm߿k׮yyy.]mJ,gѢEy˖-kݺ/@JӧO7 \-XF<ٔLʖ 8ٳ0o޼h%O.\ ~DZcEy睹x91(((,,,11gV;CSUm-;w}wЛ10Dp  LȰZ$}L02dŋKKK ֽ{w@Z~'ND||<)+Wu֍F]nݱcl<# 'N[R"EyЄT\F~?̙3Ct ={|Zʣ\47H6gff+3NNNt钐YjҨQ7oN:t{ڥPN-===""VQ:]%-ܱc*++@]4~w[PPps.;jȔ^H~~~ ="'lezR+WXV^~T^:66aÆbPׅ {CqqqYYỸC СC[`O4mtSO2@ƍ75j$8sLE_QƢ"TT۳g2]alWR'z 6gcVXƶmX~ SN )UZČ" 8p `h/_hQ3p4A0D#0f i)0`0F`C `= ҀS ``:^3p4A0D#] @F@4;x]`= ҀS ``:N0޽{KKKݻw{xx/Bz; 0IqsσO1@-8Ӂhv\ZLKC=zTdIӧS4 A%VR4FUgϞ$&&tpA-ƵgA@t ׆RCҥڵkB˸ ]H uԩG1&FϺ2JʲX,ofII N4iƍb>\yPqmYi)0`0F`ǵ%(/ˋ/[u־$6Ν;7pDIqoTĉJO۷o@@@,X˗G2bĈWr?J6lxAOODMqxy-bm۶C]vcE4OG8;wZ,sK9N:SRR3i9:vK.i9TH%{3fStktσڍk3΂HN@4;.4$ڭ[7>x~RCʕ+EEE;v4idsss)S n)$\$$$ 0!&LM7CyUѫW/RD,QS4[!C\xtذaݻwg4OG8k#33aÆu;vV.#<h>TH?sq!Vf 8ӁhKH97&9q o<{,>|GDD駟7n,_'$\j.Ş,}Æ l[ %͛7vjjj fzfgg7gGvV)6U)*U7R iT? 6sdD#p.Lͥ+Wݜl{ƍ:nݺ ta*U"88ϯeL6-22}%ʳtRyrѨΦn;|-[?>%V^۰aCjbT='NU*|wQbAA2VyPhcP4 V\ɟ4L&4tпBq]EEEqi o |||O78v={Z靎f~{ڵ={7"Μ9b 4m&oS VN̙3DLZD#pV\BBիWϝ;׹s'C'O{vR{ rE裏2… re'xyy;[M8)FDj1'NC1=y:.I|=d?~R8lJբ1+++(((99˴{)v[[%z2 ^VCtR':n8_o)svx8R5ox3&<8p`ӦM#""۴iP1p4A0D#_GL.P HN@4;Z"#! @4_x%KzѾ}m۲afͲŬ:D#ٵk׸qn]FEEA7Ph6m @ؑ.<48A@t &xˋS@@t  -q0cHN@4;Z`8Ӂhv0" 8p uaq0cHN@4.th D#ׅkw00cHN@4;z&f2&b&7bDVM>򤥥7ߟw#!PЛ10Dp  LZJsҥ#GvAFʪN:Ci-Z+^ {h2eBu9أ>:dȐ .ʅЖ-[Xz޽^zܹX&fIHHHRR׭Vk\\9~ hڵkΝ۸qc[kb)OHU`ӦM}fРA*&닚Z.ܹĉy6;xoܸaiD#p@~`` {`XRR2f̘pҦMyH5D#Su CP%4A0D#Su&hQu3Ji)0`0F`D#1PHN@4;Z`8Ӂhv0" 8p _5jTP)Ⱦ528ViiiDM42d^T]{߿XXX@@@LLLbb"c$FdҬgЃfb&c)0aaahhhIIx@4=^RZԩS=隘(jT*!++bLl4iƍ|:,lUWLU1~\y#yȹqFƍl٢LܰaC``===85i#E􌌌mҡ]"Ν8p`PPPXXXbb",eZnsN^ en //SRbJJ y&aBΞ={%60'J5}3fStK>}o߾Tv\2]|yȑ#F\z&w*槦|GDDGUWJ#GT)6U)+TH%QWZź3??oذΈmk"sw8_&Jk:Μ9흜|%!;(OYY4ћ10Dp  L0Ii"##_N۴[tMpgzQ-776\srrHEϟoٲ򻗫WmذappbT='NU*zwQbAA2V21RzU^$U =z(+1R/ի0H {CqqqYYỸ ODo\i)0`0F`GohݸqQFF __&_ ѺHsl}g=ߥl3+W*ivZϞ=Ǎ9Ҋ+__ضm NU*F[ ~3gmiܭs"oU[7띣Wez:ɳ SN )4HL] Go\i)0`0F`G2F_Oh~M6r#CBB_nZzEv!AOvKHHzs:w {8~8e,,,{xjј|e=uɓCl:n %<=66}G r[*]vzUʂQ+򜚕ڜg((( ׮]+++;wnƍ_~SƑ" 8p H?ie?h !ڵk[h@b 55qƱ.^XOʥBIRH3?ۥ ??? M}s֬Y5X,ݺuKIIq㕪ERQbbb&Lpy[["=vhIIɘ1cémڴ7o˟ѥKnBjMѨ\rʾRT+zy6JmNF*iϐOIߟ:իT`6G~7ԺGQQ/^(P!10 Dp  Lرm۶cƌٵkx uFtm٭[%Ky D# آE֭[7o:D#MzăG찥!iժUff&>0" 8p %;vhٲ%׊-ZܹsJJ {҈Dp  LpblVÅw1cHN@4;Z)FG1{@@t  -4- `8Ӂhv0h嚏0cHN@4.th D#ׅ" 8p `8Ӂhv0" 8p `hDp  LG&fΜgbDp  *jU Ch$.o*cϼ3f Ebb0`+t2k׮O7x6,ٯcU D#fFiHD#k+͛i% SNe| Ky~u+/)S3ض:1ji)0` Fam[bE^^%>c]f O38_~eJ_>Mu eca͆fPc){@@2C4nڴs^^^AAAw}!@JdJnb*۷oOO$aM6}7ecbbիw^)SX,:=zTζ3<ӲeKܱcG___*/n= ҀS `P!-[FBq$bcc8oEرcn޽ǖ#:2zjygs"%`wʕ… y6tʹ?A*,˶ Dѣ,sff&]J_~.]NƔC>2m9 @q@۫WtQ޼QF) 1p4A0TwFb͚5ƍ7zh:}TGvM%˗i[moT"%ķ~ĉ:t#GpͲ,_~ OOOyŊQQQG_NU%%%Lgx^A*)3mϘ1P8n= ҀS `P!x_ER®鸬m*w'L@O?GOgɓ'+0!Ir;44ԣH^6h@SRh$2L4~駗.]R8GEH={;T#W󼩼ITF1TbkGO,YR+Wzyy5mڔ}U ++|Gyxx8mϞ=:y{uYvsԶQF;VT:Pqh۩H-F٦M:4EcfhUVO>4VR1TbIU'3}ݔi&Q3TE.;,GN2NOOoܸb8qbLL{``އpJKK'Oܼys˗?CE{x~8H]v$KH=Luh+Vbf7yW ĿeZg R!SMW^ N;A<rhb$b;& ?~w2l*8h3fʋ)nDp  *V2`hDp  *Ӣq̙T 111Ƴ}v0" 8p iѨYJ0" 8p ASB4;x]`= ҀS `P45 D#;M hVXZZ*-޽?x@قhj@F` 7cVO+s#Lq<&Q/Žvyyy}L0A8tĉ'Olڴ]FeСѫW/.8>}?~\D*иym6?j-úc z:c81f@B#%;g~t\kjjf̘߫W]QRք -Bbٳm(SRR222Ν??/ܹsgY!Cx 2;N3uƾYk֬wn Hh֮]۵kW{s;gl޽{~{èFuak+Ʊcǎ=*NׯNprӝ?{gĈ+W4xlJ퀂F1Ø ׊W{fffv;:u~S;܌gLrc=z|箻؊b1G @bصِ!ChH!( 4! Hh-S?CFFw-y6!( 4! Hh-㊁ֲw{'33S%nݺkɒ%iD(hC8. p\1*Tb;%.z<~? c$4HسgOۭE7Θ $1fgg?#[o1@䔗Y[pc2f@B#ǘ A!( 4! Hh&8 * A`Q 0f@B#|hW DP0(p3 >|+"JCP(hC8>ZA!( 4! Hh_8 * A`Q 0f@B#ǘ c$4nb~i\\\}}?}W ҲrJܶ%%%?<~}P *4{-.]u+W^xAzz-b5f̘ɓ'sssgϞmk DyyyTTԁSʕ+3 >|]@BbXI& 46Bc^KHh Z >|͛cccu ~vB>܀B4ܶ(hC8L p]1lqeϞ=m۶WʊVQQ1~9sb fz'ONN{|cǎ}}WthxԩSLRWWQ$/N [l;r>ݜ*NYny駇  oڴIg{]tҥK3gLKK>}Io/,++p႞AkI] ذaL%<8*B4ܶ(hC8>ZÚOgҤIC 'N|5JKmmmyyy.\m9پ}{Ē%KFiVZ2yyyƍ%sӚZI$v/ݻ8pQ7"6?|~Զ$Ν;ZJ4.vBGwږw=bĈ3gKKKemN2>jxՀɓ'Un[ 4! Hh- 튡GR4Kt~cYY}Z޽[ދڎ* - c$4‡vŰ"yY[[^۷O$V};v𦢗6͑OTKKLLСCccI$,M0>z-4\enݮ^*.\i-DqM6|/TߐtZSsV7mܸqСwq/cdN=uڍhB4ܶ(hC8. p]1vkNdtB&M;NweٳHO":ut}FШӥEttӯn>~֯>:-̘\Bxa$Νk׮ڵk՟عsz/4NtڍXh pۢ`Q 0f@B# >rȼ.X@w-ZرsssCf̘1UUUP}v=$|QиymJ+kuVf|NJfi.Q'L ]O'NH| -O˩SdѣOq1 3f@B#UWWYh^vOcǎMHHHNN5kO{n~I>OO1cFjjj|||^ B=jѸ0cN/y飾/wYZ o!TB믿nxڍ!4-̘ VsIM{޻wWuuʕ+~ӣG7c$4‡ n-fee}߿{}X t A`Q 0f@B#|x01CZ2d;Sk׮$F.ۄP0(p3 >|NZxvۄP0(p3 >|Ns?Ӈߠu&F1Ø  p+o#FtMrcVV6!( 4! Hh_8+(Q܈V_i c$4ZoѣGggg3 ʪ׬YS^^n76c$4|1f@B#|0q@dPi b1Ã+"JCP(hC8>ZA!( 4! Hh-㊁Ƞ c$4‡q@dPi b1ׅ+"JCP(hC81f@B#pw{ HhDTȉk8z#G}]r / x뭷Ό'Jǵ\3  .L:_~A_B.jhh79kll0`}+{ׅprVd̀Fua[ٳgOvtŋ%F&'''%%M2NkfA+zꬬ 6dgg ...ڲe|ȑ>L_ti̙iiiۧO"Fe G??4VTT?>!!!%%eΜ9*[φ={._$58sЮ@4F1Ø q <.!7n\MMdQF͝;׶K'N(_|Yϯu,`ǎ-]vj42 .ll۶k׮6mRK .+,* A`Q 0f@B#|Bhܒ/gϞU]QQQ%%%-[RSS.F rӧOwVVrti%ۅ:u)ϟ:dlltZsڵkbŊ .F#[h,++ǎS/׭['Q{W=UӒ<'P0(p3 >}tkjjd%aLI%11CƔ9LԞnݺ]zK9U-vi_tmܸ177WqNNή]xc?ۂ޷oB=K.:-)s\]1`Qi b1G˖[ %Ϝ;wN˥KxD#pbbbVn*~}l~ҥhe[Nw=33sŪiI: JCP(hC8о.l-X]1cWUUyc۽- Hh3 >|]@b 24F1Ø A!( 4! HhO8ӧ/_}/Pk1`mPϸ~A>O|#BbA c$4' 755m߾]IIIǏ/++Ĥ 6HWllg>;v۷+lkϞ=ڵӽ/^,2eJ]]4nڴIҥaYYY1112q/QPP.z<uqY?XQQ!'!!!!%%eΜ9*ZߑֳgO[U/`ٲeK bBb c$4"tR!t?ۜF裏z[O~~~uuu}}ɓ Ə9RbUmmmyy!CCcUU?>|pݛ7nܸI\rs略'N(._שSd؎;d[>5ܟh߿… 0Y۶mۺv*W 6}[n_a2f@B#B'J*ҥKf~all%>}Z޽;::Z6ʤرcwq e###Cgʨr˖-ֽ{;w]v+VpmnݺuW_}߿_:}{FØ ƍ7:;HLLT1ի組"٨U.`ٷI"VJJʒ%KTסC4IEءCC>^\YvNNzKuez_U/;h] HhD$uYQݬ[vm}}ܹsJ8N';zBISr o#R|=j.e/EtRI^} w~zFi\xuZYRG1f@B#|BWĉ'`>oxTqI>y***lJoVVG7f̘*osH%4:uIhhhhll\lYZZAFo768p 0/ݻy${{V往z?ՈoDW (TB@àF`Ç?e/w9>>~Ȑ!o5C3g$YToUVVzX3cƌT9b^ WIIքA7vX399y֬Yu˱M&Iո*ʴo` P0(p3 >hUWWY|]O' D5@ c$4G3&;;{޽>%+Њ4F1Ø hUWW?u떑Ab_1JCP(hC8ׅ?]vѣ=Cb`TB@àFx6 1c$4?ʒؽ{w n HhğTWW\n ~4ѣny Hh݁fϞ}]w 6G3r#p;0f@B#|.ohUWWYs+*4F1Ø  p\1TB@àF8 * A`Q 0f@B#|0q@dPi b1> Hh3 c̀F1ׅ+"JCP(hC8[ğ~i\\\}}:{лvӂ- JCP(hC8,5,11qG +W;Zz[.]$˖Ư20rˣ8u]cǎ~ :u3f̱c#T\p>vkȜ@ c$4e… SNׯ}P$ իWR-o 64644؛B'պ\l޼9>>~͚5Ժ_|;`=իW:㏧8q6iGr?!9]1E!( 4! HhG={ڵk{/^(12999))iʔ)vTٳg|;W^Q6z<鱱GV(U۴|0/œ9sTKnn/_ti̙jd>}իWgee'$$Ȅ:_ٖ7mڤW+rYGkK~3oڰaI\\\ϛ1M0oot~WWX1`=ɓm۶=u(VGo,^R 'O?:!n(NW uQi b1uakzLJ{ƍWSS#bԨQsU#Gkkkˇ *4"v!ua꒽v_w8tYۈ#Μ9#Ǐ/--U'N]|Ye-…^%9 KFYtwKMM(~Æ Scx I;Ճ?o^dGTƣXQWwM%] >q/0ܘ@ c$4>)))>>^6222Ξ=*++JJJ-[PVV&#Wy6~k N;w]v+Vp{~><>=l:t_ -[NaINFj%ڸo>9-ޖO>wu>ݻm۶WSG͓&^f(VGccc{iz"ɘ p %K.]m󤒘ءCF[54:#c6nܘ+y5''G=}%i.m&L=l 6[PkZCxIkNcx ۝Fl| c;vȄꎫQ,sTw :;pUt/" pcɾP2ùs͏.}QsX\\,WNhK.*'^ԩ}ݧ4,^Cź$i]V._֖I&YΛ6c=k}) -==]XQݞ]v;wT뷝a)p3 nly@~ʚ?z9f̘*osvھ}j͕PWWWQQ1tPӿLsI8)--ѩ8ɓ'eqٲeiiiޖo=zTʺO>DFh6?EV;3rH`Ò{${/>>߿j~z/,@#yuJV:u,U}]8~hѢxcǎτ(ƣXĉӧe~~ q3f@B#|.쟦~8uðfƌxzUPPƜ9sFrh)$ uqI}2,!!!66vРAwAŬYԯJE_nƋ/СCJ:;v=99Yn9-8$+۶m>|,I#<1湜75@D9ր$꿚hM*/^R1B2pΝe!Cz4 7 +к4F1Ø ~&w4F1Ø ~-B#p~W JCP(hC8"4w4F1Ø  p\1TB@àFua㊁Ƞ c$4ڦO|r{A 3 P\\x/[oemFĵmO>\SScnZ Hh5<<󌵥1##cÇ|NkFOn% Hh۷[lwȑ>L_ti̙2^zSTTxũS&'''%%M2NPPPx7CcEERRR̙nZCcqqqϞ=ooذ!;;[0x`EϿlٲ}{%p3f@B#|.\ZZ*5pYkq&M$1. mĈgΜǏ˾Nyyy2IMMDQF͝;WO:%ڱclKÇC,G-//߿… 0 ۶mڵM`ɓ'6LϿuVI%ppbJCP(hC8;xҤ.][$@FGGKN:]|Yϟ?/#:G:5VVVFEE[lIMMsεknŊ.\ЃFXVV&/;^[N"ꫯz<^%OVw޽{Q +к4F1Ø qhi|uvUٖ סCUVɶ$CY[[G7&HLLITڸqcnnn|||NNή]xc?[h,**z߾} NȲIDAT.]̟?_$ mN#n[NW uQi b1jjjܹNzNLLL76MEۯmAԦ~ҥ)))lrӸ~zFi\xuZ{h&iϣۆh]TB@àF|O (6oܶmۃغuz<̄ $D西hl3fL~~~UU9ݩPzIhhhhlٲ4F#492//b ,$~{7ocÒCC=ğj"* A`Q 0f@B#|\.|tQIVmrrrfϞm~3RSS飾hlэz*((ƒC&$$4H&?4J;v웜} 4! Hh\<Ox1f@B#|hW D6mR)QdggWi`Q 0f@B#|hW DoϞ=F c$4‡q@dPi҉ 4! Hh_8 * ;[6 4! Hh|͚5\ Hh3 c̀F1ׅ+"JCP(hC8L p\1TB@àF8 * A`Q 0f@B#|hW DP0(p3 >|+"JCP(hC80X\\~ҥKuW&V;[qGiiiݺu{T{3{M{TO@ JCP(h;guIڸFhtڵk][`=tW-744؛L<׾}~zد_?*oy[#+&* A`Q S'iZqʕ jL6uKgCށٳDzk+SOO裏Z~IP穧|m~Weeeuuu?Ou&_:g?YRRRΝChjLe ߖ'Gk޼yl2=rѢEǏ`~gK.=zT!y޽r?y7-jC/q; ѣ]v2~ժUzϘ@?ƈ * A`Q S'iZqݶmqM0A64j?%HvFFFEE>P+{'WjVSO<&& ,%mI) ZZ_aҤIj79n=)q-ZTUrOoj֖@. 7[^t@dPi bpn?IwnZQ觶|ҭ`'N {PݪW h4F1sOypC3ދ8; *fG @b 24F1sOypCM^>ZA!( 4{3s2̙G턏q@dPi bp򌽡F^\0q@dPi bp㌽F]8c/n9Khۅ{3v㌽FuaKI_rMOQ뫯w⊁Ƞ ={ qz0q9^]z-{Gŵ%q-BxԄGqʕs޽{fpbJCP(h;g%4ljll0`}ߜof'jhh79}ؖ???ȿ}(+к4F1sq^B#|>ZSPPxoٲ%..ȑ#QQQ}nt̙3ҤO>EEEN/^:ujrrrRRҔ)S ƣƊ'$$̙3G0-..ٳ˽KR7lؐ- >^վzzꬬyGƵg>;v۷+⟙?} p.7Qi bp㌽F8}t\9ulرCkjj>llܸq&M_˜n6bĈ3gKKKd9ġQF͝;WG76FY^[[[^^޿ afmֵkM6%'O6l_q b퉉ǎ[jU.]ʼ-Z&-]Ɖ'b._uX9r~C }i Ih]TB@ܹ8c/>N_qܹsڵ[bŅ Z={6::ZlvI$66VVVFEE[lIMM6ߚ?%K lu$"aٿuZ|iվ{nyj[Sc,}YݻtҬ;wZ;-LF jlowޱ}1v~!?YpbJCP(h;g%4^ƍssssrrve>ݺuzlKСêUd[LR[[kҨ#VbbLu8џ-4Yo>^zX.]ϟuZ.FFosu0Nkֵ}ɓ%n+9KhS__tҔ(IA]ZDGGT7m>jl,//ƳgZG76ZF7=33sŪiIaF9]G0a7|S509?4:NV[{3F'On߾Aβel#7oܶm[ $e-n*H:UF}8f̘*osʆF#D7rȼ.X@7_{޼yMMM^%{99Dmm?'!!A=4H8q=S?4z&78tPd+ 8c/ntJ)))!&66vРA *EB1''gΘ1#555>>O>꫌ƚثWi4h$5;VMNN5kv5?^6m$Rֿ8x`i߹sȑ#jl jzz 4iIh\8scS?S/4_yy5k㌽Fu&"l޽ٳg>pς+"JCP(h;g%4‡wx\x+"JCP(h;g%4‡֍Ј;3==}Ȑ!o|+"JCP(h;g%4‡q@dPi bp㌽Fua㊁Ƞ ={ ppq^B#.szٷ^z_QZZji5{WhMpJj9{}C#W UPi bpOj!nAsCڵk][`=l?b{\ * A`Q I-^ڍ;h!ƭ[8011m۶ w}եJjk*ԏ>%[MW\yӣ=SO=uew111+++O~ҭ[7]w?ϒ:wVBSc*[ToL8Qz͛'˖-#-Z'=~u>+GT7-&_Zdu=~ U'z~j7W^-A6tP=66gΜ^lf'7WjmVSOZA!( 4=Kh,+W; q@dPi bpb!R1#Ybbѣ9bA.Gu 2W_}}`^x޲wDwIǵp9{@P@ B%4֘q…S>(\bJMMo~cmiؘ1`Ç9S.* A`Q Y,^B#bƞ={ڵk{/^(12999))iʔ)uuuٳ>`ǎ+[$&M_˜n;bĈ3gKKK+1Ych?A.\۶m[׮]7mڤY)ۓ'OӤ7on۶ֲ[na&L ZE/Ecq%7kl4Ot#G\`&/ݻyԟ'1.NW uQi bpb!Ѳ%oũ5553f̐l߫W5̙3ZlOO{/33S%Iv<%%%2,!!ABݠA/gΚ5K"믿ZReΝ;B=z1$.vXIhk;{loH}Q_e46Wb|F#D'oرorr1z:Eϟ9M&Ը$B#\8]1E!( 4=Khh6[bVTB@ܳXF\\+`E!( 4=Kh0\+`E!( 4=Kh[{ ,B/6}˗[/&''Ź<֚3S ,B/P\\x-+Ybbѣ9bOyyyTTԁA $ੵXTa"9qiI555 ܳXF|]'xgԶ5b]paԩhO>T \P/5W\wB%4"t*5KLL=z#G샾5!C-_}^iz-{Gĩ3/bcc?kqN>nY,^B#Bg !.\:uj~샾.`o2Q37nhlll0`}ߜi'7,B/>}]BӮ];{EIIISL`i'kfGm^:+++&&frÆ 2ʜr,l^bqƍ2g? >ql8p 11јl"+?rHTTg}/]4s̴4ӧOQQSq%@V.G~Ɗ'$$̙3Goٖسg˗{sܶBb B%4%z-//oܸq555IF5w\.N/uh8q~e2??~Æ +gРAK,uX&)Ӳ-Jկ~mG}kI&M$1. mĈgΜǏ:5Wr)Y;d[>hef9zmmmyyy.\޶m[׮]7mڤ9m++,* A`Q Y,^B#|Bh\/gϞU]QQQ%%%-[RSS.F ZvݻնڵkWǎ%ٜ# oJ^w!W%ҕw'Ǖ%ۅ:u@+ϟ:t:贒sI|]bŅ `c-4cǎ֭giIsܶBb B%4'iMMMBRRR->!aMsT;thLNK1Ǐ9-FF.Z{w~aZɗ.]j߾ѣG+?|nݮ^mLj*o˛vi4dƍV%~HU㍍l'z}I,út2|Ӓ9mvE!( 4=KhOh-[(,,q9.//.}Q;xubyYYY^*{%kjbΝ;%D͞=۷sc.-ol_56D_tk6ZNNw=33sŪiIsܶBb B%4' r$,}k̘1UUU}vo}<7))瞻zjiiiNNJ&`lc~T≠osMLLT'ɓ'iR͛7mVBoY[0&LUK}h\ɓ'eAeҜOȑ#***`=LN_|ѻwy?Ob\R Ю@4F1gz -W~;..N91c$^z1fR {/33cǎC-,,TĘXmszbѣ%$PvJ@[ٳg{=8!)r"I@B5(p]Vl+l0[Ev{e]E.uK,Ai FrBY $|;pfN8Bz;w39Ӽ;9h4IYY$ITj4 }C$3FMMM7\ޢǏ˚SLDjF [1W,c}ѣ*g1FY.,pܸqݺuڵkVVV^HxJ' 4=%4"詧ҷU\ 1ţT<`Q Y(A3fɑ#8T<`Q Y(AN+ v7Ghxumݺ>@#:4xB@ܳQB#;v̘1_AȍlcDO(h{1JhDPׅnݺhW r bpb>F u㑿\ܳQB#RUUU\\\QQap%qb>F rg1Fh9ܳQB#0q@tPiF1g174)ҾO=6mڴiomO}k~ڴ[a;iuƸ(45㊁ bpb>F4Y`u:(iaW"gҳqF,;98_hj]!hW DO(h1i>FbqǨ NV*--UMt7R~XBVַ6?c֭[CC/b=s>C퓮|+J' 44n1Ƹc)8;wnVVV\\\ff#u]?+)SX'YFܐ!C>3,((αcqzj=ym=r}PQQх dW mٲE^e8PeCۣFvaaԩSipc-w|:d9~_iKu$[nӪ3))IkK#&&a~J#//OZ*33Sfhcǎ>uTuu6 .c|QگBCh޽{%Y/]tcIʡGQ$O~_ W[Ejj^SNƥm%1>~YXX(+V(**ӦMzԨQJZZtg?={R6 ebQcA1Bϝ;裏ffffdd<áٵkWJJJǎnZ[[;츸bʡG?ѿ뿶+MΝۣGR޽{'$iW . |\1T<`Q ,u14*8UVVX[6yȃ+J' 44n1ƸcT'`k˶h"cW >ZA `bQcA1Ro>k˶~cW >ZA `bѨF\hW DO(h{1JhD_>* P0(,c-{1Jh=%4@|pb>F A |ă+J'Q+?!!>+FԊ|G @b :4xT0P(99;ܳg}.Ν\~l:uꔛ;o޼ }'|er*=%4"q@tPiĩ`ɓOKw5+w=yۧZpT {1JhD-㊁SնmbccS$F<555,4ݜ| +Wi׮KҥK qmF Aư'NLF hTJIIILLF=9*++cbbڵkU63ƽ{Z7eiwo{Ҹp8|8'JJJڶmkQlpKzg1FX:PI~۾}{Ν.\vޭ򤒜ܡCch t][Ni&:{Բc);W˻kdwC2NӣhܳQB#Z,[***vQiWTTȐܹӘmNa%mҤIwT|-4vllUؼyL>턝YD |bbd9sѣGO8ĉ.//߸q4<(|Gݕ~;vܱctXohh(---((HOOW_Pܿ[NڇUӴ?-{1JhD_>* 8L轻_~9!!RՅiiizZd3}tK˖-s N?2n=Z\F9Νk;O>d.]d/_\A Lk%pb>F A 5\\\\UUe|G @b :4xB%%%7päIkC1g1F>* P0֭[222rss-[zbpb>F  |\1T<`Zɍ]w]׮]w. ۍG=%4" W DO(FF%;;[xܳQB#Z:_իז-[ʸg1FW {//o+V~űrb>F &*1ԨQ9993fpyj+|\5/_ޭ[Ln-:qb>F A ())ݻE=%4"W DO(֠),cЈ >ZA |G @b :4xB@ܳQB#hW DO(h{1JhD_>* P0(,c-{1Jh=%4@|pb>F A |ă+J' ޓY%''y{OܹsIJJԩSnny***.vZ,cЈ >ZAcM\'O,((ׯ}|:{uݻwO<9==}>ΧW -{1JhD-㊁%m۶SNILMMMIIyjjj$XǷi9sVPϟW+Wkn[V4hPii>u_[?~ޫ˗/|ƍW^^z>i[Вg1F>* +kN;qɓ Gǎ[]]-qȑfͲ⴩C dgϪ͉'VUUC k k֬IKKSzk߾}8v옜=c8UW -{1JhD_>* +RRRѣG#Gʘ2vZތ))4ݻ!uָ8B())i۶GٲeK|||a/MOkUCK|Ju…۷wy…jh*O*:thhh0Dxij8Gi\zu^^5\#'Rn}}}^iz{1Jh@+eK\EEE =*튊 7;wZw)--Jo4hL>Bc~~}' 9UV͛ qfY-{1Jh@+eirrr̙6G=q'NH|ƍ8xG9oJJ~Ç:YBcCCтtu}Сo]`;i> Z,cV*/VWW%&&kɒ%j.[L6|͞={v1//H4cJ '4(0`ֿܹOvENf˗/+iZ,cЈ . |\1T< `1 -R8вg1F`b㊁{lڴ{ӧOII} -{1Y(A|+J'Ƃzsrr222zIbl%Ъg1F>* fӦM_233v:hРnzppb>F  |\1T* P0(,cЈ . |\1T<`Q Y(Z,c-{1Jh=%4'$${=)hY(A.R\Bo|{Oj>B>N:Λ7>bjsXb^QiF1g1F{05b}g&M8pmN]]7Q[}}ݻ'O~T B#W +* P0(,cЈ -[ڶm[۶muʕ+srrڵk'1رcƍKJJܹ̙3U\tj>Mӽ{8ͺ :b^QiF1g1FhYM4i„ gϞ#GJ:sLEEE͛h9پ}]v.\8b۲ңwuh;v/Q5k֟Ω14Y&--Mz}ICp=2NZ9W +* P0(,cЈ -RK;xo,//͏?Xm+]vUo۳gϖƅ zQ\\wf^S2&&L]VGA-4u/f˖-4= h]14xB@ܳQB#}])bw%gΜQD>^n?|ӦMi=z466vժU{l޼YsN^N,KW,c?b l555ǎ͝;w?ޱc;vÇ;6z'8q"J7nܨ ] ==]}Aq2n:i:tHN@|Ai|Gji> pqb>F /4:K3fLRRRjjՍ;L馛tuO>DgS {duwSRR  Iw|.]^|^YNOe\W&,cЈTUU[C+{1JhDׅwQPPлwV4#* P0(,cЈWUUA222wNb^1ˁJ' 4=%4"R]~_&1T<`Q Y(Aҷ̮HB?ƈ* P0(,cЈ3f䨠p5|֊|-r 7dee/w* P0(,c;vL:Gɍ=%4LxU=%4ԍGN#pUpb>F KUUUqqqEE}=%4" W DO(h{1zyCرcWqٻW DO(hK&5O74=y\Ǹq]+J' 4ADfisqrF\]z){8 bp㌣Fua㊁ bp㌣Fh-sq{3Fp9" {khIy{8 b??4%A  c$4"q@tPiF1D˜  |\1T<`Q 0f@B#hW DO(hC$Јw.pA  c$4ҡQ|ߗM6mڴiӦM6mڴiԶȝFh 2f@ϡM 솆٬W-Z?!ԄYfY7/bZGo~%%% <U賵OjV|]@b :4xB@"a΀ VZUZZ7ůk\fW>C+>kZ"j id>S̜9S999QٻKr9͂W DO(hC$кac6{5rH1bč7hڕMjjj!++KܹsetٲezA+orrw]Ν;'H\\\ff#ZA  snؘw0gyF}Wg}:G56l {w Z]qR6Ѓ>(矗=e5o9S`_{5i+ dsرzj5j NNo/uրLhW DO(hC$кacgN:ԡCdi[&_ׯW}%Ih\`uY9?.mM IێzF*YYY~ꗗ`ߤcǎm_cuu귮Nj3(zy9>* P0(H3uƼC5k4fϞmc/$ǫ~m9ƣ>R 4FɓqÆ &LɓUZsҥ:m8'}I111ҮϬNmQE_>* P0(H3uƼC9tOS66_XBzƍѫڶmnݺZ};t`]JzQ^xᅻᄏM:Eg}vݺuS;w.++KlJ;77WΰH6mZG{!myUQEٙ3uƼCy:+__^ :M㯰ZfYUw2G}4333666##?SRRdM7ݤ;5:*ÇKvqqqIIIyyyŁGׯcǎO(ɜ6,XJD9?̓hкacA?e߾}~\o}Yua㊁ b1zhx01q@tPiF1D˜  |\1T<`Q 0f@B#hW DO(hC$Ј >ZA  c$4" W DO(hC$2f@B#pxw9 Hh*$4JNN;ct(Gr^z>uyM.!ɓO\TWWgrУG 6>Qxsfd̀F-l۶-66V:uJbdjjjJJzhllҥKO<';l\6?c+HDӞ}۷QS =.W +* P0(H3 A>Z:]pABNΝ.\$<$''wСB%M?aFFF}}};r_|1t2gΜNv =mZz%:wQ󍝡l'k.}]zڵ^;g)+O(hC$Ј -[n)**>~7QF',o̘1ojj!zzǏ5L"xJ'' Hh3 d̀F@1ׅ+J' 4! HhD&>* P0(H3 A|NO{k?NMMMHHpy%>6r͵fs\1QiF1D˜ *--̬xg 3Qrrw޹g;v< 'sT}^p ǡC$WWWJ' 4! HhDփ>c{}q *blffըY@II644  HhwW^w5$''W__opKڵk4Μ9}]kN}/\ s .TCwnӘ'9bT .{>\N{СꙫNg6mlNbvΙ3GtV'F4/c$4? r]tiT7VZU[[+7oV )Q[TT$iJh|Dj#]R-Z$4h{uNsjO੧@dЈ _:uؿ̺uoW %Hϯ9vX^^^h$+999ѣ'Nxĉ@cH%4:ui544,^8===t_O1MrssΝɚ~i>}fϞ-;pV'p]w}< b1|AVVSO>d.]|KO>DUOO/rBBBeee5iiir^z-Y$t{IjMJJ8p`俞h~cƌ5SSSOnZ<~kʔ)TgreJ' 4! HhD%?ZUUUƛ|P>^ *.yO(hC$Ј ֎; {]RRb*\1fD  c$4"(UUUbŊgddtޝ@ bO(hC$Ј ׅխ윜]ٓ :4xB@"àF(Y[n]Ø ڲe 7ܠ"_A@KàFIUUsss{4 Hhݎ;&O|]#r#z3 A_7322$=hW r b1`bu㑿@sb͈J' 4! HhD%?ZUUU%@ b1G @b :4xB@"àF>* P0(H3 A|]@b :4xB@"àF@1A Hh3 d̀Fua㊁ b1ă+J' 4! HhDPh ?qjjwޱ]WJ' 4! HhDGޓHh|wٳ>);w>4ԧOsi9m<ebTTTر#zʦM*))SNG3£rss͛'gb|odNW yQiF1D˜ rhY?ydAAA~쓢%i^zy饗dkhw^˙7r555?񏯹}zݻwO<9==}J?+h^T<`Q 0f@B#.l~۶mzԩS#SSSSRRxI;ȑ#wqGǎogyF6RjS9u,Y)~IntSӬ G?9s>|У>}zڴijd}ڵK\2'']v2رcƍKJJܹ,Tq5kʱ\\?gb@ze,2hРR5^=_K0@?p@۶m<p8% FSN.+h^T<`Q 0f@B#X'&OvucǎУ˹z뭟|{a5:a9ٳg_NCϛ7/pJN)]N ˽iii%@VUUC Qs@`W'g۷/\P#(VGok*ZV{{ 7'Diȑ#j2&&Lm]Vrk mKhtZѣK.=y{_?|Qǥ{}%@MKxW$Nir (QM$sZ;}]y[M;:tHoݺ5...TRRҶm[=_uٳgK… 8|+#lٲ%>>>గ 7'{ ۷oܹ… Ր6yRINNСCCC-Ii֑9W>|աC$ =$m7pG}l ͶlKP-`:%aFuN۝7lwmuɜ?|ӦMt5Fy]{QD1}QQdG *CƣtTVNh-*;wEԩ-ܢ;C4,6m/W_7)L.ro~f4i[} c_1BGв$ɡ NGr?=j*=6oެ8M, Θ r-999sQG8q'iƍjjj;~ERRR~H89|СCu*0si544,^8===>HzoT@3Z U~{F_Bnnܹs49p)x7?|S|Iɽ! + 8or T~;vT&D1uIСC:4χ4/* P0(H3 AN&MS/rBBaX]]]XX&W^K,Qs>QQϞ=_dQQ7#O%%%8P.>}Ue˖%Tu-4:uJo߾wWј1c詩rDu锌!tʆ  &$q{Ƙ &ʱ  !VDjzSbltMjS1B2p.]d/_\ q+h^T<`Q 0f@B#.Gr XQiF1D˜ |-B#\+`E  c$4"}@sO(hC$Ј . |\1T<`Q 0f@B# Ș S>ޫSRiI 3 PZZYWWgя~$K/Y; M4>IsCVWW1q >c=fihhѣǀ fbĝ k_$ HhDׅ/\qFkڵkӧOO6Mh߾}wyԩԔxFdɒL+cgxرq%%%uy̙f54fgg25[N`РA^_W&z8]1E  c$4")>|Xjȑ#αcN4Iv1/ [oOw^ש3??_6rYfIX6m }NFQV9s$4nذk׮k֬Q&O82d^0&z8]1E  c$4"%!MjӺGd\\$.iuٳ>~ܽ{YYYSVV6׮]&G.]ɓze?VDD=gܾ}u:%5СC֭U[hCCZ +м4xB@"àF9}B4?Ȩ:Җd(3Ϝ9gw4INNETZz;Pиk.}]zڵ^;g)پi;wj9]1E  c$4"u….]4Gk&qqq76MEۯ;+**lAԦvѢE;wdW_}zQ{`5tJQ4I NW yQiF1D˜ rԩSշo~mܹHaƏ/!JE/Ecѣ'Nxĉ@cSҨhxtN41"??رcs$~}={)ƻ?Ո4#* P0(H3 deeGJh0t3f@ZXXطo_UFcguuիג%K,///)))>>~7QFQߘ1cdӧi*?~\֜2e$R)FI%i "TQQQ\\\UUep3 6uTn<ˠO>3fرc} @2f@B#t˗/֭[VVmݶb n<1pxꩧvz-|#p93 A|]@b :4RQHh3fL^^H@"àF/[n{1f@B#hW DP۶mѣN߿3* 6:1feeu~F1D˜  |\1T$1JVзm(hC$Ј . |\1TnvkцF1D˜ rUTTZp93 d̀F@1A HhD_>* P0(H3 A<@b :4xB@"àF>* P0(H3 A|+J' 4! HhD-㊁ b13Z'r=.pA Ç^6e@QrT)3`OZBy3g;%3`Q2g-ݛo)wޱpUqOyQB )8ئҥKWٻW DO(h;g%4^Ш^X`uʾO0Yh jG{}ѷOGrF0@4xB@ܹu]?+)SX'YK_Ґ!Cd@:m:ʤzj=Y+ɍζEQs4+aÆ|_p႞YHF`m~/nݺ~zٜ6mZ66nܨfjAӶ;^ubYTTdIz; R1J' 4{3$mA04S Ԑҩ6G:ӧOmk5ڌ%ƀsJ ONNǏK[X'K[tJJJRԩSKC`Ldy̙oQ333ewSNUWWKcǎ~kjS/11ĉ]t0%Cc;^}駡1o "<`A =G~6EOOjH}>֑ӓvyy/~FpN)*f ݻwo߾ =OFuУA%.i<ՍڸFV^|E7!g?)WX_z%cжu wL[&{3$mA04{SLQChriTsY4F)%_zQ^xᅻᄏMӝ4=,===>>~́_]bEQQLVj]9(~p.\ '//>s=SzuжRWW!ڵSNmv)C=ؿA﯆Vvz}SOZ3guIڸahT7%Hd5}T#C{c9;wǦ% }ή]RRR$nmݺvqqqIIIyyyŶCb-Z\<>m/g>|N"Ц:~mϞ=ַt"k{UNW=@[nA8Z3guIڸah˗/UGlZ'u{aÆk׮ ,F$hJ) :{I&Ɏ*] ^vEj&޿oaWKbJC =G# oF =} +͒F|+J' 4{3F[V|xA =GF̙3g"քq@tPiF1sOyQ}W. |\1T<`Q sq{3pqQB#98Jh=G ޓ>w}'$$£^_\1T<`Q sqЈ Q?яd^z>u M}^/֝ZPW|ߴOqŊ7x!}ifpb͋J' 4{3z1`aÆǾ8ajb/w9|ؖ\K٧qb͋J' 4{3Ѳƞ%Kdeegff:_vmBBž={bbb>CiӦh߾}wyԩԔxF`<3Thh|x}}KKLL~^G5V\Ӯ];yEsG;:vx7?3ڷooqO(h;g%4"飥i&鬮S;vҤIҸ$~Ihz'|"{>|ة3??_CH9rYxtcQhhgΜ߿y4y6lڵ5kd)'N WBظqcrr/^{偦ַĤGNG:4N0ANٳs#F/p/!]8]1E =G r+G]tɓ'퓚9r$..N:u꤂eݻw[';+++cbbڵkBn4Fc)Mm+g}633sjC[kWmMIx'Errr6oltb:4JV_{5cƌ+O@ bp㌣F+[z;ا?322-AC/%"gΜNv+99Yihh8we=+KOk̙u:%]D!;h׮]nMN'C^B_'PhUsq7vѢE;w Rtm8ꦢGykN+[݈{W7gϞ ,PNah;?~^xAuPrb6tnwwtVhsq7:8p`ƍuuuv/^nm۶Hʛ_^Ut4|poG8q'G* эFnĈ555ǎ͝;w&/O?ӧٳ/\p8C~9ę3g;))I=4H͟0a{Gthh 87V`l|z/F=G WLDSEEEqqqUU} W DO(h;g%4"_ •zc\1T<`Q sqЈ >ZWB#3229sTVVgp@PiF1sqQB#h$7GBc׮]%=>v+J' 4{3G ʍ7xc&\1T<`Q sqЈ s!e0 bp㌣Fu&)QWz-vm+V٪J㌣FETbG3cƌ;v'{3qݻgffrk=G ?QϿ"-{3ׅTTTsk+J' 4{3ă+J' 4{3G @b :4xB@ܹ8(A|+J' 4{3G @b :4xB@ܹ8(A|]@b :4xB@ܹ8(Z g%4@k㌣Fh-sqr-O~Ç!?8 NI=G/oh7Yaa3gKK7n8{8 b;vKRsq%w}v5{7U;l+J' 4=:BcFK.\fFA |^1jGhT&,X`ݴ"im-Zdpɏ^A> W YPiF1'5n?wG[yh\jUiilj}j7֣?6w]􋒣7> W YPiF1'5n?wG}&''m6))+_oTP)Q.ZY^Ssfeeeff>#gϞM~7ڵkׯ_򚚚z(##C_˖-NҥK_WSDz嗥g„ 2:{li/^XϜ?~BBw޽^pIDAT'xBnZ:޿Yj…"z@pOj>F~j7+W8y¼<=>>giӦÇOkd_|;ߑ??_ګW֓Ǐ/Q֣(jJ{111_/\g6ƨQ+X۷~/˭[MvWM:պmA=uݸ>#4 I?Ŀۿ}D~\sҖ-=ɒoӧOΤ$կIӓ+++ϟ?/ IMG35gcK3gnF̔ݭ3O:U]]-;Zm_ u:7ٽe6F2sOj>F~j7SLQA,$%6/1BUhTiw޾} 6X˫O}mҺrQ\4W@Fm\Cj+NB,uI^{R1Sq}GhСT~QĘ|g/ڿN,گ5^4ݝӓ7o,EsssWXQTT$Mf[9(~p.\ wg?ٗ޽{zT91 mTE* P0(cv/YvٳgAAA^T0뮻N6oᆿk4FY(ܹs>hffflllFF1A8vJIIر֭[kkkϟW\\l[9(~mѢE?ϥ#O>)ޝGU' Y0 $H@Av,O@"Ee"ȣ"R*T֭GYj6 @ "PD dUBiN/w9{ ayםsνsܙƎg(pʶolDܸqpT|`Q `u< 4.Zm۶:$=gϞ-Q?m+SXR/Ǫ1R`%##'wbȠ b0'w+hxb,|7qDX58yd}c#24B@I-] y %m۶ǪH>o߮} W dT|`Q `RYׅ+"J/ 4Vmh1bě^#aNjF64-H9裏QV{|}dNjF*4GUׅ+"J/ 4W D_(h9%4"q@dPiF1XQB#BxjWgcO\1T|`Q ,`Ј J%%%{ƍId=jk׮N|O~X6K/"NO+c8z/^W rQiF1XQB#B.l6lX"{PZZkO;^r%3'Gj8z/^W rQiF1XQB#Ll1c山zСC#SRRzտ{*>>]v<3MYsvLSOIj~6m45ͺAUʽylR۷r^^^RRk[`ƍcbb>_q2zE]֫uOJ ۷obbbjjQN8SaÆf͚=%&ϝ;uֲ]tUPmXQB#L1C ~ֿ>}IիѣUϞ=%>|k׮*Bvv)}Y\?+SCx:wqD5KFx]1E `bF [rвeK9_?hРE=zȑ#QaC6dzzzI\?ޛf<]w%˷r6j;Ԯ][R2l_lX6lXO棏>r f*W x|mꫯQC@% b0gFx0S-Zn"cccCILIIINN:t#GsCs=Wm_nٲeݺu%Թ%L%fffSΝ;uߥK 6{q}711155uԨQN#5kL^w'+M y]1E `bF zjyܽ{iX2d%\'߿O>EEEz5zhZjy2ѣ^kܹS,Cׯ4rKn8Cl\BÇ :t0~x=MkܸD\5u;J7(u*_(h9%4"%iM_n$(!!AuܿLL̖-[ Yײƭ[ڳgOllԩS|_#5I^jٲ4hЁJJCkԴmk;v‰'|t纾Bٳg9o߾N:7NOm~mڴ3f25\?3ΜQgee9kTyW4h_1bDZZZBBBVLCZ[lILLܹs<4p ͔;z_~)u뭷JRu+fs 0JhDghfvԼ8YŜbŊ֭[6,//>,`Ј. @xyeddts+"J/ 4$77n֬YӦM * P0(s 0JhD?L |\1T|`Q ,`ЈZA `bF  |\1T|`Q ,`ЈZA `bF A `bF =Y,(9%45իYy19%4"8BJJJݻƍNWuEmk׮N|O~X6K/"NyO+SuՇ9%4"$ׅ!Æ k߾}'Nػܨ-Tnh,..ر%\b;s|>*J/ 4쇉m!d山zСC#SRRz ĦMfۂ?j_nٲeݺuWZ%7ΝۺukB.]6lؠȺl3++K˺y_wܑ.]tڵk:]DL2E\]ff>Nиo߾}&&&5JoіجY~cd1GeFQiF1XQB#B=!C ~ֿ>}I&իѣmxԡqѣGA?~[n֭#x:w>>''g֬Y*&s͑{oԨ3wޒT|d(J@[ܑ#GE]'[l( s/Q];]9dnAMII.XOS/mz뭒H]w)cjȜQ;u+VfY,( gΜѤI48+XQB#BP}جY.qƲ@b`5A `bF yꩧG[ظ?eȠ b0gF9e˖*(/ƈ * P0(s 0JhDgСCvvz_y7lx1FdPiF1XQB#BOwyYYYF6#24B@Y,(!/.%76mڔ@s^1@ `bF (G^^ޠAw9%4",Չ9%4@0gF,`Ј. |\1T|`Q ,`jC/)7,W姞zʵeYfe2M,Z]Yf.|ֲްq]A(5㊁Ƞ b0gF> * P0(s 0Xĉ7]9-L^zl/ܹ,Z2κ^'O]U<+"J/ 45iFM1u- Ngްaܜ]F |Wj73g~7oM4)..>}iz'|}Rׅ+"J/ 45iFM1u-Wpr;v{ʪSNffw}Q/um߾޽{9,##Chb<@rrrF^u}JQQQ\\\<(7 &?wdB?coa֭[;tРAI&Ymf1-)Ƹ NnMzw_Y[ϟ/Y[n_}t6L:#ۿY7oܯ_?ɍЬY3(Yf:uJ&~,Y"aƌzz:wf^{,1b~4"YL 0j1+hF?))IzKYʲX'Kb⋿kՙ5mz[Y)zd/d!''G͞=;33So366VxY>tPQQ6 kb ZQWQ^Gh<ի'y:ԩʨMZ8++K~U6luSe%16m/ܲe˺uZJoйtN:cǎ.vQv;wzͷr3Zn [۷޽{;:ͺU 59%4" W D_ 80dȐK.D߿O>EEEz5zh*dѣGW[vZ}ҤI={4ܝkh?~ZZZ~뭷m& -\wukN90gFD-d!;;{jh111[lQ7,Xkhܺuz.n1c©SsssKĊ+j׮mQ,YWⱖ0gFD-$Z*55uҤIjhݺu*O*III/..v Λ^˜ J o}:zf]K~8o޼s9GVW1ɓε\QD=s 0Jh@ԲYfIT۳g,ȐQ[fkJZ7l$  * P05ʍK/?xY,(@XYYYVZ-Y^59%48˼;*%?M6ݺusc dbF &:1k׮y?O ?ZXQB#$̌ >ZbbF A PNEW D_( 77܏)s 0JhDO-㊁Ƞ b0gF> * P0(s 0JhDO-㊁Ƞ b0gFua㊁Ƞ b0gF,`Ü zXQB#Ds 0JhD_> * P0(s 0JhD?L |\1T|`Q ,`ЈZA`zjyڠTRRR޽7nht:ʱcw&11aÆ:u?~|AA}n^!XQB#BxjW D_5q"D`MY,(!<+"J/ Ɩ/_G:$12%%%99yСG`WiӦٶn~j_nٲeݺuWZ%7ΝۺukB.]6lؠȺ-oV3f̐dw^Nn&V Ĝׅ+"J/ ƚ80dȐK.D߿O>EEE{5zh*^7uh0`~QusРAǏ[uȺ-4Ο??--M-[۶m}\wukNQC41gFP*q%'''$$Bvvݻcbbl٢n.X@7הnjߵklٲ:ueĊ+j׮mQ,YWⱖF1gFP:q:ujժU&MRC֭SyRIJJ_~qqkJ NS7](O͛s9Ψ{IZ(js 0Jh@ eK\f͒dgY.((!f*6lW7~m]SbؿʂUllٳ?.7/^`iM"XQB#j([Npղe˱cǪ_A8 {]h,ܹSVٴi#&''?'O޽{bÆ KOOW_Pܾ}.\PwuW-k59%4" W D_)\|pW^iР䰨hĈiii Z2eswY>}|77o3k,\Sb8Q;;7κ=XFdgv:c xM9)fbF ᇉ+"J/˓צM+VuPXQB#BxjW D_\ ҥKFFFfH5k1(,`ЈZA[ 6,;;[bӦM/BcÜS @b 24 FآEƍKh$14\=Y,(!|]@b 24"dƍQØXQB#āƍwdddpWmۖOQXQB#… {ꥢw]r#js 0Jh@t~xQCXQB#… o&F,`Ј~l@b 24N])fbF ᇉ+"J/ 4S @b 24B@Y,(!<+"J/ 4S @b 24B@Y,(!|]@b 24B@Y,(9%4@0gF,`ÜR.7hիWKQ}~VbT|`Q ,`Ј`?LR\R?njTy|Fo 6ԩ N:v}E+_(h9%4"$Sw6ĉFo'O\nݐ!CӷonjAhE `bF  ԲE˗׮][-[[ļ}711155uԨQ*IN:cǎzk;vwiݻv=3:4:thذa)))C=rގw73fn:!!A wރ*tڴiӬj`W /* P0(s 0JhDH5i5!whUfĉff͊ɓ'eYu+'OV?Uύ7M;u8w~8׿~{ߋ+% utr)kOC8GXS_Wjf>M6c"@dPiF1T{ްq_ٳ7lؠo7xCnΟ?_+|?66^z_}UO㵮+5G-[w ~ۜ8q#vڍ7OMkntޣ'|( kꇉqRs ɹ{,۔-3"2GdPiF1T{ްq_7fVz%7{yZe9"YYYqqqƍӧ Z?9;;;Nw[';eguiѢ[vСA&Mη:vؽ+*fff}GUCj_.R]`[o}{ZWv>#sNF^ujNKJZjYNpc;MӺ{Wueg/ƈ * P0(pπ6+]|g俯gQ˚ ,|۷oA+u,Y"4cƌx^z;wNv.6L#iذ`l]VDWԷ1Uh9x+#՜6By… wySKVX߹|%͓'O~Wjfq׵@ * P0(pπ6+]ܵkׯkmm9sw~W_}vM4Qj\WI?.뎬#FN:Κ5kwqG?O/Zex웦~'##gx~Gg}VK^oΖQ9^Y~G~9v,z}߸v:'O}]ӽ{Zh\W̙3'===!!aܸq*~;=~ 5kVNĜܒi߾}||R=ܓ+ RO#QmO<,[h۶nк0_QF^F++կYf{x];T haB)#@HI*7lW(3qDk?Pu&O >g@ ϱl۶ڏZ5uD\5b jPiF1Tkab㊁Ƞ b HhDO-㊁Ƞ b HhDO-㊁Ƞ b HhDO-㊁Ƞ b HhD_> * P0(p̀F@k$4B\3 BÇgիWرcq ?:oWʺGk8GW-]PЈ;?я*6m螯ZRDٰaCff'UӂR qn͚57pCjjj|||vvQoý6~+t>A$̇~XF_z%ce^KGj׮])))EEE\3 !.;T[d 3A٦;jժ?#of81v}g _ݠW[tiBB\7Tސ1~ ZY%Rr|\mKر%\b+eXZ垅E PЈ`?LU-[[U7}훘:j(ն5'~X&=z<#:N:thذa)))C=r䈚6eʔL];g̘ѺukI;ٷ{?gϞڵ{gʽGԩS-=R}wB-̝;W<.]ON*E߱cGڵwYmTgyW]uydHNz{qx<(˵>6mQoG2WD,X@vlƍ111|}eyZKԻYO>W^oZ PY4B@*5V0ѣ2W^~:t?~s-%4no׿դI<>X&߿O>=Z:eLxeY֯_)zm۶ɂZu]⊛nIIKnh/%rW)r A ?~-vdW_}U^kת&Mt]kUڵsJۭz{qx]Si~^\^O!dpi嵮y j-uSR8gA$M`W /* P0(p̀F{j7/t֭[ͽ{͛7s̑7iV7x㡇lٲEM^`AZZ,ٳ'66vԩԛrYdI\\\Iٮ-6ߣ _uwrgK vR˖-SZ8:f̘OAsss~a;qs֭[g}Vu@kuMM |TfLW]uZK{'˳fjذ8\z]+;L.{+Vbݣb~QiF1Tk$4"$S델V}sڵrʕ+msٯ_ .`ӦM} *uRRR;y#!!{K.U[9sdu i gRnZ J$o}T\sܽ/B:waTl;u@kuW7͏WMpV+sezdˌ SYh*_Z׼.yU5'84B@*5^k]߰꛶^}U'έYDÆ /b) j6Ǐ]iA%]deeIT7v=裶: ^5YD[v-se:YR8u=L:uԟZ[ 6Ȃڷ~u"]14B@*5ZgsZϞ=ﯾשSqƹNӬC}U,_ :p@IiPQmǎp yO{un߾]6~s׮]W\q_>pGݻfJ8xݝrkȄ AҥKNzСҟ;}wu@uU_Mܴi_x]+yGNge;Ԯ][22rpd_p]ܝ "99ڦM6mz7lx1FdPiF1Tk$4"Z|u]c&Mȍlx1FdPiF1Tk$4"uacFFFvv6bUJ/ 4"\3 X|y>}w KaaannnAA}@p̀F@k,?4h'/Hh>Bc~~f۷ I5jQ05{+ &=kWhΜ9A6m/3GI5jQ05{+ ѕHUƯ~U):9f~>iF|5 4\F:6Bcvfe95C('riUKڙmyl W`jH3EhѪc#4V)^/ig_OQ34_!|+FXxf~>iF|5 4\F:6Bcvfe95C('rW߮Uֺu۝Ck=t&Mk׮-{H Z7rEk v4EN Uھ^F .nUݪ _m}Vu3x=?&}vv{~`Ty ֪ǵUiTG]mKVG|+W P&$$lٲWw.YW E۷G[v*tSG^I~y׿m\\춺) oժlDzQy*\ɍ7l:usyw1fϝ|5"&&&11c.zyΙ;P^-/oA/33KTjj~p[o-QC֧w43EhR| ֢ZT^_V#~snr[% v&$$.]uY؁[8Od}p[oCO^s9-?-Zzjé9O_8iS]woӦm||wSif?7\YYun\vu([[⒈ʗ*\44{)SfQYYMʭC۱^ ;'=by瀞s.K(<խ[oa6Tb?JIIuʍ;]tQO?~Sx*y":m;4kv>DV'֦6%gvժM#y |vma)Bc2^V]ʋ[~^_y-*:oh~OP,𛭴y"[j72\Y[^y#nݲS`5Sn h|tr+_Dvv~̙˗K믿;v섞=qNίzxzkƢVZ_yeoP۷%/U]ihɹDر_uxX=&LxP. u|'=\,Oz9rF7##SnO<_􈍍=Ɠ&=Zvkεds,;ٷM_3cKn{jԲkQBf.]sXqqqW]uO?_x/mРWO~2L K/"PXzX?Iwyigi>Xrw<`]zY쳂-Z:zB*=TT~cbGk#n<#z?6n8)2;ՍX Uעׄnytգ\{?^4lͰ3u׆N{m֤&LYVo|8u~ȶ&G)11饗^gFP 0عV~К)}8^y Gص {JW[KT$BQII&Oznzz A5u}6é9#'9~ \0ZRe>ѕF 3sfnӦy[?KNn(~ժMoT5mʕ!CnKMM\ǟgSOM+Vl2M K{?Tѵt%eɇ#r>ԣS/xcҥҥΖÆ!vONң>>^{.O:uȦdYe)k~۽N:_C&H9+P-pDeIDKDWjPG}3V 5LڎM%3VO*WI Tfއ r'xV~r غ@yٲy-Z!)Z?^֟Z'JԷcǿ7o\̺{>Zy;wKCTҚ5nٲW&;z(/y_&H_}ik^ׯ?_Z> Qˮ:y"6k}b]k~O?|BBg=tsY6o !CFhR˪kQyqzׄ4˼W}:>;xP7׭ٚsg-'|׮gǺM7oV vuV8gѣ<-]Z[K7/_ykkKr[p^jr]zŵN.Is!ugzEfOLǾ޿Q͹Mé>2SsW \0QYQRe>ѕ322W$yFNk낾;z*̗^zMz$IAt%11INی/ /Vi~^&4)Gy\e}іGM\\~Z^vuHHvOv?]_Sdd#raBӟPz(-gszkI_D%J=snVP*rmРvWtOd|y=(;{l(UzYuMO4]ܼ>'Γ\"/^<&츞ku@\fkΝɷ ]6߼Y](OleγpȲ\US)Bbccʛ`y֍q-^r[p^jr]r5k>7g߽+RSӤ8U]o}s^ḑ^J:&&CN \0QYQRe>ѕ뫬&ݻO=>sPBqSN}G?ꫂuSjmBߋzLk_~yߒ%y 4hBcۡ6l|߹j{W&'ڹj<ȹ6vݬG\n$˳]$=S:eC#4V)e5]tqkBeޫ>OQ?Byk<ܚO]ώu^oެnƿ#c+p^GٶOzǖ]R~?i xu|eo;}=ֶaN9/A!LHHƁU*緿}6˵Zv|Z>`\T+zR-pDeIDKDWeY}V}Z~,O͟}.mƌj;KSMN6hm?񠜜K?3; 445=?O}^%C=Woʞ} 6kvB>}G8$vLW3̲muor[π{T+=Ze]L7}~]ψy^!?R'4V1e5kUD-* U/^ǟپs[6?^tm^խ'|ngǺM/w4Oo[a,:2wwF)[hnm۶ϤI4p΋m;aݪԻ彍-~>(5Nq'6KW8w5?SZ0[֒֗*\:4ʳ}]ΧPÆL{/ZOС#$/ԾzbHƍ3TIyͷj+Wnyڬ]>'IOڲ/Zҫ ⛖8Ⱥ^,oZZlAZv/55M\p\6Ϛ<^xP7Y['pg'7oV7ٙ{eka,p=2pȺwli„_V}xc][ \3xC:^5߶3{]?)VH| T7Ĩ϶ëW*W Ϭ,o޼}{ɩIm;];n!s \0ZRe>ѕZFgXǏ$O1a+]]7[[/j=Q.+U_6w#G9cݻa.޺&|_\@L{U_ߡ']}$1c0mO$rzbX ?ni1qhc7ӘAunذA=gq~$2r:eǎ5{E9L8 O^J/y_UW,b\ݷGu댿>.5#YVJXT.O"1r+:g{xI_/N~ؓң(Eg#X4~#dr_s$rM.:tXqq/R^JIۃ(( 2ujTmm ĉOY,AA˖%_u%i՚6n6 (!brr ~mذo5'FN+Dcg1~rUU}C1 r. Tu?%s#/im~Խ2 e׌dMf4,9;&fn~NO":"ʪȎ9fLhzz6oBLWFVN2ꉊzBH/Y֯2=00(%%JيqX"J`B];s`,f !jols$rM)Tw-V.1SN< :zyړӧ? ٮ䰰I57wP:vNzlp-[t/j)Gd1tF6[ 3ccwO#k\VVe97nuOƳ N!<| u*;M*:۶HK2D|bӧ/B&P^^}(Z:: Es,\Kqq9 %$9'<ӕd,rJLmΚ2R>mk-G 4,ɩF5PA+hKDiuUҐ1!;vخ ge0~3DeeF޽{W=[h%X.gͰ[ $Ql&BſyyyQ#w%ozE %%+6mScǟ}||ؽ! ϟ[,h]3R9Riidx{R OH11sy[;Wx^rKTꪞq%R),2?{ ҟ5QBxm/aytj.+7)8pQE%%G[^Jwh֬GycmQ# ˩ʕ0T*.ޓz)%JM]Oz;u U+9}yCi>C٠KfhSyfrQRN":0xicx%9C]@6y0IEkMc4okTf7DN|>LGKdڊɗ[EEE>/&fx,!=cb'<,0ӡ`ۣG&'~M#Wxݧe{ c&t󺧧W^ukuWx7ᶫnZsOv,ҩ jLZZVpp|NO_ސ!B>EkMci,+bȭ[w>JP5$-.Tn:bm刋y yxC!=cBJIp;L#th%X.,b9s[Yh w9ry44޽wܸ |*?p.'<=>3JVZM |_;2F챥EE60;;_|~rw7~]XXJH5 &u&M7:^ "sX$kZxԤO…JJ*蚧 ~@7P)YX a4C xzzGJfzMQ* 0RgڊrDHOϮ=I;67AA컚Zb!=cBՒx`80!IVs⋯ ?q^ӿ)'9Ʉ(Wc@@v񙙹'{x 6-:++OQVzz\BCʜW(Jgzvw^t9U%; *xJjz1'-Yq&:x% "sX$kպ.`usx{{y4nk,giLKHf]#%jM[Zѱc3gKt bߘ䋡]N3&wKK+Ja0 cigt;:zIEJJd̘'rD{=zm߾;,loc0 ci ya67=++j]#"L㠈Ȃb 0F'XB>EFq(e]x,0L/,2p`CA}!sXA*a0H9`,X Áiy|ޚ^. W_ׯGc4Jʳ{T"""o/˙ci EL#tHCkkOp{uNud'Ō H9~6|Z瀱H4Ȝ" `:$ ֪Uѿ䛽7o.+g{xIƁ%j:E!ƲnSXd4L4FDD*@4->8188svv>#dIȑ11swr$`IFZ2ujTmmYZZ9eʴ!CB&{DÞ;VkڸqA VeLIIEdtUTdCBƸdBIۃ8, qdZZ&5A /[t]Ji Ӯ| ڑٲԩ{CEL#thƎ dQyڵx.++Lƍ[Y…uӮ mgTU}S[{r^xa IMv!BOY/=[6|ߖ-jj:99ʘ)_66`sihhHNN0X ZRSbɰt$&Cnn(+ trK%rU=RjcNja?ǯo>|o]]*w4LiiT~-`; 7m^MG*7y k7n-zopNųKdFOPe塺JM3i ]7I# 0ӡewʪx 7 Tŧ?иu.룏iiԺRMr.J{//]!ς}`?;kQrZuHguOO!-i ]7SR2F?`C4ç&%}7&aѢGٚggTRRArr Ftsv%dhX$pTFApxmvsng֞;`KZbH稄X[ިIOA x΂F?U5ZZW7eUi0iiZL7&ҥG_ba]]7/kN~ pHɁ==wVL NLL\6;4kӦ~A}E104i L#M`h՞tfIENDB`onedrive-2.5.10/docs/puml/onedrive_windows_authentication.puml000066400000000000000000000046111513710110600246770ustar00rootroot00000000000000@startuml participant "Microsoft Windows OneDrive Client" participant "Microsoft OneDrive\nAuthentication Service\n(login.microsoftonline.com)" as AuthServer participant "User's Device (for MFA)" as UserDevice participant "Microsoft Graph API\n(graph.microsoft.com)" as GraphAPI participant "Microsoft OneDrive" "Microsoft Windows OneDrive Client" -> AuthServer: Request Authorization\n(Client Credentials, Scopes) AuthServer -> "Microsoft Windows OneDrive Client": Provide Authorization Code "Microsoft Windows OneDrive Client" -> AuthServer: Request Access Token\n(Authorization Code, Client Credentials) alt MFA Enabled AuthServer -> UserDevice: Trigger MFA Challenge UserDevice -> AuthServer: Provide MFA Verification AuthServer -> "Microsoft Windows OneDrive Client": Return Access Token\n(and Refresh Token) "Microsoft Windows OneDrive Client" -> GraphAPI: Request Microsoft OneDrive Data\n(Access Token) loop Token Expiry Check "Microsoft Windows OneDrive Client" -> AuthServer: Is Access Token Expired? alt Token Expired "Microsoft Windows OneDrive Client" -> AuthServer: Request New Access Token\n(Refresh Token) AuthServer -> "Microsoft Windows OneDrive Client": Return New Access Token else Token Valid GraphAPI -> "Microsoft OneDrive": Retrieve Data "Microsoft OneDrive" -> GraphAPI: Return Data GraphAPI -> "Microsoft Windows OneDrive Client": Provide Data end end else MFA Not Required AuthServer -> "Microsoft Windows OneDrive Client": Return Access Token\n(and Refresh Token) "Microsoft Windows OneDrive Client" -> GraphAPI: Request Microsoft OneDrive Data\n(Access Token) loop Token Expiry Check "Microsoft Windows OneDrive Client" -> AuthServer: Is Access Token Expired? alt Token Expired "Microsoft Windows OneDrive Client" -> AuthServer: Request New Access Token\n(Refresh Token) AuthServer -> "Microsoft Windows OneDrive Client": Return New Access Token else Token Valid GraphAPI -> "Microsoft OneDrive": Retrieve Data "Microsoft OneDrive" -> GraphAPI: Return Data GraphAPI -> "Microsoft Windows OneDrive Client": Provide Data end end else MFA Failed or Other Auth Error AuthServer -> "Microsoft Windows OneDrive Client": Error Message (e.g., Invalid Credentials, MFA Failure) end @endumlonedrive-2.5.10/docs/puml/uploadFile.png000066400000000000000000002771341513710110600201220ustar00rootroot00000000000000PNG  IHDRҠ*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxUn@}WxD$Mi4@Eck텆Vή8\j\x̵6Lg Z",;a @Ρy"Ka]R^ f͘FHrЏI O]"+o0) h/QwH=N1V|! `^e{‘b|ÌBљ] ;u$xo,xR|hdIJlή&j6|B*^jFLrb'ؕv.ex X^]%/_!gye؂͜m"j}iQHbexUXo2L2.c hjw^[cgzA/TGb,.Ṯ.ӛ0 Q:i'̥ k?^lB8 x&BZp75xWb5㍲#~7QX.]0 J}& ~?K&&}sG`{Nw9, }+FlZ1׬(+*_Qa"%pv5WtʣՌE3-" rMgnQƄ@=;=_~hOR w8K8^t%L'=pNо @K"Q|f݌tGbXx419Nɰ%܊WRa?x'7à_N2d"">7jIqT\,<}_oIDATx^ixU aU쬬!.^D@&"20#qق(nс)&( $,WEIfI:M}@bxM9TuyOZtA7r#GT#BPY* @e?,G`^?ƍǏ߿;viږ-[̇LjӦM?pkyTy&CSTT(,\Xi̜9S-\PilܸQNejӦ͎;0#0k׮=CrbThs?Ynm6y_LLdܸqrYĉ}0#0}e;,۷o/EtM??L ?#0ue;۶mD]CqQ%..H?sٸqԦM;v{`G`:3gΔ+g .`G`:EEErh,… ԦM~a8#0#0yƍǏ߿ǎ;u4`^{m˖-| ` G` 6M`zG` G菀5+?k?VD@XX"##`Et:wb΍7.ZHWls(((M(60&0M^?]+ujl6y@U[hcWu?_ )/+*DۛWx`gm@ա?&u9r˗/:gm@ա?&u3Gmy۶m{[ndd+Զ~o^Nv-]T駟w}wqǝw9rH0M^{{~C YbEѽ-ǥ9_93 :ujQQ-[ޤm@ա?&u3ǶmnذK,[eˌ3mǍ׬YR-_|;v5j6?y&}=8}课*''g۶m-[|7m5V;T#`BZ7_\|vĉ۷7ԩSGԭ[A.;0n믗>}Z+Wv޴iSN#Uާټyzq۴2޽Gi֬YÆ ի'/_^&}Ntu}\bZЭR;baa[!>>^ڵk 0!c?,U9={rnnv˖-bז?:F3n?~gO˿d׮]z/Ǐ3Oi0!_GQFJ_;gΜP+Vkr6Mzg\`6y„  իgI%GL/0tИ999֭kڴ̙336mڔ׫WOnkc͛oܸQL9sLZ&L%vG{Wbf͚~3foaN:qʕ+!>`G|].K/Լyڵkh"118믿իWݺu#""HѪx㍰:uknɒ%?8$$^z<ȧ~GƟW_{+V? }QΝ x2GLc`6GX #&DLH2#DLH}Ӣ?&쇊qF@||<Ӣ?&6E#ELvc]L5RC##`B~H&p8/(P%L*%%n/QKUENgLLڵkzڵk=@QC#0e˖ݸv{-y,[fi| _}<@UPC#0}+$$fEGGmV(!ZrrO>駟#<"Pu.-->7G`}l| `6~H7&G˗ϝ;wM>f ?p|@GkN>}ҥǎsYM!/^gee]tIa\\>yذaz|#|菹5j8rrժU[Ǐ=]VΝ]m۶EFFTozjiO4ڱcGӦM]7'ڸ؛K0~H U?:tF˽{6hРqe+?>|8((M5;~t^}fee 7o.((عsvޔo_BDQC#xt4HGݺu4i69..gs peGAebܰaM(x:{lС'O~߯kȠ#FhG'N(uLĆv… bs4d_ɽ{V} F>ocЭ6oޜ9dȐ u]/ҥKǏ0`@pppvĞׯdp8Ǝ۬Y mv޼ymN>=zhm' jz̘1ix-Z5k~ko_k`@S [r̦ef@DQC#/))r }~{WfB*|IIIr [FFFy督Gv8 31[|뭷X|6l8p\wǎOX|W\YpwK.=u|{+SC#[o3ʴiӊ{X222?ڻwʕ+X.N8!W1KBBX.^py9-]t߾}-OT#c$H?KMMMNNo@p8222H>o(@s |G|#v͝={ue??PMeffOZp}r۳gϞsΟ?t,~HZron6M2Jnٲڵk5l6y@USC##`B~H@LH菀 )!X0!e??k?&G` GLp_JQZ J(!TJJn_kI9ΘիWk/h۵k'{**G`^K,q?-ZSTe??JKK YdfQQQba˖-TUAlvڅmV(!ZrrСCm%"""ω'ʓTe??Ss:;vdhhh^^< @QC#0aÆiqjUGzmBBBT,o߾6oF)\p?7oܹsm6)@ |T2e??PҦMx6m$رcK.:uի ~HΘ1/Kp&Mo>*ٓ'O?zҥK,Y"?v)!*pɓ'?P~RC#U`̙|~~/R~QC#_ʡgϗBGM>@D@ə7o>G… |4wܫW" ~H>NC@eڽ{-[ge??WϗPă'?/(!7o\ZjɣQ=u֕GVU،34iR~sW./Dܹs2f֭kܸqvt &IyPvTM9'rssQ8 0\ N*C#*+eܸq]wݵlٲ/:ίjȑM:J^^\ 6nxȑq-ĈRW~~[b9<<<88{#6-((~]vOxⰰ wx񢧽 III}9shޝni_dee=57Nڙ3\'龟RO;%]q')))G)DU1;;[&~Ii|b_?{쩍1'\F yfo:}X޵kWÆ ]%]ѣG9۶mtWĚ5k~z5cƌǏWiV?rcǎM<5qGZn}T;;s挾ӻ32vWZQ;L}+]NRڏ+Ny\=?JG)DU7,i\jOZ<|FybСCSl%w}WZڻwy֭[7,Q^=[P+u x*Io?x >m\ߝ4_;*IJtz)OP((e?(!*?J;# ڛo?or9sf͚4vݼyoUk֬ю%6ܼysAAΝ;S~OUV&.^EYBOUΓJSeT0ԣJGJ7nشiO?ToFkco6lѣ?am:thnnn^^۵=h֬ڵkF zgEػwo(bAAAv… #F322ĠǥNʚx)v=zL8d/B,\Exzw: en&M>Ǩ\'龟RO;e\F:NJ=J菨$~HQزe 4֭۲e<&1vf͚m۶7o6FI&FҶ}{gݺuK]FF۵kgW_}U hb֬Y/(߸qݻwO1covv|ȑ={ibK._6ӻIM033sȐ!b?wuK/t%9F:Izzr{( wgz2QI_yIyGTe??WCUg+?O@7noѢţ>*OP+---,,,$$>lv=**J,|TUAۻw֮](y*G`jO>Dxx OPELtFGGwYK$UD_WjUGzmBBBT,o߾6oFn\3f1ӧl6S^a&SN˓/.Д@ur&N2M6C&#*Lg:t>غukS,1.MTk.G{Sw=|sĠ)ňJ̑7n\JYTTؿ[ Z1Gu@E)!jE|4e'Ȝ&ML:{-[LMMu%66vڧQTT /<󅅅:7b) +~H:r+Y 2'''((hÆ byʕ=zccc׬Y#L2rH&eHLL|b/WG/<%Ȝzi˧Nj֬Xj׮/#GDFF7d|qp:uԺu똘k'b+$|BT/. ֗n1"""%%t72?|M<ifРA׮]gĶ|#6nF\Ušg̘!qGmܸe>l۶mqymmڴXؾ}{׮];t ay^ YjQ_~X6mڨQv{LLo~/B(==׿qDlسgO)>h,{0G W|y3oaٌ{P-+++88\g ?ڵرcb/$%HOgv{֭CBBZjymfً/_߿GrtҥKb[%P1~HZpy/vUgϞ-^t%--M?A/ZɓO?ت}qqqچqPUdd׬Ycǎݺu36CΜ9#G*Ʌ;w{۷]n5Svcǎm6SrN:G$nפw6-$$䡇?O:tH)jrqՃ>ۊ=/QC#E|tt+V & 6L?}3?mk֬і,YYrX3v rX a$.&&f宒C >\`쏥}344455U)m&An>ٳgOáOݻ&[mV//QC#oҤI?=zvNS,kycbbڷo߼ysmf:ujxSl mNz=|s6?zhc1t?qS?V\aaa֭^~O|7](**J.n?D T|.kҤICa*5w%g em:u\p;*)y.Fxر j:T!ӧO5j--77_ Qڵ'l"""rϞ={%}O>rnV~HZpy qJJXNHHB9''N:'NNׯ_PP /^gi^N:Unݼ<}[}6CIg .]_)Sߝq۷6WRT,mǰ0e˖/瞓 ?'@uR%H ̛oҽ{7xýйJfmttP5k4X}VZy3v:<ݿFڣGRߝq۷ooӦM.]Əfdd[[vc->t:kݿO>xSTT1 e??PLR*>^'b+qe??PHQ?X61S[+ QC#ՔYio^x/,,׹sL1^ MT_.d%g|%&& ݉bI|)!jE)GݻOw}ΝX#*#|NTw.Ta|Ϟ={СψbYqAdbb|sl̘1 #P%fC5RC##`B~H 7N[v8͛7rXx#:wܡCjsΝթS'1.v(!XB8~xmW͛唔Yv|m\_pǎ_~=""7JȻVZԩ/..~衇,X`ۥ0e??kp~mN֮]8:u\z։|yy5 QC#(/<<|MV\\,]vaPXXMسgO֭n5SRR"##}ҥKGܹ`1x^zƊnݺmݺ߻p8vعsʣEx̙>}OqG`RRZUBRRRvŸXPULtܹS{G޾}{V (!W|||DDDjjꍛnjG ~H敖jv{BBB>Sy*G`j}l;wnѢ< @QC#0J<{y*G`jN3***""BKBvv< @QC#0kW^jUGҺuGy0e?? ۷fgQC#d<\.Wbb<+9sf{74cƌrHTS.kҤIΝsYĦM!}H@uZ|$ e??P~ADuGLmƍӖGͯ\"/^8bĈΝ;waڜsFEEuIm\G?*;A4idԩݻwoٲejj6K. w֍sQC#wkկ6oެ- tѣcbb:w,~.X@ ={W^b[n[nQ2GmAiӦPqZN+(v:vX/7I Sg`!~HƎ;w\y .;ڶm{+ZԊ]N>]oSL7nIVVɓO?tlllĶ}/OQx}Q洉'v%22RD]ڷoǏk֭-pVڞjٲG,i&}/,6Vƣ$&& !N8ѬY3átʕ:u_s$`i~HΜ9ۧO~I^.> ۷_|X0a>mYG{Gm޿5khK,ӖueǃG\7rJ,Ρk׮xLL~Çfzdbg>+V^jX_LmX*9ʰaôA(Nj޼ٳgoYghh/I$~Hl*ԩSkv:b9==]u&ᆵURjժ5ep㈫dZz{q5JsAAdGG3foK/׭[O+? *7LIXXٕr%$$9sF_:}tQ/n!CVZi/;;N:.\+M4hqvt=U{6.{ۏ]bŀcǎ5jHY 3(G,LY\%ۧJ^p8g}vʔ)7vOEˑ/^ܳgJ?~W|ͿT cbb{g\%QnݺڟKJ=+O{6Ǡ (_yO>GA5h[͛xË; 0o*ˋ}6mteeGa5k6:::66V5kJctYL2dȎ;ڴR+>lVܿԳgcl3.,Y$<<\&##wRyoxwg3PC#ery b'cƌ9s?)!+q:111v^v{Z}7\.̙3צMVxwe??`17nV*ުUG}T KŠŤl6ޡCO?T KŠ7:::<>Zիŝ(!KJKK֭V~@(!۷fIwG*99",,DՕ+W֯_`ϻ=3gδloɈSڲe˵k3 >ʇwRUeSC#~9k֬tlڴI w3gN|WRV~l e??P^:>ҥKr1?O_~6Zߺ챁@r8'N|x&M7ns\/KNU߉6{B *L ,//W^ڵ}.\u{쩧r8]t3gΞ=;hРǗ=.v>l0^zRHG+ .u5,n&xF.iJ~K.qqq(͛´UƇJSr|{$zzXA)!&߸իnF233 5j8rrժU[k֬r|lvG^n۶-22qm?6z@ I\|O1;;;x6t<]ROۺfǎM6urǽ{6h@[e|3x?P,oٲˋS`G|b 8rС5j/$k>LQFwyg;Yq$---88X[^z?,Ճ>m6hzVN֭W4G*˅ 8P,9r„ ./N{,T=esoF҈իWk,仰igc޽ڜG}$6LLLG=zbG|ϛf- IwB *L^RRRaac쭷ޒߤYŷ. =60e??{III?clΜ94eG|o˖-iiirnŊ4eG|ի ,{e{C~f`ߺؠ”@X`ٳg$cASLߞŷ.+>6e??P)͛'W Zvnߞŷ.+>6e??PY֭[i&9XJvv7fp˺ *@Td˵g,"///!!K_|cRC#kٲe|iL/;;;!!AߏX[W`<6(e??P8oɵƬ֮];mڴBX.uc)!(**Zvӗ.]z1ܘw}xiӦݻW~Vfo]K~Hrss/_>o޼sιm6Mq2> .g@|{+l& ʦG,fCYX0*U*QwVG,J e??`aT@ŝU(! >rM4@^ϝ)! &Jǎ{תI&w@XXuTZ|<{Xͭ& :Ye??`a_QSMdY e??`a]cI}gHp5 "(! J*3>j;AEQC#fJp8RRRNQS)A8yX7G,*nOOOu|x q?3::ZΔrge??`aTve˖!!!w_!]匏28Jrrr>}BCCVZ%0+ YTs~H¬Uv{[l9j(!]}M6<8\hh YTg~H,W٦M[-[jήp|h nvr,-e??`aZ_ ˗/b9wjeLIv{z%3gfgg'$$9sFn^>xԩ={FFFjG ߶m|*|AOرcG6xZUGwڤ-[&AGv{VBBBLq&|*Jt\^$GAwQǑ%!yHF=SQ*A¯X*H1 RHJ%!bB OlB͂Taiއل陝Gv$#' CG."HG9F_1_G1 c?` c?hn!# 䏀2@` a~H# CG?d?@!GOYVC%Th!#SE{EX=\ CGl6[||]C-X,qqqbU4YfEEEm߾+bMNNVh!#_۷oX,=zV CGF>`[oW^j%0?$~-''箻 o0l0O{ۼyZ%Kl6a~H@@tҒ%K/_^SS&X|寽3!#jΙ3SS+ 6cZ_z饪*5B0ڱcN @rҥs>(~aaa`?HO<TvsQTTFShݛvŋsk޼y/_V CGŋx 5B>}Z@s3 6m:pJ8qĪUn47}5BK믫hn!#!;;[<6mڨa;w,BCCϞ=ٳGV6lsLܥK/pn@߲8oYѣGzz( #޽۱SN~ZYxƄ7|322R4t!}S… 'M$ O>SO==tD?d? R1?uR~Q /ՉovY>eʔ￿r„ gϖرC Kr-G/5ieW[oտ:nܸgyƮk۶mXb׺|=Ltu0z創2ȳ_5ky睢#o߮uZAO{v\#wowXh!,,lڴir+;wvmÆ *Y揮Fi?Xceeell||ocǎ!!!?eS3gOs֭sZA?I&7xO>YSS#Ϙsω6{h"xZjl2G!asرZ 2 .\P)gyVKyn47߫ٳg;vwu3ja~H@`زeKaaH8rիn47pҥ,5Bl2ժv gϪZW_}U0uuuj4 ??b!#dÆ j:VZZv?1aW3*ڹs?^0<+W\jT!蔖 t_~P,SSS/\?1T?S~~~ZZڊ+N8WLGywϟw^%a~H@+//_zufffF ډO>V_c_ 0Ea~H# CG?d?@!G 0?~0?$C!#SVUPa~HTnnbGQ.j4)sNP-K\\XkU0?$k֬YQQQ[nJhXbccժa~HWaaaDDDϞ=nnX{GU4ѣG0 222<<|@fb?`Ȑ!ߙ3g45֯_hA j%0?$n֬Ywu | CG dȝgb?0zp<p<n/\0;,Xꫯ+LV__>%F CG`ݞRYYi͛7E)// 2{?|"H CGpMA>JD@c K,yj/^(ϝ;7eʔA 0`ĉNFFF߾}(ŶZ;{,,,l޼yIII111;vƍw٫7a~H@ R[[… by…gϖwuWAA\͝8qXlm۶ڂt&,++kժզMr^^ްadyBBڵk«:uT&@p3hYf̘QQQ'O!FlӦ+6/_5jTrrrVVbQڱi( ڷo/O>ݽ{RݶmGo7󓓓efk׮ݥK]|޸qq4-tM??e3hqƌqFdϿ|X>,.\PVV&+ٳwrn>>#}{.J?޹sg]8*//OKKSKعs!C  uӦM熿^~XqڴiZ} 8zRMM $wqGBB(:t֭[ |,)) z/tNw} nݺP"HW#Ae?̘1###C-(|kݺ޺pB-GNӟ j&''UW5#""K/M<~u ,[Vb'NG2tPǵھ=t-H"!!aȑΈ(|qرk׮|Arr\sUgIII6lӧOyy]riii۶mϜ9#kNʅ/2""bǎ+D+!#,,>,//oӦͭW$4onXG /C#F7nѢE۷oׯrVٳ C;2uBScvܹs+**djvUWW7QsܹDѣoG*!_~tѣGO6Mq(9qDN n?l6 01(0?$xSa t? cƌ={\W%%cdFd | V J&2^T?[@ILd?~PuILd?~iILd?~]I0(0?$xSf`P2a~H0j?TZ{PDAA{ CGrss-P?bA$cpcP`>/&68"`e,XϟO bAjҮ]`K- CGW̚5+**JFr/f111'NTjL0!66VFrPھ}`VEc(,,o>ѣ@ ޷n:1NjH J۷oÔԪh -FS}1@һwH J}=zZ d?%''gԨQ ^P+̚5K D رc0VB#ol}ѣꋅJUU6"ٳo߾y/5kw!gƍSWo=ZHb;Ϙ0?$xQaam&ȝg4uqȐ!y!#O@r~w 4a~H𮜜p<oȻp.^cɒ%ab% l?hD+EÑФhDomB73 /\0++k߾}yfȷt1^hQD_\UѲ5WDvvE[ڇ<`?@ptRff_SS5[^{mËn^ 3Be,YD}-j3gw}/aoذA̱SEWW{?`Dq&v) CG6bޘRUUN+qŎ;E'W=!D< CG*.]3gᣡ?p߾}آ{=h &"Jk9? GsO]j!# OG9l/t~(N:xcӚ"DhM׺t7j Nε֔6=G/<ݻwwI.={ڵkXXأ>ZUU%|ȐCо} sW^JJJ>#O?MKKK|AΝ;O:U:qlXD5c:iz:?"h4!tu?^^K.uukƛ|:gdggGDDѠG;ٳcǎ_Ν;\5oGEE3ͶN7Mma…&M'|򩧞R^><{nȑ|ʔ)EEEee fϞ-7n(f555<{ZbF}w8]iQyɢrQQQbbK/$'5(++GcY;~Y_BфEzw?CԩS#FpNotzum۶M,abȭ!ZzeSC;wrsO޽{֭[7ݹO4ڂ'OGAE*ʵ(??JWhË$]믿~ٲe 51DES *Ƌem]==o [oeoh|gCMII{G1ӮݹsLqAÓJfHyQdȑW+85ru։7ի" CCÆ 3grsոnkwt1l*',!!aԨQZhlz1ѝ1cF;tЧOLY sEifyW\Qޯ_?I:vx7>b_\?w),,lڴiqw{LqA0luWɓ'Ǎ'ЫSZ{:gF=zcʭ\!}{1Urm>=o mٲE˖-JZ#]gyVK=pyG/… F222S t7֭[CBBt2}tժrFWAٳ;v;r䈺=#[l),,TpKLsssS &љ1v$.]O@6ֲe˪S &љv"\Ԯv5(VVVGP__?o<$Ltiѱվ4xC1<222$\߻wz@fXDV:$mEd CG*6lؼy:Ҵ4/55Uto$Jڽ1 ٜ:NmmmJJs>ѱE\ěx+Q !#+VZJPAiiiJJW=k@:+W5Ӂ^~Bufٲ[.55… 䢫^k-Cq?e?@駟VXq uْ9rdٲek4KtxEzUW76!,[xP_yyի3d4pWO KG?Ԍ_BA x0?$xE|Ld?> d"uL%c0(0?$xS}~AD!#+ J&2^T_aP2a~H0j?TZ1GZ,~/Z! CGl6[||]CmoX_ϑ?0?$xŬYv󕩾b8qZ|D!#+ #"""##w)=zزeZ|D!#[Fջw﨨(1Տ[V#4a~H𖜜ѣG7߿_T+ϑ?0?$xf۷o=dQ[[V#4a~HYfMd?011QL Ah"]FS}<?0?$xWNNN8wOMd?@ b,X[iiib2z CGh)vܹs+**>yf˟y"HMd?@`oApD!#?{ %"HMd?YdO?-V7|E|ܹ)S 4h'N,//u222;p@Q.[p( ͛cY;111!!aܸqgϞz#D!#7.\ .={,뮻 rnnĉłfk۶m]],4>Jn"Ȳ21ݴiX6l,OHHXvXxWN@#4a~H~gƌ?uɟb6m b`Q~QF%''geeY,;ᣎ}rݻw!n۶?|h& CG;,Kl6[v.]tu|ƍkvGN#HM73#Md??3fLddƍϟ?b~8|XpBYYgϞ޽{e{ǏڵZj?#}{noٹsgΝ; 2`M #H ~z NiӴ CGGwRMM $wqGBB(:t֭[n𱮮N-$$$Di0ܽ{'ºuﯮB ]b&2͘1###C-ݳѣwuW^}UQx!C'&&گ}s%ю(OltSNO %''c®]sm=J(^кu[ou…Z]K8pD-H- CG/ #GuF입ߞ.Ϝ9+yOL U W b|8vصk> 99Y.;, /Qվ/2""bǎZSD@KFh" WZZz ?㤤oސo^ou릯ooЮ];foڴis d5ǖO>ݶm[}?W]]]Ϟ=7lp%w;>uf"06gtVkHHݻ_-A%t6۵kW]]}u-9sZGWN8ѩS'%4|= ]v}x8k֬&˜1cĮs#lo\eb_S6boLd?{a <~w뭷Ο?_+=zHJJz嗛?<6Erǖ;wr-gv߲վ.]!|g z CG|gD-ᣟcoLd?{d't@%4|ى u|f"0=;d@(ߠ0?$;GQAO3a~Hw5{  |f"YVCeW[dI%,Md?\Ţ=DX=[XI%,Md?" |Orת ݾ`!551JY?0?$]3gΌႜiӦUH=GGEĿ}%\ Eb?0?$uÆ 3XVЂ1JMd?𺜜~7|wJZ0F  CG^gbbbd DGGsO z1G|a̙2Y1JMd?BǕ111S#F  CG>"/=%(!4a~HGrrr|{JpQ>Ch"*--MĿ `ݮY%K2=;@(8U?qEE?!4a~H6oެʹsډ 8l6[fffzzݻľ}.\X\\`&2`c DY~kƵjjjK. CG >߰a}g9sXVC"4a~HΒ%K~i,7|sM2eРA 8qbyyѷo߁r֎ᣗ ͛cY;111!!aܸqgϞz#d˗/}OKUUU)))D~D!#;o.\ .\8{lY~]w܉'nm۶ڂW DiӦMb9//oذaAʿ֖o馟Cyyy{U{*ˋẂD!#kcƌܸqV2~_|Y, .\(++ӻwo~biiijic[8~xΝ^1W>|ZhuַzA&M:j[f,߹s!CDa>}6mk[WS"H ~z ^iӦB\b7oG jjj/^h&2_͍_Čt ?Ы;DСCn*+{#|S\3L [4JS7oMYqX{'NuʦN#HW#>}_~ hch^&2_1cFFFZQmO=TBB!CCYxb0>>>11P|ҥNӟ$KNN:s[EGGoN8Q~pС=7bBO=Ylw߭ZzaՄ* ?|oժU24Gڿ{ CGw***F߫<`>6~b_|d3gBnnwީ\j,;vڵk|ˢ!Cdo,6j?:BO?zXSs={U2񌏏֭￯_FDDh$믿Kggg+|D!#8v:۶mk}"##ew7˚ڵ5۴is dnݺBW珎wߝ0aDDD'NtI[^EEl,^X:d5%ۺu1c:d)1J rE/ CGaAo#\ӪU;Ԓlߎ3f(9{c=& {GdMǣgmXD}߱cjSb\ALd?|%7*R3CY?s='OZEEE/,z!Q~ԩ#FgZvƍKJJjjjL"^%DT~Ŀ~B#t\dh'ٟ/ &̞=[t<*{þx;Y4t;ϑ?%0}Uٌ!`3ګMab=*~駽{ʵ);&qÇMҫڵK~7YgΜ˻wرBWG\$Hqq|xٶmjOdѿnܗv#5k8>k'3DLd?|=W$LDh464ܻwo;&q3gδjժD]a[{@ާ^IdN DsÇ|ENt"W9tF! J&2`>7"H/!|4CY<tl6ۄ _<:thJJ#вIDAT:%%%#GtL}g]v&m۶S~ZX,SLq5:-aQQhVKH5v饥bY̦MQ%Rk}hwF! J&2`>7#"H>!,cO4cǎ7xO>YSS#+W-?ڝ CG4*㕵6"H>!K^u˚!///66V-wdgg+|D!#(77bhEX=oA, ^bbo߾Z,;vl>Z^pyG@h"Md|Ak׮xת \  j%!@nҥKӧ[V'&2tbbbd ?ڵ+**j֬YjU-̙3ŀ"rttiԪXnn#GL p˖- #4a~H۶m[=oXx>FDDɕZ@#1D!BۧOQq--[fZYYY.]R_W CG\}ʼnQQQ111FR+h &1Je8x`i޼yj@PYYͯ CG\ o߾ FVR_~r||wJh{Afff]]9?0?$5󨈈.7|JЈ!&&F""LVZZ[o6lP_K4GVwuL Ɲg(fΜ)G ?0?$wo6n+@!'111 &*--MII[aժU+WT_B4+G0G<)yNjl⹈'ŋs_oρO>F="ZPdXzuyy"?0?$66M|wޭ~Û6oެy;}.\XTT> 733ׯr m *..V_H\R!=D!#@PY~kV^^NQMM{wy%DE]AC D>H4Ć7lؠNw}/ZVte^AC Dsa 2|f" HرC UUU)))/_bߠ@dR!=D!#@0طo߇~Ά[13g@TXX¯ߠ@d R!=D!#@Ν΃['Ofeego\Aڑ 7i&2^^^޽{Ip|r||f" ͟?_T555zuyN D/V_lxTAO3a~HN>/egg_xQ=M_ V DׂTAO3a~HVZu uۂ}כ6mRO~TAO3a~HՉo&/jEP8<Q 7i&2/󋴴={t6mڨ)qY _^ApxdMF*ߠ0?$lÆ СwSk踚ᗗ ]Un^/VחlM{ 7ȇb{nukf1kCTAO3a~H ǼnݺYg}3Ϩt\oE W,KHH,;v)#""DS=z\oarB֭SRR5`ڏ@фԩ(~i-,**?~vtRǀU(|:t ofddB:U{ƌcwqIjbݺu֭[.;ӳgώ;/9w\xFrssRB%ΛImB z CG><}8'UW42e_QQQYY9a„ٳg]DJ/tښ^QQu]m6\VVfX.vy.]ٳA#P4!{&OlZK/N1ba@5^[[2D,oܸF\wɲCxj9$e^xN{w|AqC;w\#^NGJys4H4}x!1FDDtIޟٳm۶=~\}hM5믿~ٲebJ:7tӧ~jYGL(?+ѣLzkWJ~~'unpw0Nk׮]jՊeKRV;sX޽{wǎeDT֞Ś5k?*{*;m:]=Fa j2R!=D!#@`s?:~Q`>|XKN:uEVp]Xf͝w)֎1BL+))Ȑ=lV? {7XIx[{ؠ}\]NSYSS#+..m۶ ;=PDTCGȌ3|o2`lcE A1?$@TVVctttǎV,R749=;ԇ"Jޠ\?oz+< PDTCGcǎ7WGR(xJsc~HB7R(xJsc~H64MKMMIu|hެYS'?R(xJsc~H4M2eJII֭['7M4I#K}(T *E!#@B>| qD@cE A1?$u R(xJsc~H &eee[>>}#zѭ[!C}222:vؽ{w.5c<,..nڴ?ߧO͛7ߒ tĉ+w>Q*"MgΜ馛Ν;'ӟ}Y{]~3dQYYY~ 0hn AKߵk׊e˖vmz{RRҊ+s=7j(.Աԇ"Jޠ\?lܸqobz{~deeIk]Y\\ܰaC}ѣZ*P_o}x.Աԇ"Jޠ\??޽ʕ+SRR \pʎqŽ{Λ7oРAO>Ѯ>֦-Z@>Q*"}]f2x3g^xQlwΝ+..;ر]v>9CÆ +,,۷h9x`&M~ʌD-[ի[nYZv|wk0_ZJl=zUaE A1?$p_NNN||9]yy1cvڣG3++K4qIIIw7nA!|ܹ|%Ri?3+XCoPi.r7nܸ U>?~K.^{-ܒnĎoy衇Dϔq־}{8KvډKAQq{obb|=NګW/ڵkWlǯ[N /]&''狖={߿_lO>}c.[{Sj K}(T *E!#?Կ}N4Qg sϊ+ ۆ;vL)6ټy$ PDTCGpͨk_~YKJJիgd|IU̻ gϞׯߠAfϞGwUVV>O?~S嘂8B۶m?|q 6#_znٲ{ӧk׮]tiݺȑ#>cM6FKiG#DF(xJsc~H.:nin|AN2buO>W^뮻F-O?<`Ĉ\nرcFrr.?Wͥm?**j۶mb{FӧO'''5>):tq c(`F(xJsc~H.:i dQ8pԩS>}zǎv҃Mͻ?Fc_cǎ?7hb{ĉFgy'oӦrrr C0PDTCGpa@s #G&&?`R7492BFǐ2Q*"\uXh҈ @ʘ|Q"Jޠ\?keeeut/FY3LJXCoPi.r𵜜<:L{sdu> &bE A1?$*++vuVq&]t^iZjjjҬYC^$cDL>~R(xJsc~HM81..N 0OLL:t_RL>ziL>E]XCoPi.r=ab߹s-[]=bSMvĴO>b[v+"K}(T *E!# qqq:s ֫W/1k)ZN,R749~\m۶̙3Ns1"K}(T *E!#AtbbbSMBB1m&R(xJsc~Hcĉ{#_j/h1|LdcE A1?$߳gϛ>7|ڷo/&ol,R749sw@mҿox,R749࿲ogxnbg"K}(T *E!# B|w6l̜[%W/55U\P# OTիϟ?/(-Q2?.q#(PDTCG@ثK9sl߾]Cͬ[NnUڵkWVVVZZZaa\@;|(?1+R3#qxXCoPi.r-77CII4Tyyy222.\ W-P;9s'W$jxy;<>Q*",Xzjy9ÇO4ĉrn+--&JNBԾ5kdggC PDTCG@Zp͛U bN<9uT"HԪ)Sb^ٲeˢEXCoPi.raib'tɓ'QKI&>ֹŋٳGԇ"Jޠ\??m4yL7dddkuaJ!\R(xJsc~H?˗/߹sBۼy>,W3P3jCM+W ԇ"Jޠ\?ϬY5gϞ-W3P3|uHIMM ԇ"Jޠ\?LQQa*++rM%iܹrNwyP>Q*"f~C > ڵk͚5rMյzjQTrNw%KC*,R7490!𑕕%4P]|14q UXCoPi.rafΜ9RO={ի'^!{6iDsEvڵ&Aq߂ `8Ւ:VvXCoPi.raF%ܸqիעEj(EvڵG 6߿QFM6~w^\Q8111?.r<3~4o/%l-A\U :N@B}hIKK6lg?~|ͿȮ믿ަMF=O{Pf/xđZ=Eگ>rƍn&LS2KNN~-$ůwx>քbĉ=qk7p@8<~ppQǀAp_}ǎūɚI\_)bh|r۶mvghnP?f R(xJsc~H3Ǣ"7H{I***o]o1bă>xgۇV)..͛7GЗbھ}/ұ/[fXæկ8nҏfpx \qӧOp1A?wx>dmڴ1SO:uɓFOq x_OG}T)_~)[_)ҡЮݠ2/p!;ppvXCoPi.ra&xo߾kFnHJJJemjjjRRRAA.[6o\߾;ϟ/6V^xE?Sπ1۵k{=(GolfFHW7:@f}udwy 7h6۝cq;~ppQ5Gנnʕ+UGzirIVV(Me*y?Ckjx=dK}(T *E!# O9rDj7/J\s3/7nܬY3&{-Zk]W_}UUiذ/?h| 7hwjvAke(xUP3;Cc28Ο0ԡK}(T *E!# (Rc|D4WtմǏ_{Gؾ}{֭.]jKwagϞo믿K߃uݻzZvS+Vh۶y/ӧ4#d0[q̘1v#e¯k47hwjvAa=&O?8T39Ο{*'PDTCG@q?͛_oڴIks3HlWk׮ۇ 3gl٢?nժX= bw񦙗wԩ#F8p`݃.FqSev۔)S{i |8X )~p}n_6mvLlf͖,Y/آE q|̝;&Ӹqc` 4#Ǔ&bV RRRF)9r_f DjIP3FhwvS:ax?aE A1?$QذaoF}뭷)7n\VD:̝;Wo_M6=zq-[l277Wio0{l}4===HπvnƷT;vpo].׿U?4@O𫵪:Toqڕo 'mҤɐ!C\ rϞljbΝXoZ1#Tw%"   $^:uz饗kʃɤxUODonwv!pvXCoPi.raF%D5XW pb-[p!q UXCoPi.ra>Godee5 T]m_7#C&R(xJsc~H3oCjvZf\@u^Z\gյqf͚3Lqj!w%KC*,R7490STTh"y5 T('w?P%%%P K}(T *E!# ̚5K^!|r55nԡTyp K}(T *E!# ,_b \̛7r55SPP JK6޴rJyp K}(T *E!# |ӦM}@+((QK222D50}t%.aE A1?$ݻwW .N<9y .u o4i(3ŋٳGԇ"Jޠ\?… 7o,sɩS8qB`=SL!C[lYh<0K}(T *E!# -X`*|XE) w#^=H`E A1?$DnÆ b=JE\MP& OTիϟ?/(-Qa4?.q#(PDTCGpa0PDTCGpa0PDTCGpa0PDTCGpa0PDTCGpa0PDTCGpa0PDTCGpa0PDTCG||SZ"e(T *E!#g4_vqqj@?`R749Zeee׮]7oެ4t"j @?`R749ĉcccRKLL6lj@?`R749]~~~LLA밼N:EGG+~(CoPi.r HLLa;w j @?`R7497WILL?g͚%wZ"e(T *E!#ϷtA6m3"e(T *E!#'G " E0PDTCGzb2Q*"׀ne,Q"Jޠ\?ξoPX E A1?$h2RSSu)Qwf͚uYqX E A1?$nh6uǏkdݺurS*))~G D<~(CoPi.rZH~(CoPi.rFx "e(T *E!#dffN0A.++kݺӧGѣGnݺ 2DѱcݻvqFX-#M>}ILLܼy-999))iРA'Nr'!E0PDTCG9sM7t9{휜!CWTTƆA#| dqqbYv^lmݦ'%%XBlf̘]CwqGRRhݻƍ,xހf۶m;t:w,}A| .X E A1?$ٸq222VZ־}.]!3<#Zz%n^xqk׮zΝ;=hoz!h)))fC}'L{ȑ͛8q"`O#C4vݤGa%y.[{S@?`R749s񤤤sEEE?v~Sl$&&fFK@D@`2Q*"7?{(9{l~ 4{>H ׯ_YY)w|ӵk.]nZ.顡^z\TŸ`=pw/]Tl/]πcnGa<+**ڴi /tyvQ~(CoPi.r ^4?jU'|+u]GܕEEEm۶Ml޽yZQ4hԩSFUC Ck۶8%ѮQ9C5nXn dҤI|10F(xJsc~HȰ)D$7mڔ圜jGyDl7hb{ĉFhxwJzb/=@<};{ v*++kѢȑ##iӚ?u> G&SWpዩ VT0PDTCG'G#)ꫯt뭷ZJ?>::Zt1c{ܩS[ne̙ZշF2XQ~(CoPi.r ִ cd`*U2Q*" N#LjT+e(T *E!###FY- VT0PDTCG'GF*>F2XQ~(CoPi.r oJҽ#2TG,Q"Jޠ\?@H3n#E׸A* | Lep"e(T *E!#.]l߾]iGh^0iZZZZ͚51SASƍvTX E A1?$P_*66V H9rB۶mGT7qD+|E0PDTCGu ۷ob޾}{".]*&.Sb*͍T@?`R749N ~vA{!wЖةS],&&&99;X E A1?$0tshoӦͫ*w6~x1r-l??br;X E A1?$0PYYٶm[}.u Nii1uСSNLe0F(xJsc~HWUbbng~СCF(xJsc~H!??_i |]0tR=;`"e(T *E!# [haM(7< @?`R7496{$< B7@"e(T *E!#RRRdɒU2pT)~w #CLffeN:%W)QpsET ~(CoPi.r~ʕfZhѡC4XnrkbJ\bEO97LMMe~(CoPi.rԽ={̘1C,P]VJMM=w\m@SәWnnnZZb2Q*"@[\E^5V\\<}"h"PRR2c 柫"e(T *E!#`-[6%gΜ>}?4|ĈQQQ1c u,Q"Jޠ\?3k׮WlBϪU#LIIIzz<Ұ"e(T *E!#QQQ1gyԂUVuqbJ|EeQ"e(T *E!#URR"/ԀZpYf%bv*7a2Q*"@pܹsUPk͛w) Č j)ϟE0PDTCGu`Æ ;v쐗h@/{= ۷UHKʣ ~(CoPi.rԁ,y}ԲsʅL^Yˣ ~(CoPi.r^FF\@hQD]YYeԨQ5_sa޽{lW?<ׯ;9s^hٲ~N'|ٳg7i$??^-RK͑?"dEFhΓ.rk],Q"Jޠ\?*cϞ=?IbW^iٲeLLƍ'N;yM6}O<=#I&F2߻x℄Ѣ򢢢Os=ƽRq4aN,`}5kO>ۇjѢG~饗ģ'=g"2mf 9rƍ_=a={V͒_~esO8o8OjNsru>}wپmڴiԨN>w+:>'=7 Q@?`R749c(bo=U{wҤIX#Fx?^ZZz}=z*beyfZWf۷o_\:IKq^=`g1ꫯvܹlРA5ӑ M6mj|]?|pq|999yj8v_?x~_M6qzSNsQQQ8b[nIʀ!zcӟGb ׯc4fǬ4 Z?GidNl^*ٟ8#<"1{ԩz5k9r\ꔔz͹#T"e(T *E!#:?۷O!Kcǎm۶5jHXJ<裏\kݿ]&%%2w0oH 1 ֭8SNi#G?z7$Ng>"U?MڵlU>:;w4Ycwyի5AU嬷/+W^m(N,4?5u>!:G0˗ϕ֭[7oٜݹ#T"e(T *E!#:?;rpѻo>ѹ%7n֬fDc-^{5.y)p}p]ml؝Y>˖-M[ׯXK`&=!9~Ѻc>?2|,6F5ydA?"dU#{9[ۭhuӷKRunN>y:.I \iU9o׮]* 6lNԑ?`2Q*"@phdp QV+jǯZ;R#l߾uK.5e`ސ\Wv'cOiiibb1c=:ӧOʼnO?zf|V%z?lv{և_vͯaÆ+ݻwk!˹ > ` sfxV>3+Vh۶V4A֯_Yqū9Iڝ:G,Q"Jޠ\?*~ؼy~[M6Im^?cƌ)**_}ڵkaÆ=bx̙-[{G[j%zOCYud<>;v8st~NK_~9!!Acgbֳ$wA6mfyD 1͚5[d/b-i{h|1qƍ[ؽ{w% DROY1YHII9rsȑ|EnjrQFoh>|b5u2O}fvOU8bobvmSLѪ~h/5(Ij6禎Q@?`R749JU}Fot7pX]n Vƍkժ١Cb_BiӦG2 -[o.͍v'c{g|챴m۶ .4|o]׿zlҤXu`_:TǏ_^^Y]Z~~}2dȞKn{Ǩ_8NLL;wZc`czzA?"dJ, 4H:uz饗ʃcknyż'N^= >'|Q<+4m߾]olV?cǎ5虐0{l֓lM ~(CoPi.rԁLyq2YWf[lLnj:!XuXF(xJsc~H?{Y揻vL_~ٳg7r! ,Q"Jޠ\?k֬+dy}ԚC;r!a.N7nj֬٘1c>S,Y":,X E A1?$PΟ?G E˅1%H1ȣ ~(CoPi.rԍٳgߖԶYf%tH*7a2Q*"@8|yUP vܹ|rPRPPrJy@?`R749ܹsŒ[^n>}/b#:~(CoPi.rԙ .L4ɓr pϢEv-z[x={# ,Q"Jޠ\?K'N:u*mԒ͛7/\P.; TN2)12lٲeѢE@?`R749؉'&Mtayի,X JKK#5kEP,Q"Jޠ\?{.\Ș7o_ W roeJ _?"e(T *E!#PQXXk.y=پ}9s233+++ ÇҘȎ;222Đ1T@?`R749BW^9w XH Z2lذモ [bJ͍)12F(xJsc~HH VT0PDTCG'GLe*Q"Jޠ\?@8=@`*U2Q*" "S ?`R749Nx`EU E A1?$p{$T+e(T *E!##D2XQ~(CoPi.r oJҽ܇U2Q*"BZNNN^^q)ŽM\ÊF(xJsc~H!K.۷ooyyy;w^ a}XQ~(CoPi.r M0!66V ȼQF] p+e(T *E!#۷ȼۋ.wp> ?`R749脄={;@rVT0PDTCGݻwJtttllk&w0> ?`R749*++۵kB||<< |q+e(T *E!# &mVa}XQ~(CoPi.r p@||y}XQ~(CoPi.r?{+WLII[*++4hp…+;ŋ;o޼A=k5ݢE_rVT0PDTCGalk֬1Zܹ|9o܇U2Q*"@7n\FFܪ&xx.]\{rKzz֙co桇JJJ=SRR]W¾Ϟ={bbb/O>|p#o^K!Cgһwo뽗Ym۶]wUPP]:)S+ZQnC0,[{+s\ÊF(xJsc~H ,?~<))?u@К sϊ+ fv},XЧO:a~ǎ{ /ޫovd1yGyD:ɗ-[&W^z5v'l޼hC }XQ~(CoPi.rn}rHvcIIIzn$yw>#GƑϞ=ۯ_A͞=>2^G֯_Rlڵ+66VڽaÆzlRonABEEE6mrss:$p<}#1谢*Q"Jޠ\?"1N?XTTԠASNwsdQG O>yWѣGkk4oh0w :ԸqcD>ĠÊF(xJsc~HHl #0pShUy;.z]gy'oӦhTo6mڔx뮻̙3շ ]v>裚\U?29"|Dp>ĠÊF(xJsc~HHlG#G{Ν;'%%g65'OۯZ߾}Ϝ9cӧO׮]E[ouժUZn۶m޽kf3>P#1W+e(T *E!#"  QCP\C : ?`R749䏈d&PAYKڇtXQ~(CoPi.rɘMuP\C : ?`R749䏈d&PG"G\jbaEU E A1?$D$c6U!t#s1谢*Q"Jޠ\?"1jA#ڇtXQ~(CoPi.rQ7D\ÊF(xJsc~Hg4&]k Gc*Q"Jޠ\?"TVVve֭Mc6 Ν;{/w:{Y2,--l,d#d!.aEU E A1?$D8qbllA곉X&$$ >\ #O=T\\AshrWD".aEU E A1?$DϏح[D,h;v}v+Zm۶>Wm"守D\ÊF(xJsc~HԿظ81tԩM6ݺu;T޽,ݶm[h;!Bq+e(T *E!#"PvvwqsX3##CS ,h߾>W b[ȝ܇U2Q*"Ҽ Ԉ911ј6sp+e(T *E!#"ĉ{衯ixn@xꩧbbbD-~3> ?`R749䏈LzئMyB;t jo.aEU E A1?$D߿Me3~> ?`R749䏈X73,X jyo܇U2Q*"GN:tҹU2| 55U&|GúdɒyBbЙųl2v)?_p*Q"Jޠ\?B~~Yx/BuMСC-cr^'f+VYBbƐ':Rs|TerVT0PDTCw9ZjBD3f|rA={L>]@rssۨ< \ÊF(xJsc~HɊRSUUK*..1cxM*Q"Jޠ\?FӦM;s挼lݺou0-[TTT̘1C)j}XQ~(CoPi.r#Vjj*|7VZvZyjtiEp+e(T *E!cd%jΜ9rIW)77q*Q"Jޠ\?F3g={V^?JJJ*򤀫$RSSS'5> ?`R749ԩSoxeff^pAM3222|*?Ũ..aEU E A1?$@_|!oyyy6lk@D۷eK.bT*Q"Jޠ\?F >킀^z%VDLy"@ S~Q]\ÊF(xJsc~Hsj@k21TfuGq+e(T *E!crŀ7**QFIIIK.{x˕c ]9_^䏀ߨM6=u~}UVYYY[nݰa[,kj!Jj&G&F1/6lؾ}wyGo! E\ÊF(xJsc~HŘr1էO>L 63ό?^l8qbر͛7oڴ?~Iȑ#?7n,M0̙3ڥU+Ҳe˘7 {[j%˦MrQlmOyG<-Wٶm디ѡcǎRvV9Y5CG"FǸ#73{?bZhaNs_oӦMFxӧOKH8%)[;N@f?!t*Q"Jޠ\?FcyyX:tٲe֬Y#VnÈ#ĒL߿_֎?.+**n͛7mbϚ^VV&~KrrӵUI&~h4߫N8m4H'Ooyz1/_@OV~aĒ;0V*G3sW_)**bݲeˏ?ʣQ۶m`{֯_Ú%3OhvShW#Sh޽Nj=A:#t'xB,8暾}Z?u͛b8|zDbzAG}i*))?p~o׮vix1m۶FG5'řۍ7b6 }z˭+U̪\ ?O^}U}Ν;A?~?nܸQfb;))_,d >NLDpN?9tjvUE\ÊF(xJsc~HGÇz!ӅX5ҰaC_|Y=GoTDZc?-hVBνbq3 x@ǃMZyڙK\ÊF(xJsc~HGuS9"oׯ?{wc_RsZgFDO-vX?o_U{h޶;ȧ~j>)b =`gǣUʚ6m*_{䏀8bobi]EL)MǎI̼m7{袘B۶m]yp3OqÆ bv4j{ڴihni nGǃBBb,O:p'?Y|{}?OŕO7l۶M,qNkǎ6mj߾}] Eqg!S"3HF!E>?ѢE rTWWtIGwر?s\s(+H_{8),!#6`PDT`I(?UW]tRo'Mt1q믿ŕÇ޽]a͚5;wOP>رK/u~]vWزeKVCxF5?~W/^,yBHiYCF*l Q`Hhoj={ ğf ӿs=W,}]wc;wfddD^۷oϞ=sss:DK?p wn軻+z>3tQ쳸˕W^|򫮺J8999 "V>餓ܧH?PwL,!#6`PDT`I(? _J$q1cbXYYj*q?lӦMF%ŖO:GǷ;x'{~S\;w1UTT9ǔ.B 2Ra EDf4CJ❠ R.|sJ^^m.0`@޽{I'}vQ? W]uxqZfCщǢ~3q^Hp-Kԉ.$B 2Ra EDf4CP❄d/Z?#V8p`;I&%o2337ܹsۿl#6mw_W1n*j+ym*KHfL,!#6`PDT`I(? _j%IXAR|.բ iq0CT؀)CQ$M1|)x RT,KHNL,!#6`PDT`I(? _*&ޡ'ER3 1tH 2A4 ×w uH񻔍.dB 2Ra EDf4Cn*ȆIT.B 2Ra EDf4Ct*J.B 2Ra EDf4CTVVFKPA]i]I3? 1tH 2A4 C0H$x\**ȺHt.d:dL i!ѣxKrqqLVf˗,Y I<aB 2Ra EDf44#^(<$D4%g YCF*l Q`& jjj]޽{g͚$D4%g YCF*l Q`ceeٳEL),,|&1"B3`g~b萑 0e("*0iCc+FGp 3eʔ֭[7kl͚5Zr{C$f>Zgfpg!S"3HFaujLfyyXnݺ1L?5FT-k֬YFF\ СQ$B 2Ra EDf4C cr8_C5)Fzر E ,!#6`PDT`I(?ܹs_߲e6m{^QVV6t֭[j;p>}ݰakHD~ꫯV^s޽#F(]w۷/z W.,,̔]'<3jiժUuu֭[܅[ }{rC_bDE|/]`.G衇4ǎ^0`{ǘ6ƣgpg!S"3HFcyyy&M6m`Ν;˛6mgE>hӦkr_wOٳgWTTqeʮ]O̵hIYYYӟΝ;bĈ.H]l|Ȑ! >Dii<1#*^VZtI"`n2}$En';:6<03? 1tH 2A4 m7lФIǵk6o\^yꩧ:wܢ֩ڦo|njٲi}蕅 ^yb.:S1tP*x~>^1c<5)FtϞ= =z6o;6<03? 1tH 2A4 m}[pMz];ww_|yMMx5fDަo׸&~T-y_}ԩSsrr:c{!z!Ck˖-r-۷cuKޙkS 5k_}x^nwxFÙ:dL iTWW<[o,--z!w뮻n(//?p9izIDAT/|D"6lXGA<ʜ.[][y˖-oxĚCt{%TX~};u4vZ-<^1c<5Dꫯ0a0G_;v${09ƣgpg!S"3HF~h奥^{m-N?{][niٲe֭Nw>ѡCiӦ59rd۶m7o޵k|.oM6Ox>}{kL_M!03? 1tH 2A4 ӡ;w֭[-LYnݲeSA"B3`g~b萑 0e("*0iCs_|"ȑ# M!03? 1tH 2A4 ӡ}$!"*3 ,!#6`PDT`I(?LQx׮]v$D4%g YCF*l Q`&7|ȶo7u("ɏ<aB 2Ra EDf44b=ۗwQ$Mfg~b萑 0e("*0iO(̙3gʕ^`߾}Ǐ Dpqg!S"3HFaZ?do>n8ʚ!Ɇ<B 2Ra EDf4tŋ? VUU5gΜjC$A$:dL ii? 3fXzr@N6rh3T8CT؀)CQ$M0=G_bŊZIL$޿(/ҥK90x<1g qg!S"3HFa:#E]Zp0CT؀)CQ$M1|$)Ђ:dL i#HQDL,!#6`PDT`I(? G"`b!S"3HF!cHEthB 2Ra EDf4CTVVFKV y]3? 1tH 2A4 C0H$x\$ 1pg!S"3HF!c{fG/bX.n~U *H/˖-ٳ'P?YCF*l Q`H#Gfggxq],d;vt+H7ZNNΨQ,!#6`PDT`I(? Gqqqfff֬Y#/ܿ*Lz-XSk&rۮ]; 8CT؀)CQ$M14}YرX_ H>jfee+8CT؀)CQ$M14sڵ9ljb% 5J$[nnt"J3? 1tH 2A4 CS]]~%H ts˗&h ,!#6`PDT`I(? ȑ#۵k'/gB~M77h ,!#6`PDT`I(? SqqXş|}R-4€.B 2Ra EDf4CǐB7 tIDopYCF*l Q`H9s3H933? 1tH 2A4 ܿk?se"O %#3o޼rRݻ_y啙_OQ#VG3uݓNѱS m/((VP0QSr`%.bǨ B 2Ra EDf4C[pb>w)O}|z_#|1w/Ҥ{;:J &Ϸ/K1,4~U^nVo]&Lu˱c! g~b萑 0e("*0i?7=3ڵkѢ~w;w^-[lӦͽu(Ogy)o?ޚ;v8p|ŭ,>+/?'>t>i? ӟ7oy5~霜K.$t+.W]umۊy'Pq1S훵oN/#m](G.E{饗:tQ-oGAbu*}x}VoqP˖8Q{ڡo?37o֫W?o/viѢY-Ž-NOf?Fk>8U K\H|ۏ~x'~ӮbYYg*`o/8C1f#F>yݺu}Ə._tΝ; 6h o[oZkbk7xcEEŞ={x-I&n{H$⿏\[Kz+W:ǟ1c<(ׯxk?m&_|qey7޳g}s-6x=.ȉ:1߿o>+s^]ďGAz衇Ǝ^0`)WT:GswCڸ+r#>]tٸqcBzLnؐw?]v㍃eʒ .˻].Ǘ^#oʲzaswJk%\Fb}Kg?[^|'-7{?[۳Xlm軽/^GgXr̓o'GЧb~b၃>唓ݺV\&Mx1w7{ף[x˽$ێ3? 1tH 2A4 ܴi|…;wKyyy&M,X>hӦs|͛7ku޽{O<-[+{۷?~.++;gϞ]QQ_طM~g ݧk.q}ժU-ZՉ~5EY|"Ѣc=O, G1VD3޼xA$;[l LuYhnE#>)S=m۶E/'>$p}}CY\"|gowl_si+;vSO(ֿNywxϢbZ1R]w [so|WDڷ~qyC׿!؎ڽ:뻛r*wƉ'-xO6v/YCF*l Q`h\~}ӦMgdd8Հ[vZz=† b }4_ucy%$uYtgo}/~̍njW>묳^uw'|"6+V-c%)|ǤO)d=E1[>o#[xE?Dz»L38-p譝}roV+"7nkEo={7sϿ%^?^o{Al.3? 1tH 2A4 MNLw 7|~ڻwnذa`x%7]‹/ ?sqH$~qw:+XK/+ keeeN,[]!Coٲ孷Kjjj:%\wuE(//?pH;n*c) 4o߷oΝ;/roygQ'+z"i/Kщ:s^ 래Vu̝Q17Ċ۶mh"qEsw馛G?ԩt ꚏ篛g>ݻر#o韯ۗ[݊{/wnqwovWel?jxEo?qc>/;o`CguFfo_e}^n_Wu`ھUlֻiOsf%7 O6vG?rg!S"3HFq׮]Ço۶mͳ</1bץ^{O{>`FFFMAݻw~Weeȑ#]ڵk~~w_Л6mׯIO>n喖-[n;tV~5mv5׸ϷYfxϢNOW^~"N>{>i?||k~9wRuOT:Gsח;6Ċ\#gy%KuMNNNx٣-cţ?xudAd]r hwq"lټMNjyagyzk1s\۶mĒK.禹 \̹kRcnD,NMYl|eŒSS ͺݼy;!fu'~-z1OF O6v/YCF*l Q`h'fy7ai9tPrq#OQYa4]x{FK.YCF*l Q`>}7x5?W6o|5Ç@=2a]ř:dL izǹsnݺKzTo>##N>|xeetnݺe˖L~풒~Ôdġl޼y)*lȅZYCF*l Q`ܹs/=h|?#GL&b dK/K=.YCF*l Q`۶m{{#b-ϯ.Bș:dL io&// AYCF*l Q`(P]]]PP0cƌիWꨤpڴi;vL:u֬Y-Xf̙3?fqg!S"3HFaczŊ7|!_DrD~.]zRxRovA-3O]&q@8CT؀)CQ$MqG HQDL,!#6`PDT`I(? G"`b!S"3HF!cHEthB 2Ra EDf4Cx( @ &b萑 0e("*0i?#E]Zp0CT؀)CQ$M1|$2G_t}"-!#6`PDT`I(? G?~$~X.n~uZCF*l Q`H>TQ]]ݣGoSA 1tH 2A4 GBرcGt;o޼QFW5ZCF*l Q`H>xbXSʼy233۵kW\\_>h!S"3HF!cHh!S"3HF!cHh!S"3HF!cH|ڿk?seҤI"'O߀3DlDx͛W^^ b萑 0e("*0i?'kN8gٸqy"Dٺu/8yE}8A 1tH 2A4 GÇ'Mh"4Lqq?n:}B 2Ra EDf4Cdk׮2uh/K}J 2Ra EDf4C:t(//JQ@:dL i#4i|Β%K:dL i#D"0)?? }B 2Ra EDf4CpM0_f޽fb萑 0e("*0i?ćr~hdGb萑 0e("*0i?ćW_ݸqYqq+ql:dL i#!1cߑ#G ql:dL i#!>}j>N/#SN9ſ4Y)SnݺYfk֬iժ ާsaG:dL i#!zP`׵yC${[^^.^uE/B9t#}B 2Ra EDf4Chx˯'tb萑 0e("*0i?ć{3<Ӯ]-Zg?ꫯ|wٹs_߲e6m{^iOdgggddwÆ A5k֬[nbsO\uUb޽{G!6޺uk߾}jO>gw[m۶?3gŽu^1 H$"H: W_}D8Mg{(fff}gfϞ=x`wΝ;aW^^w=G:dL i#!jH(j :/eȐ!7tXaǎ}?~|ҥ;w6lؠAoVwk?G[7xcEEŞ={x3~w]sb͇z(++kرzC.ޖ,^&Mݻ#.~̇OZjU]]ul [n-6CxxCT؀)CQ$M1|$>D 7m._paΝR^^ޤIo +Dڴi_yrxRǽ{x[lq|ڷoﭶk.q}ժU-Z84zH$"pl҉{x}.++;gϞ]QQ_V̧Ჲ?͝;wĈ]t!Co>#}B 2Ra EDf4C%ׯ_ߴi%NmԤIoڵk7o.w; 6\Axꩧ:wܢ֩sčkٲi[Q~xkz=D]V.mGg+].{?n'" :Td /p}Qo.-OLJ>h!S"3HF!cH|wnҤg}-Y`AN)o|> sNkjj/ }Pl-qFfbp14=D]V.m9Z}|WSNɉ^H8!Cze1[n}[OGFxxCT؀)CQ$M1|$>DG?: qO?ݻ8a*++ŭ\rɸq^Q5x`?Iz!?wD"wj5m|饗&n\bÇ/++sj7l2j^Ac!:\9쉹[ly뭷ĒC{{Rn͛7wN;Eto4b萑 0e("*0i?ć(ܵk۶mۼy켼ѡCiӦyَ;(w]Fi'VXYY9rHwߺv횟[-4ޚc>SǽYr4y7mԯ_?}K'>;ý޻wo񼼛h!S"3HF!cH|Oo?!>LxxCT؀)CQ$M1|$>Dsݺuٺu-[#`+-!#6`PDT`I(? ї_~/!=Gb萑 0e("*0i?ćرc'NC@c>}?xCT؀)CQ$M1|$>\oڵkhv"`1-!#6`PDT`I(? 7|篈Ʊ}vy}B 2Ra EDf4CЕ@€}=zAnZCF*l Q`H> V\鯋}7~J>h!S"3HF!cH|x,Y/oߞG:dL i#cɒ%>hyy=ꫪjΜ9f]>h!S"3HF!cH|R.((1cիMP%%%ӦM+-- @-!#6`PDT`I(? OB_+f͚UPP8DtPKFgҥGg A 1tH 2A4 G③.-8XCF*l Q`H>EthB 2Ra EDf4Cx( @ &b萑 0e("*0i?#E]Zp0CT؀)CQ$M1|$)Ђ:dL i#qqo&DL,!#6`PDT`I(? o nyѣGSA6 @ &b萑 0e("*0i?k疏 ]Zp0CT؀)CQ$M1|$^EH.-8XCF*l Q`H>\>RA6 @ &b萑 0e("*0i?|tQAjGthB 2Ra EDf4Cx-壋 R/ @ &b萑 0e("*0i?*++ϟ_]]!G|tյ D]p0CT؀)CQ$M1|$>H$ҳgϛoyժU~Q.]dIIɝwٽ{w'PЂ:dL i#D";fffN6-!:xg}wq) `b!S"3HF!cH| t"^vk!z.t?ؾ}p:u|LЂ:dL i#dnn9܏Cջ|t]+Ė>pΦ38CT؀)CQ$M+o>33c○G)(! ,!#6`PDT`I(?Drvǘ:V h!sss"hTYCF*l Q`HdTYY9xQ G'b74B 2Ra EDf4CG Gk03? 1tH 2A4 >$#$',!#6`PDT`I(?DZqT8CT؀)CQ$MF ) qg!S"3HF!#PtII3? 1tH 2A4  r˖-8CT؀)CQ$Miqq4|$Ǚ:dL iHgM qCT؀)CQ$M錣 $?b萑 0e("*0i?"q4DZB 2Ra EDf4CG3&8V[CF*l Q`Htj 1tH 2A4 8 83nܸ @*Xm!S"3HF!#GqƎyѣGSA"pCT؀)CQ$M錣 ҆[>+O*Hb萑 0e("*0i?"q4Az.]TH'-!#6`PDT`I(?D:h4 TH3-!#6`PDT`I(?D:hT|tQA"=pCT؀)CQ$M錣 R|tQA" pCT؀)CQ$M錣 Gee󫫫7(VbĞc:dL iHgMT"Hnn-ܲfm?(. dذa=z{ j 1tH 2A4 8 D";fff+???!:xz .۾}{G$b萑 0e("*0i?"q4AD"=zξ?ԫ|tGXڵץKG$!b萑 0e("*0i?"q4Arr+Ȏ;S+;;8dYYYG[Aڵc܇8Ic:dL iHg^W^y)֑؂@:dL i`Z$ԩ[t177EEEeeeyyyNQYyyqv.;gϞ|]0pS"3HF!#問zWĻqzWn(x[[:w|k׎ @t2Ra EDf4CG0'dffx #8dVVVvv6$qS"3HF!#Drss}xɩc|~R_D \CF*l Q`H&TVVΟ??cr+H#A ` 0e("*0i?@r*Ⱥ 8݇T؀)CQ$M|8݇T؀)CQ$M|8݇T؀)CQ$M\AR>HiCF*l Q`H) |8݇T؀)CQ$MR[Anٲ@t2Ra EDf4CGHHG}H 2A4   p(T؀)CQ$MR 2H 2A4   p(T؀)CQ$MR 2H 2A4   p(T؀)CQ$MR hT72H 2A4  㖏7o=z4$2H 2A4  F▏ CdL iJxDc.]ThT #6`PDT`I(?T{$G*H46e 0e("*0i?@*=z+]Th$ #6`PDT`I(?T{$4r.*H4e 0e("*0i?@*=TVVΟ?_(tGW]+H?8AF*l Q`HH$Dzy-CrR KJJ޽{w'ۀ( #6`PDT`I(?T{$D":uѣǔ)Sb6NGW R,|#7;;{5PS"3HF!##d=DZ~ӟFҩW+HkС#Tp(T؀)CQ$MR PV9܏Cջ|t_~~sCPǡ 2Ra EDf4CGH%^ϼyb+u?zL iH$ҭ[,qR-_r%EEEeeeyyy{wnj##v_x]t['knٲe]5h EDf4CGҊW>vڵcǎ#G,))nu[>+Ė.]\z۷Poh EDf4CGG$СCffǘ_WԫGxYYYT_m Q`H@pv旿ecrXA&({ @0e("*0i?*++ϟ19b D_m Q`H #ڀ)CQ$M{9 +HGK 2A4 |`ڀ)CQ$M$#%L i$#%L i r֭@0e("*0i?pGQ>0_m Q`HyPpS"3HF!#aBL i{0e("*0i?q |l Q`HyPpS"3HF!#aq>6`PDT`I(?< S]]=z͛7SA~8؀)CQ$M|0ԃ[>;#D=pS"3HF!#aEzcۻ\-WeWw4M)R(wح*qBGҋm-[#,vA.lV~]ʐpYP Ҕ6noϏa83əəG9g99Od(Byi%G}~GIT?edPfZ Cx(^W1$A#.>O"*VBP0}| Iŧ)S$S0J(V:::;;;+PL| 4A{$8 :jLLL+~?{XJ#GKZ[[>*2Av{DQ\|2E2U(3balժUuuu555cǎ]xq!{C$`f5jTp܃:H|Z.>O"*VBP*jժ`_ w1 3'NX[[CO5SH aPl?=l 6,_u| -{cx#8B|ŧ)S$S0J( |ѦCK.1)S$S0J(&:0nܸO~'tRSSS[[۔)SvW_}uڴi~{1bD]]]pk0yOLL+~? cCC 'p_q1:A1=_veT[}dPfZ Cﮫ ox,י^%%A[}dPfZ Cwѣ#7<a&> ;iҤF *o)Byi%Gj\ǂ2E'"cVp]T>o)Byi%Gz,SDi|6o)Byi%Gz#mo)Byi%Gz)E|S$S0J(^~էH aPl?% R|>E2U(3b իG+S$S0J(@& ~xOLL+~?P~ALL+~?P~ALL+~?P~ALL+~?P~ALL+~?P~ALL+~?P~'V&:uIN.T<̴#xdg}vʔ)drH aPl?( Ӎ0>drH aPl?( ӕ KE2U(3b@i=Y\"(Byi%GJ*>$ȪALL+~?P~'"m| I%"*VBP4?utt477wvvFWt!SD| 4AIp>$KE2U(3b@i=~KӣG>syCE& .`ԨQDבx.T<̴#jNjjjƌp‚CfzC$(?;C +KE2U(3b@i=J#G<&zgU| 'pÇ+KE2U(3b@i=z >!zCa 8dȐALL+~?Pa'|ѦC;e^5S0J(@zt7L&_>lذcJP T!L+~?zkjj^$%v$ laPl?ѣGGnx,(M|L<̴# eNEǬ3 'T!L+~?}"SDi|JU0J(@xW%! nJPfZ C(A 銫aPl?~ttt477 3EPOdep&DW0JPfZ C(*Q:nll蠃jjjF~`10>Iŋ;68n]]C=݂U0J(@xW!;?ډ'U| '!C444 U0J(@xWyGv /8lذ`Qj*Ayi%G|¢thS졛o9SU}L+~?Pt:=rȺ}{uƍkjjjkk>}mEkoo2eJ`o'tGqG)vٲeS5c Cxa|=56:A1x[+"8Љ'8tP (9b@t:PSSX3J1+8Jx;dmmm]] XBP;tqҤI7<a&> o=ztp&u?Pl?RGGGsss  Y9gOt@%GJ)SDi|(-b@eM##"A@%GD~K()>ɡ?Pl?Ca\z$XBPoe2୾$XBPy$R C>>(.J%G@(Pl?sTBPy$R C>>.L6m֭s.J%G0>>sW]uɮsQ*~?gWqÆ v ]TBPyOǐɮsQ*~?էwII(Pl?s ]ǐɮpQ*~?է2ǐI(Pl?sW.d&3 '*TBPyO:nll<F}P*2A~k_1bDp&uT#}[}ݙ :蠚#FL6퐙P7 28~:*8n]]ʕ+[P\J(9o 1cy=ro*>dxcCCA^|$Eb@V0AtIC:>nݺÇՅGpQ*~?ݻ[MnN G|Q'|Gy7M>}ƍѦXW^y餓N;v'KFO(~?eC644\z饭ٵL 2۶m-W\1||$~?NZSS_"AǬ(퐵uuu$\l?>N'M{cA&ncvѣGg]~?} eNEǬ3 '~?)"A4>}!@eM#$Dl?t GH~?ɕ GH~? GH~?I&իW4P*@&IR#$Ml?ʐJG2菐@P* G2菐@P* G2菐@P* G :::rZ_CHt:6?˃oG :;;lLӣF ־)Ob$ɓ.]{1N:ltS?CHKRt:=r=PmG}tMMM*5jT}}'P3H4t뷿F@?#hF=zt kjj6o'Png}vO=jCH;.>y%@?~|*34P*@SSO#TM6򗿜?y?͚5+J͜93b ~/ڢ?lH~?@Ejii5kOӧ~:Sj7t̙3۷G$P oΞ=V+ӧ?IG$mmm3fX~}T1pݴSt*@2C*o1cƌ-[D{Ol?zO?tEQ}VZu}E~?@X`A4DQ 6GϏV]cѥ=pt5{8`޸qct]&O lb`޼y #yŖBQ`<%$Jl?ee˖ox"xd?P w߯~z)֭;3os9'`͚5cǎ1cF|֭ۼy^8a„w^c=6?;}ׯ_N3]ĸ;mٲfapg} ^}Չ'^y啙.UpaDe]iӦHpgǂ/9_WG%Pv?>3;cذaOioo}ݳ~V\yfg {mmmWӟtÆ مc\=svnܸqzo 2$ű .KjڵzeG&?;|ɑCt?(P }|'c%--- ^{v#<>:O dذa|1K~ӟoN8w.b\do zvm{G??VW _EdLEVL~v,#uuC$Qb~w=oʼw]^;3$׭[lpn۶}쏡_}Μ9?iz aÆ=#{PO_s=V 3]"cώ_r D#Tcf?4<묳^z#8"^xڣ>zԩl8qb_:uQӧO>Mg;c\n|{WUm۶?hhhn޼y}]dIs>3N}˖->`7 32;mŊ]ˆ/Xpdc{#GW^?>6m֭[3__r%vO?=X}_ַ͛ pf5kN;`ȑ# ~3|3]ˆ/9?fEVL~z(?(P t#GW8!:?C*Hւ Ol?,]tEimm]|yt~@#Tn)ڢ> ,x뭷Ol?2̞=;ڢ27ok3Ul?2,[G)ŋ_|̀~G ۷o1cFHQ5^x|MC*?<ڥW_oG~?@%馛V\S hڴi6n P ԴbŊhbzjĊ#T_]w݆ d͋/??&bs…OpEkmm]hќ9s֬YCC*;s}-i@JG|z+ÆD#PRTtbT(@e!bT(@e!bT(@e!b$TGGGY ~? ܜN`y6-_b$Tgggcceo1N92X@?#\'O_dɻt:0a„@#\---uuu555K,IRᝏ7MG ƏԤRQF >Oׯ?7nС<@Ǝ;f̘SO=uƍ|T~?@e˖ۿ}7s̹+gqss?Agg^{mjq-#>&A_~v[bEn;cƌ;\sE]bФI__xwwf=9l`;N: &,\0NGt ׯ_|$|/wg k7x3 2$)0C?Ovزe&L.Ї>opgǎO<ŋO=K/4<#>v` :POCa?~ /.;wnqpر---•+W>#76l=z{q衇Ι3=K//~18&LO/n;,wID]Pmb͆ ƌO}/Kt]L1umnW_}yElll\ti+OѣGg̿1rWc SN9; ۿۄ ]??kkkx쒂$H\l?<Ɩ^{uvv[[[/6p뭷7qџ'{{Scmݺ>ltD 0PCK-,L>}ƍAWw}O>dcGGǠAz>W^)rc=Ƕ}C6mz/;uu~ش SL D2Gc-P]b[Xy _s5<6mZֹ1 ._CЋ/<۫1JG.kaOv̡"Co#-,*N=sH~?ܜN涰`y6mLU&ȞwK:pPqٲeNG}"d29s,&gQ||cIG&O\__dɒwkata„ M)cN# |---uuu555K,IR]x7M)cN#T{555TjԨQ>|xt#JʘS bU3L4dȐ)SQRƜjG F:CVSSe˖F1Cɓ/-3Lt5}3CEKKqވSPØ3CSOA)'cG"MMM)R^Ɯ- 6m/9y}̚5+J_+J$8_mmm֯ۗ.]GCYEOzc*Z%NG vMl?曳gկ~Fe>h?|'8iUe˖͜93rފ#3f_hic?ϗ,Y=v &۴i^yACo1cƌ-[Dxg~GO6mZ0c=G7֯_Cw}wŊ6sACGKK]wBܹsn ?o޼²e| .?f͚m۶h֯_?(… _}B0 BCM/^ Bݼy~XH FI~ӟvttDz"n֧~:ZUVw}ѱ(`---Cҭ`r-ѡ# DSPu^xt,JdѢE_#PBOC/͞={7n]<s=KExJ*ѥT?뮻.:P~4*-ۃ=yJ{܂?FA=ߧJusFz"x"Vql]TGǢDEP~Ћnݺ3w9tttYfر3f\,饗N8"{[|u6o|N0!wlm.M6U+gaÆW_}uĉW^ye(]Il ^ ڵk:iӦ~yˏ=v3b֯_e˖x \[#O,'Æ w|#?rv?O=n{o~ٵ]OKZZZ z: c<+,3*#(z#?Fn+um۶#a1n` ?V;]R~ׯ*.o|i?yp( ?bgÆ {G{.eXq#GvQl?_9q?"<ꨣOn}|wtzӦM^xaWq%K9眂1_yŊk :묗^z)x?#f G=u)^3?>øf͚`a38gqFp>[ly3]cEP~w{wڵ~}_͛Í_xSO=uРA#G\h{E᷾`ㆆk8T&M?> >|k +\| O~ft$ ^xt,JdѢEoFxb2dȠA>я^|-dѱ(Eu]J~?@?Xtի)hkmm]|yt,JdŊ?xt+J~?@?hooA݂ zXHCҭn_%Dl?̞=;Z͛7_{Q(뮻.c̙;v숎#Dl?,[%ŋQ(5k455ELyn-:CP}|;&4@ }3-Z/FO!ӦMBC?^ ^~QM1z|M7裏Fz.Пn馕+WFkM6mƍWg:::f̘!AvhjjJl?555X"_|ꫯ.g| uttL6m͚5",:d[P_۰aCU͛7x/ϟ] p¦&>wܻ;:X bٹph7(-k׮]}eÿ˿?xG'ZM~y-X f1]GHwy[h… T*]T:i/_ފ~OpV wqYw/| Vt\b%JEnj9Xl?hagbE +?cG.ZXs~?@uϘ3CKL&3u-[DWT s(Fl?Tb >{UWUb1"CKŵ0> +n̡xPRY-,7>*1AV֘CCKX z*P]*uC +e̡bե"ZXYcG.oa͝]C=M9gOtE+CCKt:xX"2EP /1bDp&u}_#P]aÆ_M6Ey| u ;;;/^J }zGGG)}ʔ)~?>g>@555GLXWW7|CN456:A1x[+bĈvѣ%H#P!N744Ԅ7fI b$N~?I6AP*E!9b$W~!Qb$Zn!ib$] y&@d2TJ|#PRTtbT(@e!bT(@e!bT(@e!bT(@e!bT(_R"G?*AwT*Hm۶_HRE@2l۶-J?AJ?AJ?AJ?AJ?AJ? ёm?Fɤ? ܜN`y6-X#PwqGm?#GkH*Hɓ'755^L &Ln $$WKKK]]]MMMSSS*J#Fw}MDD?~_SSJFYWW7|F@R@555uY냯SNn$$ZggQ=0Anݺ5T#t'O>xiEW ?IrǧR<E*SO?'@%ڱcGkkܹs:;.J_`y6 yG VZvzꩍ7\2<mOFes9S```: 1G Ao~e]zoft]```{ KdΜ9^zi=12>xVt #V:Sx܅=׾?|ذarĉ g_L#;v8sۯ?# _;32xV\ ?/|!w̙3=k„  HHsp o{c9&?hɒ%{~ $$™gOf7~6Z?On<7C[ !G ?o=hqÇg<%-#GoG-y HHOxV܅@B@̙3K/ͽ{+dپ}e]v饗uym-@@l߾}Μ9rJ !G VZvzꩍ7 `I|ڱcGkkܹs:g`Iܧ]CE?}E+#WG@_gR!IENDB`onedrive-2.5.10/docs/puml/uploadFile.puml000066400000000000000000000035711513710110600203030ustar00rootroot00000000000000@startuml start partition "Upload File" { :Log "fileToUpload"; :Check database for parent path; if (parent path found?) then (yes) if (drive ID not empty?) then (yes) :Proceed; else (no) :Use defaultDriveId; endif else (no) stop endif :Check if file exists locally; if (file exists?) then (yes) :Read local file; if (can read file?) then (yes) if (parent path in DB?) then (yes) :Get file size; if (file size <= max?) then (yes) :Check available space on OneDrive; if (space available?) then (yes) :Check if file exists on OneDrive; if (file exists online?) then (yes) :Save online metadata only; if (if local file newer) then (yes) :Local file is newer; :Upload file as changed local file; else (no) :Remote file is newer; :Perform safe backup; note right: Local data loss prevention :Upload renamed file as new file; endif else (no) :Attempt upload; endif else (no) :Log "Insufficient space"; endif else (no) :Log "File too large"; endif else (no) :Log "Parent path issue"; endif else (no) :Log "Cannot read file"; endif else (no) :Log "File disappeared locally"; endif :Upload success or failure; if (upload failed?) then (yes) :Log failure; else (no) :Update cache; endif } stop @enduml onedrive-2.5.10/docs/puml/uploadModifiedFile.png000066400000000000000000002461151513710110600215560ustar00rootroot00000000000000PNG  IHDRAK*tEXtcopyleftGenerated by https://plantuml.comviTXtplantumlxUQo0~8 :ѮDںAi@C$bձ#abnBHm}qUdaJNh'RjB"TH<_ )p)~"|]`}lc601{ f2퐢e;)BG[jeC:at AT+)„;/rm UKr!*mzљ=4םz@ućh'y?z T&– 5tT6|_oޟa;?IYY/l@4g3ch1K44,6:x~Wt+m>Eht 1 ns2 ]’jʿCvw_N<,n6ZѪ=.Apݪ.?\~m-x\ f }B6VٜmŷTk*`[?`i¯IDATx^yxUEA$+;$P #3.⨠BAQYD6Af eA!@$MO":]!rtFN}v?2T;v Q@`Gj;vT;PnN>lٲ'|[n]w]Ϟ=Gܹslv|{:ujÝwޙ^D*!CEozav Ν;SOۂ CC5o<5mhoU" 0ׯz av p$/v pM DD#jr1޽{jj%F;d@P@iTP2T;8GP2T;8_@P@@͛7Or[-Zv@uܹzJms,XD!CyEozav|{:uRS;3++K TT;PnN>lٲ'|[n]w]Ϟ=Gܹslv (4lPjlP@P  T;AAj6v (Pؠځ@T;v`CS._V>}|Uw HC œ}Ps=뵜9sѣΝ\Yf>|XV?_|-%{:tӸqQFio8{y Rڃ@$3:-p.m6lXBBu\ɓ+WVItߚ/_^zsι/zg}־w>\?M8Ѽ6n-nsӧViZpaݺuoeT9T5z2./=(QD2WF_֬Y##EEEfeeL/nרQJ*2?oݺE|\#|!v\X^̽۶mm܋SN8j9T5*ɲkӦMHf]T͛e;77ܻvZ3%ͽN]f͚ ܳgomDѻGջr-[|||{eSųVq|b3 r{oe._\rL#HPD2J.첏>;yh {c[ٵiiiF-yС5>ds8kͣ3ͽNRʻk2z]F+=QD2J]wݕg:thu?~uf-V^-=ox\~Ewsܘ^֣y^qa_ 8wEG55H@Ɍ+jwݏ?ToJ5j4a 3?Ν;K Ks+q_Gc9sӤ$oQ+ >dȐjժ{.L4\͵xj?_Nm۶_^zN:Was|+{Y}_y=tPD2JmjM#=PD2muSad-T;L[T{x"C@$VwU;v"5վj*//DHKӧdET;RCΦMgj ]{yj ij@$V7Hn(yyyojWn(jqk~ žv|\˗ߚ.޲eKTM&99966?%5jtwS@XV7bR͛7 ~4ځԵkפ$ w-ZFVI ijSzzްXLL|?~: ;muS@yr\-[lԨ|n(g={4ODmuS@9ر${tt4?kD&muS@ڵT;C bij_zz:C ijG_p)SRSS'cJWuGГz999V7Վpk}wдzju(D޽{ܹ/^ٳsnԩScǎ]lڒ8iĈ۶mS$n!,''G2Q3T[~gI5Q6loOM[T;By=h\>P3v,&MTXX>smuSI)))'OT;СCSNU9vYf3eʔ"M#,\0t.{DټyڵkxV7Վ3e5xV7ՎГvQV-M۷oX[7 ^vnǾȶ4ҥKڵo*ZjUVm׮ݦM^A{%H2ez&O4~TҬY~1p]w+:h)]T;V7ՎgӧOW^ttu{6lh-222̴}饗bccVڡCƴkָPˆ#dѣ [nڵ~cǎFիѣovcz?z^kiӦɷr㣢Gz77my*'';RV|ZQC[T;B.z}BکS'e+V߿ĉٳV^]N͛7˶\>|#GL64id;vT޽{ݖ#l߾벿kٗ]v'|.[陙֋;C>8r֯_o yvnQiiiOV?A[T;BҸqBD9qĉgxn!iҥ[lQ;7V9vgώ9RD={9TnjSkAرcC-**R3vsnܸQmF+I#FM[T;B[zz+rD9ٻwСCIvV7ՎN4jB"N8oL27P\.WZZ$cff(c[n6mĉۧ>1?>Μ9vZ)H)aÆP(zŊDځ ծn T;L[T;v"v (PD2muS@Pdځ@ɴMAj ijG^^[ڕ ijGFFFffe\n(.+11qҥƷfKlR>;muS@INN]p .ߧOu*kځr%..޼ysԩ ijS׮][n-.ޢE HHHP'pn(OzjXh &@V7'ղeƍP@ځrl~w@V7;sD&muS@ڵT;C bij_zz:C ijG;to:9X;V];< .W_pɴM#l={vɒ%)))sݽ{;^Z >}k6f̘-[7o>rȬ,5zͭ=Ž;'( Z'oYYY9nKyeJСC۴i()KnaŸjk_yeӧ׫W/::zݺuѣG Pnڵk?ǎ3srr>t7`7o^FdVdffVZxo/Y|РAFmyWwn^eINN{]&LЧOs?O~i& ʠl_q V7Վ0vmO?)ƛF}BکS'c_~w}Ç9ҫW}:tHj{m֬w}wG޽{s=yyyڵ9r1Gnc=o`5k7%?3C!Ct:hlajRhjGV7|se◟kԨ.~RJv2|wWP￷wܸqIII{N0r3vi|7mԘ#7c߾}Lվe˖իKz3fpUV_Vʕ+׭[׸6ծ<,6v.v mK?+^Uߨ[C͚5ԩ#_g˥d𪫮zW]U(G&]ڕ](sرcܖGٳ3|p W  {] ƶZŋzv뮼ڵk/ժUSnO?}c~q\v-@ijGWZUnCO>Q5Oۿ=?ʕ+?wuwAA KGׯtRcIi^z%w׏1suk֬2NJJ馛qoy'NQƛo=Pv ]ZrnݤzW.,+O(.37o>ec\:v=q)[|Aie>}H(_y問?Dv-[%o&N>=m45's=xijGxǂKIIQ vt(QƶlOpB[T;ʴi٣v%҈#Ξ=> muS+EEEÇ?v옚(sݶm4M#9p 6̙3G}s$܇w^53QzVX1{l%nᩨ(--M*Srss_x˗:()muSg{_|m۶ 6oޜ*\.@[T;ӧWXVljjذ:L䡛6mڵkϜ9>ijT:"v (PD2muS@Pdځ@ɴMAj ij@$V7Hn(yyyojWn(jqk~ žv|\֬vI-[ߧpn(7ɱ ,8%?S@XV7訨( wvI͛NaM[T;Pvڶm[ wuIvHHHP'pn(O{nX,::Z>$MrlٲiӦF9T"v%''/G "veeeux C 2ij_׮]*K[T;P*L[T;vǍ7̌;V];JϘ1c ;v@C}ذazjuTgwv; ;AK[T;;@M#LL:uРAv^^^ N>-Ǐׯ_۶m;C՘ڢE6mȸ\<vnCծ]{̘1:thܸ]vIIIrѣG/T& SN lc͚5vFF#iJrLXw&&ܥG~ʕhѢ;K,ѣG?֋KncgϞ]bk/hSLϝ;wM73---33S9;+ܥګTbl8p~#_r~7޹sg||"ijG#QtRqcrU\K}ǎfͺ[}Qsn;d<@V7Վҽ{+V#v[JJ4l9soSNI6oܴiScmvU:AUPum۶MJJӧI~0о}Lu 6ȥ͛\R]3ܽVw|!C=dB[T;JFFF||ĉOLLiii2xȑΝ;K_nݺdw;vիWGGGUX/ieeDa=Ό3nᆋklڴiݲlٲVZ/PWiTʔv~p}qF?YfR &L50soOo߾O>=1a޽˳^z樨(eP֭k헰_ZW-ZԦMw`&>, ݥK_~Eݧ#ݖbɩTqsCfڱcGLLK~z->p@ 9"=ܠA1&[Iѣ2hv9ԹlW;GGGkߢCPM;ax3=O}z׮]z!_ z^P@L*C?ijw ==]NB| ^~eL🶺˶ڏ;簾N cǎ|Uw&y^~CO_paج0[0 4͟??''G}i=33sѯw}#WVBݻΝtҳgϪ"e˖1cƼkaNl4ŋY6"mu~:uJCRR 5jԨ/R}:Y'ߖEY6G}vVw)W .oO*R%+#X'bs i4d/((PW5yPvddg '6l={LC.jOIIգ0z˗.0vXr>@} muZo޼hB9pil:&O̲ RhԪ}'OT1#G1K3fp˲ Rhtѣ3gT0294՟4Sl(1muN/X \pZvL(w}u2m޼e@it}ҤI/L6M}Tjjcò ĴMo^bEu4:uP&OsޱcGZA(1muN aݺuݻwZj۷;w: m-T@n:G6WQjնmC5T;PKvرzT\h:~*%gڵ]tQFڵNqu1Wf}nݺUdqW=uTh;@վjժ+7<~裏|A 0/(wpСmڴQg(EjFWŋ ɲSO,l+땲Ⲽf=o3//ONrOwܩλPNYu'o2YYY%^5Ĵjk_yeX_}ոݻѣG Pnڵk?ǎ3fKUVС_-# 64_;ߴi |-ĞGΜ7o^FdTfMc媣ӹq^{-&&F|ȑ^z <ؘb 'NȄ={.ľ.h\ 6GCf̿UHR2K.Ƹ fgg_ve|l:t(338< w_^^޾}Çݻ=#rA99ҜN::ajJ}8p@~嫺ן__˚͒ڭ밟˲9xL5:jժxP in7VY&&&ض9`jPbD7ґU\ʏ=ZR]v~ƚnqƺu/^Xq].HKKS&(G7n\RRҞ={rr(?V/3gF9_/^ܴiSwC@s7ƍrFt_F #vW_m]'k֬i|ϯgl\_n~.^_Gk-[T^ݭ;usgy̫zr2'أQ -WƕQ4ְ3V:u]3f̐NQJ*em.h{=`W_}՜*9ҳggyݺuoQN66Ԣg;sۑmn (EZCײϒk\9˲?2i_k9ugy{=X{NG(1muoOT\VZ/9ȸ'Oc,_~yY_\>l/4h{3^tvj~'?>a„8w`y}ɒ%M4q{n4fY{3ځRd_"111==k]^oVV2k׮~.^suyn2=7|<+zx_S^x`jPbPZnݺ7'|z.}u<''GǕ+Wr233g2hQ.#3?/]Ԙ*nѣG}\Pnezd 'FG#$//OcǎÆ 3֫W/9~#F(hƼfأځR kNaao^~e{ĉ5jae}{vߞ:u;ߐ4iUW]e|jA 4gek֬i|)z/NG(1mu/oۨ^t9}W^ak4Oc^{ځRvwV:t`o1##k]?J1%Wey]v\\\jjU{]|ܶg͚5rdiwqq(ss:Ym/~5څ׿u˖-^S{u @i;p-eځRO#QJL[T{ j矩vQ --M}?.j4it_~jJQjjcC(1muN[wVW/;v\R}Y'֭[Y6K80w\uC({O>>JСCmڴi,JL[ݥSΝKIIQ0I&O3K3vX ĉ?ߴ]:.-ZdsZisVcfŬj,.KÇB޽{*PΞ=;rHGoϞ=|%VwUضm uǎ1bDQQ( ۷o7oP&aX6\"muf׫KB{F>Jܹs7lؠ!4ɲ9rHMN[ݥ\b~!egg>s+VPj;l0MB[ݥ_b/Bnn!(8qB"-- ̇~8iҤÇ?lΞ={ԩ,Jˤڅ LMMݼy!hl߾_|ۧ>ʘNN2%33SDڶm&vÙ3g֮];m493M 6TB<#X'Pd,Y0 ,ʔ˶Ï!7,?muSp?`M;IĂ V7 '! &O[T3O,?muSp?`M;IĂ V7 '!%//`*{VڝL[)V7 \-[n.˖-KHHO\L[T3T;xp7̥K&''SڝFVVVTTT&M$ed.&Tvgv׶m[Y*%zfn&ubڝތ3bbb^н{tubڝ劋3=::E|M;C<`TG> V7 ZYYY`k׎ϡ?M;C?Ϥ9T𓶺vgvnj3ds'muSPʝ;v&P cƌᓲvgvK}Сzju(3vgv:*wAB[T3T;& hjwjP.${Y";muSPM=@V7  ${ʑvgv&pP^M;CmڵB /ҥ:# 䶍7N@SV-e0;;nPg޶m&%%g$ [\hjwjndwhbB^Y'hlidc^:::zݺu))m vgv%GO?tǎknO>}ӦMm۶MLLڵ={2A9-O?{III ={92xw|_Ν;{ѪU+6zh8Æ k׮]||ʕ+W|͚54dȐu~ y޶3g~ / (r{B L[T3T;#c߿1([ol Iwy]|sI9rvv |K,1&̙3GݘimN:M<>xqEɷr-֋x+Zl!=?վcǎc[ؐ#t1s @ ijwjPF{n5!=x1Xre Me*U2nL|9u{r'O7o.+,R!.ZhpB3fgX+>@>>tjw^NNN6 0o es(`C[T38í ]\TOL^4'N45i\nkٲܘ]?iӦڵhcdk/?nܸsEEEuaԨQO${ V7 +q=,?|޽/${ V7 +@rG^/[u͛7o߾;ed/SCڝa` B5Ρ muSΰ<7^H V7 +r&CڝaP^܄{ s(`C[T38ʑp/m${ qlhjw@rd0Ρ muSΰ(wR&LdTI@ V7 + I6M;Ê~b muSΰX0`C[T38'9uAyyy 48}l?~_~m۶k\cNjjj-ڴi#rY8iCڝa?ŶԩS=a„=zXf!..RJƸP9nV`8__sTX stM={LKK̴!s(`C[T38'e#QtRqcrU\: cǎYfr->s(`C[T38'{+V0Gnit>s7|#N:t1aM65#y`V7 +sȈ̑'N?11m۶5--M9ҹs礤$׭[!s(`C[T38`㮻jܸƂ)OSy86M;Ê6|ժU+ wY0%5jNE V7 +ؓdoܸqBB,Fx$D$Ρ muSΰR٬YڷoNBD V7 +s\111FPa V7 +hO2UV|&Ρ muSΰ5eLJJs0qlhjwѪU+Y0*86M;Ê0>Pa9nV~bSΨv({r֮]{AA V7 +o߾ &Hnݺ]~V^_|1yd)xM V7 +`VTT4eʔYf8qB؈ /,_\}P86M;Ê h :t޽jF?pㅀ V7 +$>bĈcǎŊbׯ3g!86M;Ê  6d7wm۶s(`C[T38ԩS٣V*<1ٳÇ@ V7 +`o} olٲxbDplhjw@y1KIIQA PvgXqӧOe Ν>Ρ muSΰ*+W,Rٽ{9nVAK 55U}CڝaTN6i۾}W\alTXQ&O>Ρ muSΰ*j kKd.RwU'^^86M;Ê VO.((?YQs(`C[T38%VK/:|ӧ׫W/::zݺu}ٳZj-ZKyVѣG Pnڵk?ÞV[bqqqݻwW _RfM9AF6m4rG$ʕkQPs(`C[T38%V+$O8ѯ_?rc,>laa|ԩ1w}˓|ܹgÇ9rW^6M{%o{=fggknȑ]]v'|":\j//CڝaTvYkYԨQ27n[9i&,?1yJ=zRJv2&|ƶ|WƠ&`c~k\Ν;oMzNɹgΜ)3#9nVAşjy}ƌ5UREo믥/eڿk׬YN:|-Tի{Ns"ѭ[7oQ~gDΡ muSΰ*R]k֬9yoz1g*/YD,dC%ʷkk힇Ǐ0aB\\bT{y V7 +r)? ߯_?jzp ۿ+W4Mss\~믿~Ĉvڵl2Nj/بQ/ ^^86M;Ê \J!CTZU2wĉ!n}m-[z2_~՛7o>ecܴKak]bO>5jԸ+'NxN۹sgNdܼv}ǿ_plhjw@PV;Ρ muSΰ6iii('O s(`C[T38Maaɓ>7˖-RA PvgXq˗ZJMT\,''gܸqc V7 +4{7 F?s(`C[T38ּbjUvIv>d,Ρ muSΰf_~Qn`˖-7nܩS 9nVAٳK.;vܹswޭ6lfΜ)? Cڝa*rssy)SN.`CeOb=plhjwĂ $ڝa?`B? vgXqO,POnV &lhjwĂ $ڝa?`B? vgXqO,POnV%//`*{86M;ÊddddffZL淈LCڝa_\.WBB_ȸ}*"PvgXqwݸqc#܍S=..'T")ڝg}ժU+ wY0%㣣ԩi 🶺vgv .. fFbbbnFu"jѢ盦y`nM0A&M4,vK1z%Y4sHrr:lڝ劉1]4k֌T#ن ƛ$٣_oڝ@;4=!!ϡe˖Rƿ=ztUD xn@0sǏfȂ 7fܸq򰨏kÆ ;dt›M;CZҦÇ?|;8^Z*>p/o-[s(C|V7  8,ك  Ϥ)muSPd!˝s(C|V7 M:uРAv^^^ N>-Ǐׯ_۶m;C*ӘڢE6mȸ\:Tv1ctСqׯ7ƿv%%%r-GBps(`C[T38.QAAW_}ԩhex=֬YclgddH/~yRJƸarN؄TV\)ۋ-ر1.dɒoxSCڝapqqq{9_+V6dܹs7tSϞ=233Iv|T{*Uԯ_|X[o&;w^Nqlhjw#QtRqcrU\K}ǎfͺ[}QsMp7!cn_uU9nV{+V0Gnit>s7|#N4&l޼iӦƶ6wUB֭['$$o>33Sa! kEU?7ХKu6l{}54o|ʕbC> yvz!s>Js(`C[T38JEFFF||"ĉOLLl۶|MKK#GtYQu֝%b1c 7pBuG:vhov-˖-kժ%}U;F-ECڝaP*Kv,elO{hBBBϞ=e q[q~}}ynj ݻ~yyy /^BZ6++˼'xB,ZoZ3vXs{6m2~ڵ={28¢EڴisA/;PvgXq\" n.]/>8ǏߣGco^d=g hel˚[o4hp~ d9x𠱑ѭ[7R ,C4zv]捱n wy]|uwGGG_p$Ρ muSΰ(jOfGEEI:>ވ9cmqu*B\=4ib}?裸dujd V7 +?eeeEEE5kLbN*2"T3h<ג111< Ρ muSΰ_vpHvQ'!,4jԨu\s<גmڴڵ:)qlhjwf͚%1'.K|mQ'!,gcǎ +==]86M;Ê.KJ8!|61\Otƍ[lss(`C[T38yGjxܹQzs^qlhjw#YYYM6C6|;vsPvgXq8ծ];Y:j$0P} V7 +f͚%KCgR/Cڝaݙ3g>裩SN ǏC;<~ӧՇ,s=Zϵ2}96M;Ê#%U1yM6>T.Y/"ȦRl+[+_CZI% .%HAU BF-4rf99z>ν~{4qeŊVRR7cƌ{ʷm *u}P@AIf8@]ygΜYVV&G DLeegϞ}I~nk̊gnԉ?K.c>4iRyy|Wq[c_}P@AIf8@liQtȑ)SVtsp[E-}P@AIf8@/\P:&O\[,m/uCm&??"+ udyyyM2mGrCm&ou'??Ϟ=}2mSw9PЦnR:5|98NUVV>c2m_w9PЦnR:5WcГO>i5˻ (hS7 _|qΝrj@]裏/_.߭q[gnD?.GĀ'N|+,>s(Mݤv3t j{192Ŀ7֫WOZiӦMJ+c֗_~iⶊtkC fqw9PЦnR:5x'N 6LJJ֭hVxqUW#<$7n2lذyi6m94^d-+3_]6w9PЦnR:5a;7q+B*;vL^ ԾAikԌ_|1cƌM=;a¼u+Tj7Z/VcgnDMnݺuM4q>rX)~*YPP v|8}!Ce_Sl=8Ç"u]3Ν{^]jgϞnIl׮تy9sҒzyfyPmV׾}nVqվX,`=E޻wAjbj^d&qqDYqYf[yƍs=G <Ϛ3[zq1)}P@AIf8@ԄDx9r~C }{*?1bDyyޯ_pʕ+EFt-[&Zee8gLPmaVo;/_=zL2Y,`/-EG6l&{߾}{M 9w}W,^XXlG?9{aϳfL-=l>s(Mݤv3t jNtMwy-Zضmر{edd8.әJO=Xx뭷:twr;PYYٹ駟oN/ƍ{ UA=֒%K EEE5>q;j6M{[s^s(33],^"o߾hѢj^dw>+~s9Gt_(o;S..4L3 Mj7C&xwСA=Cby˖-ӤI͛{Kˎ^xk wqGvvw?xxڼyHHgp&N4tW*I1@]$?WkРAj6- |NP\xY^Z$.w_xKO8l {FLi4egnDMNd ~eeebOxP˛5k&(~ R{{R]tk8*o~W'6|yqҝ}tMn :ù,A_"/^8Z๹9pѣGOl~.nڻW)AKbsCm&QcnGyD, 6l̘1oڵk6IxAإK. Cq [nDT:vؚ5k!"2VaРAF:r䈈wW?M4q~Z8%\QQ1rHg_yf¹G<|>8ٳgVV3X{YPY-yqk&"%}D~'[ll!N޽{O4ɻWt3c^a 6w9PЦnR:5;k&YYY)ȸq.Fm'pWiӦz`@Yju>p @ׯ~СifFݕA wڷo/2SÆ .'6W$3f5tMnmʕ"_2D /w,`=Ev"S-ߐ uݚ۶mӧ wqCfرC&<ws>.sv |l>s(Mݤv3t jvm߾]dxAouZE(KbiyCm&Qˑ!b~?ƌ?_ᮼx@E'Nmx[c(ؤX{gZ}P@AIf8@8H;|pƍ;vuVy[XzuFFFRRRnjS^^.&mˢPL˻ (hS7 ^{- %%%VVظq3 Mj7C|877WOq3 Mj7Cpɒ%rv@y'd>s(Mݤv3t ʲʕ+.]*ߡƝZ̡6uq(/'O|19D D/ߞƗں̡6uq+--:K/mxCm&uĉ2t裏[R1>s(Mݤv3tM:g~GΝ;_xiӦH})N*nkgnԹ7xj9m΅}KI s[4!̡6uq L \@AIf8 .Mݤv3tӄPЦnR:@iB(hS7 t|!pPЦnR: o @AIf8&&$%m&@(ާRÔ{9PЦnR:RPPPXX>6L^lu9PЦnR::vwa]V[%P@AIf8pj N===}P|0 Mj7Cѓ۷o/hiFFFJJJqq<?̡6uq@SN:t SDkV%P@AIf86sL*[juy^z˃ (hS7 |>_jjم6m=T8Cm&֐!C޹sg s(Mݤv3tZvmJJh]v{p1 Mj7CptI4L /P@AIf8;|^̡6uq a cnZ~~W&O,bnjNd/++ $ (hS7 Ap9PЦnR: bnA;N3JMj7C@~edw (hS7 $0"4|rys(Mݤv3tacvԩPކ (hS7 \~Pww=99e˖D (hS7 EvG`p/))3fLFs(Mݤv3t8mNp/--u>\oݺ҈쉊9PЦnR:'Nܾ} +NRNp6uq@8~gbI&Λ7+pR]V:tgonDvٿ>bĈ/6u͐U]>=99UVwMj7Cj/ஈ^%%%FЦnRR;HaFvmTMj7Cj@w+Mj7CjjMj7CjPBw";hiS7 ;¡Mݤv3vPw";IIfH۷ LMj7Cjp.&¤Mݤv3v §Mݤv3LB&&OIf L4L6u0 @h>m&a00 |Mj7$aa@nIDiS7 R^^}*5Li+KIfHJAAAaa0z} hS7 B|;vt0׮]+֋ MIfHpj N===}P6u͐@Adۋ.xR\\,xhS7 :uꔞޡC0EdOMMkAiS7 fΜ)ZeV.֫W|ylMj7Cj5ϗDvM6|nZC q"{Ν*CIfHvڔ0vP Mj7CjptI4L aҦnRR;N*C0iS7 HH~?;;;gڴia 裏n$~Ჲ2?jՊ+Usɓ' @"ҦnRR;`Dv;n$?q$$m&! OdG"GIfH@b@ѦnRR;Dv$;Hn;? $ m&!qͯFj۶-ܲgϞkFٱcGӦMqJQm۶}viȐ!/EڰW,uZ\}͚6mVf{y_H6H Mj7Cj_ۗTUU]˫~SOq=#QJ- Z\bk(5˾BPA% @IfH@+#=;v|w+X'?s_z} nݺnݺC\wuw&/$0S z/6pwMj7Cj_؄na D> ߿^,xwqTTTԩӠu$ǏAWU˖-oQDgϞ :[nMNN>{'&*\W$o)_z% "qbaĉz۶m]vٱcٳGZ?ҩ{G* :^pK`dqM_Ha$ z/6pkMj7Cj⑈J۷o3ԩ]$z9 ]u~n3f{R'"v< U'%KZjAEjoԨ*Oիȩ"5^zkРO?_|!R8X.)) ւHoX+׿:+֗.) C_=]pI'qM_HaN+PؠD#FZMݤv3- TgY{iiy:2]vܹ]wѣ%HNb+H*++/^?m@gB7z@,dee "D^tEFr=;2hA/s!^]ԩs2Έ#!I :$W@bPhd?D6uжR& jޡC.]g̘!Vڵ{󟽻䥗^ /9~駽{G~t ߩS5kڴiӣG & cƌ9smQH];2/rnfЫxB}Z$AT#i? 򴩛n5upQ"i? 򴩛n;;It"i? 򴩛n$;C"i? 򴩛n$;]4#i? 򴩛n$ ;W#i? 򴩛n$;Q#i? 򴩛n$;KDL@iS7 m H<wċ짙ӦnRDpA S^;ӦM~} ?яV\,.|>_iMj7C0I sܸq=ܿݻw5~^zWqE5o0`Arss EPWHӦnRIj|K,qY;3'Oz9Dpߴi?77#HӦnR)a80--mٲeniԩ"寿z˖-bĉplذ!33x7.m&m@fAAAFF7|㮩3fLNu&+:Էo.]={\zw%PG&ڥMݤv3-S`7n\NNq!n]Mj7CP˽O :u߿? ? Ҵnx䋷abq4m&m@(>SNnpwX#֋ Ea"MIfh[0tL'; S,l׿<q4m&m_Ν;.]vbMqq<q4m&mZfff޽t"fSSSSy iMj7C &Vy7Dpϗ!0Mݤv3-PHNNVZ=D6uж@kNdOOO͈CL@iS7 m 8}|510Mݤv3-Gffh|5a0Mݤv3-T0HӦnR:O}Q0gΜ)o1J)_b`"MIfh[ꖈ&M*++Ǽ+VȫbÇw? Ҵn'{8HӦnR'G ]4m&m~"{՘HӦnR٣D6uжDEPHӦnRh٣iMj7C5~"{!b"MIfh[ï{kvѴiS-U5jT۶mo[?^%L@iS7 m @=j1U۷/))ʻ.<^L@iS7 m @È裏iӦK.;v>}֭֭[Nݻw+ѣG˗+a~w:4h{n׮]Vz޼y{XĄ%-_??Co{UW͝;a HӦnRHiur~<KKKׯ~gyW_ 'N>|z_|MK/ LÄna Dv]ހX^yvډ>}L6M,mv˖-vqz;w^! Դn Ҫz0?k?~x~n3f{Ұ/Bdz'KJJҜ}4h O/bge`j&Ϊ^z]RR0+Z._rʁywsYD~O^iS7 m @h7vڹs^wuG ڽEޕ a"VTT8RT/soA,;!. Oe_6uжD:СC;^۪UU؂0y#FCdxt0p@QJ =agKOOO/~!`.Dkc@MIfh[Fܹk׮^zhޥKݻF6}߾}?;t (1cޥM޹s^y/eqYhS{Eӵ1yWMݤv3-Ѥċkc@MIfh[M Oe_6uжD=:5˾5m&mHK~6&/ Դn#'#ژ+PӦnR:Dpkc@MIfh[v}"ژ+PӦnR:'#} ?яV\,.|>_j~@MIfh[&a7׿{n׫W3& 4hPnnnaaj~@MIfh[&a~'"/YDqg;N<}ӦM?7_B C}jMj7C06́-[]sM7M:Udt_oٲE,8q΀ 6dffQ3”}jMj7C06̂o]SYY9f̘N:uM+V:to߾]t+{zJF) Դna lƍɑV" ) Դna6̃vҥ?/--͉B۶mj+PӦnRh :ԉ={{~@MIfh[UXX.W^Pce_6uж ]v ˾5m&m@8D{1~@MIfh[jQEEoOJ,٢a ,ګz^6˾5m&mSN}gnOP+VW%;w.\Pܾŋ:uJ1~@MIfh[,8q";;ߖ kʔ)7nq챟+PӦnRYYY_9"nPM1~@MIfh[j/رcrC[fK'/ ԴnƦMƧjK.oy̰+PӦnR)**Zd@f͚UUU%`?yWMݤv3-53uǏA ,77W~@MIfh[j瞓SٳO<)`?yWMݤv3-5'epժU}jMj7CP999rC˓o +PӦnR5kbƍՓF{M65mTl¾B]_m+PӦnRPjWBwgϖo +PӦnR ' $fnjw뭷6iҤEsM75lذ]vsν /ڔ b_zjg̜9sҒzyfiuy =眥 Ocǎ5kvw9rU^<8+itg}v΀LeC駟NOO8pK(v5Mݤv3-55o;(//1GSLq?1bX/0KWUU_l╕#G4h$4qo:tH &|wjnqs9w(,, !>M|;w[DXwV.V9Ľ[QQfnLS{YY۶ms[;v8,YNj߿X^n]ƍ-ZpFM$hP]v뻯p]n?gIZ0=Hk׮}ǎ{UWEqb/{u֫Ԍ6uжԀij߼yӢF]MewSO=%wj 4Fz9a[l3K34iҼysg˻Ez1_~"I=Ç~_.X7oިQfΜ+ fnLS GS}ʕ+W?~\4ygw/Pgr`X:L+ſѣGO]7?oܹ :4##CLs{@hS7 m @ ڏx|6|޽={r4hԨQbL{}IA]Š#G:+{IIʁa=0A3fLii|/_w;Szũ1|ɖ-[,kiӦFn_ӛ7o޸q㪪*^ӵQ6uжԀ6l+WyȐ!"P^xw_ee3x7xcRRR6lxvկ~դIMA>(*sWPݶm[oW&m&!'=r7N]W4[=Ъ &t]̱c6md\.Zbz&۾B(uw޽k-R ¡Mݤv3Gj;W#NPG]w9{wN:%B ? k׮mԨX8|رc[hѬYȑ#ȧ~:==]TH 7[4i"eӹs^r%iiinNNXNIIߝyyyb8Prr'̙#+{yBLsRoWMݤv3g~"%ݺu<>gX9`@>_^,,?VG!?TTkʽ{wfü.A_b{m/lxee &~Tz^w?{}5w9~$+N7#V#SF\g9xQT6䎻{ }C܂uܩxǗ.]/O5ַo_>\~;v8{l wnH-++ {۶mӷz+333.Ų8XvObI&Wiiϊ-mr|-Z}&N9 l-Z䜭[\O?nu8mڴ.]޽ۻ]v$q̙#&/oWMݤv3~jߓwo_"T;l޲"XII [AߐQ }z';+՜g}яDܹ}ʿx:Ç+vO˖Qw~ok߬_>0zDSť˲ѣ1cSټYӱe˖͛7}yfq MEEEo(vqs%2_/N_~";+z)|WkР첡NKz`ťp*\tEO?weS+K>OL^6"@KIfH /%VVia1׽ǒ۷6kT䍆bHoaVfüpw <*"_sMϟ+դ3t.QfM8 .8gb_W$_CŅ ^b1!nfL7 v);KOG>}zzzE+W?~\ w:ygx֭[C?xv+ _zo?e_[_jUc)]j?]}jMj7CJxv7:vGO:5AeglhHaC}CE5׮tz]vz e ݿ:52ѷwCmh_l:j8ɞ7/wu"{r5H°aƌSZZ*wڵ| cwoWTT Ol_}2#G L'$i8?wޓ&MrnnM$pر5k8#oK,Y"+++O/;c)D6uж"o y|?;>-?a'N猿Iߢ_W$|ura.bwr߾ݝ8n y{U}Փ_yg>(ֈ?cƌ={9ݿ2vXWСC4iҬYѣG"_|K.ˢ=  n뮻n:>zMM4jѢv;>/?7n_ظ;r&]rI wn=?Ʌqy eߐ ZDGw~{+I9nWs2)A_ 27d5j8zm?}}OڽF ҥr LRyd޼[Խ"5R;HЦnRV yLߓٿ;ok+trssT("ɾ5m&m%|{e_6uжDW_}l2g'0U ڪUk-˾5m&m@h^WMݤv3- 3v Դnaa{a_6uж L4a/+PӦnR;}jMj7C00c@MIfh[&f찿iS7 m B)//>d?yWMݤv3-}mb>EO^iS7 m B|۷w0WXѱcG.˾5m&mӝ4LƏ/EO^iS7 m 333Ep SDԔby(~@MIfh[ֵkW*۴i#u !'/ ԴnjsMII A.˾5m&mKOOw"{rrr۶mj+PӦnRh >I}{~@MIfh[UTT|޽{w '/ ԴnpPce_6uж s ˾5m&m OSNY ٢a |W8 wc?yWMݤv3- M:gٺujŊ*Xعs… uѢENJ}jMj7CƉ',Y"# O2eƍ{:4˾5m&m4++K+" NPM~g`?yWMݤv3- |";vLA@\Yfw0}jMj7Ciax˾5m&m񮨨eG"5kVUUF?e_6uжx?rVYYYnnF?e_6uжVQQsɩsg>yv+PӦnR^u.;φ VZ%='/ Դnĵ9 !//O~{O^iS7 m kf͒Î7֫WO^kH 䵱*up*5mڴf͚5lpÆ M6j~@MIfh[@\S4zRڣĔg[+TYYXGyW"rfϞ-='/ Դnĵ8M1 zrAKmڴ)peБq!/;m&mqƩ3Ϥ6n{9z˾}n&Mhw9sҒzyfg޽{ ԰avډrO?>p@cǎś5kvw9r6w܋/8%%euG^r%bӻロ#^b+!a:>\Tnڴ]w uVGaa &#q7p;;2ԙ{_ ɁoP7};233EpŎׯwr$v iS7 m k+0/zSh"t۳gɓ'K|wqgϞ=zL2Yl2d+++G);xذaN}{oEE~:$ a?pUUO>uF>CbdVV'Ntjgw0ځDAS ʠ17ԙ{K9"NLiiP7>c۹s@\agHbTHH@ӦnR,Smۜ-RVV&;୷rx}-Z}vg4#<=|pw<}222a֭kܸ=wbYܤICy ֟{~w//yPg{?gXT-UN$k׾cǎꪫ1LU/Aj6uжN6mһ8))_Du5jY$͛7 B Ç~_.X7oިQfΜtˑځxMݤv3- SD~[on_/^]$-3f}+W<~N>9q2A.:ن?tcn3 z,ѣGO]8B0;wcڇ!Pi Dj6uжNɾ>s'tթ}ȑbk޽'Mw_ٳgVVXk.caaaEE b#\s"D1cƔ._\ʠ :RZz-"ǎ[f?tc?Kd~[Q'lٲWp6mjԨx͛7oܸqUUerځxMݤv3- iSEZKDJKK0o _nnnNNΆ |Ē3fݻW~O^iS7 m HH_UD$ ~6jh*Hne˖SJ }jMj7C00c@MIfh[&f찿iS7 m D̾5m&m@h^WMݤv3- 3v Դnaa{a_6uж L4a/+PӦnRR^^}*5Li+~@MIfh[JAAAaa0z}(+PӦnRڷowa._cǎbwC]}jMj7C#F;i˖-KKK?~<Qd?yWMݤv3-P(**JNN]4LSCE}jMj7C+BJſba De_6uж@m޼y)))qu˃]}jMj7C5ϗDv=:g?yWMݤv3-1bگj '/ ԴnZEEEaу˾5m&m@8=a?yWMݤv3-ǼyD{1~@MIfh[/B4Rye_6uж@=Cĉ~Qg?yWMݤv3-Ps"{YY_{,+PӦnR(x# '/ ԴnFv{+PӦnR*;u~@MIfh[H:d?yWMݤv3-]T.(((//7e_6uж+3v[N m0g?yWMݤv3-pFv"ڵkܺuk"{m+PӦnR8j4hPJJh:tSe?yWMݤv3-8mNp/--u?\Zn݈~@MIfh[ L4ir7ꫯ:IQ BCiS7 m 'NhYC&O\ZZWw)33ɗbc iMj7C";hݺu׮] 14m&m_]>=999##;HӦnRx "{9D6uж@;]QciMj7C@0idGLa"MIfh[_܉4m&m@(ȞHӦnR(w"{b`"MIfh[ DD6uж@ ;w$' ? Ҵna]4L"{`"MIfh[&f"nMݤv3- 3p7HӦnRH@iS7 m DL$M Ҵnaa&&iMj7C00 w4m&m@h D6uж rSaJ[_HӦnRRPPPXX>6L^lu"0Mݤv3-o n\|yǎ"0Mݤv3-P1bDzzܝlٲCWHӦnR(%''gff.)Պ塈+L@iS7 m Ԯ *EpȃoHӦnR͛7/%%3|y iMj7C5ϗDv=D6uж@kĈNjjb`"MIfh[UTT!f=jb`"MIfh[;|5a0Mݤv3-Ǽy;E P4+$aa1 <0.L 98ƒ!eT D!OrnߐTuޯ?T߾OL|cjԍ.e .]YPP? S7R-3f|Gqqq jԍ.e EEE3jԍ.e 63?Wnv9([#;Մ]!GAp;\\MlGvpp5aFjq&3RZZ?n S7R--#;dp?pSO=? ?Wnv9([*ΘwZٳtn0u#A`}p?p#|}}v[ .&LHrP~ΰ^PPH=z [.&LHrP̙3>KYR[+aFj@(s{ɏ=Xxxxpp0K4nv9HrEvEÇAAA>(;4Bԍ.@)#0u#AjR$IdbokxS7Rvtpw2Qnv9Hz]64*ԍ.b S7RvG@H wDvgS7Rvs$aFj Ăٳg$LHrAa &";]R;P0'LHrpp &].BNBp0u#EI(nv98 yԍ.!'`8O"$L S7R\)-- &(h S7RvGRRR233ջڂIz8ԍ.P53---,,+&LHrL7. wV0SSSNw aFj`"++'88;L5!LHruޝJ%w󣉁6aFj`#w 4(99 S7RvsUUU,tCnv9HBƍcP!LHr`FFF{nv9H`IP$LHr & $aFjuSPP&&&.kϟOn<=[lz*8G >7oަMΞ=4&w<vڹsfee@D =:k֬l>߁G۱c󫫫0u#Aj'mڴ4 t ]R;8cÆ 4&ܯ_#ԍ.vܙƇ8h| ,X#ԍ.UVV.[oXر_NgS7Rv0TTTg7h]6w\~S7Rv0q֭+V uw@H {:tOmи}| ?Vjnv9H`bʕ|dPD~&LHrDRR,)''M6|=ziӦ|$Z}Ƿ޵6g6iٲeXM  )QQmٲoLLÇNMtV ë~:0\ ;={T[\Ҷm[}O-Ͷn]R;p&ҥK/nӦMvvv^ʊ [% Yp-lAAAYYYҥR;X0u#AjR:u1ctIIɄ ڵk׶mʕ+He=O222 žC aw׬YӾ}{'&&Ҵ/M Cѣ3-=vZ???oo'q\x'lݺ5bʔ)+իW{yy#Fݧ N-yٯ kyϟ4MII1<SIvnv9H`}Ϟ=ntllO?}#GN6M?>T_|ūWR$ewg̘QYY@14..M?ce=J}5Y~G9vRJQQQ,FzgC^^^ddYX{jj*rj瘘~#2[SDS>sL233՞Gv 7Bԍ.L!geejJy?Yf8Y_b҇j5%H4Wf[n]gFFZ;¥ӧO>,88X; m=ܣvضm렕ޮ];N~Y]iisΝ"K.))PwG{`tf8H $LHrTj_t)L3~h"//>k5ꩧpMG 0u#Ajs Yfnv9H t֭3g^rOpȼ{GaFj(--5k{cv7#aFjN>s\>A#̏ DŽ]R;8֭[+Vذa~U|ҥKwŏSԍ.d?~ūV:rdff._<))"ԍ.͛I5V4T0&Eʕ+{mp0u#Ajp &].BNBp0u#EI(nv98 yԍ.!'`8O"$L S7R\ j(+jqhv*.%QzEQK]Hek=Zg޵kW\pwmT{ԍ.&Mȷ:AEvE[w…;wh"jp˜1cXˈ#:#߬Y3}6߫WN:7MOXɓ'Z-JmpG%Sf t9ָdLYczzzHHHϞ=_}U%֭[wmqpaFj&._Ls7nQ[PP@R8kg?Yƍ)4ߙwӦMh| Mo޼k۶m4GEEE!fcbb+Nl=.;v,kT@JJ4`P{jS7|{;0u#Aj[x}fÜ>>4qڵ:t_R56m5~GJӧO5kR;hтNӧNjٲ%z!ց^-PÇkgwf/]lٲw)wASM핕~~~vbwHKnv980P툢a|||qq1k+,,l޼yEEݱcG6MoYf͠A{ygOAVH 6l=2_aj/--Ƞ#G-dҧvzԺuk6m^{]S7R` 68{n:6+L8&h3w>2N:Đ!Ch򲲲CEA1wǎjb?QLtHIIQj6}RE;p{$\rxxq;/rssizԩֆ j#;k4nw`ԍ.'?})NǏ<2k׮]njCQU dHDDDϞ=wI/^_Jݨn/^-O<LBCCGw)wF۠8# С={ܹsddiFg~]S7R` 8ܭC$Dvπzv!LHrp-`ڝbl%;c]S7R` @Op<B[@ {C@d0`ԍ.'?P ]S7R` DApwDvzv!LHrp5jr{lGApw=Dvz6%LHrRRR233ջځJzlJApw%DvOz6%LHrBCC :PlNl2EV ,\cPڵ]zH-Ԏz%LHrޱcG@}7Nwh'OcCjX0u#Ajꫯh|v҅;MPdTvv6Qݣ@!4 S7Rv顡4P4pA~Q%R J]R;XY\\ QGj/INN;4TuƊ!iC8aFjVVQQ.QzѢvF=nv9H`q.Q>, ɓ;vHn=T>aFjW_]@cF50,,!ݢ S7Rv*N* LHrwR+`ԍ.]RMݺu+11p`ׯ*))yw R;]lB W_}7~˖- 6oyJoAݻ&]RMXm)o0tRDpƍ+W7؄0u#Aj˗,Xm۶-[,))s6m2=ڴiSi!wZ= <2ԣjvnv9H6%P;Ujꔼ"##8MQQ]';?P Ou"uw^ԁp-J&7r7dʔT{uN ~:paW@j/aFjnSΤvV+++MֳgO?4)++k߾}RRRyy9m[zz޽{Nu"uwvtmSgZvy_>>gv-eA_X ԁZ\W]ݾ]RM97|ӪU+())0aBvڶm_rEoˋIӣ/^|'[nMsM2]ش 2]f ]OGӾ46hW^ .uXvĉ ]`OC  Yz5m3޽{?~5?~ĈtHtBWPR;,ajor\)SMWOV*IFFU9Pt"L+YlF6y:@j/aFjnSΧv*j^h:66駟|rqqȑ#MzI/R]ZF3ϔEFFΚ5p;cƌʄ*qqqlSŔSѣGoݺ.u;v,m]KP쩖T|BRSSBEH@WMsLL [Z~WPR;,^PP@' v)KjU9`G=7),,t(fUu۷5;n_ԍ.ݦI4ԠMYfgΜa@'wuFQQ>}4m۶`Yn~~>Mӊhfdӭ[f}N<9qĠ Zxtt4{H]piU}Ul TKx5Yâޮ];N~WPR;,~ : V])st83jav#{}w(ͫK0lngddx{{:n_ԍ.ݦI[j'~}O]K]VV,u6;f^h|VNNN&M-^^^wtX[oEW&-Z0l~Lvy橝2"Մ/r\)3)S[;Ɍ*m6JSw(fGR} S7RvCjg?޷zjroϢT䌌 tS}۷igtZkNR[mۦ.G|B:ٳڵkTjr{҄@yjWj>NkJaxj;vL[* gԲrQpG-ZQ͎* vnv9H6UNbbbƏ_PP@?cZZ'wwȑ#}UaÊ`ViK&L0p@֙-D4vpB>}fΜhQF=S죮'Oٳc7<,"133ի4yܸqsttpd S_~ٮ]?}Y}4,v^^5&1c+vv?˃UVuQpUxH%LHrmnIڷoߪU]G~^zr}GUذ">3>>>^^^?-'.D4AopO9tqb}+++oxXixbu>l0j 5=R;,aj'{eSB￯J֦M_fԲNqTG}߾}i^5F6;&K ۔0{0~zBHI5K ۔9p^= =בK Ԋ+h ѓ?`jҥd ^sƍH%LHrm*55|y;{͛L}t_NNNZZ|MS7Rvyfc~݃{EEE .]i&t[j]lB ŋ՟pB_u޼y6WQQtRnv9H~zȁeggر [nO*74؇0u#Aj+V;ws`[gO?'Vnn.jwԍ.nݺwځ ǎcpڑ#Gv@׵1؊0u#AjxwDiv@Rrr lhg.--]aFjl/ܸq#@lذ/O3Dv LHr=í[/_We쥸xٲe0g®],YRTTğr`atJNNNJJc<0u#Aj$ϟ_xʕ+,YYYB*FgCg XѣGWZoU"΄]Ryfjj*Ab4P&{'ee{޾}^YFeH,+%$LHr0PC aFjlA=nv980PC aFjlA=nv980PC aFjlA=nv980PC aFjw@?lJ 5dffwQ.gC=nv9H`MUUUJt} G X=LOOgwzH-Ԏz%LHrޱcG@]zu@@ԩS_cCjX0u#Ajڻw/.]Pp >>>tx4{T(S=[C2aFjVH4׏ uZNV"LHrfΜICϏd@#@/""CBӨ`qԍ.ח]zݵkW| '~AAAjjiC8aFj7l0vz=Th^~;R=[|O ݻLJj+h̨Q=[C>aFjBC`IP]R;XN*w@B C]vm޼y\o4PN sʕnV?,,,X0u#Ajt;cƌ"-v7;eeffΙ3pO=gnڴi޼y۷o#LHrڡ _>w;v'-4Jٳf:z(?PJ]R; XM~~̙3 j,C  ;u)I?Q%==}Æ knv9HFw;w.e_~]q LHrI*3 СC,;%&&VVV0u#Ajg4 49s ȟ]|9))=Є]R;G3gδiF{]vk:2\856i; uK wI#oݺŏ!hPԍ.̙GvE E|ӆ ; 4?1.;H޻w/?A S7Rv0!.4O<9""W^t뜑ѣGA;w5.Y:Scdd$`֘ҳgW_}ϟNYF^mg-AppK"7nXr%?A S7RvpęȮB6ӹyf:Sn٣cǎel"%%el:,,Liڵ?~y=vZ???oooY ^VM߻wǏϏ1K.A.\?Y;y^zI:Ū;:VW^ZtXh>>>˖-s(e?C4}XgHV#LHrp}s ) wu̘1;QXۨ:tx̞=[ ܹsddi Ss$+L u8)Tgh:66駟sxȑT4XO⋔>)\rzԨQ*ajWWgc8t?vZ>z]_|ѩS'h b9'O8qbPP+::P{a(e1Vuj]O E>{FjGdoPCڹy 5.ePCYYY6&V4iDے7_!oY-Z0jժaÆij>b3f {ѡVj^< |Ϟ=l:%%;MTUU5k֬*Z͑#Gvpի֭[ nv9>-puҤI֭駟Ν;[4mwt[b8bĈLB *Zƍ85h\2{R~Ā5S7R\zI ;v8Z7onv :^ Uњ6l_ Dv+nv9>-!CSSSՖaÆ͛72:M߾}ĉ4Q]]]XX::t(88X`H?"vڵdɒ">A#S^^dN X0u# lA?PSRR{ATЩ_~o߾`D?:^|9~:3~իWϟX0u# lA?P'M5=`}޽{W\(zSSSlD/_0`74]"X(؅0u#}"X(؅0u#֔F@vzT PP0D.]N~055===<<+@BUnv98Ă; :u**a]S7R`Y|Oxx8w|}}U,CB+ ޽{nh?裃 ;+TE8 Q aFj^!گ_GjOJNN;+TE8 Q aFjҥK,N:{j`q`ԍ.'?X\߾}Yjӟ*a]S7R`q|K}P P0D.]N~@*"X(؅0u#Ǿ{*a]S7RwjEٳg@]p!q_ܼyyTE8 Q aFjߝ(W-[,##CwÇ\rϟG!*a]S7Rns7xOXQ^^aÆ+Vܺu"X(؅0u#]Tz3g,--%8! v!LHrp 8)wrʬYܝ! v!LHrpZvvM^Qg*a]S7R.Ν;rJ~"X(؅0u#R~iVVHrrr^^?L6TE8 Q aFju~׹s ᔗ/]P"X(؅0u#:/^'jVZdU*97DEs,aFjgϞC@:vXZZ?XAU&%%%33SNw,E:K.@CwR͡*TUU8pU(P;={W+nv9>Β%KbGDӦMO,_Zsiӆo ׯ_Gj7/Ά(MS ],C:]|>-; D?K m'p}|GzAU/yHP}||)[jX0u#uE䊊 8٭nw*..{\-G{Fj7cNCEvj;X0u#u&^W޽?_fC=o>#Fhٲe.]h.}j/))0aBvڶm_rL=vZ???oo'q\x'lݺ5bʔ)j`k6C *Aߍ*:$-[[bR]K#mlP CJJ~gMU/R9TE䈈Gij;X0u#u&R-//tkUVVm߾}YQFĔRׯ>~˗/9rڴi]e%lcǎeˏbU; m30;䭷ޢ]E\)>Yť'NhCp֭~?ӤImKvvRnZbl `]w6 krx=x`:ԫ}oaRg,..1bČ3OÝu4~q͡*eQq!J*X0u#u/^Hٳڵk4b ɽ}v3u e BN:l۶-((HYvZڮ._>f.8Z-a7rwmHYY٢Evm:Z)l… cǎibU9/=vs`e= Q|lA:uN?#̫WƚG2rqƱXGGG;Č?-9--k5ꩧXI'Oٳ |zO>3gdiOxGEE%$$(vuo} v̙?BU:v5 Ykqk̙8x:h/&;k8p͡*%''P]OSNOE l߰aèshhoP4iR[j|r֮OqT,G &Cbѣxॗ^*//g]Plњ ꏵJ&A1ӧK}h푑?6Kv-n7os6umڴObB/wΝ>ϟOCn,0gC# LHrp}rn | v*xP1cϬi| S7R\\gҥ|vS]]nUid)I:Cj<7oDj7 {#$LHrp}r͛7|hP޻w/?XAU!7F:_ʕ+oݺV@Ul Qnv9>Ԝ9s6E $%%jCU`VxS7R\\*33sǎ|h ˗/)Ԇ٭nv9>ٿhX{ٵk?@AU# #}֭[7裏򢣣V9sM6ڻڵ<^ Y©I&1`]Bpo ]Ov b=3E'*zad/++J [XXxĉ] | v@pxԍ.'7(((HHH;P>FvC7k֌r*\pa̘1aaa#FP,\sά}ѢEmѣGxxAΝ;3gΌ LKKQjg'OՋmȒ%K35겳YczzzHHHϞ=_}U'S;kNK?:fz(ݳ S7R\ܣ >nF_رcP=36m?NvϞ=j;l߾Moܸ;MPʧiBߢMe?c;vRh)lݺUy]MTvqJbbbu)5&RRR̦Յ0k?!3~xHk rAp`ԍ.'wʚ7oڵk;RgϞ},X@/g~ )TEOލvƏ?GM>g֬YJMlڴ\#jP;E:t_a/]DJ -Z:uꡇq>?lpi&"[lݻ7kJ:t4L7oޜͥ6\99&LHr>ԋW~˗/O@Z7oK>pB={ܹsEY}S=(?~|4w̘1;3~_-={v922rڴi 8Ss$+Lv$U!]h(6lIwFa@d) )LHr>@C@`TGwH%U!]h(6lLnw&U!]h(6lMApoPv'U!]h(6lOApo @B S7RP0Pm0=Tnv9RG``5 !{ )LHr>@C@`k<w@d$RRH} n֨P\hQ囬0"ǐԍ.G4 Tp 68 Qh@ROH} n! Hj S7RP0Pm00DI ?aFj#u * X7DWX1e6]ZZڡC7otYYYlll=uO>]t޽;Ӽr!U!]h(6l`qxᇫizѢEӦMcÇ߳gNIINUUU͚5d*0u#ˑ:  ,N?D'Mnݺ~) ܹs6NӦMpG믿8pĈIIIrτ0u#ˑ:  ,N?DO<@`IjSL F*Xi{Pr0u#ˑ:`/׮]?~͞= lhѢEOXCvv6QLܼy/Xb!.Fc꡽h1w۷ogE!]>cƌ"#޽o℄ݪ*{.\Ç 1Ц:D!΂!:(LHr>؅Evne8ߔT֯__^^ΏiƇK,ٵkx:(LHr>"![VUUU Znn.?"_*7 S7RkŊ7JKK;tpM.++ѣGnݞx ߬Obbb.]wN4-Dv0 m۶;wn޽;utFFFFDD :LPoP94VgΜy~}X;۷Ĝ9s}Y,PPk&{」G'ԍ.GC4iҺu~駀sQ M6kP:p#F$%%eff Bd'NElҥK۷5l_hӁY*j-_J?pYf㉤*0u#ˑ:PN|_XGҧ|M,^WUi kWvpܡk׮gf~@f$=zcT..''G_\^]=v#LHr>C)pO8166 (V^zQgndffR޼yСCYKiiWFFM9rD}G0ŲE9ZVaa!ew;v쨈l 0??n[ٳg[n5wxvQwGILLhmpyΩ.t{{{SO D#£ BZj|'\1z{AюU/IuHUHaFj#ǘώ0kdqqqh!C(^v:dP*,1|}}k!?O:U9嫟Qe^N^֭[Ǧ_yz8pq)P 뙐p]1Z/ׁ^<BDߜppv*&۷OJJ*//LOO߻w/ߩwDxԁZKV11눓|G"g!G{FjS7Rn̳cܹI}ŋ_vA/f?3((H6:R1tJg}||z={l'3hZǏ4LƌC[qbo*F[cΝ###Mfڵk'LR~\;P9[p!.Wӣ GԞJi<66I!IDAT}hͧ^{5z%L}e=GSZZJY_~NKx4)..9r$f*Z ѣGoݺ^'k2s=Wj(av3h;yNI/g͚:(yǎ=**J:돤~cX#mƋ/H/{(rwu3}5 n^w|9_ZHaFj#u͜v\Ϟ=]RR?.ڥ"o2Gq&>`?j엝222R%uJE?3.Si֬ٴɓ''NDKbu4oAA;٧.Q Of۶m f;Gkvu2W^GGRK}򱶏z6p #uZ4oޜ6ӭ} ;k>̤KAjnv9RGLqipI aƙ(*5֍w-Zp՞)Y[x.8qB4[n}rssnj޵55VZi;i}iҤ%;;KoLG+U~cO޽GU{ H@["r B<ŢS*V)X+!4‘^C""W+"DF/;Yew̬skfڳ^2ۨ>wiqk#1b\;mٰr#knjdG^ُWl1JKRݻu:tH.Zw^X]jY}cմٸ 57uquۛ/+ nٲiy Mݯ˾;WqxyѶ!S i86G=ߪU?0~뭷kіuD/ ]cLݤv;V$k!Eͪ Xa;vȥƍȑ#:&Ay;;v񵵵׮]v*--URM0aСꡈn۶gmC9_/mtolfDSnF%Vs.#)^tESNUWqxUgHy'6h"[m6z;2lذ/pj;qY~iHc&۱}$Y=5;onU?FXiIj'Oɑ3k֬MBåsϞ=#~[n}guVݽ?w1cɓmv+|?p\߷o_|1Z{3$A3K}kzkCCSn{8SNr766O,|c2W4(#鶹 Η I1qnGOhgGk_|aܺu6mFQ5Mjc5H*H<5"&~ p'RƱ!nj]tݻ+GGY>}o靐eaVtݻW&<:TZZBj4nRGr|r\ߡȑ#-ZwB*YGeee iLݤv;V䨭ULٓOHfE{F'CY͐Mjc5H/XQFC(TEr0+j.\ꫯ9@{>Ϝ e5CS7ݎ#i~ߩ|vEeHfEŋ/YDO+@֫^[[3j4nRG2uE8Ům޼yE=٪r̙ϖf5CS7ݎ#ԧ!ܨ$`VرcV1cŋo߮G ;lٲ',--!nj_|__u0{C?}%#[Y&UTΟ?rzb̊Fuuu˖-| ބPʕ+{٣!njM(StΜ9oxīyg͚E۵k̙3%VouT#_ìG"@VgLݤv;VU}YIuuuzR .,//?z>4IK [`lqgϮk(QȪnjE z:>v:uj}}>@ o߾)S XfMϬG"@VgLݤv;V%.\+ [}'ӧOOfp.Tꫯ.^X'{̊Hq(dU~Mjc5٠Z.znM|SL!y,Yyf,1+"QUS7ݎgO pxΝ>>^ 0oЇ,$/X@_1`CNիWeY)EϘIvF?o/G0{l}⪬oA˕eY)EϘIvF?޽wC%͛''r]]^a1+"QUS7ݎg7FwloڵkRB\ȉl2|cVDD 3nRl<~>ϤB;HI0ߘ(QȪnj3ٳ+ؼy󩧞Z'93֓}gv?oiFo515Nڑ(QȪnj3[.qD*UV999å%Ȼ1 yiZĥs+;Y\v"Scǎm}Z#nwfgpO=' Y)EϘIvF?S4Pӧ%ZO&wf0E!G(}GfjӦMuuɽ,pgGl7"q-g ?IԍԎ F"@VgLݤv;V|v믷nZ޿ ڵkwgp G=eT+**d{.+++=zzO~n8Rqzرcnn7xAmݻw_uUyIvl~N: 0wU_F!٣G[^ڣ|0|pknܸ}{}Fy]w;Rr'N.7 7E .;{4 #׻j%= $ iLݤv;Vԯ$sss?동9^^^6lйs眜mێ?^jzмcURNzƬTSQQQUUuˣ] ѬfHc&۱̶|fdRSS~z}Dyƍ*{[lYb^a1+"ՄB!WܝiGH0ҘIvF?G`|ѣʼn< .}lYGee̙3˨YdJtn|E]xm? oLݤv;\b9'{ܷo߾dɒg}رc$}ժUϧŋVe˖'|Rj5YL}&ϡ"BPQQ嶟7hS7'Xb^MQlϲe2~}sVo>R +WlGìTpB)Q>{!'CUn^8g$pTg_:ݑͼ#<޽{K_iLݤv;\9hpƐ xwiJw/ޔɑ SޠAd9TŘIv>s6ȞiaѢE2CbLݤv;\9hp=B!!|U1nRO@zM4F8o6uƑ#GǍw{W^y)sѣO>.:Vw޳>v+wyo߾{B3ҘIvFJ裃bO?'ueeewuj+֭[nWTTHp?Riبڝ0=%­]Vn\.RWZ%7q/!njPH-n'| vy)|zЧC1b󫪪 3B.3T?oWCo~;w^qg5CS7ݎAP4[OPzj% ~G=o/X/я~䴇$bpWqn_?NjO:ҘIvF qeui͚5N~r/xÇ%oFQQٷmv)wy{ȓo6Y]6m4ưaÆ{wҥzK|AVߜ1T ꫯʁ]޽ڵkx{~2=ܐG"X͐Mjc5@P(T$ Ν;WLǗwҸo߾/XR4_qSd}5Znllԛ 9x`v$P-'wI68Vk۷o>l^OЂ{ΧQj4nRB"i(@r-s[}"{) ///OI{#FnxW_jg=zĉՂvj߾}}}ܞ={<*X]]'?<<ֽ gϞN;̙3uʼ- xտoܹ3|bN*{!|1gƌGy$*V\٧OdW,ҘIvF ؒ?d9dȐ3 d+B6lتU_r[2o[G}طo/~qm>ՍK/Yj;vjt6z5wuWnn;׭[G\VR%r ˖- 7m޵^>͒kӱwȌ?YJv8*C~~+DDpO)V31uX> IC[)Iyyy\?੧MTgwj?C;a„~O?ر;C?cR%֫$1jjj:u~hڱcҥK'O,=}pe:4x/|֬Y/rg73Tݲe98=,Fg|ܷ=2x(VkLݤv;VBEPlkoqƅ^yhۢJR% _]nڵSKE̬ꩢ7.p1?GַbLV;-G+*[n܍y|Xc&۱} (*b P3?#}oz^veӦMtnonJgq{mAeȐ!+VPw+1z׮]r{ҤINjQQQ!8OqnիWm/u;ⲲSN^ڵŽ%%%]wuaOnajVnG!Eͪ%a5Mjc5@P(T$  ~ܵ8w\ݻw?իW޽YT믿4`:urnz{^^ހ^'ihuH+CϞ=G;Իt /|- QQh~_hllc"(ُ7`d5Mjc5@P(T$ f~e„ 3g[-[PKj`nj􁤩w U{#fd ۷o/))4ho-[VKj`nj􁤩r UQ._̊jܑ-[\Kj`nj B%%%Npw UZ]GW \\"x"Xc&۱} ꢢ"U.]L4I b2a{ڊWd?ZS7ݎ4gΜ޽{KXB]vϯֻìx ~ُǯXc&۱} >sw;<)BICqŬLyVZWKp!nj$ꪫD'Nءɐ!C-ZwY10=M<Op-a5CS7ݎIotޝϡ"јI∟;KKK"1jad?Zb5CS7ݎ׻wo/">$`VLn@ܹHZJҘIvFH9s~9T$by0C嶴pV31uX>|3R||a֭WZNRY͐Mjc5@ gR*Y1.\XXX--z'j)ѬfHc&۱} rJ |PK.NҒ|vC-% iLݤv;V$_***瞖`Ĭn)//O_APV31uX>d*[>pIj|v-A-% iLݤv;V$;+w$bP ZZJҘIvFHod'#9pB|>;j4nR#ZdWH49RYYY^^>o<'Dii ~|yJ 8_LҘIvFHpȮܑ8i7+ڵk̙rIOt /Mihƍϟo/ɤ_QKʴ!njD mpI^8Y͊\,XР!cgϮ[p<-LҘIvFHȮ 555~{IIIUU.}Lk.@*YfM"~!jveZ͐Mjc5@-##B!..]SZ̊ڦN'RϫxbGqѼʴ!nj 7++^\/**߿ǎuFd?+~SL!%Kl޼Y?G52fHc&۱} - ;sЄ[?+Ν;wΝi6}cǎGe[V31uX>ٷnݪO$***TLZNT"m iӦիWGqg[V31uX>ז.N:jر;vtĉ;<^kG&)++;CTii~8-qVinjiIpW=|}_~?_~wd#G̛7O?&/^,~P}#A**7S7ݎӼEv?";2?Ϗ餯۷/[L?q Vinj􁄲 1"C>fZӝAGLhLݤv;V$'ِۨ~6m ySO=Uo$Org'󟍼DheZFc&۱} wds'$5UV999\.-=r%4h(77w+V{Ļ_]krꛟhTTK~~رc[nl*+SO=w7inj܉Zs[(p{>SCNϟ?^[~) #ݼ4q-al+8>5kV6mOe;^P?'leZFc&۱} iw";Un{[nn߿„ ڵ;o˚2;/UTTȂ=XAAe]VVV6zhio֟']?Q=pQ.͙3'Z{v}UW^ȳvm*v<9#nذAuvxC#C?xǎsssoFjE"T<Ý:uM0`ᆱ򗿌1BGV5wD۝>`je0#nw q6iҤkF{(Z=>d̰v3T.whWUn4nR܉rs\'Onܸ}{}Fy]w;rq8q);v R[[JICC F+W~(⺤W^zInݻ*Z{F5f̘zٷoӧSLill<ͮ.^{4?m4m+k֬`$;.;( /rΝUg-K*:Loۏ>x{;?x㍅\ ^㌶.O_Wx C3DltJNyyf (**RdSn\gYz6ڝ|g猽R^{M6|l޴񟍼}mǣjwիco8xmӦMguh9NVgwPnuhWUn4nROwm߾}#F.{=whݺu۶mݝʒ%K.1f̘3fڵkQ/F[W)o]z2x` C-%Amo@|O9wKuuuNNN猶R!PPn3<3bghg#/GB;[刃ټ}="{)vӹcmYWl+*7S7ݎ.&#Y6j?FDz-wzЮg}\IqCm]9 5:[|Eֈg޽-[~0U+ݽ{ty! jklލF^VG_;~^k8x;]!!t.`x~ʴʍMjc5@P(T}n6l}'7Ǝ;~x6;v]6\ .{СZ{Ri'Lt.Y˳>{V=P.]5dȑλ=h"p{|jK^xmƍS袋W*;" VUUJzwt4hPčq󟍼|O\BP#F륏!Cx<.G|8ܳg< )Y{#xz}"nd}eZ]njPq߹͹|r9wZ~-o޽{=?%`VN~homN|_M69Qw;4-`gORvʴS7ݎAPIuL1Gb[ 1 (wW\vZr2eZ]njPD消zk:kI +G7 7E .;{+_Vcc&۱} (* mb߿?77X:kI 9A-GÆ ;wV?~|}}#54ej'ʴS7ݎAP~7[-[XB?q Viu96nRBѣƏ$"e-\AL˱1uX> Pݫ_u:TZZNK}ĝmeZ]njP^jpZ#l+rlLݤv;VB=2@6 GqԌʴS7ݎAP_W~FJjll{?3(6GqѼʴS7ݎAP͒&u)NQmm~ZjveZ]njP͛O^]]_*++gΜyaG֒ʴS7ݎAP;z3f,^xAزe˓O>YZZj!fJ\*rlLݤv;VBb[lټ&s5+Wqޔ[Vcc&۱} (*? b5Mjc5@P(T\5j`njPj$S7ݎAPqH5nRBxXc&۱} (*(̇US7ݎAP@a>DϘIvF k׻j(PVcc&۱} (*UQQQUUuχ.:wDS7ݎAPdP(T\\wg>iGH0˱1uX> @6 TpWܖi׻du96nRBfyyyEEEe>r[Z] $ؘIvF _fB _i; fu96nRBr .,,,pܖ`Vcc&۱} (*, tvP|Vcc&۱} (*|yyy2_>@X]njPP]]ݭ[7/CE .Mjc5@P(T8~3|AS7ݎAPxgRe>sؘIvF VC?$ؘIvF p^t@Y]njPuuurC˱1uX> @6sGv@X]njP7˱1uX> @v;rlLݤv;VB1#BpG2Y]njPMGdWl{(L.Mjc5@P(TY%;+>{MMM7T\\\UU?`u96nRBaȮPh…+(( ٬.Mjc5@P(TY"ܬȮxzqK.2Vcc&۱} (*lnAdWTpU/w-??C";ZrlLݤv;VB NuV=[Zt@"U1uX> @6Z;21u(TY"܂ڑRn0@fwodw21u(TY%lcDv7dLݤv;! @ >#FErS7aiB>mdƘIvCH *܉HeMjCBZPdpNdG3nR y;ϘIvCH *,Dvc&! !-P֭[H MjCBZPxSpȎ`Lݤv;! C c&GZP@a>D0nRN~ C c&GZP@a>D0nRN~ C c&GZPp8D0nRN~ >eʔ[N:`1"]S7'?&%b>D0nRN~ AqGv`1"]S7'?@x#;c>D0nRN~ -+w˜Iv8(T$Y8fdW!҅1up#-PhP(?EGdWllll!҅1up#-Ph^zz555c' .JJJdK̇HMjɏ@~w1//o-{2+1 d]t!.niBE\HpܹSqqq׮]͊73_ٓȎ`>D0nRN~ wѥK^zkkkyԋ Dv!҅1up#-$ҥK$nIAR )HIMj Z;$1udIcLݤv;vYd2nRR;l@S7@Q n^a6@V1nRR;D܉1u pNd#c&!@ Nd?n;|2nRR;uV";dLݤv;vCºLDvɘIvH&gLݤv;\'&LϘIvOL1up0?c&">1aMjEMv! 1aMjEq"m~ܑI0?c&"R?V"IpG&an;2 &gLݤv;\/NpGan"ZdW L1upB˅cFv S7!h+**B@a] %=@@0?c&"555c' .OڳgO1 8L1upBDv횗קO{2+1eѢE7;vK/=@1aMjEHp/...,, ]PPp׺_z7++^\u?&;uDdG bnbP{tY^[[ȮgzIIInZHYL1uZl--]TR s( c&qkykfLݤv MjZk-dLݤvEmTrMj-#Fv֌ 36Mj܉d!c&w";ɘI@@2nR;0ܷmFd kS7:ZMjRv d c&)@63nR;Hd3c&)@63nR;Hd3c&)@63nR;Hd3c&wR(lMjQQQQUUuviG S7F(*))y]'Kd/..Gd:c&4iRAAK/tDj޵k+R 21uځTWWwIvz[~d4c&A:th%Kj/...,,z'錩iѢE]vY&ԩSN S7R(ѣG~~ rQ21uځM4K.Q} S7Xuuu~$9T1uځ :T]dc&[hC S7h/b͛\g̘?ۼ&G7jjj֬YH Mj|;wMyyW 5S7nӦ͛O=p5dHYMj|3g]$m˙~=qR{"HYMj|1x=ODvR1u_ڝFuG9s7lؠ:<Ý:u0`]Du WO9KO0aBv>nO>Qc .є)SU5k޽aܸq#F> /жm7xCn">}9:{HYMj|1v9Sڜ0|N{ۯznnk֮];m-[_ן~p vڶmC/rΝݝ#"bLޗ#Fp}gۏ>hQQQn3<3"b݅ؼ{$nݺm۶NhH,c&=Ku:tHN4qv y$O8G?Ç<w@jL.=,? H76>s7n޼oׯ_QQ\poڴAR,Gj/=zǎ%S{W,%2d3R; 555n>dw^wtm„ β<dR; g~ǝ7o8p]w/:eYy.6v w}׹{w6L'we ېځd4hP}}sf=~^z9eYy.6v ׿:w%!ݣ[nNYV H^k-AjÇ9dFrvHw\|zNw޽k;drv "~_e]&ofwg,Gj!o0O>ޫW6*p#IqaÆ}g͛7g?.yo߾&Lw/KɲFmH@򔕕G?r2v y$O8QÇTv $ 6w/yTHO";8Njq6y{KҢAj_̞=ꫯ 0 and valid latest online data) then (yes) if (is online file newer) then (yes) :Log that online is newer; :Perform safe backup; note left: Local data loss prevention :Upload renamed local file as new file; endif endif :Determine Upload Method; if (Use Simple Upload?) then (yes) :Perform Simple Upload; if (Upload Error) then (yes) :Handle Upload Errors and Retries; if (Retryable Upload Error?) then (yes) :Retry Upload; detach else (no) :Log and Display Upload Error; endif endif else (no) :Create Upload Session; :Perform Upload via Session; if (Session Upload Error) then (yes) :Handle Session Upload Errors and Retries; if (Retryable Session Error?) then (yes) :Retry Session Upload; detach else (no) :Log and Display Session Error; endif endif endif endif :Finalize; } stop @enduml onedrive-2.5.10/docs/puml/webhooks.png000066400000000000000000001274561513710110600176600ustar00rootroot00000000000000PNG  IHDR0`x*tEXtcopyleftGenerated by https://plantuml.comv,iTXtplantumlxeSn@}߯ᒠ4BI IXfݽ;+Yڙ3g.gyi}h֊riR}_5^_?GKRV=ƊwqS;E &*U$]tP{!ZŃB;YVIhsӉka~^* !N]Nj]<^.V>Z;Q5,f`{Mn~fqK2ֶl\Ԫ+CN9Ar TځEs B$mUƫJey*~Tsc=t qǔӋ .NL =L5qR! =Y8Vٿ)VQU䨌P0j/%9Y[{/b͢NưEr:yyYOQоӍ.u6x "dVCNCV4W%G ~pWb6\v\ M2)5g8cI ̍$:}g_"QAͥ#IDATx^xE  {wH^D)JJWt!  pǸnrw>yvgo6{(((wPPEQEQe~)((*OQEQEQP}(("SEQEQT<ݠ?v4MNr)3/EQEٯX?_4MN2A(r=CFYzUxer\:mgx}?u{}2~򴽇kėn;}ڵۏh&SEQAv+öpP~dB0eǛ*S6ZL\n}$ֳvM;}(!"ӎ_vƝȧۏoˮ'_Q<&ލzGO_`~G܉E4$*" 3dȈ:0Lf>ޞG[?)2Dșg[s-X ܭV&jӾ#ڲ=}ڦ,Zڵۏ6܃E=~wvG&SEQAv@?s,h\Щk/ 1$I6a,"ٷv:+V 'NjS#afbu}XMD~&,!P8PڊCB()+W&{ԺmTtϕ#bVTjEJ)(O;1} >xzz˖7ACF2<|4w?AuƌE4d(QI[b{OGe^,͗͆~0tᣃ&N'o>,] 11+LD߯]W-@?Eʔ_ Zx ,r+rدV EQCDЧ'}DYP|)g@S8zNUw>hw"bJPZX9v͊m/b9U@%+xXg& aOME\ 5h>iҤ"2QnQ@2Rz b0>$VT5DYIVOQE9D}9[,A_<..^*@?N_1 V"K,{򧧧gf?)Ռ;An_>:HjUac,tSY$Ke˕[^.^/*/@?u4"a=tt&SEQAvJ:eU.{IVl/-e(%4첶I$ɐ!ckiQP->&*\ȇO}(!"ӎ}jb[vX#'U*<@35[;Q_-Yy/ݺm3ꇺn"iP~Cx$ol2 P AD>yJz %J$"->G)(O(>;?~!'-w*ދ|Hr|nc/\v_ǧh>EQ#ǖ+_XXj#дkMЧ(">O,բu3ڭ4r)(O4^&SEQAiڽLЧ(">MӴ{OQE9D}i2A(r{QcN12hq4pEQ ǎ|bŋWth:&SEQQ@qZa#jn>EQ M'3Ah4w)(Oӱ4Av EQCDЧXO;}(!"t,MЧd>EQi:&N2A(r4Ki'OQE9D,[vڴ9K|mm|Mm>|8*1kc+WӖ.Y2\Y Uyժ :hڴ[ch4fp1m+6MЧd>EQtg[\,Y|ӦMm>DiҤM8qT۴(46tFͻu .\)YL@@aOϤ7Z}Q7-vuРpaLrPn>^Fј*TֆDZne>$)(Ȭr/%^BȊ뵑ch%^|oٲ :uUI$KG7iՇ7A?Qv=£FMCn@?>O;}(!2+/^H%-ZB,YL0trW2eŋWw֯d˖"P˦Ǐ_L"yΜ9)KoժB+r^hUN=i'MAq*R,Tfz?nYɓafc1P4ib mŊU .ҬY}NPZۘUWhOdԨ '4mrM"<,&JYGm)o}I&SEQ)AS? aʕe˖Q '^ @2eAF"_o?haS /Z,#O_߬`o]$R=;Yf7SW%J4rz\\o7m \9s~R֯ υMKX!ybGuӧp5YJlL˛׫$&CI[˟>$S,'N[Oa_\-혠O;}(!2%oݺT^|+D jj za G(ShѦq,:lڻwtҋe?[K.'>_lg)u~{$m 2}Kt|_&MZX͞=G>Ū5٘ ۬cUʻpPTTjxk&N2A(rL ۷ϙDh*-VTl]m;#Nvo/SP@Yƌ2D>ʭJl?~bG4iM)G6A sݷ@(Enmժ]͚uIJ5٘ ۬'Ngʔ%QDq|:&N2A(rL J$TCM8qX "{+7.yoذ |JEMUYty&;gI{ըˍSZї_W,H.d{@۶rkǎ+U*ƴh@f%UߠAS-裣Wڨ훠o"߸$hc'5~2XGwy"d}yia>w֗%WM:˗YzW&M'&e?9vw>2eʺu?~~&Apfs7b5D|lZD}Nڵ 㓪b*h%Kxy% ,eW(4U5jBu޲|bk*27Nz.]ĉoiW>ܸ Abyƌy vMPYx!!a~ɓԩfMk^ t#:0[3ADFgi{Э&!]`0sWQ: 6OϤrtytM䑣#_c] &{%ip~|]۷rX;>|F䖳Μ@~{ ƎysHHxv|cLH9>&}Dw OnaLЧA}O 4&}Dw OnaLЧA}O 4&}Dw ٩SOLW#l^xF?m6>}M|tΜ%-;|2|׮#޽ǵZnvфj+W0cƼ~ڂaMCE2}Y:!'~eO[Q~nKώ=@_C1&8&c 6ӆ[mہ'h# E>[rU%^ߚq!ԩGӦ-<ݪի݆֮k…+b0P*˛Ù3pD|&*S6<^xܔ_lԨynq;t*џ1cfiKprSɒe'N+W}e`k̾FMeTD*'X'ag3 N=iSpѢ%p&3xn^7+9Mt֢87¯^}¾hĉ3eȀ1%]4*ų,L57 m+9|zQD)}%1kр>ԩ\޻ヌsD(<Ÿ>+WkkBO2r*^tWX9B0Ӟ1[|݂+ʔҵ%9ڝ7o~w C1Ax8콒F{MLȠkPF_(A_׸pc|ɀ+Ϛ@U^oڄ"~c8&dӥ6NJi0Sl;@ڵGh+寋yrʣ W_F-vеM?tZ L-0 25Q&iѢMe5_bwϞ `ca^(X͞=VMqÀyĬN<Oi/zIDz֢4Fbqk3;w);1Yѣ']4ryqѫMGi׮#@il XSA*Z} 8kO0CD<-/rb&,]i~B{($7)A_y7:D{UZNwUJ>.ٸ~Ոh%آ;^2 S֭pe%OQ W>H6]([ؠ7mBA|WWu[GvĔ`m"`$FaMzgu+٣ǧD8.4ⲲzyzzK.׽'r'uŻ)^i;,&jrvsht;(T(P$G[+ ](+•sGQaSnjժx`rCWnig@ׂ c`DDPT$"bTzР0  ݊׆[xC97E^m1Ublً94r/;|oP5kjkb!т$I'(%苙Sի6a'3eʂ7 A_dCN #7)A_y7:D{iw*U (\@?*Q1K qdu5l1xL -p;uv6AǎCha6MPdbbGWk"ǥ\> ]0&h4ڦGJGcQlQ&\>lzЯZz۶ܹKGKt<_ -]an405֭ێȧN]{ۈpIc`M }C7ȭZϟ5~ڵc١(B5R vSo_ hS:_A9s>#3k&-U4Ԙ1eȧ~]4mV:u4_~9\b`ɷ7 T"MЇ4ix? Swe ŷh@_J}||D廨]AYOѮGL,:?wRmqPޡ.l WܫW\;oj [l鉄&5"EO ZRU|}k*ZSNU&ܥJJn.]z@o*n7i,\!~eWӦ-ӧπ 6ZMOrq}O+}i:ޛo"w>;5s͛af6D.7AV~&_|1TZi-L7c oxg^ }MЧi0AD&Sx5Avi-L7 ;ri7A}O.7Avi-L7 ;ri>=zD-Piʴ=V15nx3A*vt4N?6h>)Mn?lZ-P񓦺 u7kY[~|ԩw{/]ӺuԽ4aw>1%?]VݵqP@r X#FtA[v$qIįGM{ OA em UO<2c'Deo>u/aM8e̘ݧMaҽ{>垚2#r8Af_дԣOXAh&6]e}}=EƢ\.B{E74*;#S)2rq+i6S>>{Ah4Me>EQi}(!"4M EQCDЧiv/)(ob;u@ ԣO$rq+;iW٩GArOˆAh&6]e}}=EƢ\.B{E74*;#S)2rq+;iW٩GArO(^MlHӴz)߃\.B{EЧiv/)(6P|;і]{=}1djB'r'OSe=?Ӧ}/ y65KhY=v脭>6Y梆Zc ׆K߉|LAѓ={־cG)"luNkoJ_}v%]k>EQk_ )SWCG9s/PP,wfx.EnEֳwҤM[n_"kd8xĩ3{|ilfZ˽e͗ ڮT_߬GBωTڜj.j2 >EʔWn=nFҧP80I$ڭ¿8 <4UnI6֘h6<>:3m%JƴĮ$kMЧ("~<+C5mP֦Ն+su>nĉٺKF|_mn6bEo>]l7hܴP`,D*/[bX~ۏ.\u79Uk7{iQ,SN-F)>~6|_9`;)6=z" 1z Wo?ܴ#Lx8U&wo޹K7k0VT,9 2BI9p\c[v={ ҩ'X)(ob<.Yq'Ծ M{yyy}3{ec/ Cm9kk>t܅3 = e裶ɒ%[ADP=*>YU~%jW Ye_e -?l3WJU'4I/3?gjճd!L?xRogg~7 _N"K*--$G€=iG!'OmPτi!&S)I\obpΔ)C@Ʒ!'ðܺM{z Gx)mVzi=p{UTS<-ڜ5T!CFqw;,60Vz-Trߑ2$mts_f^) DEgLfeޤI<f&,U,TCZE  P6(ͣ;2 ,P";wɃʋ,Y'U*Tf=>OeC W}[/WT-_\@?u4 HyLV(EB*7iE9_jA* >l~Bol?IO_ŔFgYfxIRk CG1϶Ihe$q[ĭzak3 6A_E<cV YMzG~ML;b>"cQ."z}GwZn?$ĹKKzzz_\n3-0zs`q9kkt>$Wٺ+Mڴftӫon+^rMWN)rγh@_kŠ63t;.cJ^U@="F=GUwYRD8z0V=>OXAh&^_8UtOXAh&Zv8_pĘᖻb\ bV})_/-Ê|D<s,Y|?; &9kk(}Y#?q#WC*Vqg[("Vk>EQ P+V˖-;3o>{Ah&6]e}}=/R." vz)r8Af_дԣOXAh&6]e}}=EƢ\.B{E7: MvGЧS|r8A?!zO{~ҧM_ m*_ic|t6\ o=î$9sF܉nVUC9n}GNԩP,/aź;[hˮ2bC5!F񓧩9[ane4OQE9D=>ΒwaQHs-ՆGmu6\JJb/^q&iU5^g~7_'^Z r\oV4WCGz;ՀQIڑsެ m6elUC/M'loh3үgҦK'+C5mf W}AOmݽ`cfˁQlF)(q' MYe_eX"S[~?g x'O>:hRgYU~%jWKDEYZ,Y|W^Ц}GD.^Բk(l3_N"K*Qosc~90p`6.fMT8xX-@S$I,\`tҽ6t&SEQAĎ뀭۴Sq;%ÍAt(e߲koҤIO)RoeZLY >܋9mḅ4$ȳ`@>z?P߱dT7ݣPj 1&Z-[ rr"5dΜE욪Ȫaf6AfljcmDJc3|t\.R'L2;g|;/QD!'â0HՄgpTޔ9GOG|eO]PiD[ /[w6h6AfljcmDY:)ʬ9 *Z\je Pd0[Td”r /q]ƌ;ñ>bb> )^MsQсkŠXXi{$O"Wq˧8EN=G@I&wΪCEo3Re~3{m-.nҋU=*DYڪj<+}>- +Hf a3MAM߯]wаQrᠯͦ'MUl9mg!G {E\obǢ/~8bp] O$HyMvexf.o뼽`\9|#1Uyafw?2Qz۬A#Qo0w*/&S)2rq+ I*!>OOό3K>UeʃNf͚-KaƩ@[9sɛ/y.Bate (]TV=O.   P*Iɰ2eʜ>}@mhede/ Iz P IhCj#'/PńHiUج^>zMgWen&§/^C9{ѢA`z_*)߃\.B{EЏ@H M&*7ibʌoNU[Cٌ&SEQA?^x=yT͖-JVҦcnwhtUݻO!p3OQE9Dxbq ?o|U/_>P=>tӎ`m8t}(!"~č|___Q>MZ)(obO1;o| yKQEQŗqAF_vBVcn|iG٩gBѧS!rq+-S*^`JiکvꙐOXAh&/ YΝONs {E\ob_N]4G}1ArO(^MhS˸4M;}q1ArO=H W}i2A(r4Me>EQi}(!"4M EQCD7: MvGЧS|r8Af_дԣOeC W}}AӮS>>"cQ." vz)r8Af_дԣOXAh&S_iN={AR."4M EQCDЧi|޴##kWkRٳG}(24MϠarFQEP}gUTʕ+)7"N}ePaP )^Ml`MЧ$eC W}}A'X)'o 2rq+; D7r8Af_ }I"E\obe\:m֧O֭[wmܸqTd9r,]Ty/^Dn=wٳgŝ зX,7n̶}H(8PlRJ$E*+"ꉟر*^,Ydn8UzUѢm E'3$EQɤ_R%)cƌj՚4i۷V?c >.6[nӦMXț7O?bŊ!C 6 oܸ9sf hB"裏&k˚0aBD;R"fҥڥKm۶a!UToc6?H~q"%jٲ*Dڲ"m=Lxb,'JҥKX=zYݻw!%i2+!($=z(A߸E@ӦM Z ss4P^xqĩ_~"W5Т(r1OQeLc 7vQݲeD~hhت}̏xּAXh&MTD:tɓ'c9y"R"3fBTo,-*N4Ν;J͓1Hyi˖-2+! wRk7.¸zb~~~w@"~ʕ#mи1l EQ;K|t(JKcOnDZ#"%PѢE=weVw6lHb |AGJž@XԩʹBϝ;}M6b޸qClҢ},E4נo\q" A_ž;+勗[hE*24j [C+>CQy|kj/k/FZkԨѦM6gdrc~~~;w/*A˫gϞ 6v ^1c͛ׯ_?!R4y֬Y lU(%- tҵl޾};{X-^A (e}**AÇWEW/ZL:d#GDbn&@_[2Cư5˸oQ." :Z[n-^RҦM@=@r"{%#n2"s 'O[T|yCזig 0@8+ڴǎ>VFeѢ!)cPD3H]yG_[*Cư5"E\obqk=Ї=z~ȑ/*?.t]С*o>"2<}RwAgϞUH2Ͳb7oE"lXXX%ʱU%?JJ\OӴl/-}DЧ(*>OӴljoٲeZ6lؠ@E'i6M ;OQT|AiO9I}&6_ƥ D7߃\.B{E7tʕ+IQA_O!rq+;SDз)2rq+;7Б.tjiIT{Q_(2 W}}AӮSQ(2rq+͗qiUvGЧS|r8AiڽLЧ(">MӴ{OQE9D}i2A(r4Me>EQMlHӴz)߃\.B{E74*;#S)~ِr8Af_дԣOXAh&6]e}}=EƢ\.B{E74*;#S)2rq+i6S>>{Ah4Me>EQi}(!"4M T<ӊ+vء Yh޽{_x17N&VMv}رСCmoa QQQ2d…VDQ2I&VӧOtPV-e]2?:qDÆ աZmݺ{]ͦ>駟^|);t{QqAiڽLЧj׮ W/_~Ĉwʕ+Wr׮]mw]Vx޽{ ӦM[~}`;lذ3g (,N i=<<,CJ.=ydEeHPP8 (L2W^}2.GլYuhlJׯ_ϒ% 7444M^z?_~iҤE8fh%J7%gMlHӴz)T߃}eH́penG;'Nk.\V i+V2eJykY 2}N"E\cǎ" *?}f [`q%rYzu__#s]F VL qzUҭ[7 ٳERÆ kѢ20-AYUTI›5k6h AHX^fMT"((HTH,ݻ7iҤW\1.% @LH^٪ /""BK:C#Gs"DA`E74*;#SX3x`ߗjnjӤIfl!eʔӧO b,X@T@Xe*!ٶkkпpRɇR@XX,"M/_F۷o*]f̘oԨj"78Ǐ#͛2};v\Eg6.E@I&ӦM{ezl:}4"zʒ%#nݺL2Ub=&6]e}}=kr;mڴ2^t鯿Rnڹsk ߳ghϟ?Ơw^eVR 6,Yȑ#gΜ#ߠJ@K*2P``ܹs!HD  :4UO!67">cŒ7)cǎ$Iȩњ5k|}}ߌb=&S_iN={*A:Ui7o^k) | oݺ%6?^-[ᅲ9#""V+W'N,ye}^^U ׭[wԨQBrhѢs̉a)lSh_\rH^D ڀ&nܸMgΜfB7X+>MӴ{O3iܱlذ!I$/ )A|*U*˗/Av,xUVUV7nܿCƠw}YfϞ=2ׯ_, (ϒ%}  R}Dg.Yn@R^٪VslnB&k׮_AQ[l߾iO4^&SLZ4w,?~x)SӧNZ!%S|u',,Xb3gΐ!"*W,B}Rzu KNL9PV */_}J7_J1k׮ʟ*n9s)RXpI)lS~MӴ{ON!!!mڴɟ?C(ʕ+]v;kMlHӴz)=ǏϞ=5kV???m}駟C&1{E74*;#S) -9r}}}sEނyM{E74*;#S)0}-R>DзW}}AӮS>>ݻw@哔OQoS}{E74*;#S)qG޼yUV-Uf˖ 셿+WTǦ('o&S_iN={J|NHHH޽ϟO!1{EЧiv/)H^Z(O4^&SS[O4^&S&k(4Me>EQMlHӴz)߃\.B{E74*;#S)~ِr8Af_дԣOXAh&6]e}}=EƢ\.B{E74*;#S)2rq+i6S>>{Ah4Me>EQiߞbȈ1mޡeo?ԡV=}K.jRo{~Μ9###ܤIUVc/ӊ+ƌ%C.\xaErT'N4lP[Ťn݊]^6|Çر㧟~~/_:޽[F("4M=|vbŻݺm4i֮[8_tEC9sf2e^C;wxxxvݻQ^VL6MiذaӦMŲRÆ kѢ\EV!a*U'O>i$#1zEK zJM>=O7oޮ]W 7(4 թSfϞ!*,X Wرc*j2{l4i"àzpӧOc*ҫW,YP@֭˔)""cQ." vc}[n?$ĹK !wF= |-]Ty6=%Ory6e˖?s @I>Rdɑ#GΜ9M6`J z,S*]ti޽ʴ׮] N) i///p}BX#ÖĪVAUd~СC v$]sNp/qF$A謰0puWvؑ$I۷o5k"cQ." vc}) pX=zꟻnzeʖ-+C?yL^n3Ofƌ{9}tu9rxe8qb+@_>g97Y۷}R.]`"Aߠh+Pj0AC}7"Ju5j\EVh@Zh9sH̻ZʕC%J={^:-l=sX5k"cQ."ر~8:G?YTN]{`Zʕ;8jiq~՛K@-V*mժUժU&UW)|||!s,=_.%K=ЇJ*շoW vqs[lyTj;nwJ)A,*U*2^1СC)ٳLɓ"RAAAʏ#ٳ'֭[ vD]/em82Yv&rnھ}:J|r8AiY pɰ2eʜ>}@}UE{xyyM}(,,Xb3gΐ!hRqVjċ͛7,Y"V|ɓ'/TP| _֬Yn7Cׯ Fel}qSJ %mwڅ |fܸq յkא GV蠜9s%1Zpm tTA?wPQ\m"b EA+'&v&+ƮƮk`EkIO8vY}s8wiwfYfv}|r]hQ[Z86쟖#bˁvR wHJ|Qқ[nKӓ{%''?\x.]w53MdӦMSLٲe̙3+6k,q $ fz=za'̠A@v3piTg-ߨ?OLL8p`vzyfh$gڿq) ѷa28 >kiXQJ$b7}kAG߻tiחɼ!Vo6Dto`_`-zWlY00X oQ#$\9___fB^^^ODfXՃN@m >xGޥKU0CmX= D߆øX ?wss/Ydf\h3xz >@ʅ# f DO~GA>h > b@@[@AoHd = 6 00X }}D7"V:azѷa/= 6Bto`_`-,zAmX= D߆ZX#  z  c*X# DtFMϜ9O5kφ1e: C[MGA +GMIs   ̜9Syh"6ӳgOZ^}?:l-[DAWӺuk>#͛i # L>]_JOOϥKprrS._,dd{ѷ,zAmA"V;EXbڼyhQF4ܣGq%&෿-e$ޢOS!=.a5uLVSZZmU6X.2H,XXBFlԈ81> GǏO7n⢟\~}ܹs.\ fƤWo>;WG*ɝ;wۗ)7wҩw;vSXT_Xl*դȢe}˔7iX.HPOp̟_Z%=pFS# @@F玅h!:*U03f]͛7(.:ίadLCj%L ѽGoȕ+t歇15@%;qƽIWX9/^-~bMA*V~͏J|oVMZa|߸hvt!٠! +-p{փ;eE #rF7lS "E27/ܒSƗǧ6NԮo@F玅h!:>lΜ96lXh7MW_Q\###}||h 0+q; 4B\iO>/{Tr`^^pK\\ Wn_wiFMoFYPNc] Is]{]dUFMh o޼lr^ޤYiY 6;%-4ܰqSZ$&lS$]/`ovڍMіcKة4nc55URe}0:w,D y'_~=**jĈ~iJh͛QY|~߾}i}*$CճϋMR3vvvbčB5K%\qs~5l#T>w4I"^l.CRFH#G.^]`2E6uY95!٥k%-BnMD|-dAH르7E[R?&jV>]eg}DAʢߦ۷es(~f/n{޽prs%coTK7-[>gΜESo?2TɐZu~1q_Ϡbjxe\52-mw뮘O>[oS2TRk~pǕ}fMffd}Yv]2.0kM.}>ǼiQYBr )BbM~4_l&lSҍ Z$KgPq} DAʢlٲi3fĈXYӧ )RCǏ%ÖoT}a[5_2?`CN;S!wǝO29%Uk޺#jĘ]s;xQX|dӄDž%hOZyQGH򌽜4mVDL~N6ܽGosݺ[wV弑vsppv̢M{MI7_$RڛOׄtQAׄT#R㬲# XY߿BrT'O !͢ J&7N>I v14R̰T8|da\VNըGOrntmdX! DNIQRY>͂E.l:`χ onhy6m8 jm5ltY˞^6nJKHڨFia\_n"ZHR_$z۽xl > HcegILLZ>|K/P qU%H/\!~!#qCZ*5Tr6%.』&W?3&"]`Ƌ|TZ_*Km"ZG^|ofQS7ѷQ>G?h!:}$oL~S }K`/-bskqw60ѧDft͆NS7囝[wnܶ[ZnF,,zAmF玅h!:={npدbi@}}Dѹc!Z;ED_ѧ-,zAmF玅h!:fpjO?^};H&uE`ѣh3:Bt ,Ys,}ADY3WDDAFmGA5s@@[@Aid\=}ƢTG?h!:f }_'"L.i퐔z_-[tIn4x<]D͚BM -7JZ@o,;"zIqGȯg;QXh1" >x\8 ?+E<~OhqtuPʚ?17/^."cG@mFlh!:f }vA+ӯS .ܸiǿ#*W &/G ߦ:iڬ*N']! 3YS=h(i-t17^R7pvv (;wna}۶}Gxp;;Q$TSԚhvtm@O'OU0"`B#L2c]5j̼R2vDftXN(k0$}>K]}~x.۵;tU8x_d<~z ?z7MuC\ޤ> ]=.^΋ Pf2$Ï:ׅF]3/gĝKi> ϦRф4+-QuUjJ}i֤ B{Q2c5kוdX~HY>o * r/}QOi;tڍ z(XPLcT^BLd1NPf`r);Lh3:w,D y'5s@m ?|%+iI^JUA^TP>g W))MhƘ&jTgЉRC f5̘e5xؗiv3#f}Xh1FM /'NM&+*U[%J{BhRޥـZ\]H*6ԔfEI 邇JBjqȗo\d6e|Н {襺FP.HrʵQQ9uy\$Sϙ3']eVv_ oޱ6B0W}&G;ʚz 6Lo`;hLSF?&a ʪ}Գ?9}IS/Iݸm7ߣ'm 5͂,_hxʵN n;hR}E]ނY4~MH=t}uez\RVA_(ќ[-3QQGHzE~Iz.p#qgiwAO Kg"}DsN(k +V=|Lz~ #<^OAӒf?4uƴ; gg9u&+j•*Rq'$^iRoI$֛Y6iXR*$ UiJJc&J@B#4i4o5 mRTڤ^bO:ՙ䫴>{7m+]H}vy˳> ";Hsw|XBB <}vvv|֓ɓGy1Ma{ݹ-SVY6iT$F'6i ";?z<~IWn}e_Ϝ+lFMNTSfuVe^UU>kElJ*M+z&@r!~9R*$ i*M QiV4Aϙ_2||4iw|}j\5mJ%=&O͆J)dzt \y&ct`rἲ> ";LǿSj04 ٓl2bd;9Ht)ʵ\\͛,Ϊ̫Yh~_+Dzo0}Rsьĝ5}F[x .J,*a*M QiV4g *MGϕ("zy?hg-X4Etͫ77+}S>? ]CG5M#&F 2Jy𣞴ixKس *b  4f y`a)oL5BbŊ;;&$^M8(o5v"Z#wv|OڸtBs!? լm4M_2ԭV~'2e )~Ӂ([o\UWZ$U"jV)!*͊Z JIORjD}Ǧ Qט߀)zIՐIIȩ3]ܙ sv[oaZ m^ٙ6;_Sꈪ.Q)KMy,X\R^{e>9HD y'5s@m}}X{{X:tRo%_--@JGB]8$RK7<,rbE2cSBݟˉ~VG%͸s)OkP#ܠ(я\їy 6o6DwBY3WD߆ Y̯\+.6n.r5#%HPXE/A}fh3:w,D y'5s@mᾈ>xÏz*UʷL2ed-Z3WIbXLG;ʚz 6 ~eK,ްh3:w,D y'5s@mguE$˃qFA"Z;o\x ݙ3+GA5s@ ;6mA[GA5s@~777ooo>DAFϞ>غ\[ H#k0}PqG_f#ڌΟDwBY3WD߆ZX#ڌοBt e\=}kaѣh3:w,D y'5s@m E>>ܱ-DPѷa/= 6sBwBY3WD߆,zAmFA"Z; H#k# Țz -  4f>h > "o(=_''O[GOd,@mFA"Z;o(틷6Xg~v+ZXu (}fh3:fCD y'5s@m}Aldډc>y{$n#7**\ʖOVrۏ\`뮘)~yvXxe^p׸mO칋7*/ G3 }Dѹc!Z;o( ?ܹs/a{yLo~!-ZlT-۴sus*UnN#V9bu*M>:QӋ,{^ÏzRI5̘Ҹ`+(}fh3:w,D y'5s@m}AQ>

G?h!:f~6ߺC:ު$a\\rX!bӨ[wӨI>GG>f퐸Ϟ7ۤY!#F{/c:XEK/6$> " ޣoktvv17ϦO٥0lҴYw~w Q>9/Q#IWo/J/mK# Țz Dž"Ϧzo6hݮn߲3'&;ʝ;7w7wlppp *W ޣ7 дmwY.VV]V GA5s@!"'vq):}<NJդYNNe .\RI]Hwi`oل=J8';V~Tb`Ŋwvv!OHKE_q% UH1Yxٵ;> "odq@R/a<|LՓgIy!?AfϿC|P%=ЫO/^VY̗ߢGDft͆N(k0?uWlWRUH?G;ʚz 6 kZU~oѣh3:w,D y'5s@m dM<<<误o-;-z&#ڌ Bt e\=}ƢsS~~~ʖ:b$DߢGDft$ʚz Y); o-f!  4f>Y# H#kʏE@Aid\=}?e\AD5s@m>PGDft$ʚz 6 ¢GDft͆N(k0X }}Dѹc!Z;o`_`-,zAmF玅h!:f }G;ʚz 6E`ѣh3:Bt e\=}}ADY3WDDAFmGA5s@,aWalӿuD$޺W&Du֫V*޽{Jzx'>>>44 Xb׮]±-}PR,{IDATdĉ5ދEnܸqݺu9r;X|w^a5AYd\=}ƢTP9n8b}uڭhb5k}_jB*W f"&D?<<Rܾ}P߿/aypƍɿckԨ_}2lGzbUT_~d n޼?C|򉫫Qf͚տ???6/2ʕ+ n9HD y'5s@m Gld:nھ}y쑸zXbi_qJF ?)ׯ_gw'O<~8&&޽{hvD- *55UT[gϞ%$$:u?du>}z >N  =MGr9r_+WD_JMDGGSZߗeٳE;KI%ڵ#( [u~Z\rٳWcBs߾}|٣o6DwBY3WD߆Z}B_s^ ę$2eBj)Z۩p/9:z\5snTRPݻwS.5ɃiRJݺuswwZeϞ=}}}&̙#|$ ]@]a-9>66ˬFY\CICpر?~|ԩlI>U !e6m*Qē'Ohadz::uR}JM>}JWMe]dlJK^4h <<$5PBoA/nџ?~Μ9ik׮y䡋I& 'u7:w,D y'5s@m GeH};Pɶ=%0H8jLK~~ TMx U0a>D;g(`0ӦM &g% DʕE2 :z rȑ C)%ISRRDJWMe]dlJK+%… KR5k -YdfDfJW2t@ƌ|]xPeZHmX +ƫ=:w,D y'5s@mE\qUwIør墱Bv6G.]—;Ux"CՄ2ڢE#Gr>}xzaR:u Dl֫9|0맦*>_ hΝ;4izj>tTEiIWYaustA 3('˗/g/׮]jsFA"Z;Dxe(>tm<"V>weѢMqqq}~ B c|K.7od/هׯO9wܗ'Lr~kE_)Yf۳odWMe]Է. KӦMǎ_]Eח[coƫ>5s@E=.׽_p7nߌiosnڪ߀Awozv!GEÃ9 ?ݛ;vXn]6jȑAAAO>=x`O:ʅ6hР}k*::LRjՁ"į"NNNf:;wnvG쪩Sj\vIX5p%ʩEwa/邐~׮]_mAWd\=}0'"ѿW30Vf-;9/TpJ'w? O}J#55 /\jU ĖrrѥDY3WD߆Qy`Q,zqEgha._ܣGq52hРqY KgŊ՛?:f }g^߿LL4[$6o6D QQQnnnիW ~N(k0X }}1WtXHքk@@@۶mCBBʚz 6 AɒT^EGGCf }чOmF玅dM>\Lc3f >Wѷa,8 @}}DsHY>uiӦ :f>h > : Y)#|DY3WDDA,ϯYfad\=}}At25s@@[@Aid\=֭[OYVS-IB@`ѣyh+YA4$kNHNn~GAAD 1 4m9u&-[}-ZyDiӦA6s+GMe{¢GGV7}kaѣh3p,A'Lo 6EE>>GI-0# f DDA1K -  YmGA c*X# Dto`_`-,zAmlX= D߆ZX#  z  }G8b7}kaѣh3p,A'Lo 6E`ѣh3xz >h > bdV/_=z\)臙sπjB䔥 zɓ,&**?l`'*襙m/Y`@WK|{<$&;,[uKݾg?_Z~v́V^>,MBBСß={&+(_ Vfǧ b^)5zk @Ih1#|e Η]~퉋Kl1c`e6O\\y쥙ѣ'H0v|T(63.B5D_0!RAV9YWQ&JWĻ6ɔoCh_GA V'{DMѷ! ѷ:}} h GՁ@@m>@Dh>oC@-ou @@}h!}ɷ-[?}K%%ݒVHٺ5ر#L2ڰ<\|͘d/r>SVm޽w6:-k"1cbNH-Y D߆P}v'&^%.ܤ+WH+0og!J}8(v3S0NmWIO,`])l% OBqҾ2W_~̙n޽G2as~/-6#gETa#1 v@"ŋF%\ .b.w߳6 *+W vaBEiMN˖z'-YiETPξyzQf~ؓUL?Ljc 4OKH$`"1CBjK3oC(>u9rdݺT"zGż(>CzqdÆ]ly)nB6nMor*СTZ~҅{Vzѧo7vԕ &D͝JVX5fv}˲|ژ~r~889 u\ʕrI}Շ25ѠA#dŊ&".]l_@ɒ^t+lv֬)w=z|rVr֭۳OζA}GZ;v-މ}BE .Bpt7/}=DEs̼uٿ?CMGZt߳ҋnEl{0B³-)Cq՟8qj>>eBC'N$ Q\`Bi?hZmۉڼtknLp-ڞ|c# :uMt4ŋH5@mѧ9:7k֊D?5шc*VRzƏzlz!}dO͛vԕ =J3KƂfH4ʕ5s9Q /]SdJY+.DVىnԨW)~|&jգ [Xio}u4UwЅQeCisR#B!T1`4VKRy,YKSapݻb%" /;靘T.Xi{5w߭6lt\VĪʟ??ySwppعAaS'S 6]]7[5? wfkaV͝서>}%gΜD3RJuk ] q޼\M7.kH;R"aæt>s*,Bd7ՅWZH:|x> _AbHu|t.YD߆P-[ }: ,Dzz{whJg6i!zF͋0=w3)WD/'SaiGOh`p7,\Zta!>]B/USdYJ+.DR,3fDOIi_E_'MEOXqmVڛ.uq)ֵǫVmj eO(N0"ZNN5LK=֚R:+]^}H)96%:GZ.oܾ}?ҟbִȩ+|cNSo߹Uw ۽_AE8ajlΤeSwIH2;!۷]#Wq7?bÇUx_j^zxx^JٍiBʞ0]Aթ&>ɩ Yd}B]iIԯ >]Y;2r&rޙD_3L}=DEsO†WE_xU9S>ѹs7{|8mnd5(W.Рi-Z SԎp$1j[[nOg'Di8g^ƕVߠz^=رJsc;v|?#Bd7AF tgǧwΜ93ucs^rP̀RoPIe;3ÔN CTDJja<߽ BrU4g=zuPP%!s hB¥~ժU7 _u~Q4GѰu/Rę&#6lJF(EY*+г޽m&MZKYߵ0maW$/WԊYPoH3_*˧AD=ASM6t@c٭guΝ?myuuuQzرwLF#'ʕ}S^W{潴KQO>d;5ذMë' y:,^ahذѢraƕVߠz^=v8H_#G9;{tgCO7#}Ҡ [DpnaIV1qNNz}{$;]]/ 8͚'vIaNZH,guV-Q/]**J z!T9! To{ΜJoKO?ni[l׬YIfe˦2;A=II4ob!f}!\K"ES˥KT;%{xy3f}CtTOQ:޳TV\]s'D]\ϕeEuoY$mG&׏.D_]T? Р,꽝jc9wl:|cNSg amrD{͟?ӦA;yT4Aemۉ/})ieU,w %]֬Y۶$": .YD!0JTiv"hԽ袓*Ү[/XJg^UV.^kǧ'MtjnALzfΜOG{(BcbsK4Fz}S.i誉D&$\$s]IW!ˀ>AG.\ /ۭT6:z<;};-D_1 :a(NNMvvk^px4 ]NWtn_|݃K{ҙ_M$OnYV iyoϞBEn 'J{h4!.z:m/Qot _[-jڧs,͋¯D˩۩&uJt2jХAp`(3 @ڵ]tS_N[ٝ=J5cǎ%Ro4tN9]^KGi $邎/OR!CD?3da#\k҅蛂{J[q}~8})~7Y9ӕg)J|ll@@m 'OM6iӦ aHeb ѷ }+BL/P@@m ޽Gk[647Qѷ:} yC[>oCdX mDܹkdDMѷ! mDvc{>&>Ra?'T1Ll-,,pX?~a011[2#G 9JTȵk׭1cFVYLPZZ!/[j̙qjK9rk}D [>>!'ϮV-DZP*&&-[zz\-ξڒ<[8Jjr)cggJдmt6~ *T[۵$[ӫTVȁ %Kz/ZV=gg?pኲeToC@-ou @؀yyyb J֔TXp֭1k}"u OaÑ3ƍ-{F-YV:jpw;gwfP]Z!tqP;D?FQ7() }[>>6 +Vltttd_ky^CgϦ1,X|a|ŋWVh޼䧯YJ_=WP>02rFp5j zYfڶ$ QBOHءCȑLw>ҺuUVi'NZOZeAa5 9{BuMEr+tIRk׏Wڲxm~y޼TYITntMB.-CB*Er}Z)Z$`ҤYd/ cDH^RSix)ŋFG-[ жe>ʐv-J\8 6,ߔFaɚm{g8p` Y!Þ={&+(11K(>d_|a^joРSR_߲'N5ݳ޹s7?ޫW(PpՆNťر$wn]6L:͵O|}X94x_mZBj<+LXUF1_nȑePD *BDʺ(M¦*[6ൗRuVRf:F̙СҩΟ7P{ZƍLBj"KK6tE_AT'Ot94ztGQ{r UGL>Yk;qEg[n)A3o޼?S?]֮]7ix݁`^j~WOKMC iƿr妠JjvvvsnD>7p02z+&'^6,_4% 5k׏\vS|TǎvQZŊUdȊ>鸿%"dŊWgDJ2 j򩔐3ItՔpI:֨}i! OR1cD(--.Rmڴom0kjWG^\[']]$>}A,׭V.˨RGϛ;dݻ2ddpp Va潤ST>|xTaN|~ ̛v8HgϦʕ}Bt:?k~3WכT##g_V9s\pUF-?Qk|'sIY{Q*.*HRBΩZn)}Сڌ},!!۶_Ғl.ՄHC'O^~C 8+Wn DDX> bXDvqEVP>496 m۶74:؊0!ւiJf^$DV/lHv͛Kr\W }ezaKjNK.w\#>>*4t*cb̿r 6?ŋװ {ԕCfOǗj셤6EVȪU[2\͠d۴̶k@Wǎ%}'۵Ī}_U_ GA~J}1!㿍ZF-˗ II:tbggG:::߈lI^N]*9;)֪U9'$\ M ,/_B[i;eʋ]-Z^=k7nΞ=xTj!4Zw2Wj$ҩD@WÿR4JxaC`9^ܯ_ aKaЬjv &||9cTV;GCgAƧO_a> 8a>}A,nh޼\$G98رDj[2 k )K&heilIo5!߳s,:꧟cϋ %[UV?zt6r>}A, GA>,DA1K d>}A,A B@A@ GA>,DA1K2%GO:a܄IRE @A$S?1 R ۳dɚkK GA̒L{?O:n¤#cEػ_g> bdJ> b@@[@A %}}A,IGN4 !}AAA>  d@AA$   0ziMIENDB`onedrive-2.5.10/docs/puml/webhooks.puml000066400000000000000000000014021513710110600200270ustar00rootroot00000000000000@startuml skinparam SequenceBoxBackgroundColor<> AliceBlue box "Linux System"<> participant ClientApp as "OneDrive Client for Linux\n(webhook listener 127.0.0.1:8888)" participant Nginx end box participant Firewall as "Firewall | Router" participant GraphAPI as "Microsoft Graph API" ClientApp -> GraphAPI: HTTPS POST /v1.0/subscriptions GraphAPI -> ClientApp: Subscription details response (HTTPS) == Subscription Notification == GraphAPI -> Firewall: HTTPS Notification (port 443) Firewall -> Nginx: Port forwarding to Nginx (port 443) alt Request for /webhooks/onedrive Nginx -> ClientApp: Proxy notification to http://127.0.0.1:8888 ClientApp -> Nginx: Response Nginx -> GraphAPI: Return proxied response (HTTPS) end @endumlonedrive-2.5.10/docs/sharepoint-libraries.md000066400000000000000000000262641513710110600210170ustar00rootroot00000000000000# How to configure OneDrive SharePoint Shared Library sync > [!CAUTION] > Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. > [!CAUTION] > Several users have reported files being overwritten causing data loss as a result of using this client with SharePoint Libraries when running as a systemd service. > > When this has been investigated, the following has been noted as potential root causes: > * File indexing application such as Baloo File Indexer or Tracker3 constantly indexing your OneDrive data > * The use of WPS Office and how it 'saves' files by deleting the existing item and replaces it with the saved data. Do not use WPS Office. > > Additionally there could be a yet unknown bug with the client, however all debugging and data provided previously shows that an 'external' process to the 'onedrive' application modifies the files triggering the undesirable upload to occur. > > **Possible Preventative Actions:** > * Disable all File Indexing for your SharePoint Library data. It is out of scope to detail on how you should do this. > * Disable using a systemd service for syncing your SharePoint Library data. > * Do not use WPS Office to edit your documents. Use OpenOffice or LibreOffice as these do not exhibit the same 'delete to save' action that WPS Office has. > > Additionally has been 100% re-written from v2.5.0 onwards, thus the mechanism for saving data to SharePoint has been critically overhauled to simplify actions to negate the impacts where SharePoint will *modify* your file post upload, breaking file integrity as the file you have locally, is not the file that is stored online. Please read https://github.com/OneDrive/onedrive-api-docs/issues/935 for relevant details. ## Process Overview Syncing a OneDrive SharePoint library requires additional configuration for your 'onedrive' client: 1. Login to OneDrive and under 'Shared Libraries' obtain the shared library name 2. Query that shared library name using the client to obtain the required configuration details 3. Create a unique local folder which will be the SharePoint Library 'root' 4. Configure the client's config file with the required 'drive_id' 5. Test the configuration using '--dry-run' 6. Sync the SharePoint Library as required > [!IMPORTANT] > The `--get-sharepoint-drive-id` process below requires a fully configured 'onedrive' configuration so that the applicable Drive ID for the given SharePoint Shared Library can be determined. It is highly recommended that you do not use the application 'default' configuration directory for any SharePoint Site, and configure separate items for each site you wish to use. ## 1. Listing available OneDrive SharePoint Libraries Login to the OneDrive web interface and determine which shared library you wish to configure the client for: ![shared_libraries](./images/SharedLibraries.jpg) ## 2. Query OneDrive API to obtain required configuration details Run the following command using the 'onedrive' client to query the OneDrive API to obtain the required 'drive_id' of the SharePoint Library that you wish to sync: ```text onedrive --get-sharepoint-drive-id '' ``` This will return something similar to the following: ```text Configuration file successfully loaded Configuring Global Azure AD Endpoints Initializing the Synchronization Engine ... Office 365 Library Name Query: ----------------------------------------------- Site Name: Library Name: drive_id: b!6H_y8B...xU5 Library URL: ----------------------------------------------- ``` If there are no matches to the site you are attempting to search, the following will be displayed: ```text Configuration file successfully loaded Configuring Global Azure AD Endpoints Initializing the Synchronization Engine ... Office 365 Library Name Query: blah ERROR: The requested SharePoint site could not be found. Please check it's name and your permissions to access the site. The following SharePoint site names were returned: * * ... * ``` This list of site names can be used as a basis to search for the correct site for which you are searching ## 3. Create a new configuration directory and sync location for this SharePoint Library Create a new configuration directory for this SharePoint Library in the following manner: ```text mkdir ~/.config/SharePoint_My_Library_Name ``` Create a new local folder to store the SharePoint Library data in: ```text mkdir ~/SharePoint_My_Library_Name ``` > [!TIP] > Do not use spaces in the directory name, use '_' as a replacement ## 4. Configure SharePoint Library config file with the required 'drive_id' & 'sync_dir' options Download a copy of the default configuration file by downloading this file from GitHub and saving this file in the directory created above: ```text wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/SharePoint_My_Library_Name/config ``` Update your 'onedrive' configuration file (`~/.config/SharePoint_My_Library_Name/config`) with the local folder where you will store your data: ```text sync_dir = "~/SharePoint_My_Library_Name" ``` Update your 'onedrive' configuration file(`~/.config/SharePoint_My_Library_Name/config`) with the 'drive_id' value obtained in the steps above: ```text drive_id = "insert the drive_id value from above here" ``` The OneDrive client will now be configured to sync this SharePoint shared library to your local system and the location you have configured. > [!IMPORTANT] > After changing `drive_id`, you must perform a full re-synchronization by adding `--resync` to your existing command line. ## 5. Validate and Test the configuration Validate your new configuration using the `--display-config` option to validate you have configured the application correctly: ```text onedrive --confdir="~/.config/SharePoint_My_Library_Name" --display-config ``` Test your new configuration using the `--dry-run` option to validate the application configuration: ```text onedrive --confdir="~/.config/SharePoint_My_Library_Name" --synchronize --verbose --dry-run ``` > [!IMPORTANT] > As this is a *new* configuration, the application will be required to be re-authorised the first time this command is run with the new configuration. ## 6. Sync the SharePoint Library as required Sync the SharePoint Library to your system with either `--synchronize` or `--monitor` operations: ```text onedrive --confdir="~/.config/SharePoint_My_Library_Name" --synchronize --verbose ``` ```text onedrive --confdir="~/.config/SharePoint_My_Library_Name" --monitor --verbose ``` > [!IMPORTANT] > As this is a *new* configuration, the application will be required to be re-authorised the first time this command is run with the new configuration. ## 7. Enable custom systemd service for SharePoint Library Systemd can be used to automatically run this configuration in the background, however, a unique systemd service will need to be setup for this SharePoint Library instance In order to automatically start syncing each SharePoint Library, you will need to create a service file for each SharePoint Library. From the applicable 'systemd folder' where the applicable systemd service file exists: * RHEL / CentOS: `/usr/lib/systemd/system` * Others: `/usr/lib/systemd/user` and `/lib/systemd/system` ### Step1: Create a new systemd service file #### Red Hat Enterprise Linux, CentOS Linux Copy the required service file to a new name: ```text sudo cp /usr/lib/systemd/system/onedrive.service /usr/lib/systemd/system/onedrive-SharePoint_My_Library_Name.service ``` or ```text sudo cp /usr/lib/systemd/system/onedrive@.service /usr/lib/systemd/system/onedrive-SharePoint_My_Library_Name@.service ``` #### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora Copy the required service file to a new name: ```text sudo cp /usr/lib/systemd/user/onedrive.service /usr/lib/systemd/user/onedrive-SharePoint_My_Library_Name.service ``` or ```text sudo cp /lib/systemd/system/onedrive@.service /lib/systemd/system/onedrive-SharePoint_My_Library_Name@.service ``` ### Step 2: Edit new systemd service file Edit the new systemd file, updating the line beginning with `ExecStart` so that the confdir mirrors the one you used above: ```text ExecStart=/usr/local/bin/onedrive --monitor --confdir="/full/path/to/config/dir" ``` Example: ```text ExecStart=/usr/local/bin/onedrive --monitor --confdir="/home/myusername/.config/SharePoint_My_Library_Name" ``` > [!IMPORTANT] > When running the client manually, `--confdir="~/.config/......` is acceptable. In a systemd configuration file, the full path must be used. The `~` must be manually expanded when editing your systemd file. ### Step 3: Enable the new systemd service Once the file is correctly edited, you can enable the new systemd service using the following commands. #### Red Hat Enterprise Linux, CentOS Linux ```text systemctl enable onedrive-SharePoint_My_Library_Name systemctl start onedrive-SharePoint_My_Library_Name ``` #### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text systemctl --user enable onedrive-SharePoint_My_Library_Name systemctl --user start onedrive-SharePoint_My_Library_Name ``` or ```text systemctl --user enable onedrive-SharePoint_My_Library_Name@myusername.service systemctl --user start onedrive-SharePoint_My_Library_Name@myusername.service ``` ### Step 4: Viewing systemd status and logs for the custom service #### Viewing systemd service status - Red Hat Enterprise Linux, CentOS Linux ```text systemctl status onedrive-SharePoint_My_Library_Name ``` #### Viewing systemd service status - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text systemctl --user status onedrive-SharePoint_My_Library_Name ``` #### Viewing journalctl systemd logs - Red Hat Enterprise Linux, CentOS Linux ```text journalctl --unit=onedrive-SharePoint_My_Library_Name -f ``` #### Viewing journalctl systemd logs - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text journalctl --user --unit=onedrive-SharePoint_My_Library_Name -f ``` ### Step 5: (Optional) Run custom systemd service at boot without user login In some cases it may be desirable for the systemd service to start without having to login as your 'user' All the systemd steps above that utilise the `--user` option, will run the systemd service as your particular user. As such, the systemd service will not start unless you actually login to your system. To avoid this issue, you need to reconfigure your 'user' account so that the systemd services you have created will startup without you having to login to your system: ```text loginctl enable-linger ``` Example: ```text alex@ubuntu-headless:~$ loginctl enable-linger alex ``` ## 8. Configuration for a SharePoint Library is complete The 'onedrive' client configuration for this particular SharePoint Library is now complete. # How to configure multiple OneDrive SharePoint Shared Library sync Create a new configuration as per the process above. Repeat these steps for each SharePoint Library that you wish to use. onedrive-2.5.10/docs/terms-of-service.md000066400000000000000000000070111513710110600200500ustar00rootroot00000000000000# OneDrive Client for Linux - Software Service Terms of Service ## 1. Introduction These Terms of Service ("Terms") govern your use of the OneDrive Client for Linux ("Application") software and related Microsoft OneDrive services ("Service") provided by Microsoft. By accessing or using the Service, you agree to comply with and be bound by these Terms. If you do not agree to these Terms, please do not use the Service. ## 2. License Compliance The OneDrive Client for Linux software is licensed under the GNU General Public License, version 3.0 (the "GPLv3"). Your use of the software must comply with the terms and conditions of the GPLv3. A copy of the GPLv3 can be found here: https://www.gnu.org/licenses/gpl-3.0.en.html ## 3. Use of the Service ### 3.1. Access and Accounts You may need to create an account or provide personal information to access certain features of the Service. You are responsible for maintaining the confidentiality of your account information and are solely responsible for all activities that occur under your account. ### 3.2. Prohibited Activities You agree not to: - Use the Service in any way that violates applicable laws or regulations. - Use the Service to engage in any unlawful, harmful, or fraudulent activity. - Use the Service in any manner that disrupts, damages, or impairs the Service. ## 4. Intellectual Property The OneDrive Client for Linux software is subject to the GPLv3, and you must respect all copyrights, trademarks, and other intellectual property rights associated with the software. Any contributions you make to the software must also comply with the GPLv3. ## 5. Disclaimer of Warranties The OneDrive Client for Linux software is provided "as is" without any warranties, either expressed or implied. We do not guarantee that the use of the Application will be error-free or uninterrupted. Microsoft is not responsible for OneDrive Client for Linux. Any issues or problems with OneDrive Client for Linux should be raised on GitHub at https://github.com/abraunegg/onedrive or email support@mynas.com.au OneDrive Client for Linux is not responsible for the Microsoft OneDrive Service or the Microsoft Graph API Service that this Application utilises. Any issue with either Microsoft OneDrive or Microsoft Graph API should be raised with Microsoft via their support channel in your country. ## 6. Limitation of Liability To the fullest extent permitted by law, we shall not be liable for any direct, indirect, incidental, special, consequential, or punitive damages, or any loss of profits or revenues, whether incurred directly or indirectly, or any loss of data, use, goodwill, or other intangible losses, resulting from (a) your use or inability to use the Service, or (b) any other matter relating to the Service. This limitation of liability explicitly relates to the use of the OneDrive Client for Linux software and does not affect your rights under the GPLv3. ## 7. Changes to Terms We reserve the right to update or modify these Terms at any time without prior notice. Any changes will be effective immediately upon posting on GitHub. Your continued use of the Service after the posting of changes constitutes your acceptance of such changes. Changes can be reviewed on GitHub. ## 8. Governing Law These Terms shall be governed by and construed in accordance with the laws of Australia, without regard to its conflict of law principles. ## 9. Contact Us If you have any questions or concerns about these Terms, please contact us at https://github.com/abraunegg/onedrive or email support@mynas.com.au onedrive-2.5.10/docs/ubuntu-package-install.md000066400000000000000000000533161513710110600212460ustar00rootroot00000000000000# Installation of 'onedrive' package on Debian and Ubuntu This document outlines the steps for installing the 'onedrive' client on Debian, Ubuntu, and their derivatives using the OpenSuSE Build Service Packages. > [!CAUTION] > This information is specifically for the following platforms and distributions: > * Debian > * Deepin > * Elementary OS > * Kali Linux > * Lubuntu > * Linux Mint > * MX Linux > * Pop!_OS > * Peppermint OS > * Raspbian | Raspberry Pi OS > * Ubuntu | Kubuntu | Xubuntu | Ubuntu Mate > * Zorin OS > > Although packages for the 'onedrive' client are available through distribution repositories, it is strongly advised against installing them. These distribution-provided packages are outdated, unsupported, and contain bugs and issues that have already been resolved in newer versions. They should not be used. > [!IMPORTANT] > The distribution versions listed below are **End-of-Life (EOL)** and are **no longer supported** or tested with current client releases. You must upgrade to a supported distribution before proceeding. > * Debian 9 > * Debian 10 > * Ubuntu 16.x > * Ubuntu 18.x > * Ubuntu 20.x ## Determine which instructions to use Ubuntu and its clones are based on various different releases, thus, you must use the correct instructions below, otherwise you may run into package dependency issues and will be unable to install the client. ### Step 1: Remove any configured PPA and associated 'onedrive' package and systemd service files #### Step 1a: Remove PPA if configured Many Internet 'help' pages provide inconsistent details on how to install the OneDrive Client for Linux. A number of these websites continue to point users to install the client via the yann1ck PPA repository however this PPA no longer exists and should not be used. If you have previously configured, or attempted to add this PPA, this needs to be removed. To remove the yann1ck PPA repository, perform the following actions: ```text sudo add-apt-repository --remove ppa:yann1ck/onedrive ``` #### Step 1b: Remove 'onedrive' package provided by Ubuntu Universe Repository Many Internet 'help' pages provide inconsistent details on how to install the OneDrive Client for Linux. A number of these websites continue to advise users to install the client via `sudo apt install onedrive` without first configuring the OpenSuSE Build Service (OBS) Repository. When installing without OBS, you install an obsolete client version with known bugs that have been fixed, but this package also contains an errant systemd service (see below) that impacts background running of this client. To remove the Ubuntu Universe client, perform the following actions: ```text sudo apt remove onedrive ``` #### Step 1c: Remove errant systemd service file installed by Ubuntu Universe distribution package The Ubuntu Universe distribution packages have a bad habit of creating a 'default' systemd service file when installing the 'onedrive' package so that the client will automatically run the client post being authenticated. The following is logged when you install from the Ubuntu Universe package: ``` Created symlink /etc/systemd/user/default.target.wants/onedrive.service → /usr/lib/systemd/user/onedrive.service. ``` This systemd entry is erroneous and needs to be removed. Without removing this erroneous systemd link, this increases your risk of getting the following error message: ``` Opening the item database ... ERROR: onedrive application is already running - check system process list for active application instances - Use 'sudo ps aufxw | grep onedrive' to potentially determine active running process Waiting for all internal threads to complete before exiting application ``` As the client is also built with GUI notifications enabled, every time this systemd service 'restarts' it will send a GUI notification which can spam your GUI with notifications. To remove this symbolic link for the errant systemd service, run the following command: ``` sudo rm /etc/systemd/user/default.target.wants/onedrive.service ``` ### Step 2: Ensure your system is up-to-date Use a script, similar to the following to ensure your system is updated correctly: ```text #!/bin/bash rm -rf /var/lib/dpkg/lock-frontend rm -rf /var/lib/dpkg/lock apt-get update apt-get upgrade -y apt-get dist-upgrade -y apt-get autoremove -y apt-get autoclean -y ``` Run this script as 'root' by using `su -` to elevate to 'root'. Example below: ```text Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-36-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro Expanded Security Maintenance for Applications is not enabled. 0 updates can be applied immediately. Enable ESM Apps to receive additional future security updates. See https://ubuntu.com/esm or run: sudo pro status The list of available updates is more than a week old. To check for new updates run: sudo apt update Last login: Mon Nov 10 06:42:58 2025 from xxx.xxx.xxx.xxx alex@ubuntu-24-04:~$ su - Password: root@ubuntu-24-04:~# ls -la total 36 drwx------ 5 root root 4096 Nov 10 06:43 . drwxr-xr-x 23 root root 4096 Jun 30 2024 .. -rw------- 1 root root 168 Nov 10 06:43 .bash_history -rw-r--r-- 1 root root 3106 Apr 22 2024 .bashrc drwx------ 2 root root 4096 Apr 24 2024 .cache -rw-r--r-- 1 root root 161 Apr 22 2024 .profile drwx------ 6 root root 4096 Jun 30 2024 snap drwx------ 2 root root 4096 Jun 30 2024 .ssh -rwxr-xr-x 1 root root 174 Nov 10 06:43 update_os.sh root@ubuntu-24-04:~# cat update_os.sh #!/bin/bash rm -rf /var/lib/dpkg/lock-frontend rm -rf /var/lib/dpkg/lock apt-get update apt-get upgrade -y apt-get dist-upgrade -y apt-get autoremove -y apt-get autoclean -y root@ubuntu-24-04:~# ./update_os.sh Get:1 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] Hit:2 http://au.archive.ubuntu.com/ubuntu noble InRelease Get:3 http://au.archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB] Get:4 http://au.archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB] Get:5 http://au.archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [1,585 kB] .... Unpacking libglx-mesa0:amd64 (25.0.7-0ubuntu0.24.04.2) over (24.0.5-1ubuntu1) ... Preparing to unpack .../6-libgl1-amber-dri_21.3.9-0ubuntu3~24.04.1_amd64.deb ... Unpacking libgl1-amber-dri:amd64 (21.3.9-0ubuntu3~24.04.1) over (21.3.9-0ubuntu2) ... (Reading database ... 152058 files and directories currently installed.) Removing libglapi-mesa:amd64 (24.0.5-1ubuntu1) ... Selecting previously unselected package libglapi-amber:amd64. (Reading database ... 152049 files and directories currently installed.) Preparing to unpack .../00-libglapi-amber_21.3.9-0ubuntu3~24.04.1_amd64.deb ... Unpacking libglapi-amber:amd64 (21.3.9-0ubuntu3~24.04.1) ... Selecting previously unselected package libmalcontent-0-0:amd64. Preparing to unpack .../01-libmalcontent-0-0_0.11.1-1ubuntu1.2_amd64.deb ... Unpacking libmalcontent-0-0:amd64 (0.11.1-1ubuntu1.2) ... Preparing to unpack .../02-gnome-control-center_1%3a46.7-0ubuntu0.24.04.2_amd64.deb ... Unpacking gnome-control-center (1:46.7-0ubuntu0.24.04.2) over (1:46.0.1-1ubuntu7) ... Preparing to unpack .../03-libxatracker2_25.0.7-0ubuntu0.24.04.2_amd64.deb ... Unpacking libxatracker2:amd64 (25.0.7-0ubuntu0.24.04.2) over (24.0.5-1ubuntu1) ... Selecting previously unselected package linux-modules-6.14.0-35-generic. Preparing to unpack .../04-linux-modules-6.14.0-35-generic_6.14.0-35.35~24.04.1_amd64.deb ... Unpacking linux-modules-6.14.0-35-generic (6.14.0-35.35~24.04.1) ... Selecting previously unselected package linux-image-6.14.0-35-generic. Preparing to unpack .../05-linux-image-6.14.0-35-generic_6.14.0-35.35~24.04.1_amd64.deb ... Unpacking linux-image-6.14.0-35-generic (6.14.0-35.35~24.04.1) ... Selecting previously unselected package linux-modules-extra-6.14.0-35-generic. Preparing to unpack .../06-linux-modules-extra-6.14.0-35-generic_6.14.0-35.35~24.04.1_amd64.deb ... .... Del libpam-modules-bin 1.5.3-5ubuntu5.1 [51.9 kB] Del systemd-sysv 255.4-1ubuntu8.1 [11.9 kB] root@ubuntu-24-04:~# ``` Reboot your system after running this process before continuing with Step 3. This ensures that your system is correctly up-to-date and any prior running 'onedrive' process and systemd service is now correctly removed and not running. ```text reboot ``` ### Step 3: Determine what your OS is based on Determine what your OS is based on. To do this, run the following command: ```text lsb_release -a ``` **Example:** ```text alex@ubuntu-24-04:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04 LTS Release: 24.04 Codename: noble alex@ubuntu-24-04:~$ ``` ### Step 4: Pick the correct instructions to use If required, review the table below based on your 'lsb_release' information to pick the appropriate instructions to use: | Release & Codename | Instructions to use | |--------------------|---------------------| | Linux Mint 19.x | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Linux Mint 22.x | | Linux Mint 20.x | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Linux Mint 22.x | | Linux Mint 21.x | Use [Ubuntu 22.04](#distribution-ubuntu-2204) instructions below | | Linux Mint 22.x | Use [Ubuntu 24.04](#distribution-ubuntu-2404) instructions below | | Linux Mint Debian Edition (LMDE) 5 / Elsie | Use [Debian 11](#distribution-debian-11) instructions below | | Linux Mint Debian Edition (LMDE) 6 / Faye | Use [Debian 12](#distribution-debian-12) instructions below | | Linux Mint Debian Edition (LMDE) 7 / Gigi | Use [Debian 13](#distribution-debian-13) instructions below | | Debian 9 / stretch | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Debian 13 | | Debian 10 / buster | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Debian 13 | | Debian 11 / bullseye | Use [Debian 11](#distribution-debian-11) instructions below | | Debian 12 / bookworm | Use [Debian 12](#distribution-debian-12) instructions below | | Debian 13 / trixie | Use [Debian 13](#distribution-debian-13) instructions below | | Debian Sid | Refer to https://packages.debian.org/sid/onedrive for assistance | | Raspbian GNU/Linux 10 | You must build from source or upgrade your Operating System to Raspbian GNU/Linux 12 | | Raspbian GNU/Linux 11 | Use [Debian 11](#distribution-debian-11) instructions below | | Raspbian GNU/Linux 12 | Use [Debian 12](#distribution-debian-12) instructions below | | Ubuntu 16.04 / Xenial | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 24.04 | | Ubuntu 18.04 / Bionic | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 24.04 | | Ubuntu 20.04 / Focal | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 24.04 | | Ubuntu 21.04 / Hirsute | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 24.04 | | Ubuntu 21.10 / Impish | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 24.04 | | Ubuntu 22.04 / Jammy | Use [Ubuntu 22.04](#distribution-ubuntu-2204) instructions below | | Ubuntu 22.10 / Kinetic | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 24.04 | | Ubuntu 23.04 / Lunar | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 24.04 | | Ubuntu 23.10 / Mantic | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 24.04 | | Ubuntu 24.04 / Noble | Use [Ubuntu 24.04](#distribution-ubuntu-2404) instructions below | | Ubuntu 24.10 / Oracular | This platform is **End-of-Life (EOL)** and no longer supported. You must upgrade to at least Ubuntu 25.04 | | Ubuntu 25.04 / Plucky | Use [Ubuntu 25.04](#distribution-ubuntu-2504) instructions below | | Ubuntu 25.10 / Questing | Use [Ubuntu 25.10](#distribution-ubuntu-2510) instructions below | > [!IMPORTANT] > If your Linux distribution or release is **not listed in the table above**, you have two options: > > 1. Compile the client from source. Refer to [Installing or Upgrading the OneDrive Client for Linux](install.md). > 2. Request packaging support from your distribution’s maintainers so that an official, supported package can be provided. ## Distribution Package Install Instructions ### Distribution: Debian 11 The packages support the following platform architectures: |  i686  | x86_64 | ARMHF | AARCH64 | |:----:|:------:|:-----:|:-------:| |✔|✔|✔|✔| #### Step 1: Add the OpenSuSE Build Service repository release key Add the OpenSuSE Build Service repository release key using the following command: ```text wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_11/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null ``` #### Step 2: Add the OpenSuSE Build Service repository Add the OpenSuSE Build Service repository using the following command: ```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_11/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list ``` #### Step 3: Update your apt package cache Run: `sudo apt-get update` #### Step 4: Install 'onedrive' Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` #### Step 5: Read 'Known Issues' with these packages Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. ### Distribution: Debian 12 The packages support the following platform architectures: |  i686  | x86_64 | ARMHF | AARCH64 | |:----:|:------:|:-----:|:-------:| |✔|✔|✔|✔| #### Step 1: Add the OpenSuSE Build Service repository release key Add the OpenSuSE Build Service repository release key using the following command: ```text wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_12/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null ``` #### Step 2: Add the OpenSuSE Build Service repository Add the OpenSuSE Build Service repository using the following command: ```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_12/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list ``` #### Step 3: Update your apt package cache Run: `sudo apt-get update` #### Step 4: Install 'onedrive' Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` #### Step 5: Read 'Known Issues' with these packages Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. ### Distribution: Debian 13 The packages support the following platform architectures: |  i686  | x86_64 | ARMHF | AARCH64 | |:----:|:------:|:-----:|:-------:| |✔|✔|✔|✔| #### Step 1: Add the OpenSuSE Build Service repository release key Add the OpenSuSE Build Service repository release key using the following command: ```text wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_13/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null ``` #### Step 2: Add the OpenSuSE Build Service repository Add the OpenSuSE Build Service repository using the following command: ```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_13/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list ``` #### Step 3: Update your apt package cache Run: `sudo apt-get update` #### Step 4: Install 'onedrive' Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` #### Step 5: Read 'Known Issues' with these packages Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. ### Distribution: Ubuntu 22.04 The packages support the following platform architectures: |  i686  | x86_64 | ARMHF | AARCH64 | |:----:|:------:|:-----:|:-------:| |❌|✔|✔|✔| #### Step 1: Add the OpenSuSE Build Service repository release key Add the OpenSuSE Build Service repository release key using the following command: ```text wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null ``` #### Step 2: Add the OpenSuSE Build Service repository Add the OpenSuSE Build Service repository using the following command: ```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_22.04/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list ``` #### Step 3: Update your apt package cache Run: `sudo apt-get update` #### Step 4: Install 'onedrive' Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` #### Step 5: Read 'Known Issues' with these packages Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. ### Distribution: Ubuntu 24.04 The packages support the following platform architectures: |  i686  | x86_64 | ARMHF | AARCH64 | |:----:|:------:|:-----:|:-------:| |❌|✔|✔|✔| #### Step 1: Add the OpenSuSE Build Service repository release key Add the OpenSuSE Build Service repository release key using the following command: ```text wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_24.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null ``` #### Step 2: Add the OpenSuSE Build Service repository Add the OpenSuSE Build Service repository using the following command: ```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_24.04/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list ``` #### Step 3: Update your apt package cache Run: `sudo apt-get update` #### Step 4: Install 'onedrive' Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` #### Step 5: Read 'Known Issues' with these packages Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. ### Distribution: Ubuntu 25.04 The packages support the following platform architectures: |  i686  | x86_64 | ARMHF | AARCH64 | |:----:|:------:|:-----:|:-------:| |❌|✔|✔|✔| #### Step 1: Add the OpenSuSE Build Service repository release key Add the OpenSuSE Build Service repository release key using the following command: ```text wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_25.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null ``` #### Step 2: Add the OpenSuSE Build Service repository Add the OpenSuSE Build Service repository using the following command: ```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_25.04/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list ``` #### Step 3: Update your apt package cache Run: `sudo apt-get update` #### Step 4: Install 'onedrive' Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` #### Step 5: Read 'Known Issues' with these packages Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. ### Distribution: Ubuntu 25.10 The packages support the following platform architectures: |  i686  | x86_64 | ARMHF | AARCH64 | |:----:|:------:|:-----:|:-------:| |❌|✔|✔|✔| #### Step 1: Add the OpenSuSE Build Service repository release key Add the OpenSuSE Build Service repository release key using the following command: ```text wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_25.10/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null ``` #### Step 2: Add the OpenSuSE Build Service repository Add the OpenSuSE Build Service repository using the following command: ```text echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_25.10/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list ``` #### Step 3: Update your apt package cache Run: `sudo apt-get update` #### Step 4: Install 'onedrive' Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` #### Step 5: Read 'Known Issues' with these packages Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. ## Known Issues with Installing from the above packages There are currently no known issues when installing 'onedrive' from the OpenSuSE Build Service repository. onedrive-2.5.10/docs/usage.md000066400000000000000000003606671513710110600160050ustar00rootroot00000000000000# Using the OneDrive Client for Linux ## Application Version Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. ## Table of Contents - [Important Notes](#important-notes) - [Memory Usage](#memory-usage) - [Guidelines for Local File and Folder Naming in the Synchronisation Directory](#guidelines-for-local-file-and-folder-naming-in-the-synchronisation-directory) - [Support for Microsoft Azure Information Protected Files](#support-for-microsoft-azure-information-protected-files) - [Compatibility with Editors and Applications Using Atomic Save Operations](#compatibility-with-editors-and-applications-using-atomic-save-operations) - [Compatibility with Obsidian](#compatibility-with-obsidian) - [Compatibility with curl](#compatibility-with-curl) - [First Steps](#first-steps) - [Authorise the Application with Your Microsoft OneDrive Account](#authorise-the-application-with-your-microsoft-onedrive-account) - [Display Your Applicable Runtime Configuration](#display-your-applicable-runtime-configuration) - [Understanding OneDrive Client for Linux Operational Modes](#understanding-onedrive-client-for-linux-operational-modes) - [Standalone Synchronisation Operational Mode (Standalone Mode)](#standalone-synchronisation-operational-mode-standalone-mode) - [Ongoing Synchronisation Operational Mode (Monitor Mode)](#ongoing-synchronisation-operational-mode-monitor-mode) - [Using the OneDrive Client for Linux to synchronise your data](#using-the-onedrive-client-for-linux-to-synchronise-your-data) - [Client Documentation](#client-documentation) - [Increasing application logging level](#increasing-application-logging-level) - [Using 'Client Side Filtering' rules to determine what should be synced with Microsoft OneDrive](#using-client-side-filtering-rules-to-determine-what-should-be-synced-with-microsoft-onedrive) - [Testing your configuration](#testing-your-configuration) - [Performing a sync with Microsoft OneDrive](#performing-a-sync-with-microsoft-onedrive) - [Performing a single directory synchronisation with Microsoft OneDrive](#performing-a-single-directory-synchronisation-with-microsoft-onedrive) - [Performing a 'one-way' download synchronisation with Microsoft OneDrive](#performing-a-one-way-download-synchronisation-with-microsoft-onedrive) - [Performing a 'one-way' upload synchronisation with Microsoft OneDrive](#performing-a-one-way-upload-synchronisation-with-microsoft-onedrive) - [Performing a selective synchronisation via 'sync_list' file](#performing-a-selective-synchronisation-via-sync_list-file) - [Performing a --resync](#performing-a---resync) - [Performing a --force-sync without a --resync or changing your configuration](#performing-a---force-sync-without-a---resync-or-changing-your-configuration) - [Enabling the Client Activity Log](#enabling-the-client-activity-log) - [Client Activity Log Example:](#client-activity-log-example) - [Client Activity Log Differences](#client-activity-log-differences) - [Display Manager Integration](#display-manager-integration) - [GUI Notifications](#gui-notifications) - [Using a local Recycle Bin](#using-a-local-recycle-bin) - [Handling a Microsoft OneDrive Account Password Change](#handling-a-microsoft-onedrive-account-password-change) - [Determining the synchronisation result](#determining-the-synchronisation-result) - [Resumable Transfers](#resumable-transfers) - [Frequently Asked Configuration Questions](#frequently-asked-configuration-questions) - [How to change the default configuration of the client?](#how-to-change-the-default-configuration-of-the-client) - [How to change where my data from Microsoft OneDrive is stored?](#how-to-change-where-my-data-from-microsoft-onedrive-is-stored) - [Why does the client create 'safeBackup' files?](#why-does-the-client-create-safebackup-files) - [How to change what file and directory permissions are assigned to data that is downloaded from Microsoft OneDrive?](#how-to-change-what-file-and-directory-permissions-are-assigned-to-data-that-is-downloaded-from-microsoft-onedrive) - [How are uploads and downloads managed?](#how-are-uploads-and-downloads-managed) - [How to only sync a specific directory?](#how-to-only-sync-a-specific-directory) - [How to 'skip' files from syncing?](#how-to-skip-files-from-syncing) - [How to 'skip' directories from syncing?](#how-to-skip-directories-from-syncing) - [How to 'skip' .files and .folders from syncing?](#how-to-skip-files-and-folders-from-syncing) - [How to 'skip' files larger than a certain size from syncing?](#how-to-skip-files-larger-than-a-certain-size-from-syncing) - [How to 'rate limit' the application to control bandwidth consumed for upload & download operations?](#how-to-rate-limit-the-application-to-control-bandwidth-consumed-for-upload--download-operations) - [How can I prevent my local disk from filling up?](#how-can-i-prevent-my-local-disk-from-filling-up) - [How does the client handle symbolic links?](#how-does-the-client-handle-symbolic-links) - [How to synchronise OneDrive Personal Shared Folders?](#how-to-synchronise-onedrive-personal-shared-folders) - [How to synchronise OneDrive Business Shared Items (Files and Folders)?](#how-to-synchronise-onedrive-business-shared-items-files-and-folders) - [How to synchronise SharePoint / Office 365 Shared Libraries?](#how-to-synchronise-sharepoint--office-365-shared-libraries) - [How to Create a Shareable Link?](#how-to-create-a-shareable-link) - [How to Synchronise Both Personal and Business Accounts at once?](#how-to-synchronise-both-personal-and-business-accounts-at-once) - [How to Synchronise Multiple SharePoint Libraries simultaneously?](#how-to-synchronise-multiple-sharepoint-libraries-simultaneously) - [How to Receive Real-time Changes from Microsoft OneDrive Service, instead of waiting for the next sync period?](#how-to-receive-real-time-changes-from-microsoft-onedrive-service-instead-of-waiting-for-the-next-sync-period) - [How to initiate the client as a background service?](#how-to-initiate-the-client-as-a-background-service) - [OneDrive service running as root user via init.d](#onedrive-service-running-as-root-user-via-initd) - [OneDrive service running as root user via systemd (Arch, Ubuntu, Debian, OpenSuSE, Fedora)](#onedrive-service-running-as-root-user-via-systemd-arch-ubuntu-debian-opensuse-fedora) - [OneDrive service running as root user via systemd (Red Hat Enterprise Linux, CentOS Linux)](#onedrive-service-running-as-root-user-via-systemd-red-hat-enterprise-linux-centos-linux) - [OneDrive service running as a non-root user via systemd (All Linux Distributions)](#onedrive-service-running-as-a-non-root-user-via-systemd-all-linux-distributions) - [OneDrive service running as a non-root user via systemd (with notifications enabled) (Arch, Ubuntu, Debian, OpenSuSE, Fedora)](#onedrive-service-running-as-a-non-root-user-via-systemd-with-notifications-enabled-arch-ubuntu-debian-opensuse-fedora) - [OneDrive service running as a non-root user via runit (antiX, Devuan, Artix, Void)](#onedrive-service-running-as-a-non-root-user-via-runit-antix-devuan-artix-void) - [How to start a user systemd service at boot without user login?](#how-to-start-a-user-systemd-service-at-boot-without-user-login) - [How to access Microsoft OneDrive service through a proxy](#how-to-access-microsoft-onedrive-service-through-a-proxy) - [How to set up SELinux for a sync folder outside of the home folder](#how-to-set-up-selinux-for-a-sync-folder-outside-of-the-home-folder) - [Advanced Configuration of the OneDrive Client for Linux](#advanced-configuration-of-the-onedrive-client-for-linux) - [Overview of all OneDrive Client for Linux CLI Options](#overview-of-all-onedrive-client-for-linux-cli-options) ## Important Notes ### Memory Usage Starting with version 2.5.x, the application has been completely rewritten. It is crucial to understand the memory requirements to ensure the application runs smoothly on your system. During a `--resync` or full online scan, the OneDrive Client may use approximately 1GB of memory for every 100,000 objects stored online. This is because the client retrieves data for all objects via the OneDrive API before processing them locally. Once this process completes, the memory is freed. To avoid performance issues, ensure your system has sufficient available memory. If the system starts using swap space due to insufficient free memory, this can significantly slow down the application and impact overall performance. To avoid potential system instability or the client being terminated by your Out-Of-Memory (OOM) process monitors, please ensure your system has sufficient memory allocated or configure adequate swap space. ### Guidelines for Local File and Folder Naming in the Synchronisation Directory To ensure seamless synchronisation with Microsoft OneDrive, it's critical to adhere strictly to the prescribed naming conventions for your files and folders within the sync directory. The guidelines detailed below are designed to preempt potential sync failures by aligning with Microsoft Windows Naming Conventions, coupled with specific OneDrive restrictions. > [!WARNING] > Failure to comply will result in synchronisation being bypassed for the offending files or folders, necessitating a rename of the local item to establish sync compatibility. #### Key Restrictions and Limitations * Invalid Characters: * Avoid using the following characters in names of files and folders: `" * : < > ? / \ |` * Names should not start or end with spaces * Names should not end with a fullstop / period character `.` * Prohibited Names: * Certain names are reserved and cannot be used for files or folders: `.lock`, `CON`, `PRN`, `AUX`, `NUL`, `COM0 - COM9`, `LPT0 - LPT9`, `desktop.ini`, any filename starting with `~$` * The text sequence `_vti_` cannot appear anywhere in a file or directory name * A file and folder called `forms` is unsupported at the root level of a synchronisation directory * Path Length * All files and folders stored in your 'sync_dir' (typically `~/OneDrive`) must not have a path length greater than: * 400 characters for OneDrive Business & SharePoint * 430 characters for OneDrive Personal Should a file or folder infringe upon these naming conventions or restrictions, synchronisation will skip the item, indicating an invalid name according to Microsoft Naming Convention. The only remedy is to rename the offending item. This constraint is by design and remains firm. > [!TIP] > The UTF-16 character set provides a capability to use alternative characters to work around the restrictions and limitations imposed by Microsoft OneDrive. An example of some replacement characters are below: > | Standard Invalid Character | Potential UTF-16 Replacement Character | > |--------------------|------------------------------| > | . | ․ (One Dot Leader, `\u2024`) | > | : | ː (Modifier Letter Triangular Colon, `\u02D0`) | > | \| | │ (Box Drawings Light Vertical, `\u2502`) | > [!CAUTION] > The last critically important point is that Microsoft OneDrive does not adhere to POSIX standards, which fundamentally impacts naming conventions. In Unix environments (which are POSIX compliant), files and folders can exist simultaneously with identical names if their capitalisation differs. **This is not possible on Microsoft OneDrive.** If such a scenario occurs, the OneDrive Client for Linux will encounter a conflict, preventing the synchronisation of the conflicting file or folder. This constraint is a conscious design choice and is immutable. To avoid synchronisation issues, preemptive renaming of any conflicting local files or folders is advised. #### Further reading: The above guidelines are essential for maintaining synchronisation integrity with Microsoft OneDrive. Adhering to them ensures your files and folders sync without issue. For additional details, consult the following resources: * [Microsoft Windows Naming Conventions](https://docs.microsoft.com/windows/win32/fileio/naming-a-file) * [Restrictions and limitations in OneDrive and SharePoint](https://support.microsoft.com/en-us/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa) **Adherence to these guidelines is not optional but mandatory to avoid sync disruptions.** ### Support for Microsoft Azure Information Protected Files > [!CAUTION] > If you are using OneDrive Business Accounts and your organisation implements Azure Information Protection, these AIP files will report as one size & hash online, but when downloaded, will report a totally different size and hash. This is due to how the Microsoft Graph API handles AIP files and how Microsoft SharePoint (the technology behind Microsoft OneDrive for Business) serves these files via the API. > > By default these files will fail integrity checking and be deleted locally, meaning that AIP files will not reside on your platform. These AIP files will be flagged as a failed download during application operation. > > If you chose to enable `--disable-download-validation` , the AIP files will download to your platform, however, if there are any other genuine download failures where the size and hash are different, these too will be retained locally meaning you may experience data integrity loss. This is due to the Microsoft Graph API lacking any capability to identify up-front that a file utilises AIP, thus zero capability to differentiate between AIP and non-AIP files for failure detection. > > Please use the `--disable-download-validation` option with extreme caution and understand the risk if you enable it. ### Compatibility with Editors and Applications Using Atomic Save Operations Many modern editors and applications—including `vi`, `vim`, `nvim`, `emacs`, `LibreOffice`, `Obsidian` and others—use *atomic save* strategies to preserve data integrity when writing files. This section outlines how such operations interact with the `onedrive` client, what users can expect, and why certain side effects (such as editor warnings or perceived timestamp discrepancies) may occur. #### How Atomic Save Operations Work When these applications save a file, they typically follow this sequence: 1. **Create a Temporary File** A new file is written with the updated content, often in the same directory as the original. 2. **Flush to Disk** The temporary file is flushed to disk using `fsync()` or an equivalent method to ensure data safety. 3. **Atomic Rename** The temporary file is renamed to the original filename using the `rename()` syscall. This is an atomic operation on Linux, meaning the original file is *replaced*, not modified. 4. **Remove Lock or Swap Files** Auxiliary files used during editing (e.g., `.swp`, `.#filename`) are deleted. As a result, the saved file is **technically a new file** with a new inode and a new timestamp, even if the filename remains unchanged. #### How This Affects the OneDrive Client When the `onedrive` client observes such an atomic save operation via `inotify`, it detects: - The original file as *deleted*. - A new file (with the same name) as *created*. The client responds accordingly: - The "new" file is uploaded to Microsoft OneDrive. - After upload, Microsoft assigns its own *modification timestamp* to the file. - To ensure consistency between local and remote states, the client updates the local file’s timestamp to match the **exact time** stored in OneDrive. > [!IMPORTANT] > Microsoft OneDrive does **not support fractional-second precision** in file timestamps—only whole seconds. As a result, small discrepancies may occur if the local file system supports higher-resolution timestamps. This behaviour ensures accurate syncing and content integrity, but may lead to subtle side effects in timestamp-sensitive applications. #### Expected Side Effects - **Timestamp Alignment for Atomic Saves** Editors that rely on local file timestamps (rather than content checksums) can issue warnings that a file had changed unexpectedly—typically because the `onedrive` client potentially updated the modification time after upload. This client attempts to preserve the original modification timestamp only if fractional seconds differ, preventing unnecessary local timestamp changes. As a result, editors such as `vi`, `vim`, `nvim`, `emacs`, `LibreOffice` and `Obsidian` should not trigger warnings when saving files using atomic operations. - **False Conflict Prompts (Collaborative Editing)** In collaborative editing scenarios—such as with LibreOffice or shared OneDrive folders—conflict prompts may still occur if another user or device modifies a file, resulting in a meaningful timestamp or content change. However, for local edits using atomic save methods, the client now avoids unnecessary timestamp updates, effectively eliminating false conflicts in those cases. #### Recommendation If you are using editors that rely on strict timestamp semantics and wish to minimise interference from the `onedrive` client: - Save your work, then pause or temporarily stop sync (`onedrive --monitor`). - Resume syncing when finished. - Configure the client to ignore temporary files your editor uses via the `skip_file` setting if they do not need to be synced. - Configure the client to use 'session uploads' for all files via the `force_session_upload` setting. This option, when enabled, forces the client to use a 'session' upload, which, when the 'file' is uploaded by the session, this includes the actual local timestamp (without fractional seconds) of the file that Microsoft OneDrive should store. #### Summary The `onedrive` client is fully compatible with applications that use atomic save operations. Users should be aware that: - Atomic saves result in the file being treated as a new item. - Timestamps may be adjusted post-upload to match OneDrive's stored value. - In rare cases, timestamp-sensitive applications may display warnings or prompts. This behaviour is by design and ensures consistency and data integrity between your local filesystem and the OneDrive cloud. ### Compatibility with Obsidian Obsidian on Linux does not provide a built-in way to disable atomic saves or switch to a backup-copy method via configuration. The application is built on Electron and relies on the default save behaviour of its underlying libraries and editor components (such as CodeMirror), which typically perform *atomic writes* using the following process: 1. A temporary file is created containing the updated content. 2. That temporary file is flushed to disk. 3. The temporary file is atomically renamed to replace the original file. This behaviour is intended to improve data integrity and crash resilience, but it results in high disk I/O — particularly in Obsidian, where auto-save is triggered nearly every keystroke. > [!IMPORTANT] > Obsidian provides no mechanism to change how this save behaviour operates. This is a serious design limitation and should be treated as a bug in the application. The excessive and unnecessary write operations can significantly reduce the lifespan of SSDs over time due to increased wear, leading to broader consequences for system reliability. #### How This Affects the OneDrive Client Because Obsidian is constantly writing files, running the OneDrive Client for Linux in `--monitor` mode causes the client to continually receive inotify events from the local file system. This leads to constant re-uploading of files, regardless of whether meaningful content has changed. The consequences of this are: 1. Continuous upload attempts to Microsoft OneDrive. 2. Potential for repeated overwrites of online data. 3. Excessive API usage, which may result in Microsoft throttling your access — subsequently affecting the client’s ability to synchronise files reliably. #### Recommendation If you use Obsidian, it is *strongly* recommended that you enable the following two configuration options in your OneDrive Client for Linux `config` file: ``` force_session_upload = "true" delay_inotify_processing = "true" ``` These settings introduce a delay in processing local file change events, allowing the OneDrive Client for Linux to batch or debounce Obsidian's frequent writes. By default, this delay is 5 seconds. To adjust this delay, you can add the following configuration option: ``` inotify_delay = "10" ``` This example sets the delay to 10 seconds. > [!CAUTION] > Increasing `inotify_delay` too aggressively may have unintended side effects. All file system events are queued and processed in order, so setting a very high delay could result in large backlogs or undesirable data synchronisation outcomes — particularly in cases of rapid file changes or deletions. > > Adjust this setting with extreme caution and test thoroughly to ensure it does not impact your workflow or data integrity. > [!TIP] > An Obsidian Plugin also exists to 'control' the auto save behaviour of Obsidian. > > Instead of saving every two seconds from start of typing (Obsidian default), this plugin makes Obsidian wait for the user to finish with editing, and after the input stops, it waits for a defined time (by default 10 seconds) and then it only saves once. > > For more information please read: https://github.com/mihasm/obsidian-autosave-control ### Compatibility with curl If your system uses curl < 7.47.0, curl will default to HTTP/1.1 for HTTPS operations, and the client will follow suit, using HTTP/1.1. For systems running curl >= 7.47.0 and < 7.62.0, curl will prefer HTTP/2 for HTTPS, but it will still use HTTP/1.1 as the default for these operations. The client will employ HTTP/1.1 for HTTPS operations as well. However, if your system employs curl >= 7.62.0, curl will, by default, prioritise HTTP/2 over HTTP/1.1. In this case, the client will utilise HTTP/2 for most HTTPS operations and stick with HTTP/1.1 for others. Please note that this distinction is governed by the OneDrive platform, not our client. If you explicitly want to use HTTP/1.1, you can do so by using the `--force-http-11` flag or setting the configuration option `force_http_11 = "true"`. This will compel the application to exclusively use HTTP/1.1. Otherwise, all client operations will align with the curl default settings for your distribution. #### Known curl bugs that impact the use of this client | id | curl bug | fixed in curl version | |----|----------|-----------------------| | 1 | HTTP/2 support: Introduced HTTP/2 support, enabling multiplexed transfers over a single connection | 7.47.0 | | 2 | HTTP/2 issue: Resolved an issue where HTTP/2 connections were not properly reused, leading to unnecessary new connections. | 7.68.0 | | 3 | HTTP/2 issue: Addressed a race condition in HTTP/2 multiplexing that could lead to unexpected behaviour. | 7.74.0 | | 4 | HTTP/2 issue: Improved handling of HTTP/2 priority frames to ensure proper stream prioritisation. | 7.81.0 | | 5 | HTTP/2 issue: Fixed a bug where HTTP/2 connections were prematurely closed, resulting in incomplete data transfers. | 7.88.1 | | 6 | HTTP/2 issue: Resolved a problem with HTTP/2 frame handling that could cause data corruption during transfers. | 8.2.1 | | 7 | HTTP/2 issue: Corrected an issue where HTTP/2 streams were not properly closed, leading to potential memory leaks. | 8.5.0 | | 8 | HTTP/2 issue: Addressed a bug where HTTP/2 connections could hang under specific conditions, improving reliability. | 8.8.0 | | 9 | HTTP/2 issue: Improved handling of HTTP/2 connections to prevent unexpected stream resets and enhance stability. | 8.9.0 | | 10 | SIGPIPE issue: Resolved a problem where SIGPIPE signals were not properly handled, leading to unexpected behaviour. | 8.9.1 | | 11 | SIGPIPE issue: Addressed a SIGPIPE leak that occurred in certain cases starting with version 8.9.1 | 8.10.0 | | 12 | HTTP/2 issue: Stopped offering ALPN `http/1.1` for `http2-prior-knowledge` to ensure proper protocol negotiation. | 8.10.0 | | 13 | HTTP/2 issue: Improved handling of end-of-stream (EOS) and blocked states to prevent unexpected behaviour.| 8.11.0 | | 14 | OneDrive operation encountered an issue with libcurl reading the local SSL CA Certificates issue | 8.14.1 | #### Known curl versions with compatibility issues for this client | curl Version | distribution | curl bugs | |--------------|--------------|-----------| | 7.68.0 | Ubuntu 20.04 LTS (Focal Fossa) | 2,3,4,5,6,7,8,9,10,11,12,13 | | 7.74.0 | Debian 11 (Bullseye) | 4,5,6,7,8,9,10,11,12,13 | | 7.81.0 | Ubuntu 22.04 LTS (Jammy Jellyfish) | 5,6,7,8,9,10,11,12,13 | | 7.88.1 | Debian 12 (Bookworm) | 6,7,8,9,10,11,12,13 | | 8.2.1 | Alpine Linux 3.14 | 7,8,9,10,11,12,13 | | 8.5.0 | Alpine Linux 3.15, Ubuntu 24.04 LTS (Noble Numbat) | 8,9,10,11,12,13 | | 8.9.1 | Ubuntu 24.10 (Oracular Oriole) | 11,12,13 | | 8.10.0 | Alpine Linux 3.17 | 13 | | 8.13.0 | Various + Self Compiled | 14 | | 8.13.1 | Various + Self Compiled | 14 | | 8.14.0 | Various + Self Compiled | 14 | > [!IMPORTANT] > If your distribution provides one of these curl versions you must upgrade your curl version to the latest available, or get your distribution to provide a more modern version of curl. Refer to [curl releases](https://curl.se/docs/releases.html) for curl version information. > > If you are using one of the above curl versions, the following application message will be generated: > ```text > WARNING: Your curl/libcurl version (curl.version.number) has known HTTP/2 bugs that impact the use of this application. > Please report this to your distribution and request that they provide a newer curl version for your platform or upgrade this yourself. > Downgrading all application operations to use HTTP/1.1 to ensure maximum operational stability. > Please read https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#compatibility-with-curl for more information. > ``` > > The WARNING line will be sent to the GUI for notification purposes if notifications have been enabled. To avoid this message and/or the GUI notification your only have 2 options: > 1. Upgrade your curl version on your platform > 2. Configure the client to always downgrade client operations to HTTP/1.1 and use IPv4 only > > If you are unable to upgrade your version of curl, to always downgrade client operations to HTTP/1.1 you must add the following to your config file: > ```text > force_http_11 = "true" > ip_protocol_version = "1" > ``` > When these two options are applied to your application configuration, the following application message will be generated: > ```text > WARNING: Your curl/libcurl version (curl.version.number) has known operational bugs that impact the use of this application. > Please report this to your distribution and request that they provide a newer curl version for your platform or upgrade this yourself. > ``` > > The WARNING line will be now only be written to application logging output, no longer sending a GUI notification message. > [!IMPORTANT] > Outside of the above known broken curl versions, there are significant HTTP/2 bugs in all curl versions < 8.6.x that can lead to HTTP/2 errors such as `Error in the HTTP2 framing layer on handle` or `Stream error in the HTTP/2 framing layer on handle` > > The only options to resolve this issue are the following: > 1. Upgrade your curl version to the latest available, or get your distribution to provide a more modern version of curl. Refer to [curl releases](https://curl.se/docs/releases.html) for curl version information. > 2. Configure the client to only use HTTP/1.1 via the config option `--force-http-11` flag or set the configuration file option `force_http_11 = "true"` > [!IMPORTANT] > Outside of the above known broken curl versions, it has also been evidenced that curl has an internal DNS resolution bug that at random times will skip using IPv4 for DNS resolution and only uses IPv6 DNS resolution when the host system is configured to use IPv4 and IPv6 addressing. > > As a result of this internal curl resolution bug, if your system does not have an IPv6 DNS resolver, and/or does not have a valid IPv6 network path to Microsoft OneDrive, you may encounter these errors: > > * `A libcurl timeout has been triggered - data transfer too slow, no DNS resolution response, no server response` > * `Could not connect to server on handle ABC12DEF3456` > > The only options to resolve this issue are the following: > 1. Implement and/or ensure that IPv6 DNS resolution is possible on your system; allow IPv6 network connectivity between your system and Microsoft OneDrive > 2. Configure the client to only use IPv4 DNS resolution via setting the configuration option `ip_protocol_version = "1"` > [!IMPORTANT] > If you are using Debian 12 or Linux Mint Debian Edition (LMDE) 6, you can install the latest curl version from the respective backports repositories to address the bugs present in the default Debian 12 curl version. > [!CAUTION] > If you continue to use a curl/libcurl version with known HTTP/2 bugs the application will automatically downgrade HTTP operations to HTTP/1.1, however you will continue to experience application runtime issues such as randomly exiting for zero reason or incomplete download/upload of your data. ## First Steps ### Authorise the Application with Your Microsoft OneDrive Account Once you've installed the application, you'll need to authorise it using your Microsoft OneDrive Account. This can be done by simply running the application without any additional command switches. Please be aware that some organisations may require you to explicitly add this app to the [Microsoft MyApps portal](https://myapps.microsoft.com/). To add an approved app to your apps, click on the ellipsis in the top-right corner and select "Request new apps." On the next page, you can add this app. If it's not listed, you should make a request through your IT department. This client supports the following methods to authenticate the application with Microsoft OneDrive: * Supports interactive browser-based authentication using OAuth2 and a redirect URI * Supports seamless Single Sign-On (SSO) via Intune using the Microsoft Identity Device Broker D-Bus interface * Supports OAuth2 Device Authorisation Flow for Microsoft Entra ID accounts #### Interactive Authentication using OAuth2 and a redirect URI When you run the application for the first time, you'll be prompted to open a specific URL in your web browser. This URL takes you to the Microsoft login page, where you’ll sign in with your Microsoft Account and grant the application permission to access your files. After granting permission, your browser will redirect you to a blank page, or a page that displays this message: ![microsoft-auth-display-message](./images/microsoft-auth-display-message.png) This is expected behaviour. At this point, copy the full redirect URI shown in your browser's address bar and paste it into the terminal where prompted. **Example Terminal Session:** ```text user@hostname:~$ onedrive D-Bus message bus daemon is available; GUI notifications are now enabled Using IPv4 and IPv6 (if configured) for all network operations Attempting to contact Microsoft OneDrive Login Service Successfully reached Microsoft OneDrive Login Service Configuring Global Azure AD Endpoints Please authorise this application by visiting the following URL: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=d50ca740-c83f-4d1b-b616-12c519384f0c&scope=Files.ReadWrite%20Files.ReadWrite.All%20Sites.ReadWrite.All%20offline_access&response_type=code&prompt=login&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient After completing the authorisation in your browser, copy the full redirect URI (from the address bar) and paste it below. Paste redirect URI here: https://login.microsoftonline.com/common/oauth2/nativeclient?code= The application has been successfully authorised, but no extra command options have been specified. Please use 'onedrive --help' for further assistance in regards to running this application. user@hostname:~$ ``` **Interactive OAuth2 Authentication Process Illustrated:** ![initial_auth_url_access_redacted](./images/initial_auth_url_access_redacted.png) ![copy_redirect_uri_to_application](./images/authorise_client_before_copy_with_arrow.png) ![copy_redirect_uri_to_application_done](./images/authorise_client_after_paste_hashed_out.png) ![client_authorised](./images/authorise_client_now_authorised_hashed_out.png) > [!IMPORTANT] > Without additional input or configuration, the OneDrive Client for Linux will automatically adhere to default application settings during synchronisation processes with Microsoft OneDrive. > [!IMPORTANT] > **Handling a AADSTS70000 response** > > If you paste the redirect URI back into the CLI and receive: > `AADSTS70000: The provided value for the 'code' parameter is not valid.` > this is **not a client bug**. > > Microsoft authorisation codes are single-use and short-lived, so the code you pasted is no longer redeemable. > > **Common causes:** > * Browser extensions / privacy tools modifying the redirect URL (for example, ad-blockers or 'remove tracking parameters' features within browsers) > * Copying the wrong URL (ensure you copy from the browser address bar immediately after consent) > * Refreshing the page or reusing the same redirect URI (codes can only be redeemed once) > * Waiting too long before pasting the URL back > > **Remediation steps for AADSTS70000:** > 1. Re-run: `onedrive --reauth` > 2. Use a private/incognito browser session or a clean browser profile > 3. Temporarily disable URL-filtering/privacy extensions for the Microsoft login pages (uBlock Origin / ClearURLs / Brave Shields / similar), then retry #### Single Sign-On (SSO) via Intune using the Microsoft Identity Device Broker To use this method of authentication, you must add the following configuration to your 'config' file: ``` use_intune_sso = "true" ``` The application will check to ensure that Intune is operational and that the required dbus elements are available. Should these be available, the following will be displayed: ``` ... Client has been configured to use Intune SSO via Microsoft Identity Broker dbus session - checking usage criteria Intune SSO via Microsoft Identity Broker dbus session usage criteria met - will attempt to authenticate via Intune ... ``` > [!NOTE] > The installation and configuration of Intune for your platform is beyond the scope of this documentation. #### OAuth2 Device Authorisation Flow for Microsoft Entra ID accounts To use this method of authentication, you must add the following configuration to your 'config' file: ``` use_device_auth = "true" ``` You will be required to open a URL using a web browser, and enter the code that this application presents: ``` Configuring Global Azure AD Endpoints Authorise this application by visiting: https://microsoft.com/devicelogin Enter the following code when prompted: ABCDEFGHI This code expires at: 2025-Jun-02 15:27:30 ``` You will have ~15 minutes before the code expires. > [!IMPORTANT] > #### Limitation: OAuth2 Device Authorization Flow and Personal Microsoft Accounts > > While the OneDrive Client for Linux fully supports OAuth2 Device Authorisation Flow (`device_code` grant) for **Microsoft Entra ID (Work/School)** accounts, **Microsoft currently does not allow this flow to be used with personal Microsoft accounts (MSA)** unless the application is explicitly authorised by Microsoft. > > **Application Configuration Summary:** > > - `signInAudience`: `AzureADandPersonalMicrosoftAccount` > - `allowPublicClient`: `true` > - Uses Microsoft Identity Platform v2.0 endpoints (`/devicecode`, `/token`, etc.) > - Microsoft Graph scopes properly defined > > Despite this correct configuration, users signing in with a Personal Microsoft OneDrive account will see the following error: > > > **"The code you entered has expired. Get a new code from the device you're trying to sign in to and try again."** > > This occurs even if the code is entered immediately. Microsoft redirects the user to: > > ``` > https://login.live.com/ppsecure/post.srf?username=...... > ``` > > This behaviour confirms that Microsoft **blocks the `device_code` grant flow for MSA accounts** on unapproved (by Microsoft) applications. > > **Recommendation:** > If using a Personal Microsoft OneDrive account (e.g., @outlook.com or @hotmail.com), please complete authentication using the interactive authentication method detailed above. > > **Further Reading:** > 📚 [Microsoft Documentation — OAuth 2.0 device authorisation grant](https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-device-code) ### Display Your Applicable Runtime Configuration To verify the configuration that the application will use, use the following command: ```text onedrive --display-config ``` This command will display all the relevant runtime interpretations of the options and configurations you are using. An example output is as follows: ```text Reading configuration file: /home/user/.config/onedrive/config Configuration file successfully loaded onedrive version = vX.Y.Z-A-bcdefghi Config path = /home/user/.config/onedrive Config file found in config path = true Config option 'drive_id' = Config option 'sync_dir' = ~/OneDrive ... Config option 'webhook_enabled' = false ``` > [!IMPORTANT] > When using multiple OneDrive accounts, it's essential to always use the `--confdir` command followed by the appropriate configuration directory. This ensures that the specific configuration you intend to view is correctly displayed. ### Understanding OneDrive Client for Linux Operational Modes There are two modes of operation when using the client: 1. Standalone sync mode that performs a single sync action against Microsoft OneDrive. 2. Ongoing sync mode that continuously syncs your data with Microsoft OneDrive. > [!TIP] > To understand further the client operational modes and how the client operates, please review the [client architecture](client-architecture.md) documentation. > [!IMPORTANT] > The default setting for the OneDrive Client on Linux will sync all data from your Microsoft OneDrive account to your local device. To avoid this and select specific items for synchronisation, you should explore setting up 'Client Side Filtering' rules. This will help you manage and specify what exactly gets synced with your Microsoft OneDrive account. #### Standalone Synchronisation Operational Mode (Standalone Mode) This method of use can be employed by issuing the following option to the client: ```text onedrive --sync ``` For simplicity, this can be shortened to the following: ```text onedrive -s ``` #### Ongoing Synchronisation Operational Mode (Monitor Mode) This method of use can be utilised by issuing the following option to the client: ```text onedrive --monitor ``` For simplicity, this can be shortened to the following: ```text onedrive -m ``` > [!NOTE] > This method of use is used when enabling a systemd service to run the application in the background. Two common errors can occur when using monitor mode: * Initialisation failure * Unable to add a new inotify watch Both of these errors are local environment issues, where the following system variables need to be increased as the current system values are potentially too low: * Open Files Soft limit (current session) * Open Files Hard limit (current session) * `fs.inotify.max_user_watches` To determine what the existing values are on your system, use the following commands: **open files** ```text ulimit -Sn ulimit -Hn ``` **inotify watches** ```text sysctl fs.inotify.max_user_watches ``` Alternatively, when running the client with increased verbosity (see below), the client will display what the current configured system maximum values are: ```text ... All application operations will be performed in the configured local 'sync_dir' directory: /home/alex/OneDrive OneDrive synchronisation interval (seconds): 300 Maximum allowed open files (soft): 1024 Maximum allowed open files (hard): 262144 Maximum allowed inotify user watches: 29463 Initialising filesystem inotify monitoring ... ... ``` To determine what value to change to, you need to count all the files and folders in your configured 'sync_dir' location: ```text cd /path/to/your/sync/dir ls -laR | wc -l ``` To make a change to these variables using your file and folder count, use the following process: **open files** You can increase the limits for your current shell session temporarily using: ``` ulimit -n ``` Refer to your distribution documentation to make the change persistent across reboots and sessions. > [!NOTE] > systemd overrides these values for user sessions and services. If you are making a system wide change that is persistent across reboots and sessions you will also have to modify your systemd service files in the following manner: > ``` > [Service] > LimitNOFILE= > ``` > Post the modification of systemd service files you will need to reload and restart the services. **inotify watches** ```text sudo sysctl fs.inotify.max_user_watches= ``` Once these values are changed, you will need to restart your client so that the new values are detected and used. To make these changes permanent on your system, refer to your OS reference documentation. ## Using the OneDrive Client for Linux to synchronise your data ### Client Documentation The following documents provide detailed guidance on installing, configuring, and using the OneDrive Client for Linux: * **[advanced-usage.md](https://github.com/abraunegg/onedrive/blob/master/docs/advanced-usage.md)** Instructions for advanced configurations, including multiple account setups, Docker usage, dual-boot scenarios, and syncing to mounted directories. * **[application-config-options.md](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md)** Comprehensive list and explanation of all configuration file and command-line options available in the client. * **[application-security.md](https://github.com/abraunegg/onedrive/blob/master/docs/application-security.md)** Details on security considerations and practices related to the OneDrive client. * **[business-shared-items.md](https://github.com/abraunegg/onedrive/blob/master/docs/business-shared-items.md)** Instructions on syncing shared items in OneDrive for Business accounts. * **[client-architecture.md](https://github.com/abraunegg/onedrive/blob/master/docs/client-architecture.md)** Overview of the client's architecture and design principles. * **[docker.md](https://github.com/abraunegg/onedrive/blob/master/docs/docker.md)** Instructions for running the OneDrive client within Docker containers. * **[known-issues.md](https://github.com/abraunegg/onedrive/blob/master/docs/known-issues.md)** List of known issues and limitations of the OneDrive client. * **[national-cloud-deployments.md](https://github.com/abraunegg/onedrive/blob/master/docs/national-cloud-deployments.md)** Information on deploying the client in national cloud environments. * **[podman.md](https://github.com/abraunegg/onedrive/blob/master/docs/podman.md)** Guide for running the OneDrive client using Podman containers. * **[sharepoint-libraries.md](https://github.com/abraunegg/onedrive/blob/master/docs/sharepoint-libraries.md)** Instructions for syncing SharePoint document libraries. * **[ubuntu-package-install.md](https://github.com/abraunegg/onedrive/blob/master/docs/ubuntu-package-install.md)** Specific instructions for installing the client on Ubuntu systems. * **[webhooks.md](https://github.com/abraunegg/onedrive/blob/master/docs/webhooks.md)** Information on configuring and using webhooks with the OneDrive client. Further documentation not listed above can be found here: https://github.com/abraunegg/onedrive/blob/master/docs/ Please read these additional references to assist you with installing, configuring, and using the OneDrive Client for Linux. ### Increasing application logging level When running a sync (`--sync`) or using monitor mode (`--monitor`), it may be desirable to see additional information regarding the progress and operation of the client. The client supports four levels of logging output: #### 1. Normal (default) Only essential information is shown — suitable for standard usage without additional output. #### 2. Verbose Enables general status and progress information. Use: ```text onedrive --sync --verbose ``` or its short form: ```text onedrive -s -v ``` #### 3. Debug Logging Enables detailed internal logging useful for diagnosing issues. This is activated by specifying the `--verbose` flag twice: ```text onedrive --sync --verbose --verbose ``` #### 4. HTTPS Debug Logging Enables full debug logging including HTTPS request/response information. This is typically only needed for advanced debugging of API or network issues. Activate with: ```text onedrive --sync --verbose --verbose --debug-https ``` > [!IMPORTANT] > When raising a bug report or attempting to understand unexpected behaviour, it is recommended to enable debug logging using `--verbose --verbose`. > > Only use `--debug-https` if explicitly requested or required, as it may expose sensitive information in logs. ### Using 'Client Side Filtering' rules to determine what should be synced with Microsoft OneDrive Client Side Filtering in the context of the OneDrive Client for Linux refers to user-configured rules that determine what files and directories the client should upload or download from Microsoft OneDrive. These rules are crucial for optimising synchronisation, especially when dealing with large numbers of files or specific file types. The OneDrive Client for Linux offers several configuration options to facilitate this: * **check_nosync:** This option allows you to create a `.nosync` file in local directories, to skip that directory from being included in sync operations. * **skip_dir:** This option allows the user to specify directories that should not be synchronised with OneDrive. It's particularly useful for omitting large or irrelevant directories from the sync process. * **skip_dotfiles:** Dotfiles, usually configuration files or scripts, can be excluded from the sync. This is useful for users who prefer to keep these files local. * **skip_file:** Specific files can be excluded from synchronisation using this option. It provides flexibility in selecting which files are essential for cloud storage. * **skip_size:** Skip files greater than this specific size (in MB) * **skip_symlinks:** Symlinks often point to files outside the OneDrive directory or to locations that are not relevant for cloud storage. This option prevents them from being included in the sync. Additionally, the OneDrive Client for Linux allows the implementation of Client Side Filtering rules through a 'sync_list' file. This file explicitly states which directories or files should be included in the synchronisation. By default, any item not listed in the 'sync_list' file is excluded. This method offers a more granular approach to synchronisation, ensuring that only the necessary data is transferred to and from Microsoft OneDrive. These configurable options and the 'sync_list' file provide users with the flexibility to tailor the synchronisation process to their specific needs, conserving bandwidth and storage space while ensuring that important files are always backed up and accessible. > [!IMPORTANT] > Client Side Filtering rules are generally processed in the following order: > 1. 'check_nosync' > 2. 'skip_dotfiles' > 3. 'skip_symlinks' > 4. 'skip_dir' > 5. 'skip_file' > 6. 'sync_list' > 7. 'skip_size' > > This can be best illustrated below: > > ![Client Side Filtering Processing Order](./puml/client_side_filtering_processing_order.png) > > For further details please review the [client architecture](client-architecture.md) documentation. > [!IMPORTANT] > After changing any Client Side Filtering rule, you must perform a full re-synchronisation by using `--resync`. ### Testing your configuration You can test your configuration by utilising the `--dry-run` CLI option. No files will be downloaded, uploaded, or removed; however, the application will display what 'would' have occurred. For example: ```text onedrive --sync --verbose --dry-run Reading configuration file: /home/user/.config/onedrive/config Configuration file successfully loaded Using 'user' Config Dir: /home/user/.config/onedrive DRY-RUN Configured. Output below shows what 'would' have occurred. DRY-RUN: Copying items.sqlite3 to items-dryrun.sqlite3 to use for dry run operations DRY RUN: Not creating backup config file as --dry-run has been used DRY RUN: Not updating hash files as --dry-run has been used Checking Application Version ... Attempting to initialise the OneDrive API ... Configuring Global Azure AD Endpoints The OneDrive API was initialised successfully Opening the item database ... Sync Engine Initialised with new Onedrive API instance Application version: vX.Y.Z-A-bcdefghi Account Type: Default Drive ID: Default Root ID: Remaining Free Space: 1058488129 KB All application operations will be performed in: /home/user/OneDrive Fetching items from the OneDrive API for Drive ID: .. ... Performing a database consistency and integrity check on locally stored data ... Processing DB entries for this Drive ID: Processing ~/OneDrive The directory has not changed ... Scanning local filesystem '~/OneDrive' for new data to upload ... ... Performing a final true-up scan of online data from Microsoft OneDrive Fetching items from the OneDrive API for Drive ID: .. Sync with Microsoft OneDrive is complete ``` ### Performing a sync with Microsoft OneDrive By default, all files are downloaded in `~/OneDrive`. This download location is controlled by the 'sync_dir' config option. After authorising the application, a sync of your data can be performed by running: ```text onedrive --sync ``` This will synchronise files from your Microsoft OneDrive account to your `~/OneDrive` local directory or to your specified 'sync_dir' location. > [!TIP] > #### Specifying the 'source of truth' for your synchronisation with Microsoft OneDrive > By default, the OneDrive Client for Linux treats your online OneDrive data as the source of truth. This means that when determining which version of a file should be trusted as authoritative, the client prioritises the state of files stored online over local copies. > > In some workflows, you may prefer to treat your local files as the primary reference instead — for example, when you regularly make changes locally and want those to take precedence during conflict resolution. > > To change this behaviour, enable the local-first mode by setting the configuration option in your `config` file: > ```text > local_first = "true" > ``` > or by using the command-line argument at runtime: > ```text > onedrive --sync --local-first > ``` > > When this option is enabled, the client will prioritise local data as the source of truth when comparing file differences and resolving synchronisation conflicts. > ### Performing a single directory synchronisation with Microsoft OneDrive In some cases, it may be desirable to synchronise a single directory under ~/OneDrive without having to change your client configuration. To do this, use the following command: ```text onedrive --sync --single-directory '' ``` > [!TIP] > If the full path is `~/OneDrive/mydir`, the command would be `onedrive --sync --single-directory 'mydir'` ### Performing a 'one-way' download synchronisation with Microsoft OneDrive In some cases, it may be desirable to 'download only' from Microsoft OneDrive. To do this, use the following command: ```text onedrive --sync --download-only ``` This will download all the content from Microsoft OneDrive to your `~/OneDrive` location. Any files that are deleted online will remain locally and will not be removed. > [!IMPORTANT] > There is an application functionality change between v2.4.x and v.2.5x when using this option. > > In prior v2.4.x releases, online deletes were automatically processed, thus automatically deleting local files that were deleted online, however there was zero way to perform a `--download-only` operation to archive the online state. > > In v2.5.x and above, when using `--download-only` the default is that all files will remain locally as an archive of your online data rather than being deleted locally if deleted online. > [!TIP] > If you have the requirement to clean up local files that have been removed online, use the following command: > ```text > onedrive --sync --download-only --cleanup-local-files > ``` ### Performing a 'one-way' upload synchronisation with Microsoft OneDrive In certain scenarios, you might need to perform an 'upload only' operation to Microsoft OneDrive. This means that you'll be uploading data to OneDrive, but not synchronising any changes or additions made elsewhere. Use this command to initiate an upload-only synchronisation: ```text onedrive --sync --upload-only ``` > [!IMPORTANT] > - The 'upload only' mode operates independently of OneDrive's online content. It doesn't check or sync with what's already stored on OneDrive. It only uploads data from the local client. > - If a local file or folder that was previously synchronised with Microsoft OneDrive is now missing locally, it will be deleted from OneDrive during this operation. > [!TIP] > If you have the requirement to ensure that all data on Microsoft OneDrive remains intact (e.g., preventing deletion of items on OneDrive if they're deleted locally), use this command instead: > ```text > onedrive --sync --upload-only --no-remote-delete > ``` > [!IMPORTANT] > - `--upload-only`: This command will only upload local changes to OneDrive. These changes can include additions, modifications, moves, and deletions of files and folders. > - `--no-remote-delete`: Adding this command prevents the deletion of any items on OneDrive, even if they're deleted locally. This creates a one-way archive on OneDrive where files are only added and never removed. ### Performing a selective synchronisation via 'sync_list' file Selective synchronisation allows you to sync only specific files and directories. To enable selective synchronisation, create a file named `sync_list` in your application configuration directory (default is `~/.config/onedrive`). > [!IMPORTANT] > Important points to understand before using 'sync_list'. > * 'sync_list' excludes _everything_ by default on OneDrive. > * 'sync_list' follows an _"exclude overrides include"_ rule, and requires **explicit inclusion**. > * Order specific exclusions before inclusions, so that anything _specifically included_ is included. > * How and where you place your `/` matters for excludes and includes in subdirectories. Each line of the 'sync_list' file represents a relative path from your `sync_dir`. All files and directories not matching any line of the file will be skipped during all operations. > [!CAUTION] > Rules without slashes (`Codes`, `Work`, `Backup`, `notes.txt`, etc.) are the most expensive form of `sync_list` rule as this instructs the client to scan every folder online & local to find a match. As a result, these types of rules can cause: > * High CPU usage > * High disk or network activity > * Increased fan usage (especially on laptops) > > If you want best performance, always prefer fully-qualified or path-scoped 'sync_list' rules. Avoid generic includes unless absolutely necessary. #### Example 'sync_list' rules ```text # ====================================================================== # Example sync_list # ====================================================================== # IMPORTANT: # - 'sync_list' EXCLUDES EVERYTHING by default. # - Exclusions come first. # - Inclusions follow. # # Matching behaviour: # - Rules WITHOUT a slash (e.g., "Backup", "notes.txt") match ANYWHERE. # ⚠️ These rules force exhaustive scanning of ALL online and local folders. # ⚠️ They are computationally expensive. # # - Rules with a leading "/" apply ONLY to the OneDrive ROOT. # # - Rules with a trailing "/" match DIRECTORIES only. # # Wildcards and globbing: # - "*" matches any characters within a single path segment. # - "**" matches directories RECURSIVELY across ANY depth. # ====================================================================== # ---------------------------------------------------------------------- # EXCLUSIONS (ALWAYS PUT THESE FIRST) # ---------------------------------------------------------------------- # Exclude temporary folders inside ANY Documents folder (any level) !Documents/temp* # Exclude Secret_data ONLY in OneDrive root !/Secret_data/* # ---------------------------------------------------------------------- # Modern development / programming exclusions # (Common cache/build folders used by many languages & tools) # ---------------------------------------------------------------------- # Python virtual environments !venv/* !.venv/* !__pycache__/* # Node.js / JavaScript build directories !node_modules/* !.next/* # Java & Kotlin build caches !build/kotlin/* !.kotlin/* # Gradle build system cache !.gradle/* # JetBrains IDE caches !.idea/libraries/* !.idea/caches/* # Generic runtime caches !.cache/* # ---------------------------------------------------------------------- # INCLUSIONS (WHAT YOU *DO* WANT TO SYNC) # ---------------------------------------------------------------------- # Include the Backup folder OR any file/folder named "Backup" ANYWHERE. # ⚠️ High-cost rule — causes full tree scanning. Backup # Include Documents directory ANYWHERE # ⚠️ High-cost rule — causes full tree scanning. Documents/ # Include all PDF files inside any Documents folder # ⚠️ High-cost rule — causes full tree scanning. Documents/*.pdf # Include one specific file, if present inside ANY Documents folder # ⚠️ High-cost rule — causes full tree scanning. Documents/latest_report.docx # Include the /Backup/ folder ONLY in the OneDrive root /Backup/ # Include Blender ONLY if in root /Blender # ---------------------------------------------------------------------- # PROJECT / DEVELOPMENT STRUCTURES WITH WILDCARDS & GLOBBING # ---------------------------------------------------------------------- # Include any folder or file beginning with "Project" inside ANY Work/ folder # ⚠️ High-cost rule — causes full tree scanning. Work/Project* # Include the 'Blog' directory — and ONLY that specific folder # . # ├── Parent # │   ├── Blog # │   │   ├── random_files # │   │   │   ├── CZ9aZRM7U1j7pM21fH0MfP2gywlX7bqW # │   │   │   └── k4GptfTBE2z2meRFqjf54tnvSXcXe30Y # │   │   └── random_images # │   │   ├── cAuQMfX7qsMIOmzyQYdELikZwsXeCYsL # │   │   └── GqjZuo7UBB0qjYM2WUcZXOvToAhCQ29M # │   └── other_stuffs # /Parent/Blog/* # Include Android build directories located ANYWHERE inside ANY project !/Programming/Projects/Android/**/build/* # Include Android NDK /.cxx build trees ANYWHERE inside ANY project !/Programming/Projects/Android/**/.cxx/* # Include Web build output directories across ANY nested depth !/Programming/Projects/Web/**/build/* # Include the entire /Programming directory from OneDrive root /Programming # ---------------------------------------------------------------------- # FILE-BY-NAME MATCHING ANYWHERE # ---------------------------------------------------------------------- # Match all files named exactly "notes.txt" ANYWHERE # ⚠️ High-cost rule — causes full tree scanning. notes.txt # ---------------------------------------------------------------------- # DIRECTORIES WITH SPACES # ---------------------------------------------------------------------- # - There is zero requirement to escape space sequences within the 'sync_list' file # Include directories under ANY Pictures folder # ⚠️ High-cost rule — causes full tree scanning. Pictures/Camera Roll Pictures/Saved Pictures # Include 'Camera Roll' and all files / folders /Pictures/Camera Roll/* # Include 'Saved Pictures' and all files / folders /Pictures/Saved Pictures/* # ---------------------------------------------------------------------- # GENERIC NAME MATCHES (⚠️ VERY EXPENSIVE) # These match ANY file or folder with that name ANYWHERE in OneDrive. # They cause full, exhaustive scanning of ALL online and local folders. # ---------------------------------------------------------------------- Cinema Soc Codes Textbooks Year 2 Documents Pictures Music ``` The following are supported for pattern matching and exclusion rules: * Use the `*` to wildcard select any characters to match for the item to be included * Use either `!` or `-` characters at the start of the line to exclude an otherwise included item > [!IMPORTANT] > After changing the sync_list, you must perform a full re-synchronisation by adding `--resync` to your existing command line - for example: `onedrive --sync --resync` > [!TIP] > When enabling the use of 'sync_list,' utilise the `--display-config` option to validate that your configuration will be used by the application, and test your configuration by adding `--dry-run` to ensure the client will operate as per your requirement. > [!TIP] > In some circumstances, it may be required to sync all the individual files within the 'sync_dir' root, but due to frequent name change / addition / deletion of these files, it is not desirable to constantly change the 'sync_list' file to include / exclude these files and force a resync. To assist with this, enable the following in your configuration file: > ```text > sync_root_files = "true" > ``` > This will tell the application to sync any file that it finds in your 'sync_dir' root by default, negating the need to constantly update your 'sync_list' file. ### Performing a --resync A `--resync` operation instructs the client to delete its local state database and fully rebuild it from the current online OneDrive contents. This is a powerful recovery and re-alignment action that should be used **sparingly** and **with care**. > [!IMPORTANT] > **Do not use --resync as part of normal or routine operation.** > > A `--resync` is **not** a “refresh” or “force sync” button. It is a destructive recovery action that discards the client’s local sync history and forces a rebuild based solely on the current online OneDrive state. > > Habitually using `--resync` has several negative impacts: > * It removes the historical sync context the client uses to safely resolve conflicts. > * It can cause unnecessary uploads, downloads, and renames. > * It increases the chance of triggering rate-limiting (HTTP 429 responses) from the Microsoft Graph API. > * It can mask underlying configuration or permission issues that should be properly diagnosed instead. > > If you are unsure whether the client is in sync, do not run `--resync`. Instead, use: >``` > onedrive --display-sync-status >``` > Only use `--resync` when the client explicitly requests it or when a documented configuration change requires it. #### When a --resync is required You **must** perform a `--resync` after modifying any of the following configuration items: * `check_nosync` * `drive_id` * `sync_dir` * `skip_file` * `skip_dir` * `skip_dotfiles` * `skip_size` * `skip_symlinks` * `sync_business_shared_items` * Creating, modifying, or deleting the `sync_list` file You may also use `--resync` if you believe the local state has become inconsistent with online OneDrive state. However, if you only want to check the current sync status, run: ```text onedrive --display-sync-status ``` This shows whether you are up-to-date without requiring a resynchronisation. #### What happens when you use `--resync` When invoking `--resync`, the client displays one of the following prompts depending on the client version. #### v2.5.9 and below ```text The usage of --resync will delete your local 'onedrive' client state, thus no record of your current 'sync status' will exist. This has the potential to overwrite local versions of files with perhaps older versions of documents downloaded from OneDrive, resulting in local data loss. If in doubt, backup your local data before using --resync Are you sure you wish to proceed with --resync? [Y/N] ``` #### v2.5.10 and above ```text WARNING: You have asked the client to perform a --resync operation. This operation will delete the client’s local state database and rebuild it entirely from the current online OneDrive state. Because the previous sync state will no longer be available, the following may occur: * Local files that also exist in OneDrive may have local changes overwritten by the cloud version if a conflict cannot be safely resolved. * Local files may be renamed or duplicated locally as part of conflict resolution and data-preservation handling. * The initial synchronisation pass may involve a large number of file uploads and downloads. * The increased activity against the Microsoft Graph API may trigger HTTP 429 (throttling) responses during the synchronisation process. For safest operation: * Ensure you have a current backup of your sync_dir. * Run this command first with --dry-run to confirm all planned actions. * Enable 'use_recycle_bin' so that online deletion events from OneDrive are moved to your system Trash rather than deleted from your local disk. If in doubt, stop now and back up your local data before continuing. Are you sure you wish to proceed with --resync? [Y/N] ``` You must press `Y` or `y` to continue with `--resync` action. Any other entry will exit the application. #### Understanding the --resync risks and behaviour A `--resync` **does not delete local-only files**. When a file exists locally but not in OneDrive, and is not excluded via a `sync_list` rule, it is treated as **new local content** and will be uploaded during the resynchronisation process. Local deletion of such files when using `--resync` only occurs when using the explicit local data destructive modes such as: ```text --download-only --cleanup-local-files ``` The risks associated with `--resync` stem entirely from the loss of the local historic state: * The client no longer knows which side previously held the authoritative version of your data. * Conflict handling still protects data using safe-backup mechanisms, but may result in renamed or duplicated files. * Upload and download volumes may spike significantly. * Increased calls to the Microsoft Graph API may result in temporary throttling (HTTP 429 responses). This makes it essential that users **verify actions with `--dry-run`** and **maintain proper backups**. #### Best-practice guidance when using --resync 1. Always back up your data. This client is **not** a backup system. Ensure your `sync_dir` is protected with real backup tooling such as: - rsnapshot - borg - restic - Timeshift - ZFS or Btrfs snapshots 2. Use `--dry-run` before a real `--resync` Allows you to preview all intended changes without modifying your filesystem. 3. Enable the Recycle Bin feature Set `use_recycle_bin = "true"` in your application configuration. When enabled: - Online deletions received from OneDrive via the Graph API are moved to the FreeDesktop.org-compliant system Trash rather than being permanently deleted from your disk. 4. Avoid using `--resync` unnecessarily Only use it: - When the client explicitly requests it, or - When you’ve confirmed, via logs or sync status, that the local state has become invalid > [!CAUTION] > Avoid configuring `--resync` as a default startup option. #### Automated environments If you **fully understand the implications** and are operating in a scripted or automated environment, you may bypass the confirmation prompt by adding: ```bash --resync-auth ``` This should **only** be used when automation requires non-interactive operation and robust backups are in place. ### Performing a --force-sync without a --resync or changing your configuration In some cases and situations, you may have configured the application to skip certain files and folders using 'skip_file' and 'skip_dir' configuration. You then may have a requirement to actually sync one of these items, but do not wish to modify your configuration, nor perform an entire `--resync` twice. The `--force-sync` option allows you to sync a specific directory, ignoring your 'skip_file' and 'skip_dir' configuration and negating the requirement to perform a `--resync`. To use this option, you must run the application manually in the following manner: ```text onedrive --sync --single-directory '' --force-sync ``` When using `--force-sync`, you'll encounter the following warning and advice: ```text WARNING: Overriding application configuration to use application defaults for skip_dir and skip_file due to --sync --single-directory --force-sync being used Using --force-sync will reconfigure the application to use defaults. This may have unknown future impacts. By proceeding with this option, you accept any impacts, including potential data loss resulting from using --force-sync. Are you sure you want to proceed with --force-sync [Y/N] ``` To proceed with `--force-sync`, you must type 'y' or 'Y' to allow the application to continue. ### Enabling the Client Activity Log When running onedrive, all actions can be logged to a separate log file. This can be enabled by using the `--enable-logging` flag or by adding `enable_logging = "true"` to your 'config' file. By default, log files will be written to `/var/log/onedrive/` and will be in the format of `%username%.onedrive.log`, where `%username%` represents the user who ran the client to allow easy sorting of user to client activity log. > [!NOTE] > You will need to ensure the existence of this directory and that your user has the applicable permissions to write to this directory; otherwise, the following error message will be printed: > ```text > ERROR: Unable to access /var/log/onedrive > ERROR: Please manually create '/var/log/onedrive' and set appropriate permissions to allow write access > ERROR: The requested client activity log will instead be located in your user's home directory > ``` On many systems, ensuring that the log directory exists can be achieved by performing the following: ```text sudo mkdir /var/log/onedrive sudo chown root:users /var/log/onedrive sudo chmod 0775 /var/log/onedrive ``` Additionally, you need to ensure that your user account is part of the 'users' group: ``` cat /etc/group | grep users ``` If your user is not part of this group, then you need to add your user to this group: ``` sudo usermod -a -G users ``` If you need to make a group modification, you will need to 'logout' of all sessions / SSH sessions to log in again to have the new group access applied. If the client is unable to write the client activity log, the following error message will be printed: ```text ERROR: Unable to write the activity log to /var/log/onedrive/%username%.onedrive.log ERROR: Please set appropriate permissions to allow write access to the logging directory for your user account ERROR: The requested client activity log will instead be located in your user's home directory ``` If you receive this error message, you will need to diagnose why your system cannot write to the specified file location. #### Client Activity Log Example: An example of a client activity log for the command `onedrive --sync --enable-logging` is below: ```text 2023-Sep-27 08:16:00.1128806 Configuring Global Azure AD Endpoints 2023-Sep-27 08:16:00.1160620 Sync Engine Initialised with new Onedrive API instance 2023-Sep-27 08:16:00.5227122 All application operations will be performed in: /home/user/OneDrive 2023-Sep-27 08:16:00.5227977 Fetching items from the OneDrive API for Drive ID: 2023-Sep-27 08:16:00.7780979 Processing changes and items received from Microsoft OneDrive ... 2023-Sep-27 08:16:00.7781548 Performing a database consistency and integrity check on locally stored data ... 2023-Sep-27 08:16:00.7785889 Scanning the local file system '~/OneDrive' for new data to upload ... 2023-Sep-27 08:16:00.7813710 Performing a final true-up scan of online data from Microsoft OneDrive 2023-Sep-27 08:16:00.7814668 Fetching items from the OneDrive API for Drive ID: 2023-Sep-27 08:16:01.0141776 Processing changes and items received from Microsoft OneDrive ... 2023-Sep-27 08:16:01.0142454 Sync with Microsoft OneDrive is complete ``` An example of a client activity log for the command `onedrive --sync --verbose --enable-logging` is below: ```text 2023-Sep-27 08:20:05.4600464 Checking Application Version ... 2023-Sep-27 08:20:05.5235017 Attempting to initialise the OneDrive API ... 2023-Sep-27 08:20:05.5237207 Configuring Global Azure AD Endpoints 2023-Sep-27 08:20:05.5238087 The OneDrive API was initialised successfully 2023-Sep-27 08:20:05.5238536 Opening the item database ... 2023-Sep-27 08:20:05.5270612 Sync Engine Initialised with new Onedrive API instance 2023-Sep-27 08:20:05.9226535 Application version: vX.Y.Z-A-bcdefghi 2023-Sep-27 08:20:05.9227079 Account Type: 2023-Sep-27 08:20:05.9227360 Default Drive ID: 2023-Sep-27 08:20:05.9227550 Default Root ID: 2023-Sep-27 08:20:05.9227862 Remaining Free Space: 2023-Sep-27 08:20:05.9228296 All application operations will be performed in: /home/user/OneDrive 2023-Sep-27 08:20:05.9228989 Fetching items from the OneDrive API for Drive ID: 2023-Sep-27 08:20:06.2076569 Performing a database consistency and integrity check on locally stored data ... 2023-Sep-27 08:20:06.2077121 Processing DB entries for this Drive ID: 2023-Sep-27 08:20:06.2078408 Processing ~/OneDrive 2023-Sep-27 08:20:06.2078739 The directory has not changed 2023-Sep-27 08:20:06.2079783 Processing Attachments 2023-Sep-27 08:20:06.2080071 The directory has not changed 2023-Sep-27 08:20:06.2081585 Processing Attachments/file.docx 2023-Sep-27 08:20:06.2082079 The file has not changed 2023-Sep-27 08:20:06.2082760 Processing Documents 2023-Sep-27 08:20:06.2083225 The directory has not changed 2023-Sep-27 08:20:06.2084284 Processing Documents/file.log 2023-Sep-27 08:20:06.2084886 The file has not changed 2023-Sep-27 08:20:06.2085150 Scanning the local file system '~/OneDrive' for new data to upload ... 2023-Sep-27 08:20:06.2087133 Skipping item - excluded by sync_list config: ./random_25k_files 2023-Sep-27 08:20:06.2116235 Performing a final true-up scan of online data from Microsoft OneDrive 2023-Sep-27 08:20:06.2117190 Fetching items from the OneDrive API for Drive ID: 2023-Sep-27 08:20:06.5049743 Sync with Microsoft OneDrive is complete ``` #### Client Activity Log Differences Despite application logging being enabled as early as possible, the following log entries will be missing from the client activity log when compared to console output: **No user configuration file:** ```text No user or system config file found, using application defaults Using 'user' configuration path for application state data: /home/user/.config/onedrive Using the following path to store the runtime application log: /var/log/onedrive ``` **User configuration file:** ```text Reading configuration file: /home/user/.config/onedrive/config Configuration file successfully loaded Using 'user' configuration path for application state data: /home/user/.config/onedrive Using the following path to store the runtime application log: /var/log/onedrive ``` ### Display Manager Integration Modern desktop environments such as GNOME and KDE Plasma provide graphical file managers — Nautilus (GNOME Files) and Dolphin, respectively — to help users navigate their local and remote storage. #### What “Display Manager Integration” means Display Manager Integration refers to an ability to integrate your configured Microsoft OneDrive synchronisation directory (`sync_dir`) with the desktop’s file manager environment. Depending on the platform and desktop environment, this may include: 1. **Sidebar registration** — Adding the OneDrive folder as a “special place” within the sidebar of Nautilus (GNOME) or Dolphin (KDE), providing easy access without manual navigation. 2. **Custom folder icon** — Applying a dedicated OneDrive icon to visually distinguish the synchronised directory within the file manager. 3. **Context-menu extensions** — Adding right-click actions such as “Upload to OneDrive” or “Share via OneDrive” directly inside Nautilus or Dolphin. 4. **File overlay badges** — Displaying icons (check-marks, sync arrows, or cloud symbols) to represent file synchronisation state. 5. **System tray or application indicator** — Presenting sync status, pause/resume controls, or notifications via a tray icon. #### What display manager integration is available in the OneDrive Client for Linux The OneDrive Client for Linux currently supports the following integration features: 1. **Sidebar registration** — The client automatically registers the OneDrive folder as a “special place” within the sidebar of Nautilus (GNOME) or Dolphin (KDE). 2. **Custom folder icon** — The client applies a OneDrive-specific icon to the synchronisation directory where supported by the installed icon theme. Sidebar registration and custom folder icon behaviour is controlled by the configuration option: ```text display_manager_integration = "true" ``` When enabled, the client detects the active desktop session and applies the corresponding integration automatically when the client is running in `--monitor` mode only. > [!NOTE] > Display Manager Integration remains active only while the OneDrive client or its systemd service is running. If the client stops or the service is stopped, the desktop integration is automatically cleared. It is re-applied the next time the client starts. #### Fedora (GNOME) Display Manager Integration Example ![fedora_integration](./images/fedora_integration.png) #### Fedora (KDE) Display Manager Integration Example ![fedora_kde_integration](./images/fedora_kde_integration.png) #### Ubuntu Display Manager Integration Example ![ubuntu_integration](./images/ubuntu_integration.png) #### Kubuntu Display Manager Integration Example ![kubuntu_integration](./images/kubuntu_integration.png) Additionally, the following display manager integrations are independent from the above configuration specification: 1. **GUI Notifications** — The client (when compiled with `--enable-notifications`) will send notifications to the GUI when important events occur. 2. **Recycle Bin** — When `use_recycle_bin = "true"` is enabled, the client uses the FreeDesktop.org Trash Specification–compliant recycle bin for any online deletions that are processed locally. This capability can be utilised even when no GUI is available. #### What about context menu integration? Context-menu integration is a desktop-specific capability, not part of the core OneDrive Client. It can be achieved through desktop-provided extension mechanisms: 1. **Shell-script bridge** — A simple shell script can be registered as a KDE ServiceMenu or a GNOME Nautilus Script to trigger local actions (for example, creating a symbolic link in `~/OneDrive` to upload a file). 2. **Python + Nautilus API (GNOME)** — Implemented via nautilus-python bindings by registering a subclass of `Nautilus.MenuProvider`. 3. **Qt/KIO Plugins (KDE)** — Implemented using C++ or declarative .desktop ServiceMenu definitions under `/usr/share/kservices5/ServiceMenus/`. These methods are optional and operate independently of the core OneDrive Client. They can be used by advanced users or system integrators to provide additional right-click functionality. #### What about file overlay badges? File overlay badges are typically associated with Microsoft’s Files-On-Demand feature, which allows selective file downloads and visual state indicators (online-only, available offline, etc.). Because Files-On-Demand is currently a feature request for this client, overlay badges are not implemented and remain out of scope for now. #### What about a system tray or application indicator? While the core OneDrive Client for Linux does not include its own tray icon or GUI dashboard, the community provides complementary tools that plug into it — exposing sync status, pause/resume controls, tray menus, and GUI configuration front-ends. Below are two popular options: **1. OneDriveGUI** - https://github.com/bpozdena/OneDriveGUI * A full-featured graphical user interface built for the OneDrive Linux client. * Key features include: multi-account support, asynchronous real-time monitoring of multiple OneDrive profiles, a setup wizard for profile creation/import, automatic sync on GUI startup, and GUI-based login. * Includes tray icon support when the desktop environment allows it. * Intended to simplify one-click configuration of the CLI client, help users visualise current operations (uploads/downloads), and manage advanced features such as SharePoint libraries and multiple profiles. **2. onedrive_tray** - https://github.com/DanielBorgesOliveira/onedrive_tray * A lightweight system tray utility written in Qt (using libqt5 or later) that monitors the running OneDrive Linux client and displays status via a tray icon. * Left-click the tray icon to view sync progress; right-click to access a menu of available actions; middle-click shows the PID of the running client. * Ideal for users who just want visual status cues (e.g., “sync in progress”, “idle”, “error”) without a full GUI configuration tool. ### GUI Notifications To enable GUI notifications, you must compile the application with GUI Notification Support. Refer to [GUI Notification Support](install.md#gui-notification-support) for details. Once compiled, GUI notifications will work by default in the display manager session under the following conditions: * A D-Bus message bus daemon must be running. * The environment variables XDG_RUNTIME_DIR and DBUS_SESSION_BUS_ADDRESS must be set. Without these conditions met, GUI notifications will not function even if the support is compiled in. Once these conditions have been met, the following application events will trigger a GUI notification within the display manager session by default: * Aborting a sync if .nosync file is found * Skipping a particular item due to an invalid name * Skipping a particular item due to an invalid symbolic link * Skipping a particular item due to an invalid UTF sequence * Skipping a particular item due to an invalid character encoding sequence * Cannot create remote directory * Cannot upload file changes (free space issue, breaches maximum allowed size, breaches maximum OneDrive Account path length) * Cannot delete remote file / folder * Cannot move remote file / folder * When a re-authentication is required * When a new client version is available * Files that fail to upload * Files that fail to download Additionally, GUI notifications can also be sent for the following activities: * Successful file download * Successful file upload * Successful deletion locally (files and folders) * Successful deletion online (files and folders) To enable these specific notifications, add the following to your 'config' file: ``` notify_file_actions = "true" ``` To disable *all* GUI notifications, add the following to your 'config' file: ``` disable_notifications = "true" ``` ### Using a local Recycle Bin By default, this application will process online deletions and directly delete the corresponding file or folder directly from your configured 'sync_dir'. In some cases, it may actually be desirable to move these files to your Linux user default 'Recycle Bin', so that you can manually delete the files at your own discretion. To enable this application functionality, add the following to your 'config' file: ``` use_recycle_bin = "true" ``` This capability is designed to be compatible with the [FreeDesktop.org Trash Specification](https://specifications.freedesktop.org/trash/latest/), ensuring interoperability with GUI-based desktop environments such as GNOME (GIO) and KDE (KIO). It follows the required structure by: * Moving deleted files and directories to `~/.local/share/Trash/files/` * Creating matching metadata files in `~/.local/share/Trash/info/` with the correct `.trashinfo` format, including the original absolute path and ISO 8601-formatted deletion timestamp * Resolving filename collisions using a `name.N.ext` pattern (e.g., `Document.2.docx`), consistent with GNOME and KDE behaviour. To specify an explicit 'Recycle Bin' directory, add the following to your 'config' file: ``` recycle_bin_path = "/path/to/desired/location/" ``` The same FreeDesktop.org Trash Specification will be used with this explicit 'Recycle Bin' directory as illustrated below: ![using_recycle_bin](./images/using_recycle_bin.png) ### Handling a Microsoft OneDrive Account Password Change If you change your Microsoft OneDrive Account Password, the client will no longer be authorised to sync, and will generate the following error upon next application run: ```text AADSTS50173: The provided grant has expired due to it being revoked, a fresh auth token is needed. The user might have changed or reset their password. The grant was issued on '' and the TokensValidFrom date (before which tokens are not valid) for this user is ''. ERROR: You will need to issue a --reauth and re-authorise this client to obtain a fresh auth token. ``` To re-authorise the client, follow the steps below: 1. If running the client as a system service (init.d or systemd), stop the applicable system service 2. Run the command `onedrive --reauth`. This will clean up the previous authorisation, and will prompt you to re-authorise the client as per initial configuration. Please note, if you are using `--confdir` as part of your application runtime configuration, you must include this when telling the client to re-authenticate. 3. Restart the client if running as a system service or perform the standalone sync operation again The application will now sync with OneDrive with the new credentials. ### Determining the synchronisation result When the client has finished syncing without errors, the following will be displayed: ``` Sync with Microsoft OneDrive is complete ``` If any items failed to sync, the following will be displayed: ``` Sync with Microsoft OneDrive has completed, however there are items that failed to sync. ``` A file list of failed upload or download items will also be listed to allow you to determine your next steps. In order to fix the upload or download failures, you may need to: * Review the application output to determine what happened * Re-try your command utilising a resync to ensure your system is correctly synced with your Microsoft OneDrive Account ### Resumable Transfers The OneDrive Client for Linux supports resumable transfers for both uploads and downloads. This capability enhances the reliability and robustness of file transfers by allowing interrupted operations to continue from the last successful point, instead of restarting from the beginning. This is especially important in environments with unstable network connections or during large file transfers. #### What Are Resumable Transfers? A resumable transfer is a process that: * Detects when a file upload or download was interrupted due to a network error, system shutdown, or other external factors. * Saves the current state of the transfer, including offsets, temporary filenames, and online session metadata. * Upon application restart, automatically detects these incomplete operations and resumes them from where they left off. #### When Does It Occur? Resumable transfers are automatically engaged when: * The application is not started with `--resync`. * Interrupted downloads exist with associated metadata saved to disk. * Interrupted uploads using session-based transfers are pending resumption. > [!IMPORTANT] > If a `--resync` operation is being performed, all resumable transfer metadata is purged to ensure a clean and consistent resynchronisation state. #### How It Works Internally * **Downloads:** Partial download state is stored as a JSON metadata file, including the online hash, download URL, and byte offset. The file itself is saved with a `.partial` suffix. When detected, this metadata is parsed and the download resumes using HTTP range headers. * **Uploads:** Session uploads use OneDrive Upload Sessions. If interrupted, the session URL and transfer state are persisted. On restart, the client attempts to resume the upload using the remaining byte ranges. #### Benefits of Resumable Transfers * Saves bandwidth by avoiding full re-transfer of large files. * Improves reliability in poor network conditions. * Increases performance and reduces recovery time after unexpected shutdowns. #### Considerations Resumable state is only preserved if the client exits gracefully or the system preserves temporary files across sessions. If `--resync` is used, all resumable data is discarded intentionally. #### Recommendations * Avoid using `--resync` unless explicitly required. * Enable logging (`--enable-logging`) to help diagnose resumable transfer behaviour. * For environments where network interruptions are common, ensure that the system does not clean temporary or cache files between reboots. > [!NOTE] > Resumable transfer support is built-in and requires no special configuration. It is automatically applied during both standalone and monitor operational modes when applicable. ## Frequently Asked Configuration Questions ### How to change the default configuration of the client? The OneDrive Client for Linux determines its configuration from three layers, applied in the following order of priority: 1. Application default values – internal defaults built into the client 2. Configuration file values – user-defined settings from a config file (if present) 3. Command-line arguments – values passed at runtime override both of the above The built-in application defaults are sufficient for most users and provide a reliable operational baseline. Adding a configuration file or command-line options is optional, and only required when you want to customise application runtime behaviour. >[!NOTE] > The OneDrive Client does not create a configuration file automatically. > If no configuration file is found, the client runs entirely using its internally defined default values. > You only need to create a config file if you wish to override those defaults. If you want to adjust the default settings, download a copy of the configuration template into your local configuration directory. Valid configuration file locations are: * `~/.config/onedrive` – for per-user configuration * `/etc/onedrive` – for system-wide configuration > [!TIP] > To download a copy of the default configuration template, run: > ```text > mkdir -p ~/.config/onedrive > wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/onedrive/config > ``` For a full list of configuration options and command-line switches, see [application-config-options.md](application-config-options.md) ### How to change where my data from Microsoft OneDrive is stored? By default, the location where your Microsoft OneDrive data is stored, is within your Home Directory under a directory called 'OneDrive'. This replicates as close as possible where the Microsoft Windows OneDrive client stores data. To change this location, the application configuration option 'sync_dir' is used to specify a new local directory where your Microsoft OneDrive data should be stored. > [!IMPORTANT] > Please be aware that if you designate a network mount point (such as NFS, Windows Network Share, or Samba Network Share) as your `sync_dir`, this setup inherently lacks 'inotify' support. Support for 'inotify' is essential for real-time tracking of local file changes, which means that the client's 'Monitor Mode' cannot immediately detect changes in files located on these network shares. Instead, synchronisation between your local filesystem and Microsoft OneDrive will occur at intervals specified by the `monitor_interval` setting. This limitation regarding 'inotify' support on network mount points like NFS or Samba is beyond the control of this client. ### Why does the client create 'safeBackup' files? 'safeBackup' files are created to prevent local data loss whenever the client is about to replace or remove a local file and there’s any chance the current on-disk content might be different to what OneDrive expects. Under the hood, the client makes specific decisions right before a local file would otherwise be overwritten, renamed, or deleted. Instead of risking silent data loss, the client renames your current local file to a clearly marked backup name and then proceeds with the sync action. From v2.5.3+, the backup name is: ``` filename-hostname-safeBackup-0001.ext ``` The client will increment the number if additional backups are needed. #### The most common reasons you’ll see 'safeBackup' files **1. You ran the client with `--resync`** `--resync` intentionally discards the client’s local state, so the client no longer “knows” what used to be in sync. During the first pass after a resync, the online state is treated as source-of-truth. If the client finds a local file whose content differs from the online version (hash mismatch), it will back up your local copy first and then bring the local file in line with OneDrive. If you wish to treat your local files as the source-of-truth, you can set the following configuration option: ``` local_first = "true" ``` **2. Dual-booting and pointing sync_dir at your Windows OneDrive folder.** If you dual boot and set the Linux client’s sync_dir to the same path used by the Windows client, there will be times when files already exist on disk without matching local DB entries or with content that changed while Linux wasn’t running. When the Linux client encounters such a file (e.g. “exists locally but isn’t represented the way the DB expects” or “exists but content/hash differs”), the client will protect the on-disk content by creating a 'safeBackup' before it reconciles the file. **3. The online file was modified (server-side) and now differs from your local copy** If Microsoft OneDrive (or another app) changes a file online, the hash reported by the Graph API won’t match your local content. When the client is about to update the local item to match what’s online, a 'safeBackup' is created so your current local data isn’t lost if the client determines that this action should be taken. #### Can I turn this functionality off? Yes, but be careful. To disable local data protection entirely, set the following configuration option: ``` bypass_data_preservation = "true" ``` If you enable this, the client will not create 'safeBackup' files and may overwrite or remove local content during conflict resolution. **Use with extreme caution.** If you simply don’t want 'safeBackup' files uploaded to OneDrive, it is advisable to keep protection enabled and add a 'skip_file' rule: ``` skip_file = "~*|.~*|*.tmp|*.swp|*.partial|*-safeBackup-*" ``` This allows you to handle the safeBackup files locally, without having to remediate anything online. ### How to change what file and directory permissions are assigned to data that is downloaded from Microsoft OneDrive? The following are the application default permissions for any new directory or file that is created locally when downloaded from Microsoft OneDrive: * Directories: 700 - This provides the following permissions: `drwx------` * Files: 600 - This provides the following permissions: `-rw-------` These default permissions align to the security principal of 'least privilege' so that only you should have access to your data that you download from Microsoft OneDrive. To alter these default permissions, you can adjust the values of two configuration options as follows. You can also use the [Unix Permissions Calculator](https://chmod-calculator.com/) to help you determine the necessary new permissions. ```text sync_dir_permissions = "700" sync_file_permissions = "600" ``` > [!IMPORTANT] > Please note that special permission bits such as setuid, setgid, and the sticky bit are not supported. Valid permission values range from `000` to `777` only. > [!NOTE] > To prevent the application from modifying file or directory permissions and instead rely on the existing file system permission inheritance, add `disable_permission_set = "true"` to your configuration file. ### How are uploads and downloads managed? The system manages downloads and uploads using a multi-threaded approach. Specifically, the application utilises by default 8 threads (a maximum of 16 can be configured) for these processes. Refer to [configuration documentation](application-config-options.md#threads) for further details. ### How to only sync a specific directory? There are two methods to achieve this: * Employ the '--single-directory' option to only sync this specific path * Employ 'sync_list' as part of your 'config' file to configure what files and directories to sync, and what should be excluded ### How to 'skip' files from syncing? There are two methods to achieve this: * Employ 'skip_file' as part of your 'config' file to configure what files to skip * Employ 'sync_list' to configure what files and directories to sync, and what should be excluded For further details please read the ['skip_file' config option documentation](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md#skip_file) ### How to 'skip' directories from syncing? There are three methods available to 'skip' a directory from the sync process: * Employ 'skip_dir' as part of your 'config' file to configure what directories to skip * Employ 'sync_list' to configure what files and directories to sync, and what should be excluded * Employ 'check_nosync' as part of your 'config' file and a '.nosync' empty file within the directory to exclude to skip that directory > [!IMPORTANT] > Entries for 'skip_dir' are *relative* to your 'sync_dir' path. For further details please read the ['skip_dir' config option documentation](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md#skip_dir) ### How to 'skip' .files and .folders from syncing? There are three methods to achieve this: * Employ 'skip_file' or 'skip_dir' to configure what files or folders to skip * Employ 'sync_list' to configure what files and directories to sync, and what should be excluded * Employ 'skip_dotfiles' as part of your 'config' file to skip any dot file (for example: `.Trash-1000` or `.xdg-volume-info`) from syncing to OneDrive ### How to 'skip' files larger than a certain size from syncing? Use `skip_size = "value"` as part of your 'config' file where files larger than this size (in MB) will be skipped. ### How to 'rate limit' the application to control bandwidth consumed for upload & download operations? To optimise Internet bandwidth usage during upload and download processes, include the 'rate_limit' setting in your configuration file. This setting controls the bandwidth allocated to each thread. By default, 'rate_limit' is set to '0', indicating that the application will utilise the maximum available bandwidth across all threads. To check the current 'rate_limit' value, use the `--display-config` command. > [!NOTE] > Since downloads and uploads are processed through multiple threads, the 'rate_limit' value applies to each thread separately. For instance, setting 'rate_limit' to 1048576 (1MB) means that during data transfers, the total bandwidth consumption might reach around 16MB, not just the 1MB configured due to the number of threads being used. ### How can I prevent my local disk from filling up? By default, the application will reserve 50MB of disk space to prevent your filesystem from running out of disk space. This default value can be modified by adding the 'space_reservation' configuration option and the applicable value as part of your 'config' file. You can review the value being used when using `--display-config`. ### How does the client handle symbolic links? Microsoft OneDrive has no concept or understanding of symbolic links, and attempting to upload a symbolic link to Microsoft OneDrive generates a platform API error. All data (files and folders) that are uploaded to OneDrive must be whole files or actual directories. As such, there are only two methods to support symbolic links with this client: 1. Follow the Linux symbolic link and upload whatever the local symbolic link is pointing to to Microsoft OneDrive. This is the default behaviour. 2. Skip symbolic links by configuring the application to do so. When skipping, no data, no link, no reference is uploaded to OneDrive. Use 'skip_symlinks' as part of your 'config' file to configure the skipping of all symbolic links while syncing. ### How to synchronise OneDrive Personal Shared Folders? Folders shared with you can be synchronised by adding them to your OneDrive online. To do that, open your OneDrive account online, go to the Shared files list, right-click on the folder you want to synchronise, and then click on "Add to my OneDrive". ### How to synchronise OneDrive Business Shared Items (Files and Folders)? Folders shared with you can be synchronised by adding them to your OneDrive online. To do that, open your OneDrive account online, go to the Shared files list, right-click on the folder you want to synchronise, and then click on "Add to my OneDrive". Files shared with you can be synchronised using two methods: 1. Add a shortcut link to the file to your OneDrive folder online 2. Sync the actual file locally using the configuration option to sync OneDrive Business Shared Files. Refer to [business-shared-items.md](business-shared-items.md) for further details. ### How to synchronise SharePoint / Office 365 Shared Libraries? There are two methods to achieve this: * SharePoint library can be directly added to your OneDrive online. To do that, open your OneDrive account online, go to the Shared files list, right-click on the SharePoint Library you want to synchronise, and then click on "Add to my OneDrive". * Configure a separate application instance to only synchronise that specific SharePoint Library. Refer to [sharepoint-libraries.md](sharepoint-libraries.md) for configuration assistance. ### How to Create a Shareable Link? In certain situations, you might want to generate a shareable file link and provide this link to other users for accessing a specific file. To accomplish this, employ the following command: ```text onedrive --create-share-link ``` > [!IMPORTANT] > By default, this access permissions for the file link will be read-only. To make the shareable link a read-write link, execute the following command: ```text onedrive --create-share-link --with-editing-perms ``` > [!IMPORTANT] > The order of the file path and option flag is crucial. ### How to Synchronise Both Personal and Business Accounts at once? You need to set up separate instances of the application configuration for each account. Refer to [advanced-usage.md](advanced-usage.md) for guidance on configuration. ### How to Synchronise Multiple SharePoint Libraries simultaneously? For each SharePoint Library, configure a separate instance of the application configuration. Refer to [advanced-usage.md](advanced-usage.md) for configuration instructions. ### How to Receive Real-time Changes from Microsoft OneDrive Service, instead of waiting for the next sync period? Refer to [webhooks.md](webhooks.md) for configuration instructions. ### How to initiate the client as a background service? There are a few ways to employ onedrive as a service: * via init.d * via systemd * via runit #### OneDrive service running as root user via init.d ```text chkconfig onedrive on service onedrive start ``` To view the logs, execute: ```text tail -f /var/log/onedrive/.onedrive.log ``` To alter the 'user' under which the client operates (typically root by default), manually modify the init.d service file and adjust `daemon --user root onedrive_service.sh` to match the correct user. #### OneDrive service running as root user via systemd (Arch, Ubuntu, Debian, OpenSuSE, Fedora) Initially, switch to the root user with `su - root`, then activate the systemd service: ```text systemctl --user enable onedrive systemctl --user start onedrive ``` > [!IMPORTANT] > This will execute the 'onedrive' process with a UID/GID of '0', which means any files or folders created will be owned by 'root'. > [!IMPORTANT] > The `systemctl --user` command is not applicable to Red Hat Enterprise Linux (RHEL) or CentOS Linux platforms - see below. To monitor the service's status, use the following: ```text systemctl --user status onedrive.service ``` To observe the systemd application logs, use: ```text journalctl --user-unit=onedrive -f ``` > [!TIP] > For systemd to function correctly, it requires the presence of XDG environment variables. If you encounter the following error while enabling the systemd service: > ```text > Failed to connect to bus: No such file or directory > ``` > The most likely cause is missing XDG environment variables. To resolve this, add the following lines to `.bashrc` or another file executed upon user login: > ```text > export XDG_RUNTIME_DIR="/run/user/$UID" > export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" > ``` > > To apply this change, you must log out of all user accounts where it has been made. > [!IMPORTANT] > On certain systems (e.g., Raspbian / Ubuntu / Debian on Raspberry Pi), the XDG fix above may not persist after system reboots. An alternative to starting the client via systemd as root is as follows: > 1. Create a symbolic link from `/home/root/.config/onedrive` to `/root/.config/onedrive/`. > 2. Establish a systemd service using the '@' service file: `systemctl enable onedrive@root.service`. > 3. Start the root@service: `systemctl start onedrive@root.service`. > > This ensures that the service correctly restarts upon system reboot. To examine the systemd application logs, run: ```text journalctl --unit=onedrive@ -f ``` #### OneDrive service running as root user via systemd (Red Hat Enterprise Linux, CentOS Linux) ```text systemctl enable onedrive systemctl start onedrive ``` > [!IMPORTANT] > This will execute the 'onedrive' process with a UID/GID of '0', meaning any files or folders created will be owned by 'root'. To view the systemd application logs, execute: ```text journalctl --unit=onedrive -f ``` #### OneDrive service running as a non-root user via systemd (All Linux Distributions) In some instances, it is preferable to run the OneDrive client as a service without the 'root' user. Follow the instructions below to configure the service for your regular user login. 1. As the user who will run the service, launch the application in standalone mode, authorise it for use, and verify that synchronisation is functioning as expected: ```text onedrive --sync --verbose ``` 2. After validating the application for your user, switch to the 'root' user, where is your username from step 1 above. ```text systemctl enable onedrive@.service systemctl start onedrive@.service ``` 3. To check the service's status for the user, use the following: ```text systemctl status onedrive@.service ``` To observe the systemd application logs, use: ```text journalctl --unit=onedrive@ -f ``` #### OneDrive service running as a non-root user via systemd (with notifications enabled) (Arch, Ubuntu, Debian, OpenSuSE, Fedora) In some scenarios, you may want to receive GUI notifications when using the client as a non-root user. In this case, follow these steps: 1. Log in via the graphical UI as the user you want to enable the service for. 2. Disable any `onedrive@` service files for your username, e.g.: ```text sudo systemctl stop onedrive@alex.service sudo systemctl disable onedrive@alex.service ``` 3. Enable the service as follows: ```text systemctl --user enable onedrive systemctl --user start onedrive ``` To check the service's status for the user, use the following: ```text systemctl --user status onedrive.service ``` To view the systemd application logs, execute: ```text journalctl --user-unit=onedrive -f ``` > [!IMPORTANT] > The `systemctl --user` command is not applicable to Red Hat Enterprise Linux (RHEL) or CentOS Linux platforms. #### OneDrive service running as a non-root user via runit (antiX, Devuan, Artix, Void) 1. Create the following folder if it doesn't already exist: `/etc/sv/runsvdir-` - where `` is the `USER` targeted for the service - e.g., `# mkdir /etc/sv/runsvdir-nolan` 2. Create a file called `run` under the previously created folder with executable permissions - `# touch /etc/sv/runsvdir-/run` - `# chmod 0755 /etc/sv/runsvdir-/run` 3. Edit the `run` file with the following contents (permissions needed): ```sh #!/bin/sh export USER="" export HOME="/home/" groups="$(id -Gn "${USER}" | tr ' ' ':')" svdir="${HOME}/service" exec chpst -u "${USER}:${groups}" runsvdir "${svdir}" ``` - Ensure you replace `` with the `USER` set in step #1. 4. Enable the previously created folder as a service - `# ln -fs /etc/sv/runsvdir- /var/service/` 5. Create a subfolder in the `USER`'s `HOME` directory to store the services (or symlinks) - `$ mkdir ~/service` 6. Create a subfolder specifically for OneDrive - `$ mkdir ~/service/onedrive/` 7. Create a file called `run` under the previously created folder with executable permissions - `$ touch ~/service/onedrive/run` - `$ chmod 0755 ~/service/onedrive/run` 8. Append the following contents to the `run` file ```sh #!/usr/bin/env sh exec /usr/bin/onedrive --monitor ``` - In some scenarios, the path to the `onedrive` binary may vary. You can obtain it by running `$ command -v onedrive`. 9. Reboot to apply the changes 10. Check the status of user-defined services - `$ sv status ~/service/*` > [!NOTE] > For additional details, you can refer to Void's documentation on [Per-User Services](https://docs.voidlinux.org/config/services/user-services.html) ### How to start a user systemd service at boot without user login? In some situations, it may be necessary for the systemd service to start without requiring your 'user' to log in. To address this issue, you need to reconfigure your 'user' account so that the systemd services you've created launch without the need for you to log in to your system: ```text loginctl enable-linger ``` ### How to access Microsoft OneDrive service through a proxy If you have a requirement to run the client through a proxy, there are a couple of ways to achieve this: #### Option 1: Use '.bashrc' to specify the proxy server details Set proxy configuration in `~/.bashrc` to allow the 'onedrive' application to use a specific proxy server: ```text # Set the HTTP proxy export http_proxy="http://your.proxy.server:port" # Set the HTTPS proxy export https_proxy="http://your.proxy.server:port" ``` Once you've edited your `~/.bashrc` file, run the following command to apply the changes: ``` source ~/.bashrc ``` #### Option 2: Update the 'systemd' service file to include the proxy server details If running as a systemd service, edit the applicable systemd service file to include the proxy configuration information: ```text [Unit] Description=OneDrive Client for Linux Documentation=https://github.com/abraunegg/onedrive After=network-online.target Wants=network-online.target [Service] ........ Environment="HTTP_PROXY=http://your.proxy.server:port" Environment="HTTPS_PROXY=http://your.proxy.server:port" ExecStart=/usr/local/bin/onedrive --monitor ........ ``` > [!NOTE] > After modifying the service files, you will need to run `sudo systemctl daemon-reload` to ensure the service file changes are picked up. A restart of the OneDrive service will also be required to pick up the change to send the traffic via the proxy server ### How to set up SELinux for a sync folder outside of the home folder If SELinux is enforced and the sync folder is outside of the home folder, as long as there is no policy for cloud file service providers, label the file system folder to `user_home_t`. ```text sudo semanage fcontext -a -t user_home_t /path/to/onedriveSyncFolder sudo restorecon -R -v /path/to/onedriveSyncFolder ``` To remove this change from SELinux and restore the default behaviour: ```text sudo semanage fcontext -d /path/to/onedriveSyncFolder sudo restorecon -R -v /path/to/onedriveSyncFolder ``` ## Advanced Configuration of the OneDrive Client for Linux Refer to [advanced-usage.md](advanced-usage.md) for further details on the following topics: * Configuring the client to use multiple OneDrive accounts / configurations * Configuring the client to use multiple OneDrive accounts / configurations using Docker * Configuring the client for use in dual-boot (Windows / Linux) situations * Configuring the client for use when 'sync_dir' is a mounted directory * Upload data from the local ~/OneDrive folder to a specific location on OneDrive ## Overview of all OneDrive Client for Linux CLI Options Below is a comprehensive list of all available configuration options for the OneDrive Client for Linux, as shown by the output of `onedrive --help`. These commands provide a range of options for synchronising, monitoring, and managing files between your local system and Microsoft's OneDrive cloud service. The following configuration options are available: ```text onedrive - A client for the Microsoft OneDrive Cloud Service Usage: onedrive [options] --sync Do a one-time synchronisation with Microsoft OneDrive onedrive [options] --monitor Monitor filesystem and synchronise regularly with Microsoft OneDrive onedrive [options] --display-config Display the currently used configuration onedrive [options] --display-sync-status Query OneDrive service and report on pending changes onedrive -h | --help Show this help screen onedrive --version Show version Options: --auth-files '' Perform authentication via files rather than an interactive dialogue. The application reads/writes the required values from/to the specified files --auth-response '' Perform authentication via a supplied response URL rather than an interactive dialogue --check-for-nomount Check for the presence of .nosync in the syncdir root. If found, do not perform sync --check-for-nosync Check for the presence of .nosync in each directory. If found, skip directory from sync --classify-as-big-delete '' Number of children in a path that is locally removed which will be classified as a 'big data delete' --cleanup-local-files Clean up additional local files when using --download-only. This will remove local data --confdir '' Set the directory used to store the configuration files --create-directory '' Create a directory on OneDrive. No synchronisation will be performed --create-share-link '' Create a shareable link for an existing file on OneDrive --debug-https Debug OneDrive HTTPS communication. --destination-directory '' Destination directory for renamed or moved items on OneDrive. No synchronisation will be performed --disable-download-validation Disable download validation when downloading from OneDrive --disable-notifications Do not use desktop notifications in monitor mode --disable-upload-validation Disable upload validation when uploading to OneDrive --display-config Display what options the client will use as currently configured. No synchronisation will be performed --display-quota Display the quota status of the client. No synchronisation will be performed --display-running-config Display what options the client has been configured to use on application startup --display-sync-status Display the sync status of the client. No synchronisation will be performed --download-file '' Download a single file from Microsoft OneDrive --download-only Replicate the OneDrive online state locally, by only downloading changes from OneDrive. Do not upload local changes to OneDrive --dry-run Perform a trial sync with no changes made --enable-logging Enable client activity to a separate log file --file-fragment-size Specify the file fragment size for large file uploads (in MB) --force Force the deletion of data when a 'big delete' is detected --force-http-11 Force the use of HTTP 1.1 for all operations --force-sync Force a synchronisation of a specific folder, only when using --sync --single-directory and ignore all non-default skip_dir and skip_file rules --get-O365-drive-id '' Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library (DEPRECATED) --get-file-link '' Display the file link of a synced file --get-sharepoint-drive-id '' Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library --help -h This help information. --list-shared-items List OneDrive Business Shared Items --local-first Synchronise from the local directory source first, before downloading changes from OneDrive --log-dir '' Directory where logging output is saved to, needs to end with a slash --logout Log out the current user --modified-by '' Display the last modified by details of a given path --monitor -m Keep monitoring for local and remote changes --monitor-fullscan-frequency '' Number of sync runs before performing a full local scan of the synced directory --monitor-interval '' Number of seconds by which each sync operation is undertaken when idle under monitor mode --monitor-log-frequency '' Frequency of logging in monitor mode --no-remote-delete Do not delete local file 'deletes' from OneDrive when using --upload-only --print-access-token Print the access token, useful for debugging --reauth Reauthenticate the client with OneDrive --remove-directory '' Remove a directory on OneDrive. No synchronisation will be performed --remove-source-files Remove source file after successful transfer to OneDrive when using --upload-only --remove-source-folders Remove the local directory structure post successful file transfer to Microsoft OneDrive when using --upload-only --remove-source-files --resync Forget the last saved state, perform a full sync --resync-auth Approve the use of performing a --resync action --share-password '' Require a password to access the shared link when used with --create-share-link --single-directory '' Specify a single local directory within the OneDrive root to sync --skip-dir '' Skip any directories that match this pattern from syncing --skip-dir-strict-match When matching skip_dir directories, only match explicit matches --skip-dot-files Skip dot files and folders from syncing --skip-file '' Skip any files that match this pattern from syncing --skip-size '' Skip new files larger than this size (in MB) --skip-symlinks Skip syncing of symlinks --source-directory '' Source directory to rename or move on OneDrive. No synchronisation will be performed --space-reservation '' The amount of disk space to reserve (in MB) to avoid 100% disk space utilisation --sync -s Perform a synchronisation with Microsoft OneDrive --sync-root-files Sync all files in sync_dir root when using sync_list --sync-shared-files Sync OneDrive Business Shared Files to the local filesystem --syncdir '' Specify the local directory used for synchronisation to OneDrive --synchronize Perform a synchronisation with Microsoft OneDrive (DEPRECATED) --threads Specify a value for the number of worker threads used for parallel upload and download operations --upload-only Replicate the locally configured sync_dir state to OneDrive, by only uploading local changes to OneDrive. Do not download changes from OneDrive --verbose -v+ Print more details, useful for debugging (repeat for extra debugging) --version Print the version and exit --with-editing-perms Create a read-write shareable link for an existing file on OneDrive when used with --create-share-link ``` Refer to [application-config-options.md](application-config-options.md) for in-depth details on all application options. onedrive-2.5.10/docs/webhooks.md000066400000000000000000000410241513710110600165010ustar00rootroot00000000000000# How to configure receiving real-time changes from Microsoft OneDrive using webhooks When operating in 'Monitor Mode,' receiving real-time updates to online data can significantly enhance synchronisation efficiency. This is achieved by enabling 'webhooks,' which allows the client to subscribe to remote updates and receive real-time notifications when certain events occur on Microsoft OneDrive. With this setup, any remote changes are promptly synchronised to your local file system, eliminating the need to wait for the next scheduled synchronisation cycle. > [!IMPORTANT] > In March 2023, Microsoft updated the webhook notification capability in Microsoft Graph to only allow valid HTTPS URLs as the destination for subscription updates. > > This change was part of Microsoft's ongoing efforts to enhance security and ensure that all webhooks used with Microsoft Graph comply with modern security standards. The enforcement of this requirement prevents the registration of subscriptions with non-secure (HTTP) endpoints, thereby improving the security of data transmission. > > Therefore, as a prerequisite, you must have a valid fully qualified domain name (FQDN) for your system that is externally resolvable, or configure Dynamic DNS (DDNS) using a provider such as: > * No-IP > * DynDNS > * DuckDNS > * Afraid.org > * Cloudflare > * Google Domains > * Dynu > * ChangeIP > > This FQDN will allow you to create a valid HTTPS certificate for your system, which can be used by Microsoft Graph for webhook functionality. > > Please note that it is beyond the scope of this document to provide guidance on setting up this requirement. Depending on your environment, a number of steps are required to configure this application functionality. At a very high level these configuration steps are: 1. Application configuration to enable 'webhooks' functionality 2. Install and configure 'nginx' as a reverse proxy for HTTPS traffic 3. Install and configure Let's Encrypt 'certbot' to provide a valid HTTPS certificate for your system using your FQDN 4. Configure your Firewall or Router to forward traffic to your system > [!NOTE] > The configuration steps below were validated on [Fedora 40 Workstation](https://fedoraproject.org/) > > The installation of required components (nginx, certbot) for your platform is beyond the scope of this document and it is assumed you know how to install these components. If you are unsure, please seek support from your Linux distribution support channels. ### Step 1: Application configuration #### Enable the 'webhook' application feature * In your 'config' file, set `webhook_enabled = "true"` to activate the webhook feature. #### Configure the public notification URL * In your 'config' file, set `webhook_public_url = "https:///webhooks/onedrive"` as the public URL that will receive subscription updates from the Microsoft Graph API platform. > [!NOTE] > This URL will utilise your FQDN and must be resolvable from the Internet. This FQDN will also be used within your 'nginx' configuration. #### Testing At this point, if you attempt to test 'webhooks', when they are attempted to be initialised, the following error *should* be generated: ``` ERROR: Microsoft OneDrive API returned an error with the following message: Error Message: HTTP request returned status code 400 (Bad Request) Error Reason: Subscription validation request timed out. Error Code: ValidationError Error Timestamp: YYYY-MM-DDThh:mm:ss API Request ID: eb196382-51d7-4411-984a-45a3fda90463 Will retry creating or renewing subscription in 1 minute ``` This error is 100% normal at this point. ### Step 2: Install and configure 'nginx' > [!NOTE] > Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. #### Install and enable 'nginx' * Install 'nginx' and any other requirements to install 'nginx' on your platform. It is beyond the scope of this document to advise on how to install this. Enable and start the 'nginx' service. > [!TIP] > You may need to enable firewall rules to allow inbound http and https connections on your system: > ``` > sudo firewall-cmd --permanent --add-service=http > sudo firewall-cmd --permanent --add-service=https > sudo firewall-cmd --reload > ``` #### Verify your 'nginx' installation * From your local machine, attempt to access the local server now running, by using a web browser and pointing at http://127.0.0.1/ ![nginx_verify_install](./images/nginx_verify_install.png) #### Configure 'nginx' to receive the subscription update * Create a basic 'nginx' configuration file to support proxying traffic from Nginx to the local 'onedrive' process, which will, by default, have an HTTP listener running on TCP port 8888 ``` server { listen 80; server_name ; location /webhooks/onedrive { # Proxy Options proxy_http_version 1.1; proxy_pass http://127.0.0.1:8888; } } ``` The configuration above will: * Create an endpoint listener at `https:///webhooks/onedrive` * Proxy the received traffic at this listener to the local listener TCP port > [!TIP] > Save this file in the nginx configuration directory similar to the following path: `/etc/nginx/conf.d/onedrive_webhook.conf`. This will help keep all your configurations organised. * Test your 'nginx' configuration using `sudo nginx -t` to validate that there are no errors. If any are identified, please correct them. * Once tested, reload your 'nginx' configuration to activate the webhook reverse proxy configuration. ### Step 4: Initial Firewall/Router Configuration * Configure your firewall or router to forward all incoming HTTP and HTTPS traffic to the internal address of your system where 'nginx' is running. This is required for to allow the Let's Encrypt `certbot` tool to create a valid HTTPS certificate for your system. ![initial_firewall_config](./images/initial_firewall_config.png) * A valid configuration will be similar to the above illustration. ### Step 5: Use Let's Encrypt 'certbot' to create a SSL Certificate and deploy to your 'nginx' webhook configuration * Install the Let's Encrypt 'certbot' tool along with the associated python module 'python-certbot-nginx' for your platform * Run the 'certbot' tool on your platform to generate a valid HTTPS certificate for your `` by running `certbot --nginx`. This should *detect* your active `server_name` from your 'nginx' configuration and install the certificate in the correct manner. * The resulting 'nginx' configuration will look something like this: ``` server { server_name ; location /webhooks/onedrive { # Proxy Options proxy_http_version 1.1; proxy_pass http://127.0.0.1:8888; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live//fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live//privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = ) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name ; return 404; # managed by Certbot } ``` * Test your 'nginx' configuration using `sudo nginx -t` to validate that there are no errors. If any are identified, please correct them. * Once tested, reload your 'nginx' configuration to activate the webhook reverse proxy configuration. > [!IMPORTANT] > It is strongly advised that post doing this step, you implement a method to automatically keep your SSL certificate in a healthy state, as if the SSL certificate expires, webhook functionality will stop working. It is also beyond the scope of this document on how to do this. ### Step 6: Update 'nginx' to only use TLS 1.2 and TLS 1.3 To ensure that you are configuring your 'nginx' configuration to use secure communication, it is advisable for you to add the following to your `onedrive_webhook.conf` within the `server {}` configuration section: ``` # Ensure only TLS 1.2 and TLS 1.3 are used ssl_protocols TLSv1.2 TLSv1.3; ``` The resulting 'nginx' configuration will look something like this: ``` server { server_name ; location /webhooks/onedrive { # Proxy Options proxy_http_version 1.1; proxy_pass http://127.0.0.1:8888; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live//fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live//privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot # Ensure only TLS 1.2 and TLS 1.3 are used ssl_protocols TLSv1.2 TLSv1.3; } server { if ($host = ) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name ; return 404; # managed by Certbot } ``` * Test your 'nginx' configuration using `sudo nginx -t` to validate that there are no errors. If any are identified, please correct them. * Once tested, reload your 'nginx' configuration to activate the webhook reverse proxy configuration. To validate that the TLS configuration is working, perform the following tests from a different system that is able to resolve your FQDN externally: ``` curl -I -v --tlsv1.2 --tls-max 1.2 https:// curl -I -v --tlsv1.3 --tls-max 1.3 https:// ``` This should return valid TLS information similar to the following: ``` * Rebuilt URL to: https://your.fully.qualified.domain.name/ * Trying 123.123.123.123... * TCP_NODELAY set * Connected to your.fully.qualified.domain.name (123.123.123.123) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-ECDSA-AES256-GCM-SHA384 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=your.fully.qualified.domain.name * start date: Aug 28 07:18:04 2024 GMT * expire date: Nov 26 07:18:03 2024 GMT * subjectAltName: host "your.fully.qualified.domain.name" matched cert's "your.fully.qualified.domain.name" * issuer: C=US; O=Let's Encrypt; CN=E6 * SSL certificate verify ok. > HEAD / HTTP/1.1 > Host: your.fully.qualified.domain.name > User-Agent: curl/7.61.1 > Accept: */* > < HTTP/1.1 200 OK HTTP/1.1 200 OK < Server: nginx/1.26.2 Server: nginx/1.26.2 < Date: Sat, 31 Aug 2024 22:36:01 GMT Date: Sat, 31 Aug 2024 22:36:01 GMT < Content-Type: text/html Content-Type: text/html < Content-Length: 8474 Content-Length: 8474 < Last-Modified: Mon, 20 Feb 2023 17:42:39 GMT Last-Modified: Mon, 20 Feb 2023 17:42:39 GMT < Connection: keep-alive Connection: keep-alive < ETag: "63f3b10f-211a" ETag: "63f3b10f-211a" < Accept-Ranges: bytes Accept-Ranges: bytes ``` Lastly, to validate that TLS 1.1 and below is being blocked, perform the following tests from a different system that is able to resolve your FQDN externally: ``` curl -I -v --tlsv1.1 --tls-max 1.1 https:// ``` The response should be similar to the following: ``` * Rebuilt URL to: https://your.fully.qualified.domain.name/ * Trying 123.123.123.123... * TCP_NODELAY set * Connected to your.fully.qualified.domain.name (123.123.123.123) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * TLSv1.3 (OUT), TLS alert, internal error (592): * error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available curl: (35) error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available ``` > [!IMPORTANT] > TLS 1.2 and TLS 1.3 support is provided by OpenSSL. > > To correctly support only using these TLS versions, you must be using 'nginx' version 1.15.0 or later combined with OpenSSL 1.1.1 or later. > > If your distribution does not provide these, then please raise this with your distribution or upgrade your distribution to one that does. > [!NOTE] > If you use a version of 'nginx' that supports TLS 1.3 but are using an older version of OpenSSL (e.g., OpenSSL 1.0.x), TLS 1.3 will not be supported even if your 'nginx' configuration requests it. > [!NOTE] > If using 'LetsEncrypt', TLS 1.2 and TLS 1.3 support will be automatically configured in the `/etc/letsencrypt/options-ssl-nginx.conf` include file when the SSL Certificate is added to your 'nginx' configuration. ### Step 7: Secure your 'nginx' configuration to only allow Microsoft 365 to connect Enhance your 'nginx' configuration to only allow the Microsoft 365 platform which includes the Microsoft Graph API to communicate with your configured webhooks endpoint. Review https://www.microsoft.com/en-us/download/details.aspx?id=56519 to assist you. Please note, it is beyond the scope of this document to tell you how to secure your system against unauthorised access of your endpoint listener. > [!IMPORTANT] > The IP address ranges that are part of the Microsoft 365 Common and Office Online services, which also cover Microsoft Graph API can be sourced from the above Microsoft URL. You should regularly update your configuration as Microsoft updates these ranges frequently. > It is recommended to automate these updates accordingly and is also beyond the scope of this document on how to do this. ### Step 8: Test your 'onedrive' application using this configuration * Run the 'onedrive' application using `--monitor --verbose` and the client should now create a new subscription and register itself: ``` ..... Performing initial synchronisation to ensure consistent local state ... Started webhook server Initializing subscription for updates ... Webhook: handled validation request Created new subscription a09ba1cf-3420-4d78-9117-b41373de33ff with expiration: 2024-08-28T08:42:00.637Z Attempting to contact Microsoft OneDrive Login Service Successfully reached Microsoft OneDrive Login Service Starting a sync with Microsoft OneDrive ..... ``` * Review the 'nginx' logs to validate that applicable communication is occurring: ``` 70.37.95.11 - - [28/Aug/2024:18:26:07 +1000] "POST /webhooks/onedrive?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+25460109-0e8b-4521-8090-dd691b407ed8 HTTP/1.1" 200 128 "-" "-" "-" 137.135.11.116 - - [28/Aug/2024:18:32:02 +1000] "POST /webhooks/onedrive?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+65e43e3c-cbab-4e74-87ec-0e8fafdef6d3 HTTP/1.1" 200 128 "-" "-" "-" ``` ## Troubleshooting In some circumstances, `SELinux` can provent 'nginx' from communicating with local system processes. When this occurs, the application will generate an error similar to the following: ``` ERROR: Microsoft OneDrive API returned an error with the following message: Error Message: HTTP request returned status code 400 (Bad Request) Error Reason: Subscription validation request failed. Notification endpoint must respond with 200 OK to validation request. Error Code: ValidationError Error Timestamp: 2024-08-28T08:22:34 API Request ID: 36684746-1458-4150-aeab-9871355a106c Calling Function: logSubscriptionError() ``` To correct this issue, use the `setsebool` tool to allow HTTPD processes (which includes 'nginx') to make network connections: ``` sudo setsebool -P httpd_can_network_connect 1 ``` After setting the boolean, restart 'nginx' to apply the SELinux configuration change. ## Resulting configuration When these steps are followed, your environment configuration will be similar to the following diagram: ![webhooks](./puml/webhooks.png) ## Additional Configuration Assistance Refer to [application-config-options.md](application-config-options.md) for further guidance on 'webhook' configuration options.onedrive-2.5.10/install-sh000077500000000000000000000360101513710110600154110ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2018-03-11.20; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # Note that $RANDOM variable is not portable (e.g. dash); Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p' feature. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: onedrive-2.5.10/onedrive.1.in000066400000000000000000000416541513710110600157210ustar00rootroot00000000000000.TH ONEDRIVE "1" "@PACKAGE_DATE@" "@PACKAGE_VERSION@" "User Commands" .SH NAME onedrive \- A client for the Microsoft OneDrive Cloud Service .SH SYNOPSIS .B onedrive [\fI\,OPTION\/\fR] --sync .br .B onedrive [\fI\,OPTION\/\fR] --monitor .br .B onedrive [\fI\,OPTION\/\fR] --display-config .br .B onedrive [\fI\,OPTION\/\fR] --display-sync-status .br .B onedrive [\fI\,OPTION\/\fR] -h | --help .br .B onedrive --version .SH DESCRIPTION A fully featured, free, and actively maintained Microsoft OneDrive client that seamlessly supports OneDrive Personal, OneDrive for Business, Microsoft 365 (formerly Office 365), and SharePoint document libraries. .PP Designed for maximum flexibility and reliability, this powerful and highly configurable client works across all major Linux distributions and FreeBSD. It can also be deployed in containerised environments using Docker or Podman. Supporting both one-way and two-way synchronisation modes, the client provides secure and efficient file syncing with Microsoft OneDrive services — tailored to suit both desktop and server environments. .SH FEATURES .br * Compatible with OneDrive Personal, OneDrive for Business, and Microsoft SharePoint Libraries .br * Provides full support for shared folders and files across both Personal and Business accounts .br * Supports single-tenant and multi-tenant Microsoft Entra ID environments .br * Supports national cloud deployments including Microsoft Cloud for US Government, Microsoft Cloud Germany, and Azure/Office 365 operated by VNET in China .br * Supports bi-directional synchronisation (default) to keep local and remote data fully aligned .br * Supports upload-only mode to upload local changes without downloading remote changes .br * Supports download-only mode to download remote changes without uploading local changes .br * Supports a dry-run mode for safely testing configuration changes without modifying data .br * Implements safe conflict handling to minimise data loss by creating local backups when this is determined to be the safest resolution strategy .br * Provides comprehensive rules-based client-side filtering with inclusions, exclusions, wildcard matching (*), and recursive globbing (**) .br * Allows selective synchronisation of specific files, directories, or patterns .br * Caches synchronisation state for efficient processing and improved performance on large or complex sync sets .br * Supports near real-time processing of cloud-side changes using native WebSocket support .br * Supports webhook-based online change notifications where WebSockets are unsuitable (manual configuration required) .br * Monitors local file system changes in real-time using inotify .br * Implements the FreeDesktop.org Trash specification, enabling recovery of files deleted locally due to remote deletions .br * Protects against accidental data loss following configuration changes .br * Supports interruption-tolerant uploads and downloads with automatic transfer resumption .br * Validates file transfers to ensure data integrity .br * Enhances synchronisation performance through multi-threaded file transfers .br * Manages network usage through configurable bandwidth rate limiting .br * Supports desktop notifications for synchronisation events, warnings, and errors using libnotify .br * Provides desktop file-manager integration by registering the OneDrive folder as a sidebar location with a distinctive icon .br * Operates fully in both graphical and headless/server environments, with a graphical environment required only for Intune SSO, desktop notifications, and sidebar integration .SH CONFIGURATION By default, the OneDrive Client for Linux uses a sensible set of built-in defaults to interact with the Microsoft OneDrive service. .PP The client determines its configuration from three layers, applied in the following order of priority: .PP 1. Application default values – internal defaults compiled into the client. .br 2. Configuration file values – user-defined settings loaded from a configuration file (if present). .br 3. Command-line arguments – values specified at runtime override both the configuration file and application defaults. .br .PP The built-in application defaults are sufficient for most users and provide a reliable operational baseline. Creating a configuration file or using command-line options is optional, and only required when you wish to customise runtime behaviour. .TP .B NOTE: The OneDrive Client does not create a configuration file automatically. If no configuration file is found, the client runs entirely using its internally defined default values. You only need to create a configuration file if you wish to override those defaults. .PP If you want to adjust the default settings, download a copy of the default configuration template into your local configuration directory. Valid configuration file locations are: .br .PP \fB~/.config/onedrive\fP – for per-user configuration. .br \fB/etc/onedrive\fP – for system-wide configuration. .TP .B Example: To download a copy of the default configuration template, run: .PP .nf \fB mkdir -p ~/.config/onedrive wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/onedrive/config \fP .fi .PP For a full list of configuration options and command-line switches, refer to the online documentation: .br \fIhttps://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md\fP .SH CLIENT SIDE FILTERING Client Side Filtering in the context of the OneDrive Client for Linux refers to user-configured rules that determine what files and directories the client should upload or download from Microsoft OneDrive. These rules are crucial for optimising synchronisation, especially when dealing with large numbers of files or specific file types. The OneDrive Client for Linux offers several configuration options to facilitate this: .TP .B --skip-dir or 'skip_dir' config file option Specifies directories that should not be synchronised with OneDrive. Useful for omitting large or irrelevant directories from the sync process. .TP .B --skip-dot-files or 'skip_dotfiles' config file option Excludes dotfiles, usually configuration files or scripts, from the sync. Ideal for users who prefer to keep these files local. .TP .B --skip-file or 'skip_file' config file option Allows specifying specific files to exclude from synchronisation. Offers flexibility in selecting essential files for cloud storage. .TP .B --skip-symlinks or 'skip_symlinks' config file option Prevents symlinks, which often point to files outside the OneDrive directory or to irrelevant locations, from being included in the sync. .PP Additionally, the OneDrive Client for Linux allows the implementation of Client Side Filtering rules through a 'sync_list' file. This file explicitly states which directories or files should be included in the synchronisation. By default, any item not listed in the 'sync_list' file is excluded. This approach offers granular control over synchronisation, ensuring that only necessary data is transferred to and from Microsoft OneDrive. .PP These configurable options and the 'sync_list' file provide users with the flexibility to tailor the synchronisation process to their specific needs, conserving bandwidth and storage space while ensuring that important files are always backed up and accessible. .TP .B NOTE: After changing any Client Side Filtering rule, a full re-synchronisation must be performed using --resync .SH FIRST RUN Once you've installed the application, you'll need to authorise it using your Microsoft OneDrive Account. This can be done by simply running the application without any additional command switches. .TP Please be aware that some companies may require you to explicitly add this app to the Microsoft MyApps portal. To add an approved app to your apps, click on the ellipsis in the top-right corner and select "Request new apps." On the next page, you can add this app. If it's not listed, you should make a request through your IT department. .TP When you run the application for the first time, you'll be prompted to open a specific URL using your web browser, where you'll need to log in to your Microsoft Account and grant the application permission to access your files. After granting permission to the application, you'll be redirected to a blank page. Simply copy the URI from the blank page and paste it into the application. .TP This process authenticates your application with your account information, and it is now ready to use to sync your data between your local system and Microsoft OneDrive. .SH GUI NOTIFICATIONS If the client has been compiled with support for notifications, the client will send notifications about client activity via libnotify to the GUI via DBus when the client is being run in --monitor mode. .SH APPLICATION LOGGING When running onedrive all actions can be logged to a separate log file. This can be enabled by using the \fB--enable-logging\fP flag. By default, log files will be written to \fB/var/log/onedrive\fP. All logfiles will be in the format of \fB%username%.onedrive.log\fP, where \fB%username%\fP represents the user who ran the client. .SH ALL CLI OPTIONS The options below allow you to control the behaviour of the onedrive client from the CLI. Without any specific option, if the client is already authenticated, the client will exit without any further action. .TP \fB\-\-sync\fR, -s Do a one-time synchronisation with Microsoft OneDrive. .TP \fB\-\-monitor\fR, -m Monitor filesystem and synchronise regularly with Microsoft OneDrive. .TP \fB\-\-display-config\fR Display the currently used configuration for the onedrive client. .TP \fB\-\-display-sync-status\fR Query OneDrive service and report on pending changes. .TP \fB\-\-auth-files\fR \fIARG\fR Perform authentication not via interactive dialogue but via files that are read/written when using this option. The two files are passed in as \fBARG\fP in the format \fBauthUrl:responseUrl\fP. The authorisation URL is written to the \fBauthUrl\fP file, then \fBonedrive\fP waits for the file \fBresponseUrl\fP to be present, and reads the response from that file. .br Always specify the full path when using this option, otherwise the application will default to using the default configuration path for these files (~/.config/onedrive/) .TP \fB\-\-auth-response\fR \fIARG\fR Perform authentication not via interactive dialogue but via providing the response URL directly. .TP \fB\-\-check-for-nomount\fR Check for the presence of .nosync in the syncdir root. If found, do not perform sync. .TP \fB\-\-check-for-nosync\fR Check for the presence of .nosync in each directory. If found, skip directory from sync. .TP \fB\-\-classify-as-big-delete\fR \fIARG\fR Number of children in a path that is locally removed which will be classified as a 'big data delete'. .TP \fB\-\-cleanup-local-files\fR Clean up additional local files when using --download-only. This will remove local data. .TP \fB\-\-confdir\fR \fIARG\fR Set the directory used to store the configuration files. .TP \fB\-\-create-directory\fR \fIARG\fR Create a directory on OneDrive. No synchronisation will be performed. .TP \fB\-\-create-share-link\fR \fIARG\fR Create a shareable link for an existing file on OneDrive. .br Use --with-editing-perms to create a read-write share link instead of read-only. .br Use --share-password to protect the shared link with a password. .TP \fB\-\-debug-https\fR Debug OneDrive HTTPS communication. .TP \fB\-\-destination-directory\fR \fIARG\fR Destination directory for renamed or moved items on OneDrive. No synchronisation will be performed. .TP \fB\-\-disable-download-validation\fR Disable download validation when downloading from OneDrive. .TP \fB\-\-disable-notifications\fR Do not use desktop notifications in monitor mode. .TP \fB\-\-disable-upload-validation\fR Disable upload validation when uploading to OneDrive. .TP \fB\-\-display-quota\fR Display the quota status of the client. No synchronisation will be performed. .TP \fB\-\-download-file\fR \fIARG\fR Download a single file from Microsoft OneDrive. .br Specify the full online path to the file. No synchronisation will be performed. .TP \fB\-\-display-running-config\fR Display what options the client has been configured to use on application startup. .TP \fB\-\-download-only\fR Replicate the OneDrive online state locally, by only downloading changes from OneDrive. Do not upload local changes to OneDrive. .TP \fB\-\-dry-run\fR Perform a trial sync with no changes made. .TP \fB\-\-enable-logging\fR Enable client activity to a separate log file. .TP \fB\-\-file-fragment-size\fR \fIARG\fR Specify the file fragment size for large file uploads (in MB). .TP \fB\-\-force\fR Force the deletion of data when a 'big delete' is detected. .TP \fB\-\-force-http-11\fR Force the use of HTTP 1.1 for all operations. .TP \fB\-\-force-sync\fR Force a synchronisation of a specific folder, only when using --sync --single-directory and ignore all non-default skip_dir and skip_file rules. .TP \fB\-\-get-O365-drive-id\fR \fIARG\fR Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library (DEPRECATED). .TP \fB\-\-get-file-link\fR \fIARG\fR Display the file link of a synced file. .TP \fB\-\-get-sharepoint-drive-id\fR \fIARG\fR Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library. .TP \fB\-\-help\fR, \fB\-h\fR Display application help. .TP \fB\-\-list-shared-items\fR List OneDrive Business Shared Items. .TP \fB\-\-local-first\fR Synchronise from the local directory source first, before downloading changes from OneDrive. .TP \fB\-\-log-dir\fR \fIARG\fR Directory where logging output is saved to, needs to end with a slash. .TP \fB\-\-logout\fR Log out the current user. .TP \fB\-\-modified-by\fR \fIARG\fR Display the last modified by details of a given path. .TP \fB\-\-monitor-fullscan-frequency\fR \fIARG\fR Number of sync runs before performing a full local scan of the synced directory. .TP \fB\-\-monitor-interval\fR \fIARG\fR Number of seconds by which each sync operation is undertaken when idle under monitor mode. .TP \fB\-\-monitor-log-frequency\fR \fIARG\fR Frequency of logging in monitor mode. .TP \fB\-\-no-remote-delete\fR Do not delete local file 'deletes' from OneDrive when using --upload-only. .TP \fB\-\-print-access-token\fR Print the access token, useful for debugging. .TP \fB\-\-reauth\fR Reauthenticate the client with OneDrive. .TP \fB\-\-remove-directory\fR \fIARG\fR Remove a directory on OneDrive. No synchronisation will be performed. .TP \fB\-\-remove-source-files\fR Remove source file after successful transfer to OneDrive when using --upload-only. .TP \fB\-\-remove-source-folders\fR Remove the local directory structure post successful file transfer to Microsoft OneDrive when using --upload-only --remove-source-files. .TP \fB\-\-resync\fR Forget the last saved state, perform a full sync. .TP \fB\-\-resync-auth\fR Approve the use of performing a --resync action. .TP \fB\-\-share-password\fR \fIARG\fR Require a password to access the shared link when used with --create-share-link . Only supported for OneDrive Business and SharePoint environments that permit password-protected sharing. .TP \fB\-\-single-directory\fR \fIARG\fR Specify a single local directory within the OneDrive root to sync. .TP \fB\-\-skip-dir\fR \fIARG\fR Skip any directories that match this pattern from syncing. .TP \fB\-\-skip-dir-strict-match\fR When matching skip_dir directories, only match explicit matches. .TP \fB\-\-skip-dot-files\fR Skip dot files and folders from syncing. .TP \fB\-\-skip-file\fR \fIARG\fR Skip any files that match this pattern from syncing. .TP \fB\-\-skip-size\fR \fIARG\fR Skip new files larger than this size (in MB). .TP \fB\-\-skip-symlinks\fR Skip syncing of symlinks. .TP \fB\-\-source-directory\fR \fIARG\fR Source directory to rename or move on OneDrive. No synchronisation will be performed. .TP \fB\-\-space-reservation\fR \fIARG\fR The amount of disk space to reserve (in MB) to avoid 100% disk space utilisation. .TP \fB\-\-sync-root-files\fR Sync all files in sync_dir root when using sync_list. .TP \fB\-\-sync-shared-files\fR Sync OneDrive Business Shared Files to the local filesystem. .TP \fB\-\-syncdir\fR \fIARG\fR Specify the local directory used for synchronisation to OneDrive. .TP \fB\-\-synchronize\fR Perform a synchronisation with Microsoft OneDrive (DEPRECATED). .TP \fB\-\-threads\fR \fIARG\fR Specify a value for the number of worker threads used for parallel upload and download operations. .TP \fB\-\-upload-only\fR Replicate the locally configured sync_dir state to OneDrive, by only uploading local changes to OneDrive. Do not download changes from OneDrive. .TP \fB\-\-verbose\fR, \fB\-v+\fR Print more details, useful for debugging (repeat for extra debugging). .TP \fB\-\-version\fR Print the version and exit. .TP \fB\-\-with-editing-perms\fR Create a read-write shareable link for an existing file on OneDrive when used with --create-share-link . .SH DOCUMENTATION All documentation is available on GitHub: https://github.com/abraunegg/onedrive/tree/master/docs/ .SH SEE ALSO .BR curl(1), onedrive-2.5.10/readme.md000066400000000000000000000406421513710110600151720ustar00rootroot00000000000000# OneDrive Client for Linux [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) [![Release Date](https://img.shields.io/github/release-date/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) [![Test Build](https://github.com/abraunegg/onedrive/actions/workflows/testbuild.yaml/badge.svg)](https://github.com/abraunegg/onedrive/actions/workflows/testbuild.yaml) [![Build Docker Images](https://github.com/abraunegg/onedrive/actions/workflows/docker.yaml/badge.svg)](https://github.com/abraunegg/onedrive/actions/workflows/docker.yaml) [![Docker Pulls](https://img.shields.io/docker/pulls/driveone/onedrive)](https://hub.docker.com/r/driveone/onedrive) A fully featured, free, and actively maintained Microsoft OneDrive client that seamlessly supports OneDrive Personal, OneDrive for Business, Microsoft 365 (formerly Office 365), and SharePoint document libraries. Designed for maximum flexibility and reliability, this powerful and highly configurable client works across all major Linux distributions and FreeBSD. It can also be deployed in containerised environments using Docker or Podman. Supporting both one-way and two-way synchronisation modes, the client provides secure and efficient file syncing with Microsoft OneDrive services — tailored to suit both desktop and server environments. ## Project Background This project originated as a fork of the skilion client in early 2018, after a number of proposed improvements and bug fixes — including [Pull Requests #82 and #314](https://github.com/skilion/onedrive/pulls?q=author%3Aabraunegg) — were not merged and development activity of the skilion client had largely stalled. While it’s unclear whether the original developer was unavailable or had stepped away from the project - bug reports and feature requests remained unanswered for extended periods. In 2020, the original developer (skilion) confirmed they had no intention of maintaining or supporting their work ([reference](https://github.com/skilion/onedrive/issues/518#issuecomment-717604726)). The original [skilion repository](https://github.com/skilion/onedrive) was formally archived and made read-only on GitHub in December 2024. While still publicly accessible as a historical reference, an archived repository is no longer maintained, cannot accept contributions, and reflects a frozen snapshot of the codebase. The last code change to the skilion client was merged in November 2021; however, active development had slowed significantly well before then. As such, the skilion client should no longer be considered current or supported — particularly given the major API changes and evolving Microsoft OneDrive platform requirements since that time. Under the terms of the GNU General Public License (GPL), forking and continuing development of open source software is fully permitted — provided that derivative works retain the same license. This client complies with the original GPLv3 licensing, ensuring the same freedoms granted by the original project remain intact. Since forking in early 2018, this client has evolved into a clean re-imagining of the original codebase, resolving long-standing bugs and adding extensive new functionality to better support both personal and enterprise use cases to interact with Microsoft OneDrive from Linux and FreeBSD platforms. ## Features ### Broad Microsoft OneDrive Compatibility * Works with OneDrive Personal, OneDrive for Business, and Microsoft SharePoint Libraries. * Full support for shared folders and files across both Personal and Business accounts. * Supports single-tenant and multi-tenant Microsoft Entra ID environments. * Compatible with national cloud deployments: * Microsoft Cloud for US Government * Microsoft Cloud Germany * Azure/Office 365 operated by VNET in China ### Flexible Synchronisation Modes * Bi-directional sync (default) - keeps local and remote data fully aligned. * Upload-only mode - only uploads local changes; does not download remote changes. * Download-only mode - only downloads remote changes; does not upload local changes. * Dry-run mode - test configuration changes safely without modifying files. * Safe conflict handling minimises data loss by creating local backups whenever this is determined to be the safest conflict-resolution strategy. ### Client-Side Filtering & Granular Sync Control * Comprehensive rules-based client-side filtering (inclusions, exclusions, wildcard `*`, globbing `**`). * Filter specific files, folders, or patterns to tailor precisely what is synced with Microsoft OneDrive. * Efficient cached sync state for fast decision-making during large or complex sync sets. ### Real-Time Monitoring & Online Change Detection * Near real-time processing of cloud-side changes using native WebSocket support. * Webhook support for environments where WebSockets are unsuitable (manual setup). * Real-time local change monitoring via inotify. ### Data Safety, Recovery & Integrity Protection * Implements the FreeDesktop.org Trash specification, enabling recovery of items deleted locally due to online deletion. * Strong safeguards to prevent accidental remote deletion or overwrite after configuration changes. * Interruption-tolerant uploads and downloads, automatically resuming transfers. * Integrity validation for every file transferred. ### Modern Authentication Support * Standard OAuth2 Native Client Authorisation Flow (default), supporting browser-based login, multi-factor authentication (MFA), and modern Microsoft account security requirements. * OAuth2 Device Authorisation Flow for Microsoft Entra ID accounts, ideal for headless systems, servers, and terminal-only environments. * Intune Single Sign-On (SSO) using the Microsoft Identity Device Broker (IDB) via D-Bus, enabling seamless enterprise authentication without manual credential entry. ### Performance, Efficiency & Resource Management * Multi-threaded file transfers for significantly improved sync speeds. * Bandwidth rate limiting to control network consumption. * Highly efficient processing with state caching, reducing API traffic and improving performance. ### Desktop Integration & User Experience * libnotify desktop notifications for sync events, warnings, and errors. * Registers the OneDrive folder as a sidebar location in supported file managers, complete with a distinctive icon. * Works seamlessly in GUI and headless/server environments. A GUI is only required for Intune SSO, notifications, and sidebar integration; all other features function without graphical support. ## What's missing * Ability to encrypt/decrypt files on-the-fly when uploading/downloading files from OneDrive * Support for Windows 'On-Demand' functionality so file is only downloaded when accessed locally ## External Enhancements * A GUI for configuration management: [OneDrive Client for Linux GUI](https://github.com/bpozdena/OneDriveGUI) * Colorful log output terminal modification: [OneDrive Client for Linux Colorful log Output](https://github.com/zzzdeb/dotfiles/blob/master/scripts/tools/onedrive_log) * System Tray Icon: [OneDrive Client for Linux System Tray Icon](https://github.com/DanielBorgesOliveira/onedrive_tray) ## Frequently Asked Questions Refer to [Frequently Asked Questions](https://github.com/abraunegg/onedrive/wiki/Frequently-Asked-Questions) ## Have a question If you have a question or need something clarified, please raise a new discussion post [here](https://github.com/abraunegg/onedrive/discussions) ## Supported Application Version Support is only provided for the current application release version or newer 'master' branch versions. The current release version is: [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) To check your version, run: `onedrive --version`. Ensure you are using the current release or compile the latest version from the master branch if needed. If you are using an older version, you must upgrade to the current release or newer to receive support. ## Documentation and Configuration Assistance OneDrive Client for Linux includes a rich set of documentation covering installation, configuration options, advanced usage, and integrations. These resources are designed to help new users get started quickly and to give experienced users full control over advanced behaviour. If you are changing configuration, running in production, or using Business/SharePoint features, you should be reading these documents. All documentation is maintained in the [`docs/`](https://github.com/abraunegg/onedrive/tree/master/docs) directory of this repository. ### Getting Started #### Installation Learn how to install the client on various systems — from distribution packages to building from source. Please read the [Install Guide](https://github.com/abraunegg/onedrive/blob/master/docs/install.md) #### Basic Usage & Configuration Covers initial authentication, default settings, basic operational instructions, frequently asked 'how to' questions, and how to tailor the application configuration. Please read the [Usage Guide](https://github.com/abraunegg/onedrive/blob/master/docs/usage.md) ### Advanced Configuration #### Application Configuration Options Full reference for every config option (with descriptions, defaults, and examples) to customise sync behaviour precisely. Please read the [Application Configuration Options Guide](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md) #### Advanced Usage Tips for creating multiple config profiles, custom sync rules, daemon setups, selective sync, dual-booting with Microsoft Windows and more. Please read the [Advanced Usage Guide](https://github.com/abraunegg/onedrive/blob/master/docs/advanced-usage.md) ### Special Use Cases #### Business Shared Items Configuring sync for OneDrive Business shared items (files and folders). Please read the [Business Shared Items Guide](https://github.com/abraunegg/onedrive/blob/master/docs/business-shared-items.md) #### SharePoint & Office 365 Libraries Instructions for syncing SharePoint document libraries (Business or Education tenants). Please read the [SharePoint Library Guide](https://github.com/abraunegg/onedrive/blob/master/docs/sharepoint-libraries.md) #### National Cloud support Instructions for environments like Microsoft Cloud Germany or US Government cloud endpoints. Please read the [National Cloud Deployment Guide](https://github.com/abraunegg/onedrive/blob/master/docs/national-cloud-deployments.md) ### Container Support #### Docker How to run the OneDrive client in a Docker container. Please read the [Docker Guide](https://github.com/abraunegg/onedrive/blob/master/docs/docker.md) #### Podman How to run the OneDrive client with Podman. Please read the [Podman Guide](https://github.com/abraunegg/onedrive/blob/master/docs/podman.md) ## Basic Troubleshooting Steps If you encounter any issues running the application, please follow these steps **before** raising a bug report: 1. **Check the application version** Run `onedrive --version` to confirm which version you are using. - Ensure you are running the latest [release](https://github.com/abraunegg/onedrive/releases). - If you are already on the latest release but still experiencing issues, manually build the client from the `master` branch to test against the very latest code. This includes fixes for bugs discovered since the last tagged release. - If you are using Docker or Podman, ensure you are using the 'edge' Docker Tag. Do not use the 'latest' Docker Tag. 2. **Run in verbose mode** Use the `--verbose` option to provide greater clarity and detailed logging about the issue you are facing. If you are using Docker or Podman, use the ONEDRIVE_VERBOSE environment variable to increase logging verbosity. 3. **Test with IPv4 only** Configure the application to use **IPv4 network connectivity only**, then retest. See the `'ip_protocol_version'` option [documentation](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md#ip_protocol_version) for assistance. 4. **Test with HTTP/1.1 and IPv4** Configure the application to use **HTTP/1.1 over IPv4 only**, then retest. See the `'force_http_11'` option [documentation](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md#force_http_11) for assistance. 5. **Verify cURL and libcurl versions** If the above steps do not resolve your issue, upgrade both `curl` and `libcurl` to the latest versions provided by the curl developers. - See [Compatibility with curl](https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#compatibility-with-curl) for details on curl bugs that impact this client. - Refer to the official [cURL Releases](https://curl.se/docs/releases.html) page for version information. 6. **Open a new issue** If the problem persists after completing the steps above, proceed to **Reporting an Issue or Bug** below and open a new issue with the requested details and logs. ## Reporting an Issue or Bug > [!IMPORTANT] > Please ensure the problem is a software bug. For installation issues, distribution package/version questions, or dependency problems, start a [Discussion](https://github.com/abraunegg/onedrive/discussions) instead of filing a bug report. If you encounter a bug, you can report it on GitHub. Before opening a new issue report: 1. **Complete the Basic Troubleshooting Steps** Confirm you’ve run through all steps in the section above. 2. **Search existing issues** Check both [Open](https://github.com/abraunegg/onedrive/issues) and [Closed](https://github.com/abraunegg/onedrive/issues?q=is%3Aissue%20state%3Aclosed) issues for a similar problem to avoid duplicates. 3. **Use the issue template** Open a new bug report using the [issue template](https://github.com/abraunegg/onedrive/issues/new?template=bug_report.md) and fill in **all fields**. Complete detail helps us reproduce your environment and replicate the issue. 4. **Generate a debug log** Follow this [process](https://github.com/abraunegg/onedrive/wiki/Generate-debug-log-for-support) to create a debug log. - If you are concerned about personal or business sensitive data in the debug log, you may: - Create a new OneDrive account, configure the client to use it, use **dummy** data to simulate your environment, and reproduce the issue; or - Provide an NDA or confidentiality agreement for signature prior to sharing sensitive logs. 5. **Share the debug log securely** - **Do not post debug logs publicly.** Debug logs can include sensitive details (file paths, filenames, API endpoints, environment info, etc.). - **Send the log via email** to **support@mynas.com.au** using a trusted email account. - **Archive and password-protect** the log before sending (e.g. `.zip` with AES or `.7z`): - Example (zip with password): `zip -e onedrive-debug.zip onedrive-debug.log` - Example (7z with password): `7z a -p onedrive-debug.7z onedrive-debug.log` - **Send the password out-of-band (OOB)** — not in the same email as the archive. Email **support@mynas.com.au** to arrange an OOB method (e.g. separate email thread, phone/SMS, or agreed channel). - **If you require an NDA**, attach your NDA or confidentiality agreement to your email. It will be reviewed and signed prior to exchanging sensitive data. ### What to include in your bug report When raising a new bug report, please include **all details requested in the issue template**, such as: - A clear description of the problem and how to reproduce it - Your operating system and installation method - OneDrive account type and client version - Application configuration and cURL version - Sync directory location, system mount points, and partition types - A full debug log, shared securely as described above Providing complete information makes it much easier to understand, reproduce, and resolve your issue quickly. > [!NOTE] > Submitting a bug report starts a collaboration. To help us help you, please: > - Stay available to answer questions or provide clarifications if needed > - Test and confirm fixes in your own environment when a pull request (PR) is created for your issue > [!TIP] > Reports with missing details are much harder to investigate. Sharing as much as you can up front gives the best chance of a fast and accurate fix. ## Known issues Lists common limitations, known problems, diagnostics, and workarounds. Please read the [Known Issues Advice](https://github.com/abraunegg/onedrive/blob/master/docs/known-issues.md) onedrive-2.5.10/src/000077500000000000000000000000001513710110600141745ustar00rootroot00000000000000onedrive-2.5.10/src/arsd/000077500000000000000000000000001513710110600151255ustar00rootroot00000000000000onedrive-2.5.10/src/arsd/README.md000066400000000000000000000005361513710110600164100ustar00rootroot00000000000000The files in this directory have been obtained form the following places: cgi.d https://github.com/adamdruppe/arsd/blob/a870179988b8881b04126856105f0fad2cc0018d/cgi.d License: Boost Software License - Version 1.0 Copyright 2008-2021, Adam D. Ruppe see https://github.com/adamdruppe/arsd/blob/a870179988b8881b04126856105f0fad2cc0018d/LICENSE onedrive-2.5.10/src/arsd/cgi.d000066400000000000000000012657611513710110600160560ustar00rootroot00000000000000// FIXME: if an exception is thrown, we shouldn't necessarily cache... // FIXME: there's some annoying duplication of code in the various versioned mains // add the Range header in there too. should return 206 // FIXME: cgi per-request arena allocator // i need to add a bunch of type templates for validations... mayne @NotNull or NotNull! // FIXME: I might make a cgi proxy class which can change things; the underlying one is still immutable // but the later one can edit and simplify the api. You'd have to use the subclass tho! /* void foo(int f, @("test") string s) {} void main() { static if(is(typeof(foo) Params == __parameters)) //pragma(msg, __traits(getAttributes, Params[0])); pragma(msg, __traits(getAttributes, Params[1..2])); else pragma(msg, "fail"); } */ // Note: spawn-fcgi can help with fastcgi on nginx // FIXME: to do: add openssl optionally // make sure embedded_httpd doesn't send two answers if one writes() then dies // future direction: websocket as a separate process that you can sendfile to for an async passoff of those long-lived connections /* Session manager process: it spawns a new process, passing a command line argument, to just be a little key/value store of some serializable struct. On Windows, it CreateProcess. On Linux, it can just fork or maybe fork/exec. The session key is in a cookie. Server-side event process: spawns an async manager. You can push stuff out to channel ids and the clients listen to it. websocket process: spawns an async handler. They can talk to each other or get info from a cgi request. Tempting to put web.d 2.0 in here. It would: * map urls and form generation to functions * have data presentation magic * do the skeleton stuff like 1.0 * auto-cache generated stuff in files (at least if pure?) * introspect functions in json for consumers https://linux.die.net/man/3/posix_spawn */ /++ Provides a uniform server-side API for CGI, FastCGI, SCGI, and HTTP web applications. Offers both lower- and higher- level api options among other common (optional) things like websocket and event source serving support, session management, and job scheduling. --- import arsd.cgi; // Instead of writing your own main(), you should write a function // that takes a Cgi param, and use mixin GenericMain // for maximum compatibility with different web servers. void hello(Cgi cgi) { cgi.setResponseContentType("text/plain"); if("name" in cgi.get) cgi.write("Hello, " ~ cgi.get["name"]); else cgi.write("Hello, world!"); } mixin GenericMain!hello; --- Or: --- import arsd.cgi; class MyApi : WebObject { @UrlName("") string hello(string name = null) { if(name is null) return "Hello, world!"; else return "Hello, " ~ name; } } mixin DispatcherMain!( "/".serveApi!MyApi ); --- $(NOTE Please note that using the higher-level api will add a dependency on arsd.dom and arsd.jsvar to your application. If you use `dmd -i` or `ldc2 -i` to build, it will just work, but with dub, you will have do `dub add arsd-official:jsvar` and `dub add arsd-official:dom` yourself. ) Test on console (works in any interface mode): $(CONSOLE $ ./cgi_hello GET / name=whatever ) If using http version (default on `dub` builds, or on custom builds when passing `-version=embedded_httpd` to dmd): $(CONSOLE $ ./cgi_hello --port 8080 # now you can go to http://localhost:8080/?name=whatever ) Please note: the default port for http is 8085 and for scgi is 4000. I recommend you set your own by the command line argument in a startup script instead of relying on any hard coded defaults. It is possible though to code your own with [RequestServer], however. Build_Configurations: cgi.d tries to be flexible to meet your needs. It is possible to configure it both at runtime (by writing your own `main` function and constructing a [RequestServer] object) or at compile time using the `version` switch to the compiler or a dub `subConfiguration`. If you are using `dub`, use: ```sdlang subConfiguration "arsd-official:cgi" "VALUE_HERE" ``` or to dub.json: ```json "subConfigurations": {"arsd-official:cgi": "VALUE_HERE"} ``` to change versions. The possible options for `VALUE_HERE` are: $(LIST * `embedded_httpd` for the embedded httpd version (built-in web server). This is the default for dub builds. You can run the program then connect directly to it from your browser. * `cgi` for traditional cgi binaries. These are run by an outside web server as-needed to handle requests. * `fastcgi` for FastCGI builds. FastCGI is managed from an outside helper, there's one built into Microsoft IIS, Apache httpd, and Lighttpd, and a generic program you can use with nginx called `spawn-fcgi`. If you don't already know how to use it, I suggest you use one of the other modes. * `scgi` for SCGI builds. SCGI is a simplified form of FastCGI, where you run the server as an application service which is proxied by your outside webserver. * `stdio_http` for speaking raw http over stdin and stdout. This is made for systemd services. See [RequestServer.serveSingleHttpConnectionOnStdio] for more information. ) With dmd, use: $(TABLE_ROWS * + Interfaces + (mutually exclusive) * - `-version=plain_cgi` - The default building the module alone without dub - a traditional, plain CGI executable will be generated. * - `-version=embedded_httpd` - A HTTP server will be embedded in the generated executable. This is default when building with dub. * - `-version=fastcgi` - A FastCGI executable will be generated. * - `-version=scgi` - A SCGI (SimpleCGI) executable will be generated. * - `-version=embedded_httpd_hybrid` - A HTTP server that uses a combination of processes, threads, and fibers to better handle large numbers of idle connections. Recommended if you are going to serve websockets in a non-local application. * - `-version=embedded_httpd_threads` - The embedded HTTP server will use a single process with a thread pool. (use instead of plain `embedded_httpd` if you want this specific implementation) * - `-version=embedded_httpd_processes` - The embedded HTTP server will use a prefork style process pool. (use instead of plain `embedded_httpd` if you want this specific implementation) * - `-version=embedded_httpd_processes_accept_after_fork` - It will call accept() in each child process, after forking. This is currently the only option, though I am experimenting with other ideas. You probably should NOT specify this right now. * - `-version=stdio_http` - The embedded HTTP server will be spoken over stdin and stdout. * + Tweaks + (can be used together with others) * - `-version=cgi_with_websocket` - The CGI class has websocket server support. (This is on by default now.) * - `-version=with_openssl` - not currently used * - `-version=cgi_embedded_sessions` - The session server will be embedded in the cgi.d server process * - `-version=cgi_session_server_process` - The session will be provided in a separate process, provided by cgi.d. ) For example, For CGI, `dmd yourfile.d cgi.d` then put the executable in your cgi-bin directory. For FastCGI: `dmd yourfile.d cgi.d -version=fastcgi` and run it. spawn-fcgi helps on nginx. You can put the file in the directory for Apache. On IIS, run it with a port on the command line (this causes it to call FCGX_OpenSocket, which can work on nginx too). For SCGI: `dmd yourfile.d cgi.d -version=scgi` and run the executable, providing a port number on the command line. For an embedded HTTP server, run `dmd yourfile.d cgi.d -version=embedded_httpd` and run the generated program. It listens on port 8085 by default. You can change this on the command line with the --port option when running your program. Simulating_requests: If you are using one of the [GenericMain] or [DispatcherMain] mixins, or main with your own call to [RequestServer.trySimulatedRequest], you can simulate requests from your command line shell. Call the program like this: $(CONSOLE ./yourprogram GET / name=adr ) And it will print the result to stdout instead of running a server, regardless of build more.. CGI_Setup_tips: On Apache, you may do `SetHandler cgi-script` in your `.htaccess` file to set a particular file to be run through the cgi program. Note that all "subdirectories" of it also run the program; if you configure `/foo` to be a cgi script, then going to `/foo/bar` will call your cgi handler function with `cgi.pathInfo == "/bar"`. Overview_Of_Basic_Concepts: cgi.d offers both lower-level handler apis as well as higher-level auto-dispatcher apis. For a lower-level handler function, you'll probably want to review the following functions: Input: [Cgi.get], [Cgi.post], [Cgi.request], [Cgi.files], [Cgi.cookies], [Cgi.pathInfo], [Cgi.requestMethod], and HTTP headers ([Cgi.headers], [Cgi.userAgent], [Cgi.referrer], [Cgi.accept], [Cgi.authorization], [Cgi.lastEventId]) Output: [Cgi.write], [Cgi.header], [Cgi.setResponseStatus], [Cgi.setResponseContentType], [Cgi.gzipResponse] Cookies: [Cgi.setCookie], [Cgi.clearCookie], [Cgi.cookie], [Cgi.cookies] Caching: [Cgi.setResponseExpires], [Cgi.updateResponseExpires], [Cgi.setCache] Redirections: [Cgi.setResponseLocation] Other Information: [Cgi.remoteAddress], [Cgi.https], [Cgi.port], [Cgi.scriptName], [Cgi.requestUri], [Cgi.getCurrentCompleteUri], [Cgi.onRequestBodyDataReceived] Websockets: [Websocket], [websocketRequested], [acceptWebsocket]. For websockets, use the `embedded_httpd_hybrid` build mode for best results, because it is optimized for handling large numbers of idle connections compared to the other build modes. Overriding behavior for special cases streaming input data: see the virtual functions [Cgi.handleIncomingDataChunk], [Cgi.prepareForIncomingDataChunks], [Cgi.cleanUpPostDataState] A basic program using the lower-level api might look like: --- import arsd.cgi; // you write a request handler which always takes a Cgi object void handler(Cgi cgi) { /+ when the user goes to your site, suppose you are being hosted at http://example.com/yourapp If the user goes to http://example.com/yourapp/test?name=value then the url will be parsed out into the following pieces: cgi.pathInfo == "/test". This is everything after yourapp's name. (If you are doing an embedded http server, your app's name is blank, so pathInfo will be the whole path of the url.) cgi.scriptName == "yourapp". With an embedded http server, this will be blank. cgi.host == "example.com" cgi.https == false cgi.queryString == "name=value" (there's also cgi.search, which will be "?name=value", including the ?) The query string is further parsed into the `get` and `getArray` members, so: cgi.get == ["name": "value"], meaning you can do `cgi.get["name"] == "value"` And cgi.getArray == ["name": ["value"]]. Why is there both `get` and `getArray`? The standard allows names to be repeated. This can be very useful, it is how http forms naturally pass multiple items like a set of checkboxes. So `getArray` is the complete data if you need it. But since so often you only care about one value, the `get` member provides more convenient access. We can use these members to process the request and build link urls. Other info from the request are in other members, we'll look at them later. +/ switch(cgi.pathInfo) { // the home page will be a small html form that can set a cookie. case "/": cgi.write(`

`, true); // the , true tells it that this is the one, complete response i want to send, allowing some optimizations. break; // POSTing to this will set a cookie with our submitted name case "/set-cookie": // HTTP has a number of request methods (also called "verbs") to tell // what you should do with the given resource. // The most common are GET and POST, the ones used in html forms. // You can check which one was used with the `cgi.requestMethod` property. if(cgi.requestMethod == Cgi.RequestMethod.POST) { // headers like redirections need to be set before we call `write` cgi.setResponseLocation("read-cookie"); // just like how url params go into cgi.get/getArray, form data submitted in a POST // body go to cgi.post/postArray. Please note that a POST request can also have get // params in addition to post params. // // There's also a convenience function `cgi.request("name")` which checks post first, // then get if it isn't found there, and then returns a default value if it is in neither. if("name" in cgi.post) { // we can set cookies with a method too // again, cookies need to be set before calling `cgi.write`, since they // are a kind of header. cgi.setCookie("name" , cgi.post["name"]); } // the user will probably never see this, since the response location // is an automatic redirect, but it is still best to say something anyway cgi.write("Redirecting you to see the cookie...", true); } else { // you can write out response codes and headers // as well as response bodies // // But always check the cgi docs before using the generic // `header` method - if there is a specific method for your // header, use it before resorting to the generic one to avoid // a header value from being sent twice. cgi.setResponseLocation("405 Method Not Allowed"); // there is no special accept member, so you can use the generic header function cgi.header("Accept: POST"); // but content type does have a method, so prefer to use it: cgi.setResponseContentType("text/plain"); // all the headers are buffered, and will be sent upon the first body // write. you can actually modify some of them before sending if need be. cgi.write("You must use the POST http verb on this resource.", true); } break; // and GETting this will read the cookie back out case "/read-cookie": // I did NOT pass `,true` here because this is writing a partial response. // It is possible to stream data to the user in chunks by writing partial // responses the calling `cgi.flush();` to send the partial response immediately. // normally, you'd only send partial chunks if you have to - it is better to build // a response as a whole and send it as a whole whenever possible - but here I want // to demo that you can. cgi.write("Hello, "); if("name" in cgi.cookies) { import arsd.dom; // dom.d provides a lot of helpers for html // since the cookie is set, we need to write it out properly to // avoid cross-site scripting attacks. // // Getting this stuff right automatically is a benefit of using the higher // level apis, but this demo is to show the fundamental building blocks, so // we're responsible to take care of it. cgi.write(htmlEntitiesEncode(cgi.cookies["name"])); } else { cgi.write("friend"); } // note that I never called cgi.setResponseContentType, since the default is text/html. // it doesn't hurt to do it explicitly though, just remember to do it before any cgi.write // calls. break; default: // no path matched cgi.setResponseStatus("404 Not Found"); cgi.write("Resource not found.", true); } } // and this adds the boilerplate to set up a server according to the // compile version configuration and call your handler as requests come in mixin GenericMain!handler; // the `handler` here is the name of your function --- Even if you plan to always use the higher-level apis, I still recommend you at least familiarize yourself with the lower level functions, since they provide the lightest weight, most flexible options to get down to business if you ever need them. In the lower-level api, the [Cgi] object represents your HTTP transaction. It has functions to describe the request and for you to send your response. It leaves the details of how you o it up to you. The general guideline though is to avoid depending any variables outside your handler function, since there's no guarantee they will survive to another handler. You can use global vars as a lazy initialized cache, but you should always be ready in case it is empty. (One exception: if you use `-version=embedded_httpd_threads -version=cgi_no_fork`, then you can rely on it more, but you should still really write things assuming your function won't have anything survive beyond its return for max scalability and compatibility.) A basic program using the higher-level apis might look like: --- /+ import arsd.cgi; struct LoginData { string currentUser; } class AppClass : WebObject { string foo() {} } mixin DispatcherMain!( "/assets/.serveStaticFileDirectory("assets/", true), // serve the files in the assets subdirectory "/".serveApi!AppClass, "/thing/".serveRestObject, ); +/ --- Guide_for_PHP_users: (Please note: I wrote this section in 2008. A lot of PHP hosts still ran 4.x back then, so it was common to avoid using classes - introduced in php 5 - to maintain compatibility! If you're coming from php more recently, this may not be relevant anymore, but still might help you.) If you are coming from old-style PHP, here's a quick guide to help you get started: $(SIDE_BY_SIDE $(COLUMN ```php ``` ) $(COLUMN --- import arsd.cgi; void app(Cgi cgi) { string foo = cgi.post["foo"]; string bar = cgi.get["bar"]; string baz = cgi.cookies["baz"]; string user_ip = cgi.remoteAddress; string host = cgi.host; string path = cgi.pathInfo; cgi.setCookie("baz", "some value"); cgi.write("hello!"); } mixin GenericMain!app --- ) ) $(H3 Array elements) In PHP, you can give a form element a name like `"something[]"`, and then `$_POST["something"]` gives an array. In D, you can use whatever name you want, and access an array of values with the `cgi.getArray["name"]` and `cgi.postArray["name"]` members. $(H3 Databases) PHP has a lot of stuff in its standard library. cgi.d doesn't include most of these, but the rest of my arsd repository has much of it. For example, to access a MySQL database, download `database.d` and `mysql.d` from my github repo, and try this code (assuming, of course, your database is set up): --- import arsd.cgi; import arsd.mysql; void app(Cgi cgi) { auto database = new MySql("localhost", "username", "password", "database_name"); foreach(row; mysql.query("SELECT count(id) FROM people")) cgi.write(row[0] ~ " people in database"); } mixin GenericMain!app; --- Similar modules are available for PostgreSQL, Microsoft SQL Server, and SQLite databases, implementing the same basic interface. See_Also: You may also want to see [arsd.dom], [arsd.webtemplate], and maybe some functions from my old [arsd.html] for more code for making web applications. dom and webtemplate are used by the higher-level api here in cgi.d. For working with json, try [arsd.jsvar]. [arsd.database], [arsd.mysql], [arsd.postgres], [arsd.mssql], and [arsd.sqlite] can help in accessing databases. If you are looking to access a web application via HTTP, try [arsd.http2]. Copyright: cgi.d copyright 2008-2023, Adam D. Ruppe. Provided under the Boost Software License. Yes, this file is old, and yes, it is still actively maintained and used. +/ module arsd.cgi; // FIXME: Nullable!T can be a checkbox that enables/disables the T on the automatic form // and a SumType!(T, R) can be a radio box to pick between T and R to disclose the extra boxes on the automatic form /++ This micro-example uses the [dispatcher] api to act as a simple http file server, serving files found in the current directory and its children. +/ unittest { import arsd.cgi; mixin DispatcherMain!( "/".serveStaticFileDirectory(null, true) ); } /++ Same as the previous example, but written out long-form without the use of [DispatcherMain] nor [GenericMain]. +/ unittest { import arsd.cgi; void requestHandler(Cgi cgi) { cgi.dispatcher!( "/".serveStaticFileDirectory(null, true) ); } // mixin GenericMain!requestHandler would add this function: void main(string[] args) { // this is all the content of [cgiMainImpl] which you can also call // cgi.d embeds a few add on functions like real time event forwarders // and session servers it can run in other processes. this spawns them, if needed. if(tryAddonServers(args)) return; // cgi.d allows you to easily simulate http requests from the command line, // without actually starting a server. this function will do that. if(trySimulatedRequest!(requestHandler, Cgi)(args)) return; RequestServer server; // you can change the default port here if you like // server.listeningPort = 9000; // then call this to let the command line args override your default server.configureFromCommandLine(args); // here is where you could print out the listeningPort to the user if you wanted // and serve the request(s) according to the compile configuration server.serve!(requestHandler)(); // or you could explicitly choose a serve mode like this: // server.serveEmbeddedHttp!requestHandler(); } } /++ cgi.d has built-in testing helpers too. These will provide mock requests and mock sessions that otherwise run through the rest of the internal mechanisms to call your functions without actually spinning up a server. +/ unittest { import arsd.cgi; void requestHandler(Cgi cgi) { } // D doesn't let me embed a unittest inside an example unittest // so this is a function, but you can do it however in your real program /* unittest */ void runTests() { auto tester = new CgiTester(&requestHandler); auto response = tester.GET("/"); assert(response.code == 200); } } static import std.file; // for a single thread, linear request thing, use: // -version=embedded_httpd_threads -version=cgi_no_threads version(Posix) { version(CRuntime_Musl) { } else version(minimal) { } else { version(GNU) { // GDC doesn't support static foreach so I had to cheat on it :( } else version(FreeBSD) { // I never implemented the fancy stuff there either } else version(OpenBSD) { // Fix issue #2977 - adopt same approach as FreeBSD above } else { version=with_breaking_cgi_features; version=with_sendfd; version=with_addon_servers; } } } version(Windows) { version(minimal) { } else { // not too concerned about gdc here since the mingw version is fairly new as well version=with_breaking_cgi_features; } } void cloexec(int fd) { version(Posix) { import core.sys.posix.fcntl; fcntl(fd, F_SETFD, FD_CLOEXEC); } } void cloexec(Socket s) { version(Posix) { import core.sys.posix.fcntl; fcntl(s.handle, F_SETFD, FD_CLOEXEC); } } version(embedded_httpd_hybrid) { version=embedded_httpd_threads; version(cgi_no_fork) {} else version(Posix) version=cgi_use_fork; version=cgi_use_fiber; } version(cgi_use_fork) enum cgi_use_fork_default = true; else enum cgi_use_fork_default = false; // the servers must know about the connections to talk to them; the interfaces are vital version(with_addon_servers) version=with_addon_servers_connections; version(embedded_httpd) { version(linux) version=embedded_httpd_processes; else { version=embedded_httpd_threads; } /* version(with_openssl) { pragma(lib, "crypto"); pragma(lib, "ssl"); } */ } version(embedded_httpd_processes) version=embedded_httpd_processes_accept_after_fork; // I am getting much better average performance on this, so just keeping it. But the other way MIGHT help keep the variation down so i wanna keep the code to play with later version(embedded_httpd_threads) { // unless the user overrides the default.. version(cgi_session_server_process) {} else version=cgi_embedded_sessions; } version(scgi) { // unless the user overrides the default.. version(cgi_session_server_process) {} else version=cgi_embedded_sessions; } // fall back if the other is not defined so we can cleanly version it below version(cgi_embedded_sessions) {} else version=cgi_session_server_process; version=cgi_with_websocket; enum long defaultMaxContentLength = 5_000_000; /* To do a file download offer in the browser: cgi.setResponseContentType("text/csv"); cgi.header("Content-Disposition: attachment; filename=\"customers.csv\""); */ // FIXME: the location header is supposed to be an absolute url I guess. // FIXME: would be cool to flush part of a dom document before complete // somehow in here and dom.d. // these are public so you can mixin GenericMain. // FIXME: use a function level import instead! public import std.string; public import std.stdio; public import std.conv; import std.concurrency; import std.uri; import std.uni; import std.algorithm.comparison; import std.algorithm.searching; import std.exception; import std.base64; static import std.algorithm; import std.datetime; import std.range; import std.process; import std.zlib; T[] consume(T)(T[] range, int count) { if(count > range.length) count = range.length; return range[count..$]; } int locationOf(T)(T[] data, string item) { const(ubyte[]) d = cast(const(ubyte[])) data; const(ubyte[]) i = cast(const(ubyte[])) item; // this is a vague sanity check to ensure we aren't getting insanely // sized input that will infinite loop below. it should never happen; // even huge file uploads ought to come in smaller individual pieces. if(d.length > (int.max/2)) throw new Exception("excessive block of input"); for(int a = 0; a < d.length; a++) { if(a + i.length > d.length) return -1; if(d[a..a+i.length] == i) return a; } return -1; } /// If you are doing a custom cgi class, mixing this in can take care of /// the required constructors for you mixin template ForwardCgiConstructors() { this(long maxContentLength = defaultMaxContentLength, string[string] env = null, const(ubyte)[] delegate() readdata = null, void delegate(const(ubyte)[]) _rawDataOutput = null, void delegate() _flush = null ) { super(maxContentLength, env, readdata, _rawDataOutput, _flush); } this(string[] args) { super(args); } this( BufferedInputRange inputData, string address, ushort _port, int pathInfoStarts = 0, bool _https = false, void delegate(const(ubyte)[]) _rawDataOutput = null, void delegate() _flush = null, // this pointer tells if the connection is supposed to be closed after we handle this bool* closeConnection = null) { super(inputData, address, _port, pathInfoStarts, _https, _rawDataOutput, _flush, closeConnection); } this(BufferedInputRange ir, bool* closeConnection) { super(ir, closeConnection); } } /// thrown when a connection is closed remotely while we waiting on data from it class ConnectionClosedException : Exception { this(string message, string file = __FILE__, size_t line = __LINE__, Throwable next = null) { super(message, file, line, next); } } version(Windows) { // FIXME: ugly hack to solve stdin exception problems on Windows: // reading stdin results in StdioException (Bad file descriptor) // this is probably due to https://issues.dlang.org/show_bug.cgi?id=3425 private struct stdin { struct ByChunk { // Replicates std.stdio.ByChunk private: ubyte[] chunk_; public: this(size_t size) in { assert(size, "size must be larger than 0"); } do { chunk_ = new ubyte[](size); popFront(); } @property bool empty() const { return !std.stdio.stdin.isOpen || std.stdio.stdin.eof; // Ugly, but seems to do the job } @property nothrow ubyte[] front() { return chunk_; } void popFront() { enforce(!empty, "Cannot call popFront on empty range"); chunk_ = stdin.rawRead(chunk_); } } import core.sys.windows.windows; static: T[] rawRead(T)(T[] buf) { uint bytesRead; auto result = ReadFile(GetStdHandle(STD_INPUT_HANDLE), buf.ptr, cast(int) (buf.length * T.sizeof), &bytesRead, null); if (!result) { auto err = GetLastError(); if (err == 38/*ERROR_HANDLE_EOF*/ || err == 109/*ERROR_BROKEN_PIPE*/) // 'good' errors meaning end of input return buf[0..0]; // Some other error, throw it char* buffer; scope(exit) LocalFree(buffer); // FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100 // FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 FormatMessageA(0x1100, null, err, 0, cast(char*)&buffer, 256, null); throw new Exception(to!string(buffer)); } enforce(!(bytesRead % T.sizeof), "I/O error"); return buf[0..bytesRead / T.sizeof]; } auto byChunk(size_t sz) { return ByChunk(sz); } void close() { std.stdio.stdin.close; } } } /// The main interface with the web request class Cgi { public: /// the methods a request can be enum RequestMethod { GET, HEAD, POST, PUT, DELETE, // GET and POST are the ones that really work // these are defined in the standard, but idk if they are useful for anything OPTIONS, TRACE, CONNECT, // These seem new, I have only recently seen them PATCH, MERGE, // this is an extension for when the method is not specified and you want to assume CommandLine } /+ /++ Cgi provides a per-request memory pool +/ void[] allocateMemory(size_t nBytes) { } /// ditto void[] reallocateMemory(void[] old, size_t nBytes) { } /// ditto void freeMemory(void[] memory) { } +/ /* import core.runtime; auto args = Runtime.args(); we can call the app a few ways: 1) set up the environment variables and call the app (manually simulating CGI) 2) simulate a call automatically: ./app method 'uri' for example: ./app get /path?arg arg2=something Anything on the uri is treated as query string etc on get method, further args are appended to the query string (encoded automatically) on post method, further args are done as post @name means import from file "name". if name == -, it uses stdin (so info=@- means set info to the value of stdin) Other arguments include: --cookie name=value (these are all concated together) --header 'X-Something: cool' --referrer 'something' --port 80 --remote-address some.ip.address.here --https yes --user-agent 'something' --userpass 'user:pass' --authorization 'Basic base64encoded_user:pass' --accept 'content' // FIXME: better example --last-event-id 'something' --host 'something.com' Non-simulation arguments: --port xxx listening port for non-cgi things (valid for the cgi interfaces) --listening-host the ip address the application should listen on, or if you want to use unix domain sockets, it is here you can set them: `--listening-host unix:filename` or, on Linux, `--listening-host abstract:name`. */ /** Initializes it with command line arguments (for easy testing) */ this(string[] args, void delegate(const(ubyte)[]) _rawDataOutput = null) { rawDataOutput = _rawDataOutput; // these are all set locally so the loop works // without triggering errors in dmd 2.064 // we go ahead and set them at the end of it to the this version int port; string referrer; string remoteAddress; string userAgent; string authorization; string origin; string accept; string lastEventId; bool https; string host; RequestMethod requestMethod; string requestUri; string pathInfo; string queryString; bool lookingForMethod; bool lookingForUri; string nextArgIs; string _cookie; string _queryString; string[][string] _post; string[string] _headers; string[] breakUp(string s) { string k, v; auto idx = s.indexOf("="); if(idx == -1) { k = s; } else { k = s[0 .. idx]; v = s[idx + 1 .. $]; } return [k, v]; } lookingForMethod = true; scriptName = args[0]; scriptFileName = args[0]; environmentVariables = cast(const) environment.toAA; foreach(arg; args[1 .. $]) { if(arg.startsWith("--")) { nextArgIs = arg[2 .. $]; } else if(nextArgIs.length) { if (nextArgIs == "cookie") { auto info = breakUp(arg); if(_cookie.length) _cookie ~= "; "; _cookie ~= std.uri.encodeComponent(info[0]) ~ "=" ~ std.uri.encodeComponent(info[1]); } else if (nextArgIs == "port") { port = to!int(arg); } else if (nextArgIs == "referrer") { referrer = arg; } else if (nextArgIs == "remote-address") { remoteAddress = arg; } else if (nextArgIs == "user-agent") { userAgent = arg; } else if (nextArgIs == "authorization") { authorization = arg; } else if (nextArgIs == "userpass") { authorization = "Basic " ~ Base64.encode(cast(immutable(ubyte)[]) (arg)).idup; } else if (nextArgIs == "origin") { origin = arg; } else if (nextArgIs == "accept") { accept = arg; } else if (nextArgIs == "last-event-id") { lastEventId = arg; } else if (nextArgIs == "https") { if(arg == "yes") https = true; } else if (nextArgIs == "header") { string thing, other; auto idx = arg.indexOf(":"); if(idx == -1) throw new Exception("need a colon in a http header"); thing = arg[0 .. idx]; other = arg[idx + 1.. $]; _headers[thing.strip.toLower()] = other.strip; } else if (nextArgIs == "host") { host = arg; } // else // skip, we don't know it but that's ok, it might be used elsewhere so no error nextArgIs = null; } else if(lookingForMethod) { lookingForMethod = false; lookingForUri = true; if(arg.asLowerCase().equal("commandline")) requestMethod = RequestMethod.CommandLine; else requestMethod = to!RequestMethod(arg.toUpper()); } else if(lookingForUri) { lookingForUri = false; requestUri = arg; auto idx = arg.indexOf("?"); if(idx == -1) pathInfo = arg; else { pathInfo = arg[0 .. idx]; _queryString = arg[idx + 1 .. $]; } } else { // it is an argument of some sort if(requestMethod == Cgi.RequestMethod.POST || requestMethod == Cgi.RequestMethod.PATCH || requestMethod == Cgi.RequestMethod.PUT || requestMethod == Cgi.RequestMethod.CommandLine) { auto parts = breakUp(arg); _post[parts[0]] ~= parts[1]; allPostNamesInOrder ~= parts[0]; allPostValuesInOrder ~= parts[1]; } else { if(_queryString.length) _queryString ~= "&"; auto parts = breakUp(arg); _queryString ~= std.uri.encodeComponent(parts[0]) ~ "=" ~ std.uri.encodeComponent(parts[1]); } } } acceptsGzip = false; keepAliveRequested = false; requestHeaders = cast(immutable) _headers; cookie = _cookie; cookiesArray = getCookieArray(); cookies = keepLastOf(cookiesArray); queryString = _queryString; getArray = cast(immutable) decodeVariables(queryString, "&", &allGetNamesInOrder, &allGetValuesInOrder); get = keepLastOf(getArray); postArray = cast(immutable) _post; post = keepLastOf(_post); // FIXME filesArray = null; files = null; isCalledWithCommandLineArguments = true; this.port = port; this.referrer = referrer; this.remoteAddress = remoteAddress; this.userAgent = userAgent; this.authorization = authorization; this.origin = origin; this.accept = accept; this.lastEventId = lastEventId; this.https = https; this.host = host; this.requestMethod = requestMethod; this.requestUri = requestUri; this.pathInfo = pathInfo; this.queryString = queryString; this.postBody = null; } private { string[] allPostNamesInOrder; string[] allPostValuesInOrder; string[] allGetNamesInOrder; string[] allGetValuesInOrder; } CgiConnectionHandle getOutputFileHandle() { return _outputFileHandle; } CgiConnectionHandle _outputFileHandle = INVALID_CGI_CONNECTION_HANDLE; /** Initializes it using a CGI or CGI-like interface */ this(long maxContentLength = defaultMaxContentLength, // use this to override the environment variable listing in string[string] env = null, // and this should return a chunk of data. return empty when done const(ubyte)[] delegate() readdata = null, // finally, use this to do custom output if needed void delegate(const(ubyte)[]) _rawDataOutput = null, // to flush the custom output void delegate() _flush = null ) { // these are all set locally so the loop works // without triggering errors in dmd 2.064 // we go ahead and set them at the end of it to the this version int port; string referrer; string remoteAddress; string userAgent; string authorization; string origin; string accept; string lastEventId; bool https; string host; RequestMethod requestMethod; string requestUri; string pathInfo; string queryString; isCalledWithCommandLineArguments = false; rawDataOutput = _rawDataOutput; flushDelegate = _flush; auto getenv = delegate string(string var) { if(env is null) return std.process.environment.get(var); auto e = var in env; if(e is null) return null; return *e; }; environmentVariables = env is null ? cast(const) environment.toAA : env; // fetching all the request headers string[string] requestHeadersHere; foreach(k, v; env is null ? cast(const) environment.toAA() : env) { if(k.startsWith("HTTP_")) { requestHeadersHere[replace(k["HTTP_".length .. $].toLower(), "_", "-")] = v; } } this.requestHeaders = assumeUnique(requestHeadersHere); requestUri = getenv("REQUEST_URI"); cookie = getenv("HTTP_COOKIE"); cookiesArray = getCookieArray(); cookies = keepLastOf(cookiesArray); referrer = getenv("HTTP_REFERER"); userAgent = getenv("HTTP_USER_AGENT"); remoteAddress = getenv("REMOTE_ADDR"); host = getenv("HTTP_HOST"); pathInfo = getenv("PATH_INFO"); queryString = getenv("QUERY_STRING"); scriptName = getenv("SCRIPT_NAME"); { import core.runtime; auto sfn = getenv("SCRIPT_FILENAME"); scriptFileName = sfn.length ? sfn : (Runtime.args.length ? Runtime.args[0] : null); } bool iis = false; // Because IIS doesn't pass requestUri, we simulate it here if it's empty. if(requestUri.length == 0) { // IIS sometimes includes the script name as part of the path info - we don't want that if(pathInfo.length >= scriptName.length && (pathInfo[0 .. scriptName.length] == scriptName)) pathInfo = pathInfo[scriptName.length .. $]; requestUri = scriptName ~ pathInfo ~ (queryString.length ? ("?" ~ queryString) : ""); iis = true; // FIXME HACK - used in byChunk below - see bugzilla 6339 // FIXME: this works for apache and iis... but what about others? } auto ugh = decodeVariables(queryString, "&", &allGetNamesInOrder, &allGetValuesInOrder); getArray = assumeUnique(ugh); get = keepLastOf(getArray); // NOTE: on apache, you need to specifically forward this authorization = getenv("HTTP_AUTHORIZATION"); // this is a hack because Apache is a shitload of fuck and // refuses to send the real header to us. Compatible // programs should send both the standard and X- versions // NOTE: if you have access to .htaccess or httpd.conf, you can make this // unnecessary with mod_rewrite, so it is commented //if(authorization.length == 0) // if the std is there, use it // authorization = getenv("HTTP_X_AUTHORIZATION"); // the REDIRECT_HTTPS check is here because with an Apache hack, the port can become wrong if(getenv("SERVER_PORT").length && getenv("REDIRECT_HTTPS") != "on") port = to!int(getenv("SERVER_PORT")); else port = 0; // this was probably called from the command line auto ae = getenv("HTTP_ACCEPT_ENCODING"); if(ae.length && ae.indexOf("gzip") != -1) acceptsGzip = true; accept = getenv("HTTP_ACCEPT"); lastEventId = getenv("HTTP_LAST_EVENT_ID"); auto ka = getenv("HTTP_CONNECTION"); if(ka.length && ka.asLowerCase().canFind("keep-alive")) keepAliveRequested = true; auto or = getenv("HTTP_ORIGIN"); origin = or; auto rm = getenv("REQUEST_METHOD"); if(rm.length) requestMethod = to!RequestMethod(getenv("REQUEST_METHOD")); else requestMethod = RequestMethod.CommandLine; // FIXME: hack on REDIRECT_HTTPS; this is there because the work app uses mod_rewrite which loses the https flag! So I set it with [E=HTTPS=%HTTPS] or whatever but then it gets translated to here so i want it to still work. This is arguably wrong but meh. https = (getenv("HTTPS") == "on" || getenv("REDIRECT_HTTPS") == "on"); // FIXME: DOCUMENT_ROOT? // FIXME: what about PUT? if(requestMethod == RequestMethod.POST || requestMethod == Cgi.RequestMethod.PATCH || requestMethod == Cgi.RequestMethod.PUT || requestMethod == Cgi.RequestMethod.CommandLine) { version(preserveData) // a hack to make forwarding simpler immutable(ubyte)[] data; size_t amountReceived = 0; auto contentType = getenv("CONTENT_TYPE"); // FIXME: is this ever not going to be set? I guess it depends // on if the server de-chunks and buffers... seems like it has potential // to be slow if they did that. The spec says it is always there though. // And it has worked reliably for me all year in the live environment, // but some servers might be different. auto cls = getenv("CONTENT_LENGTH"); auto contentLength = to!size_t(cls.length ? cls : "0"); immutable originalContentLength = contentLength; if(contentLength) { if(maxContentLength > 0 && contentLength > maxContentLength) { setResponseStatus("413 Request entity too large"); write("You tried to upload a file that is too large."); close(); throw new Exception("POST too large"); } prepareForIncomingDataChunks(contentType, contentLength); int processChunk(in ubyte[] chunk) { if(chunk.length > contentLength) { handleIncomingDataChunk(chunk[0..contentLength]); amountReceived += contentLength; contentLength = 0; return 1; } else { handleIncomingDataChunk(chunk); contentLength -= chunk.length; amountReceived += chunk.length; } if(contentLength == 0) return 1; onRequestBodyDataReceived(amountReceived, originalContentLength); return 0; } if(readdata is null) { foreach(ubyte[] chunk; stdin.byChunk(iis ? contentLength : 4096)) if(processChunk(chunk)) break; } else { // we have a custom data source.. auto chunk = readdata(); while(chunk.length) { if(processChunk(chunk)) break; chunk = readdata(); } } onRequestBodyDataReceived(amountReceived, originalContentLength); postArray = assumeUnique(pps._post); filesArray = assumeUnique(pps._files); files = keepLastOf(filesArray); post = keepLastOf(postArray); this.postBody = pps.postBody; cleanUpPostDataState(); } version(preserveData) originalPostData = data; } // fixme: remote_user script name this.port = port; this.referrer = referrer; this.remoteAddress = remoteAddress; this.userAgent = userAgent; this.authorization = authorization; this.origin = origin; this.accept = accept; this.lastEventId = lastEventId; this.https = https; this.host = host; this.requestMethod = requestMethod; this.requestUri = requestUri; this.pathInfo = pathInfo; this.queryString = queryString; } /// Cleans up any temporary files. Do not use the object /// after calling this. /// /// NOTE: it is called automatically by GenericMain // FIXME: this should be called if the constructor fails too, if it has created some garbage... void dispose() { foreach(file; files) { if(!file.contentInMemory) if(std.file.exists(file.contentFilename)) std.file.remove(file.contentFilename); } } private { struct PostParserState { string contentType; string boundary; string localBoundary; // the ones used at the end or something lol bool isMultipart; bool needsSavedBody; ulong expectedLength; ulong contentConsumed; immutable(ubyte)[] buffer; // multipart parsing state int whatDoWeWant; bool weHaveAPart; string[] thisOnesHeaders; immutable(ubyte)[] thisOnesData; string postBody; UploadedFile piece; bool isFile = false; size_t memoryCommitted; // do NOT keep mutable references to these anywhere! // I assume they are unique in the constructor once we're all done getting data. string[][string] _post; UploadedFile[][string] _files; } PostParserState pps; } /// This represents a file the user uploaded via a POST request. static struct UploadedFile { /// If you want to create one of these structs for yourself from some data, /// use this function. static UploadedFile fromData(immutable(void)[] data, string name = null) { Cgi.UploadedFile f; f.filename = name; f.content = cast(immutable(ubyte)[]) data; f.contentInMemory = true; return f; } string name; /// The name of the form element. string filename; /// The filename the user set. string contentType; /// The MIME type the user's browser reported. (Not reliable.) /** For small files, cgi.d will buffer the uploaded file in memory, and make it directly accessible to you through the content member. I find this very convenient and somewhat efficient, since it can avoid hitting the disk entirely. (I often want to inspect and modify the file anyway!) I find the file is very large, it is undesirable to eat that much memory just for a file buffer. In those cases, if you pass a large enough value for maxContentLength to the constructor so they are accepted, cgi.d will write the content to a temporary file that you can re-read later. You can override this behavior by subclassing Cgi and overriding the protected handlePostChunk method. Note that the object is not initialized when you write that method - the http headers are available, but the cgi.post method is not. You may parse the file as it streams in using this method. Anyway, if the file is small enough to be in memory, contentInMemory will be set to true, and the content is available in the content member. If not, contentInMemory will be set to false, and the content saved in a file, whose name will be available in the contentFilename member. Tip: if you know you are always dealing with small files, and want the convenience of ignoring this member, construct Cgi with a small maxContentLength. Then, if a large file comes in, it simply throws an exception (and HTTP error response) instead of trying to handle it. The default value of maxContentLength in the constructor is for small files. */ bool contentInMemory = true; // the default ought to always be true immutable(ubyte)[] content; /// The actual content of the file, if contentInMemory == true string contentFilename; /// the file where we dumped the content, if contentInMemory == false. Note that if you want to keep it, you MUST move the file, since otherwise it is considered garbage when cgi is disposed. /// ulong fileSize() { if(contentInMemory) return content.length; import std.file; return std.file.getSize(contentFilename); } /// void writeToFile(string filenameToSaveTo) const { import std.file; if(contentInMemory) std.file.write(filenameToSaveTo, content); else std.file.rename(contentFilename, filenameToSaveTo); } } // given a content type and length, decide what we're going to do with the data.. protected void prepareForIncomingDataChunks(string contentType, ulong contentLength) { pps.expectedLength = contentLength; auto terminator = contentType.indexOf(";"); if(terminator == -1) terminator = contentType.length; pps.contentType = contentType[0 .. terminator]; auto b = contentType[terminator .. $]; if(b.length) { auto idx = b.indexOf("boundary="); if(idx != -1) { pps.boundary = b[idx + "boundary=".length .. $]; pps.localBoundary = "\r\n--" ~ pps.boundary; } } // while a content type SHOULD be sent according to the RFC, it is // not required. We're told we SHOULD guess by looking at the content // but it seems to me that this only happens when it is urlencoded. if(pps.contentType == "application/x-www-form-urlencoded" || pps.contentType == "") { pps.isMultipart = false; pps.needsSavedBody = false; } else if(pps.contentType == "multipart/form-data") { pps.isMultipart = true; enforce(pps.boundary.length, "no boundary"); } else if(pps.contentType == "text/xml") { // FIXME: could this be special and load the post params // save the body so the application can handle it pps.isMultipart = false; pps.needsSavedBody = true; } else if(pps.contentType == "application/json") { // FIXME: this could prolly try to load post params too // save the body so the application can handle it pps.needsSavedBody = true; pps.isMultipart = false; } else { // the rest is 100% handled by the application. just save the body and send it to them pps.needsSavedBody = true; pps.isMultipart = false; } } // handles streaming POST data. If you handle some other content type, you should // override this. If the data isn't the content type you want, you ought to call // super.handleIncomingDataChunk so regular forms and files still work. // FIXME: I do some copying in here that I'm pretty sure is unnecessary, and the // file stuff I'm sure is inefficient. But, my guess is the real bottleneck is network // input anyway, so I'm not going to get too worked up about it right now. protected void handleIncomingDataChunk(const(ubyte)[] chunk) { if(chunk.length == 0) return; assert(chunk.length <= 32 * 1024 * 1024); // we use chunk size as a memory constraint thing, so // if we're passed big chunks, it might throw unnecessarily. // just pass it smaller chunks at a time. if(pps.isMultipart) { // multipart/form-data // FIXME: this might want to be factored out and factorized // need to make sure the stream hooks actually work. void pieceHasNewContent() { // we just grew the piece's buffer. Do we have to switch to file backing? if(pps.piece.contentInMemory) { if(pps.piece.content.length <= 10 * 1024 * 1024) // meh, I'm ok with it. return; else { // this is too big. if(!pps.isFile) throw new Exception("Request entity too large"); // a variable this big is kinda ridiculous, just reject it. else { // a file this large is probably acceptable though... let's use a backing file. pps.piece.contentInMemory = false; // FIXME: say... how do we intend to delete these things? cgi.dispose perhaps. int count = 0; pps.piece.contentFilename = getTempDirectory() ~ "arsd_cgi_uploaded_file_" ~ to!string(getUtcTime()) ~ "-" ~ to!string(count); // odds are this loop will never be entered, but we want it just in case. while(std.file.exists(pps.piece.contentFilename)) { count++; pps.piece.contentFilename = getTempDirectory() ~ "arsd_cgi_uploaded_file_" ~ to!string(getUtcTime()) ~ "-" ~ to!string(count); } // I hope this creates the file pretty quickly, or the loop might be useless... // FIXME: maybe I should write some kind of custom transaction here. std.file.write(pps.piece.contentFilename, pps.piece.content); pps.piece.content = null; } } } else { // it's already in a file, so just append it to what we have if(pps.piece.content.length) { // FIXME: this is surely very inefficient... we'll be calling this by 4kb chunk... std.file.append(pps.piece.contentFilename, pps.piece.content); pps.piece.content = null; } } } void commitPart() { if(!pps.weHaveAPart) return; pieceHasNewContent(); // be sure the new content is handled every time if(pps.isFile) { // I'm not sure if other environments put files in post or not... // I used to not do it, but I think I should, since it is there... pps._post[pps.piece.name] ~= pps.piece.filename; pps._files[pps.piece.name] ~= pps.piece; allPostNamesInOrder ~= pps.piece.name; allPostValuesInOrder ~= pps.piece.filename; } else { pps._post[pps.piece.name] ~= cast(string) pps.piece.content; allPostNamesInOrder ~= pps.piece.name; allPostValuesInOrder ~= cast(string) pps.piece.content; } /* stderr.writeln("RECEIVED: ", pps.piece.name, "=", pps.piece.content.length < 1000 ? to!string(pps.piece.content) : "too long"); */ // FIXME: the limit here pps.memoryCommitted += pps.piece.content.length; pps.weHaveAPart = false; pps.whatDoWeWant = 1; pps.thisOnesHeaders = null; pps.thisOnesData = null; pps.piece = UploadedFile.init; pps.isFile = false; } void acceptChunk() { pps.buffer ~= chunk; chunk = null; // we've consumed it into the buffer, so keeping it just brings confusion } immutable(ubyte)[] consume(size_t howMuch) { pps.contentConsumed += howMuch; auto ret = pps.buffer[0 .. howMuch]; pps.buffer = pps.buffer[howMuch .. $]; return ret; } dataConsumptionLoop: do { switch(pps.whatDoWeWant) { default: assert(0); case 0: acceptChunk(); // the format begins with two extra leading dashes, then we should be at the boundary if(pps.buffer.length < 2) return; assert(pps.buffer[0] == '-', "no leading dash"); consume(1); assert(pps.buffer[0] == '-', "no second leading dash"); consume(1); pps.whatDoWeWant = 1; goto case 1; /* fallthrough */ case 1: // looking for headers // here, we should be lined up right at the boundary, which is followed by a \r\n // want to keep the buffer under control in case we're under attack //stderr.writeln("here once"); //if(pps.buffer.length + chunk.length > 70 * 1024) // they should be < 1 kb really.... // throw new Exception("wtf is up with the huge mime part headers"); acceptChunk(); if(pps.buffer.length < pps.boundary.length) return; // not enough data, since there should always be a boundary here at least if(pps.contentConsumed + pps.boundary.length + 6 == pps.expectedLength) { assert(pps.buffer.length == pps.boundary.length + 4 + 2); // --, --, and \r\n // we *should* be at the end here! assert(pps.buffer[0] == '-'); consume(1); assert(pps.buffer[0] == '-'); consume(1); // the message is terminated by --BOUNDARY--\r\n (after a \r\n leading to the boundary) assert(pps.buffer[0 .. pps.boundary.length] == cast(const(ubyte[])) pps.boundary, "not lined up on boundary " ~ pps.boundary); consume(pps.boundary.length); assert(pps.buffer[0] == '-'); consume(1); assert(pps.buffer[0] == '-'); consume(1); assert(pps.buffer[0] == '\r'); consume(1); assert(pps.buffer[0] == '\n'); consume(1); assert(pps.buffer.length == 0); assert(pps.contentConsumed == pps.expectedLength); break dataConsumptionLoop; // we're done! } else { // we're not done yet. We should be lined up on a boundary. // But, we want to ensure the headers are here before we consume anything! auto headerEndLocation = locationOf(pps.buffer, "\r\n\r\n"); if(headerEndLocation == -1) return; // they *should* all be here, so we can handle them all at once. assert(pps.buffer[0 .. pps.boundary.length] == cast(const(ubyte[])) pps.boundary, "not lined up on boundary " ~ pps.boundary); consume(pps.boundary.length); // the boundary is always followed by a \r\n assert(pps.buffer[0] == '\r'); consume(1); assert(pps.buffer[0] == '\n'); consume(1); } // re-running since by consuming the boundary, we invalidate the old index. auto headerEndLocation = locationOf(pps.buffer, "\r\n\r\n"); assert(headerEndLocation >= 0, "no header"); auto thisOnesHeaders = pps.buffer[0..headerEndLocation]; consume(headerEndLocation + 4); // The +4 is the \r\n\r\n that caps it off pps.thisOnesHeaders = split(cast(string) thisOnesHeaders, "\r\n"); // now we'll parse the headers foreach(h; pps.thisOnesHeaders) { auto p = h.indexOf(":"); assert(p != -1, "no colon in header, got " ~ to!string(pps.thisOnesHeaders)); string hn = h[0..p]; string hv = h[p+2..$]; switch(hn.toLower) { default: assert(0); case "content-disposition": auto info = hv.split("; "); foreach(i; info[1..$]) { // skipping the form-data auto o = i.split("="); // FIXME string pn = o[0]; string pv = o[1][1..$-1]; if(pn == "name") { pps.piece.name = pv; } else if (pn == "filename") { pps.piece.filename = pv; pps.isFile = true; } } break; case "content-type": pps.piece.contentType = hv; break; } } pps.whatDoWeWant++; // move to the next step - the data break; case 2: // when we get here, pps.buffer should contain our first chunk of data if(pps.buffer.length + chunk.length > 8 * 1024 * 1024) // we might buffer quite a bit but not much throw new Exception("wtf is up with the huge mime part buffer"); acceptChunk(); // so the trick is, we want to process all the data up to the boundary, // but what if the chunk's end cuts the boundary off? If we're unsure, we // want to wait for the next chunk. We start by looking for the whole boundary // in the buffer somewhere. auto boundaryLocation = locationOf(pps.buffer, pps.localBoundary); // assert(boundaryLocation != -1, "should have seen "~to!string(cast(ubyte[]) pps.localBoundary)~" in " ~ to!string(pps.buffer)); if(boundaryLocation != -1) { // this is easy - we can see it in it's entirety! pps.piece.content ~= consume(boundaryLocation); assert(pps.buffer[0] == '\r'); consume(1); assert(pps.buffer[0] == '\n'); consume(1); assert(pps.buffer[0] == '-'); consume(1); assert(pps.buffer[0] == '-'); consume(1); // the boundary here is always preceded by \r\n--, which is why we used localBoundary instead of boundary to locate it. Cut that off. pps.weHaveAPart = true; pps.whatDoWeWant = 1; // back to getting headers for the next part commitPart(); // we're done here } else { // we can't see the whole thing, but what if there's a partial boundary? enforce(pps.localBoundary.length < 128); // the boundary ought to be less than a line... assert(pps.localBoundary.length > 1); // should already be sane but just in case bool potentialBoundaryFound = false; boundaryCheck: for(int a = 1; a < pps.localBoundary.length; a++) { // we grow the boundary a bit each time. If we think it looks the // same, better pull another chunk to be sure it's not the end. // Starting small because exiting the loop early is desirable, since // we're not keeping any ambiguity and 1 / 256 chance of exiting is // the best we can do. if(a > pps.buffer.length) break; // FIXME: is this right? assert(a <= pps.buffer.length); assert(a > 0); if(std.algorithm.endsWith(pps.buffer, pps.localBoundary[0 .. a])) { // ok, there *might* be a boundary here, so let's // not treat the end as data yet. The rest is good to // use though, since if there was a boundary there, we'd // have handled it up above after locationOf. pps.piece.content ~= pps.buffer[0 .. $ - a]; consume(pps.buffer.length - a); pieceHasNewContent(); potentialBoundaryFound = true; break boundaryCheck; } } if(!potentialBoundaryFound) { // we can consume the whole thing pps.piece.content ~= pps.buffer; pieceHasNewContent(); consume(pps.buffer.length); } else { // we found a possible boundary, but there was // insufficient data to be sure. assert(pps.buffer == cast(const(ubyte[])) pps.localBoundary[0 .. pps.buffer.length]); return; // wait for the next chunk. } } } } while(pps.buffer.length); // btw all boundaries except the first should have a \r\n before them } else { // application/x-www-form-urlencoded and application/json // not using maxContentLength because that might be cranked up to allow // large file uploads. We can handle them, but a huge post[] isn't any good. if(pps.buffer.length + chunk.length > 8 * 1024 * 1024) // surely this is plenty big enough throw new Exception("wtf is up with such a gigantic form submission????"); pps.buffer ~= chunk; // simple handling, but it works... until someone bombs us with gigabytes of crap at least... if(pps.buffer.length == pps.expectedLength) { if(pps.needsSavedBody) pps.postBody = cast(string) pps.buffer; else pps._post = decodeVariables(cast(string) pps.buffer, "&", &allPostNamesInOrder, &allPostValuesInOrder); version(preserveData) originalPostData = pps.buffer; } else { // just for debugging } } } protected void cleanUpPostDataState() { pps = PostParserState.init; } /// you can override this function to somehow react /// to an upload in progress. /// /// Take note that parts of the CGI object is not yet /// initialized! Stuff from HTTP headers, including get[], is usable. /// But, none of post[] is usable, and you cannot write here. That's /// why this method is const - mutating the object won't do much anyway. /// /// My idea here was so you can output a progress bar or /// something to a cooperative client (see arsd.rtud for a potential helper) /// /// The default is to do nothing. Subclass cgi and use the /// CustomCgiMain mixin to do something here. void onRequestBodyDataReceived(size_t receivedSoFar, size_t totalExpected) const { // This space intentionally left blank. } /// Initializes the cgi from completely raw HTTP data. The ir must have a Socket source. /// *closeConnection will be set to true if you should close the connection after handling this request this(BufferedInputRange ir, bool* closeConnection) { isCalledWithCommandLineArguments = false; import al = std.algorithm; immutable(ubyte)[] data; void rdo(const(ubyte)[] d) { //import std.stdio; writeln(d); sendAll(ir.source, d); } auto ira = ir.source.remoteAddress(); auto irLocalAddress = ir.source.localAddress(); ushort port = 80; if(auto ia = cast(InternetAddress) irLocalAddress) { port = ia.port; } else if(auto ia = cast(Internet6Address) irLocalAddress) { port = ia.port; } // that check for UnixAddress is to work around a Phobos bug // see: https://github.com/dlang/phobos/pull/7383 // but this might be more useful anyway tbh for this case version(Posix) this(ir, ira is null ? null : cast(UnixAddress) ira ? "unix:" : ira.toString(), port, 0, false, &rdo, null, closeConnection); else this(ir, ira is null ? null : ira.toString(), port, 0, false, &rdo, null, closeConnection); } /** Initializes it from raw HTTP request data. GenericMain uses this when you compile with -version=embedded_httpd. NOTE: If you are behind a reverse proxy, the values here might not be what you expect.... it will use X-Forwarded-For for remote IP and X-Forwarded-Host for host Params: inputData = the incoming data, including headers and other raw http data. When the constructor exits, it will leave this range exactly at the start of the next request on the connection (if there is one). address = the IP address of the remote user _port = the port number of the connection pathInfoStarts = the offset into the path component of the http header where the SCRIPT_NAME ends and the PATH_INFO begins. _https = if this connection is encrypted (note that the input data must not actually be encrypted) _rawDataOutput = delegate to accept response data. It should write to the socket or whatever; Cgi does all the needed processing to speak http. _flush = if _rawDataOutput buffers, this delegate should flush the buffer down the wire closeConnection = if the request asks to close the connection, *closeConnection == true. */ this( BufferedInputRange inputData, // string[] headers, immutable(ubyte)[] data, string address, ushort _port, int pathInfoStarts = 0, // use this if you know the script name, like if this is in a folder in a bigger web environment bool _https = false, void delegate(const(ubyte)[]) _rawDataOutput = null, void delegate() _flush = null, // this pointer tells if the connection is supposed to be closed after we handle this bool* closeConnection = null) { // these are all set locally so the loop works // without triggering errors in dmd 2.064 // we go ahead and set them at the end of it to the this version int port; string referrer; string remoteAddress; string userAgent; string authorization; string origin; string accept; string lastEventId; bool https; string host; RequestMethod requestMethod; string requestUri; string pathInfo; string queryString; string scriptName; string[string] get; string[][string] getArray; bool keepAliveRequested; bool acceptsGzip; string cookie; environmentVariables = cast(const) environment.toAA; idlol = inputData; isCalledWithCommandLineArguments = false; https = _https; port = _port; rawDataOutput = _rawDataOutput; flushDelegate = _flush; nph = true; remoteAddress = address; // streaming parser import al = std.algorithm; // FIXME: tis cast is technically wrong, but Phobos deprecated al.indexOf... for some reason. auto idx = indexOf(cast(string) inputData.front(), "\r\n\r\n"); while(idx == -1) { inputData.popFront(0); idx = indexOf(cast(string) inputData.front(), "\r\n\r\n"); } assert(idx != -1); string contentType = ""; string[string] requestHeadersHere; size_t contentLength; bool isChunked; { import core.runtime; scriptFileName = Runtime.args.length ? Runtime.args[0] : null; } int headerNumber = 0; foreach(line; al.splitter(inputData.front()[0 .. idx], "\r\n")) if(line.length) { headerNumber++; auto header = cast(string) line.idup; if(headerNumber == 1) { // request line auto parts = al.splitter(header, " "); requestMethod = to!RequestMethod(parts.front); parts.popFront(); requestUri = parts.front; // FIXME: the requestUri could be an absolute path!!! should I rename it or something? scriptName = requestUri[0 .. pathInfoStarts]; auto question = requestUri.indexOf("?"); if(question == -1) { queryString = ""; // FIXME: double check, this might be wrong since it could be url encoded pathInfo = requestUri[pathInfoStarts..$]; } else { queryString = requestUri[question+1..$]; pathInfo = requestUri[pathInfoStarts..question]; } auto ugh = decodeVariables(queryString, "&", &allGetNamesInOrder, &allGetValuesInOrder); getArray = cast(string[][string]) assumeUnique(ugh); if(header.indexOf("HTTP/1.0") != -1) { http10 = true; autoBuffer = true; if(closeConnection) { // on http 1.0, close is assumed (unlike http/1.1 where we assume keep alive) *closeConnection = true; } } } else { // other header auto colon = header.indexOf(":"); if(colon == -1) throw new Exception("HTTP headers should have a colon!"); string name = header[0..colon].toLower; string value = header[colon+2..$]; // skip the colon and the space requestHeadersHere[name] = value; if (name == "accept") { accept = value; } else if (name == "origin") { origin = value; } else if (name == "connection") { if(value == "close" && closeConnection) *closeConnection = true; if(value.asLowerCase().canFind("keep-alive")) { keepAliveRequested = true; // on http 1.0, the connection is closed by default, // but not if they request keep-alive. then we don't close // anymore - undoing the set above if(http10 && closeConnection) { *closeConnection = false; } } } else if (name == "transfer-encoding") { if(value == "chunked") isChunked = true; } else if (name == "last-event-id") { lastEventId = value; } else if (name == "authorization") { authorization = value; } else if (name == "content-type") { contentType = value; } else if (name == "content-length") { contentLength = to!size_t(value); } else if (name == "x-forwarded-for") { remoteAddress = value; } else if (name == "x-forwarded-host" || name == "host") { if(name != "host" || host is null) host = value; } // FIXME: https://tools.ietf.org/html/rfc7239 else if (name == "accept-encoding") { if(value.indexOf("gzip") != -1) acceptsGzip = true; } else if (name == "user-agent") { userAgent = value; } else if (name == "referer") { referrer = value; } else if (name == "cookie") { cookie ~= value; } else if(name == "expect") { if(value == "100-continue") { // FIXME we should probably give user code a chance // to process and reject but that needs to be virtual, // perhaps part of the CGI redesign. // FIXME: if size is > max content length it should // also fail at this point. _rawDataOutput(cast(ubyte[]) "HTTP/1.1 100 Continue\r\n\r\n"); // FIXME: let the user write out 103 early hints too } } // else // ignore it } } inputData.consume(idx + 4); // done requestHeaders = assumeUnique(requestHeadersHere); ByChunkRange dataByChunk; // reading Content-Length type data // We need to read up the data we have, and write it out as a chunk. if(!isChunked) { dataByChunk = byChunk(inputData, contentLength); } else { // chunked requests happen, but not every day. Since we need to know // the content length (for now, maybe that should change), we'll buffer // the whole thing here instead of parse streaming. (I think this is what Apache does anyway in cgi modes) auto data = dechunk(inputData); // set the range here dataByChunk = byChunk(data); contentLength = data.length; } assert(dataByChunk !is null); if(contentLength) { prepareForIncomingDataChunks(contentType, contentLength); foreach(dataChunk; dataByChunk) { handleIncomingDataChunk(dataChunk); } postArray = assumeUnique(pps._post); filesArray = assumeUnique(pps._files); files = keepLastOf(filesArray); post = keepLastOf(postArray); postBody = pps.postBody; cleanUpPostDataState(); } this.port = port; this.referrer = referrer; this.remoteAddress = remoteAddress; this.userAgent = userAgent; this.authorization = authorization; this.origin = origin; this.accept = accept; this.lastEventId = lastEventId; this.https = https; this.host = host; this.requestMethod = requestMethod; this.requestUri = requestUri; this.pathInfo = pathInfo; this.queryString = queryString; this.scriptName = scriptName; this.get = keepLastOf(getArray); this.getArray = cast(immutable) getArray; this.keepAliveRequested = keepAliveRequested; this.acceptsGzip = acceptsGzip; this.cookie = cookie; cookiesArray = getCookieArray(); cookies = keepLastOf(cookiesArray); } BufferedInputRange idlol; private immutable(string[string]) keepLastOf(in string[][string] arr) { string[string] ca; foreach(k, v; arr) ca[k] = v[$-1]; return assumeUnique(ca); } // FIXME duplication private immutable(UploadedFile[string]) keepLastOf(in UploadedFile[][string] arr) { UploadedFile[string] ca; foreach(k, v; arr) ca[k] = v[$-1]; return assumeUnique(ca); } private immutable(string[][string]) getCookieArray() { auto forTheLoveOfGod = decodeVariables(cookie, "; "); return assumeUnique(forTheLoveOfGod); } /// Very simple method to require a basic auth username and password. /// If the http request doesn't include the required credentials, it throws a /// HTTP 401 error, and an exception. /// /// Note: basic auth does not provide great security, especially over unencrypted HTTP; /// the user's credentials are sent in plain text on every request. /// /// If you are using Apache, the HTTP_AUTHORIZATION variable may not be sent to the /// application. Either use Apache's built in methods for basic authentication, or add /// something along these lines to your server configuration: /// /// RewriteEngine On /// RewriteCond %{HTTP:Authorization} ^(.*) /// RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] /// /// To ensure the necessary data is available to cgi.d. void requireBasicAuth(string user, string pass, string message = null) { if(authorization != "Basic " ~ Base64.encode(cast(immutable(ubyte)[]) (user ~ ":" ~ pass))) { setResponseStatus("401 Authorization Required"); header ("WWW-Authenticate: Basic realm=\""~message~"\""); close(); throw new Exception("Not authorized; got " ~ authorization); } } /// Very simple caching controls - setCache(false) means it will never be cached. Good for rapidly updated or sensitive sites. /// setCache(true) means it will always be cached for as long as possible. Best for static content. /// Use setResponseExpires and updateResponseExpires for more control void setCache(bool allowCaching) { noCache = !allowCaching; } /// Set to true and use cgi.write(data, true); to send a gzipped response to browsers /// who can accept it bool gzipResponse; immutable bool acceptsGzip; immutable bool keepAliveRequested; /// Set to true if and only if this was initialized with command line arguments immutable bool isCalledWithCommandLineArguments; /// This gets a full url for the current request, including port, protocol, host, path, and query string getCurrentCompleteUri() const { ushort defaultPort = https ? 443 : 80; string uri = "http"; if(https) uri ~= "s"; uri ~= "://"; uri ~= host; /+ // the host has the port so p sure this never needed, cgi on apache and embedded http all do the right thing now version(none) if(!(!port || port == defaultPort)) { uri ~= ":"; uri ~= to!string(port); } +/ uri ~= requestUri; return uri; } /// You can override this if your site base url isn't the same as the script name string logicalScriptName() const { return scriptName; } /++ Sets the HTTP status of the response. For example, "404 File Not Found" or "500 Internal Server Error". It assumes "200 OK", and automatically changes to "302 Found" if you call setResponseLocation(). Note setResponseStatus() must be called *before* you write() any data to the output. History: The `int` overload was added on January 11, 2021. +/ void setResponseStatus(string status) { assert(!outputtedResponseData); responseStatus = status; } /// ditto void setResponseStatus(int statusCode) { setResponseStatus(getHttpCodeText(statusCode)); } private string responseStatus = null; /// Returns true if it is still possible to output headers bool canOutputHeaders() { return !isClosed && !outputtedResponseData; } /// Sets the location header, which the browser will redirect the user to automatically. /// Note setResponseLocation() must be called *before* you write() any data to the output. /// The optional important argument is used if it's a default suggestion rather than something to insist upon. void setResponseLocation(string uri, bool important = true, string status = null) { if(!important && isCurrentResponseLocationImportant) return; // important redirects always override unimportant ones if(uri is null) { responseStatus = "200 OK"; responseLocation = null; isCurrentResponseLocationImportant = important; return; // this just cancels the redirect } assert(!outputtedResponseData); if(status is null) responseStatus = "302 Found"; else responseStatus = status; responseLocation = uri.strip; isCurrentResponseLocationImportant = important; } protected string responseLocation = null; private bool isCurrentResponseLocationImportant = false; /// Sets the Expires: http header. See also: updateResponseExpires, setPublicCaching /// The parameter is in unix_timestamp * 1000. Try setResponseExpires(getUTCtime() + SOME AMOUNT) for normal use. /// Note: the when parameter is different than setCookie's expire parameter. void setResponseExpires(long when, bool isPublic = false) { responseExpires = when; setCache(true); // need to enable caching so the date has meaning responseIsPublic = isPublic; responseExpiresRelative = false; } /// Sets a cache-control max-age header for whenFromNow, in seconds. void setResponseExpiresRelative(int whenFromNow, bool isPublic = false) { responseExpires = whenFromNow; setCache(true); // need to enable caching so the date has meaning responseIsPublic = isPublic; responseExpiresRelative = true; } private long responseExpires = long.min; private bool responseIsPublic = false; private bool responseExpiresRelative = false; /// This is like setResponseExpires, but it can be called multiple times. The setting most in the past is the one kept. /// If you have multiple functions, they all might call updateResponseExpires about their own return value. The program /// output as a whole is as cacheable as the least cacheable part in the chain. /// setCache(false) always overrides this - it is, by definition, the strictest anti-cache statement available. If your site outputs sensitive user data, you should probably call setCache(false) when you do, to ensure no other functions will cache the content, as it may be a privacy risk. /// Conversely, setting here overrides setCache(true), since any expiration date is in the past of infinity. void updateResponseExpires(long when, bool isPublic) { if(responseExpires == long.min) setResponseExpires(when, isPublic); else if(when < responseExpires) setResponseExpires(when, responseIsPublic && isPublic); // if any part of it is private, it all is } /* /// Set to true if you want the result to be cached publicly - that is, is the content shared? /// Should generally be false if the user is logged in. It assumes private cache only. /// setCache(true) also turns on public caching, and setCache(false) sets to private. void setPublicCaching(bool allowPublicCaches) { publicCaching = allowPublicCaches; } private bool publicCaching = false; */ /++ History: Added January 11, 2021 +/ enum SameSitePolicy { Lax, Strict, None } /++ Sets an HTTP cookie, automatically encoding the data to the correct string. expiresIn is how many milliseconds in the future the cookie will expire. TIP: to make a cookie accessible from subdomains, set the domain to .yourdomain.com. Note setCookie() must be called *before* you write() any data to the output. History: Parameter `sameSitePolicy` was added on January 11, 2021. +/ void setCookie(string name, string data, long expiresIn = 0, string path = null, string domain = null, bool httpOnly = false, bool secure = false, SameSitePolicy sameSitePolicy = SameSitePolicy.Lax) { assert(!outputtedResponseData); string cookie = std.uri.encodeComponent(name) ~ "="; cookie ~= std.uri.encodeComponent(data); if(path !is null) cookie ~= "; path=" ~ path; // FIXME: should I just be using max-age here? (also in cache below) if(expiresIn != 0) cookie ~= "; expires=" ~ printDate(cast(DateTime) Clock.currTime(UTC()) + dur!"msecs"(expiresIn)); if(domain !is null) cookie ~= "; domain=" ~ domain; if(secure == true) cookie ~= "; Secure"; if(httpOnly == true ) cookie ~= "; HttpOnly"; final switch(sameSitePolicy) { case SameSitePolicy.Lax: cookie ~= "; SameSite=Lax"; break; case SameSitePolicy.Strict: cookie ~= "; SameSite=Strict"; break; case SameSitePolicy.None: cookie ~= "; SameSite=None"; assert(secure); // cookie spec requires this now, see: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite break; } if(auto idx = name in cookieIndexes) { responseCookies[*idx] = cookie; } else { cookieIndexes[name] = responseCookies.length; responseCookies ~= cookie; } } private string[] responseCookies; private size_t[string] cookieIndexes; /// Clears a previously set cookie with the given name, path, and domain. void clearCookie(string name, string path = null, string domain = null) { assert(!outputtedResponseData); setCookie(name, "", 1, path, domain); } /// Sets the content type of the response, for example "text/html" (the default) for HTML, or "image/png" for a PNG image void setResponseContentType(string ct) { assert(!outputtedResponseData); responseContentType = ct; } private string responseContentType = null; /// Adds a custom header. It should be the name: value, but without any line terminator. /// For example: header("X-My-Header: Some value"); /// Note you should use the specialized functions in this object if possible to avoid /// duplicates in the output. void header(string h) { customHeaders ~= h; } /++ I named the original function `header` after PHP, but this pattern more fits the rest of the Cgi object. Either name are allowed. History: Alias added June 17, 2022. +/ alias setResponseHeader = header; private string[] customHeaders; private bool websocketMode; void flushHeaders(const(void)[] t, bool isAll = false) { StackBuffer buffer = StackBuffer(0); prepHeaders(t, isAll, &buffer); if(rawDataOutput !is null) rawDataOutput(cast(const(ubyte)[]) buffer.get()); else { stdout.rawWrite(buffer.get()); } } private void prepHeaders(const(void)[] t, bool isAll, StackBuffer* buffer) { string terminator = "\n"; if(rawDataOutput !is null) terminator = "\r\n"; if(responseStatus !is null) { if(nph) { if(http10) buffer.add("HTTP/1.0 ", responseStatus, terminator); else buffer.add("HTTP/1.1 ", responseStatus, terminator); } else buffer.add("Status: ", responseStatus, terminator); } else if (nph) { if(http10) buffer.add("HTTP/1.0 200 OK", terminator); else buffer.add("HTTP/1.1 200 OK", terminator); } if(websocketMode) goto websocket; if(nph) { // we're responsible for setting the date too according to http 1.1 char[29] db = void; printDateToBuffer(cast(DateTime) Clock.currTime(UTC()), db[]); buffer.add("Date: ", db[], terminator); } // FIXME: what if the user wants to set his own content-length? // The custom header function can do it, so maybe that's best. // Or we could reuse the isAll param. if(responseLocation !is null) { buffer.add("Location: ", responseLocation, terminator); } if(!noCache && responseExpires != long.min) { // an explicit expiration date is set if(responseExpiresRelative) { buffer.add("Cache-Control: ", responseIsPublic ? "public" : "private", ", max-age="); buffer.add(responseExpires); buffer.add(", no-cache=\"set-cookie, set-cookie2\"", terminator); } else { auto expires = SysTime(unixTimeToStdTime(cast(int)(responseExpires / 1000)), UTC()); char[29] db = void; printDateToBuffer(cast(DateTime) expires, db[]); buffer.add("Expires: ", db[], terminator); // FIXME: assuming everything is private unless you use nocache - generally right for dynamic pages, but not necessarily buffer.add("Cache-Control: ", (responseIsPublic ? "public" : "private"), ", no-cache=\"set-cookie, set-cookie2\""); buffer.add(terminator); } } if(responseCookies !is null && responseCookies.length > 0) { foreach(c; responseCookies) buffer.add("Set-Cookie: ", c, terminator); } if(noCache) { // we specifically do not want caching (this is actually the default) buffer.add("Cache-Control: private, no-cache=\"set-cookie\"", terminator); buffer.add("Expires: 0", terminator); buffer.add("Pragma: no-cache", terminator); } else { if(responseExpires == long.min) { // caching was enabled, but without a date set - that means assume cache forever buffer.add("Cache-Control: public", terminator); buffer.add("Expires: Tue, 31 Dec 2030 14:00:00 GMT", terminator); // FIXME: should not be more than one year in the future } } if(responseContentType !is null) { buffer.add("Content-Type: ", responseContentType, terminator); } else buffer.add("Content-Type: text/html; charset=utf-8", terminator); if(gzipResponse && acceptsGzip && isAll) { // FIXME: isAll really shouldn't be necessary buffer.add("Content-Encoding: gzip", terminator); } if(!isAll) { if(nph && !http10) { buffer.add("Transfer-Encoding: chunked", terminator); responseChunked = true; } } else { buffer.add("Content-Length: "); buffer.add(t.length); buffer.add(terminator); if(nph && keepAliveRequested) { buffer.add("Connection: Keep-Alive", terminator); } } websocket: foreach(hd; customHeaders) buffer.add(hd, terminator); // FIXME: what about duplicated headers? // end of header indicator buffer.add(terminator); outputtedResponseData = true; } /// Writes the data to the output, flushing headers if they have not yet been sent. void write(const(void)[] t, bool isAll = false, bool maybeAutoClose = true) { assert(!closed, "Output has already been closed"); StackBuffer buffer = StackBuffer(0); if(gzipResponse && acceptsGzip && isAll) { // FIXME: isAll really shouldn't be necessary // actually gzip the data here auto c = new Compress(HeaderFormat.gzip); // want gzip auto data = c.compress(t); data ~= c.flush(); // std.file.write("/tmp/last-item", data); t = data; } if(!outputtedResponseData && (!autoBuffer || isAll)) { prepHeaders(t, isAll, &buffer); } if(requestMethod != RequestMethod.HEAD && t.length > 0) { if (autoBuffer && !isAll) { outputBuffer ~= cast(ubyte[]) t; } if(!autoBuffer || isAll) { if(rawDataOutput !is null) if(nph && responseChunked) { //rawDataOutput(makeChunk(cast(const(ubyte)[]) t)); // we're making the chunk here instead of in a function // to avoid unneeded gc pressure buffer.add(toHex(t.length)); buffer.add("\r\n"); buffer.add(cast(char[]) t, "\r\n"); } else { buffer.add(cast(char[]) t); } else buffer.add(cast(char[]) t); } } if(rawDataOutput !is null) rawDataOutput(cast(const(ubyte)[]) buffer.get()); else stdout.rawWrite(buffer.get()); if(maybeAutoClose && isAll) close(); // if you say it is all, that means we're definitely done // maybeAutoClose can be false though to avoid this (important if you call from inside close()! } /++ Convenience method to set content type to json and write the string as the complete response. History: Added January 16, 2020 +/ void writeJson(string json) { this.setResponseContentType("application/json"); this.write(json, true); } /// Flushes the pending buffer, leaving the connection open so you can send more. void flush() { if(rawDataOutput is null) stdout.flush(); else if(flushDelegate !is null) flushDelegate(); } version(autoBuffer) bool autoBuffer = true; else bool autoBuffer = false; ubyte[] outputBuffer; /// Flushes the buffers to the network, signifying that you are done. /// You should always call this explicitly when you are done outputting data. void close() { if(closed) return; // don't double close if(!outputtedResponseData) write("", true, false); // writing auto buffered data if(requestMethod != RequestMethod.HEAD && autoBuffer) { if(!nph) stdout.rawWrite(outputBuffer); else write(outputBuffer, true, false); // tell it this is everything } // closing the last chunk... if(nph && rawDataOutput !is null && responseChunked) rawDataOutput(cast(const(ubyte)[]) "0\r\n\r\n"); if(flushDelegate) flushDelegate(); closed = true; } // Closes without doing anything, shouldn't be used often void rawClose() { closed = true; } /++ Gets a request variable as a specific type, or the default value of it isn't there or isn't convertible to the request type. Checks both GET and POST variables, preferring the POST variable, if available. A nice trick is using the default value to choose the type: --- /* The return value will match the type of the default. Here, I gave 10 as a default, so the return value will be an int. If the user-supplied value cannot be converted to the requested type, you will get the default value back. */ int a = cgi.request("number", 10); if(cgi.get["number"] == "11") assert(a == 11); // conversion succeeds if("number" !in cgi.get) assert(a == 10); // no value means you can't convert - give the default if(cgi.get["number"] == "twelve") assert(a == 10); // conversion from string to int would fail, so we get the default --- You can use an enum as an easy whitelist, too: --- enum Operations { add, remove, query } auto op = cgi.request("op", Operations.query); if(cgi.get["op"] == "add") assert(op == Operations.add); if(cgi.get["op"] == "remove") assert(op == Operations.remove); if(cgi.get["op"] == "query") assert(op == Operations.query); if(cgi.get["op"] == "random string") assert(op == Operations.query); // the value can't be converted to the enum, so we get the default --- +/ T request(T = string)(in string name, in T def = T.init) const nothrow { try { return (name in post) ? to!T(post[name]) : (name in get) ? to!T(get[name]) : def; } catch(Exception e) { return def; } } /// Is the output already closed? bool isClosed() const { return closed; } /++ Gets a session object associated with the `cgi` request. You can use different type throughout your application. +/ Session!Data getSessionObject(Data)() { if(testInProcess !is null) { // test mode auto obj = testInProcess.getSessionOverride(typeid(typeof(return))); if(obj !is null) return cast(typeof(return)) obj; else { auto o = new MockSession!Data(); testInProcess.setSessionOverride(typeid(typeof(return)), o); return o; } } else { // normal operation return new BasicDataServerSession!Data(this); } } // if it is in test mode; triggers mock sessions. Used by CgiTester version(with_breaking_cgi_features) private CgiTester testInProcess; /* Hooks for redirecting input and output */ private void delegate(const(ubyte)[]) rawDataOutput = null; private void delegate() flushDelegate = null; /* This info is used when handling a more raw HTTP protocol */ private bool nph; private bool http10; private bool closed; private bool responseChunked = false; version(preserveData) // note: this can eat lots of memory; don't use unless you're sure you need it. immutable(ubyte)[] originalPostData; /++ This holds the posted body data if it has not been parsed into [post] and [postArray]. It is intended to be used for JSON and XML request content types, but also may be used for other content types your application can handle. But it will NOT be populated for content types application/x-www-form-urlencoded or multipart/form-data, since those are parsed into the post and postArray members. Remember that anything beyond your `maxContentLength` param when setting up [GenericMain], etc., will be discarded to the client with an error. This helps keep this array from being exploded in size and consuming all your server's memory (though it may still be possible to eat excess ram from a concurrent client in certain build modes.) History: Added January 5, 2021 Documented February 21, 2023 (dub v11.0) +/ public immutable string postBody; alias postJson = postBody; // old name /* Internal state flags */ private bool outputtedResponseData; private bool noCache = true; const(string[string]) environmentVariables; /** What follows is data gotten from the HTTP request. It is all fully immutable, partially because it logically is (your code doesn't change what the user requested...) and partially because I hate how bad programs in PHP change those superglobals to do all kinds of hard to follow ugliness. I don't want that to ever happen in D. For some of these, you'll want to refer to the http or cgi specs for more details. */ immutable(string[string]) requestHeaders; /// All the raw headers in the request as name/value pairs. The name is stored as all lower case, but otherwise the same as it is in HTTP; words separated by dashes. For example, "cookie" or "accept-encoding". Many HTTP headers have specialized variables below for more convenience and static name checking; you should generally try to use them. immutable(char[]) host; /// The hostname in the request. If one program serves multiple domains, you can use this to differentiate between them. immutable(char[]) origin; /// The origin header in the request, if present. Some HTML5 cross-domain apis set this and you should check it on those cross domain requests and websockets. immutable(char[]) userAgent; /// The browser's user-agent string. Can be used to identify the browser. immutable(char[]) pathInfo; /// This is any stuff sent after your program's name on the url, but before the query string. For example, suppose your program is named "app". If the user goes to site.com/app, pathInfo is empty. But, he can also go to site.com/app/some/sub/path; treating your program like a virtual folder. In this case, pathInfo == "/some/sub/path". immutable(char[]) scriptName; /// The full base path of your program, as seen by the user. If your program is located at site.com/programs/apps, scriptName == "/programs/apps". immutable(char[]) scriptFileName; /// The physical filename of your script immutable(char[]) authorization; /// The full authorization string from the header, undigested. Useful for implementing auth schemes such as OAuth 1.0. Note that some web servers do not forward this to the app without taking extra steps. See requireBasicAuth's comment for more info. immutable(char[]) accept; /// The HTTP accept header is the user agent telling what content types it is willing to accept. This is often */*; they accept everything, so it's not terribly useful. (The similar sounding Accept-Encoding header is handled automatically for chunking and gzipping. Simply set gzipResponse = true and cgi.d handles the details, zipping if the user's browser is willing to accept it.) immutable(char[]) lastEventId; /// The HTML 5 draft includes an EventSource() object that connects to the server, and remains open to take a stream of events. My arsd.rtud module can help with the server side part of that. The Last-Event-Id http header is defined in the draft to help handle loss of connection. When the browser reconnects to you, it sets this header to the last event id it saw, so you can catch it up. This member has the contents of that header. immutable(RequestMethod) requestMethod; /// The HTTP request verb: GET, POST, etc. It is represented as an enum in cgi.d (which, like many enums, you can convert back to string with std.conv.to()). A HTTP GET is supposed to, according to the spec, not have side effects; a user can GET something over and over again and always have the same result. On all requests, the get[] and getArray[] members may be filled in. The post[] and postArray[] members are only filled in on POST methods. immutable(char[]) queryString; /// The unparsed content of the request query string - the stuff after the ? in your URL. See get[] and getArray[] for a parse view of it. Sometimes, the unparsed string is useful though if you want a custom format of data up there (probably not a good idea, unless it is really simple, like "?username" perhaps.) immutable(char[]) cookie; /// The unparsed content of the Cookie: header in the request. See also the cookies[string] member for a parsed view of the data. /** The Referer header from the request. (It is misspelled in the HTTP spec, and thus the actual request and cgi specs too, but I spelled the word correctly here because that's sane. The spec's misspelling is an implementation detail.) It contains the site url that referred the user to your program; the site that linked to you, or if you're serving images, the site that has you as an image. Also, if you're in an iframe, the referrer is the site that is framing you. Important note: if the user copy/pastes your url, this is blank, and, just like with all other user data, their browsers can also lie to you. Don't rely on it for real security. */ immutable(char[]) referrer; immutable(char[]) requestUri; /// The full url if the current request, excluding the protocol and host. requestUri == scriptName ~ pathInfo ~ (queryString.length ? "?" ~ queryString : ""); immutable(char[]) remoteAddress; /// The IP address of the user, as we see it. (Might not match the IP of the user's computer due to things like proxies and NAT.) immutable bool https; /// Was the request encrypted via https? immutable int port; /// On what TCP port number did the server receive the request? /** Here come the parsed request variables - the things that come close to PHP's _GET, _POST, etc. superglobals in content. */ immutable(string[string]) get; /// The data from your query string in the url, only showing the last string of each name. If you want to handle multiple values with the same name, use getArray. This only works right if the query string is x-www-form-urlencoded; the default you see on the web with name=value pairs separated by the & character. immutable(string[string]) post; /// The data from the request's body, on POST requests. It parses application/x-www-form-urlencoded data (used by most web requests, including typical forms), and multipart/form-data requests (used by file uploads on web forms) into the same container, so you can always access them the same way. It makes no attempt to parse other content types. If you want to accept an XML Post body (for a web api perhaps), you'll need to handle the raw data yourself. immutable(string[string]) cookies; /// Separates out the cookie header into individual name/value pairs (which is how you set them!) /** Represents user uploaded files. When making a file upload form, be sure to follow the standard: set method="POST" and enctype="multipart/form-data" in your html
tag attributes. The key into this array is the name attribute on your input tag, just like with other post variables. See the comments on the UploadedFile struct for more information about the data inside, including important notes on max size and content location. */ immutable(UploadedFile[][string]) filesArray; immutable(UploadedFile[string]) files; /// Use these if you expect multiple items submitted with the same name. btw, assert(get[name] is getArray[name][$-1); should pass. Same for post and cookies. /// the order of the arrays is the order the data arrives immutable(string[][string]) getArray; /// like get, but an array of values per name immutable(string[][string]) postArray; /// ditto for post immutable(string[][string]) cookiesArray; /// ditto for cookies // convenience function for appending to a uri without extra ? // matches the name and effect of javascript's location.search property string search() const { if(queryString.length) return "?" ~ queryString; return ""; } // FIXME: what about multiple files with the same name? private: //RequestMethod _requestMethod; } /// use this for testing or other isolated things when you want it to be no-ops Cgi dummyCgi(Cgi.RequestMethod method = Cgi.RequestMethod.GET, string url = null, in ubyte[] data = null, void delegate(const(ubyte)[]) outputSink = null) { // we want to ignore, not use stdout if(outputSink is null) outputSink = delegate void(const(ubyte)[]) { }; string[string] env; env["REQUEST_METHOD"] = to!string(method); env["CONTENT_LENGTH"] = to!string(data.length); auto cgi = new Cgi( 0, env, { return data; }, outputSink, null); return cgi; } /++ A helper test class for request handler unittests. +/ version(with_breaking_cgi_features) class CgiTester { private { SessionObject[TypeInfo] mockSessions; SessionObject getSessionOverride(TypeInfo ti) { if(auto o = ti in mockSessions) return *o; else return null; } void setSessionOverride(TypeInfo ti, SessionObject so) { mockSessions[ti] = so; } } /++ Gets (and creates if necessary) a mock session object for this test. Note it will be the same one used for any test operations through this CgiTester instance. +/ Session!Data getSessionObject(Data)() { auto obj = getSessionOverride(typeid(typeof(return))); if(obj !is null) return cast(typeof(return)) obj; else { auto o = new MockSession!Data(); setSessionOverride(typeid(typeof(return)), o); return o; } } /++ Pass a reference to your request handler when creating the tester. +/ this(void function(Cgi) requestHandler) { this.requestHandler = requestHandler; } /++ You can check response information with these methods after you call the request handler. +/ struct Response { int code; string[string] headers; string responseText; ubyte[] responseBody; } /++ Executes a test request on your request handler, and returns the response. Params: url = The URL to test. Should be an absolute path, but excluding domain. e.g. `"/test"`. args = additional arguments. Same format as cgi's command line handler. +/ Response GET(string url, string[] args = null) { return executeTest("GET", url, args); } /// ditto Response POST(string url, string[] args = null) { return executeTest("POST", url, args); } /// ditto Response executeTest(string method, string url, string[] args) { ubyte[] outputtedRawData; void outputSink(const(ubyte)[] data) { outputtedRawData ~= data; } auto cgi = new Cgi(["test", method, url] ~ args, &outputSink); cgi.testInProcess = this; scope(exit) cgi.dispose(); requestHandler(cgi); cgi.close(); Response response; if(outputtedRawData.length) { enum LINE = "\r\n"; auto idx = outputtedRawData.locationOf(LINE ~ LINE); assert(idx != -1, to!string(outputtedRawData)); auto headers = cast(string) outputtedRawData[0 .. idx]; response.code = 200; while(headers.length) { auto i = headers.locationOf(LINE); if(i == -1) i = cast(int) headers.length; auto header = headers[0 .. i]; auto c = header.locationOf(":"); if(c != -1) { auto name = header[0 .. c]; auto value = header[c + 2 ..$]; if(name == "Status") response.code = value[0 .. value.locationOf(" ")].to!int; response.headers[name] = value; } else { assert(0); } if(i != headers.length) i += 2; headers = headers[i .. $]; } response.responseBody = outputtedRawData[idx + 4 .. $]; response.responseText = cast(string) response.responseBody; } return response; } private void function(Cgi) requestHandler; } // should this be a separate module? Probably, but that's a hassle. /// Makes a data:// uri that can be used as links in most newer browsers (IE8+). string makeDataUrl(string mimeType, in void[] data) { auto data64 = Base64.encode(cast(const(ubyte[])) data); return "data:" ~ mimeType ~ ";base64," ~ assumeUnique(data64); } // FIXME: I don't think this class correctly decodes/encodes the individual parts /// Represents a url that can be broken down or built up through properties struct Uri { alias toString this; // blargh idk a url really is a string, but should it be implicit? // scheme//userinfo@host:port/path?query#fragment string scheme; /// e.g. "http" in "http://example.com/" string userinfo; /// the username (and possibly a password) in the uri string host; /// the domain name int port; /// port number, if given. Will be zero if a port was not explicitly given string path; /// e.g. "/folder/file.html" in "http://example.com/folder/file.html" string query; /// the stuff after the ? in a uri string fragment; /// the stuff after the # in a uri. // idk if i want to keep these, since the functions they wrap are used many, many, many times in existing code, so this is either an unnecessary alias or a gratuitous break of compatibility // the decode ones need to keep different names anyway because we can't overload on return values... static string encode(string s) { return std.uri.encodeComponent(s); } static string encode(string[string] s) { return encodeVariables(s); } static string encode(string[][string] s) { return encodeVariables(s); } /// Breaks down a uri string to its components this(string uri) { reparse(uri); } private void reparse(string uri) { // from RFC 3986 // the ctRegex triples the compile time and makes ugly errors for no real benefit // it was a nice experiment but just not worth it. // enum ctr = ctRegex!r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"; /* Captures: 0 = whole url 1 = scheme, with : 2 = scheme, no : 3 = authority, with // 4 = authority, no // 5 = path 6 = query string, with ? 7 = query string, no ? 8 = anchor, with # 9 = anchor, no # */ // Yikes, even regular, non-CT regex is also unacceptably slow to compile. 1.9s on my computer! // instead, I will DIY and cut that down to 0.6s on the same computer. /* Note that authority is user:password@domain:port where the user:password@ part is optional, and the :port is optional. Regex translation: Scheme cannot have :, /, ?, or # in it, and must have one or more chars and end in a :. It is optional, but must be first. Authority must start with //, but cannot have any other /, ?, or # in it. It is optional. Path cannot have any ? or # in it. It is optional. Query must start with ? and must not have # in it. It is optional. Anchor must start with # and can have anything else in it to end of string. It is optional. */ this = Uri.init; // reset all state // empty uri = nothing special if(uri.length == 0) { return; } size_t idx; scheme_loop: foreach(char c; uri[idx .. $]) { switch(c) { case ':': case '/': case '?': case '#': break scheme_loop; default: } idx++; } if(idx == 0 && uri[idx] == ':') { // this is actually a path! we skip way ahead goto path_loop; } if(idx == uri.length) { // the whole thing is a path, apparently path = uri; return; } if(idx > 0 && uri[idx] == ':') { scheme = uri[0 .. idx]; idx++; } else { // we need to rewind; it found a / but no :, so the whole thing is prolly a path... idx = 0; } if(idx + 2 < uri.length && uri[idx .. idx + 2] == "//") { // we have an authority.... idx += 2; auto authority_start = idx; authority_loop: foreach(char c; uri[idx .. $]) { switch(c) { case '/': case '?': case '#': break authority_loop; default: } idx++; } auto authority = uri[authority_start .. idx]; auto idx2 = authority.indexOf("@"); if(idx2 != -1) { userinfo = authority[0 .. idx2]; authority = authority[idx2 + 1 .. $]; } if(authority.length && authority[0] == '[') { // ipv6 address special casing idx2 = authority.indexOf(']'); if(idx2 != -1) { auto end = authority[idx2 + 1 .. $]; if(end.length && end[0] == ':') idx2 = idx2 + 1; else idx2 = -1; } } else { idx2 = authority.indexOf(":"); } if(idx2 == -1) { port = 0; // 0 means not specified; we should use the default for the scheme host = authority; } else { host = authority[0 .. idx2]; if(idx2 + 1 < authority.length) port = to!int(authority[idx2 + 1 .. $]); else port = 0; } } path_loop: auto path_start = idx; foreach(char c; uri[idx .. $]) { if(c == '?' || c == '#') break; idx++; } path = uri[path_start .. idx]; if(idx == uri.length) return; // nothing more to examine... if(uri[idx] == '?') { idx++; auto query_start = idx; foreach(char c; uri[idx .. $]) { if(c == '#') break; idx++; } query = uri[query_start .. idx]; } if(idx < uri.length && uri[idx] == '#') { idx++; fragment = uri[idx .. $]; } // uriInvalidated = false; } private string rebuildUri() const { string ret; if(scheme.length) ret ~= scheme ~ ":"; if(userinfo.length || host.length) ret ~= "//"; if(userinfo.length) ret ~= userinfo ~ "@"; if(host.length) ret ~= host; if(port) ret ~= ":" ~ to!string(port); ret ~= path; if(query.length) ret ~= "?" ~ query; if(fragment.length) ret ~= "#" ~ fragment; // uri = ret; // uriInvalidated = false; return ret; } /// Converts the broken down parts back into a complete string string toString() const { // if(uriInvalidated) return rebuildUri(); } /// Returns a new absolute Uri given a base. It treats this one as /// relative where possible, but absolute if not. (If protocol, domain, or /// other info is not set, the new one inherits it from the base.) /// /// Browsers use a function like this to figure out links in html. Uri basedOn(in Uri baseUrl) const { Uri n = this; // copies if(n.scheme == "data") return n; // n.uriInvalidated = true; // make sure we regenerate... // userinfo is not inherited... is this wrong? // if anything is given in the existing url, we don't use the base anymore. if(n.scheme.empty) { n.scheme = baseUrl.scheme; if(n.host.empty) { n.host = baseUrl.host; if(n.port == 0) { n.port = baseUrl.port; if(n.path.length > 0 && n.path[0] != '/') { auto b = baseUrl.path[0 .. baseUrl.path.lastIndexOf("/") + 1]; if(b.length == 0) b = "/"; n.path = b ~ n.path; } else if(n.path.length == 0) { n.path = baseUrl.path; } } } } n.removeDots(); return n; } void removeDots() { auto parts = this.path.split("/"); string[] toKeep; foreach(part; parts) { if(part == ".") { continue; } else if(part == "..") { //if(toKeep.length > 1) toKeep = toKeep[0 .. $-1]; //else //toKeep = [""]; continue; } else { //if(toKeep.length && toKeep[$-1].length == 0 && part.length == 0) //continue; // skip a `//` situation toKeep ~= part; } } auto path = toKeep.join("/"); if(path.length && path[0] != '/') path = "/" ~ path; this.path = path; } unittest { auto uri = Uri("test.html"); assert(uri.path == "test.html"); uri = Uri("path/1/lol"); assert(uri.path == "path/1/lol"); uri = Uri("http://me@example.com"); assert(uri.scheme == "http"); assert(uri.userinfo == "me"); assert(uri.host == "example.com"); uri = Uri("http://example.com/#a"); assert(uri.scheme == "http"); assert(uri.host == "example.com"); assert(uri.fragment == "a"); uri = Uri("#foo"); assert(uri.fragment == "foo"); uri = Uri("?lol"); assert(uri.query == "lol"); uri = Uri("#foo?lol"); assert(uri.fragment == "foo?lol"); uri = Uri("?lol#foo"); assert(uri.fragment == "foo"); assert(uri.query == "lol"); uri = Uri("http://127.0.0.1/"); assert(uri.host == "127.0.0.1"); assert(uri.port == 0); uri = Uri("http://127.0.0.1:123/"); assert(uri.host == "127.0.0.1"); assert(uri.port == 123); uri = Uri("http://[ff:ff::0]/"); assert(uri.host == "[ff:ff::0]"); uri = Uri("http://[ff:ff::0]:123/"); assert(uri.host == "[ff:ff::0]"); assert(uri.port == 123); } // This can sometimes be a big pain in the butt for me, so lots of copy/paste here to cover // the possibilities. unittest { auto url = Uri("cool.html"); // checking relative links assert(url.basedOn(Uri("http://test.com/what/test.html")) == "http://test.com/what/cool.html"); assert(url.basedOn(Uri("https://test.com/what/test.html")) == "https://test.com/what/cool.html"); assert(url.basedOn(Uri("http://test.com/what/")) == "http://test.com/what/cool.html"); assert(url.basedOn(Uri("http://test.com/")) == "http://test.com/cool.html"); assert(url.basedOn(Uri("http://test.com")) == "http://test.com/cool.html"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b")) == "http://test.com/what/cool.html"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b&c=d")) == "http://test.com/what/cool.html"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b&c=d#what")) == "http://test.com/what/cool.html"); assert(url.basedOn(Uri("http://test.com")) == "http://test.com/cool.html"); url = Uri("/something/cool.html"); // same server, different path assert(url.basedOn(Uri("http://test.com/what/test.html")) == "http://test.com/something/cool.html"); assert(url.basedOn(Uri("https://test.com/what/test.html")) == "https://test.com/something/cool.html"); assert(url.basedOn(Uri("http://test.com/what/")) == "http://test.com/something/cool.html"); assert(url.basedOn(Uri("http://test.com/")) == "http://test.com/something/cool.html"); assert(url.basedOn(Uri("http://test.com")) == "http://test.com/something/cool.html"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b")) == "http://test.com/something/cool.html"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b&c=d")) == "http://test.com/something/cool.html"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b&c=d#what")) == "http://test.com/something/cool.html"); assert(url.basedOn(Uri("http://test.com")) == "http://test.com/something/cool.html"); url = Uri("?query=answer"); // same path. server, protocol, and port, just different query string and fragment assert(url.basedOn(Uri("http://test.com/what/test.html")) == "http://test.com/what/test.html?query=answer"); assert(url.basedOn(Uri("https://test.com/what/test.html")) == "https://test.com/what/test.html?query=answer"); assert(url.basedOn(Uri("http://test.com/what/")) == "http://test.com/what/?query=answer"); assert(url.basedOn(Uri("http://test.com/")) == "http://test.com/?query=answer"); assert(url.basedOn(Uri("http://test.com")) == "http://test.com?query=answer"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b")) == "http://test.com/what/test.html?query=answer"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b&c=d")) == "http://test.com/what/test.html?query=answer"); assert(url.basedOn(Uri("http://test.com/what/test.html?a=b&c=d#what")) == "http://test.com/what/test.html?query=answer"); assert(url.basedOn(Uri("http://test.com")) == "http://test.com?query=answer"); url = Uri("/test/bar"); assert(Uri("./").basedOn(url) == "/test/", Uri("./").basedOn(url)); assert(Uri("../").basedOn(url) == "/"); url = Uri("http://example.com/"); assert(Uri("../foo").basedOn(url) == "http://example.com/foo"); //auto uriBefore = url; url = Uri("#anchor"); // everything should remain the same except the anchor //uriBefore.anchor = "anchor"); //assert(url == uriBefore); url = Uri("//example.com"); // same protocol, but different server. the path here should be blank. url = Uri("//example.com/example.html"); // same protocol, but different server and path url = Uri("http://example.com/test.html"); // completely absolute link should never be modified url = Uri("http://example.com"); // completely absolute link should never be modified, even if it has no path // FIXME: add something for port too } // these are like javascript's location.search and location.hash string search() const { return query.length ? ("?" ~ query) : ""; } string hash() const { return fragment.length ? ("#" ~ fragment) : ""; } } /* for session, see web.d */ /// breaks down a url encoded string string[][string] decodeVariables(string data, string separator = "&", string[]* namesInOrder = null, string[]* valuesInOrder = null) { auto vars = data.split(separator); string[][string] _get; foreach(var; vars) { auto equal = var.indexOf("="); string name; string value; if(equal == -1) { name = decodeComponent(var); value = ""; } else { //_get[decodeComponent(var[0..equal])] ~= decodeComponent(var[equal + 1 .. $].replace("+", " ")); // stupid + -> space conversion. name = decodeComponent(var[0..equal].replace("+", " ")); value = decodeComponent(var[equal + 1 .. $].replace("+", " ")); } _get[name] ~= value; if(namesInOrder) (*namesInOrder) ~= name; if(valuesInOrder) (*valuesInOrder) ~= value; } return _get; } /// breaks down a url encoded string, but only returns the last value of any array string[string] decodeVariablesSingle(string data) { string[string] va; auto varArray = decodeVariables(data); foreach(k, v; varArray) va[k] = v[$-1]; return va; } /// url encodes the whole string string encodeVariables(in string[string] data) { string ret; bool outputted = false; foreach(k, v; data) { if(outputted) ret ~= "&"; else outputted = true; ret ~= std.uri.encodeComponent(k) ~ "=" ~ std.uri.encodeComponent(v); } return ret; } /// url encodes a whole string string encodeVariables(in string[][string] data) { string ret; bool outputted = false; foreach(k, arr; data) { foreach(v; arr) { if(outputted) ret ~= "&"; else outputted = true; ret ~= std.uri.encodeComponent(k) ~ "=" ~ std.uri.encodeComponent(v); } } return ret; } /// Encodes all but the explicitly unreserved characters per rfc 3986 /// Alphanumeric and -_.~ are the only ones left unencoded /// name is borrowed from php string rawurlencode(in char[] data) { string ret; ret.reserve(data.length * 2); foreach(char c; data) { if( (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.' || c == '~') { ret ~= c; } else { ret ~= '%'; // since we iterate on char, this should give us the octets of the full utf8 string ret ~= toHexUpper(c); } } return ret; } // http helper functions // for chunked responses (which embedded http does whenever possible) version(none) // this is moved up above to avoid making a copy of the data const(ubyte)[] makeChunk(const(ubyte)[] data) { const(ubyte)[] ret; ret = cast(const(ubyte)[]) toHex(data.length); ret ~= cast(const(ubyte)[]) "\r\n"; ret ~= data; ret ~= cast(const(ubyte)[]) "\r\n"; return ret; } string toHex(long num) { string ret; while(num) { int v = num % 16; num /= 16; char d = cast(char) ((v < 10) ? v + '0' : (v-10) + 'a'); ret ~= d; } return to!string(array(ret.retro)); } string toHexUpper(long num) { string ret; while(num) { int v = num % 16; num /= 16; char d = cast(char) ((v < 10) ? v + '0' : (v-10) + 'A'); ret ~= d; } if(ret.length == 1) ret ~= "0"; // url encoding requires two digits and that's what this function is used for... return to!string(array(ret.retro)); } // the generic mixins /++ Use this instead of writing your own main It ultimately calls [cgiMainImpl] which creates a [RequestServer] for you. +/ mixin template GenericMain(alias fun, long maxContentLength = defaultMaxContentLength) { mixin CustomCgiMain!(Cgi, fun, maxContentLength); } /++ Boilerplate mixin for a main function that uses the [dispatcher] function. You can send `typeof(null)` as the `Presenter` argument to use a generic one. History: Added July 9, 2021 +/ mixin template DispatcherMain(Presenter, DispatcherArgs...) { /++ Handler to the generated presenter you can use from your objects, etc. +/ Presenter activePresenter; /++ Request handler that creates the presenter then forwards to the [dispatcher] function. Renders 404 if the dispatcher did not handle the request. Will automatically serve the presenter.style and presenter.script as "style.css" and "script.js" +/ void handler(Cgi cgi) { auto presenter = new Presenter; activePresenter = presenter; scope(exit) activePresenter = null; if(cgi.dispatcher!DispatcherArgs(presenter)) return; switch(cgi.pathInfo) { case "/style.css": cgi.setCache(true); cgi.setResponseContentType("text/css"); cgi.write(presenter.style(), true); break; case "/script.js": cgi.setCache(true); cgi.setResponseContentType("application/javascript"); cgi.write(presenter.script(), true); break; default: presenter.renderBasicError(cgi, 404); } } mixin GenericMain!handler; } mixin template DispatcherMain(DispatcherArgs...) if(!is(DispatcherArgs[0] : WebPresenter!T, T)) { class GenericPresenter : WebPresenter!GenericPresenter {} mixin DispatcherMain!(GenericPresenter, DispatcherArgs); } private string simpleHtmlEncode(string s) { return s.replace("&", "&").replace("<", "<").replace(">", ">").replace("\n", "
\n"); } string messageFromException(Throwable t) { string message; if(t !is null) { debug message = t.toString(); else message = "An unexpected error has occurred."; } else { message = "Unknown error"; } return message; } string plainHttpError(bool isCgi, string type, Throwable t) { auto message = messageFromException(t); message = simpleHtmlEncode(message); return format("%s %s\r\nContent-Length: %s\r\n\r\n%s", isCgi ? "Status:" : "HTTP/1.0", type, message.length, message); } // returns true if we were able to recover reasonably bool handleException(Cgi cgi, Throwable t) { if(cgi.isClosed) { // if the channel has been explicitly closed, we can't handle it here return true; } if(cgi.outputtedResponseData) { // the headers are sent, but the channel is open... since it closes if all was sent, we can append an error message here. return false; // but I don't want to, since I don't know what condition the output is in; I don't want to inject something (nor check the content-type for that matter. So we say it was not a clean handling. } else { // no headers are sent, we can send a full blown error and recover cgi.setCache(false); cgi.setResponseContentType("text/html"); cgi.setResponseLocation(null); // cancel the redirect cgi.setResponseStatus("500 Internal Server Error"); cgi.write(simpleHtmlEncode(messageFromException(t))); cgi.close(); return true; } } bool isCgiRequestMethod(string s) { s = s.toUpper(); if(s == "COMMANDLINE") return true; foreach(member; __traits(allMembers, Cgi.RequestMethod)) if(s == member) return true; return false; } /// If you want to use a subclass of Cgi with generic main, use this mixin. mixin template CustomCgiMain(CustomCgi, alias fun, long maxContentLength = defaultMaxContentLength) if(is(CustomCgi : Cgi)) { // kinda hacky - the T... is passed to Cgi's constructor in standard cgi mode, and ignored elsewhere void main(string[] args) { cgiMainImpl!(fun, CustomCgi, maxContentLength)(args); } } version(embedded_httpd_processes) __gshared int processPoolSize = 8; // Returns true if run. You should exit the program after that. bool tryAddonServers(string[] args) { if(args.length > 1) { // run the special separate processes if needed switch(args[1]) { case "--websocket-server": version(with_addon_servers) websocketServers[args[2]](args[3 .. $]); else printf("Add-on servers not compiled in.\n"); return true; case "--websocket-servers": import core.demangle; version(with_addon_servers_connections) foreach(k, v; websocketServers) writeln(k, "\t", demangle(k)); return true; case "--session-server": version(with_addon_servers) runSessionServer(); else printf("Add-on servers not compiled in.\n"); return true; case "--event-server": version(with_addon_servers) runEventServer(); else printf("Add-on servers not compiled in.\n"); return true; case "--timer-server": version(with_addon_servers) runTimerServer(); else printf("Add-on servers not compiled in.\n"); return true; case "--timed-jobs": import core.demangle; version(with_addon_servers_connections) foreach(k, v; scheduledJobHandlers) writeln(k, "\t", demangle(k)); return true; case "--timed-job": scheduledJobHandlers[args[2]](args[3 .. $]); return true; default: // intentionally blank - do nothing and carry on to run normally } } return false; } /// Tries to simulate a request from the command line. Returns true if it does, false if it didn't find the args. bool trySimulatedRequest(alias fun, CustomCgi = Cgi)(string[] args) if(is(CustomCgi : Cgi)) { // we support command line thing for easy testing everywhere // it needs to be called ./app method uri [other args...] if(args.length >= 3 && isCgiRequestMethod(args[1])) { Cgi cgi = new CustomCgi(args); scope(exit) cgi.dispose(); fun(cgi); cgi.close(); return true; } return false; } /++ A server control and configuration struct, as a potential alternative to calling [GenericMain] or [cgiMainImpl]. See the source of [cgiMainImpl] to an example of how you can use it. History: Added Sept 26, 2020 (release version 8.5). +/ struct RequestServer { /// string listeningHost = defaultListeningHost(); /// ushort listeningPort = defaultListeningPort(); /++ Uses a fork() call, if available, to provide additional crash resiliency and possibly improved performance. On the other hand, if you fork, you must not assume any memory is shared between requests (you shouldn't be anyway though! But if you have to, you probably want to set this to false and use an explicit threaded server with [serveEmbeddedHttp]) and [stop] may not work as well. History: Added August 12, 2022 (dub v10.9). Previously, this was only configurable through the `-version=cgi_no_fork` argument to dmd. That version still defines the value of `cgi_use_fork_default`, used to initialize this, for compatibility. +/ bool useFork = cgi_use_fork_default; /++ Determines the number of worker threads to spawn per process, for server modes that use worker threads. 0 will use a default based on the number of cpus modified by the server mode. History: Added August 12, 2022 (dub v10.9) +/ int numberOfThreads = 0; /// this(string defaultHost, ushort defaultPort) { this.listeningHost = defaultHost; this.listeningPort = defaultPort; } /// this(ushort defaultPort) { listeningPort = defaultPort; } /++ Reads the command line arguments into the values here. Possible arguments are `--listening-host`, `--listening-port` (or `--port`), `--uid`, and `--gid`. +/ void configureFromCommandLine(string[] args) { bool foundPort = false; bool foundHost = false; bool foundUid = false; bool foundGid = false; foreach(arg; args) { if(foundPort) { listeningPort = to!ushort(arg); foundPort = false; } if(foundHost) { listeningHost = arg; foundHost = false; } if(foundUid) { privilegesDropToUid = to!uid_t(arg); foundUid = false; } if(foundGid) { privilegesDropToGid = to!gid_t(arg); foundGid = false; } if(arg == "--listening-host" || arg == "-h" || arg == "/listening-host") foundHost = true; else if(arg == "--port" || arg == "-p" || arg == "/port" || arg == "--listening-port") foundPort = true; else if(arg == "--uid") foundUid = true; else if(arg == "--gid") foundGid = true; } } version(Windows) { private alias uid_t = int; private alias gid_t = int; } /// user (uid) to drop privileges to /// 0 … do nothing uid_t privilegesDropToUid = 0; /// group (gid) to drop privileges to /// 0 … do nothing gid_t privilegesDropToGid = 0; private void dropPrivileges() { version(Posix) { import core.sys.posix.unistd; if (privilegesDropToGid != 0 && setgid(privilegesDropToGid) != 0) throw new Exception("Dropping privileges via setgid() failed."); if (privilegesDropToUid != 0 && setuid(privilegesDropToUid) != 0) throw new Exception("Dropping privileges via setuid() failed."); } else { // FIXME: Windows? //pragma(msg, "Dropping privileges is not implemented for this platform"); } // done, set zero privilegesDropToGid = 0; privilegesDropToUid = 0; } /++ Serves a single HTTP request on this thread, with an embedded server, then stops. Designed for cases like embedded oauth responders History: Added Oct 10, 2020. Example: --- import arsd.cgi; void main() { RequestServer server = RequestServer("127.0.0.1", 6789); string oauthCode; string oauthScope; server.serveHttpOnce!((cgi) { oauthCode = cgi.request("code"); oauthScope = cgi.request("scope"); cgi.write("Thank you, please return to the application."); }); // use the code and scope given } --- +/ void serveHttpOnce(alias fun, CustomCgi = Cgi, long maxContentLength = defaultMaxContentLength)() { import std.socket; bool tcp; void delegate() cleanup; auto socket = startListening(listeningHost, listeningPort, tcp, cleanup, 1, &dropPrivileges); auto connection = socket.accept(); doThreadHttpConnectionGuts!(CustomCgi, fun, true)(connection); if(cleanup) cleanup(); } /++ Starts serving requests according to the current configuration. +/ void serve(alias fun, CustomCgi = Cgi, long maxContentLength = defaultMaxContentLength)() { version(netman_httpd) { // Obsolete! import arsd.httpd; // what about forwarding the other constructor args? // this probably needs a whole redoing... serveHttp!CustomCgi(&fun, listeningPort);//5005); return; } else version(embedded_httpd_processes) { serveEmbeddedHttpdProcesses!(fun, CustomCgi)(this); } else version(embedded_httpd_threads) { serveEmbeddedHttp!(fun, CustomCgi, maxContentLength)(); } else version(scgi) { serveScgi!(fun, CustomCgi, maxContentLength)(); } else version(fastcgi) { serveFastCgi!(fun, CustomCgi, maxContentLength)(this); } else version(stdio_http) { serveSingleHttpConnectionOnStdio!(fun, CustomCgi, maxContentLength)(); } else { //version=plain_cgi; handleCgiRequest!(fun, CustomCgi, maxContentLength)(); } } /++ Runs the embedded HTTP thread server specifically, regardless of which build configuration you have. If you want the forking worker process server, you do need to compile with the embedded_httpd_processes config though. +/ shared void serveEmbeddedHttp(alias fun, T, CustomCgi = Cgi, long maxContentLength = defaultMaxContentLength)(shared T _this) { globalStopFlag = false; static if(__traits(isStaticFunction, fun)) void funToUse(CustomCgi cgi) { fun(_this, cgi); } else void funToUse(CustomCgi cgi) { static if(__VERSION__ > 2097) __traits(child, _inst_this, fun)(_inst_this, cgi); else static assert(0, "Not implemented in your compiler version!"); } auto manager = new ListeningConnectionManager(listeningHost, listeningPort, &doThreadHttpConnection!(CustomCgi, funToUse), null, useFork, numberOfThreads); manager.listen(); } /++ Runs the embedded SCGI server specifically, regardless of which build configuration you have. +/ void serveScgi(alias fun, CustomCgi = Cgi, long maxContentLength = defaultMaxContentLength)() { globalStopFlag = false; auto manager = new ListeningConnectionManager(listeningHost, listeningPort, &doThreadScgiConnection!(CustomCgi, fun, maxContentLength), null, useFork, numberOfThreads); manager.listen(); } /++ Serves a single "connection", but the connection is spoken on stdin and stdout instead of on a socket. Intended for cases like working from systemd, like discussed here: [https://forum.dlang.org/post/avmkfdiitirnrenzljwc@forum.dlang.org] History: Added May 29, 2021 +/ void serveSingleHttpConnectionOnStdio(alias fun, CustomCgi = Cgi, long maxContentLength = defaultMaxContentLength)() { doThreadHttpConnectionGuts!(CustomCgi, fun, true)(new FakeSocketForStdin()); } /++ The [stop] function sets a flag that request handlers can (and should) check periodically. If a handler doesn't respond to this flag, the library will force the issue. This determines when and how the issue will be forced. +/ enum ForceStop { /++ Stops accepting new requests, but lets ones already in the queue start and complete before exiting. +/ afterQueuedRequestsComplete, /++ Finishes requests already started their handlers, but drops any others in the queue. Streaming handlers should cooperate and exit gracefully, but if they don't, it will continue waiting for them. +/ afterCurrentRequestsComplete, /++ Partial response writes will throw an exception, cancelling any streaming response, but complete writes will continue to process. Request handlers that respect the stop token will also gracefully cancel. +/ cancelStreamingRequestsEarly, /++ All writes will throw. +/ cancelAllRequestsEarly, /++ Use OS facilities to forcibly kill running threads. The server process will be in an undefined state after this call (if this call ever returns). +/ forciblyTerminate, } version(embedded_httpd_processes) {} else /++ Stops serving after the current requests are completed. Bugs: Not implemented on version=embedded_httpd_processes, version=fastcgi on any system, or embedded_httpd on Windows (it does work on embedded_httpd_hybrid on Windows however). Only partially implemented on non-Linux posix systems. You might also try SIGINT perhaps. The stopPriority is not yet fully implemented. +/ static void stop(ForceStop stopPriority = ForceStop.afterCurrentRequestsComplete) { globalStopFlag = true; version(Posix) { if(cancelfd > 0) { ulong a = 1; core.sys.posix.unistd.write(cancelfd, &a, a.sizeof); } } version(Windows) { if(iocp) { foreach(i; 0 .. 16) // FIXME PostQueuedCompletionStatus(iocp, 0, cast(ULONG_PTR) null, null); } } } } private alias AliasSeq(T...) = T; version(with_breaking_cgi_features) mixin(q{ template ThisFor(alias t) { static if(__traits(isStaticFunction, t)) { alias ThisFor = AliasSeq!(); } else { alias ThisFor = __traits(parent, t); } } }); else alias ThisFor(alias t) = AliasSeq!(); private __gshared bool globalStopFlag = false; version(embedded_httpd_processes) void serveEmbeddedHttpdProcesses(alias fun, CustomCgi = Cgi)(RequestServer params) { import core.sys.posix.unistd; import core.sys.posix.sys.socket; import core.sys.posix.netinet.in_; //import std.c.linux.socket; int sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == -1) throw new Exception("socket"); cloexec(sock); { sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(params.listeningPort); auto lh = params.listeningHost; if(lh.length) { if(inet_pton(AF_INET, lh.toStringz(), &addr.sin_addr.s_addr) != 1) throw new Exception("bad listening host given, please use an IP address.\nExample: --listening-host 127.0.0.1 means listen only on Localhost.\nExample: --listening-host 0.0.0.0 means listen on all interfaces.\nOr you can pass any other single numeric IPv4 address."); } else addr.sin_addr.s_addr = INADDR_ANY; // HACKISH int on = 1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, on.sizeof); // end hack if(bind(sock, cast(sockaddr*) &addr, addr.sizeof) == -1) { close(sock); throw new Exception("bind"); } // FIXME: if this queue is full, it will just ignore it // and wait for the client to retransmit it. This is an // obnoxious timeout condition there. if(sock.listen(128) == -1) { close(sock); throw new Exception("listen"); } params.dropPrivileges(); } version(embedded_httpd_processes_accept_after_fork) {} else { int pipeReadFd; int pipeWriteFd; { int[2] pipeFd; if(socketpair(AF_UNIX, SOCK_DGRAM, 0, pipeFd)) { import core.stdc.errno; throw new Exception("pipe failed " ~ to!string(errno)); } pipeReadFd = pipeFd[0]; pipeWriteFd = pipeFd[1]; } } int processCount; pid_t newPid; reopen: while(processCount < processPoolSize) { newPid = fork(); if(newPid == 0) { // start serving on the socket //ubyte[4096] backingBuffer; for(;;) { bool closeConnection; uint i; sockaddr addr; i = addr.sizeof; version(embedded_httpd_processes_accept_after_fork) { int s = accept(sock, &addr, &i); int opt = 1; import core.sys.posix.netinet.tcp; // the Cgi class does internal buffering, so disabling this // helps with latency in many cases... setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &opt, opt.sizeof); cloexec(s); } else { int s; auto readret = read_fd(pipeReadFd, &s, s.sizeof, &s); if(readret != s.sizeof) { import core.stdc.errno; throw new Exception("pipe read failed " ~ to!string(errno)); } //writeln("process ", getpid(), " got socket ", s); } try { if(s == -1) throw new Exception("accept"); scope(failure) close(s); //ubyte[__traits(classInstanceSize, BufferedInputRange)] bufferedRangeContainer; auto ir = new BufferedInputRange(s); //auto ir = emplace!BufferedInputRange(bufferedRangeContainer, s, backingBuffer); while(!ir.empty) { //ubyte[__traits(classInstanceSize, CustomCgi)] cgiContainer; Cgi cgi; try { cgi = new CustomCgi(ir, &closeConnection); cgi._outputFileHandle = cast(CgiConnectionHandle) s; // if we have a single process and the browser tries to leave the connection open while concurrently requesting another, it will block everything an deadlock since there's no other server to accept it. By closing after each request in this situation, it tells the browser to serialize for us. if(processPoolSize <= 1) closeConnection = true; //cgi = emplace!CustomCgi(cgiContainer, ir, &closeConnection); } catch(Throwable t) { // a construction error is either bad code or bad request; bad request is what it should be since this is bug free :P // anyway let's kill the connection version(CRuntime_Musl) { // LockingTextWriter fails here // so working around it auto estr = t.toString(); stderr.rawWrite(estr); stderr.rawWrite("\n"); } else stderr.writeln(t.toString()); sendAll(ir.source, plainHttpError(false, "400 Bad Request", t)); closeConnection = true; break; } assert(cgi !is null); scope(exit) cgi.dispose(); try { fun(cgi); cgi.close(); if(cgi.websocketMode) closeConnection = true; } catch(ConnectionException ce) { closeConnection = true; } catch(Throwable t) { // a processing error can be recovered from version(CRuntime_Musl) { // LockingTextWriter fails here // so working around it auto estr = t.toString(); stderr.rawWrite(estr); } else { stderr.writeln(t.toString); } if(!handleException(cgi, t)) closeConnection = true; } if(closeConnection) { ir.source.close(); break; } else { if(!ir.empty) ir.popFront(); // get the next else if(ir.sourceClosed) { ir.source.close(); } } } ir.source.close(); } catch(Throwable t) { version(CRuntime_Musl) {} else debug writeln(t); // most likely cause is a timeout } } } else if(newPid < 0) { throw new Exception("fork failed"); } else { processCount++; } } // the parent should wait for its children... if(newPid) { import core.sys.posix.sys.wait; version(embedded_httpd_processes_accept_after_fork) {} else { import core.sys.posix.sys.select; int[] fdQueue; while(true) { // writeln("select call"); int nfds = pipeWriteFd; if(sock > pipeWriteFd) nfds = sock; nfds += 1; fd_set read_fds; fd_set write_fds; FD_ZERO(&read_fds); FD_ZERO(&write_fds); FD_SET(sock, &read_fds); if(fdQueue.length) FD_SET(pipeWriteFd, &write_fds); auto ret = select(nfds, &read_fds, &write_fds, null, null); if(ret == -1) { import core.stdc.errno; if(errno == EINTR) goto try_wait; else throw new Exception("wtf select"); } int s = -1; if(FD_ISSET(sock, &read_fds)) { uint i; sockaddr addr; i = addr.sizeof; s = accept(sock, &addr, &i); cloexec(s); import core.sys.posix.netinet.tcp; int opt = 1; setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &opt, opt.sizeof); } if(FD_ISSET(pipeWriteFd, &write_fds)) { if(s == -1 && fdQueue.length) { s = fdQueue[0]; fdQueue = fdQueue[1 .. $]; // FIXME reuse buffer } write_fd(pipeWriteFd, &s, s.sizeof, s); close(s); // we are done with it, let the other process take ownership } else fdQueue ~= s; } } try_wait: int status; while(-1 != wait(&status)) { version(CRuntime_Musl) {} else { import std.stdio; writeln("Process died ", status); } processCount--; goto reopen; } close(sock); } } version(fastcgi) void serveFastCgi(alias fun, CustomCgi = Cgi, long maxContentLength = defaultMaxContentLength)(RequestServer params) { // SetHandler fcgid-script FCGX_Stream* input, output, error; FCGX_ParamArray env; const(ubyte)[] getFcgiChunk() { const(ubyte)[] ret; while(FCGX_HasSeenEOF(input) != -1) ret ~= cast(ubyte) FCGX_GetChar(input); return ret; } void writeFcgi(const(ubyte)[] data) { FCGX_PutStr(data.ptr, data.length, output); } void doARequest() { string[string] fcgienv; for(auto e = env; e !is null && *e !is null; e++) { string cur = to!string(*e); auto idx = cur.indexOf("="); string name, value; if(idx == -1) name = cur; else { name = cur[0 .. idx]; value = cur[idx + 1 .. $]; } fcgienv[name] = value; } void flushFcgi() { FCGX_FFlush(output); } Cgi cgi; try { cgi = new CustomCgi(maxContentLength, fcgienv, &getFcgiChunk, &writeFcgi, &flushFcgi); } catch(Throwable t) { FCGX_PutStr(cast(ubyte*) t.msg.ptr, t.msg.length, error); writeFcgi(cast(const(ubyte)[]) plainHttpError(true, "400 Bad Request", t)); return; //continue; } assert(cgi !is null); scope(exit) cgi.dispose(); try { fun(cgi); cgi.close(); } catch(Throwable t) { // log it to the error stream FCGX_PutStr(cast(ubyte*) t.msg.ptr, t.msg.length, error); // handle it for the user, if we can if(!handleException(cgi, t)) return; // continue; } } auto lp = params.listeningPort; auto host = params.listeningHost; FCGX_Request request; if(lp || !host.empty) { // if a listening port was specified on the command line, we want to spawn ourself // (needed for nginx without spawn-fcgi, e.g. on Windows) FCGX_Init(); int sock; if(host.startsWith("unix:")) { sock = FCGX_OpenSocket(toStringz(params.listeningHost["unix:".length .. $]), 12); } else if(host.startsWith("abstract:")) { sock = FCGX_OpenSocket(toStringz("\0" ~ params.listeningHost["abstract:".length .. $]), 12); } else { sock = FCGX_OpenSocket(toStringz(params.listeningHost ~ ":" ~ to!string(lp)), 12); } if(sock < 0) throw new Exception("Couldn't listen on the port"); FCGX_InitRequest(&request, sock, 0); while(FCGX_Accept_r(&request) >= 0) { input = request.inStream; output = request.outStream; error = request.errStream; env = request.envp; doARequest(); } } else { // otherwise, assume the httpd is doing it (the case for Apache, IIS, and Lighttpd) // using the version with a global variable since we are separate processes anyway while(FCGX_Accept(&input, &output, &error, &env) >= 0) { doARequest(); } } } /// Returns the default listening port for the current cgi configuration. 8085 for embedded httpd, 4000 for scgi, irrelevant for others. ushort defaultListeningPort() { version(netman_httpd) return 8080; else version(embedded_httpd_processes) return 8085; else version(embedded_httpd_threads) return 8085; else version(scgi) return 4000; else return 0; } /// Default host for listening. 127.0.0.1 for scgi, null (aka all interfaces) for all others. If you want the server directly accessible from other computers on the network, normally use null. If not, 127.0.0.1 is a bit better. Settable with default handlers with --listening-host command line argument. string defaultListeningHost() { version(netman_httpd) return null; else version(embedded_httpd_processes) return null; else version(embedded_httpd_threads) return null; else version(scgi) return "127.0.0.1"; else return null; } /++ This is the function [GenericMain] calls. View its source for some simple boilerplate you can copy/paste and modify, or you can call it yourself from your `main`. Please note that this may spawn other helper processes that will call `main` again. It does this currently for the timer server and event source server (and the quasi-deprecated web socket server). Params: fun = Your request handler CustomCgi = a subclass of Cgi, if you wise to customize it further maxContentLength = max POST size you want to allow args = command-line arguments History: Documented Sept 26, 2020. +/ void cgiMainImpl(alias fun, CustomCgi = Cgi, long maxContentLength = defaultMaxContentLength)(string[] args) if(is(CustomCgi : Cgi)) { if(tryAddonServers(args)) return; if(trySimulatedRequest!(fun, CustomCgi)(args)) return; RequestServer server; // you can change the port here if you like // server.listeningPort = 9000; // then call this to let the command line args override your default server.configureFromCommandLine(args); // and serve the request(s). server.serve!(fun, CustomCgi, maxContentLength)(); } //version(plain_cgi) void handleCgiRequest(alias fun, CustomCgi = Cgi, long maxContentLength = defaultMaxContentLength)() { // standard CGI is the default version // Set stdin to binary mode if necessary to avoid mangled newlines // the fact that stdin is global means this could be trouble but standard cgi request // handling is one per process anyway so it shouldn't actually be threaded here or anything. version(Windows) { version(Win64) _setmode(std.stdio.stdin.fileno(), 0x8000); else setmode(std.stdio.stdin.fileno(), 0x8000); } Cgi cgi; try { cgi = new CustomCgi(maxContentLength); version(Posix) cgi._outputFileHandle = cast(CgiConnectionHandle) 1; // stdout else version(Windows) cgi._outputFileHandle = cast(CgiConnectionHandle) GetStdHandle(STD_OUTPUT_HANDLE); else static assert(0); } catch(Throwable t) { version(CRuntime_Musl) { // LockingTextWriter fails here // so working around it auto s = t.toString(); stderr.rawWrite(s); stdout.rawWrite(plainHttpError(true, "400 Bad Request", t)); } else { stderr.writeln(t.msg); // the real http server will probably handle this; // most likely, this is a bug in Cgi. But, oh well. stdout.write(plainHttpError(true, "400 Bad Request", t)); } return; } assert(cgi !is null); scope(exit) cgi.dispose(); try { fun(cgi); cgi.close(); } catch (Throwable t) { version(CRuntime_Musl) { // LockingTextWriter fails here // so working around it auto s = t.msg; stderr.rawWrite(s); } else { stderr.writeln(t.msg); } if(!handleException(cgi, t)) return; } } private __gshared int cancelfd = -1; /+ The event loop for embedded_httpd_threads will prolly fiber dispatch cgi constructors too, so slow posts will not monopolize a worker thread. May want to provide the worker task system just need to ensure all the fibers has a big enough stack for real work... would also ideally like to reuse them. So prolly bir would switch it to nonblocking. If it would block, it epoll registers one shot with this existing fiber to take it over. new connection comes in. it picks a fiber off the free list, or if there is none, it creates a new one. this fiber handles this connection the whole time. epoll triggers the fiber when something comes in. it is called by a random worker thread, it might change at any time. at least during the constructor. maybe into the main body it will stay tied to a thread just so TLS stuff doesn't randomly change in the middle. but I could specify if you yield all bets are off. when the request is finished, if there's more data buffered, it just keeps going. if there is no more data buffered, it epoll ctls to get triggered when more data comes in. all one shot. when a connection is closed, the fiber returns and is then reset and added to the free list. if the free list is full, the fiber is just freed, this means it will balloon to a certain size but not generally grow beyond that unless the activity keeps going. 256 KB stack i thnk per fiber. 4,000 active fibers per gigabyte of memory. So the fiber has its own magic methods to read and write. if they would block, it registers for epoll and yields. when it returns, it read/writes and then returns back normal control. basically you issue the command and it tells you when it is done it needs to DEL the epoll thing when it is closed. add it when opened. mod it when anther thing issued +/ /++ The stack size when a fiber is created. You can set this from your main or from a shared static constructor to optimize your memory use if you know you don't need this much space. Be careful though, some functions use more stack space than you realize and a recursive function (including ones like in dom.d) can easily grow fast! History: Added July 10, 2021. Previously, it used the druntime default of 16 KB. +/ version(cgi_use_fiber) __gshared size_t fiberStackSize = 4096 * 100; version(cgi_use_fiber) class CgiFiber : Fiber { private void function(Socket) f_handler; private void f_handler_dg(Socket s) { // to avoid extra allocation w/ function f_handler(s); } this(void function(Socket) handler) { this.f_handler = handler; this(&f_handler_dg); } this(void delegate(Socket) handler) { this.handler = handler; super(&run, fiberStackSize); } Socket connection; void delegate(Socket) handler; void run() { handler(connection); } void delegate() postYield; private void setPostYield(scope void delegate() py) @nogc { postYield = cast(void delegate()) py; } void proceed() { try { call(); auto py = postYield; postYield = null; if(py !is null) py(); } catch(Exception e) { if(connection) connection.close(); goto terminate; } if(state == State.TERM) { terminate: import core.memory; GC.removeRoot(cast(void*) this); } } } version(cgi_use_fiber) version(Windows) { extern(Windows) private { import core.sys.windows.mswsock; alias GROUP=uint; alias LPWSAPROTOCOL_INFOW = void*; SOCKET WSASocketW(int af, int type, int protocol, LPWSAPROTOCOL_INFOW lpProtocolInfo, GROUP g, DWORD dwFlags); int WSASend(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); int WSARecv(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); struct WSABUF { ULONG len; CHAR *buf; } alias LPWSABUF = WSABUF*; alias WSAOVERLAPPED = OVERLAPPED; alias LPWSAOVERLAPPED = LPOVERLAPPED; /+ alias LPFN_ACCEPTEX = BOOL function( SOCKET sListenSocket, SOCKET sAcceptSocket, //_Out_writes_bytes_(dwReceiveDataLength+dwLocalAddressLength+dwRemoteAddressLength) PVOID lpOutputBuffer, void* lpOutputBuffer, WORD dwReceiveDataLength, WORD dwLocalAddressLength, WORD dwRemoteAddressLength, LPDWORD lpdwBytesReceived, LPOVERLAPPED lpOverlapped ); enum WSAID_ACCEPTEX = GUID([0xb5367df1,0xcbac,0x11cf,[0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92]]); +/ enum WSAID_GETACCEPTEXSOCKADDRS = GUID(0xb5367df2,0xcbac,0x11cf,[0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92]); } private class PseudoblockingOverlappedSocket : Socket { SOCKET handle; CgiFiber fiber; this(AddressFamily af, SocketType st) { auto handle = WSASocketW(af, st, 0, null, 0, 1 /*WSA_FLAG_OVERLAPPED*/); if(!handle) throw new Exception("WSASocketW"); this.handle = handle; iocp = CreateIoCompletionPort(cast(HANDLE) handle, iocp, cast(ULONG_PTR) cast(void*) this, 0); if(iocp is null) { writeln(GetLastError()); throw new Exception("CreateIoCompletionPort"); } super(cast(socket_t) handle, af); } this() pure nothrow @trusted { assert(0); } override void blocking(bool) {} // meaningless to us, just ignore it. protected override Socket accepting() pure nothrow { assert(0); } bool addressesParsed; Address la; Address ra; private void populateAddresses() { if(addressesParsed) return; addressesParsed = true; int lalen, ralen; sockaddr_in* la; sockaddr_in* ra; lpfnGetAcceptExSockaddrs( scratchBuffer.ptr, 0, // same as in the AcceptEx call! sockaddr_in.sizeof + 16, sockaddr_in.sizeof + 16, cast(sockaddr**) &la, &lalen, cast(sockaddr**) &ra, &ralen ); if(la) this.la = new InternetAddress(*la); if(ra) this.ra = new InternetAddress(*ra); } override @property @trusted Address localAddress() { populateAddresses(); return la; } override @property @trusted Address remoteAddress() { populateAddresses(); return ra; } PseudoblockingOverlappedSocket accepted; __gshared static LPFN_ACCEPTEX lpfnAcceptEx; __gshared static typeof(&GetAcceptExSockaddrs) lpfnGetAcceptExSockaddrs; override Socket accept() @trusted { __gshared static LPFN_ACCEPTEX lpfnAcceptEx; if(lpfnAcceptEx is null) { DWORD dwBytes; GUID GuidAcceptEx = WSAID_ACCEPTEX; auto iResult = WSAIoctl(handle, 0xc8000006 /*SIO_GET_EXTENSION_FUNCTION_POINTER*/, &GuidAcceptEx, GuidAcceptEx.sizeof, &lpfnAcceptEx, lpfnAcceptEx.sizeof, &dwBytes, null, null); GuidAcceptEx = WSAID_GETACCEPTEXSOCKADDRS; iResult = WSAIoctl(handle, 0xc8000006 /*SIO_GET_EXTENSION_FUNCTION_POINTER*/, &GuidAcceptEx, GuidAcceptEx.sizeof, &lpfnGetAcceptExSockaddrs, lpfnGetAcceptExSockaddrs.sizeof, &dwBytes, null, null); } auto pfa = new PseudoblockingOverlappedSocket(AddressFamily.INET, SocketType.STREAM); accepted = pfa; SOCKET pendingForAccept = pfa.handle; DWORD ignored; auto ret = lpfnAcceptEx(handle, pendingForAccept, // buffer to receive up front pfa.scratchBuffer.ptr, 0, // size of local and remote addresses. normally + 16. sockaddr_in.sizeof + 16, sockaddr_in.sizeof + 16, &ignored, // bytes would be given through the iocp instead but im not even requesting the thing &overlapped ); return pfa; } override void connect(Address to) { assert(0); } DWORD lastAnswer; ubyte[1024] scratchBuffer; static assert(scratchBuffer.length > sockaddr_in.sizeof * 2 + 32); WSABUF[1] buffer; OVERLAPPED overlapped; override ptrdiff_t send(scope const(void)[] buf, SocketFlags flags) @trusted { overlapped = overlapped.init; buffer[0].len = cast(DWORD) buf.length; buffer[0].buf = cast(CHAR*) buf.ptr; fiber.setPostYield( () { if(!WSASend(handle, buffer.ptr, cast(DWORD) buffer.length, null, 0, &overlapped, null)) { if(GetLastError() != 997) { //throw new Exception("WSASend fail"); } } }); Fiber.yield(); return lastAnswer; } override ptrdiff_t receive(scope void[] buf, SocketFlags flags) @trusted { overlapped = overlapped.init; buffer[0].len = cast(DWORD) buf.length; buffer[0].buf = cast(CHAR*) buf.ptr; DWORD flags2 = 0; fiber.setPostYield(() { if(!WSARecv(handle, buffer.ptr, cast(DWORD) buffer.length, null, &flags2 /* flags */, &overlapped, null)) { if(GetLastError() != 997) { //writeln("WSARecv ", WSAGetLastError()); //throw new Exception("WSARecv fail"); } } }); Fiber.yield(); return lastAnswer; } // I might go back and implement these for udp things. override ptrdiff_t receiveFrom(scope void[] buf, SocketFlags flags, ref Address from) @trusted { assert(0); } override ptrdiff_t receiveFrom(scope void[] buf, SocketFlags flags) @trusted { assert(0); } override ptrdiff_t sendTo(scope const(void)[] buf, SocketFlags flags, Address to) @trusted { assert(0); } override ptrdiff_t sendTo(scope const(void)[] buf, SocketFlags flags) @trusted { assert(0); } // lol overload sets alias send = typeof(super).send; alias receive = typeof(super).receive; alias sendTo = typeof(super).sendTo; alias receiveFrom = typeof(super).receiveFrom; } } void doThreadHttpConnection(CustomCgi, alias fun)(Socket connection) { assert(connection !is null); version(cgi_use_fiber) { auto fiber = new CgiFiber(&doThreadHttpConnectionGuts!(CustomCgi, fun)); version(Windows) { (cast(PseudoblockingOverlappedSocket) connection).fiber = fiber; } import core.memory; GC.addRoot(cast(void*) fiber); fiber.connection = connection; fiber.proceed(); } else { doThreadHttpConnectionGuts!(CustomCgi, fun)(connection); } } void doThreadHttpConnectionGuts(CustomCgi, alias fun, bool alwaysCloseConnection = false)(Socket connection) { scope(failure) { // catch all for other errors try { sendAll(connection, plainHttpError(false, "500 Internal Server Error", null)); connection.close(); } catch(Exception e) {} // swallow it, we're aborting anyway. } bool closeConnection = alwaysCloseConnection; /+ ubyte[4096] inputBuffer = void; ubyte[__traits(classInstanceSize, BufferedInputRange)] birBuffer = void; ubyte[__traits(classInstanceSize, CustomCgi)] cgiBuffer = void; birBuffer[] = cast(ubyte[]) typeid(BufferedInputRange).initializer()[]; BufferedInputRange ir = cast(BufferedInputRange) cast(void*) birBuffer.ptr; ir.__ctor(connection, inputBuffer[], true); +/ auto ir = new BufferedInputRange(connection); while(!ir.empty) { if(ir.view.length == 0) { ir.popFront(); if(ir.sourceClosed) { connection.close(); closeConnection = true; break; } } Cgi cgi; try { cgi = new CustomCgi(ir, &closeConnection); // There's a bunch of these casts around because the type matches up with // the -version=.... specifiers, just you can also create a RequestServer // and instantiate the things where the types don't match up. It isn't exactly // correct but I also don't care rn. Might FIXME and either remove it later or something. cgi._outputFileHandle = cast(CgiConnectionHandle) connection.handle; } catch(ConnectionClosedException ce) { closeConnection = true; break; } catch(ConnectionException ce) { // broken pipe or something, just abort the connection closeConnection = true; break; } catch(Throwable t) { // a construction error is either bad code or bad request; bad request is what it should be since this is bug free :P // anyway let's kill the connection version(CRuntime_Musl) { stderr.rawWrite(t.toString()); stderr.rawWrite("\n"); } else { stderr.writeln(t.toString()); } sendAll(connection, plainHttpError(false, "400 Bad Request", t)); closeConnection = true; break; } assert(cgi !is null); scope(exit) cgi.dispose(); try { fun(cgi); cgi.close(); if(cgi.websocketMode) closeConnection = true; } catch(ConnectionException ce) { // broken pipe or something, just abort the connection closeConnection = true; } catch(ConnectionClosedException ce) { // broken pipe or something, just abort the connection closeConnection = true; } catch(Throwable t) { // a processing error can be recovered from version(CRuntime_Musl) {} else stderr.writeln(t.toString); if(!handleException(cgi, t)) closeConnection = true; } if(globalStopFlag) closeConnection = true; if(closeConnection || alwaysCloseConnection) { connection.shutdown(SocketShutdown.BOTH); connection.close(); ir.dispose(); closeConnection = false; // don't reclose after loop break; } else { if(ir.front.length) { ir.popFront(); // we can't just discard the buffer, so get the next bit and keep chugging along } else if(ir.sourceClosed) { ir.source.shutdown(SocketShutdown.BOTH); ir.source.close(); ir.dispose(); closeConnection = false; } else { continue; // break; // this was for a keepalive experiment } } } if(closeConnection) { connection.shutdown(SocketShutdown.BOTH); connection.close(); ir.dispose(); } // I am otherwise NOT closing it here because the parent thread might still be able to make use of the keep-alive connection! } void doThreadScgiConnection(CustomCgi, alias fun, long maxContentLength)(Socket connection) { // and now we can buffer scope(failure) connection.close(); import al = std.algorithm; size_t size; string[string] headers; auto range = new BufferedInputRange(connection); more_data: auto chunk = range.front(); // waiting for colon for header length auto idx = indexOf(cast(string) chunk, ':'); if(idx == -1) { try { range.popFront(); } catch(Exception e) { // it is just closed, no big deal connection.close(); return; } goto more_data; } size = to!size_t(cast(string) chunk[0 .. idx]); chunk = range.consume(idx + 1); // reading headers if(chunk.length < size) range.popFront(0, size + 1); // we are now guaranteed to have enough chunk = range.front(); assert(chunk.length > size); idx = 0; string key; string value; foreach(part; al.splitter(chunk, '\0')) { if(idx & 1) { // odd is value value = cast(string)(part.idup); headers[key] = value; // commit } else key = cast(string)(part.idup); idx++; } enforce(chunk[size] == ','); // the terminator range.consume(size + 1); // reading data // this will be done by Cgi const(ubyte)[] getScgiChunk() { // we are already primed auto data = range.front(); if(data.length == 0 && !range.sourceClosed) { range.popFront(0); data = range.front(); } else if (range.sourceClosed) range.source.close(); return data; } void writeScgi(const(ubyte)[] data) { sendAll(connection, data); } void flushScgi() { // I don't *think* I have to do anything.... } Cgi cgi; try { cgi = new CustomCgi(maxContentLength, headers, &getScgiChunk, &writeScgi, &flushScgi); cgi._outputFileHandle = cast(CgiConnectionHandle) connection.handle; } catch(Throwable t) { sendAll(connection, plainHttpError(true, "400 Bad Request", t)); connection.close(); return; // this connection is dead } assert(cgi !is null); scope(exit) cgi.dispose(); try { fun(cgi); cgi.close(); connection.close(); } catch(Throwable t) { // no std err if(!handleException(cgi, t)) { connection.close(); return; } else { connection.close(); return; } } } string printDate(DateTime date) { char[29] buffer = void; printDateToBuffer(date, buffer[]); return buffer.idup; } int printDateToBuffer(DateTime date, char[] buffer) @nogc { assert(buffer.length >= 29); // 29 static length ? static immutable daysOfWeek = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ]; static immutable months = [ null, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; buffer[0 .. 3] = daysOfWeek[date.dayOfWeek]; buffer[3 .. 5] = ", "; buffer[5] = date.day / 10 + '0'; buffer[6] = date.day % 10 + '0'; buffer[7] = ' '; buffer[8 .. 11] = months[date.month]; buffer[11] = ' '; auto y = date.year; buffer[12] = cast(char) (y / 1000 + '0'); y %= 1000; buffer[13] = cast(char) (y / 100 + '0'); y %= 100; buffer[14] = cast(char) (y / 10 + '0'); y %= 10; buffer[15] = cast(char) (y + '0'); buffer[16] = ' '; buffer[17] = date.hour / 10 + '0'; buffer[18] = date.hour % 10 + '0'; buffer[19] = ':'; buffer[20] = date.minute / 10 + '0'; buffer[21] = date.minute % 10 + '0'; buffer[22] = ':'; buffer[23] = date.second / 10 + '0'; buffer[24] = date.second % 10 + '0'; buffer[25 .. $] = " GMT"; return 29; } // Referencing this gigantic typeid seems to remind the compiler // to actually put the symbol in the object file. I guess the immutable // assoc array array isn't actually included in druntime void hackAroundLinkerError() { stdout.rawWrite(typeid(const(immutable(char)[][])[immutable(char)[]]).toString()); stdout.rawWrite(typeid(immutable(char)[][][immutable(char)[]]).toString()); stdout.rawWrite(typeid(Cgi.UploadedFile[immutable(char)[]]).toString()); stdout.rawWrite(typeid(Cgi.UploadedFile[][immutable(char)[]]).toString()); stdout.rawWrite(typeid(immutable(Cgi.UploadedFile)[immutable(char)[]]).toString()); stdout.rawWrite(typeid(immutable(Cgi.UploadedFile[])[immutable(char)[]]).toString()); stdout.rawWrite(typeid(immutable(char[])[immutable(char)[]]).toString()); // this is getting kinda ridiculous btw. Moving assoc arrays // to the library is the pain that keeps on coming. // eh this broke the build on the work server // stdout.rawWrite(typeid(immutable(char)[][immutable(string[])])); stdout.rawWrite(typeid(immutable(string[])[immutable(char)[]]).toString()); } version(fastcgi) { pragma(lib, "fcgi"); static if(size_t.sizeof == 8) // 64 bit alias long c_int; else alias int c_int; extern(C) { struct FCGX_Stream { ubyte* rdNext; ubyte* wrNext; ubyte* stop; ubyte* stopUnget; c_int isReader; c_int isClosed; c_int wasFCloseCalled; c_int FCGI_errno; void* function(FCGX_Stream* stream) fillBuffProc; void* function(FCGX_Stream* stream, c_int doClose) emptyBuffProc; void* data; } // note: this is meant to be opaque, so don't access it directly struct FCGX_Request { int requestId; int role; FCGX_Stream* inStream; FCGX_Stream* outStream; FCGX_Stream* errStream; char** envp; void* paramsPtr; int ipcFd; int isBeginProcessed; int keepConnection; int appStatus; int nWriters; int flags; int listen_sock; } int FCGX_InitRequest(FCGX_Request *request, int sock, int flags); void FCGX_Init(); int FCGX_Accept_r(FCGX_Request *request); alias char** FCGX_ParamArray; c_int FCGX_Accept(FCGX_Stream** stdin, FCGX_Stream** stdout, FCGX_Stream** stderr, FCGX_ParamArray* envp); c_int FCGX_GetChar(FCGX_Stream* stream); c_int FCGX_PutStr(const ubyte* str, c_int n, FCGX_Stream* stream); int FCGX_HasSeenEOF(FCGX_Stream* stream); c_int FCGX_FFlush(FCGX_Stream *stream); int FCGX_OpenSocket(in char*, int); } } /* This might go int a separate module eventually. It is a network input helper class. */ import std.socket; version(cgi_use_fiber) { import core.thread; version(linux) { import core.sys.linux.epoll; int epfd = -1; // thread local because EPOLLEXCLUSIVE works much better this way... weirdly. } else version(Windows) { // declaring the iocp thing below... } else static assert(0, "The hybrid fiber server is not implemented on your OS."); } version(Windows) __gshared HANDLE iocp; version(cgi_use_fiber) { version(linux) private enum WakeupEvent { Read = EPOLLIN, Write = EPOLLOUT } else version(Windows) private enum WakeupEvent { Read, Write } else static assert(0); } version(cgi_use_fiber) private void registerEventWakeup(bool* registered, Socket source, WakeupEvent e) @nogc { // static cast since I know what i have in here and don't want to pay for dynamic cast auto f = cast(CgiFiber) cast(void*) Fiber.getThis(); version(linux) { f.setPostYield = () { if(*registered) { // rearm epoll_event evt; evt.events = e | EPOLLONESHOT; evt.data.ptr = cast(void*) f; if(epoll_ctl(epfd, EPOLL_CTL_MOD, source.handle, &evt) == -1) throw new Exception("epoll_ctl"); } else { // initial registration *registered = true ; int fd = source.handle; epoll_event evt; evt.events = e | EPOLLONESHOT; evt.data.ptr = cast(void*) f; if(epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &evt) == -1) throw new Exception("epoll_ctl"); } }; Fiber.yield(); f.setPostYield(null); } else version(Windows) { Fiber.yield(); } else static assert(0); } version(cgi_use_fiber) void unregisterSource(Socket s) { version(linux) { epoll_event evt; epoll_ctl(epfd, EPOLL_CTL_DEL, s.handle(), &evt); } else version(Windows) { // intentionally blank } else static assert(0); } // it is a class primarily for reference semantics // I might change this interface /// This is NOT ACTUALLY an input range! It is too different. Historical mistake kinda. class BufferedInputRange { version(Posix) this(int source, ubyte[] buffer = null) { this(new Socket(cast(socket_t) source, AddressFamily.INET), buffer); } this(Socket source, ubyte[] buffer = null, bool allowGrowth = true) { // if they connect but never send stuff to us, we don't want it wasting the process // so setting a time out version(cgi_use_fiber) source.blocking = false; else source.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"seconds"(3)); this.source = source; if(buffer is null) { underlyingBuffer = new ubyte[4096]; this.allowGrowth = true; } else { underlyingBuffer = buffer; this.allowGrowth = allowGrowth; } assert(underlyingBuffer.length); // we assume view.ptr is always inside underlyingBuffer view = underlyingBuffer[0 .. 0]; popFront(); // prime } version(cgi_use_fiber) { bool registered; } void dispose() { version(cgi_use_fiber) { if(registered) unregisterSource(source); } } /** A slight difference from regular ranges is you can give it the maximum number of bytes to consume. IMPORTANT NOTE: the default is to consume nothing, so if you don't call consume() yourself and use a regular foreach, it will infinitely loop! The default is to do what a normal range does, and consume the whole buffer and wait for additional input. You can also specify 0, to append to the buffer, or any other number to remove the front n bytes and wait for more. */ void popFront(size_t maxBytesToConsume = 0 /*size_t.max*/, size_t minBytesToSettleFor = 0, bool skipConsume = false) { if(sourceClosed) throw new ConnectionClosedException("can't get any more data from a closed source"); if(!skipConsume) consume(maxBytesToConsume); // we might have to grow the buffer if(minBytesToSettleFor > underlyingBuffer.length || view.length == underlyingBuffer.length) { if(allowGrowth) { //import std.stdio; writeln("growth"); auto viewStart = view.ptr - underlyingBuffer.ptr; size_t growth = 4096; // make sure we have enough for what we're being asked for if(minBytesToSettleFor > 0 && minBytesToSettleFor - underlyingBuffer.length > growth) growth = minBytesToSettleFor - underlyingBuffer.length; //import std.stdio; writeln(underlyingBuffer.length, " ", viewStart, " ", view.length, " ", growth, " ", minBytesToSettleFor, " ", minBytesToSettleFor - underlyingBuffer.length); underlyingBuffer.length += growth; view = underlyingBuffer[viewStart .. view.length]; } else throw new Exception("No room left in the buffer"); } do { auto freeSpace = underlyingBuffer[view.ptr - underlyingBuffer.ptr + view.length .. $]; try_again: auto ret = source.receive(freeSpace); if(ret == Socket.ERROR) { if(wouldHaveBlocked()) { version(cgi_use_fiber) { registerEventWakeup(®istered, source, WakeupEvent.Read); goto try_again; } else { // gonna treat a timeout here as a close sourceClosed = true; return; } } version(Posix) { import core.stdc.errno; if(errno == EINTR || errno == EAGAIN) { goto try_again; } if(errno == ECONNRESET) { sourceClosed = true; return; } } throw new Exception(lastSocketError); // FIXME } if(ret == 0) { sourceClosed = true; return; } //import std.stdio; writeln(view.ptr); writeln(underlyingBuffer.ptr); writeln(view.length, " ", ret, " = ", view.length + ret); view = underlyingBuffer[view.ptr - underlyingBuffer.ptr .. view.length + ret]; //import std.stdio; writeln(cast(string) view); } while(view.length < minBytesToSettleFor); } /// Removes n bytes from the front of the buffer, and returns the new buffer slice. /// You might want to idup the data you are consuming if you store it, since it may /// be overwritten on the new popFront. /// /// You do not need to call this if you always want to wait for more data when you /// consume some. ubyte[] consume(size_t bytes) { view = view[bytes > $ ? $ : bytes .. $]; if(view.length == 0) { view = underlyingBuffer[0 .. 0]; // go ahead and reuse the beginning /* writeln("HERE"); popFront(0, 0, true); // try to load more if we can, checks if the source is closed writeln(cast(string)front); writeln("DONE"); */ } return front; } bool empty() { return sourceClosed && view.length == 0; } ubyte[] front() { return view; } invariant() { assert(view.ptr >= underlyingBuffer.ptr); // it should never be equal, since if that happens view ought to be empty, and thus reusing the buffer assert(view.ptr < underlyingBuffer.ptr + underlyingBuffer.length); } ubyte[] underlyingBuffer; bool allowGrowth; ubyte[] view; Socket source; bool sourceClosed; } private class FakeSocketForStdin : Socket { import std.stdio; this() { } private bool closed; override ptrdiff_t receive(scope void[] buffer, std.socket.SocketFlags) @trusted { if(closed) throw new Exception("Closed"); return stdin.rawRead(buffer).length; } override ptrdiff_t send(const scope void[] buffer, std.socket.SocketFlags) @trusted { if(closed) throw new Exception("Closed"); stdout.rawWrite(buffer); return buffer.length; } override void close() @trusted scope { (cast(void delegate() @nogc nothrow) &realClose)(); } override void shutdown(SocketShutdown s) { // FIXME } override void setOption(SocketOptionLevel, SocketOption, scope void[]) {} override void setOption(SocketOptionLevel, SocketOption, Duration) {} override @property @trusted Address remoteAddress() { return null; } override @property @trusted Address localAddress() { return null; } void realClose() { closed = true; try { stdin.close(); stdout.close(); } catch(Exception e) { } } } import core.sync.semaphore; import core.atomic; /** To use this thing: --- void handler(Socket s) { do something... } auto manager = new ListeningConnectionManager("127.0.0.1", 80, &handler, &delegateThatDropsPrivileges); manager.listen(); --- The 4th parameter is optional. I suggest you use BufferedInputRange(connection) to handle the input. As a packet comes in, you will get control. You can just continue; though to fetch more. FIXME: should I offer an event based async thing like netman did too? Yeah, probably. */ class ListeningConnectionManager { Semaphore semaphore; Socket[256] queue; shared(ubyte) nextIndexFront; ubyte nextIndexBack; shared(int) queueLength; Socket acceptCancelable() { version(Posix) { import core.sys.posix.sys.select; fd_set read_fds; FD_ZERO(&read_fds); FD_SET(listener.handle, &read_fds); if(cancelfd != -1) FD_SET(cancelfd, &read_fds); auto max = listener.handle > cancelfd ? listener.handle : cancelfd; auto ret = select(max + 1, &read_fds, null, null, null); if(ret == -1) { import core.stdc.errno; if(errno == EINTR) return null; else throw new Exception("wtf select"); } if(cancelfd != -1 && FD_ISSET(cancelfd, &read_fds)) { return null; } if(FD_ISSET(listener.handle, &read_fds)) return listener.accept(); return null; } else { Socket socket = listener; auto check = new SocketSet(); keep_looping: check.reset(); check.add(socket); // just to check the stop flag on a kinda busy loop. i hate this FIXME auto got = Socket.select(check, null, null, 3.seconds); if(got > 0) return listener.accept(); if(globalStopFlag) return null; else goto keep_looping; } } int defaultNumberOfThreads() { import std.parallelism; version(cgi_use_fiber) { return totalCPUs * 1 + 1; } else { // I times 4 here because there's a good chance some will be blocked on i/o. return totalCPUs * 4; } } void listen() { shared(int) loopBroken; version(Posix) { import core.sys.posix.signal; signal(SIGPIPE, SIG_IGN); } version(linux) { if(cancelfd == -1) cancelfd = eventfd(0, 0); } version(cgi_no_threads) { // NEVER USE THIS // it exists only for debugging and other special occasions // the thread mode is faster and less likely to stall the whole // thing when a request is slow while(!loopBroken && !globalStopFlag) { auto sn = acceptCancelable(); if(sn is null) continue; cloexec(sn); try { handler(sn); } catch(Exception e) { // if a connection goes wrong, we want to just say no, but try to carry on unless it is an Error of some sort (in which case, we'll die. You might want an external helper program to revive the server when it dies) sn.close(); } } } else { if(useFork) { version(linux) { //asm { int 3; } fork(); } } version(cgi_use_fiber) { version(Windows) { listener.accept(); } WorkerThread[] threads = new WorkerThread[](numberOfThreads); foreach(i, ref thread; threads) { thread = new WorkerThread(this, handler, cast(int) i); thread.start(); } bool fiber_crash_check() { bool hasAnyRunning; foreach(thread; threads) { if(!thread.isRunning) { thread.join(); } else hasAnyRunning = true; } return (!hasAnyRunning); } while(!globalStopFlag) { Thread.sleep(1.seconds); if(fiber_crash_check()) break; } } else { semaphore = new Semaphore(); ConnectionThread[] threads = new ConnectionThread[](numberOfThreads); foreach(i, ref thread; threads) { thread = new ConnectionThread(this, handler, cast(int) i); thread.start(); } while(!loopBroken && !globalStopFlag) { Socket sn; bool crash_check() { bool hasAnyRunning; foreach(thread; threads) { if(!thread.isRunning) { thread.join(); } else hasAnyRunning = true; } return (!hasAnyRunning); } void accept_new_connection() { sn = acceptCancelable(); if(sn is null) return; cloexec(sn); if(tcp) { // disable Nagle's algorithm to avoid a 40ms delay when we send/recv // on the socket because we do some buffering internally. I think this helps, // certainly does for small requests, and I think it does for larger ones too sn.setOption(SocketOptionLevel.TCP, SocketOption.TCP_NODELAY, 1); sn.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"seconds"(10)); } } void existing_connection_new_data() { // wait until a slot opens up //int waited = 0; while(queueLength >= queue.length) { Thread.sleep(1.msecs); //waited ++; } //if(waited) {import std.stdio; writeln(waited);} synchronized(this) { queue[nextIndexBack] = sn; nextIndexBack++; atomicOp!"+="(queueLength, 1); } semaphore.notify(); } accept_new_connection(); if(sn !is null) existing_connection_new_data(); else if(sn is null && globalStopFlag) { foreach(thread; threads) { semaphore.notify(); } Thread.sleep(50.msecs); } if(crash_check()) break; } } // FIXME: i typically stop this with ctrl+c which never // actually gets here. i need to do a sigint handler. if(cleanup) cleanup(); } } //version(linux) //int epoll_fd; bool tcp; void delegate() cleanup; private void function(Socket) fhandler; private void dg_handler(Socket s) { fhandler(s); } this(string host, ushort port, void function(Socket) handler, void delegate() dropPrivs = null, bool useFork = cgi_use_fork_default, int numberOfThreads = 0) { fhandler = handler; this(host, port, &dg_handler, dropPrivs, useFork, numberOfThreads); } this(string host, ushort port, void delegate(Socket) handler, void delegate() dropPrivs = null, bool useFork = cgi_use_fork_default, int numberOfThreads = 0) { this.handler = handler; this.useFork = useFork; this.numberOfThreads = numberOfThreads ? numberOfThreads : defaultNumberOfThreads(); listener = startListening(host, port, tcp, cleanup, 128, dropPrivs); version(cgi_use_fiber) if(useFork) listener.blocking = false; // this is the UI control thread and thus gets more priority Thread.getThis.priority = Thread.PRIORITY_MAX; } Socket listener; void delegate(Socket) handler; immutable bool useFork; int numberOfThreads; } Socket startListening(string host, ushort port, ref bool tcp, ref void delegate() cleanup, int backQueue, void delegate() dropPrivs) { Socket listener; if(host.startsWith("unix:")) { version(Posix) { listener = new Socket(AddressFamily.UNIX, SocketType.STREAM); cloexec(listener); string filename = host["unix:".length .. $].idup; listener.bind(new UnixAddress(filename)); cleanup = delegate() { listener.close(); import std.file; remove(filename); }; tcp = false; } else { throw new Exception("unix sockets not supported on this system"); } } else if(host.startsWith("abstract:")) { version(linux) { listener = new Socket(AddressFamily.UNIX, SocketType.STREAM); cloexec(listener); string filename = "\0" ~ host["abstract:".length .. $]; import std.stdio; stderr.writeln("Listening to abstract unix domain socket: ", host["abstract:".length .. $]); listener.bind(new UnixAddress(filename)); tcp = false; } else { throw new Exception("abstract unix sockets not supported on this system"); } } else { version(cgi_use_fiber) { version(Windows) listener = new PseudoblockingOverlappedSocket(AddressFamily.INET, SocketType.STREAM); else listener = new TcpSocket(); } else { listener = new TcpSocket(); } cloexec(listener); listener.setOption(SocketOptionLevel.SOCKET, SocketOption.REUSEADDR, true); listener.bind(host.length ? parseAddress(host, port) : new InternetAddress(port)); cleanup = delegate() { listener.close(); }; tcp = true; } listener.listen(backQueue); if (dropPrivs !is null) // can be null, backwards compatibility dropPrivs(); return listener; } // helper function to send a lot to a socket. Since this blocks for the buffer (possibly several times), you should probably call it in a separate thread or something. void sendAll(Socket s, const(void)[] data, string file = __FILE__, size_t line = __LINE__) { if(data.length == 0) return; ptrdiff_t amount; //import std.stdio; writeln("***",cast(string) data,"///"); do { amount = s.send(data); if(amount == Socket.ERROR) { version(cgi_use_fiber) { if(wouldHaveBlocked()) { bool registered = true; registerEventWakeup(®istered, s, WakeupEvent.Write); continue; } } throw new ConnectionException(s, lastSocketError, file, line); } assert(amount > 0); data = data[amount .. $]; } while(data.length); } class ConnectionException : Exception { Socket socket; this(Socket s, string msg, string file = __FILE__, size_t line = __LINE__) { this.socket = s; super(msg, file, line); } } alias void delegate(Socket) CMT; import core.thread; /+ cgi.d now uses a hybrid of event i/o and threads at the top level. Top level thread is responsible for accepting sockets and selecting on them. It then indicates to a child that a request is pending, and any random worker thread that is free handles it. It goes into blocking mode and handles that http request to completion. At that point, it goes back into the waiting queue. This concept is only implemented on Linux. On all other systems, it still uses the worker threads and semaphores (which is perfectly fine for a lot of things! Just having a great number of keep-alive connections will break that.) So the algorithm is: select(accept, event, pending) if accept -> send socket to free thread, if any. if not, add socket to queue if event -> send the signaling thread a socket from the queue, if not, mark it free - event might block until it can be *written* to. it is a fifo sending socket fds! A worker only does one http request at a time, then signals its availability back to the boss. The socket the worker was just doing should be added to the one-off epoll read. If it is closed, great, we can get rid of it. Otherwise, it is considered `pending`. The *kernel* manages that; the actual FD will not be kept out here. So: queue = sockets we know are ready to read now, but no worker thread is available idle list = worker threads not doing anything else. they signal back and forth the workers all read off the event fd. This is the semaphore wait the boss waits on accept or other sockets read events (one off! and level triggered). If anything happens wrt ready read, it puts it in the queue and writes to the event fd. The child could put the socket back in the epoll thing itself. The child needs to be able to gracefully handle being given a socket that just closed with no work. +/ class ConnectionThread : Thread { this(ListeningConnectionManager lcm, CMT dg, int myThreadNumber) { this.lcm = lcm; this.dg = dg; this.myThreadNumber = myThreadNumber; super(&run); } void run() { while(true) { // so if there's a bunch of idle keep-alive connections, it can // consume all the worker threads... just sitting there. lcm.semaphore.wait(); if(globalStopFlag) return; Socket socket; synchronized(lcm) { auto idx = lcm.nextIndexFront; socket = lcm.queue[idx]; lcm.queue[idx] = null; atomicOp!"+="(lcm.nextIndexFront, 1); atomicOp!"-="(lcm.queueLength, 1); } try { //import std.stdio; writeln(myThreadNumber, " taking it"); dg(socket); /+ if(socket.isAlive) { // process it more later version(linux) { import core.sys.linux.epoll; epoll_event ev; ev.events = EPOLLIN | EPOLLONESHOT | EPOLLET; ev.data.fd = socket.handle; import std.stdio; writeln("adding"); if(epoll_ctl(lcm.epoll_fd, EPOLL_CTL_ADD, socket.handle, &ev) == -1) { if(errno == EEXIST) { ev.events = EPOLLIN | EPOLLONESHOT | EPOLLET; ev.data.fd = socket.handle; if(epoll_ctl(lcm.epoll_fd, EPOLL_CTL_MOD, socket.handle, &ev) == -1) throw new Exception("epoll_ctl " ~ to!string(errno)); } else throw new Exception("epoll_ctl " ~ to!string(errno)); } //import std.stdio; writeln("keep alive"); // writing to this private member is to prevent the GC from closing my precious socket when I'm trying to use it later __traits(getMember, socket, "sock") = cast(socket_t) -1; } else { continue; // hope it times out in a reasonable amount of time... } } +/ } catch(ConnectionClosedException e) { // can just ignore this, it is fairly normal socket.close(); } catch(Throwable e) { import std.stdio; stderr.rawWrite(e.toString); stderr.rawWrite("\n"); socket.close(); } } } ListeningConnectionManager lcm; CMT dg; int myThreadNumber; } version(cgi_use_fiber) class WorkerThread : Thread { this(ListeningConnectionManager lcm, CMT dg, int myThreadNumber) { this.lcm = lcm; this.dg = dg; this.myThreadNumber = myThreadNumber; super(&run); } version(Windows) void run() { auto timeout = INFINITE; PseudoblockingOverlappedSocket key; OVERLAPPED* overlapped; DWORD bytes; while(!globalStopFlag && GetQueuedCompletionStatus(iocp, &bytes, cast(PULONG_PTR) &key, &overlapped, timeout)) { if(key is null) continue; key.lastAnswer = bytes; if(key.fiber) { key.fiber.proceed(); } else { // we have a new connection, issue the first receive on it and issue the next accept auto sn = key.accepted; key.accept(); cloexec(sn); if(lcm.tcp) { // disable Nagle's algorithm to avoid a 40ms delay when we send/recv // on the socket because we do some buffering internally. I think this helps, // certainly does for small requests, and I think it does for larger ones too sn.setOption(SocketOptionLevel.TCP, SocketOption.TCP_NODELAY, 1); sn.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"seconds"(10)); } dg(sn); } } //SleepEx(INFINITE, TRUE); } version(linux) void run() { import core.sys.linux.epoll; epfd = epoll_create1(EPOLL_CLOEXEC); if(epfd == -1) throw new Exception("epoll_create1 " ~ to!string(errno)); scope(exit) { import core.sys.posix.unistd; close(epfd); } { epoll_event ev; ev.events = EPOLLIN; ev.data.fd = cancelfd; epoll_ctl(epfd, EPOLL_CTL_ADD, cancelfd, &ev); } epoll_event ev; ev.events = EPOLLIN | EPOLLEXCLUSIVE; // EPOLLEXCLUSIVE is only available on kernels since like 2017 but that's prolly good enough. ev.data.fd = lcm.listener.handle; if(epoll_ctl(epfd, EPOLL_CTL_ADD, lcm.listener.handle, &ev) == -1) throw new Exception("epoll_ctl " ~ to!string(errno)); while(!globalStopFlag) { Socket sn; epoll_event[64] events; auto nfds = epoll_wait(epfd, events.ptr, events.length, -1); if(nfds == -1) { if(errno == EINTR) continue; throw new Exception("epoll_wait " ~ to!string(errno)); } foreach(idx; 0 .. nfds) { auto flags = events[idx].events; if(cast(size_t) events[idx].data.ptr == cast(size_t) cancelfd) { globalStopFlag = true; //import std.stdio; writeln("exit heard"); break; } else if(cast(size_t) events[idx].data.ptr == cast(size_t) lcm.listener.handle) { //import std.stdio; writeln(myThreadNumber, " woken up ", flags); // this try/catch is because it is set to non-blocking mode // and Phobos' stupid api throws an exception instead of returning // if it would block. Why would it block? because a forked process // might have beat us to it, but the wakeup event thundered our herds. try sn = lcm.listener.accept(); // don't need to do the acceptCancelable here since the epoll checks it better catch(SocketAcceptException e) { continue; } cloexec(sn); if(lcm.tcp) { // disable Nagle's algorithm to avoid a 40ms delay when we send/recv // on the socket because we do some buffering internally. I think this helps, // certainly does for small requests, and I think it does for larger ones too sn.setOption(SocketOptionLevel.TCP, SocketOption.TCP_NODELAY, 1); sn.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"seconds"(10)); } dg(sn); } else { if(cast(size_t) events[idx].data.ptr < 1024) { throw new Exception("this doesn't look like a fiber pointer..."); } auto fiber = cast(CgiFiber) events[idx].data.ptr; fiber.proceed(); } } } } ListeningConnectionManager lcm; CMT dg; int myThreadNumber; } /* Done with network helper */ /* Helpers for doing temporary files. Used both here and in web.d */ version(Windows) { import core.sys.windows.windows; extern(Windows) DWORD GetTempPathW(DWORD, LPWSTR); alias GetTempPathW GetTempPath; } version(Posix) { static import linux = core.sys.posix.unistd; } string getTempDirectory() { string path; version(Windows) { wchar[1024] buffer; auto len = GetTempPath(1024, buffer.ptr); if(len == 0) throw new Exception("couldn't find a temporary path"); auto b = buffer[0 .. len]; path = to!string(b); } else path = "/tmp/"; return path; } // I like std.date. These functions help keep my old code and data working with phobos changing. long sysTimeToDTime(in SysTime sysTime) { return convert!("hnsecs", "msecs")(sysTime.stdTime - 621355968000000000L); } long dateTimeToDTime(in DateTime dt) { return sysTimeToDTime(cast(SysTime) dt); } long getUtcTime() { // renamed primarily to avoid conflict with std.date itself return sysTimeToDTime(Clock.currTime(UTC())); } // NOTE: new SimpleTimeZone(minutes); can perhaps work with the getTimezoneOffset() JS trick SysTime dTimeToSysTime(long dTime, immutable TimeZone tz = null) { immutable hnsecs = convert!("msecs", "hnsecs")(dTime) + 621355968000000000L; return SysTime(hnsecs, tz); } // this is a helper to read HTTP transfer-encoding: chunked responses immutable(ubyte[]) dechunk(BufferedInputRange ir) { immutable(ubyte)[] ret; another_chunk: // If here, we are at the beginning of a chunk. auto a = ir.front(); int chunkSize; int loc = locationOf(a, "\r\n"); while(loc == -1) { ir.popFront(); a = ir.front(); loc = locationOf(a, "\r\n"); } string hex; hex = ""; for(int i = 0; i < loc; i++) { char c = a[i]; if(c >= 'A' && c <= 'Z') c += 0x20; if((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')) { hex ~= c; } else { break; } } assert(hex.length); int power = 1; int size = 0; foreach(cc1; retro(hex)) { dchar cc = cc1; if(cc >= 'a' && cc <= 'z') cc -= 0x20; int val = 0; if(cc >= '0' && cc <= '9') val = cc - '0'; else val = cc - 'A' + 10; size += power * val; power *= 16; } chunkSize = size; assert(size >= 0); if(loc + 2 > a.length) { ir.popFront(0, a.length + loc + 2); a = ir.front(); } a = ir.consume(loc + 2); if(chunkSize == 0) { // we're done with the response // if we got here, will change must be true.... more_footers: loc = locationOf(a, "\r\n"); if(loc == -1) { ir.popFront(); a = ir.front; goto more_footers; } else { assert(loc == 0); ir.consume(loc + 2); goto finish; } } else { // if we got here, will change must be true.... if(a.length < chunkSize + 2) { ir.popFront(0, chunkSize + 2); a = ir.front(); } ret ~= (a[0..chunkSize]); if(!(a.length > chunkSize + 2)) { ir.popFront(0, chunkSize + 2); a = ir.front(); } assert(a[chunkSize] == 13); assert(a[chunkSize+1] == 10); a = ir.consume(chunkSize + 2); chunkSize = 0; goto another_chunk; } finish: return ret; } // I want to be able to get data from multiple sources the same way... interface ByChunkRange { bool empty(); void popFront(); const(ubyte)[] front(); } ByChunkRange byChunk(const(ubyte)[] data) { return new class ByChunkRange { override bool empty() { return !data.length; } override void popFront() { if(data.length > 4096) data = data[4096 .. $]; else data = null; } override const(ubyte)[] front() { return data[0 .. $ > 4096 ? 4096 : $]; } }; } ByChunkRange byChunk(BufferedInputRange ir, size_t atMost) { const(ubyte)[] f; f = ir.front; if(f.length > atMost) f = f[0 .. atMost]; return new class ByChunkRange { override bool empty() { return atMost == 0; } override const(ubyte)[] front() { return f; } override void popFront() { ir.consume(f.length); atMost -= f.length; auto a = ir.front(); if(a.length <= atMost) { f = a; atMost -= a.length; a = ir.consume(a.length); if(atMost != 0) ir.popFront(); if(f.length == 0) { f = ir.front(); } } else { // we actually have *more* here than we need.... f = a[0..atMost]; atMost = 0; ir.consume(atMost); } } }; } version(cgi_with_websocket) { // https://tools.ietf.org/html/rfc6455 /** WEBSOCKET SUPPORT: Full example: --- import arsd.cgi; void websocketEcho(Cgi cgi) { if(cgi.websocketRequested()) { if(cgi.origin != "http://arsdnet.net") throw new Exception("bad origin"); auto websocket = cgi.acceptWebsocket(); websocket.send("hello"); websocket.send(" world!"); auto msg = websocket.recv(); while(msg.opcode != WebSocketOpcode.close) { if(msg.opcode == WebSocketOpcode.text) { websocket.send(msg.textData); } else if(msg.opcode == WebSocketOpcode.binary) { websocket.send(msg.data); } msg = websocket.recv(); } websocket.close(); } else assert(0, "i want a web socket!"); } mixin GenericMain!websocketEcho; --- */ class WebSocket { Cgi cgi; private this(Cgi cgi) { this.cgi = cgi; Socket socket = cgi.idlol.source; socket.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, dur!"minutes"(5)); } // returns true if data available, false if it timed out bool recvAvailable(Duration timeout = dur!"msecs"(0)) { if(!waitForNextMessageWouldBlock()) return true; if(isDataPending(timeout)) return true; // this is kinda a lie. return false; } public bool lowLevelReceive() { auto bfr = cgi.idlol; top: auto got = bfr.front; if(got.length) { if(receiveBuffer.length < receiveBufferUsedLength + got.length) receiveBuffer.length += receiveBufferUsedLength + got.length; receiveBuffer[receiveBufferUsedLength .. receiveBufferUsedLength + got.length] = got[]; receiveBufferUsedLength += got.length; bfr.consume(got.length); return true; } if(bfr.sourceClosed) return false; bfr.popFront(0); if(bfr.sourceClosed) return false; goto top; } bool isDataPending(Duration timeout = 0.seconds) { Socket socket = cgi.idlol.source; auto check = new SocketSet(); check.add(socket); auto got = Socket.select(check, null, null, timeout); if(got > 0) return true; return false; } // note: this blocks WebSocketFrame recv() { return waitForNextMessage(); } private void llclose() { cgi.close(); } private void llsend(ubyte[] data) { cgi.write(data); cgi.flush(); } void unregisterActiveSocket(WebSocket) {} /* copy/paste section { */ private int readyState_; private ubyte[] receiveBuffer; private size_t receiveBufferUsedLength; private Config config; enum CONNECTING = 0; /// Socket has been created. The connection is not yet open. enum OPEN = 1; /// The connection is open and ready to communicate. enum CLOSING = 2; /// The connection is in the process of closing. enum CLOSED = 3; /// The connection is closed or couldn't be opened. /++ +/ /// Group: foundational static struct Config { /++ These control the size of the receive buffer. It starts at the initial size, will temporarily balloon up to the maximum size, and will reuse a buffer up to the likely size. Anything larger than the maximum size will cause the connection to be aborted and an exception thrown. This is to protect you against a peer trying to exhaust your memory, while keeping the user-level processing simple. +/ size_t initialReceiveBufferSize = 4096; size_t likelyReceiveBufferSize = 4096; /// ditto size_t maximumReceiveBufferSize = 10 * 1024 * 1024; /// ditto /++ Maximum combined size of a message. +/ size_t maximumMessageSize = 10 * 1024 * 1024; string[string] cookies; /// Cookies to send with the initial request. cookies[name] = value; string origin; /// Origin URL to send with the handshake, if desired. string protocol; /// the protocol header, if desired. int pingFrequency = 5000; /// Amount of time (in msecs) of idleness after which to send an automatic ping } /++ Returns one of [CONNECTING], [OPEN], [CLOSING], or [CLOSED]. +/ int readyState() { return readyState_; } /++ Closes the connection, sending a graceful teardown message to the other side. +/ /// Group: foundational void close(int code = 0, string reason = null) //in (reason.length < 123) in { assert(reason.length < 123); } do { if(readyState_ != OPEN) return; // it cool, we done WebSocketFrame wss; wss.fin = true; wss.opcode = WebSocketOpcode.close; wss.data = cast(ubyte[]) reason.dup; wss.send(&llsend); readyState_ = CLOSING; llclose(); } /++ Sends a ping message to the server. This is done automatically by the library if you set a non-zero [Config.pingFrequency], but you can also send extra pings explicitly as well with this function. +/ /// Group: foundational void ping() { WebSocketFrame wss; wss.fin = true; wss.opcode = WebSocketOpcode.ping; wss.send(&llsend); } // automatically handled.... void pong() { WebSocketFrame wss; wss.fin = true; wss.opcode = WebSocketOpcode.pong; wss.send(&llsend); } /++ Sends a text message through the websocket. +/ /// Group: foundational void send(in char[] textData) { WebSocketFrame wss; wss.fin = true; wss.opcode = WebSocketOpcode.text; wss.data = cast(ubyte[]) textData.dup; wss.send(&llsend); } /++ Sends a binary message through the websocket. +/ /// Group: foundational void send(in ubyte[] binaryData) { WebSocketFrame wss; wss.fin = true; wss.opcode = WebSocketOpcode.binary; wss.data = cast(ubyte[]) binaryData.dup; wss.send(&llsend); } /++ Waits for and returns the next complete message on the socket. Note that the onmessage function is still called, right before this returns. +/ /// Group: blocking_api public WebSocketFrame waitForNextMessage() { do { auto m = processOnce(); if(m.populated) return m; } while(lowLevelReceive()); throw new ConnectionClosedException("Websocket receive timed out"); //return WebSocketFrame.init; // FIXME? maybe. } /++ Tells if [waitForNextMessage] would block. +/ /// Group: blocking_api public bool waitForNextMessageWouldBlock() { checkAgain: if(isMessageBuffered()) return false; if(!isDataPending()) return true; while(isDataPending()) lowLevelReceive(); goto checkAgain; } /++ Is there a message in the buffer already? If `true`, [waitForNextMessage] is guaranteed to return immediately. If `false`, check [isDataPending] as the next step. +/ /// Group: blocking_api public bool isMessageBuffered() { ubyte[] d = receiveBuffer[0 .. receiveBufferUsedLength]; auto s = d; if(d.length) { auto orig = d; auto m = WebSocketFrame.read(d); // that's how it indicates that it needs more data if(d !is orig) return true; } return false; } private ubyte continuingType; private ubyte[] continuingData; //private size_t continuingDataLength; private WebSocketFrame processOnce() { ubyte[] d = receiveBuffer[0 .. receiveBufferUsedLength]; auto s = d; // FIXME: handle continuation frames more efficiently. it should really just reuse the receive buffer. WebSocketFrame m; if(d.length) { auto orig = d; m = WebSocketFrame.read(d); // that's how it indicates that it needs more data if(d is orig) return WebSocketFrame.init; m.unmaskInPlace(); switch(m.opcode) { case WebSocketOpcode.continuation: if(continuingData.length + m.data.length > config.maximumMessageSize) throw new Exception("message size exceeded"); continuingData ~= m.data; if(m.fin) { if(ontextmessage) ontextmessage(cast(char[]) continuingData); if(onbinarymessage) onbinarymessage(continuingData); continuingData = null; } break; case WebSocketOpcode.text: if(m.fin) { if(ontextmessage) ontextmessage(m.textData); } else { continuingType = m.opcode; //continuingDataLength = 0; continuingData = null; continuingData ~= m.data; } break; case WebSocketOpcode.binary: if(m.fin) { if(onbinarymessage) onbinarymessage(m.data); } else { continuingType = m.opcode; //continuingDataLength = 0; continuingData = null; continuingData ~= m.data; } break; case WebSocketOpcode.close: readyState_ = CLOSED; if(onclose) onclose(); unregisterActiveSocket(this); break; case WebSocketOpcode.ping: pong(); break; case WebSocketOpcode.pong: // just really references it is still alive, nbd. break; default: // ignore though i could and perhaps should throw too } } // the recv thing can be invalidated so gotta copy it over ugh if(d.length) { m.data = m.data.dup(); } import core.stdc.string; memmove(receiveBuffer.ptr, d.ptr, d.length); receiveBufferUsedLength = d.length; return m; } private void autoprocess() { // FIXME do { processOnce(); } while(lowLevelReceive()); } void delegate() onclose; /// void delegate() onerror; /// void delegate(in char[]) ontextmessage; /// void delegate(in ubyte[]) onbinarymessage; /// void delegate() onopen; /// /++ +/ /// Group: browser_api void onmessage(void delegate(in char[]) dg) { ontextmessage = dg; } /// ditto void onmessage(void delegate(in ubyte[]) dg) { onbinarymessage = dg; } /* } end copy/paste */ } bool websocketRequested(Cgi cgi) { return "sec-websocket-key" in cgi.requestHeaders && "connection" in cgi.requestHeaders && cgi.requestHeaders["connection"].asLowerCase().canFind("upgrade") && "upgrade" in cgi.requestHeaders && cgi.requestHeaders["upgrade"].asLowerCase().equal("websocket") ; } WebSocket acceptWebsocket(Cgi cgi) { assert(!cgi.closed); assert(!cgi.outputtedResponseData); cgi.setResponseStatus("101 Switching Protocols"); cgi.header("Upgrade: WebSocket"); cgi.header("Connection: upgrade"); string key = cgi.requestHeaders["sec-websocket-key"]; key ~= "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; // the defined guid from the websocket spec import std.digest.sha; auto hash = sha1Of(key); auto accept = Base64.encode(hash); cgi.header(("Sec-WebSocket-Accept: " ~ accept).idup); cgi.websocketMode = true; cgi.write(""); cgi.flush(); return new WebSocket(cgi); } // FIXME get websocket to work on other modes, not just embedded_httpd /* copy/paste in http2.d { */ enum WebSocketOpcode : ubyte { continuation = 0, text = 1, binary = 2, // 3, 4, 5, 6, 7 RESERVED close = 8, ping = 9, pong = 10, // 11,12,13,14,15 RESERVED } public struct WebSocketFrame { private bool populated; bool fin; bool rsv1; bool rsv2; bool rsv3; WebSocketOpcode opcode; // 4 bits bool masked; ubyte lengthIndicator; // don't set this when building one to send ulong realLength; // don't use when sending ubyte[4] maskingKey; // don't set this when sending ubyte[] data; static WebSocketFrame simpleMessage(WebSocketOpcode opcode, void[] data) { WebSocketFrame msg; msg.fin = true; msg.opcode = opcode; msg.data = cast(ubyte[]) data.dup; return msg; } private void send(scope void delegate(ubyte[]) llsend) { ubyte[64] headerScratch; int headerScratchPos = 0; realLength = data.length; { ubyte b1; b1 |= cast(ubyte) opcode; b1 |= rsv3 ? (1 << 4) : 0; b1 |= rsv2 ? (1 << 5) : 0; b1 |= rsv1 ? (1 << 6) : 0; b1 |= fin ? (1 << 7) : 0; headerScratch[0] = b1; headerScratchPos++; } { headerScratchPos++; // we'll set header[1] at the end of this auto rlc = realLength; ubyte b2; b2 |= masked ? (1 << 7) : 0; assert(headerScratchPos == 2); if(realLength > 65535) { // use 64 bit length b2 |= 0x7f; // FIXME: double check endinaness foreach(i; 0 .. 8) { headerScratch[2 + 7 - i] = rlc & 0x0ff; rlc >>>= 8; } headerScratchPos += 8; } else if(realLength > 125) { // use 16 bit length b2 |= 0x7e; // FIXME: double check endinaness foreach(i; 0 .. 2) { headerScratch[2 + 1 - i] = rlc & 0x0ff; rlc >>>= 8; } headerScratchPos += 2; } else { // use 7 bit length b2 |= realLength & 0b_0111_1111; } headerScratch[1] = b2; } //assert(!masked, "masking key not properly implemented"); if(masked) { // FIXME: randomize this headerScratch[headerScratchPos .. headerScratchPos + 4] = maskingKey[]; headerScratchPos += 4; // we'll just mask it in place... int keyIdx = 0; foreach(i; 0 .. data.length) { data[i] = data[i] ^ maskingKey[keyIdx]; if(keyIdx == 3) keyIdx = 0; else keyIdx++; } } //writeln("SENDING ", headerScratch[0 .. headerScratchPos], data); llsend(headerScratch[0 .. headerScratchPos]); llsend(data); } static WebSocketFrame read(ref ubyte[] d) { WebSocketFrame msg; auto orig = d; WebSocketFrame needsMoreData() { d = orig; return WebSocketFrame.init; } if(d.length < 2) return needsMoreData(); ubyte b = d[0]; msg.populated = true; msg.opcode = cast(WebSocketOpcode) (b & 0x0f); b >>= 4; msg.rsv3 = b & 0x01; b >>= 1; msg.rsv2 = b & 0x01; b >>= 1; msg.rsv1 = b & 0x01; b >>= 1; msg.fin = b & 0x01; b = d[1]; msg.masked = (b & 0b1000_0000) ? true : false; msg.lengthIndicator = b & 0b0111_1111; d = d[2 .. $]; if(msg.lengthIndicator == 0x7e) { // 16 bit length msg.realLength = 0; if(d.length < 2) return needsMoreData(); foreach(i; 0 .. 2) { msg.realLength |= d[0] << ((1-i) * 8); d = d[1 .. $]; } } else if(msg.lengthIndicator == 0x7f) { // 64 bit length msg.realLength = 0; if(d.length < 8) return needsMoreData(); foreach(i; 0 .. 8) { msg.realLength |= ulong(d[0]) << ((7-i) * 8); d = d[1 .. $]; } } else { // 7 bit length msg.realLength = msg.lengthIndicator; } if(msg.masked) { if(d.length < 4) return needsMoreData(); msg.maskingKey = d[0 .. 4]; d = d[4 .. $]; } if(msg.realLength > d.length) { return needsMoreData(); } msg.data = d[0 .. cast(size_t) msg.realLength]; d = d[cast(size_t) msg.realLength .. $]; return msg; } void unmaskInPlace() { if(this.masked) { int keyIdx = 0; foreach(i; 0 .. this.data.length) { this.data[i] = this.data[i] ^ this.maskingKey[keyIdx]; if(keyIdx == 3) keyIdx = 0; else keyIdx++; } } } char[] textData() { return cast(char[]) data; } } /* } */ } version(Windows) { version(CRuntime_DigitalMars) { extern(C) int setmode(int, int) nothrow @nogc; } else version(CRuntime_Microsoft) { extern(C) int _setmode(int, int) nothrow @nogc; alias setmode = _setmode; } else static assert(0); } version(Posix) { import core.sys.posix.unistd; version(CRuntime_Musl) {} else { private extern(C) int posix_spawn(pid_t*, const char*, void*, void*, const char**, const char**); } } // FIXME: these aren't quite public yet. //private: // template for laziness void startAddonServer()(string arg) { version(OSX) { assert(0, "Not implemented"); } else version(linux) { import core.sys.posix.unistd; pid_t pid; const(char)*[16] args; args[0] = "ARSD_CGI_ADDON_SERVER"; args[1] = arg.ptr; posix_spawn(&pid, "/proc/self/exe", null, null, args.ptr, null // env ); } else version(Windows) { wchar[2048] filename; auto len = GetModuleFileNameW(null, filename.ptr, cast(DWORD) filename.length); if(len == 0 || len == filename.length) throw new Exception("could not get process name to start helper server"); STARTUPINFOW startupInfo; startupInfo.cb = cast(DWORD) startupInfo.sizeof; PROCESS_INFORMATION processInfo; import std.utf; // I *MIGHT* need to run it as a new job or a service... auto ret = CreateProcessW( filename.ptr, toUTF16z(arg), null, // process attributes null, // thread attributes false, // inherit handles 0, // creation flags null, // environment null, // working directory &startupInfo, &processInfo ); if(!ret) throw new Exception("create process failed"); // when done with those, if we set them /* CloseHandle(hStdInput); CloseHandle(hStdOutput); CloseHandle(hStdError); */ } else static assert(0, "Websocket server not implemented on this system yet (email me, i can prolly do it if you need it)"); } // template for laziness /* The websocket server is a single-process, single-thread, event I/O thing. It is passed websockets from other CGI processes and is then responsible for handling their messages and responses. Note that the CGI process is responsible for websocket setup, including authentication, etc. It also gets data sent to it by other processes and is responsible for distributing that, as necessary. */ void runWebsocketServer()() { assert(0, "not implemented"); } void sendToWebsocketServer(WebSocket ws, string group) { assert(0, "not implemented"); } void sendToWebsocketServer(string content, string group) { assert(0, "not implemented"); } void runEventServer()() { runAddonServer("/tmp/arsd_cgi_event_server", new EventSourceServerImplementation()); } void runTimerServer()() { runAddonServer("/tmp/arsd_scheduled_job_server", new ScheduledJobServerImplementation()); } version(Posix) { alias LocalServerConnectionHandle = int; alias CgiConnectionHandle = int; alias SocketConnectionHandle = int; enum INVALID_CGI_CONNECTION_HANDLE = -1; } else version(Windows) { alias LocalServerConnectionHandle = HANDLE; version(embedded_httpd_threads) { alias CgiConnectionHandle = SOCKET; enum INVALID_CGI_CONNECTION_HANDLE = INVALID_SOCKET; } else version(fastcgi) { alias CgiConnectionHandle = void*; // Doesn't actually work! But I don't want compile to fail pointlessly at this point. enum INVALID_CGI_CONNECTION_HANDLE = null; } else version(scgi) { alias CgiConnectionHandle = SOCKET; enum INVALID_CGI_CONNECTION_HANDLE = INVALID_SOCKET; } else { /* version(plain_cgi) */ alias CgiConnectionHandle = HANDLE; enum INVALID_CGI_CONNECTION_HANDLE = null; } alias SocketConnectionHandle = SOCKET; } version(with_addon_servers_connections) LocalServerConnectionHandle openLocalServerConnection()(string name, string arg) { version(Posix) { import core.sys.posix.unistd; import core.sys.posix.sys.un; int sock = socket(AF_UNIX, SOCK_STREAM, 0); if(sock == -1) throw new Exception("socket " ~ to!string(errno)); scope(failure) close(sock); cloexec(sock); // add-on server processes are assumed to be local, and thus will // use unix domain sockets. Besides, I want to pass sockets to them, // so it basically must be local (except for the session server, but meh). sockaddr_un addr; addr.sun_family = AF_UNIX; version(linux) { // on linux, we will use the abstract namespace addr.sun_path[0] = 0; addr.sun_path[1 .. name.length + 1] = cast(typeof(addr.sun_path[])) name[]; } else { // but otherwise, just use a file cuz we must. addr.sun_path[0 .. name.length] = cast(typeof(addr.sun_path[])) name[]; } bool alreadyTried; try_again: if(connect(sock, cast(sockaddr*) &addr, addr.sizeof) == -1) { if(!alreadyTried && errno == ECONNREFUSED) { // try auto-spawning the server, then attempt connection again startAddonServer(arg); import core.thread; Thread.sleep(50.msecs); alreadyTried = true; goto try_again; } else throw new Exception("connect " ~ to!string(errno)); } return sock; } else version(Windows) { return null; // FIXME } } version(with_addon_servers_connections) void closeLocalServerConnection(LocalServerConnectionHandle handle) { version(Posix) { import core.sys.posix.unistd; close(handle); } else version(Windows) CloseHandle(handle); } void runSessionServer()() { runAddonServer("/tmp/arsd_session_server", new BasicDataServerImplementation()); } version(Posix) private void makeNonBlocking(int fd) { import core.sys.posix.fcntl; auto flags = fcntl(fd, F_GETFL, 0); if(flags == -1) throw new Exception("fcntl get"); flags |= O_NONBLOCK; auto s = fcntl(fd, F_SETFL, flags); if(s == -1) throw new Exception("fcntl set"); } import core.stdc.errno; struct IoOp { @disable this(); @disable this(this); /* So we want to be able to eventually handle generic sockets too. */ enum Read = 1; enum Write = 2; enum Accept = 3; enum ReadSocketHandle = 4; // Your handler may be called in a different thread than the one that initiated the IO request! // It is also possible to have multiple io requests being called simultaneously. Use proper thread safety caution. private bool delegate(IoOp*, int) handler; // returns true if you are done and want it to be closed private void delegate(IoOp*) closeHandler; private void delegate(IoOp*) completeHandler; private int internalFd; private int operation; private int bufferLengthAllocated; private int bufferLengthUsed; private ubyte[1] internalBuffer; // it can be overallocated! ubyte[] allocatedBuffer() return { return internalBuffer.ptr[0 .. bufferLengthAllocated]; } ubyte[] usedBuffer() return { return allocatedBuffer[0 .. bufferLengthUsed]; } void reset() { bufferLengthUsed = 0; } int fd() { return internalFd; } } IoOp* allocateIoOp(int fd, int operation, int bufferSize, bool delegate(IoOp*, int) handler) { import core.stdc.stdlib; auto ptr = calloc(IoOp.sizeof + bufferSize, 1); if(ptr is null) assert(0); // out of memory! auto op = cast(IoOp*) ptr; op.handler = handler; op.internalFd = fd; op.operation = operation; op.bufferLengthAllocated = bufferSize; op.bufferLengthUsed = 0; import core.memory; GC.addRoot(ptr); return op; } void freeIoOp(ref IoOp* ptr) { import core.memory; GC.removeRoot(ptr); import core.stdc.stdlib; free(ptr); ptr = null; } version(Posix) version(with_addon_servers_connections) void nonBlockingWrite(EventIoServer eis, int connection, const void[] data) { //import std.stdio : writeln; writeln(cast(string) data); import core.sys.posix.unistd; auto ret = write(connection, data.ptr, data.length); if(ret != data.length) { if(ret == 0 || (ret == -1 && (errno == EPIPE || errno == ETIMEDOUT))) { // the file is closed, remove it eis.fileClosed(connection); } else throw new Exception("alas " ~ to!string(ret) ~ " " ~ to!string(errno)); // FIXME } } version(Windows) version(with_addon_servers_connections) void nonBlockingWrite(EventIoServer eis, int connection, const void[] data) { // FIXME } bool isInvalidHandle(CgiConnectionHandle h) { return h == INVALID_CGI_CONNECTION_HANDLE; } /+ https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-wsarecv https://support.microsoft.com/en-gb/help/181611/socket-overlapped-i-o-versus-blocking-nonblocking-mode https://stackoverflow.com/questions/18018489/should-i-use-iocps-or-overlapped-wsasend-receive https://docs.microsoft.com/en-us/windows/desktop/fileio/i-o-completion-ports https://docs.microsoft.com/en-us/windows/desktop/fileio/createiocompletionport https://docs.microsoft.com/en-us/windows/desktop/api/mswsock/nf-mswsock-acceptex https://docs.microsoft.com/en-us/windows/desktop/Sync/waitable-timer-objects https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-setwaitabletimer https://docs.microsoft.com/en-us/windows/desktop/Sync/using-a-waitable-timer-with-an-asynchronous-procedure-call https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-wsagetoverlappedresult +/ /++ You can customize your server by subclassing the appropriate server. Then, register your subclass at compile time with the [registerEventIoServer] template, or implement your own main function and call it yourself. $(TIP If you make your subclass a `final class`, there is a slight performance improvement.) +/ version(with_addon_servers_connections) interface EventIoServer { bool handleLocalConnectionData(IoOp* op, int receivedFd); void handleLocalConnectionClose(IoOp* op); void handleLocalConnectionComplete(IoOp* op); void wait_timeout(); void fileClosed(int fd); void epoll_fd(int fd); } // the sink should buffer it private void serialize(T)(scope void delegate(scope ubyte[]) sink, T t) { static if(is(T == struct)) { foreach(member; __traits(allMembers, T)) serialize(sink, __traits(getMember, t, member)); } else static if(is(T : int)) { // no need to think of endianness just because this is only used // for local, same-machine stuff anyway. thanks private lol sink((cast(ubyte*) &t)[0 .. t.sizeof]); } else static if(is(T == string) || is(T : const(ubyte)[])) { // these are common enough to optimize int len = cast(int) t.length; // want length consistent size tho, in case 32 bit program sends to 64 bit server, etc. sink((cast(ubyte*) &len)[0 .. int.sizeof]); sink(cast(ubyte[]) t[]); } else static if(is(T : A[], A)) { // generic array is less optimal but still prolly ok int len = cast(int) t.length; sink((cast(ubyte*) &len)[0 .. int.sizeof]); foreach(item; t) serialize(sink, item); } else static assert(0, T.stringof); } // all may be stack buffers, so use caution private void deserialize(T)(scope ubyte[] delegate(int sz) get, scope void delegate(T) dg) { static if(is(T == struct)) { T t; foreach(member; __traits(allMembers, T)) deserialize!(typeof(__traits(getMember, T, member)))(get, (mbr) { __traits(getMember, t, member) = mbr; }); dg(t); } else static if(is(T : int)) { // no need to think of endianness just because this is only used // for local, same-machine stuff anyway. thanks private lol T t; auto data = get(t.sizeof); t = (cast(T[]) data)[0]; dg(t); } else static if(is(T == string) || is(T : const(ubyte)[])) { // these are common enough to optimize int len; auto data = get(len.sizeof); len = (cast(int[]) data)[0]; /* typeof(T[0])[2000] stackBuffer; T buffer; if(len < stackBuffer.length) buffer = stackBuffer[0 .. len]; else buffer = new T(len); data = get(len * typeof(T[0]).sizeof); */ T t = cast(T) get(len * cast(int) typeof(T.init[0]).sizeof); dg(t); } else static if(is(T == E[], E)) { T t; int len; auto data = get(len.sizeof); len = (cast(int[]) data)[0]; t.length = len; foreach(ref e; t) { deserialize!E(get, (ele) { e = ele; }); } dg(t); } else static assert(0, T.stringof); } unittest { serialize((ubyte[] b) { deserialize!int( sz => b[0 .. sz], (t) { assert(t == 1); }); }, 1); serialize((ubyte[] b) { deserialize!int( sz => b[0 .. sz], (t) { assert(t == 56674); }); }, 56674); ubyte[1000] buffer; int bufferPoint; void add(ubyte[] b) { buffer[bufferPoint .. bufferPoint + b.length] = b[]; bufferPoint += b.length; } ubyte[] get(int sz) { auto b = buffer[bufferPoint .. bufferPoint + sz]; bufferPoint += sz; return b; } serialize(&add, "test here"); bufferPoint = 0; deserialize!string(&get, (t) { assert(t == "test here"); }); bufferPoint = 0; struct Foo { int a; ubyte c; string d; } serialize(&add, Foo(403, 37, "amazing")); bufferPoint = 0; deserialize!Foo(&get, (t) { assert(t.a == 403); assert(t.c == 37); assert(t.d == "amazing"); }); bufferPoint = 0; } /* Here's the way the RPC interface works: You define the interface that lists the functions you can call on the remote process. The interface may also have static methods for convenience. These forward to a singleton instance of an auto-generated class, which actually sends the args over the pipe. An impl class actually implements it. A receiving server deserializes down the pipe and calls methods on the class. I went with the interface to get some nice compiler checking and documentation stuff. I could have skipped the interface and just implemented it all from the server class definition itself, but then the usage may call the method instead of rpcing it; I just like having the user interface and the implementation separate so you aren't tempted to `new impl` to call the methods. I fiddled with newlines in the mixin string to ensure the assert line numbers matched up to the source code line number. Idk why dmd didn't do this automatically, but it was important to me. Realistically though the bodies would just be connection.call(this.mangleof, args...) sooooo. FIXME: overloads aren't supported */ /// Base for storing sessions in an array. Exists primarily for internal purposes and you should generally not use this. interface SessionObject {} private immutable void delegate(string[])[string] scheduledJobHandlers; private immutable void delegate(string[])[string] websocketServers; version(with_breaking_cgi_features) mixin(q{ mixin template ImplementRpcClientInterface(T, string serverPath, string cmdArg) { static import std.traits; // derivedMembers on an interface seems to give exactly what I want: the virtual functions we need to implement. so I am just going to use it directly without more filtering. static foreach(idx, member; __traits(derivedMembers, T)) { static if(__traits(isVirtualMethod, __traits(getMember, T, member))) mixin( q{ std.traits.ReturnType!(__traits(getMember, T, member)) } ~ member ~ q{(std.traits.Parameters!(__traits(getMember, T, member)) params) { SerializationBuffer buffer; auto i = cast(ushort) idx; serialize(&buffer.sink, i); serialize(&buffer.sink, __traits(getMember, T, member).mangleof); foreach(param; params) serialize(&buffer.sink, param); auto sendable = buffer.sendable; version(Posix) {{ auto ret = send(connectionHandle, sendable.ptr, sendable.length, 0); if(ret == -1) { throw new Exception("send returned -1, errno: " ~ to!string(errno)); } else if(ret == 0) { throw new Exception("Connection to addon server lost"); } if(ret < sendable.length) throw new Exception("Send failed to send all"); assert(ret == sendable.length); }} // FIXME Windows impl static if(!is(typeof(return) == void)) { // there is a return value; we need to wait for it too version(Posix) { ubyte[3000] revBuffer; auto ret = recv(connectionHandle, revBuffer.ptr, revBuffer.length, 0); auto got = revBuffer[0 .. ret]; int dataLocation; ubyte[] grab(int sz) { auto dataLocation1 = dataLocation; dataLocation += sz; return got[dataLocation1 .. dataLocation]; } typeof(return) retu; deserialize!(typeof(return))(&grab, (a) { retu = a; }); return retu; } else { // FIXME Windows impl return typeof(return).init; } } }}); } private static typeof(this) singletonInstance; private LocalServerConnectionHandle connectionHandle; static typeof(this) connection() { if(singletonInstance is null) { singletonInstance = new typeof(this)(); singletonInstance.connect(); } return singletonInstance; } void connect() { connectionHandle = openLocalServerConnection(serverPath, cmdArg); } void disconnect() { closeLocalServerConnection(connectionHandle); } } void dispatchRpcServer(Interface, Class)(Class this_, ubyte[] data, int fd) if(is(Class : Interface)) { ushort calledIdx; string calledFunction; int dataLocation; ubyte[] grab(int sz) { if(sz == 0) assert(0); auto d = data[dataLocation .. dataLocation + sz]; dataLocation += sz; return d; } again: deserialize!ushort(&grab, (a) { calledIdx = a; }); deserialize!string(&grab, (a) { calledFunction = a; }); import std.traits; sw: switch(calledIdx) { foreach(idx, memberName; __traits(derivedMembers, Interface)) static if(__traits(isVirtualMethod, __traits(getMember, Interface, memberName))) { case idx: assert(calledFunction == __traits(getMember, Interface, memberName).mangleof); Parameters!(__traits(getMember, Interface, memberName)) params; foreach(ref param; params) deserialize!(typeof(param))(&grab, (a) { param = a; }); static if(is(ReturnType!(__traits(getMember, Interface, memberName)) == void)) { __traits(getMember, this_, memberName)(params); } else { auto ret = __traits(getMember, this_, memberName)(params); SerializationBuffer buffer; serialize(&buffer.sink, ret); auto sendable = buffer.sendable; version(Posix) { auto r = send(fd, sendable.ptr, sendable.length, 0); if(r == -1) { throw new Exception("send returned -1, errno: " ~ to!string(errno)); } else if(r == 0) { throw new Exception("Connection to addon client lost"); } if(r < sendable.length) throw new Exception("Send failed to send all"); } // FIXME Windows impl } break sw; } default: assert(0); } if(dataLocation != data.length) goto again; } private struct SerializationBuffer { ubyte[2048] bufferBacking; int bufferLocation; void sink(scope ubyte[] data) { bufferBacking[bufferLocation .. bufferLocation + data.length] = data[]; bufferLocation += data.length; } ubyte[] sendable() return { return bufferBacking[0 .. bufferLocation]; } } /* FIXME: add a version command line arg version data in the library management gui as external program at server with event_fd for each run use .mangleof in the at function name i think the at server will have to: pipe args to the child collect child output for logging get child return value for logging on windows timers work differently. idk how to best combine with the io stuff. will have to have dump and restore too, so i can restart without losing stuff. */ /++ A convenience object for talking to the [BasicDataServer] from a higher level. See: [Cgi.getSessionObject]. You pass it a `Data` struct describing the data you want saved in the session. Then, this class will generate getter and setter properties that allow access to that data. Note that each load and store will be done as-accessed; it doesn't front-load mutable data nor does it batch updates out of fear of read-modify-write race conditions. (In fact, right now it does this for everything, but in the future, I might batch load `immutable` members of the Data struct.) At some point in the future, I might also let it do different backends, like a client-side cookie store too, but idk. Note that the plain-old-data members of your `Data` struct are wrapped by this interface via a static foreach to make property functions. See_Also: [MockSession] +/ interface Session(Data) : SessionObject { @property string sessionId() const; /++ Starts a new session. Note that a session is also implicitly started as soon as you write data to it, so if you need to alter these parameters from their defaults, be sure to explicitly call this BEFORE doing any writes to session data. Params: idleLifetime = How long, in seconds, the session should remain in memory when not being read from or written to. The default is one day. NOT IMPLEMENTED useExtendedLifetimeCookie = The session ID is always stored in a HTTP cookie, and by default, that cookie is discarded when the user closes their browser. But if you set this to true, it will use a non-perishable cookie for the given idleLifetime. NOT IMPLEMENTED +/ void start(int idleLifetime = 2600 * 24, bool useExtendedLifetimeCookie = false); /++ Regenerates the session ID and updates the associated cookie. This is also your chance to change immutable data (not yet implemented). +/ void regenerateId(); /++ Terminates this session, deleting all saved data. +/ void terminate(); /++ Plain-old-data members of your `Data` struct are wrapped here via the property getters and setters. If the member is a non-string array, it returns a magical array proxy object which allows for atomic appends and replaces via overloaded operators. You can slice this to get a range representing a $(B const) view of the array. This is to protect you against read-modify-write race conditions. +/ static foreach(memberName; __traits(allMembers, Data)) static if(is(typeof(__traits(getMember, Data, memberName)))) mixin(q{ @property inout(typeof(__traits(getMember, Data, memberName))) } ~ memberName ~ q{ () inout; @property typeof(__traits(getMember, Data, memberName)) } ~ memberName ~ q{ (typeof(__traits(getMember, Data, memberName)) value); }); } /++ An implementation of [Session] that works on real cgi connections utilizing the [BasicDataServer]. As opposed to a [MockSession] which is made for testing purposes. You will not construct one of these directly. See [Cgi.getSessionObject] instead. +/ class BasicDataServerSession(Data) : Session!Data { private Cgi cgi; private string sessionId_; public @property string sessionId() const { return sessionId_; } protected @property string sessionId(string s) { return this.sessionId_ = s; } private this(Cgi cgi) { this.cgi = cgi; if(auto ptr = "sessionId" in cgi.cookies) sessionId = (*ptr).length ? *ptr : null; } void start(int idleLifetime = 2600 * 24, bool useExtendedLifetimeCookie = false) { assert(sessionId is null); // FIXME: what if there is a session ID cookie, but no corresponding session on the server? import std.random, std.conv; sessionId = to!string(uniform(1, long.max)); BasicDataServer.connection.createSession(sessionId, idleLifetime); setCookie(); } protected void setCookie() { cgi.setCookie( "sessionId", sessionId, 0 /* expiration */, "/" /* path */, null /* domain */, true /* http only */, cgi.https /* if the session is started on https, keep it there, otherwise, be flexible */); } void regenerateId() { if(sessionId is null) { start(); return; } import std.random, std.conv; auto oldSessionId = sessionId; sessionId = to!string(uniform(1, long.max)); BasicDataServer.connection.renameSession(oldSessionId, sessionId); setCookie(); } void terminate() { BasicDataServer.connection.destroySession(sessionId); sessionId = null; setCookie(); } static foreach(memberName; __traits(allMembers, Data)) static if(is(typeof(__traits(getMember, Data, memberName)))) mixin(q{ @property inout(typeof(__traits(getMember, Data, memberName))) } ~ memberName ~ q{ () inout { if(sessionId is null) return typeof(return).init; import std.traits; auto v = BasicDataServer.connection.getSessionData(sessionId, fullyQualifiedName!Data ~ "." ~ memberName); if(v.length == 0) return typeof(return).init; import std.conv; // why this cast? to doesn't like being given an inout argument. so need to do it without that, then // we need to return it and that needed the cast. It should be fine since we basically respect constness.. // basically. Assuming the session is POD this should be fine. return cast(typeof(return)) to!(typeof(__traits(getMember, Data, memberName)))(v); } @property typeof(__traits(getMember, Data, memberName)) } ~ memberName ~ q{ (typeof(__traits(getMember, Data, memberName)) value) { if(sessionId is null) start(); import std.conv; import std.traits; BasicDataServer.connection.setSessionData(sessionId, fullyQualifiedName!Data ~ "." ~ memberName, to!string(value)); return value; } }); } /++ A mock object that works like the real session, but doesn't actually interact with any actual database or http connection. Simply stores the data in its instance members. +/ class MockSession(Data) : Session!Data { pure { @property string sessionId() const { return "mock"; } void start(int idleLifetime = 2600 * 24, bool useExtendedLifetimeCookie = false) {} void regenerateId() {} void terminate() {} private Data store_; static foreach(memberName; __traits(allMembers, Data)) static if(is(typeof(__traits(getMember, Data, memberName)))) mixin(q{ @property inout(typeof(__traits(getMember, Data, memberName))) } ~ memberName ~ q{ () inout { return __traits(getMember, store_, memberName); } @property typeof(__traits(getMember, Data, memberName)) } ~ memberName ~ q{ (typeof(__traits(getMember, Data, memberName)) value) { return __traits(getMember, store_, memberName) = value; } }); } } /++ Direct interface to the basic data add-on server. You can typically use [Cgi.getSessionObject] as a more convenient interface. +/ version(with_addon_servers_connections) interface BasicDataServer { /// void createSession(string sessionId, int lifetime); /// void renewSession(string sessionId, int lifetime); /// void destroySession(string sessionId); /// void renameSession(string oldSessionId, string newSessionId); /// void setSessionData(string sessionId, string dataKey, string dataValue); /// string getSessionData(string sessionId, string dataKey); /// static BasicDataServerConnection connection() { return BasicDataServerConnection.connection(); } } version(with_addon_servers_connections) class BasicDataServerConnection : BasicDataServer { mixin ImplementRpcClientInterface!(BasicDataServer, "/tmp/arsd_session_server", "--session-server"); } version(with_addon_servers) final class BasicDataServerImplementation : BasicDataServer, EventIoServer { void createSession(string sessionId, int lifetime) { sessions[sessionId.idup] = Session(lifetime); } void destroySession(string sessionId) { sessions.remove(sessionId); } void renewSession(string sessionId, int lifetime) { sessions[sessionId].lifetime = lifetime; } void renameSession(string oldSessionId, string newSessionId) { sessions[newSessionId.idup] = sessions[oldSessionId]; sessions.remove(oldSessionId); } void setSessionData(string sessionId, string dataKey, string dataValue) { if(sessionId !in sessions) createSession(sessionId, 3600); // FIXME? sessions[sessionId].values[dataKey.idup] = dataValue.idup; } string getSessionData(string sessionId, string dataKey) { if(auto session = sessionId in sessions) { if(auto data = dataKey in (*session).values) return *data; else return null; // no such data } else { return null; // no session } } protected: struct Session { int lifetime; string[string] values; } Session[string] sessions; bool handleLocalConnectionData(IoOp* op, int receivedFd) { auto data = op.usedBuffer; dispatchRpcServer!BasicDataServer(this, data, op.fd); return false; } void handleLocalConnectionClose(IoOp* op) {} // doesn't really matter, this is a fairly stateless go void handleLocalConnectionComplete(IoOp* op) {} // again, irrelevant void wait_timeout() {} void fileClosed(int fd) {} // stateless so irrelevant void epoll_fd(int fd) {} } /++ See [schedule] to make one of these. You then call one of the methods here to set it up: --- schedule!fn(args).at(DateTime(2019, 8, 7, 12, 00, 00)); // run the function at August 7, 2019, 12 noon UTC schedule!fn(args).delay(6.seconds); // run it after waiting 6 seconds schedule!fn(args).asap(); // run it in the background as soon as the event loop gets around to it --- +/ version(with_addon_servers_connections) struct ScheduledJobHelper { private string func; private string[] args; private bool consumed; private this(string func, string[] args) { this.func = func; this.args = args; } ~this() { assert(consumed); } /++ Schedules the job to be run at the given time. +/ void at(DateTime when, immutable TimeZone timezone = UTC()) { consumed = true; auto conn = ScheduledJobServerConnection.connection; import std.file; auto st = SysTime(when, timezone); auto jobId = conn.scheduleJob(1, cast(int) st.toUnixTime(), thisExePath, func, args); } /++ Schedules the job to run at least after the specified delay. +/ void delay(Duration delay) { consumed = true; auto conn = ScheduledJobServerConnection.connection; import std.file; auto jobId = conn.scheduleJob(0, cast(int) delay.total!"seconds", thisExePath, func, args); } /++ Runs the job in the background ASAP. $(NOTE It may run in a background thread. Don't segfault!) +/ void asap() { consumed = true; auto conn = ScheduledJobServerConnection.connection; import std.file; auto jobId = conn.scheduleJob(0, 1, thisExePath, func, args); } /+ /++ Schedules the job to recur on the given pattern. +/ void recur(string spec) { } +/ } /++ First step to schedule a job on the scheduled job server. The scheduled job needs to be a top-level function that doesn't read any variables from outside its arguments because it may be run in a new process, without any context existing later. You MUST set details on the returned object to actually do anything! +/ template schedule(alias fn, T...) if(is(typeof(fn) == function)) { /// ScheduledJobHelper schedule(T args) { // this isn't meant to ever be called, but instead just to // get the compiler to type check the arguments passed for us auto sample = delegate() { fn(args); }; string[] sargs; foreach(arg; args) sargs ~= to!string(arg); return ScheduledJobHelper(fn.mangleof, sargs); } shared static this() { scheduledJobHandlers[fn.mangleof] = delegate(string[] sargs) { import std.traits; Parameters!fn args; foreach(idx, ref arg; args) arg = to!(typeof(arg))(sargs[idx]); fn(args); }; } } /// interface ScheduledJobServer { /// Use the [schedule] function for a higher-level interface. int scheduleJob(int whenIs, int when, string executable, string func, string[] args); /// void cancelJob(int jobId); } version(with_addon_servers_connections) class ScheduledJobServerConnection : ScheduledJobServer { mixin ImplementRpcClientInterface!(ScheduledJobServer, "/tmp/arsd_scheduled_job_server", "--timer-server"); } version(with_addon_servers) final class ScheduledJobServerImplementation : ScheduledJobServer, EventIoServer { // FIXME: we need to handle SIGCHLD in this somehow // whenIs is 0 for relative, 1 for absolute protected int scheduleJob(int whenIs, int when, string executable, string func, string[] args) { auto nj = nextJobId; nextJobId++; version(linux) { import core.sys.linux.timerfd; import core.sys.linux.epoll; import core.sys.posix.unistd; auto fd = timerfd_create(CLOCK_REALTIME, TFD_NONBLOCK | TFD_CLOEXEC); if(fd == -1) throw new Exception("fd timer create failed"); foreach(ref arg; args) arg = arg.idup; auto job = Job(executable.idup, func.idup, .dup(args), fd, nj); itimerspec value; value.it_value.tv_sec = when; value.it_value.tv_nsec = 0; value.it_interval.tv_sec = 0; value.it_interval.tv_nsec = 0; if(timerfd_settime(fd, whenIs == 1 ? TFD_TIMER_ABSTIME : 0, &value, null) == -1) throw new Exception("couldn't set fd timer"); auto op = allocateIoOp(fd, IoOp.Read, 16, (IoOp* op, int fd) { jobs.remove(nj); epoll_ctl(epoll_fd, EPOLL_CTL_DEL, fd, null); close(fd); spawnProcess([job.executable, "--timed-job", job.func] ~ job.args); return true; }); scope(failure) freeIoOp(op); epoll_event ev; ev.events = EPOLLIN | EPOLLET; ev.data.ptr = op; if(epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &ev) == -1) throw new Exception("epoll_ctl " ~ to!string(errno)); jobs[nj] = job; return nj; } else assert(0); } protected void cancelJob(int jobId) { version(linux) { auto job = jobId in jobs; if(job is null) return; jobs.remove(jobId); version(linux) { import core.sys.linux.timerfd; import core.sys.linux.epoll; import core.sys.posix.unistd; epoll_ctl(epoll_fd, EPOLL_CTL_DEL, job.timerfd, null); close(job.timerfd); } } jobs.remove(jobId); } int nextJobId = 1; static struct Job { string executable; string func; string[] args; int timerfd; int id; } Job[int] jobs; // event io server methods below bool handleLocalConnectionData(IoOp* op, int receivedFd) { auto data = op.usedBuffer; dispatchRpcServer!ScheduledJobServer(this, data, op.fd); return false; } void handleLocalConnectionClose(IoOp* op) {} // doesn't really matter, this is a fairly stateless go void handleLocalConnectionComplete(IoOp* op) {} // again, irrelevant void wait_timeout() {} void fileClosed(int fd) {} // stateless so irrelevant int epoll_fd_; void epoll_fd(int fd) {this.epoll_fd_ = fd; } int epoll_fd() { return epoll_fd_; } } /// version(with_addon_servers_connections) interface EventSourceServer { /++ sends this cgi request to the event server so it will be fed events. You should not do anything else with the cgi object after this. $(WARNING This API is extremely unstable. I might change it or remove it without notice.) See_Also: [sendEvent] +/ public static void adoptConnection(Cgi cgi, in char[] eventUrl) { /* If lastEventId is missing or empty, you just get new events as they come. If it is set from something else, it sends all since then (that are still alive) down the pipe immediately. The reason it can come from the header is that's what the standard defines for browser reconnects. The reason it can come from a query string is just convenience in catching up in a user-defined manner. The reason the header overrides the query string is if the browser tries to reconnect, it will send the header AND the query (it reconnects to the same url), so we just want to do the restart thing. Note that if you ask for "0" as the lastEventId, it will get ALL still living events. */ string lastEventId = cgi.lastEventId; if(lastEventId.length == 0 && "lastEventId" in cgi.get) lastEventId = cgi.get["lastEventId"]; cgi.setResponseContentType("text/event-stream"); cgi.write(":\n", false); // to initialize the chunking and send headers before keeping the fd for later cgi.flush(); cgi.closed = true; auto s = openLocalServerConnection("/tmp/arsd_cgi_event_server", "--event-server"); scope(exit) closeLocalServerConnection(s); version(fastcgi) throw new Exception("sending fcgi connections not supported"); else { auto fd = cgi.getOutputFileHandle(); if(isInvalidHandle(fd)) throw new Exception("bad fd from cgi!"); EventSourceServerImplementation.SendableEventConnection sec; sec.populate(cgi.responseChunked, eventUrl, lastEventId); version(Posix) { auto res = write_fd(s, cast(void*) &sec, sec.sizeof, fd); assert(res == sec.sizeof); } else version(Windows) { // FIXME } } } /++ Sends an event to the event server, starting it if necessary. The event server will distribute it to any listening clients, and store it for `lifetime` seconds for any later listening clients to catch up later. $(WARNING This API is extremely unstable. I might change it or remove it without notice.) Params: url = A string identifying this event "bucket". Listening clients must also connect to this same string. I called it `url` because I envision it being just passed as the url of the request. event = the event type string, which is used in the Javascript addEventListener API on EventSource data = the event data. Available in JS as `event.data`. lifetime = the amount of time to keep this event for replaying on the event server. See_Also: [sendEventToEventServer] +/ public static void sendEvent(string url, string event, string data, int lifetime) { auto s = openLocalServerConnection("/tmp/arsd_cgi_event_server", "--event-server"); scope(exit) closeLocalServerConnection(s); EventSourceServerImplementation.SendableEvent sev; sev.populate(url, event, data, lifetime); version(Posix) { auto ret = send(s, &sev, sev.sizeof, 0); assert(ret == sev.sizeof); } else version(Windows) { // FIXME } } /++ Messages sent to `url` will also be sent to anyone listening on `forwardUrl`. See_Also: [disconnect] +/ void connect(string url, string forwardUrl); /++ Disconnects `forwardUrl` from `url` See_Also: [connect] +/ void disconnect(string url, string forwardUrl); } /// version(with_addon_servers) final class EventSourceServerImplementation : EventSourceServer, EventIoServer { protected: void connect(string url, string forwardUrl) { pipes[url] ~= forwardUrl; } void disconnect(string url, string forwardUrl) { auto t = url in pipes; if(t is null) return; foreach(idx, n; (*t)) if(n == forwardUrl) { (*t)[idx] = (*t)[$-1]; (*t) = (*t)[0 .. $-1]; break; } } bool handleLocalConnectionData(IoOp* op, int receivedFd) { if(receivedFd != -1) { //writeln("GOT FD ", receivedFd, " -- ", op.usedBuffer); //core.sys.posix.unistd.write(receivedFd, "hello".ptr, 5); SendableEventConnection* got = cast(SendableEventConnection*) op.usedBuffer.ptr; auto url = got.url.idup; eventConnectionsByUrl[url] ~= EventConnection(receivedFd, got.responseChunked > 0 ? true : false); // FIXME: catch up on past messages here } else { auto data = op.usedBuffer; auto event = cast(SendableEvent*) data.ptr; if(event.magic == 0xdeadbeef) { handleInputEvent(event); if(event.url in pipes) foreach(pipe; pipes[event.url]) { event.url = pipe; handleInputEvent(event); } } else { dispatchRpcServer!EventSourceServer(this, data, op.fd); } } return false; } void handleLocalConnectionClose(IoOp* op) { fileClosed(op.fd); } void handleLocalConnectionComplete(IoOp* op) {} void wait_timeout() { // just keeping alive foreach(url, connections; eventConnectionsByUrl) foreach(connection; connections) if(connection.needsChunking) nonBlockingWrite(this, connection.fd, "1b\r\nevent: keepalive\ndata: ok\n\n\r\n"); else nonBlockingWrite(this, connection.fd, "event: keepalive\ndata: ok\n\n\r\n"); } void fileClosed(int fd) { outer: foreach(url, ref connections; eventConnectionsByUrl) { foreach(idx, conn; connections) { if(fd == conn.fd) { connections[idx] = connections[$-1]; connections = connections[0 .. $ - 1]; continue outer; } } } } void epoll_fd(int fd) {} private: struct SendableEventConnection { ubyte responseChunked; int urlLength; char[256] urlBuffer = 0; int lastEventIdLength; char[32] lastEventIdBuffer = 0; char[] url() return { return urlBuffer[0 .. urlLength]; } void url(in char[] u) { urlBuffer[0 .. u.length] = u[]; urlLength = cast(int) u.length; } char[] lastEventId() return { return lastEventIdBuffer[0 .. lastEventIdLength]; } void populate(bool responseChunked, in char[] url, in char[] lastEventId) in { assert(url.length < this.urlBuffer.length); assert(lastEventId.length < this.lastEventIdBuffer.length); } do { this.responseChunked = responseChunked ? 1 : 0; this.urlLength = cast(int) url.length; this.lastEventIdLength = cast(int) lastEventId.length; this.urlBuffer[0 .. url.length] = url[]; this.lastEventIdBuffer[0 .. lastEventId.length] = lastEventId[]; } } struct SendableEvent { int magic = 0xdeadbeef; int urlLength; char[256] urlBuffer = 0; int typeLength; char[32] typeBuffer = 0; int messageLength; char[2048 * 4] messageBuffer = 0; // this is an arbitrary limit, it needs to fit comfortably in stack (including in a fiber) and be a single send on the kernel side cuz of the impl... i think this is ok for a unix socket. int _lifetime; char[] message() return { return messageBuffer[0 .. messageLength]; } char[] type() return { return typeBuffer[0 .. typeLength]; } char[] url() return { return urlBuffer[0 .. urlLength]; } void url(in char[] u) { urlBuffer[0 .. u.length] = u[]; urlLength = cast(int) u.length; } int lifetime() { return _lifetime; } /// void populate(string url, string type, string message, int lifetime) in { assert(url.length < this.urlBuffer.length); assert(type.length < this.typeBuffer.length); assert(message.length < this.messageBuffer.length); } do { this.urlLength = cast(int) url.length; this.typeLength = cast(int) type.length; this.messageLength = cast(int) message.length; this._lifetime = lifetime; this.urlBuffer[0 .. url.length] = url[]; this.typeBuffer[0 .. type.length] = type[]; this.messageBuffer[0 .. message.length] = message[]; } } struct EventConnection { int fd; bool needsChunking; } private EventConnection[][string] eventConnectionsByUrl; private string[][string] pipes; private void handleInputEvent(scope SendableEvent* event) { static int eventId; static struct StoredEvent { int id; string type; string message; int lifetimeRemaining; } StoredEvent[][string] byUrl; int thisId = ++eventId; if(event.lifetime) byUrl[event.url.idup] ~= StoredEvent(thisId, event.type.idup, event.message.idup, event.lifetime); auto connectionsPtr = event.url in eventConnectionsByUrl; EventConnection[] connections; if(connectionsPtr is null) return; else connections = *connectionsPtr; char[4096] buffer; char[] formattedMessage; void append(const char[] a) { // the 6's here are to leave room for a HTTP chunk header, if it proves necessary buffer[6 + formattedMessage.length .. 6 + formattedMessage.length + a.length] = a[]; formattedMessage = buffer[6 .. 6 + formattedMessage.length + a.length]; } import std.algorithm.iteration; if(connections.length) { append("id: "); append(to!string(thisId)); append("\n"); append("event: "); append(event.type); append("\n"); foreach(line; event.message.splitter("\n")) { append("data: "); append(line); append("\n"); } append("\n"); } // chunk it for HTTP! auto len = toHex(formattedMessage.length); buffer[4 .. 6] = "\r\n"[]; buffer[4 - len.length .. 4] = len[]; buffer[6 + formattedMessage.length] = '\r'; buffer[6 + formattedMessage.length + 1] = '\n'; auto chunkedMessage = buffer[4 - len.length .. 6 + formattedMessage.length +2]; // done // FIXME: send back requests when needed // FIXME: send a single ":\n" every 15 seconds to keep alive foreach(connection; connections) { if(connection.needsChunking) { nonBlockingWrite(this, connection.fd, chunkedMessage); } else { nonBlockingWrite(this, connection.fd, formattedMessage); } } } } void runAddonServer(EIS)(string localListenerName, EIS eis) if(is(EIS : EventIoServer)) { version(Posix) { import core.sys.posix.unistd; import core.sys.posix.fcntl; import core.sys.posix.sys.un; import core.sys.posix.signal; signal(SIGPIPE, SIG_IGN); static extern(C) void sigchldhandler(int) { int status; import w = core.sys.posix.sys.wait; w.wait(&status); } signal(SIGCHLD, &sigchldhandler); int sock = socket(AF_UNIX, SOCK_STREAM, 0); if(sock == -1) throw new Exception("socket " ~ to!string(errno)); scope(failure) close(sock); cloexec(sock); // add-on server processes are assumed to be local, and thus will // use unix domain sockets. Besides, I want to pass sockets to them, // so it basically must be local (except for the session server, but meh). sockaddr_un addr; addr.sun_family = AF_UNIX; version(linux) { // on linux, we will use the abstract namespace addr.sun_path[0] = 0; addr.sun_path[1 .. localListenerName.length + 1] = cast(typeof(addr.sun_path[])) localListenerName[]; } else { // but otherwise, just use a file cuz we must. addr.sun_path[0 .. localListenerName.length] = cast(typeof(addr.sun_path[])) localListenerName[]; } if(bind(sock, cast(sockaddr*) &addr, addr.sizeof) == -1) throw new Exception("bind " ~ to!string(errno)); if(listen(sock, 128) == -1) throw new Exception("listen " ~ to!string(errno)); makeNonBlocking(sock); version(linux) { import core.sys.linux.epoll; auto epoll_fd = epoll_create1(EPOLL_CLOEXEC); if(epoll_fd == -1) throw new Exception("epoll_create1 " ~ to!string(errno)); scope(failure) close(epoll_fd); } else { import core.sys.posix.poll; } version(linux) eis.epoll_fd = epoll_fd; auto acceptOp = allocateIoOp(sock, IoOp.Read, 0, null); scope(exit) freeIoOp(acceptOp); version(linux) { epoll_event ev; ev.events = EPOLLIN | EPOLLET; ev.data.ptr = acceptOp; if(epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock, &ev) == -1) throw new Exception("epoll_ctl " ~ to!string(errno)); epoll_event[64] events; } else { pollfd[] pollfds; IoOp*[int] ioops; pollfds ~= pollfd(sock, POLLIN); ioops[sock] = acceptOp; } import core.time : MonoTime, seconds; MonoTime timeout = MonoTime.currTime + 15.seconds; while(true) { // FIXME: it should actually do a timerfd that runs on any thing that hasn't been run recently int timeout_milliseconds = 0; // -1; // infinite timeout_milliseconds = cast(int) (timeout - MonoTime.currTime).total!"msecs"; if(timeout_milliseconds < 0) timeout_milliseconds = 0; //writeln("waiting for ", name); version(linux) { auto nfds = epoll_wait(epoll_fd, events.ptr, events.length, timeout_milliseconds); if(nfds == -1) { if(errno == EINTR) continue; throw new Exception("epoll_wait " ~ to!string(errno)); } } else { int nfds = poll(pollfds.ptr, cast(int) pollfds.length, timeout_milliseconds); size_t lastIdx = 0; } if(nfds == 0) { eis.wait_timeout(); timeout += 15.seconds; } foreach(idx; 0 .. nfds) { version(linux) { auto flags = events[idx].events; auto ioop = cast(IoOp*) events[idx].data.ptr; } else { IoOp* ioop; foreach(tidx, thing; pollfds[lastIdx .. $]) { if(thing.revents) { ioop = ioops[thing.fd]; lastIdx += tidx + 1; break; } } } //writeln(flags, " ", ioop.fd); void newConnection() { // on edge triggering, it is important that we get it all while(true) { version(Android) { auto size = cast(int) addr.sizeof; } else { auto size = cast(uint) addr.sizeof; } auto ns = accept(sock, cast(sockaddr*) &addr, &size); if(ns == -1) { if(errno == EAGAIN || errno == EWOULDBLOCK) { // all done, got it all break; } throw new Exception("accept " ~ to!string(errno)); } cloexec(ns); makeNonBlocking(ns); auto niop = allocateIoOp(ns, IoOp.ReadSocketHandle, 4096 * 4, &eis.handleLocalConnectionData); niop.closeHandler = &eis.handleLocalConnectionClose; niop.completeHandler = &eis.handleLocalConnectionComplete; scope(failure) freeIoOp(niop); version(linux) { epoll_event nev; nev.events = EPOLLIN | EPOLLET; nev.data.ptr = niop; if(epoll_ctl(epoll_fd, EPOLL_CTL_ADD, ns, &nev) == -1) throw new Exception("epoll_ctl " ~ to!string(errno)); } else { bool found = false; foreach(ref pfd; pollfds) { if(pfd.fd < 0) { pfd.fd = ns; found = true; } } if(!found) pollfds ~= pollfd(ns, POLLIN); ioops[ns] = niop; } } } bool newConnectionCondition() { version(linux) return ioop.fd == sock && (flags & EPOLLIN); else return pollfds[idx].fd == sock && (pollfds[idx].revents & POLLIN); } if(newConnectionCondition()) { newConnection(); } else if(ioop.operation == IoOp.ReadSocketHandle) { while(true) { int in_fd; auto got = read_fd(ioop.fd, ioop.allocatedBuffer.ptr, ioop.allocatedBuffer.length, &in_fd); if(got == -1) { if(errno == EAGAIN || errno == EWOULDBLOCK) { // all done, got it all if(ioop.completeHandler) ioop.completeHandler(ioop); break; } throw new Exception("recv " ~ to!string(errno)); } if(got == 0) { if(ioop.closeHandler) { ioop.closeHandler(ioop); version(linux) {} // nothing needed else { foreach(ref pfd; pollfds) { if(pfd.fd == ioop.fd) pfd.fd = -1; } } } close(ioop.fd); freeIoOp(ioop); break; } ioop.bufferLengthUsed = cast(int) got; ioop.handler(ioop, in_fd); } } else if(ioop.operation == IoOp.Read) { while(true) { auto got = read(ioop.fd, ioop.allocatedBuffer.ptr, ioop.allocatedBuffer.length); if(got == -1) { if(errno == EAGAIN || errno == EWOULDBLOCK) { // all done, got it all if(ioop.completeHandler) ioop.completeHandler(ioop); break; } throw new Exception("recv " ~ to!string(ioop.fd) ~ " errno " ~ to!string(errno)); } if(got == 0) { if(ioop.closeHandler) ioop.closeHandler(ioop); close(ioop.fd); freeIoOp(ioop); break; } ioop.bufferLengthUsed = cast(int) got; if(ioop.handler(ioop, ioop.fd)) { close(ioop.fd); freeIoOp(ioop); break; } } } // EPOLLHUP? } } } else version(Windows) { // set up a named pipe // https://msdn.microsoft.com/en-us/library/windows/desktop/ms724251(v=vs.85).aspx // https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-wsaduplicatesocketw // https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getnamedpipeserverprocessid } else static assert(0); } version(with_sendfd) // copied from the web and ported from C // see https://stackoverflow.com/questions/2358684/can-i-share-a-file-descriptor-to-another-process-on-linux-or-are-they-local-to-t ssize_t write_fd(int fd, void *ptr, size_t nbytes, int sendfd) { msghdr msg; iovec[1] iov; version(OSX) { // removed } else version(Android) { } else { union ControlUnion { cmsghdr cm; char[CMSG_SPACE(int.sizeof)] control; } ControlUnion control_un; cmsghdr* cmptr; msg.msg_control = control_un.control.ptr; msg.msg_controllen = control_un.control.length; cmptr = CMSG_FIRSTHDR(&msg); cmptr.cmsg_len = CMSG_LEN(int.sizeof); cmptr.cmsg_level = SOL_SOCKET; cmptr.cmsg_type = SCM_RIGHTS; *(cast(int *) CMSG_DATA(cmptr)) = sendfd; } msg.msg_name = null; msg.msg_namelen = 0; iov[0].iov_base = ptr; iov[0].iov_len = nbytes; msg.msg_iov = iov.ptr; msg.msg_iovlen = 1; return sendmsg(fd, &msg, 0); } version(with_sendfd) // copied from the web and ported from C ssize_t read_fd(int fd, void *ptr, size_t nbytes, int *recvfd) { msghdr msg; iovec[1] iov; ssize_t n; int newfd; version(OSX) { //msg.msg_accrights = cast(cattr_t) recvfd; //msg.msg_accrightslen = int.sizeof; } else version(Android) { } else { union ControlUnion { cmsghdr cm; char[CMSG_SPACE(int.sizeof)] control; } ControlUnion control_un; cmsghdr* cmptr; msg.msg_control = control_un.control.ptr; msg.msg_controllen = control_un.control.length; } msg.msg_name = null; msg.msg_namelen = 0; iov[0].iov_base = ptr; iov[0].iov_len = nbytes; msg.msg_iov = iov.ptr; msg.msg_iovlen = 1; if ( (n = recvmsg(fd, &msg, 0)) <= 0) return n; version(OSX) { //if(msg.msg_accrightslen != int.sizeof) //*recvfd = -1; } else version(Android) { } else { if ( (cmptr = CMSG_FIRSTHDR(&msg)) != null && cmptr.cmsg_len == CMSG_LEN(int.sizeof)) { if (cmptr.cmsg_level != SOL_SOCKET) throw new Exception("control level != SOL_SOCKET"); if (cmptr.cmsg_type != SCM_RIGHTS) throw new Exception("control type != SCM_RIGHTS"); *recvfd = *(cast(int *) CMSG_DATA(cmptr)); } else *recvfd = -1; /* descriptor was not passed */ } return n; } /* end read_fd */ /* Event source stuff The api is: sendEvent(string url, string type, string data, int timeout = 60*10); attachEventListener(string url, int fd, lastId) It just sends to all attached listeners, and stores it until the timeout for replaying via lastEventId. */ /* Session process stuff it stores it all. the cgi object has a session object that can grab it session may be done in the same process if possible, there is a version switch to choose if you want to override. */ struct DispatcherDefinition(alias dispatchHandler, DispatcherDetails = typeof(null)) {// if(is(typeof(dispatchHandler("str", Cgi.init, void) == bool))) { // bool delegate(string urlPrefix, Cgi cgi) dispatchHandler; alias handler = dispatchHandler; string urlPrefix; bool rejectFurther; immutable(DispatcherDetails) details; } private string urlify(string name) pure { return beautify(name, '-', true); } private string beautify(string name, char space = ' ', bool allLowerCase = false) pure { if(name == "id") return allLowerCase ? name : "ID"; char[160] buffer; int bufferIndex = 0; bool shouldCap = true; bool shouldSpace; bool lastWasCap; foreach(idx, char ch; name) { if(bufferIndex == buffer.length) return name; // out of space, just give up, not that important if((ch >= 'A' && ch <= 'Z') || ch == '_') { if(lastWasCap) { // two caps in a row, don't change. Prolly acronym. } else { if(idx) shouldSpace = true; // new word, add space } lastWasCap = true; } else { lastWasCap = false; } if(shouldSpace) { buffer[bufferIndex++] = space; if(bufferIndex == buffer.length) return name; // out of space, just give up, not that important shouldSpace = false; } if(shouldCap) { if(ch >= 'a' && ch <= 'z') ch -= 32; shouldCap = false; } if(allLowerCase && ch >= 'A' && ch <= 'Z') ch += 32; buffer[bufferIndex++] = ch; } return buffer[0 .. bufferIndex].idup; } /* string urlFor(alias func)() { return __traits(identifier, func); } */ /++ UDA: The name displayed to the user in auto-generated HTML. Default is `beautify(identifier)`. +/ struct DisplayName { string name; } /++ UDA: The name used in the URL or web parameter. Default is `urlify(identifier)` for functions and `identifier` for parameters and data members. +/ struct UrlName { string name; } /++ UDA: default format to respond for this method +/ struct DefaultFormat { string value; } class MissingArgumentException : Exception { string functionName; string argumentName; string argumentType; this(string functionName, string argumentName, string argumentType, string file = __FILE__, size_t line = __LINE__, Throwable next = null) { this.functionName = functionName; this.argumentName = argumentName; this.argumentType = argumentType; super("Missing Argument: " ~ this.argumentName, file, line, next); } } /++ You can throw this from an api handler to indicate a 404 response. This is done by the presentExceptionAsHtml function in the presenter. History: Added December 15, 2021 (dub v10.5) +/ class ResourceNotFoundException : Exception { string resourceType; string resourceId; this(string resourceType, string resourceId, string file = __FILE__, size_t line = __LINE__, Throwable next = null) { this.resourceType = resourceType; this.resourceId = resourceId; super("Resource not found: " ~ resourceType ~ " " ~ resourceId, file, line, next); } } /++ This can be attached to any constructor or function called from the cgi system. If it is present, the function argument can NOT be set from web params, but instead is set to the return value of the given `func`. If `func` can take a parameter of type [Cgi], it will be passed the one representing the current request. Otherwise, it must take zero arguments. Any params in your function of type `Cgi` are automatically assumed to take the cgi object for the connection. Any of type [Session] (with an argument) is also assumed to come from the cgi object. const arguments are also supported. +/ struct ifCalledFromWeb(alias func) {} // it only looks at query params for GET requests, the rest must be in the body for a function argument. auto callFromCgi(alias method, T)(T dg, Cgi cgi) { // FIXME: any array of structs should also be settable or gettable from csv as well. // FIXME: think more about checkboxes and bools. import std.traits; Parameters!method params; alias idents = ParameterIdentifierTuple!method; alias defaults = ParameterDefaults!method; const(string)[] names; const(string)[] values; // first, check for missing arguments and initialize to defaults if necessary static if(is(typeof(method) P == __parameters)) foreach(idx, param; P) {{ // see: mustNotBeSetFromWebParams static if(is(param : Cgi)) { static assert(!is(param == immutable)); cast() params[idx] = cgi; } else static if(is(param == Session!D, D)) { static assert(!is(param == immutable)); cast() params[idx] = cgi.getSessionObject!D(); } else { bool populated; foreach(uda; __traits(getAttributes, P[idx .. idx + 1])) { static if(is(uda == ifCalledFromWeb!func, alias func)) { static if(is(typeof(func(cgi)))) params[idx] = func(cgi); else params[idx] = func(); populated = true; } } if(!populated) { static if(__traits(compiles, { params[idx] = param.getAutomaticallyForCgi(cgi); } )) { params[idx] = param.getAutomaticallyForCgi(cgi); populated = true; } } if(!populated) { auto ident = idents[idx]; if(cgi.requestMethod == Cgi.RequestMethod.GET) { if(ident !in cgi.get) { static if(is(defaults[idx] == void)) { static if(is(param == bool)) params[idx] = false; else throw new MissingArgumentException(__traits(identifier, method), ident, param.stringof); } else params[idx] = defaults[idx]; } } else { if(ident !in cgi.post) { static if(is(defaults[idx] == void)) { static if(is(param == bool)) params[idx] = false; else throw new MissingArgumentException(__traits(identifier, method), ident, param.stringof); } else params[idx] = defaults[idx]; } } } } }} // second, parse the arguments in order to build up arrays, etc. static bool setVariable(T)(string name, string paramName, T* what, string value) { static if(is(T == struct)) { if(name == paramName) { *what = T.init; return true; } else { // could be a child. gonna allow either obj.field OR obj[field] string afterName; if(name[paramName.length] == '[') { int count = 1; auto idx = paramName.length + 1; while(idx < name.length && count > 0) { if(name[idx] == '[') count++; else if(name[idx] == ']') { count--; if(count == 0) break; } idx++; } if(idx == name.length) return false; // malformed auto insideBrackets = name[paramName.length + 1 .. idx]; afterName = name[idx + 1 .. $]; name = name[0 .. paramName.length]; paramName = insideBrackets; } else if(name[paramName.length] == '.') { paramName = name[paramName.length + 1 .. $]; name = paramName; int p = 0; foreach(ch; paramName) { if(ch == '.' || ch == '[') break; p++; } afterName = paramName[p .. $]; paramName = paramName[0 .. p]; } else { return false; } if(paramName.length) // set the child member switch(paramName) { foreach(idx, memberName; __traits(allMembers, T)) static if(__traits(compiles, __traits(getMember, T, memberName).offsetof)) { // data member! case memberName: return setVariable(name ~ afterName, paramName, &(__traits(getMember, *what, memberName)), value); } default: // ok, not a member } } return false; } else static if(is(T == enum)) { *what = to!T(value); return true; } else static if(isSomeString!T || isIntegral!T || isFloatingPoint!T) { *what = to!T(value); return true; } else static if(is(T == bool)) { *what = value == "1" || value == "yes" || value == "t" || value == "true" || value == "on"; return true; } else static if(is(T == K[], K)) { K tmp; if(name == paramName) { // direct - set and append if(setVariable(name, paramName, &tmp, value)) { (*what) ~= tmp; return true; } else { return false; } } else { // child, append to last element // FIXME: what about range violations??? auto ptr = &(*what)[(*what).length - 1]; return setVariable(name, paramName, ptr, value); } } else static if(is(T == V[K], K, V)) { // assoc array, name[key] is valid if(name == paramName) { // no action necessary return true; } else if(name[paramName.length] == '[') { int count = 1; auto idx = paramName.length + 1; while(idx < name.length && count > 0) { if(name[idx] == '[') count++; else if(name[idx] == ']') { count--; if(count == 0) break; } idx++; } if(idx == name.length) return false; // malformed auto insideBrackets = name[paramName.length + 1 .. idx]; auto afterName = name[idx + 1 .. $]; auto k = to!K(insideBrackets); V v; if(auto ptr = k in *what) v = *ptr; name = name[0 .. paramName.length]; //writeln(name, afterName, " ", paramName); auto ret = setVariable(name ~ afterName, paramName, &v, value); if(ret) { (*what)[k] = v; return true; } } return false; } else { static assert(0, "unsupported type for cgi call " ~ T.stringof); } //return false; } void setArgument(string name, string value) { int p; foreach(ch; name) { if(ch == '.' || ch == '[') break; p++; } auto paramName = name[0 .. p]; sw: switch(paramName) { static if(is(typeof(method) P == __parameters)) foreach(idx, param; P) { static if(mustNotBeSetFromWebParams!(P[idx], __traits(getAttributes, P[idx .. idx + 1]))) { // cannot be set from the outside } else { case idents[idx]: static if(is(param == Cgi.UploadedFile)) { params[idx] = cgi.files[name]; } else { setVariable(name, paramName, ¶ms[idx], value); } break sw; } } default: // ignore; not relevant argument } } if(cgi.requestMethod == Cgi.RequestMethod.GET) { names = cgi.allGetNamesInOrder; values = cgi.allGetValuesInOrder; } else { names = cgi.allPostNamesInOrder; values = cgi.allPostValuesInOrder; } foreach(idx, name; names) { setArgument(name, values[idx]); } static if(is(ReturnType!method == void)) { typeof(null) ret; dg(params); } else { auto ret = dg(params); } // FIXME: format return values // options are: json, html, csv. // also may need to wrap in envelope format: none, html, or json. return ret; } private bool mustNotBeSetFromWebParams(T, attrs...)() { static if(is(T : const(Cgi))) { return true; } else static if(is(T : const(Session!D), D)) { return true; } else static if(__traits(compiles, T.getAutomaticallyForCgi(Cgi.init))) { return true; } else { foreach(uda; attrs) static if(is(uda == ifCalledFromWeb!func, alias func)) return true; return false; } } private bool hasIfCalledFromWeb(attrs...)() { foreach(uda; attrs) static if(is(uda == ifCalledFromWeb!func, alias func)) return true; return false; } /++ Implies POST path for the thing itself, then GET will get the automatic form. The given customizer, if present, will be called as a filter on the Form object. History: Added December 27, 2020 +/ template AutomaticForm(alias customizer) { } /++ This is meant to be returned by a function that takes a form POST submission. You want to set the url of the new resource it created, which is set as the http Location header for a "201 Created" result, and you can also set a separate destination for browser users, which it sets via a "Refresh" header. The `resourceRepresentation` should generally be the thing you just created, and it will be the body of the http response when formatted through the presenter. The exact thing is up to you - it could just return an id, or the whole object, or perhaps a partial object. Examples: --- class Test : WebObject { @(Cgi.RequestMethod.POST) CreatedResource!int makeThing(string value) { return CreatedResource!int(value.to!int, "/resources/id"); } } --- History: Added December 18, 2021 +/ struct CreatedResource(T) { static if(!is(T == void)) T resourceRepresentation; string resourceUrl; string refreshUrl; } /+ /++ This can be attached as a UDA to a handler to add a http Refresh header on a successful run. (It will not be attached if the function throws an exception.) This will refresh the browser the given number of seconds after the page loads, to the url returned by `urlFunc`, which can be either a static function or a member method of the current handler object. You might use this for a POST handler that is normally used from ajax, but you want it to degrade gracefully to a temporarily flashed message before reloading the main page. History: Added December 18, 2021 +/ struct Refresh(alias urlFunc) { int waitInSeconds; string url() { static if(__traits(isStaticFunction, urlFunc)) return urlFunc(); else static if(is(urlFunc : string)) return urlFunc; } } +/ /+ /++ Sets a filter to be run before A before function can do validations of params and log and stop the function from running. +/ template Before(alias b) {} template After(alias b) {} +/ /+ Argument conversions: for the most part, it is to!Thing(string). But arrays and structs are a bit different. Arrays come from the cgi array. Thus they are passed arr=foo&arr=bar <-- notice the same name. Structs are first declared with an empty thing, then have their members set individually, with dot notation. The members are not required, just the initial declaration. struct Foo { int a; string b; } void test(Foo foo){} foo&foo.a=5&foo.b=str <-- the first foo declares the arg, the others set the members Arrays of structs use this declaration. void test(Foo[] foo) {} foo&foo.a=5&foo.b=bar&foo&foo.a=9 You can use a hidden input field in HTML forms to achieve this. The value of the naked name declaration is ignored. Mind that order matters! The declaration MUST come first in the string. Arrays of struct members follow this rule recursively. struct Foo { int[] a; } foo&foo.a=1&foo.a=2&foo&foo.a=1 Associative arrays are formatted with brackets, after a declaration, like structs: foo&foo[key]=value&foo[other_key]=value Note: for maximum compatibility with outside code, keep your types simple. Some libraries do not support the strict ordering requirements to work with these struct protocols. FIXME: also perhaps accept application/json to better work with outside trash. Return values are also auto-formatted according to user-requested type: for json, it loops over and converts. for html, basic types are strings. Arrays are
    . Structs are
    . Arrays of structs are tables! +/ /++ A web presenter is responsible for rendering things to HTML to be usable in a web browser. They are passed as template arguments to the base classes of [WebObject] Responsible for displaying stuff as HTML. You can put this into your own aggregate and override it. Use forwarding and specialization to customize it. When you inherit from it, pass your own class as the CRTP argument. This lets the base class templates and your overridden templates work with each other. --- class MyPresenter : WebPresenter!(MyPresenter) { @Override void presentSuccessfulReturnAsHtml(T : CustomType)(Cgi cgi, T ret, typeof(null) meta) { // present the CustomType } @Override void presentSuccessfulReturnAsHtml(T)(Cgi cgi, T ret, typeof(null) meta) { // handle everything else via the super class, which will call // back to your class when appropriate super.presentSuccessfulReturnAsHtml(cgi, ret); } } --- The meta argument in there can be overridden by your own facility. +/ class WebPresenter(CRTP) { /// A UDA version of the built-in `override`, to be used for static template polymorphism /// If you override a plain method, use `override`. If a template, use `@Override`. enum Override; string script() { return ` `; } string style() { return ` :root { --mild-border: #ccc; --middle-border: #999; --accent-color: #f2f2f2; --sidebar-color: #fefefe; } ` ~ genericFormStyling() ~ genericSiteStyling(); } string genericFormStyling() { return q"css table.automatic-data-display { border-collapse: collapse; border: solid 1px var(--mild-border); } table.automatic-data-display td { vertical-align: top; border: solid 1px var(--mild-border); padding: 2px 4px; } table.automatic-data-display th { border: solid 1px var(--mild-border); border-bottom: solid 1px var(--middle-border); padding: 2px 4px; } ol.automatic-data-display { margin: 0px; list-style-position: inside; padding: 0px; } dl.automatic-data-display { } .automatic-form { max-width: 600px; } .form-field { margin: 0.5em; padding-left: 0.5em; } .label-text { display: block; font-weight: bold; margin-left: -0.5em; } .submit-button-holder { padding-left: 2em; } .add-array-button { } css"; } string genericSiteStyling() { return q"css * { box-sizing: border-box; } html, body { margin: 0px; } body { font-family: sans-serif; } header { background: var(--accent-color); height: 64px; } footer { background: var(--accent-color); height: 64px; } #site-container { display: flex; } main { flex: 1 1 auto; order: 2; min-height: calc(100vh - 64px - 64px); padding: 4px; padding-left: 1em; } #sidebar { flex: 0 0 16em; order: 1; background: var(--sidebar-color); } css"; } import arsd.dom; Element htmlContainer() { auto document = new Document(q"html D Application
    html", true, true); return document.requireSelector("main"); } /// Renders a response as an HTTP error void renderBasicError(Cgi cgi, int httpErrorCode) { cgi.setResponseStatus(getHttpCodeText(httpErrorCode)); auto c = htmlContainer(); c.innerText = getHttpCodeText(httpErrorCode); cgi.setResponseContentType("text/html; charset=utf-8"); cgi.write(c.parentDocument.toString(), true); } template methodMeta(alias method) { enum methodMeta = null; } void presentSuccessfulReturn(T, Meta)(Cgi cgi, T ret, Meta meta, string format) { switch(format) { case "html": (cast(CRTP) this).presentSuccessfulReturnAsHtml(cgi, ret, meta); break; case "json": import arsd.jsvar; static if(is(typeof(ret) == MultipleResponses!Types, Types...)) { var json; foreach(index, type; Types) { if(ret.contains == index) json = ret.payload[index]; } } else { var json = ret; } var envelope = json; // var.emptyObject; /* envelope.success = true; envelope.result = json; envelope.error = null; */ cgi.setResponseContentType("application/json"); cgi.write(envelope.toJson(), true); break; default: cgi.setResponseStatus("406 Not Acceptable"); // not exactly but sort of. } } /// typeof(null) (which is also used to represent functions returning `void`) do nothing /// in the default presenter - allowing the function to have full low-level control over the /// response. void presentSuccessfulReturn(T : typeof(null), Meta)(Cgi cgi, T ret, Meta meta, string format) { // nothing intentionally! } /// Redirections are forwarded to [Cgi.setResponseLocation] void presentSuccessfulReturn(T : Redirection, Meta)(Cgi cgi, T ret, Meta meta, string format) { cgi.setResponseLocation(ret.to, true, getHttpCodeText(ret.code)); } /// [CreatedResource]s send code 201 and will set the given urls, then present the given representation. void presentSuccessfulReturn(T : CreatedResource!R, Meta, R)(Cgi cgi, T ret, Meta meta, string format) { cgi.setResponseStatus(getHttpCodeText(201)); if(ret.resourceUrl.length) cgi.header("Location: " ~ ret.resourceUrl); if(ret.refreshUrl.length) cgi.header("Refresh: 0;" ~ ret.refreshUrl); static if(!is(R == void)) presentSuccessfulReturn(cgi, ret.resourceRepresentation, meta, format); } /// Multiple responses deconstruct the algebraic type and forward to the appropriate handler at runtime void presentSuccessfulReturn(T : MultipleResponses!Types, Meta, Types...)(Cgi cgi, T ret, Meta meta, string format) { bool outputted = false; foreach(index, type; Types) { if(ret.contains == index) { assert(!outputted); outputted = true; (cast(CRTP) this).presentSuccessfulReturn(cgi, ret.payload[index], meta, format); } } if(!outputted) assert(0); } /++ An instance of the [arsd.dom.FileResource] interface has its own content type; assume it is a download of some sort if the filename member is non-null of the FileResource interface. +/ void presentSuccessfulReturn(T : FileResource, Meta)(Cgi cgi, T ret, Meta meta, string format) { cgi.setCache(true); // not necessarily true but meh if(auto fn = ret.filename()) { cgi.header("Content-Disposition: attachment; filename="~fn~";"); } cgi.setResponseContentType(ret.contentType); cgi.write(ret.getData(), true); } /// And the default handler for HTML will call [formatReturnValueAsHtml] and place it inside the [htmlContainer]. void presentSuccessfulReturnAsHtml(T)(Cgi cgi, T ret, typeof(null) meta) { auto container = this.htmlContainer(); container.appendChild(formatReturnValueAsHtml(ret)); cgi.write(container.parentDocument.toString(), true); } /++ History: Added January 23, 2023 (dub v11.0) +/ void presentExceptionalReturn(Meta)(Cgi cgi, Throwable t, Meta meta, string format) { switch(format) { case "html": presentExceptionAsHtml(cgi, t, meta); break; default: } } /++ If you override this, you will need to cast the exception type `t` dynamically, but can then use the template arguments here to refer back to the function. `func` is an alias to the method itself, and `dg` is a callable delegate to the same method on the live object. You could, in theory, change arguments and retry, but I provide that information mostly with the expectation that you will use them to make useful forms or richer error messages for the user. History: BREAKING CHANGE on January 23, 2023 (v11.0 ): it previously took an `alias func` and `T dg` to call the function again. I removed this in favor of a `Meta` param. Before: `void presentExceptionAsHtml(alias func, T)(Cgi cgi, Throwable t, T dg)` After: `void presentExceptionAsHtml(Meta)(Cgi cgi, Throwable t, Meta meta)` If you used the func for something, move that something into your `methodMeta` template. What is the benefit of this change? Somewhat smaller executables and faster builds thanks to more reused functions, together with enabling an easier implementation of [presentExceptionalReturn]. +/ void presentExceptionAsHtml(Meta)(Cgi cgi, Throwable t, Meta meta) { Form af; /+ foreach(attr; __traits(getAttributes, func)) { static if(__traits(isSame, attr, AutomaticForm)) { af = createAutomaticFormForFunction!(func)(dg); } } +/ presentExceptionAsHtmlImpl(cgi, t, af); } void presentExceptionAsHtmlImpl(Cgi cgi, Throwable t, Form automaticForm) { if(auto e = cast(ResourceNotFoundException) t) { auto container = this.htmlContainer(); container.addChild("p", e.msg); if(!cgi.outputtedResponseData) cgi.setResponseStatus("404 Not Found"); cgi.write(container.parentDocument.toString(), true); } else if(auto mae = cast(MissingArgumentException) t) { if(automaticForm is null) goto generic; auto container = this.htmlContainer(); if(cgi.requestMethod == Cgi.RequestMethod.POST) container.appendChild(Element.make("p", "Argument `" ~ mae.argumentName ~ "` of type `" ~ mae.argumentType ~ "` is missing")); container.appendChild(automaticForm); cgi.write(container.parentDocument.toString(), true); } else { generic: auto container = this.htmlContainer(); // import std.stdio; writeln(t.toString()); container.appendChild(exceptionToElement(t)); container.addChild("h4", "GET"); foreach(k, v; cgi.get) { auto deets = container.addChild("details"); deets.addChild("summary", k); deets.addChild("div", v); } container.addChild("h4", "POST"); foreach(k, v; cgi.post) { auto deets = container.addChild("details"); deets.addChild("summary", k); deets.addChild("div", v); } if(!cgi.outputtedResponseData) cgi.setResponseStatus("500 Internal Server Error"); cgi.write(container.parentDocument.toString(), true); } } Element exceptionToElement(Throwable t) { auto div = Element.make("div"); div.addClass("exception-display"); div.addChild("p", t.msg); div.addChild("p", "Inner code origin: " ~ typeid(t).name ~ "@" ~ t.file ~ ":" ~ to!string(t.line)); auto pre = div.addChild("pre"); string s; s = t.toString(); Element currentBox; bool on = false; foreach(line; s.splitLines) { if(!on && line.startsWith("-----")) on = true; if(!on) continue; if(line.indexOf("arsd/") != -1) { if(currentBox is null) { currentBox = pre.addChild("details"); currentBox.addChild("summary", "Framework code"); } currentBox.addChild("span", line ~ "\n"); } else { pre.addChild("span", line ~ "\n"); currentBox = null; } } return div; } /++ Returns an element for a particular type +/ Element elementFor(T)(string displayName, string name, Element function() udaSuggestion) { import std.traits; auto div = Element.make("div"); div.addClass("form-field"); static if(is(T == Cgi.UploadedFile)) { Element lbl; if(displayName !is null) { lbl = div.addChild("label"); lbl.addChild("span", displayName, "label-text"); lbl.appendText(" "); } else { lbl = div; } auto i = lbl.addChild("input", name); i.attrs.name = name; i.attrs.type = "file"; } else static if(is(T == enum)) { Element lbl; if(displayName !is null) { lbl = div.addChild("label"); lbl.addChild("span", displayName, "label-text"); lbl.appendText(" "); } else { lbl = div; } auto i = lbl.addChild("select", name); i.attrs.name = name; foreach(memberName; __traits(allMembers, T)) i.addChild("option", memberName); } else static if(is(T == struct)) { if(displayName !is null) div.addChild("span", displayName, "label-text"); auto fieldset = div.addChild("fieldset"); fieldset.addChild("legend", beautify(T.stringof)); // FIXME fieldset.addChild("input", name); foreach(idx, memberName; __traits(allMembers, T)) static if(__traits(compiles, __traits(getMember, T, memberName).offsetof)) { fieldset.appendChild(elementFor!(typeof(__traits(getMember, T, memberName)))(beautify(memberName), name ~ "." ~ memberName, null /* FIXME: pull off the UDA */)); } } else static if(isSomeString!T || isIntegral!T || isFloatingPoint!T) { Element lbl; if(displayName !is null) { lbl = div.addChild("label"); lbl.addChild("span", displayName, "label-text"); lbl.appendText(" "); } else { lbl = div; } Element i; if(udaSuggestion) { i = udaSuggestion(); lbl.appendChild(i); } else { i = lbl.addChild("input", name); } i.attrs.name = name; static if(isSomeString!T) i.attrs.type = "text"; else i.attrs.type = "number"; if(i.tagName == "textarea") i.textContent = to!string(T.init); else i.attrs.value = to!string(T.init); } else static if(is(T == bool)) { Element lbl; if(displayName !is null) { lbl = div.addChild("label"); lbl.addChild("span", displayName, "label-text"); lbl.appendText(" "); } else { lbl = div; } auto i = lbl.addChild("input", name); i.attrs.type = "checkbox"; i.attrs.value = "true"; i.attrs.name = name; } else static if(is(T == K[], K)) { auto templ = div.addChild("template"); templ.appendChild(elementFor!(K)(null, name, null /* uda??*/)); if(displayName !is null) div.addChild("span", displayName, "label-text"); auto btn = div.addChild("button"); btn.addClass("add-array-button"); btn.attrs.type = "button"; btn.innerText = "Add"; btn.attrs.onclick = q{ var a = document.importNode(this.parentNode.firstChild.content, true); this.parentNode.insertBefore(a, this); }; } else static if(is(T == V[K], K, V)) { div.innerText = "assoc array not implemented for automatic form at this time"; } else { static assert(0, "unsupported type for cgi call " ~ T.stringof); } return div; } /// creates a form for gathering the function's arguments Form createAutomaticFormForFunction(alias method, T)(T dg) { auto form = cast(Form) Element.make("form"); form.method = "POST"; // FIXME form.addClass("automatic-form"); string formDisplayName = beautify(__traits(identifier, method)); foreach(attr; __traits(getAttributes, method)) static if(is(typeof(attr) == DisplayName)) formDisplayName = attr.name; form.addChild("h3", formDisplayName); import std.traits; //Parameters!method params; //alias idents = ParameterIdentifierTuple!method; //alias defaults = ParameterDefaults!method; static if(is(typeof(method) P == __parameters)) foreach(idx, _; P) {{ alias param = P[idx .. idx + 1]; static if(!mustNotBeSetFromWebParams!(param[0], __traits(getAttributes, param))) { string displayName = beautify(__traits(identifier, param)); Element function() element; foreach(attr; __traits(getAttributes, param)) { static if(is(typeof(attr) == DisplayName)) displayName = attr.name; else static if(is(typeof(attr) : typeof(element))) { element = attr; } } auto i = form.appendChild(elementFor!(param)(displayName, __traits(identifier, param), element)); if(i.querySelector("input[type=file]") !is null) form.setAttribute("enctype", "multipart/form-data"); } }} form.addChild("div", Html(``), "submit-button-holder"); return form; } /// creates a form for gathering object members (for the REST object thing right now) Form createAutomaticFormForObject(T)(T obj) { auto form = cast(Form) Element.make("form"); form.addClass("automatic-form"); form.addChild("h3", beautify(__traits(identifier, T))); import std.traits; //Parameters!method params; //alias idents = ParameterIdentifierTuple!method; //alias defaults = ParameterDefaults!method; foreach(idx, memberName; __traits(derivedMembers, T)) {{ static if(__traits(compiles, __traits(getMember, obj, memberName).offsetof)) { string displayName = beautify(memberName); Element function() element; foreach(attr; __traits(getAttributes, __traits(getMember, T, memberName))) static if(is(typeof(attr) == DisplayName)) displayName = attr.name; else static if(is(typeof(attr) : typeof(element))) element = attr; form.appendChild(elementFor!(typeof(__traits(getMember, T, memberName)))(displayName, memberName, element)); form.setValue(memberName, to!string(__traits(getMember, obj, memberName))); }}} form.addChild("div", Html(``), "submit-button-holder"); return form; } /// Element formatReturnValueAsHtml(T)(T t) { import std.traits; static if(is(T == typeof(null))) { return Element.make("span"); } else static if(is(T : Element)) { return t; } else static if(is(T == MultipleResponses!Types, Types...)) { foreach(index, type; Types) { if(t.contains == index) return formatReturnValueAsHtml(t.payload[index]); } assert(0); } else static if(is(T == Paginated!E, E)) { auto e = Element.make("div").addClass("paginated-result"); e.appendChild(formatReturnValueAsHtml(t.items)); if(t.nextPageUrl.length) e.appendChild(Element.make("a", "Next Page", t.nextPageUrl)); return e; } else static if(isIntegral!T || isSomeString!T || isFloatingPoint!T) { return Element.make("span", to!string(t), "automatic-data-display"); } else static if(is(T == V[K], K, V)) { auto dl = Element.make("dl"); dl.addClass("automatic-data-display associative-array"); foreach(k, v; t) { dl.addChild("dt", to!string(k)); dl.addChild("dd", formatReturnValueAsHtml(v)); } return dl; } else static if(is(T == struct)) { auto dl = Element.make("dl"); dl.addClass("automatic-data-display struct"); foreach(idx, memberName; __traits(allMembers, T)) static if(__traits(compiles, __traits(getMember, T, memberName).offsetof)) { dl.addChild("dt", beautify(memberName)); dl.addChild("dd", formatReturnValueAsHtml(__traits(getMember, t, memberName))); } return dl; } else static if(is(T == bool)) { return Element.make("span", t ? "true" : "false", "automatic-data-display"); } else static if(is(T == E[], E)) { static if(is(E : RestObject!Proxy, Proxy)) { // treat RestObject similar to struct auto table = cast(Table) Element.make("table"); table.addClass("automatic-data-display"); string[] names; foreach(idx, memberName; __traits(derivedMembers, E)) static if(__traits(compiles, __traits(getMember, E, memberName).offsetof)) { names ~= beautify(memberName); } table.appendHeaderRow(names); foreach(l; t) { auto tr = table.appendRow(); foreach(idx, memberName; __traits(derivedMembers, E)) static if(__traits(compiles, __traits(getMember, E, memberName).offsetof)) { static if(memberName == "id") { string val = to!string(__traits(getMember, l, memberName)); tr.addChild("td", Element.make("a", val, E.stringof.toLower ~ "s/" ~ val)); // FIXME } else { tr.addChild("td", formatReturnValueAsHtml(__traits(getMember, l, memberName))); } } } return table; } else static if(is(E == struct)) { // an array of structs is kinda special in that I like // having those formatted as tables. auto table = cast(Table) Element.make("table"); table.addClass("automatic-data-display"); string[] names; foreach(idx, memberName; __traits(allMembers, E)) static if(__traits(compiles, __traits(getMember, E, memberName).offsetof)) { names ~= beautify(memberName); } table.appendHeaderRow(names); foreach(l; t) { auto tr = table.appendRow(); foreach(idx, memberName; __traits(allMembers, E)) static if(__traits(compiles, __traits(getMember, E, memberName).offsetof)) { tr.addChild("td", formatReturnValueAsHtml(__traits(getMember, l, memberName))); } } return table; } else { // otherwise, I will just make a list. auto ol = Element.make("ol"); ol.addClass("automatic-data-display"); foreach(e; t) ol.addChild("li", formatReturnValueAsHtml(e)); return ol; } } else static if(is(T : Object)) { static if(is(typeof(t.toHtml()))) // FIXME: maybe i will make this an interface return Element.make("div", t.toHtml()); else return Element.make("div", t.toString()); } else static assert(0, "bad return value for cgi call " ~ T.stringof); assert(0); } } /++ The base class for the [dispatcher] function and object support. +/ class WebObject { //protected Cgi cgi; protected void initialize(Cgi cgi) { //this.cgi = cgi; } } /++ Can return one of the given types, decided at runtime. The syntax is to declare all the possible types in the return value, then you can `return typeof(return)(...value...)` to construct it. It has an auto-generated constructor for each value it can hold. --- MultipleResponses!(Redirection, string) getData(int how) { if(how & 1) return typeof(return)(Redirection("http://dpldocs.info/")); else return typeof(return)("hi there!"); } --- If you have lots of returns, you could, inside the function, `alias r = typeof(return);` to shorten it a little. +/ struct MultipleResponses(T...) { private size_t contains; private union { private T payload; } static foreach(index, type; T) public this(type t) { contains = index; payload[index] = t; } /++ This is primarily for testing. It is your way of getting to the response. Let's say you wanted to test that one holding a Redirection and a string actually holds a string, by name of "test": --- auto valueToTest = your_test_function(); valueToTest.visit( (Redirection r) { assert(0); }, // got a redirection instead of a string, fail the test (string s) { assert(s == "test"); } // right value, go ahead and test it. ); --- History: Was horribly broken until June 16, 2022. Ironically, I wrote it for tests but never actually tested it. It tried to use alias lambdas before, but runtime delegates work much better so I changed it. +/ void visit(Handlers...)(Handlers handlers) { template findHandler(type, int count, HandlersToCheck...) { static if(HandlersToCheck.length == 0) enum findHandler = -1; else { static if(is(typeof(HandlersToCheck[0].init(type.init)))) enum findHandler = count; else enum findHandler = findHandler!(type, count + 1, HandlersToCheck[1 .. $]); } } foreach(index, type; T) { enum handlerIndex = findHandler!(type, 0, Handlers); static if(handlerIndex == -1) static assert(0, "Type " ~ type.stringof ~ " was not handled by visitor"); else { if(index == this.contains) handlers[handlerIndex](this.payload[index]); } } } /+ auto toArsdJsvar()() { import arsd.jsvar; return var(null); } +/ } // FIXME: implement this somewhere maybe struct RawResponse { int code; string[] headers; const(ubyte)[] responseBody; } /++ You can return this from [WebObject] subclasses for redirections. (though note the static types means that class must ALWAYS redirect if you return this directly. You might want to return [MultipleResponses] if it can be conditional) +/ struct Redirection { string to; /// The URL to redirect to. int code = 303; /// The HTTP code to return. } /++ Serves a class' methods, as a kind of low-state RPC over the web. To be used with [dispatcher]. Usage of this function will add a dependency on [arsd.dom] and [arsd.jsvar] unless you have overridden the presenter in the dispatcher. FIXME: explain this better You can overload functions to a limited extent: you can provide a zero-arg and non-zero-arg function, and non-zero-arg functions can filter via UDAs for various http methods. Do not attempt other overloads, the runtime result of that is undefined. A method is assumed to allow any http method unless it lists some in UDAs, in which case it is limited to only those. (this might change, like maybe i will use pure as an indicator GET is ok. idk.) $(WARNING --- // legal in D, undefined runtime behavior with cgi.d, it may call either method // even if you put different URL udas on it, the current code ignores them. void foo(int a) {} void foo(string a) {} --- ) See_Also: [serveRestObject], [serveStaticFile] +/ auto serveApi(T)(string urlPrefix) { assert(urlPrefix[$ - 1] == '/'); return serveApiInternal!T(urlPrefix); } private string nextPieceFromSlash(ref string remainingUrl) { if(remainingUrl.length == 0) return remainingUrl; int slash = 0; while(slash < remainingUrl.length && remainingUrl[slash] != '/') // && remainingUrl[slash] != '.') slash++; // I am specifically passing `null` to differentiate it vs empty string // so in your ctor, `items` means new T(null) and `items/` means new T("") auto ident = remainingUrl.length == 0 ? null : remainingUrl[0 .. slash]; // so if it is the last item, the dot can be used to load an alternative view // otherwise tho the dot is considered part of the identifier // FIXME // again notice "" vs null here! if(slash == remainingUrl.length) remainingUrl = null; else remainingUrl = remainingUrl[slash + 1 .. $]; return ident; } /++ UDA used to indicate to the [dispatcher] that a trailing slash should always be added to or removed from the url. It will do it as a redirect header as-needed. +/ enum AddTrailingSlash; /// ditto enum RemoveTrailingSlash; private auto serveApiInternal(T)(string urlPrefix) { import arsd.dom; import arsd.jsvar; static bool internalHandler(Presenter)(string urlPrefix, Cgi cgi, Presenter presenter, immutable void* details) { string remainingUrl = cgi.pathInfo[urlPrefix.length .. $]; try { // see duplicated code below by searching subresource_ctor // also see mustNotBeSetFromWebParams static if(is(typeof(T.__ctor) P == __parameters)) { P params; foreach(pidx, param; P) { static if(is(param : Cgi)) { static assert(!is(param == immutable)); cast() params[pidx] = cgi; } else static if(is(param == Session!D, D)) { static assert(!is(param == immutable)); cast() params[pidx] = cgi.getSessionObject!D(); } else { static if(hasIfCalledFromWeb!(__traits(getAttributes, P[pidx .. pidx + 1]))) { foreach(uda; __traits(getAttributes, P[pidx .. pidx + 1])) { static if(is(uda == ifCalledFromWeb!func, alias func)) { static if(is(typeof(func(cgi)))) params[pidx] = func(cgi); else params[pidx] = func(); } } } else { static if(__traits(compiles, { params[pidx] = param.getAutomaticallyForCgi(cgi); } )) { params[pidx] = param.getAutomaticallyForCgi(cgi); } else static if(is(param == string)) { auto ident = nextPieceFromSlash(remainingUrl); params[pidx] = ident; } else static assert(0, "illegal type for subresource " ~ param.stringof); } } } auto obj = new T(params); } else { auto obj = new T(); } return internalHandlerWithObject(obj, remainingUrl, cgi, presenter); } catch(Throwable t) { switch(cgi.request("format", "html")) { case "html": static void dummy() {} presenter.presentExceptionAsHtml(cgi, t, null); return true; case "json": var envelope = var.emptyObject; envelope.success = false; envelope.result = null; envelope.error = t.toString(); cgi.setResponseContentType("application/json"); cgi.write(envelope.toJson(), true); return true; default: throw t; // return true; } // return true; } assert(0); } static bool internalHandlerWithObject(T, Presenter)(T obj, string remainingUrl, Cgi cgi, Presenter presenter) { obj.initialize(cgi); /+ Overload rules: Any unique combination of HTTP verb and url path can be dispatched to function overloads statically. Moreover, some args vs no args can be overloaded dynamically. +/ auto methodNameFromUrl = nextPieceFromSlash(remainingUrl); /+ auto orig = remainingUrl; assert(0, (orig is null ? "__null" : orig) ~ " .. " ~ (methodNameFromUrl is null ? "__null" : methodNameFromUrl)); +/ if(methodNameFromUrl is null) methodNameFromUrl = "__null"; string hack = to!string(cgi.requestMethod) ~ " " ~ methodNameFromUrl; if(remainingUrl.length) hack ~= "/"; switch(hack) { foreach(methodName; __traits(derivedMembers, T)) static if(methodName != "__ctor") foreach(idx, overload; __traits(getOverloads, T, methodName)) { static if(is(typeof(overload) P == __parameters)) static if(is(typeof(overload) R == return)) static if(__traits(getProtection, overload) == "public" || __traits(getProtection, overload) == "export") { static foreach(urlNameForMethod; urlNamesForMethod!(overload, urlify(methodName))) case urlNameForMethod: static if(is(R : WebObject)) { // if it returns a WebObject, it is considered a subresource. That means the url is dispatched like the ctor above. // the only argument it is allowed to take, outside of cgi, session, and set up thingies, is a single string // subresource_ctor // also see mustNotBeSetFromWebParams P params; string ident; foreach(pidx, param; P) { static if(is(param : Cgi)) { static assert(!is(param == immutable)); cast() params[pidx] = cgi; } else static if(is(param == typeof(presenter))) { cast() param[pidx] = presenter; } else static if(is(param == Session!D, D)) { static assert(!is(param == immutable)); cast() params[pidx] = cgi.getSessionObject!D(); } else { static if(hasIfCalledFromWeb!(__traits(getAttributes, P[pidx .. pidx + 1]))) { foreach(uda; __traits(getAttributes, P[pidx .. pidx + 1])) { static if(is(uda == ifCalledFromWeb!func, alias func)) { static if(is(typeof(func(cgi)))) params[pidx] = func(cgi); else params[pidx] = func(); } } } else { static if(__traits(compiles, { params[pidx] = param.getAutomaticallyForCgi(cgi); } )) { params[pidx] = param.getAutomaticallyForCgi(cgi); } else static if(is(param == string)) { ident = nextPieceFromSlash(remainingUrl); if(ident is null) { // trailing slash mandated on subresources cgi.setResponseLocation(cgi.pathInfo ~ "/"); return true; } else { params[pidx] = ident; } } else static assert(0, "illegal type for subresource " ~ param.stringof); } } } auto nobj = (__traits(getOverloads, obj, methodName)[idx])(ident); return internalHandlerWithObject!(typeof(nobj), Presenter)(nobj, remainingUrl, cgi, presenter); } else { // 404 it if any url left - not a subresource means we don't get to play with that! if(remainingUrl.length) return false; bool automaticForm; foreach(attr; __traits(getAttributes, overload)) static if(is(attr == AddTrailingSlash)) { if(remainingUrl is null) { cgi.setResponseLocation(cgi.pathInfo ~ "/"); return true; } } else static if(is(attr == RemoveTrailingSlash)) { if(remainingUrl !is null) { cgi.setResponseLocation(cgi.pathInfo[0 .. lastIndexOf(cgi.pathInfo, "/")]); return true; } } else static if(__traits(isSame, AutomaticForm, attr)) { automaticForm = true; } /+ int zeroArgOverload = -1; int overloadCount = cast(int) __traits(getOverloads, T, methodName).length; bool calledWithZeroArgs = true; foreach(k, v; cgi.get) if(k != "format") { calledWithZeroArgs = false; break; } foreach(k, v; cgi.post) if(k != "format") { calledWithZeroArgs = false; break; } // first, we need to go through and see if there is an empty one, since that // changes inside. But otherwise, all the stuff I care about can be done via // simple looping (other improper overloads might be flagged for runtime semantic check) // // an argument of type Cgi is ignored for these purposes static foreach(idx, overload; __traits(getOverloads, T, methodName)) {{ static if(is(typeof(overload) P == __parameters)) static if(P.length == 0) zeroArgOverload = cast(int) idx; else static if(P.length == 1 && is(P[0] : Cgi)) zeroArgOverload = cast(int) idx; }} // FIXME: static assert if there are multiple non-zero-arg overloads usable with a single http method. bool overloadHasBeenCalled = false; static foreach(idx, overload; __traits(getOverloads, T, methodName)) {{ bool callFunction = true; // there is a zero arg overload and this is NOT it, and we have zero args - don't call this if(overloadCount > 1 && zeroArgOverload != -1 && idx != zeroArgOverload && calledWithZeroArgs) callFunction = false; // if this is the zero-arg overload, obviously it cannot be called if we got any args. if(overloadCount > 1 && idx == zeroArgOverload && !calledWithZeroArgs) callFunction = false; // FIXME: so if you just add ?foo it will give the error below even when. this might not be a great idea. bool hadAnyMethodRestrictions = false; bool foundAcceptableMethod = false; foreach(attr; __traits(getAttributes, overload)) { static if(is(typeof(attr) == Cgi.RequestMethod)) { hadAnyMethodRestrictions = true; if(attr == cgi.requestMethod) foundAcceptableMethod = true; } } if(hadAnyMethodRestrictions && !foundAcceptableMethod) callFunction = false; /+ The overloads we really want to allow are the sane ones from the web perspective. Which is likely on HTTP verbs, for the most part, but might also be potentially based on some args vs zero args, or on argument names. Can't really do argument types very reliable through the web though; those should probably be different URLs. Even names I feel is better done inside the function, so I'm not going to support that here. But the HTTP verbs and zero vs some args makes sense - it lets you define custom forms pretty easily. Moreover, I'm of the opinion that empty overload really only makes sense on GET for this case. On a POST, it is just a missing argument exception and that should be handled by the presenter. But meh, I'll let the user define that, D only allows one empty arg thing anyway so the method UDAs are irrelevant. +/ if(callFunction) +/ auto format = cgi.request("format", defaultFormat!overload()); auto wantsFormFormat = format.startsWith("form-"); if(wantsFormFormat || (automaticForm && cgi.requestMethod == Cgi.RequestMethod.GET)) { // Should I still show the form on a json thing? idk... auto ret = presenter.createAutomaticFormForFunction!((__traits(getOverloads, obj, methodName)[idx]))(&(__traits(getOverloads, obj, methodName)[idx])); presenter.presentSuccessfulReturn(cgi, ret, presenter.methodMeta!(__traits(getOverloads, obj, methodName)[idx]), wantsFormFormat ? format["form_".length .. $] : "html"); return true; } try { // a void return (or typeof(null) lol) means you, the user, is doing it yourself. Gives full control. auto ret = callFromCgi!(__traits(getOverloads, obj, methodName)[idx])(&(__traits(getOverloads, obj, methodName)[idx]), cgi); presenter.presentSuccessfulReturn(cgi, ret, presenter.methodMeta!(__traits(getOverloads, obj, methodName)[idx]), format); } catch(Throwable t) { // presenter.presentExceptionAsHtml!(__traits(getOverloads, obj, methodName)[idx])(cgi, t, &(__traits(getOverloads, obj, methodName)[idx])); presenter.presentExceptionalReturn(cgi, t, presenter.methodMeta!(__traits(getOverloads, obj, methodName)[idx]), format); } return true; //}} //cgi.header("Accept: POST"); // FIXME list the real thing //cgi.setResponseStatus("405 Method Not Allowed"); // again, not exactly, but sort of. no overload matched our args, almost certainly due to http verb filtering. //return true; } } } case "GET script.js": cgi.setResponseContentType("text/javascript"); cgi.gzipResponse = true; cgi.write(presenter.script(), true); return true; case "GET style.css": cgi.setResponseContentType("text/css"); cgi.gzipResponse = true; cgi.write(presenter.style(), true); return true; default: return false; } assert(0); } return DispatcherDefinition!internalHandler(urlPrefix, false); } string defaultFormat(alias method)() { bool nonConstConditionForWorkingAroundASpuriousDmdWarning = true; foreach(attr; __traits(getAttributes, method)) { static if(is(typeof(attr) == DefaultFormat)) { if(nonConstConditionForWorkingAroundASpuriousDmdWarning) return attr.value; } } return "html"; } struct Paginated(T) { T[] items; string nextPageUrl; } template urlNamesForMethod(alias method, string default_) { string[] helper() { auto verb = Cgi.RequestMethod.GET; bool foundVerb = false; bool foundNoun = false; string def = default_; bool hasAutomaticForm = false; foreach(attr; __traits(getAttributes, method)) { static if(is(typeof(attr) == Cgi.RequestMethod)) { verb = attr; if(foundVerb) assert(0, "Multiple http verbs on one function is not currently supported"); foundVerb = true; } static if(is(typeof(attr) == UrlName)) { if(foundNoun) assert(0, "Multiple url names on one function is not currently supported"); foundNoun = true; def = attr.name; } static if(__traits(isSame, attr, AutomaticForm)) { hasAutomaticForm = true; } } if(def is null) def = "__null"; string[] ret; static if(is(typeof(method) R == return)) { static if(is(R : WebObject)) { def ~= "/"; foreach(v; __traits(allMembers, Cgi.RequestMethod)) ret ~= v ~ " " ~ def; } else { if(hasAutomaticForm) { ret ~= "GET " ~ def; ret ~= "POST " ~ def; } else { ret ~= to!string(verb) ~ " " ~ def; } } } else static assert(0); return ret; } enum urlNamesForMethod = helper(); } enum AccessCheck { allowed, denied, nonExistent, } enum Operation { show, create, replace, remove, update } enum UpdateResult { accessDenied, noSuchResource, success, failure, unnecessary } enum ValidationResult { valid, invalid } /++ The base of all REST objects, to be used with [serveRestObject] and [serveRestCollectionOf]. WARNING: this is not stable. +/ class RestObject(CRTP) : WebObject { import arsd.dom; import arsd.jsvar; /// Prepare the object to be shown. void show() {} /// ditto void show(string urlId) { load(urlId); show(); } /// Override this to provide access control to this object. AccessCheck accessCheck(string urlId, Operation operation) { return AccessCheck.allowed; } ValidationResult validate() { // FIXME return ValidationResult.valid; } string getUrlSlug() { import std.conv; static if(is(typeof(CRTP.id))) return to!string((cast(CRTP) this).id); else return null; } // The functions with more arguments are the low-level ones, // they forward to the ones with fewer arguments by default. // POST on a parent collection - this is called from a collection class after the members are updated /++ Given a populated object, this creates a new entry. Returns the url identifier of the new object. +/ string create(scope void delegate() applyChanges) { applyChanges(); save(); return getUrlSlug(); } void replace() { save(); } void replace(string urlId, scope void delegate() applyChanges) { load(urlId); applyChanges(); replace(); } void update(string[] fieldList) { save(); } void update(string urlId, scope void delegate() applyChanges, string[] fieldList) { load(urlId); applyChanges(); update(fieldList); } void remove() {} void remove(string urlId) { load(urlId); remove(); } abstract void load(string urlId); abstract void save(); Element toHtml(Presenter)(Presenter presenter) { import arsd.dom; import std.conv; auto obj = cast(CRTP) this; auto div = Element.make("div"); div.addClass("Dclass_" ~ CRTP.stringof); div.dataset.url = getUrlSlug(); bool first = true; foreach(idx, memberName; __traits(derivedMembers, CRTP)) static if(__traits(compiles, __traits(getMember, obj, memberName).offsetof)) { if(!first) div.addChild("br"); else first = false; div.appendChild(presenter.formatReturnValueAsHtml(__traits(getMember, obj, memberName))); } return div; } var toJson() { import arsd.jsvar; var v = var.emptyObject(); auto obj = cast(CRTP) this; foreach(idx, memberName; __traits(derivedMembers, CRTP)) static if(__traits(compiles, __traits(getMember, obj, memberName).offsetof)) { v[memberName] = __traits(getMember, obj, memberName); } return v; } /+ auto structOf(this This) { } +/ } // FIXME XSRF token, prolly can just put in a cookie and then it needs to be copied to header or form hidden value // https://use-the-index-luke.com/sql/partial-results/fetch-next-page /++ Base class for REST collections. +/ class CollectionOf(Obj) : RestObject!(CollectionOf) { /// You might subclass this and use the cgi object's query params /// to implement a search filter, for example. /// /// FIXME: design a way to auto-generate that form /// (other than using the WebObject thing above lol // it'll prolly just be some searchParams UDA or maybe an enum. // // pagination too perhaps. // // and sorting too IndexResult index() { return IndexResult.init; } string[] sortableFields() { return null; } string[] searchableFields() { return null; } struct IndexResult { Obj[] results; string[] sortableFields; string previousPageIdentifier; string nextPageIdentifier; string firstPageIdentifier; string lastPageIdentifier; int numberOfPages; } override string create(scope void delegate() applyChanges) { assert(0); } override void load(string urlId) { assert(0); } override void save() { assert(0); } override void show() { index(); } override void show(string urlId) { show(); } /// Proxy POST requests (create calls) to the child collection alias PostProxy = Obj; } /++ Serves a REST object, similar to a Ruby on Rails resource. You put data members in your class. cgi.d will automatically make something out of those. It will call your constructor with the ID from the URL. This may be null. It will then populate the data members from the request. It will then call a method, if present, telling what happened. You don't need to write these! It finally returns a reply. Your methods are passed a list of fields it actually set. The URL mapping - despite my general skepticism of the wisdom - matches up with what most REST APIs I have used seem to follow. (I REALLY want to put trailing slashes on it though. Works better with relative linking. But meh.) GET /items -> index. all values not set. GET /items/id -> get. only ID will be set, other params ignored. POST /items -> create. values set as given PUT /items/id -> replace. values set as given or POST /items/id with cgi.post["_method"] (thus urlencoded or multipart content-type) set to "PUT" to work around browser/html limitation a GET with cgi.get["_method"] (in the url) set to "PUT" will render a form. PATCH /items/id -> update. values set as given, list of changed fields passed or POST /items/id with cgi.post["_method"] == "PATCH" DELETE /items/id -> destroy. only ID guaranteed to be set or POST /items/id with cgi.post["_method"] == "DELETE" Following the stupid convention, there will never be a trailing slash here, and if it is there, it will redirect you away from it. API clients should set the `Accept` HTTP header to application/json or the cgi.get["_format"] = "json" var. I will also let you change the default, if you must. // One add-on is validation. You can issue a HTTP GET to a resource with _method = VALIDATE to check potential changes. You can define sub-resources on your object inside the object. These sub-resources are also REST objects that follow the same thing. They may be individual resources or collections themselves. Your class is expected to have at least the following methods: FIXME: i kinda wanna add a routes object to the initialize call create Create returns the new address on success, some code on failure. show index update remove You will want to be able to customize the HTTP, HTML, and JSON returns but generally shouldn't have to - the defaults should usually work. The returned JSON will include a field "href" on all returned objects along with "id". Or something like that. Usage of this function will add a dependency on [arsd.dom] and [arsd.jsvar]. NOT IMPLEMENTED Really, a collection is a resource with a bunch of subresources. GET /items index because it is GET on the top resource GET /items/foo item but different than items? class Items { } ... but meh, a collection can be automated. not worth making it a separate thing, let's look at a real example. Users has many items and a virtual one, /users/current. the individual users have properties and two sub-resources: session, which is just one, and comments, a collection. class User : RestObject!() { // no parent int id; string name; // the default implementations of the urlId ones is to call load(that_id) then call the arg-less one. // but you can override them to do it differently. // any member which is of type RestObject can be linked automatically via href btw. void show() {} void show(string urlId) {} // automated! GET of this specific thing void create() {} // POST on a parent collection - this is called from a collection class after the members are updated void replace(string urlId) {} // this is the PUT; really, it just updates all fields. void update(string urlId, string[] fieldList) {} // PATCH, it updates some fields. void remove(string urlId) {} // DELETE void load(string urlId) {} // the default implementation of show() populates the id, then this() {} mixin Subresource!Session; mixin Subresource!Comment; } class Session : RestObject!() { // the parent object may not be fully constructed/loaded this(User parent) {} } class Comment : CollectionOf!Comment { this(User parent) {} } class Users : CollectionOf!User { // but you don't strictly need ANYTHING on a collection; it will just... collect. Implement the subobjects. void index() {} // GET on this specific thing; just like show really, just different name for the different semantics. User create() {} // You MAY implement this, but the default is to create a new object, populate it from args, and then call create() on the child } +/ auto serveRestObject(T)(string urlPrefix) { assert(urlPrefix[0] == '/'); assert(urlPrefix[$ - 1] != '/', "Do NOT use a trailing slash on REST objects."); static bool internalHandler(Presenter)(string urlPrefix, Cgi cgi, Presenter presenter, immutable void* details) { string url = cgi.pathInfo[urlPrefix.length .. $]; if(url.length && url[$ - 1] == '/') { // remove the final slash... cgi.setResponseLocation(cgi.scriptName ~ cgi.pathInfo[0 .. $ - 1]); return true; } return restObjectServeHandler!T(cgi, presenter, url); } return DispatcherDefinition!internalHandler(urlPrefix, false); } /+ /// Convenience method for serving a collection. It will be named the same /// as type T, just with an s at the end. If you need any further, just /// write the class yourself. auto serveRestCollectionOf(T)(string urlPrefix) { assert(urlPrefix[0] == '/'); mixin(`static class `~T.stringof~`s : CollectionOf!(T) {}`); return serveRestObject!(mixin(T.stringof ~ "s"))(urlPrefix); } +/ bool restObjectServeHandler(T, Presenter)(Cgi cgi, Presenter presenter, string url) { string urlId = null; if(url.length && url[0] == '/') { // asking for a subobject urlId = url[1 .. $]; foreach(idx, ch; urlId) { if(ch == '/') { urlId = urlId[0 .. idx]; break; } } } // FIXME handle other subresources static if(is(T : CollectionOf!(C), C)) { if(urlId !is null) { return restObjectServeHandler!(C, Presenter)(cgi, presenter, url); // FIXME? urlId); } } // FIXME: support precondition failed, if-modified-since, expectation failed, etc. auto obj = new T(); obj.initialize(cgi); // FIXME: populate reflection info delegates // FIXME: I am not happy with this. switch(urlId) { case "script.js": cgi.setResponseContentType("text/javascript"); cgi.gzipResponse = true; cgi.write(presenter.script(), true); return true; case "style.css": cgi.setResponseContentType("text/css"); cgi.gzipResponse = true; cgi.write(presenter.style(), true); return true; default: // intentionally blank } static void applyChangesTemplate(Obj)(Cgi cgi, Obj obj) { foreach(idx, memberName; __traits(derivedMembers, Obj)) static if(__traits(compiles, __traits(getMember, obj, memberName).offsetof)) { __traits(getMember, obj, memberName) = cgi.request(memberName, __traits(getMember, obj, memberName)); } } void applyChanges() { applyChangesTemplate(cgi, obj); } string[] modifiedList; void writeObject(bool addFormLinks) { if(cgi.request("format") == "json") { cgi.setResponseContentType("application/json"); cgi.write(obj.toJson().toString, true); } else { auto container = presenter.htmlContainer(); if(addFormLinks) { static if(is(T : CollectionOf!(C), C)) container.appendHtml(` `); else container.appendHtml(` Back
    `); } container.appendChild(obj.toHtml(presenter)); cgi.write(container.parentDocument.toString, true); } } // FIXME: I think I need a set type in here.... // it will be nice to pass sets of members. try switch(cgi.requestMethod) { case Cgi.RequestMethod.GET: // I could prolly use template this parameters in the implementation above for some reflection stuff. // sure, it doesn't automatically work in subclasses... but I instantiate here anyway... // automatic forms here for usable basic auto site from browser. // even if the format is json, it could actually send out the links and formats switch(cgi.request("_method", "GET")) { case "GET": static if(is(T : CollectionOf!(C), C)) { auto results = obj.index(); if(cgi.request("format", "html") == "html") { auto container = presenter.htmlContainer(); auto html = presenter.formatReturnValueAsHtml(results.results); container.appendHtml(`
    `); container.appendChild(html); cgi.write(container.parentDocument.toString, true); } else { cgi.setResponseContentType("application/json"); import arsd.jsvar; var json = var.emptyArray; foreach(r; results.results) { var o = var.emptyObject; foreach(idx, memberName; __traits(derivedMembers, typeof(r))) static if(__traits(compiles, __traits(getMember, r, memberName).offsetof)) { o[memberName] = __traits(getMember, r, memberName); } json ~= o; } cgi.write(json.toJson(), true); } } else { obj.show(urlId); writeObject(true); } break; case "PATCH": obj.load(urlId); goto case; case "PUT": case "POST": // an editing form for the object auto container = presenter.htmlContainer(); static if(__traits(compiles, () { auto o = new obj.PostProxy(); })) { auto form = (cgi.request("_method") == "POST") ? presenter.createAutomaticFormForObject(new obj.PostProxy()) : presenter.createAutomaticFormForObject(obj); } else { auto form = presenter.createAutomaticFormForObject(obj); } form.attrs.method = "POST"; form.setValue("_method", cgi.request("_method", "GET")); container.appendChild(form); cgi.write(container.parentDocument.toString(), true); break; case "DELETE": // FIXME: a delete form for the object (can be phrased "are you sure?") auto container = presenter.htmlContainer(); container.appendHtml(`
    Are you sure you want to delete this item?
    `); cgi.write(container.parentDocument.toString(), true); break; default: cgi.write("bad method\n", true); } break; case Cgi.RequestMethod.POST: // this is to allow compatibility with HTML forms switch(cgi.request("_method", "POST")) { case "PUT": goto PUT; case "PATCH": goto PATCH; case "DELETE": goto DELETE; case "POST": static if(__traits(compiles, () { auto o = new obj.PostProxy(); })) { auto p = new obj.PostProxy(); void specialApplyChanges() { applyChangesTemplate(cgi, p); } string n = p.create(&specialApplyChanges); } else { string n = obj.create(&applyChanges); } auto newUrl = cgi.scriptName ~ cgi.pathInfo ~ "/" ~ n; cgi.setResponseLocation(newUrl); cgi.setResponseStatus("201 Created"); cgi.write(`The object has been created.`); break; default: cgi.write("bad method\n", true); } // FIXME this should be valid on the collection, but not the child.... // 303 See Other break; case Cgi.RequestMethod.PUT: PUT: obj.replace(urlId, &applyChanges); writeObject(false); break; case Cgi.RequestMethod.PATCH: PATCH: obj.update(urlId, &applyChanges, modifiedList); writeObject(false); break; case Cgi.RequestMethod.DELETE: DELETE: obj.remove(urlId); cgi.setResponseStatus("204 No Content"); break; default: // FIXME: OPTIONS, HEAD } catch(Throwable t) { presenter.presentExceptionAsHtml(cgi, t); } return true; } /+ struct SetOfFields(T) { private void[0][string] storage; void set(string what) { //storage[what] = } void unset(string what) {} void setAll() {} void unsetAll() {} bool isPresent(string what) { return false; } } +/ /+ enum readonly; enum hideonindex; +/ /++ Returns true if I recommend gzipping content of this type. You might want to call it from your Presenter classes before calling cgi.write. --- cgi.setResponseContentType(yourContentType); cgi.gzipResponse = gzipRecommendedForContentType(yourContentType); cgi.write(yourData, true); --- This is used internally by [serveStaticFile], [serveStaticFileDirectory], [serveStaticData], and maybe others I forgot to update this doc about. The implementation considers text content to be recommended to gzip. This may change, but it seems reasonable enough for now. History: Added January 28, 2023 (dub v11.0) +/ bool gzipRecommendedForContentType(string contentType) { if(contentType.startsWith("text/")) return true; if(contentType.startsWith("application/javascript")) return true; return false; } /++ Serves a static file. To be used with [dispatcher]. See_Also: [serveApi], [serveRestObject], [dispatcher], [serveRedirect] +/ auto serveStaticFile(string urlPrefix, string filename = null, string contentType = null) { // https://baus.net/on-tcp_cork/ // man 2 sendfile assert(urlPrefix[0] == '/'); if(filename is null) filename = decodeComponent(urlPrefix[1 .. $]); // FIXME is this actually correct? if(contentType is null) { contentType = contentTypeFromFileExtension(filename); } static struct DispatcherDetails { string filename; string contentType; } static bool internalHandler(string urlPrefix, Cgi cgi, Object presenter, DispatcherDetails details) { if(details.contentType.indexOf("image/") == 0 || details.contentType.indexOf("audio/") == 0) cgi.setCache(true); cgi.setResponseContentType(details.contentType); cgi.gzipResponse = gzipRecommendedForContentType(details.contentType); cgi.write(std.file.read(details.filename), true); return true; } return DispatcherDefinition!(internalHandler, DispatcherDetails)(urlPrefix, true, DispatcherDetails(filename, contentType)); } /++ Serves static data. To be used with [dispatcher]. History: Added October 31, 2021 +/ auto serveStaticData(string urlPrefix, immutable(void)[] data, string contentType = null) { assert(urlPrefix[0] == '/'); if(contentType is null) { contentType = contentTypeFromFileExtension(urlPrefix); } static struct DispatcherDetails { immutable(void)[] data; string contentType; } static bool internalHandler(string urlPrefix, Cgi cgi, Object presenter, DispatcherDetails details) { cgi.setCache(true); cgi.setResponseContentType(details.contentType); cgi.write(details.data, true); return true; } return DispatcherDefinition!(internalHandler, DispatcherDetails)(urlPrefix, true, DispatcherDetails(data, contentType)); } string contentTypeFromFileExtension(string filename) { if(filename.endsWith(".png")) return "image/png"; if(filename.endsWith(".apng")) return "image/apng"; if(filename.endsWith(".svg")) return "image/svg+xml"; if(filename.endsWith(".jpg")) return "image/jpeg"; if(filename.endsWith(".html")) return "text/html"; if(filename.endsWith(".css")) return "text/css"; if(filename.endsWith(".js")) return "application/javascript"; if(filename.endsWith(".wasm")) return "application/wasm"; if(filename.endsWith(".mp3")) return "audio/mpeg"; if(filename.endsWith(".pdf")) return "application/pdf"; return null; } /// This serves a directory full of static files, figuring out the content-types from file extensions. /// It does not let you to descend into subdirectories (or ascend out of it, of course) auto serveStaticFileDirectory(string urlPrefix, string directory = null, bool recursive = false) { assert(urlPrefix[0] == '/'); assert(urlPrefix[$-1] == '/'); static struct DispatcherDetails { string directory; bool recursive; } if(directory is null) directory = urlPrefix[1 .. $]; if(directory.length == 0) directory = "./"; assert(directory[$-1] == '/'); static bool internalHandler(string urlPrefix, Cgi cgi, Object presenter, DispatcherDetails details) { auto file = decodeComponent(cgi.pathInfo[urlPrefix.length .. $]); // FIXME: is this actually correct if(details.recursive) { // never allow a backslash since it isn't in a typical url anyway and makes the following checks easier if(file.indexOf("\\") != -1) return false; import std.path; file = std.path.buildNormalizedPath(file); enum upOneDir = ".." ~ std.path.dirSeparator; // also no point doing any kind of up directory things since that makes it more likely to break out of the parent if(file == ".." || file.startsWith(upOneDir)) return false; if(std.path.isAbsolute(file)) return false; // FIXME: if it has slashes and stuff, should we redirect to the canonical resource? or what? // once it passes these filters it is probably ok. } else { if(file.indexOf("/") != -1 || file.indexOf("\\") != -1) return false; } auto contentType = contentTypeFromFileExtension(file); auto fn = details.directory ~ file; if(std.file.exists(fn)) { //if(contentType.indexOf("image/") == 0) //cgi.setCache(true); //else if(contentType.indexOf("audio/") == 0) cgi.setCache(true); cgi.setResponseContentType(contentType); cgi.gzipResponse = gzipRecommendedForContentType(contentType); cgi.write(std.file.read(fn), true); return true; } else { return false; } } return DispatcherDefinition!(internalHandler, DispatcherDetails)(urlPrefix, false, DispatcherDetails(directory, recursive)); } /++ Redirects one url to another See_Also: [dispatcher], [serveStaticFile] +/ auto serveRedirect(string urlPrefix, string redirectTo, int code = 303) { assert(urlPrefix[0] == '/'); static struct DispatcherDetails { string redirectTo; string code; } static bool internalHandler(string urlPrefix, Cgi cgi, Object presenter, DispatcherDetails details) { cgi.setResponseLocation(details.redirectTo, true, details.code); return true; } return DispatcherDefinition!(internalHandler, DispatcherDetails)(urlPrefix, true, DispatcherDetails(redirectTo, getHttpCodeText(code))); } /// Used exclusively with `dispatchTo` struct DispatcherData(Presenter) { Cgi cgi; /// You can use this cgi object. Presenter presenter; /// This is the presenter from top level, and will be forwarded to the sub-dispatcher. size_t pathInfoStart; /// This is forwarded to the sub-dispatcher. It may be marked private later, or at least read-only. } /++ Dispatches the URL to a specific function. +/ auto handleWith(alias handler)(string urlPrefix) { // cuz I'm too lazy to do it better right now static class Hack : WebObject { static import std.traits; @UrlName("") auto handle(std.traits.Parameters!handler args) { return handler(args); } } return urlPrefix.serveApiInternal!Hack; } /++ Dispatches the URL (and anything under it) to another dispatcher function. The function should look something like this: --- bool other(DD)(DD dd) { return dd.dispatcher!( "/whatever".serveRedirect("/success"), "/api/".serveApi!MyClass ); } --- The `DD` in there will be an instance of [DispatcherData] which you can inspect, or forward to another dispatcher here. It is a template to account for any Presenter type, so you can do compile-time analysis in your presenters. Or, of course, you could just use the exact type in your own code. You return true if you handle the given url, or false if not. Just returning the result of [dispatcher] will do a good job. +/ auto dispatchTo(alias handler)(string urlPrefix) { assert(urlPrefix[0] == '/'); assert(urlPrefix[$-1] != '/'); static bool internalHandler(Presenter)(string urlPrefix, Cgi cgi, Presenter presenter, const void* details) { return handler(DispatcherData!Presenter(cgi, presenter, urlPrefix.length)); } return DispatcherDefinition!(internalHandler)(urlPrefix, false); } /++ See [serveStaticFile] if you want to serve a file off disk. History: Added January 28, 2023 (dub v11.0) +/ auto serveStaticData(string urlPrefix, immutable(ubyte)[] data, string contentType, string filenameToSuggestAsDownload = null) { assert(urlPrefix[0] == '/'); static struct DispatcherDetails { immutable(ubyte)[] data; string contentType; string filenameToSuggestAsDownload; } static bool internalHandler(string urlPrefix, Cgi cgi, Object presenter, DispatcherDetails details) { cgi.setCache(true); cgi.setResponseContentType(details.contentType); if(details.filenameToSuggestAsDownload.length) cgi.header("Content-Disposition: attachment; filename=\""~details.filenameToSuggestAsDownload~"\""); cgi.gzipResponse = gzipRecommendedForContentType(details.contentType); cgi.write(details.data, true); return true; } return DispatcherDefinition!(internalHandler, DispatcherDetails)(urlPrefix, true, DispatcherDetails(data, contentType, filenameToSuggestAsDownload)); } /++ Placeholder for use with [dispatchSubsection]'s `NewPresenter` argument to indicate you want to keep the parent's presenter. History: Added January 28, 2023 (dub v11.0) +/ alias KeepExistingPresenter = typeof(null); /++ For use with [dispatchSubsection]. Calls your filter with the request and if your filter returns false, this issues the given errorCode and stops processing. --- bool hasAdminPermissions(Cgi cgi) { return true; } mixin DispatcherMain!( "/admin".dispatchSubsection!( passFilterOrIssueError!(hasAdminPermissions, 403), KeepExistingPresenter, "/".serveApi!AdminFunctions ) ); --- History: Added January 28, 2023 (dub v11.0) +/ template passFilterOrIssueError(alias filter, int errorCode) { bool passFilterOrIssueError(DispatcherDetails)(DispatcherDetails dd) { if(filter(dd.cgi)) return true; dd.presenter.renderBasicError(dd.cgi, errorCode); return false; } } /++ Allows for a subsection of your dispatched urls to be passed through other a pre-request filter, optionally pick up an new presenter class, and then be dispatched to their own handlers. --- /+ // a long-form filter function bool permissionCheck(DispatcherData)(DispatcherData dd) { // you are permitted to call mutable methods on the Cgi object // Note if you use a Cgi subclass, you can try dynamic casting it back to your custom type to attach per-request data // though much of the request is immutable so there's only so much you're allowed to do to modify it. if(checkPermissionOnRequest(dd.cgi)) { return true; // OK, allow processing to continue } else { dd.presenter.renderBasicError(dd.cgi, 403); // reply forbidden to the requester return false; // and stop further processing into this subsection } } +/ // but you can also do short-form filters: bool permissionCheck(Cgi cgi) { return ("ok" in cgi.get) !is null; } // handler for the subsection class AdminClass : WebObject { int foo() { return 5; } } // handler for the main site class TheMainSite : WebObject {} mixin DispatcherMain!( "/admin".dispatchSubsection!( // converts our short-form filter into a long-form filter passFilterOrIssueError!(permissionCheck, 403), // can use a new presenter if wanted for the subsection KeepExistingPresenter, // and then provide child route dispatchers "/".serveApi!AdminClass ), // and back to the top level "/".serveApi!TheMainSite ); --- Note you can encapsulate sections in files like this: --- auto adminDispatcher(string urlPrefix) { return urlPrefix.dispatchSubsection!( .... ); } mixin DispatcherMain!( "/admin".adminDispatcher, // and so on ) --- If you want no filter, you can pass `(cgi) => true` as the filter to approve all requests. If you want to keep the same presenter as the parent, use [KeepExistingPresenter] as the presenter argument. History: Added January 28, 2023 (dub v11.0) +/ auto dispatchSubsection(alias PreRequestFilter, NewPresenter, definitions...)(string urlPrefix) { assert(urlPrefix[0] == '/'); assert(urlPrefix[$-1] != '/'); static bool internalHandler(Presenter)(string urlPrefix, Cgi cgi, Presenter presenter, const void* details) { static if(!is(PreRequestFilter == typeof(null))) { if(!PreRequestFilter(DispatcherData!Presenter(cgi, presenter, urlPrefix.length))) return true; // we handled it by rejecting it } static if(is(NewPresenter == Presenter) || is(NewPresenter == typeof(null))) { return dispatcher!definitions(DispatcherData!Presenter(cgi, presenter, urlPrefix.length)); } else { auto newPresenter = new NewPresenter(); return dispatcher!(definitions(DispatcherData!NewPresenter(cgi, presenter, urlPrefix.length))); } } return DispatcherDefinition!(internalHandler)(urlPrefix, false); } /++ A URL dispatcher. --- if(cgi.dispatcher!( "/api/".serveApi!MyApiClass, "/objects/lol".serveRestObject!MyRestObject, "/file.js".serveStaticFile, "/admin/".dispatchTo!adminHandler )) return; --- You define a series of url prefixes followed by handlers. You may want to do different pre- and post- processing there, for example, an authorization check and different page layout. You can use different presenters and different function chains. See [dispatchSubsection] for details. [dispatchTo] will send the request to another function for handling. +/ template dispatcher(definitions...) { bool dispatcher(Presenter)(Cgi cgi, Presenter presenterArg = null) { static if(is(Presenter == typeof(null))) { static class GenericWebPresenter : WebPresenter!(GenericWebPresenter) {} auto presenter = new GenericWebPresenter(); } else alias presenter = presenterArg; return dispatcher(DispatcherData!(typeof(presenter))(cgi, presenter, 0)); } bool dispatcher(DispatcherData)(DispatcherData dispatcherData) if(!is(DispatcherData : Cgi)) { // I can prolly make this more efficient later but meh. foreach(definition; definitions) { if(definition.rejectFurther) { if(dispatcherData.cgi.pathInfo[dispatcherData.pathInfoStart .. $] == definition.urlPrefix) { auto ret = definition.handler( dispatcherData.cgi.pathInfo[0 .. dispatcherData.pathInfoStart + definition.urlPrefix.length], dispatcherData.cgi, dispatcherData.presenter, definition.details); if(ret) return true; } } else if( dispatcherData.cgi.pathInfo[dispatcherData.pathInfoStart .. $].startsWith(definition.urlPrefix) && // cgi.d dispatcher urls must be complete or have a /; // "foo" -> thing should NOT match "foobar", just "foo" or "foo/thing" (definition.urlPrefix[$-1] == '/' || (dispatcherData.pathInfoStart + definition.urlPrefix.length) == dispatcherData.cgi.pathInfo.length || dispatcherData.cgi.pathInfo[dispatcherData.pathInfoStart + definition.urlPrefix.length] == '/') ) { auto ret = definition.handler( dispatcherData.cgi.pathInfo[0 .. dispatcherData.pathInfoStart + definition.urlPrefix.length], dispatcherData.cgi, dispatcherData.presenter, definition.details); if(ret) return true; } } return false; } } }); private struct StackBuffer { char[1024] initial = void; char[] buffer; size_t position; this(int a) { buffer = initial[]; position = 0; } void add(in char[] what) { if(position + what.length > buffer.length) buffer.length = position + what.length + 1024; // reallocate with GC to handle special cases buffer[position .. position + what.length] = what[]; position += what.length; } void add(in char[] w1, in char[] w2, in char[] w3 = null) { add(w1); add(w2); add(w3); } void add(long v) { char[16] buffer = void; auto pos = buffer.length; bool negative; if(v < 0) { negative = true; v = -v; } do { buffer[--pos] = cast(char) (v % 10 + '0'); v /= 10; } while(v); if(negative) buffer[--pos] = '-'; auto res = buffer[pos .. $]; add(res[]); } char[] get() @nogc { return buffer[0 .. position]; } } // duplicated in http2.d private static string getHttpCodeText(int code) pure nothrow @nogc { switch(code) { case 200: return "200 OK"; case 201: return "201 Created"; case 202: return "202 Accepted"; case 203: return "203 Non-Authoritative Information"; case 204: return "204 No Content"; case 205: return "205 Reset Content"; case 206: return "206 Partial Content"; // case 300: return "300 Multiple Choices"; case 301: return "301 Moved Permanently"; case 302: return "302 Found"; case 303: return "303 See Other"; case 304: return "304 Not Modified"; case 305: return "305 Use Proxy"; case 307: return "307 Temporary Redirect"; case 308: return "308 Permanent Redirect"; // case 400: return "400 Bad Request"; case 401: return "401 Unauthorized"; case 402: return "402 Payment Required"; case 403: return "403 Forbidden"; case 404: return "404 Not Found"; case 405: return "405 Method Not Allowed"; case 406: return "406 Not Acceptable"; case 407: return "407 Proxy Authentication Required"; case 408: return "408 Request Timeout"; case 409: return "409 Conflict"; case 410: return "410 Gone"; case 411: return "411 Length Required"; case 412: return "412 Precondition Failed"; case 413: return "413 Payload Too Large"; case 414: return "414 URI Too Long"; case 415: return "415 Unsupported Media Type"; case 416: return "416 Range Not Satisfiable"; case 417: return "417 Expectation Failed"; case 418: return "418 I'm a teapot"; case 421: return "421 Misdirected Request"; case 422: return "422 Unprocessable Entity (WebDAV)"; case 423: return "423 Locked (WebDAV)"; case 424: return "424 Failed Dependency (WebDAV)"; case 425: return "425 Too Early"; case 426: return "426 Upgrade Required"; case 428: return "428 Precondition Required"; case 431: return "431 Request Header Fields Too Large"; case 451: return "451 Unavailable For Legal Reasons"; case 500: return "500 Internal Server Error"; case 501: return "501 Not Implemented"; case 502: return "502 Bad Gateway"; case 503: return "503 Service Unavailable"; case 504: return "504 Gateway Timeout"; case 505: return "505 HTTP Version Not Supported"; case 506: return "506 Variant Also Negotiates"; case 507: return "507 Insufficient Storage (WebDAV)"; case 508: return "508 Loop Detected (WebDAV)"; case 510: return "510 Not Extended"; case 511: return "511 Network Authentication Required"; // default: assert(0, "Unsupported http code"); } } /+ /++ This is the beginnings of my web.d 2.0 - it dispatches web requests to a class object. It relies on jsvar.d and dom.d. You can get javascript out of it to call. The generated functions need to look like function name(a,b,c,d,e) { return _call("name", {"realName":a,"sds":b}); } And _call returns an object you can call or set up or whatever. +/ bool apiDispatcher()(Cgi cgi) { import arsd.jsvar; import arsd.dom; } +/ version(linux) private extern(C) int eventfd (uint initval, int flags) nothrow @trusted @nogc; /* Copyright: Adam D. Ruppe, 2008 - 2023 License: [http://www.boost.org/LICENSE_1_0.txt|Boost License 1.0]. Authors: Adam D. Ruppe Copyright Adam D. Ruppe 2008 - 2023. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ onedrive-2.5.10/src/clientSideFiltering.d000066400000000000000000001252041513710110600202740ustar00rootroot00000000000000// What is this module called? module clientSideFiltering; // What does this module require to function? import std.algorithm; import std.array; import std.file; import std.path; import std.regex; import std.stdio; import std.string; import std.conv; // What other modules that we have created do we need to import? import config; import util; import log; class ClientSideFiltering { // Class variables ApplicationConfig appConfig; string[] syncListRules; string[] syncListIncludePathsOnly; // These are 'include' rules that start with a '/' string[] syncListAnywherePathOnly; // These are 'include' rules that do not start with a '/', thus are to be searched anywhere for inclusion Regex!char fileMask; Regex!char directoryMask; bool skipDirStrictMatch = false; bool skipDotfiles = false; this(ApplicationConfig appConfig) { // Configure the class variable to consume the application configuration this.appConfig = appConfig; } // Initialise the required items bool initialise() { // Log what is being done if (debugLogging) {addLogEntry("Configuring Client Side Filtering (Selective Sync)", ["debug"]);} // Load the sync_list file if it exists if (exists(appConfig.syncListFilePath)){ loadSyncList(appConfig.syncListFilePath); } // Handle skip_dir configuration in config file if (debugLogging) {addLogEntry("Configuring skip_dir ...", ["debug"]);} // Validate skip_dir entries to ensure that this does not contain an invalid configuration // Do not use a skip_dir entry of .* as this will prevent correct searching of local changes to process. foreach(entry; appConfig.getValueString("skip_dir").split("|")){ if (entry == ".*") { // invalid entry element detected addLogEntry(); addLogEntry("ERROR: Invalid skip_dir entry '.*' detected."); addLogEntry(" To exclude hidden directories (those starting with '.'), enable the 'skip_dotfiles' configuration option instead of using wildcard patterns."); addLogEntry(); return false; } } // All skip_dir entries are valid if (debugLogging) {addLogEntry("skip_dir: " ~ appConfig.getValueString("skip_dir"), ["debug"]);} setDirMask(appConfig.getValueString("skip_dir")); // Was --skip-dir-strict-match configured? if (debugLogging) { addLogEntry("Configuring skip_dir_strict_match ...", ["debug"]); addLogEntry("skip_dir_strict_match: " ~ to!string(appConfig.getValueBool("skip_dir_strict_match")), ["debug"]); } if (appConfig.getValueBool("skip_dir_strict_match")) { setSkipDirStrictMatch(); } // Handle skip_file configuration in config file if (debugLogging) {addLogEntry("Configuring skip_file ...", ["debug"]);} // Validate skip_file entries to ensure that this does not contain an invalid configuration // Do not use a skip_file entry of .* as this will prevent correct searching of local changes to process. foreach(entry; appConfig.getValueString("skip_file").split("|")){ if (entry == ".*") { // invalid entry element detected addLogEntry(); addLogEntry("ERROR: Invalid skip_file entry '.*' detected."); addLogEntry(" To exclude hidden files (those starting with '.'), enable the 'skip_dotfiles' configuration option instead of using wildcard patterns."); addLogEntry(); return false; } } // All skip_file entries are valid if (debugLogging) {addLogEntry("skip_file: " ~ appConfig.getValueString("skip_file"), ["debug"]);} setFileMask(appConfig.getValueString("skip_file")); // Was --skip-dot-files configured? if (debugLogging) { addLogEntry("Configuring skip_dotfiles ...", ["debug"]); addLogEntry("skip_dotfiles: " ~ to!string(appConfig.getValueBool("skip_dotfiles")), ["debug"]); } if (appConfig.getValueBool("skip_dotfiles")) { setSkipDotfiles(); } // Validate 'sync_list' include rules are not shadowed by 'skip_file' entries if (!validateSyncListNotShadowedBySkipFile()) { return false; } // Validate 'sync_list' include rules are not shadowed by 'skip_dir' entries if (!validateSyncListNotShadowedBySkipDir()) { // The application configuration is invalid .. 'skip_dir' is shadowing paths included by 'sync_list' return false; } // Client Side Filtering has been configured correctly return true; } // Shutdown components void shutdown() { syncListRules = null; syncListIncludePathsOnly = null; syncListAnywherePathOnly = null; fileMask = regex(""); directoryMask = regex(""); } // Load sync_list file if it exists void loadSyncList(string filepath) { // open file as read only auto file = File(filepath, "r"); auto range = file.byLine(); scope(exit) { file.close(); object.destroy(file); object.destroy(range); } scope(failure) { file.close(); object.destroy(file); object.destroy(range); } foreach (line; range) { auto cleanLine = strip(line); // Skip any line that is empty or just contains whitespace if (cleanLine.length == 0) continue; // Skip comments in file if (cleanLine[0] == ';' || cleanLine[0] == '#') continue; // Invalid exclusion rule patterns if (cleanLine == "!/*" || cleanLine == "!/" || cleanLine == "-/*" || cleanLine == "-/") { string errorMessage = "ERROR: Invalid sync_list rule '" ~ to!string(cleanLine) ~ "' detected. Please read the 'sync_list' documentation."; addLogEntry(); addLogEntry(errorMessage, ["info", "notify"]); addLogEntry(); // do not add this rule continue; } // Legacy include root rule if (cleanLine == "/*" || cleanLine == "/") { string errorMessage = "ERROR: Invalid sync_list rule '" ~ to!string(cleanLine) ~ "' detected. Please use 'sync_root_files = \"true\"' or --sync-root-files option to sync files in the root path."; addLogEntry(); addLogEntry(errorMessage, ["info", "notify"]); addLogEntry(); // do not add this rule continue; } // './' rule warning if ((cleanLine.length > 1) && (cleanLine[0] == '.') && (cleanLine[1] == '/')) { string errorMessage = "ERROR: Invalid sync_list rule '" ~ to!string(cleanLine) ~ "' detected. Rule should not start with './' - please fix your 'sync_list' rule."; addLogEntry(); addLogEntry(errorMessage, ["info", "notify"]); addLogEntry(); // do not add this rule continue; } // Normalise the 'sync_list' rule and store auto normalisedRulePath = buildNormalizedPath(cleanLine); syncListRules ~= normalisedRulePath; // Only add the normalised rule to the specific include list if not an exclude rule if (cleanLine[0] != '!' && cleanLine[0] != '-') { // All include rules get added here syncListIncludePathsOnly ~= normalisedRulePath; // Special case for searching local disk for new data added 'somewhere' if (cleanLine[0] != '/') { // Rule is an 'anywhere' rule within the 'sync_list' syncListAnywherePathOnly ~= normalisedRulePath; } } } // Close the file post reading it file.close(); } // return true or false based on if we have loaded any valid sync_list rules bool validSyncListRules() { // If empty, will return true return syncListRules.empty; } // Configure the regex that will be used for 'skip_file' void setFileMask(const(char)[] mask) { fileMask = wild2regex(mask); if (debugLogging) {addLogEntry("Selective Sync File Mask: " ~ to!string(fileMask), ["debug"]);} } // Configure the regex that will be used for 'skip_dir' void setDirMask(const(char)[] dirmask) { directoryMask = wild2regex(dirmask); if (debugLogging) {addLogEntry("Selective Sync Directory Mask: " ~ to!string(directoryMask), ["debug"]);} } // Configure skipDirStrictMatch if function is called // By default, skipDirStrictMatch = false; void setSkipDirStrictMatch() { skipDirStrictMatch = true; } // Configure skipDotfiles if function is called // By default, skipDotfiles = false; void setSkipDotfiles() { skipDotfiles = true; } // return value of skipDotfiles bool getSkipDotfiles() { return skipDotfiles; } // Match against 'sync_list' only bool isPathExcludedViaSyncList(string path) { // Are there 'sync_list' rules to process? if (count(syncListRules) > 0) { // Perform 'sync_list' rule testing on the given path return isPathExcluded(path); } else { // There are no valid 'sync_list' rules that were loaded return false; // not excluded by 'sync_list' } } // config 'skip_dir' parameter checking bool isDirNameExcluded(string inputPath) { // Returns true if the inputPath matches a skip_dir config entry (directoryMask) // Returns false if no match if (debugLogging) { addLogEntry("skip_dir evaluation for: " ~ inputPath, ["debug"]); } // Build candidate path variants to cover common inputs: // - "./Documents/Uni" (most common from sync engine) // - "Documents/Uni" (relative) // - "/Documents/Uni" (user occasionally prefixes with '/') string name = inputPath; // Normalise leading "./" to relative if (startsWith(name, "./")) { name = name[2 .. $]; if (debugLogging) addLogEntry("skip_dir evaluation (normalised inputPath, removed leading './'): " ~ name, ["debug"]); } // Create a small set of candidates (avoid duplicates) string[] candidates; void addCandidate(string c) { if (c.empty) return; foreach (e; candidates) { if (e == c) return; } candidates ~= c; } addCandidate(name); // If name is rooted, also test relative form if (!name.empty && name[0] == '/') { addCandidate(name[1 .. $]); } else { // If name is relative, also test rooted form (covers skip_dir rules that were authored with a leading '/') addCandidate("/" ~ name); } // Also test trailing-slash equivalence for directory roots // (treat "Documents" and "Documents/" the same, but do not create "//") string[] expanded; foreach (c; candidates) { expanded ~= c; if (c.length > 1 && c[$ - 1] != '/') { expanded ~= (c ~ "/"); } } candidates = expanded; // ------------------------------------------------------------ // 1) Full-path match first (strict semantics) // ------------------------------------------------------------ foreach (c; candidates) { if (!c.matchFirst(directoryMask).empty) { if (debugLogging) addLogEntry("skip_dir full-path match: " ~ c, ["debug"]); return true; } } // ------------------------------------------------------------ // 2) Non-strict mode: test path segments for a match // ------------------------------------------------------------ if (!skipDirStrictMatch) { if (debugLogging) addLogEntry("No Strict Matching Enforced - testing individual path segments", ["debug"]); foreach (c; candidates) { // buildNormalizedPath may introduce a leading '/', so we keep it as-is // and let pathSplitter do its job. We are matching segments, not full paths here. string path = buildNormalizedPath(c); if (debugLogging) addLogEntry("skip_dir segment test path: " ~ path, ["debug"]); foreach_reverse(seg; pathSplitter(path)) { if (seg == "/") continue; // seg is a single component (e.g. "Documents") if (!seg.matchFirst(directoryMask).empty) { if (debugLogging) { addLogEntry("skip_dir segment match: " ~ seg, ["debug"]); } return true; } } } } else { if (debugLogging) addLogEntry("Strict Matching Enforced - no segment testing", ["debug"]); } // No match return false; } // config file skip_file parameter bool isFileNameExcluded(string name) { // Does the file name match skip_file config entry? // Returns true if the name matches a skip_file config entry // Returns false if no match if (debugLogging) {addLogEntry("skip_file evaluation for: " ~ name, ["debug"]);} // Try full path match first if (!name.matchFirst(fileMask).empty) { return true; } else { // check just the file name string filename = baseName(name); if(!filename.matchFirst(fileMask).empty) { return true; } } // no match return false; } // test if the given path is not included in the allowed syncListRules // if there are no allowed syncListRules always return false private bool isPathExcluded(string path) { // function variables bool exclude = false; bool excludeExactMatch = false; // will get updated to true, if there is a pattern match to sync_list entry bool excludeParentMatched = false; // will get updated to true, if there is a pattern match to sync_list entry bool finalResult = true; // will get updated to false, if pattern match to sync_list entry bool anywhereRuleMatched = false; // will get updated if the 'anywhere' rule matches bool excludeAnywhereMatched = false; // will get updated if the 'anywhere' rule matches bool wildcardRuleMatched = false; // will get updated if the 'wildcard' rule matches bool excludeWildcardMatched = false; // will get updated if the 'wildcard' rule matches int offset; string wildcard = "*"; string globbing = "**"; // always allow the root if (path == ".") return false; // if there are no allowed syncListRules always return false, meaning path is not excluded if (syncListRules.empty) return false; // To ensure we are checking the 'right' path, build the path path = buildPath("/", buildNormalizedPath(path)); // Evaluation start point, in order of what is checked as well if (debugLogging) { addLogEntry("******************* SYNC LIST RULES EVALUATION START *******************", ["debug"]); addLogEntry("Evaluation against 'sync_list' rules for this input path: " ~ path, ["debug"]); addLogEntry("[S]excludeExactMatch = " ~ to!string(excludeExactMatch), ["debug"]); addLogEntry("[S]excludeParentMatched = " ~ to!string(excludeParentMatched), ["debug"]); addLogEntry("[S]excludeAnywhereMatched = " ~ to!string(excludeAnywhereMatched), ["debug"]); addLogEntry("[S]excludeWildcardMatched = " ~ to!string(excludeWildcardMatched), ["debug"]); } // Split input path by '/' to create an applicable path segment array // - This is reused below in a number of places string[] pathSegments = path.strip.split("/").filter!(s => !s.empty).array; // Unless path is an exact match, entire sync_list entries need to be processed to ensure negative matches are also correctly detected foreach (syncListRuleEntry; syncListRules) { // There are several matches we need to think of here // Exclusions: // !foldername/* = As there is no preceding '/' (after the !) .. this is a rule that should exclude 'foldername' and all its children ANYWHERE // !*.extension = As there is no preceding '/' (after the !) .. this is a rule that should exclude any item that has the specified extension ANYWHERE // !/path/to/foldername/* = As there IS a preceding '/' (after the !) .. this is a rule that should exclude this specific path and all its children // !/path/to/foldername/*.extension = As there IS a preceding '/' (after the !) .. this is a rule that should exclude any item that has the specified extension in this path ONLY // !/path/to/foldername/*/specific_target/* = As there IS a preceding '/' (after the !) .. this excludes 'specific_target' in any subfolder of '/path/to/foldername/' // // Inclusions: // foldername/* = As there is no preceding '/' .. this is a rule that should INCLUDE 'foldername' and all its children ANYWHERE // *.extension = As there is no preceding '/' .. this is a rule that should INCLUDE any item that has the specified extension ANYWHERE // /path/to/foldername/* = As there IS a preceding '/' .. this is a rule that should INCLUDE this specific path and all its children // /path/to/foldername/*.extension = As there IS a preceding '/' .. this is a rule that should INCLUDE any item that has the specified extension in this path ONLY // /path/to/foldername/*/specific_target/* = As there IS a preceding '/' .. this INCLUDES 'specific_target' in any subfolder of '/path/to/foldername/' if (debugLogging) {addLogEntry("------------------------------ NEW RULE --------------------------------", ["debug"]);} // Is this rule an 'exclude' or 'include' rule? bool thisIsAnExcludeRule = false; // Switch based on first character of rule to determine rule type switch (syncListRuleEntry[0]) { case '-': // sync_list path starts with '-', this user wants to exclude this path exclude = true; // default exclude thisIsAnExcludeRule = true; // exclude rule offset = 1; // To negate the '-' in the rule entry break; case '!': // sync_list path starts with '!', this user wants to exclude this path exclude = true; // default exclude thisIsAnExcludeRule = true; // exclude rule offset = 1; // To negate the '!' in the rule entry break; case '/': // sync_list path starts with '/', this user wants to include this path // but a '/' at the start causes matching issues, so use the offset for comparison exclude = false; // DO NOT EXCLUDE thisIsAnExcludeRule = false; // INCLUDE rule offset = 0; break; default: // no negative pattern, default is to not exclude exclude = false; // DO NOT EXCLUDE thisIsAnExcludeRule = false; // INCLUDE rule offset = 0; } // Update syncListRuleEntry to remove the offset syncListRuleEntry = syncListRuleEntry[offset..$]; // What 'sync_list' rule are we comparing against? if (thisIsAnExcludeRule) { if (debugLogging) {addLogEntry("Evaluation against EXCLUSION 'sync_list' rule: !" ~ syncListRuleEntry, ["debug"]);} } else { if (debugLogging) {addLogEntry("Evaluation against INCLUSION 'sync_list' rule: " ~ syncListRuleEntry, ["debug"]);} } // Split rule path by '/' to create an applicable path segment array // - This is reused below in a number of places string[] ruleSegments = syncListRuleEntry.strip.split("/").filter!(s => !s.empty).array; // Configure logging rule type string ruleKind = thisIsAnExcludeRule ? "exclusion rule" : "inclusion rule"; // Is path is an exact match of the 'sync_list' rule, or do the input path segments (directories) match the 'sync_list' rule? // wildcard (*) rules are below if we get there, if this rule does not contain a wildcard if ((to!string(syncListRuleEntry[0]) == "/") && (!canFind(syncListRuleEntry, wildcard))) { // what sort of rule is this - 'exact match' include or exclude rule? if (debugLogging) {addLogEntry("Testing input path against an exact match 'sync_list' " ~ ruleKind, ["debug"]);} // Print rule and input segments for validation during debug if (debugLogging) { addLogEntry(" - Calculated Rule Segments: " ~ to!string(ruleSegments), ["debug"]); addLogEntry(" - Calculated Path Segments: " ~ to!string(pathSegments), ["debug"]); } // Test for exact segment matching of input path to rule if (exactMatchRuleSegmentsToPathSegments(ruleSegments, pathSegments)) { // EXACT PATH MATCH if (debugLogging) {addLogEntry("Exact path match with 'sync_list' rule entry", ["debug"]);} if (!thisIsAnExcludeRule) { // Include Rule if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: direct match", ["debug"]);} // final result finalResult = false; // direct match, break and search rules no more given include rule match break; } else { // Exclude rule if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: exclusion direct match - path to be excluded", ["debug"]);} // flag excludeExactMatch so that a 'wildcard match' will not override this exclude excludeExactMatch = true; exclude = true; // final result finalResult = true; // dont break here, finish checking other rules } } else { // NOT an EXACT MATCH, so check the very first path segment if (debugLogging) {addLogEntry("No exact path match with 'sync_list' rule entry - checking path segments to verify", ["debug"]);} // - This is so that paths in 'sync_list' as specified as /some path/another path/ actually get included|excluded correctly if (matchFirstSegmentToPathFirstSegment(ruleSegments, pathSegments)) { // PARENT ROOT MATCH if (debugLogging) {addLogEntry("Parent root path match with 'sync_list' rule entry", ["debug"]);} // Does the 'rest' of the input path match? // We only need to do this step if the input path has more and 1 segment (the parent folder) if (count(pathSegments) > 1) { // More segments to check, so do a parental path match if (matchRuleSegmentsToPathSegments(ruleSegments, pathSegments)) { // PARENTAL PATH MATCH if (debugLogging) {addLogEntry("Parental path match with 'sync_list' rule entry", ["debug"]);} // What sort of rule was this? if (!thisIsAnExcludeRule) { // Include Rule if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: parental path match", ["debug"]);} // final result finalResult = false; // parental path match, break and search rules no more given include rule match break; } else { // Exclude rule if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: exclusion parental path match - path to be excluded", ["debug"]);} excludeParentMatched = true; exclude = true; // final result finalResult = true; // dont break here, finish checking other rules } } } else { // No more segments to check if (!thisIsAnExcludeRule) { // Include Rule if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: parent root path match to rule", ["debug"]);} // final result finalResult = false; // parental path match, break and search rules no more given include rule match break; } else { // Exclude rule {addLogEntry("Evaluation against 'sync_list' rule result: exclusion parent root path match to rule - path to be excluded", ["debug"]);} excludeParentMatched = true; exclude = true; // final result finalResult = true; // dont break here, finish checking other rules } } } else { // No parental path segment match if (debugLogging) {addLogEntry("No parental path match with 'sync_list' rule entry - exact path matching not possible", ["debug"]);} } } // What 'rule' type are we currently testing? if (!thisIsAnExcludeRule) { // Is the path a parental path match to an include 'sync_list' rule? if (isSyncListPrefixMatch(path)) { // PARENTAL PATH MATCH if (debugLogging) { addLogEntry("Parental path match with 'sync_list' rule entry (syncListIncludePathsOnly)", ["debug"]); addLogEntry("Evaluation against 'sync_list' rule result: parental path match (syncListIncludePathsOnly)", ["debug"]); } // final result finalResult = false; // parental path match, break and search rules no more given include rule match break; } } } // Is the 'sync_list' rule an 'anywhere' rule? // EXCLUSION // !foldername/* // !*.extension // !foldername // INCLUSION // foldername/* // *.extension // foldername if (to!string(syncListRuleEntry[0]) != "/") { // reset anywhereRuleMatched anywhereRuleMatched = false; // what sort of rule is this - 'anywhere' include or exclude rule? if (debugLogging) {addLogEntry("Testing input path against an anywhere 'sync_list' " ~ ruleKind, ["debug"]);} // this is an 'anywhere' rule string anywhereRuleStripped; // If this 'sync_list' rule end in '/*' - if yes, remove it to allow for easier comparison if (syncListRuleEntry.endsWith("/*")) { // strip '/*' from the end of the rule anywhereRuleStripped = syncListRuleEntry.stripRight("/*"); } else { // keep rule 'as-is' anywhereRuleStripped = syncListRuleEntry; } // If the input path is exactly the parent root (single segment) and that segment // matches the rule's first segment, treat it as a match. if (!ruleSegments.empty && count(pathSegments) == 1 && matchFirstSegmentToPathFirstSegment(ruleSegments, pathSegments)) { if (debugLogging) { addLogEntry(" - anywhere rule 'parent root' MATCH with '" ~ ruleSegments[0] ~ "'", ["debug"]); } anywhereRuleMatched = true; } if (!anywhereRuleMatched) { if (canFind(path, anywhereRuleStripped)) { // we matched the path to the rule if (debugLogging) {addLogEntry(" - anywhere rule 'canFind' MATCH", ["debug"]);} anywhereRuleMatched = true; } else { // no 'canFind' match, try via regex if (debugLogging) {addLogEntry(" - anywhere rule 'canFind' NO_MATCH .. trying a regex match", ["debug"]);} // create regex from 'syncListRuleEntry' auto allowedMask = regex(createRegexCompatiblePath(syncListRuleEntry)); // perform regex match attempt if (matchAll(path, allowedMask)) { // we regex matched the path to the rule if (debugLogging) {addLogEntry(" - anywhere rule 'matchAll via regex' MATCH", ["debug"]);} anywhereRuleMatched = true; } else { // no match if (debugLogging) {addLogEntry(" - anywhere rule 'matchAll via regex' NO_MATCH", ["debug"]);} } } } // is this rule matched? if (anywhereRuleMatched) { // Is this an exclude rule? if (thisIsAnExcludeRule) { if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: anywhere rule matched and must be excluded", ["debug"]);} excludeAnywhereMatched = true; exclude = true; finalResult = true; // anywhere match, break and search rules no more break; } else { if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: anywhere rule matched and must be included", ["debug"]);} finalResult = false; excludeAnywhereMatched = false; // anywhere match, break and search rules no more break; } } } // Does the 'sync_list' rule contain a wildcard (*) or globbing (**) reference anywhere in the rule? // EXCLUSION // !/Programming/Projects/Android/**/build/* // !/build/kotlin/* // INCLUSION // /Programming/Projects/Android/**/build/* // /build/kotlin/* if (canFind(syncListRuleEntry, wildcard)) { // A '*' wildcard is in the rule, but we do not know what type of wildcard yet .. // reset the applicable flag wildcardRuleMatched = false; // What sort of rule is this - globbing (**) or wildcard (*) bool globbingRule = false; globbingRule = canFind(syncListRuleEntry, globbing); // The sync_list rule contains some sort of wildcard sequence - lets log this correctly as to the rule type we are testing string ruleType = globbingRule ? "globbing (**)" : "wildcard (*)"; if (debugLogging) {addLogEntry("Testing input path against a " ~ ruleType ~ " 'sync_list' " ~ ruleKind, ["debug"]);} // Does the parents of the input path and rule path match .. meaning we can actually evaluate this wildcard rule against the input path if (matchFirstSegmentToPathFirstSegment(ruleSegments, pathSegments)) { // Is this a globbing rule (**) or just a single wildcard (*) entries if (globbingRule) { // globbing (**) rule processing // globbing rules can only realistically apply if there are enough path segments for the globbing rule to actually apply // otherwise we get a bad match - see: // - https://github.com/abraunegg/onedrive/issues/3122 // - https://github.com/abraunegg/onedrive/issues/3122#issuecomment-2661556789 auto wildcardDepth = firstWildcardDepth(syncListRuleEntry); auto pathCount = count(pathSegments); // Are there enough path segments for this globbing rule to apply? if (pathCount < wildcardDepth) { // there are not enough path segments up to the first wildcard character (*) for this rule to even be applicable if (debugLogging) {addLogEntry(" - This sync list globbing rule cannot not be evaluated as the globbing appears beyond the current input path", ["debug"]);} } else { // There are enough segments in the path and rule to test against this globbing rule if (matchPathAgainstRule(path, syncListRuleEntry)) { // set the applicable flag wildcardRuleMatched = true; if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: globbing pattern match using segment matching", ["debug"]);} } } } else { // wildcard (*) rule processing // create regex from 'syncListRuleEntry' auto allowedMask = regex(createRegexCompatiblePath(syncListRuleEntry)); if (matchAll(path, allowedMask)) { // set the applicable flag wildcardRuleMatched = true; if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: wildcard pattern match", ["debug"]);} } else { // matchAll no match ... try another way just to be sure if (matchPathAgainstRule(path, syncListRuleEntry)) { // set the applicable flag wildcardRuleMatched = true; if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: wildcard pattern match using segment matching", ["debug"]);} } } } // Was the rule matched? if (wildcardRuleMatched) { // Is this an exclude rule? if (thisIsAnExcludeRule) { // Yes exclude rule if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: wildcard|globbing rule matched and must be excluded", ["debug"]);} excludeWildcardMatched = true; exclude = true; finalResult = true; } else { // include rule if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: wildcard|globbing pattern matched and must be included", ["debug"]);} finalResult = false; excludeWildcardMatched = false; } } else { if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: No match to 'sync_list' wildcard|globbing rule", ["debug"]);} } } else { // log that parental path in input path does not match the parental path in the rule if (debugLogging) {addLogEntry("Evaluation against 'sync_list' rule result: No evaluation possible - parental input path does not match 'sync_list' rule", ["debug"]);} } } } // debug logging post 'sync_list' rule evaluations if (debugLogging) { // Rule evaluation complete addLogEntry("------------------------------------------------------------------------", ["debug"]); // Interim results after checking each 'sync_list' rule against the input path addLogEntry("[F]excludeExactMatch = " ~ to!string(excludeExactMatch), ["debug"]); addLogEntry("[F]excludeParentMatched = " ~ to!string(excludeParentMatched), ["debug"]); addLogEntry("[F]excludeAnywhereMatched = " ~ to!string(excludeAnywhereMatched), ["debug"]); addLogEntry("[F]excludeWildcardMatched = " ~ to!string(excludeWildcardMatched), ["debug"]); } // If any of these exclude match items is true, then finalResult has to be flagged as true if ((exclude) || (excludeExactMatch) || (excludeParentMatched) || (excludeAnywhereMatched) || (excludeWildcardMatched)) { finalResult = true; } // Final Result if (finalResult) { if (debugLogging) {addLogEntry("Evaluation against 'sync_list' final result: EXCLUDED as no rule included path", ["debug"]);} } else { if (debugLogging) {addLogEntry("Evaluation against 'sync_list' final result: included for sync", ["debug"]);} } if (debugLogging) {addLogEntry("******************* SYNC LIST RULES EVALUATION END *********************", ["debug"]);} return finalResult; } // Calculate wildcard character depth in path int firstWildcardDepth(string syncListRuleEntry) { int depth = 0; foreach (segment; pathSplitter(syncListRuleEntry)) { if (segment.canFind("*")) // Check for wildcard characters return depth; depth++; } return depth; // No wildcard found should be '0' } // Create a wildcard regex compatible string based on the sync list rule string createRegexCompatiblePath(string regexCompatiblePath) { // Escape all special regex characters that could break regex parsing regexCompatiblePath = escaper(regexCompatiblePath).text; // Restore wildcard (*) support with '.*' to be compatible with function and to match any characters regexCompatiblePath = regexCompatiblePath.replace("\\*", ".*"); // Ensure space matches only literal space, not \s (tabs, etc.) regexCompatiblePath = regexCompatiblePath.replace(" ", "\\ "); // Return the regex compatible path return regexCompatiblePath; } // Create a regex compatible string to match a relevant segment bool matchSegment(string ruleSegment, string pathSegment) { // Create the required pattern auto pattern = regex("^" ~ createRegexCompatiblePath(ruleSegment) ~ "$"); // Check if there's a match and return result return !match(pathSegment, pattern).empty; } // Function to handle path matching when using globbing (**) bool matchPathAgainstRule(string path, string rule) { // Split both the path and rule into segments auto pathSegments = pathSplitter(path).filter!(s => !s.empty).array; auto ruleSegments = pathSplitter(rule).filter!(s => !s.empty).array; bool lastSegmentMatchesRule = false; size_t i = 0, j = 0; while (i < pathSegments.length && j < ruleSegments.length) { if (ruleSegments[j] == "**") { if (j == ruleSegments.length - 1) { return true; // '**' at the end matches everything } // Find next matching part after '**' while (i < pathSegments.length && !matchSegment(ruleSegments[j + 1], pathSegments[i])) { i++; } j++; // Move past the '**' in the rule } else { if (!matchSegment(ruleSegments[j], pathSegments[i])) { return false; } else { // increment to next set of values i++; j++; } } } // Ensure that we handle the last segments gracefully if (i >= pathSegments.length && j < ruleSegments.length) { if (j == ruleSegments.length - 1 && ruleSegments[j] == "*") { return true; } if (ruleSegments[j - 1] == pathSegments[i - 1]) { lastSegmentMatchesRule = true; } } return j == ruleSegments.length || (j == ruleSegments.length - 1 && ruleSegments[j] == "**") || lastSegmentMatchesRule; } // Function to perform an exact match of path segments to rule segments bool exactMatchRuleSegmentsToPathSegments(string[] ruleSegments, string[] inputSegments) { // If rule has more segments than input, or input has more segments than rule, no match is possible if ((ruleSegments.length > inputSegments.length) || ( inputSegments.length > ruleSegments.length)) { return false; } // Iterate over each segment and compare for (size_t i = 0; i < ruleSegments.length; ++i) { if (ruleSegments[i] != inputSegments[i]) { if (debugLogging) {addLogEntry("Mismatch at segment " ~ to!string(i) ~ ": Rule Segment = " ~ ruleSegments[i] ~ ", Input Segment = " ~ inputSegments[i], ["debug"]);} return false; // Return false if any segment doesn't match } } // If all segments match, return true if (debugLogging) {addLogEntry("All segments matched: Rule Segments = " ~ to!string(ruleSegments) ~ ", Input Segments = " ~ to!string(inputSegments), ["debug"]);} return true; } // Function to perform a match of path segments to rule segments bool matchRuleSegmentsToPathSegments(string[] ruleSegments, string[] inputSegments) { if (debugLogging) {addLogEntry("Running matchRuleSegmentsToPathSegments()", ["debug"]);} // If rule has more segments than input, no match is possible if (ruleSegments.length > inputSegments.length) { return false; } // Compare segments up to the length of the rule path return equal(ruleSegments, inputSegments[0 .. ruleSegments.length]); } // Function to match the first segment only of the path and rule bool matchFirstSegmentToPathFirstSegment(string[] ruleSegments, string[] inputSegments) { // Check that both segments are not empty if (ruleSegments.length == 0 || inputSegments.length == 0) { return false; // Return false if either segment array is empty } // Compare the first segments only return equal(ruleSegments[0], inputSegments[0]); } // Test the path for prefix matching an include sync_list rule bool isSyncListPrefixMatch(string inputPath) { // Ensure inputPath ends with a '/' if not root, to avoid false positives string inputPrefix = inputPath.endsWith("/") ? inputPath : inputPath ~ "/"; foreach (entry; syncListIncludePathsOnly) { string normalisedEntry = entry; // If rule ends in '/*', treat it as if the '/*' is not there if (normalisedEntry.endsWith("/*")) { normalisedEntry = normalisedEntry[0 .. $ - 2]; // remove '/*' for this rule comparison } // Ensure trailing '/' for safe prefix match string entryWithSlash = normalisedEntry.endsWith("/") ? normalisedEntry : normalisedEntry ~ "/"; // Match input as being equal to or under the rule path, or rule path being under the input path if (entryWithSlash.startsWith(inputPrefix) || inputPrefix.startsWith(entryWithSlash)) { // Debug the exact 'sync_list' inclusion rule this matched if (debugLogging) { addLogEntry("Parental path matched 'sync_list' Inclusion Rule: " ~ to!string(entry), ["debug"]); } return true; } } return false; } // Do any 'anywhere' sync_list' rules exist for inclusion? bool syncListAnywhereInclusionRulesExist() { // Count the entries in syncListAnywherePathOnly auto anywhereRuleCount = count(syncListAnywherePathOnly); if (anywhereRuleCount > 0) { return true; } else { return false; } } // Validate that 'sync_list' *include* rules are not rendered non-viable by 'skip_dir' entries. // If an include rule would be excluded by 'skip_dir' evaluation, it is "shadowed" by that entry. bool validateSyncListNotShadowedBySkipDir() { // No sync_list include rules loaded => nothing to validate if (syncListIncludePathsOnly is null || syncListIncludePathsOnly.empty) return true; // No skip_dir configured => nothing to validate if (appConfig.getValueString("skip_dir").empty) return true; string[] shadowedRules; foreach (rule; syncListIncludePathsOnly) { // syncListIncludePathsOnly should only contain include rules, but be defensive. if (rule.empty) continue; if (rule[0] == '!' || rule[0] == '-') continue; // Normalise the rule to match how skip_dir rules are evaluated at runtime. // skip_dir entries are relative to sync_dir. sync_list entries may be rooted (start with '/'). string candidate = rule; // Normalise leading "./" (defensive) if (candidate.length >= 2 && candidate[0 .. 2] == "./") { candidate = candidate[2 .. $]; } // Normalise sync_list rooted includes: "/Documents" -> "Documents" if (candidate.length >= 1 && candidate[0] == '/') { // Remove only the first '/', sync_list rules are single-rooted relative to sync_dir candidate = candidate[1 .. $]; } if (candidate.empty) continue; // Use the *actual* runtime skip_dir evaluation logic (strict/non-strict) // so the check matches real behaviour. bool shadowed = false; // Test as-is if (isDirNameExcluded(candidate)) { shadowed = true; } else { // Also test with a trailing slash where appropriate, so: // skip_dir = "Documents/" correctly shadows sync_list = "/Documents" // (Users often represent a directory root either way.) if (candidate[$ - 1] != '/') { if (isDirNameExcluded(candidate ~ "/")) { shadowed = true; } } } if (shadowed) { shadowedRules ~= rule; } } if (!shadowedRules.empty) { addLogEntry(); addLogEntry("ERROR: Invalid Client Side Filtering configuration detected.", ["info", "notify"]); addLogEntry(" One or more 'sync_list' inclusion rules are shadowed by 'skip_dir' and will never be viable.", ["info", "notify"]); foreach (r; shadowedRules) { addLogEntry(" Shadowed 'sync_list' rule: " ~ r, ["info", "notify"]); } addLogEntry(" Fix: remove or narrow the conflicting 'skip_dir' entry/entries, or adjust your 'sync_list' rules.", ["info", "notify"]); addLogEntry(" See the 'skip_dir' documentation for correct usage and examples.", ["info", "notify"]); addLogEntry(); return false; } return true; } // Validate that 'sync_list' *include* rules are not rendered non-viable by 'skip_file' entries. // If an include rule would be excluded by 'skip_file' evaluation, it is "shadowed" by that entry. bool validateSyncListNotShadowedBySkipFile() { // No sync_list include rules loaded => nothing to validate if (syncListIncludePathsOnly is null || syncListIncludePathsOnly.empty) return true; // No skip_file configured => nothing to validate if (appConfig.getValueString("skip_file").empty) return true; string[] shadowedRules; foreach (rule; syncListIncludePathsOnly) { // Defensive: ignore empty or explicitly negative rules if (rule.empty) continue; if (rule[0] == '!' || rule[0] == '-') continue; // Only validate file-intent rules: // - If it ends with '/', treat as a directory include and do not apply skip_file shadow validation. // (Users commonly include folders; skip_file patterns like '*.tmp' should not invalidate that.) if (rule.length > 1 && rule[$ - 1] == '/') continue; // Normalise the rule to match how skip_file rules are evaluated at runtime. // skip_file entries are relative to sync_dir. sync_list entries may be rooted (start with '/'). string candidate = rule; // Normalise leading "./" (defensive) if (candidate.length >= 2 && candidate[0 .. 2] == "./") { candidate = candidate[2 .. $]; } // Normalise sync_list rooted includes: "/Documents/file.txt" -> "Documents/file.txt" if (candidate.length >= 1 && candidate[0] == '/') { candidate = candidate[1 .. $]; } if (candidate.empty) continue; // Use the *actual* runtime skip_file evaluation logic so this check matches real behaviour. if (isFileNameExcluded(candidate)) { shadowedRules ~= rule; } } if (!shadowedRules.empty) { addLogEntry(); addLogEntry("ERROR: Invalid Client Side Filtering configuration detected.", ["info", "notify"]); addLogEntry(" One or more 'sync_list' inclusion rules are shadowed by 'skip_file' and will never be viable.", ["info", "notify"]); foreach (r; shadowedRules) { addLogEntry(" Shadowed 'sync_list' rule: " ~ r, ["info", "notify"]); } addLogEntry(" Fix: remove or narrow the conflicting 'skip_file' entry/entries, or adjust your 'sync_list' rules.", ["info", "notify"]); addLogEntry(" See the 'skip_file' documentation for correct usage and examples.", ["info", "notify"]); addLogEntry(); return false; } return true; } }onedrive-2.5.10/src/config.d000066400000000000000000004432661513710110600156250ustar00rootroot00000000000000// What is this module called? module config; // What does this module require to function? import core.stdc.stdlib: EXIT_SUCCESS, EXIT_FAILURE, exit; import std.array; import std.stdio; import std.process; import std.regex; import std.string; import std.algorithm; import std.algorithm.searching; import std.algorithm.sorting; import std.file; import std.conv; import std.path; import std.getopt; import std.format; import std.ascii; import std.datetime; import std.exception; import core.sys.posix.unistd : geteuid, getuid; import std.process : spawnProcess, wait; // What other modules that we have created do we need to import? import log; import util; class ApplicationConfig { // Application default values - these do not change // - Compile time regex immutable auto configRegex = ctRegex!(`^(\w+)\s*=\s*"(.*)"\s*$`); // - Default directory to store data immutable string defaultSyncDir = "~/OneDrive"; // - Default Directory Permissions immutable long defaultDirectoryPermissionMode = 700; // - Default File Permissions immutable long defaultFilePermissionMode = 600; // - Default types of files to skip // v2.0.x - 2.4.x: ~*|.~*|*.tmp // v2.5.x : ~*|.~*|*.tmp|*.swp|*.partial immutable string defaultSkipFile = "~*|.~*|*.tmp|*.swp|*.partial"; // - Default directories to skip (default is skip none) immutable string defaultSkipDir = ""; // - Default application logging directory immutable string defaultLogFileDir = "/var/log/onedrive"; // - Default configuration directory immutable string defaultConfigDirName = "~/.config/onedrive"; // - Default 'OneDrive Business Shared Files' Folder Name immutable string defaultBusinessSharedFilesDirectoryName = "Files Shared With Me"; // - Default file fragment size for uploads immutable long defaultFileFragmentSize = 10; // in MiB immutable long defaultMaxFileFragmentSize = 60; // in MiB immutable long defaultMonitorInterval = 300; // 5 minutes // Microsoft Requirements // - Default Application ID (abraunegg) immutable string defaultApplicationId = "d50ca740-c83f-4d1b-b616-12c519384f0c"; // - Microsoft User Agent ISV Tag immutable string isvTag = "ISV"; // - Microsoft User Agent Company name immutable string companyName = "abraunegg"; // - Microsoft Application name as per Microsoft Azure application registration immutable string appTitle = "OneDrive Client for Linux"; // Comply with OneDrive traffic decoration requirements // https://docs.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online // - Identify as ISV and include Company Name, App Name separated by a pipe character and then adding Version number separated with a slash character immutable string defaultUserAgent = isvTag ~ "|" ~ companyName ~ "|" ~ appTitle ~ "/" ~ strip(import("version")); // HTTP Struct items, used for configuring HTTP() // Curl Timeout Handling // libcurl dns_cache_timeout timeout immutable int defaultDnsTimeout = 60; // in seconds // Connect timeout for HTTP|HTTPS connections // Controls CURLOPT_CONNECTTIMEOUT immutable int defaultConnectTimeout = 10; // in seconds // Default data timeout for HTTP operations // curl.d has a default of: _defaultDataTimeout = dur!"minutes"(2); immutable int defaultDataTimeout = 60; // in seconds // Maximum total time (in seconds) that any transfer operation is allowed to take. // This maps directly to libcurl's CURLOPT_TIMEOUT. // // IMPORTANT: // • CURLOPT_TIMEOUT applies to the *entire* operation — DNS lookup, TCP connect, // TLS negotiation, and the full data transfer. // • If this timeout is reached, libcurl will abort the request even if data is // flowing normally. // • For large file downloads, especially on slower links, setting a non-zero // timeout can cause the transfer to be killed prematurely. // // Behaviour: // • A value of 0 disables the limit entirely (libcurl’s default behaviour). // • It is strongly recommended to keep this at 0 unless a hard global cap is // explicitly required by the user or their environment. immutable int defaultOperationTimeout = 0; // 0 = no timeout (safe for extremely large file downloads) // Specify what IP protocol version should be used when communicating with OneDrive immutable int defaultIpProtocol = 0; // 0 = IPv4 + IPv6, 1 = IPv4 Only, 2 = IPv6 Only // Specify how many redirects should be allowed immutable int defaultMaxRedirects = 5; // Azure Active Directory & Graph Explorer Endpoints // - Global & Default immutable string globalAuthEndpoint = "https://login.microsoftonline.com"; immutable string globalGraphEndpoint = "https://graph.microsoft.com"; // - US Government L4 immutable string usl4AuthEndpoint = "https://login.microsoftonline.us"; immutable string usl4GraphEndpoint = "https://graph.microsoft.us"; // - US Government L5 immutable string usl5AuthEndpoint = "https://login.microsoftonline.us"; immutable string usl5GraphEndpoint = "https://dod-graph.microsoft.us"; // - Germany immutable string deAuthEndpoint = "https://login.microsoftonline.de"; immutable string deGraphEndpoint = "https://graph.microsoft.de"; // - China immutable string cnAuthEndpoint = "https://login.chinacloudapi.cn"; immutable string cnGraphEndpoint = "https://microsoftgraph.chinacloudapi.cn"; // Application Version immutable string applicationVersion = "onedrive " ~ strip(import("version")); // Application items that depend on application run-time environment, thus cannot be immutable // Public variables // Logging verbosity count long verbosityCount = 0; // Was the application just authorised - paste of response URI bool applicationAuthoriseResponseURIReceived = false; // Store the refreshToken for use within the application const(char)[] refreshToken; // Store the current accessToken for use within the application const(char)[] accessToken; // Store the 'refresh_token' file path string refreshTokenFilePath = ""; // Store the accessTokenExpiration for use within the application SysTime accessTokenExpiration; // Store the 'session_upload.UNIQUE_STRING' file path string uploadSessionFilePath = ""; // Store the 'resume_download.UNIQUE_STRING' file path string resumeDownloadFilePath = ""; // Store the Intune account information string intuneAccountDetails; // Store the Intune account information on disk for reuse string intuneAccountDetailsFilePath = ""; // API initialisation flags bool apiWasInitialised = false; bool syncEngineWasInitialised = false; // Important Account Details string accountType; string defaultDriveId; string defaultRootId; // Sync Operations bool fullScanTrueUpRequired = false; bool suppressLoggingOutput = false; // WebSocket Operations bool curlSupportsWebSockets = false; bool websocketSupportCheckDone = false; bool websocketNotificationUrlAvailable = false; string websocketEndpointResponse; string websocketNotificationUrl; string websocketUrlExpiry; // Default number of concurrent threads when downloading and uploading data ulong defaultConcurrentThreads = 8; // Default number of seconds inotify actions will be delayed by ulong defaultInotifyDelay = 5; // All application run-time paths are formulated from this as a set of defaults // - What is the home path of the actual 'user' that is running the application string defaultHomePath = ""; // - What is the config path for the application. By default, this is ~/.config/onedrive but can be overridden by using --confdir string configDirName = defaultConfigDirName; // - In case we have to use a system config directory such as '/etc/onedrive' or similar, store that path in this variable private string systemConfigDirName = ""; // - Store the configured converted octal value for directory permissions private int configuredDirectoryPermissionMode; // - Store the configured converted octal value for file permissions private int configuredFilePermissionMode; // - Store the 'delta_link' file path private string deltaLinkFilePath = ""; // - Store the 'items.sqlite3' file path string databaseFilePath = ""; // - Store the 'items-dryrun.sqlite3' file path string databaseFilePathDryRun = ""; // - Store the user 'config' file path private string userConfigFilePath = ""; // - Store the system 'config' file path private string systemConfigFilePath = ""; // - What is the 'config' file path that will be used? private string applicableConfigFilePath = ""; // - Store the 'sync_list' file path string syncListFilePath = ""; // OneDrive Business Shared File handling - what directory will be used? string configuredBusinessSharedFilesDirectoryName = ""; // Hash files so that we can detect when the configuration has changed, in items that will require a --resync private string configHashFile = ""; private string configBackupFile = ""; private string syncListHashFile = ""; // Store the actual 'runtime' hash private string currentConfigHash = ""; private string currentSyncListHash = ""; // Store the previous config files hash values (file contents) private string previousConfigHash = ""; private string previousSyncListHash = ""; // Store items that come in from the 'config' file, otherwise these need to be set the defaults private string configFileSyncDir = defaultSyncDir; private string configFileSkipFile = ""; // Default for now, if post reading in any user configuration, if still empty, default will be used private bool configFileSkipFileReadIn = false; // If we actually read in something from 'config' file, this gets set to true private string configFileSkipDir = ""; // Default here is no directories are skipped private string configFileDriveId = ""; // Default here is that no drive id is specified private bool configFileCheckNoSync = false; private bool configFileSkipDotfiles = false; private bool configFileSkipSymbolicLinks = false; private bool configFileSkipSize = false; private bool configFileSyncBusinessSharedItems = false; // File permission values (set via initialise function) private int convertedPermissionValue; // Array of values that are the actual application runtime configuration // The values stored in these array's are the actual application configuration which can then be accessed by getValue & setValue string[string] stringValues; long[string] longValues; bool[string] boolValues; bool shellEnvironmentSet = false; // GUI Notification Environment variables bool xdg_exists = false; bool dbus_exists = false; // Recycle Bin Configuration // These paths are used by the application, if 'use_recycle_bin' is enabled string recycleBinParentPath; string recycleBinFilePath; string recycleBinInfoPath; // Runtime 'sync_dir' as initialised string runtimeSyncDirectory; // Initialise the application configuration bool initialise(string confdirOption, bool helpRequested) { // Default runtime configuration - entries in config file ~/.config/onedrive/config or derived from variables above // An entry here means it can be set via the config file if there is a corresponding entry, read from config and set via update_from_args() // The below becomes the 'default' application configuration before config file and/or cli options are overlaid on top // - Set the required default values stringValues["application_id"] = defaultApplicationId; stringValues["log_dir"] = defaultLogFileDir; stringValues["skip_dir"] = defaultSkipDir; stringValues["skip_file"] = defaultSkipFile; stringValues["sync_dir"] = defaultSyncDir; stringValues["user_agent"] = defaultUserAgent; // - The 'drive_id' is used when we specify a specific OneDrive ID when attempting to sync Shared Folders and SharePoint items stringValues["drive_id"] = ""; // Support National Azure AD endpoints as per https://docs.microsoft.com/en-us/graph/deployments // By default, if empty, use standard Azure AD URL's // Will support the following options: // - USL4 // AD Endpoint: https://login.microsoftonline.us // Graph Endpoint: https://graph.microsoft.us // - USL5 // AD Endpoint: https://login.microsoftonline.us // Graph Endpoint: https://dod-graph.microsoft.us // - DE // AD Endpoint: https://portal.microsoftazure.de // Graph Endpoint: https://graph.microsoft.de // - CN // AD Endpoint: https://login.chinacloudapi.cn // Graph Endpoint: https://microsoftgraph.chinacloudapi.cn stringValues["azure_ad_endpoint"] = ""; // Support single-tenant applications that are not able to use the "common" multiplexer stringValues["azure_tenant_id"] = ""; // Support synchronising files based on user desire // - default = whatever order these came in as, processed essentially FIFO // - size_asc = file size ascending // - size_dsc = file size descending // - name_asc = file name ascending // - name_dsc = file name descending stringValues["transfer_order"] = "default"; // Recycle Bin Configuration // Enable|Disable feature boolValues["use_recycle_bin"] = false; // Recycle Bin Folder - empty string as a default stringValues["recycle_bin_path"] = ""; // - Store how many times was --verbose added longValues["verbose"] = verbosityCount; // - The amount of time (seconds) between monitor sync loops longValues["monitor_interval"] = defaultMonitorInterval; // - What size of file should be skipped? longValues["skip_size"] = 0; // - How many 'loops' when using --monitor, before we print out high frequency recurring items? longValues["monitor_log_frequency"] = 12; // - Number of N sync runs before performing a full local scan of sync_dir // By default 12 which means every ~60 minutes a full disk scan of sync_dir will occur // 'monitor_interval' * 'monitor_fullscan_frequency' = 3600 = 1 hour longValues["monitor_fullscan_frequency"] = 12; // - Number of children in a path that is locally removed which will be classified as a 'big data delete' longValues["classify_as_big_delete"] = 1000; // - Configure the default folder permission attributes for newly created folders longValues["sync_dir_permissions"] = defaultDirectoryPermissionMode; // - Configure the default file permission attributes for newly created file longValues["sync_file_permissions"] = defaultFilePermissionMode; // - Configure download / upload rate limits longValues["rate_limit"] = 0; // - To ensure we do not fill up the load disk, how much disk space should be reserved by default longValues["space_reservation"] = 50 * 2^^20; // 50 MB as Bytes // - How large should our file fragments be when uploading as an 'upload session' ? longValues["file_fragment_size"] = defaultFileFragmentSize; // whole number, treated as MB, will be converted to bytes within performSessionFileUpload(). Default is 10. // HTTPS & CURL Operation Settings // - Maximum time an operation is allowed to take // This includes dns resolution, connecting, data transfer, etc - controls CURLOPT_TIMEOUT // CURLOPT_TIMEOUT: This option sets the maximum time in seconds that you allow the libcurl transfer operation to take. // This is useful for controlling how long a specific transfer should take before it is considered too slow and aborted. However, it does not directly control the keep-alive time of a socket. longValues["operation_timeout"] = defaultOperationTimeout; // libcurl dns_cache_timeout timeout longValues["dns_timeout"] = defaultDnsTimeout; // Timeout for HTTPS connections - controls CURLOPT_CONNECTTIMEOUT // CURLOPT_CONNECTTIMEOUT: This option sets the timeout, in seconds, for the connection phase. It is the maximum time allowed for the connection to be established. longValues["connect_timeout"] = defaultConnectTimeout; // Timeout for activity on a HTTPS connection longValues["data_timeout"] = defaultDataTimeout; // What IP protocol version should be used when communicating with OneDrive longValues["ip_protocol_version"] = defaultIpProtocol; // 0 = IPv4 + IPv6, 1 = IPv4 Only, 2 = IPv6 Only // What is the default age that a curl engine should be left idle for, before being destroyed longValues["max_curl_idle"] = 120; // Number of concurrent threads longValues["threads"] = defaultConcurrentThreads; // Default is 8, user can increase to max of 16 or decrease // Do we wish to upload only? boolValues["upload_only"] = false; // Do we need to check for the .nomount file on the mount point? boolValues["check_nomount"] = false; // Do we need to check for the .nosync file anywhere? boolValues["check_nosync"] = false; // Do we wish to download only? boolValues["download_only"] = false; // Do we disable notifications? boolValues["disable_notifications"] = false; // Do we bypass all the download validation? // - This is critically important not to disable, but because of SharePoint 'feature' can be highly desirable to enable boolValues["disable_download_validation"] = false; // Do we bypass all the upload validation? // - This is critically important not to disable, but because of SharePoint 'feature' can be highly desirable to enable boolValues["disable_upload_validation"] = false; // Do we enable logging? boolValues["enable_logging"] = false; // Do we force HTTP 1.1 for connections to the OneDrive API // - By default we use the curl library default, which should be HTTP2 for most operations governed by the OneDrive API boolValues["force_http_11"] = false; // Do we treat the local file system as the source of truth for our data? boolValues["local_first"] = false; // Do we ignore local file deletes, so that all files are retained online? boolValues["no_remote_delete"] = false; // Do we skip symbolic links? boolValues["skip_symlinks"] = false; // Do we enable debugging for all HTTPS flows. Critically important for debugging API issues. boolValues["debug_https"] = false; // Do we skip .files and .folders? boolValues["skip_dotfiles"] = false; // Do we perform a 'dry-run' with no local or remote changes actually being performed? boolValues["dry_run"] = false; // Do we sync all the files in the 'sync_dir' root? boolValues["sync_root_files"] = false; // Do we delete source file after successful transfer? boolValues["remove_source_files"] = false; // Do we delete source folders after successful transfer? boolValues["remove_source_folders"] = false; // Do we perform strict matching for skip_dir? boolValues["skip_dir_strict_match"] = false; // Do we perform a --resync? boolValues["resync"] = false; // 'resync' now needs to be acknowledged based on the 'risk' of using it boolValues["resync_auth"] = false; // Ignore data safety checks and overwrite local data rather than preserve & rename // - This is a config file option ONLY boolValues["bypass_data_preservation"] = false; // Allow enable / disable of the syncing of OneDrive Business Shared items (files & folders) via configuration file boolValues["sync_business_shared_items"] = false; // Log to application output running configuration values boolValues["display_running_config"] = false; // Configure read-only authentication scope boolValues["read_only_auth_scope"] = false; // Flag to cleanup local files when using --download-only boolValues["cleanup_local_files"] = false; // Perform a permanentDelete on deletion activities boolValues["permanent_delete"] = false; // Controls how the application handles the Microsoft SharePoint 'feature' of modifying all PDF, MS Office & HTML files with added XML content post upload // - There are 2 ways to solve this: // 1. Download the modified file immediately after upload as per v2.4.x (default) // 2. Create a new online version of the file, which then contributes to the users 'quota' boolValues["create_new_file_version"] = false; // Some Linux editors (vi|vim|nvim|emacs|LibreOffice) use use a safe file-save strategy designed to avoid data corruption. As such, as part of this Process // they 'track' the last modified timestamp of the 'new' file that they create on file save (regardless of new file, modified file) // If *any* other application in the background then 'updates' this timestamp, these Linux editors complain saying that the file has changed: // // WARNING: The file has been changed since reading it!!! // Do you really want to write to it (y/n)? // // This is simply because they are looking at the timestamp and *not* if the content has actually changed .... a poor design on those editors // // This option, when enabled, forces the client to use a 'session' upload, which, when the 'file' is uploaded by the session, this includes the local timestamp of the file // and Microsoft OneDrive should be respecting this timestamp as the timestamp to use|set when storing that file online boolValues["force_session_upload"] = false; // Obsidian Editor has been written in such a way that it is constantly writing each and every keystroke to a file. // Not only is this really bad application behaviour, for this client, this means the application is constantly writing to disk, thus attempting to upload file changes. // Unfortunately Obsidian on Linux does not provide a built-in way to disable atomic saves or switch to a backup-copy method via configuration. // This flag tells the 'onedrive' inotify monitor to 'sleep' for this period of time, so that constant system writes are not creating instant data uploads boolValues["delay_inotify_processing"] = false; longValues["inotify_delay"] = defaultInotifyDelay; // default of 5 seconds // Webhook Feature Options boolValues["webhook_enabled"] = false; stringValues["webhook_public_url"] = ""; stringValues["webhook_listening_host"] = ""; longValues["webhook_listening_port"] = 8888; longValues["webhook_expiration_interval"] = 600; longValues["webhook_renewal_interval"] = 300; longValues["webhook_retry_interval"] = 60; // WebSocket Feature Options boolValues["disable_websocket_support"] = false; // GUI File Transfer and Deletion Notifications boolValues["notify_file_actions"] = false; // Display file transfer metrics // - Enable the calculation of transfer metrics (duration,speed) for the transfer of a file boolValues["display_transfer_metrics"] = false; // Enable writing extended attributes about a file to xattr values // - file creator // - file last modifier boolValues["write_xattr_data"] = false; // Diable setting the permissions for directories and files, using the inherited permissions boolValues["disable_permission_set"] = false; // Use authentication via Intune SSO via Microsoft Identity Broker (microsoft-identity-broker) dbus session boolValues["use_intune_sso"] = false; // Use authentication via OAuth2 Device Authorisation Flow boolValues["use_device_auth"] = false; // GUI | Display Manager Integration boolValues["display_manager_integration"] = false; // Disable GitHub Version check boolValues["disable_version_check"] = false; // EXPAND USERS HOME DIRECTORY // Determine the users home directory. // Need to avoid using ~ here as expandTilde() below does not interpret correctly when running under init.d or systemd scripts // Check for HOME environment variable if (environment.get("HOME") != ""){ // Use HOME environment variable if (debugLogging) {addLogEntry("runtime_environment: HOME environment variable detected, expansion of '~' should be possible", ["debug"]);} defaultHomePath = environment.get("HOME"); shellEnvironmentSet = true; } else { if ((environment.get("SHELL") == "") && (environment.get("USER") == "")){ // No shell is set or username - observed case when running as systemd service under CentOS 7.x if (debugLogging) {addLogEntry("runtime_environment: No HOME, SHELL or USER environment variable configuration detected. Expansion of '~' not possible", ["debug"]);} defaultHomePath = "/root"; shellEnvironmentSet = false; } else { // A shell & valid user is set, but no HOME is set, use ~ which can be expanded if (debugLogging) {addLogEntry("runtime_environment: SHELL and USER environment variable detected, expansion of '~' should be possible", ["debug"]);} defaultHomePath = "~"; shellEnvironmentSet = true; } } // Outcome of setting 'defaultHomePath' if (debugLogging) {addLogEntry("runtime_environment: Calculated defaultHomePath: " ~ defaultHomePath, ["debug"]);} // Configure the default path for the Recycle Bin // Both GNOME and KDE use '~/.local/share/Trash/' as the default path // ~/.local/share/Trash/ // ├── files/ # The actual trashed files // └── info/ # .trashinfo metadata about each file (original path, deletion date) setValueString("recycle_bin_path", defaultHomePath ~ "/.local/share/Trash/"); recycleBinParentPath = getValueString("recycle_bin_path"); // DEVELOPER OPTIONS // display_memory = true | false // - It may be desirable to display the memory usage of the application to assist with diagnosing memory issues with the application // - This is especially beneficial when debugging or performing memory tests with Valgrind boolValues["display_memory"] = false; // monitor_max_loop = long value // - It may be desirable to, when running in monitor mode, force monitor mode to 'quit' after X number of loops // - This is especially beneficial when debugging or performing memory tests with Valgrind longValues["monitor_max_loop"] = 0; // display_sync_options = true | false // - It may be desirable to see what options are being passed into performSync() without enabling the full verbose debug logging boolValues["display_sync_options"] = false; // force_children_scan = true | false // - Force client to use /children rather than /delta to query changes on OneDrive // - This option flags nationalCloudDeployment as true, forcing the client to act like it is using a National Cloud Deployment model boolValues["force_children_scan"] = false; // display_processing_time = true | false // - Enabling this option will add function processing times to the console output // - This then enables tracking of where the application is spending most amount of time when processing data when users have questions re performance boolValues["display_processing_time"] = false; // Function variables string configDirBase; string systemConfigDirBase = "/etc"; bool configurationInitialised = false; // Initialise the application configuration, using the provided --confdir option was passed in if (!confdirOption.empty) { // A CLI 'confdir' was passed in // Clean up any stray " .. these should not be there for correct process handling of the configuration option confdirOption = strip(confdirOption,"\""); if (debugLogging) {addLogEntry("configDirName: CLI override to set configDirName to: " ~ confdirOption, ["debug"]);} // For the passed in --confdir option .. if (canFind(confdirOption,"~")) { // A ~ was found if (debugLogging) {addLogEntry("configDirName: A '~' was found in configDirName, using the calculated 'defaultHomePath' to replace '~'", ["debug"]);} configDirName = defaultHomePath ~ strip(confdirOption,"~","~"); } else { configDirName = confdirOption; } } else { // Determine the base directory relative to which user specific configuration files should be stored if (environment.get("XDG_CONFIG_HOME") != ""){ if (debugLogging) {addLogEntry("configDirBase: XDG_CONFIG_HOME environment variable set", ["debug"]);} configDirBase = environment.get("XDG_CONFIG_HOME"); } else { // XDG_CONFIG_HOME does not exist on systems where X11 is not present - ie - headless systems / servers if (debugLogging) {addLogEntry("configDirBase: WARNING - no XDG_CONFIG_HOME environment variable set", ["debug"]);} configDirBase = buildNormalizedPath(buildPath(defaultHomePath, ".config")); } // Output configDirBase calculation if (debugLogging) { addLogEntry("configDirBase: " ~ configDirBase, ["debug"]); // Set the calculated application configuration directory addLogEntry("configDirName: Configuring application to use calculated config path", ["debug"]); } // configDirBase contains the correct path so we do not need to check for presence of '~' configDirName = buildNormalizedPath(buildPath(configDirBase, "onedrive")); } // systemConfigDirBase contains the correct path, build the correct path for the system config file systemConfigDirName = buildNormalizedPath(buildPath(systemConfigDirBase, "onedrive")); // Configuration directory should now have been correctly identified if (!exists(configDirName)) { // Attempt path creation try { // create the configuration directory mkdirRecurse(configDirName); // Configure the applicable permissions for the folder configDirName.setAttributes(returnRequiredDirectoryPermissions()); } catch (std.file.FileException e) { // Creating the configuration directory failed addLogEntry("ERROR: Unable to create the required application configuration directory: " ~ e.msg, ["info", "notify"]); // Use exit scopes to shutdown API return EXIT_FAILURE; } } else { // The config path exists // The path that exists must be a directory, not a file if (!isDir(configDirName)) { if (!confdirOption.empty) { // the configuration path was passed in by the user .. user error addLogEntry("ERROR: --confdir entered value is an existing file instead of an existing directory"); } else { // other error addLogEntry("ERROR: " ~ confdirOption ~ " is a file rather than a directory"); } // Must exit exit(EXIT_FAILURE); } } // Update application set variables based on configDirName // - What is the full path for the 'refresh_token' refreshTokenFilePath = buildNormalizedPath(buildPath(configDirName, "refresh_token")); // - What is the full path for the 'intune_account' intuneAccountDetailsFilePath = buildNormalizedPath(buildPath(configDirName, "intune_account")); // - What is the full path for the 'delta_link' deltaLinkFilePath = buildNormalizedPath(buildPath(configDirName, "delta_link")); // - What is the full path for the 'items.sqlite3' - the database cache file databaseFilePath = buildNormalizedPath(buildPath(configDirName, "items.sqlite3")); // - What is the full path for the 'items-dryrun.sqlite3' - the dry-run database cache file databaseFilePathDryRun = buildNormalizedPath(buildPath(configDirName, "items-dryrun.sqlite3")); // - What is the full path for the 'resume_upload' uploadSessionFilePath = buildNormalizedPath(buildPath(configDirName, "session_upload")); // - What is the full path for the resume 'resume_download' file resumeDownloadFilePath = buildNormalizedPath(buildPath(configDirName, "resume_download")); // - What is the full path for the 'sync_list' file syncListFilePath = buildNormalizedPath(buildPath(configDirName, "sync_list")); // - What is the full path for the 'config' - the user file to configure the application userConfigFilePath = buildNormalizedPath(buildPath(configDirName, "config")); // - What is the full path for the system 'config' file if it is required systemConfigFilePath = buildNormalizedPath(buildPath(systemConfigDirName, "config")); // To determine if any configuration items has changed, where a --resync would be required, we need to have a hash file for the following items // - 'config.backup' file // - applicable 'config' file // - 'sync_list' file // - 'business_shared_items' file configBackupFile = buildNormalizedPath(buildPath(configDirName, ".config.backup")); configHashFile = buildNormalizedPath(buildPath(configDirName, ".config.hash")); syncListHashFile = buildNormalizedPath(buildPath(configDirName, ".sync_list.hash")); // Debug Output for application set variables based on configDirName if (debugLogging) { addLogEntry("refreshTokenFilePath = " ~ refreshTokenFilePath, ["debug"]); addLogEntry("intuneAccountDetailsFilePath = " ~ intuneAccountDetailsFilePath, ["debug"]); addLogEntry("deltaLinkFilePath = " ~ deltaLinkFilePath, ["debug"]); addLogEntry("databaseFilePath = " ~ databaseFilePath, ["debug"]); addLogEntry("databaseFilePathDryRun = " ~ databaseFilePathDryRun, ["debug"]); addLogEntry("uploadSessionFilePath = " ~ uploadSessionFilePath, ["debug"]); addLogEntry("userConfigFilePath = " ~ userConfigFilePath, ["debug"]); addLogEntry("syncListFilePath = " ~ syncListFilePath, ["debug"]); addLogEntry("systemConfigFilePath = " ~ systemConfigFilePath, ["debug"]); addLogEntry("configBackupFile = " ~ configBackupFile, ["debug"]); addLogEntry("configHashFile = " ~ configHashFile, ["debug"]); addLogEntry("syncListHashFile = " ~ syncListHashFile, ["debug"]); } // Configure the Hash and Backup File Permission Value string valueToConvert = to!string(defaultFilePermissionMode); auto convertedValue = parse!long(valueToConvert, 8); convertedPermissionValue = to!int(convertedValue); // Do not try and load any user configuration file if --help was used if (helpRequested) { return true; } else { // Initialise the application using the configuration file if it exists if (!exists(userConfigFilePath)) { // 'user' configuration file does not exist .. but did the user specify a custom configuration directory via --confdir ? if (confdirOption.empty) { // No --confdir entry // Is there a system configuration file? if (!exists(systemConfigFilePath)) { // 'system' configuration file does not exist if (verboseLogging) {addLogEntry("No user or system config file found, using application defaults", ["verbose"]);} applicableConfigFilePath = userConfigFilePath; configurationInitialised = true; } else { // 'system' configuration file exists // can we load the configuration file without error? if (loadConfigFile(systemConfigFilePath)) { // configuration file loaded without error addLogEntry("System configuration file successfully loaded"); // Set 'applicableConfigFilePath' to equal the 'config' we loaded applicableConfigFilePath = systemConfigFilePath; // Update the configHashFile path value to ensure we are using the system 'config' file for the hash configHashFile = buildNormalizedPath(buildPath(systemConfigDirName, ".config.hash")); configurationInitialised = true; } else { // there was a problem loading the configuration file addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering addLogEntry("System configuration file has errors - please check your configuration"); } } } else { // Set 'applicableConfigFilePath' to equal the 'config' path specified via --confdir applicableConfigFilePath = userConfigFilePath; configurationInitialised = true; } } else { // 'user' configuration file exists in the specified path // can we load the configuration file without error? if (loadConfigFile(userConfigFilePath)) { // configuration file loaded without error addLogEntry("Configuration file successfully loaded"); // Set 'applicableConfigFilePath' to equal the 'config' we loaded applicableConfigFilePath = userConfigFilePath; configurationInitialised = true; } else { // there was a problem loading the configuration file addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering addLogEntry("Configuration file has errors - please check your configuration"); } } // Advise the user path that we will use for the application state data if (canFind(applicableConfigFilePath, configDirName)) { if (verboseLogging) {addLogEntry("Using 'user' configuration path for application config and state data: " ~ configDirName, ["verbose"]);} } else { if (canFind(applicableConfigFilePath, systemConfigDirName)) { if (verboseLogging) { addLogEntry("Using 'system' configuration path for application config data: " ~ systemConfigDirName, ["verbose"]); addLogEntry("Using 'user' configuration path for application state data: " ~ configDirName, ["verbose"]); } } } } // return if the configuration was initialised return configurationInitialised; } // Create a backup of the 'config' file if it does not exist void createBackupConfigFile() { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); if (!getValueBool("dry_run")) { // Is there a backup of the config file if the config file exists? if (exists(applicableConfigFilePath)) { if (debugLogging) {addLogEntry("Creating a backup of the applicable config file", ["debug"]);} // create backup copy of current config file try { std.file.copy(applicableConfigFilePath, configBackupFile); // File Copy should only be readable by the user who created it - 0600 permissions needed configBackupFile.setAttributes(convertedPermissionValue); } catch (FileException e) { // filesystem error displayFileSystemErrorMessage(e.msg, thisFunctionName, configBackupFile, FsErrorSeverity.warning); } } } else { // --dry-run scenario ... technically we should not be making any local file changes ....... addLogEntry("DRY-RUN: Not creating backup config file as --dry-run has been used"); } } // Return a given string value based on the provided key string getValueString(string key) { auto p = key in stringValues; if (p) { return *p; } else { throw new Exception("Missing config value: " ~ key); } } // Return a given long value based on the provided key long getValueLong(string key) { auto p = key in longValues; if (p) { return *p; } else { throw new Exception("Missing config value: " ~ key); } } // Return a given bool value based on the provided key bool getValueBool(string key) { auto p = key in boolValues; if (p) { return *p; } else { throw new Exception("Missing config value: " ~ key); } } // Set a given string value based on the provided key void setValueString(string key, string value) { stringValues[key] = value; } // Set a given long value based on the provided key void setValueLong(string key, long value) { longValues[key] = value; } // Set a given long value based on the provided key void setValueBool(string key, bool value) { boolValues[key] = value; } // Configure the directory octal permission value void configureRequiredDirectoryPermissions() { // return the directory permission mode required // - return octal!defaultDirectoryPermissionMode; ... cant be used .. which is odd // Error: variable defaultDirectoryPermissionMode cannot be read at compile time if (getValueLong("sync_dir_permissions") != defaultDirectoryPermissionMode) { // return user configured permissions as octal integer string valueToConvert = to!string(getValueLong("sync_dir_permissions")); auto convertedValue = parse!long(valueToConvert, 8); configuredDirectoryPermissionMode = to!int(convertedValue); } else { // return default as octal integer string valueToConvert = to!string(defaultDirectoryPermissionMode); auto convertedValue = parse!long(valueToConvert, 8); configuredDirectoryPermissionMode = to!int(convertedValue); } } // Configure the file octal permission value void configureRequiredFilePermissions() { // return the file permission mode required // - return octal!defaultFilePermissionMode; ... cant be used .. which is odd // Error: variable defaultFilePermissionMode cannot be read at compile time if (getValueLong("sync_file_permissions") != defaultFilePermissionMode) { // return user configured permissions as octal integer string valueToConvert = to!string(getValueLong("sync_file_permissions")); auto convertedValue = parse!long(valueToConvert, 8); configuredFilePermissionMode = to!int(convertedValue); } else { // return default as octal integer string valueToConvert = to!string(defaultFilePermissionMode); auto convertedValue = parse!long(valueToConvert, 8); configuredFilePermissionMode = to!int(convertedValue); } } // Read the configuredDirectoryPermissionMode and return int returnRequiredDirectoryPermissions() { if (configuredDirectoryPermissionMode == 0) { // the configured value is zero, this means that directories would get // values of d--------- configureRequiredDirectoryPermissions(); } return configuredDirectoryPermissionMode; } // Read the configuredFilePermissionMode and return int returnRequiredFilePermissions() { if (configuredFilePermissionMode == 0) { // the configured value is zero configureRequiredFilePermissions(); } return configuredFilePermissionMode; } // Set file permissions for 'refresh_token' and 'intune_account' to 0600 int returnSecureFilePermission() { string valueToConvert = to!string(defaultFilePermissionMode); auto convertedValue = parse!long(valueToConvert, 8); return to!int(convertedValue); } // Load a configuration file from the provided filename private bool loadConfigFile(string filename) { try { addLogEntry("Reading configuration file: " ~ filename); readText(filename); } catch (std.file.FileException e) { addLogEntry("ERROR: Unable to access " ~ e.msg); return false; } auto file = File(filename, "r"); string lineBuffer; scope(exit) { file.close(); object.destroy(file); object.destroy(lineBuffer); } scope(failure) { file.close(); object.destroy(file); object.destroy(lineBuffer); } foreach (line; file.byLine()) { lineBuffer = stripLeft(line).to!string; if (lineBuffer.empty || lineBuffer[0] == ';' || lineBuffer[0] == '#') continue; auto c = lineBuffer.matchFirst(configRegex); if (c.empty) { addLogEntry("Malformed config line: " ~ lineBuffer); addLogEntry(); addLogEntry("Please review the documentation on how to correctly configure this application."); forceExit(); } c.popFront(); // skip the whole match string key = c.front.dup; c.popFront(); // Handle deprecated keys switch (key) { case "min_notify_changes": case "force_http_2": addLogEntry("The option '" ~ key ~ "' has been deprecated and will be ignored. Please read the updated documentation and update your client configuration to remove this option."); continue; case "sync_business_shared_folders": addLogEntry(); addLogEntry("The option 'sync_business_shared_folders' has been deprecated and the process for synchronising Microsoft OneDrive Business Shared Folders has changed."); addLogEntry("Please review the revised documentation on how to correctly configure this application feature."); addLogEntry("You must update your client configuration and make changes to your local filesystem and online data to use this capability."); return false; default: break; } // Process other keys if (key in boolValues) { // Strip quotes and whitespace string rawValue = to!string(c.front.dup); // Evaluate rawValue if (rawValue == "true") { setValueBool(key, true); // Additional config-specific flags for specific keys if (key == "check_nosync") configFileCheckNoSync = true; if (key == "skip_dotfiles") configFileSkipDotfiles = true; if (key == "skip_symlinks") configFileSkipSymbolicLinks = true; if (key == "sync_business_shared_items") configFileSyncBusinessSharedItems = true; } else if (rawValue == "false") { setValueBool(key, false); } else { addLogEntry("Invalid boolean value for key in config file: " ~ key ~ " = " ~ to!string(c.front.dup)); addLogEntry("ERROR: Only 'true' or 'false' are accepted for this setting."); forceExit(); } } else if (key in stringValues) { string value = c.front.dup; setValueString(key, value); if (key == "sync_dir") { if (!strip(value).empty) { configFileSyncDir = value; } else { addLogEntry(); addLogEntry("Invalid value for key in config file: " ~ key); addLogEntry("ERROR: sync_dir in config file cannot be empty - this is a fatal error and must be corrected"); addLogEntry(); forceExit(); } } else if (key == "skip_file") { // Flag this as true configFileSkipFileReadIn = true; // Merge safely, removing empty entries and de-duplicating configFileSkipFile = mergePipeDelimitedRulesDedup(configFileSkipFile, to!string(c.front.dup)); // Update stored config value setValueString("skip_file", configFileSkipFile); } else if (key == "skip_dir") { // Merge safely, removing empty entries and de-duplicating configFileSkipDir = mergePipeDelimitedRulesDedup(configFileSkipDir, to!string(c.front.dup)); // Update stored config value setValueString("skip_dir", configFileSkipDir); } else if (key == "single_directory") { // --single-directory Strip quotation marks from path // This is an issue when using ONEDRIVE_SINGLE_DIRECTORY with Docker string configFileSingleDirectory = strip(to!string(c.front.dup), "\""); setValueString("single_directory", configFileSingleDirectory); } else if (key == "azure_ad_endpoint") { switch (value) { case "": addLogEntry("Using default config option for Global Azure AD Endpoints"); break; case "USL4": addLogEntry("Using config option for Azure AD for US Government Endpoints"); break; case "USL5": addLogEntry("Using config option for Azure AD for US Government Endpoints (DOD)"); break; case "DE": addLogEntry("Using config option for Azure AD Germany"); break; case "CN": addLogEntry("Using config option for Azure AD China operated by VNET"); break; default: addLogEntry("Unknown Azure AD Endpoint - using Global Azure AD Endpoints"); } } else if (key == "transfer_order") { switch (value) { case "size_asc": addLogEntry("Files will be transferred sorted by ascending size (smallest first)"); break; case "size_dsc": addLogEntry("Files will be transferred sorted by descending size (largest first)"); break; case "name_asc": addLogEntry("Files will be transferred sorted by ascending name (A -> Z)"); break; case "name_dsc": addLogEntry("Files will be transferred sorted by descending name (Z -> A)"); break; default: addLogEntry("Files will be transferred in original order that they were received (FIFO)"); } } else if (key == "application_id") { string tempApplicationId = strip(value); if (tempApplicationId.empty) { addLogEntry("Invalid value for key in config file - using default value: " ~ key); if (debugLogging) {addLogEntry("application_id in config file cannot be empty - using default application_id", ["debug"]);} setValueString("application_id", defaultApplicationId); } } else if (key == "drive_id") { string tempDriveId = strip(value); if (tempDriveId.empty) { addLogEntry(); addLogEntry("Invalid value for key in config file: " ~ key); if (debugLogging) {addLogEntry("drive_id in config file cannot be empty - this is a fatal error and must be corrected by removing this entry from your config file.", ["debug"]);} addLogEntry(); forceExit(); } else { configFileDriveId = tempDriveId; } } else if (key == "log_dir") { string tempLogDir = strip(value); if (tempLogDir.empty) { addLogEntry("Invalid value for key in config file - using default value: " ~ key); if (debugLogging) {addLogEntry("log_dir in config file cannot be empty - using default log_dir", ["debug"]);} setValueString("log_dir", defaultLogFileDir); } } } else if (key in longValues) { ulong thisConfigValue; try { thisConfigValue = to!ulong(c.front.dup); } catch (std.conv.ConvException) { addLogEntry("Invalid value for key in config file: " ~ key); return false; } setValueLong(key, thisConfigValue); if (key == "monitor_interval") { // if key is 'monitor_interval' the value must be 300 or greater ulong tempValue = thisConfigValue; // the temp value needs to be 300 or greater if (tempValue < defaultMonitorInterval) { addLogEntry("Invalid value for key in config file - using default value: " ~ key); tempValue = defaultMonitorInterval; } setValueLong("monitor_interval", tempValue); } else if (key == "monitor_fullscan_frequency") { // if key is 'monitor_fullscan_frequency' the value must be 12 or greater ulong tempValue = thisConfigValue; // the temp value needs to be 12 or greater if (tempValue < 12) { // If this is not set to zero (0) then we are not disabling 'monitor_fullscan_frequency' if (tempValue != 0) { // invalid value addLogEntry("Invalid value for key in config file - using default value: " ~ key); tempValue = 12; } } setValueLong("monitor_fullscan_frequency", tempValue); } else if (key == "space_reservation") { // if key is 'space_reservation' we have to calculate MB -> bytes ulong tempValue = thisConfigValue; // a value of 0 needs to be made at least 1MB .. if (tempValue == 0) { addLogEntry("Invalid value for key in config file - using 1MB: " ~ key); tempValue = 1; } setValueLong("space_reservation", tempValue * 2^^20); } else if (key == "ip_protocol_version") { ulong tempValue = thisConfigValue; if (tempValue > 2) { addLogEntry("Invalid value for key in config file - using default value: " ~ key); tempValue = defaultIpProtocol; } setValueLong("ip_protocol_version", tempValue); } else if (key == "threads") { ulong tempValue = thisConfigValue; if (tempValue > 16) { addLogEntry("Invalid value for key in config file - using default value: " ~ key); tempValue = defaultConcurrentThreads; } setValueLong("threads", tempValue); } else if (key == "inotify_delay") { ulong tempValue = thisConfigValue; if ((tempValue < 5)||(tempValue > 15)) { addLogEntry("Invalid value for key in config file - using default value: " ~ key); tempValue = defaultInotifyDelay; } setValueLong("inotify_delay", tempValue); } else if (key == "skip_size") { // Flag this for triggering --resync requirement configFileSkipSize = true; ulong tempValue = thisConfigValue; // If set, this must be greater than 0 if (tempValue <= 0) { addLogEntry("Invalid value for key in config file - using default value: " ~ key); tempValue = 0; } setValueLong("skip_size", tempValue); } else if (key == "file_fragment_size") { ulong tempValue = thisConfigValue; // If set, this must be greater than the default, but also aligning to Microsoft upper limit of 60 MiB // Enforce lower bound (must be greater than default) if (tempValue < defaultFileFragmentSize) { addLogEntry("Invalid value for key in config file (too low) - using default value: " ~ key); tempValue = defaultFileFragmentSize; } // Enforce upper bound (safe maximum) else if (tempValue > defaultMaxFileFragmentSize) { addLogEntry("Invalid value for key in config file (too high) - using maximum safe value: " ~ key); tempValue = defaultMaxFileFragmentSize; } setValueLong("file_fragment_size", tempValue); } } else { addLogEntry("Unknown key in config file: " ~ key); return false; } } // If we read in 'skip_file' from the 'config' file, this will be 'true' if (configFileSkipFileReadIn) { // The user added entries, are the application defaults included or were these discarded / discounted? // Check for temporary and/or transient files to skip (application defaults) checkForSkipFileDefaults(); } // Return that we were able to read in the config file and parse the options without issue return true; } // Perform a check on 'skip_file' configuration post reading from 'config' file void checkForSkipFileDefaults() { // Split both the default and user values auto defaultEntries = defaultSkipFile.split('|').map!(a => a.strip).array; auto userEntries = configFileSkipFile.split('|').map!(a => a.strip).array; string[] missingDefaults; // Check if all defaults exist in user config foreach (defaultEntry; defaultEntries) { if (!userEntries.canFind(defaultEntry)) { missingDefaults ~= defaultEntry; } } // Display warning message about missing default entries for temporary and/or transient files that should be skipped if (!missingDefaults.empty) { addLogEntry(); addLogEntry("WARNING: Your 'skip_file' configuration is missing important default entries. Temporary and/or transient files that would normally be skipped may now be included in syncing.", ["info", "notify"]); addLogEntry(); if (verboseLogging) { addLogEntry("By default, the following types of temporary and/or transient files are skipped:", ["verbose"]); addLogEntry(" Files that start with '~' (Temporary or backup files that are not intended to be saved permanently)", ["verbose"]); addLogEntry(" Files that start with '.~' (e.g., LibreOffice lock files)", ["verbose"]); addLogEntry(" Files that end with '.tmp' (Generic temporary files created by applications like browsers, editors, installers)", ["verbose"]); addLogEntry(" Files that end with '.swp' (Transient files created by editors such as vim and vi)", ["verbose"]); addLogEntry(" Files that end with '.partial' (Partially downloaded files, incomplete by nature, should not be synced)", ["verbose"]); addLogEntry(); addLogEntry(" Missing the following important 'skip_file' entries: " ~ missingDefaults.join(", "), ["verbose"]); addLogEntry(); addLogEntry("Reference: https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md#skip_file", ["verbose"]); addLogEntry(); } } } // Update the application configuration based on CLI passed in parameters void updateFromArgs(string[] cliArgs) { // Add additional CLI options that are NOT configurable via config file stringValues["create_directory"] = ""; stringValues["create_share_link"] = ""; stringValues["destination_directory"] = ""; stringValues["get_file_link"] = ""; stringValues["modified_by"] = ""; stringValues["sharepoint_library_name"] = ""; stringValues["remove_directory"] = ""; stringValues["single_directory"] = ""; stringValues["source_directory"] = ""; stringValues["auth_files"] = ""; stringValues["auth_response"] = ""; stringValues["share_password"] = ""; stringValues["download_single_file"] = ""; boolValues["display_config"] = false; boolValues["display_sync_status"] = false; boolValues["display_quota"] = false; boolValues["print_token"] = false; boolValues["logout"] = false; boolValues["reauth"] = false; boolValues["monitor"] = false; boolValues["synchronize"] = false; boolValues["force"] = false; boolValues["list_business_shared_items"] = false; boolValues["sync_business_shared_files"] = false; boolValues["force_sync"] = false; boolValues["with_editing_perms"] = false; // Specific options for CLI input handling stringValues["sync_dir_cli"] = ""; // Application Startup option validation try { string tmpStr; bool tmpBol; long tmpVerb; // duplicated from main.d to get full help output! auto opt = getopt( cliArgs, std.getopt.config.bundling, std.getopt.config.caseSensitive, "auth-files", "Perform authentication via files rather than an interactive dialogue. The application reads/writes the required values from/to the specified files", &stringValues["auth_files"], "auth-response", "Perform authentication via a supplied response URL rather than an interactive dialogue", &stringValues["auth_response"], "check-for-nomount", "Check for the presence of .nosync in the syncdir root. If found, do not perform sync", &boolValues["check_nomount"], "check-for-nosync", "Check for the presence of .nosync in each directory. If found, skip directory from sync", &boolValues["check_nosync"], "classify-as-big-delete", "Number of children in a path that is locally removed which will be classified as a 'big data delete'", &longValues["classify_as_big_delete"], "cleanup-local-files", "Clean up additional local files when using --download-only. This will remove local data", &boolValues["cleanup_local_files"], "create-directory", "Create a directory on OneDrive. No synchronisation will be performed", &stringValues["create_directory"], "create-share-link", "Create a shareable link for an existing file on OneDrive", &stringValues["create_share_link"], "debug-https", "Debug OneDrive HTTPS communication.", &boolValues["debug_https"], "destination-directory", "Destination directory for renamed or moved items on OneDrive. No synchronisation will be performed", &stringValues["destination_directory"], "disable-notifications", "Do not use desktop notifications in monitor mode", &boolValues["disable_notifications"], "disable-download-validation", "Disable download validation when downloading from OneDrive", &boolValues["disable_download_validation"], "disable-upload-validation", "Disable upload validation when uploading to OneDrive", &boolValues["disable_upload_validation"], "display-config", "Display what options the client will use as currently configured. No synchronisation will be performed", &boolValues["display_config"], "display-running-config", "Display what options the client has been configured to use on application startup", &boolValues["display_running_config"], "display-sync-status", "Display the sync status of the client. No synchronisation will be performed", &boolValues["display_sync_status"], "display-quota", "Display the quota status of the client. No synchronisation will be performed", &boolValues["display_quota"], "download-only", "Replicate the OneDrive online state locally, by only downloading changes from OneDrive. Do not upload local changes to OneDrive", &boolValues["download_only"], "download-file", "Download a single file from Microsoft OneDrive", &stringValues["download_single_file"], "dry-run", "Perform a trial sync with no changes made", &boolValues["dry_run"], "enable-logging", "Enable client activity to a separate log file", &boolValues["enable_logging"], "file-fragment-size", "Specify the file fragment size for large file uploads (in MB)", &longValues["file_fragment_size"], "force-http-11", "Force the use of HTTP 1.1 for all operations", &boolValues["force_http_11"], "force", "Force the deletion of data when a 'big delete' is detected", &boolValues["force"], "force-sync", "Force a synchronisation of a specific folder, only when using --sync --single-directory and ignore all non-default skip_dir and skip_file rules", &boolValues["force_sync"], "get-file-link", "Display the file link of a synced file", &stringValues["get_file_link"], "get-sharepoint-drive-id", "Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library", &stringValues["sharepoint_library_name"], "get-O365-drive-id", "Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library (DEPRECATED)", &stringValues["sharepoint_library_name"], "list-shared-items", "List OneDrive Business Shared Items", &boolValues["list_business_shared_items"], "sync-shared-files", "Sync OneDrive Business Shared Files to the local filesystem", &boolValues["sync_business_shared_files"], "local-first", "Synchronise from the local directory source first, before downloading changes from OneDrive", &boolValues["local_first"], "log-dir", "Directory where logging output is saved to, needs to end with a slash", &stringValues["log_dir"], "logout", "Log out the current user", &boolValues["logout"], "modified-by", "Display the last modified by details of a given path", &stringValues["modified_by"], "monitor|m", "Keep monitoring for local and remote changes", &boolValues["monitor"], "monitor-interval", "Number of seconds by which each sync operation is undertaken when idle under monitor mode", &longValues["monitor_interval"], "monitor-fullscan-frequency", "Number of sync runs before performing a full local scan of the synced directory", &longValues["monitor_fullscan_frequency"], "monitor-log-frequency", "Frequency of logging in monitor mode", &longValues["monitor_log_frequency"], "no-remote-delete", "Do not delete local file 'deletes' from OneDrive when using --upload-only", &boolValues["no_remote_delete"], "print-access-token", "Print the access token, useful for debugging", &boolValues["print_token"], "reauth", "Reauthenticate the client with OneDrive", &boolValues["reauth"], "resync", "Forget the last saved state, perform a full sync", &boolValues["resync"], "resync-auth", "Approve the use of performing a --resync action", &boolValues["resync_auth"], "remove-directory", "Remove a directory on OneDrive. No synchronisation will be performed", &stringValues["remove_directory"], "remove-source-files", "Remove source file after successful transfer to OneDrive when using --upload-only", &boolValues["remove_source_files"], "remove-source-folders", "Remove the local directory structure post successful file transfer to Microsoft OneDrive when using --upload-only --remove-source-files", &boolValues["remove_source_folders"], "single-directory", "Specify a single local directory within the OneDrive root to sync", &stringValues["single_directory"], "skip-dot-files", "Skip dot files and folders from syncing", &boolValues["skip_dotfiles"], "skip-file", "Skip any files that match this pattern from syncing", &stringValues["skip_file"], "skip-dir", "Skip any directories that match this pattern from syncing", &stringValues["skip_dir"], "skip-size", "Skip new files larger than this size (in MB)", &longValues["skip_size"], "skip-dir-strict-match", "When matching skip_dir directories, only match explicit matches", &boolValues["skip_dir_strict_match"], "skip-symlinks", "Skip syncing of symlinks", &boolValues["skip_symlinks"], "source-directory", "Source directory to rename or move on OneDrive. No synchronisation will be performed", &stringValues["source_directory"], "space-reservation", "The amount of disk space to reserve (in MB) to avoid 100% disk space utilisation", &longValues["space_reservation"], "syncdir", "Specify the local directory used for synchronisation to OneDrive", &stringValues["sync_dir_cli"], "share-password", "Require a password to access the shared link when used with --create-share-link ", &stringValues["share_password"], "sync|s", "Perform a synchronisation with Microsoft OneDrive", &boolValues["synchronize"], "synchronize", "Perform a synchronisation with Microsoft OneDrive (DEPRECATED)", &boolValues["synchronize"], "sync-root-files", "Sync all files in sync_dir root when using sync_list", &boolValues["sync_root_files"], "threads", "Specify a value for the number of worker threads used for parallel upload and download operations", &longValues["threads"], "upload-only", "Replicate the locally configured sync_dir state to OneDrive, by only uploading local changes to OneDrive. Do not download changes from OneDrive", &boolValues["upload_only"], "confdir", "Set the directory used to store the configuration files", &tmpStr, "verbose|v+", "Print more details, useful for debugging (repeat for extra debugging)", &tmpVerb, "version", "Print the version and exit", &tmpBol, "with-editing-perms", "Create a read-write shareable link for an existing file on OneDrive when used with --create-share-link ", &boolValues["with_editing_perms"] ); // Was --syncdir specified? if (!getValueString("sync_dir_cli").empty) { // Build the line we need to update and/or write out string newConfigOptionSyncDirLine = "sync_dir = \"" ~ getValueString("sync_dir_cli") ~ "\""; // Does a 'config' file exist? if (!exists(applicableConfigFilePath)) { // No existing 'config' file exists, create it, and write the 'sync_dir' configuration to it if (!getValueBool("dry_run")) { std.file.write(applicableConfigFilePath, newConfigOptionSyncDirLine); // Config file should only be readable by the user who created it - 0600 permissions needed applicableConfigFilePath.setAttributes(convertedPermissionValue); } } else { // an existing config file exists .. so this now becomes tricky // string replace 'sync_dir' if it exists, in the existing 'config' file, but only if 'sync_dir' (already read in) is different from 'sync_dir_cli' if ( (getValueString("sync_dir")) != (getValueString("sync_dir_cli")) ) { // values are different File applicableConfigFilePathFileHandle = File(applicableConfigFilePath, "r"); string lineBuffer; string[] newConfigFileEntries; // read applicableConfigFilePath line by line auto range = applicableConfigFilePathFileHandle.byLine(); // for each 'config' file line foreach (line; range) { lineBuffer = stripLeft(line).to!string; if (lineBuffer.length == 0 || lineBuffer[0] == ';' || lineBuffer[0] == '#') { newConfigFileEntries ~= [lineBuffer]; } else { auto c = lineBuffer.matchFirst(configRegex); if (!c.empty) { c.popFront(); // skip the whole match string key = c.front.dup; if (key == "sync_dir") { // lineBuffer is the line we want to keep newConfigFileEntries ~= [newConfigOptionSyncDirLine]; } else { newConfigFileEntries ~= [lineBuffer]; } } } } // close original 'config' file if still open if (applicableConfigFilePathFileHandle.isOpen()) { // close open file applicableConfigFilePathFileHandle.close(); } // free memory from file open object.destroy(applicableConfigFilePathFileHandle); // Update the existing item in the file line array if (!getValueBool("dry_run")) { // Open the file with write access using 'w' mode to overwrite existing content File applicableConfigFilePathFileHandleWrite = File(applicableConfigFilePath, "w"); // Write each line from the 'newConfigFileEntries' array to the file foreach (line; newConfigFileEntries) { applicableConfigFilePathFileHandleWrite.writeln(line); } // Is this a running as a container if (entrypointExists) { // write this to the config file so that when config options are checked again, this matches on next run applicableConfigFilePathFileHandleWrite.writeln(newConfigOptionSyncDirLine); } // Flush and close the file handle to ensure all data is written if (applicableConfigFilePathFileHandleWrite.isOpen()) { applicableConfigFilePathFileHandleWrite.flush(); applicableConfigFilePathFileHandleWrite.close(); } // free memory from file open object.destroy(applicableConfigFilePathFileHandleWrite); } } } // Final - configure sync_dir with the value of sync_dir_cli so that it can be used as part of the application configuration and detect change setValueString("sync_dir", getValueString("sync_dir_cli")); } // Was --monitor-interval specified and now set to a value below minimum requirement? if (getValueLong("monitor_interval") < defaultMonitorInterval ) { addLogEntry("Invalid value for --monitor-interval - using default value: " ~ to!string(defaultMonitorInterval)); setValueLong("monitor_interval", defaultMonitorInterval); } // Was --file-fragment-size specified and now set to a value below or above maximum? // Enforce lower bound (must be greater than default) for 'file_fragment_size' if (getValueLong("file_fragment_size") < defaultFileFragmentSize) { addLogEntry("Invalid value for --file-fragment-size (too low) - using default value: " ~ to!string(defaultFileFragmentSize)); setValueLong("file_fragment_size", defaultFileFragmentSize); } // Enforce upper bound (safe maximum) for 'file_fragment_size' if (getValueLong("file_fragment_size") > defaultMaxFileFragmentSize) { addLogEntry("Invalid value for --file-fragment-size (too high) - using maximum safe value: " ~ to!string(defaultMaxFileFragmentSize)); setValueLong("file_fragment_size", defaultMaxFileFragmentSize); } // Was --auth-files used? if (!getValueString("auth_files").empty) { // --auth-files used, need to validate that '~' was not used as a path identifier, and if yes, perform the correct expansion string[] tempAuthFiles = getValueString("auth_files").split(":"); string tempAuthUrl = tempAuthFiles[0]; string tempResponseUrl = tempAuthFiles[1]; string newAuthFilesString; // shell expansion if required if (!shellEnvironmentSet){ // No shell environment is set, no automatic expansion of '~' if present is possible // Does the 'currently configured' tempAuthUrl include a ~ if (canFind(tempAuthUrl, "~")) { // A ~ was found in auth_files(authURL) if (debugLogging) {addLogEntry("auth_files: A '~' was found in 'auth_files(authURL)', using the calculated 'homePath' to replace '~' as no SHELL or USER environment variable set", ["debug"]);} tempAuthUrl = buildNormalizedPath(buildPath(defaultHomePath, strip(tempAuthUrl, "~"))); } // Does the 'currently configured' tempAuthUrl include a ~ if (canFind(tempResponseUrl, "~")) { // A ~ was found in auth_files(authURL) if (debugLogging) {addLogEntry("auth_files: A '~' was found in 'auth_files(tempResponseUrl)', using the calculated 'homePath' to replace '~' as no SHELL or USER environment variable set", ["debug"]);} tempResponseUrl = buildNormalizedPath(buildPath(defaultHomePath, strip(tempResponseUrl, "~"))); } } else { // Shell environment is set, automatic expansion of '~' if present is possible // Does the 'currently configured' tempAuthUrl include a ~ if (canFind(tempAuthUrl, "~")) { // A ~ was found in auth_files(authURL) if (debugLogging) {addLogEntry("auth_files: A '~' was found in the configured 'auth_files(authURL)', automatically expanding as SHELL and USER environment variable is set", ["debug"]);} tempAuthUrl = expandTilde(tempAuthUrl); } // Does the 'currently configured' tempAuthUrl include a ~ if (canFind(tempResponseUrl, "~")) { // A ~ was found in auth_files(authURL) if (debugLogging) {addLogEntry("auth_files: A '~' was found in the configured 'auth_files(tempResponseUrl)', automatically expanding as SHELL and USER environment variable is set", ["debug"]);} tempResponseUrl = expandTilde(tempResponseUrl); } } // Build new string newAuthFilesString = tempAuthUrl ~ ":" ~ tempResponseUrl; if (debugLogging) {addLogEntry("auth_files - updated value: " ~ newAuthFilesString, ["debug"]);} setValueString("auth_files", newAuthFilesString); } if (opt.helpWanted) { outputLongHelp(opt.options); // Shutdown logging, which also flushes all logging buffers shutdownLogging(); // Exit as successful exit(EXIT_SUCCESS); } } catch (GetOptException e) { // getOpt error - must use writeln() here writeln(e.msg); writeln("Try 'onedrive -h' for more information"); // Shutdown logging, which also flushes all logging buffers shutdownLogging(); // Exit as failure exit(EXIT_FAILURE); } catch (Exception e) { // general error - must use writeln() here writeln(e.msg); writeln("Try 'onedrive -h' for more information"); // Shutdown logging, which also flushes all logging buffers shutdownLogging(); // Exit as failure exit(EXIT_FAILURE); } } // Check the arguments passed in for any that will be deprecated void checkDeprecatedOptions(string[] cliArgs) { bool deprecatedCommandsFound = false; foreach (cliArg; cliArgs) { // Check each CLI arg for items that have been deprecated // --synchronize deprecated in v2.5.0, will be removed in future version if (cliArg == "--synchronize") { addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering addLogEntry("DEPRECIATION WARNING: --synchronize has been deprecated in favour of --sync or -s"); deprecatedCommandsFound = true; } // --get-O365-drive-id deprecated in v2.5.0, will be removed in future version if (cliArg == "--get-O365-drive-id") { addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering addLogEntry("DEPRECIATION WARNING: --get-O365-drive-id has been deprecated in favour of --get-sharepoint-drive-id"); deprecatedCommandsFound = true; } } if (deprecatedCommandsFound) { addLogEntry("DEPRECIATION WARNING: Deprecated commands will be removed in a future release."); addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering } } // Display the applicable application configuration void displayApplicationConfiguration() { if (getValueBool("display_running_config")) { addLogEntry("--------------- Application Runtime Configuration ---------------"); } // Display application version addLogEntry("Application version = " ~ applicationVersion); addLogEntry("Compiled with = " ~ compilerDetails()); addLogEntry("Curl version = " ~ getCurlVersionString()); // Display all of the pertinent configuration options addLogEntry("User Application Config path = " ~ configDirName); addLogEntry("System Application Config path = " ~ systemConfigDirName); // Does a config file exist or are we using application defaults addLogEntry("Applicable Application 'config' location = " ~ applicableConfigFilePath); string configFileStatusMessage; if (exists(applicableConfigFilePath)) { configFileStatusMessage = "true - using 'config' file values to override application defaults"; } else { configFileStatusMessage = "false - using application defaults"; } addLogEntry("Configuration file found in config location = " ~ configFileStatusMessage); // Display where various files should live // - items.sqlite3 // - sync_list // If using the 'system' directory, (/etc/onedrive) for the config file, these should always live in the 'users' home directory addLogEntry("Applicable 'sync_list' location = " ~ syncListFilePath); addLogEntry("Applicable 'items.sqlite3' location = " ~ databaseFilePath); // Is config option drive_id configured? addLogEntry("Config option 'drive_id' = " ~ getValueString("drive_id")); // Config Options as per 'config' file addLogEntry("Config option 'sync_dir' = " ~ getValueString("sync_dir")); // authentication addLogEntry("Config option 'use_intune_sso' = " ~ to!string(getValueBool("use_intune_sso"))); addLogEntry("Config option 'use_device_auth' = " ~ to!string(getValueBool("use_device_auth"))); // logging and notifications addLogEntry("Config option 'enable_logging' = " ~ to!string(getValueBool("enable_logging"))); addLogEntry("Config option 'log_dir' = " ~ getValueString("log_dir")); addLogEntry("Config option 'disable_notifications' = " ~ to!string(getValueBool("disable_notifications"))); // skip files and directory and 'matching' policy addLogEntry("Config option 'skip_dir' = " ~ getValueString("skip_dir")); addLogEntry("Config option 'skip_dir_strict_match' = " ~ to!string(getValueBool("skip_dir_strict_match"))); addLogEntry("Config option 'skip_file' = " ~ getValueString("skip_file")); addLogEntry("Config option 'skip_dotfiles' = " ~ to!string(getValueBool("skip_dotfiles"))); addLogEntry("Config option 'skip_symlinks' = " ~ to!string(getValueBool("skip_symlinks"))); addLogEntry("Config option 'skip_size' = " ~ to!string(getValueLong("skip_size"))); // --monitor sync process options addLogEntry("Config option 'monitor_interval' = " ~ to!string(getValueLong("monitor_interval"))); addLogEntry("Config option 'monitor_log_frequency' = " ~ to!string(getValueLong("monitor_log_frequency"))); addLogEntry("Config option 'monitor_fullscan_frequency' = " ~ to!string(getValueLong("monitor_fullscan_frequency"))); addLogEntry("Config option 'disable_websocket_support' = " ~ to!string(getValueBool("disable_websocket_support"))); // sync process and method addLogEntry("Config option 'read_only_auth_scope' = " ~ to!string(getValueBool("read_only_auth_scope"))); addLogEntry("Config option 'dry_run' = " ~ to!string(getValueBool("dry_run"))); addLogEntry("Config option 'upload_only' = " ~ to!string(getValueBool("upload_only"))); addLogEntry("Config option 'download_only' = " ~ to!string(getValueBool("download_only"))); addLogEntry("Config option 'local_first' = " ~ to!string(getValueBool("local_first"))); addLogEntry("Config option 'check_nosync' = " ~ to!string(getValueBool("check_nosync"))); addLogEntry("Config option 'check_nomount' = " ~ to!string(getValueBool("check_nomount"))); addLogEntry("Config option 'resync' = " ~ to!string(getValueBool("resync"))); addLogEntry("Config option 'resync_auth' = " ~ to!string(getValueBool("resync_auth"))); addLogEntry("Config option 'cleanup_local_files' = " ~ to!string(getValueBool("cleanup_local_files"))); addLogEntry("Config option 'disable_permission_set' = " ~ to!string(getValueBool("disable_permission_set"))); addLogEntry("Config option 'transfer_order' = " ~ getValueString("transfer_order")); addLogEntry("Config option 'delay_inotify_processing' = " ~ to!string(getValueBool("delay_inotify_processing"))); addLogEntry("Config option 'inotify_delay' = " ~ to!string(getValueLong("inotify_delay"))); addLogEntry("Config option 'display_transfer_metrics' = " ~ to!string(getValueBool("display_transfer_metrics"))); addLogEntry("Config option 'force_session_upload' = " ~ to!string(getValueBool("force_session_upload"))); addLogEntry("Config option 'file_fragment_size' = " ~ to!string(getValueLong("file_fragment_size"))); // data integrity addLogEntry("Config option 'classify_as_big_delete' = " ~ to!string(getValueLong("classify_as_big_delete"))); addLogEntry("Config option 'disable_upload_validation' = " ~ to!string(getValueBool("disable_upload_validation"))); addLogEntry("Config option 'disable_download_validation' = " ~ to!string(getValueBool("disable_download_validation"))); addLogEntry("Config option 'bypass_data_preservation' = " ~ to!string(getValueBool("bypass_data_preservation"))); addLogEntry("Config option 'no_remote_delete' = " ~ to!string(getValueBool("no_remote_delete"))); addLogEntry("Config option 'remove_source_files' = " ~ to!string(getValueBool("remove_source_files"))); addLogEntry("Config option 'sync_dir_permissions' = " ~ to!string(getValueLong("sync_dir_permissions"))); addLogEntry("Config option 'sync_file_permissions' = " ~ to!string(getValueLong("sync_file_permissions"))); addLogEntry("Config option 'space_reservation' = " ~ to!string(getValueLong("space_reservation"))); addLogEntry("Config option 'permanent_delete' = " ~ to!string(getValueBool("permanent_delete"))); addLogEntry("Config option 'write_xattr_data' = " ~ to!string(getValueBool("write_xattr_data"))); addLogEntry("Config option 'create_new_file_version' = " ~ to!string(getValueBool("create_new_file_version"))); // curl operations addLogEntry("Config option 'application_id' = " ~ getValueString("application_id")); addLogEntry("Config option 'azure_ad_endpoint' = " ~ getValueString("azure_ad_endpoint")); addLogEntry("Config option 'azure_tenant_id' = " ~ getValueString("azure_tenant_id")); addLogEntry("Config option 'user_agent' = " ~ getValueString("user_agent")); addLogEntry("Config option 'force_http_11' = " ~ to!string(getValueBool("force_http_11"))); addLogEntry("Config option 'debug_https' = " ~ to!string(getValueBool("debug_https"))); addLogEntry("Config option 'rate_limit' = " ~ to!string(getValueLong("rate_limit"))); addLogEntry("Config option 'operation_timeout' = " ~ to!string(getValueLong("operation_timeout"))); addLogEntry("Config option 'dns_timeout' = " ~ to!string(getValueLong("dns_timeout"))); addLogEntry("Config option 'connect_timeout' = " ~ to!string(getValueLong("connect_timeout"))); addLogEntry("Config option 'data_timeout' = " ~ to!string(getValueLong("data_timeout"))); addLogEntry("Config option 'ip_protocol_version' = " ~ to!string(getValueLong("ip_protocol_version"))); addLogEntry("Config option 'threads' = " ~ to!string(getValueLong("threads"))); addLogEntry("Config option 'max_curl_idle' = " ~ to!string(getValueLong("max_curl_idle"))); // GUI notifications version(Notifications) { addLogEntry("Environment var 'XDG_RUNTIME_DIR' = " ~ to!string(xdg_exists)); addLogEntry("Environment var 'DBUS_SESSION_BUS_ADDRESS' = " ~ to!string(dbus_exists)); addLogEntry("Config option 'notify_file_actions' = " ~ to!string(getValueBool("notify_file_actions"))); } else { addLogEntry("Compile time option --enable-notifications = false"); } // Recycle Bin addLogEntry("Config option 'use_recycle_bin' = " ~ to!string(getValueBool("use_recycle_bin"))); addLogEntry("Config option 'recycle_bin_path' = " ~ getValueString("recycle_bin_path")); // Is sync_list configured and contains entries? if (exists(syncListFilePath) && getSize(syncListFilePath) > 0) { addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering addLogEntry("Selective sync 'sync_list' configured = true"); addLogEntry("sync_list config option 'sync_root_files' = " ~ to!string(getValueBool("sync_root_files"))); addLogEntry("sync_list contents:"); // Output the sync_list contents auto syncListFile = File(syncListFilePath, "r"); auto range = syncListFile.byLine(); addLogEntry("------------------------------'sync_list'------------------------------"); foreach (line; range) { addLogEntry(to!string(line)); } addLogEntry("-----------------------------------------------------------------------"); // Close reading the 'sync_list' file syncListFile.close(); } else { // file does not exist or file size is not greater than 0 addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering if (exists(syncListFilePath) && getSize(syncListFilePath) == 0) { // 'sync_list' file exists, no entries addLogEntry("Selective sync 'sync_list' configured = file exists but contains zero data"); } else { // no 'sync_list' file addLogEntry("Selective sync 'sync_list' configured = false"); } } // Is sync_business_shared_items enabled and configured ? addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering addLogEntry("Config option 'sync_business_shared_items' = " ~ to!string(getValueBool("sync_business_shared_items"))); if (getValueBool("sync_business_shared_items")) { // display what the shared files directory will be addLogEntry("Config option 'Shared Files Directory' = " ~ configuredBusinessSharedFilesDirectoryName); } // Are webhooks enabled? addLogEntry(); // used instead of an empty 'writeln();' to ensure the line break is correct in the buffered console output ordering addLogEntry("Config option 'webhook_enabled' = " ~ to!string(getValueBool("webhook_enabled"))); if (getValueBool("webhook_enabled")) { addLogEntry("Config option 'webhook_public_url' = " ~ getValueString("webhook_public_url")); addLogEntry("Config option 'webhook_listening_host' = " ~ getValueString("webhook_listening_host")); addLogEntry("Config option 'webhook_listening_port' = " ~ to!string(getValueLong("webhook_listening_port"))); addLogEntry("Config option 'webhook_expiration_interval' = " ~ to!string(getValueLong("webhook_expiration_interval"))); addLogEntry("Config option 'webhook_renewal_interval' = " ~ to!string(getValueLong("webhook_renewal_interval"))); addLogEntry("Config option 'webhook_retry_interval' = " ~ to!string(getValueLong("webhook_retry_interval"))); } if (getValueBool("display_running_config")) { addLogEntry(); addLogEntry("--------------------DEVELOPER_OPTIONS----------------------------"); addLogEntry("Config option 'force_children_scan' = " ~ to!string(getValueBool("force_children_scan"))); addLogEntry(); } if (getValueBool("display_running_config")) { addLogEntry("-----------------------------------------------------------------"); } } // Prompt the user to accept the risk of using --resync bool displayResyncRiskForAcceptance() { // what is the user risk acceptance? bool userRiskAcceptance = false; // Did the user use --resync-auth or 'resync_auth' in the config file to negate presenting this message? if (!getValueBool("resync_auth")) { // need to prompt user char response; // --resync warning message addLogEntry("", ["consoleOnly"]); // new line, console only addLogEntry("WARNING: You have asked the client to perform a --resync operation.", ["consoleOnly"]); addLogEntry("", ["consoleOnly"]); addLogEntry(" This operation will delete the client’s local state database and rebuild it entirely from the current online OneDrive state.", ["consoleOnly"]); addLogEntry("", ["consoleOnly"]); addLogEntry(" Because the previous sync state will no longer be available, the following may occur:", ["consoleOnly"]); addLogEntry(" * Local files that also exist in OneDrive may have local changes overwritten by the cloud version if a conflict cannot be safely resolved.", ["consoleOnly"]); addLogEntry(" * Local files may be renamed or duplicated locally as part of conflict resolution and data-preservation handling.", ["consoleOnly"]); addLogEntry(" * The initial synchronisation pass may involve a large number of file uploads and downloads.", ["consoleOnly"]); addLogEntry(" * The increased activity against the Microsoft Graph API may trigger HTTP 429 (throttling) responses during the synchronisation process.", ["consoleOnly"]); addLogEntry("", ["consoleOnly"]); addLogEntry(" For safest operation:", ["consoleOnly"]); addLogEntry(" * Ensure you have a current backup of your sync_dir.", ["consoleOnly"]); addLogEntry(" * Run this command first with --dry-run to confirm all planned actions.", ["consoleOnly"]); addLogEntry(" * Enable 'use_recycle_bin' so that online deletion events from OneDrive are moved to your system Trash rather than deleted from your local disk.", ["consoleOnly"]); addLogEntry("", ["consoleOnly"]); addLogEntry("If in doubt, stop now and back up your local data before continuing.", ["consoleOnly"]); addLogEntry("", ["consoleOnly"]); addLogEntry("Are you sure you wish to proceed with --resync? [Y/N] ", ["consoleOnlyNoNewLine"]); try { // Attempt to read user response string input = readln().strip; if (input.length > 0) { response = std.ascii.toUpper(input[0]); } } catch (std.format.FormatException e) { userRiskAcceptance = false; // Caught an error return EXIT_FAILURE; } // What did the user enter? if (debugLogging) {addLogEntry("--resync warning User Response Entered: " ~ to!string(response), ["debug"]);} // Evaluate user response if ((to!string(response) == "y") || (to!string(response) == "Y")) { // User has accepted --resync risk to proceed userRiskAcceptance = true; // Are you sure you wish .. does not use writeln(); write("\n"); } } else { // resync_auth is true userRiskAcceptance = true; } // Return the --resync acceptance or not return userRiskAcceptance; } // Prompt the user to accept the risk of using --force-sync bool displayForceSyncRiskForAcceptance() { // what is the user risk acceptance? bool userRiskAcceptance = false; // need to prompt user char response; // --force-sync warning message addLogEntry("", ["consoleOnly"]); // new line, console only addLogEntry("The use of --force-sync will reconfigure the application to use defaults. This may have untold and unknown future impacts.", ["consoleOnly"]); addLogEntry("By proceeding in using this option you accept any impacts including any data loss that may occur as a result of using --force-sync.", ["consoleOnly"]); addLogEntry("", ["consoleOnly"]); // new line, console only addLogEntry("Are you sure you wish to proceed with --force-sync [Y/N] ", ["consoleOnlyNoNewLine"]); try { // Attempt to read user response string input = readln().strip; if (input.length > 0) { response = std.ascii.toUpper(input[0]); } } catch (std.format.FormatException e) { userRiskAcceptance = false; // Caught an error return EXIT_FAILURE; } // What did the user enter? if (debugLogging) {addLogEntry("--force-sync warning User Response Entered: " ~ to!string(response), ["debug"]);} // Evaluate user response if ((to!string(response) == "y") || (to!string(response) == "Y")) { // User has accepted --force-sync risk to proceed userRiskAcceptance = true; // Are you sure you wish .. does not use writeln(); write("\n"); } // Return the --resync acceptance or not return userRiskAcceptance; } // Check the application configuration for any changes that need to trigger a --resync // This function is only called if --resync is not present bool applicationChangeWhereResyncRequired() { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Default is that no resync is required bool resyncRequired = false; // Consolidate the flags for different configuration changes bool[11] configOptionsDifferent; // Handle multiple entries of skip_file string backupConfigFileSkipFile; // Handle multiple entries of skip_dir string backupConfigFileSkipDir; // Create and read the required initial hash files createRequiredInitialConfigurationHashFiles(); // Read in the existing hash file values readExistingConfigurationHashFiles(); // can we read the backup config file bool failedToReadBackupConfig = false; // Helper lambda for logging and setting the difference flag auto logAndSetDifference = (string message, size_t index) { if (debugLogging) {addLogEntry(message, ["debug"]);} configOptionsDifferent[index] = true; }; // Check for changes in the sync_list and business_shared_items files if (currentSyncListHash != previousSyncListHash) logAndSetDifference("sync_list file has been updated, --resync needed", 0); // Check for updates in the config file if (currentConfigHash != previousConfigHash) { addLogEntry("Application configuration file has been updated, checking if --resync needed"); if (debugLogging) {addLogEntry("Using this configBackupFile: " ~ configBackupFile, ["debug"]);} if (exists(configBackupFile)) { string[string] backupConfigStringValues; backupConfigStringValues["check_nosync"] = ""; backupConfigStringValues["drive_id"] = ""; backupConfigStringValues["sync_dir"] = ""; backupConfigStringValues["skip_file"] = ""; backupConfigStringValues["skip_dir"] = ""; backupConfigStringValues["skip_dotfiles"] = ""; backupConfigStringValues["skip_size"] = ""; backupConfigStringValues["skip_symlinks"] = ""; backupConfigStringValues["sync_business_shared_items"] = ""; bool check_nosync_present = false; bool drive_id_present = false; bool sync_dir_present = false; bool skip_file_present = false; bool skip_dir_present = false; bool skip_dotfiles_present = false; bool skip_size_present = false; bool skip_symlinks_present = false; bool sync_business_shared_items_present = false; string configOptionModifiedMessage = " was modified since the last time the application was successfully run, --resync required"; File configBackupFileHandle; try { configBackupFileHandle = File(configBackupFile, "r"); } catch (FileException e) { // filesystem error failedToReadBackupConfig = true; displayFileSystemErrorMessage(e.msg, thisFunctionName, configBackupFile, FsErrorSeverity.warning); } catch (std.exception.ErrnoException e) { // filesystem error failedToReadBackupConfig = true; displayFileSystemErrorMessage(e.msg, thisFunctionName, configBackupFile, FsErrorSeverity.warning); } scope(exit) { if (configBackupFileHandle.isOpen()) { configBackupFileHandle.close(); } } if (!failedToReadBackupConfig) { // backup config file was able to be read string lineBuffer; auto range = configBackupFileHandle.byLine(); foreach (line; range) { lineBuffer = stripLeft(line).to!string; if (lineBuffer.length == 0 || lineBuffer[0] == ';' || lineBuffer[0] == '#') continue; auto c = lineBuffer.matchFirst(configRegex); if (!c.empty) { c.popFront(); // skip the whole match string key = c.front.dup; if (debugLogging) {addLogEntry("Backup Config Key: " ~ key, ["debug"]);} auto p = key in backupConfigStringValues; if (p) { c.popFront(); string value = c.front.dup; // Compare each key value with current config if (key == "drive_id") { drive_id_present = true; if (value != getValueString("drive_id")) { logAndSetDifference(key ~ configOptionModifiedMessage, 2); } } if (key == "sync_dir") { sync_dir_present = true; if (value != getValueString("sync_dir")) { logAndSetDifference(key ~ configOptionModifiedMessage, 3); } } // skip_file handling if (key == "skip_file") { skip_file_present = true; // Merge safely, removing empty entries and de-duplicating backupConfigFileSkipFile = mergePipeDelimitedRulesDedup(backupConfigFileSkipFile, to!string(c.front.dup)); } // skip_dir handling if (key == "skip_dir") { skip_dir_present = true; // Merge safely, removing empty entries and de-duplicating backupConfigFileSkipDir = mergePipeDelimitedRulesDedup(backupConfigFileSkipDir, to!string(c.front.dup)); } if (key == "skip_dotfiles") { skip_dotfiles_present = true; if (value != to!string(getValueBool("skip_dotfiles"))) { logAndSetDifference(key ~ configOptionModifiedMessage, 6); } } if (key == "skip_symlinks") { skip_symlinks_present = true; if (value != to!string(getValueBool("skip_symlinks"))) { logAndSetDifference(key ~ configOptionModifiedMessage, 7); } } if (key == "sync_business_shared_items") { sync_business_shared_items_present = true; if (value != to!string(getValueBool("sync_business_shared_items"))) { logAndSetDifference(key ~ configOptionModifiedMessage, 8); } } } } } // Debug logging if (debugLogging) { addLogEntry("skip_file in actual config = " ~ to!string(configFileSkipFileReadIn), ["debug"]); addLogEntry("skip_file in backup config = " ~ to!string(skip_file_present), ["debug"]); addLogEntry("defaultSkipFile value = " ~ to!string(defaultSkipFile), ["debug"]); addLogEntry("configFileSkipFile value = " ~ to!string(configFileSkipFile), ["debug"]); addLogEntry("backupConfigFileSkipFile value = " ~ to!string(backupConfigFileSkipFile), ["debug"]); } // skip_file can be specified multiple times if (skip_file_present && backupConfigFileSkipFile != configFileSkipFile) logAndSetDifference("skip_file" ~ configOptionModifiedMessage, 4); // skip_file can also be an empty string, thus when removed, as an empty string, we are going back to application defaults if (skip_file_present && backupConfigFileSkipFile != defaultSkipFile) logAndSetDifference("skip_file" ~ configOptionModifiedMessage, 4); // skip_dir can be specified multiple times if (skip_dir_present && backupConfigFileSkipDir != configFileSkipDir) logAndSetDifference("skip_dir" ~ configOptionModifiedMessage, 5); // Check for newly added configuration options to the 'config' file vs being present in the 'backup' config file if (!drive_id_present && configFileDriveId != "") logAndSetDifference("drive_id newly added ... --resync needed", 2); if (!sync_dir_present && configFileSyncDir != defaultSyncDir) logAndSetDifference("sync_dir newly added ... --resync needed", 3); if (configFileSkipFileReadIn) { // We actually read a 'skip_file' configuration line from the 'config' file if (!skip_file_present && configFileSkipFile != defaultSkipFile) logAndSetDifference("skip_file newly added ... --resync needed", 4); } // Other options if (!skip_dir_present && configFileSkipDir != "") logAndSetDifference("skip_dir newly added ... --resync needed", 5); if (!skip_dotfiles_present && configFileSkipDotfiles) logAndSetDifference("skip_dotfiles newly added ... --resync needed", 6); if (!skip_symlinks_present && configFileSkipSymbolicLinks) logAndSetDifference("skip_symlinks newly added ... --resync needed", 7); if (!sync_business_shared_items_present && configFileSyncBusinessSharedItems) logAndSetDifference("sync_business_shared_items newly added ... --resync needed", 8); if (!check_nosync_present && configFileCheckNoSync) logAndSetDifference("check_nosync newly added ... --resync needed", 9); if (!skip_size_present && configFileSkipSize) logAndSetDifference("skip_size newly added ... --resync needed", 10); } else { // failed to read backup config file addLogEntry("WARNING: unable to read backup config, unable to validate if any changes made"); } } else { addLogEntry("WARNING: no backup config file was found, unable to validate if any changes made"); } } // config file set options can be changed via CLI input, specifically these will impact sync and a --resync will be needed: // --syncdir ARG // --skip-file ARG // --skip-dir ARG // --skip-dot-files // --skip-symlinks // --check-for-nosync // --skip-size ARG // Check CLI options if (exists(applicableConfigFilePath)) { if (configFileSyncDir != "" && configFileSyncDir != getValueString("sync_dir")) { // config file was set and CLI input changed this // Is this potentially running as a Docker container? if (entrypointExists) { // entrypoint.sh exists if (debugLogging) {addLogEntry("sync_dir: CLI override of config file option, however entrypoint.sh exists, thus most likely running as a container", ["debug"]);} } else { // Not a Docker container, raise that --resync needed due to configuration change logAndSetDifference("sync_dir: CLI override of config file option, --resync needed", 3); } } if (configFileSkipFile != "" && configFileSkipFile != getValueString("skip_file")) logAndSetDifference("skip_file: CLI override of config file option, --resync needed", 4); if (configFileSkipDir != "" && configFileSkipDir != getValueString("skip_dir")) logAndSetDifference("skip_dir: CLI override of config file option, --resync needed", 5); if (!configFileSkipDotfiles && getValueBool("skip_dotfiles")) logAndSetDifference("skip_dotfiles: CLI override of config file option, --resync needed", 6); if (!configFileSkipSymbolicLinks && getValueBool("skip_symlinks")) logAndSetDifference("skip_symlinks: CLI override of config file option, --resync needed", 7); if (!configFileCheckNoSync && getValueBool("check_nosync")) logAndSetDifference("check_nosync: CLI override of config file option, --resync needed", 9); if (!configFileSkipSize && (getValueLong("skip_size") > 0)) logAndSetDifference("skip_size: CLI override of config file option, --resync needed", 10); } // Aggregate the result to determine if a resync is required if (!failedToReadBackupConfig) { foreach (optionDifferent; configOptionsDifferent) { if (optionDifferent) { resyncRequired = true; break; } } } // Final override // In certain situations, regardless of config 'resync' needed status, ignore this so that the application can display 'non-syncable' information // Options that should now be looked at are: // --list-shared-items if (getValueBool("list_business_shared_items")) resyncRequired = false; // Return the calculated boolean return resyncRequired; } // Cleanup hash files that require to be cleaned up when a --resync is issued void cleanupHashFilesDueToResync() { if (!getValueBool("dry_run")) { // cleanup hash files if (debugLogging) {addLogEntry("Cleaning up configuration hash files", ["debug"]);} safeRemove(configHashFile); safeRemove(syncListHashFile); } else { // --dry-run scenario ... technically we should not be making any local file changes ....... addLogEntry("DRY-RUN: Not removing hash files as --dry-run has been used"); } } // For each of the config files, update the hash data in the hash files void updateHashContentsForConfigFiles() { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Are we in a --dry-run scenario? if (!getValueBool("dry_run")) { // Not a dry-run scenario, update the applicable files // Update applicable 'config' files if (exists(applicableConfigFilePath)) { // Update the hash of the applicable config file if (debugLogging) {addLogEntry("Updating applicable config file hash", ["debug"]);} try { std.file.write(configHashFile, computeQuickXorHash(applicableConfigFilePath)); // Hash file should only be readable by the user who created it - 0600 permissions needed configHashFile.setAttributes(convertedPermissionValue); } catch (FileException e) { // filesystem error displayFileSystemErrorMessage(e.msg, thisFunctionName, configHashFile, FsErrorSeverity.warning); } } // Update 'sync_list' files if (exists(syncListFilePath)) { // update sync_list hash if (debugLogging) {addLogEntry("Updating sync_list hash", ["debug"]);} try { std.file.write(syncListHashFile, computeQuickXorHash(syncListFilePath)); // Hash file should only be readable by the user who created it - 0600 permissions needed syncListHashFile.setAttributes(convertedPermissionValue); } catch (FileException e) { // filesystem error displayFileSystemErrorMessage(e.msg, thisFunctionName, syncListHashFile, FsErrorSeverity.warning); } } } else { // --dry-run scenario ... technically we should not be making any local file changes ....... addLogEntry("DRY-RUN: Not updating hash files as --dry-run has been used"); } } // Create any required hash files for files that help us determine if the configuration has changed since last run void createRequiredInitialConfigurationHashFiles() { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Does a 'config' file exist with a valid hash file if (exists(applicableConfigFilePath)) { if (!exists(configHashFile)) { // no existing hash file exists try { std.file.write(configHashFile, "initial-hash"); // Hash file should only be readable by the user who created it - 0600 permissions needed configHashFile.setAttributes(convertedPermissionValue); } catch (FileException e) { // filesystem error displayFileSystemErrorMessage(e.msg, thisFunctionName, configHashFile, FsErrorSeverity.warning); } } // Generate the runtime hash for the 'config' file currentConfigHash = computeQuickXorHash(applicableConfigFilePath); } // Does a 'sync_list' file exist with a valid hash file if (exists(syncListFilePath)) { if (!exists(syncListHashFile)) { // no existing hash file exists try { std.file.write(syncListHashFile, "initial-hash"); // Hash file should only be readable by the user who created it - 0600 permissions needed syncListHashFile.setAttributes(convertedPermissionValue); } catch (FileException e) { // filesystem error displayFileSystemErrorMessage(e.msg, thisFunctionName, syncListHashFile, FsErrorSeverity.warning); } } // Generate the runtime hash for the 'sync_list' file currentSyncListHash = computeQuickXorHash(syncListFilePath); } } // Read in the text values of the previous configurations int readExistingConfigurationHashFiles() { if (exists(configHashFile)) { try { previousConfigHash = readText(configHashFile); } catch (std.file.FileException e) { // Unable to access required hash file addLogEntry("ERROR: Unable to access " ~ e.msg); // Use exit scopes to shutdown API return EXIT_FAILURE; } } if (exists(syncListHashFile)) { try { previousSyncListHash = readText(syncListHashFile); } catch (std.file.FileException e) { // Unable to access required hash file addLogEntry("ERROR: Unable to access " ~ e.msg); // Use exit scopes to shutdown API return EXIT_FAILURE; } } return 0; } // Check for basic option conflicts - flags that should not be used together and/or flag combinations that conflict with each other bool checkForBasicOptionConflicts() { bool operationalConflictDetected = false; // What are the permission that have been set for the application? // These are relevant for: // - The ~/OneDrive parent folder or 'sync_dir' configured item // - Any new folder created under ~/OneDrive or 'sync_dir' // - Any new file created under ~/OneDrive or 'sync_dir' // valid permissions are 000 -> 777 - anything else is invalid long syncDirPermissions = getValueLong("sync_dir_permissions"); long syncFilePermissions = getValueLong("sync_file_permissions"); bool invalidPermissions = false; // Check 'sync_dir_permissions' if (syncDirPermissions < 0 || syncDirPermissions > 777) { addLogEntry("ERROR: Invalid 'User|Group|Other' permissions set for 'sync_dir_permissions' within your config file. Please check your configuration"); invalidPermissions = true; } // Check 'sync_file_permissions' if (syncFilePermissions < 0 || syncFilePermissions > 777) { addLogEntry("ERROR: Invalid 'User|Group|Other' permissions set for 'sync_file_permissions' within your config file. Please check your configuration"); invalidPermissions = true; } // Invalid permissions detected? if (invalidPermissions) { operationalConflictDetected = true; } else { // Debug log output what permissions are being set to if (debugLogging) {addLogEntry("Configuring default new folder permissions as: " ~ to!string(getValueLong("sync_dir_permissions")), ["debug"]);} configureRequiredDirectoryPermissions(); if (debugLogging) {addLogEntry("Configuring default new file permissions as: " ~ to!string(getValueLong("sync_file_permissions")), ["debug"]);} configureRequiredFilePermissions(); } // --upload-only and --download-only cannot be used together if ((getValueBool("upload_only")) && (getValueBool("download_only"))) { addLogEntry("ERROR: --upload-only and --download-only cannot be used together. Use one, not both at the same time"); operationalConflictDetected = true; } // --sync and --monitor cannot be used together if ((getValueBool("synchronize")) && (getValueBool("monitor"))) { addLogEntry("ERROR: --sync and --monitor cannot be used together. Only use one of these options, not both at the same time"); operationalConflictDetected = true; } // --no-remote-delete can ONLY be enabled when --upload-only is used if ((getValueBool("no_remote_delete")) && (!getValueBool("upload_only"))) { addLogEntry("ERROR: --no-remote-delete can only be used with --upload-only"); operationalConflictDetected = true; } // --remove-source-files can ONLY be enabled when --upload-only is used if ((getValueBool("remove_source_files")) && (!getValueBool("upload_only"))) { addLogEntry("ERROR: --remove-source-files can only be used with --upload-only"); operationalConflictDetected = true; } // --cleanup-local-files can ONLY be enabled when --download-only is used if ((getValueBool("cleanup_local_files")) && (!getValueBool("download_only"))) { addLogEntry("ERROR: --cleanup-local-files can only be used with --download-only"); operationalConflictDetected = true; } // --list-shared-folders cannot be used with --resync and/or --resync-auth if ((getValueBool("list_business_shared_items")) && ((getValueBool("resync")) || (getValueBool("resync_auth")))) { addLogEntry("ERROR: --list-shared-items cannot be used with --resync or --resync-auth"); operationalConflictDetected = true; } // --list-shared-folders cannot be used with --sync or --monitor if ((getValueBool("list_business_shared_items")) && ((getValueBool("synchronize")) || (getValueBool("monitor")))) { addLogEntry("ERROR: --list-shared-items cannot be used with --sync or --monitor"); operationalConflictDetected = true; } // --sync-shared-files can ONLY be used with sync_business_shared_items if ((getValueBool("sync_business_shared_files")) && (!getValueBool("sync_business_shared_items"))) { addLogEntry("ERROR: The --sync-shared-files option can only be utilised if the 'sync_business_shared_items' configuration setting is enabled."); operationalConflictDetected = true; } // --display-sync-status cannot be used with --resync and/or --resync-auth if ((getValueBool("display_sync_status")) && ((getValueBool("resync")) || (getValueBool("resync_auth")))) { addLogEntry("ERROR: --display-sync-status cannot be used with --resync or --resync-auth"); operationalConflictDetected = true; } // --modified-by cannot be used with --resync and/or --resync-auth if ((!getValueString("modified_by").empty) && ((getValueBool("resync")) || (getValueBool("resync_auth")))) { addLogEntry("ERROR: --modified-by cannot be used with --resync or --resync-auth"); operationalConflictDetected = true; } // --get-file-link cannot be used with --resync and/or --resync-auth if ((!getValueString("get_file_link").empty) && ((getValueBool("resync")) || (getValueBool("resync_auth")))) { addLogEntry("ERROR: --get-file-link cannot be used with --resync or --resync-auth"); operationalConflictDetected = true; } // --create-share-link cannot be used with --resync and/or --resync-auth if ((!getValueString("create_share_link").empty) && ((getValueBool("resync")) || (getValueBool("resync_auth")))) { addLogEntry("ERROR: --create-share-link cannot be used with --resync or --resync-auth"); operationalConflictDetected = true; } // --get-sharepoint-drive-id cannot be used with --resync and/or --resync-auth if ((!getValueString("sharepoint_library_name").empty) && ((getValueBool("resync")) || (getValueBool("resync_auth")))) { addLogEntry("ERROR: --get-sharepoint-drive-id cannot be used with --resync or --resync-auth"); operationalConflictDetected = true; } // --monitor and --display-sync-status cannot be used together if ((getValueBool("monitor")) && (getValueBool("display_sync_status"))) { addLogEntry("ERROR: --monitor and --display-sync-status cannot be used together"); operationalConflictDetected = true; } // --sync and --display-sync-status cannot be used together if ((getValueBool("synchronize")) && (getValueBool("display_sync_status"))) { addLogEntry("ERROR: --sync and --display-sync-status cannot be used together"); operationalConflictDetected = true; } // --monitor and --display-quota cannot be used together if ((getValueBool("monitor")) && (getValueBool("display_quota"))) { addLogEntry("ERROR: --monitor and --display-quota cannot be used together"); operationalConflictDetected = true; } // --sync and --display-quota cannot be used together if ((getValueBool("synchronize")) && (getValueBool("display_quota"))) { addLogEntry("ERROR: --sync and --display-quota cannot be used together"); operationalConflictDetected = true; } // --force-sync can only be used when using --sync and --single-directory if (getValueBool("force_sync")) { bool conflict = false; // Should not be used with --monitor if (getValueBool("monitor")) conflict = true; // single_directory must not be empty if (getValueString("single_directory").empty) conflict = true; if (conflict) { addLogEntry("ERROR: --force-sync can only be used with --sync --single-directory"); operationalConflictDetected = true; } } // When using 'azure_ad_endpoint', 'azure_tenant_id' cannot be empty if ((!getValueString("azure_ad_endpoint").empty) && (getValueString("azure_tenant_id").empty)) { addLogEntry("ERROR: config option 'azure_tenant_id' cannot be empty when 'azure_ad_endpoint' is configured"); operationalConflictDetected = true; } // When using --enable-logging the 'log_dir' cannot be empty if ((getValueBool("enable_logging")) && (getValueString("log_dir").empty)) { addLogEntry("ERROR: config option 'log_dir' cannot be empty when 'enable_logging' is configured"); operationalConflictDetected = true; } // When using --syncdir, the value cannot be empty. if (strip(getValueString("sync_dir")).empty) { addLogEntry("ERROR: --syncdir value cannot be empty"); operationalConflictDetected = true; } // --monitor and --create-directory cannot be used together if ((getValueBool("monitor")) && (!getValueString("create_directory").empty)) { addLogEntry("ERROR: --monitor and --create-directory cannot be used together"); operationalConflictDetected = true; } // --sync and --create-directory cannot be used together if ((getValueBool("synchronize")) && (!getValueString("create_directory").empty)) { addLogEntry("ERROR: --sync and --create-directory cannot be used together"); operationalConflictDetected = true; } // --monitor and --remove-directory cannot be used together if ((getValueBool("monitor")) && (!getValueString("remove_directory").empty)) { addLogEntry("ERROR: --monitor and --remove-directory cannot be used together"); operationalConflictDetected = true; } // --sync and --remove-directory cannot be used together if ((getValueBool("synchronize")) && (!getValueString("remove_directory").empty)) { addLogEntry("ERROR: --sync and --remove-directory cannot be used together"); operationalConflictDetected = true; } // --monitor and --source-directory cannot be used together if ((getValueBool("monitor")) && (!getValueString("source_directory").empty)) { addLogEntry("ERROR: --monitor and --source-directory cannot be used together"); operationalConflictDetected = true; } // --sync and --source-directory cannot be used together if ((getValueBool("synchronize")) && (!getValueString("source_directory").empty)) { addLogEntry("ERROR: --sync and --source-directory cannot be used together"); operationalConflictDetected = true; } // --monitor and --destination-directory cannot be used together if ((getValueBool("monitor")) && (!getValueString("destination_directory").empty)) { addLogEntry("ERROR: --monitor and --destination-directory cannot be used together"); operationalConflictDetected = true; } // --sync and --destination-directory cannot be used together if ((getValueBool("synchronize")) && (!getValueString("destination_directory").empty)) { addLogEntry("ERROR: --sync and --destination-directory cannot be used together"); operationalConflictDetected = true; } // --download-only and --local-first cannot be used together if ((getValueBool("download_only")) && (getValueBool("local_first"))) { addLogEntry("ERROR: --download-only cannot be used with --local-first"); operationalConflictDetected = true; } // Test that '--modified-by ' has a valid argument and not another directive if (getValueString("modified_by") != "") { // Does the string start with '--' ? if (getValueString("modified_by").startsWith("--")) { addLogEntry("ERROR: --modified-by missing a valid entry"); operationalConflictDetected = true; } } // Test that '--get-file-link ' has a valid argument and not another directive if (getValueString("get_file_link") != "") { // Does the string start with '--' ? if (getValueString("get_file_link").startsWith("--")) { addLogEntry("ERROR: --get-file-link missing a valid entry"); operationalConflictDetected = true; } } // Test that '--create-share-link ' has a valid argument and not another directive if (getValueString("create_share_link") != "") { // Does the string start with '--' ? if (getValueString("create_share_link").startsWith("--")) { addLogEntry("ERROR: --create-share-link missing a valid entry"); operationalConflictDetected = true; } } // Test that '--create-directory ' has a valid argument and not another directive if (getValueString("create_directory") != "") { // Does the string start with '--' ? if (getValueString("create_directory").startsWith("--")) { addLogEntry("ERROR: --create-directory missing a valid entry"); operationalConflictDetected = true; } } // Test that '--remove-directory ' has a valid argument and not another directive if (getValueString("remove_directory") != "") { // Does the string start with '--' ? if (getValueString("remove_directory").startsWith("--")) { addLogEntry("ERROR: --remove-directory missing a valid entry"); operationalConflictDetected = true; } } // Test that '--source-directory ' has a valid argument and not another directive if (getValueString("source_directory") != "") { // Does the string start with '--' ? if (getValueString("source_directory").startsWith("--")) { addLogEntry("ERROR: --source-directory missing a valid entry"); operationalConflictDetected = true; } } // Test that '--destination-directory ' has a valid argument and not another directive if (getValueString("destination_directory") != "") { // Does the string start with '--' ? if (getValueString("destination_directory").startsWith("--")) { addLogEntry("ERROR: --destination-directory missing a valid entry"); operationalConflictDetected = true; } } // 'use_intune_sso' and 'use_device_auth' cannot be used together if ((getValueBool("use_intune_sso")) && (getValueBool("use_device_auth"))) { addLogEntry("ERROR: 'use_intune_sso' and 'use_device_auth' cannot be used together"); operationalConflictDetected = true; } // --force and --resync cannot be used together as --resync blows away the database, thus there is no way to calculate large local deletes if ((getValueBool("force")) && (getValueBool("resync"))) { addLogEntry("ERROR: --force and --resync cannot be used together as there is zero way to determine that a big delete has occurred"); operationalConflictDetected = true; } // Return bool value indicating if we have an operational conflict return operationalConflictDetected; } // Reset skip_file and skip_dir to application defaults when --force-sync is used void resetSkipToDefaults() { // skip_file if (debugLogging) { addLogEntry("original skip_file: " ~ getValueString("skip_file"), ["debug"]); addLogEntry("resetting skip_file to application defaults", ["debug"]); } setValueString("skip_file", defaultSkipFile); if (debugLogging) {addLogEntry("reset skip_file: " ~ getValueString("skip_file"), ["debug"]);} // skip_dir if (debugLogging) { addLogEntry("original skip_dir: " ~ getValueString("skip_dir"), ["debug"]); addLogEntry("resetting skip_dir to application defaults", ["debug"]); } setValueString("skip_dir", defaultSkipDir); if (debugLogging) {addLogEntry("reset skip_dir: " ~ getValueString("skip_dir"), ["debug"]);} } // Initialise the correct 'sync_dir' expanding any '~' if present string initialiseRuntimeSyncDirectory() { // Log what we are doing if (debugLogging) {addLogEntry("sync_dir: Setting runtimeSyncDirectory from config value 'sync_dir'", ["debug"]);} if (!shellEnvironmentSet){ if (debugLogging) {addLogEntry("sync_dir: No SHELL or USER environment variable configuration detected", ["debug"]);} // No shell or user set, so expandTilde() will fail - usually headless system running under init.d / systemd or potentially Docker // Does the 'currently configured' sync_dir include a ~ if (canFind(getValueString("sync_dir"), "~")) { // A ~ was found in sync_dir if (debugLogging) {addLogEntry("sync_dir: A '~' was found in 'sync_dir', using the calculated 'homePath' to replace '~' as no SHELL or USER environment variable set", ["debug"]);} runtimeSyncDirectory = buildNormalizedPath(buildPath(defaultHomePath, strip(getValueString("sync_dir"), "~"))); } else { // No ~ found in sync_dir, use as is if (debugLogging) {addLogEntry("sync_dir: Using configured 'sync_dir' path as-is as no SHELL or USER environment variable configuration detected", ["debug"]);} runtimeSyncDirectory = getValueString("sync_dir"); } } else { // A shell and user environment variable is set, expand any ~ as this will be expanded correctly if present if (canFind(getValueString("sync_dir"), "~")) { if (debugLogging) {addLogEntry("sync_dir: A '~' was found in the configured 'sync_dir', automatically expanding as SHELL and USER environment variable is set", ["debug"]);} runtimeSyncDirectory = expandTilde(getValueString("sync_dir")); } else { // No ~ found in sync_dir, does the path begin with a '/' ? if (debugLogging) {addLogEntry("sync_dir: Using configured 'sync_dir' path as-is as however SHELL or USER environment variable configuration detected - should be placed in USER home directory", ["debug"]);} if (!startsWith(getValueString("sync_dir"), "/")) { if (debugLogging) {addLogEntry("Configured 'sync_dir' does not start with a '/' or '~/' - adjusting configured 'sync_dir' to use User Home Directory as base for 'sync_dir' path", ["debug"]);} string updatedPathWithHome = "~/" ~ getValueString("sync_dir"); runtimeSyncDirectory = expandTilde(updatedPathWithHome); } else { if (debugLogging) {addLogEntry("use 'sync_dir' as is - no touch", ["debug"]);} runtimeSyncDirectory = getValueString("sync_dir"); } } } // What will runtimeSyncDirectory be actually set to? if (debugLogging) {addLogEntry("sync_dir: runtimeSyncDirectory set to: " ~ runtimeSyncDirectory, ["debug"]);} // Configure configuredBusinessSharedFilesDirectoryName configuredBusinessSharedFilesDirectoryName = buildNormalizedPath(buildPath(runtimeSyncDirectory, defaultBusinessSharedFilesDirectoryName)); return runtimeSyncDirectory; } // Initialise the correct 'log_dir' when application logging to a separate file is enabled with 'enable_logging' and expanding any '~' if present string calculateLogDirectory() { string configuredLogDirPath; if (debugLogging) {addLogEntry("log_dir: Setting runtime application log from config value 'log_dir'", ["debug"]);} if (getValueString("log_dir") != defaultLogFileDir) { // User modified 'log_dir' to be used with 'enable_logging' // if 'log_dir' contains a '~' this needs to be expanded correctly if (canFind(getValueString("log_dir"), "~")) { // ~ needs to be expanded correctly if (!shellEnvironmentSet) { // No shell or user environment variable set, so expandTilde() will fail - usually headless system running under init.d / systemd or potentially Docker if (debugLogging) {addLogEntry("log_dir: A '~' was found in 'log_dir' however '~' as no SHELL or USER environment variable set", ["debug"]);} configuredLogDirPath = buildNormalizedPath(buildPath(defaultHomePath, strip(getValueString("log_dir"), "~"))); } else { // We have a SHELL or USER environment variable set, so expandTilde() should work correctly if (debugLogging) {addLogEntry("log_dir: A '~' was found in the configured 'log_dir', automatically expanding as SHELL and USER environment variable is set", ["debug"]);} configuredLogDirPath = buildNormalizedPath(expandTilde(getValueString("log_dir"))); } } else { // No '~' present - use as-is, but normalise configuredLogDirPath = buildNormalizedPath(getValueString("log_dir")); } } else { // Default 'log_dir' to be used with 'enable_logging' configuredLogDirPath = defaultLogFileDir; } // Attempt to create 'configuredLogDirPath' if this does not exist, otherwise we need to fall back to the users home directory if (!exists(configuredLogDirPath)) { // 'configuredLogDirPath' path does not exist - try and create it try { mkdirRecurse(configuredLogDirPath); } catch (std.file.FileException e) { // We got an error when attempting to create the directory .. addLogEntry(); addLogEntry("ERROR: Unable to create " ~ configuredLogDirPath); addLogEntry("ERROR: Please manually create '" ~ configuredLogDirPath ~ "' and ensure that the permissions allow write access for your user to this location."); addLogEntry("ERROR: The requested client activity log will instead be located in your users home directory"); addLogEntry(); // Reconfigure 'configuredLogDirPath' to use environment.get("HOME") value, which we have already calculated configuredLogDirPath = defaultHomePath; } } // Verify that we can actually write in configuredLogDirPath // If we cannot, fall back to the user's home directory instead of later crashing try { auto testFile = buildNormalizedPath(buildPath(configuredLogDirPath, ".onedrive_log_write_test")); // Try to append a zero-length string – this will create the file if possible std.file.append(testFile, ""); // Clean up the test file std.file.remove(testFile); } catch (std.file.FileException e) { addLogEntry(); addLogEntry("ERROR: Unable to write to " ~ configuredLogDirPath); addLogEntry("ERROR: Please manually adjust permissions or choose a different 'log_dir' in the configuration file."); addLogEntry("ERROR: The requested client activity log will instead be located in your users home directory"); addLogEntry(); // Reconfigure 'configuredLogDirPath' to use environment.get("HOME") value, which we have already calculated configuredLogDirPath = defaultHomePath; } // Return the initialised application log path return configuredLogDirPath; } // What IP protocol is going to be used to access Microsoft OneDrive void displayIPProtocol() { if (getValueLong("ip_protocol_version") == 0) addLogEntry("Using IPv4 and IPv6 (if configured) for all network operations"); if (getValueLong("ip_protocol_version") == 1) addLogEntry("Forcing client to use IPv4 connections only"); if (getValueLong("ip_protocol_version") == 2) addLogEntry("Forcing client to use IPv6 connections only"); } // Has a 'no-sync' task been requested? bool hasNoSyncOperationBeenRequested() { // Are we performing some sort of 'no-sync' task? // - Are we performing a logout? // - Are we performing a reauth? // - Are we obtaining the Office 365 Drive ID for a given Office 365 SharePoint Shared Library? // - Are we displaying the sync status? // - Are we getting the URL for a file online? // - Are we listing who modified a file last online? // - Are we listing OneDrive Business Shared Items? // - Are we creating a shareable link for an existing file on OneDrive? // - Are we just creating a directory online, without any sync being performed? // - Are we just deleting a directory online, without any sync being performed? // - Are we renaming or moving a directory? // - Are we displaying the quota information? // - Are we downloading a single file? bool noSyncOperation = false; // Return a true|false if any of these have been set, so that we use the 'dry-run' DB copy, to execute these tasks, in case the client is currently operational // --logout if (getValueBool("logout")) { // flag that a no sync operation has been requested noSyncOperation = true; } // --reauth if (getValueBool("reauth")) { // flag that a no sync operation has been requested noSyncOperation = true; } // --get-sharepoint-drive-id - Get the SharePoint Library drive_id if (getValueString("sharepoint_library_name") != "") { // flag that a no sync operation has been requested noSyncOperation = true; } // --display-sync-status - Query the sync status if (getValueBool("display_sync_status")) { // flag that a no sync operation has been requested noSyncOperation = true; } // --get-file-link - Get the URL path for a synced file? if (getValueString("get_file_link") != "") { // flag that a no sync operation has been requested noSyncOperation = true; } // --modified-by - Are we listing the modified-by details of a provided path? if (getValueString("modified_by") != "") { // flag that a no sync operation has been requested noSyncOperation = true; } // --list-shared-items - Are we listing OneDrive Business Shared Items if (getValueBool("list_business_shared_items")) { // flag that a no sync operation has been requested noSyncOperation = true; } // --create-share-link - Are we creating a shareable link for an existing file on OneDrive? if (getValueString("create_share_link") != "") { // flag that a no sync operation has been requested noSyncOperation = true; } // --create-directory - Are we just creating a directory online, without any sync being performed? if ((getValueString("create_directory") != "")) { // flag that a no sync operation has been requested noSyncOperation = true; } // --remove-directory - Are we just deleting a directory online, without any sync being performed? if ((getValueString("remove_directory") != "")) { // flag that a no sync operation has been requested noSyncOperation = true; } // Are we renaming or moving a directory online? // onedrive --source-directory 'path/as/source/' --destination-directory 'path/as/destination' if ((getValueString("source_directory") != "") && (getValueString("destination_directory") != "")) { // flag that a no sync operation has been requested noSyncOperation = true; } // Are we displaying the quota information? if (getValueBool("display_quota")) { // flag that a no sync operation has been requested noSyncOperation = true; } // Are we downloading a single file? if ((getValueString("download_single_file") != "")) { // flag that a no sync operation has been requested noSyncOperation = true; } // Return result return noSyncOperation; } // Are the required GUI logging environment variables for this user available? // Specifically these must be available: // - XDG_RUNTIME_DIR // - DBUS_SESSION_BUS_ADDRESS bool validateGUINotificationEnvironmentVariables() { bool variablesAvailable = false; string xdg_value; string dbus_value; version(Notifications) { // Check XDG_RUNTIME_DIR environment variable try { xdg_value = environment["XDG_RUNTIME_DIR"]; xdg_exists = true; } catch (Exception e) { xdg_exists = false; } // Check DBUS_SESSION_BUS_ADDRESS environment variable try { dbus_value = environment["DBUS_SESSION_BUS_ADDRESS"]; dbus_exists = true; } catch (Exception e) { dbus_exists = false; } // Output the result if (xdg_exists) { if (debugLogging) {addLogEntry("runtime_environment: XDG_RUNTIME_DIR exists with value: " ~ xdg_value , ["debug"]);} } else { if (debugLogging) {addLogEntry("runtime_environment: XDG_RUNTIME_DIR missing from runtime user environment", ["debug"]);} } if (dbus_exists) { if (debugLogging) {addLogEntry("runtime_environment: DBUS_SESSION_BUS_ADDRESS exists with value: " ~ dbus_value, ["debug"]);} } else { if (debugLogging) {addLogEntry("runtime_environment: DBUS_SESSION_BUS_ADDRESS missing from runtime user environment", ["debug"]);} } // Determine result if (xdg_exists && dbus_exists) { variablesAvailable = true; } else { addLogEntry("WARNING: Required environment variables required to enable GUI Notifications are not present"); variablesAvailable = false; } } // Return result return variablesAvailable; } // Set the Recycle Bin Paths void setRecycleBinPaths() { string configured = getValueString("recycle_bin_path"); string basePath; string dirSeparatorString = "/"; // Handle the "no shell / no user" case similarly to sync_dir if (!shellEnvironmentSet) { // No SHELL or USER means expandTilde() will fail if '~' is present if (canFind(configured, "~")) { // Replace '~' with defaultHomePath explicitly basePath = buildNormalizedPath( buildPath(defaultHomePath, strip(configured, "~")) ); } else { basePath = configured; } } else { // Normal case: shell + user are set; we can rely on expandTilde() if (canFind(configured, "~")) { basePath = expandTilde(configured); } else { basePath = configured; } } // Make sure it's normalised and has a trailing '/' basePath = buildNormalizedPath(basePath); if (!basePath.endsWith(dirSeparatorString)) { basePath ~= dirSeparatorString; } // Update Recycle Bin paths recycleBinParentPath = basePath; recycleBinFilePath = basePath ~ "files" ~ dirSeparatorString; recycleBinInfoPath = basePath ~ "info" ~ dirSeparatorString; } // Is 'recycleBinParentPath' a child path of the configured 'runtimeSyncDirectory'? bool checkRecycleBinPathAsChildOfSyncDir() { // Configure the variables to check string syncRoot = runtimeSyncDirectory; string recycleBin = recycleBinParentPath; string sep = "/"; // Make prefix check robust – ensure syncRoot ends with separator if (!syncRoot.endsWith(sep)) { syncRoot ~= sep; } // Make prefix check robust – ensure recycleBin ends with separator if (!recycleBin.endsWith(sep)) { recycleBin ~= sep; } // Perform the check and return the evaluation return startsWith(recycleBin, syncRoot); } // Is the client running under a GUI session? // - GNOME // - KDE bool isGuiSessionDetected() { bool hasDisplay = false; bool hasRuntime = false; bool uidMatches = false; bool homeOK = false; string xdgType; try { xdgType = environment.get("XDG_SESSION_TYPE", ""); } catch (Exception e) { xdgType = ""; } try { hasDisplay = environment.get("WAYLAND_DISPLAY", "").length > 0 || environment.get("DISPLAY", "").length > 0; } catch (Exception e) { hasDisplay = false; } try { hasRuntime = environment.get("XDG_RUNTIME_DIR", "").length > 0; } catch (Exception e) { hasRuntime = false; } try { uidMatches = (geteuid() == getuid()); } catch (Exception e) { uidMatches = false; } try { homeOK = environment.get("HOME", "").length > 0; } catch (Exception e) { homeOK = false; } bool hasGuiElements = hasDisplay || (xdgType == "wayland" || xdgType == "x11"); return hasGuiElements && hasRuntime && uidMatches && homeOK; } // Attempt to detect the running display manager DesktopHints detectDesktop() { string all = ( environment.get("XDG_CURRENT_DESKTOP","") ~ ":" ~ environment.get("XDG_SESSION_DESKTOP","") ~ ":" ~ environment.get("DESKTOP_SESSION","") ~ ":" ~ environment.get("GDMSESSION","") ~ ":" ~ environment.get("KDE_FULL_SESSION","")).toLower(); DesktopHints hints; hints.gnome = all.canFind("gnome"); hints.kde = all.canFind("kde") || all.canFind("plasma"); return hints; } // Generate the correct file:// URI for display manager integration string fileUriFor(string absPath) { // Basic, safe URI for local file return "file://" ~ expandTilde(absPath); } // Add GNOME Bookmark void addGnomeBookmark() { // Configure required variables string uri = fileUriFor(getValueString("sync_dir")); string bookmarksPath = buildPath(expandTilde(environment.get("HOME", "")), ".config", "gtk-3.0", "bookmarks"); // Ensure the bookmarks path exists try { // Attempt bookmarks path creation mkdirRecurse(dirName(bookmarksPath)); } catch (std.file.FileException e) { // Creating the bookmarks path failed addLogEntry("ERROR: Unable to create the GNOME bookmark directory: " ~ e.msg, ["info", "notify"]); return; } // Does the bookmark already exist? string content = exists(bookmarksPath) ? readText(bookmarksPath) : ""; bool present = false; foreach (line; content.splitLines()) { if (line.strip == uri) { present = true; break; } } if (present) return; // Append newline if needed, then our URI string newline = content.length && !content.endsWith("\n") ? "\n" : ""; string updated = content ~ newline ~ uri ~ "\n"; // Atomic write string tmp = bookmarksPath ~ ".tmp"; std.file.write(tmp, updated); rename(tmp, bookmarksPath); // Log outcome addLogEntry("GNOME Desktop Integration: Bookmark added successfully", ["info"]); } // Set the correct folder icon for the 'sync_dir' path void setOneDriveFolderIcon() { // Get the sync directory string syncDir = expandTilde(getValueString("sync_dir")); // Build gio command string[] gioCmd = [ "gio", "set", syncDir, "metadata::custom-icon-name", "onedrive" ]; // Try and set folder icon try { auto p = spawnProcess(gioCmd); int status = p.wait(); if (status == 0) { addLogEntry("GNOME Desktop Integration: Set folder icon to 'onedrive' for " ~ syncDir, ["info"]); } else { addLogEntry("GNOME Desktop Integration: Failed to set folder icon for " ~ syncDir ~ " (gio exit " ~ status.to!string ~ ")", ["info"]); } } catch (Exception e) { addLogEntry("GNOME Desktop Integration: Exception setting folder icon: " ~ e.msg, ["info"]); } } // Remove GNOME Bookmark void removeGnomeBookmark() { // Configure required variables string uri = fileUriFor(getValueString("sync_dir")); string bookmarksPath = buildPath(expandTilde(environment.get("HOME", "")), ".config", "gtk-3.0", "bookmarks"); // Does the bookmark path exist? if (!exists(bookmarksPath)) { return; } // Read existing bookmarks string content = readText(bookmarksPath); auto lines = content.splitLines(); bool changed = false; string[] kept; kept.reserve(lines.length); foreach (line; lines) { // Remove every line that exactly matches the URI (after stripping whitespace) if (line.strip == uri) { changed = true; continue; } kept ~= line; } if (!changed) { return; } // Rebuild file (ensure trailing newline if non-empty) string updated = kept.length ? kept.join("\n") ~ "\n" : ""; // Atomic write const string tmp = bookmarksPath ~ ".tmp"; std.file.write(tmp, updated); rename(tmp, bookmarksPath); // Log outcome addLogEntry("GNOME Desktop Integration: Bookmark removed successfully", ["info"]); } // Remove folder icon void removeOneDriveFolderIcon() { // Get the sync directory string syncDir = expandTilde(getValueString("sync_dir")); // Build gio command string[] gioCmd = [ "gio", "set", syncDir, "metadata::custom-icon-name", "folder" ]; // Try and set folder icon try { auto p = spawnProcess(gioCmd); int status = p.wait(); if (status == 0) { addLogEntry("GNOME Desktop Integration: Reset folder icon to 'default' for " ~ syncDir, ["info"]); } else { addLogEntry("GNOME Desktop Integration: Failed to reset folder icon for " ~ syncDir ~ " (gio exit " ~ status.to!string ~ ")", ["info"]); } } catch (Exception e) { addLogEntry("GNOME Desktop Integration: Exception setting folder icon: " ~ e.msg, ["info"]); } } // Add KDE Places entry void addKDEPlacesEntry() { // Configure required variables string uri = fileUriFor(getValueString("sync_dir")); string xbelPath = buildPath(expandTilde(environment.get("HOME", "")), ".local", "share", "user-places.xbel"); string content; // Ensure the xbelPath path exists try { // Attempt xbelPath creation mkdirRecurse(dirName(xbelPath)); } catch (std.file.FileException e) { // Creating the xbelPath path failed addLogEntry("ERROR: Unable to create the KDE Places directory: " ~ e.msg, ["info", "notify"]); return; } // Does the xbel file exist? if (exists(xbelPath)) { // Path exists - read the file content = readText(xbelPath); // Does the 'sync_dir' path exist in the xbel file? if (content.canFind(`href="` ~ uri ~ `"`)) { return; // already present } } else { // xbel path does not exist, create minimal XBEL skeleton content = " "; } // Insert xbel bookmark before closing tag string bookmark = ` OneDrive `; // Update xbel file with Microsoft OneDrive Bookmark string updated; auto idx = content.lastIndexOf(""); if (idx >= 0) { updated = content[0 .. idx] ~ bookmark ~ "\n" ~ content[idx .. $]; } else { // Fallback: append (still valid for many parsers) updated = content ~ "\n" ~ bookmark ~ "\n\n"; } string tmp = xbelPath ~ ".tmp"; std.file.write(tmp, updated); rename(tmp, xbelPath); // Log outcome addLogEntry("KDE Desktop Integration: KDE/Plasma place added successfully", ["info"]); } // Remove KDE Places entry void removeKDEPlacesEntry() { // Compute paths/values const string uri = fileUriFor(getValueString("sync_dir")); const string xbelPath = buildPath(expandTilde(environment.get("HOME", "")), ".local", "share", "user-places.xbel"); if (!exists(xbelPath)) { return; } string content = readText(xbelPath); auto before = content; // Build a regex that matches: // ... // - tolerate attribute order/whitespace // - accept single or double quotes around URI // - non-greedy body match const esc = regexEscape(uri); auto re = regex(`(?s)]*\bhref\s*=\s*["']` ~ esc ~ `["'][^>]*>.*?`); // Remove all matches content = replaceAll(content, re, ""); // Optional: tidy up multiple blank lines left behind auto cleanup = regex(`\n{3,}`); content = replaceAll(content, cleanup, "\n\n"); // If nothing changed, exit quietly if (content == before) { return; } // Atomic write string tmp = xbelPath ~ ".tmp"; std.file.write(tmp, content); rename(tmp, xbelPath); addLogEntry("KDE Desktop Integration: KDE/Plasma place removed successfully", ["info"]); } // Safely merge multiple '|'-delimited rule strings by normalising, removing empty entries, trimming whitespace, // and de-duplicating rules so malformed or repeated config entries do not corrupt 'skip_dir' / 'skip_file' processing private string mergePipeDelimitedRulesDedup(const string existing, const string incoming) { auto resultString = appender!(string[])(); void addTokens(const string raw) { foreach (part; raw.splitter('|')) { auto t = part.strip(); if (t.empty) continue; // Keep first occurrence if (!resultString.data.canFind(t)) resultString ~= t.idup; } } addTokens(existing); addTokens(incoming); return resultString.data.joiner("|").to!string; } } // Output the full application help when --help is passed in void outputLongHelp(Option[] opt) { auto argsNeedingOptions = [ "--auth-files", "--auth-response", "--confdir", "--create-directory", "--classify-as-big-delete", "--create-share-link", "--destination-directory", "--download-file", "--get-file-link", "--get-O365-drive-id", "--get-sharepoint-drive-id", "--log-dir", "--min-notify-changes", "--modified-by", "--monitor-interval", "--monitor-log-frequency", "--monitor-fullscan-frequency", "--remove-directory", "--single-directory", "--skip-dir", "--skip-file", "--skip-size", "--source-directory", "--space-reservation", "--syncdir", "--share-password", "--user-agent" ]; writeln(`onedrive - A client for the Microsoft OneDrive Cloud Service Usage: onedrive [options] --sync Do a one-time synchronisation with Microsoft OneDrive onedrive [options] --monitor Monitor filesystem and synchronise regularly with Microsoft OneDrive onedrive [options] --display-config Display the currently used configuration onedrive [options] --display-sync-status Query OneDrive service and report on pending changes onedrive -h | --help Show this help screen onedrive --version Show version Options: `); foreach (it; opt.sort!("a.optLong < b.optLong")) { writefln(" %s%s%s%s\n %s", it.optLong, it.optShort == "" ? "" : " " ~ it.optShort, argsNeedingOptions.canFind(it.optLong) ? " ''" : "", it.required ? " (required)" : "", it.help); } // end with a blank line writeln(); } onedrive-2.5.10/src/curlEngine.d000066400000000000000000000721551513710110600164460ustar00rootroot00000000000000// What is this module called? module curlEngine; // What does this module require to function? import std.net.curl; import etc.c.curl; import std.datetime; import std.conv; import std.file; import std.format; import std.json; import std.stdio; import std.range; import core.memory; import core.sys.posix.signal; // Required for WebSocket Support import core.stdc.stdlib : getenv; import core.stdc.string : strcmp; import core.sys.posix.dlfcn : dlopen, dlsym, dlclose, RTLD_NOW; // Posix elements import std.exception : enforce; // for enforce(...) // What other modules that we have created do we need to import? import log; import util; // WebSocket check elements enum CURL_WS_MIN_NUM = 0x075600; // 7.86.0 (version which WebSocket support was added to cURL) extern (C) void sigpipeHandler(int signum) { // Custom handler to ignore SIGPIPE signals addLogEntry("ERROR: Handling a cURL SIGPIPE signal despite CURLOPT_NOSIGNAL being set (cURL Operational Bug) ..."); } // Function pointer types matching libcurl WebSocket (WS) API extern(C) struct curl_ws_frame { uint age; uint flags; size_t len; size_t offset; size_t bytesleft; } // WebSocket alias alias PFN_curl_ws_recv = extern(C) CURLcode function(CURL*, void*, size_t, size_t*, const curl_ws_frame**); alias PFN_curl_ws_send = extern(C) CURLcode function(CURL*, const void*, size_t, size_t*, long /*curl_off_t*/, uint); extern(C) struct curl_slist { char* data; curl_slist* next; } extern(C) curl_slist* curl_slist_append(curl_slist* list, const char* string); extern(C) void curl_slist_free_all(curl_slist* list); // Shared pool of CurlEngine instances accessible across all threads __gshared CurlEngine[] curlEnginePool; // __gshared is used to declare a variable that is shared across all threads private __gshared { void* _curlLib; PFN_curl_ws_recv p_curl_ws_recv; PFN_curl_ws_send p_curl_ws_send; bool _wsSymbolsReady; uint _wsProbeOnce; // 0=not run, 1=success, 2=fail } private void* loadCurlLib() { // Respect LD_LIBRARY_PATH etc. auto h = dlopen("libcurl.so.4", RTLD_NOW); if (h is null) h = dlopen("libcurl.so", RTLD_NOW); return h; } private void* findSymbol(const(char)* name) { return dlsym(_curlLib, name); } private bool probeCurlWsSymbols() { if (_wsProbeOnce == 1) return _wsSymbolsReady; if (_wsProbeOnce == 2) return false; // 1) libcurl version check auto vi = curl_version_info(CURLVERSION_NOW); if (vi is null || vi.version_num < CURL_WS_MIN_NUM) { _wsProbeOnce = 2; _wsSymbolsReady = false; return false; } // 2) load libcurl and resolve symbols _curlLib = loadCurlLib(); if (_curlLib is null) { _wsProbeOnce = 2; _wsSymbolsReady = false; return false; } p_curl_ws_recv = cast(PFN_curl_ws_recv) findSymbol("curl_ws_recv"); p_curl_ws_send = cast(PFN_curl_ws_send) findSymbol("curl_ws_send"); _wsSymbolsReady = (p_curl_ws_recv !is null) && (p_curl_ws_send !is null); _wsProbeOnce = _wsSymbolsReady ? 1 : 2; return _wsSymbolsReady; } bool curlSupportsWebSockets() { return probeCurlWsSymbols(); } class CurlResponse { HTTP.Method method; const(char)[] url; const(char)[][const(char)[]] requestHeaders; const(char)[] postBody; bool hasResponse; string[string] responseHeaders; HTTP.StatusLine statusLine; char[] content; this() { reset(); } ~this() { reset(); } void reset() { method = HTTP.Method.undefined; url = ""; requestHeaders = null; postBody = []; hasResponse = false; responseHeaders = null; statusLine.reset(); content = []; } void addRequestHeader(const(char)[] name, const(char)[] value) { requestHeaders[to!string(name)] = to!string(value); } void connect(HTTP.Method method, const(char)[] url) { this.method = method; this.url = url; } const JSONValue json() { JSONValue json; try { json = content.parseJSON(); } catch (JSONException e) { // Log that a JSON Exception was caught, dont output the HTML response from OneDrive if (debugLogging) {addLogEntry("JSON Exception caught when performing HTTP operations - use --debug-https to diagnose further", ["debug"]);} } return json; }; void update(HTTP *http) { hasResponse = true; this.responseHeaders = http.responseHeaders(); this.statusLine = http.statusLine; // has 'microsoftDataCentre' been set yet? if (microsoftDataCentre.empty) { // Extract the 'x-ms-ags-diagnostic' header if it exists if ("x-ms-ags-diagnostic" in this.responseHeaders) { // try and extract the data centre details try { // attempt to extract the data centre location from the header auto diagHeaderData = parseJSON(this.responseHeaders["x-ms-ags-diagnostic"]); string dataCentre = diagHeaderData["ServerInfo"]["DataCenter"].str; // set the Microsoft Data Centre value microsoftDataCentre = dataCentre; } catch (Exception e) { // do nothing } } } // Output the response headers only if using debug mode + debugging https itself if ((debugLogging) && (debugHTTPSResponse)) { addLogEntry("HTTP Response Headers: " ~ to!string(this.responseHeaders), ["debug"]); addLogEntry("HTTP Status Line: " ~ to!string(this.statusLine), ["debug"]); } } @safe pure HTTP.StatusLine getStatus() { return this.statusLine; } // Return the current value of retryAfterValue int getRetryAfterValue() { int delayBeforeRetry; // Is 'retry-after' in the response headers if ("retry-after" in responseHeaders) { // Set the retry-after value if (debugLogging) { addLogEntry("curlEngine.http.perform() => Received a 'Retry-After' Header Response with the following value: " ~ to!string(responseHeaders["retry-after"]), ["debug"]); addLogEntry("curlEngine.http.perform() => Setting retryAfterValue to: " ~ responseHeaders["retry-after"], ["debug"]); } delayBeforeRetry = to!int(responseHeaders["retry-after"]); } else { // Use a 120 second delay as a default given header value was zero // This value is based on log files and data when determining correct process for 429 response handling delayBeforeRetry = 120; // Update that we are over-riding the provided value with a default if (debugLogging) {addLogEntry("HTTP Response Header retry-after value was missing - Using a preconfigured default of: " ~ to!string(delayBeforeRetry), ["debug"]);} } return delayBeforeRetry; } const string parseRequestHeaders(const(const(char)[][const(char)[]]) headers) { string requestHeadersStr = ""; // Ensure response headers is not null and iterate over keys safely. if (headers !is null) { foreach (string header; headers.byKey()) { if (header == "Authorization") { continue; } // Use the 'in' operator to safely check if the key exists in the associative array. if (auto val = header in headers) { requestHeadersStr ~= "< " ~ header ~ ": " ~ *val ~ "\n"; } } } return requestHeadersStr; } const string parseResponseHeaders(const(string[string]) headers) { string responseHeadersStr = ""; // Ensure response headers is not null and iterate over keys safely. if (headers !is null) { foreach (string header; headers.byKey()) { // Check if the key actually exists before accessing it to avoid RangeError. if (auto val = header in headers) { // 'in' checks for the key and returns a pointer to the value if found. responseHeadersStr ~= "> " ~ header ~ ": " ~ *val ~ "\n"; // Dereference pointer to get the value. } } } return responseHeadersStr; } const string dumpDebug() { import std.range; import std.format : format; string str = ""; str ~= format("< %s %s\n", method, url); if (!requestHeaders.empty) { str ~= parseRequestHeaders(requestHeaders); } if (!postBody.empty) { str ~= format("\n----\n%s\n----\n", postBody); } str ~= format("< %s\n", statusLine); if (!responseHeaders.empty) { str ~= parseResponseHeaders(responseHeaders); } return str; } const string dumpResponse() { import std.range; import std.format : format; string str = ""; if (!content.empty) { str ~= format("\n----\n%s\n----\n", content); } return str; } override string toString() const { string str = "Curl debugging: \n"; str ~= dumpDebug(); if (hasResponse) { str ~= "Curl response: \n"; str ~= dumpResponse(); } return str; } } class CurlEngine { HTTP http; File uploadFile; CurlResponse response; bool keepAlive; ulong dnsTimeout; string internalThreadId; SysTime releaseTimestamp; ulong maxIdleTime; private long resumeFromOffset = -1; this() { http = HTTP(); // Directly initializes HTTP using its default constructor response = null; // Initialize as null internalThreadId = generateAlphanumericString(); // Give this CurlEngine instance a unique ID if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("Created new CurlEngine instance id: " ~ to!string(internalThreadId), ["debug"]);} } // The destructor should only clean up resources owned directly by this CurlEngine instance ~this() { // Is the file still open? if (uploadFile.isOpen()) { uploadFile.close(); } // Is 'response' cleared? object.destroy(response); // Destroy, then set to null response = null; // Is the actual http instance is stopped? if (!http.isStopped) { http.shutdown(); } // Make sure this HTTP instance is destroyed object.destroy(http); // ThreadId needs to be set to null internalThreadId = null; } // We are releasing a curl instance back to the pool void releaseEngine() { // Set timestamp of release releaseTimestamp = Clock.currTime(UTC()); // Log that we are releasing this engine back to the pool if ((debugLogging) && (debugHTTPSResponse)) { addLogEntry("CurlEngine releaseEngine() called on instance id: " ~ to!string(internalThreadId), ["debug"]); addLogEntry("CurlEngine curlEnginePool size before release: " ~ to!string(curlEnginePool.length), ["debug"]); string engineReleaseMessage = format("Release Timestamp for CurlEngine %s: %s", to!string(internalThreadId), to!string(releaseTimestamp)); addLogEntry(engineReleaseMessage, ["debug"]); } // cleanup this curl instance before putting it back in the pool cleanup(true); // Cleanup instance by resetting values and flushing cookie cache synchronized (CurlEngine.classinfo) { curlEnginePool ~= this; if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine curlEnginePool size after release: " ~ to!string(curlEnginePool.length), ["debug"]);} } // Perform Garbage Collection GC.collect(); // Return free memory to the OS GC.minimize(); } // Setup a specific SIGPIPE Signal handler due to curl bugs that ignore CurlOption.nosignal void setupSIGPIPESignalHandler() { // Setup the signal handler sigaction_t curlAction; curlAction.sa_handler = &sigpipeHandler; // Direct function pointer assignment sigaction(SIGPIPE, &curlAction, null); // Broken Pipe signal from curl } // Initialise this curl instance void initialise(ulong dnsTimeout, ulong connectTimeout, ulong dataTimeout, ulong operationTimeout, int maxRedirects, bool httpsDebug, string userAgent, bool httpProtocol, ulong userRateLimit, ulong protocolVersion, ulong maxIdleTime, bool keepAlive=true) { // There are many broken curl versions being used, mainly provided by Ubuntu // Ignore SIGPIPE to prevent the application from exiting without reason with an exit code of 141 when bad curl version generate this signal despite being told not to (CurlOption.nosignal) below setupSIGPIPESignalHandler(); // Setting 'keepAlive' to false ensures that when we close the curl instance, any open sockets are closed - which we need to do when running // multiple threads and API instances at the same time otherwise we run out of local files | sockets pretty quickly this.keepAlive = keepAlive; // Curl DNS Timeout Handling this.dnsTimeout = dnsTimeout; // Curl Timeout Handling this.maxIdleTime = maxIdleTime; // libcurl dns_cache_timeout timeout // https://curl.se/libcurl/c/CURLOPT_DNS_CACHE_TIMEOUT.html // https://dlang.org/library/std/net/curl/http.dns_timeout.html http.dnsTimeout = (dur!"seconds"(dnsTimeout)); // Timeout for HTTPS connections // https://curl.se/libcurl/c/CURLOPT_CONNECTTIMEOUT.html // https://dlang.org/library/std/net/curl/http.connect_timeout.html http.connectTimeout = (dur!"seconds"(connectTimeout)); // Timeout for activity on connection // This is a DMD | DLANG specific item, not a libcurl item // https://dlang.org/library/std/net/curl/http.data_timeout.html // https://raw.githubusercontent.com/dlang/phobos/master/std/net/curl.d - private enum _defaultDataTimeout = dur!"minutes"(2); http.dataTimeout = (dur!"seconds"(dataTimeout)); // Maximum time any operation is allowed to take // This includes dns resolution, connecting, data transfer, etc. // https://curl.se/libcurl/c/CURLOPT_TIMEOUT_MS.html // https://dlang.org/library/std/net/curl/http.operation_timeout.html http.operationTimeout = (dur!"seconds"(operationTimeout)); // Specify how many redirects should be allowed http.maxRedirects(maxRedirects); // Debug HTTPS http.verbose = httpsDebug; // Use the configured 'user_agent' value http.setUserAgent = userAgent; // What IP protocol version should be used when using Curl - IPv4 & IPv6, IPv4 or IPv6 http.handle.set(CurlOption.ipresolve,protocolVersion); // 0 = IPv4 + IPv6, 1 = IPv4 Only, 2 = IPv6 Only // What version of HTTP protocol do we use? // Curl >= 7.62.0 defaults to http2 for a significant number of operations if (httpProtocol) { // Downgrade to HTTP 1.1 - yes version = 2 is HTTP 1.1 http.handle.set(CurlOption.http_version,2); } // Configure upload / download rate limits if configured // 131072 = 128 KB/s - minimum for basic application operations to prevent timeouts // A 0 value means rate is unlimited, and is the curl default if (userRateLimit > 0) { // set rate limit http.handle.set(CurlOption.max_send_speed_large,userRateLimit); http.handle.set(CurlOption.max_recv_speed_large,userRateLimit); } // Explicitly set libcurl options to avoid using signal handlers in a multi-threaded environment // See: https://curl.se/libcurl/c/CURLOPT_NOSIGNAL.html // The CURLOPT_NOSIGNAL option is intended for use in multi-threaded programs to ensure that libcurl does not use any signal handling. // Set CURLOPT_NOSIGNAL to 1 to prevent libcurl from using signal handlers, thus avoiding interference with the application's signal handling which could lead to issues such as unstable behavior or application crashes. http.handle.set(CurlOption.nosignal,1); // https://curl.se/libcurl/c/CURLOPT_TCP_NODELAY.html // Ensure that TCP_NODELAY is set to 0 to ensure that TCP NAGLE is enabled http.handle.set(CurlOption.tcp_nodelay,0); // https://curl.se/libcurl/c/CURLOPT_FORBID_REUSE.html // CURLOPT_FORBID_REUSE - make connection get closed at once after use // Setting this to 0 ensures that we ARE reusing connections (we did this in v2.4.xx) to ensure connections remained open and usable // Setting this to 1 ensures that when we close the curl instance, any open sockets are forced closed when the API curl instance is destroyed // The libcurl default is 0 as per the documentation (to REUSE connections) - ensure we are configuring to reuse sockets http.handle.set(CurlOption.forbid_reuse,0); if (httpsDebug) { // Output what options we are using so that in the debug log this can be tracked if ((debugLogging) && (debugHTTPSResponse)) { addLogEntry("http.dnsTimeout = " ~ to!string(dnsTimeout), ["debug"]); addLogEntry("http.connectTimeout = " ~ to!string(connectTimeout), ["debug"]); addLogEntry("http.dataTimeout = " ~ to!string(dataTimeout), ["debug"]); addLogEntry("http.operationTimeout = " ~ to!string(operationTimeout), ["debug"]); addLogEntry("http.maxRedirects = " ~ to!string(maxRedirects), ["debug"]); addLogEntry("http.CurlOption.ipresolve = " ~ to!string(protocolVersion), ["debug"]); addLogEntry("http.header.Connection.keepAlive = " ~ to!string(keepAlive), ["debug"]); } } } void setResponseHolder(CurlResponse response) { if (response is null) { // Create a response instance if it doesn't already exist if (this.response is null) this.response = new CurlResponse(); } else { this.response = response; } } void addRequestHeader(const(char)[] name, const(char)[] value) { setResponseHolder(null); http.addRequestHeader(name, value); response.addRequestHeader(name, value); } void connect(HTTP.Method method, const(char)[] url) { setResponseHolder(null); if (!keepAlive) addRequestHeader("Connection", "close"); http.method = method; http.url = url; response.connect(method, url); } void setContent(const(char)[] contentType, const(char)[] sendData) { setResponseHolder(null); addRequestHeader("Content-Type", contentType); if (sendData) { http.contentLength = sendData.length; http.onSend = (void[] buf) { import std.algorithm: min; size_t minLen = min(buf.length, sendData.length); if (minLen == 0) return 0; buf[0 .. minLen] = cast(void[]) sendData[0 .. minLen]; sendData = sendData[minLen .. $]; return minLen; }; response.postBody = sendData; } } void setFile(string filepath, string contentRange, ulong offset, ulong offsetSize) { setResponseHolder(null); // open file as read-only in binary mode uploadFile = File(filepath, "rb"); if (contentRange.empty) { offsetSize = uploadFile.size(); } else { addRequestHeader("Content-Range", contentRange); uploadFile.seek(offset); } // Setup progress bar to display http.onProgress = delegate int(size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow) { return 0; }; addRequestHeader("Content-Type", "application/octet-stream"); http.onSend = data => uploadFile.rawRead(data).length; http.contentLength = offsetSize; } void setZeroContentLength() { // Explicit HTTP semantics http.contentLength = 0; addRequestHeader("Content-Length", to!string(0)); // Force libcurl POST-with-empty-body semantics // This prevents libcurl from attempting to read from stdin when performing a POST with no payload. http.handle.set(CurlOption.postfields, ""); http.handle.set(CurlOption.postfieldsize, 0L); // Defensive: ensure we are NOT in upload/read-callback mode http.handle.set(CurlOption.upload, 0); } CurlResponse execute() { scope(exit) { cleanup(); } setResponseHolder(null); http.onReceive = (ubyte[] data) { response.content ~= data; // HTTP Server Response Code Debugging if --https-debug is being used return data.length; }; http.perform(); response.update(&http); return response; } CurlResponse download(string originalFilename, string downloadFilename) { setResponseHolder(null); // Open the file in append mode if resuming, else write mode auto file = (resumeFromOffset > 0) ? File(downloadFilename, "ab") // append binary : File(downloadFilename, "wb"); // write binary // Function exit scope scope(exit) { cleanup(); if (file.isOpen()){ // close open file file.close(); } } // Apply Range header if resuming if (resumeFromOffset > 0) { string rangeHeader = format("bytes=%d-", resumeFromOffset); addRequestHeader("Range", rangeHeader); } // Receive data http.onReceive = (ubyte[] data) { file.rawWrite(data); return data.length; }; // Perform HTTP Operation http.perform(); // close open file - avoids problems with renaming on GCS Buckets and other semi-POSIX systems if (file.isOpen()){ file.close(); } // Rename downloaded file rename(downloadFilename, originalFilename); // Update response and return response response.update(&http); return response; } // Cleanup this instance internal variables that may have been set void cleanup(bool flushCookies = false) { // Reset any values to defaults, freeing any set objects if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine cleanup() called on instance id: " ~ to!string(internalThreadId), ["debug"]);} // Is the instance is stopped? if (!http.isStopped) { // A stopped instance is not usable, these cannot be reset http.clearRequestHeaders(); http.onSend = null; http.onReceive = null; http.onReceiveHeader = null; http.onReceiveStatusLine = null; http.onProgress = delegate int(size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow) { return 0; }; http.contentLength = 0; // We only do this if we are pushing the curl engine back to the curl pool if (flushCookies) { // Flush the cookie cache as well http.flushCookieJar(); http.clearSessionCookies(); http.clearAllCookies(); } } // set the response to null response = null; // close file if open if (uploadFile.isOpen()){ // close open file uploadFile.close(); } } // Shut down the curl instance & close any open sockets void shutdownCurlHTTPInstance() { // Log that we are attempting to shutdown this curl instance if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine shutdownCurlHTTPInstance() called on instance id: " ~ to!string(internalThreadId), ["debug"]);} // Is this curl instance is stopped? if (!http.isStopped) { if ((debugLogging) && (debugHTTPSResponse)) { addLogEntry("HTTP instance still active: " ~ to!string(internalThreadId), ["debug"]); addLogEntry("HTTP instance isStopped state before http.shutdown(): " ~ to!string(http.isStopped), ["debug"]); } http.shutdown(); if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("HTTP instance isStopped state post http.shutdown(): " ~ to!string(http.isStopped), ["debug"]);} object.destroy(http); // Destroy, however we cant set to null if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("HTTP instance shutdown and destroyed: " ~ to!string(internalThreadId), ["debug"]);} } else { // Already stopped .. destroy it object.destroy(http); // Destroy, however we cant set to null if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("Stopped HTTP instance shutdown and destroyed: " ~ to!string(internalThreadId), ["debug"]);} } // Perform Garbage Collection GC.collect(); // Return free memory to the OS GC.minimize(); } // Disable SSL certificate peer verification for libcurl operations. // // This function disables the verification of the SSL peer's certificate // by setting CURLOPT_SSL_VERIFYPEER to 0. This means that libcurl will // accept any certificate presented by the server, regardless of whether // it is signed by a trusted certificate authority. // // ------------------------------------------------------------------------------------- // WARNING: Disabling SSL peer verification introduces significant security risks: // ------------------------------------------------------------------------------------- // - Man-in-the-Middle (MITM) attacks become trivially possible. // - Malicious servers can impersonate trusted endpoints. // - Confidential data (authentication tokens, file contents) can be intercepted. // - Violates industry security standards and regulatory compliance requirements. // - Should never be used in production environments or on untrusted networks. // // This option should only be enabled for internal testing, debugging self-signed // certificates, or explicitly controlled environments with known risks. // // See also: // https://curl.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html void setDisableSSLVerifyPeer() { // Emit a runtime warning if debug logging is enabled if (debugLogging) { addLogEntry("WARNING: SSL peer verification has been DISABLED!", ["debug"]); addLogEntry(" This allows invalid or self-signed certificates to be accepted.", ["debug"]); addLogEntry(" Use ONLY for testing. This severely weakens HTTPS security.", ["debug"]); } // Disable SSL certificate verification (DANGEROUS) http.handle.set(CurlOption.ssl_verifypeer, 0); } // Enable SSL Certificate Verification void setEnableSSLVerifyPeer() { // Enable SSL certificate verification addLogEntry("Enabling SSL peer verification"); http.handle.set(CurlOption.ssl_verifypeer, 1); } // Set an applicable resumable offset point when downloading a file void setDownloadResumeOffset(long offset) { resumeFromOffset = offset; } // reset resumable offset point to negative value void resetDownloadResumeOffset() { resumeFromOffset = -1; } } // Methods to control obtaining and releasing a CurlEngine instance from the curlEnginePool // Get a curl instance for the OneDrive API to use CurlEngine getCurlInstance() { if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine getCurlInstance() called", ["debug"]);} synchronized (CurlEngine.classinfo) { // What is the current pool size if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine curlEnginePool current size: " ~ to!string(curlEnginePool.length), ["debug"]);} if (curlEnginePool.empty) { if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine curlEnginePool is empty - constructing a new CurlEngine instance", ["debug"]);} return new CurlEngine; // Constructs a new CurlEngine with a fresh HTTP instance } else { CurlEngine curlEngine = curlEnginePool[$ - 1]; curlEnginePool.popBack(); // assumes a LIFO (last-in, first-out) usage pattern // Is this engine stopped? if (curlEngine.http.isStopped) { // return a new curl engine as a stopped one cannot be used if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine was in a stopped state (not usable) - constructing a new CurlEngine instance", ["debug"]);} return new CurlEngine; // Constructs a new CurlEngine with a fresh HTTP instance } else { // When was this engine last used? auto elapsedTime = Clock.currTime(UTC()) - curlEngine.releaseTimestamp; if ((debugLogging) && (debugHTTPSResponse)) { string engineIdleMessage = format("CurlEngine %s time since last use: %s", to!string(curlEngine.internalThreadId), to!string(elapsedTime)); addLogEntry(engineIdleMessage, ["debug"]); } // If greater than 120 seconds (default), the treat this as a stale engine, preventing: // * Too old connection (xxx seconds idle), disconnect it // * Connection 0 seems to be dead! // * Closing connection 0 if (elapsedTime > dur!"seconds"(curlEngine.maxIdleTime)) { // Too long idle engine, clean it up and create a new one if ((debugLogging) && (debugHTTPSResponse)) { string curlTooOldMessage = format("CurlEngine idle for > %d seconds .... destroying and returning a new curl engine instance", curlEngine.maxIdleTime); addLogEntry(curlTooOldMessage, ["debug"]); } curlEngine.cleanup(true); // Cleanup instance by resetting values and flushing cookie cache curlEngine.shutdownCurlHTTPInstance(); // Assume proper cleanup of any resources used by HTTP if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("Returning NEW curlEngine instance", ["debug"]);} return new CurlEngine; // Constructs a new CurlEngine with a fresh HTTP instance } else { // return an existing curl engine if ((debugLogging) && (debugHTTPSResponse)) { addLogEntry("CurlEngine was in a valid state - returning existing CurlEngine instance", ["debug"]); addLogEntry("Using CurlEngine instance ID: " ~ curlEngine.internalThreadId, ["debug"]); } // return the existing engine return curlEngine; } } } } } // Release all CurlEngine instances void releaseAllCurlInstances() { if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine releaseAllCurlInstances() called", ["debug"]);} synchronized (CurlEngine.classinfo) { // What is the current pool size if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine curlEnginePool size to release: " ~ to!string(curlEnginePool.length), ["debug"]);} if (curlEnginePool.length > 0) { // Safely iterate and clean up each CurlEngine instance foreach (curlEngineInstance; curlEnginePool) { try { curlEngineInstance.cleanup(true); // Cleanup instance by resetting values and flushing cookie cache curlEngineInstance.shutdownCurlHTTPInstance(); // Assume proper cleanup of any resources used by HTTP } catch (Exception e) { // Log the error or handle it appropriately // e.g., writeln("Error during cleanup/shutdown: ", e.toString()); } // It's safe to destroy the object here assuming no other references exist object.destroy(curlEngineInstance); // Destroy, then set to null curlEngineInstance = null; // Perform Garbage Collection on this destroyed curl engine GC.collect(); // Log release if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine destroyed", ["debug"]);} } // Clear the array after all instances have been handled curlEnginePool.length = 0; // More explicit than curlEnginePool = []; } } // Perform Garbage Collection on the destroyed curl engines GC.collect(); // Return free memory to the OS GC.minimize(); // Log that all curl engines have been released if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("CurlEngine releaseAllCurlInstances() completed", ["debug"]);} } // Return how many curl engines there are ulong curlEnginePoolLength() { return curlEnginePool.length; }onedrive-2.5.10/src/curlWebsockets.d000066400000000000000000000350071513710110600173450ustar00rootroot00000000000000// What is this module called? module curlWebsockets; /****************************************************************************** * Minimal RFC6455 WebSocket client over libcurl (CONNECT_ONLY). ******************************************************************************/ // What does this module require to function? import etc.c.curl : CURL, CURLcode, curl_easy_cleanup, curl_easy_getinfo, curl_easy_init, curl_easy_perform, curl_easy_recv, curl_easy_reset, curl_easy_send, curl_easy_setopt; import core.stdc.string : memcpy, memmove; import core.time : MonoTime, dur; import std.array : Appender, appender; import std.base64 : Base64; import std.meta : AliasSeq; import std.random : Random, unpredictableSeed, uniform; import std.range : empty; import std.string : indexOf, startsWith, toLower, toStringz; import std.exception : collectException; import std.conv; // What other modules that we have created do we need to import? import log; // ========== Logging Shim ========== private void logCurlWebsocketOutput(string s) { if (debugLogging) { addLogEntry("WEBSOCKET: " ~ s, ["debug"]); } } private struct WsFrame { ubyte fin; ubyte opcode; bool masked; ulong payloadLen; ubyte[4] maskKey; ubyte[] payload; } final class CurlWebSocket { private: // libcurl constants defined locally enum int CURLOPT_URL = 10002; enum int CURLOPT_FOLLOWLOCATION = 52; enum int CURLOPT_NOSIGNAL = 99; enum int CURLOPT_USERAGENT = 10018; enum int CURLOPT_SSL_VERIFYPEER = 64; enum int CURLOPT_SSL_VERIFYHOST = 81; enum int CURLOPT_CONNECT_ONLY = 141; enum int CURLOPT_TIMEOUT_MS = 155; enum int CURLOPT_CONNECTTIMEOUT_MS = 156; enum int CURLOPT_VERBOSE = 41; // Additional constants needed for WebSocket handling enum int CURLOPT_HTTP_VERSION = 84; // CURLOPT_HTTP_VERSION enum int CURLOPT_SSL_ENABLE_ALPN = 226; // CURLOPT_SSL_ENABLE_ALPN enum int CURLOPT_SSL_ENABLE_NPN = 225; // CURLOPT_SSL_ENABLE_NPN // HTTP version flags (for CURLOPT_HTTP_VERSION) enum long CURL_HTTP_VERSION_NONE = 0; enum long CURL_HTTP_VERSION_1_0 = 1; enum long CURL_HTTP_VERSION_1_1 = 2; enum long CURL_HTTP_VERSION_2_0 = 3; enum long CURL_HTTP_VERSION_2TLS = 4; enum long CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE = 5; enum long CURL_HTTP_VERSION_3 = 30; // (added in curl 7.66.0+) CURL* curl = null; bool websocketConnected = false; int connectTimeoutMs = 10000; int ioTimeoutMs = 15000; string userAgent = ""; bool httpsDebug = false; string scheme; string host; int port; string hostPort; string pathQuery; ubyte[] recvBuf; Random rng; public: this() { websocketConnected = false; curl = curl_easy_init(); rng = Random(unpredictableSeed); logCurlWebsocketOutput("Created a new instance of a CurlWebSocket object accessing libcurl for HTTP operations"); } ~this() { // No logging output in ~this() if (curl !is null) { curl_easy_cleanup(curl); curl = null; } websocketConnected = false; } bool isConnected() { return websocketConnected; } void setTimeouts(int connectMs, int rwMs) { connectTimeoutMs = connectMs; ioTimeoutMs = rwMs; } void setUserAgent(string ua) { if (!ua.empty) userAgent = ua; } void setHTTPSDebug(bool httpsDebugInput) { httpsDebug = httpsDebugInput; } int connect(string wsUrl) { if (curl is null) { logCurlWebsocketOutput("libcurl handle not initialised"); return -1; } ParsedUrl p = parseWsUrl(wsUrl); if (!p.ok) { logCurlWebsocketOutput("Invalid WebSocket URL: " ~ wsUrl); return -2; } scheme = p.scheme; host = p.host; port = p.port; hostPort = p.hostPort; pathQuery = p.pathQuery; string connectUrl = (scheme == "wss" ? "https://" : "http://") ~ hostPort ~ pathQuery; // Reset 'curl' using curl_easy_reset curl_easy_reset(curl); // Configure required curl options curl_easy_setopt(curl, cast(int)CURLOPT_NOSIGNAL, 1L); curl_easy_setopt(curl, cast(int)CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, cast(int)CURLOPT_USERAGENT, userAgent.toStringz); // NUL-terminated curl_easy_setopt(curl, cast(int)CURLOPT_CONNECTTIMEOUT_MS, cast(long)connectTimeoutMs); curl_easy_setopt(curl, cast(int)CURLOPT_TIMEOUT_MS, cast(long)ioTimeoutMs); curl_easy_setopt(curl, cast(int)CURLOPT_SSL_VERIFYPEER, 1L); curl_easy_setopt(curl, cast(int)CURLOPT_SSL_VERIFYHOST, 2L); curl_easy_setopt(curl, cast(int)CURLOPT_CONNECT_ONLY, 1L); curl_easy_setopt(curl, cast(int)CURLOPT_URL, connectUrl.toStringz); // NUL-terminated // Force HTTP/1.1 and disable ALPN/NPN curl_easy_setopt(curl, cast(int)CURLOPT_SSL_ENABLE_ALPN, 0L); curl_easy_setopt(curl, cast(int)CURLOPT_SSL_ENABLE_NPN, 0L); curl_easy_setopt(curl, cast(int)CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); // Do we enable HTTPS Debugging? if (httpsDebug) { // Enable curl verbosity curl_easy_setopt(curl, cast(int)CURLOPT_VERBOSE, 1L); } else { // Disable curl verbosity curl_easy_setopt(curl, cast(int)CURLOPT_VERBOSE, 0L); } auto rc = curl_easy_perform(curl); if (rc != 0) { logCurlWebsocketOutput("libcurl connect failed"); return -3; } auto req = buildUpgradeRequest(); if (sendAll(req) != 0) { logCurlWebsocketOutput("Failed sending HTTP upgrade request"); return -4; } // Read headers until CRLFCRLF, with deadline (don’t treat 0-bytes as EOF). string hdrs; enum maxHdr = 16 * 1024; auto deadline = MonoTime.currTime + dur!"seconds"(10); { ubyte[4096] tmp; size_t total; for (;;) { int got = recvSome(tmp[]); if (got < 0) { logCurlWebsocketOutput("Failed receiving HTTP upgrade response"); return -5; } if (got == 0) { if (MonoTime.currTime >= deadline) { logCurlWebsocketOutput("Timeout waiting for HTTP upgrade response"); return -6; } continue; } hdrs ~= cast(const(char)[]) tmp[0 .. cast(size_t)got]; total += cast(size_t)got; auto pos = hdrs.indexOf("\r\n\r\n"); if (pos >= 0) { auto remain = hdrs[(cast(size_t)pos + 4) .. hdrs.length]; if (remain.length > 0) { auto ru = cast(const(ubyte)[]) remain; size_t old = recvBuf.length; recvBuf.length = old + ru.length; memcpy(recvBuf.ptr + old, ru.ptr, ru.length); } hdrs = hdrs[0 .. cast(size_t)pos]; break; } if (total > maxHdr) { logCurlWebsocketOutput("HTTP upgrade headers too large"); return -7; } } } { auto firstLineEnd = hdrs.indexOf("\r\n"); string statusLine = firstLineEnd > 0 ? hdrs[0 .. cast(size_t)firstLineEnd] : hdrs; if (statusLine.indexOf("101") < 0) { logCurlWebsocketOutput("HTTP upgrade failed; status line: " ~ statusLine); return -8; } auto low = hdrs.toLower(); if (low.indexOf("upgrade: websocket") < 0 || low.indexOf("connection: upgrade") < 0) { logCurlWebsocketOutput("HTTP upgrade missing expected headers"); return -9; } } // Log that protocol switch confirmed, upgraded to RFC6455 logCurlWebsocketOutput("Received HTTP 101 Switching Protocols confirmed; Upgraded to RFC6455"); websocketConnected = true; return 0; } int close(ushort code = 1000, string reason = "") { logCurlWebsocketOutput("Running curlWebsocket close()"); if (!websocketConnected) { logCurlWebsocketOutput("Websocket already closed - websocketConnected = false"); return 0; } else { logCurlWebsocketOutput("Running curlWebsocket close() - websocketConnected = true"); } // Build close payload: 2 bytes status code (network order) + optional reason ubyte[] pay; pay.length = 2 + reason.length; pay[0] = cast(ubyte)((code >> 8) & 0xFF); pay[1] = cast(ubyte)(code & 0xFF); foreach (i; 0 .. reason.length) pay[2 + i] = cast(ubyte)reason[i]; auto frame = encodeFrame(0x8, pay); // opcode 0x8 = Close auto rc = sendAll(frame); // Even if sending fails, cleanup below so we don’t leak. logCurlWebsocketOutput("Sending RFC6455 Close (code=" ~ to!string(code) ~ ")"); // Flag we are no longer connected with the websocket websocketConnected = false; return rc; } // Cleanup curl handler void cleanupCurlHandle() { // No logging output for this function if (curl !is null) { curl_easy_cleanup(curl); curl = null; } websocketConnected = false; } int sendText(string payload) { if (!websocketConnected) return -1; auto frame = encodeFrame(0x1, cast(const(ubyte)[])payload); return sendAll(frame); } string recvText() { if (!websocketConnected) return ""; for (;;) { auto f = tryParseFrame(); if (f.opcode == 0xFF) { ubyte[4096] tmp; int got = recvSome(tmp[]); if (got <= 0) return ""; size_t old = recvBuf.length; recvBuf.length = old + cast(size_t)got; memcpy(recvBuf.ptr + old, tmp.ptr, cast(size_t)got); continue; } if (f.opcode == 0x1) { return cast(string) f.payload; } else if (f.opcode == 0x9) { auto pong = encodeFrame(0xA, f.payload); auto _ = sendAll(pong); continue; } else if (f.opcode == 0xA) { continue; } else if (f.opcode == 0x8) { websocketConnected = false; return ""; } else { continue; } } } private: struct ParsedUrl { bool ok; string scheme; string host; int port; string hostPort; string pathQuery; } static int parsePortDec(string s) { if (s.length == 0) return 0; int v = 0; foreach (ch; s) { if (ch < '0' || ch > '9') return 0; v = v * 10 + (cast(int)ch - cast(int)'0'); if (v > 65535) return 0; } return v; } ParsedUrl parseWsUrl(string u) { ParsedUrl p; p.ok = false; auto sidx = u.indexOf("://"); if (sidx <= 0) return p; string sc = u[0 .. cast(size_t)sidx]; string rest = u[(cast(size_t)sidx + 3) .. u.length]; auto scl = sc.toLower(); if (scl == "ws") p.scheme = "ws"; else if (scl == "wss") p.scheme = "wss"; else return p; auto slash = rest.indexOf("/"); string hostport; if (slash < 0) { hostport = rest; p.pathQuery = "/"; } else { hostport = rest[0 .. cast(size_t)slash]; p.pathQuery = rest[cast(size_t)slash .. rest.length]; } auto col = hostport.indexOf(":"); if (col >= 0) { p.host = hostport[0 .. cast(size_t)col]; string ps = hostport[(cast(size_t)col + 1) .. hostport.length]; int prt = parsePortDec(ps); if (prt == 0) return p; p.port = prt; p.hostPort = p.host ~ ":" ~ to!string(p.port); } else { p.host = hostport; p.port = (p.scheme == "wss") ? 443 : 80; p.hostPort = p.host; } if (p.pathQuery.length == 0 || p.pathQuery[0] != '/') p.pathQuery = "/" ~ p.pathQuery; p.ok = true; return p; } string buildUpgradeRequest() { // Sec-WebSocket-Key: random 16 bytes, base64 ubyte[16] keyBytes; foreach (i; 0 .. 16) keyBytes[i] = cast(ubyte) uniform(0, 256, rng); auto keyB64 = Base64.encode(keyBytes[]); // Origin header (some proxies expect it) string origin = (scheme == "wss" ? "https://" : "http://") ~ host; string req = "GET " ~ pathQuery ~ " HTTP/1.1\r\n"; req ~= "Host: " ~ hostPort ~ "\r\n"; req ~= "User-Agent: " ~ userAgent ~ "\r\n"; req ~= "Upgrade: websocket\r\n"; req ~= "Connection: Upgrade\r\n"; req ~= "Sec-WebSocket-Version: 13\r\n"; req ~= "Sec-WebSocket-Key: " ~ keyB64 ~ "\r\n"; req ~= "Origin: " ~ origin ~ "\r\n"; req ~= "\r\n"; return req; } int sendAll(const(char)[] data) { size_t sent = 0; while (sent < data.length) { size_t now = 0; auto rc = curl_easy_send(curl, cast(void*)(data.ptr + sent), data.length - sent, &now); if (rc != 0 && now == 0) return -1; sent += now; } return 0; } int sendAll(const(ubyte)[] data) { size_t sent = 0; while (sent < data.length) { size_t now = 0; auto rc = curl_easy_send(curl, cast(void*)(data.ptr + sent), data.length - sent, &now); if (rc != 0 && now == 0) return -1; sent += now; } return 0; } int recvSome(ubyte[] buf) { size_t got = 0; auto rc = curl_easy_recv(curl, cast(void*)buf.ptr, buf.length, &got); if (rc != 0) return 0; // treat EAGAIN etc. as "no bytes now" return cast(int)got; } ubyte[] encodeFrame(ubyte opcode, const(ubyte)[] payload) { Appender!(ubyte[]) outp = appender!(ubyte[])(); outp.reserve(2 + 4 + payload.length + 8); ubyte b0 = cast(ubyte)(0x80 | (opcode & 0x0F)); // FIN=1 outp.put(b0); ubyte maskBit = 0x80; ulong len = cast(ulong)payload.length; if (len <= 125) { outp.put(cast(ubyte)(maskBit | cast(ubyte)len)); } else if (len <= 0xFFFF) { outp.put(cast(ubyte)(maskBit | 126)); outp.put(cast(ubyte)((len >> 8) & 0xFF)); outp.put(cast(ubyte)(len & 0xFF)); } else { outp.put(cast(ubyte)(maskBit | 127)); foreach (shift; AliasSeq!(56, 48, 40, 32, 24, 16, 8, 0)) { outp.put(cast(ubyte)((len >> shift) & 0xFF)); } } ubyte[4] key; foreach (i; 0 .. 4) key[i] = cast(ubyte) uniform(0, 256, rng); outp.put(key[]); auto masked = new ubyte[payload.length]; foreach (i; 0 .. payload.length) masked[i] = payload[i] ^ key[i % 4]; outp.put(masked[]); return outp.data; } WsFrame tryParseFrame() { WsFrame f; f.opcode = 0xFF; if (recvBuf.length < 2) return f; size_t i = 0; ubyte b0 = recvBuf[i]; i += 1; ubyte b1 = recvBuf[i]; i += 1; bool fin = (b0 & 0x80) != 0; ubyte opcode = cast(ubyte)(b0 & 0x0F); bool masked = (b1 & 0x80) != 0; ulong len = cast(ulong)(b1 & 0x7F); if (len == 126) { if (recvBuf.length < i + 2) return f; len = (cast(ulong)recvBuf[i] << 8) | cast(ulong)recvBuf[i + 1]; i += 2; } else if (len == 127) { if (recvBuf.length < i + 8) return f; len = 0; foreach (shift; AliasSeq!(56, 48, 40, 32, 24, 16, 8, 0)) { len |= (cast(ulong)recvBuf[i] << shift); i += 1; } } ubyte[4] key; if (masked) { if (recvBuf.length < i + 4) return f; foreach (k; 0 .. 4) key[k] = recvBuf[i + k]; i += 4; } if (recvBuf.length < i + cast(size_t)len) return f; auto start = i; auto end = i + cast(size_t)len; auto raw = recvBuf[start .. end]; ubyte[] data; if (masked) { data = new ubyte[raw.length]; foreach (idx; 0 .. raw.length) data[idx] = raw[idx] ^ key[idx % 4]; } else { data = raw.dup; } auto consumed = end; auto remainLen = recvBuf.length - consumed; if (remainLen > 0) { memmove(recvBuf.ptr, recvBuf.ptr + consumed, remainLen); } recvBuf.length = remainLen; f.fin = fin ? 1 : 0; f.opcode = opcode; f.masked = masked; f.payloadLen = len; f.maskKey = key; f.payload = data; return f; } } onedrive-2.5.10/src/intune.d000066400000000000000000000175111513710110600156500ustar00rootroot00000000000000// What is this module called? module intune; // What does this module require to function? import core.stdc.string : strcmp; import core.stdc.stdlib : malloc, free; import core.thread : Thread; import core.time : dur; import std.string : fromStringz, toStringz; import std.conv : to; import std.json : JSONValue, parseJSON, JSONType; import std.uuid : randomUUID; import std.range : empty; import std.format : format; // What 'onedrive' modules do we import? import log; extern(C): alias dbus_bool_t = int; struct DBusError { char* name; char* message; uint[8] dummy; void* padding; } struct DBusConnection; struct DBusMessage; struct DBusMessageIter; enum DBusBusType { DBUS_BUS_SESSION = 0, } void dbus_error_init(DBusError* error); void dbus_error_free(DBusError* error); int dbus_error_is_set(DBusError* error); DBusConnection* dbus_bus_get(DBusBusType type, DBusError* error); dbus_bool_t dbus_bus_name_has_owner(DBusConnection* conn, const char* name, DBusError* error); DBusMessage* dbus_message_new_method_call(const char* dest, const char* path, const char* iface, const char* method); dbus_bool_t dbus_connection_send(DBusConnection* conn, DBusMessage* msg, void* client_serial); void dbus_connection_flush(DBusConnection* conn); DBusMessage* dbus_connection_send_with_reply_and_block(DBusConnection* conn, DBusMessage* msg, int timeout_ms, DBusError* error); void dbus_message_unref(DBusMessage* msg); dbus_bool_t dbus_message_iter_init_append(DBusMessage* msg, DBusMessageIter* iter); dbus_bool_t dbus_message_iter_append_basic(DBusMessageIter* iter, int type, const void* value); dbus_bool_t dbus_message_iter_init(DBusMessage* msg, DBusMessageIter* iter); dbus_bool_t dbus_message_iter_get_arg_type(DBusMessageIter* iter); void dbus_message_iter_get_basic(DBusMessageIter* iter, void* value); enum DBUS_TYPE_STRING = 115; enum DBUS_MESSAGE_ITER_SIZE = 128; bool check_intune_broker_available() { version (linux) { DBusError err; dbus_error_init(&err); DBusConnection* conn = dbus_bus_get(DBusBusType.DBUS_BUS_SESSION, &err); if (dbus_error_is_set(&err)) { dbus_error_free(&err); return false; } if (conn is null) return false; dbus_bool_t hasOwner = dbus_bus_name_has_owner(conn, "com.microsoft.identity.broker1", &err); if (dbus_error_is_set(&err)) { dbus_error_free(&err); return false; } return hasOwner != 0; } else { return false; } } bool wait_for_broker(int timeoutSeconds = 10) { int waited = 0; while (waited < timeoutSeconds) { if (check_intune_broker_available()) return true; Thread.sleep(dur!"seconds"(1)); waited++; } return false; } string build_auth_request(string accountJson = "", string clientId = "") { string header = format(`{ "authParameters": { "clientId": "%s", "redirectUri": "https://login.microsoftonline.com/common/oauth2/nativeclient", "authority": "https://login.microsoftonline.com/common", "requestedScopes": [ "Files.ReadWrite", "Files.ReadWrite.All", "Sites.ReadWrite.All", "offline_access" ]`, clientId); string footer = ` } }`; if (!accountJson.empty) return header ~ `,"account": ` ~ accountJson ~ footer; else return header ~ footer; } struct AuthResult { JSONValue brokerTokenResponse; } // Initiate interactive authentication via D-Bus using the Microsoft Identity Broker AuthResult acquire_token_interactive(string clientId) { AuthResult result; version (linux) { if (!wait_for_broker(10)) { addLogEntry("Timed out waiting for Identity Broker to appear on D-Bus"); return result; } // Step 1: Call acquireTokenInteractively and capture account from result DBusError err; dbus_error_init(&err); DBusConnection* conn = dbus_bus_get(DBusBusType.DBUS_BUS_SESSION, &err); if (dbus_error_is_set(&err) || conn is null) return result; DBusMessage* msg = dbus_message_new_method_call( "com.microsoft.identity.broker1", "/com/microsoft/identity/broker1", "com.microsoft.identity.Broker1", "acquireTokenInteractively" ); if (msg is null) return result; string correlationId = randomUUID().toString(); string accountJson = ""; string requestJson = build_auth_request(accountJson, clientId); DBusMessageIter* args = cast(DBusMessageIter*) malloc(DBUS_MESSAGE_ITER_SIZE); if (!dbus_message_iter_init_append(msg, args)) { dbus_message_unref(msg); free(args); return result; } const(char)* protocol = toStringz("0.0"); const(char)* corrId = toStringz(correlationId); const(char)* reqJson = toStringz(requestJson); dbus_message_iter_append_basic(args, DBUS_TYPE_STRING, &protocol); dbus_message_iter_append_basic(args, DBUS_TYPE_STRING, &corrId); dbus_message_iter_append_basic(args, DBUS_TYPE_STRING, &reqJson); free(args); DBusMessage* reply = dbus_connection_send_with_reply_and_block(conn, msg, 60000, &err); dbus_message_unref(msg); if (dbus_error_is_set(&err) || reply is null) { addLogEntry("Interactive call failed"); return result; } DBusMessageIter* iter = cast(DBusMessageIter*) malloc(DBUS_MESSAGE_ITER_SIZE); if (!dbus_message_iter_init(reply, iter)) { dbus_message_unref(reply); free(iter); return result; } char* responseStr; dbus_message_iter_get_basic(iter, &responseStr); dbus_message_unref(reply); free(iter); string jsonResponse = fromStringz(responseStr).idup; if (debugLogging) {addLogEntry("Interactive raw response: " ~ to!string(jsonResponse), ["debug"]);} JSONValue parsed = parseJSON(jsonResponse); if (parsed.type != JSONType.object) return result; auto obj = parsed.object; if ("brokerTokenResponse" in obj) { result.brokerTokenResponse = obj["brokerTokenResponse"]; } } return result; } // Perform silent authentication via D-Bus using the Microsoft Identity Broker AuthResult acquire_token_silently(string accountJson, string clientId) { AuthResult result; version (linux) { DBusError err; dbus_error_init(&err); DBusConnection* conn = dbus_bus_get(DBusBusType.DBUS_BUS_SESSION, &err); if (dbus_error_is_set(&err) || conn is null) return result; DBusMessage* msg = dbus_message_new_method_call( "com.microsoft.identity.broker1", "/com/microsoft/identity/broker1", "com.microsoft.identity.Broker1", "acquireTokenSilently" ); if (msg is null) return result; string correlationId = randomUUID().toString(); string requestJson = build_auth_request(accountJson, clientId); DBusMessageIter* args = cast(DBusMessageIter*) malloc(DBUS_MESSAGE_ITER_SIZE); if (!dbus_message_iter_init_append(msg, args)) { dbus_message_unref(msg); free(args); return result; } const(char)* protocol = toStringz("0.0"); const(char)* corrId = toStringz(correlationId); const(char)* reqJson = toStringz(requestJson); dbus_message_iter_append_basic(args, DBUS_TYPE_STRING, &protocol); dbus_message_iter_append_basic(args, DBUS_TYPE_STRING, &corrId); dbus_message_iter_append_basic(args, DBUS_TYPE_STRING, &reqJson); free(args); DBusMessage* reply = dbus_connection_send_with_reply_and_block(conn, msg, 10000, &err); dbus_message_unref(msg); if (dbus_error_is_set(&err) || reply is null) return result; DBusMessageIter* iter = cast(DBusMessageIter*) malloc(DBUS_MESSAGE_ITER_SIZE); if (!dbus_message_iter_init(reply, iter)) { dbus_message_unref(reply); free(iter); return result; } char* responseStr; dbus_message_iter_get_basic(iter, &responseStr); dbus_message_unref(reply); free(iter); string jsonResponse = fromStringz(responseStr).idup; if (debugLogging) {addLogEntry("Silent raw response: " ~ to!string(jsonResponse), ["debug"]);} JSONValue parsed = parseJSON(jsonResponse); if (parsed.type != JSONType.object) return result; auto obj = parsed.object; if (!("brokerTokenResponse" in obj)) return result; result.brokerTokenResponse = obj["brokerTokenResponse"]; } return result; } onedrive-2.5.10/src/itemdb.d000066400000000000000000001344231513710110600156140ustar00rootroot00000000000000// What is this module called? module itemdb; // What does this module require to function? import std.datetime; import std.exception; import std.path; import std.string; import std.stdio; import std.algorithm.searching; import core.stdc.stdlib; import std.json; import std.conv; import core.sync.mutex; // What other modules that we have created do we need to import? import sqlite; import util; import log; enum ItemType { none, file, dir, remote, root, unknown } struct Item { string driveId; string id; string name; string remoteName; ItemType type; string eTag; string cTag; SysTime mtime; string parentId; string quickXorHash; string sha256Hash; string remoteDriveId; string remoteParentId; string remoteId; ItemType remoteType; string syncStatus; string size; string relocDriveId; string relocParentId; } // Construct an Item DB struct from a JSON driveItem Item makeDatabaseItem(JSONValue driveItem) { Item item = { id: driveItem["id"].str, name: "name" in driveItem ? driveItem["name"].str : null, // name may be missing for deleted files in OneDrive Business eTag: "eTag" in driveItem ? driveItem["eTag"].str : null, // eTag is not returned for the root in OneDrive Business cTag: "cTag" in driveItem ? driveItem["cTag"].str : null, // cTag is missing in old files (and all folders in OneDrive Business) remoteName: "actualOnlineName" in driveItem ? driveItem["actualOnlineName"].str : null, // actualOnlineName is only used with OneDrive Business Shared Folders }; // OneDrive API Change: https://github.com/OneDrive/onedrive-api-docs/issues/834 // OneDrive no longer returns lastModifiedDateTime if the item is deleted by OneDrive if(isItemDeleted(driveItem)) { // Set mtime to SysTime(0) item.mtime = SysTime(0); } else { // Item is not in a deleted state string lastModifiedTimestamp; // Resolve 'Key not found: fileSystemInfo' when then item is a remote item // https://github.com/abraunegg/onedrive/issues/11 if (isItemRemote(driveItem)) { // remoteItem is a OneDrive object that exists on a 'different' OneDrive drive id, when compared to account default // Normally, the 'remoteItem' field will contain 'fileSystemInfo' however, if the user uses the 'Add Shortcut ..' option in OneDrive WebUI // to create a 'link', this object, whilst remote, does not have 'fileSystemInfo' in the expected place, thus leading to a application crash // See: https://github.com/abraunegg/onedrive/issues/1533 if ("fileSystemInfo" in driveItem["remoteItem"]) { // 'fileSystemInfo' is in 'remoteItem' which will be the majority of cases lastModifiedTimestamp = strip(driveItem["remoteItem"]["fileSystemInfo"]["lastModifiedDateTime"].str); // is lastModifiedTimestamp valid? if (isValidUTCDateTime(lastModifiedTimestamp)) { // string is a valid timestamp item.mtime = SysTime.fromISOExtString(lastModifiedTimestamp); } else { // invalid timestamp from JSON file addLogEntry("WARNING: Invalid timestamp provided by the Microsoft OneDrive API: " ~ lastModifiedTimestamp); // Set mtime to Clock.currTime(UTC()) to ensure we have a valid UTC value item.mtime = Clock.currTime(UTC()); } } else { // is a remote item, but 'fileSystemInfo' is missing from 'remoteItem' lastModifiedTimestamp = strip(driveItem["fileSystemInfo"]["lastModifiedDateTime"].str); // is lastModifiedTimestamp valid? if (isValidUTCDateTime(lastModifiedTimestamp)) { // string is a valid timestamp item.mtime = SysTime.fromISOExtString(lastModifiedTimestamp); } else { // invalid timestamp from JSON file addLogEntry("WARNING: Invalid timestamp provided by the Microsoft OneDrive API: " ~ lastModifiedTimestamp); // Set mtime to Clock.currTime(UTC()) to ensure we have a valid UTC value item.mtime = Clock.currTime(UTC()); } } } else { // Does fileSystemInfo exist at all ? if ("fileSystemInfo" in driveItem) { // fileSystemInfo exists lastModifiedTimestamp = strip(driveItem["fileSystemInfo"]["lastModifiedDateTime"].str); // is lastModifiedTimestamp valid? if (isValidUTCDateTime(lastModifiedTimestamp)) { // string is a valid timestamp item.mtime = SysTime.fromISOExtString(lastModifiedTimestamp); } else { // invalid timestamp from JSON file addLogEntry("WARNING: Invalid timestamp provided by the Microsoft OneDrive API: " ~ lastModifiedTimestamp); // Set mtime to Clock.currTime(UTC()) to ensure we have a valid UTC value item.mtime = Clock.currTime(UTC()); } } else { // no timestamp from JSON file addLogEntry("WARNING: No timestamp provided by the Microsoft OneDrive API - using current system time for item!"); // Set mtime to Clock.currTime(UTC()) to ensure we have a valid UTC value item.mtime = Clock.currTime(UTC()); } } } // Set this item object type bool typeSet = false; if (isItemFile(driveItem)) { // 'file' object exists in the JSON if (debugLogging) {addLogEntry("Flagging database item.type as a file", ["debug"]);} typeSet = true; item.type = ItemType.file; } if (isItemFolder(driveItem)) { // 'folder' object exists in the JSON if (debugLogging) {addLogEntry("Flagging database item.type as a directory", ["debug"]);} typeSet = true; item.type = ItemType.dir; } if (isItemRemote(driveItem)) { // 'remote' object exists in the JSON if (debugLogging) {addLogEntry("Flagging database item.type as a remote", ["debug"]);} typeSet = true; item.type = ItemType.remote; } // root and remote items do not have parentReference if (!isItemRoot(driveItem) && ("parentReference" in driveItem) != null) { item.driveId = driveItem["parentReference"]["driveId"].str; if (hasParentReferenceId(driveItem)) { item.parentId = driveItem["parentReference"]["id"].str; } } // extract the file hash and file size if (isItemFile(driveItem) && ("hashes" in driveItem["file"])) { // Get file size if (hasFileSize(driveItem)) { item.size = to!string(driveItem["size"].integer); // Get quickXorHash as default if ("quickXorHash" in driveItem["file"]["hashes"]) { item.quickXorHash = driveItem["file"]["hashes"]["quickXorHash"].str; } else { if (debugLogging) {addLogEntry("quickXorHash is missing from " ~ driveItem["id"].str, ["debug"]);} } // If quickXorHash is empty .. if (item.quickXorHash.empty) { // Is there a sha256Hash? if ("sha256Hash" in driveItem["file"]["hashes"]) { item.sha256Hash = driveItem["file"]["hashes"]["sha256Hash"].str; } else { if (debugLogging) {addLogEntry("sha256Hash is missing from " ~ driveItem["id"].str, ["debug"]);} } } } else { // So that we have at least a zero value here as the API provided no 'size' data for this file item item.size = "0"; } } // Is the object a remote drive item - living on another driveId ? if (isItemRemote(driveItem)) { // Check and assign remoteDriveId if ("parentReference" in driveItem["remoteItem"] && "driveId" in driveItem["remoteItem"]["parentReference"]) { item.remoteDriveId = driveItem["remoteItem"]["parentReference"]["driveId"].str; } // Check and assign remoteParentId if ("parentReference" in driveItem["remoteItem"] && "id" in driveItem["remoteItem"]["parentReference"]) { item.remoteParentId = driveItem["remoteItem"]["parentReference"]["id"].str; } // Check and assign remoteId if ("id" in driveItem["remoteItem"]) { item.remoteId = driveItem["remoteItem"]["id"].str; } // Check and assign remoteType if ("file" in driveItem["remoteItem"].object) { item.remoteType = ItemType.file; } else { item.remoteType = ItemType.dir; } } // We have 4 different operational modes where 'item.syncStatus' is used to flag if an item is synced or not: // - National Cloud Deployments do not support /delta as a query // - When using --single-directory // - When using --download-only --cleanup-local-files // - Are we scanning a Shared Folder // // Thus we need to track in the database that this item is in sync // As we are making an item, set the syncStatus to Y // ONLY when either of the three modes above are being used, all the existing DB entries will get set to N // so when processing /children, it can be identified what the 'deleted' difference is item.syncStatus = "Y"; // Return the created item return item; } final class ItemDatabase { // increment this for every change in the db schema immutable int itemDatabaseVersion = 18; Database db; string insertItemStmt; string updateItemStmt; string deleteOrphanItemStmt; string selectItemByIdStmt; string selectItemByRemoteIdStmt; string selectItemByRemoteDriveIdStmt; string selectItemByParentIdStmt; string selectRemoteTypeByNameStmt; string selectRemoteTypeByRemoteDriveIdStmt; string deleteItemByIdStmt; bool databaseInitialised = false; private Mutex databaseLock; this(string filename) { // Initialise the mutex databaseLock = new Mutex(); db = Database(filename); int dbVersion; try { dbVersion = db.getVersion(); } catch (SqliteException exception) { // An error was generated - what was the error? // - database is locked if (exception.msg == "database is locked" || exception.errorCode == 5) { addLogEntry(); addLogEntry("ERROR: The 'onedrive' application is already running - please check system process list for active application instances" , ["info", "notify"]); addLogEntry(" - Use 'sudo ps aufxw | grep onedrive' to potentially determine active running process"); addLogEntry(); } else { // A different error .. detail the message, detail the actual SQLite Error Code to assist with troubleshooting addLogEntry(); addLogEntry("ERROR: An internal database error occurred: " ~ exception.msg ~ " (SQLite Error Code: " ~ to!string(exception.errorCode) ~ ")"); addLogEntry(); // Give the user some additional information and pointers on this error // The below list is based on user issue / discussion reports since 2018 switch (exception.errorCode) { case 7: // SQLITE_NOMEM addLogEntry("The operation could not be completed due to insufficient memory. Please close unnecessary applications to free up memory and try again.", ["info", "notify"]); break; case 10: // SQLITE_IOERR addLogEntry("A disk I/O error occurred. This could be due to issues with the storage medium (e.g., disk full, hardware failure, filesystem corruption).\nPlease check your disk's health using a disk utility tool, ensure there is enough free space, and check the filesystem for errors.", ["info", "notify"]); break; case 11: // SQLITE_CORRUPT addLogEntry("The database file appears to be corrupt. This could be due to incomplete or failed writes, hardware issues, or unexpected interruptions during database operations.\nPlease perform a --resync operation.", ["info", "notify"]); break; case 14: // SQLITE_CANTOPEN addLogEntry("The database file could not be opened. Please check that the database file exists, has the correct permissions, and is not being blocked by another process or security software.", ["info", "notify"]); break; case 26: // SQLITE_NOTADB addLogEntry("The database file that attempted to be opened does not appear to be a valid SQLite database, or it may have been corrupted to a point where it's no longer recognisable.\nPlease check your application configuration directory and/or perform a --resync operation.", ["info", "notify"]); break; default: addLogEntry("An unexpected error occurred. Please consult the application documentation or request support to resolve this issue.", ["info", "notify"]); break; } // Blank line before exit addLogEntry(); } return; } if (dbVersion == 0) { createTable(); } else if (db.getVersion() != itemDatabaseVersion) { addLogEntry("The item database is incompatible, re-creating database table structures"); db.dropTableIfExists("item"); // Check and drop table if it exists createTable(); } // What is the threadsafe value auto threadsafeValue = db.getThreadsafeValue(); if (debugLogging) {addLogEntry("SQLite Threadsafe database value: " ~ to!string(threadsafeValue), ["debug"]);} try { // Set the enforcement of foreign key constraints. // https://www.sqlite.org/pragma.html#pragma_foreign_keys // PRAGMA foreign_keys = boolean; db.exec("PRAGMA foreign_keys = TRUE;"); // Set the recursive trigger capability // https://www.sqlite.org/pragma.html#pragma_recursive_triggers // PRAGMA recursive_triggers = boolean; db.exec("PRAGMA recursive_triggers = TRUE;"); // Set the journal mode for databases associated with the current connection // https://www.sqlite.org/pragma.html#pragma_journal_mode db.exec("PRAGMA journal_mode = WAL;"); // Only checkpoint if WAL grows past a certain size db.exec("PRAGMA wal_autocheckpoint = 1000;"); // Automatic indexing is enabled by default as of version 3.7.17 // https://www.sqlite.org/pragma.html#pragma_automatic_index // PRAGMA automatic_index = boolean; db.exec("PRAGMA automatic_index = FALSE;"); // Tell SQLite to store temporary tables in memory. This will speed up many read operations that rely on temporary tables, indices, and views. // https://www.sqlite.org/pragma.html#pragma_temp_store db.exec("PRAGMA temp_store = MEMORY;"); // Tell SQlite to cleanup database table size // https://www.sqlite.org/pragma.html#pragma_auto_vacuum // PRAGMA schema.auto_vacuum = 0 | NONE | 1 | FULL | 2 | INCREMENTAL; db.exec("PRAGMA auto_vacuum = FULL;"); // This pragma sets or queries the database connection locking-mode. The locking-mode is either NORMAL or EXCLUSIVE. // https://www.sqlite.org/pragma.html#pragma_locking_mode // PRAGMA schema.locking_mode = NORMAL | EXCLUSIVE db.exec("PRAGMA locking_mode = EXCLUSIVE;"); // The synchronous setting determines how carefully SQLite writes data to disk, balancing between performance and data safety. // https://sqlite.org/pragma.html#pragma_synchronous // PRAGMA synchronous = 0 | OFF | 1 | NORMAL | 2 | FULL | 3 | EXTRA; db.exec("PRAGMA synchronous=FULL;"); // Leave this as FULL, this is the sqlite default, ensure this is set to FULL } catch (SqliteException exception) { detailSQLErrorMessage(exception); } insertItemStmt = " INSERT OR REPLACE INTO item (driveId, id, name, remoteName, type, eTag, cTag, mtime, parentId, quickXorHash, sha256Hash, remoteDriveId, remoteParentId, remoteId, remoteType, syncStatus, size, relocDriveId, relocParentId) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18, ?19) "; updateItemStmt = " UPDATE item SET name = ?3, remoteName = ?4, type = ?5, eTag = ?6, cTag = ?7, mtime = ?8, parentId = ?9, quickXorHash = ?10, sha256Hash = ?11, remoteDriveId = ?12, remoteParentId = ?13, remoteId = ?14, remoteType = ?15, syncStatus = ?16, size = ?17, relocDriveId = ?18, relocParentId = ?19 WHERE driveId = ?1 AND id = ?2 "; deleteOrphanItemStmt = " DELETE FROM item WHERE driveId = ?1 AND parentId = ?9 AND name = ?3 "; selectItemByIdStmt = " SELECT * FROM item WHERE driveId = ?1 AND id = ?2 "; selectItemByRemoteIdStmt = " SELECT * FROM item WHERE remoteDriveId = ?1 AND remoteId = ?2 "; selectItemByRemoteDriveIdStmt = " SELECT * FROM item WHERE remoteDriveId = ?1 "; selectRemoteTypeByNameStmt = " SELECT * FROM item WHERE type = 'remote' AND name = ?1 "; selectRemoteTypeByRemoteDriveIdStmt = " SELECT * FROM item WHERE type = 'remote' AND remoteDriveId = ?1 AND remoteId = ?2 "; selectItemByParentIdStmt = "SELECT * FROM item WHERE driveId = ? AND parentId = ?"; deleteItemByIdStmt = "DELETE FROM item WHERE driveId = ? AND id = ?"; // flag that the database is accessible and we have control databaseInitialised = true; } ~this() { closeDatabaseFile(); } bool isDatabaseInitialised() { return databaseInitialised; } void closeDatabaseFile() { if (databaseInitialised) { db.close(); } databaseInitialised = false; } void createTable() { db.exec("CREATE TABLE item ( driveId TEXT NOT NULL, id TEXT NOT NULL, name TEXT NOT NULL, remoteName TEXT, type TEXT NOT NULL, eTag TEXT, cTag TEXT, mtime TEXT NOT NULL, parentId TEXT, quickXorHash TEXT, sha256Hash TEXT, remoteDriveId TEXT, remoteParentId TEXT, remoteId TEXT, remoteType TEXT, deltaLink TEXT, syncStatus TEXT, size TEXT, relocDriveId TEXT, relocParentId TEXT, PRIMARY KEY (driveId, id), FOREIGN KEY (driveId, parentId) REFERENCES item (driveId, id) ON DELETE CASCADE ON UPDATE RESTRICT )"); db.exec("CREATE INDEX name_idx ON item (name)"); db.exec("CREATE INDEX remote_idx ON item (remoteDriveId, remoteId)"); db.exec("CREATE INDEX item_children_idx ON item (driveId, parentId)"); db.exec("CREATE INDEX selectByPath_idx ON item (name, driveId, parentId)"); db.setVersion(itemDatabaseVersion); } void detailSQLErrorMessage(SqliteException exception) { addLogEntry(); addLogEntry("A database statement execution error occurred: " ~ exception.msg); addLogEntry(); switch (exception.errorCode) { case 7: // SQLITE_FULL case 8: // SQLITE_READONLY case 10: // SQLITE_SCHEMA case 11: // SQLITE_CORRUPT case 17: // SQLITE_IOERR case 21: // SQLITE_NOMEM case 22: // SQLITE_MISUSE case 26: // SQLITE_NOTADB case 27: // SQLITE_CANTOPEN addLogEntry("Fatal SQLite error encountered. Error code: " ~ to!string(exception.errorCode), ["info", "notify"]); addLogEntry(); // Must exit here forceExit(); // This line is needed, even though the application technically never gets here .. // - Error: switch case fallthrough - use 'goto default;' if intended goto default; default: addLogEntry("Please restart the application with --resync to potentially fix any local database issues."); // Handle non-fatal errors or continue execution break; } } void insert(const ref Item item) { synchronized(databaseLock) { auto p = db.prepare(insertItemStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { bindItem(item, p); p.exec(); } catch (SqliteException exception) { detailSQLErrorMessage(exception); } } } void update(const ref Item item) { synchronized(databaseLock) { auto p = db.prepare(updateItemStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { bindItem(item, p); p.exec(); } catch (SqliteException exception) { detailSQLErrorMessage(exception); } } } void dump_open_statements() { synchronized(databaseLock) { db.dump_open_statements(); } } int db_checkpoint() { synchronized(databaseLock) { return db.db_checkpoint(); } } void upsert(const ref Item item) { synchronized(databaseLock) { Statement selectStmt = db.prepare("SELECT COUNT(*) FROM item WHERE driveId = ? AND id = ?"); Statement selectParentalStmt = db.prepare("SELECT COUNT(*) FROM item WHERE driveId = ? AND parentId = ? AND name = ?"); Statement executionStmt = Statement.init; // Initialise executionStmt to avoid uninitialised variable usage scope(exit) { selectStmt.finalise(); selectParentalStmt.finalise(); executionStmt.finalise(); } try { if (debugLogging) { addLogEntry("Attempting upsert for item: driveId='" ~ item.driveId ~ "', id='" ~ item.id ~ "', parentId='" ~ item.parentId ~ "', name='" ~ item.name ~ "'", ["debug"]); } selectStmt.bind(1, item.driveId); selectStmt.bind(2, item.id); auto result = selectStmt.exec(); size_t count = result.front[0].to!size_t; // If the existing 'driveId' and 'id' are in the DB, then this is a record to update if (count == 0) { // Item with id not found, check for orphaned entry by parentId and name // - If the user has deleted and recreated the folder online with the same name, whilst we may have an existing entry, this will have the old 'id' selectParentalStmt.bind(1, item.driveId); selectParentalStmt.bind(2, item.parentId); selectParentalStmt.bind(3, item.name); auto orphanResult = selectParentalStmt.exec(); size_t orphanCount = orphanResult.front[0].to!size_t; // Were orphans found? if (orphanCount == 0) { // No match on name+parentId either — new insert if (debugLogging) { addLogEntry("Inserting new item: driveId='" ~ item.driveId ~ "', id='" ~ item.id ~ "', parentId='" ~ item.parentId ~ "', name='" ~ item.name ~ "'", ["debug"]); } executionStmt = db.prepare(insertItemStmt); } else { // Orphans found if (debugLogging) { addLogEntry("Orphan lookup: count=" ~ to!string(orphanCount) ~ " for driveId='" ~ item.driveId ~ "', parentId='" ~ item.parentId ~ "', name='" ~ item.name ~ "'", ["debug"]); addLogEntry("Orphaned DB Entry - deleting old entry for name='" ~ item.name ~ "' and parentId='" ~ item.parentId ~ "'", ["debug"]); } // Orphan exists, delete it first auto deleteOrphan = db.prepare(deleteOrphanItemStmt); deleteOrphan.bind(1, item.driveId); deleteOrphan.bind(2, item.parentId); deleteOrphan.bind(3, item.name); deleteOrphan.exec(); deleteOrphan.finalise(); if (debugLogging) { addLogEntry("Deleted orphaned entry — now inserting new item: id='" ~ item.id ~ "', parentId='" ~ item.parentId ~ "', name='" ~ item.name ~ "'", ["debug"]); } executionStmt = db.prepare(insertItemStmt); } } else { // Found by ID — perform update if (debugLogging) { addLogEntry("Updating existing DB record: id='" ~ item.id ~ "', parentId='" ~ item.parentId ~ "', name='" ~ item.name ~ "'", ["debug"]); } executionStmt = db.prepare(updateItemStmt); } bindItem(item, executionStmt); executionStmt.exec(); } catch (SqliteException exception) { // Handle errors appropriately detailSQLErrorMessage(exception); } } } Item[] selectChildren(const(char)[] driveId, const(char)[] id) { synchronized(databaseLock) { Item[] items; auto p = db.prepare(selectItemByParentIdStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { p.bind(1, driveId); p.bind(2, id); auto res = p.exec(); while (!res.empty) { items ~= buildItem(res); res.step(); } return items; } catch (SqliteException exception) { // Handle errors appropriately detailSQLErrorMessage(exception); items = []; return items; // Return an empty array on error } } } bool selectById(const(char)[] driveId, const(char)[] id, out Item item) { synchronized(databaseLock) { auto p = db.prepare(selectItemByIdStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { p.bind(1, driveId); p.bind(2, id); auto r = p.exec(); if (!r.empty) { item = buildItem(r); return true; } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return false; } } bool selectByRemoteId(const(char)[] remoteDriveId, const(char)[] remoteId, out Item item) { synchronized(databaseLock) { auto p = db.prepare(selectItemByRemoteIdStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { p.bind(1, remoteDriveId); p.bind(2, remoteId); auto r = p.exec(); if (!r.empty) { item = buildItem(r); return true; } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return false; } } // This should return the 'remote' DB entry for a given remote drive id bool selectByRemoteDriveId(const(char)[] remoteDriveId, out Item item) { synchronized(databaseLock) { auto p = db.prepare(selectItemByRemoteDriveIdStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { p.bind(1, remoteDriveId); auto r = p.exec(); if (!r.empty) { item = buildItem(r); return true; } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return false; } } // This should return the 'remote' DB entry for the given 'name' bool selectByRemoteEntryByName(const(char)[] entryName, out Item item) { synchronized(databaseLock) { auto p = db.prepare(selectRemoteTypeByNameStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { p.bind(1, entryName); auto r = p.exec(); if (!r.empty) { item = buildItem(r); return true; } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return false; } } // This should return the 'remote' DB entry for the given 'remoteDriveId' and 'remoteId' bool selectRemoteTypeByRemoteDriveId(const(char)[] remoteDriveId, const(char)[] remoteId, out Item item) { synchronized(databaseLock) { auto p = db.prepare(selectRemoteTypeByRemoteDriveIdStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { p.bind(1, remoteDriveId); p.bind(2, remoteId); auto r = p.exec(); if (!r.empty) { item = buildItem(r); return true; } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return false; } } // returns true if an item id is in the database bool idInLocalDatabase(const(string) driveId, const(string) id) { synchronized(databaseLock) { auto p = db.prepare(selectItemByIdStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { p.bind(1, driveId); p.bind(2, id); auto r = p.exec(); return !r.empty; } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); return false; } } } // returns the item with the given path // the path is relative to the sync directory ex: "./Music/file_name.mp3" bool selectByPath(const(char)[] path, string rootDriveId, out Item item) { synchronized(databaseLock) { Item currItem = { driveId: rootDriveId }; // Issue https://github.com/abraunegg/onedrive/issues/578 path = "root/" ~ (startsWith(path, "./") || path == "." ? path.chompPrefix(".") : path); auto s = db.prepare("SELECT * FROM item WHERE name = ?1 AND driveId IS ?2 AND parentId IS ?3"); scope(exit) s.finalise(); // Ensure that the prepared statement is finalised after execution. try { foreach (name; pathSplitter(path)) { s.bind(1, name); s.bind(2, currItem.driveId); s.bind(3, currItem.id); auto r = s.exec(); if (r.empty) return false; currItem = buildItem(r); // If the item is of type remote, substitute it with the child if (currItem.type == ItemType.remote) { if (debugLogging) {addLogEntry("Record is a Remote Object: " ~ to!string(currItem), ["debug"]);} Item child; if (selectById(currItem.remoteDriveId, currItem.remoteId, child)) { assert(child.type != ItemType.remote, "The type of the child cannot be remote"); currItem = child; if (debugLogging) {addLogEntry("Selecting Record that is NOT Remote Object: " ~ to!string(currItem), ["debug"]);} } } } item = currItem; return true; } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); return false; } } } // same as selectByPath() but it does not traverse remote folders, returns the remote element if that is what is required bool selectByPathIncludingRemoteItems(const(char)[] path, string rootDriveId, out Item item) { synchronized(databaseLock) { Item currItem = { driveId: rootDriveId }; // Issue https://github.com/abraunegg/onedrive/issues/578 path = "root/" ~ (startsWith(path, "./") || path == "." ? path.chompPrefix(".") : path); auto s = db.prepare("SELECT * FROM item WHERE name IS ?1 AND driveId IS ?2 AND parentId IS ?3"); scope(exit) s.finalise(); // Ensure that the prepared statement is finalised after execution. try { foreach (name; pathSplitter(path)) { s.bind(1, name); s.bind(2, currItem.driveId); s.bind(3, currItem.id); auto r = s.exec(); if (r.empty) return false; currItem = buildItem(r); } if (currItem.type == ItemType.remote) { if (debugLogging) {addLogEntry("Record selected is a Remote Object: " ~ to!string(currItem), ["debug"]);} } item = currItem; return true; } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); return false; } } } void deleteById(const(char)[] driveId, const(char)[] id) { synchronized(databaseLock) { auto p = db.prepare(deleteItemByIdStmt); scope(exit) p.finalise(); // Ensure that the prepared statement is finalised after execution. try { p.bind(1, driveId); p.bind(2, id); p.exec(); } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } } } private void bindItem(const ref Item item, ref Statement stmt) { with (stmt) with (item) { bind(1, driveId); bind(2, id); bind(3, name); bind(4, remoteName); // type handling string typeStr = null; final switch (type) with (ItemType) { case file: typeStr = "file"; break; case dir: typeStr = "dir"; break; case remote: typeStr = "remote"; break; case root: typeStr = "root"; break; case unknown: typeStr = "unknown"; break; case none: typeStr = null; break; } bind(5, typeStr); bind(6, eTag); bind(7, cTag); bind(8, mtime.toISOExtString()); bind(9, parentId); bind(10, quickXorHash); bind(11, sha256Hash); bind(12, remoteDriveId); bind(13, remoteParentId); bind(14, remoteId); // remoteType handling string remoteTypeStr = null; final switch (remoteType) with (ItemType) { case file: remoteTypeStr = "file"; break; case dir: remoteTypeStr = "dir"; break; case remote: remoteTypeStr = "remote"; break; case root: remoteTypeStr = "root"; break; case unknown: remoteTypeStr = "unknown"; break; case none: remoteTypeStr = null; break; } bind(15, remoteTypeStr); bind(16, syncStatus); bind(17, size); bind(18, relocDriveId); bind(19, relocParentId); } } private Item buildItem(Statement.Result result) { assert(!result.empty, "The DB result must not be empty"); assert(result.front.length == 20, "The DB result must have 20 columns"); // Check the DB record timestamp entry. Rather than assert(), use forceExit() and exit in a more graceful manner // - empty values // - 2024-11-23T01:16:14\x80Z // - ��Ϣc (#3014) // - ����� (#2876) // - non timestamp formatted strings such as 'CurlEngine curlEngin' (#2813) if (!isValidUTCDateTime(result.front[7].dup)) { addLogEntry(); addLogEntry("FATAL: The DB record mtime entry is not a valid ISO timestamp entry. Please attempt a --resync to fix the local database."); addLogEntry(); // Must force exit here, allow logging to be done forceExit(); } Item item = { // column 0: driveId // column 1: id // column 2: name // column 3: remoteName - only used when there is a difference in the local name & remote shared folder name // column 4: type // column 5: eTag // column 6: cTag // column 7: mtime // column 8: parentId // column 9: quickXorHash // column 10: sha256Hash // column 11: remoteDriveId // column 12: remoteParentId // column 13: remoteId // column 14: remoteType // column 15: deltaLink // column 16: syncStatus // column 17: size // column 18: relocDriveId // column 19: relocParentId driveId: result.front[0].dup, id: result.front[1].dup, name: result.front[2].dup, remoteName: result.front[3].dup, // Column 4 is type - not set here eTag: result.front[5].dup, cTag: result.front[6].dup, mtime: SysTime.fromISOExtString(result.front[7].dup), parentId: result.front[8].dup, quickXorHash: result.front[9].dup, sha256Hash: result.front[10].dup, remoteDriveId: result.front[11].dup, remoteParentId: result.front[12].dup, remoteId: result.front[13].dup, // Column 14 is remoteType - not set here // Column 15 is deltaLink - not set here syncStatus: result.front[16].dup, size: result.front[17].dup, relocDriveId: result.front[18].dup, relocParentId: result.front[19].dup }; // Configure item.type switch (result.front[4]) { case "file": item.type = ItemType.file; break; case "dir": item.type = ItemType.dir; break; case "remote": item.type = ItemType.remote; break; case "root": item.type = ItemType.root; break; default: assert(0, "Invalid item type"); } // Configure item.remoteType switch (result.front[14]) { // We only care about 'dir' and 'file' for 'remote' items case "file": item.remoteType = ItemType.file; break; case "dir": item.remoteType = ItemType.dir; break; default: item.remoteType = ItemType.none; break; // Default to ItemType.none } // Return item return item; } // Computes the relative path of the given item ID as stored in the OneDrive item database. // // The path is reconstructed by traversing the item's parent hierarchy via parentId, // optionally resolving relocation fields (relocDriveId and relocParentId) if present. // The returned path is relative to the configured sync directory, e.g. "Music/Turbo Killer.mp3". // // Behaviour includes: // - Handling normal items and directory structures // - Supporting relocated shared folder roots via relocDriveId and relocParentId // - Skipping inclusion of any item with ItemType.root to avoid adding "root" as a path segment // - Ensuring folders named "root" (with ItemType.dir) are still correctly included // // Note: The returned path does not end with a trailing slash, even for directories. string computePath(const(char)[] driveIdInput, const(char)[] itemIdInput) { synchronized(databaseLock) { assert(driveIdInput && itemIdInput); string path; string driveId = driveIdInput.idup; string id = itemIdInput.idup; Item item; // Remember the highest non-root node we saw in this drive string anchorCandidateDriveId; string anchorCandidateItemId; // DB Statements auto s = db.prepare("SELECT * FROM item WHERE driveId = ?1 AND id = ?2"); auto s2 = db.prepare("SELECT driveId, id FROM item WHERE remoteDriveId = ?1 AND remoteId = ?2"); scope(exit) { s.finalise(); // Ensure that the prepared statement is finalised after execution. s2.finalise(); // Ensure that the prepared statement is finalised after execution. } // Attempt to compute the path based on the elements provided try { while (true) { s.bind(1, driveId); s.bind(2, id); auto r = s.exec(); if (!r.empty) { item = buildItem(r); // Track the highest non-root row we encounter if (item.type != ItemType.root) { anchorCandidateDriveId = driveId; anchorCandidateItemId = item.id; } // Build path: Skip only if name == "root" AND item.type == ItemType.root const bool skipAppend = (item.name == "root") && (item.type == ItemType.root); if (!skipAppend) { if (item.type == ItemType.remote) { // replace first segment with remote name auto idx = indexOf(path, '/'); path = (idx >= 0) ? item.name ~ path[idx .. $] : item.name; } else { path = path.length ? item.name ~ "/" ~ path : item.name; } } // Move up one level (within the same drive) id = item.parentId; // Check for relocation and handle the relocation if (item.type == ItemType.root && item.relocDriveId !is null && item.relocParentId !is null) { driveId = item.relocDriveId; id = item.relocParentId; } } else { // We fell off the top (id == null). Try to jump to the anchor (mount point). if (id == null) { // Use the top-most NON-ROOT we saw, not the root we just processed if (anchorCandidateItemId.length) { s2.bind(1, anchorCandidateDriveId); // remoteDriveId s2.bind(2, anchorCandidateItemId); // remoteId (top-most folder) auto r2 = s2.exec(); if (r2.empty) { break; // no anchor -> done } else { // Jump into the drive that contains the remote mount point driveId = r2.front[0].dup; id = r2.front[1].dup; // loop continues; next iteration will fetch the 'remote' row } } else { // no candidate (single item or broken tree) break; } } else { // broken database tree addLogEntry("The following generated a broken database tree query:"); addLogEntry("Drive ID: " ~ to!string(driveId)); addLogEntry("Item ID: " ~ to!string(id)); assert(0); } } } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } if (path.length == 0) { path = "."; } // Return the computed path return path; } } Item[] selectRemoteItems() { synchronized(databaseLock) { Item[] items; auto stmt = db.prepare("SELECT * FROM item WHERE remoteDriveId IS NOT NULL"); scope (exit) stmt.finalise(); // Ensure that the prepared statement is finalised after execution. try { auto res = stmt.exec(); while (!res.empty) { items ~= buildItem(res); res.step(); } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return items; } } string getDeltaLink(const(char)[] driveId, const(char)[] id) { synchronized(databaseLock) { // Log what we received if (debugLogging) { addLogEntry("DeltaLink Query (driveId): " ~ to!string(driveId), ["debug"]); addLogEntry("DeltaLink Query (id): " ~ to!string(id), ["debug"]); } // assert if these are null assert(driveId && id); auto stmt = db.prepare("SELECT deltaLink FROM item WHERE driveId = ?1 AND id = ?2"); scope(exit) stmt.finalise(); // Ensure that the prepared statement is finalised after execution. try { stmt.bind(1, driveId); stmt.bind(2, id); auto res = stmt.exec(); if (res.empty) return null; return res.front[0].dup; } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); return null; } } } void setDeltaLink(const(char)[] driveId, const(char)[] id, const(char)[] deltaLink) { synchronized(databaseLock) { assert(driveId && id); assert(deltaLink); auto stmt = db.prepare("UPDATE item SET deltaLink = ?3 WHERE driveId = ?1 AND id = ?2"); scope(exit) stmt.finalise(); // Ensure that the prepared statement is finalised after execution. try { stmt.bind(1, driveId); stmt.bind(2, id); stmt.bind(3, deltaLink); stmt.exec(); } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } } } // We have 4 different operational modes where 'item.syncStatus' is used to flag if an item is synced or not: // - National Cloud Deployments do not support /delta as a query // - When using --single-directory // - When using --download-only --cleanup-local-files // - Are we scanning a Shared Folder // // As we query /children to get all children from OneDrive, update anything in the database // to be flagged as not-in-sync, thus, we can use that flag to determine what was previously // in-sync, but now deleted on OneDrive void downgradeSyncStatusFlag(const(char)[] driveId, const(char)[] id) { synchronized(databaseLock) { assert(driveId); auto stmt = db.prepare("UPDATE item SET syncStatus = 'N' WHERE driveId = ?1 AND id = ?2"); scope(exit) { stmt.finalise(); // Ensure that the prepared statement is finalised after execution. } try { stmt.bind(1, driveId); stmt.bind(2, id); stmt.exec(); } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } } } // We have 4 different operational modes where 'item.syncStatus' is used to flag if an item is synced or not: // - National Cloud Deployments do not support /delta as a query // - When using --single-directory // - When using --download-only --cleanup-local-files // - Are we scanning a Shared Folder // // Select items that have a out-of-sync flag set Item[] selectOutOfSyncItems(const(char)[] driveId) { synchronized(databaseLock) { assert(driveId); Item[] items; auto stmt = db.prepare("SELECT * FROM item WHERE syncStatus = 'N' AND driveId = ?1"); scope(exit) stmt.finalise(); // Ensure that the prepared statement is finalised after execution. try { stmt.bind(1, driveId); auto res = stmt.exec(); while (!res.empty) { items ~= buildItem(res); res.step(); } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return items; } } // OneDrive Business Folders are stored in the database potentially without a root | parentRoot link // Select items associated with the provided driveId Item[] selectByDriveId(const(char)[] driveId) { synchronized(databaseLock) { assert(driveId); Item[] items; auto stmt = db.prepare("SELECT * FROM item WHERE driveId = ?1 AND parentId IS NULL"); scope(exit) stmt.finalise(); // Ensure that the prepared statement is finalised after execution. try { stmt.bind(1, driveId); auto res = stmt.exec(); while (!res.empty) { items ~= buildItem(res); res.step(); } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return items; } } // Perform a vacuum on the database, commit WAL / SHM to file void performVacuum() { synchronized(databaseLock) { // Log what we are attempting to do addLogEntry("Attempting to perform a database vacuum to optimise database"); try { // Check the current DB Status - we have to be in a clean state here db.checkStatus(); // Are there any open statements that need to be closed? if (db.count_open_statements() > 0) { // Dump open statements db.dump_open_statements(); // dump open statements so we know what the are // SIGINT (CTRL-C), SIGTERM (kill) handling if (exitHandlerTriggered) { // The SQLITE_INTERRUPT result code indicates that an operation was interrupted - which if we have open statements, most likely a SIGINT scenario throw new SqliteException(9, "Open SQL Statements due to interrupted operations"); } else { // Try and close open statements db.close_open_statements(); } } // Ensure there are no pending operations by performing a PASSIVE checkpoint db.exec("PRAGMA wal_checkpoint(PASSIVE);"); // Prepare and execute VACUUM statement Statement stmt = db.prepare("VACUUM;"); scope(exit) stmt.finalise(); // Ensure the statement is finalised when we exit stmt.exec(); addLogEntry("Database vacuum is complete"); } catch (SqliteException exception) { addLogEntry(); addLogEntry("ERROR: Unable to perform a database vacuum: " ~ exception.msg); addLogEntry(); } } } // Perform a checkpoint (either TRUNCATE or PASSIVE) by writing the data into to the database from the WAL file void performCheckpoint(string checkpointType) { synchronized(databaseLock) { // Log what we are attempting to do if (debugLogging) {addLogEntry("Attempting to perform a database checkpoint to merge temporary data", ["debug"]);} try { // Check the current DB Status - we have to be in a clean state here db.checkStatus(); // Are there any open statements that need to be closed? if (db.count_open_statements() > 0) { // Dump open statements db.dump_open_statements(); // dump open statements so we know what the are // SIGINT (CTRL-C), SIGTERM (kill) handling if (exitHandlerTriggered) { // The SQLITE_INTERRUPT result code indicates that an operation was interrupted - which if we have open statements, most likely a SIGINT scenario throw new SqliteException(9, "Open SQL Statements due to interrupted operations"); } else { // Try and close open statements db.close_open_statements(); } } // Ensure there are no pending operations by performing a checkpoint string databaseCommand = format("PRAGMA wal_checkpoint(%s);" , checkpointType); db.exec(databaseCommand); if (debugLogging) {addLogEntry("Database checkpoint is complete", ["debug"]);} } catch (SqliteException exception) { addLogEntry(); addLogEntry("ERROR: Unable to perform a database checkpoint: " ~ exception.msg); addLogEntry(); } } } // Select distinct driveId items from database string[] selectDistinctDriveIds() { synchronized(databaseLock) { string[] driveIdArray; auto stmt = db.prepare("SELECT DISTINCT driveId FROM item;"); scope(exit) stmt.finalise(); // Ensure that the prepared statement is finalised after execution. try { auto res = stmt.exec(); if (res.empty) return driveIdArray; while (!res.empty) { driveIdArray ~= res.front[0].dup; res.step(); } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return driveIdArray; } } // Function to get the total number of rows in a table int getTotalRowCount() { synchronized(databaseLock) { int rowCount = 0; auto stmt = db.prepare("SELECT COUNT(*) FROM item;"); scope(exit) stmt.finalise(); // Ensure that the prepared statement is finalised after execution. try { auto res = stmt.exec(); if (!res.empty) { rowCount = res.front[0].to!int; } } catch (SqliteException exception) { // Handle the error appropriately detailSQLErrorMessage(exception); } return rowCount; } } }onedrive-2.5.10/src/log.d000066400000000000000000000226101513710110600151230ustar00rootroot00000000000000// What is this module called? module log; // What does this module require to function? import std.stdio; import std.file; import std.datetime; import std.concurrency; import std.typecons; import core.sync.mutex; import core.sync.condition; import core.thread; import std.format; import std.string; import std.conv; // What other modules that we have created do we need to import? import util; version(Notifications) { import dnotify; } // Shared Application Logging Level Variables __gshared bool verboseLogging = false; __gshared bool debugLogging = false; __gshared bool debugHTTPSResponse = false; __gshared string microsoftDataCentre; // Private Shared Module Objects private __gshared LogBuffer logBuffer; // Timer for logging private __gshared MonoTime lastInsertedTime; // Is logging active private __gshared bool isRunning; class LogBuffer { private string[3][] buffer; private Mutex bufferLock; private Condition condReady; private string logFilePath; private bool writeToFile; private bool verboseLogging; private bool debugLogging; private Thread flushThread; private bool environmentVariablesAvailable; private bool sendGUINotification; this(bool verboseLogging, bool debugLogging) { // Initialise the mutex bufferLock = new Mutex(); condReady = new Condition(bufferLock); // Initialise shared items isRunning = true; // Initialise other items this.logFilePath = ""; this.writeToFile = false; this.verboseLogging = verboseLogging; this.debugLogging = debugLogging; this.environmentVariablesAvailable = false; this.sendGUINotification = false; this.flushThread = new Thread(&flushBuffer); this.flushThread.isDaemon(true); this.flushThread.start(); } ~this() { if (!isRunning) { if (exitHandlerTriggered) { bufferLock.unlock(); } } } // Terminate Logging void terminateLogging() { synchronized { // join all threads thread_joinAll(); if (!isRunning) { return; // Prevent multiple shutdowns } // flag that we are no longer running due to shutting down isRunning = false; condReady.notifyAll(); // Wake up all waiting threads } // Wait for the flush thread to finish outside of the synchronized block to avoid deadlocks if (flushThread.isRunning()) { flushThread.join(true); } // Flush any remaining logs flushBuffer(); // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed // Exit scopes scope(exit) { if (bufferLock !is null) { bufferLock.lock(); } scope(exit) { if (bufferLock !is null) { bufferLock.unlock(); object.destroy(bufferLock); bufferLock = null; } } } scope(failure) { if (bufferLock !is null) { bufferLock.lock(); } scope(exit) { if (bufferLock !is null) { bufferLock.unlock(); object.destroy(bufferLock); bufferLock = null; } } } } // Flush the logging buffer private void flushBuffer() { while (isRunning) { flush(); } stdout.flush(); } // Add the message received to the buffer for logging void logThisMessage(string message, string[] levels = ["info"]) { // Generate the timestamp for this log entry auto timeStamp = leftJustify(Clock.currTime().toString(), 28, '0'); synchronized(bufferLock) { foreach (level; levels) { // Normal application output if (!debugLogging) { if ((level == "info") || ((verboseLogging) && (level == "verbose")) || (level == "logFileOnly") || (level == "consoleOnly") || (level == "consoleOnlyNoNewLine")) { // Add this message to the buffer, with this format buffer ~= [timeStamp, level, format("%s", message)]; } } else { // Debug Logging (--verbose --verbose | -v -v | -vv) output // Add this message, regardless of 'level' to the buffer, with this format buffer ~= [timeStamp, level, format("DEBUG: %s", message)]; // If there are multiple 'levels' configured, ignore this and break as we are doing debug logging break; } // Submit the message to the dbus / notification daemon for display within the GUI being used // Will not send GUI notifications when running in debug mode if ((!debugLogging) && (level == "notify")) { if (sendGUINotification) { notify(message); } } } // Notify thread to wake up condReady.notify(); } } // Send GUI notification if --enable-notifications as been used at compile time void notify(string message) { // Use dnotify's functionality for GUI notifications, if GUI notification support has been compiled in version(Notifications) { try { auto n = new Notification("OneDrive Client for Linux", message, "dialog-information"); n.show(); } catch (NotificationError e) { addLogEntry("Unable to send notification to the D-Bus message bus daemon, disabling GUI notifications: " ~ e.message); sendGUINotification = false; } } } // Flush the logging buffer private void flush() { string[3][] messages; synchronized(bufferLock) { if (isRunning) { while (buffer.empty && isRunning) { // buffer is empty and logging is still active condReady.wait(); } messages = buffer; buffer.length = 0; } } // Are there messages to process? if (messages.length > 0) { // There are messages to process foreach (msg; messages) { // timestamp, logLevel, message // Always write the log line to the console, if level != logFileOnly if (msg[1] != "logFileOnly") { // Console output .. what sort of output if (msg[1] == "consoleOnlyNoNewLine") { // This is used write out a message to the console only, without a new line // This is used in non-verbose mode to indicate something is happening when downloading JSON data from OneDrive or when we need user input from --resync write(msg[2]); } else { // write this to the console with a new line writeln(msg[2]); } } // Was this just console only output? if ((msg[1] != "consoleOnlyNoNewLine") && (msg[1] != "consoleOnly")) { // Write to the logfile only if configured to do so - console only items should not be written out if (writeToFile) { string logFileLine = format("[%s] %s", msg[0], msg[2]); std.file.append(logFilePath, logFileLine ~ "\n"); } } } // Clear Messages messages.length = 0; } } } // Function to initialise the logging system void initialiseLogging(bool verboseLogging = false, bool debugLogging = false) { logBuffer = new LogBuffer(verboseLogging, debugLogging); lastInsertedTime = MonoTime.currTime(); } // Shutdown Logging void shutdownLogging() { if (logBuffer !is null) { // Terminate logging in a safe manner logBuffer.terminateLogging(); logBuffer = null; } } // Function to add a log entry with multiple levels void addLogEntry(string message = "", string[] levels = ["info"]) { // we can only add a log line if we are running ... if (isRunning) { logBuffer.logThisMessage(message, levels); } } // Is logging still active bool loggingActive() { return isRunning; } // Is logging still initialised bool loggingStillInitialised() { return logBuffer !is null; } void addProcessingLogHeaderEntry(string message, long verbosityCount) { if (verbosityCount == 0) { addLogEntry(message, ["logFileOnly"]); // Use the dots to show the application is 'doing something' if verbosityCount == 0 addLogEntry(message ~ " .", ["consoleOnlyNoNewLine"]); } else { // Fallback to normal logging if in verbose or above level addLogEntry(message); } } // Add a processing '.' to indicate activity void addProcessingDotEntry() { if (MonoTime.currTime() - lastInsertedTime < dur!"seconds"(1)) { // Don't flood the log buffer return; } lastInsertedTime = MonoTime.currTime(); addLogEntry(".", ["consoleOnlyNoNewLine"]); } // Finish processing '.' line output void completeProcessingDots() { addLogEntry(" ", ["consoleOnly"]); } // Function to set logFilePath and enable logging to a file void enableLogFileOutput(string configuredLogFilePath) { logBuffer.logFilePath = configuredLogFilePath; logBuffer.writeToFile = true; } // Flag that the environment variables exists so if logging is compiled in, it can be enabled void flagEnvironmentVariablesAvailable(bool variablesAvailable) { logBuffer.environmentVariablesAvailable = variablesAvailable; } // Disable GUI Notifications void disableGUINotifications(bool userConfigDisableNotifications) { logBuffer.sendGUINotification = userConfigDisableNotifications; } // Validate that if GUI Notification support has been compiled in using --enable-notifications, the DBUS Server is actually usable void validateDBUSServerAvailability() { version(Notifications) { if (logBuffer.environmentVariablesAvailable) { auto serverAvailable = dnotify.check_availability(); if (!serverAvailable) { addLogEntry("WARNING: D-Bus message bus daemon is not available; GUI notifications are disabled"); logBuffer.sendGUINotification = false; } else { addLogEntry("D-Bus message bus daemon is available; GUI notifications are now enabled"); if (debugLogging) {addLogEntry("D-Bus message bus daemon server details: " ~ to!string(dnotify.get_server_info()), ["debug"]);} logBuffer.sendGUINotification = true; } } else { addLogEntry("WARNING: The required environment variables to enable GUI Notifications are not available; GUI notifications are disabled"); logBuffer.sendGUINotification = false; } } }onedrive-2.5.10/src/main.d000066400000000000000000002717631513710110600153050ustar00rootroot00000000000000// What is this module called? module main; // What does this module require to function? import core.memory; import core.stdc.stdlib: EXIT_SUCCESS, EXIT_FAILURE, exit; import core.sys.posix.signal; import core.thread; import core.time; import std.algorithm; import std.concurrency; import std.conv; import std.datetime; import std.file; import std.getopt; import std.net.curl: CurlException; import std.parallelism; import std.path; import std.process; import std.socket: SocketException; import std.stdio; import std.string; import std.traits; // What other modules that we have created do we need to import? import config; import log; import curlEngine; import util; import onedrive; import syncEngine; import itemdb; import clientSideFiltering; import monitor; import webhook; import intune; import socketio; // What other constant variables do we require? const int EXIT_RESYNC_REQUIRED = 126; // Class objects ApplicationConfig appConfig; OneDriveWebhook oneDriveWebhook; SyncEngine syncEngineInstance; ItemDatabase itemDB; ClientSideFiltering selectiveSync; Monitor filesystemMonitor; OneDriveSocketIo oneDriveSocketIo; // Class variables // Flag for performing a synchronised shutdown bool shutdownInProgress = false; // Flag if a --dry-run is being performed, as, on shutdown, once config is destroyed, we have no reference here bool dryRun = false; // Configure the runtime database file path so that it is available to us on shutdown so objects can be destroyed and removed if required // - Typically this will be the default, but in a --dry-run scenario, we use a separate database file string runtimeDatabaseFile = ""; // Flag for if we are performing filesystem monitoring bool performFileSystemMonitoring = false; // Flag for if we perform a database vacuum. This gets set to false if we have not performed a 'no-sync' task bool performDatabaseVacuum = true; // Flag if SIGTERM is used bool sigtermHandlerTriggered = false; int main(string[] cliArgs) { // Application Start Time - used during monitor loop to detail how long it has been running for auto applicationStartTime = Clock.currTime(); // Disable buffering on stdout - this is needed so that when we are using plain write() it will go to the terminal without flushing stdout.setvbuf(0, _IONBF); // Required main function variables string genericHelpMessage = "Please use 'onedrive --help' for further assistance in regards to running this application."; // If the user passes in --confdir we need to store this as a variable string confdirOption = ""; // running as what user? string runtimeUserName = ""; // Are we online? bool online = false; // Does the operating environment have shell environment variables set bool shellEnvSet = false; // What is the runtime synchronisation directory that will be used // Typically this will be '~/OneDrive' .. however tilde expansion is unreliable string runtimeSyncDirectory = ""; // Verbosity Logging Count - this defines if verbose or debug logging is being used long verbosityCount = 0; // Monitor loop failures bool monitorFailures = false; // Help requested bool helpRequested = false; // Did the user specify --sync or --monitor bool syncOrMonitorMissing = false; // Was a no-sync type operation requested bool noSyncTaskOperationRequested = false; // DEVELOPER OPTIONS OUTPUT VARIABLES bool displayMemoryUsage = false; bool displaySyncOptions = false; // Application Version immutable string applicationVersion = "onedrive " ~ strip(import("version")); // Define 'exit' and 'failure' scopes scope(exit) { // Detail what scope was called if (debugLogging) {addLogEntry("Exit scope was called", ["debug"]);} // Perform synchronised exit performSynchronisedExitProcess("exitScope"); // Setup signal handling for the exit scope setupExitScopeSignalHandler(); } scope(failure) { // Detail what scope was called if (debugLogging) {addLogEntry("Failure scope was called", ["debug"]);} // Perform synchronised exit performSynchronisedExitProcess("failureScope"); // Setup signal handling for the exit scope setupExitScopeSignalHandler(); } // Read in application options as passed in try { bool printVersion = false; auto cliOptions = getopt( cliArgs, std.getopt.config.passThrough, std.getopt.config.bundling, std.getopt.config.caseSensitive, "confdir", "Set the directory used to store the configuration files", &confdirOption, "verbose|v+", "Print more details, useful for debugging (repeat for extra debugging)", &verbosityCount, "version", "Print the version and exit", &printVersion ); // Print help and exit if (cliOptions.helpWanted) { cliArgs ~= "--help"; helpRequested = true; } // Print the version and exit if (printVersion) { writeln(applicationVersion); exit(EXIT_SUCCESS); } } catch (GetOptException e) { // Option errors writeln(e.msg); writeln(genericHelpMessage); return EXIT_FAILURE; } catch (Exception e) { // Generic error writeln(e.msg); writeln(genericHelpMessage); return EXIT_FAILURE; } // Determine the application logging verbosity // - As these flags are used to reduce application processing when not required, specifically in a 'debug' scenario, both verboseLogging and debugLogging need to be enabled if (verbosityCount == 1) { verboseLogging = true;} // set __gshared bool verboseLogging in log.d if (verbosityCount >= 2) { verboseLogging = true; debugLogging = true;} // set __gshared bool verboseLogging & debugLogging in log.d // Initialize the application logging class, as we know the application verbosity level // If we need to enable logging to a file, we can only do this once we know the application configuration which is done slightly later on initialiseLogging(verboseLogging, debugLogging); // Log application start time, log line has start time if (debugLogging) {addLogEntry("Application started", ["debug"]);} // Who are we running as? This will print the ProcessID, UID, GID and username the application is running as runtimeUserName = getUserName(); // Print the application version and how this was compiled as soon as possible if (debugLogging) { addLogEntry("Application Version: " ~ applicationVersion, ["debug"]); addLogEntry("Application Compiled With: " ~ compilerDetails(), ["debug"]); // How was this application started - what options were passed in addLogEntry("Passed in 'cliArgs': " ~ to!string(cliArgs), ["debug"]); addLogEntry("Note: --confdir and --verbose are not listed in 'cliArgs' array", ["debug"]); addLogEntry("Passed in --confdir if present: " ~ confdirOption, ["debug"]); addLogEntry("Passed in --verbose count if present: " ~ to!string(verbosityCount), ["debug"]); } // Create a new AppConfig object with default values, appConfig = new ApplicationConfig(); // Update the default application configuration with the verbosity count so this can be used throughout the application as needed appConfig.verbosityCount = verbosityCount; // Initialise the application configuration, utilising --confdir if it was passed in // Otherwise application defaults will be used to configure the application if (!appConfig.initialise(confdirOption, helpRequested)) { // There was an error loading the user specified application configuration // Error message already printed return EXIT_FAILURE; } // Update the current runtime application configuration (default or 'config' file read in options) from any passed in command line arguments appConfig.updateFromArgs(cliArgs); // Set the default thread pool value based on configuration or maximum logical CPUs setDefaultApplicationThreads(); // If --debug-https has been used, set the applicable flag debugHTTPSResponse = appConfig.getValueBool("debug_https"); // set __gshared bool debugHTTPSResponse in log.d now that we have read-in any CLI arguments // Read in the configured 'sync_dir' from appConfig with '~' if present correctly expanded based on the user environment runtimeSyncDirectory = appConfig.initialiseRuntimeSyncDirectory(); // Are we doing a --sync or a --monitor operation? Both of these will be false if they are not set if ((!appConfig.getValueBool("synchronize")) && (!appConfig.getValueBool("monitor"))) { syncOrMonitorMissing = true; // --sync or --monitor is missing } // Has the client been configured to use Intune SSO via Microsoft Identity Broker (microsoft-identity-broker) dbus session // This is ONLY possible on Linux, not FreeBSD or other platforms version (linux) { if (appConfig.getValueBool("use_intune_sso")) { // The client is configured to use Intune SSO via Microsoft Identity Broker dbus session addLogEntry("Client has been configured to use Intune SSO via Microsoft Identity Broker dbus session - checking usage criteria"); // We need to check that the available dbus is actually available if(wait_for_broker()) { // Usage criteria met, will attempt to use Intune SSO via dbus addLogEntry("Intune SSO via Microsoft Identity Broker dbus session usage criteria met - will attempt to authenticate via Intune"); } else { // Microsoft Identity Broker dbus is not available addLogEntry(); addLogEntry("Required Microsoft Identity Broker dbus capability not found - disabling authentication via Intune SSO"); addLogEntry(); appConfig.setValueBool("use_intune_sso" , false); } } } else { // Ensure 'use_intune_sso' is disabled appConfig.setValueBool("use_intune_sso" , false); } // Has the user configured to use the 'Recycle Bin' locally, for any files that are deleted online? if (appConfig.getValueBool("use_recycle_bin")) { // Configure the internal application paths which will be used to move rather than delete any online deletes to appConfig.setRecycleBinPaths(); // If we are not using --display-config, test if the Recycle Bin Paths exist on the file system if (!appConfig.getValueBool("display_config")) { // We need to test that the configured 'Recycle Bin' path is not within the configured 'sync_dir' if (appConfig.checkRecycleBinPathAsChildOfSyncDir) { // ERROR: 'Recycle Bin' path is a child of the configured 'sync_dir' addLogEntry(); addLogEntry("ERROR: The configured 'recycle_bin_path' (" ~ appConfig.recycleBinParentPath ~ ") is located within the configured 'sync_dir' (" ~ appConfig.runtimeSyncDirectory ~ ").", ["info", "notify"]); addLogEntry(" This would cause locally recycled items to be re-uploaded to Microsoft OneDrive."); addLogEntry(" Please set 'recycle_bin_path' to a location outside of 'sync_dir' and restart the client."); addLogEntry(); return EXIT_FAILURE; } else { // 'Recycle Bin' path is not within the configured 'sync_dir' // We need to ensure that the Recycle Bin Paths exist on the file system, and if they do not exist, create them // Test for appConfig.recycleBinFilePath if (!exists(appConfig.recycleBinFilePath)) { try { // Attempt to create the 'Recycle Bin' file path we have been configured with mkdirRecurse(appConfig.recycleBinFilePath); // Configure the applicable permissions for the folder if (debugLogging) {addLogEntry("Setting directory permissions for: " ~ appConfig.recycleBinFilePath, ["debug"]);} appConfig.recycleBinFilePath.setAttributes(octal!700); // Set to 0700 as Trash may contain sensitive and is the expected default permissions by GIO or KIO } catch (std.file.FileException e) { // Creating the 'Recycle Bin' file path failed addLogEntry("ERROR: Unable to create the configured local 'Recycle Bin' file directory: " ~ e.msg, ["info", "notify"]); // Use exit scopes to shutdown API return EXIT_FAILURE; } } // Test for appConfig.recycleBinInfoPath if (!exists(appConfig.recycleBinInfoPath)) { try { // Attempt to create the 'Recycle Bin' info path we have been configured with mkdirRecurse(appConfig.recycleBinInfoPath); // Configure the applicable permissions for the folder if (debugLogging) {addLogEntry("Setting directory permissions for: " ~ appConfig.recycleBinInfoPath, ["debug"]);} appConfig.recycleBinInfoPath.setAttributes(octal!700); // Set to 0700 as Trash may contain sensitive and is the expected default permissions by GIO or KIO } catch (std.file.FileException e) { // Creating the 'Recycle Bin' info path failed addLogEntry("ERROR: Unable to create the configured local 'Recycle Bin' info directory: " ~ e.msg, ["info", "notify"]); // Use exit scopes to shutdown API return EXIT_FAILURE; } } } } } // Are we performing some sort of 'no-sync' operation task? noSyncTaskOperationRequested = appConfig.hasNoSyncOperationBeenRequested(); // returns true if we are // If 'syncOrMonitorMissing' is true and 'noSyncTaskOperationRequested' is false (meaning we are not doing some 'no-sync' operation like '--display-sync-status', '--get-sharepoint-drive-id' or '--display-config' // - fail fast here to avoid setting up all the other components, database, initialising the API as this is all pointless if we just fail out later // If we are not using --display-config, perform this check if (!appConfig.getValueBool("display_config")) { if (syncOrMonitorMissing && !noSyncTaskOperationRequested) { // Before failing fast, has the client been authenticated and does the 'refresh_token' contain data if (exists(appConfig.refreshTokenFilePath) && getSize(appConfig.refreshTokenFilePath) > 0) { // fail fast - print error message that --sync or --monitor are missing printMissingOperationalSwitchesError(); // Use exit scopes to shutdown API return EXIT_FAILURE; } } } // If --disable-notifications has not been used, check if everything exists to enable notifications if (!appConfig.getValueBool("disable_notifications")) { // If notifications was compiled in, we need to ensure that these variables are actually available before we enable GUI Notifications flagEnvironmentVariablesAvailable(appConfig.validateGUINotificationEnvironmentVariables()); // If we are not using --display-config attempt to enable GUI notifications if (!appConfig.getValueBool("display_config")) { // Attempt to enable GUI Notifications validateDBUSServerAvailability(); } } // cURL Version Compatibility Test // - Common warning for cURL version issue string distributionWarning = " Please report this to your distribution, requesting an update to a newer cURL version, or consider upgrading it yourself for optimal stability."; // If 'force_http_11' = false, we need to check the curl version being used if (!appConfig.getValueBool("force_http_11")) { // get the curl version string curlVersion = getCurlVersionNumeric(); // Is the version of curl or libcurl being used by the platform a known bad curl version for HTTP/2 support if (isBadCurlVersion(curlVersion)) { // add warning message string curlWarningMessage = format("WARNING: Your cURL/libcurl version (%s) has known HTTP/2 bugs that impact the use of this client.", curlVersion); addLogEntry(); addLogEntry(curlWarningMessage, ["info", "notify"]); addLogEntry(distributionWarning); addLogEntry(" Downgrading all client operations to use HTTP/1.1 to ensure maximum operational stability."); addLogEntry(" Please read https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#compatibility-with-curl for more information."); addLogEntry(); appConfig.setValueBool("force_http_11" , true); } } else { // get the curl version - a bad curl version may still be in use string curlVersion = getCurlVersionNumeric(); // Is the version of curl or libcurl being used by the platform a known bad curl version if (isBadCurlVersion(curlVersion)) { // add warning message string curlWarningMessage = format("WARNING: Your cURL/libcurl version (%s) has known operational bugs that impact the use of this client.", curlVersion); addLogEntry(); addLogEntry(curlWarningMessage); // curl HTTP/1.1 downgrade in place meaning user took steps to remediate, perform standard logging with no GUI notification addLogEntry(distributionWarning); addLogEntry(); } } // In a debug scenario, to assist with understanding the run-time configuration, ensure this flag is set if (debugLogging) { appConfig.setValueBool("display_running_config", true); } // Configure dryRun so that this can be used here & during shutdown dryRun = appConfig.getValueBool("dry_run"); // As early as possible, now re-configure the logging class, given that we have read in any applicable 'config' file and updated the application running config from CLI input: // - Enable logging to a file if this is required // - Disable GUI notifications if this has been configured // Configure application logging to a log file only if this has been enabled // This is the earliest point that this can be done, as the client configuration has been read in, and any CLI arguments have been processed. // Either of those ('config' file, CLI arguments) could be enabling logging, thus this is the earliest point at which this can be validated and enabled. // The buffered logging also ensures that all 'output' to this point is also captured and written out to the log file if (appConfig.getValueBool("enable_logging")) { // Calculate the application logging directory string calculatedLogDirPath = appConfig.calculateLogDirectory(); string calculatedLogFilePath; // Initialise using the configured logging directory if (verboseLogging) {addLogEntry("Using the following path to store the runtime application log: " ~ calculatedLogDirPath, ["verbose"]);} // Calculate the logfile name if (calculatedLogDirPath != appConfig.defaultHomePath) { // Log file is not going to the home directory string logfileName = runtimeUserName ~ ".onedrive.log"; calculatedLogFilePath = buildNormalizedPath(buildPath(calculatedLogDirPath, logfileName)); } else { // Log file is going to the users home directory calculatedLogFilePath = buildNormalizedPath(buildPath(calculatedLogDirPath, "onedrive.log")); } // Update the logging class to use 'calculatedLogFilePath' for the application log file now that this has been determined enableLogFileOutput(calculatedLogFilePath); } // Disable GUI Notifications if configured to do so // - This option is reverse action. If 'disable_notifications' is 'true', we need to send 'false' if (appConfig.getValueBool("disable_notifications")) { // disable_notifications is true, ensure GUI notifications is initialised with false so that NO GUI notification is sent disableGUINotifications(false); addLogEntry("Disabling GUI notifications as per user configuration"); } // Perform a deprecated options check now that the config file (if present) and CLI options have all been parsed to advise the user that their option usage might change appConfig.checkDeprecatedOptions(cliArgs); // Configure Client Side Filtering (selective sync) by parsing and getting a usable regex for skip_file, skip_dir and sync_list config components selectiveSync = new ClientSideFiltering(appConfig); if (!selectiveSync.initialise()) { // exit here as something triggered a selective sync configuration failure return EXIT_FAILURE; } // Set runtimeDatabaseFile, this will get updated if we are using --dry-run runtimeDatabaseFile = appConfig.databaseFilePath; // DEVELOPER OPTIONS OUTPUT // Set to display memory details as early as possible displayMemoryUsage = appConfig.getValueBool("display_memory"); // set to display sync options displaySyncOptions = appConfig.getValueBool("display_sync_options"); // Display the current application configuration (based on all defaults, 'config' file parsing and/or options passed in via the CLI) and exit if --display-config has been used if ((appConfig.getValueBool("display_config")) || (appConfig.getValueBool("display_running_config"))) { // Display the application configuration appConfig.displayApplicationConfiguration(); // Do we exit? We exit only if '--display-config' has been used if (appConfig.getValueBool("display_config")) { return EXIT_SUCCESS; } } // Check for basic application option conflicts - flags that should not be used together and/or flag combinations that conflict with each other, values that should be present and are not if (appConfig.checkForBasicOptionConflicts) { // Any error will have been printed by the function itself, but we need a small delay here to allow the buffered logging to output any error return EXIT_FAILURE; } // Check for --dry-run operation or a 'no-sync' operation where the 'dry-run' DB copy should be used // If this has been requested, we need to ensure that all actions are performed against the dry-run database copy, and, // no actual action takes place - such as deleting files if deleted online, moving files if moved online or local, downloading new & changed files, uploading new & changed files if (dryRun || (noSyncTaskOperationRequested)) { // Cleanup any existing dry-run elements ... these should never be left hanging around and should be cleaned up first cleanupDatabaseFiles(appConfig.databaseFilePathDryRun); // If --dry-run if (dryRun) { // This is a --dry-run operation addLogEntry("DRY-RUN Configured. Output below shows what 'would' have occurred."); // Make a copy of the original items.sqlite3 for use as the dry run copy if it exists if (exists(appConfig.databaseFilePath)) { // In a --dry-run --resync scenario, we should not copy the existing database file if (!appConfig.getValueBool("resync")) { // Copy the existing DB file to the dry-run copy addLogEntry("DRY-RUN: Copying items.sqlite3 to items-dryrun.sqlite3 to use for dry run operations"); copy(appConfig.databaseFilePath,appConfig.databaseFilePathDryRun); } else { // No database copy due to --resync - an empty DB file will be used for the resync operation addLogEntry("DRY-RUN: No database copy created for --dry-run due to --resync also being used"); } } // update runtimeDatabaseFile now that we are using the dry run path runtimeDatabaseFile = appConfig.databaseFilePathDryRun; } } else { // Cleanup any existing dry-run elements ... these should never be left hanging around cleanupDatabaseFiles(appConfig.databaseFilePathDryRun); } // Handle --logout as separate item, do not 'resync' on a --logout if (appConfig.getValueBool("logout")) { if (debugLogging) {addLogEntry("--logout requested", ["debug"]);} addLogEntry("Deleting the saved authentication status ..."); if (!dryRun) { // Remove the 'refresh_token' file if present safeRemove(appConfig.refreshTokenFilePath); // Remove the 'intune_account' file if present safeRemove(appConfig.intuneAccountDetailsFilePath); } else { // --dry-run scenario ... technically we should not be making any local file changes ....... addLogEntry("DRY-RUN: Not removing the saved authentication status"); } // Exit return EXIT_SUCCESS; } // Handle --reauth to re-authenticate the client if (appConfig.getValueBool("reauth")) { if (debugLogging) {addLogEntry("--reauth requested", ["debug"]);} addLogEntry("Deleting the saved authentication status ... re-authentication requested"); if (!dryRun) { // Remove the 'refresh_token' file if present safeRemove(appConfig.refreshTokenFilePath); // Remove the 'intune_account' file if present safeRemove(appConfig.intuneAccountDetailsFilePath); } else { // --dry-run scenario ... technically we should not be making any local file changes ....... addLogEntry("DRY-RUN: Not removing the saved authentication status"); } } // --resync should be considered a 'last resort item' or if the application configuration has changed, where a resync is needed .. the user needs to 'accept' this warning to proceed // If --resync has not been used (bool value is false), check the application configuration for 'changes' that require a --resync to ensure that the data locally reflects the users requested configuration if (appConfig.getValueBool("resync")) { // what is the risk acceptance for --resync? bool resyncRiskAcceptance = appConfig.displayResyncRiskForAcceptance(); if (debugLogging) {addLogEntry("Returned --resync risk acceptance: " ~ to!string(resyncRiskAcceptance), ["debug"]);} // Action based on user response if (!resyncRiskAcceptance){ // --resync risk not accepted return EXIT_FAILURE; } else { if (debugLogging) {addLogEntry("--resync issued and risk accepted", ["debug"]);} // --resync risk accepted, perform a cleanup of items that require a cleanup appConfig.cleanupHashFilesDueToResync(); // Make a backup of the applicable configuration file appConfig.createBackupConfigFile(); // Update hash files and generate a new config backup appConfig.updateHashContentsForConfigFiles(); // Remove the items database processResyncDatabaseRemoval(runtimeDatabaseFile); } } else { // Is the application currently authenticated? If not, it is pointless checking if a --resync is required until the application is authenticated if (exists(appConfig.refreshTokenFilePath)) { // Has any of our application configuration that would require a --resync been changed? if (appConfig.applicationChangeWhereResyncRequired()) { // Application configuration has changed however --resync not issued, fail fast addLogEntry(); addLogEntry("An application configuration change has been detected where a --resync is required", ["info", "notify"]); addLogEntry(); return EXIT_RESYNC_REQUIRED; } else { // No configuration change that requires a --resync to be issued // Special cases need to be checked - if these options were enabled, it creates a false 'Resync Required' flag, so do not create a backup if ((!appConfig.getValueBool("list_business_shared_items"))) { // Make a backup of the applicable configuration file appConfig.createBackupConfigFile(); // Update hash files and generate a new config backup appConfig.updateHashContentsForConfigFiles(); } } } } // Implement https://github.com/abraunegg/onedrive/issues/1129 // Force a synchronisation of a specific folder, only when using --synchronize --single-directory and ignoring all non-default skip_dir and skip_file rules if (appConfig.getValueBool("force_sync")) { // appConfig.checkForBasicOptionConflicts() has already checked for the basic requirements for --force-sync addLogEntry(); addLogEntry("WARNING: Overriding application configuration to use application defaults for skip_dir and skip_file due to --sync --single-directory --force-sync being used"); addLogEntry(); bool forceSyncRiskAcceptance = appConfig.displayForceSyncRiskForAcceptance(); if (debugLogging) {addLogEntry("Returned --force-sync risk acceptance: " ~ forceSyncRiskAcceptance, ["debug"]);} // Action based on user response if (!forceSyncRiskAcceptance){ // --force-sync risk not accepted return EXIT_FAILURE; } else { // --force-sync risk accepted // reset set config using function to use application defaults appConfig.resetSkipToDefaults(); // update sync engine regex with reset defaults selectiveSync.setDirMask(appConfig.getValueString("skip_dir")); selectiveSync.setFileMask(appConfig.getValueString("skip_file")); } } // What IP Protocol are we going to use to access the network with appConfig.displayIPProtocol(); // Test if OneDrive service can be reached, exit if it cant be reached if (debugLogging) {addLogEntry("Testing network to ensure network connectivity to Microsoft OneDrive Service", ["debug"]);} online = testInternetReachability(appConfig); // If we are not 'online' - how do we handle this situation? if (!online) { // We are unable to initialise the OneDrive API as we are not online if (!appConfig.getValueBool("monitor")) { // Running as --synchronize addLogEntry(); addLogEntry("ERROR: Unable to reach the Microsoft OneDrive API service, unable to initialise application"); addLogEntry(); return EXIT_FAILURE; } else { // Running as --monitor addLogEntry(); addLogEntry("Unable to reach the Microsoft OneDrive API service at this point in time, re-trying network tests based on applicable intervals"); addLogEntry(); // Run the re-try of Internet connectivity test online = retryInternetConnectivityTest(appConfig); } } // This needs to be a separate 'if' statement, as, if this was an 'if-else' from above, if we were originally offline and using --monitor, we would never get to this point if (online) { // Check Application Version if (!appConfig.getValueBool("disable_version_check")) { if (verboseLogging) {addLogEntry("Checking Application Version ...", ["verbose"]);} checkApplicationVersion(); } // Initialise the OneDrive API if (verboseLogging) {addLogEntry("Attempting to initialise the OneDrive API ...", ["verbose"]);} OneDriveApi oneDriveApiInstance = new OneDriveApi(appConfig); appConfig.apiWasInitialised = oneDriveApiInstance.initialise(); // Did the API initialise successfully? if (appConfig.apiWasInitialised) { if (verboseLogging) {addLogEntry("The OneDrive API was initialised successfully", ["verbose"]);} // Flag that we were able to initialise the API in the application config oneDriveApiInstance.debugOutputConfiguredAPIItems(); oneDriveApiInstance.releaseCurlEngine(); object.destroy(oneDriveApiInstance); oneDriveApiInstance = null; // Need to configure the itemDB and syncEngineInstance for 'sync' and 'non-sync' operations if (verboseLogging) {addLogEntry("Opening the item database ...", ["verbose"]);} // Configure the Item Database itemDB = new ItemDatabase(runtimeDatabaseFile); // Was the database successfully initialised? if (!itemDB.isDatabaseInitialised()) { // no .. destroy class itemDB = null; // exit application return EXIT_FAILURE; } // Initialise the syncEngine syncEngineInstance = new SyncEngine(appConfig, itemDB, selectiveSync); appConfig.syncEngineWasInitialised = syncEngineInstance.initialise(); // Are we not doing a --sync or a --monitor operation? if (syncOrMonitorMissing) { // this is 'true' if --sync or a --monitor were not used // Do not perform a vacuum on exit, pointless performDatabaseVacuum = false; // Are we performing some sort of 'no-sync' task? // - Are we obtaining the Office 365 Drive ID for a given Office 365 SharePoint Shared Library? // - Are we displaying the sync status? // - Are we getting the URL for a file online? // - Are we listing who modified a file last online? // - Are we listing OneDrive Business Shared Items? // - Are we creating a shareable link for an existing file on OneDrive? // - Are we just creating a directory online, without any sync being performed? // - Are we just deleting a directory online, without any sync being performed? // - Are we renaming or moving a directory? // - Are we displaying the quota information? // - Did we just authorise the client? // --get-sharepoint-drive-id - Get the SharePoint Library drive_id if (appConfig.getValueString("sharepoint_library_name") != "") { // Get the SharePoint Library drive_id syncEngineInstance.querySiteCollectionForDriveID(appConfig.getValueString("sharepoint_library_name")); // Exit application // Use exit scopes to shutdown API and cleanup data return EXIT_SUCCESS; } // --display-sync-status - Query the sync status if (appConfig.getValueBool("display_sync_status")) { // path to query variable string pathToQueryStatusOn; // What path do we query? if (!appConfig.getValueString("single_directory").empty) { pathToQueryStatusOn = "/" ~ appConfig.getValueString("single_directory"); } else { pathToQueryStatusOn = "/"; } // Query the sync status syncEngineInstance.queryOneDriveForSyncStatus(pathToQueryStatusOn); // Exit application // Use exit scopes to shutdown API and cleanup data return EXIT_SUCCESS; } // --get-file-link - Get the URL path for a synced file if (appConfig.getValueString("get_file_link") != "") { // Query the OneDrive API for the file link syncEngineInstance.queryOneDriveForFileDetails(appConfig.getValueString("get_file_link"), runtimeSyncDirectory, "URL"); // Exit application // Use exit scopes to shutdown API and cleanup data return EXIT_SUCCESS; } // --modified-by - Get listing the modified-by details of a provided path if (appConfig.getValueString("modified_by") != "") { // Query the OneDrive API for the last modified by details syncEngineInstance.queryOneDriveForFileDetails(appConfig.getValueString("modified_by"), runtimeSyncDirectory, "ModifiedBy"); // Exit application // Use exit scopes to shutdown API and cleanup data return EXIT_SUCCESS; } // --list-shared-items - Get listing OneDrive Business Shared Items if (appConfig.getValueBool("list_business_shared_items")) { // Is this a business account type? if (appConfig.accountType == "business") { // List OneDrive Business Shared Items syncEngineInstance.listBusinessSharedObjects(); } else { addLogEntry("ERROR: Unsupported account type for listing OneDrive Business Shared Items"); } // Exit application // Use exit scopes to shutdown API return EXIT_SUCCESS; } // --create-share-link - Create a shareable link for an existing file, based on the local path if (appConfig.getValueString("create_share_link") != "") { // Query OneDrive for the file, and if valid, create a shareable link for the file // By default, the shareable link will be read-only. // If the user adds: // --with-editing-perms // this will create a writeable link syncEngineInstance.queryOneDriveForFileDetails(appConfig.getValueString("create_share_link"), runtimeSyncDirectory, "ShareableLink"); // Exit application // Use exit scopes to shutdown API return EXIT_SUCCESS; } // --create-directory - Are we just creating a directory online, without any sync being performed? if ((appConfig.getValueString("create_directory") != "")) { // Handle the remote path creation and updating of the local database without performing a sync syncEngineInstance.createDirectoryOnline(appConfig.getValueString("create_directory")); // Exit application // Use exit scopes to shutdown API return EXIT_SUCCESS; } // --remove-directory - Are we just deleting a directory online, without any sync being performed? if ((appConfig.getValueString("remove_directory") != "")) { // Handle the remote path deletion without performing a sync syncEngineInstance.deleteByPathNoSync(appConfig.getValueString("remove_directory")); // Exit application // Use exit scopes to shutdown API return EXIT_SUCCESS; } // Are we renaming or moving a directory online? // onedrive --source-directory 'path/as/source/' --destination-directory 'path/as/destination' if ((appConfig.getValueString("source_directory") != "") && (appConfig.getValueString("destination_directory") != "")) { // We are renaming or moving a directory syncEngineInstance.moveOrRenameDirectoryOnline(appConfig.getValueString("source_directory"), appConfig.getValueString("destination_directory")); // Exit application // Use exit scopes to shutdown API return EXIT_SUCCESS; } // --display-quota - Are we displaying the quota information? if (appConfig.getValueBool("display_quota")) { // Query and respond with the quota details syncEngineInstance.queryOneDriveForQuotaDetails(); // Exit application // Use exit scopes to shutdown API return EXIT_SUCCESS; } // --download-file - Are we downloading a single file from Microsoft OneDrive if ((appConfig.getValueString("download_single_file") != "")) { // Handle downloading the single file syncEngineInstance.downloadSingleFile(appConfig.getValueString("download_single_file")); // Exit application // Use exit scopes to shutdown API return EXIT_SUCCESS; } // If we get to this point, we have not performed a 'no-sync' task .. // Did we just authorise the client? if (appConfig.applicationAuthoriseResponseURIReceived) { // Authorisation activity if (exists(appConfig.refreshTokenFilePath)) { // OneDrive refresh token exists addLogEntry(); addLogEntry("The application has been successfully authorised, but no extra command options have been specified."); addLogEntry(); addLogEntry(genericHelpMessage); addLogEntry(); // Use exit scopes to shutdown API return EXIT_SUCCESS; } else { // We just authorised, but refresh_token does not exist .. probably an auth error? addLogEntry(); addLogEntry("Your application's authorisation was unsuccessful. Please review your URI response entry, then attempt authorisation again with a new URI response."); addLogEntry(); // Use exit scopes to shutdown API return EXIT_FAILURE; } } else { // No authorisation activity - print error message printMissingOperationalSwitchesError(); // Use exit scopes to shutdown API return EXIT_FAILURE; } } } else { // API could not be initialised addLogEntry("The OneDrive API could not be initialised"); return EXIT_FAILURE; } } // Configure the sync directory based on the runtimeSyncDirectory configured directory if (verboseLogging) {addLogEntry("All application operations will be performed in the configured local 'sync_dir' directory: " ~ runtimeSyncDirectory, ["verbose"]);} // Try and set the 'sync_dir', attempt to create if it does not exist try { if (!exists(runtimeSyncDirectory)) { if (debugLogging) {addLogEntry("runtimeSyncDirectory: Configured 'sync_dir' is missing locally. Creating: " ~ runtimeSyncDirectory, ["debug"]);} // At this point 'sync_dir' is missing and we have requested to create it // However ... 'itemDB' is pointing to a valid database file // If this database has any entries, an empty 'sync_dir' will cause the application to think that all content in 'sync_dir' has been deleted // In this scenario, the application, depending on the options being used, may attempt to delete all files online - which is not desirable // Do a sanity check here to ensure that there are no database entries if (itemDB.getTotalRowCount() == 1) { // Technically an 'empty database' // An empty database will just have 1 row in it, that row being the account 'root' data added when the API is initially initialised above try { // Attempt to create the sync dir we have been configured with mkdirRecurse(runtimeSyncDirectory); // Configure the applicable permissions for the folder if (debugLogging) {addLogEntry("Setting directory permissions for: " ~ runtimeSyncDirectory, ["debug"]);} runtimeSyncDirectory.setAttributes(appConfig.returnRequiredDirectoryPermissions()); } catch (std.file.FileException e) { // Creating the sync directory failed addLogEntry("ERROR: Unable to create the configured local 'sync_dir' directory: " ~ e.msg, ["info", "notify"]); // Use exit scopes to shutdown API return EXIT_FAILURE; } } else { // Not an empty database addLogEntry(); addLogEntry("An application cache state issue has been detected where a --resync is required", ["info", "notify"]); addLogEntry(); return EXIT_RESYNC_REQUIRED; } } } catch (std.file.FileException e) { // Creating the sync directory failed addLogEntry("ERROR: Unable to test for the existence of the configured local 'sync_dir' directory: " ~ e.msg); // Use exit scopes to shutdown API return EXIT_FAILURE; } // Try and change to the working directory to the 'sync_dir' as configured try { chdir(runtimeSyncDirectory); // A FileSystem exception was thrown when attempting to change to the configured 'sync_dir' } catch (FileException e) { // Log error message addLogEntry("FATAL: Unable to change to the configured local 'sync_dir' directory: " ~ runtimeSyncDirectory); // A file system exception was generated displayFileSystemErrorMessage(e.msg, strip(getFunctionName!({})), runtimeSyncDirectory, FsErrorSeverity.fatal); // Use exit scopes to shutdown API as if we are unable to change to the 'sync_dir' we need to exit return EXIT_FAILURE; } // Do we need to validate the runtimeSyncDirectory to check for the presence of a '.nosync' file checkForNoMountScenario(); // Is the sync engine initialised correctly? if (appConfig.syncEngineWasInitialised) { // Configure some initial variables string singleDirectoryPath; string localPath = "."; string remotePath = "/"; // If not performing a --resync, check if there are interrupted downloads and/or uploads that need to be completed if (!appConfig.getValueBool("resync")) { // Check if there are any downloads that need to be resumed if (syncEngineInstance.checkForResumableDownloads) { // Need to re-process the the 'resumable data' to resume the download addLogEntry("There are interrupted downloads that need to be resumed ..."); // Process the resumable download files syncEngineInstance.processResumableDownloadFiles(); } // Check if there are interrupted upload session(s) if (syncEngineInstance.checkForInterruptedSessionUploads) { // Need to re-process the session upload files to resume the failed session uploads addLogEntry("There are interrupted session uploads that need to be resumed ..."); // Process the session upload files syncEngineInstance.processInterruptedSessionUploads(); } } else { // Clean up any downloads that were due to be resumed, but will not be resumed due to --resync being used syncEngineInstance.clearInterruptedDownloads(); // Clean up any uploads that were due to be resumed, but will not be resumed due to --resync being used syncEngineInstance.clearInterruptedSessionUploads(); } // Are we doing a single directory operation (--single-directory) ? if (!appConfig.getValueString("single_directory").empty) { // Ensure that the value stored for appConfig.getValueString("single_directory") does not contain any extra quotation marks string originalSingleDirectoryValue = appConfig.getValueString("single_directory"); // Strip quotation marks from provided path to ensure no issues within a Docker environment when using passed in values string updatedSingleDirectoryValue = strip(originalSingleDirectoryValue, "\""); // Set singleDirectoryPath singleDirectoryPath = updatedSingleDirectoryValue; // Ensure that this is a normalised relative path to runtimeSyncDirectory string normalisedRelativePath = replace(buildNormalizedPath(absolutePath(singleDirectoryPath)), buildNormalizedPath(absolutePath(runtimeSyncDirectory)), "." ); // The user provided a directory to sync within the configured 'sync_dir' path // This also validates if the path being used exists online and/or does not have a 'case-insensitive match' syncEngineInstance.setSingleDirectoryScope(normalisedRelativePath); // Does the directory we want to sync actually exist locally? if (!exists(singleDirectoryPath)) { // The requested path to use with --single-directory does not exist locally within the configured 'sync_dir' addLogEntry("WARNING: The requested path for --single-directory does not exist locally. Creating requested path within " ~ runtimeSyncDirectory, ["info", "notify"]); // Attempt path creation try { // Attempt to create the required --single-directory path locally mkdirRecurse(singleDirectoryPath); // Configure the applicable permissions for the folder if (debugLogging) {addLogEntry("Setting directory permissions for: " ~ singleDirectoryPath, ["debug"]);} singleDirectoryPath.setAttributes(appConfig.returnRequiredDirectoryPermissions()); } catch (std.file.FileException e) { // Creating the sync directory failed addLogEntry("ERROR: Unable to create the required --single-directory path: " ~ e.msg, ["info", "notify"]); // Use exit scopes to shutdown API return EXIT_FAILURE; } } // Update the paths that we use to perform the sync actions localPath = singleDirectoryPath; remotePath = singleDirectoryPath; // Display that we are syncing from a specific path due to --single-directory if (verboseLogging) {addLogEntry("Syncing changes from this selected path: " ~ singleDirectoryPath, ["verbose"]);} } // Handle SIGINT, SIGTERM and SIGSEGV signals setupSignalHandler(); // Are we doing a --sync operation? This includes doing any --single-directory operations if (appConfig.getValueBool("synchronize")) { // We are not using this, so destroy it early object.destroy(filesystemMonitor); filesystemMonitor = null; // Did the user specify --upload-only? if (appConfig.getValueBool("upload_only")) { // Perform the --upload-only sync process performUploadOnlySyncProcess(localPath); } // Did the user specify --download-only? if (appConfig.getValueBool("download_only")) { // Only download data from OneDrive syncEngineInstance.syncOneDriveAccountToLocalDisk(); // Perform the DB consistency check // This will also delete any out-of-sync flagged items if configured to do so syncEngineInstance.performDatabaseConsistencyAndIntegrityCheck(); // Do we cleanup local files? // - Deletes of data from online will already have been performed, but what we are now doing is searching the local filesystem // for any new data locally, that usually would be uploaded to OneDrive, but instead, because of the options being // used, will need to be deleted from the local filesystem if (appConfig.getValueBool("cleanup_local_files")) { // Perform the filesystem walk syncEngineInstance.scanLocalFilesystemPathForNewData(localPath); } } // If no use of --upload-only or --download-only if ((!appConfig.getValueBool("upload_only")) && (!appConfig.getValueBool("download_only"))) { // Perform the standard sync process performStandardSyncProcess(localPath); } // Detail the outcome of the sync process displaySyncOutcome(); } // Are we doing a --monitor operation? if (appConfig.getValueBool("monitor")) { // Update the flag given we are running with --monitor performFileSystemMonitoring = true; // Set initial variable for when we last uploaded something or made an online change from a local inotify event lastLocalWrite = MonoTime.currTime() - dur!"hours"(24); // Is Display Manager Integration enabled? if (appConfig.getValueBool("display_manager_integration")) { // Attempt to configure the desktop integration whilst the client is running in --monitor mode attemptFileManagerIntegration(); } // If 'webhooks' are enabled, this is going to conflict with 'websockets' if the OS cURL library supports websockets if (appConfig.getValueBool("webhook_enabled") && appConfig.curlSupportsWebSockets) { // We have to disable 'websocket' support addLogEntry(); addLogEntry("WARNING: WebSocket support has been disabled because Webhooks are already configured to monitor Microsoft Graph API changes."); addLogEntry(" Only one API notification method can be active at a time."); addLogEntry(); // Set the flag that this will not be used appConfig.curlSupportsWebSockets = false; } else { // Double check scenario, this time 'false' checking 'webhook_enabled' if ((!appConfig.getValueBool("webhook_enabled")) && (appConfig.curlSupportsWebSockets)) { // If we are doing --upload-only however .. we need to 'ignore' online change if (!appConfig.getValueBool("upload_only")) { // Did the user configure to disable 'websocket' support? if (!appConfig.getValueBool("disable_websocket_support")) { // Log that we are attempting to enable WebSocket Support addLogEntry("Attempting to enable WebSocket support to monitor Microsoft Graph API changes in near real-time."); // Obtain the WebSocket Notification URL from the API endpoint syncEngineInstance.obtainWebSocketNotificationURL(); // Were we able to correctly obtain the endpoint response and build the socket.io WS endpoint if (appConfig.websocketNotificationUrlAvailable) { // Notification URL is available if (oneDriveSocketIo is null) { oneDriveSocketIo = new OneDriveSocketIo(thisTid, appConfig); oneDriveSocketIo.start(); } addLogEntry("Enabled WebSocket support to monitor Microsoft Graph API changes in near real-time."); } else { addLogEntry("ERROR: Unable to configure WebSocket support to monitor Microsoft Graph API changes in near real-time."); } } else { // WebSocket Support has been disabled addLogEntry("WebSocket support has been disabled by user configuration."); } } else { // --upload only being used addLogEntry("Online changes will not be monitored by WebSocket support due to --upload-only"); // Set the flag that this will not be used appConfig.curlSupportsWebSockets = false; } } } // What are the current values for the platform we are running on string maxOpenFilesSoft = strip(to!string(getSoftOpenFilesLimit())); string maxOpenFilesHard = strip(to!string(getHardOpenFilesLimit())); // What is the currently configured maximum inotify watches that can be used string maxInotifyWatches = strip(getMaxInotifyWatches()); // Start the monitor process addLogEntry("OneDrive synchronisation interval (seconds): " ~ to!string(appConfig.getValueLong("monitor_interval"))); // If we are in a --download-only method of operation, the output of these is not required if (!appConfig.getValueBool("download_only")) { if (verboseLogging) { addLogEntry("Maximum allowed open files (soft): " ~ maxOpenFilesSoft, ["verbose"]); addLogEntry("Maximum allowed open files (hard): " ~ maxOpenFilesHard, ["verbose"]); addLogEntry("Maximum allowed inotify user watches: " ~ maxInotifyWatches, ["verbose"]); } } // Configure the monitor class filesystemMonitor = new Monitor(appConfig, selectiveSync); // Delegated function for when inotify detects a new local directory has been created filesystemMonitor.onDirCreated = delegate(string path) { // Handle .folder creation if skip_dotfiles is enabled if ((appConfig.getValueBool("skip_dotfiles")) && (isDotFile(path))) { if (verboseLogging) {addLogEntry("[M] Skipping watching local path - .folder found & --skip-dot-files enabled: " ~ path, ["verbose"]);} } else { if (verboseLogging) {addLogEntry("[M] Local directory created: " ~ path, ["verbose"]);} try { syncEngineInstance.scanLocalFilesystemPathForNewData(path); markLocalWrite(); } catch (CurlException e) { if (verboseLogging) {addLogEntry("Offline, cannot create remote dir: " ~ path, ["verbose"]);} } catch (Exception e) { addLogEntry("Cannot create remote directory: " ~ e.msg, ["info", "notify"]); } } }; // Delegated function for when inotify detects a local file has been changed filesystemMonitor.onFileChanged = delegate(string[] changedLocalFilesToUploadToOneDrive) { // Handle a potentially locally changed file // Logging for this event moved to handleLocalFileTrigger() due to threading and false triggers from scanLocalFilesystemPathForNewData() above syncEngineInstance.handleLocalFileTrigger(changedLocalFilesToUploadToOneDrive); markLocalWrite(); if (verboseLogging) {addLogEntry("[M] Total number of local file(s) added or changed: " ~ to!string(changedLocalFilesToUploadToOneDrive.length), ["verbose"]);} }; // Delegated function for when inotify detects a delete event filesystemMonitor.onDelete = delegate(string path) { if (verboseLogging) {addLogEntry("[M] Local item deleted: " ~ path, ["verbose"]);} try { // The path has been deleted .. we cannot use isDir or isFile to advise what was deleted. This is the best we can Do addLogEntry("The operating system sent a deletion notification. Trying to delete this item as requested: " ~ path); // perform the delete action syncEngineInstance.deleteByPath(path); markLocalWrite(); } catch (CurlException e) { if (verboseLogging) {addLogEntry("Offline, cannot delete item: " ~ path, ["verbose"]);} } catch (SyncException e) { if (e.msg == "The item to delete is not in the local database") { if (verboseLogging) {addLogEntry("Item cannot be deleted from Microsoft OneDrive because it was not found in the local database", ["verbose"]);} } else { addLogEntry("Cannot delete remote item: " ~ e.msg, ["info", "notify"]); } } catch (FileException e) { // Path is gone locally, log and continue. addLogEntry("ERROR: The local file system returned an error with the following message: " ~ e.msg, ["verbose"]); } catch (Exception e) { addLogEntry("Cannot delete remote item: " ~ e.msg, ["info", "notify"]); } }; // Delegated function for when inotify detects a move event filesystemMonitor.onMove = delegate(string from, string to) { if (verboseLogging) {addLogEntry("[M] Local item moved: " ~ from ~ " -> " ~ to, ["verbose"]);} try { // Handle .folder -> folder if skip_dotfiles is enabled if ((appConfig.getValueBool("skip_dotfiles")) && (isDotFile(from))) { // .folder -> folder handling - has to be handled as a new folder syncEngineInstance.scanLocalFilesystemPathForNewData(to); } else { syncEngineInstance.uploadMoveItem(from, to); } markLocalWrite(); } catch (CurlException e) { if (verboseLogging) {addLogEntry("Offline, cannot move item !", ["verbose"]);} } catch (Exception e) { addLogEntry("Cannot move item: " ~ e.msg, ["info", "notify"]); } }; // Initialise the local filesystem monitor class using inotify to monitor for local filesystem changes // If we are in a --download-only method of operation, we do not enable local filesystem monitoring if (!appConfig.getValueBool("download_only")) { // Not using --download-only try { addLogEntry("Initialising filesystem inotify monitoring ...", ["info", "notify"]); filesystemMonitor.initialise(); addLogEntry("Performing initial synchronisation to ensure consistent local state ..."); } catch (MonitorException e) { // monitor class initialisation failed addLogEntry("ERROR: " ~ e.msg); return EXIT_FAILURE; } } // Filesystem monitor loop variables // Immutables immutable auto checkOnlineInterval = dur!"seconds"(appConfig.getValueLong("monitor_interval")); immutable auto githubCheckInterval = dur!"seconds"(86400); immutable auto localEchoDebounce = dur!"seconds"(10); immutable ulong fullScanFrequency = appConfig.getValueLong("monitor_fullscan_frequency"); immutable ulong logOutputSuppressionInterval = appConfig.getValueLong("monitor_log_frequency"); immutable bool webhookEnabled = appConfig.getValueBool("webhook_enabled"); immutable string loopStartOutputMessage = "################################################## NEW LOOP ##################################################"; immutable string loopStopOutputMessage = "################################################ LOOP COMPLETE ###############################################"; // Changeable variables ulong monitorLoopFullCount = 0; ulong fullScanFrequencyLoopCount = 0; ulong monitorLogOutputLoopCount = 0; MonoTime lastCheckTime = MonoTime.currTime(); MonoTime lastGitHubCheckTime = MonoTime.currTime(); while (performFileSystemMonitoring) { // Do we need to validate the runtimeSyncDirectory to check for the presence of a '.nosync' file - the disk may have been ejected .. checkForNoMountScenario(); // If we are in a --download-only method of operation, there is no filesystem monitoring, so no inotify events to check if (!appConfig.getValueBool("download_only")) { // Process any inotify events processInotifyEvents(true); } // WebSocket and Webhook Notification Handling bool notificationReceived = false; // If we are doing --upload-only however .. we need to 'ignore' online change if (!appConfig.getValueBool("upload_only")) { // Check for notifications pushed from Microsoft to the webhook if (webhookEnabled) { // Create a subscription on the first run, or renew the subscription // on subsequent runs when it is about to expire. if (oneDriveWebhook is null) { oneDriveWebhook = new OneDriveWebhook(thisTid, appConfig); oneDriveWebhook.serve(); } else { oneDriveWebhook.createOrRenewSubscription(); } } else { // WebSocket support is enabled by default, but only if the version of libcurl supports it if (appConfig.curlSupportsWebSockets) { // Did the user configure to disable 'websocket' support? if (!appConfig.getValueBool("disable_websocket_support")) { // Do we need to renew the notification URL? auto renewEarly = dur!"seconds"(120); if (appConfig.websocketNotificationUrlAvailable && appConfig.websocketUrlExpiry.length) { auto expiry = SysTime.fromISOExtString(appConfig.websocketUrlExpiry); auto now = Clock.currTime(UTC()); if (expiry - now <= renewEarly) { try { // Obtain the WebSocket Notification URL from the API endpoint syncEngineInstance.obtainWebSocketNotificationURL(); if (debugLogging) addLogEntry("Refreshed WebSocket notification URL prior to expiry", ["debug"]); } catch (Exception e) { if (debugLogging) addLogEntry("Failed to refresh WebSocket notification URL: " ~ e.msg, ["debug"]); } } } } } } } // Get the current time this loop is starting auto currentTime = MonoTime.currTime(); // Do we perform a sync with OneDrive? if ((currentTime - lastCheckTime >= checkOnlineInterval) || (monitorLoopFullCount == 0)) { // Increment relevant counters monitorLoopFullCount++; fullScanFrequencyLoopCount++; monitorLogOutputLoopCount++; // If full scan at a specific frequency enabled? if (fullScanFrequency > 0) { // Full Scan set for some 'frequency' - do we flag to perform a full scan of the online data? if (fullScanFrequencyLoopCount > fullScanFrequency) { // set full scan trigger for true up if (debugLogging) {addLogEntry("Enabling Full Scan True Up (fullScanFrequencyLoopCount > fullScanFrequency), resetting fullScanFrequencyLoopCount = 1", ["debug"]);} fullScanFrequencyLoopCount = 1; appConfig.fullScanTrueUpRequired = true; } else { // unset full scan trigger for true up if (debugLogging) {addLogEntry("Disabling Full Scan True Up", ["debug"]);} appConfig.fullScanTrueUpRequired = false; } } else { // No it is disabled - ensure this is false appConfig.fullScanTrueUpRequired = false; } // Loop Start if (debugLogging) { addLogEntry(loopStartOutputMessage, ["debug"]); addLogEntry("Total Run-Time Loop Number: " ~ to!string(monitorLoopFullCount), ["debug"]); addLogEntry("Full Scan Frequency Loop Number: " ~ to!string(fullScanFrequencyLoopCount), ["debug"]); } SysTime startFunctionProcessingTime = Clock.currTime(); if (debugLogging) {addLogEntry("Start Monitor Loop Time: " ~ to!string(startFunctionProcessingTime), ["debug"]);} // Do we perform any monitor console logging output suppression? // 'monitor_log_frequency' controls how often, in a non-verbose application output mode, how often // the full output of what is occurring is done. This is done to lessen the 'verbosity' of non-verbose // logging, but only when running in --monitor if (monitorLogOutputLoopCount > logOutputSuppressionInterval) { // re-enable the logging output as required monitorLogOutputLoopCount = 1; if (debugLogging) {addLogEntry("Allowing initial sync log output", ["debug"]);} appConfig.suppressLoggingOutput = false; } else { // do we suppress the logging output to absolute minimal if (monitorLoopFullCount == 1) { // application startup with --monitor if (debugLogging) {addLogEntry("Allowing initial sync log output", ["debug"]);} appConfig.suppressLoggingOutput = false; } else { // only suppress if we are not doing --verbose or higher if (appConfig.verbosityCount == 0) { if (debugLogging) {addLogEntry("Suppressing --monitor log output", ["debug"]);} appConfig.suppressLoggingOutput = true; } else { if (debugLogging) {addLogEntry("Allowing log output", ["debug"]);} appConfig.suppressLoggingOutput = false; } } } // How long has the application been running for? auto elapsedTime = Clock.currTime() - applicationStartTime; if (debugLogging) {addLogEntry("Application run-time thus far: " ~ to!string(elapsedTime), ["debug"]);} // Need to re-validate that the client is still online for this loop if (testInternetReachability(appConfig)) { // Starting a sync - we are online addLogEntry("Starting a sync with Microsoft OneDrive"); // Attempt to reset syncFailures from any prior loop syncEngineInstance.resetSyncFailures(); // Update cached quota details from online as this may have changed online in the background outside of this application syncEngineInstance.freshenCachedDriveQuotaDetails(); // Did the user specify --upload-only? if (appConfig.getValueBool("upload_only")) { // Perform the --upload-only sync process performUploadOnlySyncProcess(localPath, filesystemMonitor); } else { // Perform the standard sync process performStandardSyncProcess(localPath, filesystemMonitor); } // Handle any new inotify events processInotifyEvents(true); // Detail the outcome of the sync process displaySyncOutcome(); // Cleanup sync process arrays syncEngineInstance.cleanupArrays(); // Write WAL and SHM data to file for this loop and release memory used by in-memory processing if (debugLogging) {addLogEntry("Merge contents of WAL and SHM files into main database file", ["debug"]);} itemDB.performCheckpoint("PASSIVE"); } else { // Not online addLogEntry("Microsoft OneDrive service is not reachable at this time. Will re-try on next sync attempt."); } // Output end of loop processing times SysTime endFunctionProcessingTime = Clock.currTime(); if (debugLogging) { addLogEntry("End Monitor Loop Time: " ~ to!string(endFunctionProcessingTime), ["debug"]); addLogEntry("Elapsed Monitor Loop Processing Time: " ~ to!string((endFunctionProcessingTime - startFunctionProcessingTime)), ["debug"]); } // Release all the curl instances used during this loop // New curl instances will be established on next loop if (debugLogging) {addLogEntry("CurlEngine Pool Size PRE Cleanup: " ~ to!string(curlEnginePoolLength()), ["debug"]);} releaseAllCurlInstances(); // Release all CurlEngine instances if (debugLogging) {addLogEntry("CurlEngine Pool Size POST Cleanup: " ~ to!string(curlEnginePoolLength()) , ["debug"]);} // Display memory details before garbage collection if (displayMemoryUsage) { addLogEntry("Monitor Loop Count: " ~ to!string(monitorLoopFullCount)); // Get the current time in the local timezone auto timeStamp = leftJustify(Clock.currTime().toString(), 28, '0'); addLogEntry("Timestamp: " ~ to!string(timeStamp)); addLogEntry("Application Run Time: " ~ to!string(elapsedTime)); // Display memory stats before GC cleanup displayMemoryUsagePreGC(); } // Perform Garbage Collection GC.collect(); // Return free memory to the OS GC.minimize(); // Display memory details after garbage collection if (displayMemoryUsage) displayMemoryUsagePostGC(); // Log that this loop is complete if (debugLogging) {addLogEntry(loopStopOutputMessage, ["debug"]);} // performSync complete, set lastCheckTime to current time lastCheckTime = MonoTime.currTime(); // Developer break via config option if (appConfig.getValueLong("monitor_max_loop") > 0) { // developer set option to limit --monitor loops if (monitorLoopFullCount == (appConfig.getValueLong("monitor_max_loop"))) { performFileSystemMonitoring = false; addLogEntry("Exiting after " ~ to!string(monitorLoopFullCount) ~ " loops due to developer set option"); } } } if (performFileSystemMonitoring) { auto nextCheckTime = lastCheckTime + checkOnlineInterval; currentTime = MonoTime.currTime(); auto sleepTime = nextCheckTime - currentTime; if (debugLogging) {addLogEntry("Sleep for " ~ to!string(sleepTime), ["debug"]);} if (filesystemMonitor.initialised || webhookEnabled) { if (filesystemMonitor.initialised) { // If local monitor is on and is waiting (previous event was not from webhook) // Obsidian Editor has been written in such a way that it is constantly writing each and every keystroke to a file. // Not only is this really bad application behaviour, for this client, this means the application is constantly writing to disk, thus attempting to upload file changes. // Unfortunately Obsidian on Linux does not provide a built-in way to disable atomic saves or switch to a backup-copy method via configuration. if (appConfig.getValueBool("delay_inotify_processing")) { Thread.sleep(dur!("seconds")(to!int(appConfig.getValueLong("inotify_delay")))); } // Start the filesystem monitor (inotify) worker and wait for inotify event if (!notificationReceived) { filesystemMonitor.send(true); } } // Adjust sleepTime based on webhook/websocket only when NOT upload_only if (!appConfig.getValueBool("upload_only")) { if (webhookEnabled) { Duration nextWebhookCheckDuration = oneDriveWebhook.getNextExpirationCheckDuration(); if (nextWebhookCheckDuration < sleepTime) sleepTime = nextWebhookCheckDuration; notificationReceived = false; } else if (!appConfig.getValueBool("disable_websocket_support") && appConfig.curlSupportsWebSockets) { Duration nextWebsocketCheckDuration = oneDriveSocketIo.getNextExpirationCheckDuration(); if (nextWebsocketCheckDuration < sleepTime) sleepTime = nextWebsocketCheckDuration; } } // ALWAYS wait for FS worker, but only track webhook/websocket if NOT '--upload-only' int res = 1; bool onlineSignal = false; if (appConfig.getValueBool("upload_only")) { receiveTimeout(sleepTime, (int msg) { res = msg; }); } else { receiveTimeout(sleepTime, (int msg) { res = msg; }, (ulong _) { onlineSignal = true; }); } // Debug logging of worker status if (debugLogging) { addLogEntry("worker status = " ~ to!string(res), ["debug"]); if (!appConfig.getValueBool("upload_only")) { addLogEntry("notificationReceived = " ~ to!string(onlineSignal), ["debug"]); } } // Empirical evidence shows that Microsoft often sends multiple // notifications for one single change, so we need a loop to exhaust // all signals that were queued up by the webhook. The notifications // do not contain any actual changes, and we will always rely do the // delta endpoint to sync to latest. Therefore, only one sync run is // good enough to catch up for multiple notifications. // Only process online notifications if NOT '--upload-only' if (!appConfig.getValueBool("upload_only") && onlineSignal) { int signalCount = 1; while (true) { auto more = receiveTimeout(dur!"seconds"(-1), (ulong _) {}); if (more) { signalCount++; } else { auto now = MonoTime.currTime(); auto sinceLocal = now - lastLocalWrite; if (sinceLocal < localEchoDebounce) { if (debugLogging) { addLogEntry( "Debounced online refresh signal (" ~ to!string(sinceLocal.total!"msecs"()) ~ " ms since local write; threshold " ~ to!string(localEchoDebounce.total!"msecs"()) ~ " ms)", ["debug"] ); } // Ignore this reflection; skip the immediate online scan. // Next push or the regular monitor cadence will pick up genuine remote changes. break; } // Get the signal timestamp - this is as close as possible to when this was received SysTime signalTimeStamp = Clock.currTime(); signalTimeStamp.fracSecs = Duration.zero; // Log what signal we received if (webhookEnabled) { string webhookLogEntry = format("Received %s signal(s) from Webhook handler (%s)", to!string(signalCount), to!string(signalTimeStamp)); addLogEntry(webhookLogEntry); } else { string websocketLogEntry = format("Received %s signal(s) from WebSocket handler (%s)", to!string(signalCount), to!string(signalTimeStamp)); addLogEntry(websocketLogEntry); } // Perform online callback action oneDriveOnlineCallback(); break; } } } // Worker failure remains outside '--upload-only' filter if (res == -1) { addLogEntry("ERROR: Monitor worker failed."); monitorFailures = true; performFileSystemMonitoring = false; } } else { // no hooks available, nothing to check Thread.sleep(sleepTime); } } } } } else { // Exit application as the sync engine could not be initialised addLogEntry("Application Sync Engine could not be initialised correctly"); // Use exit scope return EXIT_FAILURE; } // Exit application using exit scope if (!syncEngineInstance.syncFailures && !monitorFailures) { return EXIT_SUCCESS; } else { return EXIT_FAILURE; } } // Set default application threads void setDefaultApplicationThreads() { // Read in system values int configuredThreads = to!int(appConfig.getValueLong("threads")); int systemCPUs = totalCPUs; // Warning if configuredThreads is too high if (configuredThreads > systemCPUs) { addLogEntry(); addLogEntry("WARNING: Configured 'threads = " ~ to!string(configuredThreads) ~ "' exceeds available CPU cores (" ~ to!string(systemCPUs) ~ ")."); addLogEntry(" This may lead to reduced performance, CPU contention, and instability. For best results, set 'threads' no higher than the number of physical CPU cores."); addLogEntry(); } // Set the default threads based on configured option defaultPoolThreads(configuredThreads); } // Retrieves the maximum inotify watches allowed by the system string getMaxInotifyWatches() { // Predefined Versions // https://dlang.org/spec/version.html#predefined-versions version (linux) { try { // Read max inotify watches from procfs on Linux return strip(readText("/proc/sys/fs/inotify/max_user_watches")); } catch (Exception e) { return "Unknown (Error reading /proc/sys/fs/inotify/max_user_watches)"; } } else version (FreeBSD) { // FreeBSD uses kqueue instead of inotify, no direct equivalent return "N/A (uses kqueue)"; } else version (OpenBSD) { // OpenBSD uses kqueue instead of inotify, no direct equivalent return "N/A (uses kqueue)"; } else { return "Unsupported platform"; } } // Print error message when --sync or --monitor has not been used and no valid 'no-sync' operation was requested void printMissingOperationalSwitchesError() { // notify the user that --sync or --monitor were missing addLogEntry(); addLogEntry("Your command line input is missing either the '--sync' or '--monitor' switches. Please include one (but not both) of these switches in your command line, or refer to 'onedrive --help' for additional guidance."); addLogEntry(); addLogEntry("It is important to note that you must include one of these two arguments in your command line for the application to perform a synchronisation with Microsoft OneDrive"); addLogEntry(); } // Function used for WebSocket or Webhook callbacks to perform specific activities void oneDriveOnlineCallback() { // If we are in a --download-only method of operation, there is no filesystem monitoring, so no inotify events to check if (!appConfig.getValueBool("download_only")) { // Handle inotify events processInotifyEvents(true); } // Sync any online change down to the local disk // If we are doing --upload-only however .. we need to 'ignore' online change if (!appConfig.getValueBool("upload_only")) { // We are not doing an --upload-only scenario .. sync online change --> local syncEngineInstance.syncOneDriveAccountToLocalDisk(); } if (appConfig.getValueBool("monitor")) { // Handle inotify events processInotifyEvents(true); } } // Perform only an upload of data when using --upload-only void performUploadOnlySyncProcess(string localPath, Monitor filesystemMonitor = null) { // Perform the local database consistency check, picking up locally modified data and uploading this to OneDrive syncEngineInstance.performDatabaseConsistencyAndIntegrityCheck(); if (appConfig.getValueBool("monitor")) { // Handle any inotify events whilst the DB was being scanned processInotifyEvents(true); } // Scan the configured 'sync_dir' for new data to upload syncEngineInstance.scanLocalFilesystemPathForNewData(localPath); if (appConfig.getValueBool("monitor")) { // Handle any new inotify events whilst the local filesystem was being scanned processInotifyEvents(true); } } // Perform the normal application sync process void performStandardSyncProcess(string localPath, Monitor filesystemMonitor = null) { // If we are performing log suppression, output this message so the user knows what is happening if (appConfig.suppressLoggingOutput) { addLogEntry("Syncing changes from Microsoft OneDrive ..."); } // Zero out these arrays syncEngineInstance.fileDownloadFailures = []; syncEngineInstance.fileUploadFailures = []; // Which way do we sync first? // OneDrive first then local changes (normal operational process that uses OneDrive as the source of truth) // Local First then OneDrive changes (alternate operation process to use local files as source of truth) if (appConfig.getValueBool("local_first")) { // Local data first // Perform the local database consistency check, picking up locally modified data and uploading this to OneDrive syncEngineInstance.performDatabaseConsistencyAndIntegrityCheck(); if (appConfig.getValueBool("monitor")) { // Handle any inotify events whilst the DB was being scanned processInotifyEvents(true); } // Scan the configured 'sync_dir' for new data to upload to OneDrive syncEngineInstance.scanLocalFilesystemPathForNewData(localPath); if (appConfig.getValueBool("monitor")) { // Handle any new inotify events whilst the local filesystem was being scanned processInotifyEvents(true); } // Download data from OneDrive last syncEngineInstance.syncOneDriveAccountToLocalDisk(); if (appConfig.getValueBool("monitor")) { // Cancel out any inotify events from downloading data processInotifyEvents(false); } // At this point, we have done a sync from: // local -> online // online -> local // // Everything now should be 'in sync' and the database correctly populated with data // If --resync was used, we need to unset this as sync.d performs certain queries depending on if 'resync' is set or not if (appConfig.getValueBool("resync")) { // unset 'resync' now that everything has been performed appConfig.setValueBool("resync" , false); } } else { // Normal sync process // Download data from OneDrive first syncEngineInstance.syncOneDriveAccountToLocalDisk(); if (appConfig.getValueBool("monitor")) { // Cancel out any inotify events from downloading data processInotifyEvents(false); } // Perform the local database consistency check, picking up locally modified data and uploading this to OneDrive syncEngineInstance.performDatabaseConsistencyAndIntegrityCheck(); if (appConfig.getValueBool("monitor")) { // Handle any inotify events whilst the DB was being scanned processInotifyEvents(true); } // Is --download-only NOT configured? if (!appConfig.getValueBool("download_only")) { // Scan the configured 'sync_dir' for new data to upload to OneDrive syncEngineInstance.scanLocalFilesystemPathForNewData(localPath); if (appConfig.getValueBool("monitor")) { // Handle any new inotify events whilst the local filesystem was being scanned processInotifyEvents(true); } // If we are not doing a 'force_children_scan' perform a true-up // 'force_children_scan' is used when using /children rather than /delta and it is not efficient to re-run this exact same process twice if (!appConfig.getValueBool("force_children_scan")) { // Perform the final true up scan to ensure we have correctly replicated the current online state locally if (!appConfig.suppressLoggingOutput) { addLogEntry("Performing a last examination of the most recent online data within Microsoft OneDrive to complete the reconciliation process"); } // We pass in the 'appConfig.fullScanTrueUpRequired' value which then flags do we use the configured 'deltaLink' // If 'appConfig.fullScanTrueUpRequired' is true, we do not use the 'deltaLink' if we are in --monitor mode, thus forcing a full scan true up syncEngineInstance.syncOneDriveAccountToLocalDisk(); if (appConfig.getValueBool("monitor")) { // Cancel out any inotify events from downloading data processInotifyEvents(false); } } } // At this point, we have done a sync from: // online -> local // local -> online (if not doing --download-only) // online -> local (if not doing --download-only) // // Everything now should be 'in sync' and the database correctly populated with data // If --resync was used, we need to unset this as sync.d performs certain queries depending on if 'resync' is set or not if (appConfig.getValueBool("resync")) { // unset 'resync' now that everything has been performed appConfig.setValueBool("resync" , false); } } } // Process any inotify events void processInotifyEvents(bool updateFlag) { // Attempt to process or cancel inotify events // filesystemMonitor.update will throw this, thus needs to be caught // monitor.MonitorException@src/monitor.d(549): inotify queue overflow: some events may be lost (Interrupted system call) try { // Process any inotify events or cancel events based on flag value // True = process // False = cancel filesystemMonitor.update(updateFlag); } catch (MonitorException e) { // Catch any exceptions thrown by inotify / monitor engine addLogEntry("ERROR: The following inotify error was generated: " ~ e.msg); } } // Display the sync outcome void displaySyncOutcome() { // Detail any download or upload transfer failures syncEngineInstance.displaySyncFailures(); // Sync is either complete or partially complete if (!syncEngineInstance.syncFailures) { // No download or upload issues if (!appConfig.getValueBool("monitor")) addLogEntry(); // Add an additional line break so that this is clear when using --sync addLogEntry("Sync with Microsoft OneDrive is complete"); } else { addLogEntry(); addLogEntry("Sync with Microsoft OneDrive has completed, however there are items that failed to sync."); // Due to how the OneDrive API works 'changes' such as add new files online, rename files online, delete files online are only sent once when using the /delta API call. // That we failed to download it, we need to track that, and then issue a --resync to download any of these failed files .. unfortunate, but there is no easy way here if (!syncEngineInstance.fileDownloadFailures.empty) { addLogEntry("To fix any download failures you may need to perform a --resync to ensure this system is correctly synced with your Microsoft OneDrive Account"); } if (!syncEngineInstance.fileUploadFailures.empty) { addLogEntry("To fix any upload failures you may need to perform a --resync to ensure this system is correctly synced with your Microsoft OneDrive Account"); } // So that from a logging perspective these messages are clear, add a line break in addLogEntry(); } } // Perform database file removal void processResyncDatabaseRemoval(string databaseFilePathToRemove) { // Log what we are doing if (debugLogging) {addLogEntry("Testing if we have exclusive access to local database file", ["debug"]);} // Are we the only running instance? Test that we can open the database file path itemDB = new ItemDatabase(databaseFilePathToRemove); // did we successfully initialise the database class? if (!itemDB.isDatabaseInitialised()) { // no .. destroy class itemDB = null; // exit application - void function, force exit this way exit(EXIT_FAILURE); } // If we have exclusive access we will not have exited // destroy access test itemDB = null; // delete application sync state addLogEntry("Deleting the saved application sync status ..."); if (!dryRun) { safeRemove(databaseFilePathToRemove); } else { // --dry-run scenario ... technically we should not be making any local file changes ....... addLogEntry("DRY-RUN: Not removing the saved application sync status"); } } // Clean up the local database files void cleanupDatabaseFiles(string activeDatabaseFileName) { // Temp variables string databaseShmFile = activeDatabaseFileName ~ "-shm"; string databaseWalFile = activeDatabaseFileName ~ "-wal"; // Are we performing a --dry-run? if (dryRun) { // If the dry run database exists, clean this up if (exists(activeDatabaseFileName)) { // remove the dry run database file if (debugLogging) {addLogEntry("DRY-RUN: Removing items-dryrun.sqlite3 as it still exists for some reason", ["debug"]);} safeRemove(activeDatabaseFileName); } } else { // we may have not been using --dry-run, however we may have been running some operations that use a dry-run database, and this needs to be explicitly cleaned up if (exists(appConfig.databaseFilePathDryRun)) { if (debugLogging) {addLogEntry("Removing items-dryrun.sqlite3 as it still exists for some reason post being used for non-dryrun operations", ["debug"]);} safeRemove(appConfig.databaseFilePathDryRun); } } // Silent cleanup of -shm file if it exists if (exists(databaseShmFile)) { // Configure the log message string logMessage = "Removing " ~ baseName(databaseShmFile) ~ " as it still exists for some reason"; // Is this a --dry-run scenario if (dryRun) { logMessage = "DRY-RUN: " ~ logMessage; } // Remove -shm file if (debugLogging) {addLogEntry(logMessage, ["debug"]);} safeRemove(databaseShmFile); } // Silent cleanup of wal files if it exists if (exists(databaseWalFile)) { // Configure the log message string logMessage = "Removing " ~ baseName(databaseWalFile) ~ " as it still exists for some reason"; // Is this a --dry-run scenario if (dryRun) { logMessage = "DRY-RUN: " ~ logMessage; } // Remove -wal file if (debugLogging) {addLogEntry(logMessage, ["debug"]);} safeRemove(databaseWalFile); } } // Perform a check to see if this is a mount point, and if the 'mount' has gone void checkForNoMountScenario() { // If this is a 'mounted' folder, the 'mount point' should have this file to help the application stop any action to preserve data because the drive to mount is not currently mounted if (appConfig.getValueBool("check_nomount")) { // we were asked to check the mount point for the presence of a '.nosync' file if (exists(".nosync")) { addLogEntry("ERROR: .nosync file found in directory mount point. Aborting application startup process to safeguard data.", ["info", "notify"]); // Perform the shutdown process performSynchronisedExitProcess("check_nomount"); // Exit exit(EXIT_FAILURE); } } } // Setup a signal handler for catching SIGINT, SIGTERM and SIGSEGV (CTRL-C and others) during application execution void setupSignalHandler() { sigaction_t action; action.sa_handler = &exitViaSignalHandler; // Direct function pointer assignment sigemptyset(&action.sa_mask); // Initialize the signal set to empty action.sa_flags = 0; sigaction(SIGINT, &action, null); // Interrupt from keyboard sigaction(SIGTERM, &action, null); // Termination signal sigaction(SIGSEGV, &action, null); // Invalid Memory Access signal } // Catch SIGINT (CTRL-C), SIGTERM (kill) and SIGSEGV (invalid memory access), handle rapid repeat CTRL-C presses extern(C) nothrow @nogc @system void exitViaSignalHandler(int signo) { // Update global exitHandlerTriggered flag so that objects that depend on this know we are shutting down exitHandlerTriggered = true; // Catch the generation of SIGSEV post SIGINT or SIGTERM event if (signo == SIGSEGV) { // Was SIGTERM used? if (!sigtermHandlerTriggered) { // No .. so most likely SIGINT (CTRL-C) printf("Due to a termination signal, internal processing stopped abruptly. The application will now exit in a unclean manner.\n"); exit(130); } else { // High probability of being shutdown by systemd, for example: systemctl --user stop onedrive // Exit in a manner that does not trigger an exit failure in systemd exit(0); } } if (signo == SIGTERM) { // systemd will use SIGTERM to terminate a running process sigtermHandlerTriggered = true; } if (shutdownInProgress) { return; // Ignore subsequent presses } else { // Disable logging suppression appConfig.suppressLoggingOutput = false; // Flag we are shutting down shutdownInProgress = true; try { assumeNoGC ( () { // Log that a termination signal was caught addLogEntry("\nReceived termination signal, attempting to cleanly shutdown application"); // Try and shutdown in a safe and synchronised manner performSynchronisedExitProcess("SIGINT-SIGTERM-HANDLER"); })(); } catch (Exception e) { // Any output here will cause a GC allocation // - Error: `@nogc` function `main.exitHandler` cannot call non-@nogc function `std.stdio.writeln!string.writeln` // - Error: cannot use operator `~` in `@nogc` function `main.exitHandler` // writeln("Exception during shutdown: " ~ e.msg); } // Exit the process with the provided exit code exit(signo); } } // Handle application exit void performSynchronisedExitProcess(string scopeCaller = null) { synchronized { // Perform cleanup and shutdown of various services and resources try { // Log who called this function if (debugLogging) {addLogEntry("performSynchronisedExitProcess called by: " ~ scopeCaller, ["debug"]);} // Remove Desktop integration if(performFileSystemMonitoring) { // Was desktop integration enabled? if (appConfig.getValueBool("display_manager_integration")) { // Attempt removal attemptFileManagerIntegrationRemoval(); } } // Shutdown the OneDrive Webhook instance shutdownOneDriveWebhook(); // Shutdown the OneDrive WebSocket instance shutdownOneDriveSocketIo(); // Shutdown any local filesystem monitoring shutdownFilesystemMonitor(); // Shutdown the sync engine if (scopeCaller == "SIGINT-SIGTERM-HANDLER") { // Wait for all parallel jobs that depend on the database being available to complete addLogEntry("Waiting for any existing upload|download process to complete"); } shutdownSyncEngine(); // Release all CurlEngine instances releaseAllCurlInstances(); // Shutdown the client side filtering objects shutdownSelectiveSync(); // Shutdown the database shutdownDatabase(); // Shutdown the application configuration objects - nothing should be active now shutdownAppConfig(); // Shutdown application logging shutdownApplicationLogging(); } catch (Exception e) { addLogEntry("Error during performStandardExitProcess: " ~ e.toString(), ["error"]); } } } void shutdownOneDriveWebhook() { if (oneDriveWebhook !is null) { if (debugLogging) {addLogEntry("Shutting down OneDrive Webhook instance", ["debug"]);} oneDriveWebhook.stop(); object.destroy(oneDriveWebhook); oneDriveWebhook = null; if (debugLogging) {addLogEntry("Shutdown of OneDrive Webhook instance is complete", ["debug"]);} } } void shutdownOneDriveSocketIo() { if (oneDriveSocketIo !is null) { if (debugLogging) addLogEntry("Shutting down OneDrive WebSocket instance", ["debug"]); oneDriveSocketIo.stop(); object.destroy(oneDriveSocketIo); oneDriveSocketIo = null; if (debugLogging) addLogEntry("Shutdown of OneDrive WebSocket instance complete", ["debug"]); } } void shutdownFilesystemMonitor() { if (filesystemMonitor !is null) { if (debugLogging) {addLogEntry("Shutting down Filesystem Monitoring instance", ["debug"]);} filesystemMonitor.shutdown(); object.destroy(filesystemMonitor); filesystemMonitor = null; if (debugLogging) {addLogEntry("Shutdown of Filesystem Monitoring instance is complete", ["debug"]);} } } void shutdownSelectiveSync() { if (selectiveSync !is null) { if (debugLogging) {addLogEntry("Shutting down Client Side Filtering instance", ["debug"]);} selectiveSync.shutdown(); object.destroy(selectiveSync); selectiveSync = null; if (debugLogging) {addLogEntry("Shutdown of Client Side Filtering instance is complete", ["debug"]);} } } void shutdownSyncEngine() { if (syncEngineInstance !is null) { if (debugLogging) {addLogEntry("Shutting down Sync Engine instance", ["debug"]);} syncEngineInstance.shutdown(); // Make sure any running thread completes first object.destroy(syncEngineInstance); syncEngineInstance = null; if (debugLogging) {addLogEntry("Shutdown Sync Engine instance is complete", ["debug"]);} } } void shutdownDatabase() { if (itemDB !is null && itemDB.isDatabaseInitialised()) { if (debugLogging) {addLogEntry("Shutting down Database instance", ["debug"]);} // Write WAL and SHM data to file if (debugLogging) {addLogEntry("Merge contents of WAL and SHM files into main database file before shutting down database", ["debug"]);} itemDB.performCheckpoint("TRUNCATE"); // Do we perform a database vacuum? if (performDatabaseVacuum) { // Logging to attempt this is denoted from performVacuum() - so no need to confirm here itemDB.performVacuum(); // If this completes, it is denoted from performVacuum() - so no need to confirm here } // Close the DB File Handle itemDB.closeDatabaseFile(); object.destroy(itemDB); cleanupDatabaseFiles(runtimeDatabaseFile); itemDB = null; if (debugLogging) {addLogEntry("Shutdown of Database instance is complete", ["debug"]);} } } void shutdownAppConfig() { if (appConfig !is null) { if (debugLogging) {addLogEntry("Shutting down Application Configuration instance", ["debug"]);} object.destroy(appConfig); appConfig = null; if (debugLogging) {addLogEntry("Shutdown of Application Configuration instance is complete", ["debug"]);} } } void shutdownApplicationLogging() { // Log that we are exiting if (loggingStillInitialised()) { if (loggingActive()) { // join all threads thread_joinAll(); if (debugLogging) {addLogEntry("Application is exiting", ["debug"]);} addLogEntry("#######################################################################################################################################", ["logFileOnly"]); // Destroy the shared logging buffer which flushes any remaining logs if (debugLogging) {addLogEntry("Shutting down Application Logging instance", ["debug"]);} // Allow any logging complete before we exit Thread.sleep(dur!("msecs")(500)); // Shutdown Logging which also sets logBuffer to null shutdownLogging(); } } } string compilerDetails() { version(DigitalMars) enum compiler = "DMD"; else version(LDC) enum compiler = "LDC"; else version(GNU) enum compiler = "GDC"; else enum compiler = "Unknown compiler"; string compilerString = compiler ~ " " ~ to!string(__VERSION__); return compilerString; } void attemptFileManagerIntegration() { // Are we running under a Desktop Manager (GNOME or KDE)? if (appConfig.isGuiSessionDetected()) { // Generate desktop hints auto hints = appConfig.detectDesktop(); // GNOME Desktop File Manager integration if (hints.gnome) { // Attempt integration appConfig.addGnomeBookmark(); appConfig.setOneDriveFolderIcon(); return; } // KDE Desktop File Manager integration if (hints.kde) { // Attempt integration appConfig.addKDEPlacesEntry(); return; } } } void attemptFileManagerIntegrationRemoval() { // Are we running under a Desktop Manager (GNOME or KDE)? if (appConfig.isGuiSessionDetected()) { // Generate desktop hints auto hints = appConfig.detectDesktop(); // GNOME Desktop File Manager integration removal if (hints.gnome) { // Attempt integration removal appConfig.removeGnomeBookmark(); appConfig.removeOneDriveFolderIcon(); return; } // KDE Desktop File Manager integration removal if (hints.kde) { // Attempt integration removal appConfig.removeKDEPlacesEntry(); return; } } } onedrive-2.5.10/src/monitor.d000066400000000000000000000642601513710110600160400ustar00rootroot00000000000000// What is this module called? module monitor; // What does this module require to function? import core.stdc.errno; import core.stdc.stdlib; import core.sys.linux.sys.inotify; import core.sys.posix.poll; import core.sys.posix.unistd; import core.sys.posix.sys.select; import core.thread; import core.time; import std.algorithm; import std.concurrency; import std.exception; import std.file; import std.path; import std.process; import std.regex; import std.stdio; import std.string; import std.conv; import core.sync.mutex; // What other modules that we have created do we need to import? import config; import util; import log; import clientSideFiltering; // Relevant inotify events version(FreeBSD) { private immutable uint32_t mask = IN_CLOSE_WRITE | IN_CREATE | IN_DELETE | IN_MOVE; } else { private immutable uint32_t mask = IN_CLOSE_WRITE | IN_CREATE | IN_DELETE | IN_MOVE | IN_IGNORED | IN_Q_OVERFLOW; } class MonitorException: ErrnoException { @safe this(string msg, string file = __FILE__, size_t line = __LINE__) { super(msg, file, line); } } class MonitorBackgroundWorker { // inotify file descriptor int fd; Pipe p; bool isAlive; this() { isAlive = true; p = pipe(); } shared void initialise() { fd = inotify_init(); if (fd < 0) throw new MonitorException("inotify_init failed"); } // Add this path to be monitored shared int addInotifyWatch(string pathname) { int wd = inotify_add_watch(fd, toStringz(pathname), mask); if (wd < 0) { if (errno() == ENOSPC) { // Predefined Versions // https://dlang.org/spec/version.html#predefined-versions version (linux) { // Read max inotify watches from procfs on Linux ulong maxInotifyWatches = to!int(strip(readText("/proc/sys/fs/inotify/max_user_watches"))); addLogEntry("The user limit on the total number of inotify watches has been reached."); addLogEntry("Your current limit of inotify watches is: " ~ to!string(maxInotifyWatches)); addLogEntry("It is recommended that you change the max number of inotify watches to at least double your existing value."); addLogEntry("To change the current max number of watches to " ~ to!string((maxInotifyWatches * 2)) ~ " run:"); addLogEntry("EXAMPLE: sudo sysctl fs.inotify.max_user_watches=" ~ to!string((maxInotifyWatches * 2))); } else { // some other platform addLogEntry("The user limit on the total number of inotify watches has been reached."); addLogEntry("Please seek support from your distribution on how to increase the max number of inotify watches to at least double your existing value."); } } if (errno() == 13) { if (verboseLogging) {addLogEntry("WARNING: inotify_add_watch failed - permission denied: " ~ pathname, ["verbose"]);} } // Flag any other errors addLogEntry("ERROR: inotify_add_watch failed: " ~ pathname); return wd; } // Add path to inotify watch - required regardless if a '.folder' or 'folder' if (debugLogging) {addLogEntry("inotify_add_watch successfully added for: " ~ pathname, ["debug"]);} // Do we log that we are monitoring this directory? if (isDir(pathname)) { // Log that this is directory is being monitored if (verboseLogging) {addLogEntry("Monitoring directory: " ~ pathname, ["verbose"]);} } return wd; } shared int removeInotifyWatch(int wd) { assert(fd > 0, "File descriptor 'fd' is invalid."); assert(wd > 0, "Watch descriptor 'wd' is invalid."); // Debug logging of the inotify watch being removed if (debugLogging) {addLogEntry("Attempting to remove inotify watch: fd=" ~ fd.to!string ~ ", wd=" ~ wd.to!string, ["debug"]);} // return the value of performing the action return inotify_rm_watch(fd, wd); } shared void watch(Tid callerTid) { // On failure, send -1 to caller int res; // wait for the caller to be ready receiveOnly!int(); while (isAlive) { fd_set fds; FD_ZERO (&fds); FD_SET(fd, &fds); // Listen for messages from the caller FD_SET((cast()p).readEnd.fileno, &fds); res = select(FD_SETSIZE, &fds, null, null, null); if(res == -1) { if(errno() == EINTR) { // Received an interrupt signal but no events are available // directly watch again } else { // Error occurred, tell caller to terminate. callerTid.send(-1); break; } } else { // Wake up caller callerTid.send(1); // wait for the caller to be ready if (isAlive) isAlive = receiveOnly!bool(); } } } shared void interrupt() { isAlive = false; (cast()p).writeEnd.writeln("done"); (cast()p).writeEnd.flush(); } shared void shutdown() { isAlive = false; if (fd > 0) { close(fd); fd = 0; (cast()p).close(); } } } void startMonitorJob(shared(MonitorBackgroundWorker) worker, Tid callerTid) { try { worker.watch(callerTid); } catch (OwnerTerminated error) { // caller is terminated worker.shutdown(); } } enum ActionType { moved, deleted, changed, createDir } struct Action { ActionType type; bool skipped; string src; string dst; } struct ActionHolder { Action[] actions; size_t[string] srcMap; void append(ActionType type, string src, string dst=null) { size_t[] pendingTargets; switch (type) { case ActionType.changed: if (src in srcMap && actions[srcMap[src]].type == ActionType.changed) { // skip duplicate operations return; } break; case ActionType.createDir: break; case ActionType.deleted: if (src in srcMap) { size_t pendingTarget = srcMap[src]; // Skip operations require reading local file that is gone switch (actions[pendingTarget].type) { case ActionType.changed: case ActionType.createDir: actions[srcMap[src]].skipped = true; srcMap.remove(src); break; default: break; } } break; case ActionType.moved: for(int i = 0; i < actions.length; i++) { // Only match for latest operation if (actions[i].src in srcMap) { switch (actions[i].type) { case ActionType.changed: case ActionType.createDir: // check if the source is the prefix of the target string prefix = src ~ "/"; string target = actions[i].src; if (prefix[0] != '.') prefix = "./" ~ prefix; if (target[0] != '.') target = "./" ~ target; string comm = commonPrefix(prefix, target); if (src == actions[i].src || comm.length == prefix.length) { // Hold operations require reading local file that is moved after the target is moved online pendingTargets ~= i; actions[i].skipped = true; srcMap.remove(actions[i].src); if (comm.length == target.length) actions[i].src = dst; else actions[i].src = dst ~ target[comm.length - 1 .. target.length]; } break; default: break; } } } break; default: break; } actions ~= Action(type, false, src, dst); srcMap[src] = actions.length - 1; foreach (pendingTarget; pendingTargets) { actions ~= actions[pendingTarget]; actions[$-1].skipped = false; srcMap[actions[$-1].src] = actions.length - 1; } } } final class Monitor { // Class variables ApplicationConfig appConfig; ClientSideFiltering selectiveSync; // Are we verbose in logging output bool verbose = false; // skip symbolic links bool skip_symlinks = false; // check for .nosync if enabled bool check_nosync = false; // check if initialised bool initialised = false; // Worker Tid Tid workerTid; // Configure Private Class Variables shared(MonitorBackgroundWorker) worker; // map every inotify watch descriptor to its directory private string[int] wdToDirName; // map the inotify cookies of move_from events to their path private string[int] cookieToPath; // buffer to receive the inotify events private void[] buffer; // Mutex to support thread safe access of inotify watch descriptors private Mutex inotifyMutex; // Configure function delegates void delegate(string path) onDirCreated; void delegate(string[] path) onFileChanged; void delegate(string path) onDelete; void delegate(string from, string to) onMove; // List of paths that were moved, not deleted bool[string] movedNotDeleted; // An array of actions ActionHolder actionHolder; // Configure the class variable to consume the application configuration including selective sync this(ApplicationConfig appConfig, ClientSideFiltering selectiveSync) { this.appConfig = appConfig; this.selectiveSync = selectiveSync; inotifyMutex = new Mutex(); // Define a Mutex for thread-safe access } // The destructor should only clean up resources owned directly by this instance ~this() { object.destroy(worker); } // Initialise the monitor class void initialise() { // Configure the variables skip_symlinks = appConfig.getValueBool("skip_symlinks"); check_nosync = appConfig.getValueBool("check_nosync"); if (appConfig.getValueLong("verbose") > 0) { verbose = true; } assert(onDirCreated && onFileChanged && onDelete && onMove); if (!buffer) buffer = new void[4096]; worker = cast(shared) new MonitorBackgroundWorker; worker.initialise(); // from which point do we start watching for changes? string monitorPath; if (appConfig.getValueString("single_directory") != ""){ // single directory in use, monitor only this path monitorPath = "./" ~ appConfig.getValueString("single_directory"); } else { // default monitorPath = "."; } addRecursive(monitorPath); // Start monitoring workerTid = spawn(&startMonitorJob, worker, thisTid); initialised = true; } // Communication with worker void send(bool isAlive) { workerTid.send(isAlive); } // Shutdown the monitor class void shutdown() { if(!initialised) return; initialised = false; // Release all resources synchronized(inotifyMutex) { // Interrupt the worker to allow removal of inotify watch descriptors worker.interrupt(); // Remove all the inotify watch descriptors removeAll(); // Notify the worker that the monitor has been shutdown worker.interrupt(); send(false); wdToDirName = null; } } // Recursively add this path to be monitored private void addRecursive(string dirname) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // skip non existing/disappeared items if (!exists(dirname)) { if (verboseLogging) {addLogEntry("Not adding non-existing/disappeared directory: " ~ dirname, ["verbose"]);} return; } // Issue #3404: If the file is a very short lived file, and exists when the above test is done, but then is removed shortly thereafter, we need to catch this as a filesystem exception try { // Skip the monitoring of any user filtered items if (dirname != ".") { // Is the directory name a match to a skip_dir entry? // The path that needs to be checked needs to include the '/' // This due to if the user has specified in skip_dir an exclusive path: '/path' - that is what must be matched if (isDir(dirname)) { if (selectiveSync.isDirNameExcluded(dirname.strip('.'))) { // dont add a watch for this item if (debugLogging) {addLogEntry("Skipping monitoring due to skip_dir match: " ~ dirname, ["debug"]);} return; } } if (isFile(dirname)) { // Is the filename a match to a skip_file entry? // The path that needs to be checked needs to include the '/' // This due to if the user has specified in skip_file an exclusive path: '/path/file' - that is what must be matched if (selectiveSync.isFileNameExcluded(dirname.strip('.'))) { // dont add a watch for this item if (debugLogging) {addLogEntry("Skipping monitoring due to skip_file match: " ~ dirname, ["debug"]);} return; } } // Is the path excluded by sync_list? if (selectiveSync.isPathExcludedViaSyncList(buildNormalizedPath(dirname))) { // dont add a watch for this item if (debugLogging) {addLogEntry("Skipping monitoring parent path due to sync_list exclusion: " ~ dirname, ["debug"]);} // However before we return, we need to test this path tree as a branch on this tree may be included by an anywhere exclusion rule. Do 'anywhere' inclusion rules exist? if (isDir(dirname)) { // Do any 'sync_list' anywhere inclusion rules exist? if (selectiveSync.syncListAnywhereInclusionRulesExist()) { // Yes .. if (debugLogging) {addLogEntry("Bypassing 'sync_list' exclusion to test if children should be monitored due to 'sync_list' anywhere rule existence", ["debug"]);} // Traverse this directory traverseDirectory(dirname); } } // For the original path, we return, no inotify watch was added return; } } // skip symlinks if configured if (isSymlink(dirname)) { // if config says so we skip all symlinked items if (skip_symlinks) { // dont add a watch for this directory return; } } // Do we need to check for .nosync? Only if check_nosync is true if (check_nosync) { if (exists(buildNormalizedPath(dirname) ~ "/.nosync")) { if (verboseLogging) {addLogEntry("Skipping watching path - .nosync found & --check-for-nosync enabled: " ~ buildNormalizedPath(dirname), ["verbose"]);} return; } } if (isDir(dirname)) { // This is a directory // is the path excluded if skip_dotfiles configured and path is a .folder? if ((selectiveSync.getSkipDotfiles()) && (isDotFile(dirname))) { // dont add a watch for this directory return; } } // passed all potential exclusions // add inotify watch for this path / directory / file if (debugLogging) {addLogEntry("Calling worker.addInotifyWatch() for this dirname: " ~ dirname, ["debug"]);} int wd = worker.addInotifyWatch(dirname); if (wd > 0) { wdToDirName[wd] = buildNormalizedPath(dirname) ~ "/"; } // if this is a directory, recursively add this path if (isDir(dirname)) { traverseDirectory(dirname); } // Catch any FileException error which is generated } catch (std.file.FileException e) { // Standard filesystem error displayFileSystemErrorMessage(e.msg, thisFunctionName, dirname); return; } } // Traverse directory to test if this should have an inotify watch added private void traverseDirectory(string dirname) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Current path for error logging string currentPath; // Try and get all the directory entities for this path try { auto pathList = dirEntries(dirname, SpanMode.shallow, false); foreach(DirEntry entry; pathList) { currentPath = entry.name; if (entry.isDir) { if (debugLogging) {addLogEntry("Calling addRecursive() for this directory: " ~ entry.name, ["debug"]);} addRecursive(entry.name); } } // Catch any FileException error which is generated } catch (std.file.FileException e) { // Standard filesystem error displayFileSystemErrorMessage(e.msg, thisFunctionName, currentPath); return; } catch (Exception e) { // Issue #1154 handling // Need to check for: Failed to stat file in error message if (canFind(e.msg, "Failed to stat file")) { // File system access issue addLogEntry("ERROR: The local file system returned an error with the following message:"); addLogEntry(" Error Message: " ~ e.msg); addLogEntry("ACCESS ERROR: Please check your UID and GID access to this file, as the permissions on this file is preventing this application to read it"); addLogEntry("\nFATAL: Forcing exiting application to avoid deleting data due to local file system access issues\n"); // Must force exit here, allow logging to be done forceExit(); } else { // some other error displayFileSystemErrorMessage(e.msg, thisFunctionName, currentPath); return; } } } // Remove a watch descriptor private void removeAll() { string[int] copy; synchronized(inotifyMutex) { copy = wdToDirName.dup; // Make a thread-safe copy } // Loop through the watch descriptors and remove foreach (wd, path; copy) { remove(wd); } } private void remove(int wd) { assert(wd in wdToDirName); synchronized(inotifyMutex) { int ret = worker.removeInotifyWatch(wd); if (ret < 0) throw new MonitorException("inotify_rm_watch failed"); if (verboseLogging) {addLogEntry("Stopped monitoring directory (inotify watch removed): " ~ to!string(wdToDirName[wd]), ["verbose"]);} wdToDirName.remove(wd); } } // Remove the watch descriptors associated to the given path private void remove(const(char)[] path) { path ~= "/"; foreach (wd, dirname; wdToDirName) { if (dirname.startsWith(path)) { int ret = worker.removeInotifyWatch(wd); if (ret < 0) throw new MonitorException("inotify_rm_watch failed"); wdToDirName.remove(wd); if (verboseLogging) {addLogEntry("Stopped monitoring directory (inotify watch removed): " ~ dirname, ["verbose"]);} } } } // Return the file path from an inotify event private string getPath(const(inotify_event)* event) { string path = wdToDirName[event.wd]; if (event.len > 0) path ~= fromStringz(event.name.ptr); if (debugLogging) {addLogEntry("inotify path event for: " ~ path, ["debug"]);} return path; } // Update void update(bool useCallbacks = true) { if(!initialised) return; pollfd fds = { fd: worker.fd, events: POLLIN }; while (true) { bool hasNotification = false; int sleep_counter = 0; // Batch events up to 5 seconds while (sleep_counter < 5) { int ret = poll(&fds, 1, 0); if (ret == -1) throw new MonitorException("poll failed"); else if (ret == 0) break; // no events available hasNotification = true; size_t length = read(worker.fd, buffer.ptr, buffer.length); if (length == -1) throw new MonitorException("read failed"); int i = 0; while (i < length) { inotify_event *event = cast(inotify_event*) &buffer[i]; string path; string evalPath; // inotify event debug if (debugLogging) { addLogEntry("inotify event wd: " ~ to!string(event.wd), ["debug"]); addLogEntry("inotify event mask: " ~ to!string(event.mask), ["debug"]); addLogEntry("inotify event cookie: " ~ to!string(event.cookie), ["debug"]); addLogEntry("inotify event len: " ~ to!string(event.len), ["debug"]); addLogEntry("inotify event name: " ~ to!string(event.name), ["debug"]); } // inotify event handling if (debugLogging) { if (event.mask & IN_ACCESS) addLogEntry("inotify event flag: IN_ACCESS", ["debug"]); if (event.mask & IN_MODIFY) addLogEntry("inotify event flag: IN_MODIFY", ["debug"]); if (event.mask & IN_ATTRIB) addLogEntry("inotify event flag: IN_ATTRIB", ["debug"]); if (event.mask & IN_CLOSE_WRITE) addLogEntry("inotify event flag: IN_CLOSE_WRITE", ["debug"]); if (event.mask & IN_CLOSE_NOWRITE) addLogEntry("inotify event flag: IN_CLOSE_NOWRITE", ["debug"]); if (event.mask & IN_MOVED_FROM) addLogEntry("inotify event flag: IN_MOVED_FROM", ["debug"]); if (event.mask & IN_MOVED_TO) addLogEntry("inotify event flag: IN_MOVED_TO", ["debug"]); if (event.mask & IN_CREATE) addLogEntry("inotify event flag: IN_CREATE", ["debug"]); if (event.mask & IN_DELETE) addLogEntry("inotify event flag: IN_DELETE", ["debug"]); if (event.mask & IN_DELETE_SELF) addLogEntry("inotify event flag: IN_DELETE_SELF", ["debug"]); if (event.mask & IN_MOVE_SELF) addLogEntry("inotify event flag: IN_MOVE_SELF", ["debug"]); if (event.mask & IN_UNMOUNT) addLogEntry("inotify event flag: IN_UNMOUNT", ["debug"]); if (event.mask & IN_Q_OVERFLOW) addLogEntry("inotify event flag: IN_Q_OVERFLOW", ["debug"]); if (event.mask & IN_IGNORED) addLogEntry("inotify event flag: IN_IGNORED", ["debug"]); if (event.mask & IN_CLOSE) addLogEntry("inotify event flag: IN_CLOSE", ["debug"]); if (event.mask & IN_MOVE) addLogEntry("inotify event flag: IN_MOVE", ["debug"]); if (event.mask & IN_ONLYDIR) addLogEntry("inotify event flag: IN_ONLYDIR", ["debug"]); if (event.mask & IN_DONT_FOLLOW) addLogEntry("inotify event flag: IN_DONT_FOLLOW", ["debug"]); if (event.mask & IN_EXCL_UNLINK) addLogEntry("inotify event flag: IN_EXCL_UNLINK", ["debug"]); if (event.mask & IN_MASK_ADD) addLogEntry("inotify event flag: IN_MASK_ADD", ["debug"]); if (event.mask & IN_ISDIR) addLogEntry("inotify event flag: IN_ISDIR", ["debug"]); if (event.mask & IN_ONESHOT) addLogEntry("inotify event flag: IN_ONESHOT", ["debug"]); if (event.mask & IN_ALL_EVENTS) addLogEntry("inotify event flag: IN_ALL_EVENTS", ["debug"]); } // skip events that need to be ignored if (event.mask & IN_IGNORED) { // forget the directory associated to the watch descriptor wdToDirName.remove(event.wd); goto skip; } else if (event.mask & IN_Q_OVERFLOW) { throw new MonitorException("inotify queue overflow: some events may be lost"); } // if the event is not to be ignored, obtain path path = getPath(event); // configure the skip_dir & skip skip_file comparison item evalPath = path.strip('.'); // Skip events that should be excluded based on application configuration // We cant use isDir or isFile as this information is missing from the inotify event itself // Thus this causes a segfault when attempting to query this - https://github.com/abraunegg/onedrive/issues/995 // Based on the 'type' of event & object type (directory or file) check that path against the 'right' user exclusions // Directory events should only be compared against skip_dir and file events should only be compared against skip_file if (event.mask & IN_ISDIR) { // The event in question contains IN_ISDIR event mask, thus highly likely this is an event on a directory // This due to if the user has specified in skip_dir an exclusive path: '/path' - that is what must be matched if (selectiveSync.isDirNameExcluded(evalPath)) { // The path to evaluate matches a path that the user has configured to skip goto skip; } } else { // The event in question missing the IN_ISDIR event mask, thus highly likely this is an event on a file // This due to if the user has specified in skip_file an exclusive path: '/path/file' - that is what must be matched if (selectiveSync.isFileNameExcluded(evalPath)) { // The path to evaluate matches a file that the user has configured to skip goto skip; } } // is the path, excluded via sync_list if (selectiveSync.isPathExcludedViaSyncList(path)) { // The path to evaluate matches a directory or file that the user has configured not to include in the sync goto skip; } // handle the inotify events if (event.mask & IN_MOVED_FROM) { if (debugLogging) {addLogEntry("event IN_MOVED_FROM: " ~ path, ["debug"]);} cookieToPath[event.cookie] = path; movedNotDeleted[path] = true; // Mark as moved, not deleted } else if (event.mask & IN_MOVED_TO) { if (debugLogging) {addLogEntry("event IN_MOVED_TO: " ~ path, ["debug"]);} if (event.mask & IN_ISDIR) addRecursive(path); auto from = event.cookie in cookieToPath; if (from) { cookieToPath.remove(event.cookie); if (useCallbacks) actionHolder.append(ActionType.moved, *from, path); movedNotDeleted.remove(*from); // Clear moved status } else { // Handle file moved in from outside if (event.mask & IN_ISDIR) { if (useCallbacks) actionHolder.append(ActionType.createDir, path); } else { if (useCallbacks) actionHolder.append(ActionType.changed, path); } } } else if (event.mask & IN_CREATE) { if (debugLogging) {addLogEntry("event IN_CREATE: " ~ path, ["debug"]);} if (event.mask & IN_ISDIR) { // fix from #2586 auto cookieToPath1 = cookieToPath.dup(); foreach (cookie, path1; cookieToPath1) { if (path1 == path) { cookieToPath.remove(cookie); } } addRecursive(path); if (useCallbacks) actionHolder.append(ActionType.createDir, path); } } else if (event.mask & IN_DELETE) { if (path in movedNotDeleted) { movedNotDeleted.remove(path); // Ignore delete for moved files } else { if (debugLogging) {addLogEntry("event IN_DELETE: " ~ path, ["debug"]);} if (useCallbacks) actionHolder.append(ActionType.deleted, path); } } else if ((event.mask & IN_CLOSE_WRITE) && !(event.mask & IN_ISDIR)) { if (debugLogging) {addLogEntry("event IN_CLOSE_WRITE and not IN_ISDIR: " ~ path, ["debug"]);} // fix from #2586 auto cookieToPath1 = cookieToPath.dup(); foreach (cookie, path1; cookieToPath1) { if (path1 == path) { cookieToPath.remove(cookie); } } if (useCallbacks) actionHolder.append(ActionType.changed, path); } else { addLogEntry("inotify event unhandled: " ~ path); assert(0); } skip: i += inotify_event.sizeof + event.len; } // Sleep for one second to prevent missing fast-changing events. if (poll(&fds, 1, 0) == 0) { sleep_counter += 1; Thread.sleep(dur!"seconds"(1)); } } if (!hasNotification) break; processChanges(); // Assume that the items moved outside the watched directory have been deleted foreach (cookie, path; cookieToPath) { if (debugLogging) {addLogEntry("Deleting cookie|watch (post loop): " ~ path, ["debug"]);} if (useCallbacks) onDelete(path); remove(path); cookieToPath.remove(cookie); } // Debug Log that all inotify events are flushed if (debugLogging) {addLogEntry("inotify events flushed", ["debug"]);} } } private void processChanges() { string[] changes; foreach(action; actionHolder.actions) { if (action.skipped) continue; switch (action.type) { case ActionType.changed: changes ~= action.src; break; case ActionType.deleted: onDelete(action.src); break; case ActionType.createDir: onDirCreated(action.src); break; case ActionType.moved: onMove(action.src, action.dst); break; default: break; } } if (!changes.empty) { onFileChanged(changes); } object.destroy(actionHolder); } } onedrive-2.5.10/src/notifications/000077500000000000000000000000001513710110600170455ustar00rootroot00000000000000onedrive-2.5.10/src/notifications/README000066400000000000000000000006441513710110600177310ustar00rootroot00000000000000The files in this directory have been obtained form the following places: dnotify.d https://github.com/Dav1dde/dnotify/blob/master/dnotify.d License: Creative Commons Zro 1.0 Universal see https://github.com/Dav1dde/dnotify/blob/master/LICENSE notify.d https://github.com/D-Programming-Deimos/libnotify/blob/master/deimos/notify/notify.d License: GNU Lesser General Public License (LGPL) 2.1 or upwards, see file onedrive-2.5.10/src/notifications/dnotify.d000066400000000000000000000213331513710110600206700ustar00rootroot00000000000000module dnotify; import std.path; import std.file; private { import std.string : toStringz; import std.conv : to; import std.traits : isPointer, isArray; import std.variant : Variant; import std.array : appender; import deimos.notify.notify; } public import deimos.notify.notify : NOTIFY_EXPIRES_DEFAULT, NOTIFY_EXPIRES_NEVER, NotifyUrgency; version(NoPragma) { } else { pragma(lib, "notify"); pragma(lib, "gmodule"); pragma(lib, "glib-2.0"); } extern (C) { private void g_free(void* mem); private void g_list_free(GList* glist); } version(NoGdk) { } else { version(NoPragma) { } else { pragma(lib, "gdk_pixbuf"); } private: extern (C) { GdkPixbuf* gdk_pixbuf_new_from_file(const(char)* filename, GError **error); } } class NotificationError : Exception { string message; GError* gerror; this(GError* gerror) { this.message = to!(string)(gerror.message); this.gerror = gerror; super(this.message); } this(string message) { this.message = message; super(message); } } bool check_availability() { // notify_init might return without dbus server actually started // try to check for running dbus server char **ret_name; char **ret_vendor; char **ret_version; char **ret_spec_version; bool ret; try { return notify_get_server_info(ret_name, ret_vendor, ret_version, ret_spec_version); } catch (NotificationError e) { throw new NotificationError("Cannot find dbus server!"); } } void init(in char[] name) { notify_init(name.toStringz()); } alias notify_is_initted is_initted; alias notify_uninit uninit; shared static this() { init(baseName(thisExePath())); } shared static ~this() { uninit(); } string get_app_name() { return to!(string)(notify_get_app_name()); } void set_app_name(in char[] app_name) { notify_set_app_name(app_name.toStringz()); } string[] get_server_caps() { auto result = appender!(string[])(); GList* list = notify_get_server_caps(); if(list !is null) { for(GList* c = list; c !is null; c = c.next) { result.put(to!(string)(cast(char*)c.data)); g_free(c.data); } g_list_free(list); } return result.data; } struct ServerInfo { string name; string vendor; string version_; string spec_version; } ServerInfo get_server_info() { char* name; char* vendor; char* version_; char* spec_version; notify_get_server_info(&name, &vendor, &version_, &spec_version); scope(exit) { g_free(name); g_free(vendor); g_free(version_); g_free(spec_version); } return ServerInfo(to!string(name), to!string(vendor), to!string(version_), to!string(spec_version)); } struct Action { const(char[]) id; const(char[]) label; NotifyActionCallback callback; void* user_ptr; } class Notification { NotifyNotification* notify_notification; const(char)[] summary; const(char)[] body_; const(char)[] icon; bool closed = true; private int _timeout = NOTIFY_EXPIRES_DEFAULT; const(char)[] _category; NotifyUrgency _urgency; GdkPixbuf* _image; Variant[const(char)[]] _hints; const(char)[] _app_name; Action[] _actions; this(in char[] summary, in char[] body_, in char[] icon="") in { assert(is_initted(), "call dnotify.init() before using Notification"); } do { this.summary = summary; this.body_ = body_; this.icon = icon; notify_notification = notify_notification_new(summary.toStringz(), body_.toStringz(), icon.toStringz()); } bool update(in char[] summary, in char[] body_, in char[] icon="") { this.summary = summary; this.body_ = body_; this.icon = icon; return notify_notification_update(notify_notification, summary.toStringz(), body_.toStringz(), icon.toStringz()); } void show() { GError* ge; if(!notify_notification_show(notify_notification, &ge)) { throw new NotificationError(ge); } } @property int timeout() { return _timeout; } @property void timeout(int timeout) { this._timeout = timeout; notify_notification_set_timeout(notify_notification, timeout); } @property const(char[]) category() { return _category; } @property void category(in char[] category) { this._category = category; notify_notification_set_category(notify_notification, category.toStringz()); } @property NotifyUrgency urgency() { return _urgency; } @property void urgency(NotifyUrgency urgency) { this._urgency = urgency; notify_notification_set_urgency(notify_notification, urgency); } void set_image(GdkPixbuf* pixbuf) { notify_notification_set_image_from_pixbuf(notify_notification, pixbuf); //_image = pixbuf; } version(NoGdk) { } else { void set_image(in char[] filename) { GError* ge; // TODO: free pixbuf GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file(filename.toStringz(), &ge); if(pixbuf is null) { if(ge is null) { throw new NotificationError("Unable to load file: " ~ filename.idup); } else { throw new NotificationError(ge); } } assert(notify_notification !is null); notify_notification_set_image_from_pixbuf(notify_notification, pixbuf); // TODO: fix segfault //_image = pixbuf; } } @property GdkPixbuf* image() { return _image; } // using deprecated set_hint_* functions (GVariant is an opaque structure, which needs the glib) void set_hint(T)(in char[] key, T value) { static if(is(T == int)) { notify_notification_set_hint_int32(notify_notification, key, value); } else static if(is(T == uint)) { notify_notification_set_hint_uint32(notify_notification, key, value); } else static if(is(T == double)) { notify_notification_set_hint_double(notify_notification, key, value); } else static if(is(T : const(char)[])) { notify_notification_set_hint_string(notify_notification, key, value.toStringz()); } else static if(is(T == ubyte)) { notify_notification_set_hint_byte(notify_notification, key, value); } else static if(is(T == ubyte[])) { notify_notification_set_hint_byte_array(notify_notification, key, value.ptr, value.length); } else { static assert(false, "unsupported value for Notification.set_hint"); } _hints[key] = Variant(value); } // unset hint? Variant get_hint(in char[] key) { return _hints[key]; } @property const(char)[] app_name() { return _app_name; } @property void app_name(in char[] name) { this._app_name = app_name; notify_notification_set_app_name(notify_notification, app_name.toStringz()); } void add_action(T)(in char[] action, in char[] label, NotifyActionCallback callback, T user_data) { static if(isPointer!T) { void* user_ptr = cast(void*)user_data; } else static if(isArray!T) { void* user_ptr = cast(void*)user_data.ptr; } else { void* user_ptr = cast(void*)&user_data; } notify_notification_add_action(notify_notification, action.toStringz(), label.toStringz(), callback, user_ptr, null); _actions ~= Action(action, label, callback, user_ptr); } void add_action()(Action action) { notify_notification_add_action(notify_notification, action.id.toStringz(), action.label.toStringz(), action.callback, action.user_ptr, null); _actions ~= action; } @property Action[] actions() { return _actions; } void clear_actions() { notify_notification_clear_actions(notify_notification); } void close() { GError* ge; if(!notify_notification_close(notify_notification, &ge)) { throw new NotificationError(ge); } } @property int closed_reason() { return notify_notification_get_closed_reason(notify_notification); } } version(TestMain) { import std.stdio; void main() { writeln(get_app_name()); set_app_name("blargh"); writeln(get_app_name()); writeln(get_server_caps()); writeln(get_server_info()); auto n = new Notification("foo", "bar", "notification-message-im"); n.timeout = 3; n.show(); } } onedrive-2.5.10/src/notifications/notify.d000066400000000000000000000151001513710110600205170ustar00rootroot00000000000000/** * Copyright (C) 2004-2006 Christian Hammond * Copyright (C) 2010 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ module deimos.notify.notify; enum NOTIFY_VERSION_MAJOR = 0; enum NOTIFY_VERSION_MINOR = 7; enum NOTIFY_VERSION_MICRO = 5; template NOTIFY_CHECK_VERSION(int major, int minor, int micro) { enum NOTIFY_CHECK_VERSION = ((NOTIFY_VERSION_MAJOR > major) || (NOTIFY_VERSION_MAJOR == major && NOTIFY_VERSION_MINOR > minor) || (NOTIFY_VERSION_MAJOR == major && NOTIFY_VERSION_MINOR == minor && NOTIFY_VERSION_MICRO >= micro)); } alias ulong GType; alias void function(void*) GFreeFunc; struct GError { uint domain; int code; char* message; } struct GList { void* data; GList* next; GList* prev; } // dummies struct GdkPixbuf {} struct GObject {} struct GObjectClass {} struct GVariant {} GType notify_urgency_get_type(); /** * NOTIFY_EXPIRES_DEFAULT: * * The default expiration time on a notification. */ enum NOTIFY_EXPIRES_DEFAULT = -1; /** * NOTIFY_EXPIRES_NEVER: * * The notification never expires. It stays open until closed by the calling API * or the user. */ enum NOTIFY_EXPIRES_NEVER = 0; // #define NOTIFY_TYPE_NOTIFICATION (notify_notification_get_type ()) // #define NOTIFY_NOTIFICATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NOTIFY_TYPE_NOTIFICATION, NotifyNotification)) // #define NOTIFY_NOTIFICATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NOTIFY_TYPE_NOTIFICATION, NotifyNotificationClass)) // #define NOTIFY_IS_NOTIFICATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NOTIFY_TYPE_NOTIFICATION)) // #define NOTIFY_IS_NOTIFICATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NOTIFY_TYPE_NOTIFICATION)) // #define NOTIFY_NOTIFICATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NOTIFY_TYPE_NOTIFICATION, NotifyNotificationClass)) extern (C) { struct NotifyNotificationPrivate; struct NotifyNotification { /*< private >*/ GObject parent_object; NotifyNotificationPrivate *priv; } struct NotifyNotificationClass { GObjectClass parent_class; /* Signals */ void function(NotifyNotification *notification) closed; } /** * NotifyUrgency: * @NOTIFY_URGENCY_LOW: Low urgency. Used for unimportant notifications. * @NOTIFY_URGENCY_NORMAL: Normal urgency. Used for most standard notifications. * @NOTIFY_URGENCY_CRITICAL: Critical urgency. Used for very important notifications. * * The urgency level of the notification. */ enum NotifyUrgency { NOTIFY_URGENCY_LOW, NOTIFY_URGENCY_NORMAL, NOTIFY_URGENCY_CRITICAL, } /** * NotifyActionCallback: * @notification: * @action: * @user_data: * * An action callback function. */ alias void function(NotifyNotification* notification, char* action, void* user_data) NotifyActionCallback; GType notify_notification_get_type(); NotifyNotification* notify_notification_new(const(char)* summary, const(char)* body_, const(char)* icon); bool notify_notification_update(NotifyNotification* notification, const(char)* summary, const(char)* body_, const(char)* icon); bool notify_notification_show(NotifyNotification* notification, GError** error); void notify_notification_set_timeout(NotifyNotification* notification, int timeout); void notify_notification_set_category(NotifyNotification* notification, const(char)* category); void notify_notification_set_urgency(NotifyNotification* notification, NotifyUrgency urgency); void notify_notification_set_image_from_pixbuf(NotifyNotification* notification, GdkPixbuf* pixbuf); void notify_notification_set_icon_from_pixbuf(NotifyNotification* notification, GdkPixbuf* icon); void notify_notification_set_hint_int32(NotifyNotification* notification, const(char)* key, int value); void notify_notification_set_hint_uint32(NotifyNotification* notification, const(char)* key, uint value); void notify_notification_set_hint_double(NotifyNotification* notification, const(char)* key, double value); void notify_notification_set_hint_string(NotifyNotification* notification, const(char)* key, const(char)* value); void notify_notification_set_hint_byte(NotifyNotification* notification, const(char)* key, ubyte value); void notify_notification_set_hint_byte_array(NotifyNotification* notification, const(char)* key, const(ubyte)* value, ulong len); void notify_notification_set_hint(NotifyNotification* notification, const(char)* key, GVariant* value); void notify_notification_set_app_name(NotifyNotification* notification, const(char)* app_name); void notify_notification_clear_hints(NotifyNotification* notification); void notify_notification_add_action(NotifyNotification* notification, const(char)* action, const(char)* label, NotifyActionCallback callback, void* user_data, GFreeFunc free_func); void notify_notification_clear_actions(NotifyNotification* notification); bool notify_notification_close(NotifyNotification* notification, GError** error); int notify_notification_get_closed_reason(const NotifyNotification* notification); bool notify_init(const(char)* app_name); void notify_uninit(); bool notify_is_initted(); const(char)* notify_get_app_name(); void notify_set_app_name(const(char)* app_name); GList *notify_get_server_caps(); bool notify_get_server_info(char** ret_name, char** ret_vendor, char** ret_version, char** ret_spec_version); } version(MainTest) { import std.string; void main() { notify_init("test".toStringz()); auto n = notify_notification_new("summary".toStringz(), "body".toStringz(), "none".toStringz()); GError* ge; notify_notification_show(n, &ge); scope(success) notify_uninit(); } } onedrive-2.5.10/src/onedrive.d000066400000000000000000003120571513710110600161640ustar00rootroot00000000000000// What is this module called? module onedrive; // What does this module require to function? import core.stdc.stdlib: EXIT_SUCCESS, EXIT_FAILURE, exit; import core.memory; import core.thread; import std.stdio; import std.string; import std.utf; import std.file; import std.exception; import std.regex; import std.json; import std.algorithm; import std.net.curl; import std.datetime; import std.path; import std.conv; import std.math; import std.uri; import std.array; // Required for webhooks import std.uuid; // What other modules that we have created do we need to import? import config; import log; import util; import curlEngine; import intune; // Define the 'OneDriveException' class class OneDriveException : Exception { // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/errors int httpStatusCode; const CurlResponse response; private JSONValue _error; // Public property to access the JSON error @property JSONValue error() const { return _error; } this(int httpStatusCode, string reason, const CurlResponse response, string file = __FILE__, size_t line = __LINE__) { this.httpStatusCode = httpStatusCode; this.response = response; this._error = response.json(); string msg = format("HTTP request returned status code %d (%s)\n%s", httpStatusCode, reason, toJSON(_error, true)); super(msg, file, line); } this(int httpStatusCode, string reason, string file = __FILE__, size_t line = __LINE__) { this.httpStatusCode = httpStatusCode; this.response = null; super(msg, file, line); } } // Define the 'OneDriveError' class class OneDriveError: Error { this(string msg) { super(msg); } } // Define the 'OneDriveApi' class class OneDriveApi { // Class variables that use other classes ApplicationConfig appConfig; CurlEngine curlEngine; CurlResponse response; // API Endpoint Constants immutable string defaultDriveUrlAPIEndpoint = "/v1.0/me/drive"; immutable string defaultDriveByIdUrlAPIEndpoint = "/v1.0/drives/"; immutable string defaultSharedWithMeUrlAPIEndpoint = "/v1.0/me/drive/sharedWithMe"; immutable string defaultItemByIdUrlAPIEndpoint = "/v1.0/me/drive/items/"; immutable string defaultItemByPathUrlAPIEndpoint = "/v1.0/me/drive/root:/"; immutable string defaultSiteSearchUrlAPIEndpoint = "/v1.0/sites?search"; immutable string defaultSiteDriveUrlAPIEndpoint = "/v1.0/sites/"; immutable string defaultSubscriptionUrlAPIEndpoint = "/v1.0/subscriptions"; immutable string defaultWebsocketEndpointAPIEndpoint = "/v1.0/me/drive/root/subscriptions/socketIo"; // Class variables string clientId = ""; string companyName = ""; string authUrl = ""; string deviceAuthUrl = ""; string redirectUrl = ""; string tokenUrl = ""; string driveUrl = ""; string driveByIdUrl = ""; string sharedWithMeUrl = ""; string itemByIdUrl = ""; string itemByPathUrl = ""; string siteSearchUrl = ""; string siteDriveUrl = ""; string subscriptionUrl = ""; string tenantId = ""; string authScope = ""; string websocketEndpoint = ""; string websocketEndpointAPIEndpoint = defaultWebsocketEndpointAPIEndpoint; const(char)[] refreshToken = ""; bool dryRun = false; bool keepAlive = false; this(ApplicationConfig appConfig) { // Configure the class variable to consume the application configuration this.appConfig = appConfig; this.curlEngine = null; this.response = null; // Configure the major API Query URL's, based on using application configuration // These however can be updated by config option 'azure_ad_endpoint', thus handled differently // Drive Queries driveUrl = appConfig.globalGraphEndpoint ~ defaultDriveUrlAPIEndpoint; driveByIdUrl = appConfig.globalGraphEndpoint ~ defaultDriveByIdUrlAPIEndpoint; // What is 'shared with me' Query sharedWithMeUrl = appConfig.globalGraphEndpoint ~ defaultSharedWithMeUrlAPIEndpoint; // Item Queries itemByIdUrl = appConfig.globalGraphEndpoint ~ defaultItemByIdUrlAPIEndpoint; itemByPathUrl = appConfig.globalGraphEndpoint ~ defaultItemByPathUrlAPIEndpoint; // Office 365 / SharePoint Queries siteSearchUrl = appConfig.globalGraphEndpoint ~ defaultSiteSearchUrlAPIEndpoint; siteDriveUrl = appConfig.globalGraphEndpoint ~ defaultSiteDriveUrlAPIEndpoint; // Subscriptions subscriptionUrl = appConfig.globalGraphEndpoint ~ defaultSubscriptionUrlAPIEndpoint; // WebSocket Endpoint - sets the default: /v1.0/me/drive/root/subscriptions/socketIo websocketEndpoint = appConfig.globalGraphEndpoint ~ websocketEndpointAPIEndpoint; } // The destructor should only clean up resources owned directly by this instance ~this() { if (response !is null) { object.destroy(response); // calls class CurlResponse destructor response = null; } if (curlEngine !is null) { object.destroy(curlEngine); // calls class CurlEngine destructor curlEngine = null; } if (appConfig !is null) { appConfig = null; } } // Initialise the OneDrive API class bool initialise(bool keepAlive=true) { // Initialise the curl engine this.keepAlive = keepAlive; if (curlEngine is null) { curlEngine = getCurlInstance(); curlEngine.initialise(appConfig.getValueLong("dns_timeout"), appConfig.getValueLong("connect_timeout"), appConfig.getValueLong("data_timeout"), appConfig.getValueLong("operation_timeout"), appConfig.defaultMaxRedirects, appConfig.getValueBool("debug_https"), appConfig.getValueString("user_agent"), appConfig.getValueBool("force_http_11"), appConfig.getValueLong("rate_limit"), appConfig.getValueLong("ip_protocol_version"), appConfig.getValueLong("max_curl_idle"), keepAlive); // WebSocket capability available in OS cURL version if (!appConfig.websocketSupportCheckDone) { // Check the underlying cURL capability to support websockets if (debugLogging) {addLogEntry("Checking cURL Websocket support ...", ["debug"]);} bool websocketSupport = curlSupportsWebSockets(); if (debugLogging) {addLogEntry("Checked cURL Websocket support = " ~ to!string(websocketSupport), ["debug"]);} // Update appConfig flags appConfig.curlSupportsWebSockets = websocketSupport; appConfig.websocketSupportCheckDone = true; // Notify user if cURL version is too old to support websockets, but only if we are in --monitor mode, as this is where this is used // Are we doing a --monitor operation? if (appConfig.getValueBool("monitor")) { if (!websocketSupport) { // cURL/libcurl version is too old addLogEntry(); addLogEntry("WARNING: Your libcurl version is too old for WebSocket support. Please upgrade to libcurl 7.86.0 or newer."); addLogEntry(" The near real-time processing of online changes cannot be enabled on your system."); addLogEntry(); } } } } // Authorised value to return bool authorised = false; // Did the user specify --dry-run dryRun = appConfig.getValueBool("dry_run"); // Set clientId to use the configured 'application_id' clientId = appConfig.getValueString("application_id"); if (clientId != appConfig.defaultApplicationId) { // a custom 'application_id' was set companyName = "custom_application"; } // Do we have a custom Azure Tenant ID? if (!appConfig.getValueString("azure_tenant_id").empty) { // Use the value entered by the user tenantId = appConfig.getValueString("azure_tenant_id"); } else { // set to common tenantId = "common"; } // Did the user specify a 'drive_id' ? if (!appConfig.getValueString("drive_id").empty) { // Update base URL's driveUrl = driveByIdUrl ~ appConfig.getValueString("drive_id"); itemByIdUrl = driveUrl ~ "/items"; itemByPathUrl = driveUrl ~ "/root:/"; // Need to update 'websocketEndpointAPIEndpoint' to /v1.0/drives/{driveId}/root/subscriptions/socketIo websocketEndpointAPIEndpoint = "/v1.0/drives/" ~ appConfig.getValueString("drive_id") ~ "/root/subscriptions/socketIo"; } // Configure the authentication scope if (appConfig.getValueBool("read_only_auth_scope")) { // read-only authentication scopes has been requested if (appConfig.getValueBool("use_device_auth")) { authScope = "&scope=Files.Read%20Files.Read.All%20Sites.Read.All%20offline_access"; } else { authScope = "&scope=Files.Read%20Files.Read.All%20Sites.Read.All%20offline_access&response_type=code&prompt=login&redirect_uri="; } } else { // read-write authentication scopes will be used (default) if (appConfig.getValueBool("use_device_auth")) { authScope = "&scope=Files.ReadWrite%20Files.ReadWrite.All%20Sites.ReadWrite.All%20offline_access"; } else { authScope = "&scope=Files.ReadWrite%20Files.ReadWrite.All%20Sites.ReadWrite.All%20offline_access&response_type=code&prompt=login&redirect_uri="; } } // Configure Azure AD endpoints if 'azure_ad_endpoint' is configured string azureConfigValue = appConfig.getValueString("azure_ad_endpoint"); switch(azureConfigValue) { case "": if (tenantId == "common") { if (!appConfig.apiWasInitialised) addLogEntry("Configuring Global Azure AD Endpoints"); } else { if (!appConfig.apiWasInitialised) addLogEntry("Configuring Global Azure AD Endpoints - Single Tenant Application"); } // Authentication authUrl = appConfig.globalAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize"; deviceAuthUrl = appConfig.globalAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/devicecode"; redirectUrl = appConfig.globalAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; tokenUrl = appConfig.globalAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token"; // WebSocket Endpoint websocketEndpoint = appConfig.globalGraphEndpoint ~ websocketEndpointAPIEndpoint; break; case "USL4": if (!appConfig.apiWasInitialised) addLogEntry("Configuring Azure AD for US Government Endpoints"); // Authentication authUrl = appConfig.usl4AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize"; deviceAuthUrl = appConfig.usl4AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/devicecode"; tokenUrl = appConfig.usl4AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token"; if (clientId == appConfig.defaultApplicationId) { // application_id == default if (debugLogging) {addLogEntry("USL4 AD Endpoint but default application_id, redirectUrl needs to be aligned to globalAuthEndpoint", ["debug"]);} redirectUrl = appConfig.globalAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; } else { // custom application_id redirectUrl = appConfig.usl4AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; } // Drive Queries driveUrl = appConfig.usl4GraphEndpoint ~ defaultDriveUrlAPIEndpoint; driveByIdUrl = appConfig.usl4GraphEndpoint ~ defaultDriveByIdUrlAPIEndpoint; // Item Queries itemByIdUrl = appConfig.usl4GraphEndpoint ~ defaultItemByIdUrlAPIEndpoint; itemByPathUrl = appConfig.usl4GraphEndpoint ~ defaultItemByPathUrlAPIEndpoint; // Office 365 / SharePoint Queries siteSearchUrl = appConfig.usl4GraphEndpoint ~ defaultSiteSearchUrlAPIEndpoint; siteDriveUrl = appConfig.usl4GraphEndpoint ~ defaultSiteDriveUrlAPIEndpoint; // Shared With Me sharedWithMeUrl = appConfig.usl4GraphEndpoint ~ defaultSharedWithMeUrlAPIEndpoint; // Subscriptions subscriptionUrl = appConfig.usl4GraphEndpoint ~ defaultSubscriptionUrlAPIEndpoint; // WebSocket Endpoint websocketEndpoint = appConfig.usl4GraphEndpoint ~ websocketEndpointAPIEndpoint; break; case "USL5": if (!appConfig.apiWasInitialised) addLogEntry("Configuring Azure AD for US Government Endpoints (DOD)"); // Authentication authUrl = appConfig.usl5AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize"; deviceAuthUrl = appConfig.usl5AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/devicecode"; tokenUrl = appConfig.usl5AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token"; if (clientId == appConfig.defaultApplicationId) { // application_id == default if (debugLogging) {addLogEntry("USL5 AD Endpoint but default application_id, redirectUrl needs to be aligned to globalAuthEndpoint", ["debug"]);} redirectUrl = appConfig.globalAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; } else { // custom application_id redirectUrl = appConfig.usl5AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; } // Drive Queries driveUrl = appConfig.usl5GraphEndpoint ~ defaultDriveUrlAPIEndpoint; driveByIdUrl = appConfig.usl5GraphEndpoint ~ defaultDriveByIdUrlAPIEndpoint; // Item Queries itemByIdUrl = appConfig.usl5GraphEndpoint ~ defaultItemByIdUrlAPIEndpoint; itemByPathUrl = appConfig.usl5GraphEndpoint ~ defaultItemByPathUrlAPIEndpoint; // Office 365 / SharePoint Queries siteSearchUrl = appConfig.usl5GraphEndpoint ~ defaultSiteSearchUrlAPIEndpoint; siteDriveUrl = appConfig.usl5GraphEndpoint ~ defaultSiteDriveUrlAPIEndpoint; // Shared With Me sharedWithMeUrl = appConfig.usl5GraphEndpoint ~ defaultSharedWithMeUrlAPIEndpoint; // Subscriptions subscriptionUrl = appConfig.usl5GraphEndpoint ~ defaultSubscriptionUrlAPIEndpoint; // WebSocket Endpoint websocketEndpoint = appConfig.usl5GraphEndpoint ~ websocketEndpointAPIEndpoint; break; case "DE": if (!appConfig.apiWasInitialised) addLogEntry("Configuring Azure AD Germany"); // Authentication authUrl = appConfig.deAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize"; deviceAuthUrl = appConfig.deAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/devicecode"; tokenUrl = appConfig.deAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token"; if (clientId == appConfig.defaultApplicationId) { // application_id == default if (debugLogging) {addLogEntry("DE AD Endpoint but default application_id, redirectUrl needs to be aligned to globalAuthEndpoint", ["debug"]);} redirectUrl = appConfig.globalAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; } else { // custom application_id redirectUrl = appConfig.deAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; } // Drive Queries driveUrl = appConfig.deGraphEndpoint ~ defaultDriveUrlAPIEndpoint; driveByIdUrl = appConfig.deGraphEndpoint ~ defaultDriveByIdUrlAPIEndpoint; // Item Queries itemByIdUrl = appConfig.deGraphEndpoint ~ defaultItemByIdUrlAPIEndpoint; itemByPathUrl = appConfig.deGraphEndpoint ~ defaultItemByPathUrlAPIEndpoint; // Office 365 / SharePoint Queries siteSearchUrl = appConfig.deGraphEndpoint ~ defaultSiteSearchUrlAPIEndpoint; siteDriveUrl = appConfig.deGraphEndpoint ~ defaultSiteDriveUrlAPIEndpoint; // Shared With Me sharedWithMeUrl = appConfig.deGraphEndpoint ~ defaultSharedWithMeUrlAPIEndpoint; // Subscriptions subscriptionUrl = appConfig.deGraphEndpoint ~ defaultSubscriptionUrlAPIEndpoint; // WebSocket Endpoint websocketEndpoint = appConfig.deGraphEndpoint ~ websocketEndpointAPIEndpoint; break; case "CN": if (!appConfig.apiWasInitialised) addLogEntry("Configuring AD China operated by VNET"); // Authentication authUrl = appConfig.cnAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize"; deviceAuthUrl = appConfig.cnAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/devicecode"; tokenUrl = appConfig.cnAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token"; if (clientId == appConfig.defaultApplicationId) { // application_id == default if (debugLogging) {addLogEntry("CN AD Endpoint but default application_id, redirectUrl needs to be aligned to globalAuthEndpoint", ["debug"]);} redirectUrl = appConfig.globalAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; } else { // custom application_id redirectUrl = appConfig.cnAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient"; } // Drive Queries driveUrl = appConfig.cnGraphEndpoint ~ defaultDriveUrlAPIEndpoint; driveByIdUrl = appConfig.cnGraphEndpoint ~ defaultDriveByIdUrlAPIEndpoint; // Item Queries itemByIdUrl = appConfig.cnGraphEndpoint ~ defaultItemByIdUrlAPIEndpoint; itemByPathUrl = appConfig.cnGraphEndpoint ~ defaultItemByPathUrlAPIEndpoint; // Office 365 / SharePoint Queries siteSearchUrl = appConfig.cnGraphEndpoint ~ defaultSiteSearchUrlAPIEndpoint; siteDriveUrl = appConfig.cnGraphEndpoint ~ defaultSiteDriveUrlAPIEndpoint; // Shared With Me sharedWithMeUrl = appConfig.cnGraphEndpoint ~ defaultSharedWithMeUrlAPIEndpoint; // Subscriptions subscriptionUrl = appConfig.cnGraphEndpoint ~ defaultSubscriptionUrlAPIEndpoint; // WebSocket Endpoint websocketEndpoint = appConfig.cnGraphEndpoint ~ websocketEndpointAPIEndpoint; break; // Default - all other entries default: if (!appConfig.apiWasInitialised) addLogEntry("Unknown Azure AD Endpoint request - using Global Azure AD Endpoints"); } // Has the application been authenticated? // How do we authenticate - standard method or via Intune? if (appConfig.getValueBool("use_intune_sso")) { // Authenticate via Intune if (appConfig.accessToken.empty) { // No authentication via intune yet authorised = authorise(); } else { // We are already authenticated authorised = true; } } else { // Authenticate via standard method if (!exists(appConfig.refreshTokenFilePath)) { if (debugLogging) {addLogEntry("Application has no 'refresh_token' thus needs to be authenticated", ["debug"]);} authorised = authorise(); } else { // Try and read the value from the appConfig if it is set, rather than trying to read the value from disk if (!appConfig.refreshToken.empty) { if (debugLogging) {addLogEntry("Read token from appConfig", ["debug"]);} refreshToken = strip(appConfig.refreshToken); authorised = true; } else { // Try and read the file from disk try { refreshToken = strip(readText(appConfig.refreshTokenFilePath)); // is the refresh_token empty? if (refreshToken.empty) { addLogEntry("RefreshToken exists but is empty: " ~ appConfig.refreshTokenFilePath); authorised = authorise(); } else { // Existing token not empty authorised = true; // update appConfig.refreshToken appConfig.refreshToken = refreshToken; } } catch (FileException exception) { authorised = authorise(); } catch (std.utf.UTFException exception) { // path contains characters which generate a UTF exception addLogEntry("Cannot read refreshToken from: " ~ appConfig.refreshTokenFilePath); addLogEntry(" Error Reason:" ~ exception.msg); authorised = false; } } if (refreshToken.empty) { // PROBLEM ... CODING TO DO ?????????? if (debugLogging) {addLogEntry("DEBUG: refreshToken is empty !!!!!!!!!!", ["debug"]);} } } } // Return if we are authorised if (debugLogging) {addLogEntry("Authorised State: " ~ to!string(authorised), ["debug"]);} return authorised; } // If the API has been configured correctly, print the items that been configured void debugOutputConfiguredAPIItems() { // Debug output of configured URL's // Application Identification if (debugLogging) { addLogEntry("Configured clientId " ~ clientId, ["debug"]); addLogEntry("Configured userAgent " ~ appConfig.getValueString("user_agent"), ["debug"]); // Authentication addLogEntry("Configured authScope: " ~ authScope, ["debug"]); addLogEntry("Configured authUrl: " ~ authUrl, ["debug"]); addLogEntry("Configured redirectUrl: " ~ redirectUrl, ["debug"]); addLogEntry("Configured tokenUrl: " ~ tokenUrl, ["debug"]); // Drive Queries addLogEntry("Configured driveUrl: " ~ driveUrl, ["debug"]); addLogEntry("Configured driveByIdUrl: " ~ driveByIdUrl, ["debug"]); // Shared With Me addLogEntry("Configured sharedWithMeUrl: " ~ sharedWithMeUrl, ["debug"]); // Item Queries addLogEntry("Configured itemByIdUrl: " ~ itemByIdUrl, ["debug"]); addLogEntry("Configured itemByPathUrl: " ~ itemByPathUrl, ["debug"]); // SharePoint Queries addLogEntry("Configured siteSearchUrl: " ~ siteSearchUrl, ["debug"]); addLogEntry("Configured siteDriveUrl: " ~ siteDriveUrl, ["debug"]); // Websocket addLogEntry("Configured websocketEndpoint: " ~ websocketEndpoint, ["debug"]); } } // Release CurlEngine bask to the Curl Engine Pool void releaseCurlEngine() { // Log that this was called if ((debugLogging) && (debugHTTPSResponse)) {addLogEntry("OneDrive API releaseCurlEngine() Called", ["debug"]);} // Release curl instance back to the pool if (curlEngine !is null) { curlEngine.releaseEngine(); curlEngine = null; } // Release the response response = null; // Perform Garbage Collection GC.collect(); } // Authenticate this client against Microsoft OneDrive API using one of the 3 authentication methods this client supports bool authorise() { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Has the client been configured to use Intune SSO via Microsoft Identity Broker (microsoft-identity-broker) dbus session if (appConfig.getValueBool("use_intune_sso")) { // The client is configured to use Intune SSO via Microsoft Identity Broker dbus session // Do we have a saved account file? if (!exists(appConfig.intuneAccountDetailsFilePath)) { // No file exists locally auto intuneAuthResult = acquire_token_interactive(appConfig.getValueString("application_id")); JSONValue intuneBrokerJSONData = intuneAuthResult.brokerTokenResponse; // Is the response JSON data valid? if ((intuneBrokerJSONData.type() == JSONType.object)) { // Does the JSON data have the required authentication elements: // - accessToken // - account // - expiresOn if ((hasAccessTokenData(intuneBrokerJSONData)) && (hasAccountData(intuneBrokerJSONData)) && (hasExpiresOn(intuneBrokerJSONData))) { // Details exist processIntuneResponse(intuneBrokerJSONData); // Return that we are authenticated return true; } else { // no ... expected values not available addLogEntry("Required JSON elements are not present in the Intune JSON response"); return false; } } else { // Not a valid JSON response addLogEntry("Invalid JSON Intune JSON response when attempting access authentication"); return false; } } else { // The account information is available in a saved file. Read this file in and attempt a silent authentication try { appConfig.intuneAccountDetails = strip(readText(appConfig.intuneAccountDetailsFilePath)); // Is the 'intune_account' empty? if (appConfig.intuneAccountDetails.empty) { addLogEntry("The 'intune_account' file exists but is empty: " ~ appConfig.intuneAccountDetailsFilePath); // No .. remove the file and perform the interactive authentication safeRemove(appConfig.intuneAccountDetailsFilePath); // Attempt interactive authentication authorise(); return true; } else { // We have loaded some Intune Account details, try and use them auto intuneAuthResult = acquire_token_silently(appConfig.intuneAccountDetails, appConfig.getValueString("application_id")); JSONValue intuneBrokerJSONData = intuneAuthResult.brokerTokenResponse; // Is the JSON data valid? if ((intuneBrokerJSONData.type() == JSONType.object)) { // Does the JSON data have the required authentication elements: // - accessToken // - account // - expiresOn if ((hasAccessTokenData(intuneBrokerJSONData)) && (hasAccountData(intuneBrokerJSONData)) && (hasExpiresOn(intuneBrokerJSONData))) { // Details exist processIntuneResponse(intuneBrokerJSONData); // Return that we are authenticated return true; } else { // no ... expected values not available addLogEntry("Required JSON elements are not present in the Intune JSON response"); return false; } } else { // No .. remove the file and perform the interactive authentication safeRemove(appConfig.intuneAccountDetailsFilePath); // Attempt interactive authentication authorise(); return true; } } } catch (FileException exception) { return false; } catch (std.utf.UTFException exception) { // path contains characters which generate a UTF exception addLogEntry("Cannot read 'intune_account' file on disk from: " ~ appConfig.intuneAccountDetailsFilePath); addLogEntry(" Error Reason:" ~ exception.msg); return false; } } } else { // There are 2 options here for normal authentication flow // 1. Use OAuth2 Device Authorisation Flow // 2. Use OAuth2 Interactive Authorisation Flow (application default) string authoriseApplicationRequest = "Please authorise this application by visiting the following URL:\n"; if (appConfig.getValueBool("use_device_auth")) { // Use OAuth2 Device Authorisation Flow // * deviceAuthUrl: Should already be configured based on client configuration // * tokenUrl: Should already be configured based on client configuration // * authScope: Should already be configured with the correct auth scopes string deviceAuthPostData = "client_id=" ~ clientId ~ authScope; // Initiating Device Code Request JSONValue deviceAuthResponse = initiateDeviceAuthorisation(deviceAuthPostData); // Was a valid JSON response provided? if (deviceAuthResponse.type() == JSONType.object) { // A valid JSON was returned // Extract required values string deviceCode = deviceAuthResponse["device_code"].str; string deviceAuthUrl = deviceAuthResponse["verification_uri"].str; string userCode = deviceAuthResponse["user_code"].str; long expiresIn = deviceAuthResponse["expires_in"].integer; long pollInterval = deviceAuthResponse["interval"].integer; SysTime expiresAt = Clock.currTime + dur!"seconds"(expiresIn); expiresAt.fracSecs = Duration.zero; // Display the required items for the user to action addLogEntry(); addLogEntry(authoriseApplicationRequest, ["consoleOnly"]); addLogEntry(deviceAuthUrl ~ "\n", ["consoleOnly"]); addLogEntry("Enter the following code when prompted: " ~ userCode, ["consoleOnly"]); addLogEntry(); addLogEntry("This code expires at: " ~ to!string(expiresAt), ["consoleOnly"]); addLogEntry(); // JSON value to store the poll response data JSONValue deviceAuthPollResponse; // Construct the polling post submission data string pollPostData = format( "client_id=%s&grant_type=urn%%3Aietf%%3Aparams%%3Aoauth%%3Agrant-type%%3Adevice_code&device_code=%s", clientId, deviceCode ); // Poll Microsoft API for authentication to be performed, until the expiry of this device authentication request while (Clock.currTime < expiresAt) { // Try the post to poll if the authentication has been done try { deviceAuthPollResponse = post(tokenUrl, pollPostData, null, true, "application/x-www-form-urlencoded"); // No error ... break out of the loop so the returned data can be processed break; } catch (OneDriveException e) { // Get the polling error JSON response JSONValue errorResponse = e.error; string errorType; if ("error" in errorResponse) { errorType = errorResponse["error"].str; if (errorType == "authorization_pending") { // Calculate remaining time Duration timeRemaining = expiresAt - Clock.currTime; long minutes = timeRemaining.total!"minutes"(); long seconds = timeRemaining.total!"seconds"() % 60; // Log countdown and status addLogEntry(format("[%02dm %02ds remaining] Still pending authorisation ...", minutes, seconds)); } else if (errorType == "authorization_declined") { addLogEntry("Authorisation was declined by the user."); // return false if we get to this point // set 'use_device_auth' to false to fall back to interactive authentication flow appConfig.setValueBool("use_device_auth" , false); return false; } else if (errorType == "expired_token") { addLogEntry("Device code expired before authorisation was completed."); // return false if we get to this point // set 'use_device_auth' to false to fall back to interactive authentication flow appConfig.setValueBool("use_device_auth" , false); return false; } else { addLogEntry("Unhandled error during polling: " ~ errorType); // return false if we get to this point // set 'use_device_auth' to false to fall back to interactive authentication flow appConfig.setValueBool("use_device_auth" , false); return false; } } else { addLogEntry("Unexpected error response from token polling."); // return false if we get to this point // set 'use_device_auth' to false to fall back to interactive authentication flow appConfig.setValueBool("use_device_auth" , false); return false; } } // Sleep until next polling interval Thread.sleep(dur!"seconds"(pollInterval)); } // Broken out of the polling loop // Was a valid JSON response provided? if (deviceAuthPollResponse.type() == JSONType.object) { // is the required 'access_token' available? if ("access_token" in deviceAuthPollResponse) { // We got the applicable access token addLogEntry("Access token acquired!"); // Process this JSON data processAuthenticationJSON(deviceAuthPollResponse); // Return that we are authorised return true; } } // return false if we get to this point // set 'use_device_auth' to false to fall back to interactive authentication flow appConfig.setValueBool("use_device_auth" , false); return false; } else { // No valid JSON response was returned // set 'use_device_auth' to false to fall back to interactive authentication flow appConfig.setValueBool("use_device_auth" , false); return false; } } else { // Use OAuth2 Interactive Authorisation Flow (application default) char[] response; // What URL should be presented to the user to access string url = authUrl ~ "?client_id=" ~ clientId ~ authScope ~ redirectUrl; // Configure automated authentication if --auth-files authUrlFilePath:responseUrlFilePath is being used string authFilesString = appConfig.getValueString("auth_files"); string authResponseString = appConfig.getValueString("auth_response"); if (!authResponseString.empty) { // read the response from authResponseString response = cast(char[]) authResponseString; } else if (authFilesString != "") { string[] authFiles = authFilesString.split(":"); string authUrlFilePath = authFiles[0]; string responseUrlFilePath = authFiles[1]; try { auto authUrlFile = File(authUrlFilePath, "w"); authUrlFile.write(url); authUrlFile.close(); } catch (FileException exception) { // There was a file system error // display the error message displayFileSystemErrorMessage(exception.msg, thisFunctionName, authUrlFilePath); // Must force exit here, allow logging to be done forceExit(); } catch (ErrnoException exception) { // There was a file system error // display the error message displayFileSystemErrorMessage(exception.msg, thisFunctionName, authUrlFilePath); // Must force exit here, allow logging to be done forceExit(); } // Log we are now waiting addLogEntry("Client requires authentication before proceeding. Waiting for --auth-files elements to be available."); while (!exists(responseUrlFilePath)) { Thread.sleep(dur!("msecs")(100)); } // read response from provided from OneDrive try { response = cast(char[]) read(responseUrlFilePath); } catch (OneDriveException exception) { // exception generated displayOneDriveErrorMessage(exception.msg, thisFunctionName); return false; } // try to remove auth files one at a time try { std.file.remove(authUrlFilePath); } catch (FileException exception) { addLogEntry("Cannot remove --auth-files elements - details below"); // There was a file system error - display the error message displayFileSystemErrorMessage(exception.msg, thisFunctionName, authUrlFilePath); return false; } try { std.file.remove(responseUrlFilePath); } catch (FileException exception) { addLogEntry("Cannot remove --auth-files elements - details below"); // There was a file system error - display the error message displayFileSystemErrorMessage(exception.msg, thisFunctionName, responseUrlFilePath); return false; } } else { // If we are not running in --dry-run mode, prompt the user to authorise the application if (!appConfig.getValueBool("dry_run")) { // Notify the user of the next step: visit the URL to authorise the client addLogEntry(); addLogEntry(authoriseApplicationRequest, ["consoleOnly"]); addLogEntry(url ~ "\n", ["consoleOnly"]); // Prompt the user to paste the full redirect URI (copied from the browser after login) addLogEntry("After completing the authorisation in your browser, copy the full redirect URI (from the address bar) and paste it below.\n", ["consoleOnly"]); addLogEntry("Paste redirect URI here: ", ["consoleOnlyNoNewLine"]); // Read the user's pasted response URI readln(response); // Flag that a response URI has been received - at this point could be valid or invalid appConfig.applicationAuthoriseResponseURIReceived = true; } else { // The application cannot be authorised when using --dry-run as we have to write out the authentication data, which negates the whole 'dry-run' process addLogEntry(); addLogEntry("The application requires authorisation, which involves saving authentication data on your system. Application authorisation cannot be completed when using the '--dry-run' option."); addLogEntry(); addLogEntry("To authorise the application please use your original command without '--dry-run'."); addLogEntry(); addLogEntry("To exclusively authorise the application without performing any additional actions, do not add '--sync' or '--monitor' to your command line."); addLogEntry(); forceExit(); } } // match the authorisation code auto c = matchFirst(strip(response), r"(?:[?&]code=)([^&]+)"); if (c.empty) { addLogEntry("An empty or invalid response uri was entered"); return false; } c.popFront(); // skip the whole match string authCode = decodeComponent(c.front); redeemToken(authCode); return true; } } } // Process Intune JSON response data void processIntuneResponse(JSONValue intuneBrokerJSONData) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Use the provided JSON data and configure elements, save JSON data to disk for reuse long expiresOnMs = intuneBrokerJSONData["expiresOn"].integer(); // Convert to SysTime SysTime expiryTime = SysTime.fromUnixTime(expiresOnMs / 1000); // Store in appConfig (to match standard flow) appConfig.accessTokenExpiration = expiryTime; addLogEntry("Intune access token expires at: " ~ to!string(appConfig.accessTokenExpiration)); // Configure the 'accessToken' based on Intune response appConfig.accessToken = "bearer " ~ strip(intuneBrokerJSONData["accessToken"].str); // Do we print the current access token debugOutputAccessToken(); // In order to support silent renewal of the access token, when the access token expires, we must store the Intune account data appConfig.intuneAccountDetails = to!string(intuneBrokerJSONData["account"]); // try and update the 'intune_account' file on disk for reuse later try { if (debugLogging) {addLogEntry("Updating 'intune_account' on disk", ["debug"]);} std.file.write(appConfig.intuneAccountDetailsFilePath, appConfig.intuneAccountDetails); if (debugLogging) {addLogEntry("Setting file permissions for: " ~ appConfig.intuneAccountDetailsFilePath, ["debug"]);} appConfig.intuneAccountDetailsFilePath.setAttributes(appConfig.returnSecureFilePermission()); } catch (FileException exception) { // display the error message displayFileSystemErrorMessage(exception.msg, thisFunctionName, appConfig.intuneAccountDetailsFilePath); } } // Initiate OAuth2 Device Authorisation JSONValue initiateDeviceAuthorisation(string deviceAuthPostData) { // Device OAuth2 Device Authorisation requires a HTTP POST return post(deviceAuthUrl, deviceAuthPostData, null, true, "application/x-www-form-urlencoded"); } // Do we print the current access token void debugOutputAccessToken() { if (appConfig.verbosityCount > 1) { if (appConfig.getValueBool("debug_https")) { if (appConfig.getValueBool("print_token")) { // This needs to be highly restricted in output .... if (debugLogging) {addLogEntry("CAUTION - KEEP THIS SAFE: Current access token: " ~ to!string(appConfig.accessToken), ["debug"]);} } } } } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/drive_get JSONValue getDefaultDriveDetails() { string url; url = driveUrl; return get(url); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_get JSONValue getDefaultRootDetails() { string url; url = driveUrl ~ "/root"; return get(url); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_get JSONValue getDriveIdRoot(string driveId) { string url; url = driveByIdUrl ~ driveId ~ "/root"; return get(url); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/drive_get JSONValue getDriveQuota(string driveId) { string url; url = driveByIdUrl ~ driveId ~ "/"; url ~= "?select=quota"; return get(url); } // Return the details of the specified path, by giving the path we wish to query // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_get JSONValue getPathDetails(string path) { string url; if ((path == ".")||(path == "/")) { url = driveUrl ~ "/root/"; } else { url = itemByPathUrl ~ encodeComponent(path) ~ ":/"; } // Add select clause url ~= "?select=id,name,eTag,cTag,deleted,file,folder,root,fileSystemInfo,remoteItem,parentReference,size,createdBy,lastModifiedBy,package"; return get(url); } // Return the details of the specified item based on its driveID and itemID // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_get JSONValue getPathDetailsById(string driveId, string id) { string url; url = driveByIdUrl ~ driveId ~ "/items/" ~ id; url ~= "?select=id,name,eTag,cTag,deleted,file,folder,root,fileSystemInfo,remoteItem,parentReference,size,createdBy,lastModifiedBy,webUrl,lastModifiedDateTime,package"; return get(url); } // Return all the items that are shared with the user // https://docs.microsoft.com/en-us/graph/api/drive-sharedwithme JSONValue getSharedWithMe() { return get(sharedWithMeUrl); } // Create a shareable link for an existing file on OneDrive based on the accessScope JSON permissions // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_createlink JSONValue createShareableLink(string driveId, string id, JSONValue accessScope) { string url; url = driveByIdUrl ~ driveId ~ "/items/" ~ id ~ "/createLink"; return post(url, accessScope.toString()); } // Return the requested details of the specified path on the specified drive id and path // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_get JSONValue getPathDetailsByDriveId(string driveId, string path) { string url; // https://learn.microsoft.com/en-us/onedrive/developer/rest-api/concepts/addressing-driveitems?view=odsp-graph-online // Required format: /drives/{drive-id}/root:/{item-path}: url = driveByIdUrl ~ driveId ~ "/root:/" ~ encodeComponent(path) ~ ":"; url ~= "?select=id,name,eTag,cTag,deleted,file,folder,root,fileSystemInfo,remoteItem,parentReference,size,createdBy,lastModifiedBy,package"; return get(url); } // Track changes for a given driveId // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_delta // Your app begins by calling delta without any parameters. The service starts enumerating the drive's hierarchy, returning pages of items and either an @odata.nextLink or an @odata.deltaLink, as described below. // Your app should continue calling with the @odata.nextLink until you no longer see an @odata.nextLink returned, or you see a response with an empty set of changes. // After you have finished receiving all the changes, you may apply them to your local state. To check for changes in the future, call delta again with the @odata.deltaLink from the previous successful response. JSONValue getChangesByItemId(string driveId, string id, string deltaLink) { string[string] requestHeaders; // From March 1st 2025, this needs to be added to ensure that Shared Folders are sent in the Delta Query Response if (appConfig.accountType == "personal") { // OneDrive Personal Account addIncludeFeatureRequestHeader(&requestHeaders); } else { // Business or SharePoint Library // Only add if configured to do so if (appConfig.getValueBool("sync_business_shared_items")) { // Feature enabled, add headers addIncludeFeatureRequestHeader(&requestHeaders); } } string url; // configure deltaLink to query if (deltaLink.empty) { url = driveByIdUrl ~ driveId ~ "/items/" ~ id ~ "/delta"; // Reduce what we ask for in the response - which reduces the data transferred back to us, and reduces what is held in memory during initial JSON processing url ~= "?select=id,name,eTag,cTag,deleted,file,folder,root,fileSystemInfo,remoteItem,parentReference,size,createdBy,lastModifiedBy,package"; } else { url = deltaLink; } // get the response return get(url, false, requestHeaders); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_list_children JSONValue listChildren(string driveId, string id, string nextLink) { string[string] requestHeaders; // From March 1st 2025, this needs to be added to ensure that Shared Folders are sent in the Delta Query Response if (appConfig.accountType == "personal") { // OneDrive Personal Account addIncludeFeatureRequestHeader(&requestHeaders); } else { // Business or SharePoint Library // Only add if configured to do so if (appConfig.getValueBool("sync_business_shared_items")) { // Feature enabled, add headers addIncludeFeatureRequestHeader(&requestHeaders); } } string url; // configure URL to query if (nextLink.empty) { url = driveByIdUrl ~ driveId ~ "/items/" ~ id ~ "/children"; url ~= "?select=id,name,eTag,cTag,deleted,file,folder,root,fileSystemInfo,remoteItem,parentReference,size,createdBy,lastModifiedBy,package"; } else { url = nextLink; } return get(url, false, requestHeaders); } // https://learn.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_search JSONValue searchDriveForPath(string driveId, string path) { // OData string literal escaping: a single quote inside a '...' literal becomes doubled. // Then URL-encode for safe transport auto odataSafe = path.replace("'", "''"); auto encoded = encodeComponent(odataSafe); string url; url = "https://graph.microsoft.com/v1.0/drives/" ~ driveId ~ "/root/search(q='" ~ encoded ~ "')"; return get(url); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_update JSONValue updateById(const(char)[] driveId, const(char)[] id, JSONValue data, const(char)[] eTag = null) { string[string] requestHeaders; const(char)[] url = driveByIdUrl ~ driveId ~ "/items/" ~ id; if (eTag) requestHeaders["If-Match"] = to!string(eTag); return patch(url, data.toString(), false, requestHeaders); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_delete void deleteById(const(char)[] driveId, const(char)[] id, const(char)[] eTag = null) { // string[string] requestHeaders; const(char)[] url = driveByIdUrl ~ driveId ~ "/items/" ~ id; //TODO: investigate why this always fail with 412 (Precondition Failed) // if (eTag) requestHeaders["If-Match"] = eTag; performDelete(url); } // https://learn.microsoft.com/en-us/graph/api/driveitem-permanentdelete?view=graph-rest-1.0 void permanentDeleteById(const(char)[] driveId, const(char)[] id, const(char)[] eTag = null) { // string[string] requestHeaders; const(char)[] url = driveByIdUrl ~ driveId ~ "/items/" ~ id ~ "/permanentDelete"; //TODO: investigate why this always fail with 412 (Precondition Failed) // if (eTag) requestHeaders["If-Match"] = eTag; // as per documentation, a permanentDelete needs to be a HTTP POST performPermanentDelete(url); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_post_children JSONValue createById(string parentDriveId, string parentId, JSONValue item) { string url = driveByIdUrl ~ parentDriveId ~ "/items/" ~ parentId ~ "/children"; return post(url, item.toString()); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_put_content JSONValue simpleUpload(string localPath, string parentDriveId, string parentId, string filename) { string url = driveByIdUrl ~ parentDriveId ~ "/items/" ~ parentId ~ ":/" ~ encodeComponent(filename) ~ ":/content"; return put(url, localPath); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_put_content JSONValue simpleUploadReplace(string localPath, string driveId, string id) { string url = driveByIdUrl ~ driveId ~ "/items/" ~ id ~ "/content"; return put(url, localPath); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_createuploadsession //JSONValue createUploadSession(string parentDriveId, string parentId, string filename, string eTag = null, JSONValue item = null) { JSONValue createUploadSession(string parentDriveId, string parentId, string filename, const(char)[] eTag = null, JSONValue item = null) { string[string] requestHeaders; string url = driveByIdUrl ~ parentDriveId ~ "/items/" ~ parentId ~ ":/" ~ encodeComponent(filename) ~ ":/createUploadSession"; // eTag If-Match header addition commented out for the moment // At some point, post the creation of this upload session the eTag is being 'updated' by OneDrive, thus when uploadFragment() is used // this generates a 412 Precondition Failed and then a 416 Requested Range Not Satisfiable // This needs to be investigated further as to why this occurs if (eTag) requestHeaders["If-Match"] = to!string(eTag); return post(url, item.toString(), requestHeaders); } // https://learn.microsoft.com/en-us/graph/api/driveitem-createuploadsession?view=graph-rest-1.0#upload-bytes-to-the-upload-session JSONValue uploadFragment(string uploadUrl, string filepath, long offset, long offsetSize, long fileSize) { // If we upload a modified file, with the current known online eTag, this gets changed when the session is started - thus, the tail end of uploading // a fragment fails with a 412 Precondition Failed and then a 416 Requested Range Not Satisfiable // For the moment, comment out adding the If-Match header in createUploadSession, which then avoids this issue string contentRange = "bytes " ~ to!string(offset) ~ "-" ~ to!string(offset + offsetSize - 1) ~ "/" ~ to!string(fileSize); if (debugLogging) { addLogEntry("fragment contentRange: " ~ contentRange, ["debug"]); } // Before we submit this 'HTTP PUT' request, pre-emptively check token expiry to avoid future 401s during long uploads checkAccessTokenExpired(); // Perform the HTTP PUT action to upload the file fragment return put(uploadUrl, filepath, true, contentRange, offset, offsetSize); } // https://learn.microsoft.com/en-us/graph/api/driveitem-createuploadsession?view=graph-rest-1.0#resuming-an-in-progress-upload JSONValue requestUploadStatus(string uploadUrl) { return get(uploadUrl, true); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/site_search?view=odsp-graph-online JSONValue o365SiteSearch(string nextLink) { string url; // configure URL to query if (nextLink.empty) { url = siteSearchUrl ~ "=*"; } else { url = nextLink; } return get(url); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/drive_list?view=odsp-graph-online JSONValue o365SiteDrives(string site_id, string nextLink){ string url; // configure URL to query if (nextLink.empty) { url = siteDriveUrl ~ site_id ~ "/drives"; } else { url = nextLink; } return get(url); } // Create Webhook Subscription JSONValue createSubscription(string notificationUrl, SysTime expirationDateTime) { string driveId; string url = subscriptionUrl; // What do we set for driveId if (appConfig.getValueString("drive_id").length) { // Use the 'config' file option driveId = appConfig.getValueString("drive_id"); } else { // use appConfig.defaultDriveId driveId = appConfig.defaultDriveId; } // Create a resource item based on if we have a driveId now configured string resourceItem; if (driveId.length) { resourceItem = "/drives/" ~ driveId ~ "/root"; } else { resourceItem = "/me/drive/root"; } // create JSON request to create webhook subscription const JSONValue request = [ "changeType": "updated", "notificationUrl": notificationUrl, "resource": resourceItem, "expirationDateTime": expirationDateTime.toISOExtString(), "clientState": randomUUID().toString() ]; return post(url, request.toString()); } // Renew Webhook Subscription JSONValue renewSubscription(string subscriptionId, SysTime expirationDateTime) { string url; url = subscriptionUrl ~ "/" ~ subscriptionId; const JSONValue request = [ "expirationDateTime": expirationDateTime.toISOExtString() ]; return patch(url, request.toString(), true); } // Delete Webhook subscription void deleteSubscription(string subscriptionId) { string url; url = subscriptionUrl ~ "/" ~ subscriptionId; performDelete(url); } // Obtain the Websocket Notification URL JSONValue obtainWebSocketNotificationURL() { if (debugLogging) {addLogEntry("Request a Socket.IO Subscription Endpoint: " ~ websocketEndpoint, ["debug"]);} return get(websocketEndpoint); } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_get_content void downloadById(const(char)[] driveId, const(char)[] itemId, string saveToPath, long fileSize, JSONValue onlineHash, long resumeOffset = 0) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // We pass through to 'downloadFile()' // - resumeOffset // - onlineHash // - driveId // - itemId scope(failure) { if (exists(saveToPath)) { // try and remove the file, catch error try { remove(saveToPath); } catch (FileException exception) { // display the error message displayFileSystemErrorMessage(exception.msg, thisFunctionName, saveToPath); } } } // Create the required local parental path structure if this does not exist string parentalPath = dirName(saveToPath); // Does the parental path exist locally? if (!exists(parentalPath)) { try { if (debugLogging) {addLogEntry("Requested local parental path does not exist, creating directory structure: " ~ parentalPath, ["debug"]);} mkdirRecurse(parentalPath); // Has the user disabled the setting of filesystem permissions? if (!appConfig.getValueBool("disable_permission_set")) { // Configure the applicable permissions for the folder if (debugLogging) {addLogEntry("Setting directory permissions for: " ~ parentalPath, ["debug"]);} parentalPath.setAttributes(appConfig.returnRequiredDirectoryPermissions()); } else { // Use inherited permissions if (debugLogging) {addLogEntry("Using inherited filesystem permissions for: " ~ parentalPath, ["debug"]);} } } catch (FileException exception) { // display the error message displayFileSystemErrorMessage(exception.msg, thisFunctionName, parentalPath); } } // Create the URL to download the file const(char)[] url = driveByIdUrl ~ driveId ~ "/items/" ~ itemId ~ "/content?AVOverride=1"; // Download file using the URL created above downloadFile(driveId, itemId, url, saveToPath, fileSize, onlineHash, resumeOffset); // Does downloaded file now exist locally? if (exists(saveToPath)) { // Has the user disabled the setting of filesystem permissions? if (!appConfig.getValueBool("disable_permission_set")) { // File was downloaded successfully - configure the applicable permissions for the file if (debugLogging) {addLogEntry("Setting file permissions for: " ~ saveToPath, ["debug"]);} saveToPath.setAttributes(appConfig.returnRequiredFilePermissions()); } else { // Use inherited permissions if (debugLogging) {addLogEntry("Using inherited filesystem permissions for: " ~ saveToPath, ["debug"]);} } } } // Return the actual siteSearchUrl being used and/or requested when performing 'siteQuery = onedrive.o365SiteSearch(nextLink);' call string getSiteSearchUrl() { return siteSearchUrl; } // Private OneDrive API Functions private void addIncludeFeatureRequestHeader(string[string]* headers) { if (appConfig.accountType == "personal") { // Add logging message for OneDrive Personal Accounts if (debugLogging) {addLogEntry("Adding 'Include-Feature=AddToOneDrive' API request header for OneDrive Personal Account Type", ["debug"]);} } else { // Add logging message for OneDrive Business Accounts if (debugLogging) {addLogEntry("Adding 'Include-Feature=AddToOneDrive' API request header as 'sync_business_shared_items' config option is enabled", ["debug"]);} } // Add feature to request headers (*headers)["Prefer"] = "Include-Feature=AddToOneDrive"; } private void redeemToken(string authCode) { string postData = "client_id=" ~ clientId ~ "&redirect_uri=" ~ encodeComponent(redirectUrl) ~ "&code=" ~ encodeComponent(authCode) ~ "&grant_type=authorization_code"; acquireToken(postData.dup); } private void acquireToken(char[] postData) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Configure the response JSON JSONValue response; // Log what we are doing if (debugLogging) { addLogEntry("acquireToken: requesting new access token using refresh token (value redacted)", ["debug"]); } // Try and process the 'postData' content try { response = post(tokenUrl, postData, null, true, "application/x-www-form-urlencoded"); } catch (OneDriveException exception) { // an error was generated if ((exception.httpStatusCode == 400) || (exception.httpStatusCode == 401)) { // Release curl engine releaseCurlEngine(); // Handle an unauthorised client handleClientUnauthorised(exception.httpStatusCode, exception.error); // Must force exit here, allow logging to be done forceExit(); } else { if (exception.httpStatusCode >= 500) { // There was a HTTP 5xx Server Side Error - retry acquireToken(postData); } else { displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } } if (response.type() == JSONType.object) { // Debug the provided response if (debugLogging) { string scopes = ("scope" in response) ? response["scope"].str() : ""; string tokenType = ("token_type" in response) ? response["token_type"].str() : ""; long expiresIn = ("expires_in" in response) ? response["expires_in"].integer() : -1; addLogEntry("acquireToken post response: token_type=" ~ tokenType ~ ", expires_in=" ~ to!string(expiresIn) ~ ", scope=" ~ scopes, ["debug"]); } // Has the client been configured to use read_only_auth_scope if (appConfig.getValueBool("read_only_auth_scope")) { // read_only_auth_scope has been configured if ("scope" in response){ string effectiveScopes = response["scope"].str(); // Display the effective authentication scopes addLogEntry(); if (verboseLogging) {addLogEntry("Effective API Authentication Scopes: " ~ effectiveScopes, ["verbose"]);} // if we have any write scopes, we need to tell the user to update an remove online prior authentication and exit application if (canFind(effectiveScopes, "Write")) { // effective scopes contain write scopes .. so not a read-only configuration addLogEntry(); addLogEntry("ERROR: You have authentication scopes that allow write operations. You need to remove your existing application access consent"); addLogEntry(); addLogEntry("Please login to https://account.live.com/consent/Manage and remove your existing application access consent"); addLogEntry(); // force exit releaseCurlEngine(); // Must force exit here, allow logging to be done forceExit(); } } } if ("access_token" in response) { // Process the response JSON processAuthenticationJSON(response); } else { // Release curl engine releaseCurlEngine(); // Log error message addLogEntry("\nInvalid authentication response from OneDrive. Please check the response uri\n"); // re-authorize authorise(); } } else { // Release curl engine releaseCurlEngine(); addLogEntry("Invalid response from the Microsoft Graph API. Unable to initialise OneDrive API instance."); // Must force exit here, allow logging to be done forceExit(); } } // Process the authentication JSON private void processAuthenticationJSON(JSONValue response) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Use 'access_token' and set in the application configuration appConfig.accessToken = "bearer " ~ strip(response["access_token"].str); // Do we print the current access token debugOutputAccessToken(); // Obtain the 'refresh_token' and its expiry refreshToken = strip(response["refresh_token"].str); appConfig.accessTokenExpiration = Clock.currTime() + dur!"seconds"(response["expires_in"].integer()); // Debug this response if (debugLogging) {addLogEntry("appConfig.accessTokenExpiration = " ~ to!string(appConfig.accessTokenExpiration), ["debug"]);} if (!dryRun) { // Update the refreshToken in appConfig so that we can reuse it if (appConfig.refreshToken.empty) { // The access token is empty if (debugLogging) {addLogEntry("Updating appConfig.refreshToken with new refreshToken as appConfig.refreshToken is empty", ["debug"]);} appConfig.refreshToken = refreshToken; } else { // Is the access token different? if (appConfig.refreshToken != refreshToken) { // Update the memory version if (debugLogging) {addLogEntry("Updating appConfig.refreshToken with updated refreshToken", ["debug"]);} appConfig.refreshToken = refreshToken; } } // try and update the 'refresh_token' file on disk try { if (debugLogging) {addLogEntry("Updating 'refresh_token' on disk", ["debug"]);} std.file.write(appConfig.refreshTokenFilePath, refreshToken); if (debugLogging) {addLogEntry("Setting file permissions for: " ~ appConfig.refreshTokenFilePath, ["debug"]);} appConfig.refreshTokenFilePath.setAttributes(appConfig.returnSecureFilePermission()); } catch (FileException exception) { // display the error message displayFileSystemErrorMessage(exception.msg, thisFunctionName, appConfig.refreshTokenFilePath); } } } private void generateNewAccessToken() { if (debugLogging) {addLogEntry("Need to generate a new access token for Microsoft OneDrive", ["debug"]);} // Has the client been configured to use Intune SSO via Microsoft Identity Broker (microsoft-identity-broker) dbus session if (appConfig.getValueBool("use_intune_sso")) { // The client is configured to use Intune SSO via Microsoft Identity Broker dbus session auto intuneAuthResult = acquire_token_silently(appConfig.intuneAccountDetails, appConfig.getValueString("application_id")); JSONValue intuneBrokerJSONData = intuneAuthResult.brokerTokenResponse; // Is the JSON data valid? if ((intuneBrokerJSONData.type() == JSONType.object)) { // Does the JSON data have the required renewal elements: // - accessToken // - account // - expiresOn if ((hasAccessTokenData(intuneBrokerJSONData)) && (hasAccountData(intuneBrokerJSONData)) && (hasExpiresOn(intuneBrokerJSONData))) { // Details exist processIntuneResponse(intuneBrokerJSONData); } else { // no ... expected values not available addLogEntry("Required Intune JSON elements are not present in the Intune JSON response"); } } else { // Not a valid JSON response addLogEntry("Invalid Intune JSON response when attempting access token renewal"); } } else { // Normal authentication method auto postData = appender!(string)(); postData ~= "client_id=" ~ clientId; postData ~= "&redirect_uri=" ~ redirectUrl; postData ~= "&refresh_token=" ~ to!string(refreshToken); postData ~= "&grant_type=refresh_token"; acquireToken(postData.data.dup); } } // Check if the existing access token has expired, if it has, generate a new one private void checkAccessTokenExpired() { if (Clock.currTime() >= appConfig.accessTokenExpiration) { if (debugLogging) {addLogEntry("Microsoft OneDrive OAuth2 Access Token has expired. Must generate a new Microsoft OneDrive OAuth2 Access Token", ["debug"]);} generateNewAccessToken(); } else { if (debugLogging) {addLogEntry("Microsoft OneDrive OAuth2 Access Token Valid Until (Local): " ~ to!string(appConfig.accessTokenExpiration), ["debug"]);} } } private string getAccessToken() { checkAccessTokenExpired(); return to!string(appConfig.accessToken); } private void addAccessTokenHeader(string[string]* requestHeaders) { (*requestHeaders)["Authorization"] = getAccessToken(); } private void connect(HTTP.Method method, const(char)[] url, bool skipToken, CurlResponse response, string[string] requestHeaders=null) { // If we are debug logging, output the URL being accessed and the HTTP method being used to access that URL if (debugLogging) {addLogEntry("HTTP " ~ to!string(method) ~ " request to URL: " ~ to!string(url), ["debug"]);} // Check access token first in case the request is overridden if (!skipToken) addAccessTokenHeader(&requestHeaders); curlEngine.setResponseHolder(response); foreach(k, v; requestHeaders) { curlEngine.addRequestHeader(k, v); } curlEngine.connect(method, url); } private void performDelete(const(char)[] url, string[string] requestHeaders=null, string callingFunction=__FUNCTION__, int lineno=__LINE__) { bool validateJSONResponse = false; oneDriveErrorHandlerWrapper((CurlResponse response) { connect(HTTP.Method.del, url, false, response, requestHeaders); return curlEngine.execute(); }, validateJSONResponse, callingFunction, lineno); } private void performPermanentDelete(const(char)[] url, string[string] requestHeaders=null, string callingFunction=__FUNCTION__, int lineno=__LINE__) { bool validateJSONResponse = false; oneDriveErrorHandlerWrapper((CurlResponse response) { connect(HTTP.Method.post, url, false, response, requestHeaders); curlEngine.setZeroContentLength(); return curlEngine.execute(); }, validateJSONResponse, callingFunction, lineno); } // Download a file based on the URL request private void downloadFile(const(char)[] driveId, const(char)[] itemId, const(char)[] url, string filename, long fileSize, JSONValue onlineHash, long resumeOffset = 0, string callingFunction=__FUNCTION__, int lineno=__LINE__) { // Threshold for displaying download bar long thresholdFileSize = 4 * 2^^20; // 4 MiB // To support marking of partially-downloaded files string originalFilename = filename; string downloadFilename = filename ~ ".partial"; // To support resumable downloads, configure the 'resumable data' file path string threadResumeDownloadFilePath = appConfig.resumeDownloadFilePath ~ "." ~ generateAlphanumericString(); // Create a JSONValue with download state so this can be used when resuming, to evaluate if the online file has changed, and if we are able to resume in a safe manner JSONValue resumeDownloadData = JSONValue([ "driveId": JSONValue(to!string(driveId)), "itemId": JSONValue(to!string(itemId)), "onlineHash": onlineHash, "originalFilename": JSONValue(originalFilename), "downloadFilename": JSONValue(downloadFilename), "resumeOffset": JSONValue(to!string(resumeOffset)) ]); // ---------------------------------------------------------------------- // Progress state – must live for the whole downloadFile() call so that // retries triggered by oneDriveErrorHandlerWrapper() do NOT reset the // visible progress bar back to 0%. // ---------------------------------------------------------------------- size_t expected_total_segments = 20; SysTime startTime = Clock.currTime(); long start_unix_time = startTime.toUnixTime(); int h, m, s; string etaString; bool barInit = false; real previousProgressPercent = 0.0; // last *displayed* percent real percentCheck = 5.0; size_t segmentCount = 0; // Validate the JSON response bool validateJSONResponse = false; oneDriveErrorHandlerWrapper((CurlResponse response) { connect(HTTP.Method.get, url, false, response); if (fileSize >= thresholdFileSize) { // ------------------------------------------------------------------ // Determine an effective resume offset for this attempt. // // - Start from the passed-in resumeOffset (from resume_download.*) // - If a .partial file exists and is larger, prefer its size. // This ensures we never re-download bytes we already have on disk. // ------------------------------------------------------------------ long effectiveResumeOffset = resumeOffset; if (exists(downloadFilename)) { try { auto partialSize = cast(long) getSize(downloadFilename); if (partialSize > effectiveResumeOffset) { if (debugLogging) { addLogEntry( "Resumable download: detected existing partial file '" ~ downloadFilename ~ "' of size " ~ to!string(partialSize) ~ " bytes", ["debug"] ); addLogEntry( "Adjusting resumable offset for '" ~ originalFilename ~ "' from " ~ to!string(effectiveResumeOffset) ~ " to " ~ to!string(partialSize), ["debug"] ); } effectiveResumeOffset = partialSize; } } catch (FileException ex) { if (debugLogging) { addLogEntry( "Failed to obtain size of partial download file '" ~ downloadFilename ~ "': " ~ ex.msg, ["debug"] ); } } } // If we have a resumable offset to use, set this as the offset to use if (effectiveResumeOffset > 0) { curlEngine.setDownloadResumeOffset(effectiveResumeOffset); // Keep the JSON state in sync with the absolute offset resumeDownloadData["resumeOffset"] = JSONValue(to!string(effectiveResumeOffset)); } // Setup progress bar to display curlEngine.http.onProgress = delegate int(size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow) { string downloadLogEntry = "Downloading: " ~ filename ~ " ... "; // ------------------------------------------------------------------ // Compute absolute progress as bytes_on_disk + bytes_this_transfer. // This ensures that after a retry, the percentage continues from // (for example) 25% instead of restarting at 0%. // ------------------------------------------------------------------ long absoluteNow = effectiveResumeOffset + cast(long)dlnow; long absoluteTotal; if (fileSize > 0) { absoluteTotal = fileSize; } else if (dltotal > 0) { absoluteTotal = effectiveResumeOffset + cast(long)dltotal; } else { absoluteTotal = absoluteNow; // best effort; avoids div-by-zero } if (absoluteTotal <= 0) { absoluteTotal = 1; // safety guard } // Floor to nearest whole number real currentDLPercent = floor( (cast(real) absoluteNow / cast(real) absoluteTotal) * 100.0 ); // Clamp just in case if (currentDLPercent < 0.0) { currentDLPercent = 0.0; } else if (currentDLPercent > 100.0) { currentDLPercent = 100.0; } // Debug logging (optional, but handy while we’re testing) if (debugLogging) { addLogEntry("", ["debug"]); addLogEntry("absoluteNow = " ~ to!string(absoluteNow), ["debug"]); addLogEntry("absoluteTotal = " ~ to!string(absoluteTotal), ["debug"]); addLogEntry("Percent Complete = " ~ to!string(currentDLPercent), ["debug"]); } // Have we started downloading (in absolute terms)? if (currentDLPercent > 0) { // Has the user set a data rate limit? // when using rate_limit, we will get odd download rates, for example: // Percent Complete = 24 // Data Received = 13080163 // Expected Total = 52428800 // Percent Complete = 24 // Data Received = 13685777 // Expected Total = 52428800 // Percent Complete = 26 <---- jumps to 26% missing 25%, thus fmod misses incrementing progress bar // Data Received = 13685777 // Expected Total = 52428800 // Percent Complete = 26 if (appConfig.getValueLong("rate_limit") > 0) { // Under rate limiting, libcurl can "jump" the visible percentage, // e.g. 24% -> 26%, which can skip a clean 5% boundary. // To keep a stable 5% display (5, 10, 15, ...), we use a // catch-up loop that prints every missing 5% step up to // currentDLPercent, based on the *absolute* percentage. real nextPercent = previousProgressPercent + percentCheck; // Emit all missing 5% steps below 100% while (nextPercent < 100.0 && currentDLPercent >= nextPercent) { if (debugLogging) { addLogEntry("Incrementing Progress Bar (rate_limit) to " ~ to!string(nextPercent) ~ "%", ["debug"]); } segmentCount++; etaString = formatETA(calc_eta(segmentCount, expected_total_segments, start_unix_time)); string percentage = leftJustify(to!string(cast(int) nextPercent) ~ "%", 5, ' '); addLogEntry(downloadLogEntry ~ percentage ~ etaString, ["consoleOnly"]); previousProgressPercent = nextPercent; nextPercent += percentCheck; } // Handle 100% exactly once if ((currentDLPercent >= 100.0) && (previousProgressPercent < 100.0)) { SysTime endTime = Clock.currTime(); long end_unix_time = endTime.toUnixTime(); int download_duration = cast(int)(end_unix_time - start_unix_time); dur!"seconds"(download_duration).split!("hours", "minutes", "seconds")(h, m, s); etaString = format!"| DONE in %02d:%02d:%02d"(h, m, s); string percentage = leftJustify("100%", 5, ' '); addLogEntry(downloadLogEntry ~ percentage ~ etaString, ["consoleOnly"]); previousProgressPercent = 100.0; } } else { // Non-rate-limited case: fmod-based behaviour but applied to the absolute percentage if ((isIdentical(fmod(currentDLPercent, percentCheck), 0.0)) && (previousProgressPercent != currentDLPercent)) { // currentDLPercent matches a new increment if (debugLogging) { addLogEntry("Incrementing Progress Bar using fmod match", ["debug"]); } if (currentDLPercent != 100) { // Not 100% yet segmentCount++; etaString = formatETA(calc_eta(segmentCount, expected_total_segments, start_unix_time)); string percentage = leftJustify(to!string(cast(int) currentDLPercent) ~ "%", 5, ' '); addLogEntry(downloadLogEntry ~ percentage ~ etaString, ["consoleOnly"]); } else { // 100% done SysTime endTime = Clock.currTime(); long end_unix_time = endTime.toUnixTime(); int download_duration = cast(int)(end_unix_time - start_unix_time); dur!"seconds"(download_duration).split!("hours", "minutes", "seconds")(h, m, s); etaString = format!"| DONE in %02d:%02d:%02d"(h, m, s); string percentage = leftJustify("100%", 5, ' '); addLogEntry(downloadLogEntry ~ percentage ~ etaString, ["consoleOnly"]); } previousProgressPercent = currentDLPercent; } } // Has our absolute offset advanced? if (absoluteNow > to!long(resumeDownloadData["resumeOffset"].str)) { // Update resumeOffset for this progress event with the latest absolute offset resumeDownloadData["resumeOffset"] = JSONValue(to!string(absoluteNow)); // Save resumable download data - this needs to be saved on every onProgress event that is processed saveResumeDownloadFile(threadResumeDownloadFilePath, resumeDownloadData); } } else { // We may get frequent progress callbacks at 0%, make sure we initialise the bar once per overall download if ((currentDLPercent == 0) && (!barInit)) { etaString = "| ETA --:--:--"; string percentage = leftJustify("0%", 5, ' '); addLogEntry(downloadLogEntry ~ percentage ~ etaString, ["consoleOnly"]); barInit = true; } } return 0; }; } else { // No progress bar, no resumable download } // Capture the result of the download action auto result = curlEngine.download(originalFilename, downloadFilename); // Safe remove 'threadResumeDownloadFilePath' as if we get to this point, the file has been downloaded successfully safeRemove(threadResumeDownloadFilePath); // Reset this curlEngine offset value now that the file has been downloaded successfully curlEngine.resetDownloadResumeOffset(); // Return the applicable result return result; }, validateJSONResponse, callingFunction, lineno); } // Save the resume download data private void saveResumeDownloadFile(string threadResumeDownloadFilePath, JSONValue resumeDownloadData) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); try { std.file.write(threadResumeDownloadFilePath, resumeDownloadData.toString()); } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, threadResumeDownloadFilePath); } } private JSONValue get(string url, bool skipToken = false, string[string] requestHeaders=null, string callingFunction=__FUNCTION__, int lineno=__LINE__) { bool validateJSONResponse = true; return oneDriveErrorHandlerWrapper((CurlResponse response) { connect(HTTP.Method.get, url, skipToken, response, requestHeaders); return curlEngine.execute(); }, validateJSONResponse, callingFunction, lineno); } private JSONValue patch(const(char)[] url, const(char)[] patchData, bool validateJSONResponseInput, string[string] requestHeaders=null, const(char)[] contentType = "application/json", string callingFunction=__FUNCTION__, int lineno=__LINE__) { bool validateJSONResponse = validateJSONResponseInput; return oneDriveErrorHandlerWrapper((CurlResponse response) { connect(HTTP.Method.patch, url, false, response, requestHeaders); curlEngine.setContent(contentType, patchData); return curlEngine.execute(); }, validateJSONResponse, callingFunction, lineno); } private JSONValue post(const(char)[] url, const(char)[] postData, string[string] requestHeaders=null, bool skipToken = false, const(char)[] contentType = "application/json", string callingFunction=__FUNCTION__, int lineno=__LINE__) { bool validateJSONResponse = true; return oneDriveErrorHandlerWrapper((CurlResponse response) { connect(HTTP.Method.post, url, skipToken, response, requestHeaders); curlEngine.setContent(contentType, postData); return curlEngine.execute(); }, validateJSONResponse, callingFunction, lineno); } private JSONValue put(const(char)[] url, string filepath, bool skipToken=false, string contentRange=null, ulong offset=0, ulong offsetSize=0, string callingFunction=__FUNCTION__, int lineno=__LINE__) { bool validateJSONResponse = true; return oneDriveErrorHandlerWrapper((CurlResponse response) { connect(HTTP.Method.put, url, skipToken, response); curlEngine.setFile(filepath, contentRange, offset, offsetSize); return curlEngine.execute(); }, validateJSONResponse, callingFunction, lineno); } // Wrapper function for all requests to OneDrive API // - This should throw a OneDriveException so that this exception can be handled appropriately elsewhere in the application private JSONValue oneDriveErrorHandlerWrapper(CurlResponse delegate(CurlResponse response) executer, bool validateJSONResponse, string callingFunction, int lineno) { // Create a new 'curl' response response = new CurlResponse(); // Other wrapper variables int retryAttempts = 0; int baseBackoffInterval = 1; // Base backoff interval in seconds int maxRetryCount = 175200; // Approx 365 days based on maxBackoffInterval + appConfig.defaultDataTimeout //int maxRetryCount = 5; // Temp int maxBackoffInterval = 120; // Maximum backoff interval in seconds int thisBackOffInterval = 0; int timestampAlign = 0; JSONValue result; SysTime currentTime; SysTime retryTime; bool retrySuccess = false; bool transientError = false; bool sslVerifyPeerDisabled = false; while (!retrySuccess) { // Reset thisBackOffInterval thisBackOffInterval = 0; transientError = false; if (retryAttempts >= 1) { // re-try log entry & clock time retryTime = Clock.currTime(); retryTime.fracSecs = Duration.zero; addLogEntry("Retrying the respective Microsoft Graph API call for Internal Thread ID: " ~ to!string(curlEngine.internalThreadId) ~ " (Timestamp: " ~ to!string(retryTime) ~ ") ..."); } try { response.reset(); response = executer(response); // Check for a valid response if (response.hasResponse) { // Process the response result = response.json(); // Print response if 'debugHTTPSResponse' is flagged if (debugHTTPSResponse){ if (debugLogging) {addLogEntry("Microsoft Graph API Response: " ~ response.dumpResponse(), ["debug"]);} } // Check http response code, raise a OneDriveException if the operation was not successfully performed if (checkHttpResponseCode(response.statusLine.code)) { // 'curl' on platforms like Ubuntu does not reliably provide the 'http.statusLine.reason' when using HTTP/2 // This is a curl bug, but because Ubuntu uses old packages and never updates them, we are stuck with working around this bug if (response.statusLine.reason.length == 0) { // No 'reason', fetch what it should have been response.statusLine.reason = getMicrosoftGraphStatusMessage(response.statusLine.code); } // Why are throwing a OneDriveException - do not do this for a 404 error as this is not required as we use a 404 if things are not online, to create them if (response.statusLine.code != 404) { if (debugLogging) { addLogEntry("response.statusLine.code: " ~ to!string(response.statusLine.code), ["debug"]); addLogEntry("response.statusLine.reason: " ~ to!string(response.statusLine.reason), ["debug"]); addLogEntry("actual curl response: " ~ to!string(response), ["debug"]); } } // For every HTTP error status code, including those from 3xx (other Redirection codes excluding 302), 4xx (Client Error), and 5xx (Server Error) series, will trigger the following line of code. throw new OneDriveException(response.statusLine.code, response.statusLine.reason, response); } // Do we need to validate the JSON response? if (validateJSONResponse) { const code = response.statusLine.code; // 204 = No Content is a valid success response for some Graph operations (e.g. PATCH/DELETE). // In that case, there is no JSON payload to validate. if (code != 204) { // If caller expects JSON, an empty body is not acceptable if (response.content.length == 0) { throw new OneDriveException( 0, "Caller requested a JSON object response, but the response body was empty", response); } // Body is present: it must be a JSON object if (result.type() != JSONType.object) { throw new OneDriveException(0, "Caller requested a JSON object response, but the response was not a JSON object", response); } } } // If we get to this point, there is no error from http.perform() on re-try // If retryAttempts is greater than 1, it means we were re-trying the request if (retryAttempts > 1) { // unset the fresh connect option as this then creates performance issues if left enabled unsetFreshConnectOption(); } // On successful http.perform() processing, break out of the loop break; } else { // Throw a custom 506 error // Whilst this error code is a bit more esoteric and typically involves content negotiation issues that lead to a configuration error on the server, but it could be loosely // interpreted to signal that the response received didn't meet the expected criteria or format. throw new OneDriveException(506, "Received an unexpected response from Microsoft OneDrive", response); } // A 'curl' exception was thrown } catch (CurlException exception) { // Handle 'curl' exception errors // Detail the curl exception, debug output only if (debugLogging) { addLogEntry("Handling a curl exception:", ["debug"]); addLogEntry(to!string(response), ["debug"]); } // Parse and display error message received from OneDrive if (debugLogging) {addLogEntry(callingFunction ~ "() - Generated a OneDrive CurlException", ["debug"]);} auto errorArray = splitLines(exception.msg); string errorMessage = errorArray[0]; // Configure libcurl to perform a fresh connection setFreshConnectOption(); // What is contained in the curl error message? // Handle the following: // - Couldn't connect to server on handle // - Could not connect to server on handle (changed noticed in curl 8.14.1, possibly done earlier ...) // - Couldn't resolve host name on handle // - Could not resolve host name on handle (changed noticed in curl 8.14.1, possibly done earlier ...) // - Timeout was reached on handle if (canFind(errorMessage, "connect to server on handle") || canFind(errorMessage, "resolve host name on handle") || canFind(errorMessage, "resolve hostname on handle") || canFind(errorMessage, "Timeout was reached on handle")) { // Connectivity to Microsoft OneDrive was lost addLogEntry("Internet connectivity to Microsoft OneDrive service has been interrupted .. re-trying in the background"); // What caused the initial curl exception? // - DNS resolution issue if (canFind(errorMessage, "resolve host name on handle")) { if (debugLogging) {addLogEntry("Unable to resolve server - DNS access blocked?", ["debug"]);} } // - connection issue if (canFind(errorMessage, "connect to server on handle")) { if (debugLogging) {addLogEntry("Unable to connect to server - HTTPS access blocked?", ["debug"]);} } // - timeout issue if (canFind(errorMessage, "Timeout was reached on handle")) { // Common cause is libcurl trying IPv6 DNS resolution when there are only IPv4 DNS servers available if (verboseLogging) { addLogEntry("A libcurl timeout has been triggered - data transfer too slow, no DNS resolution response, no server response or operational timeout", ["verbose"]); // There are 3 common causes for this issue: // 1. Usually poor DNS resolution where libcurl flip/flops to use IPv6 and is unable to resolve // 2. A device between the user and Microsoft OneDrive is unable to correctly handle HTTP/2 communication // 3. No Internet access from this system at this point in time addLogEntry(" - IPv6 DNS resolution issues may be causing timeouts. Consider setting 'ip_protocol_version' to IPv4 to potentially avoid this", ["verbose"]); addLogEntry(" - HTTP/2 compatibility issues might also be interfering with your system. Use 'force_http_11' to switch to HTTP/1.1 to potentially avoid this", ["verbose"]); addLogEntry(" - Ensure 'operation_timeout' is configured for the conditions of your network, covering DNS lookups, connection setup, TLS negotiation, and how long data transfers normally take", ["verbose"]); addLogEntry(" - If these options do not resolve this timeout issue, please use --debug-https to diagnose this issue further.", ["verbose"]); } } } else { // Some other 'libcurl' error was returned if (canFind(errorMessage, "Problem with the SSL CA cert (path? access rights?) on handle")) { // error setting certificate verify locations: // CAfile: /etc/pki/tls/certs/ca-bundle.crt // CApath: none // // Tell the Curl Engine to bypass SSL check - essentially SSL is passing back a bad value due to 'stdio' compile time option // Further reading: // https://github.com/curl/curl/issues/6090 // https://github.com/openssl/openssl/issues/7536 // https://stackoverflow.com/questions/45829588/brew-install-fails-curl77-error-setting-certificate-verify // https://forum.dlang.org/post/vwvkbubufexgeuaxhqfl@forum.dlang.org string sslCertReadErrorMessage = "System SSL CA certificates are missing or unreadable by libcurl – please ensure the correct CA bundle is installed and is accessible."; addLogEntry("ERROR: " ~ sslCertReadErrorMessage); throw new OneDriveError(sslCertReadErrorMessage); } else { // Was this a curl initialization error? if (canFind(errorMessage, "Failed initialization on handle")) { // initialization error ... prevent a run-away process if we have zero disk space ulong localActualFreeSpace = getAvailableDiskSpace("."); if (localActualFreeSpace == 0) { throw new OneDriveError("Zero disk space detected"); } } else { // Unknown curl error displayGeneralErrorMessage(exception, callingFunction, lineno); // Fallback: Ensure retry interval is enforced in case of unknown CurlException if (thisBackOffInterval == 0) { thisBackOffInterval = calculateBackoff(retryAttempts, baseBackoffInterval, maxBackoffInterval); if (thisBackOffInterval <= 0) { thisBackOffInterval = 1; addLogEntry("WARNING: Enforcing minimum backoff interval of 1 second – unclassified CurlException"); } } } } } // A OneDrive API exception was thrown } catch (OneDriveException exception) { // https://developer.overdrive.com/docs/reference-guide // https://learn.microsoft.com/en-us/onedrive/developer/rest-api/concepts/errors?view=odsp-graph-online // https://learn.microsoft.com/en-us/graph/errors /** HTTP/1.1 Response handling Errors in the OneDrive API are returned using standard HTTP status codes, as well as a JSON error response object. The following HTTP status codes should be expected. Status code Status message Description 100 Continue Continue 200 OK Request was handled OK 201 Created This means you've made a successful POST to checkout, lock in a format, or place a hold 204 No Content This means you've made a successful DELETE to remove a hold or return a title 400 Bad Request Cannot process the request because it is malformed or incorrect. 401 Unauthorized Required authentication information is either missing or not valid for the resource. 403 Forbidden Access is denied to the requested resource. The user might not have enough permission. 404 Not Found The requested resource doesn’t exist. 405 Method Not Allowed The HTTP method in the request is not allowed on the resource. 406 Not Acceptable This service doesn’t support the format requested in the Accept header. 408 Request Time out CUSTOM ERROR - Not expected from OneDrive, but can be used to handle Internet connection failures the same (fallback and try again) 409 Conflict The current state conflicts with what the request expects. For example, the specified parent folder might not exist. 410 Gone The requested resource is no longer available at the server. 411 Length Required A Content-Length header is required on the request. 412 Precondition Failed A precondition provided in the request (such as an if-match header) does not match the resource's current state. 413 Request Entity Too Large The request size exceeds the maximum limit. 415 Unsupported Media Type The content type of the request is a format that is not supported by the service. 416 Requested Range Not Satisfiable The specified byte range is invalid or unavailable. 422 Unprocessable Entity Cannot process the request because it is semantically incorrect. 423 Locked The file is currently checked out or locked for editing by another user 429 Too Many Requests Client application has been throttled and should not attempt to repeat the request until an amount of time has elapsed. 500 Internal Server Error There was an internal server error while processing the request. 501 Not Implemented The requested feature isn’t implemented. 502 Bad Gateway The service was unreachable 503 Service Unavailable The service is temporarily unavailable. You may repeat the request after a delay. There may be a Retry-After header. 504 Gateway Timeout The server, which is acting as a gateway or proxy, did not receive a timely response from an upstream server it needed to access in order to complete the request 506 Variant Also Negotiates CUSTOM ERROR - Received an unexpected response from Microsoft OneDrive 507 Insufficient Storage The maximum storage quota has been reached. 509 Bandwidth Limit Exceeded Your app has been throttled for exceeding the maximum bandwidth cap. Your app can retry the request again after more time has elapsed. HTTP/2 Response handling 0 OK **/ // Detail the OneDriveAPI exception, debug output only if (debugLogging) { addLogEntry("Handling a OneDrive API exception:", ["debug"]); addLogEntry(to!string(response), ["debug"]); // Parse and display error message received from OneDrive addLogEntry(callingFunction ~ "() - Generated a OneDriveException", ["debug"]); } // Perform action based on the HTTP Status Code switch(exception.httpStatusCode) { // 0 - OK ... HTTP/2 version of 200 OK case 0: break; // 100 - Continue case 100: break; // 408 - Request Time Out // 429 - Too Many Requests, backoff case 408,429: // If OneDrive sends a status code 429 then this function will be used to process the Retry-After response header which contains the value by which we need to wait if (exception.httpStatusCode == 408) { addLogEntry("Handling a Microsoft Graph API HTTP 408 Response Code (Request Time Out) - Internal Thread ID: " ~ to!string(curlEngine.internalThreadId)); } else { addLogEntry("Handling a Microsoft Graph API HTTP 429 Response Code (Too Many Requests) - Internal Thread ID: " ~ to!string(curlEngine.internalThreadId)); } // Read in the Retry-After HTTP header as set and delay as per this value before retrying the request thisBackOffInterval = response.getRetryAfterValue(); if (debugLogging) {addLogEntry("Using Retry-After Value = " ~ to!string(thisBackOffInterval), ["debug"]);} transientError = true; break; // Transient errors // 503 - Service Unavailable // 504 - Gateway Timeout case 503,504: // The server, while acting as a proxy, did not receive a timely response from the upstream server it needed to access in attempting to complete the request auto errorArray = splitLines(exception.msg); addLogEntry(to!string(errorArray[0]) ~ " when attempting to query the Microsoft Graph API Service - retrying applicable request in 30 seconds - Internal Thread ID: " ~ to!string(curlEngine.internalThreadId)); if (debugLogging) {addLogEntry("Thread sleeping for 30 seconds as the server did not receive a timely response from the upstream server it needed to access in attempting to complete the request", ["debug"]);} // Transient error - try again in 30 seconds thisBackOffInterval = 30; transientError = true; break; // Default default: // This exception should be then passed back to the original calling function for handling a OneDriveException throw new OneDriveException(response.statusLine.code, response.statusLine.reason, response); } // A FileSystem exception was thrown from somewhere } catch (FileException exception) { // There was a file system error - display the error message displayFileSystemErrorMessage(exception.msg, callingFunction, ""); // as we have no file path reference here, use a blank input throw new OneDriveException(0, "There was a file system error during OneDrive request: " ~ exception.msg, response); // A OneDriveError was thrown } catch (OneDriveError exception) { // Disk space error or SSL error caused a OneDriveError to be thrown /** DO NOT UNCOMMENT THIS CODE UNLESS TESTING FOR THIS ISSUE: System SSL CA certificates are missing or unreadable by libcurl // Disk space error or SSL error if (getAvailableDiskSpace(".") == 0) { // Must exit forceExit(); } else { // Catch the SSL error addLogEntry("WARNING: Disabling SSL peer verification due to libcurl failing to access the system CA certificate bundle (CAfile missing, unreadable, or misconfigured)."); sslVerifyPeerDisabled = true; curlEngine.setDisableSSLVerifyPeer(); } **/ // Must exit forceExit(); } // Increment re-try counter retryAttempts++; // Configure libcurl to perform a fresh connection on API retry setFreshConnectOption(); // Has maxRetryCount been reached? if (retryAttempts > maxRetryCount) { addLogEntry("ERROR: Unable to reconnect to the Microsoft OneDrive service after " ~ to!string(retryAttempts) ~ " attempts lasting approximately 365 days"); throw new OneDriveException(408, "Request Timeout - HTTP 408 or Internet down?", response); } else { // Was 'thisBackOffInterval' set by a 429 event ? if (thisBackOffInterval == 0) { // Calculate and apply exponential backoff upto a maximum of 120 seconds before the API call is re-tried thisBackOffInterval = calculateBackoff(retryAttempts, baseBackoffInterval, maxBackoffInterval); // If this 'somehow' calculates a negative number, this is not correct .. and this has been seen in testing - unknown cause // // Retry attempt: 31 - Internal Thread ID: ICO4ELBlGXFwyTzh // This attempt timestamp: 2024-Aug-10 10:32:07 // Next retry in approx: -2147483648 seconds // Next retry approx: 1956-Jul-23 07:17:59 // Illegal instruction (core dumped) // // Set to 'maxBackoffInterval' if calculated value is negative if (thisBackOffInterval < 0) { thisBackOffInterval = maxBackoffInterval; } } // set the current time for this thread currentTime = Clock.currTime(); currentTime.fracSecs = Duration.zero; // If verbose logging, detail when we are re-trying the call if (verboseLogging) { auto timeString = currentTime.toString(); addLogEntry("Retry attempt: " ~ to!string(retryAttempts) ~ " - Internal Thread ID: " ~ to!string(curlEngine.internalThreadId), ["verbose"]); addLogEntry(" This attempt timestamp: " ~ timeString, ["verbose"]); // Detail when the next attempt will be tried // Factor in the delay for curl to generate the exception - otherwise the next timestamp appears to be 'out' even though technically correct auto nextRetry = currentTime + dur!"seconds"(thisBackOffInterval) + dur!"seconds"(timestampAlign); addLogEntry(" Next retry in approx: " ~ to!string((thisBackOffInterval + timestampAlign)) ~ " seconds"); addLogEntry(" Next retry approx: " ~ to!string(nextRetry), ["verbose"]); } // Thread sleep Thread.sleep(dur!"seconds"(thisBackOffInterval)); } } // Reset SSL Peer Validation if it was disabled if (sslVerifyPeerDisabled) { curlEngine.setEnableSSLVerifyPeer(); } // Return the result return result; } // Check the HTTP Response code and determine if a OneDriveException should be thrown private bool checkHttpResponseCode(int httpResponseCode) { bool shouldThrow = false; // Redirect Codes immutable acceptedRedirectCodes = [301, 302, 304, 307, 308]; // // This condition checks if the HTTP response code falls within the acceptable range for both HTTP 1.1 and HTTP 2.0. // // For HTTP 1.1: // - Any 1xx response (Informational responses, ranging from 100 to 199) // - Any 2xx response (Successful responses, ranging from 200 to 299) // - A 302 response (Temporary Redirect) // // For HTTP 2.0: // - Any 1xx response (Informational responses, ranging from 100 to 199) // - Any 2xx response (Successful responses, ranging from 200 to 299) // - A 302 response (Temporary Redirect) // - A 0 response (Interpreted as 200 OK based on empirical evidence) // // If the HTTP response code meets any of these conditions, it is considered acceptable, and no exception will be thrown. // if ((httpResponseCode >= 100 && httpResponseCode < 300) || canFind(acceptedRedirectCodes, httpResponseCode) || httpResponseCode == 0) { shouldThrow = false; } else { shouldThrow = true; } // return evaluation return shouldThrow; } // Calculates the delay for exponential backoff private int calculateBackoff(int retryAttempts, int baseInterval, int maxInterval) { int cappedAttempts = min(retryAttempts, 10); // Prevent exponent overflow int backoff = baseInterval * (1 << cappedAttempts); return min(backoff, maxInterval); } // Configure libcurl to perform a fresh connection private void setFreshConnectOption() { if (debugLogging) {addLogEntry("Configuring libcurl to use a fresh connection for re-try", ["debug"]);} curlEngine.http.handle.set(CurlOption.fresh_connect,1); // Set libcurl dns_cache_timeout timeout // https://curl.se/libcurl/c/CURLOPT_DNS_CACHE_TIMEOUT.html // https://dlang.org/library/std/net/curl/http.dns_timeout.html curlEngine.http.dnsTimeout = (dur!"seconds"(0)); } // Unset the libcurl fresh connection options and reset libcurl DNS Cache Timeout private void unsetFreshConnectOption() { if (debugLogging) {addLogEntry("Unsetting libcurl to use a fresh connection as this causes a performance impact if left enabled", ["debug"]);} curlEngine.http.handle.set(CurlOption.fresh_connect,0); // Reset libcurl dns_cache_timeout timeout // https://curl.se/libcurl/c/CURLOPT_DNS_CACHE_TIMEOUT.html // https://dlang.org/library/std/net/curl/http.dns_timeout.html curlEngine.http.dnsTimeout = (dur!"seconds"(appConfig.getValueLong("dns_timeout"))); } // Generate a HTTP 'reason' based on the HTTP 'code' private string getMicrosoftGraphStatusMessage(ushort code) { string message; switch (code) { case 200: message = "OK"; break; case 201: message = "Created"; break; case 202: message = "Accepted"; break; case 204: message = "No Content"; break; case 301: message = "Moved Permanently"; break; case 302: message = "Found"; break; case 304: message = "Not Modified"; break; case 307: message = "Temporary Redirect"; break; case 308: message = "Permanent Redirect"; break; case 400: message = "Bad Request"; break; case 401: message = "Unauthorized"; break; case 402: message = "Payment Required"; break; case 403: message = "Forbidden"; break; case 404: message = "Not Found"; break; case 405: message = "Method Not Allowed"; break; case 406: message = "Not Acceptable"; break; case 409: message = "Conflict"; break; case 410: message = "Gone"; break; case 411: message = "Length Required"; break; case 412: message = "Precondition Failed"; break; case 413: message = "Request Entity Too Large"; break; case 415: message = "Unsupported Media Type"; break; case 416: message = "Requested Range Not Satisfiable"; break; case 422: message = "Unprocessable Entity"; break; case 423: message = "Locked"; break; case 429: message = "Too Many Requests"; break; case 500: message = "Internal Server Error"; break; case 501: message = "Not Implemented"; break; case 503: message = "Service Unavailable"; break; case 504: message = "Gateway Timeout"; break; case 507: message = "Insufficient Storage"; break; case 509: message = "Bandwidth Limit Exceeded"; break; default: message = "Unknown Status Code"; break; } return message; } }onedrive-2.5.10/src/qxor.d000066400000000000000000000044071513710110600153370ustar00rootroot00000000000000// What is this module called? module qxor; // What does this module require to function? import std.algorithm; import std.digest; // Implementation of the QuickXorHash algorithm in D // https://github.com/OneDrive/onedrive-api-docs/blob/live/docs/code-snippets/quickxorhash.md struct QuickXor { private enum int widthInBits = 160; private enum size_t lengthInBytes = (widthInBits - 1) / 8 + 1; private enum size_t lengthInQWords = (widthInBits - 1) / 64 + 1; private enum int bitsInLastCell = widthInBits % 64; // 32 private enum int shift = 11; private ulong[lengthInQWords] _data; private ulong _lengthSoFar; private int _shiftSoFar; nothrow @safe void put(scope const(ubyte)[] array...) { int vectorArrayIndex = _shiftSoFar / 64; int vectorOffset = _shiftSoFar % 64; immutable size_t iterations = min(array.length, widthInBits); for (size_t i = 0; i < iterations; i++) { immutable bool isLastCell = vectorArrayIndex == _data.length - 1; immutable int bitsInVectorCell = isLastCell ? bitsInLastCell : 64; if (vectorOffset <= bitsInVectorCell - 8) { for (size_t j = i; j < array.length; j += widthInBits) { _data[vectorArrayIndex] ^= cast(ulong) array[j] << vectorOffset; } } else { int index1 = vectorArrayIndex; int index2 = isLastCell ? 0 : (vectorArrayIndex + 1); ubyte low = cast(ubyte) (bitsInVectorCell - vectorOffset); ubyte xoredByte = 0; for (size_t j = i; j < array.length; j += widthInBits) { xoredByte ^= array[j]; } _data[index1] ^= cast(ulong) xoredByte << vectorOffset; _data[index2] ^= cast(ulong) xoredByte >> low; } vectorOffset += shift; if (vectorOffset >= bitsInVectorCell) { vectorArrayIndex = isLastCell ? 0 : vectorArrayIndex + 1; vectorOffset -= bitsInVectorCell; } } _shiftSoFar = cast(int) (_shiftSoFar + shift * (array.length % widthInBits)) % widthInBits; _lengthSoFar += array.length; } nothrow @safe void start() { _data = _data.init; _shiftSoFar = 0; _lengthSoFar = 0; } nothrow @trusted ubyte[lengthInBytes] finish() { ubyte[lengthInBytes] tmp; tmp[0 .. lengthInBytes] = (cast(ubyte*) _data)[0 .. lengthInBytes]; for (size_t i = 0; i < 8; i++) { tmp[lengthInBytes - 8 + i] ^= (cast(ubyte*) &_lengthSoFar)[i]; } return tmp; } }onedrive-2.5.10/src/socketio.d000066400000000000000000000516571513710110600161770ustar00rootroot00000000000000// What is this module called? module socketio; // What does this module require to function? import core.atomic : atomicLoad, atomicStore; import core.thread : Thread; import core.time : Duration, dur; import std.concurrency : spawn, Tid, thisTid, send, receiveTimeout; import std.conv : to; import std.datetime : SysTime, Clock, UTC; import std.exception : collectException; import std.json : JSONValue, JSONType, parseJSON; import std.net.curl : CurlException; import std.socket : SocketException; import std.string : indexOf; // What other modules that we have created do we need to import? import log; import util; import config; import curlWebsockets; // ========== Logging Shim ========== private void logSocketIOOutput(string s) { if (debugLogging) { addLogEntry("SOCKETIO: " ~ s, ["debug"]); } } final class OneDriveSocketIo { private Tid parentTid; private ApplicationConfig appConfig; private bool started = false; private Duration renewEarly = dur!"seconds"(120); private string engineSid; private bool expiryWarned = false; private bool renewRequested = false; private string currentNotifUrl; // Worker / state private Tid controllerTid; // main/control thread to notify when the worker exits private Tid workerTid; private shared bool pleaseStop = false; private long pingIntervalMs = 25000; private long pingTimeoutMs = 60000; private bool namespaceOpened = false; private CurlWebSocket ws; private shared bool workerExited = false; // set true by run() on clean exit public: this(Tid parentTid, ApplicationConfig appConfig) { this.parentTid = parentTid; this.appConfig = appConfig; } ~this() { logSocketIOOutput("Signalling to stop a OneDriveSocketIo instance"); stop(); // sets pleaseStop + waits for workerExited if (atomicLoad(workerExited)) { if (ws !is null) { logSocketIOOutput("Attempting to destroy libcurl RFC6455 WebSocket client cleanly"); // Worker has exited; safe to close/cleanup/destroy collectException(ws.close(1000, "client stop")); collectException(ws.cleanupCurlHandle()); logSocketIOOutput("Cleaned up an instance of a CurlWebSocket object via cleanupCurlHandle()"); object.destroy(ws); ws = null; logSocketIOOutput("Destroyed libcurl RFC6455 WebSocket client cleanly"); } } else { // Worker still running; DO NOT touch ws/curl from this thread. logSocketIOOutput("Worker still running; skipping ws destruction to avoid race."); } } void start() { if (started) return; // Get current WebSocket Notification URL currentNotifUrl = appConfig.websocketNotificationUrl; // Reset cooperative flags pleaseStop = false; atomicStore(workerExited, false); // Set Flag started = true; // Spawn worker thread workerTid = spawn(&run, cast(shared) this); } void stop() { if (!started) return; // Ask the worker to stop cooperatively pleaseStop = true; logSocketIOOutput("Flagged to stop WebSocket monitoring of Microsoft Graph API changes."); // Wait up to ~6 seconds for the worker to finish cleanup. // No mailbox usage here to avoid nested receiveTimeout on FreeBSD. enum int totalWaitMs = 6000; enum int stepMs = 100; int waited = 0; while (!atomicLoad(workerExited) && waited < totalWaitMs) { Thread.sleep(dur!"msecs"(stepMs)); waited += stepMs; } // Mark not started only after we know we've requested stop started = false; if (!atomicLoad(workerExited)) { // We asked nicely but didn’t get an ack within the window; continue shutdown anyway. // Keeps behaviour safe; avoids hanging the main shutdown path logSocketIOOutput("Worker stop acknowledgement not received within timeout; continuing shutdown."); } } Duration getNextExpirationCheckDuration() { if (appConfig.websocketUrlExpiry.length == 0) return dur!"seconds"(5); SysTime expiry; auto err = collectException(expiry = SysTime.fromISOExtString(appConfig.websocketUrlExpiry)); if (err !is null) return dur!"seconds"(5); auto now = Clock.currTime(UTC()); if (expiry <= now) return dur!"seconds"(5); auto delta = expiry - now; if (delta > renewEarly) delta -= renewEarly; return (delta > Duration.zero) ? delta : dur!"seconds"(5); } private: // Main function that listens and sends events static void run(shared OneDriveSocketIo _this) { logSocketIOOutput("run() entered"); auto self = cast(OneDriveSocketIo) _this; // Capped exponential backoff: 1s, 2s, 4s, ... up to 60s int backoffSeconds = 1; const int maxBackoffSeconds = 60; bool online; scope(exit) { // Signal that the worker is fully done (visible across threads) atomicStore(self.workerExited, true); // Log that we are exiting the run() function logSocketIOOutput("run() exiting"); } while (!self.pleaseStop) { // Catch network exceptions at the socketio-loop level and treat them as recoverable try { // If we're offline (or OneDrive service not reachable), don't bother trying yet logSocketIOOutput("Testing network to ensure network connectivity to Microsoft OneDrive Service"); online = testInternetReachability(self.appConfig, false); // Will display failures, but nothing if successful .. a quiet check of sorts. if (!online) { logSocketIOOutput("Network or OneDrive service not reachable; delaying reconnect"); logSocketIOOutput("Backoff " ~ to!string(backoffSeconds) ~ "s before retry"); Thread.sleep(dur!"seconds"(backoffSeconds)); if (backoffSeconds < maxBackoffSeconds) backoffSeconds *= 2; continue; } else { // We are 'online' // Build Socket.IO WS URL from notificationUrl string notif = self.appConfig.websocketNotificationUrl; if (notif.length == 0) { logSocketIOOutput("No notificationUrl available; will retry"); logSocketIOOutput("Backoff " ~ to!string(backoffSeconds) ~ "s before retry"); Thread.sleep(dur!"seconds"(backoffSeconds)); if (backoffSeconds < maxBackoffSeconds) backoffSeconds *= 2; continue; } self.currentNotifUrl = notif; string wsUrl = toSocketIoWsUrl(notif); // Fresh WS instance per attempt self.ws = new CurlWebSocket(); // Use application configuration values self.ws.setUserAgent(self.appConfig.getValueString("user_agent")); self.ws.setHTTPSDebug(self.appConfig.getValueBool("debug_https")); self.ws.setTimeouts(10000, 15000); // Connect to Microsoft Graph API using WebSockets and Socket.IO v4 logSocketIOOutput("Connecting to " ~ wsUrl); auto rc = self.ws.connect(wsUrl); if (rc != 0) { logSocketIOOutput("self.ws.connect failed; will retry"); collectException(self.ws.close(1002, "connect-failed")); Thread.sleep(dur!"seconds"(backoffSeconds)); if (backoffSeconds < maxBackoffSeconds) backoffSeconds *= 2; continue; } // Socket.IO handshake: wait for '0{json}' if (!awaitEngineOpen(self.ws, self)) { logSocketIOOutput("Socket.IO open handshake failed; will retry"); collectException(self.ws.close(1002, "handshake-failed")); Thread.sleep(dur!"seconds"(backoffSeconds)); if (backoffSeconds < maxBackoffSeconds) backoffSeconds *= 2; continue; } // Open default namespace: send "40" logSocketIOOutput("Sending Socket.IO connect (40) to default namespace"); if (self.ws.sendText("40") != 0) { logSocketIOOutput("Failed to send 40 (open namespace); will retry"); collectException(self.ws.close(1002, "ns40-failed")); Thread.sleep(dur!"seconds"(backoffSeconds)); if (backoffSeconds < maxBackoffSeconds) backoffSeconds *= 2; continue; } else { logSocketIOOutput("Sent Socket.IO connect '40' for namespace '/'"); } // Open 'notifications' namespace: send "40/notifications" logSocketIOOutput("Sending Socket.IO connect (40) to '/notifications' namespace"); if (self.ws.sendText("40/notifications") != 0) { logSocketIOOutput("Failed to send 40 for '/notifications' namespace; will retry"); collectException(self.ws.close(1002, "ns40-failed")); Thread.sleep(dur!"seconds"(backoffSeconds)); if (backoffSeconds < maxBackoffSeconds) backoffSeconds *= 2; continue; } else { logSocketIOOutput("Sent Socket.IO connect '40' for namespace '/notifications'"); } // Connected successfully → reset backoff backoffSeconds = 1; // Reset per-connection flags so renew logic and ns-open tracking work after reconnection self.expiryWarned = false; self.renewRequested = false; self.namespaceOpened = false; // Track last server ping received to detect a dead connection SysTime lastPingAt = Clock.currTime(UTC()); // Listen for Socket.IO Events for (;;) { // Stop request if (self.pleaseStop) { logSocketIOOutput("Stop requested; shutting down run() loop"); collectException(self.ws.close(1000, "stop-requested")); collectException(self.ws.cleanupCurlHandle()); logSocketIOOutput("Cleaned up an instance of a CurlWebSocket object via cleanupCurlHandle()"); return; } // Subscription nearing expiry? (informational; renewal happens elsewhere) if (!self.expiryWarned && self.appConfig.websocketUrlExpiry.length > 0) { SysTime expiry; auto e = collectException(expiry = SysTime.fromISOExtString(self.appConfig.websocketUrlExpiry)); if (e is null) { auto remain = expiry - Clock.currTime(UTC()); if (remain <= dur!"minutes"(5)) { self.expiryWarned = true; // emit only once logSocketIOOutput("subscription nearing expiry; renewal required soon"); } } } // Renewal window check (emit once; 2 minutes before) if (!self.renewRequested && self.appConfig.websocketUrlExpiry.length > 0) { SysTime expiry; auto e = collectException(expiry = SysTime.fromISOExtString(self.appConfig.websocketUrlExpiry)); if (e is null) { auto remain = expiry - Clock.currTime(UTC()); if (remain <= dur!"minutes"(2)) { self.renewRequested = true; logSocketIOOutput("Subscription nearing expiry; requesting renewal from main() monitor loop"); send(self.parentTid, "SOCKETIO_RENEWAL_REQUEST"); send(self.parentTid, "SOCKETIO_RENEWAL_CONTEXT:" ~ "id=" ~ self.appConfig.websocketEndpointResponse ~ " url=" ~ self.appConfig.websocketNotificationUrl); } } } // If we haven't seen a server ping within pingInterval + pingTimeout → treat as dead link auto now = Clock.currTime(UTC()); auto maxSilence = dur!"msecs"(self.pingIntervalMs + self.pingTimeoutMs); if (now - lastPingAt > maxSilence) { logSocketIOOutput("No server ping within expected window; restarting WebSocket"); break; // fall out to backoff/retry } // Reconnect to a new endpoint if main updated websocketNotificationUrl if (self.appConfig.websocketNotificationUrl.length > 0 && self.appConfig.websocketNotificationUrl != self.currentNotifUrl) { logSocketIOOutput("Detected new notificationUrl; reconnecting"); collectException(self.ws.close(1000, "reconnect")); collectException(self.ws.cleanupCurlHandle()); logSocketIOOutput("Cleaned up an instance of a CurlWebSocket object via cleanupCurlHandle()"); // Establish a fresh connection and handshakes self.currentNotifUrl = self.appConfig.websocketNotificationUrl; string newWsUrl = toSocketIoWsUrl(self.currentNotifUrl); self.ws = new CurlWebSocket(); self.ws.setUserAgent(self.appConfig.getValueString("user_agent")); self.ws.setTimeouts(10000, 15000); self.ws.setHTTPSDebug(self.appConfig.getValueBool("debug_https")); auto rc2 = self.ws.connect(newWsUrl); if (rc2 != 0) { logSocketIOOutput("reconnect failed"); break; // fall out to backoff/retry } if (!awaitEngineOpen(self.ws, self)) { logSocketIOOutput("Socket.IO open after reconnect failed"); break; // fall out to backoff/retry } // Open default namespace again logSocketIOOutput("Sending Socket.IO connect (40) to default namespace"); if (self.ws.sendText("40") != 0) { logSocketIOOutput("Failed to send 40 (open namespace)"); break; // fall out to backoff/retry } else { logSocketIOOutput("Sent Socket.IO connect '40' for namespace '/'"); } // Open '/notifications' again (best-effort) logSocketIOOutput("Sending Socket.IO connect (40) to '/notifications' namespace"); if (self.ws.sendText("40/notifications") != 0) { logSocketIOOutput("Failed to send 40 for '/notifications' namespace"); break; // fall out to backoff/retry } else { logSocketIOOutput("Sent Socket.IO connect '40' for namespace '/notifications'"); } // Reset ping reference after a clean reconnect lastPingAt = Clock.currTime(UTC()); } // Receive message auto msg = self.ws.recvText(); if (msg.length == 0) { Thread.sleep(dur!"msecs"(20)); continue; } // Socket.IO parsing if (msg.length > 0 && msg[0] == '2') { // Server ping -> immediate pong, and mark last ping time if (self.ws.sendText("3") != 0) { logSocketIOOutput("Failed sending Socket.IO pong '3'"); break; // fall out to backoff/retry } else { lastPingAt = Clock.currTime(UTC()); logSocketIOOutput("Socket.IO ping received, → pong sent"); } continue; } if (msg.length > 0 && msg[0] == '3') { continue; } else if (msg.length > 1 && msg[0] == '4' && msg[1] == '2') { logSocketIOOutput("Received 42 msg = " ~ to!string(msg)); handleSocketIoEvent(msg, self); continue; } else if (msg.length > 1 && msg[0] == '4' && msg[1] == '0') { logSocketIOOutput("Received 40 msg = " ~ to!string(msg)); // 40{"sid":...} or 40/notifications,{...} size_t i = 3; while (i < msg.length && msg[i] != ',') i++; auto ns = msg[3 .. i]; if (ns == "notifications") { logSocketIOOutput("Namespace '/notifications' opened; listening for Socket.IO events via WebSocket Transport"); } else { logSocketIOOutput("Namespace '/' opened; listening for Socket.IO events via WebSocket Transport"); } self.namespaceOpened = true; continue; } else if (msg.length > 1 && msg[0] == '4' && msg[1] == '1') { logSocketIOOutput("got 41 (disconnect)"); break; // fall out to backoff/retry } else if (msg.length > 0 && msg[0] == '0') { parseEngineOpenFromPacket(msg, self); continue; } else { logSocketIOOutput("Received Unhandled Message: " ~ msg); } } // Fell out of the inner loop → close and backoff, then retry logSocketIOOutput("Retrying WebSocket Connection"); collectException(self.ws.close(1001, "reconnect")); logSocketIOOutput("Backoff " ~ to!string(backoffSeconds) ~ "s before retry"); Thread.sleep(dur!"seconds"(backoffSeconds)); if (backoffSeconds < maxBackoffSeconds) backoffSeconds *= 2; } } catch (CurlException e) { // Caught a CurlException addLogEntry("Network error during socketio loop: " ~ e.msg ~ " (will retry)"); Thread.sleep(dur!"seconds"(5)); } catch (SocketException e) { // Caught a SocketException addLogEntry("Socket error during socketio loop: " ~ e.msg ~ " (will retry)"); Thread.sleep(dur!"seconds"(5)); } catch (Exception e) { // Caught some other error addLogEntry("Unexpected error during socketio loop: " ~ e.toString()); Thread.sleep(dur!"seconds"(5)); } } } // Convert the notificationURL into a usable WebSocket URL static string toSocketIoWsUrl(string notificationUrl) { // input: https://host/notifications?token=...&applicationId=... // output: wss://host/socket.io/?EIO=4&transport=websocket&token=...&applicationId=... logSocketIOOutput("toSocketIoWsUrl input: " ~ notificationUrl); size_t schemePos = notificationUrl.length; { auto pos = cast(ptrdiff_t) -1; // manual indexOf("://") without std.string for (size_t i = 0; i + 2 < notificationUrl.length; ++i) { if (notificationUrl[i] == ':' && notificationUrl[i+1] == '/' && notificationUrl[i+2] == '/') { pos = cast(ptrdiff_t)i; break; } } if (pos >= 0) schemePos = cast(size_t)pos; } string hostAndAfter; if (schemePos < notificationUrl.length) { hostAndAfter = notificationUrl[(schemePos + 3) .. notificationUrl.length]; } else { hostAndAfter = notificationUrl; } size_t slash = hostAndAfter.length; foreach (i; 0 .. hostAndAfter.length) { if (hostAndAfter[i] == '/') { slash = i; break; } } string host = (slash < hostAndAfter.length) ? hostAndAfter[0 .. slash] : hostAndAfter; string query = ""; if (slash < hostAndAfter.length) { auto rest = hostAndAfter[slash .. hostAndAfter.length]; size_t qpos = rest.length; foreach (i; 0 .. rest.length) { if (rest[i] == '?') { qpos = i; break; } } if (qpos < rest.length) query = rest[(qpos + 1) .. rest.length]; } string outUrl = "wss://" ~ host ~ "/socket.io/?EIO=4&transport=websocket"; if (query.length > 0) outUrl ~= "&" ~ query; logSocketIOOutput("toSocketIoWsUrl output: " ~ outUrl); return outUrl; } // Wait for Socket.IO to open static bool awaitEngineOpen(curlWebsockets.CurlWebSocket ws, OneDriveSocketIo self) { SysTime deadline = Clock.currTime(UTC()) + dur!"seconds"(10); for (;;) { if (Clock.currTime(UTC()) >= deadline) return false; auto msg = ws.recvText(); if (msg.length == 0) { Thread.sleep(dur!"msecs"(25)); continue; } if (msg.length > 0 && msg[0] == '0') { return parseEngineOpenFromPacket(msg, self); } if (msg.length > 1 && msg[0] == '4' && msg[1] == '0') { self.namespaceOpened = true; return true; } logSocketIOOutput("Pre-open RX: " ~ msg); } } // Parse Socket.IO response static bool parseEngineOpenFromPacket(string packet, OneDriveSocketIo self) { // packet = "0{...json...}" if (packet.length < 2) return false; auto jsonPart = packet[1 .. packet.length]; JSONValue j; auto err = collectException(j = parseJSON(jsonPart)); if (err !is null) { logSocketIOOutput("Failed to parse Socket.IO open JSON"); return false; } if (j.type == JSONType.object) { // sid if ("sid" in j.object) { auto vsid = j["sid"]; if (vsid.type == JSONType.string) { self.engineSid = vsid.str; } } // pingInterval if ("pingInterval" in j.object) { auto v = j["pingInterval"]; if (v.type == JSONType.integer) { self.pingIntervalMs = v.integer; } } // pingTimeout if ("pingTimeout" in j.object) { auto v2 = j["pingTimeout"]; if (v2.type == JSONType.integer) { self.pingTimeoutMs = v2.integer; } } } // Log that we have opened a connection and have a valid SID logSocketIOOutput("Engine open; sid=" ~ self.engineSid ~ " pingInterval=" ~ self.pingIntervalMs.to!string ~ "ms" ~ " pingTimeout=" ~ self.pingTimeoutMs.to!string ~ "ms"); return true; } // Handle Socket.IO Events static void handleSocketIoEvent(string msg, OneDriveSocketIo self) { // Accept both: 42[...] // and: 42/,[...] size_t i = 2; string ns = "/"; // Optional namespace: 42/notifications,[...] if (i < msg.length && msg[i] == '/') { size_t j = i + 1; while (j < msg.length && msg[j] != ',') j++; if (j >= msg.length) { logSocketIOOutput("42 frame (malformed namespace): " ~ msg); return; } ns = msg[(i + 1) .. j]; i = j + 1; // payload starts after comma } if (i >= msg.length || msg[i] != '[') { logSocketIOOutput("42 frame (unexpected payload start): ns='/" ~ ns ~ "' raw=" ~ msg); return; } JSONValue arr; auto ex = collectException(arr = parseJSON(msg[i .. $])); if (ex !is null || arr.type != JSONType.array || arr.array.length == 0) { logSocketIOOutput("42 frame (unparsed): ns='/" ~ ns ~ "' raw=" ~ msg); return; } auto evNameVal = arr.array[0]; if (evNameVal.type != JSONType.string) { logSocketIOOutput("42 frame (no string event name): ns='/" ~ ns ~ "' raw=" ~ msg); return; } string evName = evNameVal.str; // 2nd element may be a JSON string containing the real JSON string dataText = "null"; if (arr.array.length > 1) { auto d = arr.array[1]; if (d.type == JSONType.string) { JSONValue inner; auto ex2 = collectException(inner = parseJSON(d.str)); if (ex2 is null) { dataText = inner.toString(); // normalized JSON } else { dataText = d.str; // raw string if not JSON } } else { dataText = d.toString(); } } if (evName == "notification") { logSocketIOOutput("Notification Event (ns='/" ~ ns ~ "') -> " ~ dataText); // Signal main() monitor loop exactly like webhook does collectException(send(self.parentTid, cast(ulong)1)); } else { // Visibility in case the service uses other event names logSocketIOOutput("Event '" ~ evName ~ "' (ns='/" ~ ns ~ "') -> " ~ dataText); } } } onedrive-2.5.10/src/sqlite.d000066400000000000000000000216121513710110600156440ustar00rootroot00000000000000// What is this module called? module sqlite; // What does this module require to function? import std.stdio; import etc.c.sqlite3; import std.string: fromStringz, toStringz; import core.stdc.stdlib; import std.conv; import std.format; import std.file; // What other modules that we have created do we need to import? import log; import util; extern (C) immutable(char)* sqlite3_errstr(int); // missing from the std library // Callback function to check if table exists extern (C) int tableExistsCallback(void* data, int argc, char** argv, char** colNames) { // Set `tableExists` to 1 if at least one row is returned int* tableExists = cast(int*) data; *tableExists = 1; return 0; // Continue processing } static this() { if (sqlite3_libversion_number() < 3006019) { throw new SqliteException(-1, "SQLite 3.6.19 or newer is required"); } } private string ifromStringz(const(char)* cstr) { return fromStringz(cstr).idup; } class SqliteException: Exception { int errorCode; // Add an errorCode member to store the SQLite error code @safe pure nothrow this(int errorCode, string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null) { super(msg, file, line, next); this.errorCode = errorCode; // Set the errorCode } @safe pure nothrow this(int errorCode, string msg, Throwable next, string file = __FILE__, size_t line = __LINE__) { super(msg, file, line, next); this.errorCode = errorCode; // Set the errorCode } } struct Database { private sqlite3* pDb; this(const(char)[] filename) { open(filename); } ~this() { close(); } int db_checkpoint() { return sqlite3_wal_checkpoint(pDb, null); } // Dump open statements void dump_open_statements() { if (debugLogging) {addLogEntry("Dumping open SQL statements:", ["debug"]);} auto p = sqlite3_next_stmt(pDb, null); while (p != null) { if (debugLogging) {addLogEntry(" Still Open: " ~ to!string(ifromStringz(sqlite3_sql(p))), ["debug"]);} p = sqlite3_next_stmt(pDb, p); } } // Close open statements void close_open_statements() { if (debugLogging) {addLogEntry("Closing open SQL statements:", ["debug"]);} auto p = sqlite3_next_stmt(pDb, null); while (p != null) { // The sqlite3_finalize() function is called to delete a prepared statement sqlite3_finalize(p); addLogEntry(" Finalised: " ~ to!string(ifromStringz(sqlite3_sql(p)))); p = sqlite3_next_stmt(pDb, p); } } // Count open statements int count_open_statements() { if (debugLogging) {addLogEntry("Counting open SQL statements", ["debug"]);} int openStatementCount = 0; auto p = sqlite3_next_stmt(pDb, null); while (p != null) { openStatementCount++; p = sqlite3_next_stmt(pDb, p); } return openStatementCount; } // Check DB Status void checkStatus() { int rc = sqlite3_errcode(pDb); if (rc != SQLITE_OK) { throw new SqliteException(rc, getErrorMessage()); } } // Open the database file void open(const(char)[] filename) { // https://www.sqlite.org/c3ref/open.html // Safest multithreaded way to open the database // Does the file we need to open actually exist? if (exists(filename)) { if (debugLogging) {addLogEntry("Database file EXISTS on disk", ["debug"]);} } else { if (debugLogging) {addLogEntry("Database file DOES NOT EXIST on disk", ["debug"]);} } int rc = sqlite3_open_v2( toStringz(filename), /* Database filename (UTF-8) */ &pDb, /* OUT: SQLite db handle */ SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX, /* Flags */ null /* Optional: Name of the VFS module to use */ ); if (rc != SQLITE_OK) { string errorMsg; if (rc == SQLITE_CANTOPEN) { // Database cannot be opened errorMsg = "The database cannot be opened. Please check the permissions of " ~ to!string(filename); } else { // Some other error errorMsg = "A database access error occurred: " ~ getErrorMessage(); } // Log why we could not open the database file addLogEntry(); addLogEntry(errorMsg); addLogEntry(); close(); throw new SqliteException(rc, getErrorMessage()); } // Opened database file OK // Flag to always use extended result codes for errors sqlite3_extended_result_codes(pDb, 1); } void exec(const(char)[] sql) { // https://www.sqlite.org/c3ref/exec.html if (pDb !is null) { int rc = sqlite3_exec(pDb, toStringz(sql), null, null, null); if (rc != SQLITE_OK) { // Get error message and print it, then exit string errorMessage = getErrorMessage(); close(); // Throw sqlite error throw new SqliteException(rc, errorMessage); } } } // Check if the table exists before dropping it void dropTableIfExists(const(char)[] tableName) { string checkTableQuery = "SELECT name FROM sqlite_master WHERE type='table' AND name='" ~ to!string(tableName) ~ "';"; int tableExists = 0; // Execute query with callback to check if table exists int rc = sqlite3_exec(pDb, toStringz(checkTableQuery), &tableExistsCallback, &tableExists, null); // Only proceed if the query executed successfully if (rc == SQLITE_OK) { // If the table exists, drop it if (tableExists == 1) { exec("DROP TABLE " ~ tableName); } else { // Optionally log that the table does not exist addLogEntry(format("WARNING: Table '%s' does not exist, skipping table drop.", to!string(tableName))); } } else { // Log or handle the error if `sqlite3_exec` fails addLogEntry(format("ERROR: Failed to execute table existence check for '%s'.", to!string(tableName))); } } // Get DB Version int getVersion() { int userVersion; extern (C) int callback(void* user_version, int count, char** column_text, char** column_name) { import core.stdc.stdlib: atoi; *(cast(int*) user_version) = atoi(*column_text); return 0; } int rc = sqlite3_exec(pDb, "PRAGMA user_version", &callback, &userVersion, null); if (rc != SQLITE_OK) { throw new SqliteException(rc, getErrorMessage()); } return userVersion; } // Get the threadsafe value int getThreadsafeValue() { return sqlite3_threadsafe(); } // Get sqlite error message string getErrorMessage() { return ifromStringz(sqlite3_errmsg(pDb)); } void setVersion(int userVersion) { exec("PRAGMA user_version=" ~ to!string(userVersion)); } Statement prepare(const(char)[] zSql) { Statement s; // https://www.sqlite.org/c3ref/prepare.html if (pDb !is null) { int rc = sqlite3_prepare_v2(pDb, zSql.ptr, cast(int) zSql.length, &s.pStmt, null); if (rc != SQLITE_OK) { throw new SqliteException(rc, getErrorMessage()); } } return s; } void close() { // https://www.sqlite.org/c3ref/close.html if (pDb !is null) { sqlite3_close_v2(pDb); pDb = null; } } } struct Statement { struct Result { private sqlite3_stmt* pStmt; private const(char)[][] row; private this(sqlite3_stmt* pStmt) { this.pStmt = pStmt; step(); // initialize the range } @property bool empty() { return row.length == 0; } @property auto front() { return row; } alias step popFront; void step() { // https://www.sqlite.org/c3ref/step.html int rc = sqlite3_step(pStmt); if (rc == SQLITE_BUSY) { // Database is locked by another onedrive process addLogEntry("The database is currently locked by another process - cannot sync"); return; } if (rc == SQLITE_DONE) { row.length = 0; } else if (rc == SQLITE_ROW) { // https://www.sqlite.org/c3ref/data_count.html int count = 0; count = sqlite3_data_count(pStmt); row = new const(char)[][count]; foreach (size_t i, ref column; row) { // https://www.sqlite.org/c3ref/column_blob.html column = fromStringz(sqlite3_column_text(pStmt, to!int(i))); } } else { string errorMessage = getErrorMessage(); // Must force exit here, allow logging to be done throw new SqliteException(rc, errorMessage); } } string getErrorMessage() { return ifromStringz(sqlite3_errmsg(sqlite3_db_handle(pStmt))); } } private sqlite3_stmt* pStmt; ~this() { // Finalise any prepared statement finalise(); } // https://www.sqlite.org/c3ref/finalize.html void finalise() { if (pStmt !is null) { // The sqlite3_finalize() function is called to delete a prepared statement sqlite3_finalize(pStmt); pStmt = null; } } void bind(int index, const(char)[] value) { reset(); // https://www.sqlite.org/c3ref/bind_blob.html int rc = sqlite3_bind_text(pStmt, index, value.ptr, cast(int) value.length, SQLITE_STATIC); if (rc != SQLITE_OK) { throw new SqliteException(rc, getErrorMessage()); } } Result exec() { reset(); return Result(pStmt); } private void reset() { // https://www.sqlite.org/c3ref/reset.html int rc = sqlite3_reset(pStmt); if (rc != SQLITE_OK) { throw new SqliteException(rc, getErrorMessage()); } } string getErrorMessage() { return ifromStringz(sqlite3_errmsg(sqlite3_db_handle(pStmt))); } }onedrive-2.5.10/src/sync.d000066400000000000000000025705561513710110600153410ustar00rootroot00000000000000// What is this module called? module syncEngine; // What does this module require to function? import core.memory; import core.stdc.stdlib: EXIT_SUCCESS, EXIT_FAILURE, exit; import core.thread; import core.time; import std.algorithm; import std.array; import std.concurrency; import std.container.rbtree; import std.conv; import std.datetime; import std.encoding; import std.exception; import std.file; import std.json; import std.parallelism; import std.path; import std.range; import std.regex; import std.stdio; import std.string; import std.uni; import std.uri; import std.utf; import std.math; import std.typecons; // What other modules that we have created do we need to import? import config; import log; import util; import onedrive; import itemdb; import clientSideFiltering; import xattr; class JsonResponseException: Exception { @safe pure this(string inputMessage) { string msg = format(inputMessage); super(msg); } } class PosixException: Exception { @safe pure this(string localTargetName, string remoteTargetName) { string msg = format("POSIX 'case-insensitive match' between '%s' (local) and '%s' (online) which violates the Microsoft OneDrive API namespace convention", localTargetName, remoteTargetName); super(msg); } } class AccountDetailsException: Exception { @safe pure this() { string msg = format("Unable to query OneDrive API to obtain required account details"); super(msg); } } class SyncException: Exception { @nogc @safe pure nothrow this(string msg, string file = __FILE__, size_t line = __LINE__) { super(msg, file, line); } } struct DriveDetailsCache { // - driveId is the drive for the operations were items need to be stored // - quotaRestricted details a bool value as to if that drive is restricting our ability to understand if there is space available. Some 'Business' and 'SharePoint' restrict, and most (if not all) shared folders it cant be determined if there is free space // - quotaAvailable is a long value that stores the value of what the current free space is available online string driveId; bool quotaRestricted; bool quotaAvailable; long quotaRemaining; } struct DeltaLinkDetails { string driveId; string itemId; string latestDeltaLink; } struct DatabaseItemsToDeleteOnline { Item dbItem; string localFilePath; } class SyncEngine { // Class Variables ApplicationConfig appConfig; ItemDatabase itemDB; ClientSideFiltering selectiveSync; // Array of directory databaseItem.id to skip while applying the changes. // These are the 'parent path' id's that are being excluded, so if the parent id is in here, the child needs to be skipped as well RedBlackTree!string skippedItems = redBlackTree!string(); // Array consisting of 'item.driveId', 'item.id' and 'item.parentId' values to delete after all the online changes have been downloaded string[3][] idsToDelete; // Array of JSON items which are files or directories that are not 'root', skipped or to be deleted, that need to be processed JSONValue[] jsonItemsToProcess; // Array of JSON items which are files that are not 'root', skipped or to be deleted, that need to be downloaded JSONValue[] fileJSONItemsToDownload; // Array of paths that failed to download string[] fileDownloadFailures; // Associative array mapping of all OneDrive driveId's that have been seen, mapped with DriveDetailsCache data for reference DriveDetailsCache[string] onlineDriveDetails; // List of items we fake created when using --dry-run string[2][] idsFaked; // List of paths we fake deleted when using --dry-run string[] pathFakeDeletedArray; // Array of database Parent Item ID, Item ID & Local Path where the content has changed and needs to be uploaded string[3][] databaseItemsWhereContentHasChanged; // Array of local file paths that need to be uploaded as new items to OneDrive string[] newLocalFilesToUploadToOneDrive; // Array of local file paths that failed to be uploaded to OneDrive string[] fileUploadFailures; // List of path names changed online, but not changed locally when using --dry-run string[] pathsRenamed; // List of paths that were a POSIX case-insensitive match, thus could not be created online string[] posixViolationPaths; // List of local paths, that, when using the OneDrive Business Shared Folders feature, then disabling it, folder still exists locally and online // This list of local paths need to be skipped string[] businessSharedFoldersOnlineToSkip; // List of interrupted uploads session files that need to be resumed string[] interruptedUploadsSessionFiles; // List of interrupted downloads that need to be resumed string[] interruptedDownloadFiles; // List of validated interrupted uploads session JSON items to resume JSONValue[] jsonItemsToResumeUpload; // List of validated interrupted download JSON items to resume JSONValue[] jsonItemsToResumeDownload; // This list of local paths that need to be created online string[] pathsToCreateOnline; // Array of items from the database that have been deleted locally, that needs to be deleted online DatabaseItemsToDeleteOnline[] databaseItemsToDeleteOnline; // Array of parentId's that have been skipped via 'sync_list' string[] syncListSkippedParentIds; // Array of Microsoft OneNote Notebook Package ID's string[] onenotePackageIdentifiers; // Flag that there were upload or download failures listed bool syncFailures = false; // Is sync_list configured bool syncListConfigured = false; // Was --dry-run used? bool dryRun = false; // Was --upload-only used? bool uploadOnly = false; // Was --remove-source-files used? // Flag to set whether the local file should be deleted once it is successfully uploaded to OneDrive bool localDeleteAfterUpload = false; // Do we configure to disable the download validation routine due to --disable-download-validation // We will always validate our downloads // However, when downloading files from SharePoint, the OneDrive API will not advise the correct file size // which means that the application thinks the file download has failed as the size is different / hash is different // See: https://github.com/abraunegg/onedrive/discussions/1667 bool disableDownloadValidation = false; // Do we configure to disable the upload validation routine due to --disable-upload-validation // We will always validate our uploads // However, when uploading a file that can contain metadata SharePoint will associate some // metadata from the library the file is uploaded to directly in the file which breaks this validation. // See: https://github.com/abraunegg/onedrive/issues/205 // See: https://github.com/OneDrive/onedrive-api-docs/issues/935 bool disableUploadValidation = false; // Do we perform a local cleanup of files that are 'extra' on the local file system, when using --download-only bool cleanupLocalFiles = false; // Are we performing a --single-directory sync ? bool singleDirectoryScope = false; string singleDirectoryScopeDriveId; string singleDirectoryScopeItemId; // Is National Cloud Deployments configured ? bool nationalCloudDeployment = false; // Do we configure not to perform a remote file delete if --upload-only & --no-remote-delete configured bool noRemoteDelete = false; // Is bypass_data_preservation set via config file // Local data loss MAY occur in this scenario bool bypassDataPreservation = false; // Has the user configured to permanently delete files online rather than send to online recycle bin bool permanentDelete = false; // Maximum file size upload // https://support.microsoft.com/en-us/office/invalid-file-names-and-file-types-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa?ui=en-us&rs=en-us&ad=us // July 2020, maximum file size for all accounts is 100GB // January 2021, maximum file size for all accounts is 250GB long maxUploadFileSize = 268435456000; // 250GB // Threshold after which files will be uploaded using an upload session long sessionThresholdFileSize = 4 * 2^^20; // 4 MiB // File size limit for file operations that the user has configured long fileSizeLimit; // Total data to upload long totalDataToUpload; // How many items have been processed for the active operation long processedCount; // Are we creating a simulated /delta response? This is critically important in terms of how we 'update' the database bool generateSimulatedDeltaResponse = false; // Store the latest DeltaLink string latestDeltaLink; // Struct of containing the deltaLink details DeltaLinkDetails deltaLinkCache; // Array of driveId and deltaLink for use when performing the last examination of the most recent online data alias DeltaLinkInfo = string[string]; DeltaLinkInfo deltaLinkInfo; // Flag to denote data cleanup pass when using --download-only --cleanup-local-files bool cleanupDataPass = false; // Create the specific task pool to process items in parallel TaskPool processPool; // Shared Folder Flags for 'sync_list' processing bool sharedFolderDeltaGeneration = false; string currentSharedFolderName = ""; // Directory excluded by 'sync_list flag so that when scanning that directory, if it is excluded, // can be scanned for new data which may be included by other include rule, but parent is excluded bool syncListDirExcluded = false; // Debug Logging Break Lines string debugLogBreakType1 = "-----------------------------------------------------------------------------------------------------------"; string debugLogBreakType2 = "==========================================================================================================="; // Configure this class instance this(ApplicationConfig appConfig, ItemDatabase itemDB, ClientSideFiltering selectiveSync) { // Create the specific task pool to process items in parallel processPool = new TaskPool(to!int(appConfig.getValueLong("threads"))); if (debugLogging) {addLogEntry("Initialised TaskPool worker with threads: " ~ to!string(processPool.size), ["debug"]);} // Configure the class variable to consume the application configuration this.appConfig = appConfig; // Configure the class variable to consume the database configuration this.itemDB = itemDB; // Configure the class variable to consume the selective sync (skip_dir, skip_file and sync_list) configuration this.selectiveSync = selectiveSync; // Configure the dryRun flag to capture if --dry-run was used // Application startup already flagged we are also in a --dry-run state, so no need to output anything else here this.dryRun = appConfig.getValueBool("dry_run"); // Configure file size limit if (appConfig.getValueLong("skip_size") != 0) { fileSizeLimit = appConfig.getValueLong("skip_size") * 2^^20; fileSizeLimit = (fileSizeLimit == 0) ? long.max : fileSizeLimit; } // Is there a sync_list file present? if (exists(appConfig.syncListFilePath)) { // yes there is a file present, but did we load any entries? if (!selectiveSync.validSyncListRules) { // function returned 'false' (array contains valid entries) // flag there are rules to process when we are performing Client Side Filtering if (debugLogging) {addLogEntry("Configuring syncListConfigured flag to TRUE as valid entries were loaded from 'sync_list' file", ["debug"]);} this.syncListConfigured = true; } else { // function returned 'true' meaning there are are zero sync_list rules loaded despite the 'sync_list' file being present // ensure this flag is false so we do not do any extra processing if (debugLogging) {addLogEntry("Configuring syncListConfigured flag to FALSE as no valid entries were loaded from 'sync_list' file", ["debug"]);} this.syncListConfigured = false; } } // Configure the uploadOnly flag to capture if --upload-only was used if (appConfig.getValueBool("upload_only")) { if (debugLogging) {addLogEntry("Configuring uploadOnly flag to TRUE as --upload-only passed in or configured", ["debug"]);} this.uploadOnly = true; } // Configure the localDeleteAfterUpload flag if (appConfig.getValueBool("remove_source_files")) { if (debugLogging) {addLogEntry("Configuring localDeleteAfterUpload flag to TRUE as --remove-source-files passed in or configured", ["debug"]);} this.localDeleteAfterUpload = true; } // Configure the disableDownloadValidation flag if (appConfig.getValueBool("disable_download_validation")) { if (debugLogging) {addLogEntry("Configuring disableDownloadValidation flag to TRUE as --disable-download-validation passed in or configured", ["debug"]);} this.disableDownloadValidation = true; } // Configure the disableUploadValidation flag if (appConfig.getValueBool("disable_upload_validation")) { if (debugLogging) {addLogEntry("Configuring disableUploadValidation flag to TRUE as --disable-upload-validation passed in or configured", ["debug"]);} this.disableUploadValidation = true; } // Do we configure to clean up local files if using --download-only ? if ((appConfig.getValueBool("download_only")) && (appConfig.getValueBool("cleanup_local_files"))) { // --download-only and --cleanup-local-files were passed in addLogEntry(); addLogEntry("WARNING: Application has been configured to cleanup local files that are not present online."); addLogEntry("WARNING: Local data loss MAY occur in this scenario if you are expecting data to remain archived locally."); addLogEntry(); // Set the flag this.cleanupLocalFiles = true; } // Do we configure to NOT perform a remote delete if --upload-only & --no-remote-delete configured ? if ((appConfig.getValueBool("upload_only")) && (appConfig.getValueBool("no_remote_delete"))) { // --upload-only and --no-remote-delete were passed in addLogEntry("WARNING: Application has been configured NOT to cleanup remote files that are deleted locally."); // Set the flag this.noRemoteDelete = true; } // Are we configured to use a National Cloud Deployment? if (appConfig.getValueString("azure_ad_endpoint") != "") { // value is configured, is it a valid value? if ((appConfig.getValueString("azure_ad_endpoint") == "USL4") || (appConfig.getValueString("azure_ad_endpoint") == "USL5") || (appConfig.getValueString("azure_ad_endpoint") == "DE") || (appConfig.getValueString("azure_ad_endpoint") == "CN")) { // valid entries to flag we are using a National Cloud Deployment // National Cloud Deployments do not support /delta as a query // https://docs.microsoft.com/en-us/graph/deployments#supported-features // Flag that we have a valid National Cloud Deployment that cannot use /delta queries this.nationalCloudDeployment = true; // Reverse set 'force_children_scan' for completeness appConfig.setValueBool("force_children_scan", true); } } // Are we forcing to use /children scan instead of /delta to simulate National Cloud Deployment use of /children? if (appConfig.getValueBool("force_children_scan")) { addLogEntry("Forcing client to use /children API call rather than /delta API to retrieve objects from the OneDrive API"); this.nationalCloudDeployment = true; } // Are we forcing the client to bypass any data preservation techniques to NOT rename any local files if there is a conflict? // The enabling of this function could lead to data loss if (appConfig.getValueBool("bypass_data_preservation")) { addLogEntry(); addLogEntry("WARNING: Application has been configured to bypass local data preservation in the event of file conflict."); addLogEntry("WARNING: Local data loss MAY occur in this scenario."); addLogEntry(); this.bypassDataPreservation = true; } // Did the user configure a specific rate limit for the application? if (appConfig.getValueLong("rate_limit") > 0) { // User configured rate limit addLogEntry("User Configured Rate Limit: " ~ to!string(appConfig.getValueLong("rate_limit"))); // If user provided rate limit is < 131072, flag that this is too low, setting to the recommended minimum of 131072 if (appConfig.getValueLong("rate_limit") < 131072) { // user provided limit too low addLogEntry("WARNING: User configured rate limit too low for normal application processing and preventing application timeouts. Overriding to recommended minimum of 131072 (128KB/s)"); appConfig.setValueLong("rate_limit", 131072); } } // Did the user downgrade all HTTP operations to force HTTP 1.1 if (appConfig.getValueBool("force_http_11")) { // User is forcing downgrade to curl to use HTTP 1.1 for all operations if (verboseLogging) {addLogEntry("Downgrading all HTTP operations to HTTP/1.1 due to user configuration", ["verbose"]);} } else { // Use curl defaults if (debugLogging) {addLogEntry("Using Curl defaults for HTTP operational protocol version (potentially HTTP/2)", ["debug"]);} } } // Initialise the Sync Engine class bool initialise() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Control whether the worker threads are daemon threads. A daemon thread is automatically terminated when all non-daemon threads have terminated. processPool.isDaemon(true); // daemon thread // Flag for 'no-sync' task bool noSyncTask = false; // Create a new instance of the OneDrive API OneDriveApi oneDriveApiInstance; oneDriveApiInstance = new OneDriveApi(appConfig); // Exit scope - release curl engine back to pool scope(exit) { oneDriveApiInstance.releaseCurlEngine(); // Free object and memory oneDriveApiInstance = null; } // Issue #2941 // If the account being used _only_ has access to specific resources, getDefaultDriveDetails() will generate problems and cause // the application to exit, which, is technically the right thing to do (no access to account details) ... but if: // - are we doing a no-sync task ? // - do we have the 'drive_id' via config file ? // Are we not doing a --sync or a --monitor operation? Both of these will be false if they are not set if ((!appConfig.getValueBool("synchronize")) && (!appConfig.getValueBool("monitor"))) { // set flag noSyncTask = true; } // Can the API be initialised successfully? if (oneDriveApiInstance.initialise()) { // Get the relevant default drive details try { getDefaultDriveDetails(); } catch (AccountDetailsException exception) { // was this a no-sync task? if (!noSyncTask) { // details could not be queried addLogEntry(exception.msg); // Must force exit here, allow logging to be done forceExit(); } } // Get the relevant default root details try { getDefaultRootDetails(); } catch (AccountDetailsException exception) { // details could not be queried addLogEntry(exception.msg); // Must force exit here, allow logging to be done forceExit(); } // Display relevant account details try { // we only do this if we are doing --verbose logging if (verboseLogging) { displaySyncEngineDetails(); } } catch (AccountDetailsException exception) { // details could not be queried addLogEntry(exception.msg); // Must force exit here, allow logging to be done forceExit(); } } else { // API could not be initialised addLogEntry("OneDrive API could not be initialised with previously used details"); // Must force exit here, allow logging to be done forceExit(); } // Has the client been configured to permanently delete files online rather than send these to the online recycle bin? if (appConfig.getValueBool("permanent_delete")) { // This can only be set if not using: // - US Government L4 // - US Government L5 (DOD) // - Azure and Office365 operated by VNET in China // // Additionally, this is not supported by OneDrive Personal accounts: // // This is a doc bug. In fact, OneDrive personal accounts do not support the permanentDelete API, it only applies to OneDrive for Business and SharePoint document libraries. // // Reference: https://learn.microsoft.com/en-us/answers/questions/1501170/onedrive-permanently-delete-a-file string azureConfigValue = appConfig.getValueString("azure_ad_endpoint"); // Now that we know the 'accountType' we can configure this correctly if ((appConfig.accountType != "personal") && (azureConfigValue.empty || azureConfigValue == "DE")) { // Only supported for Global Service and DE based on https://learn.microsoft.com/en-us/graph/api/driveitem-permanentdelete?view=graph-rest-1.0 addLogEntry(); addLogEntry("WARNING: Application has been configured to permanently remove files online rather than send to the recycle bin. Permanently deleted items can't be restored."); addLogEntry("WARNING: Online data loss MAY occur in this scenario."); addLogEntry(); this.permanentDelete = true; } else { // what error message do we present if (appConfig.accountType == "personal") { // personal account type - API not supported addLogEntry(); addLogEntry("WARNING: The application is configured to permanently delete files online; however, this action is not supported by Microsoft OneDrive Personal Accounts."); addLogEntry(); } else { // Not a personal account addLogEntry(); addLogEntry("WARNING: The application is configured to permanently delete files online; however, this action is not supported by the National Cloud Deployment in use."); addLogEntry(); } // ensure this is false regardless this.permanentDelete = false; } } // API was initialised if (verboseLogging) {addLogEntry("Sync Engine Initialised with new Onedrive API instance", ["verbose"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return required value return true; } // Shutdown the sync engine, wait for anything in processPool to complete void shutdown() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } if (debugLogging) {addLogEntry("SyncEngine: Waiting for all internal threads to complete", ["debug"]);} shutdownProcessPool(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Shut down all running tasks that are potentially running in parallel void shutdownProcessPool() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // TaskPool needs specific shutdown based on compiler version otherwise this causes a segfault if (processPool.size > 0) { // TaskPool is still configured for 'thread' size // Normal TaskPool shutdown process if (debugLogging) {addLogEntry("Shutting down processPool in a thread blocking manner", ["debug"]);} // All worker threads are daemon threads which are automatically terminated when all non-daemon threads have terminated. processPool.finish(true); // If blocking argument is true, wait for all worker threads to terminate before returning. } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Get Default Drive Details for this Account void getDefaultDriveDetails() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables JSONValue defaultOneDriveDriveDetails; bool noSyncTask = false; // Create a new instance of the OneDrive API OneDriveApi getDefaultDriveApiInstance; getDefaultDriveApiInstance = new OneDriveApi(appConfig); getDefaultDriveApiInstance.initialise(); // Are we not doing a --sync or a --monitor operation? Both of these will be false if they are not set if ((!appConfig.getValueBool("synchronize")) && (!appConfig.getValueBool("monitor"))) { // set flag noSyncTask = true; } // Get Default Drive Details for this Account try { if (debugLogging) {addLogEntry("Getting Account Default Drive Details", ["debug"]);} defaultOneDriveDriveDetails = getDefaultDriveApiInstance.getDefaultDriveDetails(); } catch (OneDriveException exception) { if (debugLogging) {addLogEntry("defaultOneDriveDriveDetails = getDefaultDriveApiInstance.getDefaultDriveDetails() generated a OneDriveException", ["debug"]);} if ((exception.httpStatusCode == 400) || (exception.httpStatusCode == 401)) { // Handle the 400 | 401 error handleClientUnauthorised(exception.httpStatusCode, exception.error); } else { // Default operation if not 400,401 errors // - 408,429,503,504 errors are handled as a retry within getDefaultDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } // If the JSON response is a correct JSON object, and has an 'id' we can set these details if ((defaultOneDriveDriveDetails.type() == JSONType.object) && (hasId(defaultOneDriveDriveDetails))) { if (debugLogging) {addLogEntry("OneDrive Account Default Drive Details: " ~ sanitiseJSONItem(defaultOneDriveDriveDetails), ["debug"]);} appConfig.accountType = defaultOneDriveDriveDetails["driveType"].str; // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { // Test driveId length and validation // Once checked and validated, we only need to check 'driveId' if it does not match exactly 'appConfig.defaultDriveId' appConfig.defaultDriveId = transformToLowerCase(testProvidedDriveIdForLengthIssue(defaultOneDriveDriveDetails["id"].str)); } else { // Use 'defaultOneDriveDriveDetails' as is for all other account types appConfig.defaultDriveId = defaultOneDriveDriveDetails["id"].str; } // Make sure that appConfig.defaultDriveId is in our driveIDs array to use when checking if item is in database // Keep the DriveDetailsCache array with unique entries only DriveDetailsCache cachedOnlineDriveData; if (!canFindDriveId(appConfig.defaultDriveId, cachedOnlineDriveData)) { // Add this driveId to the drive cache, which then also sets for the defaultDriveId: // - quotaRestricted; // - quotaAvailable; // - quotaRemaining; // // In some cases OneDrive Business configurations 'restrict' quota details thus is empty / blank / negative value / zero value // When addOrUpdateOneDriveOnlineDetails() is called, messaging is provided if these are zero, negative or missing (thus quota is being restricted) addOrUpdateOneDriveOnlineDetails(appConfig.defaultDriveId); } // Fetch the details from cachedOnlineDriveData for appConfig.defaultDriveId cachedOnlineDriveData = getDriveDetails(appConfig.defaultDriveId); // - cachedOnlineDriveData.quotaRestricted; // - cachedOnlineDriveData.quotaAvailable; // - cachedOnlineDriveData.quotaRemaining; // What did we set based on the data from the JSON and cached drive data if (debugLogging) { addLogEntry("appConfig.accountType = " ~ appConfig.accountType, ["debug"]); addLogEntry("appConfig.defaultDriveId = " ~ appConfig.defaultDriveId, ["debug"]); addLogEntry("cachedOnlineDriveData.quotaRemaining = " ~ to!string(cachedOnlineDriveData.quotaRemaining), ["debug"]); addLogEntry("cachedOnlineDriveData.quotaAvailable = " ~ to!string(cachedOnlineDriveData.quotaAvailable), ["debug"]); addLogEntry("cachedOnlineDriveData.quotaRestricted = " ~ to!string(cachedOnlineDriveData.quotaRestricted), ["debug"]); } // Regardless of this being all set - based on the JSON response, check for 'quota' being present, to check // for the following valid states: normal | nearing | critical | exceeded // // Based on this, then generate an applicable application message to advise the user of their quota status if ((hasQuota(defaultOneDriveDriveDetails)) && (hasQuotaState(defaultOneDriveDriveDetails))) { // get the current state string quotaState = defaultOneDriveDriveDetails["quota"]["state"].str; // quotaState = normal - no message string nearingMessage = "WARNING: Your Microsoft OneDrive storage is nearing capacity, with less than 10% of your available space remaining."; string criticalMessage = "WARNING: Your Microsoft OneDrive storage is critically low, with less than 1% of your available space remaining."; string exceededMessage = "CRITICAL: Your Microsoft OneDrive storage limit has been exceeded. You can no longer upload new content to Microsoft OneDrive."; string actionRequired = " Delete unneeded files or upgrade your storage plan now, as further uploads will not be possible once storage is exceeded"; // switch to display the right message switch(quotaState) { case "nearing": addLogEntry(); addLogEntry(nearingMessage, ["info", "notify"]); addLogEntry(actionRequired); addLogEntry(); break; case "critical": addLogEntry(); addLogEntry(criticalMessage, ["info", "notify"]); addLogEntry(actionRequired); addLogEntry(); break; case "exceeded": addLogEntry(); addLogEntry("******************************************************************************************************************************"); addLogEntry(exceededMessage, ["info", "notify"]); addLogEntry("******************************************************************************************************************************"); addLogEntry(); break; default: // nothing } } } else { // Did the configuration file contain a 'drive_id' entry // If this exists, this will be a 'documentLibrary' if (appConfig.getValueString("drive_id").length) { // Force set these as for whatever reason we could to query these via the getDefaultDriveDetails API call appConfig.accountType = "documentLibrary"; appConfig.defaultDriveId = appConfig.getValueString("drive_id"); } else { // was this a no-sync task? if (!noSyncTask) { // Handle the invalid JSON response by throwing an exception error throw new AccountDetailsException(); } } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory getDefaultDriveApiInstance.releaseCurlEngine(); getDefaultDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Get Default Root Details for this Account void getDefaultRootDetails() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables JSONValue defaultOneDriveRootDetails; bool noSyncTask = false; // Create a new instance of the OneDrive API OneDriveApi getDefaultRootApiInstance; getDefaultRootApiInstance = new OneDriveApi(appConfig); getDefaultRootApiInstance.initialise(); // Are we not doing a --sync or a --monitor operation? Both of these will be false if they are not set if ((!appConfig.getValueBool("synchronize")) && (!appConfig.getValueBool("monitor"))) { // set flag noSyncTask = true; } // Get Default Root Details for this Account try { if (debugLogging) {addLogEntry("Getting Account Default Root Details", ["debug"]);} defaultOneDriveRootDetails = getDefaultRootApiInstance.getDefaultRootDetails(); } catch (OneDriveException exception) { if (debugLogging) {addLogEntry("defaultOneDriveRootDetails = getDefaultRootApiInstance.getDefaultRootDetails() generated a OneDriveException", ["debug"]);} if ((exception.httpStatusCode == 400) || (exception.httpStatusCode == 401)) { // Handle the 400 | 401 error handleClientUnauthorised(exception.httpStatusCode, exception.error); } else { // Default operation if not 400,401 errors // - 408,429,503,504 errors are handled as a retry within getDefaultRootApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } // If the JSON response is a correct JSON object, and has an 'id' we can set these details if ((defaultOneDriveRootDetails.type() == JSONType.object) && (hasId(defaultOneDriveRootDetails))) { // Read the returned JSON data for the root drive details if (debugLogging) {addLogEntry("OneDrive Account Default Root Details: " ~ sanitiseJSONItem(defaultOneDriveRootDetails), ["debug"]);} appConfig.defaultRootId = defaultOneDriveRootDetails["id"].str; if (debugLogging) {addLogEntry("appConfig.defaultRootId = " ~ appConfig.defaultRootId, ["debug"]);} // Save the item to the database, so the account root drive is is always going to be present in the DB saveItem(defaultOneDriveRootDetails); } else { // was this a no-sync task? if (!noSyncTask) { // Handle the invalid JSON response by throwing an exception error throw new AccountDetailsException(); } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory getDefaultRootApiInstance.releaseCurlEngine(); getDefaultRootApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Reset syncFailures to false based on file activity void resetSyncFailures() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Log initial status and any non-empty arrays string logMessage = "Evaluating reset of syncFailures: "; if (fileDownloadFailures.length > 0) { logMessage ~= "fileDownloadFailures is not empty; "; } if (fileUploadFailures.length > 0) { logMessage ~= "fileUploadFailures is not empty; "; } // Check if both arrays are empty to reset syncFailures if (fileDownloadFailures.length == 0 && fileUploadFailures.length == 0) { if (syncFailures) { syncFailures = false; logMessage ~= "Resetting syncFailures to false."; } else { logMessage ~= "syncFailures already false."; } } else { // Indicate no reset of syncFailures due to non-empty conditions logMessage ~= "Not resetting syncFailures due to non-empty arrays."; } // Log the final decision and conditions if (debugLogging) {addLogEntry(logMessage, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform a sync of the OneDrive Account // - Query /delta // - If singleDirectoryScope or nationalCloudDeployment is used we need to generate a /delta like response // - Process changes (add, changes, moves, deletes) // - Process any items to add (download data to local) // - Detail any files that we failed to download // - Process any deletes (remove local data) void syncOneDriveAccountToLocalDisk() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // performFullScanTrueUp value if (debugLogging) {addLogEntry("Perform a Full Scan True-Up: " ~ to!string(appConfig.fullScanTrueUpRequired), ["debug"]);} // Fetch the API response of /delta to track changes that were performed online fetchOneDriveDeltaAPIResponse(); // Process any download activities or cleanup actions processDownloadActivities(); // If singleDirectoryScope is false, we are not targeting a single directory // but if true, the target 'could' be a shared folder - so dont try and scan it again if (!singleDirectoryScope) { // OneDrive Shared Folder Handling if (appConfig.accountType == "personal") { // Personal Account Type // https://github.com/OneDrive/onedrive-api-docs/issues/764 // Get the Remote Items from the Database Item[] remoteItems = itemDB.selectRemoteItems(); foreach (remoteItem; remoteItems) { // Check if this path is specifically excluded by 'skip_dir', but only if 'skip_dir' is not empty if (appConfig.getValueString("skip_dir") != "") { // The path that needs to be checked needs to include the '/' // This due to if the user has specified in skip_dir an exclusive path: '/path' - that is what must be matched if (selectiveSync.isDirNameExcluded(remoteItem.name)) { // This directory name is excluded if (verboseLogging) {addLogEntry("Skipping path - excluded by skip_dir config: " ~ remoteItem.name, ["verbose"]);} continue; } } // Directory name is not excluded or skip_dir is not populated if (!appConfig.suppressLoggingOutput) { // So that we represent correctly where this shared folder is, calculate the path string sharedFolderLogicalPath = computeItemPath(remoteItem.driveId, remoteItem.id); addLogEntry("Syncing this OneDrive Personal Shared Folder: " ~ ensureStartsWithDotSlash(sharedFolderLogicalPath)); } // Check this OneDrive Personal Shared Folder for changes fetchOneDriveDeltaAPIResponse(remoteItem.remoteDriveId, remoteItem.remoteId, remoteItem.name); // Process any download activities or cleanup actions for this OneDrive Personal Shared Folder processDownloadActivities(); } // Clear the array remoteItems = []; } else { // Is this a Business Account with Sync Business Shared Items enabled? if ((appConfig.accountType == "business") && (appConfig.getValueBool("sync_business_shared_items"))) { // Business Account Shared Items Handling // - OneDrive Business Shared Folder // - OneDrive Business Shared Files // - SharePoint Links // Get the Remote Items from the Database Item[] remoteItems = itemDB.selectRemoteItems(); foreach (remoteItem; remoteItems) { // As all remote items are returned, including files, we only want to process directories here if (remoteItem.remoteType == ItemType.dir) { // Check if this path is specifically excluded by 'skip_dir', but only if 'skip_dir' is not empty if (appConfig.getValueString("skip_dir") != "") { // The path that needs to be checked needs to include the '/' // This due to if the user has specified in skip_dir an exclusive path: '/path' - that is what must be matched if (selectiveSync.isDirNameExcluded(remoteItem.name)) { // This directory name is excluded if (verboseLogging) {addLogEntry("Skipping path - excluded by skip_dir config: " ~ remoteItem.name, ["verbose"]);} continue; } } // Directory name is not excluded or skip_dir is not populated if (!appConfig.suppressLoggingOutput) { // So that we represent correctly where this shared folder is, calculate the path string sharedFolderLogicalPath = computeItemPath(remoteItem.driveId, remoteItem.id); addLogEntry("Syncing this OneDrive Business Shared Folder: " ~ sharedFolderLogicalPath); } // Debug log output if (debugLogging) { addLogEntry("Fetching /delta API response for:", ["debug"]); addLogEntry(" remoteItem.remoteDriveId: " ~ remoteItem.remoteDriveId, ["debug"]); addLogEntry(" remoteItem.remoteId: " ~ remoteItem.remoteId, ["debug"]); } // Check this OneDrive Business Shared Folder for changes fetchOneDriveDeltaAPIResponse(remoteItem.remoteDriveId, remoteItem.remoteId, remoteItem.name); // Process any download activities or cleanup actions for this OneDrive Business Shared Folder processDownloadActivities(); } } // Clear the array remoteItems = []; // OneDrive Business Shared File Handling - but only if this option is enabled if (appConfig.getValueBool("sync_business_shared_files")) { // We need to create a 'new' local folder in the 'sync_dir' where these shared files & associated folder structure will reside // Whilst these files are synced locally, the entire folder structure will need to be excluded from syncing back to OneDrive // But file changes , *if any* , will need to be synced back to the original shared file location // . // ├── Files Shared With Me -> Directory should not be created online | Not Synced // │ └── Display Name (email address) (of Account who shared file) -> Directory should not be created online | Not Synced // │ │ └── shared file.ext -> File synced with original shared file location on remote drive // │ │ └── shared file.ext -> File synced with original shared file location on remote drive // │ │ └── ...... -> File synced with original shared file location on remote drive // │ └── Display Name (email address) ... // │ └── shared file.ext .... -> File synced with original shared file location on remote drive // Does the Local Folder to store the OneDrive Business Shared Files exist? if (!exists(appConfig.configuredBusinessSharedFilesDirectoryName)) { // Folder does not exist locally and needs to be created addLogEntry("Creating the OneDrive Business Shared Files Local Directory: " ~ appConfig.configuredBusinessSharedFilesDirectoryName); if (!dryRun) { // Local folder does not exist, thus needs to be created try { // Attempt path creation mkdirRecurse(appConfig.configuredBusinessSharedFilesDirectoryName); } catch (std.file.FileException e) { // Creating the path failed addLogEntry("ERROR: Unable to create the OneDrive Business Shared Files Local Directory: " ~ e.msg, ["info", "notify"]); } } // As this will not be created online, generate a response so it can be saved to the database Item sharedFilesPath = makeItem(createFakeResponse(baseName(appConfig.configuredBusinessSharedFilesDirectoryName))); // Add DB record to the local database if (debugLogging) {addLogEntry("Creating|Updating into local database a DB record for storing OneDrive Business Shared Files: " ~ to!string(sharedFilesPath), ["debug"]);} itemDB.upsert(sharedFilesPath); } else { // Folder exists locally, is the folder in the database? // Query DB for this path Item dbRecord; if (!itemDB.selectByPath(baseName(appConfig.configuredBusinessSharedFilesDirectoryName), appConfig.defaultDriveId, dbRecord)) { // As this will not be created online, generate a response so it can be saved to the database Item sharedFilesPath = makeItem(createFakeResponse(baseName(appConfig.configuredBusinessSharedFilesDirectoryName))); // Add DB record to the local database if (debugLogging) {addLogEntry("Creating|Updating into local database a DB record for storing OneDrive Business Shared Files: " ~ to!string(sharedFilesPath), ["debug"]);} itemDB.upsert(sharedFilesPath); } } // Query for OneDrive Business Shared Files if (verboseLogging) {addLogEntry("Checking for any applicable OneDrive Business Shared Files which need to be synced locally", ["verbose"]);} queryBusinessSharedObjects(); // Download any OneDrive Business Shared Files processDownloadActivities(); } } } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Cleanup arrays when used in --monitor loops void cleanupArrays() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Debug what we are doing if (debugLogging) {addLogEntry("Cleaning up all internal arrays used when processing data", ["debug"]);} // Multi Dimensional Arrays idsToDelete.length = 0; idsFaked.length = 0; databaseItemsWhereContentHasChanged.length = 0; // JSON Items Arrays jsonItemsToProcess = []; fileJSONItemsToDownload = []; jsonItemsToResumeUpload = []; jsonItemsToResumeDownload = []; // String Arrays fileDownloadFailures = []; pathFakeDeletedArray = []; pathsRenamed = []; newLocalFilesToUploadToOneDrive = []; fileUploadFailures = []; posixViolationPaths = []; businessSharedFoldersOnlineToSkip = []; interruptedUploadsSessionFiles = []; interruptedDownloadFiles = []; pathsToCreateOnline = []; databaseItemsToDeleteOnline = []; // Perform Garbage Collection on this destroyed curl engine GC.collect(); if (debugLogging) {addLogEntry("Cleaning of internal arrays complete", ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Configure singleDirectoryScope = true if this function is called // By default, singleDirectoryScope = false void setSingleDirectoryScope(string normalisedSingleDirectoryPath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables Item searchItem; JSONValue onlinePathData; // Set the main flag singleDirectoryScope = true; // What are we doing? addLogEntry("The OneDrive Client was asked to search for this directory online and create it if it's not located: " ~ normalisedSingleDirectoryPath); // Query the OneDrive API for the specified path online // In a --single-directory scenario, we need to traverse the entire path that we are wanting to sync // and then check the path element does it exist online, if it does, is it a POSIX match, or if it does not, create the path // Once we have searched online, we have the right drive id and item id so that we can downgrade the sync status, then build up // any object items from that location // This is because, in a --single-directory scenario, any folder in the entire path tree could be a 'case-insensitive match' try { onlinePathData = queryOneDriveForSpecificPathAndCreateIfMissing(normalisedSingleDirectoryPath, true); } catch (PosixException e) { displayPosixErrorMessage(e.msg); addLogEntry("ERROR: Requested directory to search for and potentially create has a 'case-insensitive match' to an existing directory on Microsoft OneDrive online."); } // Was a valid JSON response provided? if (onlinePathData.type() == JSONType.object) { // Valid JSON item was returned searchItem = makeItem(onlinePathData); if (debugLogging) {addLogEntry("searchItem: " ~ to!string(searchItem), ["debug"]);} // Is this item a potential Shared Folder? // Is this JSON a remote object if (isItemRemote(onlinePathData)) { // Is this a Personal Account Type or has 'sync_business_shared_items' been enabled? if ((appConfig.accountType == "personal") || (appConfig.getValueBool("sync_business_shared_items"))) { // The path we are seeking is remote to our account drive id searchItem.driveId = onlinePathData["remoteItem"]["parentReference"]["driveId"].str; searchItem.id = onlinePathData["remoteItem"]["id"].str; // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test searchItem.driveId = transformToLowerCase(searchItem.driveId); // Test driveId length and validation if the driveId we are testing is not equal to appConfig.defaultDriveId if (searchItem.driveId != appConfig.defaultDriveId) { searchItem.driveId = testProvidedDriveIdForLengthIssue(searchItem.driveId); } } // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(onlinePathData); } else { // This is a shared folder location, but we are not a 'personal' account, and 'sync_business_shared_items' has not been enabled addLogEntry(); addLogEntry("ERROR: The requested --single-directory path to sync is a Shared Folder online and 'sync_business_shared_items' is not enabled"); addLogEntry(); forceExit(); } } // Set these items so that these can be used as required singleDirectoryScopeDriveId = searchItem.driveId; singleDirectoryScopeItemId = searchItem.id; } else { addLogEntry(); addLogEntry("ERROR: The requested --single-directory path to sync has generated an error. Please correct this error and try again."); addLogEntry(); forceExit(); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Query OneDrive API for /delta changes and iterate through items online void fetchOneDriveDeltaAPIResponse(string driveIdToQuery = null, string itemIdToQuery = null, string sharedFolderName = null) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } string deltaLink = null; string currentDeltaLink = null; string databaseDeltaLink; JSONValue deltaChanges; long responseBundleCount; long jsonItemsReceived = 0; // Reset jsonItemsToProcess & processedCount jsonItemsToProcess = []; processedCount = 0; // Reset generateSimulatedDeltaResponse generateSimulatedDeltaResponse = false; // Reset Shared Folder Flags for 'sync_list' processing sharedFolderDeltaGeneration = false; currentSharedFolderName = ""; // Was a driveId provided as an input if (strip(driveIdToQuery).empty) { // No provided driveId to query, use the account default driveIdToQuery = appConfig.defaultDriveId; if (debugLogging) { addLogEntry("driveIdToQuery was empty, setting to appConfig.defaultDriveId", ["debug"]); addLogEntry("driveIdToQuery: " ~ driveIdToQuery, ["debug"]); } } // Was an itemId provided as an input if (strip(itemIdToQuery).empty) { // No provided itemId to query, use the account default itemIdToQuery = appConfig.defaultRootId; if (debugLogging) { addLogEntry("itemIdToQuery was empty, setting to appConfig.defaultRootId", ["debug"]); addLogEntry("itemIdToQuery: " ~ itemIdToQuery, ["debug"]); } } // What OneDrive API query do we use? // - Are we running against a National Cloud Deployments that does not support /delta ? // National Cloud Deployments do not support /delta as a query // https://docs.microsoft.com/en-us/graph/deployments#supported-features // // - Are we performing a --single-directory sync, which will exclude many items online, focusing in on a specific online directory // // - Are we performing a --download-only --cleanup-local-files action? // - If we are, and we use a normal /delta query, we get all the local 'deleted' objects as well. // - If the user deletes a folder online, then replaces it online, we download the deletion events and process the new 'upload' via the web interface .. // the net effect of this, is that the valid local files we want to keep, are actually deleted ...... not desirable if ((singleDirectoryScope) || (nationalCloudDeployment) || (cleanupLocalFiles)) { // Generate a simulated /delta response so that we correctly capture the current online state, less any 'online' delete and replace activity generateSimulatedDeltaResponse = true; } // Shared Folders, by nature of where that path has been shared with us, we cannot use /delta against that path, as this queries the entire 'other persons' drive: // Syncing this OneDrive Business Shared Folder: Sub Folder 2 // Fetching /delta response from the OneDrive API for Drive ID: b!fZgJhK-pU0eTQpylvmoYCkE4YgH_KRNDlxjRx9OWNqmV9Q_E_uWdRJKIB5L_ruPN // Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 18 // Skipping path - excluded by sync_list config: Sub Folder Share/Sub Folder 1/Sub Folder 2 // // When using 'sync_list' potentially nothing is going to match, as, we are getting the 'whole' path from their 'root' , not just the folder shared with us if (!sharedFolderName.empty) { // When using 'sync_list' we need to do this sharedFolderDeltaGeneration = true; currentSharedFolderName = sharedFolderName; generateSimulatedDeltaResponse = true; } // Reset latestDeltaLink & deltaLinkCache latestDeltaLink = null; deltaLinkCache.driveId = null; deltaLinkCache.itemId = null; deltaLinkCache.latestDeltaLink = null; // Perform Garbage Collection GC.collect(); // What /delta query do we use? if (!generateSimulatedDeltaResponse) { // This should be the majority default pathway application use // Do we need to perform a Full Scan True Up? Is 'appConfig.fullScanTrueUpRequired' set to 'true'? if (appConfig.fullScanTrueUpRequired) { addLogEntry("Performing a full scan of online data to ensure consistent local state"); if (debugLogging) {addLogEntry("Setting currentDeltaLink = null", ["debug"]);} currentDeltaLink = null; } else { // Try and get the current Delta Link from the internal cache, this saves a DB I/O call currentDeltaLink = getDeltaLinkFromCache(deltaLinkInfo, driveIdToQuery); // Is currentDeltaLink empty (no cached entry found) ? if (currentDeltaLink.empty) { // Try and get the current delta link from the database for this DriveID and RootID databaseDeltaLink = itemDB.getDeltaLink(driveIdToQuery, itemIdToQuery); if (!databaseDeltaLink.empty) { if (debugLogging) {addLogEntry("Using database stored deltaLink", ["debug"]);} currentDeltaLink = databaseDeltaLink; } else { if (debugLogging) {addLogEntry("Zero deltaLink available for use, we will be performing a full online scan", ["debug"]);} currentDeltaLink = null; } } else { // Log that we are using the deltaLink for cache if (debugLogging) {addLogEntry("Using cached deltaLink", ["debug"]);} } } // Dynamic output for non-verbose and verbose run so that the user knows something is being retrieved from the OneDrive API if (appConfig.verbosityCount == 0) { if (!appConfig.suppressLoggingOutput) { addProcessingLogHeaderEntry("Fetching items from the OneDrive API for Drive ID: " ~ driveIdToQuery, appConfig.verbosityCount); } } else { if (verboseLogging) {addLogEntry("Fetching /delta response from the OneDrive API for Drive ID: " ~ driveIdToQuery, ["verbose"]);} } // Create a new API Instance for querying the actual /delta and initialise it OneDriveApi getDeltaDataOneDriveApiInstance; getDeltaDataOneDriveApiInstance = new OneDriveApi(appConfig); getDeltaDataOneDriveApiInstance.initialise(); // Get the /delta changes via the OneDrive API while (true) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } // Increment responseBundleCount responseBundleCount++; // Ensure deltaChanges is empty before we query /delta deltaChanges = null; // Perform Garbage Collection GC.collect(); // getDeltaChangesByItemId has the re-try logic for transient errors deltaChanges = getDeltaChangesByItemId(driveIdToQuery, itemIdToQuery, currentDeltaLink, getDeltaDataOneDriveApiInstance); // If the initial deltaChanges response is an invalid JSON object, keep trying until we get a valid response .. if (deltaChanges.type() != JSONType.object) { // While the response is not a JSON Object or the Exit Handler has not been triggered while (deltaChanges.type() != JSONType.object) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } // Handle the invalid JSON response and retry if (debugLogging) {addLogEntry("ERROR: Query of the OneDrive API via deltaChanges = getDeltaChangesByItemId() returned an invalid JSON response", ["debug"]);} deltaChanges = getDeltaChangesByItemId(driveIdToQuery, itemIdToQuery, currentDeltaLink, getDeltaDataOneDriveApiInstance); } } long nrChanges = count(deltaChanges["value"].array); int changeCount = 0; if (appConfig.verbosityCount == 0) { // Dynamic output for a non-verbose run so that the user knows something is happening if (!appConfig.suppressLoggingOutput) { addProcessingDotEntry(); } } else { if (verboseLogging) {addLogEntry("Processing API Response Bundle: " ~ to!string(responseBundleCount) ~ " - Quantity of 'changes|items' in this bundle to process: " ~ to!string(nrChanges), ["verbose"]);} } // Update the count of items received jsonItemsReceived = jsonItemsReceived + nrChanges; // The 'deltaChanges' response may contain either @odata.nextLink or @odata.deltaLink // Check for @odata.nextLink if ("@odata.nextLink" in deltaChanges) { // @odata.nextLink is the pointer within the API to the next '200+' JSON bundle - this is the checkpoint link for this bundle // This URL changes between JSON bundle sets // Log the action of setting currentDeltaLink to @odata.nextLink if (debugLogging) {addLogEntry("Setting currentDeltaLink to @odata.nextLink: " ~ deltaChanges["@odata.nextLink"].str, ["debug"]);} // Update currentDeltaLink to @odata.nextLink for the next '200+' JSON bundle - this is the checkpoint link for this bundle currentDeltaLink = deltaChanges["@odata.nextLink"].str; } // Check for @odata.deltaLink - usually only in the LAST JSON changeset bundle if ("@odata.deltaLink" in deltaChanges) { // @odata.deltaLink is the pointer that finalises all the online 'changes' for this particular checkpoint // When the API is queried again, this is fetched from the DB as this is the starting point // The API issue here is - the LAST JSON bundle will ONLY ever contain this item, meaning if this is then committed to the database // if there has been any file download failures from within this LAST JSON bundle, the only way to EVER re-try the failed items is for the user to perform a --resync // This is an API capability gap: // // .. // @odata.nextLink: https://graph.microsoft.com/v1.0/drives//items//delta?token= // Processing API Response Bundle: 115 - Quantity of 'changes|items' in this bundle to process: 204 // .. // @odata.nextLink: https://graph.microsoft.com/v1.0/drives//items//delta?token= // Processing API Response Bundle: 127 - Quantity of 'changes|items' in this bundle to process: 204 // @odata.nextLink: https://graph.microsoft.com/v1.0/drives//items//delta?token= // Processing API Response Bundle: 128 - Quantity of 'changes|items' in this bundle to process: 176 // @odata.deltaLink: https://graph.microsoft.com/v1.0/drives//items//delta?token= // Finished processing /delta JSON response from the OneDrive API // Log the action of setting currentDeltaLink to @odata.deltaLink if (debugLogging) {addLogEntry("Setting currentDeltaLink to (@odata.deltaLink): " ~ deltaChanges["@odata.deltaLink"].str, ["debug"]);} // Update currentDeltaLink to @odata.deltaLink as the final checkpoint URL for this entire JSON response set currentDeltaLink = deltaChanges["@odata.deltaLink"].str; // Store this currentDeltaLink as latestDeltaLink latestDeltaLink = deltaChanges["@odata.deltaLink"].str; // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test driveIdToQuery = transformToLowerCase(driveIdToQuery); // Test driveId length and validation if the driveId we are testing is not equal to appConfig.defaultDriveId if (driveIdToQuery != appConfig.defaultDriveId) { driveIdToQuery = testProvidedDriveIdForLengthIssue(driveIdToQuery); } } // Update deltaLinkCache deltaLinkCache.driveId = driveIdToQuery; deltaLinkCache.itemId = itemIdToQuery; deltaLinkCache.latestDeltaLink = currentDeltaLink; } // We have a valid deltaChanges JSON array. This means we have at least 200+ JSON items to process. // The API response however cannot be run in parallel as the OneDrive API sends the JSON items in the order in which they must be processed auto jsonArrayToProcess = deltaChanges["value"].array; // To allow for better debugging, what are all the JSON elements in the array the API responded with in this set? if (count(jsonArrayToProcess) > 0) { if (debugLogging) { string debugLogHeader = format("=============================== jsonArrayToProcess - response bundle %s ===================================", to!string(responseBundleCount)); addLogEntry(debugLogHeader, ["debug"]); addLogEntry(to!string(jsonArrayToProcess), ["debug"]); addLogEntry(debugLogBreakType2, ["debug"]); } } // Process the change set foreach (onedriveJSONItem; jsonArrayToProcess) { // increment change count for this item changeCount++; // Process the received OneDrive object item JSON for this JSON bundle // This will determine its initial applicability and perform some initial processing on the JSON if required processDeltaJSONItem(onedriveJSONItem, nrChanges, changeCount, responseBundleCount, singleDirectoryScope); } // Clear up this data jsonArrayToProcess = null; // Perform Garbage Collection GC.collect(); // Is latestDeltaLink matching deltaChanges["@odata.deltaLink"].str ? if ("@odata.deltaLink" in deltaChanges) { if (latestDeltaLink == deltaChanges["@odata.deltaLink"].str) { // break out of the 'while (true)' loop break; } } // Cleanup deltaChanges as this is no longer needed deltaChanges = null; // Perform Garbage Collection GC.collect(); // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } // Terminate getDeltaDataOneDriveApiInstance here getDeltaDataOneDriveApiInstance.releaseCurlEngine(); getDeltaDataOneDriveApiInstance = null; // Perform Garbage Collection on this destroyed curl engine GC.collect(); // To finish off the JSON processing items, this is needed to reflect this in the log if (debugLogging) {addLogEntry(debugLogBreakType1, ["debug"]);} // Log that we have finished querying the /delta API if (appConfig.verbosityCount == 0) { if (!appConfig.suppressLoggingOutput) { // Close out the '....' being printed to the console completeProcessingDots(); } } else { if (verboseLogging) {addLogEntry("Finished processing /delta JSON response from the OneDrive API", ["verbose"]);} } // If this was set, now unset it, as this will have been completed, so that for a true up, we dont do a double full scan if (appConfig.fullScanTrueUpRequired) { if (debugLogging) {addLogEntry("Unsetting fullScanTrueUpRequired as this has been performed", ["debug"]);} appConfig.fullScanTrueUpRequired = false; } // Cleanup deltaChanges as this is no longer needed deltaChanges = null; // Perform Garbage Collection GC.collect(); } else { // Why are we generating a /delta response if (debugLogging) { addLogEntry("Why are we generating a /delta response:", ["debug"]); addLogEntry(" singleDirectoryScope: " ~ to!string(singleDirectoryScope), ["debug"]); addLogEntry(" nationalCloudDeployment: " ~ to!string(nationalCloudDeployment), ["debug"]); addLogEntry(" cleanupLocalFiles: " ~ to!string(cleanupLocalFiles), ["debug"]); addLogEntry(" sharedFolderName: " ~ sharedFolderName, ["debug"]); } // What 'path' are we going to start generating the response for string pathToQuery; // If --single-directory has been called, use the value that has been set if (singleDirectoryScope) { pathToQuery = appConfig.getValueString("single_directory"); } // We could also be syncing a Shared Folder of some description - is this empty? if (!sharedFolderName.empty) { // We need to build 'pathToQuery' to support Shared Folders being anywhere in the directory structure (#2824) // Is the itemIdToQuery in the database? If this is not there, we cannot build the path if (itemDB.idInLocalDatabase(driveIdToQuery, itemIdToQuery)) { // The entries are in our DB, but we need to use our Drive details to compute the actual local path the the point of the 'remote' record and DB Tie Record Item remoteEntryItem; itemDB.selectByRemoteEntryByName(sharedFolderName, remoteEntryItem); // Use the 'remote' item type DB entry to calculate the local path of this item, which then will match the path online for this Shared Folder string computedLocalPathToQuery = computeItemPath(remoteEntryItem.driveId, remoteEntryItem.id); // If we have a computed path, use it, else use 'sharedFolderName' if (!computedLocalPathToQuery.empty) { // computedLocalPathToQuery is not empty pathToQuery = computedLocalPathToQuery; } else { // computedLocalPathToQuery is empty pathToQuery = sharedFolderName; } } else { // shared folder details are not even in the database ... fall back to this pathToQuery = sharedFolderName; } // At this point we have either calculated the shared folder path, or not and can attempt to generate a /delta response from that path entry online } // Generate the simulated /delta response // // The generated /delta response however contains zero deleted JSON items, so the only way that we can track this, is if the object was in sync // we have the object in the database, thus, what we need to do is for every DB object in the tree of items, flag 'syncStatus' as 'N', then when we process // the returned JSON items from the API, we flag the item as back in sync, then we can cleanup any out-of-sync items // // The flagging of the local database items to 'N' is handled within the generateDeltaResponse() function // // When these JSON items are then processed, if the item exists online, and is in the DB, and that the values match, the DB item is flipped back to 'Y' // This then allows the application to look for any remaining 'N' values, and delete these as no longer needed locally deltaChanges = generateDeltaResponse(pathToQuery); // deltaChanges must be a valid JSON object / array of data if (deltaChanges.type() == JSONType.object) { // How many changes were returned? long nrChanges = count(deltaChanges["value"].array); int changeCount = 0; if (debugLogging) {addLogEntry("API Response Bundle: " ~ to!string(responseBundleCount) ~ " - Quantity of 'changes|items' in this bundle to process: " ~ to!string(nrChanges), ["debug"]);} // Update the count of items received jsonItemsReceived = jsonItemsReceived + nrChanges; // The API response however cannot be run in parallel as the OneDrive API sends the JSON items in the order in which they must be processed auto jsonArrayToProcess = deltaChanges["value"].array; foreach (onedriveJSONItem; deltaChanges["value"].array) { // increment change count for this item changeCount++; // Process the received OneDrive object item JSON for this JSON bundle // When we generate a /delta response .. there is no currentDeltaLink value processDeltaJSONItem(onedriveJSONItem, nrChanges, changeCount, responseBundleCount, singleDirectoryScope); } // Clear up this data jsonArrayToProcess = null; // To finish off the JSON processing items, this is needed to reflect this in the log if (debugLogging) {addLogEntry(debugLogBreakType1, ["debug"]);} // Log that we have finished generating our self generated /delta response if (!appConfig.suppressLoggingOutput) { addLogEntry("Finished processing self generated /delta JSON response from the OneDrive API"); } } // Cleanup deltaChanges as this is no longer needed deltaChanges = null; // Perform Garbage Collection GC.collect(); } // Cleanup deltaChanges as this is no longer needed deltaChanges = null; // Perform Garbage Collection GC.collect(); // We have JSON items received from the OneDrive API if (debugLogging) { addLogEntry("Number of JSON Objects received from OneDrive API: " ~ to!string(jsonItemsReceived), ["debug"]); addLogEntry("Number of JSON Objects already processed (root and deleted items): " ~ to!string((jsonItemsReceived - jsonItemsToProcess.length)), ["debug"]); // We should have now at least processed all the JSON items as returned by the /delta call // Additionally, we should have a new array, that now contains all the JSON items we need to process that are non 'root' or deleted items addLogEntry("Number of JSON items submitted for further processing is: " ~ to!string(jsonItemsToProcess.length), ["debug"]); } // Are there items to process? if (jsonItemsToProcess.length > 0) { // Lets deal with the JSON items in a batch process size_t batchSize = 500; long batchCount = (jsonItemsToProcess.length + batchSize - 1) / batchSize; long batchesProcessed = 0; // Dynamic output for a non-verbose run so that the user knows something is happening if (!appConfig.suppressLoggingOutput) { addProcessingLogHeaderEntry("Processing " ~ to!string(jsonItemsToProcess.length) ~ " applicable JSON items received from Microsoft OneDrive", appConfig.verbosityCount); } // For each batch, process the JSON items that need to be now processed. // 'root' and deleted objects have already been handled foreach (batchOfJSONItems; jsonItemsToProcess.chunks(batchSize)) { // Chunk the total items to process into 500 lot items batchesProcessed++; if (appConfig.verbosityCount == 0) { // Dynamic output for a non-verbose run so that the user knows something is happening if (!appConfig.suppressLoggingOutput) { addProcessingDotEntry(); } } else { if (verboseLogging) {addLogEntry("Processing OneDrive JSON item batch [" ~ to!string(batchesProcessed) ~ "/" ~ to!string(batchCount) ~ "] to ensure consistent local state", ["verbose"]);} } // Process the batch processJSONItemsInBatch(batchOfJSONItems, batchesProcessed, batchCount); // To finish off the JSON processing items, this is needed to reflect this in the log if (debugLogging) {addLogEntry(debugLogBreakType1, ["debug"]);} // For this set of items, perform a DB PASSIVE checkpoint itemDB.performCheckpoint("PASSIVE"); } if (appConfig.verbosityCount == 0) { // close off '.' output if (!appConfig.suppressLoggingOutput) { // Close out the '....' being printed to the console completeProcessingDots(); } } // Debug output - what was processed if (debugLogging) { addLogEntry("Number of JSON items to process is: " ~ to!string(jsonItemsToProcess.length), ["debug"]); addLogEntry("Number of JSON items processed was: " ~ to!string(processedCount), ["debug"]); addLogEntry("", ["debug"]); string jsonProcessingCompleteLineEntry = format("Processing of JSON items from driveId %s and itemId %s is complete", driveIdToQuery, itemIdToQuery); addLogEntry(jsonProcessingCompleteLineEntry, ["debug"]); addLogEntry("", ["debug"]); } // Notification to user regarding number of objects received from OneDrive API if (jsonItemsReceived >= 300000) { // 'driveIdToQuery' should be the drive where the JSON responses came from string objectsExceedLimitWarning = format("WARNING: The number of objects stored online in '%s' exceeds Microsoft OneDrive's recommended limit. This may cause unreliable application behaviour due to inconsistent or incomplete API responses. Immediate action is strongly advised to avoid data integrity issues.", driveIdToQuery); addLogEntry(objectsExceedLimitWarning, ["info", "notify"]); } // Free up memory and items processed as it is pointless now having this data around jsonItemsToProcess = []; // Perform Garbage Collection on this destroyed curl engine GC.collect(); } else { if (!appConfig.suppressLoggingOutput) { addLogEntry("No changes or items that can be applied were discovered while processing the data received from Microsoft OneDrive"); } } // Keep the DriveDetailsCache array with unique entries only DriveDetailsCache cachedOnlineDriveData; if (!canFindDriveId(driveIdToQuery, cachedOnlineDriveData)) { // Add this driveId to the drive cache addOrUpdateOneDriveOnlineDetails(driveIdToQuery); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Process the /delta API JSON response items void processDeltaJSONItem(JSONValue onedriveJSONItem, long nrChanges, int changeCount, long responseBundleCount, bool singleDirectoryScope) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Variables for this JSON item string thisItemId; bool itemIsRoot = false; bool handleItemAsRootObject = false; bool itemIsDeletedOnline = false; bool itemHasParentReferenceId = false; bool itemHasParentReferencePath = false; bool itemIdMatchesDefaultRootId = false; bool itemNameExplicitMatchRoot = false; bool itemIsRemoteItem = false; string objectParentDriveId; string objectParentId; MonoTime jsonProcessingStartTime; // Debugging the processing start of the JSON item if (debugLogging) { addLogEntry(debugLogBreakType1, ["debug"]); jsonProcessingStartTime = MonoTime.currTime(); addLogEntry("Processing OneDrive Item " ~ to!string(changeCount) ~ " of " ~ to!string(nrChanges) ~ " from API Response Bundle " ~ to!string(responseBundleCount), ["debug"]); } // Issue #3336 - Convert driveId to lowercase if (appConfig.accountType == "personal") { // We must massage this raw JSON record to force the onedriveJSONItem["parentReference"]["driveId"] to lowercase if (hasParentReferenceDriveId(onedriveJSONItem)) { // This JSON record has a driveId we now must manipulate to lowercase string originalDriveIdValue = onedriveJSONItem["parentReference"]["driveId"].str; onedriveJSONItem["parentReference"]["driveId"] = transformToLowerCase(originalDriveIdValue); } } // Debug output of the raw JSON item we are processing if (debugLogging) { addLogEntry("Raw JSON OneDrive Item: " ~ sanitiseJSONItem(onedriveJSONItem), ["debug"]); } // What is this item's id thisItemId = onedriveJSONItem["id"].str; // Is this a deleted item - only calculate this once itemIsDeletedOnline = isItemDeleted(onedriveJSONItem); if (!itemIsDeletedOnline) { // This is not a deleted item if (debugLogging) {addLogEntry("This item is not a OneDrive online deletion change", ["debug"]);} // Only calculate these elements once itemIsRoot = isItemRoot(onedriveJSONItem); itemHasParentReferenceId = hasParentReferenceId(onedriveJSONItem); itemIdMatchesDefaultRootId = (thisItemId == appConfig.defaultRootId); itemNameExplicitMatchRoot = (onedriveJSONItem["name"].str == "root"); objectParentDriveId = onedriveJSONItem["parentReference"]["driveId"].str; if (itemHasParentReferenceId) { objectParentId = onedriveJSONItem["parentReference"]["id"].str; } itemIsRemoteItem = isItemRemote(onedriveJSONItem); // Test is this is the OneDrive Users Root? // Debug output of change evaluation items if (debugLogging) { addLogEntry("defaultRootId = " ~ appConfig.defaultRootId, ["debug"]); addLogEntry("thisItemName = " ~ onedriveJSONItem["name"].str, ["debug"]); addLogEntry("thisItemId = " ~ thisItemId, ["debug"]); addLogEntry("thisItemId == defaultRootId = " ~ to!string(itemIdMatchesDefaultRootId), ["debug"]); addLogEntry("isItemRoot(onedriveJSONItem) = " ~ to!string(itemIsRoot), ["debug"]); addLogEntry("onedriveJSONItem['name'].str == 'root' = " ~ to!string(itemNameExplicitMatchRoot), ["debug"]); addLogEntry("itemHasParentReferenceId = " ~ to!string(itemHasParentReferenceId), ["debug"]); addLogEntry("itemIsRemoteItem = " ~ to!string(itemIsRemoteItem), ["debug"]); } if ( (itemIdMatchesDefaultRootId || singleDirectoryScope) && itemIsRoot && itemNameExplicitMatchRoot) { // This IS a OneDrive Root item or should be classified as such in the case of 'singleDirectoryScope' if (debugLogging) {addLogEntry("JSON item will flagged as a 'root' item", ["debug"]);} handleItemAsRootObject = true; } } // How do we handle this JSON item from the OneDrive API? // Is this a confirmed 'root' item, has no Parent ID, or is a Deleted Item if (handleItemAsRootObject || !itemHasParentReferenceId || itemIsDeletedOnline){ // Is a root item, has no id in parentReference or is a OneDrive deleted item if (debugLogging) { addLogEntry("objectParentDriveId = " ~ objectParentDriveId, ["debug"]); addLogEntry("handleItemAsRootObject = " ~ to!string(handleItemAsRootObject), ["debug"]); addLogEntry("itemHasParentReferenceId = " ~ to!string(itemHasParentReferenceId), ["debug"]); addLogEntry("itemIsDeletedOnline = " ~ to!string(itemIsDeletedOnline), ["debug"]); addLogEntry("Handling change immediately as 'root item', or has no parent reference id or is a deleted item", ["debug"]); } // OK ... do something with this JSON post here .... processRootAndDeletedJSONItems(onedriveJSONItem, objectParentDriveId, handleItemAsRootObject, itemIsDeletedOnline, itemHasParentReferenceId); } else { // Do we need to update this RAW JSON from OneDrive? bool sharedFolderRenameCheck = false; // What account type is this? if (appConfig.accountType == "personal") { // flag this by default as we always sync personal shared folders by default sharedFolderRenameCheck = true; } else { // business | DocumentLibrary if (appConfig.getValueBool("sync_business_shared_items")) { // flag this sharedFolderRenameCheck = true; } } // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { objectParentDriveId = transformToLowerCase(objectParentDriveId); } // Do we check if this JSON needs updating? if ((objectParentDriveId != appConfig.defaultDriveId) && (sharedFolderRenameCheck)) { // Potentially need to update this JSON data if (debugLogging) {addLogEntry("Potentially need to update this source JSON .... need to check the database", ["debug"]);} // Check the DB for 'remote' objects, searching 'remoteDriveId' and 'remoteId' items for this remoteItem.driveId and remoteItem.id Item remoteDBItem; itemDB.selectByRemoteId(objectParentDriveId, thisItemId, remoteDBItem); // Is the data that was returned from the database what we are looking for? if ((remoteDBItem.remoteDriveId == objectParentDriveId) && (remoteDBItem.remoteId == thisItemId)) { // Yes, this is the record we are looking for if (debugLogging) {addLogEntry("DB Item response for remoteDBItem: " ~ to!string(remoteDBItem), ["debug"]);} // Must compare remoteDBItem.name with remoteItem.name if (remoteDBItem.name != onedriveJSONItem["name"].str) { // Update JSON Item string actualOnlineName = onedriveJSONItem["name"].str; if (debugLogging) { addLogEntry("Updating source JSON 'name' to that which is the actual local directory", ["debug"]); addLogEntry("onedriveJSONItem['name'] was: " ~ onedriveJSONItem["name"].str, ["debug"]); addLogEntry("Updating onedriveJSONItem['name'] to: " ~ remoteDBItem.name, ["debug"]); } onedriveJSONItem["name"] = remoteDBItem.name; if (debugLogging) {addLogEntry("onedriveJSONItem['name'] now: " ~ onedriveJSONItem["name"].str, ["debug"]);} // Add the original name to the JSON onedriveJSONItem["actualOnlineName"] = actualOnlineName; } } } // Do we discard this JSON item? bool discardDeltaJSONItem = false; // Microsoft OneNote container objects present neither folder or file but contain a 'package' element // "package": { // "type": "oneNote" // }, // Confirmed with Microsoft OneDrive Personal // Confirmed with Microsoft OneDrive Business if (isOneNotePackageFolder(onedriveJSONItem)) { // This JSON has this element if (verboseLogging) {addLogEntry("Skipping path - The Microsoft OneNote Notebook Package '" ~ generatePathFromJSONData(onedriveJSONItem) ~ "' is not supported by this client", ["verbose"]);} discardDeltaJSONItem = true; // Add this 'id' to onenotePackageIdentifiers as a future 'catch all' for any objects inside this container if (!onenotePackageIdentifiers.canFind(thisItemId)) { if (debugLogging) {addLogEntry("Adding 'thisItemId' to onenotePackageIdentifiers: " ~ to!string(thisItemId), ["debug"]);} onenotePackageIdentifiers ~= thisItemId; } } // Microsoft OneDrive OneNote file objects will report as files but have 'application/msonenote' or 'application/octet-stream' as their mime type and will not have any hash entry // Is there a 'file' JSON element and it has a 'mimeType' element? if (isItemFile(onedriveJSONItem) && hasMimeType(onedriveJSONItem)) { // Is the mimeType 'application/msonenote' or 'application/octet-stream' // However there is API inconsistency here between Personal and Business Accounts // Personal OneNote .onetoc2 and .one items all report mimeType as 'application/msonenote' // Business OneNote .onetoc2 and .one items however are different: // .one = 'application/msonenote' mimeType // .onetoc2 = 'application/octet-stream' mimeType if (isMicrosoftOneNoteMimeType1(onedriveJSONItem) || isMicrosoftOneNoteMimeType2(onedriveJSONItem)) { // We have a 'mimeType' match // What is the file extension? // .one (Type1) // .onetoc2 (Type2) if (isMicrosoftOneNoteFileExtensionType1(onedriveJSONItem) || isMicrosoftOneNoteFileExtensionType2(onedriveJSONItem)) { // Extreme confidence this JSON is a Microsoft OneNote file reference which cannot be supported // Log that this will be skipped as this this is a Microsoft OneNote item and unsupported if (verboseLogging) {addLogEntry("Skipping path - The Microsoft OneNote Notebook File '" ~ generatePathFromJSONData(onedriveJSONItem) ~ "' is not supported by this client", ["verbose"]);} discardDeltaJSONItem = true; // Add the Parent ID to onenotePackageIdentifiers if (itemHasParentReferenceId) { // Add this 'id' to onenotePackageIdentifiers as a future 'catch all' for any objects inside this container if (!onenotePackageIdentifiers.canFind(objectParentId)) { if (debugLogging) {addLogEntry("Adding 'objectParentId' to onenotePackageIdentifiers: " ~ to!string(objectParentId), ["debug"]);} onenotePackageIdentifiers ~= objectParentId; } } } } } // Microsoft OneDrive OneNote 'internal recycle bin' items are a 'folder' , with a 'size' but have a specific name 'OneNote_RecycleBin', for example: // { // .... // "fileSystemInfo": { // "createdDateTime": "2025-03-10T17:11:15Z", // "lastModifiedDateTime": "2025-03-10T17:11:15Z" // }, // "folder": { // "childCount": 2 // }, // "id": "XXXXX", // "lastModifiedBy": { // XXXXX // }, // "name": "OneNote_RecycleBin", // "parentReference": { // "driveId": "abcde", // "driveType": "business", // "id": "abcde", // "name": "PARENT NAME - ONENOTE PACKAGE NAME", // "path": "/drives/path/to/parent", // "siteId": "XXXXX" // }, // "size": 17468 // } // // The only way we can block this download is looking at the 'name' component if (onedriveJSONItem["name"].str == "OneNote_RecycleBin") { // Log that this will be skipped as this this is a Microsoft OneNote item and unsupported if (verboseLogging) {addLogEntry("Skipping path - The Microsoft OneNote Notebook Recycle Bin '" ~ generatePathFromJSONData(onedriveJSONItem) ~ "' is not supported by this client", ["verbose"]);} discardDeltaJSONItem = true; // Add the Parent ID to onenotePackageIdentifiers if (itemHasParentReferenceId) { // Add this 'id' to onenotePackageIdentifiers as a future 'catch all' for any objects inside this container if (!onenotePackageIdentifiers.canFind(objectParentId)) { if (debugLogging) {addLogEntry("Adding 'objectParentId' to onenotePackageIdentifiers: " ~ to!string(objectParentId), ["debug"]);} onenotePackageIdentifiers ~= objectParentId; } } } // If we are not self-generating a /delta response, check this initial /delta JSON bundle item against the basic checks // of applicability against 'skip_file', 'skip_dir' and 'sync_list' // We only do this if we did not generate a /delta response, as generateDeltaResponse() performs the checkJSONAgainstClientSideFiltering() // against elements as it is building the /delta compatible response // If we blindly just 'check again' all JSON responses then there is potentially double JSON processing going on if we used generateDeltaResponse() if (!generateSimulatedDeltaResponse) { // Did we already exclude? if (!discardDeltaJSONItem) { // Check applicability against 'skip_file', 'skip_dir' and 'sync_list' discardDeltaJSONItem = checkJSONAgainstClientSideFiltering(onedriveJSONItem); } } // Add this JSON item for further processing if this is not being discarded if (!discardDeltaJSONItem) { // If 'personal' account type, we must validate ["parentReference"]["driveId"] value in this raw JSON // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { string existingDriveIdEntry = onedriveJSONItem["parentReference"]["driveId"].str; string newDriveIdEntry; // Perform the required length test if (existingDriveIdEntry.length < 16) { // existingDriveIdEntry value is not 16 characters in length // Is this 'driveId' in this JSON a 15 character representation of our actual 'driveId' which we have already corrected? if (appConfig.defaultDriveId.canFind(existingDriveIdEntry)) { // The JSON provided value is our 'driveId' // Debug logging for correction if (debugLogging) {addLogEntry("ONEDRIVE PERSONAL API BUG (Issue #3072): The provided raw JSON ['parentReference']['driveId'] value is not 16 Characters in length - correcting with validated 'appConfig.defaultDriveId' value", ["debug"]);} newDriveIdEntry = appConfig.defaultDriveId; } else { // No match, potentially a Shared Folder ... // Debug logging for correction if (debugLogging) {addLogEntry("ONEDRIVE PERSONAL API BUG (Issue #3072): The provided raw JSON ['parentReference']['driveId'] value is not 16 Characters in length - padding with leading zero's", ["debug"]);} // Generate the change newDriveIdEntry = to!string(existingDriveIdEntry.padLeft('0', 16)); // Explicitly use padLeft for leading zero padding, leave case as-is } // Make the change to the JSON data before submit for further processing onedriveJSONItem["parentReference"]["driveId"] = newDriveIdEntry; } } // Add onedriveJSONItem to jsonItemsToProcess if (debugLogging) { addLogEntry("Adding this raw JSON OneDrive Item to jsonItemsToProcess array for further processing", ["debug"]); if (itemIsRemoteItem) { addLogEntry("- This JSON record represents a online remote folder, thus needs special handling when being processed further", ["debug"]); } } jsonItemsToProcess ~= onedriveJSONItem; } else { // detail we are discarding the json if (debugLogging) {addLogEntry("Discarding this raw JSON OneDrive Item as this has been determined to be unwanted", ["debug"]);} } } // How long to initially process this JSON item if (debugLogging) { Duration jsonProcessingElapsedTime = MonoTime.currTime() - jsonProcessingStartTime; addLogEntry("Initial JSON item processing time: " ~ to!string(jsonProcessingElapsedTime), ["debug"]); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Process 'root' and 'deleted' OneDrive JSON items void processRootAndDeletedJSONItems(JSONValue onedriveJSONItem, string driveId, bool handleItemAsRootObject, bool itemIsDeletedOnline, bool itemHasParentReferenceId) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Use the JSON elements rather can computing a DB struct via makeItem() string thisItemId = onedriveJSONItem["id"].str; string thisItemDriveId = onedriveJSONItem["parentReference"]["driveId"].str; // Check if the item has been seen before Item existingDatabaseItem; bool existingDBEntry = itemDB.selectById(thisItemDriveId, thisItemId, existingDatabaseItem); // Is the item deleted online? if(!itemIsDeletedOnline) { // Is the item a confirmed root object? // The JSON item should be considered a 'root' item if: // 1. Contains a ["root"] element // 2. Has no ["parentReference"]["id"] ... #323 & #324 highlighted that this is false as some 'root' shared objects now can have an 'id' element .. OneDrive API change // 2. Has no ["parentReference"]["path"] // 3. Was detected by an input flag as to be handled as a root item regardless of actual status if ((handleItemAsRootObject) || (!itemHasParentReferenceId)) { if (debugLogging) {addLogEntry("Handing JSON object as OneDrive 'root' object", ["debug"]);} if (!existingDBEntry) { // we have not seen this item before saveItem(onedriveJSONItem); } } } else { // Change is to delete an item if (debugLogging) {addLogEntry("Handing a OneDrive Online Deleted Item", ["debug"]);} // Is the deleted item in our database? if (existingDBEntry) { // Is the item to delete locally actually in sync with OneDrive currently? // What is the source of this item data? string itemSource = "online"; // Compute this deleted items path based on the database entries string localPathToDelete = computeItemPath(existingDatabaseItem.driveId, existingDatabaseItem.parentId) ~ "/" ~ existingDatabaseItem.name; if (isItemSynced(existingDatabaseItem, localPathToDelete, itemSource)) { // Flag to delete if (debugLogging) {addLogEntry("Flagging to delete item locally due to online deletion event: " ~ to!string(onedriveJSONItem), ["debug"]);} // Use the DB entries returned - add the driveId, itemId and parentId values to the array idsToDelete ~= [existingDatabaseItem.driveId, existingDatabaseItem.id, existingDatabaseItem.parentId]; } else { // Local item is not in sync with the online item, but the online item has been deleted, and we are flagging to delete the local item // We need to determine the trigger for isItemSynced() returning false before we determine if we should make utilise safeBackup() // Is this the exact same file? // Test the file hash against the hash of the file online // Empirical evidence shows that Microsoft do not provide a 'valid' hash in JSON data for online deleted items, for example: // file":{"hashes":{"quickXorHash":"AAAAAAAAAAAAAAAAAAAAAAAAAAA="}}, // Thus this makes using the provided data via the API useless for a hash comparison test // Test the existing database item hash against the hash on the local disk - as this is what we know was in-sync with online prior to online deletion event if (!testFileHash(localPathToDelete, existingDatabaseItem)) { // Current file on disk is different by hash / content // If local data protection is configured (bypassDataPreservation = false), safeBackup the local file, passing in if we are performing a --dry-run or not // In case the renamed path is needed string renamedPath; safeBackup(localPathToDelete, dryRun, bypassDataPreservation, renamedPath); // Purge the old record from the database as this still exists. The safeBackup() generated file now will be 'new' on the local filesystem itemDB.deleteById(existingDatabaseItem.driveId, existingDatabaseItem.id); } else { // Hash is the same, we can assume the isItemSynced() returning false was due to some sort of timestamp issue // Flag to delete rather than create a backup of the local file if (debugLogging) {addLogEntry("Flagging to delete item locally due to online deletion event: " ~ to!string(onedriveJSONItem), ["debug"]);} // Use the DB entries returned - add the driveId, itemId and parentId values to the array idsToDelete ~= [existingDatabaseItem.driveId, existingDatabaseItem.id, existingDatabaseItem.parentId]; } } } else { // Flag to ignore if (debugLogging) {addLogEntry("Flagging item to skip: " ~ to!string(onedriveJSONItem), ["debug"]);} skippedItems.insert(thisItemId); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Process each of the elements contained in jsonItemsToProcess[] void processJSONItemsInBatch(JSONValue[] array, long batchGroup, long batchCount) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } long batchElementCount = array.length; MonoTime jsonProcessingStartTime; foreach (i, onedriveJSONItem; array.enumerate) { // Use the JSON elements rather can computing a DB struct via makeItem() long elementCount = i +1; jsonProcessingStartTime = MonoTime.currTime(); // To show this is the processing for this particular item, start off with this breaker line if (debugLogging) { addLogEntry(debugLogBreakType1, ["debug"]); addLogEntry("Processing OneDrive JSON item " ~ to!string(elementCount) ~ " of " ~ to!string(batchElementCount) ~ " as part of JSON Item Batch " ~ to!string(batchGroup) ~ " of " ~ to!string(batchCount), ["debug"]); addLogEntry("Raw JSON OneDrive Item (Batched Item): " ~ to!string(onedriveJSONItem), ["debug"]); } // Configure required items from the JSON elements string thisItemId = onedriveJSONItem["id"].str; string thisItemDriveId = onedriveJSONItem["parentReference"]["driveId"].str; string thisItemParentId = onedriveJSONItem["parentReference"]["id"].str; string thisItemName = onedriveJSONItem["name"].str; // Create an empty item struct for an existing DB item Item existingDatabaseItem; // Do we NOT want this item? bool unwanted = false; // meaning by default we will WANT this item // Is this parent is in the database bool parentInDatabase = false; // Is this the 'root' folder of a Shared Folder bool rootSharedFolder = false; // What is the full path of the new item string computedItemPath; string newItemPath; // Configure the remoteItem - so if it is used, it can be utilised later Item remoteItem; // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { thisItemDriveId = transformToLowerCase(thisItemDriveId); } // Check the database for an existing entry for this JSON item bool existingDBEntry = itemDB.selectById(thisItemDriveId, thisItemId, existingDatabaseItem); // Calculate if the Parent Item is in the database so that it can be re-used parentInDatabase = itemDB.idInLocalDatabase(thisItemDriveId, thisItemParentId); // Calculate the local path of this JSON item, but we can only do this if the parent is in the database if (parentInDatabase) { // Compute the full local path for an item based on its position within the OneDrive hierarchy // This also accounts for Shared Folders in our account root, plus Shared Folders in a folder (relocated shared folders) computedItemPath = computeItemPath(thisItemDriveId, thisItemParentId); // Is 'thisItemParentId' in the DB as a 'root' object? Item databaseItem; // Is this a remote drive? if (thisItemDriveId != appConfig.defaultDriveId) { // query the database for the actual thisItemParentId record itemDB.selectById(thisItemDriveId, thisItemParentId, databaseItem); } // Calculate newItemPath to // This needs to factor in: // - Shared Folders = ItemType.root with a name of 'root' // - SharePoint Document Root = ItemType.root with a name of the actual shared folder // - Relocatable Shared Folders where a user moves a Shared Folder Link to a sub folder elsewhere within their directory structure online if (databaseItem.type == ItemType.root) { // 'root' database object if (databaseItem.name == "root") { // OneDrive Business Shared Folder 'root' shortcut link // If the record type is now a root record, we dont want to add the name to itself newItemPath = computedItemPath; } else { // OneDrive Business SharePoint Document 'root' shortcut link if (databaseItem.name == thisItemName) { // If the record type is now a root record, we dont want to add the name to itself newItemPath = computedItemPath; } else { // add the item name to the computed path newItemPath = computedItemPath ~ "/" ~ thisItemName; } } // Set this for later use rootSharedFolder = true; } else { // Add the item name to the computed path newItemPath = computedItemPath ~ "/" ~ thisItemName; } // debug logging of what was calculated if (debugLogging) {addLogEntry("JSON Item calculated full path is: " ~ newItemPath, ["debug"]);} } else { // Parent not in the database // Is the parent a 'folder' from another user? ie - is this a 'shared folder' that has been shared with us? // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { thisItemDriveId = transformToLowerCase(thisItemDriveId); } // Lets determine why? if (thisItemDriveId == appConfig.defaultDriveId) { // Parent path does not exist - flagging as unwanted if (debugLogging) {addLogEntry("Flagging as unwanted: thisItemDriveId (" ~ thisItemDriveId ~ "), thisItemParentId (" ~ thisItemParentId ~ ") not in local database", ["debug"]);} // Was this a skipped item? if (thisItemParentId in skippedItems) { // Parent is a skipped item if (debugLogging) {addLogEntry("Reason: thisItemParentId listed within skippedItems", ["debug"]);} } else { // Parent is not in the database, as we are not creating it if (debugLogging) {addLogEntry("Reason: Parent ID is not in the DB .. ", ["debug"]);} } // Flag as unwanted unwanted = true; } else { // Format the OneDrive change into a consumable object for the database remoteItem = makeItem(onedriveJSONItem); // Edge case as the parent (from another users OneDrive account) will never be in the database - potentially a shared object? if (debugLogging) { addLogEntry("The reported parentId is not in the database. This potentially is a shared folder as 'remoteItem.driveId' != 'appConfig.defaultDriveId'. Relevant Details: remoteItem.driveId (" ~ remoteItem.driveId ~ "), remoteItem.parentId (" ~ remoteItem.parentId ~ ")", ["debug"]); addLogEntry("Potential Shared Object JSON: " ~ sanitiseJSONItem(onedriveJSONItem), ["debug"]); } // What account type is this? if (appConfig.accountType == "personal") { // Personal Account Handling if (debugLogging) {addLogEntry("Handling a Personal Shared Item JSON object", ["debug"]);} // Does the JSON have a shared element structure if (hasSharedElement(onedriveJSONItem)) { // Has the Shared JSON structure if (debugLogging) {addLogEntry("Personal Shared Item JSON object has the 'shared' JSON structure", ["debug"]);} // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(onedriveJSONItem); } else { // The Shared JSON structure is missing ..... if (debugLogging) {addLogEntry("Personal Shared Item JSON object is MISSING the 'shared' JSON structure ... API BUG ?", ["debug"]);} } // Ensure that this item has no parent if (debugLogging) {addLogEntry("Setting remoteItem.parentId of Personal Shared Item JSON object to be null", ["debug"]);} remoteItem.parentId = null; // Add this record to the local database if (debugLogging) {addLogEntry("Update/Insert local database with Personal Shared Item JSON object with remoteItem.parentId as null: " ~ to!string(remoteItem), ["debug"]);} itemDB.upsert(remoteItem); // Due to OneDrive API inconsistency with Personal Accounts, again with European Data Centres, as we have handled this JSON - flag as unwanted as processing is complete for this JSON item unwanted = true; } else { // Business or SharePoint Account Handling if (debugLogging) {addLogEntry("Handling a Business or SharePoint Shared Item JSON object", ["debug"]);} if (appConfig.accountType == "business") { // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(onedriveJSONItem); // Ensure that this item has no parent if (debugLogging) {addLogEntry("Setting remoteItem.parentId to be null", ["debug"]);} remoteItem.parentId = null; // Check the DB for 'remote' objects, searching 'remoteDriveId' and 'remoteId' items for this remoteItem.driveId and remoteItem.id Item remoteDBItem; itemDB.selectByRemoteId(remoteItem.driveId, remoteItem.id, remoteDBItem); // Must compare remoteDBItem.name with remoteItem.name if ((!remoteDBItem.name.empty) && (remoteDBItem.name != remoteItem.name)) { // Update DB Item if (debugLogging) { addLogEntry("The shared item stored in OneDrive, has a different name to the actual name on the remote drive", ["debug"]); addLogEntry("Updating remoteItem.name JSON data with the actual name being used on account drive and local folder", ["debug"]); addLogEntry("remoteItem.name was: " ~ remoteItem.name, ["debug"]); addLogEntry("Updating remoteItem.name to: " ~ remoteDBItem.name, ["debug"]); } remoteItem.name = remoteDBItem.name; if (debugLogging) {addLogEntry("Setting remoteItem.remoteName to: " ~ onedriveJSONItem["name"].str, ["debug"]);} // Update JSON Item remoteItem.remoteName = onedriveJSONItem["name"].str; if (debugLogging) { addLogEntry("Updating source JSON 'name' to that which is the actual local directory", ["debug"]); addLogEntry("onedriveJSONItem['name'] was: " ~ onedriveJSONItem["name"].str, ["debug"]); addLogEntry("Updating onedriveJSONItem['name'] to: " ~ remoteDBItem.name, ["debug"]); } onedriveJSONItem["name"] = remoteDBItem.name; if (debugLogging) {addLogEntry("onedriveJSONItem['name'] now: " ~ onedriveJSONItem["name"].str, ["debug"]);} // Update newItemPath value newItemPath = computeItemPath(thisItemDriveId, thisItemParentId) ~ "/" ~ remoteDBItem.name; if (debugLogging) {addLogEntry("New Item updated calculated full path is: " ~ newItemPath, ["debug"]);} } // Add this record to the local database if (debugLogging) {addLogEntry("Update/Insert local database with remoteItem details: " ~ to!string(remoteItem), ["debug"]);} itemDB.upsert(remoteItem); } else { // Sharepoint account type addLogEntry("Handling a SharePoint Shared Item JSON object - NOT IMPLEMENTED YET ........ RAISE A BUG PLEASE", ["info"]); } } } } // Check the skippedItems array for the parent id of this JSONItem if this is something we need to skip if (!unwanted) { if (thisItemParentId in skippedItems) { // Flag this JSON item as unwanted if (debugLogging) {addLogEntry("Flagging as unwanted: find(thisItemParentId).length != 0", ["debug"]);} unwanted = true; // Is this item id in the database? if (existingDBEntry) { // item exists in database, most likely moved out of scope for current client configuration if (debugLogging) {addLogEntry("This item was previously synced / seen by the client", ["debug"]);} if (("name" in onedriveJSONItem["parentReference"]) != null) { // How is this item now out of scope? // is sync_list configured if (syncListConfigured) { // sync_list configured and in use if (selectiveSync.isPathExcludedViaSyncList(onedriveJSONItem["parentReference"]["name"].str)) { // Previously synced item is now out of scope as it has been moved out of what is included in sync_list if (debugLogging) {addLogEntry("This previously synced item is now excluded from being synced due to sync_list exclusion", ["debug"]);} } } // flag to delete local file as it now is no longer in sync with OneDrive if (verboseLogging) {addLogEntry("Flagging to delete item locally as this is now an unwanted item (parental exclusion) and the item currently exists in the local database: ", ["verbose"]);} // Use the configured values - add the driveId, itemId and parentId values to the array idsToDelete ~= [thisItemDriveId, thisItemId, thisItemParentId]; } } } } // Check the item type - if it not an item type that we support, we cant process the JSON item if (!unwanted) { if (isItemFile(onedriveJSONItem)) { if (debugLogging) {addLogEntry("The JSON item we are processing is a file", ["debug"]);} } else if (isItemFolder(onedriveJSONItem)) { if (debugLogging) {addLogEntry("The JSON item we are processing is a folder", ["debug"]);} } else if (isItemRemote(onedriveJSONItem)) { if (debugLogging) {addLogEntry("The JSON item we are processing is a remote item", ["debug"]);} } else { // Why was this unwanted? if (newItemPath.empty) { if (debugLogging) {addLogEntry("OOPS: newItemPath is empty ....... need to calculate it", ["debug"]);} // Compute this item path & need the full path for this file newItemPath = computeItemPath(thisItemDriveId, thisItemParentId) ~ "/" ~ thisItemName; if (debugLogging) {addLogEntry("New Item calculated full path is: " ~ newItemPath, ["debug"]);} } // Microsoft OneNote container objects present as neither folder or file but has file size if ((!isItemFile(onedriveJSONItem)) && (!isItemFolder(onedriveJSONItem)) && (hasFileSize(onedriveJSONItem))) { // Log that this was skipped as this was a Microsoft OneNote item and unsupported if (verboseLogging) {addLogEntry("The Microsoft OneNote Notebook '" ~ newItemPath ~ "' is not supported by this client", ["verbose"]);} } else { // Log that this item was skipped as unsupported if (verboseLogging) {addLogEntry("The OneDrive item '" ~ newItemPath ~ "' is not supported by this client", ["verbose"]);} } unwanted = true; if (debugLogging) {addLogEntry("Flagging as unwanted: item type is not supported", ["debug"]);} } } // Check if this is excluded by config option: skip_dir if (!unwanted) { // Only check path if config is != "" if (!appConfig.getValueString("skip_dir").empty) { // Is the item a folder or a remote item? (which itself is a directory, but is missing the 'folder' JSON element we use to determine JSON being a directory or not) if ((isItemFolder(onedriveJSONItem)) || (isRemoteFolderItem(onedriveJSONItem))) { // work out the 'snippet' path where this folder would be created string simplePathToCheck = ""; string complexPathToCheck = ""; string matchDisplay = ""; if (hasParentReference(onedriveJSONItem)) { // we need to workout the FULL path for this item // simple path calculation if (("name" in onedriveJSONItem["parentReference"]) != null) { // how do we build the simplePathToCheck path up ? // did we flag this as the root shared folder object earlier? if (rootSharedFolder) { // just use item name simplePathToCheck = onedriveJSONItem["name"].str; } else { // add parent name to item name simplePathToCheck = onedriveJSONItem["parentReference"]["name"].str ~ "/" ~ onedriveJSONItem["name"].str; } } else { // just use item name simplePathToCheck = onedriveJSONItem["name"].str; } if (debugLogging) {addLogEntry("skip_dir path to check (simple): " ~ simplePathToCheck, ["debug"]);} // complex path calculation if (parentInDatabase) { // build up complexPathToCheck complexPathToCheck = buildNormalizedPath(newItemPath); } else { if (debugLogging) {addLogEntry("Parent details not in database - unable to compute complex path to check", ["debug"]);} } if (!complexPathToCheck.empty) { if (debugLogging) {addLogEntry("skip_dir path to check (complex): " ~ complexPathToCheck, ["debug"]);} } } else { simplePathToCheck = onedriveJSONItem["name"].str; } // If 'simplePathToCheck' or 'complexPathToCheck' is of the following format: root:/folder // then isDirNameExcluded matching will not work if (simplePathToCheck.canFind(":")) { if (debugLogging) {addLogEntry("Updating simplePathToCheck to remove 'root:'", ["debug"]);} simplePathToCheck = processPathToRemoveRootReference(simplePathToCheck); } if (complexPathToCheck.canFind(":")) { if (debugLogging) {addLogEntry("Updating complexPathToCheck to remove 'root:'", ["debug"]);} complexPathToCheck = processPathToRemoveRootReference(complexPathToCheck); } // OK .. what checks are we doing? if ((!simplePathToCheck.empty) && (complexPathToCheck.empty)) { // just a simple check if (debugLogging) {addLogEntry("Performing a simple check only", ["debug"]);} unwanted = selectiveSync.isDirNameExcluded(simplePathToCheck); } else { // simple and complex if (debugLogging) {addLogEntry("Performing a simple then complex path match if required", ["debug"]);} // simple first if (debugLogging) {addLogEntry("Performing a simple check first", ["debug"]);} unwanted = selectiveSync.isDirNameExcluded(simplePathToCheck); matchDisplay = simplePathToCheck; if (!unwanted) { // simple didnt match, perform a complex check if (debugLogging) {addLogEntry("Simple match was false, attempting complex match", ["debug"]);} unwanted = selectiveSync.isDirNameExcluded(complexPathToCheck); matchDisplay = complexPathToCheck; } } // result if (debugLogging) {addLogEntry("skip_dir exclude result (directory based): " ~ to!string(unwanted), ["debug"]);} if (unwanted) { // This path should be skipped if (verboseLogging) {addLogEntry("Skipping path - excluded by skip_dir config: " ~ matchDisplay, ["verbose"]);} } } // Is the item a file? // We need to check to see if this files path is excluded as well if (isItemFile(onedriveJSONItem)) { string pathToCheck; // does the newItemPath start with '/'? if (!startsWith(newItemPath, "/")){ // path does not start with '/', but we need to check skip_dir entries with and without '/' // so always make sure we are checking a path with '/' pathToCheck = '/' ~ dirName(newItemPath); } else { pathToCheck = dirName(newItemPath); } // perform the check unwanted = selectiveSync.isDirNameExcluded(pathToCheck); // result if (debugLogging) {addLogEntry("skip_dir exclude result (file based): " ~ to!string(unwanted), ["debug"]);} if (unwanted) { // this files path should be skipped if (verboseLogging) {addLogEntry("Skipping file - file path is excluded by skip_dir config: " ~ newItemPath, ["verbose"]);} } } } } // Check if this is excluded by config option: skip_file if (!unwanted) { // Is the JSON item a file? if (isItemFile(onedriveJSONItem)) { // skip_file can contain 4 types of entries: // - wildcard - *.txt // - text + wildcard - name*.txt // - full path + combination of any above two - /path/name*.txt // - full path to file - /path/to/file.txt // is the parent id in the database? if (parentInDatabase) { // Compute this item path & need the full path for this file if (newItemPath.empty) { if (debugLogging) {addLogEntry("OOPS: newItemPath is empty ....... need to calculate it", ["debug"]);} newItemPath = computeItemPath(thisItemDriveId, thisItemParentId) ~ "/" ~ thisItemName; if (debugLogging) {addLogEntry("New Item calculated full path is: " ~ newItemPath, ["debug"]);} } // The path that needs to be checked needs to include the '/' // This due to if the user has specified in skip_file an exclusive path: '/path/file' - that is what must be matched // However, as 'path' used throughout, use a temp variable with this modification so that we use the temp variable for exclusion checks string exclusionTestPath = ""; if (!startsWith(newItemPath, "/")){ // Add '/' to the path exclusionTestPath = '/' ~ newItemPath; } if (debugLogging) {addLogEntry("skip_file item to check: " ~ exclusionTestPath, ["debug"]);} unwanted = selectiveSync.isFileNameExcluded(exclusionTestPath); if (debugLogging) {addLogEntry("Result: " ~ to!string(unwanted), ["debug"]);} if (unwanted) { if (verboseLogging) {addLogEntry("Skipping file - excluded by skip_file config: " ~ thisItemName, ["verbose"]);} } } else { // parent id is not in the database unwanted = true; if (verboseLogging) {addLogEntry("Skipping file - parent path not present in local database", ["verbose"]);} } } } // Check if this is included or excluded by use of sync_list if (!unwanted) { // No need to try and process something against a sync_list if it has been configured if (syncListConfigured) { // Compute the item path if empty - as to check sync_list we need an actual path to check if (newItemPath.empty) { // Calculate this items path if (debugLogging) {addLogEntry("OOPS: newItemPath is empty ....... need to calculate it", ["debug"]);} newItemPath = computeItemPath(thisItemDriveId, thisItemParentId) ~ "/" ~ thisItemName; if (debugLogging) {addLogEntry("New Item calculated full path is: " ~ newItemPath, ["debug"]);} } // What path are we checking? if (debugLogging) {addLogEntry("Path to check against 'sync_list' entries: " ~ newItemPath, ["debug"]);} // Unfortunately there is no avoiding this call to check if the path is excluded|included via sync_list if (selectiveSync.isPathExcludedViaSyncList(newItemPath)) { // selective sync advised to skip, however is this a file and are we configured to upload / download files in the root? if ((isItemFile(onedriveJSONItem)) && (appConfig.getValueBool("sync_root_files")) && (rootName(newItemPath) == "") ) { // This is a file // We are configured to sync all files in the root // This is a file in the logical root unwanted = false; } else { // path is unwanted - excluded by 'sync_list' unwanted = true; if (verboseLogging) {addLogEntry("Skipping path - excluded by sync_list config: " ~ newItemPath, ["verbose"]);} // flagging to skip this item now, but does this exist in the DB thus needs to be removed / deleted? if (existingDBEntry) { // flag to delete if (verboseLogging) {addLogEntry("Flagging to delete item locally as this is now an unwanted item (sync_list exclusion) and the item currently exists in the local database: ", ["verbose"]);} // Use the configured values - add the driveId, itemId and parentId values to the array idsToDelete ~= [thisItemDriveId, thisItemId, thisItemParentId]; } } } } } // Check if the user has configured to skip downloading .files or .folders: skip_dotfiles if (!unwanted) { if (appConfig.getValueBool("skip_dotfiles")) { if (isDotFile(newItemPath)) { if (verboseLogging) {addLogEntry("Skipping item - .file or .folder: " ~ newItemPath, ["verbose"]);} unwanted = true; } } } // Check if this should be skipped due to a --check-for-nosync directive (.nosync)? if (!unwanted) { if (appConfig.getValueBool("check_nosync")) { // need the parent path for this object string parentPath = dirName(newItemPath); // Check for the presence of a .nosync in the parent path if (exists(parentPath ~ "/.nosync")) { if (verboseLogging) {addLogEntry("Skipping downloading item - .nosync found in parent folder & --check-for-nosync is enabled: " ~ newItemPath, ["verbose"]);} unwanted = true; } } } // Check if this is excluded by a user set maximum filesize to download if (!unwanted) { if (isItemFile(onedriveJSONItem)) { if (fileSizeLimit != 0) { if (onedriveJSONItem["size"].integer >= fileSizeLimit) { if (verboseLogging) {addLogEntry("Skipping file - excluded by skip_size config: " ~ thisItemName ~ " (" ~ to!string(onedriveJSONItem["size"].integer/2^^20) ~ " MB)", ["verbose"]);} unwanted = true; } } } } // At this point all the applicable checks on this JSON object from OneDrive are complete: // - skip_file // - skip_dir // - sync_list // - skip_dotfiles // - check_nosync // - skip_size // - We know if this item exists in the DB or not in the DB // We know if this JSON item is unwanted or not if (unwanted) { // This JSON item is NOT wanted - it is excluded if (debugLogging) {addLogEntry("Skipping OneDrive JSON item as this is determined to be unwanted either through Client Side Filtering Rules or prior processing to this point", ["debug"]);} // Add to the skippedItems array, but only if it is a directory ... pointless adding 'files' here, as it is the 'id' we check as the parent path which can only be a directory if (!isItemFile(onedriveJSONItem)) { skippedItems.insert(thisItemId); } } else { // This JSON item is wanted - we need to process this JSON item further if (debugLogging) { addLogEntry("OneDrive JSON item passed all applicable Client Side Filtering Rules and has been determined this is a wanted item", ["debug"]); addLogEntry("Creating newDatabaseItem object using the provided JSON data", ["debug"]); } // Take the JSON item and create a consumable object for eventual database insertion Item newDatabaseItem = makeItem(onedriveJSONItem); if (existingDBEntry) { // The details of this JSON item are already in the DB // Is the item in the DB the same as the JSON data provided - or is the JSON data advising this is an updated file? if (debugLogging) {addLogEntry("OneDrive JSON item is an update to an existing local item", ["debug"]);} // Compute the existing item path // NOTE: // string existingItemPath = computeItemPath(existingDatabaseItem.driveId, existingDatabaseItem.id); // // This will calculate the path as follows: // // existingItemPath: Document.txt // // Whereas above we use the following // // newItemPath = computeItemPath(newDatabaseItem.driveId, newDatabaseItem.parentId) ~ "/" ~ newDatabaseItem.name; // // Which generates the following path: // // changedItemPath: ./Document.txt // // Need to be consistent here with how 'newItemPath' was calculated string queryDriveID; string queryParentID; // Must query with a valid driveid entry if (existingDatabaseItem.driveId.empty) { queryDriveID = thisItemDriveId; } else { queryDriveID = existingDatabaseItem.driveId; } // Must query with a valid parentid entry if (existingDatabaseItem.parentId.empty) { queryParentID = thisItemParentId; } else { queryParentID = existingDatabaseItem.parentId; } // Calculate the existing path string existingItemPath = computeItemPath(queryDriveID, queryParentID) ~ "/" ~ existingDatabaseItem.name; if (debugLogging) {addLogEntry("existingItemPath calculated full path is: " ~ existingItemPath, ["debug"]);} // Ensure that this path exists if this is an 'existing' database item if (existingDatabaseItem.type == ItemType.dir) { if (!exists(existingItemPath)) { handleLocalDirectoryCreation(existingDatabaseItem, existingItemPath, onedriveJSONItem); } } // Attempt to apply this changed item applyPotentiallyChangedItem(existingDatabaseItem, existingItemPath, newDatabaseItem, newItemPath, onedriveJSONItem); // Is this JSON object a 'remote' item? if(isItemRemote(onedriveJSONItem)) { // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(onedriveJSONItem); } } else { // Action this JSON item as a new item as we have no DB record of it // The actual item may actually exist locally already, meaning that just the database is out-of-date or missing the data due to --resync // But we also cannot compute the newItemPath as the parental objects may not exist as well if (debugLogging) {addLogEntry("OneDrive JSON item is potentially a new local item", ["debug"]);} // Attempt to apply this potentially new item applyPotentiallyNewLocalItem(newDatabaseItem, onedriveJSONItem, newItemPath); } } // How long to process this JSON item in batch if (debugLogging) { Duration jsonProcessingElapsedTime = MonoTime.currTime() - jsonProcessingStartTime; addLogEntry("Batched JSON item processing time: " ~ to!string(jsonProcessingElapsedTime), ["debug"]); } // Tracking as to if this item was processed processedCount++; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform the download of any required objects in parallel void processDownloadActivities() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Are there any items to delete locally? Cleanup space locally first if (!idsToDelete.empty) { // There are elements that potentially need to be deleted locally if (verboseLogging) {addLogEntry("Items to potentially delete locally: " ~ to!string(idsToDelete.length), ["verbose"]);} if (appConfig.getValueBool("download_only")) { // Download only has been configured if (cleanupLocalFiles) { // Process online deleted items if (verboseLogging) {addLogEntry("Processing local deletion activity as --download-only & --cleanup-local-files configured", ["verbose"]);} processDeleteItems(); } else { // Not cleaning up local files if (verboseLogging) {addLogEntry("Skipping local deletion activity as --download-only has been used", ["verbose"]);} // List files and directories we are not deleting locally listDeletedItems(); } } else { // Not using --download-only process normally processDeleteItems(); } // Cleanup array memory idsToDelete = []; } // Are there any items to download post fetching and processing the /delta data? if (!fileJSONItemsToDownload.empty) { // There are elements to download addLogEntry("Number of items to download from Microsoft OneDrive: " ~ to!string(fileJSONItemsToDownload.length)); downloadOneDriveItems(); // Cleanup array memory fileJSONItemsToDownload = []; } // Are there any skipped items still? if (!skippedItems.empty) { // Cleanup array memory skippedItems.clear(); } // If deltaLinkCache.latestDeltaLink is not empty, update the deltaLink in the database for this driveId so that we can reuse this now that jsonItemsToProcess has been fully processed if (!deltaLinkCache.latestDeltaLink.empty) { if (debugLogging) {addLogEntry("Updating completed deltaLink for driveID " ~ deltaLinkCache.driveId ~ " in DB to: " ~ deltaLinkCache.latestDeltaLink, ["debug"]);} itemDB.setDeltaLink(deltaLinkCache.driveId, deltaLinkCache.itemId, deltaLinkCache.latestDeltaLink); // Now that the DB is updated, when we perform the last examination of the most recent online data, cache this so this can be obtained this from memory cacheLatestDeltaLink(deltaLinkInfo, deltaLinkCache.driveId, deltaLinkCache.latestDeltaLink); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Function to add or update a key pair in the deltaLinkInfo array void cacheLatestDeltaLink(ref DeltaLinkInfo deltaLinkInfo, string driveId, string latestDeltaLink) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } if (driveId !in deltaLinkInfo) { if (debugLogging) {addLogEntry("Added new latestDeltaLink entry: " ~ driveId ~ " -> " ~ latestDeltaLink, ["debug"]);} } else { if (debugLogging) {addLogEntry("Updated latestDeltaLink entry for " ~ driveId ~ " from " ~ deltaLinkInfo[driveId] ~ " to " ~ latestDeltaLink, ["debug"]);} } deltaLinkInfo[driveId] = latestDeltaLink; // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Function to get the latestDeltaLink based on driveId string getDeltaLinkFromCache(ref DeltaLinkInfo deltaLinkInfo, string driveId) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } string cachedDeltaLink; if (driveId in deltaLinkInfo) { cachedDeltaLink = deltaLinkInfo[driveId]; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return value return cachedDeltaLink; } // If the JSON item is not in the database, it is potentially a new item that we need to action void applyPotentiallyNewLocalItem(Item newDatabaseItem, JSONValue onedriveJSONItem, string newItemPath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Due to this function, we need to keep the 'return' code as-is, so that this function operates as efficiently as possible. // Whilst this means some extra code / duplication in this function, it cannot be helped // The JSON and Database items being passed in here have passed the following checks: // - skip_file // - skip_dir // - sync_list // - skip_dotfiles // - check_nosync // - skip_size // - Is not currently cached in the local database // As such, we should not be doing any other checks here to determine if the JSON item is wanted .. it is if (exists(newItemPath)) { if (debugLogging) {addLogEntry("Path on local disk already exists", ["debug"]);} // Issue #2209 fix - test if path is a bad symbolic link if (isSymlink(newItemPath)) { if (debugLogging) {addLogEntry("Path on local disk is a symbolic link ........", ["debug"]);} if (!exists(readLink(newItemPath))) { // reading the symbolic link failed if (debugLogging) {addLogEntry("Reading the symbolic link target failed ........ ", ["debug"]);} addLogEntry("Skipping item - invalid symbolic link: " ~ newItemPath, ["info", "notify"]); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return - invalid symbolic link return; } } // Path exists locally, is not a bad symbolic link // Test if this item is actually in-sync // What is the source of this item data? string itemSource = "remote"; if (isItemSynced(newDatabaseItem, newItemPath, itemSource)) { // Issue #3115 - Personal Account Shared Folder // What account type is this? if (appConfig.accountType == "personal") { // Is this a 'remote' DB record if (newDatabaseItem.type == ItemType.remote) { // Issue #3136, #3139 #3143 // Fetch the actual online record for this item // This returns the 'actual' OneDrive Personal driveId value and is 15 character checked string actualOnlineDriveId = testProvidedDriveIdForLengthIssue(fetchRealOnlineDriveIdentifier(newDatabaseItem.remoteDriveId)); newDatabaseItem.remoteDriveId = actualOnlineDriveId; } } // Item details from OneDrive and local item details in database are in-sync if (debugLogging) { addLogEntry("The item to sync is already present on the local filesystem and is in-sync with what is reported online", ["debug"]); addLogEntry("Update/Insert local database with item details: " ~ to!string(newDatabaseItem), ["debug"]); } // Add item to database itemDB.upsert(newDatabaseItem); // With the 'newDatabaseItem' saved to the database, regardless of --dry-run situation - was that new database item a 'remote' item? // If this is this a 'Shared Folder' item - ensure we have created / updated any relevant Database Tie Records // This should be applicable for all account types if (newDatabaseItem.type == ItemType.remote) { // yes this is a remote item type if (debugLogging) {addLogEntry("The 'newDatabaseItem' (applyPotentiallyNewLocalItem) is a remote item type - we need to create all of the associated database tie records for this database entry" , ["debug"]);} string relocatedFolderDriveId; string relocatedFolderParentId; // Is this a relocated Shared Folder? OneDrive Personal and Business supports the relocation of Shared Folder links to other folders // Is this parentId equal to our defaultRootId .. if not it is highly likely that this Shared Folder is in a sub folder in our online folder structure if (newDatabaseItem.parentId != appConfig.defaultRootId) { // The parentId is not our defaultRootId .. most likely a relocated shared folder if (debugLogging) { addLogEntry("The folder path for this Shared Folder is not our account root, thus is a relocated Shared Folder item. We must pass in the correct parent details for this Shared Folder 'root' object" , ["debug"]); // What are we setting addLogEntry("Setting relocatedFolderDriveId to: " ~ newDatabaseItem.driveId); addLogEntry("Setting relocatedFolderParentId to: " ~ newDatabaseItem.parentId); } // Configure the relocated folders data relocatedFolderDriveId = newDatabaseItem.driveId; relocatedFolderParentId = newDatabaseItem.parentId; } // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner // We pass in the JSON element so we can create the right records + if this is a relocated shared folder, give the local parental record identifier createRequiredSharedFolderDatabaseRecords(onedriveJSONItem, relocatedFolderDriveId, relocatedFolderParentId); } // Did the user configure to save xattr data about this file? if (appConfig.getValueBool("write_xattr_data")) { writeXattrData(newItemPath, onedriveJSONItem); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // all done processing this potential new local item return; } else { // Item details from OneDrive and local item details in database are NOT in-sync if (debugLogging) {addLogEntry("The item to sync exists locally but is potentially not in the local database - otherwise this would be handled as changed item", ["debug"]);} // Which object is newer? The local file or the remote file? SysTime localModifiedTime = timeLastModified(newItemPath).toUTC(); SysTime itemModifiedTime = newDatabaseItem.mtime; // Reduce time resolution to seconds before comparing localModifiedTime.fracSecs = Duration.zero; itemModifiedTime.fracSecs = Duration.zero; // Is the local modified time greater than that from OneDrive? if (localModifiedTime > itemModifiedTime) { // Local file is newer than item on OneDrive based on file modified time // Is this item id in the database? if (itemDB.idInLocalDatabase(newDatabaseItem.driveId, newDatabaseItem.id)) { // item id is in the database // no local rename // no download needed // Fetch the latest DB record - as this could have been updated by the isItemSynced if the date online was being corrected, then the DB updated as a result Item latestDatabaseItem; itemDB.selectById(newDatabaseItem.driveId, newDatabaseItem.id, latestDatabaseItem); if (debugLogging) {addLogEntry("latestDatabaseItem: " ~ to!string(latestDatabaseItem), ["debug"]);} SysTime latestItemModifiedTime = latestDatabaseItem.mtime; // Reduce time resolution to seconds before comparing latestItemModifiedTime.fracSecs = Duration.zero; if (localModifiedTime == latestItemModifiedTime) { // Log action if (verboseLogging) {addLogEntry("Local file modified time matches existing database record - keeping local file", ["verbose"]);} if (debugLogging) {addLogEntry("Skipping OneDrive change as this is determined to be unwanted due to local file modified time matching database data", ["debug"]);} } else { // Log action if (verboseLogging) {addLogEntry("Local file modified time is newer based on UTC time conversion - keeping local file as this exists in the local database", ["verbose"]);} if (debugLogging) {addLogEntry("Skipping OneDrive change as this is determined to be unwanted due to local file modified time being newer than OneDrive file and present in the sqlite database", ["debug"]);} } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return as no further action needed return; } else { // item id is not in the database .. maybe a --resync ? // file exists locally but is not in the sqlite database - maybe a failed download? if (verboseLogging) {addLogEntry("Local item does not exist in local database - replacing with file from OneDrive - failed download?", ["verbose"]);} // In a --resync scenario or if items.sqlite3 was deleted before startup we have zero way of knowing IF the local file is meant to be the right file // To this pint we have passed the following checks: // 1. Any client side filtering checks - this determined this is a file that is wanted // 2. A file with the exact name exists locally // 3. The local modified time > remote modified time // 4. The id of the item from OneDrive is not in the database // If local data protection is configured (bypassDataPreservation = false), safeBackup the local file, passing in if we are performing a --dry-run or not // In case the renamed path is needed string renamedPath; safeBackup(newItemPath, dryRun, bypassDataPreservation, renamedPath); } } else { // Is the remote newer? if (localModifiedTime < itemModifiedTime) { // Remote file is newer than the existing local item if (verboseLogging) {addLogEntry("Remote item modified time is newer based on UTC time conversion", ["verbose"]);} // correct message, remote item is newer if (debugLogging) { addLogEntry("localModifiedTime (local file): " ~ to!string(localModifiedTime), ["debug"]); addLogEntry("itemModifiedTime (OneDrive item): " ~ to!string(itemModifiedTime), ["debug"]); } // Is this the exact same file? // Test the file hash if (!testFileHash(newItemPath, newDatabaseItem)) { // File on disk is different by hash / content // If local data protection is configured (bypassDataPreservation = false), safeBackup the local file, passing in if we are performing a --dry-run or not // In case the renamed path is needed string renamedPath; safeBackup(newItemPath, dryRun, bypassDataPreservation, renamedPath); } else { // File on disk is the same by hash / content, but is a different timestamp // The file contents have not changed, but the modified timestamp has if (verboseLogging) {addLogEntry("The last modified timestamp online has changed however the local file content has not changed", ["verbose"]);} // Update the local timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, newItemPath, newDatabaseItem.mtime); } } // Are the timestamps equal? if (localModifiedTime == itemModifiedTime) { // yes they are equal if (debugLogging) { addLogEntry("File timestamps are equal, no further action required", ["debug"]); // correct message as timestamps are equal addLogEntry("Update/Insert local database with item details: " ~ to!string(newDatabaseItem), ["debug"]); } // Add item to database itemDB.upsert(newDatabaseItem); // Did the user configure to save xattr data about this file? if (appConfig.getValueBool("write_xattr_data")) { writeXattrData(newItemPath, onedriveJSONItem); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // everything all OK, DB updated return; } } } } // Path does not exist locally (should not exist locally if renamed file) - this will be a new file download or new folder creation // How to handle this Potentially New Local Item JSON ? final switch (newDatabaseItem.type) { case ItemType.file: // Add to the file to the download array for processing later fileJSONItemsToDownload ~= onedriveJSONItem; goto functionCompletion; case ItemType.dir: // Create the directory immediately as we depend on its entry existing handleLocalDirectoryCreation(newDatabaseItem, newItemPath, onedriveJSONItem); goto functionCompletion; case ItemType.remote: // Add to the directory and relevant details for processing later if (newDatabaseItem.remoteType == ItemType.dir) { handleLocalDirectoryCreation(newDatabaseItem, newItemPath, onedriveJSONItem); } else { // Add to the file to the download array for processing later fileJSONItemsToDownload ~= onedriveJSONItem; } goto functionCompletion; case ItemType.root: case ItemType.unknown: case ItemType.none: // Unknown type - we dont action or sync these items goto functionCompletion; } // To correctly handle a switch|case statement we use goto post the switch|case statement as if 'break' is used, we never get to this point functionCompletion: // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Handle the creation of a new local directory void handleLocalDirectoryCreation(Item newDatabaseItem, string newItemPath, JSONValue onedriveJSONItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // To create a path, 'newItemPath' must not be empty if (!newItemPath.empty) { // Update the logging output to be consistent if (verboseLogging) {addLogEntry("Creating local directory: " ~ "./" ~ buildNormalizedPath(newItemPath), ["verbose"]);} if (!dryRun) { try { // Create the new directory if (debugLogging) {addLogEntry("Requested local path does not exist, creating directory structure: " ~ newItemPath, ["debug"]);} mkdirRecurse(newItemPath); // Has the user disabled the setting of filesystem permissions? if (!appConfig.getValueBool("disable_permission_set")) { // Configure the applicable permissions for the folder if (debugLogging) {addLogEntry("Setting directory permissions for: " ~ newItemPath, ["debug"]);} newItemPath.setAttributes(appConfig.returnRequiredDirectoryPermissions()); } else { // Use inherited permissions if (debugLogging) {addLogEntry("Using inherited filesystem permissions for: " ~ newItemPath, ["debug"]);} } // Update the time of the folder to match the last modified time as is provided by OneDrive // If there are any files then downloaded into this folder, the last modified time will get // updated by the local Operating System with the latest timestamp - as this is normal operation // as the directory has been modified // Set the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, newItemPath, newDatabaseItem.mtime); // Save the newDatabaseItem to the database saveDatabaseItem(newDatabaseItem); } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, newItemPath); } } else { // we dont create the directory, but we need to track that we 'faked it' idsFaked ~= [newDatabaseItem.driveId, newDatabaseItem.id]; // Save the newDatabaseItem to the database saveDatabaseItem(newDatabaseItem); } // With the 'newDatabaseItem' saved to the database, regardless of --dry-run situation - was that new database item a 'remote' item? // Is this folder that has been created locally a 'Shared Folder' online? // This should be applicable for all account types if (newDatabaseItem.type == ItemType.remote) { // yes this is a remote item type if (debugLogging) {addLogEntry("The 'newDatabaseItem' (handleLocalDirectoryCreation) is a remote item type - we need to create all of the associated database tie records for this database entry" , ["debug"]);} string relocatedFolderDriveId; string relocatedFolderParentId; // Is this a relocated Shared Folder? OneDrive Personal and Business supports the relocation of Shared Folder links to other folders // Is this parentId equal to our defaultRootId .. if not it is highly likely that this Shared Folder is in a sub folder in our online folder structure if (newDatabaseItem.parentId != appConfig.defaultRootId) { // The parentId is not our defaultRootId .. most likely a relocated shared folder if (debugLogging) { addLogEntry("The folder path for this Shared Folder is not our account root, thus is a relocated Shared Folder item. We must pass in the correct parent details for this Shared Folder 'root' object" , ["debug"]); // What are we setting addLogEntry("Setting relocatedFolderDriveId to: " ~ newDatabaseItem.driveId); addLogEntry("Setting relocatedFolderParentId to: " ~ newDatabaseItem.parentId); } // Configure the relocated folders data relocatedFolderDriveId = newDatabaseItem.driveId; relocatedFolderParentId = newDatabaseItem.parentId; } // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner // We pass in the JSON element so we can create the right records + if this is a relocated shared folder, give the local parental record identifier createRequiredSharedFolderDatabaseRecords(onedriveJSONItem, relocatedFolderDriveId, relocatedFolderParentId); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Create 'root' DB Tie Record and 'Shared Folder' DB Record in a consistent manner void createRequiredSharedFolderDatabaseRecords(JSONValue onedriveJSONItem, string relocatedFolderDriveId = null, string relocatedFolderParentId = null) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Due to this function, we need to keep the return code, so that this function operates as efficiently as possible. // Whilst this means some extra code / duplication in this function, it cannot be helped // Detail what we are doing if (debugLogging) {addLogEntry("We have been requested to create 'root' and 'Shared Folder' DB Tie Records in a consistent manner" , ["debug"]);} JSONValue onlineParentData; string parentDriveId; string parentObjectId; OneDriveApi onlineParentOneDriveApiInstance; onlineParentOneDriveApiInstance = new OneDriveApi(appConfig); onlineParentOneDriveApiInstance.initialise(); // Using the onlineParentData JSON data make a DB record for this parent item so that it exists in the database Item sharedFolderDatabaseTie; // A Shared Folder should have ["remoteItem"]["parentReference"] elements bool remoteItemElementsExist = false; // Test that the required elements exist for Shared Folder DB entry creations to occur if (isItemRemote(onedriveJSONItem)) { // Required ["remoteItem"] element exists in the JSON data if ((hasRemoteParentDriveId(onedriveJSONItem)) && (hasRemoteItemId(onedriveJSONItem))) { // Required elements exist remoteItemElementsExist = true; // What account type is this? This needs to be configured correctly so this can be queried correctly // - The setting of this is the 'same' for account types, but previously this was shown to need different data. Future code optimisation potentially here. if (appConfig.accountType == "personal") { // OneDrive Personal JSON has this structure that we need to use parentDriveId = onedriveJSONItem["remoteItem"]["parentReference"]["driveId"].str; parentObjectId = onedriveJSONItem["remoteItem"]["id"].str; } else { // OneDrive Business|Sharepoint JSON has this structure that we need to use parentDriveId = onedriveJSONItem["remoteItem"]["parentReference"]["driveId"].str; parentObjectId = onedriveJSONItem["remoteItem"]["id"].str; } } } // If the required elements do not exist, the Shared Folder DB elements cannot be created if (!remoteItemElementsExist) { // We cannot create the required entries in the database if (debugLogging) {addLogEntry("Unable to create 'root' and 'Shared Folder' DB Tie Records in a consistent manner - required elements missing from provided JSON record" , ["debug"]);} return; } // Issue #3115 - Validate 'parentDriveId' length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test parentDriveId = transformToLowerCase(parentDriveId); // Test if the 'parentDriveId' is not equal to appConfig.defaultDriveId if (parentDriveId != appConfig.defaultDriveId) { // Test 'parentDriveId' for length and validation - 15 character API bug parentDriveId = testProvidedDriveIdForLengthIssue(parentDriveId); } } // Try and fetch this shared folder parent's details try { if (debugLogging) {addLogEntry(format("Fetching Shared Folder online data for parentDriveId '%s' and parentObjectId '%s'", parentDriveId, parentObjectId), ["debug"]);} onlineParentData = onlineParentOneDriveApiInstance.getPathDetailsById(parentDriveId, parentObjectId); } catch (OneDriveException exception) { // If we get a 404 .. the shared item does not exist online ... perhaps a broken 'Add shortcut to My files' link in the account holders directory? if ((exception.httpStatusCode == 403) || (exception.httpStatusCode == 404)) { // The API call returned a 404 error response if (debugLogging) {addLogEntry("onlineParentData = onlineParentOneDriveApiInstance.getPathDetailsById(parentDriveId, parentObjectId); generated a 404 - shared folder path does not exist online", ["debug"]);} string errorMessage = format("WARNING: The OneDrive Shared Folder link target '%s' cannot be found online using the provided online data.", onedriveJSONItem["name"].str); // detail what this 404 error response means addLogEntry(); addLogEntry(errorMessage); addLogEntry("WARNING: This is potentially a broken online OneDrive Shared Folder link or you no longer have access to it. Please correct this error online."); addLogEntry(); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory onlineParentOneDriveApiInstance.releaseCurlEngine(); onlineParentOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // we have to return at this point return; } else { // Catch all other errors // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory onlineParentOneDriveApiInstance.releaseCurlEngine(); onlineParentOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // If we get an error, we cannot do much else return; } } // Create a 'root' DB Tie Record for a Shared Folder from the parent folder JSON data // - This maps the Shared Folder 'driveId' with the parent folder where the shared folder exists, so we can call the parent folder to query for changes to this Shared Folder createDatabaseRootTieRecordForOnlineSharedFolder(onlineParentData, relocatedFolderDriveId, relocatedFolderParentId); // Log that we are created the Shared Folder Tie record now if (debugLogging) {addLogEntry("Creating the Shared Folder DB Tie Record that binds the 'root' record to the 'shared folder'" , ["debug"]);} // Make an item from the online JSON data sharedFolderDatabaseTie = makeItem(onlineParentData); // Ensure we use our online name, as we may have renamed the folder in our location sharedFolderDatabaseTie.name = onedriveJSONItem["name"].str; // use this as the name .. this is the name of the folder online in our OneDrive account, not the online parent name // Is sharedFolderDatabaseTie.driveId empty? if (sharedFolderDatabaseTie.driveId.empty) { // This cannot be empty - set to the correct reference for the Shared Folder DB Tie record if (debugLogging) {addLogEntry("The Shared Folder DB Tie record entry for 'driveId' is empty ... correcting it" , ["debug"]);} sharedFolderDatabaseTie.driveId = onlineParentData["parentReference"]["driveId"].str; } // Ensure 'parentId' is not empty, except for Personal Accounts if (appConfig.accountType != "personal") { // Is sharedFolderDatabaseTie.parentId.empty? if (sharedFolderDatabaseTie.parentId.empty) { // This cannot be empty - set to the correct reference for the Shared Folder DB Tie record if (debugLogging) {addLogEntry("The Shared Folder DB Tie record entry for 'parentId' is empty ... correcting it" , ["debug"]);} sharedFolderDatabaseTie.parentId = onlineParentData["id"].str; } } else { // The database Tie Record for Personal Accounts must be empty .. no change, leave 'parentId' empty } // If a user has added the 'whole' SharePoint Document Library, then the DB Shared Folder Tie Record and 'root' record are the 'same' if ((isItemRoot(onlineParentData)) && (onlineParentData["parentReference"]["driveType"].str == "documentLibrary")) { // Yes this is a DocumentLibrary 'root' object if (debugLogging) { addLogEntry("Updating Shared Folder DB Tie record entry with correct values as this is a 'root' object as it is a SharePoint Library Root Object" , ["debug"]); addLogEntry(" sharedFolderDatabaseTie.parentId = null", ["debug"]); addLogEntry(" sharedFolderDatabaseTie.type = ItemType.root", ["debug"]); } sharedFolderDatabaseTie.parentId = null; sharedFolderDatabaseTie.type = ItemType.root; } // Personal Account Shared Folder Handling if (appConfig.accountType == "personal") { // Yes this is a personal account if (debugLogging) { addLogEntry("Updating Shared Folder DB Tie record entry with correct type value as this as it is a Personal Shared Folder Object" , ["debug"]); addLogEntry(" sharedFolderDatabaseTie.type = ItemType.dir", ["debug"]); } sharedFolderDatabaseTie.type = ItemType.dir; } // Issue #3115 - Validate sharedFolderDatabaseTie.driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test sharedFolderDatabaseTie.driveId = transformToLowerCase(sharedFolderDatabaseTie.driveId); // Test sharedFolderDatabaseTie.driveId length and validation if the sharedFolderDatabaseTie.driveId we are testing is not equal to appConfig.defaultDriveId if (sharedFolderDatabaseTie.driveId != appConfig.defaultDriveId) { sharedFolderDatabaseTie.driveId = testProvidedDriveIdForLengthIssue(sharedFolderDatabaseTie.driveId); } } // Log action addLogEntry("Creating|Updating a DB Tie Record for this Shared Folder from the online parental data: " ~ sharedFolderDatabaseTie.name, ["debug"]); addLogEntry("Shared Folder DB Tie Record data: " ~ to!string(sharedFolderDatabaseTie), ["debug"]); // Is this a dry-run excercise? if (dryRun) { // We need to ensure we add this to our faked entries idsFaked ~= [sharedFolderDatabaseTie.driveId, sharedFolderDatabaseTie.id]; } // Save item itemDB.upsert(sharedFolderDatabaseTie); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory onlineParentOneDriveApiInstance.releaseCurlEngine(); onlineParentOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // If the JSON item IS in the database, this will be an update to an existing in-sync item void applyPotentiallyChangedItem(Item existingDatabaseItem, string existingItemPath, Item changedOneDriveItem, string changedItemPath, JSONValue onedriveJSONItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // If we are moving the item, we do not need to download it again bool itemWasMoved = false; // Do we need to actually update the database with the details that were provided by the OneDrive API? // Calculate these time items from the provided items SysTime existingItemModifiedTime = existingDatabaseItem.mtime; existingItemModifiedTime.fracSecs = Duration.zero; SysTime changedOneDriveItemModifiedTime = changedOneDriveItem.mtime; changedOneDriveItemModifiedTime.fracSecs = Duration.zero; // Did the eTag change? if (existingDatabaseItem.eTag != changedOneDriveItem.eTag) { // The eTag has changed to what we previously cached if (existingItemPath != changedItemPath) { // Log that we are changing / moving an item to a new name addLogEntry("Moving " ~ existingItemPath ~ " to " ~ changedItemPath); // Is the destination path empty .. or does something exist at that location? if (exists(changedItemPath)) { // Destination we are moving to exists ... Item changedLocalItem; // Query DB for this changed item in specified path that exists and see if it is in-sync if (itemDB.selectByPath(changedItemPath, changedOneDriveItem.driveId, changedLocalItem)) { // The 'changedItemPath' is in the database string itemSource = "database"; if (isItemSynced(changedLocalItem, changedItemPath, itemSource)) { // The destination item is in-sync if (verboseLogging) {addLogEntry("Destination is in sync and will be overwritten", ["verbose"]);} } else { // The destination item is different if (verboseLogging) {addLogEntry("The destination is occupied with a different item, renaming the conflicting file...", ["verbose"]);} // If local data protection is configured (bypassDataPreservation = false), safeBackup the local file, passing in if we are performing a --dry-run or not // In case the renamed path is needed string renamedPath; safeBackup(changedItemPath, dryRun, bypassDataPreservation, renamedPath); } } else { // The to be overwritten item is not already in the itemdb, so it should saved to avoid data loss if (verboseLogging) {addLogEntry("The destination is occupied by an existing un-synced file, renaming the conflicting file...", ["verbose"]);} // If local data protection is configured (bypassDataPreservation = false), safeBackup the local file, passing in if we are performing a --dry-run or not // In case the renamed path is needed string renamedPath; safeBackup(changedItemPath, dryRun, bypassDataPreservation, renamedPath); } } // We should no longer need a try block for safeRename() as retry / error handling occurs within safeRename() and setLocalPathTimestamp() .. but keeping this for the moment try { // If we are in a --dry-run situation? if(!dryRun) { // We are not in a --dry-run situation // Attempt rename (returns true only if rename succeeded) bool renamedOk = safeRename(existingItemPath, changedItemPath, dryRun); // Was the rename successful? if (renamedOk) { // Flag that the item was moved | renamed itemWasMoved = true; // If the item is a file, make sure that the local timestamp now is the same as the timestamp online // Otherwise when we do the DB check, the move on the file system, the file technically has a newer timestamp // which is 'correct' .. but we need to report locally the online timestamp here as the move was made online if (changedOneDriveItem.type == ItemType.file) { // Set the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, changedItemPath, changedOneDriveItem.mtime); } } else { // Rename failed - do NOT track as moved, do NOT touch timestamps on the target path addLogEntry("ERROR: Local rename failed; item will not be treated as moved: " ~ to!string(existingItemPath) ~ " -> " ~ to!string(changedItemPath), ["error", "notify"]); // We need to return here and stop processing this JSON item ... return; } } else { // --dry-run situation - the actual rename did not occur - but we need to track like it did // Track this as a faked id item idsFaked ~= [changedOneDriveItem.driveId, changedOneDriveItem.id]; // We also need to track that we did not rename this path // When we are checking entries in this array, paths need to have './' added pathsRenamed ~= [ensureStartsWithDotSlash(buildNormalizedPath(existingItemPath))]; } } catch (FileException e) { // Display the error message from the filesystem displayFileSystemErrorMessage(e.msg, thisFunctionName, existingItemPath); } } // What sort of changed item is this? // Is it a file or remote file, and we did not move it .. if (((changedOneDriveItem.type == ItemType.file) && (!itemWasMoved)) || (((changedOneDriveItem.type == ItemType.remote) && (changedOneDriveItem.remoteType == ItemType.file)) && (!itemWasMoved))) { // The eTag is notorious for being 'changed' online by some backend Microsoft process if (existingDatabaseItem.quickXorHash != changedOneDriveItem.quickXorHash) { // Add to the items to download array for processing - the file hash we previously recorded is not the same as online fileJSONItemsToDownload ~= onedriveJSONItem; } else { // If the timestamp is different, or we are running a client operational mode that does not support /delta queries - we have to update the DB with the details from OneDrive // Unfortunately because of the consequence of National Cloud Deployments not supporting /delta queries, the application uses the local database to flag what is out-of-date / track changes // This means that the constant disk writing to the database fix implemented with https://github.com/abraunegg/onedrive/pull/2004 cannot be utilised when using these operational modes // as all records are touched / updated when performing the OneDrive sync operations. The impacted operational modes are: // - National Cloud Deployments do not support /delta as a query // - When using --single-directory // - When using --download-only --cleanup-local-files // Is the last modified timestamp in the DB the same as the API data or are we running an operational mode where we simulated the /delta response? if ((existingItemModifiedTime != changedOneDriveItemModifiedTime) || (generateSimulatedDeltaResponse)) { // Save this item in the database // Issue #3115 - Personal Account Shared Folder // What account type is this? if (appConfig.accountType == "personal") { // Is this a 'remote' DB record if (changedOneDriveItem.type == ItemType.remote) { // Issue #3136, #3139 #3143 // Fetch the actual online record for this item // This returns the actual OneDrive Personal driveId value and is 15 character checked string actualOnlineDriveId = testProvidedDriveIdForLengthIssue(fetchRealOnlineDriveIdentifier(changedOneDriveItem.remoteDriveId)); changedOneDriveItem.remoteDriveId = actualOnlineDriveId; } } // Add to the local database if (debugLogging) {addLogEntry("Adding changed OneDrive Item to database: " ~ to!string(changedOneDriveItem), ["debug"]);} itemDB.upsert(changedOneDriveItem); } } } else { // Save this item in the database saveItem(onedriveJSONItem); // If the 'Add shortcut to My files' link was the item that was actually renamed .. we have to update our DB records if (changedOneDriveItem.type == ItemType.remote) { // Select remote item data from the database Item existingRemoteDbItem; itemDB.selectById(changedOneDriveItem.remoteDriveId, changedOneDriveItem.remoteId, existingRemoteDbItem); // Update the 'name' in existingRemoteDbItem and save it back to the database // This is the local name stored on disk that was just 'moved' existingRemoteDbItem.name = changedOneDriveItem.name; itemDB.upsert(existingRemoteDbItem); } } } else { // The existingDatabaseItem.eTag == changedOneDriveItem.eTag .. nothing has changed eTag wise // If the timestamp is different, or we are running a client operational mode that does not support /delta queries - we have to update the DB with the details from OneDrive // Unfortunately because of the consequence of National Cloud Deployments not supporting /delta queries, the application uses the local database to flag what is out-of-date / track changes // This means that the constant disk writing to the database fix implemented with https://github.com/abraunegg/onedrive/pull/2004 cannot be utilised when using these operational modes // as all records are touched / updated when performing the OneDrive sync operations. The impacted operational modes are: // - National Cloud Deployments do not support /delta as a query // - When using --single-directory // - When using --download-only --cleanup-local-files // Is the last modified timestamp in the DB the same as the API data or are we running an operational mode where we simulated the /delta response? if ((existingItemModifiedTime != changedOneDriveItemModifiedTime) || (generateSimulatedDeltaResponse)) { // Database update needed for this item because our local record is out-of-date // Issue #3115 - Personal Account Shared Folder // What account type is this? if (appConfig.accountType == "personal") { // Is this a 'remote' DB record if (changedOneDriveItem.type == ItemType.remote) { // Issue #3136, #3139 #3143 // Fetch the actual online record for this item // This returns the actual OneDrive Personal driveId value and is 15 character checked string actualOnlineDriveId = testProvidedDriveIdForLengthIssue(fetchRealOnlineDriveIdentifier(changedOneDriveItem.remoteDriveId)); changedOneDriveItem.remoteDriveId = actualOnlineDriveId; } } // Add to the local database if (debugLogging) {addLogEntry("Adding changed OneDrive Item to database: " ~ to!string(changedOneDriveItem), ["debug"]);} itemDB.upsert(changedOneDriveItem); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Download new/changed file items as identified void downloadOneDriveItems() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Lets deal with all the JSON items that need to be downloaded in a batch process size_t batchSize = to!int(appConfig.getValueLong("threads")); long batchCount = (fileJSONItemsToDownload.length + batchSize - 1) / batchSize; long batchesProcessed = 0; // Transfer order string transferOrder = appConfig.getValueString("transfer_order"); // Has the user configured to specify the transfer order of files? if (transferOrder != "default") { // If we have more than 1 item to download, sort the items if (count(fileJSONItemsToDownload) > 1) { // Perform sorting based on transferOrder if (transferOrder == "size_asc") { fileJSONItemsToDownload.sort!((a, b) => a["size"].integer < b["size"].integer); // sort the array by ascending size } else if (transferOrder == "size_dsc") { fileJSONItemsToDownload.sort!((a, b) => a["size"].integer > b["size"].integer); // sort the array by descending size } else if (transferOrder == "name_asc") { fileJSONItemsToDownload.sort!((a, b) => a["name"].str < b["name"].str); // sort the array by ascending name } else if (transferOrder == "name_dsc") { fileJSONItemsToDownload.sort!((a, b) => a["name"].str > b["name"].str); // sort the array by descending name } } } // Process fileJSONItemsToDownload foreach (chunk; fileJSONItemsToDownload.chunks(batchSize)) { // send an array containing 'appConfig.getValueLong("threads")' JSON items to download downloadOneDriveItemsInParallel(chunk); } // For this set of items, perform a DB PASSIVE checkpoint itemDB.performCheckpoint("PASSIVE"); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Download items in parallel void downloadOneDriveItemsInParallel(JSONValue[] array) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // This function received an array of JSON items to download, the number of elements based on appConfig.getValueLong("threads") foreach (i, onedriveJSONItem; processPool.parallel(array)) { // Take each JSON item and download it downloadFileItem(onedriveJSONItem); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform the actual download of an object from OneDrive void downloadFileItem(JSONValue onedriveJSONItem, bool ignoreDataPreservationCheck = false, long resumeOffset = 0) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables bool downloadFailed = false; string OneDriveFileXORHash; string OneDriveFileSHA256Hash; long jsonFileSize = 0; Item databaseItem; bool fileFoundInDB = false; // Create a JSONValue to store the online hash for resumable file checking JSONValue onlineHash; // Capture what time this download started SysTime downloadStartTime = Clock.currTime(); // Download item specifics string downloadItemId = onedriveJSONItem["id"].str; string downloadItemName = onedriveJSONItem["name"].str; string downloadDriveId = onedriveJSONItem["parentReference"]["driveId"].str; string downloadParentId = onedriveJSONItem["parentReference"]["id"].str; // Calculate this items path string newItemPath = computeItemPath(downloadDriveId, downloadParentId) ~ "/" ~ downloadItemName; if (debugLogging) {addLogEntry("JSON Item calculated full path for download is: " ~ newItemPath, ["debug"]);} // Is the item reported as Malware ? if (isMalware(onedriveJSONItem)){ // OneDrive reports that this file is malware addLogEntry("ERROR: MALWARE DETECTED IN FILE - DOWNLOAD SKIPPED: " ~ newItemPath, ["info", "notify"]); downloadFailed = true; } else { // Grab this file's filesize if (hasFileSize(onedriveJSONItem)) { // Use the configured filesize as reported by OneDrive jsonFileSize = onedriveJSONItem["size"].integer; } else { // filesize missing if (debugLogging) {addLogEntry("ERROR: onedriveJSONItem['size'] is missing", ["debug"]);} } // Configure the hashes for comparison post download if (hasHashes(onedriveJSONItem)) { // File details returned hash details // QuickXorHash if (hasQuickXorHash(onedriveJSONItem)) { // Use the provided quickXorHash as reported by OneDrive if (onedriveJSONItem["file"]["hashes"]["quickXorHash"].str != "") { OneDriveFileXORHash = onedriveJSONItem["file"]["hashes"]["quickXorHash"].str; } // Assign to JSONValue as object for resumable file checking onlineHash = JSONValue([ "quickXorHash": JSONValue(OneDriveFileXORHash) ]); } else { // Fallback: Check for SHA256Hash if (hasSHA256Hash(onedriveJSONItem)) { // Use the provided sha256Hash as reported by OneDrive if (onedriveJSONItem["file"]["hashes"]["sha256Hash"].str != "") { OneDriveFileSHA256Hash = onedriveJSONItem["file"]["hashes"]["sha256Hash"].str; } // Assign to JSONValue as object for resumable file checking onlineHash = JSONValue([ "sha256Hash": JSONValue(OneDriveFileSHA256Hash) ]); } } } else { // file hash data missing if (debugLogging) {addLogEntry("ERROR: onedriveJSONItem['file']['hashes'] is missing - unable to compare file hash after download to verify integrity of the downloaded file", ["debug"]);} // Assign to JSONValue as object for resumable file checking onlineHash = JSONValue([ "hashMissing": JSONValue("none") ]); } // Does the file already exist in the path locally? if (exists(newItemPath)) { // To accommodate forcing the download of a file, post upload to Microsoft OneDrive, we need to ignore the checking of hashes and making a safe backup if (!ignoreDataPreservationCheck) { // file exists locally already foreach (driveId; onlineDriveDetails.keys) { if (itemDB.selectByPath(newItemPath, driveId, databaseItem)) { fileFoundInDB = true; break; } } // Log the DB details if (debugLogging) {addLogEntry("File to download exists locally and this is the DB record: " ~ to!string(databaseItem), ["debug"]);} // Does the DB (what we think is in sync) hash match the existing local file hash? if (!testFileHash(newItemPath, databaseItem)) { // local file is different to what we know to be true addLogEntry("The local file to replace (" ~ newItemPath ~ ") has been modified locally since the last download. Renaming it to avoid potential local data loss."); // If local data protection is configured (bypassDataPreservation = false), safeBackup the local file, passing in if we are performing a --dry-run or not // In case the renamed path is needed string renamedPath; safeBackup(newItemPath, dryRun, bypassDataPreservation, renamedPath); } } } // Is there enough free space locally to download the file // - We can use '.' here as we change the current working directory to the configured 'sync_dir' long localActualFreeSpace = to!long(getAvailableDiskSpace(".")); // So that we are not responsible in making the disk 100% full if we can download the file, compare the current available space against the reservation set and file size // The reservation value is user configurable in the config file, 50MB by default long freeSpaceReservation = appConfig.getValueLong("space_reservation"); // debug output if (debugLogging) { addLogEntry("Local Disk Space Actual: " ~ to!string(localActualFreeSpace), ["debug"]); addLogEntry("Free Space Reservation: " ~ to!string(freeSpaceReservation), ["debug"]); addLogEntry("File Size to Download: " ~ to!string(jsonFileSize), ["debug"]); } // Calculate if we can actually download file - is there enough free space? if ((localActualFreeSpace < freeSpaceReservation) || (jsonFileSize > localActualFreeSpace)) { // localActualFreeSpace is less than freeSpaceReservation .. insufficient free space // jsonFileSize is greater than localActualFreeSpace .. insufficient free space addLogEntry("Downloading file: " ~ newItemPath ~ " ... failed!", ["info", "notify"]); addLogEntry("Insufficient local disk space to download file"); downloadFailed = true; } else { // If we are in a --dry-run situation - if not, actually perform the download if (!dryRun) { // Attempt to download the file as there is enough free space locally OneDriveApi downloadFileOneDriveApiInstance; try { // Initialise API instance downloadFileOneDriveApiInstance = new OneDriveApi(appConfig); downloadFileOneDriveApiInstance.initialise(); // OneDrive Business Shared Files - update the driveId where to get the file from if (isItemRemote(onedriveJSONItem)) { downloadDriveId = onedriveJSONItem["remoteItem"]["parentReference"]["driveId"].str; } // Perform the download with any applicable set offset downloadFileOneDriveApiInstance.downloadById(downloadDriveId, downloadItemId, newItemPath, jsonFileSize, onlineHash, resumeOffset); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory downloadFileOneDriveApiInstance.releaseCurlEngine(); downloadFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } catch (OneDriveException exception) { if (debugLogging) {addLogEntry("downloadFileOneDriveApiInstance.downloadById(downloadDriveId, downloadItemId, newItemPath, jsonFileSize, onlineHash, resumeOffset); generated a OneDriveException", ["debug"]);} // HTTP request returned status code 403 if ((exception.httpStatusCode == 403) && (appConfig.getValueBool("sync_business_shared_files"))) { // We attempted to download a file, that was shared with us, but this was shared with us as read-only and no download permission addLogEntry("Unable to download this file as this was shared as read-only without download permission: " ~ newItemPath); downloadFailed = true; } else { // Default operation if not a 403 error // - 408,429,503,504 errors are handled as a retry within downloadFileOneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } catch (FileException e) { // There was a file system error - display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, newItemPath, FsErrorSeverity.error); if (verboseLogging) {addLogEntry("Download failed (local file system error): " ~ newItemPath, ["verbose"]);} downloadFailed = true; } catch (ErrnoException e) { // There was a file system error - display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, newItemPath, FsErrorSeverity.error); if (verboseLogging) {addLogEntry("Download failed (local file system error): " ~ newItemPath, ["verbose"]);} downloadFailed = true; } // If we get to this point, something was downloaded .. does it match what we expected? // Does it still exist? if (exists(newItemPath)) { // When downloading some files from SharePoint, the OneDrive API reports one file size, // but the SharePoint HTTP Server sends a totally different byte count for the same file // we have implemented --disable-download-validation to disable these checks // Regardless of --disable-download-validation we still need to set the file timestamp correctly // Get the mtime from the JSON data SysTime itemModifiedTime; string lastModifiedTimestamp; if (isItemRemote(onedriveJSONItem)) { // remote file item lastModifiedTimestamp = strip(onedriveJSONItem["remoteItem"]["fileSystemInfo"]["lastModifiedDateTime"].str); // is lastModifiedTimestamp valid? if (isValidUTCDateTime(lastModifiedTimestamp)) { // string is a valid timestamp itemModifiedTime = SysTime.fromISOExtString(lastModifiedTimestamp); } else { // invalid timestamp from JSON file addLogEntry("WARNING: Invalid timestamp provided by the Microsoft OneDrive API: " ~ lastModifiedTimestamp); // Set mtime to Clock.currTime(UTC()) given that the time in the JSON should be a UTC timestamp itemModifiedTime = Clock.currTime(UTC()); } } else { // not a remote item lastModifiedTimestamp = strip(onedriveJSONItem["fileSystemInfo"]["lastModifiedDateTime"].str); // is lastModifiedTimestamp valid? if (isValidUTCDateTime(lastModifiedTimestamp)) { // string is a valid timestamp itemModifiedTime = SysTime.fromISOExtString(lastModifiedTimestamp); } else { // invalid timestamp from JSON file addLogEntry("WARNING: Invalid timestamp provided by the Microsoft OneDrive API: " ~ lastModifiedTimestamp); // Set mtime to Clock.currTime(UTC()) given that the time in the JSON should be a UTC timestamp itemModifiedTime = Clock.currTime(UTC()); } } // Did the user configure --disable-download-validation ? if (!disableDownloadValidation) { // A 'file' was downloaded - does what we downloaded = reported jsonFileSize or if there is some sort of funky local disk compression going on // Does the file hash OneDrive reports match what we have locally? string onlineFileHash; string downloadedFileHash; long downloadFileSize = getSize(newItemPath); if (!OneDriveFileXORHash.empty) { onlineFileHash = OneDriveFileXORHash; // Calculate the QuickXOHash for this file downloadedFileHash = computeQuickXorHash(newItemPath); } else { onlineFileHash = OneDriveFileSHA256Hash; // Fallback: Calculate the SHA256 Hash for this file downloadedFileHash = computeSHA256Hash(newItemPath); } if ((downloadFileSize == jsonFileSize) && (downloadedFileHash == onlineFileHash)) { // Downloaded file matches size and hash if (debugLogging) {addLogEntry("Downloaded file matches reported size and reported file hash", ["debug"]);} // Set the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, newItemPath, itemModifiedTime); } else { // QuickXorHash in this client incorporates the file length into the final digest, so a size mismatch would be expected to also produce a hash mismatch. // However, QuickXorHash is not collision-resistant, so we treat the hash mismatch as the definitive integrity failure condition and log size mismatches // as advisory // Downloaded file does not match size or hash .. which is it? bool downloadValueMismatch = false; // Size difference between what was written to disk and what the API reported as the file size if (downloadFileSize != jsonFileSize) { // downloaded file size does not match downloadValueMismatch = true; if (debugLogging) { addLogEntry("Actual file size on disk: " ~ to!string(downloadFileSize), ["debug"]); addLogEntry("OneDrive API reported size: " ~ to!string(jsonFileSize), ["debug"]); } if ((verboseLogging)||(debugLogging)) { // verbose or debug message addLogEntry("WARNING: Download validation failed (size mismatch): " ~ newItemPath ~ " | expected=" ~ to!string(jsonFileSize) ~ " | actual=" ~ to!string(downloadFileSize), ["verbose"]); } else { // non-verbose message addLogEntry("WARNING: File download size mismatch. Re-run with --verbose for additional diagnostic information to assist with troubleshooting."); } } // Hash difference between what was written to disk and then QuickXOR calculated and what the API reported as the file hash online if (downloadedFileHash != onlineFileHash) { // downloaded file hash does not match downloadValueMismatch = true; if (debugLogging) { addLogEntry("Actual local file hash: " ~ downloadedFileHash, ["debug"]); addLogEntry("OneDrive API reported hash: " ~ onlineFileHash, ["debug"]); } if ((verboseLogging)||(debugLogging)) { // verbose or debug message addLogEntry("ERROR: Download validation failed (hash mismatch): " ~ newItemPath ~ " | expected=" ~ onlineFileHash ~ " | actual=" ~ downloadedFileHash, ["verbose"]); } else { // non-verbose message addLogEntry("ERROR: File download hash mismatch. Re-run with --verbose for additional diagnostic information to assist with troubleshooting."); } } // .heic data loss check // - https://github.com/abraunegg/onedrive/issues/2471 // - https://github.com/OneDrive/onedrive-api-docs/issues/1532 // - https://github.com/OneDrive/onedrive-api-docs/issues/1723 if (downloadValueMismatch && (toLower(extension(newItemPath)) == ".heic")) { // Need to display a message to the user that they have experienced data loss addLogEntry("DATA-LOSS: File downloaded has experienced data loss due to a Microsoft OneDrive API bug. DO NOT DELETE THIS FILE ONLINE: " ~ newItemPath, ["info", "notify"]); if (verboseLogging) {addLogEntry(" Please read https://github.com/OneDrive/onedrive-api-docs/issues/1723 for more details.", ["verbose"]);} } // Add some workaround messaging for SharePoint if (appConfig.accountType == "documentLibrary"){ // It has been seen where SharePoint / OneDrive API reports one size via the JSON // but the content length and file size written to disk is totally different - example: // From JSON: "size": 17133 // From HTTPS Server: < Content-Length: 19340 // with no logical reason for the difference, except for a 302 redirect before file download addLogEntry("INFO: It is most likely that a SharePoint OneDrive API issue is the root cause. Add --disable-download-validation to work around this issue but downloaded data integrity cannot be guaranteed."); } else { // other account types addLogEntry("INFO: Potentially add --disable-download-validation to work around this issue but downloaded data integrity cannot be guaranteed."); } // If the computed hash does not equal provided online hash, consider this a failed download if (downloadedFileHash != onlineFileHash) { // We do not want this local file to remain on the local file system as it failed the integrity checks addLogEntry("Removing local file " ~ newItemPath ~ " due to failed integrity checks"); if (!dryRun) { safeRemove(newItemPath); } // Was this item previously in-sync with the local system? // We previously searched for the file in the DB, we need to use that record if (fileFoundInDB) { // Purge DB record so that the deleted local file does not cause an online deletion // In a --dry-run scenario, this is being done against a DB copy addLogEntry("Removing DB record due to failed integrity checks"); itemDB.deleteById(databaseItem.driveId, databaseItem.id); } // Flag that the download failed downloadFailed = true; } } } else { // Download validation checks were disabled if (debugLogging) {addLogEntry("Downloaded file validation disabled due to --disable-download-validation", ["debug"]);} if (verboseLogging) {addLogEntry("WARNING: Skipping download integrity check for: " ~ newItemPath, ["verbose"]);} // Whilst the download integrity checks were disabled, we still have to set the correct timestamp on the file // Set the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, newItemPath, itemModifiedTime); // Azure Information Protection (AIP) protected files potentially have missing data and/or inconsistent data if (appConfig.accountType != "personal") { // AIP Protected Files cause issues here, as the online size & hash are not what has been downloaded // There is ZERO way to determine if this is an AIP protected file either from the JSON data // Calculate the local file hash and get the local file size string localFileHash = computeQuickXorHash(newItemPath); long downloadFileSize = getSize(newItemPath); if ((OneDriveFileXORHash != localFileHash) && (jsonFileSize != downloadFileSize)) { // High potential to be an AIP protected file given the following scenario // Business | SharePoint Account Type (not a personal account) // --disable-download-validation is being used .. meaning the user has specifically configured this due the Microsoft SharePoint Enrichment Feature (bug) // The file downloaded but the XOR hash and file size locally is not as per the provided JSON - both are different // // Update the 'onedriveJSONItem' JSON data with the local values ..... if (debugLogging) { string aipLogMessage = format("POTENTIAL AIP FILE (Issue 3070) - Changing the source JSON data provided by Graph API to use actual on-disk values (quickXorHash,size): %s", newItemPath); addLogEntry(aipLogMessage, ["debug"]); addLogEntry(" - Online XOR : " ~ to!string(OneDriveFileXORHash), ["debug"]); addLogEntry(" - Online Size : " ~ to!string(jsonFileSize), ["debug"]); addLogEntry(" - Local XOR : " ~ to!string(computeQuickXorHash(newItemPath)), ["debug"]); addLogEntry(" - Local Size : " ~ to!string(getSize(newItemPath)), ["debug"]); } // Make the change in the JSON using local values onedriveJSONItem["file"]["hashes"]["quickXorHash"] = localFileHash; onedriveJSONItem["size"] = downloadFileSize; } } } // end of (!disableDownloadValidation) } else { // File does not exist locally ... so the download failed if ((verboseLogging)||(debugLogging)) { // If we are doing verbose logging, addLogEntry("ERROR: Download failed (file not present after download): " ~ newItemPath ~ " | expectedSize=" ~ to!string(jsonFileSize) ~ " | resumeOffset=" ~ to!string(resumeOffset), ["verbose"]); } else { addLogEntry("ERROR: File failed to download. Re-run with --verbose for additional diagnostic information to assist with troubleshooting."); } // Was this item previously in-sync with the local system? // We previously searched for the file in the DB, we need to use that record if (fileFoundInDB) { // Purge DB record so that the deleted local file does not cause an online deletion // In a --dry-run scenario, this is being done against a DB copy addLogEntry("Removing existing DB record due to failed file download."); itemDB.deleteById(databaseItem.driveId, databaseItem.id); } // Flag that the download failed downloadFailed = true; } } } // File should have been downloaded if (!downloadFailed) { // Download did not fail addLogEntry("Downloading file: " ~ newItemPath ~ " ... done", fileTransferNotifications()); // As no download failure, calculate transfer metrics in a consistent manner displayTransferMetrics(newItemPath, jsonFileSize, downloadStartTime, Clock.currTime()); // Save this item into the database saveItem(onedriveJSONItem); // If we are in a --dry-run situation - if we are, we need to track that we faked the download if (dryRun) { // track that we 'faked it' idsFaked ~= [downloadDriveId, downloadItemId]; } // If, the initial download failed, but, during the 'Performing a last examination of the most recent online data within Microsoft OneDrive' Process // the file downloads without issue, check if the path is in 'fileDownloadFailures' and if this is in this array, remove this entry as it is technically no longer valid to be in there if (canFind(fileDownloadFailures, newItemPath)) { // Remove 'newItemPath' from 'fileDownloadFailures' as this is no longer a failed download fileDownloadFailures = fileDownloadFailures.filter!(item => item != newItemPath).array; } // Did the user configure to save xattr data about this file? if (appConfig.getValueBool("write_xattr_data")) { writeXattrData(newItemPath, onedriveJSONItem); } } else { // Output to the user that the file download failed addLogEntry("Downloading file: " ~ newItemPath ~ " ... failed!", ["info", "notify"]); // Add the path to a list of items that failed to download if (!canFind(fileDownloadFailures, newItemPath)) { fileDownloadFailures ~= newItemPath; // Add newItemPath if it's not already present } // Since the file download failed: // - The file should not exist locally // - The download identifiers should not exist in the local database if (!exists(newItemPath)) { // The local path does not exist if (itemDB.idInLocalDatabase(downloadDriveId, downloadItemId)) { // Since the path does not exist, but the driveId and itemId exists in the database, when we do the DB consistency check, we will think this file has been 'deleted' // The driveId and itemId online exists in our database - it needs to be removed so this does not occur addLogEntry("Removing existing DB record due to failed file download."); itemDB.deleteById(downloadDriveId, downloadItemId); } } } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Write xattr data if configured to do so void writeXattrData(string filePath, JSONValue onedriveJSONItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // We can only set xattr values when not performing a --dry-run operation if (!dryRun) { // This function will write the following xattr attributes based on the JSON data received from Microsoft onedrive // - createdBy using the 'displayName' value // - lastModifiedBy using the 'displayName' value string createdBy; string lastModifiedBy; // Configure 'createdBy' from the JSON data if (hasCreatedByUserDisplayName(onedriveJSONItem)) { createdBy = onedriveJSONItem["createdBy"]["user"]["displayName"].str; } else { // required data not in JSON data createdBy = "Unknown"; } // Configure 'lastModifiedBy' from the JSON data if (hasLastModifiedByUserDisplayName(onedriveJSONItem)) { lastModifiedBy = onedriveJSONItem["lastModifiedBy"]["user"]["displayName"].str; } else { // required data not in JSON data lastModifiedBy = "Unknown"; } // Set the xattr values, file must exist to set these values if (exists(filePath)) { setXAttr(filePath, "user.onedrive.createdBy", createdBy); setXAttr(filePath, "user.onedrive.lastModifiedBy", lastModifiedBy); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Test if the given item is in-sync. Returns true if the given item corresponds to the local one bool isItemSynced(Item item, string path, string itemSource) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Due to this function, we need to keep the return ; code, so that this function operates as efficiently as possible. // It is pointless having the entire code run through and performing additional needless checks where it is not required // Whilst this means some extra code / duplication in this function, it cannot be helped if (!exists(path)) { if (debugLogging) {addLogEntry("Unable to determine the sync state of this file as it does not exist: " ~ path, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return false; } // Combine common logic for readability and file check into a single block if (item.type == ItemType.file || ((item.type == ItemType.remote) && (item.remoteType == ItemType.file))) { // Can we actually read the local file? if (!readLocalFile(path)) { // Unable to read local file addLogEntry("Unable to determine the sync state of this file as it cannot be read (file permissions or file corruption): " ~ path); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return false; } // Get time values SysTime localModifiedTime = timeLastModified(path).toUTC(); SysTime itemModifiedTime = item.mtime; // Reduce time resolution to seconds before comparing localModifiedTime.fracSecs = Duration.zero; itemModifiedTime.fracSecs = Duration.zero; if (localModifiedTime == itemModifiedTime) { // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return true; } else { // The file has a different timestamp ... is the hash the same meaning no file modification? if (verboseLogging) { addLogEntry("Local file time discrepancy detected: " ~ path, ["verbose"]); addLogEntry("This local file has a different modified time " ~ to!string(localModifiedTime) ~ " (UTC) when compared to " ~ itemSource ~ " modified time " ~ to!string(itemModifiedTime) ~ " (UTC)", ["verbose"]); } // The file has a different timestamp ... is the hash the same meaning no file modification? // Test the file hash as the date / time stamp is different // Generating a hash is computationally expensive - we only generate the hash if timestamp was different if (testFileHash(path, item)) { // The hash is the same .. so we need to fix-up the timestamp depending on where it is wrong if (verboseLogging) {addLogEntry("Local item has the same hash value as the item online - correcting the applicable file timestamp", ["verbose"]);} // Correction logic based on the configuration and the comparison of timestamps if (localModifiedTime > itemModifiedTime) { // Local file is newer timestamp wise, but has the same hash .. are we in a --download-only situation? if (!appConfig.getValueBool("download_only") && !dryRun) { // Not --download-only .. but are we in a --resync scenario? if (appConfig.getValueBool("resync")) { // --resync was used // The source of the out-of-date timestamp was the local item and needs to be corrected ... but why is it newer - indexing application potentially changing the timestamp ? if (verboseLogging) {addLogEntry("The source of the incorrect timestamp was the local file - correcting timestamp locally due to --resync", ["verbose"]);} // Fix the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, path, item.mtime); } else { // The source of the out-of-date timestamp was OneDrive and this needs to be corrected to avoid always generating a hash test if timestamp is different if (verboseLogging) {addLogEntry("The source of the incorrect timestamp was OneDrive online - correcting timestamp online", ["verbose"]);} // Attempt to update the online date time stamp // We need to use the correct driveId and itemId, especially if we are updating a OneDrive Business Shared File timestamp if (item.type == ItemType.file) { // Not a remote file uploadLastModifiedTime(item, item.driveId, item.id, localModifiedTime, item.eTag); } else { // Remote file, remote values need to be used uploadLastModifiedTime(item, item.remoteDriveId, item.remoteId, localModifiedTime, item.eTag); } } } else if (!dryRun) { // --download-only is being used ... local file needs to be corrected ... but why is it newer - indexing application potentially changing the timestamp ? if (verboseLogging) {addLogEntry("The source of the incorrect timestamp was the local file - correcting timestamp locally due to --download-only", ["verbose"]);} // Fix the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, path, item.mtime); } } else if (!dryRun) { // The source of the out-of-date timestamp was the local file and this needs to be corrected to avoid always generating a hash test if timestamp is different if (verboseLogging) {addLogEntry("The source of the incorrect timestamp was the local file - correcting timestamp locally", ["verbose"]);} // Fix the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, path, item.mtime); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return false; } else { // The hash is different so the content of the file has to be different as to what is stored online if (verboseLogging) {addLogEntry("The local file has a different hash when compared to " ~ itemSource ~ " file hash", ["verbose"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return false; } } } else if (item.type == ItemType.dir || ((item.type == ItemType.remote) && (item.remoteType == ItemType.dir))) { // item is a directory // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return true; } else { // ItemType.unknown or ItemType.none // Logically, we might not want to sync these items, but a more nuanced approach may be needed based on application context // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return true; } } // Get the /delta data using the provided details JSONValue getDeltaChangesByItemId(string selectedDriveId, string selectedItemId, string providedDeltaLink, OneDriveApi getDeltaQueryOneDriveApiInstance) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables JSONValue deltaChangesBundle; // Get the /delta data for this account | driveId | deltaLink combination if (debugLogging) { addLogEntry(debugLogBreakType1, ["debug"]); addLogEntry("selectedDriveId: " ~ selectedDriveId, ["debug"]); addLogEntry("selectedItemId: " ~ selectedItemId, ["debug"]); addLogEntry("providedDeltaLink: " ~ providedDeltaLink, ["debug"]); addLogEntry(debugLogBreakType1, ["debug"]); } try { deltaChangesBundle = getDeltaQueryOneDriveApiInstance.getChangesByItemId(selectedDriveId, selectedItemId, providedDeltaLink); } catch (OneDriveException exception) { // caught an exception if (debugLogging) {addLogEntry("getDeltaQueryOneDriveApiInstance.getChangesByItemId(selectedDriveId, selectedItemId, providedDeltaLink) generated a OneDriveException", ["debug"]);} // get the error message auto errorArray = splitLines(exception.msg); // Error handling operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within getDeltaQueryOneDriveApiInstance if (exception.httpStatusCode == 410) { addLogEntry(); addLogEntry("WARNING: The OneDrive API responded with an error that indicates the locally stored deltaLink value is invalid"); // Essentially the 'providedDeltaLink' that we have stored is no longer available ... re-try without the stored deltaLink addLogEntry("WARNING: Retrying OneDrive API call without using the locally stored deltaLink value"); // Configure an empty deltaLink if (debugLogging) {addLogEntry("Delta link expired for 'getDeltaQueryOneDriveApiInstance.getChangesByItemId(selectedDriveId, selectedItemId, providedDeltaLink)', setting 'deltaLink = null'", ["debug"]);} string emptyDeltaLink = ""; // retry with empty deltaLink deltaChangesBundle = getDeltaQueryOneDriveApiInstance.getChangesByItemId(selectedDriveId, selectedItemId, emptyDeltaLink); } else { // Display what the error is addLogEntry("CODING TO DO: Hitting this failure error output after getting a httpStatusCode != 410 when the API responded the deltaLink was invalid"); displayOneDriveErrorMessage(exception.msg, thisFunctionName); deltaChangesBundle = null; // Perform Garbage Collection GC.collect(); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return data return deltaChangesBundle; } // If the JSON response is not correct JSON object, exit void invalidJSONResponseFromOneDriveAPI() { addLogEntry("ERROR: Query of the OneDrive API returned an invalid JSON response"); // Must force exit here, allow logging to be done forceExit(); } // Handle an unhandled API error void defaultUnhandledHTTPErrorCode(OneDriveException exception) { // compute function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // display error displayOneDriveErrorMessage(exception.msg, thisFunctionName); // Must force exit here, allow logging to be done forceExit(); } // Display the pertinent details of the sync engine void displaySyncEngineDetails() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Display accountType, defaultDriveId, defaultRootId & remainingFreeSpace for verbose logging purposes addLogEntry("Application Version: " ~ appConfig.applicationVersion, ["verbose"]); addLogEntry("Account Type: " ~ appConfig.accountType, ["verbose"]); addLogEntry("Default Drive ID: " ~ appConfig.defaultDriveId, ["verbose"]); addLogEntry("Default Root ID: " ~ appConfig.defaultRootId, ["verbose"]); addLogEntry("Microsoft Data Centre: " ~ microsoftDataCentre, ["verbose"]); // Fetch the details from cachedOnlineDriveData DriveDetailsCache cachedOnlineDriveData; cachedOnlineDriveData = getDriveDetails(appConfig.defaultDriveId); // What do we display here for space remaining if (cachedOnlineDriveData.quotaRemaining > 0) { // Display the actual value addLogEntry("Remaining Free Space: " ~ to!string(byteToGibiByte(cachedOnlineDriveData.quotaRemaining)) ~ " GB (" ~ to!string(cachedOnlineDriveData.quotaRemaining) ~ " bytes)", ["verbose"]); } else { // zero or non-zero value or restricted if (!cachedOnlineDriveData.quotaRestricted){ addLogEntry("Remaining Free Space: 0 KB", ["verbose"]); } else { addLogEntry("Remaining Free Space: Not Available", ["verbose"]); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Query itemdb.computePath() and catch potential assert when DB consistency issue occurs // This function returns what that local physical path should be on the local disk string computeItemPath(string thisDriveId, string thisItemId) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // static declare this for this function static import core.exception; string calculatedPath; // Issue #3336 - Convert thisDriveId to lowercase before any test if (appConfig.accountType == "personal") { thisDriveId = transformToLowerCase(thisDriveId); } // What driveID and itemID we trying to calculate the path for if (debugLogging) { string initialComputeLogMessage = format("Attempting to calculate local filesystem path for '%s' and '%s'", thisDriveId, thisItemId); addLogEntry(initialComputeLogMessage, ["debug"]); } // Perform the original calculation of the path using the values provided try { // The 'itemDB.computePath' will calculate the full path for the combination of provided driveId and itemId values. // This function traverses the parent chain of a given item (e.g., folder or file) using stored parent-child relationships // in the database, reconstructing the correct path from the item's root to itself. calculatedPath = itemDB.computePath(thisDriveId, thisItemId); if (debugLogging) {addLogEntry("Calculated local path via itemDB.computePath() = " ~ to!string(calculatedPath), ["debug"]);} } catch (core.exception.AssertError) { // broken tree in the database, we cant compute the path for this item id, exit addLogEntry("ERROR: A database consistency issue has been caught. A --resync is needed to rebuild the database."); // Must force exit here, allow logging to be done forceExit(); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return calculated path as string return calculatedPath; } // Try and compute the file hash for the given item bool testFileHash(string path, Item item) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Due to this function, we need to keep the return ; code, so that this function operates as efficiently as possible. // It is pointless having the entire code run through and performing additional needless checks where it is not required // Whilst this means some extra code / duplication in this function, it cannot be helped // Generate QuickXORHash first before attempting to generate any other type of hash if (item.quickXorHash) { if (item.quickXorHash == computeQuickXorHash(path)) { // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return true; } } else if (item.sha256Hash) { if (item.sha256Hash == computeSHA256Hash(path)) { // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return true; } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return false; } // Process items that need to be removed from the local filesystem as they were removed online void processDeleteItems() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Has the user configured to use the 'Recycle Bin' locally, for any files that are deleted online? if (!appConfig.getValueBool("use_recycle_bin")) { if (debugLogging) {addLogEntry("Performing filesystem deletion, using reverse order of items to delete", ["debug"]);} foreach_reverse (i; idsToDelete) { Item item; string path; if (!itemDB.selectById(i[0], i[1], item)) continue; // check if the item is in the db // Compute this item path path = computeItemPath(i[0], i[1]); // Log the action if the path exists .. it may of already been removed and this is a legacy array item if (exists(path)) { if (item.type == ItemType.file) { addLogEntry("Trying to delete local file: " ~ path); } else { addLogEntry("Trying to delete local directory: " ~ path); } } // Process the database entry removal. In a --dry-run scenario, this is being done against a DB copy itemDB.deleteById(item.driveId, item.id); if (item.remoteDriveId != null) { // delete the linked remote folder itemDB.deleteById(item.remoteDriveId, item.remoteId); } // Add to pathFakeDeletedArray // We dont want to try and upload this item again, so we need to track this objects removal if (dryRun) { // We need to add './' here so that it can be correctly searched to ensure it is not uploaded string pathToAdd = "./" ~ path; pathFakeDeletedArray ~= pathToAdd; } bool needsRemoval = false; if (exists(path)) { // path exists on the local system // make sure that the path refers to the correct item Item pathItem; if (itemDB.selectByPath(path, item.driveId, pathItem)) { if (pathItem.id == item.id) { needsRemoval = true; } else { addLogEntry("Skipping local path removal due to 'id' difference!"); } } else { // item has disappeared completely needsRemoval = true; } } if (needsRemoval) { // Log the action if (item.type == ItemType.file) { addLogEntry("Deleting local file: " ~ path, fileTransferNotifications()); } else { addLogEntry("Deleting local directory: " ~ path, fileTransferNotifications()); } // Perform the action if (!dryRun) { if (isFile(path)) { safeRemove(path); } else { try { // Remove any children of this path if they still exist // Resolve 'Directory not empty' error when deleting local files foreach (DirEntry child; dirEntries(path, SpanMode.depth, false)) { attrIsDir(child.linkAttributes) ? rmdir(child.name) : safeRemove(child.name); } // Remove the path now that it is empty of children rmdirRecurse(path); } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, path); } } } } } } else { if (debugLogging) {addLogEntry("Moving online deleted files to configured local Recycle Bin", ["debug"]);} // Process in normal order, so that the parent, if a folder, gets moved 'first' mirroring how files / folders are deleted in GNOME and KDE foreach (i; idsToDelete) { Item item; string path; if (!itemDB.selectById(i[0], i[1], item)) continue; // check if the item is in the db // Compute this item path path = computeItemPath(i[0], i[1]); // Log the action if the path exists .. it may of already been removed and this is a legacy array item if (exists(path)) { if (item.type == ItemType.file) { addLogEntry("Trying to move this local file to the configured 'Recycle Bin': " ~ path); } else { addLogEntry("Trying to move this local directory to the configured 'Recycle Bin': " ~ path); } } // Process the database entry removal. In a --dry-run scenario, this is being done against a DB copy itemDB.deleteById(item.driveId, item.id); if (item.remoteDriveId != null) { // delete the linked remote folder itemDB.deleteById(item.remoteDriveId, item.remoteId); } // Add to pathFakeDeletedArray // We dont want to try and upload this item again, so we need to track this objects removal if (dryRun) { // We need to add './' here so that it can be correctly searched to ensure it is not uploaded string pathToAdd = "./" ~ path; pathFakeDeletedArray ~= pathToAdd; } // Local path removal bool needsRemoval = false; if (exists(path)) { // path exists on the local system // make sure that the path refers to the correct item Item pathItem; if (itemDB.selectByPath(path, item.driveId, pathItem)) { if (pathItem.id == item.id) { needsRemoval = true; } else { addLogEntry("Skipping local path removal due to 'id' difference!"); } } else { // item has disappeared completely needsRemoval = true; } } if (needsRemoval) { // Log the action if (item.type == ItemType.file) { addLogEntry("Moving this local file to the configured 'Recycle Bin': " ~ path, fileTransferNotifications()); } else { addLogEntry("Moving this local directory to the configured 'Recycle Bin': " ~ path, fileTransferNotifications()); } // Perform the action if (!dryRun) { // Move the 'path' to the configured recycle bin movePathToRecycleBin(path); } } } } if (!dryRun) { // Cleanup array memory idsToDelete = []; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Move to the 'Recycle Bin' rather than a hard delete locally of the online deleted item void movePathToRecycleBin(string path) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // This is a 2 step process // 1. Move the file // - If the destination 'name' already exists, the file being moved to the 'Recycle Bin' needs to have a number added to it. // 2. Create the metadata about where the file came from // - This is in a specific format: // [Trash Info] // Path=/original/absolute/path/to/the/file/or/folder // DeletionDate=YYYY-MM-DDTHH:MM:SS // Calculate all the initial paths required string computedFullLocalPath = absolutePath(path); string fileNameOnly = baseName(path); string computedRecycleBinFilePath = appConfig.recycleBinFilePath ~ fileNameOnly; string computedRecycleBinInfoPath = appConfig.recycleBinInfoPath ~ fileNameOnly ~ ".trashinfo"; bool isPathFile = isFile(computedFullLocalPath); // The 'destination' needs to be unique, but if there is a 'collision' the RecycleBin paths need to be updated to be: // - file1.data (1) // - file1.data (1).trashinfo if (exists(computedRecycleBinFilePath)) { // There is an existing file with the same name already in the 'Recycle Bin' // - Testing has show that this counter MUST start at 2 to be compatible with FreeDesktop.org Trash Specification .... int n = 2; // We need to split this out string nameOnly = stripExtension(fileNameOnly); // "file1" string extension = extension(fileNameOnly); // ".data" // We need to test for this: nameOnly.n.extension while (exists(format(appConfig.recycleBinFilePath ~ nameOnly ~ ".%d." ~ extension, n))) { n++; } // Generate newFileNameOnly string newFileNameOnly = format(nameOnly ~ ".%d." ~ extension, n); // UPDATE: // - computedRecycleBinFilePath // - computedRecycleBinInfoPath computedRecycleBinFilePath = appConfig.recycleBinFilePath ~ newFileNameOnly; computedRecycleBinInfoPath = appConfig.recycleBinInfoPath ~ newFileNameOnly ~ ".trashinfo"; } // Move the file to the 'Recycle Bin' path computedRecycleBinFilePath // - DMD has no 'move' specifically, it uses 'rename' to achieve this // https://forum.dlang.org/thread/kwnwrlqtjehldckyfmau@forum.dlang.org // Use rename() as Linux is POSIX compliant, we have an atomic operation where at no point in time the 'to' is missing. try { rename(computedFullLocalPath, computedRecycleBinFilePath); } catch (Exception e) { // Handle exceptions, e.g., log error if (isPathFile) { addLogEntry("Move of local file failed for " ~ to!string(path) ~ ": " ~ e.msg, ["error"]); } else { addLogEntry("Move of local directory failed for " ~ to!string(path) ~ ": " ~ e.msg, ["error"]); } } // Generate the 'Recycle Bin' metadata file using computedRecycleBinInfoPath auto now = Clock.currTime().toLocalTime(); string deletionDate = format("%04d-%02d-%02dT%02d:%02d:%02d",now.year, now.month, now.day, now.hour, now.minute, now.second); // Format the content of the .trashinfo file string content = format("[Trash Info]\nPath=%s\nDeletionDate=%s\n", computedFullLocalPath, deletionDate); // Write the metadata file try { std.file.write(computedRecycleBinInfoPath, content); } catch (Exception e) { // Handle exceptions, e.g., log error addLogEntry("Writing of .trashinfo metadata file failed for " ~ computedRecycleBinInfoPath ~ ": " ~ e.msg, ["error"]); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // List items that were deleted online, but, due to --download-only being used, will not be deleted locally void listDeletedItems() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // For each id in the idsToDelete array foreach_reverse (i; idsToDelete) { Item item; string path; if (!itemDB.selectById(i[0], i[1], item)) continue; // check if the item is in the db // Compute this item path path = computeItemPath(i[0], i[1]); // Log the action if the path exists .. it may of already been removed and this is a legacy array item if (exists(path)) { if (item.type == ItemType.file) { if (verboseLogging) {addLogEntry("Skipping local deletion for file " ~ path, ["verbose"]);} } else { if (verboseLogging) {addLogEntry("Skipping local deletion for directory " ~ path, ["verbose"]);} } } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Update the timestamp of an object online void uploadLastModifiedTime(Item originItem, string driveId, string id, SysTime mtime, string eTag) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } string itemModifiedTime; itemModifiedTime = mtime.toISOExtString(); JSONValue data = [ "fileSystemInfo": JSONValue([ "lastModifiedDateTime": itemModifiedTime ]) ]; // What eTag value do we use? string eTagValue; if (appConfig.accountType == "personal") { // Nullify the eTag to avoid 412 errors as much as possible eTagValue = null; } else { eTagValue = eTag; } JSONValue response; OneDriveApi uploadLastModifiedTimeApiInstance; // Try and update the online last modified time try { // Create a new OneDrive API instance uploadLastModifiedTimeApiInstance = new OneDriveApi(appConfig); uploadLastModifiedTimeApiInstance.initialise(); // Use this instance response = uploadLastModifiedTimeApiInstance.updateById(driveId, id, data, eTagValue); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadLastModifiedTimeApiInstance.releaseCurlEngine(); uploadLastModifiedTimeApiInstance = null; // Perform Garbage Collection GC.collect(); // Do we actually save the response? // Special case here .. if the DB record item (originItem) is a remote object, thus, if we save the 'response' we will have a DB FOREIGN KEY constraint failed problem // Update 'originItem.mtime' with the correct timestamp // Update 'originItem.size' with the correct size from the response // Update 'originItem.eTag' with the correct eTag from the response // Update 'originItem.cTag' with the correct cTag from the response // Update 'originItem.quickXorHash' with the correct quickXorHash from the response // Everything else should remain the same .. and then save this DB record to the DB .. // However, we did this, for the local modified file right before calling this function to update the online timestamp ... so .. do we need to do this again, effectively performing a double DB write for the same data? if ((originItem.type != ItemType.remote) && (originItem.remoteType != ItemType.file)) { if (response.type() == JSONType.object) { // Save the response JSON saveItem(response); } else { // Log why we are not saving if (debugLogging) {addLogEntry("uploadLastModifiedTime: updateById returned no JSON payload (likely HTTP 204); skipping saveItem()", ["debug"]);} } } } catch (OneDriveException exception) { // Handle a 409 - ETag does not match current item's value // Handle a 412 - A precondition provided in the request (such as an if-match header) does not match the resource's current state. if ((exception.httpStatusCode == 409) || (exception.httpStatusCode == 412)) { // Handle the 409 if (exception.httpStatusCode == 409) { // OneDrive threw a 412 error if (verboseLogging) {addLogEntry("OneDrive returned a 'HTTP 409 - ETag does not match current item's value' when attempting file time stamp update - gracefully handling error", ["verbose"]);} if (debugLogging) { addLogEntry("File Metadata Update Failed - OneDrive eTag / cTag match issue", ["debug"]); addLogEntry("Retrying Function: " ~ thisFunctionName, ["debug"]); } } // Handle the 412 if (exception.httpStatusCode == 412) { // OneDrive threw a 412 error if (verboseLogging) {addLogEntry("OneDrive returned a 'HTTP 412 - Precondition Failed' when attempting file time stamp update - gracefully handling error", ["verbose"]);} if (debugLogging) { addLogEntry("File Metadata Update Failed - OneDrive eTag / cTag match issue", ["debug"]); addLogEntry("Retrying Function: " ~ thisFunctionName, ["debug"]); } } // Retry without eTag uploadLastModifiedTime(originItem, driveId, id, mtime, null); } else { // Any other error that should be handled // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadLastModifiedTimeApiInstance.releaseCurlEngine(); uploadLastModifiedTimeApiInstance = null; // Perform Garbage Collection GC.collect(); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform a database integrity check - checking all the items that are in-sync at the moment, validating what we know should be on disk, to what is actually on disk void performDatabaseConsistencyAndIntegrityCheck() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Log what we are doing if (!appConfig.suppressLoggingOutput) { addProcessingLogHeaderEntry("Performing a database consistency and integrity check on locally stored data", appConfig.verbosityCount); } // What driveIDsArray do we use? If we are doing a --single-directory we need to use just the drive id associated with that operation string[] consistencyCheckDriveIdsArray; if (singleDirectoryScope) { consistencyCheckDriveIdsArray ~= singleDirectoryScopeDriveId; } else { // Query the DB for all unique DriveID's consistencyCheckDriveIdsArray = itemDB.selectDistinctDriveIds(); } // Create a new DB blank item Item item; // Use the array we populate, rather than selecting all distinct driveId's from the database foreach (driveId; consistencyCheckDriveIdsArray) { // Make the logging more accurate - we cant update driveId as this then breaks the below queries if (verboseLogging) {addLogEntry("Processing DB entries for this Drive ID: " ~ driveId, ["verbose"]);} // Initialise the array Item[] driveItems = []; // Freshen the cached quota details for this driveID addOrUpdateOneDriveOnlineDetails(driveId); // What OneDrive API query do we use? // - Are we running against a National Cloud Deployments that does not support /delta ? // National Cloud Deployments do not support /delta as a query // https://docs.microsoft.com/en-us/graph/deployments#supported-features // // - Are we performing a --single-directory sync, which will exclude many items online, focusing in on a specific online directory // - Are we performing a --download-only --cleanup-local-files action? // - Are we scanning a Shared Folder // // If we did, we self generated a /delta response, thus need to now process elements that are still flagged as out-of-sync if ((singleDirectoryScope) || (nationalCloudDeployment) || (cleanupLocalFiles) || sharedFolderDeltaGeneration) { // Any entry in the DB than is flagged as out-of-sync needs to be cleaned up locally first before we scan the entire DB // Normally, this is done at the end of processing all /delta queries, however when using --single-directory or a National Cloud Deployments is configured // We cant use /delta to query the OneDrive API as National Cloud Deployments dont support /delta // https://docs.microsoft.com/en-us/graph/deployments#supported-features // We dont use /delta for --single-directory as, in order to sync a single path with /delta, we need to query the entire OneDrive API JSON data to then filter out // objects that we dont want, thus, it is easier to use the same method as National Cloud Deployments, but query just the objects we are after // For each unique OneDrive driveID we know about Item[] outOfSyncItems = itemDB.selectOutOfSyncItems(driveId); foreach (outOfSyncItem; outOfSyncItems) { if (!dryRun) { // clean up idsToDelete idsToDelete.length = 0; assumeSafeAppend(idsToDelete); // flag to delete local file as it now is no longer in sync with OneDrive if (debugLogging) { addLogEntry("Flagging to delete local item as it now is no longer in sync with OneDrive", ["debug"]); addLogEntry("outOfSyncItem: " ~ to!string(outOfSyncItem), ["debug"]); } // Use the configured values - add the driveId, itemId and parentId values to the array idsToDelete ~= [outOfSyncItem.driveId, outOfSyncItem.id, outOfSyncItem.parentId]; // delete items in idsToDelete if (idsToDelete.length > 0) processDeleteItems(); } } // Clear array outOfSyncItems = []; // Fetch database items associated with this path if (singleDirectoryScope) { // Use the --single-directory items we previously configured // - query database for children objects using those items driveItems = getChildren(singleDirectoryScopeDriveId, singleDirectoryScopeItemId); } else { // Check everything associated with each driveId we know about if (debugLogging) {addLogEntry("Selecting DB items via itemDB.selectByDriveId(driveId)", ["debug"]);} // Query database driveItems = itemDB.selectByDriveId(driveId); } // Log DB items to process if (debugLogging) {addLogEntry("Database items to process for this driveId: " ~ to!string(driveItems.count), ["debug"]);} // Process each database item associated with the driveId foreach(dbItem; driveItems) { // Does it still exist on disk in the location the DB thinks it is checkDatabaseItemForConsistency(dbItem); } } else { // Check everything associated with each driveId we know about if (debugLogging) {addLogEntry("Selecting DB items via itemDB.selectByDriveId(driveId)", ["debug"]);} // Query database driveItems = itemDB.selectByDriveId(driveId); if (debugLogging) {addLogEntry("Database items to process for this driveId: " ~ to!string(driveItems.count), ["debug"]);} // Process each database item associated with the driveId foreach(dbItem; driveItems) { // Does it still exist on disk in the location the DB thinks it is checkDatabaseItemForConsistency(dbItem); } } // Clear the array driveItems = []; } // Close out the '....' being printed to the console if (!appConfig.suppressLoggingOutput) { if (appConfig.verbosityCount == 0) { completeProcessingDots(); } } // Are we doing a --download-only sync? if (!appConfig.getValueBool("download_only")) { // Do we have any known items, where they have been deleted locally, that now need to be deleted online? if (databaseItemsToDeleteOnline.length > 0) { // There are items to delete online addLogEntry("Deleted local items to delete on Microsoft OneDrive: " ~ to!string(databaseItemsToDeleteOnline.length)); foreach(localItemToDeleteOnline; databaseItemsToDeleteOnline) { // Upload to OneDrive the instruction to delete this item. This will handle the 'noRemoteDelete' flag if set uploadDeletedItem(localItemToDeleteOnline.dbItem, localItemToDeleteOnline.localFilePath); } // Cleanup array memory databaseItemsToDeleteOnline = []; } // Do we have any known items, where the content has changed locally, that needs to be uploaded? if (databaseItemsWhereContentHasChanged.length > 0) { // There are changed local files that were in the DB to upload addLogEntry("Changed local items to upload to Microsoft OneDrive: " ~ to!string(databaseItemsWhereContentHasChanged.length)); processChangedLocalItemsToUpload(); // Cleanup array memory databaseItemsWhereContentHasChanged = []; } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Check this Database Item for its consistency on disk void checkDatabaseItemForConsistency(Item dbItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Due to this function, we need to keep the return ; code, so that this function operates as efficiently as possible. // It is pointless having the entire code run through and performing additional needless checks where it is not required // Whilst this means some extra code / duplication in this function, it cannot be helped // What is the local path item string localFilePath; // Do we want to onward process this item? bool unwanted = false; // Remote directory items we can 'skip' if ((dbItem.type == ItemType.remote) && (dbItem.remoteType == ItemType.dir)) { // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return .. nothing to check here, no logging needed return; } // Compute this dbItem path early as we we use this path often localFilePath = buildNormalizedPath(computeItemPath(dbItem.driveId, dbItem.id)); // To improve logging output for this function, what is the 'logical path'? string logOutputPath; if (localFilePath == ".") { // get the configured sync_dir logOutputPath = buildNormalizedPath(appConfig.getValueString("sync_dir")); } else { // Use the path that was computed logOutputPath = localFilePath; } // Log what we are doing if (verboseLogging) {addLogEntry("Processing: " ~ logOutputPath, ["verbose"]);} // Add a processing '.' if (!appConfig.suppressLoggingOutput) { if (appConfig.verbosityCount == 0) { addProcessingDotEntry(); } } // Debug logging of paths being checked if (debugLogging) { addLogEntry("Database item being checked: " ~ to!string(dbItem), ["debug"]); addLogEntry("Local Path being checked: " ~ localFilePath, ["debug"]); } // Determine which action to take final switch (dbItem.type) { case ItemType.file: // Logging output result is handled by checkFileDatabaseItemForConsistency checkFileDatabaseItemForConsistency(dbItem, localFilePath); goto functionCompletion; case ItemType.dir, ItemType.root: // Logging output result is handled by checkDirectoryDatabaseItemForConsistency checkDirectoryDatabaseItemForConsistency(dbItem, localFilePath); goto functionCompletion; case ItemType.remote: // DB items that match: dbItem.remoteType == ItemType.dir - these should have been skipped above // This means that anything that hits here should be: dbItem.remoteType == ItemType.file checkFileDatabaseItemForConsistency(dbItem, localFilePath); goto functionCompletion; case ItemType.unknown: case ItemType.none: // Unknown type - we dont action these items goto functionCompletion; } // To correctly handle a switch|case statement we use goto post the switch|case statement as if 'break' is used, we never get to this point functionCompletion: // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform the database consistency check on this file item void checkFileDatabaseItemForConsistency(Item dbItem, string localFilePath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // What is the source of this item data? string itemSource = "database"; // Does this item|file still exist on disk? if (exists(localFilePath)) { // Path exists locally, is this path a file? if (isFile(localFilePath)) { // Can we actually read the local file? if (readLocalFile(localFilePath)){ // File is readable SysTime localModifiedTime = timeLastModified(localFilePath).toUTC(); SysTime itemModifiedTime = dbItem.mtime; // Reduce time resolution to seconds before comparing itemModifiedTime.fracSecs = Duration.zero; localModifiedTime.fracSecs = Duration.zero; if (localModifiedTime != itemModifiedTime) { // The modified dates are different if (verboseLogging) { addLogEntry("Local file time discrepancy detected: " ~ localFilePath, ["verbose"]); addLogEntry("This local file has a different modified time " ~ to!string(localModifiedTime) ~ " (UTC) when compared to " ~ itemSource ~ " modified time " ~ to!string(itemModifiedTime) ~ " (UTC)", ["verbose"]); } // Test the file hash if (!testFileHash(localFilePath, dbItem)) { // Is the local file 'newer' or 'older' (ie was an old file 'restored locally' by a different backup / replacement process?) if (localModifiedTime >= itemModifiedTime) { // Local file is newer if (!appConfig.getValueBool("download_only")) { if (verboseLogging) {addLogEntry("The file content has changed locally and has a newer timestamp, thus needs to be uploaded to OneDrive", ["verbose"]);} // Add to an array of files we need to upload as this file has changed locally in-between doing the /delta check and performing this check databaseItemsWhereContentHasChanged ~= [dbItem.driveId, dbItem.id, localFilePath]; } else { if (verboseLogging) {addLogEntry("The file content has changed locally and has a newer timestamp. The file will remain different to online file due to --download-only being used", ["verbose"]);} } } else { // Local file is older - data recovery process? something else? if (!appConfig.getValueBool("download_only")) { if (verboseLogging) {addLogEntry("The file content has changed locally and file now has a older timestamp. Uploading this file to OneDrive may potentially cause data-loss online", ["verbose"]);} // Add to an array of files we need to upload as this file has changed locally in-between doing the /delta check and performing this check databaseItemsWhereContentHasChanged ~= [dbItem.driveId, dbItem.id, localFilePath]; } else { if (verboseLogging) {addLogEntry("The file content has changed locally and file now has a older timestamp. The file will remain different to online file due to --download-only being used", ["verbose"]);} } } } else { // The file contents have not changed, but the modified timestamp has if (verboseLogging) {addLogEntry("The last modified timestamp has changed however the file content has not changed", ["verbose"]);} // Local file is newer .. are we in a --download-only situation? if (!appConfig.getValueBool("download_only")) { // Not a --download-only scenario if (!dryRun) { // Attempt to update the timestamp in the correct location // We need to use the correct driveId and itemId, especially if we are updating a OneDrive Business Shared File timestamp if (dbItem.type == ItemType.file) { // Not a remote file // Where should the timestamp update be performed ? if (localModifiedTime >= itemModifiedTime) { // Log what is being done if (verboseLogging) {addLogEntry("The local item has the same hash value as the item online but with a newer local timestamp - correcting online timestamp", ["verbose"]);} // Correct timestamp uploadLastModifiedTime(dbItem, dbItem.driveId, dbItem.id, localModifiedTime.toUTC(), dbItem.eTag); } else { // Log what is being done if (verboseLogging) {addLogEntry("The local item has the same hash value as the item online but with an older local timestamp - correcting local timestamp", ["verbose"]);} // Set the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, localFilePath, dbItem.mtime); } } else { // Remote file, remote values need to be used, we may not even have permission to change timestamp, update local file if (verboseLogging) {addLogEntry("The local item has the same hash value as the item online, however file is a OneDrive Business Shared File - correcting local timestamp", ["verbose"]);} // Set the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, localFilePath, dbItem.mtime); } } } else { // --download-only being used if (verboseLogging) {addLogEntry("The local item has the same hash value as the item online - correcting local timestamp due to --download-only being used to ensure local file matches timestamp online", ["verbose"]);} // Set the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, localFilePath, dbItem.mtime); } } } else { // The file has not changed if (verboseLogging) {addLogEntry("The file has not changed", ["verbose"]);} } } else { //The file is not readable - skipped addLogEntry("Skipping processing this file as it cannot be read (file permissions or file corruption): " ~ localFilePath); } } else { // The item was a file but now is a directory if (verboseLogging) {addLogEntry("The item was a file but now is a directory", ["verbose"]);} } } else { // File does not exist locally, but is in our database as a dbItem containing all the data was passed into this function // If we are in a --dry-run situation - this file may never have existed as we never downloaded it if (!dryRun) { // Not --dry-run situation if (verboseLogging) {addLogEntry("The file has been deleted locally", ["verbose"]);} // Add this to the array to handle post checking all database items databaseItemsToDeleteOnline ~= [DatabaseItemsToDeleteOnline(dbItem, localFilePath)]; } else { // We are in a --dry-run situation, file appears to have been deleted locally - this file may never have existed locally as we never downloaded it due to --dry-run // Did we 'fake create it' as part of --dry-run ? bool idsFakedMatch = false; // Check the file id - was this faked foreach (i; idsFaked) { if (i[1] == dbItem.id) { if (debugLogging) {addLogEntry("Matched faked file which is 'supposed' to exist locally but not created|renamed due to --dry-run use", ["debug"]);} if (verboseLogging) {addLogEntry("The file has not changed", ["verbose"]);} idsFakedMatch = true; } } // Check if the parent folder was faked being changed in any way .. so we need to check the parent id foreach (i; idsFaked) { if (i[1] == dbItem.parentId) { if (debugLogging) {addLogEntry("Matched faked parental directory which is 'supposed' to exist locally but not created|renamed due to --dry-run use", ["debug"]);} if (verboseLogging) {addLogEntry("The file has not changed", ["verbose"]);} idsFakedMatch = true; } } // file id or parent id of the file did not match anything we faked changing due to --dry-run if (!idsFakedMatch) { // dbItem.id did not match a 'faked' download new file creation - so this in-sync object was actually deleted locally, but we are in a --dry-run situation if (verboseLogging) {addLogEntry("The file has been deleted locally", ["verbose"]);} // Add this to the array to handle post checking all database items databaseItemsToDeleteOnline ~= [DatabaseItemsToDeleteOnline(dbItem, localFilePath)]; } } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform the database consistency check on this directory item void checkDirectoryDatabaseItemForConsistency(Item dbItem, string localFilePath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // What is the source of this item data? string itemSource = "database"; // Does this item|directory still exist on disk? if (exists(localFilePath)) { // Fix https://github.com/abraunegg/onedrive/issues/1915 try { if (!isDir(localFilePath)) { if (verboseLogging) {addLogEntry("The item was a directory but now it is a file", ["verbose"]);} uploadDeletedItem(dbItem, localFilePath); uploadNewFile(localFilePath); } else { // Directory still exists locally if (verboseLogging) {addLogEntry("The directory has not changed", ["verbose"]);} // When we are using --single-directory, we use the getChildren() call to get all children of a path, meaning all children are already traversed // Thus, if we traverse the path of this directory .. we end up with double processing & log output .. which is not ideal if (!singleDirectoryScope) { // loop through the children Item[] childrenFromDatabase = itemDB.selectChildren(dbItem.driveId, dbItem.id); foreach (Item child; childrenFromDatabase) { checkDatabaseItemForConsistency(child); } // Clear DB response array childrenFromDatabase = []; } } } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, localFilePath); } } else { // Directory does not exist locally, but it is in our database as a dbItem containing all the data was passed into this function // If we are in a --dry-run situation - this directory may never have existed as we never created it if (!dryRun) { // Not --dry-run situation if (!appConfig.getValueBool("monitor")) { // Not in --monitor mode if (verboseLogging) {addLogEntry("The directory has been deleted locally", ["verbose"]);} } else { // Appropriate message as we are in --monitor mode if (verboseLogging) {addLogEntry("The directory appears to have been deleted locally .. but we are running in --monitor mode. This may have been 'moved' on the local filesystem rather than being 'deleted'", ["verbose"]);} if (debugLogging) {addLogEntry("Most likely cause - 'inotify' event was missing for whatever action was taken locally or action taken when application was stopped", ["debug"]);} } // A moved directory will be uploaded as 'new', delete the old directory and database reference // Add this to the array to handle post checking all database items databaseItemsToDeleteOnline ~= [DatabaseItemsToDeleteOnline(dbItem, localFilePath)]; } else { // We are in a --dry-run situation, directory appears to have been deleted locally - this directory may never have existed locally as we never created it due to --dry-run // Did we 'fake create it' as part of --dry-run ? bool idsFakedMatch = false; foreach (i; idsFaked) { if (i[1] == dbItem.id) { if (debugLogging) {addLogEntry("Matched faked directory which is 'supposed' to exist locally but not created|renamed due to --dry-run use", ["debug"]);} if (verboseLogging) {addLogEntry("The directory has not changed", ["verbose"]);} idsFakedMatch = true; } } if (!idsFakedMatch) { // dbItem.id did not match a 'faked' download new directory creation - so this in-sync object was actually deleted locally, but we are in a --dry-run situation if (verboseLogging) {addLogEntry("The directory has been deleted locally", ["verbose"]);} // Add this to the array to handle post checking all database items databaseItemsToDeleteOnline ~= [DatabaseItemsToDeleteOnline(dbItem, localFilePath)]; } else { // When we are using --single-directory, we use a the getChildren() call to get all children of a path, meaning all children are already traversed // Thus, if we traverse the path of this directory .. we end up with double processing & log output .. which is not ideal if (!singleDirectoryScope) { // loop through the children Item[] childrenFromDatabase = itemDB.selectChildren(dbItem.driveId, dbItem.id); foreach (Item child; childrenFromDatabase) { checkDatabaseItemForConsistency(child); } // Clear DB response array childrenFromDatabase = []; } } } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Does this local path (directory or file) conform with the Microsoft Naming Restrictions? It needs to conform otherwise we cannot create the directory or upload the file. bool checkPathAgainstMicrosoftNamingRestrictions(string localFilePath, string logModifier = "item") { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Check if the given path violates certain Microsoft restrictions and limitations // Return a true|false response bool invalidPath = false; // Check path against Microsoft OneDrive restriction and limitations about Windows naming for files and folders if (!invalidPath) { if (!isValidName(localFilePath)) { // This will return false if this is not a valid name according to the OneDrive API specifications addLogEntry("Skipping " ~ logModifier ~" - invalid name (Microsoft Naming Convention): " ~ localFilePath, ["info", "notify"]); invalidPath = true; } } // Check path for bad whitespace items if (!invalidPath) { if (containsBadWhiteSpace(localFilePath)) { // This will return true if this contains a bad whitespace character addLogEntry("Skipping " ~ logModifier ~" - invalid name (Contains an invalid whitespace character): " ~ localFilePath, ["info", "notify"]); invalidPath = true; } } // Check path for HTML ASCII Codes if (!invalidPath) { if (containsASCIIHTMLCodes(localFilePath)) { // This will return true if this contains HTML ASCII Codes addLogEntry("Skipping " ~ logModifier ~" - invalid name (Contains HTML ASCII Code): " ~ localFilePath, ["info", "notify"]); invalidPath = true; } } // Validate that the path is a valid UTF-16 encoded path if (!invalidPath) { if (!isValidUTF16(localFilePath)) { // This will return true if this is a valid UTF-16 encoded path, so we are checking for 'false' as response addLogEntry("Skipping " ~ logModifier ~" - invalid name (Invalid UTF-16 encoded path): " ~ localFilePath, ["info", "notify"]); invalidPath = true; } } // Check path for ASCII Control Codes if (!invalidPath) { if (containsASCIIControlCodes(localFilePath)) { // This will return true if this contains ASCII Control Codes addLogEntry("Skipping " ~ logModifier ~" - invalid name (Contains ASCII Control Codes): " ~ localFilePath, ["info", "notify"]); invalidPath = true; } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return if this is a valid path return invalidPath; } // Does this local path (directory or file) get excluded from any operation based on any client side filtering rules? bool checkPathAgainstClientSideFiltering(string localFilePath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Check the path against client side filtering rules // - check_nosync // - skip_dotfiles // - skip_symlinks // - skip_file // - skip_dir // - sync_list // - skip_size // Return a true|false response bool clientSideRuleExcludesPath = false; // Reset global syncListDirExcluded syncListDirExcluded = false; // does the path exist? if (!exists(localFilePath)) { // path does not exist - we cant review any client side rules on something that does not exist locally return clientSideRuleExcludesPath; } // - check_nosync if (!clientSideRuleExcludesPath) { // Do we need to check for .nosync? Only if --check-for-nosync was passed in if (appConfig.getValueBool("check_nosync")) { if (exists(localFilePath ~ "/.nosync")) { if (verboseLogging) {addLogEntry("Skipping item - .nosync found & --check-for-nosync enabled: " ~ localFilePath, ["verbose"]);} clientSideRuleExcludesPath = true; } } } // - skip_dotfiles if (!clientSideRuleExcludesPath) { // Do we need to check skip dot files if configured if (appConfig.getValueBool("skip_dotfiles")) { if (isDotFile(localFilePath)) { if (!syncListConfigured) { // 'sync_list' is not in use if (verboseLogging) {addLogEntry("Skipping item - .file or .folder: " ~ localFilePath, ["verbose"]);} clientSideRuleExcludesPath = true; } else { // 'sync_list' is in use - potentially skipping .file or .folder but it may be included via 'sync_list' if (verboseLogging) {addLogEntry("Potentially skipping item - .file or .folder (sync_list inclusion check to be done): " ~ localFilePath, ["verbose"]);} } } } } // - skip_symlinks if (!clientSideRuleExcludesPath) { // Is the path a symbolic link if (isSymlink(localFilePath)) { // if config says so we skip all symlinked items if (appConfig.getValueBool("skip_symlinks")) { if (verboseLogging) {addLogEntry("Skipping item - skip symbolic links configured: " ~ localFilePath, ["verbose"]);} clientSideRuleExcludesPath = true; } // skip unexisting symbolic links else if (!exists(readLink(localFilePath))) { // reading the symbolic link failed - is the link a relative symbolic link // drwxrwxr-x. 2 alex alex 46 May 30 09:16 . // drwxrwxr-x. 3 alex alex 35 May 30 09:14 .. // lrwxrwxrwx. 1 alex alex 61 May 30 09:16 absolute.txt -> /home/alex/OneDrivePersonal/link_tests/intercambio/prueba.txt // lrwxrwxrwx. 1 alex alex 13 May 30 09:16 relative.txt -> ../prueba.txt // // absolute links will be able to be read, but 'relative' links will fail, because they cannot be read based on the current working directory 'sync_dir' string currentSyncDir = getcwd(); string fullLinkPath = buildNormalizedPath(absolutePath(localFilePath)); string fileName = baseName(fullLinkPath); string parentLinkPath = dirName(fullLinkPath); // test if this is a 'relative' symbolic link chdir(parentLinkPath); auto relativeLink = readLink(fileName); auto relativeLinkTest = exists(readLink(fileName)); // reset back to our 'sync_dir' chdir(currentSyncDir); // results if (relativeLinkTest) { if (debugLogging) {addLogEntry("Not skipping item - symbolic link is a 'relative link' to target ('" ~ relativeLink ~ "') which can be supported: " ~ localFilePath, ["debug"]);} } else { addLogEntry("Skipping item - invalid symbolic link: "~ localFilePath, ["info", "notify"]); clientSideRuleExcludesPath = true; } } } } // Is this item excluded by user configuration of skip_dir or skip_file? if (!clientSideRuleExcludesPath) { if (localFilePath != ".") { // skip_dir handling if (isDir(localFilePath)) { if (debugLogging) {addLogEntry("Checking local path: " ~ localFilePath, ["debug"]);} // Only check path if config is != "" if (appConfig.getValueString("skip_dir") != "") { // The path that needs to be checked needs to include the '/' // This due to if the user has specified in skip_dir an exclusive path: '/path' - that is what must be matched if (selectiveSync.isDirNameExcluded(localFilePath.strip('.'))) { if (verboseLogging) {addLogEntry("Skipping path - excluded by skip_dir config: " ~ localFilePath, ["verbose"]);} clientSideRuleExcludesPath = true; } } } // skip_file handling if (isFile(localFilePath)) { if (debugLogging) {addLogEntry("Checking file: " ~ localFilePath, ["debug"]);} // The path that needs to be checked needs to include the '/' // This due to if the user has specified in skip_file an exclusive path: '/path/file' - that is what must be matched if (selectiveSync.isFileNameExcluded(localFilePath.strip('.'))) { if (verboseLogging) {addLogEntry("Skipping file - excluded by skip_file config: " ~ localFilePath, ["verbose"]);} clientSideRuleExcludesPath = true; } } } } // Is this item excluded by user configuration of sync_list? if (!clientSideRuleExcludesPath) { if (localFilePath != ".") { if (syncListConfigured) { // sync_list configured and in use if (selectiveSync.isPathExcludedViaSyncList(localFilePath)) { if ((isFile(localFilePath)) && (appConfig.getValueBool("sync_root_files")) && (rootName(localFilePath.strip('.').strip('/')) == "")) { if (debugLogging) {addLogEntry("Not skipping path due to sync_root_files inclusion: " ~ localFilePath, ["debug"]);} } else { if (exists(appConfig.syncListFilePath)){ // skipped most likely due to inclusion in sync_list // is this path a file or directory? if (isFile(localFilePath)) { // file if (verboseLogging) {addLogEntry("Skipping file - excluded by sync_list config: " ~ localFilePath, ["verbose"]);} } else { // directory if (verboseLogging) {addLogEntry("Skipping path - excluded by sync_list config: " ~ localFilePath, ["verbose"]);} // update syncListDirExcluded syncListDirExcluded = true; } // flag as excluded clientSideRuleExcludesPath = true; } else { // skipped for some other reason if (verboseLogging) {addLogEntry("Skipping path - excluded by user config: " ~ localFilePath, ["verbose"]);} clientSideRuleExcludesPath = true; } } } } } } // Check if this is excluded by a user set maximum filesize to upload if (!clientSideRuleExcludesPath) { if (isFile(localFilePath)) { if (fileSizeLimit != 0) { // Get the file size long thisFileSize = getSize(localFilePath); if (thisFileSize >= fileSizeLimit) { if (verboseLogging) {addLogEntry("Skipping file - excluded by skip_size config: " ~ localFilePath ~ " (" ~ to!string(thisFileSize/2^^20) ~ " MB)", ["verbose"]);} } } } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return if path is excluded return clientSideRuleExcludesPath; } // Does this JSON item (as received from OneDrive API) get excluded from any operation based on any client side filtering rules? // This function is used when we are fetching objects from the OneDrive API using a /children query to help speed up what object we query or when checking OneDrive Business Shared Files bool checkJSONAgainstClientSideFiltering(JSONValue onedriveJSONItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Debug what JSON we are evaluating against Client Side Filtering Rules if (debugLogging) {addLogEntry("Checking this JSON against Client Side Filtering Rules: " ~ sanitiseJSONItem(onedriveJSONItem), ["debug"]);} // Function flag bool clientSideRuleExcludesPath = false; // Check the path against client side filtering rules // - check_nosync (MISSING) // - skip_dotfiles (MISSING) // - skip_symlinks (MISSING) // - skip_dir // - skip_file // - sync_list // - skip_size // Return a true|false response // Use the JSON elements rather than computing a DB struct via makeItem() string thisItemId = onedriveJSONItem["id"].str; string thisItemDriveId = onedriveJSONItem["parentReference"]["driveId"].str; string thisItemParentId = onedriveJSONItem["parentReference"]["id"].str; string thisItemName = onedriveJSONItem["name"].str; // Issue #3336 - Convert thisItemDriveId to lowercase before any test if (appConfig.accountType == "personal") { thisItemDriveId = transformToLowerCase(thisItemDriveId); } // Is this parent is in the database bool parentInDatabase = false; string calculatedParentalPath; // Calculate if the Parent Item is in the database so that this flag can be reused parentInDatabase = itemDB.idInLocalDatabase(thisItemDriveId, thisItemParentId); if (parentInDatabase) { // Calculate this items path based on database entries if (debugLogging) {addLogEntry("Parent path details are in DB - computing 'calculatedParentalPath' using computeItemPath()", ["debug"]);} calculatedParentalPath = computeItemPath(thisItemDriveId, thisItemParentId); if (debugLogging) {addLogEntry("Resulting 'calculatedParentalPath' using computeItemPath() = " ~ calculatedParentalPath, ["debug"]);} } // Check if this is excluded by config option: skip_dir if (!clientSideRuleExcludesPath) { // Is the item a folder? if (isItemFolder(onedriveJSONItem)) { // Only check path if config is != "" if (!appConfig.getValueString("skip_dir").empty) { // work out the 'snippet' path where this folder would be created string simplePathToCheck = ""; string complexPathToCheck = ""; string matchDisplay = ""; if (hasParentReference(onedriveJSONItem)) { // we need to workout the FULL path for this item // simple path if (("name" in onedriveJSONItem["parentReference"]) != null) { simplePathToCheck = onedriveJSONItem["parentReference"]["name"].str ~ "/" ~ onedriveJSONItem["name"].str; } else { simplePathToCheck = onedriveJSONItem["name"].str; } if (debugLogging) {addLogEntry("skip_dir path to check (simple): " ~ simplePathToCheck, ["debug"]);} // complex path calculation if (parentInDatabase) { // build up complexPathToCheck based on database data complexPathToCheck = calculatedParentalPath ~ "/" ~ thisItemName; if (debugLogging) {addLogEntry("Updated 'complexPathToCheck' to '"~ complexPathToCheck ~"' for 'skip_dir' validation to determine if this directory should be excluded.", ["debug"]);} } else { if (debugLogging) {addLogEntry("Parent details not in database - unable to compute complex path to check using database data", ["debug"]);} // use onedriveJSONItem["parentReference"]["path"].str string selfBuiltPath = onedriveJSONItem["parentReference"]["path"].str ~ "/" ~ onedriveJSONItem["name"].str; // Check for ':' and split if present auto splitIndex = selfBuiltPath.indexOf(":"); if (splitIndex != -1) { // Keep only the part after ':' selfBuiltPath = selfBuiltPath[splitIndex + 1 .. $]; } // set complexPathToCheck to selfBuiltPath and be compatible with computeItemPath() output complexPathToCheck = "." ~ selfBuiltPath; } // were we able to compute a complexPathToCheck ? if (!complexPathToCheck.empty) { // complexPathToCheck must at least start with './' to ensure logging output consistency but also for pattern matching consistency if (!startsWith(complexPathToCheck, "./")) { complexPathToCheck = "./" ~ complexPathToCheck; } // log the complex path to check if (debugLogging) {addLogEntry("skip_dir path to check (complex): " ~ complexPathToCheck, ["debug"]);} } } else { simplePathToCheck = onedriveJSONItem["name"].str; } // If 'simplePathToCheck' or 'complexPathToCheck' is of the following format: root:/folder // then isDirNameExcluded matching will not work if (simplePathToCheck.canFind(":")) { if (debugLogging) {addLogEntry("Updating simplePathToCheck to remove 'root:'", ["debug"]);} simplePathToCheck = processPathToRemoveRootReference(simplePathToCheck); } if (complexPathToCheck.canFind(":")) { if (debugLogging) {addLogEntry("Updating complexPathToCheck to remove 'root:'", ["debug"]);} complexPathToCheck = processPathToRemoveRootReference(complexPathToCheck); } // OK .. what checks are we doing? if ((!simplePathToCheck.empty) && (complexPathToCheck.empty)) { // just a simple check if (debugLogging) {addLogEntry("Performing a simple check only", ["debug"]);} clientSideRuleExcludesPath = selectiveSync.isDirNameExcluded(simplePathToCheck); } else { // simple and complex if (debugLogging) {addLogEntry("Performing a simple then complex path match if required", ["debug"]);} // simple first if (debugLogging) {addLogEntry("Performing a simple check first", ["debug"]);} clientSideRuleExcludesPath = selectiveSync.isDirNameExcluded(simplePathToCheck); if (!clientSideRuleExcludesPath) { if (debugLogging) {addLogEntry("Simple match was false, attempting complex match", ["debug"]);} // simple didnt match, perform a complex check clientSideRuleExcludesPath = selectiveSync.isDirNameExcluded(complexPathToCheck); } } // End Result if (debugLogging) {addLogEntry("skip_dir exclude result (directory based): " ~ to!string(clientSideRuleExcludesPath), ["debug"]);} if (clientSideRuleExcludesPath) { // what path should be displayed if we are excluding if (!complexPathToCheck.empty) { // try and always use the complex path as it is more complete for application output matchDisplay = complexPathToCheck; } else { matchDisplay = simplePathToCheck; } // This path should be skipped if (verboseLogging) {addLogEntry("Skipping path - excluded by skip_dir config: " ~ matchDisplay, ["verbose"]);} } } } // Is the item a file? // We need to check to see if this files path is excluded as well if (isItemFile(onedriveJSONItem)) { // Only check path if config is != "" if (!appConfig.getValueString("skip_dir").empty) { // variable to check the file path against skip_dir string pathToCheck; if (parentInDatabase) { // Parent is in the database - use those details to compute this files parental path pathToCheck = calculatedParentalPath; if (debugLogging) {addLogEntry("Updated 'pathToCheck' to '"~ pathToCheck ~"' for 'skip_dir' validation to determine if this file should be excluded.", ["debug"]);} } else { // Parent is not in the database .. compute manually if (hasParentReference(onedriveJSONItem)) { // use onedriveJSONItem["parentReference"]["path"].str string selfBuiltPath = onedriveJSONItem["parentReference"]["path"].str; if (debugLogging) {addLogEntry("Initial file based selfBuiltPath = " ~ selfBuiltPath, ["debug"]);} // Check for ':' and split if present within 'selfBuiltPath' auto splitIndex = selfBuiltPath.indexOf(":"); if (splitIndex != -1) { // Keep only the part after ':' string pathAfterSplit = selfBuiltPath[splitIndex + 1 .. $]; if (debugLogging) {addLogEntry("pathAfterSplit = " ~ pathAfterSplit, ["debug"]);} if (pathAfterSplit.empty) { // Empty path, thus this is most likely a file in the account root selfBuiltPath = "/"; } else { // There is a path after the split, this is the path we are interested in // However ... in a Shared Folder scenario, this path now is the absolute path on the remote driveID .. could be problematic selfBuiltPath = pathAfterSplit; } // Result after split if (debugLogging) {addLogEntry("selfBuiltPath after splitting at : = " ~ selfBuiltPath, ["debug"]);} } // Update file path to check against 'skip_dir' using the self built details pathToCheck = selfBuiltPath; if (debugLogging) {addLogEntry("Updated (manual computation) 'pathToCheck' to '"~ pathToCheck ~"' for 'skip_dir' validation to determine if this file should be excluded.", ["debug"]);} } } // Build the consistent path for logging output string logItemPath = ensureStartsWithDotSlash(buildNormalizedPath(pathToCheck ~ "/" ~ onedriveJSONItem["name"].str)); // Perform the skip_dir check for file path if (debugLogging) {addLogEntry("skip_dir path to check (file based): " ~ to!string(pathToCheck), ["debug"]);} clientSideRuleExcludesPath = selectiveSync.isDirNameExcluded(pathToCheck); // 'skip_dir' result if (debugLogging) {addLogEntry("skip_dir exclude result (file based): " ~ to!string(clientSideRuleExcludesPath), ["debug"]);} if (clientSideRuleExcludesPath) { // this files path should be skipped if (verboseLogging) {addLogEntry("Skipping file - file path is excluded by skip_dir config: " ~ logItemPath, ["verbose"]);} } } } } // Check if this is excluded by config option: skip_file if (!clientSideRuleExcludesPath) { // is the item a file ? if (isFileItem(onedriveJSONItem)) { // JSON item is a file // skip_file can contain 4 types of entries: // - wildcard - *.txt // - text + wildcard - name*.txt // - full path + combination of any above two - /path/name*.txt // - full path to file - /path/to/file.txt string exclusionTestPath = ""; // is the parent id in the database? if (parentInDatabase) { // parent id is in the database, so we can try and calculate the full file path string newItemPath = ""; // Compute this item path & need the full path for this file newItemPath = calculatedParentalPath ~ "/" ~ thisItemName; // The path that needs to be checked needs to include the '/' // This due to if the user has specified in skip_file an exclusive path: '/path/file' - that is what must be matched // However, as 'path' used throughout, use a temp variable with this modification so that we use the temp variable for exclusion checks if (!startsWith(newItemPath, "/")){ // Add '/' to the path exclusionTestPath = '/' ~ newItemPath; } // Normalise the path to ensure any initial sequence of '/./././' or similar is normalised exclusionTestPath = buildNormalizedPath(exclusionTestPath); // what are we checking if (debugLogging) {addLogEntry("Updated 'newItemPath' to '"~ newItemPath ~"' for 'skip_file' validation to determine if this file should be excluded.", ["debug"]);} } else { // parent not in database, we can only check using this JSON item's name if (!startsWith(thisItemName, "/")){ // Add '/' to the path exclusionTestPath = '/' ~ thisItemName; } // what are we checking if (debugLogging) {addLogEntry("skip_file item to check (file name only - parent path not in database): " ~ exclusionTestPath, ["debug"]);} } // Perform the 'skip_file' evaluation clientSideRuleExcludesPath = selectiveSync.isFileNameExcluded(exclusionTestPath); if (debugLogging) {addLogEntry("skip_file evaluation result: " ~ to!string(clientSideRuleExcludesPath), ["debug"]);} if (clientSideRuleExcludesPath) { // This path should be skipped if (verboseLogging) {addLogEntry("Skipping file - excluded by skip_file config: " ~ exclusionTestPath, ["verbose"]);} } } } // Check if this is included or excluded by use of sync_list if (!clientSideRuleExcludesPath) { // No need to try and process something against a sync_list if it has been configured if (syncListConfigured) { // Compute the item path if empty - as to check sync_list we need an actual path to check // What is the path of the new item string newItemPath; // Is the parent in the database? If not, we cannot compute the full path based on the database entries // In a --resync scenario - the database is empty if (parentInDatabase) { // Calculate this items path based on database entries newItemPath = calculatedParentalPath ~ "/" ~ thisItemName; if (debugLogging) {addLogEntry("Updated 'newItemPath' to '"~ newItemPath ~"' for 'sync_list' validation to determine if this directory should be included.", ["debug"]);} } else { // Parent is not in the database .. we need to compute it .. why ???? if (appConfig.getValueBool("resync")) { if (debugLogging) {addLogEntry("Parent NOT in DB .. we need to manually compute this path due to --resync being used", ["debug"]);} } else { if (debugLogging) {addLogEntry("Parent NOT in DB .. we need to manually compute this path .......", ["debug"]);} } // gather the applicable path details if (("path" in onedriveJSONItem["parentReference"]) != null) { // If there is a parent reference path, try and use it string selfBuiltPath = onedriveJSONItem["parentReference"]["path"].str ~ "/" ~ onedriveJSONItem["name"].str; // Check for ':' and split if present string[] splitPaths; auto splitIndex = selfBuiltPath.indexOf(":"); if (splitIndex != -1) { // Keep only the part after ':' splitPaths = selfBuiltPath.split(":"); selfBuiltPath = splitPaths[1]; } // Debug output what the self-built path currently is if (debugLogging) {addLogEntry(" - selfBuiltPath currently calculated as: " ~ selfBuiltPath, ["debug"]);} // Issue #2731 // Get the remoteDriveId from JSON record string remoteDriveId = onedriveJSONItem["parentReference"]["driveId"].str; // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { remoteDriveId = transformToLowerCase(remoteDriveId); } // Is this potentially a shared folder? This is the only reliable way to determine this ... if (remoteDriveId != appConfig.defaultDriveId) { // Yes this JSON is from a Shared Folder // Query the database for the 'remote' folder details from the database if (debugLogging) {addLogEntry("Query database for this 'remoteDriveId' record: " ~ to!string(remoteDriveId), ["debug"]);} Item remoteItem; itemDB.selectByRemoteDriveId(remoteDriveId, remoteItem); if (debugLogging) {addLogEntry("Query returned result (itemDB.selectByRemoteDriveId): " ~ to!string(remoteItem), ["debug"]);} // Shared Folders present a unique challenge to determine what path needs to be used, especially in a --resync scenario where there are near zero records available to use computeItemPath() // Update the path that will be used to check 'sync_list' with the 'name' of the remoteDriveId database record // Issue #3331 // Avoid duplicating the shared folder root name if already present if (!selfBuiltPath.startsWith("/" ~ remoteItem.name ~ "/")) { selfBuiltPath = remoteItem.name ~ selfBuiltPath; if (debugLogging) {addLogEntry("selfBuiltPath after 'Shared Folder' DB details update = " ~ to!string(selfBuiltPath), ["debug"]);} } else { if (debugLogging) {addLogEntry("Shared Folder name already present in path; no update needed to selfBuiltPath", ["debug"]);} } } // Issue #2740 // If selfBuiltPath is containing any sort of URL encoding, due to special characters (spaces, umlaut, or any other character that is HTML encoded, this specific path now needs to be HTML decoded // Does the path contain HTML encoding? if (containsURLEncodedItems(selfBuiltPath)) { // decode it if (debugLogging) {addLogEntry("selfBuiltPath for sync_list check needs decoding: " ~ selfBuiltPath, ["debug"]);} try { // try and decode selfBuiltPath newItemPath = decodeComponent(selfBuiltPath); } catch (URIException exception) { // why? if (verboseLogging) { addLogEntry("ERROR: Unable to URL Decode path: " ~ exception.msg, ["verbose"]); addLogEntry("ERROR: To resolve, rename this item online: " ~ selfBuiltPath, ["verbose"]); } // have to use as-is due to decode error newItemPath = selfBuiltPath; } } else { // use as-is newItemPath = selfBuiltPath; } // The final format of newItemPath when self building needs to be the same as newItemPath when computed using computeItemPath .. this is handled later below if (debugLogging) {addLogEntry("newItemPath as manually computed by selfBuiltPath process = " ~ to!string(selfBuiltPath), ["debug"]);} } else { // no parent reference path available in provided JSON newItemPath = thisItemName; } } // The 'newItemPath' needs to be updated to ensure it is in the right format // Regardless of built from DB or computed it needs to be in this format: // ./path/path/ etc // This then makes the path output with 'sync_list' consistent, and, more importantly consistent for 'sync_list' evaluations newItemPath = ensureStartsWithDotSlash(newItemPath); // Check for HTML entities (e.g., '%20' for space) in newItemPath if (containsURLEncodedItems(newItemPath)) { if (verboseLogging) { addLogEntry("CAUTION: The JSON element transmitted by the Microsoft OneDrive API includes HTML URL encoded items, which may complicate pattern matching and potentially lead to synchronisation problems for this item.", ["verbose"]); addLogEntry("WORKAROUND: An alternative solution could be to change the name of this item through the online platform: " ~ newItemPath, ["verbose"]); addLogEntry("See: https://github.com/OneDrive/onedrive-api-docs/issues/1765 for further details", ["verbose"]); } } // What path are we checking against sync_list? if (debugLogging) {addLogEntry("Path to check against 'sync_list' entries: " ~ newItemPath, ["debug"]);} // Unfortunately there is no avoiding this call to check if the path is excluded|included via sync_list if (selectiveSync.isPathExcludedViaSyncList(newItemPath)) { // selective sync advised to skip, however is this a file and are we configured to upload / download files in the root? if ((isItemFile(onedriveJSONItem)) && (appConfig.getValueBool("sync_root_files")) && (rootName(newItemPath) == "") ) { // This is a file // We are configured to sync all files in the root // This is a file in the logical root clientSideRuleExcludesPath = false; } else { // Path is unwanted, flag to exclude clientSideRuleExcludesPath = true; // Has this itemId already been flagged as being skipped? if (!syncListSkippedParentIds.canFind(thisItemId)) { if (isItemFolder(onedriveJSONItem)) { // Detail we are skipping this JSON data from online if (verboseLogging) {addLogEntry("Skipping path - excluded by sync_list config: " ~ newItemPath, ["verbose"]);} // Add this folder id to the elements we have already detailed we are skipping, so we do no output this again syncListSkippedParentIds ~= thisItemId; } } // Is this is a 'add shortcut to onedrive' link? if (isItemRemote(onedriveJSONItem)) { // Detail we are skipping this JSON data from online if (verboseLogging) {addLogEntry("Skipping Shared Folder Link - excluded by sync_list config: " ~ newItemPath, ["verbose"]);} // Add this folder id to the elements we have already detailed we are skipping, so we do no output this again syncListSkippedParentIds ~= thisItemId; } } } else { // Is this a file or directory? if (isItemFile(onedriveJSONItem)) { // File included due to 'sync_list' match if (verboseLogging) {addLogEntry("Including file - included by sync_list config: " ~ newItemPath, ["verbose"]);} // Is the parent item in the database? if (!parentInDatabase) { // Parental database structure needs to be created string newParentalPath = dirName(newItemPath); // Log that this parental structure needs to be created if (verboseLogging) {addLogEntry("Parental Path structure needs to be created to support included file: " ~ newParentalPath, ["verbose"]);} // Recursively, stepping backward from 'thisItemParentId', query online, save entry to DB and create the local path structure createLocalPathStructure(onedriveJSONItem, newParentalPath); // If this is --dry-run if (dryRun) { // we dont create the directory, but we need to track that we 'faked it' idsFaked ~= [onedriveJSONItem["parentReference"]["driveId"].str, onedriveJSONItem["parentReference"]["id"].str]; } } } else { // Directory included due to 'sync_list' match if (verboseLogging) {addLogEntry("Including path - included by sync_list config: " ~ newItemPath, ["verbose"]);} // So that this path is in the DB, we need to add onedriveJSONItem to the DB so that this record can be used to build paths if required if (parentInDatabase) { // Parent is in DB .. is this a 'new' object or an 'existing' object? // Issue #3501 - If an online name name is done, the item needs to be 'renamed' via applyPotentiallyChangedItem() later // Only save to the database at this point, if this JSON 'id' is not already in the database to allow applyPotentiallyChangedItem() to operate as expected Item tempDBItem; itemDB.selectById(onedriveJSONItem["parentReference"]["driveId"].str, onedriveJSONItem["id"].str, tempDBItem); // Was a valid DB response returned if (tempDBItem.driveId.empty) { // No .. so this is a new item // Save this JSON now saveItem(onedriveJSONItem); } } } } } } // Check if this is excluded by a user set maximum filesize to download if (!clientSideRuleExcludesPath) { if (isItemFile(onedriveJSONItem)) { if (fileSizeLimit != 0) { if (onedriveJSONItem["size"].integer >= fileSizeLimit) { if (verboseLogging) {addLogEntry("Skipping file - excluded by skip_size config: " ~ thisItemName ~ " (" ~ to!string(onedriveJSONItem["size"].integer/2^^20) ~ " MB)", ["verbose"]);} clientSideRuleExcludesPath = true; } } } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return if path is excluded return clientSideRuleExcludesPath; } // Ensure the path passed in, is in the correct format to use when evaluating 'sync_list' rules string ensureStartsWithDotSlash(string inputPath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Check if the path starts with './' if (inputPath.startsWith("./")) { return inputPath; // No modification needed } // Check if the path starts with '/' or does not start with '.' at all if (inputPath.startsWith("/")) { return "." ~ inputPath; // Prepend '.' to ensure it starts with './' } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // If the path starts with any other character or is missing './', add './' return "./" ~ inputPath; } // When using 'sync_list' if a file is to be included, ensure that the path that the file resides in, is available locally and in the database, and the path exists locally void createLocalPathStructure(JSONValue onedriveJSONItem, string newLocalParentalPath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables bool parentInDatabase; JSONValue onlinePathData; OneDriveApi onlinePathOneDriveApiInstance; onlinePathOneDriveApiInstance = new OneDriveApi(appConfig); onlinePathOneDriveApiInstance.initialise(); string thisItemDriveId; string thisItemParentId; // Log what we received to analyse if (debugLogging) { addLogEntry("createLocalPathStructure input onedriveJSONItem: " ~ to!string(onedriveJSONItem), ["debug"]); addLogEntry("createLocalPathStructure input newLocalParentalPath: " ~ newLocalParentalPath, ["debug"]); } // Configure these variables based on the JSON input thisItemDriveId = onedriveJSONItem["parentReference"]["driveId"].str; // OneDrive Personal JSON responses are in-consistent with not having 'id' available if (hasParentReferenceId(onedriveJSONItem)) { // Use the parent reference id thisItemParentId = onedriveJSONItem["parentReference"]["id"].str; } // To continue, thisItemDriveId and thisItemParentId must not be empty if ((thisItemDriveId != "") && (thisItemParentId != "")) { // Calculate if the Parent Item is in the database so that it can be re-used parentInDatabase = itemDB.idInLocalDatabase(thisItemDriveId, thisItemParentId); // Is the parent in the database? if (!parentInDatabase) { // Get data from online for this driveId and JSON item parent .. so we have the parent details if (debugLogging) {addLogEntry("createLocalPathStructure parent is not in database, fetching parental details from online", ["debug"]);} try { onlinePathData = onlinePathOneDriveApiInstance.getPathDetailsById(thisItemDriveId, thisItemParentId); } catch (OneDriveException exception) { // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // There needs to be a valid JSON to process if (onlinePathData.type() == JSONType.object) { // Does this JSON match the root name of a shared folder we may be trying to match? if (sharedFolderDeltaGeneration) { if (currentSharedFolderName == onlinePathData["name"].str) { if (debugLogging) {addLogEntry("createLocalPathStructure parent matches the current shared folder name, creating applicable shared folder database records", ["debug"]);} // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(onlinePathData); } } // Configure the grandparent items string grandparentItemDriveId; string grandparentItemParentId; grandparentItemDriveId = onlinePathData["parentReference"]["driveId"].str; // OneDrive Personal JSON responses are in-consistent with not having 'id' available if (hasParentReferenceId(onlinePathData)) { // Use the parent reference id grandparentItemParentId = onlinePathData["parentReference"]["id"].str; } else { // Testing evidence shows that for Personal accounts, use the 'id' itself grandparentItemParentId = onlinePathData["id"].str; } // Is this item's grandparent data in the database? if (!itemDB.idInLocalDatabase(grandparentItemDriveId, grandparentItemParentId)) { // grandparent needs to be added createLocalPathStructure(onlinePathData, dirName(newLocalParentalPath)); } // If this is --dry-run if (dryRun) { // we dont create the directory, but we need to track that we 'faked it' idsFaked ~= [grandparentItemDriveId, grandparentItemParentId]; } // Does the parental path exist locally? if (!exists(newLocalParentalPath)) { // the required path does not exist locally - logging is done in handleLocalDirectoryCreation // create a db item record for the online data Item newDatabaseItem = makeItem(onlinePathData); // create the path locally, save the data to the database post path creation handleLocalDirectoryCreation(newDatabaseItem, newLocalParentalPath, onlinePathData); } else { // parent path exists locally, save the data to the database saveItem(onlinePathData); } } else { // No valid JSON was responded with - unable to create local path structure addLogEntry("Unable to create the local path structure as the Microsoft OneDrive API returned an invalid response"); } } else { if (debugLogging) {addLogEntry("createLocalPathStructure parent is in the database", ["debug"]);} } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory onlinePathOneDriveApiInstance.releaseCurlEngine(); onlinePathOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Process the list of local changes to upload to OneDrive void processChangedLocalItemsToUpload() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Each element in this array 'databaseItemsWhereContentHasChanged' is an Database Item ID that has been modified locally size_t batchSize = to!int(appConfig.getValueLong("threads")); long batchCount = (databaseItemsWhereContentHasChanged.length + batchSize - 1) / batchSize; long batchesProcessed = 0; // For each batch of files to upload, upload the changed data to OneDrive foreach (chunk; databaseItemsWhereContentHasChanged.chunks(batchSize)) { processChangedLocalItemsToUploadInParallel(chunk); } // For this set of items, perform a DB PASSIVE checkpoint itemDB.performCheckpoint("PASSIVE"); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Process all the changed local items in parallel void processChangedLocalItemsToUploadInParallel(string[3][] array) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // This function received an array of string items to upload, the number of elements based on appConfig.getValueLong("threads") foreach (i, localItemDetails; processPool.parallel(array)) { if (debugLogging) {addLogEntry("Upload Thread " ~ to!string(i) ~ " Starting: " ~ to!string(Clock.currTime()), ["debug"]);} uploadChangedLocalFileToOneDrive(localItemDetails); if (debugLogging) {addLogEntry("Upload Thread " ~ to!string(i) ~ " Finished: " ~ to!string(Clock.currTime()), ["debug"]);} } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Upload changed local files to OneDrive in parallel void uploadChangedLocalFileToOneDrive(string[3] localItemDetails) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // These are the details of the item we need to upload string changedItemDriveId = localItemDetails[0]; string changedItemId = localItemDetails[1]; string localFilePath = localItemDetails[2]; // Log the path that was modified if (debugLogging) {addLogEntry("uploadChangedLocalFileToOneDrive: " ~ localFilePath, ["debug"]);} // How much space is remaining on OneDrive long remainingFreeSpace; // Did the upload fail? bool uploadFailed = false; // Did we skip due to exceeding maximum allowed size? bool skippedMaxSize = false; // Did we skip to an exception error? bool skippedExceptionError = false; // Flag for if space is available online bool spaceAvailableOnline = false; // Capture what time this upload started SysTime uploadStartTime = Clock.currTime(); // When we are uploading OneDrive Business Shared Files, we need to be targeting the right driveId and itemId string targetDriveId; string targetItemId; // Unfortunately, we cant store an array of Item's ... so we have to re-query the DB again - unavoidable extra processing here // This is because the Item[] has no other functions to allow is to parallel process those elements, so we have to use a string array as input to this function Item dbItem; itemDB.selectById(changedItemDriveId, changedItemId, dbItem); // Was a valid DB response returned if (!dbItem.driveId.empty) { // Is this a remote driveId target based on the database response? if ((dbItem.type == ItemType.remote) && (dbItem.remoteType == ItemType.file)) { // This is a remote file targetDriveId = dbItem.remoteDriveId; targetItemId = dbItem.remoteId; // we are going to make the assumption here that as this is a OneDrive Business Shared File, that there is space available spaceAvailableOnline = true; } else { // This is not a remote file targetDriveId = dbItem.driveId; targetItemId = dbItem.id; } } else { // No valid DB response was provided if (debugLogging) { string logMessage = format("No valid DB response was provided when searching for '%s' and '%s'", changedItemDriveId, changedItemId); addLogEntry(logMessage, ["debug"]); // Fetch the online data again for this file addLogEntry("Fetching latest online details for this item due to zero DB data available", ["debug"]); } OneDriveApi checkFileOneDriveApiInstance; JSONValue fileDetailsFromOneDrive; // Create a new API Instance for this thread and initialise it checkFileOneDriveApiInstance = new OneDriveApi(appConfig); checkFileOneDriveApiInstance.initialise(); // Try and get the absolute latest object details from online to potentially build a DB record we can use try { fileDetailsFromOneDrive = checkFileOneDriveApiInstance.getPathDetailsById(changedItemDriveId, changedItemId); } catch (OneDriveException exception) { // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory checkFileOneDriveApiInstance.releaseCurlEngine(); checkFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Turn 'fileDetailsFromOneDrive' into a DB item if (fileDetailsFromOneDrive.type() == JSONType.object) { // Yes if (debugLogging) {addLogEntry("Creating DB item from online API response: " ~ to!string(fileDetailsFromOneDrive), ["debug"]);} dbItem = makeItem(fileDetailsFromOneDrive); } else { // No addLogEntry("Unable to upload this modified file at this point in time: " ~ localFilePath); return; } } // Are we in an --upload-only & --remove-source-files scenario? // - In this scenario, and even more so in a --resync scenario when using these options, there is potentially 100% zero database entry for the modified file we are uploading // This will be in the logs when we are in this scenario: // Skipping adding to database as --upload-only & --remove-source-files configured if ((uploadOnly) && (localDeleteAfterUpload)) { // We are in the potential scenario where 'targetDriveId' and 'targetItemId' are still an empty value(s) // Check targetDriveId if (targetDriveId.empty) { if (debugLogging) { string logMessage = format("Updating 'targetDriveId' to '%s' due to --upload-only and --remove-source-files being used", changedItemDriveId); addLogEntry(logMessage, ["debug"]); } // set the value targetDriveId = changedItemDriveId; } // Check targetItemId if (targetItemId.empty) { if (debugLogging) { string logMessage = format("Updating 'targetItemId' to '%s' due to --upload-only and --remove-source-files being used", changedItemId); addLogEntry(logMessage, ["debug"]); } // set the value targetItemId = changedItemId; } } // Fetch the details from cachedOnlineDriveData if this is available // - cachedOnlineDriveData.quotaRestricted; // - cachedOnlineDriveData.quotaAvailable; // - cachedOnlineDriveData.quotaRemaining; DriveDetailsCache cachedOnlineDriveData; // Make sure that parentItem.driveId is in our driveIDs array to use when checking if item is in database // Keep the DriveDetailsCache array with unique entries only if (!canFindDriveId(targetDriveId, cachedOnlineDriveData)) { // Add this driveId to the drive cache, which then also sets for the defaultDriveId: // - quotaRestricted; // - quotaAvailable; // - quotaRemaining; addOrUpdateOneDriveOnlineDetails(targetDriveId); } // Query the details using the correct 'targetDriveId' for this modified file to be uploaded cachedOnlineDriveData = getDriveDetails(targetDriveId); // Configure 'remainingFreeSpace' based on the 'targetDriveId' remainingFreeSpace = cachedOnlineDriveData.quotaRemaining; // Get the file size from the actual file long thisFileSizeLocal = getSize(localFilePath); // Get the file size from the DB data, if DB data was returned, otherwise we have zero size value from the DB long thisFileSizeFromDB; if (!dbItem.size.empty) { thisFileSizeFromDB = to!long(dbItem.size); } else { thisFileSizeFromDB = 0; } // 'remainingFreeSpace' online includes the current file online // We need to remove the online file (add back the existing file size) then take away the new local file size to get a new approximate value long calculatedSpaceOnlinePostUpload = (remainingFreeSpace + thisFileSizeFromDB) - thisFileSizeLocal; // Based on what we know, for this thread - can we safely upload this modified local file? if (debugLogging) { string estimatedMessage = format("This Thread (Upload Changed File) Estimated Free Space Online (%s): ", targetDriveId); addLogEntry(estimatedMessage ~ to!string(remainingFreeSpace), ["debug"]); addLogEntry("This Thread (Upload Changed File) Calculated Free Space Online Post Upload: " ~ to!string(calculatedSpaceOnlinePostUpload), ["debug"]); } // Is there quota available for the given drive where we are uploading to? // If 'personal' accounts, if driveId == defaultDriveId, then we will have quota data - cachedOnlineDriveData.quotaRemaining will be updated so it can be reused // If 'personal' accounts, if driveId != defaultDriveId, then we will not have quota data - cachedOnlineDriveData.quotaRestricted will be set as true // If 'business' accounts, if driveId == defaultDriveId, then we will potentially have quota data - cachedOnlineDriveData.quotaRemaining will be updated so it can be reused // If 'business' accounts, if driveId != defaultDriveId, then we will potentially have quota data, but it most likely will be a 0 value - cachedOnlineDriveData.quotaRestricted will be set as true if (cachedOnlineDriveData.quotaAvailable) { // Our query told us we have free space online .. if we upload this file, will we exceed space online - thus upload will fail during upload? if (calculatedSpaceOnlinePostUpload > 0) { // Based on this thread action, we believe that there is space available online to upload - proceed spaceAvailableOnline = true; } } // Is quota being restricted? if (cachedOnlineDriveData.quotaRestricted) { // Space available online is being restricted - so we have no way to really know if there is space available online spaceAvailableOnline = true; } // Do we have space available or is space available being restricted (so we make the blind assumption that there is space available) JSONValue uploadResponse; if (spaceAvailableOnline) { // Does this file exceed the maximum file size to upload to OneDrive? if (thisFileSizeLocal <= maxUploadFileSize) { // Attempt to upload the modified file // Error handling is in performModifiedFileUpload(), and the JSON that is responded with - will either be null or a valid JSON object containing the upload result uploadResponse = performModifiedFileUpload(dbItem, localFilePath, thisFileSizeLocal); // Evaluate the returned JSON uploadResponse // If there was an error uploading the file, uploadResponse should be empty and invalid if (uploadResponse.type() != JSONType.object) { uploadFailed = true; skippedExceptionError = true; } } else { // Skip file - too large uploadFailed = true; skippedMaxSize = true; } } else { // Cant upload this file - no space available uploadFailed = true; } // Did the upload fail? if (uploadFailed) { // Upload failed .. why? // No space available online if (!spaceAvailableOnline) { addLogEntry("Skipping uploading modified file: " ~ localFilePath ~ " due to insufficient free space available on Microsoft OneDrive", ["info", "notify"]); } // File exceeds max allowed size if (skippedMaxSize) { addLogEntry("Skipping uploading this modified file as it exceeds the maximum size allowed by Microsoft OneDrive: " ~ localFilePath, ["info", "notify"]); } // Generic message if (skippedExceptionError) { // normal failure message if API or exception error generated // If Issue #2626 | Case 2-1 is triggered, the file we tried to upload was renamed, then uploaded as a new name if (exists(localFilePath)) { // Issue #2626 | Case 2-1 was not triggered, file still exists on local filesystem addLogEntry("Uploading modified file: " ~ localFilePath ~ " ... failed!", ["info", "notify"]); } } } else { // Upload was successful addLogEntry("Uploading modified file: " ~ localFilePath ~ " ... done", fileTransferNotifications()); // As no upload failure, calculate transfer metrics in a consistent manner displayTransferMetrics(localFilePath, thisFileSizeLocal, uploadStartTime, Clock.currTime()); // What do we save to the DB? Is this a OneDrive Business Shared File? if ((dbItem.type == ItemType.remote) && (dbItem.remoteType == ItemType.file)) { // We need to 'massage' the old DB record, with data from online, as the DB record was specifically crafted for OneDrive Business Shared Files Item tempItem = makeItem(uploadResponse); dbItem.eTag = tempItem.eTag; dbItem.cTag = tempItem.cTag; dbItem.mtime = tempItem.mtime; dbItem.quickXorHash = tempItem.quickXorHash; dbItem.sha256Hash = tempItem.sha256Hash; dbItem.size = tempItem.size; itemDB.upsert(dbItem); } else { // Save the response JSON item in database as is saveItem(uploadResponse); } // Update the 'cachedOnlineDriveData' record for this 'targetDriveId' so that this is tracked as accurately as possible for other threads updateDriveDetailsCache(targetDriveId, cachedOnlineDriveData.quotaRestricted, cachedOnlineDriveData.quotaAvailable, thisFileSizeLocal); // Check the integrity of the uploaded modified file if not in a --dry-run scenario if (!dryRun) { bool uploadIntegrityPassed; // Check the integrity of the uploaded modified file, if the local file still exists uploadIntegrityPassed = performUploadIntegrityValidationChecks(uploadResponse, localFilePath, thisFileSizeLocal); // Update the date / time of the file online to match the local item // Get the local file last modified time SysTime localModifiedTime = timeLastModified(localFilePath).toUTC(); // Drop fractional seconds for upload timestamp modification as Microsoft OneDrive does not support fractional seconds localModifiedTime.fracSecs = Duration.zero; // Get the latest eTag, and use that string etagFromUploadResponse = uploadResponse["eTag"].str; // Attempt to update the online lastModifiedDateTime value based on our local timestamp data if (appConfig.accountType == "personal") { // Personal Account Handling for Modified File Upload // // Did the upload integrity check pass or fail? if (!uploadIntegrityPassed) { // upload integrity check failed for the modified file if (!appConfig.getValueBool("create_new_file_version")) { // warn that file differences will exist online // as this is a 'personal' account .. we have no idea / reason potentially, so do not download the 'online' file addLogEntry("WARNING: The file uploaded to Microsoft OneDrive does not match your local version. Data loss may occur."); } else { // Create a new online version of the file by updating the online metadata uploadLastModifiedTime(dbItem, targetDriveId, targetItemId, localModifiedTime, etagFromUploadResponse); } } else { // Upload of the modified file passed integrity checks // We need to make sure that the local file on disk has this timestamp from this JSON, otherwise on the next application run: // The last modified timestamp has changed however the file content has not changed // The local item has the same hash value as the item online - correcting timestamp online // This then creates another version online which we do not want to do .. unless configured to do so if (!appConfig.getValueBool("create_new_file_version")) { // Are we in an --upload-only scenario? // In in an --upload-only scenario, it is pointless updating the local timestamp with that what is now online if(!uploadOnly){ // Create an applicable DB item from the upload JSON response Item onlineItem; onlineItem = makeItem(uploadResponse); // Correct the local file timestamp to avoid creating a new version online // Set the local timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, localFilePath, onlineItem.mtime); } } else { // Create a new online version of the file by updating the metadata, which negates the need to download the file uploadLastModifiedTime(dbItem, targetDriveId, targetItemId, localModifiedTime, etagFromUploadResponse); } } } else { // Business | SharePoint Account Handling for Modified File Upload // // Due to https://github.com/OneDrive/onedrive-api-docs/issues/935 Microsoft modifies all PDF, MS Office & HTML files with added XML content. It is a 'feature' of SharePoint. // This means that the file which was uploaded, is potentially no longer the file we have locally // There are 2 ways to solve this: // 1. Download the modified file immediately after upload as per v2.4.x (default) // 2. Create a new online version of the file, which then contributes to the users 'quota' // Did the upload integrity check pass or fail? if (!uploadIntegrityPassed) { // upload integrity check failed for the modified file if (!appConfig.getValueBool("create_new_file_version")) { // Are we in an --upload-only scenario? if(!uploadOnly){ // Download the now online modified file addLogEntry("WARNING: Microsoft OneDrive modified your uploaded file via its SharePoint 'enrichment' feature. To keep your local and online versions consistent, the altered file will now be downloaded."); addLogEntry("WARNING: Please refer to https://github.com/OneDrive/onedrive-api-docs/issues/935 for further details."); // Download the file directly using the prior upload JSON response downloadFileItem(uploadResponse, true); } else { // --upload-only being used // we are not downloading a file, warn that file differences will exist addLogEntry("WARNING: The file uploaded to Microsoft OneDrive has been modified through its SharePoint 'enrichment' process and no longer matches your local version."); addLogEntry("WARNING: Please refer to https://github.com/OneDrive/onedrive-api-docs/issues/935 for further details."); } } else { // Create a new online version of the file by updating the metadata, which negates the need to download the file uploadLastModifiedTime(dbItem, targetDriveId, targetItemId, localModifiedTime, etagFromUploadResponse); } } else { // Upload of the modified file passed integrity checks // We need to make sure that the local file on disk has this timestamp from this JSON, otherwise on the next application run: // The last modified timestamp has changed however the file content has not changed // The local item has the same hash value as the item online - correcting timestamp online // This then creates another version online which we do not want to do .. unless configured to do so if (!appConfig.getValueBool("create_new_file_version")) { // Are we in an --upload-only scenario? // In in an --upload-only scenario, it is pointless updating the local timestamp with that what is now online if(!uploadOnly){ // Create an applicable DB item from the upload JSON response Item onlineItem; onlineItem = makeItem(uploadResponse); // Correct the local file timestamp to avoid creating a new version online // Set the timestamp, logging and error handling done within function setLocalPathTimestamp(dryRun, localFilePath, onlineItem.mtime); } } else { // Create a new online version of the file by updating the metadata, which negates the need to download the file uploadLastModifiedTime(dbItem, targetDriveId, targetItemId, localModifiedTime, etagFromUploadResponse); } } } // Are we in an --upload-only & --remove-source-files scenario? if ((uploadOnly) && (localDeleteAfterUpload)) { // Perform the local file deletion removeLocalFilePostUpload(localFilePath); } } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Remove the local file if using --upload-only & --remove-source-files scenario in a consistent manner void removeLocalFilePostUpload(string localPathToRemove) { // File has to exist before removal if (exists(localPathToRemove)) { // Log that we are deleting a local item addLogEntry("Attempting removal of local file as --upload-only & --remove-source-files configured"); // Are we in a --dry-run scenario? if (!dryRun) { // Not in a --dry-run scenario if (debugLogging) {addLogEntry("Removing local file: " ~ localPathToRemove, ["debug"]);} safeRemove(localPathToRemove); addLogEntry("Removed local file: " ~ localPathToRemove); // Do we try and attempt to remove the local source tree? if (appConfig.getValueBool("remove_source_folders")) { // Remove the source directory structure but only if it is empty addLogEntry("Attempting removal of local directory structure as --upload-only & --remove-source-files & --remove-source-folders configured"); string parentPath = dirName(localPathToRemove); removeEmptyParents(localPathToRemove); addLogEntry("Removed parental path: " ~ parentPath); } } else { // --dry-run scenario addLogEntry("Not removing local file as --dry-run configured"); } } else { // Log that the path to remove does not exist locally addLogEntry("Removing local file not possible as local file does not exist"); } } // Remove empty parent directories of `filePath` upwards until: // - we hit a non-empty directory, or // - we reach the visible root (i.e. dirName(current) == "."). // Never tries to remove ".". void removeEmptyParents(string filePath) { // Work with a normalised *relative* path inside the chrooted configured 'sync_dir' // If someone passed an absolute path, normalise it anyway; your codebase // likely already ensures paths are relative within the sync root. string current = dirName(buildNormalizedPath(filePath)); while (current.length && current != ".") { // Safety: don’t descend into symlinks if (isSymlink(current)) { if (debugLogging) addLogEntry("Skipping removal; parent is a symlink: " ~ current, ["debug"]); break; } // Stop at first non-empty directory if (!isDirEmpty(current)) { if (debugLogging) addLogEntry("Stopping prune; directory not empty: " ~ current, ["debug"]); break; } if (!dryRun) { if (debugLogging) addLogEntry("Removing empty directory: " ~ current, ["debug"]); // rmdir only succeeds for empty directories; errors are collected not thrown collectException(rmdir(current)); } else { addLogEntry("Not removing empty directory as --dry-run configured: " ~ current); } // Move up one level string next = dirName(current); if (next == current) { // Just in case (shouldn’t happen with relative paths) break; } current = next; } } // Perform the upload of a locally modified file to OneDrive JSONValue performModifiedFileUpload(Item dbItem, string localFilePath, long thisFileSizeLocal) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables JSONValue uploadResponse; OneDriveApi uploadFileOneDriveApiInstance; uploadFileOneDriveApiInstance = new OneDriveApi(appConfig); uploadFileOneDriveApiInstance.initialise(); // Configure JSONValue variables we use for a session upload JSONValue currentOnlineJSONData; Item currentOnlineItemData; JSONValue uploadSessionData; string currentETag; // When we are uploading OneDrive Business Shared Files, we need to be targeting the right driveId and itemId string targetDriveId; string targetParentId; string targetItemId; // Is this a remote target? if ((dbItem.type == ItemType.remote) && (dbItem.remoteType == ItemType.file)) { // This is a remote file targetDriveId = dbItem.remoteDriveId; targetParentId = dbItem.remoteParentId; targetItemId = dbItem.remoteId; } else { // This is not a remote file targetDriveId = dbItem.driveId; targetParentId = dbItem.parentId; targetItemId = dbItem.id; } // Is this a dry-run scenario? if (!dryRun) { // Do we use simpleUpload or create an upload session? bool useSimpleUpload = false; // Try and get the absolute latest object details from online, so we get the latest eTag to try and avoid a 412 eTag error try { currentOnlineJSONData = uploadFileOneDriveApiInstance.getPathDetailsById(targetDriveId, targetItemId); } catch (OneDriveException exception) { // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // Was a valid JSON response provided? if (currentOnlineJSONData.type() == JSONType.object) { // Does the response contain an eTag? if (hasETag(currentOnlineJSONData)) { // Use the value returned from online as this will attempt to avoid a 412 response if we are creating a session upload currentETag = currentOnlineJSONData["eTag"].str; } else { // Use the database value - greater potential for a 412 error to occur if we are creating a session upload if (debugLogging) {addLogEntry("Online data for file returned zero eTag - using database eTag value", ["debug"]);} currentETag = dbItem.eTag; } // Make a reusable item from this online JSON data currentOnlineItemData = makeItem(currentOnlineJSONData); } else { // no valid JSON response - greater potential for a 412 error to occur if we are creating a session upload if (debugLogging) {addLogEntry("Online data returned was invalid - using database eTag value", ["debug"]);} currentETag = dbItem.eTag; } // What upload method should be used? if (thisFileSizeLocal <= sessionThresholdFileSize) { // file size is below session threshold useSimpleUpload = true; } // Use Session Upload regardless if (appConfig.getValueBool("force_session_upload")) { // Forcing session upload if (debugLogging) {addLogEntry("Forcing to perform upload using a session (modified)", ["debug"]);} useSimpleUpload = false; } // If the filesize is greater than zero , and we have valid 'latest' online data is the online file matching what we think is in the database? if ((thisFileSizeLocal > 0) && (currentOnlineJSONData.type() == JSONType.object)) { // Issue #2626 | Case 2-1 // If the 'online' file is newer, this will be overwritten with the file from the local filesystem - potentially constituting online data loss Item onlineFile = makeItem(currentOnlineJSONData); // Which file is technically newer? The local file or the remote file? SysTime localModifiedTime = timeLastModified(localFilePath).toUTC(); SysTime onlineModifiedTime = onlineFile.mtime; // Reduce time resolution to seconds before comparing localModifiedTime.fracSecs = Duration.zero; onlineModifiedTime.fracSecs = Duration.zero; // Which file is newer? If local is newer, it will be uploaded as a modified file in the correct manner if (localModifiedTime < onlineModifiedTime) { // Online File is actually newer than the locally modified file if (debugLogging) { addLogEntry("currentOnlineJSONData: " ~ to!string(currentOnlineJSONData), ["debug"]); addLogEntry("onlineFile: " ~ to!string(onlineFile), ["debug"]); addLogEntry("database item: " ~ to!string(dbItem), ["debug"]); } addLogEntry("Skipping uploading this item as a locally modified file, will upload as a new file (online file already exists and is newer): " ~ localFilePath); // Online is newer, rename local, then upload the renamed file // We need to know the renamed path so we can upload it string renamedPath; // Rename the local path - we WANT this to occur regardless of bypassDataPreservation setting safeBackup(localFilePath, dryRun, false, renamedPath); // Upload renamed local file as a new file uploadNewFile(renamedPath); // Process the database entry removal for the original file. In a --dry-run scenario, this is being done against a DB copy. // This is done so we can download the newer online file itemDB.deleteById(targetDriveId, targetItemId); // This file is now uploaded, return from here, but this will trigger a response that the upload failed (technically for the original filename it did, but we renamed it, then uploaded it return uploadResponse; } } // We can only upload zero size files via simpleFileUpload regardless of account type // Reference: https://github.com/OneDrive/onedrive-api-docs/issues/53 // Additionally, all files where file size is < 4MB should be uploaded by simpleUploadReplace - everything else should use a session to upload the modified file if ((thisFileSizeLocal == 0) || (useSimpleUpload)) { // Must use Simple Upload to replace the file online try { uploadResponse = uploadFileOneDriveApiInstance.simpleUploadReplace(localFilePath, targetDriveId, targetItemId); } catch (OneDriveException exception) { // HTTP request returned status code 403 if ((exception.httpStatusCode == 403) && (appConfig.getValueBool("sync_business_shared_files"))) { // We attempted to upload a file, that was shared with us, but this was shared with us as read-only addLogEntry("Unable to upload this modified file as this was shared as read-only: " ~ localFilePath); } // HTTP request returned status code 423 // Resolve https://github.com/abraunegg/onedrive/issues/36 if (exception.httpStatusCode == 423) { // The file is currently checked out or locked for editing by another user // We cant upload this file at this time addLogEntry("Unable to upload this modified file as this is currently checked out or locked for editing by another user: " ~ localFilePath); } else { // Handle all other HTTP status codes // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } catch (FileException e) { // filesystem error displayFileSystemErrorMessage(e.msg, thisFunctionName, localFilePath); } } else { // As this is a unique thread, the sessionFilePath for where we save the data needs to be unique // The best way to do this is generate a 10 digit alphanumeric string, and use this as the file extension string threadUploadSessionFilePath = appConfig.uploadSessionFilePath ~ "." ~ generateAlphanumericString(); // Create the upload session using the latest online data 'currentOnlineData' etag try { // create the session uploadSessionData = createSessionForFileUpload(uploadFileOneDriveApiInstance, localFilePath, targetDriveId, targetParentId, baseName(localFilePath), currentOnlineItemData.eTag, threadUploadSessionFilePath); } catch (OneDriveException exception) { // HTTP request returned status code 403 if ((exception.httpStatusCode == 403) && (appConfig.getValueBool("sync_business_shared_files"))) { // We attempted to upload a file, that was shared with us, but this was shared with us as read-only addLogEntry("Unable to upload this modified file as this was shared as read-only: " ~ localFilePath); return uploadResponse; } // HTTP request returned status code 423 // Resolve https://github.com/abraunegg/onedrive/issues/36 if (exception.httpStatusCode == 423) { // The file is currently checked out or locked for editing by another user // We cant upload this file at this time addLogEntry("Unable to upload this modified file as this is currently checked out or locked for editing by another user: " ~ localFilePath); return uploadResponse; } else { // Handle all other HTTP status codes // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } catch (FileException e) { // Display filesystem exception error message displayFileSystemErrorMessage(e.msg, thisFunctionName, threadUploadSessionFilePath); } // Do we have a valid session URL that we can use ? if (uploadSessionData.type() == JSONType.object) { // This is a valid JSON object // Perform the upload using the session that has been created try { // so that we have this data available if we need to re-create the session // - targetDriveId, targetParentId, baseName(localFilePath), currentOnlineItemData.eTag, threadUploadSessionFilePath uploadSessionData["targetDriveId"] = targetDriveId; uploadSessionData["targetParentId"] = targetParentId; uploadSessionData["currentETag"] = currentOnlineItemData.eTag; // attempt the session upload using the session data provided uploadResponse = performSessionFileUpload(uploadFileOneDriveApiInstance, thisFileSizeLocal, uploadSessionData, threadUploadSessionFilePath); } catch (OneDriveException exception) { // Handle all other HTTP status codes // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } catch (FileException e) { // Display filesystem exception error message displayFileSystemErrorMessage(e.msg, thisFunctionName, threadUploadSessionFilePath); } } else { // Create session Upload URL failed if (debugLogging) {addLogEntry("Unable to upload modified file as the creation of the upload session URL failed", ["debug"]);} } } } else { // We are in a --dry-run scenario uploadResponse = createFakeResponse(localFilePath); } // Debug Log the modified upload response if (debugLogging) {addLogEntry("Modified File Upload Response: " ~ to!string(uploadResponse), ["debug"]);} // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadFileOneDriveApiInstance.releaseCurlEngine(); uploadFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return JSON return uploadResponse; } // Query the OneDrive API using the provided driveId to get the latest quota details string[3][] getRemainingFreeSpaceOnline(string sourceDriveId) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Get the quota details for this sourceDriveId // Quota details are ONLY available for the main default sourceDriveId, as the OneDrive API does not provide quota details for shared folders JSONValue currentDriveQuota; bool quotaRestricted = false; // Assume quota is not restricted unless "remaining" is missing bool quotaAvailable = false; long quotaRemainingOnline = 0; string[3][] result; OneDriveApi getCurrentDriveQuotaApiInstance; string driveId; // Issue #3115 - Validate sourceDriveId length // What account type is this? if (appConfig.accountType == "personal") { // Test sourceDriveId length and validation if (!sourceDriveId.empty) { // We were provided a sourceDriveId - that is what we check driveId = transformToLowerCase(testProvidedDriveIdForLengthIssue(sourceDriveId)); } else { // No sourceDriveId provided - use appConfig.defaultDriveId and validate that driveId = transformToLowerCase(testProvidedDriveIdForLengthIssue(appConfig.defaultDriveId)); } } else { // This is not a personal account type // Ensure that we have a valid driveId to query if (sourceDriveId.empty) { // No 'driveId' was provided, use the application default driveId = appConfig.defaultDriveId; } else { // A 'driveId' was provided, use the provided 'sourceDriveId' driveId = sourceDriveId; } } // Try and query the quota for the provided driveId try { // Create a new OneDrive API instance getCurrentDriveQuotaApiInstance = new OneDriveApi(appConfig); getCurrentDriveQuotaApiInstance.initialise(); if (debugLogging) {addLogEntry("Seeking available quota for this drive id: " ~ driveId, ["debug"]);} currentDriveQuota = getCurrentDriveQuotaApiInstance.getDriveQuota(driveId); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory getCurrentDriveQuotaApiInstance.releaseCurlEngine(); getCurrentDriveQuotaApiInstance = null; // Perform Garbage Collection GC.collect(); } catch (OneDriveException e) { if (debugLogging) {addLogEntry("currentDriveQuota = onedrive.getDriveQuota(driveId) generated a OneDriveException", ["debug"]);} // If an exception occurs, it's unclear if quota is restricted, but quota details are not available quotaRestricted = true; // Considering restricted due to failure to access // Return result result ~= [to!string(quotaRestricted), to!string(quotaAvailable), to!string(quotaRemainingOnline)]; // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory getCurrentDriveQuotaApiInstance.releaseCurlEngine(); getCurrentDriveQuotaApiInstance = null; // Perform Garbage Collection GC.collect(); return result; } // Validate that currentDriveQuota is a JSON value if (currentDriveQuota.type() == JSONType.object && "quota" in currentDriveQuota) { // Response from API contains valid data // If 'personal' accounts, if driveId == defaultDriveId, then we will have data // If 'personal' accounts, if driveId != defaultDriveId, then we will not have quota data // If 'business' accounts, if driveId == defaultDriveId, then we will have data // If 'business' accounts, if driveId != defaultDriveId, then we will have data, but it will be a 0 value JSONValue quota = currentDriveQuota["quota"]; // debug output the entire 'quota' JSON response if (debugLogging) {addLogEntry("Quota Details: " ~ to!string(quota), ["debug"]);} // Does the 'quota' JSON struct contain 'remaining' ? if ("remaining" in quota) { // Issue #2806 // If this is a negative value, quota["remaining"].integer can potentially convert to a huge positive number. Convert a different way. string tempQuotaRemainingOnlineString; // is quota["remaining"] an integer type? if (quota["remaining"].type() == JSONType.integer) { // debug logging of the 'remaining' JSON struct if (debugLogging) { addLogEntry("quota remaining is an integer value - using this value: " ~ to!string(quota["remaining"].integer), ["debug"]); } // extract as integer and convert to string tempQuotaRemainingOnlineString = to!string(quota["remaining"].integer); } // Is 'tempQuotaRemainingOnlineString' still empty post integer check? if (tempQuotaRemainingOnlineString.empty) { // debug log that 'tempQuotaRemainingOnlineString' is still empty post integer check if (debugLogging) { addLogEntry("tempQuotaRemainingOnlineString is still empty post integer JSON value analysis ..", ["debug"]); } // is quota["remaining"] an string type? if (quota["remaining"].type() == JSONType.string) { // debug logging of the 'remaining' JSON struct if (debugLogging) { addLogEntry("quota remaining is an string value - using this value: " ~ to!string(quota["remaining"].str), ["debug"]); } // extract JSON value as string tempQuotaRemainingOnlineString = quota["remaining"].str; } } // Fallback if tempQuotaRemainingOnlineString is still empty if (tempQuotaRemainingOnlineString.empty) { // debug log that 'tempQuotaRemainingOnlineString' is still empty if (debugLogging) { addLogEntry("tempQuotaRemainingOnlineString is still empty post integer and string JSON value analysis .. this means quota 'remaining' element was not a string or integer value", ["debug"]); } // Fetch the details from cachedOnlineDriveData DriveDetailsCache cachedOnlineDriveData; cachedOnlineDriveData = getDriveDetails(appConfig.defaultDriveId); // Use cachedOnlineDriveData.quotaRemaining as this is the last value we potentially had if ((cachedOnlineDriveData.quotaRemaining) > 0) { // the last known quota remaining was above zero if (debugLogging) { addLogEntry("cachedOnlineDriveData.quotaRemaining is a positive value, using this last known value for tempQuotaRemainingOnlineString", ["debug"]); } // set tempQuotaRemainingOnlineString to cachedOnlineDriveData.quotaRemaining tempQuotaRemainingOnlineString = to!string(cachedOnlineDriveData.quotaRemaining); } else { if (debugLogging) { addLogEntry("cachedOnlineDriveData.quotaRemaining is zero or negative value, setting tempQuotaRemainingOnlineString to zero", ["debug"]); } // no option but to set to zero tempQuotaRemainingOnlineString = "0"; } } // What did we set 'tempQuotaRemainingOnlineString' to? if (debugLogging) { addLogEntry("tempQuotaRemainingOnlineString = " ~ tempQuotaRemainingOnlineString, ["debug"]); } // Update quotaRemainingOnline to use the converted string value quotaRemainingOnline = to!long(tempQuotaRemainingOnlineString); // What did we set 'quotaRemainingOnline' to? if (debugLogging) { addLogEntry("quotaRemainingOnline = " ~ to!string(quotaRemainingOnline), ["debug"]); } // Set the applicable 'quotaAvailable' value quotaAvailable = quotaRemainingOnline > 0; // If "remaining" is present but its value is <= 0, it's not restricted but exhausted if (quotaRemainingOnline <= 0) { if (appConfig.accountType == "personal") { addLogEntry("ERROR: OneDrive account currently has zero space available. Please free up some space online or purchase additional capacity."); } else { // Assuming 'business' or 'sharedLibrary' if (verboseLogging) {addLogEntry("WARNING: OneDrive quota information is being restricted or providing a zero value. Please fix by speaking to your OneDrive / Office 365 Administrator." , ["verbose"]);} } } } else { // "remaining" not present, indicating restricted quota information quotaRestricted = true; // what sort of account type is this? if (appConfig.accountType == "personal") { if (verboseLogging) {addLogEntry("ERROR: OneDrive quota information is missing. Your OneDrive account potentially has zero space available. Please free up some space online.", ["verbose"]);} } else { // quota details not available if (verboseLogging) {addLogEntry("WARNING: OneDrive quota information is being restricted. Please fix by speaking to your OneDrive / Office 365 Administrator.", ["verbose"]);} } } } else { // When valid quota details are not fetched if (verboseLogging) {addLogEntry("Failed to fetch or query quota details for OneDrive Drive ID: " ~ driveId, ["verbose"]);} quotaRestricted = true; // Considering restricted due to failure to interpret } // What was the determined available quota? if (debugLogging) {addLogEntry("Reported Available Online Quota for driveID '" ~ driveId ~ "': " ~ to!string(quotaRemainingOnline), ["debug"]);} // Return result result ~= [to!string(quotaRestricted), to!string(quotaAvailable), to!string(quotaRemainingOnline)]; // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return new drive array data return result; } // Perform a filesystem walk to uncover new data to upload to OneDrive void scanLocalFilesystemPathForNewData(string path) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Cleanup array memory before we start adding files pathsToCreateOnline = []; newLocalFilesToUploadToOneDrive = []; // Perform a filesystem walk to uncover new data scanLocalFilesystemPathForNewDataToUpload(path); // Create new directories online that has been identified processNewDirectoriesToCreateOnline(); // Upload new data that has been identified processNewLocalItemsToUpload(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Scan the local filesystem for new data to upload void scanLocalFilesystemPathForNewDataToUpload(string path) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // To improve logging output for this function, what is the 'logical path' we are scanning for file & folder differences? string logPath; if (path == ".") { // get the configured sync_dir logPath = buildNormalizedPath(appConfig.getValueString("sync_dir")); } else { // use what was passed in if (!appConfig.getValueBool("monitor")) { logPath = buildNormalizedPath(appConfig.getValueString("sync_dir")) ~ "/" ~ path; } else { logPath = path; } } // Log the action that we are performing, however only if this is a directory if (exists(path)) { if (isDir(path)) { if (!appConfig.suppressLoggingOutput) { if (!cleanupLocalFiles) { addProcessingLogHeaderEntry("Scanning the local file system '" ~ logPath ~ "' for new data to upload", appConfig.verbosityCount); } else { addProcessingLogHeaderEntry("Scanning the local file system '" ~ logPath ~ "' for data to cleanup", appConfig.verbosityCount); // Set the cleanup flag cleanupDataPass = true; } } } } SysTime startTime; if (debugLogging) { startTime = Clock.currTime(); addLogEntry("Starting Filesystem Walk (Local Time): " ~ to!string(startTime), ["debug"]); } // Add a processing '.' if this is a directory we are scanning if (exists(path)) { if (isDir(path)) { if (!appConfig.suppressLoggingOutput) { if (appConfig.verbosityCount == 0) { addProcessingDotEntry(); } } } } // Perform the filesystem walk of this path, building an array of new items to upload scanPathForNewData(path); // Reset flag cleanupDataPass = false; // Close processing '.' if this is a directory we are scanning if (exists(path)) { if (isDir(path)) { if (appConfig.verbosityCount == 0) { if (!appConfig.suppressLoggingOutput) { // Close out the '....' being printed to the console completeProcessingDots(); } } } } // To finish off the processing items, this is needed to reflect this in the log if (debugLogging) { addLogEntry(debugLogBreakType1, ["debug"]); // finish filesystem walk time SysTime finishTime = Clock.currTime(); addLogEntry("Finished Filesystem Walk (Local Time): " ~ to!string(finishTime), ["debug"]); // duration Duration elapsedTime = finishTime - startTime; addLogEntry("Elapsed Time Filesystem Walk: " ~ to!string(elapsedTime), ["debug"]); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Ensure we have a full list of unique paths to create online void addPathToCreateOnline(string pathToAdd) { // Is this a valid path to add? // The requested directory to create was not found on OneDrive - creating remote directory: ./. // OneDrive generated an error when creating this path: ./. // ERROR: Microsoft OneDrive API returned an error with the following message: // Error Message: HTTP request returned status code 400 (Bad Request) // Error Reason: Invalid request // Error Code: invalidRequest // Error Timestamp: 2025-05-02T20:31:46 // API Request ID: 23c2e2cd-6968-4a99-ac80-f9da786a18fd // Calling Function: syncEngine.createDirectoryOnline() // Is this a valid path to add? if ((pathToAdd == ".")||(pathToAdd == "./.")) { // matches paths we should not attempt to create online if (debugLogging) {addLogEntry("attempted to add as path to create online - rejecting: " ~ pathToAdd, ["debug"]);} // We can never add or create online the OneDrive 'root' return; } // Only add unique paths if (!pathsToCreateOnline.canFind(pathToAdd)) { // Add this unique path to the created online // are we in a --dry-run scenario? if (!dryRun) { // Add this to the list to create online pathsToCreateOnline ~= pathToAdd; } else { // We are in a --dry-run scenario .. this might have been a directory we 'faked' doing something with. // pathsRenamed contains all the paths that were 'renamed' if (pathsRenamed.canFind(ensureStartsWithDotSlash(buildNormalizedPath(pathToAdd)))) { // Path was renamed .. but faked due to --dry-run if (debugLogging) {addLogEntry("DRY-RUN: Skipping creating this directory online as this was a faked local change", ["debug"]);} } else { // Add this to the list to create online pathsToCreateOnline ~= pathToAdd; } } } } // Create new directories online void processNewDirectoriesToCreateOnline() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // This list of local paths that need to be created online string[] uniquePathsToCreateOnline; // Are there any new local directories to create online? if (!pathsToCreateOnline.empty) { // There are new directories to create online addLogEntry("New directories to create on Microsoft OneDrive: " ~ to!string(pathsToCreateOnline.length)); if (debugLogging) {addLogEntry("pathsToCreateOnline = " ~ to!string(pathsToCreateOnline), ["debug"]);} // Process 'pathsToCreateOnline' into each array element, then create each path based on path segments foreach (fullPath; pathsToCreateOnline) { // Normalise path and strip leading "./" if present string normalised = fullPath; if (normalised.startsWith("./")) normalised = normalised[2 .. $]; if (normalised.endsWith("/")) normalised = normalised[0 .. $ - 1]; auto segments = normalised.split("/").filter!(s => !s.empty).array; string pathToCreate = "."; foreach (i; 0 .. segments.length) { pathToCreate = buildPath(pathToCreate, segments[i]); // Only add unique paths to avoid duplication of the same path creation request if (!uniquePathsToCreateOnline.canFind(pathToCreate)) { // Add this unique path to the created online uniquePathsToCreateOnline ~= pathToCreate; } } } } // Now that all the paths have been rationalised and potential duplicate creation requests filtered out, create the paths online if (debugLogging) {addLogEntry("uniquePathsToCreateOnline = " ~ to!string(uniquePathsToCreateOnline), ["debug"]);} // For each path in the array, attempt to create this online foreach (onlinePathToCreate; uniquePathsToCreateOnline) { try { // Try and create the required path online createDirectoryOnline(onlinePathToCreate); } catch (Exception e) { addLogEntry("ERROR: Failed to create directory online: " ~ onlinePathToCreate ~ " => " ~ e.msg); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Upload new data that has been identified to Microsoft OneDrive void processNewLocalItemsToUpload() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Are there any new local items to upload? if (!newLocalFilesToUploadToOneDrive.empty) { // There are elements to upload addLogEntry("New items to upload to Microsoft OneDrive: " ~ to!string(newLocalFilesToUploadToOneDrive.length) ); // Reset totalDataToUpload totalDataToUpload = 0; // How much data do we need to upload? This is important, as, we need to know how much data to determine if all the files can be uploaded foreach (uploadFilePath; newLocalFilesToUploadToOneDrive) { // validate that the path actually exists so that it can be counted if (exists(uploadFilePath)) { totalDataToUpload = totalDataToUpload + getSize(uploadFilePath); } } // How much data is there to upload if (verboseLogging) { if (totalDataToUpload < 1024) { // Display as Bytes to upload addLogEntry("Total New Data to Upload: " ~ to!string(totalDataToUpload) ~ " Bytes", ["verbose"]); } else { if ((totalDataToUpload > 1024) && (totalDataToUpload < 1048576)) { // Display as KB to upload addLogEntry("Total New Data to Upload: " ~ to!string((totalDataToUpload / 1024)) ~ " KB", ["verbose"]); } else { // Display as MB to upload addLogEntry("Total New Data to Upload: " ~ to!string((totalDataToUpload / 1024 / 1024)) ~ " MB", ["verbose"]); } } } // How much space is available // The file, could be uploaded to a shared folder, which, we are not tracking how much free space is available there ... // Iterate through all the drives we have cached thus far, that we know about if (debugLogging) { foreach (driveId, driveDetails; onlineDriveDetails) { // Log how much space is available for each driveId addLogEntry("Current Available Space Online (" ~ driveId ~ "): " ~ to!string((driveDetails.quotaRemaining / 1024 / 1024)) ~ " MB", ["debug"]); } } // Perform the upload uploadNewLocalFileItems(); // Cleanup array memory after uploading all files newLocalFilesToUploadToOneDrive = []; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Scan this path for new data void scanPathForNewData(string path) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Add a processing '.' if (exists(path)) { if (isDir(path)) { if (!appConfig.suppressLoggingOutput) { if (appConfig.verbosityCount == 0) { addProcessingDotEntry(); } } } } long maxPathLength; long pathWalkLength; // Add this logging break to assist with what was checked for each path if (path != ".") { if (debugLogging) {addLogEntry(debugLogBreakType1, ["debug"]);} } // https://support.microsoft.com/en-us/help/3125202/restrictions-and-limitations-when-you-sync-files-and-folders // If the path is greater than allowed characters, then one drive will return a '400 - Bad Request' // Need to ensure that the URI is encoded before the check is made: // - 400 Character Limit for OneDrive Business / Office 365 // - 430 Character Limit for OneDrive Personal // Configure maxPathLength based on account type if (appConfig.accountType == "personal") { // Personal Account maxPathLength = 430; } else { // Business Account / Office365 / SharePoint maxPathLength = 400; } // OneDrive Business Shared Files Handling - if we make a 'backup' locally of a file shared with us (because we modified it, and then maybe did a --resync), it will be treated as a new file to upload ... // The issue here is - the 'source' was a shared file - we may not even have permission to upload a 'renamed' file to the shared file's parent folder // In this case, we need to skip adding this new local file - we do not upload it (we cant , and we should not) if (appConfig.accountType == "business") { // Check appConfig.configuredBusinessSharedFilesDirectoryName against 'path' if (canFind(path, baseName(appConfig.configuredBusinessSharedFilesDirectoryName))) { // Log why this path is being skipped addLogEntry("Skipping scanning path for new files as this is reserved for OneDrive Business Shared Files: " ~ path, ["info"]); return; } } // A short lived item that has already disappeared will cause an error - is the path still valid? if (!exists(path)) { addLogEntry("Skipping path - path has disappeared: " ~ path); return; } // Calculate the path length by walking the path and catch any UTF-8 sequence errors at the same time // https://github.com/skilion/onedrive/issues/57 // https://github.com/abraunegg/onedrive/issues/487 // https://github.com/abraunegg/onedrive/issues/1192 try { pathWalkLength = path.byGrapheme.walkLength; } catch (std.utf.UTFException e) { // Path contains characters which generate a UTF exception addLogEntry("Skipping item - invalid UTF sequence: " ~ path, ["info", "notify"]); if (debugLogging) {addLogEntry(" Error Reason:" ~ e.msg, ["debug"]);} return; } // Is the path length is less than maxPathLength if (pathWalkLength < maxPathLength) { // Is this path unwanted bool unwanted = false; // First check of this item - if we are in a --dry-run scenario, we may have 'fake deleted' this path // thus, the entries are not in the dry-run DB copy, thus, at this point the client thinks that this is an item to upload // Check this 'path' for an entry in pathFakeDeletedArray - if it is there, this is unwanted if (dryRun) { // Is this path in the array of fake deleted items? If yes, return early, nothing else to do, save processing if (canFind(pathFakeDeletedArray, path)) return; } // Check if item if found in database bool itemFoundInDB = pathFoundInDatabase(path); // If the item is already found in the database, it is redundant to perform these checks if (!itemFoundInDB) { // This not a Client Side Filtering check, nor a Microsoft Check, but is a sanity check that the path provided is UTF encoded correctly // Check the std.encoding of the path against: Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252 if (!unwanted) { if(!isValid(path)) { // Path is not valid according to https://dlang.org/phobos/std_encoding.html addLogEntry("Skipping item - invalid character encoding sequence: " ~ path, ["info", "notify"]); unwanted = true; } } // Check this path against the Client Side Filtering Rules // - check_nosync // - skip_dotfiles // - skip_symlinks // - skip_file // - skip_dir // - sync_list // - skip_size if (!unwanted) { // If this is not the cleanup data pass when using --download-only --cleanup-local-files we dont want to exclude files we need to delete locally when using 'sync_list' if (!cleanupDataPass) { unwanted = checkPathAgainstClientSideFiltering(path); } } // Check this path against the Microsoft Naming Conventions & Restrictions // - Check path against Microsoft OneDrive restriction and limitations about Windows naming for files and folders // - Check path for bad whitespace items // - Check path for HTML ASCII Codes // - Check path for ASCII Control Codes if (!unwanted) { unwanted = checkPathAgainstMicrosoftNamingRestrictions(path); } } // Before we traverse this 'path', we need to make a last check to see if this was just excluded bool skipFolderTraverse = skipBusinessSharedFolder(path); // Current path for error logging string currentPath; if (!unwanted) { // At this point, this path, we want to scan for new data as it is not excluded if (isDir(path)) { // Was the path found in the database? if (!itemFoundInDB) { // Path not found in database when searching all drive id's if (!cleanupLocalFiles) { // --download-only --cleanup-local-files not used // Create this directory on OneDrive so that we can upload files to it // Add this path to an array so that the directory online can be created before we upload files if (debugLogging) {addLogEntry("Adding path to create online (directory inclusion): " ~ path, ["debug"]);} addPathToCreateOnline(path); } else { // we need to clean up this directory addLogEntry("Removing local directory as --download-only & --cleanup-local-files configured"); // Remove any children of this path if they still exist // Resolve 'Directory not empty' error when deleting local files try { auto directoryEntries = dirEntries(path, SpanMode.depth, false); foreach (DirEntry child; directoryEntries) { // set for error logging currentPath = child.name; // what sort of child is this? if (isDir(child.name)) { addLogEntry("Removing local directory: " ~ child.name); } else { addLogEntry("Removing local file: " ~ child.name); } // are we in a --dry-run scenario? if (!dryRun) { // No --dry-run ... process local delete if (exists(child)) { try { attrIsDir(child.linkAttributes) ? rmdir(child.name) : safeRemove(child.name); } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, currentPath); } } } } // Clear directoryEntries object.destroy(directoryEntries); // Remove the path now that it is empty of children addLogEntry("Removing local directory: " ~ path); // are we in a --dry-run scenario? if (!dryRun) { // No --dry-run ... process local delete if (exists(path)) { try { rmdirRecurse(path); } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, path); } } } } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, currentPath); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return as there was an error return; } } } // Do we actually traverse this path? if (!skipFolderTraverse) { // Try and access this directory and any path below if (exists(path)) { try { auto directoryEntries = dirEntries(path, SpanMode.shallow, false); foreach (DirEntry entry; directoryEntries) { currentPath = entry.name; scanPathForNewData(entry.name); } // Clear directoryEntries object.destroy(directoryEntries); } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, currentPath); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return as there was an error return; } } } } else { // https://github.com/abraunegg/onedrive/issues/984 // path is not a directory, is it a valid file? // pipes - whilst technically valid files, are not valid for this client // prw-rw-r--. 1 user user 0 Jul 7 05:55 my_pipe if (isFile(path)) { // Is the file a '.nosync' file? if (canFind(path, ".nosync")) { if (debugLogging) {addLogEntry("Skipping .nosync file", ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return as there was an error return; } // Was the file found in the database? if (!itemFoundInDB) { // File not found in database when searching all drive id's // Do we upload the file or clean up the file? if (!cleanupLocalFiles) { // --download-only --cleanup-local-files not used // Ensure this directory on OneDrive so that we can upload files to it // Add this path to an array so that the directory online can be created before we upload files string parentPath = dirName(path); if (debugLogging) {addLogEntry("Adding parental path to create online (file inclusion): " ~ parentPath, ["debug"]);} addPathToCreateOnline(parentPath); // Add this path as a file we need to upload if (debugLogging) {addLogEntry("OneDrive Client flagging to upload this file to Microsoft OneDrive: " ~ path, ["debug"]);} if (!dryRun) { // Add to the array newLocalFilesToUploadToOneDrive ~= path; } else { // In a --dry-run scenario, we may have locally fake changed a directory name, thus, this path we are checking needs to checked against 'pathsRenamed' if (pathsRenamed.canFind(ensureStartsWithDotSlash(buildNormalizedPath(parentPath)))) { // Parental path was renamed if (debugLogging) {addLogEntry("DRY-RUN: parentPath found in 'pathsRenamed' ... skipping uploading this file", ["debug"]);} } else { // Add to the array newLocalFilesToUploadToOneDrive ~= path; } } } else { // we need to clean up this file addLogEntry("Removing local file as --download-only & --cleanup-local-files configured"); // are we in a --dry-run scenario? addLogEntry("Removing local file: " ~ path); if (!dryRun) { // No --dry-run ... process local file delete safeRemove(path); } } } } else { // path is not a valid file addLogEntry("Skipping item - item is not a valid file: " ~ path, ["info", "notify"]); } } } else { // Issue #3126 - https://github.com/abraunegg/onedrive/discussions/3126 // At this point, this path that we want to scan for new data has been excluded .. we may have an include 'sync_list' rule for a subfolder of this excluded parent ... // If the data is created online, this is not usually a problem, but essentially if we create new data locally, in a folder we are expecting to included by an existing configuration, // unless we actually scan the entire tree, including those directories that are excluded, we are not going to detect the new locally added data in a parent that has been excluded, // but the child content has to be included if (isDir(path)) { // Do we actually traverse this path? if (!skipFolderTraverse) { // Not a Business Shared Folder that must not be traversed if 'sync_business_shared_folders' is not enabled // Was this path excluded by the 'sync_list' exclusion process if (syncListDirExcluded) { // yes .. this parent path was excluded by the 'sync_list' ... we need to scan this path for potential new data that may be included bool parentalInclusionSyncListRule = selectiveSync.isSyncListPrefixMatch(path); bool syncListAnywhereInclusionRulesExist = selectiveSync.syncListAnywhereInclusionRulesExist(); bool mustTraversePath = false; if ((parentalInclusionSyncListRule) || (syncListAnywhereInclusionRulesExist)) { mustTraversePath = true; } // Log what we are testing if (debugLogging) { addLogEntry("Local path was excluded by 'sync_list' but is this in anyway included in a specific 'inclusion' rule?", ["debug"]); // Is this path in the 'sync_list' inclusion path array? addLogEntry("Testing path against the specific 'sync_list' inclusion rules: " ~ path, ["debug"]); addLogEntry("Should we traverse this local path to scan for new data: " ~ to!string(mustTraversePath), ["debug"]); addLogEntry(" - parentalInclusionSyncListRule: " ~ to!string(parentalInclusionSyncListRule), ["debug"]); addLogEntry(" - syncListAnywhereInclusionRulesExist: " ~ to!string(syncListAnywhereInclusionRulesExist), ["debug"]); } // Was traversal of this excluded path triggered? if (mustTraversePath) { // We must traverse this path .. if (verboseLogging) { // Why ... if (syncListAnywhereInclusionRulesExist) { addLogEntry("Bypassing 'sync_list' exclusion to scan directory for potential new data that may be included due to 'sync_list' anywhere rule existence", ["verbose"]); } else { addLogEntry("Bypassing 'sync_list' exclusion to scan directory for potential new data that may be included", ["verbose"]); } } // Try and go through the excluded directory path try { auto directoryEntries = dirEntries(path, SpanMode.shallow, false); foreach (DirEntry entry; directoryEntries) { currentPath = entry.name; scanPathForNewData(entry.name); } // Clear directoryEntries object.destroy(directoryEntries); } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, currentPath); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return as there was an error return; } } } } } } } else { // This path was skipped - why? addLogEntry("Skipping item '" ~ path ~ "' due to the full path exceeding " ~ to!string(maxPathLength) ~ " characters (Microsoft OneDrive limitation)", ["info", "notify"]); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Do we skip this path as it might be an Online Business Shared Folder bool skipBusinessSharedFolder(string path) { // Is this a business account? if (appConfig.accountType == "business") { // search businessSharedFoldersOnlineToSkip for this path if (canFind(businessSharedFoldersOnlineToSkip, path)) { // This path was skipped - why? addLogEntry("Skipping item '" ~ path ~ "' due to this path matching an existing online Business Shared Folder name", ["info", "notify"]); addLogEntry("To sync this Business Shared Folder, consider enabling 'sync_business_shared_folders' within your application configuration.", ["info"]); return true; } } // return value return false; } // Handle a single file inotify trigger when using --monitor void handleLocalFileTrigger(string[] changedLocalFilesToUploadToOneDrive) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Is this path a new file or an existing one? // Normally we would use pathFoundInDatabase() to calculate, but we need 'databaseItem' as well if the item is in the database foreach (localFilePath; changedLocalFilesToUploadToOneDrive) { try { Item databaseItem; bool fileFoundInDB = false; foreach (driveId; onlineDriveDetails.keys) { if (itemDB.selectByPath(localFilePath, driveId, databaseItem)) { fileFoundInDB = true; // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // file found, search no more break; } } // Was the file found in the database? if (!fileFoundInDB) { // This is a new file as it is not in the database // Log that the file has been added locally if (verboseLogging) {addLogEntry("[M] New local file added: " ~ localFilePath, ["verbose"]);} scanLocalFilesystemPathForNewDataToUpload(localFilePath); } else { // This is a potentially modified file, needs to be handled as such. Is the item truly modified? if (!testFileHash(localFilePath, databaseItem)) { // The local file failed the hash comparison test - there is a data difference // Log that the file has changed locally if (verboseLogging) {addLogEntry("[M] Local file changed: " ~ localFilePath, ["verbose"]);} // Add the modified item to the array to upload uploadChangedLocalFileToOneDrive([databaseItem.driveId, databaseItem.id, localFilePath]); } } } catch(Exception e) { addLogEntry("Cannot upload file changes/creation: " ~ e.msg, ["info", "notify"]); } } processNewLocalItemsToUpload(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Query the database to determine if this path is within the existing database bool pathFoundInDatabase(string searchPath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Check if this path in the database Item databaseItem; if (debugLogging) {addLogEntry("Search DB for this path: " ~ searchPath, ["debug"]);} foreach (driveId; onlineDriveDetails.keys) { if (itemDB.selectByPath(searchPath, driveId, databaseItem)) { if (debugLogging) {addLogEntry("DB Record for search path: " ~ to!string(databaseItem), ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return true; // Early exit on finding the path in the DB } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return false; // Return false if path is not found in any drive } // Create a new directory online on OneDrive // - Test if we can get the parent path details from the database, otherwise we need to search online // for the path flow and create the folder that way void createDirectoryOnline(string thisNewPathToCreate) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Is this a valid path to create? // We need to avoid this sort of error: // // OneDrive generated an error when creating this path: . // ERROR: Microsoft OneDrive API returned an error with the following message: // Error Message: HTTP request returned status code 400 (Bad Request) // Error Reason: Invalid request // Error Code: invalidRequest // Error Timestamp: 2025-08-01T21:08:26 // API Request ID: dca77bd6-1e9a-432a-bc6c-1c6b5380745d if (isRootEquivalent(thisNewPathToCreate)) return; // Log what path we are attempting to create online if (verboseLogging) {addLogEntry("OneDrive Client requested to create this directory online: " ~ thisNewPathToCreate, ["verbose"]);} // Function variables Item parentItem; JSONValue onlinePathData; // Special Folder Handling: Do NOT create the folder online if it is being used for OneDrive Business Shared Files // These are local copy files, in a self created directory structure which is not to be replicated online // Check appConfig.configuredBusinessSharedFilesDirectoryName against 'thisNewPathToCreate' if (canFind(thisNewPathToCreate, baseName(appConfig.configuredBusinessSharedFilesDirectoryName))) { // Log why this is being skipped addLogEntry("Skipping creating '" ~ thisNewPathToCreate ~ "' as this path is used for handling OneDrive Business Shared Files", ["info", "notify"]); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return early as skipping return; } // Create a new API Instance for this thread and initialise it OneDriveApi createDirectoryOnlineOneDriveApiInstance; createDirectoryOnlineOneDriveApiInstance = new OneDriveApi(appConfig); createDirectoryOnlineOneDriveApiInstance.initialise(); // What parent path to use? string parentPath = dirName(thisNewPathToCreate); // will be either . or something else // Configure the parentItem by if this is the account 'root' use the root details, or search the database for the parent details if (parentPath == ".") { // Parent path is '.' which is the account root // Use client defaults parentItem.driveId = appConfig.defaultDriveId; parentItem.id = appConfig.defaultRootId; } else { // Query the parent path online if (debugLogging) {addLogEntry("Attempting to query Local Database for this parent path: " ~ parentPath, ["debug"]);} // Attempt a 2 step process to work out where to create the directory // Step 1: Query the DB first for the parent path, to try and avoid an API call // Step 2: Query online as last resort // Step 1: Check if this parent path in the database Item databaseItem; bool parentPathFoundInDB = false; foreach (driveId; onlineDriveDetails.keys) { // driveId comes from the DB .. trust it is has been validated if (debugLogging) {addLogEntry("Query DB with this driveID for the Parent Path: " ~ driveId, ["debug"]);} // Query the database for this parent path using each driveId that we know about if (itemDB.selectByPath(parentPath, driveId, databaseItem)) { parentPathFoundInDB = true; if (debugLogging) { addLogEntry("Parent databaseItem: " ~ to!string(databaseItem), ["debug"]); addLogEntry("parentPathFoundInDB: " ~ to!string(parentPathFoundInDB), ["debug"]); } // Set parentItem to the item returned from the database parentItem = databaseItem; } } // After querying all DB entries for each driveID for the parent path, what are the details in parentItem? if (debugLogging) {addLogEntry("Parent parentItem after DB Query exhausted: " ~ to!string(parentItem), ["debug"]);} // Step 2: Query for the path online if NOT found in the local database if (!parentPathFoundInDB) { // parent path not found in database try { if (debugLogging) {addLogEntry("Attempting to query OneDrive Online for this parent path as path not found in local database: " ~ parentPath, ["debug"]);} onlinePathData = createDirectoryOnlineOneDriveApiInstance.getPathDetails(parentPath); if (debugLogging) {addLogEntry("Online Parent Path Query Response: " ~ to!string(onlinePathData), ["debug"]);} // Make the parentItem from the online data parentItem = makeItem(onlinePathData); // Before we 'save' this item to the database, is the parent of this parent in the database? // We need to go and check the grandparent item for this parent item Item grandparentDatabaseItem; bool grandparentInDatabase = itemDB.selectById(onlinePathData["parentReference"]["driveId"].str, onlinePathData["parentReference"]["id"].str, grandparentDatabaseItem); // Is the 'grandparent' in the database? if (!grandparentInDatabase) { // No .. string grandParentPath = dirName(parentPath); // create/add grandparent path online, add to database createDirectoryOnline(grandParentPath); } // Save parent item to the database saveItem(onlinePathData); } catch (OneDriveException exception) { if (exception.httpStatusCode == 404) { // Parent does not exist ... need to create parent if (debugLogging) {addLogEntry("Parent path does not exist online: " ~ parentPath, ["debug"]);} createDirectoryOnline(parentPath); // no return here as we need to continue, but need to re-query the OneDrive API to get the right parental details now that they exist onlinePathData = createDirectoryOnlineOneDriveApiInstance.getPathDetails(parentPath); parentItem = makeItem(onlinePathData); } else { // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } } } // Make sure the full path does not exist online, this should generate a 404 response, to which then the folder will be created online try { // Try and query the OneDrive API for the path we need to create if (debugLogging) { addLogEntry("Attempting to query OneDrive API for this path: " ~ thisNewPathToCreate, ["debug"]); addLogEntry("parentItem details: " ~ to!string(parentItem), ["debug"]); } // Depending on the data within parentItem, will depend on what method we are using to search // A Shared Folder will be 'remote' so we need to check the remote parent id, rather than parentItem details Item queryItem; // If we are doing a normal sync, 'parentItem.type == ItemType.remote' comparison works // If we are doing a --local-first 'parentItem.type == ItemType.remote' fails as the returned object is not a remote item, but is remote based on the 'driveId' if (parentItem.type == ItemType.remote) { // This folder is a potential shared object if (debugLogging) {addLogEntry("ParentItem is a remote item object", ["debug"]);} // Is this a Personal Account Type or has 'sync_business_shared_items' been enabled? if ((appConfig.accountType == "personal") || (appConfig.getValueBool("sync_business_shared_items"))) { // Update the queryItem values queryItem.driveId = parentItem.remoteDriveId; queryItem.id = parentItem.remoteId; } else { // This is a shared folder location, but we are not a 'personal' account, and 'sync_business_shared_items' has not been enabled addLogEntry("ERROR: Unable to create directory online as 'sync_business_shared_items' is not enabled"); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return as we cannot continue here return; } } else { // Use parent item for the query item if (debugLogging) {addLogEntry("Standard Query, use parentItem", ["debug"]);} queryItem = parentItem; } // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test queryItem.driveId = transformToLowerCase(queryItem.driveId); // Test driveId length and validation if the driveId we are testing is not equal to appConfig.defaultDriveId if (queryItem.driveId != appConfig.defaultDriveId) { queryItem.driveId = testProvidedDriveIdForLengthIssue(queryItem.driveId); } } if (queryItem.driveId == appConfig.defaultDriveId) { // Use getPathDetailsByDriveId if (debugLogging) {addLogEntry("Selecting getPathDetailsByDriveId to query OneDrive API for path data", ["debug"]);} onlinePathData = createDirectoryOnlineOneDriveApiInstance.getPathDetailsByDriveId(queryItem.driveId, thisNewPathToCreate); } else { // Use searchDriveForPath to query OneDrive if (debugLogging) {addLogEntry("Selecting searchDriveForPath to query OneDrive API for path data", ["debug"]);} // If the queryItem.driveId is not our driveId - the path we are looking for will not be at the logical location that getPathDetailsByDriveId // can use - as it will always return a 404 .. even if the path actually exists (which is the whole point of this test) // Search the queryItem.driveId for any folder name match that we are going to create, then compare response JSON items with queryItem.id // If no match, the folder we want to create does not exist at the location we are seeking to create it at, thus generate a 404 onlinePathData = createDirectoryOnlineOneDriveApiInstance.searchDriveForPath(queryItem.driveId, baseName(thisNewPathToCreate)); if (debugLogging) {addLogEntry("onlinePathData: " ~to!string(onlinePathData), ["debug"]);} // Process the response from searching the drive long responseCount = count(onlinePathData["value"].array); if (responseCount > 0) { // Search 'name' matches were found .. need to match these against queryItem.id bool foundDirectoryOnline = false; JSONValue foundDirectoryJSONItem; // Items were returned .. but is one of these what we are looking for? foreach (childJSON; onlinePathData["value"].array) { // Is this item not a file? if (!isFileItem(childJSON)) { Item thisChildItem = makeItem(childJSON); // Direct Match Check if ((queryItem.id == thisChildItem.parentId) && (baseName(thisNewPathToCreate) == thisChildItem.name)) { // High confidence that this child folder is a direct match we are trying to create and it already exists online if (debugLogging) { addLogEntry("Path we are searching for exists online (Direct Match): " ~ baseName(thisNewPathToCreate), ["debug"]); addLogEntry("childJSON: " ~ sanitiseJSONItem(childJSON), ["debug"]); } foundDirectoryOnline = true; foundDirectoryJSONItem = childJSON; break; } // Full Lower Case POSIX Match Check string childAsLower = toLower(childJSON["name"].str); string thisFolderNameAsLower = toLower(baseName(thisNewPathToCreate)); // Child name check if (childAsLower == thisFolderNameAsLower) { // This is a POSIX 'case in-sensitive match' ..... in folder name only // - Local item name has a 'case-insensitive match' to an existing item on OneDrive // The 'parentId' of this JSON object must match the parentId of where the folder was created // - why .. we might have the same folder name, but somewhere totally different if (queryItem.id == thisChildItem.parentId) { // Found the directory in the location, using case in-sensitive matching if (debugLogging) { addLogEntry("Path we are searching for exists online (POSIX 'case in-sensitive match'): " ~ baseName(thisNewPathToCreate), ["debug"]); addLogEntry("childJSON: " ~ sanitiseJSONItem(childJSON), ["debug"]); } foundDirectoryOnline = true; foundDirectoryJSONItem = childJSON; break; } } } } if (foundDirectoryOnline) { // Directory we are seeking was found online ... if (debugLogging) {addLogEntry("The directory we are seeking was found online by using searchDriveForPath ...", ["debug"]);} onlinePathData = foundDirectoryJSONItem; } else { // No 'search item matches found' - raise a 404 so that the exception handling will take over to create the folder throw new OneDriveException(404, "Name not found via search"); } } else { // No 'search item matches found' - raise a 404 so that the exception handling will take over to create the folder throw new OneDriveException(404, "Name not found via search"); } } } catch (OneDriveException exception) { if (exception.httpStatusCode == 404) { // This is a good error - it means that the directory to create 100% does not exist online // The directory was not found on the drive id we queried if (verboseLogging) {addLogEntry("The requested directory to create was not found on OneDrive - creating remote directory: " ~ thisNewPathToCreate, ["verbose"]);} // Build up the online create directory request string requiredDriveId; string requiredParentItemId; JSONValue createDirectoryOnlineAPIResponse; JSONValue newDriveItem = [ "name": JSONValue(baseName(thisNewPathToCreate)), "folder": parseJSON("{}") ]; // Submit the creation request // Fix for https://github.com/skilion/onedrive/issues/356 if (!dryRun) { try { // Attempt to create a new folder on the required driveId and parent item id // Is the item a Remote Object (Shared Folder) ? if (parentItem.type == ItemType.remote) { // Yes .. Shared Folder if (debugLogging) {addLogEntry("parentItem data: " ~ to!string(parentItem), ["debug"]);} requiredDriveId = parentItem.remoteDriveId; requiredParentItemId = parentItem.remoteId; } else { // Not a Shared Folder requiredDriveId = parentItem.driveId; requiredParentItemId = parentItem.id; } // Where are we creating this new folder? if (debugLogging) { addLogEntry("requiredDriveId: " ~ requiredDriveId, ["debug"]); addLogEntry("requiredParentItemId: " ~ requiredParentItemId, ["debug"]); addLogEntry("newDriveItem JSON: " ~ sanitiseJSONItem(newDriveItem), ["debug"]); } // Create the new folder createDirectoryOnlineAPIResponse = createDirectoryOnlineOneDriveApiInstance.createById(requiredDriveId, requiredParentItemId, newDriveItem); // Log that the directory was created addLogEntry("Successfully created the remote directory " ~ thisNewPathToCreate ~ " on Microsoft OneDrive"); // Is the response a valid JSON object - validation checking done in saveItem, printing of the JSON object is done in saveItem() saveItem(createDirectoryOnlineAPIResponse); } catch (OneDriveException exception) { if (exception.httpStatusCode == 409) { // OneDrive API returned a 404 (far above) to say the directory did not exist // but when we attempted to create it, OneDrive responded that it now already exists with a 409 if (verboseLogging) {addLogEntry("OneDrive reported that " ~ thisNewPathToCreate ~ " already exists .. OneDrive API race condition", ["verbose"]);} // Try to recover race condition by querying the parent's children for the folder we are trying to create createDirectoryOnlineAPIResponse = resolveOnlineCreationRaceCondition(requiredDriveId, requiredParentItemId, thisNewPathToCreate); // Log that the directory details were obtained addLogEntry("Successfully obtained the remote directory details " ~ thisNewPathToCreate ~ " from Microsoft OneDrive"); // Is the response a valid JSON object - validation checking done in saveItem, printing of the JSON object is done in saveItem() saveItem(createDirectoryOnlineAPIResponse); // Shutdown this API instance, as we will create API instances as required, when required createDirectoryOnlineOneDriveApiInstance.releaseCurlEngine(); // Free object and memory createDirectoryOnlineOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } else { // some other error from OneDrive was returned - display what it is addLogEntry("OneDrive generated an error when creating this path: " ~ thisNewPathToCreate); displayOneDriveErrorMessage(exception.msg, thisFunctionName); // Shutdown this API instance, as we will create API instances as required, when required createDirectoryOnlineOneDriveApiInstance.releaseCurlEngine(); // Free object and memory createDirectoryOnlineOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return due to OneDriveException return; } } else { // Simulate a successful 'directory create' & save it to the dryRun database copy addLogEntry("Successfully created the remote directory " ~ thisNewPathToCreate ~ " on Microsoft OneDrive"); // The simulated response has to pass 'makeItem' as part of saveItem auto fakeResponse = createFakeResponse(thisNewPathToCreate); // Save item to the database saveItem(fakeResponse); } // Shutdown this API instance, as we will create API instances as required, when required createDirectoryOnlineOneDriveApiInstance.releaseCurlEngine(); // Free object and memory createDirectoryOnlineOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // shutdown & return return; } else { // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within createDirectoryOnlineOneDriveApiInstance // If we get a 400 error, there is an issue creating this folder on Microsoft OneDrive for some reason // If the error is not 400, re-try, else fail if (exception.httpStatusCode != 400) { // Attempt a re-try createDirectoryOnline(thisNewPathToCreate); } else { // We cant create this directory online if (debugLogging) {addLogEntry("This folder cannot be created online: " ~ buildNormalizedPath(absolutePath(thisNewPathToCreate)), ["debug"]);} } } } // If we get to this point - onlinePathData = createDirectoryOnlineOneDriveApiInstance.getPathDetailsByDriveId(parentItem.driveId, thisNewPathToCreate) generated a 'valid' response .... // This means that the folder potentially exists online .. which is odd .. as it should not have existed if (onlinePathData.type() == JSONType.object) { // A valid object was responded with if (onlinePathData["name"].str == baseName(thisNewPathToCreate)) { // OneDrive 'name' matches local path name if (debugLogging) { addLogEntry("The path to query/search for online was found online", ["debug"]); addLogEntry(" onlinePathData via query/search: " ~ to!string(onlinePathData), ["debug"]); } // Now we know the location of this folder via query/search - go get the actual path details using the 'onlinePathData' Item onlineItem = makeItem(onlinePathData); // Fetch the real data in a consistent manner to ensure the JSON response contains the elements we are expecting JSONValue realOnlinePathData; // Get drive details for the provided driveId try { realOnlinePathData = createDirectoryOnlineOneDriveApiInstance.getPathDetailsById(onlineItem.driveId, onlineItem.id); if (debugLogging) { addLogEntry(" realOnlinePathData via getPathDetailsById call: " ~ to!string(realOnlinePathData), ["debug"]); } } catch (OneDriveException exception) { // An error was generated if (debugLogging) {addLogEntry("realOnlinePathData = createDirectoryOnlineOneDriveApiInstance.getPathDetailsById(onlineItem.driveId, onlineItem.id) generated a OneDriveException", ["debug"]);} // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); // abort .. return; } // OneDrive Personal Shared Folder Check - Use the REAL online data here if (appConfig.accountType == "personal") { // We are a personal account, this existing online folder, it could be a Shared Online Folder could be a 'Add shortcut to My files' item // Is this a remote folder if (isItemRemote(realOnlinePathData)) { // The folder is a remote item ... if (debugLogging) {addLogEntry("The existing Online Folder and 'realOnlinePathData' indicate this is most likely a OneDrive Personal Shared Folder Link added by 'Add shortcut to My files'", ["debug"]);} // It is a 'remote' JSON item denoting a potential shared folder // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(realOnlinePathData); } } // OneDrive Business Shared Folder Check if (appConfig.accountType == "business") { // We are a business account, this existing online folder, it could be a Shared Online Folder could be a 'Add shortcut to My files' item // Is this a remote folder if (isItemRemote(realOnlinePathData)) { // The folder is a remote item ... if (debugLogging) {addLogEntry("The existing Online Folder and 'realOnlinePathData' indicate this is most likely a OneDrive Shared Business Folder Link added by 'Add shortcut to My files'", ["debug"]);} // Is Shared Business Folder Syncing actually enabled? if (!appConfig.getValueBool("sync_business_shared_items")) { // Shared Business Folder Syncing is NOT enabled if (debugLogging) {addLogEntry("We need to skip this path: " ~ thisNewPathToCreate, ["debug"]);} // Add this path to businessSharedFoldersOnlineToSkip businessSharedFoldersOnlineToSkip ~= [thisNewPathToCreate]; // no save to database, no online create // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory createDirectoryOnlineOneDriveApiInstance.releaseCurlEngine(); createDirectoryOnlineOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return due to skipped path return; } else { // Shared Business Folder Syncing IS enabled // It is a 'remote' JSON item denoting a potential shared folder // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(realOnlinePathData); } } } // Path found online if (verboseLogging) {addLogEntry("The requested directory to create was found on OneDrive - skipping creating the directory online: " ~ thisNewPathToCreate, ["verbose"]);} // Is the response a valid JSON object - validation checking done in saveItem saveItem(realOnlinePathData); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory createDirectoryOnlineOneDriveApiInstance.releaseCurlEngine(); createDirectoryOnlineOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return due to path found online return; } else { // Normally this would throw an error, however we cant use throw new PosixException() string msg = format("POSIX 'case-insensitive match' between '%s' (local) and '%s' (online) which violates the Microsoft OneDrive API namespace convention", baseName(thisNewPathToCreate), onlinePathData["name"].str); displayPosixErrorMessage(msg); addLogEntry("ERROR: Requested directory to create has a 'case-insensitive match' to an existing directory on Microsoft OneDrive online."); addLogEntry("ERROR: To resolve, rename this local directory: " ~ buildNormalizedPath(absolutePath(thisNewPathToCreate))); addLogEntry("Skipping creating this directory online due to 'case-insensitive match': " ~ thisNewPathToCreate); // Add this path to posixViolationPaths posixViolationPaths ~= [thisNewPathToCreate]; // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory createDirectoryOnlineOneDriveApiInstance.releaseCurlEngine(); createDirectoryOnlineOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // manual POSIX exception return; } } else { // response is not valid JSON, an error was returned from OneDrive addLogEntry("ERROR: There was an error performing this operation on Microsoft OneDrive"); addLogEntry("ERROR: Increase logging verbosity to assist determining why."); addLogEntry("Skipping: " ~ buildNormalizedPath(absolutePath(thisNewPathToCreate))); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory createDirectoryOnlineOneDriveApiInstance.releaseCurlEngine(); createDirectoryOnlineOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // generic error return; } } // In the event that the online creation triggered a 404 then a 409 on creation attempt, this function explicitly is used to query that parent for the child being sought // This should return a usable JSON response of the folder being sought JSONValue resolveOnlineCreationRaceCondition(string requiredDriveId, string requiredParentItemId, string thisNewPathToCreate) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Create a new API Instance for this thread and initialise it OneDriveApi raceConditionResolutionOneDriveApiInstance; raceConditionResolutionOneDriveApiInstance = new OneDriveApi(appConfig); raceConditionResolutionOneDriveApiInstance.initialise(); // What is the folder we are seeking string searchFolder = baseName(thisNewPathToCreate); // Where should we store the details of the online folder we are seeking? JSONValue targetOnlineFolderDetails; // Required variables for listChildren to operate JSONValue topLevelChildren; string nextLink; bool directoryFoundOnline = false; // To handle ^c events, we need this Code while (true) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } // Query this remote object for its children topLevelChildren = raceConditionResolutionOneDriveApiInstance.listChildren(requiredDriveId, requiredParentItemId, nextLink); // Process each child that has been returned foreach (child; topLevelChildren["value"].array) { // We are specifically seeking a 'folder' object if (isItemFolder(child)) { // Is this the child folder we are looking for, and is a POSIX match? // We know that Microsoft OneDrive is not POSIX aware, thus there cannot be 2 folders of the same name with different case sensitivity if (child["name"].str == searchFolder) { // EXACT MATCH including case sensitivity: Flag that we found the folder online directoryFoundOnline = true; // Use these details for raceCondition response targetOnlineFolderDetails = child; break; } else { string childAsLower = toLower(child["name"].str); string thisFolderNameAsLower = toLower(searchFolder); try { if (childAsLower == thisFolderNameAsLower) { // This is a POSIX 'case in-sensitive match' ..... // Local item name has a 'case-insensitive match' to an existing item on OneDrive throw new PosixException(searchFolder, child["name"].str); } } catch (PosixException e) { // Display POSIX error message displayPosixErrorMessage(e.msg); addLogEntry("ERROR: Requested directory to search for and potentially create has a 'case-insensitive match' to an existing directory on Microsoft OneDrive online."); addLogEntry("ERROR: To resolve, rename this local directory: " ~ thisNewPathToCreate); } } } } // That set of returned objects - did we find the folder? if (directoryFoundOnline) { // We found the folder, no need to continue searching nextLink data break; } // If a collection exceeds the default page size (200 items), the @odata.nextLink property is returned in the response // to indicate more items are available and provide the request URL for the next page of items. if ("@odata.nextLink" in topLevelChildren) { // Update nextLink to next changeSet bundle if (debugLogging) {addLogEntry("Setting nextLink to (@odata.nextLink): " ~ nextLink, ["debug"]);} nextLink = topLevelChildren["@odata.nextLink"].str; } else break; // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } // Shutdown this API instance, as we will create API instances as required, when required raceConditionResolutionOneDriveApiInstance.releaseCurlEngine(); // Free object and memory raceConditionResolutionOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return the JSON with the folder details return targetOnlineFolderDetails; } // Test that the online name actually matches the requested local name bool performPosixTest(string localNameToCheck, string onlineName) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file // Do not assume case sensitivity. For example, consider the names OSCAR, Oscar, and oscar to be the same, // even though some file systems (such as a POSIX-compliant file system) may consider them as different. // Note that NTFS supports POSIX semantics for case sensitivity but this is not the default behavior. bool posixIssue = false; // Check for a POSIX casing mismatch if (localNameToCheck != onlineName) { // The input items are different .. how are they different? if (toLower(localNameToCheck) == toLower(onlineName)) { // Names differ only by case -> POSIX issue if (debugLogging) {addLogEntry("performPosixTest: Names differ only by case -> POSIX issue", ["debug"]);} // Local item name has a 'case-insensitive match' to an existing item on OneDrive posixIssue = true; } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return the posix evaluation return posixIssue; } // Upload new file items as identified void uploadNewLocalFileItems() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Lets deal with the new local items in a batch process size_t batchSize = to!int(appConfig.getValueLong("threads")); long batchCount = (newLocalFilesToUploadToOneDrive.length + batchSize - 1) / batchSize; long batchesProcessed = 0; // Transfer order string transferOrder = appConfig.getValueString("transfer_order"); // Has the user configured to specify the transfer order of files? if (transferOrder != "default") { // If we have more than 1 item to upload, sort the items if (count(newLocalFilesToUploadToOneDrive) > 1) { // Create an array of tuples (file path, file size) auto fileInfo = newLocalFilesToUploadToOneDrive .map!(file => tuple(file, getSize(file))) // Get file size for each file that needs to be uploaded .array; // Perform sorting based on transferOrder if (transferOrder == "size_asc") { fileInfo.sort!((a, b) => a[1] < b[1]); // sort the array by ascending size } else if (transferOrder == "size_dsc") { fileInfo.sort!((a, b) => a[1] > b[1]); // sort the array by descending size } else if (transferOrder == "name_asc") { fileInfo.sort!((a, b) => a[0] < b[0]); // sort the array by ascending name } else if (transferOrder == "name_dsc") { fileInfo.sort!((a, b) => a[0] > b[0]); // sort the array by descending name } // Extract sorted file paths newLocalFilesToUploadToOneDrive = fileInfo.map!(t => t[0]).array; } } // Process newLocalFilesToUploadToOneDrive foreach (chunk; newLocalFilesToUploadToOneDrive.chunks(batchSize)) { // send an array containing 'appConfig.getValueLong("threads")' local files to upload uploadNewLocalFileItemsInParallel(chunk); } // For this set of items, perform a DB PASSIVE checkpoint itemDB.performCheckpoint("PASSIVE"); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Upload the file batches in parallel void uploadNewLocalFileItemsInParallel(string[] array) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // This function received an array of string items to upload, the number of elements based on appConfig.getValueLong("threads") foreach (i, fileToUpload; processPool.parallel(array)) { if (debugLogging) {addLogEntry("Upload Thread " ~ to!string(i) ~ " Starting: " ~ to!string(Clock.currTime()), ["debug"]);} uploadNewFile(fileToUpload); if (debugLogging) {addLogEntry("Upload Thread " ~ to!string(i) ~ " Finished: " ~ to!string(Clock.currTime()), ["debug"]);} } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Upload a new file to OneDrive void uploadNewFile(string fileToUpload) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Debug for the moment if (debugLogging) {addLogEntry("fileToUpload: " ~ fileToUpload, ["debug"]);} // These are the details of the item we need to upload // How much space is remaining on OneDrive long remainingFreeSpaceOnline; // Did the upload fail? bool uploadFailed = false; // Did we skip due to exceeding maximum allowed size? bool skippedMaxSize = false; // Did we skip to an exception error? bool skippedExceptionError = false; // Is the parent path in the item database? bool parentPathFoundInDB = false; // Get this file size long thisFileSize; // Is there space available online bool spaceAvailableOnline = false; // Flag to track if there is zero data traversal bool zeroDataTraversal = false; DriveDetailsCache cachedOnlineDriveData; long calculatedSpaceOnlinePostUpload; OneDriveApi checkFileOneDriveApiInstance; // Check the database for the parent path of fileToUpload Item parentItem; // What parent path to use? string parentPath = dirName(fileToUpload); // will be either . or something else if (parentPath == "."){ // Assume this is a new file in the users configured sync_dir root // Use client defaults parentItem.id = appConfig.defaultRootId; // Should give something like 12345ABCDE1234A1!101 parentItem.driveId = appConfig.defaultDriveId; // Should give something like 12345abcde1234a1 parentPathFoundInDB = true; } else { // Query the database using each of the driveId's we are using foreach (driveId; onlineDriveDetails.keys) { // Query the database for this parent path using each driveId Item dbResponse; if(itemDB.selectByPath(parentPath, driveId, dbResponse)){ // parent path was found in the database parentItem = dbResponse; parentPathFoundInDB = true; } } } // If the parent path was found in the DB, to ensure we are uploading the right location 'parentItem.driveId' must not be empty if ((parentPathFoundInDB) && (parentItem.driveId.empty)) { // switch to using defaultDriveId if (debugLogging) {addLogEntry("parentItem.driveId is empty - using defaultDriveId for upload API calls", ["debug"]);} parentItem.driveId = appConfig.defaultDriveId; } // Check if the path still exists locally before we try to upload if (exists(fileToUpload)) { // Can we read the file - as a permissions issue or actual file corruption will cause a failure // Resolves: https://github.com/abraunegg/onedrive/issues/113 if (readLocalFile(fileToUpload)) { // The local file can be read - so we can read it to attempt to upload it in this thread // Is the path parent in the DB? if (parentPathFoundInDB) { // Parent path is in the database // Get the new file size // Even if the permissions on the file are: -rw-------. 1 root root 8 Jan 11 09:42 // we can still obtain the file size, however readLocalFile() also tests if the file can be read (permission check) thisFileSize = getSize(fileToUpload); // Does this file exceed the maximum filesize for OneDrive // Resolves: https://github.com/skilion/onedrive/issues/121 , https://github.com/skilion/onedrive/issues/294 , https://github.com/skilion/onedrive/issues/329 if (thisFileSize <= maxUploadFileSize) { // Is there enough free space on OneDrive as compared to when we started this thread, to safely upload the file to OneDrive? // Make sure that parentItem.driveId is in our driveIDs array to use when checking if item is in database // Keep the DriveDetailsCache array with unique entries only if (!canFindDriveId(parentItem.driveId, cachedOnlineDriveData)) { // Add this driveId to the drive cache, which then also sets for the defaultDriveId: // - quotaRestricted; // - quotaAvailable; // - quotaRemaining; addOrUpdateOneDriveOnlineDetails(parentItem.driveId); // Fetch the details from cachedOnlineDriveData cachedOnlineDriveData = getDriveDetails(parentItem.driveId); } // Fetch the details from cachedOnlineDriveData // - cachedOnlineDriveData.quotaRestricted; // - cachedOnlineDriveData.quotaAvailable; // - cachedOnlineDriveData.quotaRemaining; remainingFreeSpaceOnline = cachedOnlineDriveData.quotaRemaining; // When we compare the space online to the total we are trying to upload - is there space online? calculatedSpaceOnlinePostUpload = remainingFreeSpaceOnline - thisFileSize; // Based on what we know, for this thread - can we safely upload this modified local file? if (debugLogging) { string estimatedMessage = format("This Thread (Upload New File) Estimated Free Space Online (%s): ", parentItem.driveId); addLogEntry(estimatedMessage ~ to!string(remainingFreeSpaceOnline), ["debug"]); addLogEntry("This Thread (Upload New File) Calculated Free Space Online Post Upload: " ~ to!string(calculatedSpaceOnlinePostUpload), ["debug"]); } // If 'personal' accounts, if driveId == defaultDriveId, then we will have data - appConfig.quotaAvailable will be updated // If 'personal' accounts, if driveId != defaultDriveId, then we will not have quota data - appConfig.quotaRestricted will be set as true // If 'business' accounts, if driveId == defaultDriveId, then we will have data // If 'business' accounts, if driveId != defaultDriveId, then we will have data, but it will be a 0 value - appConfig.quotaRestricted will be set as true if (remainingFreeSpaceOnline > totalDataToUpload) { // Space available spaceAvailableOnline = true; } else { // we need to look more granular // What was the latest getRemainingFreeSpace() value? if (cachedOnlineDriveData.quotaAvailable) { // Our query told us we have free space online .. if we upload this file, will we exceed space online - thus upload will fail during upload? if (calculatedSpaceOnlinePostUpload > 0) { // Based on this thread action, we believe that there is space available online to upload - proceed spaceAvailableOnline = true; } } } // Is quota being restricted? if (cachedOnlineDriveData.quotaRestricted) { // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { parentItem.driveId = transformToLowerCase(parentItem.driveId); } // If the upload target drive is not our drive id, then it is a shared folder .. we need to print a space warning message if (parentItem.driveId != appConfig.defaultDriveId) { // Different message depending on account type if (appConfig.accountType == "personal") { if (verboseLogging) {addLogEntry("WARNING: Shared Folder OneDrive quota information is being restricted or providing a zero value. Space available online cannot be guaranteed.", ["verbose"]);} } else { if (verboseLogging) {addLogEntry("WARNING: Shared Folder OneDrive quota information is being restricted or providing a zero value. Please fix by speaking to your OneDrive / Office 365 Administrator.", ["verbose"]);} } } else { if (appConfig.accountType == "personal") { if (verboseLogging) {addLogEntry("WARNING: OneDrive quota information is being restricted or providing a zero value. Space available online cannot be guaranteed.", ["verbose"]);} } else { if (verboseLogging) {addLogEntry("WARNING: OneDrive quota information is being restricted or providing a zero value. Please fix by speaking to your OneDrive / Office 365 Administrator.", ["verbose"]);} } } // Space available online is being restricted - so we have no way to really know if there is space available online spaceAvailableOnline = true; } // Do we have space available or is space available being restricted (so we make the blind assumption that there is space available) if (spaceAvailableOnline) { // We need to check that this new local file does not exist on OneDrive JSONValue fileDetailsFromOneDrive; // https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file // Do not assume case sensitivity. For example, consider the names OSCAR, Oscar, and oscar to be the same, // even though some file systems (such as a POSIX-compliant file systems that Linux use) may consider them as different. // Note that NTFS supports POSIX semantics for case sensitivity but this is not the default behavior, OneDrive does not use this. // In order to upload this file - this query HAS to respond with a '404 - Not Found' so that the upload is triggered // Does this 'file' already exist on OneDrive? try { // Create a new API Instance for this thread and initialise it checkFileOneDriveApiInstance = new OneDriveApi(appConfig); checkFileOneDriveApiInstance.initialise(); // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { parentItem.driveId = transformToLowerCase(parentItem.driveId); } if (parentItem.driveId == appConfig.defaultDriveId) { // getPathDetailsByDriveId is only reliable when the driveId is our driveId fileDetailsFromOneDrive = checkFileOneDriveApiInstance.getPathDetailsByDriveId(parentItem.driveId, fileToUpload); } else { // We need to curate a response by listing the children of this parentItem.driveId and parentItem.id , without traversing directories // So that IF the file is on a Shared Folder, it can be found, and, if it exists, checked correctly fileDetailsFromOneDrive = searchDriveItemForFile(parentItem.driveId, parentItem.id, fileToUpload); // Was the file found? if (fileDetailsFromOneDrive.type() != JSONType.object) { // No .... throw new OneDriveException(404, "Name not found via searchDriveItemForFile"); } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory checkFileOneDriveApiInstance.releaseCurlEngine(); checkFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // No 404 which means a file was found with the path we are trying to upload to if (debugLogging) {addLogEntry("fileDetailsFromOneDrive JSON data after exist online check: " ~ to!string(fileDetailsFromOneDrive), ["debug"]);} // Portable Operating System Interface (POSIX) testing of JSON response from OneDrive API if (hasName(fileDetailsFromOneDrive)) { // Perform the POSIX evaluation test against the names if (performPosixTest(baseName(fileToUpload), fileDetailsFromOneDrive["name"].str)) { throw new PosixException(baseName(fileToUpload), fileDetailsFromOneDrive["name"].str); } } else { throw new JsonResponseException("Unable to perform POSIX test as the OneDrive API request generated an invalid JSON response"); } // If we get to this point, the OneDrive API returned a 200 OK with valid JSON data that indicates a 'file' exists at this location already // and that it matches the POSIX filename of the local item we are trying to upload as a new file if (verboseLogging) {addLogEntry("The file we are attempting to upload as a new file already exists on Microsoft OneDrive: " ~ fileToUpload, ["verbose"]);} // Does the data from online match our local file that we are attempting to upload as a new file? if (!disableUploadValidation && performUploadIntegrityValidationChecks(fileDetailsFromOneDrive, fileToUpload, thisFileSize)) { // Need a check here around the 'upload_only' and 'remove_source_files' // Are we in an --upload-only & --remove-source-files scenario? if ((uploadOnly) && (localDeleteAfterUpload)) { // Perform the local file deletion as the file exists online, hash matches, no upload removeLocalFilePostUpload(fileToUpload); // As file is now removed, we have nothing to add to the local database if (debugLogging) {addLogEntry("Skipping adding to database as --upload-only & --remove-source-files configured", ["debug"]);} } else { // No data movement, file exists online, local file matches what is online zeroDataTraversal = true; // Save online item details to the database saveItem(fileDetailsFromOneDrive); } } else { // The local file we are attempting to upload as a new file is different to the existing file online if (debugLogging) {addLogEntry("Triggering newfile upload target already exists edge case, where the online item does not match what we are trying to upload", ["debug"]);} // Issue #2626 | Case 2-2 (resync) // If the 'online' file is newer, this will be overwritten with the file from the local filesystem - potentially constituting online data loss // The file 'version history' online will have to be used to 'recover' the prior online file string changedItemParentDriveId = fileDetailsFromOneDrive["parentReference"]["driveId"].str; string changedItemId = fileDetailsFromOneDrive["id"].str; addLogEntry("Skipping uploading this item as a new file, will upload as a modified file (online file already exists): " ~ fileToUpload); // In order for the processing of the local item as a 'changed' item, unfortunately we need to save the online data of the existing online file to the local DB saveItem(fileDetailsFromOneDrive); // Which file is technically newer? The local file or the remote file? Item onlineFile = makeItem(fileDetailsFromOneDrive); SysTime localModifiedTime = timeLastModified(fileToUpload).toUTC(); SysTime onlineModifiedTime = onlineFile.mtime; // Reduce time resolution to seconds before comparing localModifiedTime.fracSecs = Duration.zero; onlineModifiedTime.fracSecs = Duration.zero; // Which file is newer? if (localModifiedTime >= onlineModifiedTime) { // Upload the locally modified file as-is, as it is newer uploadChangedLocalFileToOneDrive([changedItemParentDriveId, changedItemId, fileToUpload]); } else { // Online is newer, rename local, then upload the renamed file // We need to know the renamed path so we can upload it string renamedPath; // Rename the local path - we WANT this to occur regardless of bypassDataPreservation setting safeBackup(fileToUpload, dryRun, false, renamedPath); // Upload renamed local file as a new file uploadNewFile(renamedPath); // Process the database entry removal for the original file. In a --dry-run scenario, this is being done against a DB copy. // This is done so we can download the newer online file itemDB.deleteById(changedItemParentDriveId, changedItemId); } } } catch (OneDriveException exception) { // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory checkFileOneDriveApiInstance.releaseCurlEngine(); checkFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // If we get a 404 .. the file is not online .. this is what we want .. file does not exist online if (exception.httpStatusCode == 404) { // The file has been checked, client side filtering checked, does not exist online - we need to upload it if (debugLogging) {addLogEntry("fileDetailsFromOneDrive = checkFileOneDriveApiInstance.getPathDetailsByDriveId(parentItem.driveId, fileToUpload); generated a 404 - file does not exist online - must upload it", ["debug"]);} uploadFailed = performNewFileUpload(parentItem, fileToUpload, thisFileSize); } else { // some other error // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } catch (PosixException e) { // Display POSIX error message displayPosixErrorMessage(e.msg); addLogEntry("ERROR: Requested file to upload has a 'case-insensitive match' to an existing item on Microsoft OneDrive online."); addLogEntry("ERROR: To resolve, rename this local file: " ~ fileToUpload); addLogEntry("Skipping uploading this new file due to 'case-insensitive match': " ~ fileToUpload); uploadFailed = true; } catch (JsonResponseException e) { // Display JSON error message if (debugLogging) {addLogEntry(e.msg, ["debug"]);} uploadFailed = true; } } else { // skip file upload - insufficient space to upload addLogEntry("Skipping uploading this new file as it exceeds the available free space on Microsoft OneDrive: " ~ fileToUpload); uploadFailed = true; } } else { // Skip file upload - too large addLogEntry("Skipping uploading this new file as it exceeds the maximum size allowed by Microsoft OneDrive: " ~ fileToUpload); uploadFailed = true; } } else { // why was the parent path not in the database? if (canFind(posixViolationPaths, parentPath)) { addLogEntry("ERROR: POSIX 'case-insensitive match' for the parent path which violates the Microsoft OneDrive API namespace convention."); } else { addLogEntry("ERROR: Parent path is not in the database or online: " ~ parentPath); } addLogEntry("ERROR: Unable to upload this file: " ~ fileToUpload); uploadFailed = true; } } else { // Unable to read local file addLogEntry("Skipping uploading this file as it cannot be read (file permissions or file corruption): " ~ fileToUpload); uploadFailed = true; } } else { // File disappeared before upload addLogEntry("File disappeared locally before upload: " ~ fileToUpload); // dont set uploadFailed = true; as the file disappeared before upload, thus nothing here failed } // Upload success or failure? if (!uploadFailed) { // Did we actually upload a file - that is, potentially change the online quota available state? if (!zeroDataTraversal) { // Update the 'cachedOnlineDriveData' record for this 'dbItem.driveId' so that this is tracked as accurately as possible for other threads updateDriveDetailsCache(parentItem.driveId, cachedOnlineDriveData.quotaRestricted, cachedOnlineDriveData.quotaAvailable, thisFileSize); } else { // There was zero data traversal if (debugLogging) {addLogEntry("No file upload, no data movement - cachedOnlineDriveData.quotaRemaining = " ~ to!string(cachedOnlineDriveData.quotaRemaining), ["debug"]);} } } else { // Need to add this to fileUploadFailures to capture at the end fileUploadFailures ~= fileToUpload; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform the actual upload to OneDrive bool performNewFileUpload(Item parentItem, string fileToUpload, long thisFileSize) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Assume that by default the upload fails bool uploadFailed = true; // OneDrive API Upload Response JSONValue uploadResponse; // Create the OneDriveAPI Upload Instance OneDriveApi uploadFileOneDriveApiInstance; // Capture what time this upload started SysTime uploadStartTime = Clock.currTime(); // Is this a dry-run scenario? if (!dryRun) { // Not a dry-run situation // Do we use simpleUpload or create an upload session? bool useSimpleUpload = false; // What upload method should be used? if (thisFileSize <= sessionThresholdFileSize) { useSimpleUpload = true; } // Use Session Upload regardless if (appConfig.getValueBool("force_session_upload")) { // Forcing session upload if (debugLogging) {addLogEntry("Forcing to perform upload using a session (newfile)", ["debug"]);} useSimpleUpload = false; } // We can only upload zero size files via simpleFileUpload regardless of account type // Reference: https://github.com/OneDrive/onedrive-api-docs/issues/53 // Additionally, only where file size is < 4MB should be uploaded by simpleUpload - everything else should use a session to upload if ((thisFileSize == 0) || (useSimpleUpload)) { try { // Initialise API for simple upload uploadFileOneDriveApiInstance = new OneDriveApi(appConfig); uploadFileOneDriveApiInstance.initialise(); // Attempt to upload the zero byte file using simpleUpload for all account types uploadResponse = uploadFileOneDriveApiInstance.simpleUpload(fileToUpload, parentItem.driveId, parentItem.id, baseName(fileToUpload)); uploadFailed = false; addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... done", fileTransferNotifications()); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadFileOneDriveApiInstance.releaseCurlEngine(); uploadFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } catch (OneDriveException exception) { // An error was responded with - what was it // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... failed!", ["info", "notify"]); displayOneDriveErrorMessage(exception.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadFileOneDriveApiInstance.releaseCurlEngine(); uploadFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } catch (FileException e) { // display the error message addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... failed!", ["info", "notify"]); displayFileSystemErrorMessage(e.msg, thisFunctionName, fileToUpload); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadFileOneDriveApiInstance.releaseCurlEngine(); uploadFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } } else { // Initialise API for session upload uploadFileOneDriveApiInstance = new OneDriveApi(appConfig); uploadFileOneDriveApiInstance.initialise(); // Session Upload for this criteria: // - Personal Account and file size > 4MB // - All Business | Office365 | SharePoint files > 0 bytes JSONValue uploadSessionData; // As this is a unique thread, the sessionFilePath for where we save the data needs to be unique // The best way to do this is generate a 10 digit alphanumeric string, and use this as the file extension string threadUploadSessionFilePath = appConfig.uploadSessionFilePath ~ "." ~ generateAlphanumericString(); // Attempt to upload the > 4MB file using an upload session for all account types try { // Create the Upload Session uploadSessionData = createSessionForFileUpload(uploadFileOneDriveApiInstance, fileToUpload, parentItem.driveId, parentItem.id, baseName(fileToUpload), null, threadUploadSessionFilePath); } catch (OneDriveException exception) { // An error was responded with - what was it // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... failed!", ["info", "notify"]); displayOneDriveErrorMessage(exception.msg, thisFunctionName); } catch (FileException e) { // display the error message addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... failed!", ["info", "notify"]); displayFileSystemErrorMessage(e.msg, thisFunctionName, fileToUpload); } // Do we have a valid session URL that we can use ? if (uploadSessionData.type() == JSONType.object) { // This is a valid JSON object bool sessionDataValid = true; // Validate that we have the following items which we need if (!hasUploadURL(uploadSessionData)) { sessionDataValid = false; if (debugLogging) {addLogEntry("Session data missing 'uploadUrl'", ["debug"]);} } if (!hasNextExpectedRanges(uploadSessionData)) { sessionDataValid = false; if (debugLogging) {addLogEntry("Session data missing 'nextExpectedRanges'", ["debug"]);} } if (!hasLocalPath(uploadSessionData)) { sessionDataValid = false; if (debugLogging) {addLogEntry("Session data missing 'localPath'", ["debug"]);} } if (sessionDataValid) { // We have a valid Upload Session Data we can use try { // Try and perform the upload session uploadResponse = performSessionFileUpload(uploadFileOneDriveApiInstance, thisFileSize, uploadSessionData, threadUploadSessionFilePath); if (uploadResponse.type() == JSONType.object) { uploadFailed = false; addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... done", fileTransferNotifications()); } else { addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... failed!", ["info", "notify"]); uploadFailed = true; } } catch (OneDriveException exception) { // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... failed!", ["info", "notify"]); displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } else { // No Upload URL or nextExpectedRanges or localPath .. not a valid JSON we can use if (verboseLogging) {addLogEntry("Session data is missing required elements to perform a session upload.", ["verbose"]);} addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... failed!", ["info", "notify"]); } } else { // Create session Upload URL failed addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... failed!", ["info", "notify"]); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadFileOneDriveApiInstance.releaseCurlEngine(); uploadFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } } else { // We are in a --dry-run scenario uploadResponse = createFakeResponse(fileToUpload); uploadFailed = false; addLogEntry("Uploading new file: " ~ fileToUpload ~ " ... done", fileTransferNotifications()); } // If no upload failure, calculate transfer metrics, perform integrity validation if (!uploadFailed) { // Upload did not fail ... // As no upload failure, calculate transfer metrics in a consistent manner displayTransferMetrics(fileToUpload, thisFileSize, uploadStartTime, Clock.currTime()); // OK as the upload did not fail, we need to save the response from OneDrive, but it has to be a valid JSON response if (uploadResponse.type() == JSONType.object) { // check if the path still exists locally before we try to set the file times online - as short lived files, whilst we uploaded it - it may not exist locally already if (exists(fileToUpload)) { // Are we in a --dry-run scenario if (!dryRun) { bool uploadIntegrityPassed; // Check the integrity of the uploaded file, if the local file still exists uploadIntegrityPassed = performUploadIntegrityValidationChecks(uploadResponse, fileToUpload, thisFileSize); // Update the file modified time on OneDrive and save item details to database // Update the item's metadata on OneDrive SysTime mtime = timeLastModified(fileToUpload).toUTC(); mtime.fracSecs = Duration.zero; string newFileId = uploadResponse["id"].str; string newFileETag = uploadResponse["eTag"].str; // Attempt to update the online date time stamp based on our local data if (appConfig.accountType == "personal") { // Business | SharePoint we used a session to upload the data, thus, local timestamps are given when the session is created uploadLastModifiedTime(parentItem, parentItem.driveId, newFileId, mtime, newFileETag); } else { // Due to https://github.com/OneDrive/onedrive-api-docs/issues/935 Microsoft modifies all PDF, MS Office & HTML files with added XML content. It is a 'feature' of SharePoint. // This means that the file which was uploaded, is potentially no longer the file we have locally // There are 2 ways to solve this: // 1. Download the modified file immediately after upload as per v2.4.x (default) // 2. Create a new online version of the file, which then contributes to the users 'quota' if (!uploadIntegrityPassed) { // upload integrity check failed // We do not want to create a new online file version .. unless configured to do so if (!appConfig.getValueBool("create_new_file_version")) { // are we in an --upload-only scenario if(!uploadOnly){ // Download the now online modified file addLogEntry("WARNING: Microsoft OneDrive modified your uploaded file via its SharePoint 'enrichment' feature. To keep your local and online versions consistent, the altered file will now be downloaded."); addLogEntry("WARNING: Please refer to https://github.com/OneDrive/onedrive-api-docs/issues/935 for further details."); // Download the file directly using the prior upload JSON response downloadFileItem(uploadResponse, true); } else { // --upload-only being used // we are not downloading a file, warn that file differences will exist addLogEntry("WARNING: The file uploaded to Microsoft OneDrive has been modified through its SharePoint 'enrichment' process and no longer matches your local version."); addLogEntry("WARNING: The online metadata will now be modified to match your local file which will create a new file version."); addLogEntry("WARNING: Please refer to https://github.com/OneDrive/onedrive-api-docs/issues/935 for further details."); // Create a new online version of the file by updating the metadata - this ensures that the file we uploaded is the file online uploadLastModifiedTime(parentItem, parentItem.driveId, newFileId, mtime, newFileETag); } } else { // Create a new online version of the file by updating the metadata, which negates the need to download the file uploadLastModifiedTime(parentItem, parentItem.driveId, newFileId, mtime, newFileETag); } } else { // integrity checks passed // save the uploadResponse to the database saveItem(uploadResponse); } } } // Are we in an --upload-only & --remove-source-files scenario? // Use actual config values as we are doing an upload session recovery if ((uploadOnly) && (localDeleteAfterUpload)) { // Perform the local file deletion removeLocalFilePostUpload(fileToUpload); } } else { // will be removed in different event! addLogEntry("File disappeared locally after upload: " ~ fileToUpload); } } else { // Log that an invalid JSON object was returned if (debugLogging) {addLogEntry("uploadFileOneDriveApiInstance.simpleUpload or session.upload call returned an invalid JSON Object from the OneDrive API", ["debug"]);} } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return upload status return uploadFailed; } // Create the OneDrive Upload Session JSONValue createSessionForFileUpload(OneDriveApi activeOneDriveApiInstance, string fileToUpload, string parentDriveId, string parentId, string filename, string eTag, string threadUploadSessionFilePath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Upload file via a OneDrive API session JSONValue uploadSession; // Calculate modification time SysTime localFileLastModifiedTime = timeLastModified(fileToUpload).toUTC(); localFileLastModifiedTime.fracSecs = Duration.zero; // Construct the fileSystemInfo JSON component needed to create the Upload Session JSONValue fileSystemInfo = [ "item": JSONValue([ "@microsoft.graph.conflictBehavior": JSONValue("replace"), "fileSystemInfo": JSONValue([ "lastModifiedDateTime": localFileLastModifiedTime.toISOExtString() ]) ]) ]; // Try to create the upload session for this file uploadSession = activeOneDriveApiInstance.createUploadSession(parentDriveId, parentId, filename, eTag, fileSystemInfo); if (uploadSession.type() == JSONType.object) { // a valid session object was created if ("uploadUrl" in uploadSession) { // Add the file path we are uploading to this JSON Session Data uploadSession["localPath"] = fileToUpload; // Save this session saveSessionFile(threadUploadSessionFilePath, uploadSession); } // When does this upload URL expire? displayUploadSessionExpiry(uploadSession); } else { // no valid session was created if (verboseLogging) {addLogEntry("Creation of OneDrive API Upload Session failed.", ["verbose"]);} // return upload() will return a JSONValue response, create an empty JSONValue response to return uploadSession = null; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return the JSON return uploadSession; } // Display upload session expiry time void displayUploadSessionExpiry(JSONValue uploadSessionData) { try { // Step 1: Extract the ISO 8601 UTC string from the JSON string utcExpiry = uploadSessionData["expirationDateTime"].str; // Step 2: Convert ISO 8601 string to SysTime (assumes Zulu / UTC timezone) SysTime expiryUTC = SysTime.fromISOExtString(utcExpiry); // Step 3: Convert to local time auto expiryLocal = expiryUTC.toLocalTime(); // Step 4: Print both UTC and Local times if (debugLogging) { addLogEntry("Upload session URL expires at (UTC): " ~ to!string(expiryUTC), ["debug"]); addLogEntry("Upload session URL expires at (Local): " ~ to!string(expiryLocal), ["debug"]); } } catch (Exception e) { // nothing } } // Save the session upload data void saveSessionFile(string threadUploadSessionFilePath, JSONValue uploadSessionData) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } try { std.file.write(threadUploadSessionFilePath, uploadSessionData.toString()); } catch (FileException e) { // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, threadUploadSessionFilePath); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform the upload of file via the Upload Session that was created JSONValue performSessionFileUpload(OneDriveApi activeOneDriveApiInstance, long thisFileSize, JSONValue uploadSessionData, string threadUploadSessionFilePath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Response for upload JSONValue uploadResponse; // https://learn.microsoft.com/en-us/graph/api/driveitem-createuploadsession?view=graph-rest-1.0#upload-bytes-to-the-upload-session // You can upload the entire file, or split the file into multiple byte ranges, as long as the maximum bytes in any given request is less than 60 MiB. // Calculate File Fragment Size (must be valid multiple of 320 KiB) long baseSize; long fragmentSize; enum CHUNK_SIZE = 327_680L; // 320 KiB enum MAX_FRAGMENT_BYTES = 60L * 1_048_576L; // 60 MiB = 62,914,560 bytes // Time sensitive and ETA string items SysTime currentTime = Clock.currTime(); long start_unix_time = currentTime.toUnixTime(); int h, m, s; string etaString; // Upload string template string uploadLogEntry = "Uploading: " ~ uploadSessionData["localPath"].str ~ " ... "; // Calculate base size using configured fragment size baseSize = appConfig.getValueLong("file_fragment_size") * 2^^20; // Ensure 'fragmentSize' is a multiple of 327680 bytes and < 60 MiB if (baseSize >= MAX_FRAGMENT_BYTES) { // Use the maximum valid size below 60 MiB, rounded down to nearest 320 KiB multiple fragmentSize = ((MAX_FRAGMENT_BYTES - 1) / CHUNK_SIZE) * CHUNK_SIZE; } else { fragmentSize = (baseSize / CHUNK_SIZE) * CHUNK_SIZE; } // Set the fragment count and fragSize size_t fragmentCount = 0; long fragSize = 0; // Extract current upload offset from session data long offset = uploadSessionData["nextExpectedRanges"][0].str.splitter('-').front.to!long; // Estimate total number of expected fragments size_t expected_total_fragments = cast(size_t) ceil(double(thisFileSize) / double(fragmentSize)); // If we get a 404, create a new upload session and store it here JSONValue newUploadSession; // Start the session upload using the active API instance for this thread while (true) { // fragment upload fragmentCount++; if (debugLogging) {addLogEntry("Fragment: " ~ to!string(fragmentCount) ~ " of " ~ to!string(expected_total_fragments), ["debug"]);} // Generate ETA time output etaString = formatETA(calc_eta((fragmentCount -1), expected_total_fragments, start_unix_time)); // Calculate this progress output auto ratio = cast(double)(fragmentCount - 1) / expected_total_fragments; // Convert the ratio to a percentage and format it to two decimal places string percentage = leftJustify(format("%d%%", cast(int)(ratio * 100)), 5, ' '); addLogEntry(uploadLogEntry ~ percentage ~ etaString, ["consoleOnly"]); // What fragment size will be used? if (debugLogging) {addLogEntry("fragmentSize: " ~ to!string(fragmentSize) ~ " offset: " ~ to!string(offset) ~ " thisFileSize: " ~ to!string(thisFileSize), ["debug"]);} fragSize = fragmentSize < thisFileSize - offset ? fragmentSize : thisFileSize - offset; if (debugLogging) {addLogEntry("Using fragSize: " ~ to!string(fragSize), ["debug"]);} // fragSize must not be a negative value if (fragSize < 0) { // Session upload will fail // not a JSON object - fragment upload failed if (verboseLogging) {addLogEntry("File upload session failed - invalid calculation of fragment size", ["verbose"]);} if (exists(threadUploadSessionFilePath)) { safeRemove(threadUploadSessionFilePath); } // set uploadResponse to null as error uploadResponse = null; return uploadResponse; } // If the resume upload fails, we need to check for a return code here try { uploadResponse = activeOneDriveApiInstance.uploadFragment( uploadSessionData["uploadUrl"].str, uploadSessionData["localPath"].str, offset, fragSize, thisFileSize ); } catch (OneDriveException exception) { // if a 100 uploadResponse is generated, continue if (exception.httpStatusCode == 100) { continue; } // Issue #3355: https://github.com/abraunegg/onedrive/issues/3355 if (exception.httpStatusCode == 403 && (exception.msg.canFind("accessDenied") || exception.msg.canFind("You do not have authorization to access the file"))) { addLogEntry("ERROR: Upload session has expired (403 - Access Denied)"); addLogEntry("Probable Cause: The 'tempauth' token embedded in the upload URL has most likely expired."); addLogEntry(" Microsoft issues this token when the upload session is first created. It cannot be refreshed, extended, or queried for its expiry time."); addLogEntry(" The only way to infer its validity is by measuring the time from session creation to this 403 failure."); addLogEntry(" The upload session URL itself may still appear active (based on expirationDateTime), but the upload URL is no longer usable once this 'tempauth' token expires."); addLogEntry(" A new upload session will now be created. Upload will restart from the beginning using the new session URL and new 'tempauth' token."); // Attempt creation of new upload session newUploadSession = createSessionForFileUpload( activeOneDriveApiInstance, uploadSessionData["localPath"].str, uploadSessionData["targetDriveId"].str, uploadSessionData["targetParentId"].str, baseName(uploadSessionData["localPath"].str), null, threadUploadSessionFilePath ); // Attempt retry (which will start upload again from scratch) with new session upload URL continue; } // There was an error uploadResponse from OneDrive when uploading the file fragment if (exception.httpStatusCode == 404) { // The upload session was not found .. ?? we just created it .. maybe the backend is still creating it or failed to create it if (debugLogging) {addLogEntry("The upload session was not found .... re-create session");} newUploadSession = createSessionForFileUpload( activeOneDriveApiInstance, uploadSessionData["localPath"].str, uploadSessionData["targetDriveId"].str, uploadSessionData["targetParentId"].str, baseName(uploadSessionData["localPath"].str), null, threadUploadSessionFilePath ); } // Issue https://github.com/abraunegg/onedrive/issues/2747 // if a 416 uploadResponse is generated, continue if (exception.httpStatusCode == 416) { continue; } // Handle transient errors: // 408 - Request Time Out // 429 - Too Many Requests // 503 - Service Unavailable // 504 - Gateway Timeout // Insert a new line as well, so that the below error is inserted on the console in the right location if (verboseLogging) {addLogEntry("Fragment upload failed - received an exception response from OneDrive API", ["verbose"]);} // display what the error is if we have not already continued if (exception.httpStatusCode != 404) { displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // retry fragment upload in case error is transient if (verboseLogging) {addLogEntry("Retrying fragment upload", ["verbose"]);} // Retry fragment upload logic try { string effectiveRetryUploadURL; string effectiveLocalPath; // If we re-created the session, use the new data on re-try if (newUploadSession.type() == JSONType.object) { if ("uploadUrl" in newUploadSession) { // get this from 'newUploadSession' effectiveRetryUploadURL = newUploadSession["uploadUrl"].str; effectiveLocalPath = newUploadSession["localPath"].str; } else { // get this from the original input effectiveRetryUploadURL = uploadSessionData["uploadUrl"].str; effectiveLocalPath = uploadSessionData["localPath"].str; } // retry the fragment upload uploadResponse = activeOneDriveApiInstance.uploadFragment( effectiveRetryUploadURL, effectiveLocalPath, offset, fragSize, thisFileSize ); } else { // newUploadSession not a JSON uploadResponse = null; return uploadResponse; } } catch (OneDriveException e) { // OneDrive threw another error on retry if (verboseLogging) {addLogEntry("Retry to upload fragment failed", ["verbose"]);} // display what the error is displayOneDriveErrorMessage(e.msg, thisFunctionName); // set uploadResponse to null as the fragment upload was in error twice uploadResponse = null; } catch (std.exception.ErrnoException e) { // There was a file system error - display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, newUploadSession["localPath"].str); return uploadResponse; } } catch (ErrnoException e) { // There was a file system error // display the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, uploadSessionData["localPath"].str); uploadResponse = null; return uploadResponse; } // was the fragment uploaded without issue? if (uploadResponse.type() == JSONType.object) { // Fragment uploaded if (debugLogging) {addLogEntry("Fragment upload complete", ["debug"]);} // Use updated offset from response, not fixed increment if ("nextExpectedRanges" in uploadResponse && uploadResponse["nextExpectedRanges"].type() == JSONType.array && !uploadResponse["nextExpectedRanges"].array.empty) { offset = uploadResponse["nextExpectedRanges"].array[0].str.splitter('-').front.to!long; } else { // No nextExpectedRanges? Assume upload complete break; } // update the uploadSessionData details uploadSessionData["expirationDateTime"] = uploadResponse["expirationDateTime"]; uploadSessionData["nextExpectedRanges"] = uploadResponse["nextExpectedRanges"]; // Log URL 'updated' expirationDateTime as 'UTC' and 'localTime' if (debugLogging) { // Convert expiration time to localTime string utcExpiry = uploadResponse["expirationDateTime"].str; SysTime expiryUTC = SysTime.fromISOExtString(utcExpiry); SysTime expiryLocal = expiryUTC.toLocalTime(); // Display updated URL expiry as UTC and localTime addLogEntry("Upload Session URL expiration extended to (UTC): " ~ to!string(expiryUTC), ["debug"]); addLogEntry("Upload Session URL expiration extended to (Local): " ~ to!string(expiryLocal), ["debug"]); addLogEntry("", ["debug"]); // Add new line as this fragment is complete } // Save for reuse saveSessionFile(threadUploadSessionFilePath, uploadSessionData); } else { // not a JSON object - fragment upload failed if (verboseLogging) {addLogEntry("File upload session failed - invalid response from OneDrive API", ["verbose"]);} // cleanup session data if (exists(threadUploadSessionFilePath)) { safeRemove(threadUploadSessionFilePath); } // set uploadResponse to null as error uploadResponse = null; return uploadResponse; } } // Upload complete long end_unix_time = Clock.currTime.toUnixTime(); auto upload_duration = cast(int)(end_unix_time - start_unix_time); dur!"seconds"(upload_duration).split!("hours", "minutes", "seconds")(h, m, s); etaString = format!"| DONE in %02d:%02d:%02d"(h, m, s); addLogEntry(uploadLogEntry ~ "100% " ~ etaString, ["consoleOnly"]); // Remove session file if it exists if (exists(threadUploadSessionFilePath)) { safeRemove(threadUploadSessionFilePath); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return the session upload response return uploadResponse; } // Delete an item on OneDrive void uploadDeletedItem(Item itemToDelete, string path) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } OneDriveApi uploadDeletedItemOneDriveApiInstance; // Are we in a situation where we HAVE to keep the data online - do not delete the remote object if (noRemoteDelete) { if ((itemToDelete.type == ItemType.dir)) { // Do not process remote directory delete if (verboseLogging) {addLogEntry("Skipping remote directory delete as --upload-only & --no-remote-delete configured", ["verbose"]);} } else { // Do not process remote file delete if (verboseLogging) {addLogEntry("Skipping remote file delete as --upload-only & --no-remote-delete configured", ["verbose"]);} } } else { // Is this a --download-only operation? if (!appConfig.getValueBool("download_only")) { // Process the delete - delete the object online addLogEntry("Deleting item from Microsoft OneDrive: " ~ path, fileTransferNotifications()); bool flagAsBigDelete = false; Item[] children; long itemsToDelete; if ((itemToDelete.type == ItemType.dir)) { // Query the database - how many objects will this remove? children = getChildren(itemToDelete.driveId, itemToDelete.id); // Count the returned items + the original item (1) itemsToDelete = count(children) + 1; if (debugLogging) {addLogEntry("Number of items online to delete: " ~ to!string(itemsToDelete), ["debug"]);} } else { itemsToDelete = 1; } // Clear array children = []; // A local delete of a file|folder when using --monitor will issue a inotify event, which will trigger the local & remote data immediately be deleted // The user may also be --sync process, so we are checking if something was deleted between application use if (itemsToDelete >= appConfig.getValueLong("classify_as_big_delete")) { // A big delete has been detected flagAsBigDelete = true; if (!appConfig.getValueBool("force")) { // Send this message to the GUI addLogEntry("ERROR: An attempt to remove a large volume of data from OneDrive has been detected. Exiting client to preserve your data on Microsoft OneDrive", ["info", "notify"]); // Additional application logging addLogEntry("ERROR: The total number of items being deleted is: " ~ to!string(itemsToDelete)); addLogEntry("ERROR: To delete a large volume of data use --force or increase the config value 'classify_as_big_delete' to a larger value"); // Must exit here to preserve data on online , allow logging to be done forceExit(); } } // Are we in a --dry-run scenario? if (!dryRun) { // We are not in a dry run scenario if (debugLogging) { addLogEntry("itemToDelete: " ~ to!string(itemToDelete), ["debug"]); // what item are we trying to delete? addLogEntry("Attempting to delete this single item id: " ~ itemToDelete.id ~ " from drive: " ~ itemToDelete.driveId, ["debug"]); } // Configure these item variables to handle OneDrive Business Shared Folder Deletion Item actualItemToDelete; Item remoteShortcutLinkItem; // OneDrive Shared Folder Link Handling // - If the item to delete is on a remote drive ... technically we do not own this and should not be deleting this online // We should however be deleting the 'link' in our account online, and, remove the DB link entries (root / folder DB Tie records) bool businessSharingEnabled = false; // OneDrive Business Shared Folder Deletion Handling // Is this a Business Account with Sync Business Shared Items enabled? if ((appConfig.accountType == "business") && (appConfig.getValueBool("sync_business_shared_items"))) { // Syncing Business Shared Items is enabled businessSharingEnabled = true; } // Is this a 'personal' account type or is this a Business Account with Sync Business Shared Items enabled? if ((appConfig.accountType == "personal") || businessSharingEnabled) { // Personal account type or syncing Business Shared Items is enabled // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { itemToDelete.driveId = transformToLowerCase(itemToDelete.driveId); } // Is the 'drive' where this is to be deleted on 'our' drive or is this a remote 'drive' ? if (itemToDelete.driveId != appConfig.defaultDriveId) { // The item to delete is on a remote drive ... this must be handled in a specific way if (itemToDelete.type == ItemType.dir) { // Select the 'remote' database object type using these details // Get the DB entry for this 'remote' item itemDB.selectRemoteTypeByRemoteDriveId(itemToDelete.driveId, itemToDelete.id, remoteShortcutLinkItem); } } // We potentially now have the correct details to delete in our account if (remoteShortcutLinkItem.type == ItemType.remote) { // A valid 'remote' DB entry was returned if (debugLogging) {addLogEntry("remoteShortcutLinkItem: " ~ to!string(remoteShortcutLinkItem), ["debug"]);} // Set actualItemToDelete to this data actualItemToDelete = remoteShortcutLinkItem; // Delete the shortcut reference in the local database if (appConfig.accountType == "personal") { // Personal Shared Folder deletion message if (debugLogging) {addLogEntry("Deleted OneDrive Personal Shared Folder 'Shortcut Link'", ["debug"]);} } else { // Business Shared Folder deletion message if (debugLogging) {addLogEntry("Deleted OneDrive Business Shared Folder 'Shortcut Link'", ["debug"]);} } // Perform action deletion from database itemDB.deleteById(remoteShortcutLinkItem.driveId, remoteShortcutLinkItem.id); } else { // No data was returned, use the original data actualItemToDelete = itemToDelete; } } else { // Set actualItemToDelete to original data actualItemToDelete = itemToDelete; } // Try the online deletion using the 'actualItemToDelete' values try { // Create new OneDrive API Instance uploadDeletedItemOneDriveApiInstance = new OneDriveApi(appConfig); uploadDeletedItemOneDriveApiInstance.initialise(); if (!permanentDelete) { // Perform the delete via the default OneDrive API instance uploadDeletedItemOneDriveApiInstance.deleteById(actualItemToDelete.driveId, actualItemToDelete.id); } else { // Perform the permanent delete via the default OneDrive API instance uploadDeletedItemOneDriveApiInstance.permanentDeleteById(actualItemToDelete.driveId, actualItemToDelete.id); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadDeletedItemOneDriveApiInstance.releaseCurlEngine(); uploadDeletedItemOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } catch (OneDriveException e) { if (e.httpStatusCode == 404) { // item.id, item.eTag could not be found on the specified driveId if (verboseLogging) {addLogEntry("OneDrive reported: The resource could not be found to be deleted.", ["verbose"]);} } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadDeletedItemOneDriveApiInstance.releaseCurlEngine(); uploadDeletedItemOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } // Delete the reference in the local database - use the original input itemDB.deleteById(itemToDelete.driveId, itemToDelete.id); // Was the original item a 'Shared Folder' ? if (remoteShortcutLinkItem.type == ItemType.remote) { // Are there any other 'children' for itemToDelete parent ... this parent may have other Shared Folders added to our account that we have not removed .. Item[] remainingChildren; remainingChildren ~= itemDB.selectChildren(itemToDelete.driveId, itemToDelete.parentId); // Only if there are zero children for this parent item, remove the 'root' record if (count(remainingChildren) == 0) { // No more children for this parental object itemDB.deleteById(itemToDelete.driveId, itemToDelete.parentId); } } } else { // log that this is a dry-run activity addLogEntry("DRY-RUN: No delete activity"); } } else { // --download-only operation, we are not uploading any delete event to OneDrive if (debugLogging) {addLogEntry("Not pushing local delete to Microsoft OneDrive due to --download-only being used", ["debug"]);} } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Get the children of an item id from the database Item[] getChildren(string driveId, string id) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } Item[] children; children ~= itemDB.selectChildren(driveId, id); foreach (Item child; children) { if (child.type != ItemType.file) { // recursively get the children of this child children ~= getChildren(child.driveId, child.id); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return the database records return children; } // Perform a 'reverse' delete of all child objects on OneDrive void performReverseDeletionOfOneDriveItems(Item[] children, Item itemToDelete) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Log what is happening if (debugLogging) {addLogEntry("Attempting a reverse delete of all child objects from OneDrive", ["debug"]);} // Create a new API Instance for this thread and initialise it OneDriveApi performReverseDeletionOneDriveApiInstance; performReverseDeletionOneDriveApiInstance = new OneDriveApi(appConfig); performReverseDeletionOneDriveApiInstance.initialise(); foreach_reverse (Item child; children) { // Log the action if (debugLogging) {addLogEntry("Attempting to delete this child item id: " ~ child.id ~ " from drive: " ~ child.driveId, ["debug"]);} if (!permanentDelete) { // Perform the delete via the default OneDrive API instance performReverseDeletionOneDriveApiInstance.deleteById(child.driveId, child.id, child.eTag); } else { // Perform the permanent delete via the default OneDrive API instance performReverseDeletionOneDriveApiInstance.permanentDeleteById(child.driveId, child.id, child.eTag); } // delete the child reference in the local database itemDB.deleteById(child.driveId, child.id); } // Log the action if (debugLogging) {addLogEntry("Attempting to delete this parent item id: " ~ itemToDelete.id ~ " from drive: " ~ itemToDelete.driveId, ["debug"]);} if (!permanentDelete) { // Perform the delete via the default OneDrive API instance performReverseDeletionOneDriveApiInstance.deleteById(itemToDelete.driveId, itemToDelete.id, itemToDelete.eTag); } else { // Perform the permanent delete via the default OneDrive API instance performReverseDeletionOneDriveApiInstance.permanentDeleteById(itemToDelete.driveId, itemToDelete.id, itemToDelete.eTag); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory performReverseDeletionOneDriveApiInstance.releaseCurlEngine(); performReverseDeletionOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Create a fake OneDrive response suitable for use with saveItem JSONValue createFakeResponse(string path) { import std.digest.sha; // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Generate a simulated JSON response which can be used // At a minimum we need: // 1. eTag // 2. cTag // 3. fileSystemInfo // 4. file or folder. if file, hash of file // 5. id // 6. name // 7. parent reference string fakeDriveId = appConfig.defaultDriveId; string fakeRootId = appConfig.defaultRootId; SysTime mtime = exists(path) ? timeLastModified(path).toUTC() : Clock.currTime(UTC()); auto sha1 = new SHA1Digest(); ubyte[] fakedOneDriveItemValues = sha1.digest(path); JSONValue fakeResponse; string parentPath = dirName(path); if (parentPath != "." && exists(path)) { foreach (searchDriveId; onlineDriveDetails.keys) { Item databaseItem; if (itemDB.selectByPath(parentPath, searchDriveId, databaseItem)) { fakeDriveId = databaseItem.driveId; fakeRootId = databaseItem.id; break; // Exit loop after finding the first match } } } fakeResponse = [ "id": JSONValue(toHexString(fakedOneDriveItemValues)), "cTag": JSONValue(toHexString(fakedOneDriveItemValues)), "eTag": JSONValue(toHexString(fakedOneDriveItemValues)), "fileSystemInfo": JSONValue([ "createdDateTime": mtime.toISOExtString(), "lastModifiedDateTime": mtime.toISOExtString() ]), "name": JSONValue(baseName(path)), "parentReference": JSONValue([ "driveId": JSONValue(fakeDriveId), "driveType": JSONValue(appConfig.accountType), "id": JSONValue(fakeRootId) ]) ]; if (exists(path)) { if (isDir(path)) { fakeResponse["folder"] = JSONValue(""); } else { string quickXorHash = computeQuickXorHash(path); fakeResponse["file"] = JSONValue([ "hashes": JSONValue(["quickXorHash": JSONValue(quickXorHash)]) ]); } } else { // Assume directory if path does not exist fakeResponse["folder"] = JSONValue(""); } if (debugLogging) {addLogEntry("Generated Fake OneDrive Response: " ~ to!string(fakeResponse), ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return the generated fake API response return fakeResponse; } // Save JSON item details into the item database void saveItem(JSONValue jsonItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // jsonItem has to be a valid object if (jsonItem.type() == JSONType.object) { // Issue #3336 - Convert driveId to lowercase if (appConfig.accountType == "personal") { // We must massage this raw JSON record to force the jsonItem["parentReference"]["driveId"] to lowercase if (hasParentReferenceDriveId(jsonItem)) { // This JSON record has a driveId we now must manipulate to lowercase string originalDriveIdValue = jsonItem["parentReference"]["driveId"].str; jsonItem["parentReference"]["driveId"] = transformToLowerCase(originalDriveIdValue); } } // Check if the response JSON has an 'id', otherwise makeItem() fails with 'Key not found: id' if (hasId(jsonItem)) { // Are we in a --upload-only & --remove-source-files scenario? // We do not want to add the item to the database in this situation as there is no local reference to the file post file deletion // If the item is a directory, we need to add this to the DB, if this is a file, we dont add this, the parent path is not in DB, thus any new files in this directory are not added if ((uploadOnly) && (localDeleteAfterUpload) && (isItemFile(jsonItem))) { // Log that we skipping adding item to the local DB and the reason why if (debugLogging) {addLogEntry("Skipping adding to database as --upload-only & --remove-source-files configured", ["debug"]);} } else { // Takes a JSON input and formats to an item which can be used by the database Item item = makeItem(jsonItem); // Is this JSON item a 'root' item? if ((isItemRoot(jsonItem)) && (item.name == "root")) { if (debugLogging) { addLogEntry("Creating 'root' DB item from this JSON: " ~ sanitiseJSONItem(jsonItem), ["debug"]); addLogEntry("Updating DB Item object with correct values as this is a 'root' object", ["debug"]); addLogEntry(" item.parentId = null", ["debug"]); addLogEntry(" item.type = ItemType.root", ["debug"]); } item.parentId = null; // ensures that this database entry has no parent item.type = ItemType.root; // Check for parentReference if (hasParentReference(jsonItem)) { // Set the correct item.driveId if (debugLogging) { addLogEntry("The 'root' JSON Item HAS a parentReference .... setting item.driveId = jsonItem['parentReference']['driveId'].str from the provided JSON record", ["debug"]); string logMessage = format(" item.driveId = '%s'", jsonItem["parentReference"]["driveId"].str); addLogEntry(logMessage, ["debug"]); } item.driveId = jsonItem["parentReference"]["driveId"].str; } // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test item.driveId = transformToLowerCase(item.driveId); // Test driveId length and validation if the driveId we are testing is not equal to appConfig.defaultDriveId if (item.driveId != appConfig.defaultDriveId) { item.driveId = testProvidedDriveIdForLengthIssue(item.driveId); } } // We only should be adding our account 'root' to the database, not shared folder 'root' items if (item.driveId != appConfig.defaultDriveId) { // Shared Folder drive 'root' object .. we dont want this item if (debugLogging) {addLogEntry("NOT adding 'remote root' object to database: " ~ to!string(item), ["debug"]);} return; } } // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test item.driveId = transformToLowerCase(item.driveId); // Test driveId length and validation if the driveId we are testing is not equal to appConfig.defaultDriveId if (item.driveId != appConfig.defaultDriveId) { item.driveId = testProvidedDriveIdForLengthIssue(item.driveId); } } // Add to the local database if (debugLogging) {addLogEntry("Saving this DB item record: " ~ to!string(item), ["debug"]);} itemDB.upsert(item); // If we have a remote drive ID, add this to our list of known drive id's if (!item.remoteDriveId.empty) { // Keep the DriveDetailsCache array with unique entries only DriveDetailsCache cachedOnlineDriveData; if (!canFindDriveId(item.remoteDriveId, cachedOnlineDriveData)) { // Add this driveId to the drive cache if (debugLogging) {addLogEntry("Database item is a remote drive object, need to fetch online details for this drive: " ~ to!string(item.remoteDriveId), ["debug"]);} addOrUpdateOneDriveOnlineDetails(item.remoteDriveId); } } } } else { // log error addLogEntry("ERROR: OneDrive response missing required 'id' element"); addLogEntry("ERROR: " ~ sanitiseJSONItem(jsonItem)); } } else { // Log that the provided JSON could not be processed addLogEntry("ERROR: Invalid JSON object - the provided data cannot be processed or stored in the database."); // What level of next message is provided? if (appConfig.verbosityCount == 0) { // Standard error message addLogEntry("ERROR: Please rerun the application with --verbose enabled to obtain additional diagnostic information."); } else { // verbose or debug addLogEntry("ERROR: The following JSON data failed validation and could not be saved: " ~ to!string(jsonItem)); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Save an already created database object into the database void saveDatabaseItem(Item newDatabaseItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Issue #3115 - Personal Account Shared Folder // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase for the DB record string actualOnlineDriveId = testProvidedDriveIdForLengthIssue(fetchRealOnlineDriveIdentifier(newDatabaseItem.driveId)); newDatabaseItem.driveId = actualOnlineDriveId; // Is this a 'remote' DB record if (newDatabaseItem.type == ItemType.remote) { // Issue #3336 - Convert remoteDriveId to lowercase before any test newDatabaseItem.remoteDriveId = transformToLowerCase(newDatabaseItem.remoteDriveId); // Test remoteDriveId length and validation if the remoteDriveId we are testing is not equal to appConfig.defaultDriveId if (newDatabaseItem.remoteDriveId != appConfig.defaultDriveId) { // Issue #3136, #3139 #3143 // Fetch the actual online record for this item // This returns the actual OneDrive Personal remoteDriveId value and is 15 character checked string actualOnlineRemoteDriveId = testProvidedDriveIdForLengthIssue(fetchRealOnlineDriveIdentifier(newDatabaseItem.remoteDriveId)); newDatabaseItem.remoteDriveId = actualOnlineRemoteDriveId; } } } // Add the database record if (debugLogging) {addLogEntry("Creating a new database record for a new local path that has been created: " ~ to!string(newDatabaseItem), ["debug"]);} itemDB.upsert(newDatabaseItem); // If we have a remote drive ID, add this to our list of known drive id's if (!newDatabaseItem.remoteDriveId.empty) { // Keep the DriveDetailsCache array with unique entries only DriveDetailsCache cachedOnlineDriveData; if (!canFindDriveId(newDatabaseItem.remoteDriveId, cachedOnlineDriveData)) { // Add this driveId to the drive cache if (debugLogging) {addLogEntry("New database record is a remote drive object, need to fetch online details for this drive: " ~ to!string(newDatabaseItem.remoteDriveId), ["debug"]);} addOrUpdateOneDriveOnlineDetails(newDatabaseItem.remoteDriveId); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Wrapper function for makeDatabaseItem so we can check to ensure that the item has the required hashes Item makeItem(JSONValue onedriveJSONItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Make the DB Item from the JSON data provided Item newDatabaseItem = makeDatabaseItem(onedriveJSONItem); // Is this a 'file' item that has not been deleted? Deleted items have no hash if ((newDatabaseItem.type == ItemType.file) && (!isItemDeleted(onedriveJSONItem))) { // Does this item have a file size attribute? if (hasFileSize(onedriveJSONItem)) { // Is the file size greater than 0? if (onedriveJSONItem["size"].integer > 0) { // Does the DB item have any hashes as per the API provided JSON data? if ((newDatabaseItem.quickXorHash.empty) && (newDatabaseItem.sha256Hash.empty)) { // Odd .. there is no hash for this item .. why is that? // Is there a 'file' JSON element? if ("file" in onedriveJSONItem) { // Microsoft OneDrive OneNote objects will report as files but have 'application/msonenote' and 'application/octet-stream' as mime types if ((isMicrosoftOneNoteMimeType1(onedriveJSONItem)) || (isMicrosoftOneNoteMimeType2(onedriveJSONItem))) { // Debug log output that this is a potential OneNote object if (debugLogging) {addLogEntry("This item is potentially an associated Microsoft OneNote Object Item", ["debug"]);} } else { // Not a Microsoft OneNote Mime Type Object .. string apiWarningMessage = "WARNING: OneDrive API inconsistency - this file does not have any hash: "; // This is computationally expensive .. but we are only doing this if there are no hashes provided bool parentInDatabase = itemDB.idInLocalDatabase(newDatabaseItem.driveId, newDatabaseItem.parentId); // Is the parent id in the database? if (parentInDatabase) { // This is again computationally expensive .. calculate this item path to advise the user the actual path of this item that has no hash string newItemPath = computeItemPath(newDatabaseItem.driveId, newDatabaseItem.parentId) ~ "/" ~ newDatabaseItem.name; addLogEntry(apiWarningMessage ~ newItemPath); } else { // Parent is not in the database .. why? // Check if the parent item had been skipped .. if (newDatabaseItem.parentId in skippedItems) { if (debugLogging) {addLogEntry(apiWarningMessage ~ "newDatabaseItem.parentId listed within skippedItems", ["debug"]);} } else { // Use the item ID .. there is no other reference available, parent is not being skipped, so we should have been able to calculate this - but we could not addLogEntry(apiWarningMessage ~ newDatabaseItem.id); } } } } } } else { // zero file size if (debugLogging) {addLogEntry("This item file is zero size - potentially no hash provided by the OneDrive API", ["debug"]);} } } } // OneDrive Personal Account driveId and remoteDriveId length check // Issue #3072 (https://github.com/abraunegg/onedrive/issues/3072) illustrated that the OneDrive API is inconsistent in response when the Drive ID starts with a zero ('0') // - driveId // - remoteDriveId // // Example: // 024470056F5C3E43 (driveId) // 24470056f5c3e43 (remoteDriveId) // If this is a OneDrive Personal Account, ensure this value is 16 characters, padded by leading zero's if eventually required // What account type is this? if (appConfig.accountType == "personal") { // Check the newDatabaseItem.remoteDriveId if (!newDatabaseItem.remoteDriveId.empty) { // Issue #3136, #3139 #3143 // Test searchItem.driveId length and validation // - This check the length, fetch online value and return a 16 character driveId newDatabaseItem.remoteDriveId = testProvidedDriveIdForLengthIssue(fetchRealOnlineDriveIdentifier(newDatabaseItem.remoteDriveId)); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return the new database item return newDatabaseItem; } // For OneDrive Personal Accounts, the case sensitivity depending on the API call means the 'driveId' can be uppercase or lowercase // For this application use, this causes issues as, in POSIX environments - 024470056F5C3E43 != 024470056f5c3e43 despite on Windows this being treated as the same // This function does NOT do a 15 character driveId validation string fetchRealOnlineDriveIdentifier(string inputDriveId) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // What are we doing if (debugLogging) { string fetchRealValueLogMessage = format("Fetching actual online 'driveId' value for '%s'", inputDriveId); addLogEntry(fetchRealValueLogMessage, ["debug"]); } // variables for this function JSONValue remoteDriveDetails; OneDriveApi fetchDriveDetailsOneDriveApiInstance; string outputDriveId; // Create new OneDrive API Instance fetchDriveDetailsOneDriveApiInstance = new OneDriveApi(appConfig); fetchDriveDetailsOneDriveApiInstance.initialise(); // Get root details for the provided driveId try { remoteDriveDetails = fetchDriveDetailsOneDriveApiInstance.getDriveIdRoot(inputDriveId); } catch (OneDriveException exception) { if (debugLogging) {addLogEntry("remoteDriveDetails = fetchDriveDetailsOneDriveApiInstance.getDriveIdRoot(inputDriveId) generated a OneDriveException", ["debug"]);} // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory fetchDriveDetailsOneDriveApiInstance.releaseCurlEngine(); fetchDriveDetailsOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Do we have details we can use? if (hasParentReferenceDriveId(remoteDriveDetails)) { // We have a [parentReference][driveId] reference driveId to use outputDriveId = remoteDriveDetails["parentReference"]["driveId"].str; } else { // We dont have a value from online we can use // Test existing driveId length and validation outputDriveId = inputDriveId; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return the outputDriveId return outputDriveId; } // Print the fileDownloadFailures and fileUploadFailures arrays if they are not empty void displaySyncFailures() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } bool logFailures(string[] failures, string operation) { if (failures.empty) return false; addLogEntry(); addLogEntry("Failed items to " ~ operation ~ " to/from Microsoft OneDrive: " ~ to!string(failures.length)); foreach (failedFile; failures) { addLogEntry("Failed to " ~ operation ~ ": " ~ failedFile, ["info", "notify"]); foreach (searchDriveId; onlineDriveDetails.keys) { Item dbItem; if (itemDB.selectByPath(failedFile, searchDriveId, dbItem)) { addLogEntry("ERROR: Failed " ~ operation ~ " path found in database, must delete this item from the database .. it should not be in there if the file failed to " ~ operation); itemDB.deleteById(dbItem.driveId, dbItem.id); if (dbItem.remoteDriveId != null) { itemDB.deleteById(dbItem.remoteDriveId, dbItem.remoteId); } } } } return true; } bool downloadFailuresLogged = logFailures(fileDownloadFailures, "download"); bool uploadFailuresLogged = logFailures(fileUploadFailures, "upload"); syncFailures = downloadFailuresLogged || uploadFailuresLogged; // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Generate a /delta compatible response - for use when we cant actually use /delta // This is required when the application is configured to use National Azure AD deployments as these do not support /delta queries // The same technique can also be used when we are using --single-directory. The parent objects up to the single directory target can be added, // then once the target of the --single-directory request is hit, all of the children of that path can be queried, giving a much more focused // JSON response which can then be processed, negating the need to continuously traverse the tree and 'exclude' items JSONValue generateDeltaResponse(string pathToQuery = null) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // JSON value which will be responded with JSONValue selfGeneratedDeltaResponse; // Function variables bool remotePathObject = false; Item searchItem; JSONValue rootData; JSONValue driveData; JSONValue pathData; JSONValue topLevelChildren; JSONValue[] childrenData; string nextLink; OneDriveApi generateDeltaResponseOneDriveApiInstance; // Was a path to query passed in? if (pathToQuery.empty) { // Will query for the 'root' pathToQuery = "."; } // Create new OneDrive API Instance generateDeltaResponseOneDriveApiInstance = new OneDriveApi(appConfig); generateDeltaResponseOneDriveApiInstance.initialise(); // Is this a --single-directory invocation? if (!singleDirectoryScope) { // In a --resync scenario, there is no DB data to query, so we have to query the OneDrive API here to get relevant details try { // Query the OneDrive API, using the path, which will query 'our' OneDrive Account pathData = generateDeltaResponseOneDriveApiInstance.getPathDetails(pathToQuery); // Is the path on OneDrive local or remote to our account drive id? if (!isItemRemote(pathData)) { // The path we are seeking is local to our account drive id searchItem.driveId = pathData["parentReference"]["driveId"].str; searchItem.id = pathData["id"].str; } else { // The path we are seeking is remote to our account drive id searchItem.driveId = pathData["remoteItem"]["parentReference"]["driveId"].str; searchItem.id = pathData["remoteItem"]["id"].str; remotePathObject = true; // Issue #3115 - Personal Account Shared Folder // What account type is this? if (appConfig.accountType == "personal") { // Issue #3136, #3139 #3143 // Fetch the actual online record for this item // This returns the actual OneDrive Personal driveId value. The check of 'searchItem.driveId' to comply with 16 characters is done below string actualOnlineDriveId = fetchRealOnlineDriveIdentifier(searchItem.driveId); searchItem.driveId = actualOnlineDriveId; } } } catch (OneDriveException exception) { // Display error message displayOneDriveErrorMessage(exception.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory generateDeltaResponseOneDriveApiInstance.releaseCurlEngine(); generateDeltaResponseOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Must force exit here, allow logging to be done forceExit(); } } else { // When setSingleDirectoryScope() was called, the following were set to the correct items, even if the path was remote: // - singleDirectoryScopeDriveId // - singleDirectoryScopeItemId // Reuse these prior set values searchItem.driveId = singleDirectoryScopeDriveId; searchItem.id = singleDirectoryScopeItemId; } // Issue #3072 - Validate searchItem.driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test searchItem.driveId = transformToLowerCase(searchItem.driveId); // Test driveId length and validation if the driveId we are testing is not equal to appConfig.defaultDriveId if (searchItem.driveId != appConfig.defaultDriveId) { searchItem.driveId = testProvidedDriveIdForLengthIssue(searchItem.driveId); } } // Before we get any data from the OneDrive API, flag any child object in the database as out-of-sync for this driveId & and object id // Downgrade ONLY files associated with this driveId and idToQuery if (debugLogging) {addLogEntry("Downgrading all children for this searchItem.driveId (" ~ searchItem.driveId ~ ") and searchItem.id (" ~ searchItem.id ~ ") to an out-of-sync state", ["debug"]);} Item[] drivePathChildren = getChildren(searchItem.driveId, searchItem.id); if (count(drivePathChildren) > 0) { // Children to process and flag as out-of-sync foreach (drivePathChild; drivePathChildren) { // Flag any object in the database as out-of-sync for this driveId & and object id if (debugLogging) {addLogEntry("Downgrading item as out-of-sync: " ~ drivePathChild.id, ["debug"]);} itemDB.downgradeSyncStatusFlag(drivePathChild.driveId, drivePathChild.id); } } // Clear DB response array drivePathChildren = []; // Get drive details for the provided driveId try { driveData = generateDeltaResponseOneDriveApiInstance.getPathDetailsById(searchItem.driveId, searchItem.id); } catch (OneDriveException exception) { // An error was generated if (debugLogging) {addLogEntry("driveData = generateDeltaResponseOneDriveApiInstance.getPathDetailsById(searchItem.driveId, searchItem.id) generated a OneDriveException", ["debug"]);} // Was this a 403 or 404 ? if ((exception.httpStatusCode == 403) || (exception.httpStatusCode == 404)) { // The API call returned a 404 error response if (debugLogging) {addLogEntry("onlineParentData = onlineParentOneDriveApiInstance.getPathDetailsById(parentDriveId, parentObjectId); generated a 404 - shared folder path does not exist online", ["debug"]);} string errorMessage = format("WARNING: The OneDrive Shared Folder link target '%s' cannot be found online using the provided online data.", pathToQuery); // detail what this 404 error response means addLogEntry(); addLogEntry(errorMessage); addLogEntry("WARNING: This is potentially a broken online OneDrive Shared Folder link or you no longer have access to it. Please correct this error online."); addLogEntry(); // Release curl engine generateDeltaResponseOneDriveApiInstance.releaseCurlEngine(); // Free object and memory generateDeltaResponseOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Return the generated JSON response return selfGeneratedDeltaResponse; } else { // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } // Was a valid JSON response for 'driveData' provided? if (driveData.type() == JSONType.object) { // Dynamic output for a non-verbose run so that the user knows something is happening string generatingDeltaResponseMessage = format("Generating a /delta response from the OneDrive API for this Drive ID: %s and Item ID: %s", searchItem.driveId, searchItem.id); if (appConfig.verbosityCount == 0) { if (!appConfig.suppressLoggingOutput) { addProcessingLogHeaderEntry(generatingDeltaResponseMessage, appConfig.verbosityCount); } } else { if (verboseLogging) {addLogEntry(generatingDeltaResponseMessage, ["verbose"]);} } // Process this initial JSON response if (!isItemRoot(driveData)) { // Are we generating a /delta response for a Shared Folder, if not, then we need to add the drive root details first if (!sharedFolderDeltaGeneration) { // Get root details for the provided driveId try { rootData = generateDeltaResponseOneDriveApiInstance.getDriveIdRoot(searchItem.driveId); } catch (OneDriveException exception) { if (debugLogging) {addLogEntry("rootData = onedrive.getDriveIdRoot(searchItem.driveId) generated a OneDriveException", ["debug"]);} // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // Add driveData JSON data to array if (verboseLogging) {addLogEntry("Adding OneDrive root details for processing", ["verbose"]);} childrenData ~= rootData; } } // Add driveData JSON data to array if (verboseLogging) {addLogEntry("Adding OneDrive parent folder details for processing", ["verbose"]);} // What 'driveData' are we adding? if (debugLogging) { addLogEntry("Adding this 'driveData' to childrenData = " ~ to!string(driveData), ["debug"]); } // add the responded 'driveData' to the childrenData to process later childrenData ~= driveData; } else { // driveData is an invalid JSON object addLogEntry("CODING TO DO: The query of OneDrive API to getPathDetailsById generated an invalid JSON response - thus we cant build our own /delta simulated response ... how to handle?"); // Release curl engine generateDeltaResponseOneDriveApiInstance.releaseCurlEngine(); // Free object and memory generateDeltaResponseOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Must force exit here, allow logging to be done forceExit(); } // For each child object, query the OneDrive API while (true) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } // query top level children try { topLevelChildren = generateDeltaResponseOneDriveApiInstance.listChildren(searchItem.driveId, searchItem.id, nextLink); } catch (OneDriveException exception) { // OneDrive threw an error if (debugLogging) { addLogEntry(debugLogBreakType1, ["debug"]); addLogEntry("Query Error: topLevelChildren = generateDeltaResponseOneDriveApiInstance.listChildren(searchItem.driveId, searchItem.id, nextLink)", ["debug"]); addLogEntry("driveId: " ~ searchItem.driveId, ["debug"]); addLogEntry("idToQuery: " ~ searchItem.id, ["debug"]); addLogEntry("nextLink: " ~ nextLink, ["debug"]); } // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // Process top level children if (!remotePathObject) { // Main account root folder if (verboseLogging) {addLogEntry("Adding " ~ to!string(count(topLevelChildren["value"].array)) ~ " OneDrive items for processing from the OneDrive 'root' Folder", ["verbose"]);} } else { // Shared Folder if (verboseLogging) {addLogEntry("Adding " ~ to!string(count(topLevelChildren["value"].array)) ~ " OneDrive items for processing from the OneDrive Shared Folder", ["verbose"]);} } foreach (child; topLevelChildren["value"].array) { // Check for any Client Side Filtering here ... we should skip querying the OneDrive API for 'folders' that we are going to just process and skip anyway. // This avoids needless calls to the OneDrive API, and potentially speeds up this process. if (!checkJSONAgainstClientSideFiltering(child)) { // add this child to the array of objects childrenData ~= child; // is this child a folder? if (isItemFolder(child)) { // We have to query this folders children if childCount > 0 if (child["folder"]["childCount"].integer > 0){ // This child folder has children string childIdToQuery = child["id"].str; string childDriveToQuery = child["parentReference"]["driveId"].str; auto childParentPath = child["parentReference"]["path"].str.split(":"); string folderPathToScan = childParentPath[1] ~ "/" ~ child["name"].str; string pathForLogging; // Are we in a --single-directory situation? If we are, the path we are using for logging needs to use the input path as a base if (singleDirectoryScope) { pathForLogging = appConfig.getValueString("single_directory") ~ "/" ~ child["name"].str; } else { pathForLogging = child["name"].str; } // Query the children of this item JSONValue[] grandChildrenData = queryForChildren(childDriveToQuery, childIdToQuery, folderPathToScan, pathForLogging); foreach (grandChild; grandChildrenData.array) { // add the grandchild to the array childrenData ~= grandChild; } } } // As we are generating a /delta response we need to check if this 'child' JSON is a 'remoteItem' and then handle appropriately // Is this a remote folder JSON ? if (isItemRemote(child)) { // Check account type if (appConfig.accountType == "personal") { // The folder is a remote item ... OneDrive Personal Shared Folder if (debugLogging) {addLogEntry("The JSON data indicates this is most likely a OneDrive Personal Shared Folder Link added by 'Add shortcut to My files'", ["debug"]);} // It is a 'remote' JSON item denoting a potential shared folder // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(child); } if (appConfig.accountType == "business") { // The folder is a remote item ... OneDrive Business Shared Folder if (debugLogging) {addLogEntry("The JSON data indicates this is most likely a OneDrive Shared Business Folder Link added by 'Add shortcut to My files'", ["debug"]);} // Is Shared Business Folder Syncing actually enabled? if (appConfig.getValueBool("sync_business_shared_items")) { // Shared Business Folder Syncing IS enabled // It is a 'remote' JSON item denoting a potential shared folder // Create a 'root' and 'Shared Folder' DB Tie Records for this JSON object in a consistent manner createRequiredSharedFolderDatabaseRecords(child); } } } } } // If a collection exceeds the default page size (200 items), the @odata.nextLink property is returned in the response // to indicate more items are available and provide the request URL for the next page of items. if ("@odata.nextLink" in topLevelChildren) { // Update nextLink to next changeSet bundle if (debugLogging) {addLogEntry("Setting nextLink to (@odata.nextLink): " ~ nextLink, ["debug"]);} nextLink = topLevelChildren["@odata.nextLink"].str; } else break; // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } if (appConfig.verbosityCount == 0) { // Dynamic output for a non-verbose run so that the user knows something is happening if (!appConfig.suppressLoggingOutput) { // Close out the '....' being printed to the console completeProcessingDots(); } } // Craft response from all returned JSON elements selfGeneratedDeltaResponse = [ "@odata.context": JSONValue("https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)"), "value": JSONValue(childrenData.array) ]; // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory generateDeltaResponseOneDriveApiInstance.releaseCurlEngine(); generateDeltaResponseOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return the generated JSON response return selfGeneratedDeltaResponse; } // Query the OneDrive API for the specified child id for any children objects JSONValue[] queryForChildren(string driveId, string idToQuery, string childParentPath, string pathForLogging) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // function variables JSONValue thisLevelChildren; JSONValue[] thisLevelChildrenData; string nextLink; // Create new OneDrive API Instance OneDriveApi queryChildrenOneDriveApiInstance; queryChildrenOneDriveApiInstance = new OneDriveApi(appConfig); queryChildrenOneDriveApiInstance.initialise(); // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test driveId = transformToLowerCase(driveId); // Test driveId length and validation if the driveId we are testing is not equal to appConfig.defaultDriveId if (driveId != appConfig.defaultDriveId) { driveId = testProvidedDriveIdForLengthIssue(driveId); } } while (true) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } // Query this level children try { thisLevelChildren = queryThisLevelChildren(driveId, idToQuery, nextLink, queryChildrenOneDriveApiInstance); } catch (OneDriveException exception) { // MAY NEED FUTURE WORK HERE .. YET TO TRIGGER THIS addLogEntry("CODING TO DO: EXCEPTION HANDLING NEEDED: thisLevelChildren = queryThisLevelChildren(driveId, idToQuery, nextLink, queryChildrenOneDriveApiInstance)"); } if (appConfig.verbosityCount == 0) { // Dynamic output for a non-verbose run so that the user knows something is happening if (!appConfig.suppressLoggingOutput) { addProcessingDotEntry(); } } // Was a paging token error detected? if ((thisLevelChildren.type() == JSONType.string) && (thisLevelChildren.str == "INVALID_PAGING_TOKEN")) { // Invalid paging token: failed to parse integer value from token if (debugLogging) addLogEntry("Upstream detected invalid paging token – clearing nextLink and retrying", ["debug"]); nextLink = null; thisLevelChildren = queryThisLevelChildren(driveId, idToQuery, nextLink, queryChildrenOneDriveApiInstance); } // Was a valid JSON response for 'thisLevelChildren' provided? if (thisLevelChildren.type() == JSONType.object) { // process this level children if (!childParentPath.empty) { // We dont use childParentPath to log, as this poses an information leak risk. // The full parent path of the child, as per the JSON might be: // /Level 1/Level 2/Level 3/Child Shared Folder/some folder/another folder // But 'Child Shared Folder' is what is shared, thus '/Level 1/Level 2/Level 3/' is a potential information leak if logged. // Plus, the application output now shows accurately what is being shared - so that is a good thing. if (verboseLogging) {addLogEntry("Adding " ~ to!string(count(thisLevelChildren["value"].array)) ~ " OneDrive JSON items for further processing from " ~ pathForLogging, ["verbose"]);} } foreach (child; thisLevelChildren["value"].array) { // Check for any Client Side Filtering here ... we should skip querying the OneDrive API for 'folders' that we are going to just process and skip anyway. // This avoids needless calls to the OneDrive API, and potentially speeds up this process. if (!checkJSONAgainstClientSideFiltering(child)) { // add this child to the array of objects thisLevelChildrenData ~= child; // is this child a folder? if (isItemFolder(child)){ // We have to query this folders children if childCount > 0 if (child["folder"]["childCount"].integer > 0){ // This child folder has children string childIdToQuery = child["id"].str; string childDriveToQuery = child["parentReference"]["driveId"].str; auto grandchildParentPath = child["parentReference"]["path"].str.split(":"); string folderPathToScan = grandchildParentPath[1] ~ "/" ~ child["name"].str; string newLoggingPath = pathForLogging ~ "/" ~ child["name"].str; JSONValue[] grandChildrenData = queryForChildren(childDriveToQuery, childIdToQuery, folderPathToScan, newLoggingPath); foreach (grandChild; grandChildrenData.array) { // add the grandchild to the array thisLevelChildrenData ~= grandChild; } } } } } // If a collection exceeds the default page size (200 items), the @odata.nextLink property is returned in the response // to indicate more items are available and provide the request URL for the next page of items. if ("@odata.nextLink" in thisLevelChildren) { // Update nextLink to next changeSet bundle nextLink = thisLevelChildren["@odata.nextLink"].str; if (debugLogging) {addLogEntry("Setting nextLink to (@odata.nextLink): " ~ nextLink, ["debug"]);} } else break; } else { // Invalid JSON response when querying this level children if (debugLogging) {addLogEntry("INVALID JSON response when attempting a retry of parent function - queryForChildren(driveId, idToQuery, childParentPath, pathForLogging)", ["debug"]);} // retry thisLevelChildren = queryThisLevelChildren if (debugLogging) {addLogEntry("Thread sleeping for an additional 30 seconds", ["debug"]);} Thread.sleep(dur!"seconds"(30)); if (debugLogging) {addLogEntry("Retry this call thisLevelChildren = queryThisLevelChildren(driveId, idToQuery, nextLink, queryChildrenOneDriveApiInstance)", ["debug"]);} thisLevelChildren = queryThisLevelChildren(driveId, idToQuery, nextLink, queryChildrenOneDriveApiInstance); } // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory queryChildrenOneDriveApiInstance.releaseCurlEngine(); queryChildrenOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return response return thisLevelChildrenData; } // Query the OneDrive API for the child objects for this element JSONValue queryThisLevelChildren(string driveId, string idToQuery, string nextLink, OneDriveApi queryChildrenOneDriveApiInstance) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Issue #3115 - Validate driveId length // - The function 'queryForChildren' checks the 'driveId' value and that value is the input to this function. // It is redundant to then check 'driveid' again as this is not changed when this function is called // function variables JSONValue thisLevelChildren; // query children try { // attempt API call if (debugLogging) {addLogEntry("Attempting Query: thisLevelChildren = queryChildrenOneDriveApiInstance.listChildren(driveId, idToQuery, nextLink)", ["debug"]);} thisLevelChildren = queryChildrenOneDriveApiInstance.listChildren(driveId, idToQuery, nextLink); if (debugLogging) {addLogEntry("Query 'thisLevelChildren = queryChildrenOneDriveApiInstance.listChildren(driveId, idToQuery, nextLink)' performed successfully", ["debug"]);} } catch (OneDriveException exception) { // OneDrive threw an error if (debugLogging) { addLogEntry(debugLogBreakType1, ["debug"]); addLogEntry("Query Error: thisLevelChildren = queryChildrenOneDriveApiInstance.listChildren(driveId, idToQuery, nextLink)", ["debug"]); addLogEntry("driveId: " ~ driveId, ["debug"]); addLogEntry("idToQuery: " ~ idToQuery, ["debug"]); addLogEntry("nextLink: " ~ nextLink, ["debug"]); } // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); // With the error displayed, testing of PR #3381 for #3375 generated this error: // Error Message: HTTP request returned status code 400 (Bad Request) // Error Reason: Invalid paging token: failed to parse integer value from token. if ((exception.httpStatusCode == 400) && (exception.msg.canFind("Invalid paging token"))) { // Log and return a known marker that bypasses JSONType.object check if (debugLogging) addLogEntry("Detected invalid paging token – signaling upstream", ["debug"]); return JSONValue("INVALID_PAGING_TOKEN"); } // Generic failure return thisLevelChildren; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return response return thisLevelChildren; } // Traverses the provided path online, via the OneDrive API, following correct parent driveId and itemId elements across the account // to find if this full path exists. If this path exists online, the last item in the object path will be returned as a full JSON item. // // If the createPathIfMissing = false + no path exists online, a null invalid JSON item will be returned. // If the createPathIfMissing = true + no path exists online, the requested path will be created in the correct location online. The resulting // response to the directory creation will then be returned. // // This function also ensures that each path in the requested path actually matches the requested element to ensure that the OneDrive API response // is not falsely matching a 'case insensitive' match to the actual request which is a POSIX compliance issue. JSONValue queryOneDriveForSpecificPathAndCreateIfMissing(string thisNewPathToSearch, bool createPathIfMissing) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // function variables JSONValue getPathDetailsAPIResponse; string currentPathTree; Item parentDetails; JSONValue topLevelChildren; string nextLink; bool directoryFoundOnline = false; bool posixIssue = false; // Create a new API Instance for this thread and initialise it OneDriveApi queryOneDriveForSpecificPath; queryOneDriveForSpecificPath = new OneDriveApi(appConfig); queryOneDriveForSpecificPath.initialise(); foreach (thisFolderName; pathSplitter(thisNewPathToSearch)) { if (debugLogging) {addLogEntry("Testing for the existence online of this folder path: " ~ thisFolderName, ["debug"]);} directoryFoundOnline = false; // If this is '.' this is the account root if (thisFolderName == ".") { currentPathTree = thisFolderName; } else { currentPathTree = currentPathTree ~ "/" ~ thisFolderName; } // What path are we querying if (debugLogging) {addLogEntry("Attempting to query OneDrive for this path: " ~ currentPathTree, ["debug"]);} // What query do we use? if (thisFolderName == ".") { // Query the root, set the right details try { getPathDetailsAPIResponse = queryOneDriveForSpecificPath.getPathDetails(currentPathTree); parentDetails = makeItem(getPathDetailsAPIResponse); // Save item to the database saveItem(getPathDetailsAPIResponse); directoryFoundOnline = true; } catch (OneDriveException exception) { // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } else { // Ensure we have a valid driveId to search here if (parentDetails.driveId.empty) { parentDetails.driveId = appConfig.defaultDriveId; } // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { parentDetails.driveId = transformToLowerCase(parentDetails.driveId); } // If the prior JSON 'getPathDetailsAPIResponse' is on this account driveId .. then continue to use getPathDetails if (parentDetails.driveId == appConfig.defaultDriveId) { try { // Query OneDrive API for this path getPathDetailsAPIResponse = queryOneDriveForSpecificPath.getPathDetails(currentPathTree); // Portable Operating System Interface (POSIX) testing of JSON response from OneDrive API if (hasName(getPathDetailsAPIResponse)) { // Perform the POSIX evaluation test against the names if (performPosixTest(thisFolderName, getPathDetailsAPIResponse["name"].str)) { throw new PosixException(thisFolderName, getPathDetailsAPIResponse["name"].str); } } else { throw new JsonResponseException("Unable to perform POSIX test as the OneDrive API request generated an invalid JSON response"); } // No POSIX issue with requested path element parentDetails = makeItem(getPathDetailsAPIResponse); // Save item to the database saveItem(getPathDetailsAPIResponse); directoryFoundOnline = true; // Is this JSON a remote object if (debugLogging) {addLogEntry("Testing if this is a remote Shared Folder", ["debug"]);} if (isItemRemote(getPathDetailsAPIResponse)) { // Remote Directory .. need a DB Tie Record createDatabaseTieRecordForOnlineSharedFolder(parentDetails); // Temp DB Item to bind the 'remote' path to our parent path Item tempDBItem; // Set the name tempDBItem.name = parentDetails.name; // Set the correct item type tempDBItem.type = ItemType.dir; // Set the right elements using the 'remote' of the parent as the 'actual' for this DB Tie tempDBItem.driveId = parentDetails.remoteDriveId; tempDBItem.id = parentDetails.remoteId; // Set the correct mtime tempDBItem.mtime = parentDetails.mtime; // Update parentDetails to use this temp record parentDetails = tempDBItem; } } catch (OneDriveException exception) { if (exception.httpStatusCode == 404) { directoryFoundOnline = false; } else { // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } catch (PosixException e) { // Display POSIX error message displayPosixErrorMessage(e.msg); addLogEntry("ERROR: Requested directory to search for and potentially create has a 'case-insensitive match' to an existing directory on Microsoft OneDrive online."); addLogEntry("ERROR: To resolve, rename this local directory: " ~ currentPathTree); } catch (JsonResponseException e) { if (debugLogging) {addLogEntry(e.msg, ["debug"]);} } } else { // parentDetails.driveId is not the account drive id - thus will be a remote shared item if (debugLogging) {addLogEntry("This parent directory is a remote object this next path will be on a remote drive", ["debug"]);} // For this parentDetails.driveId, parentDetails.id object, query the OneDrive API for it's children while (true) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } // Query this remote object for its children topLevelChildren = queryOneDriveForSpecificPath.listChildren(parentDetails.driveId, parentDetails.id, nextLink); // Process each child foreach (child; topLevelChildren["value"].array) { // Is this child a folder? if (isItemFolder(child)) { // Is this the child folder we are looking for, and is a POSIX match? if (child["name"].str == thisFolderName) { // EXACT MATCH including case sensitivity: Flag that we found the folder online directoryFoundOnline = true; // Use these details for the next entry path getPathDetailsAPIResponse = child; parentDetails = makeItem(getPathDetailsAPIResponse); // Save item to the database saveItem(getPathDetailsAPIResponse); // No need to continue searching break; } else { string childAsLower = toLower(child["name"].str); string thisFolderNameAsLower = toLower(thisFolderName); try { if (childAsLower == thisFolderNameAsLower) { // This is a POSIX 'case in-sensitive match' ..... // Local item name has a 'case-insensitive match' to an existing item on OneDrive posixIssue = true; throw new PosixException(thisFolderName, child["name"].str); } } catch (PosixException e) { // Display POSIX error message displayPosixErrorMessage(e.msg); addLogEntry("ERROR: Requested directory to search for and potentially create has a 'case-insensitive match' to an existing directory on Microsoft OneDrive online."); addLogEntry("ERROR: To resolve, rename this local directory: " ~ currentPathTree); } } } } if (directoryFoundOnline) { // We found the folder, no need to continue searching nextLink data break; } // If a collection exceeds the default page size (200 items), the @odata.nextLink property is returned in the response // to indicate more items are available and provide the request URL for the next page of items. if ("@odata.nextLink" in topLevelChildren) { // Update nextLink to next changeSet bundle if (debugLogging) {addLogEntry("Setting nextLink to (@odata.nextLink): " ~ nextLink, ["debug"]);} nextLink = topLevelChildren["@odata.nextLink"].str; } else break; // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } } } // If we did not find the folder, we need to create this folder if (!directoryFoundOnline) { // Folder not found online // Set any response to be an invalid JSON item getPathDetailsAPIResponse = null; // Was there a POSIX issue? if (!posixIssue) { // No POSIX issue if (createPathIfMissing) { // Create this path as it is missing on OneDrive online and there is no POSIX issue with a 'case-insensitive match' if (debugLogging) { addLogEntry("FOLDER NOT FOUND ONLINE AND WE ARE REQUESTED TO CREATE IT", ["debug"]); addLogEntry("Create folder on this drive: " ~ parentDetails.driveId, ["debug"]); addLogEntry("Create folder as a child on this object: " ~ parentDetails.id, ["debug"]); addLogEntry("Create this folder name: " ~ thisFolderName, ["debug"]); } // Generate the JSON needed to create the folder online JSONValue newDriveItem = [ "name": JSONValue(thisFolderName), "folder": parseJSON("{}") ]; JSONValue createByIdAPIResponse; // Submit the creation request // Fix for https://github.com/skilion/onedrive/issues/356 if (!dryRun) { try { // Attempt to create a new folder on the configured parent driveId & parent id createByIdAPIResponse = queryOneDriveForSpecificPath.createById(parentDetails.driveId, parentDetails.id, newDriveItem); // Is the response a valid JSON object - validation checking done in saveItem saveItem(createByIdAPIResponse); // Set getPathDetailsAPIResponse to createByIdAPIResponse getPathDetailsAPIResponse = createByIdAPIResponse; } catch (OneDriveException e) { // 409 - API Race Condition if (e.httpStatusCode == 409) { // When we attempted to create it, OneDrive responded that it now already exists if (verboseLogging) {addLogEntry("OneDrive reported that " ~ thisFolderName ~ " already exists .. OneDrive API race condition", ["verbose"]);} } else { // some other error from OneDrive was returned - display what it is addLogEntry("OneDrive generated an error when creating this path: " ~ thisFolderName); displayOneDriveErrorMessage(e.msg, thisFunctionName); } } } else { // Simulate a successful 'directory create' & save it to the dryRun database copy // The simulated response has to pass 'makeItem' as part of saveItem auto fakeResponse = createFakeResponse(thisNewPathToSearch); // Save item to the database saveItem(fakeResponse); } } } } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory queryOneDriveForSpecificPath.releaseCurlEngine(); queryOneDriveForSpecificPath = null; // Perform Garbage Collection GC.collect(); // Output our search results if (debugLogging) {addLogEntry("queryOneDriveForSpecificPathAndCreateIfMissing.getPathDetailsAPIResponse = " ~ to!string(getPathDetailsAPIResponse), ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return JSON result return getPathDetailsAPIResponse; } // Delete an item by it's path // This function is only used in --monitor mode to remove a directory online void deleteByPath(string path) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // function variables Item dbItem; // Need to check all driveid's we know about, not just the defaultDriveId bool itemInDB = false; foreach (searchDriveId; onlineDriveDetails.keys) { if (itemDB.selectByPath(path, searchDriveId, dbItem)) { // item was found in the DB itemInDB = true; break; } } // Was the item found in the database? if (!itemInDB) { // path to delete is not in the local database .. // was this a --remove-directory attempt? if (!appConfig.getValueBool("monitor")) { // --remove-directory deletion attempt addLogEntry("The item to delete is not in the local database - unable to delete online"); return; } else { // normal use .. --monitor being used throw new SyncException("The item to delete is not in the local database"); } } // This needs to be enforced as we have to know the parent id of the object being deleted if (dbItem.parentId == null) { // the item is a remote folder, need to do the operation on the parent enforce(itemDB.selectByPathIncludingRemoteItems(path, appConfig.defaultDriveId, dbItem)); } try { if (noRemoteDelete) { // do not process remote delete if (verboseLogging) {addLogEntry("Skipping remote delete as --upload-only & --no-remote-delete configured", ["verbose"]);} } else { uploadDeletedItem(dbItem, path); } } catch (FileException e) { // filesystem generated an error message - display error message displayFileSystemErrorMessage(e.msg, thisFunctionName, path); } catch (OneDriveException e) { if (e.httpStatusCode == 404) { addLogEntry(e.msg); } else { // display what the error is displayOneDriveErrorMessage(e.msg, thisFunctionName); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Delete an item by it's path // Delete a directory on OneDrive without syncing. This function is only used with --remove-directory void deleteByPathNoSync(string path) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Attempt to delete the requested path within OneDrive without performing a sync addLogEntry("Attempting to delete the requested path within Microsoft OneDrive"); // function variables JSONValue getPathDetailsAPIResponse; OneDriveApi deleteByPathNoSyncAPIInstance; // test if the path we are going to exists on OneDrive try { // Create a new API Instance for this thread and initialise it deleteByPathNoSyncAPIInstance = new OneDriveApi(appConfig); deleteByPathNoSyncAPIInstance.initialise(); getPathDetailsAPIResponse = deleteByPathNoSyncAPIInstance.getPathDetails(path); // If we get here, no error, the path to delete exists online } catch (OneDriveException exception) { // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory deleteByPathNoSyncAPIInstance.releaseCurlEngine(); deleteByPathNoSyncAPIInstance = null; // Perform Garbage Collection GC.collect(); // Log that an error was generated if (debugLogging) {addLogEntry("deleteByPathNoSyncAPIInstance.getPathDetails(path) generated a OneDriveException", ["debug"]);} if (exception.httpStatusCode == 404) { // The directory was not found on OneDrive - no need to delete it addLogEntry("The requested directory to delete was not found on OneDrive - skipping removing the remote directory online as it does not exist"); return; } // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); return; } // Make a DB item from the JSON data that was returned via the API call Item deletionItem = makeItem(getPathDetailsAPIResponse); // Is the item to remove the correct type if (deletionItem.type == ItemType.dir) { // Item is a directory to remove // Log that the path | item was found, is a directory addLogEntry("The requested directory to delete was found on OneDrive - attempting deletion"); // Try the online deletion try { if (!permanentDelete) { // Perform the delete via the default OneDrive API instance deleteByPathNoSyncAPIInstance.deleteById(deletionItem.driveId, deletionItem.id); } else { // Perform the permanent delete via the default OneDrive API instance deleteByPathNoSyncAPIInstance.permanentDeleteById(deletionItem.driveId, deletionItem.id); } // If we get here without error, directory was deleted addLogEntry("The requested directory to delete online has been deleted"); } catch (OneDriveException exception) { // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } else { // --remove-directory is for removing directories // Log that the path | item was found, is a directory addLogEntry("The requested path to delete is not a directory - aborting deletion attempt"); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory deleteByPathNoSyncAPIInstance.releaseCurlEngine(); deleteByPathNoSyncAPIInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_move // This function is only called in monitor mode when an move event is coming from // inotify and we try to move the item. void uploadMoveItem(string oldPath, string newPath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Log that we are doing a move addLogEntry("Moving " ~ oldPath ~ " to " ~ newPath); // Is this move unwanted? bool unwanted = false; // Item variables Item oldItem, newItem, parentItem; // This not a Client Side Filtering check, nor a Microsoft Check, but is a sanity check that the path provided is UTF encoded correctly // Check the std.encoding of the path against: Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252 if (!unwanted) { if(!isValid(newPath)) { // Path is not valid according to https://dlang.org/phobos/std_encoding.html addLogEntry("Skipping item - invalid character encoding sequence: " ~ newPath, ["info", "notify"]); unwanted = true; } } // Check this path against the Client Side Filtering Rules // - check_nosync // - skip_dotfiles // - skip_symlinks // - skip_file // - skip_dir // - sync_list // - skip_size if (!unwanted) { unwanted = checkPathAgainstClientSideFiltering(newPath); } // Check this path against the Microsoft Naming Conventions & Restrictions // - Check path against Microsoft OneDrive restriction and limitations about Windows naming for files and folders // - Check path for bad whitespace items // - Check path for HTML ASCII Codes // - Check path for ASCII Control Codes if (!unwanted) { unwanted = checkPathAgainstMicrosoftNamingRestrictions(newPath); } // 'newPath' has passed client side filtering validation if (!unwanted) { if (!itemDB.selectByPath(oldPath, appConfig.defaultDriveId, oldItem)) { // The old path|item is not synced with the database, upload as a new file addLogEntry("Moved local item was not in-sync with local database - uploading as new item"); scanLocalFilesystemPathForNewData(newPath); return; } if (oldItem.parentId == null) { // the item is a remote folder, need to do the operation on the parent enforce(itemDB.selectByPathIncludingRemoteItems(oldPath, appConfig.defaultDriveId, oldItem)); } if (itemDB.selectByPath(newPath, appConfig.defaultDriveId, newItem)) { // the destination has been overwritten addLogEntry("Moved local item overwrote an existing item - deleting old online item"); uploadDeletedItem(newItem, newPath); } if (!itemDB.selectByPath(dirName(newPath), appConfig.defaultDriveId, parentItem)) { // the parent item is not in the database throw new SyncException("Can't move an item to an unsynchronised directory"); } if (oldItem.driveId != parentItem.driveId) { // items cannot be moved between drives uploadDeletedItem(oldItem, oldPath); // what sort of move is this? if (isFile(newPath)) { // newPath is a file uploadNewFile(newPath); } else { // newPath is a directory scanLocalFilesystemPathForNewData(newPath); } } else { if (!exists(newPath)) { // is this --monitor use? if (appConfig.getValueBool("monitor")) { if (verboseLogging) {addLogEntry("uploadMoveItem target has disappeared: " ~ newPath, ["verbose"]);} return; } } // Configure the modification JSON item SysTime mtime; if (appConfig.getValueBool("monitor")) { // Use the newPath modified timestamp mtime = timeLastModified(newPath).toUTC(); } else { // Use the current system time mtime = Clock.currTime().toUTC(); } JSONValue data = [ "name": JSONValue(baseName(newPath)), "parentReference": JSONValue([ "id": parentItem.id ]), "fileSystemInfo": JSONValue([ "lastModifiedDateTime": mtime.toISOExtString() ]) ]; // Perform the move operation on OneDrive bool isMoveSuccess = false; JSONValue response; string eTag = oldItem.eTag; // Create a new API Instance for this thread and initialise it OneDriveApi movePathOnlineApiInstance; movePathOnlineApiInstance = new OneDriveApi(appConfig); movePathOnlineApiInstance.initialise(); // Try the online move for (int i = 0; i < 3; i++) { try { response = movePathOnlineApiInstance.updateById(oldItem.driveId, oldItem.id, data, eTag); isMoveSuccess = true; break; } catch (OneDriveException e) { // Handle a 412 - A precondition provided in the request (such as an if-match header) does not match the resource's current state. if (e.httpStatusCode == 412) { // OneDrive threw a 412 error, most likely: ETag does not match current item's value // Retry without eTag if (debugLogging) {addLogEntry("File Move Failed - OneDrive eTag / cTag match issue", ["debug"]);} if (verboseLogging) {addLogEntry("OneDrive returned a 'HTTP 412 - Precondition Failed' when attempting to move the file - gracefully handling error", ["verbose"]);} eTag = null; // Retry to move the file but without the eTag, via the for() loop } else if (e.httpStatusCode == 409) { // Destination item already exists and is a conflict, delete existing item first addLogEntry("Moved local item will overwrite an existing online item - deleting old online item first"); uploadDeletedItem(newItem, newPath); } else break; } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory movePathOnlineApiInstance.releaseCurlEngine(); movePathOnlineApiInstance = null; // Perform Garbage Collection GC.collect(); // Save the move response from OneDrive in the database if (isMoveSuccess && response.type() == JSONType.object) { saveItem(response); } else { // Log why we are not saving if (debugLogging) {addLogEntry("uploadMoveItem: skipping saveItem() (no JSON payload returned or move not successful)", ["debug"]);} } } } else { // Moved item is unwanted addLogEntry("Item has been moved to a location that is excluded from sync operations. Removing item from OneDrive"); uploadDeletedItem(oldItem, oldPath); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Perform integrity validation of the file that was uploaded bool performUploadIntegrityValidationChecks(JSONValue uploadResponse, string localFilePath, long localFileSize) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } bool integrityValid = false; if (!disableUploadValidation) { // Integrity validation has not been disabled (this is the default so we are always integrity checking our uploads) if (uploadResponse.type() == JSONType.object) { // Provided JSON is a valid JSON long uploadFileSize; string uploadFileHash; string localFileHash; // Regardless if valid JSON is responded with, 'size' and 'quickXorHash' must be present if (hasFileSize(uploadResponse) && hasQuickXorHash(uploadResponse)) { uploadFileSize = uploadResponse["size"].integer; uploadFileHash = uploadResponse["file"]["hashes"]["quickXorHash"].str; localFileHash = computeQuickXorHash(localFilePath); } else { if (verboseLogging) { addLogEntry("Online file validation unable to be performed: input JSON whilst valid did not contain data which could be validated", ["verbose"]); addLogEntry("WARNING: Skipping upload integrity check for: " ~ localFilePath, ["verbose"]); } return integrityValid; } // compare values if ((localFileSize == uploadFileSize) && (localFileHash == uploadFileHash)) { // Uploaded file integrity intact if (debugLogging) {addLogEntry("Uploaded local file matches reported online size and hash values", ["debug"]);} // set to true and return integrityValid = true; return integrityValid; } else { // Upload integrity failure .. what failed? // There are 2 scenarios where this happens: // 1. Failed Transfer // 2. Upload file is going to a SharePoint Site, where Microsoft enriches the file with additional metadata with no way to disable addLogEntry("WARNING: Online file integrity failure for: " ~ localFilePath, ["info", "notify"]); // What integrity failed - size? if (localFileSize != uploadFileSize) { if (verboseLogging) {addLogEntry("WARNING: Online file integrity failure - Size Mismatch", ["verbose"]);} } // What integrity failed - hash? if (localFileHash != uploadFileHash) { if (verboseLogging) {addLogEntry("WARNING: Online file integrity failure - Hash Mismatch", ["verbose"]);} } // What account type is this? if (appConfig.accountType != "personal") { // Not a personal account, thus the integrity failure is most likely due to SharePoint if (verboseLogging) { addLogEntry("CAUTION: When you upload files to Microsoft OneDrive that uses SharePoint as its backend, Microsoft OneDrive will alter your files post upload.", ["verbose"]); addLogEntry("CAUTION: This will lead to technical differences between the version stored online and your local original file, potentially causing issues with the accuracy or consistency of your data.", ["verbose"]); addLogEntry("CAUTION: Please refer to https://github.com/OneDrive/onedrive-api-docs/issues/935 for further details.", ["verbose"]); } } // How can this be disabled? addLogEntry("To disable the integrity checking of uploaded files use --disable-upload-validation"); } } else { if (verboseLogging) { addLogEntry("Online file validation unable to be performed: input JSON whilst valid did not contain data which could be validated", ["verbose"]); addLogEntry("WARNING: Skipping upload integrity check for: " ~ localFilePath, ["verbose"]); } } } else { // Skipping upload integrity check, do not notify the user via the GUI ... they have explicitly disabled upload validation if (verboseLogging) {addLogEntry("WARNING: Skipping upload integrity check for: " ~ localFilePath, ["verbose"]);} // We are bypassing integrity checks due to --disable-upload-validation if (debugLogging) { addLogEntry("Online file validation disabled due to --disable-upload-validation", ["debug"]); addLogEntry("- Assuming file integrity is OK and valid", ["debug"]); } // Ensure we return 'true', but this is in a false sense, as we are skipping the integrity check, so we assume the file is good integrityValid = true; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Is the file integrity online valid? return integrityValid; } // Query Office 365 SharePoint Shared Library site name to obtain it's Drive ID void querySiteCollectionForDriveID(string sharepointLibraryNameToQuery) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Steps to get the ID: // 1. Query https://graph.microsoft.com/v1.0/sites?search= with the name entered // 2. Evaluate the response. A valid response will contain the description and the id. If the response comes back with nothing, the site name cannot be found or no access // 3. If valid, use the returned ID and query the site drives // https://graph.microsoft.com/v1.0/sites//drives // 4. Display Shared Library Name & Drive ID string site_id; string drive_id; bool found = false; JSONValue siteQuery; string nextLink; string[] siteSearchResults; // Create a new API Instance for this thread and initialise it OneDriveApi querySharePointLibraryNameApiInstance; querySharePointLibraryNameApiInstance = new OneDriveApi(appConfig); querySharePointLibraryNameApiInstance.initialise(); // The account type must not be a personal account type if (appConfig.accountType == "personal") { addLogEntry("ERROR: A OneDrive Personal Account cannot be used with --get-sharepoint-drive-id. Please re-authenticate your client using a OneDrive Business Account."); return; } // What query are we performing? addLogEntry(); addLogEntry("Office 365 Library Name Query: " ~ sharepointLibraryNameToQuery); while (true) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } try { siteQuery = querySharePointLibraryNameApiInstance.o365SiteSearch(nextLink); } catch (OneDriveException e) { addLogEntry("ERROR: Query of OneDrive for Office 365 Library Name failed"); // Forbidden - most likely authentication scope needs to be updated if (e.httpStatusCode == 403) { addLogEntry("ERROR: Authentication scope needs to be updated. Use --reauth and re-authenticate client."); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory querySharePointLibraryNameApiInstance.releaseCurlEngine(); querySharePointLibraryNameApiInstance = null; // Perform Garbage Collection GC.collect(); return; } // Requested resource cannot be found if (e.httpStatusCode == 404) { string siteSearchUrl; if (nextLink.empty) { siteSearchUrl = querySharePointLibraryNameApiInstance.getSiteSearchUrl(); } else { siteSearchUrl = nextLink; } // log the error addLogEntry("ERROR: Your OneDrive Account and Authentication Scope cannot access this OneDrive API: " ~ siteSearchUrl); addLogEntry("ERROR: To resolve, please discuss this issue with whomever supports your OneDrive and SharePoint environment."); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory querySharePointLibraryNameApiInstance.releaseCurlEngine(); querySharePointLibraryNameApiInstance = null; // Perform Garbage Collection GC.collect(); return; } // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(e.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory querySharePointLibraryNameApiInstance.releaseCurlEngine(); querySharePointLibraryNameApiInstance = null; // Perform Garbage Collection GC.collect(); return; } // is siteQuery a valid JSON object & contain data we can use? if ((siteQuery.type() == JSONType.object) && ("value" in siteQuery)) { // valid JSON object if (debugLogging) {addLogEntry("O365 Query Response: " ~ to!string(siteQuery), ["debug"]);} foreach (searchResult; siteQuery["value"].array) { // Need an 'exclusive' match here with sharepointLibraryNameToQuery as entered if (debugLogging) {addLogEntry("Found O365 Site: " ~ to!string(searchResult), ["debug"]);} // 'displayName' and 'id' have to be present in the search result record in order to query the site if (("displayName" in searchResult) && ("id" in searchResult)) { if (sharepointLibraryNameToQuery == searchResult["displayName"].str){ // 'displayName' matches search request site_id = searchResult["id"].str; JSONValue siteDriveQuery; string nextLinkDrive; while (true) { try { siteDriveQuery = querySharePointLibraryNameApiInstance.o365SiteDrives(site_id, nextLinkDrive); } catch (OneDriveException e) { addLogEntry("ERROR: Query of OneDrive for Office Site ID failed"); // display what the error is displayOneDriveErrorMessage(e.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory querySharePointLibraryNameApiInstance.releaseCurlEngine(); querySharePointLibraryNameApiInstance = null; // Perform Garbage Collection GC.collect(); return; } // is siteDriveQuery a valid JSON object & contain data we can use? if ((siteDriveQuery.type() == JSONType.object) && ("value" in siteDriveQuery)) { // valid JSON object foreach (driveResult; siteDriveQuery["value"].array) { // Display results found = true; addLogEntry("-----------------------------------------------"); if (debugLogging) {addLogEntry("Site Details: " ~ to!string(driveResult), ["debug"]);} addLogEntry("Site Name: " ~ searchResult["displayName"].str); addLogEntry("Library Name: " ~ driveResult["name"].str); addLogEntry("drive_id: " ~ driveResult["id"].str); addLogEntry("Library URL: " ~ driveResult["webUrl"].str); } // If a collection exceeds the default page size (200 items), the @odata.nextLink property is returned in the response // to indicate more items are available and provide the request URL for the next page of items. if ("@odata.nextLink" in siteDriveQuery) { // Update nextLink to next set of SharePoint library names nextLinkDrive = siteDriveQuery["@odata.nextLink"].str; if (debugLogging) {addLogEntry("Setting nextLinkDrive to (@odata.nextLink): " ~ nextLinkDrive, ["debug"]);} // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } else { // closeout addLogEntry("-----------------------------------------------"); break; } } else { // not a valid JSON object addLogEntry("ERROR: There was an error performing this operation on Microsoft OneDrive"); addLogEntry("ERROR: Increase logging verbosity to assist determining why."); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory querySharePointLibraryNameApiInstance.releaseCurlEngine(); querySharePointLibraryNameApiInstance = null; // Perform Garbage Collection GC.collect(); return; } } } } else { // 'displayName', 'id' or ''webUrl' not present in JSON results for a specific site string siteNameAvailable = "Site 'name' was restricted by OneDrive API permissions"; bool displayNameAvailable = false; bool idAvailable = false; if ("name" in searchResult) siteNameAvailable = searchResult["name"].str; if ("displayName" in searchResult) displayNameAvailable = true; if ("id" in searchResult) idAvailable = true; // Display error details for this site data addLogEntry(); addLogEntry("ERROR: SharePoint Site details not provided for: " ~ siteNameAvailable); addLogEntry("ERROR: The SharePoint Site results returned from OneDrive API do not contain the required items to match. Please check your permissions with your site administrator."); addLogEntry("ERROR: Your site security settings is preventing the following details from being accessed: 'displayName' or 'id'"); if (verboseLogging) { addLogEntry(" - Is 'displayName' available = " ~ to!string(displayNameAvailable), ["verbose"]); addLogEntry(" - Is 'id' available = " ~ to!string(idAvailable), ["verbose"]); } addLogEntry("ERROR: To debug this further, please increase application output verbosity to provide further insight as to what details are actually being returned."); } } if(!found) { // The SharePoint site we are searching for was not found in this bundle set // Add to siteSearchResults so we can display what we did find string siteSearchResultsEntry; foreach (searchResult; siteQuery["value"].array) { // We can only add the displayName if it is available if ("displayName" in searchResult) { // Use the displayName siteSearchResultsEntry = " * " ~ searchResult["displayName"].str; siteSearchResults ~= siteSearchResultsEntry; } else { // Add, but indicate displayName unavailable, use id if ("id" in searchResult) { siteSearchResultsEntry = " * " ~ "Unknown displayName (Data not provided by API), Site ID: " ~ searchResult["id"].str; siteSearchResults ~= siteSearchResultsEntry; } else { // displayName and id unavailable, display in debug log the entry if (debugLogging) {addLogEntry("Bad SharePoint Data for site: " ~ to!string(searchResult), ["debug"]);} } } } } } else { // not a valid JSON object addLogEntry("ERROR: There was an error performing this operation on Microsoft OneDrive"); addLogEntry("ERROR: Increase logging verbosity to assist determining why."); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory querySharePointLibraryNameApiInstance.releaseCurlEngine(); querySharePointLibraryNameApiInstance = null; // Perform Garbage Collection GC.collect(); return; } // If a collection exceeds the default page size (200 items), the @odata.nextLink property is returned in the response // to indicate more items are available and provide the request URL for the next page of items. if ("@odata.nextLink" in siteQuery) { // Update nextLink to next set of SharePoint library names nextLink = siteQuery["@odata.nextLink"].str; if (debugLogging) {addLogEntry("Setting nextLink to (@odata.nextLink): " ~ nextLink, ["debug"]);} } else break; // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } // Was the intended target found? if(!found) { // Was the search a wildcard? if (sharepointLibraryNameToQuery != "*") { // Only print this out if the search was not a wildcard addLogEntry(); addLogEntry("ERROR: The requested SharePoint site could not be found. Please check it's name and your permissions to access the site."); } // List all sites returned to assist user addLogEntry(); addLogEntry("The following SharePoint site names were returned:"); foreach (searchResultEntry; siteSearchResults) { // list the display name that we use to match against the user query addLogEntry(searchResultEntry); } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory querySharePointLibraryNameApiInstance.releaseCurlEngine(); querySharePointLibraryNameApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Query the sync status of the client and the local system void queryOneDriveForSyncStatus(string pathToQueryStatusOn) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Query the account driveId and rootId to get the /delta JSON information // Process that JSON data for relevancy // Function variables long downloadSize = 0; string deltaLink = null; string driveIdToQuery = appConfig.defaultDriveId; string itemIdToQuery = appConfig.defaultRootId; JSONValue deltaChanges; // Array of JSON items JSONValue[] jsonItemsArray; // Query Database for a potential deltaLink starting point deltaLink = itemDB.getDeltaLink(driveIdToQuery, itemIdToQuery); // Log what we are doing addProcessingLogHeaderEntry("Querying the change status of Drive ID: " ~ driveIdToQuery, appConfig.verbosityCount); // Create a new API Instance for querying the actual /delta and initialise it OneDriveApi getDeltaDataOneDriveApiInstance; getDeltaDataOneDriveApiInstance = new OneDriveApi(appConfig); getDeltaDataOneDriveApiInstance.initialise(); while (true) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } // Add a processing '.' if (appConfig.verbosityCount == 0) { addProcessingDotEntry(); } // Get the /delta changes via the OneDrive API // getDeltaChangesByItemId has the re-try logic for transient errors deltaChanges = getDeltaChangesByItemId(driveIdToQuery, itemIdToQuery, deltaLink, getDeltaDataOneDriveApiInstance); // If the initial deltaChanges response is an invalid JSON object, keep trying until we get a valid response .. if (deltaChanges.type() != JSONType.object) { // While the response is not a JSON Object or the Exit Handler has not been triggered while (deltaChanges.type() != JSONType.object) { // Handle the invalid JSON response and retry if (debugLogging) {addLogEntry("ERROR: Query of the OneDrive API via deltaChanges = getDeltaChangesByItemId() returned an invalid JSON response", ["debug"]);} deltaChanges = getDeltaChangesByItemId(driveIdToQuery, itemIdToQuery, deltaLink, getDeltaDataOneDriveApiInstance); } } // We have a valid deltaChanges JSON array. This means we have at least 200+ JSON items to process. // The API response however cannot be run in parallel as the OneDrive API sends the JSON items in the order in which they must be processed foreach (onedriveJSONItem; deltaChanges["value"].array) { // is the JSON a root object - we dont want to count this if (!isItemRoot(onedriveJSONItem)) { // Files are the only item that we want to calculate if (isItemFile(onedriveJSONItem)) { // JSON item is a file // Is the item filtered out due to client side filtering rules? if (!checkJSONAgainstClientSideFiltering(onedriveJSONItem)) { // Is the path of this JSON item 'in-scope' or 'out-of-scope' ? if (pathToQueryStatusOn != "/") { // We need to check the path of this item against pathToQueryStatusOn string thisItemPath = ""; if (("path" in onedriveJSONItem["parentReference"]) != null) { // If there is a parent reference path, try and use it string selfBuiltPath = onedriveJSONItem["parentReference"]["path"].str ~ "/" ~ onedriveJSONItem["name"].str; // Check for ':' and split if present auto splitIndex = selfBuiltPath.indexOf(":"); if (splitIndex != -1) { // Keep only the part after ':' selfBuiltPath = selfBuiltPath[splitIndex + 1 .. $]; } // Set thisItemPath to the self built path thisItemPath = selfBuiltPath; } else { // no parent reference path available thisItemPath = onedriveJSONItem["name"].str; } // can we find 'pathToQueryStatusOn' in 'thisItemPath' ? if (canFind(thisItemPath, pathToQueryStatusOn)) { // Add this to the array for processing jsonItemsArray ~= onedriveJSONItem; } } else { // We are not doing a --single-directory check // Add this to the array for processing jsonItemsArray ~= onedriveJSONItem; } } } } } // The response may contain either @odata.deltaLink or @odata.nextLink if ("@odata.deltaLink" in deltaChanges) { deltaLink = deltaChanges["@odata.deltaLink"].str; if (debugLogging) {addLogEntry("Setting next deltaLink to (@odata.deltaLink): " ~ deltaLink, ["debug"]);} } // Update deltaLink to next changeSet bundle if ("@odata.nextLink" in deltaChanges) { deltaLink = deltaChanges["@odata.nextLink"].str; if (debugLogging) {addLogEntry("Setting next deltaLink to (@odata.nextLink): " ~ deltaLink, ["debug"]);} } else break; // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } // Terminate getDeltaDataOneDriveApiInstance here getDeltaDataOneDriveApiInstance.releaseCurlEngine(); getDeltaDataOneDriveApiInstance = null; // Perform Garbage Collection on this destroyed curl engine GC.collect(); // Needed after printing out '....' when fetching changes from OneDrive API if (appConfig.verbosityCount == 0) { completeProcessingDots(); } // Are there any JSON items to process? if (count(jsonItemsArray) != 0) { // There are items to process foreach (onedriveJSONItem; jsonItemsArray.array) { // variables we need string thisItemParentDriveId; string thisItemId; string thisItemHash; bool existingDBEntry = false; // Is this file a remote item (on a shared folder) ? if (isItemRemote(onedriveJSONItem)) { // remote drive item thisItemParentDriveId = onedriveJSONItem["remoteItem"]["parentReference"]["driveId"].str; thisItemId = onedriveJSONItem["id"].str; } else { // standard drive item thisItemParentDriveId = onedriveJSONItem["parentReference"]["driveId"].str; thisItemId = onedriveJSONItem["id"].str; } // Get the file hash if (hasHashes(onedriveJSONItem)) { // At a minimum we require 'quickXorHash' to exist if (hasQuickXorHash(onedriveJSONItem)) { // JSON item has a hash we can use thisItemHash = onedriveJSONItem["file"]["hashes"]["quickXorHash"].str; } // Check if the item has been seen before Item existingDatabaseItem; existingDBEntry = itemDB.selectById(thisItemParentDriveId, thisItemId, existingDatabaseItem); if (existingDBEntry) { // item exists in database .. do the database details match the JSON record? if (existingDatabaseItem.quickXorHash != thisItemHash) { // file hash is different, this will trigger a download event if (hasFileSize(onedriveJSONItem)) { downloadSize = downloadSize + onedriveJSONItem["size"].integer; } } } else { // item does not exist in the database // this item has already passed client side filtering rules (skip_dir, skip_file, sync_list) // this will trigger a download event if (hasFileSize(onedriveJSONItem)) { downloadSize = downloadSize + onedriveJSONItem["size"].integer; } } } } } // Was anything detected that would constitute a download? if (downloadSize > 0) { // we have something to download if (pathToQueryStatusOn != "/") { addLogEntry("The selected local directory via --single-directory is out of sync with Microsoft OneDrive"); } else { addLogEntry("The configured local 'sync_dir' directory is out of sync with Microsoft OneDrive"); } addLogEntry("Approximate data to download from Microsoft OneDrive: " ~ to!string(downloadSize/1024) ~ " KB"); } else { // No changes were returned addLogEntry("There are no pending changes from Microsoft OneDrive; your local directory matches the data online."); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Query OneDrive for file details of a given path, returning either the 'webURL' or 'lastModifiedBy' JSON facet void queryOneDriveForFileDetails(string inputFilePath, string runtimePath, string outputType) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } OneDriveApi queryOneDriveForFileDetailsApiInstance; // Calculate the full local file path string fullLocalFilePath = buildNormalizedPath(buildPath(runtimePath, inputFilePath)); // Query if file is valid locally if (exists(fullLocalFilePath)) { // search drive_id list string[] distinctDriveIds = itemDB.selectDistinctDriveIds(); bool pathInDB = false; Item dbItem; foreach (searchDriveId; distinctDriveIds) { // Does this path exist in the database, use the 'inputFilePath' if (itemDB.selectByPath(inputFilePath, searchDriveId, dbItem)) { // item is in the database pathInDB = true; JSONValue fileDetailsFromOneDrive; // Create a new API Instance for this thread and initialise it queryOneDriveForFileDetailsApiInstance = new OneDriveApi(appConfig); queryOneDriveForFileDetailsApiInstance.initialise(); try { fileDetailsFromOneDrive = queryOneDriveForFileDetailsApiInstance.getPathDetailsById(dbItem.driveId, dbItem.id); // Dont cleanup here as if we are creating a shareable file link (below) it is still needed } catch (OneDriveException exception) { // display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory queryOneDriveForFileDetailsApiInstance.releaseCurlEngine(); queryOneDriveForFileDetailsApiInstance = null; // Perform Garbage Collection GC.collect(); return; } // Is the API response a valid JSON file? if (fileDetailsFromOneDrive.type() == JSONType.object) { // debug output of response if (debugLogging) {addLogEntry("API Response: " ~ to!string(fileDetailsFromOneDrive), ["debug"]);} // What sort of response to we generate // --get-file-link response if (outputType == "URL") { if ((fileDetailsFromOneDrive.type() == JSONType.object) && ("webUrl" in fileDetailsFromOneDrive)) { // Valid JSON object addLogEntry(); writeln("WebURL: ", fileDetailsFromOneDrive["webUrl"].str); } } // --modified-by response if (outputType == "ModifiedBy") { if ((fileDetailsFromOneDrive.type() == JSONType.object) && ("lastModifiedBy" in fileDetailsFromOneDrive)) { // Valid JSON object writeln(); writeln("Last modified: ", fileDetailsFromOneDrive["lastModifiedDateTime"].str); writeln("Last modified by: ", fileDetailsFromOneDrive["lastModifiedBy"]["user"]["displayName"].str); // if 'email' provided, add this to the output if ("email" in fileDetailsFromOneDrive["lastModifiedBy"]["user"]) { writeln("Email Address: ", fileDetailsFromOneDrive["lastModifiedBy"]["user"]["email"].str); } } } // --create-share-link response if (outputType == "ShareableLink") { JSONValue accessScope; JSONValue createShareableLinkResponse; string thisDriveId = fileDetailsFromOneDrive["parentReference"]["driveId"].str; string thisItemId = fileDetailsFromOneDrive["id"].str; string fileShareLink; bool writeablePermissions = appConfig.getValueBool("with_editing_perms"); // What sort of shareable link is required? if (writeablePermissions) { // configure the read-write access scope accessScope = [ "type": "edit", "scope": "anonymous" ]; } else { // configure the read-only access scope (default) accessScope = [ "type": "view", "scope": "anonymous" ]; } // If a share-password was passed use it when creating the link if (strip(appConfig.getValueString("share_password")) != "") { accessScope["password"] = appConfig.getValueString("share_password"); } // Try and create the shareable file link try { createShareableLinkResponse = queryOneDriveForFileDetailsApiInstance.createShareableLink(thisDriveId, thisItemId, accessScope); } catch (OneDriveException exception) { // display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); return; } // Is the API response a valid JSON file? if ((createShareableLinkResponse.type() == JSONType.object) && ("link" in createShareableLinkResponse)) { // Extract the file share link from the JSON response fileShareLink = createShareableLinkResponse["link"]["webUrl"].str; writeln("File Shareable Link: ", fileShareLink); if (writeablePermissions) { writeln("Shareable Link has read-write permissions - use and provide with caution"); } } } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory queryOneDriveForFileDetailsApiInstance.releaseCurlEngine(); queryOneDriveForFileDetailsApiInstance = null; // Perform Garbage Collection GC.collect(); } } // was path found? if (!pathInDB) { // File has not been synced with OneDrive addLogEntry("Selected path has not been synced with Microsoft OneDrive: " ~ inputFilePath); } } else { // File does not exist locally addLogEntry("Selected path not found on local system: " ~ inputFilePath); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Query OneDrive for the quota details void queryOneDriveForQuotaDetails() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // This function is similar to getRemainingFreeSpace() but is different in data being analysed and output method JSONValue currentDriveQuota; string driveId; OneDriveApi getCurrentDriveQuotaApiInstance; if (appConfig.getValueString("drive_id").length) { driveId = appConfig.getValueString("drive_id"); } else { driveId = appConfig.defaultDriveId; } try { // Create a new OneDrive API instance getCurrentDriveQuotaApiInstance = new OneDriveApi(appConfig); getCurrentDriveQuotaApiInstance.initialise(); if (debugLogging) {addLogEntry("Seeking available quota for this drive id: " ~ driveId, ["debug"]);} currentDriveQuota = getCurrentDriveQuotaApiInstance.getDriveQuota(driveId); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory getCurrentDriveQuotaApiInstance.releaseCurlEngine(); getCurrentDriveQuotaApiInstance = null; // Perform Garbage Collection GC.collect(); } catch (OneDriveException e) { if (debugLogging) {addLogEntry("currentDriveQuota = onedrive.getDriveQuota(driveId) generated a OneDriveException", ["debug"]);} // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory getCurrentDriveQuotaApiInstance.releaseCurlEngine(); getCurrentDriveQuotaApiInstance = null; // Perform Garbage Collection GC.collect(); } // validate that currentDriveQuota is a JSON value if (currentDriveQuota.type() == JSONType.object) { // was 'quota' in response? if ("quota" in currentDriveQuota) { // debug output of response if (debugLogging) {addLogEntry("currentDriveQuota: " ~ to!string(currentDriveQuota), ["debug"]);} // human readable output of response string deletedValue = "Not Provided"; string remainingValue = "Not Provided"; string stateValue = "Not Provided"; string totalValue = "Not Provided"; string usedValue = "Not Provided"; // Update values if ("deleted" in currentDriveQuota["quota"]) { deletedValue = byteToGibiByte(currentDriveQuota["quota"]["deleted"].integer); } if ("remaining" in currentDriveQuota["quota"]) { remainingValue = byteToGibiByte(currentDriveQuota["quota"]["remaining"].integer); } if ("state" in currentDriveQuota["quota"]) { stateValue = currentDriveQuota["quota"]["state"].str; } if ("total" in currentDriveQuota["quota"]) { totalValue = byteToGibiByte(currentDriveQuota["quota"]["total"].integer); } if ("used" in currentDriveQuota["quota"]) { usedValue = byteToGibiByte(currentDriveQuota["quota"]["used"].integer); } writeln("Microsoft OneDrive quota information as reported for this Drive ID: ", driveId); writeln(); writeln("Deleted: ", deletedValue, " GB (", currentDriveQuota["quota"]["deleted"].integer, " bytes)"); writeln("Remaining: ", remainingValue, " GB (", currentDriveQuota["quota"]["remaining"].integer, " bytes)"); writeln("State: ", stateValue); writeln("Total: ", totalValue, " GB (", currentDriveQuota["quota"]["total"].integer, " bytes)"); writeln("Used: ", usedValue, " GB (", currentDriveQuota["quota"]["used"].integer, " bytes)"); writeln(); } else { writeln("Microsoft OneDrive quota information is being restricted for this Drive ID: ", driveId); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Query the system for session_upload.* files bool checkForInterruptedSessionUploads() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } bool interruptedUploads = false; long interruptedUploadsCount; // Scan the filesystem for the files we are interested in, build up interruptedUploadsSessionFiles array foreach (sessionFile; dirEntries(appConfig.configDirName, "session_upload.*", SpanMode.shallow)) { // calculate the full path string tempPath = buildNormalizedPath(buildPath(appConfig.configDirName, sessionFile)); // add to array interruptedUploadsSessionFiles ~= [tempPath]; } // Count all 'session_upload' files in appConfig.configDirName interruptedUploadsCount = count(interruptedUploadsSessionFiles); if (interruptedUploadsCount != 0) { interruptedUploads = true; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return if there are interrupted uploads to process return interruptedUploads; } // Query the system for resume_download.* files bool checkForResumableDownloads() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } bool resumableDownloads = false; long resumableDownloadsCount; // Scan the filesystem for the files we are interested in, build up interruptedDownloadFiles array foreach (resumeDownloadFile; dirEntries(appConfig.configDirName, "resume_download.*", SpanMode.shallow)) { // calculate the full path string tempPath = buildNormalizedPath(buildPath(appConfig.configDirName, resumeDownloadFile)); // add to array interruptedDownloadFiles ~= [tempPath]; } // Count all 'resume_download' files in appConfig.configDirName resumableDownloadsCount = count(interruptedDownloadFiles); if (resumableDownloadsCount != 0) { resumableDownloads = true; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return if there are interrupted uploads to process return resumableDownloads; } // Clear any session_upload.* files void clearInterruptedSessionUploads() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Scan the filesystem for the files we are interested in, build up interruptedUploadsSessionFiles array foreach (sessionFile; dirEntries(appConfig.configDirName, "session_upload.*", SpanMode.shallow)) { // calculate the full path string tempPath = buildNormalizedPath(buildPath(appConfig.configDirName, sessionFile)); JSONValue sessionFileData = readText(tempPath).parseJSON(); addLogEntry("Removing interrupted session upload file due to --resync for: " ~ sessionFileData["localPath"].str, ["info"]); // Process removal if (!dryRun) { safeRemove(tempPath); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Clear any resume_download.* files void clearInterruptedDownloads() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Scan the filesystem for the files we are interested in, build up interruptedDownloadFiles array foreach (resumeDownloadFile; dirEntries(appConfig.configDirName, "resume_download.*", SpanMode.shallow)) { // calculate the full path string tempPath = buildNormalizedPath(buildPath(appConfig.configDirName, resumeDownloadFile)); JSONValue resumeFileData = readText(tempPath).parseJSON(); addLogEntry("Removing interrupted download file due to --resync for: " ~ resumeFileData["originalFilename"].str, ["info"]); string resumeFilename = resumeFileData["downloadFilename"].str; // Process removal if (!dryRun) { // remove the .partial file safeRemove(resumeFilename); // remove the resume_download. file safeRemove(tempPath); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Process interrupted 'session_upload' files void processInterruptedSessionUploads() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // For each upload_session file that has been found, process the data to ensure it is still valid foreach (sessionFilePath; interruptedUploadsSessionFiles) { // What session data are we trying to restore if (verboseLogging) {addLogEntry("Attempting to restore file upload session using this session data file: " ~ sessionFilePath, ["verbose"]);} // Does this pass validation? if (!validateUploadSessionFileData(sessionFilePath)) { // Remove upload_session file as it is invalid // upload_session file contains an error - cant resume this session if (verboseLogging) {addLogEntry("Restore file upload session failed - cleaning up resumable session data file: " ~ sessionFilePath, ["verbose"]);} // cleanup session path if (exists(sessionFilePath)) { if (!dryRun) { safeRemove(sessionFilePath); } } } } // At this point we should have an array of JSON items to resume uploading if (count(jsonItemsToResumeUpload) > 0) { // there are valid items to resume upload // Lets deal with all the JSON items that need to be resumed for upload in a batch process size_t batchSize = to!int(appConfig.getValueLong("threads")); long batchCount = (jsonItemsToResumeUpload.length + batchSize - 1) / batchSize; long batchesProcessed = 0; foreach (chunk; jsonItemsToResumeUpload.chunks(batchSize)) { // send an array containing 'appConfig.getValueLong("threads")' JSON items to resume upload resumeSessionUploadsInParallel(chunk); } // For this set of items, perform a DB PASSIVE checkpoint itemDB.performCheckpoint("PASSIVE"); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Process 'resumable download' files that were found void processResumableDownloadFiles() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // For each 'resume_download' file that has been found, process the data to ensure it is still valid foreach (resumeDownloadFile; interruptedDownloadFiles) { // What 'resumable data' are we trying to resume if (verboseLogging) {addLogEntry("Attempting to resume file download using this 'resumable data' file: " ~ resumeDownloadFile, ["verbose"]);} // Does this pass validation? if (!validateResumableDownloadFileData(resumeDownloadFile)) { // Remove 'resume_download' file as it is invalid if (verboseLogging) {addLogEntry("Resume file download verification failed - cleaning up resumable download data file: " ~ resumeDownloadFile, ["verbose"]);} // Cleanup 'resume_download' file if (exists(resumeDownloadFile)) { if (!dryRun) { safeRemove(resumeDownloadFile); } } } } // At this point we should have an array of JSON items to resume downloading if (count(jsonItemsToResumeDownload) > 0) { // There are valid items to resume download // Lets deal with all the JSON items that need to be resumed for download in a batch process size_t batchSize = to!int(appConfig.getValueLong("threads")); long batchCount = (jsonItemsToResumeDownload.length + batchSize - 1) / batchSize; long batchesProcessed = 0; foreach (chunk; jsonItemsToResumeDownload.chunks(batchSize)) { // send an array containing 'appConfig.getValueLong("threads")' JSON items to resume download resumeDownloadsInParallel(chunk); } // For this set of items, perform a DB PASSIVE checkpoint itemDB.performCheckpoint("PASSIVE"); } // Cleanup all 'resume_download' files foreach (resumeDownloadFile; interruptedDownloadFiles) { safeRemove(resumeDownloadFile); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // A resume session upload file needs to be valid to be used // This function validates this data bool validateUploadSessionFileData(string sessionFilePath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Due to this function, we need to keep the return ; code, so that this function operates as efficiently as possible. // It is pointless having the entire code run through and performing additional needless checks where it is not required // Whilst this means some extra code / duplication in this function, it cannot be helped JSONValue sessionFileData; OneDriveApi validateUploadSessionFileDataApiInstance; // Try and read the text from the session file as a JSON array try { if (getSize(sessionFilePath) > 0) { // There is data to read in sessionFileData = readText(sessionFilePath).parseJSON(); } else { // No data to read in - invalid file if (debugLogging) {addLogEntry("SESSION-RESUME: Invalid JSON file: " ~ sessionFilePath, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } } catch (JSONException e) { if (debugLogging) {addLogEntry("SESSION-RESUME: Invalid JSON data in: " ~ sessionFilePath, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } // Does the file we wish to resume uploading exist locally still? if ("localPath" in sessionFileData) { string sessionLocalFilePath = sessionFileData["localPath"].str; if (debugLogging) {addLogEntry("SESSION-RESUME: sessionLocalFilePath: " ~ sessionLocalFilePath, ["debug"]);} // Does the file exist? if (!exists(sessionLocalFilePath)) { if (verboseLogging) {addLogEntry("The local file to upload does not exist locally anymore", ["verbose"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } // Can we read the file? if (!readLocalFile(sessionLocalFilePath)) { // filesystem error already returned if unable to read // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } } else { if (debugLogging) {addLogEntry("SESSION-RESUME: No localPath data in: " ~ sessionFilePath, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } // Check the session data for expirationDateTime if ("expirationDateTime" in sessionFileData) { SysTime expiration; string expirationTimestamp; expirationTimestamp = strip(sessionFileData["expirationDateTime"].str); // is expirationTimestamp valid? if (isValidUTCDateTime(expirationTimestamp)) { // string is a valid timestamp expiration = SysTime.fromISOExtString(expirationTimestamp); } else { // invalid timestamp from JSON file addLogEntry("WARNING: Invalid timestamp provided by the Microsoft OneDrive API: " ~ expirationTimestamp); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } // valid timestamp if (expiration < Clock.currTime()) { if (verboseLogging) {addLogEntry("The upload session has expired for: " ~ sessionFilePath, ["verbose"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } } else { if (debugLogging) {addLogEntry("SESSION-RESUME: No expirationDateTime data in: " ~ sessionFilePath, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } // Check the online upload status, using the uloadURL in sessionFileData if ("uploadUrl" in sessionFileData) { JSONValue response; try { // Create a new OneDrive API instance validateUploadSessionFileDataApiInstance = new OneDriveApi(appConfig); validateUploadSessionFileDataApiInstance.initialise(); // Request upload status response = validateUploadSessionFileDataApiInstance.requestUploadStatus(sessionFileData["uploadUrl"].str); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory validateUploadSessionFileDataApiInstance.releaseCurlEngine(); validateUploadSessionFileDataApiInstance = null; // Perform Garbage Collection GC.collect(); // no error .. potentially all still valid } catch (OneDriveException e) { // handle any onedrive error response as invalid if (debugLogging) {addLogEntry("SESSION-RESUME: Invalid response when using uploadUrl in: " ~ sessionFilePath, ["debug"]);} // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory validateUploadSessionFileDataApiInstance.releaseCurlEngine(); validateUploadSessionFileDataApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } // Do we have a valid response from OneDrive? if (response.type() == JSONType.object) { // Valid JSON object was returned if (("expirationDateTime" in response) && ("nextExpectedRanges" in response)) { // The 'uploadUrl' is valid, and the response contains elements we need sessionFileData["expirationDateTime"] = response["expirationDateTime"]; sessionFileData["nextExpectedRanges"] = response["nextExpectedRanges"]; if (sessionFileData["nextExpectedRanges"].array.length == 0) { if (verboseLogging) {addLogEntry("The upload session was already completed", ["verbose"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } } else { if (debugLogging) {addLogEntry("SESSION-RESUME: No expirationDateTime & nextExpectedRanges data in Microsoft OneDrive API response: " ~ to!string(response), ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } } else { // not a JSON object if (verboseLogging) {addLogEntry("Restore file upload session failed - invalid response from Microsoft OneDrive", ["verbose"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } } else { if (debugLogging) {addLogEntry("SESSION-RESUME: No uploadUrl data in: " ~ sessionFilePath, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is invalid return false; } // Add 'sessionFilePath' to 'sessionFileData' so that it can be used when we reuse the JSON data to resume the upload sessionFileData["sessionFilePath"] = sessionFilePath; // Add sessionFileData to jsonItemsToResumeUpload as it is now valid jsonItemsToResumeUpload ~= sessionFileData; // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return session file is valid return true; } // A 'resumable download' file needs to be valid to be used bool validateResumableDownloadFileData(string resumeDownloadFile) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables JSONValue resumeDownloadFileData; JSONValue latestOnlineFileDetails; OneDriveApi validateResumableDownloadFileDataApiInstance; string driveId; string itemId; string existingHash; string downloadFilename; long resumeOffset; string OneDriveFileXORHash; string OneDriveFileSHA256Hash; // Try and read the text from the 'resumable download' file as a JSON array try { if (getSize(resumeDownloadFile) > 0) { // There is data to read in resumeDownloadFileData = readText(resumeDownloadFile).parseJSON(); } else { // No data to read in - invalid file if (debugLogging) {addLogEntry("SESSION-RESUME: Invalid JSON file: " ~ resumeDownloadFile, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return 'resumable download' file is invalid return false; } } catch (JSONException e) { if (debugLogging) {addLogEntry("SESSION-RESUME: Invalid JSON data in: " ~ resumeDownloadFile, ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return 'resumable download' file is invalid return false; } // What needs to be checked? // - JSON has 'downloadFilename' - critical to check the online state // - JSON has 'driveId' - critical to check the online state // - JSON has 'itemId' - critical to check the online state // - JSON has 'resumeOffset' - critical to check the online state // - JSON has 'onlineHash' with an applicable hash value - critical to check the online state if (!hasDownloadFilename(resumeDownloadFileData)) { // no downloadFilename present - file invalid if (verboseLogging) {addLogEntry("The 'resumable download' file contains invalid data: Missing 'downloadFilename'", ["verbose"]);} // Return 'resumable download' file is invalid return false; } else { // Configure search variables downloadFilename = resumeDownloadFileData["downloadFilename"].str; // Does the file specified by 'downloadFilename' exist on disk? if (!exists(downloadFilename)) { // File that is supposed to contain our resumable if (verboseLogging) {addLogEntry("The 'resumable download' file no longer exists on your local disk: " ~ downloadFilename, ["verbose"]);} // Return 'resumable download' file is invalid return false; } } // If we get to this point 'downloadFilename' has a file name and the file exists on disk. // If any of the other validations fail, we can remove the file if (!hasDriveId(resumeDownloadFileData)) { // no driveId present - file invalid if (verboseLogging) {addLogEntry("The 'resumable download' file contains invalid data: Missing 'driveId'", ["verbose"]);} // Remove local file safeRemove(downloadFilename); // Return 'resumable download' file is invalid return false; } else { // Configure search variables driveId = resumeDownloadFileData["driveId"].str; } if (!hasItemId(resumeDownloadFileData)) { // no itemId present - file invalid if (verboseLogging) {addLogEntry("The 'resumable download' file contains invalid data: Missing 'itemId'", ["verbose"]);} // Remove local file safeRemove(downloadFilename); // Return 'resumable download' file is invalid return false; } else { // Configure search variables itemId = resumeDownloadFileData["itemId"].str; } if (!hasResumeOffset(resumeDownloadFileData)) { // no resumeOffset present - file invalid if (verboseLogging) {addLogEntry("The 'resumable download' file contains invalid data: Missing 'resumeOffset'", ["verbose"]);} // Remove local file safeRemove(downloadFilename); // Return 'resumable download' file is invalid return false; } else { // we have a resumeOffset value resumeOffset = to!long(resumeDownloadFileData["resumeOffset"].str); // We need to check 'resumeOffset' against the 'downloadFilename' on-disk size long onDiskSize = getSize(downloadFilename); if (resumeOffset != onDiskSize) { // The size of the offset location does not equal the size on disk .. if we resume that file, the file will be corrupt string logMessage = format("The 'resumable download' file on disk is a different size to the resumable offset: %s vs %s", to!string(resumeOffset), to!string(onDiskSize)); if (verboseLogging) {addLogEntry(logMessage, ["verbose"]);} // Remove local file safeRemove(downloadFilename); // Return 'resumable download' file is invalid return false; } } if (!hasOnlineHash(resumeDownloadFileData)) { // no onlineHash present - file invalid if (verboseLogging) {addLogEntry("The 'resumable download' file contains invalid data: Missing 'onlineHash'", ["verbose"]);} // Remove local file safeRemove(downloadFilename); // Return 'resumable download' file is invalid return false; } else { // Configure hash variable from the resume data // QuickXorHash Check if (hasQuickXorHashResume(resumeDownloadFileData)) { // We have a quickXorHash value existingHash = resumeDownloadFileData["onlineHash"]["quickXorHash"].str; } else { // Fallback: Check for SHA256Hash if (hasSHA256HashResume(resumeDownloadFileData)) { // We have a sha256Hash value existingHash = resumeDownloadFileData["onlineHash"]["sha256Hash"].str; } } // At this point if we do not have a existingHash value, its a fail if (existingHash.empty) { if (verboseLogging) {addLogEntry("The 'resumable download' file contains invalid data: Missing 'onlineHash' value", ["verbose"]);} // Remove local file safeRemove(downloadFilename); // Return 'resumable download' file is invalid return false; } } // At this point we have elements in the 'resumable download' JSON data that will allow is to check if the online file has been modified - if it has, resuming the download is pointless try { // Create a new OneDrive API instance validateResumableDownloadFileDataApiInstance = new OneDriveApi(appConfig); validateResumableDownloadFileDataApiInstance.initialise(); // Request latest file details latestOnlineFileDetails = validateResumableDownloadFileDataApiInstance.getPathDetailsById(driveId, itemId); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory validateResumableDownloadFileDataApiInstance.releaseCurlEngine(); validateResumableDownloadFileDataApiInstance = null; // Perform Garbage Collection GC.collect(); // no error .. potentially all still valid } catch (OneDriveException e) { // handle any onedrive error response as invalid // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory validateResumableDownloadFileDataApiInstance.releaseCurlEngine(); validateResumableDownloadFileDataApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return 'resumable download' file is invalid return false; } // Configure the hashes from the online data for comparison if (hasHashes(latestOnlineFileDetails)) { // File details returned hash details // QuickXorHash if (hasQuickXorHash(latestOnlineFileDetails)) { // Use the provided quickXorHash as reported by OneDrive if (latestOnlineFileDetails["file"]["hashes"]["quickXorHash"].str != "") { OneDriveFileXORHash = latestOnlineFileDetails["file"]["hashes"]["quickXorHash"].str; } } else { // Fallback: Check for SHA256Hash if (hasSHA256Hash(latestOnlineFileDetails)) { // Use the provided sha256Hash as reported by OneDrive if (latestOnlineFileDetails["file"]["hashes"]["sha256Hash"].str != "") { OneDriveFileSHA256Hash = latestOnlineFileDetails["file"]["hashes"]["sha256Hash"].str; } } } } // Last check - has the online file changed since we attempted to do the download that we are trying to resume? // Test 'existingHash' against the potential 2 online hashes for a match // As we dont know what type of hash 'existingHash' is, we have to test it against the 2 known online types bool hashesMatch = (existingHash == OneDriveFileXORHash) || (existingHash == OneDriveFileSHA256Hash); // Do the hashes match? if (!hashesMatch) { // Hashes do not match if (verboseLogging) {addLogEntry("The 'online file' has changed in content since the download was last attempted. Aborting this resumable download attempt.", ["verbose"]);} // Remove local file safeRemove(downloadFilename); // Return 'resumable download' file is invalid return false; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Augment 'latestOnlineFileDetails' with our resume point latestOnlineFileDetails["resumeOffset"] = JSONValue(to!string(resumeOffset)); // Add latestOnlineFileDetails to jsonItemsToResumeDownload as it is now valid jsonItemsToResumeDownload ~= latestOnlineFileDetails; // Return 'resumable download' file is valid return true; } // Resume all resumable session uploads in parallel void resumeSessionUploadsInParallel(JSONValue[] array) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // This function received an array of JSON items to resume upload, the number of elements based on appConfig.getValueLong("threads") foreach (i, jsonItemToResume; processPool.parallel(array)) { // Take each JSON item and resume upload using the JSON data JSONValue uploadResponse; OneDriveApi uploadFileOneDriveApiInstance; // Create a new API instance uploadFileOneDriveApiInstance = new OneDriveApi(appConfig); uploadFileOneDriveApiInstance.initialise(); // Pull out data from this JSON element string threadUploadSessionFilePath = jsonItemToResume["sessionFilePath"].str; long thisFileSizeLocal = getSize(jsonItemToResume["localPath"].str); // Try to resume the session upload using the provided data try { uploadResponse = performSessionFileUpload(uploadFileOneDriveApiInstance, thisFileSizeLocal, jsonItemToResume, threadUploadSessionFilePath); } catch (OneDriveException exception) { writeln("CODING TO DO: Handle an exception when performing a resume session upload"); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory uploadFileOneDriveApiInstance.releaseCurlEngine(); uploadFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Was the response from the OneDrive API a valid JSON item? if (uploadResponse.type() == JSONType.object) { // A valid JSON object was returned - session resumption upload successful // Are we in an --upload-only & --remove-source-files scenario? // Use actual config values as we are doing an upload session recovery if ((uploadOnly) && (localDeleteAfterUpload)) { // Perform the local file deletion removeLocalFilePostUpload(jsonItemToResume["localPath"].str); // as file is removed, we have nothing to add to the local database if (debugLogging) {addLogEntry("Skipping adding to database as --upload-only & --remove-source-files configured", ["debug"]);} } else { // Save JSON item in database saveItem(uploadResponse); } } else { // No valid response was returned addLogEntry("CODING TO DO: what to do when session upload resumption JSON data is not valid ... nothing ? error message ?"); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Resume all resumable downloads in parallel void resumeDownloadsInParallel(JSONValue[] array) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // This function received an array of JSON items to resume download, the number of elements based on appConfig.getValueLong("threads") foreach (i, jsonItemToResume; processPool.parallel(array)) { // Take each JSON item and resume download using the JSON data // Extract the 'offset' from the JSON data long resumeOffset; resumeOffset = to!long(jsonItemToResume["resumeOffset"].str); // Take each JSON item and download it using the offset downloadFileItem(jsonItemToResume, false, resumeOffset); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Function to process the path by removing prefix up to ':' - remove '/drive/root:' from a path string string processPathToRemoveRootReference(ref string pathToCheck) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } size_t colonIndex = pathToCheck.indexOf(":"); if (colonIndex != -1) { if (debugLogging) {addLogEntry("Updating " ~ pathToCheck ~ " to remove prefix up to ':'", ["debug"]);} pathToCheck = pathToCheck[colonIndex + 1 .. $]; if (debugLogging) {addLogEntry("Updated path: " ~ pathToCheck, ["debug"]);} } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return updated path return pathToCheck; } // Generate path from JSON data string generatePathFromJSONData(JSONValue onedriveJSONItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function variables string parentPath; string combinedPath; string computedItemPath; bool parentInDatabase = false; // Set itemName string itemName = onedriveJSONItem["name"].str; // If this item is on our 'driveId' then use the following, otherwise we need to calculate parental path to display the 'correct' path string thisItemDriveId = onedriveJSONItem["parentReference"]["driveId"].str; string thisItemParentId = onedriveJSONItem["parentReference"]["id"].str; // Issue #3336 - Convert driveId to lowercase before any test if (appConfig.accountType == "personal") { thisItemDriveId = transformToLowerCase(thisItemDriveId); } if (thisItemDriveId == appConfig.defaultDriveId) { // As this is on our driveId, use the path details as is parentPath = onedriveJSONItem["parentReference"]["path"].str; combinedPath = buildNormalizedPath(buildPath(parentPath, itemName)); } else { // As this is not our driveId, the 'path' reference above is the 'full' remote path, which is not reflective of our location' // Are the 'parent' details in the database? parentInDatabase = itemDB.idInLocalDatabase(thisItemDriveId, thisItemParentId); if (parentInDatabase) { // Parent in DB .. we can calculate path computedItemPath = computeItemPath(thisItemDriveId, thisItemParentId); combinedPath = buildNormalizedPath(buildPath(computedItemPath, itemName)); } else { // We cant calculate this path parentPath = onedriveJSONItem["parentReference"]["name"].str; combinedPath = buildNormalizedPath(buildPath(parentPath, itemName)); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return processPathToRemoveRootReference(combinedPath); } // Function to find a given DriveId in the onlineDriveDetails associative array that maps driveId to DriveDetailsCache // If 'true' will return 'driveDetails' containing the struct data 'DriveDetailsCache' bool canFindDriveId(string driveId, out DriveDetailsCache driveDetails) { // Not adding performance metrics to this function auto ptr = driveId in onlineDriveDetails; if (ptr !is null) { driveDetails = *ptr; // Dereference the pointer to get the value return true; } else { return false; } } // Add this driveId plus relevant details for future reference and use void addOrUpdateOneDriveOnlineDetails(string driveId) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } bool quotaRestricted; bool quotaAvailable; long quotaRemaining; // Get the data from online auto onlineDriveData = getRemainingFreeSpaceOnline(driveId); quotaRestricted = to!bool(onlineDriveData[0][0]); quotaAvailable = to!bool(onlineDriveData[0][1]); quotaRemaining = to!long(onlineDriveData[0][2]); onlineDriveDetails[driveId] = DriveDetailsCache(driveId, quotaRestricted, quotaAvailable, quotaRemaining); // Debug log what the cached array now contains if (debugLogging) {addLogEntry("onlineDriveDetails: " ~ to!string(onlineDriveDetails), ["debug"]);} // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Return a specific 'driveId' details from 'onlineDriveDetails' DriveDetailsCache getDriveDetails(string driveId) { // Not adding performance metrics to this function auto ptr = driveId in onlineDriveDetails; if (ptr !is null) { return *ptr; // Dereference the pointer to get the value } else { // Return a default DriveDetailsCache or handle the case where the driveId is not found return DriveDetailsCache.init; // Return default-initialised struct } } // Search a given Drive ID, Item ID and filename to see if this exists in the location specified JSONValue searchDriveItemForFile(string parentItemDriveId, string parentItemId, string fileToUpload) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } JSONValue onedriveJSONItem; string searchName = baseName(fileToUpload); JSONValue thisLevelChildren; string nextLink; // Create a new API Instance for this thread and initialise it OneDriveApi checkFileOneDriveApiInstance; checkFileOneDriveApiInstance = new OneDriveApi(appConfig); checkFileOneDriveApiInstance.initialise(); while (true) { // Check if exitHandlerTriggered is true if (exitHandlerTriggered) { // break out of the 'while (true)' loop break; } // Try and query top level children try { thisLevelChildren = checkFileOneDriveApiInstance.listChildren(parentItemDriveId, parentItemId, nextLink); } catch (OneDriveException exception) { // OneDrive threw an error if (debugLogging) { addLogEntry(debugLogBreakType1, ["debug"]); addLogEntry("Query Error: thisLevelChildren = checkFileOneDriveApiInstance.listChildren(parentItemDriveId, parentItemId, nextLink)", ["debug"]); addLogEntry("driveId: " ~ parentItemDriveId, ["debug"]); addLogEntry("idToQuery: " ~ parentItemId, ["debug"]); addLogEntry("nextLink: " ~ nextLink, ["debug"]); } // Handle the 404 error code - the parent item id was not found on the drive id specified if (exception.httpStatusCode == 404) { // Return an empty JSON item, as parent item could not be found, thus any child object will never be found return onedriveJSONItem; } else { // Default operation if not 408,429,503,504 errors // - 408,429,503,504 errors are handled as a retry within oneDriveApiInstance // Display what the error is displayOneDriveErrorMessage(exception.msg, thisFunctionName); } } // 'thisLevelChildren' must be a valid JSON response to progress any further if (thisLevelChildren.type() == JSONType.object) { // Process thisLevelChildren response foreach (child; thisLevelChildren["value"].array) { // Only looking at files if ((child["name"].str == searchName) && (("file" in child) != null)) { // Found the matching file, return its JSON representation // Operations in this thread are done / complete // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory checkFileOneDriveApiInstance.releaseCurlEngine(); checkFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return child as found item return child; } } // If a collection exceeds the default page size (200 items), the @odata.nextLink property is returned in the response // to indicate more items are available and provide the request URL for the next page of items. if ("@odata.nextLink" in thisLevelChildren) { // Update nextLink to next changeSet bundle if (debugLogging) {addLogEntry("Setting nextLink to (@odata.nextLink): " ~ nextLink, ["debug"]);} nextLink = thisLevelChildren["@odata.nextLink"].str; } else break; // Sleep for a while to avoid busy-waiting Thread.sleep(dur!"msecs"(100)); // Adjust the sleep duration as needed } else { // API response was not a valid response // Break out of the 'while (true)' loop break; } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory checkFileOneDriveApiInstance.releaseCurlEngine(); checkFileOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // return an empty JSON item, as search item was not found return onedriveJSONItem; } // Update 'onlineDriveDetails' with the latest data about this drive void updateDriveDetailsCache(string driveId, bool quotaRestricted, bool quotaAvailable, long localFileSize) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // As each thread is running differently, what is the current 'quotaRemaining' for 'driveId' ? long quotaRemaining; DriveDetailsCache cachedOnlineDriveData; cachedOnlineDriveData = getDriveDetails(driveId); quotaRemaining = cachedOnlineDriveData.quotaRemaining; // Update 'quotaRemaining' quotaRemaining = quotaRemaining - localFileSize; // Do the flags get updated? if (quotaRemaining <= 0) { if (appConfig.accountType == "personal"){ // Issue #3336 - Convert driveId to lowercase before any test driveId = transformToLowerCase(driveId); if (driveId == appConfig.defaultDriveId) { // zero space available on our drive addLogEntry("ERROR: OneDrive account currently has zero space available. Please free up some space online or purchase additional capacity."); quotaRemaining = 0; quotaAvailable = false; } } else { // zero space available is being reported, maybe being restricted? if (verboseLogging) {addLogEntry("WARNING: OneDrive quota information is being restricted or providing a zero value. Please fix by speaking to your OneDrive / Office 365 Administrator.", ["verbose"]);} quotaRemaining = 0; quotaRestricted = true; } } // Updated the details onlineDriveDetails[driveId] = DriveDetailsCache(driveId, quotaRestricted, quotaAvailable, quotaRemaining); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Update all of the known cached driveId quota details void freshenCachedDriveQuotaDetails() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } foreach (driveId; onlineDriveDetails.keys) { // Update this driveid quota details if (debugLogging) {addLogEntry("Freshen Quota Details for this driveId: " ~ driveId, ["debug"]);} addOrUpdateOneDriveOnlineDetails(driveId); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Create a 'root' DB Tie Record for a Shared Folder from the JSON data void createDatabaseRootTieRecordForOnlineSharedFolder(JSONValue onedriveJSONItem, string relocatedFolderDriveId = null, string relocatedFolderParentId = null) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Creating|Updating a DB Tie if (debugLogging) { addLogEntry("Creating|Updating a 'root' DB Tie Record for this Shared Folder (Actual 'Shared With Me' Folder Name): " ~ onedriveJSONItem["name"].str, ["debug"]); addLogEntry("Raw JSON for 'root' DB Tie Record: " ~ to!string(onedriveJSONItem), ["debug"]); } // New DB Tie Item to detail the 'root' of the Shared Folder Item tieDBItem; string lastModifiedTimestamp; tieDBItem.name = "root"; // Get the right parentReference details if (isItemRemote(onedriveJSONItem)) { tieDBItem.driveId = onedriveJSONItem["remoteItem"]["parentReference"]["driveId"].str; tieDBItem.id = onedriveJSONItem["remoteItem"]["id"].str; } else { if (onedriveJSONItem["name"].str != "root") { tieDBItem.driveId = onedriveJSONItem["parentReference"]["driveId"].str; // OneDrive Personal JSON responses are in-consistent with not having 'id' available if (hasParentReferenceId(onedriveJSONItem)) { // Use the parent reference id tieDBItem.id = onedriveJSONItem["parentReference"]["id"].str; } else { // Testing evidence shows that for Personal accounts, use the 'id' itself tieDBItem.id = onedriveJSONItem["id"].str; } } else { tieDBItem.driveId = onedriveJSONItem["parentReference"]["driveId"].str; tieDBItem.id = onedriveJSONItem["id"].str; } } // set the item type tieDBItem.type = ItemType.root; // get the lastModifiedDateTime lastModifiedTimestamp = strip(onedriveJSONItem["fileSystemInfo"]["lastModifiedDateTime"].str); // is lastModifiedTimestamp valid? if (isValidUTCDateTime(lastModifiedTimestamp)) { // string is a valid timestamp tieDBItem.mtime = SysTime.fromISOExtString(lastModifiedTimestamp); } else { // invalid timestamp from JSON file addLogEntry("WARNING: Invalid timestamp provided by the Microsoft OneDrive API: " ~ lastModifiedTimestamp); // Set mtime to SysTime(0) tieDBItem.mtime = SysTime(0); } // Ensure there is no parentId for this DB record tieDBItem.parentId = null; // OneDrive Personal and Business supports relocating Shared Folders to other folders. // This means, in our DB, we need this DB record to have the correct parentId of the parental folder, if this is relocated shared folder // This is stored in the 'relocParentId' DB entry // This 'relocatedFolderParentId' variable is only ever set if using OneDrive Business account types and the shared folder is located online in another folder if ((!relocatedFolderDriveId.empty) && (!relocatedFolderParentId.empty)) { // Ensure that we set the relocParentId to the provided relocatedFolderParentId record if (debugLogging) {addLogEntry("Relocated Shared Folder references were provided - adding these to the 'root' DB Tie Record", ["debug"]);} tieDBItem.relocDriveId = relocatedFolderDriveId; tieDBItem.relocParentId = relocatedFolderParentId; } // Issue #3115 - Validate driveId length // What account type is this? if (appConfig.accountType == "personal") { // Issue #3336 - Convert driveId to lowercase before any test tieDBItem.driveId = transformToLowerCase(tieDBItem.driveId); // Test driveId length and validation if the driveId we are testing is not equal to appConfig.defaultDriveId if (tieDBItem.driveId != appConfig.defaultDriveId) { tieDBItem.driveId = testProvidedDriveIdForLengthIssue(tieDBItem.driveId); } } // Add this DB Tie parent record to the local database if (debugLogging) {addLogEntry("Creating|Updating into local database a 'root' DB Tie record for a OneDrive Shared Folder online: " ~ to!string(tieDBItem), ["debug"]);} itemDB.upsert(tieDBItem); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Create a DB Tie Record for a Shared Folder void createDatabaseTieRecordForOnlineSharedFolder(Item parentItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Creating|Updating a DB Tie if (debugLogging) { //addLogEntry("Creating|Updating a DB Tie Record for this Shared Folder: " ~ parentItem.name, ["debug"]); addLogEntry("Creating|Updating a DB Tie Record for this Shared Folder from the provided parental data: " ~ parentItem.name, ["debug"]); addLogEntry("Parent Item Record: " ~ to!string(parentItem), ["debug"]); } // New DB Tie Item to bind the 'remote' path to our parent path in the database Item tieDBItem; tieDBItem.name = parentItem.name; tieDBItem.id = parentItem.remoteId; tieDBItem.type = ItemType.dir; tieDBItem.mtime = parentItem.mtime; // Initially set this tieDBItem.driveId = parentItem.remoteDriveId; // What account type is this as this determines what 'tieDBItem.parentId' should be set to // There is a difference in the JSON responses between 'personal' and 'business' account types for Shared Folders // Essentially an API inconsistency if (appConfig.accountType == "personal") { // Set tieDBItem.parentId to null tieDBItem.parentId = null; tieDBItem.type = ItemType.root; // Issue #3136, #3139 #3143 // Fetch the actual online record for this item // This returns the actual OneDrive Personal driveId value and is 15 character checked string actualOnlineDriveId = testProvidedDriveIdForLengthIssue(fetchRealOnlineDriveIdentifier(tieDBItem.driveId)); tieDBItem.driveId = actualOnlineDriveId; } else { // The tieDBItem.parentId needs to be the correct driveId id reference // Query the DB Item[] rootDriveItems; Item dbRecord; rootDriveItems = itemDB.selectByDriveId(parentItem.remoteDriveId); // Fix Issue #2883 if (rootDriveItems.length > 0) { // Use the first record returned dbRecord = rootDriveItems[0]; tieDBItem.parentId = dbRecord.id; } else { // Business Account ... but itemDB.selectByDriveId returned no entries ... need to query for this item online to get the correct details given they are not in the database if (debugLogging) {addLogEntry("itemDB.selectByDriveId(parentItem.remoteDriveId) returned zero database entries for this remoteDriveId: " ~ to!string(parentItem.remoteDriveId), ["debug"]);} // Create a new API Instance for this query and initialise it OneDriveApi getPathDetailsApiInstance; JSONValue latestOnlineDetails; getPathDetailsApiInstance = new OneDriveApi(appConfig); getPathDetailsApiInstance.initialise(); try { // Get the latest online details latestOnlineDetails = getPathDetailsApiInstance.getPathDetailsById(parentItem.remoteDriveId, parentItem.remoteId); if (debugLogging) {addLogEntry("Parent JSON details from Online Query: " ~ to!string(latestOnlineDetails), ["debug"]);} // Convert JSON to a database compatible item Item tempOnlineRecord = makeItem(latestOnlineDetails); // Configure tieDBItem.parentId to use tempOnlineRecord.id tieDBItem.parentId = tempOnlineRecord.id; // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory getPathDetailsApiInstance.releaseCurlEngine(); getPathDetailsApiInstance = null; // Perform Garbage Collection GC.collect(); } catch (OneDriveException e) { // Display error message displayOneDriveErrorMessage(e.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory getPathDetailsApiInstance.releaseCurlEngine(); getPathDetailsApiInstance = null; // Perform Garbage Collection GC.collect(); return; } } // Free the array memory rootDriveItems = []; } // Add tie DB record to the local database if (debugLogging) {addLogEntry("Creating|Updating into local database a DB Tie record: " ~ to!string(tieDBItem), ["debug"]);} itemDB.upsert(tieDBItem); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // List all the OneDrive Business Shared Items for the user to see void listBusinessSharedObjects() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } JSONValue sharedWithMeItems; // Create a new API Instance for this thread and initialise it OneDriveApi sharedWithMeOneDriveApiInstance; sharedWithMeOneDriveApiInstance = new OneDriveApi(appConfig); sharedWithMeOneDriveApiInstance.initialise(); try { sharedWithMeItems = sharedWithMeOneDriveApiInstance.getSharedWithMe(); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory sharedWithMeOneDriveApiInstance.releaseCurlEngine(); sharedWithMeOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); } catch (OneDriveException e) { // Display error message displayOneDriveErrorMessage(e.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory sharedWithMeOneDriveApiInstance.releaseCurlEngine(); sharedWithMeOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); return; } if (sharedWithMeItems.type() == JSONType.object) { if (count(sharedWithMeItems["value"].array) > 0) { // No shared items addLogEntry(); addLogEntry("Listing available OneDrive Business Shared Items:"); addLogEntry(); // Iterate through the array foreach (searchResult; sharedWithMeItems["value"].array) { // loop variables for each item string sharedByName; string sharedByEmail; // Debug response output if (debugLogging) {addLogEntry("shared folder entry: " ~ to!string(searchResult), ["debug"]);} // Configure 'who' this was shared by if ("sharedBy" in searchResult["remoteItem"]["shared"]) { // we have shared by details we can use if ("displayName" in searchResult["remoteItem"]["shared"]["sharedBy"]["user"]) { sharedByName = searchResult["remoteItem"]["shared"]["sharedBy"]["user"]["displayName"].str; } if ("email" in searchResult["remoteItem"]["shared"]["sharedBy"]["user"]) { sharedByEmail = searchResult["remoteItem"]["shared"]["sharedBy"]["user"]["email"].str; } } // Output query result addLogEntry(debugLogBreakType1); if (isItemFile(searchResult)) { addLogEntry("Shared File: " ~ to!string(searchResult["name"].str)); } else { addLogEntry("Shared Folder: " ~ to!string(searchResult["name"].str)); } // Detail 'who' shared this if ((sharedByName != "") && (sharedByEmail != "")) { addLogEntry("Shared By: " ~ sharedByName ~ " (" ~ sharedByEmail ~ ")"); } else { if (sharedByName != "") { addLogEntry("Shared By: " ~ sharedByName); } } // More detail if --verbose is being used if (verboseLogging) { addLogEntry("Item Id: " ~ searchResult["remoteItem"]["id"].str, ["verbose"]); addLogEntry("Parent Drive Id: " ~ searchResult["remoteItem"]["parentReference"]["driveId"].str, ["verbose"]); if ("id" in searchResult["remoteItem"]["parentReference"]) { addLogEntry("Parent Item Id: " ~ searchResult["remoteItem"]["parentReference"]["id"].str, ["verbose"]); } } } // Close out the loop addLogEntry(debugLogBreakType1); addLogEntry(); } else { // No shared items addLogEntry(); addLogEntry("No OneDrive Business Shared Folders were returned"); addLogEntry(); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Query all the OneDrive Business Shared Objects to sync only Shared Files void queryBusinessSharedObjects() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } JSONValue sharedWithMeItems; Item sharedFilesRootDirectoryDatabaseRecord; // Create a new API Instance for this thread and initialise it OneDriveApi sharedWithMeOneDriveApiInstance; sharedWithMeOneDriveApiInstance = new OneDriveApi(appConfig); sharedWithMeOneDriveApiInstance.initialise(); try { sharedWithMeItems = sharedWithMeOneDriveApiInstance.getSharedWithMe(); // We cant shutdown the API instance here, as we reuse it below } catch (OneDriveException e) { // Display error message displayOneDriveErrorMessage(e.msg, thisFunctionName); // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory sharedWithMeOneDriveApiInstance.releaseCurlEngine(); sharedWithMeOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); return; } // Valid JSON response if (sharedWithMeItems.type() == JSONType.object) { // Get the configuredBusinessSharedFilesDirectoryName DB item // We need this as we need to 'fake' create all the folders for the shared files // Then fake create the file entries for the database with the correct parent folder that is the local folder itemDB.selectByPath(baseName(appConfig.configuredBusinessSharedFilesDirectoryName), appConfig.defaultDriveId, sharedFilesRootDirectoryDatabaseRecord); // For each item returned, if a file, process it foreach (searchResult; sharedWithMeItems["value"].array) { // Shared Business Folders are added to the account using 'Add shortcut to My files' // We only care here about any remaining 'files' that are shared with the user if (isItemFile(searchResult)) { // Debug response output if (debugLogging) {addLogEntry("getSharedWithMe Response Shared File JSON: " ~ sanitiseJSONItem(searchResult), ["debug"]);} // Make a DB item from this JSON Item sharedFileOriginalData = makeItem(searchResult); // Variables for each item string sharedByName; string sharedByEmail; string sharedByFolderName; string newLocalSharedFilePath; string newItemPath; Item sharedFilesPath; JSONValue fileToDownload; JSONValue detailsToUpdate; JSONValue latestOnlineDetails; // Configure 'who' this was shared by if ("sharedBy" in searchResult["remoteItem"]["shared"]) { // we have shared by details we can use if ("displayName" in searchResult["remoteItem"]["shared"]["sharedBy"]["user"]) { sharedByName = searchResult["remoteItem"]["shared"]["sharedBy"]["user"]["displayName"].str; } if ("email" in searchResult["remoteItem"]["shared"]["sharedBy"]["user"]) { sharedByEmail = searchResult["remoteItem"]["shared"]["sharedBy"]["user"]["email"].str; } } // Configure 'who' shared this, so that we can create the directory for that users shared files with us if ((sharedByName != "") && (sharedByEmail != "")) { sharedByFolderName = sharedByName ~ " (" ~ sharedByEmail ~ ")"; } else { if (debugLogging) {addLogEntry("Either name or email is not defined -> check specifically. Currently: " ~ to!string(sharedByName) ~ " / " ~ to!string(sharedByEmail), ["debug"]);} if (sharedByName != "") { sharedByFolderName = sharedByName; } else { sharedByFolderName = sharedByEmail; } } if (debugLogging) {addLogEntry("Combined folder set to " ~ to!string(sharedByFolderName), ["debug"]);} // Create the local path to store this users shared files with us newLocalSharedFilePath = buildNormalizedPath(buildPath(appConfig.configuredBusinessSharedFilesDirectoryName, sharedByFolderName)); if (debugLogging) {addLogEntry("newLocalSharedFilePath is located at " ~ to!string(newLocalSharedFilePath), ["debug"]);} // Does the Shared File Users Local Directory to store the shared file(s) exist? if (!exists(newLocalSharedFilePath)) { // Folder does not exist locally and needs to be created addLogEntry("Creating the OneDrive Business Shared File Users Local Directory: " ~ newLocalSharedFilePath); if (!dryRun) { // Local folder does not exist, thus needs to be created try { // Attempt path creation mkdirRecurse(newLocalSharedFilePath); } catch (std.file.FileException e) { // Creating the path failed addLogEntry("ERROR: Unable to create the OneDrive Business Shared File Users Local Directory: " ~ e.msg, ["info", "notify"]); } } // As this will not be created online, generate a response so it can be saved to the database sharedFilesPath = makeItem(createFakeResponse(baseName(newLocalSharedFilePath))); // Update sharedFilesPath parent items to that of sharedFilesRootDirectoryDatabaseRecord sharedFilesPath.parentId = sharedFilesRootDirectoryDatabaseRecord.id; // Add DB record to the local database if (debugLogging) {addLogEntry("Creating|Updating into local database a DB record for storing OneDrive Business Shared Files: " ~ to!string(sharedFilesPath), ["debug"]);} itemDB.upsert(sharedFilesPath); } else { // Folder exists locally, is the folder in the database? // Query DB for this path Item dbRecord; if (!itemDB.selectByPath(baseName(newLocalSharedFilePath), appConfig.defaultDriveId, dbRecord)) { // As this will not be created online, generate a response so it can be saved to the database sharedFilesPath = makeItem(createFakeResponse(baseName(newLocalSharedFilePath))); // Update sharedFilesPath parent items to that of sharedFilesRootDirectoryDatabaseRecord sharedFilesPath.parentId = sharedFilesRootDirectoryDatabaseRecord.id; // Add DB record to the local database if (debugLogging) {addLogEntry("Creating|Updating into local database a DB record for storing OneDrive Business Shared Files: " ~ to!string(sharedFilesPath), ["debug"]);} itemDB.upsert(sharedFilesPath); } else { // If the folder exists in the db, assign the variable to have the parentID available sharedFilesPath = dbRecord; if (debugLogging) {addLogEntry("Recreating local database record for storing OneDrive Business Shared Files: " ~ to!string(sharedFilesPath), ["debug"]);} } } // The file to download JSON details fileToDownload = searchResult; // Get the latest online details latestOnlineDetails = sharedWithMeOneDriveApiInstance.getPathDetailsById(sharedFileOriginalData.remoteDriveId, sharedFileOriginalData.remoteId); Item tempOnlineRecord = makeItem(latestOnlineDetails); // With the local folders created, now update 'fileToDownload' to download the file to our location: // "parentReference": { // "driveId": "", // "driveType": "business", // "id": "", // }, // The getSharedWithMe() JSON response also contains an API bug where the 'hash' of the file is not provided // Use the 'latestOnlineDetails' response to obtain the hash // "file": { // "hashes": { // "quickXorHash": "" // } // }, // // The getSharedWithMe() JSON response also contains an API bug where the 'size' of the file is not the actual size of the file // The getSharedWithMe() JSON response also contains an API bug where the 'eTag' of the file is not present // The getSharedWithMe() JSON response also contains an API bug where the 'lastModifiedDateTime' of the file is date when the file was shared, not the actual date last modified detailsToUpdate = [ "parentReference": JSONValue([ "driveId": JSONValue(appConfig.defaultDriveId), "driveType": JSONValue("business"), "id": JSONValue(sharedFilesPath.id) ]), "file": JSONValue([ "hashes":JSONValue([ "quickXorHash": JSONValue(tempOnlineRecord.quickXorHash) ]) ]), "eTag": JSONValue(tempOnlineRecord.eTag) ]; foreach (string key, JSONValue value; detailsToUpdate.object) { fileToDownload[key] = value; } // Update specific items // Update 'size' fileToDownload["size"] = to!int(tempOnlineRecord.size); fileToDownload["remoteItem"]["size"] = to!int(tempOnlineRecord.size); // Update 'lastModifiedDateTime' fileToDownload["lastModifiedDateTime"] = latestOnlineDetails["fileSystemInfo"]["lastModifiedDateTime"].str; fileToDownload["fileSystemInfo"]["lastModifiedDateTime"] = latestOnlineDetails["fileSystemInfo"]["lastModifiedDateTime"].str; fileToDownload["remoteItem"]["lastModifiedDateTime"] = latestOnlineDetails["fileSystemInfo"]["lastModifiedDateTime"].str; fileToDownload["remoteItem"]["fileSystemInfo"]["lastModifiedDateTime"] = latestOnlineDetails["fileSystemInfo"]["lastModifiedDateTime"].str; // Final JSON that will be used to download the file if (debugLogging) {addLogEntry("Final fileToDownload: " ~ to!string(fileToDownload), ["debug"]);} // Make the new DB item from the consolidated JSON item Item downloadSharedFileDbItem = makeItem(fileToDownload); // Calculate the full local path for this shared file newItemPath = computeItemPath(downloadSharedFileDbItem.driveId, downloadSharedFileDbItem.parentId) ~ "/" ~ downloadSharedFileDbItem.name; // Does this potential file exists on disk? if (!exists(newItemPath)) { // The shared file does not exists locally // Is this something we actually want? Check the JSON against Client Side Filtering Rules bool unwanted = checkJSONAgainstClientSideFiltering(fileToDownload); if (!unwanted) { // File has not been excluded via Client Side Filtering // Submit this shared file to be processed further for downloading applyPotentiallyNewLocalItem(downloadSharedFileDbItem, fileToDownload, newItemPath); } } else { // A file, in the desired local location already exists with the same name // Is this local file in sync? string itemSource = "remote"; if (!isItemSynced(downloadSharedFileDbItem, newItemPath, itemSource)) { // Not in sync .... Item existingDatabaseItem; bool existingDBEntry = itemDB.selectById(downloadSharedFileDbItem.driveId, downloadSharedFileDbItem.id, existingDatabaseItem); // Is there a DB entry? if (existingDBEntry) { // Existing DB entry // Need to be consistent here with how 'newItemPath' was calculated string existingItemPath = computeItemPath(existingDatabaseItem.driveId, existingDatabaseItem.parentId) ~ "/" ~ existingDatabaseItem.name; // Attempt to apply this changed item applyPotentiallyChangedItem(existingDatabaseItem, existingItemPath, downloadSharedFileDbItem, newItemPath, fileToDownload); } else { // File exists locally, it is not in sync, there is no record in the DB of this file // In case the renamed path is needed string renamedPath; // If local data protection is configured (bypassDataPreservation = false), safeBackup the local file, passing in if we are performing a --dry-run or not safeBackup(newItemPath, dryRun, bypassDataPreservation, renamedPath); // Submit this shared file to be processed further for downloading applyPotentiallyNewLocalItem(downloadSharedFileDbItem, fileToDownload, newItemPath); } } else { // Item is in sync, ensure the DB record is the same itemDB.upsert(downloadSharedFileDbItem); } } } } } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory sharedWithMeOneDriveApiInstance.releaseCurlEngine(); sharedWithMeOneDriveApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Renaming or moving a directory online manually using --source-directory 'path/as/source/' --destination-directory 'path/as/destination' void moveOrRenameDirectoryOnline(string sourcePath, string destinationPath) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Function Variables bool sourcePathExists = false; bool destinationPathExists = false; bool invalidDestination = false; JSONValue sourcePathData; JSONValue destinationPathData; JSONValue parentPathData; Item sourceItem; Item parentItem; // Log that we are doing a move addLogEntry("Moving " ~ sourcePath ~ " to " ~ destinationPath); // Create a new API Instance for this thread and initialise it OneDriveApi onlineMoveApiInstance; onlineMoveApiInstance = new OneDriveApi(appConfig); onlineMoveApiInstance.initialise(); // In order to move, the 'source' needs to exist online, so this is the first check try { sourcePathData = onlineMoveApiInstance.getPathDetails(sourcePath); sourceItem = makeItem(sourcePathData); sourcePathExists = true; } catch (OneDriveException exception) { if (exception.httpStatusCode == 404) { // The item to search was not found. If it does not exist, how can we move it? addLogEntry("The source path to move does not exist online - unable to move|rename a path that does not already exist online"); forceExit(); } else { // An error, regardless of what it is ... not good // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); forceExit(); } } // The second check needs to be that the destination does not already exist try { destinationPathData = onlineMoveApiInstance.getPathDetails(destinationPath); destinationPathExists = true; addLogEntry("The destination path to move to exists online - unable to move|rename to a path that already exists online"); forceExit(); } catch (OneDriveException exception) { if (exception.httpStatusCode == 404) { // The item to search was not found. This is good as the destination path is empty } else { // An error, regardless of what it is ... not good // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); forceExit(); } } // Can we move? if ((sourcePathExists) && (!destinationPathExists)) { // Make an item we can use Item onlineItem = makeItem(sourcePathData); // The directory to move MUST be a directory if (onlineItem.type == ItemType.dir) { // Validate that the 'destination' is valid // This not a Client Side Filtering check, nor a Microsoft Check, but is a sanity check that the path provided is UTF encoded correctly // Check the std.encoding of the path against: Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252 if (!invalidDestination) { if(!isValid(destinationPath)) { // Path is not valid according to https://dlang.org/phobos/std_encoding.html addLogEntry("Skipping move - invalid character encoding sequence: " ~ destinationPath, ["info", "notify"]); invalidDestination = true; } } // We do not check this path against the Client Side Filtering Rules as this is 100% an online move only // Check this path against the Microsoft Naming Conventions & Restrictions // - Check path against Microsoft OneDrive restriction and limitations about Windows naming for files and folders // - Check path for bad whitespace items // - Check path for HTML ASCII Codes // - Check path for ASCII Control Codes if (!invalidDestination) { invalidDestination = checkPathAgainstMicrosoftNamingRestrictions(destinationPath, "move"); } // Is the destination location invalid? if (!invalidDestination) { // We can perform the online move // We need to query for the parent information of the destination path string parentPath = dirName(destinationPath); // Configure the parentItem by if this is the account 'root' use the root details, or query online for the parent details if (parentPath == ".") { // Parent path is '.' which is the account root - use client defaults parentItem.driveId = appConfig.defaultDriveId; // Should give something like 12345abcde1234a1 parentItem.id = appConfig.defaultRootId; // Should give something like 12345ABCDE1234A1!101 } else { // Need to query to obtain the details try { if (debugLogging) {addLogEntry("Attempting to query OneDrive Online for this parent path: " ~ parentPath, ["debug"]);} parentPathData = onlineMoveApiInstance.getPathDetails(parentPath); if (debugLogging) {addLogEntry("Online Parent Path Query Response: " ~ to!string(parentPathData), ["debug"]);} parentItem = makeItem(parentPathData); } catch (OneDriveException exception) { if (exception.httpStatusCode == 404) { // The item to search was not found. If it does not exist, how can we move it? addLogEntry("The parent path to move to does not exist online - unable to move|rename a path to a parent that does exist online"); forceExit(); } else { // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); forceExit(); } } } // Configure the modification JSON item SysTime mtime; // Use the current system time mtime = Clock.currTime().toUTC(); JSONValue data = [ "name": JSONValue(baseName(destinationPath)), "parentReference": JSONValue([ "id": parentItem.id ]), "fileSystemInfo": JSONValue([ "lastModifiedDateTime": mtime.toISOExtString() ]) ]; // Try the online move try { onlineMoveApiInstance.updateById(sourceItem.driveId, sourceItem.id, data, sourceItem.eTag); // Log that it was successful addLogEntry("Successfully moved " ~ sourcePath ~ " to " ~ destinationPath); } catch (OneDriveException exception) { // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); forceExit(); } } } else { // The source item is not a directory addLogEntry("ERROR: The source path to move is not a directory"); forceExit(); } } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Return an array of the notification parameters when this is called. This implements FR #2760 string[] fileTransferNotifications() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Based on the configuration option, send the file transfer actions to the GUI notifications if configured // GUI notifications are already sent for files that meet this criteria: // - Skipping a particular item due to an invalid name // - Skipping a particular item due to an invalid symbolic link // - Skipping a particular item due to an invalid UTF sequence // - Skipping a particular item due to an invalid character encoding sequence // - Files that fail to upload // - Files that fail to download // // This is about notifying on: // - Successful file download // - Successful file upload // - Successful deletion locally // - Successful deletion online string[] loggingOptions; if (appConfig.getValueBool("notify_file_actions")) { // Add the 'notify' to enable GUI notifications loggingOptions = ["info", "notify"]; } else { // Logging to console and/or logfile only loggingOptions = ["info"]; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } return loggingOptions; } // OneDrive Personal driveId or parentReference driveId must be 16 characters in length string testProvidedDriveIdForLengthIssue(string objectParentDriveId) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Due to this function, we need to keep the return ; code, so that this function operates as efficiently as possible. // Whilst this means some extra code / duplication in this function, it cannot be helped // OneDrive Personal Account driveId and remoteDriveId length check // Issue #3072 (https://github.com/abraunegg/onedrive/issues/3072) illustrated that the OneDrive API is inconsistent in response when the Drive ID starts with a zero ('0') // - driveId // - remoteDriveId // // Example: // 024470056F5C3E43 (driveId) // 24470056f5c3e43 (remoteDriveId) // // If this is a OneDrive Personal Account, ensure this value is 16 characters, padded by leading zero's if eventually required string oldEntry; string newEntry; // Check the provided objectParentDriveId if (!objectParentDriveId.empty) { // Ensure objectParentDriveId is 16 characters long by padding with leading zeros if required if (debugLogging) { string validationMessage = format("Validating that the provided OneDrive Personal 'driveId' value '%s' is 16 characters", objectParentDriveId); addLogEntry(validationMessage, ["debug"]); } // Is this less than 16 characters if (objectParentDriveId.length < 16) { // Debug logging if (debugLogging) {addLogEntry("ONEDRIVE PERSONAL API BUG (Issue #3072): The provided 'driveId' is not 16 characters in length - fetching the correct value from Microsoft Graph API via getDriveIdRoot call", ["debug"]);} // Generate the change oldEntry = objectParentDriveId; string onlineDriveValue; // Fetch the actual online record for this item // This returns the actual OneDrive Personal driveId value based on the input value. // The function 'fetchRealOnlineDriveIdentifier' does not check for length issue, this is done below onlineDriveValue = fetchRealOnlineDriveIdentifier(oldEntry); // Check the onlineDriveValue value for 15 character issue if (!onlineDriveValue.empty) { // Ensure remoteDriveId is 16 characters long by padding with leading zeros if required if (onlineDriveValue.length < 16) { // online value is not 16 characters in length // Debug logging if (debugLogging) {addLogEntry("ONEDRIVE PERSONAL API BUG (Issue #3072): The provided online ['parentReference']['driveId'] value is not 16 Characters in length - padding with leading zero's", ["debug"]);} // Generate the change newEntry = to!string(onlineDriveValue.padLeft('0', 16)); // Explicitly use padLeft for leading zero padding, leave case as-is } else { // Online value is 16 characters in length, use as-is newEntry = onlineDriveValue; } } // Debug Logging of result if (debugLogging) { addLogEntry(" - old 'driveId' value = " ~ oldEntry, ["debug"]); addLogEntry(" - new 'driveId' value = " ~ newEntry, ["debug"]); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Issue #3336 - Convert driveId to lowercase // Return the new calculated value as lowercase return transformToLowerCase(newEntry); } else { // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Issue #3336 - Convert driveId to lowercase // Return input value as-is as lowercase return transformToLowerCase(objectParentDriveId); } } else { // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Issue #3336 - Convert driveId to lowercase // Return input value as-is as lowercase return transformToLowerCase(objectParentDriveId); } } // Transform OneDrive Personal driveId or parentReference driveId to lowercase string transformToLowerCase(string objectParentDriveId) { // Since 14 June 2025 (possibly earlier), the Microsoft Graph API has started returning inconsistent casing for driveId values across multiple OneDrive Personal API endpoints. // https://github.com/OneDrive/onedrive-api-docs/issues/1902 // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } string transformedDriveIdValue; transformedDriveIdValue = toLower(objectParentDriveId); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return transformed value return transformedDriveIdValue; } // Calculate the transfer metrics for the file to aid in performance discussions when they are raised void displayTransferMetrics(string fileTransferred, long transferredBytes, SysTime transferStartTime, SysTime transferEndTime) { // We only calculate this if 'display_transfer_metrics' is enabled or we are doing debug logging if (appConfig.getValueBool("display_transfer_metrics") || debugLogging) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Calculations must be done on files > 0 transferredBytes if (transferredBytes > 0) { // Calculate transfer metrics auto transferDuration = transferEndTime - transferStartTime; double transferDurationAsSeconds = (transferDuration.total!"msecs"/1e3); // msec --> seconds double transferSpeedAsMbps = ((transferredBytes / transferDurationAsSeconds) / 1024 / 1024); // bytes --> Mbps // Output the transfer metrics string transferMetrics = format("File: %s | Size: %d Bytes | Duration: %.2f Seconds | Speed: %.2f Mbps (approx)", fileTransferred, transferredBytes, transferDurationAsSeconds, transferSpeedAsMbps); addLogEntry("Transfer Metrics - " ~ transferMetrics); } else { // Zero bytes - not applicable addLogEntry("Transfer Metrics - N/A (Zero Byte File)"); } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } } // Recursively validate JSONValue for UTF-8 compliance bool validateUTF8JSON(in JSONValue json) { switch (json.type) { case JSONType.string: return isValidUTF8(json.str); case JSONType.array: foreach (ref item; json.array) { if (!validateUTF8JSON(item)) return false; } break; case JSONType.object: foreach (key, ref value; json.object) { if (!isValidUTF8(key) || !validateUTF8JSON(value)) return false; } break; default: break; // Other types (null, bool, int, float) don't need UTF-8 validation } return true; } // Sanitise the provided onedriveJSONItem into a string that can actually be printed without error or issue string sanitiseJSONItem(JSONValue onedriveJSONItem) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } // Validate UTF-8 before serialisation if (!validateUTF8JSON(onedriveJSONItem)) { return "JSON Validation Failed: JSON data from OneDrive API contains invalid UTF-8 characters"; } // Redact PII in JSON before serialisation redactPII(onedriveJSONItem); // Eventual output variable string sanitisedJSONString; // Try and serialise the JSON into a string try { auto app = appender!string(); toJSON(app, onedriveJSONItem); sanitisedJSONString = app.data; } catch (Exception e) { sanitisedJSONString = "JSON Serialisation Failed: " ~ e.msg; } // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } // Return sanitised JSON string for logging output return sanitisedJSONString; } // Recursively redact PII and sensitive elements from JSONValue void redactPII(ref JSONValue j) { if (j.type == JSONType.object) { foreach (key, ref value; j.object) { // Match Graph's actual keys directly if (key == "email") { value = JSONValue(""); continue; } if (key == "displayName") { value = JSONValue(""); continue; } // Recurse redactPII(value); } } else if (j.type == JSONType.array) { foreach (ref value; j.array) { redactPII(value); } } } // Obtain the Websocket Notification URL void obtainWebSocketNotificationURL() { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } string websocketURL; // Create a new API Instance for this thread and initialise it OneDriveApi queryWebsocketURLApiInstance; queryWebsocketURLApiInstance = new OneDriveApi(appConfig); queryWebsocketURLApiInstance.initialise(); // Try and query Websocket Notification URL try { JSONValue endpointResponse = queryWebsocketURLApiInstance.obtainWebSocketNotificationURL(); // Was a valid JSON response provided? if (endpointResponse.type() == JSONType.object) { // Log response if (debugLogging) {addLogEntry("Response for a Socket.IO Subscription Endpoint: " ~ to!string(endpointResponse), ["debug"]);} // Store the JSON in the configuration for reuse appConfig.websocketEndpointResponse = to!string(endpointResponse); // Extract and store the Notification URL from the response we received (no transformation) websocketURL = endpointResponse["notificationUrl"].str; // Extract and store the expiry appConfig.websocketUrlExpiry = endpointResponse["expirationDateTime"].str; SysTime expiryUTC = SysTime.fromISOExtString(appConfig.websocketUrlExpiry); SysTime expiryLocal = expiryUTC.toLocalTime(); // Do we have a valid Notification URL ? if (!websocketURL.empty) { // Store the websocket notification URL appConfig.websocketNotificationUrl = websocketURL; // Set flag appConfig.websocketNotificationUrlAvailable = true; // Log WebSocket specifics if (debugLogging) { addLogEntry("WebSocket Notification URL: " ~ websocketURL, ["debug"]); addLogEntry("WebSocket Expiry (UTC): " ~ to!string(expiryUTC), ["debug"]); addLogEntry("WebSocket Expiry (Local): " ~ to!string(expiryLocal), ["debug"]); } } } } catch (OneDriveException exception) { // An error, regardless of what it is ... not good // Display what the error is // - 408,429,503,504 errors are handled as a retry within uploadFileOneDriveApiInstance displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory queryWebsocketURLApiInstance.releaseCurlEngine(); queryWebsocketURLApiInstance = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } // Download a single file via --download-file void downloadSingleFile(string pathToQuery) { // Function Start Time SysTime functionStartTime; string logKey; string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // Only set this if we are generating performance processing times if (appConfig.getValueBool("display_processing_time") && debugLogging) { functionStartTime = Clock.currTime(); logKey = generateAlphanumericString(); displayFunctionProcessingStart(thisFunctionName, logKey); } OneDriveApi queryPathDetailsOnline; JSONValue onlinePathData; // Was a path to query passed in? if (pathToQuery.empty) { // Nothing to query addLogEntry("No path to query"); return; } // Create new OneDrive API Instance queryPathDetailsOnline = new OneDriveApi(appConfig); queryPathDetailsOnline.initialise(); try { // Query the OneDrive API, using the path, which will query 'our' OneDrive Account onlinePathData = queryPathDetailsOnline.getPathDetails(pathToQuery); } catch (OneDriveException exception) { if (exception.httpStatusCode == 404) { // Path does not exist online ... addLogEntry("ERROR: The requested path does not exist online. Please check for your file online."); } else { // Display error message displayOneDriveErrorMessage(exception.msg, thisFunctionName); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory queryPathDetailsOnline.releaseCurlEngine(); queryPathDetailsOnline = null; // Perform Garbage Collection GC.collect(); // Return .. nothing to do return; } // Was a valid JSON response provided? if (onlinePathData.type() == JSONType.object) { // Valid JSON item was returned // Is the item a file ? if (isFileItem(onlinePathData)) { // JSON item is a file // Download the file based on the data returned downloadFileItem(onlinePathData); } else { // The provided path is not a file addLogEntry(); addLogEntry("ERROR: The requested path to download is not a file. Please correct this error and try again."); addLogEntry(); } } else { addLogEntry(); addLogEntry("ERROR: The requested file to download has generated an error. Please correct this error and try again."); addLogEntry(); } // OneDrive API Instance Cleanup - Shutdown API, free curl object and memory queryPathDetailsOnline.releaseCurlEngine(); queryPathDetailsOnline = null; // Perform Garbage Collection GC.collect(); // Display function processing time if configured to do so if (appConfig.getValueBool("display_processing_time") && debugLogging) { // Combine module name & running Function displayFunctionProcessingTime(thisFunctionName, functionStartTime, Clock.currTime(), logKey); } } } onedrive-2.5.10/src/util.d000066400000000000000000002322501513710110600153220ustar00rootroot00000000000000// What is this module called? module util; // What does this module require to function? import core.memory; import core.stdc.errno : ENOENT, EINTR, EBUSY, EXDEV, EAGAIN; import core.stdc.stdlib; import core.stdc.string; import core.sys.posix.pwd; import core.sys.posix.signal; import core.sys.posix.sys.resource; import core.sys.posix.sys.stat; import core.sys.posix.unistd; import core.thread; import etc.c.curl; import std.algorithm; import std.array; import std.ascii; import std.base64; import std.conv; import std.datetime; import std.digest.crc; import std.digest.sha; import std.exception; import std.file; import std.format; import std.json; import std.math; import std.net.curl; import std.path; import std.process; import std.random; import std.range; import std.regex; import std.socket; import std.stdio; import std.string; import std.traits; import std.uri; import std.utf; // What other modules that we have created do we need to import? import log; import config; import qxor; import curlEngine; // Global variable for the device name __gshared string deviceName; // Global flag for SIGINT (CTRL-C) and SIGTERM (kill) state __gshared bool exitHandlerTriggered = false; // Global variable for when we last uploaded something or made an online change from a local inotify event __gshared MonoTime lastLocalWrite; // util module variable ulong previousRSS; struct DesktopHints { bool gnome; bool kde; } shared static this() { deviceName = Socket.hostName; } // To assist with filesystem severity issues, configure an enum that can be used enum FsErrorSeverity { warning, error, fatal } // Creates a safe backup of the given item, and only performs the function if not in a --dry-run scenario. // If the path already ends with "--safeBackup-####", the counter is incremented // instead of appending another "--safeBackup-". void safeBackup(const(char)[] path, bool dryRun, bool bypassDataPreservation, out string renamedPath) { // Ensure this is currently null renamedPath = null; bool isDirectory = false; // If the path doesn’t exist, there is nothing to back up if (!exists(path)) { if (debugLogging) { addLogEntry("safeBackup: Skipping backup as local path does not exist: " ~ to!string(path), ["debug"]); } return; } // Is the path a directory? try { isDirectory = isDir(path); } catch (FileException e) { // Path disappeared or became inaccessible between exists() and isDir() if (verboseLogging) { addLogEntry("Path to backup no longer exists or is inaccessible: " ~ to!string(path) ~ " : " ~ e.msg, ["verbose"]); } // Nothing left to back up — exit safely return; } // Is the input path a folder|directory? These should never be renamed if (isDirectory) { if (verboseLogging) { addLogEntry("Renaming request of local directory is being ignored: " ~ to!string(path), ["verbose"]); } return; } // Has the user configured to IGNORE local data protection rules? if (bypassDataPreservation) { addLogEntry("WARNING: Local Data Protection has been disabled - not renaming local file. You may experience data loss on this file: " ~ to!string(path), ["info", "notify"]); return; } // Convert once for convenience const string spath = to!string(path); const string ext = extension(spath); // Compute stem without extension (handles no-extension case too) const size_t stemLen = spath.length >= ext.length ? spath.length - ext.length : spath.length; string stem = spath[0 .. stemLen]; // Tag used for our safe backups string tag = "-" ~ deviceName ~ "-safeBackup-"; // Detect if already a tagged safeBackup on THIS device; if so, bump the 4-digit counter int startN = 1; string baseStem = stem; if (stem.length >= tag.length + 4) { // Slice out last 4 chars and the tag position auto last4 = stem[$ - 4 .. $]; auto tagSpan = stem[$ - (tag.length + 4) .. $ - 4]; bool fourDigits = true; foreach (c; last4) { if (!c.isDigit) { fourDigits = false; break; } } if (fourDigits && tagSpan == tag) { // Already a backup from this device — bump the counter startN = to!int(last4) + 1; baseStem = stem[0 .. $ - (tag.length + 4)]; } } // Find the first available name, capped at 1000 attempts int n = startN; string candidate; while (n <= 1000) { candidate = baseStem ~ tag ~ format("%04d", n) ~ ext; if (!exists(candidate)) break; ++n; } // If we exhausted our attempts, fail out if (n > 1000) { addLogEntry("Failed to backup " ~ spath ~ ": Unique file name could not be found after 1000 attempts", ["error"]); return; } // Log intent if (verboseLogging) { addLogEntry("The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: " ~ spath ~ " -> " ~ candidate, ["verbose"]); } // Perform (or simulate) the rename if (!dryRun) { // Not a --dry-run scenario - attempt the file rename to create a safe backup // Use safeRename() if (safeRename(spath, candidate, dryRun)) { renamedPath = candidate; } else { // Failed to rename using safeRename() addLogEntry("Renaming of local file failed for " ~ spath ~ " -> " ~ candidate, ["error"]); } } else { if (debugLogging) { addLogEntry("DRY-RUN: Skipping renaming local file to preserve existing file and prevent data loss: " ~ spath ~ " -> " ~ candidate, ["debug"]); } } } // Rename the given item, and only performs the function if not in a --dry-run scenario bool safeRename(const(char)[] oldPath, const(char)[] newPath, bool dryRun) { string thisFunctionName = format("%s.%s", strip(__MODULE__), strip(getFunctionName!({}))); if (dryRun) { if (debugLogging) { addLogEntry("DRY-RUN: Skipping local file rename", ["debug"]); } return true; } int maxAttempts = 5; foreach (attempt; 0 .. maxAttempts) { try { if (debugLogging) { addLogEntry("Calling rename(oldPath, newPath)", ["debug"]); } // There are 2 options to rename a file // rename() - https://dlang.org/library/std/file/rename.html // std.file.copy() - https://dlang.org/library/std/file/copy.html // // rename: // It is not possible to rename a file across different mount points or drives. On POSIX, the operation is atomic. That means, if to already exists there will be no time period during the operation where to is missing. // // std.file.copy // Copy file from to file to. File timestamps are preserved. File attributes are preserved, if preserve equals Yes.preserveAttributes // // Use rename() as Linux is POSIX compliant, we have an atomic operation where at no point in time the 'to' is missing. rename(oldPath, newPath); return true; } catch (FileException e) { // Retry on EINTR if (e.errno == EINTR) { // Interrupted by signal → retry // 10ms backoff to avoid spinning if signals are frequent Thread.sleep(dur!"msecs"(10 * (attempt + 1))); continue; } // Retry on EBUSY if (e.errno == EBUSY) { // Filesystem was busy → retry // 25ms backoff to avoid spinning if signals are frequent Thread.sleep(dur!"msecs"(25 * (attempt + 1))); continue; } // Cross-device rename: not retryable if (e.errno == EXDEV) { displayFileSystemErrorMessage("Rename failed (cross-filesystem): " ~ e.msg, thisFunctionName, "oldPath=" ~ to!string(oldPath) ~ " newPath=" ~ to!string(newPath)); return false; } // Everything else: log once and return displayFileSystemErrorMessage(e.msg, thisFunctionName, "oldPath=" ~ to!string(oldPath) ~ " newPath=" ~ to!string(newPath)); return false; } } // If we get here, we exhausted retries // Log the last failure displayFileSystemErrorMessage("Failed to rename after retries: ", thisFunctionName, "oldPath=" ~ to!string(oldPath) ~ " newPath=" ~ to!string(newPath)); return false; } // Deletes the specified file without throwing an exception if there is an issue void safeRemove(const(char)[] path) { string thisFunctionName = format("%s.%s", strip(__MODULE__), strip(getFunctionName!({}))); int maxAttempts = 5; foreach (attempt; 0 .. maxAttempts) { try { // Attempt to remove; no pre-check to avoid TOCTTOU remove(path); return; } catch (FileException e) { if (e.errno == ENOENT) return; // already gone → fine // Retry on EINTR if (e.errno == EINTR) { // Interrupted by signal → retry // 10ms backoff to avoid spinning if signals are frequent Thread.sleep(dur!"msecs"(10 * (attempt + 1))); continue; } // Retry on EBUSY if (e.errno == EBUSY) { // Filesystem was busy → retry // 25ms backoff to avoid spinning if signals are frequent Thread.sleep(dur!"msecs"(25 * (attempt + 1))); continue; } // Anything else is noteworthy (EISDIR, EACCES, etc.) displayFileSystemErrorMessage(e.msg, thisFunctionName, to!string(path)); return; } } // If we get here, we exhausted retries // Log the last failure displayFileSystemErrorMessage("Failed to remove file after retries: " ~ to!string(path), thisFunctionName, to!string(path)); } // Returns the quickXorHash base64 string of a file, or an empty string on failure string computeQuickXorHash(string path) { QuickXor qxor; File file; bool fileOpened = false; scope(exit) { if (fileOpened) { file.close(); } } try { // Open file for reading file = File(path, "rb"); fileOpened = true; // Single stat call for BOTH size and preferred block size ulong fs = 0; size_t blockSize = 4096; // sensible default try { auto de = DirEntry(path); auto st = de.statBuf; // POSIX stat struct inferred if (st.st_size > 0) fs = cast(ulong) st.st_size; if (st.st_blksize > 0) blockSize = cast(size_t) st.st_blksize; } catch (Exception e) { // Best-effort only; keep defaults if stat fails addLogEntry("Unexpected error while stat'ing file for hash sizing: " ~ path ~ " - " ~ e.msg); } // Choose factor based on file size size_t factor; if (fs == 0) { factor = 256; // unknown size -> moderate buffer } else if (fs < 1_048_576UL) { // < 1 MiB factor = 16; // small buffer } else if (fs < 1_073_741_824UL) { // < 1 GiB factor = 256; // medium buffer } else { // >= 1 GiB factor = 512; // larger buffer } // Compute bufSize and clamp to [64 KiB, 8 MiB] size_t bufSize = blockSize * factor; if (bufSize < 64 * 1024) bufSize = 64 * 1024; if (bufSize > 8 * 1024 * 1024) bufSize = 8 * 1024 * 1024; // Allocate outside GC to avoid scanning big buffers auto raw = cast(ubyte*) malloc(bufSize); if (raw is null) { addLogEntry("Failed to compute QuickXor Hash for file: " ~ path ~ " - out of memory allocating buffer"); return ""; } scope(exit) free(raw); ubyte[] buf = raw[0 .. bufSize]; // Large sequential reads, minimal syscall overhead for (;;) { auto chunk = file.rawRead(buf); // returns slice of bytes read if (chunk.length == 0) break; // EOF qxor.put(chunk); } } catch (ErrnoException e) { addLogEntry("Failed to compute QuickXor Hash for file: " ~ path ~ " - " ~ e.msg); return ""; } catch (Exception e) { addLogEntry("Unexpected error while computing QuickXor Hash for file: " ~ path ~ " - " ~ e.msg); return ""; } auto hashResult = qxor.finish(); return Base64.encode(hashResult).idup; } // Returns the SHA256 hash hex string of a file, or an empty string on failure string computeSHA256Hash(string path) { SHA256 sha256; File file; bool fileOpened = false; scope(exit) { if (fileOpened) { file.close(); } } try { // Open file for reading file = File(path, "rb"); fileOpened = true; // Single stat call for BOTH size and preferred block size ulong fs = 0; size_t blockSize = 4096; // sensible default try { auto de = DirEntry(path); auto st = de.statBuf; // POSIX stat struct inferred if (st.st_size > 0) fs = cast(ulong) st.st_size; if (st.st_blksize > 0) blockSize = cast(size_t) st.st_blksize; } catch (Exception e) { // Best-effort only; keep defaults if stat fails addLogEntry("Unexpected error while stat'ing file for hash sizing: " ~ path ~ " - " ~ e.msg); } // Choose factor based on file size size_t factor; if (fs == 0) { factor = 256; // unknown size -> moderate buffer } else if (fs < 1_048_576UL) { // < 1 MiB factor = 16; // small buffer } else if (fs < 1_073_741_824UL) { // < 1 GiB factor = 256; // medium buffer } else { // >= 1 GiB factor = 512; // larger buffer } // Compute bufSize and clamp to [64 KiB, 8 MiB] size_t bufSize = blockSize * factor; if (bufSize < 64 * 1024) bufSize = 64 * 1024; if (bufSize > 8 * 1024 * 1024) bufSize = 8 * 1024 * 1024; // Allocate outside GC to avoid scanning big buffers auto raw = cast(ubyte*) malloc(bufSize); if (raw is null) { addLogEntry("Failed to compute SHA256 Hash for file: " ~ path ~ " - out of memory allocating buffer"); return ""; } scope(exit) free(raw); ubyte[] buf = raw[0 .. bufSize]; // Large sequential reads, minimal syscall overhead for (;;) { auto chunk = file.rawRead(buf); // returns slice of bytes read if (chunk.length == 0) break; // EOF sha256.put(chunk); } } catch (ErrnoException e) { addLogEntry("Failed to compute SHA256 Hash for file: " ~ path ~ " - " ~ e.msg); return ""; } catch (Exception e) { addLogEntry("Unexpected error while computing SHA256 Hash for file: " ~ path ~ " - " ~ e.msg); return ""; } auto hashResult = sha256.finish(); return toHexString(hashResult).idup; } // Converts wildcards (*, ?) to regex // The changes here need to be 100% regression tested before full release Regex!char wild2regex(const(char)[] pattern) { string str; str.reserve(pattern.length + 2); str ~= "^"; foreach (c; pattern) { switch (c) { case '*': str ~= ".*"; // Changed to match any character. Was: str ~= "[^/]*"; break; case '.': str ~= "\\."; break; case '?': str ~= "."; // Changed to match any single character. Was: str ~= "[^/]"; break; case '|': str ~= "$|^"; break; case '+': str ~= "\\+"; break; case ' ': str ~= "\\s"; // Changed to match exactly one whitespace. Was: str ~= "\\s+"; break; case '/': str ~= "\\/"; break; case '(': str ~= "\\("; break; case ')': str ~= "\\)"; break; default: str ~= c; break; } } str ~= "$"; return regex(str, "i"); } // Test Internet access to Microsoft OneDrive using a simple HTTP HEAD request bool testInternetReachability(ApplicationConfig appConfig, bool displayLogging = true) { HTTP http = HTTP(); http.url = "https://login.microsoftonline.com"; // Configure timeouts based on application configuration http.dnsTimeout = dur!"seconds"(appConfig.getValueLong("dns_timeout")); http.connectTimeout = dur!"seconds"(appConfig.getValueLong("connect_timeout")); http.dataTimeout = dur!"seconds"(appConfig.getValueLong("data_timeout")); http.operationTimeout = dur!"seconds"(appConfig.getValueLong("operation_timeout")); // Set IP protocol version http.handle.set(CurlOption.ipresolve, appConfig.getValueLong("ip_protocol_version")); // Explicitly set libcurl options to avoid using signal handlers in a multi-threaded environment // https://curl.se/libcurl/c/CURLOPT_NOSIGNAL.html http.handle.set(CurlOption.nosignal,1); // Explicitly set the use of TCP NAGLE // https://curl.se/libcurl/c/CURLOPT_TCP_NODELAY.html // Ensure that TCP_NODELAY is set to 0 to ensure that TCP NAGLE is enabled http.handle.set(CurlOption.tcp_nodelay,0); // Explicitly set to ensure libcurl keep the connection open for possible later reuse // https://curl.se/libcurl/c/CURLOPT_FORBID_REUSE.html http.handle.set(CurlOption.forbid_reuse,0); // Set HTTP method to HEAD for minimal data transfer http.method = HTTP.Method.head; bool reachedService = false; // Exit scope to ensure cleanup http object scope(exit) { // Shut http down http object http.shutdown(); } // Execute the request and handle exceptions try { if (displayLogging) { addLogEntry("Attempting to contact the Microsoft OneDrive Service"); } http.perform(); // Check response for HTTP status code - consider 2xx and 3xx as "reachable" if (http.statusLine.code >= 200 && http.statusLine.code < 400) { if (displayLogging) { addLogEntry("Successfully reached the Microsoft OneDrive Service"); } reachedService = true; } else { addLogEntry("Failed to reach the Microsoft OneDrive Service. HTTP status code: " ~ to!string(http.statusLine.code)); reachedService = false; } } catch (SocketException e) { addLogEntry("Cannot connect to the Microsoft OneDrive Service - Socket Issue: " ~ e.msg); displayOneDriveErrorMessage(e.msg, getFunctionName!({})); reachedService = false; } catch (CurlException e) { addLogEntry("Cannot connect to the Microsoft OneDrive Service - Network Connection Issue: " ~ e.msg); displayOneDriveErrorMessage(e.msg, getFunctionName!({})); reachedService = false; } catch (Exception e) { addLogEntry("An unexpected error occurred: " ~ e.toString()); displayOneDriveErrorMessage(e.toString(), getFunctionName!({})); reachedService = false; } // Return state return reachedService; } // Retry Internet access test to Microsoft OneDrive bool retryInternetConnectivityTest(ApplicationConfig appConfig) { int retryAttempts = 0; int backoffInterval = 1; // initial backoff interval in seconds int maxBackoffInterval = 3600; // maximum backoff interval in seconds int maxRetryCount = 100; // max retry attempts, reduced for practicality bool isOnline = false; while (retryAttempts < maxRetryCount && !isOnline) { if (backoffInterval < maxBackoffInterval) { backoffInterval = min(backoffInterval * 2, maxBackoffInterval); // exponential increase } if (debugLogging) { addLogEntry(" Retry Attempt: " ~ to!string(retryAttempts + 1), ["debug"]); addLogEntry(" Retry In (seconds): " ~ to!string(backoffInterval), ["debug"]); } Thread.sleep(dur!"seconds"(backoffInterval)); isOnline = testInternetReachability(appConfig); // assuming this function is defined elsewhere if (isOnline) { addLogEntry("Internet connectivity to Microsoft OneDrive service has been restored"); } retryAttempts++; } if (!isOnline) { addLogEntry("ERROR: Was unable to reconnect to the Microsoft OneDrive service after " ~ to!string(maxRetryCount) ~ " attempts!"); } // Return state return isOnline; } // Can we read the local file - as a permissions issue or file corruption will cause a failure // https://github.com/abraunegg/onedrive/issues/113 // returns true if file can be accessed bool readLocalFile(string path) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__) , strip(getFunctionName!({}))); // What is the file size if (getSize(path) != 0) { try { // Attempt to read up to the first 1 byte of the file auto data = read(path, 1); // Check if the read operation was successful if (data.length != 1) { // Read operation not successful addLogEntry("Failed to read the required amount from the file: " ~ path); return false; } } catch (std.file.FileException e) { // Unable to read the file, log the error message displayFileSystemErrorMessage(e.msg, thisFunctionName, path); return false; } return true; } else { // zero byte files cannot be read, return true return true; } } // Calls globMatch for each string in pattern separated by '|' bool multiGlobMatch(const(char)[] path, const(char)[] pattern) { if (path.length == 0 || pattern.length == 0) { return false; } if (!pattern.canFind('|')) { return globMatch!(std.path.CaseSensitive.yes)(path, pattern); } foreach (glob; pattern.split('|')) { if (globMatch!(std.path.CaseSensitive.yes)(path, glob)) { return true; } } return false; } // Does the path pass the Microsoft restriction and limitations about naming files and folders bool isValidName(string path) { // Restriction and limitations about windows naming files and folders // https://msdn.microsoft.com/en-us/library/aa365247 // https://support.microsoft.com/en-us/help/3125202/restrictions-and-limitations-when-you-sync-files-and-folders if (path == ".") { return true; } string itemName = baseName(path).toLower(); // Ensure case-insensitivity // Check for explicitly disallowed names // https://support.microsoft.com/en-us/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa?ui=en-us&rs=en-us&ad=us#invalidfilefoldernames string[] disallowedNames = [ ".lock", "desktop.ini", "CON", "PRN", "AUX", "NUL", "COM0", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT0", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" ]; // Creating an associative array for faster lookup bool[string] disallowedSet; foreach (name; disallowedNames) { disallowedSet[name.toLower()] = true; // Normalise to lowercase } if (disallowedSet.get(itemName, false) || itemName.startsWith("~$") || canFind(itemName, "_vti_")) { return false; } // Regular expression for invalid patterns // https://support.microsoft.com/en-us/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa?ui=en-us&rs=en-us&ad=us#invalidcharacters // Leading whitespace and trailing whitespace // Invalid characters // Trailing dot '.' (not documented above) , however see issue https://github.com/abraunegg/onedrive/issues/2678 //auto invalidNameReg = ctRegex!(`^\s.*|^.*[\s\.]$|.*[<>:"\|\?*/\\].*`); - original to remove at some point auto invalidNameReg = ctRegex!(`^\s+|\s$|\.$|[<>:"\|\?*/\\]`); // revised 25/3/2024 // - ^\s+ matches one or more whitespace characters at the start of the string. The + ensures we match one or more whitespaces, making it more efficient than .* for detecting leading whitespaces. // - \s$ matches a whitespace character at the end of the string. This is more precise than [\s\.]$ because we'll handle the dot separately. // - \.$ specifically matches a dot character at the end of the string, addressing the requirement to catch trailing dots as invalid. // - [<>:"\|\?*/\\] matches any single instance of the specified invalid characters: ", *, :, <, >, ?, /, \, | auto matchResult = match(itemName, invalidNameReg); if (!matchResult.empty) { return false; } // Determine if the path is at the root level, if yes, check that 'forms' is not the first folder auto segments = pathSplitter(path).array; if (segments.length <= 2 && segments.back.toLower() == "forms") { // Check only the last segment, convert to lower as OneDrive is not POSIX compliant, easier to compare return false; } return true; } // Does the path contain any bad whitespace characters bool containsBadWhiteSpace(string path) { // Check for null or empty string if (path.length == 0) { return false; } // Check for root item if (path == ".") { return false; } // https://github.com/abraunegg/onedrive/issues/35 // Issue #35 presented an interesting issue where the filename contained a newline item // 'State-of-the-art, challenges, and open issues in the integration of Internet of'$'\n''Things and Cloud Computing.pdf' // When the check to see if this file was present the GET request queries as follows: // /v1.0/me/drive/root:/.%2FState-of-the-art%2C%20challenges%2C%20and%20open%20issues%20in%20the%20integration%20of%20Internet%20of%0AThings%20and%20Cloud%20Computing.pdf // The '$'\n'' is translated to %0A which causes the OneDrive query to fail // Check for the presence of '%0A' via regex string itemName = encodeComponent(baseName(path)); // Check for encoded newline character return itemName.indexOf("%0A") != -1; } // Does the path contain any ASCII HTML Codes bool containsASCIIHTMLCodes(string path) { // Check for null or empty string if (path.length == 0) { return false; } // Check for root item if (path == ".") { return false; } // https://github.com/abraunegg/onedrive/issues/151 // If a filename contains ASCII HTML codes, it generates an error when attempting to upload this to Microsoft OneDrive // Check if the filename contains an ASCII HTML code sequence // Check for the pattern &# followed by 1 to 4 digits and a semicolon auto invalidASCIICode = ctRegex!(`&#[0-9]{1,4};`); // Use match to search for ASCII HTML codes in the path auto matchResult = match(path, invalidASCIICode); // Return true if ASCII HTML codes are found return !matchResult.empty; } // Does the path contain any ASCII Control Codes bool containsASCIIControlCodes(string path) { // Check for null or empty string if (path.length == 0) { return false; } // Check for root item if (path == ".") { return false; } // https://github.com/abraunegg/onedrive/discussions/2553#discussioncomment-7995254 // Define a ctRegex pattern for ASCII control codes and specific non-ASCII control characters // This pattern includes the ASCII control range and common non-ASCII control characters // Adjust the pattern as needed to include specific characters of concern auto controlCodePattern = ctRegex!(`[\x00-\x1F\x7F]|\p{Cc}`); // Blocks ƒ†¯~‰ (#2553) , allows α (#2598) // Use match to search for ASCII control codes in the path auto matchResult = match(path, controlCodePattern); // Return true if matchResult is not empty (indicating a control code was found) return !matchResult.empty; } // Is the string a valid UTF-8 timestamp string? bool isValidUTF8Timestamp(string input) { try { // Validate the entire string for UTF-8 correctness validate(input); // Throws UTFException if invalid UTF-8 is found // Validate the input against UTF-8 test cases if (!isValidUTF8(input)) { // error message already printed return false; } // Additional edge-case handling because the input format is known and controlled: // Ensure input length is within the expected range for a UTC datetime if (input.length < 20 || input.length > 30) { // not the correct length addLogEntry("UTF-8 validation failed: Input '" ~ input ~ "' is not within the expected length range for UTC datetime strings (20-30 characters)."); return false; } return true; } catch (UTFException) { addLogEntry("UTF-8 validation failed: Input '" ~ input ~ "' contains invalid UTF-8 characters."); return false; } } // Is the string a valid UTF-8 string? bool isValidUTF8(string input) { try { // Validate the entire string for UTF-8 correctness validate(input); // Throws UTFException if invalid UTF-8 is found // Iterate through each character using byUTF to ensure proper UTF-8 decoding auto it = input.byUTF!(char); foreach (_; it) { // Iterating over the range ensures every UTF-8 sequence in the string is decoded into valid `dchar`s. // Throws a UTFException if an invalid UTF-8 sequence is encountered during decoding. } // Check for replacement characters if (input.count!((dchar c) => c == '\uFFFD') > 0) { // contains replacement character addLogEntry("UTF-8 validation failed: Input contains replacement characters (�)."); return false; } // return true return true; } catch (UTFException) { addLogEntry("UTF-8 validation failed: Input '" ~ input ~ "' contains invalid UTF-8 characters."); return false; } } // Is the path a valid UTF-16 encoded path? bool isValidUTF16(string path) { // Check for null or empty string if (path.length == 0) { return true; } // Check for root item if (path == ".") { return true; } auto wpath = toUTF16(path); // Convert to UTF-16 encoding auto it = wpath.byCodeUnit; while (!it.empty) { ushort current = it.front; // Check for valid single unit if (current <= 0xD7FF || (current >= 0xE000 && current <= 0xFFFF)) { it.popFront(); } // Check for valid surrogate pair else if (current >= 0xD800 && current <= 0xDBFF) { it.popFront(); if (it.empty || it.front < 0xDC00 || it.front > 0xDFFF) { return false; // Invalid surrogate pair } it.popFront(); } else { return false; // Invalid code unit } } return true; } // Validate that the provided string is a valid date time stamp in UTC format bool isValidUTCDateTime(string dateTimeString) { // Regular expression for validating the string against UTC datetime format // Allows for an optional fractional second part (e.g., .123 or .123456789) auto pattern = regex(r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$"); // Validate for UTF-8 first if (!isValidUTF8Timestamp(dateTimeString)) { if (dateTimeString.empty) { // empty string addLogEntry("BAD TIMESTAMP (UTF-8 FAIL): empty string"); } else { // log string that caused UTF-8 failure addLogEntry("BAD TIMESTAMP (UTF-8 FAIL): " ~ dateTimeString); } return false; } // First, check if the string matches the pattern if (!match(dateTimeString, pattern)) { addLogEntry("BAD TIMESTAMP (REGEX FAIL): " ~ dateTimeString); return false; } // Attempt to parse the string into a DateTime object try { auto dt = SysTime.fromISOExtString(dateTimeString); return true; } catch (TimeException) { addLogEntry("BAD TIMESTAMP (CONVERSION FAIL): " ~ dateTimeString); return false; } } // Does the path contain any HTML URL encoded items (e.g., '%20' for space) bool containsURLEncodedItems(string path) { // Check for null or empty string if (path.length == 0) { return false; } // Pattern for percent encoding: % followed by two hexadecimal digits auto urlEncodedPattern = ctRegex!(`%[0-9a-fA-F]{2}`); // Search for URL encoded items in the string auto matchResult = match(path, urlEncodedPattern); // Return true if URL encoded items are found return !matchResult.empty; } // Parse and display error message received from OneDrive void displayOneDriveErrorMessage(string message, string callingFunction) { addLogEntry(); addLogEntry("ERROR: Microsoft OneDrive API returned an error with the following message:"); auto errorArray = splitLines(message); addLogEntry(" Error Message: " ~ to!string(errorArray[0])); // Extract 'message' as the reason JSONValue errorMessage = parseJSON(replace(message, errorArray[0], "")); // What is the reason for the error if (errorMessage.type() == JSONType.object) { // configure the error reason string errorReason; string errorCode; string requestDate; string requestId; string localizedMessage; // set the reason for the error try { // Use error_description as reason errorReason = errorMessage["error_description"].str; } catch (JSONException e) { // we dont want to do anything here } // set the reason for the error try { // Use ["error"]["message"] as reason errorReason = errorMessage["error"]["message"].str; } catch (JSONException e) { // we dont want to do anything here } // Microsoft has started adding 'localizedMessage' to error JSON responses. If this is available, use this try { // Use ["error"]["localizedMessage"] as localised reason localizedMessage = errorMessage["error"]["localizedMessage"].str; } catch (JSONException e) { // we dont want to do anything here if not available } // Display the error reason if (errorReason.startsWith(" 0) { // First line: usually the most useful errorMessage = to!string(errorLines[0]); addLogEntry(" Error Message: " ~ errorMessage); // Remaining lines (if any) often contain errno / path / syscall details if (errorLines.length > 1) { addLogEntry(" Error Details:"); foreach (i, line; errorLines[1 .. $]) { // Avoid logging empty lines, but keep order if (!line.empty) { addLogEntry(" - " ~ to!string(line)); } } } } else { addLogEntry(" Error Message: No error message available"); } // Disk space diagnostics (best-effort) // We intentionally probe both the current directory and the target path directory when possible. try { // Always check the current working directory as a baseline ulong freeCwd = to!ulong(getAvailableDiskSpace(".")); addLogEntry(" Disk Space (CWD): " ~ to!string(freeCwd) ~ " bytes available"); // If we have a context path, also check its parent directory when possible. // We keep this conservative: if anything throws, just log the exception. if (!contextPath.empty) { string targetProbePath = contextPath; // If it's a file path, probe the parent directory (where writes/renames happen). // Avoid throwing if parentDir isn't available or contextPath is weird. try { // std.path.dirName handles both file/dir paths; if it returns ".", keep as-is. import std.path : dirName; auto parent = dirName(contextPath); if (!parent.empty) targetProbePath = parent; } catch (Exception e) { addLogEntry(" NOTE: Failed to derive parent directory from path: " ~ e.msg); } ulong freeTarget = to!ulong(getAvailableDiskSpace(targetProbePath)); addLogEntry(" Disk Space (Path): " ~ to!string(freeTarget) ~ " bytes available (parent path: " ~ targetProbePath ~ ")"); // Preserve existing behaviour: if disk space check returns 0, force exit. // (Assumes getAvailableDiskSpace returns 0 on a hard failure in your implementation.) if (freeTarget == 0 || freeCwd == 0) { // Must force exit here, allow logging to be done forceExit(); } } else { // Preserve existing behaviour: if disk space check returns 0, force exit. if (freeCwd == 0) { forceExit(); } } } catch (Exception e) { // Handle exceptions from disk space check or type conversion addLogEntry(" NOTE: Exception during disk space check: " ~ e.msg); } // Add note for WARNING messages if (headerPrefix == "WARNING") { addLogEntry(); addLogEntry("NOTE: This error is non-fatal; the client will continue to operate, but this may affect future operations if not resolved"); addLogEntry(); } // Add note for ERROR messages if (headerPrefix == "ERROR") { addLogEntry(); addLogEntry("NOTE: This error requires attention; the client may continue running, but functionality is impaired and the issue should be resolved."); addLogEntry(); } // Add note for FATAL messages if (headerPrefix == "FATAL") { addLogEntry(); addLogEntry("NOTE: This error is fatal; the client cannot continue and this issue must be corrected before retrying. The client will now attempt to exit in a safe and orderly manner."); addLogEntry(); } // Separate this block from surrounding log output addLogEntry(); } // Display the POSIX Error Message void displayPosixErrorMessage(string message) { addLogEntry(); // used rather than writeln addLogEntry("ERROR: Microsoft OneDrive API returned data that highlights a POSIX compliance issue:"); addLogEntry(" Error Message: " ~ message); } // Display the Error Message void displayGeneralErrorMessage(Exception e, string callingFunction=__FUNCTION__, int lineno=__LINE__) { addLogEntry(); // used rather than writeln addLogEntry("ERROR: Encountered a " ~ e.classinfo.name ~ ":"); addLogEntry(" Error Message: " ~ e.msg); addLogEntry(" Calling Function: " ~ callingFunction); addLogEntry(" Line number: " ~ to!string(lineno)); } // Get the function name that is being called to assist with identifying where an error is being generated string getFunctionName(alias func)() { return __traits(identifier, __traits(parent, func)) ~ "()\n"; } JSONValue fetchOnlineURLContent(string url) { // Function variables char[] content; JSONValue onlineContent; // Setup HTTP request HTTP http = HTTP(); // Exit scope to ensure cleanup scope(exit) { // Shut http down and destroy http.shutdown(); object.destroy(http); // Perform Garbage Collection GC.collect(); // Return free memory to the OS GC.minimize(); } // Configure the URL to access http.url = url; // HTTP the connection method http.method = HTTP.Method.get; // Data receive handler http.onReceive = (ubyte[] data) { content ~= data; // Append data as it's received return data.length; }; // Perform HTTP request http.perform(); // Parse Content onlineContent = parseJSON(to!string(content)); // Return onlineResponse return onlineContent; } // Get the latest release version from GitHub JSONValue getLatestReleaseDetails() { JSONValue githubLatest; JSONValue versionDetails; string latestTag; string publishedDate; // Query GitHub for the 'latest' release details try { githubLatest = fetchOnlineURLContent("https://api.github.com/repos/abraunegg/onedrive/releases/latest"); } catch (CurlException e) { if (debugLogging) {addLogEntry("CurlException: Unable to query GitHub for latest release - " ~ e.msg, ["debug"]);} } catch (JSONException e) { if (debugLogging) {addLogEntry("JSONException: Unable to parse GitHub JSON response - " ~ e.msg, ["debug"]);} } // githubLatest has to be a valid JSON object if (githubLatest.type() == JSONType.object){ // use the returned tag_name if ("tag_name" in githubLatest) { // use the provided tag // "tag_name": "vA.B.CC" and strip 'v' latestTag = strip(githubLatest["tag_name"].str, "v"); } else { // set to latestTag zeros if (debugLogging) {addLogEntry("'tag_name' unavailable in JSON response. Setting GitHub 'tag_name' release version to 0.0.0", ["debug"]);} latestTag = "0.0.0"; } // use the returned published_at date if ("published_at" in githubLatest) { // use the provided value publishedDate = githubLatest["published_at"].str; } else { // set to v2.0.0 release date if (debugLogging) {addLogEntry("'published_at' unavailable in JSON response. Setting GitHub 'published_at' date to 2018-07-18T18:00:00Z", ["debug"]);} publishedDate = "2018-07-18T18:00:00Z"; } } else { // JSONValue is not an object if (debugLogging) {addLogEntry("Invalid JSON Object response from GitHub. Setting GitHub 'tag_name' release version to 0.0.0", ["debug"]);} latestTag = "0.0.0"; if (debugLogging) {addLogEntry("Invalid JSON Object. Setting GitHub 'published_at' date to 2018-07-18T18:00:00Z", ["debug"]);} publishedDate = "2018-07-18T18:00:00Z"; } // return the latest github version and published date as our own JSON versionDetails = [ "latestTag": JSONValue(latestTag), "publishedDate": JSONValue(publishedDate) ]; // return JSON return versionDetails; } // Get the release details from the 'current' running version JSONValue getCurrentVersionDetails(string thisVersion) { JSONValue githubDetails; JSONValue versionDetails; string versionTag = "v" ~ thisVersion; string publishedDate; // Query GitHub for the release details to match the running version try { githubDetails = fetchOnlineURLContent("https://api.github.com/repos/abraunegg/onedrive/releases"); } catch (CurlException e) { if (debugLogging) {addLogEntry("CurlException: Unable to query GitHub for release details - " ~ e.msg, ["debug"]);} return parseJSON(`{"Error": "CurlException", "message": "` ~ e.msg ~ `"}`); } catch (JSONException e) { if (debugLogging) {addLogEntry("JSONException: Unable to parse GitHub JSON response - " ~ e.msg, ["debug"]);} return parseJSON(`{"Error": "JSONException", "message": "` ~ e.msg ~ `"}`); } // githubDetails has to be a valid JSON array if (githubDetails.type() == JSONType.array){ foreach (searchResult; githubDetails.array) { // searchResult["tag_name"].str; if (searchResult["tag_name"].str == versionTag) { if (debugLogging) { addLogEntry("MATCHED version", ["debug"]); addLogEntry("tag_name: " ~ searchResult["tag_name"].str, ["debug"]); addLogEntry("published_at: " ~ searchResult["published_at"].str, ["debug"]); } publishedDate = searchResult["published_at"].str; } } if (publishedDate.empty) { // empty .. no version match ? // set to v2.0.0 release date if (debugLogging) {addLogEntry("'published_at' unavailable in JSON response. Setting GitHub 'published_at' date to 2018-07-18T18:00:00Z", ["debug"]);} publishedDate = "2018-07-18T18:00:00Z"; } } else { // JSONValue is not an Array if (debugLogging) {addLogEntry("Invalid JSON Array. Setting GitHub 'published_at' date to 2018-07-18T18:00:00Z", ["debug"]);} publishedDate = "2018-07-18T18:00:00Z"; } // return the latest github version and published date as our own JSON versionDetails = [ "versionTag": JSONValue(thisVersion), "publishedDate": JSONValue(publishedDate) ]; // return JSON return versionDetails; } // Check the application version versus GitHub latestTag void checkApplicationVersion() { // Get the latest details from GitHub JSONValue latestVersionDetails = getLatestReleaseDetails(); string latestVersion = latestVersionDetails["latestTag"].str; SysTime publishedDate = SysTime.fromISOExtString(latestVersionDetails["publishedDate"].str).toUTC(); SysTime releaseGracePeriod = publishedDate; SysTime currentTime = Clock.currTime().toUTC(); // drop fraction seconds publishedDate.fracSecs = Duration.zero; currentTime.fracSecs = Duration.zero; releaseGracePeriod.fracSecs = Duration.zero; // roll the grace period forward to allow distributions to catch up based on their release cycles releaseGracePeriod = releaseGracePeriod.add!"months"(1); // what is this clients version? auto currentVersionArray = strip(strip(import("version"), "v")).split("-"); string applicationVersion = currentVersionArray[0]; // debug output if (debugLogging) { addLogEntry("applicationVersion: " ~ applicationVersion, ["debug"]); addLogEntry("latestVersion: " ~ latestVersion, ["debug"]); addLogEntry("publishedDate: " ~ to!string(publishedDate), ["debug"]); addLogEntry("currentTime: " ~ to!string(currentTime), ["debug"]); addLogEntry("releaseGracePeriod: " ~ to!string(releaseGracePeriod), ["debug"]); } // display details if not current // is application version is older than available on GitHub if (applicationVersion != latestVersion) { // application version is different bool displayObsolete = false; // what warning do we present? if (applicationVersion < latestVersion) { // go get this running version details JSONValue thisVersionDetails = getCurrentVersionDetails(applicationVersion); SysTime thisVersionPublishedDate = SysTime.fromISOExtString(thisVersionDetails["publishedDate"].str).toUTC(); thisVersionPublishedDate.fracSecs = Duration.zero; if (debugLogging) {addLogEntry("thisVersionPublishedDate: " ~ to!string(thisVersionPublishedDate), ["debug"]);} // the running version grace period is its release date + 1 month SysTime thisVersionReleaseGracePeriod = thisVersionPublishedDate; thisVersionReleaseGracePeriod = thisVersionReleaseGracePeriod.add!"months"(1); if (debugLogging) {addLogEntry("thisVersionReleaseGracePeriod: " ~ to!string(thisVersionReleaseGracePeriod), ["debug"]);} // Is this running version obsolete ? if (!displayObsolete) { // if releaseGracePeriod > currentTime // display an information warning that there is a new release available if (releaseGracePeriod.toUnixTime() > currentTime.toUnixTime()) { // inside release grace period ... set flag to false displayObsolete = false; } else { // outside grace period displayObsolete = true; } } // display version response addLogEntry(); if (!displayObsolete) { // display the new version is available message addLogEntry("INFO: A new onedrive client version is available. Please upgrade your client version when possible.", ["info", "notify"]); } else { // display the obsolete message addLogEntry("WARNING: Your onedrive client version is now obsolete and unsupported. Please upgrade your client version.", ["info", "notify"]); } addLogEntry("Current Application Version: " ~ applicationVersion); addLogEntry("Version Available: " ~ latestVersion); addLogEntry(); } } } bool hasId(JSONValue item) { return ("id" in item) != null; } bool hasMimeType(const ref JSONValue item) { return ("mimeType" in item["file"]) != null; } bool hasQuota(JSONValue item) { return ("quota" in item) != null; } bool hasQuotaState(JSONValue item) { return ("state" in item["quota"]) != null; } bool isItemDeleted(JSONValue item) { return ("deleted" in item) != null; } bool isItemRoot(JSONValue item) { return ("root" in item) != null; } bool hasParentReference(const ref JSONValue item) { return ("parentReference" in item) != null; } bool hasParentReferenceDriveId(JSONValue item) { return ("driveId" in item["parentReference"]) != null; } bool hasParentReferenceId(JSONValue item) { return ("id" in item["parentReference"]) != null; } bool hasParentReferencePath(JSONValue item) { return ("path" in item["parentReference"]) != null; } bool isFolderItem(const ref JSONValue item) { return ("folder" in item) != null; } bool isRemoteFolderItem(const ref JSONValue item) { if (isItemRemote(item)) { return ("folder" in item["remoteItem"]) != null; } else { return false; } } bool isFileItem(const ref JSONValue item) { return ("file" in item) != null; } bool isItemRemote(const ref JSONValue item) { return ("remoteItem" in item) != null; } // Check if ["remoteItem"]["parentReference"]["driveId"] exists bool hasRemoteParentDriveId(const ref JSONValue item) { return ("remoteItem" in item) && ("parentReference" in item["remoteItem"]) && ("driveId" in item["remoteItem"]["parentReference"]); } // Check if ["remoteItem"]["id"] exists bool hasRemoteItemId(const ref JSONValue item) { return ("remoteItem" in item) && ("id" in item["remoteItem"]); } bool isItemFile(const ref JSONValue item) { return ("file" in item) != null; } bool isItemFolder(const ref JSONValue item) { return ("folder" in item) != null; } bool hasFileSize(const ref JSONValue item) { return ("size" in item) != null; } // Function to determine if the final component of the provided path is a .file or .folder bool isDotFile(const(string) path) { // Check for null or empty path if (path is null || path.length == 0) { return false; } // Special case for root if (path == ".") { return false; } // Extract the last component of the path auto paths = pathSplitter(buildNormalizedPath(path)); // Optimised way to fetch the last component string lastComponent = paths.empty ? "" : paths.back; // Check if the last component starts with a dot return startsWith(lastComponent, "."); } bool isMalware(const ref JSONValue item) { return ("malware" in item) != null; } bool isOneNotePackageFolder(const ref JSONValue item) { if ("package" in item) { auto pkg = item["package"]; if ("type" in pkg && pkg["type"].type == JSONType.string) { return pkg["type"].str == "oneNote"; } } return false; } bool hasHashes(const ref JSONValue item) { return ("hashes" in item["file"]) != null; } bool hasZeroHashes(const ref JSONValue item) { // Check if "hashes" exists under "file" and is empty if ("hashes" in item["file"]) { auto hashes = item["file"]["hashes"]; if (hashes.type == JSONType.object && hashes.object.keys.length == 0) { return true; } } return false; } bool hasQuickXorHash(const ref JSONValue item) { return ("quickXorHash" in item["file"]["hashes"]) != null; } bool hasSHA256Hash(const ref JSONValue item) { return ("sha256Hash" in item["file"]["hashes"]) != null; } bool isMicrosoftOneNoteMimeType1(const ref JSONValue item) { return (item["file"]["mimeType"].str) == "application/msonenote"; } bool isMicrosoftOneNoteMimeType2(const ref JSONValue item) { return (item["file"]["mimeType"].str) == "application/octet-stream"; } bool isMicrosoftOneNoteFileExtensionType1(const ref JSONValue item) { return item["name"].str.endsWith(".one"); } bool isMicrosoftOneNoteFileExtensionType2(const ref JSONValue item) { return item["name"].str.endsWith(".onetoc2"); } bool hasUploadURL(const ref JSONValue item) { return ("uploadUrl" in item) != null; } bool hasNextExpectedRanges(const ref JSONValue item) { return ("nextExpectedRanges" in item) != null; } bool hasLocalPath(const ref JSONValue item) { return ("localPath" in item) != null; } bool hasETag(const ref JSONValue item) { return ("eTag" in item) != null; } bool hasSharedElement(const ref JSONValue item) { return ("shared" in item) != null; } bool hasName(const ref JSONValue item) { return ("name" in item) != null; } bool hasCreatedBy(const ref JSONValue item) { return ("createdBy" in item) != null; } bool hasCreatedByUser(const ref JSONValue item) { return ("user" in item["createdBy"]) != null; } bool hasCreatedByUserDisplayName(const ref JSONValue item) { if (hasCreatedBy(item)) { if (hasCreatedByUser(item)) { return ("displayName" in item["createdBy"]["user"]) != null; } else { return false; } } else { return false; } } bool hasLastModifiedBy(const ref JSONValue item) { return ("lastModifiedBy" in item) != null; } bool hasLastModifiedByUser(const ref JSONValue item) { return ("user" in item["lastModifiedBy"]) != null; } bool hasLastModifiedByUserDisplayName(const ref JSONValue item) { if (hasLastModifiedBy(item)) { if (hasLastModifiedByUser(item)) { return ("displayName" in item["lastModifiedBy"]["user"]) != null; } else { return false; } } else { return false; } } // Check Intune JSON response for 'accessToken' bool hasAccessTokenData(const ref JSONValue item) { return ("accessToken" in item) != null; } // Check Intune JSON response for 'account' bool hasAccountData(const ref JSONValue item) { return ("account" in item) != null; } // Check Intune JSON response for 'expiresOn' bool hasExpiresOn(const ref JSONValue item) { return ("expiresOn" in item) != null; } // Resumable Download checks bool hasDriveId(const ref JSONValue item) { return ("driveId" in item) != null; } bool hasItemId(const ref JSONValue item) { return ("itemId" in item) != null; } bool hasDownloadFilename(const ref JSONValue item) { return ("downloadFilename" in item) != null; } bool hasResumeOffset(const ref JSONValue item) { return ("resumeOffset" in item) != null; } bool hasOnlineHash(const ref JSONValue item) { return ("onlineHash" in item) != null; } bool hasQuickXorHashResume(const ref JSONValue item) { return ("quickXorHash" in item["onlineHash"]) != null; } bool hasSHA256HashResume(const ref JSONValue item) { return ("sha256Hash" in item["onlineHash"]) != null; } // Test if a path is the equivalent of root '.' bool isRootEquivalent(string inputPath) { auto normalisedPath = buildNormalizedPath(inputPath); return normalisedPath == "." || normalisedPath == ""; } // Convert bytes to GB string byteToGibiByte(ulong bytes) { if (bytes == 0) { return "0.00"; // or handle the zero case as needed } double gib = bytes / 1073741824.0; // 1024^3 for direct conversion return format("%.2f", gib); // Format to ensure two decimal places } // Test if entrypoint.sh exists on the root filesystem bool entrypointExists(string basePath = "/") { try { // Build the path to the entrypoint.sh file string entrypointPath = buildNormalizedPath(buildPath(basePath, "entrypoint.sh")); // Check if the path exists and return the result return exists(entrypointPath); } catch (Exception e) { // Handle any exceptions (e.g., permission issues, invalid path) addLogEntry("An error occurred: " ~ e.msg); return false; } } // Generate a random alphanumeric string with specified length string generateAlphanumericString(size_t length = 16) { // Ensure length is not zero if (length == 0) { throw new Exception("Length must be greater than 0"); } auto asciiLetters = to!(dchar[])(letters); auto asciiDigits = to!(dchar[])(digits); dchar[] randomString; randomString.length = length; // Create a random number generator auto rndGen = Random(unpredictableSeed); // Fill the string with random alphanumeric characters fill(randomString[], randomCover(chain(asciiLetters, asciiDigits), rndGen)); return to!string(randomString); } // Display internal memory stats pre garbage collection void displayMemoryUsagePreGC() { // Display memory usage addLogEntry(); addLogEntry("Memory Usage PRE Garbage Collection (KB)"); addLogEntry("-----------------------------------------------------"); writeMemoryStats(); addLogEntry(); } // Display internal memory stats post garbage collection + RSS (actual memory being used) void displayMemoryUsagePostGC() { // Display memory usage title addLogEntry("Memory Usage POST Garbage Collection (KB)"); addLogEntry("-----------------------------------------------------"); writeMemoryStats(); // Assuming this function logs memory stats correctly // Query the actual Resident Set Size (RSS) for the PID pid_t pid = getCurrentPID(); ulong rss = getRSS(pid); // Check and log the previous RSS value if (previousRSS != 0) { addLogEntry("previous Resident Set Size (RSS) = " ~ to!string(previousRSS) ~ " KB"); // Calculate and log the difference in RSS long difference = rss - previousRSS; // 'difference' can be negative, use 'long' to handle it string sign = difference > 0 ? "+" : (difference < 0 ? "" : ""); // Determine the sign for display, no sign for zero addLogEntry("difference in Resident Set Size (RSS) = " ~ sign ~ to!string(difference) ~ " KB"); } // Update previous RSS with the new value previousRSS = rss; // Closeout addLogEntry(); } // Write internal memory stats void writeMemoryStats() { addLogEntry("current memory usedSize = " ~ to!string((GC.stats.usedSize/1024))); // number of used bytes on the GC heap (might only get updated after a collection) addLogEntry("current memory freeSize = " ~ to!string((GC.stats.freeSize/1024))); // number of free bytes on the GC heap (might only get updated after a collection) addLogEntry("current memory allocatedInCurrentThread = " ~ to!string((GC.stats.allocatedInCurrentThread/1024))); // number of bytes allocated for current thread since program start // Query the actual Resident Set Size (RSS) for the PID pid_t pid = getCurrentPID(); ulong rss = getRSS(pid); // The RSS includes all memory that is currently marked as occupied by the process. // Over time, the heap can become fragmented. Even after garbage collection, fragmented memory blocks may not be contiguous enough to be returned to the OS, leading to an increase in the reported memory usage despite having free space. // This includes memory that might not be actively used but has not been returned to the system. // The GC.minimize() function can sometimes cause an increase in RSS due to how memory pages are managed and freed. addLogEntry("current Resident Set Size (RSS) = " ~ to!string(rss) ~ " KB"); // actual memory in RAM used by the process at this point in time } // Return the username of the UID running the 'onedrive' process string getUserName() { // Retrieve the UID of the current user auto uid = getuid(); // Retrieve password file entry for the user auto pw = getpwuid(uid); // If user info is not found (e.g. no /etc/passwd entry), fallback to environment if (pw is null) { if (debugLogging) { addLogEntry("Unable to retrieve user info for UID: " ~ to!string(uid), ["debug"]); addLogEntry("Falling back to environment variable USER or returning 'unknown'", ["debug"]); } // Try environment variable string userEnv = environment.get("USER", "unknown"); return userEnv.length > 0 ? userEnv : "unknown"; } // If pw is valid, we can safely access pw.pw_name string userName = to!string(fromStringz(pw.pw_name)); // Log User identifiers from process if (debugLogging) { addLogEntry("Process ID: " ~ to!string(pw), ["debug"]); addLogEntry("User UID: " ~ to!string(pw.pw_uid), ["debug"]); addLogEntry("User GID: " ~ to!string(pw.pw_gid), ["debug"]); } // Check if username is valid if (!userName.empty) { if (debugLogging) {addLogEntry("User Name: " ~ userName, ["debug"]);} return userName; } else { // Log and return unknown user if (debugLogging) {addLogEntry("User Name: unknown", ["debug"]);} return "unknown"; } } // Get resource limit in POSIX portable manner (soft limit max open files) ulong getSoftOpenFilesLimit() { rlimit lim; if (getrlimit(RLIMIT_NOFILE, &lim) == 0) return cast(ulong) lim.rlim_cur; // soft limit return 0; } // Get resource limit in POSIX portable manner (hard limit max open files) ulong getHardOpenFilesLimit() { rlimit lim; if (getrlimit(RLIMIT_NOFILE, &lim) == 0) return cast(ulong) lim.rlim_max; // hard limit return 0; // or throw / handle error } // Calculate the ETA for when a 'large file' will be completed (upload & download operations) int calc_eta(size_t counter, size_t iterations, long start_time) { if (counter == 0) { return 0; // Avoid division by zero } // Get the current time as a Unix timestamp (seconds since the epoch, January 1, 1970, 00:00:00 UTC) SysTime currentTime = Clock.currTime(); long current_time = currentTime.toUnixTime(); // 'start_time' must be less than 'current_time' otherwise ETA will have negative values if (start_time > current_time) { if (debugLogging) { addLogEntry("Warning: start_time is in the future. Cannot calculate ETA.", ["debug"]); } return 0; } // Calculate duration long duration = (current_time - start_time); // Calculate the ratio we are at double ratio = cast(double) counter / iterations; // Calculate segments left to download auto segments_remaining = (iterations > counter) ? (iterations - counter) : 0; // Calculate the average time per iteration so far double avg_time_per_iteration = cast(double) duration / counter; // Debug output for the ETA calculation if (debugLogging) { addLogEntry("counter: " ~ to!string(counter), ["debug"]); addLogEntry("iterations: " ~ to!string(iterations), ["debug"]); addLogEntry("segments_remaining: " ~ to!string(segments_remaining), ["debug"]); addLogEntry("ratio: " ~ format("%.2f", ratio), ["debug"]); addLogEntry("start_time: " ~ to!string(start_time), ["debug"]); addLogEntry("current_time: " ~ to!string(current_time), ["debug"]); addLogEntry("duration: " ~ to!string(duration), ["debug"]); addLogEntry("avg_time_per_iteration: " ~ format("%.2f", avg_time_per_iteration), ["debug"]); } // Return the ETA or duration if (counter != iterations) { auto eta_sec = avg_time_per_iteration * segments_remaining; // ETA Debug if (debugLogging) { addLogEntry("eta_sec: " ~ to!string(eta_sec), ["debug"]); addLogEntry("estimated_total_time: " ~ to!string(avg_time_per_iteration * iterations), ["debug"]); } // Return ETA return eta_sec > 0 ? cast(int) ceil(eta_sec) : 0; } else { // Return the average time per iteration for the last iteration return cast(int) ceil(avg_time_per_iteration); } } // Use the ETA value and return a formatted string in a consistent manner string formatETA(int eta) { // How do we format the ETA string. Guard against zero and negative values if (eta <= 0) { return "| ETA --:--:--"; } int h, m, s; dur!"seconds"(eta).split!("hours", "minutes", "seconds")(h, m, s); return format!"| ETA %02d:%02d:%02d"(h, m, s); } // Force Exit due to failure void forceExit() { // Allow any logging complete before we force exit Thread.sleep(dur!("msecs")(500)); // Shutdown logging, which also flushes all logging buffers shutdownLogging(); // Setup signal handling for the exit scope setupExitScopeSignalHandler(); // Force Exit exit(EXIT_FAILURE); } // Get the current PID of the application pid_t getCurrentPID() { // The '/proc/self' is a symlink to the current process's proc directory string path = "/proc/self/stat"; // Read the content of the stat file string content; try { content = readText(path); } catch (Exception e) { writeln("Failed to read stat file: ", e.msg); return 0; } // The first value in the stat file is the PID auto parts = split(content); return to!pid_t(parts[0]); // Convert the first part to pid_t } // Access the Resident Set Size (RSS) based on the PID of the running application ulong getRSS(pid_t pid) { // Construct the path to the statm file for the given PID string path = format("/proc/%s/statm", to!string(pid)); // Read the content of the file string content; try { content = readText(path); } catch (Exception e) { writeln("Failed to read statm file: ", e.msg); return 0; } // Split the content and get the RSS (second value) auto stats = split(content); if (stats.length < 2) { writeln("Unexpected format in statm file."); return 0; } // RSS is in pages, convert it to kilobytes ulong rssPages = to!ulong(stats[1]); ulong rssKilobytes = rssPages * sysconf(_SC_PAGESIZE) / 1024; return rssKilobytes; } // Getting around the @nogc problem // https://p0nce.github.io/d-idioms/#Bypassing-@nogc auto assumeNoGC(T) (T t) if (isFunctionPointer!T || isDelegate!T) { enum attrs = functionAttributes!T | FunctionAttribute.nogc; return cast(SetFunctionAttributes!(T, functionLinkage!T, attrs)) t; } // When using exit scopes, set up this to catch any undesirable signal void setupExitScopeSignalHandler() { sigaction_t action; action.sa_handler = &exitScopeSignalHandler; // Direct function pointer assignment sigemptyset(&action.sa_mask); // Initialize the signal set to empty action.sa_flags = 0; sigaction(SIGSEGV, &action, null); // Invalid Memory Access signal } // Catch any SIGSEV generated by the exit scopes extern(C) nothrow @nogc @system void exitScopeSignalHandler(int signo) { if (signo == SIGSEGV) { assumeNoGC ( () { // Caught a SIGSEGV but everything was shutdown cleanly ..... //printf("Caught a SIGSEGV but everything was shutdown cleanly .....\n"); exit(0); })(); } } // Return the compiler details string compilerDetails() { version(DigitalMars) enum compiler = "DMD"; else version(LDC) enum compiler = "LDC"; else version(GNU) enum compiler = "GDC"; else enum compiler = "Unknown compiler"; string compilerString = compiler ~ " " ~ to!string(__VERSION__); return compilerString; } // Return the curl version details string getCurlVersionString() { // Get curl version auto versionInfo = curl_version(); return to!string(versionInfo); } // Function to return the decoded curl version as a string string getCurlVersionNumeric() { // Get curl version info using curl_version_info auto curlVersionDetails = curl_version_info(CURLVERSION_NOW); // Extract the major, minor, and patch numbers from version_num uint versionNum = curlVersionDetails.version_num; // The version number is in the format 0xXXYYZZ uint major = (versionNum >> 16) & 0xFF; // Extract XX (major version) uint minor = (versionNum >> 8) & 0xFF; // Extract YY (minor version) uint patch = versionNum & 0xFF; // Extract ZZ (patch version) // Return the version in the format "major.minor.patch" return major.to!string ~ "." ~ minor.to!string ~ "." ~ patch.to!string; } // Test the curl version against known curl versions with HTTP/2 issues bool isBadCurlVersion(string curlVersion) { // List of known curl versions with HTTP/2 issues string[] supportedVersions = [ "7.68.0", // Ubuntu 20.x "7.74.0", // Debian 11 "7.81.0", // Ubuntu 22.x "7.88.1", // Debian 12 "8.2.1", // Ubuntu 23.10 "8.5.0", // Ubuntu 24.04 "8.9.1", // Ubuntu 24.10 "8.10.0", // Various - HTTP/2 bug which was fixed in 8.10.1 "8.13.0", // Has a SSL Certificate read issue fixed by 8.14.1 "8.13.1", // Has a SSL Certificate read issue fixed by 8.14.1 "8.14.0", // Has a SSL Certificate read issue fixed by 8.14.1 ]; // Check if the current version matches one of the supported versions return canFind(supportedVersions, curlVersion); } // Is the operation a transient error? private bool isTransientErrno(int err) @safe nothrow { // EINTR: interrupted system call // EBUSY: resource busy (can be transient on some FS / mount scenarios) // EAGAIN: try again (transient) return err == EINTR || err == EBUSY || err == EAGAIN; } // Retry wrapper for getTimes() private bool safeGetTimes(string path, out SysTime accessTime, out SysTime modTime, string thisFunctionName) { int maxAttempts = 5; foreach (attempt; 0 .. maxAttempts) { try { getTimes(path, accessTime, modTime); return true; } catch (FileException e) { // If path vanished between checks / operations, treat as non-fatal for this workflow if (e.errno == ENOENT) { return false; } if (isTransientErrno(e.errno)) { // bounded backoff to avoid spinning Thread.sleep(dur!"msecs"(10 * (attempt + 1))); continue; } displayFileSystemErrorMessage(e.msg, thisFunctionName, path); return false; } } displayFileSystemErrorMessage("Failed to read file timestamps after retries", thisFunctionName, path); return false; } // Retry wrapper for setTimes() private bool safeSetTimes(string path, SysTime accessTime, SysTime modTime, string thisFunctionName) { int maxAttempts = 5; foreach (attempt; 0 .. maxAttempts) { try { setTimes(path, accessTime, modTime); return true; } catch (FileException e) { // If the path disappeared before we could set, there's nothing useful to do if (e.errno == ENOENT) { return false; } if (isTransientErrno(e.errno)) { // slightly longer backoff here is fine too, but keep it simple/consistent Thread.sleep(dur!"msecs"(15 * (attempt + 1))); continue; } displayFileSystemErrorMessage(e.msg, thisFunctionName, path); return false; } } displayFileSystemErrorMessage("Failed to set file timestamps after retries", thisFunctionName, path); return false; } // Set the timestamp of the provided path to ensure this is done in a consistent manner void setLocalPathTimestamp(bool dryRun, string inputPath, SysTime newTimeStamp) { // Set this function name string thisFunctionName = format("%s.%s", strip(__MODULE__), strip(getFunctionName!({}))); if (dryRun) { // Keep behaviour consistent: do nothing in dry-run return; } if (debugLogging) { string logMessage = format("Setting 'lastAccessTime' and 'lastModificationTime' properties for: %s to %s if required", inputPath, to!string(newTimeStamp)); addLogEntry(logMessage, ["debug"]); } // Read existing times (with retry protection) SysTime existingAccessTime; SysTime existingModificationTime; if (!safeGetTimes(inputPath, existingAccessTime, existingModificationTime, thisFunctionName)) { // safeGetTimes already logged non-transient errors; ENOENT etc just returns false quietly return; } if (debugLogging) { addLogEntry("Existing timestamp values:", ["debug"]); addLogEntry(" Access Time: " ~ to!string(existingAccessTime), ["debug"]); addLogEntry(" Modification Time: " ~ to!string(existingModificationTime), ["debug"]); } // Compare timestamps using UTC and truncated fractional seconds (OneDrive has no fractional seconds) SysTime newTimeStampZeroFracSec = newTimeStamp.toUTC(); SysTime existingTimeStampZeroFracSec = existingModificationTime.toUTC(); newTimeStampZeroFracSec.fracSecs = Duration.zero; existingTimeStampZeroFracSec.fracSecs = Duration.zero; if (debugLogging) { addLogEntry("Comparison timestamp values:", ["debug"]); addLogEntry(" newTimeStampZeroFracSec = " ~ to!string(newTimeStampZeroFracSec), ["debug"]); addLogEntry(" existingTimeStampZeroFracSec = " ~ to!string(existingTimeStampZeroFracSec), ["debug"]); } // Only update if the whole-second timestamp differs bool makeTimestampChange = (newTimeStampZeroFracSec != existingTimeStampZeroFracSec); SysTime updatedModificationTime; if (!makeTimestampChange) { if (debugLogging) { addLogEntry("Fractional seconds only difference in modification time; preserving existing modification time", ["debug"]); addLogEntry("No local timestamp change required", ["debug"]); } return; } if (debugLogging) { addLogEntry("New timestamp is different to existing timestamp; using new modification time", ["debug"]); addLogEntry("Calling setTimes() for the given path", ["debug"]); } updatedModificationTime = newTimeStamp; // Apply new timestamp if (!safeSetTimes(inputPath, existingAccessTime, updatedModificationTime, thisFunctionName)) { // safeSetTimes logs non-transient errors; ENOENT just returns false quietly return; } if (debugLogging) { addLogEntry("Timestamp updated for this path: " ~ inputPath, ["debug"]); } // Post-check to ensure timestamp is set SysTime newAccessTime; SysTime newModificationTime; if (safeGetTimes(inputPath, newAccessTime, newModificationTime, thisFunctionName) && debugLogging) { addLogEntry("Current timestamp values post any change (if required):", ["debug"]); addLogEntry(" Access Time: " ~ to!string(newAccessTime), ["debug"]); addLogEntry(" Modification Time: " ~ to!string(newModificationTime), ["debug"]); } } // Generate the initial function processing time log entry void displayFunctionProcessingStart(string functionName, string logKey) { // Output the function processing header addLogEntry(format("[%s] Application Function '%s' Started", strip(logKey), strip(functionName))); } // Calculate the time taken to perform the application Function void displayFunctionProcessingTime(string functionName, SysTime functionStartTime, SysTime functionEndTime, string logKey) { // Calculate processing time auto functionDuration = functionEndTime - functionStartTime; double functionDurationAsSeconds = (functionDuration.total!"msecs"/1e3); // msec --> seconds // Output the function processing time string processingTime = format("[%s] Application Function '%s' Processing Time = %.4f Seconds", strip(logKey), strip(functionName), functionDurationAsSeconds); addLogEntry(processingTime); } // Return true if `dir` exists and has no entries. // Symlinks are treated as non-removable. bool isDirEmpty(string dir) { if (!exists(dir) || !isDir(dir) || isSymlink(dir)) return false; foreach (_; dirEntries(dir, SpanMode.shallow)) { // Found at least one entry return false; } return true; } // Escape a string for literal use inside a regex string regexEscape(string s) { auto b = appender!string(); foreach (c; s) { // characters with special meaning in regex immutable specials = "\\.^$|?*+()[]{}"; if (specials.canFind(c)) b.put('\\'); b.put(c); } return b.data; } // Update lastLocalWrite to denote we just performed a local-originated write void markLocalWrite() { lastLocalWrite = MonoTime.currTime(); } onedrive-2.5.10/src/webhook.d000066400000000000000000000223451513710110600160050ustar00rootroot00000000000000// What is this module called? module webhook; // What does this module require to function? import core.atomic : atomicOp; import std.datetime; import std.concurrency; import std.json; // What other modules that we have created do we need to import? import arsd.cgi; import config; import onedrive; import log; import util; class OneDriveWebhook { private RequestServer server; private string host; private ushort port; private Tid parentTid; private bool started; private ApplicationConfig appConfig; private OneDriveApi oneDriveApiInstance; string subscriptionId = ""; SysTime subscriptionExpiration, subscriptionLastErrorAt; Duration subscriptionExpirationInterval, subscriptionRenewalInterval, subscriptionRetryInterval; string notificationUrl = ""; private uint count; this(Tid parentTid, ApplicationConfig appConfig) { this.host = appConfig.getValueString("webhook_listening_host"); this.port = to!ushort(appConfig.getValueLong("webhook_listening_port")); this.parentTid = parentTid; this.appConfig = appConfig; subscriptionExpiration = Clock.currTime(UTC()); subscriptionLastErrorAt = SysTime.fromUnixTime(0); subscriptionExpirationInterval = dur!"seconds"(appConfig.getValueLong("webhook_expiration_interval")); subscriptionRenewalInterval = dur!"seconds"(appConfig.getValueLong("webhook_renewal_interval")); subscriptionRetryInterval = dur!"seconds"(appConfig.getValueLong("webhook_retry_interval")); notificationUrl = appConfig.getValueString("webhook_public_url"); } // The static serve() is necessary because spawn() does not like instance methods void serve() { if (this.started) { return; } this.started = true; this.count = 0; server.listeningHost = this.host; server.listeningPort = this.port; spawn(&serveImpl, cast(shared) this); addLogEntry("Started OneDrive API Webhook server"); // Subscriptions oneDriveApiInstance = new OneDriveApi(this.appConfig); oneDriveApiInstance.initialise(); createOrRenewSubscription(); } void stop() { if (!this.started) return; server.stop(); this.started = false; addLogEntry("Stopped OneDrive API Webhook server"); object.destroy(server); // Delete subscription if there exists any try { deleteSubscription(); } catch (OneDriveException e) { logSubscriptionError(e); } // Release API instance back to the pool oneDriveApiInstance.releaseCurlEngine(); object.destroy(oneDriveApiInstance); oneDriveApiInstance = null; } private static void handle(shared OneDriveWebhook _this, Cgi cgi) { if (debugHTTPSResponse) { addLogEntry("Webhook request: " ~ to!string(cgi.requestMethod) ~ " " ~ to!string(cgi.requestUri)); if (!cgi.postBody.empty) { addLogEntry("Webhook post body: " ~ to!string(cgi.postBody)); } } cgi.setResponseContentType("text/plain"); if ("validationToken" in cgi.get) { // For validation requests, respond with the validation token passed in the query string // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/webhook-receiver-validation-request cgi.write(cgi.get["validationToken"]); addLogEntry("OneDrive API Webhook: handled validation request"); } else { // Notifications don't include any information about the changes that triggered them. // Put a refresh signal in the queue and let the main monitor loop process it. // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/using-webhooks _this.count.atomicOp!"+="(1); send(cast()_this.parentTid, to!ulong(_this.count)); cgi.write("OK"); addLogEntry("OneDrive API Webhook: sent refresh signal #" ~ to!string(_this.count)); } } private static void serveImpl(shared OneDriveWebhook _this) { _this.server.serveEmbeddedHttp!(handle, OneDriveWebhook)(_this); } // Create a new subscription or renew the existing subscription void createOrRenewSubscription() { auto elapsed = Clock.currTime(UTC()) - subscriptionLastErrorAt; if (elapsed < subscriptionRetryInterval) { return; } try { if (!hasValidSubscription()) { createSubscription(); } else if (isSubscriptionUpForRenewal()) { renewSubscription(); } } catch (OneDriveException e) { logSubscriptionError(e); subscriptionLastErrorAt = Clock.currTime(UTC()); addLogEntry("Will retry creating or renewing subscription in " ~ to!string(subscriptionRetryInterval)); } catch (JSONException e) { addLogEntry("ERROR: Unexpected JSON error when attempting to validate subscription: " ~ e.msg); subscriptionLastErrorAt = Clock.currTime(UTC()); addLogEntry("Will retry creating or renewing subscription in " ~ to!string(subscriptionRetryInterval)); } } // Return the duration to next subscriptionExpiration check Duration getNextExpirationCheckDuration() { SysTime now = Clock.currTime(UTC()); if (hasValidSubscription()) { Duration elapsed = Clock.currTime(UTC()) - subscriptionLastErrorAt; // Check if we are waiting for the next retry if (elapsed < subscriptionRetryInterval) return subscriptionRetryInterval - elapsed; else return subscriptionExpiration - now - subscriptionRenewalInterval; } else return subscriptionRetryInterval; } private bool hasValidSubscription() { return !subscriptionId.empty && subscriptionExpiration > Clock.currTime(UTC()); } private bool isSubscriptionUpForRenewal() { return subscriptionExpiration < Clock.currTime(UTC()) + subscriptionRenewalInterval; } private void createSubscription() { addLogEntry("Initialising webhook subscription for updates ..."); auto expirationDateTime = Clock.currTime(UTC()) + subscriptionExpirationInterval; try { JSONValue response = oneDriveApiInstance.createSubscription(notificationUrl, expirationDateTime); // Save important subscription metadata including id and expiration subscriptionId = response["id"].str; subscriptionExpiration = SysTime.fromISOExtString(response["expirationDateTime"].str); addLogEntry("Created new subscription " ~ subscriptionId ~ " with expiration: " ~ to!string(subscriptionExpiration.toISOExtString())); } catch (OneDriveException e) { if (e.httpStatusCode == 409) { // Take over an existing subscription on HTTP 409. // // Sample 409 error: // { // "error": { // "code": "ObjectIdentifierInUse", // "innerError": { // "client-request-id": "615af209-467a-4ab7-8eff-27c1d1efbc2d", // "date": "2023-09-26T09:27:45", // "request-id": "615af209-467a-4ab7-8eff-27c1d1efbc2d" // }, // "message": "Subscription Id c0bba80e-57a3-43a7-bac2-e6f525a76e7c already exists for the requested combination" // } // } // Make sure the error code is "ObjectIdentifierInUse" try { if (e.error["error"]["code"].str != "ObjectIdentifierInUse") { throw e; } } catch (JSONException jsonEx) { throw e; } // Extract the existing subscription id from the error message import std.regex; auto idReg = ctRegex!(r"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", "i"); auto m = matchFirst(e.error["error"]["message"].str, idReg); if (!m) { throw e; } // Save the subscription id and renew it immediately since we don't know the expiration timestamp subscriptionId = m[0]; addLogEntry("Found existing webhook subscription " ~ subscriptionId); renewSubscription(); } else { throw e; } } } private void renewSubscription() { addLogEntry("Renewing webhook subscription for updates ..."); auto expirationDateTime = Clock.currTime(UTC()) + subscriptionExpirationInterval; try { JSONValue response = oneDriveApiInstance.renewSubscription(subscriptionId, expirationDateTime); // Update subscription expiration from the response subscriptionExpiration = SysTime.fromISOExtString(response["expirationDateTime"].str); addLogEntry("Renewed webhook subscription " ~ subscriptionId ~ " with expiration: " ~ to!string(subscriptionExpiration.toISOExtString())); } catch (OneDriveException e) { if (e.httpStatusCode == 404) { addLogEntry("The subscription is not found on the server. Recreating subscription ..."); subscriptionId = null; subscriptionExpiration = Clock.currTime(UTC()); createSubscription(); } else { throw e; } } } private void deleteSubscription() { if (!hasValidSubscription()) { return; } oneDriveApiInstance.deleteSubscription(subscriptionId); addLogEntry("Deleted subscription"); } private void logSubscriptionError(OneDriveException e) { string errorMsg; try { // Attempt to extract the specific error message from the JSON if possible if (e.error.type == JSONType.object && "error" in e.error && e.error["error"].type == JSONType.object && "message" in e.error["error"]) { errorMsg = e.error["error"]["message"].str; } else { throw new Exception("Invalid error structure"); } } catch (Exception ex) { // Fallback to the message stored in the exception if the JSON is malformed or not structured as expected errorMsg = e.msg; } // Log a message to the GUI only addLogEntry("ERROR: An issue has occurred with webhook subscriptions: " ~ errorMsg, ["notify"]); // Use the standard OneDrive API logging method displayOneDriveErrorMessage(errorMsg, getFunctionName!({})); } }onedrive-2.5.10/src/xattr.d000066400000000000000000000067601513710110600155140ustar00rootroot00000000000000module xattr; import core.sys.posix.sys.types; import core.stdc.errno; import core.stdc.stdlib; import core.stdc.string; import core.stdc.stdio; import std.string; import std.conv; version (linux) { extern (C) { int setxattr(const(char)* path, const(char)* name, const(void)* value, size_t size, int flags); ssize_t getxattr(const(char)* path, const(char)* name, void* value, size_t size); } } version (FreeBSD) { extern (C) { int extattr_set_file(const(char)* path, int attrnamespace, const(char)* name, const(void)* value, size_t size); ssize_t extattr_get_file(const(char)* path, int attrnamespace, const(char)* name, void* value, size_t size); } enum EXTATTR_NAMESPACE_USER = 1; } class XAttrException : Exception { this(string message) { super(message); } } // Sets an extended attribute for a given file. // Throws `XAttrException` on failure. void setXAttr(string filePath, string attrName, string attrValue) { version (linux) { int result = setxattr(filePath.toStringz(), attrName.toStringz(), cast(const(void)*)attrValue.ptr, attrValue.length, 0); if (result != 0) { throw new XAttrException("Failed to set xattr '" ~ attrName ~ "' on '" ~ filePath ~ "': " ~ to!string(strerror(errno))); } } else version (FreeBSD) { int result = extattr_set_file(filePath.toStringz(), EXTATTR_NAMESPACE_USER, attrName.toStringz(), cast(const(void)*)attrValue.ptr, attrValue.length); if (result < 0) { throw new XAttrException("Failed to set xattr '" ~ attrName ~ "' on '" ~ filePath ~ "': " ~ to!string(strerror(errno))); } } else { throw new XAttrException("xattr not supported on this platform"); } } // Retrieves an extended attribute value from a file. // Returns the attribute value as a string or throws `XAttrException` on failure. string getXAttr(string filePath, string attrName) { version (linux) { // First, determine the size of the attribute value ssize_t size = getxattr(filePath.toStringz(), attrName.toStringz(), null, 0); if (size < 0) { throw new XAttrException("Failed to get xattr size for '" ~ attrName ~ "' on '" ~ filePath ~ "': " ~ to!string(strerror(errno))); } void* buffer = malloc(size); scope(exit) free(buffer); ssize_t ret = getxattr(filePath.toStringz(), attrName.toStringz(), buffer, cast(size_t)size); if (ret < 0) { throw new XAttrException("Failed to get xattr '" ~ attrName ~ "' on '" ~ filePath ~ "': " ~ to!string(strerror(errno))); } return cast(string)(buffer[0 .. size]); } else version (FreeBSD) { // First, determine the size ssize_t size = extattr_get_file(filePath.toStringz(), EXTATTR_NAMESPACE_USER, attrName.toStringz(), null, 0); if (size < 0) { throw new XAttrException("Failed to get xattr size for '" ~ attrName ~ "' on '" ~ filePath ~ "': " ~ to!string(strerror(errno))); } void* buffer = malloc(size); scope(exit) free(buffer); ssize_t ret = extattr_get_file(filePath.toStringz(), EXTATTR_NAMESPACE_USER, attrName.toStringz(), buffer, cast(size_t)size); if (ret < 0) { throw new XAttrException("Failed to get xattr '" ~ attrName ~ "' on '" ~ filePath ~ "': " ~ to!string(strerror(errno))); } return cast(string)(buffer[0 .. size]); } else { throw new XAttrException("xattr not supported on this platform"); } } onedrive-2.5.10/tests/000077500000000000000000000000001513710110600145475ustar00rootroot00000000000000onedrive-2.5.10/tests/bad-file-name.tar.xz000066400000000000000000017202501513710110600203070ustar00rootroot000000000000007zXZִF!t/B](KHg-}~EI>CJ!"8*uBP`L¤Wlkmzm]-"k-{eRwZyQ68Ҁ.|:(]pAB׭]·凂 taVD҂6A|-$’`'smvWځQWp΁{ 2,˦S`,| ]`ssSδZ$iF~ݗ"PE#]GrTlKv}-QJZVqV7 gלŢ Vji 5x}H}Q '㼰3ā,R%{ΐ8e%3OcŶƼfldXwt~䊘(>X6ЉV70c\Q;3P6mK|{y#uP"f@3y?F€ITHw֗P.q/f4Wp|SP6O#X'h(4fG9g!L=a` PFcŒp#cD5xy J'݉DoW86J# ]TmgK8唱hƻW޹8VBRqۓD) lCm\ؽ Tt 'PÎٵmj%H .* tG[Aq}'sbEp7*^4T&6͡cwӿ4V%Ų1#WT~"59O^a^:5{6W.@>l/['Ȣ{]2-\uHcMO#/]FᄊPcΧj9mUm;[rZ px'/ 4#@@N?'ž[SG/z犀b^$s拓BwGHyLLY ͍9Moa֯/F-)ZѬɜ8Y_2m0Lk=H(i䞩a'Fc4=vԗcyޭE PTc 5r {YJo~O$q^&./*G|<A.ɸGfĐ`} z3(T,WB=G M{źhyGulto׶?>mkXZ1YpH8~bsUH\acge ۊM: OF!E(8!/ w"GuM"Qnoߩr=}AB;;ZMgiY\+7,[f{ $g((U͍}J"K (:+aS=18+e}+1݁;0lU d[WS`m =Rp|_9v4h(U9$[w'7}bBC%;9A _ ˩|.oȲtvAokݟ:! S5f':qR=2'r"|`ToArauJ,{c}(!h]vCVI׋ĢV:%mXYe?%y+ƎlCmsK".ZS"v7'c> #[Mlx` a}(^D!tN 2¾Cƒ#zC$wf^̐Fkt<Ň$D\t|@i&kgg_wp\a:Z΢gs08"Z)KJy>ȴk퇰 0N7.S}T7rh'egu5o^oT%1G>{e!x5M) ^+| fk!, HX#eKGKr7`R "ęmJ~B2 {ΟF~ImG岬6e !KAA.WFj"*4 D"4~|Kipr'h,5B*ᶩcd*iTޏB.aX[1.w6 iHFE3%U p99)tm[qa~pٔLJG 8䏓MKs!e$OP=X/xQX[P hJ^{eyy2`ԟ]kNn.U`;;K2ēd_jIz 0H>/UGu  Md!-;?9LtVPwU \>X ]f `%@QB͢QFR}/`iZLB'FÖj1Z:8&mɷL:ڗPP%9U{V{HCe'K,$(%ݛ_/n_]ڃRC{^/)B-z+3\ᯪYH_6/%=.ؠ0WcHJpBS8(%(Z!EAa PB9kW1d3jY+vD'5nXCM-l|C;DzĴahyxyqqxeg' tcx{:oH\q]I& ݗ(# aFMlͧnthj;ZQ.p%Xqd{j<v17T Lbg2Ūd:UkXQ4;ŴV.<;wJ@;})):A2a6%uR]h4qX x jNK2G2U3yq/ܴyX }pѱ ck=K9) ]dp8_oH_"{"TnC` =S0ug *.6_*ajB6;x6#APn-:~6poCp?úh=8O 2qNO3iF&Y=2 S39ݸnh|L$L*ڡpϣ^p)>705u\YYHGz]Ya P"(O"p\(f2-J4/\.<, uKMs7h¹t)޳~*64:#?Ԣ8l&I w}ɢD_g4'K!QVQߘ2VUK0+;2vΒ|'mnqMd$]2\.ÝO;CkV<ײP.m[2nCS\֯[l3l M'hQm؅ZYiJ_,+9_8ڹvDrtv)@P~wlA0jTLdsjgt.&'oT9SM:tI *3Cǁo l>K{=:V~KAP/9ą xk?ɵ?83Y؊>"]@ܠJ AjQ|S\@(m E0*)gq" \7w/]y._0z{3~C;4+$@7fկ5OH1|5f{ tj v(E\1֦r @"~=, >Fl)Pc L<|AZ4QJf aj՞`BtFe/^_8DkVV"8|WNIʄ&oa`9Q;&.ٲV=H6?H7Uvv$9+bQOLÜ̼FA؎kCn98ei$*5Jc3[vjxڬR#$;ͣxMw;ُW{'ǴbY ,QQH1TmG)uH>&1NnV^9\zNJ4ZuM$ſdPfL3,8$)cf2F@J60 6}@Ll¡J&^s>SJi"ܷez.۝JqqL\uXvGCNas^Ob]s=Hݨ ,K ~<%Km1FbyM@"BSb104DvpIҋ+1\ҐEl⳰}istzznѹT^bCN}S] CC$RϷn%X/"vg;p)ث, GHf0t$ /RI4'0,IQSj+ PhDS hFP!E.PGl37]9-@Ҟ?gM Or7s<xgGKp\̅%9Q "V|~ZSrtYPH3`𢃹1 rаF2&TtcQގF"]Γ7ى3߸ ;Us=cs5H&˸tpX| hqobC6i@Hh5AҨն-Ec~iExy1lyᠣr˗N)1>V;&ݺKk#ӖsNMiX")i89y{; !"OɀJ͂s:#_LmNԍn I +~e?7b f$ɓwk!8!te!^hhd*F);J'NAdc̓:ѧ&?v |JVa7OդTӪVjAcr"Y0`Kis@(#yS^,! =&kpbM+a7T2#1$&t)AI=S~9 ͉CJO:>Eʀ貕i$'"z)4=L *04r I F".TPwT:Czª" L*=l<~Bs~!&E6{f9k<^ ˚o /Ns2ćZByRjDmN:m[.+.. hF9NDTNr5! #}9Qkt)I) VBAa/nfaՔQz9;rł1I mwlFiܰ2h qz}}oK(k/YhwV:Sg m+qڜHyYۃ3{%@prI&|gtw~ְL)?0MuMv<gk^˕}}[d¹FG`CKayplU*u诛 mVÄ(J kCq2geCMP}s?g{zXNSRVjsR"|ɏ w U|T%a֟ȳ+B36UVa%Tre]:p'r'Ƚ0r06fXVBoO&V4`%/Nh2SkQaceGqԪE@SV!sF%sDG91a+kxq=nHbGk&8''hnW Lؗ1ȕXS5`~@|1I#IB@}{ gɑn^Z"ϭə.=,v\*g"@QO!:كšňCLm&j?UQo LjbIsxRj722칼c0i&'rUe?XYoxʉӲ?pXY݁߈&gelȹ3xLKn! ZA\oGW /m_ӍL S@ϵdiV TGߓ.gKvV@z&50,k6vyB7yocH2}Տ9 =U_!rs녶LYTਨ.$4 2 8J}p:%硰z> |QlZSo/ \ao^\DKNˤMr[xEP~?@?|׼ui5zg]ʳ,RExJ 0'֗rX1`\mKJforwy9۞MV[SIÃ00nIөO࡙kg}w?c/N|q~#CcAՌ("E5XlqAd*UІDH{kYQLL8R\F66)Ϯ,Y_ᖘZ.8%JPMfjS;ќ\hh`ƭk|&*h8J. Nxsy"$rhzs/:{c kؚ|:` 1wBx&0_X Gd/, Qd7f(d)I4h5g!7dF; ]@BlJr1G<{` `fCU`zш/cO =^oI)Q=QӰ ( M'َ_s~c,Ia)dH_8A/32i~A8Ic\ip$Jh%ND#Dާ"9F4B}oVBtsJMUL%̩(\Xk;O'`(W:1r U sq4p;(8<Fà5LGdsyTlGx #0-Z0H?\ɭRj|DwuR}?SCAz_[ %QȅL<҅:~OY'hcwO'7yԝw~A~0]"Ѩg LiOC$Ƞ;c'%trRޫǒ 8҇K]gtRT[q^|zaLOq6p^~:"٣ / $rѦ(r1?-Kգn}WX4B<\䚣MYxs8ZY'őHZGɻcm/N]h:RDz664ԄS7m&/cST_7FZŕZڙԻLvK%JjHKgh3 cQèM] % nIV&',VB/3~Ԍ:SeA3Fx766>>$mC.mLZwd|Լ5E,ynv4@gȨca8C~FW*.B߹^*9W֤2yMg_{zT&VLۻ+|.k ` Dm o Lx?2-[_L2ɛ7pMA8׶o{L턎#`eܬ7Zg n=ENl)PAkSK_ SǻˡxFGAo] upiVlKBЁgvͮevrkr&)@:tb+T" $ 䌩_*+ؖFd };jrnS].`;>IP8{Gyȿ[`3Y;$a/ [uOGi؉ 3g 9]R ù@)\=Yt *}I(jbWrӳoѻUo:N>VM } c;gxu2kDv,1g4Z܏yGaleP*8!؇ȐPo6]%Yob< 5^WCX*@L0G7)=uOBp FDK|G)7"$z؇D% JC1&"PLh4_[ mvǤ֙;&=Nt+Jnc`0'Wi,T!5)VQ7)DoTED\JnV|ssGLm> IP64]F~Gxih+\ĭt^N#QoX<@GCoV)1 }5*bNI]h&f*Yї,aSHOf叹ݶ0^JYנ`H=KhRYv1ObAܣ XahqL:dr ۧMc@~A}ߚSFT܎g cD_5%0~yI$yopɸw8p"(S@tLwM] Gs HzS"vG1C=FIė1\λ :+H]YL4 (Jej(Ud&7xJ0qh&t[{ʀq5h9bxA쐔q4vnvn@xzYՅA2~16giT>$~Ԯo!O&W{ n,R #L8~hk[$L&m/(ʘWx'4>#9[23n'|-~ S{W3Q1M )lnE5Ϣ[W^>岌)f` N 0a-K[l 0S_>V$G!+״%vxn\,{:F۾LIU%!ncz3+t8Oڽ%1\l;o1rVLCvBNk%(lQ׷d:mKF;cwB.:eUt,` LvT`n.͇ $VvRrK} $ߋϨI32ٗ (owt0YX8?rCI [U4کMr]U;Ju~\󥃂?!EZ9v:f/8XUwJP+糇HaTH.VCB+=/F!5nŷ؀^,+(O>ajUsG ®%1Y.lS9=rރ c*+>fKۨ-tؓ B,ϗ*C;aAQPַ $}j.vEtpNX2U'Ґ*ۍ,ء)h5|j}!}tm a{;k1p4QXe!^J䀦AOn/r%&[PHΎ}]BtgU1I` /mV} Bxʅoq#Tbp)i^ A3nTʞ!Cϒ9ҢAgСM,/Q0s06=Z#}a]8%* Pq; ~վ.Ђ[MRs5êMLŭ?%`9/X[cV7zҏtqYPPާJ /~`)7Og Z)2t)n+Q, =I&t3nа+t둴x-n9T/׸(5DplȌ%>ԋz8A>ڔr8j_tsNcT\ &{">t<RwrY'RRn&LZd-j:fTvRub<L/xI}>!ZU6>ou5CH)9? {V]"5, :3ʢ ypP0@;Y98>#=f$iǾC5P ^+$7lk7ix4 8(Oy.ґd=NI4/ÎβvBbG}6f^Bqf¨*',h-fE8NUe\K,y-;݋ U6̓CՌ \׺>3pr91-qS\O83-ҟ@_KUS,?-+$xӉOƂ[[5!DReZ2^=RҸ H5,*m"GB4 謿m=u2X=߼?ήN㼳J)9iI䗍N/wD,3i22I# Xei^zK #!y 6z9H6DR K.9eLy'+\28`t"Okdlp׷tl1eeuBzxbW|2]5b3>2"\?B U~2%vKA;_㽰Ne8nz<ƅ 0SY2sSLnHHh Z/Og"Ԫ ]ozIޡ_.j_Tx:xx!@竏_.2ScN=bU^MAHHeJ]dnNMZn U'?pj+,EߗCS9)ߴ䰬GCӒMl<]xNLⰦ qc~ٕ? ; Wl<ִM؋31%Xy[–aSv ^npa2`Ӯ[w xӜI7sTq\w@ő[Źcq% +`A{ /YJРd"`f3;!x|o32;U1˗ :tQ{Fe@8c^kqlmLkirehE$ on=L\&BepA:eDiN6`}-CQ΂y*=B't+L4i#l~@i|LⱔhV'a,.^Ra94KfsU\Am t cJkC.aTUE47(  ;\]b3i qJɨJ{dy[e”ph4_a0^S1-n4&\QI9XuU'|0^+˱L5Wq<*)nwx/B.J17$F7-P,%q?{S}r6*uml`>xUxnț/ _Ta/;f\mqq$\* Pjw=z;7dQ<*$ p/oSEzFMoL`\-rt# io6mL(V Oal.mtdgJZ'Z$tS `{mYmPj!.!cW1s <@ ydaP\ sx÷ԭ&tjdBma€!c"+ō:dloˀH90+@_HNctM0n.t0U:bX(Qi,ݶ(N.s~ 6Frc'W#SsoO,F} ս%'*ͿNJ-V]+R HXE)Lo}o8Cb;!$Ze ͳ7mU^'s0k]o> )gd>.7S|n:s֓_ۿgM# jfY I8E+7,;9. :qZY9G3;Ieiub9CB,=&~,!rT%QS KR?E=QkJ:5puhɵ ɉ˄e6}̺q v&_W`2i+ZO˩EjA$ wH8 f{X4ʖ։=Mcj\\,YRPY:"I3*l#" 2Yu ,BUw>*5NhLLmj}?9CQ~+HYDp0-ʨ zvY 5ЂS$PPu hÜ ^)42{Y?f؄;KDBԢQ71M.RG$Gg=I/V9eu]8)nBibJYHwn\]ڌF3 PhPmݙNXP/Jn<0=0Z^>7ho"n?)~SC\ُ+<11M/<+iyNf.(Sهܝ,S+J&$%N_GNi<7}*Oه`RW+Zx~EPA9_L_͓j}iX=Kgޕ,m[o !h:3Y ) \^00[+7Sz˔Rk_yڋi 8⿪J |#]h]fƒWP2s T12xn VXe~]B؀8\D: U`l0A,h? PC2Iʍ#vǺ8{&#zͬbfv .mm8xNE#K b6)oaRf̛sx ׈%ߤ 0dw+*92􂳽i}\\f /)Pt%x)Gn/Z@k6[5}~-څ~+mHgLx͑(-=44_s^8 tǪ/IOhٲG {MV+M_Av;4M&_rϟ-%6V^Ǜ|0(&1qB~NZ_Y]37"J*aGe ^k54uIŐPH1H$; ẓn?A][jkB֦Ú%ȡQ]{Ie%,Z k4fuu{Pq26Ga !ـIx9Q֨H~鳼4Ɓ*")a:c@ew5#txCv?9Q-͉y~*0,z.ldb/6cG_d/ckXF&(^oǛJ3q/ܝ݊SGFSTPc@t*rIU1тJgz'GHO nDJd:=&,G*@Yi,# 3{ 4=)Uuь 6eH|ײn:h/<72ͱߡO/!4zË,2i?g IvPa))hsLH Sxԟ%dkں@bC̸!ED|kl dthi-~!rA&Q[FbVq I>xs # E vi#@ˣxr\5|v,9 bq`O[Zdr<(S5%NR-;@=^=YQ|L^8ohuOrr {{FSX$x#4`ta 5t| { .!c+z?Nd)h3m%u֓ ^;Ƙӑ7 DT0!͹}0m-w\ߏ>J9lt kKJCвe>$ajA:cc n^#/h$/Pcj8<eQGW@2>4EX7hn 0imVnfrs1;C\g1/ "0Fbg4~^ԵPlm;b-wIr9}Yjs'7Hm=ړd`Qe_1>qqrך|6\RQQՓG2,88[ͮ<_ 'dh5hF5[}͛l_N fX rWaNڗ(=>f/3Uގ^E"(Rӏo5K_:'ya"IQ¯k7;JWc4 2`62qhH]{վ6!"vT!sO1+O` B9sKӐҬ8IwfDEp] }oܖG" d$ ѷY\y~knbmٳ㙽p8 W+M,-isy=!+)E N2i *|y u0nj:w evv?{.=!}_N4XNg!Սb6k[9ͦƻm;bk7?嚮d߀P.ŸUR USb n9nCGQ#J3 tTZm}G*:rh6J*TGOcl9%qP.2"ok-em#.?gN%|Hv0(g#DdqU#W>[˒'B+A ߚY ]be"F<}L6BLA(_ea5T~g43"5^RVChqbbU4xn7޾`Ђ^Sb;Թ)`3"24Ufpy8Q"|rlK8%KhX)J#D3pTFGޤn!+ٿߠ;9ӭC%zfhKxk/w2¾oۯubY]1Z? |A0C}˰\_`*>;{v&][;G= (A!.559z>Vz5?cv-_D1H8K^_&KX9eE-! NE\Ke/#J8:;{!)*:aW8cH*ץ{"cM@%N8Im81brD9~u0F+ =9 J5;ͺAc]guE)?),rTdiP7~8z d-w6o;{QD{ÃSmu!а!dF2r{zv[d 8\y^@s/kWm|G؅u7=_< goy`dф^s9S\v&P߻alܼ ۈ@O4 ȸeɏL÷Ҁv` 8qpш" ]ж il2p,Ulʕ͗"Brdc&.- MlΕq}XHS;z0 &HUF~x#H&"@0b#hXPLJY/-2H3ɊӴJ62!+~# U4`Vfr!DvI$|` P~|42gKѥ.ѡii؜n2-S#'˗Avsi{SՌZ1r2 S8F+h? Z8⧢_cEL.&}5UIV}h^n[E{nsyqvZ(ml n%xaFcN5nJ ÙAd?1u3+UC{= /o?o&mLɄ7vU,}_mʇZ0d?ul1Z6&J4Efk' op#=M+oǡǡvw&E}j"#ȼвte= ޲[Jw#`:zmߜHC/H=HLqN棞JLk40>,{F{[Nk;|qVw. y*@iRET _ \l޴-is4c; 1Pm֌Cʫ+gRv\:"HOTKuS9fB L^B1wh/R4)x?yӄr=p 2 !T$_yޖj Iot_4]C$IUptuQmCxmu; sjAL1۫/RHLw |P99qG:cج8:(3UQ ^͆O}_pS) ջc@MxJUƶڀ<;ԅF#:ZS(8-Jf*ZN/TjgTu6nC+o-$L8kr"DTvWRG!&28QOuW(/td\;UX;+bׅj'NqofE$RA 0tH['ҔjPs|rU?[dŢj0#yGAx|n<җv5T#ٿ["LQrWu0xrl./9Z[6RT[PJ3o Y#FlCDM %lt֗J-"Hz{.F+2wx^ .:RB`] |;ev (Iˏ `^71QdV]K@ĿdyCA/ z\\9}>2Ӌ&Ȫ"=ʛuN]͡_"vc,bEOn/FrYH Bf!%v:]۞ xXRo"5ߍ+W,t@R [nOgH{!Y8(<Эao}_| k/MxߌbBk T7dXj,ausQY)FXz42UMSqƄJK'ʺTvw9}R&ܬ/Y;;dVD6W{#j8"ĹV~LݔZ9NpV#۝**̎&ĺβOÓʒ#@ڽ,mTpt7tk'OjӮ 6 UNEJ֊ *PkCEi#,HTPN qK 3 qu²NՍ> n/O!o]rC@fCuȈikZѝ.Qa[/0HΈZ|QO4Ň}|k%v݀3f~txV;_\dEf3blX:Vm;)TM_!05Q?FODNf-K6;/sF,9VrU~<'mp |en!6U o=DZ8y'o8TE$y6KmJA{y7@!,{m#ꘛ7R/Z>Z.5"i^2Ce8/ͼE<.ĠF$< ~s7ZfYLzxmY내flHW88!.4VNT;ؠ€)GRN2eS #*F=Lj姦W4 K۵c4,h^Aj TX J 7SvR8q~OI`K^tؗ6Jp$0@9IOm'/Q=![LGg|69DUR5>܉E&G^gGj@pWާ_g~&/6m,ZbVQNj3:@ˬaWJf D7ZFʵLǶ㔥1DX(t姐DfQ8D cFE96`4MW_^7pI)(:İcY FlZdK_lr ƑDƳaL Vwqs)V Nޓg0֟QH[O@gBSng+K%q;(HJLm}nভ\,X<)5VwzT[U}mޭB8!g=@Y'X iB_9}5 + ae՘:mj!@(F5<iR&ƅ.Y'>ױǰ'#dx7bz;ibMG`7oZ#S-(wo\5 *$#D݋mv`u ? ֏Ƴth@-7x^NGa8z0:0.z MN:`):B31qI-OJGw|Q@xvR0ƾI".\~e_Y {~UX)EA v%PgWR;k9J X2qpA]o镘J]-r̞MVPWw#Or7iUjs.R'~3rF908*Ӡąomq:z3jIiɇٷ`0y4X"\,Nx4`1koM>5Rԣv=)Q3V#Y i4w1iv-uB_8!]Q&)04BX%oŽS{eNj .b/_[f+"w#@c'?,qfda!*aT F E ?'m;IxIskx: 1 \-8CdSj=%#2,#f#{knKo|j h/i,K{pͱV 'EN{L]pТM>;,0T1qdz3u,F;~on'ƞr[Uj\cUu7OA l;na2#T&)c&Hj&[ %X4}۾e1 Cl bI.sۙoQXZul{^ܱ88KR)+3hݕ^> |E,\F[+Z2]#/0pxUYS(PZY.lR` x\D 1g̏; юLpT>hPySl6bڶL0 $=Xq؎"}N㣢::Ϗj7,7jLw'yB?C aT8Kgwq2 SZj) rhtrkga:{&VUVR&~Qţ=ndQLZȾB#yW˥+9wO)Ė{b\h%8\Cڐ^ی(!> =@< ҳFP84Jo9̪Al6wgv1V3 3%w O"ld 5@zXHI(m04OwǨF0oWx煒֩{M2 ~S? ݵEk_0+7X -*[/j,*xRP}&OPq~y N38IQu\BKrJ8" 0viwOq2%Z㜒 S"< ]cV""6]@c> 3`7w }9՘/ovia~hV^dZtjU>.lxU.7|J%ƒnўZŀ|B];eѹkQSAdpu.> ]w*8\mQj=3U{K8iRK 'LGwV2myytVFaqIe\V x_P#C_:NK:+{ݹܠjJqxȌS}0Mwm;YU%I6n¹ǫ5JqʫmɳZ͢Td)H!%,z8[/@kV7~$jmԫDZMw^;ޡ__FO, Kw: QHdĤ}2Ӽ-أ5rSf^B>k{RPᆹch)U1qtؼ*!IIz]hlh.jl [^JMzBL4­nؤߴZ52K%g{GvvQqH1,:'K%ZQ+THg}`vLaNš}?'jR5DunNjěN" 'H$ղ<;=#6z[$i4Yw((4/:`E|Y4)OB{iYۓ5qtֱ7tyHGpoۂ3W0ѩ*'X7i'tMON3s 8LS_<ɗf 1jR.^lزAI*˃@vqIHeYzR+"*RUN{Bb ',xRAҍBO NFW 8S2 9eV]@g\دKpI ;\am%FDfk@cx/.m}0*`Oy*'?4Fu>:Usdu0+7>ZQ,lmtQ(,Kh߬n(0q8u +PJu@*bTYk~?ax l%Z Q=f26T(<>h|7m>`Vki(2u'/ծ+ޯQ]}OQ:ct~00H8e1E B49}PPcXR&m;Hjؽ.?Q`>+@!M Inhf_Y=yZqJ l";IV3SnNRzlVc+]cQ%߲,HG3'hVWQ -֒VBSnQ` e1Qp8>j\|c;+H/p8#]HPzDK;J;;=p8:?_ZE%XCy"CDJ%zztg.2ZYxf`X~ ^Ÿc>POԍx9C ?^O"tKA|-Bt|jl?[1#YB/$N0Udw㊌NbeuXXJA%erGzsUqNK6ϝrH; Y7Us#,Q [])alA3nCtMj9, VeJu{%J| &ΰJҬymm,[63}=Ҥ¾DȓUokkyHS!;,B CC>-=27 YT-dY4v{Oi%:#x2K75o(b'U E.4v1ƝGsͧkx utPo"'Zf+;2HYM`X;\K~NRL=mY1#QMGD?Г :BDJ2 z2pcw1P)(!+y'gUFҔkbZQ4no0B% "\-A)<}Ϗu9sJ"R :MЯ6b(yEо=3@#ѱF+;6-]!_*{+룭g.ܩMQ27R!fAwLSm'aIhuq MwJ|͍ Tm[څ[9~A.wYdSY &u}r,4vEB. * Ym,fj/j&+n6ۭ#ݥX"67K<_*֟}+kH~gIvK:Aa#5y8'V˨q¡ ls8SlkٷUj}!!,a0 |[YTu%,;|NĤ~3哂5C h`Uk]NoAd@*@=^l:AN#Y}¨dpEKV.=JV`ZsV80ɺO՝7y`gq[ͣs⣋;$D8kWym#`~ ˥+x`.C*LHRQ@}ļ\يbxDBbQgx_J8ɟϥՈ*a V/m+S׺uap}h׾Ǹߏ&1~'u*-+&exL,oAqcT3A af"Pl(ёRn\6:Jm76@F~&֧UM]@`evTMyW҆զ{_# |)0,*6^,Lf1 zY`oUKiߜr=ŮX}t}g`s.w+hs$q:'5wқZ:ue|NAsWbsPR8wDFmfw,Tq:uw.?sQNHwȊSi݀Lun7:T1[)Pz>^9\+Gwյ04,1-}+'uyMP߂W)AB?ɚ ƾZT(ǎ6ƊϷ=smscO{ /QjrXJۑyw54^i70iл,lp&3xazg4f$7=itpukrq#e(D!?&< Lo:00* f*Y|k*ժ?HtL ~Ky ݸh&䕈 !oa5"S_ 8g{ ySv"1I;hcA7`hb= wMEOE7M% CǦίy-ⒿDrX)|Wl&Ta< ;qG RE=ٜ%g5=%G֨PNopshLPJ"F G+?rlum?X>:>EiBb{,"n^Ň0GУL<Yۓ.R˱fz?GA<+qՄE ;=&X Ȓ~RIvI{ޭ mNbnLqcGJ98z߿ ˆQ&XؘRdz ߭9"-6C2 nP:$ R,^{k=JM: zKa?Y>EnCTm +kADlrKcógp:'iZ:PY_7`,KAOLmQĬM5<rYdҟ+[hgp3W"V 6f--aA<@tlUQg_%σ!a!ZciFp=FÝ\=m#v fǔx?mHt~oCFq[HD' \b㓕X!i }n._ B@Z׌pXdb|~,ְ`o:ڬ>ÙIC~j Z:<'P>͎맳 4 ݿ6ӛzMt:ZݶxR9f< RyrtC/)S'9KAq/sTfc.VX BIP`|F,ڲ[z:HsipOg<G:R&p@ם/hḇk V8c gVs(FPU&攑Thq,$Vo+vNi)jpKeрRYG7k'饤z+C*4^:%RSq;5I R'5N[rw>SzlO(5֍G`n*9 BU #FMكΊD57:Exhy?=LZĚ{_Ԗ/x{0%Y%21ࠕ.Yڧ۝76C3kaRv tCH4k0 [a =+ NrNGCC*'Q8@uaQ6ohԧlzy*lĢ=-sM4S@"f!aR*=Z@;9p@%  %q;9)mc4 krwXhZH= !=vc֭гm0pz /.0?M)dͥZG `! Fӛ|vWȁ*N  "_DO95ȓ^C jrEfUvRoSۊնǥ^9X&D J:UT/.q@fd<8r4c(`Nٽ9I95 =+-6z8㙒%4YROB[>AcB8L˅K[s$gKqOeYYdȬtPW`Z4uJ5{R4(ƬQ\D n@._ؼ%4۶}ޕ= $#⦯Wo ~rA+){ˑw}Ҥ\Ȯڇs4Qӭv"3Ph6 Rv;7\( 'N_Y-#7+P {ʭ9<-V31Fll3kL9ʀdX#[vi."(T!- #LV&pJ#/ڲ?*ZŘh9.zKlsbyW#8+7H\VǾlx)|IC)pY@` F.qg9[]v FMa lsU#^5;qsYR!ߺ|RY*EcM>9ъDPLУE\-ԥsiÕpȲG*YMg*9OdA1@<׏VzBt+EၗJm1 <3U4Qt\`}xEtT|גihEtny\@z5d-QPʽ[$czOt~ :Eӽ Ɛo$8d_:Ju8Ѹ$5} Տ𪋜ȡݏ2Jv`uh ` Vvc5 [ݮ)عTCi~Ws^9dC5W3Lrҟe9kSG!ǐ!==*JVAݾ.CLئrKX/j(|+0v@XѼZP! )8uǹ{ir'5GCV\ʆ!`mRwս]O^a?xΙ!@<6^J,!`;]!LG"tAg={G,TZF4HI88ű[tBpu?X)dxq])S.Ȉ1Eyn !ص{Oxqf/L.nDmZRّrem%9A7U# '+yZ|N[ L~՜U<& Q,Ӷ` YțS^0t;"15󃄞@ICU.]d:?NM6̱]'ՏDfd"WLYau?OS2=*Djt=kvNpH_P|iX()R%{GaBuq˭ʔ|_#X=!wUv1p!9ky36]˝ /t%/ki' 'ȇG2Yh!H $ |"ږt?c,*bA-=G S+ o{ZWpBW8=i{/qmn2p.IvuW2.Dr $'J =ff卜S/P{t/q?oLVVy0PEm.mCwނ]m3:|E3rEQ;0.eNک_鯃_4c8dpe?jE"I - !&\iAUh໤YL7|2!TIa; V(nwscj#nz/PэZPw8< :T:=DZ{{hh {y ™ŻjGTRu̖17=|92)Le-4غFG s{ӨFؕfR+Cu'*/oi t[ J$58xUE2ϫ_$au=V!\AMH1Tw1iNjYt85CRzhđϐqe&%+JIZzVN U@\dg %n#aDZ&d31iis:1XϾ@szI~ݠaSrnTS]>Ve(LS%zXd1seL D{Pŭf['L *l4`2T ct'nˉsJR~wƞ[܉-Lᮚ(o~N[y_Ё8=\N#ݦ1)sN'WIv? @zHO+/WY;R vjD7}#<&En|20H`hVHS/u( e$ C2ҥɻeP,%GZEQ\)fLB(nxmd6ҴG5h T:'%a"rVas14ݯ_]{/J o45rM}7 v|D IP]Hov\ie;NFP) F,?687.̺|fv]B.A]6<]ߧ+e^.҉{ &Įކұ!UBlpOqȧb9] )EA=l2]X*%ܐo?Dֳ7烺)%2 'Tt"[Xp(X?aR{JbVg>BW }q҇Otbױ Xr)Z!<w݀%̫RYctAB^@$4uzqB/#@+)ه݀ D/efnN讔eL7EƟ55^wF8 *h#s>t<~5g3Y41 Yzuܕ`rwӺDunD^ QsF4$/ S4"/\?ڷu="ltg|G^sv/GUAnḷ'*|8#z1y6^58*B5ǫ̑_[rK/dGl%YiD {aibdKj;YsGa32뱱WMD-UTƉ@O䆐~D^!%gUs# D^_< kae&򉓰>ÿk@Ȟ| |>I,:ɧ\giS:XZ{BXx☢~2ˋM˥:o8V|8%Bh_{O񌉒b{/YcˊHIvgV̮xU؜,|B\Jʌ.g]J,5z.;qN? A勩;ێ6Wv IbmK8.dE$eJ;Z(˚=CbX<_CG[=x6, fcy<@^NC2 m~Z˽`&fX,PZ dfab|YoRs=,bkKao!o:-|EXGEV޽$y \afw7=m>9&Kl=@CX7K(j2F j-`ͅo!1wGO\tI"xh\F@R>[*@f u&s-^FKFdXu>kr,8Ǩh%e:CbgRJKe`Ե68_Wb)XL\3kyGyBO+L3ҿ͔Ok>-v^|ܹ+Hy'D$l46@M5w3S 9`ymx\O;OZ:?&JωFRpT7\Gξ,SK~J=tM /솶DÛhHk;q5QEaYDWQQMLIw!°7wK팷rњ9iu;݁bOrY=v$E9c}nvB \_\A?_,z܆OI9yjʃ0k˂jrEve?gU`?mȐ J:|[ QٝߘWقbnF_?"]iMiȴehFB}Ld0\zX@@q$ u%^ L+mZFy7&Ii Կf}Рtr&_7Nqw27/˴SFOM~6B"Oxķf.ZZ:=avn2H)fpȉrT=od3ZW}ב4RuC.Hr_oB0L#(\Lh9/1X.dfB*s$^+'6ޏ~ib5vT[֢ͅo\kc1wK [r潃XKmX2dIF1O 0B g|-axsI&>~i\Bh$Ū={ɂ\,gnLX=2q\Uho{zsSb'9) *␁O۹2UMeBh [/l1V<e k1'vsLd1t`$(b ;mg4&z>"Q˂o _KmV!>(yI9yQ2+<7W*P綳@kWhޢҎ}ua?Wqv4 [BW"a894/!Mzqc/f' s^bNc*ou_t2-4W塂QBKnMll3RL0i>0]` ]X72l2Lq'n/#u3_Tm#l*- 9*nx)K;kimD0zYqMe!|JC͇~(ܳBs9?nƘ/ ܺN&։|8^SzPm[ Z0rbw$@lܬM4' eBS~AcS:.EdT!}n }7y{"V&Ѓ)nhfjfI`.U}OUU 4kOqn+>g!U/o 9So%Z*n~(jZz(iaH-;iMɭ3^>2fUI^qv=M==VE\) r eu>3v~08J#u۷t"AKZQi;BbTLˬ<̐Q neuʈŕAitb#L RNS>Wص:T=Je;0ÒJIʎ⫋>~x 2*gžN< 5;YяzXXYiFTO)Ӗp}~q:MRSHGTwZؽvbjԧн N1ԒI@/Zv &⛣f %yNp]v:a|wO/ɇjC?9*FRcDER v#j2ԋîeDH"+TשFW Fۆ2Eǯ9 n$gtV%D4-MsZ%T N`4eK \&/叇-xL\{}%a I,_k8LBKޘ%>ַzyKсdf1 }fzs)Eᑾ/.b J铮_>h\28MV'|i|cXGhyL0&8;R;QLʣ=@JȪw6?,~& h5yf:͈wXwkqsn*%[/]G_9)w#;a=-MڟB`P)Mzi \G|xQ7OA-+n' ״G7GOA:cB+R^4[=[ݕj2#huzF^uy=TA%NQ3'_cME3\f$Wg"΍AFtZǜz0p`֜kJRf*e,d1lH 16 \W붃|RYq Lt.e r%4Vl kf2y7Er >̮z j2E* /nd+{p7o@s<}L!"lo+A-NZ!aL6l;?SaUe?N8MBLe[aP-֋`B%ː*-Ct!BSfrd %H&̣Ů+EۇH/sևܞS3\3^py~dv7$ "(8͓KpGB79Q977d[]kZQiDfn釄DA@Aؓwg57do~bx,Y0F$&&$YxM$!通q>0tWh7WZXgS`_Mōlt^wE,-eo. [)ɨJ I,&=qb6+L 1:'ܓn rSM? 7'uvgX+iIgLEVcv%slZrXM5_m-Ŀ?}DEftXMƸZV3F֪E,[EtkvLć =,LVnǽN X)LV!)"ŴǼ&dЮ:x$ŕzPŏ d5Gŕ>dBb&J S*74|v+ %dO_ѳoҟzW8vf7,DVfIPz$=4 āLK[Ѹw]`elk3u.8tp1 Yͨ OGppå9>\=yL`^n_9;ךZPv)PGE혢3ga(N ^-lNTҎ*\|Q%jPq[gX) -HVꮷL+C`Yoq&h2_"EJ#>.hYc|{̫K͡pLX ~jNYERp7 TvϤ^l>ĤKl@jo{h%QHDD->d+ѵ!/#, 1])LrC˿t==~  N򝅂@H}Pi@\C /)t9 HFݴo?&B`Q 3#KGݶB}Dd$̐O5y]S?^mA؄V}2Wۿ^-UT3xG@ס7+t*|ܤ ڋ˳8 ^>@ }_mΈOb+cWwͳܮ|ڇ2Ko~/H>O[xWUTaQS]>E2)n~gdEj0hJڬN|kozO'?1u6cK?<4(c^OTf@?n.RMOw@7iB!!r>5VCcioW,{,4c( ` 驫'vU!(fi;?ǥvj'3,=U,V y'Pk,=v Zn/߯Y = 6 7vƮ0e58J=~̄9N-5mыaVUvi>u/$}xr&~$OǏ=$4dvf3,M}ˍ"196 `l}WVw:$@!JX\x f.X_ĪA-X a@D8@hi'9 01ߕ1P[ \ghR2q1W*:S_ty(+z o, ixD|*8%?ArHFڇ~2E59*4yծ(&S%8@^Пd-&Ciۙk (/fhZ֫'c#Yz@Кyڵj+xzEBVqT$~E;lԸޔ*MT>GEXV(rx\fĄ?/HC[S,;=d4-'cu;?,N7ę:o8k畕?@xE :8`'C庸~)|D]ήf0K|BcGWs7 C쁌-~!3f]{@%;rPHIrGqi&:dhԷyR_.c{k)bc||bҘ UoT!nƔGg| W@ 9 RIWe2WI$|Kgצ6b"B ]و:?j\ zNa'dQb4iwY}Ex9$xbB4Th, ٜdj yr៭FRY㘷R)Q7gkUuJQvX$Grex8ٿzownHW*joIS'0v 4!BA|ln5]ݑ\m-\BE !vTS VFx|QW!>SN"?696+@*){|zFco#)P/޴N[ ,f|(dԓOLb>ȣDÙl Prk]Zjzⓢi4xz[Z{& 6?cЃqp~3ys&quVVE.:apyY8J1Ʃhet?^JjY` ѧ),\H*L>LDAa{ O-Zb;6́h{t|aZ(W om,2q2\{NHӇJFZ'X`}U`.2K9Zl{ |.Xm4mqtdž7 S*ى7_A@ma9HHЭ>wni65Ud;G`ik/Q=>>ږ'ٔ/asb@`qaTr l_q$Z) ˨Ԯ*$(I o_%L7*=-V|H}UqtiIb."Ph%í}0ڃMMP|,N>i{(뺻~( LS`%ʁgD|۽[$/ p_.fvHlM*EQ'RrX:UһnҼy^LmUE}ND|u _"ͅG*O}_]8q܉ѕ+;?A%6Vk+x:]:w&w4|k)]l3#Ae`X\xa=sM_8#>*ryx^qۇ%R׽]22y7x oj]]r|pa^[|6~Meؾ%u*L-[gh{^th1ԯٵE{1Nꍳn_B^iJD yOFRIF' JffMPsrp K Gzi0vordi`D ?G*WMWsͳ 9#8rN&zM4Yt=< =锫8O6rreXPezJf#a AM2_XFRZ]{ r6q9H!#%Iu TFX7w%XS8bw:l:BLi3ny'`VKWKãL4^gqIhbY {,n=q QTnаVFs{f\^eJf-SRRy/  L`KĞ&@ !|WNh[U%a-"X^O-ɴ(.dBǂetMLL9Tĭ1W6qg3YdG|vW'7\6sl؈q'~`@~]ٜ~[gqy#gmæFL>1ѮӫWS5PJ1N(3ErZkK/ȝgۡ^ !BP >7Ó奜'JA3< )idFcnDKũ8 58|  6 iPBD`?.1R.*^^X;k6Jąȴe[Y8MUIQN!d\n|WxgkAf--0Aݵ@m}a趑o/^u*} hbsTTL[4 '6̎2?dcݪ[lJ1F/GveVw"?]&]ad57tUs!v0?;vQq9ceޅ 1څ+O"}A0VYy \V)[XGktb[[CⅤ3T:x$q|a5hR +HxD6A4 ?4'9=U+Fz\&'n=zڭ&',v͐jj\,K3mj/{ 'xelWfIK?A=hT_%x"XzZأ6ggzڑb2"St5foWiz,wSbMaiɢC0;>RSv[*b Ok 7н5lyUxUk4nd悪Z3$(+a!!Y̆b\Ա\29'2J,s^rߤW<M\Ս!8{ |]97D[4r} ǠI[*?x֣|KܠU7J L"5,^h@HKAe@ 5KQ:sc[:yYL]+$ :7ADʍ ?,c%%ԜOV+$D,nz`[SlfxJtU(}=.sc|2j]f$(~PjXFе^Th c|( 84L2=щ"F׫6J **n?I Ok) 7WzN2?muJK\M{MϤuߋcM` rQ[>Fr`?vK#ԍrCB6ڙyX]DzO n:X]9KrS}}H ޺Ҙlh>KCAt4"!aʹrab +kjq靄B(D7W@,YkiGd-6w-NwC)`Gh o&B]pm(4I(u8Bu 2GK syċ:&EhrWoĿ޽ummMHӪe:Q;7 G$=]^gu,Pt%G}.IAՊC@p/{R^MbkkXwf0UZF)bF;1 ^|d"k2c`Ht'H?gcuGZV7r`讉CWMoUZB\gkVb*'Dt>78JZJP$]A+G%S&I( vUj6}CqbeCng?+4b%/EkasǁÌ="􄡿/@DSAg0Vb#пGʟ"C}g!dg\џKZto;A>>fܡ8NtpSZhߋ8omP.oST(j^1C&lV=e9aBUKЪ(7w6$B,U2~ɶ=hdj4T]LZq?+!PUw)Z_5&ʧO':=Hʭ>j[9R1 hx2dұw"")H7`c`s>Rż8قm($1PСυÆڵVHz z0@rk}0ʩHfWN.~62RH_/xeC;'L$/ulΘL)@d;بF{Fe{̕װOO"޵+Ch`\pdЙNdQHYrʅ& k*@ӜۢtE7DM_➱Tz |cc/}$Ru g#mT]i:quia*r+ƒ{dOZ"Tc5I,=q5»; D̦\fw2в3Izij&9|[cj6 „lGSl RK<'pBc _J6U;d^0Ci1XF9|.ҥWp_^pw,O]] dS Oᄢŭ^3h`W_\f*/(I[לd>`_؏#V;6Z зU`1=ʢ8 e6i:T#Ȱ~tF K@뙚2ZeЫKBlé. U:x3$+x%Wjmq=#zLxzQ*Mbp Tn@F wu͌g=p:"ELbEs9 mmPIGh^hh3_3eT":B/hU :l逛4Y?%'{0K̘>s|BinoCiڌ5eKx:x'n+ 1vF,G~]걲5i"31եu7Ɣ̟咻X.(/&Ke*LYZT 48ZڅJ.2%h~"؛Fܯ<^S(fQ\ҥm;Бwz3a7Ѷ$=צ& ]Aw}$VYϖru%yX\s%ʨUX+I7&ٜL.o ![F{+/3Ifv,QMqy+>N{<-z.'#P;UsMf7^Nx J=4LFb5$(t4cOd9W=/0"Les(t?<*XFc+C&\PZa4W$T+#m<*&hpuRQ<ȸ)- I68LVmfF; >t-dW`Wn;pJB0O)[̱Δ>ya\Hb>Ϲ[OkդQh]0hW0ѯ ·z4KOC$F(|tDw`omJ]oaurhqHrBގYҩT~o*U.X 4xd)PNuPw.;{[P85 +1(E~/-x\E20.+<#csZTk02G6 6^nΙ3Y|-!w˛|9Lk󊟎Dd0@s+ M+My5?kbIU/VR% J J%Dν0FGn_ Dr(z,#6C9$lB•~ĽNK>bcby%^MDCa9t-`5,*cG1*;og)-VTs9hT,+=Hś8ZvM3jNtiz)q@PiZ!ɐ'*KCy (s(axic[Ԛ[Adid߫}A!"[λqT5N>u2s Y'Z0/p"{ Hr `g#Ԅ[[ V(V;V08ÒZ}71?hi?ȳ .IzbhK W>sZտ i?$`MtD|=_kayh03]^ ocUI:d9i wΓ_BbU0`l 윢(Cl=Gb^Huh("0Ҧ>榳HYRF(U%,$;jQw)WSa<$@4@do!J 4aYsJH攍Ҵzwa 0JA+VG{&U^[vltŘ`MZu3/v>@iނlB^U-p_H<1#4(0yPq{?hܯZU`Hx swbWjLK&u=SL*11NL_5qL;R:G]z[D/(~"x@78;1ǰ_nvpF8{h{lRX!2!0amE=-̌׺7Q^raқ0-^bE1/G&B9@?U:|WYבlaqz&k;K 4 `6z`<+F7K޽Q|XU(1u8 uq&ܿOB%? %;eNED@Gٻq0KԷSʭƑRL>ɥINol4gV<)of@$$Pcҁ0V:z֛;bk}T@SDyv%1{Ո6fB9Og8F,č >VcGn4_d`j;iĄ-;kKBNf8;%N4rMu͑8bh@8l[e~bZ\o-(T-!ɜFn Q̴ QRYБ[SPeGaJSmRCpg+m <+I-e77GJPl ՞/8_sP)`>5up%]<˂l<;wUI /TM{zW8X33D(]ZB\Ω[blYbx ib<9!b DZzobn&+4KقD/vbҾecI"t'b!4ZvW6!0pJ J3 FkHCY'deM|^l^~af×?zlvNB wmDݐ)"Ԅ A/e)ĒFd ~E* M0[@?95ٮӊ|Dm;>uS=1|EGmqzphꁘ'Vacmvع=-G[jxBc6[a`-%xӚuV1Wll۶>;~d$@VہVMAh44|nQ , { R2Ǽ's‰[K E+G]9KBP*nW2dᎽ*Ž2tìkhd4!hlY.CR@DibR<8 P9cI J3Bb*A)@111q^>tp:|sf1ș>Xh86Cw~<ÙgrCSV{ ^gVF+.qU`2\6xo:LHg55xd">~,(Υ +qrI5˶%;UE`vAyQ$84#44wa6KwqmϋIV0}%.ޏn,P G-( 3S,wGuh0uhx JAƠPւ!1RTlm=T{ńMN*([6A@ WpݠG\jwqcvqTtc ww|2HΰpTb2IlPʇ(?bp݆^A-S1 u.Yq G{ FGd;W@_IuǙ"ARR@a g P'}[jD?$8ό _4a#*7j_!'F=jQo] Ea=X8|6.^A}3])dQkDW>RΡg"azd ?j,pC[^Gig,=:(~gP1GpLyhJ`pS6y3:eU|~>MNР|-ShV\}K'pvVK]`sK XU|C>;6'HvVuZ{=f}+$-' !Y63-dbglG҆C&o OUȧGkWlEe%6YX8Ү3X+h7ձzΓ̷p0(\QC禱gX㠊M4/Dytƒnvr~ؗ]yۧ/L=uAhueOH}dgM0+^g}DjShlKڢ˗ӝ_ ^u(Ozvdtyymgod ɤQm(ߓ|7ã}FbVxlj@ '|+p쾭OGm_ۯM*_yJkto5(7]*** F-[o/gh[JYWo0k:Y3}yL{!T D"?@hIeCa c1mD&S{"Mz WfDzq𡪶B~EmPUlA^؍暈_*Z+2%Lgᑿe 5G#؍U7-Had{87m-T&=N^RҲ -¼Dц5!}q O N&9·j) ^XOoER$ IU/ь}fgaP:,aڀ`6!nZhtFRWsn([97Tm\˥tI,64ꓼ#@ Ɇ7YS"f2d}cR'3>}^S8AP0c8/t I^lHzV7Jq&4s>eSXJ 豨 .gPLUM깝iQOSDnVa^kD驡JcTrjκ匽ҹO$ $]>B_ IۇV%b*#mTN/:6>0u/1RmnŇ}?e魛(T ûPOJyڽSuKV0)$-,DB,DK![fnRMIY@cѩa[ sm? RQIOos;ZM|EG y2Y&3+-iMƳJwO?!R) n|@t HP죳D0cR]37,Oe73A8Kk$41'qgT2#AǃT>u "^!p~_Zu[dY敹ٯD9?jIXݪ` F?5LN޶޽ĐcfOKtzx̀-a?{p鳨lO XV[SoV=ey tzq~"3z'zmuC]-g/ ΕSfFT 7S0&یq,cwbt3 Sf?#rο ͥMrf{\1ʭCiRmA`*f~I?B9I'H0lIpX묑 NQ"^2}C-qUv3AJFQ?ۀbKa-U_[J͈%á)YeEo7rtf# l΀#ߍ9BbZzY^+xjJd'|;o)̬q𒤽PL{G)@EiӷL 8D0{k0=%?LSykXߔ(2V^($􆧛4ur?^du_R6Y n%c&粏F#jɰ7rm 4CH'h$)ūA׫{qgD,`u Owή{=$?!-}xtXW0lʭ^֣lL=.>>B/jl̜#1a{qqSedۜXH^-Wk "2ݧ ؜k~sٟL /P Oe\,f$2*q_qu:#w8rٟ9'X, 1~dڨQ&>@78lNj\co$:Vt581ےqg`'!(8VYx0{M%q;fuJKbHV &SSN "ң}&chU)[j`ͤNLs5N\v'&]v6Fc|FY/)c%g9o*uXxy4tu 9p z1&[9c.3!-t//Y;`<z~a6OoACx͖KW}E\>u&*}1x8#y2UH6V΅rmД;_K8pv3?/ /#Gn1ꄹ/W;m 7Vݑ`I}=uS/^PpqsQd^Nturi=`3_pcP oY6kg\$2 #_tnǨƖe y[#QIpMg“K!C)l<)]t|/ p&-fOXjY׌`Qq1Um{{C,_&FcH;uS~kUtq$Uʅ[Y(<[m<8ҟ:*>cP1e%5 alHa˕[G<Ǿ7<33cl E%w& D"ݻ^8ޝZ\E@^JD\ mWFO{٫}X.TQ)n[Τ_gdFT:PS6VHϸ*╇$ʃ3I<@/ 6iP;Zp=z}N9&}rh{eeՂH-iiƍlt;j(ܗ@3CreP:&DFP@vFL~ES*ܐ.ch0~wB$[a7(RlX{vR;;HR:\,u]֪01J$O7C9%k/ȢN3/yԟ8 >3x\@7R,sGƙO%bBlA5;) !rOT+ъdWKQZ Ъ Vp›;LZ j/!;-)l^GY,xcQ*u<7nyn[d׉hr#K\NCAַw[חtX+0c tfBG_wN˕1iR=MP zA{2D;x*unr3]T$&f:]̸qpi|\nvgX{[uBTba폟`<\q!D z'b%ׁ-3s,u2yM:W*c2BdƜ*qAe2;B]~:i 7wX$یdcfφY((x qhjh ~ˮK5آ+9rV0)\nhK?\?1# u}!6B 2Y><՞ݐnK'pZiݵ4J`2"Z/@HlA(7#}ؙnH*`B1:jTZ6ΔƎXLMtAS@L(VVqoٍ(tZ|.z9j;orFZhL(Vlh0De,s}*ȻW%v2Ȕ'D?~ޱ$}l_R)MGSi6^&so89!E` 6GYO=_P(?N*Lr) aRtMV|:SrgkR3n* 3IS5>6Y 4% 49l$ZA|ݾߑkM*j1gVkJ^K"]a5@`* h @Aү97s,qV'klG(sgI_|sL^Q"Pt⓶-@Ά/g=hFgMhWweynw#z x#2em!ϰ#}}|aٶ PJLxaa~TfPsc'\qbrt{cez) ƀW?kB YAU|jL,SԁB+%܋PxKn\'w):֜m}R?4ɱ Y(wVr2I:sW=f$mb`F :UrH8Z- .u&gOMJ?i{~vzȡ4H:fD0YmtN,R~Wwy<ckm߼+3&g rEeUdrnxb j-^AYit"BLI ܺ|d _XM(3 boha]@zMcΨoiygUTGxdHS-uLOq*h$c0vQsC֪!JԼi@5G&qhm]ݧ 3@ \^ X}M k;g8Avgy ]^6asR C~C]D?zlⶾӅGpfh?'깇 x8PpNʗis:iۺfRV4ndyޭ ȂF/&mfMu!%`A]Io=|( 4\olz Dw%1 ,fuᩲIEE)S0S91xQ_jNE c|j0blw00[}<;K( \ۊ_Yhnȑv[Wq$o~ LpQ3S5u@ )+F3:S>l-FT%7ϋy3\xr1pN\Z9#X5g&B^X%gPFVi zPф\*W;n<` M8")Ў݀69 yͨgcՍ-.[hZ=0͎g)t>" 'ڕ`-qA1Wf%7BFE'Q(HOva9xe5O%;Q!c$ӘfظWؔF#3~00efTx+4|hkGye ybo92-w@Ci^yN>M+bNB9k. h_g!<\wVW)My~QlŐڈ?!'pI^@Ļ%%ƶvfZ?j1MȥVg`1핍-rڀ{0q^EWw]ހbZ kjunHPJ/ȏޅo>2LHuSqspDsCs1+ՠNvة$vsVe=Ƽ_czP]':wϑ*(`~$qlZ[Eaqd,ɃT(8 tuB"@(~A=(mףt{dKz!)B{@{q;M'mcZ&&=;Hbn|2tL'cft4lRt8-ݝ@E.+3,Eɡ麥Hvm+WPè/' 4. u#_ tĝN,V_9Bb@Sc)b3w[ tJ-V㊏yV!n߯{:]  D[1 zͷ ij_P5{D^;Xf _BQ>h٥T(<$/̗U՝yL/6l@vr׸-ir.m͆{34dЊƤJU|7É 8/˞]-M#źP56ύQ+KϮiV`+ 44j6W Ob?1R,ne\ƨ-lQ|&2|IŌ+>B-5mP9iI\'`zLFtS|ZW])мøDr~4nLb jEkX, iʆ۝uގ`(Ÿz_]&{H%Vu}Zh.CmV8mŀk Ym]syFw^CL{OM5"'"{ZCN_9,vJ=n1גk" ]Fƥȯg1Ca`E,Ȫcxl9$|<|ϧRo],EK–z5m͵{ -y/+ƴa\uhW>JrW7ʁܕ,E5-|K*1tS\saBehmH;/W̘ ʣk9N5Q/UrSۂ"N2%Sz?qzCL6sr6Pd';Y=r׳WIO'{7_=PUI?;2A߇*znIŷ}Mr'Y3dwk пN{ႜDdRwЬUS>4\v3gdE~`nR ˨gom M\S/k bs<½>6#sq)j9v n&gc9-B p=]N'J>'rݒ$kK6'σe:33=fHenBsMt},r Z=#!e+&yTNvu-((!fȒ6,M,,m n餆G6툕&U_2b{}Z KROs`Дnj_pwF'P^- WI t@*JCx41<^>I&xUiN\f.si]{}J8#=AZq3L'mOIZU\iQccB]$9'mOX|?ɦ .-% ?%xǵlZ U˞GA*PK7 >ҨP'"k])Dȉ3IB@t+ʏcg12-$WI+)0DH8<;Nt}>0]# !WMH> L~^(SE[Rv 8@{Pm=iaN6zpy:BHɈedIGuXBf2S|>z_CoiyC>-!78DR%NarG=<Z7584JIh,쯫{M&[+s<hHYʊY.o-$"-wIL4NfI 1^OhL9/J Ep(؝ 4ҩ`J1zRz U.z~Tf3',B;-m oJװ[PC%$F8GqcTP˿u.x^7gw G5ۭS,H9 ϊX6F9j9Dpa&#[S'ˊb"+`51z^~KAofcmz2>FE4I^oafխWgbiЬW8hPx%̛<]+pIe*g-]^fI3KH\>`Fu$]VQg^TY];_#-t?-lnDDA7 E|!5x}E{̄f "+#"W4ﷇEҜr{*Ilh ;xa? Dqjw$ZMKPqŁP~2eZ8@ً*4V_qh"20䈶mu`ףQ5P*Vcځ $kk & MԽ0ѧ ת**-La4z1Un3p&ʺ`K#W=d*fjG*0qϹm #tic:[B`bZQ;g,TXGP~IJ92ZpNB+"V#qB$y=Oz;6ܾw 2>!F5l?ރ;!A*ww?b@ts",uX}+Px$;; n n~EΚ5T.+Pr:dC{u"sy/c옟o0sej gy خ1;5S`3 D[$0*l6Iܿ~E7˒TZOZ3 2+vXL5Kjxq$wB? Ȳx| !.6[ltsIͪlơ0ch3b0'ikFSh`T5wZZ\X&)c(7LF ¢N&+kXR2c@ 9(u)FiA48b|27i3+mr`^*v 75K^"{pL*b:$K}օžn-v+j,z.@:6m/78?N*(I޴@dKKdg6 VabXͭ !Ç(cl ;@\ndp Rƒ?cs9y {7 DEۘFgo%O[O'R'={y-s I`QbtoaٝOJ*tѤyӊ890O4Ox.h:%l%"&d\{h`8YnKDє!WMO}umkxTf-(#qSdV|/f[a]N"Z+&*_ޮ[R իr$h<2 FT;wAZ&.i~MMe,?}x +QIc*;qh$"V9h/6^ $b^'ÈDLp˹JpQ2ܥwRBwBeGJ u{VY'kR;Ιph7x"Efi=ؾ ;LT , /UPS| 7gê@^h,@] B#rA38h͡sXvh^GEaU]:egI*Q2Aǧam!53'b`G+:Y #WA&mbe4?K[4#u Bz-SLx'u}"n50Z$|ϤZ|\7m%GrO2δ2 玫_,O~Iː:"F:cWccۨގ QBߒukd቟'㛦,QC t'N5l#M&|+Yd5ŷe;iGKrG@<'38̝tbt]kh6ڴc2 {X:lkwGJ2}v|Tke*dz%[:sL?c۪C!xFtxnUEi]6i*U?I]i{$qaF9qp3oƜQEASśODkIr&sF.>oؿ@5t!7t|fGndZ㹽ϤFK;g5+FEu_9pHS0]^lvM B.OQ OQJC/n@t@{>f BxaUfn/t,>At TA'ozF`nOR !f-̹YƮ}&?r cLTbK&v`97WC)^SGGx͚#娻T]|⸋?~&NM4œҧ') }Hƙn7Lo]HW~m! &"ETŸpaA\L5>Z+[t%;/ MzxWA?KS1X:!ڛA`ɡ@]׬ ~*T M% OeBVH ɭ9EZmz~3e;^]#b@5D/"7L1' [l&YR{ m@qqע^0i. ew D;oP^=N IK&)^(gZfŚ?bQH"76cy2z.^| F(83N ^80] [0RR UV{.,BmawڇHiYEWfN 6H$n*B/Kdu?gKm*ѳ "aV.V36扁oJNl";} ye4")F*#c;歡fSPsJ>m:p),nd8I[W'ho؂6pbTG65g|\*rP;->𦘆W:'GOH#̿qQ=܀yQ(JR٬_6<4M M3doLŻx/+âhiډ7z+D﹟LJZ ͚#3 k P:d/`QmZ;wS Oq’!cH)ðx (~*Pqsh[">H+S XJVg:QKX{:q(HH.x`haSLD>Ҕo;SN/[vY,Bx 8']9H&il$CBM&9qI|QoNҊB:Q{S S.%z~Q?kzr ݛ]VES`0TdxxSE8΅] &-g=()qAkU䜿Q,cD2t UiL;QIpq&5: =Oj7AUVZ)z6~VD>/|g|'11Y[D@1T_Qܕv TTJewˎQ&aB4ˏWGN>Ix O+0`X pV) ~Ժ_( E+DuQ3NƁRcIU3VFh{lx 8؈.b9_Om Me+6(0RCM̲2J4 D^K[QD_/i"ތ)qdK~! uxm?6iD]HL9 jm#տ56ӧ,V~6hAպtsv^z;ZC~vED_:]Ϫ'EfGsu%Q% H+0 b߫C1>p$¿6U]Ȳ\VbuFz.a Ӟacvcl'@e4% N^{[0(vZIߛuSYgUFۃjЬǃ/[Qv`ɢXh;/ȅ B9f}Q`wJPPI(AK9C55yW针=z;A4!S|۬Ug,c YԀ`˶;x~##R3QbĎ}*u9}4" iDDI,l sV.?Ĭ) C1"Kœ/<^1"R/+d+Y0]ZxCEȝA5:?c B]zTخ|݊ObIk6c^Fr\ăows4U5g%I}&>R|%Lv/v.zXzYlT +zleK# ]q:_BȆt i,!;J,'wъҋ 0;܂JuS`1V0t͏[Җ.hHɖ,},^ YT'/RDLқrGTF( B_pg!JӲj!mNr`V=`/8.7rN47f9!Wet>=&0s@#YjlW2XĕxGx[hme͙ͅV>pϝTu[\:IJ i~1lStd餻1u,jnG=Ho!Qmn|Wx`d _Kv>Raޜp( Xa d*,kTO?,-7հj$'`cZ a=%Rw/бh;kGZtmg.f龛@8&Y*A+G>Jg^%A,'4J0됛P%q4`Z^oj{stqk~\ّrf5$E=Љ#CUA+9~krq* HM{;ޕl"Zΐ!'SBBO7Qmߏ} UFٍw !Mv!؋~!(Ii+ፓ*% RCO)`yudf'Ԫd4Z\:K"&.Xh:KSn1$_ )~L<"–%2Uhe HXPL&"8獝֫%1T`wюm]6Qi(ƔL8@c=d@gk3Pj&kVlodx)~PC}$Jr4K~/Sw/F7 '3ӱuХ ήqĊ)f;]I~z6%sh3A.A6*?qt*~_kYFW 9}(#WvAWxNY )8PfЗ6?M(eG>N:sMzU2۴zۍ?@gSR(}Gބv0^  mDg ĺNgGlIi#rS33c5dTbIlTBHx4UϪٞb>KWCZ48or<\s6i)$QH'-NJgmpw B5sǞDN-EGANJ3_$R3"L),[Dk=.)bkNz9; kmzPm-n0:ū3bc ǂ% G?r7`5MY'@kQĺUK.htAFX5ˆ+rqݭt0z ai _ȹH؂Nnli]`-r;p}/^! N3z%lDm`\MB?/(9z؊h>xȑCu_}dp \br` ͮWA%#6aB8bܵ3ӞC͹$yvzX7N ϊYrF "HݒU|QDڢsuZ$48>=C 5g^6а"|R6#LU"U/!˜|nS*g:tR84RJa1jiDiH=jЇ:}[4"A>/!_gfwGPG*iVTJUivBpo@1cs ¨ ">aLj/9LOވ})N A.hn W nZyq}N#fx x_{o~²<'avµ<E#8Ƹctg,C+S.?i 2ÌS3v4H$/ŬWv\i4Wb(2ݳ<3kWR\!=^c!޽'Xr=)nx53jy>QFrl}ςl*Sp1Bbg(.)vIAE?-uu6J#0o-ckFa srJp(+h HCFWd$ -A d&.'*ib^?XXkWBȭ Wu&uM;w[4vHlSLh(~o̝^%ӶV8_ZԜ I j7zOiwm~4rU$0 &nMąY֋_1^>F43ҹ/<aZIzS阹ǝFS>15m'd%mJ_UOȊ|F}$q*rjuyWKl(o$G2LT؄##[Irn81t|6B"E_4aÓ065)lqflV( |JU#>ks'˅JRL*E*er}K5薒Ba!̲D&V3Uwi/QiDE?G*)t.?>^#M=[s"#֢^$򎻌b ;P#A$CJ%7.L.\LD-(\/_u81*J龳[Zh h#ǍSS61p݆jJ ^8~jEo<8b Udy9e+Ǐ綝pj Iŏq?/.MwW9 @/y}>)E99A kOI˚EgAʋoeE[/@RtɄ }nT[xf둖58dP%Mo@)OHYQ^p7+Nn <oUyl2s@.@Bp\`CO*ja{CX6cH?ÿ4@Ǿ&WLaYGE%.Edq䷇<% N,C݊k:lR jNV|Nxbpp)2yNZ;z8-鶌~;6UI9f j(ISm;_]&`c)4NGG :}wFT"SA;?'F[u@ݨ1Yy[6a.kI: YVO}gXwce霕*6ϊn}ݨHPI{a%6:ARM\n0xbWp=Rb>Qj\S*}U<ҼླSU`*v-<V!Y6SWXb+chh^S({Ku3ͦ"Y,!;V.ŭ)B`^/Ԗ[GWGͥ0(_3IhQM>[dm/(Fx7c;;`6½sSmR:,J4$ܭya|wN84)4Nuy >R_ a[RL)i- }q 6QVxW"\;%u6u?ԫa1ѳj;튣p3 H%d?JH Tfmd2,Tw+˻p}: iP}~ٛt[;j`\USp! H r7}܇zղ8 qac~+CX+(AṞsX(촼Y!ڣbĤ#-us\m-,p13Xkx"҉2 ^UEk ȳ"U /(py=n'\U9hktwp0e-W/F k:*->y<-wbf(wvjoDuDE;ؐ#dɣl& 4mHצ F^);)~t.'V&%b!|c=*)1wLp,6 \1Kqg#f%# G;`~>[[BJi=S2j0g=k2϶p\&"2Xz{8%\-$_;SLt<=BYؚ#g>vvQx@GF2ϡczYi\eDdC&B7}걻-Z9-wiS7Vϑޫ*v6OTZY!.ۧuTaoJ&tWxPCj+ժ`v;b,ӧCyZ̄xv=oU>/eIiۄׄ'.T 3էr?kRP̡K%ir WVN:Ϭ7^|`[`^0,R`f7`VN.6lxʤm 8(֦WC`Tsf{)2u\gUA~OwGS7{]k탱w3"9X(e9Ϩ7N,/iQe_ hn" Sd&f\Nyy;uf|#z 0IfZY^\+nmR' ֗#`~,$ع<-ra+NqscMTnFnk2ذtv'fLT5 vwp֎xƉz=A.0m(&ض8ыXp زRǗI8a>22 l)ކLp**_F0SI#<3R1֡kZ4,!I0 6W?S,pٞ@Nh;%#yDTi~ 7r.ԑ.z,A3q%( 88n3 {F.hHs#~#A@p2.G*M؝YTx|T1!pQrp K[S`@w)4جj68>Fҷh`p=80I-$;%|kqp>l2!o7,3`[&1>M/Phjf|3!0y[2 Xj%lԊCv1O=t7MS>i-ٺ&RquUCkM%/SLlTUu G"RϏ읲lf>=ҷG`"ymó7})*w $PM҂X Nz-k1rUhE*=;b2޸α"֟~l9O>KsQNT՚w/+2^=As`A9nw ֞_?u`0XWsVg<#WT'*x>K؍е@I/@a1ޔlYvxMo_kE[w̛.}C8 %~˽p{ M]šcn 'RAȷ쇄s;tkW/8yh]?х԰+d IH//N7D&8,7>2-*sie6'?ʹf $ j((q}CU bX~g5L"fƎQCy2[Z< 3Q r17\lǥxzjXzˣ(cc4D` :vD;_WTp N~E0)E+`i_<쬍GhV9K#yJȳk9}mjLpPrX|LW_w_wiH9%4Ja_Ҷ[RTNUG?e(z̈́2*[;@ JwCś['ERe#>ŖD@J֓.S܅WD԰ ;g,iWHCZ~ptZ"Tn Y9ʀ+8'>(>^(`C#o>\Ib˂l |bBw`da:kw&3+=vjfaH0ױI)~R+*zO`cʧ.iHo}y# L [CD˛i1w<݁8:P rf[hM<3W)J`BɎQ3Ë5x67fehk,6J}27E)&pG̦EJ$ժ@8\FڼR)ң֢y '=AѦ/lO[?)Uҗ.LU&*"z%:KSڼ5 B5_*풜-< =c1oG%!u3m$ɓ+JWS\MzBH&y^iDL#>=ZL!/1dI%!,iji7F],Gl;ylrcP|BPQڪ#;OwP[Іb(\3)Ch]ڠ`afj`jƤt܃FkI~Ռ ~r4bZ N; uªqƺ)٨`n'o^(d@iڢrރdʽ DAevU&v{Nf^Ge!K^Q_Dk3Տ7V+.z+6WoB528?_v &ϸ*!;'`#Pùx9aa$^ {*0R.&/~qG&GGCэ\U"IfE7|:{n/EP+^<9{hvIVrӆTFlRYb])[^V;~߿Y$}@f"Y@\Pjy?9ɹ5zq{Rk(~3+%[G}'ā(a#ℙOzDlghF%\ۧ 1śR1ה+fÎLkҮKcpFҗ1P;ײ#-p.8 `أf ڍaP6 `ʱߦ̞蔡ylY6[[AUwLY|〣2-;@up%bT[BWeemvMD3J*Im6WOܵ=aR;Dio:0i9m~$# +Ύaaߞ}& @cUoZ&E'sAR# FLQa/`߯ #6&m_>/KASkL5tTwo تZ vmi5SHֺ0d"r38lD謄3۴_8d~,OSzQwc|HE\c聓xѪ0yޔ;+oouﵙwt=x ZS1Uj'󫴈cOZ2J> ?ii8)@d~Z_Ov̝ştD;qHcl{|1Pڙ fWeGu΅@!jQO-VBL\ ԭ&#Q Zޗװ +5+|"$JDӐ}ߪAQn#E+akCt?  !0Pi@9WO&X"x`•:n{a44OP,XDw!n2+ߐ܃WUAңeEdam(/q;"\1ޣPA~1iмc Qw`շ6KT.ǹMl6M:}mh GIƍL5ُ2ml-k;B +i&Ia `vF?:`)[R i0ֵל1TwTJA nI)^)mXyy70c)6Ah@IoƦ[n Bf:Mh ve+9Nl~зߵ!N '7P<%To7lV5O~94p6Nwɪ!u0[P=8vd-j?g-jr޳jo*8=}x0bk C"13M l[.$ZCWNp27a`; rǤkNo&ref,ayYDD!7lo8vx6av9Y:͎YOЪTOnMGP[05 )OZVtg]hs% 4wt.LW_̲L n^W^p̿A A[_gk? yG-ͩ> m]*"8`UP߲P);;%^:ԶhM}`щ/ޑn7> I@v[jpl] GEW.p+?9nugלĻEyxVP]Hk,c>?x7ctnX˜lj_CgZ7!ͣml-ѕu1uw N/CAdѺ@qKZ}]]96/?JZZM6.KFtR= ׻]3>B>B!xYa9 ;]ž!DZ@@T$Y:1u‹_$O/c?dkvOJcA P s}uon)1t-QI7YΌٸxdoRss ynF-3ll(WCc}I7 n4YζRzPGp_٠; l( Je3|7/]Sh NQFLX_.YpRg:VRnC˥k^cAK$E+hdWgEV{@JhvT!w[p'Vl&-@;[o*=RNgIl\50wBDم<؞ѫG4|񹣤'nj4LmʞL&8˱f s$lؼ#j(wN1[^Ihx@av'_[o 撏t5^9?wYπ#~چĩ 59!DUKYĭ ]j쪰56sfCqDyHZRB|S]Y g]OQRA8(7jWn^k/g1ZօN_|kHo Ry7"w>값U;KQ>w lK+$h7:utc@_4|[n$F0 D=eC|Rd 5<&@2`Ж8;w>cTc1k75{v^9Fr6UP&.}>?LqLӇ'WžZɪ\N}gDral:Š&l.a&^]1{L/1Ĭ΍W\ x+bEfMK>}lZ:-O!jCK-T.h pi?M>b8Hm`oĞtzz閚}o?_u*.5ģޯԜ4NJL*,e_?[5׾)75dLO{->o3|!k]d&tx2^V;"GU(I.@ q;M F[r}&IPsY?Ej8FϝqGXkB/$HT:A:\iI*83\;&Ux!rcL ]TR̊eGg1ʕlCj"# 48CnQzT~d &B6˦DFiq/ ^̙S Ѳb;ֺ |/ĤG4dph/[.^R5dC) ?rA,uM<OBk'f?hL2 yŷڱ5Bl>`&FkOQ5LqEўT 5(Δ薕=Si ΏeB|*)Nx? c3zۈTc P[ŠQ(ㆦ 2qr>Fn0_gEnIRB>T>S tp (( Bz폁j]13=H.Zp@ U@Cz "Vv#=29g'9KO{8c$@iFdb)Q@߹|:Yl,mxkH&uߤLJidbBJo:Bn4cYҶ"TO5iXE'=%E_Ep(O7wp<k&Ԍg4< QjļASu@a}iwc1x$Q)u4ɾo\1~.vOa ܏ xg`K獏@0{Ms]D +TR.N?S+-iLE1&=M6@~/ 1BNk3JZŤo}bqz$4 'Hh$x%pkrtoI4Nm\ouEuVn!3@`m)VF5gxU$=; Xń5,rL*l&NR{d)D;3m 2vy utDcbflMψ,=NZz%] ]\8|WS' /0Ϳ\xw'~S+R{@tf5id49ρ-}7#,j=EVxk*-PL+^oS7LXсVqoZvIcC[|83+TN>B 9e8x m=O#Վj`LТks;ﵢ&*]gS'/FAArSؠ[ۓ;٨n5=d$D~UmyI/XSQg4:+ EKNI#%S,۷pFJ'Pҧ2S|NSIbp0+^XL)͕K_$G:s252{Ֆ AFAV/k'C1}C-S) wjo#)0fZ_~<%`fUz)qĥM߳;Ěwѿe}>? 7x⸗ih^ *y}``%?+-}-2M#pHB~BU {%P\^NSFo(-ّb֯H%BK|Xnۻ}*ji ϲ䲚ּ<,d4ᆭ%s YC A 3@q>=l6H}͉V\. Yxk„cFS5=5%!?%s e0gԏG`:Vbt+ 0lE ;RԓHFUL)h%@I=-~_hrm=bágY&qWs׀RatW*rX #h "L/Aæ~C"45fʆ1Gp7qsU52tKw֤>zH݃HX1X Wo4}f;ΘSKۚYX<ι0 ڈ 6Iq!Nw}KoyH Akg,t}j=@9,4$A`6N`i}vs[;1/bơhZ硘Fj*Yt[O*&\#{`HB: v75TUR%#~=4]E&bp+?!b-wDl1P1} ':34DeC(Xz\@4/sѪJvt^itOR pRJu݋eW]흥͕pvhe-!7R.'l@B]:ZKr=xzDU-V3|J%Ҁ $|Z񊷇nB_'pB̓c% #XLQxW{WVM#nJOEG*#K>.f8,AҘ6(*Խ7Ak@=!-6HuU:Y’4zT?מ-+WQזNmg fex&'Æ;&L-'&gE]b¸)UfށDAJ# @ɍ^r!"}D469v+ߴ0*;d6sӤøID$TclU/x1U;am+5,"MC_O(p_.KЯ'{߷s7ʲtMQ0QoSf#JR`ݚ.1 )!m3㩏;׊)4lcgV趵,Au~ y`k1/]K Oċ~×(BFg~ET L ,0!R+"|2"0u( l wnÙ$|[/HO`to=v<Iصn~r;76i.;ؿMO% zo,Nzǰ&ʹh+Q=-жzamF^a;_=+hsv/U[f?s}㔾aLékItG"̵1FBLxr9mv|Tgu NsC{NES Gڨ驐t`Sƕ-Y%DyCkjJDkl>&>|zqI2|yk-ɟdVXl"ה#8xP@ӧ阤xlD PҀ\j}ݷur ϘHz"|#n,K% ^&׭La c=NgVǣic5n8I (DQyi(zdī鼒|{Hyi<B_Vبd.\>5Ԉ7xZJi#bb7"&Gn$$΁5~2ykӔgQtdp^@B"KN;.9/b BfC   ]l5**a˓[1 .:þ{`~f ]RsUhig e9JTPҔydys1f%X_S3Qu,͵%r18`aPx׶Z0ALx:ïvMSԫepfToh`$bT\ -r3Nq/o3ף"ck2cLRtr0C,X/ӉFOzϤZZ+j~YzQ _;r,чV۲B$bU2?_kf< m#.ڨup­ tS"y&n\W"Qãald?c^|QQ/s̻nQe5Y P]rY;n\HԙT:Y {7wr*!<] jWS9lt>nw/̦;ۘ 4&zD]_q:8;W-upi޾k}jbb!f:%STF!yKIB^K1y>k)|{O=QN_ٍʵҀhb520i+B5XNun$*;;=xבM8pmjKZ/'qry EӝK;:n+)+IaЫ_&Fw`qڪu YYWv㈨b\[7@];[9Ex3+[6\49K[Z'QNtsDJ%#(2e LcPꈝ^ z ](=ٸ $4c{,ϭ;o?7-yքAC{Ppk#zXn. LHӐ p[ >g\S~EH%Yh\*mq脌4E[%ǽfEKv0X D? e!5E j+u'Kxվ7POtOiߩ؃($IEmexWם9M]P7KĜ:h]H_{*ZqiaI~^~hW1]b$5_~)&-__C e;.KUq2>k46j|e: u~Xa O,} "@^@O'm!tVq;v5Ӗ~s !, O]K6DDhtL5/n`W:,qG<5Tg/KH=ʌӳk14f[@3p¨#dta,M<&~/wpe%zYh\`&%x L볭Q}[3u|>akU*=b4]n.w#澍ܪN9^ |TagxTuޱi9XNJt͵+;ȴ$ot͈ ]x؇h}+lGFX!!#Y~v #{!K^Lz%C2?0Y4(\ǂ=XD gvD س)oEW{̆'[6S9 J&xѩ!arR 2oVQ@s7ڇ]nLpz:2v-=S&Cڿ⮚BA>>r3 ,b~uOHe⪿GbFj+9B/XvNؒ7 8\ujJerOJb4B.(Xmxg3 W]1W `So`$trrXDF\aB ?^ySsc6N_ܒZh t%/bW+:xH/҉"4Z(mk`UpSM{MgQ1_{3X8@,&jhEftnQDt*1S Z .bƊ߸p66k/xh:ۭ0P< vhm8m}v5EsS[zY8c3NOMQ{]dwX}qAB+pV{Z]l|NXkjz݋>8QT;#$߮%n[;T7YF~iiƖ\ 1ݺ'a,bZ/ `@7ql' `wS I5$I*jo PGN}hn*0R`{J^ ~';~?aG/ ka~2~l~1,qv}iVn]X ypZP9MWpӾ;9Ԡ"JowA6=@(!ӽ8npbmi u̫+e}3}fX-e[;gUr+Z'_HGSUs>i9_'cGM+yĔ"fXCwvަ-jݞɌdCs7M"jTtej&wt/jOY@3/ewJuJ Wg4u[*o=C}S0s)w:Aw@2h"\QpĤ$W]f'LoPdR7ȽvbtmqE,bIJA@x·cgYPFB՜g hRar)ؚ;.桴nb&Z>/WMil_>]0_,@|T"!*VdK|NV$C#na#6Sif sv<7 aB(7Z2&n#Y}Ly֛%IdӖu&N [ ofɖ<yp.)dCZlgNF=YgFE{JY>xb[+3 -Gy׃?dBH!2lMIv߳PBARu%[<)2*'! !jE*Sw\JE)Ncp~ jc \3eُ:URl]CYr;Bg#g0!7.$c8hN}`/C g>ͅf Y ⫔]Wpm}ZW7OZwzD[Ś,&N^[`$2MZOE6crmHnFĒ@"h2RW!hۤ< 63Z9cuIK(ֺnámj9 039>.ρ W,%Yp|`p;"82JdS&MP}hbX9M|[L0CLӺq~ j6ZO_u)>q0nפ_O͌"Sưt~1PZ4ǽ C=4} z9gC~t̿BC8h$Ir~fX#PgUIksSVv!R\=wd(="o"}vG ^Dž{ 1T~5]tpMr/kTW=e Z]TUcšB8KkvW^|XvX.3]"2%3LHUI@ߨKCzYti̹SKlm̤ZZ!,G?L>~gqVխJuTy;CA36~.}ǪO-U4w)2)Zq‹r'sr٧i$s!ː3؆?7) E<e煹u\nˌA;YwЈG|ǚax.&VMj/O_670ئ[ GP%'7k: &bKds7\´gT a2>v' ụ SEr'ኲ=r("۹zd\ 5 2$R-+/Gb݃y=9BPw |tYiKD%GiLy|Q2eV `bX'FD,g~쪍fc1 (]| O8עF,4־,GEqaAdt.S$/x>A]HÍxLe\#Hv܊V">e?.rɲσF)ʺ+\[{ܾ)$\:HB T@5CgRߣ7fĝ1НeIfXG?!~\ȡJsDJBlA6O ^| #ɣO2<݈]6)*vn`sTj <ӪĥdfnihR%p?F}r1˾R7M=)C]#L;[C+WAGݵUCs{0KH,PqnQXϖJ4k5 Yzc@ReƎZcF1^'90)n4l# GjWuQ7 &/pUy-gbB\gm{]JA>0$y;R ,X+}LNAS ="85D@r LQFoIsSrHAA}'ykة 3,0:*™,أlVس$$*b yW8#/JLaN `[qФJ~YGk_ۻSgnxvD\#"^ՇDr2G47@HRe&:, كo +92hzRɀO*05,73/KM9 ^;,:SSӘa!,!bSC8k!8π%~ESғ9q2_Y^z2 D9l;nވ}ňx};옺Kt(UOw8=VK9LJB;<'G"]BI1p+ ՈnҬi oq6tqEo@V615S cSmFȣ9[Z39;g!re&z4<#C*tm,fm섍Eߡ$&$6^q̼t/0+ėմ_i̓|V`M*BZ[ ݋|'@$^xPRav`id;E䗣/n+d*DYZZ"?`Sޜn.E T%wxrұ yV7W kuVT"IӉœ:jnCzP@,98,u˛Nߢ-@dTR7U bzRȳIS{: gGjrC*0=mr"0*,MzQi~9̀zK?J_ZNyӳpF% |^_ 2PRF;q4Ns mnJ q' Hab9aGV\Y 7EI1 y#O 4s&1xF*=U k7!T^Zfr;"9  -]*AAHhO=\@1@F+8#3WVȫ='^ZaJNH9 r4um- Tå (x/)wZI4Jg߹L͡"(%zxw\}SL;_bKid#]Zs5AsϏgq34C}|IWL&)5^9j5ƭ@bJڤ?Eݾ8joCz(]y˙ӅvU!֠l#t{k6`PXRf1vrJzBя=pr<{UhnD[V`z?5=?IߎP!d^ ~:`gd\28yQ(04br^Q$C $xuƭ$o`_R-Wit u6W "+]XX=$j. H݈7cUd@9Ha(xbdƘSM00< VɢLp Mq8!L$כ<H T2\UQ@_OY+VߒO4z8+@*h6<|FY@^ vd"a5OeU,iVeplO@zflGWC00oA~,||?n̴IavTr:EjtɂN$j'[1AGrZhgd%Yj IZŦGV0ji 2$2I]6 CIp׆WGYJKS8(A _jĮ .E}ǖLߜӠآ03tO4WbQP"c g߬cŽ'0 FL$ 㪄\09i!LXUL?mG$,%8DFrm|Jz=Od~!Ef&2 E2ɉvUZSM88 97؍j:=R<Td`D [??]\?v;Fd,zʱ`^=^kJ(xjPH/~ @Ļe5aYQz>թE[qr_rQb[0p>-|c-B尦'};"Rf͗-zY |(^RQ$**žpz-w?s)]f= o0z#]%l4@Y~W|;i!z*{W"yk^@Q_Y{L@Q^}z#A~e:gj3W$t0o}'s5)S䝷d5r* !"ޞÉс/M_p C QZW\]1>&l-ʉVK:"BjLXMwu9>jT:vX?ˈga- ,T}ŋЊzu*SW>Ykc x )EH`*fG7o%؅^'k cUZ)kf`A"lX7YH]d,y/q+ hnI8<ηRXRzpg,Ɠא]LWARp }?`uhLhRǰd+o|ﻔE pX"CCi|6STƩ&o{:F'nj 8\-&CYz(OgON\We.߄r)DwLau29 ,ɾ&O֑W" 5vѕ<6ǁ (~\@:x}5v5&'(-xI rV4Z ~kwckWʃ;0)-A^_kkO [N 6 3 F^X]bFآ[lv멚T&ep Ux5_HI3;ԸRϓ Yv#Z?aTq6bۃ"vxzڎLƇQ_r!g= B%4ChrBQ9]BU%ijP߫1ʟIX}VS8\6x_Z# Wtqx[I Muct3ٙވa׍ֺ%.'jYu}f2M%^et Y&6!u&UP'&m>S# {ڱHk_^9D\J`Ye.3[ \ ЦS hUl!m9wʉzd9u@f %6vy:1mh|bB5m`̃opNr0mp1Y._A FE&!vu}C@\ͺI_%]04hG.9Y 7 |WFyZcmʗSkݠ~H?ȼ.Sٳ\t-'d1PeL;z$9N|z OB=86v5_K1„,M/U=Q'Ru]ZG.TY֣r,UPk  Uŝ;q}y#*GV^ @hܥ|5u:L! '^=l=wAlGm-0Q_t̥!g >0FWWݻK ;N BCFY`8CEP0]Vba{ue3q9kALɄbU.1ОC{6gM VE DAqq2ht9B|&cD6˥!mRP-VL>McpF"V'9lk!J@+Ę* -ќ<*NOr#΀rkGD cd1`j_fv7biݶ=9W,^ XʓPK"̒77gd~!E{-%leK1]E3;ɠ!umYwhv%sA$3i\&a]Ʀ!"sԌP" ʫ^e6\@RehFDa+q@D Z͈I0 *l",J-T;U.Wv&TP$ '6< ת72lz5ͩǃa>- _G.m?f<RHФsNU¼=4ᦞ5D7\dRuY%qa8+bIZ"QZBP-,4`8[q(jE1TV;0c;KIGL[cnϪ덿6[Vr~ 1G $EU$ZS:QtuAn:(g #ȐlK4?L-3PF"@0 i2,֖쫷~w+܁PT^j>cyhb?=J:ba*|< ƁTXj)Y ׆QpC/c7)ϖ|ÿZChUϫďNB]#$?; T7Q+Ђ -yfS)sX1Nc/Ad `B޵Z !bKB 'tNbb֭'; ]W^M@Ytu-nxkpn1a`M9gN-{iaVQJgO@] E/m* y^v3i~uAd 4O[uD\"6ij2*a{\jydKn~U3$2="- \13끬dN\!B-"loBH2}f ؊etӾY&pVs\Jk0vFdeOX;rWP>fDj_'Z6hbGuW|A}/M1ΣM}݆b3-oX>#+.a< iSfX!B=+ 'G.2f~oe讳F!QVWԞA]n*C1cK@Χ-JEv!~Na$aTz.--%|-f>Íu:45*7DҏaUO;휭ShЩ_Ò h]LsA]m݂y\͠T[ )a ِN. "+N@E5I:@0l @YY8"j6lC5mQ:8uV&#l薋>$QzW:@"¹EgJlհo|px-ք(w0-UzK;ǀIt !ܒ'RpRuD[ʎ̰S Xa4|௚aNä́B\Ӎw4tl+pT MHe%'u hAlD_K_|BxfsLge&ϭ|?cL_)z#\^YsK|6*4 o8]W졶S:vage/BFd[ZQcyAm"]:gP}G CZHb/l.jNB`T*LifC;ѐ$^Dú~pQfcn;k}J*WՉMOK{іF1ɳ߿kd/^Ed$WvBϼZ4VZIH+$p19ČIeY$.T¨PQ߷L5D^A"l'^Ep%_}3(| Dy;c&g7sEFRw?]6RHb*ZS7,\6R--D>w4N5p~M_!KD-]T@frg04[6%pR()҈eXyCAToyO# BݑdaHlh|g-::}Bb [(ڗ7${~;J*lҿSNK-P ؛?`&v;t,E#D5M >}pL281s=B(o̲U0JB0ǜEf+t9j?/;ٕwn_H&>v14a*m7gK,\Ê"W/Rv3<5tq_~“ja6C_l H'Pm7,|Z2D/$QӤAX8r7aWH|.SzѶ c6$O.Cz&鴀KWyۮaV0}Azm*KI|f_Z=zq|RƑQ4U ΓA&F0B2ǂՎxMEtqvN1"9` G&Ђ]sznh}5f  ukpZ%jGkt@}(V@#2V4JSً;$Z26|d [KҐ\!(N矀?N]5܆xfMCmyKQ ܄k׹0ݟ]e_P}p8гԪm|ESZ[;YtǷX#s̟X,츺J}9R`~eQFRMȌMeAh tj6.qKcvo: q>lbt3FT%#*SPiC ;Ag|R_6FZNOZ8BB(<BE<#+W|k;5fLN mZE<)&@=oll^*enF 7F'moH1.n޳[ͯdT?J^"?i[XmZ=ᎿПۍ,zlT> :%eH#FZC9% ,AJ ܈ ud3}_?6!%g#atyo-娟=Ê{Ѿ=CBU[W;1w.kߦϮV@qW>?O<ͻIJwwšրf?j//&P*C6oOԭT|D6{K7'[ `@^,?F%+(“B 5r˵Qt\]I%jm#"Z2 (1|Yޑ T.)mjq?֮A%W?ϥB4%Uck`!3$%~0#q,?o1ܵhߡ 9N`~tLdE׽63pتr1#mf]3Oq7H}:o[^ff(3x%-4aR7oZ~Ҹ pElG䐼ă!j @,Ҽŏ#`E/(tЭyr`ֽY~aGDxaj"3S[O J9h;u3j;R{+ťA=-5D;.N>DBbcrK`$p(@ Y{up3^QL"#qP|WM.7")-ܽ|}>D`X(X< BSByLv%GP(Pϗ%! Dn[~!RLW)\vzGUGK5d_j쁳5 86(P@0H2L|G?!)r.?}T3?0a X(.3wiĆϵ-^S+H#<2-ga;KAkkcԔ.?8hx|Z20_X?Q[lvl%UչXrZMG3j`@P<$I -)8FGolfuy=ujbRF4*EAJd|/#_q'OK+ڹYc) j5JYWR~nMĂ DU޾z2 CN=Qkw#V}2k Y;-6 ([qc̱sQm5h .:px l(UY\ `GWGױ?ΏXDk0M0rh[LQ3,ܠW~=ˡۉz6l`NjGVˎ < +l  Lxp4\CQ ɐMEM@/}繐h'UȲތ]ָc0J}P4>xȏo6tfs;Z'xpoK cPv sHi?'.`bՈOM坞$RA댹aH. dr;ڪT 7;h3uw a}dq1놣PXn:>'MW|zIó6" (dgIXT>hѝ s7_5we~oqip2 @~ʹE+g}TB+Y"%[yfz㑊MEvQE= 5g,daN:} ʼfmA?eĵOQoS{gT=Hj[FşZŜQ}&(R& 䦿P\ThjATeWRk.0=xDC~W%z.XWR^A8wc=$3[:(B&@]O[|{}8 fOm;XIM׶!Wb. ]E#BVT:dsƪHࢆ- HpYJXxM<OCɥ(Y BL_C$&qպ$&/뉓Fmx]V18hCx'e!~C7N޻>T_k,% A/h5{gHyc `ff̡uGUsd!:`7?`~]-_h|r ` 7(OmAlj%.q>}ޣB:c^m %!ŪL+P9mNgү A"I||pXAq^Ac|@z V3?&t-̉eU֕ݦgÿ].ͦ {X%P vrq'#x%Y b(i4Y.4x #Vl6#'}X@qˣrsKjavm'/\o!9Nm>4N>j4Ϙ'(A/@yKr'`H`N>3)Cc0XC^FM1IJ*rE,V: eHERCrKFED\9wFl~n7W!&4Xs6wT83xWJB^9{w촸tM$mt=5STvaPDonf6ZW4.=.ѣ(Hוxh T,{XQX0hlgqEF q[I<+ Ca2j$wuկ..9M]V;j؂可K>$Vّa#1] Bޠ&RKDNѓչ=╚(oR=2rlM0K@Ag9̾N&A+mgQPO~z`SxPsݵo_P$%1`8v-&ÛaG:Q^Φ2aNg˷Wr.@([L: Os&y'Riuac锷ơAnη.]Tf4ﷲ~SKZLD;xܒX !>{Gmw)3j{xC|m@:蓈gCߦC: vdQd9}b6Ag?;u}?G|x:.zA:W᰻P@?~+{ւjZb>=sX*0I=Ks[?_g ӄߋO)|Cݿy7l6 fB\sR4ɣg%YZGdP>yu1M A:hdGߤˍW PbƫBUMSySis> w2,dli&I!P , AL8|DiT .d͵~&e]&V! r9Dat&&6.يٵ"y"-8ӧbpQJH<-梟Gq 3N2[' M{v+J47ē P/̅4}{|ān߹yof8Xs`.ӊ%@`Vo|Z_q3CI^Lλsb 6cl'm=s(KZM:?1>gw/RiVKe$Kr dQnZx.#'lI=i}75Y $*sARQ6%+ٷyjzwW2)]4<M-8)ni`"-w eD\)>G'%yЂ䙋%=)\4TW;+pӭʩljoC` YЦ78*G \gA8CT\,K ^ QK{M+Xz m]ugA&} Ӧ55PFl`?>![<$ɼT,5~+`5E9Yc(9ˌ`~]-J:_]AncQa'./öw\etx*8XuV mJ,"Ѹ Ng jҐͯ)'稰1 \yKvLh.}m8#VrOj썋u܇X4`4"DVCܔ]v W蟘?dٞm#DM.kуD\wy:^}z\= bA?D_ TC8(/Ζ_ʊCi&&%a6vK oz-6!{3` ~ϗTjanXBְ^#8sZ"/Ն-`<#ߴcm"71tQ/hњ,w.5?~;8}oϴtWtv/ӛ=U$0c''D\Oábm$07:vN>3@DYE9xz"CAyIu&b?/tȓf0`V8J뺧XA6=\kVc5>p8+l?XL$@7q伡:)WC@>3nwaQ`ݞ_ 8AaUCDTɹ80NƐAM5f>. : פYR9Yi4#[ȤKB~ńsZԘAAe7X/6ff ).ۗ NRZbnF\jZEG'y$M=-TV:3V<%p OjCqMFTb-3c6B쁈4L>t5hiXS@cx끕a'Ea@R*|Xqڏ\ +{ IUtVf P D8xsgbBOtx=UX@u+6ʂ{lIsE01ī2~JDl!\tuz"G"(k(V`%tuȟ m3e]>)FTkmwX(-55e袧m .H,QWxRmV4m OQ]CdNםe3R1:f8ܧMb>%/&߾œy~VyƪPG-0wW<bIHKPaCc4膯7y}Т(aRFsL(a膾 UmJ%WWHwxܖ:t3<]iA.8;Dre=D ,yƻ8}LU*)8CdzC?sKsykQ(O[Tʩq6cԓZn/Ɇ1q՞51Deh"ĐPV{GyQ{UI{GLr*X_x7<F Mj?O򄥮8,TwnNP2YWL 4C46 oxc+oD"?/%%4B^ub],~#\KXҢg@~ks%n5yE:ח~Ԭ1]IXgX`+H7sy<4|bBgAAǔjE*"Z!5Easpw 4QyVsKH#'^d1#IGp;]nbu#"ŞhdU ^tfe|l+UͭBg~5 )u>-W/[iCG54Gsv 皆<∲BMvIhؚ7>~ІCMI",HxդS1N_ӣFku+33 هOo(4dco6e JD_{h٢x6T?#dW7]JwC* <$bա#XeǤ`R[#3] ^xĽ t0%-Y)1][q{P5Oo"$aDc};Ty43]W:Ds%'sgE9F޺; R\Jye_8x6Ŵ~Bwy܎ 7ON%N29 u]x@EjVl\wxr/5"y渡Uhi/ҼF#$SkS'|cg.Sn>T]eXG=!.Gw6.maqek'J{ל[I^NtO$lm$0Q|qMZ;oix妸RmBs"_hq[˱r`to漼?%8=Y^Wf)۶|"#C o\ժa$^ uQ"|Ǘ$,ȼ *= vpV3.0ܪ5֛9v)5n,}r LO&2AL ߲s,]ŊR)M侼]kgIiLdT:Wp3jqB|Nalje =* pTigFO>@TYmg2-G,;t?-)댓v),[}'{{egY!`jfKJVvcqy2{@Rb^@GV&o2qk*HxDpd6.F0"s~eoK7쀄G#bzN*u)0F7i:eӔ3s~޼ ؂_{OpX %Z#C[Ӌ рP R ! W~+Jyٷ5l]FEPXAb_lh DT$f&Jcq_toǚxc/H-\z,1sOev c6T[j]\Rl_QQ2!sM6xZ&+r}n ^L]O"g/O vL -8v ~̞o[~䥕|_g犖\5cKT/33OhVkqϓ\7CFMXWb;k@:tSz&X47aaEj<@\ Cs*_$,+TKҟ9H0 ?t'y!j ׾bn06X#O4AgQOa@xUKv|,!5Awp&3'ʮh)l1^Ml|y%g'$tIH8;bmCgHbeFZ{FC%LC12;5yᣭq2jĿJ9.=)]0i#]f 6|^$yHV Y X|hr*2r=qlj9+ְ{BHލjQ"|m_MQ^͡_( QːՅB" (2ɬFImdur]ysoË]0skQ=YξM'rjPY3wҐ7IҢV$c@gmߏEw: yԠѬ Rd|8 ^1&e?)NtCTU 9n1p!t1I!ZY&{be]׍1AyJ_*ԭ=Tuq#<aY> $v#RʃSĸn%j 'M2w j-FAF# ոDzV==_-gx{*oή  Je v7lğ!Uǹ@^a=ӕK.H¤1㤎Gm-SUltoG2>kQ9&X!;:SA7Ww =pªugS50`+ҹZ08OC";X-,ix$8'~0 f~65fL0Ofm@XiwZhd=E,EJ\, [,wP ,*i6qpPS ,ưYeBLNvٲ̭!6Ͱ+ eNLC=/@͍WIOo[!/oPf!˳i`jIlwDgZؾYq6)s_ -wNШ%-2)YCq K"N=+\k=?קu573y=ףÉ&п:(Hjӆ*e/;c6#cMUMڍrufծa j(7jQ\ [s'^q8.D@.#xIVFQ\l WxILKNծ!/9Z' 8^N<=u6}8KY{2yy֥RaOTuq`MC7y$SW?.Aގ)'@R_G& :~fE{CN;'˜B~>rDGJE?c~B>u\刑ZeEu`srO[Ԭ|d1r@WTۇfg7B;'NV}=ZMp=~H5k 'PS +fZ;yar%y@j1\,7 (z $%E8] +ƹn?^α:Ղ^K*7$-:U@Ijw?)+ YHnaAq]m^ZUg,,lAI0 9S~|G/CnhM}_nmvlʚ81##78xx $$r1))Pq* L <^N~6aDܐeB*Ө=A X/DTM3*IxUo-!%ߣd mB輓ɫ~Ñv[JG¼mf\(DUR?]s3*cETPDu?PMmE~4LqTKR9$1Td:>c'nwrՙG]P_'!EzxYdB$y4PDڇy\x-! ^#pG\6ې9_ IWr !Ib_@/h+:9?G8"0;S`Y8Cv4$( Zz&M;hqyumh8.i?Wl߀8)W"Q bKF^*KmEZ}`(9E^cWk NY lv+))㣩?j,ao)6ׅB) oJ(qZzb="NF04H0 'nVRHTR UI>3ŤvUfj5ktR%wc+Z^:1, 0{ k6tw18QJ󕀖Ɲ5`e UD>IZeBvOiey:L(i^Ӓ̌[מJ\7l$eV{l 7*u Lfu(B+J@W)L̪^H Tg$.=Wid>DN`b'7Q42BrHËlXsO*+Uik5 zbVel\I}pDVuC#i0 WftNDy 79E£שWM[{)QDw5 k0s}w8WBqзo wTa?'/$~}!K@ q-ŀ[b}}efqM#w y`) UpD|YS ERZuxh dBv~,VqtXNxUr4"BXD;auu*z&nF*1) r 9>X u8+Ab9 S+Mh6-*.-ƕb_0F|\rfjBMȒCKSCD\O]ʫTYV!?kPU|f'B$Jʌfm5<!>r9%G/[3j=Pbߔ #{/NRBx[S=F3S9EbyQ_qEI80q!SJC{hz,4^k8wy$gbA3etGW` s"W4Lȍz g 1'6]"ʩ?-khH{9}"¿'EN9>_0B'!{GҨSU7 77Fqtx (;*i ?q I&.Ll0H-9uKQ CŖ.nh)WOjjԳw[iio YGg^ "?;%? N@YX1UeP0${\X+Kk<\=W^}N_*ҊcU"1sg)uے #Db"3O ]xf;q#HAvV}!}?`Fm[=t>JUVMR˳VsK,=踥=̎˨dQdUm1dnBWne[9uYez:"]nrU VldN҇UÐVAbO 尾p`GBHzCjO3Zw\ah73R?Yn[!@o.3k A!03toӮ9[Z/1>>9+!Yk% c:(񥽜c:˅BoDyIξ E#FU123/}U;Gq/3@S!} 88>+D`Z$0~38g86hT|oJJ/9^މ^g Ŝu *k,\1J$eYPU`G{h\L۔1A؏ ѫߑqֵRp(aDcdRj:4$/g>pSC4ώ,Dݚrm=Lownp| HڣFUy!O,\o7([ȫjW0&>;p/rh̸!ɎP'D{e&|m7nB<ْO@Z.ELXח7$G|TY"v 5xt_{B`5J,8+k`+>BcNTwTy:W1Nvˌ1}ho$;mu ݵa1C4s4P~m& N.:(jxkr$O /Bއ}ou$B@&jw&k-C~v$ >wssOF*8NoS׸iX'_o:ڂa/ʦIDw(V֒UVO^3֦Q>r"m3L b+~q8lkZ핉wJf7'G=czGIAp'W!ۭ [fhwg+߽ )V!70EEBnV{y%:r#2a9Mn0vꐡ(˄mZ#lau3oK{n.ueb8Ixy: '|sqcS˯ m>9/Ƞ5tǐυ*1̓#k!=C5%Hep$I9"3I]hVԥs1Y5~ ABߦAz=e}7UtntrĺIM(U(|"ʟGp#px7~!Ҳ״;nqȭ6\*"tvڴ780=v"Rn4 0[=oï&o |>Om;8|1 b:F+Msv{|Y8YOS~hn)ű'|jQ?b=M 56A=_a.lM -SaED  @ T8޲d`a0[kqiQK )Pg=zK 3Xr^͝/!M蒇j0f$r9No 2MOu+<f^;AbF ,d'V+ۢtv󍨶!¨3iP Yߢ=i%[k՚ yLhl芷hRin'g#\>@SgV 6*;iVZի}-[zbg8U}+ W?!*[TcI1+$V<тG-&k2zx\co4)=D|?$+J|(cbxs{ M>yc8^p7w #ޓ6v9i'~Ab[b=:Lh4ޖ#ͷ3z|t`A[aE(y1r8S njT\& Wi2zz߶=Caؤ`ZGlJ?ꚲu\Zv=հ- Valbie#SE-󌙘Vl>!2Rh.\9klR"z ɁYvx:bQ%Nf{viD`,9Ԏ{ e >RoO%_a2{e< L݀prG;t؈Y>D20,⽧Nv;R(3b ͢bɈK$*L؈=R8/ݯ4bXԭXIG4o[8CqO.50U&}<}cݴL-duMxE;tiW<Wh>CV1)" }+B&ᦏMzÑN~<Ŀ+7WE5Nѩ_ŷ:{bod_k\] UU[スz LroƞT?jjZs >UJV}206!=seE'Sd.#xjj,8=!JA'ȩ/ڎ^b1_@{LtsB3=y88k RԥriL lH⨢{u/\+^搁bưl x ?t:ǔ#k ty9C`+i)qJXPy6LY'k)zոZe|yopGĸ*rY@:ӻI#{$ȋwl|Mc2('b!bu)83I( w8Ꚇ blAZkGG -=Q|rH~6w&] ϣbi7&3 q1b_NAЌ`2p)ƑBo{s Sht$Aj8ʏYƸ1fKj^eUO# /+hBGWY{/RE83mJ=x;Re/X]Lܘ+썸C!|4 @$U'Z?!l} Ds:}dD}Й$P{ҿ0ZJvaG]Vv%VO>+J2Ia3h2N ^X?@`(Iptڴ|k.r}+tVm4Cvxx25nhXQӡio *byC/k|JGeFZ/\Q& O/aޠX㷐fAGQ V[#oaRC C"8\v z -:cMR:n'-L25/ChúKԨ4,̘zD ʔ~_n,a2se۶:JѦ j `*L7?*%@L{%sMd*.݁7IL6S};&< %&eyDAHBF 8)WhעOs2irmW4~8EF=纓u;d9U8ݤ#lH_LSm4 hΏh?`Ӗe/悱~c(:􀺯=҂[ZqWK6LRws"KZSu +P7l6]x+xeKC<Ǽ}cg^4~{ ᐁFI-Z2^bI!# %}^ký9exs|Nz3RFΪeA&z3,Ŏ7(v%̓oS&>|&Q[W&Aޔ7'q/6k`\x0elM?|^AZOQ;OU&=z0|t]T:MjP=,"nwSVVt'K01I(]m+7 {n&ɬ,wen a.olOp^«6X~ ņw0j .1#0.*ϠձFSnh;|"槾>=9GcƀO}sS ,6 5*W .B>Fuj, o#S(FH&-,J*3mmy}eR3 38o/rOT%{I k5-<ƷDKwSwKTouN8jI-y^0x=&QmYbI*vg c`&bc@aӹ̚} ʟ>dz 5 ouW2O-HϷF7J 6t|34}JǣþNj-xCF Q-E++{UfZb6M1Vi`Z q AM Z~;(\0 å:$kV,-.8 @׏P(&Q w 1r,BNVA5wJ*vnrօQYalR WE|G Q:St?ђ foʎڟ띳a&,zF IOd?(=S9O+jnY.;' Kkq 03H9!OOLg+9!YfHwPYjSI*u}"VHV@!Dhm:96q)-"_?$߄ hCz7^*V[ՎL!&4 y6@L2| "LXdžϣokon V>J~[r؜  /8xܵ!퓺&*\V_M.{{wTTޏs&lBQLq~E3׸` Wގ.NO\Pj\R8uo)\Leڙk}S4q= %TFucRVG?29e/NTeD"cr?~퓽#D;KUuc'rȩ2\}"䠹PTv=3Ho*}"Dt$%a5?w:-e1eeeS(/x[)8L+1Hv96Slj uYgYt IKoB:-fԁ` .::C2E3ǿtip[5Y e*@~%z"^2Exfͱ#.u%ϫũd{ $fg@^0g.Xc;p+tL qU<ɼ\e4 L!:8H6~BšׯS)xER`qjX:Ub7/`qC\Ő4ÒĒ?G61i' U  ' ЊDIHHd!6gZS)k}wG%8a0]p&<z2q ` 5_O,{h:UdEQ#fĿQ %ϼ.qeG賰 P}^CGZ+B>˘#h _C$vmK'͗dq5H|!TLؐc(" _e,Us ^܌ab8~[Aٮ=RX d$ck.z4BM%+ʠ H?XZ|n-0]A,ŞF*+-H9mҴT6Xp==fäj}Ye- ([!i _lSLޠ*g׷xRcae9| {LE2qTdoDHK*7>d& Ka)!јbR4ƈN4XI \&ܾeS!SUyP),R&R- mGi{!_ŗ+K1P-Ń,F<@kEQM?xЧ q|&]1-(U]1ҹN^9 j?nǢ|ֽ; T,^<a,ܿ2I؟"|(rߥ{&$C.CUn#K3`|HAOIP`p/Le9S\XKO}`r% ;̈] PuQ #0ңlZ%P-B5OS nL1ͭ&U[ чuӣ>{9婿`Wo`CwiO:3bQ%h$B!ڋ'5V8wV^}y,x}v_Ii 5I ~z ޚc[f_DyfgD%)Y]X\PlPR99paf4%p4Ȱ$~=wwt@*+gA|+čDsC ruؑٷ% _11}Qe[Ь~% sOZS:cm ]x*t!v+ lVCJdes9g5XyhGm\-GBn!uq]L66,V b+:t6Q~K^`(96 Q_4 ESr5bnwog5:j8E^6+ 6o!%q)f_YM?+ɸg~]l7!n ;..Uuܰy q:R|4(&hoGhP z*W$s -S ,.Y78uYkKeZszM[O$Ζ>ͫ]Lc4 $t'dR<O=8RdE }ص@ϲI(bqi8\:aP'va3{ʞ_uxg^8mcnWBQZkB/2Hy@jv-#}K.'B$$rӉOjV bZ_{mRB5Hz[( R' &jP;W9(AI: 9[ʯ7 6 S( D_6,kFl !"ʼ\s &pA`ۂ>)JrPFhi"4$8V$YewR/ڃ]e,آ`1E9ޯ4/Qk[ LϬ)G FrWGgR}e3zvL ɸK"FߠƑFs$1?YJGa9'0kF ʧ{$JbXފV`f% TA`29"m"NNQ9Z*Ygֽy m_dTL:z,7S/S]p!] \ZRB!huٵ"}\.vۼ'}7LMʊ xZc"0_mmkR{"aBSPM-Kz$eP/w˫T#~ T;0'a87yG`.!!LK %K90GaMud6}펳"ԌXV0$Ɗ\v.TNTՔYHyT4 3Q݄%LUp@mdNE}~ uIn |NDykiPv#@[CebM*='=# 'ܷ@.No8{Rx9S=x,Ac1G`zw'r3ΘG*pK&idcRGӒ#$L}IuUa;@&<^ks~YDُ_Xט>M,sCj7H&mM'BJŔA (纻awJx!ދo#B?^~މQx=*̊W-Mܙ+s;h\f$)bYLcAuϧ1^<4@ғГw\W3uN<~}ҸR!i,;T8 bYA pEI6!_IԋPMĜ!,+@Lw9u9ss MDg!QكyGF:֔4Q *B},^Ne\y<EVS `Rآal^3\vsVl14(ySNT0~ܿq{x Eh~7ԭ""5a#I/\!8!{M4~¬nC5wY8=8z|ư0/3RNYuq)#juR췴kf.ڞ#|>.^) &3N9NP&50t/} | q$ bWR/ nWb+QcF=L &y><7G$5SכY+( p=_+-ofx j—`i*X5*G7(+xI lR N%]ZrzEOxӪdQbHM 1("rcydG@k* q KkӊI"PJvQnM?͹TVgs:VN3q*Lj!IR[{z;͐,:m%?H^,clѶ zՋ=}ju ۘ׸ ̎2oi;FytcxHPD/V%9{ "2ioʚ>(F7y]0N ?QtyM-V(M;r*eϓoU4vBt;Ia=jS`EGA1 hӦ߻ZU᯷Nco ]h3 Gh$;\HeE9ܝa9vz~vXǾ F3%>U|1*꯭^e)oz˗Qz]R256'u+v:X^vܤm70PuT]r“̐378s!o7"7"#BY >D_GB.x:>Y& 'yX-92ʇ`|#cIZtf}#w.6cP@?!{ ܾuRhKMHՀ/c b?dWɬ{/vai{vԵ[Qd[AXВ gx a) z1TDa=iiqu^c"p2sy.𼦾揻˂& g(*j{oWuS9"V?&+4֋: 5"W1Ծ+OaCq6á\,װI?dQXOxUw+FK^)6i ,ߖP9בޞ;7ZŴـکହ\{J|M%MRmo.gTzۇ;S)XI3"G RȞ+yr?Er$Kx!t\5dYYJ^/׶~j@r-k1:@wC_ڜq)!?~d3k=-M/?U E҄,Y޳+xNVv}Pl:`Hp9KW*[C_-"JhӋۘ ffT'ΰh6\۟SJy@ X# LGVItTSI;7#R/*rV03Ӗ_ G)h2͑fѸޞ=(nbl/SD`럍ޑ.?ʹdZ?~gh.idv0>D,ov"Ψd d#\&fTV ̩ }Q!83$m{%wqY/ \E/a\r`kG=5a!*鵎+W[9̩:sVzvDMVG_13HZnli$&ԌYc))VM0 p$??GT `3,P.b[d*ĪNZY3ZLMu,do4|?2pn372as&BڹHA)Wr!)}`;8;KW#w 4r9Q=ߔzp"r^ըV09Do)Ojc-fz` [SaԦtwxˁĕIUJcTvq4!oQw^\M`Xos=1-LAsѬe 448mLǑEiƅ6 K_[o$V2QYe˞Ʀ8.] Bt|)/ܜV,oO]}(T'xMpG" 5;<ȡ'$CEhK2,M'nv]%Ks:bw) \R eFye;b.)QfukLk G-ziK.?̮'m~BShE7peELmA*.ae-?E^[sM\ligCF06 [:-1CB)VKg"dTXywݧYn?u(/g_^f$ %C@6hD*g4_qM[2PdT!E"$*y|5sB-gq`:p 3PSwP$ZKD3|\oH+}63zQGi+;3<ɣ*(zN|W2,,a㺍D#-[pV~ޅ*8cmo-?1rPÚJ7ju#m%o;O4!]yb\+kMљ ނYfQd|,4N=)U?#+߷th^f\h yv&Fس3Emd8:O~X;/!rj 5MKi!%_aʌ'"KUܓ?eJLdhՕjD ;oS%ݶL32nIS gZFcm`BȒ9WXhTԶl>$jQ5p+1@óNd5?B{8XG13ωw{N=k$)PDꉏ <$bj?hf$:;u9+ޯPȳkr'֋%\^)/?2hL$|qқqHd| %=\ż+/nS‰ ) >'8hi-E(] v5_N˓W\ 8/Ehg :6*W% ':dU`?x>/HY /@jv*%]Ն֩иYrXeZmi F.M) !wf0q$S\"M"4z6@.j`[l]|5U<.gap}^ۑلgtB\] 1b G?z=&p:i=B6fQ>o;NI2"oNW2| .trj:QÉEŀZGH%@4xۆBmewv΄Y 0:@8=F/r_DCGw6KLw?[l\PJopIuSBB Fn>T'~ 0hki G-u˥z&ڶ+H2Gs=n\M9Qkq1>HfC^ G]psz<,=1țʆ1پ?U@BeT`k$R:)25~M@c =%**- J"klSF7N6uF5_y'QܿfD?4`>7D3gmGVMR 'GX"ɏ>–1NQ{4}b-[еC}ujEqܚhJ] <9(p;xQ4<}w{ť"f8BI1`V%#pMb$Egn”,dԘK^~'zߪ]gp م e*, r !C%/9FS% cHkEi&SXڣ+n=4U@nʽBi;b H$@==%n_uߺb1]]|q wM#9Z/MyfXUhFٯZY[95qr? +8aEmd5l2hP vW~ݟW;FFfj%Ul*>Kt)Qv)u#E]y\b̳-}{ 5lFuvate;{<|rkCɏPA[GO[W4@o4n9اS0 Hh{k`k2@[؜;L}&ZGa\J%>Ity焂=;S/@BRDsR<;,Ur5QV LHXuQlHoj2~wO 7(9P=df;/5b[~b6e0m$SAvb͊QvR Nlfgxt0J'fGp{pZ`%)s)-_jvE}x?<૧vCb'8FA9cM‡TgXޜ,8D(Zi%d N(GaT6^!ӷ1"-ft"}~8ٔK#RYSl\~nKpe!RO@}s5bc2[YDδ1R͌~\*ܠ _户o{;l ŸA W0b &goű G&$@#UpHɝ>Y|DUV(ԤyM=#lpNm:p<Uto}×)م"9*:g @4 *80ݐȷsYh^rgiZkPFaD!(iNRj@çjHN~C Z%?˘JޛK!_p Kt}Njϛ\ؖGgXET Y֕ Z%!]Nul\E!.ruF v/[;XjP?1DWŴaWKU@>+9N~ϻ<9~ʹZSyx$. 26TYYB?mWK@ SOjT$y%Á -Cli% 2RL@~CVW(dG@vEjչ CLRJng&#HOK1PY{X[u@1?nU# _ʠˏ;^v~2;g={͎U’WGiΛo?V$e?WHAa5qzSύr\"2v狡n+]CK-k>ElW:jgQ̓ ^jIb۫Byl|#ppZѪͯr cSWdqu烎U&(13 䫫'n)*+jΪy| j NʷrS[_BexDjQB.uy۝{Y?t$ۍ۠ {'ʜ7l< O,S-坃zu5O]fZgam@YHCW\,+국1iUWՀ{7CJwfd}wpgקDU5O,$%~_ #hhw_x\~EiAs2DizaVu26gU|HN?`` 搩1B?> 3ى}΍yOl/}߾V?Uo@$5O3!e0S)aZ`+s{K43NP?eꨭp_I\ƖbF Q#{)%`@~+5! E|ƯA3wsu`zan, n*]6^^mAy4?RQL!G/Á1r&= 8lD]&7HfB欯{"HrTY K Wm-`P pU+!ެU|icvgu/ݠESE$JpԿE3U;]@)E%D7}TwB#q2u1;șc-sӽȅ'F\s2 2D' "{la>Gy.RȰJ< r^3UWWnNt D~Ga8j2z2uk;zG[A*uϓIβX\_dߺg妁I!ڀ"uDMU2e)ʺ} $(R5ړ9Iq(k$ldĤ7jZ2˃A+%)1W鬣d3My]Ee\F*KRY)xjrvCu{b*Ha= PYwFT9FJdL/c([DDƵDZqxqXE*z^Ԇ`ė')%NCAҬ=&iHfս}=i+MEBbH7K),&؜*kg]0̗Ș9rCFK}ѕ) Q0E'vgFT$UQIKE!Ҏep8cHS0}tscy{)Ɨ">jՆrx6#s`{& WtB ]ne2MH#NHWeڌ~淞 y54AA@NҀ)_Φ),YS;*iK8' /WN}upڴ< qٙv*bX/&yoIɞ:3=FAʈSc\kZ$5E)0O;3|[ #c jme>]v_߉3Zet90V5;Vrebw K_'t4~{~uyO'CVQFUlS km1LHx3! ÿٰlkB܁^ecGWìxQa/$i~l;I~Lx’έDþU3QkaW lepSD/i_{8\[j: Y\ޙMXh,1E2pL68s鉲]+,:`fL}EY*($U3)+5?NUQb* ǁĵ w0d00<M|kj* )bi 㝃z5Olz(%RNhhi=8'eA Hq}mOT~F!H4Ye8:m@cC y[ Ϥ Zpq:ӑ}N &mwunaXeE16/oTi?Ğ;33:*7OUUJަ#iP WaEl+Tv5B 'h`AkUz@ YLhE_wpv1ryAp˴*з ,Ied+|&`62Q;侹Zv_N+euCz2tcp *-%;&V)FUR&&<QMОHO zrg%5|89du "Ngڇy0\/* LkN3u"O6|=ШՌV͚ n|;Yۇ1RnҜ\]FëqW{{vB`*LV?XC>1'*8DS.Mb}%O~ϼr: (]t %\ #dzewUm)Ur40:7ih*:ׄ'9ps\v`\G%|6sIi8Jr;;S FbS|JZƪIwYzΦ vP@2"kۀt:8 P0Eø ~?B9)0ۄ3ARgs'9%A NUR Q()-)׍8jVex#4Ĥ!2k5Ʌ5@ky߸2i̘ףF>s5V6XjM۵`Lxr #dc<YO$+Tw7 I?lXB/[/an~zA$] [8Xl9eƋ垷ZfN㕝Tܐ3`5MUQ'VA _ArdK$vag=TM<=*`'?,cX t(سL/['eVWԂJUO(9af+,uo8]\D<_Le;=SHAzWqCjjB=e4Rݕ,f 1Np6I l")#r PĈXYvSm.AZdlivn'{ PeZľsۀ.7l4fE6mu`y[nn;9C9/vE!՛ + ̿1näՇdTkΦ'PUFεŠ0.7 \T֚^DW{QDdOׅ\@e5l!O3 aZxa}pG F3PSƶ{1ҊG3ӇM fQ9Tc0A؇Le覓>"5*Xk#[" ^gz]0hi/J g?_q8F: %Yɺ;sMq{ՙe4TU0u6M c-0уj޼!#ٓg^⤟N+1՘7W^x -X0'BOav3vs*hA8:a-.kX{ :[#> >?rN17䱥,\-==Kq+ϛf$ 5t1&r`G!C{!r}bHESUMX\#xt Pqsޠ ޡ5&7~peru \n%W_\V  3}7 jwloCckU&C2YZl|q'`';K`._ʯwqM彌1߻+~(\}DM?9" ~$TY)[' E`O|Dv(v)n/W9 }1oTe&{qSNQƤXMR"uM TC]mʴ=g wMd.s+-6PkYRl o%Znd, <M5P8z][x2ĦdN}.K+])]I`&xט+,Z` xԇtCC}k$رK4O}l(VDch)QAd!62#wa:/E5\1U֞q#}UaD:J:D|Lu!6DYw|BkZČ36! f C K,=(5LB4 &`! ^%Zm&f=mj'yYP^5nd~C+ SeTe2rkJY./ ݾ$~lĊnG*`IIN Yp naDԏ")x>5$aNJE1o @.>>d j efdKd`5.v>xZz< +ő]DD|0bT](9V .5Ք筵o?%kdn`қLdpTԥ\}4\mnI@6cCb)۷,Bb6Y\ 9)Ч BT٣g0;F?w<-2A x$r iТo3#eaXŠ|) Sly!Y-`GZ#zϜ5#/N?o]wi<Q`to 5\nrܯ< ?}Up3*05Y%-f4M)Nǂ2\P~ Ω[c&Zt_bՈ巑t$h)) `@YC_zTD|Kge6Sg0uN4tIӊ- -й~X>_# E W?;6pWp n|_.slK@J7Rg#R˕ː:y=p &CxIՉsvigȊjlR";d-oEKy 2z K5BPyN6k? ڇKf͉<(6c[<Һ')-2!1Eh4sAGxh۵e4cp`!QI^KI?*2*\{ ?RKoINȃRz& PψkU)SpmUfe\a/B[\MDJ4L@Wu bۡT(PJ2ہD'jǥBǞ6kt m 'kNI]D-<5N{HKxuܢnXmHzCʴ*}j.=Mqvy(hق͔@HZl[LWoϘJ8 1C؋:W+Gg'ە7dm9xYWŜA/ @\X/VmFGrvY&kʾùD0:\`}+:]k|E(欃d|~ّ B{9vbUvKl#T{O,–H) ٭L/|{"zFiEiweϣ"߉($FF&9yפbo[ey{"Nಯ\>09._kWR{xڄJ(~-|]<943Q`n޲x*AS򽠑}x\#>WůB=sXT2nM{)$;ž@N<0w:N')&-Nw8LYMI( fY4Hẃ n7sQTrZ/| 􊷹=##z;^֜lIJ UCS8cV{FOR+ h;<;gI7y\v:R[^)= cl.yxoқ^k)PSdmL6aʹQ1 85L|*R !7yιGL:k̜'W[uSzq1Li]Yn?l诧_ +^ԭU?W|~!2g5@C `O4=a:*/X _uIj*hݧOġnkgݣs9iЛv F.y]q_p}IQ\+5cD2؜7Uwea&?4^>alꨘ &8G ixlTZJpGVv4&c6ddܻ)D{=1Q?t!A+>` Xho6Y [Fg hh½nó+Php(Ү‚Z bi[e-+qj ,+Tr.ugt:Tѥҩ;{4V>̦.dv55T?-lM"c'AD]R@0ѻo`B-"K%ғ-h݂N)[+jOY޽6vR +P*n1n7/Dr<xIrq~`$ai{`c,IˆmH9/ H nz@ d ^@0׫|"k6y^m3{yqΞù Kn$e.xr[AYh;8HE!P8tuu&vߩ^ٚ+3qKxޚ&v@8z*{~|s L]}CK<~U7[iA?:mcz$*΢Hhz/!)Wt{BYrWTrZѱt=V^i2A_wJ䤛4]M5IUlLPz?DEd[/_iAg4ؘ744?EJ5'+Ι6_'4=sue<~c x9 F7CŅpb ƍb4 `rIx̝Ey2Z|~,x5QO;VE7m- e S/Mw\#8mK!imj![o`0;:LJTN'W$|uoH4%g]S;fa1ygV}(rz@n>m3>Ԅn#ɍpq..O qߵb%bv]3 .NӉeVD^Iu-.X/\ !_Hqcu'v" z;~ \L$Hĝ]O{]. / K1?z޲XPQ; WԺ)ؚtyLo/'P,U.Ȱ`{lq >C|q.[&,2}sxF|æRb(5,wAtmja_\Wjj27f~@vY=u8}{R` 1hbT2 |XtMsu[L$c+{~O-?fQ]n?}b?{^ɣ0ydxj;CE`dΫHk=IX$`2}Q#Hw?D zK\K(,VFmhi WUxjpGSO$ɫ@y"݈@il<=A{C,)y k R+h[R؈5. a+T1ZEʴ͉լU鋯8x:=ʌLbryLDA~܇|ɔU&>b #+.'O< vefh*H,lwxnD=հs?0ɋk,C"fe͒ozo{^ݽoojj;#\Qm`#*ܮU4|}6! .kzu*x&[W|f!qKVen7N>E8.񻚡.5o@nR ;$M k;лZH,.I|_#6AV경Q+0\7 :}շ̵Ⱥܥl9Li6k(ޥ˽PM&bY͋i⨸H{b=h^1mQ]fbo~L}VV`W͊D 1jíqn柍 |ŒSGtey 0&=Iܕ:;YfdHwAiJ0m ;l|Բ*x;GeB%輯YT`WJG~^k5ib^gnjSKYA<r\jugj%8vSP;Pb$3RwNԃ t{D&4RQpG)>;"Lx0ǚe6򙪄wǟí9YP#txD>kזaƮ3oK#XبTss/Dggۃí<f xP2meu">I'?4Ty]5y & }|} P;TY wnoIxo`T7B< T\ _N(]K.;3H %(Hx76]'!VQl *T&bKؽ|:]u3-a4F2G> l*~t r2Ez+p6p;z4Hm%T.]3kjӟbQ~)L׫5m_ rܿm8</~7{Zjk+S+1]?oCejȸiX0)8O;~^aav[g\"v η;-س(~wFUD\M&w$rV/$08N<},3}QQ -&|9U}oBB4w#qdv״e|DS"<퇕ríO$G(#ٱWCىv:Ȏ[49SBrqF{p~CJ5z c>W1m~kjF9;ki?wCڅTq&jK*˟Q1Hqw{`Bfw=,O/u V{ zϕ&_&=+pz$OtmS 0}* s Aڬ&=hsɯ~F ȰutB3sNKx@eOXBn)9arSS&pOG{6=Uy{J:NrԾB̧J &kyv0bE\6ܮWj4 }h9(o|OV24_b^1 [j1z)rBAomMrlD6@͔(ݜAqI %YQS*[jV[U.˕ )c;1 d]/WgYأ2tޖL`VSVOfntK6d`>]i\T5zdd8!z JM2'FywnٱA8Cj_APmsm5<:78`Ù ]l: Զ K}r"gG:4`8kd>/ WV coJ!MR#=[y\Ž݊w,Ћ +ĩMQ[Hi9ѥķ!kCmsԊW:=d E')+ }\Rp:`N,+q+Sɸ40smz1zݓE/ؗT[c8 ڳ~v5*xo*\){:oN<:Q#b58j>8Io #/ pWTܒ5~DR x+Wm-!ቍ/`xq56$b^ɕJ^cm@ w.qt60(jJ_ ֐"&bZGvc_esD]`=njt,h]C$@?"JSxڬďʺ~ylŗtă ͮ*Gt w )pgG^;FFs2dz[汓L2.z,n{^(\p/ώso ){ VNaT"N$'/cI|>4l~dߐ( 4c%ӥ CIHҴY)fHoȌǑr^{K}iV#:m->Hڻ7~Cs;d is8U5-ְ qO3%ۇCB/}'y@;ueBc vMTM(ym@! ˅ s#Ny3P #q|כV8L#jh?+y`EؼJ{kM+d?/d8dj^Sآv*m:i#^՚fF@(\\sʉՓ8h+nh~NBSF45 i t,}+'%1pw{ "|(}K`Hh5?D;@ㅋFn"7k%wɂeA -uNpg-BڊFXh{84zj3%<)Ub[{n@غF=W`|ނ`; P\#?z4!Y}xPIG#њiDg/ne^Yfz+n{IEE$'d?{n  q,PMۉ^bSs0RqXi9Sʵ{/;zETKQEQ$w덥 8f>lxPv V}6D\v! \$=k e{Q;W:"+I} ]lb]Z"F{4}vI %|4잱EIYeaddvqn ,} V)kg·TQi~不⻖E oK\(h2.@_ZC Nq *"Md3ӹ at;Eqr-(rS[J!z9E]YDNU]%P:^FsVk!ϞUw)dϽ{Qyjc#\DaQ 'LIvR؇Ot`ٌsաw]%b*T+[0Hns joSDn()^Z%i 1~']4 ^apmn`Vm1_7i})Ul,&imzA8ff?iS0!'QspW?!C}39[z Ş3uP؛t&Լkaw0w?vR!IUA|ʋ?lä1ڒ71J4iĊጛLFXQktCo^^QjQ+E{u11.;]\Ooze(lU=\iyӯO/`ΈnJlY4FM*B n],/*NR(!A|0z3Cl w wH'˚Y&kT% 䠓*!a[Ȥ/W*[~>j,ӨZb`]텪z|0arPbPS :1a NO\-Tק޴sD_wFxGo @ӂͬb[Oqrq~Vxq*1wOS ݱYBnj{v,ꤢ~݈[.)<P& ,yM/Qu~r_ӽ!vX[(HȠZ}C8;UOs"b-=m,-!9tSػ|,s2+=V 21t!t`^3e4L$f)S8EC~Ȅ?Y3H~(eÓ6~si{aK mUO<+z0XS$9@u,yK7n&[@|OՕkᕾͱu+$z.>嗞@hۗ~2rW7{بѴ+1CzGݾi(pU".[A]ƉLaZ qh'ĺ! a.YFt>Dj~]{^^~*p=dBُW\%NzJ ypL^}۞A;OVqv <.cukO)%wB0rfU,mn&>axKc$$cژY<{&{>PJ䃮[üDtHbڧEOaNH5UԵ}8]!\s[rtNv xy6E s'#PW7$ŭdcYi$X& ]/iy6 C(" ay^KM7ۺ&t=S!އ8ϭXuW=7}'QJ7HI@`5YcT``#eRĈjJ_/$ެF=?  p=@hk9|نƟ($ٮ$ʰt%>g0*-H_6t"<3gh{+1aq,(RMJ_>] ͔5" \:Kxɱ  gwcC;{@](D휻*ՓHg<Έ٭g|/% advc.Wdlon*Ky4QBf&09iș]p ~O[ Ψre6=3 -:q9?վ' C'O⅜dK68Goe ޿Ņ?e6 \UUs(] >e'䥰piG&9a@~sFc-q_se {/AJjMLyoa7&<$:~c ՗2ګw«j Kխַj'q|ãdf*m' ̌kc+O5{* \ՙyiY{lM~x%P{qbF@.q t/]*L'QYhrՓax!* 0jʔWwzSt;>BNQ٫vY̜"Qkxxڍx^wOPǵ`.D "}4 xSU,:N(r0-! !C\؍a~" 1B&W2Χ. x:k S}޷.OQM_&gt=,+VP'Ю50! ] KE _hF舱*OnؖˎU4䝇h|Kl`~pqj햃>*'bJLOO'W@4MzH1>&I)7Yg kWyTbb鑍~i2S7df|u5@O'MnMvVoX41j L9ļmA.<'e3j'M6$Փ%B2xغ,~TB,Gẖ?O{dy3#66 \cgǃZ$$*Wܺvᵘ6Jpfլ4Pqb$?_B9'~YwS,40l*1ٔyQ"#Ό|%F#hO~yZM`uAf(cnb*bvVx4b24G'0k]:0viS#ХȣF8R]uɢΘJ,=)[Kx%ت yJ4G.hk ,%cLMKl͂Cvuq[ZS3A@*YAKdlϟ?YFM$GJG- Qd/ŏ.=wbQKj$+ٝo0EW5O8qJ8hCyYyW_A#K tO"6gE&r/@W~wJِ]s@:F#-3Y}`0ġ4OVZPIsvO DdC e^y=;Yh SpNlsAe exZ^{u#4c~ e,c/~?z{*W|!zrXj/tUZoijKrxS->q tKp{B3pUrqL+L.|Tҋu?^lUSe/񾸞V㮽G~ƒv7;\t{X%3988O'2 R>=^d/MxI2W&c+1P`#Mg֥Ol-lLk8Ih9,e%Ak@[:2܏hMۋkڍW}L?fޡX#Ȃ_\X8PQ1WjL[zڕ"j߭†9 > EH#z&#jQdA(ɼIKܵ"O @$904s-8IF/-R?08I❑` vƪ(ntYN)j; \kp7e p5{2#vH,tùz*/QsC⧨nneOhxbM:HͲU4ҷtQѣTo?Rr=J7 TUz t{OJ?s Kj37i?;e0F?V 汌ܧ'HUUV(r{ms(/+Y1%)_66U{O-2ؒW@a-#GB 7,Wڰn"p[,ޅ,юIfDΥj칅t`<% #8ZmU9 -hhՓÀh9kSL(n'3 N[D7@6G;z'RUfJ,gLΖ2<9/4c͖a9Fx5Kw7[9!Au++(?wT;2{i(fKqfbX\/P7^||4"Q@ 9/k $uw$c=i`,ʮ( GRPR(HR?)^*1f ~ +AV>m Orb I&\5hmZ}l_ܟ7ʵ bB48ۓS`*x#J(e$b 7,UF /TkTVD>%(/i HSzЩtۆS"iN81f\9yxMY["GNUf@~ AQ wk|e@9Vh=J42xR_hڤ0 dvAl:6>ݯ4ۄ,,(QMLƘϔ4a v5(a=P=`nt~9%ךG$W*CU6g T_/Ч{4]x]Ib*geU!ZI=H0ά@:]4`أ㬣h޿PL %{ "-G36 Q B6)IJ p"L\z J5SEI vOT#Db1d>G)ِ[~wp/xsRLj 8h(3i$J_5v/ Ӫ|v2:o$6Ľz t kJ"t EYlz ҕ&Z2lo KY g13$,tP7MG$N4!zI{ V$YN3>_N߼ȟ-p!CN"<*=W%$oE=!eIӼ:?kc$7=X8v:#N`։RR8eۭ;ᝳ , Mulmzߖ$Vg#3  82pH|۱9, ͱ9Whp)1pHx]CZVTe⵶D( A \|.{1RJ0hd^'}F:)֞3̭"(^%_ȹL'DAH6z*w!#UA%%Z3@:t,ùg} x[:-Ee_o.Z/cl'>INE%TqtXV! C>1PhPCCq9?N]-gyP[I\(7+pܡ#Bjh2`CYK9Ā' NtA~@\PaWx Д)ĩI8= sKה`֔AlvA7#n Gݜ e A}ԾǦ"NL&ы ;9c*:,-.aq>b`[O#bE r*#2lysUԞLRe/(!RD)8runyL)f[$+S',b,IJf6H.~M.bv'b.Ŀ`JjP +_/o1ჟ\mTf)m_8l~MMxjPkpba2^4X Iͼ9+rP^uxrRi5^B)97EUs)Vi5J,-xLp:q}AFb='NpM໹ҭ?KVe9b]6?"ЄYv́QLx0?S®wK#5KT $z֏_X?ho3;CJ迓홆S_.v*&;A=RnHT%7/> _C$$Ɣt\nT#ΑU A>Am>AEdkơ8զBPTߴj 5ı]eJLOdʡ2{t9-'8֌B7 *Qj6dmC|]0i/!BEW ڀwMU 0!acN[uYc./tV U+%삱 />̩wU f<+6of>1^XBlΡNh21]?IPw-z|ҵ}et/$a RDMtpc쿂1t'$pЅs{^/X&\EЇ,RW?#`X:?EY̺I]k7as뾄Kn8f*#CZzXy{Y(xI=K _xRz-jYOL\Qю_/`Rv 䃬0"Պ`R dR(p~e:he$rfqkD/} {PsT[ d?Rn>'[~/?t<[ƧǾ8&"ule /e]od.mu;>':d&>Ь6e닝# R{'+"_V6Ƃc`9*7'׋ !û5/LJy4o>怞({!kIoJ!kZ|'G[P{/!O) ht"HAM dxUOGύ'P<>alXKƄҌ^R. 3pBrRfiUcp N&_d5@v<1t1M7 tmpqI_JPTm$o2CKg]Z &BUY~O{󬩅ocNu %-sq&PrTx)ca2`1̅1[5Fa,rMeAJ@;2%ﱤO0 5Ba$_ELXi]On[6lƏ"ꫀv'o}p*/P[Pc*R5~h G'r H8H5RV#]TL =&ӅO BAgc{}7#Ҋ؆h1 <)fV{L^mmSI*=?lqvAA*mnǔsrv:o6HL[K71L3׬[Q#*D8.ꑩ3"E̜~kū<$ұgr "&I=}c>H$NWm1c*qr*#+9Bh>)c "c xlLjFfq<>>. >cߍ7s=5S1D䓟3wl!KZg5=S88u*p6O\Ef~Yor*s:*<֎wp^aڄš Pef_luz!qDz]B.΃0 _-ѽL 6I< I A8$u}3 ӠiKz"r]7bF=>+XPZYR?Ns ƢI,}L-L<͚↞CkWXA2@Xyf+Ct3lmT\OMZ>=ͤjWD!6" *[gQ32Oҙ:*;4既HO**IƂ2oۗ {rD:#nZsf4i~ MW/;蚴5}>(k@zfqK8*xx I҂.@CAP<5 I~""bҽXT"_;ݺԱL tnJˌ)vp0M|BGCilr`W|ya=ka?ZELJ$"0̃4(y}rۭU?_IN?;.3Dl֒ϵ[v4'Ժ<\@pWdc^'EV<ʨ!a#IJB!SV1]ۄ3@%>+gֺ ^>.{4r FgQ]}%3gppK5ڿ"sm}k'_{S We&`&k]ɐ,[(-mXf(~*-D`dUGylM˗o 6_́;[A`kK$D hZWfQ(|&0RMԒI|ܟg`*qA 'L~Nm,7dx֟BnF߽mà"\ UڪegREWU+u_p s9t,RSؔQ6 g_F厓K݈IޖІTŹf-q2Xi NVDž: ɅȅD=c>` FXm)Y]p<ɼ5t @UUvN`fƨb& eɹ$G6i#Z0ۏs3ؤydcȽXEue!wuIWlsvx}u[:V ˧D:ȼP N :6ޕ5hbwF9t  '(}V-N bzx;ʼN#F6-؟w-iƾp(@n{rEik}5k(EL c2RXjvmlkyd?H]Wn//)e;RP/|KAvGLȜ>غR̅;gpkF]wGwl#{g [:!'qILfTMe#:Ju`A}^JYid% )p.;jw~9Cb #XG+?r* r}L)6ҒpL%PSVgЊcH=O <7QFzK}os}"ܙwj7iyA("$jA+Ȃ`'/~c>=oȕySY 7 K2y8֠o 1Yк=țIvhB=a&FNkbH꘏"lcsH]qVvY*mAތ I]˓7N0w»7DJ4RjyiK1k  f TD@tOeE'FYw("M>]ITc=S#)TTgA:R"Xa&1ީ7/2ڕ ymMEƽ&Ԯ%zdJJvǢfgaCu=jl.ї1^nb/k; 0uc-X@V9ۘ xE)ANZvQ&-F~W(Sl3:SZ-q[^ ݍr_M@=wp'e۷=^XҜ+|䡑2w6OB/YcV#W:ȀeĝH$sݷX~g5Yk2mD64-x\+5,Gy3m z!?Ș["sk얁o"0ʦr#nO sHAQiА4?_ l_+sRz (9E1<3¿z6*R?Mp ~ 8Zn%IՐyF_̌30R½:cYqri6ˈPNzT?EdӋ\7瘰֒g-\gZ^2 B/&ᾳF}w{Ǥ_ڏศw ;>V$ǥjĬQBް91"&۩!K|%-2C jBFx'dX]yuCj)k\}t̐j`my}1Ue_!?[,}Y۳kKd [n]^ m:`@il_oHj@Kxvf)u>zX5dlu ^ 1'cYp%#|G,7dHG( %: #b/MlVNEwx pեׇ [hy"~Wȵ^WO?Lí.$IÕV+LPOe1+N6rBcCEX,]`@dYFi|u~'pI .V_ #ǵjg TD?!- ^wS e$kn'&SIdf x{ QmS גhڪ)¨g&IԮbjc,)rnd.gD ~Lxr`-%/%2)NUV|u >W2YtknvZ7?Hi0`#7e2̓M^H_/cˁ#[xQ!uM,R~) <<fv٩эdbWUtE̺tE E\g6\vUdn=÷Z2'e"` +TPa,]e [zvX!l󣹪^ *긜]˭uN` X&/7!| @`ŒݽA` 'cWcGN>[BnƷ8UrknkزQfݦeuuh|}u4)hOt)‚tyao*|+{:،x8>>j-TE")X谾iL|PZ"7g7t$4iX;q!KQWI;a1!im+)hm^gi0UDi}|w,'fTx[A`Rl|?Յ5nN:g )byՀ1@6Q]b\rJ uA4@͉-T\@`w{3jvkE*&#aQH$CHjN*VSr C;B{!ʼnh٘Z2{DR#:uMEeel>ea!hM->Ǘ!yw^K#à`Dg~:s b7N莖W}錉lׄ~~.i[y_o&+$QDzC`Vg.%ޱt2pf';z5g,>IW!T/Iʸb-_%`ֶ(hw=}(} G(P5Z71Aq. 5IT3|mtw:BapHM=|<}kG fwv"񮋈C%?Z)}Aga_Tښ`=yyGTͦ@y*5 bYoI? %v(iS^6|qDPe_ @0D_.%5hF6T} fe,6{in BlGS9J# ܓ+hK8ar^iO`+CnqWrGK5~j;;>-(7w?rX-L6RAgL\2R;V|q[) ?${;p/<؇Ş4RH׹UEA!V4_ gmZ {pՈ -zN1(C&e GG4y0{T 7dTy)a Fl3'%h)~p\*xyBr;x LGӦb:P ךR|KyUnֱnDD7RwT92z5VfKV|6اyPXu@_FqaeFͼCbɚTĖPtvkO, 9r֖x^s/'#[r ;S;EdkZȁ#7F#ա@v'16ەy^5 d0><%/|f?MUKzxqxJO%~d0W n7Z#RGLDIc%8r:P;q^f׸pG@* rŸ iC@ǂB!S p7Whʠԗ @5]Ԡ3m Lfq"y3۩ _c!ܛyRߥ6:]oD~zOx={'pFlͥ BN%ʳO񝕣1Se!= wJL5s\r NX|+.4'*)jfgKtږ6sпF &ϢQ/1+x\XKExL7Ҿ~z?] lHIrٗ.zթ $]uMA^k{K/:A0N{wI"~s'2yr@r 6GӌPDpJ0xH#Scc@@d- {bUzaryVN>w* EM+OgaG`K&HvZB< qYΘ+RC*P Mf`0Л6ڸaю,]0p[6op¬0{!}΢*>PWU{_-@) n'^ΪC* %DAgp%WwSYCp$Aq6_NMZz ,Qa،OyxBqN+t١,eCpX@THD㰄뒎Wp&u B5 MH= j| ,©i˪OH; [5ax085% m35tۂY,5(`ų|Wտ#10KZo I071[gXs)PXCqfv?$[Iu1ZoglO|^ 1ΞpO 5Ř3 m{Oθܾ>ì1yF{e}A>]rqd'dh0T/`P:{$ѽ?} }I>oV yMcSC_uri+QT 'Dp5YRyLqsl2>&4NeGe )A$G/KF K 8),~n*AeM[!J| Sd;ONp"=|P.˦6⦅:Jy`U1O0t[@rPR!}#F;OzY R}Vp|:E±bJoH>:So-&t eT|CN)ҧWf RLdI!sx{LwKZpNSL:;gO؋# ܋Ev+{jByʢYjwr|T̽s57䇭~+aMiKϚTW순VZZ~ch]{/ZG䑮:J|7{[#%P\fΫBq= SOܜ.h3<3ml6D"d]}5CO@/$9!⺜&  _gՆpƷ4:j DF} E潘 leX b;[e]cý bI5A ЫGRijD= 2s,6>Muq94x;[ +4j)w[CRrodD?1+A5Z'qIDOu@ XePs&:,$^lp9-*;23za uw ]"Ӛ;^{QAz嵺๜&Q.ZI0LZk/w/PG?\Z)||Q|R@ZX{WFֽ_|xQbҀxi\$veCcƃ AdF3j[ܔf ^ o$UP'kVg -( RL yt)/ {*L՛,;B8d4/ R zu՗6%J[=X1ƬNs:t,<';(^{xGzg4ȺmS~~jdg|0Ӊx!R3N[#P@ l- 1HM[ZWW@)3sLt|:"T:Nۏ;"JGۑ} h[ДK֠\= ?#Y)Z~NMQn>׳跥q{{Q(U}̯``>y60P;jS{Ι8U̜ V=C F(*Naa2_q^GoP*1hk|qĺ#pu'I{3{'s~Ι~«߿}TԤ:ZA _p1U!6&45Xp0+).8eh`Uitӳ D UX.,B(6ciS8~u^{iXL}Y0 JyJ0Sp^@';c,['g& v~_0AۚHtq]SB͝iL52 @\-kj~~USse=φX-Lq!˶iѓUmkHwLhتZ4~ViRkWNZvWm纟O6_ίCB8>9I}1J̰3D`d1^WŎ v0Փz3ӨO@8 <ӈȟyH⤌r7Jn vf~NOSf y&WtmGI[@BWy c^#496v֔xZEz雖1lIcZe -usQdF*_UuMIxiFf@^]V[gL5NQ\P?u~PtO1&63<#2#tiaur Jv#$89} 2;!&Y۲P}c%/NS)q=%tfS~3P܋-UGO?lSItfIݭࣽd4z }`-.v!63liJ C5,k'tڵhĠz.EՕޕO?zS'&.r;bEԵ}^X(O5uzpeL+ %=ۨr[߶s&Ck<8:j cdy-;]ED|@E)Sfl2" yW"98ZLtipr9<6c;jSV;*wnY9+dpV \: dyЛ]6~L4SFojqᏑzԘS8/}J b89)q @LLc䰑3)kO73>PPEkiOLB:H3?0 lw5*MbQ:H=1D3Du'DQmzݝ u>l3ucK'CBc0^WA-慠Mb#6D:;:Rdtt,2*.TnxWfFx8sRc1)Ýdc_#e]RԵAV2H:JpӜ=)_AnR.h5砭MJ儹'~sqH=mNRZ,>Wjm3F!cibγ] |M5Nr'>ncXm -(2uC+mæ}eOp=\BD_ "1kU}2y>7}#e~jSs7RtC?+f\%Qgƚ C6@I,i~Eʗiv94{C%]|J66W !3Xߛ)A]يeYLBnx"m V._v=a/gG% [l J} 6PWVYÀUu>hݙȀ//-[u2bL&@/w,YHrJ ZPb~oeϳ,P |p]u2ʽiRmRkkAsmtQYMpM7%1$!hKuhX2/5[uٷg\6B 箪/(1 d??ȯyZ=vf!JysQF37QbSo-mibwNI{[2:E:^ˣO>kwj(1ܩh ' xhں9`i>v>`{X7QrH23WXZ˻8žCuVӡcAPyp$4 +su߿̲vyپBΑڏȌpʏi[2cY*%$Pu b@̙B슈I$;14A,ԫ KyQ5=0mNwEs}iTem3 xrNVDb ӯ%i ڼn M">zOk"ۅYY:K E1WP:bGRHٲ܊֬?޵"[-{- '{ PK]ptZ{- bXZ ѓoJOqAOhmay+=ebMbhv>K_?efŇ HrBͽϤ?\ K? º%xVF#*͛ T%9RD֦/SfsճOWH_FjM 2BO*Yq/j'u!7ۘt+8|ys$ΰݟ(w|lb>ܮ(EB|)#c"IJf R;=3'=M {6-;[!!Q F)l `2ϩ.:7eSP;ثde n[WN:rĽCcAY* B]G3&SUx88.6*2uҌrpQ<[f[1 +)m.CE6ZP/ %UHXIY@b(cr݆'ۅaýi(ᷜ3  N}+5_Ğ:!:xʩ>im 6P._q$X#<[lU>5׻  &QO6b#pXn1݀l!j()'>ɫᙩ0ե}50wv,?@St8Q4sG{tSW 6ܡ#lDhT!ꙆtS.L]9[_tK%:7|}򑫯Ӓ٠ .g`Egg߰a}= =M/23CD, Wlj?'rkмdEֈ׿}S:Q*9Dէp4bKR@R"'zyl(.RRh!BjU3^߁,M9N'Úw+g>j2 $2tiGZE C\%u ؔ]gR&1$+w+$MBC)e!dl-m%qNz*5bۜ0@LjWu!PDY VbbT.?X6=Rב<;凑[ A1]}m3*x&^{uw@Adt7fpεGx4:1R;Pkb/CN "MCU7|R\:P#Ҍ[IYkk$Ñ]v'08q޻ȒH#_UJ*ZOf:Ga˙2m*ƮyI;J*k&y]~骲Mk{$ L;1- GA)agu*6Z Y6邔qۇddsCڳ8#}+;S7܇|Ҽh\73dzʧTh[ N׆;D9k :DfՎnfNg6䁂É@Fir !M"t5;\XpM[F#:g_ qłd%5J^}D#Z8N( 7WFW # Mm} ]," m-lJ{eTB}1R91+I8a)J@APŤ?#@Baffbr߲ZΚoPNu `pRy{.Dno pQ"\tfπ6O4ݰ.Mđ':#&9 ,lD:N28  DM~p/W\O4{qx@ US,X30'uQA\( x5qӵE;^'UpL]ڊD$ԧ-D۵xp/DHRaRvPLqA*w\Y[g&_%NB<=o}l$՗fF7tӨ]Ey9-GtCH5}|cgNed(z$2w(UƥoHJ`#C5*} ~}6C-p\p;~}QyFNXqb6>YHl5A$k1Zf΅7زg^vqFd6!CUeΦKӌ8'Jٔye` ~)YG zwF.OQlZp"Qq2u(Ж';BՠdFWHVΡkF}ZЏ'MUѭ5i[2v{&[jw*+J y>{.͌XKyݎ̓Չ8oLI,Mþ i3\m_Kr~QW޳' ܃}m_XѥAQڳǶ;z4}=fE}S0T. ٲ Ah<~(a/DGd ~1$.:HE7 Iɗ4h ۚPoϻKtjNCFVmc KYWPp }QR$qKCݕ%sҶ[zؐ3WfAo;^]xu(XiC{.=A&yz 1{h(;0n9OVd<`a-9%Y?h!ОdxMFZvwԘЗ ʓ DZGPf'Ax/7*ZͻreͦD#P:Vd>"ʺBsIq}(چ.;Xm=7Mm؃9 j1hUBPPRZ &#SkoJT)<)}-a_]%P$v`z*BU)$ps";-L6wIA&;!@ak<]T޸ x٩ޜ;,orE,0P"d9 ᦔuMCs{qR_!\%&Og_v9St0C3ujD 6{&2VDRd{\8i2G7O9{c"# t4kuBV=\i"l!Oݐz4>&O90WB0o6{]?brV[F۱v9d܍z(dJM$̬ yGm Gާ\(G>[D&:iF*^`.2d4l8uO8YDv |g1Y}sEL}/9X?דObtqfx0|ٗw=e11\093In{Ū =`ZtV4L Bf,7#>`/q }vV͹b:| %@trm11i+ĉhZ$<*MS JQ3KWtW?Y1#-a$/%wwDa(8޺ r>Mw:WO8NU3Dy7lJ"Aёiw,@@+$ ")rPV{M"߈tJe$QbK%uJx1b_&܂ E`(^PO'^գ`j0&sл@*\ɧ1=L 8Bg!Ý ڛm)=Ԝ&o  >]vl[4 MmSAB!զ] w҅kJጔK!V0@;wE#&x)w<@0=H^q"N6Ӊ]͗glg˩vbewFK"A |69uIGaOҩk=M֖$WӇյ벷B̯B42jov*:k%l ]6m_9#+|P=QxESaMOF(E\o0:mH5W>E!-ѿoep04x"e;Fe5Q7 )2Bu4W95i~J@ko|cI2 A&Bo[c8Ak's9 KsW?_`=D”.kk =f dՄ1+:ì &6ʉ'(DiK\d1<0C,MP= n.^ᶗ,# ;lg&ZW.yO7L(ҷ.żS4\P (r6ykS0dadf;pA9QqD̗ C`kB7~Ј #Bt G c\:֣4bƒ{AR\/ my q3 z˵6S)es1D6o a2X_SGv[1l1s YmxdUsfkz?I`!V=d= avtL~Orl/ؒ^E:Q[AEeMg\Y a)xOHH_ ըX__\QJeJ v8 ^|0.IK)(@&: tC:m%4Mx'z_<](&QwlYK^oN,U QEn 4WJݻ`\ FrM=-n;PжgI󃂤_G`=PE~V*S-sRlN2uT:P$f1rm_fS@E'>L 삿 ;[t.A%7XfZ6:g?B$9LJe*!,9IW-`ED Y|; CiU&lJ~tccr<;5?\6 <>G =qO-Z/`YRU%#H3Vؔ@jF̍!4U0t<79+5 PYLؾViR,)h)QRe:Q; "k1 `xJW`X]ە(V1=گ:L.,o ҂QxGjV\:2l O\픙PnaI짧 r2K%IgWpѐɻ~} 1W>JM9M e8葜\+ ?2Ka|<tìTg|f0~t6>q~"=R45ehrzGav52UƮ<<0/"\Pmu۰nh- g3qΥu8{<35~ipl|;/E[88'\O\A8{)9 ʼn KmL1n($G>ijV#;"p{A}!Ad2z֬;GD/oiO[Q%$ 5>S3/WP霋/0m 7C_\ Lud=M l0E lp;ADW{t$aT?6:{F߲&o4 Eē1dž@-h.NƳʧS7cYMZpnSɑwHҨ? 憹%-Ίˤ=:Hh:a%{jyC %BQ`op]T来3FF!y2[QQxd+~G2=O-P [wfU$T\L"c]gbpO tSˤ -z[CJ*nkBNh4qXV ߉jCq6I1&%pI?«ŴC@R4aZZxYUBY-Gq,D"j淦 _Bml$Ŋ2ae38]ρF*@Nޱ`p% kZd=V=W͢.T;>0&$ T;XePXm2E |+]l}~A]o cZSXtZP8b0ćⵜ]z;Zfq~Sü<5kX0-HvmSK T|ovzA oYt  şNI06 xg\xdIn:]ؔJdp)sxgU!OZ\LI̴ 9')d^wؖ<*&BֈsW1Ur71Pk{e v}Z-iú6BN*IC?&b k:cu޿E"ezUvj'n[+Brƪ[Oѐ#jKɷB,7|6]B%dOuVj7nPn )|AE@cd.F%ݶp'+-M\cxeS& d݊ѹ`)>D!We(t7OHIA@Uk\c/f v IA5w:'UUͷEYEQ#4JN| %= {6v;C柮sM";7YmДsvm+=uܵE.Nc f #2sdaIiJtOT\8]=H'RA5G:KAS&]Sކ1em( 2zLtv͝Lg_^]?{S;usΊid.TG>&ƴ|aC_(W[86;ehMxf߼ !{,G(74'(RGMglD~鴀hJU|WեA\=WGB⒒+Het )7Af-%j]HX+8*?$=wW] +=@v}z $f;l*D6O1q:q#.ã8y9(oVurКVCV|XL)WjO6Sy3 n#Zݚo - ')%cT,fn˄qĘE4U{tOqD Դ{/%DBl ya"&84﫜m}8j Bf"Q$Q꼮`4lJuOC#W߹u7ߖY]А| rn,w{RS,usC**A=9԰kJ 0FJ?+kL뒸8ft#8۔I\kgj|Lݴ%dz{,Dh:$-gxp6qn.NE)G1`_5.S^E  oQ4&F_ךb@ F{i[IJ]%AӼ&^=\K/|}] ޻@U[gZjtz?HD8?el9o5/TWȭfLĻɵ|EFCfTW ixk*Ni;T ϠT~$mס66 O[8ގ,P_0zLl:ksZBOm Xms |Z>6XAo2zsTRvyS~^9ƻ^'U5DC!ں> Y m 7.-ףtp̢$ IQ{IVM=;N.\${2VT'<.^8m.|Ϸ23+@\H7"L8Txl_[ye`Izæ3v:mk <̠ELd3jHvM~hs n(_ >7T {)PTBԮ>,\} X0"V.?\ ᩞ  %¥CDŽ 5&(\«HwLIWke?~aK,nHpJO& $WܳJ>ܲco[QVf֖Eޖ}Dri(moʲiwa6J(鲮R'!B\xujKy*;N(~RνO vOG>[ o\Hٴ\`ɜ#'VOzÜ/Z.JӦGC~=չ֑P ڸSe )N""M J 9֬%?kܤ5dY?oXa\Jr_ݫ0}X,=[LMpvΕ^wFj (n$aӑJnylYM恒~M\#t#QYe? )96)LN9%ٹ* s['2"dQ e@,%E nǬyNmZY2QHTtL @ipQqgϵ+G`X&)ՆG.̀&"f"UA^ IeH)VC.o!W؞ [H,Hp(b90Wv z 2)ɕ8`l,!1@ Uw, uBRTJA{f:], 7r(G NjM Yw~RgXBt=c4zsݔ$ +dGDmv֘.ɼmQ ^<]D!OKyfp{.ƕ9@Tު.BY y۹bU]Ə|~, Y~;hzbd "E/Vbdo3ZQMrRh+bS\Ð 4H)ϵ9;OSDRW$n)ա{$QoSyIDVee+1bKkv3IW_YJTg%a\7! * 7Cr'a.ZϠhM ?W@ M?be[7/ٮ戊Y_%%_ShB z>[ R!)WA;kANMendsq򫛴|414tX5@<4$rC2A1BH⺎[/rתlw Kvo-}gBºT3?abd,F낰&d&v4h?+9>KX DS mJX-СKط'`f~#uH?,"};un$8TV m]ȏ t"}mv9=|ӗG̘$% _~Q>7M]6'&+ u{y% ?d+vػ* p[n dR(,:`S$B38tZ}-Wз#$J cӐbkLSя"Yy2J-90u)=$T?u]٥R߁V5da>tYl̖ ߿(lÀ8\(RBl}ztb3%$F8S;ʮu ǡL9N`WV]ܢe>C84s vȴ`{:Dq@f]ՐA- MJWS@heCc$>lIg֊xF]xb^Dx G5/֙OJeX7Ц}i4_Q)&\?ҺGB#>w+]3r8݉*M}tg:5}LwC?sg<0z(ڜJ3Aݥ c`yfrFB릶?!GQ[q G*7˭]Nc5ܹ{}V<=NQ0RC=J 0-הwZ("\_k#K >Gv=W-OBd̙{N2_ch>4dtqPv/:dZZ$PEoT ֲnoSM \u o_w֋$SuC71[MwoYS1j\Vb׻f!}#s =QT@l;زK",;˨y ST-;8GMj\v:#2X &)QkT5'*!%~5/H1p^uS0Hej ׻s sLcIT=lkiT'{KK&Y"+wB58NyZ p(rqZ 6)E]'b/?Fuq"ïźgS9,4xD82?@6kXKj2icnx((5yD,Y:P[ Bzcibi>~9ؚ('%\'")WR Նri>^OYۉ}S@ӌKB»'eט%+x} ~&oJoƒ=cψ:bYB%{t":2%F@oՐ2Yd1;>ad[Zi]H0k4vv9tWe %ڧbMOۃ.{iz:9]"F{VT)c%Z6:wk|<hsYAn\V'o8.Pf\U)[p \WS7R7iJxd~4O5$F FJ{t ^zڟ{8(CgM5.60]FLb}o,1 h=tbFO0jAa& / Pr2pjC{#ZrxU&Ûa('hr_gy;E+^>dDؠ@ס1NMPthݜpwP$q}h)綦c$Y ƟRNNyL/:)/0TdhV*cê2gy$ 8ׄi+G-=l Ҝ]^Iؘy ^00-'cz(X/1! Eb 9d8yz3'7=V9DѺ:~AbNR]+ؾjL$dY vˈ#@of~?cU|'/Uekgdw`+f#+>O/M9r*wjZ8^ xqQ p?۸W[*~= 1Ky*G'(YVez#%e_Jݓd KUӚ:R5j]Y)P' f\  dx*-E w| /) B?nva`%q;>6A)E>B?hD3!KOq ->H0EwMZӟs3 =n/ĸ W4 "ς|ujR ="69E "@@q٢XZP~s}Y1b~FnUn$ yo'y/1_R?YU82 #MtmY’]9c sJ_fr ^ÓBI>3yctQ.ށg7'-oED7(gOc"F%EH2N| 좱QF0U֞mjKJX} .a g<7)s, Yr؀o %HAmdM0]Eeq-Ŵ~S;}Y$v 'iN)Qrai9^9a0箲Rf?ɑ pU+&T^Ef+=fؘpW ߣ%")* ,3|e&B Mu=PX?T7 Ry_% *W? UWs+; qkҫgw?dP/-}=_0'x 3%T}Z)5S1yUڡVGfNce+7gh{8Ї`r,Ӯ1uCӹ?UV6.jdk w8:B͞vfO3qYJ|ͪSHcPt3vIQ_(jmHjx 0cL妸M7c"jLC V+9M^ 2 7#,PhgڸWԧŒ1BGe$mGϜQ?(bv)`:lD=h_Pj)QK`0'Q$nn82z2 `DhwN3X <|YP]rCrb I_Ql{}䟙=UB[RJq_;Wߑ.8LAK(n)Оo A\W9k]Č2G `; "SyUsDݗBB,1.<ݚCeE?=ބ~yօq":vV8Ix- =}=u5yu8A]nv=t 'ŦfO[U !٤2G9,7H5rDHF*(E$zwРXP)K Id!F׆.#Ս- +::ߥAdn22N6 Kr$wmD}7ҺhL|i kJ=̹kJwؗ5u>& L#wsA\ۋx xԮZq凕sH3ci+w4֒\"Wrk]5%u0iۿ}8C,p>\~qv_Y)|ei9vhݚU!lT*am,GeW*5YƋTUϪ#9MK}~\ )TGX ?3ۅ`&U`)}e!jy4?*7D* hً vU"_2&F\V@ELŋD&vf.jS /WzģuVg\ J%D MfNDc\޴Fo]1`40օZI0![Da7ץul%p_ηPrǑKkmA2%ލ!Nhu4C{YtR64v_T0|P# L)ݪ;H[Zɪ" P6e$EMmd >v;gt-Qi3;&8jJzĒ^" 8Q=4Ky&B6~"Vײ'}/LѣB@8.)~fOr"R0Y 'QK=H]N,!xdԨ=h %B3ժ KƹOZH@v5^CDQ{L yn'ZM0 eK8ex5Q]p  Ro/Pz-:gw]7/NРfKb.-g9C$:K{-@0g '0=~$Q̳ƻewnܤCXL*' bՎJ޽C^c@pG+/YbEZ9Tw[CO#A`-2KLV9DD0@A֚piL$+ݛ# ,TЌc/ިoN3X8)*t ޝέU }:-п]{I dX쥐SOG[{&!4co H@vC$cu3>&XbˆI[x~4Z_VLhIh(Ш7U0v Hѫ2 8^P@&4iw@=LE2A [MT7L& hZU#ĉD`CEH`q||,{ɎnZ@?!(w.?}:ƔK\s/Tir)mXy|qea!8r\3IjVTWX a3&0ez+tyWT@dG fB *(dxx@ M^t߼p8lު1_'g7D\x-v?P.#]R~2z[Q\P춷k5L=DWCrb ~ӖÕ[:(J81ʺX#WWHsv5 QJGts66X0ӐT$op.eU+IF[䜹 \8M áٓlHIX贞Eڋ0UM!I.SVr4wjQԃZy=ښ[Tڳa%nwk+. 2px "%뙼amOD&V.?0HP=$놻VM߿oF`y!* h6yVu۱kb5ҽȕ7g }BcdsPxl$ APZ{]m-G 6v#3FC7C LZT^>n5}>@Xr?6\Bά y"OA?~֕=2 [#:v8hU)YWb*td7h!C  *:,UսQdE)ΜG=u~GUfj/߭ۡZ>Z%Dw QHfE\|0U'Wȁe \䆾aJJqtV =c%zBy!|f&JJ x<5Cz5-&\cAN~MYKNz`I;6 F]Q48aONg뎒ԙ@Pbjc]D "-FR$!7\XXc,gu<f1T^҅Y.+ƔSFh}"/ -c{%V*B<>wk,T@ &7\T[Omxf+{?#Ƥ9 6';E($f=\6,@$ phbN[sPMJd%:t#yKxɿOح0VX.xWp^w {{k<~`[]wM(+J[x%ܙ Zbi.B~;eGrM.͏b+@S\IìNRd%;R#3 *1?L玱 >m y FE5J-%7Z` C|G_4Rr %Aַ#-$" ĬV:=.X[˲kyA}98vBPdmK03~C{BDzM.{qCS~6Q^JZ`@?%wm~L,JtltlR  ` + nOusdN,nQr 2:,Sjo-gIILؠOРivx]LpHSfrC 3-,/ DNLOcUS++n/׏? l蚡PAŰח`A<@τᅡ^Ei2Lj]Q蝯~2FvCK(_W|OMq Uĵr V6I/"m2^Wq @fXk8 ;\%˕H֧f@N z,vݑsN}-x`1R3H)wC~ON|tk)F/7Ln=, ['8>"f~e#]OwaF?1 OFZ1ƨ"1+se"B?<S.RG?^nG;Q[t]K֓FM#V1vF| ']g^ipx0t>וnPYh& u42;|v8ޮbdjmٙ $gh@F"1h42ʏtUD8d-RD:ꍆfP٫-t2^O(0 ZG:p8/^W5sKVOڸ]3t3xpNjM;%>!rFη)Npi.aG֊x-&(?0 bqoq[5FUv&#jK .NG X[llc;{Ռ3\Z-w^_LxCyrzGxxT> _#.RW+ͽ9D<M(JyÀזln5R# aVQN7K(1uX *J\vo…ׁwlĀjTSH( -DB{?Y=s:FJ@-BTΒv^4515 -ƛSIl*l]+Tte9dE-k(%ӑ8ߟ [6t9BI@JC+yHk(7 +5H&+v#KL*8ÏeT_|̟y=p5UMɩ*O `Prh"F79h OS|(EaC`oN;@v{J<{*cP/(q$*L[${x=P!gߺnI֬BLenw#۴K DV O,)>+)Rs.!KdH%{zcE кzDdײYk#3m5\4)^vvfǯk5SDFPO]٥سE,jҫv'RÕYĥ lEex G#8CE~2HU5]\|+ZdySoBǾ0,hLdYUk<%.A@y9oBhqK//ckKly!N& ;q8b͹0YSS?CK `3W$!ZqPa/-~Eyn$7=MIKiw*Ԑ NLɲUװ|[|O7h]˨':d"5"דBh&ƒQ!a7ʢe=bb>AG.HHkO9(Sq:DurSJ@q ^2ZE4o<8w3#eʼx* {?ݱ8^_o&E6 H_!u> D!~=bޑ_t5#8n'y>qT8/|u5ܱ"8@cVVQBGrMñQyKR;Y mif0/jM!FË+9րjl=TX)J},|OAti>ӽZY8ϼqܿ[*4"08|B3aH]蝭Ha[_wU[ҕVaJY.`˲kJĜ\4nĶm~3Nl# )N$/G5!'ZI " o\p"A֎} 34#1^rBXlӦn?\} 4 LQf`{8i4'[)NM+625y.ثaV=[lT Cɒ mX fpEql]:&1)be -m~闁lެdhNbR@&)#(buiSPZ( vlȈA,̕P ~σ{䬿5uu̔-^J3p"QZ+?ŽI6B'qw>ƺ–jsɋ,܉ǎlh|¿7t Sb|SZ IBڢI` "[>T7_"$ C1DTxPV^%PB'Ɇ~^Ӗ!l 2%AgSSkNvT,Z fP:.\[PiZ)m|}CȑJyۣ¡u-҇64W]A?J.^R})g@wpT[_X~}ñ?Ґ`]`9<(y kU@[ }mȇ-Z{"')!K};WtaQ&?Lh"1ׅjCV0Ha*n a7nџIҴmI{: &^IPo{.}J-Թ~JOZYᖰ]ιGAVT3RDi׽Hl;΀'ñr_g t$;"t-bgZ0oax|70 ѮPD}hK7tyv;8I'*Tp?[<>?/K XΫ*ʕxB LDyh~ ۀ1G[]ReMDiTgt-$jBڷ]lΚj] 'q #7R /H׸ +X/7J:`"[<=BF{<׽dZ3_Eu=bf(r o ;O({:_ e)@1xp9{aЮ3zM2zC ;y"򋙡&d"G{/t- ]79"UK%纈j>m-oi.ח pm Giiooy7d F!0г}DB[priuA ߳Lje "GH'`D5\X{ZrN RU&!vكrԶ.+K-f}Ue;~%^;3P/")ch}`nm 5 ݿCZ#fޯv Cjѩ-h&-=+D 3s45K=eP؆8{FApƸJ2=ڭ\*2.6.vyJQϾ 9yltWBfG)IKN `Kt@ ,hN 6t^WHےhl5BD0_ḇb?%Wrz%m3wj@vV GzhT"bIbG&CZ5ձ@KY4_C'j02:.9:\`m4NA ]w njzLblcbEFt~xGW̒()_wQ{k#)q\EN},22uP:vY.2[[2\&ɽ.fX7T^ a.Dthh?l,(%7ZY.A97Cwܳ_o!$?pRʓ4\d~AV >=*<`12c$0._yشkpq9 ^dn`^w\m8@S?LDq`M8=A S פ=s:ONOo݅s|UX1W?i}t'4`xmfZ?*2aP,aTWhtBG^rzI)8*ߌHB#:+P9闖^5Aꐠ0;c1raBW>P hb @jI. [<;~v nGk~hHo%z Ur"_ :YbyI՚nG1`H ShkY'"5߼!?~cYp%V{(ϒ ,Gf?~}<.4@^8&b:PMϳAaTq Ԑ@mrbE/qKhR)t)C6P1:hӗ%.5eNHr[2ƛ^a:R\,0+b*Hy- dc$0e2K\B6r'2Z ~bSuY/$_p(@m2sBQ!]}/q۱ 2w֛i *WOQ0H{,pxJ 'WfeW|!>K ݸw_YWn XW)~&:P7^a=laޒTbJZ.z^/GYeit Rz[*/`=w smCg&&Iad,>̚K״3dWFkϬt 4ݘ6J `}5ᧀ ?]p ǡ..TO`I_z7O?d(Q̆~J' G[>$ICL⥴OlP% `VWbߩfz"/#.Fw8Ay Ω*w@P܁յ,QƽuN+yjK%+8N-~2ʠGnCL+W u̙L tA9( {L=;d> T7Y9B~z҄S[<4!HMIzZ/J|xh!!doU^osfԑCLe$2RQ,Ns^?ߧ;~j\ =ƭFtqr7wQul3gLu>(8p:X tR41&i˴dn(J-vSy8ʣ;ErxWۗ{DOv|}!I r{^yqLbHXrb9 Gx"73Nαa B 0*Z9$k0n '<\VҘbZJOO`_.X@rm_G̹dSB YfpV W ޕ`55ϡQ,c8/}ϷCZftho;>@,$ޓG#e.襈sxO-V}J^²xQEsfy_4Oߒ4؋. E)q3ϵz~wx_v.7DQmM*_6(VHd_:}g\ue宵@_,ȣٺg3f̐aw,p3`>}TT_.P;x!182x9w( 67Bn/j> vSD"}r)HO $ f8Q'sID싖*"g/'Fm8h(a(g6WՉ^ ²O#azkIakߔAg6޼FO{7jMޖ?,l觿 kwC^!KzL/$[<Y`R$0֙}[Aʐ!m9szrD13UMp݊:y?hA.ocD19ŕ\$+bÊ)kBU(\\;|зRC-DoJ[ꋎ?>&Ǭrx{R% s\y/B637i|{'%'`;fXVe-2B9ypk;ʽ@߰G|SRL?G^#uFe'`|+uکrC f& [ i8 1 D+=&kU/;u0o0o+$}UV_f軵Z un w+F@<@773eVK"|c롵v97{q")XK,/) ,0"CjE0x!NfO,ЀE+x>_a ~]Co>Yh!>Ӗ4#㣐K?y>Ѭ} /tXƒޔcjC 8FժH|-jj}W8E:&GgD-\obG\55KQ$T \p-cN Z;HSE窀q/$\m>}ypr&KCCoDP>V'yS5t3'hJ!2#$oS҆zrG˒H\Uȍ,E B5տAgt f~ D8ѳrkvbV{*B=a"4T,Pٰjl'Pm3D^dsiyI;[]{%!s9W,O"J{@fJyϥá].,G2V~8LMz;q/` rJ-F|#2B潝6tn?l?*4T~z* „=,Ǩ |3֏;9gfb{w_;`Q!i!qg]lӧ+!%TMJz_+jB1 ⢃hkyNnɜww n|X>zʈD}ƚ@1k|zXJZ|f:^0$QjMUjL\ X_H:;6 I@Ok`6s@%enb3<Œuv;A>VʳʍLB!4@ܜ0v.I)ٺa?gI2rh]9]vgy|z0 |$aQ'J%Ms?T\kGt jbJ/s 06Q4^@-1d+m)`P=$')Jɕ@9:/ia `S\,ÉUU(+ߋq[".5pͽ*n.nZq,v(6A̕nr:uEy_YREAR-Te ;|r<$wr=k@ chR7v`zqa1ɜȜNa\C-B z"zx&[{zOD="tTtSNx`׉a. XY 6u,Yܷ_%xgGrF7ԘR$[ROlƨ`5|FcɭtJth W})yNj͌/~/iuZIz^&0ekiNĨ|u!\2cb h8meTB01Vw%І<.=Q/t熂"5x؎ pjN_L$V Y2_t9 d l2GUchm6GutniyܨGۢNŭ{uZs38oa9Ay鯒'IRǡ\3>kfH6@wKLnpaAۦ/ `x>&6d# 쳗AJ@Ӱ!\Yy| տGe g^S;Y p'8|S0^i6g^}8×[Y lX,1z;<8Vk)0_a$$~} >#G.m1Z? Cy4QR#̤ug(:wɧ~p&Gbts]f)BdjLڮXi-&n3 @`Z5L͔wi\׀~?J\=jC3U%\,Uߛ#|5ʂ'fG:!{xJ. <@/@u~+}(NޛIR2mpzPHm"5p )R|)]+K U咅&Y3 DMvJNbdzWmc%mlJ.,:+;ӞW$=y;jeGT*mCB} \6Gjo֙]-V !]ʜᅡlfL9idt3lV (va_wf$Xf/wp. 1QC'Cɸӓj- =? IR/'$wK9Y(E["S:Ì(gbCPUm@|»H|\woP0jQaX佥\5,AUWd'kWCPî}#UJ?~ #uUC6{vp(}=|R9OnؒA*߮|\޳Z5|Fzd{sj.&;&dh`-%30Ɂ;6 #=;MFA#G !!YL*Q.WES{Ia _ݢb OK<9䇡z D^e+-SkINW0bgԟ yA+QT7%xLn[(3P2gEc$w0t?oֹp ~fS889e땿y_'ulI.M{ꏔ"6a2zu^&ъi͠=+!޹{9X6F;ʌ~g^ Eò!C߲cgԷ !vrȦ1 pMT;>V`2ֹ`~*_?vٜekW?@['v,;{YhL3㲁7);) 7Mx6gUˤ] 83c&+,]bVehFslz>Һװ0onx.)Fk3]D4sa@V { d-ߘ"yI'2AQDATk% ^r6wpMR0 '4C랍n0#*]9;6k OFBQ:j2:YR ~ܰ &1GBj_H q@vkwg2_tC6'<:%h*&cIk|UePDKhh6e}?A>/'wcA@k3-'pfٵx"66K[N.p.b*[N~3`حZr.m/B?ƯXл?Kgp496IA-(Zb5-ajgj!4j#E2kLNw٩<D?:_w=Xe%۩:< ^FĒ6ƺgT }n{(4[~ q ,?`å_Ҝ10er>Jz!,GOE":x)48su!f 7b) ۔DKssNzpAuJX0ſ2Y AUk_itDP^pg2۟bؐ`$~ÐtTws<0]qS+JPx8ye$wNRY2W!dM@3S$:\` i:-$ϫvZfh K,P>Mpd.s#%UYT\8 <$7B+&HnhħX޶|hzN0e wWB7QBFU;vS<7ZEu*FVli552+5ڪ>SMYL;tU/Dd}% / Sr; E2<;&tX*}%!: ,HOÕx@vțk5@&X/CJMe^,K ؈d/?t%crHu_ yJT,ޯ7c *+GfMr;CbH∔0?*|ȬkOy2Sep=HV1v%^-Tc>E=u#K4eĔn7xcUdLe}<RtOX.Iu 6Ujtwy9r-=}RLε!l;tZx}/@51ȧ ?y.ԭx;(E.xRnH=?q` y<3jb^vO#x&r&Ui՚@|N`e.:6 ] Q dxj:1vwApQk7˴8r!@EUvk<#և"C/)#RUulPqdV/ceo7IZ=jKI~EQTkfeۢ笽('m QrVs@ .,`K~u'U mD6m/T㱉=0ax<`w:m."X5BWF@ލkE3>0*W@7J/%vVߐ-~zw-JKiJ:z/E1PRomZvCl3,^ʜh=$(?j8V40[:^>*YP@/.nu>Sˆeǵ<9!l-P,&wd'afί|;#ODEw~ ɓ.bgɽ"1UN>n|ԋdvpw B1$;@p۰r[p"*#|# , g܊nfr%z6,QAZ,UiR?NuvR3_ \u"! $jg$5Gt1ϳwؚ[5o")O|TeQW)7**-nCH ݝA0#=jF"GڐH?k;ϫRH'Ow"&x{(Nk;21dsnJuBZx,wA,|t ~!h B HbcIHܴpU uaf0<!UPHmڣ}XU7_n]#Kc%@פ%A$ڹp:hN/W%u4Ol;B_]TI6;Oum GN 7/dLނ|bCAG :h px]NBr/%<(\#*XTDݹV#tqc\A`zPZO4F Q!~e"iJO\x]Ƿ0j'T$\Ѹ5e0y[)dQ7j+EI 7Hef!Olp|ؔustm.ŻO9bXJ%Yɘ.:P.hxXnTqɀSr:iVT'K䭠bRxP+*{e972=؍hnfp|@aV*'-Tyύ*͘r/u=74i#xDH1ӊG粺{p},$C^3X,+ߠ΍ShM~&Qj2>dHH71stvbr*!J'抄Y_$T-f ÛՠN +4Z߁^$X%,wVw440I'ѢgQxcټ>RIrbUE5+?1 wsP̼)^NMgt߯|竗ih9*z%-a JkGB`=.qB,-X>E~FEėȷ)<l+/Ӕ VMOÐ J ?dr0Ef묘M0ƩK{;&~xӑ5@9UHp)D}J c^]#5ȗl.(FC,`QvsC-W0N[_DA2+o^Z_3.b.xԒ Ħ- :E>_1b٧ahz% _6e ۾tZh]3Vb\|>;$_vWANe}6e3j4i|ĸ;px;LgȖIkg-G޺%z+ y8>I` H 2{HJ ieyn!C-%s8rxVyS٩p\Ȯfb-ŔuVķkkzUBZIM69{$7hf*14#I/ɅhO~[1ҠTdz%:)06JGԜKТV}w^dҜ|i8O | FћR@6>lY6_ꩮx6%l )wӰ֤[ #A&hrpA"VIQ߰;%EfnRܚ"r c%-JĤ\?飦yuꜵΛ0Hfm#LEs7.Q@@DJއKx`F7nxL_]\6$qe%1i}NNTl!Dct#LmR'a&'ƘCbq)p3@{CW~PZh \Mzö[R+yi8<=-#9%182{EWǵ0G)m=_N(WKRŃ1ӟb.dr҅^`UcڛUWTkJrlX ﶖ”]aƅuWk{݈{%1ߕAG\Lw2I̒QH  9ոUܜBЃ6{0G1sUrw!UUGHVT<AʷQuv/ޗySm{A3GVQZ^maL2|Fŀ=3p-h1/죤1aT%pX}"@[g{DnYFR5K6le[԰N؟%:2_Ip!F s{)^>T8FilOw !8 T cŀ j W~߅ZV`aJ; l?^eA2Yn[U[P)%~ &`{J@9 `w >g+W aAϞwY,6oO<0̸9dRr2w9Vh\ *nW2 k1H3fyZW1uLD.1b=VQ.LL*6|&q=ER> sR Ҋ*T(1>&6?c9 |ſ0:- Zɡ} TDmՍ:HM]R⦳nͤ  䐷+tvP O0Yz(]Z ։Fz -Y]y{K p$'="uס~m(<FGMi-tG \ʕ Oݦ>n'4(?2+R}|@iWg$3"`Ei3bT}v97e?j]]4&'l+˵,`b" 9ݒA. ]Ow.p% )upC-j[J#vKiM"@RS*77q-D6tVLJP IzO6 d;F⿐;v:?tw 0Fꗺ5Rhol:yO"V.&JhPa[TGL#'wI l+Iԙ/i%Mp<㛪uJu{4(-ӷ5ahitì q 7xOg;4KD/Q+)KJ.^\nz\1a}Q0(.E3F|pOHd])RiuG^M˫%b5o'`RDifwpH,LZ6Ă M n?ALΜ.uwLD A /?Qu3.~&C Qn)?S_>od6&~j-E03^X7ZDvue1q4cHUF^ 0׫Ka*ͽCzk8ry`";kdpŐ[9!Gz1 2CEUiܱlFI<_œU/M $ECC{>.(L#U-,| %'vU1u +e~,7 dudkhA/C~6tf A4gqgVV۔="]vhlm\ Tq'O{O&]0f{ܒ. !|; dN{`s{ yG3whU BZ™oYg?qہ%*YȫVqϟ 9gB}|6 ӖId6K#N@dvUpfN^)ʖWi`8̠7 yedLj*D#.XZ1XiCA:P1Z!b_27;NӏSsq\v"LTQR (՝cS gƾvuHkw,\X~`[6c="7ĩ?ФxMQu̓]=؃(3OօP|O:qF2{b _VBKG}eV*kK(%#Xy=n˳8[Z>% W!tN=\7ۃDZG3ZXgWxgnw\6z>T[6&4QE^?ڜIPu {;S<(`+ب3jTDmPʸx3Iܝ!Y ^wmnV}G"ْIqd9i0^qSؗ{gFN-A_0&@I5:JXn 9v2S{O%y)Pn~'.$oK o=l n g{-Tv:Dd5CcB?5蘬mm֯<5Rsf"2-jpn!.mL E^uUo0nl=U'^ >[HȮRi-txR:΁8LP8iCz K0lo``u8"Ά!Lbkt_渒ɉx/wP$t>l[68o$jO#w)(\3&i/L8uy6d|ٔįGLnSPwBSMT'X%G2 $#| `n#e`FE",2 /e& (Տ7o;V-.횄^MT6>zwTR2G g[,9H7˝Ȭw$OFR1d8=Lso^ij>taV6ZIijJЗL67e*eg_4IBEp<v[u`΢C35d$f]|BZ!y,@ U:%խ3xYnJyI-1m"&ܛ\y y v+{c&&X'j@b,l*YhZtܧ*i됝+| pϞr )nUBc_olxdrz qd=؀忿y"\LhiX>aؚ3mYta a%ݮJΨ1Tx`1W zX"1TҿK@^]a^a̺`~]z5I ,7,h 2S4$s 5 63 J^og:+ӊ@␗œ^ҧ%{wÜ^NLGZ~~4@sN\Gan86/HNzLS H| i5,K ICsEfMI(%UZ DpdZhI.X8kD84S()=g%k{snz{X2Dut?ֈnB^R[3R0uI囅e:mlef4ªaϞΕ,e1އkSs(B)͹v-Fq :&P+,3spqل9YH>5k=}&<5[,BnzY*,LK&͎ൠhMDl\ɷ\pދ$ JzQ3ٳGpB^иǩڏMrz|: ^&*<&bmF+?fw w:hrۘ"qObܺ.=;H:qNO9}?jL;hϗH5`Ǹ1]!5p}k(#15' .'hBtPn#<83'Q7R.4^'a6d۷ǧ`(S裁[x皓݁0dOFp]L1R(ٻd$>-{J%p̀H݌!jg89FN5\ϱKEeƼVRj6]+-2&p"𙅐F8[ {P%`0"rx`v]eu[>ZKZc $-;+닚I0lۯƦLےiMD. q;`S3E#xݦ ma!Fnz)8u\ۓmllL Mx(IUbZD_epNr2"w*:"tE:^1xΛ ?_>SSfyHF{ \QLdv:Sܷ&~mC?5ľq]BRC|c,ϋIߘn;AvP?LC$.#f%<&4ѹEv(ial*,$wcRq2gh >%[9&skP-`SQ\ cPtZn ph6ޘ\VcَZYˬ+&]#{G0͕BXWoK7|U\\3z^S&H#]ۥƫU=qn 3'iOu0$GC];B40Jrܴ jίXf:o QqtA6#H{7EHX@O^E2 7Zp٣^]Z5}$,C( xQ&Wk?nÎOۑv9TD_DGl2Tޱ̓ee!MWҞ¬G"mF4_umcwE \"NCɌT #.9WE9p̘ NqtT-ãN^.aM&}BV' U:gd\TY*ye[6TO{ޟB7Ŏ.L,P"+_S }[C'ȅҘsܚ ca>cã2Yݽ%9C~Xf`h g' `o ħęl,PMnQr94b7_cIh˜zBb^26wUq}V[ZЎWxսK^.kSyߐj4ę+O!B?BB h v%v| eJ. ft!S#ޞfiƎ;˻R#P2׫+.w ֗L=N%p4W}5^PW1ixx?z[^E=~ÓeVz^ \Ļ])t5B5P7#=]h-Ke֧8t4‹nO.KWy(F $W02 o]Hio. $D}6c*n **%726+tҍtMEneh$ybzwu, x'cEzv춽e&^,usVYb'B(4'B\ͦgP@;Sx(1ɾ=)[RCD@g^{ sNroIˆrx|%H fE`Vd!G<0ˡ>yk΍p]v*TX|)gp(.๓qqW JC9ظenH؛m*'t޼GLS%>QjO4[ҖF~Md~y "fG_G*WB8ήF,!8!(6 qYd"0\X;Zpq!xP&qj|#T48IE}(ЧdEǝEw?Y$ ߕԖi#@0/LF;6rK!߰wS aI:{c+vf]Рu å ].Kh~\u'{woVqF 14\?e~ߎxraKaLS"͠][Ic2"h0Nrv qEwJ]zu4dlp&{JBS0Pfz8t3{.>'{j5@n0 oR:tP~K*UvZP`|TcT3Q RU7WD5n4H5.'#o&W,Mȉr;4v@3hf-䧭qlDBf\X_&$6}:7KA v6t y7=M1 =՛HNqF>jcb1@z!6#7P{Hn80<$RJ#Nܬ-ω~:xqkV~TʀdLU\1I4MUЪH/Ljg|A.yF~BFB%f3CPC7eղ k-1{ c%:VՉ/c͸\6-t)/yH p.+ r+aȸ9OUqeɍK6[_<44JBjkx&`c'\k.bAJM/]AfLUdZD{÷!փ^4s% -@bu&cki`|H{~7p4Jt͸:~g0o`D 9`S {]5"DU#SNBg)Uf!}ɼDZ&$8+8x%r>[O"kUTQ xTnB?h3$2 -R:v ȭ>,*?'Xn8ki /WtZˆ@E>C+-Q>ړՍ`|78`j= &1^3W'U9l PU.)-Zq iP =#1,Vk%/+W gsd.݆dM JU.+ |U_6]'vpG t9so/R7wZn2:J]9`P膭t_|>._tb]$8/Zl?C'A%x#lŠX/H'E]Dlsa5有-I*%G>VrO:Bi\Kh׽R6TCc:B$%JIitǼEƛ6x2);d4qp:>=0!ovba2hLܚs J6Ac%* XyCgN巿-ӽXxuѝb7M77I~ 03-33џX9_/镱^dNBn#@YNʹ)UBȜHz7*{5>oq1tp `/ _[ń[?Oxj$_GUQ Ѵl).uTeA?bRbi\?L4r|eV%b`UY={ dRXMqz6ŃDke:3mMک &7j;4XlfB Bzz )sK%~*{l:L8hScźFn ; q`gKZ7o$M$*\j\d k[daAC]+3j -!#zYQ=}SU[Xh4|OH*E?ֲ 3p.ѣ~:eIfzA  O*$s=Ԥ@R4ȣ}WF]K/X -\,ATGHc7=qzO|i_u0*ȏn!Q";wOˍ<  ?*@KX7% +]3Td `d\nY31H^vfA@o+h6 ! gAM0Ua(4?DVXR)phު#3;p!_Oh?K8_~I^y 5 Gq}aVqkM)SqUU/0ֈv;xETȢ %l?vtc-Y< 9I-$l 4LߥV&I9fX/'Qoi\[ hs>N} K&kj=M!lG&2-Tf-D?XcӢtLɿ}P[[j:Ow(8ݖ A\|Ǜ6[Ww#1k҇?ϋM+t%f]2Qض²['SON&JϸtcjY)5D2RnkR53{)62+AP*fłBBgV/CcY[K@RE塍Q_7]fGz ;9ZvvhNuRX`%#81|os{DyqdWW=Vdںщ/:\JǏqjuZErf%[wzM#!yXîXrv @= 1)aut>{S)\s/dQ[cMnL|CRybs t'sa3"^La[B(JM5=iRґ {Th2n祿^kPBC8E41GrK<xG :=↝ 1{wD@3Lo{i7H{4/lP%{Z)Ueb/tkz7.T` [4IS52l%Y ~0 |`5w y%:uGSG;4-p^ +='ylZ % )r.YqnWGzR b @XMDv~a9xo4D"<쀟^d\RW^2{n5UZejd&Ű\72C㌧K-;x5~MT:`4붉H s;~DU6,UE ʦ7o6okx U<`%TK XTL vI$empmQ!tƺ'B,vA~|no,^HQ-F(Bgq33,DG tu SCnR0uasCa.E +;&bL_|Yph=l1LHj= td%1XDy^U|-]Spw|<6H$+cFq Yα.? C]SF S*G)X}ԐWlkMbh*|?o= 9xns(NM\8JBȠm?eߖ*gO  ^ EGi]=;ɹ3[!HEn &ڠ\.v:&>'%蠏l`֨8dY7"0m< 1yjگ4lygw"ڨ`hq" *Qz4߇uAm'tY,I6O( ,Z l w͝b\)ΖxNVFmrIz"Ć2sS,{g 8LsIc , l/LMM𚹘L~z']MThoݓWvӅQ _8d?JHﱦٶ{++R ٣6sBkZ1?@[^ /(Uݷ]5 U}؅O3|U٧ Q 2a]k/{xT!(^?ˬbێ|u.5f9u'y6~F 51xaC#IE?ZR2qe] apR 46 [Hۓ ryV@n2MGr0sv.5CNJ| Qs'k7x[-˓&x(@]r9zgSvq}1v YAlmtbVm}_&>NO64X^a-(+#t̪2ic@4GQElղ-vL7;3rq_s0l+msgAQdcP6v` ߻m5\vRM_o|=ooթ5"֜b»yϕ4HeIrB_#&*{r+ÆEoV2ߊnʭ.1v ;!jc}SQs4 sGw,8G2l3 f܇gt6vz]Au&bVzh=k#m-a釞n!7Dž^X>N4\*,w\IY>tJKAF@|ţ>Fpjf*do.J6Xe!4blKŮɩ_>ך&6 9d8THӯvҞ$^t\]keau7@1[e,RUZBu0t(qI*fBX0@:C\d| {}=ڜx#G6y|sb6C*%=a?0HU|"=#6ԔMBJTxH -+!sqfߧ"8cR׌A;#ka=Z>l'"Oq|eI2#~Br irDsɆY(ULK*`1h+Ǐue{ g%,I5BgH麉!ix8 Oțݍ)yr^kdҳNe"IB3$- NÎ)TW9g\/z8{`8d:8 RFwfҰE(S˾S͗z7(PSA}^`nMu(>ʎ!0cPȝB:Wz)|z;G vn&A=aE[Hޚ/k8 (lMk9oo*{#RjY*h K nڌ|+\Z-nxd]Uނ:Y6>b.8 "0~W-Hb C|TMnKDA2S|:Gdrㄿ<!kCݶQYpK%(t(?rMrA[hA0j!h%)/`ce6$Zʊ@*6 I9Օ c'61!d-FP'W4f+/oXyD\t(U%FH>Iw͐? /AmH>{)~ 2[p[ !] .L x+`6r dUkӂ+@s3Qx=n4:RɰUo 3xEdC(mcG6}ˤ=cr I/[e@`b=2c~8 =~_)RAZw9rT;P-nC nVVFaC>6mI ce&t<|>Ԋ9Lm0(at8 tj柑a}$ od QqD'3y݋6ToLN栩p}S O'݄^ĕgkl[⸏C*OQ%/-5XF(o9kZ>,E7mJ5M)oTMwxχq[%Q d$ 3Tb0h'P-o9J_(Ջǫp?%,J>K{m>B=G_|dH4"ڹwV3 rj68[b7љOgE>tUͯ`ْ)w+FĮ\ ߜ`;9J:ثY<2V0 .8sPw 7 <Ėw۱;^F>7gd>0㞤hIVW/2£ڢPWC0>Olr ݁:e 3 J19|-p'S5!-\LU^bZС:F8!;/y2,fS5~N5(HyV-sx-.emW *v$ޑRDQUے9<$H(:ܗL, p@L+y?1UZw+eR"@RƷa7o|T>N)hZ̃)rgZ;J(6 0Q7QKs@Юy&)mnV%jq5ZE/-L*@W -PyW8̾$ D+ԓz,_eG}=G\uC!,BLxa6bSDh#܍levNH_]DfPֽZÁ}0؈' fyG(ˇ%]OW )]R '璋/o9J 7ZG݅œr:AV;GHVe}qAn*ZP9ty3s>Owy {1/OoD?Ƒ*{:]!YKShrW'_6s17.]Y1&zJtP Sd!i?e YU_%D&>;5&NQG-8DC^gΓ'<$d+_L+6oNM8A|'w^ߔG~q,-Dύ[}kkV+2iӁqY_TOM^nKHRG<_ *U9ʒٖs$BwX+Bǒ7&| k#61+*E*$J܇`v\ኙl,dߠ3?a;xO_r.9zڝvh݂У:` l A{5kO['z^3p"vIdt>6V!6bM 6u,Rb8]x 䡪0,z7gitW %.=I៲%i{#ިP6m-9Ty rKǚ6y#;*ˬkl#{"^^#'ʛk;!Br]B6I*m;"qvj $d'P<0`!R/%!92G\%F[]xxy6 gk[8xW.Ne ڷ -!8ϹHR UCg/ec3~e >:73[c (Q9 C=AQlY8nB ,֜i)䄷ȓ8j--ez+wg/,ϭ;HfKNu쇉CmdW.8..4변~B"^@WZ:+j ~̙z;d)'+G#jD_Nv+ud57 [2jZ*UIܓ/6@U鼒]'[ h/RS-?"y #4ٱM<ɗV)Rvꅖl-9)7qȘ֟&ei#,Qkvh[MɫXi HunT_J&2bUe6"pR1x F4ҞAS'pO 5䖚i5%loFnԞZ6#l X|E@l 1:bt[O?eN3<і%CUm͔Ro]~T{% >,e1AtZ&ڤQMa@4w>htl6O&[ͩM"=Y%K { 65-吘d_"c[datv I|ĩ^Ozyp%_|]GFge9:b0&]4#a!8z1t:vdƽ"r,|n3S.zJ p:ȷǐ>/IкYGvڄU9Aڊ1L^pt|eg):uC3Y gWH1. M3%7gĞcM/j? D0I1ݍiLu$/J.=s8}BIn(g4g}T+!z}vh(/U %oU?ɒnag'p p.7t ",G5]w]S8$L˞6Re%[UPt|5Uz+wKD+`G\C8 Usԍ 4c=JT}(jQB<jֆ(WO9lԗ-j|A UL* }B2.i-mdڜ56{ϞK XRjԌ^kLQ΂?Gm8M}C3:|Z&0YvV+T{ȃd^s %lJ?;aw2w/`!u44h@gPWC5LϲrNdB}lMK/3g̀l]w;/%tQS:83ĬQnnSd[JhlRȄ)A>9c4 1],&bO=uK0r%̹8`d<{ +d+UxHkC"fjE}'v+YToL]/W P,:'Bo\ ~' PI{W@N#Fx42ByZ>yW|ݼ8X6ӽ.@ MH^cl<{z֗PBz;r"20žZs!%h&Ҍi**N2XPssLOYK I24d<&Noys#<r*~~WkOt7:'z{Q|qjj'W ' sxCNݝN9G\`[ I?搄NFGgW"a(\j$J@ћqa4~81^dGt==|Sxxh/Cϯ3t FniU evѫFmo+B-WaH> .V=~OCcGv>}hy@ˣjӰ߻=¸)ce1Z[o]>Bޔ X#5@Ԍ! 2h,L[7r|Z<vӫ[%y-ha3D_{ @{8mn <47lVQ O[ijmhSDX,/9*; }k'ïrܓN-j  #yHz=q,T Q'㟏 hUUl]a_`pm(1l&BQ$jf;DBTXdQ-e+Wt𱯭*Ms/+ݩnoإ~/i ~3RD3ajN?~7S-Յ!lS$p1u`)~t{qI'LYZ &AG +>Mrp%N!b}BhL˹8͒/Zad_E4UTyFueOyHTү3GE:Ty$Otb,HsV}%"}jٲ|tGf955Q*}ݗy?k8lcLHeۉ# @+>wuD˞,ߖ ~a fEnT]NTYMwmDx}Rۋz{ z0ĘlTļTj6H& *`BL+?Y` cʳ"ڈH"ojSy?/'?)+:]:oN?QFNW NFԓg<8ɩ~ eY~.Jg9"+zW?qҤ5zK3a9Rp-rBg\syF iCبA&~B!f*D.o5.l:Yxh }f` :#8:Ējp]d1Cx6^ӏZ#&] ͔}(+TD?Lx焝5>[`fM6{8%ۡ [o5#dwp,53kM̎n(c>~$ w=J A]~}4\T5w6Ƙ]D eaq"]pτ 6+4~acu$]fO'~&C/)(vPͤV>MXźWQߔ&@[ޤ^XRzo=quǧ3KgiY)׋H < j^ڛg2r WVSEQO]g""EW" r0^C1XA{muqb.[Bkb"H[_:)a{v*9_rAGfDN9/IroAy/c쌭?$׵y; V 'cN3aG" \Hַr%al^dWqT_ MɇِI#*q9Z'!`3D}eLVEKA~$Qc<'"mgX@x,:`ٮ}cȃjʋO*)QDfy@k.&ug8%B2==ަLmG?#co F16(9ݢQ;B$Ru婡Ro[ӖF,aG_+ċN8}Q R@l ,0gzli um~s;3rO Ov Q gHQ o?v%4,Jg-8T=t :V -{'< S4#{&RLO1oAOtFڀ>tNoz2db!UUEjU PnWn9O:$ P"S\)l_Pƽ"})}5܍5effn@ YdvfG:4>3,vPNM]"ku{77NyqnBUDY0ˊ8s˸7d\6&QdOlVh }?"JLmi38FEUs sʮ(g6~l4W 'O~&1 }*;DN3+J^ۄ+$r4ްiDP^$ڳxN'|X%J_6 NqX 8>.,ţq-_̓*#ǩuqH+Y42@m{>SB;lͲMJk`1f>fg 6$fنo0c*N03do&&g%b[h0]P$v<#|Kc]zXg\ܜZ0!nҨ=Pz;.ʏ2?B)iHwưyB5q!:;! *NYu(o_+@þ㨏gOu(0e))E B:N0bHSڮgE2}j #8p*D)\k0}>eOUH3_J~Ur3 :åU~ y@y(ffZlyZm13(052R=6uюIjz']B˶Ϗ)ySGV^tu}h0{=O~"_o02DHS= 1l[|9Fmdս0; ܾ(@7Z%xnTA5ͱEL}1zE&.xx7})ߥW3hN P뽭}-"/讘SxY}/%0H+a~L/1ÕsuSbXTÅ dVeOC 44*S[g05$;}ҭ<dݖю1(_<ˍ" XPqtߙ=n$x޴@,5It"m+9GƱb&jS\5%b!|$L~ɫb1(&4 ?1]+=+~yoi ~ E! kڷn iij47½kx^2:ULh<fBm)W"m$!60)~B0F9>WWmw[ pޛJ"yD=9Qv |bYoxϱ4S=<o~.yǯ$Gk<]>\Bp B "gkv*CNGJXD8Bw q  sG:LZiHY\S"y~YJfWz_ ;_Yw I'\\*L}9Dݥ?j6*a,esχzƉ| P 5.Pur\_ٝ{2[.+[D yu u*^9 I7x7h2H oDeP.| l=!OԞ;_|>+~LY֙kI=9~]N5) =uqAj?qgCŬ fp]iԏl4HR$EM [óY3^~@ڲ_I+܌rXZs|@C+q.aJCjIq7RHf^YlšB#/o"mx00?z< ?3bOjz#I%Q-n3\"F-ž.!zupto %oF{jH Z̃ˉCZm(/,!|h/D]ߓhTCKBes[_i]<4)xpbc: kZO;i<(g޵=u1r~sHMI۷s6g<Ma͝hٸ:$7zSI۔r"R{#Wc˖~\*J~wkA0T`'@5k$Jz`lsNYZ9 `Lzf wKm>>5<@7BXVL9mS8Q#Ie_vyL̺.mŸ7LOX}^R ,M-rkg+/s^ŘޜjbAf,Dž-/:\t:&}aD(z P>`<Ԥ3FvMp'iZ `FJ.' P:^qނTS`Xr>Jc DLg~)Ĉ8b_1.0#XUzSXO1H^c+)4~ڔ`6`$ OvU8NTfD2._Vj1ĶSӄ1ʲEO$mŸls;nެEM S;H)qť #7EOF%^ WRBJ zFcj]ޙ/*68 U#G~ѯQLu:CE,X=J埛Kh޴{@c n*VwT4FF+B^SL6l|DD<'Z$ ϯ7l]>߬ѸV*Z"6K (s.|)Ն2x*xnh W PL [ZФ_Q -6gY89t8' Wg\F*,bC@1)=$lќ6ב)QBU ι']!Kԅx׶&{:'zqdܔtK|-3+UgmsnY˽xd+&} u|8qr{m,muT1:^J3}@K_VW~E=yHXRz %ڵE &#<6` OVdisFWNpv[:3k"Zw(8مF;fiDT2LD v}XMQpGhuVK MJ6N>tAokhotD 13Gh/7Ƣ'݄ &Ek5iFeѿy^|I:,~A WPw:y{e@r^oG3׊lDQENZ"@{Z?HאVJ? uDz! tA-MmҤ~ ^$lh*;A0GKzh ,ċf2WIcUL([R=VtmюE9:K_Mnvk'>><8lk;y6.V#5g)# FDQ LݺŪmgYȸ츲w]al:a%ؿ@tv a<Z_ |%M؋K|8 FUӹ+#Аc KG8#MP ^"ÜMP jQò[7%a]6뢢3 Z0njOC̥gsVE0} /)ɿR-0֞bVss ޫAmnavmppѴk}Xƪq6G%!֥l',ZecS4KOJ nsֶ(Zh7tᕹaT6:>Z-{%ni~k 볍 ,|-8->[!-9þEqhƨլMz\$A^* [f>m+ID(wqtΑ83YtDT>9X$frq|Fic5V8NO纔F}_l!X6SEpdlFwzANpXܧ77m%NRoX̨ڍKV|_M+%iT`^ͣxY 1._PKY{Y4 helgMA7\&,B=1?\ *'p)Gay)]SLsb>DuGMXϫU'd Mt{nlԯ>SwE(E8le Qh.#վ6)XfDtD 3Tt_ۄ8R/, v/HuL38 VD0;-zթSa>)A-xA[m, & VsheA;́4U]͉t]Qc ̑qf 4'ɡ<-X@3vN,'n&v;xThWj ݠ tZ|cu&.2?ɛď' *M CTU< u N$#,%5 I^1оv[HT',M)r#ٻ N<yHXy/ #f.=Uy"Xn . <=yݔ:y[y&w9-Y Pk|uvlp1H j{FҠ(J v5GjP8@5ȅ"4"jVQjʼnR0'ozhCV8%jh>g3"\ "z3%)75ɫ\)i $gȟʼn⽲y=kN˦)G nz2loDS3t')N@Iru]W{=,W(8hlUCq/e2F=UڃDNͥ툙H* > 1*,~,X5Iė;G)APxm|Ca'C@"sMZi ꐺD%ZA^WD1Ӓ\ %#ð/EB`ȩB&Q^ |qO!XzH r-ڢ\ߩ(2Cvԉ)Q"wGbIۚ{&h,g*#4&8 g9=_1;2ftw90+kp)-RH6FHfz`d ҩ3AA;{9Zx%b"4Ing Tf24VS(~Uz{8pF(^/ "ӱ-&jgE.QД-i:@i2tƦd] ]yG]22lЕ]ǩ ߓh׼>\p#^!9[O̳gN"̑B]sZ EpCdFў!g():7\[W3GCV{c'wf&. eɖ 5(tͽ"*ރb3[ȲI ` s E:Jt5Ot8Y#D;@r%等.1i ^zVNt㡇  _.Bɤnk ۙbFYj.SQ0 5~RBֹ58e1$P Er )D89ȸ+ l,6W\a#aIﻁYlw^'z~P^ІpYahfO<|Gj~~ dJ{(I?Glt;( otIFBբ ̾Xm3`:u1gVHU`6^CXVٱjk%z'fӡ-?ͮ^-&DǪ)DLj>Ӡ XQY# rG)c1<[xN)zMYǴe,UY0dQNjHpfh#R*0AO)_cVNaѽ7dQӒ-8M=E#a{ '~lCGyBEl1W} t䬶 oKP4]3u/F`Tnim[yF#R{xKk8vx2QBhnweF)Eƒ4LJ>VP#lm[KlD=G?90[ޘ0D|9QHDWL˧v?z#E^~ۉY\:NsETKmaPd# Q2xo`loUĠ!˧+dcC183MOHIؿh !?jr#bC*eF5e˚Dŧ?"kb L+8&=JM&l6Da͚lJ">Q,.qFh&;Ɲ2z}FF`揼N|!mS}Ȗ_ݞ: TjƑe0 1W,<}6z+?gpHZdY?]  'ZA_cʤJw ib &lZ })AП*-jb:ag8 /E8?U$G-I[{0R\ZX,SLS> ڐ(I|FE^Øe =e;w<5hDr .|Vi{:¡}לp5OB `x&g0}a_> ,x' H'Ei.4}]VR"Xg^ ܶ]c#knOCz\<f(ڡ}{Úl bzKK[[%5G%\ RoT a%+?3qIYxJ:/ _Вү/a5w#3\7ȍs)1̙X!wa"R[{1Ilɴil4*+yE<_5Oۮ%3awF~^ext8L-;bT"ϕ.EB_7sHҍc%зa?`ObnKi j@vew w+hub9p'Ã?ݼ9?~k 0hHxfyzS_JVѨ];g@P/"Hr=W`CMh>M@{Z͇>wr±8y;jN,Kr@L#u,OA npE>fVV&^jcgfmjX o}]GŐ)[e"(!"xhe.w6};8U}SSV:v/6Z./].qNSѷJn3|b^}1;Zpc=m%TyIW z1~F||;:2 k~(iً$,X@d3ツզ-+c V"`#$ ;y.3;GlJEg5Qe7sP td ?`dBމmkcrݰ+1c|tAq,9d:>&"ݩ~5Pz6LB會qT9ӫ]6 rH1o,Ee}-E٪9]A%=Fk}8gS .:Ǜز@l<<@$]U<IEvMj!:a6cؗY_׺,evatVk$ ]-_ i"}CT,+T}s4|!!-q"Pe-$Y xSd7]ԢQtG,M6cK~!wH<a`põY'1넇)῀S3헅a.n#x'0Y5oU{my+bG*>a ?r2"&I9DKS`EAoy 9†3A F:ޢkӶr(J]N\ANLHܩ톞i2 z?_I!񥇸Пݚu/ /9kg0`ysD(ι 7)<]:czE_ӑv9E_6tӚX#BŶœ!{EU߉ PM [^Wjl2ݔS?x~cW+t~#8q7ɇWM Wis)%l->$'~v!]?XKMYxW,We$!CHԪJ6ʲsj'Ɛ$QjI5stDDPftj>6P7 D31pQ]T̂!:"E=*/F.{5`uF!O'Зo:.b>.s;ynq&T[597m,Bl?ֆX2Y/c2F.bu&LҽgwX%La%B")=(3{JQɇlK \ͩyȊN_݇/ui {UYl- #DhUh&RN>7}w{#Y QDZpM Phu d ϼug&b~b+`7,+d)k nw6]+!^2:5<* ԥ~gא&԰Q.\VvoC%ϩO!t'U,Rw RGV;ۀĵ!Jqm9|JX.nVe`}dܴ9SsXU~kZ@3HXB]y|?ҪpgdZQX-%%cv=Ss^wSs>!? TtbH68<9KӎRxOK:i!ef3#Z 1uO 2ׂqbj"DPw|_3P'(Dm},L37hE3s`ޢpoѝ"~}4A}1o ]3xN2c7)U%JIkKO'сfh1±iHh$RCFgpW+sX7r` ?LRKb(M0B%aU`',jI'3֔ך䷫oA>O G1 4NRz a"f紖 Y+SeW'5έdl 5Er3DvʀF>U{2"'yopIϠY[RTw7!b8Dƍl˲͊tZ8#bV/ZAiڢ@M&7aM"J(\rH4{=- thVXu. s S *Kd5 !e-.?:m\0#Rt鳌 ɕQ"#" i ##Da _r^ HC~hq/N'rK"gnﭵh:)IM : Lxh$VX-0><~B 溦5Gvk\b:} \9OøkrmGܺJqnǷi,mHAZGkMj*'eo~_Gt*Ѝ`@v3Za2D;쎳؛A^dR7 ~1! 䈞Q?QUH< Z;q]޴L2\ 5[(_pnCJ,J{uJrWsD4 P>_11 (_ 5s.*8\S|ᐳʮ- ,ŝAǁqe>AHpDڳy<:%Wq~/'\P|t8:AͿk2yV%ՙK nċ&"~ cLOM&82QRN}ti~t $}?}/m<$zKo*Qlۡr=OrNa'flJʼIن([ ^LeVX&W>̴JRFqG>ؼU7x+B*d'ժbRq65GԢpIs&ЛPsAC=lB " 2c2X(q77]YpߗDD߅.s') !=d.b#_2ٿ}ÌJ mEr8T-vk'!W-_;3V^Foۣ:#xqr[d23N f.stn4ghV/sMcr(J8P'ٙz7Y'(nJhIy)>CwCYY֐uzl^GKLI.iKS N[w+1D= [+JX#eXmk3`kX%6 ,@Qׅ) Xa.i<1Al%+Kh7,1>n%rF},1C+>8`ALx%CXI%> NDZVZbJr%6>\4#6oEpp,=&6vuv![:W ]D;X~Xґ6#IaA鴯gߎZ`)F~Aدq~PZ< P/&*.}rt[DR\_&Բvi@3HFr aC 0G=WrI"`u[yB^?`WחQc{ |l0ȏأu;H6 䮜^ DcFM䈝Ԩ 56eΝmmz4ەRp 3c;{e&ˮ\D5Hf[o,:J<@?Ŀm'sjs%+PpWX?Sa׾\QȦ0 /~E/r!~n F $[ l#"(6٢:gqY}V+8 :fW׀lhO'ԁl]c?24qg2 x*5?يT 7Ǵo4x*`%ô^% =*^ ܦHRl-*'u2׈ĩƋجbgLkWkC+";1k ~1 *9'..:$ @! oVӼ>Lh=m~enKw4zn9aܟp\5 >d]t؅|#r4w݅7_=䶲@rHN&Ď n)Kaz )LGvv! I| 5 QL ֻ`EXt&- gNK S-y};AHeׁax=>a`7@Mj鷈A$D1CS.Tk`}z+R$ĹSYi.,&g6{E<(14GjäwěRBBjcUS-؈\gka޺;TtdLpiBwZ@n`; C rIY9\Kg6c5HVspld{ǿ0@W<:h\&:YB]ŕ+FT[F0R-@(%яb&Yatä_T5V5.l8 gqΒx?V ȹ 7>WK{VXc'+}(vR?*<}_,"_6$Cl Ngx8LSE氬\*"lXQuQy$Gs;񈨷/Cp\;mgU5ד^NΆn :1csEI`ik3!-9 }}0ylI4bƢ"1 vt ( OS@k %*_JP;ʹHw, Q1x:865m*Qxe %2y[zf(3qD\H<4Φ t$S:`2x 1j&)LaӰ4@E\If܎Kh]Sdt[ڴ769Yzj6,LP+f%KZu{0^?ȷfd̸BagF7B5th۲0r4Lk&R{Yճ˅ N8zRep)q xߎ.,택n'0 *=٭l}zW*biUcUF\&7vz34ZTL?Mx L+UfQ_DQM8J}BAҰBd,A?p澎'$n䢝 gjjjb?:HP,_  !^4c*};q>xșl(;Wtxו.V͖rV&LxksuNNJb^)X*%z@=z9 ([F"S@u 3ܰA%mL[ s)@s.WfUO${FmZ8\)G/ xo\s6(h0z|t]}#i YqL*>0$[gǖ?tC^8<%zW{aN#qEEF'USk0r\CIs IUӜ^TfÇ9xXF>6aȡmE@5<#%"я➌8yBH@yZΒJ6$ Tm͹m[|Rvlrȉ:9Bmu"s]d2.;S @`p)Jѷyr;PKv)zuͥH+"yzBzEA:XCv4;+&pɼtMՇ#0OT%@1fM&L#_24O]AqUe]gGUҿ4өV&ӷ&?P Z NY*= _=;޺NܑbHbh||-C%C?^Q׺D^#EtL11qŔ ~lNYrC\bbcm-zp"}uh%Z^9zaLkLl/٪1E2'nl W[x ^FtLV]U' _4 Zg{L)KN)R䁲k=^e5 L3S.E! Mr]}<%)leXryDP*V \Pũ 7 ~ck .Ap; ~n5vP8HɶrvDNAcya'd^!kA WL݋ۦ|te-lUnk{(39q8|.6\˅Lt>Zjs75="6G6v)_oW~<}<{&#'@]x0KLlQ[Y{zl\uxt+%XT4>HZF@5ዾP}`#pE8p@'N'wmu%p.$ {.^o9?\T(鍀fakGԤoP#Կ(:tw]=-k}!bd}+s#b %838B>G?""LUGLT0OG溛ZQ o9V`ta\Dޒ~u +J׿Z Q28NT~2H@j<9-ZKf;V$55Mly%|Oevh~w7ݘRûk|C&0nCKX;} C`;z8qwuچIvPp2%htvo""_IqTb DE݉i 6;3\Ӧ=DSٰz5`P:l/67"OJwg_ |G_cV=ؼp&ةu k޿b2;@5B ,j%j-,g^J]hTC{}5+ӃYCr@n3d5F\7 H d+J|6?H֗],(MUn*CugTӔYk5i-UHSҞ<6AA ׶ CPG^'oϻ{HHno(\@I54%I8 {qm`'h0]:eZzI`rT|5!509Zhj|#S"XA6$"XOݜ *IȽb4 :@.b- 6&mB(o.vf}?~PQ-r PQw>:9$((B6a9vHTx"᫓KE^gP5NS+yU=uB.t0OOĉ}*rǒcӜS&Axw94l3`S3dTw $2Haɉ+˂_Mk4}ܫ?"0Z=X{gdO`DHKS_ٜVURfMvB‹Ɔ%hȁ5;4"BlrճdoP=I$9+߭ L5ftZ,LW/tBcB6];@ёu OjAF{d5 ZpZ*h^$L}N ;802vvYD_8uLU7@׋,]7ڇ#Y-`üYb),lC&b= []kxfK{V gK@%kg*OvT60kYC;,086Pͼ±/߯w^7~ZMS3owaXg,]V|bH>?-i|OXggVa!:}ods nul~H MU%{,*1|x~Gs)I wwfW1OE,42Uji~<'lHs8V>5MDE.cfz`p#/2@<+2U!QF 2؅T{~7Pe29٥_iok=<ɫ5!G15Cw~%t5Ād?4S!@0tҥPw&Y"EN o1k%;7Y[B~~鹹^SG ÕGLpXsbq86+̒ %e#3[8+EFK4>A8Rl3p^g˽_j QEG Oۛy?֠Ԙjdy0qgaZO;YуV_ I> Hg2+(1J(30#:ϭOUh^d9LF࢒Y7r!j z~P9WC*3#徆 غa%"c Ћ%$#L)ʓgJA;h;]٨,:Z pPgU#^6Z呹n$o*f0q%:tm/gO1{0:.Jq 48 t{Hzesϥ6+Fҕ}F"Ahb&@%].̰ /ޫnQtUTfhW{.SB)nE8S2@?bt<%ͻi *|\CV  # =N)J dhC U1RCuOAm\ᥴ̦Tqkt 7|A7K\\Umi( @MȬ^d̄a{CzT':کe叆|T`Yė~iy6W'ԍ@R=<4 Oοd*L;I,]E׫JXqTXO}>Ad%"8ywD[LX@cCH6`N];2I-cƘaml"&Լ\ V^ic1ЧDJ|4-Zjx>.ueR\QAF&(=#C9QŞ:z@wQjqmak 9ϧ (yI#>S'T[ iˋmO;.w?/[8'b G*<6V&}KcG V,Tq2U! >5I%oiv|ж_$8 DB JX=7usmN+DځΦޜ$XoTD4"ѯ|/_% ~ !BOgU]=8F=*E&[ ʞifGbcPR<6S %)6481P2Y5\`M7aN^2}l3K}DbZ%W#w\[$;\B,x=Lb A|ۧzV847& Hwfdkxwu'c^6 :?:5<4^t_!EU񪿺t,zmĠS`MtTy/`~A=!ߎXY nmGJNhAױΜN7&~m. 8JD >3#'SL]%q'R/ ՗4x,ܱ.szSXL.@Nǫqa5^Rr)Lr s{4D*4P/=*pq_U$;nεjp(zF&m^\# [A lR(K;10+JKh ɺt}~IX" ,JGlhJ%l,yn^͡d76s#@xl+e^ T3Q.}FAh0 ^^фX(2Zo͂G saJ9Ɔ 쨭n i 0M!5z `}%a.ڕvŊ+f(ɿL̷yK \Lu rY?SҧbH-d3r 5*:ͤr)YHNRCw!mUڂfjEbp[h4=avv޵R*}Y_}NLazϚ9=|]4xB_- =8FQw 簀ae3'ѿx3H2i^ƀ"B "i g)` Tj.Abz//- MBK|`Aتb4r%K' )U+! I*>2S%QϒHRg^[+\ȳ.8Ă4=ww1h,:,c #ԝg(a'n2[1*SR\}-ŭh-;'4rUd25UNwglDt& k,nݽxSSD)2 =[N8cM'tnٓeݚ淽x͵5vu0 6.&lK7pUz^nX:ܓvι2H-Wypș?ƀv$ʅ(:ԄɛM} /UNeYmD:uQT5z F ɺ;l5t2 vdKpn{p3? Qԍ^ P [ 71RȾ.sH($)3%ӊd0(@:a azt?e]N o|0?gU@stO(< BFG0aA\ 9El ּJĘjkNȆіGʍS.rC߀إ%&sJ"u"glA4t~ `ܼyv~9<97H=sߕ D*nQz:Q$PM4M9bmuF=_vN u955kJ[ޛւi1&n1Tet@R.Wm8t 4BKcNa;x'J~}vρX7o6">db([S{c* ߨ%㆘xc,1"ZuVZBJD{Uy.>SCxˁѷݚHS\0K#F_nUD 4P`BEBV<ͨ=p b" PFҊs>ܳ.?wNS(JgxIf3Ul( @%WKx|VӜo9dcnr]fvY1J#hl Np[bI |x^"-5.h =^YrLMYT>eTn_P-c6Uy.W_(8kmuX>ͲyR?CFh)?ÄoDKlW@ZҞesr o*}!}A9f(hs2 "c٣1] ĩ0f,.1 ޸r4r;mv *e21JA{ Ƙ\ugEB9u>a^I0FfWGW ȥp)Rg7dTXxN!ZjWB$@sJadmN[Bּ2}8/}8Cd pCxqςAyX Y[#tѨ|ڕp!pjk&N_y35%)+RI%%Dwh5J|bLbLƭVz4H۝~:"7;/;e8+'m{Bk)o)6௉X  ӫ*T gE+d v~8~%p"Vd_a,ˁ^ݩz^UVkWO0X>dmѤ컶j(s\mChWa9t;ַ`&덑pht]<𽫚W%U+H+^iy@qZc?LyFvLHD99rr+̓'OV15QԌ||RvoW& (N]_ֲbOdƴX\˞!1q 4kaJ޷Sp=5VFlTS!,iyȅ@"0Hk7$6n3|ܪg$貗Z }_QEu>Xs<|iޝF1J4s'ũe^jf+w@ (wCtQ,gf*TOXogb^qZ\diKU{vg@-{r"PAoNރP=zWF'ȲׇѬi`DhZB.W!5ߟS?,nRngN?WYrv L3oCV"9m^syWSc_L{ `8R7S(~3'˭TE.R Û`NH #6]kkS`^\H*T)6s;t*T{k!&QL <Ӄ\4uv#BZ܍{>OU*C#"椹ofK-wbc^oQ+yAK*9ƩƈVusCq#u.F z㣿}"gYNbOiNw0l#u> q^uu'}}KUd1DD$^nî吴2BF<Eg nI,+@aq̭@t,%mAF k.2'IMe<&+ps^!?׼GC9;8, >pC@Avel:!Âc6Xh2 7kt7Uk`6@ Wϐ4ZH\zg5]<^;>G%` ?+*g:A2YӅtyr[{iLyDZŒj0ϭS]=v(Gadu" Hutc{ýN>WOU'QUw`8!2egj tpWO]aYKG`*:jwR~)Q4}ՊlPܧWa$UV1*e σ!Y%W?3U)sv|8CݩؤPN`/g@L /_֑ t]]L-FM*8y.ޤۯ.Ahdgգ-)hOE XޝmYǟR%} PZ0nFmC4X4\7MpM!z[lhEv<}5 ` l3g ڃϋcx:0pMj(oF5z7/v-* boW%.lǐdhPS +Du%Ut߳ZZl_hƽP7t;`>W,g Rֳ05t$Wf,EGxD!,"7m)!c2u_Nа^6f.[h1/{>TE~Dz:GG l0q$s}$uP;pFID#;M_X_Dr[#n/Je6(M'Lo~dM-a{DVR+Ew1Sk-_98>= Ғ1VmHHF\ (p 7vm9VG2KYCj ԼT*=Ģ jŏgu撪Vو-]Лaqlzޛg?Bc {PAh*XY'UOh U/}'R(~23wnUwB ˔m1Y>DZ@hȄWBfmx45]J dp(Aeз/tfk{HӚҭRwߗ>T|!m7>l< D $Ѷg1p^ W\6N~_(e^Z2!HlD\N %W.r솦B(7+ut]Jy;r6Z3TKjBMSkzUMFu'9i\Z)e@Iu('#ӾLBՌ*s?\l4jc|z ^olxo6v;c);|P87;oph%Ux`nei}ėXcI[~␑ 钐iJ) $Y z |w|}n$ W)Pʐ"qk$[{G+:еkI}:VFkՑ'AC BͨYIF" 5ӥ<ioceJEt{r0jll~Jl 2'/+cF/Y܂*ݏ4Lo:.߷$w^m˹Ϣ`N9F)RK2  ( P rDX*у@HQMK711/۠2{<.+ , ]DCs?ڷ/sѶ^]+XZ0 YO$wn݃ nE_!;QӒt$|J/F>#dL>U赠Dyۿ05Ls#d~ogҋQ eWWo2ig>7K O\Iʷ}`_Bvl²!ע9"2BV%FXŭU8ƾ8ҙ+i/ Sc᤿9-bu% h]_B\<ژt? K>$߷ ҧJ2,M󆲌ȔwYcU;v|8ٞtXQmOrBpr])rdt׃)܍BK<*Ъ0]'p@A#[mWq?7+ bpj @4o%'W/eL@Rv7^  auB.cŢ4U_ܛCAA%gfP/ ʳvSntr3tӴn`C}KfEfa,ÎD+;oN3Us$AF1gGyDE#'g|/,EZ4|ٰlyCRG;;u߱Oʙ(k/4= ۴yēeX+VV:771FZn[\6?bDV$NJdmD=XUe sH^%C_v6"X5#@(|oD68arGg:)һs iTKͧFɱCQFΙW&Vyqf?emy E.r;8kɵ z oend*;u xo>Wn9F /."DBݒVZ6ȝ<+F̲3%wX OQs] ~$NJ<!Feː鴘0\`/)yf$l[o+܌yx:yqyviR>B]ts98݂1bU ^  ]}E9|NC9c1ĀҞhZ).tNIOme/PvA9Eq)q0 -m\8.V7\ (+!@vSu+4>eVHInr,j 9CSXgd?y`9fo/5ϸ=éUEXh4$wZ3j(HhZVQz.An)=rQS`>(\bg [\ z{bo =p5Ϙ/'&ikikLJvw׏4 ~v~M9W~0Gm'oJ`85ү 7sCz/ _qOg`ܝͱo/jEx&7\܈%!+a}ݱX +99'"0 X.Xe⫻ե'݄_g[7I  1> ir_1 L)R~L/= RP>neaɣĜ\"&Da#2)j7-)[굙vr]K̴k q 3ʻߺ ]~uԨZ-k@Ӕ7\q*6?tlSHE PՈ#\0R\eykJ lk8A'TTB$X?--ܞ鎤¢7'5p-h\&/A#OW bja3P"O*^e dAEcoz 8ԴbS6cBAŀl) aGe|r|Cuj?ƣznJ?n$Jk-]`n&ՉTA%JBs;ʴ,ivȋ[Ke)a@e*%4q݉S|tpT*9#.R{OfiWP.%UJNkS戦l0NNG&Y #k(RM{[]yqꍬ`018DޅNy⼏)PZ 1g$j1P[T*\¾&bfȱ1fQJ@/AH )`؏ vD1_&1 IQFH1<{1+4dV|'_&dzͻhFtVvxt֛4 Ъ/w?ޗl;l)WSD;sti?(ܙQDNWJOisvs;;ƘOs7y]oOdT%Xg5%~H^k)&Ncy} Y.#v[_rbM2&^~ , 4u CpI ̶d -sd_,Z6T'I$MȬq3 HF7e4xHT0W0YagaӴ EC1͓ʜ>jlTcm5l<&] 5^1D "i󸁴 S&e5Jv`X Ft>KVOI|Ky<]ijp;ѾDZًeѻቷ%]Hgʪ,G,M\yto<~͓eN߰7$J~B!驨|:tv/QV-(_C61F֜Ҋi,>{5S$B':銊'o:5/Zm+FQ'@t&cTlwTͽ.o(կw^ռo'ӠA)xw&' |@P8MQ΄b agm룽ȤJpƝw/%ÍyϝWo|jZ{UG7$ kE$k/HHX\d:k;%/$1~86Ig U'zBۤ@ؚ%5ُ1sY~΅#5nMf0r.}(0pP{" *m3K[Xz?1u?0 Ť8f??&FKц̀5F#ځR v%B Fijp- nb)ѧ2T"Mxi.{#+HBQu>`3 {Ol]4(Ta?Ǭ:LJ'2vb$[ePf)J0v֯4ְÛN+9^>rbc8/vŸ?pI#ʹ7&_(’w/sXp+ӥE*_+M OS=6yroSVho ۃ/G*9vHɜ3>$á^zQvD$'݂7yXL5rsUMg[ll$$NvYd|j;³o)V޲(!S˸BTlԩQ]HV+ה tf3),XZE=#:du|cO: QHymBh_\6h~hz'U(|6Hk_HWH̅ yؖf~QdWB$^E\(Y nw,O)Iуqz6HH8x c `;s80|4\-*RJ34& *С-"ek# yfl7ea$YUF΋2 -!+ԕ >GvZs`g0t\u/U+BDJwoWI.I@;І ~zҥF΄{ώ6 F p 0ʕ- dSՏ0X0#PЖq>2 i0X">2Z~cj#=H?=/\'!hl1EpDhme>sH+O$ OnfQ#Y/mtӑ߲SANcR05>ּ13?4 ޕ ODV94Z~'aMNTyTJh|Pbf7A" PZV:ђ [ bB}<_c+Y('. /" bnX'\,OM1;iC󆫽j>k {NẠe]hM(`ɃEza,"]Y3 F;֞y/*^VtzpQ=gK͙Gcql]̩W֒97PP[;60R@)?lz-qJ} j^VKm}$K䮼馂~z[Bu4]tZr5BpvoitR?NkXJ7h[JP|5jz E.5M]U]ȝ.ꥳ5v+Az|44a$2O׋+'\gx03_ɫo[ Lchf 1ZygHnШ셍~פ%oWN2ODcAB d8E4d"_pBBi3'! \"HA5j5l&3eP*O''Kg&ygcRXB*C_#k&K^'yMfF`qZfe2\oak}CN~7:BBwWd6}+*̪yR2Tg#u hGaŊ`SOsNA,rRVĂ[OQ?ot>dOഽ6&E/ ])O^g2Kjr_ hA`!7._D3?ZU*җ͘03iN}w+tC5\ӗ]~Z| :A\Y*(y Ztet\?ZZKԩ lx5gY]#n4->īv?~>lRP[f@S'vvnd!Ȝ)fp5X]i8 0Y؜P?h\r5IX4s:u!8\26oNNJW)e'6yԖ 2bE2Ӿ<(PD/ElީtNɰ+٠$ӈy!bnMG!PB&wUDr 1eX\ffGL=Qx2ۙ iaL.GCƏ6Ű9ނ>9fYeNz|@'f46 >/8K 'IJ;i3eN艚Oaz}.˜oyYSb"'s5d v֞ȞR*F,k%ɩج \  xgv aF ?abM17ǥ3DӯraR)i%>?y/ǻs j-cj5*@,Inz!m:Ga*)%Fq=YAodt59FA_8FB .VFrJygz4oݒ !LO"m@ xz&fj:^\gl I8!R|f8GE GWxD"2UJ}<ղ+aaoUb)&`/2Ǒ\R*x__`d1p:݂Pcg =v#6\|Kex;.D9 ^&.4cTr?5::^8a!Kh|0xJhOp`Xv;WfuLDg!肉.Q&tw B|iw0ʱۃdB`ϟ+6xTC$iv[UXó4rÝc\.:ip,#;H'=,/bdBޝJh,_T0EvˇjpHD,*Xqjb؃JR$ʴt{J].$}|BxHWF!XWPILg {7}?zo9m]sO?tynF>zsBCU!VH͖ʗGV91sjFsfJAA S+C#XJzMwh2xtfk3(2LvVi;qd1i}\4 cojYʕ1<*MO>7:.M"c!1TFNTzW?=WsB ZN*{?5$s:IC)Y`LYtdp0- `t"]y%s[ cah6R>?Lt2m\;ÇD-gקJݴSGu[`Sצ97Xd*=LݍdG ԋ,in*^Avoy)w cɉ5-<%ٷۺJ4Jie;I.%#Sv:ӵ*gOR+YsUڕZ gBhkջnglm536#/F̆㥩B_Xڲ+ G *.NW߃^+2ԲMC&קGƢéMm, +ƶ`;VB|OwOкI^d>ߴ[sf^L6BG﹄B(Ffkn6u] Fen\lV L-FZƂ)h ?-p!Ral /ڮF3*.Mi~D܂6,Ud%>+TH 'rI'W' HTBHfg2UP*2v!$Uxƪ$EV Hg}^I;rWz"o5Cl(x|̫G橂~3;@F a \w ՎՈKr۶$.o|*RUw\#ql]8V0{:8c3Ko3w&zn 6GyKVORAY`>xjN򽞮}0~! Q! %eU}xԄ~Py]aqm Hd'WFfRWi}BV5Znf; /9_wkķfR8Ik5?9ڙC$[`N>3>z.ZR(msMYTaB]kpc ԠǦaFOO-$vAJnHF@N L{{~3eKM1(C03 4QkkھpM*HOZ'Pۼ`TOΊ5Uc`Qv!+0R!'fڭ8] _Ri aH3G>5ϥ8H[YԊZezW|7{? ²eKs)j>w4#BO[\*swt%X`ٵE'ЭuU#Z,GǦ`{x+SC QIl)"56@Q~z3[ S$쪒 ~b)+-Ld35qp,R }Pņ(U] +c&vB]榓b,_`,D=;I;S.qQQmo6gM3uD5*NN,ZS>~u|Ia~-e$} uzf'tE:D1p?0L)t"ֱ}fcڝqg|52b+!m&FEb$O R]vDfZoˡ:H {[  H0Ny˭ JN+"Dcڧ}[ro6tP)?@[)G|A~'ΖRE@O d ʚLJF@֡L80s[d0A+:SxtJ~=-NxR rd~4 ϟMib8y$"$~m/׬=i7[XkL˘V^wٱ76(PiMY4m$ˮ5P4BLDp~BE_&V2j/F~h2Ec(+Cˢ^1EE:F/Mn6XU0+89("?aBQ ?HchM䮥>z,ܟ|-$['*T550?ͷyQWʐ ˇBw|Q(oT]LjP~ǑF1z~ĀA<"(}XA($&A3qmV0H9"7~n限-( f|EUrgYƑhĆlN+}j5GçQ /R="QIC2Bo* k &K1K͏lʦ! }! Q2_9y˙V@$#yMb]t˜?xioOvm@=kI=js䱓N!0֨."GհtZ'P[JaE] 2q b+chZ;4Qgo;2o|0U`(D?GV₸}YH9 =*s6OڐRcSQg\xCzJDגQ}jDSoWaĪ6a݈܂>PKנ1/rU?Cݹe[V4T6|}J%tX$RB)*Ĵa+g([qՉyv0r:Iq됄7Ħj1Zh3:w" $Z,PXQ};"&P?R㴒Z܁U3cVQ8@k\^MŅQT^D!Aú|' LMo4f$O;a5˿HGT@D'$-!Z0 0ŸH4 {J~շfPos*٩x]P9[0 %&`.>DZT7zE uhrNU| s;Jp"VL7%uHlӕYq,3jsփ\wj\JQ 4Xt ~;5_Xm̏a$nO{G^jpJ;|O,y77YȜ+už`aX~ d%`LH{x-Wgd*7d^, [H/_jMa~܁ZH4$B i/㵶Ri.+N &;WʸEJE Z@B?Dz3פ ߝ<4MX9.a/8rAgY&d[ ]j]v3θ 7JGqFGޓ )o#s1$YYRa Y{h(FAž?9q OȆY޻,co4_o+XL%l$',o0F/ 6Co{Q2M@̺ͽڮX>ѕ(5lMQhָGV>9+?\f0e׳-@ 2B79HqA"jw8ڪY3[jL#}uWGW&?5O)SZEWNP?Iglsf|Y9-< ImEļfs4{oMV!z~u&e#`%JAUsqJD>[PJaSY7{d HhX ɫ̜ Q W8<ʷ327#N[BzCݜkHjln эk6!yU3/c]&"SlD5x}-=ĺ&>8C\${Ł+:05!@+Oq|Jn[XJkG4 zU~w+qLNkdc~یO\dR|稃yM(6D6QWDywnBX#i|agN DSf:%-))|.,dujI`$DZl "Jkظ;nlΩGHN.-x&c-*3T4W%42fOG~Er@>)7@}dK.LbRx-hFm@_P( Y@~l4[1A)ؤ9W,sqLi,8i{pB2ג Ûf[,'FXOBϼx 3>$|XfhEhK=??]O-˟RnIDSˬ $C']kCQB ! :⍃)ã~hPHt!0k!A(5EOW A|܊V!p߿B9E/jb%3Y?#(2S`8k߃X$^[Z#ό=Gy~M#$=yPwr^".%XR;%'*De'}m{o{ 0u endstream endobj 526 0 obj << /Length1 2005 /Length2 14361 /Length3 0 /Length 15571 /Filter /FlateDecode >> stream xڍPJ pw'Hpww]H[pw=@p ].{|սEY )(ub`ad krY((T-1#P-A q9D@igk ? ^)@ :"P,-޷j B6@K#[}G#k RPY8921282hNe#h ` (U@fNF@hx"% P,O=?g`ado+ߋLL@6vF3Kk @A\͉`dkW#}{ʍBJS#_%2lME@66@['GZ:Mޏݝ韛z,mM*َI(%w9 n&LWud^`^ prpz{ `ji0["n`a~=_?^ [k?/$?', rx23X9,l.NNhdJٚ<}?Qpw.y{\V{+[_Al,޴N zghA֦'d>B=DKGqK7?]*-zT ,>X&V{CRd׀ߨ;}Mn0^7 }rrw_ $L$_b0!Vb0I!NzA wP/qXLJ}??b0л?ENF]zWf_래Lڀwqf]j~"\ w;OĻuZ ߅Z ߕAwJ0J2G/|W/|W/|WYU UMt ,L>} 긯"pe؛⟣Ha\qt~DM tJC[Jy-A Nyfay{{P qw5c`9da:/$ya`f֋K 7?ivoU1ʄuB PY"SCO:f>YʝlX#MTqvG  =_6jԂ'#FmxʈmO6о:1CG/޻2L,_ܵ %/sguHXe[( [ƴ"5'J#!DjSYZX8,/Yanwyі4ݕe4pWV̼bH̫LL` [׀֣n;RXZGeW ʳ4by,34DL*]T(s6I=kRݹ:1~'v& ",oǩkgNJ8}8p:@# ,voAK_ZΣׯ<_Jn9>9XSfK,p jd~]ʒEKnl U@2Iojmm4W/-b""cI,+ GdĚ^gΎ CC.r`.I~`1z%X{Wne+zH/9'GzFMlN}X#"]&2Y$!gn;+% JyMM*x)lŕ%x ao7mX|] h2rgŏxVJt.j+Ի #8HrNDn!qAGw(RGUUPw03Ve"w [wn7G C(:3nC. 2?\C"y)is}-Mo?CՒUAVW,F zNʧQAv'݇R,y7?#t-&|Jpvrk"WPb=zn9${A**_N[o8VY+GS"u] ˭Z&DOLg+9 |pĦ^ktRG  N*&t:-0JsbVDTeXP]g^enҮ.NlB殠0hg߲ na?x6c<;O3BIIrhCS<|(<)E[#DfOtMȬ Y$2ODZI{w;"W^Եu6{۟* soaBx-%/{aJް4܏z|q_7Ws2P樎bhѦKTD=}:M3`d@\VL-IW ',j"#ArV39Gz/X<?vXEҢ-/UX@G Vہ=zf!5Y`fX;'m*DUb ug40S;9c냕|.u?G\b&ZOЧoz"$7 |?y_m_aZMFϚXƋZPdkhGYUn2K8ӽZCQtܲ~Ʉ j}0>ʛ\pȭQc(W63SdJċ2hmH Fa gME@nW" Xܨr+af W (:.d@*) k-mXϒkݒa鷱}OFFEs\}_ܝ'!“x*43u EygBqv#c|wBȸzֳc2*x~QK4d韢0wr0a"Ykeu%K"]߈D3z>dhuk͂,62rJznaEY<Ү7=&ϱo W'E_\FDH+1(7BuT\ JM(N;RhnH-.>V@_)kr ,R+6zR.{G~|>?:͆"(yS $o4B7lN0f'y0 *`qeb)) @M8G 3{Bj^?HV.w}fe~)/Ci/KnAyd̕I"u:? yY^)ZQhS a7,J⾙gd<î)u8Qd%C|:̱=GzAzH#Mӥn;-Us {s,j ̶YvڤS7 dWan&+*nmI&8%,4%r Bk_&:o+<[ŕQ3| D[qHJ_3 g}oi*gxP#xE–B1. gre ^Vpr [Dfקa}b]XWp_(l<O,sJp=р>t"; pZ4_"x.h_c,=?6yVUi_vWa"Bs穢aids7 (u.?ߑ c}ˁmn`b` BN Q4 s~f.vxys*CIpf(]4|%|$]w*jjglh5qm0 "(Άtq|%Eӈ\|9Ɯ}c`]pS~MBΏM9 XHqmDNcR2 8INE i8-<]` 3~UDI.gy Mu< FZMt,f "06nqAX"  B_}@rkzW3f53)[OLݰlOl[ Sd<[Gȼ1XeLC;OCzHDrAkz =@ɻ0ҤJ3fti} Ϻc…a.IiA2:%߂zyܬIf5A.R'{+mw\9bn g_pp%`{/4QIvr6/tW닠 r"P2wjnp\ǜZ%'LϢFWDa=*+eje~/Wp" k,t!T(^$:XOCt1Ft}9eAtXPP &4>(XhvA2Dx3 r8'!~K䐿 ~f[>ɼB7$#R٨w,i`j|u]6#(=J #â^_i&fr3#0_bu{i\uzG;䗾nTfQzBCxjdH> Q9g nQU߱b+ nOHjeI }NOAv((O4AXӰB1ByBAāx0a oGF=xfc29-22hKp/RbǞLNŨ2\!_eu,3oOV4؂yfy1Ţ\UA[+憣[D&I6ܠcx W?I~TSP2bދ YUF AphwcWq(4_b?7 ^; r}VՅ24s'_[ڙOz.,# [澰_i:GHbY_eԝ9Q pr*Ah{T1ruP0Z Q|Q͉ۑa>gdY{8( ֖Xt!ב7њ ~;Za”6ԧ](xzLI@ҩEa2% I=m鬐D&PrX| Ot!CSȈAƋa?ϕ>uK^}^f׻`}vi/JYFfgaY&ːE"9a2Cm{Λ'mo0ԇ`uV gHVկރ`~%3# l<$ibHO d9N 4.c5u`iOfl˺Ťk4P~l׈&C5.6Ӳ=.i݀*U^{-3oҰl/!<91+^%^c̭C!o7$†X'mlՃ5U]̠2$?;<ߌDJ=sUVPAّ""k}k?~IVw*Ms؞hPp^Mc[X]r,2VLª߈ԩg,6bPIki/D\'Њ0@I&POxۏخt5ҮQTU^UKDdc5z)ϾyVI{F B_+!Iy;PyTwqDd DR"[dg6/$q6gG2 }Xℾ/icWrU? "7e \aVeLI6ZK%0 dd]wm}L<\%RPd"R6X}- K]yHAsawNQc=9ڨ3S%y9HfTm`yﵕ -8'tiEA]v|?p ]BN/:d<i\|? iD ̍`e@lf~bHګŕge&xntdl-=yT V7kr&hzmY۳z&,ǧϨ|Nu ~u7W۪ӊ!uyBs$VBRFzJČd1KjyT!8Zn;K!Y /moffy5x )AxVHM5/ wۼtLt+P:Bkg2|# f I;1|ݍNQEy!.{qe5)_\ATwN]`Mf7jo62S5iG`C##8 _V) COӝOhy~!_\lJX6- h&\g'y^H p_Ix)M>'M.ƗT{Tqɴ̀_ݜqٹdeQJAM}~,KQV pO*u @ O۩I. )8I)C #2F1&q+tRBK/N 6 v&yYZKotfӱRDteʹ&ykM=48RoT1?La,T-j )8;?#JcۖYjw*UE30;$sZ$ᆾAB0et য়?qƇqm~uehUNd,k~A$W@囼 h4<˚h c 1&J"sij7 |~%aq[X-JO/;xgx .,Ft֑naQ] \:ľ֋G9(_cmmn"8:0 hY:/cDw/oLR邖.vՖ06^C Q7Ǚvc#~B{_ _0,l&8SI1>^ 1]XAy C1cr\Jyaif륥e`z$,{o*S=& 㟤>6Zψ:6PNms\ `m6D|N[W;iDzWnb̾ͫ@&BG0#'q^>Xj-9ך˾XfQzIZ0{[NV*RouZpj8;fMiSrV3'8T34 V{ &S"{ؑr5@*؂ۚ*ggl'Lő,9~xaό`i^Y8B97)&Q3IOm 35lfr_j%։f RF;Y$A'6WH)rt^`4nxۺTHpa5%dޚj|X[a~2{z>H {͵]hbKzn6T5a#'G#oEeY ÙlWtxS$ln2$A U}җTg-j =*viH& O MoR"PuL M++?$ِTup=ڷM% D= _sb*G]N*o!/]kh=O>ɗBKeT+ N3 tTڊ (`~tJ^Uz#bp qPpO09 p"Z1WC&Eem((&~|徟xP"glk/ѿ۩5sY'}RMqL\>KUk܄1KE=tuj#_`f#vqƗ$;#fmkd5( vEc$\`M5JcC㍕xzjdǫM$mʥ }B8Ŋ(d{mMX<? :VHt,;Pu>?K^}|b/`E@1 >jDv3~\\C`i\YE%9HC74MUW6PkF2FXh7 F% *!.8Zޑ[E $}-i' Kŗ_#3Ԩ83[m])^&bˮHUCz.xı ÿbX,.0*iW I8+Fg_Ж ɽyݕ ۸ C$鲺BW`9@"9/Ǫ'_3/#p\XUIvi a`oM<.؜KRY6Adl& /`OD;K `>.ԩ\?̌FDa-pUo!k4P!+-@h YDA*"`1P~Tܓf1&l(⾄QMBZik'آ>:ߟg#1ka؍Au2{9t,^ц5h;E*q{QL;<ۗNTÓ (3ҕm*m𳿆PPݵ:޲3%^g(L%,~KX/ u&"Acύ>fkmo$J!Pv*>USķNr .Zˬ(,&M{iANo$85o#$ s`x?e!+dLdֱJ`KMcTxE5ժ?e~DXQX߻Zզ:%u(sܗ8W3xB),O0ksӄkHRTNN|l)Uyy狋֓ЕַPw Mq򴏘 "I p$Q/Rdf{6 8>5/)lHr!o 'u|Yڨ G%GK0c6[ByTXfiDb LOtW^|j` "6ѷ2uY^mR k[Q}K>Lij( +=7Oև)lXCEYrsNeEʩ A OtP״>jr M 8a8 MwAAH[S}vP([%To4h٠ t"Vh|r_x;%9 gW 8a]'|d  fHbV2ì=sy X{Eiz-I2"̈́~-y4:Mvۀ:L^ƸcH[5nݜU,.%o!7ٔ8xt*C/-%aiqPD[=8X"Zϟ[Av cB=A=L*}9włK^cډt&,|]9!Tmg $N!lm52`[U^E?E>=G.^_Cc SP Im-A\㠒z)(g6WϪ8P|^/~o5PN%wGY_{l@ާr3Cve< ڹ&yἠpV\<~ ԛGYTNƢ//>Ll02= į*YΏfq;^2CZI'U!ʖ'56ՏHvQ)TɜEO2Q{0y8 q -\ yv&he.._-[LF)_?R,dWs$\ȟyoonb F.0&Q5W۩+ Qh|,8= J$ı2j^dDqS)60bOd,}0(] r]6Z2gyuFjJiK5h1 me<:2~~XmlDE0 gg1Nj@$}Է$^/Ǣh5sUZ+I`>׷cr0-'#dL ֽ?=T),4kb3y"m/:ocoGkoD<'nwg05 OҜݯ6i`7sm2\3jXOd$ n)d3oO5oc9R:S|gw0c"JC0}oщza1͋H"Sص-[=GchphMֳ)1h!I ;hP,ej Cb|zGm%ҲUb>+Jxj> Ah@>r-cNK;=KNo =,3W~Me[Xu_~םq9gFۙ[qm~`_9NTY|$fSxj+: w6GϷfIYPO~,R>5C |:3粤7Z6q ̕Dꠐ0Weu0}/蜬-WסP j˟AdZ(QBIszBf@EYBafb-EC.%EjlpuLq.4f(jfݩ+X3{曏-6Fn#=)vxvK,˟p~n 09}@YqHVlg&Z˫A@0QV9Bry5<ob>Zޯ_:\fnZڿQ& k~&7HD/BGsywsJ:_bTiuR`⼶T*ws2[+> g.~H`w08ʄfQr1l`uѽmfԃK]n\vA04zëvqչq#Jr(iS,⸥s%ͱDJ,l]һVj#sp=oD).>E[h~3~[>Ջ)aS*2)i4"pF5ZAAvT㪴fGTٵ!q&43jLKcŵm?-~qr`A[9@ `YL.&`Z=@m95X}hrN'r;9{%ZU$~B*C]LJ$oc~(I=Mףߣkbo{͖VVeHXCjS"XH9 ZJ 8_%&=5_qx >C/s$.jz$HYuorv];Q6 pjUDN2E׍ X$-qeҪ킄3袰l):**|Dk`gՖUNSRӚ7(SR4nP,K |3V )CK26"N>nVE!g ؄|_&Cf IRD)xʲlx6JվS49گ O#`wD"zgcv+ WH\VR|7|U rf }g4vե8n~ן1-AwH B&.eyv}wSc'krqN^gB#oKG'#Aߙl `'2"Z6!%*Ѭ"*Uf@|9407q$9Yc"|/خq4l~WLЏ3m{A'Ň|\5t#!ؚ^sk92H~@ĭU/Dʑ}2%Ogz^fAaκWFqY7&lbD4*=eOEJ_I{d96A .;v VU̔=<ʲ"҇$1Zt5%Z}fp n*b3ӹ}ѿl0"0Xdnp[)lx{0Y*k顑ȓ,(ƫ @8DʄOEn2̥. \(%0Q"akn`~q{\bclM]$ucW?ЇbݎdYNRƧ fԞV=1?}BO_Z endstream endobj 528 0 obj << /Length1 1387 /Length2 6001 /Length3 0 /Length 6952 /Filter /FlateDecode >> stream xڍtT.eHЍtwJ 33 Hw*H -)*tHwsw]5k}߽<"H>A~@IGGC BDll0  C@ B} $4\A1)Aq)  J (a?@z)!<`H1zpq%%y\0;B:B]'ځ\F;2H?Փ !PO750@ 3?oG<f{3}8HCk @_f*N!\@p?`sTH^x" oF~w*@isCz{\~( U%+$՟2jv??u#| {bk P As"@ qa 9 *oFOpأ?O7?-"AAf08P?6z0_%=AohzApW@\ϟSTD|B@4]E$藠VvO}M/8 b4k ( C?;_U_$T\\~90&-ZAV ywT B A&3?P BaH;?7%5e~xy'D {l(ZNCnҝ#Bm@}3 G )A{ѯ5 < _^T@ce7 #@I;U@U* d  ;UF-z9VuCP铮;Z?S>&M&p)XZ=yFY"TG'>CgN#6@4Ūt?~,~ME/ill^vM [}%(էbgVCkMе[*="dE;/n@:KQպǎ;i:v RIMHb5Q+8yxBDֺc?o#k"gc^9RoMbCԮ9]n%?)ί;y|+6=7v4 ctlLv̩S65O~z{;,T 53:/#nVfJz>ՄsO9VEGu(b]OzcGH{_+԰NOJyz:08K)~~ޏFƕQL)T/6VB-YӇOEqǖD[.5^մ: S?8goPXS`w?PT:Vӛ8JyW-/2(nAfՓW 5/ʲ ryި&X%`Z&|X mBmNryɴƃϏN>(f%OKQ}UsI!"vt1>>%')( 3ޒU6 >c̏:r+6=-~8 d*jxYUdG.8Mj}N1wGon%q6?ԫl,o^r*ϩQ+kCq4zC訢R7+ b#ó9Dˎ>EZ{֎xaLUj+WD(*R5ܱotlJN,*y@my3mہ~OR9dٹ{ʖm5ӚGb] u ^{/~2@P%U32wF_Uq%b8P3<+3GbȆl׭wZX2CF_b+_iT㨥g럴1Moڽ8Z|$*V f[RiyIj]{}(8%~=hooV>ttN@`F1>&< K$JuɲQ*vhz j၍I"&}fNjoNb*wj s[ӮhVcnt\AN´y8 k ֥FlD<lV}v|rw94躑VOmNԄ|ɢu<=Ѱd$dL?YHAܧi[\=[uZ&Q~9ƾ$#op0k^e;p_ W|>uWf^lxh 1U$X8HB]%erGFE}e \($u ϰj0v9=Gf5X/ũ^5iqpnf0Td5~'2鑈+KbYsfzي0.?٧n)܈Ω}'0&!sqaU$9\n!+Y{Z1w'W&&)'nrJZU5Q˵gqQX ilYABS!zwC6d8ӑd8\m[.)hy*)J-2HO'Yb& cyLwN_1)ऍpEJcvrjwy ;_|]YpB ٍrqWZCuG@ȇt Ϗl#KsLjvX2ϓ k {j_^(&2M {@~fdm«g |v<BBN$Ԓ|Tc*j{P|䭡Rފ$(_k(r"LU}_xzÉ";w8źQzp{gSQGB`j k\ ReEkpUsPxӝ~V&%L>gj/4$\kIK2bTKjTg-^ֽ9uy8WfnYOyaٹ36hcSdV.~?C繗پS\Yb﹮h%7qAo#MT͉hꏫJ-YZb8৛kѢϩ;fiywظѵ;_8*9?ԱQ-ۼde`TTu(\[,cNC}>^OٜUfІ+r6 YL\whifasR"ei*j:s,(>RCfբW+dF2 s^/^8.v̮kh7tn׹U=uDvQ(sD+^?l 6몎\ڼjƎB⬞52 FGL as" d*hlQoJ6eS*V:2߼Z*R~;`HarWH؋rhRά05ج}ڮ;eX᳓H,$u_5c7旅mU0M n1r<.9Å=,Wu~ )Q)Ts;M=*aCZCjZ}Ł.xdQV\̎jԠpLw(V-b#&E/^Tc^Ƽ[{jA\\Iʢyj]}a/bSr=u]|ceMT\%y'/ȄP_XP \"uru߭K{$9X!.qx`i~31<)ýZ >ʮ=bU"3* :R]XjX, L \!7̥Zg[ac}}|^$@˄,@xl!}?!Z7ǵq,W+3{`JР%Afj~P = sBTQ Ef_r̩Km_\zc3*3I, m`}l*_ָbAO ~!AXw븎<+bLe:{b.i|OƄBG2醧_^eoK0z}`K+=$W "15a_*J>CS1Y!ݧy|SR@a Td<=,yJS>"gRGr?c#:q5DMF"E'%G;ψrB"J1yюSnr$oZ('7Wbqw j-OrRweٿXV R澙EE}< gj\ "?G`?M8xx&3j; ,pj!PDe bUig/$g'54opȆkoKPҽ;{gTAZ=)jLcGT7ĥZqE{x}|Q(ٙ~ė [als`obx7T@wCk#]è=n*8=ۨ5)ĝ ]`JƞeaoY1@H:G%@ EJbLf6]*, E֐M njح,<ͰH>a ]PJQ*B^xD0wL|%\3Ɋ5%^g;B_Mz,cOڒς辂 G1&GoR'厛J4x4Wx!aJ|@$!J-HÌdi0mrsxqBh,4`-q^ 7DFI@U*VFHW%f<_SV8N/sN[>u& F&;+=:n-hڃ Qi )bYq endstream endobj 530 0 obj << /Length1 2721 /Length2 23992 /Length3 0 /Length 25517 /Filter /FlateDecode >> stream xڌPX;ww'xp%7U[TAmgm;&'W21X;13rDd,掖@{sk? D G5࣓%`fd=71@O.bcfonj:TF&..ڿBV@{s#k t%@Tf ...V6ԴsG3"h 4J k`;3zxrr%G{ $47Z;<%Ii-oc hDo2`bn ȉI;: X:؀ - A17 ) @ ~UYX hs{n w?WN *vN@De@G### h1 f KK `Jenp0p흀^*FC5 1o j+@4{L_?~o )-)Awꄅm\t:f6Fӯ!}oyh+imb-LcPԀƒM-@{ȵ@?_.&W!Ĝ,-RSQX[cZ'G؀^ZJ:A2;*(o`ZЁZt2:@# ڜ)jmdckŘn& @׿@omr(;Ao`8 "'o`q0~#&o `X +o"HF .2o"/q@\~#E7qQ@\T~#E7qQ@\4E\ ._40o=(obnho` zLY[*@El`F6 c0 Á@?) (wcKK߆@";42ÏDhel`#&!(_ [ :Kۜ헹y0 L~scffk$3eP@P>A-,c#UPGfZ6=6ɀm%c[ f zȭ3*LH;( ֶwYAtr#>Hb{@sqZ7 ?~Jjl ' z8i`5=0 f?TG?@1&9A\0orH@%mdj_(" h`chQv_%B;7KLMd&2V(auu[Fp㨹MHKBO'XV)#~B8:e=g;OUOɳ8s1]]kKVƂv*٥Jf"U>kΑf㼃q#}~2ws;5J18Cs9a}L١ W}lC oEͼYHIti֍cKL; @JFL=wrXz,&km&I\39$ #ߦnuvk#twI-Í#^j.LEʹWWK!Ԁ OAxL[нclٞQ^sh,]u^e_ ;qXDӃrDr֣)xjs% ݈/ X%{wU kY G}W PrKz= gHz,Lb=ɅD9eL!o⇂^*_A찛F_v{*0tԵ(HRFՋ7-T 7ƠIߴ0bOK)ץ h0_3-3*k1oxJ46>{bOȚqQ,O 1$_Im^mVf*v5g uXXmyJ̡ E y@:j4J͗)!(K}5"'>:QzpİWÓNNu/H_E0 }3uy'%B)̳Fwb" aZ߻76啷ꬮa1}}|=;p*M`W_#Ao,Z+Uiq^l=^ʉgy*vcy׭‹ݙvK3VޝdKnYmQa, Ʋhg / ,w,|w_2g4Wp~ SwӾ0l'"t[B ecUM`'#yXDvS h8>q?+5a{1Z'o2>u9" NruNmI}6}nXN!P5wFȥ=~,XV[)-bYvaR@ٕӎDxb{I0` c\Fݠ/y_y0:6% gIQaS1LȰưCnw]B1@ik6Kb٪Lq"8|Cq;TcmOfu ;rd&Higy+,h]CdX 6[3.%CO=zӗ`rӛaN./ʜM*D$,Ͱ[}ʆQ")qaS1څ@Eڲm-6,,Cq&O-Վ9Ћ l Al;ێ+oivnc&1QC7"Ҕm#oSkZVe-|`-KJ|B- G xR@* )c7aEBgKCMC}ӚPW E{;xu],z}Y 1lw¾ Oc{T[4y΂'!o<펫2W59YDdg02Zf7cd ί\@Ug1mcK_riLmyj7+O `g4g#9.$Q0Fڼ$T^h+4IŚlX* 1#0V.{V;]cK^wMb|  Ko9Q/e#)*һ+~sZirxʍlW!d!\t5&1ӹ UldM2t;RwoB[n ؔ"z{a02,& r>cAһ"NO!sRUٳd%1YX乾qkF:pSo!/=p~)8rH,cKD^l鎰G6ǬvQ4p,eNkȸZ{1t5n%Bh+$/Y5Wƾ<Е++ʶHqDW(,k= ichڪ  "5B'UDs^>JtͣH|T@\t$yML*x6@=Ԡ[1iPTHaֳN(K(_=: _^/K!%Vr)p7teAJxsS(֙j^.k5S2CfեVs4LCAXXFj> gD{o6 mL䓍覵o+'(ym;ЛP,1=8hL&݊Wd_3 8ϵ@jҫnG‰;ocDcW NCMI"( "Fx,81Ù1\?i膁Vɽ+DP67jOu<+D XٖKh-ՂgJH91b*g*|Uy`Ju]슥@ȯU9/MHƥÎIhVAm^<|hsV!ݧ(K(l`yZM#Mjct, FTk9J=OOu/G(|Jvԛ`$6 Q%|4.JQWz`:䞶d餑#ֱuVL13y"NCف} ݫĕM_,;lcJs}f2 ."y(R"6p8B}ZZ J(>3т`U<2ey&*O&o⎓Szm/ .[LNĔ;MA69 鬒“-)AY1cK Ty&l=/ɀK5(L1 >Qk,$]6eai LXB)iYM[s3+3r%F2o@oH~Fiڶ#b9*eU]/ [7|#}1 m9xc69ev\P UPPLn `N;E{@fP6yʉbҔ.pVS NѦ@Ǹ{lY;Bo1~&ϟn)})Ǖ{>-Y=pc"j,Ԗ[6T;鉧_bőf9&kX5Su^04{&%\fdE:g23R6 Gq36|e1R?,3/|׫eLMʮuCT2{dJKb}b[:igR"ӵa]qX #ߋd MhV:3mE.O_07؉q˞NPt[k*)x|1dz*άZ$:2U{NhSrrxW7L="a RT.C"/LWߟ$կLӧ!^'`,}U=.LDk+J]Dg+H3KBiJB;[aїnesv؝k5HWp*^Y' O&)oz|K/c;`o24B ߂}G){x$*sP(rDOM:Y䷠U3ߑi ;ygRK:t}!g伸/^h#I8ͱ*?O%Sf( 6E\+qX79~}?#zNh׃S Ou]kfӁ3%ƃJ+KQDa^]--y)17~=E%}"(vv_ፒzc5ou٦_;I؇FZej]%i: kgZPM&Q); HEh`{9Kی6|âˋw6bziݑ*q!(* )Oêz?!rdž~籈{Ƣ>p1#n9t#Q4B-ʉRB]qn>e7ǽilAZ\jn Y0^ R#z]T^.@3+OzN #פdުG,z\ 7vAָq1cj-6Q9%2'̨c@оK8VEt GZ)bOp˺t4:u^nun(#[jUa%6ZȒw }鵦ʇmk;j0+T5]`?obʒؗjSO2g󂧳kZ^=KV+1^!T"NЇݷvjfLyqJBm%щƎ0]0L7!ᰭ,2t0 fr^-=H3DۇcU>y˃_m] rǏxXz+\m`+m d lK K:ūx/P*C:DӤ֍Մ@:B4!!Lj8O- UB4%4#ֆucls`a \QEzk~wv L [ ? < xXFJAZ2tdA8R4ckag2 [^DmA|:}Kj0BΟ!4kߏeN:ŨrAMl}&[RpAo۶ƭCP*ך3#b} 5֒twY<&,l{ԬE< !+ܲݲV 6hT&o}y7tbnokhqLdrZNӴxN@&n 1]T1VuLLibGJVU@dxmmZjj&^/}]L#YCỶ%M[;9~O Fm>LKa˞deDL!qwH=f[>.a|6YWғy.U 3 DxTgJ褪r*oP"ha7"rƑ w /!=t}v)2 5`kƇMs Qg۟~^ͥY09-ćR914m9(bY^W҅3VrqkW>7X 35@C#9i#IyIu+Nb`nA]pQF2)ո4oNF:&|0J̨hz~Sz,xf -.7ߺTB@MbCԎCFTkB.7F, Q8{/ \& ~|W6uzZz,Kjqm?8%Fg%Xz6[s:I $Gfo4}o%3ȾL-S};YZfg|f5E+]za[Dv?Bv/.gVG'T)2>ze?1YZR^=eγM KmkD۹ҋdz[ 8ݺaq»뛈׾ e0vxJCJo}'4,?~yޞҞY$4i~#.ն.F5]ycYA "Jr2υ Wx1R N%>ۥN8980XZlB"C޸j툑5K#\up.ƕZl{h ѫp*uJkdtL#l4R73B&p{SM.뷞pbޏ60ƣb(TY4ޕ1pH,ϙu >Y׸3WhҚ;Ϲ%$t{cFxIr3͡ʊKDBx#?'W[c󙡍;SfUMxh:)[`>B ǏG%A5I ~jiFbO+$_6W[=u~Ʈ-ͻI~$n4R3J,6uE/酴ѿǾ`sA/pz#1Q}i m1&S5 N~q8TuF:)pu6Evg|0'̍#F+,ւ>/[s-퐼]RDuqi)[[];#2TRu?Dn܂S~] kn-ϳ@Ƀ1;0>c>z鴨JF``7A+j$$ɢkv$5)|8 mq3ȢOGBD)WmRT4F?poLح]/Hkzm|QO].zc “FȌBp]e$tKW˩,Fc,Jnc 5ʐ!])-Vܓ=>Uu&-0+EH .Y7}=͝U`Xէe<_>dҖiҊCrEϸIF[ ȍAp<8`¼u>W6_6j (%TRTTÔku"}̆iVQځlv4 ͤ]8#k4ݐ<,L2CEdVzlw_ BZU_l  pwڗɾgdQ-w+8λ2e 4oұFv$̤d DSVOU7|'mv:E%LosrX]n} N^ OO{н8 tX\<Y2/3gP b}1ݰ3/V"c#*!bԾ nؼgL|#]#+fR֦#YiS84a.܀f5oiTg>k`XI/>FV$(D8pSr|8% !)/VSĹZ^ Jo"> ѧxm; } =f, z-9ZZmJCVP=rhp v細 U>hʊl^ӑg9)2pƤ?lp1S _$Ԅwa߬UL`/Q %j@`h Za܉(^r!/Uȓ UBwq !*NTu2Kh:ptg-7]"`:#*Fxǝ6 .YB6&jHvqi, ?SS3=n/ІG#_VMOCnVs{HY0.hbAn͸ՙ"avj5jJAj7?ݒ~~@dE(GxWǍֹ|U! XFp`y,i-6{ ,r35%8J0ŘE[Ei`cRG0ڵSt=آ~Ow ojol>lꄨS?E %]KlPI}A8id|iB4r! j%9^ߕh$m6x:3 Dժghb|zn kRbjnpvw)> R=&Mtb^;,Ψ?r$)iI_.Z,_L^cL9Ob.BT<~!"BDZs$ ~ϞpOɽS CGpg8*)uksO"ߕA Ay>ÆӧEB^c4)[{zf3Q䳏&Bu-Ō㐷Fԍo1'/0#š"GDRdK QQi-O!ռgA~Z:5F?>ޝ' $GJ EaÓ_wo$ܧKeޜ"CQ=K䛥rTݑW8V8K.'c$>s( pNJx+(븽Azή=U(JF/a$/MFYXb4ӂM|ئG<ĻvYa w\C;yKȆUHItE>79O[({uB fz ky!"sɱOyE3`wJ?9,(w5cGb!vjߣeO89.Zn7b{K(1ʂekWa|-R4W~ Ӽ _ ְ㤾޺w'aW.͎  T"fErDWd*IMh<װδʅI?c jZ]0uɔ3˭x-85&1IM|t-[j˪7gQ޼5|k2=b6%) _f!lQ(KfG9L8>M'uBӾ0mNy mg@ 2|cp<*ZLZ Ulgtr@g|lvgLDv8NKW uLf [|ֵj_{O^2;mI}OHĞ f -,Ea'r zkun$a ܦ+ŠQ}!(|~]AFF1nF8eGҜO TE|»Y(4(3c8!}6[]]dAfp Y{{^ 62O&<,q70}]̳){ItT?.)8 ޢYc Ofj۪[R5/1ޟZ %?1%#yҸQ޸4{v ![Nkf&".7 !>Ї'b}L=t.ԉ$ˑsX [5;yEsxָ^Jxc];|喷pr&;tUY zdj#1Sls!]I1~3qC/r|tmE޸lעeլIώWڛ.bqSgӣ ڸ6׸ 3&?wFY^)և'kբ{(jy/y?[T4cG7bI1/T*IF!&ۃP{ʦ@&8} D2ƴ(^¦sNEDgR9,B"4ai/z!V 4DH DV/k,J4 F*I(j^rcb;]' ҜnRԚhC{iᘌ'";Ӹr2fbpSђة~#yyo/?J$>N+ N UIc$aBZ'RD=&7`*W{򋭁ŲT|zXa 8ӎ&ąu1.3q k^hcReOx /* T(2-q 9vRZaQmd?&&#?#ERP#+zTB}dŠHQx.|taSA2Sd|& <]@iN}`tś6oǶw~؂a } vfmM%j X!uc{kq0F=1N=¨ +!lG59[ &\*\7 E96*]hQAD$ܥqAZ'Eli##Jξv&4r>STrB |Q&Z˪7<`}QFE%#pLcJ!`O]M°b k;UcY9 'ĈY?f2h1FۇE{*X\A;Q_ d{܁wgWhE_'i3Q/Q"NL:Ec?.+wE<|, `;6P [ZC/I8BZ*jd?F*.$^?DjFj؍a2lEP#a^>SEV\ĠbP ,+UѱsYF￈=ObaKjC A^1r5 @nm*zf7p1FNT fsG<+XWO:Dkfegb6/ _HLY*Eb/OqŊwtƄ)ewo]91\ۆXi-nM[2% īY?2@>s}oVEFdfY {LPf2fUw/:Sj_WیEr)_ )b|%#@u\I0T뚃2%Je_,ĥՄ?LT2&YªpHĩ6-WfMbq{j\g5qq5Ŋ֜sc7>L}Jlq+5z?L*`hJ0xՋihnט):¤x7hw`W,F7}B< <%|;NB=A<+&(q˭#"0 #ߌ{f%#Ψpy{ltQD&ti|ѥ+vX>;O=$RbhN%y@1\wkWӰ|C}h +ğ2zl-\N46spY$38a}=Rù'Ճf nR~g,R4+ۅj A@M[j$XdX xF^ڴ&!*# zŌH@BI}ahn,1<1~9UN]e% +|aʹ lmjW>C-ȱبi#tS:,0qH%BE6AvYWѷajE dB @5YYRߺP4hJ{O*Fpn/f8kGՓbLQM SloQ׮ x`r|d1<2ne:FD '4~捩k7*ψ#hgs7,7=2D{靵r$/_.b3|5^|9WGlyG a\n! ~ׂJTdX]h^-c'R ƪŤZB xX m_DSݩ*7_ ] tm Tmd>P#/N j{)p&Nvy1.%ј%>(y˭ٵj&2vwjxPņZ%`ЕE>;O+ ,'ʹ5Ò$o3JJ/ݱY]IpSSX.wqЊNw>[ eY%MA(Ѕt2녅t6yQ~%QV79O!3w\_ht]bZ#=޼* d'z!U΄ K v 8.2(qA"X:lC6j.YT.+@n S%㆗6JyEH_]W[X8+,8)w53q璉L% [TA ´Gi3?vr/|.Q_̤͠躬ajȋē\;+y?eewUG 7pVNl>uGRrTLH!Lp9]Ӄ-rc7"О$-ĖPeHwLJ@0wap+5lR.,`l7fp˼)klfmOE.q p,o{8!mz+bCo }3-"2߉M*%yANK/ըfW U[b=̡_k)n*/3OJBBt)d!Rc  Bb_+yOKԠЕ';5r3k=,B^蟏%ԦCKf|"Xǖ$vPFj>Nh~ˋHG2ȹx [ }JY:=:H'f! /s\$N>>;O}rҠZa'Iy0;7ui H޼`~Oͧ7L~)$EŠGGr NRJѝcPDbOPfGʦ@O-dz(fN(0A B]? - ͧx7b=og]z fHbd j4_Vab {)& |[s_h̪*D$U{TQxWYŖG0fEP JfZ_귶ơN86KLij5dTD7y"+M ڴ2F@TRۅ3ѧ/aa0ƿo (S"x6d(ޟɸ[p/bX 5,zj/q$Y,?ä1|V?ɺ.+>5/&?|in 67e:p -׊倓PV$hpֲ A!T-7c`L UTEED<uM[[/?b-JEc0SvIjFḙ_͞5+7 .Y;9/)vz7BVzRpb1H"Nei@ڐGrikw9lL}y;}v`.e|/g tGQe1km|xif-OǮЋ.abٲZ71z*ivlNF { ,O l'Q/cEnؽaocD I]^|1\2J҆AZ"lC}&%Kc֘OȜv<3k}W(XL26(_vZ/xU34Z#+݆jnuzm0-qGm4-AU#<=W y["Cw+Q&ygǬFn2$|n=J; sK&,أ@u+Ԟ{Cc^z<+ 4H 6R9 "D5]qoV<>Y%(|Xg&M/uz!&$G{ [ݸ"ӯcaMwk܉KY7qQ ۸da{;g4wve|};w?=Lo,_!"أ)P-'t4SFSfa 1Bo[ 7g^'kەh QE .Vtj밳;80Ww.nи!|^=^E(2 JޯxT-E,!9zp~ݓgc# $d_e(=y}hz9ΠGtt7L m4븯,WڟBjj?wYUk'):F EVw3vGf;YdUPlZg駑ҧqBOt=ǹnQRl_7N5k;h67J/+gisT[&FSm} f]f= 0>8|j06ޮ-_Vйȷb8JVhTEjP1>Qd/"KQO8.{vMhZ=oH硱t1C*.?quE X0-B V<1 F(PZq2gmZ-DŤ(sG#J陼B\j NW:#E wz(FSNṴV9eH/?*Ӯ;|lG5aw ʯ`S:%}$bvseB~ulF 0b]ޞN30%=r. %1wFŢ,! OђU*Nvh&6Dd T^rFu\0tRV 2&`j$btcd됓Hv\uTkgc q|H. P4|\k|G1Ce]",`ͷÅ>6CpL3q۬`w1,o?[|km?SqS!O%[]D*u?6Y9Ѻia9GԄE{9z'BO3>ܽ Hd >d?~x/hFdr]g(LN_jrs.)63hMJQa>#,L-_~;/f2jVd ~VR[S~Hگ- \%Au,󍒛A4Yanء),D_ѣTM{G08W } u) whi4/)T̺mȂ.wwy@ YVEr]ˠ(D@i}uC*}! \Dʻq]p1僑f?E%˹ͻlw *A_cҍDܯ+S7B%t`zIݮjGi>С3Üb>GYY%' C1blB6g TVx܃dL nBnͧdŘaЇBxeLg Ӷ3èy"^AU rmx<"qم/27랛4b!MH+!G9Cr¼B$n1%?  {sJvdiP%:r#MyMYOS'[]1@®Q9{OGퟹeJiR10@E+mE早׍8p:P'!eiva\XHZMI7rxV6ީc%v~yȥm[\p%ݵ&WU+[ tJۺp+{߈tT!%l{ni; ghj-9fo4TVG̚يwo{3TE'wI`֔PG‡Huߐ)W<ԘOML+rnN,Lt@Mgv {&.jPôž{.,HyJ<& u':*}T`EmZPh 4`c(p\w֩$!b7 T!0Lq<_/dz͉#a>/7W$;CLTɶH)<ġ5)Fs5“L0X.Jґ[ 阮O旽",7v_bW_7x!.B)1pN }iXO'tRx]{S+l#M tXkty2,*"$-%e*#KdiGw+'(pFr/}d O+&'!zɯNMŦiOEBb͑@PñMykWs2z,-@>ۅbmӿQw4zq$x#q ?n //0(@|yDO*^dk~m7q_5<='WٚVp+17|`XN-*ܰXQ `djܚpIdGM[dsJݱ$A5K;_+Fȶ `eBn (]fe^nŚYUR(/ 1f h\ѮB@|h_pD!nΞ6ס}|D.=|!&7J0\DyH="MbbΞ)n<GmkZUKN$&0H KQ %_z;$Qigx| _H`.+U+o7~QΔ׽06W+%XZQ>{%+f4PS`̽(q3el쵵3Ca=*k ŊWivhgK-V7A]BB>Dj@$0v]~1Yo P>վT w7>_'Z6W R!X^w$4r(*v=7\73vftm]xQ+!s#q=_uП7;ryG|Sat9LpEHZ*n0jN*׽ RҝpUޭߑ.EV/_Z@N =!K( eqNNf8[t4.C ;{";m 6"6w۴2epdFcii-> J˃Kی^sҹ}n=s[:>#4jJ| m~#9Ձ/Ͻ V52!'>YN=Ӯ&Ӂqb:rٛD;)c 'TMA Hzw8yӆ2g3+ioX锖rGI4yH4+x,h5kǣFVGq/Wȶ;W_y,D1 jO8З4xV~c(w &b7+iGvf<Tt EEU9ɗ74"ՕvsnYcsh,1$I;Dh.Xnoݎ 9FZ{7LGlD$(_Zӱ%)PQio$qg}#M1x#XZ6qDk޼J_]c.Ѝ }[`Js@d3Ȫ(u\VN|p~* }YE1q 5|U1f_hEOmF@߯~9P`j~dv+,7(BHK37k8{8| ޒT)!.iD_N|E[ R.P-zyNgCrqe4ç(Xgb1G=ʩz'QIi9V+Fi _bM?I^Y]"eE+;s!Dvb) @l˞wWr.<-d7ă`$Uc=KLe&(J]@!Zc YƮzBQBDQN]ԑLl>69yW.x 2S_BکA8CCM#S C_#}R+D&)|Dbef8 %L 若~`G[N4qa0]20ۨȲvd8U[7YQP5@xꜧsLN䢏V>5Qc<R]ug^7.m'PBc :u+|di*lB*?EHMnؿ [ ZnɾۨS9kbE(DEVZ {negFhY\CƉ%V@ig3bZ $v/*vWxMbg |y2vrq%3:ǂ5ܕ3,0]z͊#7[LIf:lG_  o;^-2M9 1ŧƂr3ó[ _5\ƨC}DϢK'|N*KcV~8|UFl/H4=TIRT_z-/AWGb&|󡗲M]MY-DoSV endstream endobj 532 0 obj << /Length1 1694 /Length2 9743 /Length3 0 /Length 10831 /Filter /FlateDecode >> stream xڍT.\[qw=@ w8/nS(Jq tf̜kݻV=~T`t48,I%uN;;+;;' &jKB tv9e 4>ˤ̠vJ`= +'dg @ d Pb(8.(4Og 9 >?@gd:ei uA]h|lN XVtiAN@yLE(ȬP;;;7zXذ -~X=7YP]܀+ߊF(K`Q,Z ?s3,1_6--E}M]?;['!fpp|<j \V?}> Rv|&-@ y-8Gq qCM6s{eYW3:?wV h ru_& ;(^ !h<8ht):c޸z-VE/dъ6 (3Ϟ!B!1z`N_]O?Q($0~*_猽Zt&&'$OQ .)ZsMy9~kGYܘf\ O>*zM.ѡ2;tYaC܅Y%bWϣ*sS﵏H_n\O #ɩ/ر!X5XYkl0&kߴΪs8XѤ^>S w;b;tst 2Iil ޯiKΑBe"zUMz-JO:9+#QuĨn!z&p LI2? Y1.6lc AU G c.N X؅Xˬ5$0єPW<ʋ!1h{,~C%0ɻ7_6+ͼFS,H-qQJZ#n񻃐"Oa+h˭|W"Oː=r ߸Aݫef6}s 9 p܅X  @ "% ?fҘ D*U}1KHuEC%NǑpa,V+UA0T/l$K %nS68_츬 v:~enEyJJ;ZAwGm 9~z`}FT>nخXqqF^+Q2I1 aA}y֓yʷYT-U&7l~4Cc!qZƼ<BT.{HK-劑A $`ugӉǺ 2S+W<dO h='z{փ;~Zw^eFta΢D(n|g'/e{Ѱv~^k-9 !#WeiE ?{\Cޟhl9ǥdh+KaY,M?{0PoP.[Sk -ޣXk( Nk\%V>$»&w pEHk)x|ƛvJTX(wg@_%X8KUd1V1\b?n#w&sa[N<9eƦ} ` i\y60m^ūK^`Ѻtxw >1} FR%Rl#q?ԛEӠ=q=?O$`00iCbHv Ŗ–"L 4nk̛ʉgm>;ozosm034LFcw($퍍F}X&րObs}"ݕ",T?#VI.cK*hNU_#lT90Ո?,C3Ƹ [iF R@f@I[ OOg f]ҁkH8)(1?٥,5T"eG1V$+n4(~=+:Ab9dJe`_8I*l?łrbw_s6+`KEQ#'f%Bh B/7c^iمm1hnhpD\-ydϗAƾ\b? o6RJQRSz}¥ /] 7eS;FM&R<,=ҕ(\၌heC.  XYnE>OguѶ zTz0C$KjtXx" Lֶ6P\EЅOZtJwk'vV) oҍ7;*Q>\=L [ո3 z`]ְjn' #ܧ-ߙϖu 2&W*ѧ4.m6gU;cMf^8gNڀrqbxOFD:yhTS$f!03߅g42"tm hTKY'Si CS}mx r}rE*͈tED(O*=^ h~@aioThl䩻YBiT5,6_zsb%.IJyAn:y8kzZ&)Payؕ;-`qԟ66gB(14 m"ĘC\JLc1\~Y]䶆xHvʧ>֥/+Z.ekxA;vp>r!6qڑgI[B+eȰᵤ=aJ](ԖRXh}I =iws 6~ Dٌ NS{<1sD 4bwTk`3FvpB[IW<:c }Oߑ,B |s.gcF'EtgQtQîS4uw',Hkr9?~v2{>xOIn8EM2 a c-5]%}#i'3 mAmr< 0XƗ(*nl? _ CD$7REyV,DC:KY]ZĬ~U+g>̍&?p3 @'B g  )_EXLp/#7ZVK5^WU| NolQB#3r(Oc@X}u</KnUF.``XG#`ܢSX}B׺wt+za®R.z*Ԍ.z=Ұ<氺]O@su۞S?gT!*|l¹<8mpK{4zX+7_$rɮf֖ph$RcӇ36Iۛx0?m|O?%:%uIҶ5%c;PKE z~Z#'v}IǮ"r[1e#V}+A5Ay|4cE|Q_kÆyf;!Tolj_U"5P7l{Q:鮼N Y`[*c\&O@jf?]Ɋ{> rRL+U~xwtymfU_%%*}˪# o1r^ԪEF5v~#J,02)<'B X` 2Jg9U哩9ڰ-UmŸVqbjX(5Kg̍ŽqG s>."#P;#(Lt;?PA*$(L#,"{[u *}L.u_ 'عÐ1<z44QRU+kMO y^ޏtYh'L(_~A3zFrW\{O\5/ r(|-+e*U4Hoqasr+_ EGЄc MɁj|unWb{ F=O6!= Rٙ_:z՟g6/#o*Ka}?%)Ïf_u8_8dvYH C {IW2X nXH y"!vA)VhbKo|Ɋb"VkLu'7An [;4uVF4q*Ѐwq;[Vvy8"ó9!Mb&u[O:x{% odDb#Jd{<1%5<4`n ng mQ"ao7g868@t{ЦR\iqP0k|Bi0S.ԤqgUŋo7uB sԹZd,M%$Pb|3SQ4Ս\pSml>Jw,$hoxw|sz\ j;1'53G\Z.IREm%7TVD0n@K` dCu<\T ̀p韃Hl58OT.4}&\ӽu"5k.$0+Av}1H Yy6së:7ðͨpyj880RӇn\RmD2LCrbJUkliTB[E0Qeu&DaӳöOo?^\I(퉴qzAI.J3Ms+`aF%KOֿYvp~/yWKT&mŖ2MīEŜrzuc0.,h\'A@8d-\XJ,.Ӻk{Sy@]Bx-iq>ׄvA ÍJGPVd,%fo̎<eB-PU-FgXaQ_]2%u;qN& #M2W'y_Hȶ>QGPᙌbq?%„9#V Mb懁EK+ 2{ gc E,>WJμȖض1?ݫ9m14$S³w;6LP={5aoUq!+ ' N5Å\g_d^hd 0 bvF&MugQ+Az'ZuǭۧPb ΂g5d;հ^ lHi${M 5Y HmPVm;M1+)A฽s'BDbC[pjQ_PvTs?dʄ4AJϧgeEWzbpߵ+[C~$Ӳ| h1o֍}Fatĕh}Fc $uKk*\|58!Wn[MdaR߃gO,cЧ>+:C~.;KH*}\ |ato㧙J*=J<eP)Ţ4 81%بeTLs-l, Mj;=.ojIgݔbt^*cWn ﺹl`J5"10?AƜyvF{Ҩ%b@ 3M{xGO1cPT ]uWVZb".ӪfRUx3_:N?:y2 {YͲ`k*h.y|Q&U+(IDוڒTE |8A[▲5LEFsOU%Ⱥv~sO6'S?(q>:]ooxCw.&|LFChflvc{@˗Q7b;hC $Z(]}0J?i,~M)A,7+!9Teٳ_SŦޅe{ w[5EBo}ܨSѕR}a9Q6iA #[i^G)E:ހpƽ%tzyd+%a;dAUh 6yv t#ZCw!{J/2q8?f3Sťᩐ^Yvx%@V 538mDcȅF[GRܤBے\q^G6)Lmێ2%ڪ E 6KVNhij)d>pxPJm&M:Ͱ0<1eŋDF>+$u*)teR~L<'p(UC5h ?ӵبIhaDWeN|UIɕ.n+p>yŤG2v*ۅ7#rq56-X}F<92z)K̒NMtɼL S#Bs|5 ^Q"WaWn߾:!5nzD= è#+>,`b!^Ib̠SĤ{RaK&JK{uSӋ<*͚rк\9Tr蛽ͳ^c&k%Yk isڏ Wkg[ V i^W._rWJ/6a`DlBRu&¥wv J6~JS)c]X!?:6t:Mq#}e!y=6F$5vCڻ@Ntbv&L(vNgۆz ooXM߈|XpnjAyQ'H)]NF/E5)`K@BىoxSZbB`iRSmԀH54tݸIMضKapǺ*©rq`8;J% 0/ZK7q]Ƽʟ*"z_Uǯ&fykyqo^1w)˳CZAz"Ԃh72{'l(2lpj4߆p|hɏ1vA$4dԸTG5_Msd-3nQ]2fa*7jv]0#sYƭBiC呫MXM$:er9O7ԣ $ Yu^!]vF]?*Db--~%/ʐS%yW+dZ(fZڪbaxِ8VTΊ^k^Baݴh%'NjCR=|*Knm?;?=U55sV9;$:Nz=x{ #3wY@(sa69C , \Y8a}?Aj/%=W fm4٢v+X7^FWw-.ZI]:NA _Ep:`xJ>} bP]&ҝK-qdZ;{Ja`3VRʪd&Oz;/^9cwJ}(ȃ{a4YlWJթ/?BΩC1L; $m5'%;ͨ1<\<\)k.svTˣ+ᙘa]Vd?,N(X$dz"314,5YTamS9i")9A=XyK A6l Ɨ]GԆM4>:SqGy cΟqK6)9&Nhovg⵳_D k 8+ ˉrEilbo=dy}9cQH.Ogp c**gK,R 1 )"%])!m6Jdzz+mWxgr+~}k[ "p:"Oa7^_i Y ;CDVoW3KunX35e|x 5pD2H7+&o\|?8ϢfcK|Έ!x!kdQܥy?.SnyTqo=J <݊êoc3$IX0PZ;`ITjFΰ Lmu2PJ"j 4T^b0)o!7DD 0~D endstream endobj 534 0 obj << /Length1 2382 /Length2 18460 /Length3 0 /Length 19848 /Filter /FlateDecode >> stream xڌP۶C`q%44,w'8@pz{-{c9$URe67JہXy*ff6FffVDJJ5K _@'gK{;EF &ooqX8yYx^3p @K3 +rrx߄04vfb;Yt`?Oz22ɋ hJ]L""/f+3xV\΢ddob< v`;=xb?l<M_Y/HmZxWx'ju\偦.* 2a;s4Yhd 2רk]fciTwB7|i8o|hv&.VN"xbCS `bC|fN''I'IqD7IC\&?`C&?`C&?"ZXkQC`-!n?֢ZTXkQC`-Eh!?֢kqFgq&!vi`2[.T3KDewqG`G?5 X?\?\?\_ML2sC;Z?be N<i;˿WO`KOopqqG~?ܚ4܇?blcl[h߉L '?v\.@p7]AVp?nqL@n'p@kq h`olUq_+Lư;f*-ײS#*|mMfӭp>_47B+$/^ǭ۟ Tfv 2 y8zkXCBvP:p*c޻ H7 .*p"=2DGQg>b3F"GsV'ׇyJ5V< ϸD73T^"28^EkCKE$9()k h5*vu],;I`j!̝f,'25:6k A )cMvq.LhJX(>gL9«_WqKlܳ<տ,|ÍT l/mړ`rm!,qs?@XfӤ%Ԥ#v,C꯳R|%BUhi;t vE;CmNoo3#߳ k Vݥ"-+h)40|Y?= K-zc $].KޯM4SQ3_ϡPRP!8WGA/yV${k\V¨0Ɇ>B.))3K{cw}hXcUXZ;vLL+_61qMT>I3 eB]{Mi2,Kb胼~-AWZIrdK/PڛwƜe1IBwl f5^~U@)źӵyKu+ 1/h!H;vˋy>{7멒= !c_ ( S ” W7}j☰xe1;?Q̍LFbCȕ}Ś995)S1 Al3&n~/QCuJd0ƔwwqG#-+mt-nn`lH lr_ljf,P42Z7Ɯ[: *"|M${SI4Tԍh}[@VJÏ,y,v࠙6@n`[ 5Q!JF~LUkf$o{.甊k+w3;ȖDjul%RgmC~.r94Ddv«~?.n{W]/Da%FOXxldD@\W ,SFLⰃX _ GkN.zrCASC|~)>`rWuc{EEuX'mT趆O !78ETeٞ[\1J,"pw=߭}pnr[ɪRe:#{)GJ_t{ԪU毚Qh~:N d҆/Q+7Q \YJdNUh& +Mb3Xyci* :E/ UquFW(>ħr7նB-pF  $vQuD}0Nv}/GNh!\!ilq Ԩ4$RlKU[M:%@-뙔]Lwy)[[aqOxhl|L+7 O<`閣m%`Q+L8xd&V4 b=W|AY $"}Hi0o%CVhLiCQ9\INfF6 K ǓZd>Ctj/la yٽǺhR,)eZemFi]tgиdH-nOo_A]uۣV&O]3]3^HHբ"O|^:Zx$^ W.0 nssT;$U 6<§e}yiȏĐ.K_^ ZS8=R&$o>:f]gG0~ns*x4-=tCPgɐwpãE>'e<Z-&'w 'Woʵ]aCy4v={k\])/pCI$װ:8M*"y&(-,Bw#8Yv_M~bP }RñO6X`(Tk–}n ri,dț dRG@GN&wrIߠmlkjN{)CD@P>[#/q ?0rjpS nrSo%mOu!\]w~ЊD ҬrU\G]dFEu'm.2|LAj@w6"77ɩ({`4}`jT&hp٣JiMӋI#2,{ -V5+zqHɂZpt/ (D!4SqRTqÆZ zӦ&ƆD9l#{^P-B>i+\g@mY?FҕmWaԄK;x0^WgWKȕ~NWlht!$2 ۄJLqyVaC߭x#bB,%MbUN}OL3^2T0 e'AR^zo7NWTl-P\zcnۀ,Oc$xg?&<ȢEZuY;auK9uƮ͸gϠN Գk9d׏rنϖf&Ē/ٱ|lၣ9R_:}xvSxBdKTTy\b7*Y<ڗ]b- `J'Syѷ?퀚N :{bhZYs8YՀ;-j^fӧRQ9)}-T`9չwt'S0/24! Q۴=APXEk-^&!6\.@Q96'ډѾ?^~ಢ'fg{!8Z~I*eQ|2ӧqH(I u׍ᰡfvtfCq瀗ᢻbaоuն.+'JГǔUmXSdw{wX2ǟC]3P̅+M>"aVٽSbl$fJGKS' 佴j/x F^t8}{dgF`jܓM~kRf* İ%~u%uS!<\x]I'Èv~cB}MĜQࢠ-=+UKk&UIx}M`-<yy?Cm V0(mcx(!ƇX‹_9] 7Ll]ZBxR]h;9Hoܣ(ߥz})!0Ifc{bv*=S} x.ty燦Y#72`SK)k]"N]\4H\J@6"ҳԶ!i~Q g;5eu>[bXs .tw𥤫VڪО9G"Ê:&UNSoLWBGXo'H"2bcǤ{fb$ck[2'C[1/ӴrgRW vw |G\NU%DztS&'Q㜍a^a}.jTdYͨzn?‘+G<[{>“Q,u|H@2iuS,n<xXr'^Y1Mҏ4ly uQ3Nj*}eQ*|R A>yŚɞ|.;[2uHK^]Y[ᑉ4"bYӪ+!ġ+xI7ɇT,ԵI~BȮ Q^-S?u/#ͥLɃ,\<_cg%8qFE1WQœ{Ys0ճ^iK@97 V^.{7'$6T+FU<[r'$$S n)"RFμH|KJ5kRq{D"RG.^+g*'\hdf! stN.'#6\̇x虙$!|J n i~>Нj}n(HB?!q {E͏ 6Q?@t5NlXPE: {$hN!?*yO1NƄU#]-^A6޹5頻VN'UMA.*SU['/wXC<Sr8y }CwaP尛PلBF֪eJ4b_ԞBW~PiHԦvT LL_2$z Tf D >8`WsXr^VD.Qf_HRwa != tͥRY{AΟi# sO$$;ڧ쇏n@Xߗ \+PB ) :+EzS#6(-4K8mme7O:ּZ&qN~>K)|>Q wa?c ۥks~i>Gl: JSFzv:DwW>AmEΛC/~NЮ[Ͱ}0o'"'b,$$˧4(ס'@_)z[nTZxG8n3EI~R]+FkQ+#_ܭb)򋺎,FO~XJ,VlsaTPɢNy]ˈ6"^j8j9y54ٹ;)Ɲ{b 9'l>fv_pI޵. '<`ݺ$f{ &v-\;*Pn@~1V)V/LXňLNxA 9X0ytle&Q7{198Ǔ0$:/"d="Hb JBV8]&CՋȡvQ׾w<ΫT`Ja.[ms%u; +`%AaBsCkȾPx:fh߉K!Ey/^`e-$(͡d9/K@l,%=MɿEw-]cݾIY]wee*%^8A~tO<_qXWbaS19쩐~G<\ȋV]+s&Lpw t( ~}ÂNR0󁍿w]D~a}p]^/޼ˠDۢ|Q6aUqXV0k4-AA# $)`ef%&po{.+g2JqWjC=&?ixZ.Heod<'g-uZCR' f"-|'~ɤTg'f˼4߳h|hd:=4Kggˁ}Tz2Wynulqq7LJ7+V'o]?(3';eIJ- Uש %FS|v+|֑zrjƮ2kWY8נPfֆ1: E|^I12rk%GAqH΅;eE #5[c \OF9eM3b\%y}U]"a(itKB-=,dw6|B#@/8(؁g'E6Ll/y(:FE$5=֒X%tyoh>-˾#S+g5 let>5ǭIӄM$6RJ7ҹB%phnMԥۦbBCr5ir7ڣݩnۆlayH\WTwJZi1Bi7請Y)%Oqg hc[ a95c sMfVBOn9HLtT.M85wPjW!L)KTN۬R-W{L Xg\xdN{, 佲И*N{^Ppj3BKfAܛjM+_"ha˾3V`@+z95m /H߰nlxڋGpJC7>E;1Xj'TzgG#Q-ͺUkk{sON{>05a J匠.3+@gdwlā⊡eEe˶߾J^S3 CҜ$|u-ğcE(WC߁XAb?) K *ÐQwf+?O(oɦcE8^ἑq*g󩹔wd g؉_x"i1Wj1{,ty,ډs>U^(wAįt&XC$U#./K$@ uj`@:_E~PuU<|>>gH/94†GgAwc2tS8IM%~waT'|[иCP-#3Xcʪaol FO:st:gXVk:"11.Ay7qy8|X0o{jD*gl|EԚ4եBY+^|ZHtƆ I~rL'?DNHH8*J睄#r/RJt dLp&|EV[ ai:1Odtxʽ|YQ.`uIM0p誈̪`_yއJ@7z: 5TcʥָqOѲyCvTd}26=La/Tq͐BHWr.#lԗXx(/ёe͇’,4{f]AiJ S3x=ےW 㷾ѰdN}AxײTI2_i*x` OtvijF.8b!7B`Ha.LDnb|U͛Ӭ3#Kxi1=:#}dɭj%G9Jف'D#S1g3 /w,KH܎ Q : {"]aFJ]*aWR `"9^E c4zTS>*OlJoZe?x0:BĘzGߩThcki\} Lq̾?zi&ES}S#ZׇH'xT5Ru >#aJ^xteLpfa|*"?􉙽Ҍk[WQgkd}NyA.㲑 *cO<)]=&B9beg<]S 4Rφ~S0 ˜=}AwhkP/Z/ӥD'!MSE26lRLV5TGK vWb1RhUd)> 9l&sFBRtL3Ig)4|k6sT`L'yIFr| Jpҙqt>Bl't˻h])% B4AA>QuQxѶ.[*E4[89 _Yo (kaJSN?#6g`1q"t1,;׬&gfGL> Cj1`kR`dyEQ0[M65mAܱB+UB.1˜zc )K3c[?bB`VꏽRD30$Iq2E d>3'oxA*Q*Au%D-ǩ%EA %U(2ZRN﨓)V ?oN 1d}7b |?g%sҨv]4yP\OVѽN3 zV2(ɹ]~¶2mY /x5c5aDS9whlT-IcjYM;|j0¹EAّbz42g3# 8-J~hJ;sj sAuqL5ƞ_)CAlӮā4NVrXPBwaKVٗt(+xC )ds.!Cg{*sz r|5hcsdvEcoRfqy/i"wcyLɍ3a?l0-'FI ^A(>U8gAGPJ8Tk0Xy FzNBi+7g $*d&Mh3s%IƐ|~0z6 GIo}'wď),t2Y]BRz/^C/4_I}7d78H/e|J$|m76ӊ4->޴y=Iu!Ub;X&ce 3?{1)dLVBB.^@1nZxjJ<l$|(,)x>ih}|x0so 9e:L\9FAhKܭo|Yƣjl0fL\Mq,x/*e!;)L jHb3|7D grp5]\ojͪ~~'RuhJxt~eK=yKM"vg*d9GG;P1FڈfmT9rxb>//MK4Z39RpŇZ, Zw=Zf1FcZ}хqE&+eۥ?oND0|@`A3mJ_P{7u2ڶ<'D')7e3?_KG&o\l S9O8sD*-&X |rؕ.WҐ[\sm>` =ѐ-*SeU('mK @$׶Zerr4i4Q$'ҩkE핢#ԋ-@ rEl^:΀Wt%-Ď_jE+۪|tDG'cۘWx'kzy e '^;QI>}Sv]Dm}sPrIɳvd-ȿKoS6}%658ŨΠv]uGEz`i\M2C+7i!֒uG !?rp.irf)dԞHM@~iNXu+RLֽZ=\ѬcVKkA[uZD_D 0Tiu*m"ެegmTů?PHfB+bG0RHuHVܞ5R8EDWʽ brVE5 Sdrf&>Ub-_wngpt!^O2SaQ6QwqC"YUe)VbP._J,~9NKx't =pM KJ9Ic'J(sw#Vngr,)e#X#7^r|=fx܊8.Z09,jHN9^vm9nJE,JUO^Ⱦ INـ *$$)V rtOIj)j< 0y1}zd^Ejv',gVVe=a1o)˴p#v7mT+&7"w( *FES-I@Y>Zd}GNGX"2sE w|nLKuH7v9/YM|I|q[<v?]n`kǟo]_\.%Z; Dfe*75񒇉oΪ# Uk pת*QKҺK kNDmg5ВA0yINy MP4=*@}zqhI[d@7o Wʪ%DT}Zs.[}DdpIHW-T$7t}2?s=1T 5t9sBoh{P\e^ۆ\GX,^QМ2~12z@!ICeSֽq@Kؗ1X3.hQVjW.z.U[z3@tmPXKr _c}&0_,ȡ9os=b-xS Ս;xJ M@\Ʃ-ٴG{E{*S3A1p!a шyGys^. iTNBAN\s$!ȧZ(%(jXT[ކtYNؽLUiLq>#A J^d _ap0y箙]k{sIAc'Ϸwفè꬟ElLE[¯ݛE ,f0B_M :#/Y%.6 ݅<2g? "Suc(R0 )NOUE*_cv./h2ĝ) A8ڲ X&G~oF8܉;kD -[ZSW8]IZk[wn50)p.6f enQqaGL¬ ]JHV>kٯʮ=jI8E9sE(X fxBx]_*o?>%L[]AOo) 6dlhh~^3PgoL 4s,s.o\wdn xazG2߃O8\e2& e&=qn|OZb{ohQ*ZQi(̜B~utn`}tM[(T jUpR ⥕Ądh| )/ߞv0V#>_)Zc$TՅ6L8 A=3$N01KtQ׊80 %'%$-IK P`7kr gc}~֍p).͆ck92 鄝D5jxoC Sj( O'Ԛׂ@r)/l$t*^kD|'.hw4q6օr7`'Kj ۤC-HY ఝՅ* FEv;gv&œ}e-sl,- >Hr͗ǽ۱aW,5OsWBBF:\& tr8hv$N6KIM`}\>Z,CE"|lB#yhkl7I |Rc/FlQ15dOT֭; w0.M=Թr^yel.S*FyZ?+@CgI5̎O1]G sO)P [77N>vD1r*ßgkiDM|ڠ;'?&Mv:SP_(7VSQJ/cZ]~u51  IFSbp}ٜ=D^D58 ^D #^f)x'0.gmGCpE XJ{cf5G)/i2#MnjRo4dd 4:!ǘ)S5LR_ҽضuivV|-Mn..8"D!%7d=K:1U4.2BR,y[MdJ Nr+-Nzj(GuЁm=M3u1ݭ>5?@D/t 0Jw n̢zk4Y({Z,²>o{u0 h ҏrA@'}gJˆnJ4\\"]}l8 f7Ciex;IޤzܻM>rRQdͷg=o^[&8ʠQ|;UT<"WOPStKksAǢh'jM_Ґ=u%`j 2=0L&Ocd@YFVvM;%ڥǭDhV/BKuDqv|6kәq;`Y4w:yRgJ!Jl`OfͮLœ\mK11rDsBOIB3vSy;t[9xZ(>hѕ 4Ț|>nH{9Ěnw] -fsՖL۠>N}ϡ'yqciI!qpa^5!2ts뗜Y|ɬw|3R !m77JPcuԵ cP@3;}xkⰶO:#@bjcv6l=53tBb>՛;B(R(k$gm &FI#ɕc{-> stream xڍVTS[F@JEr(= UPzJ !@$B DTQK&Et)JU鼨{kZ9{73{fF'AU}@AfH'o 1hb01h@JPi9C r`5t0h_Ek p@"04ù!P0OG"pH!p `(1 UAPGp~ Pߍ37)" G}hg j^g?"_W@ŠNWDH`AyЁH+DzbC;ry`0?Dp]8 P6`Ez||:JCdu*Bq>_!8.H˯}h/B[/  ,@xWr@/oL?\- B. !?w (pFq`F&E7!Aȯ+;1hkke*C**/*.KA(T\!,B ߱h X-`/02&-D '@4WYoT?P N/}} AtD>OT#h@KDh FHU Fa|>((*CoA?TG1ο%.% XX 0bN C 2tFf0Ccp^~SJ`| $/Ko&41_Jeѥ~a% AQrlx.qqGD(FvsθuA!% 6sAO}ZlXHv]|ėH|j% [LB^ftdړ[^R+ǐݜ[12ƚ<-OdT_= {]^~j 6ޤ$[ZH0 1N0P@6edi[H7LI9YDǾ.]}>(hjhabwCզOĔWD?퉆_IF+ZF' f'fje")ёqYmJx'*MO1W0?;dpp4':a!j#UeX;^x5dhԒ3 |gsyDV-w_¬qJa/uc~UAS2? Zerw*LI Fl]L}

    /(J&:}5ʗCc3kK06/ie@(J솅' wEBϊ'<4;?}ӬD:41֞ёp]6ꪑ{ʤ&2B$ktTV05c.ֲGca2۸Yv_N b(ܤ՜ (薒}&U !?yL29wR28e!RfS.IEWZDٷ1/S>qK^TKg>D&}PƎ$Ws%2.z*.u*_"r{KXګ^}<-pj]H톆Y1YM0W$e< |C}Bn]YLBZ}'?T7ە!y. if=Nt6'C@x(}!yӡ~B_)juJ/)~^ZC(㳲+r4>F3LPl DL2y[uX*,l,]>F4%,fNt_| sH^kV\,m7͐>ܴy*}320XO]Q<r1 =N'6&Q"T_kLysV5Gw1[GJ;! ncqW7+Mʡ"e^J˒Rzn#~v()!~ZmKuk[RK7帅5Uv^jЃoEdҕqJ{9)a27LZdFs߃sP!<2+5ٺoZXeo᚞kk[bunĽ{WS8tD>ިwKmW[/=jhcY"/%r@yvn jKl9kEl]eSW=[@vRiTr]"uXJ_n'V`zx~%%fPz|ʁf6hJPCHhOo1`y?n&}h^2bz'zJJ<2yV7 ]l#i#AlM8>BlўOpbDb;sϨhn-B{b樂tSsɾ>PƬƞhpЍMMԋ /ݭ"ڝ9{lJ&8n78)&P{;j%%LM?zߍsHشptNgA+:^|B oV1MC76#;-eYgN=i@kBǜD5]޸5,#XTIAoI ܝ':]Űpgc}e:/Xݺ2zg?xh^vbYW]"s[eh2uӝHk#P4ʚ gYC:_dq$0Ĩgv+}B"`1)`uz|UF>=3RH̽l^BiԤ/W.KC/:>#;i}~Ӿo.p5Nq!0.9 ]fA?gδ YL>;"bX(-Ui|SM|)@Tm9V,=7-Z'Zb>q__+ϊF5\L.r%E}7c.W$n-Y=;F4x JtΣtVQ{sHT7} += qP#J)ȒOGd^Nc-gNVql-U+'`ޣK:Gw, bf[-#GolEQdnK<|sOJ8Gm\)UYN֚OI[әx;nX+|SXct_f,mS9FM♋W̞@ [Ո̴ظ4NJ]=i{YZ|aU:X]_IA7xJu,2sJ U{iۓT}Pu9k݃"Žyo. o7+z+Z &-FLTbꘪ \4}ϣ43t%9r>@ps lF+[tS,3 %͔~3KSY$f𢨥Y|i|gۘ`OgɼhWt urfF_s wLKYD͍f МĨ_~|:k(5 Z|Ʒ)yp Ow^!` |mv ꊍmU55Uk;gWHwcJi'εimݢпѨrސZLz1^/[§>͟t__c8ZzGM{q̱^)*N E)!"΄ VJydh7ޖSP{°aYc0# Gxh 6?^ >M^t3K]@9O+r=B$|7E(c3Jy*hQ;Y}藥eA7^è~MD-p3$9 x<2֐LN\݌~yQQ .>D6V)d k7J!rkXJ}ClE9^7~IS%cL)e-ܟbLPRvY|Թ2XQK5 k.c2bWlFnkVZA=$'[ufen1U1;6އR iZ9~JKmͷ5[u"\<֗ה~wqQIJ/x&6In288ʋNQ |U%|8R "Fc_"C[E[o'E.FLC[O87Ih4x.爠:RΙˬ,͎1iaD~f]JM$o# L|V*뮺 s9Ɨ^RT%sBL3*A4_8 f}|Ҿ"J7L^< yQ},t^®z]Ѽmi(ҕ`5gff6ߎ(ǝ8A9Y*0Pքf|QXFs[TN[*J|e5||Ymˉ\@I2c7/TbaWVgR +&J|VXo_(U b|sM}E N *÷dϑnP4VcQOYkS =nv׬]ULHuޜL snT]cλK1$kh`]-YTo]>"Jf q7.mkO='VG].:?G?]hx{X)V5pN)h%ʫYM" ,߇z:ZZAf% cWeq3$~f)0)q"(/IUqkwMC^_N"QB!e^$]vrâ\ r\iĸy:#YKb} Rlq=,k.$nϔ n qb^v M x8VET/F@:{S$Em1SI[,(*LJULrSnzi=Nl- Gb76:+w)w 'gm-Z?* g>֣%s{JKřL[,ᬃ@Cwb$>D_]|pc˹J`izmnQDVvr,`I\ay'S-a}lV{օX=A 'z '%o=*6i=wNJ9Z7;.8=A箿Ty]:#~=XCO4H^EpTZ(X{ͻA%C'J_bcE}#XH$f7q_),&3"^f݀'sqe"͕;6ݡ2du=7}ڨ@S! Lw}R%9/=?꽈͗1^AJTs;?ERTTu 8( endstream endobj 538 0 obj << /Length1 2672 /Length2 20878 /Length3 0 /Length 22399 /Filter /FlateDecode >> stream xڌP\[-ӸK,xpk5`A[pvU[]սǴ5\c4,掦 G7 +@RI΁DCafۊDrqvt_dIÔ v '#`gpO@ Ppt"H::yX[ZWGW:@bmfP2qكW43;Yܼ'+3 rx(؃jaeY@ws 6@]^r;XfF)߅J613sw2qvXXہ*2n^n߁&v|k;Sp_M2o&ӝ+~Y\ ]<o$7>  `cupt,]~'7Mo`xlMIb6?&q .sQ\ 0?E\ 0?Es\ 0?Esysy& 8 ,,J&Nng`^&nL p{.&f [_Q>~8 oxU܅5 djL0?/2@0MM\#?\_7@nϚ?.Z `/ XVNV EmnܔͿ x8 oS>{wC_np3NbN෸  3kQ9"x5gwGE;{5> xT Nr[ǀ<5DnpW:]KgY[/1utW x`fR 8_\_M4!͏W"h=;iB7@)8byvzU, ݭyT2mi % )#ֹV+&$8_u2 vBjB]Rk Z_ sEk.)3x-#v>;jw.4cl81krI(2ϗּ/xL]U_UxЌ/-'&weԗay0{(Dsv:,5@z^> (%O˔tCʦ:U1o$NNt)o. 0O )OL{ȷZ[] V %1ѽ>Ыmy'320ɭnCt2ePF (5 љ^."av%43_G5>.?oJ&2|rͩ^a'{AJq]D#|:׃Yr'B4fA@/&hIuL؋BqC8'lk,cR[ }v'u 2Săɽz6wLbuF!()[ҫCFo"D`EŔN$d[uQPPU/7w,I&X靺ett]b4$p>80a]5&*Dbž1ئl]Ng!,ZzOi(Fqf ;_IW]EQZ?4 UٴO-H86M=Ƨ8_YR}j>S2Wў ϤkQRܴJ:jz.zZ]Ʌ:ѓS>]dN;{Љm,EP WWV5#G97._iNdP !>$OgK[|a[kViތ~ 5&v5-!RD~ꓷQj" = ȿPAz BT:(Ecq2lYC@N? G|8n n[iR|rc)ybckLdAh*$8@TYqLdo<5^;fhEm5=>1^j9.zPjrS%~+pa7:ْV+)7̠!%u\Aౌ0c!ҀNc|u]ą'_g] :hus;;zg7RW=i\nK^u@oQ:x>ahv52cCws *Os|}.nWXfEnw|HW H $:&iBpJ&Af< nvSՎh YX-t81` :xkz7;Bs*dƢhJ1v7])J"v#+y3xpFn } WY_?ٺKxWQ1TMLvR~^"kW0ÜpOr q+OO\8d~V@.+ûDqCLu;HڤL80]21'`ڹp6ȿjȭ'ȑ'Aܤyd&LzC O*VwhQw$4mhvm[?T٢F53N[ک.QKvV~kH q d3SHh3[ٖۄFH$mo`7Z~k/z_v1G+n'K>aHK#9P[uN.u$~AZ4 Z{I} һڊTYByTWVwq!nbOi֦_7.71WAmI;Iz* 'O!hM\nω՚RcvRj7la%(Ҳ֑,K$15;%=^x$$eV8wD- vGav ))TsΩ-w \Sia 6nH5o(6}h5bP2i~L 0|Q>Shy;#4G>,1 P<Q):Л;OXٝ试˔p1b\ { ̫{՗Qse`b&$NԟT'Kt '>4фG]B+j&7>ظ_ 1Q,"Ȏ6@'A}y4ݳ ެ_݁+ʼnl=-)5 xkYiIO>;lN#Zܡ$5M#&~Ab5eH^C\]u^I7yߌ{ m6\ճ.IԄey&ۖ׫) #,Z"j20a`W> TeUma#lQ3ㇸ wLhm$W+z OߴTw.Nn2HF%Ҋ2pL]"lR[o݂DɅ7y`,{CJC 'lޤ3=62?BJ'•>T9& %2NH2Vjnc-vD}^I AԳ=5zkA%1;p{S;Ib Pn]bRü~x!]+ _LWKe<*[OMnnNTB>+i\r;63l6EAՈ$loY n>eJ̮W1>@,lYj%v 54:L ` Sn`Sz.@]zfvSfO~ Ag!G-4,39E7\'+> {7Ѓ>VmmWSϙ ޷YkgqM8E5ڿvBP%yQXcn|6JxO mm~jF|KbWm/_=0o e%;e}w8d+Tf%VTwo |6^TK3ջե bx0RA' npm^Dz3AdXF1诳$*8&WF(Ec45; l =_ WbFZl'-4 eqTYL|c:nn E ;7cbC{'sDo>Av\P9;nd 0֚Zj9!(T!ڒIL#~E|4Ӱlt'qGTx*]ա.pT cli6+h*Q{ѕTz1Sv{/bdNY=M#H__iFjCcs^G+:1]JNq fQ 7aβ줭A6G)ʼn{~즭/GQsx.-=. 245UimJԝ^QÅ{@H=ِV/Zd@/OEt(O>2)Q]c!Vn_{*=2Tډڎs:wL碔ȶ܌]^yW_yˋESX)_}ɛ eZIc3 .`Q UzF+< l̤R+*) %Zn-a)_=>B%$SW!J@'T!~_BIw zڒm{N Xaėj/E3G6t&E_n8Ql99K,t^qau|Q5i^ΚmUͣy|lcUsӒ qk;?P@~Ve(xnjqǨƯNO 1TC7bp{y&jK4 O#[۽.Qම: x~")T),O=+NjWmܗ5(':|d՟;cΤoi)﹟`˜>պ1vpH[MXz!>ưQs0rWt~+r)cqo5b A)Rd>ꦤ>HJB<@/*L+䱺 f)7g] >bS|ucG!ndE1l:*Ş 6mkoQb`w'N6o@^ !2|H؂ٌz>UVD9޻aV.ӹ3Sru&5z % JrOTty^ߔO&O8lD .D`}xl~Q^/6\ߋpYgqGn%YK %躡)I4c8PgH,Jx"dqFl)4,CjfW(0h/AJcn4lV)l;LVq*oߝiI>xFiw`zZ,4 1 0rdg *omkEWKk3Z.R{Lm8{BR,'fWoʴarOA%BK\[/kzߚ/`~%'jjhh4,1BTZltpڅlvO 3 ~Q"Ͳ0jQmzQf]kbp@b 5仇[FOaE#LvҎr)~n[]½ډFr[Wc*j Rlz?վ/rctzz\kg$ #cs49p )xY.[umWD~NyQje[a Թظ92no35Ee %ffCX"+}`9붚v/3Qt {U*D3C i$bZ-Ĥv&9gmd s]A!l%ާ5~'|c?>؛K9( JW;ᣵW%!?*Jr|$ٳ̆gXM,g_5hH c9;YQzNG9ihkC\Te=pG>eC:4Gek4^>yyY[ _v`y6 ~L@l/yښdu8(0S}ERxq X,"obNA:<0yɔ3[s*<2*rř@pJм" g`ښqS_MT&HY pc%;CD?/olbБׁNg=}j|ٛkF;~m酪B:6]6612]ß>POώOJ xFClN5 ftS }Wrimojv<)_C[wx}*)"IDY37mQ?jjޜ+k!H. \er-iũ㖀l|1cBwk#RQs?lt_- 0x%T>;l+|{<b2%kԆh2ZO״۬V<G63p F;|USR[lũJyHw:Ka-%йWN| +R 7&_ :fLa?gpE"R. w@'6)~9&r2!"gZF[* a@̰" #_1O;&)3 Yn$#~Mb4G18_ٝ l]j5H 7rV#2!dXS͊MknjFt-ǁk&GXYS/f =p# F4s Av+@<1٩D [ Q>u} (R'Й#-3{QeJ}s ޲*%S-R39"~113/bu~ ԴՉ2c<ހ,nS f/~qul m7׉O+]|oe+!; +-A0kCEyc΢rF|Umv OL@zD`^8?'i)`pMsK S!/8 R#Zs>i܌f3O蘝I戝@?Q͚ė7ԍ"|\`$Mɠa\ptfl^9tJt!i濢.2s6>KHjV )|I(wuZߢ)q3=,Yg>6KAfԭ!W2;Ѭ}CndRQm0mq QXZGv% b-YHdq B%޿zF'{ٖQ| bGЈ2/ {K9ID.ZFk6Or%56T]=ѐm^4M nͶR̅n+" K-+<ۿzP:f])V4`(4\}~V Wl L1=##;8Зp>2:4wmLɦN,Qs+mYFn,>У1<ӹSa #Ha}o4Z !';j\_d3$ ٖO(U ?%y%W={^ .AhVݝ{ubq%9Ub©p5H^#_>ISZ(j3(iW .pRJ6]1)#T8uMˊE4)kWT%99w}˿E0(1"e13Q:ulfge<(`zĈflw;Ѷi kQI4N#O)f+ֶxd/J-*y8|LdehNrи$ "Sӡ*ބ1D816atm`lI ʐ ~[(_պo!&}qSm>F\FbkJLya|Jc"9Vv-#ALOg)r̓7Kw'r]$H (g.?عȧ^` 1-PpI 9nM?/BҢ!TB]%ccU [k:躇muLs74 KR+>hV6{몦fQr!md{o_b{Y[;u?=[kbZqzȬ8o+??ߋ:b]D 5sb}٥֦ GɾrI#Qc{[(}AY'!&S[,͏RFw1st:reƋŜ-6CF/,Рgw&/啲!8Op"CXF+%努h 5?C4UlS11·%vtR.:R,_p%s7N8"-qg"~ #G Z.%+IWszΗKkRpɅmISz\,\eMkQKlJ##\o/}i7\{+!r \е~ ^o( /B3EMry2#[}Q9 s[uɷiPagn?/Qp$ŻRDF|_ >E3}‚5Q;sJ>q1ݭ4=;v9fD2lH۾2dDSALE {L#JjdhkOeY#+JȩQ/0(SW!3By~HB GV²>Fb 0xB3|;O~?GlKP'V-=' U ANu^SQ{|҆R,W V $ƟE}ms-;UVB %bim@t`%goԃmHg֏#:SH,=wEMtM>8%2%OT{2T6[)%S&z$D0nN[lD3#_n(g"78]FvLʣx#Mg措>=%ۓ2P Pާru@#ɳ>TaDa@F;]fJVnI}aW=>ɧUG6Is:bC_zM"ltPo׷Y/;i&z|i$ձ$NM4x̆oȩ˥KOﯵ㐉b"K~^x+:4;! ^i)fM90~!1`&\l?\m^rS*Zlp1akv@ZqcBQp~&`0t$%g C 9Ye% |$:m%RKf{a5eλI+/U\OIBv($nt@Yc#}H7C$(wsQ|SN'g=H_Μx,nB8${F Uz3ܓbRaLSY 3M7!'1ĥ#nya} NG G ]:vX BgFǃ*h5S"X҂$NuFBi'c ckWTbxF.wU](JuDexX^~qdOGzFbV(7WofYhĬr]`)Tҟ>5/_^ "֕O}A te) y_+m𰽲"XL sZ}+D@P MXEl7iۙ(X2e6OO7L ם֗w Q<>j~6NRP nVMt̞o Q,ۜz~"q2.czOݎ_vbՋ$0>mCQL#ݲ#3-4jʋ]X w=5) E%GJBRTՈ]rz0l,̮zD.xtWcPaJE4X&5'p"~եҧ SHEz*hk+;iPFPBZ8a"pmvs+M1ɘL>=9D\jt|&\^~V%XWiCRol$f+Y=4plJ5vPge/BS sr6(+K f:^/zȅtDųgw.(gㄖ災s+tӬF(2?3Utk"Tk&B7U$7ehBTţ"9lVCpoOkX4/l9crqhN}п*([MzH6hHdk̂!@ b y7߯(.#F~/QZ){@^ƣT!)/kH" k"}qsA)fuC)u%]P}Ӂ/:bXcsE>Qz5s2g]5^<֛C͈q%ԎYMwM/|9؊3#L R&i@܅e=+[ZxXRڻȏwPzPҽMb.v%Ps{gxE*Nq*.n"{"tU$ s3v2ˏԏo2Qb4[>bmHPYi~akU9}Fkr%)73KEa}aeun5?p"{EeB9j֚ ?Q2練k :;p-ofpPPMBU~wsvm?kp) m{50yNLEz-ܭqVL0 >x zBac27Z QWs3 6iR%M=ĆF|(IzAB/M A'cۻh* kn.vvp6(i3eEEq5{ngZN6ާNMPuDCl!llOM@2%4 `,e_+jQlh\g*9 ߏޕg$ pE"m$3J@(ʿGٵHzlmݴDss''t_ȭiDAn秹1N { s]wfvBϳhb?д*No/ȓ񳄜xHT+D^v{ Şq\gr6K-խ6dYbd%֑ګߧDRp8S?)z 4m08wrDHeSjZyd$Ć~_k+s SYjeg;Yv_[R3m" JZxwQ 1%c^u #Ah/O8%igZn5\zeqnnAf,1ly@w~;K ٺ_l*mp&ܮ:5Y+k#+e ~6LCy駁+sJ'|79[kPɎha:Rȸ" 3 {/>Hfm&ws~T@P#O6z89kMsl JmpJQL1p5Ҟ:ĊgH@il"Tj/+A;J*ӭ*&'!w ;[D ѼSߜv{V<7Ώ+G{G_u(SѴQM&"1!X19H=TbB傰e*(Kiۼ7P׹e,ʹtAk7k'iY R-m  Gyu^{YUz_i=Yl6T;*=Z v%#X$՗v詰>kؽ1xk0Gj.;ֲd=%u|]$=f}aa>c7Z @eZ?l i|sFpHsD[ޒpX]epmfscpY4vXؿEU?)9;O詚8c~9* ?1=Y㠎o܁| .c;PBd~SO{/9Q' wI~@vb 5ϘKeK[HX0{!4􏽑Μo&ӦWbrdwY)IIrLP]_{6Gs7GuEjH:awmNPt:P[yg{^@$.<ﮦusn!$E7vf]gJ%wU~%+iIB5 痵%d_֑OemrN oӊH}̬~ca~@K1v"}5famR4M4+4weC(@ Q>D=֘LlVŠi ܊oS8YShN QLʓĺw;z dC+!YWҊW|"峝Hڞ^m\1O̞FЃN#V>RQQAm}v\͊iK'  IѷE\GЉR~ɱ ҟ8{F~"e6]Tm4Gyo3 4)U$[ۺFfp0n.n83Vfkn 6շ(%`[F5>݁,vֳʆ32:XŠ% FopP3iۋ^;%R#jhcϢ1G9\'טcq~\TӇ"Ùi`EiZ}ؙp_R Q!_]P9(!-(ҍp(8v}+myHꂓq9eT@~ᦘ(P4h]$z/Gh<9V4tc&+/`2adjWh-/=E U2PP YlC`U9}v ?`K P.Bp:PG)i6}(d=| bhe.ݩ~eGem3%vqw%3I&H]d*Y=P8Q晧`5;R资$du+Le&S J6ϭk ߢH~%Ysж֒_, R(|EP\۫BI( $.{Zb?FS: >v{*c֒#Ǭdku )ĩ@6e.Gf Z\l1l=1ךi1͒0~)0JFB?ɖ!ΊVs]`7{bFLu!.A25id {U8<_ j<a̼=طGgͬ,-'~DIz軄La,b0 AV",Lz q!N(.C#,u(KB {F˷yNbbBuPȼI>Pwx;3z!E$/p0jǣҤδ'%Q@"ˑ1;w ~|Q&ɼx>нgK LU˚hin~`מTv~M(Ur*/ɦAo|;9DZmWOpK2Re*c\N4W[W_c($Yn_ZoߴZ>*6A,3>wMmB¡t-%`j˸؍$Ů/ nfBꇘVN&;̄#ѩE}i*cđBp7wCqgJGhb쯡jmcq]o{$&4U]TNB0S4܅k:yKiAaȉ JBTEx7(_i_9|#׵2Ҡ.MżbM!֤ tpD9gJ){ w7ϑ%q 1s,:~CM#QNGl JGvs*IyGT2 }1ث%fbKtҫ?yۊ4oCj5`|-7ϫ2PticI\ >Ģ1p1ncJybS_:=@P~1EQ,"DXXҍ]%b]hgHqpŚfF&kru`dl;tOoRE[x('`*80YwyBckf~ޑ4*1x2&8PT}mak|;h1ģw;,B`zYd(oŅ\񅃋˕x#<"j,폡+cyUdC̏!/ƸZS4k'">84 /e7_ݰun:[f70wp뢕Nnp}^VG>Z/Qo"'uN?ĂbUwd4+V-m3&!<+|Q#8cD/4me핐9: =KSHLf) J W>(ti=]GVg6̷s b]'GQ}U99|X Y\> q> stream xڍxTT6"̀t "90 % H()] JZ߷f=繮=6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`Gzn? Lȿ @`PDxtu@ gsBBJ'W"(w=psBN|P|{/= @{Cahj{C<( 54mV;*#pW*P0ツ@᎐_c8z ¡<*0hmN`@()&&*?}@΂ ;3#@(G{(Op:8BA( wv k> ;k4p῏XPLr*)!|’~I1 @HHH .. g{>#VA$jO\ g.=`׿( /BgWݑ' ۻAahz*Eo9/nD٣ՠwB3__v(R v4@//p AGC ~ 5Ϻp؄EFDBhU:}~ (G!nP'Ahߚ} 9H:exe"71յ$hQ3glGJv54#O *"y/} Y(@ao(};}frD9M? =J6d$¶L5z @r(='aɠG+wa>da[C [>$I 44|MPꈣa5܁"'Eڽb5~Z,#)ɹZ-H %s$VH,;3EEyT++Ŧb4t-ԝA_X`.5>1_Iӱhb鱸yZe ?n}1u`;dIMn=Gjƣ*מGtr''cR~ 0ɚh&B\hB:owR*B1xR3Vt`[*$w {ݶIr8Ƴ.zlWǩmKV9[)PadK^a${׭ ņ 磌2_Ovroh4]c; K Eە? PƘZ tyBϾY]H qn;r^HI@F̹!)Q!MmBU~)Tx. i߄k/QY=i%mRw?>e@^ 5* Ue [_EDw-kG*m8іWN#[I,gG, Tun7lִU 4}i)v9;ðһN%|qQ)=5 ,Kf+?ۇ) OS{ҘreGlUu=d֜M=etpH9};PhF/j$ӕ*RԼ4l^&/us]|Ob 765lkW!",k; $NX}_`ja/TL%Y1Lz><7lZ+ְ'3.E4O-l P'NU(K9I1 iFs7Vg>OE W'(J1{N~z 񏚴!Uq~&Y䟕>;xz`1) T>]Y|1B$ZFv}W}YU s0'+ԟ]1e=²Zbٿj_؞yxj3ĚTقl#nÝb/؞spqa*ӘP:q;8_Q$KLIt eWX?1uQAn-3=50P0!Jtd?Zh8_IWq̎Vsh_+ Tm9>m_m}-?Gyp*f:%ԏ-1mL2`_yD!vFAv+/iUF4 Յ@(wR(ܺC<+{hC7v}ƘXH66︇:T-l8rV~ok&x+!H`Mm$5]_xib:6GG]|̯yAcJ rn+4pn9r''+PCĎ-(ɹ,".\̛,_-l+6d6,p-N/1o_ač3o+~j /#HM\b&;}T\ԗJxr+Ew`o^朑juΎ\4Pn;bU $('<-ȷn*TNzUǵf6e5V& 7[(=Yy$BPMӛ^yD'yoZAx@[-րͱtZOעޮ.*nD5n 0LB|E1m5GeNôɧG ۳oI~$Zy%H=?3vd܀ĬBK9Ka>K^_z5s`*:GDB. ሳNNIU0%Q\xH轧Q_ ʕrl?9LFCmG z.=s/*^1c=w)j#b0_*aQRP񜯳)GMOHvFE(ܵXLVo03m7A3望ɡVQ~=#tHٺ!NccIբv$Y'<۵Ģ"%jN3 󔲶7s˫:8!f^}2u 7)8iPݝS9 <ˬ?HT=;Bg}x@`aѴr]jcYiPY7[<#8[8}1F\ OA znO?<`y20"2:m}'Εz6e'}nIyg@&J/&UQ:Z8ٸOˌEx]h<NV,G9M`25Hx暣e(@fuEAJ4QMpLc_N}LN;mfaMRƣۙrDc]"rZ~*z:,X%xt \"c/1Oc46zU. :(P>Y]"`4[rCY߫>AZ jI^)cg(~; 3}j9+aRV3G]jSض?fIS{pi'sIvㄸlXAG'r䡺ydlr ~s=ēv]ڨc_')c0dr W} [JUճOTWPSKN ٮ^R} ϕuTqXTe2bj0eK+;>_˼=I['DrSFJG @29/֕fscpȵe&-⮟j)iێNhvByFd2} /^ME铧j_M/ X_iGFVuL[vU\xPGzlFi'W\7d\Iq0_f)>+NiH5xf ڴJcп;lr*Z 3:y\ߩm+jB{p յ 5ZbkF+PLClݑHew*4q.q(R`u=aWH)SK\$/dkm,H{?WwfED~>1B94sRImuJ)wb, 4 XLw[TX֛/Rd,bܽIm|󕭍qPzlC؉W/q6__zxvP0ĠVh!Bc{Ik;_:gnfizo9r|Uq|V+5V1S:{mÙp -LՔ^ABzmeZL@`H(qHEo5iIKukFSdh߭O}&qʢN8}$lQO8cP\KXXi˅U 2Qrc=no9jNLF$đ΋%f$efo;NKjA9żO6,^*th3Ҿp9)x[CJͲFzv }a!V35],|ˋIpý[V9~)l`eYѧFv\ I}序7宒k|>l3]JWCzq, ^cIl?P(߱{ss!Fg̠ NJexގ6/hg[箄I{}n1Gy+9M&w߼a8Igj>Tfd7ݣUEGHz&w8e|񹏝1{[hreu%+p'~*8EoYk-h×tgu0s@--Jcvrmz[T|`3iRY]j97hc4TܐPTVnCga7_}oҪ,9W/,L'Yd5_=SkŦ _fZ#x^7$~5˚0M}dv[0U;zQyAշ̧Cc[޳?|-ӎwg\(\#mbf+i'0C/t7G1mvRa4ud'y3"\V{\,Tnƾ CFo}f0¸"k d#*j{oVUK5M,KR|3);"мYO0> stream xڍvT6)%2@FJw`&lmAENETix{=;g~s_TTriXQ0$P7@@H u5SZ8 )hAx> r%`iy<Djo8蠐0 *bepdD~04 C0`rðPtb=|||BA@?)xfp)Ax; #P/0zz"wN7W"8w0 qp jX cPx7q~wh( qB= kD_i𷬎՟ s_;Nfݐ(߃3 u5C iM) :Jov{<!`pgh/XvDp',GR'; ss/ ؀@>~t{b憖f&OE I*.3 B(ܟf_6e“mAR 'ConH[pCpw_^X ]0zYW鄂4FCp <ĥ`0D(,>1BSZ@ ǸIN^h4^gyoQ`0'iB轺жZe6DH),߻W=, Ohա Oǧ؄vrQY]C}ej-q+8F c t^MfH9_"v,>T?0dHaQMBj4~hq2I̗D|kzJv΋DŽ<L* VǚK]B>uZLcK@<xnxrٞZ֡yؔ i-k)i6u' kwi#ڟHh/)huVg0lhlWR [ ]/~-%iū ,ۂ"RϾ|DXL7D!j"$Y&Rֹ㾱F l:K2)&*R\t4 z1zRïS!g tk+>+ 0};EH09%&/(ӡ5;&Hh^f.7ZdNj˦%p*]awUy\e';, 5SG6 l]. 49gڡ2aV["[B= t`S%vN 骧+v[2{=ߖCms&[j~ơyO:#G~)q3p/R!%3iVcET-7?|6;ZP.Рvf#K*'#VEKH+|8'qBKEpQp+d*WQx&";>a֗ot3yz5t[s\-bVhxBri=tfEtmDxoGDJ'+1YuҊLE1Bַ 8ˇ(*p[ mjE|kYVxa6%:OK]'#DCb GQ36OU#C鯡m썾7חWe?\f_߯-_ʧ[hQ ?5QO ,JBY{1C~lNB@tA3SW[Ꝉ ezn%LXQ(!}dBTN͠ށTMƏzKjnjh &5M%}Yjl۴liW-kcfx7?̧K {Px"G'E =Vӥn,~`LvWy@kT}Zp7Wo<@(AwVe@p̤*8Xyc~RH{βdLNpi`IA7YʴiW o8|iGZ |QD>5&áܽ 嫇P\}my3} sglbhpNH-V3]*Ejkۥ, 0k3Q}L$5pu|x1 :fYA@1>$&=RhgO7FM. *\]қl:8뵸fq&WQ)Nശn?={̲}铿5 =4(&uîє[!M%#O9u+ 䎵|\)_ dJ`/K~+ܝ8<%^oBV3o }(뼾H|8ГeUPtDHk" `.QbE,7_G ,GjF2ϣPQn;Ie@ϊ@-"{DsՎE@̏ku48v=x{(^s w|pަjv`L3~WTsztzNe s.L֋ :"8ԤV]Wy7[N8kJϼfi&4@.(#'d0ȝa[TX-IjA5Uk?`%;ߑC n }x_Ͳ&$ZR24q{2=^Ƭ[jzZpJOn^Uqx{ JHҍ9HYk/ zӭ*u)ޢ&%<3jMjA+DW9ڌ)x׵. R[Oqf|9A7Nq1UDEP'-L['=5Ԩ~\ۈ OHB6O NMkS+΁Aҳ@愱c4AJzs* R&GXo]-,֚/p'r%XAs& ;H,펥-\R^fqԘr?&l*Ȃ!dLgε8/C{B_2ҝW MDJ⼯mk/ujyoTOt{k/.tE aؒR.JNz?[DbS\YH/ ]7aKI(?˞8ⷛI.}dc!z|s[~w'2mv:7v/ͽt!ӾTx1VHt{*ԓi:Yjwb[L}溦IS+K0}Gf3+!?@P󯛸lںo!{;Oi:uۖ) ?Oz .}(-ܓ?ERqVݟqU'Jh_qѝ63뭜zjH۫T` d^=5[ű(sW{}Z},Io`b+xд&evhVFj% #MnhС#\f@SA"/ ڣj  s?LGU(/?„K1 Q mt;ʇKZ[W}i)I )-G &!{eviZYZ\~Lyk;'UQD]{Jo 8:!%voy=Ѯݠ37y(?g37,S[9!I |l1'@m4j4 aţoH Y߈YU20OdNT(Ny62>s^'oe)Bȴkg=<%VȐ7 [ԂMx)Vv2O`$B/HB+yo] -_ w+$Y]T|J<~*lrx\y t/m`ϡ\1ʿkQ#P(귥?bxL& TX~-:!֘:&4y&AvMGtJ82+@itUXzSm;)#L 'USPg&I36Pm >|=;ӝ}0:2eD[7,L1X> WR7Ēg#Ji_hM?i OBijs_%P}vij~bk=vOF>p3{GF61u$idqG;?vպ8)0; 3<&4D1z_dyK$JkvX4ī?X+2zVcH'0{s/-^ #:L1);e_ .wSC7UZCo^c F6`u"?{[̖p4G$J?tt$,OnZ6LD@-ۣpk1͸Pщ%m23?3ζE|Rpyvǫ$c-zKEc#>ĵ9u'/$ ztQ@W%6)"Зr5 : j.&b[ cV(>z<9sJN,[MTKقJsL}@:Ƙ>0L`)Xfj+1۾lt`i曔/䛘@&4ΰhrDaiL+W i=2b[m/:z;|9K{9U,Tb-O%qwAN[:[]V^认#(yj}fFS:.' LL{zU.?.;v8wS!5{1.Ȗ`f+mKˬn<|?V8ʲF4MIU&G˦gtmQ=%t%Ο4ù,_ܐrc[aUM|Ttm}ka!,I/7Ƴm3rsyi-Jԟ9,2];o8we%ϩolĹQܭ 1 6©!zo M{t%l`{cMIIˏ*&Ql4uH}mk3_Ȃަ^h30hgR;uiQs 7nC]NR> TqڧttHjYx>(Ճ Lm >|h QPZ),dp9q-%$ 9q-6ZV d>QfK 1\2VL()ЪK?$ |Rj_mN44G&K ޯ$"UJbD?<n5 endstream endobj 544 0 obj << /Length1 1378 /Length2 6059 /Length3 0 /Length 7008 /Filter /FlateDecode >> stream xڍtT.(1( !!!ݍH C0tw#!%%*(% -({׺wZ|Ϯw?k'g*#(>~$@AD  @D0t! Qh"i!uw'@@TR@L@"EPGnD o$.W !!vw8@ApeuFW G .){E;#v20=@Ez@mh&' (O0 @`( "5M pnN7W"w0A80(kP`/ {aN`k4w`xn$s5"W-+mP8ʍW0$vo:p߿[6.Gp;TM/m"$DEPW b)ˌEBDn`(to?ODDɎ6CmG¼f 4_=Aw~F r&O^I1qA?a'V nH}M/\4k$Tc,/wCNN\ s @-CCV jswo Mf>a~;Mх (Ԝ`p. ۂˇpC ?*!_:H7M'AZ6PL:`@ZvC ssDo H$ZhyoUC^P8 ̡*{'bstIgsⅯ&sWy+rto"yzKSCa(u.8deA0 G/'1߶21xgX۵«fuSm3-/ۼkƾ51'K@e=Š%7_x/%ddwu h'ZAIOΖۗMO^)/r*5}ss՘{B=P'LFVihbCzV#0UsA6KzךUjV'R=&91t}m\ ysƱu.c?e&4HQ62֬"~?^3WJAApxm:f>,w0,/UE_B(\rMkY fWj6{_ĩT,f̯-3_^jf !ev孛*}V_)aVPuHR=?1F K1ܭf k(qiq]fOZT2U@k:S } p,OQ,l RVx{[GY7%\IG/.;9n3ȡ(V Ѯ y>eFܪS3d[L&$;|zY&IVw)B0D>Ēʭ)oE9xg!=ސӏɀuv/-4_?_9qE/֐ @"9ԡHꊫ]IuȩکvaF]#3. X-4Ms,~AnaQoΒPL,?q"n,+[D@n˫i^9$+9/FA>'O3/f¼g*s fGw.!8sw3o< ]6S{-7a&* #U ? uܔH6Fj=Vq='ky6@p,`{r14'YJ|WdGL@Si⥁buJRP_?K@Rΰ\{Qx)ժ"Sxߊt&(9$Ss}b HqA0Wi棏θ_ynj;^? >%J⣊ud^\5IVTo+OQwq{#:%s8[%?{ǽͦ=x;n:.f%4AfGK۸=Mԭ6gNfOa6ݲŁLorq#ҍV]&<*7m5RڤAOˣ.n)z!("Դ_Or~*4ȃ1,97;BM G掍t=~+sz(*`-UuI swVhR?y&<;?>d(} ]Rya(bU}H_+UfnmJdmHf-}5"$cc4!p-GʔbL#fON ag~az@Xφ$oDglA,-#:){=/XNv1w[DwA^OpCxɃ< >2oh=0]LTaȪ.Sfz8π_Ds{1ۺ0x v֬q%|ǭK{Dx9*c9oľ!T]8eWuԸiZxv|f;|wSFmbenQQt|_w+y +HpQ@DFD msmp~sj_ӗɎ9JI?(b qq K Owܴ ŷyJLqLsx}ϒ'zg̕~DR!]u-Oiuo_[t37VrZ\ nDFh;ùMeDm<3u>ǵ.0Q%4 Û'tkiFV#V[ڿ:$3|9q%nL/1\c tVUp1YO,MԔx'7&o=:+SPV,Zq!au`nlYױs3˅tq9|7뼌#6s xR<y#DxD_aKlL$%B̲ jȹ8iܔ7!0=8}qrwDMNnw_ 0 3  |!&ӂSA߇^k}a j|alyEV6\UH5\J!MG-S9oSW/rq*5buGpLwq3դ/֫>+?Ŏcμ_#>n⛘#~IA}8e\s x#\͸Ǘ1uݹ~3`@%B,I.#VmoBK7 :"uqL̍Y:~7vG,x+Ol &=N0;l;{0j.յYP3dZt9CT_f`m`ÿ=tztg[c{ 4# ϔk|r<[jw{=p@S _] hI|"dYudw>%NIMiw=E5SPsjeM֮7bCGqS e}3S ~O_PUn C%D~&=0Ircb\vZ#c4F|Ux_ظR VmŴ[ FMD4b'ii;H&W*LJ@)FZ&ŰWۼ=mj^ߖStٱ"Յ M^g e6=sEF84VlaXUQVب}4@9w SI`CN͞4uBP 0le'c>ڇcZ¢'ࡥb1ͱ?opcXf$ST-;YU{0|wz]z~ yꨏq2F5a˛G:HU/QD.et(BW2j]6M`ӅVYp~ZzM.a`t~7h-yZ<*Tm;$=AzG< @utA@& On/ߢ zFBÎ:Vyy:{6=eReı[ăl8d vaniO O3.pvQ~bz&x !V&Ӂ@[zXS˼6-G[= zzkMN\`P ` poÙ#U:8O1$-bÞIiF!T%mj}::>Ow]F~щY,]:tK}f6g^,>)4_khZLNanKEvGiA;QӼ Iq-< oBo xN)^$7ge4^ l6Ig 9?榅F!JM^f87H'ȉ2yHy!|n!"jU嶓;}}^Y2I({51V-Kw {҃Ń 6smGVZ/ tCM7q)[c/&(Q鷊eӢ`3`w~1a_kiç}ߞ:VcUi+ep|rAO[ӨRYy9)e$5'PcGGAy )"Sqdy @=ȲX)㷨ӦC3s &zKNb߂6/B4D|as7~tYKiqzֶ;6 䶂&! {jZ\l%@PY-ADm=[;.K8N:2OÛ5L$y,Feٟ$in]^튰Qe!W:RMkj6#S)dR{G<πպk;+V - ''.BPUZܰ6ǻ?><"~mUΉ;wj95f|i" =W;g(v0J*3~(,mw`yбw2 2Gq]3^A<Cz+tFY|*jCZ+լd XjH(ps Y902F)LP 6V~?$>WH;lSvL759="zYYݒughԗi~'NU]-ocPS]K cm wŏC?jcxp{RI9_?ZIgkΪ\ >$jE;jD?[׌qiyki0rrē+w (Hb.UV P\Ϯwiٟ:|I)f1+i舠㷰S3񻕼)b^V={޿|j =!N9چwyQzV~.xY8 ?]ǚaz!ŷP>7d-Avv+۩.T_WI/&> 1RI_O8Qs{BΤ\:r_r(>"b*f "˼.y-IZEyN])н+G*>K5Y /:hm&"JrvT>+mg-e hn-Hwz)lOplK~q? 'ѩ(Roc endstream endobj 546 0 obj << /Length1 1989 /Length2 15310 /Length3 0 /Length 16538 /Filter /FlateDecode >> stream xڍP[ Iwwww='C?9{UTͼOw?-ku5SCIE(aaf`ʫI33XX))լ)5NV X:21c𻡼= b `f0s0s01Xkh3v23dA@gDJQ{'+ K{>MiܜNV 1hjoj{/|`#3 = l P:\fJ(S"%@ U{s.2). 3=:@UZX,#+пƦv +Pc mƮV&J ! 0~?9:Y9l/7,2Έ'f4}_wl _dn23 3Fu PZ?6"Ŀe@0 tM- /{ >^2>VD/gcW #Dff)`!] 47~'+w.{1zϓ{كl=63ʪHQػ3Y>ۏWdnwߔ]`޹@ߍdEym6Yzs]S o> k ͬ\Vl> o;L lj\y읭:aYLLG>d6杻{kK|Wdjoװs=ߧ f02{>s{'Ŀ6(߈(70d0JX#.{STFlFA<{t7}+acKbg7d4d02{ZVRۻ8nb `` ]f?{Ave`e{v}Q ?ja~Oc-Xn ?{~nCwg^'ջ.NN/׭MMyk?}ٟdaC'p=T{f͋\;|4)$JRgSOSgV98)όT-Ø 5gC}fO ׃ca 5ȮrdЪO߾Z6ڶ>'LkfK#z:cXi4TR-mƅf[0z͸y|RTc)}PyWXG`jWmi-ERݍUebb,exS#xrVR|I#Z߼vݼoܷ]}5p &We~m(ijM%̑ɒ}\y*MK)v](gd#ICM1y͐rc$[>Is'#%<-b e,4xτ<V aS8옟$[?3- =Sn&4]q7?0˓F7׬n9atkx&MP?z$V>9A8+و?~zx{q4--(t1ԯ:&M"n:LDpce(E t vEXq61 POYn\dg1,_ 2z7Z˶Wy_$&}$a+djFW.*FY3 dx]|Ϻf$X=iզU(Fm#8* vcK,$'wͼS%iQqgi=w 0}.,FKM~O} t饜.պIo2Qj7􁎂JJ׮l<.C:n@s]w `{̺:z=8m|9~mT/X7V`{|C!?hT%r@]?gK&a>2k1 Fh~EY9$4*&\%فp $v8i c_DIP&6ͽ}j+Way2 ^9nS0̨1oV] K*rSI9P<`Cm%mK ^՝!Z~5M&˂hM!EERSOnsYj'7_|9+oN8U}VN^dL4:lt'jyH= <]mC=ӭ&O:b,P8ne!UQz|O.Ȃ|Q-V\29&"h/(i=Ǚ4>fZR۩/b!pu-=hsjMd.o)Ù^4o[o x:ƲT,J|۠ٚD[~ї%-t*/8 1$ ƳxD-J jAa~\dIkk@,-C# ԸT oˏ- ̏T(*CL0ϧدݛGtv'NI %`Gh9lӀ96}q%;~pkn hƣJSP<%,n{/~TQz%H0di̘K7ҫ-Y{۵·]T%VnYFM bn&ﻠ]fRB?}&v^8mtLY.Z줬Ù}*zs* Uھc,4<= Ei':5m.>:ldsuA]pgnti4O3\4IX!<1 P腮 {æ=PZ`]C'#0N xc񆢜!*`~aryyޤ9E%̣4>ޭw=Vxx*d?e(,Rp_֧CĚ/|Khę[$e|i_)c٧Kb?Y:4Ǎ2ss 倘 #X2Dڢ=cD[!|&VnqmqAzX}s6jr Mg N R}}k^ZҟNZz*>A:pbl33 T6=9<#a (I!B4\^Iv7*NśN//XBHM(7 Y0|H3f&wdB"".e"unDo$F+_hMŧ] : hwqٍ=ɞ'$j%3g: 7oDo~X;ME1e˩?%mL'ϼ3TZA# c [Q Qxp p sqٟ1=V税*# F$eoCk8ۺlLABqxuRz],4Nm5FꓕpF:lŰOrQ\m@f=2@让xM5s繿9l{s[g6lk ]ϱ_gg>0Iqa[HzΪZ Z`0[}AYuplԉ'pz&sxQhވ[?TԲA:#^M'vZh8|sU>+Mk O!O Z,scݤn)> P EWv(q]W XedP6)RG"~ȩ*JoЄ/rAG&,j?*T.(C5cݮg' t ֯W^ nkgoL{_ο5X vȄ-.蟺Yɍm7d$HIW?V>h_@0cI]PJM'b"oC.qOdQo>Ql Ǫ}@ aw!U"6h9_2f (sW~jC `|l@na;tM+s=uس_Pbw4mQw,yzv%pXџ.@OX|'Ly f#%]j+ϖv6{r0T(1Eꑥwr6x6W8A4pL=cL{^oRý[>i\-Y)uߎ[Xsa+5r\s)7ZG=ϾگՈ^Ǿ'EJ|dq 7TaAX0 5'8`O&H`@XuElI ;rJvU_1?:=z?-N8A +5dj?!@ݨ_XG;m+!Xk}s)? R d4o %c%ݤSiVnID^~'7Ȣ&ޑӝHMm5ɜX6=I{oWd<5ƒĪaᵤ0V3;hX(Al8~EOUv*zV8Bګ{t3vF`lP_«FQ &A)_uzѦ=[ b1'T1ٮڮN?& Wt!ͻIrIiKbv }' ܊R Yl`J Z]肋K#֞NrbO s[H Osu@w1NDJq:lÚ~˩I:\\&}ZJrK+4n`2TӜmNXa_nfμܪeaLr"ͧn%Hh >vK*QEji3:\aXNyMH|Vh)q^g`r=jVD0V0)enV :'dئE0_-IPA8NDVS h 0Cai ABjP ෱.:*2EC9R$e]/^Q*>})#w!N]5&AErmB8X[14̒I(˛RW2Dv&}ɍBFAM㭺_A5yeEedY s1*^+Ό2t 6X9)6Ăd͖g@Kn[$+rY<',@=PDͥO\%M.21BFP344bTAkT/Q!$ԖyuM#7/.޻PUužhPNqyxfv$\&(ZXd.Wtc a7jQҥMH1[OiK )7h=|0Q,ԙ~ק @b  Qn;nZWA@NI's[sr.j'J*V. uvN̫+ ^DiɱsnPc2~mT&0GRovZswنm{.Dx`]Hz)oinM^>p>o[mssǎ7coj@AyӀc|kd@3hxɪyЭ,p*jl:Ge֠f9w&.8s*(s&Xw2$/Ŧ)[>x :foNf֟1E#U_9!7G=\:q!k)0(EBHcU{w|ތbTc鯧 ٘1N4[0_'=#f'QB~~?ɛEc#WlqO?T 0HЮ, MRwcuE(>}AKy5 AB:Lg$ͶQQoӓkr>ƲTLK$IsS.:}ƭwU| YJ~6ۼL:A@' qm"֮u 8u~d[֮ƗD+[SDXJҲbYP5xiQ2 *&R  uRFǚ)'ܮ~8⌝F-H&>fK-Tʈ!IN_=Lu{c]gCy cFKiV>$-/ 0/[*+#֯҇B2u.N豆׏Zy6#>$s5w9gIf+zKӣWl1F Tԫ}X8,ZSI'MESstH&xaV񝉧eo%Cn F::W UOm?8WGv[^РuU+ex9M-(~8 " b\e`ΒH@1/~'JIFzg[,qrM6WHnȻ;b"i{:4jI^|tnBXs3\ߍ|(..pSuFfyJ`:glmƂ,~i5 ڣDMvs(}r40E6Zwܻ>+?:]RoLIX_jI; ,O9# b1-1]̊.ďm6ҩz!iO+F4$ tBRv\=-{+.-ra-}3jK4n81&;!iq5WW?nFA+uW}ߍdPX'y'rW y%p÷>6\醔רQk HRl>Q7&crpYê;v6mIZ]Kӹ#E";= 4"' 56-G'Qawd帇 }wؗu9oh%Ρ(x!Uqf!l<}w#ЋKe;d-^EdRwz8l׫֔:pK:IYOGj=4C@F|{N]02:mѦGPӽfv@&G~kerV=$tqijDGɁQU{QNw9CCFn}ag/%$Fouhy &(Adc9КG|"y .Mgo]񵦴oLޮgefZd^gs۪;zI/@~#I.g"4lj۝>Sr{:(7!fV1.̣8Ha³_1z Ƶ{ uQAF'] n%bΦ;&4N.--f˒-ٜӞ -xS|m+ ^8#Jz%mG@PőaT>,v8Ä.rt+ z(Ae\<}7aDJn WD]^Xn_?}.<93<Q2#g&5`~U V*m&On卒1ج5zǒ$?2t8mı&&Yo?'VD -WsW~%7N`=Kq(fOa#~qvKڊ$!E1 |_T$G'ԇ_ ߆c<#qʌվLi( 1-$G bXc[=El jtʻQk:r `q6( #kTHSOkyK%e6X׬XS/O ,SqV[@HGVv J4Ƥ%AwM xۮ08\}Xam s@+ʅ`7BAuNOԛG|7Ŷ"\rf\6Ɂϔ$5<X-ԛp*I=yyЫDlc~]byQgͯE 4o$t=%KQ!Wߢ X>!#ɊFEW.EMAs֡F֑OZ#OMw)z"vmv 2 u/ȵIhy{c|\){gu7%7S < g1l? SFLD FG@#޴dciSc0%|!ɡXl _0ϏVGr4@eɺ}|RkVlUv*U1Q<1RxELzM3P蠄s|؂uz (+""UK?p$>bI@ Q<P}1^Tza}#|T|]8=; nc:tږF~aAYFsTmF72^ĴqBMrR}PsOm[if&FX?<ӇU6?k^č' ;.g/Syqm(s==t~"Myr֠V *?X<ts'" Wwͫ^ =R=Üf#i "*Swe)DŽ O Fr`icߧ_|V'>ZX6$RF~c^e0́T0W.Ӽ6Jw]1uͯQ9LZZH#C}@MX^xo6}+1)UQfJ'N zoE;9;ͪ\(` gW|Ke>,+~ {+uB0V%b4y!ż;~i~(QC=%& +):6F\=[䰣ݒgm?q薌at%|@/a[̾+\tp9j ʜ3Ulx0E9FQ5ޫ;}  2"Gݬ&-/½*O3(EЕɖer!Q7ySJ:nlpJh&ߚ'+pyVT [r;“C8ۗ~[ 5D>UX 'WgSL ,RfuJ"-锢[#cvrw'O;e '~LcTT9CM˞CqIhyD e&>Sh+Wf/$/ZI-؄Xۼ(f1AC>o7 ,>_δ (:?_k³~E nGŽꞵ´I3da X'kXcFI0i1W:^'O&w/2Hx `T䵈>F Q)ѷ)3a' t5<{ 9Z_o,% u{c$0 ]/ݙ)ZLL Pv鳱tM@Qm3}qַo)Dϼfݹ/ft+|rsgF AnJlaNށX*~B1/vɌu"5oFSCS¤5I`@#$mFxh_d O *WB_O orGN<.֔$ ;-c<*EyYcv P)/CѿzoaiY=%c ܣ=֊?lWlpWO,^qcs@JNZ_TU!,ϕLa4(aYOw{Kڶ% 1^OϺ* G.  oh(S&56' w^TvSGĐڰueIJ]ef<"( ; ?_xAhM rZ<8@gHyd {-ӫ*vӑi5m$J1+]|͐!ztM^18IV|uYQaSL'r\=6.bv0z/EER* $Zڳ/Cv  9+JHSZ:]\Q_tH6k.%F4Z! 5VtW5H&26E"q_w#PeM.MԷGf&:נy!;i>MB(>e[3E}7kԥ WT^gWc 9,i_4> djYچ5R,7HMȶU^ySЦ;S_ yl:Q-HxyHCqPxT<34QN%Pꜳ%`c/*}͢*&d^^hdmLܦk%Uk7r"o=G #7KNXH=?V0F5k(9GYDTa!k?F^Wñ{ib*Q_jl Ix}$JF#)#&o?r+- dcf6̚m[5?nP;K/D5F6CY1qt|3ɦyLvަ`%=~A6bly+-lSPK<.ZY쥞!r I[ W1DNA]ݓ^IpO\|(ʆ$_HFΐ2%A]ߢp8 /Fem?df -;p#mf.$= >};G. @Աx<`na5Ԉ.@_5&~nؑO$fnA`%9X d8Hq)&PBA֩Iz/B#iv݆F/;m;mNOM ;RVnޤMqinǟ|u?vD5זޏ& , ¬Ӫj*a18/scՏhH=tDzxޭ̽z9?n-2Q2̜GUb)IR@_`Ѥ/1ҭiS:!bY^rh81-YGvc +9 HڅqNa)*u7vx3NJ#iR00֟! (ixb"/k(EQ.u\ ]%~g@ȴ%TO#+ɴ{ 7̵c}BOoPmgR t !O*l+[v@3w`xcQ7Ψf⑊$5aH(< 5fBtyҒ`Če7Lf6oA@}Z!Lje.Yf\F. C$}sT*_?. ʱ%s;6$(Ѷ{ 5 ~}*|JM}LuP*{:m1 cdB'b 6ԙwpSԄښm!X7a `p pv*$h\r{afޔ`m,[)9$Q ~s\י|D]gz00Fz2, Қ?df)uG4T}N@Iwc4w4{ .ebsN/; l~R4h(*M_-Z'Cov`y\|'9fdυ<>ncmTyEL6KGL1{ O227$b{|K}cQ_).6abv^y=/zu6,S<#>aE_5Β.,MjK\I*~CZK0Y+,iu "X7LD\hǿq~bfoi Y7FTZz-0EY>|u1@-=CaG:=Qz5{KgSa\y7ܩb2#c"bBgrmS4RFm* [v|ӝV]0R1,] 4mJ%ыrd ;)7k,c_mBRsA%F l*KQBFٱ}޻W D1yUayh#G>lWx>&bӦ4s.*mNb#]Mz]G-z0K "% ":iҶR}!B.V 63+}h:/ཱ F Q+ok}39y,Zvˤ.qPpNfn!sB(nȍgTCUb.5 BMzA҆L/dz/ǀjaRA:_aW/pP tf/~ݎ+,JwG6LN Y[g2Xkz>>-୩'$%h"T+ mM"7\$MVChf9UvҪ'q1j5޺|Ύס|c%J+gl!T=\c^SwF<§5H?w=`V?+k1DR5}&1EYMtu3=0r&~9oaycM*JM6_#JA{B\bV}Zi S]iw+Ti޵j̆ *O*4)!{s 2w#ΕMlr*j]6|_,bSZjQE|y L0/Ҍ $2/-\P"˛ T)4INn0D.=* hodݞ:ȫEmq0I`ZUv>cBmXGOA>E᪇aTvi"9QюS. mHJ򓘵D0z#; 32c'b}g<~pji"<)ctIpUZ3ݚLMB>Dv CfJzz7=yx O88b l @d>\tƮȥ'd.K)hjKpL>4Yit|GH1CS|2O Y T; ) gV Ō+݇Q5'L ՂI2"& FN45I^R).(,!X endstream endobj 548 0 obj << /Length1 2037 /Length2 14664 /Length3 0 /Length 15906 /Filter /FlateDecode >> stream xڍP۲-,4ݝ}pw 5[>dUU1G+  G:&zFn'L o3,*d!{M=Ndt0ع8̌\8d ,PQ8hڛd ̀'X@F@G1stf`pqq7vٛQ\@3WYkߕÒ+L] 쁀w=hx?$! ,w-w`gݿ"2W`bnȉJ;: l 4r8[K@T@`^s07utw0DhoYXdm qtK= "lTl휀y7ljd-_Nxy؂l&EM`= G{'?`FC w3o|{sW1ϗxl Ңr4W Acfc01q18?F2Jؘ\}QrPK>@!fdc4z+=_w sC:q{['ὗg;> .$ v|]Xwd5FNo4@+ved%Т.Fׅ`a&Fm_H_%?|Yg0y唹RRw35cps穃Tw>)e&BƱyKc%4E=v)i~֯J@?JCq%Ehzx̕s~L6E\i/ I]^%3":61ugƋy~J.ύL=^an_]CCAKjH/lDIllmɧ P ,pTҜdNiG@ I8tb]^Rܽ/meэ6Y&/u%xTzP8J;aXEn g ف` nیEJO&Q &-Bk\eI4rgωJ 7ˇE;)g07VY$˴(M84Tv5E:A{4j" ׼hM@/v@ I&Y/B槸qD¨3'[OD dzC!\:sj5f+rYܐ6Yn[N4vX bڝu*'QE~ ;.J(KOe$X>edR_9>$)RqZ =%6\ ` X89Fm"k!bJ"Ct 7%W |i YVv6l('8࢟= <Gț7{kH,֯p3pY R"NURF*5wz.,uIbb]^Dؘ}"uӪ z$sG\ΘJH<| ;[" ;ګ$S%0 e~/EO5219咗&é%191z:~wPV8=#Tj*9_fů.+.IOԳ{ @$U\gqnA ¿)HybD5HkA1tWy8'Dq |n[+[4)\B4E櫵[Lsm; H#Tֈ̱YvrJfR5^ͬEn+LYU )^Q 0>I􆹻,#rQҕK?$4fue647\i`SYm}xPG'2nH8_XAd*]4LC(qK@qh"{t񫟍O@i8H-itɤpA=Jܚc5T~T=gՓ7]ԗgN98klBnaQCQŢU*Nh9X6̱DBǮͳRqh`*нn][E@qHBS=[a@=BV9pXFjyn4v{}.yjZ|MBƊq(9w5Y{20]SOY:AX[G`cvZz %gU.؅)]9G$sY2_`ELD埧eY$S5H3 ٮ{_mYMMK`,q~A 짂J7AM~Dmy 0E0iFӑyBY CR cQ3rAu\]`edg>WeYcMp"BJCZcw{-q **tE_oE"%0ORm[L' T!0Ѱ롛v)LFͥLO!@H@IWwh*{QnG]K(F1>@$,.ޭɢ$(Mz!.wk‡̅#E3}–!D;Xv2s|0%`؀ke<-#z _J)ZJD`fa8Xւ}0tmRLl_/V{*0H@.lNLZt= aK4qE׼v|<=g԰,o \ae oF" ,.=A Vȥ0d\Rf$쑲2:!0OZ :ҜRSVXCC-{R?^W&8$׃cB|]?6@-G}ֳ4\[HYޞ]'$ 1G9Gz+tHQvPUà)іA ,ij`Gy>59ӑ;n&Lc ՂŒ6ˈً@H!|3?`7wlS3SWcr#^a].YK5h4%= Hy㧠o -^ D$W9vkD[Q)}|Oe/ U)EZjB47bRTE*KMYu' lws=51uk&݊:,}Uhߑd)ETTQ󐒓AȰɜ:"rizb~K!LM7!Ak'k!4,?Rp~j چG-'iSA:}y@$!̧-^!MKضwkƨF/F1'W٩_8~"||ܨgSPuOGJ㍳TSNQ1X AUƅSN aXoL!T9PA?1c_(,9\]^+0yW^{{y&)'1 $s@Ѻa(B4K%B爞Y+!en'G#qXA΂Du_$Njԯq%(5 wobnw"IN]=}mxXPn/p3`սʸZt?A$)SاMnLFy೴QJ:*Y; b NY Ǘ;d/ho!zec!&^BƎ?|-[T#@Ё(8g|ЈI94COȀbL .pa3UV>RXRI$1kyo.Ӛ$K8wnŴо-KU2pq{HPyq> v5"V ؍SEq5|dOmB^ZM)b bȞ 'b߈[CζT7`1Fižk-9\"].ʔMMA-=6'"HdfToo%d}:z@Nb̳Pu?9=b HqfV`8R&3D.o0ID$e[wlɿ,ڲ& h?`),s{/Q o?S׺ CboB?nI*wbBraEG)B+l:s3qS;|lҜo$e`8axy~:pT>18ȔWejG'l@=A+'!;Ȕ^6xaPvɄXғ-L* +5v2H!޷<5FUB@>ګ6+d" @Kfs; C!J¾5+BbdvǩՐ"5pbhg'~C6Ͻ5(L0L]:#T( F fdK=#}zb=2O6beLjo r:UÒ mЖ? Ugrpt̰WH•|n߾Ii#?ZleƨOQs8N =|mGA "yDDsf(8 f{* ka`HE}_9 XyMcH$ze,5e%_¸kES@5l?){?xfsHW›C#ex!)&<ۨX'bT-. ;7QPp,d0_K_'Gb7g7&7rBBdn8K1B=5/PVc(;'%U\7 !{(m7p:` opo~5\.}*z2u}ZЗ]9m.-giA|kC̺W^(ƚOA)6P좁EjWRŦw" P`7ݺyJѱaRMJHRuL9EFO'|(Ʈш"IkT?V<~nEXf ՉcC,kU$"ͽՐha<7ZÊ('75"45O6G qU0ŧ|gv#kIn&3f֣PF05:?l'+d@(J`^|߻`Io`#NtO,ۉ%%~]i6W?uas  MaJ15"v"uIY+tsh%lAᄼR':ODQ p"4 0K|fݵWe*i55*(eƑC‚AI^؝}* 4 7qwr|+8_lJ`UuTf&n3E)d^F$_RZȲf :RH.ۉE*\bB3 RŀwVwU0&LTs~~ZET."C oTi,:o&/C wPߖ4iQ*Ѹ"={KG휋lg񩔷g$oXUX\[<˝ .GQʱ!$ht,Nv /,3"MEAs]9odScXe Io_v7%m K7=5L\%x>PYEϑUH,ތ|GIĹ}+lbiSbTŷDa2+p ˜9fr(~cAǃ*EMDQ|Mce0r @j/Xi. "6N}IC'k7[U?ђp pC$Gf'Qq{ 31k.%v_S%`xMAW4*|ZiiiT4o Vm23(U. ϻfԥxJk9Jprh"t .GmBF*R22 sHaHh$V+輓 :xN2o;0jy6gBьOWEIPHpNt)q5qfk*98q2zGhr4ؗy$c}\=OBm''FlN?#$[lӂ5\94vDʕ8G p]ʙ-ZcLWt N[[r1 |~a͏lĐt:%ghoMTҖoKPY[$JL{B,(H'L"F0

    ˧Ï66`5{|΢PB+JQpsl]x_?ٺf֨aKcwDkkTq! "oOG$;Y.:8 az:Xgc?L3b\cNZFpےش.bg`Dh^Y"%Ս絬v BD ËLU'&1xlLAu SUf8g`/?ėjjP{&wuqn %<҅?p!]|GbfeEm&:3f{(K#<l63փaW^le P! ڂ?<@I57W,>{w9D0\ d/mS958T[DqQ9jY.xP^0\k&Dmw@pFP/yRUsO7M%ySIɾ 7ŊXd߶xy1ɖn^Ɋ6jnVZ EъNleI֫X:II(u=XwVuP~[-.dl˚@ˠ`ٕ< Y ?LȧQwicZ0Rf.8> s^ܡB+dCcYźh*q_N(f:znUIm yaI^MXAhpg8x0\uMܾp^ h-IZv\N `ӷI xJ!y CnOSbi˟QH$Uq^m88k!tHK;p;2d~N.}6ႍ`jͰ*.Ig?~:%*y3HfLSXRN%kq46Ưn3Oټ+{1JpNJj B60émR3ŴN*ǩS$:@/"1 ͞7|܁-Pw qvwbbsPvA2{l[~෫QxT+o,tW痧6Vu2P>0f#Vp@yc=^M+ %TL֑Ὠ|p :y՟upTDƓ{n>D6=Y]DF򊫢j啍z@AQ=(EbgfP'qM6FXǐG=B:Bǂ2uXij3Dp;niRm1aPAivo^w7O1fex?SN̉X,2,K0&K:~~5@K2H% C#K{='¸&æ}[v}@ZP  Se`( sXY*.(ƀKx^[b+XJܙ.P",acHY諌B65ˠ̔bC3BL ݛM7`ʀ@D*W<1rp6x391K2 ~,Kx7jQY$1FH3քRFn`{2CSeH?(eL>f h У#㍸t&/ϊ0O?Ï;9.R+摈a84٭C5o9C6|)iiZ])MuyS$3ːwnA`#@(ƴZ?'a EY$Fw ,^)l0:S"k5;-0} 72$ Vv 4sYZ%vE.ӱ7עfzFGn@-ѩS+ӺڕUNOVCkrKT{tKIQ^)fJ6ZAwQp JhX59-OGSK3s=e5^f2\Yp}#|kfIMPIҠBE_+e=n/HXUcmHLG١$RqrDLƖ^X@8Jp>vD%sT}'&mvg/9X!PT-V}}vw"K#&Xh$~ڮvBRG8H~v,7'?[o}ZSN'ZK5Jct9ě%8;k|P!3{d^1*DY-V\ID2m~W&e fRhctPnhg ӗX>R(>@W,ZTP".Li0 ֈUYkj ݷ>FZ߰(oKD1 D3#^"rQ5)B}V'a>; PghA8aW9,ˑww/g@giQbe0QK2𛉆$Gjs =56<"zBU.$$I_'WO2g&mKtS봨 ۚXi/O~A+@nje2G[p78 W,=q.]SvBu]o;~}jֲ8]nגO!Or_ ۧ!ڒևMD 5g[[52xD$jP+l UufISzD:)@jPrWoA|}3aʓmʕ[Ht2 ,BY0H^!#WiGDC[UUuZ/#ۣB-dOD,201}|3/ w1h cc~< hq:6a"8{q*DSM8@|Vm!QC ^cUKqǜg bB7 '!<si_-.ˈ|Wm62$F/p[XURs2 \Oi9EQd֓ =ϊXj[ZLJonư -- ȻD ~,.TZ.d gt"Bk~ΨjY^%틥⡻N=ܼYv8(U!N`DOֵ`Z\hǧ4=UqrQ:qa5aR&ێmy;BḬmliCPf}ѯU+oSHݶn}ӫON\χeninCB$HUUu$9OA^@{5fa-X d_fE<,%#epݲ߆wzlIlQImUrwq&Dp ե#.ԇx2aaMSkEimQ95ÎYm{~' IV,qF@.:):U<4U}Ѩ7K萻jWs&7.CGeˈRӖ}9UncLůڡ߱phۢ544%zwwSbcgM^-^-pKC^X˔)h,C;l/*{*=i—wB!F-',+%N%v?sQ .(_L)guz`0_]yD6E@B?Ý?U=ErU`6Fr=]Z' x*VLpA_=-̝S KyJ~&Va>} r9'^a9F @ik?=@jO,=-2S7|x1 :~0kޙDÜP6an _bV!&U6^Ɓڡ3i_Wha:D݀"j L~VyZM:(cСpcm̵SLxI!A0}@v)OyAܱ~["JvHSNO2˓r’--;jBg=MwG2VLUCX5aʔ5^쵼ͨOIqRZm4AH3I Rg'E\XQs6l!PK 9!B-o+Xb4A'%BFҘ8vܘCR͂Q2Lj]zދUH*8JhWp ʹNKvuE\Ȉ7B:Lf'[Y5, qJEv%o߂-ek[(Z~v1 J 2smA^ȶJk6]obE\S'$8 &Bx;07O&.jv'NX@#ӫn *~L&(ZU7&RPG\z.{iGIƥB] H f|gy3vtk75v~`]-̥^J+GfH0YqŁT_Q6#/L'X[q.6L~l (Q' O;3E\ChH5'Kl{u $X-hmaE*RVT̉! #n.D+me R endstream endobj 550 0 obj << /Length1 2171 /Length2 8362 /Length3 0 /Length 9640 /Filter /FlateDecode >> stream xڍuTlۿH(fctHNaNFn$DZIT>wYtydlV0E$ ȩ@0/Oʪww-&`5Hr(-ԑ@b@ !%zmU$F*tAin sr8Ppk(u93ZCHk8_!%]xnHns._JO1? ,n CA=aw,Oſ[`vph1/>|` D9zl'ΗOGND믎"~<~0?@P@ $* w-("=UH_IO?߫w, $zfa#nZ@AQ=~5zd=㯎D/M a:Zw(z dvNwS{l/s#`ZH7;K+kGᆞ_*zmQa_B( !Lj_PB/ xHw ]"yB>_HS>H#Q?H=:o$@ABhRgSX:kH~g`up$w@otݶ]u=S@6ghf8 t# ]C3_jt3.`.GMo)_ vA/.O s-kK rב 3GXr-Ϧ.1R5;S>N!I'SdMLC ؃NO}iĎyv[{_'[E"i|VbŊF347/;ŷǔB -zT F̐:>p,"jUw72uZ!Y_FNzn_>(*~R +QO2CcaWjcN4"J=lG|:^U Kr/4pNõ_# ƇֲXU0S+V=M''lj{UԇJp*1 .78!W% qJV@H^I!pcHiL@dt̵:A\hCGMBL?_~R.9r+>.>c yQ^.ݧn|4wS 9I"!-!ʡJ%I7^3QhB*Չ_/Z9ѐHWyĵq4,°޳3YN^z4\#Ԭks2'١ceLz0m*2/>b![y4o4p2Yxۃ>{Yt0ZiCƷPA!{ݣOԘ\*v8>NVg'2XUō|5Pe)'ۙƞ"%y%ĽE|Ndye Mׄyl=Cf圱4+ ux[d#K=Ċ hup/%2Tk ;[ k8’0+g_?A}U'=_>tK|sWБnOcPwX)N#c"3d*[{Ha"B:!C#g,)4 Up D"A|mw)RE<V \hdWצ.fЦi^F88iX @+,=2magcK+;[Zio.? (+4strĝ3-&DFOd&nuA؂%c} P#jgJp4"]"L*SL,p4 [&)Oȅ9;" 7_8I[}m^zƅa2ճM"M"ι̎qv7S$vYP+>g P9O͆;\|ZJ鈛Z<j6䨍JA Pf.2v'}tQ+m=d{fMHQJ%u5\2T?+1SܔKo?PɆzLubTpA/Ei+~]n=?_os/)h܍LtZG휓z}ǓMopBRwQNkᡲ@xh#bNQ⛅EiDMi-"5ieql7p\[X+>evaa^.F6,MH rp}JLuWӂw'MK>f^[y0UTjt}fE(SKˀV+`RK U.g|ě@R(YI(mEq;T(a`q|xJ!0.B[B'>𶯀$9YţqORT#)K(U\^TCfi/UƥMziYX __j=QRyg"hanyjVd&ӧ*iׁ oRh@A׍O-3 CkNc8S?%1^Ҟl 23E˛2Joyw p+TcSnherk`,:<^EZ?Bx8 i'1sB'->y2dWYQ_.\M{}y^7虐喝|KgHAd봞'0H?6ҍdzOԈ؏cJy;2]$/ _}L0p$Xt5b=~:6cUYn:?sEo>eq]0^Βlcbosxhɏ]EA<6voqOmhZ&?fR7i( w]ìi|y> |qwfYECIB "|bH,X5gN]"ȸn5Յo2c;Ɲod!. j7=O76V56e1PYQɂswog_wBxsZ۟qB`]kb'`SWZݬx.y/4jv3(qkbZPe 2`%)Є*5=9'jZ]IjA|Fr{g|ͩ"rECݯo3XӘ/>yb &. oكD pf!;~vP\ک@BIf[支YbG60 )ga4ߪ+b&"_Dҿ|~i)._KL}[ي@}圓Wsz &g ~a)$F{)*n٨,Lpu|D)wxi_DDbِKj[UN嵴?5!>3:?3VkPv{I.lA|9<=O1@wL(03p9DG}@ԧ{7Y}P9ߙTA:`gkLlѹ~a@x>K1Lk,hTƑ\)O% v tj\t0R|3 xtne|xOdu`Lk..KTD{8zg%Y3 g49yI1SZ]?޿KQGYNv(z7]@;o6,q# 2%1Bgg[^Ü:SHd /k_CTL r~ -5mK'j\SmNdClp: [܀\ZiX"Mm;.%oI֕vS)*hs] LT[hcqj^ڐ_(=)6AfszAhpt]]7hQR߿R\R 1T9o)9bȌ1[K :5 -FL٧='k64" #rC=8T yvxiQFx5  ~۞\r%پ͏Q4nʊ,*7hBr4̶>+{#΀i,E n\ 9*fDMErIƽYu=ސDRi͉^vvoٖE.f U b=o(l n69z|^V;=aCA{K!%>?J#v;{Oi4;ۄ^?Mr͕pM/U]kݦ ]/|'yd U6~(3\Xwe;MކEig"kV}(匵;{އl"mIez6%!>qMCW\~5A_uxoK` ơU%Tz}s~G^[<=_^i8oMymә ;DGtFVi A1|el@GUi>3ԹQ! x3h~u;:Һ:/߅1=)K73[}C1jHsfn\ }mu0+wtdK#I"nAgRtw^` BxAMdH5p&vB$|ϼDJ7d'H;N xL MF;"~-4М!!l &l鋱Z̳+{I2wծu'&na`M)hyD׫E&'<$[oNeC_>xY"͛Ɨ;y5*zhW.L1WUk&;B2?6]8sҲgbR9753pL{ 6G3(=eB& ɜ~}ܕ =1U,'3m<l~RL@"ǓȗwBcb[@6Nr9 esfظ~"+C T4I6*O lV6pi,?<7لB"Krm_n"~?tyIt ܘܚbm"%6^P%{yXvOG3G ]݃(]ǩ$AwTݟ9+M܄o@Hoxv+m+Mk؞<>bɔmQrft)0Y-\5X+{s}x Yen2|bfX=% !e+ }mDMT*BN $}5B=: &lb&AGVyҹI(M7 "elwLDusYn-+A_S—e[NIνMfO^3{S3<ղQ%~pvƵO$x̄n9]b{uG6>X#$=#r)ngvgryߜc nE' ϐ||j[-W}=MTc̊DLaf )eCr"첨e[ :?aZو%v4xyN|5N+H_vΒ/( j#b?{B_P'8HA'M 7ՏS83|yD]pӸ ҭ^e=Ɣ8bX5@%DiWhlp9|bSQ>)ԡ-13ZfdRީѿ}WUݷ[Drt$G~5`Ǒo@M%W/#1@{7 }ʻCՊ,±?.-I^k] ELUOBs1^g *$XBg];h*smRɤAyNReJ}ICPhT9'};$HNzL%d6W @|4+F`%`z1<6 +SU蛥$asLz4J$`PyU^7@E 7 El۽\3KqWFJm%*,a c{ޒt tRSq+hz "; r;aW+a kyGy,SO+_Rti#=ۨ䛋%L#J"6*fIG)R 1_$! ]WNMMF,WX&4u 4:,WBHH}:JT;aЧjp0D'HSoĮQF0έRO6^$??;۸gIPD8olKnu3|f)e}н`&W'++CZ'j_4,r.ampr΅7kir7LB&}eCB ~&z !#s;ɤb3ZpB99ijvT=wqVfl" Sp+P}(~l6Cqh5I-g)^ R:& 01dV [^\^mddMK)D~ᰞ\U5ʀ(6e"7sÔ 1Ŋ 0^SوK l:D ">"x`~#Z؆'=e`Pc_/NEPk3?gmёiuڶ$Iyu`q U3«&ֿS[DWG P qWjU 7ҞWT>,RG^RZvHZ*V&.$cp?hCFJ iK`ͣIR#$~ K@VYT2Gd _qxC:3@[`LH8 Mp/2AV܍mn{XG%d&7 װ>E}Z KGdB2MM^(;jƂDsYv#c(NA[P.4gO?*{]C&%4-ȟaGcڵRa=q@qGDg-yI&،Z8Ht[ATL9'cSֶ =k0%x-{ap.ah,4 OH1\/|L9صasC,p/OןH/," fRo>]v5ʧkrqQN!J$|UvCzgsNxS4ΦB=9|s\YDb+* UZ |T"?Lmq-rrm|o0٪cf ,ǁ SkҟzwŽ[&ugJ/{&̽# 8 ﰯ=,[3]Yϳ76JVaF~5VGڟqRf^X֭9si J5h(6*E}f7'o*t{`~54d,KgneDTaxhRD̔|ork cl=uW$׻kvL.:aP_@U!e@qӅ/2?O\ v.{lZLL0Jj W Rm7RLJhȊ½}Ȧ$:egЭyuD"h&K:ңZ9E7Z! ~>)%$7iY5 Au\A}޽k&iT'Qژc 7e%0yezֶ񛛳=PC XSLT_@!jt]I;G;}M;Z>Ák^T4Jҩ?UO bi*@V #P"򀦛{}Y㧎Gm~EhÎN7ب p&hA2ٌ}?YxR uuIo}5;{_Ǽxlj/Yn ۩CDx݀PdiM)% XU2S{vM&hE~L֧~ dSwn-/^5[1&FW4z>9SxYj'|0<+G*p'/]~6祡l2%w3kol^clgz-u6c+/dhmŔšiPqcz-qSu6"-.|N36~Dmқ8NIՠŝ%ڛeӓ!sqY\4)i=?cxmkdSmKҌJ[o#/0݈AXLTGcZ{a^9JD7IjvXg0!BWU:+}'En'ZIҞbU,D:Чi@}J,5@H6w;q߁ V*_9#d[H$b`$/6zpI~~DRyGv0ItY" na~൰)P)sӶ:%/󕺚k5ok,6b@T)#w1%o8Ӻ]Fw6 #Zuz>0ʹFnXN~Z$}DяͻG045c.Ӳ\e0ddȫUZaۄY:$3}U< ?tB4Cw2yvɹG]s(HcS {YZ"#2CpwS`1 8$Sl!XE(Z``}}a]_ȍsTo`uMDd_VDQ;NyO"jԿɏQ?!y^ l@db$NB0C3݀j^lvdGʢ gyNo9Y\:`9}n6akv6HE<Mss<C_|.+i~QbvAj1& RP1C!tP:v~YbtXSTJhP#՘ҢWtRfu ]|@뷘4A)N/]\TʪY_ަgKןW#SЄW'Ioză0,aE2.[0Uy4:wpd~SnrƋXjȭښAnힼ>?(MZzs8tu0^fˬ?x $iʊA_euT\[NDެXWV!iAH$'.7r<{Eh={ر$CiUhHB-A3V-n ת7ӟlP0,TZۮ^dSHX̽ߤ& !*0 "; تrt*Od!!zn{DZ'ĥ ;10͊e}uz2iš1ͣugkvo9k3xe^ eGC -Kʆc>ɱiv)Gr ~/AX5hb <`Cav*J]i2Ͳ3C! |;BT)@6I*8|vQ0`k!X4`z.\|H[sF.LH JPa!Ʀ1{v{Q?֔?nz@t$EXIP/k_L ҹxBA8П!U[ZZE>Bkzu~jQiMtOfߔ>Ep-OVuV`M @rLMId b֕kWg`:Ո92Ѻ!ha eg<7Ϭ69>"r)ϴlpkoI*φ Ae-[?oTKNٟBfqL0 Ns͈VC$+UMqYnZ? aXUAO Ft@93` d;ˌ&`|y)CILqfC?%kkR/T 0WKsnzܼ)+&%. o;d$w=>Л@⨴9VO.th>na(@Qx-e߃QvaKJ۹Xu 'k>a9xufdRtU %~&($h*8?ANȭ/jIsoɿ P&jvtL[}ݡ&|[7A*uLߧ.Ϧkzjþp2!|j=6C0Z%p!8F$9|JYNgi܍Iߙv}"%kB~ ڎbaP\ [SDDizdh_nlby63.] cʡkIzk('?;4A8 t/2[KC. Yŭ( 7DшW~l;TtTaR:a'ǐ:9Feq+=kZp | !3plX`p0'Jt U h+~St{,a丏Q PVh^" әW'Q8oUH5. \{iFՐ_oh9SvGN0ۻCZ^ jhoo#IE7opҹ 9[:)W+e; BF؂`|XU m5őASGC%Jh]f١ksGD)~Sލָu ߙu3Yym.0o5Oii>U9lKnBЏq󡾷!ID>PCʓixSg%A(P&≡j FK/C#ߨqJ!Sw)Oޮ ' wyy kqv!ujboD8dW)A4IxFWi9y ``!p={xlfGr}M wqwb (9ZS[a5|ˈT!Kjs }}厳ߎxBz=9XvWvYn(㬅6ک,23OQ =AFedrՁiPr +P'nû唼#yr&u!`(%эe1߈:)=C|Zv("+rݗ5:tg'!JYsXhr6Z} ŝ[$3 qZ]"uNQNoo@,^(pBp}0p8U3G/R̗}iEp2e@Y]=DoO]V6_Qk=fk+eK`6*0aUlpYc\̄g.?%ẏ+#yBy$Dc)n.)ms\O#BZuLA? GR?U /,>xz&l@ΕtM> 0N FB𤠥3A|x¬-FÀݮ>[ rZC,* څĎ ojtfR ]ORo+7àGA-#xE5": ߷q+N֠| ?BVnAG,#_̸Dn$ǺP. 1f^'kj4&6Ym#ǫ&8) "WcTB; hpM7QrBsxL\nG$ `s&)igO-L E@p#)v?J1 sc3bZe" w*%nS }'0U1r`(FxJ'.v3nP &,="!2-gMMT |%rm8yhIVKfTρv(d}xuۡzU$4Y){H)E2o=%M *)ʋTn9Lr P/PւXo;b/leF1.?@)w)$m1 ni>gHOe籞S71GZ$' 4r@3Z YLL|ȸda R1*`fc+D6j+ %9 3^3@8"w rr y*}B1ㅭ\As4‹yА$Ĥ[5[#i5{KӑPdt%#FB%6|h(J+hiThz!fLV HZIa{ %βT4|aIpq7 HG g6{1@䱗Ky ByS1…W}|۲H?h>$quD,p8^̃\xnb‹SWEgYZonedrive-2.5.10/tests/makefiles.sh000066400000000000000000000034511513710110600170460ustar00rootroot00000000000000#!/bin/bash ONEDRIVEALT=~/OneDriveALT if [ ! -d ${ONEDRIVEALT} ]; then mkdir -p ${ONEDRIVEALT} else rm -rf ${ONEDRIVEALT}/* fi BADFILES=${ONEDRIVEALT}/bad_files TESTFILES=${ONEDRIVEALT}/test_files mkdir -p ${BADFILES} mkdir -p ${TESTFILES} dd if=/dev/urandom of=${TESTFILES}/large_file1.txt count=15 bs=1572864 dd if=/dev/urandom of=${TESTFILES}/large_file2.txt count=20 bs=1572864 # Create bad files that should be skipped touch "${BADFILES}/ leading_white_space" touch "${BADFILES}/trailing_white_space " touch "${BADFILES}/trailing_dot." touch "${BADFILES}/includes < in the filename" touch "${BADFILES}/includes > in the filename" touch "${BADFILES}/includes : in the filename" touch "${BADFILES}/includes \" in the filename" touch "${BADFILES}/includes | in the filename" touch "${BADFILES}/includes ? in the filename" touch "${BADFILES}/includes * in the filename" touch "${BADFILES}/includes \\ in the filename" touch "${BADFILES}/includes \\\\ in the filename" touch "${BADFILES}/CON" touch "${BADFILES}/CON.text" touch "${BADFILES}/PRN" touch "${BADFILES}/AUX" touch "${BADFILES}/NUL" touch "${BADFILES}/COM0" touch "${BADFILES}/COM1" touch "${BADFILES}/COM2" touch "${BADFILES}/COM3" touch "${BADFILES}/COM4" touch "${BADFILES}/COM5" touch "${BADFILES}/COM6" touch "${BADFILES}/COM7" touch "${BADFILES}/COM8" touch "${BADFILES}/COM9" touch "${BADFILES}/LPT0" touch "${BADFILES}/LPT1" touch "${BADFILES}/LPT2" touch "${BADFILES}/LPT3" touch "${BADFILES}/LPT4" touch "${BADFILES}/LPT5" touch "${BADFILES}/LPT6" touch "${BADFILES}/LPT7" touch "${BADFILES}/LPT8" touch "${BADFILES}/LPT9" # Test files from cases # File contains invalid whitespace characters tar xf ./bad-file-name.tar.xz -C ${BADFILES}/ # HelloCOM2.rar should be allowed dd if=/dev/urandom of=${TESTFILES}/HelloCOM2.rar count=5 bs=1572864